xref: /onnv-gate/usr/src/lib/libshell/common/tests/functions.sh (revision 12068:08a39a083754)
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