diff options
Diffstat (limited to 'test')
129 files changed, 2236 insertions, 0 deletions
diff --git a/test/Execute-Tests b/test/Execute-Tests new file mode 100755 index 00000000..104853e5 --- /dev/null +++ b/test/Execute-Tests @@ -0,0 +1,113 @@ +#! /bin/bash + +# Confirm that PBM_TESTPREFIX is set. +# PBM_TESTPREFIX is the directory with the Netpbm programs you want to +# test. This can be null, but this is not recommended. +# +# You can set it here by decommenting and modifying the next line: +# export PBM_TESTPREFIX="/usr/local/bin/" + + +if [ -z $PBM_TESTPREFIX ] + then + echo "Warning: PBM_TESTPREFIX is not set." + echo "Programs in the default execution path:" + echo $PATH + echo "will be tested." +elif [ ! -d $PBM_TESTPREFIX ] + then + echo "Error: No directory named $PBM_TESTPREFIX" + exit 1 +else + # append "/" to end of string if necessary + export PBM_TESTPREFIX=`echo $PBM_TESTPREFIX | sed '/\/$/!s@$@/@'` +fi + +# Set PBM_BINPREFIX. +# PBM_BINPREFIX is the directory where Netpbm programs which play +# auxiliary roles in tests (such as image generators for producing +# test images, analyzers to summarize output and so forth). +# +# If testing a fresh install, this should be the same as PBM_TESTPREFIX. +# If you are developing a single Netpbm program, you may want to +# set this to a directory with stable executables. +# If set to null, executables in the default execution path will +# be used. + +# export PBM_BINPREFIX="/usr/local/bin/" +# export PBM_BINPREFIX="" +export PBM_BINPREFIX=${PBM_TESTPREFIX} + +# Add PBM_BINPREFIX to PATH. +# This is necessary for Netpbm programs (mosly scripts) that call +# other Netpbm programs. + +if [ ! -z $PBM_BINPREFIX ] + then + export PATH=${PBM_BINPREFIX}:$PATH +fi + +# Set tmpdir, which is used in some of the test scripts. +# This must be an existing directory. + +if [ -z $tmpdir ] + then + if [ -z $TMPDIR ] + then + export tmpdir=/tmp/ + else + export tmpdir=$TMPDIR + fi +fi + +# If necessary set the RGBDEF environment variable. +#export RGBDEF=/etc/rgb.txt +#export RGBDEF=/usr/local/netpbm/lib/rgb.txt +#export RGBDEF=/usr/share/emacs/*/etc/rgb.txt + +# Declare arrays used to count and report test results. +# For now only "SUCCESS" and "FAILURE" are used. +declare -a array=(0 0 0 0 0) +declare -a status=("SUCCESS" "FAILURE" "UNEXPECTED SUCCESS" \ + "EXPECTED FAILURE" "NOT SUPPORTED") + +# Execute the tests, as described in the "Test-Order" file. +# +# To execute just one test, or a few tests, replace the grep part +# within backquotes with names of tests you want to run like this: +# +# for t in pbmmake.test pgmmake.test ppmmake.test + +for t in `grep -v "^#" Test-Order | grep "."` +do +echo == $t == +./$t > ${t%.test}.out ; let result=$? +case $result in +0) cmp --quiet ${t%.test}.out ${t%.test}.ok ; + if [ $? -eq 0 ] + then let result=0; rm ${t%.test}.out ; + else let result=1; + fi ;; +1 | 2 | 3 ) ;; +*) let result=1 ;; +esac + +# Print out a summary report. + +echo $t: ${status[${result}]}; echo +let array[${result}]=${array[${result}]}+1 +done + +echo "Test summary:" +echo ================== + +for s in 0 1 2 3 4 +do +if [[ ${array[${s}]} -gt 0 || s -eq 1 ]] +then +echo ${status[${s}]} ${array[${s}]} +fi +done + +echo ================== +echo "All tests done." diff --git a/test/Test-Order b/test/Test-Order new file mode 100644 index 00000000..2801878a --- /dev/null +++ b/test/Test-Order @@ -0,0 +1,89 @@ +# General test + +all-in-place.test + +# Generator tests + +pbmmake.test +pgmmake.test +ppmmake.test +pamseq.test + +pbmpage.test +pbmtext.test +pbmupc.test +pgmramp.test +ppmgauss.test +ppmcie.test +ppmwheel.test + +# Analyzer tests + +pamfile.test +pgmhist.test +ppmhist.test +pamsumm.test +pnmpsnr.test +pbmminkowski.test + +# Basic (internal) converter tests + +pamtopam.test +pgmtopgm.test +ppmtoppm.test +pgmtoppm.test +ppmtopgm.test +pnmtopnm-plain.test + +# Editor tests + +pamditherbw.test + +pbmclean.test +pamcut.test +pnmcat.test +pamflip.test +pamenlarge.test +pnminvert.test + +pbmpscale.test +pnmremap1.test +pnmremap2.test +pnmtile.test +ppmbrighten.test +ppmdither.test +pamedge.test +ppmdim.test + +ppmmix.test + +# Format converter tests + +pbmtog3.test + +# Round-trip tests : editors + +pnm-plain-roundtrip.test +pnm-pam-roundtrip.test +pnminvert-roundtrip.test +pamflip-roundtrip.test +pamdepth-roundtrip.test +pad-crop-roundtrip.test +cut-paste-roundtrip.test +rgb3-roundtrip.test +ppmchange-roundtrip.test +pamdice-roundtrip.test +pamslice-roundtrip.test + +# Round-trip tests : lossless converters + +g3-roundtrip.test +bmp-roundtrip.test +gif-roundtrip.test +png-roundtrip.test +ps-roundtrip.test +tiff-roundtrip.test +xbm-roundtrip.test +xpm-roundtrip.test +xwd-roundtrip.test +hdiff-roundtrip.test diff --git a/test/all-in-place.ok b/test/all-in-place.ok new file mode 100644 index 00000000..52334382 --- /dev/null +++ b/test/all-in-place.ok @@ -0,0 +1,351 @@ +411toppm: ok +asciitopgm: ok +atktopbm: ok +avstopam: ok +bioradtopgm: ok +bmptopnm: ok +bmptoppm: ok +brushtopbm: ok +cameratopam: ok +cistopbm: ok +cmuwmtopbm: ok +ddbugtopbm: ok +escp2topbm: ok +eyuvtoppm: ok +fitstopnm: ok +fstopgm: ok +g3topbm: ok +gemtopbm: ok +gemtopnm: ok +giftopnm: ok +gouldtoppm: ok +hdifftopam: ok +hipstopgm: ok +icontopbm: ok +ilbmtoppm: ok +imgtoppm: ok +infotopam: ok +jbigtopnm: ok +jpeg2ktopam: ok +jpegtopnm: ok +leaftoppm: ok +lispmtopgm: ok +macptopbm: ok +mdatopbm: ok +mgrtopbm: ok +mrftopbm: ok +mtvtoppm: ok +neotoppm: ok +palmtopnm: ok +pamaddnoise: ok +pamarith: ok +pambackground: ok +pambayer: ok +pamchannel: ok +pamcomp: ok +pamcut: ok +pamdeinterlace: ok +pamdepth: ok +pamdice: ok +pamditherbw: ok +pamedge: ok +pamendian: ok +pamenlarge: ok +pamexec: ok +pamfile: ok +pamfixtrunc: ok +pamflip: ok +pamfunc: ok +pamgauss: ok +pamgradient: ok +pamlookup: ok +pammasksharpen: ok +pammixinterlace: ok +pammosaicknit: ok +pamoil: ok +pampaintspill: ok +pamperspective: ok +pampick: ok +pampop9: ok +pamrecolor: ok +pamrgbatopng: ok +pamrubber: ok +pamscale: ok +pamseq: ok +pamsharpmap: ok +pamsharpness: ok +pamsistoaglyph: ok +pamslice: ok +pamsplit: ok +pamstack: ok +pamstereogram: ok +pamstretch: ok +pamsumm: ok +pamsummcol: ok +pamthreshold: ok +pamtilt: ok +pamtoavs: ok +pamtodjvurle: ok +pamtofits: ok +pamtogif: ok +pamtohdiff: ok +pamtohtmltbl: ok +pamtojpeg2k: ok +pamtompfont: ok +pamtooctaveimg: ok +pamtopam: ok +pamtopdbimg: ok +pamtopfm: ok +pamtopnm: ok +pamtosrf: ok +pamtosvg: ok +pamtotga: ok +pamtotiff: ok +pamtouil: ok +pamtoxvmini: ok +pamundice: ok +pamwipeout: ok +pamx: ok +pbmclean: ok +pbmlife: ok +pbmmake: ok +pbmmask: ok +pbmminkowski: ok +pbmpage: ok +pbmpscale: ok +pbmreduce: ok +pbmtext: ok +pbmtextps: ok +pbmto10x: ok +pbmto4425: ok +pbmtoascii: ok +pbmtoatk: ok +pbmtobbnbg: ok +pbmtocis: ok +pbmtocmuwm: ok +pbmtodjvurle: ok +pbmtoepsi: ok +pbmtoepson: ok +pbmtoescp2: ok +pbmtog3: ok +pbmtogem: ok +pbmtogo: ok +pbmtoibm23xx: ok +pbmtoicon: ok +pbmtolj: ok +pbmtoln03: ok +pbmtolps: ok +pbmtomacp: ok +pbmtomatrixorbital: ok +pbmtomda: ok +pbmtomgr: ok +pbmtomrf: ok +pbmtonokia: ok +pbmtopgm: ok +pbmtopi3: ok +pbmtopk: ok +pbmtoplot: ok +pbmtoppa: ok +pbmtopsg3: ok +pbmtoptx: ok +pbmtosunicon: ok +pbmtowbmp: ok +pbmtoxbm: ok +pbmtoybm: ok +pbmtozinc: ok +pbmupc: ok +pc1toppm: ok +pcxtoppm: ok +pdbimgtopam: ok +pfmtopam: ok +pgmabel: ok +pgmbentley: ok +pgmcrater: ok +pgmdeshadow: ok +pgmedge: ok +pgmenhance: ok +pgmhist: ok +pgmkernel: ok +pgmmake: ok +pgmmedian: ok +pgmminkowski: ok +pgmmorphconv: ok +pgmnoise: ok +pgmnorm: ok +pgmoil: ok +pgmramp: ok +pgmslice: ok +pgmtexture: ok +pgmtofs: ok +pgmtolispm: ok +pgmtopbm: ok +pgmtopgm: ok +pgmtoppm: ok +pi1toppm: ok +pi3topbm: ok +picttoppm: ok +pjtoppm: ok +pktopbm: ok +pngtopam: ok +pngtopnm: ok +pnmalias: ok +pnmarith: ok +pnmcat: ok +pnmcolormap: ok +pnmcomp: ok +pnmconvol: ok +pnmcrop: ok +pnmcut: ok +pnmdepth: ok +pnmenlarge: ok +pnmfile: ok +pnmflip: ok +pnmgamma: ok +pnmhisteq: ok +pnmhistmap: ok +pnmindex: ok +pnminterp: ok +pnminvert: ok +pnmmercator: ok +pnmmontage: ok +pnmnlfilt: ok +pnmnorm: ok +pnmpad: ok +pnmpaste: ok +pnmpsnr: ok +pnmremap: ok +pnmrotate: ok +pnmscale: ok +pnmscalefixed: ok +pnmshear: ok +pnmsmooth: ok +pnmsplit: ok +pnmstitch: ok +pnmtile: ok +pnmtoddif: ok +pnmtofiasco: ok +pnmtofits: ok +pnmtojbig: ok +pnmtojpeg: ok +pnmtopalm: ok +pnmtopclxl: ok +pnmtopng: ok +pnmtopnm: ok +pnmtops: ok +pnmtorast: ok +pnmtorle: ok +pnmtosgi: ok +pnmtosir: ok +pnmtotiff: ok +pnmtotiffcmyk: ok +pnmtoxwd: ok +ppm3d: ok +ppmbrighten: ok +ppmchange: ok +ppmcie: ok +ppmcolormask: ok +ppmcolors: ok +ppmdcfont: ok +ppmddumpfont: ok +ppmdim: ok +ppmdist: ok +ppmdither: ok +ppmdmkfont: ok +ppmdraw: ok +ppmflash: ok +ppmforge: ok +ppmglobe: ok +ppmhist: ok +ppmlabel: ok +ppmmake: ok +ppmmix: ok +ppmnorm: ok +ppmntsc: ok +ppmpat: ok +ppmquant: ok +ppmrelief: ok +ppmrough: ok +ppmshift: ok +ppmspread: ok +ppmtoacad: ok +ppmtoapplevol: ok +ppmtoarbtxt: ok +ppmtoascii: ok +ppmtobmp: ok +ppmtoeyuv: ok +ppmtogif: ok +ppmtoicr: ok +ppmtoilbm: ok +ppmtojpeg: ok +ppmtoleaf: ok +ppmtolj: ok +ppmtomitsu: ok +ppmtompeg: ok +ppmtoneo: ok +ppmtopcx: ok +ppmtopgm: ok +ppmtopi1: ok +ppmtopict: ok +ppmtopj: ok +ppmtopjxl: ok +ppmtoppm: ok +ppmtopuzz: ok +ppmtorgb3: ok +ppmtosixel: ok +ppmtospu: ok +ppmtoterm: ok +ppmtouil: ok +ppmtowinicon: ok +ppmtoxpm: ok +ppmtoyuv: ok +ppmtoyuvsplit: ok +ppmtv: ok +ppmwheel: ok +psidtopgm: ok +pstopnm: ok +qrttoppm: ok +rasttopnm: ok +rawtopgm: ok +rawtoppm: ok +rgb3toppm: ok +rlatopam: ok +rletopnm: ok +sbigtopgm: ok +sgitopnm: ok +sirtopnm: ok +sldtoppm: ok +spctoppm: ok +spottopgm: ok +sputoppm: ok +srftopam: ok +sunicontopnm: ok +svgtopam: ok +tgatoppm: ok +thinkjettopbm: ok +tifftopnm: ok +wbmptopbm: ok +winicontoppm: ok +xbmtopbm: ok +ximtoppm: ok +xpmtoppm: ok +xvminitoppm: ok +xwdtopnm: ok +ybmtopbm: ok +yuvsplittoppm: ok +yuvtoppm: ok +zeisstopnm: ok +fiascotopnm: ok +anytopnm: ok +hpcdtoppm: ok +manweb: ok +pbmtox10bm: ok +pnmmargin: ok +pnmnoraw: ok +pnmquant: ok +pnmquantall: ok +pnmtoplainpnm: ok +ppmfade: ok +ppmquantall: ok +ppmrainbow: ok +ppmshadow: ok +ppmtomap: ok diff --git a/test/all-in-place.test b/test/all-in-place.test new file mode 100755 index 00000000..1726337b --- /dev/null +++ b/test/all-in-place.test @@ -0,0 +1,104 @@ +#! /bin/bash +# Tests whether the executable files listed below are in place. + +# See Netpbm Library Prerequisites +# http://netpbm.sourceforge.net/prereq.html +# if make succeeds but this test fails. + +# Test programs which support the --version flag. + +for i in \ + 411toppm asciitopgm atktopbm avstopam bioradtopgm \ + bmptopnm bmptoppm brushtopbm cameratopam cistopbm \ + cmuwmtopbm ddbugtopbm escp2topbm eyuvtoppm fitstopnm \ + fstopgm g3topbm gemtopbm gemtopnm giftopnm gouldtoppm \ + hdifftopam hipstopgm icontopbm ilbmtoppm imgtoppm infotopam \ + jbigtopnm jpeg2ktopam jpegtopnm leaftoppm lispmtopgm \ + macptopbm mdatopbm mgrtopbm mrftopbm mtvtoppm neotoppm \ + palmtopnm pamaddnoise pamarith pambackground pambayer \ + pamchannel pamcomp pamcut pamdeinterlace pamdepth \ + pamdice pamditherbw pamedge pamendian pamenlarge \ + pamexec pamfile pamfixtrunc pamflip pamfunc pamgauss \ + pamgradient pamlookup pammasksharpen pammixinterlace \ + pammosaicknit pamoil pampaintspill pamperspective pampick \ + pampop9 pamrecolor pamrgbatopng pamrubber pamscale pamseq \ + pamsharpmap pamsharpness pamsistoaglyph pamslice pamsplit \ + pamstack pamstereogram pamstretch pamsumm pamsummcol \ + pamthreshold pamtilt pamtoavs pamtodjvurle pamtofits \ + pamtogif pamtohdiff pamtohtmltbl pamtojpeg2k pamtompfont \ + pamtooctaveimg pamtopam pamtopdbimg pamtopfm pamtopnm \ + pamtosrf pamtosvg pamtotga pamtotiff pamtouil pamtoxvmini \ + pamundice pamwipeout pamx pbmclean pbmlife pbmmake pbmmask \ + pbmminkowski pbmpage pbmpscale pbmreduce pbmtext pbmtextps \ + pbmto10x pbmto4425 pbmtoascii pbmtoatk pbmtobbnbg pbmtocis \ + pbmtocmuwm pbmtodjvurle pbmtoepsi pbmtoepson pbmtoescp2 \ + pbmtog3 pbmtogem pbmtogo pbmtoibm23xx pbmtoicon pbmtolj \ + pbmtoln03 pbmtolps pbmtomacp pbmtomatrixorbital pbmtomda \ + pbmtomgr pbmtomrf pbmtonokia pbmtopgm pbmtopi3 pbmtopk \ + pbmtoplot pbmtoppa pbmtopsg3 pbmtoptx pbmtosunicon \ + pbmtowbmp pbmtoxbm pbmtoybm pbmtozinc pbmupc pc1toppm \ + pcxtoppm pdbimgtopam pfmtopam pgmabel pgmbentley pgmcrater \ + pgmdeshadow pgmedge pgmenhance pgmhist pgmkernel pgmmake \ + pgmmedian pgmminkowski pgmmorphconv pgmnoise pgmnorm \ + pgmoil pgmramp pgmslice pgmtexture pgmtofs pgmtolispm \ + pgmtopbm pgmtopgm pgmtoppm pi1toppm pi3topbm picttoppm \ + pjtoppm pktopbm pngtopam pngtopnm pnmalias pnmarith pnmcat \ + pnmcolormap pnmcomp pnmconvol pnmcrop pnmcut pnmdepth \ + pnmenlarge pnmfile pnmflip pnmgamma pnmhisteq pnmhistmap \ + pnmindex pnminterp pnminvert pnmmercator pnmmontage \ + pnmnlfilt pnmnorm pnmpad pnmpaste pnmpsnr pnmremap \ + pnmrotate pnmscale pnmscalefixed pnmshear pnmsmooth \ + pnmsplit pnmstitch pnmtile pnmtoddif pnmtofiasco pnmtofits \ + pnmtojbig pnmtojpeg pnmtopalm pnmtopclxl pnmtopng pnmtopnm \ + pnmtops pnmtorast pnmtorle pnmtosgi pnmtosir pnmtotiff \ + pnmtotiffcmyk pnmtoxwd ppm3d ppmbrighten ppmchange \ + ppmcie ppmcolormask ppmcolors ppmdcfont ppmddumpfont \ + ppmdim ppmdist ppmdither ppmdmkfont ppmdraw ppmflash \ + ppmforge ppmglobe ppmhist ppmlabel ppmmake ppmmix ppmnorm \ + ppmntsc ppmpat ppmquant ppmrelief ppmrough ppmshift \ + ppmspread ppmtoacad ppmtoapplevol ppmtoarbtxt ppmtoascii \ + ppmtobmp ppmtoeyuv ppmtogif ppmtoicr ppmtoilbm ppmtojpeg \ + ppmtoleaf ppmtolj ppmtomitsu ppmtompeg ppmtoneo ppmtopcx \ + ppmtopgm ppmtopi1 ppmtopict ppmtopj ppmtopjxl ppmtoppm \ + ppmtopuzz ppmtorgb3 ppmtosixel ppmtospu ppmtoterm ppmtouil \ + ppmtowinicon ppmtoxpm ppmtoyuv ppmtoyuvsplit ppmtv ppmwheel \ + psidtopgm pstopnm qrttoppm rasttopnm rawtopgm rawtoppm \ + rgb3toppm rlatopam rletopnm sbigtopgm sgitopnm sirtopnm \ + sldtoppm spctoppm spottopgm sputoppm srftopam sunicontopnm \ + svgtopam tgatoppm thinkjettopbm tifftopnm wbmptopbm \ + winicontoppm xbmtopbm ximtoppm xpmtoppm xvminitoppm \ + xwdtopnm ybmtopbm yuvsplittoppm yuvtoppm zeisstopnm + do + ${PBM_TESTPREFIX}$i --version 2> /dev/null; + case $? in + 0) echo $i": ok";; + 127) echo $i": no such file";; + *) echo $i": error" $?;; + esac + done + + +# Test fiascotopnm, which has a unique -v flag + +${PBM_TESTPREFIX}fiascotopnm -v 2> /dev/null + case $? in + 2) echo fiascotopnm": ok";; + 127) echo fiascotopnm": no such file";; + *) echo fiascotopnm": error" $?;; + esac + + +# Test programs which do not have no --version flag. + +for i in \ + anytopnm hpcdtoppm manweb pbmtox10bm pnmmargin \ + pnmnoraw pnmquant pnmquantall pnmtoplainpnm ppmfade ppmquantall \ + ppmrainbow ppmshadow ppmtomap + do + if [ -x ${PBM_TESTPREFIX}$i ] + then echo $i": ok" + elif [ -f ${PBM_TESTPREFIX}$i ] + then echo $i": not executable" + else echo $i": no such file" + fi + done diff --git a/test/bmp-roundtrip.ok b/test/bmp-roundtrip.ok new file mode 100644 index 00000000..67f7a1fe --- /dev/null +++ b/test/bmp-roundtrip.ok @@ -0,0 +1,2 @@ +1926073387 101484 +2425386270 41 diff --git a/test/bmp-roundtrip.test b/test/bmp-roundtrip.test new file mode 100755 index 00000000..af0e6948 --- /dev/null +++ b/test/bmp-roundtrip.test @@ -0,0 +1,6 @@ +#! /bin/bash +# This script tests: bmptopnm ppmtobmp +# Also requires: + +${PBM_TESTPREFIX}ppmtobmp testimg.ppm | ${PBM_TESTPREFIX}bmptopnm | cksum +${PBM_TESTPREFIX}ppmtobmp testgrid.pbm | ${PBM_TESTPREFIX}bmptopnm | cksum \ No newline at end of file diff --git a/test/cut-paste-roundtrip.ok b/test/cut-paste-roundtrip.ok new file mode 100644 index 00000000..82eac5a8 --- /dev/null +++ b/test/cut-paste-roundtrip.ok @@ -0,0 +1 @@ +1926073387 101484 diff --git a/test/cut-paste-roundtrip.test b/test/cut-paste-roundtrip.test new file mode 100755 index 00000000..cd81a1c6 --- /dev/null +++ b/test/cut-paste-roundtrip.test @@ -0,0 +1,6 @@ +#! /bin/bash +# This script tests: pamcut pnmpaste +# Also requires: + +${PBM_TESTPREFIX}pamcut 50 40 100 70 ~/test-netpbm/testimg.ppm | \ +${PBM_TESTPREFIX}pnmpaste -replace - 50 40 ~/test-netpbm/testimg.ppm | cksum diff --git a/test/g3-roundtrip.ok b/test/g3-roundtrip.ok new file mode 100644 index 00000000..bb0b1cf6 --- /dev/null +++ b/test/g3-roundtrip.ok @@ -0,0 +1,3 @@ +0 +0 +0 diff --git a/test/g3-roundtrip.test b/test/g3-roundtrip.test new file mode 100755 index 00000000..c5c21fa0 --- /dev/null +++ b/test/g3-roundtrip.test @@ -0,0 +1,13 @@ +#! /bin/bash +# This script tests: g3topbm pbmtog3 +# Also requires: pnmcrop + +${PBM_TESTPREFIX}pbmtog3 -nofixedwidth testgrid.pbm | \ +${PBM_TESTPREFIX}g3topbm -width=14 | diff - testgrid.pbm ; echo $? + +${PBM_TESTPREFIX}pbmtog3 -nofixedwidth -reversebits testgrid.pbm | \ +${PBM_TESTPREFIX}g3topbm -width=14 -reversebits | diff - testgrid.pbm ; echo $? + +${PBM_TESTPREFIX}pbmtog3 testgrid.pbm | \ +${PBM_TESTPREFIX}g3topbm | ${PBM_BINPREFIX}pnmcrop -white -right -bottom | \ + diff - testgrid.pbm ; echo $? diff --git a/test/gif-roundtrip.ok b/test/gif-roundtrip.ok new file mode 100644 index 00000000..011ebd3a --- /dev/null +++ b/test/gif-roundtrip.ok @@ -0,0 +1,3 @@ +2871603838 33838 +1926073387 101484 +2425386270 41 diff --git a/test/gif-roundtrip.test b/test/gif-roundtrip.test new file mode 100755 index 00000000..73246705 --- /dev/null +++ b/test/gif-roundtrip.test @@ -0,0 +1,30 @@ +#! /bin/bash +# This script tests: giftopnm pamtogif +# Also requires: ppmtopgm ppmtorgb3 rgb3toppm + +# Test 1. Should produce 2871603838 33838 +# which is the result of ppmtopgm testimg.ppm | cksum + +${PBM_BINPREFIX}ppmtopgm testimg.ppm | \ + ${PBM_TESTPREFIX}pamtogif | ${PBM_TESTPREFIX}giftopnm | cksum + +# Test 2. Break up input image into three monochrome planes, +# maxval 255. Transform each plane to gif and back to pgm. +# Reassemble the planes. Result should be identical to input. +# Should print 1926073387 101484 + +cp testimg.ppm ${tmpdir} && +${PBM_BINPREFIX}ppmtorgb3 ${tmpdir}/testimg.ppm && +${PBM_TESTPREFIX}pamtogif ${tmpdir}/testimg.red | \ + ${PBM_TESTPREFIX}giftopnm > ${tmpdir}/out.red && +${PBM_TESTPREFIX}pamtogif ${tmpdir}/testimg.grn | + ${PBM_TESTPREFIX}giftopnm > ${tmpdir}/out.grn && +${PBM_TESTPREFIX}pamtogif ${tmpdir}/testimg.blu | \ + ${PBM_TESTPREFIX}giftopnm | \ + ${PBM_BINPREFIX}rgb3toppm ${tmpdir}/testimg.red ${tmpdir}/testimg.grn - | \ + cksum + +rm ${tmpdir}/testimg.{ppm,red,grn,blu} ${tmpdir}/out.{red,grn} + +# Test 3. Should produce 2425386270 41 +${PBM_TESTPREFIX}pamtogif testgrid.pbm | ${PBM_TESTPREFIX}giftopnm | cksum diff --git a/test/hdiff-roundtrip.ok b/test/hdiff-roundtrip.ok new file mode 100644 index 00000000..82eac5a8 --- /dev/null +++ b/test/hdiff-roundtrip.ok @@ -0,0 +1 @@ +1926073387 101484 diff --git a/test/hdiff-roundtrip.test b/test/hdiff-roundtrip.test new file mode 100755 index 00000000..dbe74701 --- /dev/null +++ b/test/hdiff-roundtrip.test @@ -0,0 +1,6 @@ +#! /bin/bash +# This script tests: hdifftopam pamtohdiff +# Also requires: + +${PBM_TESTPREFIX}pamtohdiff testimg.ppm | \ + ${PBM_TESTPREFIX}hdifftopam -pnm | cksum \ No newline at end of file diff --git a/test/pad-crop-roundtrip.ok b/test/pad-crop-roundtrip.ok new file mode 100644 index 00000000..67f7a1fe --- /dev/null +++ b/test/pad-crop-roundtrip.ok @@ -0,0 +1,2 @@ +1926073387 101484 +2425386270 41 diff --git a/test/pad-crop-roundtrip.test b/test/pad-crop-roundtrip.test new file mode 100755 index 00000000..532b6cbd --- /dev/null +++ b/test/pad-crop-roundtrip.test @@ -0,0 +1,8 @@ +#! /bin/bash +# This script tests: pnmcrop pnmmargin +# Also requires: + +${PBM_TESTPREFIX}pnmmargin -white 10 testimg.ppm | \ + ${PBM_TESTPREFIX}pnmcrop | cksum +${PBM_TESTPREFIX}pnmmargin -white 10 testgrid.pbm | \ + ${PBM_TESTPREFIX}pnmcrop | cksum diff --git a/test/pamcut.ok b/test/pamcut.ok new file mode 100644 index 00000000..61ef99bc --- /dev/null +++ b/test/pamcut.ok @@ -0,0 +1,4 @@ +2958909756 124815 +1550940962 10933 +708474423 14 +3412257956 129 diff --git a/test/pamcut.test b/test/pamcut.test new file mode 100755 index 00000000..080bcad8 --- /dev/null +++ b/test/pamcut.test @@ -0,0 +1,14 @@ +#! /bin/bash +# This script tests: pamcut pbmmake +# Also requires: + +# Test 1. Should print 2958909756 124815 +${PBM_TESTPREFIX}pamcut -top 0 -left 0 -width 260 -height 160 \ + -pad testimg.ppm | cksum +# Test 2. Should print 1550940962 10933 +${PBM_TESTPREFIX}pamcut -top 200 -left 120 -width 40 -height 40 \ + -pad testimg.ppm | cksum +# Test 3. Should print 708474423 14 +${PBM_TESTPREFIX}pamcut -top 5 -left 5 -bottom 5 -right 5 testimg.ppm | cksum +# Test 3. Should print 3412257956 129 +${PBM_TESTPREFIX}pbmmake -g 50 50 | ${PBM_TESTPREFIX}pamcut 5 5 30 30 | cksum diff --git a/test/pamdepth-roundtrip.ok b/test/pamdepth-roundtrip.ok new file mode 100644 index 00000000..89db1a57 --- /dev/null +++ b/test/pamdepth-roundtrip.ok @@ -0,0 +1,8 @@ +1926073387 101484 +1926073387 101484 +1926073387 101484 +1926073387 101484 +1926073387 101484 +1926073387 101484 +1926073387 101484 +2425386270 41 diff --git a/test/pamdepth-roundtrip.test b/test/pamdepth-roundtrip.test new file mode 100755 index 00000000..2795d659 --- /dev/null +++ b/test/pamdepth-roundtrip.test @@ -0,0 +1,12 @@ +#! /bin/bash +# This script tests: pamdepth pgmtopbm +# Also requires: + +for i in 300 500 1023 4095 5000 16383 65535 +do +${PBM_TESTPREFIX}pamdepth $i testimg.ppm | \ + ${PBM_TESTPREFIX}pamdepth 255 | cksum +done + +${PBM_TESTPREFIX}pamdepth 255 testgrid.pbm | ${PBM_TESTPREFIX}pamdepth 1 | \ + ${PBM_TESTPREFIX}pgmtopbm -th -val=0.5 | cksum diff --git a/test/pamdice-roundtrip.ok b/test/pamdice-roundtrip.ok new file mode 100644 index 00000000..82eac5a8 --- /dev/null +++ b/test/pamdice-roundtrip.ok @@ -0,0 +1 @@ +1926073387 101484 diff --git a/test/pamdice-roundtrip.test b/test/pamdice-roundtrip.test new file mode 100755 index 00000000..06fef8b2 --- /dev/null +++ b/test/pamdice-roundtrip.test @@ -0,0 +1,9 @@ +#! /bin/bash +# This script tests: pamdice pamundice +# Also requires: + +${PBM_TESTPREFIX}pamdice testimg.ppm -outstem=${tmpdir}/a -width=50 -height=40 +${PBM_TESTPREFIX}pamundice ${tmpdir}/a_%1d_%1a.ppm -down=4 -across=5 | cksum + +rm ${tmpdir}/a_?_?.ppm + diff --git a/test/pamditherbw.ok b/test/pamditherbw.ok new file mode 100644 index 00000000..0711fa38 --- /dev/null +++ b/test/pamditherbw.ok @@ -0,0 +1,4 @@ +1421025574 33894 +164421928 33894 +486487763 33894 +3606822102 33894 diff --git a/test/pamditherbw.test b/test/pamditherbw.test new file mode 100755 index 00000000..5335f12d --- /dev/null +++ b/test/pamditherbw.test @@ -0,0 +1,31 @@ +#! /bin/bash +# This script tests: pamditherbw +# Also requires: ppmtopgm + +# Make test input +${PBM_BINPREFIX}ppmtopgm testimg.ppm >${tmpdir}/testimg.pgm + +# Test 1. Simple threshold +${PBM_TESTPREFIX}pamditherbw -threshold -val=0.5 \ + ${tmpdir}/testimg.pgm | cksum + +# Test 2. Floyd-Steinberg +#${PBM_TESTPREFIX}pamditherbw -floyd -val=0.5 ${tmpdir}/testimg.pgm | cksum + +# Test 3. Atkinson +#${PBM_TESTPREFIX}pamditherbw -atkinson -val=0.5 ${tmpdir}/testimg.pgm | cksum + +# Test 4. Hilbert +${PBM_TESTPREFIX}pamditherbw -hilbert ${tmpdir}/testimg.pgm | cksum + +# Test 5. Dither-8 +${PBM_TESTPREFIX}pamditherbw -dither8 ${tmpdir}/testimg.pgm | cksum + +# Test 6. Cluster4 +${PBM_TESTPREFIX}pamditherbw -cluster4 ${tmpdir}/testimg.pgm | cksum + +# Test 7. Atkinson +#${PBM_TESTPREFIX}pamditherbw -atkinson -val=0.5 ${tmpdir}/testimg.pgm | cksum + +# Remove test file +rm ${tmpdir}/testimg.pgm diff --git a/test/pamedge.ok b/test/pamedge.ok new file mode 100644 index 00000000..f1df7b80 --- /dev/null +++ b/test/pamedge.ok @@ -0,0 +1,77 @@ +P1 +60 75 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111000000000000000000000000000000000011111111111 +111111111111110000000000000000000000000000000000001111111111 +111111111111110001111111111111111111111111111110000111111111 +111111111111110011111111111111111111111111111111000111111111 +111111111111110001111111111111111111111111111111100111111111 +111111111111110000011111110000000000000000001111100111111111 +111111111111111000001111100000000000000000000111100111111111 +111111111111111110000111000011111111111111000011100111111111 +111111111111111111000111000111111111111111100011100111111111 +111111111111111111100111001111111111111111110001000111111111 +111111111111111111100111001111111111111111110000000111111111 +111111111111111111100111001111111111111111111000001111111111 +111111111111111111100111001111111111111111111111111111111111 +111111111111111111100111001111111111111111111111111111111111 +111111111111111111100111001111111111111111111111111111111111 +111111111111111111100111001111111111111100000111111111111111 +111111111111111111100111001111111111111000000011111111111111 +111111111111111111100111001111111111111000100011111111111111 +111111111111111111100111000111111111110001110011111111111111 +111111111111111111100111000011111111100001110011111111111111 +111111111111111111100111100000000000000011110011111111111111 +111111111111111111100111110000000000000111110011111111111111 +111111111111111111100111111111111111111111110011111111111111 +111111111111111111100111111111111111111111110011111111111111 +111111111111111111100111111111111111111111110011111111111111 +111111111111111111100111110000000000000111110011111111111111 +111111111111111111100111100000000000000011110011111111111111 +111111111111111111100111000011111111100001110011111111111111 +111111111111111111100111000111111111110001110011111111111111 +111111111111111111100111001111111111111000100011111111111111 +111111111111111111100111001111111111111000000011111111111111 +111111111111111111100111001111111111111100000111111111111111 +111111111111111111100111001111111111111111111111111111111111 +111111111111111111100111001111111111111111111111111111111111 +111111111111111111100111001111111111111111111111111111111111 +111111111111111111100111001111111111111111111111111111111111 +111111111111111111100111001111111111111111111111111111111111 +111111111111111111100111001111111111111111111111111111111111 +111111111111111111000111000111111111111111111111111111111111 +111111111111111110000111000011111111111111111111111111111111 +111111111111111000001111100000000001111111111111111111111111 +111111111111110000011111110000000000111111111111111111111111 +111111111111110001111111111111111000111111111111111111111111 +111111111111110011111111111111111100111111111111111111111111 +111111111111110001111111111111111000111111111111111111111111 +111111111111110000000000000000000000111111111111111111111111 +111111111111111000000000000000000001111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111 diff --git a/test/pamedge.test b/test/pamedge.test new file mode 100755 index 00000000..da1c0145 --- /dev/null +++ b/test/pamedge.test @@ -0,0 +1,7 @@ +#! /bin/bash +# This script tests: pamedge +# Also requires: pbmpscale pbmtext pgmtopbm pgmtopgm ppmtopgm + +${PBM_BINPREFIX}pbmtext " F " -nom | ${PBM_BINPREFIX}pbmpscale 5 | \ +${PBM_BINPREFIX}pgmtopgm | ${PBM_TESTPREFIX}pamedge | \ +${PBM_BINPREFIX}ppmtopgm | ${PBM_BINPREFIX}pgmtopbm -th -val=.5 -plain diff --git a/test/pamenlarge.ok b/test/pamenlarge.ok new file mode 100644 index 00000000..40be5918 --- /dev/null +++ b/test/pamenlarge.ok @@ -0,0 +1,4 @@ +3424505894 913236 +4152147096 304422 +3342398172 297 +237488670 3133413 diff --git a/test/pamenlarge.test b/test/pamenlarge.test new file mode 100755 index 00000000..c3efc4b2 --- /dev/null +++ b/test/pamenlarge.test @@ -0,0 +1,12 @@ +#! /bin/bash +# This script tests: pamenlarge +# Also requires: ppmtopgm + +# Test 1. Should print 3424505894 913236 +${PBM_TESTPREFIX}pamenlarge 3 testimg.ppm | cksum +# Test 2. Should print 4152147096 304422 +${PBM_BINPREFIX}ppmtopgm testimg.ppm | ${PBM_TESTPREFIX}pamenlarge 3 | cksum +# Test 3. Should print 3342398172 297 +${PBM_TESTPREFIX}pamenlarge 3 testgrid.pbm | cksum +# Test 4. Should print 237488670 3133413 +${PBM_TESTPREFIX}pamenlarge 3 -plain testimg.ppm | cksum diff --git a/test/pamfile.ok b/test/pamfile.ok new file mode 100644 index 00000000..6cdf0433 --- /dev/null +++ b/test/pamfile.ok @@ -0,0 +1,3 @@ +testimg.ppm: PPM raw, 227 by 149 maxval 255 +testgrid.pbm: PBM raw, 14 by 16 +stdin: PGM raw, 227 by 149 maxval 255 diff --git a/test/pamfile.test b/test/pamfile.test new file mode 100755 index 00000000..36ee557c --- /dev/null +++ b/test/pamfile.test @@ -0,0 +1,7 @@ +#! /bin/bash +# This script tests: pamfile +# Also requires: ppmtopgm + +${PBM_TESTPREFIX}pamfile testimg.ppm +${PBM_TESTPREFIX}pamfile testgrid.pbm +${PBM_BINPREFIX}ppmtopgm testimg.ppm | ${PBM_TESTPREFIX}pamfile diff --git a/test/pamflip-roundtrip.ok b/test/pamflip-roundtrip.ok new file mode 100644 index 00000000..653ab007 --- /dev/null +++ b/test/pamflip-roundtrip.ok @@ -0,0 +1,12 @@ +1926073387 101484 +1926073387 101484 +1926073387 101484 +1926073387 101484 +1926073387 101484 +1926073387 101484 +2425386270 41 +2425386270 41 +2425386270 41 +2425386270 41 +2425386270 41 +2425386270 41 diff --git a/test/pamflip-roundtrip.test b/test/pamflip-roundtrip.test new file mode 100755 index 00000000..7a17359f --- /dev/null +++ b/test/pamflip-roundtrip.test @@ -0,0 +1,34 @@ +#! /bin/bash +# This script tests: pamflip +# Also requires: + +${PBM_TESTPREFIX}pamflip -lr testimg.ppm | ${PBM_TESTPREFIX}pamflip -lr | cksum +${PBM_TESTPREFIX}pamflip -tb testimg.ppm | ${PBM_TESTPREFIX}pamflip -tb | cksum +${PBM_TESTPREFIX}pamflip -r180 testimg.ppm | \ + ${PBM_TESTPREFIX}pamflip -r180 | cksum +${PBM_TESTPREFIX}pamflip -xy testimg.ppm | ${PBM_TESTPREFIX}pamflip -xy | cksum +${PBM_TESTPREFIX}pamflip -r90 testimg.ppm | \ + ${PBM_TESTPREFIX}pamflip -r90 | \ + ${PBM_TESTPREFIX}pamflip -r90 | \ + ${PBM_TESTPREFIX}pamflip -r90 | cksum +${PBM_TESTPREFIX}pamflip -r270 testimg.ppm | \ + ${PBM_TESTPREFIX}pamflip -r270 | \ + ${PBM_TESTPREFIX}pamflip -r270 | \ + ${PBM_TESTPREFIX}pamflip -r270 | cksum + +${PBM_TESTPREFIX}pamflip -lr testgrid.pbm | \ + ${PBM_TESTPREFIX}pamflip -lr | cksum +${PBM_TESTPREFIX}pamflip -tb testgrid.pbm | \ + ${PBM_TESTPREFIX}pamflip -tb | cksum +${PBM_TESTPREFIX}pamflip -r180 testgrid.pbm | \ + ${PBM_TESTPREFIX}pamflip -r180 | cksum +${PBM_TESTPREFIX}pamflip -xy testgrid.pbm | \ + ${PBM_TESTPREFIX}pamflip -xy | cksum +${PBM_TESTPREFIX}pamflip -r90 testgrid.pbm | \ + ${PBM_TESTPREFIX}pamflip -r90 | \ + ${PBM_TESTPREFIX}pamflip -r90 | \ + ${PBM_TESTPREFIX}pamflip -r90 | cksum +${PBM_TESTPREFIX}pamflip -r270 testgrid.pbm | \ + ${PBM_TESTPREFIX}pamflip -r270 | \ + ${PBM_TESTPREFIX}pamflip -r270 | \ + ${PBM_TESTPREFIX}pamflip -r270 | cksum diff --git a/test/pamflip.ok b/test/pamflip.ok new file mode 100644 index 00000000..c7427e46 --- /dev/null +++ b/test/pamflip.ok @@ -0,0 +1,6 @@ +2116496681 101484 +217037000 101484 +2052917888 101484 +3375384165 41 +604323149 41 +490797850 37 diff --git a/test/pamflip.test b/test/pamflip.test new file mode 100755 index 00000000..59f8e639 --- /dev/null +++ b/test/pamflip.test @@ -0,0 +1,16 @@ +#! /bin/bash +# This script tests: pamflip +# Also requires: + +# Test 1. Should print 2116496681 101484 +${PBM_TESTPREFIX}pamflip -lr testimg.ppm | cksum +# Test 2. Should print 217037000 101484 +${PBM_TESTPREFIX}pamflip -cw testimg.ppm | cksum +# Test 3. Should print 2052917888 101484 +${PBM_TESTPREFIX}pamflip -tb testimg.ppm | cksum +# Test 4. Should print 3375384165 41 +${PBM_TESTPREFIX}pamflip -lr testgrid.pbm | cksum +# Test 5. Should print 604323149 41 +${PBM_TESTPREFIX}pamflip -tb testgrid.pbm | cksum +# Test 6. Should print 490797850 37 +${PBM_TESTPREFIX}pamflip -cw testgrid.pbm | cksum diff --git a/test/pamseq.ok b/test/pamseq.ok new file mode 100644 index 00000000..52bb3dd8 --- /dev/null +++ b/test/pamseq.ok @@ -0,0 +1 @@ +3929266994 304 diff --git a/test/pamseq.test b/test/pamseq.test new file mode 100755 index 00000000..1c6ae44b --- /dev/null +++ b/test/pamseq.test @@ -0,0 +1,5 @@ +#! /bin/bash +# This script tests: pamseq +# Also requires: + +${PBM_TESTPREFIX}pamseq 1 255 | cksum diff --git a/test/pamslice-roundtrip.ok b/test/pamslice-roundtrip.ok new file mode 100644 index 00000000..f9fe0bb4 --- /dev/null +++ b/test/pamslice-roundtrip.ok @@ -0,0 +1,2 @@ +2425386270 41 +1926073387 101484 diff --git a/test/pamslice-roundtrip.test b/test/pamslice-roundtrip.test new file mode 100755 index 00000000..fd125500 --- /dev/null +++ b/test/pamslice-roundtrip.test @@ -0,0 +1,29 @@ +#! /bin/bash +# This script tests: pamslice +# Also requires: pnmtopnm + +# Slice rows, one by one, out of testgrid.pbm. +# Add header and reconstruct pbm image. +# Note that in pamslice output 0 is white and 1 is black: opposite of PBM +# Should print 2425386270 41 + +(echo "P1" + echo "14 16" + seq 0 15 | while read i; + do + ${PBM_TESTPREFIX}pamslice -row=$i testgrid.pbm | \ + awk '{print $2}' | sed 'y/01/10/'; + done ) | ${PBM_BINPREFIX}pnmtopnm | cksum + +# Slice rows, one by one, out of testimg.ppm. +# Add header and reconstruct pbm image. +# Should print 1926073387 101484 + +(echo "P3" + echo "227 149" + echo "255" + seq 0 148 | while read i; + do + ${PBM_TESTPREFIX}pamslice -row=$i testimg.ppm | awk '{print $2, $3, $4}'; + done ) | ${PBM_BINPREFIX}pnmtopnm | cksum + diff --git a/test/pamsumm.ok b/test/pamsumm.ok new file mode 100644 index 00000000..0643081b --- /dev/null +++ b/test/pamsumm.ok @@ -0,0 +1,8 @@ +56 +0 +1 +0.250000 +10772432 +15 +255 +106.164760 diff --git a/test/pamsumm.test b/test/pamsumm.test new file mode 100755 index 00000000..9c5f1b84 --- /dev/null +++ b/test/pamsumm.test @@ -0,0 +1,13 @@ +#! /bin/bash +# This script tests: pamsumm +# Also requires: + +for type in -sum -min -max -mean + do + ${PBM_TESTPREFIX}pamsumm -brief $type testgrid.pbm + done + +for type in -sum -min -max -mean + do + ${PBM_TESTPREFIX}pamsumm -brief $type testimg.ppm + done diff --git a/test/pamtopam.ok b/test/pamtopam.ok new file mode 100644 index 00000000..dcb597d3 --- /dev/null +++ b/test/pamtopam.ok @@ -0,0 +1,16 @@ +P7 +WIDTH 227 +HEIGHT 149 +DEPTH 3 +MAXVAL 255 +TUPLTYPE RGB +ENDHDR +P7 +WIDTH 14 +HEIGHT 16 +DEPTH 1 +MAXVAL 1 +TUPLTYPE BLACKANDWHITE +ENDHDR +1873848880 101532 +2260748250 293 diff --git a/test/pamtopam.test b/test/pamtopam.test new file mode 100755 index 00000000..1a4cdff6 --- /dev/null +++ b/test/pamtopam.test @@ -0,0 +1,9 @@ +#! /bin/bash +# This script tests: pamtopam +# Also requires: + +${PBM_TESTPREFIX}pamtopam < testimg.ppm | sed '/ENDHDR/q' +${PBM_TESTPREFIX}pamtopam < testgrid.pbm | sed '/ENDHDR/q' + +${PBM_TESTPREFIX}pamtopam < testimg.ppm | cksum +${PBM_TESTPREFIX}pamtopam < testgrid.pbm | cksum diff --git a/test/pbmclean.ok b/test/pbmclean.ok new file mode 100644 index 00000000..71b622d0 --- /dev/null +++ b/test/pbmclean.ok @@ -0,0 +1,73 @@ +P1 +7 7 +1111111 +1111111 +1101011 +1110111 +1101011 +1111111 +1111111 +P1 +7 7 +1111111 +1111111 +1101011 +1110111 +1101011 +1111111 +1111111 +P1 +7 7 +1111111 +1111111 +1101011 +1110111 +1101011 +1111111 +1111111 +P1 +7 7 +0111110 +1111111 +1101011 +1110111 +1101011 +1111111 +0111110 +P1 +7 7 +0111110 +1111111 +1101011 +1110111 +1101011 +1111111 +0111110 +P1 +7 7 +0000000 +0111110 +0100010 +0100010 +0100010 +0111110 +0000000 +P1 +7 7 +0000000 +0110110 +0100010 +0000000 +0100010 +0110110 +0000000 +P1 +7 7 +0000000 +0000000 +0000000 +0000000 +0000000 +0000000 +0000000 +760076056 4210813 diff --git a/test/pbmclean.test b/test/pbmclean.test new file mode 100755 index 00000000..05fe9338 --- /dev/null +++ b/test/pbmclean.test @@ -0,0 +1,16 @@ +#! /bin/bash +# This script tests: pbmclean +# Also requires: pbmmake pbmpage pnmmargin + +${PBM_BINPREFIX}pbmmake -g 3 3 | ${PBM_BINPREFIX}pnmmargin -black 2 \ + >${tmpdir}/test.pbm + +for n in 1 2 3 4 5 6 7 8 +do +${PBM_TESTPREFIX}pbmclean -min=$n -black -plain ${tmpdir}/test.pbm +done + +rm ${tmpdir}/test.pbm + +# Should print 760076056 4210813 +${PBM_BINPREFIX}pbmpage 1 | ${PBM_TESTPREFIX}pbmclean -black | cksum diff --git a/test/pbmmake.ok b/test/pbmmake.ok new file mode 100644 index 00000000..754eefdf --- /dev/null +++ b/test/pbmmake.ok @@ -0,0 +1,43 @@ +P11 10 +P11 11 +P11 10 +P12 20000 +P12 21111 +P12 20110 +P13 3000000000 +P13 3111111111 +P13 3010101010 +P14 40000000000000000 +P14 41111111111111111 +P14 40101101001011010 +P15 50000000000000000000000000 +P15 51111111111111111111111111 +P15 50101010101010101010101010 +P16 6000000000000000000000000000000000000 +P16 6111111111111111111111111111111111111 +P16 6010101101010010101101010010101101010 +P17 70000000000000000000000000000000000000000000000000 +P17 71111111111111111111111111111111111111111111111111 +P17 70101010101010101010101010101010101010101010101010 +P18 80000000000000000000000000000000000000000000000000000000000000000 +P18 81111111111111111111111111111111111111111111111111111111111111111 +P18 80101010110101010010101011010101001010101101010100101010110101010 +4058563256 45 +3969089344 105 +702117756 189 +1343035453 234 +2621551326 363 +1487646353 522 +3096107498 597 +2833028503 801 +4244475883 891 +294944575 1140 +244734977 1419 +2956143361 1539 +2229243214 1863 +1123259599 2217 +3622140854 2367 +194247095 2766 +1824232358 2931 +3651864954 3375 +3302595397 3849 diff --git a/test/pbmmake.test b/test/pbmmake.test new file mode 100755 index 00000000..82fdb941 --- /dev/null +++ b/test/pbmmake.test @@ -0,0 +1,18 @@ +#! /bin/bash +# This script tests: pbmmake +# Also requires: + +for i in `seq 1 8` +do +for color in -w -b -g +do +${PBM_TESTPREFIX}pbmmake -plain $color $i $i | tr -d '\n'; echo +done +done +for i in `seq 8 5 98` +do + ( ${PBM_TESTPREFIX}pbmmake -w $i $i ; + ${PBM_TESTPREFIX}pbmmake -b $i $i ; + ${PBM_TESTPREFIX}pbmmake -g $i $i ) | cksum +done + diff --git a/test/pbmminkowski.ok b/test/pbmminkowski.ok new file mode 100644 index 00000000..71a909ce --- /dev/null +++ b/test/pbmminkowski.ok @@ -0,0 +1,23 @@ + tiles: 1 + x-edges: 2 + y-edges: 2 +vertices: 4 + area: 1 +perimeter: 4 + eulerchi: 1 + + tiles: 5 + x-edges: 10 + y-edges: 10 +vertices: 16 + area: 5 +perimeter: 20 + eulerchi: 1 + + tiles: 56 + x-edges: 112 + y-edges: 112 +vertices: 224 + area: 56 +perimeter: 224 + eulerchi: 56 diff --git a/test/pbmminkowski.test b/test/pbmminkowski.test new file mode 100755 index 00000000..d0376e9e --- /dev/null +++ b/test/pbmminkowski.test @@ -0,0 +1,10 @@ +#! /bin/bash +# This script tests: pbmminkowski +# Also requires: pbmmake pnmmargin + +${PBM_BINPREFIX}pbmmake -w 1 1 | ${PBM_BINPREFIX}pnmmargin -b 1 | \ + ${PBM_TESTPREFIX}pbmminkowski +echo +${PBM_BINPREFIX}pbmmake -g 3 3 | ${PBM_TESTPREFIX}pbmminkowski +echo +${PBM_TESTPREFIX}pbmminkowski testgrid.pbm \ No newline at end of file diff --git a/test/pbmpage.ok b/test/pbmpage.ok new file mode 100644 index 00000000..7f68da74 --- /dev/null +++ b/test/pbmpage.ok @@ -0,0 +1,3 @@ +550172004 4210813 +4142746975 4210813 +2347597649 4210813 diff --git a/test/pbmpage.test b/test/pbmpage.test new file mode 100755 index 00000000..dcf8e688 --- /dev/null +++ b/test/pbmpage.test @@ -0,0 +1,7 @@ +#! /bin/bash +# This script tests: pbmpage +# Also requires: + +${PBM_TESTPREFIX}pbmpage 1 | cksum +${PBM_TESTPREFIX}pbmpage 2 | cksum +${PBM_TESTPREFIX}pbmpage 3 | cksum \ No newline at end of file diff --git a/test/pbmpscale.ok b/test/pbmpscale.ok new file mode 100644 index 00000000..e25d4027 --- /dev/null +++ b/test/pbmpscale.ok @@ -0,0 +1,50 @@ +P1 +21 45 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +111111111111111111110 +111111111111111111111 +111111111111111111111 +001111100000000001111 +000111000000000000111 +000111000000000000111 +000111000000000000000 +000111000000000000000 +000111000000000000000 +000111000000000111000 +000111000000000111000 +000111100000001111000 +000111111111111111000 +000111111111111111000 +000111111111111111000 +000111100000001111000 +000111000000000111000 +000111000000000111000 +000111000000000000000 +000111000000000000000 +000111000000000000000 +000111000000000000000 +000111000000000000000 +001111100000000000000 +111111111111000000000 +111111111111000000000 +111111111111000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +2150868536 457 +3761734242 1065 +3462719777 1803 diff --git a/test/pbmpscale.test b/test/pbmpscale.test new file mode 100755 index 00000000..e1125fc7 --- /dev/null +++ b/test/pbmpscale.test @@ -0,0 +1,11 @@ +#! /bin/bash +# This script tests: pbmpscale +# Also requires: pamenlarge pbmtext + +${PBM_BINPREFIX}pbmtext -nomargin "F" | ${PBM_TESTPREFIX}pbmpscale 3 -plain + +for i in 2 3 4 +do +${PBM_BINPREFIX}pamenlarge 2 testgrid.pbm | \ + ${PBM_TESTPREFIX}pbmpscale $i | cksum +done diff --git a/test/pbmtext.ok b/test/pbmtext.ok new file mode 100644 index 00000000..438fe7b8 --- /dev/null +++ b/test/pbmtext.ok @@ -0,0 +1,21 @@ +1427751145 328 +1975911793 129 +3145408696 273 +2662867350 328 +3630387453 129 +1251480181 297 +1522829573 299 +1333433014 114 +4128014259 249 +2350105502 270 +2044333794 84 +2845861861 177 +2754777566 416 +3452484090 174 +2294575230 297 +67558248 387 +1647907430 159 +2846042958 249 +307551150 328 +584153820 114 +3355717231 177 diff --git a/test/pbmtext.test b/test/pbmtext.test new file mode 100755 index 00000000..69fa9b23 --- /dev/null +++ b/test/pbmtext.test @@ -0,0 +1,11 @@ +#! /bin/bash +# This script tests: pbmtext +# Also requires: + +for i in 0123456789 abcdefghijk lmnopqrst uzwxyz ABCDEFGHIJK LMNOPQRST UVWXYZ +do +for flags in "" "-nom" "-builtin fixed" +do +echo $i | ${PBM_TESTPREFIX}pbmtext $flags | cksum +done +done diff --git a/test/pbmtog3.ok b/test/pbmtog3.ok new file mode 100644 index 00000000..a0768f95 --- /dev/null +++ b/test/pbmtog3.ok @@ -0,0 +1,11 @@ +3697098186 144 +1248301383 122 +686713716 144 +215463240 122 +28792587 47 +277456854 32 +28792587 47 +871281767 162 +3736247115 62 +2820255307 2191856 +4159089282 2226575 diff --git a/test/pbmtog3.test b/test/pbmtog3.test new file mode 100755 index 00000000..09b5d784 --- /dev/null +++ b/test/pbmtog3.test @@ -0,0 +1,28 @@ +#! /bin/bash +# This script tests: pbmtog3 +# Also requires: pbmmake + +# Test 1. Should print 3697098186 144 +${PBM_TESTPREFIX}pbmtog3 testgrid.pbm | cksum +# Test 2. Should print 1248301383 122 +${PBM_TESTPREFIX}pbmtog3 -nofixedwidth testgrid.pbm | cksum +# Test 3. Should print 686713716 144 +${PBM_TESTPREFIX}pbmtog3 -reverse testgrid.pbm | cksum +# Test 4. Should print 215463240 122 +${PBM_TESTPREFIX}pbmtog3 -nofixedwidth -reverse testgrid.pbm | cksum +# Test 5. Should print 28792587 47 +${PBM_BINPREFIX}pbmmake -w 10 10 | ${PBM_TESTPREFIX}pbmtog3 | cksum +# Test 6. Should print 277456854 32 +${PBM_BINPREFIX}pbmmake -w 10 10 | \ + ${PBM_TESTPREFIX}pbmtog3 -nofixedwidth | cksum +# Test 7. Should print 28792587 47 +${PBM_BINPREFIX}pbmmake -w 10000 10 | ${PBM_TESTPREFIX}pbmtog3 | cksum +# Test 8. Should print 871281767 162 +${PBM_BINPREFIX}pbmmake -w 10000 10 | \ + ${PBM_TESTPREFIX}pbmtog3 -nofixedwidth | cksum +# Test 9. Should print 3736247115 62 +${PBM_BINPREFIX}pbmmake -b 10 10 | ${PBM_TESTPREFIX}pbmtog3 | cksum +# Test 10. Should print 2820255307 2191856 +${PBM_BINPREFIX}pbmmake -g 1700 2286 | ${PBM_TESTPREFIX}pbmtog3 | cksum +# Test 11. Should print 4159089282 2226575 +${PBM_BINPREFIX}pbmmake -g 1800 2286 | ${PBM_TESTPREFIX}pbmtog3 | cksum diff --git a/test/pbmupc.ok b/test/pbmupc.ok new file mode 100644 index 00000000..3e58f409 --- /dev/null +++ b/test/pbmupc.ok @@ -0,0 +1 @@ +2619309127 10172 diff --git a/test/pbmupc.test b/test/pbmupc.test new file mode 100755 index 00000000..6fa772d7 --- /dev/null +++ b/test/pbmupc.test @@ -0,0 +1,8 @@ +#! /bin/bash +# This script tests: pbmupc +# Also requires: + +for type in -s1 -s2 +do +${PBM_TESTPREFIX}pbmupc $type 0 72890 00011 +done | cksum diff --git a/test/pgmhist.ok b/test/pgmhist.ok new file mode 100644 index 00000000..d98c2244 --- /dev/null +++ b/test/pgmhist.ok @@ -0,0 +1,14 @@ +value count b% w% +----- ----- ------ ------ + 0 2 12.5% 100% + 1 2 25% 87.5% + 2 2 37.5% 75% + 3 2 50% 62.5% + 4 2 62.5% 50% + 5 2 75% 37.5% + 6 2 87.5% 25% + 8 2 100% 12.5% +value count b% w% +----- ----- ------ ------ + 0 168 75% 100% + 255 56 100% 25% diff --git a/test/pgmhist.test b/test/pgmhist.test new file mode 100755 index 00000000..b5e7ef7d --- /dev/null +++ b/test/pgmhist.test @@ -0,0 +1,6 @@ +#! /bin/bash +# This script tests: pgmhist +# Also requires: pgmramp + +${PBM_BINPREFIX}pgmramp -maxval=8 -lr 8 2 | ${PBM_TESTPREFIX}pgmhist +${PBM_TESTPREFIX}pgmhist testgrid.pbm \ No newline at end of file diff --git a/test/pgmmake.ok b/test/pgmmake.ok new file mode 100644 index 00000000..b9a03af2 --- /dev/null +++ b/test/pgmmake.ok @@ -0,0 +1,2 @@ +3662611538 2513 +3109612402 5012 diff --git a/test/pgmmake.test b/test/pgmmake.test new file mode 100755 index 00000000..0180b502 --- /dev/null +++ b/test/pgmmake.test @@ -0,0 +1,10 @@ +#! /bin/bash +# This script tests: pgmmake +# Also requires: + +${PBM_TESTPREFIX}pgmmake 1 50 50 | cksum +${PBM_TESTPREFIX}pgmmake .2 50 100 -maxval=5 | cksum + + + + \ No newline at end of file diff --git a/test/pgmramp.ok b/test/pgmramp.ok new file mode 100644 index 00000000..0971ccd7 --- /dev/null +++ b/test/pgmramp.ok @@ -0,0 +1,32 @@ +P2 +4 4 +3 +0 1 2 3 +0 1 2 3 +0 1 2 3 +0 1 2 3 +P2 +4 4 +3 +0 0 0 0 +1 1 1 1 +2 2 2 2 +3 3 3 3 +P2 +4 4 +3 +0 0 1 0 +0 1 2 1 +1 2 3 2 +0 1 2 1 +P2 +4 4 +3 +0 0 0 0 +0 1 2 1 +0 2 3 2 +0 1 2 1 +1777787286 65551 +2046889993 65551 +1975520432 65551 +807973067 65551 diff --git a/test/pgmramp.test b/test/pgmramp.test new file mode 100755 index 00000000..cf3d91d7 --- /dev/null +++ b/test/pgmramp.test @@ -0,0 +1,12 @@ +#! /bin/bash +# This script tests: pgmramp +# Also requires: + +for type in -lr -tb -rect -ell +do +${PBM_TESTPREFIX}pgmramp -maxval=3 $type 4 4 -plain +done + +for type in -lr -tb -rect -ell +do ${PBM_TESTPREFIX}pgmramp $type 256 256 | cksum +done diff --git a/test/pgmtopgm.ok b/test/pgmtopgm.ok new file mode 100644 index 00000000..53c25a44 --- /dev/null +++ b/test/pgmtopgm.ok @@ -0,0 +1 @@ +729348909 237 diff --git a/test/pgmtopgm.test b/test/pgmtopgm.test new file mode 100755 index 00000000..638cb68b --- /dev/null +++ b/test/pgmtopgm.test @@ -0,0 +1,5 @@ +#! /bin/bash +# This script tests: pgmtopgm +# Also requires: + +${PBM_TESTPREFIX}pgmtopgm < testgrid.pbm | cksum diff --git a/test/pgmtoppm.ok b/test/pgmtoppm.ok new file mode 100644 index 00000000..55e5af95 --- /dev/null +++ b/test/pgmtoppm.ok @@ -0,0 +1,3 @@ +1767073524 779 +1676700883 779 +718580145 779 diff --git a/test/pgmtoppm.test b/test/pgmtoppm.test new file mode 100755 index 00000000..b93d7867 --- /dev/null +++ b/test/pgmtoppm.test @@ -0,0 +1,18 @@ +#! /bin/bash +# This script tests: pgmtoppm +# Also requires: pamseq pamtopnm pgmramp + +${PBM_BINPREFIX}pgmramp -maxval=5 -lr 256 1 >${tmpdir}/test.pgm +${PBM_BINPREFIX}pamseq 3 5 -tupletype=RGB | ${PBM_BINPREFIX}pamtopnm \ + >${tmpdir}/palette + +# Test 1. +${PBM_TESTPREFIX}pgmtoppm green ${tmpdir}/test.pgm | cksum + +${PBM_TESTPREFIX}pgmtoppm yellow-blue ${tmpdir}/test.pgm | cksum + +${PBM_TESTPREFIX}pgmtoppm -map=${tmpdir}/palette ${tmpdir}/test.pgm | cksum + +rm ${tmpdir}/test.pgm ${tmpdir}/palette + + diff --git a/test/png-roundtrip.ok b/test/png-roundtrip.ok new file mode 100644 index 00000000..67f7a1fe --- /dev/null +++ b/test/png-roundtrip.ok @@ -0,0 +1,2 @@ +1926073387 101484 +2425386270 41 diff --git a/test/png-roundtrip.test b/test/png-roundtrip.test new file mode 100755 index 00000000..6f25d1c3 --- /dev/null +++ b/test/png-roundtrip.test @@ -0,0 +1,7 @@ +#! /bin/bash +# This script tests: pngtopnm pnmtopng +# Also requires: + +${PBM_TESTPREFIX}pnmtopng testimg.ppm | ${PBM_TESTPREFIX}pngtopnm | cksum +${PBM_TESTPREFIX}pnmtopng testgrid.pbm | ${PBM_TESTPREFIX}pngtopnm | cksum + diff --git a/test/pnm-pam-roundtrip.ok b/test/pnm-pam-roundtrip.ok new file mode 100644 index 00000000..67f7a1fe --- /dev/null +++ b/test/pnm-pam-roundtrip.ok @@ -0,0 +1,2 @@ +1926073387 101484 +2425386270 41 diff --git a/test/pnm-pam-roundtrip.test b/test/pnm-pam-roundtrip.test new file mode 100755 index 00000000..1aef986c --- /dev/null +++ b/test/pnm-pam-roundtrip.test @@ -0,0 +1,7 @@ +#! /bin/bash +# This script tests: pamtopam pamtopnm +# Also requires: + +${PBM_TESTPREFIX}pamtopam < testimg.ppm | ${PBM_TESTPREFIX}pamtopnm | cksum +${PBM_TESTPREFIX}pamtopam < testgrid.pbm | ${PBM_TESTPREFIX}pamtopnm | cksum + diff --git a/test/pnm-plain-roundtrip.ok b/test/pnm-plain-roundtrip.ok new file mode 100644 index 00000000..67f7a1fe --- /dev/null +++ b/test/pnm-plain-roundtrip.ok @@ -0,0 +1,2 @@ +1926073387 101484 +2425386270 41 diff --git a/test/pnm-plain-roundtrip.test b/test/pnm-plain-roundtrip.test new file mode 100755 index 00000000..eab0b0d7 --- /dev/null +++ b/test/pnm-plain-roundtrip.test @@ -0,0 +1,9 @@ +#! /bin/bash +# This script tests: pnmtopnm +# Also requires: + +${PBM_TESTPREFIX}pnmtopnm -plain testimg.ppm | \ + ${PBM_TESTPREFIX}pnmtopnm | cksum +${PBM_TESTPREFIX}pnmtopnm -plain testgrid.pbm | \ + ${PBM_TESTPREFIX}pnmtopnm | cksum + diff --git a/test/pnmcat.ok b/test/pnmcat.ok new file mode 100644 index 00000000..68052957 --- /dev/null +++ b/test/pnmcat.ok @@ -0,0 +1,4 @@ +1704087873 73 +4150323653 73 +1522490272 202953 +2862441566 202953 diff --git a/test/pnmcat.test b/test/pnmcat.test new file mode 100755 index 00000000..35efd515 --- /dev/null +++ b/test/pnmcat.test @@ -0,0 +1,9 @@ +#! /bin/bash +# This script tests: pnmcat +# Also requires: + +${PBM_TESTPREFIX}pnmcat -lr testgrid.pbm testgrid.pbm | cksum +${PBM_TESTPREFIX}pnmcat -tb testgrid.pbm testgrid.pbm | cksum + +${PBM_TESTPREFIX}pnmcat -lr testimg.ppm testimg.ppm | cksum +${PBM_TESTPREFIX}pnmcat -tb testimg.ppm testimg.ppm | cksum diff --git a/test/pnminvert-roundtrip.ok b/test/pnminvert-roundtrip.ok new file mode 100644 index 00000000..67f7a1fe --- /dev/null +++ b/test/pnminvert-roundtrip.ok @@ -0,0 +1,2 @@ +1926073387 101484 +2425386270 41 diff --git a/test/pnminvert-roundtrip.test b/test/pnminvert-roundtrip.test new file mode 100755 index 00000000..8cdb6c25 --- /dev/null +++ b/test/pnminvert-roundtrip.test @@ -0,0 +1,6 @@ +#! /bin/bash +# This script tests: pnminvert +# Also requires: + +${PBM_TESTPREFIX}pnminvert testimg.ppm | ${PBM_TESTPREFIX}pnminvert | cksum +${PBM_TESTPREFIX}pnminvert testgrid.pbm | ${PBM_TESTPREFIX}pnminvert | cksum diff --git a/test/pnminvert.ok b/test/pnminvert.ok new file mode 100644 index 00000000..081e53ee --- /dev/null +++ b/test/pnminvert.ok @@ -0,0 +1,7 @@ +1240379484 41 +1416115901 101484 +2961441369 33838 +2595564405 14 +2595564405 14 +2595564405 14 +2896726098 15 diff --git a/test/pnminvert.test b/test/pnminvert.test new file mode 100755 index 00000000..7fc8523c --- /dev/null +++ b/test/pnminvert.test @@ -0,0 +1,20 @@ +#! /bin/bash +# This script tests: pnminvert +# Also requires: pbmmake ppmtopgm + +# Test 1. Should print 1240379484 41 +${PBM_TESTPREFIX}pnminvert testgrid.pbm | cksum +# Test 2. Should print 1416115901 101484 +${PBM_TESTPREFIX}pnminvert testimg.ppm | cksum +# Test 3. Should print 2961441369 33838 +# printed 4215652354 33838 with older ppmtopgm +${PBM_BINPREFIX}ppmtopgm testimg.ppm | ${PBM_TESTPREFIX}pnminvert | cksum +# Test 4. Should print 2595564405 14 +${PBM_BINPREFIX}pbmmake -w 7 7 | ${PBM_TESTPREFIX}pnminvert | cksum +# Test 5. Should print 2595564405 14 +${PBM_BINPREFIX}pbmmake -b 7 7 | cksum +# Test 6. Should print 2595564405 14 +${PBM_BINPREFIX}pbmmake -b 7 7 | ${PBM_TESTPREFIX}pnminvert | \ + ${PBM_TESTPREFIX}pnminvert | cksum +# Test 7. Should print 2896726098 15 +${PBM_BINPREFIX}pbmmake -g 8 8 | ${PBM_TESTPREFIX}pnminvert | cksum diff --git a/test/pnmpsnr.ok b/test/pnmpsnr.ok new file mode 100644 index 00000000..eff18efa --- /dev/null +++ b/test/pnmpsnr.ok @@ -0,0 +1,2 @@ +0.00 dB +don't differ. diff --git a/test/pnmpsnr.test b/test/pnmpsnr.test new file mode 100755 index 00000000..d5aa07f3 --- /dev/null +++ b/test/pnmpsnr.test @@ -0,0 +1,11 @@ +#! /bin/bash +# This script tests: pnmpsnr +# Also requires: pbmmake + +${PBM_BINPREFIX}pbmmake -w 10 10 > ${tmpdir}/w.pbm +${PBM_BINPREFIX}pbmmake -b 10 10 > ${tmpdir}/b.pbm +${PBM_TESTPREFIX}pnmpsnr ${tmpdir}/w.pbm ${tmpdir}/b.pbm 2>&1 | \ + awk '{print $(NF-1),$NF}' +${PBM_TESTPREFIX}pnmpsnr ${tmpdir}/w.pbm ${tmpdir}/w.pbm 2>&1 | \ + awk '{print $(NF-1),$NF}' +rm ${tmpdir}/b.pbm ${tmpdir}/w.pbm diff --git a/test/pnmremap1.ok b/test/pnmremap1.ok new file mode 100644 index 00000000..a6cfc2bd --- /dev/null +++ b/test/pnmremap1.ok @@ -0,0 +1 @@ +2667816854 101482 diff --git a/test/pnmremap1.test b/test/pnmremap1.test new file mode 100755 index 00000000..1e68c8ad --- /dev/null +++ b/test/pnmremap1.test @@ -0,0 +1,19 @@ +#! /bin/bash +# This script tests: pnmremap +# Also requires: pamdepth pamseq pamtopnm + +${PBM_BINPREFIX}pamseq 3 5 -tupletype=RGB | ${PBM_BINPREFIX}pamtopnm \ + > ${tmpdir}/palette +${PBM_BINPREFIX}pamdepth 255 ${tmpdir}/palette > ${tmpdir}/palette255 + +# Test 1. Floyd-Steinberg +# This fails with older versions of Netpbm and x86-64. +# May also fail on other non-Intel architectures. +# v. 10.59.2 +# x86-32: 2667816854 101482 +# x86-64: 3602410851 101482 + +${PBM_TESTPREFIX}pnmremap -mapfile=${tmpdir}/palette -floyd -norandom \ + testimg.ppm | cksum + +rm ${tmpdir}/palette{,255} diff --git a/test/pnmremap2.ok b/test/pnmremap2.ok new file mode 100644 index 00000000..a2d1c0dc --- /dev/null +++ b/test/pnmremap2.ok @@ -0,0 +1,3 @@ +3224011488 101482 +2325696119 101484 +2325696119 101484 diff --git a/test/pnmremap2.test b/test/pnmremap2.test new file mode 100755 index 00000000..f2fd92e0 --- /dev/null +++ b/test/pnmremap2.test @@ -0,0 +1,21 @@ +#! /bin/bash +# This script tests: pnmremap +# Also requires: pamdepth pamseq pamtopnm + +${PBM_BINPREFIX}pamseq 3 5 -tupletype=RGB | ${PBM_BINPREFIX}pamtopnm \ + > ${tmpdir}/palette +${PBM_BINPREFIX}pamdepth 255 ${tmpdir}/palette > ${tmpdir}/palette255 + +# Test 2. Default (unmodified quantization) +${PBM_TESTPREFIX}pnmremap -mapfile=${tmpdir}/palette -nofloyd \ +testimg.ppm | cksum + +# Test 3. Use first color in palette for missing colors +${PBM_TESTPREFIX}pnmremap -mapfile=${tmpdir}/palette255 -nofloyd \ + -firstisdefault testimg.ppm | cksum + +# Test 4. Use black for missing colors +${PBM_TESTPREFIX}pnmremap -mapfile=${tmpdir}/palette255 -nofloyd \ +-missingcolor=black testimg.ppm | cksum + +rm ${tmpdir}/palette{,255} diff --git a/test/pnmtile.ok b/test/pnmtile.ok new file mode 100644 index 00000000..559d0f65 --- /dev/null +++ b/test/pnmtile.ok @@ -0,0 +1,2 @@ +4228632379 259 +0 diff --git a/test/pnmtile.test b/test/pnmtile.test new file mode 100755 index 00000000..b0c14ca6 --- /dev/null +++ b/test/pnmtile.test @@ -0,0 +1,12 @@ +#! /bin/bash +# This script tests: pnmtile +# Also requires: pnmcat + +${PBM_TESTPREFIX}pnmtile 40 50 testgrid.pbm | cksum + +${PBM_TESTPREFIX}pnmtile 454 298 testimg.ppm > ${tmpdir}/testimg4.ppm && +${PBM_BINPREFIX}pnmcat -lr testimg.ppm testimg.ppm > ${tmpdir}/testimg2.ppm && +${PBM_BINPREFIX}pnmcat -tb ${tmpdir}/testimg2.ppm ${tmpdir}/testimg2.ppm | \ +diff - ${tmpdir}/testimg4.ppm && echo $? + +rm ${tmpdir}/testimg{2,4}.ppm diff --git a/test/pnmtopnm-plain.ok b/test/pnmtopnm-plain.ok new file mode 100644 index 00000000..02d99f1e --- /dev/null +++ b/test/pnmtopnm-plain.ok @@ -0,0 +1,48 @@ +P1 +14 16 +10101010101010 +11111111111111 +10101010101010 +11111111111111 +10101010101010 +11111111111111 +10101010101010 +11111111111111 +10101010101010 +11111111111111 +10101010101010 +11111111111111 +10101010101010 +11111111111111 +10101010101010 +11111111111111 +P2 +14 16 +255 +0 255 0 255 0 255 0 255 0 255 0 255 0 255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 255 0 255 0 255 0 255 0 255 0 255 0 255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 255 0 255 0 255 0 255 0 255 0 255 0 255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 255 0 255 0 255 0 255 0 255 0 255 0 255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 255 0 255 0 255 0 255 0 255 0 255 0 255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 255 0 255 0 255 0 255 0 255 0 255 0 255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 255 0 255 0 255 0 255 0 255 0 255 0 255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 255 0 255 0 255 0 255 0 255 0 255 0 255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 +P3 +14 16 +255 +0 0 0 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 +0 0 0 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 +0 0 0 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/test/pnmtopnm-plain.test b/test/pnmtopnm-plain.test new file mode 100755 index 00000000..3cbd5752 --- /dev/null +++ b/test/pnmtopnm-plain.test @@ -0,0 +1,10 @@ +#! /bin/bash +# This script tests: pnmtopnm +# Also requires: pgmtopgm ppmtoppm + +${PBM_TESTPREFIX}pnmtopnm -plain testgrid.pbm + +${PBM_BINPREFIX}pgmtopgm < testgrid.pbm | ${PBM_TESTPREFIX}pnmtopnm -plain + +${PBM_BINPREFIX}ppmtoppm < testgrid.pbm | ${PBM_TESTPREFIX}pnmtopnm -plain | \ + head -n11 diff --git a/test/ppmbrighten.ok b/test/ppmbrighten.ok new file mode 100644 index 00000000..65feb812 --- /dev/null +++ b/test/ppmbrighten.ok @@ -0,0 +1,3 @@ +2737989845 101484 +1059247992 101484 +32344911 101484 diff --git a/test/ppmbrighten.test b/test/ppmbrighten.test new file mode 100755 index 00000000..72bebff4 --- /dev/null +++ b/test/ppmbrighten.test @@ -0,0 +1,7 @@ +#! /bin/bash +# This script tests: ppmbrighten +# Also requires: + +${PBM_TESTPREFIX}ppmbrighten -v 100 testimg.ppm | cksum +${PBM_TESTPREFIX}ppmbrighten -v 100 -normalize testimg.ppm | cksum +${PBM_TESTPREFIX}ppmbrighten -s 100 -v -50 testimg.ppm | cksum diff --git a/test/ppmchange-roundtrip.ok b/test/ppmchange-roundtrip.ok new file mode 100644 index 00000000..a676a1f2 --- /dev/null +++ b/test/ppmchange-roundtrip.ok @@ -0,0 +1,2 @@ +2425386270 41 +2425386270 41 diff --git a/test/ppmchange-roundtrip.test b/test/ppmchange-roundtrip.test new file mode 100755 index 00000000..c303c11b --- /dev/null +++ b/test/ppmchange-roundtrip.test @@ -0,0 +1,11 @@ +#! /bin/bash +# This script tests: ppmchange +# Also requires: pgmtopbm pnminvert ppmtopgm + +${PBM_TESTPREFIX}ppmchange black white white black testgrid.pbm | \ +${PBM_BINPREFIX}pnminvert | ${PBM_BINPREFIX}ppmtopgm | \ +${PBM_BINPREFIX}pgmtopbm -th -val=0.5 | cksum + +${PBM_TESTPREFIX}ppmchange black white white black testgrid.pbm | \ +${PBM_TESTPREFIX}ppmchange black white white black -plain | \ +${PBM_BINPREFIX}ppmtopgm | ${PBM_BINPREFIX}pgmtopbm -th -val=0.5 | cksum diff --git a/test/ppmcie.ok b/test/ppmcie.ok new file mode 100644 index 00000000..3398b2f7 --- /dev/null +++ b/test/ppmcie.ok @@ -0,0 +1 @@ +955840041 786447 diff --git a/test/ppmcie.out-64 b/test/ppmcie.out-64 new file mode 100644 index 00000000..3d8ca13a --- /dev/null +++ b/test/ppmcie.out-64 @@ -0,0 +1 @@ +2583941766 786447 diff --git a/test/ppmcie.test b/test/ppmcie.test new file mode 100755 index 00000000..cd84536a --- /dev/null +++ b/test/ppmcie.test @@ -0,0 +1,20 @@ +#! /bin/bash +# This script tests: ppmcie +# Also requires: + +# Test 1. Should print 955840041 786447 +# Without -nolabel -noaxes -nowpoint -noblack older versions of +# Netpbm produce slightly different charts. +# Output from "ppmcie | cksum" : +# v. 10.35.86: 288356530 786447 +# v. 10.59.2 : 2292601420 786447 +# +# This test fails when ppmcie is compiled with SSE features are turned on. +# Note that Gcc turns on SSE,SSE2 on by default for x86-64. + +# v. 10.59.2 +# x86 32 bit: 955840041 786447 +# x86 64 bit: 4208660683 786447 + +${PBM_TESTPREFIX}ppmcie -nolabel -noaxes -nowpoint -noblack | cksum + diff --git a/test/ppmdim.ok b/test/ppmdim.ok new file mode 100644 index 00000000..9c55e064 --- /dev/null +++ b/test/ppmdim.ok @@ -0,0 +1,13 @@ +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok diff --git a/test/ppmdim.test b/test/ppmdim.test new file mode 100755 index 00000000..27bbc4e1 --- /dev/null +++ b/test/ppmdim.test @@ -0,0 +1,19 @@ +#! /bin/bash +# This script tests: ppmdim +# Also requires: pamfunc pamarith pamsumm + +# Compare ppmdim and pamfunc with various dim factors +# Due to the difference rounding methods, pamfunc produces slightly +# brighter images, by about 0.5 per pixel. +# If the mean difference is between 0 and 0.75 we consider the output +# normal. This works for dim values up to 0.994 . + +for i in 0.125 0.25 0.5 0.75 0.1 0.0117 0.2 0.4 0.333 0.666 0.8 0.9 0.95 + do + ${PBM_TESTPREFIX}ppmdim $i testimg.ppm > ${tmpdir}/dim1.ppm + ${PBM_BINPREFIX}pamfunc -mult=$i testimg.ppm > ${tmpdir}/dim2.ppm + ${PBM_BINPREFIX}pnmarith -diff ${tmpdir}/dim1.ppm ${tmpdir}/dim2.ppm | \ + ${PBM_BINPREFIX}pamsumm -mean -brief | \ + awk '{print $1<0.75 ? "ok" : "fail"}' + done +rm ${tmpdir}/dim[12].ppm diff --git a/test/ppmdither.ok b/test/ppmdither.ok new file mode 100644 index 00000000..3159f17e --- /dev/null +++ b/test/ppmdither.ok @@ -0,0 +1,3 @@ +1519741676 101482 +3886084802 101482 +3737986353 101482 diff --git a/test/ppmdither.test b/test/ppmdither.test new file mode 100755 index 00000000..5fea0bb4 --- /dev/null +++ b/test/ppmdither.test @@ -0,0 +1,7 @@ +#! /bin/bash +# This script tests: ppmdither +# Also requires: + +${PBM_TESTPREFIX}ppmdither testimg.ppm | cksum +${PBM_TESTPREFIX}ppmdither -red 2 -green 2 -blue 2 testimg.ppm | cksum +${PBM_TESTPREFIX}ppmdither -dim 2 testimg.ppm | cksum diff --git a/test/ppmgauss.ok b/test/ppmgauss.ok new file mode 100644 index 00000000..cf708d64 --- /dev/null +++ b/test/ppmgauss.ok @@ -0,0 +1,81 @@ +3712518499 55 +3712518499 55 +1147844094 55 +731871722 55 +1259293616 55 +4234223225 55 +171732531 55 +448293386 55 +3030522957 55 +757204806 62 +757204806 62 +2890088558 62 +4276668903 62 +1462902064 62 +4161772187 62 +2741154810 62 +417660035 62 +1026188683 62 +1236982144 71 +1236982144 71 +2668915323 71 +499504068 71 +3377926681 71 +1877781725 71 +1741784255 71 +2975827721 71 +185899480 71 +1890880170 82 +1890880170 82 +2007282168 82 +2290578407 82 +3295586348 82 +3202728672 82 +3794283497 82 +1136760947 82 +2659761303 82 +3268058875 95 +3268058875 95 +4112134785 95 +3700010306 95 +909823480 95 +2336604848 95 +3042873446 95 +299128630 95 +1852505233 95 +3614879265 110 +3614879265 110 +3727088180 110 +3861671574 110 +952180714 110 +1393452065 110 +1551903756 110 +2198775655 110 +3231547603 110 +3184597171 127 +3184597171 127 +406519147 127 +1836966508 127 +1796467962 127 +1932274161 127 +1852779549 127 +1734420920 127 +2400421918 127 +3252995941 148 +3252995941 148 +2022176119 148 +473753498 148 +3178129210 148 +2278608777 148 +3169785704 148 +85136480 148 +2396646133 148 +1871459418 169 +1871459418 169 +639002491 169 +1810927285 169 +4218372313 169 +1320749835 169 +4102007360 169 +3022719594 169 +1769176609 169 diff --git a/test/ppmgauss.test b/test/ppmgauss.test new file mode 100755 index 00000000..a75d272c --- /dev/null +++ b/test/ppmgauss.test @@ -0,0 +1,11 @@ +#! /bin/bash +# This script tests: pamgauss +# Also requires: + +for i in `seq 3 11` +do +for s in `seq 1 9` +do +${PBM_TESTPREFIX}pamgauss $i $i -sigma=.$s | cksum +done +done diff --git a/test/ppmhist.ok b/test/ppmhist.ok new file mode 100644 index 00000000..91731d4b --- /dev/null +++ b/test/ppmhist.ok @@ -0,0 +1,11 @@ +value count b% w% +----- ----- ------ ------ + 0 2 12.5% 100% + 1 2 25% 87.5% + 2 2 37.5% 75% + 3 2 50% 62.5% + 4 2 62.5% 50% + 5 2 75% 37.5% + 6 2 87.5% 25% + 8 2 100% 12.5% +3438989921 711087 diff --git a/test/ppmhist.test b/test/ppmhist.test new file mode 100755 index 00000000..29bba206 --- /dev/null +++ b/test/ppmhist.test @@ -0,0 +1,7 @@ +#! /bin/bash +# This script tests: ppmhist +# Also requires: pgmhist pgmramp + +${PBM_BINPREFIX}pgmramp -maxval=8 -lr 8 2 | ${PBM_BINPREFIX}pgmhist +${PBM_TESTPREFIX}ppmhist -map -sort=rgb testimg.ppm | cksum + diff --git a/test/ppmmake.ok b/test/ppmmake.ok new file mode 100644 index 00000000..0e871732 --- /dev/null +++ b/test/ppmmake.ok @@ -0,0 +1,2 @@ +2477651508 15012 +2378991101 7513 diff --git a/test/ppmmake.test b/test/ppmmake.test new file mode 100755 index 00000000..02e747ab --- /dev/null +++ b/test/ppmmake.test @@ -0,0 +1,13 @@ +#! /bin/bash +# This script tests: ppmmake +# Also requires: + +#export RGBDEF=/usr/share/emacs/23.2/etc/rgb.txt + +${PBM_TESTPREFIX}ppmmake rgb:ff/80/80 50 100 -maxval=5 | cksum +${PBM_TESTPREFIX}ppmmake red 50 50 | cksum + + + + + \ No newline at end of file diff --git a/test/ppmmix.ok b/test/ppmmix.ok new file mode 100644 index 00000000..88bcef4a --- /dev/null +++ b/test/ppmmix.ok @@ -0,0 +1,17 @@ +P2 +8 8 +3 +3 2 3 2 1 0 1 0 +2 3 2 3 0 1 0 1 +3 2 3 2 1 0 1 0 +2 3 2 3 0 1 0 1 +1 0 1 0 3 2 3 2 +0 1 0 1 2 3 2 3 +1 0 1 0 3 2 3 2 +0 1 0 1 2 3 2 3 +1926073387 101484 +1926073387 101484 +1926073387 101484 +1926073387 101484 +127 +127 diff --git a/test/ppmmix.test b/test/ppmmix.test new file mode 100755 index 00000000..0f9deedc --- /dev/null +++ b/test/ppmmix.test @@ -0,0 +1,29 @@ +#! /bin/bash +# This script tests: ppmmix +# Also requires: pamdepth pamenlarge pamsumm pbmmake +# Also requires: pgmtopgm pnminvert ppmtopgm + +# Print a pretty checkerboard pattern +${PBM_BINPREFIX}pbmmake -g 8 8 | \ + ${PBM_BINPREFIX}pgmtopgm > ${tmpdir}/a1.pgm && +${PBM_BINPREFIX}pbmmake -g 2 2 | ${PBM_BINPREFIX}pamenlarge 4 | \ + ${PBM_BINPREFIX}pgmtopgm > ${tmpdir}/a2.pgm && +${PBM_TESTPREFIX}ppmmix 0.75 ${tmpdir}/a1.pgm ${tmpdir}/a2.pgm -plain | \ + ${PBM_BINPREFIX}ppmtopgm | ${PBM_BINPREFIX}pamdepth 3 -plain && +rm ${tmpdir}/a1.pgm ${tmpdir}/a2.pgm + +# Mix image with itself. +# Output should match input regardless of ratio. +for i in 0 0.5 0.6 1 +do +${PBM_TESTPREFIX}ppmmix $i testimg.ppm testimg.ppm | cksum +done + +# Mix image with its own inverse. +# Output should be a monotone gray sheet. +${PBM_BINPREFIX}pnminvert testimg.ppm | ${PBM_TESTPREFIX}ppmmix .5 \ + testimg.ppm - | tee ${tmpdir}/a3.ppm | \ + ${PBM_BINPREFIX}pamsumm -brief -max && + ${PBM_BINPREFIX}pamsumm -brief -min ${tmpdir}/a3.ppm && + +rm ${tmpdir}/a3.ppm diff --git a/test/ppmtopgm.ok b/test/ppmtopgm.ok new file mode 100644 index 00000000..32a4743b --- /dev/null +++ b/test/ppmtopgm.ok @@ -0,0 +1 @@ +2871603838 33838 diff --git a/test/ppmtopgm.test b/test/ppmtopgm.test new file mode 100755 index 00000000..7ab481c6 --- /dev/null +++ b/test/ppmtopgm.test @@ -0,0 +1,7 @@ +#! /bin/bash +# This script tests: ppmtopgm +# Also requires: + +# Test 1. Should produce 2871603838 33838 +${PBM_TESTPREFIX}ppmtopgm testimg.ppm | cksum + diff --git a/test/ppmtoppm.ok b/test/ppmtoppm.ok new file mode 100644 index 00000000..764a3464 --- /dev/null +++ b/test/ppmtoppm.ok @@ -0,0 +1 @@ +829921912 685 diff --git a/test/ppmtoppm.test b/test/ppmtoppm.test new file mode 100755 index 00000000..c073ecff --- /dev/null +++ b/test/ppmtoppm.test @@ -0,0 +1,5 @@ +#! /bin/bash +# This script tests: ppmtoppm +# Also requires: + +${PBM_TESTPREFIX}ppmtoppm < testgrid.pbm | cksum \ No newline at end of file diff --git a/test/ppmwheel.ok b/test/ppmwheel.ok new file mode 100644 index 00000000..24756d1e --- /dev/null +++ b/test/ppmwheel.ok @@ -0,0 +1,2 @@ +1537578995 59 +875938089 86 diff --git a/test/ppmwheel.test b/test/ppmwheel.test new file mode 100755 index 00000000..4d786f26 --- /dev/null +++ b/test/ppmwheel.test @@ -0,0 +1,113 @@ +#! /bin/bash +# This script tests: ppmwheel +# Also requires: + +# For values 6 and above, x86(-32) and x86-64 produce different output. +# SSE floating-point math is the probable cause. + +for i in 4 5 +do +${PBM_TESTPREFIX}ppmwheel $i | cksum +done + +# i 32 bit 64 bit +# +# 6: 343122583 119 142348877 119 +# 7: 3572780137 158 3220488357 158 +# 8: 3078449954 203 1413542034 203 +# 9: 3437862278 254 311501249 254 +# 10: 1111245327 313 582960969 313 +# 11: 548273236 376 3726921442 376 +# 12: 2741456118 445 3696607391 445 +# 13: 673636665 520 1059273944 520 +# 14: 2445730101 601 3445053713 601 +# 15: 592850912 688 1691004230 688 +# 16: 3302887123 781 86998539 781 +# 17: 1786065899 880 2476986124 880 +# 18: 186804914 985 2853442889 985 +# 19: 1453260662 1096 3182405636 1096 +# 20: 1467480434 1213 4040494227 1213 +# 21: 1062903055 1336 810283715 1336 +# 22: 2638704989 1465 338245948 1465 +# 23: 3441453532 1600 2213581565 1600 +# 24: 1836362684 1741 2056241218 1741 +# 25: 3423398348 1888 3519123827 1888 +# 26: 3262548375 2041 684292199 2041 +# 27: 3598993221 2200 1577275941 2200 +# 28: 3728319498 2365 1061803162 2365 +# 29: 3729945629 2536 133069086 2536 +# 30: 3645113424 2713 3302414477 2713 +# 31: 2873651818 2896 3660671646 2896 +# 32: 1408491813 3085 2010949125 3085 +# 33: 3781351758 3280 1548995986 3280 +# 34: 3242345057 3481 3082631326 3481 +# 35: 2550511376 3688 1038419921 3688 +# 36: 1028065649 3901 2532290776 3901 +# 37: 1140380377 4120 2428435544 4120 +# 38: 1066850059 4345 3102961014 4345 +# 39: 3620700071 4576 1898018896 4576 +# 40: 504158758 4813 272658385 4813 +# 41: 1349365217 5056 270227718 5056 +# 42: 41774986 5305 509262620 5305 +# 43: 2655322328 5560 4133072843 5560 +# 44: 2318607206 5821 3294034402 5821 +# 45: 2178510518 6088 3314361750 6088 +# 46: 3285054002 6361 2469557621 6361 +# 47: 3047461329 6640 3629344726 6640 +# 48: 137286416 6925 4222495543 6925 +# 49: 2115001463 7216 2668575184 7216 +# 50: 1677997300 7513 2978221605 7513 +# 51: 1365174489 7816 3575061958 7816 +# 52: 2863311036 8125 1791798959 8125 +# 53: 3791281707 8440 3482008958 8440 +# 54: 2687508733 8761 4163388707 8761 +# 55: 2593010606 9088 3561733531 9088 +# 56: 2976537803 9421 3234561645 9421 +# 57: 2850729115 9760 1244925692 9760 +# 58: 224433311 10105 3825098819 10105 +# 59: 547683536 10456 3988409437 10456 +# 60: 369722519 10813 2020750234 10813 +# 61: 745454697 11176 1184600938 11176 +# 62: 1380472574 11545 1044589924 11545 +# 63: 1812671001 11920 238104621 11920 +# 64: 2833858343 12301 228306790 12301 +# 65: 957265138 12688 470109697 12688 +# 66: 895413590 13081 944950937 13081 +# 67: 3724154793 13480 126668527 13480 +# 68: 741064239 13885 1930273504 13885 +# 69: 785023636 14296 3279987135 14296 +# 70: 3649222232 14713 2854788625 14713 +# 71: 1997467987 15136 1689264112 15136 +# 72: 3469507186 15565 682126673 15565 +# 73: 2831204610 16000 1826370607 16000 +# 74: 3154512856 16441 1843713601 16441 +# 75: 1469123916 16888 3700274597 16888 +# 76: 2909139778 17341 2769322155 17341 +# 77: 2945643808 17800 1176063119 17800 +# 78: 3334870474 18265 2274153840 18265 +# 79: 1788316629 18736 1170513638 18736 +# 80: 1236198778 19213 780491458 19213 +# 81: 1946474293 19696 2989417839 19696 +# 82: 1479086076 20185 1500511762 20185 +# 83: 3510147444 20680 1990564736 20680 +# 84: 4044688071 21181 2820276538 21181 +# 85: 1293455808 21688 1335142677 21688 +# 86: 3408774244 22201 2664774438 22201 +# 87: 3591290969 22720 1236374968 22720 +# 88: 3814759633 23245 2889543826 23245 +# 89: 4157749717 23776 4033323913 23776 +# 90: 3512276083 24313 1722273029 24313 +# 91: 797424413 24856 1737843448 24856 +# 92: 3480584612 25405 1304329442 25405 +# 93: 2445523895 25960 1260847516 25960 +# 94: 3157009888 26521 1120864660 26521 +# 95: 103872014 27088 2076594208 27088 +# 96: 1584398684 27661 213099822 27661 +# 97: 3586313190 28240 944151015 28240 +# 98: 4086203619 28825 1961862620 28825 +# 99: 3656777902 29416 2475351252 29416 +# 100: 2246720411 30015 4055518595 30015 + + + + \ No newline at end of file diff --git a/test/ps-roundtrip.ok b/test/ps-roundtrip.ok new file mode 100644 index 00000000..67f7a1fe --- /dev/null +++ b/test/ps-roundtrip.ok @@ -0,0 +1,2 @@ +1926073387 101484 +2425386270 41 diff --git a/test/ps-roundtrip.test b/test/ps-roundtrip.test new file mode 100755 index 00000000..6d6935af --- /dev/null +++ b/test/ps-roundtrip.test @@ -0,0 +1,21 @@ +#! /bin/bash +# This script tests: pnmtops pstopnm +# Also requires: pnmtopnm + +${PBM_TESTPREFIX}pnmtops -nocenter -equalpixels -dpi 72 -noturn testimg.ppm \ + > ${tmpdir}/testimg.ps +xysize=`awk '/BoundingBox/ {print "-xsize="$4,"-ysize="$5}' \ + ${tmpdir}/testimg.ps` +${PBM_TESTPREFIX}pstopnm -xborder=0 -yborder=0 $xysize -stdout \ + -quiet ${tmpdir}/testimg.ps | \ + ${PBM_BINPREFIX}pnmtopnm | cksum + +${PBM_TESTPREFIX}pnmtops -nocenter -equalpixels -dpi 72 -noturn testgrid.pbm \ + > ${tmpdir}/testgrid.ps +xysize=`awk '/BoundingBox/ {print "-xsize="$4,"-ysize="$5}' \ + ${tmpdir}/testgrid.ps` +${PBM_TESTPREFIX}pstopnm -xborder=0 -yborder=0 $xysize -stdout \ + -quiet ${tmpdir}/testgrid.ps -pbm | \ + ${PBM_BINPREFIX}pnmtopnm | cksum + +rm ${tmpdir}/testgrid.ps ${tmpdir}/testimg.ps diff --git a/test/rgb3-roundtrip.ok b/test/rgb3-roundtrip.ok new file mode 100644 index 00000000..745a7c5f --- /dev/null +++ b/test/rgb3-roundtrip.ok @@ -0,0 +1,5 @@ +1926073387 101484 +2425386270 41 +0 +0 +0 diff --git a/test/rgb3-roundtrip.test b/test/rgb3-roundtrip.test new file mode 100755 index 00000000..9cc45499 --- /dev/null +++ b/test/rgb3-roundtrip.test @@ -0,0 +1,31 @@ +#! /bin/bash +# This script tests: ppmtorgb3 rgb3toppm +# Also requires: pgmtopbm pgmtopgm ppmtopgm + +# Break an image into three monochrome planes, reassemble the +# image from them and check whether the resulting output is +# identical to the original input. + +cp testimg.ppm ${tmpdir} && +${PBM_TESTPREFIX}ppmtorgb3 ${tmpdir}/testimg.ppm && +${PBM_TESTPREFIX}rgb3toppm ${tmpdir}/testimg.red ${tmpdir}/testimg.grn \ + ${tmpdir}/testimg.blu | cksum + +rm ${tmpdir}/testimg.{ppm,red,grn,blu} + +cp testgrid.pbm ${tmpdir} && +${PBM_TESTPREFIX}ppmtorgb3 ${tmpdir}/testgrid.pbm && +${PBM_TESTPREFIX}rgb3toppm ${tmpdir}/testgrid.red ${tmpdir}/testgrid.grn \ + ${tmpdir}/testgrid.blu | \ + ${PBM_BINPREFIX}ppmtopgm | ${PBM_BINPREFIX}pgmtopbm -th -val=0.5 | cksum + + +# With PGM or PBM input, the three monochrome planes should be +# identical. Test for this. + +diff ${tmpdir}/testgrid.red ${tmpdir}/testgrid.grn ; echo $? +diff ${tmpdir}/testgrid.grn ${tmpdir}/testgrid.blu ; echo $? +${PBM_BINPREFIX}pgmtopgm < testgrid.pbm | diff - ${tmpdir}/testgrid.red; + echo $? + +rm ${tmpdir}/testgrid.{pbm,red,grn,blu} diff --git a/test/testgrid.pbm b/test/testgrid.pbm new file mode 100644 index 00000000..cc6a50aa --- /dev/null +++ b/test/testgrid.pbm @@ -0,0 +1,3 @@ +P4 +14 16 + \ No newline at end of file diff --git a/test/testimg.ppm b/test/testimg.ppm new file mode 100644 index 00000000..061d5368 --- /dev/null +++ b/test/testimg.ppm @@ -0,0 +1,4 @@ +P6 +227 149 +255 +0/-0/-10.21/51.51.62/62/83/83/:3-:3-:3-:3-:3-:3-:2/91.91.80-80-91.91.:2/80-80-80-80-80-80-80-80-6.+6.+6.+5-*5-*4,)4,)4,)4,)4,)4,)4,)4,)4,)4,)2-)/*$/,%/,%0-&1.'2/(30)30)63,63,74-85.85.96/:70:7.A:0B<0D>2F@4IA4JB5KC6KC6MD5MD5OC3NB2OC3OC3PD4RE5R?1Y?2b@4nB5}E6H8G9F7G:G9E:G;G>G?H@E@FLCLDKEICIBD>B=A;A:@:?<??@@>?<A7=/@.@.?-?-@-?-@-@,A,A-B,@*A)@*A,>-?/?/>.>,=+<+<+?+?+=*=*=*>+?,@/?6>5=2?1B3D3D4D4?0A2F8H;H9oA2T8*C3&=5295495473271160050-50-72/72/72/61.61-50,50,41,//-.0-//-//-0/-0/-2.-2.-5,-4+,4*+3)*7(+=.1E69P:<jBC|IHMMOOW[dnot{~sy`aTKvPDhSJgOG^MH^TQbfdo|}{|lfgUXWEQNEUR[UQbUQb0/-0/-10.10.40-51.62/62/83/83/:3-:3-:3-:3-:3-:3-91.91.80-80-80-80-91.91.80-80-80-80-80-80-80-80-6.+6.+5-*5-*5-*4,)4,)4,)5-*5-*5-*5-*5-*5-*5-*3.*0+%0-&0-&1.'2/(30)41*41*63,63,74-74-85.96/:70:7.@9/A;/C=1E?3H@3IA4JB5JB5LC4LC4MA1MA1MA1NB2OC3QD4P>0U?1^A3jC4xD6E4E5C3C4A4A4B7D:E<F=C@EIBICIDHDGBD@C?C;A:@:?<??@A>@<@6>/@.?-?-?-?,?-@-@,@+A-A+@*A)@*A,>-?/>.>.>,=+<+<+?+>*=*=*=*>+?,@/@5>5>3>1A3D4C4D5A2C6F8I;G:l@3S9*B4)>63:6595484382271161.61.72/72/72/61.61-50,50,41,//-.0-//-//-0/-0/-2.-2.-3--5,-4*+3)*5)+<-0C47N8:d>=vEAJINLTVajl}r{{ou[[QHuOCiOFeOG_PH_RN_[Yfnot~ojkY][LVSJXSZVRaXQa/.,/.,0/-10.40-40-51.51.72.72.72.72.92,92,92,92,91.80.7/-7/-7/-7/-80.91/80.80.80.80.80.80.80.80.6.,5-+5-+5-+4,*4,*4,*4,*5-+5-+5-+5-+5-+5-+5-+3.*2-'1.'2/(30)30)41*41*52+63,63,63,74-85.96/96/:7.?8.@:.B<0D>2G?4H@5H@3H@3I@1I@1K?1K?1K?/L@0MA1NB2MA1QA1YB2dC2qC3|C2B2A0<-:+;.=2@6D:F=D>CE@FBGBFDFCEAD?D;@:?;@=@@@A=@;@5=.@-@-?,?-?->,@,?-@-@,A+A,?*@*@+>->.>.>.=+=+=+=+>,>,<+<+=,=,?+?.A6?5>3>2A4C5D5C5D8F;I=J=G;h@4Q:,B5,?74=77<66:4494183072/72/62/62/62/51.52-41,41,21,.0-,1-.0-.0-//-//-0/-2.-5//4..5,-4*+4*+9-/>24I56[97l?9|E@IDOM[`fvmw}}u~fmTVMEvLAkMAeOFcQHcMH^NK\[[eqty|xzlfiXZ[MVSLZU[ZT`[S`.-+/.,/.,0/-3/,40-40-40-61-61-61-61-81+81+81+81+7/-7/-6.,6.,6.,6.,7/-7/-80.80.80.80.80.80.80.80.5-+5-+5-+4,*4,*4,*3+)3+)6.,6.,6.,6.,6.,6.,6.,4/,30+30)30)41*41*52+52+52+52+52+63,74-85.85.96/96->7-?9-@:.B<0E=2E=2F>1F>1G=1G>/H<.I=/I=/J>.L@0JA0KD2NE4UD4^D3iD2sB1~A/?-9)9'9*<-@3E8H<F>DCACBCDCCDBC@C?A;@:?;@>@A@B=@9@3=-@,@,@,>,?,?,?+@-?,@+@*@+@*@)?*>,>.>.=-=+=+<*<*=+=+<*<*<+>,>-?-A6?5>2@4B6C8C7B7F<J?L@K>|F:b@4L:.A7-@85>96=77<74:5294183083062/62/62/32.52-21,21,12--2.-2./1./1.00.00.10.10.5106005//5,-4+,6,-:01D22T71c;3qA7{E;HDRU_lis}yx}ow`fQRLEyL@pL@hPEgQFfLC^GBVMLZ^^fjnquyxx}wzvwzokoa`bTWYLTTL]WY]V]]V^------.-+/.,0/-10.3/,40-3/,3/,4/+4/+4/+4/+6/)6/)4/,4/,3.+3.+3.+3.+4/,4/,50-50-50-50-50-50-50-50-3.+3.+2-*2-*2-*1,)1,)1,)4/,4/,4/,4/,4/,4/,4/,4/,41,41,41,41,41,52-52-52-52-52-63.63.74/85096196/<5-=6,?8.@9/B:/C;0C;0C;.D:.D:.F:.G;-H<.I=/J>0I@1JG6MH5RG5YF5bE3jD1uB/}>,;):):*=,B2F8J=I?GBDCDBEBBBAA=@<>:?:<<>?>B>C:A5?0?-?,?,?,>->->-?->.?-?,?+?,?+>*>*>,?.>->->-=,=,=,=,=,=,=,<,>->.?.B4A4@1@3A7C9B8A7C;H?LCJ@tE;Z>2E9-<5+@93@85?75>63=52<4194083/62/43/43/23.32.12-12-02--2.,2.-2.-2./1./1.00.10.3205105104..2,,4+,7./=/.N5.Y9.e=1n@3sB;yKKZegpzxu{ks_dTTOGLBwNAmNBhMAeJA`GBYGFXKKWMPU]cc`fbbia`f\Z`TW[MUXMXXP^YV`WX`WZ,,,,,,.-+.-+/.,0/-3/,3/,2.+2.+3.*3.*3.*3.*5.(5-*3.+3.+2-*1,)1,)2-*3.+3.+3.+3.+3.+3.+3.+3.+3.+3.+2-*2-*2-*2-*1,)1,)1,)0+(3.+3.+3.+3.+3.+3.+3.+3.+41,41,41,41,41,41,41,41,41,52-52-63.74/85085085.;4,<5+=6,>7-@7.A9.A9.A9.C9/C9-E9-F:.G;/H<.J>0HA1JG6IH6NG5VF6\E3dC2n@0v>-{<+;);*=,@1F5J:J=H@EAFAE@CA@>>?:<;<:;<=@=C=C8@2>,?,@,?+?+?->,>,?,>-?,?,>,?+>*>)?*>+>->->-=,=,=,<+=,<+<+<+<-=,>/?.B4A2@2B5C9C:B:A;A9I@NGNEoG=S?4A;/96-@93A75?74>63<4194083/74/43/43/34/23.23.02-02-.3--3/-3/.3/.3/02/02/11/11/21/32032040/2.-1-,4..8.,G4-O4)X8+`<0e?6mGFyYdku||w|nudh[[RMLB~OArL@hI=cH>`HB^ECX@BO;@FBGJDMJJQJJQIIQFKQEOUIVWO^YS`YS`XU++++++,,,---/.,/.,0/-0/-1-*1-*1-*1-*2-)2-)2-)2-)2-*2,,1++1++1++1++2,,2,,1++1++1++1++1++1++1++1++2,,2,,2,,1++1++1++0**0**3--3--3--3--3--3--3--3.+41,41,41,30+30+30+30+30+41,41,52-63.74/74/85085.:3+;4,<5-=6.?6/?6-?6-?7,B8.B8.E8/E9-G;/H<0J>2H@3HE6GF4KE5QD4XC2_B2f?.n=,v=,|:*9);*=.B2F7F8F<F>F>E>D@C?@@>>::;:<<A<C;D6@/=)?-@-@-?,>.>.=->-=.?.?-?-?,>*?*>)>+>->-=,=.=.<-<-<-=-;,<,</>.=0?/C2B1A1B6C:C<C=C=FAQJXRXQsRIWI>CC7<?6>93@72>71=60:5/94.83/63.43.43.34/13.13..3-.3-.3--3/-3/-3/-3/.3/.3/02/02/00.11/22021/0/-/.,2.-4/,?0+D0)K3)T8-Z<4dFFu]js~tzmpceVSLCK?qI<gG;cE>_FB]DBW?AN;?H:BE>HGDMHGQIGQHJRGNVKUXM^ZOaYNaXO++++++,,,,,,.,-/.,0/-0/-1-*1-*1-*1-*2-)2-)2-)2-*2,,1++1++0**0**1++1++2,,0**0**0**0**0**0**0**0**2,,2,,2,,1++1++0**0**0**2,,2,,2,,2,,2,,2,,2,,2,,3/,30+30+30+30+30+30+30+41,41,52-63.63.74/85085092,:3+;4,<5->5.>5.>5.>5,B8/B8.E8/E8/G:1I=1J>2I?3FC4FC4JB5OA4TA2\@2b>0j<-q<.w9*}8)8(:,=/B4B5F:E;F>G?G@FACAB@;;;;>;B;D:D4@->(A-A-@,@.@.?-?->/>.@.?.?->+?*>)>+>->->-=,=.<-<-=-=-<.<.<.</>/>1?1D2C1B4C6C;D>D>EAPL[Te\f]u_T[UIGMACI?<92?82>71;6094.74-63.43.43.34.24/13./4..3-.3-.3--3/-3/-3/-3/.3/.3/02/02///-00.22022010.0/-0/-3/,8,,;,)C0*K70S<6^IHtbnzƄzrxikWWIDE=nG<dD<aC>^CAY@CV@DP>EKGQRKWUQ^WU`XS_UR^TT^SY_S^[LaZJaZJ,-/,-/,-/,.-------.-+.-+/.,/.,1-*0,)0,)0,)/+(/+(/+*/+*/+*/+*/+*/+*/+*0,+/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*0,+0,+1-,1-,2.-1-,1-,1-,1-,1-,1-,1-,1-,0,)1-*2.+3/,3/,3/,3/,3/,3/,3/,3/,3/,40-51.62/74/80-92,:3-;4.=4/>5.>5.>5.?4.?5,B5-C6.D7/F90G:1F<2G?4H@5J@6P?5T>3X<1^90b6+m9.t8-|8+9,;/=0?1>0A3A4C8E:G=G>E?C@@?BADAE>D8B1A.B,A.@-?,>.=-=->.?/<,=,<->-=,=+=*>*<+<+=-<,<,<,:-;-=/</</=0>3@2A5A4E5D4E9I>G@D>EAMGZRf_qfsh~rdjj^V^SIQFLLBJF=B>5<8/95,74+63,33+43.34.14-14-02-/1,,1+,1+-2.-2.-2.-2./1./1./1./1.02/02/11/11/11/11/11/40/4+0;/3A32C4/J;6]OOymyϐكtzjn_bZ[LItHBdA>]>>X?BUAIVLU\U`bbqnn}xv|rulyoguh_k_W_P]\Hb\Fc]G,-/,-/,-/,-/------.,-.-+/.,.-+0,)0,)/+(/+(/+(/+(.*).*).*).*)/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*0,+0,+0,+1-,1-,1-,1-,1-,1-,1-,1-,1-,1-,0,+0,)1-*2.+3/,3/,2.+2.+2.+2.+2.+2.+3/,40-51.62/80.91.:2/;4.=4/>50>50=4-?4.?4.A4.B5-C6.E80G:2H;3H>5H>5L=6O>6Q=4V;2Z90_7/h70p7.w7-9-9.<1<1=1@3A3B5D8E:F<E=D=D@E@FAG>F8C2B-B-C.B-@.?-?-?->.>.=,>,=-=,=+>+>*=,<+=+<,<,<,;+;-<-</=/=1=1>2@6A7B6G9E7G<J@IBGALFTNd\qf~oo|mmseZfZNXMLNAKI=EC7@=4=:188.44,11)23-23-03,/2+/1,.0+.0+.0+/1.-2./1./1./1./1./1./1.02/02/11/11/11/11/11/2015+49-7<23?53H?:^VTxr|ʐԄyqykthn\_XZqSUjRWjT^hZgmfvvrt~~vyrqfteZeT[ZE`Z@b\D,-/,-/,-/,-/,-/,.-------.-+.-+.-+-,*/+(.*'.*'.*',+),*+,*+,*++)*+)*+)*+)*-+,-+,-+,-+,-+,-+,-+,-+,,*+,*+-+,-+,-+,.,-.,-.,-.,-.,-.,-/-./-./-./-./.,0,+0,+1-,2.-2.-2.-2.-1-,1-,1-,1-,1-,2.-3/.40/51.80.91.:2/;30=31=4/=4/=4/?40?4.A4.A4.C60D71F93G:4H;5J;6K<7N=6P;6S:5V72[6.c60k6.t5,}7/9/;0<0<1?3@4@3@3C6D8E:D:F@H@IBI?E:C3B.A.B/A.?.>->->->/?0<-=-<.=.>-=,<+=+<*<*<,;+;-<-:-;-<0<0<2>3?4A8C:D9J=H;H>KDKFLGSM`Vsgqz{wsocqbXcUNRDMN@HI;DD8@@49;.46+/1&01)01)/0*/0*./*./*//-//-//-.0-//-//-//-//-//-//-00.00.00.00.00.00.00.1/26+97+98/4;63HE>_^Yzz|DŽ}{|}}wq~n}n~~o~y|{j{i\hTXX@]Y<_[@-.0-.0-.0-.0-.0-.0.......-+.-+-,*-,*.*'.*'.*'.*),*++)*+)*+)*+)**()*()*(),*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+-+,-+,-+,-+,.,-.,-.,-.,-/-./-./-./+*0,+1-,1-,1-,1-,0,+0,+0,+0,+0,+0,+1-,2.-3/.40/91/:20;31<41=31=31=31=4/>3/>3/@2/@3-A4.C60D71E82F93H94I:5J;6L:6N94Q83T50^72e60o6/x8/90:/<1>1?4?4?2?1A2B5D7E:G>H@JAI>F:B5A0@.A-A-?->,>,>,=.>.<,=,=.=-=,=+=-<,;););+;+;,;,;-;,;/<1<1>5@7C:D<E<L@H<G>JCLIQL]Vj^oyzxm{jbm]SZJQUFKO@EI:@D6;=057,13(01)/0(./).-(.-).-)/.,0/-/.,/.,/.,/.,/.,..,/.,..,0/-//-0/-//-//-//-//-2-17,:6*83-1961HJ?bfX{z}|k|iXfOSV;ZV9^Z=+/2+/2+/2+/2-.0-.0......------.-+-,*-,*,+),+),+),*+,*+,*++)*+)**()*()*(),*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*++)*+)*+)*,*+-+,-+,.,-.,-/-./-./-./+*0,+0,+0,+0,+0,+/+*.*)/+*/+*/+*/+*0,+1-,3/.40/901:20;31<42=32=31<20<20=20=2.?1.?1.@2/A30B5/C60D63C84D95E:6G96H94K84N50X72_60i70r7/}:1<1>2>2@6?5?5?3@3C5C6E8E;G=H>G=D8A5?0@/@-@-?.>-=,<,=/=/<.;-</<.<-<,<,<,;+:*:*:*:+:+:,:.:0<1=4?6B9D=F@H?KAH=G?LEPLXQf]vhw~}tqjue\eRV_LNUCEL:?F6<@27:/68-01)00(.-(/,'/+(/+*1-,2.-1-,1-,1-,1-,1-,/.,1-,/.,2.-0/-2.-0/-0/-0/-0/-2-18,:5)51++66,GL8`hQzp{xgzdTbIQT9VU9XW;,03,03,03,03./1./1//////....../.,.-+.-+.-+-,*-,*-+,-+,-+,,*++)**()*()*()+)*+)*+)*+)*+)*+)*+)*+)*,*+,*++)*+)*+)**()*()*(),*+,*+,*+-+,.,-.,-/-./-./+*/+*0,+0,+/+*/+*.*)-)(0,+0,+/+*0,+1-,2.-3/.40/:12:12;31<42=32<21<20;1/=20<1/>0->0-?1.@2/A4.?4.@51@72@93A:4B94C84F74H5/Q51X5/a6/l8-u9.</>0=1?5>5?5?4B4B4C4D4B5D8E:E;B7?4>1>0?.?+=,=,<+<+<.<.;-<-<.;-;,<,;+;+:*:*9):):+9*9-9-<1<3?6A8C<F?IBICJAG>HCNJVR`Zper}~~yup{jdp\]iSR^JJS@BK:>E5:@29<134,22*1.)/,'/))0**1++2,,1++1++1++1++1++0,+0,+0,+1-,1-,1-,1-,/.,/.,/.,2,.8*75(13+(56&EK1\gGudyťέɭʰ˱Ȭ{wrdx]Q_ENR7QQ5SR6,03,03,03,03./1./1./1./1/////////////.,/.,.-+.-+/-..,-.,--+,,*++)*+)**()+)*+)*+)*+)*+)*+)*+)*+)*+)*+)*+)**()*()*())'()'(+)*+)*,*+-+,.,-.,-/-./-./+*/+*/+*/+*/+*.*)-)(,('0,+0,+0,+0,+1-,2.-40/40/:12;23;23<34=32<21<21;10<1/<1/>0/=/.>0->0-?1.>3/=60;60;83<94=:5>93@72C60G4.O4+Y4+d5+n8,x:-;.;.<4<5>3@3A2B1A2@0>1@4B7B9@6>5=2?2?-?->,=+;*;*<-<-;.;.;-;-;.:-:,;,9)9):)9(9*9*~8,~8,<1=4@7B9E>IAKFMFIAH@JFSO]Xhb{ny~wxnjxadr[ZhQQ]IITCCL;>D6<?467/44,30+0+'1()1()2)*4+,2)*2)*2)*2)*2)*0**0**0**1++1++0,+0,+0,+0,+0,+1+-6)25)-4-%46!AH&Wc;qWm}ȔНӫҮѭ˥{{tqk_sWM]BIO3JM0KK/./1,01./1./1.0/.0/.0////00.00.00.0/-0/-0/+/.,1-,2.-1-,1-,0,+/+,,*++)*+)*+)*+)*+)*+)*+)*+)*+),+)*+),+)*-(,*(),())'()'((&'*()+)*,*+,+)-+,.-+/.,/.,-,*-,*/+*/+*.*)-)(,(',('1-,2-*2-*2-*3.+4/,50-61.;31;31<42<42=31<20;1/;1/<1/<1/=/.=/.=/,>0-?1.=2.=4-=6.;819919:29:2;81?6/C2+J1,T2)^3*g7+o9-u=.z</=2=3?2@2@3@1?1=/</>2B6C7B7?4>2>1>/=.=-<,=,=,=.>/<.<.</;.:-:-:,;,:+:+:*~;*~;+|:*}9,|:.>2>5@6C:G=JBNEOGICIDPJ\Tg`uiu~zytoi}bby]\pUUgOO\HGRAAH8=A388.85.7/,3+)2()2()3)*4*+0*,/+*0*,0**0*,0*,2),2),3*-1+-1+-1+-0,-0,-0,-1+/4)/4*+4-%46!?F%T`8m|Qgtz~z{Ĉːəǝƚ~xvolfZnSJZ?GM3FJ1DF./0+.0+/0+01,01,01,12-21-32.43/43/62/51.41,3/,4/,50-50-4/,3.+2,,1-,0,+0,+.,-.,---/--/,,.++-*).))+.)/.)-/(/.)-/)-.)-.*+.*+/+*/+*-,*.-)--+-.)./*./*------.,-/-./.,0/-2.+2.+2-*4,)5-*6.+8/*:1,:1*;2+=4-=4->50>50>50=4/<3.;2-=2.<1-<1/;0.=/.>0/>0/@1.A0)@2);4*77-39-28.56.:3-?-)F*'L)'S*&Z/(`5,d<0k@0yA0@/A1B3@3=0;/8-;/=.A1B2C2A0>.;,;0:2;1=0?0?/?.>.@1?0>1<0;/:.:-;-{9+~@3w<.q7)w>-w>-v;-}?2{;/@4E9I?LAMBPCNEKISPbYpa}jq|~u{ouiib_[zXZsUZnSWeNPWEJK=C?6@93;0.6**3')3'+3'+1&*,*-)+***,*(),'+.(,1(-2'-3(.3(.3(02(00)10)1/*1/*0/)-1++0-(//#<?*V\@pzXgusvwvu{}|{~}~|yurmh|cYkUMZFIQ<CH4?B//0*01+01+01+12,12,21,32-43.43.74/74/63.52-50,50,7/,7/,6.,6.,3.+2-*0,+0,+0,-/-./-0--/-,1+*/)*.)(-.)//(//(//(//)-/)-.*+.*+/+*/+*.-).-)./*./*./)./*.....0....../.,/.,1-*3.+5-*5.(7.)8/(:/);0*<2)=3*>5,>5,>5.>5.>5.=4-<3.<3.=2.<1-;0.;0.=/.=/.>0/@1.C0*C0)A2+>4+:6-95,:3-<1-?-+D*)I*(N+'T/)Z5-_:1e>/pA/xA-A0@2?4=3:2;19.</>.@0A1A1A/?1;2;2<2=0>0@/?/?.@1>/=0<.;.;,:,;,x8,x<1s9-n9+s>.s>.r8*u:,}=1A5E:I=K@NAPCNEJHSRf]wfpww}ovei``YZY{X\wXZnSSaJNUCFH;C@7<737/-3*+2)*1(+.(*,*+**,+),+),-(,/)-2(02(02(02(02(10)1/*1-*3-*3-*12-12.-0,)--%8:,SXBox]iolnpppw{xwy||{xuqnh{eYjWMZHEL<@D5;=/12,12,12,12,23-23-43.43.54/54/85085085074/72.61-80-80-7/,6.+4/,3.+2,,1-,1-./-.0.1/-0--/,,.+*/+)./(/1'//)-/)-/)-/)-.*+.*+0,+0,+/.*/.*/.)0/*0/*0/+//-///0./0./0/-/.,1-*2-*6.+70*90+:1*<1+=3*>4+?5,?6-?6-@7.@7.?6/>5.=4-=4-=2.<1-;0.;0.;0.;0.<1/?1.C2+E0+H/+K--L,/K+.I*/E+.A-,@.*A.(E.(M.)X1*b3-g5,j:,o;-w;0=4<6<5:4:4<2=2>2?3A2A3B5C5?2=/>1>.>/>,=.<,;.<,:-:*;,<)~=+{<+}=1z<1v:/u;/x@1x@1v<.v;-?5B8F=H?JAKANCNFJHTQf\vent{}yximae\a\`]`[|]UrVPhPFYEBP?:D93:2.3,*/)*,)**(0'(1&*1&*1&*0'*1(+0*.0+//*.-+.,+0+,0)-0(-1(-1)-01/23/..*'**"57*PUAmv[|ik~jjnn~mqx|zxvvuwyy}}ywtpmh|cYkUMZHDH9=?299-23-23-34.34.34.45/54/54/650761961:72:72961940940:2/91.91.80-50-4/,4..4..3/03/01/01/20.1..0--/-+.0)02).0*.0*.0*.0*,/+,/+*1-,1-,0/+0/+10+10+10+10,11/1111/010.10.2.+3.+3.*92,92,;2+<3,>4+@6-@6-A7.B8/A8/B90A8/A81@70>5.>5.=2.=2.<1/;0.;0.<1/=20=2.B3.E2.L..R+0V'/U&.P'/I).C/.<1+;2)?2)G0(R/)_.*d/)i9/k;/u<3}<6;8;9;7:6>8@8B9B9C7B7A7A5@1A/@.@.>-<,;+:+8*9*:*:)<){=(x>(x>*>1{7.z7.z<1v;-w=/|A3{@2B7E:H=J?J@MBODQHSJ\Qh[tbgm~v|~}yqoiifgfeggde_~_Zw[PhPK^JBP?8D62:/.4*,/(+*%2&&5%(4%(2&(1'(/)+/+,.,-+++*+-*+-(,-(,/',/',/*+-.*+1++0+'.+"88,PUAiqYvc{hyh|il}mykzmrtq}p}p}s~v~x}x|x}zzwuqnje|bWkRN[GDF9?=1:8,45/45/45/560560560761761872872;83<94<94<94<73<73<41<41;30;3083072/61.61.5106216213122011/00./1-.2,04+.4+.4+.2,.2,,2,,2,,3/.3/,3/,3/,21,21,32-32.32032032032051051.61.61-;4.<5/=4-?6-A7.B8/E8/C9/D:1D:1E;2D:1C90B8/@5/@5/>3/>3/=2.=2.=20=20>31>31@51E31M02T,4X)3W(2R)1K,1B30:6-77+:6*B4)M2)X/)^/)f:1j;3s<7z=:<:<;;;::;7>8A8B9C:C:@9@7C2C1B0?/=.<.:-9-7+8+9+:+~=+x>*v?*x>*9-|/'8/>4w4+s5*}A6}C7E:G<I>J?KBMDQGWJ|aNzjQpYu]|biu|~{}zwzpzlxlwkumrlmgkd`rX[iRR[HHL=@@4;7,70&5*$6('5''3''1'&.)&+*(++)+-*',('+*)+*)+***,+),+),-)*,#$2*'50*86*BC5UZFfpWn}^teqbuexiwkshtiwkznxlwmxnys{u{w|wyuzwwtsomhd{_WkPN[GCC7>:195,560560671671782782872872983:94=:5>;6>;6>;6>95>95?74?74>63=52;63:5294194184184395484373243151240/6-06-.6-06-.4..4..4..4/,40-40-40-51.32-32-43.43.43/431542540841850940:5/=60>7/@7.A8/C90D:0G:1H;2F<3F<3F<3F<3E;2C90B71A60@51@51?40>3/>31?42@53?53@72C52I35P16T/6S.5P05J22C52=90<:-=:+C7)I6(Q3)W2)]2+d3,l50v64}77877766~75}:4}<6}>5?9@8?9A8B3C1B1@0=/;.:.9-9,9,:,<,|=,y>,x?,|=,5*2,LEXQA8|90F;K=yH:zJ<{M>|N?}OBQEUJ_LrkOosR|uXw]ybiszz|~{y~vpoppp{pwmskj~bfv\_hSV[GOM>GA3@6*=0';,'9+(6+'3+(/,',-'+.').().(+-(-,*/+*3)*4(*7'*7'(3($<3,E>4IG8QR@]bKgqVjyZn]k\l]pbqeodoerfumrjqitnxrzvyvyvvtwvurokjfc|^UlON\ECC7@91;4,671782782782893893983:94:94;:5>;6?<7?<7?<7@;7@;7B:7B:7A96@85=84=84<73<73<73<74<74<74;639529338308/09/.8/080.80.80.61.61-61-61-52-52-63.63.74/74/540540841952:63<94=84@93@70A8/C90D:0G:1H<0I=1I=1J=4J=4J=4I<3F<3D:1B8/A7.A81@70@72?61?61@72@72A83?74@85B86D97G96H96H96H94E80E8/E9-E9+G9,I9*K9+Q7*Z/&d/'n3-z6398;9;:=;A>@:=6<3:3<4=7@7A5B3@2?2=1<0;/</~<.|=.{=.|>/|>/}>/=/9/1+<8lf~yZTC<LAN@tJ<qM=pQ?qR@tS@zWD[J~eOmsOo{Uy[u_ocmfqkwowz~~yvrrrrr|sxptpmiiedx\]kQV^GMP;ED0B;+@3+?2,;0*70*30)00(./'./)/0*2/*6,+:*+>(+C&+E$+C&(F5-LC4VQ>[YD`bJgmQiwVj{Wl[gWfWl\oananbrfskojoirnwtyxxwuvssuvsrnlicb{[TmMM]CGH:E<5@707827828938938939:4:94:94;:5<;6?<7@=8@=8@=8A<8A<8C;8C;8C;8B:7?:6>95>95=84>95>95>95>95=85<73:51;30:0.:0.91.91.91/91.91.72.61-61-63.63.63.74/74/74/540651952;83<94?:4B;5B;3A8/B:/C9/E;/H<0I=1J>2J>2K>5K>5J=4J=4F<3E;2C90B8/B92B92A83@72@72A83B94A:4?82@93B;5D=7F=6G<6K<5N;4M6.N6,Q6+Q6+Q7*P9+P9)V6'f6*r6,~;3@9D@HDJGLFQJLDD;;07-7-91=4>5>7=6<5<5=4}=3z>3x@3vA3x@3z>3<3:37331(&=;|zhcG@K@xH:nM<jQ=fT>hV>lX@t[E`LhPysQwUt\l^__V\Q[T\ouzx̆|~}xvrtuuussr|nyju{amoWgbN_TBUE5R</O4-M1-I0,D/*>/(9/&7.'6/'81):/)=.+A,+F)+H(+K'+H)'TB4YQ<d^FgeLilOnuVm{Xl~XkZgVgVm]pbqbrduitlokojrmwvyxwytusuuusqokiea|[TmMM]BMN@KB9F=69:49:49:49:49:4:;5=<7=<7=<7=<7@=8@=8A>9B?:D?;D?;E@<E@<E@:D?9D?9C>8E>8D=7B;5B;5B;5B;5B:7B;5A:4A:4A83A83A83@72@64>71>71>71<71<71;60:5/85.85.74/74/961961961:70<71=82A:2B;1C:1D<1F<2J>2K?3L@2N@3N@5N@7N@7L?6K>5I<3H;2E;2E;2B90A8/@91?80?80?80@93@93<5/MD=M@:K:3T@9R62O0+a<6\3-`5.`4+^/'^/%f6,m=1q=0I=G;I?KAF>>7=6D;NDPEVJYKOBA5;0>69898655284?8|@6r>1rB4oA2q=0v:07243-1',HIbaEDWUyvVOF<VFmR=i[AibFjeHj`En^D|dLjTbLm]nhX];L-E+H0L@YI\[enr{|ۀ}ۃ؉vwxxxwyxo~mxioabYUM{IBxA>u:<i.2d02a11P&'G%#L0-M51G4.E2,D1-F1.F.,G+*K--Q6/YH4`W:f_BgdEkoNu|Zu]oYlWlZp]rasbudwfvhrjsosqqostwxz|yzxysrmjkfidazZTmMO_DNO?SK@PG>9:49:49:49:4:;5;<6>=8?>9>=8>=8A>9A>9B?:C@;D?;D?;FA=E@<E@:E@:D?9D?9E>8E>8E>8E>8E>8D=5C<6C<4D;4C:1B92B92B92B92A83A83@93@93>71<71;60;6096/85.74/74/96196/96/:70<71>:1A:0B<0C;0E;/I=1J>0L@2L@2N@3N@3N@5N@7M?6J=4I<3H;2E;2E;2C:1B90@91@91@91@91A:4B92D93I81L/+V.,j76u99{;;ECD?H@IAG>IBNHPLOGD7B4B6C8>37-7-=0C5?0@0E3G6F6H:NELMHL@D9;98>:@8x>3o>0zI;LA?8,+).9DLWKNMM>=@?`\YQ@5TDyaIe[@^]?ihIslOvgJ~dKcNdX_[UZAN,E%D&H'I.N3N<RIZP^Q]S]Xbbifljnmqqrutxwyw||yzvxqtkrfnak_k`nS_KUGQDKEIm69HT1-M0*H1+J6/K81K:2O>6UE8[O5cZ9gaAifEnrOz]zbt^r_p_p`q`udwdwdwfsixrzxyx~}zzromhhd`y[TmMNaERSAVPBUOC8938938939:4;<6<=7?>9@?:@?:@?:C@;C@;C@;C@;D?;D?;FA;FA;FA;E@:E@:E@:G@8F?7JA:I@9H?8G>5F=6E<3F<3E;1D:1D:1D:1D:1D;4D;4D;4C<4?80?80<71;60:5/:5/94.94.96/96/:5/;7.>7/@9/B90C;0E;1F<0I=1K?1M?2M@0NA1M@0P?5M?4L>3K=2I<3H;2E;1D:0C:1C:1A:0A:0?;2@<3@<3D;4UD<R3.j23AGLWU`]f_bB>I?LANBRJUROSLK@4B0@0?1;.7+8+=/E6>+7$:'>-A/C2D:02:BDLLRMRKLA>71{8/v6,x2*1-37=GGWM[FI53:931NKc]J?[J}cLj_CgdEtoOpQhJhNhYbbQZDQ7I1J2N/M*H2O0K1J5L4M2K3L7P@XC[F]IaNcQeUhVkSjRiOiNiNlPoSsVuha|[tUlYldrR]r-2^&'Y0,W:4Q?5B:-:8)>B1LN9VO3aV6e_?heDquTe~iwdxiuerdrcveyhzizjv~zypmg~b^wYTmMPcGSXDXUDYVG7827828939:4;<6=>8@?:A@;BA<BA<DA<DA<DA<DA<E@<E@<GB<GB<GB<FA;FA;FB9HA9HA9LC<KB9JA8I@7H>5G=3F<2E;1D:0D:0E;1E;2D;2E<3E<5E<5@91?80=82<71;60:5/:5/:5/96/96-;7.;7,?8.@:.C;0D</F<0F=.J>0K?/M@0M@0M@/M@0O?2O>4L>3K=2J<3G:1E;1D:0D;2D;2B;1@<1@<3A=4B>5F<3S81[*&:?T`TeUfUcJO30:/>0A3F=IGBH>@B7F5B3@3?3>3B4D6G5B/<);(<(:(6&3(979=7>7<<BJLTSXS?74*,%61HKOWAQ3@:9.*8474E@]UWKWFwW@veI~pSpQfJdKo[uiSWDP;J9I=N@Q:L4H?S9M4K3K1J/I0N6S3T4V6W7W9Z=\>^@aCf@f?e?g?hCmErIsOuQuUvSqTnaxfvWb}15j0/X1*P8,G>/>A.;D/?G/PK._T8g`CokN||`rv}qzq|s|szozm}ouzsqh|c]tXSlNPdHRZCWYDYZH671671782893:;5<=7?>9@?:BA<BA<DA<DA<DA<EB=FA=FA=FC<FC<GB<HC=HD;HD;JC;JC9LC:KB9KA8J@6J=4I=1H<0G;/E;/E;/E;/E;1E;1E;1D;2D;2@9/@9/@91?80<71;60;60:5/;7.;7.;7.<8-?8.A;/C;0D</G=1G>/K?1M@0M@0NA0O?/O?0O?2N=3N=3J<1I;0G;/D:0D:0D<1D<1B;1@<1A=2A?3B?6K=4\5.w32LS]iM_@Q6E&+1)7(:&<)@3D=>?;;?5B4@2?2@5C9H;J<>/?/=+;)9):,;/<1FADA>?797<BELNROC>KCTLSMKJ?B5>274.7.1+:484@9[PUC{N9bIkP`F[FfTrdmhEK:D9C<DBHFKGLFMJSBM9I5H2G/F2L8R9V9X:X:Z;]=_@bAeCiDkDmBmCoCoBqBoGp@hGmMpIhOk[rcsYc?D`&$Q+"V@3VO=IL7@D-RJ3eYCujV{gyýþyvi{e\sYTmORfJQ[BUZCW\F560560671782893:;5=<7>=8@?:@?:C@;DA<EB=EB=GB>GB>GD=GD=HC=ID>IE<IE<KD:LE;LC:KC8LB8KA5L@4K?3J>2I=1G=1G=1F<0F<0E;1E;1D;2C:1A:0A:0@91@91=82<71;60;60;7.;7.;7,<8-?9-A;/D</E=0H?0J>0L?/M@0NA0NA0O?/O?/O?2N=3M<2L;1I;0G;/F90C9/C;0B<0B;1@<1@>2A?3B?6N;4m84FEY_WbCQ8F3;++1'8%:!9 ;&>.:2717,:-9-7,:1B8E;E:>2?0<,6'6)>0D;G=8-@6D?BB=A9>27.075GBSLNG=910/2671(</,"713,7/g\l\WCZCV?R=\LlagbTTEK=F;@=>A>GBOMWWNRDM:G5F2F.D1G7N8S8T8V9W;\>aAeCk;e<h>j?m>n>o=m:jHr;a?dKnKnNmUoZnrajILt:8\6-P9+PC2UM:^QAreU|nʿ~m~k`t[WnRVjNS`FV`EX`H560560560560671893:94;:5=<7>=8A>9C@;DA<FC>HC?HC?GD=HE>ID>ID>JF=JF=MF<MF<ME:LD9MC9MC7NB6MA3N@3MA3JA2JA2I@1H?0G=1F<0D<1D<1C:1C:1A:2@91?82?82<71<71<8/<8-<8-<8-@:.A;/D</E=0H?0K?1M@0NA0P@0P@0O@-O?/O=1O=1M=0L</I;0F:.E8/C9/B:/A;/A:0?;0?=1@>2@@4P91r1/JKSV>D0603//1)1!9#=!;< =#;%6%6)8-6,4,81@:C<@6B7A4</8+:0C8D=@7>->-5+*&"%%+*1.4)*.+3,4,3,2,0-2+2%6&2&7,6.>7`UqeSVBM:WIf[d_RTCIFM@D??@<@8@7FAMLJN@K9H7H5H3E6G;M8P7R6R6U6X9];a<g>k?m@qBtBuBuBtBpFmAaEeKjKkVt_z]tj~p~ow^aCAg6/hB7sUJye\}vŽ˺tqexb\sW[oS[jM\iK]gL561561561560561671872983<;6=<7@=8B?:DA<FC<GD=HE>HE>HE>HE<JF=JF;KG;KG;NH:MG;MG;ME:MD;MD;MD=NC?NC=MC7MD5KB3JA2H>2G=1E=2D;2C:1C:3A:2A:4@93?74<73<71>7/>7/<8/=90>:1A:2C<2D=3H@5I?3L@2MA1NA0P@0O@-O@-L?/L>1M=0L;1J91I81E80C90@9/>:/;;/<<0=>0>?1A?0S8-<7\[ZY86.*1+.%2#9&B*F,D'A&A&<#9#9*;0:07.<4C<E;@5=0</;.<0E9LAE<8,6$:(;.3,+*(+&+%'**.+2,4,3*3)2(3%:*2?06)8-?5A6l`gYRBOAcZhbRRAFBJ>D;=<<@9>48,6.94HH@E;D:H:I8G;I?NAU?V<T9T8U9Z:^;c>i>l>o>p>q@r@tAqCjMmSsJh@`Tsge]w_xh{p}qxgg^X{ZQ~wļ«zxl{hbu_`rXbpVboScmT21/320431651875984984984;:5<;6==5??7AA9CC9EE;EE;HH@HH>HH<JH;KJ8LK7ML8NK8MJ9JF:GD;JFCNIMNIPGDOD?ENE>LC4J@4KA5MC9LB8F=4B90E<5C:5@93?74@85?75<74<42C:5B94A96>95?:7>:7?;8@<9B?:D@7G@6J@4L@0O@-O@+L?,G@.F?/I;0K81M53K65J88F;9B?:6904</9D4:A/69$?=(bC1j^JA7,5)7+5'7&=+8$<&@*@)=)9&6%6%6'7)8*<.@2B4B2A1>,=,<,=/C4F8>12&9+8*8+8-7-5.3/1-.,.-0,1,5*7):):(9&33 8'7'6(B5SINCSK\W]ZPR>C9??GAFCDAA?9<3;/</<0L@KCGC>?<A?G?I;GDQCQDRDU@V<U<ZBdFkAj;g:g<mCsIyKzMyMtPsOpMiMjYxg_GlWw_y^n{a^xpĻʻyxr}op{k}sxlv}k0./1/0320542653762873872:94;:5==5??7AA7CC9DD8EE;HH>HH>HH<JH9KJ6LK6MM5NM8KJ8KI=KJEPPRWU`YXjVTjRO`OIKMD?H?:F=8G>9H?:F=8B;5D:8A96?74?74@85@85=85;62=4/=4/=52<74=96>:9=<:>=9B?:D?9G@6J@4M@0O@-P?+L@*B?,B?.F<0H:1J65I56F35@65@<9:=6;>5@@4E<-J9)^B4L>QB;-2#6&:'7$9%>*;%<(?+@-=,9*6(7)9):*9);+>.A1B/@.?,:(<+E6H9?18+6)7+7,9.;-</:.8/4-1-.+.+0+4)7(:':$<'6#8%=*;*5&:/F<F?IDOMPQGI;@:ACHBEDCBA>8;1:-<-=.E5L?NEGC?>?B?F@JCJCLDPFTBS>S>XBaFhCi?i@jBpFvJzK{JzHtKpQs\z_{XwNqEkDlEiKg_pnukLI~t̲ų~/.,0/-10.21/43/540762761:94::2<<4>>6@@6BB8CC9DD:IF=IG;JH;LI8MJ7NL7NL7OL9KI:NKBTRS_^fihxmmlkkh`YiYQ\OGRH@KH>GG=EE<A@:<C:;?:7<74<73=82>93>:1=9083-94.;60<92=:3>;4?<5@<3E>4G?4I?3L@0O?0P?/P?-L?,<;&:=(?<+A;-B71A62>42;30=84B;5H94N2.Y,)l/.;=FE;02$1 9'<)7$8"<&;&=)A-A/>.<-:-</<.<.9+9+<+>->-<,?-8(>.L=G:6*2&9.6,6+8,:.:/8.6/3,0-.+.+1)2'6&8"7!8$5#9'>/=.6)9,A7<5>8EAKIJJCC?ACCCAD?B==4:.8*:*;+8)D8NEIE@@>ABIHPAG@ICOGTEU@U?XA_DfCiCkFpIwK{L|JzFxHwKtNtZ|aUvCdIkTv?\I`{||aC;|nճξ/.,/.,0/-10,21-32.54/650880991;;3==5??5AA7BB8CC9HE<JF;KH9MJ9PK8OM8QL8OL;LJ>QPL^]bmlzzz{urke_{YSmTLdMEZG@PB<HD?F@;?<87;63;60<8/=9.;8/:70991;;3>;2?=1@<1?;/A;-F?/H?.K?/M@/O?0O?/P>0L?/@=*?>,@=.?;/?;2>93=:5:94<94D95M51V-+j)-288C>C7.7(:(?-?,9&8#;&:&<)>,@/>/=0=1>2?3=29.8*9+:,:,9*;,;-B4E9>31'2(9/5+4*6-7-7.6,3,1*0,.+/)0(2&4$6 5204$<.=/9.=2D:5-60;5D@MIKIC?=8@9A8>4</:+8*9+;-4&?3H@HCB@@DFLNU?E?EBMHUHWBW@XA^AcCfFmIrMyO|L{IyDvN~R}KrMoVuUuMjFcKf>Vdtӏd92lJ>ynХ10,10,0/+0/+10,21,43.54/77/880991;;3==3??5AA7DA8IE:LF:NH:PJ:RK9RM:SL:QK=OJDVTUfdqwxÏƎ{wpmid_[~UPnNJaKGXEBM?=B;7895296/85,85,671783891;;1></?<+B=*C<)G?,J?+K@,LA/M@0M?2L@4K>5L?6K>5F<3B92=82:946;47<59<5>:1H4-Y2-w78?D>E9<;0<+@.A/@-<);'>*8$:'<+=.<-;.<0=3?6>3:/7,7,8+8+8+7+A5C88.1&3)7-5+4+3)4-6,5,5+1*/*/,/*/)0'2#4!541/2"6)9-:0?6E=F>@7<5@9KDNGE>;1=1<0</;,9*:+<-?09-<2@:C?CBDHJOOV?E>CBLIUJYFXCYC]@_BdElJsNzO|LyIvJwTT}JqImStVtNiD^F]XkHFk.)kc͖ɿȾȿ65143.32.10+10+21,32-43.66.77/880::2<<2>>4@@6B@4JD8ME8OH8RK;TK:TM;SL<RKAQLIZW^li|~ؚ̙ޙڔԌɆ~xvnkfe]ZwVTiMKYDAJ><?;:8;74762555457664872<:.?<+C>*F@*G?*H@+IA,IB0IA4HB6HA9G@:K=<I;;C9:=77875384/83/917<574+C1']80~C=GC>?51;/<+?-?->,>*?+?-8%9(:+9-9,:.:0<4>5;4918.8.9/8.6,7-C9@70&,#7/<42*3,2(2+3*3+2+/*-*/*.)0)1(4$5"6 57#3#3$3&5)8,<1?6YQRJHAC;E<I?E;>1:*;(:*:):(:+>0A3A6<3<6A=EEGHIMLPBF@CCIKTNYJZF\F_A_BaEiJpNwOzNxLvQ{RyOvOtVy]{SoD^TlQddt`dMMjgΏX<94;8185052+41*41*52+63,74-85.96/;81=:1?<3A>5C?4JB7MC7PG8SJ;WK;UL=UK?SJCSJK]WcnlŚڟꢩ뙛啘ݔʉzyrqfc~XVkPN\IGRFCLCBJ??K==G;:@;9:<94?;/C=-E@,F@*FA+EB/EC4CC7BC;AC>@ACB<FD>LCANEEOCHNAIL>HI>GDCHAA=2L:.gF7OAI<?28)>/>,>*?+@,@-?-<*8'8)9*9,8-8.91;5:4:3818192:2706/<5>5912(4*;2<33*1*1'1*2)1)/)-(,(-)/)1)3(5'6%7!7 9%8%6%4%4(7+8.7/NGXPZSQIG>D9@7>/<*<&<(:'9(;*>0A4D;@7@:FCIHHGGJIKFHBDDILSQZO]L]K`D^DaFfIlNuOxOxPwVxUvTvYx]{ZwQkI`WkUgM^^mKZTaTaXaefȃ~嫧@=6=:3:7074-52+52+52+63,74-74-96/;81=:1?<3@=4B>3JB7MC7RF8VJ:WK;XL<WK?TICSJM^Xfpm˜㣭ꝡᙛ֕̒ĉyyji`]|XUpRPhOMeNJcKG^FBS@=H?:>?:6@<1A>/C@/CB0BC3BD7?D=>D@<ED;BJ>CVCIaLRhU\o\br`dobbjd`afXWaJDlG>SEXFJ7@+>+A.@/A-@-A.A/=+7&7(8+8+8-6-7/81;4727272829494836/A:8/3*8/=5=5915,2)0'0(0)/)-),(,(-)/)2)4)5'7&7$8#7"8%7$6&7)9+7+4*4+NGd\`YOFA7;29->)>'<&;%9&9*</>2D9A9E?KHLIGDEEHGIICDEHMSSZR\O^OaH^G`GdIiNrQxRyTzUuZw^}^|UpMgOiYn[mctM^TeO`UgL_R_^_vqלB>5A=4@<3>:1<8/:6-84+73*62)62)73*84+;60>93A<6E>6I@7MC7RF8UI9WJ:XK;ZLA[NHTIMXR`gd|~ʗ㞪쩫蟡ڙҍtrhe]ZXR~XQzYQvVOnMH_C?M?:@?;:B?8>>4@B5BE:?D=<B>:CB>FH?LUDVnQfaristvxo^l[cWYWUVMM?@.9$:$<(=*?,@.@-?-=,;,6'6(6*7-7-8/91838495:693616183:3C<=670@7[Rlc]T?63)2)2*/)*&(%(&+(-+0,2+1'0#1"4$:(;&<(<)<*:,9+8,7-@881GAc^XQB<@;4*:&<$<&<&:(:+<0>2>4C;PJXROJ?:?:HDHGGEJKPTRWNVKXL\RfOfKeJfMlQsRvRvWvXuXu[w\xZsWnVkbuVg\m[lFXDXQeVefgieʏ網C?6B>3A=4?;2=90;7.:6-95,73*73*73*84+:5/=82@;5D=5H?6LB6QE7TH8VI8WJ9YK>ZMEUJNWQ_eby{ɔ⛦뢣㘘،ɀuqiec^`W`V]TVPtMIbFCTBAIAAC<<:AB=FEACD?A?@DBEOMRWVdchqu}}}{p`uYiVaQUHF@4;)<&='8$7%8&9(8'9(7(6(3%4(7-:2<3=5<5<5>9<7<7>9B=C=B<A;@:B9@78/1(6+I>[O@66,+#)#-)/-,+((0.4/616.3)2&2%6&:';'<(:(9*7)5)4(9/5-=6PJTQLHB?1(;(=&<';'9(8(:,:/>4B8OFWPRID=C;HCLHJFMLSRTWPVNVOZVfUhSiRkRmSqStRuMmUt\z_{\vUoRiReUfRbZhZhN^ScYiS^`_^W}٩EA6EA5C?4A=2?;0=9.<8-;7,84+84+73*84+:5/=82?:4C<4G>5JB7ND8RF6TG6WG7YI<YJCWKKXP]b^ysuܘ뙗Ӄxusmk`i]cZ]WVRwNKhEDV@@L85<A<@KABL@BQ>BZEJpW]csrz{vpcTnG\K\HP<<5.9*<'<%;';):);*<,<-<-<.6*8.<1?5A8>7<3:4714.3-93A;E?B<=5<44,4+7-2', 6*G:K>@64--),*,,,,*,*)/+2.5.4+1(1'3'7(:):(:);*:*8+8,4+<4:5<7ONYWEE3/;,<(;*:)9)8(8*8,=3A6JAUKRGG>D:G>KDICLISPSTPSMSNWXdZh[pZrVnRlQlQpGmPvZ}[{VrTkWk\mYhZham`k]gfnfm\_]W{OFmfݺIE9HD8FB6D@4B>3@<1?;0>:/:6-95,95,95,:5/<71>93@;5E>6I@7LD7OF5RE4UE5WG8WI>XMKXNW^Zqppԕ革ꗖ⌋ׂ}yumpgf`_ZYXQQuGGcA>Q=5DH8BT=C`@EnCJOU]dfxknoi`WxIg;U2HAPEM;<71?0@,:$6"5$5$5&7(8+;-</@6@7@6?6=5936.4,.(-'.(3-:4<4815-5-,")7,B6?04%.F7I<H?<7-*#%')/2-./.2.3,1*0*/)0'7*9+:+<->/?0@3@36*LBJE50GFZ\IKA?</;+:*:*:*:*9+9*<0>2F9OBPDH<C7C7H?F?JEPKROMLKMKPX`[gaqauXmOgMgNkOuRyUwTqTm[pcujxguboamdlflhjghfa^TeG<^UͫNH:MG9LF8JD6HB6F@4D=3C<2?80>7/=6.=6.=60>71@93?:4C>8EA8KC8NE6QD3RE2VF6VH;ZMGVMR[Whlk~Β㚦铕⊌نу{umkde_aY[RQsNHbWFY_CQmBLEMMTU][bZhRpRuTuPlJbBW8J.?8ECKGK>>>6F:H6?+>-=-<->/?0B4D7E:E9B7>5;26-5,3+3*1*4-7.90807/6.5,/&5+7+2#1"9)>-;)<-D7JAD?64*-*-/26755301,0*/,0-0+8191:1;2<0=0?0>17+WLaZ;6;:PQFHPQ<4:/8,9,:-<.;-;,:-<.A3H9I;D6@2>0F<E<IBPIRMNKKKLOZ`^hfrhx]qPeMeNkVzTxRrTm]qhxjweret_m`kkrrujfd\la}fVXH9kXJ|rQK=PJ<OI;MG9KE9IC7G@6G@6B;3A:2@91?80?82?82A:4@;5B?8EB9KE9MF6PE3RE2UF3UH7YLCUKLZScii|ȓޚ리횞蕙㒔ޒډ|sxoumpigj_}y_xWjP_O\S\T]PWHR@Q?RCRDPCK@D9<46JLIJAA7495A8D8>1E6E6F7E8F8G:G<G=>3;18/4,3*4+4,6-81<4=4<3905-5,7-.$;0=.1"-7&=):&9'8):/=9@@<>37,/,.+**)+(/,448899757473717-6*5(5&5(PEmcHA42CC>BVVA<>48.6+:-</>/=.9+<-?0A2A2@.=.<-C6D9H?PGRLOINLON^cagitnzduVjQiUoWvVtXp^pnywksXa`m`mbos}숊́|thyjskXON:_VGqgSM=RL<QK=OI;MG9KE7JD8IC7E>4D=3B;3A:2@93A:4A96@;7A@;CC;IE9MG7OG2RF0UF1UH5WK?RHFXR^jg}Ēژ礧흤蛢晞⒚ۋ҆ʃymczXiQ_MYIRAI=A=;>8C9H:I8F3C0@1TIG?;76488:;9874:/<.;.:.8+7*4'2&4*3*3(3)3*5,6.8/=3=2;18/7-6,4*3)3&3%4%6&=)>*9$2:&4%1'51<<=@7=37-1-.--/.439:;=9=2603011/1*2(1%3$1$=1j_TL95@?:=RSJHC=:36.8.;0<0=/;*?-@.?-;*;(;+<,>0>2D8LBPHNFLINLaeafhro{hxZkUjZrYs]tarjt}wy_dgtm|eulw좟Ĕ|hjUHQ<WUFth\ۿVO?TN>SK>PJ<OG:LF8LD7JD8H@5F@4E<3B;1B92A:2C:3A<6C@9DD:JF:MG7OG2QF0TH2UH5UI=QGEWQ]jh~œؙ矠뤩蔡唟ߔו͚e]pQcIWBN>F<A<<?8A4E4I4I3F.B,?-SED<97>>DF@D8=65B;D8C8A5>29,6)2'2(3(4*5,5.4.4.4,B7=17,6,9-9-5)1%8(2 1!9(8'4"7%C07&8*6,5.3/53:9?>LKHFBB>=<=7:26,1+1)/,./.1+4*5)7(0!.dY]S@:DC;;MMRQHE;66/8.9/;-:+<,@-A.<)8%9&<)?.7)7+>1G:K@IAIBJEa_^`djnwku]iXe]m^sbtdolr~qsryyaqXfЮ]jPDR9QT?jbUXO@WP@WN?UN>TK<RK;RI:PH;MC7KC6KA5H@3H>2G?2H>2F@4GC:GE9JG8NI6RJ5UJ4UJ4VK9XNDULMZTbkh{~Ñט磤쥨ﭩ▟֦ζgzL]ER>M;G<D=B@@@@>?<=EB:4D9F:1)JEJICE>B;?<?=><=<;B;?7D;MAK>=06)9,7+6,5-2*/*/+2/5.A59+1$3&9+;-8&2245!4"4"4%5'5)0&2)5)6*4(3&3'4)2)3.5233/2-2-4.5-3+/+,/-5.9,7(4%-3"XHYN;3NI41HHOPJJC@;6808,9+<+<*;(9&;(<)=)=+<,8,;0=1?3?3@4@5A7japic_mjqqadgmpylzhxdobidjlnqoqoy{}Zlcwbp}u]rQJY:LR8snZ˷YPAXO@XO@VM>UL=TK<SJ;RI:NE6MD5LC4KB3JA2JA2JA2IA4GC8HD9LF8OH6RJ5SK4VK7TK:XNEULMYUckh{}Ӗ쟝ퟧ袥襤ꩣᣜбqTbCO<F8A7?:=<?@AAC<C9?AD;;B?@=31OPCF?D;B8?8;89:8;7E?=5<4G>LAC5:,9+7*7+6-4-2.3/5384>2;-6)5&5'5'5"49$9"9%:&<+<,8,4*3.5-7+7)6&4"4!4"2$2&0+.,,-,/-2.3+.,-0.2.4*5'8'9'?.*D5>1F>VPB?BAUVRRKHC>=59.9+8(;*;(:'<)>+?-@/>.:,;0=0>1?0?1B3C5i\mdb[kfolbakltxq~o|ir]fY`bfqpzxvwx~Rd[p]njkZtON_;SZ;us\ĸ\PB[OA[OAYM?XL>WK=VJ<VJ<SG9RF8QE7OC5OC5OC5OC5MC7JC9JF;MG9PI7SK6VK5VK7TK:WMCVMNZWbkiy{ˑ֘ޙ㘙隝蜤㜢㛙▛ߚڤбrYqBSAL>D=?==<?=?>A>C<C8=?AA@C?<896WWBC>B;?9<686696;6HA;15+A5K>H:=/8)6)7)7,6.507195=93*5*6*6*5*7):*>,4!44!6"8)8)3(-%@;>8=3<.9)7$7"7#7%3$/&.'.*.-//./,)0+5-5,3&4%9&>*A/1 SE;0A;C?JITUUTSQOMJCC;<28+6&7&7%7&:'<*>-=,=,:,;/<.=/=.?0C4E7\Qg]aYlgpma`fgjqR^^khqem`geiqqxwtunuJ]Rh[ma`UoHOd=W`Aww]\PB\PB[OAZN@YM?YM?XL>XL>UI;TH:SG9RF8RF8RF8RF8PF:LE;KG<OI;RK9TL7WL6WL8WK;VLBUMK\V`jh~yyΓҕ֕ۖ㘛蘞욢훣뜥蘢ߖڕՔՓ֑֒҅}sfVzGa<KAJBCCAB?AA?C>E=F?F:>?@EDA<61>:ZYAB@C=@:=8997<8A8E;:.2(</E7E6>/9(8)9)8.:/8091;7>81+2*3,5,5-7.9.=/7(:)<+<,;.;0<695C@@<@7=19*9%:&;%<(7'1%1%1(3,1,/*2*5,7+7)5'7%;(>*;(<,^PF<3/.,@@WXusrojg^YPGA75(. 8'8(8&;)<,=-=,<-;.<.</<-;->.B3F7MA`Wa[pltr`a]a]dHTYegrgoelkpsvvvpsenDXKbXk뒖_zYQlCSh?\gEy|_\PB\PB[OA[OAZN@YM?YM?YM?WK=VJ<UI;UI;TH:UI;UI;SI=OG<OI=QI<SL:UM8XM7YL9XL<UKAUKI\U]hexut|~ÏȐϐԒܓߕޕܒ֎ΉDžŁ}~}tpg\NvAc:U9KAGECGAGCEEAG<J=JBI>@@?IE>82,C<UPDCAC?@>??=@<D;F<=28*5)9*=-=-;+<):*;*;/;/8/8/83:59552202132402+0'1'7-:07.4-40:;?@8;76715,4&5"7#:%=)8&4&5'8,:09/8->1;-8'7%9'<)<):(>-:*>2C:/-::245653;6C>KCQISHTHUG?0?.<,=->-?.?/>0<.<.<.=,<,=.A3D6LAbXc]nlrr`c`e`gkvozkv`h_flqx{y|ms^jAWC]Uh懍g]YtI^uIhwPfǻ伺[OA[OA[OAZN@ZN@YM?YM?YM?XL>XL>WK=VJ<VJ<WK=WK=XL>QI>QI>SK>UL;XM9XM7YL9XM;WK?ULGYSWe^nnjut~}ȍώԏՏӐӋʃ|u|ovioljlcyYvPoBd7V4L8H@EFBJCJEGGCJ=N>LCICCA>ID;44,I@LFBA?=;;<;@=E?G<G:8*8(8*9(9'8&:(;(;)=,<.;.8.6.6/5032./,00247774521.*4/6232/1/46=:D06023/3,5)7'9(<(8$6$6(:,>2A5A5A6G8A1;(9&<)=*<*8&:+7)0'C<2/?A/2*,1/5.81908.5*2&1#E5A2=.:*9)9+:,:,;/=0>/<.<+<,>/A2SGg^c_jinochjqoxq{t~mubkdnrzx~quipWfAY@[Qf~ykm]oZy`r֭ӦЧӫԮֱں[N>[N>[N>[N>ZM=ZM=ZM=ZM=YL<YL<XK;XK;XK;YL<YL<YM?SI?TJ>UL=XL<YN:ZM:ZM:YN<YM?ULEXOR_Wbd_sjfsoyy|~~ƈˉ̉ʈȃ|}vwpqklfgl``qV^N^J^@X6K3F9C?BD@HBICFIBJ=N>NAEFDA=HB:/7,OFB<=8641051>8E;F9D59(:(:*:'8%9&:':&9&:):,9+7+5+3+3-*+*--3/4173738588;8<9>9A9D7F6H5E+5-2124/6-8*;+=,5&8*;/=2>4=4>5A6J<G7A1<,9)9'8*9)2'9/@8D>0/..46663-7.90:1;1;0:0;/L?F:@19*6)6(7*8*;-=/>0=/<+<+<.=0KAdZc^kiosinrzvfpoyryjslvwv}hocnRbB[<YKat{z}k{fhṷշˮȤÓș˝ˡΧҰٻǾ[N>ZM=ZM=ZM=ZM=ZM=YL<YL<ZM=YL<YL<XK;XK;YL<ZM=ZL?VJ>VJ>XL>YN<ZM<ZM:ZM:ZM<[OAWMDWML\RZ^Xfb]qjfspwvxx|{~ňȉǂ}yzuxqvotkpgzaQZHEEHHOBN:F6A9@==A=D?EBCHAK=M?M?BGDA<G?9.:/UK>583/,*&/*:3C9C6>/;*;)<):';(<);'8%5$7%8)7*5*3*3)2*33588<4:-2(-(-+1-3)0&1)6,?*A 9/"0(.,10/1,3+5)6*6+90=6>7:4715092H=K<E7=/6(3%6)8-4*6-C<8221 89631(4)4)5)6+6*5+7+YNRFH;@2;/;.<1<19-;/=0=.;,9*9,:-<2YQb]ppvymrq|r}zyhqepq|ukt^jOaA^8WG^ntn~ghqͭܽٻԴ̩~đřȡΪҵνȷZM=ZM=ZM=ZM=ZM=ZM=ZM=ZM=XK;XK;XK;YL<YL<ZM=ZM=ZM=ZL?ZL?ZM=[N=]M=^O<\O<\O>YM=WMCWLHXNOZPX]Ub`Yia\rjfokspvq{u~ɊLj~yrrtl\HLB9A:C@@?:;<>DE><=<>=@ABICMANAL>>@9?6>3</<0D8MD61;62.3.C;?36'>,7%:'<);(9%9&:':(:'9(6(2$."/%7.=582400-**&(%'%'%'&*!)".'7(>!;61'8#,#++---+(-)416264666512./,,/,92:191SK"+#F>.&.(<7E@:7/*.*51<7>4<.5)3&5*;.;08.bXZOC:6,:/8-3'6*0%2&2&4%6':*<.=1:0C;\Wppsvx|yq||wt}s{r~r}mxgs`nI\>\>[AVekzm}f~cjw|vzqyo|rvuwy§̹Կ̺ZM=ZM=ZM=ZM=ZM=ZM=ZM=ZM=XK;XK;XK;YL<YL<ZM=ZM=ZM=ZL?ZM=\L=]M=]N;^O<\O<\O>]P@[OC[NFYNJZPQ\SX_U^_Wfd\tibngqjxpyĊď~tnqujW{=A5+5+<3@8>8?:A==;;<;@>B@IAI@KAF<9=4<1;/:,:+A5JAG@A=6351@9C89+5#8';(=*=*;(;(:(9(9(6&2%2%5*8.80911&/%.%,&+'+),+-.*-%+$.'7$;7300.93<*1(,.002+.:>7=4:26/40325872-;582E?E?/+2."51?:E@=83-2,60:1:.9*5'5(9+<0<29/cYXN@84+91:06,9/5+4*4*5)6)5(6(6);0B9YTljqtx||v|yv~usp}kwdq_nI]>\>\CYehwozbu\x]ckppmp]l]h\g^k_qeyizktv|}ƷǿϼƷ\L<\L<\L<\L<\L<\L<\L<\L<ZJ:ZJ:ZJ:[K;[K;\L<\L<\L<\L=\L=]K=]M=]N;^O<^O<\O<_RA]QA\PD[NFZOK[PN]QS]RZ_SgcXvh]kbskv}}vpuviRt<D5-4+<0C7E9C8?9=<:>:A=E@GAH@E@B;6909+9*8(9*?3F<D>9674;7C=OEH<3#9(:';)=+=,<+:)9)7)2#/#4*=3?6914+4&5&2%/$,$+%+(+(+-(+&/(6%:733%70;5A8C;D<E5>,62</;.9-7.3.1/1420,=964;9mjCA/-/,:7@<A;<67.5-5+6*6'6%6'8);.<1<1;1`YTM<30(;3>6;3=6=8<7=6<2;19.6*6);/@6TMgeorz~||yxwsn}gv`p[mG^<Z>\FZ`a~evZiQhOmRtX{]}^x\qX`zM_PaUeYn`ug}j~mrtxyyz~ǹ˸ȶ[K;[K;[K;[K;[K;[K;[K;[K;ZJ:ZJ:ZJ:[K;[K;\L<\L<\L<]K=]K=]L<^M=^M;^O<^O<^O<^Q@^Q@]OB[OC\NE[NF\OI]OO^P_bTmdY{i^pg|t{{zxucMlFRA@A=E;H;G;E9A:@A<A=D?GAHAF@A?<?6<19+:*9)8*>0D:<731;9A?D?SLUJ:+9)7$7%;)=,=,9*8)4&2&2)9/>7>65./&6)6)4*1'.)-)*(**),','1)9&<!;=%A6H(6.<P\`lP\<I9G)8*8-90:2701+*(%0-722/C@spVS>;GD=:<9:5807-6*4&3#5#6$8&;,</9-:/<2XQMG700)<7A:;5<5>9=9?9@8?5<2:.9-9,=1NHc_no|~yyyxtn}et^nVhE\8V<ZH\YZlRcrG\tB\yCdzIl}PtVvXrXoWmZl\obuh{loqpqtuvvvwz|{|ȷǸ[K;[K;[K;[K;[K;[K;[K;[K;ZJ:ZJ:ZJ:[K;[K;\L<\L<\L<]L<^K<^K<^M=^M;_N<^O<^O<^O<^N>^N>\O?^NA]OB^PE^OJbNYbQdcTqdZ}lexrwv}wlXwD_BTDPJPIHE>E<F<D>BB@C@GBHDGCDA=?7@7=/:+:*9)8*;.?6FA=;BBAA;6JBXLK>@28(3#8(<-:*7)8+0%3)8/;4:5600+,'0,1-10312537486;-5,6.=0C-F)G+N3R9L3?@M_llzWfCS>P3D3A3>6<99834*/$2*.(72YT\ZXVA?HFB@<7706-8-9+7'5#8#9$:(=-;,6)7.=5NGEA501->9@:815120215283:2:/9.:.6*8+IB_Ynl}v}w~yxsk}dv^pSeF]8V=ZL]TRz_BWh<Yq?[vCfyKn~QtVxZy_wayexhzm|qrrporttttrtw{xxZJ:ZJ:ZJ:ZJ:ZJ:ZJ:ZJ:ZJ:ZJ:ZJ:ZJ:[K;[K;\L<\L<]L<^K<^K<^K<_L=^M;_N<^O<^O<]N;]N;^O<_O?_O?`P@aQAbPFbNPcN]_Pe`Usgato{t}qv̋ۂrduPd;R3L<QERDK?@@>C?EBEFBDAECFDEEAB:?4?3;-8(9(9)8*:-;3IE??=>782/A:ZPh[PCA35%6'9+9+7+8,0&6-;4;440/,-+--493;3=3=1>0=1=1>0A1B4K5N0N-O1X>_3HO\an_nWfP`DX8JAQ:G2:/22-8-;+:*:/2(JBkcLGPK;9;9LJ@<707-</<+:);(;&:%<)>-9)3':/D;GAC=722.;7:62.2-,-,,./3171:1<1>26)4)B:XRjh|}v}xzxqi{bt]oQcI`:X?[O_QNqX:Sf8]uEa|InSvY{]~`gll}m|o}ponllqqrroprtvtwï̫̾ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8[L9[L9\M:\M:]L:^K<`J<^K<_L=^M;_N<^O<^O<^O:_P;`O;aP>aP>aP>aP<bOAeMMdMW`O_aUmgbuq|vsu͆~qyclP[;M*F2Q<S<M<E@ECDBCCEBCADBDDBC>@8>3>19+7':)<*<,=1?7=:9903/24294MElah[QC</:-:.7*6+8/4,7/93621//,1/152C0E-F*B%@#= 9 8'A+E.M/P+P)T2`AhCX`mhuVeKZL\BU2C@R7C-1((.$8&?&@'?.:,YM]QG>D>63;7UQF@918-:,9(9(=)?'<&;&=*7(3(=4LFGAE@963073510+1-,/+-./1/4/81;1>29.3(;2NHa^yzz|{xn~ew^pZlL`Ia9W=YM]JGhQ1Qd6\tDf~Nu[chjnsttr}pnmllnnoolknrttwƯν̻ʤ[J8ZK8[J8ZK8[J8ZK8[J8ZK8[J8ZK8[J8[L9\K9\M:]L:]L:^K<^K<^K<^M=^M=^O<^O<\O<`Q>aR=aR?bQ?bQ?aP>aO;bL>hOKgNRbP\cWkjfuv}|xzƄ}uzlmY[DL/I5R<U<N?LCKBH=@AC@A@AA?C?A9>4=0?1;+8(<,?.@1A7C=7485..30:60'5)UGwj[PC7<0;07*6+:0708263320112364<%6#9"9"9!865629%B(G&J'M3\Ehbu`lWcQ]P]MZ@M2==F7;/./(5';(?&>%9'8+VJ;2?8412/C@WSHA916*6(5%5$:(<(:&7%9*4&1%?5RJIAHB;62.411/-+22,/+.+-++-*1*4,8,=12(7.IB\Xww}vj|_sXlTiD\D^6U:VLZHC^K-Mc5Uo?b}Jt\glnrvzwr~m|i}ggikmmlh~ijosrxũʵ¶Ş]K7\K7]K7\K7]K7\K7]K7\K7^L8]L8^L8]L8^L8]L8^L8]L:]J<]K=^L>\L<\L<[N=]P?^SA`SB_R?`P@bQAcRBdQBdNAdLBjMIhKMdPYf[lnkw{Ђy~sqjba^JW>Q:L?NCQ@K<G>F<B<?<=<:>9=4;0:,6&A0<,6(A5F==57285715.6-8*<*:'6%;0SLZOE98*>.B3:-3+GB//5:6=,7BM'3&2)2(2'"*'/'/&)+7 .&7-A#;Xr-D]l_iZcU\PWHM?@84>7A7?17&2!6#;'<)8-7/E?;7316454DCLHKED;:04)5(4)5*</9,/#(-$9/C;H?PFE=700*0,211314/101010.0.2-5-9/=02%>1=3_Ysqxh}_w[uUoLfEc:Y;[?Y]i@;VF-L^6YuBgMw]}cgjnonm~l}i|h}feflmlk~gfgimrv|z]K7]K7]K7]K7]K7]K7]K7]K7^L8^L8^L8^L8^L8^L8^L8^K:\K;^L>_M?^N>[N=[N=\Q?^RB_SC]QA]OB_OB`NDbPFcOHeNHiMJgNQeS_g_tnny~ʣxy|{vji`]aOZFRHSIVEP?J;E9?:<::=8?7>4</<,<+?-8(:,A6<461<7505-5*4(8&:&;%9'6.A;MDI<>/8(8);.;4JF016;6A.<@N'4$,%(),+,*+((((+,$'%(%,;D'4CAR&6jubjZaW]OSBC<8>68,D5H6>,/)((-%:6TPHG5445==WUGBG?A99/3)6,7/70=3915.2-4.83?9E=J@A86-0*0,210303021201/00.1-4-9-=13$</=2^Wvstf|\vXtQoIh@a:Z?_I`S\{?7RF.M_9ZvCeKsYx_wb{f}i}j|i|i|h{e{d{d}c~e|j}l}l}i|e}ccchkps|xdppR^^]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8^K:_N>aP@`P@]P?\O>[O?[RC[QE[QG\OG\OI_PMcQOfTTgUUgUUgV\h]nlisv|ˊԘנʪ}π䄆vsjegS\GQFOHREQAK=E7=7:99<7@7A4?0>->-<+:,B6H?;20):26/6.7,8,7(8&9&:*4-4.A9OCH:5%2#@2>5HD135;7@4@ES2?)0#&$'13-/''&%12)*8:+1)13=R^=K[g^fV\OTMREI:;74?96,?2B5=17-3),#' %/*EC::,,35AB^]?:C;A9=39/=4@8@;@<=;>;A?>>::?=IDB9<45,2+1-311202020201/00.1-4-9->24%8+;0[Tzw~rdy[tTqNmFg=_=\EbTgAHp;3SH2Qa<]xEfNrZu^t_xc{g{gyfyfycxbybya|bzczf{h{h{e{a{`}``jnstwuynolSeYAPM2A>^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^L8`N:aP<`Q>]P?ZN>YOCXPEXOH[QO_UTbXYeX_iYcl\fk^glaildqokrty~ʅڌᎇןӭijy{ށzwsrcgU\MTGPCM>G<B6;8897<7@6A4A1?.:*>-=0F:RGH?5.1)9181;0=1;-6'6&8+5-2+=4NBK=:,8*B67.>:/0164<8BNZLU>E38$&/1,,22**/.::37,29@EMXcMW=CADBF>A9=8988978391:2A:NHVSNNC@7295KIMLQRYZRQYV51>6B9@7?5B9C<@;?@8=9=?C:?58>=MJ93603+3,4.30210102/201/0/.0-4-8-?36'5(9.VO|yzocwXqOlFh@c9\?^KdZh35g;0WO8WgCa{KjPsYt\u^wbyezfwdvawav`x`x`{azczfzgzfzbz`z]|]~_gntsuqtiidQcUDSL8G@^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M9]K5_M5`P9_P;\O>ZN@XOFXQKYPQ`W\g`hnfsshysg{sg}qh}ol}pqrwv}z҄响㝌ڠulnqvlvismllgi^`RWFM<B7=5;7898=7A7B5B0@/7)@3:0;1RH\QMC;0907-9/>3=16*4'6*3,70=5E9F9B3A2>20&720/.1.47?PX]dZ_OS.103,-EE66,,-.>@2537bh=B*2-4&*;=@E6:379=7;/043;;GFRS`cilek^a@>E@^[hgopjjKK=;40>7D<C;>5<4:1415;-7,6.8,4,39<JK3/3.3+3,5.404/2102/2/1.0/.0-3-7-?38*2%8-NG|ywl|atTnHg>b:_6\AaNeWap/+_?0[W>^lIe}MkSt\u_v_xcycxbu`u`u_v_w_x`{azbzd{e|d|`y^yZ{\}^agmpsr{nrjexe[k^RbU_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N:^L4_N4`N8^O:[N>YOEZSMZTT_Zahbprmzu{u{qzpvpqtrxt}wz~τڋޖܙ͛~yl[Q>MBQIWRWUSRKM>C4:9<9;;9=8@8B6A0?/9,A65+.$I?g\dZUI<26)3):0;06,3)6-1*71;29/>0F5B39+1(4-31-.*.17EJV[]b\a9<9<+,JK89//57()'+XZ>B9=6:#(+<>AE49,21705(.37KNaehncl`i`lbkLLNJ\ZVTMMHF423/A<KDOHJC@8:36..-2:-:*7'4)40:>CJJ1.3,3,5,4-4/4/3/02/2.1-0../-2-7-=1;-1$7,C=yv|qhx_rRlDc9^6]6\FcN`IMe5+VD0[Y@^lIe|NkRt[w_x`{dzcv`s]r\s\t]v^w_{azbybzb|b{_x[xYzY{Z~_ekmsus|rupnlfwe_P=_P=_P=_P=_P=_P=_P=_P=^O<^O<^O<^O<^O<^O<^O<_N:aP6aP6aO9^O<[OA[RK\VV_Zakgvso}z~|}w{uxvsys}x{~ĄɍΔ͚ǠɭŦmfJE2A4@4B9HDNNJK?C=?;=<;=:@8@5>1=0:0?64,1'I?cVh[eWOB>24)7,905,2+600,4/7/7.>1C4>04%4*0+3/..-.1478BEMRY^FKQW37FJ8<AE7:.005HK7;7:#%;=8;;><A6<-6)21;<DLS]eksjs`jZgXh[fddZVWT@=104433C@JERKSLJA?7938133.70>0=*7.:;ECHAB1/4-4-5,4-3,4/4002/2.1-0../-2-7-:/>01%7,;5sqvi}at[pPjCb7`7a;_LfO[~86]=0NF1VX@ZeEcxMjRr[v^ya{dxas]pYpWqXqXt\u]y_x`x_y^z^y\xYxWyV{X_dhloqmxjqij~cbv]_P=_P=_P=_P=_P=_P=_P=_P=^O<^O<^O<^O<^O<^O<^O<_N:cQ9cQ9aP<]P@ZPG\TR_Zaa_mtryx~~yyyuwww|x}ĂąȸоѻЬoT\GG5>0G?WQWVNO@C=?<==;=:=5:19080<5:3=5OEXM]OeXcUL>:-8.914-2,60402-5.<3C7C4:-3%5,.&0-/,3154-.24BFX]W\ouDJHM<C[`ou=B}mqQT>@02:=HK9>7?=F7B-8>J]gmwjrcn]g^kao]nYe\]PIJG74/0540.95D?JDIA@86/4/7166'/0<2=+60:>E?A443.5.6-4,3*3,4/4101/2.1-0../-2-7-9.?20%6,61popcx\pXnOiBb9a<dAbRgQWd/'WD3GG/RT<U^?btLiQq[v_zb|dx_rZnUnUnUoVrZt\w]w]w[x[y[wXvWvUwTyXzZ~_cd~f{fr]iX`vRZoPRgH\L<^N>`P@`P@_O?_O?_O?aQAbRB_O?]M=]M=aQAcSCbRB`Q>dS?aP>]P@^QI[QPZSZeapsqyxz|~}xzrslotwv{̀ʋƖäƳ̰ϬϧϣУ˜Ѩg^FzgueH?QNccKL?A89:::97561;6815.B;<3I?XKOAdVcTXIG9:/6-7/6/4/0-2,70=4<07)5(7,/$/&/)1-2040516479JNY]NS8=6<X`~~ougoipfl\aX[Z_UZDK8B7A2>+90>=HS_`igrepbmcn`o]gSSF@854111/.3194D=B:?7<4908193667<4;4;4<6;59331/3,5.7.5+3+2,2,201203/2.1//0.3.7.?58,6,/&;7XW{me|\rPhGeCe;d9`NlRd=?P, C;&CG.KM5Y_CZjEcxMqZxbx`t\rYqYlSmRnSoTrXtZu]u[tXtWvXwWvWvUuTtS{[{]z^u[mUb~MXrCSj>AW0?U/<R,[K;^N>`P@`P@`P@_O?`P@aQAbRB`P@_O?`P@bRBcSCbRB`P@fVG_QF\OG^TSaZad`omkvwwy{}}x|qukplonquv|~ՉӘΨǸźαתۥޥݢۤأѠǛӼ}dŋw}mVJa[rpZ[KL?@=>>@;;6664=883?86.>3K@H;]Mo``QH:5)0&6-5-0)5195=7<38.5)4*5*7.5+2+0+0,2,4.5287>@JLW[^b\d]eaiS[NVQY_gjqflZ`NT4:,5*6-9'5!-'67CPZZdbldmencm[hQZEE<7646355302/62>9>7;4:3818295:69;7:7:797965312,3,6-7,6,2+1,1,201203/2.1//0.3.7.<3=28.1*74Z[s}fz^vWoOiFf?b<c@cOhKVx;8L2#<:#<B(EG/OS8VdA`rJnXu_v]tXqVpTkOkPlQmRpVrXs[sYtXuWuWuWtTrQqRpQnPlNhLbFXu?Ni6F]/@W+@W-@W-AX.YL<[N>^QA^QA^QA^QA_RB`SCaTD`SC_RB`SCaTDaTD`SC^PCbUM\QM[QRcYbkdtqmvuy{y{y~x|nsei`gjnru}}ׇݗ۩ػؿۧϡÜkpo`RG]Umiuu__JL@DAD>@8:66=:;6A:707,>3=/F8j\i[[MB62(4+6-2,52A>GC=62)1'2'0%4*1).)/)2,7/=4B9-(43DCVX^bZaS[Q[FQHSOY\fmvntY_>D.5-42<2>+9'46EKWISPWW_^fck`iRYBI977175<8;;955160:3;290907183:6<8999997988874402+6-7-8,6,2)0)0,10121302/1//0.3.6.90D9804./._blwbxWsPmLlCf:];_IfSgDJl;4O>,=<':?(ED/FH0Q\<YkEg|Qr[tZqUmRkOiMiKiLkPmTnUpXqWuYuWtUrTpRmMkMjLeGaE[AUt;Li3E`-AX*>U'B\/E_2Ic6WJ:ZM=\O?^QA]P@^QA_RBaTD`SC`SC`SCaTDaTD`SC_RB\PDZOMZQVbXcjcsqmvuxzz|w|symrbi]daglrx{ʉߕ夡䶵۪ө¡vqrcbWi`rmut[]LNCG@D<?;<:8<8E?C;:0:/6)1#I;aRk\SE:,4'6+4-42MKZXKF803*4+2(.&,%,%-%1)6,;0?4/'4,:6CBFHEIGNMVQ]VbXb\egpmuYa;@17.4-6+4%2(4=IS_?IAIGLQVY`X]GM685373;8@>@?=;957282918080717396:7:7;9:7:8:6845.3+6,7-8,6,2)0)/+0/222312010/0.3.6.8/F<913.,,fjygtbyTqKkGj>c6Y=^QhXeBBgC7[N;GF1AC-JH3EE-LU6Sc>btLlUpXnRkPiKgIhJhKjMkPmToWpVtXsUqSoPjMgJeHdG`D]AWy=Rq8Mi6Lf6Ne7Of8Lf7Oi9Sm>UH8WJ:[N>\O?]P@]P@_RBaTD_RB`SCaTDaTD`SC_RB_RB^QIVMR_Xhnf{tpxtxwxzy{syjr`g[c_gjrv|ƀΓ䭮绽߹еƱy|qvksimeoi扄~sredWYMNDE@@:7;7B=E?<3=3B51#0"I;XKN@=/8*6*3*42UUkh]XD>;3;2804-2,1+0)0'/$/$0#9,4'3):5CAEGBG@HDOOZVaVa^igoYaBG:<5738283=9CHSV_6?4;6;ADJOIM;A135195<8<9;9:77370;2;1:09082736475:8;8:8:9;7956/3,7-8.9-7*3)1)0)1-323322011/0.3.6.7/C:701-13jpqzft]tPmCf=d9c8^EdZmV[wE>dJ=aYFTO;KI4PI6GE.GP3L\8ZlFf|NmSmRlMhJfHgHgIiLjOlSnVoUtVsUnRjLfKcHaF_FZBX|?St;Pn8Ok:Rl=Wn@ZqCUo?Vq>WqARE5UH8XK;ZM=[N>\O?^QA`SC`SCaTDaTDaTD`SC`SCbUEaVP^Vcje|yu}yzyxyvyswjrcj[c]ehpv~ǁшәݣ௳㻿þŹx{tyvquleleoga[`[smyu{|yrpccSTHGC?>:<6A;:1C:TJ>26)9,=.?/B1C5@17-2/LM_]WSD?:48170939292:19/9,8+8)(3"@2I>D@;:7;:@7AHRV_Yb^g`iU[AE@>?;ACGJLTQYT]V^4:/5/37:=A;?4812429586422020404.<4=4<3;2837343438898889997755/3,7-8,:+7*2(0(0(1,424332111/1.3.6.91<3710-@CnukubqRiHf;a4^6b>dNi\iGFjF:]L<]VCXQ>RJ7OG4ID.DJ.GU2Sc>^sHgMjOjKgGgFfGfHgJiNkRmUmUqUoQjNgKcH`E_F^G\E[~DWxAVr?Uo@YpB]rG^uG[sCYtAXs@NB2QE5UI9WK;XL<ZN>\P@^RBaUEbVFbVFaUE_SCaUEfZJh]Yngwup|x{ywxvwpujoah^f_gempx}͉؏ؙ֪֡۴ߺɼĻqqqtpopfewhenj_Yd_ZTf`snzv{wwshfZWRNHB=6D=;4G=\R;0<07+6(>.D3B3A1A386>>CCB@=7817/7/:393:3;3>5A5E8G6-;%J8L==50+009>AJKTU`Ze]eYaLR>@4/7/;9@@CHDJBI?F5;26368<7914/2142095740.,*0,3.3,=5=4=4<3:59565655757576866542.1+7.9-:+7*4&1&1(1,425342211/1.3.6.;34+:520UXpxcnZiI`Ef8b/]5bBhLePYj5/^G7XK:UN;[P>VI8M@0JC0@F,AO.K[6Xj@bxGfJhIfFeDcBcEeHgLhOiRkSnRlPhNdJaH_F_H_H_H_H]~G]yF]wH`wKcxOczN]uC[vAZu@JC3MF6QH9TK<WK=YM?\O?^QAdWFeXGdXHbVF_UIaWMg^UlcfwryuxvtsrrtulpbgZa_eflmsv|ȁӏݗޛՠөڮݱݲ۴ڶ۵ֳѮɫĪ¤~|xdbgiefcYZj[X{c_yVPc]NFUM`Xkcwrzzwnja\TOGBOIB=G@WO,"1'4'>.E6>-2"7'E7E?973.50;5=5<4=4;4925.4+5)8+<,?-S>G2<):-=2;57443KNMRPUTYY]VXMOD@5+7+7/52242618.64>3;5?9B4>+5(3/9-35759./*+0.515/<4=4=4=4;6:676664635253455411-0(8,:+:+8(4&3$3&4*5052423/2/2,4,6.=4/&>935bgoy[iNcC]Eh:e0]6aGhJ]CFR,#VI8SL:OH6[O?UI9F?-HF1>B'@J(IU1Sd:_rEe}IgJeHcCaBbCcEeHfMhPiQlPkMfJcIaG`F`H`I^G^F_}G`|Ia{Kd{Mf|Nf~N]xC]z@^{CDB6FD8JF;PG>RH>WI>]M>_O?`Q>aR?`SB_VGbYRgb_ojnso~wqzt|yywppgg`a\_`bfhopyz̄֍ߖ眙栞ݡף٤ڦإץԤӥѣ͢ɢȟÙ|rn}igld^`fZZkYUrWP}WNWORIZPXPZSkdyr|uqus_]PLEAZT712*6*7(7'7&9(;+<.?18.<2?4;05(3':/@590907.7+7):*?,A/=.@4E:G<C;<42,+&<7EBOLVSYVXROIC:;*:(8,5../*2(3'6->+?*?)?(?&?$<$<$8'9+<,9+5.545;984:3;4;5:595735435465454535/5,5)8,9*9(9&8&7%6%4&5-4/504.5,5+5*7,907/:6?BmwbsSjIcKj6[6_<g>cNjIV^$"D, ?:'HE4PM<PI9EB1>C/?G/BH&EK%KS.S]8[kDavKd~NdJbF`Ba@cBeFhJlPmQlLiHgGfHfJeIcHaGdJdIbGc~GdJdHe~Ga}C[{<\=_B=?4?A6FC<JE?PE?TG>[K>]M=`O;`Q<^SA^VIc[Xhcinlysotpvptppmgfaa]^\\edkjtr}{φٍ易囖ٜ՝֞מ֝՜ԛўќ͜ʛǚēxtk|mdif]^f[YiZSoWM{UJVKVK\RYRXRfaqjvo~wusgdUSZU2,/%7)7&7%8&8';*;-=/9,9,:,:,9+9+8+8,;1908.8,9*9(:&9&6*80=5@8A9?7<4914->6H@OGQINFC;7*7%8$7)4,//+3)7(:+@*A)A&A#@!<=:: 9%;);-9197:;;94:5;4;5:595735235465464716/5,5)9*9*9(9&9&8%8%6%5+3+4,5*5*6(7)7*;14,54TYes[pGbIhAd;`3[;aMmLb8?S*$A5'69(;<,B@1DA0@?-=B.>G,=CKP'\b<eoJhvRezQd~OdLaFaAa@c@gDiHkMlNlKjGhHfFgJfIfJdHfKdIdHdFeGeGfEb~A]>_?bB69.:<1??7DA:KB;OE<VH=YL<^O<\O<\SB^WMc]]helom{sqsoqkjfc`\[ZZ\]\_hjnowx҆؊ݓӓГГҔѓѓВΕ͓ǔĔzr|ewu^fi[[d[Vd[RfXKrVHTHZQ`Y\YYWcbkiokvq}ynhaX4+2&8):'9&9%9&;(:+:,:-5)5'8*>/>/6(/":.8-7,8,:+:)9&7$5)6,8.:0=3@6A7B8:1@6E;F<H>G=@67+6%6&7,4/03-5+9*<';'=%=#;!:77686$8*;2<6=8;::94:5;4;59585735236475565616/5,4(8)9)9'8%8%7$7$6%5'4)5*6(6(7(6)7+<21+88kr]nPi<[Hl7]>e5[>bVq?Qa#(L/);7+07'37&9<)@=*A<(@>)BB&?FXa4s~Tdw`hSa}LaG`C`?a@c@hEjJkMlNnMkHhHgGhKhKfLdJeKdJcFdGfHfGeFbBcDeEhH25*58-;<4A>7G@:KB;RE<VJ<XL<YM=YQD^WOc^bigronrormjg`^WWTUWX\_aclnrs{|Ոيی܍ҏΏώЏюЎύΏʎƏxo_p|Y`lXYd[T^_Q_\IjWF}SEUL\YY[X\cgkkplxs}vzs~{ka<28);(:';&:%:&:'9)8*:.6*5'8)>.>.8(/!6)5)4(6)9+<+=*;):-:/909/:1;1<3=3D<E;A9=3<4A7@8;15'5)5.31/5+6)7):&9&;&;'<&<%:$:#:"7#7%7,;5>9?8:8794:5;4;59585735447476665726/5,5*8*8(8(8&7&7$6$6$5%6(7'9(9(:(9):+:13.HKoyVjD_<_Ag3\8b>cMlOe0=J C1-11'.6'4=,=B.B@+B<$E>$HE$U\0p~Mr|mjW_{J]~E_Ca@bAfCkJlLmOmOoNlIiIhHiLiLhNgMfLdJdGeHgHhIfGdDgHiIlL-3'36+891<;6B=9G@:MD=QG=SI=SK>UNDZUQa^eigumklkjhb`XVPPQQXY`cfjorux|Ђֆه؊ًϋ͉̊ЉшъщЌϋȍ~wmYjSZnVTc\RZaOZ_HeZDxUBLDTRSWRY^dejkluqunoh~v{~l`?28(;(='='<';':'8(7):/8.8,9+:+:*9)7(9+7+8,7+7*8*<,>-<0=0<2;/:08,7-5*@7@5=49.80;1:25,/%0)2025/8-9+;,<-?.?/@/@/A/?-?.@)9)8+70:6=8=774394:5;6:79585654448485676726/6,5*8*9(9(9&9&8&7&8&8%:&;'=(=(=*=,<.7/;8^eaqPi<[Ai4_4`1YKlYq>NZ%-C),:2/-0)08+7@/:B+<<"A<UH(`[5{Slwo[aK^F`DcBeDjGoNpPoSoSoNlIiIgGiLiLiOhNfJeIdHeIgIhHgGeDiIiKlN+1%.4*470893>:7B=:HA;KD<NH<NG=OJDWSR_^ffeugggfba[YQQNORS[^eilouwz|փ؆نՉӇˆȆ˅΅Ѕ҇҇ЍҌˍ{v|jzVcPVnUQd^P[eMXbIb^EsXCOEWRUZSZ\caggjpoyrqh|tsjxm\Q;+5#;'=(=(<(;(;)9*7*5+7-:.:,:)8':)=,=.@2A4>18*4&8)<,:,:,;/;-:/9+5+5(6,;/>4?3?6>37.,#+%-*02391;0<0?0?0@1@1@0=/<-9,9*7/</;0:3:6;69554294:5:6:79585654459596776746/6-6*7+8)8)9'8'8%7'9%9$<%=&?'@(@*?.;061HIfrOdHf7[Am/]7a4XPjUfm19E(*E697325406906=-3;#38CCja:TwΗǓ}vbeQ`F`BcBgFmJrOrRqUpToNlKhHfFhKiLiNiOgKfJeIfIhIiHiGfCjJkMnP(0#+1'/4-350764<85@=8C>8IE<HE<KHCRPQ[[eabtbb|``_^ZXTTTT\]gipsvx{~ۃބ݄օԆу˂ȃ˂̓хԈՈӍҋȋ|wpveo~U[|PQnUNf_O]eMZdIaaGq]ETF]TZ[VZ[a]daellzsrjxoYP[PD85':):'<&='=(;*:*8*6*0'3)8,;,;*;(;(<);*C4K=H:=/4&5';,9)9)9+9)8+8)7+7)6+<.?4@3@6A5:11)0.14496>4>1>0@/?.</</907-5,2+2*12:3;5;59575565758697:6:7877767465:5:7:8774706-6*7*8*8*9(9(9&8(9&9":">$?%@(@*=-;196U\^qGc?a:a7g3b8`FdNa@IS12A64@:<:46?56<7179+4="9CSZ.PqŊˎ̒Í}{egQ_E^@c@iDoJsPsSqUoSnNkJgGeEgJhKiNiNfKdIdIeHgJhIiHfEjLlNoQ&.!(0%-2+13.331764:95<;6GD=DD<GFBOOQZZd_ap^`y\\~`_\ZYX\\ggqsz|܁ႅ䅆ㄅჃہՃ҃΄̃Ʉ̃΅Ӈ֊ԍЌċxsnuqbevWUtSLjVKf_MbfM_eIcbFp^FzQ?[MZSSRVZW\Y`cermnfqhD;A71%4&C29%:&;'<):+:,8,7,,#0%6)<,@->*;'7$4#B2OAN@B47)7)>/;+:*8(7'6'6(8*8+;.;/9-6*7,<1<271888=:A9B4A/<,;,:/;19384857563657376;9<69453376;9869796:7877767465:5:7:8995827/7+8+:*9+;*:*:(:*;(9":"=$>%?(?+<.81<?\fQhIf9]=h.]<h;\\pLV^..G83BC><89?48E26C41=:)>E&FU*bs?aˌɋËz{efPZ|@^?a>hCoJrOrRpTnRnNjIfFdDfIhKiNiNfKeJdGeFgHhGhGeDkLmOpR(0!'/"(-&).(.0-3317839:4==5?@8DE@JLKORYVXeZ\s]^}YX[Y^]eennwx⌌솇䂂܀ւӃȁǃ˄ΆЈӋҌϊŊ}xwozkegf]Xm[Qm[Mi\Lf^Kd_IeaHhaGo_FoP;UA]OaYYXQTS[\`heYPD<707/:1=/;+9(:&9(:)8)8*5,5,/%3)8,>/@/@-=*9'9)0"WJK?/#=1</8(;+:)9(8'7&6&5&4&7);.>2<07,8->4C<BE9?2<4?2@-;-:2=7>5;687899:97877;=<<::8785747575979899::9;9<9<8<7;6:8:9:;9;5907,8+9)9+:):):(;*<)9#=':#49%D3?61,^eVgIb<\1X0Y6cBiYoFQo33N3,B?6>C<@78@-1L/3K2.A9&DJ(Zn=~_włʌ~nfRXvBY{?]>cAiDnImLlNkOlNiIfDcBcBfIhKfLdJgMhNgKfHeEfEjIkJqQrStU*0")/#).').(-/,130561782;<4>?7AD=HJGOPTSUaXYkZ\u\Z^]dbkjut~·ߋ鍍년 ~Ҁς̅Ɇȇˉό̎Ȋ|x{stknlb`e]Re`Me^Kf^Kh]Ki\Ij^Hk_Gn^Ew_G[CYFZLVPRSQXX_USLE>9606/909,9(8&8&8(8)7)6*4,5,0'5)9+=-A/@-<*9(8)<.REH<4(:-:,4&=,<+;*;*:)9)8)6(7*8,7,3)1'1(7.<5DG8>/9/:0=.;1<6?5:3622:8EBIFDC?>:7989796858598988788999:9;9<9<7;6:596888;8:59/7+8*:*:*;*;*<)<+<)9$?):%5:';/:2<=^gPdA[8W6[;`>dIe?L?>_:2G;/:>08>2F<:R>=N0.S8/VK5ciEx[p}Ɓ}xr^YuETp=\{B_@b@iCmHlKkLiMiMgGeCcBcDgJiLhNgMiOiMiKgGgFfElImLpQoRtU-1"-1#,/&,.)//-11/34/45-9;0<>1@B7EHAKMLQRWUUaVWi\Yt^]fdpnzxߐꐎ튉燄߁|}ȀÆLjƊʌɌɌŌ|v{pujpndbi_Vc]M_aL_aKc^Jg\Jl[In\Ho]Gq]EwaIxX?S=VDXOUSOTMS><<784716/6.7+7(7&8$8&8'6)5*3,5,3(6(9)<+?-?-<+8(5'J=F:A5</6(;+6&:):):):*8)7)6(3'9-7,3*3*3+6/:3<8<=4907183<4<7@=C7;AANKYUZUQLB>84627272728596;8;877888:8;8<8<8<8;58475777:7:48/7,8+:+;+<+<+<)<+<)9&@*9$6$;+0'40PT[iJ`:U7V@]HfHdNa89e?6R@2DA09=,57)>6+K9/E-#R=,g]B_t{z{xm\uKHb5Nh8[xB_}?c@hDlGjIhJgLfKdDdCcDeFhKkNkOjNiOiOiMhJgHhHlKoMsVsWvY24&04&01)01+12-23.34.46+9;-;>-?A3DF9IJDMONRQWSS]XVd\Zoda~nlzwÌ֑㔑ꓐ뎋≅ق||~Ë}{vyn~rgmmaak^Vi[Pc\J]`K]aJc^Jh[JmZKqZJtZIv[FsWAxR;Q=YF[PTPFI>A2/5/51605.5+6)8)7$8$8&9'6)6*3,6-6)8'7&:(>+?-;+8)4'UI<18,B45%=+=+8(8'9(:)9)7)6(3'6*3)2)4,:3>7?9=:45596;5;2:397=<@UVbbmjidVQA<634/61717182859697:878898;9<8<8<8<7<5:686797<7<49/9,9*;*;)<)<+=);*<(:'@,8&8';-+"54`gTdG\<U=XG_OdO_SZvGAXH9KD2FE1BE0=?*:8#;3?3PG*nkHfttsx}l[K_:AW0Lc7Wr?_{@d@iCkFiHgGdHeJbBcBdEgHjMlOmQnRjPjNjLhJgGiGmKpOvWvZx\78(68*66,56.56056067/68+;>-=@-@C.DG4IK>MNFQPNRRRVUSYX]a_lkius}njӕᔑ␍܋ӄā}||~zxsznzrfjm_^j[Ti[PjZKfZJb_Lb_Le^Li\Kn[Lr[Kw\K{ZG~UAR=RAVFRHG@88331-3/5/5.3,3)5(9(8$9$:&:'8)7*5,7-;+:)6%8';+=.;.7,90\T=55+A53$:(?+:):*:+:,;-:-8-7-3*1)1+71<7>:;77475;<<?69155:BFMOxwqn`[JC832.73@:939172726273767668797;8<8>8>7=7;7;797:::=:=7;2;/8*:*;*<)<*<(;););(=*8'9*8-/)@ChrM^H[DYH[O^T]TWXUdM?OL9LG4JE1FD-?B'=D#>H#KV.\g<xTfmnr}udRcC?P0BS1Oa9Vl=b{BeBiCjEiFeFbHcGbBfCgHiJkNmPnRoSjNkOjMiKiIjInKrOvWvXwY?=.=>.==1==3==5;<4;=2;=/?B/@D-CG.FJ3KL:NOAQQIRRHYWJZZN_^\gerqn{yďяӍϊǃ~yzwyv{v|y|}}x|tzrvksrffm_\j\Sk[NlZLl[Kk[Ki]Mg^Mi]Mj]Mn]Ms^Mz]MZI`OVGN@J=@76.1+1+516/5.4-2)4'6&;(9$;$;&;':)9*7,9->,;(5#5#9)<.;/7-?7[TIA:0@36&3 <)9'7'7'7(7)7*7,7-<3:293<7>:=9854196<9::8:>@PPbcppheTP=61+40;7=:;7;5:294837373556669697;8<8>7=7=6:8<898:;:>:>7<2</8):););(<(;':&:(<)9(;)9*6*>8TXepK\I]J\M[QZVVZR`RPI7HM9NI5H@+;567>O%Lf6lTw\edfkt|mn}\Q`C<J09F,AP1O_;Wj=czDeBjDkFiFeFaFcGcCiFjKlMlOlOmQnRmQmOmPlLkJmJrNsQ{]{]z\DA0DB3DB6CC9CC;CC;BB6BC3DF0EH-GJ-JM2ON9RQ?TREUSD\ZC\\D\]Oaaaihxrq{z~È{ystoomplrnvpwrwrtoskzrinmb`l_Wj\Qk[Lm\Lo\Mo\Kq[Mq[No\Nm]Nl_Om`Os`Oz_NZM_SPEB8;26-1(2)5,706/4-3,4*5(7%9%:"="=$>'<);*9,;-@-<(5!3!8(<.:/5-93NITMB9B5?.1<(<,9+7*6)7+9.;1;3D=A<?;>;=;;:8885859574;:JJ\[dcc_=9824.81A=E@=;42;5;3949484847777697:6;8<8>7=7=6:7:6989;9>9>6<1<.8););(;';(:':'9&>+7%=+9)2'PKkm\fP^J\HWKSRS[RcQjUJM8DL7JB/H9$B7FH#Up=gV~oqh}YYcd|_XfCGT89E-6B*:D,=J0JX7Wh>e|FhClElFiGcFaGaGfFlImNnOlOkNkOmQpTqSpSpPoNqNtRwU|^z^y]IC3JD6IE9IE:IG;IG;HF9HG5IH3JJ2LL2NN4RP;TQ>XRDYTA]Y>[Z>\YH^[Tdahnk~xs}x{}|}wunoikgiejfmhmimh|lfrkbgj`^g]Th\Nh[Kk\In]Kq_Kq_Kp]Lp]Np]Op]Ns]Ow]N~]N\LXLUHF<9/7-7/6-6-6-6/4-4,4,7,7)6'6$:$<$<&=';);*:,<-A/<'3!3 9'=.;/8.2*A;[TI@D7F72>,F7B5@3?2?3A7E<F?@;=9:764546597<9?9=6:5@:MHQL@9)#-&5->7@;>9;8;;==9696968695:699::88888;8;9<8;7:7:6:6888:8=8=5<1;-9(;*;);(;';&:(:'?-5"=.8*/&\Xy|X_XdQ[KRLOVP`UgUnVPW8?J*<;C=UQ+lvDf~vs|anMu~Q^u}V[b@;D)4<%5=(=D2<E29C+CP2Ue>g{HiFlGmGjGfGbGcGhJlMoPnPlMiKjJjLsTsUsSrQrOsRwUzZvZu[sYRK;RK;RJ=RJ=RJ=RJ=RJ=RK;UN<VO=WP>XQ?YR@[TD\UE\UEb[HaZHaYLbYRe][kaiqftuj{zn|pss|puj{mbre]jc`k`_g_\c_Z^^ZY^YUaZRbZOe[Og[Ki\Kk\Ik\Gm]Fm]Fj^HicMqfTqZJuOBWJ\PYLZLN=E4<,7(8-80411-6/7.7.7.7.7+6)7)8)8)9)9)9+9+8+;,;+>-9(1 2!9*</9.5+5-:0C8K>H9=,2#PFJ@F<D;G?G@C><:7487::::776493=7F>B9:/4(1&5);/?3:0<3?7?:=;;9899:7:8:8:999797959540516576899:9:9;;>9;99=:A=B;A6?1:)<+=*<(:&:%8&8&A0<-/#/&LJmoloVZLNNOQMUOXO]RaTjSWZ/:M7FTa)~Poyxs~ahL\mCYdBT]BHP9?D0:=,@C2<@1:>0<C3:C0AN2Rd>]sBgHpKoKlGjIiKgJlPmSoSlPmMkJmJmIqLqMrNrPtRvUyYz^ycmZbOWN?WN?WN?WN?WN?WN?WN?WN?XO@YPAYPA[RC\SD]TE^UF_VGd[JcZIcYMcYOf[Uj_]nbdpdhreltgpvirvirsfmm`gg[_bXY^[VZZRYVOWTKXTIXTH\VH^WGcZKcZIf[Ig\Hi]Gj^Fk_Gh`IcbMngTv\MSFVMVORJQEH9C0=,9)8,8062406.8.8.8.7-8-7,7+7+7+7+7+8+8+8+:,<.>.9(1 2 :)>.<.:-4*4);0E:OBQCOCF?@;<5;4=7=88633777879787797=9B:A7?4:,6'5&8)=-@1A4@6@7=8:777567:6:6<7:89879595:592:3:5;6;8;89999:;;;<=?=A;?6=2;-;+=*=+<);(:&8%:%9'8)5*<5QPee^aMMNLTMYP\Q^S^S_VfQ`_/Sg*^r3zOn|pbjHauBTe;JX7FP7?H59?158-:</AB4=?4:=2=A3:C0@M3Rd>^tEgHqMpLnHkHkLhKmQnTmSmQkLkHlHmHpJpJpLsQuTxXxXx^mXbQYH]TE]TE]TE]TE]TE]TE]TE]TE[RC\SD]TE^UF_VG`WHaXIaXGe]Je]Hd[Jd[Le[Qf[Uh]Yh][i]]j^^k__k__i^\f[YbWS_VQZVMWTKUQHRNCQMBSOCWQCXRB^WG^WEaYFc[Fg\Hi^Hk`JhbLbaMngUy_PXN[UVQIEE@@7>1;/8+8+9,;/:/8.7-7-9.8-7,7,7+7+7+7+8+8+8+9+;,>0>.:(2 3:&>,>.?08+2(4*<0F9M?ND:643204297=<<<;<9<5:27265899<:@:8-:+6'4%5%8(<+=.D5C6B8=79464557969696977779595:3:3;4;6<6;8:999889:<<@>B=?9:17+7(;,<+<+;):(9&7%9&z6#y6%9,F=SOWTPOIFMHSLYP^SaWaW_VePsrFzVn{|[[o<?R$AS+AP/?L2:C06<.69058/9;.@A3=?49<1=A39B/@M3Qc=`vGiJsOrNpJmJmNkNpTqUoSnPlKlIlHnIpLpLpNuSxXy[uWqX_JVEOx>aXIaXIaXIaXIaXIaXIaXIaXI_VG`WH`WHaXIbYJcZKd[Ld[Je]Hf^Gf^Ig_Lg^Of\Pf\Rf\Sh]Wh]Wh]Wh^Ug]Te[QdZPc[N]YMZVJVRFRNBPL@PM>TN@UO?WQAYTA[VC]XDaZGd]Jf_LfaMdcQleUv\O[Qb\ZXFD<:<8;6:08-8):*?.?/9-7,8-9-8-8,8,7+7+8+8+8+8+8+9+;,?1>.9'3 38"=)@.?-:+7*5*7+:.</:26524123488;<=?<>7<380625587765615(7'6&7&7&9(:):*A1B4A7?8;5957687687878868694:4;492:2:4;7:8:89799<:@<C=A;;26+6'7(;*;););(:&8$7#9%=*v5#5'E:PHMGLGQLPJULZO^RaVaVaWgT_xtsYN`8/A->3B%:F.=F3;A3:=2:=4<=599-?@2<>39<1<@29B/?L2Pb<awHjKtPsOrLoLoPmOpTsUpRoPmJmHnJpKqMrNtSyX{]w[mSeM[FS|BNw=cZKcZKcZKcZKcZKcZKcZKcZKcZKcZKd[Ld[Le\Mf]Nf]Nf]Lf^Gg_Hh`IiaLiaNi`Oh_Pg^Oj`Ti`Qi`Qh_Nh_Nh`Mh`MhaNd^N`ZL[UGVPBPM>NK:NK:NK:PM<RO>TQ@VS@XWC[ZF]\H^]Kb`Qf^QmWJ[Ricc`MMBC;=8984709+=)C+B+;+7)8*:+9+9*9*8)8)8)8)9)9)9)9);,?1>0:(6"47 =&B-;*;,:,9-8.:0<0:49<4<3928384838256<494:7:9<76210(6(:(:(:(:(:(9&7&:+;/>3?7=8;896876666667484:3:3<3:2;2<5=7=:><=;>=@<B<B:=57-5(7(:*;)<);*:(9&8%7$8%@-u4"{3%G:QINFNGWNULXLZN\N]R`UaWhWfzj]kHDS42@&$2-:&0;*5=.9?3<?4=?4:;3::099->?1;=28;0;?18A.>K1Pb<bxIkLuQtPsMqNqRoQrSrSrQpMmKmIpLsOtQvSxY{^z_qVdJYC]JW~GRyBe\Me\Me\Me\Me\Me\Me\Me\Me\Mf]Nf]Nf]Ng^Og^Oh_Ph_Ng_Jh`IiaLjbMjbOjbOjaPjaPjaPiaNh`Mh`Kh`Kh`IiaJjbKf_Mb]J^XHXRBSM=MJ9KH7IH6KJ8LK9LM;NO=PQ?QTASVESVE[YL^VIcQEzXNhaeaVUQR@C:>8770;.?+C*A(;*7(8)9*9*9*9*8)8)9)9)9)9)9)9);,?1=/<)9$65;"A*B.@/;,7*2(4+;0=85:3<6=8>:>;>:=9<587:9>=>=>962/0'9+>*>*>*=)<(:'8%6%7);0=3<5<7;8;787757585:4;4<4=4>5?7A:A;A>A?@=B??:@8=38-5(5'8(<*<(<)<(:&9'7%6$6%}:)t3!~9*OAYNRGOEVJYN[MZM[M\Q_T`WgW~xXy^r|ZU`B;E,/;%0;*0<.3=24<16<2<?6@A9?A6<<077+89+>?1:<17:/:>07@-=J0Oa;bxIkLuQuQtNqNrSpRrQsPrOpKnJpLsOvRyX{Zz]x]qWgO]EXB`NYISzCg^Og^Og^Og^Og^Og^Og^Og^Og^Og^Og^Oh_Ph_Ph_Ph_Pi`OjaPjbOjbOjbOi`Oi`OiaNiaNiaNh`Kh`Kh`Ih`IhaGhaGhaGf_Le^Kb[I\WDWR?PM:LI8IH6IH6GH6GJ9GK:HL;IM<HO?JN?PQCXRF[OCiRDYMVLSLZYIJ?B9972;1?-B*<$:)7(8):*9*:*:*:*9):):):):):):);,=0=/=,<)8 49 A)C-A/=/6+/%0'6.:8596>;A@CAEBC@A??1266:<=;;9714.4)<->+>+@,>+>(;':'7%7'8+8.7094=9>;:79595:4;4;4=4>4B7C9C<B;A=?<=;>9<3:/8+6(7'8):):(=)<*<):'9(7&6%}6$x3#x5%B2UEWKPCPDZLYMZN\Q\Q[T\U[VbUkbEV`=JS4=G,6?*2=,4>35?66=68?8=B;CF=EG<CD6@>/;9*78*=>0:<17:/:>06?,=J0N`:awHkLuQuQtNrOrSpPqOrNqMpLoKrNuTyX`~az]qUfL_G]E^IbPYISzCh_Ph_Ph_Ph_Ph_Ph_Ph_Ph_Pg^Oh_Ph_Ph_Ph_Ph_Pi`Qi`QmdUlcTjaRi`Qh_Pg^Og^Mh`MiaNiaLiaLiaLh`Ih`IhaGh`IgaKf_Le^Kb[H\WDUR?PM<ML:EF4DG4DH7DH7BI9BK:BK:CJ:IK>SQDSPAXL<eK:tE5H>YSRODE::75;3>/=)8":)8'9(;*;*;*;*;*:):):):):):):);,;0:.<,>+9#37?'9#;)>0<18.7/<5?==B?DCEDC@?;7501./,51:6<6:28.8,:+=->+?,@-@-A+>*=*;*:(7(5)5+90?9C>=7;5;5<4<5=4>5@5D9D:C;A9?:;685937-8(5'6':)<*:)8&=*<+<*<)~:'|8%{6&{6&y1#8*G8SCPBL=RE_SWLYN[R]T]V\VYT^QaX;EM(6@8A&>G2<E43=2-7.1817>6BE<GJ?HI;BC1?>*;:&78(=>09;069.:>06?,<I/N`:awHjKuQtPtNrOrSpPqMqLqLpKpLsOwV{\edx\jP]EYA^HePcQZJSzCi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi_Sj`Wj`Wj`Wj`Wj`Vj`Vj`TjaRjaRjaPjaPjbOjbOjbOjbMjbMg_Jg_Jf^Ie_Ib]IZXCSP=ML:HI7EH7AE6@D5?E7?G8?G8>F7GK=IK=AE4KJ6\Q;aE/J9j]g`USFEA@A=>5=0=-4%5&6'7(7(8);,=.<-<-<-<-;,;,;,<-2(7.;/:)7"579"A-;+6)4*6/<7C?HEDEEHCC:661808.4+9/9.8.8-9,:+<+<+=+=*>+?,@-A,A-@-;*:(7(6)6+8-;3<4=6=6?8A7A9B6@6@5H=E;A8;25/3-1*2+9-;*9+:*:););+<+9'}8(|9(|9(|9({8'y6&x3$w- A4OCMAL@QEUJRG\R\RUMTLZUXSWTgZ]T5IQ*AK(BK,>H/7@+2=-4?14<1HPCZ^PW[JMO:DF.AA'==%:;)>?1;=2:=2;?14=*;H.Pb<cyJlMuQsOrLpMrSqQpLqKrNrNsPvU{\bfx^jO`G^EaJfPhTdS[LTyEi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi_Sj_Yj_[j_[j_Yj_Yj`Wj`Vj`Tj`TjaRjaRjaRjaRjaRjaPjaPh`Mh`Kg_Jg_Jd]J^YEUR?ON:IJ:EH7BD6@D5?E7>F7>F7=E6@F8>E5>F1HL5MI0U?'Q:sbcX_ZUTGG@>A=?9:09+=,=.>-;-;+9+:*:,:+:,:+:,:+:,;.?5B:B7=/6#1125#6(;/A8E?IDJFKHCAEDB><39/=0?1=0?1>2>0>/=/>.@.?,=*;*<+=,?+>+>,>,@.=-:,8,8+8-:09/<2<2?5A7C9C9D9E8B6A4=3:06/5.4,7,:.=,;,;+:*;*<*<,~;*|;){9)y:)x9(w8'u6'w4$4'D7NCK?J>QDTIRGSJXOUOVP]XWRSOcT]W5Xc9_jBZfBIT66C)4@*<H4OXGYbQ_fTW\FJN7BE*??#<<"9:(=>0:<19<1<@25>+;H.Pb<dzKlMuQtPrLqNrSqQsOrLpLqMtQxW|_c{aoUcJ]DaJeNeNcOdS[LTyEi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi_Uj_[j^^j^^j_]j_Yj`Wj`Vj`Tj`Tj`Tj`Tj`Tj`Tj`Tj`Vj`TlaOk`LiaNiaNf_La\HYVCSR>MK<HI9DF8AE6AE6?F6>D6<D5=F57@-@H1IK3F?%W?'ZCs`VJbZebTSFHGHCD;67+:*:,:*9,8)6)6'8+7)7+7)7+8*8,8.3-5/6-3(0"/1 3$A2C7G?LFLGJFFBD@CADA@:;1</A1E4E3D3D4B2A0@0A/~A.@.:*9+:);*<+<+=*<*?.=-;+9*8+9-;.9/:.90;0>3?3A4A3A4;,:,8-7+6+6,7.:/;/<,;-;,:+;+;+<,};+z;*z;,w9*v8)u7(t6)v4&;1F<NBJ=H<OBSHRIOITOSQVS]ZYU[Tl[}X~^alxRLX46D#=J.LZ@eqYeoW]eMPU>EI0?C(=@#:<$89';<.8:/9<1=A36?,<I/Pb<dzKmNvRtPsMqNrSpPuQpLnLpOuVy\}`|`pUfM\E\EeMiQfN_HcRZLSxEi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`QjaRjaRjaRjaRjaRjaRjaRj`Vk`\k__k`^k`\k`ZkaXkaWkaUkaUkaUkaUkaUkaWkaWkaXkaWnbRmbPjbOjbOhaNe^K_ZGYVERO>MK<GH:DF8CE7BD6@D5<C3<H49B-FJ3LF0O:%qL9cO^NA5SLc_^^SUJODHAA919-7+7+8-:/;0:0>4>4>4>4?5?5?5>7?;B>D>F=F<I>M@PDSHPGMGIEGBC?A=B=FBD??7=0>.C0G3I6F4E3C3B1A0}@.zA.|?-:,8,9+:,:,;-;+;+:+:)8)8*9,;/=/<0:/8.9/:.:.:,9+8*7)7(6)6*7+8-9/<0<.<-;,9*:*~9*}:*};+|:,z;,y;,w9*s8*q6(r7)u5)D8H=K?H:I<ODTKTLQLTPQOSO\X_Xh^~jpfuWYh?CR+?O*P`<crQetU\iKNX=CL1?E+>B)=A(;='78(:;-79.9<1=A37@-<I/Oa;bxIlMvRuQtNrOrSoPqOoMoMsRz]|az^u[cJ^E[D_HgOjPfL`HbQY~KRwDi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`QjaRjaRjaRjaRjaRjaRjaRj`Tk`Zk`\k`ZkaXkaWkaUkbSkbSkbSkbSkbSkaUkaWkaWkaXkaWocUnbRkbQkbQkbQhaOd]M`ZJXRBRO>NK<IG8GE6DE5BC3>B1=I1?G/LG1S>+g=-ZL_S>43+?9XUigdeRUJNNPIAF<@6>4@6D:G=G>JAJAJBJBKCKCKDKESRTTSRROSLSLULUNLHIFEBC@B@C@EBFDJFE@>7=2?2B1E3G4E3C3B3@0?1~?0z?/|>/:.9.9.9.;-;-;-;-9*9*9+:*:+;-<.;/;/9-9-:,9,8+8*8*8)8)8(8)9*:,:-;-:-:,9+8*}8)}7+|8+{9+z8,y9-x:-v8+q5*o5)q7+t9+H;I<I=I;K?RFWMXOQMUQRPVQ`YbWg[zdnrQZi@JY0AR(IZ0Wi?dvNj|VXiEL[:?L.:D)<D,>C-<A-:=,89+:;-68-8;0>B47@-;H.L^8_uFiJtPtPtNrOsTpQnMmLpPwY|az`rXiQZA\EaIeMgMgKhJfLcPY{IRtBi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`QkbSkbSkbSkbSkbSkbSkbSkaUlbYlbYlbYlbVlbVlcRlcRldQldQldQlcRlcTlbVlbXlbXlbXocUnbRkbQlcRlcRkbQg`Pd]M^WGYSCSM?MJ;KH9GE6EB3?B/;H.?H-OC-a=-E:XRNJ,+:9=;SRpnvvehX^^_UQPFG@C:D=G>GAG?HCJBHDJCJFKDKGKGHHGIHHGGHDHDGBFBBAABBABBCBB@A>A?JGC?<6>3@3A0A0C3A2@1?1=1<0<1=1=1;1;1:3;1;1</<1=/</=-<-;,:,9*8+7):.8.9-:/;.=.</>.9)9(:*:+;,;+;,:+:,9+7)~6({5){5){5)z6)x6*x8,w9,s8*p4)o5)r:-v<0M@K<J<M=QCVHXMWNNITOVR\Ue\{^PfVF`^GEO->N)?O(J\2_rEk~QexKXj@M_7@Q-6E&7D*=F1=D4:>07;-8:,:;-68-8;0>B47@-9F,I[5[qBeFrNsOsMrOsTpQmLoOsUx\z`s[iQ`HYB^GeMgMfJeGgGhLaNXzHQsAi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`QkbSkbSkbSkbSkbSkbSkbSkbSlbXlbVlbVlcRlcRldOldOldMldMldMldOldQlcRlcTlbVlbVocUmaSkbSlcTmdUlcTi`Qf_Ob[K^WGXQARL<OI9JG6IC3AC.:G+@F*U@+xG9PLHH8<39AE?@JIb`qpnpbeZ\QNLDD?B;D?E>B>@9C?C=C@D?CAD@ECDCADADDFGHIHJIIIGHACADBEBEAA@>=:=:FF=<83;2@4?1>0@1</<0;1:08193:4;4;3<3:4<3<3}=1}=3|<0|<0|=.|=.{<-|:,{9)z8*{7*:.9.9-9.9.;.<.=-9):):*;*;+<*;+~;*8*8,~6*}5)|4(z4(z4*y5*u2)v6,v8-r6+o3)o5*s:/x@3PBN?N=Q@VFXIUJRIOITNTO\VfZn[JPK7EK1AN0KZ9WgC`rJgyOdzLVl>G]/AV-7H$1@!6B*=F5<D98=67:39;.;<.68-9<1?C57@-7D*FX2Vl=a}BoKqMsMrOtUqRoPqQuWvZsYjRbJ[E^H`IcKeKfJfHfFeI`MWyGPr@i`Qi`Qi`Qi`Qi`Qi`Qi`Qi`QkbSkbSkbSkbSkbSkbSkbSkbSlbVlcTlcTlcRldQldOldOldMldMldOldOldQlcRlcTlcTlcTnbTmaSmaSmaSmdUlcTjaRg`Pd]M`YIZSCUN>PK8MH5ID1DC.@F*DD([B,TG\X>A/3IN?E;>;<FGZ[efY[GHJGEBB?B>FBFBB>>7D=D=D@EAEBECDEDF?C@DBEEEGGFFBC>?BD@C>A=>>>A?C@ECBB9850;4?6>3=/?2</:0:081838394;592:2:2;2~<0~<0|<0|<0x8,y9-z:.z:.{<-{<-z;,z;,};/9/7.7,6*5*7*7(8*9*;+<-<-=,~<,};+}9,}7-|6,y5*z4*x4)x4)x5,r2(u5+v8-r6+n4)n5*t;0xB6UGPBO@SDWIVJRGNGTNUNRKXMdSeZDGK2=J,IX9ZkIgxTcxQYnESh=Nc8J_4:L&0?,95>)=C5<B8:<79<5;=2;=079.9<1?C58?-8B)EU1Uh;azCnMrNrNrQsSqRrUuXv[tZoUfN^H[DdNaK`HcIfJgKeEaE`MWyGPr@i`Qi`Qi`QjaRjaRkbSkbSkbSjaRjaRjaRjaRjaRjaRjaRjaRkbSkbSkbSkbSkbQkbQkbQkbQlcRlcRlcRlcRlcTlcTlcTnbTk]Pp`QtdWrdWnbVj`Th`ShbTgaSgaQc]M[VCVQ=SN8NH2GA)KG,I?$bI3gWxmleYWOOBEBEDGFHHKJKLMKMEEDEEDFEFBC=C<F<D8E9E<E?D@CCAD?CBFBDCDDEDEFDEDDDCCB@@??>?>@=@=C?B?>:9370:0=2>3>2?2?3=2;393938192;0<.<.;-;/:.:.:.~:-~:-~:-~:-};/};/};/};/}90}90~80~8.7.7.7.~8,8,~8,}9,|8-{9-z8,x8,x8,x8.x8.w7-v8-v6,t6+s5*q5+m1'r6,n4)m3(o6+m4)q8-I=SHSJRGRHPHQJQKRLTMTK[NcQo_HYU:MV7O_;j~YbxQYoHUjCRg@Mb;IY5CR17D&4>#2:#6;'<>0@B5@@6<>358-39-4:.7:/9=/;?.=B,<E(S_;arFnRsUrQrSsSrUuZ~e~epYbK^G^H^G`IbKdMfNeMcK`H^G_LTvDKm;i`Qi`Qi`QjaRjaRkbSkbSkbSjaRjaRjaRjaRjaRjaRjaRjaRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTnbTrbSqaRrbUqcVrfZogZmeXjdVgcWkhYoiYlgThcOc^H[U=RL4PJ0H>%Q?)kP=XGNBE=D?WVTTQQPONMMMLJKJTTHG=>=:B@EAB;>4D9E9F=G>FBDDAEAEBFCDCDDEDCFDFDFDEAD@B?A>A=A=A=C?E?C<>6:090:/<0<0A2~@3~>4<3:3918190;.<-;,;,;-:,:,:,9-9-9-9-~:/~:/~:/~:/}90}90}90}90}90}90|90|90|90z:0z:0y9/y9/y9/w9.w9.w8/w8/t8.s7-r6,r6,p6+p6+k1&q7,m4)l3(o6+l3(p7,~H>RISLQJPJQLPMQNSOOGSH[K{ePsiPhkLfqQgxT^tMXnGPf?La:K_:K\:GV7CP4<F-8@)6;'7:)<=/?@2>>2;=04:03;05;16<0:</<?.>A,>D*Q[9^mDkRpRpSqRsSsVx^|exakT`I]F]F\E`IaJcLeNdMbK`I^I]LRtBIk9i`Qi`Qi`QjaRjaRkbSkbSkbSjaRjaRjaRjaRjaRjaRjaRjaRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTnbTqdTo_Pm]Pm_RqeYog\ldYhbVfbWpl`{xi~{jyizubpiVe`JTT<FF.C>(MB.S@/U8(]7*l=3n70u91~;5@:IBPJXPZR^YSNGEB?DBFCD@@:A;C<E>G@GCFFEFDFCDCDCDCDDEEEECECDBDBD?C>C=C=C=C>E@E?B<>5:18-9,;-@2@1~>2=1:19181:0;.;,;,;,:,:,:.:.9-9-~:/~:/~:/~:/~:/~:/}90}90}90}90|90{8/{8/{8/{;1{;1z:0y;0x:/x:/x:/x:/t8.t8.s7-s7-r6,q5+o5*o5*j1&o6+m4)k2'l6*i3'm7+}G=PIPIPJQLRMSNUPVPWO[P~^OtbNoiQorUlwYfwUQeBK_:EY6DU3EV6GV9GT8ER8?I0<D-9>*7;*:<.<>0;=/9;.6<25=26<26<0:</<>0=@-=C)MW5Zi@f|MlNnQqRuUtWz`w`nWcL\E\E\EZC_HaJbKdMcLaJ_H]H[}JPr@Gi7i`Qi`Qi`QjaRjaRkbSkbSkbSjaRjaRjaRjaRjaRjaRjaRjaRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTnbTrdWoaTm_Rk_SkaWlcZle[jf]jf]xtix~r}zg`cNOT>DG2FE1HC0F=,L<,VC4P9+R6*V4*Y5)\6+a9/e=1m=1KBSJUONKFDABDCFF@>A?B>E@ECFDEDEDDDCDCDDDDDEDEBFCFBEAD>E>D<D<D=E>D<F?F>A8;18,9+<-@0@1~?0=/:1:/9/:.:-;,;,:+:,:,9-9-9-9-~:/~:/~:/~:/~:/~:/}90|90}90{8/{8/{8/{8/x8.{;1y;0y;0y;0x:/x:/x:/v:/s7-s7-s7-r6,q5+o5*o5*m4)j1&o6+l3(h2&k5)h2&l6*|F<OGOJPKRMSNVPWPZQ]RaUy_PiZGd_IdhO\fKN]@EU8AQ4=M0<K.?M3CQ7FR:GS;BL4>G2:A/9=,9=.9=.8<-7;-7=36=56;46<2:<1;=/<?,<A*JS4Ve>bxIjLnQsTwWxZ{ar[eN\EZC\E\EZC_H`IaJbKaJ`I^G]HY{HNp>Eg5haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlcTrfXth\sg[mcYjaXle]snhzwp~wz{kcfSOR?GJ7EH5BE2BE2EH5KL<JH9GD5D>0A9,A7+@6*F4(S5*qB8PHPKIGGIEIBE@B@BBACBEAEADADADDDFDFDFDDEDEDDCFBFAF>E=E=F=E=F>A:C;E=B9>39-;.</?0?/>.=-;/:-:-;.:-;-:,:,:,9+9-9-~:/~:/~:/~:/}:1}:1}:1}:1|91z:1|91y90y90x8/x8/v7.y:1y:1x90v:0v:0u9/u9/t:/r7/q6.q6.p5-o4,n3+n3+m4+j1(m7-j4*h2(j4*f2'j6+}D;NGNHQJTLUOWPYR[Q{YMv\OkZJ]UBYXDY^HOYA?K3:H/7E.4B+5A+8D.=I3CL7EN9BK6?H5<E2:A/8?/7>.5<,4:,5<45<56;56;49;0:</;>-;@)GP1Ra:`vGiKoRuVyYy[x`nW`IZ}C[~D^G^G]F`IaJbKbKaJ`I_H^IW|ILp@Bf6haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlcTkaUndZpf\lcZkd\rmg|ľrfcTPQ?FI8>E3;D1:F28E38E38C2:B3<B4@C8CE:GE9>4(P:/e?6EAPOX[QVCIFJEFFFEDEBDBD?CADDDFDFDFDCDCDCDCEAFAF@F=E<F<G=E=?8@9C:C9A7=0=/=.>/?/>.=-<-;-:-;.:,:,:,:,9+:+9-~8,~:/~:/~:/~:/}:1}:1}:1}:1z:1z:1y90y90x8/v7.v7.t8.w8/u9/u9/s9.t8.s9.r8-r8-q6.q6.p5-o4,n3+m4+l3*j4*h2(l6,i3)f2'h4)e1&i5*{B9MGMHPJTLVOXNYO|\Qs\Nk[L`WFVSBPSBJQ?@I64@,3<+2;*09(09(2;*5>-9B1<E4?H7?H5>G4:F2:C25@/3>-1<,3:33954954928919;.;>-;@*CL/O^7]sDiMpSwYyYwYqYfOZ}CX{A\E]F]F^G`I`I`I`I`I_H^G]JV{HJn@Ae7haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlbVj`VjaXkdZkg^upjμzym]_YIKL:@E1;D/>J6=H7=F5;C4;>5:;3983880==3C<2N71a84HH]_`dWZQSNOMKKJHGFDDABBCDDFDFCECEBDBBCBDCD@D?F?E<F<G=E=@:@:B:C:C:@4;/9+=/>.>-=,<,;,;,<-:,:,:,9+9-9-~8.}9.~:/~:/}:1}:1}:1}:1}:1}:1z:1y:1x90x90w8/t8.s7-r8-t8.s9.r8-q8-r8-p7,p7,p7,o6-o6-n5,n5,m4+l3*k2)i3)g1'k7,h4)e1&h4)b0%f4)zA8MGMHPJULXNYOxZOr\Nk^N^WGRPAKN=CJ:9B12:+08)17+17-06,/5+/5)08+2:+4<-9D4;F5=H7<I7;F56C13@,1>-.800621622717829;0:<.:?)?H+KY5[qChLqVw[wYsVgP^IUx@WzB[~F[~F[~F]H_J_J_J_J^I^I]H]JUvIJk@@a6haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlbVpg^ng_lgatqj}ub^\GKM7CH2AI2AI4@G5BD7AA7B=9C97?:69<5>?7B71J.+d66QRginm\\ZWVSQNLKHHCDBCCFDFDFCECEBDBBBBDCCBC?D>E>F<F<E=C=A9B:D;E:A6:-5&</=.=-=,<,<,<*<-:,:,:,:+9-~8,}9.}9.~:/~:/}:1}:1}:1}:1}:1{;1y:1w;1x90u9/t8.s9.r8-q7,r8-q8-p7,n8,p7,m7+o6+o6+o6-o6-n5,m4+l3*j4*i3)h4)f2'k7,h4)c1&e3(b0%e3(xB8MGOIRJUMXOzZOq[Mh\LZTDIJ:?C4>D69A208+/7*6<247058157247025.06,08-19,6A3:E5=J9>K9<I77F32A,1>-,6..400511606718:/:<.:?+<E*IW4YoAgMpVv\uXpU`IX{CSv>WzB[~FY|DY|D\G_J_J^I^I^I]H]H]LStIHhA?]7icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSjcSkbSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUmdUmdUmdUmdUldWibZgd]vsnʵƶibbFEH-DH/CG0FE1GD5F<3C60F42H:9>=9>?:B:7I75cGFjjœ譩ҋtn]XSPONJLFKFKEGIKDF;>>@GIDG:=@@@@A@B>C>B<A;A9C>A9@9A9B8@5:.8*=0>/>.>-=,<+=*<,:+9-9-~8,~8.|8-|8-|8-|90|90|90|90z:1z:1z:1z:1y=5w<4w;3u:2t91q8/p7.p7.o6-m7-m7-l8-m7-l8-m7-m7-i2+m6/p92o81k4-g2*g2*h3+e0(i7.d2)]-#`0&_/%b2(s>6OJPKQJRJ}YMv_QfYITN>DE5>E5:C25@04</3;04:04:068378366446135016//6..6+.9+2=-6C2:G6:I68G44C.1?.*4+,2.-2..3-45/79.:</:?+6>&DR1WlChRs]w_rWkR[~DXyDTu@Tu@WxCZ{F[|GZ{F^JbNbN^J\}H_K`L^~MTsJFd@<W4icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSkbSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUmdUmdUmdUmdUldYgd]onjͲcgjKLQ3GJ/EC.GB/H>2I:3L95K<9?:7BA?MHE]RPyjgβſ쳪͂|c^VVRSHMADDEEEHHJKEF<><>AC????A@A@B>B=A<@9A<@;@9B:C;A6;18-=0>/>.>-=,<+<,<,:+9-9-~8,}9.|8-|8-|8-|90|90|90|90z:1{;2{;2z;2w<4u<3u:2s:1r90n8.o6-m7-m7-l8-l8-l8-l8-j8-l8-l8-k6.n70o81n91l7/i4,g2*e3*c1(d4*_/%^.$b2(^.$`0&p>5JERLXR~XOrVKdRDQJ:>?/:A16A05@03>04<14<15;17:379477577557246116//6./7,.9+1<.4A08E49H58G44E24B1.8/.5..3--2+23+46+8:-9=,7?(DQ3WlEhUt`wbpYgPY|DWxCTu@Tu@VwBYzEYzEYzE[|G_K_K\}H[|G^J^J^{MSnKF_A9R4icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSkbSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUmdUmdUneVneVlfZed_y{xشğl`gEQX7DG,DC.JD4LD7KA8I>:C;9SJKia_wvecBEDIRVUTMKDACAFEEFDDCD=?>@@?@?B@B?B=A:@:@:B:E<D<B7<29.<0=0>/>.=-~<,=-=-9-9-~:/}9.}9.|8-{8/{8/}:1}:1{;2{;2{;2{;2z;4x<4t;2q;1r90o9/n8.l8-l6,k7,l8-j8-j8-j8-j8-i9-j8-j8-n91m80m80m80m80i7.f4+c1(d2)a1']-#_0&c4*\-#_0&sD<}PJVP~YQpTI^J?OC7?<-46(2;*0;+1<.2=/4<14<15;17:379479668357257227007/08-.9+0;-2?.6C27E48G48G49F54>33:2/4-,2(/0(13(57*6:)6>'DQ5YmJkZwfwflZ_KWxCWuCTr@Tr@VtBXvDYwEYwEZxF]{I_}K]{I]{I_}K^|JZwKPgJAW@3I2icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSjcSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUneVneVneVneVmg[jkfڴefmLMQ6FH0HJ5KI:HD9D@7OGDj`_収cd@?PKTMPHF@GBMJKH@?>>???>A?A?B?B=B=>9@:C=E?E>A9=5;2<1=0>/>.=/~<,=-=-9-9-~:/}9.}9.|8-{8/{8/~;2~;2|<3{;2{;2{;2z;4x<4r90o9/o9/m9.l8-k7,j6+h6+i7,i7,i7,h8,h8,h8,h8,h8,m;2l7/j5-i7.j8/j8/f4+a1'e5+a2(].$a2(b3)Y* a2(yNE\VvWRiNGWC:I<3@:.:;-8<.08)/:*3;.4</5=25;169069079468368349238139/19.19..9+/:,0=,2?.5B17E4;H6<I89C87?428.-3'.0%/1$24&48'4<'ER8]pPrd{nwifXU|ESsATr@Sq?Sq?Tr@UsAVtBVtBWuC[yG]{I\zH^|J_}K\zHWrIJ^E<M;.?-gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSicSjcSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUneVneVofWofWng]qqoҭ}bY]BGL5FK7FJ9CG9AC8c^X}z騤hcLAPDYN[QQHD=A<DA@=@>@?A@C?C?C?C=?;A<E@E@C>@9>5=3<1<2=1=0=1~<.=/=/~:/~:/~:/}9.|90{8/{8/{8/|<3|<3|<3{;2z;4y:3y:3w;3n70m80l7/l7/k6.h6-h6-h6-i7.h8.h8.g8.g8.g8.g8.h8.k92h6/f4-g5.i70h70e4-b1*c2+b3+_0(]1(]1(V*!b6-{ULtYRaNHN?8A7.=6,;9-9;.9<139-3;.5;/6<06<07:/58-47.69049238139/39/2:/19.19,.9+.9+/:,0;-3>.6C2:E5<G7=E8:B55;/06(02%/1$13%15$2:%GS;buWwk|rqg\QJp=Oo>Qn>Qn>Qn>Qn>Qn>Sp@Sp@WtD[xH]zJ]zJ_|L_|LZwGRlECU?6D7(6)gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSicSjcSkbSkbSlcTlcTmdUmdUmdUmdUmdUneVneVofWpgXpgXng]lnmzĥregOMP;GK:FM=GOBKQG{{sžؓeSJ:TFWIF;@8KEC>C?B?C@C>C>D>B=B<C?DAD?A==8;5<4;3<2=3=2=1~<0=1=/~:/~:/~:/}9.|90{8/{8/{8/|<3{;2{;2z:1y:3x92w81u91n70l7/l7/j8/i7.i7.h6-g7-g7-g7-f7-f7-f7-f7-f7-f7-h70h6/g5.g5.g6/h70g6/f5.a2*e6.^2)\0'`4+a5,i=4uSJXG@E>6<5/95,;8/8:/57,36+69.5;/7:/69.69.58-57,36+28,19,28.19,19.19,19,19,.9+.9+.9+/:,0;+3>.6A17B2<D5:C28?/5;-46)24'13%04%07%HT>ex\umtlf_RwKBh9Kk<Nk;Pm=Pm=Nk;Nk;Ol<Qn>VsCZwG]zJ^{K_|L_|LVsCNg@<J9/:2$.&gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSicSjcSkbSkbSlcTlcTmdUmdUmdUmdUmdUneVneVofWpgXqhYoh^hikmtzƯ}un[ZWFPQCSVK[bZeldo[VDRCPDLAJAG?E?E@E@E>D=C<B<C?E@EAC==9;5;5<6<3=4<5=4<3~<0=1=1~:/~:/~:/}9.|90{8/{8/{8/{;2{;2y:3x92w81v70v70s7/n70j8/j8/j8/j8/h8.h8.h8.g7-f7-f7-f7-d8-d8-d8-f7-g6/h70i81i81h70i81j;3l=5g80k<4b6-a5,oC:xLCtI@nMDC9056.45/8918;247.14+25,58-58-57,46+46+46+46)37)/7(.9)08+.9).9+.9)08)08)19*08)08+/7*08+19,3;.4<-9B1:C0;B0:A1:<.68*24&/3$29'IU?cu[mgfbWyTInE?d8Hg;Li;Nk=Nk=Li;Li;Mj<Ol>UrDYvH[xJ]zL^{M\yKQn@G_;6B4+4/#)%gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSicSjcSjcSjbUlbVlbVmcWmdUmdUmdUleUmfVngWogZnh\oh^mjekormtzη|ubb_NXZL]cWmwn|}̻pQDSFSHC:J@H@G>F>E=D<C;C;G>G>G>C;>5:2:3>6=5=4=5=4<3;0;1;1~:/~:/~:1}90|90{8/{8/{8/z:1z:1x92w81v70u6/u6/q6.m80k90j8/j8/i9/i9/i9/h8.g7-f7-g7-f7-f7-f7-f7-f7-f5.j81m;4k:3j92j:0m>4oC8l@5oD;d<2c=2zVJdZyWMbLA>:13814927<54:0/5+25,9<336+25*24)03(13(25*46+47,.6),7)/7*-8*/7*/7*/7*/7*19,08+08-/7,/7,/7,08-08+7?09B1<E4=D4;A38<.26'-4$2;*JVBcr[h|a]vXOmKFfAAa:Hd;Kh<Nk?Nk?Kh<Jg9Li=Nk=TqEWtHZwK[xL]zNZvMNjAC[;2>4*00!''heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjdVjdVjdXldYlcZmeZmeXmfVg`NjeRnkXol]he\feasqrԶ|qtY_dMbkXr}lا`XD=NEMCF<D9E<I@KAH@G<G8H8J8H8E5B4B5C5B5B6@4>3<2:1919191~:1|91{80z7/z7/w7.v6-w7.w7.w8/w8/v7.u6-q5+n3+l7/i81i81h70h70g6/g6/g6/f5.g6/i70i81h70g6/e4-e3,h3-j5/m80k90j:0i;.i=0kA3gB2jI:dH:v_O~k\xjoRJ=79.4:04:039/39/39/28.28.17-17-36-06,25,/5+14+/5+/4-.5-/4-.5-/4-/4-/4-/4-05./4-/4-.3,.3,/4-/4-/6.1;23=26@58B79D67B45@03>-4?.DQ=WeN[kQPbHEX<@T8BW6Ic>Ke>Kf=Kf=Je<Je:Lg>Oj?UpGYtK\vO]wP]wRWqNHb?;O6&1+&+.$),heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZmfVidQjhSmjWjk[gg_lll~ЯvkqUYaI_kUto~uKAM@K>L@K>E9=4?6E9F7J7L:J7F6C2C6E7C7B8A7>5<4:39193~92}:2z:1z:1y90x8/v7.v7.u6-v7.t8.t8.t8.r6,o5*m4+l7/i81j81h70i70h70g6/g6/e3,e3,g5.h6/j81j81j81k92k60l71k90k;1k;/j>1j@0iD2gH6kP=gRAufSuesrKL<69.39/39/39/28.28.28.17-17-17-17-06,06,/5+/5+/5+/4./4./4./4./4./4./4./4.05//4..3-.3-.3-.3-/4./6/.80/:21=34@66B66B66B45B16C1CP>P]IR`IIW@AO6BP7EU:Jb@Jd?Ke@Ke>Ic<Hc:Id;Je<SnEXrK\vQ]wT[tTTmOC\>6I5&1-',0$)-heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZmfVmhUkiTmjWjk[kkcwwwۿʫyuy`kpZt{i؞L=RBL;@1G;YMUJ@4D7H:K=I;B7?3@7E;@9A9A8?6~>5}=4<4}=4z;4x<4w;3w;3u:2t91t91t91r90r90r90r90o9/n8.l6,k5+l7/j81l71j81k60i70i70h6/g5.g5.f5.g6/h70i81k:3k:3l;4j;3i:0h<1k?2jC4iD2fE2fI7lVAjYGujVm{mEF658-28.28.28.17-17-17-06,17-17-17-06,06,/5+/5+/5+/4./4./4./4./4./4./4./4./4./4..3--2,-2,.3-/4..5.+5-+6.-9//;12>24@46B47D38E3?L:ER>CQ:;I28F->L3DT9J_@Jb@LdBKc?Ia=G`9F_8G`9RkDXpL]uS^vVZqTPgK=T8.A.&1-',0%*.heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZmfVniVljUlkWlm]pqiؼǫ}ſñpP@O?XJM?E9G<A6E;I?G=@9<4=6A<?;@<@:}@;z?9y@9x?8x?8v=4v=4v=4u<3s=3r<2r<2q;1o;0o;0o;0n:/k9.j8-j8-i7.m82n72m61l71l71k60i70i70l:3j92h70f7/f7/f7/h91f:1j?6f>4e=1f>2hC3iE5fG3cG2cJ6hV@i\IskVozpq_9=,47,28.17-17-17-06,06,06,17-17-17-06,06,/5+/5+/5+.3-.3-.3-.3-.3-.3-.3-.3-.3-.3--2,-2,-2,-2,.3--4-*4,)4,*6,+7-.:.1=14@25A36C2:G5<I78E12?+2@)8F/>N4DX<E]=K`AJb@K`?G_;H^:F^:SiEXpN`uV^uXZnSLcI9M4):(%.+%*.$)-heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZmfVlgTkiTnmYop`tumؿʱ½ŜbPJ:L<P@L>@7C;F?D=>;:7:8>;=;?<@=}@=xA<tB;rC;rC;q?6s>6s>6r=5r=5r=5p>5o=4n>4m=3l<2k;1j;1i:0i:0j:0n72p62p62m61m61l71i70i70l;4k:3h91e90e90e90e:1d<2fB6cA5cC4dD5dG5dI6bI3_I2^L6eV?jbMrmWor[`L3:(28,28.17-17-17-06,06,06,17-17-17-06,06,/5+/5+/5+.3-.3-.3-.3-.3-.3-.3-.3--2,-2,,1+,1+,1+,1+-2,,3,,6.+5-*4+*4++5,.8-0;-2=/2=-5@/6A05A-1=)1=)5A-8F/=O5@T8FY=H\@J]?I^=K^>K`?TgG[pQcvZauZYkSJ]G6G4&4%$-*$),"'*heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZlfVjgTkjUlnYorasvmθκƶøͧkX[GWEL;D:D<E>E?A>=::9;9=<?=?=}@;wB<rC;oD;oD;p?8q?6q?6q?6q?6p>5o?5o?5o@6n?5m>4k<2h<1h<1h<1l<2o83q62p62p62m61l71j81i81h70g80e90e:1d<2e?4f@5dB6^B4aG8cL:dM;cM8`K6]K3]M4]Q9bX?mhRss[nv{eFO:4=*39-28.28.28.17-17-17-06,17-17-17-06,06,/5+/5+/5+-2,-2,-2,-2,-2,-2,-2,-2,-2,,1++0*+0*+0*+0*,1+,3,.5.,6.*4+*4+*4++5,-7,.9+-8*0;+4?/5@/4?.3?+3>-3@,7F/9K3@O8BT:GW<H[?M]BM`DUeJ\oSdtZ`rZXgRGXE4B1$2%$-*$),"'*heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjdVjdVjcYkdZlc\md[lfZlfVliVlkVkmXkn]lrhy}оλwbQ:\HN>J=I>I@G@D>=::7=9>:?9A:xA:tD:pF:pE<p?8q?8q?8q?8q?8q?8p?8p?8qB:pA9n?7l=5i=4j>5j>5n=6o83r73p62p62n72l71j81i81d8/d90c;1d>3d@4cA5cA5_C5ZE4_N<gVBhWCcS<^O8[O5\R7]V<]Y>nlUtv^|kcmU2>(6B.3;.39/39/39/28.28.28.17-17-17-17-06,06,/5+/5+/5+-2,-2,-2,-2,-2,-2,-2,-2,,1+,1++0**/)*/)+0*,1++2+-4-+5-*4,*4,+5,+5,,6+-7,,6+/:,2=/6A17B27B15@04?.2?-4C.:G3=L5AO8DT:JX?L\BTbI\kTcqZ^mXUbPDRA2>0#/%&/,&,,$**heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjdVjdVjcYkdZlc\md[lfZlfVolYmlWjlWgkZflbr{xoYWDQ@O>OAOBK@C<<5>7?6?8A7{B7uD6qE8qE8p?8q?8s>8q?8q?8q?8q?8p?8sB;qB:o@8m>6l=5j>5m>6o>7o83q73o83m82m82i81h91f:1f;2d>3d@4bB5`C5]A3\@2WB1TG4[S>f^Gi^HbX?ZS9ZS7\W:ZV;XW;kmUsw^u}fUaI&28D03;.4:04:039/39/39/28.28.17-17-17-06,06,/5+/5+/5+-2,-2,-2,-2,-2,-2,-2,-2,,1++0*+0**/)*/)+0*+0*,1++2+)3+*4,+5-+5,,6--7.-7,,6+.8-2<16A39D69D47B46A10;+2?-5B09F2<I5@N7FT=JX?R`I[hTanZ\iWQ^MBN@/;/",#+1-(.,&,,heVheVheVheVheVheVheVheVifWifWifWifWifWifWifWifWkeWkeWkdZle[md]ne\mg[mgWqn[kmWknYkr`jrgpyvѺibKO9T?ZFRAJ:M?<0=0>2=/x=/t?/sB3tD6r=5r=7t=8s>8u@:u@:t?9q?8sA:q@9q@9q@9p?8n?7o>7o>7k92m82l:3l;4l;4h<3g<3c=2c?3^>1dG9cG9T=-N9(M8'@1WQ;PN7KI0OK2]Y>ieJeaDVU7XX<]`CosZzfdlU=I1-9#2>*4</5;14:04:04:039/39/39/39/39/39/28.17-17-17-06,16016005/05//4./4./4./4.,1+,1+,1+,1+,1+,1++0*+0*.5.-4--4-,3,-4--4,.5-.5-+2*-4,07/5=29A6=E8?G<?J<7B25@/3>-1=)2>*9E/BN8IU?O[GVbN]hWYdTLWI<F;/9.)3*)/+(.*'-+heVheVheVheVheVheVheVheVifWifWifWifWifWifWifWifWkeWkeWkdZle[md]ne\mg[khWonZjlVknYkr`jtiq|xu\[CZBYCVCR@G5F6E4D3|C2wB0s@/o>/u@8s>8u>9u@:t?9o=6p>7sA:q?8p?8p?8n?7o>7m>6n=6m>6k<4l=5m>6k?6j?6gA6eA5bB5dG9[A2^G7^I8N=+F7$G8%>6!LL4GK2DG,DD*MM1\[?baC`aBYY=dgJsw^sy_X`I:D,/;%7C/6>16<26<26<25;15;15;15;15;15;15;14:04:039/39/39/27127127116016016005/05/.3-.3--2,-2,,1+,1++0*+0**1**1*)0))0))0)*1*+2*,3+.5--4,.5-07/4;39A6?F>BJ?;F8:E57B14?.3?+6B.<H2@L6LXDS_KYdTWbRLVK=G<1;2+5,+2+*0,)/+heVheVheVheVheVheVheVheVifWifWifWifWifWifWifWifWkeWkeWlcZmd[md]ne\mg[khWmlXimVjoYktaiuiq}y㿧jYBQ;[F]IS?F2u>)r>)s@+tD0vE4q?4n<3q<4tB9sA8o?5qA7xH>n>4m>4m>4k?4l=3j>3l=3j>3g?5gA6gA6gC7eC7cC6`C5^D5bK;UB1ZI7`S@RG3C;&E=(FA+AE,BH.AE*<@%?B%NN2_`AijKaaEnqTvzagmSJO94<%4=(=F38>28>48>48>47=37=37=36<28>48>47=37=37=36<26<26<25:449349349338238238227105/05//4..3--2,,1++0*+0*).().().().().(*/)+0*,1+160/4.,1+,1+/4.6;4=B<AH@@K=>K:<I78E34A-2?+3A*5C,DQ=KXDQ^MQ^MHTH<H<2>4.8/-4--4-,3,gdUgdUheVheVheVheVifWifWifWifWifWifWifWifWifWifWkeWkeWlcZmd[md]mf\mg[jiWkmXimVjoYjs`hthm|wڻּҽz{R>tJ4uH3vI4zM8}P;yL7nA.e7'{M@sD:qB8sD:oC8g;0d8-g=1i?3i?3i?3g?3f>2f>2f>2e?2b@4bB5`C5_C5_C5[D4ZE4WD3XI6OB/\T?oiSc^HMK4IG0IK3>D*?H-@F*<B&<A#FI,XY:deFmmQxx\tv^[_F@C.6;%8@+<C19?39?59?58>48>47=37=37=39?58>48>48>48>48>48>48>47<67<67<66;56;56;55:45:438238216005//4.-2,,1+,1++0*+0**/)*/)+0*,1+-2,-2,05/.3-+0*+0*-2.2718=9;B:@K=@M;@M;=J68E13@,1?(0>'<I5BO;HUCIVEDPB;G;2>4.:0,6..5.-4-gdUgdUgdUheVheVifWifWifWifWifWifWifWifWifWifWifWkeWldWlcZmd[md]mf\mg[jiWkmXinWiqZgs_drejytܿչйѾϴuawVCjI6lI6rM;uP>mF7iB3gB2jE5nI9nJ:oK;oK;eA1cB1cB1cB1cB1cB1bC1`C3]F6\G6\G6ZG6ZG6WH5TG4RG3PH3NH2fdM~~frrZVX@JL4GM3<E*<F+?H+AG+AF(DG*MN/TU6xw[{z^nnVUU=CB.?A,>A.:>-;>39?59?58>48>47=37=37=38>48>48>48>48>48>48>48>49>89>89>88=78=78=77<67<66;55:449338227105//4./4.-2.-2.,1-+0,+0,,1--2.-2.,1-,1-,1-,1-.210513764;4;G9=L9@O<@O:<K67F/4C,2A*6E.:I4@O<BP??M>8F71?2-9-,6--4,,3+fcTfcTgdUheVheVifWjgXjgXifWifWifWifWifWifWifWifWldWldWlcZmd[md]mf\mg[jiWkmXinWiqZgs_bpcgxrڽѵ˴˺ҿһsrb|]K}^LtUCaD2W:(Y<*[>,X=*`E2`E2`E2_F2`G3`G3`G3]H3\K7\M:\M:YL9XM9UM8RL6QL6NL5QQ9ikS|gmqXSY?FL2>G,<F+<F+?H+DJ.EJ,DG*HI*LM.yx\tsWfdMTR;LI6KJ6FE3<=-<?49?59?59?58>48>48>48>47=37=38>48>48>48>49?59?5:?9:?9:?9:?99>89>89>88=78=78=77<66;55:4493382382/40.3/-2.,1-+0,+0,+0,+0,+0,,1--10.21/32/32/32-4-3?17F3=L7@O:?N7<K49H18G05D-8G0<K6>M:<J97E61?2-9-+5,-4,,3+fcTfcTgdUheVheVifWjgXjgXifWifWifWifWifWifWifWifWldWldWlcZmd[md]mf\mg[jiWjlWhmVhrZfs_cqdhysչ̳İĴɿʴxt^GeO8bL5\H0^J2\J2\J2]K3]K3^L4^L4\M6YN8WO:WO:VP:UO9SN8PN7NN6MO7PT;`fLfoTU^CEO4AK0<F+?I.?I.CL/HN2HM/FI,OP1YX:qmRjfKa\F[V@YTATQ>MJ9BC3=@5;A7;A7;A7:@6:@6:@69?58>48>48>49?59?5:@6:@6:@6;@:;@:;@::?9:?99>89>89>8:?9:?99>89>88=78=77<67<6495273162/40-2.,1-+/.+/.,0/,0/-10.21.23.23-12+1-+9*/@-6H2;M7=O7<N4:L2:L25G/7I1:L6<M::K96G70@3-;.,6--4,,3+cdRcdRdeSefTgeVhfWigXigXhfWifWifWifWifWifWifWkeWkeWkeWldYle[md]mf\kg[jiWikVhmWhrZgt`dqgj{uѸDZžƾüÞu`P7RB)XH/XH.[M3[M3ZN4ZN4[O5[O5\P6[Q8UO7TO9TO9QO8PN7NN6KM5IM4JN5LR8S\APY<@I,;F(AL.?J,DM0EN1JQ2MR4JM0LL0YY=kjNhdIb^E^ZA_ZD`[GZUAQO:KJ8AB4@B5@B5>A6>A6>A6=@7=@79?59?59?5:@6:@6:B7:B7:B7;@9;@9;@::?8:?99>79>89>7;@:;@9;@:;@9:?9:?8:?9:?98?87=94;4382160/4..3/.3/.21.21,2.,2.+2++2*,4))6%$6)=!2F+8L1;O6;M5;M5;M58J29K3;M5<N6<N87H51B0.<--7,.5--4,]eN^fO_gP`hQdiUfiVgjWijXfgUhgUheVheVjdVkeWkeYlfXlfXkhYmg[kg\mf^jf[ieYgeVghVfkUenYbo]dqhsҾϼ·ƏlUN2WN1TK.SJ+WN1WN1UN1UN1TO2TO2TN4SO4QM2RN5QO6PP6MO7KO6HM6GL5JP6FO4AJ-=F'>H&DK*FM+EL*PV4PT3KN/HK,TT8bbFccIZZ@[Y@\ZA][B][B[Y@XV=US:SQ8HF1GD1DA0A?0@>1>>2??5>@5;>59?59?59A69A48C58C58C5:B79A69@88@58?79A69@8:B7:A9:B79@8:B7;B:<D9=D<>E=8B:8B:7A88@56>14</39/271.40/51-7/-9-.;)0@&6G'7M';V+:W+;U0;T4;R8=P:>O<>P::L6@R8EW=FY=DX=@T;5H2+<),6+,3++2*ZgM[hN\hP]iQbjSckTglXhkXghVghVifWifWkeWlfXmeZmgYmgYkhYkg[kg\jf]jf[hfZefVhiWglVfo\erajwnz˹ʿNjlRM0SN0QK+QK+UO/UO/TO1TO1SO2SO2QP4QP4QM2PO3PN5NQ6MO7JP6HM6EM5HQ6EN1BK.?I'BI(FM+JP,KQ-NR/PT1VZ7^bA_bCY\?TW<UU=VV>WU>XV=YW>XV=XW;WV:XT9QK3OI3LG4ID1DA2B@3A?3>@5<=59?59?59A67B48C57D37D3:B79A69A68@58@59A69A6:B7:B7:B7:B7:B7;C8<D9=E:<F;=G?<H><F;;F6<D5:B39?38=67>74>63=40>-3C)9M*BY/Ga1Op;Ln;Li=Fa>BY?<R=;L::K8=O9DV<K^BM`BL`DH\@:Q71D.+5*+2*)0(ZgM[hN\hP^jRbjSdlUglXilYijXijXkhYkhYlfXmgYnf[nhZmgYkhYkg[jf[jf]ieZhfZfgWhiWejTdmZgtco|s˸öƉjPK.QL.QK+QK+TN.UO/TO1UP2TP3SO2QP4PO3QM2ON2PN5MP5MO7JP6IN7FN6HQ6FO2CL/CM+FM,JQ/OU1SY5QY2W_8jpJy[qvVY^@KO4MP5QQ9QQ9RP9SQ8TR9UT8YU:ZV;XR:VP:RM:NI6HE6DB5CA5?A6<=59?5:@69A67B47B47D37D3:B7:B79A69A69A69A6:B7:B7:B7:B7:B7:B7;C8<D9>F;<F;?IA>J@?I>>I9?G8>F7>D8=B;>E>9C;6@74B19I/BV3Pg=XrB^J[}JXuIMhECZ@9O:6G54E2<N8EW=NaESfHSgKNbF@W=6I3/9./6.-4,ZgM[hN\hP^jRblTemVhmYinZklZklZlj[liZnhZnhZog\oi[liZkhYjfZjf[ie\ieZhfZfgWfgUbgQajWerao|s~Ҿ˸Ƴþ÷ǹɊmPJ0RM0SL/SM-TN.UO/UP2UP2TP3SO2PO3ON2PL1NM1OM4LO4LN6JP6JO8HP8JS8GP3GP3IS1MT3OV4V\8\d=grHtUislnuTZaBRV;LN6NN6MM5NL5OM6RP7WS:YU<ZT>XR<TO<QL9KH9GE8EC7@B7=>6:@6:@69A67B47B46C26C2;C8:B79A69A69A69A6:B7;C8;C8:B7:B7;C8;C8=E:>F;=G<=G?<H>>H=>I9?G8>F7>D8=B;=D=9C;6@74B19I/DX5Ri?[uEZ{FWyFTqEIdA=T:2H3/@.->+6H2@R8L_CReGSgKOcG@W=6I30:/07/-4,YgMZhN\hP^jRblTemVinZjo[mn\lm[mk\mj[nhZnhZoi]oi[liZkhYjfZieZie\ieZig[ghXghVchRajWerao|s{ѿɶıþʾŸ̌oRL2TO2TM0UN1TN.UO/VQ3VQ3UQ4SO2ON2NM1PL1NM1NL3KN3LN6KQ7KP9JR:LU:IR5JS6OY7SZ9T[9]c?fnGcszpr{\\bFLP7KM5LK6KI4LJ5PK5TN8VP:WQ;VP:SN;QL9LI:IG:GE9CE:=>6:@6:@69A67B47B46C26C2;C8;C8:B79A69A6:B7;C8;C8;C8;C8;C8;C8<D9=E:>F;=G<=G?<H>=G<=H8>F7=E6=C7=B;:A:7A95?64B19I/BV3Ne;Uo?Tu@RtAPmAE`=9P6-C.+<*+<)1C-<N4H[?PcERfJNbF@W=5H2,6++2*'.& \ No newline at end of file diff --git a/test/tiff-roundtrip.ok b/test/tiff-roundtrip.ok new file mode 100644 index 00000000..0e712ce7 --- /dev/null +++ b/test/tiff-roundtrip.ok @@ -0,0 +1,4 @@ +1926073387 101484 +1926073387 101484 +2425386270 41 +2425386270 41 diff --git a/test/tiff-roundtrip.test b/test/tiff-roundtrip.test new file mode 100755 index 00000000..e7f875cf --- /dev/null +++ b/test/tiff-roundtrip.test @@ -0,0 +1,20 @@ +#! /bin/bash +# This script tests: pamtotiff tifftopnm +# Also requires: + +${PBM_TESTPREFIX}pamtotiff testimg.ppm 1<>${tmpdir}/test1.tiff && + ${PBM_TESTPREFIX}tifftopnm ${tmpdir}/test1.tiff | cksum + +# test flate compression +# Will fail if Netpbm was built without the flate library +${PBM_TESTPREFIX}pamtotiff -flate testimg.ppm 1<>${tmpdir}/test2.tiff && + ${PBM_TESTPREFIX}tifftopnm ${tmpdir}/test2.tiff | cksum + +${PBM_TESTPREFIX}pamtotiff testgrid.pbm 1<>${tmpdir}/test3.tiff && + ${PBM_TESTPREFIX}tifftopnm ${tmpdir}/test3.tiff | cksum + +# test G4 compression +${PBM_TESTPREFIX}pamtotiff -g4 testgrid.pbm 1<>${tmpdir}/test4.tiff && + ${PBM_TESTPREFIX}tifftopnm ${tmpdir}/test4.tiff | cksum + +rm ${tmpdir}/test[1234].tiff diff --git a/test/xbm-roundtrip.ok b/test/xbm-roundtrip.ok new file mode 100644 index 00000000..a676a1f2 --- /dev/null +++ b/test/xbm-roundtrip.ok @@ -0,0 +1,2 @@ +2425386270 41 +2425386270 41 diff --git a/test/xbm-roundtrip.test b/test/xbm-roundtrip.test new file mode 100755 index 00000000..2dcb5a13 --- /dev/null +++ b/test/xbm-roundtrip.test @@ -0,0 +1,6 @@ +#! /bin/bash +# This script tests: pbmtoxbm xbmtopbm +# Also requires: + +${PBM_TESTPREFIX}pbmtoxbm testgrid.pbm | ${PBM_TESTPREFIX}xbmtopbm | cksum +${PBM_TESTPREFIX}pbmtoxbm -x10 testgrid.pbm | ${PBM_TESTPREFIX}xbmtopbm | cksum diff --git a/test/xpm-roundtrip.ok b/test/xpm-roundtrip.ok new file mode 100644 index 00000000..845be5fb --- /dev/null +++ b/test/xpm-roundtrip.ok @@ -0,0 +1 @@ +2425386270 41 diff --git a/test/xpm-roundtrip.test b/test/xpm-roundtrip.test new file mode 100755 index 00000000..310022cc --- /dev/null +++ b/test/xpm-roundtrip.test @@ -0,0 +1,8 @@ +#! /bin/bash +# This script tests: ppmtoxpm xpmtoppm +# Also requires: pgmtopbm ppmtopgm + +#${PBM_TESTPREFIX}ppmtoxpm -hexonly testimg.ppm | \ +# ${PBM_TESTPREFIX}xpmtoppm | cksum +${PBM_TESTPREFIX}ppmtoxpm testgrid.pbm | ${PBM_TESTPREFIX}xpmtoppm | \ + ${PBM_BINPREFIX}ppmtopgm | ${PBM_BINPREFIX}pgmtopbm -th -value=0.5 | cksum diff --git a/test/xwd-roundtrip.ok b/test/xwd-roundtrip.ok new file mode 100644 index 00000000..011ebd3a --- /dev/null +++ b/test/xwd-roundtrip.ok @@ -0,0 +1,3 @@ +2871603838 33838 +1926073387 101484 +2425386270 41 diff --git a/test/xwd-roundtrip.test b/test/xwd-roundtrip.test new file mode 100755 index 00000000..e24db7bc --- /dev/null +++ b/test/xwd-roundtrip.test @@ -0,0 +1,14 @@ +#! /bin/bash +# This script tests: pnmtoxwd xwdtopnm +# Also requires: pamdepth ppmtopgm + +# Test 1. Should produce 2871603838 33838 +# which is the output of ppmtopgm testimg.ppm | cksum +${PBM_BINPREFIX}ppmtopgm testimg.ppm | ${PBM_TESTPREFIX}pnmtoxwd | \ + ${PBM_TESTPREFIX}xwdtopnm | ${PBM_BINPREFIX}pamdepth 255 | cksum + +${PBM_TESTPREFIX}pnmtoxwd --quiet testimg.ppm | \ + ${PBM_TESTPREFIX}xwdtopnm --quiet | ${PBM_BINPREFIX}pamdepth 255 | cksum + +${PBM_TESTPREFIX}pnmtoxwd --quiet testgrid.pbm | \ + ${PBM_TESTPREFIX}xwdtopnm | cksum |