From: Bdale Garbee Date: Sun, 6 Jul 2008 07:12:51 +0000 (-0600) Subject: Imported Upstream version 1.6.9p17 X-Git-Tag: upstream/1.6.9p17^0 X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=034bfa94d8911bef1d553a639d43aa8cdefac765;p=debian%2Fsudo Imported Upstream version 1.6.9p17 --- diff --git a/CHANGES b/CHANGES index c1dc01b..42c7862 100644 --- a/CHANGES +++ b/CHANGES @@ -2094,3 +2094,19 @@ Sudo 1.6.9p15 released. in sudoers, a syntax error in sudoers was incorrectly reported. Sudo 1.6.9p16 released. + +660) The -i flag should imply resetting the environment, as it did in + sudo version prior to 1.6.9. Also, the -i and -E flags are + mutually exclusive. + +661) Fixed the configure test for dirfd() under Linux. + +662) Fixed test for whether -lintl is required to link. + +663) Changed how sudo handles the child process when sending mail. + This fixes a problem on Linux with the mail_always option. + +664) Fixed a problem with line continuation characters inside of + quoted strings. + +Sudo 1.6.9p17 released. diff --git a/Makefile.in b/Makefile.in index c47e1c4..1650803 100644 --- a/Makefile.in +++ b/Makefile.in @@ -20,7 +20,7 @@ # # @configure_input@ # -# $Sudo: Makefile.in,v 1.246.2.31 2008/05/08 19:48:23 millert Exp $ +# $Sudo: Makefile.in,v 1.246.2.32 2008/06/22 20:29:03 millert Exp $ # #### Start of system configuration section. #### @@ -133,7 +133,7 @@ TESTOBJS = interfaces.o testsudoers.o $(PARSEOBJS) LIBOBJS = @LIBOBJS@ @ALLOCA@ -VERSION = 1.6.9p16 +VERSION = 1.6.9p17 DISTFILES = $(SRCS) $(HDRS) BUGS CHANGES HISTORY INSTALL INSTALL.configure \ LICENSE Makefile.in PORTING README README.LDAP \ diff --git a/config.h.in b/config.h.in index ab33f13..a009a09 100644 --- a/config.h.in +++ b/config.h.in @@ -323,6 +323,9 @@ /* Define to 1 if you have the `setrlimit' function. */ #undef HAVE_SETRLIMIT +/* Define to 1 if you have the `setsid' function. */ +#undef HAVE_SETSID + /* Define to 1 if you have the `set_auth_parameters' function. */ #undef HAVE_SET_AUTH_PARAMETERS diff --git a/configure b/configure index b786dde..c2fd192 100755 --- a/configure +++ b/configure @@ -15531,9 +15531,10 @@ LIBS=$ac_save_LIBS + for ac_func in strchr strrchr memchr memcpy memset sysconf tzset \ strftime setrlimit initgroups getgroups fstat gettimeofday \ - setlocale getaddrinfo + setlocale getaddrinfo setsid do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 @@ -18310,7 +18311,7 @@ cat >>conftest.$ac_ext <<_ACEOF int main () { -DIR d; (void)dirfd(&d); +DIR *d; (void)dirfd(d); ; return 0; } @@ -20116,56 +20117,20 @@ fi case $host in *-*-linux*|*-*-solaris*) - -for ac_func in dgettext -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF + # dgettext() may be defined to dgettext_libintl in the + # header file, so first check that it links w/ additional + # libs, then try with -lintl + cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif - +#include int main () { -return $ac_func (); +(void)dgettext((char *)0, (char *)0); ; return 0; } @@ -20188,27 +20153,15 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" + cat >>confdefs.h <<\_ACEOF +#define HAVE_DGETTEXT 1 +_ACEOF + else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - eval "$as_ac_var=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -else - { echo "$as_me:$LINENO: checking for dgettext in -lintl" >&5 + { echo "$as_me:$LINENO: checking for dgettext in -lintl" >&5 echo $ECHO_N "checking for dgettext in -lintl... $ECHO_C" >&6; } if test "${ac_cv_lib_intl_dgettext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -20278,8 +20231,9 @@ _ACEOF fi fi -done +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi diff --git a/configure.in b/configure.in index c8a249e..109fc9a 100644 --- a/configure.in +++ b/configure.in @@ -1,6 +1,6 @@ dnl dnl Process this file with GNU autoconf to produce a configure script. -dnl $Sudo: configure.in,v 1.413.2.50 2008/04/10 16:52:36 millert Exp $ +dnl $Sudo: configure.in,v 1.413.2.53 2008/06/22 20:23:56 millert Exp $ dnl dnl Copyright (c) 1994-1996,1998-2007 Todd C. Miller dnl @@ -1709,7 +1709,7 @@ dnl AC_FUNC_GETGROUPS AC_CHECK_FUNCS(strchr strrchr memchr memcpy memset sysconf tzset \ strftime setrlimit initgroups getgroups fstat gettimeofday \ - setlocale getaddrinfo) + setlocale getaddrinfo setsid) if test -z "$SKIP_SETRESUID"; then AC_CHECK_FUNCS(setresuid, [SKIP_SETREUID=yes]) fi @@ -1764,7 +1764,7 @@ dnl dnl Check for the dirfd function/macro. If not found, look for dd_fd in DIR. dnl AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include -#include <$ac_header_dirent>]], [[DIR d; (void)dirfd(&d);]])], [AC_DEFINE(HAVE_DIRFD)], [AC_TRY_LINK([#include +#include <$ac_header_dirent>]], [[DIR *d; (void)dirfd(d);]])], [AC_DEFINE(HAVE_DIRFD)], [AC_TRY_LINK([#include #include <$ac_header_dirent>], [DIR d; memset(&d, 0, sizeof(d)); return(d.dd_fd);], [AC_DEFINE(HAVE_DD_FD)])]) dnl dnl If NEED_SNPRINTF is set, add snprintf.c to LIBOBJS @@ -1867,8 +1867,13 @@ if test ${with_pam-"no"} != "no"; then esac], AC_MSG_RESULT(yes)) case $host in *-*-linux*|*-*-solaris*) - AC_CHECK_FUNCS(dgettext, [], - [AC_CHECK_LIB(intl, dgettext, [LIBS="${LIBS} -lintl"] + # dgettext() may be defined to dgettext_libintl in the + # header file, so first check that it links w/ additional + # libs, then try with -lintl + AC_LINK_IFELSE([AC_LANG_PROGRAM( + [[#include ]], [(void)dgettext((char *)0, (char *)0);])], + [AC_DEFINE(HAVE_DGETTEXT)], + [AC_CHECK_LIB(intl, dgettext, [LIBS="${LIBS} -lintl"] [AC_DEFINE(HAVE_DGETTEXT)])]) ;; esac diff --git a/env.c b/env.c index ba2c7ac..dba4955 100644 --- a/env.c +++ b/env.c @@ -52,7 +52,7 @@ #include "sudo.h" #ifndef lint -__unused static const char rcsid[] = "$Sudo: env.c,v 1.39.2.18 2008/03/13 11:34:57 millert Exp $"; +__unused static const char rcsid[] = "$Sudo: env.c,v 1.39.2.19 2008/06/21 19:04:07 millert Exp $"; #endif /* lint */ /* @@ -406,7 +406,7 @@ rebuild_env(envp, sudo_mode, noexec) ps1 = NULL; didvar = 0; memset(&env, 0, sizeof(env)); - if (def_env_reset) { + if (def_env_reset || ISSET(sudo_mode, MODE_LOGIN_SHELL)) { /* Pull in vars we want to keep from the old environment. */ for (ep = envp; *ep; ep++) { int keepit; @@ -537,6 +537,7 @@ rebuild_env(envp, sudo_mode, noexec) #endif /* Set $USER, $LOGNAME and $USERNAME to target if "set_logname" is true. */ + /* XXX - not needed for MODE_LOGIN_SHELL */ if (def_set_logname && runas_pw->pw_name) { if (!ISSET(didvar, KEPT_LOGNAME)) insert_env(format_env("LOGNAME", runas_pw->pw_name, VNULL), &env, 1); @@ -547,6 +548,7 @@ rebuild_env(envp, sudo_mode, noexec) } /* Set $HOME for `sudo -H'. Only valid at PERM_FULL_RUNAS. */ + /* XXX - not needed for MODE_LOGIN_SHELL */ if (runas_pw->pw_dir) { if (ISSET(sudo_mode, MODE_RESET_HOME) || (ISSET(sudo_mode, MODE_RUN) && (def_always_set_home || diff --git a/lex.yy.c b/lex.yy.c index 68405fb..b05dd92 100644 --- a/lex.yy.c +++ b/lex.yy.c @@ -3,7 +3,7 @@ /* A lexical scanner generated by flex */ /* Scanner skeleton version: - * $Header: /home/cvs/courtesan/sudo/Attic/lex.yy.c,v 1.46.2.9 2008/02/09 14:44:47 millert Exp $ + * $Header: /home/cvs/courtesan/sudo/Attic/lex.yy.c,v 1.46.2.11 2008/06/26 11:53:49 millert Exp $ */ #define FLEX_SCANNER @@ -285,77 +285,77 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] )); *yy_cp = '\0'; \ yy_c_buf_p = yy_cp; -#define YY_NUM_RULES 47 -#define YY_END_OF_BUFFER 48 +#define YY_NUM_RULES 48 +#define YY_END_OF_BUFFER 49 static yyconst short int yy_accept[610] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 48, 37, 43, 42, 41, 46, - 37, 30, 46, 37, 38, 37, 37, 37, 37, 40, - 39, 31, 31, 31, 31, 31, 31, 46, 37, 37, - 31, 31, 31, 31, 31, 32, 46, 32, 34, 32, - 32, 32, 32, 32, 31, 31, 31, 31, 31, 31, - 46, 32, 32, 1, 15, 14, 15, 14, 14, 46, - 46, 2, 8, 7, 8, 3, 8, 4, 46, 11, - 11, 11, 10, 11, 37, 0, 43, 41, 0, 45, - 25, 0, 24, 0, 36, 36, 0, 37, 37, 0, - - 37, 37, 37, 37, 0, 28, 31, 31, 31, 31, - 31, 31, 37, 44, 37, 37, 37, 37, 37, 37, - 32, 0, 0, 32, 25, 0, 24, 0, 32, 0, - 32, 32, 32, 32, 32, 32, 31, 31, 31, 31, - 31, 31, 32, 32, 1, 15, 15, 13, 12, 13, - 0, 2, 8, 0, 5, 6, 8, 8, 11, 11, - 11, 11, 11, 9, 0, 37, 37, 37, 37, 37, - 0, 0, 28, 28, 31, 31, 31, 31, 31, 31, - 31, 37, 37, 37, 37, 37, 37, 0, 33, 32, - 32, 32, 32, 32, 31, 31, 31, 31, 31, 31, - - 31, 32, 9, 37, 37, 37, 37, 37, 37, 0, - 29, 29, 29, 0, 0, 28, 28, 28, 28, 28, - 28, 28, 31, 31, 31, 31, 31, 31, 31, 37, - 37, 37, 37, 32, 32, 32, 32, 32, 32, 31, - 31, 31, 31, 31, 31, 31, 32, 37, 37, 37, - 0, 0, 29, 29, 29, 0, 28, 28, 0, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 0, 21, 31, 31, 31, 31, 31, 37, 37, 37, - 32, 32, 32, 31, 31, 31, 31, 31, 32, 37, - 37, 37, 37, 37, 0, 29, 0, 28, 28, 28, - - 0, 0, 0, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 31, 31, 31, 31, - 31, 37, 37, 37, 32, 32, 32, 32, 32, 31, - 31, 31, 31, 31, 32, 26, 26, 26, 0, 0, - 28, 28, 28, 28, 28, 28, 28, 0, 0, 0, - 0, 0, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 0, 20, 31, 31, - 0, 19, 0, 22, 37, 37, 37, 26, 26, 26, - 31, 31, 32, 37, 26, 26, 26, 26, 0, 28, - 0, 28, 28, 28, 28, 28, 28, 28, 28, 28, - - 28, 28, 0, 0, 0, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 31, 31, - 35, 37, 16, 32, 26, 26, 26, 26, 31, 31, - 32, 37, 27, 27, 27, 28, 0, 0, 0, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 0, 0, 0, 0, 0, 28, 28, 28, - 28, 28, 28, 28, 28, 0, 18, 0, 23, 37, - 16, 32, 27, 27, 27, 37, 37, 27, 27, 27, - 27, 27, 0, 0, 0, 0, 0, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - - 28, 28, 28, 28, 28, 28, 28, 17, 32, 32, - 27, 27, 27, 27, 27, 37, 37, 37, 27, 27, - 0, 0, 0, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 32, 32, 32, 27, 27, 37, 37, 37, 37, - 37, 0, 0, 0, 0, 0, 28, 28, 28, 28, - 28, 28, 28, 28, 32, 32, 32, 32, 32, 37, - 37, 37, 28, 28, 28, 28, 28, 28, 32, 32, - 32, 37, 37, 37, 37, 37, 28, 28, 28, 28, - 28, 32, 32, 32, 32, 32, 26, 26, 26, 26, - - 26, 26, 26, 26, 26, 26, 26, 26, 0 + 0, 0, 0, 0, 49, 38, 44, 43, 42, 47, + 38, 31, 47, 38, 39, 38, 38, 38, 38, 41, + 40, 32, 32, 32, 32, 32, 32, 47, 38, 38, + 32, 32, 32, 32, 32, 33, 47, 33, 35, 33, + 33, 33, 33, 33, 32, 32, 32, 32, 32, 32, + 47, 33, 33, 1, 16, 15, 16, 15, 15, 47, + 47, 2, 8, 7, 8, 3, 8, 4, 47, 12, + 12, 12, 10, 11, 38, 0, 44, 42, 0, 46, + 26, 0, 25, 0, 37, 37, 0, 38, 38, 0, + + 38, 38, 38, 38, 0, 29, 32, 32, 32, 32, + 32, 32, 38, 45, 38, 38, 38, 38, 38, 38, + 33, 0, 0, 33, 26, 0, 25, 0, 33, 0, + 33, 33, 33, 33, 33, 33, 32, 32, 32, 32, + 32, 32, 33, 33, 1, 16, 16, 14, 13, 14, + 0, 2, 8, 0, 5, 6, 8, 8, 12, 0, + 12, 12, 0, 9, 0, 38, 38, 38, 38, 38, + 0, 0, 29, 29, 32, 32, 32, 32, 32, 32, + 32, 38, 38, 38, 38, 38, 38, 0, 34, 33, + 33, 33, 33, 33, 32, 32, 32, 32, 32, 32, + + 32, 33, 9, 38, 38, 38, 38, 38, 38, 0, + 30, 30, 30, 0, 0, 29, 29, 29, 29, 29, + 29, 29, 32, 32, 32, 32, 32, 32, 32, 38, + 38, 38, 38, 33, 33, 33, 33, 33, 33, 32, + 32, 32, 32, 32, 32, 32, 33, 38, 38, 38, + 0, 0, 30, 30, 30, 0, 29, 29, 0, 29, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, + 0, 22, 32, 32, 32, 32, 32, 38, 38, 38, + 33, 33, 33, 32, 32, 32, 32, 32, 33, 38, + 38, 38, 38, 38, 0, 30, 0, 29, 29, 29, + + 0, 0, 0, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 32, 32, 32, 32, + 32, 38, 38, 38, 33, 33, 33, 33, 33, 32, + 32, 32, 32, 32, 33, 27, 27, 27, 0, 0, + 29, 29, 29, 29, 29, 29, 29, 0, 0, 0, + 0, 0, 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 0, 21, 32, 32, + 0, 20, 0, 23, 38, 38, 38, 27, 27, 27, + 32, 32, 33, 38, 27, 27, 27, 27, 0, 29, + 0, 29, 29, 29, 29, 29, 29, 29, 29, 29, + + 29, 29, 0, 0, 0, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, 32, 32, + 36, 38, 17, 33, 27, 27, 27, 27, 32, 32, + 33, 38, 28, 28, 28, 29, 0, 0, 0, 29, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 0, 0, 0, 0, 0, 29, 29, 29, + 29, 29, 29, 29, 29, 0, 19, 0, 24, 38, + 17, 33, 28, 28, 28, 38, 38, 28, 28, 28, + 28, 28, 0, 0, 0, 0, 0, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, + + 29, 29, 29, 29, 29, 29, 29, 18, 33, 33, + 28, 28, 28, 28, 28, 38, 38, 38, 28, 28, + 0, 0, 0, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, + 29, 33, 33, 33, 28, 28, 38, 38, 38, 38, + 38, 0, 0, 0, 0, 0, 29, 29, 29, 29, + 29, 29, 29, 29, 33, 33, 33, 33, 33, 38, + 38, 38, 29, 29, 29, 29, 29, 29, 33, 33, + 33, 38, 38, 38, 38, 38, 29, 29, 29, 29, + 29, 33, 33, 33, 33, 33, 27, 27, 27, 27, + + 27, 27, 27, 27, 27, 27, 27, 27, 0 } ; static yyconst int yy_ec[256] = @@ -403,79 +403,79 @@ static yyconst int yy_meta[61] = static yyconst short int yy_base[681] = { 0, 0, 32, 72, 0, 62, 131, 132, 139, 182, 241, - 300, 343, 145, 150, 3100, 3055, 3096, 3790, 3093, 3093, - 3051, 3790, 3790, 3028, 3790, 161, 374, 179, 161, 3038, - 3790, 424, 3009, 469, 3005, 3012, 3007, 518, 190, 102, - 2983, 2987, 2957, 2943, 2935, 2939, 201, 2929, 3790, 2919, - 306, 531, 232, 240, 581, 2910, 626, 2882, 2881, 2867, - 675, 248, 114, 2888, 0, 3790, 2875, 0, 3790, 314, - 64, 0, 2825, 3790, 115, 3790, 146, 3790, 158, 2805, - 171, 275, 3790, 278, 2804, 355, 2845, 2842, 2842, 3790, - 2794, 684, 2778, 709, 325, 2767, 718, 355, 729, 2777, - - 2769, 390, 485, 256, 2749, 151, 764, 0, 2732, 292, - 2715, 2660, 338, 3790, 124, 148, 232, 263, 287, 316, - 2652, 794, 2692, 0, 2644, 819, 2633, 828, 530, 853, - 549, 864, 2645, 642, 745, 493, 899, 0, 2618, 497, - 2599, 2597, 382, 318, 2633, 0, 2630, 306, 3790, 3790, - 333, 0, 2566, 700, 3790, 3790, 2524, 492, 2508, 384, - 529, 339, 692, 2549, 844, 936, 880, 650, 967, 2535, - 2509, 1002, 201, 1038, 1073, 2503, 2488, 2471, 2453, 2445, - 2445, 371, 388, 2419, 219, 147, 373, 2459, 3790, 1110, - 915, 753, 1141, 2433, 1176, 2405, 2372, 2387, 2327, 2291, - - 2283, 481, 2311, 947, 356, 0, 0, 330, 539, 2288, - 2271, 955, 687, 2270, 2236, 508, 983, 1213, 1018, 854, - 1249, 1056, 2222, 582, 2214, 2200, 2188, 2182, 2158, 370, - 405, 695, 532, 1090, 372, 0, 0, 518, 563, 2167, - 683, 2128, 2119, 2102, 2097, 2089, 679, 1121, 1159, 1194, - 2098, 2097, 1129, 2096, 2080, 2079, 2033, 665, 1229, 717, + 300, 343, 145, 150, 3097, 3052, 3093, 3790, 3068, 3059, + 3008, 3790, 3790, 2996, 3790, 161, 374, 179, 161, 3015, + 3790, 424, 2995, 469, 3002, 3009, 2982, 518, 190, 102, + 2949, 2944, 2927, 2913, 2905, 2909, 201, 2873, 3790, 2864, + 306, 531, 232, 240, 581, 2855, 626, 2855, 2852, 2838, + 675, 248, 114, 2847, 0, 3790, 2844, 0, 3790, 314, + 64, 0, 2803, 3790, 115, 3790, 146, 3790, 158, 2802, + 171, 275, 3790, 270, 2801, 355, 2836, 2818, 2808, 3790, + 2757, 684, 2739, 709, 325, 2729, 718, 355, 729, 2739, + + 2739, 390, 485, 493, 2675, 151, 764, 0, 2665, 245, + 2657, 2649, 338, 3790, 124, 148, 232, 219, 287, 278, + 2633, 794, 2656, 0, 2605, 819, 2593, 828, 530, 853, + 549, 864, 2622, 642, 745, 650, 899, 0, 2604, 292, + 2596, 2571, 382, 230, 2566, 0, 2548, 305, 3790, 3790, + 333, 0, 2507, 700, 3790, 3790, 2505, 492, 2489, 2527, + 384, 339, 350, 2529, 844, 936, 880, 720, 967, 2484, + 2460, 1002, 201, 1038, 1073, 2454, 2433, 2438, 2431, 2409, + 2403, 265, 236, 2369, 356, 147, 370, 2411, 3790, 1110, + 915, 753, 1141, 2399, 1176, 2354, 2315, 2302, 2283, 2275, + + 2281, 479, 2293, 947, 375, 0, 0, 343, 392, 2270, + 2236, 955, 515, 2222, 2221, 513, 983, 1213, 1018, 854, + 1249, 1056, 2214, 539, 2196, 2186, 2153, 2149, 2125, 540, + 388, 764, 529, 1090, 532, 0, 0, 427, 661, 2133, + 583, 2110, 2101, 2084, 2080, 2087, 645, 1121, 1159, 1194, + 2095, 2080, 1129, 2080, 2033, 2032, 2021, 667, 1229, 683, 1265, 775, 1286, 0, 1304, 1323, 1339, 888, 1359, 1377, - 714, 3790, 2027, 2007, 2007, 2007, 1962, 541, 502, 638, - 1396, 1406, 1416, 1973, 1951, 1957, 1927, 1915, 753, 1424, - 791, 1434, 1444, 1455, 1931, 1930, 1929, 1927, 1484, 792, - - 1936, 1884, 1463, 793, 824, 827, 1471, 852, 1521, 0, - 1502, 1558, 1537, 923, 1594, 1576, 802, 1855, 1862, 958, - 1040, 19, 771, 670, 1610, 819, 1639, 1649, 1631, 1081, - 1839, 1846, 1112, 1251, 1019, 1661, 1669, 991, 1855, 1819, - 1801, 1677, 1692, 1708, 1273, 1727, 1745, 1762, 1810, 1773, - 1757, 1772, 834, 1101, 1387, 1622, 1778, 1788, 1799, 0, - 1817, 1836, 1788, 1347, 1872, 1854, 1324, 3790, 1723, 1711, - 1325, 3790, 1522, 3790, 984, 1122, 696, 1908, 1888, 1545, - 1688, 1660, 1038, 1916, 845, 0, 0, 629, 1615, 1614, - 1924, 313, 1945, 937, 1955, 0, 1966, 1977, 1993, 1716, - - 2012, 2030, 1621, 1620, 2049, 1141, 1185, 1934, 2040, 2057, + 729, 3790, 2009, 1999, 1972, 1972, 1948, 481, 513, 651, + 1396, 1406, 1416, 1959, 1919, 1925, 1925, 1913, 675, 1424, + 791, 1434, 1444, 1455, 1926, 1873, 1856, 1819, 1484, 792, + + 1811, 1810, 1463, 802, 824, 827, 1471, 852, 1521, 0, + 1502, 1558, 1537, 923, 1594, 1576, 730, 1745, 1737, 958, + 1040, 19, 805, 670, 1610, 819, 1639, 1649, 1631, 1081, + 1711, 1718, 1112, 1251, 318, 1661, 1669, 991, 1694, 1677, + 1615, 1677, 1692, 1708, 1273, 1727, 1745, 1762, 1624, 1621, + 1620, 1772, 1056, 1101, 1387, 1622, 1778, 1788, 1799, 0, + 1817, 1836, 1788, 1347, 1872, 1854, 1324, 3790, 1590, 1578, + 1325, 3790, 1522, 3790, 984, 757, 771, 1908, 1888, 1545, + 1572, 1543, 1038, 1916, 636, 0, 0, 866, 1559, 1505, + 1924, 937, 1945, 1142, 1955, 0, 1966, 1977, 1993, 1716, + + 2012, 2030, 1496, 1482, 2049, 1150, 1185, 1934, 2040, 2057, 2067, 2078, 0, 2096, 2115, 2067, 1896, 2133, 1523, 1837, - 1576, 844, 1194, 2150, 1377, 0, 0, 675, 1838, 1957, - 1575, 2181, 2158, 2166, 907, 1579, 1570, 1569, 2191, 1505, + 1434, 879, 1194, 2150, 1377, 0, 0, 970, 1838, 1957, + 1426, 2181, 2158, 2166, 1028, 1407, 1390, 1389, 2191, 1306, 1435, 1577, 2199, 1650, 2212, 0, 2223, 2234, 2250, 2001, - 2269, 2287, 2304, 1496, 1482, 1464, 2314, 1745, 1854, 2322, - 978, 1030, 2333, 0, 2324, 1968, 3790, 2116, 3790, 1451, - 3790, 2343, 2351, 2359, 1167, 2372, 1483, 2380, 2388, 2401, - 2409, 2419, 2422, 1456, 1417, 1390, 2432, 1379, 1361, 1693, + 2269, 2287, 2304, 1260, 1244, 1225, 2314, 1745, 1854, 2322, + 1084, 1103, 2333, 0, 2324, 1968, 3790, 2116, 3790, 1451, + 3790, 2343, 2351, 2359, 1167, 2372, 846, 2380, 2388, 2401, + 2409, 2419, 2422, 1172, 1153, 1101, 2432, 1057, 1039, 1693, 2134, 2438, 2182, 2450, 0, 2461, 2472, 2488, 2258, 2507, - 2525, 1369, 1315, 2543, 2287, 1259, 1032, 1214, 2553, 1484, + 2525, 1032, 1012, 2543, 2287, 947, 1187, 880, 2553, 1483, 2561, 2569, 2577, 2585, 2595, 2600, 2610, 2624, 2634, 2368, - 1225, 1172, 2644, 1143, 1093, 2235, 2473, 2652, 2526, 2662, - 0, 2673, 2684, 2700, 2496, 2721, 1012, 947, 849, 2730, - 832, 2738, 2748, 2758, 2768, 2692, 2776, 1659, 2786, 2796, - 2807, 2813, 815, 808, 795, 2823, 764, 729, 2601, 723, - 550, 2836, 0, 1058, 2844, 2146, 2854, 2864, 2875, 2883, - 2893, 2904, 2912, 2920, 2928, 533, 0, 419, 2938, 2948, - 2958, 2968, 2179, 2978, 2988, 2998, 3790, 3004, 3012, 2708, - 3790, 3027, 2369, 3037, 3047, 3057, 3063, 3071, 3100, 3108, - - 3116, 3145, 240, 3153, 3137, 123, 3182, 3166, 3790, 3226, + 850, 833, 2644, 798, 780, 2235, 2473, 2652, 2526, 2662, + 0, 2673, 2684, 2700, 2496, 2721, 782, 740, 713, 2730, + 701, 2738, 2748, 2758, 2768, 2692, 2776, 1484, 2786, 2796, + 2807, 2813, 689, 638, 592, 2823, 566, 559, 2601, 550, + 416, 2836, 0, 1232, 2844, 1659, 2854, 2864, 2875, 2883, + 2893, 2904, 2912, 2920, 2928, 393, 0, 346, 2938, 2948, + 2958, 2968, 2146, 2978, 2988, 2998, 3790, 3004, 3012, 2708, + 3790, 3027, 2179, 3037, 3047, 3057, 3063, 3071, 3100, 3108, + + 3116, 3145, 293, 3153, 3137, 123, 3182, 3166, 3790, 3226, 3241, 3256, 3271, 3286, 3301, 3316, 3331, 3346, 3352, 3367, - 3382, 3397, 3412, 3427, 3442, 1084, 3457, 3472, 3487, 3502, - 3508, 3515, 3530, 1108, 3536, 3543, 3549, 3555, 3561, 3568, - 3574, 3580, 3586, 3593, 3601, 3607, 3613, 3619, 1211, 1246, - 3626, 3634, 3640, 3646, 3653, 3661, 3667, 3675, 1247, 1321, - 3682, 3690, 1592, 1694, 3696, 3704, 3711, 3719, 3725, 3733, - 1192, 1302, 3740, 1762, 1834, 3746, 3754, 3760, 3768, 3774 + 3382, 3397, 3412, 3427, 3442, 1242, 3457, 3472, 3487, 3502, + 3508, 3515, 3530, 1593, 3536, 3543, 3549, 3555, 3561, 3568, + 3574, 3580, 3586, 3593, 3601, 3607, 3613, 3619, 1211, 1321, + 3626, 3634, 3640, 3646, 3653, 3661, 3667, 3675, 1694, 1762, + 3682, 3690, 1834, 1871, 3696, 3704, 3711, 3719, 3725, 3733, + 1302, 1375, 3740, 1888, 1943, 3746, 3754, 3760, 3768, 3774 } ; static yyconst short int yy_def[681] = @@ -488,7 +488,7 @@ static yyconst short int yy_def[681] = 624, 620, 52, 52, 609, 55, 55, 57, 57, 57, 620, 52, 620, 609, 625, 609, 625, 625, 609, 609, 609, 626, 627, 609, 627, 609, 627, 609, 628, 629, - 629, 629, 609, 629, 614, 614, 609, 609, 615, 609, + 629, 629, 609, 609, 614, 614, 609, 609, 615, 609, 616, 616, 617, 617, 618, 630, 614, 614, 27, 619, 99, 99, 99, 99, 631, 632, 32, 34, 34, 34, @@ -496,8 +496,8 @@ static yyconst short int yy_def[681] = 620, 620, 633, 634, 622, 622, 623, 623, 624, 620, 620, 52, 132, 132, 132, 132, 55, 57, 57, 57, 57, 57, 620, 620, 609, 625, 625, 609, 609, 609, - 609, 626, 627, 627, 609, 609, 627, 627, 629, 629, - 629, 629, 629, 609, 609, 614, 166, 166, 99, 169, + 609, 626, 627, 627, 609, 609, 627, 627, 629, 609, + 629, 629, 609, 609, 609, 614, 166, 166, 99, 169, 635, 609, 636, 609, 32, 34, 34, 34, 34, 34, 34, 614, 614, 169, 614, 614, 614, 633, 609, 620, 190, 190, 132, 193, 55, 57, 57, 57, 57, 57, @@ -587,317 +587,317 @@ static yyconst short int yy_nxt[3851] = 72, 72, 17, 18, 19, 85, 20, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 136, 121, 86, 133, 133, 133, 133, 133, 133, 133, - 133, 170, 170, 170, 170, 170, 170, 231, 162, 163, - 164, 184, 159, 86, 71, 72, 72, 72, 72, 72, + 133, 163, 164, 122, 159, 177, 185, 202, 162, 86, + 178, 184, 179, 231, 71, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 72, 17, 18, 19, 74, 20, 86, 151, 114, 96, + 72, 17, 18, 19, 74, 20, 151, 114, 86, 96, 75, 76, 77, 96, 96, 148, 114, 149, 160, 150, - 185, 160, 177, 149, 78, 150, 391, 178, 96, 179, - 86, 96, 96, 96, 151, 114, 393, 150, 150, 151, + 230, 86, 197, 149, 78, 150, 187, 198, 96, 199, + 86, 96, 96, 96, 151, 114, 86, 150, 150, 151, 114, 186, 162, 79, 17, 18, 19, 74, 20, 130, - 96, 85, 85, 75, 76, 77, 85, 150, 85, 86, - 85, 122, 85, 85, 187, 202, 85, 78, 97, 204, + 96, 163, 164, 75, 76, 77, 85, 150, 85, 391, + 85, 122, 85, 85, 85, 85, 85, 78, 97, 383, 166, 167, 168, 166, 166, 166, 166, 166, 85, 85, - 85, 86, 160, 151, 114, 234, 79, 98, 159, 99, + 85, 86, 160, 151, 114, 161, 79, 98, 204, 99, 99, 99, 99, 99, 99, 99, 99, 100, 86, 86, 101, 101, 101, 101, 101, 170, 170, 170, 170, 170, - 170, 170, 170, 86, 86, 122, 86, 86, 278, 101, - 101, 101, 101, 101, 85, 122, 230, 160, 85, 231, - 85, 86, 391, 85, 85, 231, 85, 85, 85, 107, - 107, 107, 107, 107, 107, 107, 107, 100, 86, 279, + 170, 170, 170, 86, 231, 100, 528, 86, 86, 101, + 101, 101, 101, 101, 85, 122, 231, 160, 85, 609, + 85, 86, 279, 85, 85, 86, 85, 85, 85, 107, + 107, 107, 107, 107, 107, 107, 107, 100, 121, 121, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 86, 108, 101, 101, 101, 101, 101, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 108, 108, 108, 108, 108, 108, 108, 108, 609, 151, 114, 108, 108, 108, 108, 108, - 170, 170, 170, 170, 170, 170, 170, 170, 194, 194, - 194, 194, 194, 194, 85, 85, 85, 85, 85, 113, - 114, 85, 172, 85, 122, 85, 85, 197, 323, 85, - 161, 217, 198, 96, 199, 154, 247, 96, 96, 121, - 121, 85, 85, 85, 131, 86, 132, 132, 132, 132, - 132, 132, 132, 132, 100, 96, 528, 133, 133, 133, - 133, 133, 100, 609, 190, 191, 192, 190, 190, 190, - 190, 190, 160, 130, 122, 86, 133, 133, 133, 133, - 133, 121, 86, 271, 86, 121, 100, 121, 322, 231, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 85, 85, 85, 85, 85, 113, + 114, 85, 122, 85, 86, 85, 85, 172, 322, 85, + 255, 255, 255, 96, 247, 154, 217, 96, 96, 323, + 271, 85, 85, 85, 131, 234, 132, 132, 132, 132, + 132, 132, 132, 132, 100, 96, 86, 133, 133, 133, + 133, 133, 272, 391, 190, 191, 192, 190, 190, 190, + 190, 190, 86, 130, 122, 122, 133, 133, 133, 133, + 133, 121, 528, 86, 271, 121, 231, 121, 278, 492, 121, 121, 122, 121, 121, 121, 137, 137, 137, 137, - 137, 137, 137, 137, 100, 272, 122, 137, 137, 137, + 137, 137, 137, 137, 100, 552, 272, 137, 137, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 122, 138, 133, 133, 133, 133, 133, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 138, 138, 138, 138, 138, 138, 138, 138, 609, - 85, 85, 138, 138, 138, 138, 138, 194, 194, 194, - 194, 194, 194, 194, 194, 207, 207, 207, 207, 207, - 208, 121, 121, 121, 121, 121, 143, 114, 121, 172, - 121, 86, 121, 121, 271, 91, 121, 91, 217, 91, - 324, 91, 91, 163, 114, 91, 121, 121, 121, 121, - - 121, 153, 255, 255, 255, 153, 272, 91, 91, 91, - 93, 153, 93, 86, 93, 271, 93, 93, 100, 95, - 93, 85, 122, 95, 153, 85, 85, 289, 377, 95, - 259, 172, 93, 93, 93, 160, 391, 272, 86, 86, - 261, 95, 95, 85, 169, 169, 169, 169, 169, 169, - 169, 169, 528, 423, 280, 169, 169, 169, 169, 169, + 384, 552, 138, 138, 138, 138, 138, 194, 194, 194, + 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, + 194, 121, 121, 121, 121, 121, 143, 114, 121, 86, + 121, 172, 121, 121, 100, 91, 121, 91, 122, 91, + 217, 91, 91, 289, 86, 91, 259, 172, 121, 121, + + 121, 153, 552, 324, 122, 153, 261, 91, 91, 91, + 93, 153, 93, 86, 93, 172, 93, 93, 122, 95, + 93, 85, 335, 95, 153, 85, 85, 172, 377, 95, + 271, 367, 93, 93, 93, 207, 207, 207, 207, 207, + 208, 95, 95, 85, 169, 169, 169, 169, 169, 169, + 169, 169, 272, 368, 172, 169, 169, 169, 169, 169, 194, 194, 194, 194, 194, 194, 194, 194, 237, 237, 237, 237, 237, 238, 169, 169, 169, 169, 169, 175, - 175, 175, 175, 175, 175, 175, 175, 492, 609, 172, - 175, 175, 175, 175, 175, 121, 122, 121, 261, 121, + 175, 175, 175, 175, 175, 175, 175, 100, 609, 172, + 175, 175, 175, 175, 175, 121, 172, 121, 261, 121, - 335, 121, 121, 367, 290, 121, 172, 172, 552, 169, - 169, 169, 169, 169, 86, 217, 261, 121, 121, 121, - 125, 552, 125, 376, 125, 368, 125, 125, 552, 127, + 86, 121, 121, 492, 290, 121, 172, 86, 422, 169, + 169, 169, 169, 169, 86, 217, 172, 121, 121, 121, + 125, 443, 125, 280, 125, 261, 125, 125, 423, 127, 125, 127, 325, 127, 86, 127, 127, 259, 172, 127, - 259, 172, 125, 125, 125, 96, 172, 261, 172, 96, - 307, 127, 127, 127, 129, 96, 121, 261, 129, 384, - 121, 121, 122, 172, 129, 609, 172, 96, 96, 264, + 259, 172, 125, 125, 125, 96, 552, 261, 86, 96, + 307, 127, 127, 127, 129, 96, 121, 376, 129, 476, + 121, 121, 122, 552, 129, 609, 172, 96, 96, 264, 264, 264, 264, 264, 265, 307, 129, 129, 121, 193, - 193, 193, 193, 193, 193, 193, 193, 86, 86, 470, + 193, 193, 193, 193, 193, 193, 193, 85, 85, 86, 193, 193, 193, 193, 193, 206, 206, 206, 206, 206, 206, 206, 206, 310, 310, 310, 310, 310, 311, 193, 193, 193, 193, 193, 195, 195, 195, 195, 195, 195, - 195, 195, 482, 482, 482, 195, 195, 195, 195, 195, + 195, 195, 86, 86, 470, 195, 195, 195, 195, 195, 236, 236, 236, 236, 236, 236, 236, 236, 360, 360, 360, 360, 360, 361, 193, 193, 193, 193, 193, 204, - 609, 205, 205, 205, 205, 205, 205, 205, 205, 371, + 391, 205, 205, 205, 205, 205, 205, 205, 205, 371, 393, 172, 248, 249, 250, 248, 248, 248, 248, 248, 253, 253, 254, 255, 255, 255, 255, 255, 214, 86, 85, 372, 209, 209, 209, 209, 209, 209, 209, 209, - 86, 259, 172, 209, 209, 209, 209, 209, 222, 222, + 86, 121, 121, 209, 209, 209, 209, 209, 222, 222, 222, 222, 222, 222, 222, 222, 387, 387, 387, 387, 387, 388, 209, 209, 209, 209, 209, 211, 212, 213, 213, 213, 213, 213, 213, 214, 172, 86, 215, 215, 215, 215, 215, 263, 263, 263, 263, 263, 263, 263, - 263, 373, 421, 609, 172, 259, 172, 215, 215, 215, + 263, 373, 421, 482, 482, 482, 172, 215, 215, 215, 215, 215, 172, 218, 219, 220, 218, 218, 218, 218, - 218, 221, 122, 374, 222, 222, 222, 222, 222, 609, - 383, 262, 262, 262, 262, 262, 262, 262, 262, 577, - 577, 122, 367, 222, 222, 222, 222, 222, 223, 223, - 223, 223, 223, 223, 223, 223, 431, 152, 152, 223, + 218, 221, 443, 374, 222, 222, 222, 222, 222, 609, + 172, 262, 262, 262, 262, 262, 262, 262, 262, 261, + 393, 122, 367, 222, 222, 222, 222, 222, 223, 223, + 223, 223, 223, 223, 223, 223, 431, 259, 172, 223, 223, 223, 223, 223, 368, 281, 282, 283, 281, 281, - 281, 281, 281, 371, 124, 172, 492, 124, 209, 209, + 281, 281, 281, 371, 483, 172, 609, 172, 209, 209, 209, 209, 209, 234, 307, 235, 235, 235, 235, 235, 235, 235, 235, 122, 290, 372, 291, 291, 291, 291, 291, 291, 291, 291, 296, 296, 296, 296, 296, 296, - 296, 296, 214, 122, 121, 172, 239, 239, 239, 239, - 239, 239, 239, 239, 307, 86, 443, 239, 239, 239, - 239, 239, 290, 422, 292, 292, 292, 292, 292, 292, - 292, 292, 515, 515, 515, 552, 239, 239, 239, 239, + 296, 296, 214, 122, 121, 609, 239, 239, 239, 239, + 239, 239, 239, 239, 172, 393, 483, 239, 239, 239, + 239, 239, 290, 307, 292, 292, 292, 292, 292, 292, + 292, 292, 515, 515, 515, 483, 239, 239, 239, 239, 239, 240, 240, 240, 240, 240, 240, 240, 240, 172, - 537, 537, 240, 240, 240, 240, 240, 290, 357, 293, + 259, 172, 240, 240, 240, 240, 240, 290, 357, 293, 293, 293, 293, 293, 294, 291, 291, 471, 349, 471, 349, 239, 239, 239, 239, 239, 259, 172, 260, 260, - 260, 260, 260, 260, 260, 260, 261, 86, 552, 262, + 260, 260, 260, 260, 260, 260, 261, 86, 453, 262, 262, 262, 262, 262, 301, 302, 303, 301, 301, 301, - 301, 301, 373, 350, 454, 350, 454, 86, 262, 262, + 301, 301, 373, 577, 577, 152, 152, 453, 262, 262, 262, 262, 262, 172, 266, 267, 268, 266, 266, 266, - 266, 266, 269, 172, 374, 270, 270, 270, 270, 270, + 266, 266, 269, 453, 374, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 396, 396, 396, 396, 396, 397, 270, 270, 270, 270, 270, 259, 172, 305, 305, 305, 305, 305, 305, 305, 305, 261, - 538, 538, 304, 304, 304, 304, 304, 259, 172, 305, - 305, 305, 305, 305, 305, 367, 371, 261, 455, 172, - 455, 304, 304, 304, 304, 304, 259, 172, 306, 306, + 537, 537, 304, 304, 304, 304, 304, 259, 172, 305, + 305, 305, 305, 305, 305, 367, 371, 261, 350, 393, + 350, 304, 304, 304, 304, 304, 259, 172, 306, 306, 306, 306, 306, 306, 306, 306, 307, 368, 372, 308, 308, 308, 308, 308, 309, 309, 309, 309, 309, 309, 309, 309, 413, 413, 413, 413, 413, 414, 308, 308, 308, 308, 308, 172, 312, 313, 314, 312, 312, 312, - 312, 312, 315, 172, 443, 316, 316, 316, 316, 316, + 312, 312, 315, 538, 538, 316, 316, 316, 316, 316, 609, 424, 308, 308, 308, 308, 308, 308, 308, 308, - 259, 172, 393, 483, 316, 316, 316, 316, 316, 325, + 259, 172, 483, 483, 316, 316, 316, 316, 316, 325, 307, 326, 326, 326, 326, 326, 326, 326, 326, 325, 122, 327, 327, 327, 327, 327, 327, 327, 327, 325, - 483, 328, 328, 328, 328, 328, 329, 326, 326, 336, + 342, 328, 328, 328, 328, 328, 329, 326, 326, 336, 337, 338, 336, 336, 336, 336, 336, 290, 391, 291, 291, 291, 291, 291, 291, 291, 291, 290, 393, 291, - 291, 291, 291, 291, 291, 291, 291, 86, 290, 483, - 291, 291, 291, 291, 291, 291, 348, 453, 351, 351, + 291, 291, 291, 291, 291, 291, 291, 86, 290, 122, + 291, 291, 291, 291, 291, 291, 348, 86, 351, 351, 351, 351, 351, 352, 349, 349, 316, 316, 316, 316, - 316, 316, 316, 316, 86, 453, 476, 509, 86, 343, + 316, 316, 316, 316, 86, 453, 509, 547, 86, 343, 344, 345, 343, 343, 343, 343, 343, 346, 508, 453, 347, 347, 347, 347, 347, 259, 172, 355, 355, 355, - 355, 355, 355, 373, 466, 307, 86, 122, 393, 347, + 355, 355, 355, 373, 466, 307, 122, 86, 342, 347, 347, 347, 347, 347, 259, 172, 355, 355, 355, 355, 355, 355, 355, 355, 307, 374, 467, 354, 354, 354, 354, 354, 359, 359, 359, 359, 359, 359, 359, 359, 427, 427, 427, 427, 427, 428, 354, 354, 354, 354, 354, 259, 172, 356, 356, 356, 356, 356, 356, 356, - 356, 357, 483, 483, 358, 358, 358, 358, 358, 609, - 391, 358, 358, 358, 358, 358, 358, 358, 358, 484, + 356, 357, 257, 430, 358, 358, 358, 358, 358, 609, + 391, 358, 358, 358, 358, 358, 358, 358, 358, 124, - 443, 484, 342, 358, 358, 358, 358, 358, 172, 362, - 363, 364, 362, 362, 362, 362, 362, 365, 122, 86, + 443, 429, 124, 358, 358, 358, 358, 358, 172, 362, + 363, 364, 362, 362, 362, 362, 362, 365, 420, 419, 366, 366, 366, 366, 366, 378, 379, 380, 378, 378, - 378, 378, 378, 453, 453, 259, 172, 342, 257, 366, + 378, 378, 378, 348, 348, 259, 172, 348, 342, 366, 366, 366, 366, 366, 325, 357, 326, 326, 326, 326, 326, 326, 325, 122, 326, 326, 326, 326, 326, 326, 326, 326, 325, 609, 326, 326, 326, 326, 326, 326, - 326, 326, 547, 443, 122, 384, 385, 385, 385, 385, + 326, 326, 565, 443, 122, 384, 385, 385, 385, 385, 385, 385, 385, 385, 386, 386, 386, 386, 386, 386, 386, 386, 347, 347, 347, 347, 347, 347, 347, 347, - 430, 485, 86, 485, 86, 391, 391, 392, 392, 392, - 392, 392, 392, 392, 392, 393, 443, 429, 394, 394, + 257, 454, 122, 454, 86, 391, 391, 392, 392, 392, + 392, 392, 392, 392, 392, 393, 443, 214, 394, 394, 394, 394, 394, 395, 395, 395, 395, 395, 395, 395, 395, 446, 446, 446, 446, 446, 447, 394, 394, 394, 394, 394, 398, 399, 400, 398, 398, 398, 398, 398, - 401, 420, 419, 402, 402, 402, 402, 402, 609, 172, - 394, 394, 394, 394, 394, 394, 394, 394, 357, 553, - 348, 553, 402, 402, 402, 402, 402, 403, 404, 405, - 403, 403, 403, 403, 403, 348, 348, 349, 349, 349, + 401, 382, 381, 402, 402, 402, 402, 402, 609, 172, + 394, 394, 394, 394, 394, 394, 394, 394, 357, 455, + 370, 455, 402, 402, 402, 402, 402, 403, 404, 405, + 403, 403, 403, 403, 403, 348, 369, 349, 349, 349, 349, 349, 349, 366, 366, 366, 366, 366, 366, 366, 366, 609, 172, 412, 412, 412, 412, 412, 412, 412, 412, 357, 259, 172, 408, 408, 408, 408, 408, 408, - 408, 408, 357, 348, 342, 407, 407, 407, 407, 407, + 408, 408, 357, 348, 348, 407, 407, 407, 407, 407, 259, 172, 408, 408, 408, 408, 408, 408, 468, 466, - 357, 554, 257, 554, 407, 407, 407, 407, 407, 259, + 357, 484, 342, 484, 407, 407, 407, 407, 407, 259, 172, 409, 409, 409, 409, 409, 409, 409, 409, 410, 469, 467, 411, 411, 411, 411, 411, 609, 172, 411, - 411, 411, 411, 411, 411, 411, 411, 410, 214, 382, - 381, 411, 411, 411, 411, 411, 172, 415, 416, 417, - 415, 415, 415, 415, 415, 370, 369, 348, 418, 418, + 411, 411, 411, 411, 411, 411, 411, 410, 485, 257, + 485, 411, 411, 411, 411, 411, 172, 415, 416, 417, + 415, 415, 415, 415, 415, 553, 214, 553, 418, 418, 418, 418, 418, 426, 426, 426, 426, 426, 426, 426, 426, 464, 464, 464, 464, 464, 465, 418, 418, 418, 418, 418, 424, 425, 425, 425, 425, 425, 425, 425, 425, 432, 433, 434, 435, 432, 432, 432, 432, 437, - 438, 439, 437, 437, 437, 437, 437, 259, 172, 348, - 342, 122, 257, 214, 214, 334, 333, 357, 468, 86, + 438, 439, 437, 437, 437, 437, 437, 259, 172, 214, + 554, 122, 554, 334, 333, 332, 331, 357, 468, 86, 402, 402, 402, 402, 402, 402, 402, 402, 391, 466, 441, 441, 441, 441, 441, 441, 441, 441, 393, 391, - 469, 441, 441, 441, 441, 441, 441, 332, 331, 393, + 469, 441, 441, 441, 441, 441, 441, 330, 321, 393, 391, 467, 442, 442, 442, 442, 442, 442, 442, 442, - 443, 330, 321, 444, 444, 444, 444, 444, 445, 445, + 443, 320, 319, 444, 444, 444, 444, 444, 445, 445, 445, 445, 445, 445, 445, 445, 495, 495, 495, 495, 495, 496, 444, 444, 444, 444, 444, 448, 449, 450, - 448, 448, 448, 448, 448, 451, 320, 319, 452, 452, - 452, 452, 452, 609, 318, 444, 444, 444, 444, 444, - 444, 444, 444, 259, 172, 317, 299, 452, 452, 452, + 448, 448, 448, 448, 448, 451, 318, 317, 452, 452, + 452, 452, 452, 609, 299, 444, 444, 444, 444, 444, + 444, 444, 444, 259, 172, 257, 214, 452, 452, 452, 452, 452, 453, 410, 456, 456, 456, 456, 456, 457, 454, 454, 418, 418, 418, 418, 418, 418, 418, 418, 609, 172, 463, 463, 463, 463, 463, 463, 463, 463, 410, 259, 172, 460, 460, 460, 460, 460, 460, 460, - 460, 410, 257, 214, 459, 459, 459, 459, 459, 259, - 172, 460, 460, 460, 460, 460, 460, 468, 295, 410, - 214, 106, 288, 459, 459, 459, 459, 459, 259, 172, - 461, 461, 461, 461, 461, 461, 461, 461, 287, 469, - 286, 462, 462, 462, 462, 462, 609, 391, 462, 462, - 462, 462, 462, 462, 462, 462, 285, 492, 284, 565, + 460, 410, 295, 214, 459, 459, 459, 459, 459, 259, + 172, 460, 460, 460, 460, 460, 460, 468, 106, 410, + 288, 287, 286, 459, 459, 459, 459, 459, 259, 172, + 461, 461, 461, 461, 461, 461, 461, 461, 285, 469, + 284, 462, 462, 462, 462, 462, 609, 391, 462, 462, + 462, 462, 462, 462, 462, 462, 100, 492, 277, 582, 462, 462, 462, 462, 462, 472, 473, 474, 475, 472, 472, 472, 472, 478, 478, 478, 478, 478, 478, 478, - 478, 479, 479, 479, 479, 479, 480, 481, 481, 122, - 100, 277, 582, 122, 476, 609, 477, 477, 477, 477, + 478, 479, 479, 479, 479, 479, 480, 481, 481, 86, + 276, 275, 592, 122, 476, 609, 477, 477, 477, 477, 477, 477, 477, 477, 483, 492, 486, 486, 486, 486, 486, 487, 484, 484, 452, 452, 452, 452, 452, 452, - 452, 452, 86, 276, 86, 391, 275, 490, 490, 490, - 490, 490, 490, 490, 490, 443, 391, 274, 490, 490, - 490, 490, 490, 490, 273, 100, 443, 391, 391, 491, + 452, 452, 122, 274, 86, 391, 273, 490, 490, 490, + 490, 490, 490, 490, 490, 443, 391, 100, 490, 490, + 490, 490, 490, 490, 214, 257, 443, 391, 391, 491, 491, 491, 491, 491, 491, 491, 491, 492, 492, 214, 493, 493, 493, 493, 493, 494, 494, 494, 494, 494, 494, 494, 494, 531, 531, 531, 531, 531, 532, 493, 493, 493, 493, 493, 497, 498, 499, 497, 497, 497, - 497, 497, 500, 257, 214, 501, 501, 501, 501, 501, + 497, 497, 500, 106, 203, 501, 501, 501, 501, 501, 609, 172, 493, 493, 493, 493, 493, 493, 493, 493, - 410, 106, 203, 246, 501, 501, 501, 501, 501, 502, - 503, 504, 502, 502, 502, 502, 502, 453, 245, 454, + 410, 246, 245, 244, 501, 501, 501, 501, 501, 502, + 503, 504, 502, 502, 502, 502, 502, 453, 243, 454, 454, 454, 454, 454, 454, 259, 172, 259, 172, 507, 507, 507, 507, 507, 507, 410, 259, 172, 507, 507, - 507, 507, 507, 507, 507, 507, 509, 244, 510, 510, + 507, 507, 507, 507, 507, 507, 509, 242, 510, 510, 510, 510, 510, 510, 510, 510, 511, 511, 511, 511, 511, 511, 511, 511, 512, 512, 512, 512, 512, 513, - 514, 514, 592, 520, 520, 520, 122, 516, 517, 518, + 514, 514, 241, 520, 520, 520, 122, 516, 517, 518, 516, 516, 516, 516, 516, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 86, 122, 243, 242, 86, 481, 481, 481, 481, + 481, 86, 131, 189, 232, 86, 481, 481, 481, 481, 481, 481, 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 476, 241, 520, 520, 520, 521, 522, 523, - 521, 521, 521, 521, 521, 483, 131, 484, 484, 484, + 519, 519, 476, 229, 520, 520, 520, 521, 522, 523, + 521, 521, 521, 521, 521, 483, 228, 484, 484, 484, 484, 484, 484, 501, 501, 501, 501, 501, 501, 501, - 501, 189, 86, 391, 232, 526, 526, 526, 526, 526, - 526, 526, 526, 492, 391, 229, 526, 526, 526, 526, - 526, 526, 228, 227, 492, 391, 391, 527, 527, 527, - 527, 527, 527, 527, 527, 528, 528, 226, 529, 529, + 501, 227, 86, 391, 226, 526, 526, 526, 526, 526, + 526, 526, 526, 492, 391, 225, 526, 526, 526, 526, + 526, 526, 224, 106, 492, 391, 391, 527, 527, 527, + 527, 527, 527, 527, 527, 528, 528, 98, 529, 529, 529, 529, 529, 530, 530, 530, 530, 530, 530, 530, 530, 563, 563, 563, 563, 563, 564, 529, 529, 529, 529, 529, 533, 534, 535, 533, 533, 533, 533, 533, - 225, 224, 106, 536, 536, 536, 536, 536, 609, 609, - 529, 529, 529, 529, 529, 529, 529, 529, 98, 528, - 203, 160, 536, 536, 536, 536, 536, 172, 539, 539, - 539, 539, 539, 540, 537, 537, 121, 154, 542, 543, + 203, 159, 160, 536, 536, 536, 536, 536, 609, 609, + 529, 529, 529, 529, 529, 529, 529, 529, 154, 528, + 154, 147, 536, 536, 536, 536, 536, 172, 539, 539, + 539, 539, 539, 540, 537, 537, 121, 145, 542, 543, 544, 542, 542, 542, 542, 542, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 545, 545, - 545, 545, 545, 545, 545, 545, 545, 545, 509, 154, + 545, 545, 545, 545, 545, 545, 545, 545, 509, 201, 546, 546, 546, 547, 391, 548, 548, 548, 548, 548, 548, 548, 548, 547, 528, 549, 549, 549, 549, 549, - 549, 549, 549, 147, 145, 201, 200, 547, 122, 550, - 550, 550, 550, 550, 551, 548, 548, 85, 196, 519, - 519, 519, 519, 519, 519, 519, 519, 552, 121, 555, + 549, 549, 549, 200, 196, 121, 128, 547, 122, 550, + 550, 550, 550, 550, 551, 548, 548, 85, 126, 519, + 519, 519, 519, 519, 519, 519, 519, 552, 189, 555, 555, 555, 555, 555, 556, 553, 553, 536, 536, 536, - 536, 536, 536, 536, 536, 391, 128, 559, 559, 559, - 559, 559, 559, 559, 559, 528, 391, 126, 559, 559, - 559, 559, 559, 559, 189, 122, 528, 391, 181, 560, + 536, 536, 536, 536, 536, 391, 122, 559, 559, 559, + 559, 559, 559, 559, 559, 528, 391, 181, 559, 559, + 559, 559, 559, 559, 180, 176, 528, 391, 106, 560, 560, 560, 560, 560, 560, 560, 560, 546, 546, 546, 561, 561, 561, 561, 561, 562, 562, 562, 562, 562, 562, 562, 562, 587, 587, 587, 587, 587, 587, 561, 561, 561, 561, 561, 609, 122, 561, 561, 561, 561, 561, 561, 561, 561, 172, 537, 537, 537, 537, 537, - 537, 565, 180, 566, 566, 566, 566, 566, 566, 566, - 566, 565, 176, 567, 567, 567, 567, 567, 567, 567, - 567, 565, 106, 568, 568, 568, 568, 568, 569, 566, - 566, 121, 85, 545, 545, 545, 545, 545, 545, 545, + 537, 565, 85, 566, 566, 566, 566, 566, 566, 566, + 566, 565, 106, 567, 567, 567, 567, 567, 567, 567, + 567, 565, 165, 568, 568, 568, 568, 568, 569, 566, + 566, 121, 94, 545, 545, 545, 545, 545, 545, 545, 545, 570, 571, 572, 570, 570, 570, 570, 570, 547, - 106, 548, 548, 548, 548, 548, 548, 548, 548, 547, - 165, 548, 548, 548, 548, 548, 548, 548, 548, 86, - 547, 94, 548, 548, 548, 548, 548, 548, 573, 574, - 575, 573, 573, 573, 573, 573, 552, 92, 553, 553, - 553, 553, 553, 553, 90, 88, 87, 86, 160, 391, + 92, 548, 548, 548, 548, 548, 548, 548, 548, 547, + 90, 548, 548, 548, 548, 548, 548, 548, 548, 86, + 547, 88, 548, 548, 548, 548, 548, 548, 573, 574, + 575, 573, 573, 573, 573, 573, 552, 87, 553, 553, + 553, 553, 553, 553, 86, 160, 154, 147, 145, 391, 86, 578, 578, 578, 578, 578, 578, 578, 578, 579, - 580, 581, 579, 579, 579, 579, 579, 565, 154, 566, - 566, 566, 566, 566, 566, 566, 566, 565, 147, 566, - 566, 566, 566, 566, 566, 566, 566, 122, 565, 145, - 566, 566, 566, 566, 566, 566, 582, 142, 583, 583, + 580, 581, 579, 579, 579, 579, 579, 565, 142, 566, + 566, 566, 566, 566, 566, 566, 566, 565, 141, 566, + 566, 566, 566, 566, 566, 566, 566, 122, 565, 140, + 566, 566, 566, 566, 566, 566, 582, 139, 583, 583, - 583, 583, 583, 583, 583, 583, 582, 141, 584, 584, - 584, 584, 584, 584, 584, 584, 140, 582, 122, 585, + 583, 583, 583, 583, 583, 583, 582, 128, 584, 584, + 584, 584, 584, 584, 584, 584, 126, 582, 122, 585, 585, 585, 585, 585, 586, 583, 583, 587, 587, 587, 587, 587, 587, 587, 587, 588, 588, 588, 588, 588, 588, 588, 588, 589, 589, 589, 589, 589, 590, 587, - 587, 592, 139, 593, 593, 593, 593, 593, 593, 593, - 593, 592, 128, 594, 594, 594, 594, 594, 594, 594, - 594, 592, 126, 595, 595, 595, 595, 595, 596, 593, - 593, 85, 122, 597, 598, 599, 597, 597, 597, 597, - 597, 582, 120, 583, 583, 583, 583, 583, 583, 583, - - 583, 582, 119, 583, 583, 583, 583, 583, 583, 583, - 583, 582, 118, 583, 583, 583, 583, 583, 583, 587, + 587, 592, 122, 593, 593, 593, 593, 593, 593, 593, + 593, 592, 120, 594, 594, 594, 594, 594, 594, 594, + 594, 592, 119, 595, 595, 595, 595, 595, 596, 593, + 593, 85, 118, 597, 598, 599, 597, 597, 597, 597, + 597, 582, 117, 583, 583, 583, 583, 583, 583, 583, + + 583, 582, 116, 583, 583, 583, 583, 583, 583, 583, + 583, 582, 112, 583, 583, 583, 583, 583, 583, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, - 587, 587, 587, 587, 587, 117, 116, 112, 111, 110, + 587, 587, 587, 587, 587, 111, 110, 109, 106, 94, 121, 86, 600, 601, 602, 600, 600, 600, 600, 600, - 592, 109, 593, 593, 593, 593, 593, 593, 593, 593, - 592, 106, 593, 593, 593, 593, 593, 593, 593, 593, - 592, 94, 593, 593, 593, 593, 593, 593, 603, 603, + 592, 92, 593, 593, 593, 593, 593, 593, 593, 593, + 592, 90, 593, 593, 593, 593, 593, 593, 593, 593, + 592, 88, 593, 593, 593, 593, 593, 593, 603, 603, 603, 603, 603, 603, 603, 603, 597, 597, 597, 597, - 597, 597, 597, 597, 92, 90, 88, 87, 86, 609, + 597, 597, 597, 597, 87, 86, 609, 609, 609, 609, 122, 609, 609, 609, 609, 609, 86, 609, 609, 609, 609, 609, 609, 609, 86, 604, 604, 604, 604, 604, @@ -1013,318 +1013,318 @@ static yyconst short int yy_chk[3851] = 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 117, 10, 53, 53, 53, 53, 53, 53, 53, 53, 54, 54, 54, 54, 54, - 54, 62, 185, 62, 62, 62, 62, 62, 62, 62, - 62, 104, 104, 104, 104, 104, 104, 185, 82, 84, - 84, 117, 84, 603, 10, 10, 10, 10, 10, 10, + 54, 62, 118, 62, 62, 62, 62, 62, 62, 62, + 62, 84, 84, 144, 84, 110, 118, 144, 82, 183, + 110, 117, 110, 183, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 11, 11, 11, 11, 11, 118, 148, 148, 51, + 10, 11, 11, 11, 11, 11, 148, 148, 182, 51, 11, 11, 11, 51, 51, 70, 70, 70, 82, 70, - 118, 84, 110, 70, 11, 70, 392, 110, 95, 110, - 119, 51, 95, 95, 151, 151, 392, 70, 70, 113, + 182, 120, 140, 70, 11, 70, 120, 140, 95, 140, + 119, 51, 95, 95, 151, 151, 603, 70, 70, 113, 113, 119, 162, 11, 12, 12, 12, 12, 12, 51, - 95, 208, 208, 12, 12, 12, 86, 70, 86, 120, - 86, 144, 86, 86, 120, 144, 86, 12, 95, 205, + 95, 163, 163, 12, 12, 12, 86, 70, 86, 578, + 86, 335, 86, 86, 208, 208, 86, 12, 95, 335, 98, 98, 98, 98, 98, 98, 98, 98, 86, 86, - 86, 113, 162, 143, 143, 235, 12, 27, 160, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 98, 205, + 86, 113, 162, 143, 143, 161, 12, 27, 205, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 98, 185, 27, 27, 27, 27, 27, 102, 102, 102, 102, 102, - 102, 102, 102, 230, 182, 235, 187, 27, 230, 27, - 27, 27, 27, 27, 32, 143, 182, 160, 32, 187, - 32, 183, 578, 32, 32, 183, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 231, 231, + 102, 102, 102, 187, 185, 209, 576, 27, 205, 27, + 27, 27, 27, 27, 32, 143, 187, 161, 32, 561, + 32, 231, 231, 32, 32, 209, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 238, 238, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 34, 34, 34, 34, 34, 34, 34, 34, 34, 158, 158, 34, 34, 34, 34, 34, - 103, 103, 103, 103, 103, 103, 103, 103, 136, 136, - 136, 136, 136, 136, 34, 34, 34, 34, 34, 38, - 38, 38, 216, 38, 202, 38, 38, 140, 279, 38, - 161, 216, 140, 129, 140, 158, 202, 129, 129, 238, - 238, 38, 38, 38, 52, 279, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 129, 576, 52, 52, 52, - 52, 52, 209, 561, 131, 131, 131, 131, 131, 131, - 131, 131, 161, 129, 52, 233, 52, 52, 52, 52, - 52, 55, 209, 224, 278, 55, 239, 55, 278, 233, + 103, 103, 103, 103, 103, 103, 103, 103, 104, 104, + 104, 104, 104, 104, 34, 34, 34, 34, 34, 38, + 38, 38, 202, 38, 278, 38, 38, 216, 278, 38, + 213, 213, 213, 129, 202, 158, 216, 129, 129, 279, + 224, 38, 38, 38, 52, 235, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 129, 279, 52, 52, 52, + 52, 52, 224, 560, 131, 131, 131, 131, 131, 131, + 131, 131, 233, 129, 52, 235, 52, 52, 52, 52, + 52, 55, 558, 230, 241, 55, 233, 55, 230, 557, 55, 55, 131, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 224, 239, 55, 55, 55, + 55, 55, 55, 55, 55, 555, 241, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 388, 388, 57, 57, 57, 57, 57, 134, 134, 134, - 134, 134, 134, 134, 134, 168, 168, 168, 168, 168, - 168, 57, 57, 57, 57, 57, 61, 61, 61, 258, - 61, 280, 61, 61, 241, 92, 61, 92, 258, 92, - 280, 92, 92, 163, 163, 92, 428, 428, 61, 61, - - 61, 154, 213, 213, 213, 154, 241, 92, 92, 92, - 94, 154, 94, 324, 94, 271, 94, 94, 232, 97, - 94, 97, 247, 97, 154, 97, 97, 247, 324, 97, - 260, 260, 94, 94, 94, 163, 560, 271, 232, 377, - 260, 97, 97, 97, 99, 99, 99, 99, 99, 99, - 99, 99, 558, 377, 232, 99, 99, 99, 99, 99, + 385, 554, 57, 57, 57, 57, 57, 134, 134, 134, + 134, 134, 134, 134, 134, 136, 136, 136, 136, 136, + 136, 57, 57, 57, 57, 57, 61, 61, 61, 385, + 61, 258, 61, 61, 239, 92, 61, 92, 247, 92, + 258, 92, 92, 247, 280, 92, 260, 260, 61, 61, + + 61, 154, 553, 280, 239, 154, 260, 92, 92, 92, + 94, 154, 94, 324, 94, 541, 94, 94, 289, 97, + 94, 97, 289, 97, 154, 97, 97, 539, 324, 97, + 271, 317, 94, 94, 94, 168, 168, 168, 168, 168, + 168, 97, 97, 97, 99, 99, 99, 99, 99, 99, + 99, 99, 271, 317, 538, 99, 99, 99, 99, 99, 135, 135, 135, 135, 135, 135, 135, 135, 192, 192, 192, 192, 192, 192, 99, 99, 99, 99, 99, 107, - 107, 107, 107, 107, 107, 107, 107, 557, 262, 262, - 107, 107, 107, 107, 107, 122, 289, 122, 262, 122, + 107, 107, 107, 107, 107, 107, 107, 232, 262, 262, + 107, 107, 107, 107, 107, 122, 537, 122, 262, 122, - 289, 122, 122, 317, 291, 122, 300, 304, 555, 107, - 107, 107, 107, 107, 323, 300, 304, 122, 122, 122, - 126, 554, 126, 323, 126, 317, 126, 126, 553, 128, + 376, 122, 122, 525, 291, 122, 300, 232, 376, 107, + 107, 107, 107, 107, 377, 300, 304, 122, 122, 122, + 126, 524, 126, 232, 126, 304, 126, 126, 377, 128, 126, 128, 326, 128, 291, 128, 128, 305, 305, 128, - 306, 306, 126, 126, 126, 165, 541, 305, 353, 165, - 306, 128, 128, 128, 130, 165, 130, 353, 130, 385, - 130, 130, 326, 539, 130, 308, 308, 165, 165, 220, + 306, 306, 126, 126, 126, 165, 522, 305, 323, 165, + 306, 128, 128, 128, 130, 165, 130, 323, 130, 477, + 130, 130, 326, 521, 130, 308, 308, 165, 165, 220, 220, 220, 220, 220, 220, 308, 130, 130, 130, 132, - 132, 132, 132, 132, 132, 132, 132, 422, 385, 422, + 132, 132, 132, 132, 132, 132, 132, 388, 388, 477, 132, 132, 132, 132, 132, 167, 167, 167, 167, 167, 167, 167, 167, 268, 268, 268, 268, 268, 268, 132, 132, 132, 132, 132, 137, 137, 137, 137, 137, 137, - 137, 137, 435, 435, 435, 137, 137, 137, 137, 137, + 137, 137, 422, 508, 422, 137, 137, 137, 137, 137, 191, 191, 191, 191, 191, 191, 191, 191, 314, 314, 314, 314, 314, 314, 137, 137, 137, 137, 137, 166, - 394, 166, 166, 166, 166, 166, 166, 166, 166, 320, - 394, 538, 204, 204, 204, 204, 204, 204, 204, 204, + 392, 166, 166, 166, 166, 166, 166, 166, 166, 320, + 392, 506, 204, 204, 204, 204, 204, 204, 204, 204, 212, 212, 212, 212, 212, 212, 212, 212, 212, 166, 169, 320, 169, 169, 169, 169, 169, 169, 169, 169, - 204, 461, 461, 169, 169, 169, 169, 169, 217, 217, + 204, 428, 428, 169, 169, 169, 169, 169, 217, 217, 217, 217, 217, 217, 217, 217, 338, 338, 338, 338, 338, 338, 169, 169, 169, 169, 169, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 537, 375, 172, 172, + 172, 172, 172, 172, 172, 172, 503, 375, 172, 172, 172, 172, 172, 219, 219, 219, 219, 219, 219, 219, - 219, 321, 375, 462, 462, 507, 507, 172, 172, 172, + 219, 321, 375, 435, 435, 435, 502, 172, 172, 172, 172, 172, 174, 174, 174, 174, 174, 174, 174, 174, - 174, 174, 335, 321, 174, 174, 174, 174, 174, 222, - 335, 222, 222, 222, 222, 222, 222, 222, 222, 564, - 564, 383, 330, 174, 174, 174, 174, 174, 175, 175, - 175, 175, 175, 175, 175, 175, 383, 626, 626, 175, + 174, 174, 489, 321, 174, 174, 174, 174, 174, 222, + 353, 222, 222, 222, 222, 222, 222, 222, 222, 353, + 488, 383, 330, 174, 174, 174, 174, 174, 175, 175, + 175, 175, 175, 175, 175, 175, 383, 461, 461, 175, 175, 175, 175, 175, 330, 234, 234, 234, 234, 234, - 234, 234, 234, 333, 634, 354, 525, 634, 175, 175, + 234, 234, 234, 333, 486, 354, 462, 462, 175, 175, 175, 175, 175, 190, 354, 190, 190, 190, 190, 190, 190, 190, 190, 234, 248, 333, 248, 248, 248, 248, 248, 248, 248, 248, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 190, 193, 406, 193, 193, 193, 193, - 193, 193, 193, 193, 406, 376, 524, 193, 193, 193, - 193, 193, 249, 376, 249, 249, 249, 249, 249, 249, - 249, 249, 475, 475, 475, 522, 193, 193, 193, 193, + 253, 253, 253, 190, 193, 394, 193, 193, 193, 193, + 193, 193, 193, 193, 406, 394, 485, 193, 193, 193, + 193, 193, 249, 406, 249, 249, 249, 249, 249, 249, + 249, 249, 475, 475, 475, 484, 193, 193, 193, 193, 193, 195, 195, 195, 195, 195, 195, 195, 195, 407, - 671, 671, 195, 195, 195, 195, 195, 250, 407, 250, + 507, 507, 195, 195, 195, 195, 195, 250, 407, 250, 250, 250, 250, 250, 250, 250, 250, 423, 649, 423, 649, 195, 195, 195, 195, 195, 218, 218, 218, 218, - 218, 218, 218, 218, 218, 218, 218, 423, 521, 218, + 218, 218, 218, 218, 218, 218, 218, 423, 456, 218, 218, 218, 218, 218, 259, 259, 259, 259, 259, 259, - 259, 259, 334, 650, 659, 650, 659, 508, 218, 218, + 259, 259, 334, 564, 564, 626, 626, 455, 218, 218, 218, 218, 218, 221, 221, 221, 221, 221, 221, 221, - 221, 221, 221, 506, 334, 221, 221, 221, 221, 221, + 221, 221, 221, 454, 334, 221, 221, 221, 221, 221, 261, 261, 261, 261, 261, 261, 261, 261, 345, 345, 345, 345, 345, 345, 221, 221, 221, 221, 221, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 672, 672, 263, 263, 263, 263, 263, 265, 265, 265, - 265, 265, 265, 265, 265, 367, 371, 265, 660, 503, - 660, 263, 263, 263, 263, 263, 266, 266, 266, 266, + 671, 671, 263, 263, 263, 263, 263, 265, 265, 265, + 265, 265, 265, 265, 265, 367, 371, 265, 650, 440, + 650, 263, 263, 263, 263, 263, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 367, 371, 266, 266, 266, 266, 266, 267, 267, 267, 267, 267, 267, 267, 267, 364, 364, 364, 364, 364, 364, 266, 266, 266, 266, 266, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 502, 489, 269, 269, 269, 269, 269, + 269, 269, 269, 672, 672, 269, 269, 269, 269, 269, 270, 425, 270, 270, 270, 270, 270, 270, 270, 270, - 355, 355, 488, 486, 269, 269, 269, 269, 269, 281, + 355, 355, 438, 437, 269, 269, 269, 269, 269, 281, 355, 281, 281, 281, 281, 281, 281, 281, 281, 282, 425, 282, 282, 282, 282, 282, 282, 282, 282, 283, - 485, 283, 283, 283, 283, 283, 283, 283, 283, 290, + 436, 283, 283, 283, 283, 283, 283, 283, 283, 290, 290, 290, 290, 290, 290, 290, 290, 292, 441, 292, 292, 292, 292, 292, 292, 292, 292, 293, 441, 293, - 293, 293, 293, 293, 293, 293, 293, 290, 294, 484, - 294, 294, 294, 294, 294, 294, 303, 456, 303, 303, + 293, 293, 293, 293, 293, 293, 293, 290, 294, 431, + 294, 294, 294, 294, 294, 294, 303, 421, 303, 303, 303, 303, 303, 303, 303, 303, 307, 307, 307, 307, - 307, 307, 307, 307, 470, 455, 477, 510, 294, 299, + 307, 307, 307, 307, 470, 404, 510, 548, 294, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 470, 454, + 299, 299, 299, 299, 299, 299, 299, 299, 470, 403, 299, 299, 299, 299, 299, 311, 311, 311, 311, 311, - 311, 311, 311, 373, 419, 311, 477, 510, 440, 299, + 311, 311, 311, 373, 419, 311, 510, 548, 390, 299, 299, 299, 299, 299, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 373, 419, 309, 309, 309, 309, 309, 313, 313, 313, 313, 313, 313, 313, 313, 380, 380, 380, 380, 380, 380, 309, 309, 309, 309, 309, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 438, 437, 312, 312, 312, 312, 312, 316, - 442, 316, 316, 316, 316, 316, 316, 316, 316, 663, + 312, 312, 389, 382, 312, 312, 312, 312, 312, 316, + 442, 316, 316, 316, 316, 316, 316, 316, 316, 634, - 442, 663, 436, 312, 312, 312, 312, 312, 315, 315, - 315, 315, 315, 315, 315, 315, 315, 315, 431, 421, + 442, 381, 634, 312, 312, 312, 312, 312, 315, 315, + 315, 315, 315, 315, 315, 315, 315, 315, 370, 369, 315, 315, 315, 315, 315, 325, 325, 325, 325, 325, - 325, 325, 325, 404, 403, 356, 356, 390, 389, 315, + 325, 325, 325, 351, 350, 356, 356, 349, 341, 315, 315, 315, 315, 315, 329, 356, 329, 329, 329, 329, 329, 329, 327, 325, 327, 327, 327, 327, 327, 327, 327, 327, 328, 444, 328, 328, 328, 328, 328, 328, - 328, 328, 548, 444, 329, 336, 336, 336, 336, 336, + 328, 328, 566, 444, 329, 336, 336, 336, 336, 336, 336, 336, 336, 336, 337, 337, 337, 337, 337, 337, 337, 337, 342, 342, 342, 342, 342, 342, 342, 342, - 382, 664, 548, 664, 336, 343, 490, 343, 343, 343, - 343, 343, 343, 343, 343, 343, 490, 381, 343, 343, + 340, 659, 566, 659, 336, 343, 490, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 490, 339, 343, 343, 343, 343, 343, 344, 344, 344, 344, 344, 344, 344, 344, 400, 400, 400, 400, 400, 400, 343, 343, 343, 343, 343, 346, 346, 346, 346, 346, 346, 346, 346, - 346, 370, 369, 346, 346, 346, 346, 346, 347, 458, - 347, 347, 347, 347, 347, 347, 347, 347, 458, 674, - 351, 674, 346, 346, 346, 346, 346, 348, 348, 348, - 348, 348, 348, 348, 348, 352, 350, 352, 352, 352, + 346, 332, 331, 346, 346, 346, 346, 346, 347, 458, + 347, 347, 347, 347, 347, 347, 347, 347, 458, 660, + 319, 660, 346, 346, 346, 346, 346, 348, 348, 348, + 348, 348, 348, 348, 348, 352, 318, 352, 352, 352, 352, 352, 352, 357, 357, 357, 357, 357, 357, 357, 357, 358, 358, 363, 363, 363, 363, 363, 363, 363, 363, 358, 359, 359, 359, 359, 359, 359, 359, 359, - 359, 359, 359, 349, 341, 359, 359, 359, 359, 359, + 359, 359, 359, 302, 301, 359, 359, 359, 359, 359, 361, 361, 361, 361, 361, 361, 361, 361, 420, 429, - 361, 675, 340, 675, 359, 359, 359, 359, 359, 362, + 361, 663, 298, 663, 359, 359, 359, 359, 359, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 420, 429, 362, 362, 362, 362, 362, 366, 459, 366, - 366, 366, 366, 366, 366, 366, 366, 459, 339, 332, - 331, 362, 362, 362, 362, 362, 365, 365, 365, 365, - 365, 365, 365, 365, 365, 319, 318, 302, 365, 365, + 366, 366, 366, 366, 366, 366, 366, 459, 664, 297, + 664, 362, 362, 362, 362, 362, 365, 365, 365, 365, + 365, 365, 365, 365, 365, 674, 296, 674, 365, 365, 365, 365, 365, 379, 379, 379, 379, 379, 379, 379, 379, 417, 417, 417, 417, 417, 417, 365, 365, 365, 365, 365, 378, 378, 378, 378, 378, 378, 378, 378, 378, 384, 384, 384, 384, 384, 384, 384, 384, 391, - 391, 391, 391, 391, 391, 391, 391, 408, 408, 301, - 298, 378, 297, 296, 295, 288, 287, 408, 430, 384, + 391, 391, 391, 391, 391, 391, 391, 408, 408, 295, + 675, 378, 675, 288, 287, 286, 285, 408, 430, 384, 393, 393, 393, 393, 393, 393, 393, 393, 395, 466, 395, 395, 395, 395, 395, 395, 395, 395, 395, 397, - 430, 397, 397, 397, 397, 397, 397, 286, 285, 397, + 430, 397, 397, 397, 397, 397, 397, 284, 277, 397, 398, 466, 398, 398, 398, 398, 398, 398, 398, 398, - 398, 284, 277, 398, 398, 398, 398, 398, 399, 399, + 398, 276, 275, 398, 398, 398, 398, 398, 399, 399, 399, 399, 399, 399, 399, 399, 450, 450, 450, 450, 450, 450, 398, 398, 398, 398, 398, 401, 401, 401, - 401, 401, 401, 401, 401, 401, 276, 275, 401, 401, - 401, 401, 401, 402, 274, 402, 402, 402, 402, 402, - 402, 402, 402, 409, 409, 273, 257, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 274, 273, 401, 401, + 401, 401, 401, 402, 257, 402, 402, 402, 402, 402, + 402, 402, 402, 409, 409, 256, 255, 401, 401, 401, 401, 401, 405, 409, 405, 405, 405, 405, 405, 405, 405, 405, 410, 410, 410, 410, 410, 410, 410, 410, 411, 411, 416, 416, 416, 416, 416, 416, 416, 416, 411, 412, 412, 412, 412, 412, 412, 412, 412, 412, - 412, 412, 256, 255, 412, 412, 412, 412, 412, 414, - 414, 414, 414, 414, 414, 414, 414, 468, 254, 414, - 252, 251, 246, 412, 412, 412, 412, 412, 415, 415, - 415, 415, 415, 415, 415, 415, 415, 415, 245, 468, - 244, 415, 415, 415, 415, 415, 418, 491, 418, 418, - 418, 418, 418, 418, 418, 418, 243, 491, 242, 566, + 412, 412, 254, 252, 412, 412, 412, 412, 412, 414, + 414, 414, 414, 414, 414, 414, 414, 468, 251, 414, + 246, 245, 244, 412, 412, 412, 412, 412, 415, 415, + 415, 415, 415, 415, 415, 415, 415, 415, 243, 468, + 242, 415, 415, 415, 415, 415, 418, 491, 418, 418, + 418, 418, 418, 418, 418, 418, 240, 491, 229, 583, 415, 415, 415, 415, 415, 424, 424, 424, 424, 424, 424, 424, 424, 433, 433, 433, 433, 433, 433, 433, - 433, 434, 434, 434, 434, 434, 434, 434, 434, 566, - 240, 229, 583, 424, 432, 493, 432, 432, 432, 432, + 433, 434, 434, 434, 434, 434, 434, 434, 434, 583, + 228, 227, 593, 424, 432, 493, 432, 432, 432, 432, 432, 432, 432, 432, 439, 493, 439, 439, 439, 439, 439, 439, 439, 439, 443, 443, 443, 443, 443, 443, - 443, 443, 583, 228, 432, 445, 227, 445, 445, 445, - 445, 445, 445, 445, 445, 445, 447, 226, 447, 447, - 447, 447, 447, 447, 225, 223, 447, 448, 526, 448, - 448, 448, 448, 448, 448, 448, 448, 448, 526, 215, + 443, 443, 593, 226, 432, 445, 225, 445, 445, 445, + 445, 445, 445, 445, 445, 445, 447, 223, 447, 447, + 447, 447, 447, 447, 215, 214, 447, 448, 526, 448, + 448, 448, 448, 448, 448, 448, 448, 448, 526, 211, 448, 448, 448, 448, 448, 449, 449, 449, 449, 449, 449, 449, 449, 499, 499, 499, 499, 499, 499, 448, 448, 448, 448, 448, 451, 451, 451, 451, 451, 451, - 451, 451, 451, 214, 211, 451, 451, 451, 451, 451, + 451, 451, 451, 210, 203, 451, 451, 451, 451, 451, 452, 505, 452, 452, 452, 452, 452, 452, 452, 452, - 505, 210, 203, 201, 451, 451, 451, 451, 451, 453, - 453, 453, 453, 453, 453, 453, 453, 457, 200, 457, + 505, 201, 200, 199, 451, 451, 451, 451, 451, 453, + 453, 453, 453, 453, 453, 453, 453, 457, 198, 457, 457, 457, 457, 457, 457, 460, 460, 465, 465, 465, 465, 465, 465, 465, 465, 460, 463, 463, 463, 463, - 463, 463, 463, 463, 463, 463, 472, 199, 472, 472, + 463, 463, 463, 463, 463, 463, 472, 197, 472, 472, 472, 472, 472, 472, 472, 472, 473, 473, 473, 473, 473, 473, 473, 473, 474, 474, 474, 474, 474, 474, - 474, 474, 593, 520, 520, 520, 472, 476, 476, 476, + 474, 474, 196, 520, 520, 520, 472, 476, 476, 476, 476, 476, 476, 476, 476, 478, 478, 478, 478, 478, 478, 478, 478, 479, 479, 479, 479, 479, 479, 479, - 479, 520, 593, 198, 197, 476, 480, 480, 480, 480, + 479, 520, 194, 188, 184, 476, 480, 480, 480, 480, 480, 480, 480, 480, 481, 481, 481, 481, 481, 481, - 481, 481, 482, 196, 482, 482, 482, 483, 483, 483, - 483, 483, 483, 483, 483, 487, 194, 487, 487, 487, + 481, 481, 482, 181, 482, 482, 482, 483, 483, 483, + 483, 483, 483, 483, 483, 487, 180, 487, 487, 487, 487, 487, 487, 492, 492, 492, 492, 492, 492, 492, - 492, 188, 482, 494, 184, 494, 494, 494, 494, 494, - 494, 494, 494, 494, 496, 181, 496, 496, 496, 496, - 496, 496, 180, 179, 496, 497, 527, 497, 497, 497, - 497, 497, 497, 497, 497, 497, 527, 178, 497, 497, + 492, 179, 482, 494, 178, 494, 494, 494, 494, 494, + 494, 494, 494, 494, 496, 177, 496, 496, 496, 496, + 496, 496, 176, 171, 496, 497, 527, 497, 497, 497, + 497, 497, 497, 497, 497, 497, 527, 170, 497, 497, 497, 497, 497, 498, 498, 498, 498, 498, 498, 498, 498, 535, 535, 535, 535, 535, 535, 497, 497, 497, 497, 497, 500, 500, 500, 500, 500, 500, 500, 500, - 177, 176, 171, 500, 500, 500, 500, 500, 501, 529, - 501, 501, 501, 501, 501, 501, 501, 501, 170, 529, - 164, 159, 500, 500, 500, 500, 500, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 509, 157, 509, 509, + 164, 160, 159, 500, 500, 500, 500, 500, 501, 529, + 501, 501, 501, 501, 501, 501, 501, 501, 157, 529, + 153, 147, 500, 500, 500, 500, 500, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 509, 145, 509, 509, 509, 509, 509, 509, 509, 509, 511, 511, 511, 511, 511, 511, 511, 511, 512, 512, 512, 512, 512, 512, 512, 512, 513, 513, 513, 513, 513, 513, 513, 513, - 514, 514, 514, 514, 514, 514, 514, 514, 515, 153, + 514, 514, 514, 514, 514, 514, 514, 514, 515, 142, 515, 515, 515, 516, 559, 516, 516, 516, 516, 516, 516, 516, 516, 517, 559, 517, 517, 517, 517, 517, - 517, 517, 517, 147, 145, 142, 141, 518, 515, 518, - 518, 518, 518, 518, 518, 518, 518, 519, 139, 519, - 519, 519, 519, 519, 519, 519, 519, 523, 133, 523, + 517, 517, 517, 141, 139, 133, 127, 518, 515, 518, + 518, 518, 518, 518, 518, 518, 518, 519, 125, 519, + 519, 519, 519, 519, 519, 519, 519, 523, 123, 523, 523, 523, 523, 523, 523, 523, 523, 528, 528, 528, - 528, 528, 528, 528, 528, 530, 127, 530, 530, 530, - 530, 530, 530, 530, 530, 530, 532, 125, 532, 532, - 532, 532, 532, 532, 123, 121, 532, 533, 112, 533, + 528, 528, 528, 528, 528, 530, 121, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 532, 112, 532, 532, + 532, 532, 532, 532, 111, 109, 532, 533, 105, 533, 533, 533, 533, 533, 533, 533, 533, 546, 546, 546, 533, 533, 533, 533, 533, 534, 534, 534, 534, 534, 534, 534, 534, 590, 590, 590, 590, 590, 590, 533, 533, 533, 533, 533, 536, 546, 536, 536, 536, 536, 536, 536, 536, 536, 540, 540, 540, 540, 540, 540, - 540, 542, 111, 542, 542, 542, 542, 542, 542, 542, - 542, 543, 109, 543, 543, 543, 543, 543, 543, 543, - 543, 544, 105, 544, 544, 544, 544, 544, 544, 544, - 544, 545, 101, 545, 545, 545, 545, 545, 545, 545, + 540, 542, 101, 542, 542, 542, 542, 542, 542, 542, + 542, 543, 100, 543, 543, 543, 543, 543, 543, 543, + 543, 544, 96, 544, 544, 544, 544, 544, 544, 544, + 544, 545, 93, 545, 545, 545, 545, 545, 545, 545, 545, 547, 547, 547, 547, 547, 547, 547, 547, 549, - 100, 549, 549, 549, 549, 549, 549, 549, 549, 550, - 96, 550, 550, 550, 550, 550, 550, 550, 550, 547, - 551, 93, 551, 551, 551, 551, 551, 551, 552, 552, - 552, 552, 552, 552, 552, 552, 556, 91, 556, 556, - 556, 556, 556, 556, 89, 88, 87, 85, 80, 562, + 91, 549, 549, 549, 549, 549, 549, 549, 549, 550, + 89, 550, 550, 550, 550, 550, 550, 550, 550, 547, + 551, 88, 551, 551, 551, 551, 551, 551, 552, 552, + 552, 552, 552, 552, 552, 552, 556, 87, 556, 556, + 556, 556, 556, 556, 85, 80, 73, 67, 64, 562, 551, 562, 562, 562, 562, 562, 562, 562, 562, 565, - 565, 565, 565, 565, 565, 565, 565, 567, 73, 567, - 567, 567, 567, 567, 567, 567, 567, 568, 67, 568, - 568, 568, 568, 568, 568, 568, 568, 565, 569, 64, - 569, 569, 569, 569, 569, 569, 570, 60, 570, 570, + 565, 565, 565, 565, 565, 565, 565, 567, 60, 567, + 567, 567, 567, 567, 567, 567, 567, 568, 59, 568, + 568, 568, 568, 568, 568, 568, 568, 565, 569, 58, + 569, 569, 569, 569, 569, 569, 570, 56, 570, 570, - 570, 570, 570, 570, 570, 570, 571, 59, 571, 571, - 571, 571, 571, 571, 571, 571, 58, 572, 569, 572, + 570, 570, 570, 570, 570, 570, 571, 50, 571, 571, + 571, 571, 571, 571, 571, 571, 48, 572, 569, 572, 572, 572, 572, 572, 572, 572, 572, 573, 573, 573, 573, 573, 573, 573, 573, 574, 574, 574, 574, 574, 574, 574, 574, 575, 575, 575, 575, 575, 575, 575, - 575, 579, 56, 579, 579, 579, 579, 579, 579, 579, - 579, 580, 50, 580, 580, 580, 580, 580, 580, 580, - 580, 581, 48, 581, 581, 581, 581, 581, 581, 581, - 581, 582, 46, 582, 582, 582, 582, 582, 582, 582, - 582, 584, 45, 584, 584, 584, 584, 584, 584, 584, - - 584, 585, 44, 585, 585, 585, 585, 585, 585, 585, - 585, 586, 43, 586, 586, 586, 586, 586, 586, 588, + 575, 579, 46, 579, 579, 579, 579, 579, 579, 579, + 579, 580, 45, 580, 580, 580, 580, 580, 580, 580, + 580, 581, 44, 581, 581, 581, 581, 581, 581, 581, + 581, 582, 43, 582, 582, 582, 582, 582, 582, 582, + 582, 584, 42, 584, 584, 584, 584, 584, 584, 584, + + 584, 585, 41, 585, 585, 585, 585, 585, 585, 585, + 585, 586, 37, 586, 586, 586, 586, 586, 586, 588, 588, 588, 588, 588, 588, 588, 588, 589, 589, 589, - 589, 589, 589, 589, 589, 42, 41, 37, 36, 35, + 589, 589, 589, 589, 589, 36, 35, 33, 30, 24, 592, 586, 592, 592, 592, 592, 592, 592, 592, 592, - 594, 33, 594, 594, 594, 594, 594, 594, 594, 594, - 595, 30, 595, 595, 595, 595, 595, 595, 595, 595, - 596, 24, 596, 596, 596, 596, 596, 596, 597, 597, + 594, 21, 594, 594, 594, 594, 594, 594, 594, 594, + 595, 20, 595, 595, 595, 595, 595, 595, 595, 595, + 596, 19, 596, 596, 596, 596, 596, 596, 597, 597, 597, 597, 597, 597, 597, 597, 598, 598, 598, 598, - 598, 598, 598, 598, 21, 20, 19, 17, 16, 15, + 598, 598, 598, 598, 17, 16, 15, 0, 0, 0, 596, 0, 0, 0, 0, 0, 597, 0, 0, 0, 0, 0, 0, 0, 598, 599, 599, 599, 599, 599, @@ -1480,7 +1480,7 @@ char *yytext; #include #ifndef lint -__unused static const char rcsid[] = "$Sudo: lex.yy.c,v 1.46.2.9 2008/02/09 14:44:47 millert Exp $"; +__unused static const char rcsid[] = "$Sudo: lex.yy.c,v 1.46.2.11 2008/06/26 11:53:49 millert Exp $"; #endif /* lint */ #undef yywrap /* guard against a yywrap macro */ @@ -1853,20 +1853,24 @@ YY_RULE_SETUP case 11: YY_RULE_SETUP #line 166 "parse.lex" +{ + LEXTRACE("BACKSLASH "); + append(yytext, yyleng); + } + YY_BREAK +case 12: +YY_RULE_SETUP +#line 171 "parse.lex" { LEXTRACE("STRBODY "); - /* Push back line continuation char if present */ - if (yyleng > 2 && yytext[yyleng - 1] == '\\' && - isspace((unsigned char)yytext[yyleng - 2])) - yyless(yyleng - 1); append(yytext, yyleng); } YY_BREAK -case 12: +case 13: YY_RULE_SETUP -#line 177 "parse.lex" +#line 178 "parse.lex" { /* quoted fnmatch glob char, pass verbatim */ LEXTRACE("QUOTEDCHAR "); @@ -1874,9 +1878,9 @@ YY_RULE_SETUP sawspace = FALSE; } YY_BREAK -case 13: +case 14: YY_RULE_SETUP -#line 184 "parse.lex" +#line 185 "parse.lex" { /* quoted sudoers special char, strip backslash */ LEXTRACE("QUOTEDCHAR "); @@ -1884,18 +1888,18 @@ YY_RULE_SETUP sawspace = FALSE; } YY_BREAK -case 14: +case 15: YY_RULE_SETUP -#line 191 "parse.lex" +#line 192 "parse.lex" { BEGIN INITIAL; unput(*yytext); return(COMMAND); } /* end of command line args */ YY_BREAK -case 15: +case 16: YY_RULE_SETUP -#line 197 "parse.lex" +#line 198 "parse.lex" { LEXTRACE("ARG "); fill_args(yytext, yyleng, sawspace); @@ -1903,9 +1907,9 @@ YY_RULE_SETUP } /* a command line arg */ YY_BREAK -case 16: +case 17: YY_RULE_SETUP -#line 204 "parse.lex" +#line 205 "parse.lex" { BEGIN GOTDEFS; switch (yytext[8]) { @@ -1924,9 +1928,9 @@ YY_RULE_SETUP } } YY_BREAK -case 17: +case 18: YY_RULE_SETUP -#line 222 "parse.lex" +#line 223 "parse.lex" { fill(yytext, yyleng); switch (*yytext) { @@ -1946,59 +1950,59 @@ YY_RULE_SETUP } } YY_BREAK -case 18: +case 19: YY_RULE_SETUP -#line 241 "parse.lex" +#line 242 "parse.lex" { /* cmnd does not require passwd for this user */ LEXTRACE("NOPASSWD "); return(NOPASSWD); } YY_BREAK -case 19: +case 20: YY_RULE_SETUP -#line 247 "parse.lex" +#line 248 "parse.lex" { /* cmnd requires passwd for this user */ LEXTRACE("PASSWD "); return(PASSWD); } YY_BREAK -case 20: +case 21: YY_RULE_SETUP -#line 253 "parse.lex" +#line 254 "parse.lex" { LEXTRACE("NOEXEC "); return(NOEXEC); } YY_BREAK -case 21: +case 22: YY_RULE_SETUP -#line 258 "parse.lex" +#line 259 "parse.lex" { LEXTRACE("EXEC "); return(EXEC); } YY_BREAK -case 22: +case 23: YY_RULE_SETUP -#line 263 "parse.lex" +#line 264 "parse.lex" { LEXTRACE("SETENV "); return(SETENV); } YY_BREAK -case 23: +case 24: YY_RULE_SETUP -#line 268 "parse.lex" +#line 269 "parse.lex" { LEXTRACE("NOSETENV "); return(NOSETENV); } YY_BREAK -case 24: +case 25: YY_RULE_SETUP -#line 273 "parse.lex" +#line 274 "parse.lex" { /* netgroup */ fill(yytext, yyleng); @@ -2006,9 +2010,9 @@ YY_RULE_SETUP return(NETGROUP); } YY_BREAK -case 25: +case 26: YY_RULE_SETUP -#line 280 "parse.lex" +#line 281 "parse.lex" { /* UN*X group */ fill(yytext, yyleng); @@ -2016,27 +2020,27 @@ YY_RULE_SETUP return(USERGROUP); } YY_BREAK -case 26: +case 27: YY_RULE_SETUP -#line 287 "parse.lex" +#line 288 "parse.lex" { fill(yytext, yyleng); LEXTRACE("NTWKADDR "); return(NTWKADDR); } YY_BREAK -case 27: +case 28: YY_RULE_SETUP -#line 293 "parse.lex" +#line 294 "parse.lex" { fill(yytext, yyleng); LEXTRACE("NTWKADDR "); return(NTWKADDR); } YY_BREAK -case 28: +case 29: YY_RULE_SETUP -#line 299 "parse.lex" +#line 300 "parse.lex" { if (!ipv6_valid(yytext)) { LEXTRACE("ERROR "); @@ -2047,9 +2051,9 @@ YY_RULE_SETUP return(NTWKADDR); } YY_BREAK -case 29: +case 30: YY_RULE_SETUP -#line 309 "parse.lex" +#line 310 "parse.lex" { if (!ipv6_valid(yytext)) { LEXTRACE("ERROR "); @@ -2060,18 +2064,18 @@ YY_RULE_SETUP return(NTWKADDR); } YY_BREAK -case 30: +case 31: YY_RULE_SETUP -#line 319 "parse.lex" +#line 320 "parse.lex" { BEGIN GOTRUNAS; LEXTRACE("RUNAS "); return (RUNAS); } YY_BREAK -case 31: +case 32: YY_RULE_SETUP -#line 325 "parse.lex" +#line 326 "parse.lex" { if (strcmp(yytext, "ALL") == 0) { LEXTRACE("ALL "); @@ -2093,9 +2097,9 @@ YY_RULE_SETUP return(ALIAS); } YY_BREAK -case 32: +case 33: YY_RULE_SETUP -#line 346 "parse.lex" +#line 347 "parse.lex" { /* username/uid that user can run command as */ fill(yytext, yyleng); @@ -2103,9 +2107,9 @@ YY_RULE_SETUP return(WORD); } YY_BREAK -case 33: +case 34: YY_RULE_SETUP -#line 353 "parse.lex" +#line 354 "parse.lex" { BEGIN INITIAL; ++sudolineno; @@ -2113,25 +2117,25 @@ YY_RULE_SETUP return(COMMENT); } YY_BREAK -case 34: +case 35: YY_RULE_SETUP -#line 360 "parse.lex" +#line 361 "parse.lex" { BEGIN INITIAL; } YY_BREAK -case 35: +case 36: YY_RULE_SETUP -#line 364 "parse.lex" +#line 365 "parse.lex" { BEGIN GOTCMND; LEXTRACE("COMMAND "); fill_cmnd(yytext, yyleng); } /* sudo -e */ YY_BREAK -case 36: +case 37: YY_RULE_SETUP -#line 370 "parse.lex" +#line 371 "parse.lex" { /* directories can't have args... */ if (yytext[yyleng - 1] == '/') { @@ -2145,9 +2149,9 @@ YY_RULE_SETUP } } /* a pathname */ YY_BREAK -case 37: +case 38: YY_RULE_SETUP -#line 383 "parse.lex" +#line 384 "parse.lex" { /* a word */ fill(yytext, yyleng); @@ -2155,41 +2159,41 @@ YY_RULE_SETUP return(WORD); } YY_BREAK -case 38: +case 39: YY_RULE_SETUP -#line 390 "parse.lex" +#line 391 "parse.lex" { LEXTRACE(", "); return(','); } /* return ',' */ YY_BREAK -case 39: +case 40: YY_RULE_SETUP -#line 395 "parse.lex" +#line 396 "parse.lex" { LEXTRACE("= "); return('='); } /* return '=' */ YY_BREAK -case 40: +case 41: YY_RULE_SETUP -#line 400 "parse.lex" +#line 401 "parse.lex" { LEXTRACE(": "); return(':'); } /* return ':' */ YY_BREAK -case 41: +case 42: YY_RULE_SETUP -#line 405 "parse.lex" +#line 406 "parse.lex" { if (yyleng % 2 == 1) return('!'); /* return '!' */ } YY_BREAK -case 42: +case 43: YY_RULE_SETUP -#line 410 "parse.lex" +#line 411 "parse.lex" { BEGIN INITIAL; ++sudolineno; @@ -2197,25 +2201,25 @@ YY_RULE_SETUP return(COMMENT); } /* return newline */ YY_BREAK -case 43: +case 44: YY_RULE_SETUP -#line 417 "parse.lex" +#line 418 "parse.lex" { /* throw away space/tabs */ sawspace = TRUE; /* but remember for fill_args */ } YY_BREAK -case 44: +case 45: YY_RULE_SETUP -#line 421 "parse.lex" +#line 422 "parse.lex" { sawspace = TRUE; /* remember for fill_args */ ++sudolineno; LEXTRACE("\n\t"); } /* throw away EOL after \ */ YY_BREAK -case 45: +case 46: YY_RULE_SETUP -#line 427 "parse.lex" +#line 428 "parse.lex" { BEGIN INITIAL; ++sudolineno; @@ -2223,9 +2227,9 @@ YY_RULE_SETUP return(COMMENT); } /* return comments */ YY_BREAK -case 46: +case 47: YY_RULE_SETUP -#line 434 "parse.lex" +#line 435 "parse.lex" { LEXTRACE("ERROR "); return(ERROR); @@ -2238,7 +2242,7 @@ case YY_STATE_EOF(GOTCMND): case YY_STATE_EOF(STARTDEFS): case YY_STATE_EOF(INDEFS): case YY_STATE_EOF(INSTR): -#line 439 "parse.lex" +#line 440 "parse.lex" { if (YY_START != INITIAL) { BEGIN INITIAL; @@ -2248,12 +2252,12 @@ case YY_STATE_EOF(INSTR): yyterminate(); } YY_BREAK -case 47: +case 48: YY_RULE_SETUP -#line 448 "parse.lex" +#line 449 "parse.lex" ECHO; YY_BREAK -#line 2257 "lex.yy.c" +#line 2261 "lex.yy.c" case YY_END_OF_BUFFER: { @@ -3142,7 +3146,7 @@ int main() return 0; } #endif -#line 448 "parse.lex" +#line 449 "parse.lex" static void _fill(src, len, olen) diff --git a/logging.c b/logging.c index bcc3cc2..80d0f5a 100644 --- a/logging.c +++ b/logging.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #ifdef STDC_HEADERS @@ -56,11 +57,12 @@ #include #include #include +#include #include "sudo.h" #ifndef lint -__unused static const char rcsid[] = "$Sudo: logging.c,v 1.168.2.14 2008/03/17 15:09:54 millert Exp $"; +__unused static const char rcsid[] = "$Sudo: logging.c,v 1.168.2.16 2008/06/22 20:23:57 millert Exp $"; #endif /* lint */ static void do_syslog __P((int, char *)); @@ -458,9 +460,9 @@ send_mail(line) { FILE *mail; char *p; - int pfd[2]; - pid_t pid; - sigset_t set, oset; + int fd, pfd[2], status; + pid_t pid, rv; + sigaction_t sa; #ifndef NO_ROOT_MAILER static char *root_envp[] = { "HOME=/", @@ -476,18 +478,79 @@ send_mail(line) if (!def_mailerpath || !def_mailto) return; - (void) sigemptyset(&set); - (void) sigaddset(&set, SIGCHLD); - (void) sigaddset(&set, SIGPIPE); - (void) sigprocmask(SIG_BLOCK, &set, &oset); + /* Fork and return, child will daemonize. */ + switch (pid = fork()) { + case -1: + /* Error */ + err(1, "cannot fork"); + break; + case 0: + /* Child */ + switch (pid = fork()) { + case -1: + /* Error. */ + mysyslog(LOG_ERR, "cannot fork: %m"); + _exit(1); + case 0: + /* Grandchild continues below. */ + break; + default: + /* Parent will wait for us. */ + _exit(0); + } + break; + default: + /* Parent */ + do { +#ifdef HAVE_WAITPID + rv = waitpid(pid, &status, 0); +#else + rv = wait(&status); +#endif + } while (rv == -1 && errno == EINTR); + return; + } + + /* Daemonize - disassociate from session/tty. */ +#ifdef HAVE_SETSID + if (setsid() == -1) + warn("setsid"); +#else + setpgrp(0, 0); +# ifdef TIOCNOTTY + if ((fd = open(_PATH_TTY, O_RDWR, 0644)) != -1) { + ioctl(fd, TIOCNOTTY, NULL); + close(fd); + } +# endif +#endif + chdir("/"); + if ((fd = open(_PATH_DEVNULL, O_RDWR, 0644)) != -1) { + (void) dup2(fd, STDIN_FILENO); + (void) dup2(fd, STDOUT_FILENO); + (void) dup2(fd, STDERR_FILENO); + } - if (pipe(pfd) == -1) - err(1, "cannot open pipe"); + /* Close password and other fds so we don't leak. */ + endpwent(); + closefrom(STDERR_FILENO + 1); + + /* Ignore SIGPIPE in case mailer exits prematurely (or is missing). */ + sigemptyset(&sa.sa_mask); + sa.sa_flags = 0; + sa.sa_handler = SIG_IGN; + (void) sigaction(SIGPIPE, &sa, NULL); + + if (pipe(pfd) == -1) { + mysyslog(LOG_ERR, "cannot open pipe: %m"); + _exit(1); + } switch (pid = fork()) { case -1: /* Error. */ - err(1, "cannot fork"); + mysyslog(LOG_ERR, "cannot fork: %m"); + _exit(1); break; case 0: { @@ -518,9 +581,6 @@ send_mail(line) } argv[i] = NULL; - /* Close password file so we don't leak the fd. */ - endpwent(); - /* * Depending on the config, either run the mailer as root * (so user cannot kill it) or as the user (for the paranoid). @@ -532,6 +592,7 @@ send_mail(line) set_perms(PERM_FULL_USER); execv(mpath, argv); #endif /* NO_ROOT_MAILER */ + mysyslog(LOG_ERR, "cannot execute %s: %m", mpath); _exit(127); } break; @@ -563,10 +624,14 @@ send_mail(line) (void) fprintf(mail, "\n\n%s : %s : %s : %s\n\n", user_host, get_timestr(), user_name, line); fclose(mail); - - (void) sigprocmask(SIG_SETMASK, &oset, NULL); - /* If mailer is done, wait for it now. If not, we'll get it later. */ - reapchild(SIGCHLD); + do { +#ifdef HAVE_WAITPID + rv = waitpid(pid, &status, 0); +#else + rv = wait(&status); +#endif + } while (rv == -1 && errno == EINTR); + _exit(0); } /* @@ -597,26 +662,6 @@ mail_auth(status, line) send_mail(line); } -/* - * SIGCHLD sig handler--wait for children as they die. - */ -RETSIGTYPE -reapchild(sig) - int sig; -{ - int status, serrno = errno; -#ifdef sudo_waitpid - pid_t pid; - - do { - pid = sudo_waitpid(-1, &status, WNOHANG); - } while (pid != 0 && (pid != -1 || errno == EINTR)); -#else - (void) wait(&status); -#endif - errno = serrno; -} - /* * Return an ascii string with the current date + time * Uses strftime() if available, else falls back to ctime(). diff --git a/parse.lex b/parse.lex index f1ffddc..41eba10 100644 --- a/parse.lex +++ b/parse.lex @@ -55,7 +55,7 @@ #include #ifndef lint -__unused static const char rcsid[] = "$Sudo: parse.lex,v 1.132.2.8 2008/02/09 14:44:48 millert Exp $"; +__unused static const char rcsid[] = "$Sudo: parse.lex,v 1.132.2.10 2008/06/26 11:53:50 millert Exp $"; #endif /* lint */ #undef yywrap /* guard against a yywrap macro */ @@ -151,7 +151,7 @@ DEFVAR [a-z_]+ } { - \\\n[[:blank:]]* { + \\[[:blank:]]*\n[[:blank:]]* { /* Line continuation char followed by newline. */ ++sudolineno; LEXTRACE("\n"); @@ -163,12 +163,13 @@ DEFVAR [a-z_]+ return(WORD); } - ([^\"\n]|\\\")+ { + \\ { + LEXTRACE("BACKSLASH "); + append(yytext, yyleng); + } + + ([^\"\n\\]|\\\")+ { LEXTRACE("STRBODY "); - /* Push back line continuation char if present */ - if (yyleng > 2 && yytext[yyleng - 1] == '\\' && - isspace((unsigned char)yytext[yyleng - 2])) - yyless(yyleng - 1); append(yytext, yyleng); } } diff --git a/sudo.c b/sudo.c index aec3acf..7348fcf 100644 --- a/sudo.c +++ b/sudo.c @@ -105,7 +105,7 @@ #include "version.h" #ifndef lint -__unused __unused static const char rcsid[] = "$Sudo: sudo.c,v 1.369.2.39 2008/04/10 17:56:05 millert Exp $"; +__unused __unused static const char rcsid[] = "$Sudo: sudo.c,v 1.369.2.41 2008/06/21 19:04:07 millert Exp $"; #endif /* lint */ /* @@ -155,7 +155,7 @@ login_cap_t *lc; #ifdef HAVE_BSD_AUTH_H char *login_style; #endif /* HAVE_BSD_AUTH_H */ -sigaction_t saved_sa_int, saved_sa_quit, saved_sa_tstp, saved_sa_chld; +sigaction_t saved_sa_int, saved_sa_quit, saved_sa_tstp; int @@ -204,8 +204,6 @@ main(argc, argv, envp) (void) sigaction(SIGINT, &sa, &saved_sa_int); (void) sigaction(SIGQUIT, &sa, &saved_sa_quit); (void) sigaction(SIGTSTP, &sa, &saved_sa_tstp); - sa.sa_handler = reapchild; - (void) sigaction(SIGCHLD, &sa, &saved_sa_chld); /* * Turn off core dumps and close open files. @@ -437,7 +435,6 @@ main(argc, argv, envp) (void) sigaction(SIGINT, &saved_sa_int, NULL); (void) sigaction(SIGQUIT, &saved_sa_quit, NULL); (void) sigaction(SIGTSTP, &saved_sa_tstp, NULL); - (void) sigaction(SIGCHLD, &saved_sa_chld, NULL); #ifndef PROFILING if (ISSET(sudo_mode, MODE_BACKGROUND) && fork() > 0) @@ -921,7 +918,10 @@ args_done: warnx("you may not specify environment variables in edit mode"); usage(1); } - + if (ISSET(rval, MODE_PRESERVE_ENV) && ISSET(rval, MODE_LOGIN_SHELL)) { + warnx("you may not specify both the `-i' and `-E' options"); + usage(1); + } if (user_runas != NULL && !ISSET(rval, (MODE_EDIT|MODE_RUN))) { if (excl != '\0') warnx("the `-u' and '-%c' options may not be used together", excl); diff --git a/sudo.cat b/sudo.cat index c75e94b..febd93b 100644 --- a/sudo.cat +++ b/sudo.cat @@ -61,7 +61,7 @@ DDEESSCCRRIIPPTTIIOONN -1.6.9p16 May 8, 2008 1 +1.6.9p17 Jun 21, 2008 1 @@ -127,7 +127,7 @@ OOPPTTIIOONNSS -1.6.9p16 May 8, 2008 2 +1.6.9p17 Jun 21, 2008 2 @@ -193,7 +193,7 @@ SUDO(1m) MAINTENANCE COMMANDS SUDO(1m) -1.6.9p16 May 8, 2008 3 +1.6.9p17 Jun 21, 2008 3 @@ -259,7 +259,7 @@ SUDO(1m) MAINTENANCE COMMANDS SUDO(1m) -1.6.9p16 May 8, 2008 4 +1.6.9p17 Jun 21, 2008 4 @@ -325,7 +325,7 @@ SSEECCUURRIITTYY NNOOTTEESS -1.6.9p16 May 8, 2008 5 +1.6.9p17 Jun 21, 2008 5 @@ -391,7 +391,7 @@ SUDO(1m) MAINTENANCE COMMANDS SUDO(1m) -1.6.9p16 May 8, 2008 6 +1.6.9p17 Jun 21, 2008 6 @@ -457,7 +457,7 @@ FFIILLEESS -1.6.9p16 May 8, 2008 7 +1.6.9p17 Jun 21, 2008 7 @@ -523,7 +523,7 @@ CCAAVVEEAATTSS -1.6.9p16 May 8, 2008 8 +1.6.9p17 Jun 21, 2008 8 @@ -589,6 +589,6 @@ DDIISSCCLLAAIIMMEERR -1.6.9p16 May 8, 2008 9 +1.6.9p17 Jun 21, 2008 9 diff --git a/sudo.man.in b/sudo.man.in index 81933d9..8d881c9 100644 --- a/sudo.man.in +++ b/sudo.man.in @@ -18,7 +18,7 @@ .\" Agency (DARPA) and Air Force Research Laboratory, Air Force .\" Materiel Command, USAF, under agreement number F39502-99-1-0512. .\" -.\" $Sudo: sudo.man.in,v 1.29.2.26 2008/05/08 19:48:23 millert Exp $ +.\" $Sudo: sudo.man.in,v 1.29.2.27 2008/06/22 20:29:03 millert Exp $ .\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 .\" .\" Standard preamble: @@ -150,7 +150,7 @@ .\" ======================================================================== .\" .IX Title "SUDO @mansectsu@" -.TH SUDO @mansectsu@ "May 8, 2008" "1.6.9p16" "MAINTENANCE COMMANDS" +.TH SUDO @mansectsu@ "Jun 21, 2008" "1.6.9p17" "MAINTENANCE COMMANDS" .SH "NAME" sudo, sudoedit \- execute a command as another user .SH "SYNOPSIS" diff --git a/sudo_edit.c b/sudo_edit.c index 5075999..5ed8e66 100644 --- a/sudo_edit.c +++ b/sudo_edit.c @@ -62,10 +62,10 @@ #include "sudo.h" #ifndef lint -__unused static const char rcsid[] = "$Sudo: sudo_edit.c,v 1.6.2.8 2007/09/03 20:28:31 millert Exp $"; +__unused static const char rcsid[] = "$Sudo: sudo_edit.c,v 1.6.2.9 2008/06/21 00:47:52 millert Exp $"; #endif /* lint */ -extern sigaction_t saved_sa_int, saved_sa_quit, saved_sa_tstp, saved_sa_chld; +extern sigaction_t saved_sa_int, saved_sa_quit, saved_sa_tstp; extern char **environ; /* @@ -231,11 +231,10 @@ int sudo_edit(argc, argv, envp) nargv[ac++] = tf[i++].tfile; nargv[ac] = NULL; - /* We wait for our own children and can be suspended. */ + /* Allow the editor to be suspended. */ sigemptyset(&sa.sa_mask); sa.sa_flags = SA_RESTART; sa.sa_handler = SIG_DFL; - (void) sigaction(SIGCHLD, &sa, NULL); (void) sigaction(SIGTSTP, &saved_sa_tstp, NULL); /* @@ -251,7 +250,6 @@ int sudo_edit(argc, argv, envp) /* child */ (void) sigaction(SIGINT, &saved_sa_int, NULL); (void) sigaction(SIGQUIT, &saved_sa_quit, NULL); - (void) sigaction(SIGCHLD, &saved_sa_chld, NULL); set_perms(PERM_FULL_USER); endpwent(); endgrent(); diff --git a/sudoers.cat b/sudoers.cat index b8d57f6..379c699 100644 --- a/sudoers.cat +++ b/sudoers.cat @@ -61,7 +61,7 @@ DDEESSCCRRIIPPTTIIOONN -1.6.9p16 May 8, 2008 1 +1.6.9p17 Jun 21, 2008 1 @@ -127,7 +127,7 @@ SUDOERS(4) MAINTENANCE COMMANDS SUDOERS(4) -1.6.9p16 May 8, 2008 2 +1.6.9p17 Jun 21, 2008 2 @@ -193,7 +193,7 @@ SUDOERS(4) MAINTENANCE COMMANDS SUDOERS(4) -1.6.9p16 May 8, 2008 3 +1.6.9p17 Jun 21, 2008 3 @@ -259,7 +259,7 @@ SUDOERS(4) MAINTENANCE COMMANDS SUDOERS(4) -1.6.9p16 May 8, 2008 4 +1.6.9p17 Jun 21, 2008 4 @@ -325,7 +325,7 @@ SUDOERS(4) MAINTENANCE COMMANDS SUDOERS(4) -1.6.9p16 May 8, 2008 5 +1.6.9p17 Jun 21, 2008 5 @@ -391,7 +391,7 @@ SUDOERS(4) MAINTENANCE COMMANDS SUDOERS(4) -1.6.9p16 May 8, 2008 6 +1.6.9p17 Jun 21, 2008 6 @@ -457,7 +457,7 @@ SUDOERS(4) MAINTENANCE COMMANDS SUDOERS(4) -1.6.9p16 May 8, 2008 7 +1.6.9p17 Jun 21, 2008 7 @@ -523,7 +523,7 @@ SSUUDDOOEERRSS OOPPTTIIOONNSS -1.6.9p16 May 8, 2008 8 +1.6.9p17 Jun 21, 2008 8 @@ -589,7 +589,7 @@ SUDOERS(4) MAINTENANCE COMMANDS SUDOERS(4) -1.6.9p16 May 8, 2008 9 +1.6.9p17 Jun 21, 2008 9 @@ -655,7 +655,7 @@ SUDOERS(4) MAINTENANCE COMMANDS SUDOERS(4) -1.6.9p16 May 8, 2008 10 +1.6.9p17 Jun 21, 2008 10 @@ -721,7 +721,7 @@ SUDOERS(4) MAINTENANCE COMMANDS SUDOERS(4) -1.6.9p16 May 8, 2008 11 +1.6.9p17 Jun 21, 2008 11 @@ -787,7 +787,7 @@ SUDOERS(4) MAINTENANCE COMMANDS SUDOERS(4) -1.6.9p16 May 8, 2008 12 +1.6.9p17 Jun 21, 2008 12 @@ -853,7 +853,7 @@ SUDOERS(4) MAINTENANCE COMMANDS SUDOERS(4) -1.6.9p16 May 8, 2008 13 +1.6.9p17 Jun 21, 2008 13 @@ -919,7 +919,7 @@ SUDOERS(4) MAINTENANCE COMMANDS SUDOERS(4) -1.6.9p16 May 8, 2008 14 +1.6.9p17 Jun 21, 2008 14 @@ -985,7 +985,7 @@ SUDOERS(4) MAINTENANCE COMMANDS SUDOERS(4) -1.6.9p16 May 8, 2008 15 +1.6.9p17 Jun 21, 2008 15 @@ -1051,7 +1051,7 @@ SUDOERS(4) MAINTENANCE COMMANDS SUDOERS(4) -1.6.9p16 May 8, 2008 16 +1.6.9p17 Jun 21, 2008 16 @@ -1117,7 +1117,7 @@ SUDOERS(4) MAINTENANCE COMMANDS SUDOERS(4) -1.6.9p16 May 8, 2008 17 +1.6.9p17 Jun 21, 2008 17 @@ -1183,7 +1183,7 @@ EEXXAAMMPPLLEESS -1.6.9p16 May 8, 2008 18 +1.6.9p17 Jun 21, 2008 18 @@ -1249,7 +1249,7 @@ SUDOERS(4) MAINTENANCE COMMANDS SUDOERS(4) -1.6.9p16 May 8, 2008 19 +1.6.9p17 Jun 21, 2008 19 @@ -1315,7 +1315,7 @@ SUDOERS(4) MAINTENANCE COMMANDS SUDOERS(4) -1.6.9p16 May 8, 2008 20 +1.6.9p17 Jun 21, 2008 20 @@ -1381,7 +1381,7 @@ SUDOERS(4) MAINTENANCE COMMANDS SUDOERS(4) -1.6.9p16 May 8, 2008 21 +1.6.9p17 Jun 21, 2008 21 @@ -1447,7 +1447,7 @@ PPRREEVVEENNTTIINNGG SSHHEELLLL EESSCCAAPPEESS -1.6.9p16 May 8, 2008 22 +1.6.9p17 Jun 21, 2008 22 @@ -1513,7 +1513,7 @@ CCAAVVEEAATTSS -1.6.9p16 May 8, 2008 23 +1.6.9p17 Jun 21, 2008 23 @@ -1579,6 +1579,6 @@ DDIISSCCLLAAIIMMEERR -1.6.9p16 May 8, 2008 24 +1.6.9p17 Jun 21, 2008 24 diff --git a/sudoers.man.in b/sudoers.man.in index 1bb168a..9184006 100644 --- a/sudoers.man.in +++ b/sudoers.man.in @@ -18,7 +18,7 @@ .\" Agency (DARPA) and Air Force Research Laboratory, Air Force .\" Materiel Command, USAF, under agreement number F39502-99-1-0512. .\" -.\" $Sudo: sudoers.man.in,v 1.45.2.28 2008/05/08 19:48:23 millert Exp $ +.\" $Sudo: sudoers.man.in,v 1.45.2.29 2008/06/22 20:29:03 millert Exp $ .\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 .\" .\" Standard preamble: @@ -150,7 +150,7 @@ .\" ======================================================================== .\" .IX Title "SUDOERS @mansectform@" -.TH SUDOERS @mansectform@ "May 8, 2008" "1.6.9p16" "MAINTENANCE COMMANDS" +.TH SUDOERS @mansectform@ "Jun 21, 2008" "1.6.9p17" "MAINTENANCE COMMANDS" .SH "NAME" sudoers \- list of which users may execute what .SH "DESCRIPTION" diff --git a/tgetpass.c b/tgetpass.c index 9e22b5d..2c94cdb 100644 --- a/tgetpass.c +++ b/tgetpass.c @@ -70,7 +70,7 @@ #include "sudo.h" #ifndef lint -__unused static const char rcsid[] = "$Sudo: tgetpass.c,v 1.111.2.6 2008/01/16 18:03:24 millert Exp $"; +__unused static const char rcsid[] = "$Sudo: tgetpass.c,v 1.111.2.7 2008/06/21 00:27:01 millert Exp $"; #endif /* lint */ #ifndef TCSASOFT @@ -88,14 +88,6 @@ __unused static const char rcsid[] = "$Sudo: tgetpass.c,v 1.111.2.6 2008/01/16 1 # endif #endif -/* - * QNX 6 (at least) has issues with TCSAFLUSH. - */ -#ifdef __QNX__ -#undef TCSAFLUSH -#define TCSAFLUSH TCSADRAIN -#endif - /* * Compat macros for non-termios systems. */ diff --git a/version.h b/version.h index 0afb1a0..c9459cc 100644 --- a/version.h +++ b/version.h @@ -17,12 +17,12 @@ * Agency (DARPA) and Air Force Research Laboratory, Air Force * Materiel Command, USAF, under agreement number F39502-99-1-0512. * - * $Sudo: version.h,v 1.66.2.19 2008/05/08 19:48:24 millert Exp $ + * $Sudo: version.h,v 1.66.2.20 2008/06/22 20:29:03 millert Exp $ */ #ifndef _SUDO_VERSION_H #define _SUDO_VERSION_H -static const char version[] = "1.6.9p16"; +static const char version[] = "1.6.9p17"; #endif /* _SUDO_VERSION_H */ diff --git a/visudo.c b/visudo.c index 0310d84..4fdcd8f 100644 --- a/visudo.c +++ b/visudo.c @@ -78,7 +78,7 @@ #include "version.h" #ifndef lint -__unused static const char rcsid[] = "$Sudo: visudo.c,v 1.166.2.10 2007/09/01 13:39:13 millert Exp $"; +__unused static const char rcsid[] = "$Sudo: visudo.c,v 1.166.2.11 2008/06/21 00:47:52 millert Exp $"; #endif /* lint */ struct sudoersfile { @@ -590,12 +590,7 @@ run_command(path, argv) char **argv; { int status; - pid_t pid; - sigset_t set, oset; - - (void) sigemptyset(&set); - (void) sigaddset(&set, SIGCHLD); - (void) sigprocmask(SIG_BLOCK, &set, &oset); + pid_t pid, rv; switch (pid = fork()) { case -1: @@ -603,7 +598,6 @@ run_command(path, argv) Exit(-1); break; /* NOTREACHED */ case 0: - (void) sigprocmask(SIG_SETMASK, &oset, NULL); endpwent(); closefrom(STDERR_FILENO + 1); execv(path, argv); @@ -612,15 +606,15 @@ run_command(path, argv) break; /* NOTREACHED */ } + do { #ifdef sudo_waitpid - pid = sudo_waitpid(pid, &status, 0); + rv = sudo_waitpid(pid, &status, 0); #else - pid = wait(&status); + rv = wait(&status); #endif + } while (rv == -1 && errno == EINTR); - (void) sigprocmask(SIG_SETMASK, &oset, NULL); - - if (pid == -1 || !WIFEXITED(status)) + if (rv == -1 || !WIFEXITED(status)) return(-1); return(WEXITSTATUS(status)); } diff --git a/visudo.cat b/visudo.cat index 742716f..7eed3c7 100644 --- a/visudo.cat +++ b/visudo.cat @@ -61,7 +61,7 @@ OOPPTTIIOONNSS -1.6.9p16 May 8, 2008 1 +1.6.9p17 Jun 21, 2008 1 @@ -127,7 +127,7 @@ DDIIAAGGNNOOSSTTIICCSS -1.6.9p16 May 8, 2008 2 +1.6.9p17 Jun 21, 2008 2 @@ -193,6 +193,6 @@ DDIISSCCLLAAIIMMEERR -1.6.9p16 May 8, 2008 3 +1.6.9p17 Jun 21, 2008 3 diff --git a/visudo.man.in b/visudo.man.in index 5275ffe..87ca8ab 100644 --- a/visudo.man.in +++ b/visudo.man.in @@ -17,7 +17,7 @@ .\" Agency (DARPA) and Air Force Research Laboratory, Air Force .\" Materiel Command, USAF, under agreement number F39502-99-1-0512. .\" -.\" $Sudo: visudo.man.in,v 1.20.2.21 2008/05/08 19:48:24 millert Exp $ +.\" $Sudo: visudo.man.in,v 1.20.2.22 2008/06/22 20:29:03 millert Exp $ .\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 .\" .\" Standard preamble: @@ -149,7 +149,7 @@ .\" ======================================================================== .\" .IX Title "VISUDO @mansectsu@" -.TH VISUDO @mansectsu@ "May 8, 2008" "1.6.9p16" "MAINTENANCE COMMANDS" +.TH VISUDO @mansectsu@ "Jun 21, 2008" "1.6.9p17" "MAINTENANCE COMMANDS" .SH "NAME" visudo \- edit the sudoers file .SH "SYNOPSIS"