diff --git a/Common/Colors.h b/Common/Colors.h
index 4cdf0bb43013631e1155976f808a835b6665372d..68b1e4fac4f25efa250dfda760088ced00470749 100644
--- a/Common/Colors.h
+++ b/Common/Colors.h
@@ -1,63 +1,9 @@
-/* $Id: Colors.h,v 1.2 2000-11-23 14:11:27 geuzaine Exp $ */
+/* $Id: Colors.h,v 1.3 2000-12-05 15:23:54 geuzaine Exp $ */
 #ifndef _COLORS_H_
 #define _COLORS_H_
 
 #include "Context.h"
 
-extern Context_T   CTX ;
-
-StringXPointer ColorGeneral[] = {
-  { "Background" , &CTX.color.bg          },
-  { "Foreground" , &CTX.color.fg          },
-  { "Text"       , &CTX.color.text        },
-  { "Axes"       , &CTX.color.axes        },
-  { "SmallAxes"  , &CTX.color.little_axes },
-  { NULL         , NULL                }
-} ;
-
-StringXPointer ColorGeometry[] = {
-  { "Points"             , &CTX.color.geom.point        },
-  { "Lines"              , &CTX.color.geom.line         },
-  { "Surfaces"           , &CTX.color.geom.surface      },
-  { "Volumes"            , &CTX.color.geom.volume       },
-  { "PointsSelect"       , &CTX.color.geom.point_sel    },
-  { "LinesSelect"        , &CTX.color.geom.line_sel     },
-  { "SurfacesSelect"     , &CTX.color.geom.surface_sel  },
-  { "VolumesSelect"      , &CTX.color.geom.volume_sel   },
-  { "PointsHighlight"    , &CTX.color.geom.point_hlt    },
-  { "LinesHighlight"     , &CTX.color.geom.line_hlt     },
-  { "SurfacesHighlight"  , &CTX.color.geom.surface_hlt  },
-  { "VolumesHighlight"   , &CTX.color.geom.volume_hlt   },
-  { "Tangents"           , &CTX.color.geom.tangents     },
-  { "Normals"            , &CTX.color.geom.normals      },
-  { NULL                 , NULL                         }
-} ;
-
-StringXPointer ColorMesh[] = {
-  { "Points"             , &CTX.color.mesh.vertex       },
-  { "PointsSupp"         , &CTX.color.mesh.vertex_supp  },
-  { "Lines"              , &CTX.color.mesh.line         },
-  { "Triangles"          , &CTX.color.mesh.triangle     },
-  { "Quadrangles"        , &CTX.color.mesh.quadrangle   },
-  { "Tetrahedra"         , &CTX.color.mesh.tetrahedron  },
-  { "Hexahedra"          , &CTX.color.mesh.hexahedron   },
-  { "Prisms"             , &CTX.color.mesh.prism        },
-  { "Pyramids"           , &CTX.color.mesh.pyramid      },
-  { "Tangents"           , &CTX.color.mesh.tangents     },
-  { "Normals"            , &CTX.color.mesh.normals      },
-  { "One"                , &CTX.color.mesh.carousel[0]  },
-  { "Two"                , &CTX.color.mesh.carousel[1]  },
-  { "Three"              , &CTX.color.mesh.carousel[2]  },
-  { "Four"               , &CTX.color.mesh.carousel[3]  },
-  { "Five"               , &CTX.color.mesh.carousel[4]  },
-  { "Six"                , &CTX.color.mesh.carousel[5]  },
-  { "Seven"              , &CTX.color.mesh.carousel[6]  },
-  { "Eight"              , &CTX.color.mesh.carousel[7]  },
-  { "Nine"               , &CTX.color.mesh.carousel[8]  },
-  { "Ten"                , &CTX.color.mesh.carousel[9]  },
-  { NULL                 , NULL                         }
-} ;
-
 StringX4Int ColorString[] = {
   { "Snow"                     ,  255, 250, 250, 255 } , 
   { "GhostWhite"               ,  248, 248, 255, 255 } , 
@@ -720,6 +666,8 @@ StringX4Int ColorString[] = {
   { NULL                       ,  0  ,   0,   0, 255 }
 } ;
 
+int Get_ColorForString(StringX4Int SX4I[], int alpha, 
+		       char * string, int * FlagError);
 
 
 #endif
diff --git a/Common/Context.cpp b/Common/Context.cpp
index 79e93e93f9c530a2fbd8aebadc0ebf43b111bb21..d7a402d96c59d4fddf38c60ae804ba206f1eec7a 100644
--- a/Common/Context.cpp
+++ b/Common/Context.cpp
@@ -1,4 +1,4 @@
-/* $Id: Context.cpp,v 1.9 2000-12-04 11:28:11 geuzaine Exp $ */
+/* $Id: Context.cpp,v 1.10 2000-12-05 15:23:54 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "Const.h"
@@ -7,394 +7,386 @@
 #include "Draw.h"
 #include "Context.h"
 
-void InitColors(rgbacolors * col, int num){
+extern Context_T CTX ;
 
-  if(col->id == num){
-    return ;
+extern StringXString GeneralOptions_String[] ;
+extern StringXString GeometryOptions_String[] ;
+extern StringXString MeshOptions_String[] ;
+extern StringXString PostProcessingOptions_String[] ;
+extern StringXString PrintOptions_String[] ;
+
+extern StringXNumber GeneralOptions_Number[] ;
+extern StringXNumber GeometryOptions_Number[] ;
+extern StringXNumber MeshOptions_Number[] ;
+extern StringXNumber PostProcessingOptions_Number[] ;
+extern StringXNumber PrintOptions_Number[] ;
+
+extern StringXArray GeneralOptions_Array[] ;
+extern StringXArray GeometryOptions_Array[] ;
+extern StringXArray MeshOptions_Array[] ;
+extern StringXArray PostProcessingOptions_Array[] ;
+extern StringXArray PrintOptions_Array[] ;
+
+extern StringXColor GeneralOptions_Color[] ;
+extern StringXColor GeometryOptions_Color[] ;
+extern StringXColor MeshOptions_Color[] ;
+extern StringXColor PostProcessingOptions_Color[] ;
+extern StringXColor PrintOptions_Color[] ;
+
+
+// STRING OPTIONS
+
+void Set_DefaultStringOptions(StringXString s[]){
+  int i = 0;
+  while(s[i].str){
+    *s[i].ptr = s[i].def ;
+    i++;
   }
+}
 
-  col->id = num ;
+int Set_StringOption(char *str, StringXString s[], char *val){
+  int  i = 0 ;
 
-  switch(num){
+  while ((s[i].str != NULL) && (strcmp(s[i].str, str))) i++ ;
+  if(!s[i].str)
+    return 0;
+  else{
+    *s[i].ptr = val ;
+    return 1;
+  }
+}
 
-  case 0 : /* default drawing colors: black background */
-  case 1 : /* alternative drawing colors: white background */
-    switch(num){
-    case 0 :
-      col->bg               = PACK_COLOR(0,   0,   0,   255) ;
-      col->fg               = PACK_COLOR(255, 255, 255, 255) ;
-      col->text             = PACK_COLOR(255, 255, 255, 255) ;
-      col->axes             = PACK_COLOR(255, 255, 0,   255) ;
-      col->little_axes      = PACK_COLOR(255, 255, 255, 255) ;
-      break;              
-    case 1 :              
-      col->bg               = PACK_COLOR(255, 255, 255, 255) ;
-      col->fg               = PACK_COLOR(0,   0,   0,   255) ;
-      col->text             = PACK_COLOR(0,   0,   0,   255) ;
-      col->axes             = PACK_COLOR(128, 128, 128, 255) ;
-      col->little_axes      = PACK_COLOR(0,   0,   0,   255) ;
+void Print_StringOptions(StringXString s[], FILE *file){
+  int i = 0;
+
+  while(s[i].str){
+    fprintf(file, "    %s = \"%s\";\n", s[i].str, *s[i].ptr) ;
+    i++;
+  }
+}
+
+// NUMBER OPTIONS
+
+void Set_DefaultNumberOptions(StringXNumber s[]){
+  int i = 0;
+  
+  while(s[i].str){
+    switch(s[i].type){
+    case GMSH_INT: *(int*)s[i].ptr = (int)s[i].def; break;
+    case GMSH_LONG: *(long*)s[i].ptr = (long)s[i].def; break;
+    case GMSH_FLOAT: *(float*)s[i].ptr = (float)s[i].def; break;
+    case GMSH_DOUBLE: *(double*)s[i].ptr = (double)s[i].def; break;
+    }
+    i++;
+  }
+}
+
+int Set_NumberOption(char *str, StringXNumber s[], double val){
+  int i = 0;
+
+  while ((s[i].str != NULL) && (strcmp(s[i].str, str))) i++ ;
+  if(!s[i].str)
+    return 0;
+  else{
+    switch(s[i].type){
+    case GMSH_INT: *(int*)s[i].ptr = (int)val; break;
+    case GMSH_LONG: *(long*)s[i].ptr = (long)val; break;
+    case GMSH_FLOAT: *(float*)s[i].ptr = (float)val; break;
+    case GMSH_DOUBLE: *(double*)s[i].ptr = (double)val; break;
+    }
+    return 1;
+  }
+}
+
+void Print_NumberOptions(StringXNumber s[], FILE *file){
+  int i = 0;
+
+  while(s[i].str){
+    switch(s[i].type){
+    case GMSH_INT : fprintf(file, "    %s = %d;\n", s[i].str, *(int*)s[i].ptr); break;
+    case GMSH_LONG : fprintf(file, "    %s = %ld;\n", s[i].str, *(long*)s[i].ptr); break;
+    case GMSH_FLOAT : fprintf(file, "    %s = %g;\n", s[i].str, *(float*)s[i].ptr); break;
+    case GMSH_DOUBLE : fprintf(file, "    %s = %g;\n", s[i].str, *(double*)s[i].ptr); break;
+    }
+    i++;
+  }
+}
+
+
+// ARRAY OPTIONS
+
+void Set_DefaultArrayOptions(StringXArray s[]){
+  int i = 0;
+  
+  while(s[i].str){
+    switch(s[i].type){
+    case GMSH_INT:
+      ((int*)s[i].ptr)[0] = (int)s[i].def1;
+      ((int*)s[i].ptr)[1] = (int)s[i].def2;
+      ((int*)s[i].ptr)[2] = (int)s[i].def3;
+      ((int*)s[i].ptr)[3] = (int)s[i].def4;
+      break;
+    case GMSH_LONG:
+      ((long*)s[i].ptr)[0] = (long)s[i].def1;
+      ((long*)s[i].ptr)[1] = (long)s[i].def2;
+      ((long*)s[i].ptr)[2] = (long)s[i].def3;
+      ((long*)s[i].ptr)[3] = (long)s[i].def4;
+      break;
+    case GMSH_FLOAT:
+      ((float*)s[i].ptr)[0] = (float)s[i].def1;
+      ((float*)s[i].ptr)[1] = (float)s[i].def2;
+      ((float*)s[i].ptr)[2] = (float)s[i].def3;
+      ((float*)s[i].ptr)[3] = (float)s[i].def4;
+      break;
+    case GMSH_DOUBLE:
+      ((double*)s[i].ptr)[0] = (double)s[i].def1;
+      ((double*)s[i].ptr)[1] = (double)s[i].def2;
+      ((double*)s[i].ptr)[2] = (double)s[i].def3;
+      ((double*)s[i].ptr)[3] = (double)s[i].def4;
       break;
     }
-    col->geom.point         = PACK_COLOR(178, 182, 129, 255) ;
-    col->geom.line          = PACK_COLOR(0,   0,   255, 255) ;
-    col->geom.surface       = PACK_COLOR(128, 128, 128, 255) ;
-    col->geom.volume        = PACK_COLOR(128, 128, 128, 255) ;
-    col->geom.point_sel     = PACK_COLOR(255, 0,   0,   255) ;
-    col->geom.line_sel      = PACK_COLOR(255, 0,   0,   255) ;
-    col->geom.surface_sel   = PACK_COLOR(255, 0,   0,   255) ;
-    col->geom.volume_sel    = PACK_COLOR(255, 0,   0,   255) ;
-    col->geom.point_hlt     = PACK_COLOR(0,   255, 0,   255) ;
-    col->geom.line_hlt      = PACK_COLOR(0,   0,   255, 255) ;
-    col->geom.surface_hlt   = PACK_COLOR(128, 128, 128, 255) ;
-    col->geom.volume_hlt    = PACK_COLOR(128, 128, 128, 255) ;
-    col->geom.tangents      = PACK_COLOR(255, 255, 0,   255) ;
-    col->geom.normals       = PACK_COLOR(255, 0,   0,   255) ;
-
-    col->mesh.vertex        = PACK_COLOR(0  , 123, 59 , 255) ;
-    col->mesh.vertex_supp   = PACK_COLOR(255, 0,   255, 255) ;
-    col->mesh.line          = PACK_COLOR(0,   255, 0,   255) ; 
-    col->mesh.triangle      = PACK_COLOR(0,   255, 0,   255) ;
-    col->mesh.quadrangle    = PACK_COLOR(0,   255, 0,   255) ; 
-    col->mesh.tetrahedron   = PACK_COLOR(0,   255, 0,   255) ;
-    col->mesh.hexahedron    = PACK_COLOR(128, 255, 0,   255) ;
-    col->mesh.prism         = PACK_COLOR(0,   255, 128, 255) ;
-    col->mesh.pyramid       = PACK_COLOR(128, 255, 128, 255) ;
-    col->mesh.tangents      = PACK_COLOR(128, 128, 128, 255) ;
-    col->mesh.normals       = PACK_COLOR(128, 128, 128, 255) ;
-
-    col->mesh.carousel[0]   = PACK_COLOR(0  , 82 , 138, 255) ;
-    col->mesh.carousel[1]   = PACK_COLOR(255, 0  , 0  , 255) ;
-    col->mesh.carousel[2]   = PACK_COLOR(31 , 110, 171, 255) ;
-    col->mesh.carousel[3]   = PACK_COLOR(255, 255, 0  , 255) ; 
-    col->mesh.carousel[4]   = PACK_COLOR(255, 0  , 255, 255) ; 
-    col->mesh.carousel[4]   = PACK_COLOR(0  , 255, 255, 255) ; 
-    col->mesh.carousel[5]   = PACK_COLOR(128, 128, 0  , 255) ; 
-    col->mesh.carousel[6]   = PACK_COLOR(128, 0  , 255, 255) ; 
-    col->mesh.carousel[7]   = PACK_COLOR(128, 128, 255, 255) ; 
-    col->mesh.carousel[8]   = PACK_COLOR(128, 128, 255, 255) ; 
-    col->mesh.carousel[9]   = PACK_COLOR(0  , 0  , 255, 255) ; 
-    break;
-    
-  case 2 : /* grayscale */
-    col->bg                 = PACK_COLOR(255, 255, 255, 255) ;
-    col->fg                 = PACK_COLOR(0,   0,   0,   255) ;
-    col->text               = PACK_COLOR(0,   0,   0,   255) ;
-    col->axes               = PACK_COLOR(0,   0,   0,   255) ;
-    col->little_axes        = PACK_COLOR(0,   0,   0,   255) ;
-    
-    col->geom.point         = PACK_COLOR(0,   0,   0,   255) ;
-    col->geom.line          = PACK_COLOR(0,   0,   0,   255) ;
-    col->geom.surface       = PACK_COLOR(0,   0,   0,   255) ; 
-    col->geom.volume        = PACK_COLOR(0,   0,   0,   255) ;
-    col->geom.point_sel     = PACK_COLOR(0,   0,   0,   255) ;
-    col->geom.line_sel      = PACK_COLOR(0,   0,   0,   255) ;
-    col->geom.surface_sel   = PACK_COLOR(0,   0,   0,   255) ; 
-    col->geom.volume_sel    = PACK_COLOR(0,   0,   0,   255) ;
-    col->geom.point_hlt     = PACK_COLOR(0,   0,   0,   255) ;
-    col->geom.line_hlt      = PACK_COLOR(0,   0,   0,   255) ;
-    col->geom.surface_hlt   = PACK_COLOR(0,   0,   0,   255) ; 
-    col->geom.volume_hlt    = PACK_COLOR(0,   0,   0,   255) ;
-    col->geom.tangents      = PACK_COLOR(0,   0,   0,   255) ;
-    col->geom.normals       = PACK_COLOR(0,   0,   0,   255) ;
-    
-    col->mesh.vertex        = PACK_COLOR(0,   0,   0,   255) ;
-    col->mesh.vertex_supp   = PACK_COLOR(0,   0,   0,   255) ;
-    col->mesh.line          = PACK_COLOR(0,   0,   0,   255) ; 
-    col->mesh.triangle      = PACK_COLOR(0,   0,   0,   255) ;
-    col->mesh.quadrangle    = PACK_COLOR(0,   0,   0,   255) ; 
-    col->mesh.tetrahedron   = PACK_COLOR(0,   0,   0,   255) ;
-    col->mesh.hexahedron    = PACK_COLOR(0,   0,   0,   255) ;
-    col->mesh.prism         = PACK_COLOR(0,   0,   0,   255) ;
-    col->mesh.pyramid       = PACK_COLOR(0,   0,   0,   255) ;
-    col->mesh.tangents      = PACK_COLOR(0,   0,   0,   255) ;
-    col->mesh.normals       = PACK_COLOR(0,   0,   0,   255) ;
-
-    col->mesh.carousel[0]   = PACK_COLOR(255, 255, 255, 255) ;
-    col->mesh.carousel[1]   = PACK_COLOR(255, 255, 255, 255) ;
-    col->mesh.carousel[2]   = PACK_COLOR(255, 255, 255, 255) ;
-    col->mesh.carousel[3]   = PACK_COLOR(255, 255, 255, 255) ;
-    col->mesh.carousel[4]   = PACK_COLOR(255, 255, 255, 255) ;
-    col->mesh.carousel[4]   = PACK_COLOR(255, 255, 255, 255) ;
-    col->mesh.carousel[5]   = PACK_COLOR(255, 255, 255, 255) ;
-    col->mesh.carousel[6]   = PACK_COLOR(255, 255, 255, 255) ;
-    col->mesh.carousel[7]   = PACK_COLOR(255, 255, 255, 255) ;
-    col->mesh.carousel[8]   = PACK_COLOR(255, 255, 255, 255) ;
-    col->mesh.carousel[9]   = PACK_COLOR(255, 255, 255, 255) ;
+    i++;
+  }
+}
 
+int Set_ArrayOption(char *str, StringXArray s[], double *val){
+  int i = 0;
+
+  while ((s[i].str != NULL) && (strcmp(s[i].str, str))) i++ ;
+  if(!s[i].str)
+    return 0;
+  else{
+    switch(s[i].type){
+    case GMSH_INT: 
+      ((int*)s[i].ptr)[0] = (int)val[0]; 
+      ((int*)s[i].ptr)[1] = (int)val[1]; 
+      ((int*)s[i].ptr)[2] = (int)val[2]; 
+      ((int*)s[i].ptr)[3] = (int)val[3]; 
+      break;
+    case GMSH_LONG: 
+      ((long*)s[i].ptr)[0] = (long)val[0]; 
+      ((long*)s[i].ptr)[1] = (long)val[1]; 
+      ((long*)s[i].ptr)[2] = (long)val[2]; 
+      ((long*)s[i].ptr)[3] = (long)val[3]; 
+      break;
+    case GMSH_FLOAT: 
+      ((float*)s[i].ptr)[0] = (float)val[0]; 
+      ((float*)s[i].ptr)[1] = (float)val[1]; 
+      ((float*)s[i].ptr)[2] = (float)val[2]; 
+      ((float*)s[i].ptr)[3] = (float)val[3]; 
+      break;
+    case GMSH_DOUBLE: 
+      ((double*)s[i].ptr)[0] = (double)val[0]; 
+      ((double*)s[i].ptr)[1] = (double)val[1]; 
+      ((double*)s[i].ptr)[2] = (double)val[2]; 
+      ((double*)s[i].ptr)[3] = (double)val[3]; 
+      break;
+    }
+    return 1;
   }
+}
 
+void Print_ArrayOptions(StringXArray s[], FILE *file){
+  int i = 0;
+
+  while(s[i].str){
+    fprintf(file, "    %s = {", s[i].str);
+    switch(s[i].type){
+    case GMSH_INT : 
+      fprintf(file, "%d,%d,%d,%d};\n", 
+	      ((int*)s[i].ptr)[0], ((int*)s[i].ptr)[1], 
+	      ((int*)s[i].ptr)[2], ((int*)s[i].ptr)[3]); 
+      break;
+    case GMSH_LONG : 
+      fprintf(file, "%ld,%ld,%ld,%ld};\n", 
+	      ((long*)s[i].ptr)[0], ((long*)s[i].ptr)[1], 
+	      ((long*)s[i].ptr)[2], ((long*)s[i].ptr)[3]); 
+      break;
+    case GMSH_FLOAT : 
+      fprintf(file, "%g,%g,%g,%g};\n", 
+	      ((float*)s[i].ptr)[0], ((float*)s[i].ptr)[1], 
+	      ((float*)s[i].ptr)[2], ((float*)s[i].ptr)[3]); 
+      break;
+    case GMSH_DOUBLE : 
+      fprintf(file, "%g,%g,%g,%g};\n", 
+	      ((double*)s[i].ptr)[0], ((double*)s[i].ptr)[1], 
+	      ((double*)s[i].ptr)[2], ((double*)s[i].ptr)[3]); 
+      break;
+    }
+    i++;
+  }
 }
 
 
-void InitContext(Context_T *ctx){
-
-  ctx->interactive  = 0 ;
-  ctx->verbosity    = 2 ;
-  ctx->expose       = 0 ;
-
-  ctx->r[0]  = 0.0 ;
-  ctx->r[1]  = 0.0 ;
-  ctx->r[2]  = 0.0 ;
-  ctx->t[0]  = 0.0 ;
-  ctx->t[1]  = 0.0 ;
-  ctx->t[2]  = 0.0 ;
-  ctx->s[0]  = 1.0 ;
-  ctx->s[1]  = 1.0 ;
-  ctx->s[2]  = 1.0 ;
-
-  ctx->min[0]     = 0.0 ;
-  ctx->min[1]     = 0.0 ;
-  ctx->min[2]     = 0.0 ;
-  ctx->max[0]     = 0.0 ;
-  ctx->max[1]     = 0.0 ;
-  ctx->max[2]     = 0.0 ;
-  ctx->range[0]   = 0.0 ;
-  ctx->range[1]   = 0.0 ;
-  ctx->range[2]   = 0.0 ;
-
-  ctx->viewport[0]     = 0 ;
-  ctx->viewport[1]     = 0 ;
-  ctx->viewport[2]     = 1 ;
-  ctx->viewport[3]     = 1 ;
-  ctx->vxmin           = 0. ;
-  ctx->vymin           = 0. ;
-  ctx->vxmax           = 0. ;
-  ctx->vymax           = 0. ;
-  ctx->render_mode     = GMSH_RENDER ;
-  ctx->pixel_equiv_x   = 0. ;
-  ctx->pixel_equiv_y   = 0. ; 
-  ctx->clip[0]         = 0;
-  ctx->clip[1]         = 0;
-  ctx->clip[2]         = 0;
-  ctx->clip[3]         = 0;
-  ctx->clip[4]         = 0;
-  ctx->clip[5]         = 0;
-
-  ctx->font_string          = "-*-helvetica-medium-r-*-*-*-*-*-*-*-*-*-*";
-  ctx->colorbar_font_string = "fixed";
-
-  ctx->light0[0]         = 0.5 ;
-  ctx->light0[1]         = 0.3 ;
-  ctx->light0[2]         = 1.0 ;
-  ctx->light0[3]         = 0.0 ;
-  ctx->shine             = 0.4 ;
-  ctx->alpha             = 0 ; /* disable alpha blending by default */
-  ctx->flash             = 0 ;
-  ctx->same_visual       = 0 ;
-
-  ctx->db                = 1 ;
-  ctx->overlay           = 1 ;
-  ctx->stream            = TO_SCREEN ;
-  ctx->axes              = 1 ;
-  ctx->little_axes       = 1 ;
-  ctx->ortho             = 1 ;
-  ctx->fast              = 1 ;
-  ctx->display_lists     = 0 ; 
-  ctx->command_win       = 0 ;
-  ctx->threads           = 1 ; // effective on Unix only with -D_USETHREADS
-  ctx->threads_lock      = 0 ;
-
-  ctx->geom.vis_type     = 0 ;
-  ctx->geom.points       = 1 ;
-  ctx->geom.lines        = 1 ;
-  ctx->geom.surfaces     = 0 ;
-  ctx->geom.volumes      = 0 ;
-  ctx->geom.points_num   = 0 ;
-  ctx->geom.lines_num    = 0 ;
-  ctx->geom.surfaces_num = 0 ;
-  ctx->geom.volumes_num  = 0 ;
-  ctx->geom.level        = ELEMENTARY ;
-  ctx->geom.normals      = 0.0 ;
-  ctx->geom.tangents     = 0.0 ;
-  ctx->geom.highlight    = 1 ;
-  ctx->geom.hidden       = 0 ;
-  ctx->geom.shade        = 0 ;
-
-  ctx->mesh.vis_type          = 0 ;
-  ctx->mesh.draw              = 1 ;  
-  ctx->mesh.points            = 1 ;
-  ctx->mesh.lines             = 1 ;
-  ctx->mesh.surfaces          = 1 ;
-  ctx->mesh.volumes           = 1 ;
-  ctx->mesh.points_num        = 0 ;
-  ctx->mesh.lines_num         = 0 ;
-  ctx->mesh.surfaces_num      = 0 ;
-  ctx->mesh.volumes_num       = 0 ;
-  ctx->mesh.normals           = 0.0 ;
-  ctx->mesh.tangents          = 0.0 ;  
-  ctx->mesh.explode           = 1.0 ;
-  ctx->mesh.hidden            = 0 ;  
-  ctx->mesh.shade             = 0 ;  
-  ctx->mesh.format            = FORMAT_MSH ;
-  ctx->mesh.nb_smoothing      = 0 ;
-  ctx->mesh.algo              = DELAUNAY_OLDALGO ;
-  ctx->mesh.point_insertion   = CENTER_CIRCCIRC;
-  ctx->mesh.speed_max         = 0 ;
-  ctx->mesh.degree            = 1 ;
-  ctx->mesh.scaling_factor    = 1.0 ;
-  ctx->mesh.lc_factor         = 1.0 ;
-  ctx->mesh.rand_factor       = 1.e-5 ;
-  ctx->mesh.limit_gamma       = 0.0 ;
-  ctx->mesh.limit_eta         = 0.0 ;
-  ctx->mesh.limit_rho         = 0.0 ;
-  ctx->mesh.dual              = 0 ;
-  ctx->mesh.interactive       = 0 ;
-
-  ctx->post.draw                   = 1 ;
-  ctx->post.scales                 = 1 ;
-  ctx->post.link                   = 0 ;
-  ctx->post.initial_visibility     = 1 ;
-  ctx->post.initial_intervals      = DRAW_POST_ISO ;
-  ctx->post.initial_nbiso          = 15 ;
-  ctx->post.anim_delay             = 0 ;
-
-  ctx->print.type      = PRINT_GL2PS_SIMPLE ;
-  ctx->print.format    = FORMAT_EPS ;
-  ctx->print.font      = "Courier" ;
-  ctx->print.fontsize  = 12 ;
-
-  ctx->color.id = -1;
-  InitColors(&ctx->color, 0) ;
+// COLORS
 
+void Set_DefaultColorOptions(StringXColor s[], int num){
+  int i = 0;
+
+  while(s[i].str){
+    switch(num){
+    case 0 : *s[i].ptr = s[i].def1; break;
+    case 1 : *s[i].ptr = s[i].def2; break;
+    case 2 : *s[i].ptr = s[i].def3; break;
+    }
+    i++;
+  }
 }
 
-#define UNPACK_RGB(thecol) \
-   UNPACK_RED(thecol), UNPACK_GREEN(thecol), UNPACK_BLUE(thecol)
-
-void PrintContext(Context_T *ctx, FILE *file){
-  int i;
-
-  fprintf(file, "Options {\n");
-
-  fprintf(file, "  General {\n");
-  fprintf(file, "    Interactive = %d;\n", ctx->verbosity);
-  fprintf(file, "    Rotation = {%g, %g, %g};\n", ctx->r[0], ctx->r[1], ctx->r[2]);
-  fprintf(file, "    Translation = {%g, %g, %g};\n", ctx->t[0], ctx->t[1], ctx->t[2]);
-  fprintf(file, "    Scale = {%g, %g, %g};\n", ctx->s[0], ctx->s[1], ctx->s[2]);
-  for(i = 0 ; i < 6 ; i++)
-    if(ctx->clip[i])
-      fprintf(file, "    Clip Plane (%d) = {%g, %g, %g, %g};\n", 
-	      ctx->clip[i], ctx->s[0], ctx->s[1], ctx->s[2], ctx->s[3]);
-  fprintf(file, "    Proportional Font = \"%s\";\n", ctx->font_string);
-  fprintf(file, "    Fixed Font = \"%s\"\n", ctx->colorbar_font_string);
-  fprintf(file, "    Light (0) = {%g, %g, %g, %g};\n", 
-	  ctx->light0[0],ctx->light0[1],ctx->light0[2],ctx->light0[3]);
-  fprintf(file, "    Shine = %g;\n", ctx->shine);
-  fprintf(file, "    Alpha = %d;\n", ctx->alpha);
-  fprintf(file, "    Axes = %d;\n", ctx->axes);
-  fprintf(file, "    Little Axes = %d;\n", ctx->little_axes);
-  fprintf(file, "    Ortho = %d;\n", ctx->ortho);
-  fprintf(file, "    Fast = %d;\n", ctx->fast);
-  fprintf(file, "    Display Lists = %d;\n", ctx->display_lists);
-  fprintf(file, "    Colors {\n");
-  fprintf(file, "      Background = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.bg));
-  fprintf(file, "      Foreground = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.fg));
-  fprintf(file, "      Text = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.text));
-  fprintf(file, "      Axes = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.axes));
-  fprintf(file, "      Little Axes = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.little_axes));
-  fprintf(file, "    }\n");
-  fprintf(file, "  }\n");
+int Set_ColorOption(char *str, StringXColor s[], unsigned int val) {
+  int  i = 0 ;
+
+  while ((s[i].str != NULL) && (strcmp(s[i].str, str))) i++ ;
+  if(!s[i].str)
+    return 0;
+  else{
+    *s[i].ptr = val ;
+    return 1;
+  }
+}
 
-  fprintf(file, "  Geometry {\n");
-  fprintf(file, "    Points = %d;\n", ctx->geom.points);
-  fprintf(file, "    Lines = %d;\n", ctx->geom.lines);
-  fprintf(file, "    Surfaces = %d;\n", ctx->geom.surfaces);
-  fprintf(file, "    Volumes = %d;\n", ctx->geom.volumes);
-  fprintf(file, "    Points Numbers = %d;\n", ctx->geom.points_num);
-  fprintf(file, "    Lines Numbers = %d;\n", ctx->geom.lines_num);
-  fprintf(file, "    Surfaces Numbers = %d;\n", ctx->geom.surfaces_num);
-  fprintf(file, "    Volumes Numbers = %d;\n", ctx->geom.volumes_num);
-  fprintf(file, "    Normals = %g;\n", ctx->geom.normals);
-  fprintf(file, "    Tangents = %g;\n", ctx->geom.tangents);
-  fprintf(file, "    Highlight = %d;\n", ctx->geom.highlight);
-  fprintf(file, "    Hidden = %d;\n", ctx->geom.hidden);
-  fprintf(file, "    Shade = %d;\n", ctx->geom.shade);
-  fprintf(file, "    Colors {\n");
-  fprintf(file, "      Points = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.geom.point));
-  fprintf(file, "      Lines = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.geom.line));
-  fprintf(file, "      Surfaces = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.geom.surface));
-  fprintf(file, "      Volumes = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.geom.volume));
-  fprintf(file, "      PointsSelect = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.geom.point_sel));
-  fprintf(file, "      LinesSelect = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.geom.line_sel));
-  fprintf(file, "      SurfacesSelect = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.geom.surface_sel));
-  fprintf(file, "      VolumesSelect = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.geom.volume_sel));
-  fprintf(file, "      PointsHighlight = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.geom.point_hlt));
-  fprintf(file, "      LinesHighlight = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.geom.line_hlt));
-  fprintf(file, "      SurfacesHighlight = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.geom.surface_hlt));
-  fprintf(file, "      VolumesHighlight = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.geom.volume_hlt));
-  fprintf(file, "      Tangents = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.geom.tangents));
-  fprintf(file, "      Normals = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.geom.normals));
+void Print_ColorOptions(StringXColor s[], FILE *file){
+  int i = 0;
+
+  fprintf(file, "    Color {\n");
+  while(s[i].str){
+    fprintf(file, "      %s = {%d,%d,%d};\n", 
+	    s[i].str,
+	    UNPACK_RED(*s[i].ptr),
+	    UNPACK_GREEN(*s[i].ptr),
+	    UNPACK_BLUE(*s[i].ptr));
+    i++;
+  }
   fprintf(file, "    }\n");
+}
+
+int Get_ColorForString(StringX4Int SX4I[], int alpha, 
+		       char * str, int * FlagError) {
+  int  i = 0 ;
+  while ((SX4I[i].str != NULL) && (strcmp(SX4I[i].str, str)))  i++ ;
+  *FlagError = (SX4I[i].str == NULL)? 1 : 0 ;
+  if(alpha > 0)
+    return PACK_COLOR(SX4I[i].int1,SX4I[i].int2,SX4I[i].int3,alpha) ;
+  else
+    return PACK_COLOR(SX4I[i].int1,SX4I[i].int2,SX4I[i].int3,SX4I[i].int4) ;
+}
+
+
+/* ------------------------------------------------------------------------ */
+/*  C o n t e x t                                                           */
+/* ------------------------------------------------------------------------ */
+
+void Init_Colors(int num){
+  if(num < 0 || num > 2){
+    Msg(ERROR, "Unknown Default Color Scheme");
+    return;
+  }
+  CTX.color.id = num ;
+  Set_DefaultColorOptions(GeneralOptions_Color, num);
+  Set_DefaultColorOptions(GeometryOptions_Color, num);
+  Set_DefaultColorOptions(MeshOptions_Color, num);
+  Set_DefaultColorOptions(PostProcessingOptions_Color, num);
+  Set_DefaultColorOptions(PrintOptions_Color, num);
+}
+
+void Init_Context(void){
+
+  // Cannot be set by the user
+  CTX.interactive  = 0 ;
+  CTX.expose       = 0 ;
+  CTX.db           = 1 ;
+  CTX.overlay      = 1 ;
+  CTX.stream       = TO_SCREEN ;
+  CTX.command_win  = 0 ;
+  CTX.threads      = 1 ; // effective on Unix only with -D_USETHREADS
+  CTX.threads_lock = 0 ;
+
+  CTX.font = "-*-helvetica-medium-r-*-*-*-*-*-*-*-*-*-*" ;
+  CTX.fixed_font = "fixed" ;
+
+  CTX.min[0]   = CTX.min[1]   = CTX.min[2]   = 0.0 ;
+  CTX.max[0]   = CTX.max[1]   = CTX.max[2]   = 0.0 ;
+  CTX.range[0] = CTX.range[1] = CTX.range[2] = 0.0 ;
+
+  CTX.viewport[0] = CTX.viewport[1] = 0 ;
+  CTX.viewport[2] = CTX.viewport[3] = 1 ;
+
+  CTX.vxmin = CTX.vymin = CTX.vxmax = CTX.vymax = 0. ;
+
+  CTX.render_mode    = GMSH_RENDER ;
+  CTX.pixel_equiv_x  = CTX.pixel_equiv_y = 0. ; 
+  CTX.geom.vis_type  = 0 ;
+  CTX.geom.level     = ELEMENTARY ;
+  CTX.mesh.vis_type  = 0 ;
+  CTX.mesh.draw      = 1 ;  
+  CTX.post.draw      = 1 ;
+
+  // Default string options
+  Set_DefaultStringOptions(GeneralOptions_String);
+  Set_DefaultStringOptions(GeometryOptions_String);
+  Set_DefaultStringOptions(MeshOptions_String);
+  Set_DefaultStringOptions(PostProcessingOptions_String);
+  Set_DefaultStringOptions(PrintOptions_String);
+
+  // Default number options
+  Set_DefaultNumberOptions(GeneralOptions_Number);
+  Set_DefaultNumberOptions(GeometryOptions_Number);
+  Set_DefaultNumberOptions(MeshOptions_Number);
+  Set_DefaultNumberOptions(PostProcessingOptions_Number);
+  Set_DefaultNumberOptions(PrintOptions_Number);
+
+  // Default array options
+  Set_DefaultArrayOptions(GeneralOptions_Array);
+  Set_DefaultArrayOptions(GeometryOptions_Array);
+  Set_DefaultArrayOptions(MeshOptions_Array);
+  Set_DefaultArrayOptions(PostProcessingOptions_Array);
+  Set_DefaultArrayOptions(PrintOptions_Array);
+
+  // Default color options
+  Init_Colors(0);
+
+  //Print_Context(stdout);
+}
+
+void Print_Context(FILE *file){
+
+  fprintf(file, "Options{\n");
+
+  fprintf(file, "  General{\n");
+  Print_StringOptions(GeneralOptions_String, file);
+  Print_NumberOptions(GeneralOptions_Number, file);
+  Print_ArrayOptions(GeneralOptions_Array, file);
+  Print_ColorOptions(GeneralOptions_Color, file);
   fprintf(file, "  }\n");
 
-  fprintf(file, "  Mesh {\n");
-  fprintf(file, "    Points = %d;\n", ctx->mesh.points);
-  fprintf(file, "    Lines = %d;\n", ctx->mesh.lines);
-  fprintf(file, "    Surfaces = %d;\n", ctx->mesh.surfaces);
-  fprintf(file, "    Volumes = %d;\n", ctx->mesh.volumes);
-  fprintf(file, "    Points Numbers = %d;\n", ctx->mesh.points_num);
-  fprintf(file, "    Lines Numbers = %d;\n", ctx->mesh.lines_num);
-  fprintf(file, "    Surfaces Numbers = %d;\n", ctx->mesh.surfaces_num);
-  fprintf(file, "    Volumes Numbers = %d;\n", ctx->mesh.volumes_num);
-  fprintf(file, "    Normals = %g;\n", ctx->mesh.normals);
-  fprintf(file, "    Tangents = %g;\n", ctx->mesh.tangents);
-  fprintf(file, "    Explode = %g;\n", ctx->mesh.explode);
-  fprintf(file, "    Hidden = %d;\n", ctx->mesh.hidden);
-  fprintf(file, "    Shade = %d;\n", ctx->mesh.shade);
-  fprintf(file, "    Format = %d;\n", ctx->mesh.format);
-  fprintf(file, "    Smoothing = %d;\n", ctx->mesh.nb_smoothing);
-  fprintf(file, "    Algorithm = %d;\n", ctx->mesh.algo);
-  fprintf(file, "    Degree = %d;\n", ctx->mesh.degree);
-  fprintf(file, "    ScalingFactor = %g;\n", ctx->mesh.scaling_factor);
-  fprintf(file, "    Characteristic Length Factor = %g;\n", ctx->mesh.lc_factor);
-  fprintf(file, "    Random Factor = %g;\n", ctx->mesh.rand_factor);
-  fprintf(file, "    Gamma Limit = %g;\n", ctx->mesh.limit_gamma);
-  fprintf(file, "    Eta Limit = %g;\n", ctx->mesh.limit_eta);
-  fprintf(file, "    Rho Limit = %g;\n", ctx->mesh.limit_rho);
-  fprintf(file, "    Dual = %d;\n", ctx->mesh.dual);
-  fprintf(file, "    interactive = %d;\n", ctx->mesh.interactive);
-  fprintf(file, "    Colors {\n");
-  fprintf(file, "      Vertex = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.mesh.vertex));
-  fprintf(file, "      VertexSupp = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.mesh.vertex_supp));
-  fprintf(file, "      Line = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.mesh.line));
-  fprintf(file, "      Triangle = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.mesh.triangle));
-  fprintf(file, "      Quadrangle = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.mesh.quadrangle));
-  fprintf(file, "      Tetrahedron = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.mesh.tetrahedron));
-  fprintf(file, "      Hexahedron = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.mesh.hexahedron));
-  fprintf(file, "      Prism = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.mesh.prism));
-  fprintf(file, "      Pyramid = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.mesh.pyramid));
-  fprintf(file, "      One = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.mesh.carousel[0]));
-  fprintf(file, "      Two = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.mesh.carousel[1]));
-  fprintf(file, "      Three = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.mesh.carousel[2]));
-  fprintf(file, "      Four = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.mesh.carousel[3]));
-  fprintf(file, "      Five = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.mesh.carousel[4]));
-  fprintf(file, "      Six = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.mesh.carousel[5]));
-  fprintf(file, "      Seven = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.mesh.carousel[6]));
-  fprintf(file, "      Eight = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.mesh.carousel[7]));
-  fprintf(file, "      Nine = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.mesh.carousel[8]));
-  fprintf(file, "      Ten = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.mesh.carousel[9]));
-  fprintf(file, "      Tangents = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.mesh.tangents));
-  fprintf(file, "      Normals = {%d,%d,%d};\n", UNPACK_RGB(ctx->color.mesh.normals));
-  fprintf(file, "    }\n");
+  fprintf(file, "  Geometry{\n");
+  Print_StringOptions(GeometryOptions_String, file);
+  Print_NumberOptions(GeometryOptions_Number, file);
+  Print_ArrayOptions(GeometryOptions_Array, file);
+  Print_ColorOptions(GeometryOptions_Color, file);
   fprintf(file, "  }\n");
 
-  fprintf(file, "  Post {\n");
-  fprintf(file, "    Scales = %d;\n", ctx->post.scales);
-  fprintf(file, "    Link = %d;\n", ctx->post.link);
-  fprintf(file, "    Visibility = %d;\n", ctx->post.initial_visibility);
-  fprintf(file, "    Intervals = %d;\n", ctx->post.initial_intervals);
-  fprintf(file, "    NbIso = %d;\n", ctx->post.initial_nbiso);
-  fprintf(file, "    Animation Delay= %ld;\n", ctx->post.anim_delay);
+  fprintf(file, "  Mesh{\n");
+  Print_StringOptions(MeshOptions_String, file);
+  Print_NumberOptions(MeshOptions_Number, file);
+  Print_ArrayOptions(MeshOptions_Array, file);
+  Print_ColorOptions(MeshOptions_Color, file);
   fprintf(file, "  }\n");
 
+  fprintf(file, "  PostProcessing{\n");
+  Print_StringOptions(PostProcessingOptions_String, file);
+  Print_NumberOptions(PostProcessingOptions_Number, file);
+  Print_ArrayOptions(PostProcessingOptions_Array, file);
+  Print_ColorOptions(PostProcessingOptions_Color, file);
+  fprintf(file, "  }\n");
 
-  fprintf(file, "  Print {\n");
-  fprintf(file, "    Font = \"%s\";\n", ctx->print.font);
-  fprintf(file, "    Font Size = \"%s\";\n", ctx->print.font);
-  fprintf(file, "    Type = %d;\n", ctx->print.type);
-  fprintf(file, "    Format = %d;\n", ctx->print.format);
+  fprintf(file, "  Print{\n");
+  Print_StringOptions(PrintOptions_String, file);
+  Print_NumberOptions(PrintOptions_Number, file);
+  Print_ArrayOptions(PrintOptions_Array, file);
+  Print_ColorOptions(PrintOptions_Color, file);
   fprintf(file, "  }\n");
 
   fprintf(file, "}\n");
-
 }
+
diff --git a/Common/Context.h b/Common/Context.h
index d5124798d5467d3d1ac01b022dcae3e90e6e0400..87c4a5685973980909d98e77e483316fd0efdeef 100644
--- a/Common/Context.h
+++ b/Common/Context.h
@@ -1,4 +1,4 @@
-/* $Id: Context.h,v 1.10 2000-12-04 11:28:11 geuzaine Exp $ */
+/* $Id: Context.h,v 1.11 2000-12-05 15:23:54 geuzaine Exp $ */
 #ifndef _CONTEXT_H_
 #define _CONTEXT_H_
 
@@ -6,6 +6,11 @@
    Interface-independant context
  */
 
+#define GMSH_INT     1
+#define GMSH_LONG    2
+#define GMSH_FLOAT   3
+#define GMSH_DOUBLE  4
+
 /* How RGBA values are packed and unpacked into/from a 4-byte integer */
 
 #  ifdef _LITTLE_ENDIAN
@@ -26,7 +31,7 @@ typedef struct{
   int id;                       /* the current rgbacolors id */
   
   /* general colors */
-  unsigned int bg, fg, text, axes, little_axes;
+  unsigned int bg, fg, text, axes, small_axes;
   
   /* geometry colors */
   struct{
@@ -72,20 +77,21 @@ typedef struct {
   int command_win;            /* command window? */
   int display_lists;          /* use display lists? */
   int font_base;              /* display list indice for the font */
-  int axes, little_axes;      /* draw axes? */
+  int axes, small_axes;       /* draw axes? */
   int threads, threads_lock;  /* threads?, lock (should be a mutex...) */
   int alpha;                  /* enable alpha blending */
   int flash;                  /* authorize colormap flashing (beek) */
   int same_visual;            /* force same visual for GUI and Graphics */
   
-  char *font_string;          /* main font */
-  char *colorbar_font_string; /* font for colorbar */
+  char *font;                 /* main font */
+  char *fixed_font;           /* font for colorbar */
 
   /* OpenGL stuff */
   int viewport[4];            /* current viewport */
   double vxmin, vxmax, vymin, vymax;
                               /* current viewport in real coordinates */
-  float light0[4];            /* light source position */
+  int light[6];               /* status of light */
+  float light_position[6][4]; /* light sources positions */
   float shine;                /* specular value */
   int render_mode;            /* GMSH_RENDER, GMSH_SELECT, GMSH_FEEDBACK */
   int clip[6];                /* status of clip planes */
@@ -132,23 +138,58 @@ typedef struct {
   struct{
     int format, type;
     char *font;
-    int  fontsize;
+    int  font_size;
   } print;
 
 } Context_T;
 
 typedef struct {
-  char *string ; 
+  char *str ; 
   int int1, int2, int3, int4 ;
 } StringX4Int;
 
 typedef struct {
-  char *string ; 
-  void *Pointer ;
-} StringXPointer ;
+  char *str, **ptr, *def ;
+} StringXString ;
+
+typedef struct {
+  char *str;
+  int type;
+  void *ptr;
+  double def ;
+} StringXNumber ;
 
-void InitContext (Context_T * ctx);
-void PrintContext(Context_T *ctx, FILE *file);
-void InitColors (rgbacolors * col, int num);
+typedef struct {
+  char *str;
+  int type;
+  void *ptr;
+  double def1, def2, def3, def4 ;
+} StringXArray ;
+
+typedef struct {
+  char *str ; 
+  unsigned int *ptr ;
+  unsigned int def1, def2, def3 ;
+} StringXColor ;
+
+
+void Set_DefaultStringOptions(StringXString s[]);
+void Set_DefaultNumberOptions(StringXNumber s[]);
+void Set_DefaultArrayOptions(StringXArray s[]);
+void Set_DefaultColorOptions(StringXColor s[], int num);
+
+int Set_StringOption(char *str, StringXString s[], char *val);
+int Set_NumberOption(char *str, StringXNumber s[], double val);
+int Set_ArrayOption(char *str, StringXArray s[], double *val);
+int Set_ColorOption(char *str, StringXColor s[], unsigned int val);
+
+void Print_StringOptions(StringXString s[], FILE *file);
+void Print_NumberOptions(StringXNumber s[], FILE *file);
+void Print_ArrayOptions(StringXArray s[], FILE *file);
+void Print_ColorOptions(StringXArray s[], FILE *file);
+
+void Init_Colors (int num);
+void Init_Context (void);
+void Print_Context(FILE *file);
 
 #endif
diff --git a/Graphics/Draw.cpp b/Graphics/Draw.cpp
index ac0ebc7d417223f45a78081db3570d2edb649ab3..06f9c03c14e2b35400b9d7b36530bdaf783131f1 100644
--- a/Graphics/Draw.cpp
+++ b/Graphics/Draw.cpp
@@ -1,4 +1,4 @@
-/* $Id: Draw.cpp,v 1.6 2000-11-26 18:43:48 geuzaine Exp $ */
+/* $Id: Draw.cpp,v 1.7 2000-12-05 15:23:56 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -80,7 +80,7 @@ void Draw2d(void){
 
   glPushMatrix();
   if(CTX.post.scales) Draw_Scales();
-  if(CTX.little_axes) Draw_SmallAxes();
+  if(CTX.small_axes) Draw_SmallAxes();
   glPopMatrix();
 }
 
@@ -197,11 +197,16 @@ void InitOv(void){
 
 void InitShading(void){
   GLfloat specular[4];
+  int i;
 
-  glLightfv(GL_LIGHT0, GL_POSITION, CTX.light0);
   glEnable(GL_LIGHTING);
-  glEnable(GL_LIGHT0);
   glEnable(GL_NORMALIZE);
+  for(i = 0 ; i < 6 ; i++){
+    if(CTX.light[i]){
+      glLightfv(GL_LIGHT0 + i, GL_POSITION, CTX.light_position[i]);
+      glEnable(GL_LIGHT0 + i );
+    }
+  }
 
   /* simple color commands will automatically create appropriate materials */
   glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
diff --git a/Graphics/Scale.cpp b/Graphics/Scale.cpp
index 6ec143015fe3141acc17f5bd8926a9dbd313f2c7..d0bb9d5d614a8e3824a2389b14140c271ef5e2cf 100644
--- a/Graphics/Scale.cpp
+++ b/Graphics/Scale.cpp
@@ -1,4 +1,4 @@
-/* $Id: Scale.cpp,v 1.6 2000-12-04 11:28:26 geuzaine Exp $ */
+/* $Id: Scale.cpp,v 1.7 2000-12-05 15:23:56 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -34,7 +34,7 @@ void Draw_String(char *s){
   if(CTX.stream == TO_FILE){
     if(CTX.print.type == PRINT_GL2PS_SIMPLE ||
        CTX.print.type == PRINT_GL2PS_RECURSIVE) {
-      gl2psText(s,CTX.print.font,CTX.print.fontsize);
+      gl2psText(s,CTX.print.font,CTX.print.font_size);
       return ;
     }
   }
@@ -303,7 +303,7 @@ void Draw_SmallAxes(void){
   yx = -l*cos(b)*sin(c) ; yy = -l*(sin(a)*sin(b)*sin(c)-cos(a)*cos(c)) ;
   zx =  l*sin(b)        ; zy = -l*sin(a)*cos(b) ;
 
-  glColor4ubv((GLubyte*)&CTX.color.little_axes);
+  glColor4ubv((GLubyte*)&CTX.color.small_axes);
 
   glBegin(GL_LINES);
   glVertex2d(cx,cy); glVertex2d(cx+xx,cy+xy);
diff --git a/Parser/Gmsh.l b/Parser/Gmsh.l
index f50146270347df5b5fc692e30d2abdd5d9ab65c7..18ff550fd74e1367546854424db5455719b6f5fe 100644
--- a/Parser/Gmsh.l
+++ b/Parser/Gmsh.l
@@ -1,4 +1,4 @@
-%{ /* $Id: Gmsh.l,v 1.6 2000-12-04 09:29:38 colignon Exp $ */
+%{ /* $Id: Gmsh.l,v 1.7 2000-12-05 15:23:57 geuzaine Exp $ */
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -96,7 +96,6 @@ Coherence               return tCoherence;
 Complex                 return tComplex;
 Color                   return tColor;
 CatmullRom		return tSpline;
-Clip                    return tClip;
 
 Delete                  return tDelete;
 Dilate                  return tDilate;
@@ -135,6 +134,7 @@ Nurbs			return tNurbs;
 
 Offset                  return tOffset;
 Order			return tOrder;
+Options                 return tOptions;
 
 Physical                return tPhysical;
 Pi                      return tPi;
@@ -143,6 +143,8 @@ Point                   return tPoint;
 Power                   return tProgression;
 Progression             return tProgression;
 Parametric		return tParametric;
+PostProcessing          return tPostProcessing;
+Print                   return tPrint;
 
 Recombine               return tRecombine;
 Rotate                  return tRotate;
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index 10e8bb4456c98eb435f53acaf089e76a5eeb5b8c..5eca5a189535d334d801e5318075b3ff80b43673 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -1,152 +1,155 @@
 
 /*  A Bison parser, made from Gmsh.y
-    by GNU Bison version 1.28  */
+ by  GNU Bison version 1.25
+  */
 
 #define YYBISON 1  /* Identify Bison output.  */
 
-#define	tDOUBLE	257
-#define	tSTRING	258
-#define	tBIGSTR	259
-#define	tEND	260
-#define	tAFFECT	261
-#define	tDOTS	262
-#define	tPi	263
-#define	tExp	264
-#define	tLog	265
-#define	tLog10	266
-#define	tSqrt	267
-#define	tSin	268
-#define	tAsin	269
-#define	tCos	270
-#define	tAcos	271
-#define	tTan	272
-#define	tAtan	273
-#define	tAtan2	274
-#define	tSinh	275
-#define	tCosh	276
-#define	tTanh	277
-#define	tFabs	278
-#define	tFloor	279
-#define	tCeil	280
-#define	tFmod	281
-#define	tModulo	282
-#define	tHypot	283
-#define	tPoint	284
-#define	tCircle	285
-#define	tEllipsis	286
-#define	tLine	287
-#define	tSurface	288
-#define	tSpline	289
-#define	tVolume	290
-#define	tCharacteristic	291
-#define	tLength	292
-#define	tParametric	293
-#define	tElliptic	294
-#define	tPlane	295
-#define	tRuled	296
-#define	tTransfinite	297
-#define	tComplex	298
-#define	tPhysical	299
-#define	tUsing	300
-#define	tPower	301
-#define	tBump	302
-#define	tProgression	303
-#define	tAssociation	304
-#define	tRotate	305
-#define	tTranslate	306
-#define	tSymmetry	307
-#define	tDilate	308
-#define	tExtrude	309
-#define	tDuplicata	310
-#define	tLoop	311
-#define	tInclude	312
-#define	tRecombine	313
-#define	tDelete	314
-#define	tCoherence	315
-#define	tView	316
-#define	tOffset	317
-#define	tAttractor	318
-#define	tLayers	319
-#define	tScalarTetrahedron	320
-#define	tVectorTetrahedron	321
-#define	tTensorTetrahedron	322
-#define	tScalarTriangle	323
-#define	tVectorTriangle	324
-#define	tTensorTriangle	325
-#define	tScalarLine	326
-#define	tVectorLine	327
-#define	tTensorLine	328
-#define	tScalarPoint	329
-#define	tVectorPoint	330
-#define	tTensorPoint	331
-#define	tBSpline	332
-#define	tNurbs	333
-#define	tOrder	334
-#define	tWith	335
-#define	tBounds	336
-#define	tKnots	337
-#define	tColor	338
-#define	tGeneral	339
-#define	tGeometry	340
-#define	tMesh	341
-#define	tClip	342
-#define	tB_SPLINE_SURFACE_WITH_KNOTS	343
-#define	tB_SPLINE_CURVE_WITH_KNOTS	344
-#define	tCARTESIAN_POINT	345
-#define	tTRUE	346
-#define	tFALSE	347
-#define	tUNSPECIFIED	348
-#define	tU	349
-#define	tV	350
-#define	tEDGE_CURVE	351
-#define	tVERTEX_POINT	352
-#define	tORIENTED_EDGE	353
-#define	tPLANE	354
-#define	tFACE_OUTER_BOUND	355
-#define	tEDGE_LOOP	356
-#define	tADVANCED_FACE	357
-#define	tVECTOR	358
-#define	tDIRECTION	359
-#define	tAXIS2_PLACEMENT_3D	360
-#define	tISO	361
-#define	tENDISO	362
-#define	tENDSEC	363
-#define	tDATA	364
-#define	tHEADER	365
-#define	tFILE_DESCRIPTION	366
-#define	tFILE_SCHEMA	367
-#define	tFILE_NAME	368
-#define	tMANIFOLD_SOLID_BREP	369
-#define	tCLOSED_SHELL	370
-#define	tADVANCED_BREP_SHAPE_REPRESENTATION	371
-#define	tFACE_BOUND	372
-#define	tCYLINDRICAL_SURFACE	373
-#define	tCONICAL_SURFACE	374
-#define	tCIRCLE	375
-#define	tTRIMMED_CURVE	376
-#define	tGEOMETRIC_SET	377
-#define	tCOMPOSITE_CURVE_SEGMENT	378
-#define	tCONTINUOUS	379
-#define	tCOMPOSITE_CURVE	380
-#define	tTOROIDAL_SURFACE	381
-#define	tPRODUCT_DEFINITION	382
-#define	tPRODUCT_DEFINITION_SHAPE	383
-#define	tSHAPE_DEFINITION_REPRESENTATION	384
-#define	tELLIPSE	385
-#define	tTrimmed	386
-#define	tSolid	387
-#define	tEndSolid	388
-#define	tVertex	389
-#define	tFacet	390
-#define	tNormal	391
-#define	tOuter	392
-#define	tLoopSTL	393
-#define	tEndLoop	394
-#define	tEndFacet	395
-#define	UMINUS	396
+#define	tDOUBLE	258
+#define	tSTRING	259
+#define	tBIGSTR	260
+#define	tEND	261
+#define	tAFFECT	262
+#define	tDOTS	263
+#define	tPi	264
+#define	tExp	265
+#define	tLog	266
+#define	tLog10	267
+#define	tSqrt	268
+#define	tSin	269
+#define	tAsin	270
+#define	tCos	271
+#define	tAcos	272
+#define	tTan	273
+#define	tAtan	274
+#define	tAtan2	275
+#define	tSinh	276
+#define	tCosh	277
+#define	tTanh	278
+#define	tFabs	279
+#define	tFloor	280
+#define	tCeil	281
+#define	tFmod	282
+#define	tModulo	283
+#define	tHypot	284
+#define	tPoint	285
+#define	tCircle	286
+#define	tEllipsis	287
+#define	tLine	288
+#define	tSurface	289
+#define	tSpline	290
+#define	tVolume	291
+#define	tCharacteristic	292
+#define	tLength	293
+#define	tParametric	294
+#define	tElliptic	295
+#define	tPlane	296
+#define	tRuled	297
+#define	tTransfinite	298
+#define	tComplex	299
+#define	tPhysical	300
+#define	tUsing	301
+#define	tPower	302
+#define	tBump	303
+#define	tProgression	304
+#define	tAssociation	305
+#define	tRotate	306
+#define	tTranslate	307
+#define	tSymmetry	308
+#define	tDilate	309
+#define	tExtrude	310
+#define	tDuplicata	311
+#define	tLoop	312
+#define	tInclude	313
+#define	tRecombine	314
+#define	tDelete	315
+#define	tCoherence	316
+#define	tView	317
+#define	tOffset	318
+#define	tAttractor	319
+#define	tLayers	320
+#define	tScalarTetrahedron	321
+#define	tVectorTetrahedron	322
+#define	tTensorTetrahedron	323
+#define	tScalarTriangle	324
+#define	tVectorTriangle	325
+#define	tTensorTriangle	326
+#define	tScalarLine	327
+#define	tVectorLine	328
+#define	tTensorLine	329
+#define	tScalarPoint	330
+#define	tVectorPoint	331
+#define	tTensorPoint	332
+#define	tBSpline	333
+#define	tNurbs	334
+#define	tOrder	335
+#define	tWith	336
+#define	tBounds	337
+#define	tKnots	338
+#define	tColor	339
+#define	tOptions	340
+#define	tGeneral	341
+#define	tGeometry	342
+#define	tMesh	343
+#define	tPostProcessing	344
+#define	tPrint	345
+#define	tB_SPLINE_SURFACE_WITH_KNOTS	346
+#define	tB_SPLINE_CURVE_WITH_KNOTS	347
+#define	tCARTESIAN_POINT	348
+#define	tTRUE	349
+#define	tFALSE	350
+#define	tUNSPECIFIED	351
+#define	tU	352
+#define	tV	353
+#define	tEDGE_CURVE	354
+#define	tVERTEX_POINT	355
+#define	tORIENTED_EDGE	356
+#define	tPLANE	357
+#define	tFACE_OUTER_BOUND	358
+#define	tEDGE_LOOP	359
+#define	tADVANCED_FACE	360
+#define	tVECTOR	361
+#define	tDIRECTION	362
+#define	tAXIS2_PLACEMENT_3D	363
+#define	tISO	364
+#define	tENDISO	365
+#define	tENDSEC	366
+#define	tDATA	367
+#define	tHEADER	368
+#define	tFILE_DESCRIPTION	369
+#define	tFILE_SCHEMA	370
+#define	tFILE_NAME	371
+#define	tMANIFOLD_SOLID_BREP	372
+#define	tCLOSED_SHELL	373
+#define	tADVANCED_BREP_SHAPE_REPRESENTATION	374
+#define	tFACE_BOUND	375
+#define	tCYLINDRICAL_SURFACE	376
+#define	tCONICAL_SURFACE	377
+#define	tCIRCLE	378
+#define	tTRIMMED_CURVE	379
+#define	tGEOMETRIC_SET	380
+#define	tCOMPOSITE_CURVE_SEGMENT	381
+#define	tCONTINUOUS	382
+#define	tCOMPOSITE_CURVE	383
+#define	tTOROIDAL_SURFACE	384
+#define	tPRODUCT_DEFINITION	385
+#define	tPRODUCT_DEFINITION_SHAPE	386
+#define	tSHAPE_DEFINITION_REPRESENTATION	387
+#define	tELLIPSE	388
+#define	tTrimmed	389
+#define	tSolid	390
+#define	tEndSolid	391
+#define	tVertex	392
+#define	tFacet	393
+#define	tNormal	394
+#define	tOuter	395
+#define	tLoopSTL	396
+#define	tEndLoop	397
+#define	tEndFacet	398
+#define	UMINUS	399
 
 #line 1 "Gmsh.y"
- /* $Id: Gmsh.tab.cpp,v 1.13 2000-12-04 09:51:51 geuzaine Exp $ */
+ /* $Id: Gmsh.tab.cpp,v 1.14 2000-12-05 15:23:57 geuzaine Exp $ */
 
 #include <stdarg.h>
 
@@ -160,6 +163,7 @@
 #include "Create.h"
 #include "Views.h"
 #include "StepGeomDatabase.h"
+#include "Options.h"
 #include "Colors.h"
 #include "Parser.h"
 
@@ -181,23 +185,17 @@ static char           tmpstring[NAME_STR_L];
 static Symbol         TheSymbol;
 static Surface       *STL_Surf;
 static Shape          TheShape;
-static unsigned int  *ptr ;
 static int            i,j,k,flag,RecursionLevel=0;
 static double         d;
 static ExtrudeParams  extr;
-static StringXPointer *ColorField ;
+static StringXColor   *ColorField ;
 static List_T         *ListOfDouble_L,*ListOfDouble2_L;
 static List_T         *ListOfListOfDouble_L;
 
 void  yyerror (char *s);
 void  vyyerror (char *fmt, ...);
-int   Get_ColorForString(StringX4Int SX4I[], int alpha, 
-			 char * string, int * FlagError);
-void  Get_ColorPointerForString(StringXPointer SXP[], char * string,
-				int * FlagError, unsigned int **Pointer);
 
-
-#line 53 "Gmsh.y"
+#line 48 "Gmsh.y"
 typedef union {
   char    *c;
   int      i;
@@ -216,26 +214,26 @@ typedef union {
 
 
 
-#define	YYFINAL		1342
+#define	YYFINAL		1402
 #define	YYFLAG		-32768
-#define	YYNTBASE	158
+#define	YYNTBASE	160
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 396 ? yytranslate[x] : 238)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 399 ? yytranslate[x] : 251)
 
 static const short yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,   148,     2,     2,   151,
-   153,   146,   144,   152,   145,     2,   147,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,   142,
-     2,   143,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,   150,     2,     2,   153,
+   155,   148,   146,   154,   147,     2,   149,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,   144,
+     2,   145,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-   156,     2,   157,   150,     2,     2,     2,     2,     2,     2,
+   158,     2,   159,   152,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,   154,     2,   155,     2,     2,     2,     2,     2,
+     2,     2,   156,     2,   157,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -248,21 +246,21 @@ static const short yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     1,     3,     4,     5,     6,
-     7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-    27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-    37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-    47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-    57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-    77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-    87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-    97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-   107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-   117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-   127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-   137,   138,   139,   140,   141,   149
+     2,     2,     2,     2,     2,     1,     2,     3,     4,     5,
+     6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+    16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+    26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+    36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+    46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+    56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+    66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+    76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+    86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+    96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+   106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+   116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+   126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+   136,   137,   138,   139,   140,   141,   142,   143,   151
 };
 
 #if YYDEBUG != 0
@@ -273,243 +271,261 @@ static const short yyprhs[] = {     0,
    248,   260,   274,   284,   294,   306,   316,   328,   338,   350,
    364,   378,   390,   404,   422,   432,   444,   456,   470,   482,
    492,   493,   496,   498,   500,   502,   504,   506,   508,   510,
-   512,   514,   516,   518,   521,   528,   537,   538,   541,   544,
-   547,   550,   553,   556,   559,   562,   565,   568,   571,   574,
-   576,   580,   581,   595,   597,   601,   602,   616,   618,   622,
-   623,   637,   639,   643,   644,   664,   666,   670,   671,   691,
-   693,   697,   698,   718,   720,   724,   725,   751,   753,   757,
-   758,   784,   786,   790,   791,   817,   819,   823,   824,   856,
-   858,   862,   863,   895,   897,   901,   902,   934,   939,   947,
-   956,   969,   976,   982,   990,   998,  1011,  1019,  1029,  1047,
-  1055,  1064,  1073,  1081,  1093,  1099,  1108,  1118,  1127,  1150,
-  1171,  1180,  1189,  1195,  1204,  1212,  1221,  1227,  1239,  1245,
-  1255,  1257,  1259,  1261,  1262,  1265,  1270,  1275,  1279,  1288,
-  1301,  1310,  1323,  1332,  1345,  1357,  1373,  1375,  1378,  1388,
-  1391,  1398,  1408,  1418,  1427,  1436,  1445,  1452,  1457,  1460,
-  1465,  1482,  1483,  1486,  1487,  1493,  1494,  1500,  1501,  1507,
-  1508,  1511,  1516,  1525,  1530,  1540,  1548,  1550,  1552,  1554,
-  1556,  1558,  1560,  1564,  1568,  1572,  1576,  1580,  1584,  1587,
-  1590,  1595,  1600,  1605,  1610,  1615,  1620,  1625,  1630,  1635,
-  1640,  1647,  1652,  1657,  1662,  1667,  1672,  1677,  1684,  1691,
-  1698,  1700,  1702,  1704,  1708,  1715,  1727,  1737,  1745,  1753,
-  1754,  1758,  1760,  1764,  1765,  1769,  1773,  1775,  1779,  1780,
-  1782,  1786,  1788,  1790,  1794
+   512,   514,   516,   521,   524,   531,   540,   541,   544,   547,
+   550,   553,   556,   559,   562,   565,   568,   571,   574,   577,
+   579,   583,   584,   598,   600,   604,   605,   619,   621,   625,
+   626,   640,   642,   646,   647,   667,   669,   673,   674,   694,
+   696,   700,   701,   721,   723,   727,   728,   754,   756,   760,
+   761,   787,   789,   793,   794,   820,   822,   826,   827,   859,
+   861,   865,   866,   898,   900,   904,   905,   937,   942,   950,
+   959,   972,   979,   985,   993,  1001,  1014,  1022,  1032,  1050,
+  1058,  1067,  1076,  1084,  1096,  1102,  1111,  1121,  1130,  1153,
+  1174,  1183,  1192,  1198,  1207,  1215,  1224,  1230,  1242,  1248,
+  1258,  1260,  1262,  1264,  1265,  1268,  1273,  1278,  1282,  1291,
+  1304,  1313,  1326,  1335,  1348,  1360,  1376,  1378,  1381,  1391,
+  1394,  1401,  1411,  1421,  1430,  1439,  1448,  1455,  1460,  1463,
+  1464,  1467,  1472,  1477,  1482,  1487,  1492,  1493,  1496,  1501,
+  1506,  1511,  1512,  1518,  1519,  1522,  1527,  1532,  1537,  1538,
+  1544,  1545,  1548,  1553,  1558,  1563,  1564,  1570,  1571,  1574,
+  1579,  1584,  1589,  1590,  1596,  1597,  1600,  1605,  1610,  1615,
+  1616,  1622,  1623,  1626,  1631,  1640,  1645,  1655,  1663,  1665,
+  1667,  1669,  1671,  1673,  1675,  1679,  1683,  1687,  1691,  1695,
+  1699,  1702,  1705,  1710,  1715,  1720,  1725,  1730,  1735,  1740,
+  1745,  1750,  1755,  1762,  1767,  1772,  1777,  1782,  1787,  1792,
+  1799,  1806,  1813,  1815,  1817,  1819,  1823,  1830,  1842,  1852,
+  1860,  1868,  1869,  1873,  1875,  1879,  1880,  1884,  1888,  1890,
+  1894,  1895,  1897,  1901,  1903,  1905,  1909
 };
 
-static const short yyrhs[] = {   160,
-     0,   159,     0,   165,     0,   133,     0,   136,   137,   228,
-   228,   228,   138,   139,   135,   228,   228,   228,   135,   228,
-   228,   228,   135,   228,   228,   228,   140,   141,     0,   134,
-     0,     0,   160,   161,     0,   162,     0,   164,     0,   163,
-     0,     1,     6,     0,   107,     6,     0,   108,     6,     0,
-   110,     6,     0,   109,     6,     0,   111,     6,     0,   112,
-   151,   232,   152,     5,   153,     6,     0,   113,   151,   232,
-   153,     6,     0,   114,   151,     5,   152,     5,   152,   232,
-   152,   232,   152,     5,   152,     5,   152,     5,   153,     6,
-     0,     3,     7,    91,   151,     5,   152,   231,   153,     6,
-     0,     3,     7,    90,   151,     5,   152,   228,   152,   236,
-   152,   227,   152,   227,   152,   227,   152,   236,   152,   236,
-   152,   227,   153,     6,     0,     3,     7,    89,   151,     5,
-   152,   228,   152,   228,   152,   234,   152,   227,   152,   227,
-   152,   227,   152,   227,   152,   236,   152,   236,   152,   236,
-   152,   236,   152,   227,   153,     6,     0,     3,     7,    97,
-   151,     5,   152,     3,   152,     3,   152,     3,   152,   227,
-   153,     6,     0,     3,     7,   101,   151,     5,   152,     3,
-   152,   227,   153,     6,     0,     3,     7,   118,   151,     5,
-   152,     3,   152,   227,   153,     6,     0,     3,     7,    99,
-   151,     5,   152,   146,   152,   146,   152,   228,   152,   227,
-   153,     6,     0,     3,     7,   102,   151,     5,   152,   236,
-   153,     6,     0,     3,     7,   103,   151,     5,   152,   236,
-   152,     3,   152,   227,   153,     6,     0,     3,     7,    98,
-   151,     5,   152,     3,   153,     6,     0,     3,     7,   104,
-   151,     5,   152,     3,   152,   228,   153,     6,     0,     3,
-     7,   106,   151,     5,   152,     3,   152,     3,   152,     3,
-   153,     6,     0,     3,     7,   105,   151,     5,   152,   231,
-   153,     6,     0,     3,     7,   100,   151,     5,   152,     3,
-   153,     6,     0,     3,     7,    33,   151,     5,   152,     3,
-   152,     3,   153,     6,     0,     3,     7,   116,   151,     5,
-   152,   236,   153,     6,     0,     3,     7,   117,   151,     5,
-   152,   236,   152,     3,   153,     6,     0,     3,     7,   115,
-   151,     5,   152,     3,   153,     6,     0,     3,     7,   119,
-   151,     5,   152,     3,   152,   228,   153,     6,     0,     3,
-     7,   120,   151,     5,   152,     3,   152,   228,   152,   228,
-   153,     6,     0,     3,     7,   127,   151,     5,   152,     3,
-   152,   228,   152,   228,   153,     6,     0,     3,     7,   121,
-   151,     5,   152,     3,   152,   228,   153,     6,     0,     3,
-     7,   131,   151,     5,   152,     3,   152,   228,   152,   228,
-   153,     6,     0,     3,     7,   122,   151,     5,   152,     3,
-   152,   236,   152,   236,   152,   227,   152,   227,   153,     6,
-     0,     3,     7,   123,   151,     5,   152,   236,   153,     6,
-     0,     3,     7,   124,   151,   125,   152,   227,   152,     3,
-   153,     6,     0,     3,     7,   126,   151,     5,   152,   236,
-   152,   227,   153,     6,     0,     3,     7,   128,   151,     5,
-   152,     5,   152,     3,   152,     3,   153,     6,     0,     3,
-     7,   129,   151,     5,   152,     5,   152,     3,   153,     6,
-     0,     3,     7,   130,   151,     3,   152,     3,   153,     6,
-     0,     0,   165,   166,     0,   167,     0,   205,     0,   206,
-     0,   207,     0,   210,     0,   211,     0,   213,     0,   216,
-     0,   217,     0,   212,     0,   218,     0,     1,     6,     0,
-    62,     5,   154,   168,   155,     6,     0,    62,     5,    63,
-   231,   154,   168,   155,     6,     0,     0,   168,   170,     0,
-   168,   173,     0,   168,   176,     0,   168,   179,     0,   168,
-   182,     0,   168,   185,     0,   168,   188,     0,   168,   191,
-     0,   168,   194,     0,   168,   197,     0,   168,   200,     0,
-   168,   203,     0,   228,     0,   169,   152,   228,     0,     0,
-    75,   151,   228,   152,   228,   152,   228,   153,   171,   154,
-   169,   155,     6,     0,   228,     0,   172,   152,   228,     0,
-     0,    76,   151,   228,   152,   228,   152,   228,   153,   174,
-   154,   172,   155,     6,     0,   228,     0,   175,   152,   228,
-     0,     0,    77,   151,   228,   152,   228,   152,   228,   153,
-   177,   154,   175,   155,     6,     0,   228,     0,   178,   152,
-   228,     0,     0,    72,   151,   228,   152,   228,   152,   228,
-   152,   228,   152,   228,   152,   228,   153,   180,   154,   178,
-   155,     6,     0,   228,     0,   181,   152,   228,     0,     0,
-    73,   151,   228,   152,   228,   152,   228,   152,   228,   152,
-   228,   152,   228,   153,   183,   154,   181,   155,     6,     0,
-   228,     0,   184,   152,   228,     0,     0,    74,   151,   228,
-   152,   228,   152,   228,   152,   228,   152,   228,   152,   228,
-   153,   186,   154,   184,   155,     6,     0,   228,     0,   187,
-   152,   228,     0,     0,    69,   151,   228,   152,   228,   152,
-   228,   152,   228,   152,   228,   152,   228,   152,   228,   152,
-   228,   152,   228,   153,   189,   154,   187,   155,     6,     0,
-   228,     0,   190,   152,   228,     0,     0,    70,   151,   228,
-   152,   228,   152,   228,   152,   228,   152,   228,   152,   228,
-   152,   228,   152,   228,   152,   228,   153,   192,   154,   190,
-   155,     6,     0,   228,     0,   193,   152,   228,     0,     0,
-    71,   151,   228,   152,   228,   152,   228,   152,   228,   152,
-   228,   152,   228,   152,   228,   152,   228,   152,   228,   153,
-   195,   154,   193,   155,     6,     0,   228,     0,   196,   152,
-   228,     0,     0,    66,   151,   228,   152,   228,   152,   228,
-   152,   228,   152,   228,   152,   228,   152,   228,   152,   228,
-   152,   228,   152,   228,   152,   228,   152,   228,   153,   198,
-   154,   196,   155,     6,     0,   228,     0,   199,   152,   228,
-     0,     0,    67,   151,   228,   152,   228,   152,   228,   152,
-   228,   152,   228,   152,   228,   152,   228,   152,   228,   152,
-   228,   152,   228,   152,   228,   152,   228,   153,   201,   154,
-   199,   155,     6,     0,   228,     0,   202,   152,   228,     0,
-     0,    68,   151,   228,   152,   228,   152,   228,   152,   228,
-   152,   228,   152,   228,   152,   228,   152,   228,   152,   228,
-   152,   228,   152,   228,   152,   228,   153,   204,   154,   202,
-   155,     6,     0,     4,     7,   228,     6,     0,    30,   151,
-   228,   153,     7,   231,     6,     0,    45,    30,   151,   228,
-   153,     7,   236,     6,     0,    64,    30,   236,     7,   151,
-   228,   152,   228,   152,   228,   153,     6,     0,    37,    38,
-   236,     7,   228,     6,     0,    30,   154,   228,   155,     6,
-     0,    33,   151,   228,   153,     7,   236,     6,     0,    35,
-   151,   228,   153,     7,   236,     6,     0,    64,    33,   236,
-     7,   154,   228,   152,   228,   152,   228,   155,     6,     0,
-    31,   151,   228,   153,     7,   236,     6,     0,    31,   151,
-   228,   153,     7,   236,    41,   231,     6,     0,    39,   151,
-   228,   153,     7,   154,   228,   152,   228,   152,     5,   152,
-     5,   152,     5,   155,     6,     0,    32,   151,   228,   153,
-     7,   236,     6,     0,    45,    33,   151,   228,   153,     7,
-   236,     6,     0,    33,    57,   151,   228,   153,     7,   236,
-     6,     0,    78,   151,   228,   153,     7,   236,     6,     0,
-    79,   151,   228,   153,     7,   236,    83,   236,    80,   228,
-     6,     0,    33,   154,   228,   155,     6,     0,    41,    34,
-   151,   228,   153,     7,   236,     6,     0,   132,    34,   151,
-   228,   153,     7,   228,   236,     6,     0,    42,    34,   151,
-   228,   153,     7,   236,     6,     0,    79,    34,    81,    82,
-   151,   228,   153,     7,   234,    83,   154,   236,   152,   236,
-   155,    80,   154,   228,   152,   228,   155,     6,     0,    79,
-    34,   151,   228,   153,     7,   234,    83,   154,   236,   152,
-   236,   155,    80,   154,   228,   152,   228,   155,     6,     0,
-    45,    34,   151,   228,   153,     7,   236,     6,     0,    34,
-    57,   151,   228,   153,     7,   236,     6,     0,    34,   154,
-   228,   155,     6,     0,    44,    36,   151,   228,   153,     7,
-   236,     6,     0,    36,   151,   228,   153,     7,   236,     6,
-     0,    45,    36,   151,   228,   153,     7,   236,     6,     0,
-    52,   231,   154,   208,   155,     0,    51,   154,   231,   152,
-   231,   152,   228,   155,   154,   208,   155,     0,    53,   231,
-   154,   208,   155,     0,    54,   154,   231,   152,   228,   155,
-   154,   208,   155,     0,   210,     0,   209,     0,   207,     0,
-     0,   209,   206,     0,    56,   154,   209,   155,     0,    60,
-   154,   209,   155,     0,    58,     5,     6,     0,    55,    30,
-   154,   228,   152,   231,   155,     6,     0,    55,    30,   154,
-   228,   152,   231,   152,   231,   152,   228,   155,     6,     0,
-    55,    33,   154,   228,   152,   231,   155,     6,     0,    55,
-    33,   154,   228,   152,   231,   152,   231,   152,   228,   155,
-     6,     0,    55,    34,   154,   228,   152,   231,   155,     6,
-     0,    55,    34,   154,   228,   152,   231,   152,   231,   152,
-   228,   155,     6,     0,    55,    34,   154,   228,   152,   231,
-   155,   154,   214,   155,     6,     0,    55,    34,   154,   228,
-   152,   231,   152,   231,   152,   228,   155,   154,   214,   155,
-     6,     0,   215,     0,   214,   215,     0,    65,   154,   236,
-   152,   236,   152,   236,   155,     6,     0,    59,     6,     0,
-    43,    33,   236,     7,   228,     6,     0,    43,    33,   236,
-     7,   228,    46,    49,   228,     6,     0,    43,    33,   236,
-     7,   228,    46,    48,   228,     6,     0,    43,    34,   154,
-   228,   155,     7,   236,     6,     0,    40,    34,   154,   228,
-   155,     7,   236,     6,     0,    43,    36,   154,   228,   155,
-     7,   236,     6,     0,    59,    34,   236,     7,   228,     6,
-     0,    59,    34,   236,     6,     0,    61,     6,     0,    84,
-   154,   219,   155,     0,    88,    41,   151,   228,   153,     7,
-   154,   228,   152,   228,   152,   228,   152,   228,   155,     6,
-     0,     0,   219,   220,     0,     0,    85,   221,   154,   224,
-   155,     0,     0,    86,   222,   154,   224,   155,     0,     0,
-    87,   223,   154,   224,   155,     0,     0,   225,   224,     0,
-     4,     7,     4,     6,     0,     4,     7,   154,     4,   152,
-   228,   155,     6,     0,     4,     7,   226,     6,     0,   154,
-   228,   152,   228,   152,   228,   152,   228,   155,     0,   154,
-   228,   152,   228,   152,   228,   155,     0,    92,     0,    93,
-     0,    94,     0,    95,     0,    96,     0,   229,     0,   151,
-   228,   153,     0,   228,   145,   228,     0,   228,   144,   228,
-     0,   228,   146,   228,     0,   228,   147,   228,     0,   228,
-   150,   228,     0,   145,   228,     0,   144,   228,     0,    10,
-   151,   228,   153,     0,    11,   151,   228,   153,     0,    12,
-   151,   228,   153,     0,    13,   151,   228,   153,     0,    14,
-   151,   228,   153,     0,    15,   151,   228,   153,     0,    16,
-   151,   228,   153,     0,    17,   151,   228,   153,     0,    18,
-   151,   228,   153,     0,    19,   151,   228,   153,     0,    20,
-   151,   228,   152,   228,   153,     0,    21,   151,   228,   153,
-     0,    22,   151,   228,   153,     0,    23,   151,   228,   153,
-     0,    24,   151,   228,   153,     0,    25,   151,   228,   153,
-     0,    26,   151,   228,   153,     0,    27,   151,   228,   152,
-   228,   153,     0,    28,   151,   228,   152,   228,   153,     0,
-    29,   151,   228,   152,   228,   153,     0,     3,     0,     9,
-     0,     4,     0,   228,     8,   228,     0,   228,     8,   156,
-   228,   157,   228,     0,   154,   228,   152,   228,   152,   228,
-   152,   228,   152,   228,   155,     0,   154,   228,   152,   228,
-   152,   228,   152,   228,   155,     0,   154,   228,   152,   228,
-   152,   228,   155,     0,   151,   228,   152,   228,   152,   228,
-   153,     0,     0,   151,   233,   153,     0,     5,     0,   233,
-   152,     5,     0,     0,   154,   235,   155,     0,   151,   235,
-   153,     0,   236,     0,   235,   152,   236,     0,     0,   228,
-     0,   154,   237,   155,     0,   228,     0,   230,     0,   237,
-   152,   228,     0,   237,   152,   230,     0
+static const short yyrhs[] = {   162,
+     0,   161,     0,   167,     0,   135,     0,   138,   139,   241,
+   241,   241,   140,   141,   137,   241,   241,   241,   137,   241,
+   241,   241,   137,   241,   241,   241,   142,   143,     0,   136,
+     0,     0,   162,   163,     0,   164,     0,   166,     0,   165,
+     0,     1,     6,     0,   109,     6,     0,   110,     6,     0,
+   112,     6,     0,   111,     6,     0,   113,     6,     0,   114,
+   153,   245,   154,     5,   155,     6,     0,   115,   153,   245,
+   155,     6,     0,   116,   153,     5,   154,     5,   154,   245,
+   154,   245,   154,     5,   154,     5,   154,     5,   155,     6,
+     0,     3,     7,    93,   153,     5,   154,   244,   155,     6,
+     0,     3,     7,    92,   153,     5,   154,   241,   154,   249,
+   154,   240,   154,   240,   154,   240,   154,   249,   154,   249,
+   154,   240,   155,     6,     0,     3,     7,    91,   153,     5,
+   154,   241,   154,   241,   154,   247,   154,   240,   154,   240,
+   154,   240,   154,   240,   154,   249,   154,   249,   154,   249,
+   154,   249,   154,   240,   155,     6,     0,     3,     7,    99,
+   153,     5,   154,     3,   154,     3,   154,     3,   154,   240,
+   155,     6,     0,     3,     7,   103,   153,     5,   154,     3,
+   154,   240,   155,     6,     0,     3,     7,   120,   153,     5,
+   154,     3,   154,   240,   155,     6,     0,     3,     7,   101,
+   153,     5,   154,   148,   154,   148,   154,   241,   154,   240,
+   155,     6,     0,     3,     7,   104,   153,     5,   154,   249,
+   155,     6,     0,     3,     7,   105,   153,     5,   154,   249,
+   154,     3,   154,   240,   155,     6,     0,     3,     7,   100,
+   153,     5,   154,     3,   155,     6,     0,     3,     7,   106,
+   153,     5,   154,     3,   154,   241,   155,     6,     0,     3,
+     7,   108,   153,     5,   154,     3,   154,     3,   154,     3,
+   155,     6,     0,     3,     7,   107,   153,     5,   154,   244,
+   155,     6,     0,     3,     7,   102,   153,     5,   154,     3,
+   155,     6,     0,     3,     7,    33,   153,     5,   154,     3,
+   154,     3,   155,     6,     0,     3,     7,   118,   153,     5,
+   154,   249,   155,     6,     0,     3,     7,   119,   153,     5,
+   154,   249,   154,     3,   155,     6,     0,     3,     7,   117,
+   153,     5,   154,     3,   155,     6,     0,     3,     7,   121,
+   153,     5,   154,     3,   154,   241,   155,     6,     0,     3,
+     7,   122,   153,     5,   154,     3,   154,   241,   154,   241,
+   155,     6,     0,     3,     7,   129,   153,     5,   154,     3,
+   154,   241,   154,   241,   155,     6,     0,     3,     7,   123,
+   153,     5,   154,     3,   154,   241,   155,     6,     0,     3,
+     7,   133,   153,     5,   154,     3,   154,   241,   154,   241,
+   155,     6,     0,     3,     7,   124,   153,     5,   154,     3,
+   154,   249,   154,   249,   154,   240,   154,   240,   155,     6,
+     0,     3,     7,   125,   153,     5,   154,   249,   155,     6,
+     0,     3,     7,   126,   153,   127,   154,   240,   154,     3,
+   155,     6,     0,     3,     7,   128,   153,     5,   154,   249,
+   154,   240,   155,     6,     0,     3,     7,   130,   153,     5,
+   154,     5,   154,     3,   154,     3,   155,     6,     0,     3,
+     7,   131,   153,     5,   154,     5,   154,     3,   155,     6,
+     0,     3,     7,   132,   153,     3,   154,     3,   155,     6,
+     0,     0,   167,   168,     0,   169,     0,   207,     0,   208,
+     0,   209,     0,   212,     0,   213,     0,   215,     0,   218,
+     0,   219,     0,   214,     0,    85,   156,   220,   157,     0,
+     1,     6,     0,    62,     5,   156,   170,   157,     6,     0,
+    62,     5,    63,   244,   156,   170,   157,     6,     0,     0,
+   170,   172,     0,   170,   175,     0,   170,   178,     0,   170,
+   181,     0,   170,   184,     0,   170,   187,     0,   170,   190,
+     0,   170,   193,     0,   170,   196,     0,   170,   199,     0,
+   170,   202,     0,   170,   205,     0,   241,     0,   171,   154,
+   241,     0,     0,    75,   153,   241,   154,   241,   154,   241,
+   155,   173,   156,   171,   157,     6,     0,   241,     0,   174,
+   154,   241,     0,     0,    76,   153,   241,   154,   241,   154,
+   241,   155,   176,   156,   174,   157,     6,     0,   241,     0,
+   177,   154,   241,     0,     0,    77,   153,   241,   154,   241,
+   154,   241,   155,   179,   156,   177,   157,     6,     0,   241,
+     0,   180,   154,   241,     0,     0,    72,   153,   241,   154,
+   241,   154,   241,   154,   241,   154,   241,   154,   241,   155,
+   182,   156,   180,   157,     6,     0,   241,     0,   183,   154,
+   241,     0,     0,    73,   153,   241,   154,   241,   154,   241,
+   154,   241,   154,   241,   154,   241,   155,   185,   156,   183,
+   157,     6,     0,   241,     0,   186,   154,   241,     0,     0,
+    74,   153,   241,   154,   241,   154,   241,   154,   241,   154,
+   241,   154,   241,   155,   188,   156,   186,   157,     6,     0,
+   241,     0,   189,   154,   241,     0,     0,    69,   153,   241,
+   154,   241,   154,   241,   154,   241,   154,   241,   154,   241,
+   154,   241,   154,   241,   154,   241,   155,   191,   156,   189,
+   157,     6,     0,   241,     0,   192,   154,   241,     0,     0,
+    70,   153,   241,   154,   241,   154,   241,   154,   241,   154,
+   241,   154,   241,   154,   241,   154,   241,   154,   241,   155,
+   194,   156,   192,   157,     6,     0,   241,     0,   195,   154,
+   241,     0,     0,    71,   153,   241,   154,   241,   154,   241,
+   154,   241,   154,   241,   154,   241,   154,   241,   154,   241,
+   154,   241,   155,   197,   156,   195,   157,     6,     0,   241,
+     0,   198,   154,   241,     0,     0,    66,   153,   241,   154,
+   241,   154,   241,   154,   241,   154,   241,   154,   241,   154,
+   241,   154,   241,   154,   241,   154,   241,   154,   241,   154,
+   241,   155,   200,   156,   198,   157,     6,     0,   241,     0,
+   201,   154,   241,     0,     0,    67,   153,   241,   154,   241,
+   154,   241,   154,   241,   154,   241,   154,   241,   154,   241,
+   154,   241,   154,   241,   154,   241,   154,   241,   154,   241,
+   155,   203,   156,   201,   157,     6,     0,   241,     0,   204,
+   154,   241,     0,     0,    68,   153,   241,   154,   241,   154,
+   241,   154,   241,   154,   241,   154,   241,   154,   241,   154,
+   241,   154,   241,   154,   241,   154,   241,   154,   241,   155,
+   206,   156,   204,   157,     6,     0,     4,     7,   241,     6,
+     0,    30,   153,   241,   155,     7,   244,     6,     0,    45,
+    30,   153,   241,   155,     7,   249,     6,     0,    64,    30,
+   249,     7,   153,   241,   154,   241,   154,   241,   155,     6,
+     0,    37,    38,   249,     7,   241,     6,     0,    30,   156,
+   241,   157,     6,     0,    33,   153,   241,   155,     7,   249,
+     6,     0,    35,   153,   241,   155,     7,   249,     6,     0,
+    64,    33,   249,     7,   156,   241,   154,   241,   154,   241,
+   157,     6,     0,    31,   153,   241,   155,     7,   249,     6,
+     0,    31,   153,   241,   155,     7,   249,    41,   244,     6,
+     0,    39,   153,   241,   155,     7,   156,   241,   154,   241,
+   154,     5,   154,     5,   154,     5,   157,     6,     0,    32,
+   153,   241,   155,     7,   249,     6,     0,    45,    33,   153,
+   241,   155,     7,   249,     6,     0,    33,    57,   153,   241,
+   155,     7,   249,     6,     0,    78,   153,   241,   155,     7,
+   249,     6,     0,    79,   153,   241,   155,     7,   249,    83,
+   249,    80,   241,     6,     0,    33,   156,   241,   157,     6,
+     0,    41,    34,   153,   241,   155,     7,   249,     6,     0,
+   134,    34,   153,   241,   155,     7,   241,   249,     6,     0,
+    42,    34,   153,   241,   155,     7,   249,     6,     0,    79,
+    34,    81,    82,   153,   241,   155,     7,   247,    83,   156,
+   249,   154,   249,   157,    80,   156,   241,   154,   241,   157,
+     6,     0,    79,    34,   153,   241,   155,     7,   247,    83,
+   156,   249,   154,   249,   157,    80,   156,   241,   154,   241,
+   157,     6,     0,    45,    34,   153,   241,   155,     7,   249,
+     6,     0,    34,    57,   153,   241,   155,     7,   249,     6,
+     0,    34,   156,   241,   157,     6,     0,    44,    36,   153,
+   241,   155,     7,   249,     6,     0,    36,   153,   241,   155,
+     7,   249,     6,     0,    45,    36,   153,   241,   155,     7,
+   249,     6,     0,    52,   244,   156,   210,   157,     0,    51,
+   156,   244,   154,   244,   154,   241,   157,   156,   210,   157,
+     0,    53,   244,   156,   210,   157,     0,    54,   156,   244,
+   154,   241,   157,   156,   210,   157,     0,   212,     0,   211,
+     0,   209,     0,     0,   211,   208,     0,    56,   156,   211,
+   157,     0,    60,   156,   211,   157,     0,    58,     5,     6,
+     0,    55,    30,   156,   241,   154,   244,   157,     6,     0,
+    55,    30,   156,   241,   154,   244,   154,   244,   154,   241,
+   157,     6,     0,    55,    33,   156,   241,   154,   244,   157,
+     6,     0,    55,    33,   156,   241,   154,   244,   154,   244,
+   154,   241,   157,     6,     0,    55,    34,   156,   241,   154,
+   244,   157,     6,     0,    55,    34,   156,   241,   154,   244,
+   154,   244,   154,   241,   157,     6,     0,    55,    34,   156,
+   241,   154,   244,   157,   156,   216,   157,     6,     0,    55,
+    34,   156,   241,   154,   244,   154,   244,   154,   241,   157,
+   156,   216,   157,     6,     0,   217,     0,   216,   217,     0,
+    65,   156,   249,   154,   249,   154,   249,   157,     6,     0,
+    59,     6,     0,    43,    33,   249,     7,   241,     6,     0,
+    43,    33,   249,     7,   241,    46,    49,   241,     6,     0,
+    43,    33,   249,     7,   241,    46,    48,   241,     6,     0,
+    43,    34,   156,   241,   157,     7,   249,     6,     0,    40,
+    34,   156,   241,   157,     7,   249,     6,     0,    43,    36,
+   156,   241,   157,     7,   249,     6,     0,    59,    34,   249,
+     7,   241,     6,     0,    59,    34,   249,     6,     0,    61,
+     6,     0,     0,   220,   221,     0,    86,   156,   222,   157,
+     0,    87,   156,   225,   157,     0,    88,   156,   228,   157,
+     0,    89,   156,   231,   157,     0,    90,   156,   234,   157,
+     0,     0,   222,   223,     0,     4,     7,     5,     6,     0,
+     4,     7,   241,     6,     0,     4,     7,   244,     6,     0,
+     0,    84,   224,   156,   237,   157,     0,     0,   225,   226,
+     0,     4,     7,     5,     6,     0,     4,     7,   241,     6,
+     0,     4,     7,   244,     6,     0,     0,    84,   227,   156,
+   237,   157,     0,     0,   228,   229,     0,     4,     7,     5,
+     6,     0,     4,     7,   241,     6,     0,     4,     7,   244,
+     6,     0,     0,    84,   230,   156,   237,   157,     0,     0,
+   231,   232,     0,     4,     7,     5,     6,     0,     4,     7,
+   241,     6,     0,     4,     7,   244,     6,     0,     0,    84,
+   233,   156,   237,   157,     0,     0,   234,   235,     0,     4,
+     7,     5,     6,     0,     4,     7,   241,     6,     0,     4,
+     7,   244,     6,     0,     0,    84,   236,   156,   237,   157,
+     0,     0,   238,   237,     0,     4,     7,     4,     6,     0,
+     4,     7,   156,     4,   154,   241,   157,     6,     0,     4,
+     7,   239,     6,     0,   156,   241,   154,   241,   154,   241,
+   154,   241,   157,     0,   156,   241,   154,   241,   154,   241,
+   157,     0,    94,     0,    95,     0,    96,     0,    97,     0,
+    98,     0,   242,     0,   153,   241,   155,     0,   241,   147,
+   241,     0,   241,   146,   241,     0,   241,   148,   241,     0,
+   241,   149,   241,     0,   241,   152,   241,     0,   147,   241,
+     0,   146,   241,     0,    10,   153,   241,   155,     0,    11,
+   153,   241,   155,     0,    12,   153,   241,   155,     0,    13,
+   153,   241,   155,     0,    14,   153,   241,   155,     0,    15,
+   153,   241,   155,     0,    16,   153,   241,   155,     0,    17,
+   153,   241,   155,     0,    18,   153,   241,   155,     0,    19,
+   153,   241,   155,     0,    20,   153,   241,   154,   241,   155,
+     0,    21,   153,   241,   155,     0,    22,   153,   241,   155,
+     0,    23,   153,   241,   155,     0,    24,   153,   241,   155,
+     0,    25,   153,   241,   155,     0,    26,   153,   241,   155,
+     0,    27,   153,   241,   154,   241,   155,     0,    28,   153,
+   241,   154,   241,   155,     0,    29,   153,   241,   154,   241,
+   155,     0,     3,     0,     9,     0,     4,     0,   241,     8,
+   241,     0,   241,     8,   158,   241,   159,   241,     0,   156,
+   241,   154,   241,   154,   241,   154,   241,   154,   241,   157,
+     0,   156,   241,   154,   241,   154,   241,   154,   241,   157,
+     0,   156,   241,   154,   241,   154,   241,   157,     0,   153,
+   241,   154,   241,   154,   241,   155,     0,     0,   153,   246,
+   155,     0,     5,     0,   246,   154,     5,     0,     0,   156,
+   248,   157,     0,   153,   248,   155,     0,   249,     0,   248,
+   154,   249,     0,     0,   241,     0,   156,   250,   157,     0,
+   241,     0,   243,     0,   250,   154,   241,     0,   250,   154,
+   243,     0
 };
 
 #endif
 
 #if YYDEBUG != 0
 static const short yyrline[] = { 0,
-   114,   116,   117,   124,   132,   146,   158,   160,   163,   165,
-   166,   167,   170,   176,   181,   182,   183,   186,   190,   193,
-   199,   204,   210,   218,   223,   227,   233,   238,   242,   247,
-   251,   254,   259,   263,   267,   271,   276,   280,   283,   287,
-   291,   295,   299,   303,   307,   310,   314,   317,   321,   324,
-   333,   335,   341,   343,   344,   345,   346,   347,   348,   349,
-   350,   351,   352,   353,   360,   365,   371,   376,   377,   378,
-   379,   380,   381,   382,   383,   384,   385,   386,   387,   390,
-   393,   397,   403,   409,   412,   416,   422,   428,   431,   435,
-   441,   447,   450,   454,   462,   468,   471,   475,   483,   489,
-   492,   496,   504,   510,   513,   517,   529,   535,   538,   542,
-   554,   560,   563,   567,   579,   585,   588,   592,   605,   611,
-   614,   618,   631,   637,   640,   644,   657,   669,   683,   694,
-   700,   719,   730,   738,   744,   750,   769,   775,   791,   798,
-   804,   810,   816,   822,   841,   853,   859,   878,   899,   907,
-   913,   919,   925,   937,   943,   949,   961,   967,   972,   977,
-   984,   986,   987,   990,   995,  1006,  1024,  1039,  1070,  1076,
-  1082,  1086,  1090,  1094,  1098,  1103,  1110,  1114,  1119,  1137,
-  1147,  1165,  1182,  1199,  1220,  1240,  1260,  1277,  1301,  1312,
-  1314,  1329,  1331,  1334,  1337,  1338,  1340,  1341,  1343,  1346,
-  1348,  1351,  1362,  1372,  1382,  1390,  1466,  1468,  1469,  1470,
-  1471,  1474,  1476,  1477,  1478,  1479,  1480,  1481,  1482,  1483,
-  1484,  1485,  1486,  1487,  1488,  1489,  1490,  1491,  1492,  1493,
-  1494,  1495,  1496,  1497,  1498,  1499,  1500,  1501,  1502,  1503,
-  1506,  1508,  1509,  1520,  1527,  1540,  1549,  1557,  1565,  1575,
-  1579,  1584,  1588,  1593,  1597,  1601,  1607,  1613,  1619,  1623,
-  1629,  1642,  1648,  1657,  1661
+   110,   112,   113,   120,   128,   142,   154,   156,   159,   161,
+   162,   163,   166,   172,   177,   178,   179,   182,   186,   189,
+   195,   200,   206,   214,   219,   223,   229,   234,   238,   243,
+   247,   250,   255,   259,   263,   267,   272,   276,   279,   283,
+   287,   291,   295,   299,   303,   306,   310,   313,   317,   320,
+   329,   331,   337,   339,   340,   341,   342,   343,   344,   345,
+   346,   347,   348,   349,   356,   361,   367,   372,   373,   374,
+   375,   376,   377,   378,   379,   380,   381,   382,   383,   386,
+   389,   393,   399,   405,   408,   412,   418,   424,   427,   431,
+   437,   443,   446,   450,   458,   464,   467,   471,   479,   485,
+   488,   492,   500,   506,   509,   513,   525,   531,   534,   538,
+   550,   556,   559,   563,   575,   581,   584,   588,   601,   607,
+   610,   614,   627,   633,   636,   640,   653,   665,   679,   690,
+   696,   715,   726,   734,   740,   746,   765,   771,   787,   794,
+   800,   806,   812,   818,   837,   849,   855,   874,   895,   903,
+   909,   915,   921,   933,   939,   945,   957,   963,   968,   973,
+   980,   982,   983,   986,   991,  1002,  1020,  1035,  1066,  1072,
+  1078,  1082,  1086,  1090,  1094,  1099,  1106,  1110,  1115,  1133,
+  1143,  1161,  1178,  1195,  1216,  1236,  1256,  1273,  1297,  1308,
+  1310,  1313,  1315,  1316,  1317,  1318,  1321,  1323,  1326,  1332,
+  1337,  1341,  1343,  1346,  1348,  1351,  1357,  1362,  1367,  1369,
+  1372,  1374,  1377,  1383,  1388,  1393,  1395,  1398,  1400,  1403,
+  1409,  1414,  1419,  1421,  1424,  1426,  1429,  1435,  1440,  1445,
+  1447,  1450,  1452,  1455,  1463,  1470,  1478,  1486,  1500,  1502,
+  1503,  1504,  1505,  1508,  1510,  1511,  1512,  1513,  1514,  1515,
+  1516,  1517,  1518,  1519,  1520,  1521,  1522,  1523,  1524,  1525,
+  1526,  1527,  1528,  1529,  1530,  1531,  1532,  1533,  1534,  1535,
+  1536,  1537,  1540,  1542,  1543,  1554,  1561,  1574,  1583,  1591,
+  1599,  1609,  1613,  1618,  1622,  1627,  1631,  1635,  1641,  1647,
+  1653,  1657,  1663,  1676,  1682,  1691,  1695
 };
 #endif
 
@@ -527,29 +543,32 @@ static const char * const yytname[] = {   "$","error","$undefined.","tDOUBLE",
 "tCoherence","tView","tOffset","tAttractor","tLayers","tScalarTetrahedron","tVectorTetrahedron",
 "tTensorTetrahedron","tScalarTriangle","tVectorTriangle","tTensorTriangle","tScalarLine",
 "tVectorLine","tTensorLine","tScalarPoint","tVectorPoint","tTensorPoint","tBSpline",
-"tNurbs","tOrder","tWith","tBounds","tKnots","tColor","tGeneral","tGeometry",
-"tMesh","tClip","tB_SPLINE_SURFACE_WITH_KNOTS","tB_SPLINE_CURVE_WITH_KNOTS",
-"tCARTESIAN_POINT","tTRUE","tFALSE","tUNSPECIFIED","tU","tV","tEDGE_CURVE","tVERTEX_POINT",
-"tORIENTED_EDGE","tPLANE","tFACE_OUTER_BOUND","tEDGE_LOOP","tADVANCED_FACE",
-"tVECTOR","tDIRECTION","tAXIS2_PLACEMENT_3D","tISO","tENDISO","tENDSEC","tDATA",
-"tHEADER","tFILE_DESCRIPTION","tFILE_SCHEMA","tFILE_NAME","tMANIFOLD_SOLID_BREP",
-"tCLOSED_SHELL","tADVANCED_BREP_SHAPE_REPRESENTATION","tFACE_BOUND","tCYLINDRICAL_SURFACE",
-"tCONICAL_SURFACE","tCIRCLE","tTRIMMED_CURVE","tGEOMETRIC_SET","tCOMPOSITE_CURVE_SEGMENT",
-"tCONTINUOUS","tCOMPOSITE_CURVE","tTOROIDAL_SURFACE","tPRODUCT_DEFINITION","tPRODUCT_DEFINITION_SHAPE",
-"tSHAPE_DEFINITION_REPRESENTATION","tELLIPSE","tTrimmed","tSolid","tEndSolid",
-"tVertex","tFacet","tNormal","tOuter","tLoopSTL","tEndLoop","tEndFacet","'<'",
-"'>'","'+'","'-'","'*'","'/'","'%'","UMINUS","'^'","'('","','","')'","'{'","'}'",
-"'['","']'","All","STLFormatItem","StepFormatItems","StepFormatItem","StepSpecial",
-"StepHeaderItem","StepDataItem","GeomFormatList","GeomFormat","View","Views",
-"ScalarPointValues","ScalarPoint","@1","VectorPointValues","VectorPoint","@2",
-"TensorPointValues","TensorPoint","@3","ScalarLineValues","ScalarLine","@4",
-"VectorLineValues","VectorLine","@5","TensorLineValues","TensorLine","@6","ScalarTriangleValues",
-"ScalarTriangle","@7","VectorTriangleValues","VectorTriangle","@8","TensorTriangleValues",
-"TensorTriangle","@9","ScalarTetrahedronValues","ScalarTetrahedron","@10","VectorTetrahedronValues",
+"tNurbs","tOrder","tWith","tBounds","tKnots","tColor","tOptions","tGeneral",
+"tGeometry","tMesh","tPostProcessing","tPrint","tB_SPLINE_SURFACE_WITH_KNOTS",
+"tB_SPLINE_CURVE_WITH_KNOTS","tCARTESIAN_POINT","tTRUE","tFALSE","tUNSPECIFIED",
+"tU","tV","tEDGE_CURVE","tVERTEX_POINT","tORIENTED_EDGE","tPLANE","tFACE_OUTER_BOUND",
+"tEDGE_LOOP","tADVANCED_FACE","tVECTOR","tDIRECTION","tAXIS2_PLACEMENT_3D","tISO",
+"tENDISO","tENDSEC","tDATA","tHEADER","tFILE_DESCRIPTION","tFILE_SCHEMA","tFILE_NAME",
+"tMANIFOLD_SOLID_BREP","tCLOSED_SHELL","tADVANCED_BREP_SHAPE_REPRESENTATION",
+"tFACE_BOUND","tCYLINDRICAL_SURFACE","tCONICAL_SURFACE","tCIRCLE","tTRIMMED_CURVE",
+"tGEOMETRIC_SET","tCOMPOSITE_CURVE_SEGMENT","tCONTINUOUS","tCOMPOSITE_CURVE",
+"tTOROIDAL_SURFACE","tPRODUCT_DEFINITION","tPRODUCT_DEFINITION_SHAPE","tSHAPE_DEFINITION_REPRESENTATION",
+"tELLIPSE","tTrimmed","tSolid","tEndSolid","tVertex","tFacet","tNormal","tOuter",
+"tLoopSTL","tEndLoop","tEndFacet","'<'","'>'","'+'","'-'","'*'","'/'","'%'",
+"UMINUS","'^'","'('","','","')'","'{'","'}'","'['","']'","All","STLFormatItem",
+"StepFormatItems","StepFormatItem","StepSpecial","StepHeaderItem","StepDataItem",
+"GeomFormatList","GeomFormat","View","Views","ScalarPointValues","ScalarPoint",
+"@1","VectorPointValues","VectorPoint","@2","TensorPointValues","TensorPoint",
+"@3","ScalarLineValues","ScalarLine","@4","VectorLineValues","VectorLine","@5",
+"TensorLineValues","TensorLine","@6","ScalarTriangleValues","ScalarTriangle",
+"@7","VectorTriangleValues","VectorTriangle","@8","TensorTriangleValues","TensorTriangle",
+"@9","ScalarTetrahedronValues","ScalarTetrahedron","@10","VectorTetrahedronValues",
 "VectorTetrahedron","@11","TensorTetrahedronValues","TensorTetrahedron","@12",
 "Affectation","Shape","Transform","MultipleShape","ListOfShapes","Duplicata",
 "Delete","Macro","Extrude","ExtrudeParameters","ExtrudeParameter","Transfini",
-"Coherence","Options","ColorSections","ColorSection","@13","@14","@15","ColorAffects",
+"Coherence","Options","Option","GeneralOptions","GeneralOption","@13","GeometryOptions",
+"GeometryOption","@14","MeshOptions","MeshOption","@15","PostProcessingOptions",
+"PostProcessingOption","@16","PrintOptions","PrintOption","@17","ColorAffects",
 "ColorAffect","RGBAExpr","BoolExpr","FExpr","FExpr_Single","FExpr_Range","VExpr",
 "ListOfStrings","RecursiveListOfStrings","ListOfListOfDouble","RecursiveListOfListOfDouble",
 "ListOfDouble","RecursiveListOfDouble", NULL
@@ -557,33 +576,36 @@ static const char * const yytname[] = {   "$","error","$undefined.","tDOUBLE",
 #endif
 
 static const short yyr1[] = {     0,
-   158,   158,   158,   159,   159,   159,   160,   160,   161,   161,
-   161,   161,   162,   162,   162,   162,   162,   163,   163,   163,
-   164,   164,   164,   164,   164,   164,   164,   164,   164,   164,
-   164,   164,   164,   164,   164,   164,   164,   164,   164,   164,
-   164,   164,   164,   164,   164,   164,   164,   164,   164,   164,
-   165,   165,   166,   166,   166,   166,   166,   166,   166,   166,
-   166,   166,   166,   166,   167,   167,   168,   168,   168,   168,
-   168,   168,   168,   168,   168,   168,   168,   168,   168,   169,
-   169,   171,   170,   172,   172,   174,   173,   175,   175,   177,
-   176,   178,   178,   180,   179,   181,   181,   183,   182,   184,
-   184,   186,   185,   187,   187,   189,   188,   190,   190,   192,
-   191,   193,   193,   195,   194,   196,   196,   198,   197,   199,
-   199,   201,   200,   202,   202,   204,   203,   205,   206,   206,
-   206,   206,   206,   206,   206,   206,   206,   206,   206,   206,
-   206,   206,   206,   206,   206,   206,   206,   206,   206,   206,
-   206,   206,   206,   206,   206,   206,   207,   207,   207,   207,
-   208,   208,   208,   209,   209,   210,   211,   212,   213,   213,
-   213,   213,   213,   213,   213,   213,   214,   214,   215,   215,
-   216,   216,   216,   216,   216,   216,   216,   216,   217,   218,
-   218,   219,   219,   221,   220,   222,   220,   223,   220,   224,
-   224,   225,   225,   225,   226,   226,   227,   227,   227,   227,
-   227,   228,   228,   228,   228,   228,   228,   228,   228,   228,
-   228,   228,   228,   228,   228,   228,   228,   228,   228,   228,
-   228,   228,   228,   228,   228,   228,   228,   228,   228,   228,
-   229,   229,   229,   230,   230,   231,   231,   231,   231,   232,
-   232,   233,   233,   234,   234,   234,   235,   235,   236,   236,
-   236,   237,   237,   237,   237
+   160,   160,   160,   161,   161,   161,   162,   162,   163,   163,
+   163,   163,   164,   164,   164,   164,   164,   165,   165,   165,
+   166,   166,   166,   166,   166,   166,   166,   166,   166,   166,
+   166,   166,   166,   166,   166,   166,   166,   166,   166,   166,
+   166,   166,   166,   166,   166,   166,   166,   166,   166,   166,
+   167,   167,   168,   168,   168,   168,   168,   168,   168,   168,
+   168,   168,   168,   168,   169,   169,   170,   170,   170,   170,
+   170,   170,   170,   170,   170,   170,   170,   170,   170,   171,
+   171,   173,   172,   174,   174,   176,   175,   177,   177,   179,
+   178,   180,   180,   182,   181,   183,   183,   185,   184,   186,
+   186,   188,   187,   189,   189,   191,   190,   192,   192,   194,
+   193,   195,   195,   197,   196,   198,   198,   200,   199,   201,
+   201,   203,   202,   204,   204,   206,   205,   207,   208,   208,
+   208,   208,   208,   208,   208,   208,   208,   208,   208,   208,
+   208,   208,   208,   208,   208,   208,   208,   208,   208,   208,
+   208,   208,   208,   208,   208,   208,   209,   209,   209,   209,
+   210,   210,   210,   211,   211,   212,   213,   214,   215,   215,
+   215,   215,   215,   215,   215,   215,   216,   216,   217,   217,
+   218,   218,   218,   218,   218,   218,   218,   218,   219,   220,
+   220,   221,   221,   221,   221,   221,   222,   222,   223,   223,
+   223,   224,   223,   225,   225,   226,   226,   226,   227,   226,
+   228,   228,   229,   229,   229,   230,   229,   231,   231,   232,
+   232,   232,   233,   232,   234,   234,   235,   235,   235,   236,
+   235,   237,   237,   238,   238,   238,   239,   239,   240,   240,
+   240,   240,   240,   241,   241,   241,   241,   241,   241,   241,
+   241,   241,   241,   241,   241,   241,   241,   241,   241,   241,
+   241,   241,   241,   241,   241,   241,   241,   241,   241,   241,
+   241,   241,   242,   242,   242,   243,   243,   244,   244,   244,
+   244,   245,   245,   246,   246,   247,   247,   247,   248,   248,
+   249,   249,   249,   250,   250,   250,   250
 };
 
 static const short yyr2[] = {     0,
@@ -593,7 +615,7 @@ static const short yyr2[] = {     0,
     11,    13,     9,     9,    11,     9,    11,     9,    11,    13,
     13,    11,    13,    17,     9,    11,    11,    13,    11,     9,
      0,     2,     1,     1,     1,     1,     1,     1,     1,     1,
-     1,     1,     1,     2,     6,     8,     0,     2,     2,     2,
+     1,     1,     4,     2,     6,     8,     0,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     1,
      3,     0,    13,     1,     3,     0,    13,     1,     3,     0,
     13,     1,     3,     0,    19,     1,     3,     0,    19,     1,
@@ -605,15 +627,18 @@ static const short yyr2[] = {     0,
      8,     8,     5,     8,     7,     8,     5,    11,     5,     9,
      1,     1,     1,     0,     2,     4,     4,     3,     8,    12,
      8,    12,     8,    12,    11,    15,     1,     2,     9,     2,
-     6,     9,     9,     8,     8,     8,     6,     4,     2,     4,
-    16,     0,     2,     0,     5,     0,     5,     0,     5,     0,
-     2,     4,     8,     4,     9,     7,     1,     1,     1,     1,
-     1,     1,     3,     3,     3,     3,     3,     3,     2,     2,
-     4,     4,     4,     4,     4,     4,     4,     4,     4,     4,
-     6,     4,     4,     4,     4,     4,     4,     6,     6,     6,
-     1,     1,     1,     3,     6,    11,     9,     7,     7,     0,
-     3,     1,     3,     0,     3,     3,     1,     3,     0,     1,
-     3,     1,     1,     3,     3
+     6,     9,     9,     8,     8,     8,     6,     4,     2,     0,
+     2,     4,     4,     4,     4,     4,     0,     2,     4,     4,
+     4,     0,     5,     0,     2,     4,     4,     4,     0,     5,
+     0,     2,     4,     4,     4,     0,     5,     0,     2,     4,
+     4,     4,     0,     5,     0,     2,     4,     4,     4,     0,
+     5,     0,     2,     4,     8,     4,     9,     7,     1,     1,
+     1,     1,     1,     1,     3,     3,     3,     3,     3,     3,
+     2,     2,     4,     4,     4,     4,     4,     4,     4,     4,
+     4,     4,     6,     4,     4,     4,     4,     4,     4,     6,
+     6,     6,     1,     1,     1,     3,     6,    11,     9,     7,
+     7,     0,     3,     1,     3,     0,     3,     3,     1,     3,
+     0,     1,     3,     1,     1,     3,     3
 };
 
 static const short yydefact[] = {    51,
@@ -622,129 +647,135 @@ static const short yydefact[] = {    51,
     10,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,    52,    53,    54,    55,    56,
-    57,    58,    62,    59,    60,    61,    63,   241,   243,   242,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,    52,    53,    54,    55,    56,    57,
+    58,    62,    59,    60,    61,   273,   275,   274,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   212,    12,     0,    13,    14,    16,
-    15,    17,   250,   250,     0,    64,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   259,     0,
-     0,     0,     0,   259,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   164,     0,   259,   164,   189,     0,   259,   259,     0,     0,
-     0,   192,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   244,    12,     0,    13,    14,    16,    15,    17,
+   282,   282,     0,    64,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   291,     0,     0,     0,
+     0,   291,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   164,     0,
+   291,   164,   189,     0,   291,   291,     0,     0,     0,   190,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   220,   219,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   252,   251,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   260,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   164,   164,     0,
-     0,     0,     0,     0,   168,     0,     0,     0,    67,     0,
+     0,     0,     0,     0,     0,     0,     0,   292,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   164,   164,     0,     0,     0,     0,
+     0,   168,     0,     0,     0,    67,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   213,   215,   214,   216,   217,   218,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   245,   247,   246,   248,
+   249,   250,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   252,     0,     0,
-     0,     0,   128,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   262,   263,     0,     0,     0,     0,
+     0,     0,     0,   284,     0,     0,     0,     0,   128,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   163,     0,   162,   161,     0,     0,     0,
-     0,     0,   166,   165,   188,     0,   167,     0,     0,     0,
-     0,     0,     0,     0,     0,   194,   196,   198,   190,   193,
-     0,     0,   221,   222,   223,   224,   225,   226,   227,   228,
-   229,   230,     0,   232,   233,   234,   235,   236,   237,     0,
-     0,     0,   215,   214,     0,     0,     0,     0,     0,     0,
+   294,   295,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   163,
+     0,   162,   161,     0,     0,     0,     0,     0,   166,   165,
+   188,     0,   167,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,    63,   191,     0,   253,
+   254,   255,   256,   257,   258,   259,   260,   261,   262,     0,
+   264,   265,   266,   267,   268,   269,     0,     0,     0,   247,
+   246,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   251,     0,    19,     0,
-     0,   133,   259,   259,     0,   259,   145,     0,   153,   259,
-   259,     0,     0,   261,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   283,     0,    19,     0,     0,   133,   291,
+   291,     0,   291,   145,     0,   153,   291,   291,     0,     0,
+   293,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   157,   159,     0,
+     0,     0,     0,     0,    67,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    68,    69,
+    70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+     0,     0,   291,     0,     0,   291,   197,   204,   211,   218,
+   225,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   291,   291,     0,     0,
+     0,     0,   291,   291,     0,     0,     0,     0,     0,   291,
+     0,   291,     0,     0,     0,     0,     0,   285,     0,   282,
+     0,     0,     0,   291,     0,   291,     0,     0,     0,   276,
+   296,   297,   132,     0,   291,   291,   291,   181,     0,   291,
+   291,   291,   291,   291,   291,   291,     0,     0,     0,     0,
+     0,     0,     0,   187,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,    65,     0,     0,
+     0,     0,   286,     0,     0,     0,     0,     0,     0,     0,
+   263,   270,   271,   272,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   157,   159,     0,     0,     0,     0,     0,    67,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   239,   240,
+   241,   242,   243,     0,     0,     0,     0,     0,     0,     0,
+    18,     0,   129,   137,     0,   140,     0,   134,     0,   135,
+   155,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   164,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-    77,    78,    79,     0,     0,   259,     0,     0,   259,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   259,   259,
-     0,     0,     0,     0,   259,   259,     0,     0,     0,     0,
-     0,   259,     0,   259,     0,     0,     0,     0,     0,   253,
-     0,   250,     0,     0,     0,   259,     0,   259,     0,     0,
-     0,   244,   264,   265,   132,     0,   259,   259,   259,   181,
-     0,   259,   259,   259,   259,   259,   259,   259,     0,     0,
-     0,     0,     0,     0,     0,   187,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,    65,
-     0,     0,     0,     0,   254,     0,   200,   200,   200,     0,
-     0,   231,   238,   239,   240,     0,     0,     0,     0,     0,
+   143,     0,   291,   291,     0,   291,     0,   202,   192,   198,
+     0,   209,   193,   205,     0,   216,   194,   212,     0,   223,
+   195,   219,     0,   230,   196,   226,   291,     0,     0,     0,
+   291,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   291,
+     0,     0,     0,     0,     0,     0,     0,     0,   282,     0,
+   142,   152,     0,     0,   185,   146,   148,     0,     0,   184,
+   186,   154,   130,   141,   151,   156,     0,   281,     0,   280,
+     0,     0,   169,     0,   171,     0,   173,     0,    66,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   207,
-   208,   209,   210,   211,     0,     0,     0,     0,     0,     0,
-     0,    18,     0,   129,   137,     0,   140,     0,   134,     0,
-   135,   155,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   164,
+     0,     0,     0,   286,     0,   289,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,    21,     0,    30,     0,    34,     0,
+    28,     0,     0,    33,     0,    38,    36,     0,     0,     0,
+     0,     0,     0,    45,     0,     0,     0,     0,     0,    50,
+     0,     0,   138,   277,     0,   183,   182,   164,     0,   160,
+     0,     0,     0,     0,     0,     0,   177,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   143,     0,   259,   259,     0,   259,     0,     0,   200,
-     0,     0,     0,   259,     0,     0,     0,   259,     0,     0,
+     0,     0,   291,   288,   287,   291,     0,     0,     0,     0,
+     0,   232,     0,     0,     0,   232,     0,     0,     0,   232,
+     0,     0,     0,   232,     0,     0,     0,   232,   147,     0,
+     0,   286,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   291,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   279,     0,     0,     0,   180,
+   291,     0,   178,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   290,     0,
+     0,   199,     0,   200,   201,     0,     0,   232,   206,   207,
+   208,     0,   213,   214,   215,     0,   220,   221,   222,     0,
+   227,   228,   229,     0,     0,    35,     0,     0,     0,     0,
+    25,     0,    31,     0,    37,    26,    39,     0,    42,     0,
+    46,    47,     0,     0,    49,     0,     0,     0,   158,     0,
+     0,     0,     0,     0,   175,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   291,
+   291,   144,     0,   203,   233,   210,   217,   224,   231,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   259,     0,     0,     0,
-     0,     0,     0,     0,     0,   250,     0,   142,   152,     0,
-     0,   185,   146,   148,     0,     0,   184,   186,   154,   130,
-   141,   151,   156,     0,   249,     0,   248,     0,     0,   169,
-     0,   171,     0,   173,     0,    66,     0,     0,     0,     0,
+     0,     0,     0,   278,   170,   172,   174,     0,   291,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    82,    86,
+    90,   131,   136,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    29,    32,    40,     0,    41,    48,    43,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   254,     0,   257,     0,     0,     0,     0,   195,   201,   197,
-   199,     0,     0,     0,     0,     0,     0,    21,     0,    30,
-     0,    34,     0,    28,     0,     0,    33,     0,    38,    36,
-     0,     0,     0,     0,     0,     0,    45,     0,     0,     0,
-     0,     0,    50,     0,     0,   138,   245,     0,   183,   182,
-   164,     0,   160,     0,     0,     0,     0,     0,     0,   177,
+     0,     0,     0,     0,     0,     0,   291,     0,   234,   275,
+     0,   236,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   291,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   259,   256,   255,   259,     0,
-     0,     0,     0,     0,   147,     0,     0,   254,     0,     0,
+     0,    24,    27,     0,     0,     0,   176,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    80,     0,
+    84,     0,    88,     0,     0,     0,     0,     0,     0,   291,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   259,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   247,     0,     0,     0,   180,   259,     0,   178,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   258,     0,     0,   202,   243,     0,
-   204,     0,     0,    35,     0,     0,     0,     0,    25,     0,
-    31,     0,    37,    26,    39,     0,    42,     0,    46,    47,
-     0,     0,    49,     0,     0,     0,   158,     0,     0,     0,
-     0,     0,   175,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   259,   259,   144,
+     0,     0,     0,     0,     0,     0,    44,    20,   139,   179,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    81,
+    83,    85,    87,    89,    91,     0,     0,   235,     0,     0,
+     0,   291,     0,     0,     0,     0,     0,     0,    94,    98,
+   102,     0,     0,     0,   238,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   246,   170,   172,
-   174,     0,   259,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,    82,    86,    90,   131,   136,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    29,    32,    40,
-     0,    41,    48,    43,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   259,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   259,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   203,
-     0,     0,     0,     0,     0,    24,    27,     0,     0,     0,
-   176,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,    80,     0,    84,     0,    88,     0,     0,     0,
-   206,     0,     0,     0,   259,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   191,     0,     0,
-     0,    44,    20,   139,   179,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,    81,    83,    85,    87,    89,    91,
-     0,     0,   205,     0,     0,   259,     0,     0,     0,     0,
-     0,     0,    94,    98,   102,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     5,   259,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   150,     0,     0,     0,     0,     0,
+     5,   291,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   150,   237,     0,     0,     0,     0,     0,
      0,     0,     0,     0,    92,     0,    96,     0,   100,     0,
-   259,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   291,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,   149,     0,    22,     0,     0,     0,
-     0,     0,     0,    93,    95,    97,    99,   101,   103,   259,
+     0,     0,     0,    93,    95,    97,    99,   101,   103,   291,
      0,     0,     0,   106,   110,   114,     0,     0,     0,     0,
-     0,     0,     0,   259,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   291,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,   104,     0,   108,     0,   112,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,   105,   107,   109,   111,   113,   115,
@@ -754,768 +785,813 @@ static const short yydefact[] = {    51,
      0,     0
 };
 
-static const short yydefgoto[] = {  1340,
-     4,     5,    18,    19,    20,    21,     6,    56,    57,   379,
-  1112,   502,  1058,  1114,   503,  1059,  1116,   504,  1060,  1224,
-   505,  1197,  1226,   506,  1198,  1228,   507,  1199,  1285,   508,
-  1271,  1287,   509,  1272,  1289,   510,  1273,  1322,   511,  1316,
-  1324,   512,  1317,  1326,   513,  1318,    58,   374,   364,   365,
-   366,   367,    62,    63,    64,   859,   860,    65,    66,    67,
-   266,   390,   520,   521,   522,   719,   720,   883,   655,   231,
-    95,   346,   135,   215,   329,   716,   802,   803,   347
+static const short yydefgoto[] = {  1400,
+     4,     5,    18,    19,    20,    21,     6,    55,    56,   375,
+  1168,   499,  1114,  1170,   500,  1115,  1172,   501,  1116,  1284,
+   502,  1255,  1286,   503,  1256,  1288,   504,  1257,  1345,   505,
+  1331,  1347,   506,  1332,  1349,   507,  1333,  1382,   508,  1376,
+  1384,   509,  1377,  1386,   510,  1378,    57,   370,   360,   361,
+   362,   363,    61,    62,    63,   876,   877,    64,    65,   263,
+   388,   615,   720,   821,   616,   724,   823,   617,   728,   825,
+   618,   732,   827,   619,   736,   829,   977,   978,  1088,   654,
+   228,    93,   342,   133,   212,   325,   715,   815,   816,   343
 };
 
-static const short yypact[] = {     7,
--32768,-32768,  -120,-32768,   465,  1499,  1350,    30,    38,    37,
-    47,    52,    61,    67,   -80,   -68,   -61,-32768,-32768,-32768,
--32768,    92,   132,  -126,   -23,    45,   -46,   -31,    46,    53,
-   107,    62,   172,   192,   208,    63,   188,    58,    76,   -16,
-   -16,    93,    26,    94,   244,   220,   104,   253,   261,    39,
-   116,   -29,   126,   240,   272,-32768,-32768,-32768,-32768,-32768,
+static const short yypact[] = {   436,
+-32768,-32768,  -129,-32768,   445,  1582,   663,    31,    32,    64,
+    66,    80,   106,   115,  -128,  -108,   -26,-32768,-32768,-32768,
+-32768,   137,   158,  -110,    -9,    27,   -36,   -46,    28,    35,
+   154,    59,   141,   160,   172,   217,   181,     2,    63,   -77,
+   -77,    67,    41,    71,   213,   205,    82,   238,   250,   167,
+   103,   -30,   108,   237,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   124,   150,
+   166,   174,   194,   195,   220,   246,   254,   255,   261,   262,
+   273,   279,   280,   285,   289,   296,   316,   329,   663,   663,
+   663,  1458,-32768,-32768,  1606,-32768,-32768,-32768,-32768,-32768,
+   330,   330,   306,-32768,   663,   663,   663,   663,   663,   348,
+   663,   663,   349,   663,   663,   663,  1428,   663,   178,   358,
+   363,  1428,   201,   210,   364,   367,   368,   375,   376,   -77,
+   663,   663,   227,   234,   -77,   265,   336,   377,-32768,   525,
+  1428,-32768,-32768,   -34,  1428,  1428,   663,   -75,   663,-32768,
+   387,   663,   663,   663,   663,   663,   663,   663,   663,   663,
+   663,   663,   663,   663,   663,   663,   663,   663,   663,   663,
+   663,   389,   389,   659,   663,   663,   663,   663,   663,  1458,
+   400,   410,   411,   413,   415,   416,   417,   420,   422,   423,
+   424,   425,   426,   430,   432,   433,   434,   448,   449,   455,
+   459,   462,   463,   464,   469,   471,   493,   498,   499,   503,
+   579,   456,   504,   506,    62,  1171,   351,  1267,  1278,   663,
+  1342,   501,   663,   564,  1352,  1362,   663,   222,   656,  1373,
+   663,   663,   663,   657,   663,   663,   663,   663,   663,   663,
+   663,   511,   390,  2044,    83,    83,   540,   663,   663,   663,
+   431,-32768,    24,  1015,   -77,-32768,   689,   698,  1385,   625,
+   663,  1395,    42,   663,  1405,  1415,  1441,  1501,  1516,  1526,
+  1536,  1594,  1604,  1614,  2053,  1624,  1634,  1644,  1654,  1664,
+  1674,  2062,  2071,  2080,   663,   663,-32768,    53,   164,   389,
+   389,   389,   366,   703,   709,   710,   713,   714,   717,   722,
+   723,   725,   727,   730,   731,   732,   733,   734,   735,   739,
+   740,   741,   744,   748,   750,   753,   632,   755,   759,   760,
+   766,   770,   769,-32768,  -138,   771,   772,   778,-32768,   768,
+   785,   805,   811,  1684,   813,   786,  1694,   816,   819,   823,
+   207,-32768,   119,   663,   828,   577,  1704,  1714,   663,   775,
+   814,  1724,  1734,  1744,  1754,  1764,   -77,   663,   663,-32768,
+   620,  1168,-32768,   671,   663,  2089,  2098,  2107,-32768,-32768,
+-32768,   663,-32768,   680,   802,   684,   704,   852,   708,  1774,
+   855,   707,   711,   724,   726,   729,-32768,-32768,  1784,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   663,
+-32768,-32768,-32768,-32768,-32768,-32768,   663,   663,   663,    55,
+    55,   745,   737,   761,   762,   763,   765,   774,   776,   779,
+   781,   782,   783,   788,   789,   790,   792,   818,   820,   825,
+   826,   827,   830,   832,   833,   835,   836,   837,   842,   843,
+   845,   850,   876,-32768,   784,-32768,   851,   -77,-32768,  1428,
+  1428,   907,  1428,-32768,   918,-32768,  1428,  1428,    38,   663,
+-32768,   100,   773,   933,   958,   970,   176,   976,  1020,  1021,
+  1022,  1025,  1031,  1034,   888,  2116,  2125,-32768,-32768,   821,
+   -77,   -77,   -77,   113,-32768,   900,   902,   905,   908,   909,
+   923,   924,   928,   935,   936,   939,   943,  1085,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-   156,   176,   178,   189,   199,   206,   224,   225,   233,   251,
-   260,   264,   265,   267,   276,   281,   284,   285,   298,   300,
-  1350,  1350,  1350,  1323,-32768,-32768,  1322,-32768,-32768,-32768,
--32768,-32768,   301,   301,   308,-32768,  1350,  1350,  1350,  1350,
-  1350,   302,  1350,  1350,   303,  1350,  1350,  1350,   937,  1350,
-   205,   309,   310,   937,   241,   292,   311,   316,   318,   320,
-   322,   -16,  1350,  1350,   324,   325,   -16,   333,   334,   336,
--32768,   332,   937,-32768,-32768,   -59,   937,   937,  1350,   -62,
-  1350,-32768,   340,   341,  1350,  1350,  1350,  1350,  1350,  1350,
-  1350,  1350,  1350,  1350,  1350,  1350,  1350,  1350,  1350,  1350,
-  1350,  1350,  1350,  1350,   215,   215,   749,  1350,  1350,  1350,
-  1350,  1350,  1323,   342,   343,   347,   348,   358,   364,   365,
-   368,   369,   370,   372,   380,   385,   387,   411,   412,   419,
-   429,   430,   434,   435,   436,   437,   438,   439,   452,   483,
-   485,   486,   487,   424,   381,   463,   489,    40,   830,   330,
-   891,   901,  1350,   915,   367,  1350,   382,   951,   961,  1350,
-   668,   632,   993,  1350,  1350,  1350,   636,  1350,  1350,  1350,
-  1350,  1350,  1350,  1350,   492,  1073,  1159,   187,   187,   493,
-  1350,  1350,  1350,   289,-32768,     9,   576,   -16,-32768,   640,
-   641,  1006,   567,  1350,  1016,   -73,  1350,  1350,  1035,  1063,
-  1093,  1113,  1130,  1149,  1310,  1331,  1343,  1360,  1172,  1370,
-  1420,  1435,  1445,  1455,  1465,  1848,  1857,  1866,  1350,  1350,
--32768,   197,   214,   215,   215,   215,   -70,   645,   646,   647,
-   655,   659,   661,   663,   664,   665,   669,   674,   675,   678,
-   679,   681,   682,   684,   686,   688,   693,   694,   696,   697,
-   536,   701,   702,   704,   705,   670,   708,-32768,    -6,   709,
-   706,   710,-32768,   712,   711,   718,   719,  1475,   721,   723,
-  1488,   727,   728,   729,    55,-32768,   -74,  1350,   738,   512,
-  1498,  1508,  1350,   550,   577,  1518,  1528,  1538,  1548,  1558,
-   -16,  1350,  1350,-32768,   579,   731,-32768,   592,  1350,  1875,
-  1884,  1893,-32768,-32768,-32768,  1350,-32768,   595,   556,   599,
-   598,   748,   605,  1568,   750,-32768,-32768,-32768,-32768,-32768,
-  1578,  1588,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,  1350,-32768,-32768,-32768,-32768,-32768,-32768,  1350,
-  1350,  1350,   -14,   -14,   619,   607,   608,   622,   625,   626,
-   627,   644,   652,   653,   680,   685,   691,   692,   703,   713,
-   716,   720,   722,   724,   726,   734,   736,   737,   739,   746,
-   751,   753,   756,   758,   759,   766,-32768,   639,-32768,   760,
-   -16,-32768,   937,   937,   786,   937,-32768,   791,-32768,   937,
-   937,   275,  1350,-32768,    48,   654,   792,   809,   810,    33,
-   826,   827,   829,   831,   839,   849,   863,   773,  1902,  1911,
--32768,-32768,   596,   -16,   -16,   -16,    64,-32768,   732,   779,
-   783,   784,   787,   788,   793,   794,   820,   821,   841,   852,
-   865,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,  1350,  1350,   937,  1350,   880,   937,   747,
-   789,   828,   926,   935,  1598,  1608,  1618,  1628,   846,   997,
-  1350,  1350,   -16,   999,  1001,   859,  1017,  1018,   937,   937,
-  1020,   -16,  1021,  1022,   937,   937,  1029,  1030,  1037,  1039,
-  1046,   937,   305,   937,  1047,  1048,  1050,  1049,  1053,-32768,
-  1057,   301,  1058,     3,  1060,   937,  1061,   937,  1077,  1078,
-  1350,   668,    55,-32768,-32768,  1350,   937,   937,   937,-32768,
-   133,   937,   937,   937,   937,   937,   937,   937,  1350,  1350,
-  1350,   931,    60,    65,    66,-32768,   754,  1350,  1350,  1350,
-  1350,  1350,  1350,  1350,  1350,  1350,  1350,  1350,  1350,-32768,
-  1920,  1929,  1081,  1638,    71,  1007,  1085,  1085,  1085,   938,
-  1350,-32768,-32768,-32768,-32768,  1350,   941,  1938,  1947,   946,
-   948,   949,   957,   950,   958,   962,   965,   966,   967,   970,
-   980,   982,   989,   992,   995,   996,  1002,  1003,  1004,-32768,
--32768,-32768,-32768,-32768,  1015,  1024,  1025,  1031,  1032,  1005,
-  1034,-32768,  1038,-32768,-32768,   -16,-32768,  1139,-32768,  1162,
--32768,-32768,   -95,  1956,  1181,  1183,  1185,  1350,  1350,  1188,
-  1189,  1190,  1191,  1205,  1206,  1208,   656,  1648,   262,   187,
-   -16,  1209,   -16,  1215,   -16,    15,  1216,  1965,  1974,  1983,
-  1992,  2001,  2010,  2019,  2028,  2037,  2046,  2055,  2064,  1350,
-  1350,-32768,  1112,   937,   937,  1141,   937,  1226,  1080,  1085,
-  1086,  1087,  1350,   531,  1323,  1241,  1350,   937,  1239,  1244,
-  1242,  1103,  1245,   305,  1246,  1247,  1350,  1255,  1250,  1256,
-  1258,  1262,   305,  1350,  1350,  1350,   937,  1261,  1275,   305,
-  1350,  1276,  1278,  1283,  1350,   301,  1285,-32768,-32768,  1350,
-  1350,-32768,-32768,-32768,   106,   118,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,  1128,-32768,  1350,-32768,  1129,  1145,-32768,
-  1146,-32768,  1148,-32768,   -32,-32768,  1350,  1350,  1350,  1350,
-  1350,  1350,  1350,  1350,  1350,  1350,  1350,  1350,  2073,  2082,
-    71,    36,-32768,   121,  1147,  1227,    14,-32768,-32768,-32768,
--32768,  2091,  1302,  1323,  1157,  2100,  1163,-32768,  1168,-32768,
-  1176,-32768,  1177,-32768,  1179,  1658,-32768,  1204,-32768,-32768,
-  1229,  1230,  1668,  2109,  1678,  1232,-32768,  1254,  1257,  2118,
-  1233,  1263,-32768,  2127,  1265,-32768,   668,  2136,-32768,-32768,
-   187,   278,-32768,  1350,  1350,  1350,  1351,  1175,   -25,-32768,
-  2145,  2154,  2163,  2172,  2181,  2190,  2199,  2208,  2217,  2226,
-  2235,  2244,  1350,  1350,  1325,   937,-32768,-32768,   937,  1350,
-  1352,  1377,  1403,  1350,-32768,  -115,  1408,    71,   305,  1412,
-  1350,  1423,   305,  1424,  1415,  1425,  1426,  1427,  1350,  1428,
-   937,  1429,  1430,  1350,  1444,  1452,  1350,  1454,  1456,  1307,
-  1350,-32768,   695,   707,   714,-32768,   937,  1458,-32768,  1350,
-  1350,  1350,  1350,  1350,  1350,  1350,  1350,  1350,  1350,  1350,
-  1350,  1688,   735,  1311,-32768,  1314,   125,-32768,  1319,  2253,
--32768,  2262,  1350,-32768,  1320,  1327,  1328,  2271,-32768,  1329,
--32768,  1330,-32768,-32768,-32768,  1698,-32768,  1333,-32768,-32768,
-  1708,  1338,-32768,  1718,  1334,  1340,-32768,   782,  1491,  1492,
-    16,  1356,-32768,  2280,  2289,  2298,  2307,  2316,  2325,  2334,
-  2343,  2352,  1728,  1738,  1748,  1496,  1503,   937,   937,-32768,
-  1350,  1350,  1350,  1323,   305,   305,   305,   305,  1505,  1506,
-  1512,   305,  1513,  1519,  1520,  1522,  1532,-32768,-32768,-32768,
--32768,   -32,   937,  1350,  1350,  1350,  1350,  1350,  1350,  1350,
-  1350,  1350,-32768,-32768,-32768,-32768,-32768,  1372,  1390,   823,
-  2361,  2370,  1323,  1394,  1395,  1396,  1409,-32768,-32768,-32768,
-  1404,-32768,-32768,-32768,  1416,  1417,   -18,  1419,  2379,  2388,
-  2397,  2406,  2415,  2424,  2433,  2442,  2451,  1418,  1421,  1422,
-   937,  1468,  1580,  1350,  1350,   242,   305,   305,  1587,  1590,
-   305,  1569,  1579,  1591,   937,  1350,  1350,  1350,  1350,  1350,
-  1350,  1350,  1350,  1350,  1350,  1350,  1350,  1439,  1449,-32768,
-   295,   844,  1350,  1461,  1462,-32768,-32768,  1451,  1453,  1469,
--32768,  1471,  2460,  2469,  2478,  2487,  2496,  2505,  2514,  2523,
-  2532,   122,   668,   153,   668,   162,   668,  1527,  1350,  1350,
--32768,  1610,  1323,   305,   937,  1611,  1617,  1621,  1623,  1350,
-  1350,  1350,  1350,  1350,  1350,  1350,  1350,  1350,  1350,  1624,
-  1350,  1630,  1350,  1631,  1485,  2541,   851,-32768,  1323,  1494,
-  1495,-32768,-32768,-32768,-32768,  2550,  2559,  2568,  2577,  2586,
-  2595,  1758,  1768,  1778,   668,-32768,   668,-32768,   668,-32768,
-  1350,  1350,-32768,   421,   305,   937,  1350,  1350,  1350,  1350,
-  1350,  1350,-32768,-32768,-32768,  2604,   872,  1509,  1497,  1504,
-  2613,  2622,  2631,  2640,  2649,  2658,  1486,  1515,  1516,  1350,
-  1651,-32768,   937,   305,  1350,  1350,  1350,  1350,  1350,  1350,
-  1350,  1350,  1350,   884,-32768,  1507,  1514,  2667,  2676,  2685,
-  2694,  2703,  2712,   163,   668,   184,   668,   190,   668,  1654,
-   937,  1660,  1350,  1350,  1350,  1350,  1350,  1350,  1350,  1670,
-  1350,  1671,  1350,  1673,-32768,  1534,-32768,  2721,  2730,  2739,
-  1788,  1798,  1808,   668,-32768,   668,-32768,   668,-32768,   937,
-  1350,  1350,  1350,-32768,-32768,-32768,  1535,  2748,  2757,  2766,
-  1526,  1536,  1542,   937,  1350,  1350,  1350,  1350,  1350,  1350,
-  1537,  2775,  2784,  2793,   196,   668,   211,   668,   218,   668,
-   305,  1350,  1350,  1350,  1350,  1691,  1350,  1693,  1350,  1694,
-  1553,  1818,  1828,  1838,   668,-32768,   668,-32768,   668,-32768,
-  1701,-32768,-32768,-32768,-32768,  1555,  1556,  1562,  1350,  1350,
-  1350,   228,   668,   238,   668,   239,   668,  1350,  1711,  1350,
-  1713,  1350,  1714,   668,-32768,   668,-32768,   668,-32768,  1726,
-  1727,-32768
+   663,   663,  1428,   663,  1094,  1428,-32768,-32768,-32768,-32768,
+-32768,  1096,  1794,  1804,  1814,  1824,   965,  1122,   663,   663,
+   -77,  1135,  1149,  1006,  1154,  1159,  1428,  1428,  1160,   -77,
+  1162,  1163,  1428,  1428,  1164,  1167,  1170,  1172,  1173,  1428,
+   300,  1428,  1174,  1169,  1183,  1187,  1189,-32768,  1188,   330,
+  1200,    -1,  1202,  1428,  1216,  1428,  1217,  1218,   663,   222,
+   207,-32768,-32768,   663,  1428,  1428,  1428,-32768,    39,  1428,
+  1428,  1428,  1428,  1428,  1428,  1428,   663,   663,   663,  1037,
+   148,   161,   163,-32768,  1208,   663,   663,   663,   663,   663,
+   663,   663,   663,   663,   663,   663,   663,-32768,  2134,  2143,
+  1219,  1834,    84,  1112,     9,    10,    19,    29,    30,   663,
+-32768,-32768,-32768,-32768,   663,  1060,  2152,  2161,  1078,  1080,
+  1081,  1084,  1088,  1086,  1097,  1099,  1100,  1101,  1113,  1111,
+  1114,  1116,  1117,  1118,  1139,  1141,  1147,  1156,-32768,-32768,
+-32768,-32768,-32768,  1155,  1180,  1181,  1197,  1203,  1182,  1204,
+-32768,  1213,-32768,-32768,   -77,-32768,  1229,-32768,  1233,-32768,
+-32768,   282,  2170,  1243,  1244,  1249,   663,   663,  1262,  1316,
+  1318,  1319,  1321,  1336,  1337,   846,  1844,   378,    83,   -77,
+  1363,   -77,  1364,   -77,    21,  1369,  2179,  2188,  2197,  2206,
+  2215,  2224,  2233,  2242,  2251,  2260,  2269,  2278,   663,   663,
+-32768,  1361,  1428,  1428,  1293,  1428,  1370,-32768,-32768,-32768,
+  1371,-32768,-32768,-32768,  1372,-32768,-32768,-32768,  1375,-32768,
+-32768,-32768,  1382,-32768,-32768,-32768,   271,  1458,  1377,   663,
+  1428,  1384,  1388,  1411,  1270,  1414,   300,  1417,  1418,   663,
+  1422,  1426,  1429,  1452,  1431,   300,   663,   663,   663,  1428,
+  1453,  1457,   300,   663,  1460,  1461,  1459,   663,   330,  1486,
+-32768,-32768,   663,   663,-32768,-32768,-32768,   120,   183,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,  1340,-32768,   663,-32768,
+  1345,  1339,-32768,  1349,-32768,  1351,-32768,   -50,-32768,   663,
+   663,   663,   663,   663,   663,   663,   663,   663,   663,   663,
+   663,  2287,  2296,    84,   -58,-32768,   179,  1350,  1432,   616,
+  1357,   829,  1359,   884,  1360,   997,  1367,  1383,  1379,  1512,
+  1458,  1390,  2305,  1392,-32768,  1394,-32768,  1401,-32768,  1403,
+-32768,  1402,  1854,-32768,  1412,-32768,-32768,  1404,  1410,  1864,
+  2314,  1874,  1419,-32768,  1413,  1416,  2323,  1423,  1421,-32768,
+  2332,  1424,-32768,   222,  2341,-32768,-32768,    83,   457,-32768,
+   663,   663,   663,  1520,  1393,   -41,-32768,  2350,  2359,  2368,
+  2377,  2386,  2395,  2404,  2413,  2422,  2431,  2440,  2449,   663,
+   663,  1444,  1428,-32768,-32768,  1428,   663,  1563,   663,   192,
+  1566,  1575,  1574,   215,  1579,  1575,  1585,   230,  1586,  1575,
+  1588,   239,  1589,  1575,  1591,   257,  1592,  1575,-32768,   -57,
+  1593,    84,   300,  1597,   663,  1595,   300,  1596,  1600,  1602,
+  1603,  1622,   663,  1623,  1428,  1625,  1626,   663,  1617,  1639,
+   663,  1646,  1647,  1473,   663,-32768,   887,   926,   938,-32768,
+  1428,  1648,-32768,   663,   663,   663,   663,   663,   663,   663,
+   663,   663,   663,   663,   663,  1884,   999,  1499,-32768,  1503,
+   264,-32768,  1158,-32768,-32768,  1651,  1502,  1575,-32768,-32768,
+-32768,  1509,-32768,-32768,-32768,  1513,-32768,-32768,-32768,  1519,
+-32768,-32768,-32768,  1522,   663,-32768,  1515,  1523,  1532,  2458,
+-32768,  1525,-32768,  1534,-32768,-32768,-32768,  1894,-32768,  1533,
+-32768,-32768,  1904,  1535,-32768,  1914,  1538,  1539,-32768,  1012,
+  1688,  1689,    22,  1542,-32768,  2467,  2476,  2485,  2494,  2503,
+  2512,  2521,  2530,  2539,  1924,  1934,  1944,  1695,  1696,  1428,
+  1428,-32768,    18,-32768,-32768,-32768,-32768,-32768,-32768,  1458,
+   300,   300,   300,   300,  1697,  1698,  1709,   300,  1711,  1712,
+  1713,  1715,  1716,-32768,-32768,-32768,-32768,   -50,  1428,   663,
+   663,   663,   663,   663,   663,   663,   663,   663,-32768,-32768,
+-32768,-32768,-32768,  1546,  1565,  1727,  1095,  1738,  1458,  1601,
+  1610,  1590,  1599,-32768,-32768,-32768,  1611,-32768,-32768,-32768,
+  1613,  1620,   -39,  1621,  2548,  2557,  2566,  2575,  2584,  2593,
+  2602,  2611,  2620,  1612,  1628,  1629,  1428,  1667,-32768,  1633,
+  2629,-32768,   342,   300,   300,  1742,  1751,   300,  1753,  1772,
+  1782,  1428,   663,   663,   663,   663,   663,   663,   663,   663,
+   663,   663,   663,   663,  1637,  1641,   663,   663,   663,  1650,
+  1653,-32768,-32768,  1640,  1643,  1657,-32768,  1658,  2638,  2647,
+  2656,  2665,  2674,  2683,  2692,  2701,  2710,   189,   222,   218,
+   222,   235,   222,  1725,   663,  1151,  2719,  1458,   300,  1428,
+  1802,  1811,  1812,  1818,   663,   663,   663,   663,   663,   663,
+   663,   663,   663,   663,  1819,   663,  1821,   663,  1822,  1678,
+  2728,  1829,   663,  1458,  1683,  1690,-32768,-32768,-32768,-32768,
+  2737,  2746,  2755,  2764,  2773,  2782,  1954,  1964,  1974,   222,
+-32768,   222,-32768,   222,-32768,   663,   663,-32768,   552,  1069,
+   300,  1428,   663,   663,   663,   663,   663,   663,-32768,-32768,
+-32768,  2791,  1192,   663,-32768,  1635,  1691,  1693,  2800,  2809,
+  2818,  2827,  2836,  2845,  1682,  1692,  1699,   663,  1848,  1207,
+-32768,  1428,   300,   663,   663,   663,   663,   663,   663,   663,
+   663,   663,  1214,-32768,-32768,  1703,  1710,  2854,  2863,  2872,
+  2881,  2890,  2899,   268,   222,   286,   222,   293,   222,  1852,
+  1428,  1858,   663,   663,   663,   663,   663,   663,   663,  1861,
+   663,  1862,   663,  1868,-32768,  1721,-32768,  2908,  2917,  2926,
+  1984,  1994,  2004,   222,-32768,   222,-32768,   222,-32768,  1428,
+   663,   663,   663,-32768,-32768,-32768,  1723,  2935,  2944,  2953,
+  1722,  1728,  1729,  1428,   663,   663,   663,   663,   663,   663,
+  1733,  2962,  2971,  2980,   301,   222,   302,   222,   317,   222,
+   300,   663,   663,   663,   663,  1882,   663,  1888,   663,  1889,
+  1743,  2014,  2024,  2034,   222,-32768,   222,-32768,   222,-32768,
+  1891,-32768,-32768,-32768,-32768,  1748,  1749,  1752,   663,   663,
+   663,   323,   222,   324,   222,   339,   222,   663,  1901,   663,
+  1908,   663,  1909,   222,-32768,   222,-32768,   222,-32768,  1917,
+  1918,-32768
 };
 
 static const short yypgoto[] = {-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1248,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1439,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,  1723,  1724,  -247,
-   269,  1731,-32768,-32768,-32768,   744,  -856,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,  -595,-32768,-32768,  -686,    -7,
--32768,  1277,    -3,  -103,-32768,  -795,  1042,   -82,-32768
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1919,  1921,  -245,
+   315,  1922,-32768,-32768,-32768,   866,  -868,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,  -837,-32768,-32768,  -744,
+    -7,-32768,  1475,     3,  -100,-32768,  -807,  1223,   204,-32768
 };
 
 
-#define	YYLAST		2945
-
-
-static const short yytable[] = {    94,
-   216,   368,   919,   258,   150,   875,    -7,    -7,   665,    -7,
-   112,   386,   387,   388,   375,   376,     7,   881,   263,   943,
-   784,  1011,   721,   722,   108,   115,   857,   109,   289,   290,
-   180,   181,   858,   857,   182,    96,   232,   136,   580,   858,
-   857,   237,    98,   666,    97,   333,   858,   823,   289,   290,
-   180,   181,    99,   575,   182,   138,   832,   100,   139,   140,
-   256,   760,   462,   839,   260,   261,   101,   415,   147,   596,
-   103,   148,   102,   289,   290,   180,   181,   463,   581,   182,
-   464,   389,   104,   175,   176,   177,   183,   128,   264,   105,
-   129,   130,   945,   131,   259,   124,   125,   106,   126,   218,
-   219,   220,   221,   222,   113,   224,   225,   114,   227,   228,
-   229,   849,   233,    -7,    -7,    -7,    -7,    -7,    -7,    -7,
-    -7,   151,   116,   850,   809,   246,   247,   110,   245,   918,
-   990,   180,   181,   250,   133,   182,  1074,   134,   107,     1,
-     2,   262,     3,   265,   119,   446,   447,   269,   270,   271,
-   272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-   282,   283,   284,   285,   286,   287,   288,   882,   785,  1012,
-   292,   293,   294,   295,   296,   297,   289,   290,   180,   181,
-   678,   679,   182,   289,   290,   180,   181,   876,   877,   182,
-   919,   289,   290,   180,   181,   111,   117,   182,   289,   290,
-   180,   181,   946,   118,   182,   121,   950,   289,   290,   180,
-   181,   691,   120,   182,   692,   338,   693,   695,   341,   694,
-   696,   714,   345,   127,   715,   122,   350,   351,   352,   132,
-   354,   355,   356,   357,   358,   359,   360,    39,    40,    41,
-    42,   123,    44,   370,   371,   372,   137,   141,   142,   289,
-   290,   180,   181,   143,   378,   182,   384,   144,   145,   391,
-   392,   289,   290,   180,   181,   146,   149,   182,   289,   290,
-   180,   181,   876,  1139,   182,   878,  1140,    68,    69,   152,
-   153,   413,   414,    70,    71,    72,    73,    74,    75,    76,
+#define	YYLAST		3134
+
+
+static const short yytable[] = {    92,
+   364,   213,   840,   148,   664,   260,   892,   953,   874,     7,
+   113,   849,   717,   721,   875,   443,   444,   874,   856,   874,
+   110,  1086,   725,   875,   101,   875,   797,  1067,   255,   371,
+   372,   126,   729,   733,   127,   128,    94,   129,    95,   665,
+    66,    67,   106,   134,   102,   107,    68,    69,    70,    71,
+    72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+    82,    83,    84,    85,    86,    87,    88,   329,   982,    96,
+   136,    97,   986,   137,   138,   131,   990,   261,   132,   995,
+   994,   172,   173,   174,   180,    98,   677,   678,   285,   286,
+   177,   178,   718,   722,   179,   893,   894,   215,   216,   217,
+   218,   219,   726,   221,   222,   573,   224,   225,   226,   114,
+   230,    99,   730,   734,   997,   952,   111,  1131,   594,   112,
+   100,   256,   149,   243,   244,   866,   103,   382,   383,   384,
+   385,   386,   242,    39,    40,    41,    42,   247,    44,   259,
+  1045,   262,   104,   108,   265,   266,   267,   268,   269,   270,
+   271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+   281,   282,   283,   284,   105,   719,   723,   288,   289,   290,
+   291,   292,   293,  1087,   119,   727,   798,  1068,   998,   109,
+   115,   578,  1002,    89,    90,   731,   735,   116,   867,  -252,
+    91,   117,  -252,   120,  -252,   569,   145,   974,   387,   146,
+  -252,  -252,   177,   178,   179,   121,   179,   285,   286,   177,
+   178,   118,   334,   179,   459,   337,   125,   140,   130,   341,
+   980,   579,   135,   346,   347,   348,   139,   350,   351,   352,
+   353,   354,   355,   356,   953,   984,   713,   142,   141,   714,
+   366,   367,   368,   143,   988,   285,   286,   177,   178,   122,
+   123,   179,   124,   380,   144,   147,   389,   374,   285,   286,
+   177,   178,   992,   150,   179,   285,   286,   177,   178,  1042,
+   151,   179,   460,    66,    67,   461,   152,   410,   411,    68,
+    69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+    79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+  -251,   690,   153,  -251,   691,  -251,  1090,  1091,  1092,  1093,
+   214,  -251,  -251,  1097,   692,   179,   694,   693,   154,   695,
+   229,   285,   286,   177,   178,   234,   155,   179,   285,   286,
+   177,   178,   893,   231,   179,   895,   462,   285,   286,   177,
+   178,   467,  1194,   179,   253,  1195,   156,   157,   257,   258,
+   476,   477,   285,   286,   177,   178,   235,   480,   179,   475,
+   285,   286,   177,   178,   484,   236,   179,   285,   286,   177,
+   178,  1196,   158,   179,  1197,   285,   286,   177,   178,  1150,
+  1151,   179,   245,  1154,   285,   286,   177,   178,  1198,   246,
+   179,  1199,   523,   649,   650,   651,   652,   653,   159,   524,
+   525,   526,   285,   286,   177,   178,   160,   161,   179,   285,
+   286,   177,   178,   162,   163,   179,   175,   176,   177,   178,
+   248,  1299,   179,    91,  1300,   164,   227,   285,   286,   177,
+   178,   165,   166,   179,  1205,    -7,    -7,   167,    -7,  1301,
+   773,   168,  1302,   791,    -1,     8,  1303,     9,   169,  1304,
+   561,   570,   571,   251,  1355,  1357,   254,  1356,  1358,   662,
+    24,    25,    26,    27,    28,    29,    30,    31,   170,    32,
+  1359,    34,    35,  1360,    37,    38,  1388,  1390,  1149,  1389,
+  1391,   171,   211,   591,   592,   593,  1247,   285,   286,   177,
+   178,   249,  1392,   179,    50,  1393,   285,   286,   177,   178,
+   220,   223,   179,   609,   610,   412,   612,   331,    51,    52,
+   232,   285,   286,   177,   178,   233,   237,   179,  1277,   238,
+   239,   627,   628,   285,   286,   177,   178,   240,   241,   179,
+   252,   789,   250,   629,   790,   285,   286,   177,   178,   264,
+   179,   179,   638,   358,    -7,    -7,    -7,    -7,    -7,    -7,
+    -7,    -7,   294,    10,    11,    12,    13,    14,    15,    16,
+    17,   672,   295,   296,    54,   297,   673,   298,   299,   300,
+     1,     2,   301,     3,   302,   303,   304,   305,   306,   686,
+   687,   688,   307,   324,   308,   309,   310,   369,   697,   698,
+   699,   700,   701,   702,   703,   704,   705,   706,   707,   708,
+   311,   312,   285,   286,   177,   178,  1361,   313,   179,   326,
+   945,   314,   737,   946,   315,   316,   317,   738,    66,    67,
+   898,   318,   944,   319,    68,    69,    70,    71,    72,    73,
+    74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+    84,    85,    86,    87,    88,   320,   285,   286,   177,   178,
+   321,   322,   179,   562,   563,   323,   565,   336,   327,   328,
+   567,   568,   344,   349,   357,    66,    67,   770,   862,   778,
+   779,    68,    69,    70,    71,    72,    73,    74,    75,    76,
     77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-    87,    88,    89,    90,  1141,   154,   155,  1142,  1034,  1035,
-  1036,  1037,   217,  1143,  1239,  1041,  1144,  1240,    24,    25,
-    26,    27,    28,    29,    30,    31,   156,    32,   157,    34,
-    35,  -220,    37,    38,  -220,  1241,  -220,   255,  1242,   158,
-   465,  1243,  -220,  -220,  1244,   470,   182,  1295,  -219,   159,
-  1296,  -219,    50,  -219,   479,   480,   160,   478,   234,  -219,
-  -219,   483,  1297,   182,   182,  1298,    51,    52,   487,  1299,
-   564,   565,  1300,   567,   161,   162,  1093,   569,   570,  1328,
-  1094,  1095,  1329,   163,  1098,   289,   290,   180,   181,  1330,
-  1332,   182,  1331,  1333,   238,   525,   650,   651,   652,   653,
-   654,   164,   526,   527,   528,   289,   290,   180,   181,   254,
-   165,   182,   257,   776,   166,   167,   777,   168,    91,    92,
-    55,   289,   290,   180,   181,    93,   169,   182,   328,   911,
-   571,   170,   912,   613,   171,   172,   616,  1150,   289,   290,
-   180,   181,   778,   373,   182,   239,  1120,   563,   173,  1121,
-   174,   214,   223,   226,   572,   573,   636,   637,   663,   235,
-   236,   240,   642,   643,    -1,     8,   241,     9,   242,   649,
-   243,   656,   244,   289,   290,   180,   181,   248,   249,   182,
-   593,   594,   595,   668,   335,   670,   251,   252,  1189,   253,
-   267,   268,   298,   299,   675,   676,   677,   300,   301,   680,
-   681,   682,   683,   684,   685,   686,   611,   612,   302,   614,
-   289,   290,   180,   181,   303,   304,   182,  1217,   305,   306,
-   307,   340,   308,   628,   629,   289,   290,   180,   181,   630,
-   309,   182,   330,    68,    69,   310,   342,   311,   639,    70,
+    87,    88,   792,   365,   794,   376,   796,   285,   286,   177,
+   178,   812,   813,   179,   377,  1244,   379,   413,  1245,   285,
+   286,   177,   178,   414,   415,   179,   611,   416,   417,   614,
+   338,   418,   285,   286,   177,   178,   419,   420,   179,   421,
+   831,   422,   833,   464,   423,   424,   425,   426,   427,   428,
+   635,   636,   843,   429,   430,   431,   641,   642,   432,   850,
+   851,   852,   433,   648,   434,   655,   857,   435,   436,   437,
+   861,    89,    90,   438,   439,   864,   865,   667,   899,   669,
+   440,   132,   441,   442,   448,   445,   478,   446,   674,   675,
+   676,   869,   447,   679,   680,   681,   682,   683,   684,   685,
+   449,   454,   878,   879,   880,   881,   882,   883,   884,   885,
+   886,   887,   888,   889,   285,   286,   177,   178,    89,    90,
+   179,   450,   900,   287,   904,    91,   908,   451,   912,   453,
+   916,   456,   901,   920,   905,   457,   909,   479,   913,   458,
+   917,    66,    67,   903,   463,   485,   511,    68,    69,    70,
     71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-    81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-  1188,   312,   313,   673,   289,   290,   180,   181,   674,   314,
-   182,    10,    11,    12,    13,    14,    15,    16,    17,   315,
-   316,   687,   688,   689,   317,   318,   319,   320,   321,   322,
-   698,   699,   700,   701,   702,   703,   704,   705,   706,   707,
-   708,   709,   323,   910,  1301,    24,    25,    26,    27,    28,
-    29,    30,    31,   724,    32,   331,    34,    35,   725,    37,
-    38,   489,   490,   491,   492,   493,   494,   495,   496,   497,
-   498,   499,   500,   324,   806,   325,   326,   327,   348,    50,
-   332,   813,   353,   361,   369,   817,   380,   381,   383,   416,
-   417,   418,   845,    51,    52,   289,   290,   180,   181,   419,
-   439,   182,   757,   420,   836,   421,   467,   422,   423,   424,
-   765,   766,   444,   425,   178,   179,   180,   181,   426,   427,
-   182,    93,   428,   429,   230,   430,   431,   779,   432,   781,
-   433,   783,   434,   289,   290,   180,   181,   435,   436,   182,
-   437,   438,   799,   800,   471,   440,   441,    55,   442,   443,
-   501,   449,   445,   448,   450,   812,   452,   814,   451,   816,
-   289,   290,   180,   181,   453,   454,   182,   456,   457,   826,
-   377,   472,   459,   481,   460,   461,   833,   834,   835,   289,
-   290,   180,   181,   840,   466,   182,   482,   844,   488,   514,
-   592,   515,   847,   848,   516,   517,   519,   529,   530,   531,
-    24,    25,    26,    27,    28,    29,    30,    31,   852,    32,
-   560,    34,    35,   532,    37,    38,   533,   534,   535,   861,
-   862,   863,   864,   865,   866,   867,   868,   869,   870,   871,
-   872,   561,   566,   935,    50,   536,   936,   568,   577,   289,
-   290,   180,   181,   537,   538,   182,   886,   576,    51,    52,
-   774,   289,   290,   180,   181,   578,   579,   182,   958,   489,
-   490,   491,   492,   493,   494,   495,   496,   497,   498,   499,
-   500,   539,   582,   583,   972,   584,   540,   585,   289,   290,
-   180,   181,   541,   542,   182,   586,   913,   914,   915,   969,
-   289,   290,   180,   181,   543,   587,   182,   289,   290,   180,
-   181,   970,    55,   182,   544,   932,   933,   545,   971,   588,
-   610,   546,   937,   547,   940,   548,   942,   549,   289,   290,
-   180,   181,   598,   948,   182,   550,   615,   551,   552,   987,
-   553,   956,   289,   290,   180,   181,   961,   554,   182,   964,
-   617,   291,   555,   968,   556,  1028,  1029,   557,   697,   558,
-   559,   562,   974,   975,   976,   977,   978,   979,   980,   981,
-   982,   983,   984,   985,   589,   289,   290,   180,   181,   599,
-  1048,   182,   620,   600,   601,   994,  1008,   602,   603,    68,
-    69,   621,   618,   604,   605,    70,    71,    72,    73,    74,
+    81,    82,    83,    84,    85,    86,    87,    88,   513,   512,
+   514,   516,   517,   947,   948,   949,   518,   486,   487,   488,
+   489,   490,   491,   492,   493,   494,   495,   496,   497,   519,
+   558,   520,   966,   967,   521,   527,    66,    67,   907,   971,
+   528,   973,    68,    69,    70,    71,    72,    73,    74,    75,
+    76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+    86,    87,    88,   564,   529,   530,   531,  1000,   532,   819,
+   285,   286,   177,   178,   566,  1008,   179,   533,   574,   534,
+  1013,   468,   535,  1016,   536,   537,   538,  1020,   559,   575,
+   830,   539,   540,   541,   834,   542,  1026,  1027,  1028,  1029,
+  1030,  1031,  1032,  1033,  1034,  1035,  1036,  1037,   498,   285,
+   286,   177,   178,   853,   576,   179,   285,   286,   177,   178,
+   469,   543,   179,   544,    89,    90,   577,   590,   545,   546,
+   547,   899,   580,   548,   132,   549,   550,  1050,   551,   552,
+   553,   285,   286,   177,   178,   554,   555,   179,   556,    66,
+    67,   911,   787,   557,   560,    68,    69,    70,    71,    72,
+    73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+    83,    84,    85,    86,    87,    88,   581,   582,   583,    89,
+    90,   584,   285,   286,   177,   178,   899,   585,   179,   132,
+   586,   587,  1089,  1021,    24,    25,    26,    27,    28,    29,
+    30,    31,   596,    32,   597,    34,    35,   598,    37,    38,
+   599,   600,  1105,  1106,  1107,  1108,  1109,  1110,  1111,  1112,
+  1113,   285,   286,   177,   178,   601,   602,   179,    50,  1121,
+   603,  1123,  1022,   285,   286,   177,   178,   604,   605,   179,
+   608,   606,    51,    52,  1023,   607,   969,    66,  1120,   970,
+   613,   625,   620,    68,    69,    70,    71,    72,    73,    74,
     75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-    85,    86,    87,    88,    89,    90,   289,   290,   180,   181,
-   606,   607,   182,   289,   290,   180,   181,  1063,  1088,   182,
-   626,   619,   334,  1030,  1031,  1032,  1033,   289,   290,   180,
-   181,   608,  1102,   182,   289,   290,   180,   181,  1122,   627,
-   182,   631,   609,   632,   633,  1173,  1049,  1050,  1051,  1052,
-  1053,  1054,  1055,  1056,  1057,   289,   290,   180,   181,   634,
-   635,   182,   638,   640,   641,  1066,  1201,   289,   290,   180,
-   181,   644,   645,   182,   289,   290,   180,   181,  1230,   646,
-   182,   647,  1151,   336,   289,   290,   180,   181,   648,   657,
-   182,   660,   658,   337,   659,   661,  1091,  1092,   289,   290,
-   180,   181,   662,   664,   182,   667,   669,   339,  1103,  1104,
-  1105,  1106,  1107,  1108,  1109,  1110,  1111,  1113,  1115,  1117,
-    91,    92,   671,   672,   690,  1123,   712,    93,   718,   717,
-   230,   723,   726,  1190,   289,   290,   180,   181,   729,   730,
-   182,   731,   733,   343,   289,   290,   180,   181,   732,   734,
-   182,  1146,  1147,   344,   735,  1149,   736,   737,   801,   738,
-  1216,   739,  1156,  1157,  1158,  1159,  1160,  1161,  1162,  1163,
-  1164,  1165,   740,  1167,   741,  1169,   289,   290,   180,   181,
-   742,  1174,   182,   743,   758,   349,   744,   745,  1246,   289,
-   290,   180,   181,   746,   747,   182,   748,   754,   382,   289,
-   290,   180,   181,  1186,  1187,   182,   749,   759,   385,  1191,
-  1192,  1193,  1194,  1195,  1196,   750,   751,  1267,   289,   290,
-   180,   181,   752,   753,   182,   755,   762,   393,   763,   756,
-   764,  1281,  1214,   767,   768,   769,   770,  1218,  1219,  1220,
-  1221,  1222,  1223,  1225,  1227,  1229,   289,   290,   180,   181,
-   771,   772,   182,   773,   780,   394,   289,   290,   180,   181,
-   782,   786,   182,   805,   362,  1248,  1249,  1250,  1251,  1252,
-  1253,  1254,   807,  1256,   808,  1258,   289,   290,   180,   181,
-   810,   811,   182,   815,   818,   395,   819,   820,   821,   825,
-   822,   824,   828,  1268,  1269,  1270,   289,   290,   180,   181,
-   827,   829,   182,   830,   831,   396,   837,  1282,  1283,  1284,
-  1286,  1288,  1290,   289,   290,   180,   181,   838,   841,   182,
-   842,   851,   397,   853,  1302,  1303,  1304,  1305,   843,  1307,
-   846,  1309,   289,   290,   180,   181,   854,   855,   182,   856,
-   879,   398,   289,   290,   180,   181,   880,   885,   182,   887,
-   363,  1323,  1325,  1327,   889,   289,   290,   180,   181,   890,
-  1334,   182,  1336,   403,  1338,    68,    69,   891,   917,   892,
-   893,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-    79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-    89,    90,    68,    69,   184,   895,   916,   938,    70,    71,
+    85,    86,    87,    88,   626,  1159,  1160,  1161,  1162,  1163,
+  1164,  1165,  1166,  1167,  1169,  1171,  1173,   630,  1010,  1176,
+  1177,  1178,    89,    90,   285,   286,   177,   178,    54,   899,
+   179,   631,   132,   632,  1024,  1039,   633,   285,   286,   177,
+   178,   634,   637,   179,   639,   640,   643,  1201,  1064,   644,
+  1204,   373,   645,   657,   646,   647,   656,  1211,  1212,  1213,
+  1214,  1215,  1216,  1217,  1218,  1219,  1220,   658,  1222,   659,
+  1224,   660,   689,   661,   716,  1229,  1230,    24,    25,    26,
+    27,    28,    29,    30,    31,   663,    32,   666,    34,    35,
+  1246,    37,    38,   739,   285,   286,   177,   178,  1242,  1243,
+   179,   668,   670,   671,   711,  1249,  1250,  1251,  1252,  1253,
+  1254,    50,   742,   743,   771,   744,  1260,   745,   772,   747,
+    89,    90,   746,  1084,  1085,    51,    52,    91,   775,   776,
+  1273,   748,   749,   750,   777,   751,  1278,  1279,  1280,  1281,
+  1282,  1283,  1285,  1287,  1289,   753,   752,   780,   754,   755,
+   756,   757,  1104,   486,   487,   488,   489,   490,   491,   492,
+   493,   494,   495,   496,   497,  1308,  1309,  1310,  1311,  1312,
+  1313,  1314,   758,  1316,   759,  1318,   285,   286,   177,   178,
+   760,    54,   179,   285,   286,   177,   178,  1202,   762,   179,
+   761,   358,   287,  1328,  1329,  1330,   285,   286,   177,   178,
+  1145,   781,   179,   782,   783,   330,   784,  1342,  1343,  1344,
+  1346,  1348,  1350,   763,   764,  1158,   767,   285,   286,   177,
+   178,   785,   786,   179,  1362,  1363,  1364,  1365,  1259,  1367,
+   765,  1369,   285,   286,   177,   178,   766,   768,   179,   285,
+   286,   177,   178,  1275,   696,   179,   769,   814,   793,   795,
+  1290,  1383,  1385,  1387,   799,   818,   820,   822,   824,   832,
+  1394,   826,  1396,  1206,  1398,    66,    67,   915,   828,   835,
+   836,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+    77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+    87,    88,   285,   286,   177,   178,   837,   838,   179,   839,
+   842,   332,   841,   285,   286,   177,   178,   844,   845,   179,
+    66,    67,   333,   848,   846,  1248,    68,    69,    70,    71,
     72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-    82,    83,    84,    85,    86,    87,    88,    89,    90,    68,
-   939,   896,   897,   901,   905,    70,    71,    72,    73,    74,
-    75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-    85,    86,    87,    88,    89,    90,   902,   934,   941,   903,
-   185,   186,   187,   944,   947,   906,   908,   952,   188,   189,
-   190,   191,   192,   193,   194,   195,   196,   197,   949,   951,
-   953,   954,   955,   957,   959,   960,   198,   199,   200,   201,
-   202,   203,   204,   205,   206,   207,   962,   208,   209,   210,
-   211,   212,   213,   289,   290,   180,   181,   963,   965,   182,
-   966,   967,   399,   973,   988,   989,   178,   179,   180,   181,
-   991,   995,   182,    93,   289,   290,   180,   181,   996,   997,
-   182,   999,  1000,   400,  1002,  1006,   289,   290,   180,   181,
-  1004,  1007,   182,    91,    92,   401,  1009,  1010,    -3,    22,
-    93,  1026,    23,   289,   290,   180,   181,  1013,  1027,   182,
-  1038,  1039,   402,   289,   290,   180,   181,  1040,  1042,   182,
-    91,    92,   404,  1061,  1043,  1044,  1045,    93,    24,    25,
-    26,    27,    28,    29,    30,    31,  1046,    32,    33,    34,
-    35,    36,    37,    38,  1062,  1067,  1068,  1089,  1069,    39,
-    40,    41,    42,    43,    44,  1071,    45,    46,    47,    48,
-    49,  1070,    50,   289,   290,   180,   181,  1072,  1073,   182,
-  1075,  1085,   405,  1099,  1086,  1087,    51,    52,   289,   290,
-   180,   181,    53,  1100,   182,  1090,    54,   406,   289,   290,
-   180,   181,  1096,  1118,   182,  1097,  1101,   407,   289,   290,
-   180,   181,  1119,  1126,   182,  1127,  1145,   408,   289,   290,
-   180,   181,  1124,  1125,   182,  1148,  1152,   409,   289,   290,
-   180,   181,  1153,  1128,   182,  1129,  1154,   455,  1155,  1166,
-    55,   289,   290,   180,   181,  1168,  1170,   182,  1171,  1211,
-   458,   289,   290,   180,   181,  1175,  1176,   182,  1203,  1202,
-   468,   289,   290,   180,   181,  1204,  1215,   182,  1231,  1245,
-   469,   289,   290,   180,   181,  1247,  1232,   182,  1212,  1213,
-   473,   289,   290,   180,   181,  1255,  1257,   182,  1259,  1278,
-   474,   289,   290,   180,   181,  1260,  1274,   182,  1291,  1279,
-   475,   289,   290,   180,   181,  1280,  1306,   182,  1308,  1310,
-   476,   289,   290,   180,   181,  1311,  1315,   182,  1319,  1320,
-   477,   289,   290,   180,   181,  1321,  1335,   182,  1337,  1339,
-   518,   289,   290,   180,   181,  1341,  1342,   182,    59,    60,
-   523,   289,   290,   180,   181,   597,    61,   182,     0,   574,
-   524,   289,   290,   180,   181,     0,     0,   182,     0,     0,
-   622,   289,   290,   180,   181,  1047,   804,   182,     0,     0,
-   623,   289,   290,   180,   181,     0,     0,   182,     0,     0,
-   624,   289,   290,   180,   181,     0,     0,   182,     0,     0,
-   625,   289,   290,   180,   181,     0,     0,   182,     0,     0,
-   713,   289,   290,   180,   181,     0,     0,   182,     0,     0,
-   775,   289,   290,   180,   181,     0,     0,   182,     0,     0,
-   894,   289,   290,   180,   181,     0,     0,   182,     0,     0,
-   898,   289,   290,   180,   181,     0,     0,   182,     0,     0,
-   900,   289,   290,   180,   181,     0,     0,   182,     0,     0,
-   986,   289,   290,   180,   181,     0,     0,   182,     0,     0,
-  1001,   289,   290,   180,   181,     0,     0,   182,     0,     0,
-  1003,   289,   290,   180,   181,     0,     0,   182,     0,     0,
-  1005,   289,   290,   180,   181,     0,     0,   182,     0,     0,
-  1023,   289,   290,   180,   181,     0,     0,   182,     0,     0,
-  1024,   289,   290,   180,   181,     0,     0,   182,     0,     0,
-  1025,   289,   290,   180,   181,     0,     0,   182,     0,     0,
-  1183,   289,   290,   180,   181,     0,     0,   182,     0,     0,
-  1184,   289,   290,   180,   181,     0,     0,   182,     0,     0,
-  1185,   289,   290,   180,   181,     0,     0,   182,     0,     0,
-  1264,   289,   290,   180,   181,     0,     0,   182,     0,     0,
-  1265,   289,   290,   180,   181,     0,     0,   182,     0,     0,
-  1266,   289,   290,   180,   181,     0,     0,   182,     0,     0,
-  1312,   289,   290,   180,   181,     0,     0,   182,     0,     0,
-  1313,   289,   290,   180,   181,     0,     0,   182,     0,     0,
-  1314,   289,   290,   180,   181,     0,     0,   182,     0,   410,
-   289,   290,   180,   181,     0,     0,   182,     0,   411,   289,
-   290,   180,   181,     0,     0,   182,     0,   412,   289,   290,
-   180,   181,     0,     0,   182,     0,   484,   289,   290,   180,
-   181,     0,     0,   182,     0,   485,   289,   290,   180,   181,
-     0,     0,   182,     0,   486,   289,   290,   180,   181,     0,
-     0,   182,     0,   590,   289,   290,   180,   181,     0,     0,
-   182,     0,   591,   289,   290,   180,   181,     0,     0,   182,
-     0,   710,   289,   290,   180,   181,     0,     0,   182,     0,
-   711,   289,   290,   180,   181,     0,     0,   182,     0,   727,
-   289,   290,   180,   181,     0,     0,   182,     0,   728,   289,
-   290,   180,   181,     0,     0,   182,     0,   761,   289,   290,
-   180,   181,     0,     0,   182,     0,   787,   289,   290,   180,
-   181,     0,     0,   182,     0,   788,   289,   290,   180,   181,
-     0,     0,   182,     0,   789,   289,   290,   180,   181,     0,
-     0,   182,     0,   790,   289,   290,   180,   181,     0,     0,
-   182,     0,   791,   289,   290,   180,   181,     0,     0,   182,
-     0,   792,   289,   290,   180,   181,     0,     0,   182,     0,
-   793,   289,   290,   180,   181,     0,     0,   182,     0,   794,
-   289,   290,   180,   181,     0,     0,   182,     0,   795,   289,
-   290,   180,   181,     0,     0,   182,     0,   796,   289,   290,
-   180,   181,     0,     0,   182,     0,   797,   289,   290,   180,
-   181,     0,     0,   182,     0,   798,   289,   290,   180,   181,
-     0,     0,   182,     0,   873,   289,   290,   180,   181,     0,
-     0,   182,     0,   874,   289,   290,   180,   181,     0,     0,
-   182,     0,   884,   289,   290,   180,   181,     0,     0,   182,
-     0,   888,   289,   290,   180,   181,     0,     0,   182,     0,
-   899,   289,   290,   180,   181,     0,     0,   182,     0,   904,
-   289,   290,   180,   181,     0,     0,   182,     0,   907,   289,
-   290,   180,   181,     0,     0,   182,     0,   909,   289,   290,
-   180,   181,     0,     0,   182,     0,   920,   289,   290,   180,
-   181,     0,     0,   182,     0,   921,   289,   290,   180,   181,
-     0,     0,   182,     0,   922,   289,   290,   180,   181,     0,
-     0,   182,     0,   923,   289,   290,   180,   181,     0,     0,
-   182,     0,   924,   289,   290,   180,   181,     0,     0,   182,
-     0,   925,   289,   290,   180,   181,     0,     0,   182,     0,
-   926,   289,   290,   180,   181,     0,     0,   182,     0,   927,
-   289,   290,   180,   181,     0,     0,   182,     0,   928,   289,
-   290,   180,   181,     0,     0,   182,     0,   929,   289,   290,
-   180,   181,     0,     0,   182,     0,   930,   289,   290,   180,
-   181,     0,     0,   182,     0,   931,   289,   290,   180,   181,
-     0,     0,   182,     0,   992,   289,   290,   180,   181,     0,
-     0,   182,     0,   993,   289,   290,   180,   181,     0,     0,
-   182,     0,   998,   289,   290,   180,   181,     0,     0,   182,
-     0,  1014,   289,   290,   180,   181,     0,     0,   182,     0,
-  1015,   289,   290,   180,   181,     0,     0,   182,     0,  1016,
-   289,   290,   180,   181,     0,     0,   182,     0,  1017,   289,
-   290,   180,   181,     0,     0,   182,     0,  1018,   289,   290,
-   180,   181,     0,     0,   182,     0,  1019,   289,   290,   180,
-   181,     0,     0,   182,     0,  1020,   289,   290,   180,   181,
-     0,     0,   182,     0,  1021,   289,   290,   180,   181,     0,
-     0,   182,     0,  1022,   289,   290,   180,   181,     0,     0,
-   182,     0,  1064,   289,   290,   180,   181,     0,     0,   182,
-     0,  1065,   289,   290,   180,   181,     0,     0,   182,     0,
-  1076,   289,   290,   180,   181,     0,     0,   182,     0,  1077,
-   289,   290,   180,   181,     0,     0,   182,     0,  1078,   289,
-   290,   180,   181,     0,     0,   182,     0,  1079,   289,   290,
-   180,   181,     0,     0,   182,     0,  1080,   289,   290,   180,
-   181,     0,     0,   182,     0,  1081,   289,   290,   180,   181,
-     0,     0,   182,     0,  1082,   289,   290,   180,   181,     0,
-     0,   182,     0,  1083,   289,   290,   180,   181,     0,     0,
-   182,     0,  1084,   289,   290,   180,   181,     0,     0,   182,
-     0,  1130,   289,   290,   180,   181,     0,     0,   182,     0,
-  1131,   289,   290,   180,   181,     0,     0,   182,     0,  1132,
-   289,   290,   180,   181,     0,     0,   182,     0,  1133,   289,
-   290,   180,   181,     0,     0,   182,     0,  1134,   289,   290,
-   180,   181,     0,     0,   182,     0,  1135,   289,   290,   180,
-   181,     0,     0,   182,     0,  1136,   289,   290,   180,   181,
-     0,     0,   182,     0,  1137,   289,   290,   180,   181,     0,
-     0,   182,     0,  1138,   289,   290,   180,   181,     0,     0,
-   182,     0,  1172,   289,   290,   180,   181,     0,     0,   182,
-     0,  1177,   289,   290,   180,   181,     0,     0,   182,     0,
-  1178,   289,   290,   180,   181,     0,     0,   182,     0,  1179,
-   289,   290,   180,   181,     0,     0,   182,     0,  1180,   289,
-   290,   180,   181,     0,     0,   182,     0,  1181,   289,   290,
-   180,   181,     0,     0,   182,     0,  1182,   289,   290,   180,
-   181,     0,     0,   182,     0,  1200,   289,   290,   180,   181,
-     0,     0,   182,     0,  1205,   289,   290,   180,   181,     0,
-     0,   182,     0,  1206,   289,   290,   180,   181,     0,     0,
-   182,     0,  1207,   289,   290,   180,   181,     0,     0,   182,
-     0,  1208,   289,   290,   180,   181,     0,     0,   182,     0,
-  1209,   289,   290,   180,   181,     0,     0,   182,     0,  1210,
-   289,   290,   180,   181,     0,     0,   182,     0,  1233,   289,
-   290,   180,   181,     0,     0,   182,     0,  1234,   289,   290,
-   180,   181,     0,     0,   182,     0,  1235,   289,   290,   180,
-   181,     0,     0,   182,     0,  1236,   289,   290,   180,   181,
-     0,     0,   182,     0,  1237,   289,   290,   180,   181,     0,
-     0,   182,     0,  1238,   289,   290,   180,   181,     0,     0,
-   182,     0,  1261,   289,   290,   180,   181,     0,     0,   182,
-     0,  1262,   289,   290,   180,   181,     0,     0,   182,     0,
-  1263,   289,   290,   180,   181,     0,     0,   182,     0,  1275,
-   289,   290,   180,   181,     0,     0,   182,     0,  1276,   289,
-   290,   180,   181,     0,     0,   182,     0,  1277,   289,   290,
-   180,   181,     0,     0,   182,     0,  1292,   289,   290,   180,
-   181,     0,     0,   182,     0,  1293,   289,   290,   180,   181,
-     0,     0,   182,     0,  1294
+    82,    83,    84,    85,    86,    87,    88,   847,   854,   855,
+    66,    67,   858,   859,   860,  1276,    68,    69,    70,    71,
+    72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+    82,    83,    84,    85,    86,    87,    88,   285,   286,   177,
+   178,   863,   871,   179,  1306,   868,   335,   285,   286,   177,
+   178,   870,   872,   179,   873,   896,   339,   285,   286,   177,
+   178,   897,   902,   179,   906,   910,   340,   919,   285,   286,
+   177,   178,   914,  1327,   179,   950,   968,   345,    89,    90,
+   285,   286,   177,   178,   918,   899,   179,  1341,   132,   378,
+   285,   286,   177,   178,   921,   923,   179,   924,   951,   381,
+   285,   286,   177,   178,   925,   927,   179,   926,   930,   390,
+   285,   286,   177,   178,   931,   929,   179,   936,   972,   391,
+   937,   975,   935,    89,    90,   940,   939,   942,   976,   979,
+    91,    -3,    22,   227,   981,    23,   285,   286,   177,   178,
+   983,   985,   179,   987,   989,   392,   991,   993,   996,   999,
+  1001,  1003,  1004,   175,   176,   177,   178,  1005,  1006,   179,
+    91,    24,    25,    26,    27,    28,    29,    30,    31,  1014,
+    32,    33,    34,    35,    36,    37,    38,  1007,  1009,  1019,
+  1011,  1012,    39,    40,    41,    42,    43,    44,   181,    45,
+    46,    47,    48,    49,  1015,    50,   285,   286,   177,   178,
+  1017,  1018,   179,  1025,  1040,   393,  1041,  1043,  1044,    51,
+    52,   285,   286,   177,   178,  1046,    53,   179,  1051,  1047,
+   394,   285,   286,   177,   178,  1048,  1052,   179,  1049,  1055,
+   395,   285,   286,   177,   178,  1053,  1058,   179,  1056,  1060,
+   396,  1062,  1063,  1065,  1066,  1069,   182,   183,   184,  1117,
+  1082,  1083,  1094,  1095,   185,   186,   187,   188,   189,   190,
+   191,   192,   193,   194,  1096,    54,  1098,  1099,  1100,  1101,
+  1102,  1118,   195,   196,   197,   198,   199,   200,   201,   202,
+   203,   204,  1119,   205,   206,   207,   208,   209,   210,   285,
+   286,   177,   178,  1122,  1126,   179,  1146,  1152,   397,   285,
+   286,   177,   178,  1127,  1124,   179,  1153,  1155,   398,   285,
+   286,   177,   178,  1125,  1128,   179,  1129,  1142,   399,   285,
+   286,   177,   178,  1130,  1132,   179,  1156,  1261,   401,   285,
+   286,   177,   178,  1143,  1144,   179,  1147,  1157,   402,   285,
+   286,   177,   178,  1174,  1181,   179,  1175,  1182,   403,   285,
+   286,   177,   178,  1179,  1200,   179,  1180,  1207,   404,   285,
+   286,   177,   178,  1183,  1184,   179,  1208,  1209,   405,   285,
+   286,   177,   178,  1210,  1221,   179,  1223,  1225,   406,   285,
+   286,   177,   178,  1226,  1228,   179,  1231,  1270,   452,   285,
+   286,   177,   178,  1232,  1262,   179,  1263,  1271,   455,   285,
+   286,   177,   178,  1274,  1272,   179,  1291,  1305,   465,   285,
+   286,   177,   178,  1307,  1292,   179,  1315,  1317,   466,   285,
+   286,   177,   178,  1319,  1320,   179,  1334,  1338,   470,   285,
+   286,   177,   178,  1339,  1340,   179,  1351,  1366,   471,   285,
+   286,   177,   178,  1368,  1370,   179,  1375,  1371,   472,   285,
+   286,   177,   178,  1379,  1380,   179,  1395,  1381,   473,   285,
+   286,   177,   178,  1397,  1399,   179,  1401,  1402,   474,   285,
+   286,   177,   178,   595,    58,   179,    59,    60,   515,   285,
+   286,   177,   178,  1103,   572,   179,   817,     0,   522,   285,
+   286,   177,   178,     0,     0,   179,     0,     0,   621,   285,
+   286,   177,   178,     0,     0,   179,     0,     0,   622,   285,
+   286,   177,   178,     0,     0,   179,     0,     0,   623,   285,
+   286,   177,   178,     0,     0,   179,     0,     0,   624,   285,
+   286,   177,   178,     0,     0,   179,     0,     0,   712,   285,
+   286,   177,   178,     0,     0,   179,     0,     0,   788,   285,
+   286,   177,   178,     0,     0,   179,     0,     0,   928,   285,
+   286,   177,   178,     0,     0,   179,     0,     0,   932,   285,
+   286,   177,   178,     0,     0,   179,     0,     0,   934,   285,
+   286,   177,   178,     0,     0,   179,     0,     0,  1038,   285,
+   286,   177,   178,     0,     0,   179,     0,     0,  1057,   285,
+   286,   177,   178,     0,     0,   179,     0,     0,  1059,   285,
+   286,   177,   178,     0,     0,   179,     0,     0,  1061,   285,
+   286,   177,   178,     0,     0,   179,     0,     0,  1079,   285,
+   286,   177,   178,     0,     0,   179,     0,     0,  1080,   285,
+   286,   177,   178,     0,     0,   179,     0,     0,  1081,   285,
+   286,   177,   178,     0,     0,   179,     0,     0,  1239,   285,
+   286,   177,   178,     0,     0,   179,     0,     0,  1240,   285,
+   286,   177,   178,     0,     0,   179,     0,     0,  1241,   285,
+   286,   177,   178,     0,     0,   179,     0,     0,  1324,   285,
+   286,   177,   178,     0,     0,   179,     0,     0,  1325,   285,
+   286,   177,   178,     0,     0,   179,     0,     0,  1326,   285,
+   286,   177,   178,     0,     0,   179,     0,     0,  1372,   285,
+   286,   177,   178,     0,     0,   179,     0,     0,  1373,   285,
+   286,   177,   178,     0,     0,   179,     0,     0,  1374,   285,
+   286,   177,   178,     0,     0,   179,     0,   359,   285,   286,
+   177,   178,     0,     0,   179,     0,   400,   285,   286,   177,
+   178,     0,     0,   179,     0,   407,   285,   286,   177,   178,
+     0,     0,   179,     0,   408,   285,   286,   177,   178,     0,
+     0,   179,     0,   409,   285,   286,   177,   178,     0,     0,
+   179,     0,   481,   285,   286,   177,   178,     0,     0,   179,
+     0,   482,   285,   286,   177,   178,     0,     0,   179,     0,
+   483,   285,   286,   177,   178,     0,     0,   179,     0,   588,
+   285,   286,   177,   178,     0,     0,   179,     0,   589,   285,
+   286,   177,   178,     0,     0,   179,     0,   709,   285,   286,
+   177,   178,     0,     0,   179,     0,   710,   285,   286,   177,
+   178,     0,     0,   179,     0,   740,   285,   286,   177,   178,
+     0,     0,   179,     0,   741,   285,   286,   177,   178,     0,
+     0,   179,     0,   774,   285,   286,   177,   178,     0,     0,
+   179,     0,   800,   285,   286,   177,   178,     0,     0,   179,
+     0,   801,   285,   286,   177,   178,     0,     0,   179,     0,
+   802,   285,   286,   177,   178,     0,     0,   179,     0,   803,
+   285,   286,   177,   178,     0,     0,   179,     0,   804,   285,
+   286,   177,   178,     0,     0,   179,     0,   805,   285,   286,
+   177,   178,     0,     0,   179,     0,   806,   285,   286,   177,
+   178,     0,     0,   179,     0,   807,   285,   286,   177,   178,
+     0,     0,   179,     0,   808,   285,   286,   177,   178,     0,
+     0,   179,     0,   809,   285,   286,   177,   178,     0,     0,
+   179,     0,   810,   285,   286,   177,   178,     0,     0,   179,
+     0,   811,   285,   286,   177,   178,     0,     0,   179,     0,
+   890,   285,   286,   177,   178,     0,     0,   179,     0,   891,
+   285,   286,   177,   178,     0,     0,   179,     0,   922,   285,
+   286,   177,   178,     0,     0,   179,     0,   933,   285,   286,
+   177,   178,     0,     0,   179,     0,   938,   285,   286,   177,
+   178,     0,     0,   179,     0,   941,   285,   286,   177,   178,
+     0,     0,   179,     0,   943,   285,   286,   177,   178,     0,
+     0,   179,     0,   954,   285,   286,   177,   178,     0,     0,
+   179,     0,   955,   285,   286,   177,   178,     0,     0,   179,
+     0,   956,   285,   286,   177,   178,     0,     0,   179,     0,
+   957,   285,   286,   177,   178,     0,     0,   179,     0,   958,
+   285,   286,   177,   178,     0,     0,   179,     0,   959,   285,
+   286,   177,   178,     0,     0,   179,     0,   960,   285,   286,
+   177,   178,     0,     0,   179,     0,   961,   285,   286,   177,
+   178,     0,     0,   179,     0,   962,   285,   286,   177,   178,
+     0,     0,   179,     0,   963,   285,   286,   177,   178,     0,
+     0,   179,     0,   964,   285,   286,   177,   178,     0,     0,
+   179,     0,   965,   285,   286,   177,   178,     0,     0,   179,
+     0,  1054,   285,   286,   177,   178,     0,     0,   179,     0,
+  1070,   285,   286,   177,   178,     0,     0,   179,     0,  1071,
+   285,   286,   177,   178,     0,     0,   179,     0,  1072,   285,
+   286,   177,   178,     0,     0,   179,     0,  1073,   285,   286,
+   177,   178,     0,     0,   179,     0,  1074,   285,   286,   177,
+   178,     0,     0,   179,     0,  1075,   285,   286,   177,   178,
+     0,     0,   179,     0,  1076,   285,   286,   177,   178,     0,
+     0,   179,     0,  1077,   285,   286,   177,   178,     0,     0,
+   179,     0,  1078,   285,   286,   177,   178,     0,     0,   179,
+     0,  1133,   285,   286,   177,   178,     0,     0,   179,     0,
+  1134,   285,   286,   177,   178,     0,     0,   179,     0,  1135,
+   285,   286,   177,   178,     0,     0,   179,     0,  1136,   285,
+   286,   177,   178,     0,     0,   179,     0,  1137,   285,   286,
+   177,   178,     0,     0,   179,     0,  1138,   285,   286,   177,
+   178,     0,     0,   179,     0,  1139,   285,   286,   177,   178,
+     0,     0,   179,     0,  1140,   285,   286,   177,   178,     0,
+     0,   179,     0,  1141,   285,   286,   177,   178,     0,     0,
+   179,     0,  1148,   285,   286,   177,   178,     0,     0,   179,
+     0,  1185,   285,   286,   177,   178,     0,     0,   179,     0,
+  1186,   285,   286,   177,   178,     0,     0,   179,     0,  1187,
+   285,   286,   177,   178,     0,     0,   179,     0,  1188,   285,
+   286,   177,   178,     0,     0,   179,     0,  1189,   285,   286,
+   177,   178,     0,     0,   179,     0,  1190,   285,   286,   177,
+   178,     0,     0,   179,     0,  1191,   285,   286,   177,   178,
+     0,     0,   179,     0,  1192,   285,   286,   177,   178,     0,
+     0,   179,     0,  1193,   285,   286,   177,   178,     0,     0,
+   179,     0,  1203,   285,   286,   177,   178,     0,     0,   179,
+     0,  1227,   285,   286,   177,   178,     0,     0,   179,     0,
+  1233,   285,   286,   177,   178,     0,     0,   179,     0,  1234,
+   285,   286,   177,   178,     0,     0,   179,     0,  1235,   285,
+   286,   177,   178,     0,     0,   179,     0,  1236,   285,   286,
+   177,   178,     0,     0,   179,     0,  1237,   285,   286,   177,
+   178,     0,     0,   179,     0,  1238,   285,   286,   177,   178,
+     0,     0,   179,     0,  1258,   285,   286,   177,   178,     0,
+     0,   179,     0,  1264,   285,   286,   177,   178,     0,     0,
+   179,     0,  1265,   285,   286,   177,   178,     0,     0,   179,
+     0,  1266,   285,   286,   177,   178,     0,     0,   179,     0,
+  1267,   285,   286,   177,   178,     0,     0,   179,     0,  1268,
+   285,   286,   177,   178,     0,     0,   179,     0,  1269,   285,
+   286,   177,   178,     0,     0,   179,     0,  1293,   285,   286,
+   177,   178,     0,     0,   179,     0,  1294,   285,   286,   177,
+   178,     0,     0,   179,     0,  1295,   285,   286,   177,   178,
+     0,     0,   179,     0,  1296,   285,   286,   177,   178,     0,
+     0,   179,     0,  1297,   285,   286,   177,   178,     0,     0,
+   179,     0,  1298,   285,   286,   177,   178,     0,     0,   179,
+     0,  1321,   285,   286,   177,   178,     0,     0,   179,     0,
+  1322,   285,   286,   177,   178,     0,     0,   179,     0,  1323,
+   285,   286,   177,   178,     0,     0,   179,     0,  1335,   285,
+   286,   177,   178,     0,     0,   179,     0,  1336,   285,   286,
+   177,   178,     0,     0,   179,     0,  1337,   285,   286,   177,
+   178,     0,     0,   179,     0,  1352,   285,   286,   177,   178,
+     0,     0,   179,     0,  1353,   285,   286,   177,   178,     0,
+     0,   179,     0,  1354
 };
 
 static const short yycheck[] = {     7,
-   104,   249,   859,    63,    34,   801,     0,     1,     6,     3,
-    57,    85,    86,    87,     6,     7,   137,     4,    81,   135,
-     6,     6,   618,   619,   151,    57,    59,   154,   144,   145,
-   146,   147,    65,    59,   150,     6,   119,    41,     6,    65,
-    59,   124,     6,    41,     7,     6,    65,   734,   144,   145,
-   146,   147,     6,     6,   150,    30,   743,     6,    33,    34,
-   143,   157,     8,   750,   147,   148,     6,   138,    30,     6,
-   151,    33,     6,   144,   145,   146,   147,   152,    46,   150,
-   155,   155,   151,    91,    92,    93,    94,    30,   151,   151,
-    33,    34,   888,    36,   154,    33,    34,     6,    36,   107,
-   108,   109,   110,   111,   151,   113,   114,   154,   116,   117,
-   118,     6,   120,   107,   108,   109,   110,   111,   112,   113,
-   114,   151,   154,     6,   720,   133,   134,   151,   132,   155,
-     6,   146,   147,   137,   151,   150,   155,   154,     7,   133,
-   134,   149,   136,   151,    38,   152,   153,   155,   156,   157,
+   246,   102,   747,    34,     6,    81,   814,   876,    59,   139,
+    57,   756,     4,     4,    65,   154,   155,    59,   763,    59,
+    57,     4,     4,    65,   153,    65,     6,     6,    63,     6,
+     7,    30,     4,     4,    33,    34,     6,    36,     7,    41,
+     3,     4,   153,    41,   153,   156,     9,    10,    11,    12,
+    13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+    23,    24,    25,    26,    27,    28,    29,     6,   906,     6,
+    30,     6,   910,    33,    34,   153,   914,   153,   156,   137,
+   918,    89,    90,    91,    92,     6,    48,    49,   146,   147,
+   148,   149,    84,    84,   152,   154,   155,   105,   106,   107,
+   108,   109,    84,   111,   112,     6,   114,   115,   116,   156,
+   118,     6,    84,    84,   922,   157,   153,   157,     6,   156,
+     6,   156,   153,   131,   132,     6,   153,    86,    87,    88,
+    89,    90,   130,    51,    52,    53,    54,   135,    56,   147,
+   978,   149,     6,   153,   152,   153,   154,   155,   156,   157,
    158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-   168,   169,   170,   171,   172,   173,   174,   154,   154,   154,
-   178,   179,   180,   181,   182,   183,   144,   145,   146,   147,
-    48,    49,   150,   144,   145,   146,   147,   152,   153,   150,
-  1047,   144,   145,   146,   147,   151,   151,   150,   144,   145,
-   146,   147,   889,   151,   150,    34,   893,   144,   145,   146,
-   147,   152,   151,   150,   155,   223,   152,   152,   226,   155,
-   155,   151,   230,    36,   154,    34,   234,   235,   236,   154,
-   238,   239,   240,   241,   242,   243,   244,    51,    52,    53,
-    54,    34,    56,   251,   252,   253,   154,   154,     5,   144,
-   145,   146,   147,    34,   258,   150,   264,   154,     6,   267,
-   268,   144,   145,   146,   147,     5,   151,   150,   144,   145,
-   146,   147,   152,   152,   150,   155,   155,     3,     4,   154,
-    41,   289,   290,     9,    10,    11,    12,    13,    14,    15,
-    16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-    26,    27,    28,    29,   152,    34,   151,   155,   995,   996,
-   997,   998,     5,   152,   152,  1002,   155,   155,    30,    31,
-    32,    33,    34,    35,    36,    37,   151,    39,   151,    41,
-    42,   135,    44,    45,   138,   152,   140,     6,   155,   151,
-   348,   152,   146,   147,   155,   353,   150,   152,   135,   151,
-   155,   138,    64,   140,   362,   363,   151,   361,   154,   146,
-   147,   369,   152,   150,   150,   155,    78,    79,   376,   152,
-   453,   454,   155,   456,   151,   151,   135,   460,   461,   152,
-  1067,  1068,   155,   151,  1071,   144,   145,   146,   147,   152,
-   152,   150,   155,   155,   154,   403,    92,    93,    94,    95,
-    96,   151,   410,   411,   412,   144,   145,   146,   147,   141,
-   151,   150,   144,   152,   151,   151,   155,   151,   144,   145,
-   132,   144,   145,   146,   147,   151,   151,   150,     5,   152,
-   156,   151,   155,   516,   151,   151,   519,  1124,   144,   145,
-   146,   147,   690,   155,   150,   154,   152,   451,   151,   155,
-   151,   151,   151,   151,   462,   463,   539,   540,   562,   151,
-   151,   151,   545,   546,     0,     1,   151,     3,   151,   552,
-   151,   554,   151,   144,   145,   146,   147,   154,   154,   150,
-   484,   485,   486,   566,   155,   568,   154,   154,  1175,   154,
-   151,   151,   151,   151,   577,   578,   579,   151,   151,   582,
-   583,   584,   585,   586,   587,   588,   514,   515,   151,   517,
-   144,   145,   146,   147,   151,   151,   150,  1204,   151,   151,
-   151,   155,   151,   531,   532,   144,   145,   146,   147,   533,
-   151,   150,   152,     3,     4,   151,   155,   151,   542,     9,
+   168,   169,   170,   171,     7,   157,   157,   175,   176,   177,
+   178,   179,   180,   156,    34,   157,   156,   156,   923,   153,
+   153,     6,   927,   146,   147,   157,   157,   153,     6,   137,
+   153,    38,   140,    34,   142,   158,    30,     6,   157,    33,
+   148,   149,   148,   149,   152,    34,   152,   146,   147,   148,
+   149,   153,   220,   152,     8,   223,    36,     5,   156,   227,
+     6,    46,   156,   231,   232,   233,   156,   235,   236,   237,
+   238,   239,   240,   241,  1103,     6,   153,   156,    34,   156,
+   248,   249,   250,     6,     6,   146,   147,   148,   149,    33,
+    34,   152,    36,   261,     5,   153,   264,   255,   146,   147,
+   148,   149,     6,   156,   152,   146,   147,   148,   149,     6,
+    34,   152,   154,     3,     4,   157,   153,   285,   286,     9,
     10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-   140,   151,   151,   571,   144,   145,   146,   147,   576,   151,
-   150,   107,   108,   109,   110,   111,   112,   113,   114,   151,
-   151,   589,   590,   591,   151,   151,   151,   151,   151,   151,
+   137,   154,   153,   140,   157,   142,  1051,  1052,  1053,  1054,
+     5,   148,   149,  1058,   154,   152,   154,   157,   153,   157,
+   117,   146,   147,   148,   149,   122,   153,   152,   146,   147,
+   148,   149,   154,   156,   152,   157,   344,   146,   147,   148,
+   149,   349,   154,   152,   141,   157,   153,   153,   145,   146,
+   358,   359,   146,   147,   148,   149,   156,   365,   152,   357,
+   146,   147,   148,   149,   372,   156,   152,   146,   147,   148,
+   149,   154,   153,   152,   157,   146,   147,   148,   149,  1124,
+  1125,   152,   156,  1128,   146,   147,   148,   149,   154,   156,
+   152,   157,   400,    94,    95,    96,    97,    98,   153,   407,
+   408,   409,   146,   147,   148,   149,   153,   153,   152,   146,
+   147,   148,   149,   153,   153,   152,   146,   147,   148,   149,
+   156,   154,   152,   153,   157,   153,   156,   146,   147,   148,
+   149,   153,   153,   152,  1179,     0,     1,   153,     3,   154,
+   159,   153,   157,   689,     0,     1,   154,     3,   153,   157,
+   448,   459,   460,   139,   154,   154,   142,   157,   157,   560,
+    30,    31,    32,    33,    34,    35,    36,    37,   153,    39,
+   154,    41,    42,   157,    44,    45,   154,   154,   137,   157,
+   157,   153,   153,   481,   482,   483,  1231,   146,   147,   148,
+   149,   156,   154,   152,    64,   157,   146,   147,   148,   149,
+   153,   153,   152,   511,   512,   140,   514,   157,    78,    79,
+   153,   146,   147,   148,   149,   153,   153,   152,  1263,   153,
+   153,   529,   530,   146,   147,   148,   149,   153,   153,   152,
+     6,   154,   156,   531,   157,   146,   147,   148,   149,   153,
+   152,   152,   540,   154,   109,   110,   111,   112,   113,   114,
+   115,   116,   153,   109,   110,   111,   112,   113,   114,   115,
+   116,   569,   153,   153,   134,   153,   574,   153,   153,   153,
+   135,   136,   153,   138,   153,   153,   153,   153,   153,   587,
+   588,   589,   153,     5,   153,   153,   153,   157,   596,   597,
    598,   599,   600,   601,   602,   603,   604,   605,   606,   607,
-   608,   609,   151,   851,  1291,    30,    31,    32,    33,    34,
-    35,    36,    37,   621,    39,   153,    41,    42,   626,    44,
-    45,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-    75,    76,    77,   151,   717,   151,   151,   151,     7,    64,
-   152,   724,     7,   152,   152,   728,     7,     7,    82,     5,
-     5,     5,   756,    78,    79,   144,   145,   146,   147,     5,
-   125,   150,   666,     5,   747,     5,   155,     5,     5,     5,
-   678,   679,     3,     5,   144,   145,   146,   147,     5,     5,
-   150,   151,     5,     5,   154,     5,     5,   691,     5,   693,
-     5,   695,     5,   144,   145,   146,   147,     5,     5,   150,
-     5,     5,   710,   711,   155,     5,     5,   132,     5,     5,
-   155,     6,     5,     5,     5,   723,     6,   725,     7,   727,
-   144,   145,   146,   147,     7,     7,   150,     7,     6,   737,
-   155,   155,     6,   155,     7,     7,   744,   745,   746,   144,
-   145,   146,   147,   751,     7,   150,   155,   755,   154,   151,
-   155,   154,   760,   761,     7,   151,     7,   139,   152,   152,
-    30,    31,    32,    33,    34,    35,    36,    37,   776,    39,
-     5,    41,    42,   152,    44,    45,   152,   152,   152,   787,
-   788,   789,   790,   791,   792,   793,   794,   795,   796,   797,
-   798,   153,     7,   876,    64,   152,   879,     7,     7,   144,
-   145,   146,   147,   152,   152,   150,   814,   154,    78,    79,
-   155,   144,   145,   146,   147,     7,     7,   150,   901,    66,
-    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-    77,   152,     7,     7,   917,     7,   152,     7,   144,   145,
-   146,   147,   152,   152,   150,     7,   854,   855,   856,   155,
-   144,   145,   146,   147,   152,     7,   150,   144,   145,   146,
-   147,   155,   132,   150,   152,   873,   874,   152,   155,     7,
-     6,   152,   880,   152,   882,   152,   884,   152,   144,   145,
-   146,   147,   151,   891,   150,   152,     7,   152,   152,   155,
-   152,   899,   144,   145,   146,   147,   904,   152,   150,   907,
-   154,   153,   152,   911,   152,   988,   989,   152,   155,   152,
-   152,   152,   920,   921,   922,   923,   924,   925,   926,   927,
-   928,   929,   930,   931,   152,   144,   145,   146,   147,   151,
-  1013,   150,     7,   151,   151,   943,   155,   151,   151,     3,
-     4,     7,   154,   151,   151,     9,    10,    11,    12,    13,
-    14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-    24,    25,    26,    27,    28,    29,   144,   145,   146,   147,
-   151,   151,   150,   144,   145,   146,   147,   155,  1061,   150,
-   135,   154,   153,   991,   992,   993,   994,   144,   145,   146,
-   147,   151,  1075,   150,   144,   145,   146,   147,   155,     3,
-   150,     3,   151,     3,   146,   155,  1014,  1015,  1016,  1017,
-  1018,  1019,  1020,  1021,  1022,   144,   145,   146,   147,     3,
-     3,   150,     3,     3,     3,  1033,   155,   144,   145,   146,
-   147,     3,     3,   150,   144,   145,   146,   147,   155,     3,
-   150,     3,  1125,   153,   144,   145,   146,   147,     3,     3,
-   150,     3,     5,   153,     5,     3,  1064,  1065,   144,   145,
-   146,   147,     6,     6,   150,     6,     6,   153,  1076,  1077,
-  1078,  1079,  1080,  1081,  1082,  1083,  1084,  1085,  1086,  1087,
-   144,   145,     6,     6,   154,  1093,     6,   151,     4,    83,
-   154,   154,   152,  1176,   144,   145,   146,   147,   153,   152,
-   150,   153,   153,   153,   144,   145,   146,   147,   152,   152,
-   150,  1119,  1120,   153,   153,  1123,   152,   152,     7,   153,
-  1203,   152,  1130,  1131,  1132,  1133,  1134,  1135,  1136,  1137,
-  1138,  1139,   153,  1141,   153,  1143,   144,   145,   146,   147,
-   152,  1149,   150,   152,     6,   153,   152,   152,  1231,   144,
-   145,   146,   147,   152,   152,   150,   153,   153,   153,   144,
-   145,   146,   147,  1171,  1172,   150,   152,     6,   153,  1177,
-  1178,  1179,  1180,  1181,  1182,   152,   152,  1260,   144,   145,
-   146,   147,   152,   152,   150,   152,     6,   153,     6,   152,
-     6,  1274,  1200,     6,     6,     6,     6,  1205,  1206,  1207,
-  1208,  1209,  1210,  1211,  1212,  1213,   144,   145,   146,   147,
-     6,     6,   150,     6,     6,   153,   144,   145,   146,   147,
-     6,     6,   150,    83,   152,  1233,  1234,  1235,  1236,  1237,
-  1238,  1239,     7,  1241,   155,  1243,   144,   145,   146,   147,
-   155,   155,   150,     3,     6,   153,     3,     6,   146,     3,
-     6,     6,     3,  1261,  1262,  1263,   144,   145,   146,   147,
-     6,     6,   150,     6,     3,   153,     6,  1275,  1276,  1277,
-  1278,  1279,  1280,   144,   145,   146,   147,     3,     3,   150,
-     3,   154,   153,   155,  1292,  1293,  1294,  1295,     6,  1297,
-     6,  1299,   144,   145,   146,   147,   152,   152,   150,   152,
-   154,   153,   144,   145,   146,   147,    80,     6,   150,   153,
-   152,  1319,  1320,  1321,   152,   144,   145,   146,   147,   152,
-  1328,   150,  1330,   152,  1332,     3,     4,   152,   154,   153,
-   152,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+   153,   153,   146,   147,   148,   149,  1351,   153,   152,   154,
+   154,   153,   620,   157,   153,   153,   153,   625,     3,     4,
+     5,   153,   868,   153,     9,    10,    11,    12,    13,    14,
+    15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+    25,    26,    27,    28,    29,   153,   146,   147,   148,   149,
+   153,   153,   152,   450,   451,   153,   453,   157,   155,   154,
+   457,   458,     7,     7,   154,     3,     4,   665,   769,   677,
+   678,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-    28,    29,     3,     4,    33,   152,     6,     6,     9,    10,
-    11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-    21,    22,    23,    24,    25,    26,    27,    28,    29,     3,
-     4,   153,   153,   152,   152,     9,    10,    11,    12,    13,
+    28,    29,   690,   154,   692,     7,   694,   146,   147,   148,
+   149,   709,   710,   152,     7,   154,    82,     5,   157,   146,
+   147,   148,   149,     5,     5,   152,   513,     5,     5,   516,
+   157,     5,   146,   147,   148,   149,     5,     5,   152,     5,
+   738,     5,   740,   157,     5,     5,     5,     5,     5,     5,
+   537,   538,   750,     5,     5,     5,   543,   544,     5,   757,
+   758,   759,     5,   550,     5,   552,   764,     5,   127,     5,
+   768,   146,   147,     5,     5,   773,   774,   564,   153,   566,
+     5,   156,     3,     5,     7,     5,   157,     6,   575,   576,
+   577,   789,     5,   580,   581,   582,   583,   584,   585,   586,
+     6,     6,   800,   801,   802,   803,   804,   805,   806,   807,
+   808,   809,   810,   811,   146,   147,   148,   149,   146,   147,
+   152,     7,   820,   155,   822,   153,   824,     7,   826,     7,
+   828,     6,   820,   831,   822,     7,   824,   157,   826,     7,
+   828,     3,     4,     5,     7,   156,   153,     9,    10,    11,
+    12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+    22,    23,    24,    25,    26,    27,    28,    29,     7,   156,
+   153,     7,   156,   871,   872,   873,   156,    66,    67,    68,
+    69,    70,    71,    72,    73,    74,    75,    76,    77,   156,
+     5,   156,   890,   891,   156,   141,     3,     4,     5,   897,
+   154,   899,     9,    10,    11,    12,    13,    14,    15,    16,
+    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+    27,    28,    29,     7,   154,   154,   154,   925,   154,   716,
+   146,   147,   148,   149,     7,   933,   152,   154,   156,   154,
+   938,   157,   154,   941,   154,   154,   154,   945,   155,     7,
+   737,   154,   154,   154,   741,   154,   954,   955,   956,   957,
+   958,   959,   960,   961,   962,   963,   964,   965,   157,   146,
+   147,   148,   149,   760,     7,   152,   146,   147,   148,   149,
+   157,   154,   152,   154,   146,   147,     7,   157,   154,   154,
+   154,   153,     7,   154,   156,   154,   154,   995,   154,   154,
+   154,   146,   147,   148,   149,   154,   154,   152,   154,     3,
+     4,     5,   157,   154,   154,     9,    10,    11,    12,    13,
     14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-    24,    25,    26,    27,    28,    29,   153,    83,     6,   153,
-    89,    90,    91,     6,     3,   153,   152,     3,    97,    98,
-    99,   100,   101,   102,   103,   104,   105,   106,     6,     6,
-     6,     6,     6,     6,     6,     6,   115,   116,   117,   118,
-   119,   120,   121,   122,   123,   124,     3,   126,   127,   128,
-   129,   130,   131,   144,   145,   146,   147,     6,     5,   150,
-     5,   155,   153,     6,   154,   152,   144,   145,   146,   147,
-   152,   152,   150,   151,   144,   145,   146,   147,   152,   152,
-   150,   153,   153,   153,   152,   152,   144,   145,   146,   147,
-   153,   152,   150,   144,   145,   153,     6,     6,     0,     1,
-   151,     6,     4,   144,   145,   146,   147,   152,     6,   150,
-     6,     6,   153,   144,   145,   146,   147,     6,     6,   150,
-   144,   145,   153,   152,     6,     6,     5,   151,    30,    31,
-    32,    33,    34,    35,    36,    37,     5,    39,    40,    41,
-    42,    43,    44,    45,   155,   152,   152,    80,   153,    51,
-    52,    53,    54,    55,    56,   152,    58,    59,    60,    61,
-    62,   153,    64,   144,   145,   146,   147,   152,   152,   150,
-   152,   154,   153,     5,   154,   154,    78,    79,   144,   145,
-   146,   147,    84,     5,   150,     6,    88,   153,   144,   145,
-   146,   147,     6,   155,   150,     6,     6,   153,   144,   145,
-   146,   147,   154,   153,   150,   153,    80,   153,   144,   145,
-   146,   147,   152,   152,   150,     6,     6,   153,   144,   145,
-   146,   147,     6,   155,   150,   155,     6,   153,     6,     6,
-   132,   144,   145,   146,   147,     6,     6,   150,   154,   154,
-   153,   144,   145,   146,   147,   152,   152,   150,   152,   141,
-   153,   144,   145,   146,   147,   152,     6,   150,   152,     6,
-   153,   144,   145,   146,   147,     6,   153,   150,   154,   154,
-   153,   144,   145,   146,   147,     6,     6,   150,     6,   154,
-   153,   144,   145,   146,   147,   152,   152,   150,   152,   154,
-   153,   144,   145,   146,   147,   154,     6,   150,     6,     6,
-   153,   144,   145,   146,   147,   153,     6,   150,   154,   154,
-   153,   144,   145,   146,   147,   154,     6,   150,     6,     6,
-   153,   144,   145,   146,   147,     0,     0,   150,     6,     6,
-   153,   144,   145,   146,   147,   488,     6,   150,    -1,   463,
-   153,   144,   145,   146,   147,    -1,    -1,   150,    -1,    -1,
-   153,   144,   145,   146,   147,  1012,   715,   150,    -1,    -1,
-   153,   144,   145,   146,   147,    -1,    -1,   150,    -1,    -1,
-   153,   144,   145,   146,   147,    -1,    -1,   150,    -1,    -1,
-   153,   144,   145,   146,   147,    -1,    -1,   150,    -1,    -1,
-   153,   144,   145,   146,   147,    -1,    -1,   150,    -1,    -1,
-   153,   144,   145,   146,   147,    -1,    -1,   150,    -1,    -1,
-   153,   144,   145,   146,   147,    -1,    -1,   150,    -1,    -1,
-   153,   144,   145,   146,   147,    -1,    -1,   150,    -1,    -1,
-   153,   144,   145,   146,   147,    -1,    -1,   150,    -1,    -1,
-   153,   144,   145,   146,   147,    -1,    -1,   150,    -1,    -1,
-   153,   144,   145,   146,   147,    -1,    -1,   150,    -1,    -1,
-   153,   144,   145,   146,   147,    -1,    -1,   150,    -1,    -1,
-   153,   144,   145,   146,   147,    -1,    -1,   150,    -1,    -1,
-   153,   144,   145,   146,   147,    -1,    -1,   150,    -1,    -1,
-   153,   144,   145,   146,   147,    -1,    -1,   150,    -1,    -1,
-   153,   144,   145,   146,   147,    -1,    -1,   150,    -1,    -1,
-   153,   144,   145,   146,   147,    -1,    -1,   150,    -1,    -1,
-   153,   144,   145,   146,   147,    -1,    -1,   150,    -1,    -1,
-   153,   144,   145,   146,   147,    -1,    -1,   150,    -1,    -1,
-   153,   144,   145,   146,   147,    -1,    -1,   150,    -1,    -1,
-   153,   144,   145,   146,   147,    -1,    -1,   150,    -1,    -1,
-   153,   144,   145,   146,   147,    -1,    -1,   150,    -1,    -1,
-   153,   144,   145,   146,   147,    -1,    -1,   150,    -1,    -1,
-   153,   144,   145,   146,   147,    -1,    -1,   150,    -1,    -1,
-   153,   144,   145,   146,   147,    -1,    -1,   150,    -1,   152,
-   144,   145,   146,   147,    -1,    -1,   150,    -1,   152,   144,
-   145,   146,   147,    -1,    -1,   150,    -1,   152,   144,   145,
-   146,   147,    -1,    -1,   150,    -1,   152,   144,   145,   146,
-   147,    -1,    -1,   150,    -1,   152,   144,   145,   146,   147,
-    -1,    -1,   150,    -1,   152,   144,   145,   146,   147,    -1,
-    -1,   150,    -1,   152,   144,   145,   146,   147,    -1,    -1,
-   150,    -1,   152,   144,   145,   146,   147,    -1,    -1,   150,
-    -1,   152,   144,   145,   146,   147,    -1,    -1,   150,    -1,
-   152,   144,   145,   146,   147,    -1,    -1,   150,    -1,   152,
-   144,   145,   146,   147,    -1,    -1,   150,    -1,   152,   144,
-   145,   146,   147,    -1,    -1,   150,    -1,   152,   144,   145,
-   146,   147,    -1,    -1,   150,    -1,   152,   144,   145,   146,
-   147,    -1,    -1,   150,    -1,   152,   144,   145,   146,   147,
-    -1,    -1,   150,    -1,   152,   144,   145,   146,   147,    -1,
-    -1,   150,    -1,   152,   144,   145,   146,   147,    -1,    -1,
-   150,    -1,   152,   144,   145,   146,   147,    -1,    -1,   150,
-    -1,   152,   144,   145,   146,   147,    -1,    -1,   150,    -1,
-   152,   144,   145,   146,   147,    -1,    -1,   150,    -1,   152,
-   144,   145,   146,   147,    -1,    -1,   150,    -1,   152,   144,
-   145,   146,   147,    -1,    -1,   150,    -1,   152,   144,   145,
-   146,   147,    -1,    -1,   150,    -1,   152,   144,   145,   146,
-   147,    -1,    -1,   150,    -1,   152,   144,   145,   146,   147,
-    -1,    -1,   150,    -1,   152,   144,   145,   146,   147,    -1,
-    -1,   150,    -1,   152,   144,   145,   146,   147,    -1,    -1,
-   150,    -1,   152,   144,   145,   146,   147,    -1,    -1,   150,
-    -1,   152,   144,   145,   146,   147,    -1,    -1,   150,    -1,
-   152,   144,   145,   146,   147,    -1,    -1,   150,    -1,   152,
-   144,   145,   146,   147,    -1,    -1,   150,    -1,   152,   144,
-   145,   146,   147,    -1,    -1,   150,    -1,   152,   144,   145,
-   146,   147,    -1,    -1,   150,    -1,   152,   144,   145,   146,
-   147,    -1,    -1,   150,    -1,   152,   144,   145,   146,   147,
-    -1,    -1,   150,    -1,   152,   144,   145,   146,   147,    -1,
-    -1,   150,    -1,   152,   144,   145,   146,   147,    -1,    -1,
-   150,    -1,   152,   144,   145,   146,   147,    -1,    -1,   150,
-    -1,   152,   144,   145,   146,   147,    -1,    -1,   150,    -1,
-   152,   144,   145,   146,   147,    -1,    -1,   150,    -1,   152,
-   144,   145,   146,   147,    -1,    -1,   150,    -1,   152,   144,
-   145,   146,   147,    -1,    -1,   150,    -1,   152,   144,   145,
-   146,   147,    -1,    -1,   150,    -1,   152,   144,   145,   146,
-   147,    -1,    -1,   150,    -1,   152,   144,   145,   146,   147,
-    -1,    -1,   150,    -1,   152,   144,   145,   146,   147,    -1,
-    -1,   150,    -1,   152,   144,   145,   146,   147,    -1,    -1,
-   150,    -1,   152,   144,   145,   146,   147,    -1,    -1,   150,
-    -1,   152,   144,   145,   146,   147,    -1,    -1,   150,    -1,
-   152,   144,   145,   146,   147,    -1,    -1,   150,    -1,   152,
-   144,   145,   146,   147,    -1,    -1,   150,    -1,   152,   144,
-   145,   146,   147,    -1,    -1,   150,    -1,   152,   144,   145,
-   146,   147,    -1,    -1,   150,    -1,   152,   144,   145,   146,
-   147,    -1,    -1,   150,    -1,   152,   144,   145,   146,   147,
-    -1,    -1,   150,    -1,   152,   144,   145,   146,   147,    -1,
-    -1,   150,    -1,   152,   144,   145,   146,   147,    -1,    -1,
-   150,    -1,   152,   144,   145,   146,   147,    -1,    -1,   150,
-    -1,   152,   144,   145,   146,   147,    -1,    -1,   150,    -1,
-   152,   144,   145,   146,   147,    -1,    -1,   150,    -1,   152,
-   144,   145,   146,   147,    -1,    -1,   150,    -1,   152,   144,
-   145,   146,   147,    -1,    -1,   150,    -1,   152,   144,   145,
-   146,   147,    -1,    -1,   150,    -1,   152,   144,   145,   146,
-   147,    -1,    -1,   150,    -1,   152,   144,   145,   146,   147,
-    -1,    -1,   150,    -1,   152,   144,   145,   146,   147,    -1,
-    -1,   150,    -1,   152,   144,   145,   146,   147,    -1,    -1,
-   150,    -1,   152,   144,   145,   146,   147,    -1,    -1,   150,
-    -1,   152,   144,   145,   146,   147,    -1,    -1,   150,    -1,
-   152,   144,   145,   146,   147,    -1,    -1,   150,    -1,   152,
-   144,   145,   146,   147,    -1,    -1,   150,    -1,   152,   144,
-   145,   146,   147,    -1,    -1,   150,    -1,   152,   144,   145,
-   146,   147,    -1,    -1,   150,    -1,   152,   144,   145,   146,
-   147,    -1,    -1,   150,    -1,   152,   144,   145,   146,   147,
-    -1,    -1,   150,    -1,   152,   144,   145,   146,   147,    -1,
-    -1,   150,    -1,   152,   144,   145,   146,   147,    -1,    -1,
-   150,    -1,   152,   144,   145,   146,   147,    -1,    -1,   150,
-    -1,   152,   144,   145,   146,   147,    -1,    -1,   150,    -1,
-   152,   144,   145,   146,   147,    -1,    -1,   150,    -1,   152,
-   144,   145,   146,   147,    -1,    -1,   150,    -1,   152,   144,
-   145,   146,   147,    -1,    -1,   150,    -1,   152,   144,   145,
-   146,   147,    -1,    -1,   150,    -1,   152,   144,   145,   146,
-   147,    -1,    -1,   150,    -1,   152,   144,   145,   146,   147,
-    -1,    -1,   150,    -1,   152,   144,   145,   146,   147,    -1,
-    -1,   150,    -1,   152,   144,   145,   146,   147,    -1,    -1,
-   150,    -1,   152,   144,   145,   146,   147,    -1,    -1,   150,
-    -1,   152,   144,   145,   146,   147,    -1,    -1,   150,    -1,
-   152,   144,   145,   146,   147,    -1,    -1,   150,    -1,   152,
-   144,   145,   146,   147,    -1,    -1,   150,    -1,   152,   144,
-   145,   146,   147,    -1,    -1,   150,    -1,   152,   144,   145,
-   146,   147,    -1,    -1,   150,    -1,   152,   144,   145,   146,
-   147,    -1,    -1,   150,    -1,   152,   144,   145,   146,   147,
-    -1,    -1,   150,    -1,   152,   144,   145,   146,   147,    -1,
-    -1,   150,    -1,   152,   144,   145,   146,   147,    -1,    -1,
-   150,    -1,   152,   144,   145,   146,   147,    -1,    -1,   150,
-    -1,   152,   144,   145,   146,   147,    -1,    -1,   150,    -1,
-   152,   144,   145,   146,   147,    -1,    -1,   150,    -1,   152,
-   144,   145,   146,   147,    -1,    -1,   150,    -1,   152,   144,
-   145,   146,   147,    -1,    -1,   150,    -1,   152,   144,   145,
-   146,   147,    -1,    -1,   150,    -1,   152,   144,   145,   146,
-   147,    -1,    -1,   150,    -1,   152,   144,   145,   146,   147,
-    -1,    -1,   150,    -1,   152
+    24,    25,    26,    27,    28,    29,     7,     7,     7,   146,
+   147,     7,   146,   147,   148,   149,   153,     7,   152,   156,
+     7,   154,  1050,   157,    30,    31,    32,    33,    34,    35,
+    36,    37,   153,    39,   153,    41,    42,   153,    44,    45,
+   153,   153,  1070,  1071,  1072,  1073,  1074,  1075,  1076,  1077,
+  1078,   146,   147,   148,   149,   153,   153,   152,    64,  1087,
+   153,  1089,   157,   146,   147,   148,   149,   153,   153,   152,
+     6,   153,    78,    79,   157,   153,   893,     3,     4,   896,
+     7,   137,     7,     9,    10,    11,    12,    13,    14,    15,
+    16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+    26,    27,    28,    29,     3,  1133,  1134,  1135,  1136,  1137,
+  1138,  1139,  1140,  1141,  1142,  1143,  1144,     3,   935,  1147,
+  1148,  1149,   146,   147,   146,   147,   148,   149,   134,   153,
+   152,     3,   156,   148,   951,   157,     3,   146,   147,   148,
+   149,     3,     3,   152,     3,     3,     3,  1175,   157,     3,
+  1178,   157,     3,     5,     3,     3,     3,  1185,  1186,  1187,
+  1188,  1189,  1190,  1191,  1192,  1193,  1194,     5,  1196,     3,
+  1198,     3,   156,     6,    83,  1203,  1204,    30,    31,    32,
+    33,    34,    35,    36,    37,     6,    39,     6,    41,    42,
+   142,    44,    45,   154,   146,   147,   148,   149,  1226,  1227,
+   152,     6,     6,     6,     6,  1233,  1234,  1235,  1236,  1237,
+  1238,    64,   155,   154,     6,   155,  1244,   154,     6,   154,
+   146,   147,   155,  1040,  1041,    78,    79,   153,     6,     6,
+  1258,   155,   154,   154,     6,   155,  1264,  1265,  1266,  1267,
+  1268,  1269,  1270,  1271,  1272,   155,   154,     6,   155,   154,
+   154,   154,  1069,    66,    67,    68,    69,    70,    71,    72,
+    73,    74,    75,    76,    77,  1293,  1294,  1295,  1296,  1297,
+  1298,  1299,   154,  1301,   154,  1303,   146,   147,   148,   149,
+   154,   134,   152,   146,   147,   148,   149,   157,   154,   152,
+   155,   154,   155,  1321,  1322,  1323,   146,   147,   148,   149,
+  1117,     6,   152,     6,     6,   155,     6,  1335,  1336,  1337,
+  1338,  1339,  1340,   154,   154,  1132,   155,   146,   147,   148,
+   149,     6,     6,   152,  1352,  1353,  1354,  1355,   157,  1357,
+   154,  1359,   146,   147,   148,   149,   154,   154,   152,   146,
+   147,   148,   149,   157,   157,   152,   154,     7,     6,     6,
+   157,  1379,  1380,  1381,     6,    83,     7,     7,     7,     3,
+  1388,     7,  1390,  1180,  1392,     3,     4,     5,     7,     6,
+     3,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+    18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+    28,    29,   146,   147,   148,   149,     6,   148,   152,     6,
+     3,   155,     6,   146,   147,   148,   149,     6,     3,   152,
+     3,     4,   155,     3,     6,  1232,     9,    10,    11,    12,
+    13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+    23,    24,    25,    26,    27,    28,    29,     6,     6,     3,
+     3,     4,     3,     3,     6,  1262,     9,    10,    11,    12,
+    13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+    23,    24,    25,    26,    27,    28,    29,   146,   147,   148,
+   149,     6,   154,   152,  1291,   156,   155,   146,   147,   148,
+   149,   157,   154,   152,   154,   156,   155,   146,   147,   148,
+   149,    80,   156,   152,   156,   156,   155,     6,   146,   147,
+   148,   149,   156,  1320,   152,     6,    83,   155,   146,   147,
+   146,   147,   148,   149,   156,   153,   152,  1334,   156,   155,
+   146,   147,   148,   149,   155,   154,   152,   154,   156,   155,
+   146,   147,   148,   149,   154,   154,   152,   155,   155,   155,
+   146,   147,   148,   149,   155,   154,   152,   155,     6,   155,
+   155,     6,   154,   146,   147,   155,   154,   154,     4,     6,
+   153,     0,     1,   156,     6,     4,   146,   147,   148,   149,
+     6,     6,   152,     6,     6,   155,     6,     6,     6,     3,
+     6,     6,     3,   146,   147,   148,   149,     6,     6,   152,
+   153,    30,    31,    32,    33,    34,    35,    36,    37,     3,
+    39,    40,    41,    42,    43,    44,    45,     6,     6,   157,
+     6,     6,    51,    52,    53,    54,    55,    56,    33,    58,
+    59,    60,    61,    62,     6,    64,   146,   147,   148,   149,
+     5,     5,   152,     6,   156,   155,   154,     7,   157,    78,
+    79,   146,   147,   148,   149,   157,    85,   152,   154,   157,
+   155,   146,   147,   148,   149,   157,   154,   152,   157,   155,
+   155,   146,   147,   148,   149,   154,   154,   152,   155,   155,
+   155,   154,   154,     6,     6,   154,    91,    92,    93,   154,
+     6,     6,     6,     6,    99,   100,   101,   102,   103,   104,
+   105,   106,   107,   108,     6,   134,     6,     6,     6,     5,
+     5,   157,   117,   118,   119,   120,   121,   122,   123,   124,
+   125,   126,     6,   128,   129,   130,   131,   132,   133,   146,
+   147,   148,   149,     6,   155,   152,    80,     6,   155,   146,
+   147,   148,   149,   155,   154,   152,     6,     5,   155,   146,
+   147,   148,   149,   154,   154,   152,   154,   156,   155,   146,
+   147,   148,   149,   154,   154,   152,     5,   143,   155,   146,
+   147,   148,   149,   156,   156,   152,   154,     6,   155,   146,
+   147,   148,   149,   157,   155,   152,   156,   155,   155,   146,
+   147,   148,   149,   154,    80,   152,   154,     6,   155,   146,
+   147,   148,   149,   157,   157,   152,     6,     6,   155,   146,
+   147,   148,   149,     6,     6,   152,     6,     6,   155,   146,
+   147,   148,   149,   156,     6,   152,   154,   156,   155,   146,
+   147,   148,   149,   154,   154,   152,   154,   156,   155,   146,
+   147,   148,   149,     6,   156,   152,   154,     6,   155,   146,
+   147,   148,   149,     6,   155,   152,     6,     6,   155,   146,
+   147,   148,   149,     6,   154,   152,   154,   156,   155,   146,
+   147,   148,   149,   156,   156,   152,   154,     6,   155,   146,
+   147,   148,   149,     6,     6,   152,     6,   155,   155,   146,
+   147,   148,   149,   156,   156,   152,     6,   156,   155,   146,
+   147,   148,   149,     6,     6,   152,     0,     0,   155,   146,
+   147,   148,   149,   485,     6,   152,     6,     6,   155,   146,
+   147,   148,   149,  1068,   460,   152,   714,    -1,   155,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,    -1,   155,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,    -1,   155,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,    -1,   155,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,    -1,   155,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,    -1,   155,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,    -1,   155,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,    -1,   155,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,    -1,   155,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,    -1,   155,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,    -1,   155,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,    -1,   155,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,    -1,   155,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,    -1,   155,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,    -1,   155,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,    -1,   155,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,    -1,   155,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,    -1,   155,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,    -1,   155,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,    -1,   155,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,    -1,   155,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,    -1,   155,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,    -1,   155,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,    -1,   155,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,    -1,   155,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,    -1,   155,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,   154,   146,   147,
+   148,   149,    -1,    -1,   152,    -1,   154,   146,   147,   148,
+   149,    -1,    -1,   152,    -1,   154,   146,   147,   148,   149,
+    -1,    -1,   152,    -1,   154,   146,   147,   148,   149,    -1,
+    -1,   152,    -1,   154,   146,   147,   148,   149,    -1,    -1,
+   152,    -1,   154,   146,   147,   148,   149,    -1,    -1,   152,
+    -1,   154,   146,   147,   148,   149,    -1,    -1,   152,    -1,
+   154,   146,   147,   148,   149,    -1,    -1,   152,    -1,   154,
+   146,   147,   148,   149,    -1,    -1,   152,    -1,   154,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,   154,   146,   147,
+   148,   149,    -1,    -1,   152,    -1,   154,   146,   147,   148,
+   149,    -1,    -1,   152,    -1,   154,   146,   147,   148,   149,
+    -1,    -1,   152,    -1,   154,   146,   147,   148,   149,    -1,
+    -1,   152,    -1,   154,   146,   147,   148,   149,    -1,    -1,
+   152,    -1,   154,   146,   147,   148,   149,    -1,    -1,   152,
+    -1,   154,   146,   147,   148,   149,    -1,    -1,   152,    -1,
+   154,   146,   147,   148,   149,    -1,    -1,   152,    -1,   154,
+   146,   147,   148,   149,    -1,    -1,   152,    -1,   154,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,   154,   146,   147,
+   148,   149,    -1,    -1,   152,    -1,   154,   146,   147,   148,
+   149,    -1,    -1,   152,    -1,   154,   146,   147,   148,   149,
+    -1,    -1,   152,    -1,   154,   146,   147,   148,   149,    -1,
+    -1,   152,    -1,   154,   146,   147,   148,   149,    -1,    -1,
+   152,    -1,   154,   146,   147,   148,   149,    -1,    -1,   152,
+    -1,   154,   146,   147,   148,   149,    -1,    -1,   152,    -1,
+   154,   146,   147,   148,   149,    -1,    -1,   152,    -1,   154,
+   146,   147,   148,   149,    -1,    -1,   152,    -1,   154,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,   154,   146,   147,
+   148,   149,    -1,    -1,   152,    -1,   154,   146,   147,   148,
+   149,    -1,    -1,   152,    -1,   154,   146,   147,   148,   149,
+    -1,    -1,   152,    -1,   154,   146,   147,   148,   149,    -1,
+    -1,   152,    -1,   154,   146,   147,   148,   149,    -1,    -1,
+   152,    -1,   154,   146,   147,   148,   149,    -1,    -1,   152,
+    -1,   154,   146,   147,   148,   149,    -1,    -1,   152,    -1,
+   154,   146,   147,   148,   149,    -1,    -1,   152,    -1,   154,
+   146,   147,   148,   149,    -1,    -1,   152,    -1,   154,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,   154,   146,   147,
+   148,   149,    -1,    -1,   152,    -1,   154,   146,   147,   148,
+   149,    -1,    -1,   152,    -1,   154,   146,   147,   148,   149,
+    -1,    -1,   152,    -1,   154,   146,   147,   148,   149,    -1,
+    -1,   152,    -1,   154,   146,   147,   148,   149,    -1,    -1,
+   152,    -1,   154,   146,   147,   148,   149,    -1,    -1,   152,
+    -1,   154,   146,   147,   148,   149,    -1,    -1,   152,    -1,
+   154,   146,   147,   148,   149,    -1,    -1,   152,    -1,   154,
+   146,   147,   148,   149,    -1,    -1,   152,    -1,   154,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,   154,   146,   147,
+   148,   149,    -1,    -1,   152,    -1,   154,   146,   147,   148,
+   149,    -1,    -1,   152,    -1,   154,   146,   147,   148,   149,
+    -1,    -1,   152,    -1,   154,   146,   147,   148,   149,    -1,
+    -1,   152,    -1,   154,   146,   147,   148,   149,    -1,    -1,
+   152,    -1,   154,   146,   147,   148,   149,    -1,    -1,   152,
+    -1,   154,   146,   147,   148,   149,    -1,    -1,   152,    -1,
+   154,   146,   147,   148,   149,    -1,    -1,   152,    -1,   154,
+   146,   147,   148,   149,    -1,    -1,   152,    -1,   154,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,   154,   146,   147,
+   148,   149,    -1,    -1,   152,    -1,   154,   146,   147,   148,
+   149,    -1,    -1,   152,    -1,   154,   146,   147,   148,   149,
+    -1,    -1,   152,    -1,   154,   146,   147,   148,   149,    -1,
+    -1,   152,    -1,   154,   146,   147,   148,   149,    -1,    -1,
+   152,    -1,   154,   146,   147,   148,   149,    -1,    -1,   152,
+    -1,   154,   146,   147,   148,   149,    -1,    -1,   152,    -1,
+   154,   146,   147,   148,   149,    -1,    -1,   152,    -1,   154,
+   146,   147,   148,   149,    -1,    -1,   152,    -1,   154,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,   154,   146,   147,
+   148,   149,    -1,    -1,   152,    -1,   154,   146,   147,   148,
+   149,    -1,    -1,   152,    -1,   154,   146,   147,   148,   149,
+    -1,    -1,   152,    -1,   154,   146,   147,   148,   149,    -1,
+    -1,   152,    -1,   154,   146,   147,   148,   149,    -1,    -1,
+   152,    -1,   154,   146,   147,   148,   149,    -1,    -1,   152,
+    -1,   154,   146,   147,   148,   149,    -1,    -1,   152,    -1,
+   154,   146,   147,   148,   149,    -1,    -1,   152,    -1,   154,
+   146,   147,   148,   149,    -1,    -1,   152,    -1,   154,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,   154,   146,   147,
+   148,   149,    -1,    -1,   152,    -1,   154,   146,   147,   148,
+   149,    -1,    -1,   152,    -1,   154,   146,   147,   148,   149,
+    -1,    -1,   152,    -1,   154,   146,   147,   148,   149,    -1,
+    -1,   152,    -1,   154,   146,   147,   148,   149,    -1,    -1,
+   152,    -1,   154,   146,   147,   148,   149,    -1,    -1,   152,
+    -1,   154,   146,   147,   148,   149,    -1,    -1,   152,    -1,
+   154,   146,   147,   148,   149,    -1,    -1,   152,    -1,   154,
+   146,   147,   148,   149,    -1,    -1,   152,    -1,   154,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,   154,   146,   147,
+   148,   149,    -1,    -1,   152,    -1,   154,   146,   147,   148,
+   149,    -1,    -1,   152,    -1,   154,   146,   147,   148,   149,
+    -1,    -1,   152,    -1,   154,   146,   147,   148,   149,    -1,
+    -1,   152,    -1,   154,   146,   147,   148,   149,    -1,    -1,
+   152,    -1,   154,   146,   147,   148,   149,    -1,    -1,   152,
+    -1,   154,   146,   147,   148,   149,    -1,    -1,   152,    -1,
+   154,   146,   147,   148,   149,    -1,    -1,   152,    -1,   154,
+   146,   147,   148,   149,    -1,    -1,   152,    -1,   154,   146,
+   147,   148,   149,    -1,    -1,   152,    -1,   154,   146,   147,
+   148,   149,    -1,    -1,   152,    -1,   154,   146,   147,   148,
+   149,    -1,    -1,   152,    -1,   154,   146,   147,   148,   149,
+    -1,    -1,   152,    -1,   154,   146,   147,   148,   149,    -1,
+    -1,   152,    -1,   154
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/usr/lib/bison.simple"
-/* This file comes from bison-1.28.  */
+#line 3 "/usr/local/share/bison.simple"
 
 /* Skeleton output parser for bison,
    Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
@@ -1532,66 +1608,46 @@ static const short yycheck[] = {     7,
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 /* As a special exception, when this file is copied by Bison into a
    Bison output file, you may use that output file without restriction.
    This special exception was added by the Free Software Foundation
    in version 1.24 of Bison.  */
 
-/* This is the parser code that is written into each bison parser
-  when the %semantic_parser declaration is not specified in the grammar.
-  It was written by Richard Stallman by simplifying the hairy parser
-  used when %semantic_parser is specified.  */
-
-#ifndef YYSTACK_USE_ALLOCA
-#ifdef alloca
-#define YYSTACK_USE_ALLOCA
-#else /* alloca not defined */
+#ifndef alloca
 #ifdef __GNUC__
-#define YYSTACK_USE_ALLOCA
 #define alloca __builtin_alloca
 #else /* not GNU C.  */
-#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
-#define YYSTACK_USE_ALLOCA
+#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
 #include <alloca.h>
 #else /* not sparc */
-/* We think this test detects Watcom and Microsoft C.  */
-/* This used to test MSDOS, but that is a bad idea
-   since that symbol is in the user namespace.  */
-#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
-#if 0 /* No need for malloc.h, which pollutes the namespace;
-	 instead, just don't use alloca.  */
+#if defined (MSDOS) && !defined (__TURBOC__)
 #include <malloc.h>
-#endif
 #else /* not MSDOS, or __TURBOC__ */
 #if defined(_AIX)
-/* I don't know what this was needed for, but it pollutes the namespace.
-   So I turned it off.   rms, 2 May 1997.  */
-/* #include <malloc.h>  */
+#include <malloc.h>
  #pragma alloca
-#define YYSTACK_USE_ALLOCA
-#else /* not MSDOS, or __TURBOC__, or _AIX */
-#if 0
-#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
-		 and on HPUX 10.  Eventually we can turn this on.  */
-#define YYSTACK_USE_ALLOCA
-#define alloca __builtin_alloca
+#else /* not MSDOS, __TURBOC__, or _AIX */
+#ifdef __hpux
+#ifdef __cplusplus
+extern "C" {
+void *alloca (unsigned int);
+};
+#else /* not __cplusplus */
+void *alloca ();
+#endif /* not __cplusplus */
 #endif /* __hpux */
-#endif
 #endif /* not _AIX */
 #endif /* not MSDOS, or __TURBOC__ */
-#endif /* not sparc */
-#endif /* not GNU C */
-#endif /* alloca not defined */
-#endif /* YYSTACK_USE_ALLOCA not defined */
+#endif /* not sparc.  */
+#endif /* not GNU C.  */
+#endif /* alloca not defined.  */
 
-#ifdef YYSTACK_USE_ALLOCA
-#define YYSTACK_ALLOC alloca
-#else
-#define YYSTACK_ALLOC malloc
-#endif
+/* This is the parser code that is written into each bison parser
+  when the %semantic_parser declaration is not specified in the grammar.
+  It was written by Richard Stallman by simplifying the hairy parser
+  used when %semantic_parser is specified.  */
 
 /* Note: there must be only one dollar sign in this file.
    It is replaced by the list of actions, each action
@@ -1601,8 +1657,8 @@ static const short yycheck[] = {     7,
 #define yyclearin	(yychar = YYEMPTY)
 #define YYEMPTY		-2
 #define YYEOF		0
-#define YYACCEPT	goto yyacceptlab
-#define YYABORT 	goto yyabortlab
+#define YYACCEPT	return(0)
+#define YYABORT 	return(1)
 #define YYERROR		goto yyerrlab1
 /* Like YYERROR except do call yyerror.
    This remains here temporarily to ease the
@@ -1683,12 +1739,12 @@ int yydebug;			/*  nonzero means print parse trace	*/
 #ifndef YYMAXDEPTH
 #define YYMAXDEPTH 10000
 #endif
-
-/* Define __yy_memcpy.  Note that the size argument
-   should be passed with type unsigned int, because that is what the non-GCC
-   definitions require.  With GCC, __builtin_memcpy takes an arg
-   of type size_t, but it can handle unsigned int.  */
 
+/* Prevent warning if -Wstrict-prototypes.  */
+#ifdef __GNUC__
+int yyparse (void);
+#endif
+
 #if __GNUC__ > 1		/* GNU C and GNU C++ define this.  */
 #define __yy_memcpy(TO,FROM,COUNT)	__builtin_memcpy(TO,FROM,COUNT)
 #else				/* not GNU C or C++ */
@@ -1700,7 +1756,7 @@ static void
 __yy_memcpy (to, from, count)
      char *to;
      char *from;
-     unsigned int count;
+     int count;
 {
   register char *f = from;
   register char *t = to;
@@ -1715,10 +1771,10 @@ __yy_memcpy (to, from, count)
 /* This is the most reliable way to avoid incompatibilities
    in available built-in functions on various systems.  */
 static void
-__yy_memcpy (char *to, char *from, unsigned int count)
+__yy_memcpy (char *to, char *from, int count)
 {
-  register char *t = to;
   register char *f = from;
+  register char *t = to;
   register int i = count;
 
   while (i-- > 0)
@@ -1728,7 +1784,7 @@ __yy_memcpy (char *to, char *from, unsigned int count)
 #endif
 #endif
 
-#line 217 "/usr/lib/bison.simple"
+#line 196 "/usr/local/share/bison.simple"
 
 /* The user can define YYPARSE_PARAM as the name of an argument to be passed
    into yyparse.  The argument should have type void *.
@@ -1749,15 +1805,6 @@ __yy_memcpy (char *to, char *from, unsigned int count)
 #define YYPARSE_PARAM_DECL
 #endif /* not YYPARSE_PARAM */
 
-/* Prevent warning if -Wstrict-prototypes.  */
-#ifdef __GNUC__
-#ifdef YYPARSE_PARAM
-int yyparse (void *);
-#else
-int yyparse (void);
-#endif
-#endif
-
 int
 yyparse(YYPARSE_PARAM_ARG)
      YYPARSE_PARAM_DECL
@@ -1786,7 +1833,6 @@ yyparse(YYPARSE_PARAM_ARG)
 #endif
 
   int yystacksize = YYINITDEPTH;
-  int yyfree_stacks = 0;
 
 #ifdef YYPURE
   int yychar;
@@ -1871,32 +1917,18 @@ yynewstate:
       if (yystacksize >= YYMAXDEPTH)
 	{
 	  yyerror("parser stack overflow");
-	  if (yyfree_stacks)
-	    {
-	      free (yyss);
-	      free (yyvs);
-#ifdef YYLSP_NEEDED
-	      free (yyls);
-#endif
-	    }
 	  return 2;
 	}
       yystacksize *= 2;
       if (yystacksize > YYMAXDEPTH)
 	yystacksize = YYMAXDEPTH;
-#ifndef YYSTACK_USE_ALLOCA
-      yyfree_stacks = 1;
-#endif
-      yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
-      __yy_memcpy ((char *)yyss, (char *)yyss1,
-		   size * (unsigned int) sizeof (*yyssp));
-      yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
-      __yy_memcpy ((char *)yyvs, (char *)yyvs1,
-		   size * (unsigned int) sizeof (*yyvsp));
+      yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
+      __yy_memcpy ((char *)yyss, (char *)yyss1, size * sizeof (*yyssp));
+      yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
+      __yy_memcpy ((char *)yyvs, (char *)yyvs1, size * sizeof (*yyvsp));
 #ifdef YYLSP_NEEDED
-      yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
-      __yy_memcpy ((char *)yyls, (char *)yyls1,
-		   size * (unsigned int) sizeof (*yylsp));
+      yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
+      __yy_memcpy ((char *)yyls, (char *)yyls1, size * sizeof (*yylsp));
 #endif
 #endif /* no yyoverflow */
 
@@ -2057,7 +2089,7 @@ yyreduce:
   switch (yyn) {
 
 case 4:
-#line 126 "Gmsh.y"
+#line 122 "Gmsh.y"
 {
       Msg(PARSER_INFO,"STL File Format");
       STL_Surf = Create_Surface(1,MSH_SURF_STL,1);
@@ -2066,7 +2098,7 @@ case 4:
     ;
     break;}
 case 5:
-#line 140 "Gmsh.y"
+#line 136 "Gmsh.y"
 {
       STL_Surf->STL->Add_Facet( yyvsp[-12].d, yyvsp[-11].d, yyvsp[-10].d,
 				yyvsp[-8].d, yyvsp[-7].d, yyvsp[-6].d,
@@ -2075,7 +2107,7 @@ case 5:
     ;
     break;}
 case 6:
-#line 147 "Gmsh.y"
+#line 143 "Gmsh.y"
 {
       Msg(PARSER_INFO,"STL File Format Read");
       Tree_Add(THEM->Surfaces, &STL_Surf);
@@ -2083,83 +2115,83 @@ case 6:
     ;
     break;}
 case 9:
-#line 164 "Gmsh.y"
+#line 160 "Gmsh.y"
 { return 1; ;
     break;}
 case 10:
-#line 165 "Gmsh.y"
+#line 161 "Gmsh.y"
 { return 1; ;
     break;}
 case 11:
-#line 166 "Gmsh.y"
+#line 162 "Gmsh.y"
 { return 1; ;
     break;}
 case 12:
-#line 167 "Gmsh.y"
+#line 163 "Gmsh.y"
 { yyerrok ; return 1; ;
     break;}
 case 13:
-#line 172 "Gmsh.y"
+#line 168 "Gmsh.y"
 {
       Msg(PARSER_INFO,"Step Iso-10303-21 File Format");
       Create_Step_Solid_BRep();
     ;
     break;}
 case 14:
-#line 177 "Gmsh.y"
+#line 173 "Gmsh.y"
 {
       Msg(PARSER_INFO,"Step Iso-10303-21 File Format Read");
       Resolve_BREP ();
     ;
     break;}
 case 18:
-#line 188 "Gmsh.y"
+#line 184 "Gmsh.y"
 {
     ;
     break;}
 case 19:
-#line 191 "Gmsh.y"
+#line 187 "Gmsh.y"
 {
     ;
     break;}
 case 20:
-#line 195 "Gmsh.y"
+#line 191 "Gmsh.y"
 {
    ;
     break;}
 case 21:
-#line 201 "Gmsh.y"
+#line 197 "Gmsh.y"
 {
         Add_Cartesian_Point((int)yyvsp[-8].d,yyvsp[-4].c,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2]);
     ;
     break;}
 case 22:
-#line 207 "Gmsh.y"
+#line 203 "Gmsh.y"
 {
        Add_BSpline_Curve_With_Knots ((int)yyvsp[-22].d, yyvsp[-18].c, (int) yyvsp[-16].d, yyvsp[-14].l,	yyvsp[-6].l, yyvsp[-4].l, 0., 1.);
     ;
     break;}
 case 23:
-#line 214 "Gmsh.y"
+#line 210 "Gmsh.y"
 {
       Add_BSpline_Surface_With_Knots ((int)yyvsp[-30].d, yyvsp[-26].c, (int) yyvsp[-24].d, (int) yyvsp[-22].d, yyvsp[-20].l, yyvsp[-10].l,
 				      yyvsp[-8].l, yyvsp[-6].l, yyvsp[-4].l, 0., 1., 0., 1. );
     ;
     break;}
 case 24:
-#line 220 "Gmsh.y"
+#line 216 "Gmsh.y"
 {
       Add_Edge_Curve ((int)yyvsp[-14].d, yyvsp[-10].c , (int)yyvsp[-8].d , (int)yyvsp[-6].d, (int)yyvsp[-4].d);
     ;
     break;}
 case 25:
-#line 224 "Gmsh.y"
+#line 220 "Gmsh.y"
 {
       Add_Face_Outer_Bound((int)yyvsp[-10].d,yyvsp[-6].c,(int)yyvsp[-4].d,yyvsp[-2].i,1);
     ;
     break;}
 case 26:
-#line 228 "Gmsh.y"
+#line 224 "Gmsh.y"
 {
       /* La je dois voir la norme ! Face_Bound : trou externe a la surface ! */
       Msg(PARSER_INFO,"Found a Face Bound");
@@ -2167,285 +2199,285 @@ case 26:
     ;
     break;}
 case 27:
-#line 235 "Gmsh.y"
+#line 231 "Gmsh.y"
 {
       Add_Oriented_Edge((int)yyvsp[-14].d,yyvsp[-10].c,(int)yyvsp[-4].d,yyvsp[-2].i);
     ;
     break;}
 case 28:
-#line 239 "Gmsh.y"
+#line 235 "Gmsh.y"
 {
       Add_Edge_Loop((int)yyvsp[-8].d,yyvsp[-4].c,yyvsp[-2].l);
     ;
     break;}
 case 29:
-#line 244 "Gmsh.y"
+#line 240 "Gmsh.y"
 {
       Add_Advanced_Face((int)yyvsp[-12].d,yyvsp[-8].c,yyvsp[-6].l,(int)yyvsp[-4].d,yyvsp[-2].i);
     ;
     break;}
 case 30:
-#line 248 "Gmsh.y"
+#line 244 "Gmsh.y"
 {
       Add_Vertex_Point((int)yyvsp[-8].d,yyvsp[-4].c,(int)yyvsp[-2].d);
     ;
     break;}
 case 31:
-#line 252 "Gmsh.y"
+#line 248 "Gmsh.y"
 {
     ;
     break;}
 case 32:
-#line 256 "Gmsh.y"
+#line 252 "Gmsh.y"
 {
       Add_Axis2_Placement3D  ( (int)yyvsp[-12].d, (int)yyvsp[-4].d, (int)yyvsp[-2].d, (int)yyvsp[-6].d);
     ;
     break;}
 case 33:
-#line 260 "Gmsh.y"
+#line 256 "Gmsh.y"
 {
       Add_Direction((int)yyvsp[-8].d , yyvsp[-4].c, yyvsp[-2].v[0], yyvsp[-2].v[1], yyvsp[-2].v[2]);
     ;
     break;}
 case 34:
-#line 264 "Gmsh.y"
+#line 260 "Gmsh.y"
 {
       Add_Plane((int)yyvsp[-8].d,yyvsp[-4].c,(int)yyvsp[-2].d);
     ;
     break;}
 case 35:
-#line 268 "Gmsh.y"
+#line 264 "Gmsh.y"
 {
       Add_Line ((int)yyvsp[-10].d, yyvsp[-6].c , (int) yyvsp[-4].d, (int)yyvsp[-2].d);
     ;
     break;}
 case 36:
-#line 272 "Gmsh.y"
+#line 268 "Gmsh.y"
 {
       Msg(PARSER_INFO,"Found a Closed shell");
       Add_Closed_Shell((int)yyvsp[-8].d, yyvsp[-4].c , yyvsp[-2].l);
     ;
     break;}
 case 37:
-#line 278 "Gmsh.y"
+#line 274 "Gmsh.y"
 {
     ;
     break;}
 case 38:
-#line 281 "Gmsh.y"
+#line 277 "Gmsh.y"
 {
     ;
     break;}
 case 39:
-#line 284 "Gmsh.y"
+#line 280 "Gmsh.y"
 {
       Add_Cylinder ((int)yyvsp[-10].d, yyvsp[-6].c , (int)yyvsp[-4].d, yyvsp[-2].d);
     ;
     break;}
 case 40:
-#line 288 "Gmsh.y"
+#line 284 "Gmsh.y"
 {
       Add_Cone ((int)yyvsp[-12].d, yyvsp[-8].c , (int)yyvsp[-6].d, yyvsp[-4].d,yyvsp[-2].d);
     ;
     break;}
 case 41:
-#line 292 "Gmsh.y"
+#line 288 "Gmsh.y"
 {
       Add_Torus ((int)yyvsp[-12].d, yyvsp[-8].c , (int)yyvsp[-6].d, yyvsp[-4].d,yyvsp[-2].d);
     ;
     break;}
 case 42:
-#line 296 "Gmsh.y"
+#line 292 "Gmsh.y"
 {
       Add_Circle((int) yyvsp[-10].d, yyvsp[-6].c, (int) yyvsp[-4].d, yyvsp[-2].d);
     ;
     break;}
 case 43:
-#line 300 "Gmsh.y"
+#line 296 "Gmsh.y"
 {
       Add_Ellipsis((int) yyvsp[-12].d, yyvsp[-8].c, (int) yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d);
     ;
     break;}
 case 44:
-#line 305 "Gmsh.y"
+#line 301 "Gmsh.y"
 {
     ;
     break;}
 case 45:
-#line 308 "Gmsh.y"
+#line 304 "Gmsh.y"
 {
     ;
     break;}
 case 46:
-#line 312 "Gmsh.y"
+#line 308 "Gmsh.y"
 {
     ;
     break;}
 case 47:
-#line 315 "Gmsh.y"
+#line 311 "Gmsh.y"
 {
     ;
     break;}
 case 48:
-#line 319 "Gmsh.y"
+#line 315 "Gmsh.y"
 {
     ;
     break;}
 case 49:
-#line 322 "Gmsh.y"
+#line 318 "Gmsh.y"
 {
     ;
     break;}
 case 50:
-#line 325 "Gmsh.y"
+#line 321 "Gmsh.y"
 {
     ;
     break;}
 case 52:
-#line 336 "Gmsh.y"
+#line 332 "Gmsh.y"
 {
       Msg(PARSER_INFO,"Gmsh File Format Read");
     ;
     break;}
 case 53:
-#line 342 "Gmsh.y"
+#line 338 "Gmsh.y"
 { return 1; ;
     break;}
 case 54:
-#line 343 "Gmsh.y"
+#line 339 "Gmsh.y"
 { return 1; ;
     break;}
 case 55:
-#line 344 "Gmsh.y"
+#line 340 "Gmsh.y"
 { return 1; ;
     break;}
 case 56:
-#line 345 "Gmsh.y"
+#line 341 "Gmsh.y"
 { return 1; ;
     break;}
 case 57:
-#line 346 "Gmsh.y"
+#line 342 "Gmsh.y"
 { return 1; ;
     break;}
 case 58:
-#line 347 "Gmsh.y"
+#line 343 "Gmsh.y"
 { return 1; ;
     break;}
 case 59:
-#line 348 "Gmsh.y"
+#line 344 "Gmsh.y"
 { return 1; ;
     break;}
 case 60:
-#line 349 "Gmsh.y"
+#line 345 "Gmsh.y"
 { return 1; ;
     break;}
 case 61:
-#line 350 "Gmsh.y"
+#line 346 "Gmsh.y"
 { return 1; ;
     break;}
 case 62:
-#line 351 "Gmsh.y"
+#line 347 "Gmsh.y"
 { return 1; ;
     break;}
 case 63:
-#line 352 "Gmsh.y"
+#line 348 "Gmsh.y"
 { return 1; ;
     break;}
 case 64:
-#line 353 "Gmsh.y"
+#line 349 "Gmsh.y"
 { yyerrok; return 1;;
     break;}
 case 65:
-#line 362 "Gmsh.y"
+#line 358 "Gmsh.y"
 { 
       EndView(1, Force_ViewNumber,yyname,yyvsp[-4].c,0.,0.,0.); 
     ;
     break;}
 case 66:
-#line 366 "Gmsh.y"
+#line 362 "Gmsh.y"
 {
       EndView(1, Force_ViewNumber,yyname,yyvsp[-6].c,yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2]);
     ;
     break;}
 case 67:
-#line 373 "Gmsh.y"
+#line 369 "Gmsh.y"
 {
       BeginView(1); 
     ;
     break;}
 case 80:
-#line 392 "Gmsh.y"
+#line 388 "Gmsh.y"
 { List_Add(ActualView->SP, &yyvsp[0].d) ; ;
     break;}
 case 81:
-#line 394 "Gmsh.y"
+#line 390 "Gmsh.y"
 { List_Add(ActualView->SP, &yyvsp[0].d) ; ;
     break;}
 case 82:
-#line 399 "Gmsh.y"
+#line 395 "Gmsh.y"
 { 
       List_Add(ActualView->SP, &yyvsp[-5].d); List_Add(ActualView->SP, &yyvsp[-3].d);
       List_Add(ActualView->SP, &yyvsp[-1].d);
     ;
     break;}
 case 83:
-#line 404 "Gmsh.y"
+#line 400 "Gmsh.y"
 {
       ActualView->NbSP++ ;
     ;
     break;}
 case 84:
-#line 411 "Gmsh.y"
+#line 407 "Gmsh.y"
 { List_Add(ActualView->VP, &yyvsp[0].d) ; ;
     break;}
 case 85:
-#line 413 "Gmsh.y"
+#line 409 "Gmsh.y"
 { List_Add(ActualView->VP, &yyvsp[0].d) ; ;
     break;}
 case 86:
-#line 418 "Gmsh.y"
+#line 414 "Gmsh.y"
 { 
       List_Add(ActualView->VP, &yyvsp[-5].d); List_Add(ActualView->VP, &yyvsp[-3].d);
       List_Add(ActualView->VP, &yyvsp[-1].d); 
     ;
     break;}
 case 87:
-#line 423 "Gmsh.y"
+#line 419 "Gmsh.y"
 {
       ActualView->NbVP++ ;
     ;
     break;}
 case 88:
-#line 430 "Gmsh.y"
+#line 426 "Gmsh.y"
 { List_Add(ActualView->TP, &yyvsp[0].d) ; ;
     break;}
 case 89:
-#line 432 "Gmsh.y"
+#line 428 "Gmsh.y"
 { List_Add(ActualView->TP, &yyvsp[0].d) ; ;
     break;}
 case 90:
-#line 437 "Gmsh.y"
+#line 433 "Gmsh.y"
 { 
       List_Add(ActualView->TP, &yyvsp[-5].d); List_Add(ActualView->TP, &yyvsp[-3].d);
       List_Add(ActualView->TP, &yyvsp[-1].d);
     ;
     break;}
 case 91:
-#line 442 "Gmsh.y"
+#line 438 "Gmsh.y"
 {
       ActualView->NbTP++ ;
     ;
     break;}
 case 92:
-#line 449 "Gmsh.y"
+#line 445 "Gmsh.y"
 { List_Add(ActualView->SL, &yyvsp[0].d) ; ;
     break;}
 case 93:
-#line 451 "Gmsh.y"
+#line 447 "Gmsh.y"
 { List_Add(ActualView->SL, &yyvsp[0].d) ; ;
     break;}
 case 94:
-#line 457 "Gmsh.y"
+#line 453 "Gmsh.y"
 { 
       List_Add(ActualView->SL, &yyvsp[-11].d); List_Add(ActualView->SL, &yyvsp[-5].d);
       List_Add(ActualView->SL, &yyvsp[-9].d); List_Add(ActualView->SL, &yyvsp[-3].d);
@@ -2453,21 +2485,21 @@ case 94:
     ;
     break;}
 case 95:
-#line 463 "Gmsh.y"
+#line 459 "Gmsh.y"
 {
       ActualView->NbSL++ ;
     ;
     break;}
 case 96:
-#line 470 "Gmsh.y"
+#line 466 "Gmsh.y"
 { List_Add(ActualView->VL, &yyvsp[0].d) ; ;
     break;}
 case 97:
-#line 472 "Gmsh.y"
+#line 468 "Gmsh.y"
 { List_Add(ActualView->VL, &yyvsp[0].d) ; ;
     break;}
 case 98:
-#line 478 "Gmsh.y"
+#line 474 "Gmsh.y"
 { 
       List_Add(ActualView->SL, &yyvsp[-11].d); List_Add(ActualView->SL, &yyvsp[-5].d);
       List_Add(ActualView->SL, &yyvsp[-9].d); List_Add(ActualView->SL, &yyvsp[-3].d);
@@ -2475,21 +2507,21 @@ case 98:
     ;
     break;}
 case 99:
-#line 484 "Gmsh.y"
+#line 480 "Gmsh.y"
 {
       ActualView->NbVL++ ;
     ;
     break;}
 case 100:
-#line 491 "Gmsh.y"
+#line 487 "Gmsh.y"
 { List_Add(ActualView->TL, &yyvsp[0].d) ; ;
     break;}
 case 101:
-#line 493 "Gmsh.y"
+#line 489 "Gmsh.y"
 { List_Add(ActualView->TL, &yyvsp[0].d) ; ;
     break;}
 case 102:
-#line 499 "Gmsh.y"
+#line 495 "Gmsh.y"
 { 
       List_Add(ActualView->SL, &yyvsp[-11].d); List_Add(ActualView->SL, &yyvsp[-5].d);
       List_Add(ActualView->SL, &yyvsp[-9].d); List_Add(ActualView->SL, &yyvsp[-3].d);
@@ -2497,21 +2529,21 @@ case 102:
     ;
     break;}
 case 103:
-#line 505 "Gmsh.y"
+#line 501 "Gmsh.y"
 {
       ActualView->NbTL++ ;
     ;
     break;}
 case 104:
-#line 512 "Gmsh.y"
+#line 508 "Gmsh.y"
 { List_Add(ActualView->ST, &yyvsp[0].d) ; ;
     break;}
 case 105:
-#line 514 "Gmsh.y"
+#line 510 "Gmsh.y"
 { List_Add(ActualView->ST, &yyvsp[0].d) ; ;
     break;}
 case 106:
-#line 521 "Gmsh.y"
+#line 517 "Gmsh.y"
 { 
       List_Add(ActualView->ST, &yyvsp[-17].d); List_Add(ActualView->ST, &yyvsp[-11].d);
       List_Add(ActualView->ST, &yyvsp[-5].d);
@@ -2522,21 +2554,21 @@ case 106:
     ;
     break;}
 case 107:
-#line 530 "Gmsh.y"
+#line 526 "Gmsh.y"
 {
       ActualView->NbST++ ;
     ;
     break;}
 case 108:
-#line 537 "Gmsh.y"
+#line 533 "Gmsh.y"
 { List_Add(ActualView->VT, &yyvsp[0].d) ; ;
     break;}
 case 109:
-#line 539 "Gmsh.y"
+#line 535 "Gmsh.y"
 { List_Add(ActualView->VT, &yyvsp[0].d) ; ;
     break;}
 case 110:
-#line 546 "Gmsh.y"
+#line 542 "Gmsh.y"
 { 
       List_Add(ActualView->VT, &yyvsp[-17].d); List_Add(ActualView->VT, &yyvsp[-11].d);
       List_Add(ActualView->VT, &yyvsp[-5].d);
@@ -2547,21 +2579,21 @@ case 110:
     ;
     break;}
 case 111:
-#line 555 "Gmsh.y"
+#line 551 "Gmsh.y"
 {
       ActualView->NbVT++ ;
     ;
     break;}
 case 112:
-#line 562 "Gmsh.y"
+#line 558 "Gmsh.y"
 { List_Add(ActualView->TT, &yyvsp[0].d) ; ;
     break;}
 case 113:
-#line 564 "Gmsh.y"
+#line 560 "Gmsh.y"
 { List_Add(ActualView->TT, &yyvsp[0].d) ; ;
     break;}
 case 114:
-#line 571 "Gmsh.y"
+#line 567 "Gmsh.y"
 { 
       List_Add(ActualView->TT, &yyvsp[-17].d); List_Add(ActualView->TT, &yyvsp[-11].d);
       List_Add(ActualView->TT, &yyvsp[-5].d);
@@ -2572,21 +2604,21 @@ case 114:
     ;
     break;}
 case 115:
-#line 580 "Gmsh.y"
+#line 576 "Gmsh.y"
 {
       ActualView->NbTT++ ;
     ;
     break;}
 case 116:
-#line 587 "Gmsh.y"
+#line 583 "Gmsh.y"
 { List_Add(ActualView->SS, &yyvsp[0].d) ; ;
     break;}
 case 117:
-#line 589 "Gmsh.y"
+#line 585 "Gmsh.y"
 { List_Add(ActualView->SS, &yyvsp[0].d) ; ;
     break;}
 case 118:
-#line 597 "Gmsh.y"
+#line 593 "Gmsh.y"
 { 
       List_Add(ActualView->SS, &yyvsp[-23].d);  List_Add(ActualView->SS, &yyvsp[-17].d);
       List_Add(ActualView->SS, &yyvsp[-11].d); List_Add(ActualView->SS, &yyvsp[-5].d);
@@ -2597,21 +2629,21 @@ case 118:
     ;
     break;}
 case 119:
-#line 606 "Gmsh.y"
+#line 602 "Gmsh.y"
 {
       ActualView->NbSS++ ;
     ;
     break;}
 case 120:
-#line 613 "Gmsh.y"
+#line 609 "Gmsh.y"
 { List_Add(ActualView->VS, &yyvsp[0].d) ; ;
     break;}
 case 121:
-#line 615 "Gmsh.y"
+#line 611 "Gmsh.y"
 { List_Add(ActualView->VS, &yyvsp[0].d) ; ;
     break;}
 case 122:
-#line 623 "Gmsh.y"
+#line 619 "Gmsh.y"
 { 
       List_Add(ActualView->VS, &yyvsp[-23].d);  List_Add(ActualView->VS, &yyvsp[-17].d);
       List_Add(ActualView->VS, &yyvsp[-11].d); List_Add(ActualView->VS, &yyvsp[-5].d);
@@ -2622,21 +2654,21 @@ case 122:
     ;
     break;}
 case 123:
-#line 632 "Gmsh.y"
+#line 628 "Gmsh.y"
 {
       ActualView->NbVS++ ;
     ;
     break;}
 case 124:
-#line 639 "Gmsh.y"
+#line 635 "Gmsh.y"
 { List_Add(ActualView->TS, &yyvsp[0].d) ; ;
     break;}
 case 125:
-#line 641 "Gmsh.y"
+#line 637 "Gmsh.y"
 { List_Add(ActualView->TS, &yyvsp[0].d) ; ;
     break;}
 case 126:
-#line 649 "Gmsh.y"
+#line 645 "Gmsh.y"
 { 
       List_Add(ActualView->TS, &yyvsp[-23].d);  List_Add(ActualView->TS, &yyvsp[-17].d);
       List_Add(ActualView->TS, &yyvsp[-11].d); List_Add(ActualView->TS, &yyvsp[-5].d);
@@ -2647,13 +2679,13 @@ case 126:
     ;
     break;}
 case 127:
-#line 658 "Gmsh.y"
+#line 654 "Gmsh.y"
 {
       ActualView->NbTS++ ;
     ;
     break;}
 case 128:
-#line 671 "Gmsh.y"
+#line 667 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-3].c;
       TheSymbol.val  = yyvsp[-1].d;
@@ -2661,7 +2693,7 @@ case 128:
     ;
     break;}
 case 129:
-#line 688 "Gmsh.y"
+#line 684 "Gmsh.y"
 {
       Cdbpts101((int)yyvsp[-4].d,yyvsp[-1].v[0],yyvsp[-1].v[1],yyvsp[-1].v[2],yyvsp[-1].v[3],yyvsp[-1].v[4]);
       yyval.s.Type = MSH_POINT;
@@ -2669,7 +2701,7 @@ case 129:
     ;
     break;}
 case 130:
-#line 695 "Gmsh.y"
+#line 691 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_PHYSICAL_POINT,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_PHYSICAL_POINT;
@@ -2677,7 +2709,7 @@ case 130:
     ;
     break;}
 case 131:
-#line 701 "Gmsh.y"
+#line 697 "Gmsh.y"
 {
       Vertex *v;
       Attractor *a;
@@ -2698,7 +2730,7 @@ case 131:
     ;
     break;}
 case 132:
-#line 720 "Gmsh.y"
+#line 716 "Gmsh.y"
 {
       for(i=0;i<List_Nbr(yyvsp[-3].l);i++){
 	List_Read(yyvsp[-3].l,i,&d);
@@ -2711,14 +2743,14 @@ case 132:
     ;
     break;}
 case 133:
-#line 731 "Gmsh.y"
+#line 727 "Gmsh.y"
 {
       yyval.s.Type = MSH_POINT;
       yyval.s.Num  = (int)yyvsp[-2].d;
     ;
     break;}
 case 134:
-#line 739 "Gmsh.y"
+#line 735 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_LINE,1,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
       yyval.s.Type = MSH_SEGM_LINE;
@@ -2726,7 +2758,7 @@ case 134:
     ;
     break;}
 case 135:
-#line 745 "Gmsh.y"
+#line 741 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_SPLN,3,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
       yyval.s.Type = MSH_SEGM_SPLN;
@@ -2734,7 +2766,7 @@ case 135:
     ;
     break;}
 case 136:
-#line 751 "Gmsh.y"
+#line 747 "Gmsh.y"
 {
       Curve *c;
       Attractor *a;
@@ -2755,7 +2787,7 @@ case 136:
     ;
     break;}
 case 137:
-#line 770 "Gmsh.y"
+#line 766 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_CIRC,2,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
       yyval.s.Type = MSH_SEGM_CIRC ;
@@ -2763,7 +2795,7 @@ case 137:
     ;
     break;}
 case 138:
-#line 776 "Gmsh.y"
+#line 772 "Gmsh.y"
 {
       List_T *temp;
       int i,j;
@@ -2781,7 +2813,7 @@ case 138:
     ;
     break;}
 case 139:
-#line 793 "Gmsh.y"
+#line 789 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-14].d,MSH_SEGM_PARAMETRIC,2,NULL,NULL,-1,-1,yyvsp[-10].d,yyvsp[-8].d,yyvsp[-6].c,yyvsp[-4].c,yyvsp[-2].c);
       yyval.s.Type = MSH_SEGM_PARAMETRIC ;
@@ -2789,7 +2821,7 @@ case 139:
     ;
     break;}
 case 140:
-#line 799 "Gmsh.y"
+#line 795 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_ELLI,2,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
       yyval.s.Type = MSH_SEGM_ELLI ;
@@ -2797,7 +2829,7 @@ case 140:
     ;
     break;}
 case 141:
-#line 805 "Gmsh.y"
+#line 801 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_PHYSICAL_LINE,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_PHYSICAL_LINE;
@@ -2805,7 +2837,7 @@ case 141:
     ;
     break;}
 case 142:
-#line 811 "Gmsh.y"
+#line 807 "Gmsh.y"
 {
       yyval.s.Type = MSH_SEGM_LOOP;
       Cdbz101((int)yyvsp[-4].d,yyval.s.Type,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
@@ -2813,7 +2845,7 @@ case 142:
     ;
     break;}
 case 143:
-#line 817 "Gmsh.y"
+#line 813 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_BSPLN,2,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
       yyval.s.Type = MSH_SEGM_BSPLN;
@@ -2821,7 +2853,7 @@ case 143:
     ;
     break;}
 case 144:
-#line 823 "Gmsh.y"
+#line 819 "Gmsh.y"
 {
       List_T *Temp;
       int i;
@@ -2842,7 +2874,7 @@ case 144:
     ;
     break;}
 case 145:
-#line 842 "Gmsh.y"
+#line 838 "Gmsh.y"
 {
       yyval.s.Num = (int)yyvsp[-2].d;
       Curve *c = FindCurve(yyval.s.Num,THEM);
@@ -2853,7 +2885,7 @@ case 145:
     ;
     break;}
 case 146:
-#line 854 "Gmsh.y"
+#line 850 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_SURF_PLAN,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_SURF_PLAN;
@@ -2861,7 +2893,7 @@ case 146:
     ;
     break;}
 case 147:
-#line 860 "Gmsh.y"
+#line 856 "Gmsh.y"
 {
       Surface *s,*support;
       support = FindSurface((int)yyvsp[-2].d,THEM);
@@ -2882,7 +2914,7 @@ case 147:
     ;
     break;}
 case 148:
-#line 879 "Gmsh.y"
+#line 875 "Gmsh.y"
 {
       List_Read(yyvsp[-1].l,0,&d);
       i = (int)d;
@@ -2905,7 +2937,7 @@ case 148:
     ;
     break;}
 case 149:
-#line 902 "Gmsh.y"
+#line 898 "Gmsh.y"
 {
       CreateNurbsSurface ( (int) yyvsp[-16].d , (int)yyvsp[-4].d , (int)yyvsp[-2].d  , yyvsp[-13].l, yyvsp[-10].l, yyvsp[-8].l);
       yyval.s.Type  = MSH_SURF_NURBS;
@@ -2913,13 +2945,13 @@ case 149:
     ;
     break;}
 case 150:
-#line 910 "Gmsh.y"
+#line 906 "Gmsh.y"
 {
       CreateNurbsSurfaceSupport ((int)yyvsp[-16].d, (int) yyvsp[-4].d , (int) yyvsp[-2].d , yyvsp[-13].l, yyvsp[-10].l, yyvsp[-8].l);
     ;
     break;}
 case 151:
-#line 914 "Gmsh.y"
+#line 910 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_PHYSICAL_SURFACE,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_PHYSICAL_SURFACE;
@@ -2927,7 +2959,7 @@ case 151:
     ;
     break;}
 case 152:
-#line 920 "Gmsh.y"
+#line 916 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_SURF_LOOP,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_SURF_LOOP;
@@ -2935,7 +2967,7 @@ case 152:
     ;
     break;}
 case 153:
-#line 926 "Gmsh.y"
+#line 922 "Gmsh.y"
 {
       yyval.s.Num = (int)yyvsp[-2].d;
       Surface *s = FindSurface(yyval.s.Num,THEM);
@@ -2946,7 +2978,7 @@ case 153:
      ;
     break;}
 case 154:
-#line 938 "Gmsh.y"
+#line 934 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_VOLUME,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_VOLUME;
@@ -2954,7 +2986,7 @@ case 154:
     ;
     break;}
 case 155:
-#line 944 "Gmsh.y"
+#line 940 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_VOLUME,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_VOLUME;
@@ -2962,7 +2994,7 @@ case 155:
     ;
     break;}
 case 156:
-#line 950 "Gmsh.y"
+#line 946 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_PHYSICAL_VOLUME,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_PHYSICAL_VOLUME;
@@ -2970,60 +3002,60 @@ case 156:
     ;
     break;}
 case 157:
-#line 963 "Gmsh.y"
+#line 959 "Gmsh.y"
 {
       TranslateShapes (yyvsp[-3].v[0],yyvsp[-3].v[1],yyvsp[-3].v[2],yyvsp[-1].l,1);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 158:
-#line 968 "Gmsh.y"
+#line 964 "Gmsh.y"
 {
       RotateShapes(yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].d,yyvsp[-1].l);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 159:
-#line 973 "Gmsh.y"
+#line 969 "Gmsh.y"
 {
       SymmetryShapes(yyvsp[-3].v[0],yyvsp[-3].v[1],yyvsp[-3].v[2],yyvsp[-3].v[3],yyvsp[-1].l,1);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 160:
-#line 978 "Gmsh.y"
+#line 974 "Gmsh.y"
 {
       DilatShapes(yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].d,yyvsp[-1].l,1);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 161:
-#line 985 "Gmsh.y"
+#line 981 "Gmsh.y"
 { yyval.l = yyvsp[0].l; ;
     break;}
 case 162:
-#line 986 "Gmsh.y"
+#line 982 "Gmsh.y"
 { yyval.l = yyvsp[0].l; ;
     break;}
 case 163:
-#line 987 "Gmsh.y"
+#line 983 "Gmsh.y"
 { yyval.l = yyvsp[0].l; ;
     break;}
 case 164:
-#line 992 "Gmsh.y"
+#line 988 "Gmsh.y"
 {
       yyval.l = List_Create(3,3,sizeof(Shape));
     ;
     break;}
 case 165:
-#line 996 "Gmsh.y"
+#line 992 "Gmsh.y"
 {
       List_Add(yyval.l,&yyvsp[0].s);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 166:
-#line 1008 "Gmsh.y"
+#line 1004 "Gmsh.y"
 {
       yyval.l = List_Create(3,3,sizeof(Shape));
       for(i=0;i<List_Nbr(yyvsp[-1].l);i++){
@@ -3035,7 +3067,7 @@ case 166:
     ;
     break;}
 case 167:
-#line 1026 "Gmsh.y"
+#line 1022 "Gmsh.y"
 {
       for(i=0;i<List_Nbr(yyvsp[-1].l);i++){
 	List_Read (yyvsp[-1].l,i,&TheShape);
@@ -3044,7 +3076,7 @@ case 167:
     ;
     break;}
 case 168:
-#line 1041 "Gmsh.y"
+#line 1037 "Gmsh.y"
 {
       yyinTab[RecursionLevel++] = yyin;
       strcpy(tmpstring, ThePathForIncludes);
@@ -3068,14 +3100,14 @@ case 168:
     ;
     break;}
 case 169:
-#line 1072 "Gmsh.y"
+#line 1068 "Gmsh.y"
 {
       Curve *pc, *prc;
       Extrude_ProtudePoint(1,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],0.,0.,0.,0.,&pc,&prc,NULL);
     ;
     break;}
 case 170:
-#line 1077 "Gmsh.y"
+#line 1073 "Gmsh.y"
 {
       Curve *pc, *prc;
       Extrude_ProtudePoint(0,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,
@@ -3083,55 +3115,55 @@ case 170:
     ;
     break;}
 case 171:
-#line 1083 "Gmsh.y"
+#line 1079 "Gmsh.y"
 {
       Extrude_ProtudeCurve(1,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],0.,0.,0.,0.,NULL);
     ;
     break;}
 case 172:
-#line 1087 "Gmsh.y"
+#line 1083 "Gmsh.y"
 {
       Extrude_ProtudeCurve(0,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,NULL);
     ;
     break;}
 case 173:
-#line 1091 "Gmsh.y"
+#line 1087 "Gmsh.y"
 {
       Extrude_ProtudeSurface(1,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],0.,0.,0.,0.,0,NULL);
     ;
     break;}
 case 174:
-#line 1095 "Gmsh.y"
+#line 1091 "Gmsh.y"
 {
       Extrude_ProtudeSurface(0,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,0,NULL);
     ;
     break;}
 case 175:
-#line 1099 "Gmsh.y"
+#line 1095 "Gmsh.y"
 {
     int vol = NEWREG();
     Extrude_ProtudeSurface(1,(int)yyvsp[-7].d,yyvsp[-5].v[0],yyvsp[-5].v[1],yyvsp[-5].v[2],0.,0.,0.,0.,vol,&extr);
   ;
     break;}
 case 176:
-#line 1104 "Gmsh.y"
+#line 1100 "Gmsh.y"
 {
     int vol = NEWREG();
     Extrude_ProtudeSurface(0,(int)yyvsp[-11].d,yyvsp[-9].v[0],yyvsp[-9].v[1],yyvsp[-9].v[2],yyvsp[-7].v[0],yyvsp[-7].v[1],yyvsp[-7].v[2],yyvsp[-5].d,vol,&extr);
   ;
     break;}
 case 177:
-#line 1112 "Gmsh.y"
+#line 1108 "Gmsh.y"
 {
     ;
     break;}
 case 178:
-#line 1115 "Gmsh.y"
+#line 1111 "Gmsh.y"
 {
     ;
     break;}
 case 179:
-#line 1121 "Gmsh.y"
+#line 1117 "Gmsh.y"
 {
       double d;
       int j;
@@ -3150,13 +3182,13 @@ case 179:
     ;
     break;}
 case 180:
-#line 1138 "Gmsh.y"
+#line 1134 "Gmsh.y"
 {
       extr.mesh.Recombine = true;
     ;
     break;}
 case 181:
-#line 1149 "Gmsh.y"
+#line 1145 "Gmsh.y"
 {
       Curve *c;
       for(i=0;i<List_Nbr(yyvsp[-3].l);i++){
@@ -3175,7 +3207,7 @@ case 181:
     ;
     break;}
 case 182:
-#line 1166 "Gmsh.y"
+#line 1162 "Gmsh.y"
 {
       Curve *c;
       for(i=0;i<List_Nbr(yyvsp[-6].l);i++){
@@ -3194,7 +3226,7 @@ case 182:
     ;
     break;}
 case 183:
-#line 1183 "Gmsh.y"
+#line 1179 "Gmsh.y"
 {
       Curve *c;
       for(i=0;i<List_Nbr(yyvsp[-6].l);i++){
@@ -3213,7 +3245,7 @@ case 183:
     ;
     break;}
 case 184:
-#line 1200 "Gmsh.y"
+#line 1196 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-4].d,THEM);
       if(!s)
@@ -3236,7 +3268,7 @@ case 184:
     ;
     break;}
 case 185:
-#line 1221 "Gmsh.y"
+#line 1217 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-4].d,THEM);
       if(!s)
@@ -3258,7 +3290,7 @@ case 185:
     ;
     break;}
 case 186:
-#line 1241 "Gmsh.y"
+#line 1237 "Gmsh.y"
 {
       Volume *v = FindVolume((int)yyvsp[-4].d,THEM);
       if(!v)
@@ -3280,7 +3312,7 @@ case 186:
     ;
     break;}
 case 187:
-#line 1261 "Gmsh.y"
+#line 1257 "Gmsh.y"
 {
       Surface *s;
       for(i=0;i<List_Nbr(yyvsp[-3].l);i++){
@@ -3299,7 +3331,7 @@ case 187:
     ;
     break;}
 case 188:
-#line 1278 "Gmsh.y"
+#line 1274 "Gmsh.y"
 {
       Surface *s;
       for(i=0;i<List_Nbr(yyvsp[-1].l);i++){
@@ -3318,74 +3350,163 @@ case 188:
     ;
     break;}
 case 189:
-#line 1303 "Gmsh.y"
+#line 1299 "Gmsh.y"
 { 
       Coherence_PS();
     ;
     break;}
-case 191:
-#line 1315 "Gmsh.y"
-{
-      i = (int)yyvsp[-12].d ;
-      if(i < 0 || i > 5)
-	vyyerror("Wrong Clip Plane Number %d", i);
-      else{
-	CTX.clip[i] = 1;
-	CTX.clip_plane[i][0] = yyvsp[-8].d;
-	CTX.clip_plane[i][1] = yyvsp[-6].d;
-	CTX.clip_plane[i][2] = yyvsp[-4].d;
-	CTX.clip_plane[i][3] = yyvsp[-2].d;
-      }
+case 199:
+#line 1328 "Gmsh.y"
+{ 
+      if(!Set_StringOption(yyvsp[-3].c, GeneralOptions_String, yyvsp[-1].c))
+	vyyerror("Unknown General Option (String) '%s'", yyvsp[-3].c);
     ;
     break;}
-case 194:
-#line 1336 "Gmsh.y"
-{ ColorField = ColorGeneral; ;
+case 200:
+#line 1333 "Gmsh.y"
+{ 
+      if(!Set_NumberOption(yyvsp[-3].c, GeneralOptions_Number, yyvsp[-1].d))
+	vyyerror("Unknown General Option (Number) '%s'", yyvsp[-3].c);
+    ;
     break;}
-case 196:
-#line 1339 "Gmsh.y"
-{ ColorField = ColorGeometry; ;
+case 201:
+#line 1338 "Gmsh.y"
+{ if(!Set_ArrayOption(yyvsp[-3].c, GeneralOptions_Array, yyvsp[-1].v)) 
+	vyyerror("Unknown General Option (Array) '%s'", yyvsp[-3].c);
+    ;
     break;}
-case 198:
+case 202:
 #line 1342 "Gmsh.y"
-{ ColorField = ColorMesh; ;
+{ ColorField = GeneralOptions_Color; ;
     break;}
-case 202:
+case 206:
 #line 1353 "Gmsh.y"
+{ 
+      if(!Set_StringOption(yyvsp[-3].c, GeometryOptions_String, yyvsp[-1].c))
+	vyyerror("Unknown Geometry Option (String) '%s'", yyvsp[-3].c);
+    ;
+    break;}
+case 207:
+#line 1358 "Gmsh.y"
+{ 
+      if(!Set_NumberOption(yyvsp[-3].c, GeometryOptions_Number, yyvsp[-1].d))
+	vyyerror("Unknown Geometry Option (Number) '%s'", yyvsp[-3].c);
+    ;
+    break;}
+case 208:
+#line 1363 "Gmsh.y"
+{
+      if(!Set_ArrayOption(yyvsp[-3].c, GeometryOptions_Array, yyvsp[-1].v))
+	vyyerror("Unknown Geometry Option (Array) '%s'", yyvsp[-3].c);
+    ;
+    break;}
+case 209:
+#line 1368 "Gmsh.y"
+{ ColorField = GeometryOptions_Color; ;
+    break;}
+case 213:
+#line 1379 "Gmsh.y"
+{ 
+      if(!Set_StringOption(yyvsp[-3].c, MeshOptions_String, yyvsp[-1].c))
+	vyyerror("Unknown Mesh Option (String) '%s'", yyvsp[-3].c);
+    ;
+    break;}
+case 214:
+#line 1384 "Gmsh.y"
+{
+      if(!Set_NumberOption(yyvsp[-3].c, MeshOptions_Number, yyvsp[-1].d))
+	vyyerror("Unknown Mesh Option (Number) '%s'", yyvsp[-3].c);
+    ;
+    break;}
+case 215:
+#line 1389 "Gmsh.y"
+{
+      if(!Set_ArrayOption(yyvsp[-3].c, MeshOptions_Array, yyvsp[-1].v))
+	vyyerror("Unknown Mesh Option (Array) '%s'", yyvsp[-3].c);
+    ;
+    break;}
+case 216:
+#line 1394 "Gmsh.y"
+{ ColorField = MeshOptions_Color; ;
+    break;}
+case 220:
+#line 1405 "Gmsh.y"
+{ 
+      if(!Set_StringOption(yyvsp[-3].c, PostProcessingOptions_String, yyvsp[-1].c))
+	vyyerror("Unknown PostProcessing Option (String) '%s'", yyvsp[-3].c);
+    ;
+    break;}
+case 221:
+#line 1410 "Gmsh.y"
+{ 
+      if(!Set_NumberOption(yyvsp[-3].c, PostProcessingOptions_Number, yyvsp[-1].d)) 
+	vyyerror("Unknown PostProcessing Option (Number) '%s'", yyvsp[-3].c);
+    ;
+    break;}
+case 222:
+#line 1415 "Gmsh.y"
+{ 
+      if(!Set_ArrayOption(yyvsp[-3].c, PostProcessingOptions_Array, yyvsp[-1].v))
+	vyyerror("Unknown PostProcessing (Array) Option '%s'", yyvsp[-3].c);
+    ;
+    break;}
+case 223:
+#line 1420 "Gmsh.y"
+{ ColorField = PostProcessingOptions_Color; ;
+    break;}
+case 227:
+#line 1431 "Gmsh.y"
+{
+      if(!Set_StringOption(yyvsp[-3].c, PrintOptions_String, yyvsp[-1].c))
+	vyyerror("Unknown Print Option (String) '%s'", yyvsp[-3].c);
+    ;
+    break;}
+case 228:
+#line 1436 "Gmsh.y"
+{
+      if(!Set_NumberOption(yyvsp[-3].c, PrintOptions_Number, yyvsp[-1].d)) 
+	vyyerror("Unknown Print Option (Number) '%s'", yyvsp[-3].c);
+    ;
+    break;}
+case 229:
+#line 1441 "Gmsh.y"
+{
+      if(!Set_ArrayOption(yyvsp[-3].c, PrintOptions_Array, yyvsp[-1].v))
+	vyyerror("Unknown Print Option (Array) '%s'", yyvsp[-3].c);
+    ;
+    break;}
+case 230:
+#line 1446 "Gmsh.y"
+{ ColorField = PrintOptions_Color; ;
+    break;}
+case 234:
+#line 1457 "Gmsh.y"
 {
       i = Get_ColorForString(ColorString, -1, yyvsp[-1].c, &flag);
       if(flag) vyyerror("Unknown Color '%s'", yyvsp[-1].c);
-      Get_ColorPointerForString(ColorField, yyvsp[-3].c, &flag, &ptr);
-      if(flag)
+      if(!Set_ColorOption(yyvsp[-3].c, ColorField, i))
 	vyyerror("Unknown Color Field '%s'", yyvsp[-3].c);
-      else
-	*ptr = i ;
     ;
     break;}
-case 203:
-#line 1363 "Gmsh.y"
+case 235:
+#line 1464 "Gmsh.y"
 {
       i = Get_ColorForString(ColorString, (int)yyvsp[-2].d, yyvsp[-4].c, &flag);
       if(flag) vyyerror("Unknown Color '%s'", yyvsp[-4].c);
-      Get_ColorPointerForString(ColorField, yyvsp[-7].c, &flag, &ptr);
-      if(flag)
-	vyyerror("Unknown Color Field '%s'", yyvsp[-7].c);
-      else
-	*ptr = i ;
+      if(!Set_ColorOption(yyvsp[-7].c, ColorField, i))
+	 vyyerror("Unknown Color Field '%s'", yyvsp[-7].c);
     ;
     break;}
-case 204:
-#line 1373 "Gmsh.y"
+case 236:
+#line 1471 "Gmsh.y"
 {
-      Get_ColorPointerForString(ColorField, yyvsp[-3].c, &flag, &ptr);
-      if(flag)
-	vyyerror("Unknown Color Field '%s'", yyvsp[-1].v);
-      else
-	*ptr = PACK_COLOR((int)yyvsp[-1].v[0], (int)yyvsp[-1].v[1], (int)yyvsp[-1].v[2], (int)yyvsp[-1].v[3]);
+      if(!Set_ColorOption(yyvsp[-3].c, ColorField,
+			  PACK_COLOR((int)yyvsp[-1].v[0], (int)yyvsp[-1].v[1], (int)yyvsp[-1].v[2], (int)yyvsp[-1].v[3])))
+	vyyerror("Unknown Color Field '%s'", yyvsp[-3].c);
     ;
     break;}
-case 205:
-#line 1384 "Gmsh.y"
+case 237:
+#line 1480 "Gmsh.y"
 {
       yyval.v[0]=yyvsp[-7].d;
       yyval.v[1]=yyvsp[-5].d;
@@ -3393,8 +3514,8 @@ case 205:
       yyval.v[3]=yyvsp[-1].d;
     ;
     break;}
-case 206:
-#line 1391 "Gmsh.y"
+case 238:
+#line 1487 "Gmsh.y"
 {
       yyval.v[0]=yyvsp[-5].d;
       yyval.v[1]=yyvsp[-3].d;
@@ -3402,152 +3523,152 @@ case 206:
       yyval.v[3]=255.;
     ;
     break;}
-case 207:
-#line 1467 "Gmsh.y"
+case 239:
+#line 1501 "Gmsh.y"
 {yyval.i = 1;;
     break;}
-case 208:
-#line 1468 "Gmsh.y"
+case 240:
+#line 1502 "Gmsh.y"
 {yyval.i = 0;;
     break;}
-case 209:
-#line 1469 "Gmsh.y"
+case 241:
+#line 1503 "Gmsh.y"
 {yyval.i = -1;;
     break;}
-case 210:
-#line 1470 "Gmsh.y"
+case 242:
+#line 1504 "Gmsh.y"
 {yyval.i = -1;;
     break;}
-case 211:
-#line 1471 "Gmsh.y"
+case 243:
+#line 1505 "Gmsh.y"
 {yyval.i = -1;;
     break;}
-case 212:
-#line 1475 "Gmsh.y"
+case 244:
+#line 1509 "Gmsh.y"
 { yyval.d = yyvsp[0].d; ;
     break;}
-case 213:
-#line 1476 "Gmsh.y"
+case 245:
+#line 1510 "Gmsh.y"
 { yyval.d = yyvsp[-1].d; ;
     break;}
-case 214:
-#line 1477 "Gmsh.y"
+case 246:
+#line 1511 "Gmsh.y"
 { yyval.d = yyvsp[-2].d - yyvsp[0].d; ;
     break;}
-case 215:
-#line 1478 "Gmsh.y"
+case 247:
+#line 1512 "Gmsh.y"
 { yyval.d = yyvsp[-2].d + yyvsp[0].d; ;
     break;}
-case 216:
-#line 1479 "Gmsh.y"
+case 248:
+#line 1513 "Gmsh.y"
 { yyval.d = yyvsp[-2].d * yyvsp[0].d; ;
     break;}
-case 217:
-#line 1480 "Gmsh.y"
+case 249:
+#line 1514 "Gmsh.y"
 { yyval.d = yyvsp[-2].d / yyvsp[0].d; ;
     break;}
-case 218:
-#line 1481 "Gmsh.y"
+case 250:
+#line 1515 "Gmsh.y"
 { yyval.d = pow(yyvsp[-2].d, yyvsp[0].d); ;
     break;}
-case 219:
-#line 1482 "Gmsh.y"
+case 251:
+#line 1516 "Gmsh.y"
 { yyval.d = - yyvsp[0].d; ;
     break;}
-case 220:
-#line 1483 "Gmsh.y"
+case 252:
+#line 1517 "Gmsh.y"
 { yyval.d = yyvsp[0].d; ;
     break;}
-case 221:
-#line 1484 "Gmsh.y"
+case 253:
+#line 1518 "Gmsh.y"
 { yyval.d = exp(yyvsp[-1].d);      ;
     break;}
-case 222:
-#line 1485 "Gmsh.y"
+case 254:
+#line 1519 "Gmsh.y"
 { yyval.d = log(yyvsp[-1].d);      ;
     break;}
-case 223:
-#line 1486 "Gmsh.y"
+case 255:
+#line 1520 "Gmsh.y"
 { yyval.d = log10(yyvsp[-1].d);    ;
     break;}
-case 224:
-#line 1487 "Gmsh.y"
+case 256:
+#line 1521 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-1].d);     ;
     break;}
-case 225:
-#line 1488 "Gmsh.y"
+case 257:
+#line 1522 "Gmsh.y"
 { yyval.d = sin(yyvsp[-1].d);      ;
     break;}
-case 226:
-#line 1489 "Gmsh.y"
+case 258:
+#line 1523 "Gmsh.y"
 { yyval.d = asin(yyvsp[-1].d);     ;
     break;}
-case 227:
-#line 1490 "Gmsh.y"
+case 259:
+#line 1524 "Gmsh.y"
 { yyval.d = cos(yyvsp[-1].d);      ;
     break;}
-case 228:
-#line 1491 "Gmsh.y"
+case 260:
+#line 1525 "Gmsh.y"
 { yyval.d = acos(yyvsp[-1].d);     ;
     break;}
-case 229:
-#line 1492 "Gmsh.y"
+case 261:
+#line 1526 "Gmsh.y"
 { yyval.d = tan(yyvsp[-1].d);      ;
     break;}
-case 230:
-#line 1493 "Gmsh.y"
+case 262:
+#line 1527 "Gmsh.y"
 { yyval.d = atan(yyvsp[-1].d);     ;
     break;}
-case 231:
-#line 1494 "Gmsh.y"
+case 263:
+#line 1528 "Gmsh.y"
 { yyval.d = atan2(yyvsp[-3].d,yyvsp[-1].d); ;
     break;}
-case 232:
-#line 1495 "Gmsh.y"
+case 264:
+#line 1529 "Gmsh.y"
 { yyval.d = sinh(yyvsp[-1].d);     ;
     break;}
-case 233:
-#line 1496 "Gmsh.y"
+case 265:
+#line 1530 "Gmsh.y"
 { yyval.d = cosh(yyvsp[-1].d);     ;
     break;}
-case 234:
-#line 1497 "Gmsh.y"
+case 266:
+#line 1531 "Gmsh.y"
 { yyval.d = tanh(yyvsp[-1].d);     ;
     break;}
-case 235:
-#line 1498 "Gmsh.y"
+case 267:
+#line 1532 "Gmsh.y"
 { yyval.d = fabs(yyvsp[-1].d);     ;
     break;}
-case 236:
-#line 1499 "Gmsh.y"
+case 268:
+#line 1533 "Gmsh.y"
 { yyval.d = floor(yyvsp[-1].d);    ;
     break;}
-case 237:
-#line 1500 "Gmsh.y"
+case 269:
+#line 1534 "Gmsh.y"
 { yyval.d = ceil(yyvsp[-1].d);     ;
     break;}
-case 238:
-#line 1501 "Gmsh.y"
+case 270:
+#line 1535 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d);  ;
     break;}
-case 239:
-#line 1502 "Gmsh.y"
+case 271:
+#line 1536 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d);  ;
     break;}
-case 240:
-#line 1503 "Gmsh.y"
+case 272:
+#line 1537 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d);  ;
     break;}
-case 241:
-#line 1507 "Gmsh.y"
+case 273:
+#line 1541 "Gmsh.y"
 { yyval.d = yyvsp[0].d; ;
     break;}
-case 242:
-#line 1508 "Gmsh.y"
+case 274:
+#line 1542 "Gmsh.y"
 { yyval.d = 3.141592653589793; ;
     break;}
-case 243:
-#line 1510 "Gmsh.y"
+case 275:
+#line 1544 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[0].c ;
       if (!List_Query(Symbol_L, &TheSymbol, CompareSymbols)) {
@@ -3557,16 +3678,16 @@ case 243:
       Free(yyvsp[0].c);
     ;
     break;}
-case 244:
-#line 1522 "Gmsh.y"
+case 276:
+#line 1556 "Gmsh.y"
 { 
       ListOfDouble2_L = List_Create(2,1,sizeof(double)) ; 
       for(d=yyvsp[-2].d ; (yyvsp[-2].d<yyvsp[0].d)?(d<=yyvsp[0].d):(d>=yyvsp[0].d) ; (yyvsp[-2].d<yyvsp[0].d)?(d+=1.):(d-=1.)) 
 	List_Add(ListOfDouble2_L, &d) ;
     ;
     break;}
-case 245:
-#line 1528 "Gmsh.y"
+case 277:
+#line 1562 "Gmsh.y"
 {
       ListOfDouble2_L = List_Create(2,1,sizeof(double)) ; 
       if(!yyvsp[-2].d || (yyvsp[-5].d<yyvsp[0].d && yyvsp[-2].d<0) || (yyvsp[-5].d>yyvsp[0].d && yyvsp[-2].d>0)){
@@ -3578,8 +3699,8 @@ case 245:
 	  List_Add(ListOfDouble2_L, &d) ;
    ;
     break;}
-case 246:
-#line 1542 "Gmsh.y"
+case 278:
+#line 1576 "Gmsh.y"
 {
       yyval.v[0]=yyvsp[-9].d;
       yyval.v[1]=yyvsp[-7].d;
@@ -3588,8 +3709,8 @@ case 246:
       yyval.v[4]=yyvsp[-1].d;
     ;
     break;}
-case 247:
-#line 1550 "Gmsh.y"
+case 279:
+#line 1584 "Gmsh.y"
 {
       yyval.v[0]=yyvsp[-7].d;
       yyval.v[1]=yyvsp[-5].d;
@@ -3598,8 +3719,8 @@ case 247:
       yyval.v[4]=1.0;
     ;
     break;}
-case 248:
-#line 1558 "Gmsh.y"
+case 280:
+#line 1592 "Gmsh.y"
 {
       yyval.v[0]=yyvsp[-5].d;
       yyval.v[1]=yyvsp[-3].d;
@@ -3608,8 +3729,8 @@ case 248:
       yyval.v[4]=1.0;
     ;
     break;}
-case 249:
-#line 1566 "Gmsh.y"
+case 281:
+#line 1600 "Gmsh.y"
 {
       yyval.v[0]=yyvsp[-5].d;
       yyval.v[1]=yyvsp[-3].d;
@@ -3618,84 +3739,84 @@ case 249:
       yyval.v[4]=1.0;
     ;
     break;}
-case 250:
-#line 1577 "Gmsh.y"
+case 282:
+#line 1611 "Gmsh.y"
 {
     ;
     break;}
-case 251:
-#line 1580 "Gmsh.y"
+case 283:
+#line 1614 "Gmsh.y"
 {
     ;
     break;}
-case 252:
-#line 1586 "Gmsh.y"
+case 284:
+#line 1620 "Gmsh.y"
 {
     ;
     break;}
-case 253:
-#line 1589 "Gmsh.y"
+case 285:
+#line 1623 "Gmsh.y"
 {
     ;
     break;}
-case 254:
-#line 1595 "Gmsh.y"
+case 286:
+#line 1629 "Gmsh.y"
 {
     ;
     break;}
-case 255:
-#line 1598 "Gmsh.y"
+case 287:
+#line 1632 "Gmsh.y"
 {
        yyval.l=ListOfListOfDouble_L;
     ;
     break;}
-case 256:
-#line 1602 "Gmsh.y"
+case 288:
+#line 1636 "Gmsh.y"
 {
        yyval.l=ListOfListOfDouble_L;
     ;
     break;}
-case 257:
-#line 1609 "Gmsh.y"
+case 289:
+#line 1643 "Gmsh.y"
 {
       ListOfListOfDouble_L = List_Create(2,1,sizeof(List_T*)) ;
       List_Add(ListOfListOfDouble_L, &(yyvsp[0].l)) ;
     ;
     break;}
-case 258:
-#line 1614 "Gmsh.y"
+case 290:
+#line 1648 "Gmsh.y"
 {
       List_Add(ListOfListOfDouble_L, &(yyvsp[0].l)) ;
     ;
     break;}
-case 259:
-#line 1621 "Gmsh.y"
+case 291:
+#line 1655 "Gmsh.y"
 {
     ;
     break;}
-case 260:
-#line 1624 "Gmsh.y"
+case 292:
+#line 1658 "Gmsh.y"
 {
       ListOfDouble_L = List_Create(2,1,sizeof(double)) ;
       List_Add(ListOfDouble_L, &(yyvsp[0].d)) ;
       yyval.l=ListOfDouble_L;
     ;
     break;}
-case 261:
-#line 1630 "Gmsh.y"
+case 293:
+#line 1664 "Gmsh.y"
 {
       yyval.l=ListOfDouble_L;
     ;
     break;}
-case 262:
-#line 1644 "Gmsh.y"
+case 294:
+#line 1678 "Gmsh.y"
 {
       ListOfDouble_L = List_Create(2,1,sizeof(double)) ;
       List_Add(ListOfDouble_L, &(yyvsp[0].d)) ;
     ;
     break;}
-case 263:
-#line 1649 "Gmsh.y"
+case 295:
+#line 1683 "Gmsh.y"
 { 
       ListOfDouble_L = List_Create(2,1,sizeof(double)) ;
       for(i=0 ; i<List_Nbr(ListOfDouble2_L) ; i++){
@@ -3705,14 +3826,14 @@ case 263:
       List_Delete(ListOfDouble2_L);
     ;
     break;}
-case 264:
-#line 1658 "Gmsh.y"
+case 296:
+#line 1692 "Gmsh.y"
 {
       List_Add(ListOfDouble_L, &(yyvsp[0].d)) ;
     ;
     break;}
-case 265:
-#line 1662 "Gmsh.y"
+case 297:
+#line 1696 "Gmsh.y"
 {
       for(i=0 ; i<List_Nbr(ListOfDouble2_L) ; i++){
 	List_Read(ListOfDouble2_L, i, &d) ;
@@ -3723,7 +3844,7 @@ case 265:
     break;}
 }
    /* the action file gets copied in in place of this dollarsign */
-#line 543 "/usr/lib/bison.simple"
+#line 498 "/usr/local/share/bison.simple"
 
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -3918,32 +4039,8 @@ yyerrhandle:
 
   yystate = yyn;
   goto yynewstate;
-
- yyacceptlab:
-  /* YYACCEPT comes here.  */
-  if (yyfree_stacks)
-    {
-      free (yyss);
-      free (yyvs);
-#ifdef YYLSP_NEEDED
-      free (yyls);
-#endif
-    }
-  return 0;
-
- yyabortlab:
-  /* YYABORT comes here.  */
-  if (yyfree_stacks)
-    {
-      free (yyss);
-      free (yyvs);
-#ifdef YYLSP_NEEDED
-      free (yyls);
-#endif
-    }
-  return 1;
 }
-#line 1672 "Gmsh.y"
+#line 1706 "Gmsh.y"
 
 
 void InitSymbols(void){
@@ -3975,22 +4072,4 @@ void  vyyerror (char *fmt, ...){
   yyerrorstate=1;
 }
 
-int Get_ColorForString(StringX4Int SX4I[], int alpha, 
-		       char * string, int * FlagError) {
-  int  i = 0 ;
-  while ((SX4I[i].string != NULL) && (strcmp(SX4I[i].string, string)))  i++ ;
-  *FlagError = (SX4I[i].string == NULL)? 1 : 0 ;
-  if(alpha > 0)
-    return PACK_COLOR(SX4I[i].int1,SX4I[i].int2,SX4I[i].int3,alpha) ;
-  else
-    return PACK_COLOR(SX4I[i].int1,SX4I[i].int2,SX4I[i].int3,SX4I[i].int4) ;
-}
-
-void Get_ColorPointerForString(StringXPointer SXP[], char * string,
-			  int * FlagError, unsigned int **Pointer) {
-  int  i = 0 ;
-  while ((SXP[i].string != NULL) && (strcmp(SXP[i].string, string)))  i++ ;
-  *FlagError = (SXP[i].string == NULL)? 1 : 0 ;
-  *Pointer = (unsigned int *)SXP[i].Pointer ;
-}
 
diff --git a/Parser/Gmsh.tab.cpp.h b/Parser/Gmsh.tab.cpp.h
index 9b5e5cc35b7806653c4ac0f0407886a902b45468..ce416c8116a986ed4c040d1a3e371a32340c63c5 100644
--- a/Parser/Gmsh.tab.cpp.h
+++ b/Parser/Gmsh.tab.cpp.h
@@ -6,146 +6,148 @@ typedef union {
   Shape    s;
   List_T  *l;
 } YYSTYPE;
-#define	tDOUBLE	257
-#define	tSTRING	258
-#define	tBIGSTR	259
-#define	tEND	260
-#define	tAFFECT	261
-#define	tDOTS	262
-#define	tPi	263
-#define	tExp	264
-#define	tLog	265
-#define	tLog10	266
-#define	tSqrt	267
-#define	tSin	268
-#define	tAsin	269
-#define	tCos	270
-#define	tAcos	271
-#define	tTan	272
-#define	tAtan	273
-#define	tAtan2	274
-#define	tSinh	275
-#define	tCosh	276
-#define	tTanh	277
-#define	tFabs	278
-#define	tFloor	279
-#define	tCeil	280
-#define	tFmod	281
-#define	tModulo	282
-#define	tHypot	283
-#define	tPoint	284
-#define	tCircle	285
-#define	tEllipsis	286
-#define	tLine	287
-#define	tSurface	288
-#define	tSpline	289
-#define	tVolume	290
-#define	tCharacteristic	291
-#define	tLength	292
-#define	tParametric	293
-#define	tElliptic	294
-#define	tPlane	295
-#define	tRuled	296
-#define	tTransfinite	297
-#define	tComplex	298
-#define	tPhysical	299
-#define	tUsing	300
-#define	tPower	301
-#define	tBump	302
-#define	tProgression	303
-#define	tAssociation	304
-#define	tRotate	305
-#define	tTranslate	306
-#define	tSymmetry	307
-#define	tDilate	308
-#define	tExtrude	309
-#define	tDuplicata	310
-#define	tLoop	311
-#define	tInclude	312
-#define	tRecombine	313
-#define	tDelete	314
-#define	tCoherence	315
-#define	tView	316
-#define	tOffset	317
-#define	tAttractor	318
-#define	tLayers	319
-#define	tScalarTetrahedron	320
-#define	tVectorTetrahedron	321
-#define	tTensorTetrahedron	322
-#define	tScalarTriangle	323
-#define	tVectorTriangle	324
-#define	tTensorTriangle	325
-#define	tScalarLine	326
-#define	tVectorLine	327
-#define	tTensorLine	328
-#define	tScalarPoint	329
-#define	tVectorPoint	330
-#define	tTensorPoint	331
-#define	tBSpline	332
-#define	tNurbs	333
-#define	tOrder	334
-#define	tWith	335
-#define	tBounds	336
-#define	tKnots	337
-#define	tColor	338
-#define	tGeneral	339
-#define	tGeometry	340
-#define	tMesh	341
-#define	tClip	342
-#define	tB_SPLINE_SURFACE_WITH_KNOTS	343
-#define	tB_SPLINE_CURVE_WITH_KNOTS	344
-#define	tCARTESIAN_POINT	345
-#define	tTRUE	346
-#define	tFALSE	347
-#define	tUNSPECIFIED	348
-#define	tU	349
-#define	tV	350
-#define	tEDGE_CURVE	351
-#define	tVERTEX_POINT	352
-#define	tORIENTED_EDGE	353
-#define	tPLANE	354
-#define	tFACE_OUTER_BOUND	355
-#define	tEDGE_LOOP	356
-#define	tADVANCED_FACE	357
-#define	tVECTOR	358
-#define	tDIRECTION	359
-#define	tAXIS2_PLACEMENT_3D	360
-#define	tISO	361
-#define	tENDISO	362
-#define	tENDSEC	363
-#define	tDATA	364
-#define	tHEADER	365
-#define	tFILE_DESCRIPTION	366
-#define	tFILE_SCHEMA	367
-#define	tFILE_NAME	368
-#define	tMANIFOLD_SOLID_BREP	369
-#define	tCLOSED_SHELL	370
-#define	tADVANCED_BREP_SHAPE_REPRESENTATION	371
-#define	tFACE_BOUND	372
-#define	tCYLINDRICAL_SURFACE	373
-#define	tCONICAL_SURFACE	374
-#define	tCIRCLE	375
-#define	tTRIMMED_CURVE	376
-#define	tGEOMETRIC_SET	377
-#define	tCOMPOSITE_CURVE_SEGMENT	378
-#define	tCONTINUOUS	379
-#define	tCOMPOSITE_CURVE	380
-#define	tTOROIDAL_SURFACE	381
-#define	tPRODUCT_DEFINITION	382
-#define	tPRODUCT_DEFINITION_SHAPE	383
-#define	tSHAPE_DEFINITION_REPRESENTATION	384
-#define	tELLIPSE	385
-#define	tTrimmed	386
-#define	tSolid	387
-#define	tEndSolid	388
-#define	tVertex	389
-#define	tFacet	390
-#define	tNormal	391
-#define	tOuter	392
-#define	tLoopSTL	393
-#define	tEndLoop	394
-#define	tEndFacet	395
-#define	UMINUS	396
+#define	tDOUBLE	258
+#define	tSTRING	259
+#define	tBIGSTR	260
+#define	tEND	261
+#define	tAFFECT	262
+#define	tDOTS	263
+#define	tPi	264
+#define	tExp	265
+#define	tLog	266
+#define	tLog10	267
+#define	tSqrt	268
+#define	tSin	269
+#define	tAsin	270
+#define	tCos	271
+#define	tAcos	272
+#define	tTan	273
+#define	tAtan	274
+#define	tAtan2	275
+#define	tSinh	276
+#define	tCosh	277
+#define	tTanh	278
+#define	tFabs	279
+#define	tFloor	280
+#define	tCeil	281
+#define	tFmod	282
+#define	tModulo	283
+#define	tHypot	284
+#define	tPoint	285
+#define	tCircle	286
+#define	tEllipsis	287
+#define	tLine	288
+#define	tSurface	289
+#define	tSpline	290
+#define	tVolume	291
+#define	tCharacteristic	292
+#define	tLength	293
+#define	tParametric	294
+#define	tElliptic	295
+#define	tPlane	296
+#define	tRuled	297
+#define	tTransfinite	298
+#define	tComplex	299
+#define	tPhysical	300
+#define	tUsing	301
+#define	tPower	302
+#define	tBump	303
+#define	tProgression	304
+#define	tAssociation	305
+#define	tRotate	306
+#define	tTranslate	307
+#define	tSymmetry	308
+#define	tDilate	309
+#define	tExtrude	310
+#define	tDuplicata	311
+#define	tLoop	312
+#define	tInclude	313
+#define	tRecombine	314
+#define	tDelete	315
+#define	tCoherence	316
+#define	tView	317
+#define	tOffset	318
+#define	tAttractor	319
+#define	tLayers	320
+#define	tScalarTetrahedron	321
+#define	tVectorTetrahedron	322
+#define	tTensorTetrahedron	323
+#define	tScalarTriangle	324
+#define	tVectorTriangle	325
+#define	tTensorTriangle	326
+#define	tScalarLine	327
+#define	tVectorLine	328
+#define	tTensorLine	329
+#define	tScalarPoint	330
+#define	tVectorPoint	331
+#define	tTensorPoint	332
+#define	tBSpline	333
+#define	tNurbs	334
+#define	tOrder	335
+#define	tWith	336
+#define	tBounds	337
+#define	tKnots	338
+#define	tColor	339
+#define	tOptions	340
+#define	tGeneral	341
+#define	tGeometry	342
+#define	tMesh	343
+#define	tPostProcessing	344
+#define	tPrint	345
+#define	tB_SPLINE_SURFACE_WITH_KNOTS	346
+#define	tB_SPLINE_CURVE_WITH_KNOTS	347
+#define	tCARTESIAN_POINT	348
+#define	tTRUE	349
+#define	tFALSE	350
+#define	tUNSPECIFIED	351
+#define	tU	352
+#define	tV	353
+#define	tEDGE_CURVE	354
+#define	tVERTEX_POINT	355
+#define	tORIENTED_EDGE	356
+#define	tPLANE	357
+#define	tFACE_OUTER_BOUND	358
+#define	tEDGE_LOOP	359
+#define	tADVANCED_FACE	360
+#define	tVECTOR	361
+#define	tDIRECTION	362
+#define	tAXIS2_PLACEMENT_3D	363
+#define	tISO	364
+#define	tENDISO	365
+#define	tENDSEC	366
+#define	tDATA	367
+#define	tHEADER	368
+#define	tFILE_DESCRIPTION	369
+#define	tFILE_SCHEMA	370
+#define	tFILE_NAME	371
+#define	tMANIFOLD_SOLID_BREP	372
+#define	tCLOSED_SHELL	373
+#define	tADVANCED_BREP_SHAPE_REPRESENTATION	374
+#define	tFACE_BOUND	375
+#define	tCYLINDRICAL_SURFACE	376
+#define	tCONICAL_SURFACE	377
+#define	tCIRCLE	378
+#define	tTRIMMED_CURVE	379
+#define	tGEOMETRIC_SET	380
+#define	tCOMPOSITE_CURVE_SEGMENT	381
+#define	tCONTINUOUS	382
+#define	tCOMPOSITE_CURVE	383
+#define	tTOROIDAL_SURFACE	384
+#define	tPRODUCT_DEFINITION	385
+#define	tPRODUCT_DEFINITION_SHAPE	386
+#define	tSHAPE_DEFINITION_REPRESENTATION	387
+#define	tELLIPSE	388
+#define	tTrimmed	389
+#define	tSolid	390
+#define	tEndSolid	391
+#define	tVertex	392
+#define	tFacet	393
+#define	tNormal	394
+#define	tOuter	395
+#define	tLoopSTL	396
+#define	tEndLoop	397
+#define	tEndFacet	398
+#define	UMINUS	399
 
 
 extern YYSTYPE yylval;
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index 5a1c3a10c0452ab17927ba13285a123bbf13e0e5..8fbdd7d306dbb92a3e75986f3da20fb7d3b97790 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1,4 +1,4 @@
-%{ /* $Id: Gmsh.y,v 1.12 2000-12-04 11:28:33 geuzaine Exp $ */
+%{ /* $Id: Gmsh.y,v 1.13 2000-12-05 15:23:57 geuzaine Exp $ */
 
 #include <stdarg.h>
 
@@ -12,6 +12,7 @@
 #include "Create.h"
 #include "Views.h"
 #include "StepGeomDatabase.h"
+#include "Options.h"
 #include "Colors.h"
 #include "Parser.h"
 
@@ -33,21 +34,15 @@ static char           tmpstring[NAME_STR_L];
 static Symbol         TheSymbol;
 static Surface       *STL_Surf;
 static Shape          TheShape;
-static unsigned int  *ptr ;
 static int            i,j,k,flag,RecursionLevel=0;
 static double         d;
 static ExtrudeParams  extr;
-static StringXPointer *ColorField ;
+static StringXColor   *ColorField ;
 static List_T         *ListOfDouble_L,*ListOfDouble2_L;
 static List_T         *ListOfListOfDouble_L;
 
 void  yyerror (char *s);
 void  vyyerror (char *fmt, ...);
-int   Get_ColorForString(StringX4Int SX4I[], int alpha, 
-			 char * string, int * FlagError);
-void  Get_ColorPointerForString(StringXPointer SXP[], char * string,
-				int * FlagError, unsigned int **Pointer);
-
 %}
 
 %union {
@@ -78,7 +73,8 @@ void  Get_ColorPointerForString(StringXPointer SXP[], char * string,
 %token tScalarLine tVectorLine tTensorLine
 %token tScalarPoint tVectorPoint tTensorPoint
 %token tBSpline tNurbs tOrder tWith tBounds tKnots
-%token tColor tGeneral tGeometry tMesh tClip
+%token tColor tOptions
+%token tGeneral tGeometry tMesh tPostProcessing tPrint
 
 %token tB_SPLINE_SURFACE_WITH_KNOTS
 %token tB_SPLINE_CURVE_WITH_KNOTS
@@ -349,7 +345,7 @@ GeomFormat :
   | Transfini   { return 1; }
   | Coherence   { return 1; }
   | Macro       { return 1; }
-  | Options     { return 1; }
+  | tOptions '{' Options '}' { return 1; }
   | error tEND  { yyerrok; return 1;}
 ;
 
@@ -1310,36 +1306,144 @@ Coherence :
    --------------- */
 
 Options :
-    tColor '{' ColorSections '}'
-  | tClip tPlane '(' FExpr ')' tAFFECT '{' FExpr ',' FExpr ',' FExpr ',' FExpr '}' tEND
+  /* empty */
+  | Options Option
+;
+
+Option :
+    tGeneral '{' GeneralOptions '}'
+  | tGeometry '{' GeometryOptions '}'
+  | tMesh '{' MeshOptions '}'
+  | tPostProcessing '{' PostProcessingOptions '}'
+  | tPrint '{' PrintOptions '}'
+;
+
+GeneralOptions :
+  /* empty */
+  | GeneralOptions GeneralOption
+;
+
+GeneralOption :
+    tSTRING tAFFECT tBIGSTR tEND
+    { 
+      if(!Set_StringOption($1, GeneralOptions_String, $3))
+	vyyerror("Unknown General Option (String) '%s'", $1);
+    }
+  | tSTRING tAFFECT FExpr tEND
+    { 
+      if(!Set_NumberOption($1, GeneralOptions_Number, $3))
+	vyyerror("Unknown General Option (Number) '%s'", $1);
+    }
+  | tSTRING tAFFECT VExpr tEND
+    { if(!Set_ArrayOption($1, GeneralOptions_Array, $3)) 
+	vyyerror("Unknown General Option (Array) '%s'", $1);
+    }
+  | tColor 
+    { ColorField = GeneralOptions_Color; }
+    '{' ColorAffects '}'
+;
+
+GeometryOptions :
+  /* empty */
+  | GeometryOptions GeometryOption
+;
+
+GeometryOption :
+    tSTRING tAFFECT tBIGSTR tEND
+    { 
+      if(!Set_StringOption($1, GeometryOptions_String, $3))
+	vyyerror("Unknown Geometry Option (String) '%s'", $1);
+    }
+  | tSTRING tAFFECT FExpr tEND
+    { 
+      if(!Set_NumberOption($1, GeometryOptions_Number, $3))
+	vyyerror("Unknown Geometry Option (Number) '%s'", $1);
+    }
+  | tSTRING tAFFECT VExpr tEND
     {
-      i = (int)$4 ;
-      if(i < 0 || i > 5)
-	vyyerror("Wrong Clip Plane Number %d", i);
-      else{
-	CTX.clip[i] = 1;
-	CTX.clip_plane[i][0] = $8;
-	CTX.clip_plane[i][1] = $10;
-	CTX.clip_plane[i][2] = $12;
-	CTX.clip_plane[i][3] = $14;
-      }
+      if(!Set_ArrayOption($1, GeometryOptions_Array, $3))
+	vyyerror("Unknown Geometry Option (Array) '%s'", $1);
     }
+  | tColor 
+    { ColorField = GeometryOptions_Color; }
+    '{' ColorAffects '}'
 ;
 
-ColorSections :
+MeshOptions :
   /* empty */
-  | ColorSections ColorSection
+  | MeshOptions MeshOption
 ;
 
-ColorSection : 
-    tGeneral 
-    { ColorField = ColorGeneral; }
+MeshOption :
+    tSTRING tAFFECT tBIGSTR tEND
+    { 
+      if(!Set_StringOption($1, MeshOptions_String, $3))
+	vyyerror("Unknown Mesh Option (String) '%s'", $1);
+    }
+  | tSTRING tAFFECT FExpr tEND
+    {
+      if(!Set_NumberOption($1, MeshOptions_Number, $3))
+	vyyerror("Unknown Mesh Option (Number) '%s'", $1);
+    }
+  | tSTRING tAFFECT VExpr tEND
+    {
+      if(!Set_ArrayOption($1, MeshOptions_Array, $3))
+	vyyerror("Unknown Mesh Option (Array) '%s'", $1);
+    }
+  | tColor 
+    { ColorField = MeshOptions_Color; }
     '{' ColorAffects '}'
-  | tGeometry 
-    { ColorField = ColorGeometry; }
+;
+
+PostProcessingOptions :
+  /* empty */
+  | PostProcessingOptions PostProcessingOption
+;
+
+PostProcessingOption :
+    tSTRING tAFFECT tBIGSTR tEND
+    { 
+      if(!Set_StringOption($1, PostProcessingOptions_String, $3))
+	vyyerror("Unknown PostProcessing Option (String) '%s'", $1);
+    }
+  | tSTRING tAFFECT FExpr tEND
+    { 
+      if(!Set_NumberOption($1, PostProcessingOptions_Number, $3)) 
+	vyyerror("Unknown PostProcessing Option (Number) '%s'", $1);
+    }
+  | tSTRING tAFFECT VExpr tEND
+    { 
+      if(!Set_ArrayOption($1, PostProcessingOptions_Array, $3))
+	vyyerror("Unknown PostProcessing (Array) Option '%s'", $1);
+    }
+  | tColor 
+    { ColorField = PostProcessingOptions_Color; }
     '{' ColorAffects '}'
-  | tMesh
-    { ColorField = ColorMesh; }
+;
+
+PrintOptions :
+  /* empty */
+  | PrintOptions PrintOption
+;
+
+PrintOption :
+    tSTRING tAFFECT tBIGSTR tEND
+    {
+      if(!Set_StringOption($1, PrintOptions_String, $3))
+	vyyerror("Unknown Print Option (String) '%s'", $1);
+    }
+  | tSTRING tAFFECT FExpr tEND
+    {
+      if(!Set_NumberOption($1, PrintOptions_Number, $3)) 
+	vyyerror("Unknown Print Option (Number) '%s'", $1);
+    }
+  | tSTRING tAFFECT VExpr tEND
+    {
+      if(!Set_ArrayOption($1, PrintOptions_Array, $3))
+	vyyerror("Unknown Print Option (Array) '%s'", $1);
+    }
+  | tColor 
+    { ColorField = PrintOptions_Color; }
     '{' ColorAffects '}'
 ;
 
@@ -1353,29 +1457,21 @@ ColorAffect :
     {
       i = Get_ColorForString(ColorString, -1, $3, &flag);
       if(flag) vyyerror("Unknown Color '%s'", $3);
-      Get_ColorPointerForString(ColorField, $1, &flag, &ptr);
-      if(flag)
+      if(!Set_ColorOption($1, ColorField, i))
 	vyyerror("Unknown Color Field '%s'", $1);
-      else
-	*ptr = i ;
     }
   | tSTRING tAFFECT '{' tSTRING ',' FExpr '}' tEND
     {
       i = Get_ColorForString(ColorString, (int)$6, $4, &flag);
       if(flag) vyyerror("Unknown Color '%s'", $4);
-      Get_ColorPointerForString(ColorField, $1, &flag, &ptr);
-      if(flag)
-	vyyerror("Unknown Color Field '%s'", $1);
-      else
-	*ptr = i ;
+      if(!Set_ColorOption($1, ColorField, i))
+	 vyyerror("Unknown Color Field '%s'", $1);
     }
   | tSTRING tAFFECT RGBAExpr tEND
     {
-      Get_ColorPointerForString(ColorField, $1, &flag, &ptr);
-      if(flag)
-	vyyerror("Unknown Color Field '%s'", $3);
-      else
-	*ptr = PACK_COLOR((int)$3[0], (int)$3[1], (int)$3[2], (int)$3[3]);
+      if(!Set_ColorOption($1, ColorField,
+			  PACK_COLOR((int)$3[0], (int)$3[1], (int)$3[2], (int)$3[3])))
+	vyyerror("Unknown Color Field '%s'", $1);
     }
 ;
 
@@ -1396,68 +1492,6 @@ RGBAExpr :
     }
 ;
 
-/*
-Context{
-  
-  General{
-    Axes = 1 ;
-    SmallAxes = 1 ;
-    Orthographic = 1 ;
-    FastDraw = 1 ;
-    DisplayLists = 0 ; 
-    Font = "fixed";
-    ColorBarFont = "fixed";
-    Light0 = {0,0,0};
-    Shininess = 0;
-    Alpha = 0;
-    PrintFormat = EPS;
-  }
-
-  Geometry{
-    Points = 1 ;
-    Lines = 1 ;
-    Surfaces = 1 ;
-    Volumes = 1 ;
-    PointNumbers = 1 ;
-    LineNumbers = 1 ;
-    SurfaceNumbers = 1 ;
-    VolumeNumbers = 1 ;
-    Normals = 0.0 ;
-    Tangents = 0.0 ;
-    HiddenLines = 0 ;
-    Shading = 0 ;
-  }
-
-  Mesh{
-    Draw = 0 ;
-    Points = 1 ;
-    Lines = 1 ;
-    Surfaces = 1 ;
-    Volumes = 1 ;
-    PointNumbers = 1 ;
-    LineNumbers = 1 ;
-    SurfaceNumbers = 1 ;
-    VolumeNumbers = 1 ;
-    Normals = 0.0 ;
-    Tangents = 0.0 ;
-    HiddenLines = 0 ;
-    Shading = 0 ;
-    Format = MSH ;
-    Smoothing = 0 ;
-    Algorithm = 1 ;
-    Degree = 1 ;
-    Explode = 100 ;
-  }
-
-  Post{
-    Draw = 1 ;
-    Scales = 1 ;
-    LinkMode = 0 ;
-  }
-
-}
-*/
-
 /* ---------------
     G E N E R A L
     --------------- */
@@ -1700,22 +1734,4 @@ void  vyyerror (char *fmt, ...){
   yyerrorstate=1;
 }
 
-int Get_ColorForString(StringX4Int SX4I[], int alpha, 
-		       char * string, int * FlagError) {
-  int  i = 0 ;
-  while ((SX4I[i].string != NULL) && (strcmp(SX4I[i].string, string)))  i++ ;
-  *FlagError = (SX4I[i].string == NULL)? 1 : 0 ;
-  if(alpha > 0)
-    return PACK_COLOR(SX4I[i].int1,SX4I[i].int2,SX4I[i].int3,alpha) ;
-  else
-    return PACK_COLOR(SX4I[i].int1,SX4I[i].int2,SX4I[i].int3,SX4I[i].int4) ;
-}
-
-void Get_ColorPointerForString(StringXPointer SXP[], char * string,
-			  int * FlagError, unsigned int **Pointer) {
-  int  i = 0 ;
-  while ((SXP[i].string != NULL) && (strcmp(SXP[i].string, string)))  i++ ;
-  *FlagError = (SXP[i].string == NULL)? 1 : 0 ;
-  *Pointer = (unsigned int *)SXP[i].Pointer ;
-}
 
diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp
index 3daca2fde5a3dac8db89e6e115435ceca7a3ccff..5d7c0f9b3a880f84f4ab922301edec455c1c28de 100644
--- a/Parser/Gmsh.yy.cpp
+++ b/Parser/Gmsh.yy.cpp
@@ -2,7 +2,7 @@
 /* A lexical scanner generated by flex */
 
 /* Scanner skeleton version:
- * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.13 2000-12-04 09:51:51 geuzaine Exp $
+ * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.14 2000-12-05 15:23:57 geuzaine Exp $
  */
 
 #define FLEX_SCANNER
@@ -283,114 +283,116 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
 	*yy_cp = '\0'; \
 	yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 158
-#define YY_END_OF_BUFFER 159
-static yyconst short int yy_accept[945] =
+#define YY_NUM_RULES 160
+#define YY_END_OF_BUFFER 161
+static yyconst short int yy_accept[963] =
     {   0,
-        0,    0,  159,  157,    1,    1,    5,  151,    6,  157,
-      157,  152,    2,    9,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,    0,    0,  151,    0,  154,    0,    0,
-        0,    0,    3,    4,  153,  152,    0,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-
-      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,  156,  156,   62,
-      156,  156,  156,  156,  156,  156,  156,   93,   96,   87,
-       90,  156,  156,  156,  156,  156,  156,   95,  156,   98,
-      156,   89,   92,  156,  156,  156,  156,   94,   97,   88,
-       91,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-      156,  156,    0,    0,   10,    0,  104,  105,  106,  107,
-      153,    0,    0,  155,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-
-      156,  156,   26,  156,  156,  156,  156,  156,  156,  156,
-      156,  156,   37,  156,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-      156,   53,  156,  156,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,   72,  156,  156,  156,  156,  156,  156,
-       81,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,    0,    0,    0,
-      154,    0,    0,  153,  156,   11,  156,  156,  156,  156,
-      156,  156,   13,  156,   15,  156,  156,  156,  156,   21,
-
-      156,  156,  156,  156,  156,  156,  156,   24,  156,  156,
-       33,  156,  156,  156,   25,  121,  156,  156,  156,  156,
-      156,  156,    0,  156,  156,  156,  156,  156,   42,  156,
-       44,  156,  156,  156,  156,  156,    0,  156,  156,  115,
-      156,  156,   51,  156,   52,  156,   56,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,  156,   74,   73,  156,   71,  156,  156,
-      156,  156,   80,  156,  156,  156,  156,  156,   84,  156,
-       86,  156,  156,  156,  156,  146,    8,  156,  156,  156,
-      156,  156,    0,    0,    0,  153,  156,  156,  156,  156,
-
-      156,  156,  156,  156,   17,  156,  156,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,  156,  156,   31,
-      156,  156,  156,  156,  156,  156,  156,    0,  156,  156,
-      156,  156,  156,   43,  156,  156,  156,  156,   47,    0,
-      156,   49,  156,  156,   54,  156,  156,   58,  156,  156,
-       60,  119,  156,  156,  156,   63,   64,   65,  156,  156,
-      156,   70,  156,  156,  156,  156,  156,  156,  156,  156,
-       83,  156,  156,  156,  156,  156,  156,  143,  156,  156,
-      145,  150,  156,    0,    0,  156,  156,  156,  156,   12,
-       14,   16,  156,  156,  156,  156,   23,  156,  134,  156,
-
-      156,  156,  156,  156,  156,   28,  156,  156,  156,   34,
-       35,  156,  156,  156,  156,    0,  127,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,  156,  120,    0,
-      156,   55,   50,  156,   57,  156,   59,  156,  156,  156,
-      156,  156,   69,  156,   75,  156,  156,  156,  156,  156,
-      156,  156,  116,  156,   85,  156,  156,  156,    7,  144,
-      142,    0,    0,  156,  156,  156,  156,   18,  156,  156,
-       22,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-       30,  156,  156,  156,  156,   41,    0,  156,  156,   39,
-      156,  156,  156,  156,  156,  156,   45,  156,    0,   48,
-
-      156,  156,  156,  156,  156,  156,  156,  156,   76,  156,
-      156,  156,  156,  156,   82,  156,  156,  147,  156,    0,
-        0,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-        0,   38,   40,  156,  156,  156,  156,  156,  156,   46,
-        0,  156,  156,  156,  156,   61,  156,  156,  156,   77,
-      156,  156,  156,  156,  156,  148,  149,    0,    0,  156,
-      156,  156,  156,  156,   20,  156,  156,  156,  156,  156,
-      156,  156,  156,   29,  117,   36,  156,  110,    0,  156,
-      156,  156,  123,  156,  156,    0,  156,  156,  156,  156,
-
-      156,   68,  156,  156,  156,  156,   79,  156,    0,    0,
-      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,   32,  156,  109,    0,  113,  156,  156,
-      156,  156,    0,  156,  156,  156,   67,  156,  156,  156,
-      156,  156,  156,    0,    0,  156,  156,  156,  156,  156,
-       19,  156,  156,  156,  156,  156,  156,  156,  156,    0,
-      156,  156,  122,  156,    0,  156,  156,  156,   66,  156,
-      156,  156,   78,  156,  103,    0,  103,  156,  156,  156,
-      156,  156,  156,  156,  128,  156,  156,  156,  156,    0,
-      156,  156,  156,  125,  156,  156,  156,  156,  156,  156,
-
-      111,  102,  156,  114,  102,  156,  156,  156,  156,  156,
-      156,  156,  156,    0,  156,  156,  136,  156,  108,  156,
-      156,  156,  135,  156,  156,  156,  156,  156,  156,  156,
-      156,   27,    0,  156,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,   99,  138,  132,  156,    0,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-      126,  112,  124,  156,  156,  156,  133,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,  118,  156,  156,
-      156,  156,  156,  139,  156,  156,  156,  156,  156,  131,
-      130,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-
-      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,  156,  137,  156,  156,  156,  156,  156,
-      140,  156,  156,  101,  156,  156,  156,  156,  156,  156,
-      100,  156,  156,  156,  156,  156,  156,  156,  156,  141,
-      156,  156,  129,    0
+        0,    0,  161,  159,    1,    1,    5,  153,    6,  159,
+      159,  154,    2,    9,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,    0,    0,  153,    0,  156,    0,    0,
+        0,    0,    3,    4,  155,  154,    0,  158,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,   62,
+      158,  158,  158,  158,  158,  158,  158,   95,   98,   89,
+       92,  158,  158,  158,  158,  158,  158,   97,  158,  100,
+      158,   91,   94,  158,  158,  158,  158,   96,   99,   90,
+       93,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,    0,    0,   10,    0,  106,  107,  108,  109,
+      155,    0,    0,  157,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+
+      158,   26,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,   36,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+       52,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,   74,  158,  158,  158,  158,
+      158,  158,   83,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,    0,
+        0,    0,  156,    0,    0,  155,  158,   11,  158,  158,
+      158,  158,  158,  158,   13,  158,   15,  158,  158,  158,
+
+      158,   21,  158,  158,  158,  158,  158,  158,  158,   24,
+      158,  158,  158,  158,  158,   25,  123,  158,  158,  158,
+      158,  158,  158,    0,  158,  158,  158,  158,  158,   41,
+      158,   43,  158,  158,  158,  158,  158,    0,  158,  158,
+      117,  158,  158,   50,  158,   51,  158,   55,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,   76,   75,
+      158,   73,  158,  158,  158,  158,   82,  158,  158,  158,
+      158,  158,   86,  158,   88,  158,  158,  158,  158,  148,
+        8,  158,  158,  158,  158,  158,    0,    0,    0,  155,
+
+      158,  158,  158,  158,  158,  158,  158,  158,   17,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,   31,  158,  158,  158,  158,  158,  158,
+      158,    0,  158,  158,  158,  158,  158,   42,  158,  158,
+      158,  158,   46,    0,  158,   48,  158,  158,   53,  158,
+      158,   57,  158,  158,  158,   59,  121,  158,  158,  158,
+       63,   64,  158,   65,   69,  158,  158,  158,   72,  158,
+      158,  158,  158,  158,  158,  158,  158,   85,  158,  158,
+      158,  158,  158,  158,  145,  158,  158,  147,  152,  158,
+        0,    0,  158,  158,  158,  158,   12,   14,   16,  158,
+
+      158,  158,  158,   23,  158,  136,  158,  158,  158,  158,
+      158,  158,   28,  158,  158,  158,   33,   34,  158,  158,
+      158,  158,    0,  129,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  122,    0,  158,   54,   49,
+      158,   56,  158,   58,  158,  158,  158,  158,  158,  158,
+      158,   71,  158,   77,  158,  158,  158,  158,  158,  158,
+      158,  118,  158,   87,  158,  158,  158,    7,  146,  144,
+        0,    0,  158,  158,  158,  158,   18,  158,  158,   22,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,   30,
+      158,  158,  158,  158,   40,    0,  158,  158,   38,  158,
+
+      158,  158,  158,  158,  158,   44,  158,    0,   47,  158,
+      158,   60,  158,  158,  158,  158,  158,  158,  158,   78,
+      158,  158,  158,  158,  158,   84,  158,  158,  149,  158,
+        0,    0,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,    0,   37,   39,  158,  158,  158,  158,  158,  158,
+       45,    0,  158,  158,  158,  158,   61,  158,  158,  158,
+      158,   79,  158,  158,  158,  158,  158,  150,  151,    0,
+        0,  158,  158,  158,  158,  158,   20,  158,  158,  158,
+      158,  158,  158,  158,  158,   29,  119,   35,  158,  112,
+
+        0,  158,  158,  158,  125,  158,  158,    0,  158,  158,
+      158,  158,  158,  158,   70,  158,  158,  158,  158,   81,
+      158,    0,    0,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  158,   32,  158,  111,    0,
+      115,  158,  158,  158,  158,    0,  158,  158,  158,   67,
+      158,  158,  158,  158,  158,  158,  158,    0,    0,  158,
+      158,  158,  158,  158,   19,  158,  158,  158,  158,  158,
+      158,  158,  158,    0,  158,  158,  124,  158,    0,  158,
+      158,  158,  158,   66,  158,  158,  158,   80,  158,  105,
+        0,  105,  158,  158,  158,  158,  158,  158,  158,  130,
+
+      158,  158,  158,  158,    0,  158,  158,  158,  127,  158,
+      158,  158,  158,  158,  158,  158,  113,  104,  158,  116,
+      104,  158,  158,  158,  158,  158,  158,  158,  158,    0,
+      158,  158,  138,  158,  110,  158,  158,  158,  158,  137,
+      158,  158,  158,  158,  158,  158,  158,  158,   27,    0,
+      158,  158,  158,  158,   68,  158,  158,  158,  158,  158,
+      158,  101,  140,  134,  158,    0,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,  128,  114,
+      126,  158,  158,  158,  135,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  120,  158,  158,  158,  158,
+
+      158,  141,  158,  158,  158,  158,  158,  133,  132,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  139,  158,  158,  158,  158,  158,  142,  158,
+      158,  103,  158,  158,  158,  158,  158,  158,  102,  158,
+      158,  158,  158,  158,  158,  158,  158,  143,  158,  158,
+      131,    0
     } ;
 
 static yyconst int yy_ec[256] =
@@ -436,223 +438,227 @@ static yyconst int yy_meta[67] =
         3,    3,    3,    3,    3,    3
     } ;
 
-static yyconst short int yy_base[950] =
+static yyconst short int yy_base[968] =
     {   0,
-        0,    0, 1172,   46,   47, 1173,   48,   58,   54,   87,
+        0,    0, 1190,   46,   47, 1191,   48,   58,   54,   87,
        69,  117,   56,   57,   98,   85,  147,  124,  131,  129,
-       66,  167,  166,   60,   67,  180,  187,   72,  188,  227,
-      193,  266,  312,  133,  238,   97,  189,  173,  208,  229,
-      154,  213,  192, 1138, 1138,  293, 1159,  339, 1158, 1157,
-       81, 1156, 1173, 1173,  345,  360,  322,    0,  104, 1126,
-     1132, 1136, 1116,   57,  120, 1128, 1103, 1123, 1096, 1103,
-     1121, 1120, 1121,   51, 1123, 1091, 1099, 1106, 1090, 1096,
-      260, 1110, 1111, 1092, 1091, 1086, 1117, 1111, 1118, 1086,
-       55, 1117, 1107, 1091, 1079, 1078, 1100,  123, 1113, 1074,
-
-     1097, 1083, 1072, 1095, 1060, 1070, 1069,  189, 1091, 1062,
-     1074, 1061, 1092, 1069, 1070, 1097, 1082, 1055, 1047,    0,
-     1068,  190, 1055, 1064, 1048, 1055, 1088,    0,    0,    0,
-        0, 1043, 1050, 1051, 1044, 1043, 1047,    0, 1065,    0,
-     1072,    0,    0, 1043,  168, 1045,  217,    0,    0,    0,
-        0, 1048, 1042, 1033, 1046, 1046, 1035, 1026, 1030, 1027,
-     1034, 1027, 1053, 1048, 1173,  376, 1173, 1173, 1173, 1173,
-      382,  398,  351,  365, 1051, 1022, 1062, 1044, 1043,  245,
-     1023, 1021, 1021, 1016, 1021, 1039, 1017, 1014, 1033, 1048,
-     1032, 1033, 1039, 1038, 1010, 1010, 1003, 1015, 1003, 1011,
-
-     1002, 1000, 1005, 1036, 1031, 1005, 1008,  998, 1027, 1022,
-      106,  996,    0,  988, 1023, 1022,  984,  987,  995, 1010,
-      992,  985, 1016,  981, 1027,  982,  973, 1010,  984,  981,
-      982, 1016,  971, 1000,  975,  963,  979, 1000,  962,  973,
-      988,  997,  974,  957,  961,  960,  966,  963,  956,  967,
-      962,  975,  960,  956,  954,  944,  955,  949,  969,  970,
-      949,  944,  944,  942,  959,  958,  930,  931,  941,  235,
-      943,  933,   87,  935,  940,  935,  925,  948,  950,  387,
-      403,  412,  419,  424,  946,    0,  950,  947,  966,  923,
-      926,  933,    0,  930,  961,  930,  921,  942,  924,    0,
-
-      947,  939,  945,  934,  945,  933,  902,    0,  919,  909,
-        0,  902,  901,  906,    0,    0,  937,  896,  895,  903,
-      911,  919,  925,  928,  893,  887,  905,  904,    0,  887,
-        0,  922,  885,  895,  919,  880,  927,  877,  878,    0,
-      878,  875,    0,  923,    0,  910,    0,  880,  872,  899,
-      882,  870,  905,  889,  872,  873,  876,  862,  863,  862,
-      866,  858,  871,  894,    0,    0,  861,    0,  871,  866,
-      886,  881,    0,  851,  856,  859,  875,  884,    0,  852,
-        0,  861,  848,  847,  841,    0,    0,  853,  856,  840,
-      851,  849,  869,  872,  429,  434,  867,  872,  869,  848,
-
-      830,  834,  833,  835,    0,  840,  830,  857,  823,  846,
-      858,  858,  843,  859,  855,  823,  829,  826,  825,    0,
-      824,  834,  822,  821,  822,  268,  831,  830,  844,  255,
-      817,  240,  290,    0,  826,  818,  800,  825,    0,  847,
-      811,    0,  797,  805,    0,  822,  798,    0,  816,  791,
-        0,    0,  830,  802,  803,    0,    0,    0,  800,  802,
-      798,    0,  802,  796,  797,  781,  819,  817,  166,  791,
-        0,  803,  796,  788,  789,  778,  780,    0,  782,  778,
-        0,    0,  765,  797,  807,  795,  803,  804,  790,    0,
-        0,  809,  778,  760,  772,  787,    0,  791,    0,  774,
-
-      789,  785,  779,  760,  751,    0,  756,  745,  782,    0,
-        0,  764,  769,  773,  782,  771,    0,  751,  750,  753,
-      767,  761,  775,  778,  775,  760,  741,  734,    0,  777,
-      743,    0,    0,  760,    0,  766,    0,  751,  726,  742,
-      725,  732,    0,  761,    0,  734,  722,  761,  757,  726,
-      733,  729,    0,  732,    0,  726,  716,  720,    0,    0,
-        0,  733,  743,  731,  746,  740,  736,    0,  704,  708,
-        0,  740,  743,  725,  723,  716,  731,  722,  708,  709,
-        0,  721,  692,  717,  718,    0,  741,  689,  702,    0,
-      709,  709,  709,  713,  717,  715,    0,  675,  728,    0,
-
-      717,  716,  694,  677,  682,  674,  678,  709,    0,  665,
-      700,  686,  673,  666,    0,  692,  664,    0,  677,  690,
-      698,  688,  677,  695,  699,  665,  657,  672,  682,  687,
-      689,  675,  689,  653,  649,  659,  674,  661,  665,  669,
-      689,    0,    0,  669,  677,  678,  675,  674,  675,    0,
-      680,  651,  650,  670,  639,    0,  638,  641,  664,    0,
-      644,  665,  633,  636,  650,    0,    0,  644,  654,  642,
-      273,  652,  657,  620,    0,  304,  630,  647,  624,  132,
-      178,  168,  201,    0,    0,    0,  233,    0,  246,  241,
-      235,  256,    0,  268,  258,  308,  283,  298,  304,  283,
-
-      283,    0,  314,  307,  306,  308,    0,  355,  350,  381,
-      373,  387,  404,  406,  428,  397,  415,  416,  421,  426,
-      436,  423,  429,    0,  400,    0,  446,    0,  419,  436,
-      445,  429,  452,  434,  446,  445,    0,  415,  439,  434,
-      438,  426,  443,    0,  454,  476,  456,  467,  467,  459,
-        0,  456,  457,  462,  466,  459,  474,  456,  439,  489,
-      482,  469,    0,  481,  492,  476,  482,  481,    0,  482,
-      475,  472,    0,  475, 1173,    0,    0,  479,  491,  514,
-      494,  487,  503,  501,    0,  494,  511,  497,  482,  520,
-      503,  500,  501, 1173,  512,  517,  509,  505,  519,  521,
-
-        0, 1173,  502,    0,    0,  514,  524,  529,  517,  511,
-      530,  514,  507,  545,  517,  529,    0,  535,    0,  531,
-      532,  541,    0,  525,  525,  520,  543,  528,  543,  544,
-      533,    0,  555,  538,  538,  529,  536,  541,  554,  550,
-      534,  538,  556,    0,  537,    0,  557,  569,  561,  552,
-      565,  559,  555,  565,  570,  575,  564,  549,  557,  575,
-     1173,    0,    0,  560,  563,  554,    0,  564,  577,  563,
-      561,  579,  582,  581,  573,  571,  584,    0,  582,  582,
-      585,  588,  578,  570,  591,  572,  573,  580,  587,    0,
-        0,  583,  586,  586,  593,  597,  601,  599,  591,  604,
-
-      596,  586,  598,  612,  609,  599,  601,  606,  599,  603,
-      602,  604,  603,  609,    0,  619,  620,  621,  609,  613,
-        0,  615,  612,    0,  612,  613,  628,  616,  634,  622,
-        0,  618,  619,  630,  639,  626,  623,  629,  635,    0,
-      630,  632,    0, 1173,  662,  665,  668,  671,  674
+       66,  167,  166,   60,   67,  179,  188,   72,  173,  224,
+      172,  263,  309,  154,  235,   97,  116,  180,  191,  204,
+      217,  225,  219, 1156, 1156,  290, 1177,  336, 1176, 1175,
+       81, 1174, 1191, 1191,  342,  357,  319,    0,  183, 1144,
+     1150, 1154, 1134,   57,  120, 1146, 1121, 1141, 1114, 1121,
+     1139, 1138, 1139,   51, 1141, 1109, 1117, 1124, 1108,  257,
+     1129, 1130, 1111, 1110, 1105, 1136, 1130, 1137, 1105,   55,
+     1136, 1126, 1110, 1098, 1097, 1119,  123, 1132, 1093, 1116,
+
+     1102, 1091, 1114, 1079, 1089, 1088,  163, 1110, 1081, 1093,
+     1080, 1111, 1088, 1075, 1088, 1115, 1100, 1073, 1065,    0,
+     1086,  189,   90, 1083, 1067, 1074, 1107,    0,    0,    0,
+        0, 1062, 1069, 1070, 1063, 1062, 1066,    0, 1084,    0,
+     1091,    0,    0, 1062,  199, 1064,  229,    0,    0,    0,
+        0, 1067, 1061, 1052, 1065, 1065, 1054, 1045, 1049, 1046,
+     1053, 1046, 1072, 1067, 1191,  373, 1191, 1191, 1191, 1191,
+      379,  395,  348,  362, 1070, 1041, 1081, 1063, 1062,  249,
+     1042, 1040, 1040, 1035, 1040, 1058, 1036, 1033, 1052, 1067,
+     1051, 1052, 1058, 1057, 1029, 1029, 1022, 1034, 1031, 1022,
+
+     1020, 1025, 1056, 1051, 1025, 1028, 1018, 1047, 1042,  161,
+     1016,    0, 1008, 1043, 1042, 1004, 1007, 1015, 1030, 1012,
+     1005, 1036, 1001, 1047, 1002,  993, 1030, 1004, 1001, 1002,
+     1036,  991, 1020,  995,  983,  999, 1020,  982,  989,  992,
+     1007, 1016,  993,  976,  980,  979,  972,  984,  976,  980,
+      973,  984,  979,  992,  977,  973,  971,  961,  972,  966,
+      986,  987,  966,  961,  961,  959,  976,  975,  947,  948,
+      958,  263,  960,  950,  231,  952,  957,  952,  942,  965,
+      967,  384,  400,  409,  416,  421,  963,    0,  967,  964,
+      983,  940,  943,  950,    0,  947,  978,  947,  938,  959,
+
+      941,    0,  964,  956,  962,  951,  962,  950,  919,    0,
+      936,  926,  919,  918,  923,    0,    0,  954,  913,  912,
+      920,  928,  936,  942,  945,  910,  904,  922,  921,    0,
+      904,    0,  939,  902,  912,  936,  897,  944,  894,  895,
+        0,  895,  892,    0,  940,    0,  927,    0,  897,  889,
+      916,  899,  890,  886,  921,  905,  888,  889,  892,  878,
+      904,  878,  875,  876,  880,  872,  885,  908,    0,    0,
+      875,    0,  885,  880,  900,  895,    0,  865,  870,  873,
+      889,  898,    0,  866,    0,  875,  862,  861,  855,    0,
+        0,  867,  870,  854,  865,  863,  883,  886,  426,  431,
+
+      881,  886,  883,  862,  844,  848,  847,  849,    0,  854,
+      844,  871,  837,  860,  872,  872,  857,  873,  869,  837,
+      843,  840,  839,    0,  838,  848,  836,  835,  836,  288,
+      845,  844,  858,  234,  831,  228,  260,    0,  840,  832,
+      814,  839,    0,  861,  825,    0,  811,  819,    0,  836,
+      812,    0,  830,  805,  810,    0,    0,  843,  815,  816,
+        0,    0,  802,    0,    0,  812,  814,  810,    0,  814,
+      808,  809,  793,  831,  829,  225,  803,    0,  815,  808,
+      800,  801,  790,  792,    0,  794,  790,    0,    0,  777,
+      809,  819,  807,  815,  816,  802,    0,    0,  821,  790,
+
+      772,  784,  799,    0,  803,    0,  786,  801,  797,  791,
+      772,  763,    0,  768,  757,  794,    0,    0,  776,  781,
+      785,  794,  783,    0,  763,  762,  765,  779,  773,  787,
+      790,  787,  772,  753,  746,    0,  789,  755,    0,    0,
+      772,    0,  778,    0,  740,  762,  737,  753,  740,  735,
+      742,    0,  771,    0,  744,  732,  771,  767,  736,  743,
+      739,    0,  742,    0,  736,  726,  730,    0,    0,    0,
+      743,  753,  741,  756,  750,  746,    0,  714,  718,    0,
+      750,  753,  735,  733,  726,  741,  732,  718,  719,    0,
+      731,  702,  727,  728,    0,  751,  699,  712,    0,  719,
+
+      719,  719,  723,  727,  725,    0,  685,  738,    0,  727,
+      726,    0,  704,  687,  692,  698,  683,  687,  718,    0,
+      674,  709,  695,  682,  675,    0,  701,  673,    0,  686,
+      699,  707,  697,  686,  704,  708,  674,  666,  681,  691,
+      696,  698,  684,  698,  662,  658,  668,  683,  670,  674,
+      678,  698,    0,    0,  678,  686,  687,  684,  683,  684,
+        0,  689,  660,  659,  679,  648,    0,  651,  646,  649,
+      672,    0,  651,  670,  636,  637,   82,    0,    0,  106,
+      133,  177,  302,  210,  245,  242,    0,  427,  270,  291,
+      276,  286,  317,  283,  286,    0,    0,    0,  317,    0,
+
+      329,  344,  344,  348,    0,  370,  363,  410,  384,  403,
+      426,  404,  391,  396,    0,  426,  418,  417,  395,    0,
+      430,  422,  436,  424,  426,  443,  441,  442,  411,  429,
+      430,  435,  440,  450,  437,  443,    0,  414,    0,  460,
+        0,  433,  450,  459,  443,  466,  448,  460,  459,    0,
+      424,  430,  454,  449,  453,  441,  458,    0,  469,  491,
+      471,  482,  482,  474,    0,  471,  472,  477,  481,  474,
+      489,  471,  454,  504,  497,  484,    0,  496,  507,  491,
+      497,  496,  472,    0,  498,  491,  488,    0,  491, 1191,
+        0,    0,  495,  507,  530,  510,  503,  519,  517,    0,
+
+      510,  527,  513,  498,  536,  519,  516,  517, 1191,  528,
+      533,  525,  503,  522,  536,  538,    0, 1191,  519,    0,
+        0,  531,  541,  546,  534,  528,  547,  531,  524,  562,
+      534,  546,    0,  552,    0,  548,  526,  550,  559,    0,
+      543,  543,  538,  561,  546,  561,  562,  551,    0,  573,
+      556,  556,  547,  554,    0,  559,  572,  568,  552,  556,
+      574,    0,  555,    0,  575,  587,  579,  570,  583,  577,
+      573,  583,  588,  593,  582,  567,  575,  593, 1191,    0,
+        0,  578,  581,  572,    0,  582,  595,  581,  579,  597,
+      600,  599,  591,  589,  602,    0,  600,  600,  603,  606,
+
+      596,  588,  609,  590,  591,  598,  605,    0,    0,  601,
+      604,  604,  611,  615,  619,  617,  609,  622,  614,  604,
+      616,  630,  627,  617,  619,  624,  617,  621,  620,  622,
+      621,  627,    0,  637,  638,  639,  627,  631,    0,  633,
+      630,    0,  630,  631,  646,  634,  652,  640,    0,  636,
+      637,  648,  657,  644,  641,  647,  653,    0,  648,  650,
+        0, 1191,  680,  683,  686,  689,  692
     } ;
 
-static yyconst short int yy_def[950] =
+static yyconst short int yy_def[968] =
     {   0,
-      944,    1,  944,  944,  944,  944,  944,  944,  944,  944,
-      944,  944,  944,  944,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  944,  944,  944,  944,  944,  944,  944,
-      944,  944,  944,  944,  944,  944,  944,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  944,  944,  944,  944,  944,  944,  944,  944,
-      944,  944,  944,  944,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  944,  944,  944,
-      944,  944,  944,  944,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  944,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  944,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  944,  944,  944,  944,  945,  945,  945,  945,
-
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  944,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  944,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  944,  944,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  944,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  944,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  944,  944,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  944,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  944,  945,
-
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  944,
-      944,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      944,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      944,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  944,  944,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  944,  945,
-      945,  945,  945,  945,  945,  944,  945,  945,  945,  945,
-
-      945,  945,  945,  945,  945,  945,  945,  945,  944,  944,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  944,  945,  945,  945,
-      945,  945,  944,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  946,  944,  947,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  944,
-      945,  945,  945,  945,  944,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  944,  948,  945,  945,  945,  949,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  944,
-      945,  945,  945,  944,  945,  945,  945,  945,  945,  945,
-
-      945,  944,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  944,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  944,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  944,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      944,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
-      945,  945,  945,    0,  944,  944,  944,  944,  944
+      962,    1,  962,  962,  962,  962,  962,  962,  962,  962,
+      962,  962,  962,  962,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  962,  962,  962,  962,  962,  962,  962,
+      962,  962,  962,  962,  962,  962,  962,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  962,  962,  962,  962,  962,  962,  962,  962,
+      962,  962,  962,  962,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  962,
+      962,  962,  962,  962,  962,  962,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  962,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  962,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  962,  962,  962,  962,
+
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  962,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  962,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      962,  962,  963,  963,  963,  963,  963,  963,  963,  963,
+
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  962,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  962,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      962,  962,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  962,  963,  963,  963,  963,
+
+      963,  963,  963,  963,  963,  963,  963,  962,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      962,  962,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  962,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  962,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  962,
+      962,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+
+      962,  963,  963,  963,  963,  963,  963,  962,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  962,  962,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  962,
+      963,  963,  963,  963,  963,  962,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  964,  962,  965,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  962,  963,  963,  963,  963,  962,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  962,
+      966,  963,  963,  963,  967,  963,  963,  963,  963,  963,
+
+      963,  963,  963,  963,  962,  963,  963,  963,  962,  963,
+      963,  963,  963,  963,  963,  963,  963,  962,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  962,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  962,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  962,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  962,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,    0,  962,  962,  962,  962,  962
     } ;
 
-static yyconst short int yy_nxt[1240] =
+static yyconst short int yy_nxt[1258] =
     {   0,
         4,    5,    6,    7,    8,    9,    4,    4,    4,   10,
        11,   12,   12,   12,   12,   12,   13,   14,   15,   16,
@@ -662,58 +668,58 @@ static yyconst short int yy_nxt[1240] =
        24,   24,   39,   24,   40,   41,   24,   24,   24,   42,
        24,   24,   43,   24,   24,   24,   44,   44,   44,   46,
        46,   46,   46,   46,   44,   53,   44,   44,   44,   54,
-       66,  192,  193,   45,   45,   45,   66,   66,   97,   44,
+       66,  192,  193,   45,   45,   45,   66,   66,   96,   44,
       169,   45,   66,   45,   45,   45,   47,   61,   48,   48,
 
        48,   48,   48,   61,   61,   66,   45,   44,  181,   61,
-       49,  213,  164,   98,  323,  214,  182,   66,   59,   60,
-       67,  103,   61,   50,   51,   52,   55,   68,   56,   56,
-       56,   56,   56,  112,   61,   61,  175,   44,   62,   57,
-       69,  324,   82,  387,   66,  388,   70,   92,  154,   66,
-       83,   66,   87,   66,   45,   93,   63,   64,   65,  176,
-       88,   61,   89,  183,   57,   71,   61,   66,   61,  722,
-       61,   84,   94,   72,   66,   85,   73,  221,  222,   74,
-      184,   95,   96,   90,   61,   86,   66,   66,   75,   99,
-       76,   61,  146,   66,   77,   91,  723,   78,   79,   80,
-
-       66,  101,   81,   61,   61,  109,  104,   66,   66,   66,
-       61,  262,   66,   66,  550,  160,  156,   61,  551,  263,
-      102,  724,  113,  105,   61,   61,   61,  106,   66,   61,
-       61,  107,  100,   66,  110,  108,  114,  265,  232,  162,
-      124,  246,  111,  155,  233,   61,  115,   66,  125,   66,
-       61,  266,  725,  247,  126,  726,  116,  727,   66,  521,
-      147,  117,  728,  157,   61,  290,   61,  148,  161,  729,
-      118,  149,  522,  150,  151,   61,  158,  119,  120,  121,
-      291,  292,  122,  382,  159,  123,   66,  383,  513,  152,
-      730,  127,  712,  153,  384,  128,  713,  514,  731,  129,
-
-      732,  130,  131,   61,   46,   46,   46,   46,   46,  132,
-      200,  523,  201,  202,  518,  519,  733,  133,  734,  203,
-      735,  524,  134,  135,  717,  525,  736,  136,  737,  173,
-      173,  137,   66,  174,  174,  174,  174,  174,  738,  718,
-      739,  138,  740,  741,  139,  140,  141,  142,  143,   61,
-       48,   48,   48,   48,   48,  144,  171,  171,  171,  171,
-      171,  166,  174,  174,  174,  174,  174,  172,  742,   55,
-      145,   56,   56,   56,   56,   56,  174,  174,  174,  174,
-      174,  743,   57,  280,  280,  744,  166,  281,  281,  281,
-      281,  281,  172,  171,  171,  171,  171,  171,  281,  281,
-
-      281,  281,  281,  745,  282,  283,  283,   57,  746,  284,
-      284,  284,  284,  284,  281,  281,  281,  281,  281,  395,
-      395,  747,  748,  396,  396,  396,  396,  396,  749,  282,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
-      750,  751,  752,  753,  754,  755,  756,  757,  758,  759,
-      760,  761,  762,  763,  764,  765,  766,  767,  768,  769,
-      770,  771,  772,  773,  774,  776,  775,  775,  778,  775,
-      775,  775,  775,  775,  775,  775,  775,  779,  780,  781,
-      782,  783,  775,  775,  784,  785,  786,  787,  788,  789,
-
-      790,  791,  792,  793,  794,  795,  796,  797,  798,  799,
-      800,  801,  803,  804,  802,  802,  806,  802,  802,  802,
-      802,  802,  802,  802,  802,  807,  808,  809,  810,  811,
-      802,  802,  812,  813,  814,  815,  816,  817,  818,  819,
-      820,  821,  822,  823,  824,  825,  826,  827,  828,  829,
+       49,  212,  164,   97,  721,  213,  182,   66,   59,   60,
+       67,  102,   61,   50,   51,   52,   55,   68,   56,   56,
+       56,   56,   56,  111,   61,   61,   66,   44,   62,   57,
+       69,  249,   81,  722,   66,  250,   70,   91,  154,   66,
+       82,   66,   86,   61,   45,   92,   63,   64,   65,  723,
+       87,   61,   88,  183,   57,   71,   61,   66,   61,  324,
+      155,   83,   93,   72,   66,   84,   73,  220,  221,   74,
+      184,   94,   95,   89,   61,   85,   66,   66,   75,   98,
+       76,   61,   66,   66,   77,   90,  325,   78,   79,   66,
+
+       66,  100,   80,   61,   61,  103,  108,  112,   66,   61,
+       61,   66,  231,  146,  724,  175,   61,   61,  232,  124,
+      101,  113,  104,  156,   66,   61,  105,  125,   61,  114,
+      106,  115,   99,  126,  107,  109,  727,   66,  176,   66,
+      246,   61,  264,  110,   66,   66,  157,  528,  247,  267,
+      265,  158,  248,  116,   61,   66,   61,  147,  117,  159,
+      529,   61,   61,  268,  148,  728,  162,  118,  149,  292,
+      150,  151,   61,  559,  119,  120,  121,  560,  160,  122,
+      161,  530,  123,   66,  293,  294,  152,  391,  127,  392,
+      153,  531,  128,  525,  526,  532,  129,  729,  130,  131,
+
+       61,   46,   46,   46,   46,   46,  132,  199,  520,  200,
+      201,  386,  732,  733,  133,  387,  202,  521,  734,  134,
+      135,  725,  388,  735,  136,  726,  173,  173,  137,   66,
+      174,  174,  174,  174,  174,  736,  737,  738,  138,  739,
+      740,  139,  140,  141,  142,  143,   61,   48,   48,   48,
+       48,   48,  144,  171,  171,  171,  171,  171,  166,  174,
+      174,  174,  174,  174,  172,  741,   55,  145,   56,   56,
+       56,   56,   56,  174,  174,  174,  174,  174,  742,   57,
+      282,  282,  743,  166,  283,  283,  283,  283,  283,  172,
+      171,  171,  171,  171,  171,  283,  283,  283,  283,  283,
+
+      744,  284,  285,  285,   57,  745,  286,  286,  286,  286,
+      286,  283,  283,  283,  283,  283,  399,  399,  746,  747,
+      400,  400,  400,  400,  400,  748,  284,  286,  286,  286,
+      286,  286,  286,  286,  286,  286,  286,  400,  400,  400,
+      400,  400,  400,  400,  400,  400,  400,  730,  749,  750,
+      751,  752,  753,  754,  755,  756,  757,  758,  759,  760,
+      761,  762,  731,  763,  764,  765,  766,  767,  768,  769,
+      770,  771,  772,  773,  774,  775,  776,  777,  778,  779,
+      780,  781,  782,  783,  784,  785,  786,  787,  788,  789,
+      791,  790,  790,  793,  790,  790,  790,  790,  790,  790,
+
+      790,  790,  794,  795,  796,  797,  798,  790,  790,  799,
+      800,  801,  802,  803,  804,  805,  806,  807,  808,  809,
+      810,  811,  812,  813,  814,  815,  816,  817,  819,  820,
+      818,  818,  822,  818,  818,  818,  818,  818,  818,  818,
+      818,  823,  824,  825,  826,  827,  818,  818,  828,  829,
       830,  831,  832,  833,  834,  835,  836,  837,  838,  839,
       840,  841,  842,  843,  844,  845,  846,  847,  848,  849,
       850,  851,  852,  853,  854,  855,  856,  857,  858,  859,
@@ -726,73 +732,75 @@ static yyconst short int yy_nxt[1240] =
       910,  911,  912,  913,  914,  915,  916,  917,  918,  919,
       920,  921,  922,  923,  924,  925,  926,  927,  928,  929,
       930,  931,  932,  933,  934,  935,  936,  937,  938,  939,
-      940,  941,  942,  943,   58,  775,  721,  775,  777,  720,
-      777,  802,  719,  802,  805,  716,  805,  715,  714,  711,
-      710,  709,  708,  707,  706,  705,  704,  703,  702,  701,
-      700,  699,  698,  697,  696,  695,  694,  693,  692,  691,
-
-      690,  689,  688,  687,  686,  685,  684,  683,  682,  681,
-      680,  679,  678,  677,  676,  675,  674,  673,  672,  671,
-      670,  669,  668,  667,  666,  665,  664,  663,  662,  661,
-      660,  659,  658,  657,  656,  655,  654,  653,  652,  651,
-      650,  649,  648,  647,  646,  645,  644,  643,  642,  641,
-      640,  639,  638,  637,  636,  635,  634,  633,  632,  631,
-      630,  629,  628,  627,  626,  625,  624,  623,  622,  621,
-      620,  619,  618,  617,  616,  615,  614,  613,  612,  611,
-      610,  609,  608,  607,  606,  605,  604,  603,  602,  601,
-      600,  599,  598,  597,  596,  595,  594,  593,  592,  591,
-
-      590,  589,  588,  587,  586,  585,  584,  583,  582,  581,
-      580,  579,  578,  577,  576,  575,  574,  573,  572,  571,
-      570,  569,  568,  567,  566,  565,  564,  563,  562,  561,
-      560,  559,  558,  557,  556,  555,  554,  553,  552,  549,
-      548,  547,  546,  545,  544,  543,  542,  541,  540,  539,
-      538,  537,  536,  535,  534,  533,  532,  531,  530,  529,
-      528,  527,  526,  520,  517,  516,  515,  512,  511,  510,
-      509,  508,  507,  506,  505,  504,  503,  502,  501,  500,
-      499,  498,  497,  496,  495,  494,  493,  492,  491,  490,
-      489,  488,  487,  486,  485,  484,  483,  482,  481,  480,
-
-      479,  478,  477,  476,  475,  474,  473,  472,  471,  470,
-      469,  468,  467,  466,  465,  464,  463,  462,  461,  460,
-      459,  458,  457,  456,  455,  454,  453,  452,  451,  450,
-      449,  448,  447,  446,  445,  444,  443,  442,  441,  440,
-      439,  438,  437,  436,  435,  434,  433,  432,  431,  430,
-      429,  428,  427,  426,  425,  424,  423,  422,  421,  420,
-      419,  418,  417,  416,  415,  414,  413,  412,  411,  410,
-      409,  408,  407,  406,  405,  404,  403,  402,  401,  400,
-      399,  398,  397,  394,  393,  392,  391,  390,  389,  386,
-      385,  381,  380,  379,  378,  377,  376,  375,  374,  373,
-
-      372,  371,  370,  369,  368,  367,  366,  365,  364,  363,
-      362,  361,  360,  359,  358,  357,  356,  355,  354,  353,
-      352,  351,  350,  349,  348,  347,  346,  345,  344,  343,
-      342,  341,  340,  339,  338,  337,  336,  335,  334,  333,
-      332,  331,  330,  329,  328,  327,  326,  325,  322,  321,
-      320,  319,  318,  317,  316,  315,  314,  313,  312,  311,
-      310,  309,  308,  307,  306,  305,  304,  303,  302,  301,
-      300,  299,  298,  297,  296,  295,  294,  293,  289,  288,
-      287,  286,  285,  279,  278,  277,  276,  275,  274,  273,
-      272,  271,  270,  269,  268,  267,  264,  261,  260,  259,
-
-      258,  257,  256,  255,  254,  253,  252,  251,  250,  249,
-      248,  245,  244,  243,  242,  241,  240,  239,  238,  237,
-      236,  235,  234,  231,  230,  229,  228,  227,  226,  225,
-      224,  223,  220,  219,  218,  217,  216,  215,  212,  211,
-      210,  209,  208,  207,  206,  205,  204,  199,  198,  197,
-      196,  195,  194,  191,  190,  189,  188,  187,  186,  185,
-      175,  180,  179,  178,  177,  170,  168,  167,  165,  164,
-      163,  944,    3,  944,  944,  944,  944,  944,  944,  944,
-      944,  944,  944,  944,  944,  944,  944,  944,  944,  944,
-      944,  944,  944,  944,  944,  944,  944,  944,  944,  944,
-
-      944,  944,  944,  944,  944,  944,  944,  944,  944,  944,
-      944,  944,  944,  944,  944,  944,  944,  944,  944,  944,
-      944,  944,  944,  944,  944,  944,  944,  944,  944,  944,
-      944,  944,  944,  944,  944,  944,  944,  944,  944
+      940,  941,  942,  943,  944,  945,  946,  947,  948,  949,
+      950,  951,  952,  953,  954,  955,  956,  957,  958,  959,
+      960,  961,   58,  790,  720,  790,  792,  719,  792,  818,
+      718,  818,  821,  717,  821,  716,  715,  714,  713,  712,
+
+      711,  710,  709,  708,  707,  706,  705,  704,  703,  702,
+      701,  700,  699,  698,  697,  696,  695,  694,  693,  692,
+      691,  690,  689,  688,  687,  686,  685,  684,  683,  682,
+      681,  680,  679,  678,  677,  676,  675,  674,  673,  672,
+      671,  670,  669,  668,  667,  666,  665,  664,  663,  662,
+      661,  660,  659,  658,  657,  656,  655,  654,  653,  652,
+      651,  650,  649,  648,  647,  646,  645,  644,  643,  642,
+      641,  640,  639,  638,  637,  636,  635,  634,  633,  632,
+      631,  630,  629,  628,  627,  626,  625,  624,  623,  622,
+      621,  620,  619,  618,  617,  616,  615,  614,  613,  612,
+
+      611,  610,  609,  608,  607,  606,  605,  604,  603,  602,
+      601,  600,  599,  598,  597,  596,  595,  594,  593,  592,
+      591,  590,  589,  588,  587,  586,  585,  584,  583,  582,
+      581,  580,  579,  578,  577,  576,  575,  574,  573,  572,
+      571,  570,  569,  568,  567,  566,  565,  564,  563,  562,
+      561,  558,  557,  556,  555,  554,  553,  552,  551,  550,
+      549,  548,  547,  546,  545,  544,  543,  542,  541,  540,
+      539,  538,  537,  536,  535,  534,  533,  527,  524,  523,
+      522,  519,  518,  517,  516,  515,  514,  513,  512,  511,
+      510,  509,  508,  507,  506,  505,  504,  503,  502,  501,
+
+      500,  499,  498,  497,  496,  495,  494,  493,  492,  491,
+      490,  489,  488,  487,  486,  485,  484,  483,  482,  481,
+      480,  479,  478,  477,  476,  475,  474,  473,  472,  471,
+      470,  469,  468,  467,  466,  465,  464,  463,  462,  461,
+      460,  459,  458,  457,  456,  455,  454,  453,  452,  451,
+      450,  449,  448,  447,  446,  445,  444,  443,  442,  441,
+      440,  439,  438,  437,  436,  435,  434,  433,  432,  431,
+      430,  429,  428,  427,  426,  425,  424,  423,  422,  421,
+      420,  419,  418,  417,  416,  415,  414,  413,  412,  411,
+      410,  409,  408,  407,  406,  405,  404,  403,  402,  401,
+
+      398,  397,  396,  395,  394,  393,  390,  389,  385,  384,
+      383,  382,  381,  380,  379,  378,  377,  376,  375,  374,
+      373,  372,  371,  370,  369,  368,  367,  366,  365,  364,
+      363,  362,  361,  360,  359,  358,  357,  356,  355,  354,
+      353,  352,  351,  350,  349,  348,  347,  346,  345,  344,
+      343,  342,  341,  340,  339,  338,  337,  336,  335,  334,
+      333,  332,  331,  330,  329,  328,  327,  326,  323,  322,
+      321,  320,  319,  318,  317,  316,  315,  314,  313,  312,
+      311,  310,  309,  308,  307,  306,  305,  304,  303,  302,
+      301,  300,  299,  298,  297,  296,  295,  291,  290,  289,
+
+      288,  287,  281,  280,  279,  278,  277,  276,  275,  274,
+      273,  272,  271,  270,  269,  266,  263,  262,  261,  260,
+      259,  258,  257,  256,  255,  254,  253,  252,  251,  245,
+      244,  243,  242,  241,  240,  239,  238,  237,  236,  235,
+      234,  233,  230,  229,  228,  227,  226,  225,  224,  223,
+      222,  219,  218,  217,  216,  215,  214,  211,  210,  209,
+      208,  207,  206,  205,  204,  203,  198,  197,  196,  195,
+      194,  191,  190,  189,  188,  187,  186,  185,  175,  180,
+      179,  178,  177,  170,  168,  167,  165,  164,  163,  962,
+        3,  962,  962,  962,  962,  962,  962,  962,  962,  962,
+
+      962,  962,  962,  962,  962,  962,  962,  962,  962,  962,
+      962,  962,  962,  962,  962,  962,  962,  962,  962,  962,
+      962,  962,  962,  962,  962,  962,  962,  962,  962,  962,
+      962,  962,  962,  962,  962,  962,  962,  962,  962,  962,
+      962,  962,  962,  962,  962,  962,  962,  962,  962,  962,
+      962,  962,  962,  962,  962,  962,  962
     } ;
 
-static yyconst short int yy_chk[1240] =
+static yyconst short int yy_chk[1258] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -806,130 +814,132 @@ static yyconst short int yy_chk[1240] =
        51,    9,   28,   13,   14,    8,   10,   24,   10,   10,
 
        10,   10,   10,   21,   25,   16,   11,   10,   64,   28,
-       10,   91,   51,   21,  211,   91,   64,   36,   15,   15,
+       10,   90,   51,   21,  677,   90,   64,   36,   15,   15,
        16,   25,   16,   10,   10,   10,   12,   16,   12,   12,
-       12,   12,   12,   28,   36,   15,   59,   12,   15,   12,
-       16,  211,   18,  273,   18,  273,   16,   20,   36,   20,
-       18,   19,   19,   34,   12,   20,   15,   15,   15,   59,
-       19,   18,   19,   65,   12,   17,   20,   17,   19,  680,
-       34,   18,   20,   17,   41,   18,   17,   98,   98,   17,
+       12,   12,   12,   28,   36,   15,   37,   12,   15,   12,
+       16,  123,   18,  680,   18,  123,   16,   20,   36,   20,
+       18,   19,   19,   37,   12,   20,   15,   15,   15,  681,
+       19,   18,   19,   65,   12,   17,   20,   17,   19,  210,
+       37,   18,   20,   17,   34,   18,   17,   97,   97,   17,
        65,   20,   20,   19,   17,   18,   23,   22,   17,   22,
-       17,   41,   34,   38,   17,   19,  681,   17,   17,   17,
-
-       26,   23,   17,   23,   22,   27,   26,   27,   29,   37,
-       38,  145,   43,   31,  469,   41,   38,   26,  469,  145,
-       23,  682,   29,   26,   27,   29,   37,   26,   39,   43,
-       31,   26,   22,   42,   27,   26,   29,  147,  108,   43,
-       31,  122,   27,   37,  108,   39,   29,   30,   31,   40,
-       42,  147,  683,  122,   31,  687,   30,  689,   35,  432,
-       35,   30,  690,   39,   30,  180,   40,   35,   42,  691,
-       30,   35,  432,   35,   35,   35,   40,   30,   30,   30,
-      180,  180,   30,  270,   40,   30,   32,  270,  426,   35,
-      692,   32,  671,   35,  270,   32,  671,  426,  694,   32,
-
-      695,   32,   32,   32,   46,   46,   46,   46,   46,   32,
-       81,  433,   81,   81,  430,  430,  696,   32,  697,   81,
-      698,  433,   32,   32,  676,  433,  699,   32,  700,   57,
-       57,   32,   33,   57,   57,   57,   57,   57,  701,  676,
-      703,   33,  704,  705,   33,   33,   33,   33,   33,   33,
-       48,   48,   48,   48,   48,   33,   55,   55,   55,   55,
-       55,   48,  173,  173,  173,  173,  173,   55,  706,   56,
-       33,   56,   56,   56,   56,   56,  174,  174,  174,  174,
-      174,  708,   56,  166,  166,  709,   48,  166,  166,  166,
-      166,  166,   55,  171,  171,  171,  171,  171,  280,  280,
-
-      280,  280,  280,  710,  171,  172,  172,   56,  711,  172,
-      172,  172,  172,  172,  281,  281,  281,  281,  281,  282,
-      282,  712,  713,  282,  282,  282,  282,  282,  714,  171,
-      283,  283,  283,  283,  283,  284,  284,  284,  284,  284,
-      395,  395,  395,  395,  395,  396,  396,  396,  396,  396,
-      715,  716,  717,  718,  719,  720,  721,  722,  723,  725,
-      727,  729,  730,  731,  732,  733,  734,  735,  736,  738,
-      739,  740,  741,  742,  743,  745,  746,  746,  747,  746,
-      746,  746,  746,  746,  746,  746,  746,  748,  749,  750,
-      752,  753,  746,  746,  754,  755,  756,  757,  758,  759,
-
-      760,  761,  762,  764,  765,  766,  767,  768,  770,  771,
-      772,  774,  778,  779,  780,  780,  781,  780,  780,  780,
-      780,  780,  780,  780,  780,  782,  783,  784,  786,  787,
-      780,  780,  788,  789,  790,  791,  792,  793,  795,  796,
-      797,  798,  799,  800,  803,  806,  807,  808,  809,  810,
-      811,  812,  813,  814,  815,  816,  818,  820,  821,  822,
-      824,  825,  826,  827,  828,  829,  830,  831,  833,  834,
-      835,  836,  837,  838,  839,  840,  841,  842,  843,  845,
-      847,  848,  849,  850,  851,  852,  853,  854,  855,  856,
-      857,  858,  859,  860,  864,  865,  866,  868,  869,  870,
-
-      871,  872,  873,  874,  875,  876,  877,  879,  880,  881,
-      882,  883,  884,  885,  886,  887,  888,  889,  892,  893,
-      894,  895,  896,  897,  898,  899,  900,  901,  902,  903,
-      904,  905,  906,  907,  908,  909,  910,  911,  912,  913,
-      914,  916,  917,  918,  919,  920,  922,  923,  925,  926,
-      927,  928,  929,  930,  932,  933,  934,  935,  936,  937,
-      938,  939,  941,  942,  945,  946,  679,  946,  947,  678,
-      947,  948,  677,  948,  949,  674,  949,  673,  672,  670,
-      669,  668,  665,  664,  663,  662,  661,  659,  658,  657,
-      655,  654,  653,  652,  651,  649,  648,  647,  646,  645,
-
-      644,  641,  640,  639,  638,  637,  636,  635,  634,  633,
-      632,  631,  630,  629,  628,  627,  626,  625,  624,  623,
-      622,  621,  620,  619,  617,  616,  614,  613,  612,  611,
-      610,  608,  607,  606,  605,  604,  603,  602,  601,  599,
-      598,  596,  595,  594,  593,  592,  591,  589,  588,  587,
-      585,  584,  583,  582,  580,  579,  578,  577,  576,  575,
-      574,  573,  572,  570,  569,  567,  566,  565,  564,  563,
-      562,  558,  557,  556,  554,  552,  551,  550,  549,  548,
-      547,  546,  544,  542,  541,  540,  539,  538,  536,  534,
-      531,  530,  528,  527,  526,  525,  524,  523,  522,  521,
-
-      520,  519,  518,  516,  515,  514,  513,  512,  509,  508,
-      507,  505,  504,  503,  502,  501,  500,  498,  496,  495,
-      494,  493,  492,  489,  488,  487,  486,  485,  484,  483,
-      480,  479,  477,  476,  475,  474,  473,  472,  470,  468,
-      467,  466,  465,  464,  463,  461,  460,  459,  455,  454,
-      453,  450,  449,  447,  446,  444,  443,  441,  440,  438,
-      437,  436,  435,  431,  429,  428,  427,  425,  424,  423,
-      422,  421,  419,  418,  417,  416,  415,  414,  413,  412,
-      411,  410,  409,  408,  407,  406,  404,  403,  402,  401,
-      400,  399,  398,  397,  394,  393,  392,  391,  390,  389,
-
-      388,  385,  384,  383,  382,  380,  378,  377,  376,  375,
-      374,  372,  371,  370,  369,  367,  364,  363,  362,  361,
-      360,  359,  358,  357,  356,  355,  354,  353,  352,  351,
-      350,  349,  348,  346,  344,  342,  341,  339,  338,  337,
-      336,  335,  334,  333,  332,  330,  328,  327,  326,  325,
-      324,  323,  322,  321,  320,  319,  318,  317,  314,  313,
-      312,  310,  309,  307,  306,  305,  304,  303,  302,  301,
-      299,  298,  297,  296,  295,  294,  292,  291,  290,  289,
-      288,  287,  285,  279,  278,  277,  276,  275,  274,  272,
-      271,  269,  268,  267,  266,  265,  264,  263,  262,  261,
-
-      260,  259,  258,  257,  256,  255,  254,  253,  252,  251,
-      250,  249,  248,  247,  246,  245,  244,  243,  242,  241,
-      240,  239,  238,  237,  236,  235,  234,  233,  232,  231,
-      230,  229,  228,  227,  226,  225,  224,  223,  222,  221,
-      220,  219,  218,  217,  216,  215,  214,  212,  210,  209,
-      208,  207,  206,  205,  204,  203,  202,  201,  200,  199,
-      198,  197,  196,  195,  194,  193,  192,  191,  190,  189,
-      188,  187,  186,  185,  184,  183,  182,  181,  179,  178,
-      177,  176,  175,  164,  163,  162,  161,  160,  159,  158,
-      157,  156,  155,  154,  153,  152,  146,  144,  141,  139,
-
-      137,  136,  135,  134,  133,  132,  127,  126,  125,  124,
-      123,  121,  119,  118,  117,  116,  115,  114,  113,  112,
-      111,  110,  109,  107,  106,  105,  104,  103,  102,  101,
-      100,   99,   97,   96,   95,   94,   93,   92,   90,   89,
-       88,   87,   86,   85,   84,   83,   82,   80,   79,   78,
-       77,   76,   75,   73,   72,   71,   70,   69,   68,   67,
-       66,   63,   62,   61,   60,   52,   50,   49,   47,   45,
-       44,    3,  944,  944,  944,  944,  944,  944,  944,  944,
-      944,  944,  944,  944,  944,  944,  944,  944,  944,  944,
-      944,  944,  944,  944,  944,  944,  944,  944,  944,  944,
-
-      944,  944,  944,  944,  944,  944,  944,  944,  944,  944,
-      944,  944,  944,  944,  944,  944,  944,  944,  944,  944,
-      944,  944,  944,  944,  944,  944,  944,  944,  944,  944,
-      944,  944,  944,  944,  944,  944,  944,  944,  944
+       17,   34,   31,   29,   17,   19,  210,   17,   17,   26,
+
+       38,   23,   17,   23,   22,   26,   27,   29,   27,   31,
+       29,   39,  107,   34,  682,   59,   26,   38,  107,   31,
+       23,   29,   26,   38,   40,   27,   26,   31,   39,   29,
+       26,   29,   22,   31,   26,   27,  684,   41,   59,   43,
+      122,   40,  145,   27,   30,   42,   39,  436,  122,  147,
+      145,   40,  122,   30,   41,   35,   43,   35,   30,   40,
+      436,   30,   42,  147,   35,  685,   43,   30,   35,  180,
+       35,   35,   35,  476,   30,   30,   30,  476,   41,   30,
+       42,  437,   30,   32,  180,  180,   35,  275,   32,  275,
+       35,  437,   32,  434,  434,  437,   32,  686,   32,   32,
+
+       32,   46,   46,   46,   46,   46,   32,   80,  430,   80,
+       80,  272,  689,  690,   32,  272,   80,  430,  691,   32,
+       32,  683,  272,  692,   32,  683,   57,   57,   32,   33,
+       57,   57,   57,   57,   57,  693,  694,  695,   33,  699,
+      701,   33,   33,   33,   33,   33,   33,   48,   48,   48,
+       48,   48,   33,   55,   55,   55,   55,   55,   48,  173,
+      173,  173,  173,  173,   55,  702,   56,   33,   56,   56,
+       56,   56,   56,  174,  174,  174,  174,  174,  703,   56,
+      166,  166,  704,   48,  166,  166,  166,  166,  166,   55,
+      171,  171,  171,  171,  171,  282,  282,  282,  282,  282,
+
+      706,  171,  172,  172,   56,  707,  172,  172,  172,  172,
+      172,  283,  283,  283,  283,  283,  284,  284,  708,  709,
+      284,  284,  284,  284,  284,  710,  171,  285,  285,  285,
+      285,  285,  286,  286,  286,  286,  286,  399,  399,  399,
+      399,  399,  400,  400,  400,  400,  400,  688,  711,  712,
+      713,  714,  716,  717,  718,  719,  721,  722,  723,  724,
+      725,  726,  688,  727,  728,  729,  730,  731,  732,  733,
+      734,  735,  736,  738,  740,  742,  743,  744,  745,  746,
+      747,  748,  749,  751,  752,  753,  754,  755,  756,  757,
+      759,  760,  760,  761,  760,  760,  760,  760,  760,  760,
+
+      760,  760,  762,  763,  764,  766,  767,  760,  760,  768,
+      769,  770,  771,  772,  773,  774,  775,  776,  778,  779,
+      780,  781,  782,  783,  785,  786,  787,  789,  793,  794,
+      795,  795,  796,  795,  795,  795,  795,  795,  795,  795,
+      795,  797,  798,  799,  801,  802,  795,  795,  803,  804,
+      805,  806,  807,  808,  810,  811,  812,  813,  814,  815,
+      816,  819,  822,  823,  824,  825,  826,  827,  828,  829,
+      830,  831,  832,  834,  836,  837,  838,  839,  841,  842,
+      843,  844,  845,  846,  847,  848,  850,  851,  852,  853,
+      854,  856,  857,  858,  859,  860,  861,  863,  865,  866,
+
+      867,  868,  869,  870,  871,  872,  873,  874,  875,  876,
+      877,  878,  882,  883,  884,  886,  887,  888,  889,  890,
+      891,  892,  893,  894,  895,  897,  898,  899,  900,  901,
+      902,  903,  904,  905,  906,  907,  910,  911,  912,  913,
+      914,  915,  916,  917,  918,  919,  920,  921,  922,  923,
+      924,  925,  926,  927,  928,  929,  930,  931,  932,  934,
+      935,  936,  937,  938,  940,  941,  943,  944,  945,  946,
+      947,  948,  950,  951,  952,  953,  954,  955,  956,  957,
+      959,  960,  963,  964,  676,  964,  965,  675,  965,  966,
+      674,  966,  967,  673,  967,  671,  670,  669,  668,  666,
+
+      665,  664,  663,  662,  660,  659,  658,  657,  656,  655,
+      652,  651,  650,  649,  648,  647,  646,  645,  644,  643,
+      642,  641,  640,  639,  638,  637,  636,  635,  634,  633,
+      632,  631,  630,  628,  627,  625,  624,  623,  622,  621,
+      619,  618,  617,  616,  615,  614,  613,  611,  610,  608,
+      607,  605,  604,  603,  602,  601,  600,  598,  597,  596,
+      594,  593,  592,  591,  589,  588,  587,  586,  585,  584,
+      583,  582,  581,  579,  578,  576,  575,  574,  573,  572,
+      571,  567,  566,  565,  563,  561,  560,  559,  558,  557,
+      556,  555,  553,  551,  550,  549,  548,  547,  546,  545,
+
+      543,  541,  538,  537,  535,  534,  533,  532,  531,  530,
+      529,  528,  527,  526,  525,  523,  522,  521,  520,  519,
+      516,  515,  514,  512,  511,  510,  509,  508,  507,  505,
+      503,  502,  501,  500,  499,  496,  495,  494,  493,  492,
+      491,  490,  487,  486,  484,  483,  482,  481,  480,  479,
+      477,  475,  474,  473,  472,  471,  470,  468,  467,  466,
+      463,  460,  459,  458,  455,  454,  453,  451,  450,  448,
+      447,  445,  444,  442,  441,  440,  439,  435,  433,  432,
+      431,  429,  428,  427,  426,  425,  423,  422,  421,  420,
+      419,  418,  417,  416,  415,  414,  413,  412,  411,  410,
+
+      408,  407,  406,  405,  404,  403,  402,  401,  398,  397,
+      396,  395,  394,  393,  392,  389,  388,  387,  386,  384,
+      382,  381,  380,  379,  378,  376,  375,  374,  373,  371,
+      368,  367,  366,  365,  364,  363,  362,  361,  360,  359,
+      358,  357,  356,  355,  354,  353,  352,  351,  350,  349,
+      347,  345,  343,  342,  340,  339,  338,  337,  336,  335,
+      334,  333,  331,  329,  328,  327,  326,  325,  324,  323,
+      322,  321,  320,  319,  318,  315,  314,  313,  312,  311,
+      309,  308,  307,  306,  305,  304,  303,  301,  300,  299,
+      298,  297,  296,  294,  293,  292,  291,  290,  289,  287,
+
+      281,  280,  279,  278,  277,  276,  274,  273,  271,  270,
+      269,  268,  267,  266,  265,  264,  263,  262,  261,  260,
+      259,  258,  257,  256,  255,  254,  253,  252,  251,  250,
+      249,  248,  247,  246,  245,  244,  243,  242,  241,  240,
+      239,  238,  237,  236,  235,  234,  233,  232,  231,  230,
+      229,  228,  227,  226,  225,  224,  223,  222,  221,  220,
+      219,  218,  217,  216,  215,  214,  213,  211,  209,  208,
+      207,  206,  205,  204,  203,  202,  201,  200,  199,  198,
+      197,  196,  195,  194,  193,  192,  191,  190,  189,  188,
+      187,  186,  185,  184,  183,  182,  181,  179,  178,  177,
+
+      176,  175,  164,  163,  162,  161,  160,  159,  158,  157,
+      156,  155,  154,  153,  152,  146,  144,  141,  139,  137,
+      136,  135,  134,  133,  132,  127,  126,  125,  124,  121,
+      119,  118,  117,  116,  115,  114,  113,  112,  111,  110,
+      109,  108,  106,  105,  104,  103,  102,  101,  100,   99,
+       98,   96,   95,   94,   93,   92,   91,   89,   88,   87,
+       86,   85,   84,   83,   82,   81,   79,   78,   77,   76,
+       75,   73,   72,   71,   70,   69,   68,   67,   66,   63,
+       62,   61,   60,   52,   50,   49,   47,   45,   44,    3,
+      962,  962,  962,  962,  962,  962,  962,  962,  962,  962,
+
+      962,  962,  962,  962,  962,  962,  962,  962,  962,  962,
+      962,  962,  962,  962,  962,  962,  962,  962,  962,  962,
+      962,  962,  962,  962,  962,  962,  962,  962,  962,  962,
+      962,  962,  962,  962,  962,  962,  962,  962,  962,  962,
+      962,  962,  962,  962,  962,  962,  962,  962,  962,  962,
+      962,  962,  962,  962,  962,  962,  962
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -987,7 +997,7 @@ void   skipline(void);
 	     && ferror( yyin ) )					\
      YY_FATAL_ERROR( "input in flex scanner failed" );
 
-#line 991 "Gmsh.yy.cpp"
+#line 1001 "Gmsh.yy.cpp"
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -1135,13 +1145,13 @@ YY_MALLOC_DECL
 YY_DECL
 	{
 	register yy_state_type yy_current_state;
-	register char *yy_cp = NULL, *yy_bp = NULL;
+	register char *yy_cp, *yy_bp;
 	register int yy_act;
 
 #line 60 "Gmsh.l"
 
 
-#line 1145 "Gmsh.yy.cpp"
+#line 1155 "Gmsh.yy.cpp"
 
 	if ( yy_init )
 		{
@@ -1192,13 +1202,13 @@ yy_match:
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 945 )
+				if ( yy_current_state >= 963 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 			++yy_cp;
 			}
-		while ( yy_base[yy_current_state] != 1173 );
+		while ( yy_base[yy_current_state] != 1191 );
 
 yy_find_action:
 		yy_act = yy_accept[yy_current_state];
@@ -1386,143 +1396,143 @@ return tSpline;
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 99 "Gmsh.l"
-return tClip;
+#line 100 "Gmsh.l"
+return tDelete;
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
 #line 101 "Gmsh.l"
-return tDelete;
+return tDilate;
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
 #line 102 "Gmsh.l"
-return tDilate;
+return tDuplicata;
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 103 "Gmsh.l"
-return tDuplicata;
+#line 104 "Gmsh.l"
+return tExp ;
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
 #line 105 "Gmsh.l"
-return tExp ;
+return tEllipsis;
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
 #line 106 "Gmsh.l"
-return tEllipsis;
+return tExtrude;
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
 #line 107 "Gmsh.l"
-return tExtrude;
+return tElliptic;
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
 #line 108 "Gmsh.l"
-return tElliptic;
+return tELLIPSE;
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 109 "Gmsh.l"
-return tELLIPSE;
+#line 110 "Gmsh.l"
+return tFabs ;
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
 #line 111 "Gmsh.l"
-return tFabs ;
+return tFloor ;
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
 #line 112 "Gmsh.l"
-return tFloor ;
+return tFmod ;
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 113 "Gmsh.l"
-return tFmod ;
+#line 114 "Gmsh.l"
+return tGeneral;
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
 #line 115 "Gmsh.l"
-return tGeneral;
+return tGeometry;
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 116 "Gmsh.l"
-return tGeometry;
+#line 117 "Gmsh.l"
+return tHypot ;
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 118 "Gmsh.l"
-return tHypot ;
+#line 119 "Gmsh.l"
+return tInclude;
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 120 "Gmsh.l"
-return tInclude;
+#line 121 "Gmsh.l"
+return tKnots;
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 122 "Gmsh.l"
-return tKnots;
+#line 123 "Gmsh.l"
+return tLength;
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
 #line 124 "Gmsh.l"
-return tLength;
+return tLine;
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
 #line 125 "Gmsh.l"
-return tLine;
+return tLoop;
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
 #line 126 "Gmsh.l"
-return tLoop;
+return tLog ;
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
 #line 127 "Gmsh.l"
-return tLog ;
+return tLog10 ;
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
 #line 128 "Gmsh.l"
-return tLog10 ;
+return tLayers;
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 129 "Gmsh.l"
-return tLayers;
+#line 130 "Gmsh.l"
+return tMesh;
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
 #line 131 "Gmsh.l"
-return tMesh;
+return tModulo ;
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 132 "Gmsh.l"
-return tModulo ;
+#line 133 "Gmsh.l"
+return tNurbs;
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 134 "Gmsh.l"
-return tNurbs;
+#line 135 "Gmsh.l"
+return tOffset;
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
 #line 136 "Gmsh.l"
-return tOffset;
+return tOrder;
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
 #line 137 "Gmsh.l"
-return tOrder;
+return tOptions;
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
@@ -1561,451 +1571,461 @@ return tParametric;
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 147 "Gmsh.l"
-return tRecombine;
+#line 146 "Gmsh.l"
+return tPostProcessing;
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 148 "Gmsh.l"
-return tRotate;
+#line 147 "Gmsh.l"
+return tPrint;
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
 #line 149 "Gmsh.l"
-return tRuled;
+return tRecombine;
 	YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 151 "Gmsh.l"
-return tSqrt ;
+#line 150 "Gmsh.l"
+return tRotate;
 	YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 152 "Gmsh.l"
-return tSin ;
+#line 151 "Gmsh.l"
+return tRuled;
 	YY_BREAK
 case 73:
 YY_RULE_SETUP
 #line 153 "Gmsh.l"
-return tSinh ;
+return tSqrt ;
 	YY_BREAK
 case 74:
 YY_RULE_SETUP
 #line 154 "Gmsh.l"
-return tPhysical;
+return tSin ;
 	YY_BREAK
 case 75:
 YY_RULE_SETUP
 #line 155 "Gmsh.l"
-return tSpline;
+return tSinh ;
 	YY_BREAK
 case 76:
 YY_RULE_SETUP
 #line 156 "Gmsh.l"
-return tSurface;
+return tPhysical;
 	YY_BREAK
 case 77:
 YY_RULE_SETUP
 #line 157 "Gmsh.l"
-return tSymmetry;
+return tSpline;
 	YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 159 "Gmsh.l"
-return tTransfinite;
+#line 158 "Gmsh.l"
+return tSurface;
 	YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 160 "Gmsh.l"
-return tTranslate;
+#line 159 "Gmsh.l"
+return tSymmetry;
 	YY_BREAK
 case 80:
 YY_RULE_SETUP
 #line 161 "Gmsh.l"
-return tTanh ;
+return tTransfinite;
 	YY_BREAK
 case 81:
 YY_RULE_SETUP
 #line 162 "Gmsh.l"
-return tTan;
+return tTranslate;
 	YY_BREAK
 case 82:
 YY_RULE_SETUP
 #line 163 "Gmsh.l"
-return tTrimmed;
+return tTanh ;
 	YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 165 "Gmsh.l"
-return tUsing;
+#line 164 "Gmsh.l"
+return tTan;
 	YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 167 "Gmsh.l"
-return tView;
+#line 165 "Gmsh.l"
+return tTrimmed;
 	YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 168 "Gmsh.l"
-return tVolume;
+#line 167 "Gmsh.l"
+return tUsing;
 	YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 170 "Gmsh.l"
-return tWith;
+#line 169 "Gmsh.l"
+return tView;
 	YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 173 "Gmsh.l"
-return tScalarTetrahedron;
+#line 170 "Gmsh.l"
+return tVolume;
 	YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 174 "Gmsh.l"
-return tVectorTetrahedron;
+#line 172 "Gmsh.l"
+return tWith;
 	YY_BREAK
 case 89:
 YY_RULE_SETUP
 #line 175 "Gmsh.l"
-return tTensorTetrahedron;
+return tScalarTetrahedron;
 	YY_BREAK
 case 90:
 YY_RULE_SETUP
 #line 176 "Gmsh.l"
-return tScalarTriangle;
+return tVectorTetrahedron;
 	YY_BREAK
 case 91:
 YY_RULE_SETUP
 #line 177 "Gmsh.l"
-return tVectorTriangle;
+return tTensorTetrahedron;
 	YY_BREAK
 case 92:
 YY_RULE_SETUP
 #line 178 "Gmsh.l"
-return tTensorTriangle;
+return tScalarTriangle;
 	YY_BREAK
 case 93:
 YY_RULE_SETUP
 #line 179 "Gmsh.l"
-return tScalarLine;
+return tVectorTriangle;
 	YY_BREAK
 case 94:
 YY_RULE_SETUP
 #line 180 "Gmsh.l"
-return tVectorLine;
+return tTensorTriangle;
 	YY_BREAK
 case 95:
 YY_RULE_SETUP
 #line 181 "Gmsh.l"
-return tTensorLine;
+return tScalarLine;
 	YY_BREAK
 case 96:
 YY_RULE_SETUP
 #line 182 "Gmsh.l"
-return tScalarPoint;
+return tVectorLine;
 	YY_BREAK
 case 97:
 YY_RULE_SETUP
 #line 183 "Gmsh.l"
-return tVectorPoint;
+return tTensorLine;
 	YY_BREAK
 case 98:
 YY_RULE_SETUP
 #line 184 "Gmsh.l"
-return tTensorPoint;
+return tScalarPoint;
 	YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 187 "Gmsh.l"
-return tCARTESIAN_POINT;
+#line 185 "Gmsh.l"
+return tVectorPoint;
 	YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 188 "Gmsh.l"
-return tB_SPLINE_SURFACE_WITH_KNOTS;
+#line 186 "Gmsh.l"
+return tTensorPoint;
 	YY_BREAK
 case 101:
 YY_RULE_SETUP
 #line 189 "Gmsh.l"
-return tB_SPLINE_CURVE_WITH_KNOTS;
+return tCARTESIAN_POINT;
 	YY_BREAK
 case 102:
 YY_RULE_SETUP
 #line 190 "Gmsh.l"
-return tUNSPECIFIED;
+return tB_SPLINE_SURFACE_WITH_KNOTS;
 	YY_BREAK
 case 103:
 YY_RULE_SETUP
 #line 191 "Gmsh.l"
-return tCONTINUOUS;
+return tB_SPLINE_CURVE_WITH_KNOTS;
 	YY_BREAK
 case 104:
 YY_RULE_SETUP
 #line 192 "Gmsh.l"
-return tFALSE;
+return tUNSPECIFIED;
 	YY_BREAK
 case 105:
 YY_RULE_SETUP
 #line 193 "Gmsh.l"
-return tTRUE;
+return tCONTINUOUS;
 	YY_BREAK
 case 106:
 YY_RULE_SETUP
 #line 194 "Gmsh.l"
-return tU;
+return tFALSE;
 	YY_BREAK
 case 107:
 YY_RULE_SETUP
 #line 195 "Gmsh.l"
-return tV;
+return tTRUE;
 	YY_BREAK
 case 108:
 YY_RULE_SETUP
 #line 196 "Gmsh.l"
-return tORIENTED_EDGE;
+return tU;
 	YY_BREAK
 case 109:
 YY_RULE_SETUP
 #line 197 "Gmsh.l"
-return tEDGE_CURVE;
+return tV;
 	YY_BREAK
 case 110:
 YY_RULE_SETUP
 #line 198 "Gmsh.l"
-return tEDGE_LOOP;
+return tORIENTED_EDGE;
 	YY_BREAK
 case 111:
 YY_RULE_SETUP
 #line 199 "Gmsh.l"
-return tVERTEX_POINT;
+return tEDGE_CURVE;
 	YY_BREAK
 case 112:
 YY_RULE_SETUP
 #line 200 "Gmsh.l"
-return tFACE_OUTER_BOUND;
+return tEDGE_LOOP;
 	YY_BREAK
 case 113:
 YY_RULE_SETUP
 #line 201 "Gmsh.l"
-return tFACE_BOUND;
+return tVERTEX_POINT;
 	YY_BREAK
 case 114:
 YY_RULE_SETUP
 #line 202 "Gmsh.l"
-return tADVANCED_FACE;
+return tFACE_OUTER_BOUND;
 	YY_BREAK
 case 115:
 YY_RULE_SETUP
 #line 203 "Gmsh.l"
-return tLine;
+return tFACE_BOUND;
 	YY_BREAK
 case 116:
 YY_RULE_SETUP
 #line 204 "Gmsh.l"
-return tVECTOR;
+return tADVANCED_FACE;
 	YY_BREAK
 case 117:
 YY_RULE_SETUP
 #line 205 "Gmsh.l"
-return tDIRECTION;
+return tLine;
 	YY_BREAK
 case 118:
 YY_RULE_SETUP
 #line 206 "Gmsh.l"
-return tAXIS2_PLACEMENT_3D;
+return tVECTOR;
 	YY_BREAK
 case 119:
 YY_RULE_SETUP
 #line 207 "Gmsh.l"
-return tPLANE;
+return tDIRECTION;
 	YY_BREAK
 case 120:
 YY_RULE_SETUP
 #line 208 "Gmsh.l"
-return tHEADER;
+return tAXIS2_PLACEMENT_3D;
 	YY_BREAK
 case 121:
 YY_RULE_SETUP
 #line 209 "Gmsh.l"
-return tDATA;
+return tPLANE;
 	YY_BREAK
 case 122:
 YY_RULE_SETUP
 #line 210 "Gmsh.l"
-return tFILE_SCHEMA;
+return tHEADER;
 	YY_BREAK
 case 123:
 YY_RULE_SETUP
 #line 211 "Gmsh.l"
-return tFILE_NAME;
+return tDATA;
 	YY_BREAK
 case 124:
 YY_RULE_SETUP
 #line 212 "Gmsh.l"
-return tFILE_DESCRIPTION;
+return tFILE_SCHEMA;
 	YY_BREAK
 case 125:
 YY_RULE_SETUP
 #line 213 "Gmsh.l"
-return tISO;
+return tFILE_NAME;
 	YY_BREAK
 case 126:
 YY_RULE_SETUP
 #line 214 "Gmsh.l"
-return tENDISO;
+return tFILE_DESCRIPTION;
 	YY_BREAK
 case 127:
 YY_RULE_SETUP
 #line 215 "Gmsh.l"
-return tENDSEC;
+return tISO;
 	YY_BREAK
 case 128:
 YY_RULE_SETUP
 #line 216 "Gmsh.l"
-return tCLOSED_SHELL;
+return tENDISO;
 	YY_BREAK
 case 129:
 YY_RULE_SETUP
 #line 217 "Gmsh.l"
-return  tADVANCED_BREP_SHAPE_REPRESENTATION;
+return tENDSEC;
 	YY_BREAK
 case 130:
 YY_RULE_SETUP
 #line 218 "Gmsh.l"
-return tMANIFOLD_SOLID_BREP;
+return tCLOSED_SHELL;
 	YY_BREAK
 case 131:
 YY_RULE_SETUP
 #line 219 "Gmsh.l"
-return tCYLINDRICAL_SURFACE;
+return  tADVANCED_BREP_SHAPE_REPRESENTATION;
 	YY_BREAK
 case 132:
 YY_RULE_SETUP
 #line 220 "Gmsh.l"
-return tCONICAL_SURFACE;
+return tMANIFOLD_SOLID_BREP;
 	YY_BREAK
 case 133:
 YY_RULE_SETUP
 #line 221 "Gmsh.l"
-return tTOROIDAL_SURFACE;
+return tCYLINDRICAL_SURFACE;
 	YY_BREAK
 case 134:
 YY_RULE_SETUP
 #line 222 "Gmsh.l"
-return tCIRCLE;
+return tCONICAL_SURFACE;
 	YY_BREAK
 case 135:
 YY_RULE_SETUP
 #line 223 "Gmsh.l"
-return tTRIMMED_CURVE;
+return tTOROIDAL_SURFACE;
 	YY_BREAK
 case 136:
 YY_RULE_SETUP
 #line 224 "Gmsh.l"
-return tGEOMETRIC_SET;
+return tCIRCLE;
 	YY_BREAK
 case 137:
 YY_RULE_SETUP
 #line 225 "Gmsh.l"
-return tCOMPOSITE_CURVE_SEGMENT;
+return tTRIMMED_CURVE;
 	YY_BREAK
 case 138:
 YY_RULE_SETUP
 #line 226 "Gmsh.l"
-return tCOMPOSITE_CURVE;
+return tGEOMETRIC_SET;
 	YY_BREAK
 case 139:
 YY_RULE_SETUP
 #line 227 "Gmsh.l"
-return tPRODUCT_DEFINITION;
+return tCOMPOSITE_CURVE_SEGMENT;
 	YY_BREAK
 case 140:
 YY_RULE_SETUP
 #line 228 "Gmsh.l"
-return tPRODUCT_DEFINITION_SHAPE;
+return tCOMPOSITE_CURVE;
 	YY_BREAK
 case 141:
 YY_RULE_SETUP
 #line 229 "Gmsh.l"
-return tSHAPE_DEFINITION_REPRESENTATION;
+return tPRODUCT_DEFINITION;
 	YY_BREAK
 case 142:
 YY_RULE_SETUP
-#line 231 "Gmsh.l"
-return tVertex;
+#line 230 "Gmsh.l"
+return tPRODUCT_DEFINITION_SHAPE;
 	YY_BREAK
 case 143:
 YY_RULE_SETUP
-#line 232 "Gmsh.l"
-return tFacet;
+#line 231 "Gmsh.l"
+return tSHAPE_DEFINITION_REPRESENTATION;
 	YY_BREAK
 case 144:
 YY_RULE_SETUP
 #line 233 "Gmsh.l"
-return tNormal;
+return tVertex;
 	YY_BREAK
 case 145:
 YY_RULE_SETUP
 #line 234 "Gmsh.l"
-return tOuter;
+return tFacet;
 	YY_BREAK
 case 146:
 YY_RULE_SETUP
 #line 235 "Gmsh.l"
-return tLoopSTL;
+return tNormal;
 	YY_BREAK
 case 147:
 YY_RULE_SETUP
 #line 236 "Gmsh.l"
-return tEndLoop;
+return tOuter;
 	YY_BREAK
 case 148:
 YY_RULE_SETUP
 #line 237 "Gmsh.l"
-return tEndFacet;
+return tLoopSTL;
 	YY_BREAK
 case 149:
 YY_RULE_SETUP
 #line 238 "Gmsh.l"
-{skipline();return tEndSolid;}
+return tEndLoop;
 	YY_BREAK
 case 150:
 YY_RULE_SETUP
 #line 239 "Gmsh.l"
-{skipline();return tSolid;}
+return tEndFacet;
 	YY_BREAK
 case 151:
 YY_RULE_SETUP
-#line 241 "Gmsh.l"
-{yylval.d = (double)atoi((char*)(yytext+1)); return tDOUBLE;}
+#line 240 "Gmsh.l"
+{skipline();return tEndSolid;}
 	YY_BREAK
 case 152:
-#line 244 "Gmsh.l"
+YY_RULE_SETUP
+#line 241 "Gmsh.l"
+{skipline();return tSolid;}
+	YY_BREAK
 case 153:
-#line 245 "Gmsh.l"
+YY_RULE_SETUP
+#line 243 "Gmsh.l"
+{yylval.d = (double)atoi((char*)(yytext+1)); return tDOUBLE;}
+	YY_BREAK
 case 154:
 #line 246 "Gmsh.l"
 case 155:
+#line 247 "Gmsh.l"
+case 156:
+#line 248 "Gmsh.l"
+case 157:
 YY_RULE_SETUP
-#line 246 "Gmsh.l"
+#line 248 "Gmsh.l"
 {yylval.d = atof((char *)yytext); return tDOUBLE;}
 	YY_BREAK
-case 156:
+case 158:
 YY_RULE_SETUP
-#line 248 "Gmsh.l"
+#line 250 "Gmsh.l"
 {yylval.c = strsave((char*)yytext); return tSTRING;}
 	YY_BREAK
-case 157:
+case 159:
 YY_RULE_SETUP
-#line 250 "Gmsh.l"
+#line 252 "Gmsh.l"
 return yytext[0];
 	YY_BREAK
-case 158:
+case 160:
 YY_RULE_SETUP
-#line 252 "Gmsh.l"
+#line 254 "Gmsh.l"
 ECHO;
 	YY_BREAK
-#line 2009 "Gmsh.yy.cpp"
+#line 2029 "Gmsh.yy.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -2297,7 +2317,7 @@ static yy_state_type yy_get_previous_state()
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 945 )
+			if ( yy_current_state >= 963 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2332,11 +2352,11 @@ yy_state_type yy_current_state;
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 945 )
+		if ( yy_current_state >= 963 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 944);
+	yy_is_jam = (yy_current_state == 962);
 
 	return yy_is_jam ? 0 : yy_current_state;
 	}
@@ -2891,7 +2911,7 @@ int main()
 	return 0;
 	}
 #endif
-#line 252 "Gmsh.l"
+#line 254 "Gmsh.l"
 
 
 #undef yywrap
diff --git a/Parser/Makefile b/Parser/Makefile
index 5e179e218b5877b3f868603fb26443f4becf0ccf..ccb63be0240790362c3b5a79047832a8a84f9ded 100644
--- a/Parser/Makefile
+++ b/Parser/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.4 2000-11-25 15:26:11 geuzaine Exp $
+# $Id: Makefile,v 1.5 2000-12-05 15:23:57 geuzaine Exp $
 #
 # Makefile for "libParser.a"
 #
@@ -67,4 +67,5 @@ Gmsh.tab.o: Gmsh.tab.cpp ../Common/Gmsh.h ../Common/Message.h \
  ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \
  ../Geo/ExtrudeParams.h ../Mesh/Metric.h ../Geo/DataBase.h \
  ../Mesh/Create.h ../Common/Views.h ../Graphics/ColorTable.h \
- ../Geo/StepGeomDatabase.h ../Common/Colors.h Parser.h
+ ../Geo/StepGeomDatabase.h ../Common/Options.h ../Graphics/Draw.h \
+ ../Common/Colors.h Parser.h
diff --git a/Unix/CbInput.cpp b/Unix/CbInput.cpp
index 7774953751a110e53bbc633faf9ffef8eca06517..ce68e187453f40fab5a49b9fbfda06dff712ce39 100644
--- a/Unix/CbInput.cpp
+++ b/Unix/CbInput.cpp
@@ -1,4 +1,4 @@
-/* $Id: CbInput.cpp,v 1.7 2000-11-26 18:43:48 geuzaine Exp $ */
+/* $Id: CbInput.cpp,v 1.8 2000-12-05 15:23:58 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -211,9 +211,9 @@ void KeyboardAccel(XEvent *event){
         Msg(INFOS, "Highlight Disabled");
       break;
     case XK_c : case XK_C :
-      if(CTX.color.id==0) InitColors(&CTX.color,1);
-      else if(CTX.color.id==1) InitColors(&CTX.color,2);
-      else InitColors(&CTX.color,0);
+      if(CTX.color.id==0) Init_Colors(1);
+      else if(CTX.color.id==1) Init_Colors(2);
+      else Init_Colors(0);
       XtVaSetValues(WID.OD.miscColorSchemeScale,XmNvalue, CTX.color.id, NULL);
       XmUpdateDisplay(WID.OD.miscColorSchemeScale);  
       Init(); Draw();
@@ -242,8 +242,8 @@ void KeyboardAccel(XEvent *event){
       set_r(0,0.);  set_r(1,0.); set_r(2,0.); Init(); Draw(); 
       break;
     case XK_a :
-      CTX.little_axes = !CTX.little_axes;
-      XtVaSetValues(WID.OD.miscMiscButt[1], XmNset, CTX.little_axes, NULL);
+      CTX.small_axes = !CTX.small_axes;
+      XtVaSetValues(WID.OD.miscMiscButt[1], XmNset, CTX.small_axes, NULL);
       XmUpdateDisplay(WID.OD.miscMiscCheck);
       Init(); Draw();
       break;
diff --git a/Unix/CbOptions.cpp b/Unix/CbOptions.cpp
index aa5ba7c69fa27dcbe952e77b3dca9c86702bea00..656ac7982ee068de359840b28abbd8eae35a1c0e 100644
--- a/Unix/CbOptions.cpp
+++ b/Unix/CbOptions.cpp
@@ -1,4 +1,4 @@
-/* $Id: CbOptions.cpp,v 1.8 2000-12-04 11:28:37 geuzaine Exp $ */
+/* $Id: CbOptions.cpp,v 1.9 2000-12-05 15:23:58 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -55,24 +55,24 @@ void OptionsCb (Widget w, XtPointer client_data, XtPointer call_data){
     
   case OPTIONS_REPLOT        : Init(); Draw(); break;
   case OPTIONS_AXES          : CTX.axes = !CTX.axes; break;
-  case OPTIONS_LITTLE_AXES   : CTX.little_axes = !CTX.little_axes; break;
+  case OPTIONS_LITTLE_AXES   : CTX.small_axes = !CTX.small_axes; break;
   case OPTIONS_FAST_REDRAW   : CTX.fast = !CTX.fast ; break ;
   case OPTIONS_DISPLAY_LISTS : CTX.display_lists = !CTX.display_lists ; break ;
   case OPTIONS_ALPHA_BLENDING: CTX.alpha = !CTX.alpha; break;
   case OPTIONS_COLOR_SCHEME_SCALE: 
-    XmScaleGetValue(WID.OD.miscColorSchemeScale, &e); InitColors(&CTX.color, e);
+    XmScaleGetValue(WID.OD.miscColorSchemeScale, &e); Init_Colors(e);
     Init(); Draw();
     break ;
   case OPTIONS_ORTHOGRAPHIC  : CTX.ortho = 1; break;
   case OPTIONS_PERSPECTIVE   : CTX.ortho = 0; break;
   case OPTIONS_LIGHT_X_SCALE : 
-    XmScaleGetValue(WID.OD.miscLightScale[0], &e); CTX.light0[0] = 0.04*e ;
+    XmScaleGetValue(WID.OD.miscLightScale[0], &e); CTX.light_position[0][0] = 0.04*e ;
     MarkAllViewsChanged (0); break ;
   case OPTIONS_LIGHT_Y_SCALE : 
-    XmScaleGetValue(WID.OD.miscLightScale[1], &e); CTX.light0[1] = 0.04*e ; 
+    XmScaleGetValue(WID.OD.miscLightScale[1], &e); CTX.light_position[0][1] = 0.04*e ; 
     MarkAllViewsChanged (0); break ;
   case OPTIONS_LIGHT_Z_SCALE : 
-    XmScaleGetValue(WID.OD.miscLightScale[2], &e); CTX.light0[2] = 0.04*e ; 
+    XmScaleGetValue(WID.OD.miscLightScale[2], &e); CTX.light_position[0][2] = 0.04*e ; 
     MarkAllViewsChanged (0);break ;
   case OPTIONS_SHINE_SCALE   :
     XmScaleGetValue(WID.OD.miscShineScale, &e); CTX.shine = 0.04*e ; 
@@ -107,7 +107,7 @@ void OptionsCb (Widget w, XtPointer client_data, XtPointer call_data){
             CTX.r[0],CTX.r[1],CTX.r[2],
             CTX.t[0],CTX.t[1],CTX.t[2],
             CTX.s[0],CTX.s[1],CTX.s[2]);
-    PrintContext(&CTX, stderr);
+    Print_Context(stderr);
     break ;
 
     /* print */
diff --git a/Unix/Main.cpp b/Unix/Main.cpp
index fe453caf97734f3a88b60b46fca6cd764c9bf004..b9126b904ad329fe3e3a2fa33c19d763a2894c2f 100644
--- a/Unix/Main.cpp
+++ b/Unix/Main.cpp
@@ -1,4 +1,4 @@
-/* $Id: Main.cpp,v 1.15 2000-11-26 18:43:48 geuzaine Exp $ */
+/* $Id: Main.cpp,v 1.16 2000-12-05 15:23:58 geuzaine Exp $ */
 
 #include <signal.h>
 
@@ -42,7 +42,7 @@ char gmsh_url[]       = "URL              : " GMSH_URL ;
 char gmsh_help[]      = 
   "Usage: %s [options] [files]\n"
   "Geometry options:\n"
-  "  -0                    output flattened parsed geometry and exit\n"
+  "  -0                    output current options, flattened geometry and exit\n"
   "Mesh options:\n"
   "  -1, -2, -3            perform batch 1D, 2D and 3D mesh generation\n"
   "  -format msh|unv|gref  set output mesh format (default: msh)\n"
@@ -531,7 +531,7 @@ int main(int argc, char *argv[]){
  
   /* Gmsh default context options */
   
-  InitContext(&CTX);
+  Init_Context();
 
   /* Command line options */
 
@@ -582,6 +582,7 @@ int main(int argc, char *argv[]){
         Print_Mesh(THEM,NULL,CTX.mesh.format);
       }
       else{
+        Print_Context(stdout);
         Print_Geo(THEM, NULL);
       }
       exit(1);
@@ -787,15 +788,15 @@ int main(int argc, char *argv[]){
   }
 
   /* X font initialisation */
-  XCTX.xfont.helve = XLoadQueryFont(XCTX.display, CTX.font_string); 
-  XCTX.xfont.fixed = XLoadQueryFont(XCTX.display, CTX.colorbar_font_string);
+  XCTX.xfont.helve = XLoadQueryFont(XCTX.display, CTX.font); 
+  XCTX.xfont.fixed = XLoadQueryFont(XCTX.display, CTX.fixed_font);
 
   if(XCTX.xfont.helve == NULL){
-    Msg(WARNING, "Unable to Load Font '%s'", CTX.font_string);
+    Msg(WARNING, "Unable to Load Font '%s'", CTX.font);
     XCTX.xfont.helve = XCTX.xfont.fixed ;
   }
   if(XCTX.xfont.fixed == NULL)
-    Msg(FATAL, "Unable to Load Font '%s'", CTX.colorbar_font_string);
+    Msg(FATAL, "Unable to Load Font '%s'", CTX.fixed_font);
   
   XCTX.xfont.helve_h = XCTX.xfont.helve->max_bounds.ascent + 
     XCTX.xfont.helve->max_bounds.descent;
diff --git a/Unix/Widgets.cpp b/Unix/Widgets.cpp
index a1d7f7dbb1587f37c180c9d4131d4ed265df493f..244e16591d334ff0f15dbe38844828cb2b50e79f 100644
--- a/Unix/Widgets.cpp
+++ b/Unix/Widgets.cpp
@@ -1,4 +1,4 @@
-/* $Id: Widgets.cpp,v 1.12 2000-11-28 06:55:11 geuzaine Exp $ */
+/* $Id: Widgets.cpp,v 1.13 2000-12-05 15:23:59 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -1322,7 +1322,7 @@ void CreateWidgets_OD(Widgets_T *w){
 
   i=0;
   XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Show Small Axes")); i++;
-  XtSetArg(arg[i], XmNset, CTX.little_axes?True:False); i++;
+  XtSetArg(arg[i], XmNset, CTX.small_axes?True:False); i++;
   w->OD.miscMiscButt[1] = XmCreateToggleButton(w->OD.miscMiscCheck, "ODmiscMiscButt1", arg, i);
   XtManageChild(w->OD.miscMiscButt[1]);
 
@@ -1421,7 +1421,7 @@ void CreateWidgets_OD(Widgets_T *w){
     XtSetArg(arg[i], XmNmaximum, 25); i++;
     XtSetArg(arg[i], XmNdecimalPoints, 0); i++;
     XtSetArg(arg[i], XmNshowValue, False); i++;
-    XtSetArg(arg[i], XmNvalue, (int)25*CTX.light0[n]); i++;
+    XtSetArg(arg[i], XmNvalue, (int)25*CTX.light_position[0][n]); i++;
     XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++;
     w->OD.miscLightScale[n] = XmCreateScale(w->OD.miscLightFrameRowCol, "ODmiscLightScalen", arg, i);
     XtManageChild(w->OD.miscLightScale[n]);
diff --git a/demos/demo-01.geo b/demos/demo-01.geo
index 45d6f77032c31635d09449ad6db03d19748c19a9..9663be2a71a7572edf00847caed3ce1634863e62 100644
--- a/demos/demo-01.geo
+++ b/demos/demo-01.geo
@@ -58,9 +58,18 @@ Physical Surface(9999) = {6};
    redefines the color of geometry points. See ex03.geo for a more
    complete example. */
 
-Color{
+Options{
+  General{
+    Rotation0 = 10;
+    Color{
+      Background = Red;
+    }
+  }
   Geometry{
-    Points = Orange;
+    Color{
+      Points = Orange;
+      Lines = Blue;
+    }
   }
 }