[SCM] mapserver branch, master, updated. upstream/6.2.0-41-gd43275e

Jerome Villeneuve Larouche jlarouche at mapgears.com
Wed Jun 12 17:41:32 UTC 2013


The following commit has been merged in the master branch:
commit 0c336b08f0b2d11bf9fb8f30b3ed6f7e57d22e01
Author: Jerome Villeneuve Larouche <jlarouche at mapgears.com>
Date:   Thu Apr 25 12:50:48 2013 +0000

    Imported Upstream version 6.2.1

diff --git a/HISTORY.TXT b/HISTORY.TXT
index fed66da..b07d8ab 100644
--- a/HISTORY.TXT
+++ b/HISTORY.TXT
@@ -12,8 +12,8 @@ the top of the list.)
 
 For a complete change history, please see the Git log comments.
 
-Current Version (git master, 6.3-dev, future 6.4):
---------------------------------------------------
+Version 6.2.1 (2013-04-19):
+---------------------------
 
 - Fix WFS GetFeature result bounds are not written in requested projection (#4494)
 
diff --git a/MIGRATION_GUIDE.txt b/MIGRATION_GUIDE.txt
index 77bcf4c..3104626 100644
--- a/MIGRATION_GUIDE.txt
+++ b/MIGRATION_GUIDE.txt
@@ -33,6 +33,11 @@ CGI Changes
 -----------
 
 * Changing MIN/MAXSCALE or MIN/MAXSCALEDENOM via URL is no longer supported.
+* The syntax for changing a LABEL with CGI commands has changed along with the
+  ability to support multiple labels
+  The previous syntax ...&map.layer[0].class[0]=label+color+255+0+0+end&... is
+  replaced with ...&map.layer[0].class[0].label[0]=color+255+0+0&...
+  Note that cgi label modifications are/were broken in 6.2.0 and fixed in 6.2.1
 
 -----------------
 Rendering changes
diff --git a/cgiutil.c b/cgiutil.c
index ac8a828..fc187ce 100644
--- a/cgiutil.c
+++ b/cgiutil.c
@@ -159,7 +159,7 @@ int loadParams(cgiRequestObj *request,
 
     /* if the content_type is application/x-www-form-urlencoded,
        we have to parse it like the QUERY_STRING variable */
-    if(strcmp(request->contenttype, "application/x-www-form-urlencoded") == 0) {
+    if(strncmp(request->contenttype, "application/x-www-form-urlencoded", strlen("application/x-www-form-urlencoded")) == 0) {
       while( data_len > 0 && isspace(post_data[data_len-1]) )
         post_data[--data_len] = '\0';
 
diff --git a/cgiutil.h b/cgiutil.h
index 424519f..f6cc0ca 100644
--- a/cgiutil.h
+++ b/cgiutil.h
@@ -32,6 +32,9 @@
 #ifndef CGIUTIL_H
 #define CGIUTIL_H
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 #if defined(_WIN32) && !defined(__CYGWIN__)
 #  define MS_DLL_EXPORT     __declspec(dllexport)
@@ -93,4 +96,8 @@ MS_DLL_EXPORT cgiRequestObj *msAllocCgiObj(void);
 MS_DLL_EXPORT void msFreeCgiObj(cgiRequestObj *request);
 #endif /*SWIG*/
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* CGIUTIL_H */
diff --git a/configure b/configure
index 2f9526f..2a92f6f 100755
--- a/configure
+++ b/configure
@@ -17836,7 +17836,7 @@ else
 int
 main ()
 {
-int x;__sync_fetch_and_add(&x,1);
+long x=0,y=0;for(x=0;x<5;x++){if(y>1) break; y=__sync_fetch_and_add(&x,1);}
   ;
   return 0;
 }
diff --git a/configure.in b/configure.in
index f5b7643..a8ffbcf 100755
--- a/configure.in
+++ b/configure.in
@@ -851,7 +851,7 @@ dnl ---------------------------------------------------------------------
 dnl Check for the __sync_fetch_and_add builtin
 dnl ---------------------------------------------------------------------
 AC_CACHE_CHECK([for __sync_fetch_and_add], ac_cv_func_sync_fetch_and_add,
-[AC_TRY_LINK([],[int x;__sync_fetch_and_add(&x,1);],ac_cv_func_sync_fetch_and_add=yes,ac_cv_func_sync_fetch_and_add=no)])
+[AC_TRY_LINK([],[long x=0,y=0;for(x=0;x<5;x++){if(y>1) break; y=__sync_fetch_and_add(&x,1);}],ac_cv_func_sync_fetch_and_add=yes,ac_cv_func_sync_fetch_and_add=no)])
 if test "$ac_cv_func_sync_fetch_and_add" = yes; then
   ALL_ENABLED="-DHAVE_SYNC_FETCH_AND_ADD $ALL_ENABLED"
   AC_DEFINE(HAVE_SYNC_FETCH_AND_ADD,1,[Define if you have the __sync_fetch_and_add function])
diff --git a/mapcairo.c b/mapcairo.c
index 99e8b56..302cb5c 100644
--- a/mapcairo.c
+++ b/mapcairo.c
@@ -172,6 +172,13 @@ faceCacheObj *getFontFace(cairoCacheData *cache, const char *font)
     free(newface);
     return NULL;
   }
+
+  /* Try to select charmap */
+  if (!newface->ftface->charmap) {
+    if( FT_Select_Charmap(newface->ftface, FT_ENCODING_MS_SYMBOL) )
+       FT_Select_Charmap(newface->ftface, FT_ENCODING_APPLE_ROMAN );
+  }
+
   newface->next = cache->facecache;
   cache->facecache = newface;
   newface->face = cairo_ft_font_face_create_for_ft_face(newface->ftface, 0);
@@ -403,6 +410,11 @@ int renderTruetypeSymbolCairo(imageObj *img, double x, double y, symbolObj *symb
 
 
   msUTF8ToUniChar(symbol->character, &unicode);
+
+  if (face->ftface->charmap &&
+    face->ftface->charmap->encoding == FT_ENCODING_MS_SYMBOL)
+    unicode |= 0xf000;
+
   glyph.index = FT_Get_Char_Index(face->ftface, unicode);
   glyph.x=0;
   glyph.y=0;
@@ -497,6 +509,10 @@ int getTruetypeTextBBoxCairo(rendererVTableObj *renderer, char **fonts, int numf
       curfontidx = 0;
     }
 
+    if (face->ftface->charmap &&
+      face->ftface->charmap->encoding == FT_ENCODING_MS_SYMBOL)
+      unicode |= 0xf000;
+
     glyph.index = FT_Get_Char_Index(face->ftface, unicode);
 
     if (glyph.index == 0) {
@@ -582,6 +598,11 @@ int renderGlyphsCairo(imageObj *img,double x, double y, labelStyleObj *style, ch
       cairo_set_font_face(r->cr,face->face);
       curfontidx = 0;
     }
+
+    if (face->ftface->charmap &&
+      face->ftface->charmap->encoding == FT_ENCODING_MS_SYMBOL)
+      unicode |= 0xf000;
+
     glyph.index = FT_Get_Char_Index(face->ftface, unicode);
     if(glyph.index == 0) {
       int j;
diff --git a/mapcopy.c b/mapcopy.c
index f531616..0f6b157 100644
--- a/mapcopy.c
+++ b/mapcopy.c
@@ -346,6 +346,16 @@ int msCopyLabel(labelObj *dst, labelObj *src)
   MS_COPYSTELEM(outlinewidth);
   MS_COPYSTELEM(space_size_10);
 
+  if (msCopyExpression(&(dst->expression), &(src->expression)) != MS_SUCCESS) {
+    msSetError(MS_MEMERR, "Failed to copy expression.", "msCopyLabel()");
+    return MS_FAILURE;
+  }
+
+  if (msCopyExpression(&(dst->text), &(src->text)) != MS_SUCCESS) {
+    msSetError(MS_MEMERR, "Failed to copy text.", "msCopyLabel()");
+    return MS_FAILURE;
+  }
+
   /*
   ** now the styles
   */
@@ -420,6 +430,7 @@ int msCopyWeb(webObj *dst, webObj *src, mapObj *map)
     if (msCopyHashTable(&(dst->metadata), &(src->metadata)) != MS_SUCCESS)
       return MS_FAILURE;
   }
+  msCopyHashTable(&dst->validation,&src->validation);
 
   MS_COPYSTRING(dst->queryformat, src->queryformat);
   MS_COPYSTRING(dst->legendformat, src->legendformat);
@@ -567,6 +578,7 @@ int msCopyClass(classObj *dst, classObj *src, layerObj *layer)
     /* dst->metadata = msCreateHashTable(); */
     msCopyHashTable(&(dst->metadata), &(src->metadata));
   }
+  msCopyHashTable(&dst->validation,&src->validation);
 
   MS_COPYSTELEM(minscaledenom);
   MS_COPYSTELEM(maxscaledenom);
@@ -967,6 +979,7 @@ int msCopyLayer(layerObj *dst, layerObj *src)
   if (&(src->metadata)) {
     msCopyHashTable(&(dst->metadata), &(src->metadata));
   }
+  msCopyHashTable(&dst->validation,&src->validation);
 
   MS_COPYSTELEM(opacity);
   MS_COPYSTELEM(dump);
diff --git a/mapdraw.c b/mapdraw.c
index ea6a0d4..3937fb4 100644
--- a/mapdraw.c
+++ b/mapdraw.c
@@ -943,19 +943,19 @@ int msDrawVectorLayer(mapObj *map, layerObj *layer, imageObj *image)
   }
 
   /* identify target shapes */
-  if(layer->transform == MS_TRUE)
+  if(layer->transform == MS_TRUE) {
     searchrect = map->extent;
+#ifdef USE_PROJ
+    if((map->projection.numargs > 0) && (layer->projection.numargs > 0))
+      msProjectRect(&map->projection, &layer->projection, &searchrect); /* project the searchrect to source coords */
+#endif
+  }
   else {
     searchrect.minx = searchrect.miny = 0;
     searchrect.maxx = map->width-1;
     searchrect.maxy = map->height-1;
   }
 
-#ifdef USE_PROJ
-  if((map->projection.numargs > 0) && (layer->projection.numargs > 0))
-    msProjectRect(&map->projection, &layer->projection, &searchrect); /* project the searchrect to source coords */
-#endif
-
   status = msLayerWhichShapes(layer, searchrect, MS_FALSE);
   if(status == MS_DONE) { /* no overlap */
     msLayerClose(layer);
@@ -2243,7 +2243,7 @@ int msDrawPoint(mapObj *map, layerObj *layer, pointObj *point, imageObj *image,
         if(msScaleInBounds(map->scaledenom, theclass->styles[s]->minscaledenom, theclass->styles[s]->maxscaledenom))
           msDrawMarkerSymbol(&map->symbolset, image, point, theclass->styles[s], layer->scalefactor);
       }
-      if(labeltext) {
+      if(labeltext && (strlen(labeltext)>0)) {
         if(layer->labelcache) {
           if(msAddLabel(map, label, layer->index, classindex, NULL, point, NULL, -1) != MS_SUCCESS) return(MS_FAILURE);
         } else
diff --git a/mapfile.c b/mapfile.c
index 7b8759b..181f151 100644
--- a/mapfile.c
+++ b/mapfile.c
@@ -2051,13 +2051,17 @@ static int loadLabel(labelObj *label)
   } /* next token */
 }
 
-int msUpdateLabelFromString(labelObj *label, char *string)
+int msUpdateLabelFromString(labelObj *label, char *string, int url_string)
 {
   if(!label || !string) return MS_FAILURE;
 
   msAcquireLock( TLOCK_PARSER );
+  
+  if(url_string)
+    msyystate = MS_TOKENIZE_URL_STRING;
+  else
+    msyystate = MS_TOKENIZE_STRING;
 
-  msyystate = MS_TOKENIZE_STRING;
   msyystring = string;
   msyylex(); /* sets things up, but doesn't process any tokens */
 
@@ -3638,6 +3642,7 @@ static void writeClass(FILE *stream, int indent, classObj *class)
   writeString(stream, indent, "TEMPLATE", NULL, class->template);
   writeExpression(stream, indent, "TEXT", &(class->text));
   writeString(stream, indent, "TITLE", NULL, class->title);
+  writeHashTable(stream, indent, "VALIDATION", &(class->validation));
   writeBlockEnd(stream, indent, "CLASS");
 }
 
@@ -4344,7 +4349,7 @@ static void writeLayer(FILE *stream, int indent, layerObj *layer)
   writeString(stream, indent, "CLASSITEM", NULL, layer->classitem);
   writeCluster(stream, indent, &(layer->cluster));
   writeString(stream, indent, "CONNECTION", NULL, layer->connection);
-  writeKeyword(stream, indent, "CONNECTIONTYPE", layer->connectiontype, 10, MS_SDE, "SDE", MS_OGR, "OGR", MS_POSTGIS, "POSTGIS", MS_WMS, "WMS", MS_ORACLESPATIAL, "ORACLESPATIAL", MS_WFS, "WFS", MS_GRATICULE, "GRATICULE", MS_PLUGIN, "PLUGIN", MS_UNION, "UNION", MS_UVRASTER, "UVRASTER");
+  writeKeyword(stream, indent, "CONNECTIONTYPE", layer->connectiontype, 9, MS_SDE, "SDE", MS_OGR, "OGR", MS_POSTGIS, "POSTGIS", MS_WMS, "WMS", MS_ORACLESPATIAL, "ORACLESPATIAL", MS_WFS, "WFS", MS_PLUGIN, "PLUGIN", MS_UNION, "UNION", MS_UVRASTER, "UVRASTER");
   writeString(stream, indent, "DATA", NULL, layer->data);
   writeNumber(stream, indent, "DEBUG", 0, layer->debug); /* is this right? see loadLayer() */
   writeExtent(stream, indent, "EXTENT", layer->extent);
@@ -5428,6 +5433,7 @@ int initMap(mapObj *map)
 
   msInitSymbolSet(&map->symbolset);
   map->symbolset.fontset =  &(map->fontset);
+  map->symbolset.map = map;
 
   initLegend(&map->legend);
   initScalebar(&map->scalebar);
@@ -5939,6 +5945,10 @@ mapObj *msLoadMapFromString(char *buffer, char *new_mappath)
     if(mappath != NULL) free(mappath);
     return NULL;
   }
+
+  if (mappath != NULL) free(mappath);
+  msyylex_destroy();
+
   msReleaseLock( TLOCK_PARSER );
 
   if (debuglevel >= MS_DEBUGLEVEL_TUNING) {
@@ -5949,9 +5959,6 @@ mapObj *msLoadMapFromString(char *buffer, char *new_mappath)
             (starttime.tv_sec+starttime.tv_usec/1.0e6) );
   }
 
-  if (mappath != NULL) free(mappath);
-  msyylex_destroy();
-
   if (resolveSymbolNames(map) == MS_FAILURE) return NULL;
 
   return map;
@@ -6186,17 +6193,25 @@ int msUpdateMapFromURL(mapObj *map, char *variable, char *string)
             if(msLookupHashTable(&(GET_LAYER(map, i)->class[j]->validation), "immutable"))
               return(MS_SUCCESS); /* fail silently */
 
-            if(msyylex() == STYLE) {
-              if(getInteger(&k) == -1) return MS_FAILURE;
-
-              if(k>=GET_LAYER(map, i)->class[j]->numstyles || k<0) {
-                msSetError(MS_MISCERR, "Style to be modified not valid.", "msUpdateMapFromURL()");
-                return MS_FAILURE;
-              }
-
-              if(msUpdateStyleFromString((GET_LAYER(map, i))->class[j]->styles[k], string, MS_TRUE) != MS_SUCCESS) return MS_FAILURE;
-            } else {
-              if(msUpdateClassFromString((GET_LAYER(map, i))->class[j], string, MS_TRUE) != MS_SUCCESS) return MS_FAILURE;
+            switch(msyylex()) {
+              case STYLE:
+                if(getInteger(&k) == -1) return MS_FAILURE;
+                if(k>=GET_LAYER(map, i)->class[j]->numstyles || k<0) {
+                  msSetError(MS_MISCERR, "Style to be modified not valid.", "msUpdateMapFromURL()");
+                  return MS_FAILURE;
+                }
+                if(msUpdateStyleFromString((GET_LAYER(map, i))->class[j]->styles[k], string, MS_TRUE) != MS_SUCCESS) return MS_FAILURE;
+                break;
+              case LABEL:
+                if(getInteger(&k) == -1) return MS_FAILURE;
+                if(k>=GET_LAYER(map, i)->class[j]->numlabels || k<0) {
+                  msSetError(MS_MISCERR, "Label to be modified not valid.", "msUpdateMapFromURL()");
+                  return MS_FAILURE;
+                }
+                if(msUpdateLabelFromString((GET_LAYER(map, i))->class[j]->labels[k], string, MS_TRUE) != MS_SUCCESS) return MS_FAILURE;
+                break;
+              default:
+                if(msUpdateClassFromString((GET_LAYER(map, i))->class[j], string, MS_TRUE) != MS_SUCCESS) return MS_FAILURE;
             }
           } else {
             if(msUpdateLayerFromString((GET_LAYER(map, i)), string, MS_TRUE) != MS_SUCCESS) return MS_FAILURE;
@@ -6398,8 +6413,10 @@ void msApplyDefaultSubstitutions(mapObj *map)
 
   for(i=0; i<map->numlayers; i++) {
     layerObj *layer = GET_LAYER(map, i);
-    applyLayerDefaultSubstitutions(layer, &(layer->validation));
+    applyLayerDefaultSubstitutions(layer, &(layer->validation)); /* layer settings take precedence */
     applyLayerDefaultSubstitutions(layer, &(layer->metadata));
+    applyLayerDefaultSubstitutions(layer, &(map->web.validation));
+    applyLayerDefaultSubstitutions(layer, &(map->web.metadata));
   }
 }
 
diff --git a/mapgeomtransform.c b/mapgeomtransform.c
index e3d1906..5297f2a 100644
--- a/mapgeomtransform.c
+++ b/mapgeomtransform.c
@@ -35,6 +35,11 @@ extern int yyparse(parseObj *p);
 void msStyleSetGeomTransform(styleObj *s, char *transform)
 {
   msFree(s->_geomtransform.string);
+  if (!transform) {
+    s->_geomtransform.type = MS_GEOMTRANSFORM_NONE;
+    s->_geomtransform.string = NULL;
+    return;
+  }
   s->_geomtransform.string = msStrdup(transform);
   if(!strncasecmp("start",transform,5)) {
     s->_geomtransform.type = MS_GEOMTRANSFORM_START;
diff --git a/mapgeos.c b/mapgeos.c
index a64aceb..fd3bd4e 100644
--- a/mapgeos.c
+++ b/mapgeos.c
@@ -569,11 +569,38 @@ shapeObj *msGEOSGeometry2Shape(GEOSGeom g)
     case GEOS_MULTIPOLYGON:
       return msGEOSGeometry2Shape_multipolygon(g);
       break;
-    default:
+    case GEOS_GEOMETRYCOLLECTION:
       if (!GEOSisEmpty(g))
-        msSetError(MS_GEOSERR, "Unsupported GEOS geometry type (%d).", "msGEOSGeometry2Shape()", type);
-      return NULL;
+      {
+        int i, j, numGeoms;
+        shapeObj* shape;
+
+        numGeoms = GEOSGetNumGeometries(g);
+
+        shape = (shapeObj *) malloc(sizeof(shapeObj));
+        msInitShape(shape);
+        shape->type = MS_SHAPE_LINE;
+        shape->geometry = (GEOSGeom) g;
+        
+        numGeoms = GEOSGetNumGeometries(g);
+        for(i = 0; i < numGeoms; i++) { /* for each geometry */
+           shapeObj* shape2 = msGEOSGeometry2Shape((GEOSGeom)GEOSGetGeometryN(g, i));
+           if (shape2) {
+              for (j = 0; j < shape2->numlines; j++)
+                 msAddLineDirectly(shape, &shape2->line[j]);
+              shape2->numlines = 0;
+              shape2->geometry = NULL; /* not owned */
+              msFreeShape(shape2);
+           }
+        }
+        msComputeBounds(shape);
+        return shape;
+      }
+      break;
+    default:
+      msSetError(MS_GEOSERR, "Unsupported GEOS geometry type (%d).", "msGEOSGeometry2Shape()", type);
   }
+  return NULL;
 }
 #endif
 
diff --git a/maplayer.c b/maplayer.c
index 5691c2e..32b1a49 100644
--- a/maplayer.c
+++ b/maplayer.c
@@ -702,11 +702,24 @@ int msLayerGetFeatureStyle(mapObj *map, layerObj *layer, classObj *c, shapeObj*
     /* try to find out the current style format */
     if (strncasecmp(stylestring,"style",5) == 0) {
       resetClassStyle(c);
+      c->layer = layer;
       if (msMaybeAllocateClassStyle(c, 0))
         return(MS_FAILURE);
 
       msUpdateStyleFromString(c->styles[0], stylestring, MS_FALSE);
+      if(c->styles[0]->symbolname) {
+        if((c->styles[0]->symbol =  msGetSymbolIndex(&(map->symbolset), c->styles[0]->symbolname, MS_TRUE)) == -1) {
+          msSetError(MS_MISCERR, "Undefined symbol \"%s\" in class of layer %s.", "msLayerGetFeatureStyle()", 
+              c->styles[0]->symbolname, layer->name);
+          return MS_FAILURE;
+        }
+      }
     } else if (strncasecmp(stylestring,"class",5) == 0) {
+      if (strcasestr(stylestring, " style ") != NULL) {
+        /* reset style if stylestring contains style definitions */
+        resetClassStyle(c);
+        c->layer = layer;
+      }
       msUpdateClassFromString(c, stylestring, MS_FALSE);
     } else if (strncasecmp(stylestring,"pen",3) == 0 || strncasecmp(stylestring,"brush",5) == 0 ||
                strncasecmp(stylestring,"symbol",6) == 0 || strncasecmp(stylestring,"label",5) == 0) {
@@ -880,7 +893,7 @@ makeTimeFilter(layerObj *lp,
     if (&lp->filter) {
       /* if the filter is set and it's a sting type, concatenate it with
          the time. If not just free it */
-      if (lp->filter.type == MS_EXPRESSION) {
+      if (lp->filter.string && lp->filter.type == MS_STRING) {
         pszBuffer = msStringConcatenate(pszBuffer, "((");
         pszBuffer = msStringConcatenate(pszBuffer, lp->filter.string);
         pszBuffer = msStringConcatenate(pszBuffer, ") and ");
@@ -917,7 +930,7 @@ makeTimeFilter(layerObj *lp,
     pszBuffer = msStringConcatenate(pszBuffer, ")");
 
     /* if there was a filter, It was concatenate with an And ans should be closed*/
-    if(&lp->filter && lp->filter.type == MS_EXPRESSION) {
+    if(&lp->filter && lp->filter.string && lp->filter.type == MS_STRING) {
       pszBuffer = msStringConcatenate(pszBuffer, ")");
     }
 
@@ -934,7 +947,7 @@ makeTimeFilter(layerObj *lp,
     return MS_FALSE;
 
   if (numtimes >= 1) {
-    if (&lp->filter && lp->filter.type == MS_EXPRESSION) {
+    if (&lp->filter && lp->filter.string && lp->filter.type == MS_STRING) {
       pszBuffer = msStringConcatenate(pszBuffer, "((");
       pszBuffer = msStringConcatenate(pszBuffer, lp->filter.string);
       pszBuffer = msStringConcatenate(pszBuffer, ") and ");
@@ -1057,7 +1070,7 @@ makeTimeFilter(layerObj *lp,
 
     /* load the string to the filter */
     if (pszBuffer && strlen(pszBuffer) > 0) {
-      if(&lp->filter && lp->filter.type == MS_EXPRESSION)
+      if(&lp->filter && lp->filter.string && lp->filter.type == MS_STRING)
         pszBuffer = msStringConcatenate(pszBuffer, ")");
       /*
       if(lp->filteritem)
diff --git a/maplegend.c b/maplegend.c
index c0efdaa..0edb2ec 100644
--- a/maplegend.c
+++ b/maplegend.c
@@ -208,7 +208,11 @@ int msDrawLegendIcon(mapObj *map, layerObj *lp, classObj *theclass,
       offset = 1;
       /* To set the offset, we only check the size/width parameter of the first style */
       if (theclass->numstyles > 0) {
-        offset = (theclass->styles[0]->size != -1) ? theclass->styles[0]->size/2 : theclass->styles[0]->width/2;
+        if (theclass->styles[0]->symbol > 0 && theclass->styles[0]->symbol < map->symbolset.numsymbols && 
+              map->symbolset.symbol[theclass->styles[0]->symbol]->type != MS_SYMBOL_SIMPLE)
+            offset = theclass->styles[0]->size/2;
+        else
+            offset = theclass->styles[0]->width/2;
       }
       zigzag.line = (lineObj *)msSmallMalloc(sizeof(lineObj));
       zigzag.numlines = 1;
diff --git a/maplexer.c b/maplexer.c
index a9da53f..5a58340 100644
--- a/maplexer.c
+++ b/maplexer.c
@@ -6,10 +6,29 @@
 
 /* A lexical scanner generated by flex */
 
+#define yy_create_buffer msyy_create_buffer
+#define yy_delete_buffer msyy_delete_buffer
+#define yy_flex_debug msyy_flex_debug
+#define yy_init_buffer msyy_init_buffer
+#define yy_flush_buffer msyy_flush_buffer
+#define yy_load_buffer_state msyy_load_buffer_state
+#define yy_switch_to_buffer msyy_switch_to_buffer
+#define yyin msyyin
+#define yyleng msyyleng
+#define yylex msyylex
+#define yylineno msyylineno
+#define yyout msyyout
+#define yyrestart msyyrestart
+#define yytext msyytext
+#define yywrap msyywrap
+#define yyalloc msyyalloc
+#define yyrealloc msyyrealloc
+#define yyfree msyyfree
+
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 33
+#define YY_FLEX_SUBMINOR_VERSION 35
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -31,7 +50,7 @@
 
 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
 
-#if __STDC_VERSION__ >= 199901L
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
 
 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
  * if you want the limit (max/min) macros for int types. 
@@ -47,6 +66,7 @@ typedef int16_t flex_int16_t;
 typedef uint16_t flex_uint16_t;
 typedef int32_t flex_int32_t;
 typedef uint32_t flex_uint32_t;
+typedef uint64_t flex_uint64_t;
 #else
 typedef signed char flex_int8_t;
 typedef short int flex_int16_t;
@@ -94,11 +114,12 @@ typedef unsigned int flex_uint32_t;
 
 #else	/* ! __cplusplus */
 
-#if __STDC__
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
 
 #define YY_USE_CONST
 
-#endif	/* __STDC__ */
+#endif	/* defined (__STDC__) */
 #endif	/* ! __cplusplus */
 
 #ifdef YY_USE_CONST
@@ -152,7 +173,12 @@ typedef unsigned int flex_uint32_t;
 typedef struct yy_buffer_state *YY_BUFFER_STATE;
 #endif
 
-extern int msyyleng;
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+extern yy_size_t msyyleng;
 
 extern FILE *msyyin, *msyyout;
 
@@ -178,16 +204,6 @@ extern FILE *msyyin, *msyyout;
 
 #define unput(c) yyunput( c, (yytext_ptr)  )
 
-/* The following is because we cannot portably get our hands on size_t
- * (without autoconf's help, which isn't available because we want
- * flex-generated scanners to compile on their own).
- */
-
-#ifndef YY_TYPEDEF_YY_SIZE_T
-#define YY_TYPEDEF_YY_SIZE_T
-typedef unsigned int yy_size_t;
-#endif
-
 #ifndef YY_STRUCT_YY_BUFFER_STATE
 #define YY_STRUCT_YY_BUFFER_STATE
 struct yy_buffer_state
@@ -205,7 +221,7 @@ struct yy_buffer_state
 	/* Number of characters read into yy_ch_buf, not including EOB
 	 * characters.
 	 */
-	int yy_n_chars;
+	yy_size_t yy_n_chars;
 
 	/* Whether we "own" the buffer - i.e., we know we created it,
 	 * and can realloc() it to grow it, and should free() it to
@@ -275,8 +291,8 @@ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
 
 /* yy_hold_char holds the character lost when msyytext is formed. */
 static char yy_hold_char;
-static int yy_n_chars;		/* number of characters read into yy_ch_buf */
-int msyyleng;
+static yy_size_t yy_n_chars;		/* number of characters read into yy_ch_buf */
+yy_size_t msyyleng;
 
 /* Points to current character in buffer. */
 static char *yy_c_buf_p = (char *) 0;
@@ -304,7 +320,7 @@ static void msyy_init_buffer (YY_BUFFER_STATE b,FILE *file  );
 
 YY_BUFFER_STATE msyy_scan_buffer (char *base,yy_size_t size  );
 YY_BUFFER_STATE msyy_scan_string (yyconst char *yy_str  );
-YY_BUFFER_STATE msyy_scan_bytes (yyconst char *bytes,int len  );
+YY_BUFFER_STATE msyy_scan_bytes (yyconst char *bytes,yy_size_t len  );
 
 void *msyyalloc (yy_size_t  );
 void *msyyrealloc (void *,yy_size_t  );
@@ -359,7 +375,7 @@ static void yy_fatal_error (yyconst char msg[]  );
  */
 #define YY_DO_BEFORE_ACTION \
 	(yytext_ptr) = yy_bp; \
-	msyyleng = (size_t) (yy_cp - yy_bp); \
+	msyyleng = (yy_size_t) (yy_cp - yy_bp); \
 	(yy_hold_char) = *yy_cp; \
 	*yy_cp = '\0'; \
 	(yy_c_buf_p) = yy_cp;
@@ -373,13 +389,13 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[1854] =
+static yyconst flex_int16_t yy_accept[1858] =
     {   0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,  323,  320,    1,  318,  311,    2,  320,  320,
-      305,  317,  305,  320,  317,  317,  317,  317,  317,  317,
+      305,  317,  305,  317,  317,  317,  317,  317,  317,  317,
       317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
-      317,  317,  317,  317,  317,  317,  317,  317,  319,  319,
+      317,  317,  317,  317,  317,  317,  317,  320,  319,  319,
         3,  320,  320,  320,  320,  320,  320,  320,  320,  320,
       320,  320,  320,  320,  320,  320,    1,  317,  317,  317,
       317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
@@ -390,195 +406,195 @@ static yyconst flex_int16_t yy_accept[1854] =
       321,  321,  321,  321,  321,  321,  319,   13,  319,  322,
         1,  322,  322,  314,  312,  312,  313,    1,    2,    0,
       310,  305,  305,  317,  305,  317,    0,  317,  309,  305,
-        0,    0,  300,  317,  317,  317,  317,  317,  317,  317,
-      317,  225,  317,  317,  317,  229,  317,  230,  317,  317,
-      235,  317,  317,  317,  317,  317,  317,  317,  317,  317,
+        0,  317,  317,  317,  317,  317,  317,  317,  317,  225,
+      317,  317,  317,  229,  317,  230,  317,  317,  235,  317,
       317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
-      317,  317,  317,  317,  317,  317,  317,  317,  247,  317,
-      317,  250,  317,  251,  317,  317,  317,  317,  317,  317,
+      317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
+      317,  317,  317,  317,  317,  317,  247,  317,  317,  250,
+      317,  251,  317,  317,  317,  317,  317,  317,  317,  317,
 
-      317,  317,  317,  262,  317,  317,  317,  317,  317,  317,
+      317,  262,  317,  317,  317,  317,  317,  317,  317,  317,
       317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
       317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
-      317,  317,  206,  317,  317,  289,  290,  317,  291,  317,
-      317,  317,  317,  317,  317,  317,  317,  317,    0,    0,
-      299,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  317,  317,
+      206,  317,  317,  289,  290,  317,  291,  317,  317,  317,
+      317,  317,  317,  317,  317,  317,    0,  300,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  299,  317,  317,
       317,  229,  317,  317,  317,  317,  317,  317,  317,  317,
       317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
       262,  317,  317,  317,  317,  317,  317,  317,  317,  317,
 
       317,  317,  317,  317,  317,  317,  317,    8,    0,    5,
         0,  306,  306,  306,    0,  306,    0,   12,   14,    7,
-       11,    0,  302,    0,    0,    0,  307,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    9,   16,   12,   10,
-        0,    4,    0,    0,    0,    0,   15,    0,  315,    0,
-      314,  312,  313,  305,    0,    0,  317,  305,  309,  308,
-      305,    0,    0,  305,  317,  317,  317,  317,  317,  317,
+       11,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        9,   16,   12,   10,    0,    4,    0,    0,    0,    0,
+        0,    0,  302,    0,    0,  307,   15,    0,  315,    0,
+      314,  312,  312,  313,  305,    0,    0,  317,  305,  309,
+      308,  305,    0,    0,  305,  317,  317,  317,  317,  317,
       317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
-      317,  317,  317,  317,  317,  317,  231,  317,  317,  317,
-      317,  317,  317,  317,  317,  317,   62,  317,  317,  317,
+      317,  317,  317,  317,  317,  317,  317,  231,  317,  317,
+      317,  317,  317,  317,  317,  317,  317,   62,  317,  317,
 
-      317,  317,  317,  317,  317,  317,  317,  317,  317,   77,
       317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
+       77,  317,  317,  317,  317,  317,  317,  317,  317,  317,
       317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
-      317,  317,  317,  317,  317,  118,  119,  317,  317,  317,
+      317,  317,  317,  317,  317,  317,  118,  119,  317,  317,
       317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
-      317,  317,  260,  261,  317,  317,  317,  317,  317,  317,
+      317,  317,  317,  260,  261,  317,  317,  317,  317,  317,
       317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
       317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
-      317,  277,  317,  317,  317,  317,  317,  317,  317,  317,
-      317,  283,  317,  317,  317,  317,  317,  317,  317,  317,
+      317,  317,  277,  317,  317,  317,  317,  317,  317,  317,
+      317,  317,  283,  317,  317,  317,  317,  317,  317,  317,
 
-      317,  317,  317,  317,  317,  317,  317,  317,  215,  295,
-      317,  217,  296,  317,    0,  298,    0,    0,    0,    0,
+      317,  317,  317,  317,  317,  317,  317,  317,  317,  215,
+      295,  317,  217,  296,  317,    0,    0,    0,    0,    0,
         0,    0,    0,  119,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  215,  317,  317,  317,  317,  317,  317,
-      317,  317,  317,  317,  317,  317,  317,  317,  260,  317,
+        0,    0,    0,  215,    0,  298,  317,  317,  317,  317,
       317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
-        0,    0,    0,    0,    0,  306,  306,    0,    0,  306,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    6,    0,    0,    0,    0,
-        0,  305,  308,    0,  305,  317,  317,  317,  317,  317,
-
-      317,  220,  317,  317,  317,  317,  317,  317,  317,  224,
-      317,  317,  317,  317,  317,  317,  317,  317,   55,  317,
-      317,  317,  317,   59,  317,  317,  317,  317,  317,  317,
-      317,  317,  317,  239,  317,  317,  317,   72,  317,  317,
-      317,   76,  317,  317,  317,   79,  317,  317,  317,  317,
-      317,  317,  317,  317,  317,  317,  317,   97,  317,  317,
-      317,  317,  317,  317,  317,  317,  248,  317,  249,  317,
-      122,  317,  317,  317,  317,  317,  317,  317,  317,  317,
+      260,  317,  317,  317,  317,  317,  317,  317,  317,  317,
+      317,  317,    0,    0,    0,    0,    0,  306,  306,    0,
+        0,  306,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    6,    0,    0,    0,    0,    0,
+        0,    0,    0,  305,  308,    0,  305,  317,  317,  317,
+
+      317,  317,  317,  220,  317,  317,  317,  317,  317,  317,
+      317,  224,  317,  317,  317,  317,  317,  317,  317,  317,
+       55,  317,  317,  317,  317,   59,  317,  317,  317,  317,
+      317,  317,  317,  317,  317,  239,  317,  317,  317,   72,
+      317,  317,  317,   76,  317,  317,  317,   79,  317,  317,
+      317,  317,  317,  317,  317,  317,  317,  317,  317,   97,
+      317,  317,  317,  317,  317,  317,  317,  317,  248,  317,
+      249,  317,  122,  317,  317,  317,  317,  317,  317,  317,
       317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
       317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
 
-      153,  317,  258,  317,  317,  317,  317,  317,  317,  317,
+      317,  317,  153,  317,  258,  317,  317,  317,  317,  317,
       317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
       317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
       317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
-      317,  317,  190,  317,  317,  317,  317,  317,  317,  317,
-      202,  317,  285,  317,  317,  317,  317,  287,  212,  317,
-      317,  317,  317,  317,  317,  218,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  190,    0,
-        0,    0,  317,  317,   55,  317,   72,  317,  317,  317,
-      317,  317,  317,  317,  190,  317,  317,  287,  303,    0,
-
-      306,    0,  304,   17,    0,    0,    0,    0,    0,    0,
+      317,  317,  317,  317,  190,  317,  317,  317,  317,  317,
+      317,  317,  202,  317,  285,  317,  317,  317,  317,  287,
+      212,  317,  317,  317,  317,  317,  317,  218,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       37,  297,  317,   39,  317,  317,  221,  317,  317,  222,
-      317,  317,  317,  317,  317,  317,  227,  317,   47,  317,
-       51,  317,  317,  317,  317,   57,  317,  317,  317,  317,
-      237,   60,  317,   63,  317,  317,  238,  317,  317,  317,
-      317,  317,  317,   74,  317,  317,  241,  317,  317,   82,
-      242,  317,  317,   84,  317,  317,   93,  317,  317,  170,
-      317,  317,  317,  317,  101,  246,  317,  111,  317,  317,
-      317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
+        0,  190,    0,    0,    0,  317,  317,   55,  317,   72,
+      317,  317,  317,  317,  317,  317,  317,  190,  317,  317,
 
-      317,  317,  317,  317,  317,  317,  317,  317,  317,  255,
+      287,  303,    0,  306,   17,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  304,   37,  297,  317,   39,  317,  317,  221,
+      317,  317,  222,  317,  317,  317,  317,  317,  317,  227,
+      317,   47,  317,   51,  317,  317,  317,  317,   57,  317,
+      317,  317,  317,  237,   60,  317,   63,  317,  317,  238,
+      317,  317,  317,  317,  317,  317,   74,  317,  317,  241,
+      317,  317,   82,  242,  317,  317,   84,  317,  317,   93,
+      317,  317,  170,  317,  317,  317,  317,  101,  246,  317,
+      111,  317,  317,  317,  317,  317,  317,  317,  317,  317,
+
+      317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
+      317,  317,  255,  317,  317,  317,  317,  317,  317,  317,
+      317,  317,  317,  317,  317,  317,  256,  317,  233,  317,
+      317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
+      317,  317,  317,  317,  317,  269,  317,  317,  317,  317,
+      317,  317,  317,  317,  273,  317,  317,  317,  317,  317,
+      317,  317,  317,  275,  276,  184,  317,  317,  317,  317,
+      317,  317,  281,  317,  317,  193,  317,  199,  317,  317,
+      317,  205,  317,  317,  317,  317,  292,  213,  317,  317,
+      317,  216,   39,   47,    0,    0,    0,  101,  111,    0,
+
+        0,    0,    0,    0,    0,  193,    0,  213,  317,   51,
+      317,  317,  317,  317,  317,  317,  317,  317,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       21,    0,    0,    0,    0,  317,  317,  317,  317,  317,
+      317,  223,  317,   45,  226,  317,  228,  317,  317,  317,
+      317,   52,  317,  317,  317,  317,  317,   58,  317,  317,
+      317,  317,   65,  317,   68,   69,  240,  317,   71,  317,
+      317,  317,  317,   83,  243,  317,  317,  317,  317,  317,
+      317,  244,  317,  317,  317,  317,  317,  317,  317,  317,
+      317,  317,  317,  317,  317,  110,  112,  113,  317,  317,
+
+      120,  317,  317,  317,  317,  317,  317,  317,  317,  317,
+      317,  317,  317,  317,  252,  317,  253,  317,  317,  317,
       317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
-      317,  317,  317,  256,  317,  233,  317,  317,  317,  317,
+      317,  317,  259,  154,  317,  317,  317,  317,  317,  317,
+      317,  317,  317,  317,  268,  267,  272,  169,  317,  317,
       317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
-      317,  317,  269,  317,  317,  317,  317,  317,  317,  317,
-      317,  273,  317,  317,  317,  317,  317,  317,  317,  317,
-      275,  276,  184,  317,  317,  317,  317,  317,  317,  281,
-      317,  317,  193,  317,  199,  317,  317,  317,  205,  317,
-      317,  317,  317,  292,  213,  317,  317,  317,  216,   39,
-       47,    0,    0,    0,  111,    0,    0,    0,    0,    0,
-
-        0,  193,    0,  213,  317,   51,  317,  317,  317,  101,
-      317,  317,  317,  317,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   21,    0,    0,
-        0,  317,  317,  317,  317,  317,  317,  223,  317,   45,
-      226,  317,  228,  317,  317,  317,  317,   52,  317,  317,
-      317,  317,  317,   58,  317,  317,  317,  317,   65,  317,
-       68,   69,  240,  317,   71,  317,  317,  317,  317,   83,
-      243,  317,  317,  317,  317,  317,  317,  244,  317,  317,
+      274,  317,  179,  317,  317,  317,  317,  317,  317,  317,
+      317,  317,  279,  280,  317,  282,  192,  317,  195,  317,
       317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
-      317,  110,  112,  113,  317,  317,  120,  317,  317,  317,
-
+      294,    0,   65,    0,    0,  113,    0,    0,    0,    0,
+
+        0,    0,  317,  195,  317,   31,   22,    0,    0,    0,
+        0,    0,    0,    0,    0,   18,    0,    0,    0,   29,
+        0,  317,  317,  317,  317,  317,  317,  317,  317,  317,
+      317,   50,  317,  317,  317,  317,  234,  317,  236,  317,
+      317,  317,   67,  317,   73,  317,  317,  317,  317,  317,
+      317,  317,  317,  317,  317,   92,  317,  317,  317,  317,
+       99,  317,  317,  317,  317,  317,  317,  317,  317,  317,
+      115,  317,  317,  123,  317,  317,  317,  317,  317,  317,
+      317,  317,  132,  317,  317,  317,  317,  317,  138,  317,
+      317,  317,  317,  317,  317,  317,  149,  317,  317,  317,
+
+      317,  317,  155,  317,  156,  317,  317,  317,  317,  317,
+      168,  317,  317,  270,  317,  271,  317,  317,  317,  317,
       317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
-      252,  317,  253,  317,  317,  317,  317,  317,  317,  317,
-      317,  317,  317,  317,  317,  317,  317,  317,  259,  154,
       317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
-      268,  267,  272,  169,  317,  317,  317,  317,  317,  317,
-      317,  317,  317,  317,  317,  317,  274,  317,  179,  317,
-      317,  317,  317,  317,  317,  317,  317,  317,  279,  280,
-      317,  282,  192,  317,  195,  317,  317,  317,  317,  317,
-      317,  317,  317,  317,  317,  317,  294,    0,   65,    0,
-        0,  113,    0,    0,    0,    0,    0,    0,  317,  195,
-
-      317,    0,   31,   22,    0,    0,    0,    0,    0,    0,
-        0,    0,   18,    0,    0,    0,   29,  317,  317,  317,
-      317,  317,  317,  317,  317,  317,  317,   50,  317,  317,
-      317,  317,  234,  317,  236,  317,  317,  317,   67,  317,
-       73,  317,  317,  317,  317,  317,  317,  317,  317,  317,
-      317,   92,  317,  317,  317,  317,   99,  317,  317,  317,
-      317,  317,  317,  317,  317,  317,  115,  317,  317,  123,
-      317,  317,  317,  317,  317,  317,  317,  317,  132,  317,
-      317,  317,  317,  317,  138,  317,  317,  317,  317,  317,
-      317,  317,  149,  317,  317,  317,  317,  317,  155,  317,
-
-      156,  317,  317,  317,  317,  317,  168,  317,  317,  270,
-      317,  271,  317,  317,  317,  317,  317,  317,  317,  317,
+      317,  317,  317,  317,  317,  317,  317,  317,  317,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  317,  317,
+       20,    0,   28,    0,    0,   32,    0,    0,    0,    0,
+       26,  301,  317,  317,  317,  317,  317,   43,  317,  317,
+      317,  317,  317,  317,  317,  317,  317,   61,  317,  317,
+      317,  317,  317,  317,   80,  317,  317,  317,  317,  317,
+
+       91,  317,  317,  317,   98,  317,  317,  317,  317,  317,
+      317,  317,  317,  317,  116,  317,  317,  317,  317,  317,
+      317,  317,  317,  128,  317,  317,  135,  136,  137,  317,
+      317,  317,  317,  317,  317,  145,  317,  317,  152,  257,
       317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
+      317,  317,  167,  317,  317,  171,  317,  317,  173,  317,
+      317,  317,  177,  317,  317,  317,  317,  181,  317,  186,
+      317,  278,  317,  317,  317,  317,  317,  317,  317,  200,
+       90,  317,  204,  317,  317,  317,  286,  288,  293,  317,
+        0,    0,    0,    0,  177,    0,    0,  186,    0,  200,
+
+       30,    0,   25,   33,    0,   27,   19,  317,  317,   40,
+      317,   42,  317,   46,  317,   48,  317,  317,  317,   35,
+      317,  317,   66,  317,  317,  317,   81,  317,   88,   89,
+      317,   86,  317,   95,   96,  317,  317,  317,  317,  104,
       317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
-      317,  317,  317,  317,  317,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  317,  317,  301,   20,    0,   28,
-        0,    0,   32,    0,    0,    0,    0,   26,  317,  317,
-      317,  317,  317,   43,  317,  317,  317,  317,  317,  317,
-      317,  317,  317,   61,  317,  317,  317,  317,  317,  317,
-       80,  317,  317,  317,  317,  317,   91,  317,  317,  317,
-
-       98,  317,  317,  317,  317,  317,  317,  317,  317,  317,
-      116,  317,  317,  317,  317,  317,  317,  317,  317,  128,
-      317,  317,  135,  136,  137,  317,  317,  317,  317,  317,
-      317,  145,  317,  317,  152,  257,  317,  317,  317,  317,
-      317,  317,  317,  317,  317,  317,  317,  317,  167,  317,
-      317,  171,  317,  317,  173,  317,  317,  317,  177,  317,
-      317,  317,  317,  181,  317,  186,  317,  278,  317,  317,
-      317,  317,  317,  317,  317,  200,   90,  317,  204,  317,
-      317,  317,  286,  288,  293,  317,    0,    0,    0,    0,
-      177,    0,    0,  186,    0,  200,   30,    0,   25,   33,
-
-        0,   27,   19,  317,  317,   40,  317,   42,  317,   46,
-      317,   48,  317,  317,  317,   35,  317,  317,   66,  317,
-      317,  317,   81,  317,   88,   89,  317,   86,  317,   95,
-       96,  317,  317,  317,  317,  104,  317,  317,  317,  317,
-      317,  317,  317,  317,  317,  317,  317,  131,  317,  317,
-      317,  317,  317,  317,  317,  317,  317,  148,  317,  317,
+      317,  131,  317,  317,  317,  317,  317,  317,  317,  317,
+      317,  148,  317,  317,  317,  317,  317,  317,  317,  317,
       317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
+      317,  317,  317,  317,  317,  317,   36,  178,  317,  317,
+      317,  317,  317,  317,  189,  191,  194,  317,  198,  317,
+
+      203,  207,  211,  317,  317,    0,    0,   86,    0,  178,
+        0,    0,    0,    0,  317,  219,  317,  317,   49,   34,
+       53,  317,  317,   64,   70,  317,  317,   85,  317,   94,
+      100,  245,  102,  317,  317,  317,  317,  317,  317,  121,
+      124,  317,  317,  317,  317,  317,  317,  317,  317,  139,
+      317,  317,  317,  317,  317,  317,  317,  317,  317,  263,
       317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
-      317,  317,   36,  178,  317,  317,  317,  317,  317,  317,
-      189,  191,  194,  317,  198,  317,  203,  207,  211,  317,
-
-      317,    0,    0,   86,    0,  178,    0,    0,    0,    0,
-      317,  219,  317,  317,   49,   34,   53,  317,  317,   64,
-       70,  317,  317,   85,  317,   94,  100,  245,  102,  317,
-      317,  317,  317,  317,  317,  121,  124,  317,  317,  317,
-      317,  317,  317,  317,  317,  139,  317,  317,  317,  317,
-      317,  317,  317,  317,  317,  263,  317,  317,  317,  317,
-      317,  317,  317,  317,  317,  317,  317,  317,  317,  232,
-      317,  174,  175,  317,  180,  317,  182,  185,  317,  188,
-      317,  317,  317,  317,  214,    0,   85,  175,  182,    0,
-       23,   24,   38,  317,  317,  317,   56,  317,  317,  317,
-
-      317,  103,  317,  317,  317,  317,  317,  125,  126,  130,
-      127,  317,  317,  317,  134,  140,  317,  147,  144,  317,
-      317,  151,  317,  264,  317,  317,  317,  317,  317,  317,
-      317,  317,  317,  165,  317,  266,  284,  317,  176,  317,
-      187,  196,  317,  317,  317,  210,    0,  210,  317,   44,
-      317,  317,   75,  317,   87,  317,  317,  317,  114,  317,
-      317,  317,  133,  317,  317,  150,  317,  317,  157,  158,
-      159,  317,  161,  317,  317,  317,  317,  317,  317,  317,
-      317,  317,  209,    0,  317,  317,  183,   78,  105,  107,
-      109,  317,  317,  129,  317,  146,  254,  265,  317,  317,
-
-      317,  317,  166,  317,  317,  317,  317,  317,  183,  317,
-       54,  317,  317,  317,  317,  143,  317,  162,  163,  317,
-      172,  141,  317,  317,  208,   41,  317,  317,  117,  142,
-      317,  317,  317,  201,  317,  317,  317,  317,  197,  317,
-      317,  317,  317,  106,  108,  317,  317,  317,  164,  317,
-      317,  160,    0
+      317,  317,  317,  232,  317,  174,  175,  317,  180,  317,
+      182,  185,  317,  188,  317,  317,  317,  317,  214,    0,
+       85,  175,  182,    0,   23,   24,   38,  317,  317,  317,
+
+       56,  317,  317,  317,  317,  103,  317,  317,  317,  317,
+      317,  125,  126,  130,  127,  317,  317,  317,  134,  140,
+      317,  147,  144,  317,  317,  151,  317,  264,  317,  317,
+      317,  317,  317,  317,  317,  317,  317,  165,  317,  266,
+      284,  317,  176,  317,  187,  196,  317,  317,  317,  210,
+        0,  210,  317,   44,  317,  317,   75,  317,   87,  317,
+      317,  317,  114,  317,  317,  317,  133,  317,  317,  150,
+      317,  317,  157,  158,  159,  317,  161,  317,  317,  317,
+      317,  317,  317,  317,  317,  317,  209,    0,  317,  317,
+      183,   78,  105,  107,  109,  317,  317,  129,  317,  146,
+
+      254,  265,  317,  317,  317,  317,  166,  317,  317,  317,
+      317,  317,  183,  317,   54,  317,  317,  317,  317,  143,
+      317,  162,  163,  317,  172,  141,  317,  317,  208,   41,
+      317,  317,  117,  142,  317,  317,  317,  201,  317,  317,
+      317,  317,  197,  317,  317,  317,  317,  106,  108,  317,
+      317,  317,  164,  317,  317,  160,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -589,14 +605,14 @@ static yyconst flex_int32_t yy_ec[256] =
         1,    5,    6,    7,    8,    1,    1,    9,   10,   11,
        12,   13,   14,    1,   15,   16,   17,   18,   18,   19,
        18,   18,   18,   18,   18,   18,   18,    1,    1,   20,
-       21,   22,    1,    1,   28,   29,   30,   31,   32,   33,
-       34,   35,   36,   37,   38,   39,   40,   41,   42,   43,
-       44,   45,   46,   47,   48,   49,   50,   51,   52,   53,
-       23,   24,   25,    1,   26,   27,   28,   29,   30,   31,
-
-       32,   33,   34,   35,   36,   37,   38,   39,   40,   41,
-       42,   43,   44,   45,   46,   47,   48,   49,   50,   51,
-       52,   53,    1,   54,    1,   55,    1,    1,    1,    1,
+       21,   22,    1,    1,   23,   24,   25,   26,   27,   28,
+       29,   30,   31,   32,   33,   34,   35,   36,   37,   38,
+       39,   40,   41,   42,   43,   44,   45,   46,   47,   48,
+       49,   50,   51,    1,   52,   53,   54,   55,   56,   57,
+
+       58,   59,   60,   61,   62,   63,   64,   65,   66,   67,
+       68,   69,   70,   71,   72,   73,   74,   75,   76,   77,
+       78,   79,    1,   80,    1,   81,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -613,966 +629,1395 @@ static yyconst flex_int32_t yy_ec[256] =
         1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int32_t yy_meta[57] =
+static yyconst flex_int32_t yy_meta[83] =
     {   0,
         1,    1,    2,    1,    3,    1,    4,    1,    1,    5,
         1,    1,    1,    1,    6,    7,    7,    7,    7,    1,
-        6,    1,    1,    8,    9,    6,    1,    7,    7,    7,
+        6,    1,    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,    1,    8,
+        9,    6,    1,    7,    7,    7,    7,    7,    7,    7,
         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
-        7,    7,    7,    1,    1,    1
+        7,    7,    7,    7,    7,    7,    7,    7,    7,    1,
+        1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[1872] =
+static yyconst flex_int16_t yy_base[1876] =
     {   0,
-        0,    0,   54,  108,  164,    0,  220,    0,   57,   61,
-       65,   71, 2324, 2325,  101, 2325, 2325,    0, 2311,   97,
-       55,  276,  101, 2297,   82,  305,  310,   97,  318,   90,
-      315,   60,  321, 2279,   47,  342,  343,   99,  349,  357,
-     2272,  372,  385,  391,  400,  118,  373,    0, 2325, 2325,
-     2325,  348, 2278, 2279, 2285, 2265, 2275,  129, 2286, 2268,
-     2264, 2279,  113, 2265, 2268, 2276,  334,  362, 2279,  408,
-      420,  414,  428,  320, 2274,  294,  127,  430,  344, 2277,
-      426,  435,  390,  443,  449,  443,   71, 2325,  494,  498,
-     2283, 2280, 2293, 2278,  488,  490,  494, 2279,  455, 2278,
-
-      361,  401,  390,   28,  441,  451, 2254, 2252,  410, 2255,
-      414,  312,  444, 2253, 2252, 2257, 2238, 2278, 2325, 2325,
-      512, 2283, 2279,    0, 2252, 2251,  508,  519,    0, 2274,
-     2273,  501,  509,    0,  511,  520, 2267,    0, 2247,  518,
-      530, 2257, 2325,  504,  512, 2234,  347, 2231,  464, 2237,
-      518,    0, 2237, 2249, 2231,  524,  515,    0, 2226, 2227,
-        0,  528, 2237, 2232, 2232,  526,  532, 2225,  517, 2230,
-      538, 2229,  532, 2225, 2223, 2223, 2236,  539, 2216, 2234,
-     2222, 2232,  548, 2227, 2222, 2205, 2217,  547,    0,  552,
-     2214,    0, 2220,    0,  545,  551,  561, 2214, 2206,  549,
-
-      542, 2218, 2205, 2217, 2220, 2219, 2199, 2213,  558, 2199,
-     2192, 2194,  568,  570, 2209,  451,  576, 2206, 2191, 2210,
-     2205, 2197, 2207,  576, 2206, 2185,  583, 2198, 2191, 2201,
-      573,  584, 2190,  590, 2185,    0,    0, 2191,    0, 2181,
-     2186, 2194, 2194, 2176, 2190, 2173, 2173, 2190, 2192,  609,
-     2325, 2182, 2187, 2181, 2166, 2184, 2159, 2176, 2166, 2166,
-     2175,  597, 2178, 2152, 2152, 2175, 2166, 2172, 2164,  598,
-     2169, 2170,  601, 2150, 2163, 2166, 2163,  590, 2154,  605,
-     2150, 2163,  618, 2138, 2160, 2155, 2140, 2147, 2137, 2151,
-        0, 2136, 2150, 2134, 2129,  522, 2137, 2134, 2149, 2123,
-
-     2147, 2134,  601,  610, 2134, 2124, 2135, 2325, 2145, 2325,
-     2144,  632,  637,  640,  648,  642,  661, 2325, 2325, 2325,
-     2325, 2143, 2325,  643, 2140,  646, 2325, 2135, 2133, 2112,
-     2130,  641, 2120,  637, 2125, 2118, 2325, 2112, 2117, 2325,
-     2110, 2325, 2124, 2107,  638, 2107, 2325, 2146, 2325, 2142,
-        0, 2325, 2325,  669,  675,  673,  677,  679, 2115,    0,
-      681,  688,  686,  690, 2116, 2114, 2113, 2108, 2104, 2109,
-     2102, 2105, 2111, 2109, 2109, 2099, 2088, 2104, 2089, 2088,
-     2089, 2103, 2086, 2085, 2088,  644,    0, 2101, 2080,  682,
-     2078, 2083, 2089, 2092, 2076, 2080,    0, 2079, 2075, 2087,
-
-     2072, 2070, 2069,  672, 2076, 2067, 2066,  682, 2072,    0,
-     2071, 2069, 2062, 2077, 2059, 2076, 2074, 2068, 2069,  679,
-     2070, 2054, 2068, 2059, 2057,  679, 2055, 2064, 2061, 2055,
-     2061, 2061, 2044, 2058, 2057,    0,    0, 2050, 2049,  700,
-     2050,  688, 2053, 2052,  723, 2051, 2035, 2037, 2048, 2032,
-     2046, 2037, 2030,    0, 2060, 2044, 2043,  678, 2027, 2024,
-     2023, 2039,  692, 2034, 2026,  709,  694, 2024,  708, 2020,
-     2030, 2016, 2030, 2025, 2032, 2027, 2010, 2015, 2021, 2014,
-     2015,    0, 2021,  692, 2009, 2017, 2018, 2010, 2020, 2000,
-     2007,    0, 2016, 2005, 2000, 1995, 2009, 1988, 2000, 2006,
-
-     1996, 2008, 2003, 2002,  701, 2005, 1996, 1984,    0,    0,
-     1983,    0,    0, 1986, 2003, 2325, 1988, 1980, 1980, 1992,
-     1989, 1990, 1989, 2325, 1983, 1974, 1986, 1975, 1977, 1983,
-     1975, 1972, 1965, 2325, 1965, 1968, 1968, 1980, 1979, 1974,
-     1958, 1957, 1969, 1967, 1969,  717, 1968, 1967, 1952, 1958,
-     1951, 1963, 1953, 1957, 1961, 1959, 1961, 1946, 1956, 1940,
-     1961,  719, 1960,  611,  746,  748,  753,  760,  758,  762,
-      730,  757,  761, 1956, 1941, 1949, 1941, 1933, 1933, 1945,
-     1940, 1929, 1935, 1942, 1939, 2325, 1927, 1930, 1923, 1939,
-     1933,  771, 2325,  773,  775, 1926, 1938, 1923, 1932, 1916,
-
-     1934, 1942, 1926, 1913, 1919, 1908, 1928, 1909, 1922,    0,
-     1921,  721, 1913, 1905, 1903, 1904, 1912, 1915,  752, 1912,
-     1897, 1912, 1911,    0, 1899, 1910, 1888, 1908, 1893, 1905,
-     1895, 1903, 1886,    0, 1901, 1900, 1889, 1884, 1897, 1896,
-     1899,    0, 1879, 1878, 1888, 1877, 1879, 1886, 1888, 1872,
-     1886, 1885, 1868, 1864, 1878, 1868, 1866,    0, 1871,  760,
-     1870, 1870, 1876, 1865, 1861, 1873,    0, 1863,  768, 1871,
-        0, 1857, 1859, 1864, 1867, 1866, 1856, 1864, 1846,  770,
-     1862, 1857, 1844, 1860, 1845, 1843, 1841, 1842, 1844, 1849,
-     1852, 1851, 1841, 1849,  771, 1848, 1843, 1833, 1841, 1837,
-
-        0, 1839,    0, 1846,  751, 1826, 1836, 1832, 1834, 1821,
-     1829, 1831, 1834, 1833, 1825, 1835, 1826, 1814, 1815, 1825,
-     1811,  765, 1812, 1824, 1823, 1802, 1821, 1820, 1806, 1808,
-     1802, 1820, 1811, 1807, 1798, 1813, 1811, 1812, 1799, 1808,
-     1800, 1799, 1789, 1784, 1768, 1760, 1773, 1762, 1760,  769,
-        0, 1753,    0, 1756, 1702, 1681, 1677,   22,    0,   50,
-       68,   91,  333,  370,  409,    0,  499,  547,  708,  719,
-      770,  764,  769,  779,  761,  769,  776,  784, 2325,  785,
-      774,  775,  776,  778,    0,  783,    0,  793,  781,  791,
-      789,  797,  791,  784,    0,  790,  794,    0, 2325,  816,
-
-      818,  813, 2325, 2325,  798,  808,  805,  814,  797,  812,
-      803,  811,  800,  803,  802,  811,  820,  807,  818,  818,
-        0,    0,  810,    0,  829,  819,    0,  814,  824,    0,
-      833,  819,  831,  819,  820,  836,    0,  835,  834,  837,
-      826,  838,  843,  846,  847,    0,  837,  831,  833,  833,
-        0,    0,  844,    0,  835,  836,    0,  839,  854,  841,
-      837,  856,  844,    0,  843,  846,    0,  862,  846,    0,
-        0,  849,  863,  866,  851,  867,    0,  871,  862,    0,
-      872,  849,  875,  872,  882,    0,  864,    0,  862,  877,
-      888,  875,  874,  890,  870,  877,  896,  883,  879,  887,
-
-      897,  902,  878,  903,  893,  903,  895,  908,  891,    0,
-      886,  909,  889,  895,  914,  901,  897,  904,  918,  894,
-      919,  909,  919,    0,  908,    0,  922,  914,  907,  908,
-      914,  910,  926,  918,  913,  933,  934,  918,  923,  919,
-      923,  926,  922,  927,  928,  935,  936,  945,  938,  929,
-      946,  944,  942,  934,  948,  941,  947,  938,  941,  939,
-        0,    0,  959,  942,  941,  949,  961,  962,  954,    0,
-      964,  951,  962,  960,    0,  972,  973,  961,    0,  975,
-      971,  971,  954,    0,    0,  960,  981,  965,    0, 2325,
-     2325,  965,  965,  983, 2325,  984,  986,  977,  986,  971,
-
-      991, 2325,  978, 2325,  988,    0,  976,  995,  977,  991,
-     1000,  983,  992, 1004, 1008, 1003,  990, 1004, 1002, 1007,
-      996, 1006, 1007, 1012,  999, 1011, 1019, 2325, 1012, 1017,
-     1009, 1008, 1005, 1017, 1012, 1008, 1017,    0, 1024,    0,
-        0, 1011,    0, 1014, 1013, 1016, 1034,    0, 1016, 1017,
-     1024, 1019, 1025,    0, 1036, 1028, 1024, 1035,    0, 1040,
-        0, 1037,    0, 1027,    0, 1033, 1048, 1029, 1046,    0,
-        0, 1037, 1038, 1053, 1034, 1031, 1039,    0, 1053, 1047,
-     1059, 1060, 1055, 1058, 1061, 1045, 1065, 1052, 1048, 1068,
-     1065,    0,    0, 1065, 1056, 1064, 1055, 1056, 1057, 1058,
-
-     1059, 1057, 1076, 1075, 1065, 1072, 1080, 1082, 1071, 1068,
-        0, 1069,    0, 1074, 1072, 1073, 1073, 1074, 1072, 1091,
-     1090, 1086, 1094, 1096, 1085, 1082, 1091, 1103,    0,    0,
-     1100, 1118, 1082, 1089, 1104, 1104, 1086, 1100, 1099, 1094,
-        0,    0,    0,    0, 1109, 1102, 1102, 1099, 1114, 1118,
-     1101, 1103, 1103, 1109, 1124, 1106,    0, 1113,    0, 1106,
-     1125, 1125, 1111, 1131, 1128, 1129, 1132, 1135,    0,    0,
-     1128,    0,    0, 1118, 1120, 1120, 1121, 1138, 1138, 1130,
-     1130, 1145, 1135, 1132, 1144, 1130,    0, 1137, 2325, 1138,
-     1129, 2325, 1135, 1155, 1143, 1138, 1158, 1159, 1136,    0,
-
-     1142, 1165, 2325, 2325, 1139, 1151, 1147, 1162, 1154, 1155,
-     1146, 1166, 2325, 1156, 1159, 1155, 2325, 1160, 1167, 1176,
-     1157, 1174, 1161, 1166, 1177, 1168, 1179,    0, 1171, 1177,
-     1167, 1181,    0, 1177,    0, 1183, 1182, 1177,    0, 1173,
-        0, 1178, 1181, 1184, 1181, 1186, 1195, 1180, 1200, 1186,
-     1191,    0, 1197, 1202, 1194, 1202,    0, 1199, 1204, 1207,
-     1193, 1207, 1189, 1200, 1198, 1201,    0, 1203, 1209,    0,
-     1210, 1219, 1200, 1213, 1205, 1204, 1213, 1221,    0, 1218,
-     1216, 1221, 1229, 1226,    0, 1223, 1232, 1213, 1226, 1218,
-     1217, 1233,    0, 1230, 1228, 1233, 1237, 1231,    0, 1231,
-
-        0, 1229, 1244, 1233, 1247, 1232,    0, 1251, 1247,    0,
-     1240,    0, 1236, 1251, 1232, 1249, 1250, 1243, 1247, 1259,
-     1262, 1263, 1260, 1251, 1262, 1254, 1259, 1270, 1260, 1267,
-     1257, 1258, 1274, 1277, 1276, 1275, 1279, 1272, 1283, 1269,
-     1270, 1284, 1285, 1273, 1283, 1281, 1282, 1279, 1287, 1281,
-     1295, 1290, 1282, 1283, 1300, 1299, 2325, 2325, 1286, 2325,
-     1292, 1287, 2325, 1288, 1306, 1291, 1304, 2325, 1303, 1298,
-     1295, 1302, 1304,    0, 1300, 1302, 1300, 1309, 1316, 1309,
-     1320, 1321, 1306,    0, 1313, 1315, 1325, 1311, 1313, 1328,
-        0, 1319, 1330, 1328, 1325, 1333,    0, 1338, 1335, 1322,
-
-        0, 1328, 1325, 1336, 1332, 1333, 1328, 1329, 1328, 1332,
-     1338, 1326, 1327, 1340, 1337, 1352, 1335, 1350, 1358, 1356,
-     1339, 1361,    0,    0,    0, 1337, 1350, 1347, 1362, 1345,
-     1360, 1365, 1348, 1370,    0,    0, 1359, 1372, 1360, 1374,
-     1361, 1368, 1360, 1378, 1365, 1380, 1361, 1374,    0, 1377,
-     1366,    0, 1369, 1375,    0, 1374, 1375, 1378,    0, 1379,
-     1388, 1374, 1376,    0, 1381,    0, 1382,    0, 1386, 1374,
-     1393, 1383, 1390, 1403, 1385, 1390,    0, 1383,    0, 1403,
-     1396, 1405,    0,    0,    0, 1396, 1391, 1398, 1409, 1400,
-     2325, 1411, 1402, 2325, 1413,    0, 2325, 1416, 2325, 2325,
-
-     1400, 2325, 2325, 1407, 1408,    0, 1419,    0, 1411,    0,
-     1409,    0, 1421, 1413, 1410,    0, 1409, 1416,    0, 1418,
-     1423, 1427,    0, 1416,    0,    0, 1426,    0, 1420,    0,
-        0, 1430, 1419, 1434, 1439,    0, 1438, 1439, 1434, 1431,
-     1444, 1441, 1442, 1445, 1444, 1430, 1450,    0, 1436, 1448,
-     1445, 1435, 1451, 1454, 1453, 1439, 1459,    0, 1456, 1453,
-     1443, 1455, 1451, 1461, 1447, 1456, 1465, 1457, 1468, 1460,
-     1449, 1460, 1455, 1450, 1464, 1473, 1474, 1468, 1478, 1475,
-     1469, 1483,    0,    0, 1470, 1466, 1473, 1475, 1474, 1485,
-        0,    0,    0, 1479,    0, 1491,    0, 1472,    0, 1480,
-
-     1481, 1476, 1479, 2325, 1484, 2325, 1485, 1486, 1496, 1483,
-     1483,    0, 1501, 1504,    0,    0, 1486, 1493, 1499,    0,
-        0, 1494, 1495,    0, 1491,    0,    0,    0,    0, 1492,
-     1512, 1513, 1497, 1515, 1493,    0,    0, 1513, 1500, 1512,
-     1509, 1521, 1509, 1520, 1520,    0, 1521, 1508, 1520, 1517,
-     1516, 1527, 1527, 1521, 1509,    0, 1526, 1521, 1517, 1537,
-     1528, 1525, 1522, 1523, 1531, 1539, 1543, 1527, 1527,    0,
-     1547,    0,    0, 1529,    0, 1549,    0,    0, 1533,    0,
-     1547, 1533, 1540, 1552,    0, 1547, 2325, 2325, 2325, 1537,
-     2325, 2325,    0, 1543, 1539, 1535,    0, 1546, 1548, 1545,
-
-     1539,    0, 1553, 1554, 1562, 1548, 1550,    0,    0,    0,
-        0, 1556, 1556, 1568,    0,    0, 1565,    0,    0, 1560,
-     1571,    0, 1572,    0, 1577, 1561, 1572, 1561, 1575, 1565,
-     1575, 1576, 1577,    0, 1572,    0,    0, 1585,    0, 1575,
-        0, 1586, 1571, 1583, 1568,    0, 1579, 2325, 1583,    0,
-     1580, 1583,    0, 1585,    0, 1594, 1595, 1582,    0, 1593,
-     1596, 1591,    0, 1579, 1593,    0, 1588, 1596,    0,    0,
-        0, 1591,    0, 1584, 1585, 1598, 1601, 1606, 1612, 1611,
-     1612, 1598,    0, 1605, 1605, 1616,    0,    0, 1618, 1619,
-        0, 1598, 1613,    0, 1621,    0,    0,    0, 1612, 1623,
-
-     1624, 1625,    0, 1626, 1627, 1619, 1616, 1616, 2325, 1618,
-        0, 1632, 1633, 1634, 1635,    0, 1620,    0,    0, 1639,
-        0,    0, 1628, 1630,    0,    0, 1631, 1632,    0,    0,
-     1633, 1633, 1636,    0, 1635, 1636, 1648, 1641,    0, 1641,
-     1642, 1653, 1642,    0,    0, 1643, 1641, 1648,    0, 1646,
-     1644,    0, 2325, 1689, 1698, 1707, 1716, 1725, 1729, 1736,
-     1739, 1748, 1757, 1766, 1775, 1784, 1793, 1800, 1809, 1818,
-     1827
+        0,    0,   82,    0,  164,    0,  246,    0,  327,  331,
+      332,  333,  800, 4230,  342, 4230, 4230,    0,  754,  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, 4230, 4230,
+     4230,  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, 4230,  547,  643,
+      735,  703,  741,  698,  742,  786,  829,  674,  342,  672,
+
+      650,  756,  706,  790,  527,  535,  760,  569,  809,  769,
+      809,  605,  695,  720,  809,  313,  587,  642, 4230, 4230,
+      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, 4230, 1194, 1202,
+     1200, 1187, 1214, 1215, 1221, 1213, 1215, 1228, 1230, 1234,
+     1213, 1216, 1241, 1234, 1242,  536,  857, 4230, 1236, 1243,
+     1244, 1250, 1240, 1233, 1249, 1254, 1254, 1249, 1250, 1283,
+     1253, 1276, 1298, 1254, 1288, 1285, 1272, 1290, 1282, 1298,
+        0, 1285, 1301, 1289, 1287, 1305, 1297, 1296, 1314, 1290,
+
+     1316, 1306, 1307, 1340, 1313, 1306, 1321, 4230,  531, 4230,
+      528, 1367, 1371, 1373, 1388, 1377, 1396, 4230, 4230, 4230,
+     4230, 1355, 1361, 1346, 1369, 1373, 1362, 1392, 1370, 1379,
+     4230, 1375, 1382, 4230, 1379, 4230, 1395, 1380, 1393, 1384,
+      495, 1407, 4230,  489,  322, 4230, 4230,  493, 4230,  485,
+        0, 4230, 4230, 4230, 1423, 1441,  797,  901,  903, 1407,
+        0, 1443, 1457, 1139, 1357, 1414, 1416, 1433, 1432, 1436,
+     1447, 1442, 1447, 1456, 1456, 1458, 1450, 1441, 1459, 1446,
+     1447, 1450, 1466, 1451, 1452, 1458, 1470,    0, 1473, 1456,
+     1485, 1456, 1464, 1472, 1478, 1465, 1475,    0, 1491, 1492,
+
+     1508, 1499, 1499, 1500, 1510, 1511, 1504, 1505, 1523, 1514,
+        0, 1515, 1515, 1511, 1528, 1512, 1532, 1534, 1530, 1533,
+     1534, 1538, 1525, 1542, 1535, 1538, 1556, 1553, 1567, 1573,
+     1569, 1577, 1580, 1565, 1581, 1582,    0,    0, 1577, 1578,
+     1620, 1583, 1609, 1589, 1592, 1674, 1595, 1582, 1588, 1602,
+     1610, 1629, 1624, 1623,    0,  477, 1643, 1645, 1672, 1633,
+     1634, 1636, 1656, 1659, 1660, 1655, 1688, 1682, 1677, 1698,
+     1678, 1692, 1684, 1700, 1701, 1715, 1713, 1700, 1711, 1721,
+     1717, 1722,    0, 1732, 1734, 1724, 1735, 1738, 1733, 1745,
+     1728, 1739,    0, 1751, 1742, 1739, 1736, 1753, 1734, 1749,
+
+     1758, 1750, 1765, 1762, 1765, 1760, 1771, 1769, 1763,    0,
+        0, 1768,    0,    0, 1775, 1781, 1777, 1781, 1795, 1795,
+     1799, 1800, 1802, 4230, 1798, 1792, 1807, 1798, 1803, 1811,
+     1805, 1804, 1800, 4230,  386, 4230, 1802, 1808, 1811, 1825,
+     1827, 1824, 1812, 1814, 1830, 1832, 1837, 1836, 1845, 1848,
+     1839, 1849, 1844, 1859, 1852, 1858, 1865, 1865, 1870, 1858,
+     1870, 1857,  383,  323,  369,  360, 1426, 1594, 1882, 1917,
+     1612, 1653, 1879, 1870, 1882, 1877, 1871, 1875, 1890, 1889,
+     1882, 1891, 1902, 1905, 4230, 1897, 1903, 1900, 1920, 1916,
+     1927,  425,  435, 1886, 4230, 1935, 1940, 1912, 1928, 1919,
+
+     1934, 1920, 1940,  365, 1935, 1925, 1933, 1925, 1948, 1931,
+     1947,    0, 1948, 1957, 1949, 1943, 1943, 1946, 1957, 1962,
+     1969, 1961, 1948, 1969, 1974,    0, 1966, 1982, 1963, 1986,
+     1973, 1991, 1987, 1997, 1982,    0, 1999, 2001, 1992, 1990,
+     2006, 2007, 2013,    0, 1995, 2000, 2014, 2005, 2009, 2018,
+     2023, 2009, 2025, 2026, 2015, 2015, 2032, 2026, 2028,    0,
+     2035, 2049, 2036, 2038, 2047, 2038, 2045, 2059,    0, 2052,
+     2066, 2063,    0, 2053, 2058, 2065, 2072, 2077, 2071, 2081,
+     2065, 2089, 2083, 2081, 2070, 2089, 2083, 2084, 2086, 2091,
+     2096, 2103, 2109, 2110, 2106, 2120, 2127, 2121, 2118, 2110,
+
+     2122, 2121,    0, 2126,    0, 2137, 2144, 2119, 2135, 2135,
+     2141, 2131, 2142, 2146, 2155, 2158, 2153, 2167, 2162, 2152,
+     2155, 2167, 2156, 2170, 2169, 2183, 2184, 2165, 2187, 2188,
+     2177, 2182, 2178, 2199, 2192, 2194, 2189, 2206, 2206, 2209,
+     2199, 2210, 2204, 2205, 2201, 2213, 2209, 2209, 2228, 2219,
+     2230, 2238,    0, 2227,    0, 2233, 2221, 2225, 2235, 2231,
+        0, 2238, 2236, 2238, 2255, 2245, 2254,    0, 2258, 2249,
+     2266, 2258, 2268, 2262, 2258, 2263, 2273, 2254, 2266, 2275,
+     2284, 4230, 2287, 2276, 2277, 2278, 2280,    0, 2286,    0,
+     2296, 2288, 2302, 2300, 2308, 2302, 2296,    0, 2302, 2307,
+
+        0, 4230, 2325, 2328, 4230, 2316, 2328, 2325, 2334, 2317,
+     2333, 2324, 2332, 2321, 2328, 2329, 2339, 2348, 2335, 2346,
+     2346, 2344, 4230,    0,    0, 2338,    0, 2356, 2346,    0,
+     2341, 2353,    0, 2362, 2352, 2369, 2357, 2358, 2375,    0,
+     2374, 2388, 2376, 2374, 2389, 2395, 2399, 2400,    0, 2390,
+     2384, 2386, 2389,    0,    0, 2402,    0, 2394, 2395,    0,
+     2398, 2413, 2400, 2396, 2415, 2403,    0, 2402, 2406,    0,
+     2422, 2410,    0,    0, 2418, 2432, 2456, 2421, 2439,    0,
+     2453, 2448,    0, 2456, 2432, 2461, 2458, 2493,    0, 2450,
+        0, 2448, 2474, 2478, 2466, 2464, 2480, 2460, 2467, 2486,
+
+     2477, 2478, 2491, 2511, 2518, 2494, 2519, 2509, 2520, 2512,
+     2525, 2509,    0, 2506, 2529, 2510, 2516, 2537, 2524, 2520,
+     2527, 2542, 2518, 2543, 2533, 2544,    0, 2533,    0, 2551,
+     2546, 2540, 2541, 2549, 2547, 2563, 2559, 2558, 2580, 2581,
+     2565, 2570, 2567, 2571, 2574, 2571, 2578, 2579, 2587, 2588,
+     2599, 2592, 2583, 2600, 2610, 2596, 2589, 2603, 2596, 2602,
+     2600, 2604, 2605,    0,    0, 2641, 2609, 2607, 2619, 2635,
+     2639, 2632,    0, 2643, 2630, 2641, 2640,    0, 2654, 2655,
+     2644,    0, 2658, 2656, 2656, 2640,    0,    0, 2647, 2667,
+     2651,    0, 4230, 4230, 2651, 2653, 2682, 4230, 4230, 2674,
+
+     2679, 2671, 2683, 2670, 2690, 4230, 2681, 4230, 2698,    0,
+     2686, 2705, 2688, 2702, 2711, 2695, 2705, 2717, 2717, 2706,
+     2719, 2717, 2722, 2711, 2721, 2722, 2727, 2715, 2727, 2739,
+     4230, 2735, 2741, 2733, 2745, 2737, 2734, 2750, 2749, 2747,
+     2756,    0, 2763,    0,    0, 2750,    0, 2754, 2753, 2758,
+     2778,    0, 2760, 2762, 2769, 2766, 2772,    0, 2783, 2775,
+     2772, 2783,    0, 2788,    0, 2785,    0, 2776,    0, 2782,
+     2801, 2784, 2801,    0,    0, 2793, 2794, 2811, 2794, 2791,
+     2803,    0, 2821, 2817, 2829, 2830, 2825, 2829, 2832, 2818,
+     2840, 2827, 2824, 2844, 2843,    0,    0, 2843, 2834, 2842,
+
+     2835, 2836, 2837, 2838, 2839, 2841, 2862, 2861, 2852, 2859,
+     2869, 2873, 2862, 2863,    0, 2868,    0, 2875, 2873, 2874,
+     2874, 2876, 2874, 2895, 2896, 2892, 2901, 2903, 2894, 2891,
+     2900, 2912,    0,    0, 2910,  349, 2891, 2898, 2913, 2914,
+     2896, 2914, 2915, 2910,    0,    0,    0,    0, 2926, 2919,
+     2921, 2920, 2935, 2943, 2930, 2934, 2934, 2940, 2955, 2938,
+        0, 2945,    0, 2940, 2961, 2961, 2948, 2968, 2967, 2968,
+     2972, 2973,    0,    0, 2968,    0,    0, 2958, 2960, 2960,
+     2962, 2979, 2983, 2978, 2979, 2994, 2986, 2985, 2997, 2987,
+        0, 2997, 4230, 3000, 2991, 4230, 2997, 3017, 3006, 3001,
+
+     3023, 3026, 3003,    0, 3010, 4230, 4230, 3006, 3020, 3016,
+     3031, 3023, 3025, 3016, 3036, 4230, 3026, 3030, 3026, 4230,
+      294, 3035, 3044, 3053, 3035, 3052, 3041, 3048, 3059, 3054,
+     3069,    0, 3063, 3069, 3059, 3073,    0, 3070,    0, 3076,
+     3077, 3074,    0, 3070,    0, 3076, 3079, 3084, 3081, 3086,
+     3095, 3081, 3101, 3087, 3092,    0, 3099, 3104, 3100, 3110,
+        0, 3107, 3113, 3116, 3104, 3120, 3102, 3117, 3119, 3124,
+        0, 3126, 3132,    0, 3133, 3143, 3124, 3139, 3133, 3132,
+     3142, 3150,    0, 3149, 3147, 3152, 3160, 3158,    0, 3155,
+     3164, 3145, 3159, 3151, 3154, 3172,    0, 3169, 3168, 3173,
+
+     3179, 3175,    0, 3188,    0, 3172, 3190, 3183, 3218, 3185,
+        0, 3206, 3204,    0, 3200,    0, 3197, 3212, 3197, 3214,
+     3216, 3208, 3211, 3223, 3227, 3231, 3230, 3221, 3233, 3225,
+     3232, 3245, 3235, 3246, 3240, 3243, 3260, 3273, 3261, 3261,
+     3267, 3262, 3276, 3264, 3265, 3279, 3280, 3269, 3279, 3277,
+     3278, 3276, 3284, 3279, 3295, 3290, 3283, 3284, 3325, 3299,
+     4230, 3286, 4230, 3294, 3291, 4230, 3292, 3314, 3303, 3318,
+     4230, 4230, 3322, 3319, 3318, 3324, 3328,    0, 3327, 3328,
+     3326, 3336, 3343, 3336, 3347, 3349, 3334,    0, 3342, 3346,
+     3356, 3343, 3345, 3361,    0, 3352, 3365, 3365, 3362, 3374,
+
+        0, 3383, 3382, 3370,    0, 3376, 3375, 3388, 3386, 3387,
+     3383, 3384, 3385, 3389, 3395, 3383, 3385, 3398, 3395, 3410,
+     3394, 3409, 3418, 3418, 3401, 3424,    0,    0,    0, 3400,
+     3414, 3411, 3428, 3413, 3428, 3437, 3424, 3448,    0,    0,
+     3438, 3451, 3441, 3457, 3446, 3453, 3446, 3464, 3453, 3469,
+     3448, 3462,    0, 3466, 3455,    0, 3458, 3464,    0, 3465,
+     3466, 3471,    0, 3472, 3483, 3470, 3472,    0, 3479,    0,
+     3482,    0, 3486, 3477, 3500, 3492, 3500, 3513, 3497, 3504,
+        0, 3499,    0, 3519, 3513, 3522,    0,    0,    0, 3515,
+     3510, 3517, 3528, 3520, 4230, 3531, 3522, 4230, 3533,    0,
+
+     4230, 3537, 4230, 4230, 3521, 4230, 4230, 3529, 3532,    0,
+     3543,    0, 3536,    0, 3534,    0, 3547, 3539, 3538,    0,
+     3539, 3546,    0, 3552, 3561, 3567,    0, 3557,    0,    0,
+     3567,    0, 3563,    0,    0, 3575, 3566, 3581, 3587,    0,
+     3586, 3589, 3584, 3581, 3594, 3592, 3593, 3596, 3595, 3582,
+     3602,    0, 3589, 3603, 3600, 3591, 3607, 3611, 3610, 3598,
+     3620,    0, 3617, 3618, 3612, 3626, 3623, 3633, 3621, 3632,
+     3643, 3635, 3647, 3639, 3630, 3641, 3636, 3631, 3646, 3655,
+     3656, 3650, 3661, 3658, 3653, 3669,    0,    0, 3656, 3653,
+     3660, 3663, 3662, 3675,    0,    0,    0, 3671,    0, 3683,
+
+        0, 3668,    0, 3680, 3683, 3679, 3682, 4230, 3689, 4230,
+     3692, 3695, 3705, 3693, 3693,    0, 3713, 3716,    0,    0,
+     3698, 3705, 3712,    0,    0, 3707, 3708,    0, 3704,    0,
+        0,    0,    0, 3706, 3726, 3728, 3714, 3732, 3711,    0,
+        0, 3731, 3719, 3731, 3730, 3744, 3732, 3747, 3751,    0,
+     3754, 3742, 3754, 3753, 3754, 3767, 3767, 3762, 3750,    0,
+     3769, 3764, 3760, 3780, 3772, 3769, 3766, 3767, 3776, 3784,
+     3789, 3775, 3775,    0, 3796,    0,    0, 3778,    0, 3799,
+        0,    0, 3783,    0, 3799, 3787, 3794, 3810,    0, 3809,
+     4230, 4230, 4230, 3801, 4230, 4230,    0, 3808, 3804, 3802,
+
+        0, 3818, 3820, 3818, 3812,    0, 3828, 3829, 3837, 3823,
+     3826,    0,    0,    0,    0, 3832, 3832, 3843,    0,    0,
+     3841,    0,    0, 3836, 3848,    0, 3851,    0, 3856, 3841,
+     3852, 3842, 3856, 3848, 3860, 3861, 3866,    0, 3865,    0,
+        0, 3880,    0, 3871,    0, 3882, 3869, 3883, 3870,    0,
+     3881, 4230, 3886,    0, 3883, 3888,    0, 3890,    0, 3899,
+     3900, 3888,    0, 3899, 3902, 3897,    0, 3886, 3900,    0,
+     3896, 3906,    0,    0,    0, 3901,    0, 3895, 3896, 3910,
+     3913, 3920, 3928, 3927, 3932, 3922,    0, 3931, 3932, 3943,
+        0,    0, 3947, 3950,    0, 3931, 3946,    0, 3955,    0,
+
+        0,    0, 3946, 3959, 3960, 3961,    0, 3962, 3964, 3956,
+     3953, 3953, 4230, 3956,    0, 3970, 3972, 3975, 3976,    0,
+     3962,    0,    0, 3981,    0,    0, 3971, 3973,    0,    0,
+     3976, 3979,    0,    0, 3980, 3984, 3991,    0, 3992, 3994,
+     4006, 4001,    0, 4003, 4006, 4017, 4007,    0,    0, 4008,
+     4008, 4015,    0, 4013, 4011,    0, 4230, 4082, 4091, 4100,
+     4109, 4113, 4120, 4129, 4132, 4141, 4150, 4159, 4168, 4177,
+     4186, 4193, 4202, 4211, 4220
     } ;
 
-static yyconst flex_int16_t yy_def[1872] =
+static yyconst flex_int16_t yy_def[1876] =
     {   0,
-     1853,    1, 1854, 1854, 1853,    5, 1853,    7, 1855, 1855,
-     1856, 1856, 1853, 1853, 1853, 1853, 1853, 1857, 1858, 1853,
-     1859, 1853, 1853, 1860, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1853, 1853,
-     1853, 1861, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859,   36, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-
-     1862, 1863, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-     1853, 1864, 1865, 1866, 1853, 1853, 1853, 1853, 1857, 1858,
-     1858, 1853, 1853, 1859, 1859, 1859, 1867,   22, 1859, 1853,
-     1853, 1860, 1853, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1868, 1853,
-     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1853, 1869, 1853,
-     1870, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-     1853, 1862, 1853, 1862, 1863, 1871, 1853, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1864, 1853, 1865,
-     1866, 1853, 1853, 1853, 1853, 1853, 1859, 1859, 1853, 1859,
-     1853, 1853, 1853, 1853, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1868, 1853, 1853, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1869, 1869, 1870, 1870, 1853, 1853, 1853, 1853, 1853, 1853,
-     1862, 1871, 1871, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1853, 1859, 1859, 1859, 1859, 1859,
-
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1853, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-     1853, 1853, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1853, 1853,
-
-     1853, 1862, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1853,
-     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-
-     1853, 1853, 1853, 1853, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1862, 1853, 1853, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-     1853, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1859, 1859,
-
-     1859, 1862, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1853, 1853, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1859, 1859, 1853, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1853, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1853, 1859, 1853, 1853, 1853, 1853,
-
-     1853, 1853, 1853, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-
-     1859, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1853, 1853, 1853, 1853, 1853,
-     1853, 1853, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1853, 1853, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1853, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1853, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-     1859, 1859,    0, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-     1853
+     1857,    1, 1857,    3, 1857,    5, 1857,    7, 1858, 1858,
+     1859, 1859, 1857, 1857, 1857, 1857, 1857, 1860, 1861, 1857,
+     1862, 1863, 1857, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
+     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
+     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1864, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1865, 1857, 1862, 1862, 1862,
+     1862, 1862, 1862, 1862, 1862, 1862, 1862,   35, 1862, 1862,
+     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1866, 1867, 1857, 1857, 1857, 1857,
+     1857, 1868, 1869, 1870, 1857, 1857, 1857, 1857, 1860, 1861,
+     1861, 1857, 1857, 1862, 1862, 1862, 1871, 1863, 1862, 1857,
+     1857, 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, 1862, 1862, 1862, 1862, 1862, 1862,
+     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
+     1862, 1862, 1862, 1862, 1862, 1862, 1864, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1872, 1857, 1857, 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, 1857, 1873, 1857,
+     1874, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1866, 1866, 1857, 1867, 1875, 1857, 1857, 1868, 1857, 1869,
+     1870, 1857, 1857, 1857, 1857, 1857, 1857, 1862, 1862, 1857,
+     1862, 1857, 1857, 1857, 1857, 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, 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, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1872, 1857, 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, 1873, 1873, 1874, 1874, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1866, 1875, 1875, 1857, 1857, 1857, 1857, 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,
+     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, 1862, 1862, 1862, 1862, 1862, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1862, 1862, 1862, 1862, 1862,
+     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
+
+     1862, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1866, 1857, 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, 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, 1862,
+     1862, 1862, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1862, 1862,
+     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1866, 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, 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, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+
+     1857, 1857, 1862, 1862, 1862, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1866, 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, 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, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1862, 1862,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 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, 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,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1862,
+
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 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,
+     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
+
+     1862, 1862, 1862, 1862, 1862, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 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, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 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,
+     1857, 1857, 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, 1857, 1862, 1862,
+     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
+
+     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
+     1862, 1862, 1857, 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,    0, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857
     } ;
 
-static yyconst flex_int16_t yy_nxt[2382] =
+static yyconst flex_int16_t yy_nxt[4313] =
     {   0,
        14,   15,   16,   15,   15,   14,   17,   18,   14,   17,
        19,   14,   14,   14,   20,   21,   22,   23,   23,   14,
-       14,   14,   24,   14,   14,   14,   14,   25,   26,   27,
-       28,   29,   30,   31,   32,   33,   34,   35,   36,   37,
-       38,   39,   40,   41,   42,   43,   44,   45,   46,   47,
-       48,   48,   48,   14,   14,   14,   49,   50,  121,  330,
-      121,  121,  121,  122,  121,  121,  123,  122,  983,   51,
-      123,  125,  135,  135,  126,  331,   52,  125,  186,   51,
-      126,   53,  187,   54,   55,   56,  136,  179,  127,   57,
-      984,  180,   58,   59,  127,  181,   60,   61,   62,   63,
-
-       64,   65,  128,   66,  128,  128,  245,   50,  246,   50,
-       49,   50,  132,  985,  133,  133,  140,  170,  133,  133,
-      144,  171,  145,   51,  160,  172,  200,  161,  162,  146,
-       52,  173,  141,   51,  174,   53,  986,   54,   55,   56,
-      201,  163,  263,   57,  164,  241,   58,   59,  264,  242,
-       60,   61,   62,   63,   64,   65,  257,   66,  284,  265,
-      258,   50,  187,   50,   14,   15,   49,   67,   15,   14,
+       14,   14,   24,   25,   26,   27,   28,   29,   30,   31,
+       32,   33,   34,   35,   36,   37,   38,   39,   40,   41,
+       42,   43,   44,   45,   46,   47,   47,   47,   48,   14,
+       14,   14,   14,   24,   25,   26,   27,   28,   29,   30,
+       31,   32,   33,   34,   35,   36,   37,   38,   39,   40,
+       41,   42,   43,   44,   45,   46,   47,   47,   47,   14,
+       14,   14,   14,   14,   49,   50,   14,   14,   14,   14,
+       14,   14,   14,   14,   14,   14,   14,   51,   14,   14,
+
+       14,   14,   14,   14,   52,   14,   53,   54,   55,   14,
+       14,   14,   56,   14,   14,   57,   58,   14,   14,   59,
+       60,   61,   62,   63,   64,   14,   65,   14,   14,   14,
+       66,   14,   14,   51,   14,   52,   14,   53,   54,   55,
+       14,   14,   14,   56,   14,   14,   57,   58,   14,   14,
+       59,   60,   61,   62,   63,   64,   14,   65,   14,   14,
+       14,   50,   14,   50,   14,   15,   49,   67,   15,   14,
        17,   14,   14,   17,   19,   14,   14,   14,   20,   21,
-       22,   23,   23,   14,   14,   14,   14,   14,   14,   14,
-       14,   68,   69,   70,   71,   72,   73,   74,   75,   76,
-
-       48,   77,   78,   79,   80,   81,   82,   48,   83,   84,
-       85,   86,   48,   87,   48,   48,   48,   50,   14,   50,
-       88,   89,   49,   90,   89,   91,   92,   88,   93,   94,
-       88,   88,   88,   88,   95,   96,   88,   97,   97,   98,
-       99,  100,  101,   88,   88,   88,  102,  103,  104,  105,
-      106,  107,  108,  109,   88,  110,   88,   88,  111,   88,
-      112,  113,   88,   88,  114,   88,  115,   88,   88,  116,
-       88,   88,   88,  117,  118,  119,  137,  137,  137,  137,
+       22,   23,   23,   14,   14,   14,   68,   69,   70,   71,
+       72,   73,   74,   75,   76,   47,   77,   78,   79,   80,
+
+       81,   82,   47,   83,   84,   85,   86,   47,   87,   47,
+       47,   47,   14,   14,   14,   14,   14,   68,   69,   70,
+       71,   72,   73,   74,   75,   76,   47,   77,   78,   79,
+       80,   81,   82,   47,   83,   84,   85,   86,   47,   87,
+       47,   47,   47,   50,   14,   50,   88,   89,   49,   90,
+       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,
+
+      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,  802,
+      121,  121,  121,  122,  121,  121,  123,  122,  125,  125,
+      123,  126,  126,  128, 1372,  128,  128,  132,  183,  133,
+      133,  135,  135,  184,  319,  213,  249,  185,  250,  251,
+      136,  345,  320, 1304,  140,  346,  133,  133,  128,  802,
+      128,  128,  593,  564,  346,  141,  142,  354,  143,  183,
+      354,  127,  127,  830,  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,
+      566,  137,  198,  137,  145,  252,  144,  239,  146,  566,
+      354,  240,  147,  163,  164,  165,  199,  253,  254,  166,
+      256,  148,  255,  564,  149,  167,  536,  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,  593,  151,  346,  158,  152,
+      153,  159,  160,  154,  263,  593,  155,  823,  264,  156,
+      157,  708,  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,  566,  190,
+      284,  564,  191,  261,  185,  192,  536,  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, 1857,
+
+      304,  331,  301,  314,  314,  335,  305,  302,  290,  306,
+     1857,  294,  315,  324,  594,  594,  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, 1857,  343,
+      128,  234,  128,  128,  361,  329,  333, 1857,  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, 1857,  136,  357,
+
+      358, 1857,  366,  359,  359,  362,  362,  268,  356,  367,
+     1857,  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,
-      138,  138,  139,  138,  138,  137,  138,  137,  137,  137,
-
-      137,  138,  137,  138,  138,  138,  138,  138,  138,  138,
-      138,  138,  138,  138,  138,  138,  138,  138,  138,  138,
-      138,  138,  138,  138,  138,  138,  138,  138,  138,  137,
-      137,  137,  147,  282,  283,  128,  148,  128,  128,  152,
-      149,  153,  175,  308,  154,  155,  176,  175,  156,  150,
-      177,  157,  151,  341,  158,  159,  165,  166,  167,  178,
-      182,  183,  168,  987,  281,  250,  250,  184,  169,  188,
-      195,  189,  251,  190,  196,  287,  372,  191,  197,  288,
-      192,  202,  203,  193,  209,  323,  194,  373,  210,  204,
-      198,  205,  211,  206,  199,  212,  207,  208,  213,  216,
-
-      269,  214,  270,  217,  243,  244,  324,  218,  245,  146,
-      246,  988,  247,  219,  220,  221,  222,  248,  230,  223,
-      224,  298,  231,  326,  225,  218,  232,  327,  226,  236,
-      328,  227,  233,  228,  329,  234,  229,  152,  237,  153,
-      238,  321,  235,  989,  239,  339,  272,  274,  240,  273,
-      161,  275,  158,  276,  277,  170,  337,  285,  290,  171,
-      340,  286,  294,  279,  278,  134,  291,  319,  205,  280,
-      295,  134,  236,  292,  293,  320,  296,  299,  300,  297,
-      303,  237,  332,  307,  304,  333,  334,  239,  342,  301,
-      305,  471,  343,  306,  302,  128,  472,  128,  128,  128,
-
-      335,  128,  128,  312,  375,  313,  313,  314,  314,  316,
-      376,  313,  313,  128,  353,  128,  128,  353,  354,  354,
-      128,  315,  128,  128,  140,  317,  133,  133,  135,  135,
-      990,  353,  355,  356,  357,  361,  361,  358,  358,  365,
-      141,  367,  136,  363,  363,  368,  366,  364,  364,  362,
-      378,  383,  369,  385,  394,  386,  389,  553,  370,  399,
-      390,  396,  397,  400,  379,  402,  413,  554,  395,  403,
-      405,  384,  406,  407,  414,  428,  408,  420,  421,  432,
-      415,  441,  451,  422,  433,  434,  452,  437,  449,  438,
-      439,  429,  991,  430,  423,  440,  450,  442,  431,  443,
-
-      444,  445,  460,  465,  461,  468,  466,  446,  473,  474,
-      490,  469,  495,  467,  475,  485,  486,  501,  476,  477,
-      799,  478,  497,  496,  498,  502,  250,  250,  487,  527,
-      499,  368,  399,  251,  491,  564,  540,  503,  369,  536,
-      558,  537,  528,  405,  370,  542,  407,  544,  497,  314,
-      314,  496,  316,  422,  313,  313,  499,  314,  314,  567,
-      567,  565,  565,  315,  545,  566,  566,  323,  317,  580,
-      573,  315,  327,  568,  569,  569,  617,  571,  570,  570,
-      577,  578,  581,  589,  618,  590,  354,  354,  356,  356,
-      592,  592,  592,  592,  358,  358,  358,  358,  361,  361,
-
-      355,  594,  594,  364,  364,  595,  595,  364,  364,  621,
-      635,  640,  362,  652,  659,  684,  709,  653,  636,  685,
-      710,  641,  739,  715,  660,  799,  622,  672,  673,  721,
-      674,  716,  675,  676,  740,  677,  719,  724,  678,  992,
-      722,  679,  760,  562,  725,  680,  681,  761,  836,  682,
-      688,  689,  659,  690,  323,  691,  692,  802,  693,  993,
-      720,  694,  790,  566,  566,  566,  566,  837,  695,  696,
-      567,  567,  697,  800,  800,  570,  570,  801,  801,  570,
-      570,  573,  929,  327,  568,  573,  930,  803,  592,  592,
-      595,  595,  595,  595,  844,  882,  845,  891,  947,  902,
-
-      919,  994,  883,  948,  892,  903,  920,  976,  995,  996,
-      997,  977,  998,  999, 1000, 1001, 1002,  904,  921, 1003,
-     1004, 1005, 1006, 1007, 1008, 1009,  882, 1010,  929, 1011,
-     1012, 1013, 1014,  801,  801,  801,  801,  323, 1016, 1017,
-     1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027,
-     1028, 1029, 1030, 1031, 1032, 1015, 1033, 1034, 1035, 1036,
-     1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1046, 1045,
-     1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056,
-     1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066,
-     1067, 1068, 1069, 1070, 1071, 1072, 1078, 1079, 1080, 1083,
-
-     1081, 1084, 1085, 1086, 1092, 1073, 1093, 1094, 1074, 1075,
-     1082, 1087, 1076, 1077, 1088, 1095, 1096, 1089, 1097, 1098,
-     1099, 1090, 1100, 1101, 1102, 1103, 1091, 1104, 1105, 1106,
-     1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116,
-     1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126,
-     1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136,
-     1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146,
-     1147, 1148, 1150, 1151, 1152, 1153, 1154, 1156, 1157, 1158,
-     1149, 1159, 1160, 1155, 1161, 1162, 1163, 1164, 1166, 1165,
-     1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176,
-
-     1177, 1178, 1180, 1181, 1183, 1184, 1185, 1179, 1186, 1187,
-     1188, 1189, 1190, 1182, 1192, 1193, 1194, 1195, 1196, 1197,
-     1198, 1044, 1059, 1045, 1072, 1082, 1089, 1199, 1144, 1191,
-     1200, 1201,  323, 1203, 1204, 1091, 1205, 1206, 1207, 1202,
-     1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217,
-     1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227,
-     1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237,
-     1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247,
-     1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257,
-     1258, 1259, 1260, 1261, 1262, 1263, 1265, 1266, 1267, 1268,
-
-     1269, 1270, 1271, 1264, 1272, 1273, 1274, 1275, 1276, 1277,
-     1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287,
-     1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297,
-     1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307,
-     1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317,
-     1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327,
-     1328, 1329, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338,
-     1339, 1340, 1341, 1342, 1343, 1344, 1345, 1330, 1346, 1347,
-     1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357,
-     1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367,
-
-     1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377,
-     1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387,
-     1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397,
-     1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407,
-     1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417,
-     1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427,
-     1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437,
-     1438, 1440, 1439, 1441, 1443, 1444, 1445, 1449, 1450, 1451,
-     1452, 1453, 1454, 1455, 1456, 1457, 1446, 1458, 1447, 1459,
-     1460, 1461, 1448, 1442, 1462, 1463, 1464, 1465, 1466, 1467,
-
-     1468, 1469, 1470, 1471, 1472, 1473, 1474, 1476, 1475, 1477,
-     1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487,
-     1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1444, 1445,
-     1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505,
-     1506, 1447, 1507, 1508, 1509, 1448, 1510, 1511, 1512, 1513,
-     1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523,
-     1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533,
-     1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543,
-     1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553,
-     1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563,
-
-     1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1573, 1574,
-     1576, 1577, 1578, 1579, 1580, 1572, 1581, 1582, 1583, 1584,
-     1585, 1586, 1587, 1588, 1589, 1575, 1590, 1591, 1592, 1593,
-     1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603,
-     1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613,
-     1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623,
-     1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633,
-     1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643,
-     1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653,
-     1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663,
-
-     1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673,
-     1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683,
-     1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693,
-     1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703,
-     1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713,
-     1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723,
-     1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733,
-     1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743,
-     1744, 1745, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754,
-     1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1746, 1763,
-
-     1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773,
-     1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783,
-     1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793,
-     1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803,
-     1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813,
-     1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823,
-     1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833,
-     1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843,
-     1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852,   14,
-       14,   14,   14,   14,   14,   14,   14,   14,  120,  120,
-
-      120,  120,  120,  120,  120,  120,  120,  124,  124,  124,
-      124,  124,  124,  124,  124,  124,  129,  982,  129,  129,
-      129,  129,  129,  129,  129,  130,  981,  130,  130,  130,
-      130,  130,  130,  130,  134,  134,  142,  142,  142,  142,
-      142,  142,  142,  142,  142,  249,  980,  249,  322,  322,
-      322,  322,  322,  322,  322,  322,  322,  325,  325,  325,
-      325,  325,  325,  325,  325,  325,  348,  348,  348,  348,
-      348,  348,  348,  348,  348,  350,  350,  350,  350,  350,
-      350,  350,  350,  350,  351,  351,  351,  979,  978,  351,
-      351,  975,  351,  137,  137,  137,  137,  137,  137,  137,
-
-      137,  137,  515,  974,  973,  515,  515,  972,  515,  561,
-      561,  561,  971,  561,  561,  561,  561,  561,  563,  563,
-      563,  563,  970,  563,  563,  563,  563,  572,  572,  572,
-      572,  572,  572,  572,  572,  572,  969,  968,  967,  966,
-      965,  964,  963,  962,  961,  960,  959,  958,  957,  956,
-      955,  954,  953,  952,  951,  950,  949,  946,  945,  944,
-      943,  942,  941,  940,  939,  938,  937,  936,  935,  934,
-      933,  932,  931,  928,  927,  926,  925,  924,  923,  922,
-      918,  917,  916,  915,  914,  913,  912,  911,  910,  909,
-      908,  907,  906,  905,  901,  900,  899,  898,  897,  896,
-
-      895,  894,  893,  890,  889,  888,  887,  886,  885,  884,
-      881,  880,  879,  878,  877,  876,  875,  874,  873,  872,
-      871,  870,  869,  868,  867,  866,  865,  864,  863,  862,
-      861,  860,  859,  858,  857,  856,  855,  854,  853,  852,
-      851,  850,  849,  848,  847,  846,  843,  842,  841,  840,
-      839,  838,  835,  834,  833,  832,  831,  830,  829,  828,
-      827,  826,  825,  824,  823,  822,  821,  820,  819,  818,
-      817,  816,  815,  814,  813,  812,  811,  810,  809,  808,
-      807,  806,  805,  804,  564,  562,  761,  798,  797,  796,
-      795,  739,  721,  794,  715,  793,  709,  792,  685,  791,
-
-      789,  652,  788,  787,  636,  786,  621,  785,  618,  784,
-      783,  782,  781,  780,  779,  778,  777,  776,  775,  774,
-      773,  772,  771,  770,  769,  768,  767,  516,  766,  765,
-      764,  763,  762,  759,  758,  757,  756,  755,  754,  753,
-      752,  751,  750,  749,  748,  747,  746,  745,  744,  743,
-      742,  741,  738,  737,  736,  735,  734,  733,  732,  731,
-      730,  729,  728,  727,  726,  723,  718,  717,  714,  713,
-      712,  711,  708,  707,  706,  705,  704,  703,  702,  701,
-      700,  699,  698,  687,  686,  683,  671,  670,  669,  668,
-      667,  666,  665,  664,  663,  662,  661,  658,  657,  656,
-
-      655,  654,  651,  650,  649,  648,  647,  646,  645,  644,
-      643,  642,  639,  638,  637,  634,  633,  632,  631,  630,
-      629,  628,  627,  626,  625,  624,  623,  620,  619,  616,
-      615,  614,  613,  612,  611,  610,  609,  608,  607,  606,
-      605,  604,  603,  602,  601,  600,  599,  598,  597,  596,
-      593,  349,  349,  591,  588,  587,  586,  585,  584,  583,
-      582,  579,  576,  575,  574,  310,  327,  323,  564,  562,
-      560,  559,  500,  557,  490,  556,  555,  477,  469,  552,
-      461,  551,  550,  549,  450,  443,  548,  433,  547,  546,
-      543,  415,  541,  397,  394,  539,  538,  535,  372,  365,
-
-      534,  533,  532,  531,  530,  529,  526,  525,  524,  523,
-      522,  521,  520,  519,  518,  517,  516,  514,  513,  512,
-      511,  510,  509,  508,  507,  506,  505,  504,  500,  494,
-      493,  492,  489,  488,  484,  483,  482,  481,  480,  479,
-      470,  464,  463,  462,  459,  458,  457,  456,  455,  454,
-      453,  448,  447,  436,  435,  427,  426,  425,  424,  419,
-      418,  417,  416,  412,  411,  410,  409,  404,  401,  398,
-      393,  392,  391,  388,  387,  382,  381,  380,  377,  374,
-      371,  143,  360,  359,  131,  131,  352,  352,  349,  349,
-      347,  342,  346,  345,  344,  338,  336,  320,  321,  318,
-
-      311,  310,  309,  308,  289,  180,  271,  268,  267,  266,
-      262,  261,  260,  259,  256,  255,  254,  253,  252,  215,
-      185,  143,  131, 1853,   13, 1853, 1853, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-     1853
+      137,  137,  137,  137,  384,  363,  139, 1857,  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, 1857,  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, 1857,  421,  422,  410,  416,  400,
+     1857,  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,  523,
+      524,  525,  504,  516,  526,  517,  529,  527,  518,  519,
+      530,  522,  531,  532,  533,  534,  366,  520,  373,  521,
+      528,  369,  537,  538,  540,  539,  541,  395,  370,  398,
+      523,  524,  525,  543,  371,  526,  400,  529,  527,  416,
+      542,  530,  522,  531,  532,  533,  534,  366,  545,  373,
+
+      548,  528,  369,  537,  538,  540,  539,  541,  395,  370,
+      398,  549,  434,  550,  543,  371,  406,  400,  544,  408,
+      416,  542,  546,  444,  451,  551,  552,  553,  423,  545,
+      462,  548,  554,  470,  478,  555,  557,  558,  491,  547,
+      559,  560,  549,  434,  550,  556,  501,  406,  561,  544,
+      408,  562,  497,  546,  444,  451,  551,  552,  553,  423,
+     1857,  462, 1857,  554,  470,  478,  555,  557,  558,  491,
+      547,  559,  560,  498,  365,  365,  556,  501, 1857,  561,
+      310,  500,  562,  497,  314,  314,  316,  573,  313,  313,
+      314,  314,  574,  315,  569,  569,  575,  317,  578,  315,
+
+      581,  567,  567,  570,  498,  568,  568,  576,  577,  571,
+      571,  310,  500,  572,  572,  582,  583,  584,  573,  579,
+      585,  586,  587,  574,  315,  590, 1857,  575,  317,  578,
+      315,  581,  580,  588,  570,  589,  591,  595,  576,  577,
+      355,  355,  598,  568,  568,  599,  582,  583,  584,  356,
+      579,  585,  586,  587,  357,  357,  590,  343,  594,  594,
+      362,  362,  600,  580,  588,  601,  589,  591,  595,  363,
+      596,  596,  602,  598,  597,  597,  599,  603,  604,  605,
+      356,  606,  607,  608,  609,  610,  611,  612,  613,  614,
+      615,  616,  617,  600,  618,  621,  601,  619,  622,  625,
+
+      363,  626,  627,  602,  628,  620,  629,  623,  603,  604,
+      605,  630,  606,  607,  608,  609,  610,  611,  612,  613,
+      614,  615,  616,  617,  624,  618,  621,  631,  619,  622,
+      625,  632,  626,  627,  633,  628,  620,  629,  623,  634,
+      635,  636,  630,  637,  639,  640,  641,  642,  644,  645,
+      646,  638,  647,  648,  649,  624,  650,  643,  631,  651,
+      652,  653,  632,  654,  656,  633,  657,  655,  658,  659,
+      634,  635,  636,  660,  637,  639,  640,  641,  642,  644,
+      645,  646,  638,  647,  648,  649,  661,  650,  643,  663,
+      651,  652,  653,  664,  654,  656,  662,  657,  655,  658,
+
+      659,  665,  666,  667,  660,  668,  669,  670,  671,  672,
+      673,  568,  568,  685, 1857,  688, 1857,  661,  689, 1857,
+      663,  700, 1857,  701,  664, 1857,  702,  662,  703,  572,
+      572,  686,  665,  666,  667,  687,  668,  669,  670,  671,
+      672,  673,  674,  675,  685,  676,  688,  677,  678,  689,
+      679,  704,  700,  680,  701,  705,  681,  702,  706,  703,
+      682,  683,  686,  707,  684, 1857,  687,  709, 1857,  710,
+      572,  572,  713,  674,  675,  714,  676,  715,  677,  678,
+      716,  679,  704, 1857,  680,  717,  705,  681,  719,  706,
+      720,  682,  683,  718,  707,  684,  690,  691,  709,  692,
+
+      710,  693,  694,  713,  695,  711,  714,  696,  715,  712,
+      721,  716,  723,  725,  697,  698,  717,  728,  699,  719,
+      729,  720,  726,  724,  718,  730,  731,  690,  691,  727,
+      692,  732,  693,  694,  722,  695,  711,  733,  696,  734,
+      712,  721,  735,  723,  725,  697,  698,  736,  728,  699,
+      737,  729,  738,  726,  724,  739,  730,  731,  740,  741,
+      727,  743,  732,  744,  745,  722,  746,  747,  733,  748,
+      734,  742,  749,  735,  750,  751,  752,  753,  736,  754,
+      755,  737,  756,  738,  757,  758,  739,  759,  760,  740,
+      741,  761,  743,  764,  744,  745,  762,  746,  747,  765,
+
+      748,  763,  742,  749,  766,  750,  751,  752,  753,  767,
+      754,  755,  768,  756,  769,  757,  758,  770,  759,  760,
+      771,  772,  761,  773,  764,  774,  775,  762,  776,  777,
+      765,  778,  763,  779,  780,  766,  781,  782,  783,  784,
+      767,  785,  786,  768,  787,  769,  620,  788,  770,  623,
+      789,  771,  772,  638,  773,  790,  774,  775,  791,  776,
+      777,  654,  778,  792,  779,  780,  661,  781,  782,  783,
+      784,  794,  785,  786,  687,  787,  793,  620,  788,  795,
+      623,  789,  711,  796,  638,  717,  790,  797,  723,  791,
+      741,  798,  654,  799,  792,  800,  801,  661,  763,  569,
+
+      569,  805,  794,  594,  594,  687,  806,  793,  570,  807,
+      795,  808,  809,  711,  796,  810,  717,  811,  797,  723,
+      812,  741,  798,  813,  799,  814,  800,  801,  815,  763,
+      803,  803,  805,  816,  804,  804,  817,  806,  818,  570,
+      807,  819,  808,  809,  820,  821,  810,  824,  811,  822,
+      825,  812,  597,  597,  813,  826,  814,  597,  597,  815,
+      827,  828,  829,  831,  816,  832,  833,  817,  834,  818,
+      835,  836,  819,  837,  838,  820,  821,  343,  824,  839,
+      822,  825,  841,  842,  843,  844,  826,  845,  846,  849,
+      850,  827,  828,  829,  831,  851,  832,  833,  840,  834,
+
+      852,  835,  836,  853,  837,  838,  847,  854,  848,  855,
+      839,  856,  857,  841,  842,  843,  844,  858,  845,  846,
+      849,  850,  859,  860,  861,  862,  851,  863,  864,  840,
+      865,  852,  866,  867,  853,  868,  869,  847,  854,  848,
+      855,  870,  856,  857,  871,  872,  873,  874,  858,  875,
+      876,  877,  878,  859,  860,  861,  862,  879,  863,  864,
+      880,  865,  881,  866,  867,  882,  868,  869,  883,  884,
+      887,  888,  870,  889,  890,  871,  872,  873,  874,  885,
+      875,  876,  877,  878,  891,  892,  886,  893,  879,  896,
+      894,  880,  897,  881,  898,  899,  882,  895,  900,  883,
+
+      884,  887,  888,  901,  889,  890,  902,  903,  904,  908,
+      885,  909,  910,  905,  911,  891,  892,  886,  893,  906,
+      896,  894,  912,  897,  913,  898,  899,  914,  895,  900,
+      915,  907,  916,  917,  901,  918,  919,  902,  903,  904,
+      908,  920,  909,  910,  905,  911,  921,  925,  926,  927,
+      906,  922,  928,  912,  929,  913,  930,  923,  914,  931,
+      934,  915,  907,  916,  917,  935,  918,  919,  936,  924,
+      932,  937,  920,  938,  933,  939,  940,  921,  925,  926,
+      927,  941,  922,  928,  942,  929,  943,  930,  923,  944,
+      931,  934,  945,  946,  947,  948,  935,  949,  950,  936,
+
+      924,  932,  937,  951,  938,  933,  939,  940,  952,  953,
+      954,  955,  941,  956,  957,  942,  958,  943,  959,  960,
+      944,  961,  962,  945,  946,  947,  948,  963,  949,  950,
+      964,  965,  966,  967,  951,  968,  969,  970,  971,  952,
+      953,  954,  955,  972,  956,  957,  973,  958,  974,  959,
+      960,  975,  961,  962,  976,  977,  978,  981,  963,  982,
+      983,  964,  965,  966,  967,  984,  968,  969,  970,  971,
+      985,  979,  986,  987,  972,  980,  988,  973,  989,  974,
+      990,  991,  975,  992,  993,  976,  977,  978,  981,  994,
+      982,  983,  995,  996,  997,  998,  984,  999, 1000, 1001,
+
+     1002,  985,  979,  986,  987, 1003,  980,  988, 1004,  989,
+     1005,  990,  991, 1006,  992,  993, 1007, 1008, 1009, 1010,
+      994, 1011, 1012,  995,  996,  997,  998, 1013,  999, 1000,
+     1001, 1002,  885, 1014,  932, 1015, 1003, 1016, 1017, 1004,
+     1018, 1005,  804,  804, 1006,  804,  804, 1007, 1008, 1009,
+     1010, 1019, 1011, 1012, 1020, 1021, 1022, 1023, 1013, 1024,
+     1025, 1026, 1027,  885, 1014,  932, 1015, 1028, 1016, 1017,
+     1029, 1018, 1030, 1031, 1032, 1033, 1034, 1036, 1037, 1038,
+     1039, 1035, 1019, 1040, 1041, 1020, 1021, 1022, 1023, 1042,
+     1024, 1025, 1026, 1027,  343, 1043, 1044, 1045, 1028, 1046,
+
+     1047, 1029, 1050, 1030, 1031, 1032, 1033, 1034, 1036, 1037,
+     1038, 1039, 1035, 1051, 1040, 1041, 1048, 1052, 1049, 1053,
+     1042, 1054, 1055, 1056, 1057, 1058, 1043, 1044, 1045, 1059,
+     1046, 1047, 1060, 1050, 1061, 1062, 1063, 1064, 1065, 1066,
+     1067, 1068, 1069, 1070, 1051, 1071, 1072, 1048, 1052, 1049,
+     1053, 1073, 1054, 1055, 1056, 1057, 1058, 1074, 1075, 1857,
+     1059, 1082, 1857, 1060, 1083, 1061, 1062, 1063, 1064, 1065,
+     1066, 1067, 1068, 1069, 1070, 1084, 1071, 1072, 1087, 1088,
+     1076, 1085, 1073, 1089, 1090, 1096, 1857, 1097, 1074, 1075,
+     1077, 1086, 1082, 1078, 1079, 1083, 1857, 1080, 1081, 1098,
+
+     1099, 1857, 1100, 1101, 1102, 1103, 1084, 1104, 1105, 1087,
+     1088, 1076, 1085, 1106, 1089, 1090, 1096, 1091, 1097, 1107,
+     1092, 1077, 1086, 1093, 1078, 1079, 1108, 1094, 1080, 1081,
+     1098, 1099, 1095, 1100, 1101, 1102, 1103, 1109, 1104, 1105,
+     1110, 1111, 1112, 1113, 1106, 1114, 1115, 1116, 1091, 1117,
+     1107, 1092, 1118, 1119, 1093, 1120, 1121, 1108, 1094, 1122,
+     1123, 1124, 1125, 1095, 1126, 1127, 1128, 1129, 1109, 1130,
+     1131, 1110, 1111, 1112, 1113, 1132, 1114, 1115, 1116, 1133,
+     1117, 1134, 1135, 1118, 1119, 1136, 1120, 1121, 1137, 1138,
+     1122, 1123, 1124, 1125, 1139, 1126, 1127, 1128, 1129, 1140,
+
+     1130, 1131, 1141, 1142, 1143, 1144, 1132, 1145, 1146, 1147,
+     1133, 1148, 1134, 1135, 1149, 1150, 1136, 1151, 1152, 1137,
+     1138, 1154, 1155, 1156, 1157, 1139, 1160, 1153, 1161, 1162,
+     1140, 1163, 1164, 1141, 1142, 1143, 1144, 1158, 1145, 1146,
+     1147, 1165, 1148, 1166, 1159, 1149, 1150, 1167, 1151, 1152,
+     1170, 1171, 1154, 1155, 1156, 1157, 1172, 1160, 1153, 1161,
+     1162, 1173, 1163, 1164, 1168, 1174, 1169, 1175, 1158, 1176,
+     1177, 1178, 1165, 1179, 1166, 1159, 1180, 1181, 1167, 1182,
+     1184, 1170, 1171, 1185, 1187, 1183, 1188, 1172, 1189, 1190,
+     1191, 1192, 1173, 1186, 1193, 1168, 1174, 1169, 1175, 1196,
+
+     1176, 1177, 1178, 1197, 1179, 1198, 1194, 1180, 1181, 1199,
+     1182, 1184, 1200, 1201, 1185, 1187, 1183, 1188, 1202, 1189,
+     1190, 1191, 1192, 1195, 1186, 1193, 1048, 1063, 1049, 1076,
+     1196, 1086, 1093, 1203, 1197, 1148, 1198, 1194, 1204, 1205,
+     1199, 1095, 1206, 1200, 1201, 1207, 1208, 1209, 1210, 1202,
+     1211, 1212, 1213, 1214, 1195, 1215, 1216, 1048, 1063, 1049,
+     1076, 1217, 1086, 1093, 1203, 1218, 1148, 1219, 1220, 1204,
+     1205, 1221, 1095, 1206, 1222, 1223, 1207, 1208, 1209, 1210,
+     1224, 1211, 1212, 1213, 1214, 1225, 1215, 1216, 1226, 1227,
+     1228, 1229, 1217, 1230, 1231,  343, 1218, 1232, 1219, 1220,
+
+     1233, 1234, 1221, 1235, 1236, 1222, 1223, 1237, 1238, 1239,
+     1240, 1224, 1241, 1242, 1243, 1244, 1225, 1245, 1246, 1226,
+     1227, 1228, 1229, 1247, 1230, 1231, 1248, 1249, 1232, 1250,
+     1251, 1233, 1234, 1252, 1235, 1236, 1253, 1254, 1237, 1238,
+     1239, 1240, 1255, 1241, 1242, 1243, 1244, 1256, 1245, 1246,
+     1257, 1258, 1259, 1260, 1247, 1261, 1262, 1248, 1249, 1263,
+     1250, 1251, 1264, 1265, 1252, 1266, 1267, 1253, 1254, 1269,
+     1270, 1271, 1272, 1255, 1268, 1273, 1274, 1275, 1256, 1276,
+     1277, 1257, 1258, 1259, 1260, 1278, 1261, 1262, 1279, 1280,
+     1263, 1281, 1282, 1264, 1265, 1283, 1266, 1267, 1284, 1285,
+
+     1269, 1270, 1271, 1272, 1286, 1268, 1273, 1274, 1275, 1287,
+     1276, 1277, 1288, 1289, 1290, 1291, 1278, 1292, 1293, 1279,
+     1280, 1294, 1281, 1282, 1295, 1296, 1283, 1297, 1298, 1284,
+     1285, 1299, 1300, 1301, 1302, 1286, 1303, 1305, 1306, 1307,
+     1287, 1308, 1309, 1288, 1289, 1290, 1291, 1310, 1292, 1293,
+     1311, 1312, 1294, 1313, 1314, 1295, 1296, 1315, 1297, 1298,
+     1316, 1317, 1299, 1300, 1301, 1302, 1318, 1303, 1305, 1306,
+     1307, 1319, 1308, 1309, 1320, 1321, 1322, 1323, 1310, 1324,
+     1325, 1311, 1312, 1326, 1313, 1314, 1327, 1328, 1315, 1329,
+     1330, 1316, 1317, 1331, 1332, 1335, 1333, 1318, 1336, 1337,
+
+     1338, 1339, 1319, 1340, 1341, 1320, 1321, 1322, 1323, 1342,
+     1324, 1325, 1334, 1343, 1326, 1344, 1345, 1327, 1328, 1346,
+     1329, 1330, 1347, 1348, 1331, 1332, 1335, 1333, 1349, 1336,
+     1337, 1338, 1339, 1350, 1340, 1341, 1351, 1352, 1353, 1354,
+     1342, 1355, 1356, 1334, 1343, 1357, 1344, 1345, 1358, 1359,
+     1346, 1360, 1361, 1347, 1348, 1362, 1363, 1364, 1365, 1349,
+     1366, 1367, 1368, 1369, 1350, 1370, 1371, 1351, 1352, 1353,
+     1354, 1373, 1355, 1356, 1374, 1375, 1357, 1376, 1377, 1358,
+     1359, 1378, 1360, 1361, 1379, 1380, 1362, 1363, 1364, 1365,
+     1381, 1366, 1367, 1368, 1369, 1382, 1370, 1371, 1383, 1384,
+
+     1385, 1386, 1373, 1387, 1388, 1374, 1375, 1389, 1376, 1377,
+     1390, 1391, 1378, 1392, 1393, 1379, 1380, 1394, 1395, 1396,
+     1397, 1381, 1398, 1399, 1400, 1401, 1382, 1402, 1403, 1383,
+     1384, 1385, 1386, 1404, 1387, 1388, 1405, 1406, 1389, 1407,
+     1408, 1390, 1391, 1409, 1392, 1393, 1410, 1411, 1394, 1395,
+     1396, 1397, 1412, 1398, 1399, 1400, 1401, 1413, 1402, 1403,
+     1414, 1415, 1416, 1417, 1404, 1418, 1419, 1405, 1406, 1420,
+     1407, 1408, 1421, 1422, 1409, 1423, 1424, 1410, 1411, 1425,
+     1426, 1427, 1428, 1412, 1429, 1430, 1431, 1432, 1413, 1433,
+     1434, 1414, 1415, 1416, 1417, 1435, 1418, 1419, 1436, 1437,
+
+     1420, 1438, 1439, 1421, 1422, 1440, 1423, 1424, 1441, 1444,
+     1425, 1426, 1427, 1428, 1445, 1429, 1430, 1431, 1432, 1447,
+     1433, 1434, 1442, 1857, 1443, 1453, 1435, 1857, 1454, 1436,
+     1437, 1455, 1438, 1439, 1446, 1456, 1440, 1457, 1458, 1441,
+     1444, 1448, 1449, 1459, 1460, 1445, 1461, 1462, 1463, 1464,
+     1447, 1465, 1450, 1442, 1451, 1443, 1453, 1466, 1452, 1454,
+     1467, 1468, 1455, 1469, 1470, 1446, 1456, 1471, 1457, 1458,
+     1472, 1473, 1448, 1449, 1459, 1460, 1474, 1461, 1462, 1463,
+     1464, 1475, 1465, 1450, 1476, 1451, 1477, 1480, 1466, 1452,
+     1481, 1467, 1468, 1482, 1469, 1470, 1483, 1478, 1471, 1479,
+
+     1484, 1472, 1473, 1485, 1486, 1487, 1488, 1474, 1489, 1490,
+     1491, 1492, 1475, 1493, 1494, 1476, 1495, 1477, 1480, 1496,
+     1497, 1481, 1498, 1499, 1482, 1500, 1501, 1483, 1478, 1502,
+     1479, 1484, 1503, 1504, 1485, 1486, 1487, 1488, 1505, 1489,
+     1490, 1491, 1492, 1506, 1493, 1494, 1507, 1495, 1448, 1449,
+     1496, 1497, 1508, 1498, 1499, 1509, 1500, 1501, 1510, 1511,
+     1502, 1451, 1512, 1503, 1504, 1452, 1513, 1514, 1515, 1505,
+     1516, 1517, 1518, 1519, 1506, 1520, 1521, 1507, 1522, 1448,
+     1449, 1523, 1524, 1508, 1525, 1526, 1509, 1527, 1528, 1510,
+     1511, 1529, 1451, 1512, 1530, 1531, 1452, 1513, 1514, 1515,
+
+     1532, 1516, 1517, 1518, 1519, 1533, 1520, 1521, 1534, 1522,
+     1535, 1536, 1523, 1524, 1537, 1525, 1526, 1538, 1527, 1528,
+     1539, 1540, 1529, 1541, 1542, 1530, 1531, 1543, 1544, 1545,
+     1546, 1532, 1547, 1548, 1549, 1550, 1533, 1551, 1552, 1534,
+     1553, 1535, 1536, 1554, 1555, 1537, 1556, 1557, 1538, 1558,
+     1559, 1539, 1540, 1560, 1541, 1542, 1561, 1562, 1543, 1544,
+     1545, 1546, 1563, 1547, 1548, 1549, 1550, 1564, 1551, 1552,
+     1565, 1553, 1566, 1567, 1554, 1555, 1568, 1556, 1557, 1569,
+     1558, 1559, 1570, 1571, 1560, 1572, 1573, 1561, 1562, 1574,
+     1577, 1575, 1578, 1563, 1580, 1581, 1582, 1583, 1564, 1576,
+
+     1584, 1565, 1585, 1566, 1567, 1586, 1587, 1568, 1579, 1588,
+     1569, 1589, 1590, 1570, 1571, 1591, 1572, 1573, 1592, 1593,
+     1574, 1577, 1575, 1578, 1594, 1580, 1581, 1582, 1583, 1595,
+     1576, 1584, 1596, 1585, 1597, 1598, 1586, 1587, 1599, 1579,
+     1588, 1600, 1589, 1590, 1601, 1602, 1591, 1603, 1604, 1592,
+     1593, 1605, 1606, 1607, 1608, 1594, 1609, 1610, 1611, 1612,
+     1595, 1613, 1614, 1596, 1615, 1597, 1598, 1616, 1617, 1599,
+     1618, 1619, 1600, 1620, 1621, 1601, 1602, 1622, 1603, 1604,
+     1623, 1624, 1605, 1606, 1607, 1608, 1625, 1609, 1610, 1611,
+     1612, 1626, 1613, 1614, 1627, 1615, 1628, 1629, 1616, 1617,
+
+     1630, 1618, 1619, 1631, 1620, 1621, 1632, 1633, 1622, 1634,
+     1635, 1623, 1624, 1636, 1637, 1638, 1639, 1625, 1640, 1641,
+     1642, 1643, 1626, 1644, 1645, 1627, 1646, 1628, 1629, 1647,
+     1648, 1630, 1649, 1650, 1631, 1651, 1652, 1632, 1633, 1653,
+     1634, 1635, 1654, 1655, 1636, 1637, 1638, 1639, 1656, 1640,
+     1641, 1642, 1643, 1657, 1644, 1645, 1658, 1646, 1659, 1660,
+     1647, 1648, 1661, 1649, 1650, 1662, 1651, 1652, 1663, 1664,
+     1653, 1665, 1666, 1654, 1655, 1667, 1668, 1669, 1670, 1656,
+     1671, 1672, 1673, 1674, 1657, 1675, 1676, 1658, 1677, 1659,
+     1660, 1678, 1679, 1661, 1680, 1681, 1662, 1682, 1683, 1663,
+
+     1664, 1684, 1665, 1666, 1685, 1686, 1667, 1668, 1669, 1670,
+     1687, 1671, 1672, 1673, 1674, 1688, 1675, 1676, 1689, 1677,
+     1690, 1691, 1678, 1679, 1692, 1680, 1681, 1693, 1682, 1683,
+     1694, 1695, 1684, 1696, 1697, 1685, 1686, 1698, 1699, 1700,
+     1701, 1687, 1702, 1703, 1704, 1705, 1688, 1706, 1707, 1689,
+     1708, 1690, 1691, 1709, 1710, 1692, 1711, 1712, 1693, 1713,
+     1714, 1694, 1695, 1715, 1696, 1697, 1716, 1717, 1698, 1699,
+     1700, 1701, 1718, 1702, 1703, 1704, 1705, 1719, 1706, 1707,
+     1720, 1708, 1721, 1722, 1709, 1710, 1723, 1711, 1712, 1724,
+     1713, 1714, 1725, 1726, 1715, 1727, 1728, 1716, 1717, 1729,
+
+     1730, 1731, 1732, 1718, 1733, 1734, 1735, 1736, 1719, 1737,
+     1738, 1720, 1739, 1721, 1722, 1740, 1741, 1723, 1742, 1743,
+     1724, 1744, 1745, 1725, 1726, 1746, 1727, 1728, 1747, 1748,
+     1729, 1730, 1731, 1732, 1749, 1733, 1734, 1735, 1736, 1751,
+     1737, 1738, 1752, 1739, 1753, 1754, 1740, 1741, 1755, 1742,
+     1743, 1750, 1744, 1745, 1756, 1757, 1746, 1758, 1759, 1747,
+     1748, 1760, 1761, 1762, 1763, 1749, 1764, 1765, 1766, 1767,
+     1751, 1768, 1769, 1752, 1770, 1753, 1754, 1771, 1772, 1755,
+     1773, 1774, 1750, 1775, 1776, 1756, 1757, 1777, 1758, 1759,
+     1778, 1779, 1760, 1761, 1762, 1763, 1780, 1764, 1765, 1766,
+
+     1767, 1781, 1768, 1769, 1782, 1770, 1783, 1784, 1771, 1772,
+     1785, 1773, 1774, 1786, 1775, 1776, 1787, 1788, 1777, 1789,
+     1790, 1778, 1779, 1791, 1792, 1793, 1794, 1780, 1795, 1796,
+     1797, 1798, 1781, 1799, 1800, 1782, 1801, 1783, 1784, 1802,
+     1803, 1785, 1804, 1805, 1786, 1806, 1807, 1787, 1788, 1808,
+     1789, 1790, 1809, 1810, 1791, 1792, 1793, 1794, 1811, 1795,
+     1796, 1797, 1798, 1812, 1799, 1800, 1813, 1801, 1814, 1815,
+     1802, 1803, 1816, 1804, 1805, 1817, 1806, 1807, 1818, 1819,
+     1808, 1820, 1821, 1809, 1810, 1822, 1823, 1824, 1825, 1811,
+     1826, 1827, 1828, 1829, 1812, 1830, 1831, 1813, 1832, 1814,
+
+     1815, 1833, 1834, 1816, 1835, 1836, 1817, 1837, 1838, 1818,
+     1819, 1839, 1820, 1821, 1840, 1841, 1822, 1823, 1824, 1825,
+     1842, 1826, 1827, 1828, 1829, 1843, 1830, 1831, 1844, 1832,
+     1845, 1846, 1833, 1834, 1847, 1835, 1836, 1848, 1837, 1838,
+     1849, 1850, 1839, 1851, 1852, 1840, 1841, 1853, 1854, 1855,
+     1856, 1842, 1857, 1857, 1857, 1857, 1843, 1857, 1857, 1844,
+     1857, 1845, 1846, 1857, 1857, 1847, 1857, 1857, 1848, 1857,
+     1857, 1849, 1850, 1857, 1851, 1852, 1857, 1857, 1853, 1854,
+     1855, 1856,  120,  120,  120,  120,  120,  120,  120,  120,
+      120,  124,  124,  124,  124,  124,  124,  124,  124,  124,
+
+      129, 1857,  129,  129,  129,  129,  129,  129,  129,  130,
+     1857,  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, 1857,
+      266,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      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,
+     1857, 1857,  351,  351, 1857,  351,  137,  137,  137,  137,
+      137,  137,  137,  137,  137,  535, 1857, 1857,  535,  535,
+
+     1857,  535,  563,  563,  563, 1857,  563,  563,  563,  563,
+      563,  565,  565,  565,  565, 1857,  565,  565,  565,  565,
+      592,  592,  592,  592,  592,  592,  592,  592,  592,   13,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857
     } ;
 
-static yyconst flex_int16_t yy_chk[2382] =
+static yyconst flex_int16_t yy_chk[4313] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    3,    3,    9,  104,
-        9,    9,   10,    9,   10,   10,    9,   10,  758,    3,
-       10,   11,   21,   21,   11,  104,    3,   12,   35,    3,
-       12,    3,   35,    3,    3,    3,   21,   32,   11,    3,
-      760,   32,    3,    3,   12,   32,    3,    3,    3,    3,
-
-        3,    3,   15,    3,   15,   15,   87,    3,   87,    3,
-        4,    4,   20,  761,   20,   20,   23,   30,   23,   23,
-       25,   30,   25,    4,   28,   30,   38,   28,   28,   25,
-        4,   30,   23,    4,   30,    4,  762,    4,    4,    4,
-       38,   28,   63,    4,   28,   46,    4,    4,   63,   46,
-        4,    4,    4,    4,    4,    4,   58,    4,   77,   63,
-       58,    4,   77,    4,    5,    5,    5,    5,    5,    5,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    3,    3,    3,    3,    3,    3,    3,    3,
+        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+
+        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+        3,    3,    3,    3,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
 
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
+        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
+        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
+        5,    5,    5,    5,    5,    5,    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,    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,    7,    7,    7,    7,   22,   22,   22,   22,
-       22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
-       22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
-
-       22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
-       22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
-       22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
-       22,   22,   26,   76,   76,   67,   26,   67,   67,   27,
-       26,   27,   31,  112,   27,   27,   31,   74,   27,   26,
-       31,   27,   26,  112,   27,   27,   29,   29,   29,   31,
-       33,   33,   29,  763,   74,   52,   52,   33,   29,   36,
-       37,   36,   52,   36,   37,   79,  147,   36,   37,   79,
-       36,   39,   39,   36,   40,  101,   36,  147,   40,   39,
-       37,   39,   40,   39,   37,   40,   39,   39,   40,   42,
-
-       68,   40,   68,   42,   47,   47,  101,   42,   47,   68,
-       47,  764,   47,   42,   43,   43,   43,   47,   44,   43,
-       43,   83,   44,  102,   43,   83,   44,  102,   43,   45,
-      103,   43,   44,   43,  103,   44,   43,   70,   45,   70,
-       45,  109,   44,  765,   45,  111,   70,   71,   45,   70,
-       71,   71,   70,   72,   72,   73,  109,   78,   81,   73,
-      111,   78,   82,   73,   72,   78,   81,   99,   81,   73,
-       82,   78,   86,   81,   81,   99,   82,   84,   84,   82,
-       85,   86,  105,   86,   85,  105,  106,   86,  113,   84,
-       85,  216,  113,   85,   84,   89,  216,   89,   89,   90,
-
-      106,   90,   90,   95,  149,   95,   95,   96,   96,   97,
-      149,   97,   97,  121,  127,  121,  121,  127,  132,  132,
-      128,   96,  128,  128,  133,   97,  133,  133,  135,  135,
-      767,  127,  132,  136,  136,  140,  140,  136,  136,  144,
-      133,  145,  135,  141,  141,  145,  144,  141,  141,  140,
-      151,  156,  145,  157,  166,  157,  162,  296,  145,  169,
-      162,  167,  167,  169,  151,  171,  178,  296,  166,  171,
-      173,  156,  173,  173,  178,  188,  173,  183,  183,  190,
-      178,  196,  201,  183,  190,  190,  201,  195,  200,  195,
-      195,  188,  768,  188,  183,  195,  200,  196,  188,  197,
-
-      197,  197,  209,  213,  209,  214,  213,  197,  217,  217,
-      227,  214,  231,  213,  217,  224,  224,  234,  217,  217,
-      564,  217,  232,  231,  232,  234,  250,  250,  224,  262,
-      232,  270,  278,  250,  227,  564,  278,  234,  270,  273,
-      303,  273,  262,  280,  270,  280,  280,  283,  304,  312,
-      312,  303,  313,  283,  313,  313,  304,  314,  314,  316,
-      316,  315,  315,  312,  283,  315,  315,  324,  313,  334,
-      326,  314,  326,  316,  317,  317,  386,  324,  317,  317,
-      332,  332,  334,  345,  386,  345,  354,  354,  355,  355,
-      356,  356,  355,  355,  357,  357,  358,  358,  361,  361,
-
-      354,  362,  362,  363,  363,  362,  362,  364,  364,  390,
-      404,  408,  361,  420,  426,  442,  458,  420,  404,  442,
-      458,  408,  484,  463,  426,  562,  390,  440,  440,  467,
-      440,  463,  440,  440,  484,  440,  466,  469,  440,  769,
-      467,  440,  505,  562,  469,  440,  440,  505,  612,  440,
-      445,  445,  546,  445,  571,  445,  445,  571,  445,  770,
-      466,  445,  546,  565,  565,  566,  566,  612,  445,  445,
-      567,  567,  445,  568,  568,  569,  569,  568,  568,  570,
-      570,  572,  705,  572,  567,  573,  705,  573,  592,  592,
-      594,  594,  595,  595,  619,  660,  619,  669,  722,  680,
-
-      695,  771,  660,  722,  669,  680,  695,  750,  772,  773,
-      774,  750,  775,  776,  777,  778,  780,  680,  695,  781,
-      782,  783,  784,  786,  788,  789,  790,  791,  792,  793,
-      794,  796,  797,  800,  800,  801,  801,  802,  805,  806,
-      807,  808,  809,  810,  811,  812,  813,  814,  815,  816,
-      817,  818,  819,  820,  823,  802,  825,  826,  828,  829,
-      831,  832,  833,  834,  835,  836,  838,  839,  840,  839,
-      841,  842,  843,  844,  845,  847,  848,  849,  850,  853,
-      855,  856,  856,  858,  859,  860,  861,  862,  863,  865,
-      866,  868,  869,  872,  873,  874,  875,  876,  878,  881,
-
-      879,  882,  883,  884,  887,  874,  889,  890,  874,  874,
-      879,  885,  874,  874,  885,  891,  892,  885,  893,  894,
-      895,  885,  896,  897,  898,  899,  885,  900,  901,  902,
-      903,  904,  905,  906,  907,  908,  909,  911,  912,  913,
-      914,  915,  916,  917,  918,  919,  920,  921,  922,  923,
-      925,  927,  928,  929,  930,  931,  932,  933,  934,  935,
-      936,  937,  938,  939,  940,  941,  942,  943,  944,  945,
-      946,  947,  948,  949,  950,  951,  952,  953,  954,  955,
-      947,  956,  957,  952,  958,  959,  960,  963,  964,  963,
-      965,  966,  967,  968,  969,  971,  972,  973,  974,  976,
-
-      977,  978,  980,  981,  982,  983,  986,  978,  987,  988,
-      992,  993,  994,  981,  996,  997,  998,  999, 1000, 1001,
-     1003, 1005, 1007, 1005, 1008, 1009, 1010, 1011, 1012,  994,
-     1013, 1014, 1015, 1016, 1017, 1010, 1018, 1019, 1020, 1015,
-     1021, 1022, 1023, 1024, 1025, 1026, 1027, 1029, 1030, 1031,
-     1032, 1033, 1034, 1035, 1036, 1037, 1039, 1042, 1044, 1045,
-     1046, 1047, 1049, 1050, 1051, 1052, 1053, 1055, 1056, 1057,
-     1058, 1060, 1062, 1064, 1066, 1067, 1068, 1069, 1072, 1073,
-     1074, 1075, 1076, 1077, 1079, 1080, 1081, 1082, 1083, 1084,
-     1085, 1086, 1087, 1088, 1089, 1090, 1091, 1094, 1095, 1096,
-
-     1097, 1098, 1099, 1090, 1100, 1101, 1102, 1103, 1104, 1105,
-     1106, 1107, 1108, 1109, 1110, 1112, 1114, 1115, 1116, 1117,
-     1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127,
-     1128, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139,
-     1140, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153,
-     1154, 1155, 1156, 1158, 1160, 1161, 1162, 1163, 1164, 1165,
-     1166, 1167, 1168, 1171, 1174, 1175, 1176, 1177, 1178, 1179,
-     1180, 1181, 1182, 1183, 1184, 1185, 1186, 1167, 1188, 1190,
-     1191, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1201, 1202,
-     1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1214, 1215,
-
-     1216, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226,
-     1227, 1229, 1230, 1231, 1232, 1234, 1236, 1237, 1238, 1240,
-     1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251,
-     1253, 1254, 1255, 1256, 1258, 1259, 1260, 1261, 1262, 1263,
-     1264, 1265, 1266, 1268, 1269, 1271, 1272, 1273, 1274, 1275,
-     1276, 1277, 1278, 1280, 1281, 1282, 1283, 1284, 1286, 1287,
-     1288, 1289, 1290, 1291, 1292, 1294, 1295, 1296, 1297, 1298,
-     1300, 1302, 1300, 1303, 1304, 1305, 1305, 1306, 1308, 1309,
-     1311, 1313, 1314, 1315, 1316, 1317, 1305, 1318, 1305, 1319,
-     1320, 1321, 1305, 1303, 1322, 1323, 1324, 1325, 1326, 1327,
-
-     1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1334, 1336,
-     1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346,
-     1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1355,
-     1356, 1359, 1361, 1362, 1364, 1365, 1366, 1367, 1369, 1370,
-     1371, 1355, 1372, 1373, 1375, 1355, 1376, 1377, 1378, 1379,
-     1380, 1381, 1382, 1383, 1385, 1386, 1387, 1388, 1389, 1390,
-     1392, 1393, 1394, 1395, 1396, 1398, 1399, 1400, 1402, 1403,
-     1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413,
-     1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1426,
-     1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1437, 1438,
-
-     1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448,
-     1450, 1451, 1453, 1454, 1456, 1446, 1457, 1458, 1460, 1461,
-     1462, 1463, 1465, 1467, 1469, 1448, 1470, 1471, 1472, 1473,
-     1474, 1475, 1476, 1478, 1480, 1481, 1482, 1486, 1487, 1488,
-     1489, 1490, 1492, 1493, 1495, 1498, 1501, 1504, 1505, 1507,
-     1509, 1511, 1513, 1514, 1515, 1517, 1518, 1520, 1521, 1522,
-     1524, 1527, 1529, 1532, 1533, 1534, 1535, 1537, 1538, 1539,
-     1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1549, 1550,
-     1551, 1552, 1553, 1554, 1555, 1556, 1557, 1559, 1560, 1561,
-     1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571,
-
-     1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581,
-     1582, 1585, 1586, 1587, 1588, 1589, 1590, 1594, 1596, 1598,
-     1600, 1601, 1602, 1603, 1605, 1607, 1608, 1609, 1610, 1611,
-     1613, 1614, 1617, 1618, 1619, 1622, 1623, 1625, 1630, 1631,
-     1632, 1633, 1634, 1635, 1638, 1639, 1640, 1641, 1642, 1643,
-     1644, 1645, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654,
-     1655, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665,
-     1666, 1667, 1668, 1669, 1671, 1674, 1676, 1679, 1681, 1682,
-     1683, 1684, 1686, 1690, 1694, 1695, 1696, 1698, 1699, 1700,
-     1701, 1703, 1704, 1705, 1706, 1707, 1712, 1713, 1684, 1714,
-
-     1717, 1720, 1721, 1723, 1725, 1726, 1727, 1728, 1729, 1730,
-     1731, 1732, 1733, 1735, 1738, 1740, 1742, 1743, 1744, 1745,
-     1747, 1749, 1751, 1752, 1754, 1756, 1757, 1758, 1760, 1761,
-     1762, 1764, 1765, 1767, 1768, 1772, 1774, 1775, 1776, 1777,
-     1778, 1779, 1780, 1781, 1782, 1784, 1785, 1786, 1789, 1790,
-     1792, 1793, 1795, 1799, 1800, 1801, 1802, 1804, 1805, 1806,
-     1807, 1808, 1810, 1812, 1813, 1814, 1815, 1817, 1820, 1823,
-     1824, 1827, 1828, 1831, 1832, 1833, 1835, 1836, 1837, 1838,
-     1840, 1841, 1842, 1843, 1846, 1847, 1848, 1850, 1851, 1854,
-     1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1855, 1855,
-
-     1855, 1855, 1855, 1855, 1855, 1855, 1855, 1856, 1856, 1856,
-     1856, 1856, 1856, 1856, 1856, 1856, 1857,  757, 1857, 1857,
-     1857, 1857, 1857, 1857, 1857, 1858,  756, 1858, 1858, 1858,
-     1858, 1858, 1858, 1858, 1859, 1859, 1860, 1860, 1860, 1860,
-     1860, 1860, 1860, 1860, 1860, 1861,  755, 1861, 1862, 1862,
-     1862, 1862, 1862, 1862, 1862, 1862, 1862, 1863, 1863, 1863,
-     1863, 1863, 1863, 1863, 1863, 1863, 1864, 1864, 1864, 1864,
-     1864, 1864, 1864, 1864, 1864, 1865, 1865, 1865, 1865, 1865,
-     1865, 1865, 1865, 1865, 1866, 1866, 1866,  754,  752, 1866,
-     1866,  749, 1866, 1867, 1867, 1867, 1867, 1867, 1867, 1867,
-
-     1867, 1867, 1868,  748,  747, 1868, 1868,  746, 1868, 1869,
-     1869, 1869,  745, 1869, 1869, 1869, 1869, 1869, 1870, 1870,
-     1870, 1870,  744, 1870, 1870, 1870, 1870, 1871, 1871, 1871,
-     1871, 1871, 1871, 1871, 1871, 1871,  743,  742,  741,  740,
-      739,  738,  737,  736,  735,  734,  733,  732,  731,  730,
-      729,  728,  727,  726,  725,  724,  723,  721,  720,  719,
-      718,  717,  716,  715,  714,  713,  712,  711,  710,  709,
-      708,  707,  706,  704,  702,  700,  699,  698,  697,  696,
-      694,  693,  692,  691,  690,  689,  688,  687,  686,  685,
-      684,  683,  682,  681,  679,  678,  677,  676,  675,  674,
-
-      673,  672,  670,  668,  666,  665,  664,  663,  662,  661,
-      659,  657,  656,  655,  654,  653,  652,  651,  650,  649,
-      648,  647,  646,  645,  644,  643,  641,  640,  639,  638,
-      637,  636,  635,  633,  632,  631,  630,  629,  628,  627,
-      626,  625,  623,  622,  621,  620,  618,  617,  616,  615,
-      614,  613,  611,  609,  608,  607,  606,  605,  604,  603,
-      602,  601,  600,  599,  598,  597,  596,  591,  590,  589,
-      588,  587,  585,  584,  583,  582,  581,  580,  579,  578,
-      577,  576,  575,  574,  563,  561,  560,  559,  558,  557,
-      556,  555,  554,  553,  552,  551,  550,  549,  548,  547,
-
-      545,  544,  543,  542,  541,  540,  539,  538,  537,  536,
-      535,  533,  532,  531,  530,  529,  528,  527,  526,  525,
-      523,  522,  521,  520,  519,  518,  517,  515,  514,  511,
-      508,  507,  506,  504,  503,  502,  501,  500,  499,  498,
-      497,  496,  495,  494,  493,  491,  490,  489,  488,  487,
-      486,  485,  483,  481,  480,  479,  478,  477,  476,  475,
-      474,  473,  472,  471,  470,  468,  465,  464,  462,  461,
-      460,  459,  457,  456,  455,  453,  452,  451,  450,  449,
-      448,  447,  446,  444,  443,  441,  439,  438,  435,  434,
-      433,  432,  431,  430,  429,  428,  427,  425,  424,  423,
-
-      422,  421,  419,  418,  417,  416,  415,  414,  413,  412,
-      411,  409,  407,  406,  405,  403,  402,  401,  400,  399,
-      398,  396,  395,  394,  393,  392,  391,  389,  388,  385,
-      384,  383,  382,  381,  380,  379,  378,  377,  376,  375,
-      374,  373,  372,  371,  370,  369,  368,  367,  366,  365,
-      359,  350,  348,  346,  344,  343,  341,  339,  338,  336,
-      335,  333,  331,  330,  329,  328,  325,  322,  311,  309,
-      307,  306,  305,  302,  301,  300,  299,  298,  297,  295,
-      294,  293,  292,  290,  289,  288,  287,  286,  285,  284,
-      282,  281,  279,  277,  276,  275,  274,  272,  271,  269,
-
-      268,  267,  266,  265,  264,  263,  261,  260,  259,  258,
-      257,  256,  255,  254,  253,  252,  249,  248,  247,  246,
-      245,  244,  243,  242,  241,  240,  238,  235,  233,  230,
-      229,  228,  226,  225,  223,  222,  221,  220,  219,  218,
-      215,  212,  211,  210,  208,  207,  206,  205,  204,  203,
-      202,  199,  198,  193,  191,  187,  186,  185,  184,  182,
-      181,  180,  179,  177,  176,  175,  174,  172,  170,  168,
-      165,  164,  163,  160,  159,  155,  154,  153,  150,  148,
-      146,  142,  139,  137,  131,  130,  126,  125,  123,  122,
-      118,  117,  116,  115,  114,  110,  108,  107,  100,   98,
-
-       94,   93,   92,   91,   80,   75,   69,   66,   65,   64,
-       62,   61,   60,   59,   57,   56,   55,   54,   53,   41,
-       34,   24,   19,   13, 1853, 1853, 1853, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-     1853
+
+        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,  564,
+        9,    9,   10,    9,   10,   10,    9,   10,   11,   12,
+       10,   11,   12,   15, 1221,   15,   15,   20,   33,   20,
+       20,   21,   21,   34,   99,   40,   52,   34,   53,   54,
+       21,  116,   99, 1136,   23,  116,   23,   23,   67,  566,
+       67,   67,  345,  564,  345,   23,   24,  127,   24,   33,
+      127,   11,   12,  604,   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,
+      566,   22,   37,   22,   25,   55,   24,   45,   25,  565,
+      127,   45,   25,   28,   28,   28,   37,   56,   57,   28,
+       58,   25,   57,  563,   25,   28,  535,   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,  592,   26,  592,   27,   26,
+       26,   27,   27,   26,   63,  593,   26,  593,   64,   26,
+       26,  456,   29,   31,  350,   27,   29,   31,   27,  348,
+
+       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,
+       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,
+
+      130,   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,
+       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,
+
+       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,
+       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,
+
+       85,  107,   84,   96,   96,  110,   85,   84,   81,   85,
+        0,   82,   96,  102,  357,  357,   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,  254,  262,  263,  264,  265,  269,  253,  271,  254,
+      259,  270,  272,  273,  274,  273,  275,  276,  270,  277,
+      255,  256,  257,  279,  270,  258,  278,  260,  259,  281,
+      278,  261,  254,  262,  263,  264,  265,  269,  282,  271,
+
+      284,  259,  270,  272,  273,  274,  273,  275,  276,  270,
+      277,  285,  286,  287,  279,  270,  280,  278,  280,  280,
+      281,  278,  283,  288,  289,  290,  292,  293,  283,  282,
+      294,  284,  295,  297,  298,  296,  299,  300,  301,  283,
+      302,  303,  285,  286,  287,  296,  305,  280,  306,  280,
+      280,  307,  303,  283,  288,  289,  290,  292,  293,  283,
+        0,  294,    0,  295,  297,  298,  296,  299,  300,  301,
+      283,  302,  303,  304,  365,  365,  296,  305,    0,  306,
+      322,  304,  307,  303,  312,  312,  313,  323,  313,  313,
+      314,  314,  324,  312,  316,  316,  325,  313,  327,  314,
+
+      329,  315,  315,  316,  304,  315,  315,  326,  326,  317,
+      317,  322,  304,  317,  317,  330,  332,  333,  323,  328,
+      335,  337,  338,  324,  312,  340,    0,  325,  313,  327,
+      314,  329,  328,  339,  316,  339,  342,  360,  326,  326,
+      355,  355,  366,  567,  567,  367,  330,  332,  333,  355,
+      328,  335,  337,  338,  356,  356,  340,  342,  356,  356,
+      362,  362,  368,  328,  339,  369,  339,  342,  360,  362,
+      363,  363,  370,  366,  363,  363,  367,  371,  372,  373,
+      355,  374,  375,  376,  377,  378,  379,  380,  381,  382,
+      383,  384,  385,  368,  386,  389,  369,  387,  390,  392,
+
+      362,  393,  394,  370,  395,  387,  396,  391,  371,  372,
+      373,  397,  374,  375,  376,  377,  378,  379,  380,  381,
+      382,  383,  384,  385,  391,  386,  389,  399,  387,  390,
+      392,  400,  393,  394,  401,  395,  387,  396,  391,  402,
+      403,  404,  397,  405,  406,  407,  408,  409,  410,  412,
+      413,  405,  414,  415,  416,  391,  417,  409,  399,  418,
+      419,  420,  400,  421,  422,  401,  423,  421,  424,  425,
+      402,  403,  404,  426,  405,  406,  407,  408,  409,  410,
+      412,  413,  405,  414,  415,  416,  427,  417,  409,  428,
+      418,  419,  420,  429,  421,  422,  427,  423,  421,  424,
+
+      425,  430,  431,  432,  426,  433,  434,  435,  436,  439,
+      440,  568,  568,  442,    0,  444,    0,  427,  445,    0,
+      428,  447,    0,  448,  429,    0,  449,  427,  450,  571,
+      571,  443,  430,  431,  432,  443,  433,  434,  435,  436,
+      439,  440,  441,  441,  442,  441,  444,  441,  441,  445,
+      441,  451,  447,  441,  448,  452,  441,  449,  453,  450,
+      441,  441,  443,  454,  441,    0,  443,  457,    0,  458,
+      572,  572,  460,  441,  441,  461,  441,  462,  441,  441,
+      463,  441,  451,    0,  441,  464,  452,  441,  465,  453,
+      466,  441,  441,  464,  454,  441,  446,  446,  457,  446,
+
+      458,  446,  446,  460,  446,  459,  461,  446,  462,  459,
+      467,  463,  468,  469,  446,  446,  464,  471,  446,  465,
+      472,  466,  470,  468,  464,  473,  474,  446,  446,  470,
+      446,  475,  446,  446,  467,  446,  459,  476,  446,  477,
+      459,  467,  478,  468,  469,  446,  446,  479,  471,  446,
+      480,  472,  481,  470,  468,  482,  473,  474,  484,  485,
+      470,  486,  475,  487,  488,  467,  489,  490,  476,  491,
+      477,  485,  492,  478,  494,  495,  496,  497,  479,  498,
+      499,  480,  500,  481,  501,  502,  482,  503,  504,  484,
+      485,  505,  486,  507,  487,  488,  506,  489,  490,  508,
+
+      491,  506,  485,  492,  509,  494,  495,  496,  497,  512,
+      498,  499,  515,  500,  516,  501,  502,  517,  503,  504,
+      518,  519,  505,  520,  507,  521,  522,  506,  523,  525,
+      508,  526,  506,  527,  528,  509,  529,  530,  531,  532,
+      512,  533,  537,  515,  538,  516,  539,  540,  517,  541,
+      542,  518,  519,  543,  520,  544,  521,  522,  545,  523,
+      525,  546,  526,  547,  527,  528,  548,  529,  530,  531,
+      532,  549,  533,  537,  550,  538,  548,  539,  540,  551,
+      541,  542,  552,  553,  543,  554,  544,  555,  556,  545,
+      557,  558,  546,  559,  547,  560,  561,  548,  562,  569,
+
+      569,  573,  549,  594,  594,  550,  574,  548,  569,  575,
+      551,  576,  577,  552,  553,  578,  554,  579,  555,  556,
+      580,  557,  558,  581,  559,  582,  560,  561,  583,  562,
+      570,  570,  573,  584,  570,  570,  586,  574,  587,  569,
+      575,  588,  576,  577,  589,  590,  578,  598,  579,  591,
+      599,  580,  596,  596,  581,  600,  582,  597,  597,  583,
+      601,  602,  603,  605,  584,  606,  607,  586,  608,  587,
+      609,  610,  588,  611,  613,  589,  590,  591,  598,  614,
+      591,  599,  615,  616,  617,  618,  600,  619,  620,  622,
+      623,  601,  602,  603,  605,  624,  606,  607,  614,  608,
+
+      625,  609,  610,  627,  611,  613,  621,  628,  621,  629,
+      614,  630,  631,  615,  616,  617,  618,  632,  619,  620,
+      622,  623,  633,  634,  635,  637,  624,  638,  639,  614,
+      640,  625,  641,  642,  627,  643,  645,  621,  628,  621,
+      629,  646,  630,  631,  647,  648,  649,  650,  632,  651,
+      652,  653,  654,  633,  634,  635,  637,  655,  638,  639,
+      656,  640,  657,  641,  642,  658,  643,  645,  659,  661,
+      663,  664,  646,  665,  666,  647,  648,  649,  650,  662,
+      651,  652,  653,  654,  667,  668,  662,  670,  655,  672,
+      671,  656,  674,  657,  675,  676,  658,  671,  677,  659,
+
+      661,  663,  664,  678,  665,  666,  679,  680,  681,  683,
+      662,  684,  685,  682,  686,  667,  668,  662,  670,  682,
+      672,  671,  687,  674,  688,  675,  676,  689,  671,  677,
+      690,  682,  691,  692,  678,  693,  694,  679,  680,  681,
+      683,  695,  684,  685,  682,  686,  696,  698,  699,  700,
+      682,  697,  701,  687,  702,  688,  704,  697,  689,  706,
+      708,  690,  682,  691,  692,  709,  693,  694,  710,  697,
+      707,  711,  695,  712,  707,  713,  714,  696,  698,  699,
+      700,  715,  697,  701,  716,  702,  717,  704,  697,  718,
+      706,  708,  719,  720,  721,  722,  709,  723,  724,  710,
+
+      697,  707,  711,  724,  712,  707,  713,  714,  725,  726,
+      727,  728,  715,  729,  730,  716,  731,  717,  732,  733,
+      718,  734,  735,  719,  720,  721,  722,  736,  723,  724,
+      737,  738,  739,  740,  724,  741,  742,  743,  744,  725,
+      726,  727,  728,  745,  729,  730,  746,  731,  747,  732,
+      733,  748,  734,  735,  749,  750,  751,  754,  736,  756,
+      757,  737,  738,  739,  740,  758,  741,  742,  743,  744,
+      759,  752,  760,  762,  745,  752,  763,  746,  764,  747,
+      765,  766,  748,  767,  769,  749,  750,  751,  754,  770,
+      756,  757,  771,  772,  773,  774,  758,  775,  776,  777,
+
+      778,  759,  752,  760,  762,  779,  752,  763,  780,  764,
+      781,  765,  766,  783,  767,  769,  784,  785,  786,  787,
+      770,  789,  791,  771,  772,  773,  774,  792,  775,  776,
+      777,  778,  793,  794,  795,  796,  779,  797,  799,  780,
+      800,  781,  803,  803,  783,  804,  804,  784,  785,  786,
+      787,  806,  789,  791,  807,  808,  809,  810,  792,  811,
+      812,  813,  814,  793,  794,  795,  796,  815,  797,  799,
+      816,  800,  817,  818,  819,  820,  821,  826,  828,  829,
+      831,  822,  806,  832,  834,  807,  808,  809,  810,  835,
+      811,  812,  813,  814,  822,  836,  837,  838,  815,  839,
+
+      841,  816,  843,  817,  818,  819,  820,  821,  826,  828,
+      829,  831,  822,  844,  832,  834,  842,  845,  842,  846,
+      835,  847,  848,  850,  851,  852,  836,  837,  838,  853,
+      839,  841,  856,  843,  858,  859,  859,  861,  862,  863,
+      864,  865,  866,  868,  844,  869,  871,  842,  845,  842,
+      846,  872,  847,  848,  850,  851,  852,  875,  876,    0,
+      853,  878,    0,  856,  879,  858,  859,  859,  861,  862,
+      863,  864,  865,  866,  868,  881,  869,  871,  884,  885,
+      877,  882,  872,  886,  887,  890,    0,  892,  875,  876,
+      877,  882,  878,  877,  877,  879,    0,  877,  877,  893,
+
+      894,    0,  895,  896,  897,  898,  881,  899,  900,  884,
+      885,  877,  882,  901,  886,  887,  890,  888,  892,  902,
+      888,  877,  882,  888,  877,  877,  903,  888,  877,  877,
+      893,  894,  888,  895,  896,  897,  898,  904,  899,  900,
+      905,  906,  907,  908,  901,  909,  910,  911,  888,  912,
+      902,  888,  914,  915,  888,  916,  917,  903,  888,  918,
+      919,  920,  921,  888,  922,  923,  924,  925,  904,  926,
+      928,  905,  906,  907,  908,  930,  909,  910,  911,  931,
+      912,  932,  933,  914,  915,  934,  916,  917,  935,  936,
+      918,  919,  920,  921,  937,  922,  923,  924,  925,  938,
+
+      926,  928,  939,  940,  941,  942,  930,  943,  944,  945,
+      931,  946,  932,  933,  947,  948,  934,  949,  950,  935,
+      936,  951,  952,  953,  954,  937,  956,  950,  957,  958,
+      938,  959,  960,  939,  940,  941,  942,  955,  943,  944,
+      945,  961,  946,  962,  955,  947,  948,  963,  949,  950,
+      967,  968,  951,  952,  953,  954,  969,  956,  950,  957,
+      958,  970,  959,  960,  966,  971,  966,  972,  955,  974,
+      975,  976,  961,  977,  962,  955,  979,  980,  963,  981,
+      983,  967,  968,  984,  985,  981,  986,  969,  989,  990,
+      991,  995,  970,  984,  996,  966,  971,  966,  972, 1000,
+
+      974,  975,  976, 1001,  977, 1002,  997,  979,  980, 1003,
+      981,  983, 1004, 1005,  984,  985,  981,  986, 1007,  989,
+      990,  991,  995,  997,  984,  996, 1009, 1011, 1009, 1012,
+     1000, 1013, 1014, 1015, 1001, 1016, 1002,  997, 1017, 1018,
+     1003, 1014, 1019, 1004, 1005, 1020, 1021, 1022, 1023, 1007,
+     1024, 1025, 1026, 1027,  997, 1028, 1029, 1009, 1011, 1009,
+     1012, 1030, 1013, 1014, 1015, 1032, 1016, 1033, 1034, 1017,
+     1018, 1035, 1014, 1019, 1036, 1037, 1020, 1021, 1022, 1023,
+     1038, 1024, 1025, 1026, 1027, 1039, 1028, 1029, 1040, 1041,
+     1043, 1046, 1030, 1048, 1049, 1035, 1032, 1050, 1033, 1034,
+
+     1051, 1053, 1035, 1054, 1055, 1036, 1037, 1056, 1057, 1059,
+     1060, 1038, 1061, 1062, 1064, 1066, 1039, 1068, 1070, 1040,
+     1041, 1043, 1046, 1071, 1048, 1049, 1072, 1073, 1050, 1076,
+     1077, 1051, 1053, 1078, 1054, 1055, 1079, 1080, 1056, 1057,
+     1059, 1060, 1081, 1061, 1062, 1064, 1066, 1083, 1068, 1070,
+     1084, 1085, 1086, 1087, 1071, 1088, 1089, 1072, 1073, 1090,
+     1076, 1077, 1091, 1092, 1078, 1093, 1094, 1079, 1080, 1095,
+     1098, 1099, 1100, 1081, 1094, 1101, 1102, 1103, 1083, 1104,
+     1105, 1084, 1085, 1086, 1087, 1106, 1088, 1089, 1107, 1108,
+     1090, 1109, 1110, 1091, 1092, 1111, 1093, 1094, 1112, 1113,
+
+     1095, 1098, 1099, 1100, 1114, 1094, 1101, 1102, 1103, 1116,
+     1104, 1105, 1118, 1119, 1120, 1121, 1106, 1122, 1123, 1107,
+     1108, 1124, 1109, 1110, 1125, 1126, 1111, 1127, 1128, 1112,
+     1113, 1129, 1130, 1131, 1132, 1114, 1135, 1137, 1138, 1139,
+     1116, 1140, 1141, 1118, 1119, 1120, 1121, 1142, 1122, 1123,
+     1143, 1144, 1124, 1149, 1150, 1125, 1126, 1151, 1127, 1128,
+     1152, 1153, 1129, 1130, 1131, 1132, 1154, 1135, 1137, 1138,
+     1139, 1155, 1140, 1141, 1156, 1157, 1158, 1159, 1142, 1160,
+     1162, 1143, 1144, 1164, 1149, 1150, 1165, 1166, 1151, 1167,
+     1168, 1152, 1153, 1169, 1170, 1172, 1171, 1154, 1175, 1178,
+
+     1179, 1180, 1155, 1181, 1182, 1156, 1157, 1158, 1159, 1183,
+     1160, 1162, 1171, 1184, 1164, 1185, 1186, 1165, 1166, 1187,
+     1167, 1168, 1188, 1189, 1169, 1170, 1172, 1171, 1190, 1175,
+     1178, 1179, 1180, 1192, 1181, 1182, 1194, 1195, 1197, 1198,
+     1183, 1199, 1200, 1171, 1184, 1201, 1185, 1186, 1202, 1203,
+     1187, 1205, 1208, 1188, 1189, 1209, 1210, 1211, 1212, 1190,
+     1213, 1214, 1215, 1217, 1192, 1218, 1219, 1194, 1195, 1197,
+     1198, 1222, 1199, 1200, 1223, 1224, 1201, 1225, 1226, 1202,
+     1203, 1227, 1205, 1208, 1228, 1229, 1209, 1210, 1211, 1212,
+     1230, 1213, 1214, 1215, 1217, 1231, 1218, 1219, 1233, 1234,
+
+     1235, 1236, 1222, 1238, 1240, 1223, 1224, 1241, 1225, 1226,
+     1242, 1244, 1227, 1246, 1247, 1228, 1229, 1248, 1249, 1250,
+     1251, 1230, 1252, 1253, 1254, 1255, 1231, 1257, 1258, 1233,
+     1234, 1235, 1236, 1259, 1238, 1240, 1260, 1262, 1241, 1263,
+     1264, 1242, 1244, 1265, 1246, 1247, 1266, 1267, 1248, 1249,
+     1250, 1251, 1268, 1252, 1253, 1254, 1255, 1269, 1257, 1258,
+     1270, 1272, 1273, 1275, 1259, 1276, 1277, 1260, 1262, 1278,
+     1263, 1264, 1279, 1280, 1265, 1281, 1282, 1266, 1267, 1284,
+     1285, 1286, 1287, 1268, 1288, 1290, 1291, 1292, 1269, 1293,
+     1294, 1270, 1272, 1273, 1275, 1295, 1276, 1277, 1296, 1298,
+
+     1278, 1299, 1300, 1279, 1280, 1301, 1281, 1282, 1302, 1306,
+     1284, 1285, 1286, 1287, 1307, 1288, 1290, 1291, 1292, 1308,
+     1293, 1294, 1304,    0, 1304, 1310, 1295,    0, 1312, 1296,
+     1298, 1313, 1299, 1300, 1307, 1315, 1301, 1317, 1318, 1302,
+     1306, 1309, 1309, 1319, 1320, 1307, 1321, 1322, 1323, 1324,
+     1308, 1325, 1309, 1304, 1309, 1304, 1310, 1326, 1309, 1312,
+     1327, 1328, 1313, 1329, 1330, 1307, 1315, 1331, 1317, 1318,
+     1332, 1333, 1309, 1309, 1319, 1320, 1334, 1321, 1322, 1323,
+     1324, 1335, 1325, 1309, 1336, 1309, 1337, 1339, 1326, 1309,
+     1340, 1327, 1328, 1341, 1329, 1330, 1342, 1338, 1331, 1338,
+
+     1343, 1332, 1333, 1344, 1345, 1346, 1347, 1334, 1348, 1349,
+     1350, 1351, 1335, 1352, 1353, 1336, 1354, 1337, 1339, 1355,
+     1356, 1340, 1357, 1358, 1341, 1360, 1362, 1342, 1338, 1364,
+     1338, 1343, 1365, 1367, 1344, 1345, 1346, 1347, 1368, 1348,
+     1349, 1350, 1351, 1369, 1352, 1353, 1370, 1354, 1359, 1359,
+     1355, 1356, 1373, 1357, 1358, 1374, 1360, 1362, 1375, 1376,
+     1364, 1359, 1377, 1365, 1367, 1359, 1379, 1380, 1381, 1368,
+     1382, 1383, 1384, 1385, 1369, 1386, 1387, 1370, 1389, 1359,
+     1359, 1390, 1391, 1373, 1392, 1393, 1374, 1394, 1396, 1375,
+     1376, 1397, 1359, 1377, 1398, 1399, 1359, 1379, 1380, 1381,
+
+     1400, 1382, 1383, 1384, 1385, 1402, 1386, 1387, 1403, 1389,
+     1404, 1406, 1390, 1391, 1407, 1392, 1393, 1408, 1394, 1396,
+     1409, 1410, 1397, 1411, 1412, 1398, 1399, 1413, 1414, 1415,
+     1416, 1400, 1417, 1418, 1419, 1420, 1402, 1421, 1422, 1403,
+     1423, 1404, 1406, 1424, 1425, 1407, 1426, 1430, 1408, 1431,
+     1432, 1409, 1410, 1433, 1411, 1412, 1434, 1435, 1413, 1414,
+     1415, 1416, 1436, 1417, 1418, 1419, 1420, 1437, 1421, 1422,
+     1438, 1423, 1441, 1442, 1424, 1425, 1443, 1426, 1430, 1444,
+     1431, 1432, 1445, 1446, 1433, 1447, 1448, 1434, 1435, 1449,
+     1451, 1450, 1452, 1436, 1454, 1455, 1457, 1458, 1437, 1450,
+
+     1460, 1438, 1461, 1441, 1442, 1462, 1464, 1443, 1452, 1465,
+     1444, 1466, 1467, 1445, 1446, 1469, 1447, 1448, 1471, 1473,
+     1449, 1451, 1450, 1452, 1474, 1454, 1455, 1457, 1458, 1475,
+     1450, 1460, 1476, 1461, 1477, 1478, 1462, 1464, 1479, 1452,
+     1465, 1480, 1466, 1467, 1482, 1484, 1469, 1485, 1486, 1471,
+     1473, 1490, 1491, 1492, 1493, 1474, 1494, 1496, 1497, 1499,
+     1475, 1502, 1505, 1476, 1508, 1477, 1478, 1509, 1511, 1479,
+     1513, 1515, 1480, 1517, 1518, 1482, 1484, 1519, 1485, 1486,
+     1521, 1522, 1490, 1491, 1492, 1493, 1524, 1494, 1496, 1497,
+     1499, 1525, 1502, 1505, 1526, 1508, 1528, 1531, 1509, 1511,
+
+     1533, 1513, 1515, 1536, 1517, 1518, 1537, 1538, 1519, 1539,
+     1541, 1521, 1522, 1542, 1543, 1544, 1545, 1524, 1546, 1547,
+     1548, 1549, 1525, 1550, 1551, 1526, 1553, 1528, 1531, 1554,
+     1555, 1533, 1556, 1557, 1536, 1558, 1559, 1537, 1538, 1560,
+     1539, 1541, 1561, 1563, 1542, 1543, 1544, 1545, 1564, 1546,
+     1547, 1548, 1549, 1565, 1550, 1551, 1566, 1553, 1567, 1568,
+     1554, 1555, 1569, 1556, 1557, 1570, 1558, 1559, 1571, 1572,
+     1560, 1573, 1574, 1561, 1563, 1575, 1576, 1577, 1578, 1564,
+     1579, 1580, 1581, 1582, 1565, 1583, 1584, 1566, 1585, 1567,
+     1568, 1586, 1589, 1569, 1590, 1591, 1570, 1592, 1593, 1571,
+
+     1572, 1594, 1573, 1574, 1598, 1600, 1575, 1576, 1577, 1578,
+     1602, 1579, 1580, 1581, 1582, 1604, 1583, 1584, 1605, 1585,
+     1606, 1607, 1586, 1589, 1609, 1590, 1591, 1611, 1592, 1593,
+     1612, 1613, 1594, 1614, 1615, 1598, 1600, 1617, 1618, 1621,
+     1622, 1602, 1623, 1626, 1627, 1629, 1604, 1634, 1635, 1605,
+     1636, 1606, 1607, 1637, 1638, 1609, 1639, 1642, 1611, 1643,
+     1644, 1612, 1613, 1645, 1614, 1615, 1646, 1647, 1617, 1618,
+     1621, 1622, 1648, 1623, 1626, 1627, 1629, 1649, 1634, 1635,
+     1651, 1636, 1652, 1653, 1637, 1638, 1654, 1639, 1642, 1655,
+     1643, 1644, 1656, 1657, 1645, 1658, 1659, 1646, 1647, 1661,
+
+     1662, 1663, 1664, 1648, 1665, 1666, 1667, 1668, 1649, 1669,
+     1670, 1651, 1671, 1652, 1653, 1672, 1673, 1654, 1675, 1678,
+     1655, 1680, 1683, 1656, 1657, 1685, 1658, 1659, 1686, 1687,
+     1661, 1662, 1663, 1664, 1688, 1665, 1666, 1667, 1668, 1690,
+     1669, 1670, 1694, 1671, 1698, 1699, 1672, 1673, 1700, 1675,
+     1678, 1688, 1680, 1683, 1702, 1703, 1685, 1704, 1705, 1686,
+     1687, 1707, 1708, 1709, 1710, 1688, 1711, 1716, 1717, 1718,
+     1690, 1721, 1724, 1694, 1725, 1698, 1699, 1727, 1729, 1700,
+     1730, 1731, 1688, 1732, 1733, 1702, 1703, 1734, 1704, 1705,
+     1735, 1736, 1707, 1708, 1709, 1710, 1737, 1711, 1716, 1717,
+
+     1718, 1739, 1721, 1724, 1742, 1725, 1744, 1746, 1727, 1729,
+     1747, 1730, 1731, 1748, 1732, 1733, 1749, 1751, 1734, 1753,
+     1755, 1735, 1736, 1756, 1758, 1760, 1761, 1737, 1762, 1764,
+     1765, 1766, 1739, 1768, 1769, 1742, 1771, 1744, 1746, 1772,
+     1776, 1747, 1778, 1779, 1748, 1780, 1781, 1749, 1751, 1782,
+     1753, 1755, 1783, 1784, 1756, 1758, 1760, 1761, 1785, 1762,
+     1764, 1765, 1766, 1786, 1768, 1769, 1788, 1771, 1789, 1790,
+     1772, 1776, 1793, 1778, 1779, 1794, 1780, 1781, 1796, 1797,
+     1782, 1799, 1803, 1783, 1784, 1804, 1805, 1806, 1808, 1785,
+     1809, 1810, 1811, 1812, 1786, 1814, 1816, 1788, 1817, 1789,
+
+     1790, 1818, 1819, 1793, 1821, 1824, 1794, 1827, 1828, 1796,
+     1797, 1831, 1799, 1803, 1832, 1835, 1804, 1805, 1806, 1808,
+     1836, 1809, 1810, 1811, 1812, 1837, 1814, 1816, 1839, 1817,
+     1840, 1841, 1818, 1819, 1842, 1821, 1824, 1844, 1827, 1828,
+     1845, 1846, 1831, 1847, 1850, 1832, 1835, 1851, 1852, 1854,
+     1855, 1836,    0,    0,    0,    0, 1837,    0,    0, 1839,
+        0, 1840, 1841,    0,    0, 1842,    0,    0, 1844,    0,
+        0, 1845, 1846,    0, 1847, 1850,    0,    0, 1851, 1852,
+     1854, 1855, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858,
+     1858, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
+
+     1860,    0, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1861,
+        0, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1862, 1862,
+     1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1864,
+     1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1865,    0,
+     1865, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
+     1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1868,
+     1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1869, 1869,
+     1869, 1869, 1869, 1869, 1869, 1869, 1869, 1870, 1870, 1870,
+        0,    0, 1870, 1870,    0, 1870, 1871, 1871, 1871, 1871,
+     1871, 1871, 1871, 1871, 1871, 1872,    0,    0, 1872, 1872,
+
+        0, 1872, 1873, 1873, 1873,    0, 1873, 1873, 1873, 1873,
+     1873, 1874, 1874, 1874, 1874,    0, 1874, 1874, 1874, 1874,
+     1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1671,7 +2116,7 @@ char path[MS_MAXPATHLEN];
 
 
 
-#line 1675 "maplexer.c"
+#line 2120 "maplexer.c"
 
 #define INITIAL 0
 #define URL_VARIABLE 1
@@ -1686,6 +2131,35 @@ char path[MS_MAXPATHLEN];
 
 static int yy_init_globals (void );
 
+/* Accessor methods to globals.
+   These are made visible to non-reentrant scanners for convenience. */
+
+int msyylex_destroy (void );
+
+int msyyget_debug (void );
+
+void msyyset_debug (int debug_flag  );
+
+YY_EXTRA_TYPE msyyget_extra (void );
+
+void msyyset_extra (YY_EXTRA_TYPE user_defined  );
+
+FILE *msyyget_in (void );
+
+void msyyset_in  (FILE * in_str  );
+
+FILE *msyyget_out (void );
+
+void msyyset_out  (FILE * out_str  );
+
+yy_size_t msyyget_leng (void );
+
+char *msyyget_text (void );
+
+int msyyget_lineno (void );
+
+void msyyset_lineno (int line_number  );
+
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
  */
@@ -1728,7 +2202,7 @@ static int input (void );
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO (void) fwrite( msyytext, msyyleng, 1, msyyout )
+#define ECHO fwrite( msyytext, msyyleng, 1, msyyout )
 #endif
 
 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
@@ -1739,7 +2213,7 @@ static int input (void );
 	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
 		{ \
 		int c = '*'; \
-		size_t n; \
+		yy_size_t n; \
 		for ( n = 0; n < max_size && \
 			     (c = getc( msyyin )) != EOF && c != '\n'; ++n ) \
 			buf[n] = (char) c; \
@@ -1895,7 +2369,7 @@ YY_DECL
          break;
        }
 
-#line 1899 "maplexer.c"
+#line 2373 "maplexer.c"
 
 	if ( !(yy_init) )
 		{
@@ -1948,13 +2422,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 >= 1854 )
+				if ( yy_current_state >= 1858 )
 					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] != 2325 );
+		while ( yy_base[yy_current_state] != 4230 );
 
 yy_find_action:
 		yy_act = yy_accept[yy_current_state];
@@ -3793,7 +4267,7 @@ YY_RULE_SETUP
 #line 702 "maplexer.l"
 ECHO;
 	YY_BREAK
-#line 3797 "maplexer.c"
+#line 4271 "maplexer.c"
 case YY_STATE_EOF(URL_VARIABLE):
 case YY_STATE_EOF(URL_STRING):
 case YY_STATE_EOF(EXPRESSION_STRING):
@@ -3983,7 +4457,7 @@ static int yy_get_next_buffer (void)
 
 	else
 		{
-			int num_to_read =
+			yy_size_t num_to_read =
 			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
 
 		while ( num_to_read <= 0 )
@@ -3997,7 +4471,7 @@ static int yy_get_next_buffer (void)
 
 			if ( b->yy_is_our_buffer )
 				{
-				int new_size = b->yy_buf_size * 2;
+				yy_size_t new_size = b->yy_buf_size * 2;
 
 				if ( new_size <= 0 )
 					b->yy_buf_size += b->yy_buf_size / 8;
@@ -4052,6 +4526,14 @@ static int yy_get_next_buffer (void)
 	else
 		ret_val = EOB_ACT_CONTINUE_SCAN;
 
+	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+		/* Extend the array by 50%, plus the number we really need. */
+		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) msyyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
+		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+	}
+
 	(yy_n_chars) += number_to_move;
 	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
 	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
@@ -4072,7 +4554,7 @@ static int yy_get_next_buffer (void)
 
 	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
 		{
-		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 56);
+		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 82);
 		if ( yy_accept[yy_current_state] )
 			{
 			(yy_last_accepting_state) = yy_current_state;
@@ -4081,7 +4563,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 >= 1854 )
+			if ( yy_current_state >= 1858 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -4100,7 +4582,7 @@ static int yy_get_next_buffer (void)
 	register int yy_is_jam;
     	register char *yy_cp = (yy_c_buf_p);
 
-	register YY_CHAR yy_c = 56;
+	register YY_CHAR yy_c = 82;
 	if ( yy_accept[yy_current_state] )
 		{
 		(yy_last_accepting_state) = yy_current_state;
@@ -4109,11 +4591,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 >= 1854 )
+		if ( yy_current_state >= 1858 )
 			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 == 1853);
+	yy_is_jam = (yy_current_state == 1857);
 
 	return yy_is_jam ? 0 : yy_current_state;
 }
@@ -4130,7 +4612,7 @@ static int yy_get_next_buffer (void)
 	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
 		{ /* need to shift things up to make room */
 		/* +2 for EOB chars. */
-		register int number_to_move = (yy_n_chars) + 2;
+		register yy_size_t number_to_move = (yy_n_chars) + 2;
 		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
 					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
 		register char *source =
@@ -4179,7 +4661,7 @@ static int yy_get_next_buffer (void)
 
 		else
 			{ /* need more input */
-			int offset = (yy_c_buf_p) - (yytext_ptr);
+			yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
 			++(yy_c_buf_p);
 
 			switch ( yy_get_next_buffer(  ) )
@@ -4455,7 +4937,7 @@ void msyypop_buffer_state (void)
  */
 static void msyyensure_buffer_stack (void)
 {
-	int num_to_alloc;
+	yy_size_t num_to_alloc;
     
 	if (!(yy_buffer_stack)) {
 
@@ -4467,7 +4949,9 @@ static void msyyensure_buffer_stack (void)
 		(yy_buffer_stack) = (struct yy_buffer_state**)msyyalloc
 								(num_to_alloc * sizeof(struct yy_buffer_state*)
 								);
-		
+		if ( ! (yy_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in msyyensure_buffer_stack()" );
+								  
 		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
 				
 		(yy_buffer_stack_max) = num_to_alloc;
@@ -4485,6 +4969,8 @@ static void msyyensure_buffer_stack (void)
 								((yy_buffer_stack),
 								num_to_alloc * sizeof(struct yy_buffer_state*)
 								);
+		if ( ! (yy_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in msyyensure_buffer_stack()" );
 
 		/* zero only the new slots.*/
 		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
@@ -4529,7 +5015,7 @@ YY_BUFFER_STATE msyy_scan_buffer  (char * base, yy_size_t  size )
 
 /** Setup the input buffer state to scan a string. The next call to msyylex() will
  * scan from a @e copy of @a str.
- * @param str a NUL-terminated string to scan
+ * @param yystr a NUL-terminated string to scan
  * 
  * @return the newly allocated buffer state object.
  * @note If you want to scan bytes that may contain NUL values, then use
@@ -4548,12 +5034,11 @@ YY_BUFFER_STATE msyy_scan_string (yyconst char * yystr )
  * 
  * @return the newly allocated buffer state object.
  */
-YY_BUFFER_STATE msyy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
+YY_BUFFER_STATE msyy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
 {
 	YY_BUFFER_STATE b;
 	char *buf;
-	yy_size_t n;
-	int i;
+	yy_size_t n, i;
     
 	/* Get memory for full buffer, including space for trailing EOB's. */
 	n = _yybytes_len + 2;
@@ -4635,7 +5120,7 @@ FILE *msyyget_out  (void)
 /** Get the length of the current token.
  * 
  */
-int msyyget_leng  (void)
+yy_size_t msyyget_leng  (void)
 {
         return msyyleng;
 }
diff --git a/maplexer.l b/maplexer.l
index 890c65e..8a8c402 100644
--- a/maplexer.l
+++ b/maplexer.l
@@ -266,7 +266,7 @@ char path[MS_MAXPATHLEN];
 <INITIAL,URL_STRING>keyimage                   { MS_LEXER_RETURN_TOKEN(KEYIMAGE); }
 <INITIAL,URL_STRING>keysize                    { MS_LEXER_RETURN_TOKEN(KEYSIZE); }
 <INITIAL>keyspacing                            { MS_LEXER_RETURN_TOKEN(KEYSPACING); }
-<INITIAL,URL_STRING>label                      { MS_LEXER_RETURN_TOKEN(LABEL); }
+<INITIAL,URL_VARIABLE>label                      { MS_LEXER_RETURN_TOKEN(LABEL); }
 <INITIAL>labelcache                            { MS_LEXER_RETURN_TOKEN(LABELCACHE); }
 <INITIAL>labelformat                           { MS_LEXER_RETURN_TOKEN(LABELFORMAT); }
 <INITIAL,URL_STRING>labelitem                  { MS_LEXER_RETURN_TOKEN(LABELITEM); }
diff --git a/mapogroutput.c b/mapogroutput.c
index 0ee8692..d6b63e2 100644
--- a/mapogroutput.c
+++ b/mapogroutput.c
@@ -205,8 +205,10 @@ static int msOGRWriteShape( layerObj *map_layer, OGRLayerH hOGRLayer,
   OGRErr eErr;
   int i, out_field;
   OGRwkbGeometryType eLayerGType, eFeatureGType = wkbUnknown;
+  OGRFeatureDefnH hLayerDefn;
 
-  eLayerGType = OGR_FD_GetGeomType(OGR_L_GetLayerDefn(hOGRLayer));
+  hLayerDefn = OGR_L_GetLayerDefn( hOGRLayer );
+  eLayerGType = OGR_FD_GetGeomType(hLayerDefn);
 
   /* -------------------------------------------------------------------- */
   /*      Transform point geometry.                                       */
@@ -380,7 +382,7 @@ static int msOGRWriteShape( layerObj *map_layer, OGRLayerH hOGRLayer,
   /*      doesn't match the layer.                                        */
   /* -------------------------------------------------------------------- */
   eLayerGType =
-    wkbFlatten(OGR_FD_GetGeomType(OGR_L_GetLayerDefn(hOGRLayer)));
+    wkbFlatten(OGR_FD_GetGeomType(hLayerDefn));
 
   if( hGeom != NULL )
     eFeatureGType = wkbFlatten(OGR_G_GetGeometryType( hGeom ));
@@ -413,7 +415,7 @@ static int msOGRWriteShape( layerObj *map_layer, OGRLayerH hOGRLayer,
   /*      Consider flattening the geometry to 2D if we want 2D            */
   /*      output.                                                         */
   /* -------------------------------------------------------------------- */
-  eLayerGType = OGR_FD_GetGeomType(OGR_L_GetLayerDefn(hOGRLayer));
+  eLayerGType = OGR_FD_GetGeomType(hLayerDefn);
 
   if( hGeom != NULL )
     eFeatureGType = OGR_G_GetGeometryType( hGeom );
@@ -426,7 +428,7 @@ static int msOGRWriteShape( layerObj *map_layer, OGRLayerH hOGRLayer,
   /* -------------------------------------------------------------------- */
   /*      Create the feature, and attach the geometry.                    */
   /* -------------------------------------------------------------------- */
-  hFeat = OGR_F_Create( OGR_L_GetLayerDefn( hOGRLayer ) );
+  hFeat = OGR_F_Create( hLayerDefn );
 
   OGR_F_SetGeometryDirectly( hFeat, hGeom );
 
@@ -440,6 +442,18 @@ static int msOGRWriteShape( layerObj *map_layer, OGRLayerH hOGRLayer,
     if( !item->visible )
       continue;
 
+    /* Avoid setting empty strings for numeric fields, so that OGR */
+    /* doesn't take them as 0. (#4633) */
+    if( shape->values[i][0] == '\0' ) {
+      OGRFieldDefnH hFieldDefn = OGR_FD_GetFieldDefn(hLayerDefn, out_field);
+      OGRFieldType eFieldType = OGR_Fld_GetType(hFieldDefn);
+      if( eFieldType == OFTInteger || eFieldType == OFTReal )
+      {
+        out_field++;
+        continue;
+      }
+    }
+
     OGR_F_SetFieldString( hFeat, out_field++, shape->values[i] );
   }
 
diff --git a/maporaclespatial.c b/maporaclespatial.c
index 9ea9729..d59a181 100644
--- a/maporaclespatial.c
+++ b/maporaclespatial.c
@@ -2153,15 +2153,14 @@ int msOracleSpatialLayerNextShape( layerObj *layer, shapeObj *shape )
                 && TRY( hand, OCIAttrGet( (dvoid *)sthand->stmthp, (ub4)OCI_HTYPE_STMT, (dvoid *)&sthand->rows_fetched, (ub4 *)0, (ub4)OCI_ATTR_ROWS_FETCHED, hand->errhp ) )
                 && TRY( hand, OCIAttrGet( (dvoid *)sthand->stmthp, (ub4)OCI_HTYPE_STMT, (dvoid *)&sthand->rows_count, (ub4 *)0, (ub4)OCI_ATTR_ROW_COUNT, hand->errhp ) );
 
+  
+      if (!success || sthand->rows_fetched == 0 || sthand->row_num >= sthand->rows_count) {
+        hand->last_oci_status=MS_SUCCESS;
+        return MS_DONE;
+      }
       if(layer->debug >= 4 )
         msDebug("msOracleSpatialLayerNextShape on layer %p, Fetched %d more rows (%d total)\n", layer, sthand->rows_fetched, sthand->rows_count);
 
-      if (sthand->row_num >= sthand->rows_count)
-        return MS_DONE;
-
-      if (!success || sthand->rows_fetched == 0)
-        return MS_DONE;
-
       sthand->row = 0; /* reset buffer row index */
     }
 
@@ -3156,11 +3155,10 @@ int msOracleSpatialLayerGetExtent(layerObj *layer, rectObj *extent)
       success = TRY( hand, OCIStmtFetch( sthand->stmthp, hand->errhp, (ub4)ARRAY_SIZE, (ub2)OCI_FETCH_NEXT, (ub4)OCI_DEFAULT ) )
                 && TRY( hand, OCIAttrGet( (dvoid *)sthand->stmthp, (ub4)OCI_HTYPE_STMT, (dvoid *)&sthand->rows_fetched, (ub4 *)0, (ub4)OCI_ATTR_ROW_COUNT, hand->errhp ) );
 
-      if (!success || sthand->rows_fetched == 0)
-        break;
-
-      if (sthand->row_num >= sthand->rows_fetched)
+      if (!success || sthand->rows_fetched == 0 || sthand->row_num >= sthand->rows_fetched) {
+        hand->last_oci_status=MS_SUCCESS;
         break;
+      }
 
       sthand->row = 0; /* reset row index */
     }
diff --git a/mapows.c b/mapows.c
index 2bb323b..cd30d9c 100644
--- a/mapows.c
+++ b/mapows.c
@@ -95,7 +95,7 @@ static int msOWSPreParseRequest(cgiRequestObj *request,
                                 owsRequestObj *ows_request)
 {
   /* decide if KVP or XML */
-  if (request->type == MS_GET_REQUEST) {
+  if (request->type == MS_GET_REQUEST || (request->type == MS_POST_REQUEST && strcmp(request->contenttype, "application/x-www-form-urlencoded")==0)) {
     int i;
     /* parse KVP parameters service, version and request */
     for (i = 0; i < request->NumParams; ++i) {
@@ -326,7 +326,7 @@ int msOWSRequestIsEnabled(mapObj *map, layerObj *layer,
     if (disabled) return MS_FALSE;
   }
 
-  if (map && (map->numlayers > 0) && check_all_layers == MS_TRUE) {
+  if (map && check_all_layers == MS_TRUE) {
     int i, globally_enabled = MS_FALSE;
     enable_request = msOWSLookupMetadata(&map->web.metadata, namespaces, "enable_request");
     globally_enabled = msOWSParseRequestMetadata(enable_request, request, &disabled);
@@ -357,6 +357,9 @@ int msOWSRequestIsEnabled(mapObj *map, layerObj *layer,
       if (result || (!disabled && globally_enabled))
         return MS_TRUE;
     }
+
+    if (!disabled && globally_enabled)
+        return MS_TRUE;
   }
 
   return MS_FALSE;
diff --git a/mapscript/csharp/csmodule.i b/mapscript/csharp/csmodule.i
index 92a176f..92a4161 100644
--- a/mapscript/csharp/csmodule.i
+++ b/mapscript/csharp/csmodule.i
@@ -380,6 +380,32 @@ DllExport void SWIGSTDCALL SWIGRegisterByteArrayCallback_$module(SWIG_CSharpByte
 #endif
 %}
 
+/* Typemaps for pattern array */
+%typemap(imtype) (double pattern[ANY]) "IntPtr"
+%typemap(cstype) (double pattern[ANY]) "double[]"
+%typemap(in) (double pattern[ANY]) %{ $1 = ($1_ltype)$input; %}
+%typemap(csin) (double pattern[ANY]) "$csinput"
+%typemap(csvarout, excode=SWIGEXCODE2) (double pattern[ANY]) %{
+    get {
+      IntPtr cPtr = $imcall;
+      double[] ret = new double[patternlength];
+      if (patternlength > 0) {       
+	        System.Runtime.InteropServices.Marshal.Copy(cPtr, ret, 0, patternlength);
+      }
+      $excode
+      return ret;
+    } 
+    set {
+      IntPtr cPtr = $imcall;
+      if (value.Length > 0) {       
+	        System.Runtime.InteropServices.Marshal.Copy(value, 0, cPtr, value.Length);
+      }
+      patternlength = value.Length;
+      $excode
+    }
+    %}
+%typemap(csvarin, excode="") (double pattern[ANY]) %{$excode%}
+
 /* Typemaps for device handle */
 %typemap(imtype) (void* device)  %{IntPtr%}
 %typemap(cstype) (void* device) %{IntPtr%}
diff --git a/mapscript/csharp/mapscript.cs b/mapscript/csharp/mapscript.cs
index e16d551..14e1781 100644
--- a/mapscript/csharp/mapscript.cs
+++ b/mapscript/csharp/mapscript.cs
@@ -48,7 +48,7 @@ public class mapscript {
 
   public static mapObj msLoadMapFromString(string buffer, string new_mappath) {
     IntPtr cPtr = mapscriptPINVOKE.msLoadMapFromString(buffer, new_mappath);
-    mapObj ret = (cPtr == IntPtr.Zero) ? null : new mapObj(cPtr, false, ThisOwn_false());
+    mapObj ret = (cPtr == IntPtr.Zero) ? null : new mapObj(cPtr, true, ThisOwn_true());
     if (mapscriptPINVOKE.SWIGPendingException.Pending) throw mapscriptPINVOKE.SWIGPendingException.Retrieve();
     return ret;
   }
diff --git a/mapscript/csharp/mapscriptPINVOKE.cs b/mapscript/csharp/mapscriptPINVOKE.cs
index d29a1a0..70f44c4 100644
--- a/mapscript/csharp/mapscriptPINVOKE.cs
+++ b/mapscript/csharp/mapscriptPINVOKE.cs
@@ -816,7 +816,7 @@ class mapscriptPINVOKE {
   public static extern int styleObj_patternlength_get(HandleRef jarg1);
 
   [DllImport("mapscript", EntryPoint="CSharp_styleObj_pattern_set")]
-  public static extern void styleObj_pattern_set(HandleRef jarg1, HandleRef jarg2);
+  public static extern void styleObj_pattern_set(HandleRef jarg1, IntPtr jarg2);
 
   [DllImport("mapscript", EntryPoint="CSharp_styleObj_pattern_get")]
   public static extern IntPtr styleObj_pattern_get(HandleRef jarg1);
@@ -2805,7 +2805,7 @@ class mapscriptPINVOKE {
   public static extern int strokeStyleObj_patternlength_get(HandleRef jarg1);
 
   [DllImport("mapscript", EntryPoint="CSharp_strokeStyleObj_pattern_set")]
-  public static extern void strokeStyleObj_pattern_set(HandleRef jarg1, HandleRef jarg2);
+  public static extern void strokeStyleObj_pattern_set(HandleRef jarg1, IntPtr jarg2);
 
   [DllImport("mapscript", EntryPoint="CSharp_strokeStyleObj_pattern_get")]
   public static extern IntPtr strokeStyleObj_pattern_get(HandleRef jarg1);
diff --git a/mapscript/csharp/mapscript_wrap.c b/mapscript/csharp/mapscript_wrap.c
index e3b8f77..3f674e1 100644
--- a/mapscript/csharp/mapscript_wrap.c
+++ b/mapscript/csharp/mapscript_wrap.c
@@ -608,7 +608,7 @@ SWIGINTERN void delete_labelObj(labelObj *self){
       freeLabel(self);
     }
 SWIGINTERN int labelObj_updateFromString(labelObj *self,char *snippet){
-    return msUpdateLabelFromString(self, snippet);
+    return msUpdateLabelFromString(self, snippet,0);
   }
 SWIGINTERN int labelObj_removeBinding(labelObj *self,int binding){
     if(binding < 0 || binding >= 9) return MS_FAILURE;
@@ -2394,8 +2394,11 @@ SWIGINTERN int rectObj_draw(rectObj *self,mapObj *map,layerObj *layer,imageObj *
         msInitShape(&shape);
         msRectToPolygon(*self, &shape);
         shape.classindex = classindex;
-        shape.text = strdup(text);
-
+        if(text && layer->class[classindex]->numlabels > 0) {
+          shape.text = strdup(text);
+          msShapeGetAnnotation(layer,&shape);
+        }
+        
         msDrawShape(map, layer, &shape, image, -1, MS_DRAWMODE_FEATURES|MS_DRAWMODE_LABELS);
 
         msFreeShape(&shape);
@@ -3350,7 +3353,7 @@ SWIGEXPORT char * SWIGSTDCALL CSharp_MS_VERSION_get() {
   char * jresult ;
   char *result = 0 ;
   
-  result = (char *) "6.2.0";
+  result = (char *) "6.2.1";
   jresult = SWIG_csharp_string_callback((const char *)result); 
   return jresult;
 }
@@ -3380,7 +3383,7 @@ SWIGEXPORT int SWIGSTDCALL CSharp_MS_VERSION_REV_get() {
   int jresult ;
   int result;
   
-  result = (int) 0;
+  result = (int) 1;
   jresult = result; 
   return jresult;
 }
@@ -3390,7 +3393,7 @@ SWIGEXPORT int SWIGSTDCALL CSharp_MS_VERSION_NUM_get() {
   int jresult ;
   int result;
   
-  result = (int) (6*10000+2*100+0);
+  result = (int) (6*10000+2*100+1);
   jresult = result; 
   return jresult;
 }
diff --git a/mapscript/csharp/strokeStyleObj.cs b/mapscript/csharp/strokeStyleObj.cs
index 72e7bd9..92cd4c1 100644
--- a/mapscript/csharp/strokeStyleObj.cs
+++ b/mapscript/csharp/strokeStyleObj.cs
@@ -103,17 +103,27 @@ public class strokeStyleObj : IDisposable {
     } 
   }
 
-  public SWIGTYPE_p_double pattern {
-    set {
-      mapscriptPINVOKE.strokeStyleObj_pattern_set(swigCPtr, SWIGTYPE_p_double.getCPtr(value));
-      if (mapscriptPINVOKE.SWIGPendingException.Pending) throw mapscriptPINVOKE.SWIGPendingException.Retrieve();
-    } 
+  public double[] pattern {
     get {
       IntPtr cPtr = mapscriptPINVOKE.strokeStyleObj_pattern_get(swigCPtr);
-      SWIGTYPE_p_double ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_double(cPtr, false, ThisOwn_false());
+      double[] ret = new double[patternlength];
+      if (patternlength > 0) {       
+	        System.Runtime.InteropServices.Marshal.Copy(cPtr, ret, 0, patternlength);
+      }
+      
       if (mapscriptPINVOKE.SWIGPendingException.Pending) throw mapscriptPINVOKE.SWIGPendingException.Retrieve();
       return ret;
     } 
+    set {
+      IntPtr cPtr = mapscriptPINVOKE.strokeStyleObj_pattern_get(swigCPtr);
+      if (value.Length > 0) {       
+	        System.Runtime.InteropServices.Marshal.Copy(value, 0, cPtr, value.Length);
+      }
+      patternlength = value.Length;
+      
+      if (mapscriptPINVOKE.SWIGPendingException.Pending) throw mapscriptPINVOKE.SWIGPendingException.Retrieve();
+    }
+    
   }
 
   public double patternoffset {
diff --git a/mapscript/csharp/styleObj.cs b/mapscript/csharp/styleObj.cs
index 01f9d6a..74890cb 100644
--- a/mapscript/csharp/styleObj.cs
+++ b/mapscript/csharp/styleObj.cs
@@ -296,17 +296,27 @@ public class styleObj : IDisposable {
     } 
   }
 
-  public SWIGTYPE_p_double pattern {
-    set {
-      mapscriptPINVOKE.styleObj_pattern_set(swigCPtr, SWIGTYPE_p_double.getCPtr(value));
-      if (mapscriptPINVOKE.SWIGPendingException.Pending) throw mapscriptPINVOKE.SWIGPendingException.Retrieve();
-    } 
+  public double[] pattern {
     get {
       IntPtr cPtr = mapscriptPINVOKE.styleObj_pattern_get(swigCPtr);
-      SWIGTYPE_p_double ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_double(cPtr, false, ThisOwn_false());
+      double[] ret = new double[patternlength];
+      if (patternlength > 0) {       
+	        System.Runtime.InteropServices.Marshal.Copy(cPtr, ret, 0, patternlength);
+      }
+      
       if (mapscriptPINVOKE.SWIGPendingException.Pending) throw mapscriptPINVOKE.SWIGPendingException.Retrieve();
       return ret;
     } 
+    set {
+      IntPtr cPtr = mapscriptPINVOKE.styleObj_pattern_get(swigCPtr);
+      if (value.Length > 0) {       
+	        System.Runtime.InteropServices.Marshal.Copy(value, 0, cPtr, value.Length);
+      }
+      patternlength = value.Length;
+      
+      if (mapscriptPINVOKE.SWIGPendingException.Pending) throw mapscriptPINVOKE.SWIGPendingException.Retrieve();
+    }
+    
   }
 
   public double gap {
diff --git a/mapscript/mapscript.i b/mapscript/mapscript.i
index 8eab93a..41134d0 100644
--- a/mapscript/mapscript.i
+++ b/mapscript/mapscript.i
@@ -41,6 +41,8 @@
 %ignore layerObj::extent;
 #endif
 
+%newobject msLoadMapFromString;
+
 %{
 #include "../../mapserver.h"
 #include "../../maptemplate.h"
diff --git a/mapscript/perl/Makefile.PL.in b/mapscript/perl/Makefile.PL.in
index 5b2a13c..3a316a1 100644
--- a/mapscript/perl/Makefile.PL.in
+++ b/mapscript/perl/Makefile.PL.in
@@ -18,7 +18,7 @@ $inc =~ s/\-I\./\-I$home/g;
 
 $libs = <STREAM>;
 chomp $libs;
-$libs = "-L$libdir -lmapserver";
+$libs = "-L$libdir -L$home/.libs -lmapserver";
 
 $static_libs = <STREAM>;
 chomp $static_libs;
diff --git a/mapscript/perl/mapscript_wrap.c b/mapscript/perl/mapscript_wrap.c
index d46fea5..4b90aa0 100644
--- a/mapscript/perl/mapscript_wrap.c
+++ b/mapscript/perl/mapscript_wrap.c
@@ -2177,7 +2177,7 @@ SWIGINTERN void delete_labelObj(labelObj *self){
       freeLabel(self);
     }
 SWIGINTERN int labelObj_updateFromString(labelObj *self,char *snippet){
-    return msUpdateLabelFromString(self, snippet);
+    return msUpdateLabelFromString(self, snippet,0);
   }
 SWIGINTERN int labelObj_removeBinding(labelObj *self,int binding){
     if(binding < 0 || binding >= 9) return MS_FAILURE;
@@ -3989,8 +3989,11 @@ SWIGINTERN int rectObj_draw(rectObj *self,mapObj *map,layerObj *layer,imageObj *
         msInitShape(&shape);
         msRectToPolygon(*self, &shape);
         shape.classindex = classindex;
-        shape.text = strdup(text);
-
+        if(text && layer->class[classindex]->numlabels > 0) {
+          shape.text = strdup(text);
+          msShapeGetAnnotation(layer,&shape);
+        }
+        
         msDrawShape(map, layer, &shape, image, -1, MS_DRAWMODE_FEATURES|MS_DRAWMODE_LABELS);
 
         msFreeShape(&shape);
@@ -32558,7 +32561,7 @@ XS(_wrap_msLoadMapFromString) {
     }
     arg2 = (char *)(buf2);
     result = (mapObj *)msLoadMapFromString(arg1,arg2);
-    ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_mapObj, 0 | SWIG_SHADOW); argvi++ ;
+    ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_mapObj, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
     if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
     if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
     XSRETURN(argvi);
@@ -45421,7 +45424,7 @@ XS(SWIG_init) {
   
   /*@SWIG:/usr/share/swig1.3/perl5/perltypemaps.swg,65,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "MS_VERSION", TRUE | 0x2 | GV_ADDMULTI);
-    sv_setsv(sv, SWIG_FromCharPtr("6.2.0"));
+    sv_setsv(sv, SWIG_FromCharPtr("6.2.1"));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig1.3/perl5/perltypemaps.swg,65,%set_constant@*/ do {
@@ -45436,12 +45439,12 @@ XS(SWIG_init) {
   } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig1.3/perl5/perltypemaps.swg,65,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "MS_VERSION_REV", TRUE | 0x2 | GV_ADDMULTI);
-    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(0)));
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(1)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig1.3/perl5/perltypemaps.swg,65,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "MS_VERSION_NUM", TRUE | 0x2 | GV_ADDMULTI);
-    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)((6*10000+2*100+0))));
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)((6*10000+2*100+1))));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig1.3/perl5/perltypemaps.swg,65,%set_constant@*/ do {
diff --git a/mapscript/php/Makefile.in b/mapscript/php/Makefile.in
index 20c9adb..0ceaa4b 100644
--- a/mapscript/php/Makefile.in
+++ b/mapscript/php/Makefile.in
@@ -91,6 +91,8 @@ OBJ_SUFFIX=lo
 LINK=$(LTLD) $(LD) $(LT_LDFLAGS)
 MS_LIBS =   ../../libmapserver.la
 
+MS_VERSION = @MS_VERSION@
+
 #
 # The rest of the file should not have to be edited...
 #
@@ -114,10 +116,10 @@ PHPPROJ_OBJS = php_mapscript_util.$(OBJ_SUFFIX) php_proj.$(OBJ_SUFFIX) $(PHP_REG
 
 
 php_mapscript.la: $(PHPMS_OBJS) ../../libmapserver.la
-	$(LINK) -o $@ $(PHPMS_OBJS) $(MS_LIBS)
+	$(LINK) -release $(MS_VERSION) -o $@ $(PHPMS_OBJS) $(MS_LIBS)
 
 php_proj.la:  $(PHPPROJ_OBJS) ../libmapserver.la
-	$(LINK) -o $@ $(PHPPROJ_OBJS) $(MS_LIBS)
+	$(LINK) -release $(MS_VERSION) -o $@ $(PHPPROJ_OBJS) $(MS_LIBS)
 
 %.lo: %.c php_mapscript_util.h php_mapscript.h
 	$(LTCC) $(CC) $(CFLAGS112) -c -o $@ $<
diff --git a/mapscript/php/label.c b/mapscript/php/label.c
index 1ca908b..7b07d97 100644
--- a/mapscript/php/label.c
+++ b/mapscript/php/label.c
@@ -85,6 +85,14 @@ ZEND_BEGIN_ARG_INFO_EX(label_deleteStyle_args, 0, 0, 1)
 ZEND_ARG_INFO(0, index)
 ZEND_END_ARG_INFO()
 
+ZEND_BEGIN_ARG_INFO_EX(label_setExpression_args, 0, 0, 1)
+ZEND_ARG_INFO(0, expression)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(label_setText_args, 0, 0, 1)
+ZEND_ARG_INFO(0, text)
+ZEND_END_ARG_INFO()
+
 /* {{{ proto void __construct()
    Create a new label instance. */
 PHP_METHOD(labelObj, __construct)
@@ -546,6 +554,126 @@ PHP_METHOD(labelObj, free)
 }
 /* }}} */
 
+/* {{{ proto int setExpression(string exression)
+   Set the expression string for a label object. */
+PHP_METHOD(labelObj, setExpression)
+{
+  char *expression;
+  long expression_len;
+  zval *zobj = getThis();
+  php_label_object *php_label;
+  int status = MS_FAILURE;
+
+  PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
+  if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
+                            &expression, &expression_len) == FAILURE) {
+    PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
+    return;
+  }
+  PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
+
+  php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+
+  status = labelObj_setExpression(php_label->label, expression);
+
+  if (status != MS_SUCCESS) {
+    mapscript_throw_mapserver_exception("" TSRMLS_CC);
+    return;
+  }
+
+
+  RETURN_LONG(status);
+}
+/* }}} */
+
+/* {{{ proto string getExpressionString()
+   Get the expression string for a label object. */
+PHP_METHOD(labelObj, getExpressionString)
+{
+  zval *zobj = getThis();
+  php_label_object *php_label;
+  char *value = NULL;
+
+  PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
+  if (zend_parse_parameters_none() == FAILURE) {
+    PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
+    return;
+  }
+  PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
+
+  php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+
+  value = labelObj_getExpressionString(php_label->label);
+
+  if (value == NULL)
+    RETURN_STRING("", 1);
+
+  RETVAL_STRING(value, 1);
+  free(value);
+}
+/* }}} */
+
+/* {{{ proto int setText(string text)
+   Set the text string for a label object. */
+PHP_METHOD(labelObj, setText)
+{
+  char *text;
+  long text_len;
+  zval *zobj = getThis();
+  php_label_object *php_label;
+  php_layer_object *php_layer;
+  int status = MS_FAILURE;
+
+  PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
+  if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
+                            &text, &text_len) == FAILURE) {
+    PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
+    return;
+  }
+  PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
+
+  php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+  php_layer = (php_layer_object *) zend_object_store_get_object(php_label->parent.val TSRMLS_CC);
+
+  status = labelObj_setText(php_label->label, php_layer->layer, text);
+
+  if (status != MS_SUCCESS) {
+    mapscript_throw_mapserver_exception("" TSRMLS_CC);
+    return;
+  }
+
+
+  RETURN_LONG(status);
+}
+/* }}} */
+
+/* {{{ proto string getTextString()
+   Get the text string for a label object. */
+PHP_METHOD(labelObj, getTextString)
+{
+  zval *zobj = getThis();
+  php_label_object *php_label;
+  char *value = NULL;
+
+  PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
+  if (zend_parse_parameters_none() == FAILURE) {
+    PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
+    return;
+  }
+  PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
+
+  php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+
+  value =  labelObj_getTextString(php_label->label);
+
+  if (value == NULL)
+    RETURN_STRING("", 1);
+
+  RETVAL_STRING(value, 1);
+  free(value);
+}
+/* }}} */
+
 zend_function_entry label_functions[] = {
   PHP_ME(labelObj, __construct, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
   PHP_ME(labelObj, __get, label___get_args, ZEND_ACC_PUBLIC)
@@ -561,6 +689,10 @@ zend_function_entry label_functions[] = {
   PHP_ME(labelObj, moveStyleUp, label_moveStyleUp_args, ZEND_ACC_PUBLIC)
   PHP_ME(labelObj, moveStyleDown, label_moveStyleDown_args, ZEND_ACC_PUBLIC)
   PHP_ME(labelObj, deleteStyle, label_deleteStyle_args, ZEND_ACC_PUBLIC)
+  PHP_ME(labelObj, setExpression, label_setExpression_args, ZEND_ACC_PUBLIC)
+  PHP_ME(labelObj, getExpressionString, NULL, ZEND_ACC_PUBLIC)
+  PHP_ME(labelObj, setText, label_setText_args, ZEND_ACC_PUBLIC)
+  PHP_ME(labelObj, getTextString, NULL, ZEND_ACC_PUBLIC)  
   PHP_ME(labelObj, free, NULL, ZEND_ACC_PUBLIC) {
     NULL, NULL, NULL
   }
diff --git a/mapscript/php/mapscript_i.c b/mapscript/php/mapscript_i.c
index 7fb400c..e50d3b0 100644
--- a/mapscript/php/mapscript_i.c
+++ b/mapscript/php/mapscript_i.c
@@ -891,7 +891,7 @@ labelObj *labelObj_clone(labelObj *label)
 
 int labelObj_updateFromString(labelObj *self, char *snippet)
 {
-  return msUpdateLabelFromString(self, snippet);
+  return msUpdateLabelFromString(self, snippet, MS_FALSE);
 }
 
 int labelObj_moveStyleUp(labelObj *self, int index)
@@ -909,6 +909,33 @@ int labelObj_deleteStyle(labelObj *self, int index)
   return msDeleteLabelStyle(self, index);
 }
 
+int labelObj_setExpression(labelObj *self, char *string)
+{
+  if (!string || strlen(string) == 0) {
+    freeExpression(&self->expression);
+    return MS_SUCCESS;
+  } else return msLoadExpressionString(&self->expression, string);
+}
+
+char *labelObj_getExpressionString(labelObj *self)
+{
+  return msGetExpressionString(&(self->expression));
+}
+
+int labelObj_setText(labelObj *self, layerObj *layer, char *string)
+{
+  if (!string || strlen(string) == 0) {
+    freeExpression(&self->text);
+    return MS_SUCCESS;
+  }
+  return msLoadExpressionString(&self->text, string);
+}
+
+char *labelObj_getTextString(labelObj *self)
+{
+  return msGetExpressionString(&(self->text));
+}
+
 /**********************************************************************
  * class extensions for legendObj
  **********************************************************************/
@@ -1033,7 +1060,9 @@ char *classObj_getTextString(classObj *self)
 
 int classObj_drawLegendIcon(classObj *self, mapObj *map, layerObj *layer, int width, int height, imageObj *dstImg, int dstX, int dstY)
 {
+#ifdef USE_GD
   msClearLayerPenValues(layer); // just in case the mapfile has already been processed
+#endif
   return msDrawLegendIcon(map, layer, self, width, height, dstImg, dstX, dstY);
 }
 
@@ -1477,9 +1506,13 @@ int rectObj_draw(rectObj *self, mapObj *map, layerObj *layer,
   msInitShape(&shape);
   msRectToPolygon(*self, &shape);
   shape.classindex = classindex;
-  shape.text = strdup(text);
 
-  msDrawShape(map, layer, &shape, img, -1, MS_FALSE);
+  if(text && layer->class[classindex]->numlabels > 0) {
+    shape.text = strdup(text);
+    msShapeGetAnnotation(layer,&shape);
+  }
+  
+  msDrawShape(map, layer, &shape, img, -1, MS_DRAWMODE_FEATURES|MS_DRAWMODE_LABELS);
 
   msFreeShape(&shape);
 
diff --git a/mapscript/php/php_mapscript.h b/mapscript/php/php_mapscript.h
index 9491333..66cb04d 100644
--- a/mapscript/php/php_mapscript.h
+++ b/mapscript/php/php_mapscript.h
@@ -638,6 +638,10 @@ int             labelObj_moveStyleUp(labelObj *self, int index);
 int             labelObj_moveStyleDown(labelObj *self, int index);
 int             labelObj_deleteStyle(labelObj *self, int index);
 labelObj        *labelObj_clone(labelObj *label);
+int             labelObj_setExpression(labelObj *self, char *string);
+char            *labelObj_getExpressionString(labelObj *self);
+int             labelObj_setText(labelObj *self,layerObj *layer,char *string);
+char           *labelObj_getTextString(labelObj *self);
 
 int             legendObj_updateFromString(legendObj *self, char *snippet);
 
diff --git a/mapscript/php/point.c b/mapscript/php/point.c
index 4690915..36fa01d 100644
--- a/mapscript/php/point.c
+++ b/mapscript/php/point.c
@@ -354,7 +354,7 @@ PHP_METHOD(pointObj, draw)
 {
   zval *zobj =  getThis();
   zval *zmap, *zlayer, *zimage;
-  char *text;
+  char *text = NULL;
   long text_len;
   long classIndex;
   int status = MS_FAILURE;
@@ -364,7 +364,7 @@ PHP_METHOD(pointObj, draw)
   php_image_object *php_image;
 
   PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
-  if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "OOOls",
+  if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "OOOl|s",
                             &zmap, mapscript_ce_map,
                             &zlayer, mapscript_ce_layer,
                             &zimage, mapscript_ce_image,
diff --git a/mapscript/php/rect.c b/mapscript/php/rect.c
index 2274ac3..fd7d964 100644
--- a/mapscript/php/rect.c
+++ b/mapscript/php/rect.c
@@ -121,7 +121,7 @@ PHP_METHOD(rectObj, draw)
 {
   zval *zobj =  getThis();
   zval *zmap, *zlayer, *zimage;
-  char *text;
+  char *text = NULL;
   long text_len;
   long classIndex;
   int status = MS_FAILURE;
@@ -131,7 +131,7 @@ PHP_METHOD(rectObj, draw)
   php_image_object *php_image;
 
   PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
-  if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "OOOls",
+  if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "OOOl|s",
                             &zmap, mapscript_ce_map,
                             &zlayer, mapscript_ce_layer,
                             &zimage, mapscript_ce_image,
diff --git a/mapscript/python/mapscript_wrap.c b/mapscript/python/mapscript_wrap.c
index 0bf2227..23b718d 100644
--- a/mapscript/python/mapscript_wrap.c
+++ b/mapscript/python/mapscript_wrap.c
@@ -3436,7 +3436,7 @@ SWIGINTERN void delete_labelObj(labelObj *self){
       freeLabel(self);
     }
 SWIGINTERN int labelObj_updateFromString(labelObj *self,char *snippet){
-    return msUpdateLabelFromString(self, snippet);
+    return msUpdateLabelFromString(self, snippet,0);
   }
 SWIGINTERN int labelObj_removeBinding(labelObj *self,int binding){
     if(binding < 0 || binding >= 9) return MS_FAILURE;
@@ -5417,8 +5417,11 @@ SWIGINTERN int rectObj_draw(rectObj *self,mapObj *map,layerObj *layer,imageObj *
         msInitShape(&shape);
         msRectToPolygon(*self, &shape);
         shape.classindex = classindex;
-        shape.text = strdup(text);
-
+        if(text && layer->class[classindex]->numlabels > 0) {
+          shape.text = strdup(text);
+          msShapeGetAnnotation(layer,&shape);
+        }
+        
         msDrawShape(map, layer, &shape, image, -1, MS_DRAWMODE_FEATURES|MS_DRAWMODE_LABELS);
 
         msFreeShape(&shape);
@@ -33881,7 +33884,7 @@ SWIGINTERN PyObject *_wrap_msLoadMapFromString(PyObject *SWIGUNUSEDPARM(self), P
       
     }
   }
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_mapObj, 0 |  0 );
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_mapObj, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
@@ -48159,11 +48162,11 @@ SWIG_init(void) {
   PyDict_SetItemString(d, "MapServerChildError", MSExc_MapServerChildError);
   
   
-  SWIG_Python_SetConstant(d, "MS_VERSION",SWIG_FromCharPtr("6.2.0"));
+  SWIG_Python_SetConstant(d, "MS_VERSION",SWIG_FromCharPtr("6.2.1"));
   SWIG_Python_SetConstant(d, "MS_VERSION_MAJOR",SWIG_From_int((int)(6)));
   SWIG_Python_SetConstant(d, "MS_VERSION_MINOR",SWIG_From_int((int)(2)));
-  SWIG_Python_SetConstant(d, "MS_VERSION_REV",SWIG_From_int((int)(0)));
-  SWIG_Python_SetConstant(d, "MS_VERSION_NUM",SWIG_From_int((int)((6*10000+2*100+0))));
+  SWIG_Python_SetConstant(d, "MS_VERSION_REV",SWIG_From_int((int)(1)));
+  SWIG_Python_SetConstant(d, "MS_VERSION_NUM",SWIG_From_int((int)((6*10000+2*100+1))));
   SWIG_Python_SetConstant(d, "MS_TRUE",SWIG_From_int((int)(1)));
   SWIG_Python_SetConstant(d, "MS_FALSE",SWIG_From_int((int)(0)));
   SWIG_Python_SetConstant(d, "MS_UNKNOWN",SWIG_From_int((int)(-1)));
diff --git a/mapscript/python/setup.py b/mapscript/python/setup.py
index 4bc5a92..5c9705d 100644
--- a/mapscript/python/setup.py
+++ b/mapscript/python/setup.py
@@ -131,6 +131,8 @@ class ms_ext(build_ext):
     ])
 
     def initialize_options(self):
+        print "LD_RUN_PATH set"
+        os.environ["LD_RUN_PATH"] = os.getcwd()+"/../../.libs"
         build_ext.initialize_options(self)
         self.gdaldir = None
         self.mapserver_config = self.MAPSERVER_CONFIG
diff --git a/mapscript/ruby/extconf.rb b/mapscript/ruby/extconf.rb
index b81d48e..b4679d7 100755
--- a/mapscript/ruby/extconf.rb
+++ b/mapscript/ruby/extconf.rb
@@ -1,5 +1,6 @@
 #!/usr/bin/env ruby 
 require 'mkmf'
+require 'pathname'
 
 mapscriptvars = File.open("../../mapscriptvars")
 make_home = mapscriptvars.gets.chomp
@@ -9,12 +10,14 @@ make_libs = mapscriptvars.gets.chomp
 make_static_libs = mapscriptvars.gets.chomp
 mapscriptvars.close
 
+MAPSERVER_LOCAL_LIBS=Pathname.new(File.dirname(__FILE__) + '/../../.libs').realpath
+
 # $CFLAGS works only with 1.8 ??? -> the -Wall argument is not needed !!!
 $CFLAGS = ""
 $CPPFLAGS = make_inc + " -idirafter $(rubylibdir)/$(arch) " + make_define
-$LDFLAGS += " -fPIC"
+$LDFLAGS += " -fPIC -Wl,-rpath,#{MAPSERVER_LOCAL_LIBS}"
 #$LOCAL_LIBS += " -L../../.libs/ " + " -lmapserver " + make_static_libs
-$LOCAL_LIBS += " -L../../.libs/ " + " -lmapserver "
+$LOCAL_LIBS += " -L#{MAPSERVER_LOCAL_LIBS} " + " -lmapserver "
 
 # if the source file 'mapscript_wrap.c' is missing nothing works
 # this is a workaround !!
@@ -23,6 +26,8 @@ if !FileTest.exist?("mapscript_wrap.c")
 	$objs.push("mapscript_wrap.o")
 end
 
+#CONFIG['LDSHARED'] = "LD_RUN_PATH=#{MAPSERVER_LOCAL_LIBS} " + CONFIG['LDSHARED']
+
 create_makefile("mapscript")
 
 make_file = File.open("Makefile", "a")
diff --git a/mapscript/swiginc/label.i b/mapscript/swiginc/label.i
index 3e2706b..838b849 100644
--- a/mapscript/swiginc/label.i
+++ b/mapscript/swiginc/label.i
@@ -52,7 +52,7 @@
     
   int updateFromString(char *snippet)
   {
-    return msUpdateLabelFromString(self, snippet);
+    return msUpdateLabelFromString(self, snippet,MS_FALSE);
   }
 
   int removeBinding(int binding) 
diff --git a/mapscript/swiginc/rect.i b/mapscript/swiginc/rect.i
index a4dcafb..becb449 100644
--- a/mapscript/swiginc/rect.i
+++ b/mapscript/swiginc/rect.i
@@ -90,8 +90,11 @@
         msInitShape(&shape);
         msRectToPolygon(*self, &shape);
         shape.classindex = classindex;
-        shape.text = strdup(text);
-
+        if(text && layer->class[classindex]->numlabels > 0) {
+          shape.text = strdup(text);
+          msShapeGetAnnotation(layer,&shape);
+        }
+        
         msDrawShape(map, layer, &shape, image, -1, MS_DRAWMODE_FEATURES|MS_DRAWMODE_LABELS);
 
         msFreeShape(&shape);
diff --git a/mapserv.c b/mapserv.c
index 78a7969..e71438d 100644
--- a/mapserv.c
+++ b/mapserv.c
@@ -140,10 +140,12 @@ int main(int argc, char *argv[])
   struct mstimeval execstarttime, execendtime;
   struct mstimeval requeststarttime, requestendtime;
   mapservObj* mapserv = NULL;
-  msSetup();
 
-  /* Use MS_ERRORFILE and MS_DEBUGLEVEL env vars if set */
-  if( msDebugInitFromEnv() != MS_SUCCESS ) {
+  /* -------------------------------------------------------------------- */
+  /*      Initialize mapserver.  This sets up threads, GD and GEOS as     */
+  /*      well as using MS_ERRORFILE and MS_DEBUGLEVEL env vars if set.   */
+  /* -------------------------------------------------------------------- */
+  if( msSetup() != MS_SUCCESS ) {
     msCGIWriteError(mapserv);
     msCleanup(0);
     exit(0);
diff --git a/mapserver.h b/mapserver.h
index a950dc3..9987a33 100644
--- a/mapserver.h
+++ b/mapserver.h
@@ -32,11 +32,11 @@
 /*
 ** MapServer version - to be updated for every release
 */
-#define MS_VERSION "6.2.0"
+#define MS_VERSION "6.2.1"
 
 #define MS_VERSION_MAJOR    6
 #define MS_VERSION_MINOR    2
-#define MS_VERSION_REV      0
+#define MS_VERSION_REV      1
 
 #define MS_VERSION_NUM (MS_VERSION_MAJOR*10000+MS_VERSION_MINOR*100+MS_VERSION_REV)
 
@@ -1875,7 +1875,7 @@ extern "C" {
   MS_DLL_EXPORT void msFreeCharArray(char **array, int num_items);
   MS_DLL_EXPORT int msUpdateScalebarFromString(scalebarObj *scalebar, char *string, int url_string);
   MS_DLL_EXPORT int msUpdateQueryMapFromString(queryMapObj *querymap, char *string, int url_string);
-  MS_DLL_EXPORT int msUpdateLabelFromString(labelObj *label, char *string);
+  MS_DLL_EXPORT int msUpdateLabelFromString(labelObj *label, char *string, int url_string);
   MS_DLL_EXPORT int msUpdateClusterFromString(clusterObj *cluster, char *string);
   MS_DLL_EXPORT int msUpdateReferenceMapFromString(referenceMapObj *ref, char *string, int url_string);
   MS_DLL_EXPORT int msUpdateLegendFromString(legendObj *legend, char *string, int url_string);
diff --git a/mapsymbol.c b/mapsymbol.c
index 2c1c35a..6505b9f 100644
--- a/mapsymbol.c
+++ b/mapsymbol.c
@@ -314,10 +314,13 @@ void writeSymbol(symbolObj *s, FILE *stream)
         fprintf(stream, "    TYPE ELLIPSE\n");
       else if(s->type == MS_SYMBOL_VECTOR)
         fprintf(stream, "    TYPE VECTOR\n");
+      else if(s->type == MS_SYMBOL_SVG)
+        fprintf(stream, "    TYPE SVG\n");
       else
         fprintf(stream, "    TYPE SIMPLE\n");
 
       if(s->filled == MS_TRUE) fprintf(stream, "    FILLED TRUE\n");
+      if(s->imagepath != NULL) fprintf(stream, "    IMAGE \"%s\"\n", s->imagepath);
 
       /* POINTS */
       if(s->numpoints != 0) {
diff --git a/maptime.c b/maptime.c
index 5e992ba..29e2b1a 100644
--- a/maptime.c
+++ b/maptime.c
@@ -97,9 +97,11 @@ void msTimeCleanup() {
       if(ms_timeFormats[i].regex) {
         ms_regfree(ms_timeFormats[i].regex);
         msFree(ms_timeFormats[i].regex);
+        ms_timeFormats[i].regex = NULL;
       }
     }
     msFree(ms_limited_pattern);
+    ms_time_inited = 0;
   }
 }
 
diff --git a/maputil.c b/maputil.c
index 092d78d..c088fab 100644
--- a/maputil.c
+++ b/maputil.c
@@ -740,6 +740,9 @@ double msAdjustExtent(rectObj *rect, int width, int height)
 {
   double cellsize, ox, oy;
 
+  if(width == 1 || height == 1)
+    return 0;
+
   cellsize = MS_MAX(MS_CELLSIZE(rect->minx, rect->maxx, width), MS_CELLSIZE(rect->miny, rect->maxy, height));
 
   if(cellsize <= 0) /* avoid division by zero errors */
@@ -1865,7 +1868,7 @@ void msCleanup(int signal)
   msGDALCleanup();
 #endif
 #ifdef USE_PROJ
-#  if PJ_VERSION >= 470
+#  if PJ_VERSION >= 480
   pj_clear_initcache();
 #  endif
   pj_deallocate_grids();
diff --git a/mapwfs11.c b/mapwfs11.c
index 590b49e..aac9f5b 100644
--- a/mapwfs11.c
+++ b/mapwfs11.c
@@ -266,7 +266,7 @@ int msWFSGetCapabilities11(mapObj *map, wfsParamsObj *params,
   const char *user_namespace_uri = NULL;
   gmlNamespaceListObj *namespaceList=NULL; /* for external application schema support */
 
-  char *script_url=NULL, *script_url_encoded=NULL, *formats_list;
+  char *script_url=NULL, *formats_list;
   const char *value = NULL;
   const char *encoding;
 
@@ -366,8 +366,7 @@ int msWFSGetCapabilities11(mapObj *map, wfsParamsObj *params,
                             psNsOws, psNsXLink, map, "FO"));
 
   /*operation metadata */
-  if ((script_url=msOWSGetOnlineResource(map, "FO", "onlineresource", req)) == NULL
-      || (script_url_encoded = msEncodeHTMLEntities(script_url)) == NULL) {
+  if ((script_url=msOWSGetOnlineResource(map, "FO", "onlineresource", req)) == NULL) {
     msSetError(MS_WFSERR, "Server URL not found", "msWFSGetCapabilities11()");
     return msWFSException11(map, "mapserv", "NoApplicableCode", params->pszVersion);
   }
@@ -382,7 +381,7 @@ int msWFSGetCapabilities11(mapObj *map, wfsParamsObj *params,
   /* -------------------------------------------------------------------- */
   psNode = xmlAddChild(psMainNode,
                        msOWSCommonOperationsMetadataOperation(psNsOws,psNsXLink,"GetCapabilities",
-                           OWS_METHOD_GETPOST, script_url_encoded));
+                           OWS_METHOD_GETPOST, script_url));
 
   xmlAddChild(psMainNode, psNode);
   xmlAddChild(psNode, msOWSCommonOperationsMetadataDomainType(
@@ -403,7 +402,7 @@ int msWFSGetCapabilities11(mapObj *map, wfsParamsObj *params,
   if (msOWSRequestIsEnabled(map, NULL, "F", "DescribeFeatureType", MS_TRUE)) {
     psNode = xmlAddChild(psMainNode,
                          msOWSCommonOperationsMetadataOperation(psNsOws,psNsXLink,"DescribeFeatureType",
-                             OWS_METHOD_GETPOST, script_url_encoded));
+                             OWS_METHOD_GETPOST, script_url));
     xmlAddChild(psMainNode, psNode);
 
     /*output format*/
@@ -419,7 +418,7 @@ int msWFSGetCapabilities11(mapObj *map, wfsParamsObj *params,
 
     psNode = xmlAddChild(psMainNode,
                          msOWSCommonOperationsMetadataOperation(psNsOws,psNsXLink,"GetFeature",
-                             OWS_METHOD_GETPOST, script_url_encoded));
+                             OWS_METHOD_GETPOST, script_url));
     xmlAddChild(psMainNode, psNode);
 
     xmlAddChild(psNode, msOWSCommonOperationsMetadataDomainType(ows_version, psNsOws,
@@ -497,7 +496,6 @@ int msWFSGetCapabilities11(mapObj *map, wfsParamsObj *params,
   xmlFreeNs(psNsOgc);
 
   free(script_url);
-  free(script_url_encoded);
   free(xsi_schemaLocation);
   free(schemalocation);
 
diff --git a/mapwms.c b/mapwms.c
index 30d5c11..2b96574 100644
--- a/mapwms.c
+++ b/mapwms.c
@@ -1664,7 +1664,7 @@ this request. Check wms/ows_enable_request settings.",
   ** in by half a pixel.  We wait till here because we want to ensure we
   ** are doing this in terms of the correct WIDTH and HEIGHT.
   */
-  if( adjust_extent ) {
+  if( adjust_extent && map->width>1 && map->height>1 ) {
     double  dx, dy;
 
     dx = (map->extent.maxx - map->extent.minx) / map->width;
@@ -2276,6 +2276,7 @@ int msDumpLayer(mapObj *map, layerObj *lp, int nVersion, const char *script_url_
                       MS_FALSE, MS_FALSE, MS_FALSE, MS_TRUE, MS_TRUE,
                       NULL, NULL, NULL, NULL, NULL, "        ");
 
+
   /* The LegendURL reside in a style. The Web Map Context spec already  */
   /* included the support on this in mapserver. However, it is not in the  */
   /* wms_legendurl_... metadatas it's in the styles metadata, */
@@ -2377,6 +2378,8 @@ int msDumpLayer(mapObj *map, layerObj *lp, int nVersion, const char *script_url_
             group_layers[0] = lp->index;
             if (isUsedInNestedGroup[lp->index]) {
               for (j=0; j < map->numlayers; j++) {
+                if (j == lp->index)
+                    continue;
                 for(k = 0; k < numNestedGroups[j]; k++) {
                   if (strcasecmp(lp->name, nestedGroups[j][k]) == 0) {
                     group_layers[num_layers++] = j;
@@ -2551,6 +2554,7 @@ int msDumpLayer(mapObj *map, layerObj *lp, int nVersion, const char *script_url_
 
   msFree(pszMetadataName);
 
+  /* print Min/Max ScaleDenominator */
   if (nVersion <  OWS_1_3_0)
     msWMSPrintScaleHint("        ", lp->minscaledenom, lp->maxscaledenom, map->resolution);
   else
@@ -2601,6 +2605,7 @@ void msWMSPrintNestedGroups(mapObj* map, int nVersion, char* pabLayerProcessed,
                             int index, int level, char*** nestedGroups, int* numNestedGroups, int* isUsedInNestedGroup, const char *script_url_encoded, const char *validated_language)
 {
   int i, j;
+  int groupAdded = 0;
   char *indent = NULL;
   indent = msStrdup("");
 
@@ -2626,10 +2631,12 @@ void msWMSPrintNestedGroups(mapObj* map, int nVersion, char* pabLayerProcessed,
       if (!pabLayerProcessed[j]) {
         msDumpLayer(map, GET_LAYER(map, j), nVersion, script_url_encoded, indent, validated_language, MS_TRUE);
         pabLayerProcessed[j] = 1; /* done */
+        groupAdded = 1;
       }
     } else {
       msIO_printf("%s    <Layer>\n", indent);
       msIO_printf("%s      <Title>%s</Title>\n", indent, nestedGroups[index][level]);
+      groupAdded = 1;
     }
 
     /* Look for one group deeper in the current layer */
@@ -2656,7 +2663,8 @@ void msWMSPrintNestedGroups(mapObj* map, int nVersion, char* pabLayerProcessed,
       }
     }
     /* Close group layer block */
-    msIO_printf("%s    </Layer>\n", indent);
+    if (groupAdded)
+      msIO_printf("%s    </Layer>\n", indent);
   }
 
   msFree(indent);
@@ -2816,8 +2824,8 @@ int msWMSGetCapabilities(mapObj *map, int nVersion, cgiRequestObj *req, owsReque
     }
 
     msIO_printf("   xsi:schemaLocation=\"http://www.opengis.net/wms %s/wms/%s/capabilities_1_3_0.xsd "
-                " http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/sld_capabilities.xsd ",
-                msOWSGetSchemasLocation(map), msOWSGetVersionString(nVersion, szVersionBuf));
+                " http://www.opengis.net/sld %s/sld/1.1.0/sld_capabilities.xsd ",
+                msOWSGetSchemasLocation(map), msOWSGetVersionString(nVersion, szVersionBuf), msOWSGetSchemasLocation(map));
 
     if ( msOWSLookupMetadata(&(map->web.metadata), "MO", "inspire_capabilities") ) {
       msIO_printf(" http://inspire.ec.europa.eu/schemas/inspire_vs/1.0 "
@@ -2912,7 +2920,7 @@ int msWMSGetCapabilities(mapObj *map, int nVersion, cgiRequestObj *req, owsReque
 #endif
                            "<SVG />"
                            , NULL);
-    if (msOWSRequestIsEnabled(map, NULL, "M", "GetCapabilities", MS_FALSE))
+    if (msOWSRequestIsEnabled(map, NULL, "M", "GetCapabilities", MS_TRUE))
       msWMSPrintRequestCap(nVersion, "Capabilities", script_url_encoded, "<WMS_XML />", NULL);
     if (msOWSRequestIsEnabled(map, NULL, "M", "GetFeatureInfo", MS_FALSE))
       msWMSPrintRequestCap(nVersion, "FeatureInfo", script_url_encoded, "<MIME /><GML.1 />", NULL);
@@ -2923,7 +2931,7 @@ int msWMSGetCapabilities(mapObj *map, int nVersion, cgiRequestObj *req, owsReque
     /* WMS 1.1.0 and later */
     /* Note changes to the request names, their ordering, and to the formats */
 
-    if (msOWSRequestIsEnabled(map, NULL, "M", "GetCapabilities", MS_FALSE)) {
+    if (msOWSRequestIsEnabled(map, NULL, "M", "GetCapabilities", MS_TRUE)) {
       if (nVersion >= OWS_1_3_0)
         msWMSPrintRequestCap(nVersion, "GetCapabilities", script_url_encoded,
                              "text/xml",
@@ -3203,12 +3211,6 @@ int msWMSGetCapabilities(mapObj *map, int nVersion, cgiRequestObj *req, owsReque
                         MS_FALSE, MS_FALSE, MS_FALSE, MS_TRUE, MS_TRUE,
                         NULL, NULL, NULL, NULL, NULL, "    ");
 
-    if (nVersion <  OWS_1_3_0)
-      msWMSPrintScaleHint("    ", map->web.minscaledenom, map->web.maxscaledenom,
-                          map->resolution);
-    else
-      msWMSPrintScaleDenominator("    ", map->web.minscaledenom, map->web.maxscaledenom);
-
     if (map->name && strlen(map->name) > 0 && msOWSLookupMetadata(&(map->web.metadata), "MO", "inspire_capabilities") ) {
       char *pszEncodedName = NULL;
       const char *styleName = NULL;
@@ -3310,6 +3312,12 @@ int msWMSGetCapabilities(mapObj *map, int nVersion, cgiRequestObj *req, owsReque
       msFree(pszEncodedStyleName);
     }
 
+    if (nVersion <  OWS_1_3_0)
+      msWMSPrintScaleHint("    ", map->web.minscaledenom, map->web.maxscaledenom,
+                          map->resolution);
+    else
+      msWMSPrintScaleDenominator("    ", map->web.minscaledenom, map->web.maxscaledenom);
+
     /*  */
     /* Dump list of layers organized by groups.  Layers with no group are listed */
     /* individually, at the same level as the groups in the layer hierarchy */
@@ -3325,6 +3333,12 @@ int msWMSGetCapabilities(mapObj *map, int nVersion, cgiRequestObj *req, owsReque
       /* processed already */
       pabLayerProcessed = (char *)msSmallCalloc(map->numlayers, sizeof(char*));
 
+      /* Mark disabled layers as processed to prevent from being displayed in nested groups (#4533)*/
+      for(i=0; i<map->numlayers; i++) {
+        if (!msIntegerInArray(GET_LAYER(map, i)->index, ows_request->enabled_layers, ows_request->numlayers))
+          pabLayerProcessed[i] = 1;
+      }
+
       nestedGroups = (char***)msSmallCalloc(map->numlayers, sizeof(char**));
       numNestedGroups = (int*)msSmallCalloc(map->numlayers, sizeof(int));
       isUsedInNestedGroup = (int*)msSmallCalloc(map->numlayers, sizeof(int));
@@ -3334,8 +3348,7 @@ int msWMSGetCapabilities(mapObj *map, int nVersion, cgiRequestObj *req, owsReque
         layerObj *lp;
         lp = (GET_LAYER(map, i));
 
-        if (pabLayerProcessed[i] || (lp->status == MS_DELETE) ||
-            (!msIntegerInArray(lp->index, ows_request->enabled_layers, ows_request->numlayers)))
+        if (pabLayerProcessed[i] || (lp->status == MS_DELETE))
           continue;  /* Layer is hidden or has already been handled */
 
         if (numNestedGroups[i] > 0) {
diff --git a/print-test-results.sh b/print-test-results.sh
index d3c41af..0d68b92 100755
--- a/print-test-results.sh
+++ b/print-test-results.sh
@@ -16,6 +16,9 @@ if command_exists compare ; then
    COMPARE="compare"
 fi
 
+#leftover .aux.xml files are valid for some gdal tests
+rm -f msautotest/*/result/*.aux.xml
+
 for testcase in "${tests[@]}"; do
    cd msautotest/$testcase
    if [ ! -d result ]; then
@@ -24,8 +27,6 @@ for testcase in "${tests[@]}"; do
       continue
    fi
    cd result
-   rm -f *.aux.xml
-   #leftover .aux.xml files are valid for some gdal tests
    failedtests=`find . -type f -printf "%f\n" `
    if [ -z "$failedtests" ]; then
       cd ../../..
diff --git a/run-test-suite.sh b/run-test-suite.sh
new file mode 100755
index 0000000..89ef609
--- /dev/null
+++ b/run-test-suite.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+#fail script on first error
+set -e
+
+#do some cleaning up
+git clean -d -f
+cd msautotest
+rm -f */result/*
+git clean -d -f
+cd ..
+git submodule update
+
+if [ -f CMakeLists.txt ]; then
+   #cmake build
+   rm -rf build
+   mkdir -p build
+   cd build
+   cmake .. -DWITH_GD=1 -DWITH_CLIENT_WMS=1 -DWITH_CLIENT_WFS=1 -DWITH_KML=1 -DWITH_SOS=1 -DWITH_PHP=1 -DWITH_PYTHON=1 -DWITH_FRIBIDI=0 -DWITH_FCGI=0 -DCMAKE_BUILD_TYPE=Release
+   make -j4
+   cd ..
+   make -f Makefile.autotest -j4 test
+else
+   #autoconf build
+   ./configure --with-gd --with-postgis --with-wmsclient --with-proj --with-wfsclient --with-kml --with-cairo --with-wcs --with-sos --with-geos --with-gdal --with-ogr --with-wfs
+   make clean
+   make -j4
+   make -j4 test
+fi
diff --git a/xmlmapfile/mapfile.xsd b/xmlmapfile/mapfile.xsd
index ed386e8..0e83beb 100644
--- a/xmlmapfile/mapfile.xsd
+++ b/xmlmapfile/mapfile.xsd
@@ -61,8 +61,8 @@
 		</xs:restriction>
 	</xs:simpleType>
 	<xs:complexType name="sizeType">
-		<xs:attribute name="x" type="xs:positiveInteger"/>
-		<xs:attribute name="y" type="xs:positiveInteger"/>
+		<xs:attribute name="x" type="xs:nonNegativeInteger"/>
+		<xs:attribute name="y" type="xs:nonNegativeInteger"/>
 	</xs:complexType>
 	<xs:complexType name="pointType">
 		<xs:attribute name="x" type="xs:float"/>
@@ -260,7 +260,7 @@
 	<!-- LABEL Definition -->
 	<xs:complexType name="Label">
 		<xs:sequence>
-			<xs:element name="align" type="ms:alignEnum"/>
+			<xs:element name="align" type="ms:alignEnum" minOccurs="0"/>
 			<xs:element name="angle" minOccurs="0">
 				<xs:simpleType id="labelAngleType">
 					<xs:union memberTypes="ms:angleType ms:attributeType">
@@ -443,13 +443,13 @@
             </xs:element>
 			<xs:element name="size" default="1" minOccurs="0">
 				<xs:simpleType>
-					<xs:union memberTypes="xs:positiveInteger ms:attributeType"/>
+					<xs:union memberTypes="xs:double ms:attributeType"/>
 				</xs:simpleType>
 			</xs:element>
 			<xs:element name="symbol" type="ms:symbolType" default="1" minOccurs="0"/>
 			<xs:element name="width" default="1" minOccurs="0">
 				<xs:simpleType>
-					<xs:union memberTypes="xs:positiveInteger ms:attributeType"/>
+					<xs:union memberTypes="xs:double ms:attributeType"/>
 				</xs:simpleType>
 			</xs:element>
 		</xs:sequence>
@@ -469,7 +469,7 @@
 			<xs:element name="maxSize" type="xs:integer" default="50" minOccurs="0"/>
 			<xs:element name="minScaleDenom" type="xs:double" minOccurs="0"/>
 			<xs:element name="minSize" type="xs:integer" default="0" minOccurs="0"/>
-			<xs:choice>
+			<xs:choice minOccurs="0">
 				<xs:element name="outlineColor" type="ms:rgbColorType"/>
 				<xs:element name="outlineColorAttribute" type="ms:attributeType"/>
 			</xs:choice>
@@ -791,12 +791,12 @@
 				<xs:element name="QueryMap" type="ms:QueryMap" minOccurs="0"/>
 				<xs:element name="Reference" type="ms:Reference" minOccurs="0"/>
 				<xs:element name="resolution" type="xs:positiveInteger" default="72" minOccurs="0"/>
+				<xs:element name="ScaleBar" type="ms:ScaleBar" minOccurs="0"/>
 				<xs:element name="scaleDenom" type="xs:double" minOccurs="0"/>
-				<xs:element name="ScaleBar" type="ms:ScaleBar"/>
 				<xs:element name="shapePath" type="xs:string" minOccurs="0"/>
 				<xs:element name="size" type="ms:sizeType" minOccurs="0"/>
-				<xs:element name="symbolSet" type="xs:string" minOccurs="0"/>
 				<xs:element name="Symbol" type="ms:Symbol" minOccurs="0" maxOccurs="unbounded"/>
+				<xs:element name="symbolSet" type="xs:string" minOccurs="0"/>
 				<xs:element name="templatePattern" type="xs:string" minOccurs="0"/>
 				<xs:element name="units" default="METERS" minOccurs="0">
 					<xs:simpleType>
diff --git a/xmlmapfile/tests/mapfile-test.xml b/xmlmapfile/tests/mapfile-test.xml
index ccfc6d1..b2714c6 100644
--- a/xmlmapfile/tests/mapfile-test.xml
+++ b/xmlmapfile/tests/mapfile-test.xml
@@ -94,7 +94,6 @@
 		<size x="6" y="4"/>
 	</Reference>
 	<resolution>72</resolution>
-	<scaleDenom>24000</scaleDenom>
 	<ScaleBar status="EMBED">
 		<align>CENTER</align>
 		<backgroundColor red="244" green="43" blue="22"/>
@@ -142,9 +141,9 @@
                 <transparent>ON</transparent>
 		<units>NAUTICALMILES</units>
 	</ScaleBar>
+	<scaleDenom>24000</scaleDenom>
 	<shapePath>../data</shapePath>
 	<size x="600" y="400"/>
-	<symbolSet>/tmp/mySymbolSet.sym</symbolSet>
 	<Symbol name="mySymbol2-test2" type="SIMPLE">
 		<antialias>FALSE</antialias>
 		<character>C</character>
@@ -167,6 +166,7 @@
           </Points>
           <transparent>123</transparent>
         </Symbol>
+	<symbolSet>/tmp/mySymbolSet.sym</symbolSet>
 	<templatePattern>[$ir-wz]*.html</templatePattern>
 	<units>MILES</units>
         <Web>

-- 
Mapserver



More information about the Pkg-grass-devel mailing list