Imported Upstream version 1.6.9p17 upstream/1.6.9p17
authorBdale Garbee <bdale@gag.com>
Sun, 6 Jul 2008 07:12:51 +0000 (01:12 -0600)
committerBdale Garbee <bdale@gag.com>
Sun, 6 Jul 2008 07:12:51 +0000 (01:12 -0600)
20 files changed:
CHANGES
Makefile.in
config.h.in
configure
configure.in
env.c
lex.yy.c
logging.c
parse.lex
sudo.c
sudo.cat
sudo.man.in
sudo_edit.c
sudoers.cat
sudoers.man.in
tgetpass.c
version.h
visudo.c
visudo.cat
visudo.man.in

diff --git a/CHANGES b/CHANGES
index c1dc01b2bf9359e8dea244e1a9211115343409ee..42c786283967d239b499369d7739c6e17c77096f 100644 (file)
--- 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.
index c47e1c4414b688aac6845d4f847c1aa865bd522c..1650803fe2a81674e24b1123de51942454364eaf 100644 (file)
@@ -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 \
index ab33f134111ea3ebb7c293c02dbda0f1a5645f03..a009a090ae5c041ab0732fdde0061cb492716e07 100644 (file)
 /* 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
 
index b786dde0bc869d45b537b1fa0a98cf1d786702f7..c2fd1925a17cfa8c7fee8ed5263fbc2e6b87b2b1 100755 (executable)
--- 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;
 }
 
        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 <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> 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 <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#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 <libintl.h>
 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
index c8a249e567813b5352930091dc08edce2c11afa6..109fc9a721f750e3893fd5b7734d555bde58da18 100644 (file)
@@ -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 <Todd.Miller@courtesan.com>
 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 <sys/types.h>
-#include <$ac_header_dirent>]], [[DIR d; (void)dirfd(&d);]])], [AC_DEFINE(HAVE_DIRFD)], [AC_TRY_LINK([#include <sys/types.h>
+#include <$ac_header_dirent>]], [[DIR *d; (void)dirfd(d);]])], [AC_DEFINE(HAVE_DIRFD)], [AC_TRY_LINK([#include <sys/types.h>
 #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 <libintl.h>]], [(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 ba2c7ac9e60f1e9f64376774a8043d883df9ee14..dba495511509ae6eb89c8fc1210425469488bb05 100644 (file)
--- 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 ||
index 68405fbd7388e180ab1f591721e25ff991ffde56..b05dd92b02ff7bf524e99ae8f053080aaf6ed125 100644 (file)
--- 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 <sudo.tab.h>
 
 #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)
index bcc3cc2b5a2709198b638551a2f4c1b9ada36605..80d0f5a37d12a728b3027debf9428b93ecf5f3c7 100644 (file)
--- a/logging.c
+++ b/logging.c
@@ -27,6 +27,7 @@
 #include <sys/types.h>
 #include <sys/param.h>
 #include <sys/stat.h>
+#include <sys/ioctl.h>
 #include <sys/wait.h>
 #include <stdio.h>
 #ifdef STDC_HEADERS
 #include <signal.h>
 #include <time.h>
 #include <errno.h>
+#include <fcntl.h>
 
 #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().
index f1ffddcf2f6adb3311f9c2f6dc543f1b4240fbc8..41eba105d28f29979f4834f4c7ad35934593514d 100644 (file)
--- a/parse.lex
+++ b/parse.lex
@@ -55,7 +55,7 @@
 #include <sudo.tab.h>
 
 #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_]+
 }
 
 <INSTR>{
-    \\\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 aec3acf6bc6f2d74b48fe96d8f29077fae528bc3..7348fcf43e61200a1f88dd33d4bc45b7325eb55a 100644 (file)
--- a/sudo.c
+++ b/sudo.c
 #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);
index c75e94b6e26a7a218d3be71304d4fb52ab0344c1..febd93bf2133338775d52452f181e7bf83b2ae62 100644 (file)
--- a/sudo.cat
+++ b/sudo.cat
@@ -61,7 +61,7 @@ D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
 
 
 
-1.6.9p16                   May  8, 2008                         1
+1.6.9p17                   Jun 21, 2008                         1
 
 
 
@@ -127,7 +127,7 @@ O\bOP\bPT\bTI\bIO\bON\bNS\bS
 
 
 
-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 @@ S\bSE\bEC\bCU\bUR\bRI\bIT\bTY\bY N\bNO\bOT\bTE\bES\bS
 
 
 
-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 @@ F\bFI\bIL\bLE\bES\bS
 
 
 
-1.6.9p16                   May  8, 2008                         7
+1.6.9p17                   Jun 21, 2008                         7
 
 
 
@@ -523,7 +523,7 @@ C\bCA\bAV\bVE\bEA\bAT\bTS\bS
 
 
 
-1.6.9p16                   May  8, 2008                         8
+1.6.9p17                   Jun 21, 2008                         8
 
 
 
@@ -589,6 +589,6 @@ D\bDI\bIS\bSC\bCL\bLA\bAI\bIM\bME\bER\bR
 
 
 
-1.6.9p16                   May  8, 2008                         9
+1.6.9p17                   Jun 21, 2008                         9
 
 
index 81933d94115abc0e86f4b770b8507156bca21450..8d881c90d93bd574398d3bd7ec663b1f1ab947b3 100644 (file)
@@ -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:
 .\" ========================================================================
 .\"
 .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"
index 5075999651849d5f811c653d6afbe57b215caeb0..5ed8e66ce92a29c8a2463f541582e3851288a0fe 100644 (file)
 #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();
index b8d57f66a66dbd50aa3d7b68169898f09bbb109e..379c6994f43e5bca9337939b41001f1e36d82c10 100644 (file)
@@ -61,7 +61,7 @@ D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
 
 
 
-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 @@ S\bSU\bUD\bDO\bOE\bER\bRS\bS O\bOP\bPT\bTI\bIO\bON\bNS\bS
 
 
 
-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 @@ E\bEX\bXA\bAM\bMP\bPL\bLE\bES\bS
 
 
 
-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 @@ P\bPR\bRE\bEV\bVE\bEN\bNT\bTI\bIN\bNG\bG S\bSH\bHE\bEL\bLL\bL E\bES\bSC\bCA\bAP\bPE\bES\bS
 
 
 
-1.6.9p16                   May  8, 2008                        22
+1.6.9p17                   Jun 21, 2008                        22
 
 
 
@@ -1513,7 +1513,7 @@ C\bCA\bAV\bVE\bEA\bAT\bTS\bS
 
 
 
-1.6.9p16                   May  8, 2008                        23
+1.6.9p17                   Jun 21, 2008                        23
 
 
 
@@ -1579,6 +1579,6 @@ D\bDI\bIS\bSC\bCL\bLA\bAI\bIM\bME\bER\bR
 
 
 
-1.6.9p16                   May  8, 2008                        24
+1.6.9p17                   Jun 21, 2008                        24
 
 
index 1bb168ab21c4c905f5b67dfd090a26cb5f942a06..9184006f5ceef09aa58f0ad655578c4876973ace 100644 (file)
@@ -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:
 .\" ========================================================================
 .\"
 .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"
index 9e22b5d64c26e778635bdfac770c0f7749e5ad4f..2c94cdb11a26083cbaae183f56de0d823c4cfbaf 100644 (file)
@@ -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.
  */
