diff --git a/mapdraw.c b/mapdraw.c
index acd6e4f..d341d2b 100644
--- a/mapdraw.c
+++ b/mapdraw.c
@@ -1044,7 +1044,7 @@ int msDrawVectorLayer(mapObj *map, layerObj *layer, imageObj *image)
     if (layer->type == MS_LAYER_LINE && msLayerGetProcessingKey(layer, "POLYLINE_NO_CLIP")) {
       drawmode |= MS_DRAWMODE_UNCLIPPEDLINES;
     }
-    
+  
     if (cache) {
       styleObj *pStyle = layer->class[shape.classindex]->styles[0];
       colorObj tmp;
diff --git a/mapfile.c b/mapfile.c
index 41f48a9..c7169ad 100644
--- a/mapfile.c
+++ b/mapfile.c
@@ -3788,6 +3788,9 @@ int initLayer(layerObj *layer, mapObj *map)
   layer->mask = NULL;
   layer->maskimage = NULL;
 
+  initExpression(&(layer->_geomtransform));
+  layer->_geomtransform.type = MS_GEOMTRANSFORM_NONE;
+  
   return(0);
 }
 
@@ -3845,7 +3848,8 @@ int freeLayer(layerObj *layer)
   msFree(layer->classgroup);
 
   msFreeProjection(&(layer->projection));
-
+  freeExpression(&layer->_geomtransform);
+  
   freeCluster(&layer->cluster);
 
   for(i=0; i<layer->maxclasses; i++) {
@@ -4192,6 +4196,15 @@ int loadLayer(layerObj *layer, mapObj *map)
           }
         }
         break;
+      case(GEOMTRANSFORM): {
+        int s;
+        if((s = getSymbol(1, MS_EXPRESSION)) == -1) return(MS_FAILURE);
+        /* handle expression case here for the moment */
+        msFree(layer->_geomtransform.string);
+        layer->_geomtransform.string = msStrdup(msyystring_buffer);
+        layer->_geomtransform.type = MS_GEOMTRANSFORM_EXPRESSION;
+      }
+      break;
       case(HEADER):
         if(getString(&layer->header) == MS_FAILURE) return(-1); /* getString() cleans up previously allocated string */
         if(msyysource == MS_URL_TOKENS) {
@@ -4488,6 +4501,12 @@ static void writeLayer(FILE *stream, int indent, layerObj *layer)
   writeString(stream, indent, "FILTERITEM", NULL, layer->filteritem);
   writeString(stream, indent, "FOOTER", NULL, layer->footer);
   writeString(stream, indent, "GROUP", NULL, layer->group);
+
+  if(layer->_geomtransform.type == MS_GEOMTRANSFORM_EXPRESSION) {
+    writeIndent(stream, indent + 1);
+    fprintf(stream, "GEOMTRANSFORM (%s)\n", layer->_geomtransform.string);
+  }
+  
   writeString(stream, indent, "HEADER", NULL, layer->header);
   /* join - see below */
   writeKeyword(stream, indent, "LABELCACHE", layer->labelcache, 1, MS_OFF, "OFF");
diff --git a/mapgeomtransform.c b/mapgeomtransform.c
index e3d1906..b3bcb16 100644
--- a/mapgeomtransform.c
+++ b/mapgeomtransform.c
@@ -183,11 +183,17 @@ int msDrawTransformedShape(mapObj *map, symbolSetObj *symbolset, imageObj *image
         msSetError(MS_PARSEERR, "Failed to process shape expression: %s", "msDrawTransformedShape", style->_geomtransform.string);
         return MS_FAILURE;
       }
-
       tmpshp = p.result.shpval;
 
-      /* TODO: check resulting shape type and draw accordingly */
-      msDrawShadeSymbol(symbolset, image, tmpshp, style, scalefactor);
+      switch (tmpshp->type) {
+        case MS_SHAPE_POINT:
+        case MS_SHAPE_POLYGON:        
+          msDrawShadeSymbol(symbolset, image, tmpshp, style, scalefactor);
+          break;
+        case MS_SHAPE_LINE:
+          msDrawLineSymbol(symbolset, image, tmpshp, style, scalefactor);        
+          break;
+      }
 
       msFreeShape(tmpshp);
       msFree(tmpshp);
@@ -202,3 +208,52 @@ int msDrawTransformedShape(mapObj *map, symbolSetObj *symbolset, imageObj *image
   }
   return MS_SUCCESS;
 }
+
+/*
+ * RFC89 implementation:
+ *  - transform directly the shapeobj
+ */
+int msGeomTransformShape(mapObj *map, layerObj *layer, shapeObj *shape)
+{
+  int i;
+  expressionObj *e =  &layer->_geomtransform;
+  
+  switch(e->type) {
+    case MS_GEOMTRANSFORM_EXPRESSION: {
+      int status;
+      shapeObj *tmpshp;
+      parseObj p;
+
+      p.shape = shape; /* set a few parser globals (hence the lock) */
+      p.expr = e;
+      p.expr->curtoken = p.expr->tokens; /* reset */
+      p.type = MS_PARSE_TYPE_SHAPE;
+      p.dblval = map->cellsize * (msInchesPerUnit(map->units,0)/msInchesPerUnit(layer->units,0));
+
+      status = yyparse(&p);
+      if (status != 0) {
+        msSetError(MS_PARSEERR, "Failed to process shape expression: %s", "msGeomTransformShape()", e->string);
+        return MS_FAILURE;
+      }
+      
+      tmpshp = p.result.shpval;
+
+      for (i= 0; i < shape->numlines; i++)
+        free(shape->line[i].point);
+      shape->numlines = 0;
+      if (shape->line) free(shape->line);
+      
+      for(i=0; i<tmpshp->numlines; i++)
+        msAddLine(shape, &(tmpshp->line[i])); /* copy each line */
+
+      msFreeShape(tmpshp);
+      msFree(tmpshp);
+    }
+    break;
+    default:
+      msSetError(MS_MISCERR, "unknown geomtransform", "msGeomTransformShape()");
+      return MS_FAILURE;
+  }
+  
+  return MS_SUCCESS;
+}
diff --git a/maplayer.c b/maplayer.c
index 47f0ee1..34581bb 100644
--- a/maplayer.c
+++ b/maplayer.c
@@ -258,8 +258,10 @@ int msLayerWhichShapes(layerObj *layer, rectObj rect, int isQuery)
 */
 int msLayerNextShape(layerObj *layer, shapeObj *shape)
 {
+  int rv;
+  
   if ( ! layer->vtable) {
-    int rv =  msInitializeVirtualTable(layer);
+    rv =  msInitializeVirtualTable(layer);
     if (rv != MS_SUCCESS)
       return rv;
   }
@@ -271,7 +273,14 @@ int msLayerNextShape(layerObj *layer, shapeObj *shape)
   /* tagged on to the main attributes with the naming scheme [join name].[item name]. */
   /* We need to leverage the iteminfo (I think) at this point */
 
-  return layer->vtable->LayerNextShape(layer, shape);
+  rv = layer->vtable->LayerNextShape(layer, shape);
+
+  /* RFC89 Apply Layer GeomTransform */
+  if(layer->_geomtransform.type != MS_GEOMTRANSFORM_NONE && rv == MS_SUCCESS) {
+    rv = msGeomTransformShape(layer->map, layer, shape);      
+  }
+  
+  return rv;
 }
 
 /*
@@ -295,8 +304,10 @@ int msLayerNextShape(layerObj *layer, shapeObj *shape)
 */
 int msLayerGetShape(layerObj *layer, shapeObj *shape, resultObj *record)
 {
+  int rv;
+  
   if( ! layer->vtable) {
-    int rv =  msInitializeVirtualTable(layer);
+    rv =  msInitializeVirtualTable(layer);
     if(rv != MS_SUCCESS)
       return rv;
   }
@@ -306,7 +317,14 @@ int msLayerGetShape(layerObj *layer, shapeObj *shape, resultObj *record)
   ** tagged on to the main attributes with the naming scheme [join name].[item name].
   */
 
-  return layer->vtable->LayerGetShape(layer, shape, record);
+  rv = layer->vtable->LayerGetShape(layer, shape, record);
+  
+  /* RFC89 Apply Layer GeomTransform */
+  if(layer->_geomtransform.type != MS_GEOMTRANSFORM_NONE && rv == MS_SUCCESS) {
+    rv = msGeomTransformShape(layer->map, layer, shape); 
+  }
+
+  return rv;
 }
 
 /*
@@ -510,6 +528,9 @@ int msTokenizeExpression(expressionObj *expression, char **list, int *listsize)
       case MS_TOKEN_BINDING_SHAPE:
         node->token = token;
         break;
+      case MS_TOKEN_BINDING_MAP_CELLSIZE:
+        node->token = token;
+        break;        
       case MS_TOKEN_FUNCTION_FROMTEXT: /* we want to process a shape from WKT once and not for every feature being evaluated */
         if((token = msyylex()) != 40) { /* ( */
           msSetError(MS_PARSEERR, "Parsing fromText function failed.", "msTokenizeExpression()");
@@ -613,6 +634,9 @@ int msLayerWhichItems(layerObj *layer, int get_all, char *metadata)
 
   if(layer->labelitem) nt++;
 
+  if(layer->_geomtransform.type == MS_GEOMTRANSFORM_EXPRESSION)
+    msTokenizeExpression(&layer->_geomtransform, layer->items, &(layer->numitems));
+  
   /* class level counts */
   for(i=0; i<layer->numclasses; i++) {
 
diff --git a/maplexer.c b/maplexer.c
index 804c1f1..52e8180 100644
--- a/maplexer.c
+++ b/maplexer.c
@@ -388,8 +388,8 @@ static void yy_fatal_error (yyconst char msg[]  );
 	*yy_cp = '\0'; \
 	(yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 324
-#define YY_END_OF_BUFFER 325
+#define YY_NUM_RULES 328
+#define YY_END_OF_BUFFER 329
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -397,213 +397,217 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[1863] =
+static yyconst flex_int16_t yy_accept[1895] =
     {   0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  325,  322,    1,  320,  313,    2,  322,  322,
-      307,  319,  307,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  322,  321,  321,
-        3,  322,  322,  322,  322,  322,  322,  322,  322,  322,
-      322,  322,  322,  322,  322,  322,    1,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  323,    1,    1,
-        6,  318,  323,  318,  323,  308,  308,   10,    7,    9,
+        0,    0,  329,  326,    1,  324,  317,    2,  326,  326,
+      311,  323,  311,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,  323,  323,  326,  325,  325,
+        3,  326,  326,  326,  326,  326,  326,  326,  326,  326,
+      326,  326,  326,  326,  326,  326,    1,  323,  323,  323,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,  323,  323,  327,    1,    1,
+        6,  322,  327,  322,  327,  312,  312,   10,    7,    9,
+
+      327,  327,  327,  327,  327,  327,  327,  327,  327,  327,
+      327,  327,  327,  327,  327,  327,  327,  325,   13,  325,
+      328,    1,  328,  328,  320,  318,  318,  319,    1,    2,
+        0,  316,  311,  311,  323,  311,  323,    0,  323,  315,
+      311,    0,  323,  323,  323,  323,  323,  323,  323,  323,
+      230,  323,  323,  323,  234,  323,  235,  323,  323,  240,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,  323,  323,  252,  323,  323,
+      255,  323,  256,  323,  323,  323,  323,  323,  323,  323,
 
+      323,  323,  267,  323,  323,  323,  323,  323,  323,  323,
       323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
-      323,  323,  323,  323,  323,  323,  321,   13,  321,  324,
-        1,  324,  324,  316,  314,  314,  315,    1,    2,    0,
-      312,  307,  307,  319,  307,  319,    0,  319,  311,  307,
-        0,  319,  319,  319,  319,  319,  319,  319,  319,  227,
-      319,  319,  319,  231,  319,  232,  319,  319,  237,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  249,  319,  319,  252,
-      319,  253,  319,  319,  319,  319,  319,  319,  319,  319,
-
-      319,  264,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      207,  319,  319,  291,  292,  319,  293,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,    0,  302,    0,    0,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  210,  323,  323,  294,  295,  323,  296,  323,  323,
+      323,  323,  323,  323,  323,  323,  323,    0,  305,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  301,  319,  319,
-      319,  231,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      264,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-
-      319,  319,  319,  319,  319,  319,  319,    8,    0,    5,
-        0,  308,  308,  308,    0,  308,    0,   12,   14,    7,
-       11,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        9,   16,   12,   10,    0,    4,    0,    0,    0,    0,
-        0,    0,  304,    0,    0,  309,   15,    0,  317,    0,
-      316,  314,  314,  315,  307,    0,    0,  319,  307,  311,
-      310,  307,    0,    0,  307,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  233,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,   62,  319,  319,
-
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-       77,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  118,  119,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  262,  263,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  279,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  285,  319,  319,  319,  319,  319,  319,  319,
-
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  217,
-      297,  319,  219,  298,  319,    0,    0,    0,    0,    0,
-        0,    0,  119,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  217,    0,  300,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  262,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,    0,    0,    0,    0,    0,  308,  308,    0,    0,
-      308,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    6,    0,    0,    0,    0,    0,    0,
-        0,    0,  307,  310,    0,  307,  319,  319,  319,  319,
-
-      319,  319,  222,  319,  319,  319,  319,  319,  319,  319,
-      226,  319,  319,  319,  319,  319,  319,  319,  319,   55,
-      319,  319,  319,  319,   59,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  241,  319,  319,  319,   72,  319,
-      319,  319,   76,  319,  319,  319,   79,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,   97,  319,
-      319,  319,  319,  319,  319,  319,  319,  250,  319,  251,
-      319,  122,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-
-      319,  153,  319,  260,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  191,  319,  319,  319,  319,  319,  319,
-      319,  203,  319,  287,  319,  319,  319,  319,  289,  213,
-      319,  319,  319,  319,  319,  319,  319,  220,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  304,  323,
+      323,  323,  234,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  267,  323,  323,  323,  323,  323,  323,  323,  323,
+
+      323,  323,  323,  323,  323,  323,  323,  323,    8,    0,
+        5,    0,  312,  312,  312,    0,  312,    0,   12,   14,
+        7,   11,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   11,    9,   16,   12,   10,    0,    4,    0,    0,
+        0,    0,    0,    0,    0,    0,  308,    0,    0,  313,
+       15,    0,  321,    0,  320,  318,  318,  319,  311,    0,
+        0,  323,  311,  315,  314,  311,    0,    0,  311,  323,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  236,  323,  323,  323,  323,  323,  323,  323,  323,
+
+      323,   65,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,   80,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      121,  122,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,  323,  323,  265,  266,  323,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,  323,  282,  323,  323,  323,
+      323,  323,  323,  323,  323,  323,  288,  323,  323,  323,
+
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  220,  300,  323,  222,  301,  323,    0,
+        0,    0,    0,    0,    0,    0,  122,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  220,    0,  303,  323,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  265,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,    0,    0,    0,    0,    0,
+      312,  312,    0,    0,  312,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    6,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  311,
+
+      314,    0,  311,  323,  323,  323,  323,  323,  323,  225,
+      323,  323,  323,  323,  323,  323,  323,  229,  323,  323,
+      323,  323,  323,  323,  323,  323,   58,  323,  323,  323,
+      323,   62,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  244,  323,  323,  323,   75,  323,  323,  323,   79,
+      323,  323,  323,   82,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,  100,  323,  323,  323,  323,
+      323,  323,  323,  323,  253,  323,  254,  323,  125,  323,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+
+      323,  323,  323,  323,  323,  323,  323,  323,  156,  323,
+      263,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      194,  323,  323,  323,  323,  323,  323,  323,  206,  323,
+      290,  323,  323,  323,  323,  292,  216,  323,  323,  323,
+      323,  323,  323,  323,  223,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  194,    0,    0,
+        0,  323,  323,   58,  323,   75,  323,  323,  323,  323,
+
+      323,  323,  323,  194,  323,  323,  292,  309,    0,  312,
+       17,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      191,    0,    0,    0,  319,  319,   55,  319,   72,  319,
-      319,  319,  319,  319,  319,  319,  191,  319,  319,  289,
+        0,  310,   40,  302,  323,   42,  323,  323,  226,  323,
+      323,  227,  323,  323,  323,  323,  323,  323,  232,  323,
+       50,  323,   54,  323,  323,  323,  323,   60,  323,  323,
+      323,  323,  242,   63,  323,   66,  323,  323,  243,  323,
+      323,  323,  323,  323,  323,   77,  323,  323,  246,  323,
+      323,   85,  247,  323,  323,   87,  323,  323,   96,  323,
+      323,  173,  323,  323,  323,  323,  104,  251,  323,  114,
 
-      305,    0,  308,   17,    0,    0,    0,    0,    0,    0,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  260,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,  261,  323,  238,  323,  323,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  274,  323,  323,  323,  323,  323,
+      323,  323,  323,  278,  323,  323,  323,  323,  323,  323,
+      323,  323,  280,  281,  187,  323,  323,  323,  323,  323,
+      323,  286,  323,  323,  197,  323,  203,  323,  323,  323,
+      209,  323,  323,  323,  323,  297,  217,  323,  323,  323,
+
+      323,  221,   42,   50,    0,    0,    0,  114,    0,    0,
+        0,    0,    0,    0,  197,    0,  217,  323,   54,  323,
+      323,  323,  104,  323,  323,  323,  323,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  306,   37,  299,  319,   39,  319,  319,  223,  319,
-      319,  224,  319,  319,  319,  319,  319,  319,  229,  319,
-       47,  319,   51,  319,  319,  319,  319,   57,  319,  319,
-      319,  319,  239,   60,  319,   63,  319,  319,  240,  319,
-      319,  319,  319,  319,  319,   74,  319,  319,  243,  319,
-      319,   82,  244,  319,  319,   84,  319,  319,   93,  319,
-      319,  170,  319,  319,  319,  319,  101,  248,  319,  111,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  257,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  258,  319,  235,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  271,  319,  319,  319,  319,  319,
-      319,  319,  319,  275,  319,  319,  319,  319,  319,  319,
-      319,  319,  277,  278,  184,  319,  319,  319,  319,  319,
-      319,  283,  319,  319,  194,  319,  200,  319,  319,  319,
-      206,  319,  319,  319,  319,  294,  214,  319,  319,  319,
-      319,  218,   39,   47,    0,    0,    0,  111,    0,    0,
-
-        0,    0,    0,    0,  194,    0,  214,  319,   51,  319,
-      319,  319,  101,  319,  319,  319,  319,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   21,
-        0,    0,    0,    0,  319,  319,  319,  319,  319,  319,
-      225,  319,   45,  228,  319,  230,  319,  319,  319,  319,
-       52,  319,  319,  319,  319,  319,   58,  319,  319,  319,
-      319,   65,  319,   68,   69,  242,  319,   71,  319,  319,
-      319,  319,   83,  245,  319,  319,  319,  319,  319,  319,
-      246,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  110,  112,  113,  319,  319,  120,
-
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  254,  319,  255,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  261,  154,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  270,  269,  274,  169,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  276,
-      319,  179,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  281,  282,  319,  284,  193,  319,  196,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      216,  296,    0,   65,    0,    0,  113,    0,    0,    0,
-
-        0,    0,    0,  319,  196,  319,   31,   22,    0,    0,
-        0,    0,    0,    0,    0,    0,   18,    0,    0,    0,
-       29,    0,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,   50,  319,  319,  319,  319,  236,  319,  238,
-      319,  319,  319,   67,  319,   73,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,   92,  319,  319,  319,
-      319,   99,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  115,  319,  319,  123,  319,  319,  319,  319,  319,
-      319,  319,  319,  132,  319,  319,  319,  319,  319,  138,
-      319,  319,  319,  319,  319,  319,  319,  149,  319,  319,
-
-      319,  319,  319,  155,  319,  156,  319,  319,  319,  319,
-      319,  168,  319,  319,  272,  319,  273,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      319,  319,   20,    0,   28,    0,    0,   32,    0,    0,
-        0,    0,   26,  303,  319,  319,  319,  319,  319,   43,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,   61,
-      319,  319,  319,  319,  319,  319,   80,  319,  319,  319,
-
-      319,  319,   91,  319,  319,  319,   98,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  116,  319,  319,  319,
-      319,  319,  319,  319,  319,  128,  319,  319,  135,  136,
-      137,  319,  319,  319,  319,  319,  319,  145,  319,  319,
-      152,  259,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  167,  319,  319,  171,  319,  319,
-      173,  319,  319,  319,  177,  319,  319,  319,  319,  181,
-      319,  186,  319,  319,  280,  319,  319,  319,  319,  319,
-      319,  319,  201,   90,  319,  205,  319,  319,  319,  288,
-      290,  295,  319,    0,    0,    0,    0,  177,    0,    0,
-
-      186,    0,  201,   30,    0,   25,   33,    0,   27,   19,
-      319,  319,   40,  319,   42,  319,   46,  319,   48,  319,
-      319,  319,   35,  319,  319,   66,  319,  319,  319,   81,
-      319,   88,   89,  319,   86,  319,   95,   96,  319,  319,
-      319,  319,  104,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  131,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  148,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,   36,
-      178,  319,  319,  319,  319,  319,  319,  319,  190,  192,
-
-      195,  319,  199,  319,  204,  208,  212,  319,  319,    0,
-        0,   86,    0,  178,    0,    0,    0,    0,  319,  221,
-      319,  319,   49,   34,   53,  319,  319,   64,   70,  319,
-      319,   85,  319,   94,  100,  247,  102,  319,  319,  319,
-      319,  319,  319,  121,  124,  319,  319,  319,  319,  319,
-      319,  319,  319,  139,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  265,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  234,  319,  174,
-      175,  319,  180,  319,  182,  185,  187,  319,  189,  319,
-      319,  319,  319,  215,    0,   85,  175,  182,    0,   23,
-
-       24,   38,  319,  319,  319,   56,  319,  319,  319,  319,
-      103,  319,  319,  319,  319,  319,  125,  126,  130,  127,
-      319,  319,  319,  134,  140,  319,  147,  144,  319,  319,
-      151,  319,  266,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  165,  319,  268,  286,  319,  176,  319,  188,
-      197,  319,  319,  319,  211,    0,  211,  319,   44,  319,
-      319,   75,  319,   87,  319,  319,  319,  114,  319,  319,
-      319,  133,  319,  319,  150,  319,  319,  157,  158,  159,
-      319,  161,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  210,    0,  319,  319,  183,   78,  105,  107,  109,
-
-      319,  319,  129,  319,  146,  256,  267,  319,  319,  319,
-      319,  166,  319,  319,  319,  319,  319,  183,  319,   54,
-      319,  319,  319,  319,  143,  319,  162,  163,  319,  172,
-      141,  319,  319,  209,   41,  319,  319,  117,  142,  319,
-      319,  319,  202,  319,  319,  319,  319,  198,  319,  319,
-      319,  319,  106,  108,  319,  319,  319,  164,  319,  319,
-      160,    0
+       21,    0,    0,    0,    0,    0,    0,  323,  323,  323,
+      323,  323,  323,  228,  323,   48,  231,  323,  233,  323,
+      323,  323,  323,   55,  323,  323,  323,  323,  323,   61,
+      323,  323,  323,  323,   68,  323,   71,   72,  245,  323,
+       74,  323,  323,  323,  323,   86,  248,  323,  323,  323,
+      323,  323,  323,  249,  323,  323,  323,  323,  323,  323,
+
+      323,  323,  323,  323,  323,  323,  323,  113,  115,  116,
+      323,  323,  123,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,  323,  257,  323,  258,  323,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  264,  157,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,  323,  273,  272,  277,  172,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  279,  323,  182,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,  284,  285,  323,  287,  196,
+      323,  199,  323,  323,  323,  323,  323,  323,  323,  323,
+
+      323,  323,  323,  219,  299,    0,   68,    0,    0,  116,
+        0,    0,    0,    0,    0,    0,  323,  199,  323,   34,
+       22,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       18,    0,    0,    0,    0,   32,    0,    0,  323,  323,
+      323,  323,  323,  323,  323,  323,  323,  323,   53,  323,
+      323,  323,  323,  239,  323,  241,  323,  323,  323,   70,
+      323,   76,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,   95,  323,  323,  323,  323,  102,  323,  323,
+      323,  323,  323,  323,  323,  323,  323,  118,  323,  323,
+      126,  323,  323,  323,  323,  323,  323,  323,  323,  135,
+
+      323,  323,  323,  323,  323,  141,  323,  323,  323,  323,
+      323,  323,  323,  152,  323,  323,  323,  323,  323,  158,
+      323,  159,  323,  323,  323,  323,  323,  171,  323,  323,
+      275,  323,  276,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,  323,  323,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  323,  323,   20,    0,
+       31,    0,    0,   35,    0,    0,    0,    0,    0,    0,
+       29,    0,  306,  323,  323,  323,  323,  323,   46,  323,
+
+      323,  323,  323,  323,  323,  323,  323,  323,   64,  323,
+      323,  323,  323,  323,  323,   83,  323,  323,  323,  323,
+      323,   94,  323,  323,  323,  101,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,  119,  323,  323,  323,  323,
+      323,  323,  323,  323,  131,  323,  323,  138,  139,  140,
+      323,  323,  323,  323,  323,  323,  148,  323,  323,  155,
+      262,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  170,  323,  323,  174,  323,  323,  176,
+      323,  323,  323,  180,  323,  323,  323,  323,  184,  323,
+      189,  323,  323,  283,  323,  323,  323,  323,  323,  323,
+
+      323,  204,   93,  323,  208,  323,  323,  323,  291,  293,
+      298,  323,    0,    0,    0,    0,  180,    0,    0,  189,
+        0,  204,   33,    0,   28,   36,    0,    0,   30,   24,
+       19,    0,  323,  323,   43,  323,   45,  323,   49,  323,
+       51,  323,  323,  323,   38,  323,  323,   69,  323,  323,
+      323,   84,  323,   91,   92,  323,   89,  323,   98,   99,
+      323,  323,  323,  323,  107,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,  323,  134,  323,  323,  323,
+      323,  323,  323,  323,  323,  323,  151,  323,  323,  323,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,   39,  181,  323,  323,  323,  323,  323,  323,  323,
+      193,  195,  198,  323,  202,  323,  207,  211,  215,  323,
+      323,    0,    0,   89,    0,  181,    0,    0,    0,    0,
+        0,    0,    0,  323,  224,  323,  323,   52,   37,   56,
+      323,  323,   67,   73,  323,  323,   88,  323,   97,  103,
+      250,  105,  323,  323,  323,  323,  323,  323,  124,  127,
+      323,  323,  323,  323,  323,  323,  323,  323,  142,  323,
+      323,  323,  323,  323,  323,  323,  323,  323,  268,  323,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+
+      323,  323,  237,  323,  177,  178,  323,  183,  323,  185,
+      188,  190,  323,  192,  323,  323,  323,  323,  218,    0,
+       88,  178,  185,    0,   23,   26,   27,   25,    0,   41,
+      323,  323,  323,   59,  323,  323,  323,  323,  106,  323,
+      323,  323,  323,  323,  128,  129,  133,  130,  323,  323,
+      323,  137,  143,  323,  150,  147,  323,  323,  154,  323,
+      269,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      168,  323,  271,  289,  323,  179,  323,  191,  200,  323,
+      323,  323,  214,    0,  214,    0,  323,   47,  323,  323,
+       78,  323,   90,  323,  323,  323,  117,  323,  323,  323,
+
+      136,  323,  323,  153,  323,  323,  160,  161,  162,  323,
+      164,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      213,    0,    0,  323,  323,  186,   81,  108,  110,  112,
+      323,  323,  132,  323,  149,  259,  270,  323,  323,  323,
+      323,  169,  323,  323,  323,  323,  323,  186,    0,  323,
+       57,  323,  323,  323,  323,  146,  323,  165,  166,  323,
+      175,  144,  323,  323,  212,  307,   44,  323,  323,  120,
+      145,  323,  323,  323,  205,  323,  323,  323,  323,  201,
+      323,  323,  323,  323,  109,  111,  323,  323,  323,  167,
+      323,  323,  163,    0
+
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -651,427 +655,437 @@ static yyconst flex_int32_t yy_meta[83] =
         1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[1881] =
+static yyconst flex_int16_t yy_base[1913] =
     {   0,
         0,    0,   82,    0,  164,    0,  246,    0,  327,  331,
-      332,  333,  800, 4234,  342, 4234, 4234,    0,  754,  332,
+      332,  333,  811, 4303,  342, 4303, 4303,    0,  788,  332,
       334,  392,  349,  343,  392,  450,  425,  390,  470,  486,
       471,  495,  312,  327,  546,  496,  390,  590,  598,  313,
-      600,  645,  651,  660,  395,  532,    0,  711, 4234, 4234,
-     4234,  321,  325,  333,  370,  393,  406,  408,  398,  396,
+      600,  645,  651,  660,  395,  532,    0,  715, 4303, 4303,
+     4303,  321,  325,  333,  370,  393,  406,  408,  398,  396,
       413,  522,  445,  453,  476,  537,  367,  579,  481,  699,
       711,  574,  717,  553,  478,  706,  554,  722,  650,  491,
-      750,  758,  652,  761,  770,  806,  666, 4234,  547,  643,
-      735,  703,  741,  698,  742,  786,  829,  674,  342,  672,
+      750,  758,  652,  761,  770,  806,  666, 4303,  547,  643,
+      741,  707,  743,  701,  742,  786,  829,  726,  342,  674,
 
       650,  756,  706,  790,  527,  535,  760,  569,  809,  769,
-      809,  605,  695,  720,  809,  313,  587,  642, 4234, 4234,
-      853,  636,  629,    0,  812,  823,  371,  859,    0,  589,
-      587,  851,  870,    0,  872,  886,  575,  930,  834,  888,
-      898,  841,  926,  841,  893,  848,  917,  856,  928,    0,
-      858,  872,  887,  922,  927,    0,  910,  915,    0,  943,
-      933,  931,  935,  951,  947,  934,  971,  943,  991,  957,
-      987,  970,  977,  979,  994, 1002,  977, 1003,  994, 1006,
-     1011, 1003, 1000,  985, 1000, 1045,    0, 1043, 1007,    0,
-     1022,    0, 1037, 1053, 1054, 1042, 1039, 1051, 1065, 1053,
-
-     1051, 1066, 1075, 1076, 1062, 1086, 1091, 1075, 1082, 1091,
-     1106, 1108, 1111, 1107, 1122, 1112, 1099, 1126, 1125, 1119,
-     1131, 1153, 1132, 1123, 1152, 1138, 1142, 1166, 1158, 1169,
-     1161, 1179, 1158,    0,    0, 1169,    0, 1167, 1175, 1187,
-     1189, 1173, 1189, 1174, 1176, 1195,  538, 4234, 1194, 1202,
-     1200, 1187, 1214, 1192, 1221, 1213, 1215, 1228, 1230, 1234,
-     1213, 1215, 1240, 1233, 1241,  536,  857, 4234, 1235, 1238,
-     1244, 1249, 1239, 1234, 1249, 1254, 1253, 1249, 1250, 1280,
-     1253, 1276, 1294, 1254, 1288, 1285, 1278, 1289, 1281, 1298,
-        0, 1285, 1301, 1287, 1285, 1308, 1296, 1295, 1312, 1289,
-
-     1315, 1305, 1306, 1319, 1308, 1303, 1332, 4234,  531, 4234,
-      528, 1360, 1370, 1363, 1381, 1383, 1389, 4234, 4234, 4234,
-     4234, 1348, 1348, 1338, 1363, 1376, 1356, 1385, 1367, 1372,
-     4234, 1372, 1379, 4234, 1375, 4234, 1392, 1377, 1382, 1385,
-      495, 1401, 4234,  489,  322, 4234, 4234,  493, 4234,  485,
-        0, 4234, 4234, 4234, 1420, 1418,  797,  901,  903, 1399,
-        0, 1441, 1451, 1139, 1416, 1420, 1423, 1425, 1429, 1427,
-     1436, 1434, 1439, 1447, 1447, 1449, 1441, 1432, 1451, 1439,
-     1440, 1443, 1460, 1446, 1447, 1452, 1464,    0, 1467, 1448,
-     1486, 1449, 1458, 1466, 1474, 1469, 1478,    0, 1480, 1485,
-
-     1502, 1489, 1491, 1492, 1501, 1502, 1495, 1496, 1514, 1506,
-        0, 1509, 1509, 1505, 1524, 1508, 1527, 1527, 1523, 1526,
-     1528, 1532, 1521, 1544, 1538, 1541, 1556, 1542, 1561, 1562,
-     1558, 1568, 1570, 1556, 1572, 1573,    0,    0, 1568, 1570,
-     1612, 1575, 1590, 1584, 1587, 1666, 1589, 1578, 1582, 1597,
-     1583, 1606, 1604, 1609,    0,  477, 1635, 1637, 1641, 1625,
-     1626, 1631, 1653, 1678, 1654, 1650, 1675, 1670, 1650, 1702,
-     1662, 1686, 1674, 1692, 1693, 1707, 1708, 1694, 1703, 1711,
-     1709, 1714,    0, 1722, 1725, 1714, 1725, 1729, 1723, 1736,
-     1718, 1728,    0, 1740, 1733, 1731, 1728, 1746, 1727, 1741,
-
-     1750, 1742, 1758, 1757, 1759, 1755, 1766, 1768, 1754,    0,
-        0, 1760,    0,    0, 1765, 1773, 1769, 1773, 1787, 1787,
-     1791, 1792, 4234, 1789, 1782, 1797, 1788, 1792, 1802, 1797,
-     1796, 1793, 4234,  386, 4234, 1795, 1800, 1803, 1817, 1820,
-     1819, 1806, 1809, 1825, 1828, 1832, 1834, 1834, 1837, 1828,
-     1838, 1833, 1849, 1842, 1849, 1855, 1856, 1860, 1848, 1860,
-     1846,  383,  323,  369,  360, 1640, 1875, 1883, 1906, 1879,
-     1904, 1876, 1868, 1880, 1878, 1874, 1885, 1899, 1896, 1887,
-     1896, 1905, 1904, 4234, 1894, 1899, 1895, 1913, 1910, 1919,
-      425,  435, 1927, 4234, 1930, 1932, 1907, 1929, 1916, 1927,
-
-     1913, 1933,  365, 1932, 1926, 1938, 1931, 1953, 1936, 1951,
-        0, 1952, 1957, 1947, 1941, 1946, 1949, 1959, 1964, 1955,
-     1965, 1953, 1970, 1973,    0, 1963, 1976, 1957, 1979, 1974,
-     1988, 1980, 1990, 1975,    0, 1996, 2002, 1997, 1996, 2011,
-     2012, 2017,    0, 1999, 2000, 2012, 2003, 2012, 2021, 2025,
-     2011, 2028, 2029, 2014, 2012, 2028, 2021, 2021,    0, 2028,
-     2047, 2029, 2032, 2040, 2039, 2037, 2052,    0, 2044, 2071,
-     2064,    0, 2059, 2063, 2070, 2075, 2077, 2069, 2079, 2068,
-     2095, 2086, 2083, 2072, 2091, 2078, 2078, 2079, 2083, 2087,
-     2094, 2101, 2102, 2103, 2113, 2122, 2114, 2111, 2118, 2130,
-
-     2128,    0, 2132,    0, 2141, 2148, 2124, 2136, 2134, 2143,
-     2133, 2143, 2149, 2154, 2155, 2149, 2162, 2155, 2145, 2148,
-     2161, 2149, 2175, 2160, 2174, 2175, 2156, 2188, 2193, 2183,
-     2187, 2183, 2203, 2196, 2194, 2187, 2204, 2209, 2212, 2201,
-     2212, 2207, 2208, 2200, 2210, 2205, 2204, 2221, 2212, 2223,
-     2228,    0, 2221,    0, 2226, 2223, 2223, 2229, 2229,    0,
-     2241, 2241, 2244, 2260, 2260, 2251, 2259,    0, 2263, 2250,
-     2265, 2262, 2272, 2260, 2265, 2276, 2257, 2265, 2272, 2280,
-     4234, 2282, 2269, 2270, 2271, 2274,    0, 2279,    0, 2297,
-     2285, 2295, 2293, 2301, 2299, 2297,    0, 2307, 2313,    0,
-
-     4234, 2330, 2332, 4234, 2316, 2326, 2323, 2337, 2320, 2335,
-     2326, 2335, 2324, 2327, 2326, 2335, 2345, 2332, 2343, 2343,
-     2338, 4234,    0,    0, 2337,    0, 2356, 2346,    0, 2341,
-     2351,    0, 2363, 2349, 2361, 2350, 2355, 2376,    0, 2379,
-     2385, 2382, 2375, 2391, 2397, 2400, 2401,    0, 2391, 2386,
-     2388, 2388,    0,    0, 2399,    0, 2390, 2392,    0, 2395,
-     2410, 2398, 2394, 2414, 2402,    0, 2401, 2404,    0, 2423,
-     2407,    0,    0, 2410, 2425, 2451, 2416, 2442,    0, 2448,
-     2443,    0, 2455, 2434, 2461, 2458, 2470,    0, 2455,    0,
-     2452, 2470, 2474, 2463, 2463, 2479, 2460, 2470, 2489, 2477,
-
-     2477, 2494, 2506, 2515, 2491, 2516, 2509, 2520, 2512, 2525,
-     2508,    0, 2504, 2527, 2507, 2513, 2532, 2519, 2515, 2522,
-     2536, 2512, 2538, 2528, 2539,    0, 2528,    0, 2542, 2534,
-     2530, 2531, 2537, 2534, 2554, 2556, 2553, 2577, 2578, 2562,
-     2570, 2567, 2571, 2574, 2570, 2576, 2577, 2584, 2585, 2594,
-     2587, 2578, 2595, 2593, 2591, 2584, 2600, 2593, 2599, 2592,
-     2595, 2593,    0,    0, 2638, 2596, 2598, 2616, 2630, 2636,
-     2632,    0, 2643, 2630, 2641, 2639,    0, 2652, 2653, 2641,
-        0, 2655, 2651, 2652, 2635,    0,    0, 2642, 2663, 2646,
-     2650,    0, 4234, 4234, 2650, 2650, 2691, 4234, 2670, 2672,
-
-     2663, 2673, 2662, 2695, 4234, 2686, 4234, 2701,    0, 2683,
-     2701, 2690, 2704, 2714, 2697, 2705, 2717, 2715, 2702, 2715,
-     2714, 2719, 2708, 2718, 2720, 2725, 2712, 2724, 2735, 4234,
-     2728, 2733, 2726, 2751, 2729, 2739, 2755, 2750, 2746, 2758,
-        0, 2766,    0,    0, 2753,    0, 2756, 2755, 2759, 2777,
-        0, 2759, 2761, 2768, 2763, 2769,    0, 2780, 2772, 2769,
-     2780,    0, 2786,    0, 2783,    0, 2773,    0, 2779, 2797,
-     2778, 2795,    0,    0, 2787, 2792, 2810, 2797, 2796, 2808,
-        0, 2822, 2816, 2831, 2833, 2828, 2831, 2834, 2819, 2839,
-     2826, 2823, 2844, 2839,    0,    0, 2840, 2831, 2839, 2831,
-
-     2832, 2835, 2835, 2836, 2837, 2856, 2855, 2846, 2857, 2868,
-     2876, 2867, 2868,    0, 2869,    0, 2874, 2875, 2877, 2877,
-     2878, 2876, 2896, 2895, 2891, 2900, 2902, 2891, 2888, 2897,
-     2909,    0,    0, 2907,  349, 2888, 2896, 2911, 2911, 2893,
-     2910, 2909, 2904,    0,    0,    0,    0, 2920, 2917, 2920,
-     2923, 2940, 2948, 2931, 2933, 2936, 2943, 2958, 2940,    0,
-     2947,    0, 2941, 2960, 2960, 2947, 2967, 2964, 2955, 2966,
-     2969, 2973,    0,    0, 2966,    0,    0, 2957, 2959, 2959,
-     2960, 2980, 2980, 2972, 2978, 2996, 2992, 2991, 3007, 2993,
-        0,    0, 2999, 4234, 3003, 2995, 4234, 3001, 3021, 3009,
-
-     3005, 3025, 3026, 3004,    0, 3010, 4234, 4234, 3006, 3018,
-     3014, 3029, 3022, 3023, 3015, 3035, 4234, 3025, 3028, 3027,
-     4234,  294, 3032, 3039, 3049, 3034, 3054, 3047, 3054, 3069,
-     3060, 3071,    0, 3066, 3073, 3063, 3077,    0, 3073,    0,
-     3080, 3079, 3074,    0, 3071,    0, 3076, 3079, 3082, 3079,
-     3084, 3094, 3079, 3100, 3086, 3091,    0, 3097, 3105, 3097,
-     3105,    0, 3103, 3112, 3118, 3110, 3126, 3112, 3123, 3121,
-     3127,    0, 3130, 3136,    0, 3137, 3146, 3128, 3141, 3133,
-     3133, 3142, 3150,    0, 3147, 3145, 3150, 3159, 3156,    0,
-     3154, 3163, 3144, 3157, 3152, 3151, 3167,    0, 3165, 3167,
-
-     3175, 3185, 3181,    0, 3185,    0, 3183, 3203, 3189, 3225,
-     3189,    0, 3210, 3206,    0, 3201,    0, 3197, 3212, 3193,
-     3210, 3211, 3204, 3207, 3220, 3229, 3228, 3225, 3217, 3232,
-     3227, 3238, 3244, 3256, 3246, 3253, 3246, 3248, 3265, 3274,
-     3268, 3266, 3273, 3267, 3278, 3264, 3266, 3280, 3282, 3270,
-     3280, 3278, 3282, 3279, 3287, 3282, 3297, 3293, 3285, 3288,
-     3320, 3302, 4234, 3295, 4234, 3303, 3304, 4234, 3308, 3327,
-     3313, 3329, 4234, 4234, 3331, 3326, 3323, 3329, 3331,    0,
-     3328, 3329, 3328, 3337, 3344, 3337, 3351, 3352, 3337,    0,
-     3345, 3348, 3359, 3345, 3349, 3364,    0, 3361, 3374, 3376,
-
-     3373, 3381,    0, 3389, 3387, 3375,    0, 3383, 3380, 3393,
-     3389, 3390, 3385, 3386, 3385, 3390, 3396, 3385, 3386, 3399,
-     3396, 3414, 3397, 3412, 3421, 3420, 3404, 3426,    0,    0,
-        0, 3404, 3417, 3420, 3437, 3424, 3439, 3444, 3430, 3453,
-        0,    0, 3443, 3458, 3446, 3462, 3449, 3456, 3448, 3466,
-     3453, 3472, 3449, 3467,    0, 3464, 3455,    0, 3458, 3468,
-        0, 3468, 3469, 3473,    0, 3475, 3484, 3473, 3481,    0,
-     3488,    0, 3493, 3504,    0, 3498, 3488, 3508, 3499, 3508,
-     3521, 3505, 3510,    0, 3503,    0, 3523, 3516, 3525,    0,
-        0,    0, 3517, 3512, 3520, 3531, 3522, 4234, 3533, 3527,
-
-     4234, 3538,    0, 4234, 3541, 4234, 4234, 3526, 4234, 4234,
-     3534, 3536,    0, 3547,    0, 3541,    0, 3539,    0, 3557,
-     3551, 3552,    0, 3551, 3558,    0, 3563, 3569, 3574,    0,
-     3565,    0,    0, 3575,    0, 3571,    0,    0, 3581, 3570,
-     3585, 3590,    0, 3589, 3591, 3586, 3584, 3597, 3594, 3595,
-     3601, 3600, 3586, 3607,    0, 3594, 3607, 3604, 3596, 3612,
-     3621, 3622, 3612, 3632,    0, 3629, 3629, 3620, 3633, 3631,
-     3641, 3629, 3638, 3647, 3639, 3650, 3642, 3632, 3643, 3639,
-     3634, 3648, 3657, 3661, 3655, 3665, 3663, 3658, 3673,    0,
-        0, 3660, 3658, 3665, 3673, 3675, 3679, 3690,    0,    0,
-
-        0, 3684,    0, 3699,    0, 3681,    0, 3690, 3693, 3688,
-     3693, 4234, 3698, 4234, 3699, 3700, 3710, 3697, 3698,    0,
-     3716, 3720,    0,    0, 3702, 3709, 3715,    0,    0, 3713,
-     3714,    0, 3710,    0,    0,    0,    0, 3712, 3733, 3735,
-     3719, 3739, 3717,    0,    0, 3743, 3732, 3748, 3745, 3757,
-     3748, 3760, 3761,    0, 3764, 3751, 3765, 3762, 3761, 3772,
-     3772, 3766, 3755,    0, 3772, 3768, 3764, 3784, 3775, 3775,
-     3772, 3773, 3782, 3791, 3796, 3780, 3782,    0, 3802,    0,
-        0, 3790,    0, 3812,    0,    0,    0, 3800,    0, 3814,
-     3800, 3810, 3823,    0, 3819, 4234, 4234, 4234, 3811, 4234,
-
-     4234,    0, 3817, 3815, 3811,    0, 3822, 3824, 3821, 3815,
-        0, 3830, 3833, 3841, 3827, 3829,    0,    0,    0,    0,
-     3838, 3838, 3849,    0,    0, 3847,    0,    0, 3843, 3855,
-        0, 3856,    0, 3863, 3847, 3864, 3855, 3873, 3863, 3873,
-     3877, 3879,    0, 3875,    0,    0, 3890,    0, 3880,    0,
-     3893, 3878, 3890, 3875,    0, 3886, 4234, 3890,    0, 3888,
-     3891,    0, 3894,    0, 3903, 3904, 3891,    0, 3905, 3908,
-     3903,    0, 3892, 3907,    0, 3903, 3911,    0,    0,    0,
-     3908,    0, 3901, 3908, 3923, 3930, 3935, 3941, 3943, 3945,
-     3932,    0, 3941, 3941, 3954,    0,    0, 3956, 3957,    0,
-
-     3936, 3951,    0, 3959,    0,    0,    0, 3951, 3962, 3964,
-     3965,    0, 3966, 3967, 3962, 3959, 3959, 4234, 3962,    0,
-     3977, 3979, 3980, 3983,    0, 3968,    0,    0, 3993,    0,
-        0, 3984, 3990,    0,    0, 3991, 3992,    0,    0, 3996,
-     3997, 4001,    0, 4002, 4003, 4017, 4010,    0, 4010, 4011,
-     4022, 4011,    0,    0, 4013, 4011, 4019,    0, 4017, 4015,
-        0, 4234, 4086, 4095, 4104, 4113, 4117, 4124, 4133, 4136,
-     4145, 4154, 4163, 4172, 4181, 4190, 4197, 4206, 4215, 4224
+      809,  605,  701,  714,  812,  819,  313,  613,  654, 4303,
+     4303,  853,  648,  633,    0,  819,  828,  371,  859,    0,
+      627,  589,  870,  876,    0,  880,  886,  582,  938,  834,
+      895,  897,  848,  934,  833,  900,  834,  895,  856,  933,
+        0,  866,  900,  886,  941,  935,    0,  891,  923,    0,
+      949,  941,  939,  944,  955,  955,  942,  979,  949,  999,
+      951,  991,  961,  961,  986, 1009, 1010,  992, 1012, 1002,
+     1014, 1013, 1013, 1011,  996, 1011, 1037,    0, 1059, 1013,
+        0, 1021,    0, 1053, 1059, 1061, 1049, 1048, 1055, 1064,
+
+     1074, 1065, 1079, 1084, 1086, 1069, 1085, 1099, 1077, 1077,
+     1101, 1115, 1114, 1120, 1114, 1124, 1128, 1116, 1137, 1134,
+     1130, 1143, 1163, 1146, 1128, 1156, 1144, 1139, 1161, 1166,
+     1172, 1173, 1190, 1171,    0,    0, 1184,    0, 1177, 1184,
+     1194, 1196, 1181, 1197, 1182, 1184, 1203,  541, 4303, 1198,
+     1205, 1203, 1193, 1213, 1194, 1218, 1222, 1224, 1236, 1240,
+     1242, 1221, 1223, 1248, 1242, 1250,  538, 1257, 4303, 1248,
+     1251, 1257, 1260, 1250, 1243, 1260, 1265, 1264, 1265, 1261,
+     1291, 1261, 1283, 1305, 1262, 1298, 1295, 1289, 1298, 1290,
+     1307,    0, 1297, 1314, 1300, 1297, 1314, 1307, 1307, 1325,
+
+     1301, 1327, 1316, 1322, 1318, 1331, 1326, 1340, 4303,  536,
+     4303,  531, 1366, 1371, 1376, 1390, 1388, 1398, 4303, 4303,
+     4303, 4303, 1366, 1370, 1354, 1382, 1383, 1374, 1386, 1389,
+     1384, 1386, 4303, 1383, 1390, 4303, 1388, 4303, 1404, 1390,
+     1400, 1395, 1395,  528, 1420, 1409, 4303,  493,  322, 4303,
+     4303,  535, 4303,  490,    0, 4303, 4303, 4303, 1436, 1458,
+      797,  850,  900, 1413,    0, 1460, 1466,  902,  911, 1430,
+     1435, 1452, 1449, 1449, 1457, 1452, 1458, 1466, 1466, 1469,
+     1462, 1453, 1471, 1458, 1459, 1462, 1478, 1463, 1464, 1469,
+     1479,    0, 1485, 1466, 1487, 1467, 1474, 1485, 1494, 1483,
+
+     1507,    0, 1508, 1508, 1522, 1509, 1509, 1511, 1520, 1521,
+     1515, 1517, 1535, 1526,    0, 1528, 1528, 1523, 1540, 1524,
+     1543, 1543, 1540, 1543, 1543, 1547, 1536, 1556, 1552, 1553,
+     1575, 1570, 1583, 1582, 1578, 1586, 1589, 1575, 1592, 1594,
+        0,    0, 1589, 1590, 1632, 1595, 1613, 1601, 1604, 1686,
+     1606, 1592, 1600, 1618, 1607, 1624, 1633, 1631,    0,  480,
+     1650, 1660, 1664, 1648, 1648, 1651, 1670, 1695, 1672, 1671,
+     1688, 1692, 1676, 1693, 1696, 1708, 1697, 1720, 1719, 1729,
+     1728, 1714, 1723, 1733, 1728, 1735,    0, 1744, 1746, 1735,
+     1745, 1748, 1742, 1754, 1737, 1746,    0, 1758, 1751, 1749,
+
+     1747, 1763, 1745, 1759, 1769, 1761, 1775, 1772, 1774, 1772,
+     1789, 1788, 1775,    0,    0, 1780,    0,    0, 1787, 1792,
+     1792, 1794, 1808, 1807, 1810, 1811, 4303, 1807, 1801, 1815,
+     1807, 1812, 1820, 1815, 1815, 1810, 4303,  441, 4303, 1813,
+     1818, 1822, 1836, 1837, 1834, 1821, 1829, 1845, 1846, 1852,
+     1856, 1854, 1857, 1847, 1859, 1855, 1869, 1862, 1868, 1874,
+     1874, 1879, 1866, 1879, 1866,  386,  323,  383,  360, 1149,
+     1429, 1895, 1902, 1606, 1611, 1886, 1874, 1895, 1890, 1891,
+     1895, 1910, 1909, 1901, 1909, 1918, 1919, 1918, 4303, 1908,
+     1913, 1912, 1909, 1927, 1925, 1919, 1936,  425,  435, 1660,
+
+     4303, 1665, 1942, 1922, 1939, 1926, 1938, 1924, 1945,  401,
+     1942, 1932, 1950, 1941, 1968, 1951, 1968,    0, 1971, 1977,
+     1967, 1962, 1963, 1966, 1976, 1981, 1971, 1981, 1969, 1986,
+     1987,    0, 1979, 1992, 1973, 1995, 1984, 1998, 1991, 2001,
+     1987,    0, 2006, 2008, 2009, 2006, 2026, 2027, 2034,    0,
+     2018, 2020, 2032, 2024, 2029, 2038, 2042, 2028, 2044, 2045,
+     2030, 2028, 2044, 2036, 2038,    0, 2045, 2051, 2046, 2049,
+     2059, 2050, 2050, 2065,    0, 2059, 2083, 2070,    0, 2069,
+     2079, 2088, 2095, 2097, 2089, 2100, 2085, 2105, 2104, 2101,
+     2090, 2108, 2095, 2096, 2096, 2101, 2105, 2112, 2117, 2118,
+
+     2113, 2124, 2146, 2125, 2123, 2117, 2128, 2136,    0, 2147,
+        0, 2158, 2160, 2142, 2155, 2158, 2162, 2151, 2161, 2165,
+     2170, 2171, 2165, 2177, 2172, 2162, 2165, 2177, 2165, 2182,
+     2170, 2186, 2187, 2172, 2194, 2205, 2193, 2202, 2198, 2220,
+     2215, 2214, 2207, 2225, 2226, 2229, 2218, 2229, 2223, 2224,
+     2216, 2226, 2221, 2219, 2238, 2229, 2240, 2234,    0, 2238,
+        0, 2246, 2235, 2235, 2242, 2239,    0, 2247, 2253, 2254,
+     2275, 2275, 2268, 2278,    0, 2283, 2270, 2286, 2279, 2289,
+     2277, 2282, 2292, 2273, 2281, 2288, 2296, 4303, 2297, 2286,
+     2287, 2288, 2290,    0, 2295,    0, 2307, 2295, 2306, 2304,
+
+     2313, 2309, 2303,    0, 2319, 2323,    0, 4303, 2345, 2354,
+     4303, 2331, 2343, 2344, 2354, 2337, 2352, 2343, 2351, 2340,
+     2343, 2344, 2343, 2352, 2363, 2356, 2351, 2362, 2362, 2343,
+     2367, 4303,    0,    0, 2356,    0, 2374, 2365,    0, 2360,
+     2371,    0, 2380, 2366, 2380, 2379, 2385, 2401,    0, 2402,
+     2408, 2405, 2400, 2412, 2417, 2420, 2421,    0, 2411, 2405,
+     2407, 2407,    0,    0, 2418,    0, 2410, 2411,    0, 2414,
+     2429, 2418, 2414, 2434, 2422,    0, 2422, 2425,    0, 2441,
+     2425,    0,    0, 2429, 2454, 2466, 2446, 2462,    0, 2471,
+     2469,    0, 2476, 2454, 2483, 2480, 2486,    0, 2474,    0,
+
+     2475, 2490, 2497, 2486, 2484, 2502, 2482, 2488, 2508, 2506,
+     2507, 2514, 2526, 2533, 2513, 2539, 2529, 2539, 2531, 2544,
+     2527,    0, 2522, 2545, 2525, 2531, 2550, 2538, 2534, 2541,
+     2555, 2531, 2558, 2548, 2559,    0, 2548,    0, 2563, 2555,
+     2548, 2549, 2556, 2563, 2584, 2576, 2573, 2595, 2600, 2585,
+     2590, 2586, 2590, 2593, 2589, 2594, 2595, 2602, 2604, 2611,
+     2606, 2597, 2614, 2612, 2610, 2605, 2621, 2614, 2620, 2610,
+     2613, 2612,    0,    0, 2661, 2625, 2628, 2636, 2650, 2653,
+     2652,    0, 2662, 2649, 2660, 2658,    0, 2670, 2671, 2659,
+        0, 2673, 2669, 2670, 2653,    0,    0, 2660, 2683, 2668,
+
+     2670,    0, 4303, 4303, 2671, 2671, 2704, 4303, 2688, 2692,
+     2700, 2709, 2696, 2718, 4303, 2709, 4303, 2720,    0, 2708,
+     2727, 2709, 2723, 2732, 2715, 2723, 2735, 2733, 2721, 2734,
+     2733, 2738, 2728, 2738, 2740, 2745, 2751, 2734, 2746, 2756,
+     4303, 2760, 2766, 2771, 2765, 2779, 2782, 2770, 2769, 2781,
+     2776, 2772, 2781,    0, 2788,    0,    0, 2775,    0, 2778,
+     2777, 2780, 2798,    0, 2781, 2782, 2789, 2784, 2790,    0,
+     2804, 2798, 2795, 2806,    0, 2811,    0, 2810,    0, 2811,
+        0, 2822, 2837, 2818, 2836,    0,    0, 2827, 2829, 2847,
+     2828, 2826, 2834,    0, 2848, 2842, 2854, 2855, 2850, 2853,
+
+     2856, 2840, 2860, 2848, 2844, 2865, 2860,    0,    0, 2861,
+     2855, 2867, 2858, 2859, 2862, 2873, 2879, 2877, 2896, 2896,
+     2886, 2894, 2905, 2907, 2897, 2894,    0, 2895,    0, 2900,
+     2898, 2899, 2899, 2900, 2898, 2917, 2916, 2913, 2921, 2923,
+     2912, 2909, 2921, 2935,    0,    0, 2933,  369, 2914, 2921,
+     2938, 2949, 2936, 2950, 2949, 2945,    0,    0,    0,    0,
+     2960, 2954, 2957, 2954, 2970, 2974, 2957, 2959, 2959, 2965,
+     2980, 2962,    0, 2969,    0, 2962, 2981, 2982, 2968, 2988,
+     2985, 2976, 2990, 2998, 2997,    0,    0, 2991,    0,    0,
+     2982, 2986, 3003, 3004, 3021, 3022, 3014, 3015, 3033, 3023,
+
+     3021, 3033, 3019,    0,    0, 3025, 4303, 3026, 3017, 4303,
+     3023, 3043, 3031, 3026, 3046, 3048, 3025,    0, 3031, 4303,
+     4303, 3027, 3039, 3038, 3055, 3048, 3049, 3040, 3055, 3074,
+     4303, 3069, 3080, 3073, 3070, 4303, 3085,  313, 3077, 3087,
+     3096, 3078, 3095, 3082, 3087, 3098, 3089, 3100,    0, 3092,
+     3098, 3088, 3102,    0, 3099,    0, 3105, 3104, 3100,    0,
+     3099,    0, 3106, 3110, 3113, 3110, 3117, 3137, 3125, 3146,
+     3132, 3137,    0, 3144, 3149, 3142, 3153,    0, 3150, 3156,
+     3159, 3145, 3159, 3141, 3152, 3150, 3153,    0, 3155, 3161,
+        0, 3162, 3172, 3153, 3166, 3159, 3161, 3172, 3181,    0,
+
+     3178, 3176, 3183, 3202, 3202,    0, 3200, 3209, 3190, 3204,
+     3196, 3196, 3215,    0, 3212, 3211, 3216, 3220, 3214,    0,
+     3214,    0, 3212, 3227, 3216, 3261, 3216,    0, 3235, 3231,
+        0, 3225,    0, 3227, 3243, 3228, 3256, 3260, 3253, 3256,
+     3268, 3272, 3273, 3273, 3264, 3276, 3268, 3273, 3277, 3285,
+     3275, 3282, 3272, 3273, 3292, 3296, 3293, 3300, 3305, 3299,
+     3312, 3307, 3308, 3322, 3326, 3315, 3325, 3323, 3324, 3321,
+     3329, 3324, 3339, 3335, 3327, 3329, 3377, 3345, 4303, 3332,
+     4303, 3338, 3333, 4303, 3334, 3346, 3356, 3341, 3338, 3363,
+     4303, 3360, 4303, 3365, 3362, 3368, 3374, 3380,    0, 3377,
+
+     3379, 3377, 3386, 3393, 3387, 3399, 3401, 3386,    0, 3394,
+     3398, 3408, 3394, 3396, 3411,    0, 3402, 3415, 3413, 3410,
+     3420,    0, 3431, 3429, 3417,    0, 3425, 3423, 3434, 3436,
+     3437, 3435, 3436, 3436, 3440, 3446, 3434, 3435, 3448, 3446,
+     3462, 3446, 3461, 3470, 3470, 3453, 3475,    0,    0,    0,
+     3451, 3464, 3461, 3478, 3461, 3476, 3483, 3472, 3495,    0,
+        0, 3485, 3500, 3489, 3503, 3496, 3503, 3498, 3516, 3504,
+     3519, 3500, 3513,    0, 3516, 3505,    0, 3509, 3518,    0,
+     3517, 3518, 3523,    0, 3524, 3534, 3520, 3522,    0, 3529,
+        0, 3530, 3541,    0, 3537, 3530, 3550, 3541, 3550, 3564,
+
+     3546, 3557,    0, 3550,    0, 3573, 3566, 3576,    0,    0,
+        0, 3567, 3562, 3569, 3580, 3571, 4303, 3583, 3575, 4303,
+     3587,    0, 4303, 3590, 4303, 4303, 3569, 3578, 4303, 3583,
+     4303, 3589, 3586, 3588,    0, 3599,    0, 3593,    0, 3591,
+        0, 3603, 3597, 3602,    0, 3602, 3611,    0, 3614, 3619,
+     3629,    0, 3618,    0,    0, 3631,    0, 3625,    0,    0,
+     3636, 3625, 3640, 3645,    0, 3644, 3645, 3640, 3637, 3651,
+     3649, 3650, 3654, 3655, 3641, 3661,    0, 3647, 3659, 3656,
+     3648, 3664, 3667, 3668, 3662, 3683,    0, 3682, 3680, 3670,
+     3688, 3684, 3697, 3683, 3693, 3702, 3694, 3705, 3697, 3686,
+
+     3697, 3692, 3688, 3703, 3712, 3714, 3710, 3720, 3717, 3711,
+     3725,    0,    0, 3712, 3710, 3717, 3719, 3721, 3729, 3741,
+        0,    0,    0, 3737,    0, 3750,    0, 3731,    0, 3745,
+     3746, 3744, 3747, 4303, 3753, 4303, 3754, 3755, 3765, 3766,
+     3753, 3753, 3755, 3756,    0, 3775, 3778,    0,    0, 3761,
+     3771, 3777,    0,    0, 3772, 3773,    0, 3769,    0,    0,
+        0,    0, 3772, 3792, 3793, 3779, 3805, 3784,    0,    0,
+     3806, 3794, 3806, 3803, 3820, 3808, 3822, 3822,    0, 3824,
+     3811, 3823, 3820, 3819, 3830, 3830, 3824, 3813,    0, 3831,
+     3826, 3823, 3846, 3837, 3834, 3831, 3832, 3842, 3850, 3854,
+
+     3840, 3848,    0, 3869,    0,    0, 3853,    0, 3874,    0,
+        0,    0, 3858,    0, 3872, 3863, 3870, 3885,    0, 3880,
+     4303, 4303, 4303, 3871, 4303, 4303, 4303, 4303, 3883,    0,
+     3878, 3874, 3870,    0, 3881, 3883, 3880, 3875,    0, 3890,
+     3891, 3904, 3890, 3892,    0,    0,    0,    0, 3899, 3901,
+     3912,    0,    0, 3909,    0,    0, 3906, 3925,    0, 3927,
+        0, 3934, 3919, 3930, 3919, 3936, 3927, 3937, 3941, 3942,
+        0, 3938,    0,    0, 3951,    0, 3941,    0, 3952, 3937,
+     3949, 3934,    0, 3945, 4303, 3936, 3952,    0, 3951, 3957,
+        0, 3959,    0, 3968, 3970, 3959,    0, 3970, 3973, 3970,
+
+        0, 3966, 3981,    0, 3977, 3985,    0,    0,    0, 3981,
+        0, 3974, 3975, 3991, 3995, 4000, 4009, 4008, 4010, 3996,
+        0, 4003, 4013, 4004, 4015,    0,    0, 4017, 4018,    0,
+     3998, 4014,    0, 4024,    0,    0,    0, 4018, 4029, 4030,
+     4032,    0, 4035, 4036, 4031, 4036, 4037, 4303,  294, 4040,
+        0, 4054, 4056, 4057, 4058,    0, 4046,    0,    0, 4066,
+        0,    0, 4055, 4059,    0, 4303,    0, 4060, 4061,    0,
+        0, 4063, 4063, 4066,    0, 4065, 4066, 4078, 4071,    0,
+     4071, 4073, 4085, 4076,    0,    0, 4080, 4078, 4085,    0,
+     4084, 4084,    0, 4303, 4155, 4164, 4173, 4182, 4186, 4193,
+
+     4202, 4205, 4214, 4223, 4232, 4241, 4250, 4259, 4266, 4275,
+     4284, 4293
     } ;
 
-static yyconst flex_int16_t yy_def[1881] =
+static yyconst flex_int16_t yy_def[1913] =
     {   0,
-     1862,    1, 1862,    3, 1862,    5, 1862,    7, 1863, 1863,
-     1864, 1864, 1862, 1862, 1862, 1862, 1862, 1865, 1866, 1862,
-     1867, 1868, 1862, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1869, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1870, 1862, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867,   35, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1871, 1872, 1862, 1862, 1862, 1862,
-     1862, 1873, 1874, 1875, 1862, 1862, 1862, 1862, 1865, 1866,
-     1866, 1862, 1862, 1867, 1867, 1867, 1876, 1868, 1867, 1862,
-     1862, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1869, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1877, 1862, 1862, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1862, 1878, 1862,
-     1879, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1871, 1871, 1862, 1872, 1880, 1862, 1862, 1873, 1862, 1874,
-     1875, 1862, 1862, 1862, 1862, 1862, 1862, 1867, 1867, 1862,
-     1867, 1862, 1862, 1862, 1862, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1862, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1877, 1862, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1878, 1878, 1879, 1879, 1862, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1871,
-     1880, 1880, 1862, 1862, 1862, 1862, 1867, 1867, 1867, 1867,
-
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1871, 1862, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1871, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-
-     1862, 1862, 1862, 1867, 1867, 1867, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1862, 1871, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1867, 1867, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-
-     1862, 1862, 1867, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1862, 1862, 1862, 1862, 1862, 1862,
-
-     1862, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1862, 1862, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1862, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1862, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-     1867,    0, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862
+     1894,    1, 1894,    3, 1894,    5, 1894,    7, 1895, 1895,
+     1896, 1896, 1894, 1894, 1894, 1894, 1894, 1897, 1898, 1894,
+     1899, 1900, 1894, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1901, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1902, 1894, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899,   35, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1903, 1904, 1894, 1894, 1894,
+     1894, 1894, 1905, 1906, 1907, 1894, 1894, 1894, 1894, 1897,
+     1898, 1898, 1894, 1894, 1899, 1899, 1899, 1908, 1900, 1899,
+     1894, 1894, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1901, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1909, 1894, 1894, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1894, 1910,
+     1894, 1911, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1903, 1903, 1903, 1894, 1904, 1912, 1894,
+     1894, 1905, 1894, 1906, 1907, 1894, 1894, 1894, 1894, 1894,
+     1894, 1899, 1899, 1894, 1899, 1894, 1894, 1894, 1894, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1909, 1894, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1910, 1910, 1911, 1911, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1903, 1903, 1912, 1912, 1894,
+
+     1894, 1894, 1894, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1903,
+     1903, 1894, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+
+     1899, 1899, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1903, 1903, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+
+     1899, 1899, 1899, 1899, 1899, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1899, 1899, 1899, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1903, 1903, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1899, 1899, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1903, 1894, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1899, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1903, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1903, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1903, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1894, 1894, 1903, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1894, 1903, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1894, 1903, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1894, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899,    0, 1894, 1894, 1894, 1894, 1894, 1894,
+
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894
     } ;
 
-static yyconst flex_int16_t yy_nxt[4317] =
+static yyconst flex_int16_t yy_nxt[4386] =
     {   0,
        14,   15,   16,   15,   15,   14,   17,   18,   14,   17,
        19,   14,   14,   14,   20,   21,   22,   23,   23,   14,
@@ -1103,454 +1117,461 @@ static yyconst flex_int16_t yy_nxt[4317] =
        89,   91,   92,   88,   93,   94,   88,   88,   88,   88,
        95,   96,   88,   97,   97,   98,   99,  100,  101,  102,
       103,  104,  105,  106,  107,   88,  108,   88,   88,  109,
-       88,  110,  111,   88,   88,  112,   88,  113,   88,   88,
-      114,   88,   88,   88,  115,   88,   88,   88,  116,  101,
+       88,  110,  111,   88,   88,  112,  113,  114,   88,   88,
+      115,   88,   88,   88,  116,   88,   88,   88,  117,  101,
 
       102,  103,  104,  105,  106,  107,   88,  108,   88,   88,
-      109,   88,  110,  111,   88,   88,  112,   88,  113,   88,
-       88,  114,   88,   88,   88,  117,  118,  119,  121,  801,
-      121,  121,  121,  122,  121,  121,  123,  122,  125,  125,
-      123,  126,  126,  128, 1374,  128,  128,  132,  183,  133,
-      133,  135,  135,  184,  319,  213,  249,  185,  250,  251,
-      136,  345,  320, 1305,  140,  346,  133,  133,  128,  801,
-      128,  128,  592,  563,  346,  141,  142,  354,  143,  183,
-      354,  127,  127,  829,  184,  144,  213,  249,  185,  250,
-      251,  136,  137,  137,  137,  137,  137,  137,  137,  137,
-
-      137,  137,  137,  137,  137,  137,  141,  142,  139,  143,
-      565,  137,  198,  137,  145,  252,  144,  239,  146,  565,
-      354,  240,  147,  163,  164,  165,  199,  253,  254,  166,
-      256,  148,  255,  563,  149,  167,  535,  257,  258,  259,
-      137,  137,  137,  198,  137,  145,  252,  158,  239,  146,
-      159,  160,  240,  147,  163,  164,  165,  199,  253,  254,
-      166,  256,  148,  255,  161,  149,  167,  162,  257,  258,
-      259,  137,  137,  137,  150,  592,  151,  346,  158,  152,
-      153,  159,  160,  154,  263,  592,  155,  822,  264,  156,
-      157,  707,  168,  177,  349,  161,  169,  178,  162,  349,
-
-      170,  179,  265,  271,  178,  150,  171,  151,  173,  172,
-      152,  153,  174,  289,  154,  263,  175,  155,  193,  264,
-      156,  157,  194,  168,  177,  176,  195,  169,  178,  180,
-      181,  170,  179,  265,  271,  178,  182,  171,  196,  173,
-      172,  346,  197,  174,  289,  343,  260,  175,  128,  193,
-      128,  128,  261,  194,  267,  267,  176,  195,  241,  242,
-      180,  181,  243,  262,  244,  320,  245,  182,  186,  196,
-      187,  246,  188,  197,  330,  173,  189,  260,  565,  190,
-      284,  563,  191,  261,  185,  192,  535,  268,  248,  241,
-      242,  360,  281,  243,  262,  244,  320,  245,  131,  186,
-
-      131,  187,  246,  188,  332,  330,  173,  189,  276,  277,
-      190,  284,  269,  191,  270,  185,  192,  200,  201,  278,
-      207,  144,  214,  281,  208,  202,  215,  203,  209,  204,
-      216,  210,  205,  206,  211,  332,  217,  212,  349,  276,
-      277,  338,  349,  269,  128,  270,  128,  128,  200,  201,
-      278,  207,  144,  214,  347,  208,  202,  215,  203,  209,
-      204,  216,  210,  205,  206,  211,  336,  217,  212,  218,
-      219,  220,  338,  228,  221,  222,  287,  229,  298,  223,
-      288,  230,  216,  224,  234,  322,  225,  231,  226,  323,
-      232,  227,  321,  235,  318,  236,  243,  233,  244,  237,
-
-      218,  219,  220,  238,  228,  221,  222,  287,  229,  298,
-      223,  288,  230,  216,  224,  234,  322,  225,  231,  226,
-      323,  232,  227,  150,  235,  151,  236,  243,  233,  244,
-      237,  339,  272,  274,  238,  273,  159,  275,  156,  168,
-      282,  283,  326,  169,  285,  327,  311,  279,  286,  310,
-      340,  309,  134,  280,  150,  308,  151,  312,  134,  313,
-      313,  248,  339,  272,  274,  131,  273,  159,  275,  156,
-      168,  282,  283,  326,  169,  285,  327,  290,  279,  286,
-      294,  340,  324,  134,  280,  291,  321,  203,  295,  134,
-      299,  300,  292,  293,  296,  308,  303,  297,  325, 1862,
-
-      304,  331,  301,  314,  314,  335,  305,  302,  290,  306,
-     1862,  294,  315,  324,  593,  593,  291,  321,  203,  295,
-      328,  299,  300,  292,  293,  296,  308,  303,  297,  325,
-      234,  304,  331,  301,  329,  333,  335,  305,  302,  235,
-      306,  307,  352,  315,  316,  237,  313,  313,  336,  342,
-      334,  328,  337,  353,  128,  317,  128,  128, 1862,  343,
-      128,  234,  128,  128,  361,  329,  333, 1862,  355,  355,
-      235,  366,  307,  352,  267,  267,  237,  356,  367,  336,
-      342,  334,  372,  337,  353,  140,  317,  133,  133,  135,
-      135,  375,  378,  381,  382,  361,  141, 1862,  136,  357,
-
-      358, 1862,  366,  359,  359,  362,  362,  268,  356,  367,
-     1862,  364,  364,  372,  363,  365,  365,  373,  359,  359,
-      359,  359,  375,  378,  381,  382,  383,  141,  374,  136,
-      137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
-      137,  137,  137,  137,  384,  363,  139, 1862,  373,  137,
-      368,  137,  376,  388,  369,  379,  389,  383,  377,  374,
-      386,  370,  387,  392,  385,  393,  390,  371,  394,  380,
-      391,  397,  398,  399,  395,  384,  402, 1862,  137,  137,
-      137,  368,  137,  376,  388,  369,  379,  389,  396,  377,
-      405,  386,  370,  387,  392,  385,  393,  390,  371,  394,
-
-      380,  391,  397,  398,  399,  395,  410,  402,  400,  137,
-      137,  137,  401,  403,  411,  412,  413,  404,  417,  396,
-      406,  405,  407,  408,  414,  418,  409,  419,  420,  425,
-      426,  427,  415,  428, 1862,  421,  422,  410,  416,  400,
-     1862,  423,  436,  401,  403,  411,  412,  413,  404,  417,
-      437,  406,  424,  407,  408,  414,  418,  409,  419,  420,
-      425,  426,  427,  415,  428,  433,  421,  422,  429,  416,
-      434,  435,  423,  436,  438,  448,  439,  440,  442,  449,
-      454,  437,  441,  424,  430,  450,  431,  444,  445,  446,
-      455,  432,  456,  451,  443,  447,  433,  457,  458,  429,
-
-      452,  434,  435,  459,  453,  438,  448,  439,  440,  442,
-      449,  454,  460,  441,  463,  430,  450,  431,  444,  445,
-      446,  455,  432,  456,  451,  443,  447,  464,  457,  458,
-      461,  452,  462,  465,  459,  453,  466,  471,  469,  467,
-      480,  481,  472,  460,  470,  463,  468,  473,  482,  474,
-      475,  483,  484,  485,  489,  476,  365,  365,  464,  477,
-      478,  461,  479,  462,  465,  490,  493,  466,  471,  469,
-      467,  480,  481,  472,  491,  470,  494,  468,  473,  482,
-      474,  475,  483,  484,  485,  489,  476,  486,  487,  495,
-      477,  478,  496,  479,  501,  505,  490,  493,  492,  506,
-
-      488,  502,  498,  497,  499,  491,  507,  494,  508,  503,
-      500,  509,  510,  511,  512,  513,  514,  515,  486,  487,
-      495,  504,  516,  496,  517,  501,  505,  518,  519,  492,
-      506,  488,  502,  498,  497,  499,  520,  507,  521,  508,
-      503,  500,  509,  510,  511,  512,  513,  514,  515,  522,
-      523,  524,  504,  516,  525,  517,  528,  526,  518,  519,
-      529,  530,  531,  532,  533,  366,  369,  520,  373,  521,
-      527,  536,  537,  370,  538,  539,  540,  395,  398,  371,
-      522,  523,  524,  542, 1862,  525,  400,  528,  526,  416,
-      541,  529,  530,  531,  532,  533,  366,  369,  544,  373,
-
-      547,  527,  536,  537,  370,  538,  539,  540,  395,  398,
-      371,  548,  434,  406,  542,  543,  408,  400,  545,  549,
-      416,  541,  444,  451,  423,  550,  551,  552,  462,  544,
-      553,  547,  470,  478,  556,  546,  557,  491,  554,  558,
-      559,  501,  548,  434,  406,  560,  543,  408,  555,  545,
-      549,  497,  498,  444,  451,  423,  550,  551,  552,  462,
-      500,  553,  561,  470,  478,  556,  546,  557,  491,  554,
-      558,  559,  501,  310,  572, 1862,  560,  314,  314,  555,
-      314,  314,  497,  498,  573,  316,  315,  313,  313,  315,
-      574,  500,  577,  561,  566,  566,  317,  580,  567,  567,
-
-      568,  568,  570,  570,  310,  572,  571,  571,  581,  569,
-      575,  576,  578,  582,  583,  573,  584,  315,  585,  586,
-      315,  574,  587,  577,  588,  579,  589,  317,  580,  594,
-      590,  357,  357,  365,  365,  593,  593,  355,  355,  581,
-      569,  575,  576,  578,  582,  583,  356,  584,  597,  585,
-      586,  343,  598,  587,  599,  588,  579,  589,  362,  362,
-      594,  590,  600,  601,  595,  595,  602,  363,  596,  596,
-      603,  604,  605,  606,  607,  608,  609,  356,  610,  597,
-      611,  612,  613,  598,  614,  599,  615,  616,  617,  620,
-      621,  618,  624,  600,  601,  625,  626,  602,  363,  619,
-
-      627,  603,  604,  605,  606,  607,  608,  609,  622,  610,
-      628,  611,  612,  613,  629,  614,  630,  615,  616,  617,
-      620,  621,  618,  624,  631,  623,  625,  626,  632,  633,
-      619,  627,  634,  635,  636,  638,  639,  640,  641,  622,
-      643,  628,  637,  644,  645,  629,  646,  630,  642,  647,
-      648,  649,  650,  651,  652,  631,  623,  653,  655,  632,
-      633,  654,  656,  634,  635,  636,  638,  639,  640,  641,
-      657,  643,  658,  637,  644,  645,  659,  646,  662,  642,
-      647,  648,  649,  650,  651,  652,  660,  663,  653,  655,
-      664,  665,  654,  656,  666,  667,  661,  668,  669,  670,
-
-      671,  657,  672,  658, 1862,  684, 1862,  659, 1862,  662,
-      687, 1862,  685,  688, 1862,  699,  686,  660,  663,  700,
-      701,  664,  665,  702,  703,  666,  667,  661,  668,  669,
-      670,  671,  704,  672,  673,  674,  684,  675,  705,  676,
-      677,  687,  678,  685,  688,  679,  699,  686,  680,  706,
-      700,  701,  681,  682,  702,  703,  683,  567,  567,  708,
-     1862,  709, 1862,  704,  712,  673,  674,  713,  675,  705,
-      676,  677,  714,  678,  710, 1862,  679,  715,  711,  680,
-      706, 1862,  718,  681,  682,  719,  724,  683,  689,  690,
-      708,  691,  709,  692,  693,  712,  694,  720,  713,  695,
-
-      722,  727, 1862,  714,  716,  710,  696,  697,  715,  711,
-      698,  723,  717,  718,  728,  729,  719,  724,  730,  689,
-      690,  721,  691,  731,  692,  693,  725,  694,  720,  732,
-      695,  722,  727,  726,  733,  716,  734,  696,  697,  735,
-      736,  698,  723,  717,  737,  728,  729,  738,  739,  730,
-      740,  742,  721,  743,  731,  744,  745,  725,  746,  747,
-      732,  748,  741,  749,  726,  733,  750,  734,  751,  752,
-      735,  736,  753,  754,  755,  737,  756,  757,  738,  739,
-      758,  740,  742,  759,  743,  760,  744,  745,  763,  746,
-      747,  761,  748,  741,  749,  766,  762,  750,  764,  751,
-
-      752,  767,  768,  753,  754,  755,  769,  756,  757,  770,
-      765,  758,  771,  772,  759,  773,  760,  774,  775,  763,
-      776,  777,  761,  778,  779,  780,  766,  762,  781,  764,
-      782,  783,  767,  768,  784,  785,  786,  769,  619,  787,
-      770,  765,  622,  771,  772,  788,  773,  637,  774,  775,
-      789,  776,  777,  790,  778,  779,  780,  653,  791,  781,
-      793,  782,  783,  686,  660,  784,  785,  786,  794,  619,
-      787,  710,  795,  622,  792,  716,  788,  796,  637,  722,
-      740,  789,  797,  798,  790,  799,  800,  762,  653,  791,
-     1862,  793,  567,  567,  686,  660,  571,  571,  804,  794,
-
-      568,  568,  710,  795,  805,  792,  716,  806,  796,  569,
-      722,  740,  807,  797,  798,  808,  799,  800,  762,  802,
-      802,  571,  571,  803,  803,  809,  810,  811,  812,  804,
-      813,  814,  815,  816,  817,  805,  818,  819,  806,  820,
-      569,  821,  823,  807,  593,  593,  808,  596,  596,  596,
-      596,  824,  825,  826,  827,  828,  809,  810,  811,  812,
-      830,  813,  814,  815,  816,  817,  831,  818,  819,  343,
-      820,  832,  821,  823,  833,  834,  835,  836,  837,  838,
-      840,  841,  824,  825,  826,  827,  828,  842,  843,  844,
-      845,  830,  846,  848,  847,  849,  850,  831,  839,  851,
-
-      852,  853,  832,  854,  855,  833,  834,  835,  836,  837,
-      838,  840,  841,  856,  857,  858,  859,  860,  842,  843,
-      844,  845,  861,  846,  848,  847,  849,  850,  862,  839,
-      851,  852,  853,  863,  854,  855,  864,  865,  866,  867,
-      868,  869,  870,  871,  856,  857,  858,  859,  860,  872,
-      873,  874,  875,  861,  876,  877,  878,  879,  880,  862,
-      881,  882,  883,  886,  863,  887,  888,  864,  865,  866,
-      867,  868,  869,  870,  871,  889,  890,  884,  891,  892,
-      872,  873,  874,  875,  885,  876,  877,  878,  879,  880,
-      895,  881,  882,  883,  886,  893,  887,  888,  896,  897,
-
-      898,  899,  894,  900,  901,  902,  889,  890,  884,  891,
-      892,  903,  907,  908,  909,  885,  910,  911,  912,  904,
-      913,  895,  914,  915,  916,  905,  893,  917,  918,  896,
-      897,  898,  899,  894,  900,  901,  902,  906,  919,  920,
-      924,  925,  903,  907,  908,  909,  921,  910,  911,  912,
-      904,  913,  922,  914,  915,  916,  905,  926,  917,  918,
-      927,  928,  929,  930,  923,  933,  934,  935,  906,  919,
-      920,  924,  925,  936,  931,  937,  938,  921,  932,  939,
-      940,  941,  942,  922,  943,  944,  945,  946,  926,  947,
-      948,  927,  928,  929,  930,  923,  933,  934,  935,  951,
-
-      952,  953,  954,  949,  936,  931,  937,  938,  950,  932,
-      939,  940,  941,  942,  955,  943,  944,  945,  946,  956,
-      947,  948,  957,  958,  959,  960,  961,  962,  963,  964,
-      951,  952,  953,  954,  949,  965,  966,  967,  968,  950,
-      969,  970,  971,  972,  973,  955,  974,  975,  976,  977,
-      956,  980,  981,  957,  958,  959,  960,  961,  962,  963,
-      964,  978,  982,  983,  984,  979,  965,  966,  967,  968,
-      985,  969,  970,  971,  972,  973,  986,  974,  975,  976,
-      977,  987,  980,  981,  988,  989,  990,  991,  992,  993,
-      994,  995,  978,  982,  983,  984,  979,  996,  997,  998,
-
-      999,  985, 1000, 1001, 1002, 1003, 1004,  986, 1005, 1006,
-     1007, 1008,  987, 1009, 1010,  988,  989,  990,  991,  992,
-      993,  994,  995, 1011, 1012,  884, 1013,  931,  996,  997,
-      998,  999, 1014, 1000, 1001, 1002, 1003, 1004, 1015, 1005,
-     1006, 1007, 1008, 1016, 1009, 1010, 1017,  803,  803,  803,
-      803, 1018, 1019, 1020, 1011, 1012,  884, 1013,  931, 1021,
-     1022, 1023, 1024, 1014, 1025, 1026, 1027, 1028, 1029, 1015,
-     1030, 1031, 1032, 1033, 1016, 1034, 1035, 1017, 1036, 1037,
-     1038, 1039, 1018, 1019, 1020, 1040, 1041, 1042,  343, 1043,
-     1021, 1022, 1023, 1024, 1044, 1025, 1026, 1027, 1028, 1029,
-
-     1045, 1030, 1031, 1032, 1033, 1046, 1034, 1035, 1049, 1036,
-     1037, 1038, 1039, 1047, 1050, 1048, 1040, 1041, 1042, 1051,
-     1043, 1052, 1053, 1054, 1055, 1044, 1056, 1057, 1058, 1059,
-     1060, 1045, 1061, 1062, 1063, 1064, 1046, 1065, 1066, 1049,
-     1067, 1068, 1069, 1070, 1047, 1050, 1048, 1071, 1072, 1073,
-     1051, 1074, 1052, 1053, 1054, 1055, 1081, 1056, 1057, 1058,
-     1059, 1060, 1862, 1061, 1062, 1063, 1064, 1082, 1065, 1066,
-     1083, 1067, 1068, 1069, 1070, 1075, 1084, 1086, 1071, 1072,
-     1073, 1087, 1074, 1088, 1089, 1076, 1085, 1081, 1077, 1078,
-     1095, 1096, 1079, 1080, 1090, 1097, 1098, 1091, 1082, 1099,
-
-     1092, 1083, 1100, 1101, 1093, 1102, 1075, 1084, 1086, 1094,
-     1103, 1104, 1087, 1105, 1088, 1089, 1076, 1085, 1106, 1077,
-     1078, 1095, 1096, 1079, 1080, 1090, 1097, 1098, 1091, 1107,
-     1099, 1092, 1108, 1100, 1101, 1093, 1102, 1109, 1110, 1111,
-     1094, 1103, 1104, 1112, 1105, 1113, 1114, 1115, 1116, 1106,
-     1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126,
-     1107, 1127, 1128, 1108, 1129, 1130, 1131, 1132, 1109, 1110,
-     1111, 1133, 1134, 1135, 1112, 1136, 1113, 1114, 1115, 1116,
-     1137, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125,
-     1126, 1138, 1127, 1128, 1139, 1129, 1130, 1131, 1132, 1140,
-
-     1141, 1142, 1133, 1134, 1135, 1143, 1136, 1144, 1145, 1146,
-     1147, 1137, 1148, 1149, 1150, 1151, 1153, 1154, 1155, 1156,
-     1157, 1159, 1138, 1160, 1152, 1139, 1161, 1158, 1162, 1163,
-     1140, 1141, 1142, 1164, 1165, 1166, 1143, 1170, 1144, 1145,
-     1146, 1147, 1171, 1148, 1149, 1150, 1151, 1153, 1154, 1155,
-     1156, 1157, 1159, 1172, 1160, 1152, 1173, 1161, 1158, 1162,
-     1163, 1167, 1174, 1168, 1164, 1165, 1166, 1175, 1170, 1176,
-     1177, 1178, 1179, 1171, 1180, 1181, 1182, 1184, 1185, 1169,
-     1187, 1188, 1183, 1189, 1172, 1190, 1191, 1173, 1186, 1192,
-     1193, 1194, 1167, 1174, 1168, 1197, 1198, 1199, 1175, 1200,
-
-     1176, 1177, 1178, 1179, 1201, 1180, 1181, 1182, 1184, 1185,
-     1169, 1187, 1188, 1183, 1189, 1195, 1190, 1191, 1202, 1186,
-     1192, 1193, 1194, 1203, 1062, 1075, 1197, 1198, 1199, 1047,
-     1200, 1048, 1196, 1085, 1092, 1201, 1204, 1147, 1205, 1206,
-     1207, 1208, 1209, 1094, 1210, 1211, 1195, 1212, 1213, 1202,
-     1214, 1215, 1216, 1217, 1203, 1062, 1075, 1218, 1219, 1220,
-     1047, 1221, 1048, 1196, 1085, 1092, 1223, 1204, 1147, 1205,
-     1206, 1207, 1208, 1209, 1094, 1210, 1211, 1222, 1212, 1213,
-     1224, 1214, 1215, 1216, 1217, 1225, 1226, 1227, 1218, 1219,
-     1220, 1228, 1221, 1229, 1230, 1231, 1232, 1223, 1233, 1234,
-
-     1235,  343, 1236, 1237, 1238, 1239, 1240, 1241, 1222, 1242,
-     1243, 1224, 1244, 1245, 1246, 1247, 1225, 1226, 1227, 1248,
-     1249, 1250, 1228, 1251, 1229, 1230, 1231, 1232, 1252, 1233,
-     1234, 1235, 1253, 1236, 1237, 1238, 1239, 1240, 1241, 1254,
-     1242, 1243, 1255, 1244, 1245, 1246, 1247, 1256, 1257, 1258,
-     1248, 1249, 1250, 1259, 1251, 1260, 1261, 1262, 1263, 1252,
-     1264, 1265, 1266, 1253, 1267, 1270, 1268, 1271, 1272, 1273,
-     1254, 1274, 1275, 1255, 1269, 1276, 1277, 1278, 1256, 1257,
-     1258, 1279, 1280, 1281, 1259, 1282, 1260, 1261, 1262, 1263,
-     1283, 1264, 1265, 1266, 1284, 1267, 1270, 1268, 1271, 1272,
-
-     1273, 1285, 1274, 1275, 1286, 1269, 1276, 1277, 1278, 1287,
-     1288, 1289, 1279, 1280, 1281, 1290, 1282, 1291, 1292, 1293,
-     1294, 1283, 1295, 1296, 1297, 1284, 1298, 1299, 1300, 1301,
-     1302, 1303, 1285, 1304, 1306, 1286, 1307, 1308, 1309, 1310,
-     1287, 1288, 1289, 1311, 1312, 1313, 1290, 1314, 1291, 1292,
-     1293, 1294, 1315, 1295, 1296, 1297, 1316, 1298, 1299, 1300,
-     1301, 1302, 1303, 1317, 1304, 1306, 1318, 1307, 1308, 1309,
-     1310, 1319, 1320, 1321, 1311, 1312, 1313, 1322, 1314, 1323,
-     1324, 1325, 1326, 1315, 1327, 1328, 1329, 1316, 1330, 1331,
-     1332, 1333, 1334, 1335, 1317, 1337, 1338, 1318, 1339, 1340,
-
-     1341, 1342, 1319, 1320, 1321, 1343, 1344, 1345, 1322, 1336,
-     1323, 1324, 1325, 1326, 1346, 1327, 1328, 1329, 1347, 1330,
-     1331, 1332, 1333, 1334, 1335, 1348, 1337, 1338, 1349, 1339,
-     1340, 1341, 1342, 1350, 1351, 1352, 1343, 1344, 1345, 1353,
-     1336, 1354, 1355, 1356, 1357, 1346, 1358, 1359, 1360, 1347,
-     1361, 1362, 1363, 1364, 1365, 1366, 1348, 1367, 1368, 1349,
-     1369, 1370, 1371, 1372, 1350, 1351, 1352, 1373, 1375, 1376,
-     1353, 1377, 1354, 1355, 1356, 1357, 1378, 1358, 1359, 1360,
-     1379, 1361, 1362, 1363, 1364, 1365, 1366, 1380, 1367, 1368,
-     1381, 1369, 1370, 1371, 1372, 1382, 1383, 1384, 1373, 1375,
-
-     1376, 1385, 1377, 1386, 1387, 1388, 1389, 1378, 1390, 1391,
-     1392, 1379, 1393, 1394, 1395, 1396, 1397, 1398, 1380, 1399,
-     1400, 1381, 1401, 1402, 1403, 1404, 1382, 1383, 1384, 1405,
-     1406, 1407, 1385, 1408, 1386, 1387, 1388, 1389, 1409, 1390,
-     1391, 1392, 1410, 1393, 1394, 1395, 1396, 1397, 1398, 1411,
-     1399, 1400, 1412, 1401, 1402, 1403, 1404, 1413, 1414, 1415,
-     1405, 1406, 1407, 1416, 1408, 1417, 1418, 1419, 1420, 1409,
-     1421, 1422, 1423, 1410, 1424, 1425, 1426, 1427, 1428, 1429,
-     1411, 1430, 1431, 1412, 1432, 1433, 1434, 1435, 1413, 1414,
-     1415, 1436, 1437, 1438, 1416, 1439, 1417, 1418, 1419, 1420,
-
-     1440, 1421, 1422, 1423, 1441, 1424, 1425, 1426, 1427, 1428,
-     1429, 1442, 1430, 1431, 1443, 1432, 1433, 1434, 1435, 1444,
-     1446, 1445, 1436, 1437, 1438, 1449, 1439, 1447, 1862, 1455,
-     1862, 1440, 1456, 1457, 1862, 1441, 1458, 1459, 1460, 1461,
-     1462, 1463, 1442, 1464, 1465, 1443, 1466, 1448, 1450, 1451,
-     1444, 1446, 1445, 1467, 1468, 1469, 1449, 1470, 1447, 1452,
-     1455, 1453, 1471, 1456, 1457, 1454, 1472, 1458, 1459, 1460,
-     1461, 1462, 1463, 1473, 1464, 1465, 1474, 1466, 1448, 1450,
-     1451, 1475, 1476, 1477, 1467, 1468, 1469, 1478, 1470, 1479,
-     1452, 1480, 1453, 1471, 1483, 1484, 1454, 1472, 1481, 1485,
-
-     1482, 1486, 1487, 1488, 1473, 1489, 1490, 1474, 1491, 1492,
-     1493, 1494, 1475, 1476, 1477, 1495, 1496, 1497, 1478, 1498,
-     1479, 1499, 1480, 1500, 1501, 1483, 1484, 1502, 1503, 1481,
-     1485, 1482, 1486, 1487, 1488, 1504, 1489, 1490, 1505, 1491,
-     1492, 1493, 1494, 1450, 1451, 1506, 1495, 1496, 1497, 1507,
-     1498, 1508, 1499, 1509, 1500, 1501, 1453, 1510, 1502, 1503,
-     1454, 1511, 1512, 1513, 1514, 1515, 1504, 1516, 1517, 1505,
-     1518, 1519, 1520, 1521, 1450, 1451, 1506, 1522, 1523, 1524,
-     1507, 1525, 1508, 1526, 1509, 1527, 1528, 1453, 1510, 1529,
-     1530, 1454, 1511, 1512, 1513, 1514, 1515, 1531, 1516, 1517,
-
-     1532, 1518, 1519, 1520, 1521, 1533, 1534, 1535, 1522, 1523,
-     1524, 1536, 1525, 1537, 1526, 1538, 1527, 1528, 1539, 1540,
-     1529, 1530, 1541, 1542, 1543, 1544, 1545, 1546, 1531, 1547,
-     1548, 1532, 1549, 1550, 1551, 1552, 1533, 1534, 1535, 1553,
-     1554, 1555, 1536, 1556, 1537, 1557, 1538, 1558, 1559, 1539,
-     1540, 1560, 1561, 1541, 1542, 1543, 1544, 1545, 1546, 1562,
-     1547, 1548, 1563, 1549, 1550, 1551, 1552, 1564, 1565, 1566,
-     1553, 1554, 1555, 1567, 1556, 1568, 1557, 1569, 1558, 1559,
-     1570, 1571, 1560, 1561, 1572, 1573, 1574, 1575, 1576, 1577,
-     1562, 1580, 1583, 1563, 1578, 1584, 1585, 1581, 1564, 1565,
-
-     1566, 1586, 1579, 1587, 1567, 1588, 1568, 1589, 1569, 1590,
-     1591, 1570, 1571, 1582, 1592, 1572, 1573, 1574, 1575, 1576,
-     1577, 1593, 1580, 1583, 1594, 1578, 1584, 1585, 1581, 1595,
-     1596, 1597, 1586, 1579, 1587, 1598, 1588, 1599, 1589, 1600,
-     1590, 1591, 1601, 1602, 1582, 1592, 1603, 1604, 1605, 1606,
-     1607, 1608, 1593, 1609, 1610, 1594, 1611, 1612, 1613, 1614,
-     1595, 1596, 1597, 1615, 1616, 1617, 1598, 1618, 1599, 1619,
-     1600, 1620, 1621, 1601, 1602, 1622, 1623, 1603, 1604, 1605,
-     1606, 1607, 1608, 1624, 1609, 1610, 1625, 1611, 1612, 1613,
-     1614, 1626, 1627, 1628, 1615, 1616, 1617, 1629, 1618, 1630,
-
-     1619, 1631, 1620, 1621, 1632, 1633, 1622, 1623, 1634, 1635,
-     1636, 1637, 1638, 1639, 1624, 1640, 1641, 1625, 1642, 1643,
-     1644, 1645, 1626, 1627, 1628, 1646, 1647, 1648, 1629, 1649,
-     1630, 1650, 1631, 1651, 1652, 1632, 1633, 1653, 1654, 1634,
-     1635, 1636, 1637, 1638, 1639, 1655, 1640, 1641, 1656, 1642,
-     1643, 1644, 1645, 1657, 1658, 1659, 1646, 1647, 1648, 1660,
-     1649, 1661, 1650, 1662, 1651, 1652, 1663, 1664, 1653, 1654,
-     1665, 1666, 1667, 1668, 1669, 1670, 1655, 1671, 1672, 1656,
-     1673, 1674, 1675, 1676, 1657, 1658, 1659, 1677, 1678, 1679,
-     1660, 1680, 1661, 1681, 1662, 1682, 1683, 1663, 1664, 1684,
-
-     1685, 1665, 1666, 1667, 1668, 1669, 1670, 1686, 1671, 1672,
-     1687, 1673, 1674, 1675, 1676, 1688, 1689, 1690, 1677, 1678,
-     1679, 1691, 1680, 1692, 1681, 1693, 1682, 1683, 1694, 1695,
-     1684, 1685, 1696, 1697, 1698, 1699, 1700, 1701, 1686, 1702,
-     1703, 1687, 1704, 1705, 1706, 1707, 1688, 1689, 1690, 1708,
-     1709, 1710, 1691, 1711, 1692, 1712, 1693, 1713, 1714, 1694,
-     1695, 1715, 1716, 1696, 1697, 1698, 1699, 1700, 1701, 1717,
-     1702, 1703, 1718, 1704, 1705, 1706, 1707, 1719, 1720, 1721,
-     1708, 1709, 1710, 1722, 1711, 1723, 1712, 1724, 1713, 1714,
-     1725, 1726, 1715, 1716, 1727, 1728, 1729, 1730, 1731, 1732,
-
-     1717, 1733, 1734, 1718, 1735, 1736, 1737, 1738, 1719, 1720,
-     1721, 1739, 1740, 1741, 1722, 1742, 1723, 1743, 1724, 1744,
-     1745, 1725, 1726, 1746, 1747, 1727, 1728, 1729, 1730, 1731,
-     1732, 1748, 1733, 1734, 1749, 1735, 1736, 1737, 1738, 1750,
-     1751, 1752, 1739, 1740, 1741, 1753, 1742, 1754, 1743, 1756,
-     1744, 1745, 1757, 1758, 1746, 1747, 1759, 1760, 1761, 1762,
-     1763, 1764, 1748, 1765, 1755, 1749, 1766, 1767, 1768, 1769,
-     1750, 1751, 1752, 1770, 1771, 1772, 1753, 1773, 1754, 1774,
-     1756, 1775, 1776, 1757, 1758, 1777, 1778, 1759, 1760, 1761,
-     1762, 1763, 1764, 1779, 1765, 1755, 1780, 1766, 1767, 1768,
-
-     1769, 1781, 1782, 1783, 1770, 1771, 1772, 1784, 1773, 1785,
-     1774, 1786, 1775, 1776, 1787, 1788, 1777, 1778, 1789, 1790,
-     1791, 1792, 1793, 1794, 1779, 1795, 1796, 1780, 1797, 1798,
-     1799, 1800, 1781, 1782, 1783, 1801, 1802, 1803, 1784, 1804,
-     1785, 1805, 1786, 1806, 1807, 1787, 1788, 1808, 1809, 1789,
-     1790, 1791, 1792, 1793, 1794, 1810, 1795, 1796, 1811, 1797,
-     1798, 1799, 1800, 1812, 1813, 1814, 1801, 1802, 1803, 1815,
-     1804, 1816, 1805, 1817, 1806, 1807, 1818, 1819, 1808, 1809,
-     1820, 1821, 1822, 1823, 1824, 1825, 1810, 1826, 1827, 1811,
-     1828, 1829, 1830, 1831, 1812, 1813, 1814, 1832, 1833, 1834,
-
-     1815, 1835, 1816, 1836, 1817, 1837, 1838, 1818, 1819, 1839,
-     1840, 1820, 1821, 1822, 1823, 1824, 1825, 1841, 1826, 1827,
-     1842, 1828, 1829, 1830, 1831, 1843, 1844, 1845, 1832, 1833,
-     1834, 1846, 1835, 1847, 1836, 1848, 1837, 1838, 1849, 1850,
-     1839, 1840, 1851, 1852, 1853, 1854, 1855, 1856, 1841, 1857,
-     1858, 1842, 1859, 1860, 1861, 1862, 1843, 1844, 1845, 1862,
-     1862, 1862, 1846, 1862, 1847, 1862, 1848, 1862, 1862, 1849,
-     1850, 1862, 1862, 1851, 1852, 1853, 1854, 1855, 1856, 1862,
-     1857, 1858, 1862, 1859, 1860, 1861,  120,  120,  120,  120,
-      120,  120,  120,  120,  120,  124,  124,  124,  124,  124,
-
-      124,  124,  124,  124,  129, 1862,  129,  129,  129,  129,
-      129,  129,  129,  130, 1862,  130,  130,  130,  130,  130,
-      130,  130,  134,  134,  138,  138,  138,  138,  138,  138,
-      138,  138,  138,  247,  247,  247,  247,  247,  247,  247,
-      247,  247,  266, 1862,  266,  341,  341,  341,  341,  341,
-      341,  341,  341,  341,  344,  344,  344,  344,  344,  344,
+      109,   88,  110,  111,   88,   88,  112,  113,  114,   88,
+       88,  115,   88,   88,   88,  118,  119,  120,  122,  808,
+      122,  122,  122,  123,  122,  122,  124,  123,  126,  126,
+      124,  127,  127,  129, 1866,  129,  129,  133,  184,  134,
+      134,  136,  136,  185,  320,  214,  250,  186,  251,  252,
+      137,  349,  321, 1393,  141,  350,  134,  134,  129,  808,
+      129,  129,  599,  567,  350,  142,  143,  358,  144,  184,
+      358,  128,  128, 1321,  185,  145,  214,  250,  186,  251,
+      252,  137,  138,  138,  138,  138,  138,  138,  138,  138,
+
+      138,  138,  138,  138,  138,  138,  142,  143,  140,  144,
+      569,  138,  199,  138,  146,  253,  145,  240,  147,  839,
+      358,  241,  148,  164,  165,  166,  200,  254,  255,  167,
+      257,  149,  256,  569,  150,  168,  567,  258,  259,  260,
+      138,  138,  138,  199,  138,  146,  253,  159,  240,  147,
+      160,  161,  241,  148,  164,  165,  166,  200,  254,  255,
+      167,  257,  149,  256,  162,  150,  168,  163,  258,  259,
+      260,  138,  138,  138,  151,  599,  152,  350,  159,  153,
+      154,  160,  161,  155,  264,  599,  156,  832,  265,  157,
+      158,  539,  169,  178,  714,  162,  170,  179,  163,  353,
+
+      171,  180,  266,  272,  179,  151,  172,  152,  174,  173,
+      153,  154,  175,  290,  155,  264,  176,  156,  194,  265,
+      157,  158,  195,  169,  178,  177,  196,  170,  179,  181,
+      182,  171,  180,  266,  272,  179,  183,  172,  197,  174,
+      173,  353,  198,  175,  290,  350,  261,  176,  129,  194,
+      129,  129,  262,  195,  268,  268,  177,  196,  242,  243,
+      181,  182,  244,  263,  245,  321,  246,  183,  187,  197,
+      188,  247,  189,  198,  331,  174,  190,  261,  347,  191,
+      285,  569,  192,  262,  186,  193,  567,  269,  539,  242,
+      243,  249,  282,  244,  263,  245,  321,  246,  364,  187,
+
+      132,  188,  247,  189,  334,  331,  174,  190,  277,  278,
+      191,  285,  270,  192,  271,  186,  193,  201,  202,  279,
+      208,  145,  215,  282,  209,  203,  216,  204,  210,  205,
+      217,  211,  206,  207,  212,  334,  218,  213,  132,  277,
+      278,  340,  353,  270,  129,  271,  129,  129,  201,  202,
+      279,  208,  145,  215,  353,  209,  203,  216,  204,  210,
+      205,  217,  211,  206,  207,  212,  351,  218,  213,  219,
+      220,  221,  340,  229,  222,  223,  288,  230,  299,  224,
+      289,  231,  217,  225,  235,  323,  226,  232,  227,  324,
+      233,  228,  338,  236,  322,  237,  244,  234,  245,  238,
+
+      219,  220,  221,  239,  229,  222,  223,  288,  230,  299,
+      224,  289,  231,  217,  225,  235,  323,  226,  232,  227,
+      324,  233,  228,  151,  236,  152,  237,  244,  234,  245,
+      238,  341,  273,  275,  239,  274,  160,  276,  157,  169,
+      283,  284,  327,  170,  286,  328,  319,  280,  287,  312,
+      342,  311,  135,  281,  151,  310,  152,  313,  135,  314,
+      314,  309,  341,  273,  275,  249,  274,  160,  276,  157,
+      169,  283,  284,  327,  170,  286,  328,  291,  280,  287,
+      295,  342,  325,  135,  281,  292,  332,  204,  296,  135,
+      300,  301,  293,  294,  297,  309,  304,  298,  326,  132,
+
+      305,  333,  302,  315,  315,  337,  306,  303,  291,  307,
+     1894,  295,  316,  325,  600,  600,  292,  332,  204,  296,
+      329,  300,  301,  293,  294,  297,  309,  304,  298,  326,
+      235,  305,  333,  302,  330,  335,  337,  306,  303,  236,
+      307,  308,  343,  316,  317,  238,  314,  314,  338,  356,
+      336,  329,  339,  345,  129,  318,  129,  129,  357,  346,
+      129,  235,  129,  129,  365,  330,  335,  363,  363,  347,
+      236, 1894,  308,  343,  376, 1894,  238,  379,  370,  338,
+      356,  336, 1894,  339,  345,  371,  318,  359,  359,  357,
+      346,  141,  382,  134,  134,  365,  360,  136,  136,  361,
+
+      362,  385,  142,  363,  363,  376,  137, 1894,  379,  370,
+      368,  368,  366,  366,  369,  369,  371,  363,  363,  369,
+      369,  367,  386,  382,  377,  387, 1894,  360,  369,  369,
+      380, 1894,  385,  142,  392,  378,  381,  137,  138,  138,
+      138,  138,  138,  138,  138,  138,  138,  138,  138,  138,
+      138,  138,  367,  386,  140,  377,  387,  138,  372,  138,
+      383,  380,  373,  388,  393,  392,  378,  381,  390,  374,
+      391,  396,  394,  397,  384,  375,  395,  398,  399,  401,
+      402,  403,  406,  389,  409, 1894,  138,  138,  138,  372,
+      138,  383,  400,  373,  388,  393, 1894,  414,  415,  390,
+
+      374,  391,  396,  394,  397,  384,  375,  395,  398,  399,
+      401,  402,  403,  406,  389,  409,  404,  138,  138,  138,
+      405,  407,  416,  400,  410,  408,  411,  412,  414,  415,
+      413,  417,  418,  421,  422,  423,  424,  425,  426,  429,
+      419,  430,  431,  427,  432, 1894,  420,  404,  440,  441,
+     1894,  405,  407,  416,  428,  410,  408,  411,  412, 1894,
+      433,  413,  417,  418,  421,  422,  423,  424,  425,  426,
+      429,  419,  430,  431,  427,  432,  434,  420,  435,  440,
+      441,  437,  452,  436,  446,  428,  438,  439,  453,  454,
+      442,  433,  443,  444,  448,  449,  450,  455,  445,  456,
+
+      447,  458,  451,  457,  459,  460,  461,  434,  462,  435,
+      463,  464,  437,  452,  436,  446,  467,  438,  439,  453,
+      454,  442,  468,  443,  444,  448,  449,  450,  455,  445,
+      456,  447,  458,  451,  457,  459,  460,  461,  465,  462,
+      466,  463,  464,  469,  473,  470,  475,  467,  471,  476,
+      474,  478,  479,  468,  477,  472,  484,  480,  485,  486,
+      487,  481,  482,  488,  483,  489,  571,  571,  493,  465,
+      494,  466,  497,  498,  469,  473,  470,  475,  495,  471,
+      476,  474,  478,  479,  499,  477,  472,  484,  480,  485,
+      486,  487,  481,  482,  488,  483,  489,  490,  491,  493,
+
+      500,  494,  496,  497,  498,  502,  505,  503,  509,  495,
+      492,  501,  506,  504,  510,  499,  511,  512,  513,  514,
+      507,  515,  516,  517,  518,  519,  520,  521,  490,  491,
+      522,  500,  508,  496,  523,  524,  502,  505,  503,  509,
+      525,  492,  501,  506,  504,  510,  526,  511,  512,  513,
+      514,  507,  515,  516,  517,  518,  519,  520,  521,  527,
+      528,  522,  529,  508,  532,  523,  524,  530,  533,  534,
+      535,  525,  536,  537,  268,  268, 1894,  526,  370,  373,
+      531,  377,  540,  541,  543,  542,  374,  544,  399,  402,
+      527,  528,  375,  529,  546,  532, 1894,  420,  530,  533,
+
+      534,  535,  404,  536,  537,  548,  545,  269,  551,  370,
+      373,  531,  377,  540,  541,  543,  542,  374,  544,  399,
+      402,  552,  438,  375,  410,  546,  547,  412,  420,  549,
+      553,  448,  455,  404,  554,  427,  548,  545,  555,  551,
+      556,  466,  557,  474,  558,  482,  550,  560,  561,  495,
+      562,  502,  552,  438,  559,  410,  563,  547,  412,  504,
+      549,  553,  448,  455,  505,  554,  427,  501,  564,  555,
+      565,  556,  466,  557,  474,  558,  482,  550,  560,  561,
+      495,  562,  502,  315,  315,  559,  317,  563,  314,  314,
+      504,  311,  316,  315,  315,  505,  576,  318,  501,  564,
+
+      577,  565,  316,  570,  570,  572,  572,  571,  571,  578,
+      581,  574,  574,  582,  573,  575,  575,  579,  580,  584,
+      585,  586,  311,  316,  587,  588,  583,  576,  318,  589,
+      590,  577,  591,  316,  592,  593,  595,  594,  597, 1894,
+      578,  581,  596,  601,  582,  573,  571,  571,  579,  580,
+      584,  585,  586,  359,  359,  587,  588,  583,  604,  347,
+      589,  590,  360,  591,  605,  592,  593,  595,  594,  597,
+      347,  361,  361,  596,  601,  600,  600,  366,  366,  602,
+      602,  606,  607,  603,  603,  608,  367,  609,  610,  604,
+      611,  612,  613,  360,  614,  605,  615,  616,  617,  618,
+
+      619,  620,  621,  622,  623,  624,  625,  627,  628,  629,
+      631,  632,  606,  607,  626,  633,  608,  367,  609,  610,
+      634,  611,  612,  613,  635,  614,  630,  615,  616,  617,
+      618,  619,  620,  621,  622,  623,  624,  625,  627,  628,
+      629,  631,  632,  636,  637,  626,  633,  638,  639,  640,
+      641,  634,  642,  643,  645,  635,  646,  630,  647,  648,
+      650,  644,  651,  652,  653,  654,  655,  656,  657,  649,
+      658,  659,  660,  662,  636,  637,  661,  663,  638,  639,
+      640,  641,  664,  642,  643,  645,  665,  646,  666,  647,
+      648,  650,  644,  651,  652,  653,  654,  655,  656,  657,
+
+      649,  658,  659,  660,  662,  667,  669,  661,  663,  670,
+      671,  672,  673,  664,  674,  668,  675,  665,  676,  666,
+      677,  678,  679,  575,  575,  691, 1894,  694,  575,  575,
+      695, 1894,  706,  707, 1894,  692,  667,  669,  708,  693,
+      670,  671,  672,  673,  709,  674,  668,  675,  710,  676,
+      711,  677,  678,  679,  680,  681,  691,  682,  694,  683,
+      684,  695,  685,  706,  707,  686,  692,  712,  687,  708,
+      693,  713,  688,  689,  715,  709,  690,  600,  600,  710,
+     1894,  711,  603,  603,  716,  680,  681,  719,  682,  720,
+      683,  684,  721,  685,  722, 1894,  686,  717,  712,  687,
+
+      725,  718,  713,  688,  689,  715,  726,  690,  696,  697,
+      727,  698,  731,  699,  700,  716,  701,  732,  719,  702,
+      720,  723,  729,  721,  733,  722,  703,  704,  717,  724,
+      705,  725,  718,  730,  728,  734,  735,  726,  736,  696,
+      697,  727,  698,  731,  699,  700,  737,  701,  732,  738,
+      702,  739,  723,  729,  740,  733,  741,  703,  704,  742,
+      724,  705,  743,  744,  730,  728,  734,  735,  745,  736,
+      746,  747,  749,  750,  751,  752,  753,  737,  754,  755,
+      738,  756,  739,  748,  757,  740,  758,  741,  759,  760,
+      742,  761,  762,  743,  744,  763,  764,  765,  766,  745,
+
+      767,  746,  747,  749,  750,  751,  752,  753,  768,  754,
+      755,  770,  756,  769,  748,  757,  773,  758,  771,  759,
+      760,  774,  761,  762,  775,  776,  763,  764,  765,  766,
+      772,  767,  777,  778,  779,  780,  781,  782,  783,  768,
+      784,  785,  770,  786,  769,  787,  788,  773,  789,  771,
+      790,  791,  774,  792,  793,  775,  776,  626,  794,  629,
+      795,  772,  644,  777,  778,  779,  780,  781,  782,  783,
+      796,  784,  785,  797,  786,  660,  787,  788,  798,  789,
+      800,  790,  791,  693,  792,  793,  667,  801,  626,  794,
+      629,  795,  717,  644,  802,  723,  799,  803,  729,  747,
+
+      804,  796,  805,  806,  797,  807,  660,  769,  811,  798,
+      812,  800,  572,  572,  693,  809,  809,  667,  801,  810,
+      810,  573,  813,  717,  814,  802,  723,  799,  803,  729,
+      747,  804,  815,  805,  806,  816,  807,  817,  769,  811,
+      818,  812,  819,  820,  821,  822,  823,  824,  825,  826,
+      827,  828,  573,  813,  829,  814,  830,  833,  831,  603,
+      603,  834,  835,  815,  836,  837,  816,  838,  817,  347,
+      840,  818,  841,  819,  820,  821,  822,  823,  824,  825,
+      826,  827,  828,  842,  843,  829,  347,  830,  833,  831,
+      844,  845,  834,  835,  846,  836,  837,  847,  838,  848,
+
+      850,  840,  851,  841,  852,  853,  854,  855,  856,  858,
+      857,  859,  860,  861,  842,  843,  862,  863,  849,  864,
+      865,  844,  845,  866,  867,  846,  868,  869,  847,  870,
+      848,  850,  871,  851,  872,  852,  853,  854,  855,  856,
+      858,  857,  859,  860,  861,  873,  874,  862,  863,  849,
+      864,  865,  875,  876,  866,  867,  877,  868,  869,  878,
+      870,  879,  880,  871,  881,  872,  882,  883,  884,  885,
+      886,  887,  888,  889,  890,  891,  873,  874,  892,  893,
+      896,  894,  897,  875,  876,  898,  899,  877,  895,  900,
+      878,  901,  879,  880,  902,  881,  905,  882,  883,  884,
+
+      885,  886,  887,  888,  889,  890,  891,  903,  906,  892,
+      893,  896,  894,  897,  904,  907,  898,  899,  908,  895,
+      900,  909,  901,  910,  911,  902,  912,  905,  913,  914,
+      917,  918,  919,  920,  921,  915,  922,  923,  903,  906,
+      924,  925,  926,  927,  928,  904,  907,  916,  929,  908,
+      930,  934,  909,  935,  910,  911,  936,  912,  937,  913,
+      914,  917,  918,  919,  920,  921,  915,  922,  923,  938,
+      931,  924,  925,  926,  927,  928,  932,  939,  916,  929,
+      940,  930,  934,  943,  935,  944,  941,  936,  933,  937,
+      942,  945,  946,  947,  948,  949,  950,  951,  952,  953,
+
+      938,  931,  954,  955,  956,  957,  958,  932,  939,  961,
+      959,  940,  962,  963,  943,  960,  944,  941,  964,  933,
+      965,  942,  945,  946,  947,  948,  949,  950,  951,  952,
+      953,  966,  967,  954,  955,  956,  957,  958,  968,  969,
+      961,  959,  970,  962,  963,  971,  960,  972,  973,  964,
+      974,  965,  975,  976,  977,  978,  979,  980,  981,  982,
+      983,  984,  966,  967,  985,  986,  987,  988,  990,  968,
+      969,  989,  991,  970,  992,  993,  971,  994,  972,  973,
+      995,  974,  996,  975,  976,  977,  978,  979,  980,  981,
+      982,  983,  984,  997,  998,  985,  986,  987,  988,  990,
+
+      999, 1000,  989,  991, 1001,  992,  993, 1002,  994, 1003,
+     1004,  995, 1005,  996, 1006, 1007, 1008, 1009, 1010, 1011,
+     1012, 1013, 1014, 1015,  997,  998, 1016, 1017, 1018, 1019,
+     1020,  999, 1000, 1021, 1022, 1001,  894, 1023, 1002,  941,
+     1003, 1004, 1024, 1005, 1025, 1006, 1007, 1008, 1009, 1010,
+     1011, 1012, 1013, 1014, 1015, 1026, 1027, 1016, 1017, 1018,
+     1019, 1020,  810,  810, 1021, 1022, 1028,  894, 1023, 1029,
+      941,  810,  810, 1024, 1030, 1025, 1031, 1032, 1033, 1034,
+     1035, 1036, 1037, 1038, 1039, 1040, 1026, 1027, 1041, 1042,
+     1043, 1044, 1045,  347, 1046, 1048, 1049, 1028, 1050, 1051,
+
+     1029, 1052, 1053, 1054, 1047, 1030, 1055, 1031, 1032, 1033,
+     1034, 1035, 1036, 1037, 1038, 1039, 1040,  347, 1056, 1041,
+     1042, 1043, 1044, 1045, 1057, 1058, 1048, 1049, 1059, 1050,
+     1051, 1062, 1052, 1053, 1054, 1047, 1060, 1055, 1061, 1063,
+     1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1056,
+     1073, 1074, 1075, 1076, 1077, 1057, 1058, 1078, 1079, 1059,
+     1080, 1081, 1062, 1082, 1083, 1084, 1085, 1060, 1086, 1061,
+     1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072,
+     1087, 1073, 1074, 1075, 1076, 1077, 1094, 1095, 1078, 1079,
+     1088, 1080, 1081, 1096, 1082, 1083, 1084, 1085, 1099, 1086,
+
+     1089, 1100, 1097, 1090, 1091, 1101, 1102, 1092, 1093, 1108,
+     1103, 1087, 1098, 1104, 1109, 1110, 1105, 1094, 1095, 1111,
+     1106, 1088, 1112, 1113, 1096, 1107, 1114, 1115, 1116, 1099,
+     1117, 1089, 1100, 1097, 1090, 1091, 1101, 1102, 1092, 1093,
+     1108, 1103, 1118, 1098, 1104, 1109, 1110, 1105, 1119, 1120,
+     1111, 1106, 1121, 1112, 1113, 1122, 1107, 1114, 1115, 1116,
+     1123, 1117, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131,
+     1132, 1133, 1134, 1118, 1135, 1136, 1137, 1138, 1139, 1119,
+     1120, 1140, 1141, 1121, 1142, 1143, 1122, 1144, 1145, 1146,
+     1147, 1123, 1148, 1124, 1125, 1126, 1127, 1128, 1129, 1130,
+
+     1131, 1132, 1133, 1134, 1149, 1135, 1136, 1137, 1138, 1139,
+     1150, 1151, 1140, 1141, 1152, 1142, 1143, 1153, 1144, 1145,
+     1146, 1147, 1154, 1148, 1155, 1156, 1157, 1158, 1159, 1160,
+     1161, 1162, 1163, 1166, 1164, 1149, 1167, 1168, 1169, 1170,
+     1172, 1150, 1151, 1165, 1173, 1152, 1171, 1174, 1153, 1175,
+     1176, 1177, 1178, 1154, 1179, 1155, 1156, 1157, 1158, 1159,
+     1160, 1161, 1162, 1163, 1166, 1164, 1183, 1167, 1168, 1169,
+     1170, 1172, 1184, 1185, 1165, 1173, 1186, 1171, 1174, 1187,
+     1175, 1176, 1177, 1178, 1180, 1179, 1181, 1188, 1189, 1190,
+     1191, 1192, 1193, 1194, 1195, 1197, 1198, 1183, 1200, 1201,
+
+     1196, 1202, 1182, 1184, 1185, 1203, 1199, 1186, 1204, 1205,
+     1187, 1206, 1207, 1210, 1894, 1180, 1211, 1181, 1188, 1189,
+     1190, 1191, 1192, 1193, 1194, 1195, 1197, 1198, 1208, 1200,
+     1201, 1196, 1202, 1182, 1212, 1213, 1203, 1199, 1214, 1204,
+     1205, 1215, 1206, 1207, 1210, 1209, 1216, 1211, 1060, 1075,
+     1061, 1088, 1098, 1105, 1217, 1160, 1218, 1219, 1220, 1208,
+     1221, 1222, 1107, 1223, 1224, 1212, 1213, 1225, 1226, 1214,
+     1227, 1228, 1215, 1229, 1230, 1231, 1209, 1216, 1232, 1060,
+     1075, 1061, 1088, 1098, 1105, 1217, 1160, 1218, 1219, 1220,
+     1233, 1221, 1222, 1107, 1223, 1224, 1234, 1235, 1225, 1226,
+
+     1236, 1227, 1228, 1237, 1229, 1230, 1231, 1239, 1238, 1232,
+     1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249,
+     1250, 1233, 1251, 1252, 1253, 1254, 1255, 1234, 1235,  347,
+     1256, 1236,  347, 1257, 1237, 1258, 1259, 1260, 1239, 1238,
+     1261, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248,
+     1249, 1250, 1262, 1251, 1252, 1253, 1254, 1255, 1263, 1264,
+     1265, 1256, 1266, 1267, 1257, 1268, 1258, 1259, 1260, 1269,
+     1270, 1261, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278,
+     1279, 1280, 1281, 1262, 1282, 1283, 1286, 1284, 1287, 1263,
+     1264, 1265, 1288, 1266, 1267, 1285, 1268, 1289, 1290, 1291,
+
+     1269, 1270, 1292, 1271, 1272, 1273, 1274, 1275, 1276, 1277,
+     1278, 1279, 1280, 1281, 1293, 1282, 1283, 1286, 1284, 1287,
+     1294, 1295, 1296, 1288, 1297, 1298, 1285, 1299, 1289, 1290,
+     1291, 1300, 1301, 1292, 1302, 1303, 1304, 1305, 1306, 1307,
+     1308, 1309, 1310, 1311, 1312, 1293, 1313, 1314, 1315, 1316,
+     1317, 1294, 1295, 1296, 1318, 1297, 1298, 1319, 1299, 1320,
+     1322, 1323, 1300, 1301, 1324, 1302, 1303, 1304, 1305, 1306,
+     1307, 1308, 1309, 1310, 1311, 1312, 1325, 1313, 1314, 1315,
+     1316, 1317, 1326, 1327, 1328, 1318, 1329, 1330, 1319, 1331,
+     1320, 1322, 1323, 1332, 1333, 1324, 1334, 1335, 1336, 1337,
+
+     1338, 1339, 1340, 1341, 1342, 1343, 1344, 1325, 1345, 1346,
+     1347, 1348, 1349, 1326, 1327, 1328, 1350, 1329, 1330, 1353,
+     1331, 1354, 1351, 1355, 1332, 1333, 1356, 1334, 1335, 1336,
+     1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1352, 1345,
+     1346, 1347, 1348, 1349, 1357, 1358, 1359, 1350, 1360, 1361,
+     1353, 1362, 1354, 1351, 1355, 1363, 1364, 1356, 1365, 1366,
+     1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1352,
+     1376, 1377, 1378, 1379, 1380, 1357, 1358, 1359, 1381, 1360,
+     1361, 1382, 1362, 1383, 1384, 1385, 1363, 1364, 1386, 1365,
+     1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375,
+
+     1387, 1376, 1377, 1378, 1379, 1380, 1388, 1389, 1390, 1381,
+     1391, 1392, 1382, 1394, 1383, 1384, 1385, 1395, 1396, 1386,
+     1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406,
+     1407, 1387, 1408, 1409, 1410,  347, 1411, 1388, 1389, 1390,
+     1412, 1391, 1392, 1413, 1394, 1414, 1415, 1416, 1395, 1396,
+     1417, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405,
+     1406, 1407, 1418, 1408, 1409, 1410, 1419, 1411, 1420, 1421,
+     1422, 1412, 1423, 1424, 1413, 1425, 1414, 1415, 1416, 1426,
+     1427, 1417, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435,
+     1436, 1437, 1438, 1418, 1439, 1440, 1441, 1419, 1442, 1420,
+
+     1421, 1422, 1443, 1423, 1424, 1444, 1425, 1445, 1446, 1447,
+     1426, 1427, 1448, 1428, 1429, 1430, 1431, 1432, 1433, 1434,
+     1435, 1436, 1437, 1438, 1449, 1439, 1440, 1441, 1450, 1442,
+     1451, 1452, 1453, 1443, 1454, 1455, 1444, 1456, 1445, 1446,
+     1447, 1457, 1458, 1448, 1459, 1460, 1461, 1462, 1463, 1465,
+     1464, 1466, 1468, 1894, 1894, 1449, 1474, 1475, 1476, 1450,
+     1477, 1451, 1452, 1453, 1894, 1454, 1455, 1478, 1456, 1479,
+     1894, 1467, 1457, 1458, 1480, 1459, 1460, 1461, 1462, 1463,
+     1465, 1464, 1466, 1468, 1469, 1470, 1481, 1474, 1475, 1476,
+     1482, 1477, 1483, 1484, 1485, 1471, 1486, 1472, 1478, 1487,
+
+     1479, 1473, 1467, 1488, 1489, 1480, 1490, 1491, 1492, 1493,
+     1494, 1495, 1496, 1497, 1498, 1469, 1470, 1481, 1499, 1502,
+     1500, 1482, 1501, 1483, 1484, 1485, 1471, 1486, 1472, 1503,
+     1487, 1504, 1473, 1505, 1488, 1489, 1506, 1490, 1491, 1492,
+     1493, 1494, 1495, 1496, 1497, 1498, 1507, 1508, 1509, 1499,
+     1502, 1500, 1510, 1501, 1511, 1512, 1513, 1514, 1515, 1516,
+     1503, 1517, 1504, 1518, 1505, 1519, 1520, 1506, 1521, 1894,
+     1894, 1522, 1523, 1524, 1525, 1526, 1527, 1507, 1508, 1509,
+     1528, 1529, 1894, 1510, 1530, 1511, 1512, 1513, 1514, 1515,
+     1516, 1531, 1517, 1532, 1518, 1533, 1519, 1520, 1534, 1521,
+
+     1469, 1470, 1522, 1523, 1524, 1525, 1526, 1527, 1535, 1536,
+      347, 1528, 1529, 1472, 1537, 1530, 1538, 1473, 1539, 1540,
+     1541, 1542, 1531, 1543, 1532, 1544, 1533, 1545, 1546, 1534,
+     1547, 1469, 1470, 1548, 1549, 1550, 1551, 1552, 1553, 1535,
+     1536, 1554, 1555, 1556, 1472, 1537, 1557, 1538, 1473, 1539,
+     1540, 1541, 1542, 1558, 1543, 1559, 1544, 1560, 1545, 1546,
+     1561, 1547, 1562, 1563, 1548, 1549, 1550, 1551, 1552, 1553,
+     1564, 1565, 1554, 1555, 1556, 1566, 1567, 1557, 1568, 1569,
+     1570, 1571, 1572, 1573, 1558, 1574, 1559, 1575, 1560, 1576,
+     1577, 1561, 1578, 1562, 1563, 1579, 1580, 1581, 1582, 1583,
+
+     1584, 1564, 1565, 1585, 1586, 1587, 1566, 1567, 1588, 1568,
+     1569, 1570, 1571, 1572, 1573, 1589, 1574, 1590, 1575, 1591,
+     1576, 1577, 1592, 1578, 1593, 1594, 1579, 1580, 1581, 1582,
+     1583, 1584, 1595, 1596, 1585, 1586, 1587, 1597, 1598, 1588,
+     1599, 1600, 1602, 1603, 1605, 1606, 1589, 1607, 1590, 1601,
+     1591, 1608, 1609, 1592, 1610, 1593, 1594, 1611, 1612, 1604,
+     1613, 1614, 1615, 1595, 1596, 1616, 1617, 1618, 1597, 1598,
+     1619, 1599, 1600, 1602, 1603, 1605, 1606, 1620, 1607, 1621,
+     1601, 1622, 1608, 1609, 1623, 1610, 1624, 1625, 1611, 1612,
+     1604, 1613, 1614, 1615, 1626, 1627, 1616, 1617, 1618, 1628,
+
+     1629, 1619, 1630, 1631, 1632, 1633, 1634, 1635, 1620, 1636,
+     1621, 1637, 1622, 1638, 1639, 1623, 1640, 1624, 1625, 1641,
+     1642, 1644, 1643, 1645, 1646, 1626, 1627, 1647, 1648, 1649,
+     1628, 1629, 1650, 1630, 1631, 1632, 1633, 1634, 1635,  347,
+     1636, 1651, 1637, 1652, 1638, 1639, 1653, 1640, 1654, 1655,
+     1641, 1642, 1644, 1643, 1645, 1646, 1656, 1657, 1647, 1648,
+     1649, 1658, 1659, 1650, 1660, 1661, 1662, 1663, 1664, 1665,
+     1666, 1667, 1651, 1668, 1652, 1669, 1670, 1653, 1671, 1654,
+     1655, 1672, 1673, 1674, 1675, 1676, 1677, 1656, 1657, 1678,
+     1679, 1680, 1658, 1659, 1681, 1660, 1661, 1662, 1663, 1664,
+
+     1665, 1666, 1667, 1682, 1668, 1683, 1669, 1670, 1684, 1671,
+     1685, 1686, 1672, 1673, 1674, 1675, 1676, 1677, 1687, 1688,
+     1678, 1679, 1680, 1689, 1690, 1681, 1691, 1692, 1693, 1694,
+     1695, 1696, 1697, 1698, 1682, 1699, 1683, 1700, 1701, 1684,
+     1702, 1685, 1686, 1703, 1704, 1705, 1706, 1707, 1708, 1687,
+     1688, 1709, 1710, 1711, 1689, 1690, 1712, 1691, 1692, 1693,
+     1694, 1695, 1696, 1697, 1698, 1713, 1699, 1714, 1700, 1701,
+     1715, 1702, 1716, 1717, 1703, 1704, 1705, 1706, 1707, 1708,
+     1718, 1719, 1709, 1710, 1711, 1720, 1721, 1712, 1722, 1723,
+     1724, 1725, 1726, 1727, 1728, 1729, 1713, 1730, 1714, 1731,
+
+     1732, 1715, 1733, 1716, 1717,  347, 1734, 1735, 1736, 1737,
+     1738, 1718, 1719, 1739, 1740, 1741, 1720, 1721, 1742, 1722,
+     1723, 1724, 1725, 1726, 1727, 1728, 1729, 1743, 1730, 1744,
+     1731, 1732, 1745, 1733, 1746, 1747, 1748, 1734, 1735, 1736,
+     1737, 1738, 1749, 1750, 1739, 1740, 1741, 1751, 1752, 1742,
+     1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1743, 1761,
+     1744, 1762, 1763, 1745, 1764, 1746, 1747, 1748, 1765, 1766,
+     1767, 1768, 1769, 1749, 1750, 1770, 1771, 1772, 1751, 1752,
+     1773, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1774,
+     1761, 1775, 1762, 1763, 1776, 1764, 1777, 1778, 1779, 1765,
+
+     1766, 1767, 1768, 1769, 1780, 1781, 1770, 1771, 1772, 1782,
+     1784, 1773, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792,
+     1774, 1793, 1775, 1794, 1795, 1776, 1783, 1777, 1778, 1779,
+     1796, 1797, 1798,  347, 1799, 1780, 1781, 1800, 1801, 1802,
+     1782, 1784, 1803, 1785, 1786, 1787, 1788, 1789, 1790, 1791,
+     1792, 1804, 1793, 1805, 1794, 1795, 1806, 1783, 1807, 1808,
+     1809, 1796, 1797, 1798, 1810, 1799, 1811, 1812, 1800, 1801,
+     1802, 1813, 1814, 1803, 1815, 1816, 1817, 1818, 1819, 1820,
+     1821, 1822, 1804, 1823, 1805, 1824,  347, 1806, 1825, 1807,
+     1808, 1809, 1826, 1827, 1828, 1810, 1829, 1811, 1812, 1830,
+
+     1831, 1832, 1813, 1814, 1833, 1815, 1816, 1817, 1818, 1819,
+     1820, 1821, 1822, 1834, 1823, 1835, 1824, 1836, 1837, 1825,
+     1838, 1839, 1840, 1826, 1827, 1828, 1841, 1829, 1842, 1843,
+     1830, 1831, 1832, 1844, 1845, 1833, 1846, 1847, 1848, 1849,
+     1850, 1851, 1852, 1853, 1834, 1854, 1835, 1855, 1836, 1837,
+     1856, 1838, 1839, 1840, 1857, 1858, 1859, 1841, 1860, 1842,
+     1843, 1861, 1862,  347, 1844, 1845, 1863, 1846, 1847, 1848,
+     1849, 1850, 1851, 1852, 1853, 1864, 1854, 1865, 1855, 1867,
+     1868, 1856, 1869, 1870, 1871, 1857, 1858, 1859, 1872, 1860,
+     1873, 1874, 1861, 1862, 1875, 1876, 1877, 1863, 1878, 1879,
+
+     1880, 1881, 1882, 1883, 1884, 1885, 1864, 1886, 1865, 1887,
+     1867, 1868, 1888, 1869, 1870, 1871, 1889, 1890, 1891, 1872,
+     1892, 1873, 1874, 1893, 1894, 1875, 1876, 1877, 1894, 1878,
+     1879, 1880, 1881, 1882, 1883, 1884, 1885, 1894, 1886, 1894,
+     1887, 1894, 1894, 1888, 1894, 1894, 1894, 1889, 1890, 1891,
+     1894, 1892, 1894, 1894, 1893,  121,  121,  121,  121,  121,
+      121,  121,  121,  121,  125,  125,  125,  125,  125,  125,
+      125,  125,  125,  130, 1894,  130,  130,  130,  130,  130,
+      130,  130,  131, 1894,  131,  131,  131,  131,  131,  131,
+      131,  135,  135,  139,  139,  139,  139,  139,  139,  139,
+
+      139,  139,  248,  248,  248,  248,  248,  248,  248,  248,
+      248,  267, 1894,  267,  344,  344,  344,  344,  344,  344,
       344,  344,  344,  348,  348,  348,  348,  348,  348,  348,
-      348,  348,  350,  350,  350,  350,  350,  350,  350,  350,
-      350,  351,  351,  351, 1862, 1862,  351,  351, 1862,  351,
-      137,  137,  137,  137,  137,  137,  137,  137,  137,  534,
-
-     1862, 1862,  534,  534, 1862,  534,  562,  562,  562, 1862,
-      562,  562,  562,  562,  562,  564,  564,  564,  564, 1862,
-      564,  564,  564,  564,  591,  591,  591,  591,  591,  591,
-      591,  591,  591,   13, 1862, 1862, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862
+      348,  348,  352,  352,  352,  352,  352,  352,  352,  352,
+      352,  354,  354,  354,  354,  354,  354,  354,  354,  354,
+      355,  355,  355, 1894, 1894,  355,  355, 1894,  355,  138,
+      138,  138,  138,  138,  138,  138,  138,  138,  538, 1894,
+     1894,  538,  538, 1894,  538,  566,  566,  566, 1894,  566,
+      566,  566,  566,  566,  568,  568,  568,  568, 1894,  568,
+      568,  568,  568,  598,  598,  598,  598,  598,  598,  598,
+
+      598,  598,   13, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894
     } ;
 
-static yyconst flex_int16_t yy_chk[4317] =
+static yyconst flex_int16_t yy_chk[4386] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1587,446 +1608,453 @@ static yyconst flex_int16_t yy_chk[4317] =
 
         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
-        7,    7,    7,    7,    7,    7,    7,    7,    9,  563,
+        7,    7,    7,    7,    7,    7,    7,    7,    9,  567,
         9,    9,   10,    9,   10,   10,    9,   10,   11,   12,
-       10,   11,   12,   15, 1222,   15,   15,   20,   33,   20,
+       10,   11,   12,   15, 1849,   15,   15,   20,   33,   20,
        20,   21,   21,   34,   99,   40,   52,   34,   53,   54,
-       21,  116,   99, 1135,   23,  116,   23,   23,   67,  565,
-       67,   67,  345,  563,  345,   23,   24,  127,   24,   33,
-      127,   11,   12,  603,   34,   24,   40,   52,   34,   53,
+       21,  117,   99, 1238,   23,  117,   23,   23,   67,  569,
+       67,   67,  349,  567,  349,   23,   24,  128,   24,   33,
+      128,   11,   12, 1148,   34,   24,   40,   52,   34,   53,
        54,   21,   22,   22,   22,   22,   22,   22,   22,   22,
 
        22,   22,   22,   22,   22,   22,   23,   24,   22,   24,
-      565,   22,   37,   22,   25,   55,   24,   45,   25,  564,
-      127,   45,   25,   28,   28,   28,   37,   56,   57,   28,
-       58,   25,   57,  562,   25,   28,  534,   59,   60,   61,
+      569,   22,   37,   22,   25,   55,   24,   45,   25,  610,
+      128,   45,   25,   28,   28,   28,   37,   56,   57,   28,
+       58,   25,   57,  568,   25,   28,  566,   59,   60,   61,
        22,   22,   22,   37,   22,   25,   55,   27,   45,   25,
        27,   27,   45,   25,   28,   28,   28,   37,   56,   57,
        28,   58,   25,   57,   27,   25,   28,   27,   59,   60,
-       61,   22,   22,   22,   26,  591,   26,  591,   27,   26,
-       26,   27,   27,   26,   63,  592,   26,  592,   64,   26,
-       26,  456,   29,   31,  350,   27,   29,   31,   27,  348,
+       61,   22,   22,   22,   26,  598,   26,  598,   27,   26,
+       26,   27,   27,   26,   63,  599,   26,  599,   64,   26,
+       26,  538,   29,   31,  460,   27,   29,   31,   27,  354,
 
        29,   31,   65,   69,   75,   26,   29,   26,   30,   29,
        26,   26,   30,   80,   26,   63,   30,   26,   36,   64,
        26,   26,   36,   29,   31,   30,   36,   29,   31,   32,
        32,   29,   31,   65,   69,   75,   32,   29,   36,   30,
-       29,  344,   36,   30,   80,  341,   62,   30,   89,   36,
+       29,  352,   36,   30,   80,  348,   62,   30,   89,   36,
        89,   89,   62,   36,   66,   66,   30,   36,   46,   46,
        32,   32,   46,   62,   46,  105,   46,   32,   35,   36,
-       35,   46,   35,   36,  106,   74,   35,   62,  311,   35,
-       77,  309,   35,   62,   77,   35,  266,   66,  247,   46,
-       46,  137,   74,   46,   62,   46,  105,   46,  131,   35,
+       35,   46,   35,   36,  106,   74,   35,   62,  344,   35,
+       77,  312,   35,   62,   77,   35,  310,   66,  267,   46,
+       46,  248,   74,   46,   62,   46,  105,   46,  138,   35,
 
-      130,   35,   46,   35,  108,  106,   74,   35,   72,   72,
+      132,   35,   46,   35,  108,  106,   74,   35,   72,   72,
        35,   77,   68,   35,   68,   77,   35,   38,   38,   72,
        39,   68,   41,   74,   39,   38,   41,   38,   39,   38,
-       41,   39,   38,   38,   39,  108,   41,   39,  123,   72,
-       72,  112,  122,   68,   90,   68,   90,   90,   38,   38,
-       72,   39,   68,   41,  118,   39,   38,   41,   38,   39,
-       38,   41,   39,   38,   38,   39,  117,   41,   39,   42,
+       41,   39,   38,   38,   39,  108,   41,   39,  131,   72,
+       72,  112,  124,   68,   90,   68,   90,   90,   38,   38,
+       72,   39,   68,   41,  123,   39,   38,   41,   38,   39,
+       38,   41,   39,   38,   38,   39,  119,   41,   39,   42,
        42,   42,  112,   43,   42,   42,   79,   43,   83,   42,
        79,   43,   83,   42,   44,  101,   42,   43,   42,  101,
-       43,   42,  100,   44,   98,   44,   87,   43,   87,   44,
+       43,   42,  118,   44,  100,   44,   87,   43,   87,   44,
 
        42,   42,   42,   44,   43,   42,   42,   79,   43,   83,
        42,   79,   43,   83,   42,   44,  101,   42,   43,   42,
       101,   43,   42,   70,   44,   70,   44,   87,   43,   87,
        44,  113,   70,   71,   44,   70,   71,   71,   70,   73,
-       76,   76,  103,   73,   78,  103,   94,   73,   78,   93,
-      114,   92,   78,   73,   70,   91,   70,   95,   78,   95,
-       95,   48,  113,   70,   71,   19,   70,   71,   71,   70,
+       76,   76,  103,   73,   78,  103,   98,   73,   78,   94,
+      114,   93,   78,   73,   70,   92,   70,   95,   78,   95,
+       95,   91,  113,   70,   71,   48,   70,   71,   71,   70,
        73,   76,   76,  103,   73,   78,  103,   81,   73,   78,
        82,  114,  102,   78,   73,   81,  107,   81,   82,   78,
-       84,   84,   81,   81,   82,  110,   85,   82,  102,   13,
+       84,   84,   81,   81,   82,  110,   85,   82,  102,   19,
 
        85,  107,   84,   96,   96,  110,   85,   84,   81,   85,
-        0,   82,   96,  102,  357,  357,   81,  107,   81,   82,
+       13,   82,   96,  102,  361,  361,   81,  107,   81,   82,
       104,   84,   84,   81,   81,   82,  110,   85,   82,  102,
        86,   85,  107,   84,  104,  109,  110,   85,   84,   86,
-       85,   86,  125,   96,   97,   86,   97,   97,  111,  115,
-      109,  104,  111,  126,  121,   97,  121,  121,    0,  115,
-      128,   86,  128,  128,  139,  104,  109,    0,  132,  132,
-       86,  142,   86,  125,  267,  267,   86,  132,  142,  111,
-      115,  109,  144,  111,  126,  133,   97,  133,  133,  135,
-      135,  146,  148,  151,  152,  139,  133,    0,  135,  136,
-
-      136,    0,  142,  136,  136,  140,  140,  267,  132,  142,
-        0,  141,  141,  144,  140,  141,  141,  145,  358,  358,
-      359,  359,  146,  148,  151,  152,  153,  133,  145,  135,
-      138,  138,  138,  138,  138,  138,  138,  138,  138,  138,
-      138,  138,  138,  138,  154,  140,  138,    0,  145,  138,
-      143,  138,  147,  157,  143,  149,  158,  153,  147,  145,
-      155,  143,  155,  161,  154,  162,  160,  143,  163,  149,
-      160,  165,  165,  166,  164,  154,  168,    0,  138,  138,
-      138,  143,  138,  147,  157,  143,  149,  158,  164,  147,
-      170,  155,  143,  155,  161,  154,  162,  160,  143,  163,
-
-      149,  160,  165,  165,  166,  164,  172,  168,  167,  138,
-      138,  138,  167,  169,  173,  174,  175,  169,  177,  164,
-      171,  170,  171,  171,  176,  178,  171,  179,  180,  182,
-      183,  184,  176,  185,    0,  181,  181,  172,  176,  167,
-        0,  181,  189,  167,  169,  173,  174,  175,  169,  177,
-      191,  171,  181,  171,  171,  176,  178,  171,  179,  180,
-      182,  183,  184,  176,  185,  188,  181,  181,  186,  176,
-      188,  188,  181,  189,  193,  196,  193,  193,  194,  197,
-      200,  191,  193,  181,  186,  198,  186,  195,  195,  195,
-      201,  186,  202,  198,  194,  195,  188,  203,  204,  186,
-
-      199,  188,  188,  205,  199,  193,  196,  193,  193,  194,
-      197,  200,  206,  193,  208,  186,  198,  186,  195,  195,
-      195,  201,  186,  202,  198,  194,  195,  209,  203,  204,
-      207,  199,  207,  210,  205,  199,  211,  213,  212,  211,
-      216,  217,  214,  206,  212,  208,  211,  214,  218,  215,
-      215,  219,  220,  221,  223,  215,  364,  364,  209,  215,
-      215,  207,  215,  207,  210,  224,  226,  211,  213,  212,
-      211,  216,  217,  214,  225,  212,  227,  211,  214,  218,
-      215,  215,  219,  220,  221,  223,  215,  222,  222,  228,
-      215,  215,  229,  215,  231,  233,  224,  226,  225,  236,
-
-      222,  232,  230,  229,  230,  225,  238,  227,  239,  232,
-      230,  240,  241,  242,  243,  244,  245,  246,  222,  222,
-      228,  232,  249,  229,  250,  231,  233,  251,  252,  225,
-      236,  222,  232,  230,  229,  230,  253,  238,  254,  239,
-      232,  230,  240,  241,  242,  243,  244,  245,  246,  255,
-      256,  257,  232,  249,  258,  250,  260,  259,  251,  252,
-      261,  262,  263,  264,  265,  269,  270,  253,  271,  254,
-      259,  272,  273,  270,  273,  274,  275,  276,  277,  270,
-      255,  256,  257,  279,    0,  258,  278,  260,  259,  281,
-      278,  261,  262,  263,  264,  265,  269,  270,  282,  271,
-
-      284,  259,  272,  273,  270,  273,  274,  275,  276,  277,
-      270,  285,  286,  280,  279,  280,  280,  278,  283,  287,
-      281,  278,  288,  289,  283,  290,  292,  293,  294,  282,
-      295,  284,  297,  298,  299,  283,  300,  301,  296,  302,
-      303,  305,  285,  286,  280,  306,  280,  280,  296,  283,
-      287,  303,  304,  288,  289,  283,  290,  292,  293,  294,
-      304,  295,  307,  297,  298,  299,  283,  300,  301,  296,
-      302,  303,  305,  322,  323,    0,  306,  312,  312,  296,
-      314,  314,  303,  304,  324,  313,  312,  313,  313,  314,
-      325,  304,  327,  307,  315,  315,  313,  329,  315,  315,
-
-      316,  316,  317,  317,  322,  323,  317,  317,  330,  316,
-      326,  326,  328,  332,  333,  324,  335,  312,  337,  338,
-      314,  325,  339,  327,  339,  328,  340,  313,  329,  360,
-      342,  356,  356,  365,  365,  356,  356,  355,  355,  330,
-      316,  326,  326,  328,  332,  333,  355,  335,  366,  337,
-      338,  342,  367,  339,  368,  339,  328,  340,  362,  362,
-      360,  342,  369,  370,  363,  363,  371,  362,  363,  363,
-      372,  373,  374,  375,  376,  377,  378,  355,  379,  366,
-      380,  381,  382,  367,  383,  368,  384,  385,  386,  389,
-      390,  387,  392,  369,  370,  393,  394,  371,  362,  387,
-
-      395,  372,  373,  374,  375,  376,  377,  378,  391,  379,
-      396,  380,  381,  382,  397,  383,  399,  384,  385,  386,
-      389,  390,  387,  392,  400,  391,  393,  394,  401,  402,
-      387,  395,  403,  404,  405,  406,  407,  408,  409,  391,
-      410,  396,  405,  412,  413,  397,  414,  399,  409,  415,
-      416,  417,  418,  419,  420,  400,  391,  421,  422,  401,
-      402,  421,  423,  403,  404,  405,  406,  407,  408,  409,
-      424,  410,  425,  405,  412,  413,  426,  414,  428,  409,
-      415,  416,  417,  418,  419,  420,  427,  429,  421,  422,
-      430,  431,  421,  423,  432,  433,  427,  434,  435,  436,
-
-      439,  424,  440,  425,    0,  442,    0,  426,    0,  428,
-      444,    0,  443,  445,    0,  447,  443,  427,  429,  448,
-      449,  430,  431,  450,  451,  432,  433,  427,  434,  435,
-      436,  439,  452,  440,  441,  441,  442,  441,  453,  441,
-      441,  444,  441,  443,  445,  441,  447,  443,  441,  454,
-      448,  449,  441,  441,  450,  451,  441,  566,  566,  457,
-        0,  458,    0,  452,  460,  441,  441,  461,  441,  453,
-      441,  441,  462,  441,  459,    0,  441,  463,  459,  441,
-      454,    0,  465,  441,  441,  466,  469,  441,  446,  446,
-      457,  446,  458,  446,  446,  460,  446,  467,  461,  446,
-
-      468,  471,    0,  462,  464,  459,  446,  446,  463,  459,
-      446,  468,  464,  465,  472,  473,  466,  469,  474,  446,
-      446,  467,  446,  475,  446,  446,  470,  446,  467,  476,
-      446,  468,  471,  470,  477,  464,  478,  446,  446,  479,
-      480,  446,  468,  464,  481,  472,  473,  482,  484,  474,
-      485,  486,  467,  487,  475,  488,  489,  470,  490,  491,
-      476,  492,  485,  494,  470,  477,  495,  478,  496,  497,
-      479,  480,  498,  499,  500,  481,  501,  502,  482,  484,
-      503,  485,  486,  504,  487,  505,  488,  489,  507,  490,
-      491,  506,  492,  485,  494,  509,  506,  495,  508,  496,
-
-      497,  512,  515,  498,  499,  500,  516,  501,  502,  517,
-      508,  503,  518,  519,  504,  520,  505,  521,  522,  507,
-      524,  525,  506,  526,  527,  528,  509,  506,  529,  508,
-      530,  531,  512,  515,  532,  536,  537,  516,  538,  539,
-      517,  508,  540,  518,  519,  541,  520,  542,  521,  522,
-      543,  524,  525,  544,  526,  527,  528,  545,  546,  529,
-      548,  530,  531,  549,  547,  532,  536,  537,  550,  538,
-      539,  551,  552,  540,  547,  553,  541,  554,  542,  555,
-      556,  543,  557,  558,  544,  559,  560,  561,  545,  546,
-        0,  548,  567,  567,  549,  547,  570,  570,  572,  550,
-
-      568,  568,  551,  552,  573,  547,  553,  574,  554,  568,
-      555,  556,  575,  557,  558,  576,  559,  560,  561,  569,
-      569,  571,  571,  569,  569,  577,  578,  579,  580,  572,
-      581,  582,  583,  585,  586,  573,  587,  588,  574,  589,
-      568,  590,  597,  575,  593,  593,  576,  595,  595,  596,
-      596,  598,  599,  600,  601,  602,  577,  578,  579,  580,
-      604,  581,  582,  583,  585,  586,  605,  587,  588,  590,
-      589,  606,  590,  597,  607,  608,  609,  610,  612,  613,
-      614,  615,  598,  599,  600,  601,  602,  616,  617,  618,
-      619,  604,  620,  621,  620,  622,  623,  605,  613,  624,
-
-      626,  627,  606,  628,  629,  607,  608,  609,  610,  612,
-      613,  614,  615,  630,  631,  632,  633,  634,  616,  617,
-      618,  619,  636,  620,  621,  620,  622,  623,  637,  613,
-      624,  626,  627,  638,  628,  629,  639,  640,  641,  642,
-      644,  645,  646,  647,  630,  631,  632,  633,  634,  648,
-      649,  650,  651,  636,  652,  653,  654,  655,  656,  637,
-      657,  658,  660,  662,  638,  663,  664,  639,  640,  641,
-      642,  644,  645,  646,  647,  665,  666,  661,  667,  669,
-      648,  649,  650,  651,  661,  652,  653,  654,  655,  656,
-      671,  657,  658,  660,  662,  670,  663,  664,  673,  674,
-
-      675,  676,  670,  677,  678,  679,  665,  666,  661,  667,
-      669,  680,  682,  683,  684,  661,  685,  686,  687,  681,
-      688,  671,  689,  690,  691,  681,  670,  692,  693,  673,
-      674,  675,  676,  670,  677,  678,  679,  681,  694,  695,
-      697,  698,  680,  682,  683,  684,  696,  685,  686,  687,
-      681,  688,  696,  689,  690,  691,  681,  699,  692,  693,
-      700,  701,  703,  705,  696,  707,  708,  709,  681,  694,
-      695,  697,  698,  710,  706,  711,  712,  696,  706,  713,
-      714,  715,  716,  696,  717,  718,  719,  720,  699,  721,
-      722,  700,  701,  703,  705,  696,  707,  708,  709,  724,
-
-      725,  726,  727,  723,  710,  706,  711,  712,  723,  706,
-      713,  714,  715,  716,  728,  717,  718,  719,  720,  729,
-      721,  722,  730,  731,  732,  733,  734,  735,  736,  737,
-      724,  725,  726,  727,  723,  738,  739,  740,  741,  723,
-      742,  743,  744,  745,  746,  728,  747,  748,  749,  750,
-      729,  753,  755,  730,  731,  732,  733,  734,  735,  736,
-      737,  751,  756,  757,  758,  751,  738,  739,  740,  741,
-      759,  742,  743,  744,  745,  746,  761,  747,  748,  749,
-      750,  762,  753,  755,  763,  764,  765,  766,  767,  769,
-      770,  771,  751,  756,  757,  758,  751,  772,  773,  774,
-
-      775,  759,  776,  777,  778,  779,  780,  761,  782,  783,
-      784,  785,  762,  786,  788,  763,  764,  765,  766,  767,
-      769,  770,  771,  790,  791,  792,  793,  794,  772,  773,
-      774,  775,  795,  776,  777,  778,  779,  780,  796,  782,
-      783,  784,  785,  798,  786,  788,  799,  802,  802,  803,
-      803,  805,  806,  807,  790,  791,  792,  793,  794,  808,
-      809,  810,  811,  795,  812,  813,  814,  815,  816,  796,
-      817,  818,  819,  820,  798,  821,  825,  799,  827,  828,
-      830,  831,  805,  806,  807,  833,  834,  835,  821,  836,
-      808,  809,  810,  811,  837,  812,  813,  814,  815,  816,
-
-      838,  817,  818,  819,  820,  840,  821,  825,  842,  827,
-      828,  830,  831,  841,  843,  841,  833,  834,  835,  844,
-      836,  845,  846,  847,  849,  837,  850,  851,  852,  855,
-      857,  838,  858,  858,  860,  861,  840,  862,  863,  842,
-      864,  865,  867,  868,  841,  843,  841,  870,  871,  874,
-      844,  875,  845,  846,  847,  849,  877,  850,  851,  852,
-      855,  857,    0,  858,  858,  860,  861,  878,  862,  863,
-      880,  864,  865,  867,  868,  876,  881,  883,  870,  871,
-      874,  884,  875,  885,  886,  876,  881,  877,  876,  876,
-      889,  891,  876,  876,  887,  892,  893,  887,  878,  894,
-
-      887,  880,  895,  896,  887,  897,  876,  881,  883,  887,
-      898,  899,  884,  900,  885,  886,  876,  881,  901,  876,
-      876,  889,  891,  876,  876,  887,  892,  893,  887,  902,
-      894,  887,  903,  895,  896,  887,  897,  904,  905,  906,
-      887,  898,  899,  907,  900,  908,  909,  910,  911,  901,
-      913,  914,  915,  916,  917,  918,  919,  920,  921,  922,
-      902,  923,  924,  903,  925,  927,  929,  930,  904,  905,
-      906,  931,  932,  933,  907,  934,  908,  909,  910,  911,
-      935,  913,  914,  915,  916,  917,  918,  919,  920,  921,
-      922,  936,  923,  924,  937,  925,  927,  929,  930,  938,
-
-      939,  940,  931,  932,  933,  941,  934,  942,  943,  944,
-      945,  935,  946,  947,  948,  949,  950,  951,  952,  953,
-      954,  955,  936,  956,  949,  937,  957,  954,  958,  959,
-      938,  939,  940,  960,  961,  962,  941,  966,  942,  943,
-      944,  945,  967,  946,  947,  948,  949,  950,  951,  952,
-      953,  954,  955,  968,  956,  949,  969,  957,  954,  958,
-      959,  965,  970,  965,  960,  961,  962,  971,  966,  973,
-      974,  975,  976,  967,  978,  979,  980,  982,  983,  965,
-      984,  985,  980,  988,  968,  989,  990,  969,  983,  991,
-      995,  996,  965,  970,  965,  999, 1000, 1001,  971, 1002,
-
-      973,  974,  975,  976, 1003,  978,  979,  980,  982,  983,
-      965,  984,  985,  980,  988,  997,  989,  990, 1004,  983,
-      991,  995,  996, 1006, 1010, 1011,  999, 1000, 1001, 1008,
-     1002, 1008,  997, 1012, 1013, 1003, 1014, 1015, 1016, 1017,
-     1018, 1019, 1020, 1013, 1021, 1022,  997, 1023, 1024, 1004,
-     1025, 1026, 1027, 1028, 1006, 1010, 1011, 1029, 1031, 1032,
-     1008, 1033, 1008,  997, 1012, 1013, 1035, 1014, 1015, 1016,
-     1017, 1018, 1019, 1020, 1013, 1021, 1022, 1034, 1023, 1024,
-     1036, 1025, 1026, 1027, 1028, 1037, 1038, 1039, 1029, 1031,
-     1032, 1040, 1033, 1042, 1045, 1047, 1048, 1035, 1049, 1050,
-
-     1052, 1034, 1053, 1054, 1055, 1056, 1058, 1059, 1034, 1060,
-     1061, 1036, 1063, 1065, 1067, 1069, 1037, 1038, 1039, 1070,
-     1071, 1072, 1040, 1075, 1042, 1045, 1047, 1048, 1076, 1049,
-     1050, 1052, 1077, 1053, 1054, 1055, 1056, 1058, 1059, 1078,
-     1060, 1061, 1079, 1063, 1065, 1067, 1069, 1080, 1082, 1083,
-     1070, 1071, 1072, 1084, 1075, 1085, 1086, 1087, 1088, 1076,
-     1089, 1090, 1091, 1077, 1092, 1094, 1093, 1097, 1098, 1099,
-     1078, 1100, 1101, 1079, 1093, 1102, 1103, 1104, 1080, 1082,
-     1083, 1105, 1106, 1107, 1084, 1108, 1085, 1086, 1087, 1088,
-     1109, 1089, 1090, 1091, 1110, 1092, 1094, 1093, 1097, 1098,
-
-     1099, 1111, 1100, 1101, 1112, 1093, 1102, 1103, 1104, 1113,
-     1115, 1117, 1105, 1106, 1107, 1118, 1108, 1119, 1120, 1121,
-     1122, 1109, 1123, 1124, 1125, 1110, 1126, 1127, 1128, 1129,
-     1130, 1131, 1111, 1134, 1136, 1112, 1137, 1138, 1139, 1140,
-     1113, 1115, 1117, 1141, 1142, 1143, 1118, 1148, 1119, 1120,
-     1121, 1122, 1149, 1123, 1124, 1125, 1150, 1126, 1127, 1128,
-     1129, 1130, 1131, 1151, 1134, 1136, 1152, 1137, 1138, 1139,
-     1140, 1153, 1154, 1155, 1141, 1142, 1143, 1156, 1148, 1157,
-     1158, 1159, 1161, 1149, 1163, 1164, 1165, 1150, 1166, 1167,
-     1168, 1169, 1170, 1171, 1151, 1172, 1175, 1152, 1178, 1179,
-
-     1180, 1181, 1153, 1154, 1155, 1182, 1183, 1184, 1156, 1171,
-     1157, 1158, 1159, 1161, 1185, 1163, 1164, 1165, 1186, 1166,
-     1167, 1168, 1169, 1170, 1171, 1187, 1172, 1175, 1188, 1178,
-     1179, 1180, 1181, 1189, 1190, 1193, 1182, 1183, 1184, 1195,
-     1171, 1196, 1198, 1199, 1200, 1185, 1201, 1202, 1203, 1186,
-     1204, 1206, 1209, 1210, 1211, 1212, 1187, 1213, 1214, 1188,
-     1215, 1216, 1218, 1219, 1189, 1190, 1193, 1220, 1223, 1224,
-     1195, 1225, 1196, 1198, 1199, 1200, 1226, 1201, 1202, 1203,
-     1227, 1204, 1206, 1209, 1210, 1211, 1212, 1228, 1213, 1214,
-     1229, 1215, 1216, 1218, 1219, 1230, 1231, 1232, 1220, 1223,
-
-     1224, 1234, 1225, 1235, 1236, 1237, 1239, 1226, 1241, 1242,
-     1243, 1227, 1245, 1247, 1248, 1249, 1250, 1251, 1228, 1252,
-     1253, 1229, 1254, 1255, 1256, 1258, 1230, 1231, 1232, 1259,
-     1260, 1261, 1234, 1263, 1235, 1236, 1237, 1239, 1264, 1241,
-     1242, 1243, 1265, 1245, 1247, 1248, 1249, 1250, 1251, 1266,
-     1252, 1253, 1267, 1254, 1255, 1256, 1258, 1268, 1269, 1270,
-     1259, 1260, 1261, 1271, 1263, 1273, 1274, 1276, 1277, 1264,
-     1278, 1279, 1280, 1265, 1281, 1282, 1283, 1285, 1286, 1287,
-     1266, 1288, 1289, 1267, 1291, 1292, 1293, 1294, 1268, 1269,
-     1270, 1295, 1296, 1297, 1271, 1299, 1273, 1274, 1276, 1277,
-
-     1300, 1278, 1279, 1280, 1301, 1281, 1282, 1283, 1285, 1286,
-     1287, 1302, 1288, 1289, 1303, 1291, 1292, 1293, 1294, 1305,
-     1307, 1305, 1295, 1296, 1297, 1309, 1299, 1308,    0, 1311,
-        0, 1300, 1313, 1314,    0, 1301, 1316, 1318, 1319, 1320,
-     1321, 1322, 1302, 1323, 1324, 1303, 1325, 1308, 1310, 1310,
-     1305, 1307, 1305, 1326, 1327, 1328, 1309, 1329, 1308, 1310,
-     1311, 1310, 1330, 1313, 1314, 1310, 1331, 1316, 1318, 1319,
-     1320, 1321, 1322, 1332, 1323, 1324, 1333, 1325, 1308, 1310,
-     1310, 1334, 1335, 1336, 1326, 1327, 1328, 1337, 1329, 1338,
-     1310, 1339, 1310, 1330, 1341, 1342, 1310, 1331, 1340, 1343,
-
-     1340, 1344, 1345, 1346, 1332, 1347, 1348, 1333, 1349, 1350,
-     1351, 1352, 1334, 1335, 1336, 1353, 1354, 1355, 1337, 1356,
-     1338, 1357, 1339, 1358, 1359, 1341, 1342, 1360, 1362, 1340,
-     1343, 1340, 1344, 1345, 1346, 1364, 1347, 1348, 1366, 1349,
-     1350, 1351, 1352, 1361, 1361, 1367, 1353, 1354, 1355, 1369,
-     1356, 1370, 1357, 1371, 1358, 1359, 1361, 1372, 1360, 1362,
-     1361, 1375, 1376, 1377, 1378, 1379, 1364, 1381, 1382, 1366,
-     1383, 1384, 1385, 1386, 1361, 1361, 1367, 1387, 1388, 1389,
-     1369, 1391, 1370, 1392, 1371, 1393, 1394, 1361, 1372, 1395,
-     1396, 1361, 1375, 1376, 1377, 1378, 1379, 1398, 1381, 1382,
-
-     1399, 1383, 1384, 1385, 1386, 1400, 1401, 1402, 1387, 1388,
-     1389, 1404, 1391, 1405, 1392, 1406, 1393, 1394, 1408, 1409,
-     1395, 1396, 1410, 1411, 1412, 1413, 1414, 1415, 1398, 1416,
-     1417, 1399, 1418, 1419, 1420, 1421, 1400, 1401, 1402, 1422,
-     1423, 1424, 1404, 1425, 1405, 1426, 1406, 1427, 1428, 1408,
-     1409, 1432, 1433, 1410, 1411, 1412, 1413, 1414, 1415, 1434,
-     1416, 1417, 1435, 1418, 1419, 1420, 1421, 1436, 1437, 1438,
-     1422, 1423, 1424, 1439, 1425, 1440, 1426, 1443, 1427, 1428,
-     1444, 1445, 1432, 1433, 1446, 1447, 1448, 1449, 1450, 1451,
-     1434, 1453, 1456, 1435, 1452, 1457, 1459, 1454, 1436, 1437,
-
-     1438, 1460, 1452, 1462, 1439, 1463, 1440, 1464, 1443, 1466,
-     1467, 1444, 1445, 1454, 1468, 1446, 1447, 1448, 1449, 1450,
-     1451, 1469, 1453, 1456, 1471, 1452, 1457, 1459, 1454, 1473,
-     1474, 1476, 1460, 1452, 1462, 1477, 1463, 1478, 1464, 1479,
-     1466, 1467, 1480, 1481, 1454, 1468, 1482, 1483, 1485, 1487,
-     1488, 1489, 1469, 1493, 1494, 1471, 1495, 1496, 1497, 1499,
-     1473, 1474, 1476, 1500, 1502, 1505, 1477, 1508, 1478, 1511,
-     1479, 1512, 1514, 1480, 1481, 1516, 1518, 1482, 1483, 1485,
-     1487, 1488, 1489, 1520, 1493, 1494, 1521, 1495, 1496, 1497,
-     1499, 1522, 1524, 1525, 1500, 1502, 1505, 1527, 1508, 1528,
-
-     1511, 1529, 1512, 1514, 1531, 1534, 1516, 1518, 1536, 1539,
-     1540, 1541, 1542, 1544, 1520, 1545, 1546, 1521, 1547, 1548,
-     1549, 1550, 1522, 1524, 1525, 1551, 1552, 1553, 1527, 1554,
-     1528, 1556, 1529, 1557, 1558, 1531, 1534, 1559, 1560, 1536,
-     1539, 1540, 1541, 1542, 1544, 1561, 1545, 1546, 1562, 1547,
-     1548, 1549, 1550, 1563, 1564, 1566, 1551, 1552, 1553, 1567,
-     1554, 1568, 1556, 1569, 1557, 1558, 1570, 1571, 1559, 1560,
-     1572, 1573, 1574, 1575, 1576, 1577, 1561, 1578, 1579, 1562,
-     1580, 1581, 1582, 1583, 1563, 1564, 1566, 1584, 1585, 1586,
-     1567, 1587, 1568, 1588, 1569, 1589, 1592, 1570, 1571, 1593,
-
-     1594, 1572, 1573, 1574, 1575, 1576, 1577, 1595, 1578, 1579,
-     1596, 1580, 1581, 1582, 1583, 1597, 1598, 1602, 1584, 1585,
-     1586, 1604, 1587, 1606, 1588, 1608, 1589, 1592, 1609, 1610,
-     1593, 1594, 1611, 1613, 1615, 1616, 1617, 1618, 1595, 1619,
-     1621, 1596, 1622, 1625, 1626, 1627, 1597, 1598, 1602, 1630,
-     1631, 1633, 1604, 1638, 1606, 1639, 1608, 1640, 1641, 1609,
-     1610, 1642, 1643, 1611, 1613, 1615, 1616, 1617, 1618, 1646,
-     1619, 1621, 1647, 1622, 1625, 1626, 1627, 1648, 1649, 1650,
-     1630, 1631, 1633, 1651, 1638, 1652, 1639, 1653, 1640, 1641,
-     1655, 1656, 1642, 1643, 1657, 1658, 1659, 1660, 1661, 1662,
-
-     1646, 1663, 1665, 1647, 1666, 1667, 1668, 1669, 1648, 1649,
-     1650, 1670, 1671, 1672, 1651, 1673, 1652, 1674, 1653, 1675,
-     1676, 1655, 1656, 1677, 1679, 1657, 1658, 1659, 1660, 1661,
-     1662, 1682, 1663, 1665, 1684, 1666, 1667, 1668, 1669, 1688,
-     1690, 1691, 1670, 1671, 1672, 1692, 1673, 1693, 1674, 1695,
-     1675, 1676, 1699, 1703, 1677, 1679, 1704, 1705, 1707, 1708,
-     1709, 1710, 1682, 1712, 1693, 1684, 1713, 1714, 1715, 1716,
-     1688, 1690, 1691, 1721, 1722, 1723, 1692, 1726, 1693, 1729,
-     1695, 1730, 1732, 1699, 1703, 1734, 1735, 1704, 1705, 1707,
-     1708, 1709, 1710, 1736, 1712, 1693, 1737, 1713, 1714, 1715,
-
-     1716, 1738, 1739, 1740, 1721, 1722, 1723, 1741, 1726, 1742,
-     1729, 1744, 1730, 1732, 1747, 1749, 1734, 1735, 1751, 1752,
-     1753, 1754, 1756, 1758, 1736, 1760, 1761, 1737, 1763, 1765,
-     1766, 1767, 1738, 1739, 1740, 1769, 1770, 1771, 1741, 1773,
-     1742, 1774, 1744, 1776, 1777, 1747, 1749, 1781, 1783, 1751,
-     1752, 1753, 1754, 1756, 1758, 1784, 1760, 1761, 1785, 1763,
-     1765, 1766, 1767, 1786, 1787, 1788, 1769, 1770, 1771, 1789,
-     1773, 1790, 1774, 1791, 1776, 1777, 1793, 1794, 1781, 1783,
-     1795, 1798, 1799, 1801, 1802, 1804, 1784, 1808, 1809, 1785,
-     1810, 1811, 1813, 1814, 1786, 1787, 1788, 1815, 1816, 1817,
-
-     1789, 1819, 1790, 1821, 1791, 1822, 1823, 1793, 1794, 1824,
-     1826, 1795, 1798, 1799, 1801, 1802, 1804, 1829, 1808, 1809,
-     1832, 1810, 1811, 1813, 1814, 1833, 1836, 1837, 1815, 1816,
-     1817, 1840, 1819, 1841, 1821, 1842, 1822, 1823, 1844, 1845,
-     1824, 1826, 1846, 1847, 1849, 1850, 1851, 1852, 1829, 1855,
-     1856, 1832, 1857, 1859, 1860,    0, 1833, 1836, 1837,    0,
-        0,    0, 1840,    0, 1841,    0, 1842,    0,    0, 1844,
-     1845,    0,    0, 1846, 1847, 1849, 1850, 1851, 1852,    0,
-     1855, 1856,    0, 1857, 1859, 1860, 1863, 1863, 1863, 1863,
-     1863, 1863, 1863, 1863, 1863, 1864, 1864, 1864, 1864, 1864,
-
-     1864, 1864, 1864, 1864, 1865,    0, 1865, 1865, 1865, 1865,
-     1865, 1865, 1865, 1866,    0, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1867, 1867, 1868, 1868, 1868, 1868, 1868, 1868,
-     1868, 1868, 1868, 1869, 1869, 1869, 1869, 1869, 1869, 1869,
-     1869, 1869, 1870,    0, 1870, 1871, 1871, 1871, 1871, 1871,
-     1871, 1871, 1871, 1871, 1872, 1872, 1872, 1872, 1872, 1872,
-     1872, 1872, 1872, 1873, 1873, 1873, 1873, 1873, 1873, 1873,
-     1873, 1873, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874,
-     1874, 1875, 1875, 1875,    0,    0, 1875, 1875,    0, 1875,
-     1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1877,
-
-        0,    0, 1877, 1877,    0, 1877, 1878, 1878, 1878,    0,
-     1878, 1878, 1878, 1878, 1878, 1879, 1879, 1879, 1879,    0,
-     1879, 1879, 1879, 1879, 1880, 1880, 1880, 1880, 1880, 1880,
-     1880, 1880, 1880, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862
+       85,   86,  115,   96,   97,   86,   97,   97,  111,  126,
+      109,  104,  111,  116,  122,   97,  122,  122,  127,  116,
+      129,   86,  129,  129,  140,  104,  109,  362,  362,  116,
+       86,    0,   86,  115,  145,    0,   86,  147,  143,  111,
+      126,  109,    0,  111,  116,  143,   97,  133,  133,  127,
+      116,  134,  149,  134,  134,  140,  133,  136,  136,  137,
+
+      137,  152,  134,  137,  137,  145,  136,    0,  147,  143,
+      142,  142,  141,  141,  142,  142,  143,  363,  363,  368,
+      368,  141,  153,  149,  146,  154,    0,  133,  369,  369,
+      148,    0,  152,  134,  158,  146,  148,  136,  139,  139,
+      139,  139,  139,  139,  139,  139,  139,  139,  139,  139,
+      139,  139,  141,  153,  139,  146,  154,  139,  144,  139,
+      150,  148,  144,  155,  159,  158,  146,  148,  156,  144,
+      156,  162,  161,  163,  150,  144,  161,  164,  165,  166,
+      166,  167,  169,  155,  171,    0,  139,  139,  139,  144,
+      139,  150,  165,  144,  155,  159,    0,  173,  174,  156,
+
+      144,  156,  162,  161,  163,  150,  144,  161,  164,  165,
+      166,  166,  167,  169,  155,  171,  168,  139,  139,  139,
+      168,  170,  175,  165,  172,  170,  172,  172,  173,  174,
+      172,  176,  177,  178,  179,  180,  181,  182,  182,  183,
+      177,  184,  185,  182,  186,    0,  177,  168,  190,  192,
+        0,  168,  170,  175,  182,  172,  170,  172,  172,    0,
+      187,  172,  176,  177,  178,  179,  180,  181,  182,  182,
+      183,  177,  184,  185,  182,  186,  187,  177,  187,  190,
+      192,  189,  197,  187,  195,  182,  189,  189,  198,  199,
+      194,  187,  194,  194,  196,  196,  196,  199,  194,  200,
+
+      195,  201,  196,  200,  202,  203,  204,  187,  205,  187,
+      206,  207,  189,  197,  187,  195,  209,  189,  189,  198,
+      199,  194,  210,  194,  194,  196,  196,  196,  199,  194,
+      200,  195,  201,  196,  200,  202,  203,  204,  208,  205,
+      208,  206,  207,  211,  213,  212,  214,  209,  212,  215,
+      213,  216,  216,  210,  215,  212,  217,  216,  218,  219,
+      220,  216,  216,  221,  216,  222,  570,  570,  224,  208,
+      225,  208,  227,  228,  211,  213,  212,  214,  226,  212,
+      215,  213,  216,  216,  229,  215,  212,  217,  216,  218,
+      219,  220,  216,  216,  221,  216,  222,  223,  223,  224,
+
+      230,  225,  226,  227,  228,  231,  232,  231,  234,  226,
+      223,  230,  233,  231,  237,  229,  239,  240,  241,  242,
+      233,  243,  244,  245,  246,  247,  250,  251,  223,  223,
+      252,  230,  233,  226,  253,  254,  231,  232,  231,  234,
+      255,  223,  230,  233,  231,  237,  256,  239,  240,  241,
+      242,  233,  243,  244,  245,  246,  247,  250,  251,  257,
+      258,  252,  259,  233,  261,  253,  254,  260,  262,  263,
+      264,  255,  265,  266,  268,  268,    0,  256,  270,  271,
+      260,  272,  273,  274,  275,  274,  271,  276,  277,  278,
+      257,  258,  271,  259,  280,  261,    0,  282,  260,  262,
+
+      263,  264,  279,  265,  266,  283,  279,  268,  285,  270,
+      271,  260,  272,  273,  274,  275,  274,  271,  276,  277,
+      278,  286,  287,  271,  281,  280,  281,  281,  282,  284,
+      288,  289,  290,  279,  291,  284,  283,  279,  293,  285,
+      294,  295,  296,  298,  297,  299,  284,  300,  301,  302,
+      303,  305,  286,  287,  297,  281,  304,  281,  281,  305,
+      284,  288,  289,  290,  306,  291,  284,  304,  307,  293,
+      308,  294,  295,  296,  298,  297,  299,  284,  300,  301,
+      302,  303,  305,  313,  313,  297,  314,  304,  314,  314,
+      305,  323,  313,  315,  315,  306,  324,  314,  304,  307,
+
+      325,  308,  315,  316,  316,  317,  317,  316,  316,  326,
+      328,  318,  318,  329,  317,  318,  318,  327,  327,  330,
+      331,  332,  323,  313,  334,  335,  329,  324,  314,  337,
+      339,  325,  340,  315,  341,  342,  343,  342,  346,    0,
+      326,  328,  345,  364,  329,  317,  571,  571,  327,  327,
+      330,  331,  332,  359,  359,  334,  335,  329,  370,  346,
+      337,  339,  359,  340,  371,  341,  342,  343,  342,  346,
+      345,  360,  360,  345,  364,  360,  360,  366,  366,  367,
+      367,  372,  373,  367,  367,  374,  366,  375,  376,  370,
+      377,  378,  379,  359,  380,  371,  381,  382,  383,  384,
+
+      385,  386,  387,  388,  389,  390,  391,  393,  394,  395,
+      396,  397,  372,  373,  391,  398,  374,  366,  375,  376,
+      399,  377,  378,  379,  400,  380,  395,  381,  382,  383,
+      384,  385,  386,  387,  388,  389,  390,  391,  393,  394,
+      395,  396,  397,  401,  403,  391,  398,  404,  405,  406,
+      407,  399,  408,  409,  410,  400,  411,  395,  412,  413,
+      414,  409,  416,  417,  418,  419,  420,  421,  422,  413,
+      423,  424,  425,  426,  401,  403,  425,  427,  404,  405,
+      406,  407,  428,  408,  409,  410,  429,  411,  430,  412,
+      413,  414,  409,  416,  417,  418,  419,  420,  421,  422,
+
+      413,  423,  424,  425,  426,  431,  432,  425,  427,  433,
+      434,  435,  436,  428,  437,  431,  438,  429,  439,  430,
+      440,  443,  444,  574,  574,  446,    0,  448,  575,  575,
+      449,    0,  451,  452,    0,  447,  431,  432,  453,  447,
+      433,  434,  435,  436,  454,  437,  431,  438,  455,  439,
+      456,  440,  443,  444,  445,  445,  446,  445,  448,  445,
+      445,  449,  445,  451,  452,  445,  447,  457,  445,  453,
+      447,  458,  445,  445,  461,  454,  445,  600,  600,  455,
+        0,  456,  602,  602,  462,  445,  445,  464,  445,  465,
+      445,  445,  466,  445,  467,    0,  445,  463,  457,  445,
+
+      469,  463,  458,  445,  445,  461,  470,  445,  450,  450,
+      471,  450,  473,  450,  450,  462,  450,  474,  464,  450,
+      465,  468,  472,  466,  474,  467,  450,  450,  463,  468,
+      450,  469,  463,  472,  471,  475,  476,  470,  477,  450,
+      450,  471,  450,  473,  450,  450,  478,  450,  474,  479,
+      450,  480,  468,  472,  481,  474,  482,  450,  450,  483,
+      468,  450,  484,  485,  472,  471,  475,  476,  486,  477,
+      488,  489,  490,  491,  492,  493,  494,  478,  495,  496,
+      479,  498,  480,  489,  499,  481,  500,  482,  501,  502,
+      483,  503,  504,  484,  485,  505,  506,  507,  508,  486,
+
+      509,  488,  489,  490,  491,  492,  493,  494,  510,  495,
+      496,  511,  498,  510,  489,  499,  513,  500,  512,  501,
+      502,  516,  503,  504,  519,  520,  505,  506,  507,  508,
+      512,  509,  521,  522,  523,  524,  525,  526,  528,  510,
+      529,  530,  511,  531,  510,  532,  533,  513,  534,  512,
+      535,  536,  516,  540,  541,  519,  520,  542,  543,  544,
+      545,  512,  546,  521,  522,  523,  524,  525,  526,  528,
+      547,  529,  530,  548,  531,  549,  532,  533,  550,  534,
+      552,  535,  536,  553,  540,  541,  551,  554,  542,  543,
+      544,  545,  555,  546,  556,  557,  551,  558,  559,  560,
+
+      561,  547,  562,  563,  548,  564,  549,  565,  576,  550,
+      577,  552,  572,  572,  553,  573,  573,  551,  554,  573,
+      573,  572,  578,  555,  579,  556,  557,  551,  558,  559,
+      560,  561,  580,  562,  563,  581,  564,  582,  565,  576,
+      583,  577,  584,  585,  586,  587,  588,  590,  591,  592,
+      593,  594,  572,  578,  595,  579,  596,  604,  597,  603,
+      603,  605,  606,  580,  607,  608,  581,  609,  582,  596,
+      611,  583,  612,  584,  585,  586,  587,  588,  590,  591,
+      592,  593,  594,  613,  614,  595,  597,  596,  604,  597,
+      615,  616,  605,  606,  617,  607,  608,  619,  609,  620,
+
+      621,  611,  622,  612,  623,  624,  625,  626,  627,  628,
+      627,  629,  630,  631,  613,  614,  633,  634,  620,  635,
+      636,  615,  616,  637,  638,  617,  639,  640,  619,  641,
+      620,  621,  643,  622,  644,  623,  624,  625,  626,  627,
+      628,  627,  629,  630,  631,  645,  646,  633,  634,  620,
+      635,  636,  647,  648,  637,  638,  649,  639,  640,  651,
+      641,  652,  653,  643,  654,  644,  655,  656,  657,  658,
+      659,  660,  661,  662,  663,  664,  645,  646,  665,  667,
+      669,  668,  670,  647,  648,  671,  672,  649,  668,  673,
+      651,  674,  652,  653,  676,  654,  678,  655,  656,  657,
+
+      658,  659,  660,  661,  662,  663,  664,  677,  680,  665,
+      667,  669,  668,  670,  677,  681,  671,  672,  682,  668,
+      673,  683,  674,  684,  685,  676,  686,  678,  687,  688,
+      689,  690,  691,  692,  693,  688,  694,  695,  677,  680,
+      696,  697,  698,  699,  700,  677,  681,  688,  701,  682,
+      702,  704,  683,  705,  684,  685,  706,  686,  707,  687,
+      688,  689,  690,  691,  692,  693,  688,  694,  695,  708,
+      703,  696,  697,  698,  699,  700,  703,  710,  688,  701,
+      712,  702,  704,  714,  705,  715,  713,  706,  703,  707,
+      713,  716,  717,  718,  719,  720,  721,  722,  723,  724,
+
+      708,  703,  725,  726,  727,  728,  729,  703,  710,  731,
+      730,  712,  732,  733,  714,  730,  715,  713,  734,  703,
+      735,  713,  716,  717,  718,  719,  720,  721,  722,  723,
+      724,  736,  737,  725,  726,  727,  728,  729,  738,  739,
+      731,  730,  740,  732,  733,  741,  730,  742,  743,  734,
+      744,  735,  745,  746,  747,  748,  749,  750,  751,  752,
+      753,  754,  736,  737,  755,  756,  757,  758,  760,  738,
+      739,  758,  762,  740,  763,  764,  741,  765,  742,  743,
+      766,  744,  768,  745,  746,  747,  748,  749,  750,  751,
+      752,  753,  754,  769,  770,  755,  756,  757,  758,  760,
+
+      771,  772,  758,  762,  773,  763,  764,  774,  765,  776,
+      777,  766,  778,  768,  779,  780,  781,  782,  783,  784,
+      785,  786,  787,  789,  769,  770,  790,  791,  792,  793,
+      795,  771,  772,  797,  798,  773,  799,  800,  774,  801,
+      776,  777,  802,  778,  803,  779,  780,  781,  782,  783,
+      784,  785,  786,  787,  789,  805,  806,  790,  791,  792,
+      793,  795,  809,  809,  797,  798,  812,  799,  800,  813,
+      801,  810,  810,  802,  814,  803,  815,  816,  817,  818,
+      819,  820,  821,  822,  823,  824,  805,  806,  825,  826,
+      827,  828,  829,  830,  830,  835,  837,  812,  838,  840,
+
+      813,  841,  843,  844,  831,  814,  845,  815,  816,  817,
+      818,  819,  820,  821,  822,  823,  824,  831,  846,  825,
+      826,  827,  828,  829,  847,  848,  835,  837,  850,  838,
+      840,  852,  841,  843,  844,  831,  851,  845,  851,  853,
+      854,  855,  856,  857,  859,  860,  861,  862,  865,  846,
+      867,  868,  868,  870,  871,  847,  848,  872,  873,  850,
+      874,  875,  852,  877,  878,  880,  881,  851,  884,  851,
+      853,  854,  855,  856,  857,  859,  860,  861,  862,  865,
+      885,  867,  868,  868,  870,  871,  887,  888,  872,  873,
+      886,  874,  875,  890,  877,  878,  880,  881,  893,  884,
+
+      886,  894,  891,  886,  886,  895,  896,  886,  886,  899,
+      897,  885,  891,  897,  901,  902,  897,  887,  888,  903,
+      897,  886,  904,  905,  890,  897,  906,  907,  908,  893,
+      909,  886,  894,  891,  886,  886,  895,  896,  886,  886,
+      899,  897,  910,  891,  897,  901,  902,  897,  911,  912,
+      903,  897,  913,  904,  905,  914,  897,  906,  907,  908,
+      915,  909,  916,  917,  918,  919,  920,  921,  923,  924,
+      925,  926,  927,  910,  928,  929,  930,  931,  932,  911,
+      912,  933,  934,  913,  935,  937,  914,  939,  940,  941,
+      942,  915,  943,  916,  917,  918,  919,  920,  921,  923,
+
+      924,  925,  926,  927,  944,  928,  929,  930,  931,  932,
+      945,  946,  933,  934,  947,  935,  937,  948,  939,  940,
+      941,  942,  949,  943,  950,  951,  952,  953,  954,  955,
+      956,  957,  958,  960,  959,  944,  961,  962,  963,  964,
+      965,  945,  946,  959,  966,  947,  964,  967,  948,  968,
+      969,  970,  971,  949,  972,  950,  951,  952,  953,  954,
+      955,  956,  957,  958,  960,  959,  976,  961,  962,  963,
+      964,  965,  977,  978,  959,  966,  979,  964,  967,  980,
+      968,  969,  970,  971,  975,  972,  975,  981,  983,  984,
+      985,  986,  988,  989,  990,  992,  993,  976,  994,  995,
+
+      990,  998,  975,  977,  978,  999,  993,  979, 1000, 1001,
+      980, 1005, 1006, 1009,    0,  975, 1010,  975,  981,  983,
+      984,  985,  986,  988,  989,  990,  992,  993, 1007,  994,
+      995,  990,  998,  975, 1011, 1012,  999,  993, 1013, 1000,
+     1001, 1014, 1005, 1006, 1009, 1007, 1016, 1010, 1018, 1020,
+     1018, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1007,
+     1029, 1030, 1023, 1031, 1032, 1011, 1012, 1033, 1034, 1013,
+     1035, 1036, 1014, 1037, 1038, 1039, 1007, 1016, 1040, 1018,
+     1020, 1018, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028,
+     1042, 1029, 1030, 1023, 1031, 1032, 1043, 1044, 1033, 1034,
+
+     1045, 1035, 1036, 1046, 1037, 1038, 1039, 1048, 1047, 1040,
+     1049, 1050, 1051, 1052, 1053, 1055, 1058, 1060, 1061, 1062,
+     1063, 1042, 1065, 1066, 1067, 1068, 1069, 1043, 1044, 1046,
+     1071, 1045, 1047, 1072, 1046, 1073, 1074, 1076, 1048, 1047,
+     1078, 1049, 1050, 1051, 1052, 1053, 1055, 1058, 1060, 1061,
+     1062, 1063, 1080, 1065, 1066, 1067, 1068, 1069, 1082, 1083,
+     1084, 1071, 1085, 1088, 1072, 1089, 1073, 1074, 1076, 1090,
+     1091, 1078, 1092, 1093, 1095, 1096, 1097, 1098, 1099, 1100,
+     1101, 1102, 1103, 1080, 1104, 1105, 1107, 1106, 1110, 1082,
+     1083, 1084, 1111, 1085, 1088, 1106, 1089, 1112, 1113, 1114,
+
+     1090, 1091, 1115, 1092, 1093, 1095, 1096, 1097, 1098, 1099,
+     1100, 1101, 1102, 1103, 1116, 1104, 1105, 1107, 1106, 1110,
+     1117, 1118, 1119, 1111, 1120, 1121, 1106, 1122, 1112, 1113,
+     1114, 1123, 1124, 1115, 1125, 1126, 1128, 1130, 1131, 1132,
+     1133, 1134, 1135, 1136, 1137, 1116, 1138, 1139, 1140, 1141,
+     1142, 1117, 1118, 1119, 1143, 1120, 1121, 1144, 1122, 1147,
+     1149, 1150, 1123, 1124, 1151, 1125, 1126, 1128, 1130, 1131,
+     1132, 1133, 1134, 1135, 1136, 1137, 1152, 1138, 1139, 1140,
+     1141, 1142, 1153, 1154, 1155, 1143, 1156, 1161, 1144, 1162,
+     1147, 1149, 1150, 1163, 1164, 1151, 1165, 1166, 1167, 1168,
+
+     1169, 1170, 1171, 1172, 1174, 1176, 1177, 1152, 1178, 1179,
+     1180, 1181, 1182, 1153, 1154, 1155, 1183, 1156, 1161, 1185,
+     1162, 1188, 1184, 1191, 1163, 1164, 1192, 1165, 1166, 1167,
+     1168, 1169, 1170, 1171, 1172, 1174, 1176, 1177, 1184, 1178,
+     1179, 1180, 1181, 1182, 1193, 1194, 1195, 1183, 1196, 1197,
+     1185, 1198, 1188, 1184, 1191, 1199, 1200, 1192, 1201, 1202,
+     1203, 1206, 1208, 1209, 1211, 1212, 1213, 1214, 1215, 1184,
+     1216, 1217, 1219, 1222, 1223, 1193, 1194, 1195, 1224, 1196,
+     1197, 1225, 1198, 1226, 1227, 1228, 1199, 1200, 1229, 1201,
+     1202, 1203, 1206, 1208, 1209, 1211, 1212, 1213, 1214, 1215,
+
+     1230, 1216, 1217, 1219, 1222, 1223, 1232, 1233, 1234, 1224,
+     1235, 1237, 1225, 1239, 1226, 1227, 1228, 1240, 1241, 1229,
+     1242, 1243, 1244, 1245, 1246, 1247, 1248, 1250, 1251, 1252,
+     1253, 1230, 1255, 1257, 1258, 1237, 1259, 1232, 1233, 1234,
+     1261, 1235, 1237, 1263, 1239, 1264, 1265, 1266, 1240, 1241,
+     1267, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1250, 1251,
+     1252, 1253, 1268, 1255, 1257, 1258, 1269, 1259, 1270, 1271,
+     1272, 1261, 1274, 1275, 1263, 1276, 1264, 1265, 1266, 1277,
+     1279, 1267, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287,
+     1289, 1290, 1292, 1268, 1293, 1294, 1295, 1269, 1296, 1270,
+
+     1271, 1272, 1297, 1274, 1275, 1298, 1276, 1299, 1301, 1302,
+     1277, 1279, 1303, 1280, 1281, 1282, 1283, 1284, 1285, 1286,
+     1287, 1289, 1290, 1292, 1304, 1293, 1294, 1295, 1305, 1296,
+     1307, 1308, 1309, 1297, 1310, 1311, 1298, 1312, 1299, 1301,
+     1302, 1313, 1315, 1303, 1316, 1317, 1318, 1319, 1321, 1323,
+     1321, 1324, 1325,    0,    0, 1304, 1327, 1329, 1330, 1305,
+     1332, 1307, 1308, 1309,    0, 1310, 1311, 1334, 1312, 1335,
+        0, 1324, 1313, 1315, 1336, 1316, 1317, 1318, 1319, 1321,
+     1323, 1321, 1324, 1325, 1326, 1326, 1337, 1327, 1329, 1330,
+     1338, 1332, 1339, 1340, 1341, 1326, 1342, 1326, 1334, 1343,
+
+     1335, 1326, 1324, 1344, 1345, 1336, 1346, 1347, 1348, 1349,
+     1350, 1351, 1352, 1353, 1354, 1326, 1326, 1337, 1355, 1357,
+     1356, 1338, 1356, 1339, 1340, 1341, 1326, 1342, 1326, 1358,
+     1343, 1359, 1326, 1360, 1344, 1345, 1361, 1346, 1347, 1348,
+     1349, 1350, 1351, 1352, 1353, 1354, 1362, 1363, 1364, 1355,
+     1357, 1356, 1365, 1356, 1366, 1367, 1368, 1369, 1370, 1371,
+     1358, 1372, 1359, 1373, 1360, 1374, 1375, 1361, 1376,    0,
+        0, 1378, 1380, 1382, 1383, 1385, 1386, 1362, 1363, 1364,
+     1387, 1388,    0, 1365, 1389, 1366, 1367, 1368, 1369, 1370,
+     1371, 1390, 1372, 1392, 1373, 1394, 1374, 1375, 1395, 1376,
+
+     1377, 1377, 1378, 1380, 1382, 1383, 1385, 1386, 1396, 1397,
+     1392, 1387, 1388, 1377, 1398, 1389, 1400, 1377, 1401, 1402,
+     1403, 1404, 1390, 1405, 1392, 1406, 1394, 1407, 1408, 1395,
+     1410, 1377, 1377, 1411, 1412, 1413, 1414, 1415, 1417, 1396,
+     1397, 1418, 1419, 1420, 1377, 1398, 1421, 1400, 1377, 1401,
+     1402, 1403, 1404, 1423, 1405, 1424, 1406, 1425, 1407, 1408,
+     1427, 1410, 1428, 1429, 1411, 1412, 1413, 1414, 1415, 1417,
+     1430, 1431, 1418, 1419, 1420, 1432, 1433, 1421, 1434, 1435,
+     1436, 1437, 1438, 1439, 1423, 1440, 1424, 1441, 1425, 1442,
+     1443, 1427, 1444, 1428, 1429, 1445, 1446, 1447, 1451, 1452,
+
+     1453, 1430, 1431, 1454, 1455, 1456, 1432, 1433, 1457, 1434,
+     1435, 1436, 1437, 1438, 1439, 1458, 1440, 1459, 1441, 1462,
+     1442, 1443, 1463, 1444, 1464, 1465, 1445, 1446, 1447, 1451,
+     1452, 1453, 1466, 1467, 1454, 1455, 1456, 1468, 1469, 1457,
+     1470, 1471, 1472, 1473, 1475, 1476, 1458, 1478, 1459, 1471,
+     1462, 1479, 1481, 1463, 1482, 1464, 1465, 1483, 1485, 1473,
+     1486, 1487, 1488, 1466, 1467, 1490, 1492, 1493, 1468, 1469,
+     1495, 1470, 1471, 1472, 1473, 1475, 1476, 1496, 1478, 1497,
+     1471, 1498, 1479, 1481, 1499, 1482, 1500, 1501, 1483, 1485,
+     1473, 1486, 1487, 1488, 1502, 1504, 1490, 1492, 1493, 1506,
+
+     1507, 1495, 1508, 1512, 1513, 1514, 1515, 1516, 1496, 1518,
+     1497, 1519, 1498, 1521, 1524, 1499, 1527, 1500, 1501, 1528,
+     1530, 1533, 1532, 1534, 1536, 1502, 1504, 1538, 1540, 1542,
+     1506, 1507, 1543, 1508, 1512, 1513, 1514, 1515, 1516, 1532,
+     1518, 1544, 1519, 1546, 1521, 1524, 1547, 1527, 1549, 1550,
+     1528, 1530, 1533, 1532, 1534, 1536, 1551, 1553, 1538, 1540,
+     1542, 1556, 1558, 1543, 1561, 1562, 1563, 1564, 1566, 1567,
+     1568, 1569, 1544, 1570, 1546, 1571, 1572, 1547, 1573, 1549,
+     1550, 1574, 1575, 1576, 1578, 1579, 1580, 1551, 1553, 1581,
+     1582, 1583, 1556, 1558, 1584, 1561, 1562, 1563, 1564, 1566,
+
+     1567, 1568, 1569, 1585, 1570, 1586, 1571, 1572, 1588, 1573,
+     1589, 1590, 1574, 1575, 1576, 1578, 1579, 1580, 1591, 1592,
+     1581, 1582, 1583, 1593, 1594, 1584, 1595, 1596, 1597, 1598,
+     1599, 1600, 1601, 1602, 1585, 1603, 1586, 1604, 1605, 1588,
+     1606, 1589, 1590, 1607, 1608, 1609, 1610, 1611, 1614, 1591,
+     1592, 1615, 1616, 1617, 1593, 1594, 1618, 1595, 1596, 1597,
+     1598, 1599, 1600, 1601, 1602, 1619, 1603, 1620, 1604, 1605,
+     1624, 1606, 1626, 1628, 1607, 1608, 1609, 1610, 1611, 1614,
+     1630, 1631, 1615, 1616, 1617, 1632, 1633, 1618, 1635, 1637,
+     1638, 1639, 1640, 1641, 1642, 1643, 1619, 1644, 1620, 1646,
+
+     1647, 1624, 1650, 1626, 1628, 1643, 1651, 1652, 1655, 1656,
+     1658, 1630, 1631, 1663, 1664, 1665, 1632, 1633, 1666, 1635,
+     1637, 1638, 1639, 1640, 1641, 1642, 1643, 1667, 1644, 1668,
+     1646, 1647, 1671, 1650, 1672, 1673, 1674, 1651, 1652, 1655,
+     1656, 1658, 1675, 1676, 1663, 1664, 1665, 1677, 1678, 1666,
+     1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1667, 1688,
+     1668, 1690, 1691, 1671, 1692, 1672, 1673, 1674, 1693, 1694,
+     1695, 1696, 1697, 1675, 1676, 1698, 1699, 1700, 1677, 1678,
+     1701, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1702,
+     1688, 1704, 1690, 1691, 1707, 1692, 1709, 1713, 1715, 1693,
+
+     1694, 1695, 1696, 1697, 1716, 1717, 1698, 1699, 1700, 1718,
+     1720, 1701, 1724, 1729, 1731, 1732, 1733, 1735, 1736, 1737,
+     1702, 1738, 1704, 1740, 1741, 1707, 1718, 1709, 1713, 1715,
+     1742, 1743, 1744, 1729, 1749, 1716, 1717, 1750, 1751, 1754,
+     1718, 1720, 1757, 1724, 1729, 1731, 1732, 1733, 1735, 1736,
+     1737, 1758, 1738, 1760, 1740, 1741, 1762, 1718, 1763, 1764,
+     1765, 1742, 1743, 1744, 1766, 1749, 1767, 1768, 1750, 1751,
+     1754, 1769, 1770, 1757, 1772, 1775, 1777, 1779, 1780, 1781,
+     1782, 1784, 1758, 1786, 1760, 1787, 1786, 1762, 1789, 1763,
+     1764, 1765, 1790, 1792, 1794, 1766, 1795, 1767, 1768, 1796,
+
+     1798, 1799, 1769, 1770, 1800, 1772, 1775, 1777, 1779, 1780,
+     1781, 1782, 1784, 1802, 1786, 1803, 1787, 1805, 1806, 1789,
+     1810, 1812, 1813, 1790, 1792, 1794, 1814, 1795, 1815, 1816,
+     1796, 1798, 1799, 1817, 1818, 1800, 1819, 1820, 1822, 1823,
+     1824, 1825, 1828, 1829, 1802, 1831, 1803, 1832, 1805, 1806,
+     1834, 1810, 1812, 1813, 1838, 1839, 1840, 1814, 1841, 1815,
+     1816, 1843, 1844, 1823, 1817, 1818, 1845, 1819, 1820, 1822,
+     1823, 1824, 1825, 1828, 1829, 1846, 1831, 1847, 1832, 1850,
+     1852, 1834, 1853, 1854, 1855, 1838, 1839, 1840, 1857, 1841,
+     1860, 1863, 1843, 1844, 1864, 1868, 1869, 1845, 1872, 1873,
+
+     1874, 1876, 1877, 1878, 1879, 1881, 1846, 1882, 1847, 1883,
+     1850, 1852, 1884, 1853, 1854, 1855, 1887, 1888, 1889, 1857,
+     1891, 1860, 1863, 1892,    0, 1864, 1868, 1869,    0, 1872,
+     1873, 1874, 1876, 1877, 1878, 1879, 1881,    0, 1882,    0,
+     1883,    0,    0, 1884,    0,    0,    0, 1887, 1888, 1889,
+        0, 1891,    0,    0, 1892, 1895, 1895, 1895, 1895, 1895,
+     1895, 1895, 1895, 1895, 1896, 1896, 1896, 1896, 1896, 1896,
+     1896, 1896, 1896, 1897,    0, 1897, 1897, 1897, 1897, 1897,
+     1897, 1897, 1898,    0, 1898, 1898, 1898, 1898, 1898, 1898,
+     1898, 1899, 1899, 1900, 1900, 1900, 1900, 1900, 1900, 1900,
+
+     1900, 1900, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901,
+     1901, 1902,    0, 1902, 1903, 1903, 1903, 1903, 1903, 1903,
+     1903, 1903, 1903, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
+     1904, 1904, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905,
+     1905, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+     1907, 1907, 1907,    0,    0, 1907, 1907,    0, 1907, 1908,
+     1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1909,    0,
+        0, 1909, 1909,    0, 1909, 1910, 1910, 1910,    0, 1910,
+     1910, 1910, 1910, 1910, 1911, 1911, 1911, 1911,    0, 1911,
+     1911, 1911, 1911, 1912, 1912, 1912, 1912, 1912, 1912, 1912,
+
+     1912, 1912, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -2125,7 +2153,7 @@ char path[MS_MAXPATHLEN];
 
 
 
-#line 2129 "maplexer.c"
+#line 2157 "maplexer.c"
 
 #define INITIAL 0
 #define URL_VARIABLE 1
@@ -2383,7 +2411,7 @@ YY_DECL
          break;
        }
 
-#line 2387 "maplexer.c"
+#line 2415 "maplexer.c"
 
 	if ( !(yy_init) )
 		{
@@ -2436,13 +2464,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 >= 1863 )
+				if ( yy_current_state >= 1895 )
 					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] != 4234 );
+		while ( yy_base[yy_current_state] != 4303 );
 
 yy_find_action:
 		yy_act = yy_accept[yy_current_state];
@@ -2583,1387 +2611,1402 @@ YY_RULE_SETUP
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 189 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_TOKEN_COMPARISON_INTERSECTS); }
+#line 188 "maplexer.l"
+{ MS_LEXER_RETURN_TOKEN(MS_TOKEN_FUNCTION_SIMPLIFY); }
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 190 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_TOKEN_COMPARISON_DISJOINT); }
+#line 189 "maplexer.l"
+{ MS_LEXER_RETURN_TOKEN(MS_TOKEN_FUNCTION_SIMPLIFYPT); }
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 191 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_TOKEN_COMPARISON_TOUCHES); }
+#line 190 "maplexer.l"
+{ MS_LEXER_RETURN_TOKEN(MS_TOKEN_FUNCTION_GENERALIZE); }
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
 #line 192 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_TOKEN_COMPARISON_OVERLAPS); }
+{ MS_LEXER_RETURN_TOKEN(MS_TOKEN_COMPARISON_INTERSECTS); }
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
 #line 193 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_TOKEN_COMPARISON_CROSSES); }
+{ MS_LEXER_RETURN_TOKEN(MS_TOKEN_COMPARISON_DISJOINT); }
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
 #line 194 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_TOKEN_COMPARISON_WITHIN); }
+{ MS_LEXER_RETURN_TOKEN(MS_TOKEN_COMPARISON_TOUCHES); }
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
 #line 195 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_TOKEN_COMPARISON_CONTAINS); }
+{ MS_LEXER_RETURN_TOKEN(MS_TOKEN_COMPARISON_OVERLAPS); }
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
 #line 196 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_TOKEN_COMPARISON_BEYOND); }
+{ MS_LEXER_RETURN_TOKEN(MS_TOKEN_COMPARISON_CROSSES); }
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
 #line 197 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_TOKEN_COMPARISON_DWITHIN); }
+{ MS_LEXER_RETURN_TOKEN(MS_TOKEN_COMPARISON_WITHIN); }
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 199 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_TOKEN_FUNCTION_FROMTEXT); }
+#line 198 "maplexer.l"
+{ MS_LEXER_RETURN_TOKEN(MS_TOKEN_COMPARISON_CONTAINS); }
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 201 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(COLORRANGE); }
+#line 199 "maplexer.l"
+{ MS_LEXER_RETURN_TOKEN(MS_TOKEN_COMPARISON_BEYOND); }
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 202 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(DATARANGE); }
+#line 200 "maplexer.l"
+{ MS_LEXER_RETURN_TOKEN(MS_TOKEN_COMPARISON_DWITHIN); }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 203 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(RANGEITEM); }
+#line 202 "maplexer.l"
+{ MS_LEXER_RETURN_TOKEN(MS_TOKEN_FUNCTION_FROMTEXT); }
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 205 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(ALIGN); }
+#line 204 "maplexer.l"
+{ MS_LEXER_RETURN_TOKEN(COLORRANGE); }
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 206 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(ANCHORPOINT); }
+#line 205 "maplexer.l"
+{ MS_LEXER_RETURN_TOKEN(DATARANGE); }
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 207 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(ANGLE); }
+#line 206 "maplexer.l"
+{ MS_LEXER_RETURN_TOKEN(RANGEITEM); }
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
 #line 208 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(ANTIALIAS); }
+{ MS_LEXER_RETURN_TOKEN(ALIGN); }
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
 #line 209 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(BACKGROUNDCOLOR); }
+{ MS_LEXER_RETURN_TOKEN(ANCHORPOINT); }
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
 #line 210 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(BANDSITEM); }
+{ MS_LEXER_RETURN_TOKEN(ANGLE); }
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
 #line 211 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(BINDVALS); }
+{ MS_LEXER_RETURN_TOKEN(ANTIALIAS); }
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
 #line 212 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(BROWSEFORMAT); }
+{ MS_LEXER_RETURN_TOKEN(BACKGROUNDCOLOR); }
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
 #line 213 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(BUFFER); }
+{ MS_LEXER_RETURN_TOKEN(BANDSITEM); }
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
 #line 214 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(CHARACTER); }
+{ MS_LEXER_RETURN_TOKEN(BINDVALS); }
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
 #line 215 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(CLASS); }
+{ MS_LEXER_RETURN_TOKEN(BROWSEFORMAT); }
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
 #line 216 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(CLASSITEM); }
+{ MS_LEXER_RETURN_TOKEN(BUFFER); }
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
 #line 217 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(CLASSGROUP); }
+{ MS_LEXER_RETURN_TOKEN(CHARACTER); }
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
 #line 218 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(CLUSTER); }
+{ MS_LEXER_RETURN_TOKEN(CLASS); }
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
 #line 219 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(COLOR); }
+{ MS_LEXER_RETURN_TOKEN(CLASSITEM); }
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
 #line 220 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(CONFIG); }
+{ MS_LEXER_RETURN_TOKEN(CLASSGROUP); }
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
 #line 221 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(CONNECTION); }
+{ MS_LEXER_RETURN_TOKEN(CLUSTER); }
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
 #line 222 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(CONNECTIONTYPE); }
+{ MS_LEXER_RETURN_TOKEN(COLOR); }
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
 #line 223 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(DATA); }
+{ MS_LEXER_RETURN_TOKEN(CONFIG); }
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
 #line 224 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(DATAPATTERN); }
+{ MS_LEXER_RETURN_TOKEN(CONNECTION); }
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
 #line 225 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(DEBUG); }
+{ MS_LEXER_RETURN_TOKEN(CONNECTIONTYPE); }
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
 #line 226 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(DRIVER); }
+{ MS_LEXER_RETURN_TOKEN(DATA); }
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
 #line 227 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(DUMP); }
+{ MS_LEXER_RETURN_TOKEN(DATAPATTERN); }
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
 #line 228 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(EMPTY); }
+{ MS_LEXER_RETURN_TOKEN(DEBUG); }
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
 #line 229 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(ENCODING); }
+{ MS_LEXER_RETURN_TOKEN(DRIVER); }
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
 #line 230 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(END); }
+{ MS_LEXER_RETURN_TOKEN(DUMP); }
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
 #line 231 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(ERROR); }
+{ MS_LEXER_RETURN_TOKEN(EMPTY); }
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
 #line 232 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(EXPRESSION); }
+{ MS_LEXER_RETURN_TOKEN(ENCODING); }
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
 #line 233 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(EXTENT); }
+{ MS_LEXER_RETURN_TOKEN(END); }
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
 #line 234 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(EXTENSION); }
+{ MS_LEXER_RETURN_TOKEN(ERROR); }
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
 #line 235 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(FEATURE); }
+{ MS_LEXER_RETURN_TOKEN(EXPRESSION); }
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
 #line 236 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(FILLED); }
+{ MS_LEXER_RETURN_TOKEN(EXTENT); }
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
 #line 237 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(FILTER); }
+{ MS_LEXER_RETURN_TOKEN(EXTENSION); }
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
 #line 238 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(FILTERITEM); }
+{ MS_LEXER_RETURN_TOKEN(FEATURE); }
 	YY_BREAK
 case 71:
 YY_RULE_SETUP
 #line 239 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(FOOTER); }
+{ MS_LEXER_RETURN_TOKEN(FILLED); }
 	YY_BREAK
 case 72:
 YY_RULE_SETUP
 #line 240 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(FONT); }
+{ MS_LEXER_RETURN_TOKEN(FILTER); }
 	YY_BREAK
 case 73:
 YY_RULE_SETUP
 #line 241 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(FONTSET); }
+{ MS_LEXER_RETURN_TOKEN(FILTERITEM); }
 	YY_BREAK
 case 74:
 YY_RULE_SETUP
 #line 242 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(FORCE); }
+{ MS_LEXER_RETURN_TOKEN(FOOTER); }
 	YY_BREAK
 case 75:
 YY_RULE_SETUP
 #line 243 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(FORMATOPTION); }
+{ MS_LEXER_RETURN_TOKEN(FONT); }
 	YY_BREAK
 case 76:
 YY_RULE_SETUP
 #line 244 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(FROM); }
+{ MS_LEXER_RETURN_TOKEN(FONTSET); }
 	YY_BREAK
 case 77:
 YY_RULE_SETUP
 #line 245 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(GAP); }
+{ MS_LEXER_RETURN_TOKEN(FORCE); }
 	YY_BREAK
 case 78:
 YY_RULE_SETUP
 #line 246 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(GEOMTRANSFORM); }
+{ MS_LEXER_RETURN_TOKEN(FORMATOPTION); }
 	YY_BREAK
 case 79:
 YY_RULE_SETUP
 #line 247 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(GRID); }
+{ MS_LEXER_RETURN_TOKEN(FROM); }
 	YY_BREAK
 case 80:
 YY_RULE_SETUP
 #line 248 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(GRIDSTEP); }
+{ MS_LEXER_RETURN_TOKEN(GAP); }
 	YY_BREAK
 case 81:
 YY_RULE_SETUP
 #line 249 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(GRATICULE); }
+{ MS_LEXER_RETURN_TOKEN(GEOMTRANSFORM); }
 	YY_BREAK
 case 82:
 YY_RULE_SETUP
 #line 250 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(GROUP); }
+{ MS_LEXER_RETURN_TOKEN(GRID); }
 	YY_BREAK
 case 83:
 YY_RULE_SETUP
 #line 251 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(HEADER); }
+{ MS_LEXER_RETURN_TOKEN(GRIDSTEP); }
 	YY_BREAK
 case 84:
 YY_RULE_SETUP
 #line 252 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(IMAGE); }
+{ MS_LEXER_RETURN_TOKEN(GRATICULE); }
 	YY_BREAK
 case 85:
 YY_RULE_SETUP
 #line 253 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(IMAGECOLOR); }
+{ MS_LEXER_RETURN_TOKEN(GROUP); }
 	YY_BREAK
 case 86:
 YY_RULE_SETUP
 #line 254 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(IMAGETYPE); }
+{ MS_LEXER_RETURN_TOKEN(HEADER); }
 	YY_BREAK
 case 87:
 YY_RULE_SETUP
 #line 255 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(IMAGEQUALITY); }
+{ MS_LEXER_RETURN_TOKEN(IMAGE); }
 	YY_BREAK
 case 88:
 YY_RULE_SETUP
 #line 256 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(IMAGEMODE); }
+{ MS_LEXER_RETURN_TOKEN(IMAGECOLOR); }
 	YY_BREAK
 case 89:
 YY_RULE_SETUP
 #line 257 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(IMAGEPATH); }
+{ MS_LEXER_RETURN_TOKEN(IMAGETYPE); }
 	YY_BREAK
 case 90:
 YY_RULE_SETUP
 #line 258 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(TEMPPATH); }
+{ MS_LEXER_RETURN_TOKEN(IMAGEQUALITY); }
 	YY_BREAK
 case 91:
 YY_RULE_SETUP
 #line 259 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(IMAGEURL); }
+{ MS_LEXER_RETURN_TOKEN(IMAGEMODE); }
 	YY_BREAK
 case 92:
 YY_RULE_SETUP
 #line 260 "maplexer.l"
-{ BEGIN(INCLUDE); }
+{ MS_LEXER_RETURN_TOKEN(IMAGEPATH); }
 	YY_BREAK
 case 93:
 YY_RULE_SETUP
 #line 261 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(INDEX); }
+{ MS_LEXER_RETURN_TOKEN(TEMPPATH); }
 	YY_BREAK
 case 94:
 YY_RULE_SETUP
 #line 262 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(INITIALGAP); }
+{ MS_LEXER_RETURN_TOKEN(IMAGEURL); }
 	YY_BREAK
 case 95:
 YY_RULE_SETUP
 #line 263 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(INTERLACE); }
+{ BEGIN(INCLUDE); }
 	YY_BREAK
 case 96:
 YY_RULE_SETUP
 #line 264 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(INTERVALS); } 
+{ MS_LEXER_RETURN_TOKEN(INDEX); }
 	YY_BREAK
 case 97:
 YY_RULE_SETUP
 #line 265 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(JOIN); }
+{ MS_LEXER_RETURN_TOKEN(INITIALGAP); }
 	YY_BREAK
 case 98:
 YY_RULE_SETUP
 #line 266 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(KEYIMAGE); }
+{ MS_LEXER_RETURN_TOKEN(INTERLACE); }
 	YY_BREAK
 case 99:
 YY_RULE_SETUP
 #line 267 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(KEYSIZE); }
+{ MS_LEXER_RETURN_TOKEN(INTERVALS); } 
 	YY_BREAK
 case 100:
 YY_RULE_SETUP
 #line 268 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(KEYSPACING); }
+{ MS_LEXER_RETURN_TOKEN(JOIN); }
 	YY_BREAK
 case 101:
 YY_RULE_SETUP
 #line 269 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(LABEL); }
+{ MS_LEXER_RETURN_TOKEN(KEYIMAGE); }
 	YY_BREAK
 case 102:
 YY_RULE_SETUP
 #line 270 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(LABELCACHE); }
+{ MS_LEXER_RETURN_TOKEN(KEYSIZE); }
 	YY_BREAK
 case 103:
 YY_RULE_SETUP
 #line 271 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(LABELFORMAT); }
+{ MS_LEXER_RETURN_TOKEN(KEYSPACING); }
 	YY_BREAK
 case 104:
 YY_RULE_SETUP
 #line 272 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(LABELITEM); }
+{ MS_LEXER_RETURN_TOKEN(LABEL); }
 	YY_BREAK
 case 105:
 YY_RULE_SETUP
 #line 273 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(LABELMAXSCALE); }
+{ MS_LEXER_RETURN_TOKEN(LABELCACHE); }
 	YY_BREAK
 case 106:
 YY_RULE_SETUP
 #line 274 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(LABELMAXSCALEDENOM); }
+{ MS_LEXER_RETURN_TOKEN(LABELFORMAT); }
 	YY_BREAK
 case 107:
 YY_RULE_SETUP
 #line 275 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(LABELMINSCALE); }
+{ MS_LEXER_RETURN_TOKEN(LABELITEM); }
 	YY_BREAK
 case 108:
 YY_RULE_SETUP
 #line 276 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(LABELMINSCALEDENOM); }
+{ MS_LEXER_RETURN_TOKEN(LABELMAXSCALE); }
 	YY_BREAK
 case 109:
 YY_RULE_SETUP
 #line 277 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(LABELREQUIRES); }
+{ MS_LEXER_RETURN_TOKEN(LABELMAXSCALEDENOM); }
 	YY_BREAK
 case 110:
 YY_RULE_SETUP
 #line 278 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(LATLON); }
+{ MS_LEXER_RETURN_TOKEN(LABELMINSCALE); }
 	YY_BREAK
 case 111:
 YY_RULE_SETUP
 #line 279 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(LAYER); }
+{ MS_LEXER_RETURN_TOKEN(LABELMINSCALEDENOM); }
 	YY_BREAK
 case 112:
 YY_RULE_SETUP
 #line 280 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(LEADER); }
+{ MS_LEXER_RETURN_TOKEN(LABELREQUIRES); }
 	YY_BREAK
 case 113:
 YY_RULE_SETUP
 #line 281 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(LEGEND); }
+{ MS_LEXER_RETURN_TOKEN(LATLON); }
 	YY_BREAK
 case 114:
 YY_RULE_SETUP
 #line 282 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(LEGENDFORMAT); }
+{ MS_LEXER_RETURN_TOKEN(LAYER); }
 	YY_BREAK
 case 115:
 YY_RULE_SETUP
 #line 283 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(LINECAP); }
+{ MS_LEXER_RETURN_TOKEN(LEADER); }
 	YY_BREAK
 case 116:
 YY_RULE_SETUP
 #line 284 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(LINEJOIN); }
+{ MS_LEXER_RETURN_TOKEN(LEGEND); }
 	YY_BREAK
 case 117:
 YY_RULE_SETUP
 #line 285 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(LINEJOINMAXSIZE); }
+{ MS_LEXER_RETURN_TOKEN(LEGENDFORMAT); }
 	YY_BREAK
 case 118:
 YY_RULE_SETUP
 #line 286 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(LOG); }
+{ MS_LEXER_RETURN_TOKEN(LINECAP); }
 	YY_BREAK
 case 119:
 YY_RULE_SETUP
 #line 287 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MAP); }
+{ MS_LEXER_RETURN_TOKEN(LINEJOIN); }
 	YY_BREAK
 case 120:
 YY_RULE_SETUP
 #line 288 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MARKER); }
+{ MS_LEXER_RETURN_TOKEN(LINEJOINMAXSIZE); }
 	YY_BREAK
 case 121:
 YY_RULE_SETUP
 #line 289 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MARKERSIZE); }
+{ MS_LEXER_RETURN_TOKEN(LOG); }
 	YY_BREAK
 case 122:
 YY_RULE_SETUP
 #line 290 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MASK); }
+{ MS_LEXER_RETURN_TOKEN(MAP); }
 	YY_BREAK
 case 123:
 YY_RULE_SETUP
 #line 291 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MAXARCS); }
+{ MS_LEXER_RETURN_TOKEN(MARKER); }
 	YY_BREAK
 case 124:
 YY_RULE_SETUP
 #line 292 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MAXBOXSIZE); }
+{ MS_LEXER_RETURN_TOKEN(MARKERSIZE); }
 	YY_BREAK
 case 125:
 YY_RULE_SETUP
 #line 293 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MAXDISTANCE); }
+{ MS_LEXER_RETURN_TOKEN(MASK); }
 	YY_BREAK
 case 126:
 YY_RULE_SETUP
 #line 294 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MAXFEATURES); }
+{ MS_LEXER_RETURN_TOKEN(MAXARCS); }
 	YY_BREAK
 case 127:
 YY_RULE_SETUP
 #line 295 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MAXINTERVAL); }
+{ MS_LEXER_RETURN_TOKEN(MAXBOXSIZE); }
 	YY_BREAK
 case 128:
 YY_RULE_SETUP
 #line 296 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MAXSCALE); }
+{ MS_LEXER_RETURN_TOKEN(MAXDISTANCE); }
 	YY_BREAK
 case 129:
 YY_RULE_SETUP
 #line 297 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MAXSCALEDENOM); }
+{ MS_LEXER_RETURN_TOKEN(MAXFEATURES); }
 	YY_BREAK
 case 130:
 YY_RULE_SETUP
 #line 298 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MAXGEOWIDTH); }
+{ MS_LEXER_RETURN_TOKEN(MAXINTERVAL); }
 	YY_BREAK
 case 131:
 YY_RULE_SETUP
 #line 299 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MAXLENGTH); }
+{ MS_LEXER_RETURN_TOKEN(MAXSCALE); }
 	YY_BREAK
 case 132:
 YY_RULE_SETUP
 #line 300 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MAXSIZE); }
+{ MS_LEXER_RETURN_TOKEN(MAXSCALEDENOM); }
 	YY_BREAK
 case 133:
 YY_RULE_SETUP
 #line 301 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MAXSUBDIVIDE); }
+{ MS_LEXER_RETURN_TOKEN(MAXGEOWIDTH); }
 	YY_BREAK
 case 134:
 YY_RULE_SETUP
 #line 302 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MAXTEMPLATE); }
+{ MS_LEXER_RETURN_TOKEN(MAXLENGTH); }
 	YY_BREAK
 case 135:
 YY_RULE_SETUP
 #line 303 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MAXWIDTH); }
+{ MS_LEXER_RETURN_TOKEN(MAXSIZE); }
 	YY_BREAK
 case 136:
 YY_RULE_SETUP
 #line 304 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(METADATA); }
+{ MS_LEXER_RETURN_TOKEN(MAXSUBDIVIDE); }
 	YY_BREAK
 case 137:
 YY_RULE_SETUP
 #line 305 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MIMETYPE); }
+{ MS_LEXER_RETURN_TOKEN(MAXTEMPLATE); }
 	YY_BREAK
 case 138:
 YY_RULE_SETUP
 #line 306 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MINARCS); }
+{ MS_LEXER_RETURN_TOKEN(MAXWIDTH); }
 	YY_BREAK
 case 139:
 YY_RULE_SETUP
 #line 307 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MINBOXSIZE); }
+{ MS_LEXER_RETURN_TOKEN(METADATA); }
 	YY_BREAK
 case 140:
 YY_RULE_SETUP
 #line 308 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MINDISTANCE); }
+{ MS_LEXER_RETURN_TOKEN(MIMETYPE); }
 	YY_BREAK
 case 141:
 YY_RULE_SETUP
 #line 309 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(REPEATDISTANCE); }
+{ MS_LEXER_RETURN_TOKEN(MINARCS); }
 	YY_BREAK
 case 142:
 YY_RULE_SETUP
 #line 310 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MAXOVERLAPANGLE); } 
+{ MS_LEXER_RETURN_TOKEN(MINBOXSIZE); }
 	YY_BREAK
 case 143:
 YY_RULE_SETUP
 #line 311 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MINFEATURESIZE); }
+{ MS_LEXER_RETURN_TOKEN(MINDISTANCE); }
 	YY_BREAK
 case 144:
 YY_RULE_SETUP
 #line 312 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MININTERVAL); }
+{ MS_LEXER_RETURN_TOKEN(REPEATDISTANCE); }
 	YY_BREAK
 case 145:
 YY_RULE_SETUP
 #line 313 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MINSCALE); }
+{ MS_LEXER_RETURN_TOKEN(MAXOVERLAPANGLE); } 
 	YY_BREAK
 case 146:
 YY_RULE_SETUP
 #line 314 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MINSCALEDENOM); }
+{ MS_LEXER_RETURN_TOKEN(MINFEATURESIZE); }
 	YY_BREAK
 case 147:
 YY_RULE_SETUP
 #line 315 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MINGEOWIDTH); }
+{ MS_LEXER_RETURN_TOKEN(MININTERVAL); }
 	YY_BREAK
 case 148:
 YY_RULE_SETUP
 #line 316 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MINLENGTH); }
+{ MS_LEXER_RETURN_TOKEN(MINSCALE); }
 	YY_BREAK
 case 149:
 YY_RULE_SETUP
 #line 317 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MINSIZE); }
+{ MS_LEXER_RETURN_TOKEN(MINSCALEDENOM); }
 	YY_BREAK
 case 150:
 YY_RULE_SETUP
 #line 318 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MINSUBDIVIDE); }
+{ MS_LEXER_RETURN_TOKEN(MINGEOWIDTH); }
 	YY_BREAK
 case 151:
 YY_RULE_SETUP
 #line 319 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MINTEMPLATE); }
+{ MS_LEXER_RETURN_TOKEN(MINLENGTH); }
 	YY_BREAK
 case 152:
 YY_RULE_SETUP
 #line 320 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MINWIDTH); }
+{ MS_LEXER_RETURN_TOKEN(MINSIZE); }
 	YY_BREAK
 case 153:
 YY_RULE_SETUP
 #line 321 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(NAME); }
+{ MS_LEXER_RETURN_TOKEN(MINSUBDIVIDE); }
 	YY_BREAK
 case 154:
 YY_RULE_SETUP
 #line 322 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(OFFSET); }
+{ MS_LEXER_RETURN_TOKEN(MINTEMPLATE); }
 	YY_BREAK
 case 155:
 YY_RULE_SETUP
 #line 323 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(OFFSITE); }
+{ MS_LEXER_RETURN_TOKEN(MINWIDTH); }
 	YY_BREAK
 case 156:
 YY_RULE_SETUP
 #line 324 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(OPACITY); }
+{ MS_LEXER_RETURN_TOKEN(NAME); }
 	YY_BREAK
 case 157:
 YY_RULE_SETUP
 #line 325 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(OUTLINECOLOR); }
+{ MS_LEXER_RETURN_TOKEN(OFFSET); }
 	YY_BREAK
 case 158:
 YY_RULE_SETUP
 #line 326 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(OUTLINEWIDTH); }
+{ MS_LEXER_RETURN_TOKEN(OFFSITE); }
 	YY_BREAK
 case 159:
 YY_RULE_SETUP
 #line 327 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(OUTPUTFORMAT); }
+{ MS_LEXER_RETURN_TOKEN(OPACITY); }
 	YY_BREAK
 case 160:
 YY_RULE_SETUP
 #line 328 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(OVERLAYBACKGROUNDCOLOR); }
+{ MS_LEXER_RETURN_TOKEN(OUTLINECOLOR); }
 	YY_BREAK
 case 161:
 YY_RULE_SETUP
 #line 329 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(OVERLAYCOLOR); }
+{ MS_LEXER_RETURN_TOKEN(OUTLINEWIDTH); }
 	YY_BREAK
 case 162:
 YY_RULE_SETUP
 #line 330 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(OVERLAYMAXSIZE); }
+{ MS_LEXER_RETURN_TOKEN(OUTPUTFORMAT); }
 	YY_BREAK
 case 163:
 YY_RULE_SETUP
 #line 331 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(OVERLAYMINSIZE); }
+{ MS_LEXER_RETURN_TOKEN(OVERLAYBACKGROUNDCOLOR); }
 	YY_BREAK
 case 164:
 YY_RULE_SETUP
 #line 332 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(OVERLAYOUTLINECOLOR); }
+{ MS_LEXER_RETURN_TOKEN(OVERLAYCOLOR); }
 	YY_BREAK
 case 165:
 YY_RULE_SETUP
 #line 333 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(OVERLAYSIZE); }
+{ MS_LEXER_RETURN_TOKEN(OVERLAYMAXSIZE); }
 	YY_BREAK
 case 166:
 YY_RULE_SETUP
 #line 334 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(OVERLAYSYMBOL); }
+{ MS_LEXER_RETURN_TOKEN(OVERLAYMINSIZE); }
 	YY_BREAK
 case 167:
 YY_RULE_SETUP
 #line 335 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(PARTIALS); }
+{ MS_LEXER_RETURN_TOKEN(OVERLAYOUTLINECOLOR); }
 	YY_BREAK
 case 168:
 YY_RULE_SETUP
 #line 336 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(PATTERN); }
+{ MS_LEXER_RETURN_TOKEN(OVERLAYSIZE); }
 	YY_BREAK
 case 169:
 YY_RULE_SETUP
 #line 337 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(POINTS); }
+{ MS_LEXER_RETURN_TOKEN(OVERLAYSYMBOL); }
 	YY_BREAK
 case 170:
 YY_RULE_SETUP
 #line 338 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(ITEMS); }
+{ MS_LEXER_RETURN_TOKEN(PARTIALS); }
 	YY_BREAK
 case 171:
 YY_RULE_SETUP
 #line 339 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(POSITION); }
+{ MS_LEXER_RETURN_TOKEN(PATTERN); }
 	YY_BREAK
 case 172:
 YY_RULE_SETUP
 #line 340 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(POSTLABELCACHE); }
+{ MS_LEXER_RETURN_TOKEN(POINTS); }
 	YY_BREAK
 case 173:
 YY_RULE_SETUP
 #line 341 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(PRIORITY); }
+{ MS_LEXER_RETURN_TOKEN(ITEMS); }
 	YY_BREAK
 case 174:
 YY_RULE_SETUP
 #line 342 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(PROCESSING); }
+{ MS_LEXER_RETURN_TOKEN(POSITION); }
 	YY_BREAK
 case 175:
 YY_RULE_SETUP
 #line 343 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(PROJECTION); }
+{ MS_LEXER_RETURN_TOKEN(POSTLABELCACHE); }
 	YY_BREAK
 case 176:
 YY_RULE_SETUP
 #line 344 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(QUERYFORMAT); }
+{ MS_LEXER_RETURN_TOKEN(PRIORITY); }
 	YY_BREAK
 case 177:
 YY_RULE_SETUP
 #line 345 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(QUERYMAP); }
+{ MS_LEXER_RETURN_TOKEN(PROCESSING); }
 	YY_BREAK
 case 178:
 YY_RULE_SETUP
 #line 346 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(REFERENCE); }
+{ MS_LEXER_RETURN_TOKEN(PROJECTION); }
 	YY_BREAK
 case 179:
 YY_RULE_SETUP
 #line 347 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(REGION); }
+{ MS_LEXER_RETURN_TOKEN(QUERYFORMAT); }
 	YY_BREAK
 case 180:
 YY_RULE_SETUP
 #line 348 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(RELATIVETO); }
+{ MS_LEXER_RETURN_TOKEN(QUERYMAP); }
 	YY_BREAK
 case 181:
 YY_RULE_SETUP
 #line 349 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(REQUIRES); }
+{ MS_LEXER_RETURN_TOKEN(REFERENCE); }
 	YY_BREAK
 case 182:
 YY_RULE_SETUP
 #line 350 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(RESOLUTION); }
+{ MS_LEXER_RETURN_TOKEN(REGION); }
 	YY_BREAK
 case 183:
 YY_RULE_SETUP
 #line 351 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(DEFRESOLUTION); }
+{ MS_LEXER_RETURN_TOKEN(RELATIVETO); }
 	YY_BREAK
 case 184:
 YY_RULE_SETUP
 #line 352 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(SCALE); }
+{ MS_LEXER_RETURN_TOKEN(REQUIRES); }
 	YY_BREAK
 case 185:
 YY_RULE_SETUP
 #line 353 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(SCALEDENOM); }
+{ MS_LEXER_RETURN_TOKEN(RESOLUTION); }
 	YY_BREAK
 case 186:
 YY_RULE_SETUP
 #line 354 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(SCALEBAR); }
+{ MS_LEXER_RETURN_TOKEN(DEFRESOLUTION); }
 	YY_BREAK
 case 187:
 YY_RULE_SETUP
 #line 355 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(SCALETOKEN); }
+{ MS_LEXER_RETURN_TOKEN(SCALE); }
 	YY_BREAK
 case 188:
 YY_RULE_SETUP
 #line 356 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(SHADOWCOLOR); }
+{ MS_LEXER_RETURN_TOKEN(SCALEDENOM); }
 	YY_BREAK
 case 189:
 YY_RULE_SETUP
 #line 357 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(SHADOWSIZE); }
+{ MS_LEXER_RETURN_TOKEN(SCALEBAR); }
 	YY_BREAK
 case 190:
 YY_RULE_SETUP
 #line 358 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(SHAPEPATH); }
+{ MS_LEXER_RETURN_TOKEN(SCALETOKEN); }
 	YY_BREAK
 case 191:
 YY_RULE_SETUP
 #line 359 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(SIZE); }
+{ MS_LEXER_RETURN_TOKEN(SHADOWCOLOR); }
 	YY_BREAK
 case 192:
 YY_RULE_SETUP
 #line 360 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(SIZEUNITS); }
+{ MS_LEXER_RETURN_TOKEN(SHADOWSIZE); }
 	YY_BREAK
 case 193:
 YY_RULE_SETUP
 #line 361 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(STATUS); }
+{ MS_LEXER_RETURN_TOKEN(SHAPEPATH); }
 	YY_BREAK
 case 194:
 YY_RULE_SETUP
 #line 362 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(STYLE); }
+{ MS_LEXER_RETURN_TOKEN(SIZE); }
 	YY_BREAK
 case 195:
 YY_RULE_SETUP
 #line 363 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(STYLEITEM); }
+{ MS_LEXER_RETURN_TOKEN(SIZEUNITS); }
 	YY_BREAK
 case 196:
 YY_RULE_SETUP
 #line 364 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(SYMBOL); }
+{ MS_LEXER_RETURN_TOKEN(STATUS); }
 	YY_BREAK
 case 197:
 YY_RULE_SETUP
 #line 365 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(SYMBOLSCALE); }
+{ MS_LEXER_RETURN_TOKEN(STYLE); }
 	YY_BREAK
 case 198:
 YY_RULE_SETUP
 #line 366 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(SYMBOLSCALEDENOM); }
+{ MS_LEXER_RETURN_TOKEN(STYLEITEM); }
 	YY_BREAK
 case 199:
 YY_RULE_SETUP
 #line 367 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(SYMBOLSET); }
+{ MS_LEXER_RETURN_TOKEN(SYMBOL); }
 	YY_BREAK
 case 200:
 YY_RULE_SETUP
 #line 368 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(TABLE); }
+{ MS_LEXER_RETURN_TOKEN(SYMBOLSCALE); }
 	YY_BREAK
 case 201:
 YY_RULE_SETUP
 #line 369 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(TEMPLATE); }
+{ MS_LEXER_RETURN_TOKEN(SYMBOLSCALEDENOM); }
 	YY_BREAK
 case 202:
 YY_RULE_SETUP
 #line 370 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(TEMPLATEPATTERN); }
+{ MS_LEXER_RETURN_TOKEN(SYMBOLSET); }
 	YY_BREAK
 case 203:
 YY_RULE_SETUP
 #line 371 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(TEXT); }
+{ MS_LEXER_RETURN_TOKEN(TABLE); }
 	YY_BREAK
 case 204:
 YY_RULE_SETUP
 #line 372 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(TILEINDEX); }
+{ MS_LEXER_RETURN_TOKEN(TEMPLATE); }
 	YY_BREAK
 case 205:
 YY_RULE_SETUP
 #line 373 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(TILEITEM); }
+{ MS_LEXER_RETURN_TOKEN(TEMPLATEPATTERN); }
 	YY_BREAK
 case 206:
 YY_RULE_SETUP
 #line 374 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(TITLE); }
+{ MS_LEXER_RETURN_TOKEN(TEXT); }
 	YY_BREAK
 case 207:
 YY_RULE_SETUP
 #line 375 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(TO); }
+{ MS_LEXER_RETURN_TOKEN(TILEINDEX); }
 	YY_BREAK
 case 208:
 YY_RULE_SETUP
 #line 376 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(TOLERANCE); }
+{ MS_LEXER_RETURN_TOKEN(TILEITEM); }
 	YY_BREAK
 case 209:
 YY_RULE_SETUP
 #line 377 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(TOLERANCEUNITS); }
+{ MS_LEXER_RETURN_TOKEN(TITLE); }
 	YY_BREAK
 case 210:
 YY_RULE_SETUP
 #line 378 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(TRANSPARENCY); }
+{ MS_LEXER_RETURN_TOKEN(TO); }
 	YY_BREAK
 case 211:
 YY_RULE_SETUP
 #line 379 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(TRANSPARENT); }
+{ MS_LEXER_RETURN_TOKEN(TOLERANCE); }
 	YY_BREAK
 case 212:
 YY_RULE_SETUP
 #line 380 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(TRANSFORM); }
+{ MS_LEXER_RETURN_TOKEN(TOLERANCEUNITS); }
 	YY_BREAK
 case 213:
 YY_RULE_SETUP
 #line 381 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(TYPE); }
+{ MS_LEXER_RETURN_TOKEN(TRANSPARENCY); }
 	YY_BREAK
 case 214:
 YY_RULE_SETUP
 #line 382 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(UNITS); }
+{ MS_LEXER_RETURN_TOKEN(TRANSPARENT); }
 	YY_BREAK
 case 215:
 YY_RULE_SETUP
 #line 383 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(VALIDATION); }
+{ MS_LEXER_RETURN_TOKEN(TRANSFORM); }
 	YY_BREAK
 case 216:
 YY_RULE_SETUP
 #line 384 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(VALUES); }
+{ MS_LEXER_RETURN_TOKEN(TYPE); }
 	YY_BREAK
 case 217:
 YY_RULE_SETUP
 #line 385 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(WEB); }
+{ MS_LEXER_RETURN_TOKEN(UNITS); }
 	YY_BREAK
 case 218:
 YY_RULE_SETUP
 #line 386 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(WIDTH); }
+{ MS_LEXER_RETURN_TOKEN(VALIDATION); }
 	YY_BREAK
 case 219:
 YY_RULE_SETUP
 #line 387 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(WKT); }
+{ MS_LEXER_RETURN_TOKEN(VALUES); }
 	YY_BREAK
 case 220:
 YY_RULE_SETUP
 #line 388 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(WRAP); }
+{ MS_LEXER_RETURN_TOKEN(WEB); }
 	YY_BREAK
 case 221:
 YY_RULE_SETUP
-#line 390 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_LAYER_ANNOTATION); }
+#line 389 "maplexer.l"
+{ MS_LEXER_RETURN_TOKEN(WIDTH); }
 	YY_BREAK
 case 222:
 YY_RULE_SETUP
-#line 391 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_AUTO); }
+#line 390 "maplexer.l"
+{ MS_LEXER_RETURN_TOKEN(WKT); }
 	YY_BREAK
 case 223:
 YY_RULE_SETUP
-#line 392 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_AUTO2); }
+#line 391 "maplexer.l"
+{ MS_LEXER_RETURN_TOKEN(WRAP); }
 	YY_BREAK
 case 224:
 YY_RULE_SETUP
 #line 393 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_CJC_BEVEL); }
+{ MS_LEXER_RETURN_TOKEN(MS_LAYER_ANNOTATION); }
 	YY_BREAK
 case 225:
 YY_RULE_SETUP
 #line 394 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_BITMAP); }
+{ MS_LEXER_RETURN_TOKEN(MS_AUTO); }
 	YY_BREAK
 case 226:
 YY_RULE_SETUP
 #line 395 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_CJC_BUTT); }
+{ MS_LEXER_RETURN_TOKEN(MS_AUTO2); }
 	YY_BREAK
 case 227:
 YY_RULE_SETUP
 #line 396 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_CC); }
+{ MS_LEXER_RETURN_TOKEN(MS_CJC_BEVEL); }
 	YY_BREAK
 case 228:
 YY_RULE_SETUP
 #line 397 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_ALIGN_CENTER); }
+{ MS_LEXER_RETURN_TOKEN(MS_BITMAP); }
 	YY_BREAK
 case 229:
 YY_RULE_SETUP
 #line 398 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_LAYER_CHART); }
+{ MS_LEXER_RETURN_TOKEN(MS_CJC_BUTT); }
 	YY_BREAK
 case 230:
 YY_RULE_SETUP
 #line 399 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_LAYER_CIRCLE); }
+{ MS_LEXER_RETURN_TOKEN(MS_CC); }
 	YY_BREAK
 case 231:
 YY_RULE_SETUP
 #line 400 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_CL); }
+{ MS_LEXER_RETURN_TOKEN(MS_ALIGN_CENTER); }
 	YY_BREAK
 case 232:
 YY_RULE_SETUP
 #line 401 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_CR); }
+{ MS_LEXER_RETURN_TOKEN(MS_LAYER_CHART); }
 	YY_BREAK
 case 233:
 YY_RULE_SETUP
 #line 402 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_DB_CSV); }
+{ MS_LEXER_RETURN_TOKEN(MS_LAYER_CIRCLE); }
 	YY_BREAK
 case 234:
 YY_RULE_SETUP
 #line 403 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_DB_POSTGRES); }
+{ MS_LEXER_RETURN_TOKEN(MS_CL); }
 	YY_BREAK
 case 235:
 YY_RULE_SETUP
 #line 404 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_DB_MYSQL); }
+{ MS_LEXER_RETURN_TOKEN(MS_CR); }
 	YY_BREAK
 case 236:
 YY_RULE_SETUP
 #line 405 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_DEFAULT); }
+{ MS_LEXER_RETURN_TOKEN(MS_DB_CSV); }
 	YY_BREAK
 case 237:
 YY_RULE_SETUP
 #line 406 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_DD); }
+{ MS_LEXER_RETURN_TOKEN(MS_DB_POSTGRES); }
 	YY_BREAK
 case 238:
 YY_RULE_SETUP
 #line 407 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_SYMBOL_ELLIPSE); }
+{ MS_LEXER_RETURN_TOKEN(MS_DB_MYSQL); }
 	YY_BREAK
 case 239:
 YY_RULE_SETUP
 #line 408 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_EMBED); }
+{ MS_LEXER_RETURN_TOKEN(MS_DEFAULT); }
 	YY_BREAK
 case 240:
 YY_RULE_SETUP
 #line 409 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_FALSE); }
+{ MS_LEXER_RETURN_TOKEN(MS_DD); }
 	YY_BREAK
 case 241:
 YY_RULE_SETUP
 #line 410 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_FEET); }
+{ MS_LEXER_RETURN_TOKEN(MS_SYMBOL_ELLIPSE); }
 	YY_BREAK
 case 242:
 YY_RULE_SETUP
 #line 411 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_FOLLOW); }
+{ MS_LEXER_RETURN_TOKEN(MS_EMBED); }
 	YY_BREAK
 case 243:
 YY_RULE_SETUP
 #line 412 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_GIANT); }
+{ MS_LEXER_RETURN_TOKEN(MS_FALSE); }
 	YY_BREAK
 case 244:
 YY_RULE_SETUP
 #line 413 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_SYMBOL_HATCH); }
+{ MS_LEXER_RETURN_TOKEN(MS_FEET); }
 	YY_BREAK
 case 245:
 YY_RULE_SETUP
 #line 414 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_HILITE); }
+{ MS_LEXER_RETURN_TOKEN(MS_FOLLOW); }
 	YY_BREAK
 case 246:
 YY_RULE_SETUP
 #line 415 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_INCHES); }
+{ MS_LEXER_RETURN_TOKEN(MS_GIANT); }
 	YY_BREAK
 case 247:
 YY_RULE_SETUP
 #line 416 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_KILOMETERS); }
+{ MS_LEXER_RETURN_TOKEN(MS_SYMBOL_HATCH); }
 	YY_BREAK
 case 248:
 YY_RULE_SETUP
 #line 417 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_LARGE); }
+{ MS_LEXER_RETURN_TOKEN(MS_HILITE); }
 	YY_BREAK
 case 249:
 YY_RULE_SETUP
 #line 418 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_LC); }
+{ MS_LEXER_RETURN_TOKEN(MS_INCHES); }
 	YY_BREAK
 case 250:
 YY_RULE_SETUP
 #line 419 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_ALIGN_LEFT); }
+{ MS_LEXER_RETURN_TOKEN(MS_KILOMETERS); }
 	YY_BREAK
 case 251:
 YY_RULE_SETUP
 #line 420 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_LAYER_LINE); }
+{ MS_LEXER_RETURN_TOKEN(MS_LARGE); }
 	YY_BREAK
 case 252:
 YY_RULE_SETUP
 #line 421 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_LL); }
+{ MS_LEXER_RETURN_TOKEN(MS_LC); }
 	YY_BREAK
 case 253:
 YY_RULE_SETUP
 #line 422 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_LR); }
+{ MS_LEXER_RETURN_TOKEN(MS_ALIGN_LEFT); }
 	YY_BREAK
 case 254:
 YY_RULE_SETUP
 #line 423 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_MEDIUM); }
+{ MS_LEXER_RETURN_TOKEN(MS_LAYER_LINE); }
 	YY_BREAK
 case 255:
 YY_RULE_SETUP
 #line 424 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_METERS); }
+{ MS_LEXER_RETURN_TOKEN(MS_LL); }
 	YY_BREAK
 case 256:
 YY_RULE_SETUP
 #line 425 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_NAUTICALMILES); }
+{ MS_LEXER_RETURN_TOKEN(MS_LR); }
 	YY_BREAK
 case 257:
 YY_RULE_SETUP
 #line 426 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_MILES); }
+{ MS_LEXER_RETURN_TOKEN(MS_MEDIUM); }
 	YY_BREAK
 case 258:
 YY_RULE_SETUP
 #line 427 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_CJC_MITER); }
+{ MS_LEXER_RETURN_TOKEN(MS_METERS); }
 	YY_BREAK
 case 259:
 YY_RULE_SETUP
 #line 428 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_MULTIPLE); }
+{ MS_LEXER_RETURN_TOKEN(MS_NAUTICALMILES); }
 	YY_BREAK
 case 260:
 YY_RULE_SETUP
 #line 429 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_CJC_NONE); }
+{ MS_LEXER_RETURN_TOKEN(MS_MILES); }
 	YY_BREAK
 case 261:
 YY_RULE_SETUP
 #line 430 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_NORMAL); }
+{ MS_LEXER_RETURN_TOKEN(MS_CJC_MITER); }
 	YY_BREAK
 case 262:
 YY_RULE_SETUP
 #line 431 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_OFF); }
+{ MS_LEXER_RETURN_TOKEN(MS_MULTIPLE); }
 	YY_BREAK
 case 263:
 YY_RULE_SETUP
 #line 432 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_OGR); }
+{ MS_LEXER_RETURN_TOKEN(MS_CJC_NONE); }
 	YY_BREAK
 case 264:
 YY_RULE_SETUP
 #line 433 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_ON); }
+{ MS_LEXER_RETURN_TOKEN(MS_NORMAL); }
 	YY_BREAK
 case 265:
 YY_RULE_SETUP
 #line 434 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_JOIN_ONE_TO_ONE); }
+{ MS_LEXER_RETURN_TOKEN(MS_OFF); }
 	YY_BREAK
 case 266:
 YY_RULE_SETUP
 #line 435 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_JOIN_ONE_TO_MANY); }
+{ MS_LEXER_RETURN_TOKEN(MS_OGR); }
 	YY_BREAK
 case 267:
 YY_RULE_SETUP
 #line 436 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_ORACLESPATIAL); }
+{ MS_LEXER_RETURN_TOKEN(MS_ON); }
 	YY_BREAK
 case 268:
 YY_RULE_SETUP
 #line 437 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_PERCENTAGES); }
+{ MS_LEXER_RETURN_TOKEN(MS_JOIN_ONE_TO_ONE); }
 	YY_BREAK
 case 269:
 YY_RULE_SETUP
 #line 438 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_SYMBOL_PIXMAP); }
+{ MS_LEXER_RETURN_TOKEN(MS_JOIN_ONE_TO_MANY); }
 	YY_BREAK
 case 270:
 YY_RULE_SETUP
 #line 439 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_PIXELS); }
+{ MS_LEXER_RETURN_TOKEN(MS_ORACLESPATIAL); }
 	YY_BREAK
 case 271:
 YY_RULE_SETUP
 #line 440 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_LAYER_POINT); }
+{ MS_LEXER_RETURN_TOKEN(MS_PERCENTAGES); }
 	YY_BREAK
 case 272:
 YY_RULE_SETUP
 #line 441 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_LAYER_POLYGON); }
+{ MS_LEXER_RETURN_TOKEN(MS_SYMBOL_PIXMAP); }
 	YY_BREAK
 case 273:
 YY_RULE_SETUP
 #line 442 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_POSTGIS); }
+{ MS_LEXER_RETURN_TOKEN(MS_PIXELS); }
 	YY_BREAK
 case 274:
 YY_RULE_SETUP
 #line 443 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_PLUGIN); }
+{ MS_LEXER_RETURN_TOKEN(MS_LAYER_POINT); }
 	YY_BREAK
 case 275:
 YY_RULE_SETUP
 #line 444 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_LAYER_QUERY); }
+{ MS_LEXER_RETURN_TOKEN(MS_LAYER_POLYGON); }
 	YY_BREAK
 case 276:
 YY_RULE_SETUP
 #line 445 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_LAYER_RASTER); }
+{ MS_LEXER_RETURN_TOKEN(MS_POSTGIS); }
 	YY_BREAK
 case 277:
 YY_RULE_SETUP
 #line 446 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_ALIGN_RIGHT); }
+{ MS_LEXER_RETURN_TOKEN(MS_PLUGIN); }
 	YY_BREAK
 case 278:
 YY_RULE_SETUP
 #line 447 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_CJC_ROUND); }
+{ MS_LEXER_RETURN_TOKEN(MS_LAYER_QUERY); }
 	YY_BREAK
 case 279:
 YY_RULE_SETUP
 #line 448 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_SDE); }
+{ MS_LEXER_RETURN_TOKEN(MS_LAYER_RASTER); }
 	YY_BREAK
 case 280:
 YY_RULE_SETUP
 #line 449 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_SELECTED); }
+{ MS_LEXER_RETURN_TOKEN(MS_ALIGN_RIGHT); }
 	YY_BREAK
 case 281:
 YY_RULE_SETUP
 #line 450 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_SYMBOL_SIMPLE); }
+{ MS_LEXER_RETURN_TOKEN(MS_CJC_ROUND); }
 	YY_BREAK
 case 282:
 YY_RULE_SETUP
 #line 451 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_SINGLE); }
+{ MS_LEXER_RETURN_TOKEN(MS_SDE); }
 	YY_BREAK
 case 283:
 YY_RULE_SETUP
 #line 452 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_SMALL); }
+{ MS_LEXER_RETURN_TOKEN(MS_SELECTED); }
 	YY_BREAK
 case 284:
 YY_RULE_SETUP
 #line 453 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_CJC_SQUARE); }
+{ MS_LEXER_RETURN_TOKEN(MS_SYMBOL_SIMPLE); }
 	YY_BREAK
 case 285:
 YY_RULE_SETUP
 #line 454 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_SYMBOL_SVG); }
+{ MS_LEXER_RETURN_TOKEN(MS_SINGLE); }
 	YY_BREAK
 case 286:
 YY_RULE_SETUP
 #line 455 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(POLAROFFSET); }
+{ MS_LEXER_RETURN_TOKEN(MS_SMALL); }
 	YY_BREAK
 case 287:
 YY_RULE_SETUP
 #line 456 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_TINY); }
+{ MS_LEXER_RETURN_TOKEN(MS_CJC_SQUARE); }
 	YY_BREAK
 case 288:
 YY_RULE_SETUP
 #line 457 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_CJC_TRIANGLE); }
+{ MS_LEXER_RETURN_TOKEN(MS_SYMBOL_SVG); }
 	YY_BREAK
 case 289:
 YY_RULE_SETUP
 #line 458 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_TRUE); }
+{ MS_LEXER_RETURN_TOKEN(POLAROFFSET); }
 	YY_BREAK
 case 290:
 YY_RULE_SETUP
 #line 459 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_TRUETYPE); }
+{ MS_LEXER_RETURN_TOKEN(MS_TINY); }
 	YY_BREAK
 case 291:
 YY_RULE_SETUP
 #line 460 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_UC); }
+{ MS_LEXER_RETURN_TOKEN(MS_CJC_TRIANGLE); }
 	YY_BREAK
 case 292:
 YY_RULE_SETUP
 #line 461 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_UL); }
+{ MS_LEXER_RETURN_TOKEN(MS_TRUE); }
 	YY_BREAK
 case 293:
 YY_RULE_SETUP
 #line 462 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_UR); }
+{ MS_LEXER_RETURN_TOKEN(MS_TRUETYPE); }
 	YY_BREAK
 case 294:
 YY_RULE_SETUP
 #line 463 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_UNION); }
+{ MS_LEXER_RETURN_TOKEN(MS_UC); }
 	YY_BREAK
 case 295:
 YY_RULE_SETUP
 #line 464 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_UVRASTER); }
+{ MS_LEXER_RETURN_TOKEN(MS_UL); }
 	YY_BREAK
 case 296:
 YY_RULE_SETUP
 #line 465 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_SYMBOL_VECTOR); }
+{ MS_LEXER_RETURN_TOKEN(MS_UR); }
 	YY_BREAK
 case 297:
 YY_RULE_SETUP
 #line 466 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_WFS); }
+{ MS_LEXER_RETURN_TOKEN(MS_UNION); }
 	YY_BREAK
 case 298:
 YY_RULE_SETUP
 #line 467 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_WMS); }
+{ MS_LEXER_RETURN_TOKEN(MS_UVRASTER); }
 	YY_BREAK
 case 299:
 YY_RULE_SETUP
 #line 468 "maplexer.l"
-{ MS_LEXER_RETURN_TOKEN(MS_GD_ALPHA); }
+{ MS_LEXER_RETURN_TOKEN(MS_SYMBOL_VECTOR); }
 	YY_BREAK
 case 300:
 YY_RULE_SETUP
+#line 469 "maplexer.l"
+{ MS_LEXER_RETURN_TOKEN(MS_WFS); }
+	YY_BREAK
+case 301:
+YY_RULE_SETUP
 #line 470 "maplexer.l"
+{ MS_LEXER_RETURN_TOKEN(MS_WMS); }
+	YY_BREAK
+case 302:
+YY_RULE_SETUP
+#line 471 "maplexer.l"
+{ MS_LEXER_RETURN_TOKEN(MS_GD_ALPHA); }
+	YY_BREAK
+case 303:
+YY_RULE_SETUP
+#line 473 "maplexer.l"
 {
                                                  msyytext++;
                                                  msyytext[strlen(msyytext)-1] = '\0';
@@ -3973,9 +4016,9 @@ YY_RULE_SETUP
                                                  return(MS_STRING);
                                                }
 	YY_BREAK
-case 301:
+case 304:
 YY_RULE_SETUP
-#line 478 "maplexer.l"
+#line 481 "maplexer.l"
 {
                                                  msyytext++;
                                                  msyytext[strlen(msyytext)-1] = '\0';
@@ -3986,10 +4029,10 @@ YY_RULE_SETUP
                                                  return(MS_NUMBER);
                                                }
 	YY_BREAK
-case 302:
-/* rule 302 can match eol */
+case 305:
+/* rule 305 can match eol */
 YY_RULE_SETUP
-#line 488 "maplexer.l"
+#line 491 "maplexer.l"
 {
                                                  msyytext++;
                                                  msyytext[strlen(msyytext)-1] = '\0';
@@ -3999,18 +4042,26 @@ YY_RULE_SETUP
                                                  return(MS_BINDING);
                                                }
 	YY_BREAK
-case 303:
+case 306:
 YY_RULE_SETUP
-#line 497 "maplexer.l"
+#line 500 "maplexer.l"
 { 
   /* attribute binding - shape (fixed value) */
   return(MS_TOKEN_BINDING_SHAPE);
 }
 	YY_BREAK
-case 304:
-/* rule 304 can match eol */
+case 307:
+YY_RULE_SETUP
+#line 504 "maplexer.l"
+{ 
+  /* attribute binding - cellsize */
+  return(MS_TOKEN_BINDING_MAP_CELLSIZE);
+}
+	YY_BREAK
+case 308:
+/* rule 308 can match eol */
 YY_RULE_SETUP
-#line 501 "maplexer.l"
+#line 508 "maplexer.l"
 {
   /* attribute binding - numeric (no quotes) */
   msyytext++;
@@ -4021,10 +4072,10 @@ YY_RULE_SETUP
   return(MS_TOKEN_BINDING_DOUBLE);
 }
 	YY_BREAK
-case 305:
-/* rule 305 can match eol */
+case 309:
+/* rule 309 can match eol */
 YY_RULE_SETUP
-#line 510 "maplexer.l"
+#line 517 "maplexer.l"
 {
   /* attribute binding - string (single or double quotes) */
   msyytext+=2;
@@ -4035,10 +4086,10 @@ YY_RULE_SETUP
   return(MS_TOKEN_BINDING_STRING);
 }
 	YY_BREAK
-case 306:
-/* rule 306 can match eol */
+case 310:
+/* rule 310 can match eol */
 YY_RULE_SETUP
-#line 519 "maplexer.l"
+#line 526 "maplexer.l"
 {
   /* attribute binding - time */
   msyytext+=2;
@@ -4049,9 +4100,9 @@ YY_RULE_SETUP
   return(MS_TOKEN_BINDING_TIME);
 }
 	YY_BREAK
-case 307:
+case 311:
 YY_RULE_SETUP
-#line 529 "maplexer.l"
+#line 536 "maplexer.l"
 {
   MS_LEXER_STRING_REALLOC(msyystring_buffer, strlen(msyytext), 
                           msyystring_buffer_size, msyystring_buffer_ptr);
@@ -4060,9 +4111,9 @@ YY_RULE_SETUP
   return(MS_NUMBER); 
 }
 	YY_BREAK
-case 308:
+case 312:
 YY_RULE_SETUP
-#line 537 "maplexer.l"
+#line 544 "maplexer.l"
 {
   MS_LEXER_STRING_REALLOC(msyystring_buffer, strlen(msyytext), 
                           msyystring_buffer_size, msyystring_buffer_ptr);
@@ -4071,10 +4122,10 @@ YY_RULE_SETUP
   return(MS_TOKEN_LITERAL_NUMBER);
 }
 	YY_BREAK
-case 309:
-/* rule 309 can match eol */
+case 313:
+/* rule 313 can match eol */
 YY_RULE_SETUP
-#line 545 "maplexer.l"
+#line 552 "maplexer.l"
 {
   msyytext++;
   msyytext[strlen(msyytext)-1] = '\0';
@@ -4084,10 +4135,10 @@ YY_RULE_SETUP
   return(MS_TOKEN_LITERAL_TIME);
 }
 	YY_BREAK
-case 310:
-/* rule 310 can match eol */
+case 314:
+/* rule 314 can match eol */
 YY_RULE_SETUP
-#line 554 "maplexer.l"
+#line 561 "maplexer.l"
 {
                                                  msyytext++;
                                                  msyytext[strlen(msyytext)-2] = '\0';
@@ -4097,10 +4148,10 @@ YY_RULE_SETUP
                                                  return(MS_IREGEX);
                                                }
 	YY_BREAK
-case 311:
-/* rule 311 can match eol */
+case 315:
+/* rule 315 can match eol */
 YY_RULE_SETUP
-#line 563 "maplexer.l"
+#line 570 "maplexer.l"
 {
                                                  msyytext++;
                                                  msyytext[strlen(msyytext)-1] = '\0';
@@ -4110,9 +4161,9 @@ YY_RULE_SETUP
                                                  return(MS_REGEX);
                                                }
 	YY_BREAK
-case 312:
+case 316:
 YY_RULE_SETUP
-#line 572 "maplexer.l"
+#line 579 "maplexer.l"
 {
                                                  msyytext++;
                                                  msyytext[strlen(msyytext)-1] = '\0';
@@ -4122,9 +4173,9 @@ YY_RULE_SETUP
                                                  return(MS_EXPRESSION);
                                                }
 	YY_BREAK
-case 313:
+case 317:
 YY_RULE_SETUP
-#line 581 "maplexer.l"
+#line 588 "maplexer.l"
 {
                                                  msyystring_return_state = MS_STRING;
                                                  msyystring_begin = msyytext[0]; 
@@ -4133,9 +4184,9 @@ YY_RULE_SETUP
                                                  BEGIN(MSSTRING);
                                               }
 	YY_BREAK
-case 314:
+case 318:
 YY_RULE_SETUP
-#line 589 "maplexer.l"
+#line 596 "maplexer.l"
 {
                                                 MS_LEXER_STRING_REALLOC(msyystring_buffer, msyystring_size, 
                                                                                            msyystring_buffer_size, msyystring_buffer_ptr);
@@ -4166,9 +4217,9 @@ YY_RULE_SETUP
                                                 }
                                               }
 	YY_BREAK
-case 315:
+case 319:
 YY_RULE_SETUP
-#line 619 "maplexer.l"
+#line 626 "maplexer.l"
 { 
                                                 MS_LEXER_STRING_REALLOC(msyystring_buffer, msyystring_size, 
                                                                                            msyystring_buffer_size, msyystring_buffer_ptr);
@@ -4180,10 +4231,10 @@ YY_RULE_SETUP
                                                     *msyystring_buffer_ptr++ = msyytext[0];
                                              }
 	YY_BREAK
-case 316:
-/* rule 316 can match eol */
+case 320:
+/* rule 320 can match eol */
 YY_RULE_SETUP
-#line 630 "maplexer.l"
+#line 637 "maplexer.l"
 {
                                                  char *yptr = msyytext;
                                                  while ( *yptr ) { 
@@ -4194,10 +4245,10 @@ YY_RULE_SETUP
                                                  }
                                              }
 	YY_BREAK
-case 317:
-/* rule 317 can match eol */
+case 321:
+/* rule 321 can match eol */
 YY_RULE_SETUP
-#line 640 "maplexer.l"
+#line 647 "maplexer.l"
 {
                                                  msyytext++;
                                                  msyytext[strlen(msyytext)-1] = '\0';
@@ -4223,9 +4274,9 @@ YY_RULE_SETUP
                                                  BEGIN(INITIAL);
                                                }
 	YY_BREAK
-case 318:
+case 322:
 YY_RULE_SETUP
-#line 665 "maplexer.l"
+#line 672 "maplexer.l"
 {
                                                  msyystring_return_state = MS_TOKEN_LITERAL_STRING;
                                                  msyystring_begin = msyytext[0]; 
@@ -4234,9 +4285,9 @@ YY_RULE_SETUP
                                                  BEGIN(MSSTRING);
                                               }
 	YY_BREAK
-case 319:
+case 323:
 YY_RULE_SETUP
-#line 673 "maplexer.l"
+#line 680 "maplexer.l"
 { 
                                                     MS_LEXER_STRING_REALLOC(msyystring_buffer, strlen(msyytext), 
                                                                             msyystring_buffer_size, msyystring_buffer_ptr);
@@ -4244,14 +4295,14 @@ YY_RULE_SETUP
                                                     return(MS_STRING); 
                                                 }
 	YY_BREAK
-case 320:
-/* rule 320 can match eol */
+case 324:
+/* rule 324 can match eol */
 YY_RULE_SETUP
-#line 680 "maplexer.l"
+#line 687 "maplexer.l"
 { msyylineno++; }
 	YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 682 "maplexer.l"
+#line 689 "maplexer.l"
 {
                                                   if( --include_stack_ptr < 0 )
                                                     return(EOF); /* end of main file */
@@ -4263,17 +4314,17 @@ case YY_STATE_EOF(INITIAL):
                                                   }
                                                 }
 	YY_BREAK
-case 321:
-/* rule 321 can match eol */
+case 325:
+/* rule 325 can match eol */
 YY_RULE_SETUP
-#line 693 "maplexer.l"
+#line 700 "maplexer.l"
 {
   return(0); 
 }
 	YY_BREAK
-case 322:
+case 326:
 YY_RULE_SETUP
-#line 697 "maplexer.l"
+#line 704 "maplexer.l"
 { 
                                                   MS_LEXER_STRING_REALLOC(msyystring_buffer, strlen(msyytext), 
                                                                           msyystring_buffer_size, msyystring_buffer_ptr);
@@ -4281,17 +4332,17 @@ YY_RULE_SETUP
                                                   return(0); 
                                                 }
 	YY_BREAK
-case 323:
+case 327:
 YY_RULE_SETUP
-#line 703 "maplexer.l"
+#line 710 "maplexer.l"
 { return(msyytext[0]); }
 	YY_BREAK
-case 324:
+case 328:
 YY_RULE_SETUP
-#line 704 "maplexer.l"
+#line 711 "maplexer.l"
 ECHO;
 	YY_BREAK
-#line 4295 "maplexer.c"
+#line 4346 "maplexer.c"
 case YY_STATE_EOF(URL_VARIABLE):
 case YY_STATE_EOF(URL_STRING):
 case YY_STATE_EOF(EXPRESSION_STRING):
@@ -4587,7 +4638,7 @@ static int yy_get_next_buffer (void)
 		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 >= 1863 )
+			if ( yy_current_state >= 1895 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -4615,11 +4666,11 @@ static int yy_get_next_buffer (void)
 	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 >= 1863 )
+		if ( yy_current_state >= 1895 )
 			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 == 1862);
+	yy_is_jam = (yy_current_state == 1894);
 
 	return yy_is_jam ? 0 : yy_current_state;
 }
@@ -5293,7 +5344,7 @@ void msyyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 704 "maplexer.l"
+#line 711 "maplexer.l"
 
 
 
diff --git a/maplexer.l b/maplexer.l
index 26a5ac4..9d4264e 100644
--- a/maplexer.l
+++ b/maplexer.l
@@ -185,6 +185,9 @@ char path[MS_MAXPATHLEN];
 
 <EXPRESSION_STRING>buffer                      { MS_LEXER_RETURN_TOKEN(MS_TOKEN_FUNCTION_BUFFER); }
 <EXPRESSION_STRING>difference                  { MS_LEXER_RETURN_TOKEN(MS_TOKEN_FUNCTION_DIFFERENCE); }
+<EXPRESSION_STRING>simplify                    { MS_LEXER_RETURN_TOKEN(MS_TOKEN_FUNCTION_SIMPLIFY); }
+<EXPRESSION_STRING>simplifypt                  { MS_LEXER_RETURN_TOKEN(MS_TOKEN_FUNCTION_SIMPLIFYPT); }
+<EXPRESSION_STRING>generalize                  { MS_LEXER_RETURN_TOKEN(MS_TOKEN_FUNCTION_GENERALIZE); }
 
 <EXPRESSION_STRING>intersects                  { MS_LEXER_RETURN_TOKEN(MS_TOKEN_COMPARISON_INTERSECTS); }
 <EXPRESSION_STRING>disjoint                    { MS_LEXER_RETURN_TOKEN(MS_TOKEN_COMPARISON_DISJOINT); }
@@ -498,6 +501,10 @@ char path[MS_MAXPATHLEN];
   /* attribute binding - shape (fixed value) */
   return(MS_TOKEN_BINDING_SHAPE);
 }
+<EXPRESSION_STRING>\[map_cellsize\] { 
+  /* attribute binding - cellsize */
+  return(MS_TOKEN_BINDING_MAP_CELLSIZE);
+}
 <EXPRESSION_STRING>\[[^\]]*\] {
   /* attribute binding - numeric (no quotes) */
   msyytext++;
diff --git a/mapparser.c b/mapparser.c
index 9c1df10..34cf2c5 100644
--- a/mapparser.c
+++ b/mapparser.c
@@ -1,24 +1,21 @@
-/* A Bison parser, made by GNU Bison 2.3.  */
+/* A Bison parser, made by GNU Bison 2.5.  */
 
-/* Skeleton implementation for Bison's Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify
+/* Bison implementation for Yacc-like parsers in C
+   
+      Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
+   
+   This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    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., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* As a special exception, you may create a larger work that contains
    part or all of the Bison parser skeleton and distribute that work
@@ -29,7 +26,7 @@
    special exception, which will cause the skeleton and the resulting
    Bison output files to be licensed under the GNU General Public
    License without this special exception.
-
+   
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
@@ -47,7 +44,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.3"
+#define YYBISON_VERSION "2.5"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -55,11 +52,61 @@
 /* Pure parsers.  */
 #define YYPURE 1
 
+/* Push parsers.  */
+#define YYPUSH 0
+
+/* Pull parsers.  */
+#define YYPULL 1
+
 /* Using locations.  */
 #define YYLSP_NEEDED 0
 
 
 
+/* Copy the first part of user declarations.  */
+
+/* Line 268 of yacc.c  */
+#line 5 "mapparser.y"
+
+/* C declarations */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <time.h>
+
+#include "mapserver.h" /* for TRUE/FALSE and REGEX includes */
+#include "maptime.h" /* for time comparison routines */
+#include "mapprimitive.h" /* for shapeObj */
+
+#include "mapparser.h" /* for YYSTYPE in the function prototype for yylex() */
+
+int yylex(YYSTYPE *, parseObj *); /* prototype functions, defined after the grammar */
+int yyerror(parseObj *, const char *);
+
+
+/* Line 268 of yacc.c  */
+#line 90 "mapparser.c"
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+
 /* Tokens.  */
 #ifndef YYTOKENTYPE
 # define YYTOKENTYPE
@@ -97,9 +144,12 @@
      LENGTH = 286,
      AREA = 287,
      TOSTRING = 288,
-     DIFFERENCE = 289,
-     YYBUFFER = 290,
-     NEG = 291
+     GENERALIZE = 289,
+     SIMPLIFYPT = 290,
+     SIMPLIFY = 291,
+     DIFFERENCE = 292,
+     YYBUFFER = 293,
+     NEG = 294
    };
 #endif
 /* Tokens.  */
@@ -134,76 +184,45 @@
 #define LENGTH 286
 #define AREA 287
 #define TOSTRING 288
-#define DIFFERENCE 289
-#define YYBUFFER 290
-#define NEG 291
-
-
-
-
-/* Copy the first part of user declarations.  */
-#line 5 "mapparser.y"
-
-/* C declarations */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <time.h>
+#define GENERALIZE 289
+#define SIMPLIFYPT 290
+#define SIMPLIFY 291
+#define DIFFERENCE 292
+#define YYBUFFER 293
+#define NEG 294
 
-#include "mapserver.h" /* for TRUE/FALSE and REGEX includes */
-#include "maptime.h" /* for time comparison routines */
-#include "mapprimitive.h" /* for shapeObj */
-
-#include "mapparser.h" /* for YYSTYPE in the function prototype for yylex() */
 
-int yylex(YYSTYPE *, parseObj *); /* prototype functions, defined after the grammar */
-int yyerror(parseObj *, const char *);
-
-
-/* Enabling traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
 
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-/* Enabling the token table.  */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
-#endif
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 30 "mapparser.y"
 {
+
+/* Line 293 of yacc.c  */
+#line 30 "mapparser.y"
+
   double dblval;
   int intval;  
   char *strval;  
   struct tm tmval;
   shapeObj *shpval;
-}
-/* Line 193 of yacc.c.  */
-#line 194 "mapparser.c"
-	YYSTYPE;
+
+
+
+/* Line 293 of yacc.c  */
+#line 214 "mapparser.c"
+} YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
 #endif
 
 
-
 /* Copy the second part of user declarations.  */
 
 
-/* Line 216 of yacc.c.  */
-#line 207 "mapparser.c"
+/* Line 343 of yacc.c  */
+#line 226 "mapparser.c"
 
 #ifdef short
 # undef short
@@ -278,14 +297,14 @@ typedef short int yytype_int16;
 #if (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 static int
-YYID (int i)
+YYID (int yyi)
 #else
 static int
-YYID (i)
-    int i;
+YYID (yyi)
+    int yyi;
 #endif
 {
-  return i;
+  return yyi;
 }
 #endif
 
@@ -306,11 +325,11 @@ YYID (i)
 #    define alloca _alloca
 #   else
 #    define YYSTACK_ALLOC alloca
-#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#     ifndef _STDLIB_H
-#      define _STDLIB_H 1
+#     ifndef EXIT_SUCCESS
+#      define EXIT_SUCCESS 0
 #     endif
 #    endif
 #   endif
@@ -333,24 +352,24 @@ YYID (i)
 #  ifndef YYSTACK_ALLOC_MAXIMUM
 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
 #  endif
-#  if (defined __cplusplus && ! defined _STDLIB_H \
+#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
        && ! ((defined YYMALLOC || defined malloc) \
 	     && (defined YYFREE || defined free)))
 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   ifndef _STDLIB_H
-#    define _STDLIB_H 1
+#   ifndef EXIT_SUCCESS
+#    define EXIT_SUCCESS 0
 #   endif
 #  endif
 #  ifndef YYMALLOC
 #   define YYMALLOC malloc
-#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+#   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
 #  ifndef YYFREE
 #   define YYFREE free
-#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+#   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 void free (void *); /* INFRINGES ON USER NAME SPACE */
 #   endif
@@ -366,9 +385,9 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */
 /* A type that is properly aligned for any stack member.  */
 union yyalloc
 {
-  yytype_int16 yyss;
-  YYSTYPE yyvs;
-  };
+  yytype_int16 yyss_alloc;
+  YYSTYPE yyvs_alloc;
+};
 
 /* The size of the maximum gap between one aligned stack and the next.  */
 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
@@ -379,6 +398,27 @@ union yyalloc
      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
       + YYSTACK_GAP_MAXIMUM)
 
+# define YYCOPY_NEEDED 1
+
+/* Relocate STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Stack_alloc, Stack)				\
+    do									\
+      {									\
+	YYSIZE_T yynewbytes;						\
+	YYCOPY (&yyptr->Stack_alloc, Stack, yysize);			\
+	Stack = &yyptr->Stack_alloc;					\
+	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+	yyptr += yynewbytes / sizeof (*yyptr);				\
+      }									\
+    while (YYID (0))
+
+#endif
+
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
 /* Copy COUNT objects from FROM to TO.  The source and destination do
    not overlap.  */
 # ifndef YYCOPY
@@ -396,42 +436,25 @@ union yyalloc
       while (YYID (0))
 #  endif
 # endif
-
-/* Relocate STACK from its old location to the new one.  The
-   local variables YYSIZE and YYSTACKSIZE give the old and new number of
-   elements in the stack, and YYPTR gives the new location of the
-   stack.  Advance YYPTR to a properly aligned location for the next
-   stack.  */
-# define YYSTACK_RELOCATE(Stack)					\
-    do									\
-      {									\
-	YYSIZE_T yynewbytes;						\
-	YYCOPY (&yyptr->Stack, Stack, yysize);				\
-	Stack = &yyptr->Stack;						\
-	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-	yyptr += yynewbytes / sizeof (*yyptr);				\
-      }									\
-    while (YYID (0))
-
-#endif
+#endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  39
+#define YYFINAL  45
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   362
+#define YYLAST   381
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  46
+#define YYNTOKENS  49
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  7
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  75
+#define YYNRULES  78
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  170
+#define YYNSTATES  188
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   291
+#define YYMAXUTOK   294
 
 #define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -442,13 +465,13 @@ static const yytype_uint8 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,    40,     2,     2,
-      43,    44,    38,    36,    45,    37,     2,    39,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,    43,     2,     2,
+      46,    47,    41,    39,    48,    40,     2,    42,     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,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,    42,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,    45,     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,
@@ -468,7 +491,7 @@ static const yytype_uint8 yytranslate[] =
        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,    41
+      35,    36,    37,    38,    44
 };
 
 #if YYDEBUG
@@ -483,42 +506,44 @@ static const yytype_uint16 yyprhs[] =
      142,   146,   150,   154,   158,   162,   166,   170,   174,   178,
      182,   186,   190,   194,   196,   200,   204,   208,   212,   216,
      220,   223,   227,   232,   237,   244,   246,   250,   257,   264,
-     266,   270,   274,   281,   286,   288
+     271,   278,   285,   287,   291,   295,   302,   307,   309
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int8 yyrhs[] =
 {
-      47,     0,    -1,    -1,    48,    -1,    49,    -1,    51,    -1,
-      50,    -1,    48,     7,    48,    -1,    48,     8,    48,    -1,
-      48,     7,    49,    -1,    48,     8,    49,    -1,    49,     7,
-      48,    -1,    49,     8,    48,    -1,    49,     7,    49,    -1,
-      49,     8,    49,    -1,     9,    48,    -1,     9,    49,    -1,
-      51,    19,    51,    -1,    51,    10,    51,    -1,    49,    18,
-      49,    -1,    49,    17,    49,    -1,    49,    15,    49,    -1,
-      49,    16,    49,    -1,    49,    13,    49,    -1,    49,    14,
-      49,    -1,    43,    48,    44,    -1,    51,    18,    51,    -1,
-      51,    17,    51,    -1,    51,    15,    51,    -1,    51,    16,
-      51,    -1,    51,    13,    51,    -1,    51,    14,    51,    -1,
-      52,    18,    52,    -1,    52,    17,    52,    -1,    52,    15,
-      52,    -1,    52,    16,    52,    -1,    52,    13,    52,    -1,
-      52,    14,    52,    -1,    51,    12,    51,    -1,    49,    12,
-      51,    -1,    49,    11,    49,    -1,    51,    11,    51,    -1,
-      52,    11,    52,    -1,    50,    18,    50,    -1,    50,    28,
-      50,    -1,    50,    27,    50,    -1,    50,    26,    50,    -1,
-      50,    25,    50,    -1,    50,    24,    50,    -1,    50,    23,
-      50,    -1,    50,    22,    50,    -1,    50,    20,    50,    -1,
-      50,    21,    50,    -1,     3,    -1,    43,    49,    44,    -1,
-      49,    36,    49,    -1,    49,    37,    49,    -1,    49,    38,
-      49,    -1,    49,    40,    49,    -1,    49,    39,    49,    -1,
-      37,    49,    -1,    49,    42,    49,    -1,    31,    43,    51,
-      44,    -1,    32,    43,    50,    44,    -1,    29,    43,    49,
-      45,    49,    44,    -1,     6,    -1,    43,    50,    44,    -1,
-      35,    43,    50,    45,    49,    44,    -1,    34,    43,    50,
-      45,    50,    44,    -1,     4,    -1,    43,    51,    44,    -1,
-      51,    36,    51,    -1,    33,    43,    49,    45,    51,    44,
-      -1,    30,    43,    51,    44,    -1,     5,    -1,    43,    52,
-      44,    -1
+      50,     0,    -1,    -1,    51,    -1,    52,    -1,    54,    -1,
+      53,    -1,    51,     7,    51,    -1,    51,     8,    51,    -1,
+      51,     7,    52,    -1,    51,     8,    52,    -1,    52,     7,
+      51,    -1,    52,     8,    51,    -1,    52,     7,    52,    -1,
+      52,     8,    52,    -1,     9,    51,    -1,     9,    52,    -1,
+      54,    19,    54,    -1,    54,    10,    54,    -1,    52,    18,
+      52,    -1,    52,    17,    52,    -1,    52,    15,    52,    -1,
+      52,    16,    52,    -1,    52,    13,    52,    -1,    52,    14,
+      52,    -1,    46,    51,    47,    -1,    54,    18,    54,    -1,
+      54,    17,    54,    -1,    54,    15,    54,    -1,    54,    16,
+      54,    -1,    54,    13,    54,    -1,    54,    14,    54,    -1,
+      55,    18,    55,    -1,    55,    17,    55,    -1,    55,    15,
+      55,    -1,    55,    16,    55,    -1,    55,    13,    55,    -1,
+      55,    14,    55,    -1,    54,    12,    54,    -1,    52,    12,
+      54,    -1,    52,    11,    52,    -1,    54,    11,    54,    -1,
+      55,    11,    55,    -1,    53,    18,    53,    -1,    53,    28,
+      53,    -1,    53,    27,    53,    -1,    53,    26,    53,    -1,
+      53,    25,    53,    -1,    53,    24,    53,    -1,    53,    23,
+      53,    -1,    53,    22,    53,    -1,    53,    20,    53,    -1,
+      53,    21,    53,    -1,     3,    -1,    46,    52,    47,    -1,
+      52,    39,    52,    -1,    52,    40,    52,    -1,    52,    41,
+      52,    -1,    52,    43,    52,    -1,    52,    42,    52,    -1,
+      40,    52,    -1,    52,    45,    52,    -1,    31,    46,    54,
+      47,    -1,    32,    46,    53,    47,    -1,    29,    46,    52,
+      48,    52,    47,    -1,     6,    -1,    46,    53,    47,    -1,
+      38,    46,    53,    48,    52,    47,    -1,    37,    46,    53,
+      48,    53,    47,    -1,    36,    46,    53,    48,    52,    47,
+      -1,    35,    46,    53,    48,    52,    47,    -1,    34,    46,
+      53,    48,    52,    47,    -1,     4,    -1,    46,    54,    47,
+      -1,    54,    39,    54,    -1,    33,    46,    52,    48,    54,
+      47,    -1,    30,    46,    54,    47,    -1,     5,    -1,    46,
+      55,    47,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -530,8 +555,8 @@ static const yytype_uint16 yyrline[] =
      287,   295,   303,   309,   315,   321,   327,   333,   339,   360,
      381,   387,   395,   402,   413,   424,   435,   446,   457,   468,
      479,   490,   500,   512,   513,   514,   515,   516,   517,   518,
-     525,   526,   527,   528,   536,   539,   540,   541,   551,   563,
-     564,   565,   569,   573,   579,   580
+     525,   526,   527,   528,   536,   539,   540,   541,   551,   561,
+     571,   581,   593,   594,   595,   599,   603,   609,   610
 };
 #endif
 
@@ -544,10 +569,10 @@ static const char *const yytname[] =
   "OR", "AND", "NOT", "IRE", "IEQ", "IN", "GE", "LE", "GT", "LT", "NE",
   "EQ", "RE", "DWITHIN", "BEYOND", "CONTAINS", "WITHIN", "CROSSES",
   "OVERLAPS", "TOUCHES", "DISJOINT", "INTERSECTS", "ROUND", "COMMIFY",
-  "LENGTH", "AREA", "TOSTRING", "DIFFERENCE", "YYBUFFER", "'+'", "'-'",
-  "'*'", "'/'", "'%'", "NEG", "'^'", "'('", "')'", "','", "$accept",
-  "input", "logical_exp", "math_exp", "shape_exp", "string_exp",
-  "time_exp", 0
+  "LENGTH", "AREA", "TOSTRING", "GENERALIZE", "SIMPLIFYPT", "SIMPLIFY",
+  "DIFFERENCE", "YYBUFFER", "'+'", "'-'", "'*'", "'/'", "'%'", "NEG",
+  "'^'", "'('", "')'", "','", "$accept", "input", "logical_exp",
+  "math_exp", "shape_exp", "string_exp", "time_exp", 0
 };
 #endif
 
@@ -559,22 +584,22 @@ static const yytype_uint16 yytoknum[] =
        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,    43,    45,    42,    47,
-      37,   291,    94,    40,    41,    44
+     285,   286,   287,   288,   289,   290,   291,   292,   293,    43,
+      45,    42,    47,    37,   294,    94,    40,    41,    44
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    46,    47,    47,    47,    47,    47,    48,    48,    48,
-      48,    48,    48,    48,    48,    48,    48,    48,    48,    48,
-      48,    48,    48,    48,    48,    48,    48,    48,    48,    48,
-      48,    48,    48,    48,    48,    48,    48,    48,    48,    48,
-      48,    48,    48,    48,    48,    48,    48,    48,    48,    48,
-      48,    48,    48,    49,    49,    49,    49,    49,    49,    49,
-      49,    49,    49,    49,    49,    50,    50,    50,    50,    51,
-      51,    51,    51,    51,    52,    52
+       0,    49,    50,    50,    50,    50,    50,    51,    51,    51,
+      51,    51,    51,    51,    51,    51,    51,    51,    51,    51,
+      51,    51,    51,    51,    51,    51,    51,    51,    51,    51,
+      51,    51,    51,    51,    51,    51,    51,    51,    51,    51,
+      51,    51,    51,    51,    51,    51,    51,    51,    51,    51,
+      51,    51,    51,    52,    52,    52,    52,    52,    52,    52,
+      52,    52,    52,    52,    52,    53,    53,    53,    53,    53,
+      53,    53,    54,    54,    54,    54,    54,    55,    55
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -586,38 +611,40 @@ static const yytype_uint8 yyr2[] =
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
        3,     3,     3,     1,     3,     3,     3,     3,     3,     3,
-       2,     3,     4,     4,     6,     1,     3,     6,     6,     1,
-       3,     3,     6,     4,     1,     3
+       2,     3,     4,     4,     6,     1,     3,     6,     6,     6,
+       6,     6,     1,     3,     3,     6,     4,     1,     3
 };
 
-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
-   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+   Performed when YYTABLE doesn't specify something else to do.  Zero
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       2,    53,    69,    74,    65,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     3,     4,     6,     5,
-       0,    15,    16,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    60,     0,     0,     0,     0,     0,     1,
+       2,    53,    72,    77,    65,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     3,
+       4,     6,     5,     0,    15,    16,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    60,
+       0,     0,     0,     0,     0,     1,     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,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    25,    54,    66,    70,
-      75,     7,     9,     8,    10,    11,    13,    12,    14,    40,
-      39,    23,    24,    21,    22,    20,    19,    55,    56,    57,
-      59,    58,    61,    43,    51,    52,    50,    49,    48,    47,
-      46,    45,    44,    18,    41,    38,    30,    31,    28,    29,
-      27,    26,    17,    71,     0,    42,    36,    37,    34,    35,
-      33,    32,     0,     0,    73,    62,     0,    63,     0,     0,
-       0,     0,     0,     0,     0,     0,    64,    72,    68,    67
+       0,     0,     0,     0,     0,    25,    54,    66,    73,    78,
+       7,     9,     8,    10,    11,    13,    12,    14,    40,    39,
+      23,    24,    21,    22,    20,    19,    55,    56,    57,    59,
+      58,    61,    43,    51,    52,    50,    49,    48,    47,    46,
+      45,    44,    18,    41,    38,    30,    31,    28,    29,    27,
+      26,    17,    74,     0,    42,    36,    37,    34,    35,    33,
+      32,     0,     0,    76,    62,     0,    63,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    64,    75,    71,    70,    69,    68,    67
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int8 yydefgoto[] =
 {
-      -1,    15,    16,    17,    23,    24,    20
+      -1,    18,    19,    20,    26,    27,    23
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
@@ -625,116 +652,127 @@ static const yytype_int8 yydefgoto[] =
 #define YYPACT_NINF -40
 static const yytype_int16 yypact[] =
 {
-       7,   -40,   -40,   -40,   -40,     7,   -39,   -38,   -28,    -8,
-       4,     5,     9,    68,     7,     8,    -5,   192,   298,   281,
-     171,   -40,   248,   298,   281,    68,    13,    13,   106,    68,
-     106,   106,    68,    12,    11,   154,   283,   239,   139,   -40,
-       7,     7,     7,     7,    68,    13,    68,    68,    68,    68,
-      68,    68,    68,    68,    68,    68,    68,    68,   106,   106,
-     106,   106,   106,   106,   106,   106,   106,   106,    13,    13,
-      13,    13,    13,    13,    13,    13,    13,    13,    13,     2,
-       2,     2,     2,     2,     2,     2,   231,    13,   -35,   -10,
-     106,    29,   292,    40,    42,   -15,   -40,   -40,   -40,   -40,
-     -40,    45,   206,   -40,   248,    45,   206,   -40,   248,   320,
-      21,   320,   320,   320,   320,   320,   320,    30,    30,    12,
-      12,    12,    12,   -40,   -40,   -40,   -40,   -40,   -40,   -40,
-     -40,   -40,   -40,    21,    21,    21,    21,    21,    21,    21,
-      21,    21,    21,   -40,     2,   -40,   -40,   -40,   -40,   -40,
-     -40,   -40,    68,    52,   -40,   -40,    47,   -40,    13,   106,
-      68,    48,   302,    65,    54,   311,   -40,   -40,   -40,   -40
+      17,   -40,   -40,   -40,   -40,    17,   -39,   -34,   -32,   -21,
+     -14,    -7,    -6,    -5,    14,    15,   117,    17,    75,    21,
+     173,   306,   286,   218,   -40,   250,   306,   286,   117,    54,
+      54,    56,   117,    56,    56,    56,    56,    56,   117,    50,
+      97,   161,   288,   241,   181,   -40,    17,    17,    17,    17,
+     117,    54,   117,   117,   117,   117,   117,   117,   117,   117,
+     117,   117,   117,   117,    56,    56,    56,    56,    56,    56,
+      56,    56,    56,    56,    54,    54,    54,    54,    54,    54,
+      54,    54,    54,    54,    54,    10,    10,    10,    10,    10,
+      10,    10,   -37,    54,   -29,   -23,    56,    51,   119,    55,
+      58,    60,    61,    63,   180,   -40,   -40,   -40,   -40,   -40,
+      91,   232,   -40,   250,    91,   232,   -40,   250,   242,    73,
+     242,   242,   242,   242,   242,   242,   276,   276,    50,    50,
+      50,    50,   -40,   -40,   -40,   -40,   -40,   -40,   -40,   -40,
+     -40,   -40,    73,    73,    73,    73,    73,    73,    73,    73,
+      73,    73,   -40,    10,   -40,   -40,   -40,   -40,   -40,   -40,
+     -40,   117,   -20,   -40,   -40,    66,   -40,    54,   117,   117,
+     117,    56,   117,    67,   297,    -9,   307,   316,   325,   100,
+     334,   -40,   -40,   -40,   -40,   -40,   -40,   -40
 };
 
 /* YYPGOTO[NTERM-NUM].  */
-static const yytype_int16 yypgoto[] =
+static const yytype_int8 yypgoto[] =
 {
-     -40,   -40,   134,    81,     0,     6,    35
+     -40,   -40,    -4,    69,     0,    59,    -8
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
-   number is the opposite.  If zero, do what YYDEFACT says.
-   If YYTABLE_NINF, syntax error.  */
+   number is the opposite.  If YYTABLE_NINF, syntax error.  */
 #define YYTABLE_NINF -1
 static const yytype_uint8 yytable[] =
 {
-      18,    78,    40,    41,    25,    26,    19,     3,    39,   154,
-       1,     2,     3,     4,    36,    27,     5,     2,    40,    41,
-      37,    52,    53,    54,    55,    56,    78,    57,    91,    97,
-      93,    94,    88,    89,   155,    28,     6,     7,     8,     9,
-      10,    11,    12,     7,    13,   144,    10,    29,    30,    38,
-      14,   110,    31,    41,    57,    96,    87,    78,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,    54,    55,
-      56,     1,    57,   157,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   159,    22,   160,    78,     0,
-     156,    98,   100,   153,    33,    35,    99,     6,   168,     8,
-       9,    78,     0,     0,     0,    13,    86,     0,     0,   167,
-      92,    32,     4,    95,   145,   146,   147,   148,   149,   150,
-     151,   102,   104,   106,   108,   109,     0,   111,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,    21,
-      11,    12,     0,     0,     0,     0,     0,     0,    34,    90,
-      79,     0,    80,    81,    82,    83,    84,    85,     0,   164,
-       0,    42,    43,     0,   163,    44,    45,    46,    47,    48,
-      49,    50,    51,     0,   101,   103,   105,   107,     0,   161,
-       0,     0,    79,   100,    80,    81,    82,    83,    84,    85,
-      52,    53,    54,    55,    56,     0,    57,     0,    97,    42,
-      43,     0,     0,    44,    45,    46,    47,    48,    49,    50,
-      51,     0,     0,     0,    43,     0,     0,    44,    45,    46,
-      47,    48,    49,    50,    51,     0,     0,     0,    52,    53,
-      54,    55,    56,   162,    57,     0,     0,     0,     0,     0,
-       0,   165,    52,    53,    54,    55,    56,     0,    57,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,     0,    57,     0,    78,   152,     0,     0,     0,
-       0,     0,     0,    99,    52,    53,    54,    55,    56,     0,
-      57,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    58,     0,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,     0,     0,     0,     0,    58,    78,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    98,    52,    53,
-      54,    55,    56,     0,    57,     0,     0,   158,    52,    53,
-      54,    55,    56,     0,    57,     0,   166,    52,    53,    54,
-      55,    56,     0,    57,     0,   169,    52,    53,    54,    55,
-      56,     0,    57
+      21,    24,    58,    59,    60,    61,    62,    28,    63,    44,
+      84,   161,    29,    40,    30,     3,    84,    42,   163,    84,
+       1,     2,     3,     4,   164,    31,     5,   108,    46,    47,
+      84,    97,    32,    99,   100,   101,   102,   103,   182,    33,
+      34,    35,   110,   112,   114,   116,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,   153,    16,     2,    22,
+      36,    37,     4,    17,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,    25,    45,    43,   154,   155,   156,
+     157,   158,   159,   160,     7,    39,    41,    10,    94,    95,
+      11,    12,    13,    14,    15,    63,   165,    92,   166,    47,
+      93,    98,    96,   168,    46,    47,   169,   104,   170,   171,
+     119,   172,    84,   107,   109,   111,   113,   115,   117,   118,
+       1,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   105,   173,     6,   186,     8,     9,
+       0,     0,   162,     0,     0,     0,     0,    16,    58,    59,
+      60,    61,    62,    38,    63,     0,     0,   167,    48,    49,
+       0,   179,    50,    51,    52,    53,    54,    55,    56,    57,
+      48,    49,     0,     0,    50,    51,    52,    53,    54,    55,
+      56,    57,    85,     0,    86,    87,    88,    89,    90,    91,
+      58,    59,    60,    61,    62,     0,    63,     0,   106,     0,
+       0,     0,    58,    59,    60,    61,    62,     0,    63,    58,
+      59,    60,    61,    62,     0,    63,   175,   106,   109,    85,
+     174,    86,    87,    88,    89,    90,    91,   176,   177,   178,
+      49,   180,     0,    50,    51,    52,    53,    54,    55,    56,
+      57,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    50,    51,    52,    53,    54,    55,    56,    57,     0,
+       0,    58,    59,    60,    61,    62,     0,    63,     0,     0,
+      84,    58,    59,    60,    61,    62,     0,    63,   108,    58,
+      59,    60,    61,    62,     0,    63,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    64,     0,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    60,    61,    62,
+       0,    63,     0,     0,    64,    84,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,   107,    58,    59,    60,    61,
+      62,     0,    63,     0,   181,     0,    58,    59,    60,    61,
+      62,     0,    63,     0,   183,    58,    59,    60,    61,    62,
+       0,    63,     0,   184,    58,    59,    60,    61,    62,     0,
+      63,     0,   185,    58,    59,    60,    61,    62,     0,    63,
+       0,   187
 };
 
+#define yypact_value_is_default(yystate) \
+  ((yystate) == (-40))
+
+#define yytable_value_is_error(yytable_value) \
+  YYID (0)
+
 static const yytype_int16 yycheck[] =
 {
-       0,    36,     7,     8,    43,    43,     0,     5,     0,    44,
-       3,     4,     5,     6,    14,    43,     9,     4,     7,     8,
-      14,    36,    37,    38,    39,    40,    36,    42,    28,    44,
-      30,    31,    26,    27,    44,    43,    29,    30,    31,    32,
-      33,    34,    35,    30,    37,    43,    33,    43,    43,    14,
-      43,    45,    43,     8,    42,    44,    43,    36,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    38,    39,
-      40,     3,    42,    44,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    45,     5,    45,    36,    -1,
-      90,    44,    44,    87,    13,    14,    44,    29,    44,    31,
-      32,    36,    -1,    -1,    -1,    37,    25,    -1,    -1,    44,
-      29,    43,     6,    32,    79,    80,    81,    82,    83,    84,
-      85,    40,    41,    42,    43,    44,    -1,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,     5,
-      34,    35,    -1,    -1,    -1,    -1,    -1,    -1,    14,    43,
-      11,    -1,    13,    14,    15,    16,    17,    18,    -1,   159,
-      -1,     7,     8,    -1,   158,    11,    12,    13,    14,    15,
-      16,    17,    18,    -1,    40,    41,    42,    43,    -1,   144,
-      -1,    -1,    11,    44,    13,    14,    15,    16,    17,    18,
-      36,    37,    38,    39,    40,    -1,    42,    -1,    44,     7,
-       8,    -1,    -1,    11,    12,    13,    14,    15,    16,    17,
-      18,    -1,    -1,    -1,     8,    -1,    -1,    11,    12,    13,
-      14,    15,    16,    17,    18,    -1,    -1,    -1,    36,    37,
-      38,    39,    40,   152,    42,    -1,    -1,    -1,    -1,    -1,
-      -1,   160,    36,    37,    38,    39,    40,    -1,    42,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    11,
-      12,    13,    14,    15,    16,    17,    18,    36,    37,    38,
-      39,    40,    -1,    42,    -1,    36,    45,    -1,    -1,    -1,
-      -1,    -1,    -1,    44,    36,    37,    38,    39,    40,    -1,
-      42,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    18,    -1,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    -1,    -1,    -1,    -1,    18,    36,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    44,    36,    37,
-      38,    39,    40,    -1,    42,    -1,    -1,    45,    36,    37,
-      38,    39,    40,    -1,    42,    -1,    44,    36,    37,    38,
-      39,    40,    -1,    42,    -1,    44,    36,    37,    38,    39,
-      40,    -1,    42
+       0,     5,    39,    40,    41,    42,    43,    46,    45,    17,
+      39,    48,    46,    17,    46,     5,    39,    17,    47,    39,
+       3,     4,     5,     6,    47,    46,     9,    47,     7,     8,
+      39,    31,    46,    33,    34,    35,    36,    37,    47,    46,
+      46,    46,    46,    47,    48,    49,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    46,    40,     4,     0,
+      46,    46,     6,    46,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,     5,     0,    17,    85,    86,    87,
+      88,    89,    90,    91,    30,    16,    17,    33,    29,    30,
+      34,    35,    36,    37,    38,    45,    96,    28,    47,     8,
+      46,    32,    46,    48,     7,     8,    48,    38,    48,    48,
+      51,    48,    39,    47,    47,    46,    47,    48,    49,    50,
+       3,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    47,   153,    29,    47,    31,    32,
+      -1,    -1,    93,    -1,    -1,    -1,    -1,    40,    39,    40,
+      41,    42,    43,    46,    45,    -1,    -1,    48,     7,     8,
+      -1,   171,    11,    12,    13,    14,    15,    16,    17,    18,
+       7,     8,    -1,    -1,    11,    12,    13,    14,    15,    16,
+      17,    18,    11,    -1,    13,    14,    15,    16,    17,    18,
+      39,    40,    41,    42,    43,    -1,    45,    -1,    47,    -1,
+      -1,    -1,    39,    40,    41,    42,    43,    -1,    45,    39,
+      40,    41,    42,    43,    -1,    45,   167,    47,    47,    11,
+     161,    13,    14,    15,    16,    17,    18,   168,   169,   170,
+       8,   172,    -1,    11,    12,    13,    14,    15,    16,    17,
+      18,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    11,    12,    13,    14,    15,    16,    17,    18,    -1,
+      -1,    39,    40,    41,    42,    43,    -1,    45,    -1,    -1,
+      39,    39,    40,    41,    42,    43,    -1,    45,    47,    39,
+      40,    41,    42,    43,    -1,    45,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    18,    -1,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    41,    42,    43,
+      -1,    45,    -1,    -1,    18,    39,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    47,    39,    40,    41,    42,
+      43,    -1,    45,    -1,    47,    -1,    39,    40,    41,    42,
+      43,    -1,    45,    -1,    47,    39,    40,    41,    42,    43,
+      -1,    45,    -1,    47,    39,    40,    41,    42,    43,    -1,
+      45,    -1,    47,    39,    40,    41,    42,    43,    -1,    45,
+      -1,    47
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -742,22 +780,24 @@ static const yytype_int16 yycheck[] =
 static const yytype_uint8 yystos[] =
 {
        0,     3,     4,     5,     6,     9,    29,    30,    31,    32,
-      33,    34,    35,    37,    43,    47,    48,    49,    50,    51,
-      52,    48,    49,    50,    51,    43,    43,    43,    43,    43,
-      43,    43,    43,    49,    48,    49,    50,    51,    52,     0,
-       7,     8,     7,     8,    11,    12,    13,    14,    15,    16,
-      17,    18,    36,    37,    38,    39,    40,    42,    18,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    36,    11,
-      13,    14,    15,    16,    17,    18,    49,    43,    51,    51,
-      43,    50,    49,    50,    50,    49,    44,    44,    44,    44,
-      44,    48,    49,    48,    49,    48,    49,    48,    49,    49,
-      51,    49,    49,    49,    49,    49,    49,    49,    49,    49,
-      49,    49,    49,    50,    50,    50,    50,    50,    50,    50,
-      50,    50,    50,    51,    51,    51,    51,    51,    51,    51,
-      51,    51,    51,    51,    43,    52,    52,    52,    52,    52,
-      52,    52,    45,    51,    44,    44,    50,    44,    45,    45,
-      45,    52,    49,    51,    50,    49,    44,    44,    44,    44
+      33,    34,    35,    36,    37,    38,    40,    46,    50,    51,
+      52,    53,    54,    55,    51,    52,    53,    54,    46,    46,
+      46,    46,    46,    46,    46,    46,    46,    46,    46,    52,
+      51,    52,    53,    54,    55,     0,     7,     8,     7,     8,
+      11,    12,    13,    14,    15,    16,    17,    18,    39,    40,
+      41,    42,    43,    45,    18,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    39,    11,    13,    14,    15,    16,
+      17,    18,    52,    46,    54,    54,    46,    53,    52,    53,
+      53,    53,    53,    53,    52,    47,    47,    47,    47,    47,
+      51,    52,    51,    52,    51,    52,    51,    52,    52,    54,
+      52,    52,    52,    52,    52,    52,    52,    52,    52,    52,
+      52,    52,    53,    53,    53,    53,    53,    53,    53,    53,
+      53,    53,    54,    54,    54,    54,    54,    54,    54,    54,
+      54,    54,    54,    46,    55,    55,    55,    55,    55,    55,
+      55,    48,    54,    47,    47,    53,    47,    48,    48,    48,
+      48,    48,    48,    55,    52,    54,    52,    52,    52,    53,
+      52,    47,    47,    47,    47,    47,    47,    47
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -772,9 +812,18 @@ static const yytype_uint8 yystos[] =
 
 /* Like YYERROR except do call yyerror.  This remains here temporarily
    to ease the transition to the new meaning of YYERROR, for GCC.
-   Once GCC version 2 has supplanted version 1, this can go.  */
+   Once GCC version 2 has supplanted version 1, this can go.  However,
+   YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
+   in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+   discussed.  */
 
 #define YYFAIL		goto yyerrlab
+#if defined YYFAIL
+  /* This is here to suppress warnings from the GCC cpp's
+     -Wunused-macros.  Normally we don't worry about that warning, but
+     some users do, and we want to make it easy for users to remove
+     YYFAIL uses, which will produce warnings from Bison 2.5.  */
+#endif
 
 #define YYRECOVERING()  (!!yyerrstatus)
 
@@ -784,7 +833,6 @@ do								\
     {								\
       yychar = (Token);						\
       yylval = (Value);						\
-      yytoken = YYTRANSLATE (yychar);				\
       YYPOPSTACK (1);						\
       goto yybackup;						\
     }								\
@@ -826,19 +874,10 @@ while (YYID (0))
 #endif
 
 
-/* YY_LOCATION_PRINT -- Print the location on the stream.
-   This macro was not mandated originally: define only if we know
-   we won't break user code: when these are the locations we know.  */
+/* This macro is provided for backward compatibility. */
 
 #ifndef YY_LOCATION_PRINT
-# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
-#  define YY_LOCATION_PRINT(File, Loc)			\
-     fprintf (File, "%d.%d-%d.%d",			\
-	      (Loc).first_line, (Loc).first_column,	\
-	      (Loc).last_line,  (Loc).last_column)
-# else
-#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-# endif
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
 #endif
 
 
@@ -945,17 +984,20 @@ yy_symbol_print (yyoutput, yytype, yyvaluep, p)
 #if (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 static void
-yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
 #else
 static void
-yy_stack_print (bottom, top)
-    yytype_int16 *bottom;
-    yytype_int16 *top;
+yy_stack_print (yybottom, yytop)
+    yytype_int16 *yybottom;
+    yytype_int16 *yytop;
 #endif
 {
   YYFPRINTF (stderr, "Stack now");
-  for (; bottom <= top; ++bottom)
-    YYFPRINTF (stderr, " %d", *bottom);
+  for (; yybottom <= yytop; yybottom++)
+    {
+      int yybot = *yybottom;
+      YYFPRINTF (stderr, " %d", yybot);
+    }
   YYFPRINTF (stderr, "\n");
 }
 
@@ -990,11 +1032,11 @@ yy_reduce_print (yyvsp, yyrule, p)
   /* The symbols being reduced.  */
   for (yyi = 0; yyi < yynrhs; yyi++)
     {
-      fprintf (stderr, "   $%d = ", yyi + 1);
+      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
       yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
 		       &(yyvsp[(yyi + 1) - (yynrhs)])
 		       		       , p);
-      fprintf (stderr, "\n");
+      YYFPRINTF (stderr, "\n");
     }
 }
 
@@ -1031,7 +1073,6 @@ int yydebug;
 # define YYMAXDEPTH 10000
 #endif
 
-
 
 #if YYERROR_VERBOSE
 
@@ -1134,115 +1175,142 @@ yytnamerr (char *yyres, const char *yystr)
 }
 # endif
 
-/* Copy into YYRESULT an error message about the unexpected token
-   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
-   including the terminating null byte.  If YYRESULT is null, do not
-   copy anything; just return the number of bytes that would be
-   copied.  As a special case, return 0 if an ordinary "syntax error"
-   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
-   size calculation.  */
-static YYSIZE_T
-yysyntax_error (char *yyresult, int yystate, int yychar)
-{
-  int yyn = yypact[yystate];
+/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+   about the unexpected token YYTOKEN for the state stack whose top is
+   YYSSP.
 
-  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
-    return 0;
-  else
-    {
-      int yytype = YYTRANSLATE (yychar);
-      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
-      YYSIZE_T yysize = yysize0;
-      YYSIZE_T yysize1;
-      int yysize_overflow = 0;
-      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
-      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-      int yyx;
-
-# if 0
-      /* This is so xgettext sees the translatable formats that are
-	 constructed on the fly.  */
-      YY_("syntax error, unexpected %s");
-      YY_("syntax error, unexpected %s, expecting %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
-# endif
-      char *yyfmt;
-      char const *yyf;
-      static char const yyunexpected[] = "syntax error, unexpected %s";
-      static char const yyexpecting[] = ", expecting %s";
-      static char const yyor[] = " or %s";
-      char yyformat[sizeof yyunexpected
-		    + sizeof yyexpecting - 1
-		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
-		       * (sizeof yyor - 1))];
-      char const *yyprefix = yyexpecting;
-
-      /* Start YYX at -YYN if negative to avoid negative indexes in
-	 YYCHECK.  */
-      int yyxbegin = yyn < 0 ? -yyn : 0;
-
-      /* Stay within bounds of both yycheck and yytname.  */
-      int yychecklim = YYLAST - yyn + 1;
-      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
-      int yycount = 1;
-
-      yyarg[0] = yytname[yytype];
-      yyfmt = yystpcpy (yyformat, yyunexpected);
-
-      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
-	  {
-	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-	      {
-		yycount = 1;
-		yysize = yysize0;
-		yyformat[sizeof yyunexpected - 1] = '\0';
-		break;
-	      }
-	    yyarg[yycount++] = yytname[yyx];
-	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
-	    yysize_overflow |= (yysize1 < yysize);
-	    yysize = yysize1;
-	    yyfmt = yystpcpy (yyfmt, yyprefix);
-	    yyprefix = yyor;
-	  }
+   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
+   not large enough to hold the message.  In that case, also set
+   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
+   required number of bytes is too large to store.  */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+                yytype_int16 *yyssp, int yytoken)
+{
+  YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
+  YYSIZE_T yysize = yysize0;
+  YYSIZE_T yysize1;
+  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+  /* Internationalized format string. */
+  const char *yyformat = 0;
+  /* Arguments of yyformat. */
+  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+  /* Number of reported tokens (one for the "unexpected", one per
+     "expected"). */
+  int yycount = 0;
+
+  /* There are many possibilities here to consider:
+     - Assume YYFAIL is not used.  It's too flawed to consider.  See
+       <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
+       for details.  YYERROR is fine as it does not invoke this
+       function.
+     - If this state is a consistent state with a default action, then
+       the only way this function was invoked is if the default action
+       is an error action.  In that case, don't check for expected
+       tokens because there are none.
+     - The only way there can be no lookahead present (in yychar) is if
+       this state is a consistent state with a default action.  Thus,
+       detecting the absence of a lookahead is sufficient to determine
+       that there is no unexpected or expected token to report.  In that
+       case, just report a simple "syntax error".
+     - Don't assume there isn't a lookahead just because this state is a
+       consistent state with a default action.  There might have been a
+       previous inconsistent state, consistent state with a non-default
+       action, or user semantic action that manipulated yychar.
+     - Of course, the expected token list depends on states to have
+       correct lookahead information, and it depends on the parser not
+       to perform extra reductions after fetching a lookahead from the
+       scanner and before detecting a syntax error.  Thus, state merging
+       (from LALR or IELR) and default reductions corrupt the expected
+       token list.  However, the list is correct for canonical LR with
+       one exception: it will still contain any token that will not be
+       accepted due to an error action in a later state.
+  */
+  if (yytoken != YYEMPTY)
+    {
+      int yyn = yypact[*yyssp];
+      yyarg[yycount++] = yytname[yytoken];
+      if (!yypact_value_is_default (yyn))
+        {
+          /* Start YYX at -YYN if negative to avoid negative indexes in
+             YYCHECK.  In other words, skip the first -YYN actions for
+             this state because they are default actions.  */
+          int yyxbegin = yyn < 0 ? -yyn : 0;
+          /* Stay within bounds of both yycheck and yytname.  */
+          int yychecklim = YYLAST - yyn + 1;
+          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+          int yyx;
+
+          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+                && !yytable_value_is_error (yytable[yyx + yyn]))
+              {
+                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+                  {
+                    yycount = 1;
+                    yysize = yysize0;
+                    break;
+                  }
+                yyarg[yycount++] = yytname[yyx];
+                yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+                if (! (yysize <= yysize1
+                       && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+                  return 2;
+                yysize = yysize1;
+              }
+        }
+    }
 
-      yyf = YY_(yyformat);
-      yysize1 = yysize + yystrlen (yyf);
-      yysize_overflow |= (yysize1 < yysize);
-      yysize = yysize1;
+  switch (yycount)
+    {
+# define YYCASE_(N, S)                      \
+      case N:                               \
+        yyformat = S;                       \
+      break
+      YYCASE_(0, YY_("syntax error"));
+      YYCASE_(1, YY_("syntax error, unexpected %s"));
+      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+# undef YYCASE_
+    }
 
-      if (yysize_overflow)
-	return YYSIZE_MAXIMUM;
+  yysize1 = yysize + yystrlen (yyformat);
+  if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+    return 2;
+  yysize = yysize1;
 
-      if (yyresult)
-	{
-	  /* Avoid sprintf, as that infringes on the user's name space.
-	     Don't have undefined behavior even if the translation
-	     produced a string with the wrong number of "%s"s.  */
-	  char *yyp = yyresult;
-	  int yyi = 0;
-	  while ((*yyp = *yyf) != '\0')
-	    {
-	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
-		{
-		  yyp += yytnamerr (yyp, yyarg[yyi++]);
-		  yyf += 2;
-		}
-	      else
-		{
-		  yyp++;
-		  yyf++;
-		}
-	    }
-	}
-      return yysize;
+  if (*yymsg_alloc < yysize)
+    {
+      *yymsg_alloc = 2 * yysize;
+      if (! (yysize <= *yymsg_alloc
+             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+      return 1;
     }
+
+  /* Avoid sprintf, as that infringes on the user's name space.
+     Don't have undefined behavior even if the translation
+     produced a string with the wrong number of "%s"s.  */
+  {
+    char *yyp = *yymsg;
+    int yyi = 0;
+    while ((*yyp = *yyformat) != '\0')
+      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+        {
+          yyp += yytnamerr (yyp, yyarg[yyi++]);
+          yyformat += 2;
+        }
+      else
+        {
+          yyp++;
+          yyformat++;
+        }
+  }
+  return 0;
 }
 #endif /* YYERROR_VERBOSE */
-
 
 /*-----------------------------------------------.
 | Release the memory associated to this symbol.  |
@@ -1276,10 +1344,9 @@ yydestruct (yymsg, yytype, yyvaluep, p)
 	break;
     }
 }
-
 
-/* Prevent warnings from -Wmissing-prototypes.  */
 
+/* Prevent warnings from -Wmissing-prototypes.  */
 #ifdef YYPARSE_PARAM
 #if defined __STDC__ || defined __cplusplus
 int yyparse (void *YYPARSE_PARAM);
@@ -1295,10 +1362,6 @@ int yyparse ();
 #endif /* ! YYPARSE_PARAM */
 
 
-
-
-
-
 /*----------.
 | yyparse.  |
 `----------*/
@@ -1325,74 +1388,75 @@ yyparse (p)
 #endif
 #endif
 {
-  /* The look-ahead symbol.  */
+/* The lookahead symbol.  */
 int yychar;
 
-/* The semantic value of the look-ahead symbol.  */
+/* The semantic value of the lookahead symbol.  */
 YYSTYPE yylval;
 
-/* Number of syntax errors so far.  */
-int yynerrs;
-
-  int yystate;
-  int yyn;
-  int yyresult;
-  /* Number of tokens to shift before error messages enabled.  */
-  int yyerrstatus;
-  /* Look-ahead token as an internal (translated) token number.  */
-  int yytoken = 0;
-#if YYERROR_VERBOSE
-  /* Buffer for error messages, and its allocated size.  */
-  char yymsgbuf[128];
-  char *yymsg = yymsgbuf;
-  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
-#endif
+    /* Number of syntax errors so far.  */
+    int yynerrs;
 
-  /* Three stacks and their tools:
-     `yyss': related to states,
-     `yyvs': related to semantic values,
-     `yyls': related to locations.
+    int yystate;
+    /* Number of tokens to shift before error messages enabled.  */
+    int yyerrstatus;
 
-     Refer to the stacks thru separate pointers, to allow yyoverflow
-     to reallocate them elsewhere.  */
+    /* The stacks and their tools:
+       `yyss': related to states.
+       `yyvs': related to semantic values.
 
-  /* The state stack.  */
-  yytype_int16 yyssa[YYINITDEPTH];
-  yytype_int16 *yyss = yyssa;
-  yytype_int16 *yyssp;
+       Refer to the stacks thru separate pointers, to allow yyoverflow
+       to reallocate them elsewhere.  */
 
-  /* The semantic value stack.  */
-  YYSTYPE yyvsa[YYINITDEPTH];
-  YYSTYPE *yyvs = yyvsa;
-  YYSTYPE *yyvsp;
+    /* The state stack.  */
+    yytype_int16 yyssa[YYINITDEPTH];
+    yytype_int16 *yyss;
+    yytype_int16 *yyssp;
 
+    /* The semantic value stack.  */
+    YYSTYPE yyvsa[YYINITDEPTH];
+    YYSTYPE *yyvs;
+    YYSTYPE *yyvsp;
 
+    YYSIZE_T yystacksize;
 
-#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
-
-  YYSIZE_T yystacksize = YYINITDEPTH;
-
+  int yyn;
+  int yyresult;
+  /* Lookahead token as an internal (translated) token number.  */
+  int yytoken;
   /* The variables used to return semantic value and location from the
      action routines.  */
   YYSTYPE yyval;
 
+#if YYERROR_VERBOSE
+  /* Buffer for error messages, and its allocated size.  */
+  char yymsgbuf[128];
+  char *yymsg = yymsgbuf;
+  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
 
   /* The number of symbols on the RHS of the reduced rule.
      Keep to zero when no symbol should be popped.  */
   int yylen = 0;
 
+  yytoken = 0;
+  yyss = yyssa;
+  yyvs = yyvsa;
+  yystacksize = YYINITDEPTH;
+
   YYDPRINTF ((stderr, "Starting parse\n"));
 
   yystate = 0;
   yyerrstatus = 0;
   yynerrs = 0;
-  yychar = YYEMPTY;		/* Cause a token to be read.  */
+  yychar = YYEMPTY; /* Cause a token to be read.  */
 
   /* Initialize stack pointers.
      Waste one element of value and location stack
      so that they stay on the same level as the state stack.
      The wasted elements are never initialized.  */
-
   yyssp = yyss;
   yyvsp = yyvs;
 
@@ -1422,7 +1486,6 @@ int yynerrs;
 	YYSTYPE *yyvs1 = yyvs;
 	yytype_int16 *yyss1 = yyss;
 
-
 	/* Each stack pointer address is followed by the size of the
 	   data in use in that stack, in bytes.  This used to be a
 	   conditional around just the two extra args, but that might
@@ -1430,7 +1493,6 @@ int yynerrs;
 	yyoverflow (YY_("memory exhausted"),
 		    &yyss1, yysize * sizeof (*yyssp),
 		    &yyvs1, yysize * sizeof (*yyvsp),
-
 		    &yystacksize);
 
 	yyss = yyss1;
@@ -1453,9 +1515,8 @@ int yynerrs;
 	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
 	if (! yyptr)
 	  goto yyexhaustedlab;
-	YYSTACK_RELOCATE (yyss);
-	YYSTACK_RELOCATE (yyvs);
-
+	YYSTACK_RELOCATE (yyss_alloc, yyss);
+	YYSTACK_RELOCATE (yyvs_alloc, yyvs);
 #  undef YYSTACK_RELOCATE
 	if (yyss1 != yyssa)
 	  YYSTACK_FREE (yyss1);
@@ -1466,7 +1527,6 @@ int yynerrs;
       yyssp = yyss + yysize - 1;
       yyvsp = yyvs + yysize - 1;
 
-
       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
 		  (unsigned long int) yystacksize));
 
@@ -1476,6 +1536,9 @@ int yynerrs;
 
   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
 
+  if (yystate == YYFINAL)
+    YYACCEPT;
+
   goto yybackup;
 
 /*-----------.
@@ -1484,16 +1547,16 @@ int yynerrs;
 yybackup:
 
   /* Do appropriate processing given the current state.  Read a
-     look-ahead token if we need one and don't already have one.  */
+     lookahead token if we need one and don't already have one.  */
 
-  /* First try to decide what to do without reference to look-ahead token.  */
+  /* First try to decide what to do without reference to lookahead token.  */
   yyn = yypact[yystate];
-  if (yyn == YYPACT_NINF)
+  if (yypact_value_is_default (yyn))
     goto yydefault;
 
-  /* Not known => get a look-ahead token if don't already have one.  */
+  /* Not known => get a lookahead token if don't already have one.  */
 
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
   if (yychar == YYEMPTY)
     {
       YYDPRINTF ((stderr, "Reading a token: "));
@@ -1519,26 +1582,22 @@ yybackup:
   yyn = yytable[yyn];
   if (yyn <= 0)
     {
-      if (yyn == 0 || yyn == YYTABLE_NINF)
-	goto yyerrlab;
+      if (yytable_value_is_error (yyn))
+        goto yyerrlab;
       yyn = -yyn;
       goto yyreduce;
     }
 
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
   /* Count tokens shifted since error; after three, turn off error
      status.  */
   if (yyerrstatus)
     yyerrstatus--;
 
-  /* Shift the look-ahead token.  */
+  /* Shift the lookahead token.  */
   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
 
-  /* Discard the shifted token unless it is eof.  */
-  if (yychar != YYEOF)
-    yychar = YYEMPTY;
+  /* Discard the shifted token.  */
+  yychar = YYEMPTY;
 
   yystate = yyn;
   *++yyvsp = yylval;
@@ -1578,6 +1637,8 @@ yyreduce:
   switch (yyn)
     {
         case 3:
+
+/* Line 1806 of yacc.c  */
 #line 66 "mapparser.y"
     {
       switch(p->type) {
@@ -1595,6 +1656,8 @@ yyreduce:
     break;
 
   case 4:
+
+/* Line 1806 of yacc.c  */
 #line 79 "mapparser.y"
     {
       switch(p->type) {
@@ -1613,6 +1676,8 @@ yyreduce:
     break;
 
   case 5:
+
+/* Line 1806 of yacc.c  */
 #line 93 "mapparser.y"
     {
       switch(p->type) {
@@ -1630,6 +1695,8 @@ yyreduce:
     break;
 
   case 6:
+
+/* Line 1806 of yacc.c  */
 #line 106 "mapparser.y"
     {
     switch(p->type) {
@@ -1642,6 +1709,8 @@ yyreduce:
     break;
 
   case 7:
+
+/* Line 1806 of yacc.c  */
 #line 117 "mapparser.y"
     {
 	                                 if((yyvsp[(1) - (3)].intval) == MS_TRUE)
@@ -1654,6 +1723,8 @@ yyreduce:
     break;
 
   case 8:
+
+/* Line 1806 of yacc.c  */
 #line 125 "mapparser.y"
     {
 	                                 if((yyvsp[(1) - (3)].intval) == MS_TRUE) {
@@ -1667,6 +1738,8 @@ yyreduce:
     break;
 
   case 9:
+
+/* Line 1806 of yacc.c  */
 #line 134 "mapparser.y"
     {
 	                                 if((yyvsp[(1) - (3)].intval) == MS_TRUE)
@@ -1679,6 +1752,8 @@ yyreduce:
     break;
 
   case 10:
+
+/* Line 1806 of yacc.c  */
 #line 142 "mapparser.y"
     {
 	                                 if((yyvsp[(1) - (3)].intval) == MS_TRUE) {
@@ -1692,6 +1767,8 @@ yyreduce:
     break;
 
   case 11:
+
+/* Line 1806 of yacc.c  */
 #line 151 "mapparser.y"
     {
 	                                 if((yyvsp[(1) - (3)].dblval) != 0)
@@ -1704,6 +1781,8 @@ yyreduce:
     break;
 
   case 12:
+
+/* Line 1806 of yacc.c  */
 #line 159 "mapparser.y"
     {
 	                                 if((yyvsp[(1) - (3)].dblval) != 0) {
@@ -1717,6 +1796,8 @@ yyreduce:
     break;
 
   case 13:
+
+/* Line 1806 of yacc.c  */
 #line 168 "mapparser.y"
     {
 	                                 if((yyvsp[(1) - (3)].dblval) != 0)
@@ -1729,6 +1810,8 @@ yyreduce:
     break;
 
   case 14:
+
+/* Line 1806 of yacc.c  */
 #line 176 "mapparser.y"
     {
 	                                 if((yyvsp[(1) - (3)].dblval) != 0) {
@@ -1742,16 +1825,22 @@ yyreduce:
     break;
 
   case 15:
+
+/* Line 1806 of yacc.c  */
 #line 185 "mapparser.y"
     { (yyval.intval) = !(yyvsp[(2) - (2)].intval); }
     break;
 
   case 16:
+
+/* Line 1806 of yacc.c  */
 #line 186 "mapparser.y"
     { (yyval.intval) = !(yyvsp[(2) - (2)].dblval); }
     break;
 
   case 17:
+
+/* Line 1806 of yacc.c  */
 #line 187 "mapparser.y"
     {
                                          ms_regex_t re;
@@ -1771,6 +1860,8 @@ yyreduce:
     break;
 
   case 18:
+
+/* Line 1806 of yacc.c  */
 #line 202 "mapparser.y"
     {
                                          ms_regex_t re;
@@ -1790,6 +1881,8 @@ yyreduce:
     break;
 
   case 19:
+
+/* Line 1806 of yacc.c  */
 #line 217 "mapparser.y"
     {
 	                                 if((yyvsp[(1) - (3)].dblval) == (yyvsp[(3) - (3)].dblval))
@@ -1800,6 +1893,8 @@ yyreduce:
     break;
 
   case 20:
+
+/* Line 1806 of yacc.c  */
 #line 223 "mapparser.y"
     {
 	                                 if((yyvsp[(1) - (3)].dblval) != (yyvsp[(3) - (3)].dblval))
@@ -1810,6 +1905,8 @@ yyreduce:
     break;
 
   case 21:
+
+/* Line 1806 of yacc.c  */
 #line 229 "mapparser.y"
     {	                                 
 	                                 if((yyvsp[(1) - (3)].dblval) > (yyvsp[(3) - (3)].dblval))
@@ -1820,6 +1917,8 @@ yyreduce:
     break;
 
   case 22:
+
+/* Line 1806 of yacc.c  */
 #line 235 "mapparser.y"
     {
 	                                 if((yyvsp[(1) - (3)].dblval) < (yyvsp[(3) - (3)].dblval))
@@ -1830,6 +1929,8 @@ yyreduce:
     break;
 
   case 23:
+
+/* Line 1806 of yacc.c  */
 #line 241 "mapparser.y"
     {	                                 
 	                                 if((yyvsp[(1) - (3)].dblval) >= (yyvsp[(3) - (3)].dblval))
@@ -1840,6 +1941,8 @@ yyreduce:
     break;
 
   case 24:
+
+/* Line 1806 of yacc.c  */
 #line 247 "mapparser.y"
     {
 	                                 if((yyvsp[(1) - (3)].dblval) <= (yyvsp[(3) - (3)].dblval))
@@ -1850,11 +1953,15 @@ yyreduce:
     break;
 
   case 25:
+
+/* Line 1806 of yacc.c  */
 #line 253 "mapparser.y"
     { (yyval.intval) = (yyvsp[(2) - (3)].intval); }
     break;
 
   case 26:
+
+/* Line 1806 of yacc.c  */
 #line 254 "mapparser.y"
     {
                                          if(strcmp((yyvsp[(1) - (3)].strval), (yyvsp[(3) - (3)].strval)) == 0)
@@ -1867,6 +1974,8 @@ yyreduce:
     break;
 
   case 27:
+
+/* Line 1806 of yacc.c  */
 #line 262 "mapparser.y"
     {
                                          if(strcmp((yyvsp[(1) - (3)].strval), (yyvsp[(3) - (3)].strval)) != 0)
@@ -1879,6 +1988,8 @@ yyreduce:
     break;
 
   case 28:
+
+/* Line 1806 of yacc.c  */
 #line 270 "mapparser.y"
     {
                                          if(strcmp((yyvsp[(1) - (3)].strval), (yyvsp[(3) - (3)].strval)) > 0)
@@ -1892,6 +2003,8 @@ yyreduce:
     break;
 
   case 29:
+
+/* Line 1806 of yacc.c  */
 #line 279 "mapparser.y"
     {
                                          if(strcmp((yyvsp[(1) - (3)].strval), (yyvsp[(3) - (3)].strval)) < 0)
@@ -1904,6 +2017,8 @@ yyreduce:
     break;
 
   case 30:
+
+/* Line 1806 of yacc.c  */
 #line 287 "mapparser.y"
     {
                                          if(strcmp((yyvsp[(1) - (3)].strval), (yyvsp[(3) - (3)].strval)) >= 0)
@@ -1916,6 +2031,8 @@ yyreduce:
     break;
 
   case 31:
+
+/* Line 1806 of yacc.c  */
 #line 295 "mapparser.y"
     {
                                          if(strcmp((yyvsp[(1) - (3)].strval), (yyvsp[(3) - (3)].strval)) <= 0)
@@ -1928,6 +2045,8 @@ yyreduce:
     break;
 
   case 32:
+
+/* Line 1806 of yacc.c  */
 #line 303 "mapparser.y"
     {
                                      if(msTimeCompare(&((yyvsp[(1) - (3)].tmval)), &((yyvsp[(3) - (3)].tmval))) == 0)
@@ -1938,6 +2057,8 @@ yyreduce:
     break;
 
   case 33:
+
+/* Line 1806 of yacc.c  */
 #line 309 "mapparser.y"
     {
                                      if(msTimeCompare(&((yyvsp[(1) - (3)].tmval)), &((yyvsp[(3) - (3)].tmval))) != 0)
@@ -1948,6 +2069,8 @@ yyreduce:
     break;
 
   case 34:
+
+/* Line 1806 of yacc.c  */
 #line 315 "mapparser.y"
     {
                                      if(msTimeCompare(&((yyvsp[(1) - (3)].tmval)), &((yyvsp[(3) - (3)].tmval))) > 0)
@@ -1958,6 +2081,8 @@ yyreduce:
     break;
 
   case 35:
+
+/* Line 1806 of yacc.c  */
 #line 321 "mapparser.y"
     {
                                      if(msTimeCompare(&((yyvsp[(1) - (3)].tmval)), &((yyvsp[(3) - (3)].tmval))) < 0)
@@ -1968,6 +2093,8 @@ yyreduce:
     break;
 
   case 36:
+
+/* Line 1806 of yacc.c  */
 #line 327 "mapparser.y"
     {
                                      if(msTimeCompare(&((yyvsp[(1) - (3)].tmval)), &((yyvsp[(3) - (3)].tmval))) >= 0)
@@ -1978,6 +2105,8 @@ yyreduce:
     break;
 
   case 37:
+
+/* Line 1806 of yacc.c  */
 #line 333 "mapparser.y"
     {
                                      if(msTimeCompare(&((yyvsp[(1) - (3)].tmval)), &((yyvsp[(3) - (3)].tmval))) <= 0)
@@ -1988,6 +2117,8 @@ yyreduce:
     break;
 
   case 38:
+
+/* Line 1806 of yacc.c  */
 #line 339 "mapparser.y"
     {
 					 char *delim,*bufferp;
@@ -2013,6 +2144,8 @@ yyreduce:
     break;
 
   case 39:
+
+/* Line 1806 of yacc.c  */
 #line 360 "mapparser.y"
     {
 					 char *delim,*bufferp;
@@ -2038,6 +2171,8 @@ yyreduce:
     break;
 
   case 40:
+
+/* Line 1806 of yacc.c  */
 #line 381 "mapparser.y"
     {
 	                                 if((yyvsp[(1) - (3)].dblval) == (yyvsp[(3) - (3)].dblval))
@@ -2048,6 +2183,8 @@ yyreduce:
     break;
 
   case 41:
+
+/* Line 1806 of yacc.c  */
 #line 387 "mapparser.y"
     {
                                          if(strcasecmp((yyvsp[(1) - (3)].strval), (yyvsp[(3) - (3)].strval)) == 0)
@@ -2060,6 +2197,8 @@ yyreduce:
     break;
 
   case 42:
+
+/* Line 1806 of yacc.c  */
 #line 395 "mapparser.y"
     {
                                      if(msTimeCompare(&((yyvsp[(1) - (3)].tmval)), &((yyvsp[(3) - (3)].tmval))) == 0)
@@ -2070,6 +2209,8 @@ yyreduce:
     break;
 
   case 43:
+
+/* Line 1806 of yacc.c  */
 #line 402 "mapparser.y"
     {
       int rval;
@@ -2085,6 +2226,8 @@ yyreduce:
     break;
 
   case 44:
+
+/* Line 1806 of yacc.c  */
 #line 413 "mapparser.y"
     {
       int rval;
@@ -2100,6 +2243,8 @@ yyreduce:
     break;
 
   case 45:
+
+/* Line 1806 of yacc.c  */
 #line 424 "mapparser.y"
     {
       int rval;
@@ -2115,6 +2260,8 @@ yyreduce:
     break;
 
   case 46:
+
+/* Line 1806 of yacc.c  */
 #line 435 "mapparser.y"
     {
       int rval;
@@ -2130,6 +2277,8 @@ yyreduce:
     break;
 
   case 47:
+
+/* Line 1806 of yacc.c  */
 #line 446 "mapparser.y"
     {
       int rval;
@@ -2145,6 +2294,8 @@ yyreduce:
     break;
 
   case 48:
+
+/* Line 1806 of yacc.c  */
 #line 457 "mapparser.y"
     {
       int rval;
@@ -2160,6 +2311,8 @@ yyreduce:
     break;
 
   case 49:
+
+/* Line 1806 of yacc.c  */
 #line 468 "mapparser.y"
     {
       int rval;
@@ -2175,6 +2328,8 @@ yyreduce:
     break;
 
   case 50:
+
+/* Line 1806 of yacc.c  */
 #line 479 "mapparser.y"
     {
       int rval;
@@ -2190,6 +2345,8 @@ yyreduce:
     break;
 
   case 51:
+
+/* Line 1806 of yacc.c  */
 #line 490 "mapparser.y"
     {
       double d;
@@ -2204,6 +2361,8 @@ yyreduce:
     break;
 
   case 52:
+
+/* Line 1806 of yacc.c  */
 #line 500 "mapparser.y"
     {
       double d;
@@ -2218,31 +2377,43 @@ yyreduce:
     break;
 
   case 54:
+
+/* Line 1806 of yacc.c  */
 #line 513 "mapparser.y"
     { (yyval.dblval) = (yyvsp[(2) - (3)].dblval); }
     break;
 
   case 55:
+
+/* Line 1806 of yacc.c  */
 #line 514 "mapparser.y"
     { (yyval.dblval) = (yyvsp[(1) - (3)].dblval) + (yyvsp[(3) - (3)].dblval); }
     break;
 
   case 56:
+
+/* Line 1806 of yacc.c  */
 #line 515 "mapparser.y"
     { (yyval.dblval) = (yyvsp[(1) - (3)].dblval) - (yyvsp[(3) - (3)].dblval); }
     break;
 
   case 57:
+
+/* Line 1806 of yacc.c  */
 #line 516 "mapparser.y"
     { (yyval.dblval) = (yyvsp[(1) - (3)].dblval) * (yyvsp[(3) - (3)].dblval); }
     break;
 
   case 58:
+
+/* Line 1806 of yacc.c  */
 #line 517 "mapparser.y"
     { (yyval.dblval) = (int)(yyvsp[(1) - (3)].dblval) % (int)(yyvsp[(3) - (3)].dblval); }
     break;
 
   case 59:
+
+/* Line 1806 of yacc.c  */
 #line 518 "mapparser.y"
     {
       if((yyvsp[(3) - (3)].dblval) == 0.0) {
@@ -2254,21 +2425,29 @@ yyreduce:
     break;
 
   case 60:
+
+/* Line 1806 of yacc.c  */
 #line 525 "mapparser.y"
     { (yyval.dblval) = (yyvsp[(2) - (2)].dblval); }
     break;
 
   case 61:
+
+/* Line 1806 of yacc.c  */
 #line 526 "mapparser.y"
     { (yyval.dblval) = pow((yyvsp[(1) - (3)].dblval), (yyvsp[(3) - (3)].dblval)); }
     break;
 
   case 62:
+
+/* Line 1806 of yacc.c  */
 #line 527 "mapparser.y"
     { (yyval.dblval) = strlen((yyvsp[(3) - (4)].strval)); }
     break;
 
   case 63:
+
+/* Line 1806 of yacc.c  */
 #line 528 "mapparser.y"
     {
       if((yyvsp[(3) - (4)].shpval)->type != MS_SHAPE_POLYGON) {
@@ -2281,16 +2460,22 @@ yyreduce:
     break;
 
   case 64:
+
+/* Line 1806 of yacc.c  */
 #line 536 "mapparser.y"
     { (yyval.dblval) = (MS_NINT((yyvsp[(3) - (6)].dblval)/(yyvsp[(5) - (6)].dblval)))*(yyvsp[(5) - (6)].dblval); }
     break;
 
   case 66:
+
+/* Line 1806 of yacc.c  */
 #line 540 "mapparser.y"
     { (yyval.shpval) = (yyvsp[(2) - (3)].shpval); }
     break;
 
   case 67:
+
+/* Line 1806 of yacc.c  */
 #line 541 "mapparser.y"
     {
       shapeObj *s;
@@ -2305,6 +2490,8 @@ yyreduce:
     break;
 
   case 68:
+
+/* Line 1806 of yacc.c  */
 #line 551 "mapparser.y"
     {
       shapeObj *s;
@@ -2318,45 +2505,115 @@ yyreduce:
     }
     break;
 
+  case 69:
+
+/* Line 1806 of yacc.c  */
+#line 561 "mapparser.y"
+    {
+      shapeObj *s;
+      s = msGEOSSimplify((yyvsp[(3) - (6)].shpval), (yyvsp[(5) - (6)].dblval));
+      if(!s) {
+        yyerror(p, "Executing simplify failed.");
+        return(-1);
+      }
+      s->scratch = MS_TRUE;
+      (yyval.shpval) = s;
+    }
+    break;
+
   case 70:
-#line 564 "mapparser.y"
-    { (yyval.strval) = (yyvsp[(2) - (3)].strval); }
+
+/* Line 1806 of yacc.c  */
+#line 571 "mapparser.y"
+    {
+      shapeObj *s;
+      s = msGEOSTopologyPreservingSimplify((yyvsp[(3) - (6)].shpval), (yyvsp[(5) - (6)].dblval));
+      if(!s) {
+        yyerror(p, "Executing simplifypt failed.");
+        return(-1);
+      }
+      s->scratch = MS_TRUE;
+      (yyval.shpval) = s;
+    }
     break;
 
   case 71:
-#line 565 "mapparser.y"
+
+/* Line 1806 of yacc.c  */
+#line 581 "mapparser.y"
+    {
+      shapeObj *s;
+      s = msGeneralize((yyvsp[(3) - (6)].shpval), (yyvsp[(5) - (6)].dblval));
+      if(!s) {
+        yyerror(p, "Executing generalize failed.");
+        return(-1);
+      }
+      s->scratch = MS_TRUE;
+      (yyval.shpval) = s;
+    }
+    break;
+
+  case 73:
+
+/* Line 1806 of yacc.c  */
+#line 594 "mapparser.y"
+    { (yyval.strval) = (yyvsp[(2) - (3)].strval); }
+    break;
+
+  case 74:
+
+/* Line 1806 of yacc.c  */
+#line 595 "mapparser.y"
     { 
       (yyval.strval) = (char *)malloc(strlen((yyvsp[(1) - (3)].strval)) + strlen((yyvsp[(3) - (3)].strval)) + 1);
       sprintf((yyval.strval), "%s%s", (yyvsp[(1) - (3)].strval), (yyvsp[(3) - (3)].strval)); free((yyvsp[(1) - (3)].strval)); free((yyvsp[(3) - (3)].strval)); 
     }
     break;
 
-  case 72:
-#line 569 "mapparser.y"
+  case 75:
+
+/* Line 1806 of yacc.c  */
+#line 599 "mapparser.y"
     {
       (yyval.strval) = (char *) malloc(strlen((yyvsp[(5) - (6)].strval)) + 64); /* Plenty big? Should use snprintf below... */
       sprintf((yyval.strval), (yyvsp[(5) - (6)].strval), (yyvsp[(3) - (6)].dblval));
     }
     break;
 
-  case 73:
-#line 573 "mapparser.y"
+  case 76:
+
+/* Line 1806 of yacc.c  */
+#line 603 "mapparser.y"
     {  
       (yyvsp[(3) - (4)].strval) = msCommifyString((yyvsp[(3) - (4)].strval)); 
       (yyval.strval) = (yyvsp[(3) - (4)].strval); 
     }
     break;
 
-  case 75:
-#line 580 "mapparser.y"
+  case 78:
+
+/* Line 1806 of yacc.c  */
+#line 610 "mapparser.y"
     { (yyval.tmval) = (yyvsp[(2) - (3)].tmval); }
     break;
 
 
-/* Line 1267 of yacc.c.  */
-#line 2358 "mapparser.c"
+
+/* Line 1806 of yacc.c  */
+#line 2604 "mapparser.c"
       default: break;
     }
+  /* User semantic actions sometimes alter yychar, and that requires
+     that yytoken be updated with the new translation.  We take the
+     approach of translating immediately before every use of yytoken.
+     One alternative is translating here after every semantic action,
+     but that translation would be missed if the semantic action invokes
+     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
+     incorrect destructor might then be invoked immediately.  In the
+     case of YYERROR or YYBACKUP, subsequent parser actions might lead
+     to an incorrect destructor call or verbose syntax error message
+     before the lookahead is translated.  */
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
 
   YYPOPSTACK (yylen);
@@ -2365,7 +2622,6 @@ yyreduce:
 
   *++yyvsp = yyval;
 
-
   /* Now `shift' the result of the reduction.  Determine what state
      that goes to, based on the state we popped back to and the rule
      number reduced by.  */
@@ -2385,6 +2641,10 @@ yyreduce:
 | yyerrlab -- here on detecting error |
 `------------------------------------*/
 yyerrlab:
+  /* Make sure we have latest lookahead translation.  See comments at
+     user semantic actions for why this is necessary.  */
+  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+
   /* If not already recovering from an error, report this error.  */
   if (!yyerrstatus)
     {
@@ -2392,37 +2652,36 @@ yyerrlab:
 #if ! YYERROR_VERBOSE
       yyerror (p, YY_("syntax error"));
 #else
+# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
+                                        yyssp, yytoken)
       {
-	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
-	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
-	  {
-	    YYSIZE_T yyalloc = 2 * yysize;
-	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
-	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
-	    if (yymsg != yymsgbuf)
-	      YYSTACK_FREE (yymsg);
-	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
-	    if (yymsg)
-	      yymsg_alloc = yyalloc;
-	    else
-	      {
-		yymsg = yymsgbuf;
-		yymsg_alloc = sizeof yymsgbuf;
-	      }
-	  }
-
-	if (0 < yysize && yysize <= yymsg_alloc)
-	  {
-	    (void) yysyntax_error (yymsg, yystate, yychar);
-	    yyerror (p, yymsg);
-	  }
-	else
-	  {
-	    yyerror (p, YY_("syntax error"));
-	    if (yysize != 0)
-	      goto yyexhaustedlab;
-	  }
+        char const *yymsgp = YY_("syntax error");
+        int yysyntax_error_status;
+        yysyntax_error_status = YYSYNTAX_ERROR;
+        if (yysyntax_error_status == 0)
+          yymsgp = yymsg;
+        else if (yysyntax_error_status == 1)
+          {
+            if (yymsg != yymsgbuf)
+              YYSTACK_FREE (yymsg);
+            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+            if (!yymsg)
+              {
+                yymsg = yymsgbuf;
+                yymsg_alloc = sizeof yymsgbuf;
+                yysyntax_error_status = 2;
+              }
+            else
+              {
+                yysyntax_error_status = YYSYNTAX_ERROR;
+                yymsgp = yymsg;
+              }
+          }
+        yyerror (p, yymsgp);
+        if (yysyntax_error_status == 2)
+          goto yyexhaustedlab;
       }
+# undef YYSYNTAX_ERROR
 #endif
     }
 
@@ -2430,7 +2689,7 @@ yyerrlab:
 
   if (yyerrstatus == 3)
     {
-      /* If just tried and failed to reuse look-ahead token after an
+      /* If just tried and failed to reuse lookahead token after an
 	 error, discard it.  */
 
       if (yychar <= YYEOF)
@@ -2447,7 +2706,7 @@ yyerrlab:
 	}
     }
 
-  /* Else will try to reuse look-ahead token after shifting the error
+  /* Else will try to reuse lookahead token after shifting the error
      token.  */
   goto yyerrlab1;
 
@@ -2481,7 +2740,7 @@ yyerrlab1:
   for (;;)
     {
       yyn = yypact[yystate];
-      if (yyn != YYPACT_NINF)
+      if (!yypact_value_is_default (yyn))
 	{
 	  yyn += YYTERROR;
 	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
@@ -2504,9 +2763,6 @@ yyerrlab1:
       YY_STACK_PRINT (yyss, yyssp);
     }
 
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
   *++yyvsp = yylval;
 
 
@@ -2531,7 +2787,7 @@ yyabortlab:
   yyresult = 1;
   goto yyreturn;
 
-#ifndef yyoverflow
+#if !defined(yyoverflow) || YYERROR_VERBOSE
 /*-------------------------------------------------.
 | yyexhaustedlab -- memory exhaustion comes here.  |
 `-------------------------------------------------*/
@@ -2542,9 +2798,14 @@ yyexhaustedlab:
 #endif
 
 yyreturn:
-  if (yychar != YYEOF && yychar != YYEMPTY)
-     yydestruct ("Cleanup: discarding lookahead",
-		 yytoken, &yylval, p);
+  if (yychar != YYEMPTY)
+    {
+      /* Make sure we have latest lookahead translation.  See comments at
+         user semantic actions for why this is necessary.  */
+      yytoken = YYTRANSLATE (yychar);
+      yydestruct ("Cleanup: discarding lookahead",
+                  yytoken, &yylval, p);
+    }
   /* Do not reclaim the symbols of the rule which action triggered
      this YYABORT or YYACCEPT.  */
   YYPOPSTACK (yylen);
@@ -2568,7 +2829,9 @@ yyreturn:
 }
 
 
-#line 583 "mapparser.y"
+
+/* Line 2067 of yacc.c  */
+#line 613 "mapparser.y"
 
 
 /*
@@ -2642,6 +2905,10 @@ int yylex(YYSTYPE *lvalp, parseObj *p)
     // fprintf(stderr, "token value = %s\n", msShapeToWKT(p->shape));
     (*lvalp).shpval = p->shape;
     break;
+  case MS_TOKEN_BINDING_MAP_CELLSIZE:
+    token = NUMBER;
+    (*lvalp).dblval = p->dblval;
+    break;    
   case MS_TOKEN_BINDING_TIME:
     token = TIME;
     msTimeInit(&((*lvalp).tmval));
@@ -2659,6 +2926,9 @@ int yylex(YYSTYPE *lvalp, parseObj *p)
 
   case MS_TOKEN_FUNCTION_BUFFER: token = YYBUFFER; break;
   case MS_TOKEN_FUNCTION_DIFFERENCE: token = DIFFERENCE; break;
+  case MS_TOKEN_FUNCTION_SIMPLIFY: token = SIMPLIFY; break;
+  case MS_TOKEN_FUNCTION_SIMPLIFYPT: token = SIMPLIFYPT; break;
+  case MS_TOKEN_FUNCTION_GENERALIZE: token = GENERALIZE; break;        
 
   default:
     break;
diff --git a/mapparser.h b/mapparser.h
index 47506c1..611331b 100644
--- a/mapparser.h
+++ b/mapparser.h
@@ -1,24 +1,21 @@
-/* A Bison parser, made by GNU Bison 2.3.  */
+/* A Bison parser, made by GNU Bison 2.5.  */
 
-/* Skeleton interface for Bison's Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify
+/* Bison interface for Yacc-like parsers in C
+   
+      Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
+   
+   This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    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., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* As a special exception, you may create a larger work that contains
    part or all of the Bison parser skeleton and distribute that work
@@ -29,10 +26,11 @@
    special exception, which will cause the skeleton and the resulting
    Bison output files to be licensed under the GNU General Public
    License without this special exception.
-
+   
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
+
 /* Tokens.  */
 #ifndef YYTOKENTYPE
 # define YYTOKENTYPE
@@ -70,9 +68,12 @@
      LENGTH = 286,
      AREA = 287,
      TOSTRING = 288,
-     DIFFERENCE = 289,
-     YYBUFFER = 290,
-     NEG = 291
+     GENERALIZE = 289,
+     SIMPLIFYPT = 290,
+     SIMPLIFY = 291,
+     DIFFERENCE = 292,
+     YYBUFFER = 293,
+     NEG = 294
    };
 #endif
 /* Tokens.  */
@@ -107,30 +108,39 @@
 #define LENGTH 286
 #define AREA 287
 #define TOSTRING 288
-#define DIFFERENCE 289
-#define YYBUFFER 290
-#define NEG 291
+#define GENERALIZE 289
+#define SIMPLIFYPT 290
+#define SIMPLIFY 291
+#define DIFFERENCE 292
+#define YYBUFFER 293
+#define NEG 294
 
 
 
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 30 "mapparser.y"
 {
+
+/* Line 2068 of yacc.c  */
+#line 30 "mapparser.y"
+
   double dblval;
   int intval;  
   char *strval;  
   struct tm tmval;
   shapeObj *shpval;
-}
-/* Line 1529 of yacc.c.  */
-#line 129 "mapparser.h"
-	YYSTYPE;
+
+
+
+/* Line 2068 of yacc.c  */
+#line 138 "mapparser.h"
+} YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
 #endif
 
 
 
+
diff --git a/mapparser.y b/mapparser.y
index 5008fe3..a5af97e 100644
--- a/mapparser.y
+++ b/mapparser.y
@@ -46,7 +46,7 @@ int yyerror(parseObj *, const char *);
 %left INTERSECTS DISJOINT TOUCHES OVERLAPS CROSSES WITHIN CONTAINS BEYOND DWITHIN
 %left AREA LENGTH COMMIFY ROUND
 %left TOSTRING
-%left YYBUFFER DIFFERENCE
+%left YYBUFFER DIFFERENCE SIMPLIFY SIMPLIFYPT GENERALIZE
 %left '+' '-'
 %left '*' '/' '%'
 %left NEG
@@ -558,6 +558,36 @@ shape_exp: SHAPE
       s->scratch = MS_TRUE;
       $$ = s;
     }
+  | SIMPLIFY '(' shape_exp ',' math_exp ')' {
+      shapeObj *s;
+      s = msGEOSSimplify($3, $5);
+      if(!s) {
+        yyerror(p, "Executing simplify failed.");
+        return(-1);
+      }
+      s->scratch = MS_TRUE;
+      $$ = s;
+    }
+  | SIMPLIFYPT '(' shape_exp ',' math_exp ')' {
+      shapeObj *s;
+      s = msGEOSTopologyPreservingSimplify($3, $5);
+      if(!s) {
+        yyerror(p, "Executing simplifypt failed.");
+        return(-1);
+      }
+      s->scratch = MS_TRUE;
+      $$ = s;
+    }
+  | GENERALIZE '(' shape_exp ',' math_exp ')' {
+      shapeObj *s;
+      s = msGeneralize($3, $5);
+      if(!s) {
+        yyerror(p, "Executing generalize failed.");
+        return(-1);
+      }
+      s->scratch = MS_TRUE;
+      $$ = s;
+    }
 ;
 
 string_exp: STRING
@@ -653,6 +683,10 @@ int yylex(YYSTYPE *lvalp, parseObj *p)
     // fprintf(stderr, "token value = %s\n", msShapeToWKT(p->shape));
     (*lvalp).shpval = p->shape;
     break;
+  case MS_TOKEN_BINDING_MAP_CELLSIZE:
+    token = NUMBER;
+    (*lvalp).dblval = p->dblval;
+    break;    
   case MS_TOKEN_BINDING_TIME:
     token = TIME;
     msTimeInit(&((*lvalp).tmval));
@@ -670,6 +704,9 @@ int yylex(YYSTYPE *lvalp, parseObj *p)
 
   case MS_TOKEN_FUNCTION_BUFFER: token = YYBUFFER; break;
   case MS_TOKEN_FUNCTION_DIFFERENCE: token = DIFFERENCE; break;
+  case MS_TOKEN_FUNCTION_SIMPLIFY: token = SIMPLIFY; break;
+  case MS_TOKEN_FUNCTION_SIMPLIFYPT: token = SIMPLIFYPT; break;
+  case MS_TOKEN_FUNCTION_GENERALIZE: token = GENERALIZE; break;        
 
   default:
     break;
diff --git a/mapscript/php/class.c b/mapscript/php/class.c
index 00367fb..53f2e8b 100644
--- a/mapscript/php/class.c
+++ b/mapscript/php/class.c
@@ -165,7 +165,7 @@ PHP_METHOD(classObj, __construct)
 PHP_METHOD(classObj, __get)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *zobj = getThis();
   php_class_object *php_class;
 
@@ -201,7 +201,7 @@ PHP_METHOD(classObj, __get)
 PHP_METHOD(classObj, __set)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *value;
   zval *zobj = getThis();
   php_class_object *php_class;
@@ -338,7 +338,7 @@ PHP_METHOD(classObj, getLabel)
 PHP_METHOD(classObj, updateFromString)
 {
   char *snippet;
-  long snippet_len;
+  long snippet_len = 0;
   zval *zobj = getThis();
   php_class_object *php_class;
   int status = MS_FAILURE;
@@ -370,7 +370,7 @@ PHP_METHOD(classObj, updateFromString)
 PHP_METHOD(classObj, setExpression)
 {
   char *expression;
-  long expression_len;
+  long expression_len = 0;
   zval *zobj = getThis();
   php_class_object *php_class;
   int status = MS_FAILURE;
@@ -429,7 +429,7 @@ PHP_METHOD(classObj, getExpressionString)
 PHP_METHOD(classObj, setText)
 {
   char *text;
-  long text_len;
+  long text_len = 0;
   zval *zobj = getThis();
   php_class_object *php_class;
   php_layer_object *php_layer;
diff --git a/mapscript/php/cluster.c b/mapscript/php/cluster.c
index c592bbb..d53e06e 100644
--- a/mapscript/php/cluster.c
+++ b/mapscript/php/cluster.c
@@ -66,7 +66,7 @@ PHP_METHOD(clusterObj, __construct)
 PHP_METHOD(clusterObj, __get)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *zobj = getThis();
   php_cluster_object *php_cluster;
 
@@ -91,7 +91,7 @@ PHP_METHOD(clusterObj, __get)
 PHP_METHOD(clusterObj, __set)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *value;
   zval *zobj = getThis();
   php_cluster_object *php_cluster;
@@ -119,7 +119,7 @@ PHP_METHOD(clusterObj, __set)
 PHP_METHOD(clusterObj, updateFromString)
 {
   char *snippet;
-  long snippet_len;
+  long snippet_len = 0;
   zval *zobj = getThis();
   php_cluster_object *php_cluster;
   int status = MS_FAILURE;
@@ -151,7 +151,7 @@ PHP_METHOD(clusterObj, updateFromString)
 PHP_METHOD(clusterObj, setGroup)
 {
   char *group = NULL;
-  long group_len;
+  long group_len = 0;
   zval *zobj = getThis();
   php_cluster_object *php_cluster;
   int status = MS_FAILURE;
@@ -207,7 +207,7 @@ PHP_METHOD(clusterObj, getGroupString)
 PHP_METHOD(clusterObj, setFilter)
 {
   char *filter = NULL;
-  long filter_len;
+  long filter_len = 0;
   zval *zobj = getThis();
   php_cluster_object *php_cluster;
   int status = MS_FAILURE;
diff --git a/mapscript/php/color.c b/mapscript/php/color.c
index ac7a614..1a6cbaf 100644
--- a/mapscript/php/color.c
+++ b/mapscript/php/color.c
@@ -59,7 +59,7 @@ PHP_METHOD(colorObj, __construct)
 PHP_METHOD(colorObj, __get)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *zobj = getThis();
   php_color_object *php_color;
 
@@ -85,7 +85,7 @@ PHP_METHOD(colorObj, __get)
 PHP_METHOD(colorObj, __set)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *value;
   zval *zobj = getThis();
   php_color_object *php_color;
diff --git a/mapscript/php/error.c b/mapscript/php/error.c
index 71f617e..a13de64 100644
--- a/mapscript/php/error.c
+++ b/mapscript/php/error.c
@@ -53,7 +53,7 @@ PHP_METHOD(errorObj, __construct)
 PHP_METHOD(errorObj, __get)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *zobj = getThis();
   php_error_object *php_error;
 
@@ -79,7 +79,7 @@ PHP_METHOD(errorObj, __get)
 PHP_METHOD(errorObj, __set)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *value;
   zval *zobj = getThis();
   php_error_object *php_error;
diff --git a/mapscript/php/grid.c b/mapscript/php/grid.c
index bb25866..977b760 100644
--- a/mapscript/php/grid.c
+++ b/mapscript/php/grid.c
@@ -95,7 +95,7 @@ PHP_METHOD(gridObj, __construct)
 PHP_METHOD(gridObj, __get)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *zobj = getThis();
   php_grid_object *php_grid;
 
@@ -124,7 +124,7 @@ PHP_METHOD(gridObj, __get)
 PHP_METHOD(gridObj, __set)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *value;
   zval *zobj = getThis();
   php_grid_object *php_grid;
diff --git a/mapscript/php/hashtable.c b/mapscript/php/hashtable.c
index 25ab33d..44f5680 100644
--- a/mapscript/php/hashtable.c
+++ b/mapscript/php/hashtable.c
@@ -70,7 +70,7 @@ PHP_METHOD(hashtableObj, __construct)
 PHP_METHOD(hashtableObj, __get)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *zobj = getThis();
   php_hashtable_object *php_hashtable;
 
@@ -93,7 +93,7 @@ PHP_METHOD(hashtableObj, __get)
 PHP_METHOD(hashtableObj, __set)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *value;
 
   PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
@@ -116,7 +116,7 @@ PHP_METHOD(hashtableObj, __set)
 PHP_METHOD(hashtableObj, get)
 {
   char *key;
-  long key_len;
+  long key_len = 0;
   zval *zobj = getThis();
   const char *value = NULL;
   php_hashtable_object *php_hashtable;
@@ -145,7 +145,7 @@ PHP_METHOD(hashtableObj, get)
 PHP_METHOD(hashtableObj, set)
 {
   char *key, *value;
-  long key_len, value_len;
+  long key_len, value_len = 0;
   zval *zobj = getThis();
   int status = MS_FAILURE;
   php_hashtable_object *php_hashtable;
@@ -174,7 +174,7 @@ PHP_METHOD(hashtableObj, set)
 PHP_METHOD(hashtableObj, remove)
 {
   char *key;
-  long key_len;
+  long key_len = 0;
   zval *zobj = getThis();
   int status = MS_FAILURE;
   php_hashtable_object *php_hashtable;
@@ -224,7 +224,7 @@ PHP_METHOD(hashtableObj, clear)
 PHP_METHOD(hashtableObj, nextKey)
 {
   char *key;
-  long key_len;
+  long key_len = 0;
   zval *zobj = getThis();
   const char *value = NULL;
   php_hashtable_object *php_hashtable;
diff --git a/mapscript/php/image.c b/mapscript/php/image.c
index ae26394..9b8e4fc 100644
--- a/mapscript/php/image.c
+++ b/mapscript/php/image.c
@@ -69,7 +69,7 @@ PHP_METHOD(imageObj, __construct)
 PHP_METHOD(imageObj, __get)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *zobj = getThis();
   php_image_object *php_image;
 
@@ -98,7 +98,7 @@ PHP_METHOD(imageObj, __get)
 PHP_METHOD(imageObj, __set)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *value;
   zval *zobj = getThis();
   php_image_object *php_image;
diff --git a/mapscript/php/label.c b/mapscript/php/label.c
index 1ca908b..86204df 100644
--- a/mapscript/php/label.c
+++ b/mapscript/php/label.c
@@ -110,7 +110,7 @@ PHP_METHOD(labelObj, __construct)
 PHP_METHOD(labelObj, __get)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *zobj = getThis();
   php_label_object *php_label;
 
@@ -167,7 +167,7 @@ PHP_METHOD(labelObj, __get)
 PHP_METHOD(labelObj, __set)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *value;
   zval *zobj = getThis();
   php_label_object *php_label;
@@ -231,7 +231,7 @@ PHP_METHOD(labelObj, updateFromString)
 {
   zval *zobj = getThis();
   char *snippet;
-  long snippet_len;
+  long snippet_len = 0;
   int status = MS_FAILURE;
   php_label_object *php_label;
 
@@ -260,7 +260,7 @@ PHP_METHOD(labelObj, setBinding)
 {
   zval *zobj = getThis();
   char *value;
-  long value_len;
+  long value_len = 0;
   long bindingId;
   php_label_object *php_label;
 
diff --git a/mapscript/php/labelcachemember.c b/mapscript/php/labelcachemember.c
index 5a876b2..83eae0e 100644
--- a/mapscript/php/labelcachemember.c
+++ b/mapscript/php/labelcachemember.c
@@ -53,7 +53,7 @@ PHP_METHOD(labelCacheMemberObj, __construct)
 PHP_METHOD(labelCacheMemberObj, __get)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *zobj = getThis();
   php_labelcachemember_object *php_labelcachemember;
 
@@ -88,7 +88,7 @@ PHP_METHOD(labelCacheMemberObj, __get)
 PHP_METHOD(labelCacheMemberObj, __set)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *value;
   zval *zobj = getThis();
   php_labelcachemember_object *php_labelcachemember;
diff --git a/mapscript/php/labelleader.c b/mapscript/php/labelleader.c
index af51e2b..343a531 100644
--- a/mapscript/php/labelleader.c
+++ b/mapscript/php/labelleader.c
@@ -51,7 +51,7 @@ PHP_METHOD(labelLeaderObj, __construct)
 PHP_METHOD(labelLeaderObj, __get)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *zobj = getThis();
   php_labelleader_object *php_labelleader;
 
@@ -75,7 +75,7 @@ PHP_METHOD(labelLeaderObj, __get)
 PHP_METHOD(labelLeaderObj, __set)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *value;
 
   PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
diff --git a/mapscript/php/layer.c b/mapscript/php/layer.c
index 59eff2f..2ba51a9 100644
--- a/mapscript/php/layer.c
+++ b/mapscript/php/layer.c
@@ -195,6 +195,10 @@ ZEND_BEGIN_ARG_INFO_EX(layer_getShape_args, 0, 0, 1)
 ZEND_ARG_OBJ_INFO(0, record, resultObj, 0)
 ZEND_END_ARG_INFO()
 
+ZEND_BEGIN_ARG_INFO_EX(layer_setGeomTransform_args, 0, 0, 1)
+ZEND_ARG_INFO(0, transform)
+ZEND_END_ARG_INFO()
+
 /* {{{ proto void __construct(mapObj map [, layerObj layer])
    Create a new layerObj instance. */
 PHP_METHOD(layerObj, __construct)
@@ -252,7 +256,7 @@ PHP_METHOD(layerObj, __construct)
 PHP_METHOD(layerObj, __get)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *zobj = getThis();
   php_layer_object *php_layer;
 
@@ -328,7 +332,7 @@ PHP_METHOD(layerObj, __get)
 PHP_METHOD(layerObj, __set)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *value;
   zval *zobj = getThis();
   php_layer_object *php_layer;
@@ -633,9 +637,9 @@ PHP_METHOD(layerObj, queryByAttributes)
 {
   zval *zobj = getThis();
   char *item;
-  long item_len;
+  long item_len = 0;
   char *string;
-  long string_len;
+  long string_len = 0;
   long mode;
   int status = MS_FAILURE;
   php_layer_object *php_layer;
@@ -674,7 +678,7 @@ PHP_METHOD(layerObj, queryByFilter)
 {
   zval *zobj = getThis();
   char *string;
-  long string_len;
+  long string_len = 0;
   int status = MS_FAILURE;
   php_layer_object *php_layer;
   php_map_object *php_map;
@@ -746,7 +750,7 @@ PHP_METHOD(layerObj, updateFromString)
 {
   zval *zobj = getThis();
   char *snippet;
-  long snippet_len;
+  long snippet_len = 0;
   int status = MS_FAILURE;
   php_layer_object *php_layer;
 
@@ -863,7 +867,7 @@ PHP_METHOD(layerObj, setFilter)
 {
   zval *zobj = getThis();
   char *expression;
-  long expression_len;
+  long expression_len = 0;
   int status = MS_FAILURE;
   php_layer_object *php_layer;
 
@@ -919,7 +923,7 @@ PHP_METHOD(layerObj, setProjection)
 {
   zval *zobj = getThis();
   char *projection;
-  long projection_len;
+  long projection_len = 0;
   int status = MS_FAILURE;
   php_layer_object *php_layer;
   php_projection_object *php_projection=NULL;
@@ -981,7 +985,7 @@ PHP_METHOD(layerObj, setWKTProjection)
 {
   zval *zobj = getThis();
   char *projection;
-  long projection_len;
+  long projection_len = 0;
   int status = MS_FAILURE;
   php_layer_object *php_layer;
   php_projection_object *php_projection=NULL;
@@ -1383,7 +1387,7 @@ PHP_METHOD(layerObj, getWMSFeatureInfoURL)
   zval *zobj = getThis();
   long clickx, clicky, featureCount;
   char *infoFormat = NULL;
-  long infoFormat_len;
+  long infoFormat_len = 0;
   char *value =  NULL;
   php_layer_object *php_layer;
   php_map_object *php_map;
@@ -1455,7 +1459,7 @@ PHP_METHOD(layerObj, setProcessing)
 {
   zval *zobj = getThis();
   char *string = NULL;
-  long string_len;
+  long string_len = 0;
   php_layer_object *php_layer;
 
   PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
@@ -1487,9 +1491,9 @@ PHP_METHOD(layerObj, setProcessingKey)
 {
   zval *zobj = getThis();
   char *key = NULL;
-  long key_len;
+  long key_len = 0;
   char *value = NULL;
-  long value_len;
+  long value_len = 0;
   php_layer_object *php_layer;
 
   PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
@@ -1595,9 +1599,9 @@ PHP_METHOD(layerObj, applySLD)
 {
   zval *zobj = getThis();
   char *sldxml;
-  long sldxml_len;
+  long sldxml_len = 0;
   char *namedLayer = NULL;
-  long namedLayer_len;
+  long namedLayer_len = 0;
   int status = MS_FAILURE;
   php_layer_object *php_layer;
 
@@ -1628,9 +1632,9 @@ PHP_METHOD(layerObj, applySLDURL)
 {
   zval *zobj = getThis();
   char *sldurl;
-  long sldurl_len;
+  long sldurl_len = 0;
   char *namedLayer = NULL;
-  long namedLayer_len;
+  long namedLayer_len = 0;
   int status = MS_FAILURE;
   php_layer_object *php_layer;
 
@@ -1804,7 +1808,7 @@ PHP_METHOD(layerObj, setConnectionType)
   zval *zobj = getThis();
   long type;
   char *plugin = "";
-  long plugin_len;
+  long plugin_len = 0;
   int status = MS_FAILURE;
   php_layer_object *php_layer;
 
@@ -2016,6 +2020,61 @@ PHP_METHOD(layerObj, getShape)
 }
 /* }}} */
 
+/* {{{ proto int layer.getGeomTransform()
+   return the geometry transform expression */
+PHP_METHOD(layerObj, getGeomTransform)
+{
+  zval *zobj = getThis();
+  php_layer_object *php_layer;
+
+  PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
+  if (zend_parse_parameters_none() == FAILURE) {
+    PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
+    return;
+  }
+  PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
+
+  php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+
+  if (php_layer->layer->_geomtransform.type == MS_GEOMTRANSFORM_NONE ||
+      !php_layer->layer->_geomtransform.string)
+    RETURN_STRING("", 1);
+
+  RETURN_STRING(php_layer->layer->_geomtransform.string, 1);
+}
+/* }}} */
+
+/* {{{ proto int layer.setGeomTransform()
+   set the geometry transform expression */
+PHP_METHOD(layerObj, setGeomTransform)
+{
+  zval *zobj = getThis();
+  char *transform;
+  long transform_len = 0;
+  php_layer_object *php_layer;
+
+  PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
+  if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
+                            &transform, &transform_len) == FAILURE) {
+    PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
+    return;
+  }
+  PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
+
+  php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+
+  msFree(php_layer->layer->_geomtransform.string);
+  if (transform_len > 0) {
+    php_layer->layer->_geomtransform.string = msStrdup(transform);
+    php_layer->layer->_geomtransform.type = MS_GEOMTRANSFORM_EXPRESSION;
+  }
+  else {
+    php_layer->layer->_geomtransform.type = MS_GEOMTRANSFORM_NONE;
+    php_layer->layer->_geomtransform.string = NULL;    
+  }
+
+  RETURN_LONG(MS_SUCCESS);  
+}
 
 /* {{{ proto void layer.free()
    Free the object */
@@ -2095,6 +2154,8 @@ zend_function_entry layer_functions[] = {
   PHP_ME(layerObj, setConnectionType, layer_setConnectionType_args, ZEND_ACC_PUBLIC)
   PHP_ME(layerObj, getGridIntersectionCoordinates, NULL, ZEND_ACC_PUBLIC)
   PHP_ME(layerObj, getShape, layer_getShape_args, ZEND_ACC_PUBLIC)
+  PHP_ME(layerObj, getGeomTransform, NULL, ZEND_ACC_PUBLIC)
+  PHP_ME(layerObj, setGeomTransform, layer_setGeomTransform_args, ZEND_ACC_PUBLIC)  
   PHP_ME(layerObj, free, NULL, ZEND_ACC_PUBLIC) {
     NULL, NULL, NULL
   }
diff --git a/mapscript/php/legend.c b/mapscript/php/legend.c
index a03b55c..ec2c741 100644
--- a/mapscript/php/legend.c
+++ b/mapscript/php/legend.c
@@ -57,7 +57,7 @@ PHP_METHOD(legendObj, __construct)
 PHP_METHOD(legendObj, __get)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *zobj = getThis();
   php_legend_object *php_legend;
 
@@ -92,7 +92,7 @@ PHP_METHOD(legendObj, __get)
 PHP_METHOD(legendObj, __set)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *value;
   zval *zobj = getThis();
   php_legend_object *php_legend;
@@ -131,7 +131,7 @@ PHP_METHOD(legendObj, __set)
 PHP_METHOD(legendObj, updateFromString)
 {
   char *snippet;
-  long snippet_len;
+  long snippet_len = 0;
   zval *zobj = getThis();
   php_legend_object *php_legend;
   int status = MS_FAILURE;
diff --git a/mapscript/php/line.c b/mapscript/php/line.c
index c28df7a..9aa4620 100644
--- a/mapscript/php/line.c
+++ b/mapscript/php/line.c
@@ -99,7 +99,7 @@ PHP_METHOD(lineObj, __construct)
 PHP_METHOD(lineObj, __get)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *zobj = getThis();
   php_line_object *php_line;
 
@@ -122,7 +122,7 @@ PHP_METHOD(lineObj, __get)
 PHP_METHOD(lineObj, __set)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *value;
   zval *zobj = getThis();
   php_line_object *php_line;
diff --git a/mapscript/php/map.c b/mapscript/php/map.c
index 384f491..c45e89b 100644
--- a/mapscript/php/map.c
+++ b/mapscript/php/map.c
@@ -322,9 +322,9 @@ PHP_METHOD(mapObj, __construct)
 {
   zval *zobj = getThis();
   char *filename;
-  long filename_len;
+  long filename_len = 0;
   char *path = NULL;
-  long path_len;
+  long path_len = 0;
   mapObj *map;
   php_map_object *php_map;
 
@@ -353,7 +353,7 @@ PHP_METHOD(mapObj, __construct)
 PHP_METHOD(mapObj, __get)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *zobj = getThis();
   php_map_object *php_map;
 
@@ -409,7 +409,7 @@ PHP_METHOD(mapObj, __get)
 PHP_METHOD(mapObj, __set)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *value;
   zval *zobj = getThis();
   php_map_object *php_map;
@@ -471,7 +471,7 @@ PHP_METHOD(mapObj, getSymbolByName)
 {
   zval *zobj = getThis();
   char *symbolName;
-  long symbolName_len;
+  long symbolName_len = 0;
   int symbolId = -1;
   php_map_object *php_map;
 
@@ -847,7 +847,7 @@ PHP_METHOD(mapObj, getLayerByName)
 {
   zval *zobj = getThis();
   char *layerName;
-  long layerName_len;
+  long layerName_len = 0;
   layerObj *layer = NULL;
   php_map_object *php_map;
   parent_object parent;
@@ -1917,7 +1917,7 @@ PHP_METHOD(mapObj, queryByFilter)
 {
   zval *zobj = getThis();
   char *string;
-  long string_len;
+  long string_len = 0;
   int status = MS_FAILURE;
   php_map_object *php_map;
 
@@ -1946,7 +1946,7 @@ PHP_METHOD(mapObj, saveQuery)
 {
   zval *zobj = getThis();
   char *filename;
-  long filename_len;
+  long filename_len = 0;
   int results = MS_FALSE;
   int status = MS_FAILURE;
   php_map_object *php_map;
@@ -1973,9 +1973,9 @@ PHP_METHOD(mapObj, saveQueryAsGML)
 {
   zval *zobj = getThis();
   char *filename;
-  long filename_len;
+  long filename_len = 0;
   char *namespace = "GOMF";
-  long namespace_len;
+  long namespace_len = 0;
   int status = MS_FAILURE;
   php_map_object *php_map;
 
@@ -2001,7 +2001,7 @@ PHP_METHOD(mapObj, loadQuery)
 {
   zval *zobj = getThis();
   char *filename;
-  long filename_len;
+  long filename_len = 0;
   int status = MS_FAILURE;
   php_map_object *php_map;
 
@@ -2052,7 +2052,7 @@ PHP_METHOD(mapObj, save)
 {
   zval *zobj = getThis();
   char *filename;
-  long filename_len;
+  long filename_len = 0;
   int status = MS_FAILURE;
   php_map_object *php_map;
 
@@ -2083,7 +2083,7 @@ PHP_METHOD(mapObj, setProjection)
 {
   zval *zobj = getThis();
   char *projection;
-  long projection_len;
+  long projection_len = 0;
   int status = MS_FAILURE;
   long setUnitsAndExtents = MS_FALSE;
   php_map_object *php_map;
@@ -2137,7 +2137,7 @@ PHP_METHOD(mapObj, setWKTProjection)
 {
   zval *zobj = getThis();
   char *projection;
-  long projection_len;
+  long projection_len = 0;
   int status = MS_FAILURE;
   long setUnitsAndExtents = MS_FALSE;
   php_map_object *php_map;
@@ -2242,7 +2242,7 @@ PHP_METHOD(mapObj, getLayersIndexByGroup)
 {
   zval *zobj = getThis();
   char *groupName;
-  long groupName_len;
+  long groupName_len = 0;
   int *indexes = NULL;
   int count = 0;
   int i;
@@ -2702,7 +2702,7 @@ PHP_METHOD(mapObj, setSymbolSet)
 {
   zval *zobj = getThis();
   char *filename;
-  long filename_len;
+  long filename_len = 0;
   int status = MS_FAILURE;
   php_map_object *php_map;
 
@@ -2755,7 +2755,7 @@ PHP_METHOD(mapObj, setFontSet)
 {
   zval *zobj = getThis();
   char *filename;
-  long filename_len;
+  long filename_len = 0;
   int status = MS_FAILURE;
   php_map_object *php_map;
 
@@ -2788,7 +2788,7 @@ PHP_METHOD(mapObj, selectOutputFormat)
 {
   zval *zobj = getThis();
   char *type;
-  long type_len;
+  long type_len = 0;
   int status = MS_FAILURE;
   php_map_object *php_map;
   php_outputformat_object *php_outputformat = NULL;
@@ -2852,7 +2852,7 @@ PHP_METHOD(mapObj, removeOutputFormat)
 {
   zval *zobj = getThis();
   char *name;
-  long name_len;
+  long name_len = 0;
   int status = MS_FAILURE;
   php_map_object *php_map;
 
@@ -2912,7 +2912,7 @@ PHP_METHOD(mapObj, saveMapContext)
 {
   zval *zobj = getThis();
   char *filename;
-  long filename_len;
+  long filename_len = 0;
   int status = MS_FAILURE;
   php_map_object *php_map;
 
@@ -2944,7 +2944,7 @@ PHP_METHOD(mapObj, loadMapContext)
 {
   zval *zobj = getThis();
   char *filename;
-  long filename_len;
+  long filename_len = 0;
   long unique = MS_FALSE;
   int status = MS_FAILURE;
   php_map_object *php_map;
@@ -2978,7 +2978,7 @@ PHP_METHOD(mapObj, applySLD)
 {
   zval *zobj = getThis();
   char *sldxml;
-  long sldxml_len;
+  long sldxml_len = 0;
   int status = MS_FAILURE;
   php_map_object *php_map;
 
@@ -3005,7 +3005,7 @@ PHP_METHOD(mapObj, applySLDURL)
 {
   zval *zobj = getThis();
   char *sldurl;
-  long sldurl_len;
+  long sldurl_len = 0;
   int status = MS_FAILURE;
   php_map_object *php_map;
 
@@ -3062,7 +3062,7 @@ PHP_METHOD(mapObj, getConfigOption)
 {
   zval *zobj = getThis();
   char *key;
-  long key_len;
+  long key_len = 0;
   char *value = NULL;
   php_map_object *php_map;
 
@@ -3090,9 +3090,9 @@ PHP_METHOD(mapObj, setConfigOption)
 {
   zval *zobj = getThis();
   char *key;
-  long key_len;
+  long key_len = 0;
   char *value;
-  long value_len;
+  long value_len = 0;
   php_map_object *php_map;
 
   PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
@@ -3139,7 +3139,7 @@ PHP_METHOD(mapObj, loadOwsParameters)
   zval *zobj = getThis();
   zval *zrequest;
   char *version = NULL;
-  long version_len;
+  long version_len = 0;
   int isZval = 1;
   int status = MS_FAILURE;
   php_owsrequest_object *php_request;
diff --git a/mapscript/php/outputformat.c b/mapscript/php/outputformat.c
index a2e30e5..a6dca94 100644
--- a/mapscript/php/outputformat.c
+++ b/mapscript/php/outputformat.c
@@ -67,9 +67,9 @@ PHP_METHOD(outputFormatObj, __construct)
   zval *zobj = getThis();
   php_outputformat_object *php_outputformat;
   char *driver;
-  long driver_len;
+  long driver_len = 0;
   char *name = NULL;
-  long name_len;
+  long name_len = 0;
 
   PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s",
@@ -91,7 +91,7 @@ PHP_METHOD(outputFormatObj, __construct)
 PHP_METHOD(outputFormatObj, __get)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *zobj = getThis();
   php_outputformat_object *php_outputformat;
 
@@ -123,7 +123,7 @@ PHP_METHOD(outputFormatObj, __get)
 PHP_METHOD(outputFormatObj, __set)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *value;
   zval *zobj = getThis();
   php_outputformat_object *php_outputformat;
@@ -160,9 +160,9 @@ PHP_METHOD(outputFormatObj, __set)
 PHP_METHOD(outputFormatObj, setOption)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   char *value;
-  long value_len;
+  long value_len = 0;
   zval *zobj = getThis();
   php_outputformat_object *php_outputformat;
 
@@ -188,7 +188,7 @@ PHP_METHOD(outputFormatObj, setOption)
 PHP_METHOD(outputFormatObj, getOption)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *zobj = getThis();
   const char *value = NULL;
   php_outputformat_object *php_outputformat;
diff --git a/mapscript/php/owsrequest.c b/mapscript/php/owsrequest.c
index 6ed943a..428c8dd 100644
--- a/mapscript/php/owsrequest.c
+++ b/mapscript/php/owsrequest.c
@@ -97,7 +97,7 @@ PHP_METHOD(OWSRequestObj, __construct)
 PHP_METHOD(OWSRequestObj, __get)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *zobj = getThis();
   php_owsrequest_object *php_owsrequest;
 
@@ -125,7 +125,7 @@ PHP_METHOD(OWSRequestObj, __get)
 PHP_METHOD(OWSRequestObj, __set)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *value;
   zval *zobj = getThis();
   php_owsrequest_object *php_owsrequest;
@@ -208,9 +208,9 @@ PHP_METHOD(OWSRequestObj, loadParams)
 PHP_METHOD(OWSRequestObj, setParameter)
 {
   char *name;
-  long name_len;
+  long name_len = 0;
   char *value;
-  long value_len;
+  long value_len = 0;
   zval *zobj = getThis();
   php_owsrequest_object *php_owsrequest;
 
@@ -235,9 +235,9 @@ PHP_METHOD(OWSRequestObj, setParameter)
 PHP_METHOD(OWSRequestObj, addParameter)
 {
   char *name;
-  long name_len;
+  long name_len = 0;
   char *value;
-  long value_len;
+  long value_len = 0;
   zval *zobj = getThis();
   php_owsrequest_object *php_owsrequest;
 
@@ -316,7 +316,7 @@ PHP_METHOD(OWSRequestObj, getValue)
 PHP_METHOD(OWSRequestObj, getValueByName)
 {
   char *name;
-  long name_len;
+  long name_len = 0;
   zval *zobj = getThis();
   char *value = NULL;
   php_owsrequest_object *php_owsrequest;
diff --git a/mapscript/php/php_mapscript.c b/mapscript/php/php_mapscript.c
index f757d9f..3d8f1be 100644
--- a/mapscript/php/php_mapscript.c
+++ b/mapscript/php/php_mapscript.c
@@ -122,9 +122,9 @@ ZEND_END_ARG_INFO()
 PHP_FUNCTION(ms_newMapObj)
 {
   char *filename;
-  long filename_len;
+  long filename_len = 0;
   char *path = NULL;
-  long path_len;
+  long path_len = 0;
   mapObj *map = NULL;
 
   PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
@@ -152,9 +152,9 @@ PHP_FUNCTION(ms_newMapObj)
 PHP_FUNCTION(ms_newMapObjFromString)
 {
   char *string;
-  long string_len;
+  long string_len = 0;
   char *path = NULL;
-  long path_len;
+  long path_len = 0;
   mapObj *map = NULL;
 
   PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
@@ -224,7 +224,7 @@ PHP_FUNCTION(ms_newLayerObj)
 PHP_FUNCTION(ms_newProjectionObj)
 {
   char *projString;
-  long projString_len;
+  long projString_len = 0;
   projectionObj *projection = NULL;
   parent_object parent;
 
@@ -396,7 +396,7 @@ PHP_FUNCTION(ms_newSymbolObj)
 {
   zval *zmap;
   char *symbolName;
-  long symbolName_len;
+  long symbolName_len = 0;
   int retval = 0;
   php_map_object *php_map;
 
@@ -451,7 +451,7 @@ PHP_FUNCTION(ms_shapeObjFromWkt)
 {
   php_shape_object * php_shape;
   char *wkt;
-  long str_len;
+  long str_len = 0;
 
   PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
@@ -479,7 +479,7 @@ PHP_FUNCTION(ms_shapeObjFromWkt)
 PHP_FUNCTION(ms_newShapeFileObj)
 {
   char *filename;
-  long filename_len;
+  long filename_len = 0;
   long type;
   shapefileObj *shapefile;
 
@@ -846,7 +846,7 @@ PHP_FUNCTION(ms_getScale)
 PHP_FUNCTION(ms_tokenizeMap)
 {
   char *filename;
-  long filename_len;
+  long filename_len = 0;
   char  **tokens;
   int i, numtokens=0;
 
diff --git a/mapscript/php/point.c b/mapscript/php/point.c
index 4690915..10b3846 100644
--- a/mapscript/php/point.c
+++ b/mapscript/php/point.c
@@ -113,7 +113,7 @@ PHP_METHOD(pointObj, __construct)
 PHP_METHOD(pointObj, __get)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *zobj = getThis();
   php_point_object *php_point;
 
@@ -141,7 +141,7 @@ PHP_METHOD(pointObj, __get)
 PHP_METHOD(pointObj, __set)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *value;
   zval *zobj = getThis();
   php_point_object *php_point;
@@ -355,7 +355,7 @@ PHP_METHOD(pointObj, draw)
   zval *zobj =  getThis();
   zval *zmap, *zlayer, *zimage;
   char *text;
-  long text_len;
+  long text_len = 0;
   long classIndex;
   int status = MS_FAILURE;
   php_point_object *php_point;
diff --git a/mapscript/php/projection.c b/mapscript/php/projection.c
index 961264a..46b74c1 100644
--- a/mapscript/php/projection.c
+++ b/mapscript/php/projection.c
@@ -47,7 +47,7 @@ ZEND_END_ARG_INFO()
 PHP_METHOD(projectionObj, __construct)
 {
   char *projString;
-  long projString_len;
+  long projString_len = 0;
   php_projection_object *php_projection;
 
   PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
@@ -71,7 +71,7 @@ PHP_METHOD(projectionObj, __construct)
 PHP_METHOD(projectionObj, setWKTProjection)
 {
   char *wkt;
-  long wkt_len;
+  long wkt_len = 0;
   php_projection_object *php_projection;
 
   PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
diff --git a/mapscript/php/querymap.c b/mapscript/php/querymap.c
index 7f3d532..f1e9beb 100644
--- a/mapscript/php/querymap.c
+++ b/mapscript/php/querymap.c
@@ -57,7 +57,7 @@ PHP_METHOD(queryMapObj, __construct)
 PHP_METHOD(queryMapObj, __get)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *zobj = getThis();
   php_querymap_object *php_querymap;
 
@@ -84,7 +84,7 @@ PHP_METHOD(queryMapObj, __get)
 PHP_METHOD(queryMapObj, __set)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *value;
   zval *zobj = getThis();
   php_querymap_object *php_querymap;
@@ -115,7 +115,7 @@ PHP_METHOD(queryMapObj, __set)
 PHP_METHOD(queryMapObj, updateFromString)
 {
   char *snippet;
-  long snippet_len;
+  long snippet_len = 0;
   zval *zobj = getThis();
   php_querymap_object *php_querymap;
   int status = MS_FAILURE;
diff --git a/mapscript/php/rect.c b/mapscript/php/rect.c
index 2274ac3..ebe87b3 100644
--- a/mapscript/php/rect.c
+++ b/mapscript/php/rect.c
@@ -92,7 +92,7 @@ PHP_METHOD(rectObj, __construct)
 PHP_METHOD(rectObj, __get)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *zobj = getThis();
   php_rect_object *php_rect;
 
@@ -122,7 +122,7 @@ PHP_METHOD(rectObj, draw)
   zval *zobj =  getThis();
   zval *zmap, *zlayer, *zimage;
   char *text;
-  long text_len;
+  long text_len = 0;
   long classIndex;
   int status = MS_FAILURE;
   php_rect_object *php_rect;
@@ -159,7 +159,7 @@ PHP_METHOD(rectObj, draw)
 PHP_METHOD(rectObj, __set)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *value;
   zval *zobj = getThis();
   php_rect_object *php_rect;
diff --git a/mapscript/php/referencemap.c b/mapscript/php/referencemap.c
index 22958e3..eb5db60 100644
--- a/mapscript/php/referencemap.c
+++ b/mapscript/php/referencemap.c
@@ -57,7 +57,7 @@ PHP_METHOD(referenceMapObj, __construct)
 PHP_METHOD(referenceMapObj, __get)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *zobj = getThis();
   php_referencemap_object *php_referencemap;
 
@@ -91,7 +91,7 @@ PHP_METHOD(referenceMapObj, __get)
 PHP_METHOD(referenceMapObj, __set)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *value;
   zval *zobj = getThis();
   php_referencemap_object *php_referencemap;
@@ -129,7 +129,7 @@ PHP_METHOD(referenceMapObj, __set)
 PHP_METHOD(referenceMapObj, updateFromString)
 {
   char *snippet;
-  long snippet_len;
+  long snippet_len = 0;
   zval *zobj = getThis();
   php_referencemap_object *php_referencemap;
   int status = MS_FAILURE;
diff --git a/mapscript/php/result.c b/mapscript/php/result.c
index 692a94d..3c18b1c 100644
--- a/mapscript/php/result.c
+++ b/mapscript/php/result.c
@@ -76,7 +76,7 @@ PHP_METHOD(resultObj, __construct)
 PHP_METHOD(resultObj, __get)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *zobj = getThis();
   php_result_object *php_result;
 
@@ -102,7 +102,7 @@ PHP_METHOD(resultObj, __get)
 PHP_METHOD(resultObj, __set)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *value;
   zval *zobj = getThis();
   php_result_object *php_result;
diff --git a/mapscript/php/scalebar.c b/mapscript/php/scalebar.c
index 5a303bc..2117760 100644
--- a/mapscript/php/scalebar.c
+++ b/mapscript/php/scalebar.c
@@ -63,7 +63,7 @@ PHP_METHOD(scalebarObj, __construct)
 PHP_METHOD(scalebarObj, __get)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *zobj = getThis();
   php_scalebar_object *php_scalebar;
 
@@ -99,7 +99,7 @@ PHP_METHOD(scalebarObj, __get)
 PHP_METHOD(scalebarObj, __set)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *value;
   zval *zobj = getThis();
   php_scalebar_object *php_scalebar;
@@ -139,7 +139,7 @@ PHP_METHOD(scalebarObj, __set)
 PHP_METHOD(scalebarObj, updateFromString)
 {
   char *snippet;
-  long snippet_len;
+  long snippet_len = 0;
   zval *zobj = getThis();
   php_scalebar_object *php_scalebar;
   int status = MS_FAILURE;
diff --git a/mapscript/php/shape.c b/mapscript/php/shape.c
index 28e93f9..7bf474b 100644
--- a/mapscript/php/shape.c
+++ b/mapscript/php/shape.c
@@ -181,7 +181,7 @@ PHP_METHOD(shapeObj, __construct)
 PHP_METHOD(shapeObj, __get)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *zobj = getThis();
   php_shape_object *php_shape;
 
@@ -213,7 +213,7 @@ PHP_METHOD(shapeObj, __get)
 PHP_METHOD(shapeObj, __set)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *value;
   zval *zobj = getThis();
   php_shape_object *php_shape;
@@ -456,7 +456,7 @@ PHP_METHOD(shapeObj, getValue)
   zval *zobj =  getThis();
   zval *zlayer;
   char *fieldName;
-  long fieldName_len;
+  long fieldName_len = 0;
   int i;
   php_layer_object *php_layer;
   php_shape_object *php_shape;
diff --git a/mapscript/php/shapefile.c b/mapscript/php/shapefile.c
index aa654cf..7b442a8 100644
--- a/mapscript/php/shapefile.c
+++ b/mapscript/php/shapefile.c
@@ -79,7 +79,7 @@ PHP_METHOD(shapeFileObj, __construct)
   zval *zobj = getThis();
   php_shapefile_object *php_shapefile;
   char *filename;
-  long filename_len;
+  long filename_len = 0;
   long type;
 
   PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
@@ -104,7 +104,7 @@ PHP_METHOD(shapeFileObj, __construct)
 PHP_METHOD(shapeFileObj, __get)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *zobj = getThis();
   php_shapefile_object *php_shapefile;
 
@@ -132,7 +132,7 @@ PHP_METHOD(shapeFileObj, __get)
 PHP_METHOD(shapeFileObj, __set)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *value;
   zval *zobj = getThis();
   php_shapefile_object *php_shapefile;
diff --git a/mapscript/php/style.c b/mapscript/php/style.c
index a2dada0..3cd1e2a 100644
--- a/mapscript/php/style.c
+++ b/mapscript/php/style.c
@@ -131,7 +131,7 @@ PHP_METHOD(styleObj, __construct)
 PHP_METHOD(styleObj, __get)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *zobj = getThis();
   php_style_object *php_style;
 
@@ -189,7 +189,7 @@ PHP_METHOD(styleObj, __get)
 PHP_METHOD(styleObj, __set)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *value;
   zval *zobj = getThis();
   php_style_object *php_style;
@@ -304,7 +304,7 @@ PHP_METHOD(styleObj, updateFromString)
 {
   zval *zobj = getThis();
   char *snippet;
-  long snippet_len;
+  long snippet_len = 0;
   int status = MS_FAILURE;
   zval *retval;
   zval property_name, value;
@@ -344,7 +344,7 @@ PHP_METHOD(styleObj, setBinding)
 {
   zval *zobj = getThis();
   char *value;
-  long value_len;
+  long value_len = 0;
   long bindingId;
   php_style_object *php_style;
 
@@ -503,7 +503,7 @@ PHP_METHOD(styleObj, setGeomTransform)
 {
   zval *zobj = getThis();
   char *transform;
-  long transform_len;
+  long transform_len = 0;
   php_style_object *php_style;
 
   PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
diff --git a/mapscript/php/symbol.c b/mapscript/php/symbol.c
index 8a7edb2..e619cac 100644
--- a/mapscript/php/symbol.c
+++ b/mapscript/php/symbol.c
@@ -69,7 +69,7 @@ PHP_METHOD(symbolObj, __construct)
 {
   zval *zmap;
   char *symbolName;
-  long symbolName_len;
+  long symbolName_len = 0;
   int symbolId = -1;
   php_symbol_object *php_symbol;
   php_map_object *php_map;
@@ -105,7 +105,7 @@ PHP_METHOD(symbolObj, __construct)
 PHP_METHOD(symbolObj, __get)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *zobj = getThis();
   php_symbol_object *php_symbol;
 
@@ -147,7 +147,7 @@ PHP_METHOD(symbolObj, __get)
 PHP_METHOD(symbolObj, __set)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *value;
   zval *zobj = getThis();
   php_symbol_object *php_symbol;
@@ -280,7 +280,7 @@ PHP_METHOD(symbolObj, setImagePath)
   zval *zobj = getThis();
   php_symbol_object *php_symbol;
   char *filename;
-  long filename_len;
+  long filename_len = 0;
   int status = MS_FAILURE;
 
   PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
diff --git a/mapscript/php/web.c b/mapscript/php/web.c
index 82a96e2..bba3850 100644
--- a/mapscript/php/web.c
+++ b/mapscript/php/web.c
@@ -57,7 +57,7 @@ PHP_METHOD(webObj, __construct)
 PHP_METHOD(webObj, __get)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *zobj = getThis();
   php_web_object *php_web;
 
@@ -98,7 +98,7 @@ PHP_METHOD(webObj, __get)
 PHP_METHOD(webObj, __set)
 {
   char *property;
-  long property_len;
+  long property_len = 0;
   zval *value;
   zval *zobj = getThis();
   php_web_object *php_web;
@@ -144,7 +144,7 @@ PHP_METHOD(webObj, __set)
 PHP_METHOD(webObj, updateFromString)
 {
   char *snippet;
-  long snippet_len;
+  long snippet_len = 0;
   zval *zobj = getThis();
   php_web_object *php_web;
   int status = MS_FAILURE;
diff --git a/mapscript/swiginc/layer.i b/mapscript/swiginc/layer.i
index da7d81e..03ae236 100644
--- a/mapscript/swiginc/layer.i
+++ b/mapscript/swiginc/layer.i
@@ -646,4 +646,21 @@
         return msShapeGetClass(self, map, shape, classgroup, numclasses);
     }
 
+    char *getGeomTransform() 
+    {
+      return self->_geomtransform.string;
+    }
+    
+    void setGeomTransform(char *transform) 
+    {
+      msFree(self->_geomtransform.string);
+      if (!transform || strlen(transform) > 0) {
+        self->_geomtransform.string = msStrdup(transform);
+        self->_geomtransform.type = MS_GEOMTRANSFORM_EXPRESSION;
+      }
+      else {
+        self->_geomtransform.type = MS_GEOMTRANSFORM_NONE;
+        self->_geomtransform.string = NULL;
+      }
+    }    
 }
diff --git a/mapserver.h b/mapserver.h
index a517816..f035e8b 100644
--- a/mapserver.h
+++ b/mapserver.h
@@ -648,9 +648,9 @@ extern "C" {
   };
   enum MS_TOKEN_FUNCTION_ENUM {
     MS_TOKEN_FUNCTION_LENGTH=340, MS_TOKEN_FUNCTION_TOSTRING, MS_TOKEN_FUNCTION_COMMIFY, MS_TOKEN_FUNCTION_AREA, MS_TOKEN_FUNCTION_ROUND, MS_TOKEN_FUNCTION_FROMTEXT,
-    MS_TOKEN_FUNCTION_BUFFER, MS_TOKEN_FUNCTION_DIFFERENCE
+    MS_TOKEN_FUNCTION_BUFFER, MS_TOKEN_FUNCTION_DIFFERENCE, MS_TOKEN_FUNCTION_SIMPLIFY, MS_TOKEN_FUNCTION_SIMPLIFYPT, MS_TOKEN_FUNCTION_GENERALIZE
   };
-  enum MS_TOKEN_BINDING_ENUM { MS_TOKEN_BINDING_DOUBLE=350, MS_TOKEN_BINDING_INTEGER, MS_TOKEN_BINDING_STRING, MS_TOKEN_BINDING_TIME, MS_TOKEN_BINDING_SHAPE };
+  enum MS_TOKEN_BINDING_ENUM { MS_TOKEN_BINDING_DOUBLE=360, MS_TOKEN_BINDING_INTEGER, MS_TOKEN_BINDING_STRING, MS_TOKEN_BINDING_TIME, MS_TOKEN_BINDING_SHAPE, MS_TOKEN_BINDING_MAP_CELLSIZE };
   enum MS_PARSE_TYPE_ENUM { MS_PARSE_TYPE_BOOLEAN, MS_PARSE_TYPE_STRING, MS_PARSE_TYPE_SHAPE };
 
 #ifndef SWIG
@@ -697,6 +697,7 @@ extern "C" {
   typedef struct {
     colorObj *pixel; /* for raster layers */
     shapeObj *shape; /* for vector layers */
+    double dblval; /* for cellsize used by simplify */    
     expressionObj *expr; /* expression to be evaluated (contains tokens) */
     int type; /* type of parse: boolean, string/text or shape/geometry */
     parseResultObj result; /* parse result */
@@ -1639,6 +1640,9 @@ extern "C" {
 #endif
     char *mask;
 
+#ifndef SWIG    
+    expressionObj _geomtransform;
+#endif    
   } layerObj;
 
   /************************************************************************/
@@ -2423,7 +2427,7 @@ extern "C" {
   MS_DLL_EXPORT unsigned char *msSaveImageBuffer(imageObj* image, int *size_ptr, outputFormatObj *format);
   MS_DLL_EXPORT shapeObj* msOffsetPolyline(shapeObj* shape, double offsetx, double offsety);
   MS_DLL_EXPORT int msMapSetLayerProjections(mapObj* map);
-
+  
   /* Functions to chnage the drawing order of the layers. */
   /* Defined in mapobject.c */
   MS_DLL_EXPORT int msMoveLayerUp(mapObj *map, int nLayerIndex);
@@ -2484,6 +2488,8 @@ extern "C" {
   MS_DLL_EXPORT int *msAllocateValidClassGroups(layerObj *lp, int *nclasses);
 
   MS_DLL_EXPORT void msFreeRasterBuffer(rasterBufferObj *b);
+
+  MS_DLL_EXPORT shapeObj* msGeneralize(shapeObj * shape, double tolerance);
   /* ==================================================================== */
   /*      End of prototypes for functions in maputil.c                    */
   /* ==================================================================== */
@@ -2654,8 +2660,11 @@ extern "C" {
   };
 
   MS_DLL_EXPORT int msDrawTransformedShape(mapObj *map, symbolSetObj *symbolset, imageObj *image, shapeObj *shape, styleObj *style, double scalefactor);
-  MS_DLL_EXPORT void msStyleSetGeomTransform(styleObj *style, char *transform);
+  MS_DLL_EXPORT void msStyleSetGeomTransform(styleObj *s, char *transform);
   MS_DLL_EXPORT char *msStyleGetGeomTransform(styleObj *style);
+
+  MS_DLL_EXPORT int msGeomTransformShape(mapObj *map, layerObj *layer, shapeObj *shape);  
+  
   /* ==================================================================== */
   /*      end of prototypes for functions in mapgeomtransform.c                 */
   /* ==================================================================== */
diff --git a/maputil.c b/maputil.c
index 307402d..f9ea41c 100644
--- a/maputil.c
+++ b/maputil.c
@@ -2390,3 +2390,61 @@ int msMapSetLayerProjections(mapObj* map)
   msFree(mapProjStr);
   return(MS_SUCCESS);
 }
+
+/* Generalize a shape based of the tolerance.
+   Ref: http://trac.osgeo.org/gdal/ticket/966 */
+shapeObj* msGeneralize(shapeObj *shape, double tolerance)
+{
+  shapeObj *newShape;
+  lineObj newLine = {0,NULL};
+  double sqTolerance = tolerance*tolerance;
+  
+  double dX0, dY0, dX1, dY1, dX, dY, dSqDist;
+  int i;
+
+  newShape = (shapeObj*)msSmallMalloc(sizeof(shapeObj));
+  msInitShape(newShape);
+  msCopyShape(shape, newShape);
+
+  if (shape->numlines<1)
+    return newShape;
+  
+  /* Clean shape */
+  for (i=0; i < newShape->numlines; i++)
+    free(newShape->line[i].point);
+  newShape->numlines = 0;
+  if (newShape->line) free(newShape->line);
+    
+  msAddLine(newShape, &newLine);
+  
+  if (shape->line[0].numpoints>0) {
+    msAddPointToLine(&newShape->line[0],
+                     &shape->line[0].point[0]);              
+    dX0 = shape->line[0].point[0].x;
+    dY0 = shape->line[0].point[0].y;    
+  }
+  
+  for(i=1; i<shape->line[0].numpoints; i++)
+  {
+      dX1 = shape->line[0].point[i].x;
+      dY1 = shape->line[0].point[i].y;
+     
+      dX = dX1-dX0;
+      dY = dY1-dY0;
+      dSqDist = dX*dX + dY*dY;
+      if (i == shape->line[0].numpoints-1 || dSqDist >= sqTolerance)
+      {
+          pointObj p;
+          p.x = dX1;
+          p.y = dY1;
+          
+          /* Keep this point (always keep the last point) */
+          msAddPointToLine(&newShape->line[0],
+                           &p);          
+          dX0 = dX1;
+          dY0 = dY1;
+        }
+    }
+   
+  return newShape;
+}
diff --git a/msautotest b/msautotest
index 1197646..97542fa 160000
--- a/msautotest
+++ b/msautotest
@@ -1 +1 @@
-Subproject commit 11976468c7fab58ea45e18a096717525e318fd54
+Subproject commit 97542faf857913105f379c382d3adb2821977c9b
