14887Schin######################################################################## 24887Schin# # 34887Schin# This software is part of the ast package # 4*12068SRoger.Faulkner@Oracle.COM# Copyright (c) 1982-2010 AT&T Intellectual Property # 54887Schin# and is licensed under the # 64887Schin# Common Public License, Version 1.0 # 78462SApril.Chin@Sun.COM# by AT&T Intellectual Property # 84887Schin# # 94887Schin# A copy of the License is available at # 104887Schin# http://www.opensource.org/licenses/cpl1.0.txt # 114887Schin# (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) # 124887Schin# # 134887Schin# Information and Software Systems Research # 144887Schin# AT&T Research # 154887Schin# Florham Park NJ # 164887Schin# # 174887Schin# David Korn <dgk@research.att.com> # 184887Schin# # 194887Schin######################################################################## 204887Schinfunction err_exit 214887Schin{ 224887Schin print -u2 -n "\t" 234887Schin print -u2 -r ${Command}[$1]: "${@:2}" 244887Schin let Errors+=1 254887Schin} 264887Schinalias err_exit='err_exit $LINENO' 274887Schin 284887Schininteger Errors=0 294887SchinCommand=${0##*/} 308462SApril.Chin@Sun.COM 3110898Sroland.mainz@nrubsig.orgulimit -c 0 3210898Sroland.mainz@nrubsig.org 3310898Sroland.mainz@nrubsig.orgtmp=$(mktemp -dt) || { err_exit mktemp -dt failed; exit 1; } 3410898Sroland.mainz@nrubsig.orgtrap "cd /; rm -rf $tmp" EXIT 358462SApril.Chin@Sun.COM 364887Schininteger foo=33 374887Schinbar=bye 384887Schin# check for global variables and $0 394887Schinfunction foobar 404887Schin{ 414887Schin case $1 in 424887Schin 1) print -r - "$foo" "$bar";; 434887Schin 2) print -r - "$0";; 444887Schin 3) typeset foo=foo 454887Schin integer bar=10 464887Schin print -r - "$foo" "$bar";; 474887Schin 4) trap 'foo=36' EXIT 484887Schin typeset foo=20;; 494887Schin esac 504887Schin} 514887Schinfunction print 524887Schin{ 534887Schin command print hi 544887Schin} 554887Schinif [[ $(print) != hi ]] 564887Schinthen err_exit "command print not working inside print function" 574887Schinfi 584887Schinunset -f print 594887Schin 604887Schinif [[ $(foobar 1) != '33 bye' ]] 614887Schinthen err_exit 'global variables not correct' 624887Schinfi 634887Schin 644887Schinif [[ $(foobar 2) != 'foobar' ]] 654887Schinthen err_exit '$0 not correct' 664887Schinfi 674887Schin 684887Schinif [[ $(bar=foo foobar 1) != '33 foo' ]] 694887Schinthen err_exit 'environment override not correct' 704887Schinfi 714887Schinif [[ $bar == foo ]] 724887Schinthen err_exit 'scoping error' 734887Schinfi 744887Schin 754887Schinif [[ $(foobar 3) != 'foo 10' ]] 764887Schinthen err_exit non-local variables 774887Schinfi 784887Schin 794887Schinfoobar 4 804887Schinif [[ $foo != 36 ]] 814887Schinthen err_exit EXIT trap in wrong scope 824887Schinfi 834887Schinunset -f foobar || err_exit "cannot unset function foobar" 844887Schintypeset -f foobar>/dev/null && err_exit "typeset -f has incorrect exit status" 854887Schin 864887Schinfunction foobar 874887Schin{ 884887Schin (return 0) 894887Schin} 9010898Sroland.mainz@nrubsig.org> $tmp/test1 914887Schin{ 924887Schinfoobar 9310898Sroland.mainz@nrubsig.orgif [ -r $tmp/test1 ] 9410898Sroland.mainz@nrubsig.orgthen rm -r $tmp/test1 954887Schinelse err_exit 'return within subshell inside function error' 964887Schinfi 974887Schin} 984887Schinabc() print hi 994887Schinif [[ $(abc) != hi ]] 1004887Schinthen err_exit 'abc() print hi not working' 1014887Schinfi 1024887Schin( unset -f abc ) 1034887Schinif [[ $(abc 2>/dev/null) != hi ]] 1044887Schinthen err_exit 'abc() print hi not working after subshell unset' 1054887Schinfi 1064887Schin( 1074887Schin function f 1084887Schin { 1094887Schin exit 1 1104887Schin } 1114887Schin f 1124887Schin err_exit 'exit from function not working' 1134887Schin) 1144887Schinunset -f foo 1154887Schinfunction foo 1164887Schin{ 1174887Schin x=2 1184887Schin ( 1194887Schin x=3 1208462SApril.Chin@Sun.COM cd $tmp 1214887Schin print bar 1224887Schin ) 1234887Schin if [[ $x != 2 ]] 1244887Schin then err_exit 'value of x not restored after subshell inside function' 1254887Schin fi 1264887Schin} 1274887Schinx=1 1284887Schindir=$PWD 1294887Schinif [[ $(foo) != bar ]] 1304887Schinthen err_exit 'cd inside nested subshell not working' 1314887Schinfi 1324887Schinif [[ $PWD != "$dir" ]] 1334887Schinthen err_exit 'cd inside nested subshell changes $PWD' 1344887Schinfi 1354887Schinfun() /bin/echo hello 1364887Schinif [[ $(fun) != hello ]] 1374887Schinthen err_exit one line functions not working 1384887Schinfi 13910898Sroland.mainz@nrubsig.orgcat > $tmp/script <<-\! 1404887Schin print -r -- "$1" 1414887Schin! 14210898Sroland.mainz@nrubsig.orgchmod +x $tmp/script 1434887Schinfunction passargs 1444887Schin{ 14510898Sroland.mainz@nrubsig.org $tmp/script "$@" 1464887Schin} 1474887Schinif [[ $(passargs one) != one ]] 1484887Schinthen err_exit 'passing args from functions to scripts not working' 1494887Schinfi 15010898Sroland.mainz@nrubsig.orgcat > $tmp/script <<-\! 1514887Schin trap 'exit 0' EXIT 1524887Schin function foo 1534887Schin { 15410898Sroland.mainz@nrubsig.org /tmp > /dev/null 2>&1 1554887Schin } 1564887Schin foo 1574887Schin! 15810898Sroland.mainz@nrubsig.orgif ! $tmp/script 15910898Sroland.mainz@nrubsig.orgthen err_exit 'exit trap incorrectly triggered' 1604887Schinfi 16110898Sroland.mainz@nrubsig.orgif ! $SHELL -c $tmp/script 16210898Sroland.mainz@nrubsig.orgthen err_exit 'exit trap incorrectly triggered when invoked with -c' 1634887Schinfi 16410898Sroland.mainz@nrubsig.org$SHELL -c "trap 'rm $tmp/script' EXIT" 16510898Sroland.mainz@nrubsig.orgif [[ -f $tmp/script ]] 16610898Sroland.mainz@nrubsig.orgthen err_exit 'exit trap not triggered when invoked with -c' 1674887Schinfi 16810898Sroland.mainz@nrubsig.orgcat > $tmp/script <<- \EOF 1694887Schin foobar() 1704887Schin { 1714887Schin return 1724887Schin } 1734887Schin shift 1744887Schin foobar 1754887Schin print -r -- "$1" 1764887SchinEOF 17710898Sroland.mainz@nrubsig.orgchmod +x $tmp/script 17810898Sroland.mainz@nrubsig.orgif [[ $( $SHELL $tmp/script arg1 arg2) != arg2 ]] 1794887Schinthen err_exit 'arguments not restored by posix functions' 1804887Schinfi 1814887Schinfunction foo 1824887Schin{ 1834887Schin print hello 1844887Schin} 1854887Schin( 1864887Schin function foo 1874887Schin { 1884887Schin print bar 1894887Schin } 1904887Schin if [[ $(foo) != bar ]] 1914887Schin then err_exit 'function definitions inside subshells not working' 1924887Schin fi 1934887Schin) 1944887Schinif [[ $(foo) != hello ]] 1954887Schinthen err_exit 'function definitions inside subshells not restored' 1964887Schinfi 1974887Schinunset -f foo bar 1984887Schinfunction bar 1994887Schin{ 2004887Schin print "$y" 2014887Schin} 2024887Schin 2034887Schinfunction foo 2044887Schin{ 2054887Schin typeset x=3 2064887Schin y=$x bar 2074887Schin} 2084887Schinx=1 2094887Schinif [[ $(foo) != 3 ]] 2104887Schinthen err_exit 'variable assignment list not using parent scope' 2114887Schinfi 21210898Sroland.mainz@nrubsig.orgunset -f foobar 21310898Sroland.mainz@nrubsig.orgcat > $tmp/foobar <<! 21410898Sroland.mainz@nrubsig.orgfunction foobar 2154887Schin{ 2164887Schin print foo 2174887Schin} 2184887Schin! 21910898Sroland.mainz@nrubsig.orgchmod +x $tmp/foobar 2208462SApril.Chin@Sun.COMFPATH=$tmp 22110898Sroland.mainz@nrubsig.orgautoload foobar 22210898Sroland.mainz@nrubsig.orgif [[ $(foobar 2>/dev/null) != foo ]] 2234887Schinthen err_exit 'autoload not working' 2244887Schinfi 2254887Schinunset -f foobar 2264887Schinfunction foobar 2274887Schin{ 2284887Schin typeset -r x=3 2294887Schin return 0 2304887Schin} 2314887Schin( foobar ) 2> /dev/null || err_exit "cannot unset readonly variable in function" 23210898Sroland.mainz@nrubsig.orgif $SHELL -n 2> /dev/null <<-! 2334887Schin abc() 2344887Schin ! 2354887Schinthen err_exit 'abc() without a function body is not a syntax error' 2364887Schinfi 2374887Schinfunction winpath 2384887Schin{ 23910898Sroland.mainz@nrubsig.org usage='q pathname ...' 2404887Schin typeset var format=s 2414887Schin while getopts "$usage" var 2424887Schin do case $var in 2434887Schin q) format=q;; 2444887Schin esac 2454887Schin done 2464887Schin print done 2474887Schin} 2484887Schinif [[ $( (winpath --man 2>/dev/null); print ok) != ok ]] 2494887Schinthen err_exit 'getopts --man in functions not working' 2504887Schinfi 2514887Schinif [[ $( (winpath -z 2>/dev/null); print ok) != ok ]] 2524887Schinthen err_exit 'getopts with bad option in functions not working' 2534887Schinfi 2544887Schinunset -f x 2554887Schinfunction x 2564887Schin{ 2574887Schin print "$@" 2584887Schin} 2594887Schintypeset -ft x 2604887Schinif [[ $(x x=y 2>/dev/null) != x=y ]] 2614887Schinthen err_exit 'name=value pair args not passed to traced functions' 2624887Schinfi 2634887Schinfunction bad 2644887Schin{ 2654887Schin false 2664887Schin} 2674887Schintrap 'val=false' ERR 2684887Schinval=true 2694887Schinbad 2704887Schinif [[ $val != false ]] 2714887Schinthen err_exit 'set -e not working for functions' 2724887Schinfi 2734887Schinfunction bad 2744887Schin{ 2754887Schin false 2764887Schin return 0 2774887Schin} 2784887Schinval=true 2794887Schinbad 2804887Schinif [[ $val != true ]] 2814887Schinthen err_exit 'set -e not disabled for functions' 2824887Schinfi 2834887Schinbad() 2844887Schin{ 2854887Schin false 2864887Schin return 0 2874887Schin} 2884887Schinval=true 2894887Schinbad 2904887Schinif [[ $val != false ]] 2914887Schinthen err_exit 'set -e not inherited for posix functions' 2924887Schinfi 2938462SApril.Chin@Sun.COMtrap - ERR 2948462SApril.Chin@Sun.COM 29510898Sroland.mainz@nrubsig.orgfunction myexport 2964887Schin{ 2974887Schin nameref var=$1 2984887Schin if (( $# > 1 )) 2994887Schin then export $1=$2 3004887Schin fi 3014887Schin if (( $# > 2 )) 3024887Schin then print $(myexport "$1" "$3" ) 3034887Schin return 3044887Schin fi 3054887Schin typeset val 3064887Schin val=$(export | grep "^$1=") 3074887Schin print ${val#"$1="} 3084887Schin} 3094887Schinexport dgk=base 3108462SApril.Chin@Sun.COMval=$(myexport dgk fun) 3118462SApril.Chin@Sun.COMif [[ $val != fun ]] 3128462SApril.Chin@Sun.COMthen err_exit "export inside function not working -- expected 'fun', got '$val'" 3134887Schinfi 3148462SApril.Chin@Sun.COMval=$(export | sed -e '/^dgk=/!d' -e 's/^dgk=//') 3158462SApril.Chin@Sun.COMif [[ $val != base ]] 3168462SApril.Chin@Sun.COMthen err_exit "export not restored after function call -- expected 'base', got '$val'" 3174887Schinfi 3188462SApril.Chin@Sun.COMval=$(myexport dgk fun fun2) 3198462SApril.Chin@Sun.COMif [[ $val != fun2 ]] 3208462SApril.Chin@Sun.COMthen err_exit "export inside function not working with recursive function -- expected 'fun2', got '$val'" 3214887Schinfi 3228462SApril.Chin@Sun.COMval=$(export | sed -e '/^dgk=/!d' -e 's/^dgk=//') 3238462SApril.Chin@Sun.COMif [[ $val != base ]] 3248462SApril.Chin@Sun.COMthen err_exit "export not restored after recursive function call -- expected 'base', got '$val'" 3254887Schinfi 3268462SApril.Chin@Sun.COMval=$(dgk=try3 myexport dgk) 3278462SApril.Chin@Sun.COMif [[ $val != try3 ]] 3288462SApril.Chin@Sun.COMthen err_exit "name=value not added to export list with function call -- expected 'try3', got '$val'" 3294887Schinfi 3308462SApril.Chin@Sun.COMval=$(export | sed -e '/^dgk=/!d' -e 's/^dgk=//') 3318462SApril.Chin@Sun.COMif [[ $val != base ]] 3328462SApril.Chin@Sun.COMthen err_exit "export not restored name=value function call -- expected 'base', got '$val'" 3334887Schinfi 3344887Schinunset zzz 3358462SApril.Chin@Sun.COMval=$(myexport zzz fun) 3368462SApril.Chin@Sun.COMif [[ $val != fun ]] 3378462SApril.Chin@Sun.COMthen err_exit "export inside function not working -- expected 'fun', got '$val'" 3384887Schinfi 3398462SApril.Chin@Sun.COMval=$(export | sed -e '/^zzz=/!d' -e 's/^zzz=//') 3408462SApril.Chin@Sun.COMif [[ $val ]] 3418462SApril.Chin@Sun.COMthen err_exit "unset varaible exported after function call -- expected '', got '$val'" 3424887Schinfi 3438462SApril.Chin@Sun.COM 3444887Schinunset zzz 3454887Schintypeset -u zzz 3464887Schinfunction foo 3474887Schin{ 3484887Schin zzz=abc 3494887Schin print $zzz 3504887Schin} 3514887Schinif [[ $(foo)$(foo) != ABCABC ]] 3524887Schinthen err_exit 'attributes on unset variables not saved/restored' 3534887Schinfi 3544887Schinfunction xpd { 3554887Schin typeset i j=$1 3564887Schin for i 3574887Schin do print i=$i j=$j 3584887Schin [[ $i == a ]] && xpd b 3594887Schin done 3604887Schin } 3614887Schinif [[ $(xpd a c) != $'i=a j=a\ni=b j=b\ni=c j=a' ]] 3624887Schinthen err_exit 'for loop function optimization error' 3634887Schinfi 3644887Schin 3654887Schintypeset -A visited 3664887Schininteger level=0 3674887Schinfunction closure 3684887Schin{ 3694887Schin (( $# > 5 )) && return 1 3704887Schin ((level < 2)) && ((level++)) 3714887Schin typeset tmp r=0 3724887Schin visited[$1]=1 3734887Schin 3744887Schin for tmp in $level _$level 3754887Schin do 3764887Schin [[ ${visited[$tmp]} == 1 ]] && continue 3774887Schin closure $tmp $* || r=1 3784887Schin done 3794887Schin return $r 3804887Schin} 3814887Schinclosure 0 || err_exit -u2 'for loop function optimization bug2' 38210898Sroland.mainz@nrubsig.orgdir=$tmp/dir 38310898Sroland.mainz@nrubsig.orgmkdir $dir 38410898Sroland.mainz@nrubsig.orgcd $dir || { err_exit "cd $dir failed"; exit 1; } 38510898Sroland.mainz@nrubsig.org 38610898Sroland.mainz@nrubsig.org( 38710898Sroland.mainz@nrubsig.org function a { 38810898Sroland.mainz@nrubsig.org print a 38910898Sroland.mainz@nrubsig.org } 39010898Sroland.mainz@nrubsig.org function b { 39110898Sroland.mainz@nrubsig.org print 1 39210898Sroland.mainz@nrubsig.org a 39310898Sroland.mainz@nrubsig.org print 2 39410898Sroland.mainz@nrubsig.org } > /dev/null 39510898Sroland.mainz@nrubsig.org typeset -ft a b 39610898Sroland.mainz@nrubsig.org PS4=X 39710898Sroland.mainz@nrubsig.org b 39810898Sroland.mainz@nrubsig.org) > file 2>&1 39910898Sroland.mainz@nrubsig.org[[ $(<file) == *'Xprint 2'* ]] || err_exit 'function trace disabled by function call' 40010898Sroland.mainz@nrubsig.orgrm -f file 40110898Sroland.mainz@nrubsig.org 4024887Schinprint 'false' > try 4034887Schinchmod +x try 4044887Schincat > tst <<- EOF 4054887Schin function ignore 4064887Schin { 4074887Schin ./try 4084887Schin return 0 4094887Schin } 4104887Schin trap "print error; exit 1" ERR 4114887Schin ignore 4124887SchinEOF 4134887Schinif [[ $($SHELL < tst) == error ]] 4144887Schinthen err_exit 'ERR trap not cleared' 4154887Schinfi 41610898Sroland.mainz@nrubsig.orgFPATH=$dir 41710898Sroland.mainz@nrubsig.orgprint ': This does nothing' > foobar 41810898Sroland.mainz@nrubsig.orgchmod +x foobar 41910898Sroland.mainz@nrubsig.orgunset -f foobar 42010898Sroland.mainz@nrubsig.org{ foobar; } 2>/dev/null 42110898Sroland.mainz@nrubsig.orggot=$? 42210898Sroland.mainz@nrubsig.orgexp=126 42310898Sroland.mainz@nrubsig.orgif [[ $got != $exp ]] 42410898Sroland.mainz@nrubsig.orgthen err_exit "function file without function definition processes wrong error -- expected '$exp', got '$got'" 4254887Schinfi 42610898Sroland.mainz@nrubsig.orgprint 'set a b c' > dotscript 4274887Schin[[ $(PATH=$PATH: $SHELL -c '. dotscript;print $#') == 3 ]] || err_exit 'positional parameters not preserved with . script without arguments' 4284887Schincd ~- || err_exit "cd back failed" 4294887Schinfunction errcheck 4304887Schin{ 4314887Schin trap 'print ERR; return 1' ERR 4324887Schin false 4334887Schin print ok 4344887Schin} 4354887Schinerr=$(errcheck) 4364887Schin[[ $err == ERR ]] || err_exit 'trap on ERR not working in a function' 4374887Schinx="$( 4384887Schin function foobar 4394887Schin { 4404887Schin print ok 4414887Schin } 4424887Schin typeset -f foobar 4434887Schin)" 4444887Schineval "$x" || err_exit 'typeset -f generates syntax error' 4454887Schin[[ $(foobar) != ok ]] && err_exit 'typeset -f not generating function' 4464887Schinunset -f a b c 4474887Schina() 4484887Schin{ 4494887Schin b 4504887Schin b 4514887Schin print ${.sh.fun} 4524887Schin} 4534887Schinb() { : ;} 4544887Schin[[ $(a) == a ]] || err_exit '.sh.fun not set correctly in a function' 4554887Schinprint $'a(){\ndate\n}' | $SHELL 2> /dev/null || err_exit 'parser error in a(){;date;}' 45610898Sroland.mainz@nrubsig.orgcat > $tmp/data1 << '++EOF' 4574887Schin 1 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4584887Schin 2 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4594887Schin 3 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4604887Schin 4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4614887Schin 5 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4624887Schin 6 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4634887Schin 7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4644887Schin 8 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4654887Schin 9 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4664887Schin 10 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4674887Schin 11 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4684887Schin 12 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4694887Schin 13 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4704887Schin 14 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4714887Schin 15 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4724887Schin 16 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4734887Schin 17 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4744887Schin 18 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4754887Schin 19 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4764887Schin 20 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4774887Schin++EOF 47810898Sroland.mainz@nrubsig.orgcat > $tmp/script << '++EOF' 4794887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4804887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4814887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4824887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4834887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4844887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4854887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4864887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4874887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4884887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4894887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4904887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4914887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4924887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4934887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4944887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4954887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4964887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4974887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4984887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4994887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5004887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5014887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5024887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5034887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5044887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5054887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5064887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5074887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5084887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5094887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5104887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5114887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5124887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5134887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5144887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5154887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5164887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5174887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5184887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5194887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5204887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5214887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5224887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5234887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5244887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5254887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5264887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5274887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5284887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5294887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5304887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5314887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5324887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5334887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5344887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5354887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5364887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5374887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5384887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5394887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5404887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5414887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5424887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5434887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5444887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5454887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5464887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5474887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5484887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5494887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5504887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5514887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5524887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5534887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5544887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5554887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5564887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5574887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5584887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5594887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5604887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5614887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5624887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5634887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5644887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5654887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5664887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5674887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5684887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5694887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5704887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5714887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5724887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5734887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5744887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5754887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5764887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5774887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5784887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5794887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5804887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5814887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5824887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5834887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5844887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5854887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5864887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5874887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5884887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5894887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5904887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5914887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5924887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5934887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5944887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5954887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5964887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5974887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5984887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5994887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6004887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6014887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6024887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6034887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6044887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6054887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6064887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6074887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6084887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6094887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6104887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6114887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6124887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6134887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6144887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6154887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6164887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6174887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6184887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6194887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6204887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6214887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6224887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6234887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6244887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6254887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6264887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6274887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6284887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6294887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6304887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6314887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6324887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6334887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6344887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6354887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6364887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6374887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6384887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6394887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6404887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6414887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6424887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6434887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6444887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6454887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6464887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6474887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6484887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6494887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6504887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6514887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6524887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6534887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6544887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6554887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6564887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6574887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6584887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6594887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6604887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6614887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6624887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6634887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6644887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6654887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6664887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6674887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6684887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6694887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6704887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6714887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6724887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6734887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6744887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6754887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6764887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6774887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6784887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6794887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6804887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6814887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6824887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6834887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6844887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6854887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6864887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6874887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6884887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6894887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6904887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6914887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6924887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6934887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6944887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6954887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6964887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6974887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6984887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 6994887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7004887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7014887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7024887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7034887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7044887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7054887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7064887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7074887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7084887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7094887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7104887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7114887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7124887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7134887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7144887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7154887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7164887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7174887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7184887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7194887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7204887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7214887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7224887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7234887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7244887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7254887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7264887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7274887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7284887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7294887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7304887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7314887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7324887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7334887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7344887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7354887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7364887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7374887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7384887Schin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7394887Schin 7404887Schinf() 7414887Schin{ 7424887Schincat <<\M 7434887Schin++EOF 74410898Sroland.mainz@nrubsig.orgcat $tmp/data1 >> $tmp/script 74510898Sroland.mainz@nrubsig.orgprintf 'M\n}\n\nf\n\n' >> $tmp/script 74610898Sroland.mainz@nrubsig.org$SHELL -c $tmp/script > $tmp/data2 74710898Sroland.mainz@nrubsig.orgcmp -s $tmp/data[12] || err_exit 'error with long functions' 7484887Schinv=1 7494887Schinfunction f 7504887Schin{ 7514887Schin typeset i 7524887Schin for i in 0 1 7534887Schin do typeset v 7544887Schin v=$i 7554887Schin [[ $v == $i ]] || return 1 7564887Schin done 7574887Schin} 7584887Schinf || err_exit "typeset optimization bug" 7594887Schinfunction f 7604887Schin{ 7614887Schin print -r -- "$foo$bar" 7624887Schin} 7634887Schinfunction g 7644887Schin{ 7654887Schin print -r -- $(bar=bam f) 7664887Schin} 7674887Schinunset foo bar 7684887Schin[[ $(foo=hello g) == hellobam ]] || err_exit 'function exports not passed on' 7694887Schin[[ $(bar=hello g) == bam ]] || err_exit 'function exports not overridden' 7704887Schinunset -f foo 7714887Schinfunction foo 7724887Schin{ 7734887Schin typeset line=$1 7744887Schin set +n 7754887Schin while [[ $line ]] 7764887Schin do if [[ ! $varname ]] 7774887Schin then varname=${line%% *} 7784887Schin line=${line##"$varname"?( )} 7794887Schin [[ $line ]] && continue 7804887Schin else print ok 7814887Schin return 7824887Schin fi 7834887Schin varname= 7844887Schin done 7854887Schin} 7864887Schin[[ $(foo 'NUMBERED RECORDSIZE') == ok ]] || err_exit 'optimization error with undefined variable' 7878462SApril.Chin@Sun.COMunset x 7888462SApril.Chin@Sun.COMx=$( 7898462SApril.Chin@Sun.COM set -e 7908462SApril.Chin@Sun.COM integer count=0 7918462SApril.Chin@Sun.COM function err_f 7928462SApril.Chin@Sun.COM { 79310898Sroland.mainz@nrubsig.org if ((count++==3)) 7948462SApril.Chin@Sun.COM then print failed 7958462SApril.Chin@Sun.COM else false 7968462SApril.Chin@Sun.COM fi 7978462SApril.Chin@Sun.COM } 7988462SApril.Chin@Sun.COM trap 'err_f' ERR 7998462SApril.Chin@Sun.COM false 8008462SApril.Chin@Sun.COM) 8018462SApril.Chin@Sun.COM[[ $x == failed ]] && err_exit 'ERR trap executed multiple times' 8028462SApril.Chin@Sun.COMexport environment 8038462SApril.Chin@Sun.COMtypeset global 8048462SApril.Chin@Sun.COMfunction f 8058462SApril.Chin@Sun.COM{ 8068462SApril.Chin@Sun.COM typeset i t local 8078462SApril.Chin@Sun.COM 8088462SApril.Chin@Sun.COM for i 8098462SApril.Chin@Sun.COM do case $i in 8108462SApril.Chin@Sun.COM [-+]*) set "$@" 8118462SApril.Chin@Sun.COM continue 8128462SApril.Chin@Sun.COM ;; 8138462SApril.Chin@Sun.COM local) local=f 8148462SApril.Chin@Sun.COM t=$(typeset +f $local) 8158462SApril.Chin@Sun.COM ;; 8168462SApril.Chin@Sun.COM global) global=f 8178462SApril.Chin@Sun.COM t=$(typeset +f $global) 8188462SApril.Chin@Sun.COM ;; 8198462SApril.Chin@Sun.COM environment) 8208462SApril.Chin@Sun.COM environment=f 8218462SApril.Chin@Sun.COM t=$(typeset +f $environment) 8228462SApril.Chin@Sun.COM ;; 8238462SApril.Chin@Sun.COM literal)t=$(typeset +f f) 8248462SApril.Chin@Sun.COM ;; 8258462SApril.Chin@Sun.COM positional) 8268462SApril.Chin@Sun.COM set -- f 8278462SApril.Chin@Sun.COM t=$(typeset +f $1) 8288462SApril.Chin@Sun.COM ;; 8298462SApril.Chin@Sun.COM esac 8308462SApril.Chin@Sun.COM [[ $t ]] || err_exit "typeset +f \$$i failed" 8318462SApril.Chin@Sun.COM done 8328462SApril.Chin@Sun.COM} 8338462SApril.Chin@Sun.COMf local global environment literal positional 8348462SApril.Chin@Sun.COM$SHELL -c ' 83510898Sroland.mainz@nrubsig.org print exit 0 > '$tmp'/script 83610898Sroland.mainz@nrubsig.org chmod +x '$tmp'/script 8378462SApril.Chin@Sun.COM unset var 8388462SApril.Chin@Sun.COM var=( ident=1 ) 8398462SApril.Chin@Sun.COM function fun 8408462SApril.Chin@Sun.COM { 84110898Sroland.mainz@nrubsig.org PATH='$tmp' script 8428462SApril.Chin@Sun.COM } 8438462SApril.Chin@Sun.COM fun 8448462SApril.Chin@Sun.COM' || err_exit "compound variable cleanup before script exec failed" 84510898Sroland.mainz@nrubsig.org( $SHELL << \++EOF++ 8468462SApril.Chin@Sun.COMfunction main 8478462SApril.Chin@Sun.COM{ 8488462SApril.Chin@Sun.COM typeset key 8498462SApril.Chin@Sun.COM typeset -A entry 8508462SApril.Chin@Sun.COM entry[a]=( value=aaa ) 8518462SApril.Chin@Sun.COM} 8528462SApril.Chin@Sun.COMmain 8538462SApril.Chin@Sun.COM++EOF++ 8548462SApril.Chin@Sun.COM) 2> /dev/null || err_exit 'function main fails' 8558462SApril.Chin@Sun.COMoptind=$OPTIND 8568462SApril.Chin@Sun.COMsub() 8578462SApril.Chin@Sun.COM{ 8588462SApril.Chin@Sun.COM ( 8598462SApril.Chin@Sun.COM OPTIND=1 8608462SApril.Chin@Sun.COM while getopts :abc OPTION "$@" 8618462SApril.Chin@Sun.COM do print OPTIND=$OPTIND 8628462SApril.Chin@Sun.COM done 8638462SApril.Chin@Sun.COM ) 8648462SApril.Chin@Sun.COM} 8658462SApril.Chin@Sun.COM[[ $(sub -a) == OPTIND=2 ]] || err_exit 'OPTIND should be 2' 8668462SApril.Chin@Sun.COM[[ $(sub -a) == OPTIND=2 ]] || err_exit 'OPTIND should be 2 again' 8678462SApril.Chin@Sun.COM[[ $OPTIND == "$optind" ]] || err_exit 'OPTIND should be 1' 8688462SApril.Chin@Sun.COM 8698462SApril.Chin@Sun.COMfunction bar 8708462SApril.Chin@Sun.COM{ 8718462SApril.Chin@Sun.COM [[ -o nounset ]] && err_exit 'nounset option should not be inherited' 8728462SApril.Chin@Sun.COM} 8738462SApril.Chin@Sun.COMfunction foo 8748462SApril.Chin@Sun.COM{ 8758462SApril.Chin@Sun.COM set -o nounset 8768462SApril.Chin@Sun.COM bar 8778462SApril.Chin@Sun.COM} 8788462SApril.Chin@Sun.COMset +o nounset 8798462SApril.Chin@Sun.COMfoo 8808462SApril.Chin@Sun.COMfunction red 8818462SApril.Chin@Sun.COM{ 8828462SApril.Chin@Sun.COM integer -S d=0 8838462SApril.Chin@Sun.COM printf 'red_one %d\n' d 8848462SApril.Chin@Sun.COM (( d++ )) 8858462SApril.Chin@Sun.COM return 0 8868462SApril.Chin@Sun.COM} 8878462SApril.Chin@Sun.COM[[ ${ red } != 'red_one 0' ]] && err_exit 'expected red_one 0' 8888462SApril.Chin@Sun.COM[[ ${ red } != 'red_one 1' ]] && err_exit 'expected red_one 1' 8898462SApril.Chin@Sun.COMxyz=$0 8908462SApril.Chin@Sun.COMfunction traceback 8918462SApril.Chin@Sun.COM{ 8928462SApril.Chin@Sun.COM integer .level=.sh.level 8938462SApril.Chin@Sun.COM while((--.level>=0)) 8948462SApril.Chin@Sun.COM do 8958462SApril.Chin@Sun.COM ((.sh.level = .level)) 8968462SApril.Chin@Sun.COM [[ $xyz == "$0" ]] || err_exit "\$xyz=$xyz does not match $0 on level ${.level}" 8978462SApril.Chin@Sun.COM [[ ${.sh.lineno} == "$1" ]] || err_exit "\${.sh.lineno}=${.sh.lineno} does not match $1 on level ${.level}" 8988462SApril.Chin@Sun.COM done 8998462SApril.Chin@Sun.COM} 9008462SApril.Chin@Sun.COM 9018462SApril.Chin@Sun.COMfunction foo 9028462SApril.Chin@Sun.COM{ 9038462SApril.Chin@Sun.COM typeset xyz=foo 9048462SApril.Chin@Sun.COM set -- $((LINENO+1)) 9058462SApril.Chin@Sun.COM bar $LINENO "$1" 9068462SApril.Chin@Sun.COM} 9078462SApril.Chin@Sun.COM 9088462SApril.Chin@Sun.COMfunction bar 9098462SApril.Chin@Sun.COM{ 9108462SApril.Chin@Sun.COM typeset xyz=bar 9118462SApril.Chin@Sun.COM set -- $((LINENO+2)) 9128462SApril.Chin@Sun.COM trap 'traceback $LINENO' DEBUG 9138462SApril.Chin@Sun.COM : $LINENO "$1" 9148462SApril.Chin@Sun.COM} 9158462SApril.Chin@Sun.COM 9168462SApril.Chin@Sun.COMset -- $((LINENO+1)) 9178462SApril.Chin@Sun.COMfoo $LINENO 9188462SApril.Chin@Sun.COMfunction .sh.fun.set 9198462SApril.Chin@Sun.COM{ 9208462SApril.Chin@Sun.COM print -r -- "${.sh.value}" 9218462SApril.Chin@Sun.COM} 9228462SApril.Chin@Sun.COMfunction abc 9238462SApril.Chin@Sun.COM{ 9248462SApril.Chin@Sun.COM : 9258462SApril.Chin@Sun.COM} 9268462SApril.Chin@Sun.COMdef() 9278462SApril.Chin@Sun.COM{ 9288462SApril.Chin@Sun.COM : 9298462SApril.Chin@Sun.COM} 9308462SApril.Chin@Sun.COM[[ $(abc) == abc ]] || err_exit '.sh.fun.set not capturing function name' 9318462SApril.Chin@Sun.COM[[ $(def) == def ]] || err_exit '.sh.fun.set not capturing name()' 9328462SApril.Chin@Sun.COMunset -f .sh.fun.set 9338462SApril.Chin@Sun.COM 9348462SApril.Chin@Sun.COM# tests for debug functions 9358462SApril.Chin@Sun.COMbasefile=${.sh.file} 9368462SApril.Chin@Sun.COMinteger baseline 93710898Sroland.mainz@nrubsig.orgcat > $tmp/debug << \+++ 9388462SApril.Chin@Sun.COM : line 1 9398462SApril.Chin@Sun.COM 9408462SApril.Chin@Sun.COM : line 3 9418462SApril.Chin@Sun.COM+++ 9428462SApril.Chin@Sun.COM# Print one line in a call stack 9438462SApril.Chin@Sun.COMfunction _Dbg_print_frame 9448462SApril.Chin@Sun.COM{ 9458462SApril.Chin@Sun.COM typeset -i pos=$1 9468462SApril.Chin@Sun.COM typeset fn=$2 9478462SApril.Chin@Sun.COM typeset filename="$3" 9488462SApril.Chin@Sun.COM typeset -i line=$4 9498462SApril.Chin@Sun.COM typeset arg=$5 9508462SApril.Chin@Sun.COM shift 5 9518462SApril.Chin@Sun.COM if ((pos==0)) 9528462SApril.Chin@Sun.COM then [[ $filename == "$basefile" ]] || err_exit "filename for level 0 is $filename not $basename" 9538462SApril.Chin@Sun.COM [[ $arg == DEBUG ]] && ((baseline++)) 9548462SApril.Chin@Sun.COM [[ $line == "$baseline" ]] || err_exit "line number for level 0 is $line not $baseline" 9558462SApril.Chin@Sun.COM elif ((pos==1)) 95610898Sroland.mainz@nrubsig.org then [[ $filename == "$tmp/debug" ]] || err_exit "filename for level 1 is $filename not $tmp/debug" 9578462SApril.Chin@Sun.COM [[ $* == 'foo bar' ]] || err_exit "args are '$*', not 'foo bar'" 9588462SApril.Chin@Sun.COM [[ $line == $arg ]] || err_exit "line number for level 1 is $line not $arg" 9598462SApril.Chin@Sun.COM else err_exit "level should be 0 or 1 but is $pos" 9608462SApril.Chin@Sun.COM fi 9618462SApril.Chin@Sun.COM} 9628462SApril.Chin@Sun.COM 9638462SApril.Chin@Sun.COMfunction _Dbg_debug_trap_handler 9648462SApril.Chin@Sun.COM{ 9658462SApril.Chin@Sun.COM 9668462SApril.Chin@Sun.COM integer .level=.sh.level .max=.sh.level-1 9678462SApril.Chin@Sun.COM while((--.level>=0)) 9688462SApril.Chin@Sun.COM do 9698462SApril.Chin@Sun.COM ((.sh.level = .level)) 9708462SApril.Chin@Sun.COM _Dbg_print_frame "${.level}" "$0" "${.sh.file}" "${.sh.lineno}" "${.sh.command##* }" "$@" 9718462SApril.Chin@Sun.COM done 9728462SApril.Chin@Sun.COM} 9738462SApril.Chin@Sun.COM 9748462SApril.Chin@Sun.COM((baseline=LINENO+2)) 9758462SApril.Chin@Sun.COMtrap '_Dbg_debug_trap_handler' DEBUG 97610898Sroland.mainz@nrubsig.org. $tmp/debug foo bar 9778462SApril.Chin@Sun.COMtrap '' DEBUG 97810898Sroland.mainz@nrubsig.org 9798462SApril.Chin@Sun.COMcaller() { 9808462SApril.Chin@Sun.COM integer .level=.sh.level .max=.sh.level-1 9818462SApril.Chin@Sun.COM while((--.level>=0)) 9828462SApril.Chin@Sun.COM do 9838462SApril.Chin@Sun.COM ((.sh.level = .level)) 9848462SApril.Chin@Sun.COM print -r -- "${.sh.lineno}" 9858462SApril.Chin@Sun.COM done 9868462SApril.Chin@Sun.COM} 9878462SApril.Chin@Sun.COMbar() { caller;} 9888462SApril.Chin@Sun.COMset -- $(bar) 9898462SApril.Chin@Sun.COM[[ $1 == $2 ]] && err_exit ".sh.inline optimization bug" 9908462SApril.Chin@Sun.COM( $SHELL -c ' function foo { typeset x=$1;print $1;};z=();z=($(foo bar)) ') 2> /dev/null || err_exit 'using a function to set an array in a command sub fails' 99110898Sroland.mainz@nrubsig.org 99210898Sroland.mainz@nrubsig.org{ 99310898Sroland.mainz@nrubsig.orggot=$( 99410898Sroland.mainz@nrubsig.orgs=$(ulimit -s) 99510898Sroland.mainz@nrubsig.orgif [[ $s == +([[:digit:]]) ]] && (( s < 16384 )) 99610898Sroland.mainz@nrubsig.orgthen ulimit -s 16384 2>/dev/null 99710898Sroland.mainz@nrubsig.orgfi 99810898Sroland.mainz@nrubsig.org$SHELL << \+++ 99910898Sroland.mainz@nrubsig.orgf() 100010898Sroland.mainz@nrubsig.org{ 100110898Sroland.mainz@nrubsig.org if (($1>1)) 100210898Sroland.mainz@nrubsig.org then x=$(f $(($1-1))) || exit 1 100310898Sroland.mainz@nrubsig.org fi 100410898Sroland.mainz@nrubsig.org return 0 100510898Sroland.mainz@nrubsig.org} 100610898Sroland.mainz@nrubsig.orgf 257 && print ok 100710898Sroland.mainz@nrubsig.org+++ 100810898Sroland.mainz@nrubsig.org) 100910898Sroland.mainz@nrubsig.org} 2>/dev/null 101010898Sroland.mainz@nrubsig.org[[ $got == ok ]] || err_exit 'cannot handle comsub depth > 256 in function' 101110898Sroland.mainz@nrubsig.org 101210898Sroland.mainz@nrubsig.orgtmp1=$tmp/job.1 101310898Sroland.mainz@nrubsig.orgtmp2=$tmp/job.2 101410898Sroland.mainz@nrubsig.orgcat > $tmp1 << +++ 101510898Sroland.mainz@nrubsig.org#! $SHELL 101610898Sroland.mainz@nrubsig.orgprint \$\$ 101710898Sroland.mainz@nrubsig.org+++ 101810898Sroland.mainz@nrubsig.orgchmod +x $tmp1 101910898Sroland.mainz@nrubsig.orgfunction foo 102010898Sroland.mainz@nrubsig.org{ 102110898Sroland.mainz@nrubsig.org typeset pid 102210898Sroland.mainz@nrubsig.org $tmp1 > $tmp2 & pid=$! 102310898Sroland.mainz@nrubsig.org wait $! 102410898Sroland.mainz@nrubsig.org [[ $(< $tmp2) == $pid ]] || err_exit 'wrong pid for & job in function' 102510898Sroland.mainz@nrubsig.org} 102610898Sroland.mainz@nrubsig.orgfoo 102710898Sroland.mainz@nrubsig.org# make sure compiled functions work 102810898Sroland.mainz@nrubsig.org[[ $(tmp=$tmp $SHELL <<- \++++ 102910898Sroland.mainz@nrubsig.org cat > $tmp/functions <<- \EOF 103010898Sroland.mainz@nrubsig.org function bar 103110898Sroland.mainz@nrubsig.org { 103210898Sroland.mainz@nrubsig.org print foo 103310898Sroland.mainz@nrubsig.org } 103410898Sroland.mainz@nrubsig.org function foobar 103510898Sroland.mainz@nrubsig.org { 103610898Sroland.mainz@nrubsig.org bar 103710898Sroland.mainz@nrubsig.org } 103810898Sroland.mainz@nrubsig.org EOF 103910898Sroland.mainz@nrubsig.org ${SHCOMP:-${SHELL%/*}/shcomp} $tmp/functions > $tmp/foobar 104010898Sroland.mainz@nrubsig.org rm -f "$tmp/functions" 104110898Sroland.mainz@nrubsig.org chmod +x $tmp/foobar 104210898Sroland.mainz@nrubsig.org rm $tmp/!(dir|foobar) 104310898Sroland.mainz@nrubsig.org FPATH=$tmp 104410898Sroland.mainz@nrubsig.org PATH=$FPATH:$PATH 104510898Sroland.mainz@nrubsig.org foobar 104610898Sroland.mainz@nrubsig.org++++ 104710898Sroland.mainz@nrubsig.org) == foo ]] > /dev/null || err_exit 'functions compiled with shcomp not working' 104810898Sroland.mainz@nrubsig.org# test for functions in shell having side effects. 104910898Sroland.mainz@nrubsig.orgunset -f foo foobar bar 105010898Sroland.mainz@nrubsig.orgcd "$tmp" 105110898Sroland.mainz@nrubsig.orgFPATH=$PWD 105210898Sroland.mainz@nrubsig.orgPATH=$FPATH:$PATH 105310898Sroland.mainz@nrubsig.orgcat > foo <<- \EOF 105410898Sroland.mainz@nrubsig.org function bar 105510898Sroland.mainz@nrubsig.org { 105610898Sroland.mainz@nrubsig.org print foobar 105710898Sroland.mainz@nrubsig.org } 105810898Sroland.mainz@nrubsig.org function foo 105910898Sroland.mainz@nrubsig.org { 106010898Sroland.mainz@nrubsig.org bar 106110898Sroland.mainz@nrubsig.org } 106210898Sroland.mainz@nrubsig.orgEOF 106310898Sroland.mainz@nrubsig.orgchmod +x foo 106410898Sroland.mainz@nrubsig.org: $(foo) 106510898Sroland.mainz@nrubsig.org[[ $(typeset +f) == *foo* ]] && err_exit 'function in subshell leaving side effect of function foo' 106610898Sroland.mainz@nrubsig.orgunset -f foo bar 106710898Sroland.mainz@nrubsig.org: $(foo) 106810898Sroland.mainz@nrubsig.org[[ $(typeset +f) == *foo* ]] && err_exit 'function in subshell leaving side effects of function foo after reload' 106910898Sroland.mainz@nrubsig.org[[ $(typeset +f) == *bar* ]] && err_exit 'function in subshell leaving side effects of function bar after reload' 107010898Sroland.mainz@nrubsig.org 1071*12068SRoger.Faulkner@Oracle.COMunset -f foo 1072*12068SRoger.Faulkner@Oracle.COMtypeset -A bar 1073*12068SRoger.Faulkner@Oracle.COMfunction foo 1074*12068SRoger.Faulkner@Oracle.COM{ 1075*12068SRoger.Faulkner@Oracle.COM typeset -i bar[$1].x 1076*12068SRoger.Faulkner@Oracle.COM bar[$1].x=5 1077*12068SRoger.Faulkner@Oracle.COM} 1078*12068SRoger.Faulkner@Oracle.COMfoo sub 1079*12068SRoger.Faulkner@Oracle.COM[[ ${!bar[@]} == sub ]] || err_exit 'scoping problem with compound array variables' 1080*12068SRoger.Faulkner@Oracle.COM 1081*12068SRoger.Faulkner@Oracle.COMfunction A 1082*12068SRoger.Faulkner@Oracle.COM{ 1083*12068SRoger.Faulkner@Oracle.COM trap "> /dev/null;print TRAP A" EXIT 1084*12068SRoger.Faulkner@Oracle.COM # (( stderr )) && print >&2 1085*12068SRoger.Faulkner@Oracle.COM} 1086*12068SRoger.Faulkner@Oracle.COM 1087*12068SRoger.Faulkner@Oracle.COMfunction B 1088*12068SRoger.Faulkner@Oracle.COM{ 1089*12068SRoger.Faulkner@Oracle.COM trap "> /dev/null;print TRAP B" EXIT 1090*12068SRoger.Faulkner@Oracle.COM A 1091*12068SRoger.Faulkner@Oracle.COM} 1092*12068SRoger.Faulkner@Oracle.COM 1093*12068SRoger.Faulkner@Oracle.COMx=$(B) 1094*12068SRoger.Faulkner@Oracle.COM[[ $x == $'TRAP A\nTRAP B' ]] || err_exit "trap from funtions in subshells fails got" $x 1095*12068SRoger.Faulkner@Oracle.COM 10964887Schinexit $((Errors)) 1097