index 0afb1a04aede62856af3be8c00570ff6551fc7cc..c9459cc1957d3b2bc428f4a676ce91393866db36 100644 (file)
--- a/version.h
+++ b/version.h
  * 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 */
index 0310d84d4cd28f511f91ce4bc146218e468eb376..4fdcd8f46a3718e7ed255a5c9ad5e0c7f46b0c39 100644 (file)
--- 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));
 }
index 742716f9ab6a4ca6a90352b1547bec469864d999..7eed3c7bd0fd533448d95700df0053673f2f963d 100644 (file)
@@ -61,7 +61,7 @@ O\bOP\bPT\bTI\bIO\bON\bNS\bS
 
 
 
-1.6.9p16                   May  8, 2008                         1
+1.6.9p17                   Jun 21, 2008                         1
 
 
 
@@ -127,7 +127,7 @@ D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
 
 
 
-1.6.9p16                   May  8, 2008                         2
+1.6.9p17                   Jun 21, 2008                         2
 
 
 
@@ -193,6 +193,6 @@ D\bDI\bIS\bSC\bCL\bLA\bAI\bIM\bME\bER\bR
 
 
 
-1.6.9p16                   May  8, 2008                         3
+1.6.9p17                   Jun 21, 2008                         3
 
 
index 5275ffeec9d3c7235e5c8d5e6b0017fce866bb73..87ca8ab76bf0b56dc79bf511dd43d510efc48982 100644 (file)
@@ -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:
 .\" ========================================================================
 .\"
 .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"