DO NOT MERGE Update FreeType library to 2.4.7

Copied common files from upstream repository only.

changes to ftoption.h which were intentionally NOT taken:

  /* contain no glyph data, but supply it via a callback function.         */
   /* This is required by clients supporting document formats which         */
   /* supply font data incrementally as the document is parsed, such        */
   /* as the Ghostscript interpreter for the PostScript language.           */
   /*                                                                       */
-/* #define FT_CONFIG_OPTION_INCREMENTAL */
+#define FT_CONFIG_OPTION_INCREMENTAL

   /*************************************************************************/
   /*                                                                       */
   /* The size in bytes of the render pool used by the scan-line converter  */
@@ -553,11 +553,11 @@ FT_BEGIN_HEADER
   /* TrueType glyphs without hinting.                                      */
   /*                                                                       */
   /*   Do not #undef this macro here, since the build system might         */
   /*   define it for certain configurations only.                          */
   /*                                                                       */
-/* #define TT_CONFIG_OPTION_BYTECODE_INTERPRETER */
+#define TT_CONFIG_OPTION_BYTECODE_INTERPRETER

   /*************************************************************************/
   /*                                                                       */
   /* If you define TT_CONFIG_OPTION_UNPATENTED_HINTING, a special version  */
@@ -603,11 +603,11 @@ FT_BEGIN_HEADER
   /*                                                                       */
   /*     error = FT_Open_Face( library, &open_args, index, &face );        */
   /*     ...                                                               */
   /*   }                                                                   */
   /*                                                                       */
-#define TT_CONFIG_OPTION_UNPATENTED_HINTING
+/* #define TT_CONFIG_OPTION_UNPATENTED_HINTING */

   /*************************************************************************/
   /*                                                                       */
   /* Define TT_CONFIG_OPTION_INTERPRETER_SWITCH to compile the TrueType    */

Manual changes to ftmodule.h:

+/*
+ * New modules in 2.4.7:
+FT_USE_MODULE( FT_Driver_ClassRec, t1_driver_class )
+FT_USE_MODULE( FT_Driver_ClassRec, t1cid_driver_class )
+FT_USE_MODULE( FT_Driver_ClassRec, pfr_driver_class )
+FT_USE_MODULE( FT_Driver_ClassRec, t42_driver_class )
+FT_USE_MODULE( FT_Driver_ClassRec, winfnt_driver_class )
+FT_USE_MODULE( FT_Driver_ClassRec, pcf_driver_class )
+FT_USE_MODULE( FT_Module_Class, psaux_module_class )
+FT_USE_MODULE( FT_Driver_ClassRec, bdf_driver_class )
+ */
+

These lines were added for 2.4.7 but we decided to stick with our current use.

Change-Id: Ic1b52909580c78ead44cf4f882be06f2837539db
diff --git a/include/freetype/config/ftconfig.h b/include/freetype/config/ftconfig.h
index 7af737f..a9e767c 100644
--- a/include/freetype/config/ftconfig.h
+++ b/include/freetype/config/ftconfig.h
@@ -95,10 +95,6 @@
 #endif
 
 
-  /* Preferred alignment of data */
-#define FT_ALIGNMENT  8
-
-
   /* FT_UNUSED is a macro used to indicate that a given parameter is not  */
   /* used -- this is only used to get rid of unpleasant compiler warnings */
 #ifndef FT_UNUSED
@@ -354,12 +350,12 @@
 
 
     __asm__ __volatile__ (
-      "smull  %1, %2, %4, %3\n\t"   /* (lo=%1,hi=%2) = a*b */
-      "mov    %0, %2, asr #31\n\t"  /* %0  = (hi >> 31) */
-      "add    %0, %0, #0x8000\n\t"  /* %0 += 0x8000 */
-      "adds   %1, %1, %0\n\t"       /* %1 += %0 */
-      "adc    %2, %2, #0\n\t"       /* %2 += carry */
-      "mov    %0, %1, lsr #16\n\t"  /* %0  = %1 >> 16 */
+      "smull  %1, %2, %4, %3\n\t"       /* (lo=%1,hi=%2) = a*b */
+      "mov    %0, %2, asr #31\n\t"      /* %0  = (hi >> 31) */
+      "add    %0, %0, #0x8000\n\t"      /* %0 += 0x8000 */
+      "adds   %1, %1, %0\n\t"           /* %1 += %0 */
+      "adc    %2, %2, #0\n\t"           /* %2 += carry */
+      "mov    %0, %1, lsr #16\n\t"      /* %0  = %1 >> 16 */
       "orr    %0, %0, %2, lsl #16\n\t"  /* %0 |= %2 << 16 */
       : "=r"(a), "=&r"(t2), "=&r"(t)
       : "r"(a), "r"(b) );
diff --git a/include/freetype/config/ftmodule.h b/include/freetype/config/ftmodule.h
index e145790..8a91d17 100644
--- a/include/freetype/config/ftmodule.h
+++ b/include/freetype/config/ftmodule.h
@@ -21,4 +21,16 @@
 FT_USE_MODULE( FT_Renderer_Class, ft_smooth_lcd_renderer_class )
 FT_USE_MODULE( FT_Renderer_Class, ft_smooth_lcdv_renderer_class )
 
+/*
+ * New modules in 2.4.7:
+FT_USE_MODULE( FT_Driver_ClassRec, t1_driver_class )
+FT_USE_MODULE( FT_Driver_ClassRec, t1cid_driver_class )
+FT_USE_MODULE( FT_Driver_ClassRec, pfr_driver_class )
+FT_USE_MODULE( FT_Driver_ClassRec, t42_driver_class )
+FT_USE_MODULE( FT_Driver_ClassRec, winfnt_driver_class )
+FT_USE_MODULE( FT_Driver_ClassRec, pcf_driver_class )
+FT_USE_MODULE( FT_Module_Class, psaux_module_class )
+FT_USE_MODULE( FT_Driver_ClassRec, bdf_driver_class )
+ */
+
 /* EOF */
diff --git a/include/freetype/config/ftstdlib.h b/include/freetype/config/ftstdlib.h
index 30ec14e..11d5d0e 100644
--- a/include/freetype/config/ftstdlib.h
+++ b/include/freetype/config/ftstdlib.h
@@ -5,7 +5,7 @@
 /*    ANSI-specific library and header configuration file (specification   */
 /*    only).                                                               */
 /*                                                                         */
-/*  Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2009 by                  */
+/*  Copyright 2002-2007, 2009, 2011 by                                     */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -59,11 +59,12 @@
 
 #include <limits.h>
 
-#define FT_CHAR_BIT   CHAR_BIT
-#define FT_INT_MAX    INT_MAX
-#define FT_INT_MIN    INT_MIN
-#define FT_UINT_MAX   UINT_MAX
-#define FT_ULONG_MAX  ULONG_MAX
+#define FT_CHAR_BIT    CHAR_BIT
+#define FT_USHORT_MAX  USHRT_MAX
+#define FT_INT_MAX     INT_MAX
+#define FT_INT_MIN     INT_MIN
+#define FT_UINT_MAX    UINT_MAX
+#define FT_ULONG_MAX   ULONG_MAX
 
 
   /**********************************************************************/
diff --git a/include/freetype/freetype.h b/include/freetype/freetype.h
index 660b303..08b77e1 100644
--- a/include/freetype/freetype.h
+++ b/include/freetype/freetype.h
@@ -3810,7 +3810,7 @@
    */
 #define FREETYPE_MAJOR  2
 #define FREETYPE_MINOR  4
-#define FREETYPE_PATCH  6
+#define FREETYPE_PATCH  7
 
 
   /*************************************************************************/
diff --git a/include/freetype/internal/ftstream.h b/include/freetype/internal/ftstream.h
index 9c12186..8b18500 100644
--- a/include/freetype/internal/ftstream.h
+++ b/include/freetype/internal/ftstream.h
@@ -460,27 +460,27 @@
   /* read a 16-bit big-endian unsigned integer from a stream */
   FT_BASE( FT_UShort )
   FT_Stream_ReadUShort( FT_Stream  stream,
-                       FT_Error*  error );
+                        FT_Error*  error );
 
   /* read a 24-bit big-endian unsigned integer from a stream */
   FT_BASE( FT_ULong )
   FT_Stream_ReadUOffset( FT_Stream  stream,
-                        FT_Error*  error );
+                         FT_Error*  error );
 
   /* read a 32-bit big-endian integer from a stream */
   FT_BASE( FT_ULong )
   FT_Stream_ReadULong( FT_Stream  stream,
-                      FT_Error*  error );
+                       FT_Error*  error );
 
   /* read a 16-bit little-endian unsigned integer from a stream */
   FT_BASE( FT_UShort )
   FT_Stream_ReadUShortLE( FT_Stream  stream,
-                         FT_Error*  error );
+                          FT_Error*  error );
 
   /* read a 32-bit little-endian unsigned integer from a stream */
   FT_BASE( FT_ULong )
   FT_Stream_ReadULongLE( FT_Stream  stream,
-                        FT_Error*  error );
+                         FT_Error*  error );
 
   /* Read a structure from a stream.  The structure must be described */
   /* by an array of FT_Frame_Field records.                           */
diff --git a/src/autofit/aflatin.c b/src/autofit/aflatin.c
index d5876ff..54fcf7f 100644
--- a/src/autofit/aflatin.c
+++ b/src/autofit/aflatin.c
@@ -134,7 +134,7 @@
               dist = -dist;
 
             if ( num_widths < AF_LATIN_MAX_WIDTHS )
-              axis->widths[ num_widths++ ].org = dist;
+              axis->widths[num_widths++].org = dist;
           }
         }
 
@@ -221,7 +221,7 @@
       for ( ; p < limit && *p; p++ )
       {
         FT_UInt     glyph_index;
-        FT_Pos      best_y; /* same as points.y */
+        FT_Pos      best_y;                            /* same as points.y */
         FT_Int      best_point, best_first, best_last;
         FT_Vector*  points;
         FT_Bool     round = 0;
@@ -265,7 +265,7 @@
             /* In some fonts, they correspond to mark attachment points     */
             /* which are way outside of the glyph's real outline.           */
             if ( last <= first )
-                continue;
+              continue;
 
             if ( AF_LATIN_IS_TOP_BLUE( bb ) )
             {
@@ -367,9 +367,9 @@
       af_sort_pos( num_rounds, rounds );
       af_sort_pos( num_flats,  flats );
 
-      blue       = & axis->blues[axis->blue_count];
-      blue_ref   = & blue->ref.org;
-      blue_shoot = & blue->shoot.org;
+      blue       = &axis->blues[axis->blue_count];
+      blue_ref   = &blue->ref.org;
+      blue_shoot = &blue->shoot.org;
 
       axis->blue_count++;
 
@@ -436,7 +436,7 @@
     FT_Fixed  advance, old_advance = 0;
 
 
-    /* digit `0' is 0x30 in all supported charmaps                 */
+    /* digit `0' is 0x30 in all supported charmaps */
     for ( i = 0x30; i <= 0x39; i++ )
     {
       FT_UInt  glyph_index;
@@ -726,14 +726,14 @@
   af_latin_hints_compute_segments( AF_GlyphHints  hints,
                                    AF_Dimension   dim )
   {
-    AF_AxisHints  axis          = &hints->axis[dim];
-    FT_Memory     memory        = hints->memory;
-    FT_Error      error         = AF_Err_Ok;
-    AF_Segment    segment       = NULL;
-    AF_SegmentRec seg0;
-    AF_Point*     contour       = hints->contours;
-    AF_Point*     contour_limit = contour + hints->num_contours;
-    AF_Direction  major_dir, segment_dir;
+    AF_AxisHints   axis          = &hints->axis[dim];
+    FT_Memory      memory        = hints->memory;
+    FT_Error       error         = AF_Err_Ok;
+    AF_Segment     segment       = NULL;
+    AF_SegmentRec  seg0;
+    AF_Point*      contour       = hints->contours;
+    AF_Point*      contour_limit = contour + hints->num_contours;
+    AF_Direction   major_dir, segment_dir;
 
 
     FT_ZERO( &seg0 );
@@ -829,7 +829,7 @@
             /* a segment is round if either its first or last point */
             /* is a control point                                   */
             if ( ( segment->first->flags | point->flags ) &
-                   AF_FLAG_CONTROL                        )
+                 AF_FLAG_CONTROL                          )
               segment->flags |= AF_EDGE_ROUND;
 
             /* compute segment size */
@@ -970,50 +970,50 @@
       /* search for stems having opposite directions, */
       /* with seg1 to the `left' of seg2              */
       for ( seg2 = segments; seg2 < segment_limit; seg2++ )
-        {
-          FT_Pos  pos1 = seg1->pos;
-          FT_Pos  pos2 = seg2->pos;
+      {
+        FT_Pos  pos1 = seg1->pos;
+        FT_Pos  pos2 = seg2->pos;
 
 
         if ( seg1->dir + seg2->dir == 0 && pos2 > pos1 )
         {
           /* compute distance between the two segments */
           FT_Pos  dist = pos2 - pos1;
-            FT_Pos  min = seg1->min_coord;
-            FT_Pos  max = seg1->max_coord;
-            FT_Pos  len, score;
+          FT_Pos  min  = seg1->min_coord;
+          FT_Pos  max  = seg1->max_coord;
+          FT_Pos  len, score;
 
 
-            if ( min < seg2->min_coord )
-              min = seg2->min_coord;
+          if ( min < seg2->min_coord )
+            min = seg2->min_coord;
 
-            if ( max > seg2->max_coord )
-              max = seg2->max_coord;
+          if ( max > seg2->max_coord )
+            max = seg2->max_coord;
 
           /* compute maximum coordinate difference of the two segments */
-            len = max - min;
-            if ( len >= len_threshold )
-            {
+          len = max - min;
+          if ( len >= len_threshold )
+          {
             /* small coordinate differences cause a higher score, and     */
             /* segments with a greater distance cause a higher score also */
-              score = dist + len_score / len;
+            score = dist + len_score / len;
 
             /* and we search for the smallest score */
             /* of the sum of the two values         */
-              if ( score < seg1->score )
-              {
-                seg1->score = score;
-                seg1->link  = seg2;
-              }
+            if ( score < seg1->score )
+            {
+              seg1->score = score;
+              seg1->link  = seg2;
+            }
 
-              if ( score < seg2->score )
-              {
-                seg2->score = score;
-                seg2->link  = seg1;
-              }
+            if ( score < seg2->score )
+            {
+              seg2->score = score;
+              seg2->link  = seg1;
             }
           }
         }
+      }
     }
 
     /* now compute the `serif' segments, cf. explanations in `afhints.h' */
@@ -1234,9 +1234,9 @@
 #if 0
           /* check for segment direction */
           if ( seg->dir == up_dir )
-            ups   += seg->max_coord-seg->min_coord;
+            ups   += seg->max_coord - seg->min_coord;
           else
-            downs += seg->max_coord-seg->min_coord;
+            downs += seg->max_coord - seg->min_coord;
 #endif
 
           /* check for links -- if seg->serif is set, then seg->link must */
@@ -1354,10 +1354,10 @@
   af_latin_hints_compute_blue_edges( AF_GlyphHints    hints,
                                      AF_LatinMetrics  metrics )
   {
-    AF_AxisHints  axis       = &hints->axis[ AF_DIMENSION_VERT ];
+    AF_AxisHints  axis       = &hints->axis[AF_DIMENSION_VERT];
     AF_Edge       edge       = axis->edges;
     AF_Edge       edge_limit = edge + axis->num_edges;
-    AF_LatinAxis  latin      = &metrics->axis[ AF_DIMENSION_VERT ];
+    AF_LatinAxis  latin      = &metrics->axis[AF_DIMENSION_VERT];
     FT_Fixed      scale      = latin->scale;
 
 
@@ -1414,7 +1414,7 @@
           if ( dist < best_dist )
           {
             best_dist = dist;
-            best_blue = & blue->ref;
+            best_blue = &blue->ref;
           }
 
           /* now compare it to the overshoot position and check whether */
@@ -1436,7 +1436,7 @@
               if ( dist < best_dist )
               {
                 best_dist = dist;
-                best_blue = & blue->shoot;
+                best_blue = &blue->shoot;
               }
             }
           }
@@ -1511,8 +1511,8 @@
      *  In `light' hinting mode we disable horizontal hinting completely.
      *  We also do it if the face is italic.
      */
-    if ( mode == FT_RENDER_MODE_LIGHT                    ||
-         (face->style_flags & FT_STYLE_FLAG_ITALIC) != 0 )
+    if ( mode == FT_RENDER_MODE_LIGHT                      ||
+         ( face->style_flags & FT_STYLE_FLAG_ITALIC ) != 0 )
       scaler_flags |= AF_SCALER_FLAG_NO_HORIZONTAL;
 
     hints->scaler_flags = scaler_flags;
@@ -1597,7 +1597,7 @@
 
 
     if ( !AF_LATIN_HINTS_DO_STEM_ADJUST( hints ) ||
-          axis->extra_light                      )
+         axis->extra_light                       )
       return width;
 
     if ( dist < 0 )
@@ -1631,19 +1631,19 @@
 
 
         /* compare to standard width */
-          delta = dist - axis->widths[0].cur;
+        delta = dist - axis->widths[0].cur;
 
-          if ( delta < 0 )
-            delta = -delta;
+        if ( delta < 0 )
+          delta = -delta;
 
-          if ( delta < 40 )
-          {
-            dist = axis->widths[0].cur;
-            if ( dist < 48 )
-              dist = 48;
+        if ( delta < 40 )
+        {
+          dist = axis->widths[0].cur;
+          if ( dist < 48 )
+            dist = 48;
 
-            goto Done_Width;
-          }
+          goto Done_Width;
+        }
 
         if ( dist < 3 * 64 )
         {
@@ -1763,9 +1763,9 @@
     stem_edge->pos = base_edge->pos + fitted_width;
 
     FT_TRACE5(( "  LINK: edge %d (opos=%.2f) linked to (%.2f),"
-             "dist was %.2f, now %.2f\n",
-             stem_edge-hints->axis[dim].edges, stem_edge->opos / 64.0,
-             stem_edge->pos / 64.0, dist / 64.0, fitted_width / 64.0 ));
+                " dist was %.2f, now %.2f\n",
+                stem_edge-hints->axis[dim].edges, stem_edge->opos / 64.0,
+                stem_edge->pos / 64.0, dist / 64.0, fitted_width / 64.0 ));
   }
 
 
@@ -1779,7 +1779,7 @@
   {
     FT_UNUSED( hints );
 
-    serif->pos = base->pos + (serif->opos - base->opos);
+    serif->pos = base->pos + ( serif->opos - base->opos );
   }
 
 
@@ -1845,9 +1845,9 @@
           continue;
 
         FT_TRACE5(( "  BLUE: edge %d (opos=%.2f) snapped to (%.2f),"
-                 "was (%.2f)\n",
-                 edge1-edges, edge1->opos / 64.0, blue->fit / 64.0,
-                 edge1->pos / 64.0 ));
+                    " was (%.2f)\n",
+                    edge1 - edges, edge1->opos / 64.0, blue->fit / 64.0,
+                    edge1->pos / 64.0 ));
 
         edge1->pos    = blue->fit;
         edge1->flags |= AF_EDGE_DONE;
@@ -1864,7 +1864,7 @@
     }
 
     /* now we align all other stem edges, trying to maintain the */
-    /* relative order of stems in the glyph                     */
+    /* relative order of stems in the glyph                      */
     for ( edge = edges; edge < edge_limit; edge++ )
     {
       AF_Edge  edge2;
@@ -1948,10 +1948,10 @@
           edge->pos = FT_PIX_ROUND( edge->opos );
 
         FT_TRACE5(( "  ANCHOR: edge %d (opos=%.2f) and %d (opos=%.2f)"
-                 "snapped to (%.2f) (%.2f)\n",
-                 edge-edges, edge->opos / 64.0,
-                 edge2-edges, edge2->opos / 64.0,
-                 edge->pos / 64.0, edge2->pos / 64.0 ));
+                    " snapped to (%.2f) (%.2f)\n",
+                    edge - edges, edge->opos / 64.0,
+                    edge2 - edges, edge2->opos / 64.0,
+                    edge->pos / 64.0, edge2->pos / 64.0 ));
         anchor = edge;
 
         edge->flags |= AF_EDGE_DONE;
@@ -1969,9 +1969,9 @@
         org_center = org_pos + ( org_len >> 1 );
 
         cur_len = af_latin_compute_stem_width(
-                   hints, dim, org_len,
-                   (AF_Edge_Flags)edge->flags,
-                   (AF_Edge_Flags)edge2->flags );
+                    hints, dim, org_len,
+                    (AF_Edge_Flags)edge->flags,
+                    (AF_Edge_Flags)edge2->flags );
 
         if ( edge2->flags & AF_EDGE_DONE )
         {
@@ -2017,10 +2017,10 @@
           edge2->pos = cur_pos1 + cur_len / 2;
 
           FT_TRACE5(( "  STEM: %d (opos=%.2f) to %d (opos=%.2f)"
-                   "snapped to (%.2f) and (%.2f)\n",
-                   edge-edges, edge->opos / 64.0,
-                   edge2-edges, edge2->opos / 64.0,
-                   edge->pos / 64.0, edge2->pos / 64.0 ));
+                      " snapped to (%.2f) and (%.2f)\n",
+                      edge - edges, edge->opos / 64.0,
+                      edge2 - edges, edge2->opos / 64.0,
+                      edge->pos / 64.0, edge2->pos / 64.0 ));
         }
         else
         {
@@ -2033,13 +2033,13 @@
                          (AF_Edge_Flags)edge->flags,
                          (AF_Edge_Flags)edge2->flags );
 
-          cur_pos1   = FT_PIX_ROUND( org_pos );
-          delta1     = cur_pos1 + ( cur_len >> 1 ) - org_center;
+          cur_pos1 = FT_PIX_ROUND( org_pos );
+          delta1   = cur_pos1 + ( cur_len >> 1 ) - org_center;
           if ( delta1 < 0 )
             delta1 = -delta1;
 
-          cur_pos2   = FT_PIX_ROUND( org_pos + org_len ) - cur_len;
-          delta2     = cur_pos2 + ( cur_len >> 1 ) - org_center;
+          cur_pos2 = FT_PIX_ROUND( org_pos + org_len ) - cur_len;
+          delta2   = cur_pos2 + ( cur_len >> 1 ) - org_center;
           if ( delta2 < 0 )
             delta2 = -delta2;
 
@@ -2047,10 +2047,10 @@
           edge2->pos = edge->pos + cur_len;
 
           FT_TRACE5(( "  STEM: %d (opos=%.2f) to %d (opos=%.2f)"
-                   "snapped to (%.2f) and (%.2f)\n",
-                   edge-edges, edge->opos / 64.0,
-                   edge2-edges, edge2->opos / 64.0,
-                   edge->pos / 64.0, edge2->pos / 64.0 ));
+                      " snapped to (%.2f) and (%.2f)\n",
+                      edge - edges, edge->opos / 64.0,
+                      edge2 - edges, edge2->opos / 64.0,
+                      edge->pos / 64.0, edge2->pos / 64.0 ));
         }
 
         edge->flags  |= AF_EDGE_DONE;
@@ -2059,7 +2059,7 @@
         if ( edge > edges && edge->pos < edge[-1].pos )
         {
           FT_TRACE5(( "  BOUND: %d (pos=%.2f) to (%.2f)\n",
-                   edge-edges, edge->pos / 64.0, edge[-1].pos / 64.0 ));
+                      edge - edges, edge->pos / 64.0, edge[-1].pos / 64.0 ));
           edge->pos = edge[-1].pos;
         }
       }
@@ -2154,10 +2154,10 @@
         {
           af_latin_align_serif_edge( hints, edge->serif, edge );
           FT_TRACE5(( "  SERIF: edge %d (opos=%.2f) serif to %d (opos=%.2f)"
-                   "aligned to (%.2f)\n",
-                   edge-edges, edge->opos / 64.0,
-                   edge->serif - edges, edge->serif->opos / 64.0,
-                   edge->pos / 64.0 ));
+                      " aligned to (%.2f)\n",
+                      edge - edges, edge->opos / 64.0,
+                      edge->serif - edges, edge->serif->opos / 64.0,
+                      edge->pos / 64.0 ));
         }
         else if ( !anchor )
         {
@@ -2192,8 +2192,8 @@
                                      after->opos - before->opos );
 
             FT_TRACE5(( "  SERIF_LINK1: edge %d (opos=%.2f) snapped to (%.2f)"
-                     "from %d (opos=%.2f)\n",
-                     edge-edges, edge->opos / 64.0,
+                        " from %d (opos=%.2f)\n",
+                        edge - edges, edge->opos / 64.0,
                         edge->pos / 64.0,
                         before - edges, before->opos / 64.0 ));
           }
@@ -2204,7 +2204,7 @@
 
             FT_TRACE5(( "  SERIF_LINK2: edge %d (opos=%.2f)"
                         " snapped to (%.2f)\n",
-                     edge-edges, edge->opos / 64.0, edge->pos / 64.0 ));
+                        edge - edges, edge->opos / 64.0, edge->pos / 64.0 ));
           }
         }
 
@@ -2242,7 +2242,7 @@
     /* analyze glyph outline */
 #ifdef AF_CONFIG_OPTION_USE_WARPER
     if ( metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT ||
-         AF_HINTS_DO_HORIZONTAL( hints ) )
+         AF_HINTS_DO_HORIZONTAL( hints )                          )
 #else
     if ( AF_HINTS_DO_HORIZONTAL( hints ) )
 #endif
@@ -2341,7 +2341,7 @@
   };
 
 
-  AF_DEFINE_SCRIPT_CLASS(af_latin_script_class,  
+  AF_DEFINE_SCRIPT_CLASS(af_latin_script_class,
     AF_SCRIPT_LATIN,
     af_latin_uniranges,
 
diff --git a/src/base/ftbitmap.c b/src/base/ftbitmap.c
index 22ec337..5ef7ac7 100644
--- a/src/base/ftbitmap.c
+++ b/src/base/ftbitmap.c
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    FreeType utility functions for bitmaps (body).                       */
 /*                                                                         */
-/*  Copyright 2004, 2005, 2006, 2007, 2008, 2009 by                        */
+/*  Copyright 2004-2009, 2011 by                                           */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -417,6 +417,10 @@
 
         target->pitch = source->width + pad;
 
+        if ( target->pitch > 0                           &&
+             target->rows > FT_ULONG_MAX / target->pitch )
+          return FT_Err_Invalid_Argument;
+
         if ( target->rows * target->pitch > old_size             &&
              FT_QREALLOC( target->buffer,
                           old_size, target->rows * target->pitch ) )
diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c
index 5069afb..64575af 100644
--- a/src/base/ftobjs.c
+++ b/src/base/ftobjs.c
@@ -620,7 +620,8 @@
          FT_DRIVER_IS_SCALABLE( driver )                  &&
          FT_DRIVER_USES_OUTLINES( driver )                &&
          !FT_IS_TRICKY( face )                            &&
-         ( ( face->internal->transform_matrix.yx == 0 &&
+         ( ( load_flags & FT_LOAD_IGNORE_TRANSFORM )    ||
+           ( face->internal->transform_matrix.yx == 0 &&
              face->internal->transform_matrix.xx != 0 ) ||
            ( face->internal->transform_matrix.xx == 0 &&
              face->internal->transform_matrix.yx != 0 ) ) )
@@ -756,11 +757,11 @@
         else if ( slot->format == FT_GLYPH_FORMAT_OUTLINE )
         {
           /* apply `standard' transformation if no renderer is available */
-          if ( &internal->transform_matrix )
+          if ( internal->transform_flags & 1 )
             FT_Outline_Transform( &slot->outline,
                                   &internal->transform_matrix );
 
-          if ( &internal->transform_delta )
+          if ( internal->transform_flags & 2 )
             FT_Outline_Translate( &slot->outline,
                                   internal->transform_delta.x,
                                   internal->transform_delta.y );
@@ -2613,6 +2614,18 @@
       metrics->height      = bsize->height << 6;
       metrics->max_advance = bsize->x_ppem;
     }
+
+    FT_TRACE5(( "FT_Select_Metrics:\n" ));
+    FT_TRACE5(( "  x scale: %d (%f)\n",
+                metrics->x_scale, metrics->x_scale / 65536.0 ));
+    FT_TRACE5(( "  y scale: %d (%f)\n",
+                metrics->y_scale, metrics->y_scale / 65536.0 ));
+    FT_TRACE5(( "  ascender: %f\n",    metrics->ascender / 64.0 ));
+    FT_TRACE5(( "  descender: %f\n",   metrics->descender / 64.0 ));
+    FT_TRACE5(( "  height: %f\n",      metrics->height / 64.0 ));
+    FT_TRACE5(( "  max advance: %f\n", metrics->max_advance / 64.0 ));
+    FT_TRACE5(( "  x ppem: %d\n",      metrics->x_ppem ));
+    FT_TRACE5(( "  y ppem: %d\n",      metrics->y_ppem ));
   }
 
 
@@ -2721,6 +2734,18 @@
       metrics->x_scale = 1L << 16;
       metrics->y_scale = 1L << 16;
     }
+
+    FT_TRACE5(( "FT_Request_Metrics:\n" ));
+    FT_TRACE5(( "  x scale: %d (%f)\n",
+                metrics->x_scale, metrics->x_scale / 65536.0 ));
+    FT_TRACE5(( "  y scale: %d (%f)\n",
+                metrics->y_scale, metrics->y_scale / 65536.0 ));
+    FT_TRACE5(( "  ascender: %f\n",    metrics->ascender / 64.0 ));
+    FT_TRACE5(( "  descender: %f\n",   metrics->descender / 64.0 ));
+    FT_TRACE5(( "  height: %f\n",      metrics->height / 64.0 ));
+    FT_TRACE5(( "  max advance: %f\n", metrics->max_advance / 64.0 ));
+    FT_TRACE5(( "  x ppem: %d\n",      metrics->x_ppem ));
+    FT_TRACE5(( "  y ppem: %d\n",      metrics->y_ppem ));
   }
 
 
@@ -2742,7 +2767,33 @@
     clazz = face->driver->clazz;
 
     if ( clazz->select_size )
-      return clazz->select_size( face->size, (FT_ULong)strike_index );
+    {
+      FT_Error  error;
+
+
+      error = clazz->select_size( face->size, (FT_ULong)strike_index );
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+      {
+        FT_Size_Metrics*  metrics = &face->size->metrics;
+
+
+        FT_TRACE5(( "FT_Select_Size (font driver's `select_size'):\n" ));
+        FT_TRACE5(( "  x scale: %d (%f)\n",
+                    metrics->x_scale, metrics->x_scale / 65536.0 ));
+        FT_TRACE5(( "  y scale: %d (%f)\n",
+                    metrics->y_scale, metrics->y_scale / 65536.0 ));
+        FT_TRACE5(( "  ascender: %f\n",    metrics->ascender / 64.0 ));
+        FT_TRACE5(( "  descender: %f\n",   metrics->descender / 64.0 ));
+        FT_TRACE5(( "  height: %f\n",      metrics->height / 64.0 ));
+        FT_TRACE5(( "  max advance: %f\n", metrics->max_advance / 64.0 ));
+        FT_TRACE5(( "  x ppem: %d\n",      metrics->x_ppem ));
+        FT_TRACE5(( "  y ppem: %d\n",      metrics->y_ppem ));
+      }
+#endif
+
+      return error;
+    }
 
     FT_Select_Metrics( face, (FT_ULong)strike_index );
 
@@ -2770,7 +2821,33 @@
     clazz = face->driver->clazz;
 
     if ( clazz->request_size )
-      return clazz->request_size( face->size, req );
+    {
+      FT_Error  error;
+
+
+      error = clazz->request_size( face->size, req );
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+      {
+        FT_Size_Metrics*  metrics = &face->size->metrics;
+
+
+        FT_TRACE5(( "FT_Request_Size (font driver's `request_size'):\n" ));
+        FT_TRACE5(( "  x scale: %d (%f)\n",
+                    metrics->x_scale, metrics->x_scale / 65536.0 ));
+        FT_TRACE5(( "  y scale: %d (%f)\n",
+                    metrics->y_scale, metrics->y_scale / 65536.0 ));
+        FT_TRACE5(( "  ascender: %f\n",    metrics->ascender / 64.0 ));
+        FT_TRACE5(( "  descender: %f\n",   metrics->descender / 64.0 ));
+        FT_TRACE5(( "  height: %f\n",      metrics->height / 64.0 ));
+        FT_TRACE5(( "  max advance: %f\n", metrics->max_advance / 64.0 ));
+        FT_TRACE5(( "  x ppem: %d\n",      metrics->x_ppem ));
+        FT_TRACE5(( "  y ppem: %d\n",      metrics->y_ppem ));
+      }
+#endif
+
+      return error;
+    }
 
     /*
      * The reason that a driver doesn't have `request_size' defined is
diff --git a/src/cache/ftcbasic.c b/src/cache/ftcbasic.c
new file mode 100644
index 0000000..09d793e
--- /dev/null
+++ b/src/cache/ftcbasic.c
@@ -0,0 +1,855 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftcbasic.c                                                             */
+/*                                                                         */
+/*    The FreeType basic cache interface (body).                           */
+/*                                                                         */
+/*  Copyright 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011 by            */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#include <ft2build.h>
+#include FT_INTERNAL_OBJECTS_H
+#include FT_INTERNAL_DEBUG_H
+#include FT_CACHE_H
+#include "ftcglyph.h"
+#include "ftcimage.h"
+#include "ftcsbits.h"
+
+#include "ftccback.h"
+#include "ftcerror.h"
+
+#define FT_COMPONENT  trace_cache
+
+
+#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
+
+  /*
+   *  These structures correspond to the FTC_Font and FTC_ImageDesc types
+   *  that were defined in version 2.1.7.
+   */
+  typedef struct  FTC_OldFontRec_
+  {
+    FTC_FaceID  face_id;
+    FT_UShort   pix_width;
+    FT_UShort   pix_height;
+
+  } FTC_OldFontRec, *FTC_OldFont;
+
+
+  typedef struct  FTC_OldImageDescRec_
+  {
+    FTC_OldFontRec  font;
+    FT_UInt32       flags;
+
+  } FTC_OldImageDescRec, *FTC_OldImageDesc;
+
+
+  /*
+   *  Notice that FTC_OldImageDescRec and FTC_ImageTypeRec are nearly
+   *  identical, bit-wise.  The only difference is that the `width' and
+   *  `height' fields are expressed as 16-bit integers in the old structure,
+   *  and as normal `int' in the new one.
+   *
+   *  We are going to perform a weird hack to detect which structure is
+   *  being passed to the image and sbit caches.  If the new structure's
+   *  `width' is larger than 0x10000, we assume that we are really receiving
+   *  an FTC_OldImageDesc.
+   */
+
+#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
+
+
+  /*
+   *  Basic Families
+   *
+   */
+  typedef struct  FTC_BasicAttrRec_
+  {
+    FTC_ScalerRec  scaler;
+    FT_UInt        load_flags;
+
+  } FTC_BasicAttrRec, *FTC_BasicAttrs;
+
+#define FTC_BASIC_ATTR_COMPARE( a, b )                                 \
+          FT_BOOL( FTC_SCALER_COMPARE( &(a)->scaler, &(b)->scaler ) && \
+                   (a)->load_flags == (b)->load_flags               )
+
+#define FTC_BASIC_ATTR_HASH( a )                                   \
+          ( FTC_SCALER_HASH( &(a)->scaler ) + 31*(a)->load_flags )
+
+
+  typedef struct  FTC_BasicQueryRec_
+  {
+    FTC_GQueryRec     gquery;
+    FTC_BasicAttrRec  attrs;
+
+  } FTC_BasicQueryRec, *FTC_BasicQuery;
+
+
+  typedef struct  FTC_BasicFamilyRec_
+  {
+    FTC_FamilyRec     family;
+    FTC_BasicAttrRec  attrs;
+
+  } FTC_BasicFamilyRec, *FTC_BasicFamily;
+
+
+  FT_CALLBACK_DEF( FT_Bool )
+  ftc_basic_family_compare( FTC_MruNode  ftcfamily,
+                            FT_Pointer   ftcquery )
+  {
+    FTC_BasicFamily  family = (FTC_BasicFamily)ftcfamily;
+    FTC_BasicQuery   query  = (FTC_BasicQuery)ftcquery;
+
+
+    return FTC_BASIC_ATTR_COMPARE( &family->attrs, &query->attrs );
+  }
+
+
+  FT_CALLBACK_DEF( FT_Error )
+  ftc_basic_family_init( FTC_MruNode  ftcfamily,
+                         FT_Pointer   ftcquery,
+                         FT_Pointer   ftccache )
+  {
+    FTC_BasicFamily  family = (FTC_BasicFamily)ftcfamily;
+    FTC_BasicQuery   query  = (FTC_BasicQuery)ftcquery;
+    FTC_Cache        cache  = (FTC_Cache)ftccache;
+
+
+    FTC_Family_Init( FTC_FAMILY( family ), cache );
+    family->attrs = query->attrs;
+    return 0;
+  }
+
+
+  FT_CALLBACK_DEF( FT_UInt )
+  ftc_basic_family_get_count( FTC_Family   ftcfamily,
+                              FTC_Manager  manager )
+  {
+    FTC_BasicFamily  family = (FTC_BasicFamily)ftcfamily;
+    FT_Error         error;
+    FT_Face          face;
+    FT_UInt          result = 0;
+
+
+    error = FTC_Manager_LookupFace( manager, family->attrs.scaler.face_id,
+                                    &face );
+
+    if ( error || !face )
+      return result;
+
+    if ( (FT_ULong)face->num_glyphs > FT_UINT_MAX || 0 > face->num_glyphs )
+    {
+      FT_TRACE1(( "ftc_basic_family_get_count: too large number of glyphs " ));
+      FT_TRACE1(( "in this face, truncated\n", face->num_glyphs ));
+    }
+
+    if ( !error )
+      result = (FT_UInt)face->num_glyphs;
+
+    return result;
+  }
+
+
+  FT_CALLBACK_DEF( FT_Error )
+  ftc_basic_family_load_bitmap( FTC_Family   ftcfamily,
+                                FT_UInt      gindex,
+                                FTC_Manager  manager,
+                                FT_Face     *aface )
+  {
+    FTC_BasicFamily  family = (FTC_BasicFamily)ftcfamily;
+    FT_Error         error;
+    FT_Size          size;
+
+
+    error = FTC_Manager_LookupSize( manager, &family->attrs.scaler, &size );
+    if ( !error )
+    {
+      FT_Face  face = size->face;
+
+
+      error = FT_Load_Glyph( face, gindex,
+                             family->attrs.load_flags | FT_LOAD_RENDER );
+      if ( !error )
+        *aface = face;
+    }
+
+    return error;
+  }
+
+
+  FT_CALLBACK_DEF( FT_Error )
+  ftc_basic_family_load_glyph( FTC_Family  ftcfamily,
+                               FT_UInt     gindex,
+                               FTC_Cache   cache,
+                               FT_Glyph   *aglyph )
+  {
+    FTC_BasicFamily  family = (FTC_BasicFamily)ftcfamily;
+    FT_Error         error;
+    FTC_Scaler       scaler = &family->attrs.scaler;
+    FT_Face          face;
+    FT_Size          size;
+
+
+    /* we will now load the glyph image */
+    error = FTC_Manager_LookupSize( cache->manager,
+                                    scaler,
+                                    &size );
+    if ( !error )
+    {
+      face = size->face;
+
+      error = FT_Load_Glyph( face, gindex, family->attrs.load_flags );
+      if ( !error )
+      {
+        if ( face->glyph->format == FT_GLYPH_FORMAT_BITMAP  ||
+             face->glyph->format == FT_GLYPH_FORMAT_OUTLINE )
+        {
+          /* ok, copy it */
+          FT_Glyph  glyph;
+
+
+          error = FT_Get_Glyph( face->glyph, &glyph );
+          if ( !error )
+          {
+            *aglyph = glyph;
+            goto Exit;
+          }
+        }
+        else
+          error = FTC_Err_Invalid_Argument;
+      }
+    }
+
+  Exit:
+    return error;
+  }
+
+
+  FT_CALLBACK_DEF( FT_Bool )
+  ftc_basic_gnode_compare_faceid( FTC_Node    ftcgnode,
+                                  FT_Pointer  ftcface_id,
+                                  FTC_Cache   cache,
+                                  FT_Bool*    list_changed )
+  {
+    FTC_GNode        gnode   = (FTC_GNode)ftcgnode;
+    FTC_FaceID       face_id = (FTC_FaceID)ftcface_id;
+    FTC_BasicFamily  family  = (FTC_BasicFamily)gnode->family;
+    FT_Bool          result;
+
+
+    if ( list_changed )
+      *list_changed = FALSE;
+    result = FT_BOOL( family->attrs.scaler.face_id == face_id );
+    if ( result )
+    {
+      /* we must call this function to avoid this node from appearing
+       * in later lookups with the same face_id!
+       */
+      FTC_GNode_UnselectFamily( gnode, cache );
+    }
+    return result;
+  }
+
+
+ /*
+  *
+  * basic image cache
+  *
+  */
+
+  FT_CALLBACK_TABLE_DEF
+  const FTC_IFamilyClassRec  ftc_basic_image_family_class =
+  {
+    {
+      sizeof ( FTC_BasicFamilyRec ),
+      ftc_basic_family_compare,
+      ftc_basic_family_init,
+      0,                        /* FTC_MruNode_ResetFunc */
+      0                         /* FTC_MruNode_DoneFunc  */
+    },
+    ftc_basic_family_load_glyph
+  };
+
+
+  FT_CALLBACK_TABLE_DEF
+  const FTC_GCacheClassRec  ftc_basic_image_cache_class =
+  {
+    {
+      ftc_inode_new,
+      ftc_inode_weight,
+      ftc_gnode_compare,
+      ftc_basic_gnode_compare_faceid,
+      ftc_inode_free,
+
+      sizeof ( FTC_GCacheRec ),
+      ftc_gcache_init,
+      ftc_gcache_done
+    },
+    (FTC_MruListClass)&ftc_basic_image_family_class
+  };
+
+
+  /* documentation is in ftcache.h */
+
+  FT_EXPORT_DEF( FT_Error )
+  FTC_ImageCache_New( FTC_Manager      manager,
+                      FTC_ImageCache  *acache )
+  {
+    return FTC_GCache_New( manager, &ftc_basic_image_cache_class,
+                           (FTC_GCache*)acache );
+  }
+
+
+  /* documentation is in ftcache.h */
+
+  FT_EXPORT_DEF( FT_Error )
+  FTC_ImageCache_Lookup( FTC_ImageCache  cache,
+                         FTC_ImageType   type,
+                         FT_UInt         gindex,
+                         FT_Glyph       *aglyph,
+                         FTC_Node       *anode )
+  {
+    FTC_BasicQueryRec  query;
+    FTC_Node           node = 0; /* make compiler happy */
+    FT_Error           error;
+    FT_PtrDist         hash;
+
+
+    /* some argument checks are delayed to FTC_Cache_Lookup */
+    if ( !aglyph )
+    {
+      error = FTC_Err_Invalid_Argument;
+      goto Exit;
+    }
+
+    *aglyph = NULL;
+    if ( anode )
+      *anode  = NULL;
+
+#if defined( FT_CONFIG_OPTION_OLD_INTERNALS ) && ( FT_INT_MAX > 0xFFFFU )
+
+    /*
+     *  This one is a major hack used to detect whether we are passed a
+     *  regular FTC_ImageType handle, or a legacy FTC_OldImageDesc one.
+     */
+    if ( (FT_ULong)type->width >= 0x10000L )
+    {
+      FTC_OldImageDesc  desc = (FTC_OldImageDesc)type;
+
+
+      query.attrs.scaler.face_id = desc->font.face_id;
+      query.attrs.scaler.width   = desc->font.pix_width;
+      query.attrs.scaler.height  = desc->font.pix_height;
+      query.attrs.load_flags     = desc->flags;
+    }
+    else
+
+#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
+
+    {
+      if ( (FT_ULong)(type->flags - FT_INT_MIN) > FT_UINT_MAX )
+      {
+        FT_TRACE1(( "FTC_ImageCache_Lookup: higher bits in load_flags" ));
+        FT_TRACE1(( "0x%x are dropped\n", (type->flags & ~((FT_ULong)FT_UINT_MAX)) ));
+      }
+
+      query.attrs.scaler.face_id = type->face_id;
+      query.attrs.scaler.width   = type->width;
+      query.attrs.scaler.height  = type->height;
+      query.attrs.load_flags     = (FT_UInt)type->flags;
+    }
+
+    query.attrs.scaler.pixel = 1;
+    query.attrs.scaler.x_res = 0;  /* make compilers happy */
+    query.attrs.scaler.y_res = 0;
+
+    hash = FTC_BASIC_ATTR_HASH( &query.attrs ) + gindex;
+
+#if 1  /* inlining is about 50% faster! */
+    FTC_GCACHE_LOOKUP_CMP( cache,
+                           ftc_basic_family_compare,
+                           FTC_GNode_Compare,
+                           hash, gindex,
+                           &query,
+                           node,
+                           error );
+#else
+    error = FTC_GCache_Lookup( FTC_GCACHE( cache ),
+                               hash, gindex,
+                               FTC_GQUERY( &query ),
+                               &node );
+#endif
+    if ( !error )
+    {
+      *aglyph = FTC_INODE( node )->glyph;
+
+      if ( anode )
+      {
+        *anode = node;
+        node->ref_count++;
+      }
+    }
+
+  Exit:
+    return error;
+  }
+
+
+  /* documentation is in ftcache.h */
+
+  FT_EXPORT_DEF( FT_Error )
+  FTC_ImageCache_LookupScaler( FTC_ImageCache  cache,
+                               FTC_Scaler      scaler,
+                               FT_ULong        load_flags,
+                               FT_UInt         gindex,
+                               FT_Glyph       *aglyph,
+                               FTC_Node       *anode )
+  {
+    FTC_BasicQueryRec  query;
+    FTC_Node           node = 0; /* make compiler happy */
+    FT_Error           error;
+    FT_PtrDist         hash;
+
+
+    /* some argument checks are delayed to FTC_Cache_Lookup */
+    if ( !aglyph || !scaler )
+    {
+      error = FTC_Err_Invalid_Argument;
+      goto Exit;
+    }
+
+    *aglyph = NULL;
+    if ( anode )
+      *anode  = NULL;
+
+    /* FT_Load_Glyph(), FT_Load_Char() take FT_UInt flags */
+    if ( load_flags > FT_UINT_MAX )
+    {
+      FT_TRACE1(( "FTC_ImageCache_LookupScaler: higher bits in load_flags" ));
+      FT_TRACE1(( "0x%x are dropped\n", (load_flags & ~((FT_ULong)FT_UINT_MAX)) ));
+    }
+
+    query.attrs.scaler     = scaler[0];
+    query.attrs.load_flags = (FT_UInt)load_flags;
+
+    hash = FTC_BASIC_ATTR_HASH( &query.attrs ) + gindex;
+
+    FTC_GCACHE_LOOKUP_CMP( cache,
+                           ftc_basic_family_compare,
+                           FTC_GNode_Compare,
+                           hash, gindex,
+                           &query,
+                           node,
+                           error );
+    if ( !error )
+    {
+      *aglyph = FTC_INODE( node )->glyph;
+
+      if ( anode )
+      {
+        *anode = node;
+        node->ref_count++;
+      }
+    }
+
+  Exit:
+    return error;
+  }
+
+
+  
+#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
+
+  /* yet another backwards-legacy structure */
+  typedef struct  FTC_OldImage_Desc_
+  {
+    FTC_FontRec  font;
+    FT_UInt      image_type;
+
+  } FTC_OldImage_Desc;
+
+
+#define FTC_OLD_IMAGE_FORMAT( x )  ( (x) & 7 )
+
+
+#define ftc_old_image_format_bitmap    0x0000
+#define ftc_old_image_format_outline   0x0001
+
+#define ftc_old_image_format_mask      0x000F
+
+#define ftc_old_image_flag_monochrome  0x0010
+#define ftc_old_image_flag_unhinted    0x0020
+#define ftc_old_image_flag_autohinted  0x0040
+#define ftc_old_image_flag_unscaled    0x0080
+#define ftc_old_image_flag_no_sbits    0x0100
+
+  /* monochrome bitmap */
+#define ftc_old_image_mono             ftc_old_image_format_bitmap   | \
+                                       ftc_old_image_flag_monochrome
+
+  /* anti-aliased bitmap */
+#define ftc_old_image_grays            ftc_old_image_format_bitmap
+
+  /* scaled outline */
+#define ftc_old_image_outline          ftc_old_image_format_outline
+
+
+  static void
+  ftc_image_type_from_old_desc( FTC_ImageType       typ,
+                                FTC_OldImage_Desc*  desc )
+  {
+    typ->face_id = desc->font.face_id;
+    typ->width   = desc->font.pix_width;
+    typ->height  = desc->font.pix_height;
+
+    /* convert image type flags to load flags */
+    {
+      FT_UInt  load_flags = FT_LOAD_DEFAULT;
+      FT_UInt  type       = desc->image_type;
+
+
+      /* determine load flags, depending on the font description's */
+      /* image type                                                */
+
+      if ( FTC_OLD_IMAGE_FORMAT( type ) == ftc_old_image_format_bitmap )
+      {
+        if ( type & ftc_old_image_flag_monochrome )
+          load_flags |= FT_LOAD_MONOCHROME;
+
+        /* disable embedded bitmaps loading if necessary */
+        if ( type & ftc_old_image_flag_no_sbits )
+          load_flags |= FT_LOAD_NO_BITMAP;
+      }
+      else
+      {
+        /* we want an outline, don't load embedded bitmaps */
+        load_flags |= FT_LOAD_NO_BITMAP;
+
+        if ( type & ftc_old_image_flag_unscaled )
+          load_flags |= FT_LOAD_NO_SCALE;
+      }
+
+      /* always render glyphs to bitmaps */
+      load_flags |= FT_LOAD_RENDER;
+
+      if ( type & ftc_old_image_flag_unhinted )
+        load_flags |= FT_LOAD_NO_HINTING;
+
+      if ( type & ftc_old_image_flag_autohinted )
+        load_flags |= FT_LOAD_FORCE_AUTOHINT;
+
+      typ->flags = load_flags;
+    }
+  }
+
+
+  FT_EXPORT( FT_Error )
+  FTC_Image_Cache_New( FTC_Manager      manager,
+                       FTC_ImageCache  *acache );
+
+  FT_EXPORT( FT_Error )
+  FTC_Image_Cache_Lookup( FTC_ImageCache      icache,
+                          FTC_OldImage_Desc*  desc,
+                          FT_UInt             gindex,
+                          FT_Glyph           *aglyph );
+
+
+  FT_EXPORT_DEF( FT_Error )
+  FTC_Image_Cache_New( FTC_Manager      manager,
+                       FTC_ImageCache  *acache )
+  {
+    return FTC_ImageCache_New( manager, (FTC_ImageCache*)acache );
+  }
+
+
+
+  FT_EXPORT_DEF( FT_Error )
+  FTC_Image_Cache_Lookup( FTC_ImageCache      icache,
+                          FTC_OldImage_Desc*  desc,
+                          FT_UInt             gindex,
+                          FT_Glyph           *aglyph )
+  {
+    FTC_ImageTypeRec  type0;
+
+
+    if ( !desc )
+      return FTC_Err_Invalid_Argument;
+
+    ftc_image_type_from_old_desc( &type0, desc );
+
+    return FTC_ImageCache_Lookup( (FTC_ImageCache)icache,
+                                   &type0,
+                                   gindex,
+                                   aglyph,
+                                   NULL );
+  }
+
+#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
+
+
+ /*
+  *
+  * basic small bitmap cache
+  *
+  */
+
+
+  FT_CALLBACK_TABLE_DEF
+  const FTC_SFamilyClassRec  ftc_basic_sbit_family_class =
+  {
+    {
+      sizeof( FTC_BasicFamilyRec ),
+      ftc_basic_family_compare,
+      ftc_basic_family_init,
+      0,                            /* FTC_MruNode_ResetFunc */
+      0                             /* FTC_MruNode_DoneFunc  */
+    },
+    ftc_basic_family_get_count,
+    ftc_basic_family_load_bitmap
+  };
+
+
+  FT_CALLBACK_TABLE_DEF
+  const FTC_GCacheClassRec  ftc_basic_sbit_cache_class =
+  {
+    {
+      ftc_snode_new,
+      ftc_snode_weight,
+      ftc_snode_compare,
+      ftc_basic_gnode_compare_faceid,
+      ftc_snode_free,
+
+      sizeof ( FTC_GCacheRec ),
+      ftc_gcache_init,
+      ftc_gcache_done
+    },
+    (FTC_MruListClass)&ftc_basic_sbit_family_class
+  };
+
+
+  /* documentation is in ftcache.h */
+
+  FT_EXPORT_DEF( FT_Error )
+  FTC_SBitCache_New( FTC_Manager     manager,
+                     FTC_SBitCache  *acache )
+  {
+    return FTC_GCache_New( manager, &ftc_basic_sbit_cache_class,
+                           (FTC_GCache*)acache );
+  }
+
+
+  /* documentation is in ftcache.h */
+
+  FT_EXPORT_DEF( FT_Error )
+  FTC_SBitCache_Lookup( FTC_SBitCache  cache,
+                        FTC_ImageType  type,
+                        FT_UInt        gindex,
+                        FTC_SBit      *ansbit,
+                        FTC_Node      *anode )
+  {
+    FT_Error           error;
+    FTC_BasicQueryRec  query;
+    FTC_Node           node = 0; /* make compiler happy */
+    FT_PtrDist         hash;
+
+
+    if ( anode )
+      *anode = NULL;
+
+    /* other argument checks delayed to FTC_Cache_Lookup */
+    if ( !ansbit )
+      return FTC_Err_Invalid_Argument;
+
+    *ansbit = NULL;
+
+#if defined( FT_CONFIG_OPTION_OLD_INTERNALS ) && ( FT_INT_MAX > 0xFFFFU )
+
+    /*  This one is a major hack used to detect whether we are passed a
+     *  regular FTC_ImageType handle, or a legacy FTC_OldImageDesc one.
+     */
+    if ( (FT_ULong)type->width >= 0x10000L )
+    {
+      FTC_OldImageDesc  desc = (FTC_OldImageDesc)type;
+
+
+      query.attrs.scaler.face_id = desc->font.face_id;
+      query.attrs.scaler.width   = desc->font.pix_width;
+      query.attrs.scaler.height  = desc->font.pix_height;
+      query.attrs.load_flags     = desc->flags;
+    }
+    else
+
+#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
+
+    {
+      if ( (FT_ULong)(type->flags - FT_INT_MIN) > FT_UINT_MAX )
+      {
+        FT_TRACE1(( "FTC_ImageCache_Lookup: higher bits in load_flags" ));
+        FT_TRACE1(( "0x%x are dropped\n", (type->flags & ~((FT_ULong)FT_UINT_MAX)) ));
+      }
+
+      query.attrs.scaler.face_id = type->face_id;
+      query.attrs.scaler.width   = type->width;
+      query.attrs.scaler.height  = type->height;
+      query.attrs.load_flags     = (FT_UInt)type->flags;
+    }
+
+    query.attrs.scaler.pixel = 1;
+    query.attrs.scaler.x_res = 0;  /* make compilers happy */
+    query.attrs.scaler.y_res = 0;
+
+    /* beware, the hash must be the same for all glyph ranges! */
+    hash = FTC_BASIC_ATTR_HASH( &query.attrs ) +
+           gindex / FTC_SBIT_ITEMS_PER_NODE;
+
+#if 1  /* inlining is about 50% faster! */
+    FTC_GCACHE_LOOKUP_CMP( cache,
+                           ftc_basic_family_compare,
+                           FTC_SNode_Compare,
+                           hash, gindex,
+                           &query,
+                           node,
+                           error );
+#else
+    error = FTC_GCache_Lookup( FTC_GCACHE( cache ),
+                               hash,
+                               gindex,
+                               FTC_GQUERY( &query ),
+                               &node );
+#endif
+    if ( error )
+      goto Exit;
+
+    *ansbit = FTC_SNODE( node )->sbits +
+              ( gindex - FTC_GNODE( node )->gindex );
+
+    if ( anode )
+    {
+      *anode = node;
+      node->ref_count++;
+    }
+
+  Exit:
+    return error;
+  }
+
+
+  /* documentation is in ftcache.h */
+
+  FT_EXPORT_DEF( FT_Error )
+  FTC_SBitCache_LookupScaler( FTC_SBitCache  cache,
+                              FTC_Scaler     scaler,
+                              FT_ULong       load_flags,
+                              FT_UInt        gindex,
+                              FTC_SBit      *ansbit,
+                              FTC_Node      *anode )
+  {
+    FT_Error           error;
+    FTC_BasicQueryRec  query;
+    FTC_Node           node = 0; /* make compiler happy */
+    FT_PtrDist         hash;
+
+
+    if ( anode )
+        *anode = NULL;
+
+    /* other argument checks delayed to FTC_Cache_Lookup */
+    if ( !ansbit || !scaler )
+        return FTC_Err_Invalid_Argument;
+
+    *ansbit = NULL;
+
+    /* FT_Load_Glyph(), FT_Load_Char() take FT_UInt flags */
+    if ( load_flags > FT_UINT_MAX )
+    {
+      FT_TRACE1(( "FTC_ImageCache_LookupScaler: higher bits in load_flags" ));
+      FT_TRACE1(( "0x%x are dropped\n", (load_flags & ~((FT_ULong)FT_UINT_MAX)) ));
+    }
+
+    query.attrs.scaler     = scaler[0];
+    query.attrs.load_flags = (FT_UInt)load_flags;
+
+    /* beware, the hash must be the same for all glyph ranges! */
+    hash = FTC_BASIC_ATTR_HASH( &query.attrs ) +
+             gindex / FTC_SBIT_ITEMS_PER_NODE;
+
+    FTC_GCACHE_LOOKUP_CMP( cache,
+                           ftc_basic_family_compare,
+                           FTC_SNode_Compare,
+                           hash, gindex,
+                           &query,
+                           node,
+                           error );
+    if ( error )
+      goto Exit;
+
+    *ansbit = FTC_SNODE( node )->sbits +
+              ( gindex - FTC_GNODE( node )->gindex );
+
+    if ( anode )
+    {
+      *anode = node;
+      node->ref_count++;
+    }
+
+  Exit:
+    return error;
+  }
+
+
+#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
+
+  FT_EXPORT( FT_Error )
+  FTC_SBit_Cache_New( FTC_Manager     manager,
+                      FTC_SBitCache  *acache );
+
+  FT_EXPORT( FT_Error )
+  FTC_SBit_Cache_Lookup( FTC_SBitCache       cache,
+                         FTC_OldImage_Desc*  desc,
+                         FT_UInt             gindex,
+                         FTC_SBit           *ansbit );
+
+
+  FT_EXPORT_DEF( FT_Error )
+  FTC_SBit_Cache_New( FTC_Manager     manager,
+                      FTC_SBitCache  *acache )
+  {
+    return FTC_SBitCache_New( manager, (FTC_SBitCache*)acache );
+  }
+
+
+  FT_EXPORT_DEF( FT_Error )
+  FTC_SBit_Cache_Lookup( FTC_SBitCache       cache,
+                         FTC_OldImage_Desc*  desc,
+                         FT_UInt             gindex,
+                         FTC_SBit           *ansbit )
+  {
+    FTC_ImageTypeRec  type0;
+
+
+    if ( !desc )
+      return FTC_Err_Invalid_Argument;
+
+    ftc_image_type_from_old_desc( &type0, desc );
+
+    return FTC_SBitCache_Lookup( (FTC_SBitCache)cache,
+                                  &type0,
+                                  gindex,
+                                  ansbit,
+                                  NULL );
+  }
+
+#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
+
+
+/* END */
diff --git a/src/cache/ftccache.c b/src/cache/ftccache.c
new file mode 100644
index 0000000..f01c403
--- /dev/null
+++ b/src/cache/ftccache.c
@@ -0,0 +1,626 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftccache.c                                                             */
+/*                                                                         */
+/*    The FreeType internal cache interface (body).                        */
+/*                                                                         */
+/*  Copyright 2000-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010,   */
+/*            2011 by                                                      */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#include <ft2build.h>
+#include "ftcmanag.h"
+#include FT_INTERNAL_OBJECTS_H
+#include FT_INTERNAL_DEBUG_H
+
+#include "ftccback.h"
+#include "ftcerror.h"
+
+#undef  FT_COMPONENT
+#define FT_COMPONENT  trace_cache
+
+
+#define FTC_HASH_MAX_LOAD  2
+#define FTC_HASH_MIN_LOAD  1
+#define FTC_HASH_SUB_LOAD  ( FTC_HASH_MAX_LOAD - FTC_HASH_MIN_LOAD )
+
+  /* this one _must_ be a power of 2! */
+#define FTC_HASH_INITIAL_SIZE  8
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                   CACHE NODE DEFINITIONS                      *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+  /* add a new node to the head of the manager's circular MRU list */
+  static void
+  ftc_node_mru_link( FTC_Node     node,
+                     FTC_Manager  manager )
+  {
+    void  *nl = &manager->nodes_list;
+
+
+    FTC_MruNode_Prepend( (FTC_MruNode*)nl,
+                         (FTC_MruNode)node );
+    manager->num_nodes++;
+  }
+
+
+  /* remove a node from the manager's MRU list */
+  static void
+  ftc_node_mru_unlink( FTC_Node     node,
+                       FTC_Manager  manager )
+  {
+    void  *nl = &manager->nodes_list;
+
+
+    FTC_MruNode_Remove( (FTC_MruNode*)nl,
+                        (FTC_MruNode)node );
+    manager->num_nodes--;
+  }
+
+
+#ifndef FTC_INLINE
+
+  /* move a node to the head of the manager's MRU list */
+  static void
+  ftc_node_mru_up( FTC_Node     node,
+                   FTC_Manager  manager )
+  {
+    FTC_MruNode_Up( (FTC_MruNode*)&manager->nodes_list,
+                    (FTC_MruNode)node );
+  }
+
+
+  /* get a top bucket for specified hash from cache,
+   * body for FTC_NODE__TOP_FOR_HASH( cache, hash )
+   */
+  FT_LOCAL_DEF( FTC_Node* )
+  ftc_get_top_node_for_hash( FTC_Cache   cache,
+                             FT_PtrDist  hash )
+  {
+    FTC_Node*  pnode;
+    FT_UInt    idx;
+
+
+    idx = (FT_UInt)( hash & cache->mask );
+    if ( idx < cache->p )
+      idx = (FT_UInt)( hash & ( 2 * cache->mask + 1 ) );
+    pnode = cache->buckets + idx;
+    return pnode;
+  }
+
+#endif /* !FTC_INLINE */
+
+
+  /* Note that this function cannot fail.  If we cannot re-size the
+   * buckets array appropriately, we simply degrade the hash table's
+   * performance!
+   */
+  static void
+  ftc_cache_resize( FTC_Cache  cache )
+  {
+    for (;;)
+    {
+      FTC_Node  node, *pnode;
+      FT_UFast  p     = cache->p;
+      FT_UFast  mask  = cache->mask;
+      FT_UFast  count = mask + p + 1;    /* number of buckets */
+
+
+      /* do we need to shrink the buckets array? */
+      if ( cache->slack < 0 )
+      {
+        FTC_Node  new_list = NULL;
+
+
+        /* try to expand the buckets array _before_ splitting
+         * the bucket lists
+         */
+        if ( p >= mask )
+        {
+          FT_Memory  memory = cache->memory;
+          FT_Error   error;
+
+
+          /* if we can't expand the array, leave immediately */
+          if ( FT_RENEW_ARRAY( cache->buckets,
+                               ( mask + 1 ) * 2, ( mask + 1 ) * 4 ) )
+            break;
+        }
+
+        /* split a single bucket */
+        pnode = cache->buckets + p;
+
+        for (;;)
+        {
+          node = *pnode;
+          if ( node == NULL )
+            break;
+
+          if ( node->hash & ( mask + 1 ) )
+          {
+            *pnode     = node->link;
+            node->link = new_list;
+            new_list   = node;
+          }
+          else
+            pnode = &node->link;
+        }
+
+        cache->buckets[p + mask + 1] = new_list;
+
+        cache->slack += FTC_HASH_MAX_LOAD;
+
+        if ( p >= mask )
+        {
+          cache->mask = 2 * mask + 1;
+          cache->p    = 0;
+        }
+        else
+          cache->p = p + 1;
+      }
+
+      /* do we need to expand the buckets array? */
+      else if ( cache->slack > (FT_Long)count * FTC_HASH_SUB_LOAD )
+      {
+        FT_UFast   old_index = p + mask;
+        FTC_Node*  pold;
+
+
+        if ( old_index + 1 <= FTC_HASH_INITIAL_SIZE )
+          break;
+
+        if ( p == 0 )
+        {
+          FT_Memory  memory = cache->memory;
+          FT_Error   error;
+
+
+          /* if we can't shrink the array, leave immediately */
+          if ( FT_RENEW_ARRAY( cache->buckets,
+                               ( mask + 1 ) * 2, mask + 1 ) )
+            break;
+
+          cache->mask >>= 1;
+          p             = cache->mask;
+        }
+        else
+          p--;
+
+        pnode = cache->buckets + p;
+        while ( *pnode )
+          pnode = &(*pnode)->link;
+
+        pold   = cache->buckets + old_index;
+        *pnode = *pold;
+        *pold  = NULL;
+
+        cache->slack -= FTC_HASH_MAX_LOAD;
+        cache->p      = p;
+      }
+
+      /* otherwise, the hash table is balanced */
+      else
+        break;
+    }
+  }
+
+
+  /* remove a node from its cache's hash table */
+  static void
+  ftc_node_hash_unlink( FTC_Node   node0,
+                        FTC_Cache  cache )
+  {
+    FTC_Node  *pnode = FTC_NODE__TOP_FOR_HASH( cache, node0->hash );
+
+
+    for (;;)
+    {
+      FTC_Node  node = *pnode;
+
+
+      if ( node == NULL )
+      {
+        FT_TRACE0(( "ftc_node_hash_unlink: unknown node\n" ));
+        return;
+      }
+
+      if ( node == node0 )
+        break;
+
+      pnode = &(*pnode)->link;
+    }
+
+    *pnode      = node0->link;
+    node0->link = NULL;
+
+    cache->slack++;
+    ftc_cache_resize( cache );
+  }
+
+
+  /* add a node to the `top' of its cache's hash table */
+  static void
+  ftc_node_hash_link( FTC_Node   node,
+                      FTC_Cache  cache )
+  {
+    FTC_Node  *pnode = FTC_NODE__TOP_FOR_HASH( cache, node->hash );
+
+
+    node->link = *pnode;
+    *pnode     = node;
+
+    cache->slack--;
+    ftc_cache_resize( cache );
+  }
+
+
+  /* remove a node from the cache manager */
+#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
+  FT_BASE_DEF( void )
+#else
+  FT_LOCAL_DEF( void )
+#endif
+  ftc_node_destroy( FTC_Node     node,
+                    FTC_Manager  manager )
+  {
+    FTC_Cache  cache;
+
+
+#ifdef FT_DEBUG_ERROR
+    /* find node's cache */
+    if ( node->cache_index >= manager->num_caches )
+    {
+      FT_TRACE0(( "ftc_node_destroy: invalid node handle\n" ));
+      return;
+    }
+#endif
+
+    cache = manager->caches[node->cache_index];
+
+#ifdef FT_DEBUG_ERROR
+    if ( cache == NULL )
+    {
+      FT_TRACE0(( "ftc_node_destroy: invalid node handle\n" ));
+      return;
+    }
+#endif
+
+    manager->cur_weight -= cache->clazz.node_weight( node, cache );
+
+    /* remove node from mru list */
+    ftc_node_mru_unlink( node, manager );
+
+    /* remove node from cache's hash table */
+    ftc_node_hash_unlink( node, cache );
+
+    /* now finalize it */
+    cache->clazz.node_free( node, cache );
+
+#if 0
+    /* check, just in case of general corruption :-) */
+    if ( manager->num_nodes == 0 )
+      FT_TRACE0(( "ftc_node_destroy: invalid cache node count (%d)\n",
+                  manager->num_nodes ));
+#endif
+  }
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                    ABSTRACT CACHE CLASS                       *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  FT_LOCAL_DEF( FT_Error )
+  FTC_Cache_Init( FTC_Cache  cache )
+  {
+    return ftc_cache_init( cache );
+  }
+
+
+  FT_LOCAL_DEF( FT_Error )
+  ftc_cache_init( FTC_Cache  cache )
+  {
+    FT_Memory  memory = cache->memory;
+    FT_Error   error;
+
+
+    cache->p     = 0;
+    cache->mask  = FTC_HASH_INITIAL_SIZE - 1;
+    cache->slack = FTC_HASH_INITIAL_SIZE * FTC_HASH_MAX_LOAD;
+
+    (void)FT_NEW_ARRAY( cache->buckets, FTC_HASH_INITIAL_SIZE * 2 );
+    return error;
+  }
+
+
+  static void
+  FTC_Cache_Clear( FTC_Cache  cache )
+  {
+    if ( cache && cache->buckets )
+    {
+      FTC_Manager  manager = cache->manager;
+      FT_UFast     i;
+      FT_UFast     count;
+
+
+      count = cache->p + cache->mask + 1;
+
+      for ( i = 0; i < count; i++ )
+      {
+        FTC_Node  *pnode = cache->buckets + i, next, node = *pnode;
+
+
+        while ( node )
+        {
+          next        = node->link;
+          node->link  = NULL;
+
+          /* remove node from mru list */
+          ftc_node_mru_unlink( node, manager );
+
+          /* now finalize it */
+          manager->cur_weight -= cache->clazz.node_weight( node, cache );
+
+          cache->clazz.node_free( node, cache );
+          node = next;
+        }
+        cache->buckets[i] = NULL;
+      }
+      ftc_cache_resize( cache );
+    }
+  }
+
+
+  FT_LOCAL_DEF( void )
+  ftc_cache_done( FTC_Cache  cache )
+  {
+    if ( cache->memory )
+    {
+      FT_Memory  memory = cache->memory;
+
+
+      FTC_Cache_Clear( cache );
+
+      FT_FREE( cache->buckets );
+      cache->mask  = 0;
+      cache->p     = 0;
+      cache->slack = 0;
+
+      cache->memory = NULL;
+    }
+  }
+
+
+  FT_LOCAL_DEF( void )
+  FTC_Cache_Done( FTC_Cache  cache )
+  {
+    ftc_cache_done( cache );
+  }
+
+
+  static void
+  ftc_cache_add( FTC_Cache  cache,
+                 FT_PtrDist hash,
+                 FTC_Node   node )
+  {
+    node->hash        = hash;
+    node->cache_index = (FT_UInt16)cache->index;
+    node->ref_count   = 0;
+
+    ftc_node_hash_link( node, cache );
+    ftc_node_mru_link( node, cache->manager );
+
+    {
+      FTC_Manager  manager = cache->manager;
+
+
+      manager->cur_weight += cache->clazz.node_weight( node, cache );
+
+      if ( manager->cur_weight >= manager->max_weight )
+      {
+        node->ref_count++;
+        FTC_Manager_Compress( manager );
+        node->ref_count--;
+      }
+    }
+  }
+
+
+  FT_LOCAL_DEF( FT_Error )
+  FTC_Cache_NewNode( FTC_Cache   cache,
+                     FT_PtrDist  hash,
+                     FT_Pointer  query,
+                     FTC_Node   *anode )
+  {
+    FT_Error  error;
+    FTC_Node  node;
+
+
+    /*
+     * We use the FTC_CACHE_TRYLOOP macros to support out-of-memory
+     * errors (OOM) correctly, i.e., by flushing the cache progressively
+     * in order to make more room.
+     */
+
+    FTC_CACHE_TRYLOOP( cache )
+    {
+      error = cache->clazz.node_new( &node, query, cache );
+    }
+    FTC_CACHE_TRYLOOP_END( NULL );
+
+    if ( error )
+      node = NULL;
+    else
+    {
+     /* don't assume that the cache has the same number of buckets, since
+      * our allocation request might have triggered global cache flushing
+      */
+      ftc_cache_add( cache, hash, node );
+    }
+
+    *anode = node;
+    return error;
+  }
+
+
+#ifndef FTC_INLINE
+
+  FT_LOCAL_DEF( FT_Error )
+  FTC_Cache_Lookup( FTC_Cache   cache,
+                    FT_PtrDist  hash,
+                    FT_Pointer  query,
+                    FTC_Node   *anode )
+  {
+    FTC_Node*  bucket;
+    FTC_Node*  pnode;
+    FTC_Node   node;
+    FT_Error   error        = FTC_Err_Ok;
+    FT_Bool    list_changed = FALSE;
+
+    FTC_Node_CompareFunc  compare = cache->clazz.node_compare;
+
+
+    if ( cache == NULL || anode == NULL )
+      return FTC_Err_Invalid_Argument;
+
+    /* Go to the `top' node of the list sharing same masked hash */
+    bucket = pnode = FTC_NODE__TOP_FOR_HASH( cache, hash );
+
+    /* Lookup a node with exactly same hash and queried properties.  */
+    /* NOTE: _nodcomp() may change the linked list to reduce memory. */
+    for (;;)
+    {
+      node = *pnode;
+      if ( node == NULL )
+        goto NewNode;
+
+      if ( node->hash == hash                           &&
+           compare( node, query, cache, &list_changed ) )
+        break;
+
+      pnode = &node->link;
+    }
+
+    if ( list_changed )
+    {
+      /* Update bucket by modified linked list */
+      bucket = pnode = FTC_NODE__TOP_FOR_HASH( cache, hash );
+
+      /* Update pnode by modified linked list */
+      while ( *pnode != node )
+      {
+        if ( *pnode == NULL )
+        {
+          FT_ERROR(( "FTC_Cache_Lookup: oops!!!  node missing\n" ));
+          goto NewNode;
+        }
+        else
+          pnode = &((*pnode)->link);
+      }
+    }
+
+    /* Reorder the list to move the found node to the `top' */
+    if ( node != *bucket )
+    {
+      *pnode     = node->link;
+      node->link = *bucket;
+      *bucket    = node;
+    }
+
+    /* move to head of MRU list */
+    {
+      FTC_Manager  manager = cache->manager;
+
+
+      if ( node != manager->nodes_list )
+        ftc_node_mru_up( node, manager );
+    }
+    *anode = node;
+
+    return error;
+
+  NewNode:
+    return FTC_Cache_NewNode( cache, hash, query, anode );
+  }
+
+#endif /* !FTC_INLINE */
+
+
+  FT_LOCAL_DEF( void )
+  FTC_Cache_RemoveFaceID( FTC_Cache   cache,
+                          FTC_FaceID  face_id )
+  {
+    FT_UFast     i, count;
+    FTC_Manager  manager = cache->manager;
+    FTC_Node     frees   = NULL;
+
+
+    count = cache->p + cache->mask + 1;
+    for ( i = 0; i < count; i++ )
+    {
+      FTC_Node*  bucket = cache->buckets + i;
+      FTC_Node*  pnode  = bucket;
+
+
+      for ( ;; )
+      {
+        FTC_Node  node = *pnode;
+        FT_Bool   list_changed = FALSE;
+
+
+        if ( node == NULL )
+          break;
+
+        if ( cache->clazz.node_remove_faceid( node, face_id,
+                                              cache, &list_changed ) )
+        {
+          *pnode     = node->link;
+          node->link = frees;
+          frees      = node;
+        }
+        else
+          pnode = &node->link;
+      }
+    }
+
+    /* remove all nodes in the free list */
+    while ( frees )
+    {
+      FTC_Node  node;
+
+
+      node  = frees;
+      frees = node->link;
+
+      manager->cur_weight -= cache->clazz.node_weight( node, cache );
+      ftc_node_mru_unlink( node, manager );
+
+      cache->clazz.node_free( node, cache );
+
+      cache->slack++;
+    }
+
+    ftc_cache_resize( cache );
+  }
+
+
+/* END */
diff --git a/src/cache/ftccache.h b/src/cache/ftccache.h
new file mode 100644
index 0000000..d60984f
--- /dev/null
+++ b/src/cache/ftccache.h
@@ -0,0 +1,359 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftccache.h                                                             */
+/*                                                                         */
+/*    FreeType internal cache interface (specification).                   */
+/*                                                                         */
+/*  Copyright 2000-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010,   */
+/*            2011 by                                                      */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTCCACHE_H__
+#define __FTCCACHE_H__
+
+
+#include "ftcmru.h"
+
+FT_BEGIN_HEADER
+
+#define _FTC_FACE_ID_HASH( i )                                                \
+          ((FT_PtrDist)(( (FT_PtrDist)(i) >> 3 ) ^ ( (FT_PtrDist)(i) << 7 )))
+
+  /* handle to cache object */
+  typedef struct FTC_CacheRec_*  FTC_Cache;
+
+  /* handle to cache class */
+  typedef const struct FTC_CacheClassRec_*  FTC_CacheClass;
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                   CACHE NODE DEFINITIONS                      *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Each cache controls one or more cache nodes.  Each node is part of    */
+  /* the global_lru list of the manager.  Its `data' field however is used */
+  /* as a reference count for now.                                         */
+  /*                                                                       */
+  /* A node can be anything, depending on the type of information held by  */
+  /* the cache.  It can be an individual glyph image, a set of bitmaps     */
+  /* glyphs for a given size, some metrics, etc.                           */
+  /*                                                                       */
+  /*************************************************************************/
+
+  /* structure size should be 20 bytes on 32-bits machines */
+  typedef struct  FTC_NodeRec_
+  {
+    FTC_MruNodeRec  mru;          /* circular mru list pointer           */
+    FTC_Node        link;         /* used for hashing                    */
+    FT_PtrDist      hash;         /* used for hashing too                */
+    FT_UShort       cache_index;  /* index of cache the node belongs to  */
+    FT_Short        ref_count;    /* reference count for this node       */
+
+  } FTC_NodeRec;
+
+
+#define FTC_NODE( x )    ( (FTC_Node)(x) )
+#define FTC_NODE_P( x )  ( (FTC_Node*)(x) )
+
+#define FTC_NODE__NEXT( x )  FTC_NODE( (x)->mru.next )
+#define FTC_NODE__PREV( x )  FTC_NODE( (x)->mru.prev )
+
+#ifdef FTC_INLINE
+#define FTC_NODE__TOP_FOR_HASH( cache, hash )                     \
+        ( ( cache )->buckets +                                    \
+            ( ( ( ( hash ) &   ( cache )->mask ) < ( cache )->p ) \
+              ? ( ( hash ) & ( ( cache )->mask * 2 + 1 ) )        \
+              : ( ( hash ) &   ( cache )->mask ) ) )
+#else
+  FT_LOCAL( FTC_Node* )
+  ftc_get_top_node_for_hash( FTC_Cache   cache,
+                             FT_PtrDist  hash );
+#define FTC_NODE__TOP_FOR_HASH( cache, hash )            \
+        ftc_get_top_node_for_hash( ( cache ), ( hash ) )
+#endif
+
+#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
+  FT_BASE( void )
+  ftc_node_destroy( FTC_Node     node,
+                    FTC_Manager  manager );
+#endif
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                       CACHE DEFINITIONS                       *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+  /* initialize a new cache node */
+  typedef FT_Error
+  (*FTC_Node_NewFunc)( FTC_Node    *pnode,
+                       FT_Pointer   query,
+                       FTC_Cache    cache );
+
+  typedef FT_Offset
+  (*FTC_Node_WeightFunc)( FTC_Node   node,
+                          FTC_Cache  cache );
+
+  /* compare a node to a given key pair */
+  typedef FT_Bool
+  (*FTC_Node_CompareFunc)( FTC_Node    node,
+                           FT_Pointer  key,
+                           FTC_Cache   cache,
+                           FT_Bool*    list_changed );
+
+
+  typedef void
+  (*FTC_Node_FreeFunc)( FTC_Node   node,
+                        FTC_Cache  cache );
+
+  typedef FT_Error
+  (*FTC_Cache_InitFunc)( FTC_Cache  cache );
+
+  typedef void
+  (*FTC_Cache_DoneFunc)( FTC_Cache  cache );
+
+
+  typedef struct  FTC_CacheClassRec_
+  {
+    FTC_Node_NewFunc      node_new;
+    FTC_Node_WeightFunc   node_weight;
+    FTC_Node_CompareFunc  node_compare;
+    FTC_Node_CompareFunc  node_remove_faceid;
+    FTC_Node_FreeFunc     node_free;
+
+    FT_Offset             cache_size;
+    FTC_Cache_InitFunc    cache_init;
+    FTC_Cache_DoneFunc    cache_done;
+
+  } FTC_CacheClassRec;
+
+
+  /* each cache really implements a dynamic hash table to manage its nodes */
+  typedef struct  FTC_CacheRec_
+  {
+    FT_UFast           p;
+    FT_UFast           mask;
+    FT_Long            slack;
+    FTC_Node*          buckets;
+
+    FTC_CacheClassRec  clazz;       /* local copy, for speed  */
+
+    FTC_Manager        manager;
+    FT_Memory          memory;
+    FT_UInt            index;       /* in manager's table     */
+
+    FTC_CacheClass     org_class;   /* original class pointer */
+
+  } FTC_CacheRec;
+
+
+#define FTC_CACHE( x )    ( (FTC_Cache)(x) )
+#define FTC_CACHE_P( x )  ( (FTC_Cache*)(x) )
+
+
+  /* default cache initialize */
+  FT_LOCAL( FT_Error )
+  FTC_Cache_Init( FTC_Cache  cache );
+
+  /* default cache finalizer */
+  FT_LOCAL( void )
+  FTC_Cache_Done( FTC_Cache  cache );
+
+  /* Call this function to look up the cache.  If no corresponding
+   * node is found, a new one is automatically created.  This function
+   * is capable of flushing the cache adequately to make room for the
+   * new cache object.
+   */
+
+#ifndef FTC_INLINE
+  FT_LOCAL( FT_Error )
+  FTC_Cache_Lookup( FTC_Cache   cache,
+                    FT_PtrDist  hash,
+                    FT_Pointer  query,
+                    FTC_Node   *anode );
+#endif
+
+  FT_LOCAL( FT_Error )
+  FTC_Cache_NewNode( FTC_Cache   cache,
+                     FT_PtrDist  hash,
+                     FT_Pointer  query,
+                     FTC_Node   *anode );
+
+  /* Remove all nodes that relate to a given face_id.  This is useful
+   * when un-installing fonts.  Note that if a cache node relates to
+   * the face_id but is locked (i.e., has `ref_count > 0'), the node
+   * will _not_ be destroyed, but its internal face_id reference will
+   * be modified.
+   *
+   * The final result will be that the node will never come back
+   * in further lookup requests, and will be flushed on demand from
+   * the cache normally when its reference count reaches 0.
+   */
+  FT_LOCAL( void )
+  FTC_Cache_RemoveFaceID( FTC_Cache   cache,
+                          FTC_FaceID  face_id );
+
+
+#ifdef FTC_INLINE
+
+#define FTC_CACHE_LOOKUP_CMP( cache, nodecmp, hash, query, node, error ) \
+  FT_BEGIN_STMNT                                                         \
+    FTC_Node             *_bucket, *_pnode, _node;                       \
+    FTC_Cache             _cache   = FTC_CACHE(cache);                   \
+    FT_PtrDist            _hash    = (FT_PtrDist)(hash);                 \
+    FTC_Node_CompareFunc  _nodcomp = (FTC_Node_CompareFunc)(nodecmp);    \
+    FT_Bool               _list_changed = FALSE;                         \
+                                                                         \
+                                                                         \
+    error = FTC_Err_Ok;                                                  \
+    node  = NULL;                                                        \
+                                                                         \
+    /* Go to the `top' node of the list sharing same masked hash */      \
+    _bucket = _pnode = FTC_NODE__TOP_FOR_HASH( _cache, _hash );          \
+                                                                         \
+    /* Look up a node with identical hash and queried properties.    */  \
+    /* NOTE: _nodcomp() may change the linked list to reduce memory. */  \
+    for (;;)                                                             \
+    {                                                                    \
+      _node = *_pnode;                                                   \
+      if ( _node == NULL )                                               \
+        goto _NewNode;                                                   \
+                                                                         \
+      if ( _node->hash == _hash                             &&           \
+           _nodcomp( _node, query, _cache, &_list_changed ) )            \
+        break;                                                           \
+                                                                         \
+      _pnode = &_node->link;                                             \
+    }                                                                    \
+                                                                         \
+    if ( _list_changed )                                                 \
+    {                                                                    \
+      /* Update _bucket by possibly modified linked list */              \
+      _bucket = _pnode = FTC_NODE__TOP_FOR_HASH( _cache, _hash );        \
+                                                                         \
+      /* Update _pnode by possibly modified linked list */               \
+      while ( *_pnode != _node )                                         \
+      {                                                                  \
+        if ( *_pnode == NULL )                                           \
+        {                                                                \
+          FT_ERROR(( "FTC_CACHE_LOOKUP_CMP: oops!!! node missing\n" ));  \
+          goto _NewNode;                                                 \
+        }                                                                \
+        else                                                             \
+          _pnode = &((*_pnode)->link);                                   \
+      }                                                                  \
+    }                                                                    \
+                                                                         \
+    /* Reorder the list to move the found node to the `top' */           \
+    if ( _node != *_bucket )                                             \
+    {                                                                    \
+      *_pnode     = _node->link;                                         \
+      _node->link = *_bucket;                                            \
+      *_bucket    = _node;                                               \
+    }                                                                    \
+                                                                         \
+    /* Update MRU list */                                                \
+    {                                                                    \
+      FTC_Manager  _manager = _cache->manager;                           \
+      void*        _nl      = &_manager->nodes_list;                     \
+                                                                         \
+                                                                         \
+      if ( _node != _manager->nodes_list )                               \
+        FTC_MruNode_Up( (FTC_MruNode*)_nl,                               \
+                        (FTC_MruNode)_node );                            \
+    }                                                                    \
+    goto _Ok;                                                            \
+                                                                         \
+  _NewNode:                                                              \
+    error = FTC_Cache_NewNode( _cache, _hash, query, &_node );           \
+                                                                         \
+  _Ok:                                                                   \
+    node = _node;                                                        \
+  FT_END_STMNT
+
+#else /* !FTC_INLINE */
+
+#define FTC_CACHE_LOOKUP_CMP( cache, nodecmp, hash, query, node, error ) \
+  FT_BEGIN_STMNT                                                         \
+    error = FTC_Cache_Lookup( FTC_CACHE( cache ), hash, query,           \
+                              (FTC_Node*)&(node) );                      \
+  FT_END_STMNT
+
+#endif /* !FTC_INLINE */
+
+
+  /*
+   * This macro, together with FTC_CACHE_TRYLOOP_END, defines a retry
+   * loop to flush the cache repeatedly in case of memory overflows.
+   *
+   * It is used when creating a new cache node, or within a lookup
+   * that needs to allocate data (e.g. the sbit cache lookup).
+   *
+   * Example:
+   *
+   *   {
+   *     FTC_CACHE_TRYLOOP( cache )
+   *       error = load_data( ... );
+   *     FTC_CACHE_TRYLOOP_END()
+   *   }
+   *
+   */
+#define FTC_CACHE_TRYLOOP( cache )                           \
+  {                                                          \
+    FTC_Manager  _try_manager = FTC_CACHE( cache )->manager; \
+    FT_UInt      _try_count   = 4;                           \
+                                                             \
+                                                             \
+    for (;;)                                                 \
+    {                                                        \
+      FT_UInt  _try_done;
+
+
+#define FTC_CACHE_TRYLOOP_END( list_changed )                     \
+      if ( !error || error != FTC_Err_Out_Of_Memory )             \
+        break;                                                    \
+                                                                  \
+      _try_done = FTC_Manager_FlushN( _try_manager, _try_count ); \
+      if ( _try_done > 0 && ( list_changed ) )                    \
+        *(FT_Bool*)( list_changed ) = TRUE;                       \
+                                                                  \
+      if ( _try_done == 0 )                                       \
+        break;                                                    \
+                                                                  \
+      if ( _try_done == _try_count )                              \
+      {                                                           \
+        _try_count *= 2;                                          \
+        if ( _try_count < _try_done              ||               \
+            _try_count > _try_manager->num_nodes )                \
+          _try_count = _try_manager->num_nodes;                   \
+      }                                                           \
+    }                                                             \
+  }
+
+ /* */
+
+FT_END_HEADER
+
+
+#endif /* __FTCCACHE_H__ */
+
+
+/* END */
diff --git a/src/cache/ftccback.h b/src/cache/ftccback.h
new file mode 100644
index 0000000..80ec9ce
--- /dev/null
+++ b/src/cache/ftccback.h
@@ -0,0 +1,92 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftccback.h                                                             */
+/*                                                                         */
+/*    Callback functions of the caching sub-system (specification only).   */
+/*                                                                         */
+/*  Copyright 2004, 2005, 2006, 2011 by                                    */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+#ifndef __FTCCBACK_H__
+#define __FTCCBACK_H__
+
+#include <ft2build.h>
+#include FT_CACHE_H
+#include "ftcmru.h"
+#include "ftcimage.h"
+#include "ftcmanag.h"
+#include "ftcglyph.h"
+#include "ftcsbits.h"
+
+
+  FT_LOCAL( void )
+  ftc_inode_free( FTC_Node   inode,
+                  FTC_Cache  cache );
+
+  FT_LOCAL( FT_Error )
+  ftc_inode_new( FTC_Node   *pinode,
+                 FT_Pointer  gquery,
+                 FTC_Cache   cache );
+
+  FT_LOCAL( FT_Offset )
+  ftc_inode_weight( FTC_Node   inode,
+                    FTC_Cache  cache );
+
+
+  FT_LOCAL( void )
+  ftc_snode_free( FTC_Node   snode,
+                  FTC_Cache  cache );
+
+  FT_LOCAL( FT_Error )
+  ftc_snode_new( FTC_Node   *psnode,
+                 FT_Pointer  gquery,
+                 FTC_Cache   cache );
+
+  FT_LOCAL( FT_Offset )
+  ftc_snode_weight( FTC_Node   snode,
+                    FTC_Cache  cache );
+
+  FT_LOCAL( FT_Bool )
+  ftc_snode_compare( FTC_Node    snode,
+                     FT_Pointer  gquery,
+                     FTC_Cache   cache,
+                     FT_Bool*    list_changed );
+
+
+  FT_LOCAL( FT_Bool )
+  ftc_gnode_compare( FTC_Node    gnode,
+                     FT_Pointer  gquery,
+                     FTC_Cache   cache,
+                     FT_Bool*    list_changed );
+
+
+  FT_LOCAL( FT_Error )
+  ftc_gcache_init( FTC_Cache  cache );
+
+  FT_LOCAL( void )
+  ftc_gcache_done( FTC_Cache  cache );
+
+
+  FT_LOCAL( FT_Error )
+  ftc_cache_init( FTC_Cache  cache );
+
+  FT_LOCAL( void )
+  ftc_cache_done( FTC_Cache  cache );
+
+#ifndef FT_CONFIG_OPTION_OLD_INTERNALS
+  FT_LOCAL( void )
+  ftc_node_destroy( FTC_Node     node,
+                    FTC_Manager  manager );
+#endif
+
+#endif /* __FTCCBACK_H__ */
+
+/* END */
diff --git a/src/cache/ftccmap.c b/src/cache/ftccmap.c
new file mode 100644
index 0000000..b7bd291
--- /dev/null
+++ b/src/cache/ftccmap.c
@@ -0,0 +1,438 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftccmap.c                                                              */
+/*                                                                         */
+/*    FreeType CharMap cache (body)                                        */
+/*                                                                         */
+/*  Copyright 2000-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,   */
+/*            2010, 2011 by                                                */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include FT_CACHE_H
+#include "ftcmanag.h"
+#include FT_INTERNAL_MEMORY_H
+#include FT_INTERNAL_OBJECTS_H
+#include FT_INTERNAL_DEBUG_H
+
+#include "ftccback.h"
+#include "ftcerror.h"
+
+#undef  FT_COMPONENT
+#define FT_COMPONENT  trace_cache
+
+
+#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
+
+  typedef enum  FTC_OldCMapType_
+  {
+    FTC_OLD_CMAP_BY_INDEX    = 0,
+    FTC_OLD_CMAP_BY_ENCODING = 1,
+    FTC_OLD_CMAP_BY_ID       = 2
+
+  } FTC_OldCMapType;
+
+
+  typedef struct  FTC_OldCMapIdRec_
+  {
+    FT_UInt  platform;
+    FT_UInt  encoding;
+
+  } FTC_OldCMapIdRec, *FTC_OldCMapId;
+
+
+  typedef struct  FTC_OldCMapDescRec_
+  {
+    FTC_FaceID       face_id;
+    FTC_OldCMapType  type;
+
+    union
+    {
+      FT_UInt           index;
+      FT_Encoding       encoding;
+      FTC_OldCMapIdRec  id;
+
+    } u;
+
+  } FTC_OldCMapDescRec, *FTC_OldCMapDesc;
+
+#endif /* FT_CONFIG_OLD_INTERNALS */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Each FTC_CMapNode contains a simple array to map a range of character */
+  /* codes to equivalent glyph indices.                                    */
+  /*                                                                       */
+  /* For now, the implementation is very basic: Each node maps a range of  */
+  /* 128 consecutive character codes to their corresponding glyph indices. */
+  /*                                                                       */
+  /* We could do more complex things, but I don't think it is really very  */
+  /* useful.                                                               */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /* number of glyph indices / character code per node */
+#define FTC_CMAP_INDICES_MAX  128
+
+  /* compute a query/node hash */
+#define FTC_CMAP_HASH( faceid, index, charcode )         \
+          ( _FTC_FACE_ID_HASH( faceid ) + 211 * (index) + \
+            ( (charcode) / FTC_CMAP_INDICES_MAX )      )
+
+  /* the charmap query */
+  typedef struct  FTC_CMapQueryRec_
+  {
+    FTC_FaceID  face_id;
+    FT_UInt     cmap_index;
+    FT_UInt32   char_code;
+
+  } FTC_CMapQueryRec, *FTC_CMapQuery;
+
+#define FTC_CMAP_QUERY( x )  ((FTC_CMapQuery)(x))
+#define FTC_CMAP_QUERY_HASH( x )                                         \
+          FTC_CMAP_HASH( (x)->face_id, (x)->cmap_index, (x)->char_code )
+
+  /* the cmap cache node */
+  typedef struct  FTC_CMapNodeRec_
+  {
+    FTC_NodeRec  node;
+    FTC_FaceID   face_id;
+    FT_UInt      cmap_index;
+    FT_UInt32    first;                         /* first character in node */
+    FT_UInt16    indices[FTC_CMAP_INDICES_MAX]; /* array of glyph indices  */
+
+  } FTC_CMapNodeRec, *FTC_CMapNode;
+
+#define FTC_CMAP_NODE( x ) ( (FTC_CMapNode)( x ) )
+#define FTC_CMAP_NODE_HASH( x )                                      \
+          FTC_CMAP_HASH( (x)->face_id, (x)->cmap_index, (x)->first )
+
+  /* if (indices[n] == FTC_CMAP_UNKNOWN), we assume that the corresponding */
+  /* glyph indices haven't been queried through FT_Get_Glyph_Index() yet   */
+#define FTC_CMAP_UNKNOWN  ( (FT_UInt16)-1 )
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                        CHARMAP NODES                          *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  FT_CALLBACK_DEF( void )
+  ftc_cmap_node_free( FTC_Node   ftcnode,
+                      FTC_Cache  cache )
+  {
+    FTC_CMapNode  node   = (FTC_CMapNode)ftcnode;
+    FT_Memory     memory = cache->memory;
+
+
+    FT_FREE( node );
+  }
+
+
+  /* initialize a new cmap node */
+  FT_CALLBACK_DEF( FT_Error )
+  ftc_cmap_node_new( FTC_Node   *ftcanode,
+                     FT_Pointer  ftcquery,
+                     FTC_Cache   cache )
+  {
+    FTC_CMapNode  *anode  = (FTC_CMapNode*)ftcanode;
+    FTC_CMapQuery  query  = (FTC_CMapQuery)ftcquery;
+    FT_Error       error;
+    FT_Memory      memory = cache->memory;
+    FTC_CMapNode   node   = NULL;
+    FT_UInt        nn;
+
+
+    if ( !FT_NEW( node ) )
+    {
+      node->face_id    = query->face_id;
+      node->cmap_index = query->cmap_index;
+      node->first      = (query->char_code / FTC_CMAP_INDICES_MAX) *
+                         FTC_CMAP_INDICES_MAX;
+
+      for ( nn = 0; nn < FTC_CMAP_INDICES_MAX; nn++ )
+        node->indices[nn] = FTC_CMAP_UNKNOWN;
+    }
+
+    *anode = node;
+    return error;
+  }
+
+
+  /* compute the weight of a given cmap node */
+  FT_CALLBACK_DEF( FT_Offset )
+  ftc_cmap_node_weight( FTC_Node   cnode,
+                        FTC_Cache  cache )
+  {
+    FT_UNUSED( cnode );
+    FT_UNUSED( cache );
+
+    return sizeof ( *cnode );
+  }
+
+
+  /* compare a cmap node to a given query */
+  FT_CALLBACK_DEF( FT_Bool )
+  ftc_cmap_node_compare( FTC_Node    ftcnode,
+                         FT_Pointer  ftcquery,
+                         FTC_Cache   cache,
+                         FT_Bool*    list_changed )
+  {
+    FTC_CMapNode   node  = (FTC_CMapNode)ftcnode;
+    FTC_CMapQuery  query = (FTC_CMapQuery)ftcquery;
+    FT_UNUSED( cache );
+
+
+    if ( list_changed )
+      *list_changed = FALSE;
+    if ( node->face_id    == query->face_id    &&
+         node->cmap_index == query->cmap_index )
+    {
+      FT_UInt32  offset = (FT_UInt32)( query->char_code - node->first );
+
+
+      return FT_BOOL( offset < FTC_CMAP_INDICES_MAX );
+    }
+
+    return 0;
+  }
+
+
+  FT_CALLBACK_DEF( FT_Bool )
+  ftc_cmap_node_remove_faceid( FTC_Node    ftcnode,
+                               FT_Pointer  ftcface_id,
+                               FTC_Cache   cache,
+                               FT_Bool*    list_changed )
+  {
+    FTC_CMapNode  node    = (FTC_CMapNode)ftcnode;
+    FTC_FaceID    face_id = (FTC_FaceID)ftcface_id;
+    FT_UNUSED( cache );
+
+
+    if ( list_changed )
+      *list_changed = FALSE;
+    return FT_BOOL( node->face_id == face_id );
+  }
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                    GLYPH IMAGE CACHE                          *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  FT_CALLBACK_TABLE_DEF
+  const FTC_CacheClassRec  ftc_cmap_cache_class =
+  {
+    ftc_cmap_node_new,
+    ftc_cmap_node_weight,
+    ftc_cmap_node_compare,
+    ftc_cmap_node_remove_faceid,
+    ftc_cmap_node_free,
+
+    sizeof ( FTC_CacheRec ),
+    ftc_cache_init,
+    ftc_cache_done,
+  };
+
+
+  /* documentation is in ftcache.h */
+
+  FT_EXPORT_DEF( FT_Error )
+  FTC_CMapCache_New( FTC_Manager     manager,
+                     FTC_CMapCache  *acache )
+  {
+    return FTC_Manager_RegisterCache( manager,
+                                      &ftc_cmap_cache_class,
+                                      FTC_CACHE_P( acache ) );
+  }
+
+
+#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
+
+  /*
+   *  Unfortunately, it is not possible to support binary backwards
+   *  compatibility in the cmap cache.  The FTC_CMapCache_Lookup signature
+   *  changes were too deep, and there is no clever hackish way to detect
+   *  what kind of structure we are being passed.
+   *
+   *  On the other hand it seems that no production code is using this
+   *  function on Unix distributions.
+   */
+
+#endif
+
+
+  /* documentation is in ftcache.h */
+
+  FT_EXPORT_DEF( FT_UInt )
+  FTC_CMapCache_Lookup( FTC_CMapCache  cmap_cache,
+                        FTC_FaceID     face_id,
+                        FT_Int         cmap_index,
+                        FT_UInt32      char_code )
+  {
+    FTC_Cache         cache = FTC_CACHE( cmap_cache );
+    FTC_CMapQueryRec  query;
+    FTC_Node          node;
+    FT_Error          error;
+    FT_UInt           gindex = 0;
+    FT_PtrDist        hash;
+    FT_Int            no_cmap_change = 0;
+
+
+    if ( cmap_index < 0 )
+    {
+      /* Treat a negative cmap index as a special value, meaning that you */
+      /* don't want to change the FT_Face's character map through this    */
+      /* call.  This can be useful if the face requester callback already */
+      /* sets the face's charmap to the appropriate value.                */
+
+      no_cmap_change = 1;
+      cmap_index     = 0;
+    }
+
+    if ( !cache )
+    {
+      FT_TRACE0(( "FTC_CMapCache_Lookup: bad arguments, returning 0\n" ));
+      return 0;
+    }
+
+#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
+
+    /*
+     * If cmap_index is greater than the maximum number of cachable
+     * charmaps, we assume the request is from a legacy rogue client 
+     * using old internal header. See include/config/ftoption.h.
+     */
+    if ( cmap_index > FT_MAX_CHARMAP_CACHEABLE && !no_cmap_change )
+    {
+      FTC_OldCMapDesc  desc = (FTC_OldCMapDesc) face_id;
+
+
+      char_code     = (FT_UInt32)cmap_index;
+      query.face_id = desc->face_id;
+
+
+      switch ( desc->type )
+      {
+      case FTC_OLD_CMAP_BY_INDEX:
+        query.cmap_index = desc->u.index;
+        query.char_code  = (FT_UInt32)cmap_index;
+        break;
+
+      case FTC_OLD_CMAP_BY_ENCODING:
+        {
+          FT_Face  face;
+
+
+          error = FTC_Manager_LookupFace( cache->manager, desc->face_id,
+                                          &face );
+          if ( error )
+            return 0;
+
+          FT_Select_Charmap( face, desc->u.encoding );
+
+          return FT_Get_Char_Index( face, char_code );
+        }
+
+      default:
+        return 0;
+      }
+    }
+    else
+
+#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
+
+    {
+      query.face_id    = face_id;
+      query.cmap_index = (FT_UInt)cmap_index;
+      query.char_code  = char_code;
+    }
+
+    hash = FTC_CMAP_HASH( face_id, cmap_index, char_code );
+
+#if 1
+    FTC_CACHE_LOOKUP_CMP( cache, ftc_cmap_node_compare, hash, &query,
+                          node, error );
+#else
+    error = FTC_Cache_Lookup( cache, hash, &query, &node );
+#endif
+    if ( error )
+      goto Exit;
+
+    FT_ASSERT( (FT_UInt)( char_code - FTC_CMAP_NODE( node )->first ) <
+                FTC_CMAP_INDICES_MAX );
+
+    /* something rotten can happen with rogue clients */
+    if ( (FT_UInt)( char_code - FTC_CMAP_NODE( node )->first >=
+                    FTC_CMAP_INDICES_MAX ) )
+      return 0; /* XXX: should return appropriate error */
+
+    gindex = FTC_CMAP_NODE( node )->indices[char_code -
+                                            FTC_CMAP_NODE( node )->first];
+    if ( gindex == FTC_CMAP_UNKNOWN )
+    {
+      FT_Face  face;
+
+
+      gindex = 0;
+
+      error = FTC_Manager_LookupFace( cache->manager,
+                                      FTC_CMAP_NODE( node )->face_id,
+                                      &face );
+      if ( error )
+        goto Exit;
+
+#ifdef FT_MAX_CHARMAP_CACHEABLE
+      /* something rotten can happen with rogue clients */
+      if ( cmap_index > FT_MAX_CHARMAP_CACHEABLE )
+        return 0; /* XXX: should return appropriate error */
+#endif
+
+      if ( (FT_UInt)cmap_index < (FT_UInt)face->num_charmaps )
+      {
+        FT_CharMap  old, cmap  = NULL;
+
+
+        old  = face->charmap;
+        cmap = face->charmaps[cmap_index];
+
+        if ( old != cmap && !no_cmap_change )
+          FT_Set_Charmap( face, cmap );
+
+        gindex = FT_Get_Char_Index( face, char_code );
+
+        if ( old != cmap && !no_cmap_change )
+          FT_Set_Charmap( face, old );
+      }
+
+      FTC_CMAP_NODE( node )->indices[char_code -
+                                     FTC_CMAP_NODE( node )->first]
+        = (FT_UShort)gindex;
+    }
+
+  Exit:
+    return gindex;
+  }
+
+
+/* END */
diff --git a/src/cache/ftcglyph.c b/src/cache/ftcglyph.c
new file mode 100644
index 0000000..441e177
--- /dev/null
+++ b/src/cache/ftcglyph.c
@@ -0,0 +1,219 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftcglyph.c                                                             */
+/*                                                                         */
+/*    FreeType Glyph Image (FT_Glyph) cache (body).                        */
+/*                                                                         */
+/*  Copyright 2000-2001, 2003, 2004, 2006, 2009, 2011 by                   */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#include <ft2build.h>
+#include FT_INTERNAL_OBJECTS_H
+#include FT_CACHE_H
+#include "ftcglyph.h"
+#include FT_ERRORS_H
+
+#include "ftccback.h"
+#include "ftcerror.h"
+
+
+  /* create a new chunk node, setting its cache index and ref count */
+  FT_LOCAL_DEF( void )
+  FTC_GNode_Init( FTC_GNode   gnode,
+                  FT_UInt     gindex,
+                  FTC_Family  family )
+  {
+    gnode->family = family;
+    gnode->gindex = gindex;
+    family->num_nodes++;
+  }
+
+
+  FT_LOCAL_DEF( void )
+  FTC_GNode_UnselectFamily( FTC_GNode  gnode,
+                            FTC_Cache  cache )
+  {
+    FTC_Family  family = gnode->family;
+
+
+    gnode->family = NULL;
+    if ( family && --family->num_nodes == 0 )
+      FTC_FAMILY_FREE( family, cache );
+  }
+
+
+  FT_LOCAL_DEF( void )
+  FTC_GNode_Done( FTC_GNode  gnode,
+                  FTC_Cache  cache )
+  {
+    /* finalize the node */
+    gnode->gindex = 0;
+
+    FTC_GNode_UnselectFamily( gnode, cache );
+  }
+
+
+  FT_LOCAL_DEF( FT_Bool )
+  ftc_gnode_compare( FTC_Node    ftcgnode,
+                     FT_Pointer  ftcgquery,
+                     FTC_Cache   cache,
+                     FT_Bool*    list_changed )
+  {
+    FTC_GNode   gnode  = (FTC_GNode)ftcgnode;
+    FTC_GQuery  gquery = (FTC_GQuery)ftcgquery;
+    FT_UNUSED( cache );
+
+
+    if ( list_changed )
+      *list_changed = FALSE;
+    return FT_BOOL( gnode->family == gquery->family &&
+                    gnode->gindex == gquery->gindex );
+  }
+
+
+#ifdef FTC_INLINE
+
+  FT_LOCAL_DEF( FT_Bool )
+  FTC_GNode_Compare( FTC_GNode   gnode,
+                     FTC_GQuery  gquery,
+                     FTC_Cache   cache,
+                     FT_Bool*    list_changed )
+  {
+    return ftc_gnode_compare( FTC_NODE( gnode ), gquery,
+                              cache, list_changed );
+  }
+
+#endif
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                      CHUNK SETS                               *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+  FT_LOCAL_DEF( void )
+  FTC_Family_Init( FTC_Family  family,
+                   FTC_Cache   cache )
+  {
+    FTC_GCacheClass  clazz = FTC_CACHE__GCACHE_CLASS( cache );
+
+
+    family->clazz     = clazz->family_class;
+    family->num_nodes = 0;
+    family->cache     = cache;
+  }
+
+
+  FT_LOCAL_DEF( FT_Error )
+  ftc_gcache_init( FTC_Cache  ftccache )
+  {
+    FTC_GCache  cache = (FTC_GCache)ftccache;
+    FT_Error    error;
+
+
+    error = FTC_Cache_Init( FTC_CACHE( cache ) );
+    if ( !error )
+    {
+      FTC_GCacheClass   clazz = (FTC_GCacheClass)FTC_CACHE( cache )->org_class;
+
+      FTC_MruList_Init( &cache->families,
+                        clazz->family_class,
+                        0,  /* no maximum here! */
+                        cache,
+                        FTC_CACHE( cache )->memory );
+    }
+
+    return error;
+  }
+
+
+#if 0
+
+  FT_LOCAL_DEF( FT_Error )
+  FTC_GCache_Init( FTC_GCache  cache )
+  {
+    return ftc_gcache_init( FTC_CACHE( cache ) );
+  }
+
+#endif /* 0 */
+
+
+  FT_LOCAL_DEF( void )
+  ftc_gcache_done( FTC_Cache  ftccache )
+  {
+    FTC_GCache  cache = (FTC_GCache)ftccache;
+
+
+    FTC_Cache_Done( (FTC_Cache)cache );
+    FTC_MruList_Done( &cache->families );
+  }
+
+
+#if 0
+
+  FT_LOCAL_DEF( void )
+  FTC_GCache_Done( FTC_GCache  cache )
+  {
+    ftc_gcache_done( FTC_CACHE( cache ) );
+  }
+
+#endif /* 0 */
+
+
+  FT_LOCAL_DEF( FT_Error )
+  FTC_GCache_New( FTC_Manager       manager,
+                  FTC_GCacheClass   clazz,
+                  FTC_GCache       *acache )
+  {
+    return FTC_Manager_RegisterCache( manager, (FTC_CacheClass)clazz,
+                                      (FTC_Cache*)acache );
+  }
+
+
+#ifndef FTC_INLINE
+
+  FT_LOCAL_DEF( FT_Error )
+  FTC_GCache_Lookup( FTC_GCache   cache,
+                     FT_PtrDist   hash,
+                     FT_UInt      gindex,
+                     FTC_GQuery   query,
+                     FTC_Node    *anode )
+  {
+    FT_Error  error;
+
+
+    query->gindex = gindex;
+
+    FTC_MRULIST_LOOKUP( &cache->families, query, query->family, error );
+    if ( !error )
+    {
+      FTC_Family  family = query->family;
+
+
+      /* prevent the family from being destroyed too early when an        */
+      /* out-of-memory condition occurs during glyph node initialization. */
+      family->num_nodes++;
+
+      error = FTC_Cache_Lookup( FTC_CACHE( cache ), hash, query, anode );
+
+      if ( --family->num_nodes == 0 )
+        FTC_FAMILY_FREE( family, cache );
+    }
+    return error;
+  }
+
+#endif /* !FTC_INLINE */
+
+
+/* END */
diff --git a/src/cache/ftcglyph.h b/src/cache/ftcglyph.h
new file mode 100644
index 0000000..5fed19c
--- /dev/null
+++ b/src/cache/ftcglyph.h
@@ -0,0 +1,329 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftcglyph.h                                                             */
+/*                                                                         */
+/*    FreeType abstract glyph cache (specification).                       */
+/*                                                                         */
+/*  Copyright 2000-2001, 2003, 2004, 2006, 2007, 2011 by                   */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+  /*
+   *
+   *  FTC_GCache is an _abstract_ cache object optimized to store glyph
+   *  data.  It works as follows:
+   *
+   *   - It manages FTC_GNode objects. Each one of them can hold one or more
+   *     glyph `items'.  Item types are not specified in the FTC_GCache but
+   *     in classes that extend it.
+   *
+   *   - Glyph attributes, like face ID, character size, render mode, etc.,
+   *     can be grouped into abstract `glyph families'.  This avoids storing
+   *     the attributes within the FTC_GCache, since it is likely that many
+   *     FTC_GNodes will belong to the same family in typical uses.
+   *
+   *   - Each FTC_GNode is thus an FTC_Node with two additional fields:
+   *
+   *       * gindex: A glyph index, or the first index in a glyph range.
+   *       * family: A pointer to a glyph `family'.
+   *
+   *   - Family types are not fully specific in the FTC_Family type, but
+   *     by classes that extend it.
+   *
+   *  Note that both FTC_ImageCache and FTC_SBitCache extend FTC_GCache.
+   *  They share an FTC_Family sub-class called FTC_BasicFamily which is
+   *  used to store the following data: face ID, pixel/point sizes, load
+   *  flags.  For more details see the file `src/cache/ftcbasic.c'.
+   *
+   *  Client applications can extend FTC_GNode with their own FTC_GNode
+   *  and FTC_Family sub-classes to implement more complex caches (e.g.,
+   *  handling automatic synthesis, like obliquing & emboldening, colored
+   *  glyphs, etc.).
+   *
+   *  See also the FTC_ICache & FTC_SCache classes in `ftcimage.h' and
+   *  `ftcsbits.h', which both extend FTC_GCache with additional
+   *  optimizations.
+   *
+   *  A typical FTC_GCache implementation must provide at least the
+   *  following:
+   *
+   *  - FTC_GNode sub-class, e.g. MyNode, with relevant methods:
+   *        my_node_new            (must call FTC_GNode_Init)
+   *        my_node_free           (must call FTC_GNode_Done)
+   *        my_node_compare        (must call FTC_GNode_Compare)
+   *        my_node_remove_faceid  (must call ftc_gnode_unselect in case
+   *                                of match)
+   *
+   *  - FTC_Family sub-class, e.g. MyFamily, with relevant methods:
+   *        my_family_compare
+   *        my_family_init
+   *        my_family_reset (optional)
+   *        my_family_done
+   *
+   *  - FTC_GQuery sub-class, e.g. MyQuery, to hold cache-specific query
+   *    data.
+   *
+   *  - Constant structures for a FTC_GNodeClass.
+   *
+   *  - MyCacheNew() can be implemented easily as a call to the convenience
+   *    function FTC_GCache_New.
+   *
+   *  - MyCacheLookup with a call to FTC_GCache_Lookup.  This function will
+   *    automatically:
+   *
+   *    - Search for the corresponding family in the cache, or create
+   *      a new one if necessary.  Put it in FTC_GQUERY(myquery).family
+   *
+   *    - Call FTC_Cache_Lookup.
+   *
+   *    If it returns NULL, you should create a new node, then call
+   *    ftc_cache_add as usual.
+   */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Important: The functions defined in this file are only used to        */
+  /*            implement an abstract glyph cache class.  You need to      */
+  /*            provide additional logic to implement a complete cache.    */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*********                                                       *********/
+  /*********             WARNING, THIS IS BETA CODE.               *********/
+  /*********                                                       *********/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+#ifndef __FTCGLYPH_H__
+#define __FTCGLYPH_H__
+
+
+#include <ft2build.h>
+#include "ftcmanag.h"
+
+
+FT_BEGIN_HEADER
+
+
+ /*
+  *  We can group glyphs into `families'.  Each family correspond to a
+  *  given face ID, character size, transform, etc.
+  *
+  *  Families are implemented as MRU list nodes.  They are
+  *  reference-counted.
+  */
+
+  typedef struct  FTC_FamilyRec_
+  {
+    FTC_MruNodeRec    mrunode;
+    FT_UInt           num_nodes; /* current number of nodes in this family */
+    FTC_Cache         cache;
+    FTC_MruListClass  clazz;
+
+  } FTC_FamilyRec, *FTC_Family;
+
+#define  FTC_FAMILY(x)    ( (FTC_Family)(x) )
+#define  FTC_FAMILY_P(x)  ( (FTC_Family*)(x) )
+
+
+  typedef struct  FTC_GNodeRec_
+  {
+    FTC_NodeRec      node;
+    FTC_Family       family;
+    FT_UInt          gindex;
+
+  } FTC_GNodeRec, *FTC_GNode;
+
+#define FTC_GNODE( x )    ( (FTC_GNode)(x) )
+#define FTC_GNODE_P( x )  ( (FTC_GNode*)(x) )
+
+
+  typedef struct  FTC_GQueryRec_
+  {
+    FT_UInt      gindex;
+    FTC_Family   family;
+
+  } FTC_GQueryRec, *FTC_GQuery;
+
+#define FTC_GQUERY( x )  ( (FTC_GQuery)(x) )
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* These functions are exported so that they can be called from          */
+  /* user-provided cache classes; otherwise, they are really part of the   */
+  /* cache sub-system internals.                                           */
+  /*                                                                       */
+
+  /* must be called by derived FTC_Node_InitFunc routines */
+  FT_LOCAL( void )
+  FTC_GNode_Init( FTC_GNode   node,
+                  FT_UInt     gindex,  /* glyph index for node */
+                  FTC_Family  family );
+
+#ifdef FTC_INLINE
+
+  /* returns TRUE iff the query's glyph index correspond to the node;  */
+  /* this assumes that the `family' and `hash' fields of the query are */
+  /* already correctly set                                             */
+  FT_LOCAL( FT_Bool )
+  FTC_GNode_Compare( FTC_GNode   gnode,
+                     FTC_GQuery  gquery,
+                     FTC_Cache   cache,
+                     FT_Bool*    list_changed );
+
+#endif
+
+  /* call this function to clear a node's family -- this is necessary */
+  /* to implement the `node_remove_faceid' cache method correctly     */
+  FT_LOCAL( void )
+  FTC_GNode_UnselectFamily( FTC_GNode  gnode,
+                            FTC_Cache  cache );
+
+  /* must be called by derived FTC_Node_DoneFunc routines */
+  FT_LOCAL( void )
+  FTC_GNode_Done( FTC_GNode  node,
+                  FTC_Cache  cache );
+
+
+  FT_LOCAL( void )
+  FTC_Family_Init( FTC_Family  family,
+                   FTC_Cache   cache );
+
+  typedef struct FTC_GCacheRec_
+  {
+    FTC_CacheRec    cache;
+    FTC_MruListRec  families;
+
+  } FTC_GCacheRec, *FTC_GCache;
+
+#define FTC_GCACHE( x )  ((FTC_GCache)(x))
+
+
+#if 0
+  /* can be used as @FTC_Cache_InitFunc */
+  FT_LOCAL( FT_Error )
+  FTC_GCache_Init( FTC_GCache  cache );
+#endif
+
+
+#if 0
+  /* can be used as @FTC_Cache_DoneFunc */
+  FT_LOCAL( void )
+  FTC_GCache_Done( FTC_GCache  cache );
+#endif
+
+
+  /* the glyph cache class adds fields for the family implementation */
+  typedef struct  FTC_GCacheClassRec_
+  {
+    FTC_CacheClassRec  clazz;
+    FTC_MruListClass   family_class;
+
+  } FTC_GCacheClassRec;
+
+  typedef const FTC_GCacheClassRec*   FTC_GCacheClass;
+
+#define FTC_GCACHE_CLASS( x )  ((FTC_GCacheClass)(x))
+
+#define FTC_CACHE__GCACHE_CLASS( x ) \
+          FTC_GCACHE_CLASS( FTC_CACHE(x)->org_class )
+#define FTC_CACHE__FAMILY_CLASS( x ) \
+          ( (FTC_MruListClass)FTC_CACHE__GCACHE_CLASS( x )->family_class )
+
+
+  /* convenience function; use it instead of FTC_Manager_Register_Cache */
+  FT_LOCAL( FT_Error )
+  FTC_GCache_New( FTC_Manager       manager,
+                  FTC_GCacheClass   clazz,
+                  FTC_GCache       *acache );
+
+#ifndef FTC_INLINE
+  FT_LOCAL( FT_Error )
+  FTC_GCache_Lookup( FTC_GCache   cache,
+                     FT_PtrDist   hash,
+                     FT_UInt      gindex,
+                     FTC_GQuery   query,
+                     FTC_Node    *anode );
+#endif
+
+
+  /* */
+
+
+#define FTC_FAMILY_FREE( family, cache )                      \
+          FTC_MruList_Remove( &FTC_GCACHE((cache))->families, \
+                              (FTC_MruNode)(family) )
+
+
+#ifdef FTC_INLINE
+
+#define FTC_GCACHE_LOOKUP_CMP( cache, famcmp, nodecmp, hash,                \
+                               gindex, query, node, error )                 \
+  FT_BEGIN_STMNT                                                            \
+    FTC_GCache               _gcache   = FTC_GCACHE( cache );               \
+    FTC_GQuery               _gquery   = (FTC_GQuery)( query );             \
+    FTC_MruNode_CompareFunc  _fcompare = (FTC_MruNode_CompareFunc)(famcmp); \
+    FTC_MruNode              _mrunode;                                      \
+                                                                            \
+                                                                            \
+    _gquery->gindex = (gindex);                                             \
+                                                                            \
+    FTC_MRULIST_LOOKUP_CMP( &_gcache->families, _gquery, _fcompare,         \
+                            _mrunode, error );                              \
+    _gquery->family = FTC_FAMILY( _mrunode );                               \
+    if ( !error )                                                           \
+    {                                                                       \
+      FTC_Family  _gqfamily = _gquery->family;                              \
+                                                                            \
+                                                                            \
+      _gqfamily->num_nodes++;                                               \
+                                                                            \
+      FTC_CACHE_LOOKUP_CMP( cache, nodecmp, hash, query, node, error );     \
+                                                                            \
+      if ( --_gqfamily->num_nodes == 0 )                                    \
+        FTC_FAMILY_FREE( _gqfamily, _gcache );                              \
+    }                                                                       \
+  FT_END_STMNT
+  /* */
+
+#else /* !FTC_INLINE */
+
+#define FTC_GCACHE_LOOKUP_CMP( cache, famcmp, nodecmp, hash,          \
+                               gindex, query, node, error )           \
+   FT_BEGIN_STMNT                                                     \
+                                                                      \
+     error = FTC_GCache_Lookup( FTC_GCACHE( cache ), hash, gindex,    \
+                                FTC_GQUERY( query ), &node );         \
+                                                                      \
+   FT_END_STMNT
+
+#endif /* !FTC_INLINE */
+
+
+FT_END_HEADER
+
+
+#endif /* __FTCGLYPH_H__ */
+
+
+/* END */
diff --git a/src/cache/ftcmanag.h b/src/cache/ftcmanag.h
new file mode 100644
index 0000000..d6c8516
--- /dev/null
+++ b/src/cache/ftcmanag.h
@@ -0,0 +1,175 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftcmanag.h                                                             */
+/*                                                                         */
+/*    FreeType Cache Manager (specification).                              */
+/*                                                                         */
+/*  Copyright 2000-2001, 2003, 2004, 2006, 2010 by                         */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* A cache manager is in charge of the following:                        */
+  /*                                                                       */
+  /*  - Maintain a mapping between generic FTC_FaceIDs and live FT_Face    */
+  /*    objects.  The mapping itself is performed through a user-provided  */
+  /*    callback.  However, the manager maintains a small cache of FT_Face */
+  /*    and FT_Size objects in order to speed up things considerably.      */
+  /*                                                                       */
+  /*  - Manage one or more cache objects.  Each cache is in charge of      */
+  /*    holding a varying number of `cache nodes'.  Each cache node        */
+  /*    represents a minimal amount of individually accessible cached      */
+  /*    data.  For example, a cache node can be an FT_Glyph image          */
+  /*    containing a vector outline, or some glyph metrics, or anything    */
+  /*    else.                                                              */
+  /*                                                                       */
+  /*    Each cache node has a certain size in bytes that is added to the   */
+  /*    total amount of `cache memory' within the manager.                 */
+  /*                                                                       */
+  /*    All cache nodes are located in a global LRU list, where the oldest */
+  /*    node is at the tail of the list.                                   */
+  /*                                                                       */
+  /*    Each node belongs to a single cache, and includes a reference      */
+  /*    count to avoid destroying it (due to caching).                     */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*********                                                       *********/
+  /*********             WARNING, THIS IS BETA CODE.               *********/
+  /*********                                                       *********/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+#ifndef __FTCMANAG_H__
+#define __FTCMANAG_H__
+
+
+#include <ft2build.h>
+#include FT_CACHE_H
+#include "ftcmru.h"
+#include "ftccache.h"
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    cache_subsystem                                                    */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+#define FTC_MAX_FACES_DEFAULT  2
+#define FTC_MAX_SIZES_DEFAULT  4
+#define FTC_MAX_BYTES_DEFAULT  200000L  /* ~200kByte by default */
+
+  /* maximum number of caches registered in a single manager */
+#define FTC_MAX_CACHES         16
+
+
+  typedef struct  FTC_ManagerRec_
+  {
+    FT_Library          library;
+    FT_Memory           memory;
+
+    FTC_Node            nodes_list;
+    FT_ULong            max_weight;
+    FT_ULong            cur_weight;
+    FT_UInt             num_nodes;
+
+    FTC_Cache           caches[FTC_MAX_CACHES];
+    FT_UInt             num_caches;
+
+    FTC_MruListRec      faces;
+    FTC_MruListRec      sizes;
+
+    FT_Pointer          request_data;
+    FTC_Face_Requester  request_face;
+
+  } FTC_ManagerRec;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FTC_Manager_Compress                                               */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This function is used to check the state of the cache manager if   */
+  /*    its `num_bytes' field is greater than its `max_bytes' field.  It   */
+  /*    will flush as many old cache nodes as possible (ignoring cache     */
+  /*    nodes with a non-zero reference count).                            */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    manager :: A handle to the cache manager.                          */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    Client applications should not call this function directly.  It is */
+  /*    normally invoked by specific cache implementations.                */
+  /*                                                                       */
+  /*    The reason this function is exported is to allow client-specific   */
+  /*    cache classes.                                                     */
+  /*                                                                       */
+  FT_LOCAL( void )
+  FTC_Manager_Compress( FTC_Manager  manager );
+
+
+  /* try to flush `count' old nodes from the cache; return the number
+   * of really flushed nodes
+   */
+  FT_LOCAL( FT_UInt )
+  FTC_Manager_FlushN( FTC_Manager  manager,
+                      FT_UInt      count );
+
+
+  /* this must be used internally for the moment */
+  FT_LOCAL( FT_Error )
+  FTC_Manager_RegisterCache( FTC_Manager      manager,
+                             FTC_CacheClass   clazz,
+                             FTC_Cache       *acache );
+
+ /* */
+
+#define FTC_SCALER_COMPARE( a, b )                \
+    ( (a)->face_id      == (b)->face_id      &&   \
+      (a)->width        == (b)->width        &&   \
+      (a)->height       == (b)->height       &&   \
+      ((a)->pixel != 0) == ((b)->pixel != 0) &&   \
+      ( (a)->pixel ||                             \
+        ( (a)->x_res == (b)->x_res &&             \
+          (a)->y_res == (b)->y_res ) ) )
+
+#define FTC_SCALER_HASH( q )                                 \
+    ( _FTC_FACE_ID_HASH( (q)->face_id ) +                     \
+      (q)->width + (q)->height*7 +                           \
+      ( (q)->pixel ? 0 : ( (q)->x_res*33 ^ (q)->y_res*61 ) ) )
+
+ /* */
+
+FT_END_HEADER
+
+#endif /* __FTCMANAG_H__ */
+
+
+/* END */
diff --git a/src/cache/ftcmru.c b/src/cache/ftcmru.c
new file mode 100644
index 0000000..dc8b4cc
--- /dev/null
+++ b/src/cache/ftcmru.c
@@ -0,0 +1,357 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftcmru.c                                                               */
+/*                                                                         */
+/*    FreeType MRU support (body).                                         */
+/*                                                                         */
+/*  Copyright 2003, 2004, 2006, 2009 by                                    */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#include <ft2build.h>
+#include FT_CACHE_H
+#include "ftcmru.h"
+#include FT_INTERNAL_OBJECTS_H
+#include FT_INTERNAL_DEBUG_H
+
+#include "ftcerror.h"
+
+
+  FT_LOCAL_DEF( void )
+  FTC_MruNode_Prepend( FTC_MruNode  *plist,
+                       FTC_MruNode   node )
+  {
+    FTC_MruNode  first = *plist;
+
+
+    if ( first )
+    {
+      FTC_MruNode  last = first->prev;
+
+
+#ifdef FT_DEBUG_ERROR
+      {
+        FTC_MruNode  cnode = first;
+
+
+        do
+        {
+          if ( cnode == node )
+          {
+            fprintf( stderr, "FTC_MruNode_Prepend: invalid action\n" );
+            exit( 2 );
+          }
+          cnode = cnode->next;
+
+        } while ( cnode != first );
+      }
+#endif
+
+      first->prev = node;
+      last->next  = node;
+      node->next  = first;
+      node->prev  = last;
+    }
+    else
+    {
+      node->next = node;
+      node->prev = node;
+    }
+    *plist = node;
+  }
+
+
+  FT_LOCAL_DEF( void )
+  FTC_MruNode_Up( FTC_MruNode  *plist,
+                  FTC_MruNode   node )
+  {
+    FTC_MruNode  first = *plist;
+
+
+    FT_ASSERT( first != NULL );
+
+    if ( first != node )
+    {
+      FTC_MruNode  prev, next, last;
+
+
+#ifdef FT_DEBUG_ERROR
+      {
+        FTC_MruNode  cnode = first;
+        do
+        {
+          if ( cnode == node )
+            goto Ok;
+          cnode = cnode->next;
+
+        } while ( cnode != first );
+
+        fprintf( stderr, "FTC_MruNode_Up: invalid action\n" );
+        exit( 2 );
+      Ok:
+      }
+#endif
+      prev = node->prev;
+      next = node->next;
+
+      prev->next = next;
+      next->prev = prev;
+
+      last = first->prev;
+
+      last->next  = node;
+      first->prev = node;
+
+      node->next = first;
+      node->prev = last;
+
+      *plist = node;
+    }
+  }
+
+
+  FT_LOCAL_DEF( void )
+  FTC_MruNode_Remove( FTC_MruNode  *plist,
+                      FTC_MruNode   node )
+  {
+    FTC_MruNode  first = *plist;
+    FTC_MruNode  prev, next;
+
+
+    FT_ASSERT( first != NULL );
+
+#ifdef FT_DEBUG_ERROR
+      {
+        FTC_MruNode  cnode = first;
+
+
+        do
+        {
+          if ( cnode == node )
+            goto Ok;
+          cnode = cnode->next;
+
+        } while ( cnode != first );
+
+        fprintf( stderr, "FTC_MruNode_Remove: invalid action\n" );
+        exit( 2 );
+      Ok:
+      }
+#endif
+
+    prev = node->prev;
+    next = node->next;
+
+    prev->next = next;
+    next->prev = prev;
+
+    if ( node == next )
+    {
+      FT_ASSERT( first == node );
+      FT_ASSERT( prev  == node );
+
+      *plist = NULL;
+    }
+    else if ( node == first )
+      *plist = next;
+  }
+
+
+  FT_LOCAL_DEF( void )
+  FTC_MruList_Init( FTC_MruList       list,
+                    FTC_MruListClass  clazz,
+                    FT_UInt           max_nodes,
+                    FT_Pointer        data,
+                    FT_Memory         memory )
+  {
+    list->num_nodes = 0;
+    list->max_nodes = max_nodes;
+    list->nodes     = NULL;
+    list->clazz     = *clazz;
+    list->data      = data;
+    list->memory    = memory;
+  }
+
+
+  FT_LOCAL_DEF( void )
+  FTC_MruList_Reset( FTC_MruList  list )
+  {
+    while ( list->nodes )
+      FTC_MruList_Remove( list, list->nodes );
+
+    FT_ASSERT( list->num_nodes == 0 );
+  }
+
+
+  FT_LOCAL_DEF( void )
+  FTC_MruList_Done( FTC_MruList  list )
+  {
+    FTC_MruList_Reset( list );
+  }
+
+
+#ifndef FTC_INLINE
+  FT_LOCAL_DEF( FTC_MruNode )
+  FTC_MruList_Find( FTC_MruList  list,
+                    FT_Pointer   key )
+  {
+    FTC_MruNode_CompareFunc  compare = list->clazz.node_compare;
+    FTC_MruNode              first, node;
+
+
+    first = list->nodes;
+    node  = NULL;
+
+    if ( first )
+    {
+      node = first;
+      do
+      {
+        if ( compare( node, key ) )
+        {
+          if ( node != first )
+            FTC_MruNode_Up( &list->nodes, node );
+
+          return node;
+        }
+
+        node = node->next;
+
+      } while ( node != first);
+    }
+
+    return NULL;
+  }
+#endif
+
+  FT_LOCAL_DEF( FT_Error )
+  FTC_MruList_New( FTC_MruList   list,
+                   FT_Pointer    key,
+                   FTC_MruNode  *anode )
+  {
+    FT_Error     error;
+    FTC_MruNode  node = NULL;
+    FT_Memory    memory = list->memory;
+
+
+    if ( list->num_nodes >= list->max_nodes && list->max_nodes > 0 )
+    {
+      node = list->nodes->prev;
+
+      FT_ASSERT( node );
+
+      if ( list->clazz.node_reset )
+      {
+        FTC_MruNode_Up( &list->nodes, node );
+
+        error = list->clazz.node_reset( node, key, list->data );
+        if ( !error )
+          goto Exit;
+      }
+
+      FTC_MruNode_Remove( &list->nodes, node );
+      list->num_nodes--;
+
+      if ( list->clazz.node_done )
+        list->clazz.node_done( node, list->data );
+    }
+    else if ( FT_ALLOC( node, list->clazz.node_size ) )
+      goto Exit;
+
+    error = list->clazz.node_init( node, key, list->data );
+    if ( error )
+      goto Fail;
+
+    FTC_MruNode_Prepend( &list->nodes, node );
+    list->num_nodes++;
+
+  Exit:
+    *anode = node;
+    return error;
+
+  Fail:
+    if ( list->clazz.node_done )
+      list->clazz.node_done( node, list->data );
+
+    FT_FREE( node );
+    goto Exit;
+  }
+
+
+#ifndef FTC_INLINE
+  FT_LOCAL_DEF( FT_Error )
+  FTC_MruList_Lookup( FTC_MruList   list,
+                      FT_Pointer    key,
+                      FTC_MruNode  *anode )
+  {
+    FTC_MruNode  node;
+
+
+    node = FTC_MruList_Find( list, key );
+    if ( node == NULL )
+      return FTC_MruList_New( list, key, anode );
+
+    *anode = node;
+    return 0;
+  }
+#endif /* FTC_INLINE */
+
+  FT_LOCAL_DEF( void )
+  FTC_MruList_Remove( FTC_MruList  list,
+                      FTC_MruNode  node )
+  {
+    FTC_MruNode_Remove( &list->nodes, node );
+    list->num_nodes--;
+
+    {
+      FT_Memory  memory = list->memory;
+
+
+      if ( list->clazz.node_done )
+        list->clazz.node_done( node, list->data );
+
+      FT_FREE( node );
+    }
+  }
+
+
+  FT_LOCAL_DEF( void )
+  FTC_MruList_RemoveSelection( FTC_MruList              list,
+                               FTC_MruNode_CompareFunc  selection,
+                               FT_Pointer               key )
+  {
+    FTC_MruNode  first, node, next;
+
+
+    first = list->nodes;
+    while ( first && ( selection == NULL || selection( first, key ) ) )
+    {
+      FTC_MruList_Remove( list, first );
+      first = list->nodes;
+    }
+
+    if ( first )
+    {
+      node = first->next;
+      while ( node != first )
+      {
+        next = node->next;
+
+        if ( selection( node, key ) )
+          FTC_MruList_Remove( list, node );
+
+        node = next;
+      }
+    }
+  }
+
+
+/* END */
diff --git a/src/cache/ftcsbits.c b/src/cache/ftcsbits.c
new file mode 100644
index 0000000..8bf8d60
--- /dev/null
+++ b/src/cache/ftcsbits.c
@@ -0,0 +1,421 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftcsbits.c                                                             */
+/*                                                                         */
+/*    FreeType sbits manager (body).                                       */
+/*                                                                         */
+/*  Copyright 2000-2001, 2002, 2003, 2004, 2005, 2006, 2009, 2010, 2011 by */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#include <ft2build.h>
+#include FT_CACHE_H
+#include "ftcsbits.h"
+#include FT_INTERNAL_OBJECTS_H
+#include FT_INTERNAL_DEBUG_H
+#include FT_ERRORS_H
+
+#include "ftccback.h"
+#include "ftcerror.h"
+
+#undef  FT_COMPONENT
+#define FT_COMPONENT  trace_cache
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                     SBIT CACHE NODES                          *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  static FT_Error
+  ftc_sbit_copy_bitmap( FTC_SBit    sbit,
+                        FT_Bitmap*  bitmap,
+                        FT_Memory   memory )
+  {
+    FT_Error  error;
+    FT_Int    pitch = bitmap->pitch;
+    FT_ULong  size;
+
+
+    if ( pitch < 0 )
+      pitch = -pitch;
+
+    size = (FT_ULong)( pitch * bitmap->rows );
+
+    if ( !FT_ALLOC( sbit->buffer, size ) )
+      FT_MEM_COPY( sbit->buffer, bitmap->buffer, size );
+
+    return error;
+  }
+
+
+  FT_LOCAL_DEF( void )
+  ftc_snode_free( FTC_Node   ftcsnode,
+                  FTC_Cache  cache )
+  {
+    FTC_SNode  snode  = (FTC_SNode)ftcsnode;
+    FTC_SBit   sbit   = snode->sbits;
+    FT_UInt    count  = snode->count;
+    FT_Memory  memory = cache->memory;
+
+
+    for ( ; count > 0; sbit++, count-- )
+      FT_FREE( sbit->buffer );
+
+    FTC_GNode_Done( FTC_GNODE( snode ), cache );
+
+    FT_FREE( snode );
+  }
+
+
+  FT_LOCAL_DEF( void )
+  FTC_SNode_Free( FTC_SNode  snode,
+                  FTC_Cache  cache )
+  {
+    ftc_snode_free( FTC_NODE( snode ), cache );
+  }
+
+
+  /*
+   *  This function tries to load a small bitmap within a given FTC_SNode.
+   *  Note that it returns a non-zero error code _only_ in the case of
+   *  out-of-memory condition.  For all other errors (e.g., corresponding
+   *  to a bad font file), this function will mark the sbit as `unavailable'
+   *  and return a value of 0.
+   *
+   *  You should also read the comment within the @ftc_snode_compare
+   *  function below to see how out-of-memory is handled during a lookup.
+   */
+  static FT_Error
+  ftc_snode_load( FTC_SNode    snode,
+                  FTC_Manager  manager,
+                  FT_UInt      gindex,
+                  FT_ULong    *asize )
+  {
+    FT_Error          error;
+    FTC_GNode         gnode  = FTC_GNODE( snode );
+    FTC_Family        family = gnode->family;
+    FT_Memory         memory = manager->memory;
+    FT_Face           face;
+    FTC_SBit          sbit;
+    FTC_SFamilyClass  clazz;
+
+
+    if ( (FT_UInt)(gindex - gnode->gindex) >= snode->count )
+    {
+      FT_ERROR(( "ftc_snode_load: invalid glyph index" ));
+      return FTC_Err_Invalid_Argument;
+    }
+
+    sbit  = snode->sbits + ( gindex - gnode->gindex );
+    clazz = (FTC_SFamilyClass)family->clazz;
+
+    sbit->buffer = 0;
+
+    error = clazz->family_load_glyph( family, gindex, manager, &face );
+    if ( error )
+      goto BadGlyph;
+
+    {
+      FT_Int        temp;
+      FT_GlyphSlot  slot   = face->glyph;
+      FT_Bitmap*    bitmap = &slot->bitmap;
+      FT_Pos        xadvance, yadvance; /* FT_GlyphSlot->advance.{x|y} */
+
+
+      if ( slot->format != FT_GLYPH_FORMAT_BITMAP )
+      {
+        FT_TRACE0(( "ftc_snode_load:"
+                    " glyph loaded didn't return a bitmap\n" ));
+        goto BadGlyph;
+      }
+
+      /* Check that our values fit into 8-bit containers!       */
+      /* If this is not the case, our bitmap is too large       */
+      /* and we will leave it as `missing' with sbit.buffer = 0 */
+
+#define CHECK_CHAR( d )  ( temp = (FT_Char)d, temp == d )
+#define CHECK_BYTE( d )  ( temp = (FT_Byte)d, temp == d )
+
+      /* horizontal advance in pixels */
+      xadvance = ( slot->advance.x + 32 ) >> 6;
+      yadvance = ( slot->advance.y + 32 ) >> 6;
+
+      if ( !CHECK_BYTE( bitmap->rows  )     ||
+           !CHECK_BYTE( bitmap->width )     ||
+           !CHECK_CHAR( bitmap->pitch )     ||
+           !CHECK_CHAR( slot->bitmap_left ) ||
+           !CHECK_CHAR( slot->bitmap_top  ) ||
+           !CHECK_CHAR( xadvance )          ||
+           !CHECK_CHAR( yadvance )          )
+      {
+        FT_TRACE2(( "ftc_snode_load:"
+                    " glyph too large for small bitmap cache\n"));
+        goto BadGlyph;
+      }
+
+      sbit->width     = (FT_Byte)bitmap->width;
+      sbit->height    = (FT_Byte)bitmap->rows;
+      sbit->pitch     = (FT_Char)bitmap->pitch;
+      sbit->left      = (FT_Char)slot->bitmap_left;
+      sbit->top       = (FT_Char)slot->bitmap_top;
+      sbit->xadvance  = (FT_Char)xadvance;
+      sbit->yadvance  = (FT_Char)yadvance;
+      sbit->format    = (FT_Byte)bitmap->pixel_mode;
+      sbit->max_grays = (FT_Byte)(bitmap->num_grays - 1);
+
+      /* copy the bitmap into a new buffer -- ignore error */
+      error = ftc_sbit_copy_bitmap( sbit, bitmap, memory );
+
+      /* now, compute size */
+      if ( asize )
+        *asize = FT_ABS( sbit->pitch ) * sbit->height;
+
+    } /* glyph loading successful */
+
+    /* ignore the errors that might have occurred --   */
+    /* we mark unloaded glyphs with `sbit.buffer == 0' */
+    /* and `width == 255', `height == 0'               */
+    /*                                                 */
+    if ( error && error != FTC_Err_Out_Of_Memory )
+    {
+    BadGlyph:
+      sbit->width  = 255;
+      sbit->height = 0;
+      sbit->buffer = NULL;
+      error        = FTC_Err_Ok;
+      if ( asize )
+        *asize = 0;
+    }
+
+    return error;
+  }
+
+
+  FT_LOCAL_DEF( FT_Error )
+  FTC_SNode_New( FTC_SNode  *psnode,
+                 FTC_GQuery  gquery,
+                 FTC_Cache   cache )
+  {
+    FT_Memory   memory = cache->memory;
+    FT_Error    error;
+    FTC_SNode   snode  = NULL;
+    FT_UInt     gindex = gquery->gindex;
+    FTC_Family  family = gquery->family;
+
+    FTC_SFamilyClass  clazz = FTC_CACHE__SFAMILY_CLASS( cache );
+    FT_UInt           total;
+    FT_UInt           node_count;
+
+
+    total = clazz->family_get_count( family, cache->manager );
+    if ( total == 0 || gindex >= total )
+    {
+      error = FTC_Err_Invalid_Argument;
+      goto Exit;
+    }
+
+    if ( !FT_NEW( snode ) )
+    {
+      FT_UInt  count, start;
+
+
+      start = gindex - ( gindex % FTC_SBIT_ITEMS_PER_NODE );
+      count = total - start;
+      if ( count > FTC_SBIT_ITEMS_PER_NODE )
+        count = FTC_SBIT_ITEMS_PER_NODE;
+
+      FTC_GNode_Init( FTC_GNODE( snode ), start, family );
+
+      snode->count = count;
+      for ( node_count = 0; node_count < count; node_count++ )
+      {
+        snode->sbits[node_count].width = 255;
+      }
+
+      error = ftc_snode_load( snode,
+                              cache->manager,
+                              gindex,
+                              NULL );
+      if ( error )
+      {
+        FTC_SNode_Free( snode, cache );
+        snode = NULL;
+      }
+    }
+
+  Exit:
+    *psnode = snode;
+    return error;
+  }
+
+
+  FT_LOCAL_DEF( FT_Error )
+  ftc_snode_new( FTC_Node   *ftcpsnode,
+                 FT_Pointer  ftcgquery,
+                 FTC_Cache   cache )
+  {
+    FTC_SNode  *psnode = (FTC_SNode*)ftcpsnode;
+    FTC_GQuery  gquery = (FTC_GQuery)ftcgquery;
+
+
+    return FTC_SNode_New( psnode, gquery, cache );
+  }
+
+
+  FT_LOCAL_DEF( FT_Offset )
+  ftc_snode_weight( FTC_Node   ftcsnode,
+                    FTC_Cache  cache )
+  {
+    FTC_SNode  snode = (FTC_SNode)ftcsnode;
+    FT_UInt    count = snode->count;
+    FTC_SBit   sbit  = snode->sbits;
+    FT_Int     pitch;
+    FT_Offset  size;
+
+    FT_UNUSED( cache );
+
+
+    FT_ASSERT( snode->count <= FTC_SBIT_ITEMS_PER_NODE );
+
+    /* the node itself */
+    size = sizeof ( *snode );
+
+    for ( ; count > 0; count--, sbit++ )
+    {
+      if ( sbit->buffer )
+      {
+        pitch = sbit->pitch;
+        if ( pitch < 0 )
+          pitch = -pitch;
+
+        /* add the size of a given glyph image */
+        size += pitch * sbit->height;
+      }
+    }
+
+    return size;
+  }
+
+
+#if 0
+
+  FT_LOCAL_DEF( FT_Offset )
+  FTC_SNode_Weight( FTC_SNode  snode )
+  {
+    return ftc_snode_weight( FTC_NODE( snode ), NULL );
+  }
+
+#endif /* 0 */
+
+
+  FT_LOCAL_DEF( FT_Bool )
+  ftc_snode_compare( FTC_Node    ftcsnode,
+                     FT_Pointer  ftcgquery,
+                     FTC_Cache   cache,
+                     FT_Bool*    list_changed )
+  {
+    FTC_SNode   snode  = (FTC_SNode)ftcsnode;
+    FTC_GQuery  gquery = (FTC_GQuery)ftcgquery;
+    FTC_GNode   gnode  = FTC_GNODE( snode );
+    FT_UInt     gindex = gquery->gindex;
+    FT_Bool     result;
+
+
+    if (list_changed)
+      *list_changed = FALSE;
+    result = FT_BOOL( gnode->family == gquery->family                    &&
+                      (FT_UInt)( gindex - gnode->gindex ) < snode->count );
+    if ( result )
+    {
+      /* check if we need to load the glyph bitmap now */
+      FTC_SBit  sbit = snode->sbits + ( gindex - gnode->gindex );
+
+
+      /*
+       *  The following code illustrates what to do when you want to
+       *  perform operations that may fail within a lookup function.
+       *
+       *  Here, we want to load a small bitmap on-demand; we thus
+       *  need to call the `ftc_snode_load' function which may return
+       *  a non-zero error code only when we are out of memory (OOM).
+       *
+       *  The correct thing to do is to use @FTC_CACHE_TRYLOOP and
+       *  @FTC_CACHE_TRYLOOP_END in order to implement a retry loop
+       *  that is capable of flushing the cache incrementally when
+       *  an OOM errors occur.
+       *
+       *  However, we need to `lock' the node before this operation to
+       *  prevent it from being flushed within the loop.
+       *
+       *  When we exit the loop, we unlock the node, then check the `error'
+       *  variable.  If it is non-zero, this means that the cache was
+       *  completely flushed and that no usable memory was found to load
+       *  the bitmap.
+       *
+       *  We then prefer to return a value of 0 (i.e., NO MATCH).  This
+       *  ensures that the caller will try to allocate a new node.
+       *  This operation consequently _fail_ and the lookup function
+       *  returns the appropriate OOM error code.
+       *
+       *  Note that `buffer == NULL && width == 255' is a hack used to
+       *  tag `unavailable' bitmaps in the array.  We should never try
+       *  to load these.
+       *
+       */
+
+      if ( sbit->buffer == NULL && sbit->width == 255 )
+      {
+        FT_ULong  size;
+        FT_Error  error;
+
+
+        ftcsnode->ref_count++;  /* lock node to prevent flushing */
+                                /* in retry loop                 */
+
+        FTC_CACHE_TRYLOOP( cache )
+        {
+          error = ftc_snode_load( snode, cache->manager, gindex, &size );
+        }
+        FTC_CACHE_TRYLOOP_END( list_changed );
+
+        ftcsnode->ref_count--;  /* unlock the node */
+
+        if ( error )
+          result = 0;
+        else
+          cache->manager->cur_weight += size;
+      }
+    }
+
+    return result;
+  }
+
+
+#ifdef FTC_INLINE
+
+  FT_LOCAL_DEF( FT_Bool )
+  FTC_SNode_Compare( FTC_SNode   snode,
+                     FTC_GQuery  gquery,
+                     FTC_Cache   cache,
+                     FT_Bool*    list_changed )
+  {
+    return ftc_snode_compare( FTC_NODE( snode ), gquery,
+                              cache, list_changed );
+  }
+
+#endif
+
+/* END */
diff --git a/src/cache/ftcsbits.h b/src/cache/ftcsbits.h
new file mode 100644
index 0000000..df55dca
--- /dev/null
+++ b/src/cache/ftcsbits.h
@@ -0,0 +1,103 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftcsbits.h                                                             */
+/*                                                                         */
+/*    A small-bitmap cache (specification).                                */
+/*                                                                         */
+/*  Copyright 2000-2001, 2002, 2003, 2006, 2011 by                         */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTCSBITS_H__
+#define __FTCSBITS_H__
+
+
+#include <ft2build.h>
+#include FT_CACHE_H
+#include "ftcglyph.h"
+
+
+FT_BEGIN_HEADER
+
+#define FTC_SBIT_ITEMS_PER_NODE  16
+
+  typedef struct  FTC_SNodeRec_
+  {
+    FTC_GNodeRec  gnode;
+    FT_UInt       count;
+    FTC_SBitRec   sbits[FTC_SBIT_ITEMS_PER_NODE];
+
+  } FTC_SNodeRec, *FTC_SNode;
+
+
+#define FTC_SNODE( x )         ( (FTC_SNode)( x ) )
+#define FTC_SNODE_GINDEX( x )  FTC_GNODE( x )->gindex
+#define FTC_SNODE_FAMILY( x )  FTC_GNODE( x )->family
+
+  typedef FT_UInt
+  (*FTC_SFamily_GetCountFunc)( FTC_Family   family,
+                               FTC_Manager  manager );
+
+  typedef FT_Error
+  (*FTC_SFamily_LoadGlyphFunc)( FTC_Family   family,
+                                FT_UInt      gindex,
+                                FTC_Manager  manager,
+                                FT_Face     *aface );
+
+  typedef struct  FTC_SFamilyClassRec_
+  {
+    FTC_MruListClassRec        clazz;
+    FTC_SFamily_GetCountFunc   family_get_count;
+    FTC_SFamily_LoadGlyphFunc  family_load_glyph;
+
+  } FTC_SFamilyClassRec;
+
+  typedef const FTC_SFamilyClassRec*  FTC_SFamilyClass;
+
+#define FTC_SFAMILY_CLASS( x )  ((FTC_SFamilyClass)(x))
+
+#define FTC_CACHE__SFAMILY_CLASS( x )  \
+          FTC_SFAMILY_CLASS( FTC_CACHE__GCACHE_CLASS( x )->family_class )
+
+
+  FT_LOCAL( void )
+  FTC_SNode_Free( FTC_SNode  snode,
+                  FTC_Cache  cache );
+
+  FT_LOCAL( FT_Error )
+  FTC_SNode_New( FTC_SNode   *psnode,
+                 FTC_GQuery   gquery,
+                 FTC_Cache    cache );
+
+#if 0
+  FT_LOCAL( FT_ULong )
+  FTC_SNode_Weight( FTC_SNode  inode );
+#endif
+
+
+#ifdef FTC_INLINE
+
+  FT_LOCAL( FT_Bool )
+  FTC_SNode_Compare( FTC_SNode   snode,
+                     FTC_GQuery  gquery,
+                     FTC_Cache   cache,
+                     FT_Bool*    list_changed);
+
+#endif
+
+  /* */
+
+FT_END_HEADER
+
+#endif /* __FTCSBITS_H__ */
+
+
+/* END */
diff --git a/src/cff/cffload.c b/src/cff/cffload.c
index 629d38e..8bbf474 100644
--- a/src/cff/cffload.c
+++ b/src/cff/cffload.c
@@ -4,8 +4,7 @@
 /*                                                                         */
 /*    OpenType and CFF data/program tables loader (body).                  */
 /*                                                                         */
-/*  Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,   */
-/*            2010 by                                                      */
+/*  Copyright 1996-2011 by                                                 */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -1269,7 +1268,7 @@
           if ( gid != 0 )
           {
             encoding->codes[j] = (FT_UShort)gid;
-              encoding->count = j + 1;
+            encoding->count    = j + 1;
           }
           else
           {
@@ -1337,7 +1336,10 @@
 
     error = cff_index_access_element( idx, font_index, &dict, &dict_len );
     if ( !error )
+    {
+      FT_TRACE4(( " top dictionary:\n" ));
       error = cff_parser_run( &parser, dict, dict + dict_len );
+    }
 
     cff_index_forget_element( idx, &dict );
 
@@ -1366,6 +1368,7 @@
            FT_FRAME_ENTER( font->font_dict.private_size )                 )
         goto Exit;
 
+      FT_TRACE4(( " private dictionary:\n" ));
       error = cff_parser_run( &parser,
                               (FT_Byte*)stream->cursor,
                               (FT_Byte*)stream->limit );
@@ -1494,6 +1497,7 @@
       goto Exit;
 
     /* now, parse the top-level font dictionary */
+    FT_TRACE4(( "parsing top-level\n" ));
     error = cff_subfont_load( &font->top_font,
                               &font->font_dict_index,
                               face_index,
@@ -1546,6 +1550,7 @@
       for ( idx = 0; idx < fd_index.count; idx++ )
       {
         sub = font->subfonts[idx];
+        FT_TRACE4(( "parsing subfont %u\n", idx ));
         error = cff_subfont_load( sub, &fd_index, idx,
                                   stream, base_offset, library );
         if ( error )
diff --git a/src/cff/cffobjs.c b/src/cff/cffobjs.c
index cd38676..15707a2 100644
--- a/src/cff/cffobjs.c
+++ b/src/cff/cffobjs.c
@@ -607,7 +607,25 @@
         goto Bad_Format;
       }
 
-      if ( !dict->units_per_em )
+#ifdef FT_DEBUG_LEVEL_TRACE
+      {
+        FT_UInt     idx;
+        FT_String*  s;
+
+
+        FT_TRACE4(( "SIDs\n" ));
+
+        /* dump string index, including default strings for convenience */
+        for ( idx = 0; idx < cff->num_strings + 390; idx++ )
+        {
+          s = cff_index_get_sid_string( cff, idx );
+          if ( s )
+            FT_TRACE4(("  %5d %s\n", idx, s ));
+        }
+      }
+#endif /* FT_DEBUG_LEVEL_TRACE */
+
+      if ( !dict->has_font_matrix )
         dict->units_per_em = pure_cff ? 1000 : face->root.units_per_EM;
 
       /* Normalize the font matrix so that `matrix->xx' is 1; the */
@@ -652,26 +670,32 @@
         FT_Fixed    temp;
 
 
-        if ( sub->units_per_em )
+        if ( sub->has_font_matrix )
         {
           FT_Long  scaling;
 
 
-          if ( top->units_per_em > 1 && sub->units_per_em > 1 )
-            scaling = FT_MIN( top->units_per_em, sub->units_per_em );
-          else
-            scaling = 1;
+          /* if we have a top-level matrix, */
+          /* concatenate the subfont matrix */
 
-          FT_Matrix_Multiply_Scaled( &top->font_matrix,
-                                     &sub->font_matrix,
-                                     scaling );
-          FT_Vector_Transform_Scaled( &sub->font_offset,
-                                      &top->font_matrix,
-                                      scaling );
+          if ( top->has_font_matrix )
+          {
+            if ( top->units_per_em > 1 && sub->units_per_em > 1 )
+              scaling = FT_MIN( top->units_per_em, sub->units_per_em );
+            else
+              scaling = 1;
 
-          sub->units_per_em = FT_MulDiv( sub->units_per_em,
-                                         top->units_per_em,
-                                         scaling );
+            FT_Matrix_Multiply_Scaled( &top->font_matrix,
+                                       &sub->font_matrix,
+                                       scaling );
+            FT_Vector_Transform_Scaled( &sub->font_offset,
+                                        &top->font_matrix,
+                                        scaling );
+
+            sub->units_per_em = FT_MulDiv( sub->units_per_em,
+                                           top->units_per_em,
+                                           scaling );
+          }
         }
         else
         {
@@ -690,16 +714,6 @@
         {
           *upm = FT_DivFix( *upm, temp );
 
-          /* if *upm is larger than 100*1000 we divide by 1000 --     */
-          /* this can happen if e.g. there is no top-font FontMatrix  */
-          /* and the subfont FontMatrix already contains the complete */
-          /* scaling for the subfont (see section 5.11 of the PLRM)   */
-
-          /* 100 is a heuristic value */
-
-          if ( *upm > 100L * 1000L )
-            *upm = ( *upm + 500 ) / 1000;
-
           matrix->xx = FT_DivFix( matrix->xx, temp );
           matrix->yx = FT_DivFix( matrix->yx, temp );
           matrix->xy = FT_DivFix( matrix->xy, temp );
diff --git a/src/cff/cffparse.c b/src/cff/cffparse.c
index b12a8d3..61fa87c 100644
--- a/src/cff/cffparse.c
+++ b/src/cff/cffparse.c
@@ -460,6 +460,8 @@
 
       error = CFF_Err_Ok;
 
+      dict->has_font_matrix = TRUE;
+
       /* We expect a well-formed font matrix, this is, the matrix elements */
       /* `xx' and `yy' are of approximately the same magnitude.  To avoid  */
       /* loss of precision, we use the magnitude of element `xx' to scale  */
@@ -498,11 +500,13 @@
 
       *upm = power_tens[scaling];
 
-      FT_TRACE4(( " font matrix: [%f %f %f %f]\n",
+      FT_TRACE4(( " [%f %f %f %f %f %f]\n",
                   (double)matrix->xx / *upm / 65536,
                   (double)matrix->xy / *upm / 65536,
                   (double)matrix->yx / *upm / 65536,
-                  (double)matrix->yy / *upm / 65536 ));
+                  (double)matrix->yy / *upm / 65536,
+                  (double)offset->x  / *upm / 65536,
+                  (double)offset->y  / *upm / 65536 ));
     }
 
   Exit:
@@ -529,7 +533,7 @@
       bbox->yMax = FT_RoundFix( cff_parse_fixed( data   ) );
       error = CFF_Err_Ok;
 
-      FT_TRACE4(( " bbox: [%d %d %d %d]\n",
+      FT_TRACE4(( " [%d %d %d %d]\n",
                   bbox->xMin / 65536,
                   bbox->yMin / 65536,
                   bbox->xMax / 65536,
@@ -554,6 +558,9 @@
     {
       dict->private_size   = cff_parse_num( data++ );
       dict->private_offset = cff_parse_num( data   );
+      FT_TRACE4(( " %lu %lu\n",
+                  dict->private_size, dict->private_offset ));
+
       error = CFF_Err_Ok;
     }
 
@@ -573,8 +580,8 @@
 
     if ( parser->top >= parser->stack + 3 )
     {
-      dict->cid_registry   = (FT_UInt)cff_parse_num( data++ );
-      dict->cid_ordering   = (FT_UInt)cff_parse_num( data++ );
+      dict->cid_registry = (FT_UInt)cff_parse_num( data++ );
+      dict->cid_ordering = (FT_UInt)cff_parse_num( data++ );
       if ( **data == 30 )
         FT_TRACE1(( "cff_parse_cid_ros: real supplement is rounded\n" ));
       dict->cid_supplement = cff_parse_num( data );
@@ -583,7 +590,7 @@
                    dict->cid_supplement ));
       error = CFF_Err_Ok;
 
-      FT_TRACE4(( " ROS: registry sid %d, ordering sid %d, supplement %d\n",
+      FT_TRACE4(( " %d %d %d\n",
                   dict->cid_registry,
                   dict->cid_ordering,
                   dict->cid_supplement ));
@@ -593,54 +600,59 @@
   }
 
 
-#define CFF_FIELD_NUM( code, name ) \
-          CFF_FIELD( code, name, cff_kind_num )
-#define CFF_FIELD_FIXED( code, name ) \
-          CFF_FIELD( code, name, cff_kind_fixed )
-#define CFF_FIELD_FIXED_1000( code, name ) \
-          CFF_FIELD( code, name, cff_kind_fixed_thousand )
-#define CFF_FIELD_STRING( code, name ) \
-          CFF_FIELD( code, name, cff_kind_string )
-#define CFF_FIELD_BOOL( code, name ) \
-          CFF_FIELD( code, name, cff_kind_bool )
-#define CFF_FIELD_DELTA( code, name, max ) \
-          CFF_FIELD( code, name, cff_kind_delta )
+#define CFF_FIELD_NUM( code, name, id )             \
+          CFF_FIELD( code, name, id, cff_kind_num )
+#define CFF_FIELD_FIXED( code, name, id )             \
+          CFF_FIELD( code, name, id, cff_kind_fixed )
+#define CFF_FIELD_FIXED_1000( code, name, id )                 \
+          CFF_FIELD( code, name, id, cff_kind_fixed_thousand )
+#define CFF_FIELD_STRING( code, name, id )             \
+          CFF_FIELD( code, name, id, cff_kind_string )
+#define CFF_FIELD_BOOL( code, name, id )             \
+          CFF_FIELD( code, name, id, cff_kind_bool )
 
 #define CFFCODE_TOPDICT  0x1000
 #define CFFCODE_PRIVATE  0x2000
 
+
 #ifndef FT_CONFIG_OPTION_PIC
 
-#define CFF_FIELD_CALLBACK( code, name ) \
-          {                              \
-            cff_kind_callback,           \
-            code | CFFCODE,              \
-            0, 0,                        \
-            cff_parse_ ## name,          \
-            0, 0                         \
-          },
 
 #undef  CFF_FIELD
-#define CFF_FIELD( code, name, kind ) \
-          {                          \
-            kind,                    \
-            code | CFFCODE,          \
-            FT_FIELD_OFFSET( name ), \
-            FT_FIELD_SIZE( name ),   \
-            0, 0, 0                  \
+#undef  CFF_FIELD_DELTA
+
+
+#ifndef FT_DEBUG_LEVEL_TRACE
+
+
+#define CFF_FIELD_CALLBACK( code, name, id ) \
+          {                                  \
+            cff_kind_callback,               \
+            code | CFFCODE,                  \
+            0, 0,                            \
+            cff_parse_ ## name,              \
+            0, 0                             \
           },
 
-#undef  CFF_FIELD_DELTA
-#define CFF_FIELD_DELTA( code, name, max ) \
-        {                                  \
-          cff_kind_delta,                  \
-          code | CFFCODE,                  \
-          FT_FIELD_OFFSET( name ),         \
-          FT_FIELD_SIZE_DELTA( name ),     \
-          0,                               \
-          max,                             \
-          FT_FIELD_OFFSET( num_ ## name )  \
-        },
+#define CFF_FIELD( code, name, id, kind ) \
+          {                               \
+            kind,                         \
+            code | CFFCODE,               \
+            FT_FIELD_OFFSET( name ),      \
+            FT_FIELD_SIZE( name ),        \
+            0, 0, 0                       \
+          },
+
+#define CFF_FIELD_DELTA( code, name, max, id ) \
+          {                                    \
+            cff_kind_delta,                    \
+            code | CFFCODE,                    \
+            FT_FIELD_OFFSET( name ),           \
+            FT_FIELD_SIZE_DELTA( name ),       \
+            0,                                 \
+            max,                               \
+            FT_FIELD_OFFSET( num_ ## name )    \
+          },
 
   static const CFF_Field_Handler  cff_field_handlers[] =
   {
@@ -651,83 +663,200 @@
   };
 
 
+#else /* FT_DEBUG_LEVEL_TRACE */
+
+
+
+#define CFF_FIELD_CALLBACK( code, name, id ) \
+          {                                  \
+            cff_kind_callback,               \
+            code | CFFCODE,                  \
+            0, 0,                            \
+            cff_parse_ ## name,              \
+            0, 0,                            \
+            id                               \
+          },
+
+#define CFF_FIELD( code, name, id, kind ) \
+          {                               \
+            kind,                         \
+            code | CFFCODE,               \
+            FT_FIELD_OFFSET( name ),      \
+            FT_FIELD_SIZE( name ),        \
+            0, 0, 0,                      \
+            id                            \
+          },
+
+#define CFF_FIELD_DELTA( code, name, max, id ) \
+          {                                    \
+            cff_kind_delta,                    \
+            code | CFFCODE,                    \
+            FT_FIELD_OFFSET( name ),           \
+            FT_FIELD_SIZE_DELTA( name ),       \
+            0,                                 \
+            max,                               \
+            FT_FIELD_OFFSET( num_ ## name ),   \
+            id                                 \
+          },
+
+  static const CFF_Field_Handler  cff_field_handlers[] =
+  {
+
+#include "cfftoken.h"
+
+    { 0, 0, 0, 0, 0, 0, 0, 0 }
+  };
+
+
+#endif /* FT_DEBUG_LEVEL_TRACE */
+
+
 #else /* FT_CONFIG_OPTION_PIC */
 
-  void FT_Destroy_Class_cff_field_handlers(FT_Library library, CFF_Field_Handler* clazz)
+
+  void
+  FT_Destroy_Class_cff_field_handlers( FT_Library          library,
+                                       CFF_Field_Handler*  clazz )
   {
-    FT_Memory memory = library->memory;
+    FT_Memory  memory = library->memory;
+
+
     if ( clazz )
       FT_FREE( clazz );
   }
 
-  FT_Error FT_Create_Class_cff_field_handlers(FT_Library library, CFF_Field_Handler** output_class)
+
+  FT_Error
+  FT_Create_Class_cff_field_handlers( FT_Library           library,
+                                      CFF_Field_Handler**  output_class )
   {
     CFF_Field_Handler*  clazz;
-    FT_Error          error;
-    FT_Memory memory = library->memory;
-    int i=0;
+    FT_Error            error;
+    FT_Memory           memory = library->memory;
+
+    int  i = 0;
+
 
 #undef CFF_FIELD
+#define CFF_FIELD( code, name, id, kind ) i++;
 #undef CFF_FIELD_DELTA
+#define CFF_FIELD_DELTA( code, name, max, id ) i++;
 #undef CFF_FIELD_CALLBACK
-#define CFF_FIELD_CALLBACK( code, name ) i++;
-#define CFF_FIELD( code, name, kind ) i++;
-#define CFF_FIELD_DELTA( code, name, max ) i++;
+#define CFF_FIELD_CALLBACK( code, name, id ) i++;
 
 #include "cfftoken.h"
-    i++;/*{ 0, 0, 0, 0, 0, 0, 0 }*/
 
-    if ( FT_ALLOC( clazz, sizeof(CFF_Field_Handler)*i ) )
+    i++; /* { 0, 0, 0, 0, 0, 0, 0 } */
+
+    if ( FT_ALLOC( clazz, sizeof ( CFF_Field_Handler ) * i ) )
       return error;
 
-    i=0;
-#undef CFF_FIELD
-#undef CFF_FIELD_DELTA
-#undef CFF_FIELD_CALLBACK
+    i = 0;
 
-#define CFF_FIELD_CALLBACK( code_, name_ )                                   \
-    clazz[i].kind = cff_kind_callback;                                       \
-    clazz[i].code = code_ | CFFCODE;                                         \
-    clazz[i].offset = 0;                                                     \
-    clazz[i].size = 0;                                                       \
-    clazz[i].reader = cff_parse_ ## name_;                                   \
-    clazz[i].array_max = 0;                                                  \
-    clazz[i].count_offset = 0;                                               \
-    i++;
+
+#ifndef FT_DEBUG_LEVEL_TRACE
+
+
+#undef CFF_FIELD_CALLBACK
+#define CFF_FIELD_CALLBACK( code_, name_, id_ )        \
+          clazz[i].kind         = cff_kind_callback;   \
+          clazz[i].code         = code_ | CFFCODE;     \
+          clazz[i].offset       = 0;                   \
+          clazz[i].size         = 0;                   \
+          clazz[i].reader       = cff_parse_ ## name_; \
+          clazz[i].array_max    = 0;                   \
+          clazz[i].count_offset = 0;                   \
+          i++;
 
 #undef  CFF_FIELD
-#define CFF_FIELD( code_, name_, kind_ )                                     \
-    clazz[i].kind = kind_;                                                   \
-    clazz[i].code = code_ | CFFCODE;                                         \
-    clazz[i].offset = FT_FIELD_OFFSET( name_ );                              \
-    clazz[i].size = FT_FIELD_SIZE( name_ );                                  \
-    clazz[i].reader = 0;                                                     \
-    clazz[i].array_max = 0;                                                  \
-    clazz[i].count_offset = 0;                                               \
-    i++;                                                                     \
+#define CFF_FIELD( code_, name_, id_, kind_ )               \
+          clazz[i].kind         = kind_;                    \
+          clazz[i].code         = code_ | CFFCODE;          \
+          clazz[i].offset       = FT_FIELD_OFFSET( name_ ); \
+          clazz[i].size         = FT_FIELD_SIZE( name_ );   \
+          clazz[i].reader       = 0;                        \
+          clazz[i].array_max    = 0;                        \
+          clazz[i].count_offset = 0;                        \
+          i++;                                              \
 
 #undef  CFF_FIELD_DELTA
-#define CFF_FIELD_DELTA( code_, name_, max_ )                                \
-    clazz[i].kind = cff_kind_delta;                                          \
-    clazz[i].code = code_ | CFFCODE;                                         \
-    clazz[i].offset = FT_FIELD_OFFSET( name_ );                              \
-    clazz[i].size = FT_FIELD_SIZE_DELTA( name_ );                            \
-    clazz[i].reader = 0;                                                     \
-    clazz[i].array_max = max_;                                               \
-    clazz[i].count_offset = FT_FIELD_OFFSET( num_ ## name_ );                \
-    i++;
+#define CFF_FIELD_DELTA( code_, name_, max_, id_ )                  \
+          clazz[i].kind         = cff_kind_delta;                   \
+          clazz[i].code         = code_ | CFFCODE;                  \
+          clazz[i].offset       = FT_FIELD_OFFSET( name_ );         \
+          clazz[i].size         = FT_FIELD_SIZE_DELTA( name_ );     \
+          clazz[i].reader       = 0;                                \
+          clazz[i].array_max    = max_;                             \
+          clazz[i].count_offset = FT_FIELD_OFFSET( num_ ## name_ ); \
+          i++;
 
 #include "cfftoken.h"
 
-    clazz[i].kind = 0;
-    clazz[i].code = 0;
-    clazz[i].offset = 0;
-    clazz[i].size = 0;
-    clazz[i].reader = 0;
-    clazz[i].array_max = 0;
+    clazz[i].kind         = 0;
+    clazz[i].code         = 0;
+    clazz[i].offset       = 0;
+    clazz[i].size         = 0;
+    clazz[i].reader       = 0;
+    clazz[i].array_max    = 0;
     clazz[i].count_offset = 0;
 
+
+#else /* FT_DEBUG_LEVEL_TRACE */
+
+
+#undef CFF_FIELD_CALLBACK
+#define CFF_FIELD_CALLBACK( code_, name_, id_ )        \
+          clazz[i].kind         = cff_kind_callback;   \
+          clazz[i].code         = code_ | CFFCODE;     \
+          clazz[i].offset       = 0;                   \
+          clazz[i].size         = 0;                   \
+          clazz[i].reader       = cff_parse_ ## name_; \
+          clazz[i].array_max    = 0;                   \
+          clazz[i].count_offset = 0;                   \
+          clazz[i].id           = id_;                 \
+          i++;
+
+#undef  CFF_FIELD
+#define CFF_FIELD( code_, name_, id_, kind_ )               \
+          clazz[i].kind         = kind_;                    \
+          clazz[i].code         = code_ | CFFCODE;          \
+          clazz[i].offset       = FT_FIELD_OFFSET( name_ ); \
+          clazz[i].size         = FT_FIELD_SIZE( name_ );   \
+          clazz[i].reader       = 0;                        \
+          clazz[i].array_max    = 0;                        \
+          clazz[i].count_offset = 0;                        \
+          clazz[i].id           = id_;                      \
+          i++;                                              \
+
+#undef  CFF_FIELD_DELTA
+#define CFF_FIELD_DELTA( code_, name_, max_, id_ )                  \
+          clazz[i].kind         = cff_kind_delta;                   \
+          clazz[i].code         = code_ | CFFCODE;                  \
+          clazz[i].offset       = FT_FIELD_OFFSET( name_ );         \
+          clazz[i].size         = FT_FIELD_SIZE_DELTA( name_ );     \
+          clazz[i].reader       = 0;                                \
+          clazz[i].array_max    = max_;                             \
+          clazz[i].count_offset = FT_FIELD_OFFSET( num_ ## name_ ); \
+          clazz[i].id           = id_;                              \
+          i++;
+
+#include "cfftoken.h"
+
+    clazz[i].kind         = 0;
+    clazz[i].code         = 0;
+    clazz[i].offset       = 0;
+    clazz[i].size         = 0;
+    clazz[i].reader       = 0;
+    clazz[i].array_max    = 0;
+    clazz[i].count_offset = 0;
+    clazz[i].id           = 0;
+
+
+#endif /* FT_DEBUG_LEVEL_TRACE */
+
+
     *output_class = clazz;
+
     return CFF_Err_Ok;
   }
 
@@ -743,7 +872,7 @@
     FT_Byte*    p       = start;
     FT_Error    error   = CFF_Err_Ok;
     FT_Library  library = parser->library;
-    FT_UNUSED(library);
+    FT_UNUSED( library );
 
 
     parser->top    = parser->stack;
@@ -824,6 +953,10 @@
             FT_Byte*  q = (FT_Byte*)parser->object + field->offset;
 
 
+#ifdef FT_DEBUG_LEVEL_TRACE
+            FT_TRACE4(( "  %s", field->id ));
+#endif
+
             /* check that we have enough arguments -- except for */
             /* delta encoded arrays, which can be empty          */
             if ( field->kind != cff_kind_delta && num_args < 1 )
@@ -862,6 +995,34 @@
               default:  /* for 64-bit systems */
                 *(FT_Long*)q = val;
               }
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+              switch ( field->kind )
+              {
+              case cff_kind_bool:
+                FT_TRACE4(( " %s\n", val ? "true" : "false" ));
+                break;
+
+              case cff_kind_string:
+                FT_TRACE4(( " %ld (SID)\n", val ));
+                break;
+
+              case cff_kind_num:
+                FT_TRACE4(( " %ld\n", val ));
+                break;
+
+              case cff_kind_fixed:
+                FT_TRACE4(( " %f\n", (double)val / 65536 ));
+                break;
+
+              case cff_kind_fixed_thousand:
+                FT_TRACE4(( " %f\n", (double)val / 65536 / 1000 ));
+
+              default:
+                ; /* never reached */
+              }
+#endif
+
               break;
 
             case cff_kind_delta:
@@ -875,6 +1036,8 @@
                 if ( num_args > field->array_max )
                   num_args = field->array_max;
 
+                FT_TRACE4(( " [" ));
+
                 /* store count */
                 *qcount = (FT_Byte)num_args;
 
@@ -900,9 +1063,13 @@
                     *(FT_Long*)q = val;
                   }
 
+                  FT_TRACE4(( " %ld", val ));
+
                   q += field->size;
                   num_args--;
                 }
+
+                FT_TRACE4(( "]\n" ));
               }
               break;
 
diff --git a/src/cff/cffparse.h b/src/cff/cffparse.h
index 7e2c00a..61d91ed 100644
--- a/src/cff/cffparse.h
+++ b/src/cff/cffparse.h
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    CFF token stream parser (specification)                              */
 /*                                                                         */
-/*  Copyright 1996-2001, 2002, 2003 by                                     */
+/*  Copyright 1996-2003, 2011 by                                           */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -90,6 +90,10 @@
     FT_UInt           array_max;
     FT_UInt           count_offset;
 
+#ifdef FT_DEBUG_LEVEL_TRACE
+    const char*       id;
+#endif
+
   } CFF_Field_Handler;
 
 
diff --git a/src/cff/cfftoken.h b/src/cff/cfftoken.h
index 6bb27d5..bcb4276 100644
--- a/src/cff/cfftoken.h
+++ b/src/cff/cfftoken.h
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    CFF token definitions (specification only).                          */
 /*                                                                         */
-/*  Copyright 1996-2001, 2002, 2003 by                                     */
+/*  Copyright 1996-2003, 2011 by                                           */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -22,48 +22,48 @@
 #undef  CFFCODE
 #define CFFCODE       CFFCODE_TOPDICT
 
-  CFF_FIELD_STRING  ( 0,     version )
-  CFF_FIELD_STRING  ( 1,     notice )
-  CFF_FIELD_STRING  ( 0x100, copyright )
-  CFF_FIELD_STRING  ( 2,     full_name )
-  CFF_FIELD_STRING  ( 3,     family_name )
-  CFF_FIELD_STRING  ( 4,     weight )
-  CFF_FIELD_BOOL    ( 0x101, is_fixed_pitch )
-  CFF_FIELD_FIXED   ( 0x102, italic_angle )
-  CFF_FIELD_FIXED   ( 0x103, underline_position )
-  CFF_FIELD_FIXED   ( 0x104, underline_thickness )
-  CFF_FIELD_NUM     ( 0x105, paint_type )
-  CFF_FIELD_NUM     ( 0x106, charstring_type )
-  CFF_FIELD_CALLBACK( 0x107, font_matrix )
-  CFF_FIELD_NUM     ( 13,    unique_id )
-  CFF_FIELD_CALLBACK( 5,     font_bbox )
-  CFF_FIELD_NUM     ( 0x108, stroke_width )
-  CFF_FIELD_NUM     ( 15,    charset_offset )
-  CFF_FIELD_NUM     ( 16,    encoding_offset )
-  CFF_FIELD_NUM     ( 17,    charstrings_offset )
-  CFF_FIELD_CALLBACK( 18,    private_dict )
-  CFF_FIELD_NUM     ( 0x114, synthetic_base )
-  CFF_FIELD_STRING  ( 0x115, embedded_postscript )
+  CFF_FIELD_STRING  ( 0,     version,             "Version" )
+  CFF_FIELD_STRING  ( 1,     notice,              "Notice" )
+  CFF_FIELD_STRING  ( 0x100, copyright,           "Copyright" )
+  CFF_FIELD_STRING  ( 2,     full_name,           "FullName" )
+  CFF_FIELD_STRING  ( 3,     family_name,         "FamilyName" )
+  CFF_FIELD_STRING  ( 4,     weight,              "Weight" )
+  CFF_FIELD_BOOL    ( 0x101, is_fixed_pitch,      "isFixedPitch" )
+  CFF_FIELD_FIXED   ( 0x102, italic_angle,        "ItalicAngle" )
+  CFF_FIELD_FIXED   ( 0x103, underline_position,  "UnderlinePosition" )
+  CFF_FIELD_FIXED   ( 0x104, underline_thickness, "UnderlineThickness" )
+  CFF_FIELD_NUM     ( 0x105, paint_type,          "PaintType" )
+  CFF_FIELD_NUM     ( 0x106, charstring_type,     "CharstringType" )
+  CFF_FIELD_CALLBACK( 0x107, font_matrix,         "FontMatrix" )
+  CFF_FIELD_NUM     ( 13,    unique_id,           "UniqueID" )
+  CFF_FIELD_CALLBACK( 5,     font_bbox,           "FontBBox" )
+  CFF_FIELD_NUM     ( 0x108, stroke_width,        "StrokeWidth" )
+  CFF_FIELD_NUM     ( 15,    charset_offset,      "charset" )
+  CFF_FIELD_NUM     ( 16,    encoding_offset,     "Encoding" )
+  CFF_FIELD_NUM     ( 17,    charstrings_offset,  "CharStrings" )
+  CFF_FIELD_CALLBACK( 18,    private_dict,        "Private" )
+  CFF_FIELD_NUM     ( 0x114, synthetic_base,      "SyntheticBase" )
+  CFF_FIELD_STRING  ( 0x115, embedded_postscript, "PostScript" )
 
 #if 0
-  CFF_FIELD_STRING  ( 0x116, base_font_name )
-  CFF_FIELD_DELTA   ( 0x117, base_font_blend, 16 )
-  CFF_FIELD_CALLBACK( 0x118, multiple_master )
-  CFF_FIELD_CALLBACK( 0x119, blend_axis_types )
+  CFF_FIELD_STRING  ( 0x116, base_font_name,      "BaseFontName" )
+  CFF_FIELD_DELTA   ( 0x117, base_font_blend, 16, "BaseFontBlend" )
+  CFF_FIELD_CALLBACK( 0x118, multiple_master,     "MultipleMaster" )
+  CFF_FIELD_CALLBACK( 0x119, blend_axis_types,    "BlendAxisTypes" )
 #endif
 
-  CFF_FIELD_CALLBACK( 0x11E, cid_ros )
-  CFF_FIELD_NUM     ( 0x11F, cid_font_version )
-  CFF_FIELD_NUM     ( 0x120, cid_font_revision )
-  CFF_FIELD_NUM     ( 0x121, cid_font_type )
-  CFF_FIELD_NUM     ( 0x122, cid_count )
-  CFF_FIELD_NUM     ( 0x123, cid_uid_base )
-  CFF_FIELD_NUM     ( 0x124, cid_fd_array_offset )
-  CFF_FIELD_NUM     ( 0x125, cid_fd_select_offset )
-  CFF_FIELD_STRING  ( 0x126, cid_font_name )
+  CFF_FIELD_CALLBACK( 0x11E, cid_ros,              "ROS" )
+  CFF_FIELD_NUM     ( 0x11F, cid_font_version,     "CIDFontVersion" )
+  CFF_FIELD_NUM     ( 0x120, cid_font_revision,    "CIDFontRevision" )
+  CFF_FIELD_NUM     ( 0x121, cid_font_type,        "CIDFontType" )
+  CFF_FIELD_NUM     ( 0x122, cid_count,            "CIDCount" )
+  CFF_FIELD_NUM     ( 0x123, cid_uid_base,         "UIDBase" )
+  CFF_FIELD_NUM     ( 0x124, cid_fd_array_offset,  "FDArray" )
+  CFF_FIELD_NUM     ( 0x125, cid_fd_select_offset, "FDSelect" )
+  CFF_FIELD_STRING  ( 0x126, cid_font_name,        "FontName" )
 
 #if 0
-  CFF_FIELD_NUM     ( 0x127, chameleon )
+  CFF_FIELD_NUM     ( 0x127, chameleon, "Chameleon" )
 #endif
 
 
@@ -72,26 +72,26 @@
 #undef  CFFCODE
 #define CFFCODE       CFFCODE_PRIVATE
 
-  CFF_FIELD_DELTA     ( 6,     blue_values, 14 )
-  CFF_FIELD_DELTA     ( 7,     other_blues, 10 )
-  CFF_FIELD_DELTA     ( 8,     family_blues, 14 )
-  CFF_FIELD_DELTA     ( 9,     family_other_blues, 10 )
-  CFF_FIELD_FIXED_1000( 0x109, blue_scale )
-  CFF_FIELD_NUM       ( 0x10A, blue_shift )
-  CFF_FIELD_NUM       ( 0x10B, blue_fuzz )
-  CFF_FIELD_NUM       ( 10,    standard_width )
-  CFF_FIELD_NUM       ( 11,    standard_height )
-  CFF_FIELD_DELTA     ( 0x10C, snap_widths, 13 )
-  CFF_FIELD_DELTA     ( 0x10D, snap_heights, 13 )
-  CFF_FIELD_BOOL      ( 0x10E, force_bold )
-  CFF_FIELD_FIXED     ( 0x10F, force_bold_threshold )
-  CFF_FIELD_NUM       ( 0x110, lenIV )
-  CFF_FIELD_NUM       ( 0x111, language_group )
-  CFF_FIELD_FIXED     ( 0x112, expansion_factor )
-  CFF_FIELD_NUM       ( 0x113, initial_random_seed )
-  CFF_FIELD_NUM       ( 19,    local_subrs_offset )
-  CFF_FIELD_NUM       ( 20,    default_width )
-  CFF_FIELD_NUM       ( 21,    nominal_width )
+  CFF_FIELD_DELTA     ( 6,     blue_values, 14,        "BlueValues" )
+  CFF_FIELD_DELTA     ( 7,     other_blues, 10,        "OtherBlues" )
+  CFF_FIELD_DELTA     ( 8,     family_blues, 14,       "FamilyBlues" )
+  CFF_FIELD_DELTA     ( 9,     family_other_blues, 10, "FamilyOtherBlues" )
+  CFF_FIELD_FIXED_1000( 0x109, blue_scale,             "BlueScale" )
+  CFF_FIELD_NUM       ( 0x10A, blue_shift,             "BlueShift" )
+  CFF_FIELD_NUM       ( 0x10B, blue_fuzz,              "BlueFuzz" )
+  CFF_FIELD_NUM       ( 10,    standard_width,         "StdHW" )
+  CFF_FIELD_NUM       ( 11,    standard_height,        "StdVW" )
+  CFF_FIELD_DELTA     ( 0x10C, snap_widths, 13,        "StemSnapH" )
+  CFF_FIELD_DELTA     ( 0x10D, snap_heights, 13,       "StemSnapV" )
+  CFF_FIELD_BOOL      ( 0x10E, force_bold,             "ForceBold" )
+  CFF_FIELD_FIXED     ( 0x10F, force_bold_threshold,   "ForceBoldThreshold" )
+  CFF_FIELD_NUM       ( 0x110, lenIV,                  "lenIV" )
+  CFF_FIELD_NUM       ( 0x111, language_group,         "LanguageGroup" )
+  CFF_FIELD_FIXED     ( 0x112, expansion_factor,       "ExpansionFactor" )
+  CFF_FIELD_NUM       ( 0x113, initial_random_seed,    "initialRandomSeed" )
+  CFF_FIELD_NUM       ( 19,    local_subrs_offset,     "Subrs" )
+  CFF_FIELD_NUM       ( 20,    default_width,          "defaultWidthX" )
+  CFF_FIELD_NUM       ( 21,    nominal_width,          "nominalWidthX" )
 
 
 /* END */
diff --git a/src/cff/cfftypes.h b/src/cff/cfftypes.h
index 665ab6f..cae3689 100644
--- a/src/cff/cfftypes.h
+++ b/src/cff/cfftypes.h
@@ -117,6 +117,7 @@
     FT_Int     paint_type;
     FT_Int     charstring_type;
     FT_Matrix  font_matrix;
+    FT_Bool    has_font_matrix;
     FT_ULong   units_per_em;  /* temporarily used as scaling value also */
     FT_Vector  font_offset;
     FT_ULong   unique_id;
diff --git a/src/pfr/pfrload.c b/src/pfr/pfrload.c
new file mode 100644
index 0000000..325322e
--- /dev/null
+++ b/src/pfr/pfrload.c
@@ -0,0 +1,941 @@
+/***************************************************************************/
+/*                                                                         */
+/*  pfrload.c                                                              */
+/*                                                                         */
+/*    FreeType PFR loader (body).                                          */
+/*                                                                         */
+/*  Copyright 2002, 2003, 2004, 2005, 2007, 2009, 2010 by                  */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#include "pfrload.h"
+#include FT_INTERNAL_DEBUG_H
+#include FT_INTERNAL_STREAM_H
+
+#include "pfrerror.h"
+
+#undef  FT_COMPONENT
+#define FT_COMPONENT  trace_pfr
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                          EXTRA ITEMS                          *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  FT_LOCAL_DEF( FT_Error )
+  pfr_extra_items_skip( FT_Byte*  *pp,
+                        FT_Byte*   limit )
+  {
+    return pfr_extra_items_parse( pp, limit, NULL, NULL );
+  }
+
+
+  FT_LOCAL_DEF( FT_Error )
+  pfr_extra_items_parse( FT_Byte*       *pp,
+                         FT_Byte*        limit,
+                         PFR_ExtraItem   item_list,
+                         FT_Pointer      item_data )
+  {
+    FT_Error  error = PFR_Err_Ok;
+    FT_Byte*  p     = *pp;
+    FT_UInt   num_items, item_type, item_size;
+
+
+    PFR_CHECK( 1 );
+    num_items = PFR_NEXT_BYTE( p );
+
+    for ( ; num_items > 0; num_items-- )
+    {
+      PFR_CHECK( 2 );
+      item_size = PFR_NEXT_BYTE( p );
+      item_type = PFR_NEXT_BYTE( p );
+
+      PFR_CHECK( item_size );
+
+      if ( item_list )
+      {
+        PFR_ExtraItem  extra = item_list;
+
+
+        for ( extra = item_list; extra->parser != NULL; extra++ )
+        {
+          if ( extra->type == item_type )
+          {
+            error = extra->parser( p, p + item_size, item_data );
+            if ( error ) goto Exit;
+
+            break;
+          }
+        }
+      }
+
+      p += item_size;
+    }
+
+  Exit:
+    *pp = p;
+    return error;
+
+  Too_Short:
+    FT_ERROR(( "pfr_extra_items_parse: invalid extra items table\n" ));
+    error = PFR_Err_Invalid_Table;
+    goto Exit;
+  }
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                          PFR HEADER                           *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+   static const FT_Frame_Field  pfr_header_fields[] =
+   {
+#undef  FT_STRUCTURE
+#define FT_STRUCTURE  PFR_HeaderRec
+
+     FT_FRAME_START( 58 ),
+       FT_FRAME_ULONG ( signature ),
+       FT_FRAME_USHORT( version ),
+       FT_FRAME_USHORT( signature2 ),
+       FT_FRAME_USHORT( header_size ),
+
+       FT_FRAME_USHORT( log_dir_size ),
+       FT_FRAME_USHORT( log_dir_offset ),
+
+       FT_FRAME_USHORT( log_font_max_size ),
+       FT_FRAME_UOFF3 ( log_font_section_size ),
+       FT_FRAME_UOFF3 ( log_font_section_offset ),
+
+       FT_FRAME_USHORT( phy_font_max_size ),
+       FT_FRAME_UOFF3 ( phy_font_section_size ),
+       FT_FRAME_UOFF3 ( phy_font_section_offset ),
+
+       FT_FRAME_USHORT( gps_max_size ),
+       FT_FRAME_UOFF3 ( gps_section_size ),
+       FT_FRAME_UOFF3 ( gps_section_offset ),
+
+       FT_FRAME_BYTE  ( max_blue_values ),
+       FT_FRAME_BYTE  ( max_x_orus ),
+       FT_FRAME_BYTE  ( max_y_orus ),
+
+       FT_FRAME_BYTE  ( phy_font_max_size_high ),
+       FT_FRAME_BYTE  ( color_flags ),
+
+       FT_FRAME_UOFF3 ( bct_max_size ),
+       FT_FRAME_UOFF3 ( bct_set_max_size ),
+       FT_FRAME_UOFF3 ( phy_bct_set_max_size ),
+
+       FT_FRAME_USHORT( num_phy_fonts ),
+       FT_FRAME_BYTE  ( max_vert_stem_snap ),
+       FT_FRAME_BYTE  ( max_horz_stem_snap ),
+       FT_FRAME_USHORT( max_chars ),
+     FT_FRAME_END
+   };
+
+
+  FT_LOCAL_DEF( FT_Error )
+  pfr_header_load( PFR_Header  header,
+                   FT_Stream   stream )
+  {
+    FT_Error  error;
+
+
+    /* read header directly */
+    if ( !FT_STREAM_SEEK( 0 )                                &&
+         !FT_STREAM_READ_FIELDS( pfr_header_fields, header ) )
+    {
+      /* make a few adjustments to the header */
+      header->phy_font_max_size +=
+        (FT_UInt32)header->phy_font_max_size_high << 16;
+    }
+
+    return error;
+  }
+
+
+  FT_LOCAL_DEF( FT_Bool )
+  pfr_header_check( PFR_Header  header )
+  {
+    FT_Bool  result = 1;
+
+
+    /* check signature and header size */
+    if ( header->signature  != 0x50465230L ||   /* "PFR0" */
+         header->version     > 4           ||
+         header->header_size < 58          ||
+         header->signature2 != 0x0d0a      )    /* CR/LF  */
+    {
+      result = 0;
+    }
+    return  result;
+  }
+
+
+  /***********************************************************************/
+  /***********************************************************************/
+  /*****                                                             *****/
+  /*****                    PFR LOGICAL FONTS                        *****/
+  /*****                                                             *****/
+  /***********************************************************************/
+  /***********************************************************************/
+
+
+  FT_LOCAL_DEF( FT_Error )
+  pfr_log_font_count( FT_Stream  stream,
+                      FT_UInt32  section_offset,
+                      FT_UInt   *acount )
+  {
+    FT_Error  error;
+    FT_UInt   count;
+    FT_UInt   result = 0;
+
+
+    if ( FT_STREAM_SEEK( section_offset ) || FT_READ_USHORT( count ) )
+      goto Exit;
+
+    result = count;
+
+  Exit:
+    *acount = result;
+    return error;
+  }
+
+
+  FT_LOCAL_DEF( FT_Error )
+  pfr_log_font_load( PFR_LogFont  log_font,
+                     FT_Stream    stream,
+                     FT_UInt      idx,
+                     FT_UInt32    section_offset,
+                     FT_Bool      size_increment )
+  {
+    FT_UInt    num_log_fonts;
+    FT_UInt    flags;
+    FT_UInt32  offset;
+    FT_UInt32  size;
+    FT_Error   error;
+
+
+    if ( FT_STREAM_SEEK( section_offset ) ||
+         FT_READ_USHORT( num_log_fonts )  )
+      goto Exit;
+
+    if ( idx >= num_log_fonts )
+      return PFR_Err_Invalid_Argument;
+
+    if ( FT_STREAM_SKIP( idx * 5 ) ||
+         FT_READ_USHORT( size )    ||
+         FT_READ_UOFF3 ( offset )  )
+      goto Exit;
+
+    /* save logical font size and offset */
+    log_font->size   = size;
+    log_font->offset = offset;
+
+    /* now, check the rest of the table before loading it */
+    {
+      FT_Byte*  p;
+      FT_Byte*  limit;
+      FT_UInt   local;
+
+
+      if ( FT_STREAM_SEEK( offset ) || FT_FRAME_ENTER( size ) )
+        goto Exit;
+
+      p     = stream->cursor;
+      limit = p + size;
+
+      PFR_CHECK(13);
+
+      log_font->matrix[0] = PFR_NEXT_LONG( p );
+      log_font->matrix[1] = PFR_NEXT_LONG( p );
+      log_font->matrix[2] = PFR_NEXT_LONG( p );
+      log_font->matrix[3] = PFR_NEXT_LONG( p );
+
+      flags = PFR_NEXT_BYTE( p );
+
+      local = 0;
+      if ( flags & PFR_LOG_STROKE )
+      {
+        local++;
+        if ( flags & PFR_LOG_2BYTE_STROKE )
+          local++;
+
+        if ( (flags & PFR_LINE_JOIN_MASK) == PFR_LINE_JOIN_MITER )
+          local += 3;
+      }
+      if ( flags & PFR_LOG_BOLD )
+      {
+        local++;
+        if ( flags & PFR_LOG_2BYTE_BOLD )
+          local++;
+      }
+
+      PFR_CHECK( local );
+
+      if ( flags & PFR_LOG_STROKE )
+      {
+        log_font->stroke_thickness = ( flags & PFR_LOG_2BYTE_STROKE )
+                                     ? PFR_NEXT_SHORT( p )
+                                     : PFR_NEXT_BYTE( p );
+
+        if ( ( flags & PFR_LINE_JOIN_MASK ) == PFR_LINE_JOIN_MITER )
+          log_font->miter_limit = PFR_NEXT_LONG( p );
+      }
+
+      if ( flags & PFR_LOG_BOLD )
+      {
+        log_font->bold_thickness = ( flags & PFR_LOG_2BYTE_BOLD )
+                                   ? PFR_NEXT_SHORT( p )
+                                   : PFR_NEXT_BYTE( p );
+      }
+
+      if ( flags & PFR_LOG_EXTRA_ITEMS )
+      {
+        error = pfr_extra_items_skip( &p, limit );
+        if (error) goto Fail;
+      }
+
+      PFR_CHECK(5);
+      log_font->phys_size   = PFR_NEXT_USHORT( p );
+      log_font->phys_offset = PFR_NEXT_ULONG( p );
+      if ( size_increment )
+      {
+        PFR_CHECK( 1 );
+        log_font->phys_size += (FT_UInt32)PFR_NEXT_BYTE( p ) << 16;
+      }
+    }
+
+  Fail:
+    FT_FRAME_EXIT();
+
+  Exit:
+    return error;
+
+  Too_Short:
+    FT_ERROR(( "pfr_log_font_load: invalid logical font table\n" ));
+    error = PFR_Err_Invalid_Table;
+    goto Fail;
+  }
+
+
+  /***********************************************************************/
+  /***********************************************************************/
+  /*****                                                             *****/
+  /*****                    PFR PHYSICAL FONTS                       *****/
+  /*****                                                             *****/
+  /***********************************************************************/
+  /***********************************************************************/
+
+
+  /* load bitmap strikes lists */
+  FT_CALLBACK_DEF( FT_Error )
+  pfr_extra_item_load_bitmap_info( FT_Byte*     p,
+                                   FT_Byte*     limit,
+                                   PFR_PhyFont  phy_font )
+  {
+    FT_Memory   memory = phy_font->memory;
+    PFR_Strike  strike;
+    FT_UInt     flags0;
+    FT_UInt     n, count, size1;
+    FT_Error    error = PFR_Err_Ok;
+
+
+    PFR_CHECK( 5 );
+
+    p += 3;  /* skip bctSize */
+    flags0 = PFR_NEXT_BYTE( p );
+    count  = PFR_NEXT_BYTE( p );
+
+    /* re-allocate when needed */
+    if ( phy_font->num_strikes + count > phy_font->max_strikes )
+    {
+      FT_UInt  new_max = FT_PAD_CEIL( phy_font->num_strikes + count, 4 );
+
+
+      if ( FT_RENEW_ARRAY( phy_font->strikes,
+                           phy_font->num_strikes,
+                           new_max ) )
+        goto Exit;
+
+      phy_font->max_strikes = new_max;
+    }
+
+    size1 = 1 + 1 + 1 + 2 + 2 + 1;
+    if ( flags0 & PFR_STRIKE_2BYTE_XPPM )
+      size1++;
+
+    if ( flags0 & PFR_STRIKE_2BYTE_YPPM )
+      size1++;
+
+    if ( flags0 & PFR_STRIKE_3BYTE_SIZE )
+      size1++;
+
+    if ( flags0 & PFR_STRIKE_3BYTE_OFFSET )
+      size1++;
+
+    if ( flags0 & PFR_STRIKE_2BYTE_COUNT )
+      size1++;
+
+    strike = phy_font->strikes + phy_font->num_strikes;
+
+    PFR_CHECK( count * size1 );
+
+    for ( n = 0; n < count; n++, strike++ )
+    {
+      strike->x_ppm       = ( flags0 & PFR_STRIKE_2BYTE_XPPM )
+                            ? PFR_NEXT_USHORT( p )
+                            : PFR_NEXT_BYTE( p );
+
+      strike->y_ppm       = ( flags0 & PFR_STRIKE_2BYTE_YPPM )
+                            ? PFR_NEXT_USHORT( p )
+                            : PFR_NEXT_BYTE( p );
+
+      strike->flags       = PFR_NEXT_BYTE( p );
+
+      strike->bct_size    = ( flags0 & PFR_STRIKE_3BYTE_SIZE )
+                            ? PFR_NEXT_ULONG( p )
+                            : PFR_NEXT_USHORT( p );
+
+      strike->bct_offset  = ( flags0 & PFR_STRIKE_3BYTE_OFFSET )
+                            ? PFR_NEXT_ULONG( p )
+                            : PFR_NEXT_USHORT( p );
+
+      strike->num_bitmaps = ( flags0 & PFR_STRIKE_2BYTE_COUNT )
+                            ? PFR_NEXT_USHORT( p )
+                            : PFR_NEXT_BYTE( p );
+    }
+
+    phy_font->num_strikes += count;
+
+  Exit:
+    return error;
+
+  Too_Short:
+    error = PFR_Err_Invalid_Table;
+    FT_ERROR(( "pfr_extra_item_load_bitmap_info:"
+               " invalid bitmap info table\n" ));
+    goto Exit;
+  }
+
+
+  /* Load font ID.  This is a so-called "unique" name that is rather
+   * long and descriptive (like "Tiresias ScreenFont v7.51").
+   *
+   * Note that a PFR font's family name is contained in an *undocumented*
+   * string of the "auxiliary data" portion of a physical font record.  This
+   * may also contain the "real" style name!
+   *
+   * If no family name is present, the font ID is used instead for the
+   * family.
+   */
+  FT_CALLBACK_DEF( FT_Error )
+  pfr_extra_item_load_font_id( FT_Byte*     p,
+                               FT_Byte*     limit,
+                               PFR_PhyFont  phy_font )
+  {
+    FT_Error    error  = PFR_Err_Ok;
+    FT_Memory   memory = phy_font->memory;
+    FT_PtrDist  len    = limit - p;
+
+
+    if ( phy_font->font_id != NULL )
+      goto Exit;
+
+    if ( FT_ALLOC( phy_font->font_id, len + 1 ) )
+      goto Exit;
+
+    /* copy font ID name, and terminate it for safety */
+    FT_MEM_COPY( phy_font->font_id, p, len );
+    phy_font->font_id[len] = 0;
+
+  Exit:
+    return error;
+  }
+
+
+  /* load stem snap tables */
+  FT_CALLBACK_DEF( FT_Error )
+  pfr_extra_item_load_stem_snaps( FT_Byte*     p,
+                                  FT_Byte*     limit,
+                                  PFR_PhyFont  phy_font )
+  {
+    FT_UInt    count, num_vert, num_horz;
+    FT_Int*    snaps  = NULL;
+    FT_Error   error  = PFR_Err_Ok;
+    FT_Memory  memory = phy_font->memory;
+
+
+    if ( phy_font->vertical.stem_snaps != NULL )
+      goto Exit;
+
+    PFR_CHECK( 1 );
+    count = PFR_NEXT_BYTE( p );
+
+    num_vert = count & 15;
+    num_horz = count >> 4;
+    count    = num_vert + num_horz;
+
+    PFR_CHECK( count * 2 );
+
+    if ( FT_NEW_ARRAY( snaps, count ) )
+      goto Exit;
+
+    phy_font->vertical.stem_snaps = snaps;
+    phy_font->horizontal.stem_snaps = snaps + num_vert;
+
+    for ( ; count > 0; count--, snaps++ )
+      *snaps = FT_NEXT_SHORT( p );
+
+  Exit:
+    return error;
+
+  Too_Short:
+    error = PFR_Err_Invalid_Table;
+    FT_ERROR(( "pfr_exta_item_load_stem_snaps:"
+               " invalid stem snaps table\n" ));
+    goto Exit;
+  }
+
+
+
+  /* load kerning pair data */
+  FT_CALLBACK_DEF( FT_Error )
+  pfr_extra_item_load_kerning_pairs( FT_Byte*     p,
+                                     FT_Byte*     limit,
+                                     PFR_PhyFont  phy_font )
+  {
+    PFR_KernItem  item   = NULL;
+    FT_Error      error  = PFR_Err_Ok;
+    FT_Memory     memory = phy_font->memory;
+
+
+    FT_TRACE2(( "pfr_extra_item_load_kerning_pairs()\n" ));
+
+    if ( FT_NEW( item ) )
+      goto Exit;
+
+    PFR_CHECK( 4 );
+
+    item->pair_count = PFR_NEXT_BYTE( p );
+    item->base_adj   = PFR_NEXT_SHORT( p );
+    item->flags      = PFR_NEXT_BYTE( p );
+    item->offset     = phy_font->offset + ( p - phy_font->cursor );
+
+#ifndef PFR_CONFIG_NO_CHECKS
+    item->pair_size = 3;
+
+    if ( item->flags & PFR_KERN_2BYTE_CHAR )
+      item->pair_size += 2;
+
+    if ( item->flags & PFR_KERN_2BYTE_ADJ )
+      item->pair_size += 1;
+
+    PFR_CHECK( item->pair_count * item->pair_size );
+#endif
+
+    /* load first and last pairs into the item to speed up */
+    /* lookup later...                                     */
+    if ( item->pair_count > 0 )
+    {
+      FT_UInt   char1, char2;
+      FT_Byte*  q;
+
+
+      if ( item->flags & PFR_KERN_2BYTE_CHAR )
+      {
+        q     = p;
+        char1 = PFR_NEXT_USHORT( q );
+        char2 = PFR_NEXT_USHORT( q );
+
+        item->pair1 = PFR_KERN_INDEX( char1, char2 );
+
+        q = p + item->pair_size * ( item->pair_count - 1 );
+        char1 = PFR_NEXT_USHORT( q );
+        char2 = PFR_NEXT_USHORT( q );
+
+        item->pair2 = PFR_KERN_INDEX( char1, char2 );
+      }
+      else
+      {
+        q     = p;
+        char1 = PFR_NEXT_BYTE( q );
+        char2 = PFR_NEXT_BYTE( q );
+
+        item->pair1 = PFR_KERN_INDEX( char1, char2 );
+
+        q = p + item->pair_size * ( item->pair_count - 1 );
+        char1 = PFR_NEXT_BYTE( q );
+        char2 = PFR_NEXT_BYTE( q );
+
+        item->pair2 = PFR_KERN_INDEX( char1, char2 );
+      }
+
+      /* add new item to the current list */
+      item->next                 = NULL;
+      *phy_font->kern_items_tail = item;
+      phy_font->kern_items_tail  = &item->next;
+      phy_font->num_kern_pairs  += item->pair_count;
+    }
+    else
+    {
+      /* empty item! */
+      FT_FREE( item );
+    }
+
+  Exit:
+    return error;
+
+  Too_Short:
+    FT_FREE( item );
+
+    error = PFR_Err_Invalid_Table;
+    FT_ERROR(( "pfr_extra_item_load_kerning_pairs:"
+               " invalid kerning pairs table\n" ));
+    goto Exit;
+  }
+
+
+
+  static const PFR_ExtraItemRec  pfr_phy_font_extra_items[] =
+  {
+    { 1, (PFR_ExtraItem_ParseFunc)pfr_extra_item_load_bitmap_info },
+    { 2, (PFR_ExtraItem_ParseFunc)pfr_extra_item_load_font_id },
+    { 3, (PFR_ExtraItem_ParseFunc)pfr_extra_item_load_stem_snaps },
+    { 4, (PFR_ExtraItem_ParseFunc)pfr_extra_item_load_kerning_pairs },
+    { 0, NULL }
+  };
+
+
+  /* Loads a name from the auxiliary data.  Since this extracts undocumented
+   * strings from the font file, we need to be careful here.
+   */
+  static FT_Error
+  pfr_aux_name_load( FT_Byte*     p,
+                     FT_UInt      len,
+                     FT_Memory    memory,
+                     FT_String*  *astring )
+  {
+    FT_Error    error = PFR_Err_Ok;
+    FT_String*  result = NULL;
+    FT_UInt     n, ok;
+
+
+    if ( len > 0 && p[len - 1] == 0 )
+      len--;
+
+    /* check that each character is ASCII for making sure not to
+       load garbage
+     */
+    ok = ( len > 0 );
+    for ( n = 0; n < len; n++ )
+      if ( p[n] < 32 || p[n] > 127 )
+      {
+        ok = 0;
+        break;
+      }
+
+    if ( ok )
+    {
+      if ( FT_ALLOC( result, len + 1 ) )
+        goto Exit;
+
+      FT_MEM_COPY( result, p, len );
+      result[len] = 0;
+    }
+  Exit:
+    *astring = result;
+    return error;
+  }
+
+
+  FT_LOCAL_DEF( void )
+  pfr_phy_font_done( PFR_PhyFont  phy_font,
+                     FT_Memory    memory )
+  {
+    FT_FREE( phy_font->font_id );
+    FT_FREE( phy_font->family_name );
+    FT_FREE( phy_font->style_name );
+
+    FT_FREE( phy_font->vertical.stem_snaps );
+    phy_font->vertical.num_stem_snaps = 0;
+
+    phy_font->horizontal.stem_snaps     = NULL;
+    phy_font->horizontal.num_stem_snaps = 0;
+
+    FT_FREE( phy_font->strikes );
+    phy_font->num_strikes = 0;
+    phy_font->max_strikes = 0;
+
+    FT_FREE( phy_font->chars );
+    phy_font->num_chars    = 0;
+    phy_font->chars_offset = 0;
+
+    FT_FREE( phy_font->blue_values );
+    phy_font->num_blue_values = 0;
+
+    {
+      PFR_KernItem  item, next;
+
+
+      item = phy_font->kern_items;
+      while ( item )
+      {
+        next = item->next;
+        FT_FREE( item );
+        item = next;
+      }
+      phy_font->kern_items      = NULL;
+      phy_font->kern_items_tail = NULL;
+    }
+
+    phy_font->num_kern_pairs = 0;
+  }
+
+
+  FT_LOCAL_DEF( FT_Error )
+  pfr_phy_font_load( PFR_PhyFont  phy_font,
+                     FT_Stream    stream,
+                     FT_UInt32    offset,
+                     FT_UInt32    size )
+  {
+    FT_Error   error;
+    FT_Memory  memory = stream->memory;
+    FT_UInt    flags;
+    FT_ULong   num_aux;
+    FT_Byte*   p;
+    FT_Byte*   limit;
+
+
+    phy_font->memory = memory;
+    phy_font->offset = offset;
+
+    phy_font->kern_items      = NULL;
+    phy_font->kern_items_tail = &phy_font->kern_items;
+
+    if ( FT_STREAM_SEEK( offset ) || FT_FRAME_ENTER( size ) )
+      goto Exit;
+
+    phy_font->cursor = stream->cursor;
+
+    p     = stream->cursor;
+    limit = p + size;
+
+    PFR_CHECK( 15 );
+    phy_font->font_ref_number    = PFR_NEXT_USHORT( p );
+    phy_font->outline_resolution = PFR_NEXT_USHORT( p );
+    phy_font->metrics_resolution = PFR_NEXT_USHORT( p );
+    phy_font->bbox.xMin          = PFR_NEXT_SHORT( p );
+    phy_font->bbox.yMin          = PFR_NEXT_SHORT( p );
+    phy_font->bbox.xMax          = PFR_NEXT_SHORT( p );
+    phy_font->bbox.yMax          = PFR_NEXT_SHORT( p );
+    phy_font->flags      = flags = PFR_NEXT_BYTE( p );
+
+    /* get the standard advance for non-proportional fonts */
+    if ( !(flags & PFR_PHY_PROPORTIONAL) )
+    {
+      PFR_CHECK( 2 );
+      phy_font->standard_advance = PFR_NEXT_SHORT( p );
+    }
+
+    /* load the extra items when present */
+    if ( flags & PFR_PHY_EXTRA_ITEMS )
+    {
+      error =  pfr_extra_items_parse( &p, limit,
+                                      pfr_phy_font_extra_items, phy_font );
+
+      if ( error )
+        goto Fail;
+    }
+
+    /* In certain fonts, the auxiliary bytes contain interesting  */
+    /* information. These are not in the specification but can be */
+    /* guessed by looking at the content of a few PFR0 fonts.     */
+    PFR_CHECK( 3 );
+    num_aux = PFR_NEXT_ULONG( p );
+
+    if ( num_aux > 0 )
+    {
+      FT_Byte*  q = p;
+      FT_Byte*  q2;
+
+
+      PFR_CHECK( num_aux );
+      p += num_aux;
+
+      while ( num_aux > 0 )
+      {
+        FT_UInt  length, type;
+
+
+        if ( q + 4 > p )
+          break;
+
+        length = PFR_NEXT_USHORT( q );
+        if ( length < 4 || length > num_aux )
+          break;
+
+        q2   = q + length - 2;
+        type = PFR_NEXT_USHORT( q );
+
+        switch ( type )
+        {
+        case 1:
+          /* this seems to correspond to the font's family name,
+           * padded to 16-bits with one zero when necessary
+           */
+          error = pfr_aux_name_load( q, length - 4U, memory,
+                                     &phy_font->family_name );
+          if ( error )
+            goto Exit;
+          break;
+
+        case 2:
+          if ( q + 32 > q2 )
+            break;
+
+          q += 10;
+          phy_font->ascent  = PFR_NEXT_SHORT( q );
+          phy_font->descent = PFR_NEXT_SHORT( q );
+          phy_font->leading = PFR_NEXT_SHORT( q );
+          q += 16;
+          break;
+
+        case 3:
+          /* this seems to correspond to the font's style name,
+           * padded to 16-bits with one zero when necessary
+           */
+          error = pfr_aux_name_load( q, length - 4U, memory,
+                                     &phy_font->style_name );
+          if ( error )
+            goto Exit;
+          break;
+
+        default:
+          ;
+        }
+
+        q        = q2;
+        num_aux -= length;
+      }
+    }
+
+    /* read the blue values */
+    {
+      FT_UInt  n, count;
+
+
+      PFR_CHECK( 1 );
+      phy_font->num_blue_values = count = PFR_NEXT_BYTE( p );
+
+      PFR_CHECK( count * 2 );
+
+      if ( FT_NEW_ARRAY( phy_font->blue_values, count ) )
+        goto Fail;
+
+      for ( n = 0; n < count; n++ )
+        phy_font->blue_values[n] = PFR_NEXT_SHORT( p );
+    }
+
+    PFR_CHECK( 8 );
+    phy_font->blue_fuzz  = PFR_NEXT_BYTE( p );
+    phy_font->blue_scale = PFR_NEXT_BYTE( p );
+
+    phy_font->vertical.standard   = PFR_NEXT_USHORT( p );
+    phy_font->horizontal.standard = PFR_NEXT_USHORT( p );
+
+    /* read the character descriptors */
+    {
+      FT_UInt  n, count, Size;
+
+
+      phy_font->num_chars    = count = PFR_NEXT_USHORT( p );
+      phy_font->chars_offset = offset + ( p - stream->cursor );
+
+      if ( FT_NEW_ARRAY( phy_font->chars, count ) )
+        goto Fail;
+
+      Size = 1 + 1 + 2;
+      if ( flags & PFR_PHY_2BYTE_CHARCODE )
+        Size += 1;
+
+      if ( flags & PFR_PHY_PROPORTIONAL )
+        Size += 2;
+
+      if ( flags & PFR_PHY_ASCII_CODE )
+        Size += 1;
+
+      if ( flags & PFR_PHY_2BYTE_GPS_SIZE )
+        Size += 1;
+
+      if ( flags & PFR_PHY_3BYTE_GPS_OFFSET )
+        Size += 1;
+
+      PFR_CHECK( count * Size );
+
+      for ( n = 0; n < count; n++ )
+      {
+        PFR_Char  cur = &phy_font->chars[n];
+
+
+        cur->char_code = ( flags & PFR_PHY_2BYTE_CHARCODE )
+                         ? PFR_NEXT_USHORT( p )
+                         : PFR_NEXT_BYTE( p );
+
+        cur->advance   = ( flags & PFR_PHY_PROPORTIONAL )
+                         ? PFR_NEXT_SHORT( p )
+                         : (FT_Int) phy_font->standard_advance;
+
+#if 0
+        cur->ascii     = ( flags & PFR_PHY_ASCII_CODE )
+                         ? PFR_NEXT_BYTE( p )
+                         : 0;
+#else
+        if ( flags & PFR_PHY_ASCII_CODE )
+          p += 1;
+#endif
+        cur->gps_size  = ( flags & PFR_PHY_2BYTE_GPS_SIZE )
+                         ? PFR_NEXT_USHORT( p )
+                         : PFR_NEXT_BYTE( p );
+
+        cur->gps_offset = ( flags & PFR_PHY_3BYTE_GPS_OFFSET )
+                          ? PFR_NEXT_ULONG( p )
+                          : PFR_NEXT_USHORT( p );
+      }
+    }
+
+    /* that's it! */
+
+  Fail:
+    FT_FRAME_EXIT();
+
+    /* save position of bitmap info */
+    phy_font->bct_offset = FT_STREAM_POS();
+    phy_font->cursor     = NULL;
+
+  Exit:
+    return error;
+
+  Too_Short:
+    error = PFR_Err_Invalid_Table;
+    FT_ERROR(( "pfr_phy_font_load: invalid physical font table\n" ));
+    goto Fail;
+  }
+
+
+/* END */
diff --git a/src/psaux/psobjs.c b/src/psaux/psobjs.c
index 5b160ce..a28b5fc 100644
--- a/src/psaux/psobjs.c
+++ b/src/psaux/psobjs.c
@@ -185,8 +185,8 @@
     /* grow the base block if needed */
     if ( table->cursor + length > table->capacity )
     {
-      FT_Error   error;
-      FT_Offset  new_size = table->capacity;
+      FT_Error    error;
+      FT_Offset   new_size = table->capacity;
       FT_PtrDist  in_offset;
 
 
diff --git a/src/psaux/t1decode.c b/src/psaux/t1decode.c
index 90874f0..b3ccbdd 100644
--- a/src/psaux/t1decode.c
+++ b/src/psaux/t1decode.c
@@ -764,6 +764,13 @@
             if ( arg_cnt != 0 )
               goto Unexpected_OtherSubr;
 
+            if ( decoder->flex_state == 0 )
+            {
+              FT_ERROR(( "t1_decoder_parse_charstrings:"
+                         " missing flex start\n" ));
+              goto Syntax_Error;
+            }
+
             /* note that we should not add a point for index 0; */
             /* this will move our current position to the flex  */
             /* point without adding any point to the outline    */
diff --git a/src/psnames/pstables.h b/src/psnames/pstables.h
index 1521e9c..0a6637f 100644
--- a/src/psnames/pstables.h
+++ b/src/psnames/pstables.h
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    PostScript glyph names.                                              */
 /*                                                                         */
-/*  Copyright 2005, 2008 by                                                */
+/*  Copyright 2005, 2008, 2011 by                                          */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -564,15 +564,15 @@
 
 #ifdef FT_CONFIG_OPTION_ADOBE_GLYPH_LIST
 
-  static const unsigned char  ft_adobe_glyph_list[54791L] =
+  static const unsigned char  ft_adobe_glyph_list[55997L] =
   {
       0, 52,  0,106,  2,167,  3, 63,  4,220,  6,125,  9,143, 10, 23,
      11,137, 12,199, 14,246, 15, 87, 16,233, 17,219, 18,104, 19, 88,
      22,110, 23, 32, 23, 71, 24, 77, 27,156, 29, 73, 31,247, 32,107,
-     32,222, 33, 55, 34,154, 35,218, 53, 84, 59,196, 68,  6, 75,183,
-     83,178, 88,135, 93,242,101,165,109,185,111, 55,117,254,123, 73,
-    130,238,138,206,145, 31,153,182,156,189,163,249,178,221,193, 17,
-    197, 99,199,240,204, 27,204,155,210,100, 65,143,  0, 65,  0,140,
+     32,222, 33, 55, 34,154, 35,218, 58, 10, 64,122, 72,188, 80,109,
+     88,104, 93, 61, 98,168,106, 91,114,111,115,237,122,180,127,255,
+    135,164,143,132,149,213,158,108,161,115,168,175,183,147,197,199,
+    202, 25,204,166,208,209,209, 81,215, 26, 65,143,  0, 65,  0,140,
       0,175,  0,193,  1, 15,  1,147,  1,233,  1,251,  2,  7,  2, 40,
       2, 57,  2, 82,  2, 91,  2,128,  2,136,  2,154, 69,131,  0,198,
       0,150,  0,158,  0,167,225,227,245,244,101,128,  1,252,237,225,
@@ -1139,2858 +1139,2933 @@
     233,243,227,249,242,233,236,236,233, 99,128,  4,220,236,233,238,
     229,226,229,236,239,119,128, 30,148,237,239,238,239,243,240,225,
     227,101,128,255, 58,115,  2, 35,203, 35,210,237,225,236,108,128,
-    247,122,244,242,239,235,101,128,  1,181, 97,149,  0, 97, 36,  8,
-     36,144, 37, 35, 37,211, 38, 55, 38, 91, 45, 10, 45, 47, 45, 74,
-     46, 43, 46, 81, 47,170, 47,242, 48,197, 48,206, 49, 79, 51, 87,
-     52, 77, 52,124, 53, 19, 53, 33, 97,  7, 36, 24, 36, 34, 36, 41,
-     36, 48, 36, 73, 36, 89, 36,100,226,229,238,231,225,236,105,128,
-      9,134,227,245,244,101,128,  0,225,228,229,246, 97,128,  9,  6,
-    231,117,  2, 36, 55, 36, 64,234,225,242,225,244,105,128, 10,134,
-    242,237,245,235,232,105,128, 10,  6,237,225,244,242,225,231,245,
-    242,237,245,235,232,105,128, 10, 62,242,245,243,241,245,225,242,
-    101,128, 51,  3,246,239,247,229,236,243,233,231,110,  3, 36,116,
-     36,126, 36,133,226,229,238,231,225,236,105,128,  9,190,228,229,
-    246, 97,128,  9, 62,231,245,234,225,242,225,244,105,128, 10,190,
-     98,  4, 36,154, 36,195, 36,204, 36,214,226,242,229,246,233,225,
-    244,233,239,110,  2, 36,169, 36,184,237,225,242,235,225,242,237,
-    229,238,233,225,110,128,  5, 95,243,233,231,238,228,229,246, 97,
-    128,  9,112,229,238,231,225,236,105,128,  9,133,239,240,239,237,
-    239,230,111,128, 49, 26,242,229,246,101,134,  1,  3, 36,233, 36,
-    241, 36,252, 37,  7, 37, 15, 37, 27,225,227,245,244,101,128, 30,
-    175,227,249,242,233,236,236,233, 99,128,  4,209,228,239,244,226,
-    229,236,239,119,128, 30,183,231,242,225,246,101,128, 30,177,232,
-    239,239,235,225,226,239,246,101,128, 30,179,244,233,236,228,101,
-    128, 30,181, 99,  4, 37, 45, 37, 52, 37,131, 37,201,225,242,239,
-    110,128,  1,206,233,242, 99,  2, 37, 60, 37, 65,236,101,128, 36,
-    208,245,237,230,236,229,120,133,  0,226, 37, 84, 37, 92, 37,103,
-     37,111, 37,123,225,227,245,244,101,128, 30,165,228,239,244,226,
-    229,236,239,119,128, 30,173,231,242,225,246,101,128, 30,167,232,
-    239,239,235,225,226,239,246,101,128, 30,169,244,233,236,228,101,
-    128, 30,171,245,244,101,133,  0,180, 37,147, 37,158, 37,175, 37,
-    182, 37,191,226,229,236,239,247,227,237, 98,128,  3, 23, 99,  2,
-     37,164, 37,169,237, 98,128,  3,  1,239,237, 98,128,  3,  1,228,
-    229,246, 97,128,  9, 84,236,239,247,237,239,100,128,  2,207,244,
-    239,238,229,227,237, 98,128,  3, 65,249,242,233,236,236,233, 99,
-    128,  4, 48,100,  5, 37,223, 37,233, 37,247, 37,253, 38, 31,226,
-    236,231,242,225,246,101,128,  2,  1,228,225,235,231,245,242,237,
-    245,235,232,105,128, 10,113,229,246, 97,128,  9,  5,233,229,242,
-    229,243,233,115,130,  0,228, 38, 11, 38, 22,227,249,242,233,236,
-    236,233, 99,128,  4,211,237,225,227,242,239,110,128,  1,223,239,
-    116,  2, 38, 38, 38, 46,226,229,236,239,119,128, 30,161,237,225,
-    227,242,239,110,128,  1,225,101,131,  0,230, 38, 65, 38, 73, 38,
-     82,225,227,245,244,101,128,  1,253,235,239,242,229,225,110,128,
-     49, 80,237,225,227,242,239,110,128,  1,227,230,233,105,  6, 38,
-    107, 38,127, 41, 64, 41, 70, 41, 85, 44,185, 48,  2, 38,113, 38,
-    120,176,178,176, 56,128, 32, 21,184,185,180, 49,128, 32,164,177,
-     48,  3, 38,136, 40,160, 41, 39, 48,  9, 38,156, 38,176, 38,238,
-     39, 44, 39,106, 39,168, 39,230, 40, 36, 40, 98, 49,  3, 38,164,
-     38,168, 38,172, 55,128,  4, 16, 56,128,  4, 17, 57,128,  4, 18,
-     50, 10, 38,198, 38,202, 38,206, 38,210, 38,214, 38,218, 38,222,
-     38,226, 38,230, 38,234, 48,128,  4, 19, 49,128,  4, 20, 50,128,
-      4, 21, 51,128,  4,  1, 52,128,  4, 22, 53,128,  4, 23, 54,128,
-      4, 24, 55,128,  4, 25, 56,128,  4, 26, 57,128,  4, 27, 51, 10,
-     39,  4, 39,  8, 39, 12, 39, 16, 39, 20, 39, 24, 39, 28, 39, 32,
-     39, 36, 39, 40, 48,128,  4, 28, 49,128,  4, 29, 50,128,  4, 30,
-     51,128,  4, 31, 52,128,  4, 32, 53,128,  4, 33, 54,128,  4, 34,
-     55,128,  4, 35, 56,128,  4, 36, 57,128,  4, 37, 52, 10, 39, 66,
-     39, 70, 39, 74, 39, 78, 39, 82, 39, 86, 39, 90, 39, 94, 39, 98,
-     39,102, 48,128,  4, 38, 49,128,  4, 39, 50,128,  4, 40, 51,128,
-      4, 41, 52,128,  4, 42, 53,128,  4, 43, 54,128,  4, 44, 55,128,
-      4, 45, 56,128,  4, 46, 57,128,  4, 47, 53, 10, 39,128, 39,132,
-     39,136, 39,140, 39,144, 39,148, 39,152, 39,156, 39,160, 39,164,
-     48,128,  4,144, 49,128,  4,  2, 50,128,  4,  3, 51,128,  4,  4,
-     52,128,  4,  5, 53,128,  4,  6, 54,128,  4,  7, 55,128,  4,  8,
-     56,128,  4,  9, 57,128,  4, 10, 54, 10, 39,190, 39,194, 39,198,
-     39,202, 39,206, 39,210, 39,214, 39,218, 39,222, 39,226, 48,128,
-      4, 11, 49,128,  4, 12, 50,128,  4, 14, 51,128,246,196, 52,128,
-    246,197, 53,128,  4, 48, 54,128,  4, 49, 55,128,  4, 50, 56,128,
-      4, 51, 57,128,  4, 52, 55, 10, 39,252, 40,  0, 40,  4, 40,  8,
-     40, 12, 40, 16, 40, 20, 40, 24, 40, 28, 40, 32, 48,128,  4, 53,
-     49,128,  4, 81, 50,128,  4, 54, 51,128,  4, 55, 52,128,  4, 56,
-     53,128,  4, 57, 54,128,  4, 58, 55,128,  4, 59, 56,128,  4, 60,
-     57,128,  4, 61, 56, 10, 40, 58, 40, 62, 40, 66, 40, 70, 40, 74,
-     40, 78, 40, 82, 40, 86, 40, 90, 40, 94, 48,128,  4, 62, 49,128,
-      4, 63, 50,128,  4, 64, 51,128,  4, 65, 52,128,  4, 66, 53,128,
-      4, 67, 54,128,  4, 68, 55,128,  4, 69, 56,128,  4, 70, 57,128,
-      4, 71, 57, 10, 40,120, 40,124, 40,128, 40,132, 40,136, 40,140,
-     40,144, 40,148, 40,152, 40,156, 48,128,  4, 72, 49,128,  4, 73,
-     50,128,  4, 74, 51,128,  4, 75, 52,128,  4, 76, 53,128,  4, 77,
-     54,128,  4, 78, 55,128,  4, 79, 56,128,  4,145, 57,128,  4, 82,
-     49,  4, 40,170, 40,232, 40,237, 41,  7, 48, 10, 40,192, 40,196,
-     40,200, 40,204, 40,208, 40,212, 40,216, 40,220, 40,224, 40,228,
-     48,128,  4, 83, 49,128,  4, 84, 50,128,  4, 85, 51,128,  4, 86,
-     52,128,  4, 87, 53,128,  4, 88, 54,128,  4, 89, 55,128,  4, 90,
-     56,128,  4, 91, 57,128,  4, 92,177, 48,128,  4, 94, 52,  4, 40,
-    247, 40,251, 40,255, 41,  3, 53,128,  4, 15, 54,128,  4, 98, 55,
-    128,  4,114, 56,128,  4,116, 57,  5, 41, 19, 41, 23, 41, 27, 41,
-     31, 41, 35, 50,128,246,198, 51,128,  4, 95, 52,128,  4, 99, 53,
-    128,  4,115, 54,128,  4,117, 56,  2, 41, 45, 41, 59, 51,  2, 41,
-     51, 41, 55, 49,128,246,199, 50,128,246,200,180, 54,128,  4,217,
-    178,185, 57,128, 32, 14,179, 48,  2, 41, 77, 41, 81, 48,128, 32,
-     15, 49,128, 32, 13,181, 55,  7, 41,102, 41,172, 42,237, 43, 58,
-     44, 15, 44,108, 44,179, 51,  2, 41,108, 41,122, 56,  2, 41,114,
-     41,118, 49,128,  6,106, 56,128,  6, 12, 57,  8, 41,140, 41,144,
-     41,148, 41,152, 41,156, 41,160, 41,164, 41,168, 50,128,  6, 96,
-     51,128,  6, 97, 52,128,  6, 98, 53,128,  6, 99, 54,128,  6,100,
-     55,128,  6,101, 56,128,  6,102, 57,128,  6,103, 52,  7, 41,188,
-     41,220, 42, 26, 42, 88, 42,120, 42,176, 42,232, 48,  5, 41,200,
-     41,204, 41,208, 41,212, 41,216, 48,128,  6,104, 49,128,  6,105,
-     51,128,  6, 27, 55,128,  6, 31, 57,128,  6, 33, 49, 10, 41,242,
-     41,246, 41,250, 41,254, 42,  2, 42,  6, 42, 10, 42, 14, 42, 18,
-     42, 22, 48,128,  6, 34, 49,128,  6, 35, 50,128,  6, 36, 51,128,
-      6, 37, 52,128,  6, 38, 53,128,  6, 39, 54,128,  6, 40, 55,128,
-      6, 41, 56,128,  6, 42, 57,128,  6, 43, 50, 10, 42, 48, 42, 52,
-     42, 56, 42, 60, 42, 64, 42, 68, 42, 72, 42, 76, 42, 80, 42, 84,
-     48,128,  6, 44, 49,128,  6, 45, 50,128,  6, 46, 51,128,  6, 47,
-     52,128,  6, 48, 53,128,  6, 49, 54,128,  6, 50, 55,128,  6, 51,
-     56,128,  6, 52, 57,128,  6, 53, 51,  5, 42,100, 42,104, 42,108,
-     42,112, 42,116, 48,128,  6, 54, 49,128,  6, 55, 50,128,  6, 56,
-     51,128,  6, 57, 52,128,  6, 58, 52,  9, 42,140, 42,144, 42,148,
-     42,152, 42,156, 42,160, 42,164, 42,168, 42,172, 48,128,  6, 64,
-     49,128,  6, 65, 50,128,  6, 66, 51,128,  6, 67, 52,128,  6, 68,
-     53,128,  6, 69, 54,128,  6, 70, 56,128,  6, 72, 57,128,  6, 73,
-     53,  9, 42,196, 42,200, 42,204, 42,208, 42,212, 42,216, 42,220,
-     42,224, 42,228, 48,128,  6, 74, 49,128,  6, 75, 50,128,  6, 76,
-     51,128,  6, 77, 52,128,  6, 78, 53,128,  6, 79, 54,128,  6, 80,
-     55,128,  6, 81, 56,128,  6, 82,183, 48,128,  6, 71, 53,  3, 42,
-    245, 43, 21, 43, 53, 48,  5, 43,  1, 43,  5, 43,  9, 43, 13, 43,
-     17, 53,128,  6,164, 54,128,  6,126, 55,128,  6,134, 56,128,  6,
-    152, 57,128,  6,175, 49,  5, 43, 33, 43, 37, 43, 41, 43, 45, 43,
-     49, 49,128,  6,121, 50,128,  6,136, 51,128,  6,145, 52,128,  6,
-    186, 57,128,  6,210,179, 52,128,  6,213, 54,  7, 43, 74, 43, 79,
-     43, 84, 43, 89, 43,127, 43,189, 43,251,179, 54,128, 32,170,180,
-     53,128,  5,190,181, 56,128,  5,195, 54,  6, 43,103, 43,107, 43,
-    111, 43,115, 43,119, 43,123, 52,128,  5,208, 53,128,  5,209, 54,
-    128,  5,210, 55,128,  5,211, 56,128,  5,212, 57,128,  5,213, 55,
-     10, 43,149, 43,153, 43,157, 43,161, 43,165, 43,169, 43,173, 43,
-    177, 43,181, 43,185, 48,128,  5,214, 49,128,  5,215, 50,128,  5,
-    216, 51,128,  5,217, 52,128,  5,218, 53,128,  5,219, 54,128,  5,
-    220, 55,128,  5,221, 56,128,  5,222, 57,128,  5,223, 56, 10, 43,
-    211, 43,215, 43,219, 43,223, 43,227, 43,231, 43,235, 43,239, 43,
-    243, 43,247, 48,128,  5,224, 49,128,  5,225, 50,128,  5,226, 51,
-    128,  5,227, 52,128,  5,228, 53,128,  5,229, 54,128,  5,230, 55,
-    128,  5,231, 56,128,  5,232, 57,128,  5,233, 57,  3, 44,  3, 44,
-      7, 44, 11, 48,128,  5,234, 52,128,251, 42, 53,128,251, 43, 55,
-      4, 44, 25, 44, 39, 44, 59, 44, 64, 48,  2, 44, 31, 44, 35, 48,
-    128,251, 75, 53,128,251, 31, 49,  3, 44, 47, 44, 51, 44, 55, 54,
-    128,  5,240, 55,128,  5,241, 56,128,  5,242,178, 51,128,251, 53,
-     57,  7, 44, 80, 44, 84, 44, 88, 44, 92, 44, 96, 44,100, 44,104,
-     51,128,  5,180, 52,128,  5,181, 53,128,  5,182, 54,128,  5,187,
-     55,128,  5,184, 56,128,  5,183, 57,128,  5,176, 56,  3, 44,116,
-     44,160, 44,165, 48,  7, 44,132, 44,136, 44,140, 44,144, 44,148,
-     44,152, 44,156, 48,128,  5,178, 49,128,  5,177, 50,128,  5,179,
-     51,128,  5,194, 52,128,  5,193, 54,128,  5,185, 55,128,  5,188,
-    179, 57,128,  5,189, 52,  2, 44,171, 44,175, 49,128,  5,191, 50,
-    128,  5,192,185,178, 57,128,  2,188, 54,  3, 44,193, 44,252, 45,
-      3, 49,  4, 44,203, 44,219, 44,225, 44,246, 50,  2, 44,209, 44,
-    214,180, 56,128, 33,  5,184, 57,128, 33, 19,179,181, 50,128, 33,
-     22,181, 55,  3, 44,234, 44,238, 44,242, 51,128, 32, 44, 52,128,
-     32, 45, 53,128, 32, 46,182,182, 52,128, 32, 12,179,177,182, 55,
-    128,  6,109,180,185,179, 55,128,  2,189,103,  2, 45, 16, 45, 23,
-    242,225,246,101,128,  0,224,117,  2, 45, 29, 45, 38,234,225,242,
-    225,244,105,128, 10,133,242,237,245,235,232,105,128, 10,  5,104,
-      2, 45, 53, 45, 63,233,242,225,231,225,238, 97,128, 48, 66,239,
-    239,235,225,226,239,246,101,128, 30,163,105,  7, 45, 90, 45,115,
-     45,122, 45,134, 45,159, 45,175, 45,255, 98,  2, 45, 96, 45,105,
-    229,238,231,225,236,105,128,  9,144,239,240,239,237,239,230,111,
-    128, 49, 30,228,229,246, 97,128,  9, 16,229,227,249,242,233,236,
-    236,233, 99,128,  4,213,231,117,  2, 45,141, 45,150,234,225,242,
-    225,244,105,128, 10,144,242,237,245,235,232,105,128, 10, 16,237,
-    225,244,242,225,231,245,242,237,245,235,232,105,128, 10, 72,110,
-      5, 45,187, 45,196, 45,210, 45,226, 45,241,225,242,225,226,233,
-     99,128,  6, 57,230,233,238,225,236,225,242,225,226,233, 99,128,
-    254,202,233,238,233,244,233,225,236,225,242,225,226,233, 99,128,
-    254,203,237,229,228,233,225,236,225,242,225,226,233, 99,128,254,
-    204,246,229,242,244,229,228,226,242,229,246,101,128,  2,  3,246,
-    239,247,229,236,243,233,231,110,  3, 46, 15, 46, 25, 46, 32,226,
-    229,238,231,225,236,105,128,  9,200,228,229,246, 97,128,  9, 72,
-    231,245,234,225,242,225,244,105,128, 10,200,107,  2, 46, 49, 46,
-     73,225,244,225,235,225,238, 97,129, 48,162, 46, 61,232,225,236,
-    230,247,233,228,244,104,128,255,113,239,242,229,225,110,128, 49,
-     79,108,  3, 46, 89, 47,145, 47,154,101,  2, 46, 95, 47,140,102,
-    136,  5,208, 46,115, 46,124, 46,139, 46,153, 46,242, 47,  0, 47,
-    111, 47,125,225,242,225,226,233, 99,128,  6, 39,228,225,231,229,
-    243,232,232,229,226,242,229,119,128,251, 48,230,233,238,225,236,
-    225,242,225,226,233, 99,128,254,142,104,  2, 46,159, 46,234,225,
-    237,250, 97,  2, 46,168, 46,201,225,226,239,246,101,  2, 46,178,
-     46,187,225,242,225,226,233, 99,128,  6, 35,230,233,238,225,236,
-    225,242,225,226,233, 99,128,254,132,226,229,236,239,119,  2, 46,
-    211, 46,220,225,242,225,226,233, 99,128,  6, 37,230,233,238,225,
-    236,225,242,225,226,233, 99,128,254,136,229,226,242,229,119,128,
-      5,208,236,225,237,229,228,232,229,226,242,229,119,128,251, 79,
-    237, 97,  2, 47,  7, 47, 43,228,228,225,225,226,239,246,101,  2,
-     47, 20, 47, 29,225,242,225,226,233, 99,128,  6, 34,230,233,238,
-    225,236,225,242,225,226,233, 99,128,254,130,235,243,245,242, 97,
-      4, 47, 57, 47, 66, 47, 80, 47, 96,225,242,225,226,233, 99,128,
-      6, 73,230,233,238,225,236,225,242,225,226,233, 99,128,254,240,
-    233,238,233,244,233,225,236,225,242,225,226,233, 99,128,254,243,
-    237,229,228,233,225,236,225,242,225,226,233, 99,128,254,244,240,
-    225,244,225,232,232,229,226,242,229,119,128,251, 46,241,225,237,
-    225,244,243,232,229,226,242,229,119,128,251, 47,240,104,128, 33,
-     53,236,229,241,245,225,108,128, 34, 76,240,232, 97,129,  3,177,
-     47,162,244,239,238,239,115,128,  3,172,109,  4, 47,180, 47,188,
-     47,199, 47,233,225,227,242,239,110,128,  1,  1,239,238,239,243,
-    240,225,227,101,128,255, 65,240,229,242,243,225,238,100,130,  0,
-     38, 47,213, 47,225,237,239,238,239,243,240,225,227,101,128,255,
-      6,243,237,225,236,108,128,247, 38,243,241,245,225,242,101,128,
-     51,194,110,  4, 47,252, 48,  7, 48,129, 48,139,226,239,240,239,
-    237,239,230,111,128, 49, 34,103,  4, 48, 17, 48, 28, 48, 42, 48,
-    121,226,239,240,239,237,239,230,111,128, 49, 36,235,232,225,238,
-    235,232,245,244,232,225,105,128, 14, 90,236,101,131, 34, 32, 48,
-     53, 48,106, 48,113,226,242,225,227,235,229,116,  2, 48, 65, 48,
-     85,236,229,230,116,129, 48,  8, 48, 74,246,229,242,244,233,227,
-    225,108,128,254, 63,242,233,231,232,116,129, 48,  9, 48, 95,246,
-    229,242,244,233,227,225,108,128,254, 64,236,229,230,116,128, 35,
-     41,242,233,231,232,116,128, 35, 42,243,244,242,239,109,128, 33,
-     43,239,244,229,236,229,233, 97,128,  3,135,117,  2, 48,145, 48,
-    157,228,225,244,244,225,228,229,246, 97,128,  9, 82,243,246,225,
-    242, 97,  3, 48,169, 48,179, 48,186,226,229,238,231,225,236,105,
-    128,  9,130,228,229,246, 97,128,  9,  2,231,245,234,225,242,225,
-    244,105,128, 10,130,239,231,239,238,229,107,128,  1,  5,112,  3,
-     48,214, 48,238, 49, 12, 97,  2, 48,220, 48,232,225,244,239,243,
-    241,245,225,242,101,128, 51,  0,242,229,110,128, 36,156,239,243,
-    244,242,239,240,232,101,  2, 48,251, 49,  6,225,242,237,229,238,
-    233,225,110,128,  5, 90,237,239,100,128,  2,188,112,  2, 49, 18,
-     49, 23,236,101,128,248,255,242,111,  2, 49, 30, 49, 38,225,227,
-    232,229,115,128, 34, 80,120,  2, 49, 44, 49, 64,229,241,245,225,
-    108,129, 34, 72, 49, 54,239,242,233,237,225,231,101,128, 34, 82,
-    233,237,225,244,229,236,249,229,241,245,225,108,128, 34, 69,114,
-      4, 49, 89, 49,116, 49,120, 49,165,225,229, 97,  2, 49, 97, 49,
-    107,229,235,239,242,229,225,110,128, 49,142,235,239,242,229,225,
-    110,128, 49,141, 99,128, 35, 18,105,  2, 49,126, 49,140,231,232,
-    244,232,225,236,230,242,233,238,103,128, 30,154,238,103,130,  0,
-    229, 49,149, 49,157,225,227,245,244,101,128,  1,251,226,229,236,
-    239,119,128, 30,  1,242,239,119,  8, 49,185, 49,192, 50, 65, 50,
-    131, 50,181, 50,236, 51,  3, 51, 78,226,239,244,104,128, 33,148,
-    100,  3, 49,200, 49,239, 50, 30,225,243,104,  4, 49,212, 49,219,
-     49,226, 49,234,228,239,247,110,128, 33,227,236,229,230,116,128,
-     33,224,242,233,231,232,116,128, 33,226,245,112,128, 33,225,226,
-    108,  5, 49,252, 50,  3, 50, 10, 50, 17, 50, 25,226,239,244,104,
-    128, 33,212,228,239,247,110,128, 33,211,236,229,230,116,128, 33,
-    208,242,233,231,232,116,128, 33,210,245,112,128, 33,209,239,247,
-    110,131, 33,147, 50, 42, 50, 49, 50, 57,236,229,230,116,128, 33,
-    153,242,233,231,232,116,128, 33,152,247,232,233,244,101,128, 33,
-    233,104,  2, 50, 71, 50,122,229,225,100,  4, 50, 83, 50, 93, 50,
-    103, 50,114,228,239,247,238,237,239,100,128,  2,197,236,229,230,
-    244,237,239,100,128,  2,194,242,233,231,232,244,237,239,100,128,
-      2,195,245,240,237,239,100,128,  2,196,239,242,233,250,229,120,
-    128,248,231,236,229,230,116,131, 33,144, 50,144, 50,161, 50,173,
-    228,226,108,129, 33,208, 50,152,243,244,242,239,235,101,128, 33,
-    205,239,246,229,242,242,233,231,232,116,128, 33,198,247,232,233,
-    244,101,128, 33,230,242,233,231,232,116,132, 33,146, 50,197, 50,
-    209, 50,217, 50,228,228,226,236,243,244,242,239,235,101,128, 33,
-    207,232,229,225,246,121,128, 39,158,239,246,229,242,236,229,230,
-    116,128, 33,196,247,232,233,244,101,128, 33,232,244,225, 98,  2,
-     50,244, 50,251,236,229,230,116,128, 33,228,242,233,231,232,116,
-    128, 33,229,245,112,132, 33,145, 51, 16, 51, 44, 51, 62, 51, 70,
-    100,  2, 51, 22, 51, 34,110,129, 33,149, 51, 28,226,243,101,128,
-     33,168,239,247,238,226,225,243,101,128, 33,168,236,229,230,116,
-    129, 33,150, 51, 53,239,230,228,239,247,110,128, 33,197,242,233,
-    231,232,116,128, 33,151,247,232,233,244,101,128, 33,231,246,229,
-    242,244,229,120,128,248,230,115,  5, 51, 99, 51,175, 51,220, 52,
-     47, 52, 57, 99,  2, 51,105, 51,157,233,105,  2, 51,112, 51,135,
-    227,233,242,227,245,109,129,  0, 94, 51,123,237,239,238,239,243,
-    240,225,227,101,128,255, 62,244,233,236,228,101,129,  0,126, 51,
-    145,237,239,238,239,243,240,225,227,101,128,255, 94,242,233,240,
-    116,129,  2, 81, 51,166,244,245,242,238,229,100,128,  2, 82,237,
-    225,236,108,  2, 51,184, 51,195,232,233,242,225,231,225,238, 97,
-    128, 48, 65,235,225,244,225,235,225,238, 97,129, 48,161, 51,208,
-    232,225,236,230,247,233,228,244,104,128,255,103,244,229,242,233,
-    115,  2, 51,230, 52, 43,107,131,  0, 42, 51,240, 52, 12, 52, 35,
-     97,  2, 51,246, 52,  4,236,244,239,238,229,225,242,225,226,233,
-     99,128,  6,109,242,225,226,233, 99,128,  6,109,109,  2, 52, 18,
-     52, 24,225,244,104,128, 34, 23,239,238,239,243,240,225,227,101,
-    128,255, 10,243,237,225,236,108,128,254, 97,109,128, 32, 66,245,
-    240,229,242,233,239,114,128,246,233,249,237,240,244,239,244,233,
-    227,225,236,236,249,229,241,245,225,108,128, 34, 67,116,132,  0,
-     64, 52, 89, 52, 96, 52,108, 52,116,233,236,228,101,128,  0,227,
-    237,239,238,239,243,240,225,227,101,128,255, 32,243,237,225,236,
-    108,128,254,107,245,242,238,229,100,128,  2, 80,117,  6, 52,138,
-     52,163, 52,170, 52,195, 52,215, 52,231, 98,  2, 52,144, 52,153,
-    229,238,231,225,236,105,128,  9,148,239,240,239,237,239,230,111,
-    128, 49, 32,228,229,246, 97,128,  9, 20,231,117,  2, 52,177, 52,
-    186,234,225,242,225,244,105,128, 10,148,242,237,245,235,232,105,
-    128, 10, 20,236,229,238,231,244,232,237,225,242,235,226,229,238,
-    231,225,236,105,128,  9,215,237,225,244,242,225,231,245,242,237,
-    245,235,232,105,128, 10, 76,246,239,247,229,236,243,233,231,110,
-      3, 52,247, 53,  1, 53,  8,226,229,238,231,225,236,105,128,  9,
-    204,228,229,246, 97,128,  9, 76,231,245,234,225,242,225,244,105,
-    128, 10,204,246,225,231,242,225,232,225,228,229,246, 97,128,  9,
-     61,121,  2, 53, 39, 53, 51,226,225,242,237,229,238,233,225,110,
-    128,  5, 97,233,110,130,  5,226, 53, 60, 53, 75,225,236,244,239,
-    238,229,232,229,226,242,229,119,128,251, 32,232,229,226,242,229,
-    119,128,  5,226, 98,144,  0, 98, 53,120, 53,255, 54, 10, 54, 19,
-     54, 44, 55, 85, 55,147, 55,220, 57,146, 57,158, 57,201, 57,209,
-     57,219, 59, 89, 59,113, 59,122, 97,  7, 53,136, 53,146, 53,170,
-     53,177, 53,202, 53,226, 53,237,226,229,238,231,225,236,105,128,
-      9,172,227,235,243,236,225,243,104,129,  0, 92, 53,158,237,239,
-    238,239,243,240,225,227,101,128,255, 60,228,229,246, 97,128,  9,
-     44,231,117,  2, 53,184, 53,193,234,225,242,225,244,105,128, 10,
-    172,242,237,245,235,232,105,128, 10, 44,104,  2, 53,208, 53,218,
-    233,242,225,231,225,238, 97,128, 48,112,244,244,232,225,105,128,
-     14, 63,235,225,244,225,235,225,238, 97,128, 48,208,114,129,  0,
-    124, 53,243,237,239,238,239,243,240,225,227,101,128,255, 92,226,
-    239,240,239,237,239,230,111,128, 49,  5,227,233,242,227,236,101,
-    128, 36,209,228,239,116,  2, 54, 27, 54, 36,225,227,227,229,238,
-    116,128, 30,  3,226,229,236,239,119,128, 30,  5,101,  6, 54, 58,
-     54, 79, 54,102, 54,244, 54,255, 55, 11,225,237,229,228,243,233,
-    248,244,229,229,238,244,232,238,239,244,229,115,128, 38,108, 99,
-      2, 54, 85, 54, 92,225,245,243,101,128, 34, 53,249,242,233,236,
-    236,233, 99,128,  4, 49,104,  5, 54,114, 54,123, 54,137, 54,167,
-     54,226,225,242,225,226,233, 99,128,  6, 40,230,233,238,225,236,
-    225,242,225,226,233, 99,128,254,144,105,  2, 54,143, 54,158,238,
-    233,244,233,225,236,225,242,225,226,233, 99,128,254,145,242,225,
-    231,225,238, 97,128, 48,121,237,101,  2, 54,174, 54,187,228,233,
-    225,236,225,242,225,226,233, 99,128,254,146,229,237,105,  2, 54,
-    195, 54,210,238,233,244,233,225,236,225,242,225,226,233, 99,128,
-    252,159,243,239,236,225,244,229,228,225,242,225,226,233, 99,128,
-    252,  8,238,239,239,238,230,233,238,225,236,225,242,225,226,233,
-     99,128,252,109,235,225,244,225,235,225,238, 97,128, 48,217,238,
-    225,242,237,229,238,233,225,110,128,  5, 98,116,132,  5,209, 55,
-     23, 55, 43, 55, 63, 55, 72, 97,129,  3,178, 55, 29,243,249,237,
-    226,239,236,231,242,229,229,107,128,  3,208,228,225,231,229,243,
-    104,129,251, 49, 55, 54,232,229,226,242,229,119,128,251, 49,232,
-    229,226,242,229,119,128,  5,209,242,225,230,229,232,229,226,242,
-    229,119,128,251, 76,104,  2, 55, 91, 55,141, 97,  3, 55, 99, 55,
-    109, 55,116,226,229,238,231,225,236,105,128,  9,173,228,229,246,
-     97,128,  9, 45,231,117,  2, 55,123, 55,132,234,225,242,225,244,
-    105,128, 10,173,242,237,245,235,232,105,128, 10, 45,239,239,107,
-    128,  2, 83,105,  5, 55,159, 55,170, 55,181, 55,195, 55,209,232,
-    233,242,225,231,225,238, 97,128, 48,115,235,225,244,225,235,225,
-    238, 97,128, 48,211,236,225,226,233,225,236,227,236,233,227,107,
-    128,  2,152,238,228,233,231,245,242,237,245,235,232,105,128, 10,
-      2,242,245,243,241,245,225,242,101,128, 51, 49,108,  3, 55,228,
-     57,129, 57,140, 97,  2, 55,234, 57,124,227,107,  6, 55,249, 56,
-      2, 56, 39, 56,188, 56,243, 57, 39,227,233,242,227,236,101,128,
-     37,207,100,  2, 56,  8, 56, 17,233,225,237,239,238,100,128, 37,
-    198,239,247,238,240,239,233,238,244,233,238,231,244,242,233,225,
-    238,231,236,101,128, 37,188,108,  2, 56, 45, 56,148,101,  2, 56,
-     51, 56, 87,230,244,240,239,233,238,244,233,238,103,  2, 56, 66,
-     56, 76,240,239,233,238,244,229,114,128, 37,196,244,242,233,225,
-    238,231,236,101,128, 37,192,238,244,233,227,245,236,225,242,226,
-    242,225,227,235,229,116,  2, 56,107, 56,127,236,229,230,116,129,
-     48, 16, 56,116,246,229,242,244,233,227,225,108,128,254, 59,242,
-    233,231,232,116,129, 48, 17, 56,137,246,229,242,244,233,227,225,
-    108,128,254, 60,239,247,229,114,  2, 56,157, 56,172,236,229,230,
-    244,244,242,233,225,238,231,236,101,128, 37,227,242,233,231,232,
-    244,244,242,233,225,238,231,236,101,128, 37,226,114,  2, 56,194,
-     56,205,229,227,244,225,238,231,236,101,128, 37,172,233,231,232,
-    244,240,239,233,238,244,233,238,103,  2, 56,222, 56,232,240,239,
-    233,238,244,229,114,128, 37,186,244,242,233,225,238,231,236,101,
-    128, 37,182,115,  3, 56,251, 57, 25, 57, 33,109,  2, 57,  1, 57,
-     13,225,236,236,243,241,245,225,242,101,128, 37,170,233,236,233,
-    238,231,230,225,227,101,128, 38, 59,241,245,225,242,101,128, 37,
-    160,244,225,114,128, 38,  5,245,240,112,  2, 57, 47, 57, 85,229,
-    114,  2, 57, 54, 57, 69,236,229,230,244,244,242,233,225,238,231,
-    236,101,128, 37,228,242,233,231,232,244,244,242,233,225,238,231,
-    236,101,128, 37,229,239,233,238,244,233,238,103,  2, 57, 97, 57,
-    113,243,237,225,236,236,244,242,233,225,238,231,236,101,128, 37,
-    180,244,242,233,225,238,231,236,101,128, 37,178,238,107,128, 36,
-     35,233,238,229,226,229,236,239,119,128, 30,  7,239,227,107,128,
-     37,136,237,239,238,239,243,240,225,227,101,128,255, 66,111,  3,
-     57,166, 57,179, 57,190,226,225,233,237,225,233,244,232,225,105,
-    128, 14, 26,232,233,242,225,231,225,238, 97,128, 48,124,235,225,
-    244,225,235,225,238, 97,128, 48,220,240,225,242,229,110,128, 36,
-    157,241,243,241,245,225,242,101,128, 51,195,114,  4, 57,229, 58,
-    223, 59, 40, 59, 79,225, 99,  2, 57,236, 58,130,101,  3, 57,244,
-     57,249, 58, 61,229,120,128,248,244,236,229,230,116,133,  0,123,
-     58, 10, 58, 15, 58, 37, 58, 45, 58, 50,226,116,128,248,243,109,
-      2, 58, 21, 58, 26,233,100,128,248,242,239,238,239,243,240,225,
-    227,101,128,255, 91,243,237,225,236,108,128,254, 91,244,112,128,
-    248,241,246,229,242,244,233,227,225,108,128,254, 55,242,233,231,
-    232,116,133,  0,125, 58, 79, 58, 84, 58,106, 58,114, 58,119,226,
-    116,128,248,254,109,  2, 58, 90, 58, 95,233,100,128,248,253,239,
-    238,239,243,240,225,227,101,128,255, 93,243,237,225,236,108,128,
-    254, 92,244,112,128,248,252,246,229,242,244,233,227,225,108,128,
-    254, 56,235,229,116,  2, 58,138, 58,180,236,229,230,116,132,  0,
-     91, 58,153, 58,158, 58,163, 58,175,226,116,128,248,240,229,120,
-    128,248,239,237,239,238,239,243,240,225,227,101,128,255, 59,244,
-    112,128,248,238,242,233,231,232,116,132,  0, 93, 58,196, 58,201,
-     58,206, 58,218,226,116,128,248,251,229,120,128,248,250,237,239,
-    238,239,243,240,225,227,101,128,255, 61,244,112,128,248,249,229,
-    246,101,131,  2,216, 58,235, 58,246, 58,252,226,229,236,239,247,
-    227,237, 98,128,  3, 46,227,237, 98,128,  3,  6,233,238,246,229,
-    242,244,229,100,  3, 59, 11, 59, 22, 59, 28,226,229,236,239,247,
-    227,237, 98,128,  3, 47,227,237, 98,128,  3, 17,228,239,245,226,
-    236,229,227,237, 98,128,  3, 97,233,228,231,101,  2, 59, 49, 59,
-     60,226,229,236,239,247,227,237, 98,128,  3, 42,233,238,246,229,
-    242,244,229,228,226,229,236,239,247,227,237, 98,128,  3, 58,239,
-    235,229,238,226,225,114,128,  0,166,115,  2, 59, 95, 59,103,244,
-    242,239,235,101,128,  1,128,245,240,229,242,233,239,114,128,246,
-    234,244,239,240,226,225,114,128,  1,131,117,  3, 59,130, 59,141,
-     59,152,232,233,242,225,231,225,238, 97,128, 48,118,235,225,244,
-    225,235,225,238, 97,128, 48,214,236,108,  2, 59,159, 59,189,229,
-    116,130, 32, 34, 59,168, 59,178,233,238,246,229,242,243,101,128,
-     37,216,239,240,229,242,225,244,239,114,128, 34, 25,243,229,249,
-    101,128, 37,206, 99,143,  0, 99, 59,230, 60,179, 60,190, 60,254,
-     61, 29, 61,122, 63, 33, 64, 17, 64,117, 64,166, 67,158, 67,166,
-     67,176, 67,188, 67,221, 97,  9, 59,250, 60,  5, 60, 15, 60, 22,
-     60, 29, 60, 54, 60, 64, 60,116, 60,125,225,242,237,229,238,233,
-    225,110,128,  5,110,226,229,238,231,225,236,105,128,  9,154,227,
-    245,244,101,128,  1,  7,228,229,246, 97,128,  9, 26,231,117,  2,
-     60, 36, 60, 45,234,225,242,225,244,105,128, 10,154,242,237,245,
-    235,232,105,128, 10, 26,236,243,241,245,225,242,101,128, 51,136,
-    238,228,242,225,226,233,238,228,117,  4, 60, 82, 60, 92, 60, 98,
-     60,105,226,229,238,231,225,236,105,128,  9,129,227,237, 98,128,
-      3, 16,228,229,246, 97,128,  9,  1,231,245,234,225,242,225,244,
-    105,128, 10,129,240,243,236,239,227,107,128, 33,234,114,  3, 60,
-    133, 60,139, 60,165,229,239,102,128, 33,  5,239,110,130,  2,199,
-     60,148, 60,159,226,229,236,239,247,227,237, 98,128,  3, 44,227,
-    237, 98,128,  3, 12,242,233,225,231,229,242,229,244,245,242,110,
-    128, 33,181,226,239,240,239,237,239,230,111,128, 49, 24, 99,  4,
-     60,200, 60,207, 60,226, 60,248,225,242,239,110,128,  1, 13,229,
-    228,233,236,236, 97,129,  0,231, 60,218,225,227,245,244,101,128,
-     30,  9,233,242, 99,  2, 60,234, 60,239,236,101,128, 36,210,245,
-    237,230,236,229,120,128,  1,  9,245,242,108,128,  2, 85,100,  2,
-     61,  4, 61, 20,239,116,129,  1, 11, 61, 11,225,227,227,229,238,
-    116,128,  1, 11,243,241,245,225,242,101,128, 51,197,101,  2, 61,
-     35, 61, 51,228,233,236,236, 97,129,  0,184, 61, 45,227,237, 98,
-    128,  3, 39,238,116,132,  0,162, 61, 64, 61, 88, 61,100, 61,111,
-    105,  2, 61, 70, 61, 78,231,242,225,228,101,128, 33,  3,238,230,
-    229,242,233,239,114,128,246,223,237,239,238,239,243,240,225,227,
-    101,128,255,224,239,236,228,243,244,249,236,101,128,247,162,243,
-    245,240,229,242,233,239,114,128,246,224,104,  5, 61,134, 61,197,
-     61,208, 62,136, 62,228, 97,  4, 61,144, 61,155, 61,165, 61,172,
-    225,242,237,229,238,233,225,110,128,  5,121,226,229,238,231,225,
-    236,105,128,  9,155,228,229,246, 97,128,  9, 27,231,117,  2, 61,
-    179, 61,188,234,225,242,225,244,105,128, 10,155,242,237,245,235,
-    232,105,128, 10, 27,226,239,240,239,237,239,230,111,128, 49, 20,
-    101,  6, 61,222, 61,242, 62, 10, 62, 78, 62, 90, 62,111,225,226,
-    235,232,225,243,233,225,238,227,249,242,233,236,236,233, 99,128,
-      4,189, 99,  2, 61,248, 62,  0,235,237,225,242,107,128, 39, 19,
-    249,242,233,236,236,233, 99,128,  4, 71,100,  2, 62, 16, 62, 60,
-    229,243,227,229,238,228,229,114,  2, 62, 29, 62, 49,225,226,235,
-    232,225,243,233,225,238,227,249,242,233,236,236,233, 99,128,  4,
-    191,227,249,242,233,236,236,233, 99,128,  4,183,233,229,242,229,
-    243,233,243,227,249,242,233,236,236,233, 99,128,  4,245,232,225,
-    242,237,229,238,233,225,110,128,  5,115,235,232,225,235,225,243,
-    243,233,225,238,227,249,242,233,236,236,233, 99,128,  4,204,246,
-    229,242,244,233,227,225,236,243,244,242,239,235,229,227,249,242,
-    233,236,236,233, 99,128,  4,185,105,129,  3,199, 62,142,229,245,
-    227,104,  4, 62,155, 62,190, 62,205, 62,214, 97,  2, 62,161, 62,
-    176,227,233,242,227,236,229,235,239,242,229,225,110,128, 50,119,
-    240,225,242,229,238,235,239,242,229,225,110,128, 50, 23,227,233,
-    242,227,236,229,235,239,242,229,225,110,128, 50,105,235,239,242,
-    229,225,110,128, 49, 74,240,225,242,229,238,235,239,242,229,225,
-    110,128, 50,  9,111,  2, 62,234, 63, 28,227,104,  3, 62,243, 63,
-      9, 63, 19,225,110,  2, 62,250, 63,  2,231,244,232,225,105,128,
-     14, 10,244,232,225,105,128, 14,  8,233,238,231,244,232,225,105,
-    128, 14,  9,239,229,244,232,225,105,128, 14, 12,239,107,128,  1,
-    136,105,  2, 63, 39, 63,141,229,245, 99,  5, 63, 53, 63, 88, 63,
-    103, 63,112, 63,126, 97,  2, 63, 59, 63, 74,227,233,242,227,236,
-    229,235,239,242,229,225,110,128, 50,118,240,225,242,229,238,235,
-    239,242,229,225,110,128, 50, 22,227,233,242,227,236,229,235,239,
-    242,229,225,110,128, 50,104,235,239,242,229,225,110,128, 49, 72,
-    240,225,242,229,238,235,239,242,229,225,110,128, 50,  8,245,240,
-    225,242,229,238,235,239,242,229,225,110,128, 50, 28,242, 99,  2,
-     63,148, 63,243,236,101,132, 37,203, 63,161, 63,172, 63,177, 63,
-    201,237,245,236,244,233,240,236,121,128, 34,151,239,116,128, 34,
-    153,112,  2, 63,183, 63,189,236,245,115,128, 34,149,239,243,244,
-    225,236,237,225,242,107,128, 48, 54,247,233,244,104,  2, 63,210,
-     63,226,236,229,230,244,232,225,236,230,226,236,225,227,107,128,
-     37,208,242,233,231,232,244,232,225,236,230,226,236,225,227,107,
-    128, 37,209,245,237,230,236,229,120,130,  2,198, 64,  0, 64, 11,
-    226,229,236,239,247,227,237, 98,128,  3, 45,227,237, 98,128,  3,
-      2,108,  3, 64, 25, 64, 31, 64, 85,229,225,114,128, 35, 39,233,
-    227,107,  4, 64, 43, 64, 54, 64, 63, 64, 73,225,236,246,229,239,
-    236,225,114,128,  1,194,228,229,238,244,225,108,128,  1,192,236,
-    225,244,229,242,225,108,128,  1,193,242,229,244,242,239,230,236,
-    229,120,128,  1,195,245, 98,129, 38, 99, 64, 92,243,245,233,116,
-      2, 64,101, 64,109,226,236,225,227,107,128, 38, 99,247,232,233,
-    244,101,128, 38,103,109,  3, 64,125, 64,139, 64,150,227,245,226,
-    229,228,243,241,245,225,242,101,128, 51,164,239,238,239,243,240,
-    225,227,101,128,255, 67,243,241,245,225,242,229,228,243,241,245,
-    225,242,101,128, 51,160,111,  8, 64,184, 64,195, 65, 26, 65,224,
-     66,253, 67, 28, 67,135, 67,144,225,242,237,229,238,233,225,110,
-    128,  5,129,236,239,110,131,  0, 58, 64,207, 64,232, 64,251,237,
-    239,110,  2, 64,215, 64,223,229,244,225,242,121,128, 32,161,239,
-    243,240,225,227,101,128,255, 26,115,  2, 64,238, 64,244,233,231,
-    110,128, 32,161,237,225,236,108,128,254, 85,244,242,233,225,238,
-    231,245,236,225,114,  2, 65, 10, 65, 20,232,225,236,230,237,239,
-    100,128,  2,209,237,239,100,128,  2,208,109,  2, 65, 32, 65,217,
-    237, 97,134,  0, 44, 65, 49, 65,113, 65,124, 65,136, 65,166, 65,
-    189, 97,  3, 65, 57, 65, 83, 65, 91,226,239,246,101,  2, 65, 66,
-     65, 72,227,237, 98,128,  3, 19,242,233,231,232,244,227,237, 98,
-    128,  3, 21,227,227,229,238,116,128,246,195,114,  2, 65, 97, 65,
-    104,225,226,233, 99,128,  6, 12,237,229,238,233,225,110,128,  5,
-     93,233,238,230,229,242,233,239,114,128,246,225,237,239,238,239,
-    243,240,225,227,101,128,255, 12,242,229,246,229,242,243,229,100,
-      2, 65,149, 65,160,225,226,239,246,229,227,237, 98,128,  3, 20,
-    237,239,100,128,  2,189,115,  2, 65,172, 65,179,237,225,236,108,
-    128,254, 80,245,240,229,242,233,239,114,128,246,226,244,245,242,
-    238,229,100,  2, 65,200, 65,211,225,226,239,246,229,227,237, 98,
-    128,  3, 18,237,239,100,128,  2,187,240,225,243,115,128, 38, 60,
-    110,  2, 65,230, 65,239,231,242,245,229,238,116,128, 34, 69,116,
-      2, 65,245, 66,  3,239,245,242,233,238,244,229,231,242,225,108,
-    128, 34, 46,242,239,108,142, 35,  3, 66, 37, 66, 43, 66, 58, 66,
-     73, 66,117, 66,162, 66,176, 66,181, 66,186, 66,191, 66,197, 66,
-    202, 66,243, 66,248,193,195, 75,128,  0,  6, 66,  2, 66, 49, 66,
-     54,197, 76,128,  0,  7, 83,128,  0,  8, 67,  2, 66, 64, 66, 69,
-    193, 78,128,  0, 24, 82,128,  0, 13, 68,  3, 66, 81, 66,107, 66,
-    112, 67,  4, 66, 91, 66, 95, 66, 99, 66,103, 49,128,  0, 17, 50,
-    128,  0, 18, 51,128,  0, 19, 52,128,  0, 20,197, 76,128,  0,127,
-    204, 69,128,  0, 16, 69,  5, 66,129, 66,133, 66,138, 66,143, 66,
-    148, 77,128,  0, 25,206, 81,128,  0,  5,207, 84,128,  0,  4,211,
-     67,128,  0, 27, 84,  2, 66,154, 66,158, 66,128,  0, 23, 88,128,
-      0,  3, 70,  2, 66,168, 66,172, 70,128,  0, 12, 83,128,  0, 28,
-    199, 83,128,  0, 29,200, 84,128,  0,  9,204, 70,128,  0, 10,206,
-    193, 75,128,  0, 21,210, 83,128,  0, 30, 83,  5, 66,214, 66,218,
-     66,228, 66,233, 66,238, 73,128,  0, 15, 79,129,  0, 14, 66,224,
-     84,128,  0,  2,212, 88,128,  0,  1,213, 66,128,  0, 26,217, 78,
-    128,  0, 22,213, 83,128,  0, 31,214, 84,128,  0, 11,240,249,242,
-    233,231,232,116,129,  0,169, 67,  9,115,  2, 67, 15, 67, 21,225,
-    238,115,128,248,233,229,242,233,102,128,246,217,114,  2, 67, 34,
-     67,118,238,229,242,226,242,225,227,235,229,116,  2, 67, 49, 67,
-     83,236,229,230,116,130, 48, 12, 67, 60, 67, 72,232,225,236,230,
-    247,233,228,244,104,128,255, 98,246,229,242,244,233,227,225,108,
-    128,254, 65,242,233,231,232,116,130, 48, 13, 67, 95, 67,107,232,
-    225,236,230,247,233,228,244,104,128,255, 99,246,229,242,244,233,
-    227,225,108,128,254, 66,240,239,242,225,244,233,239,238,243,241,
-    245,225,242,101,128, 51,127,243,241,245,225,242,101,128, 51,199,
-    246,229,242,235,231,243,241,245,225,242,101,128, 51,198,240,225,
-    242,229,110,128, 36,158,242,245,250,229,233,242,111,128, 32,162,
-    243,244,242,229,244,227,232,229,100,128,  2,151,245,114,  2, 67,
-    195, 67,213,236,121,  2, 67,202, 67,208,225,238,100,128, 34,207,
-    239,114,128, 34,206,242,229,238,227,121,128,  0,164,249,114,  4,
-     67,232, 67,240, 67,247, 67,255,194,242,229,246,101,128,246,209,
-    198,236,229,120,128,246,210,226,242,229,246,101,128,246,212,230,
-    236,229,120,128,246,213,100,146,  0,100, 68, 46, 69,184, 70,208,
-     71, 12, 71,188, 72,142, 72,204, 73,133, 73,146, 73,155, 73,181,
-     73,206, 73,215, 75, 26, 75, 34, 75, 45, 75, 65, 75, 93, 97, 11,
-     68, 70, 68, 81, 68, 91, 68,163, 68,226, 68,237, 68,248, 69, 61,
-     69,123, 69,129, 69,159,225,242,237,229,238,233,225,110,128,  5,
-    100,226,229,238,231,225,236,105,128,  9,166,100,  5, 68,103, 68,
-    112, 68,118, 68,132, 68,148,225,242,225,226,233, 99,128,  6, 54,
-    229,246, 97,128,  9, 38,230,233,238,225,236,225,242,225,226,233,
-     99,128,254,190,233,238,233,244,233,225,236,225,242,225,226,233,
-     99,128,254,191,237,229,228,233,225,236,225,242,225,226,233, 99,
-    128,254,192,103,  3, 68,171, 68,188, 68,202,229,243,104,129,  5,
-    188, 68,179,232,229,226,242,229,119,128,  5,188,231,229,114,129,
-     32, 32, 68,196,228,226,108,128, 32, 33,117,  2, 68,208, 68,217,
-    234,225,242,225,244,105,128, 10,166,242,237,245,235,232,105,128,
-     10, 38,232,233,242,225,231,225,238, 97,128, 48, 96,235,225,244,
-    225,235,225,238, 97,128, 48,192,108,  3, 69,  0, 69,  9, 69, 47,
-    225,242,225,226,233, 99,128,  6, 47,229,116,130,  5,211, 69, 18,
-     69, 38,228,225,231,229,243,104,129,251, 51, 69, 29,232,229,226,
-    242,229,119,128,251, 51,232,229,226,242,229,119,128,  5,211,230,
-    233,238,225,236,225,242,225,226,233, 99,128,254,170,237,237, 97,
-      3, 69, 71, 69, 80, 69, 92,225,242,225,226,233, 99,128,  6, 79,
-    236,239,247,225,242,225,226,233, 99,128,  6, 79,244,225,238, 97,
-      2, 69,101, 69,115,236,244,239,238,229,225,242,225,226,233, 99,
-    128,  6, 76,242,225,226,233, 99,128,  6, 76,238,228, 97,128,  9,
-    100,242,231, 97,  2, 69,137, 69,146,232,229,226,242,229,119,128,
-      5,167,236,229,230,244,232,229,226,242,229,119,128,  5,167,243,
-    233,225,240,238,229,245,237,225,244,225,227,249,242,233,236,236,
-    233,227,227,237, 98,128,  4,133, 98,  3, 69,192, 70,189, 70,199,
-    108,  9, 69,212, 69,220, 70, 77, 70, 85, 70,101, 70,112, 70,130,
-     70,144, 70,155,199,242,225,246,101,128,246,211, 97,  2, 69,226,
-     70, 27,238,231,236,229,226,242,225,227,235,229,116,  2, 69,242,
-     70,  6,236,229,230,116,129, 48, 10, 69,251,246,229,242,244,233,
-    227,225,108,128,254, 61,242,233,231,232,116,129, 48, 11, 70, 16,
-    246,229,242,244,233,227,225,108,128,254, 62,114,  2, 70, 33, 70,
-     54,227,232,233,238,246,229,242,244,229,228,226,229,236,239,247,
-    227,237, 98,128,  3, 43,242,239,119,  2, 70, 62, 70, 69,236,229,
-    230,116,128, 33,212,242,233,231,232,116,128, 33,210,228,225,238,
-    228, 97,128,  9,101,231,242,225,246,101,129,246,214, 70, 95,227,
-    237, 98,128,  3, 15,233,238,244,229,231,242,225,108,128, 34, 44,
-    236,239,247,236,233,238,101,129, 32, 23, 70,124,227,237, 98,128,
-      3, 51,239,246,229,242,236,233,238,229,227,237, 98,128,  3, 63,
-    240,242,233,237,229,237,239,100,128,  2,186,246,229,242,244,233,
-    227,225,108,  2, 70,168, 70,174,226,225,114,128, 32, 22,236,233,
-    238,229,225,226,239,246,229,227,237, 98,128,  3, 14,239,240,239,
-    237,239,230,111,128, 49,  9,243,241,245,225,242,101,128, 51,200,
-     99,  4, 70,218, 70,225, 70,234, 71,  5,225,242,239,110,128,  1,
-     15,229,228,233,236,236, 97,128, 30, 17,233,242, 99,  2, 70,242,
-     70,247,236,101,128, 36,211,245,237,230,236,229,248,226,229,236,
-    239,119,128, 30, 19,242,239,225,116,128,  1, 17,100,  4, 71, 22,
-     71,103, 71,113, 71,164, 97,  4, 71, 32, 71, 42, 71, 49, 71, 74,
-    226,229,238,231,225,236,105,128,  9,161,228,229,246, 97,128,  9,
-     33,231,117,  2, 71, 56, 71, 65,234,225,242,225,244,105,128, 10,
-    161,242,237,245,235,232,105,128, 10, 33,108,  2, 71, 80, 71, 89,
-    225,242,225,226,233, 99,128,  6,136,230,233,238,225,236,225,242,
-    225,226,233, 99,128,251,137,228,232,225,228,229,246, 97,128,  9,
-     92,232, 97,  3, 71,122, 71,132, 71,139,226,229,238,231,225,236,
-    105,128,  9,162,228,229,246, 97,128,  9, 34,231,117,  2, 71,146,
-     71,155,234,225,242,225,244,105,128, 10,162,242,237,245,235,232,
-    105,128, 10, 34,239,116,  2, 71,171, 71,180,225,227,227,229,238,
-    116,128, 30, 11,226,229,236,239,119,128, 30, 13,101,  8, 71,206,
-     72,  3, 72, 10, 72, 35, 72, 45, 72, 56, 72,101, 72,137, 99,  2,
-     71,212, 71,249,233,237,225,236,243,229,240,225,242,225,244,239,
-    114,  2, 71,230, 71,239,225,242,225,226,233, 99,128,  6,107,240,
-    229,242,243,233,225,110,128,  6,107,249,242,233,236,236,233, 99,
-    128,  4, 52,231,242,229,101,128,  0,176,232,105,  2, 72, 17, 72,
-     26,232,229,226,242,229,119,128,  5,173,242,225,231,225,238, 97,
-    128, 48,103,233,227,239,240,244,233, 99,128,  3,239,235,225,244,
-    225,235,225,238, 97,128, 48,199,108,  2, 72, 62, 72, 85,229,244,
-    101,  2, 72, 70, 72, 77,236,229,230,116,128, 35, 43,242,233,231,
-    232,116,128, 35, 38,244, 97,129,  3,180, 72, 92,244,245,242,238,
-    229,100,128,  1,141,238,239,237,233,238,225,244,239,242,237,233,
-    238,245,243,239,238,229,238,245,237,229,242,225,244,239,242,226,
-    229,238,231,225,236,105,128,  9,248,250,104,128,  2,164,104,  2,
-     72,148, 72,198, 97,  3, 72,156, 72,166, 72,173,226,229,238,231,
-    225,236,105,128,  9,167,228,229,246, 97,128,  9, 39,231,117,  2,
-     72,180, 72,189,234,225,242,225,244,105,128, 10,167,242,237,245,
-    235,232,105,128, 10, 39,239,239,107,128,  2, 87,105,  6, 72,218,
-     73, 11, 73, 71, 73, 82, 73, 93, 73,103, 97,  2, 72,224, 72,246,
-    236,249,244,233,235,225,244,239,238,239,115,129,  3,133, 72,240,
-    227,237, 98,128,  3, 68,237,239,238,100,129, 38,102, 72,255,243,
-    245,233,244,247,232,233,244,101,128, 38, 98,229,242,229,243,233,
-    115,133,  0,168, 73, 30, 73, 38, 73, 49, 73, 55, 73, 63,225,227,
-    245,244,101,128,246,215,226,229,236,239,247,227,237, 98,128,  3,
-     36,227,237, 98,128,  3,  8,231,242,225,246,101,128,246,216,244,
-    239,238,239,115,128,  3,133,232,233,242,225,231,225,238, 97,128,
-     48, 98,235,225,244,225,235,225,238, 97,128, 48,194,244,244,239,
-    237,225,242,107,128, 48,  3,246,105,  2, 73,110, 73,121,228,101,
-    129,  0,247, 73,117,115,128, 34, 35,243,233,239,238,243,236,225,
-    243,104,128, 34, 21,234,229,227,249,242,233,236,236,233, 99,128,
-      4, 82,235,243,232,225,228,101,128, 37,147,108,  2, 73,161, 73,
-    172,233,238,229,226,229,236,239,119,128, 30, 15,243,241,245,225,
-    242,101,128, 51,151,109,  2, 73,187, 73,195,225,227,242,239,110,
-    128,  1, 17,239,238,239,243,240,225,227,101,128,255, 68,238,226,
-    236,239,227,107,128, 37,132,111, 10, 73,237, 73,249, 74,  3, 74,
-     14, 74, 25, 74, 97, 74,102, 74,113, 74,228, 74,254,227,232,225,
-    228,225,244,232,225,105,128, 14, 14,228,229,235,244,232,225,105,
-    128, 14, 20,232,233,242,225,231,225,238, 97,128, 48,105,235,225,
-    244,225,235,225,238, 97,128, 48,201,236,236,225,114,132,  0, 36,
-     74, 40, 74, 51, 74, 63, 74, 74,233,238,230,229,242,233,239,114,
-    128,246,227,237,239,238,239,243,240,225,227,101,128,255,  4,239,
-    236,228,243,244,249,236,101,128,247, 36,115,  2, 74, 80, 74, 87,
-    237,225,236,108,128,254,105,245,240,229,242,233,239,114,128,246,
-    228,238,103,128, 32,171,242,245,243,241,245,225,242,101,128, 51,
-     38,116,  6, 74,127, 74,144, 74,166, 74,177, 74,209, 74,216,225,
-    227,227,229,238,116,129,  2,217, 74,138,227,237, 98,128,  3,  7,
-    226,229,236,239,247, 99,  2, 74,155, 74,160,237, 98,128,  3, 35,
-    239,237, 98,128,  3, 35,235,225,244,225,235,225,238, 97,128, 48,
-    251,236,229,243,115,  2, 74,186, 74,190,105,128,  1, 49,106,129,
-    246,190, 74,196,243,244,242,239,235,229,232,239,239,107,128,  2,
-    132,237,225,244,104,128, 34,197,244,229,228,227,233,242,227,236,
-    101,128, 37,204,245,226,236,229,249,239,228,240,225,244,225,104,
-    129,251, 31, 74,245,232,229,226,242,229,119,128,251, 31,247,238,
-    244,225,227,107,  2, 75,  9, 75, 20,226,229,236,239,247,227,237,
-     98,128,  3, 30,237,239,100,128,  2,213,240,225,242,229,110,128,
-     36,159,243,245,240,229,242,233,239,114,128,246,235,116,  2, 75,
-     51, 75, 57,225,233,108,128,  2, 86,239,240,226,225,114,128,  1,
-    140,117,  2, 75, 71, 75, 82,232,233,242,225,231,225,238, 97,128,
-     48,101,235,225,244,225,235,225,238, 97,128, 48,197,122,132,  1,
-    243, 75,105, 75,114, 75,133, 75,170,225,236,244,239,238,101,128,
-      2,163, 99,  2, 75,120, 75,127,225,242,239,110,128,  1,198,245,
-    242,108,128,  2,165,101,  2, 75,139, 75,159,225,226,235,232,225,
-    243,233,225,238,227,249,242,233,236,236,233, 99,128,  4,225,227,
-    249,242,233,236,236,233, 99,128,  4, 85,232,229,227,249,242,233,
-    236,236,233, 99,128,  4, 95,101,151,  0,101, 75,233, 75,252, 76,
-     30, 77,  4, 77, 66, 77, 99, 77,111, 77,134, 77,187, 79, 43, 79,
-    101, 79,203, 80, 63, 80,198, 81, 17, 81, 48, 81,110, 81,163, 82,
-     98, 82,231, 82,251, 83, 39, 83,130, 97,  2, 75,239, 75,246,227,
-    245,244,101,128,  0,233,242,244,104,128, 38, 65, 98,  3, 76,  4,
-     76, 13, 76, 23,229,238,231,225,236,105,128,  9,143,239,240,239,
-    237,239,230,111,128, 49, 28,242,229,246,101,128,  1, 21, 99,  5,
-     76, 42, 76,115, 76,129, 76,161, 76,250, 97,  2, 76, 48, 76,109,
-    238,228,242, 97,  3, 76, 59, 76, 66, 76, 77,228,229,246, 97,128,
-      9, 13,231,245,234,225,242,225,244,105,128, 10,141,246,239,247,
-    229,236,243,233,231,110,  2, 76, 91, 76, 98,228,229,246, 97,128,
-      9, 69,231,245,234,225,242,225,244,105,128, 10,197,242,239,110,
-    128,  1, 27,229,228,233,236,236,225,226,242,229,246,101,128, 30,
-     29,104,  2, 76,135, 76,146,225,242,237,229,238,233,225,110,128,
-      5,101,249,233,247,238,225,242,237,229,238,233,225,110,128,  5,
-    135,233,242, 99,  2, 76,169, 76,174,236,101,128, 36,212,245,237,
-    230,236,229,120,134,  0,234, 76,195, 76,203, 76,211, 76,222, 76,
-    230, 76,242,225,227,245,244,101,128, 30,191,226,229,236,239,119,
-    128, 30, 25,228,239,244,226,229,236,239,119,128, 30,199,231,242,
-    225,246,101,128, 30,193,232,239,239,235,225,226,239,246,101,128,
-     30,195,244,233,236,228,101,128, 30,197,249,242,233,236,236,233,
-     99,128,  4, 84,100,  4, 77, 14, 77, 24, 77, 30, 77, 40,226,236,
-    231,242,225,246,101,128,  2,  5,229,246, 97,128,  9, 15,233,229,
-    242,229,243,233,115,128,  0,235,239,116,130,  1, 23, 77, 49, 77,
-     58,225,227,227,229,238,116,128,  1, 23,226,229,236,239,119,128,
-     30,185,101,  2, 77, 72, 77, 83,231,245,242,237,245,235,232,105,
-    128, 10, 15,237,225,244,242,225,231,245,242,237,245,235,232,105,
-    128, 10, 71,230,227,249,242,233,236,236,233, 99,128,  4, 68,103,
-      2, 77,117, 77,124,242,225,246,101,128,  0,232,245,234,225,242,
-    225,244,105,128, 10,143,104,  4, 77,144, 77,155, 77,166, 77,176,
-    225,242,237,229,238,233,225,110,128,  5,103,226,239,240,239,237,
-    239,230,111,128, 49, 29,233,242,225,231,225,238, 97,128, 48, 72,
-    239,239,235,225,226,239,246,101,128, 30,187,105,  4, 77,197, 77,
-    208, 79, 10, 79, 25,226,239,240,239,237,239,230,111,128, 49, 31,
-    231,232,116,142,  0, 56, 77,242, 77,251, 78,  5, 78, 35, 78, 42,
-     78, 80, 78,105, 78,150, 78,184, 78,196, 78,207, 78,240, 78,248,
-     79,  3,225,242,225,226,233, 99,128,  6,104,226,229,238,231,225,
-    236,105,128,  9,238,227,233,242,227,236,101,129, 36,103, 78, 16,
-    233,238,246,229,242,243,229,243,225,238,243,243,229,242,233,102,
-    128, 39,145,228,229,246, 97,128,  9,110,229,229,110,  2, 78, 50,
-     78, 59,227,233,242,227,236,101,128, 36,113,112,  2, 78, 65, 78,
-     72,225,242,229,110,128, 36,133,229,242,233,239,100,128, 36,153,
-    231,117,  2, 78, 87, 78, 96,234,225,242,225,244,105,128, 10,238,
-    242,237,245,235,232,105,128, 10,110,104,  2, 78,111, 78,137, 97,
-      2, 78,117, 78,128,227,235,225,242,225,226,233, 99,128,  6,104,
-    238,231,250,232,239,117,128, 48, 40,238,239,244,229,226,229,225,
-    237,229,100,128, 38,107,105,  2, 78,156, 78,174,228,229,239,231,
-    242,225,240,232,233,227,240,225,242,229,110,128, 50, 39,238,230,
-    229,242,233,239,114,128, 32,136,237,239,238,239,243,240,225,227,
-    101,128,255, 24,239,236,228,243,244,249,236,101,128,247, 56,112,
-      2, 78,213, 78,220,225,242,229,110,128, 36,123,229,114,  2, 78,
-    227, 78,233,233,239,100,128, 36,143,243,233,225,110,128,  6,248,
-    242,239,237,225,110,128, 33,119,243,245,240,229,242,233,239,114,
-    128, 32,120,244,232,225,105,128, 14, 88,238,246,229,242,244,229,
-    228,226,242,229,246,101,128,  2,  7,239,244,233,230,233,229,228,
-    227,249,242,233,236,236,233, 99,128,  4,101,107,  2, 79, 49, 79,
-     73,225,244,225,235,225,238, 97,129, 48,168, 79, 61,232,225,236,
-    230,247,233,228,244,104,128,255,116,111,  2, 79, 79, 79, 94,238,
-    235,225,242,231,245,242,237,245,235,232,105,128, 10,116,242,229,
-    225,110,128, 49, 84,108,  3, 79,109, 79,120, 79,181,227,249,242,
-    233,236,236,233, 99,128,  4, 59,101,  2, 79,126, 79,133,237,229,
-    238,116,128, 34,  8,246,229,110,  3, 79,143, 79,152, 79,173,227,
-    233,242,227,236,101,128, 36,106,112,  2, 79,158, 79,165,225,242,
-    229,110,128, 36,126,229,242,233,239,100,128, 36,146,242,239,237,
-    225,110,128, 33,122,236,233,240,243,233,115,129, 32, 38, 79,192,
-    246,229,242,244,233,227,225,108,128, 34,238,109,  5, 79,215, 79,
-    243, 79,254, 80, 18, 80, 29,225,227,242,239,110,130,  1, 19, 79,
-    227, 79,235,225,227,245,244,101,128, 30, 23,231,242,225,246,101,
-    128, 30, 21,227,249,242,233,236,236,233, 99,128,  4, 60,228,225,
-    243,104,129, 32, 20, 80,  7,246,229,242,244,233,227,225,108,128,
-    254, 49,239,238,239,243,240,225,227,101,128,255, 69,112,  2, 80,
-     35, 80, 55,232,225,243,233,243,237,225,242,235,225,242,237,229,
-    238,233,225,110,128,  5, 91,244,249,243,229,116,128, 34,  5,110,
-      6, 80, 77, 80, 88, 80, 99, 80,143, 80,175, 80,190,226,239,240,
-    239,237,239,230,111,128, 49, 35,227,249,242,233,236,236,233, 99,
-    128,  4, 61,100,  2, 80,105, 80,124,225,243,104,129, 32, 19, 80,
-    113,246,229,242,244,233,227,225,108,128,254, 50,229,243,227,229,
-    238,228,229,242,227,249,242,233,236,236,233, 99,128,  4,163,103,
-    130,  1, 75, 80,151, 80,162,226,239,240,239,237,239,230,111,128,
-     49, 37,232,229,227,249,242,233,236,236,233, 99,128,  4,165,232,
-    239,239,235,227,249,242,233,236,236,233, 99,128,  4,200,243,240,
-    225,227,101,128, 32,  2,111,  3, 80,206, 80,214, 80,223,231,239,
-    238,229,107,128,  1, 25,235,239,242,229,225,110,128, 49, 83,240,
-    229,110,130,  2, 91, 80,233, 80,242,227,236,239,243,229,100,128,
-      2,154,242,229,246,229,242,243,229,100,130,  2, 92, 81,  1, 81,
-     10,227,236,239,243,229,100,128,  2, 94,232,239,239,107,128,  2,
-     93,112,  2, 81, 23, 81, 30,225,242,229,110,128, 36,160,243,233,
-    236,239,110,129,  3,181, 81, 40,244,239,238,239,115,128,  3,173,
-    241,117,  2, 81, 55, 81, 99,225,108,130,  0, 61, 81, 64, 81, 76,
-    237,239,238,239,243,240,225,227,101,128,255, 29,115,  2, 81, 82,
-     81, 89,237,225,236,108,128,254,102,245,240,229,242,233,239,114,
-    128, 32,124,233,246,225,236,229,238,227,101,128, 34, 97,114,  3,
-     81,118, 81,129, 81,140,226,239,240,239,237,239,230,111,128, 49,
-     38,227,249,242,233,236,236,233, 99,128,  4, 64,229,246,229,242,
-    243,229,100,129,  2, 88, 81,152,227,249,242,233,236,236,233, 99,
-    128,  4, 77,115,  6, 81,177, 81,188, 81,208, 82, 33, 82, 78, 82,
-     88,227,249,242,233,236,236,233, 99,128,  4, 65,228,229,243,227,
-    229,238,228,229,242,227,249,242,233,236,236,233, 99,128,  4,171,
-    104,132,  2,131, 81,220, 81,227, 82,  2, 82, 17,227,245,242,108,
-    128,  2,134,239,242,116,  2, 81,235, 81,242,228,229,246, 97,128,
-      9, 14,246,239,247,229,236,243,233,231,238,228,229,246, 97,128,
-      9, 70,242,229,246,229,242,243,229,228,236,239,239,112,128,  1,
-    170,243,241,245,225,244,242,229,246,229,242,243,229,100,128,  2,
-    133,237,225,236,108,  2, 82, 42, 82, 53,232,233,242,225,231,225,
-    238, 97,128, 48, 71,235,225,244,225,235,225,238, 97,129, 48,167,
-     82, 66,232,225,236,230,247,233,228,244,104,128,255,106,244,233,
-    237,225,244,229,100,128, 33, 46,245,240,229,242,233,239,114,128,
-    246,236,116,  5, 82,110, 82,136, 82,140, 82,157, 82,223, 97,130,
-      3,183, 82,118, 82,128,242,237,229,238,233,225,110,128,  5,104,
-    244,239,238,239,115,128,  3,174,104,128,  0,240,233,236,228,101,
-    129, 30,189, 82,149,226,229,236,239,119,128, 30, 27,238,225,232,
-    244, 97,  3, 82,169, 82,201, 82,210,230,239,245,235,104,  2, 82,
-    179, 82,188,232,229,226,242,229,119,128,  5,145,236,229,230,244,
-    232,229,226,242,229,119,128,  5,145,232,229,226,242,229,119,128,
-      5,145,236,229,230,244,232,229,226,242,229,119,128,  5,145,245,
-    242,238,229,100,128,  1,221,117,  2, 82,237, 82,246,235,239,242,
-    229,225,110,128, 49, 97,242,111,128, 32,172,246,239,247,229,236,
-    243,233,231,110,  3, 83, 11, 83, 21, 83, 28,226,229,238,231,225,
-    236,105,128,  9,199,228,229,246, 97,128,  9, 71,231,245,234,225,
-    242,225,244,105,128, 10,199,120,  2, 83, 45, 83,118,227,236,225,
-    109,132,  0, 33, 83, 60, 83, 71, 83, 98, 83,110,225,242,237,229,
-    238,233,225,110,128,  5, 92,100,  2, 83, 77, 83, 82,226,108,128,
-     32, 60,239,247,110,129,  0,161, 83, 90,243,237,225,236,108,128,
-    247,161,237,239,238,239,243,240,225,227,101,128,255,  1,243,237,
-    225,236,108,128,247, 33,233,243,244,229,238,244,233,225,108,128,
-     34,  3,250,104,131,  2,146, 83,141, 83,160, 83,171, 99,  2, 83,
-    147, 83,154,225,242,239,110,128,  1,239,245,242,108,128,  2,147,
-    242,229,246,229,242,243,229,100,128,  1,185,244,225,233,108,128,
-      1,186,102,140,  0,102, 83,206, 84, 32, 84, 43, 84, 52, 84, 64,
-     84,167, 84,183, 86,191, 86,204, 86,230, 88,107, 88,115, 97,  4,
-     83,216, 83,223, 83,234, 83,245,228,229,246, 97,128,  9, 94,231,
-    245,242,237,245,235,232,105,128, 10, 94,232,242,229,238,232,229,
-    233,116,128, 33,  9,244,232, 97,  3, 83,255, 84,  8, 84, 20,225,
-    242,225,226,233, 99,128,  6, 78,236,239,247,225,242,225,226,233,
-     99,128,  6, 78,244,225,238,225,242,225,226,233, 99,128,  6, 75,
-    226,239,240,239,237,239,230,111,128, 49,  8,227,233,242,227,236,
-    101,128, 36,213,228,239,244,225,227,227,229,238,116,128, 30, 31,
-    101,  3, 84, 72, 84,150, 84,160,104,  4, 84, 82, 84,105, 84,119,
-     84,135,225,114,  2, 84, 89, 84, 96,225,226,233, 99,128,  6, 65,
-    237,229,238,233,225,110,128,  5,134,230,233,238,225,236,225,242,
-    225,226,233, 99,128,254,210,233,238,233,244,233,225,236,225,242,
-    225,226,233, 99,128,254,211,237,229,228,233,225,236,225,242,225,
-    226,233, 99,128,254,212,233,227,239,240,244,233, 99,128,  3,229,
-    237,225,236,101,128, 38, 64,102,130,251,  0, 84,175, 84,179,105,
-    128,251,  3,108,128,251,  4,105,136,251,  1, 84,203, 84,243, 84,
-    254, 85, 20, 85,142, 85,159, 85,167, 85,180,230,244,229,229,110,
-      2, 84,213, 84,222,227,233,242,227,236,101,128, 36,110,112,  2,
-     84,228, 84,235,225,242,229,110,128, 36,130,229,242,233,239,100,
-    128, 36,150,231,245,242,229,228,225,243,104,128, 32, 18,236,236,
-    229,100,  2, 85,  7, 85, 13,226,239,120,128, 37,160,242,229,227,
-    116,128, 37,172,238,225,108,  5, 85, 34, 85, 73, 85, 90, 85,107,
-     85,123,235,225,102,130,  5,218, 85, 44, 85, 64,228,225,231,229,
-    243,104,129,251, 58, 85, 55,232,229,226,242,229,119,128,251, 58,
-    232,229,226,242,229,119,128,  5,218,237,229,109,129,  5,221, 85,
-     81,232,229,226,242,229,119,128,  5,221,238,245,110,129,  5,223,
-     85, 98,232,229,226,242,229,119,128,  5,223,240,101,129,  5,227,
-     85,114,232,229,226,242,229,119,128,  5,227,244,243,225,228,105,
-    129,  5,229, 85,133,232,229,226,242,229,119,128,  5,229,242,243,
-    244,244,239,238,229,227,232,233,238,229,243,101,128,  2,201,243,
-    232,229,249,101,128, 37,201,244,225,227,249,242,233,236,236,233,
-     99,128,  4,115,246,101,142,  0, 53, 85,213, 85,222, 85,232, 86,
-      6, 86, 13, 86, 23, 86, 48, 86, 75, 86,109, 86,121, 86,132, 86,
-    165, 86,173, 86,184,225,242,225,226,233, 99,128,  6,101,226,229,
-    238,231,225,236,105,128,  9,235,227,233,242,227,236,101,129, 36,
-    100, 85,243,233,238,246,229,242,243,229,243,225,238,243,243,229,
-    242,233,102,128, 39,142,228,229,246, 97,128,  9,107,229,233,231,
-    232,244,232,115,128, 33, 93,231,117,  2, 86, 30, 86, 39,234,225,
-    242,225,244,105,128, 10,235,242,237,245,235,232,105,128, 10,107,
-    232, 97,  2, 86, 55, 86, 66,227,235,225,242,225,226,233, 99,128,
-      6,101,238,231,250,232,239,117,128, 48, 37,105,  2, 86, 81, 86,
-     99,228,229,239,231,242,225,240,232,233,227,240,225,242,229,110,
-    128, 50, 36,238,230,229,242,233,239,114,128, 32,133,237,239,238,
-    239,243,240,225,227,101,128,255, 21,239,236,228,243,244,249,236,
-    101,128,247, 53,112,  2, 86,138, 86,145,225,242,229,110,128, 36,
-    120,229,114,  2, 86,152, 86,158,233,239,100,128, 36,140,243,233,
-    225,110,128,  6,245,242,239,237,225,110,128, 33,116,243,245,240,
-    229,242,233,239,114,128, 32,117,244,232,225,105,128, 14, 85,108,
-    129,251,  2, 86,197,239,242,233,110,128,  1,146,109,  2, 86,210,
-     86,221,239,238,239,243,240,225,227,101,128,255, 70,243,241,245,
-    225,242,101,128, 51,153,111,  4, 86,240, 87,  6, 87, 18, 87, 25,
-    230, 97,  2, 86,247, 86,255,238,244,232,225,105,128, 14, 31,244,
-    232,225,105,128, 14, 29,238,231,237,225,238,244,232,225,105,128,
-     14, 79,242,225,236,108,128, 34,  0,245,114,142,  0, 52, 87, 58,
-     87, 67, 87, 77, 87,107, 87,114, 87,139, 87,166, 87,200, 87,212,
-     87,231, 87,242, 88, 19, 88, 27, 88, 38,225,242,225,226,233, 99,
-    128,  6,100,226,229,238,231,225,236,105,128,  9,234,227,233,242,
-    227,236,101,129, 36, 99, 87, 88,233,238,246,229,242,243,229,243,
-    225,238,243,243,229,242,233,102,128, 39,141,228,229,246, 97,128,
-      9,106,231,117,  2, 87,121, 87,130,234,225,242,225,244,105,128,
-     10,234,242,237,245,235,232,105,128, 10,106,232, 97,  2, 87,146,
-     87,157,227,235,225,242,225,226,233, 99,128,  6,100,238,231,250,
-    232,239,117,128, 48, 36,105,  2, 87,172, 87,190,228,229,239,231,
-    242,225,240,232,233,227,240,225,242,229,110,128, 50, 35,238,230,
-    229,242,233,239,114,128, 32,132,237,239,238,239,243,240,225,227,
-    101,128,255, 20,238,245,237,229,242,225,244,239,242,226,229,238,
-    231,225,236,105,128,  9,247,239,236,228,243,244,249,236,101,128,
-    247, 52,112,  2, 87,248, 87,255,225,242,229,110,128, 36,119,229,
-    114,  2, 88,  6, 88, 12,233,239,100,128, 36,139,243,233,225,110,
-    128,  6,244,242,239,237,225,110,128, 33,115,243,245,240,229,242,
-    233,239,114,128, 32,116,116,  2, 88, 44, 88, 82,229,229,110,  2,
-     88, 52, 88, 61,227,233,242,227,236,101,128, 36,109,112,  2, 88,
-     67, 88, 74,225,242,229,110,128, 36,129,229,242,233,239,100,128,
-     36,149,104,  2, 88, 88, 88, 93,225,105,128, 14, 84,244,239,238,
-    229,227,232,233,238,229,243,101,128,  2,203,240,225,242,229,110,
-    128, 36,161,242, 97,  2, 88,122, 88,130,227,244,233,239,110,128,
-     32, 68,238, 99,128, 32,163,103,144,  0,103, 88,171, 89,117, 89,
-    140, 89,201, 89,218, 90,139, 91,132, 91,217, 91,230, 92, 88, 92,
-    113, 92,141, 92,163, 93,108, 93,130, 93,232, 97,  9, 88,191, 88,
-    201, 88,208, 88,215, 89, 23, 89, 48, 89, 59, 89, 70, 89,104,226,
-    229,238,231,225,236,105,128,  9,151,227,245,244,101,128,  1,245,
-    228,229,246, 97,128,  9, 23,102,  4, 88,225, 88,234, 88,248, 89,
-      8,225,242,225,226,233, 99,128,  6,175,230,233,238,225,236,225,
-    242,225,226,233, 99,128,251,147,233,238,233,244,233,225,236,225,
-    242,225,226,233, 99,128,251,148,237,229,228,233,225,236,225,242,
-    225,226,233, 99,128,251,149,231,117,  2, 89, 30, 89, 39,234,225,
-    242,225,244,105,128, 10,151,242,237,245,235,232,105,128, 10, 23,
-    232,233,242,225,231,225,238, 97,128, 48, 76,235,225,244,225,235,
-    225,238, 97,128, 48,172,237,237, 97,130,  3,179, 89, 80, 89, 93,
-    236,225,244,233,238,243,237,225,236,108,128,  2, 99,243,245,240,
-    229,242,233,239,114,128,  2,224,238,231,233,225,227,239,240,244,
-    233, 99,128,  3,235, 98,  2, 89,123, 89,133,239,240,239,237,239,
-    230,111,128, 49, 13,242,229,246,101,128,  1, 31, 99,  4, 89,150,
-     89,157, 89,166, 89,188,225,242,239,110,128,  1,231,229,228,233,
-    236,236, 97,128,  1, 35,233,242, 99,  2, 89,174, 89,179,236,101,
-    128, 36,214,245,237,230,236,229,120,128,  1, 29,239,237,237,225,
-    225,227,227,229,238,116,128,  1, 35,228,239,116,129,  1, 33, 89,
-    209,225,227,227,229,238,116,128,  1, 33,101,  6, 89,232, 89,243,
-     89,254, 90,  9, 90, 28, 90,130,227,249,242,233,236,236,233, 99,
-    128,  4, 51,232,233,242,225,231,225,238, 97,128, 48, 82,235,225,
-    244,225,235,225,238, 97,128, 48,178,239,237,229,244,242,233,227,
-    225,236,236,249,229,241,245,225,108,128, 34, 81,114,  3, 90, 36,
-     90, 85, 90, 95,229,243,104,  3, 90, 46, 90, 61, 90, 70,225,227,
-    227,229,238,244,232,229,226,242,229,119,128,  5,156,232,229,226,
-    242,229,119,128,  5,243,237,245,241,228,225,237,232,229,226,242,
-    229,119,128,  5,157,237,225,238,228,226,236,115,128,  0,223,243,
-    232,225,249,233,109,  2, 90,106, 90,121,225,227,227,229,238,244,
-    232,229,226,242,229,119,128,  5,158,232,229,226,242,229,119,128,
-      5,244,244,225,237,225,242,107,128, 48, 19,104,  5, 90,151, 91,
-     28, 91, 91, 91,116, 91,122, 97,  4, 90,161, 90,171, 90,194, 90,
-    219,226,229,238,231,225,236,105,128,  9,152,100,  2, 90,177, 90,
-    188,225,242,237,229,238,233,225,110,128,  5,114,229,246, 97,128,
-      9, 24,231,117,  2, 90,201, 90,210,234,225,242,225,244,105,128,
-     10,152,242,237,245,235,232,105,128, 10, 24,233,110,  4, 90,230,
-     90,239, 90,253, 91, 13,225,242,225,226,233, 99,128,  6, 58,230,
-    233,238,225,236,225,242,225,226,233, 99,128,254,206,233,238,233,
-    244,233,225,236,225,242,225,226,233, 99,128,254,207,237,229,228,
-    233,225,236,225,242,225,226,233, 99,128,254,208,101,  3, 91, 36,
-     91, 57, 91, 74,237,233,228,228,236,229,232,239,239,235,227,249,
-    242,233,236,236,233, 99,128,  4,149,243,244,242,239,235,229,227,
-    249,242,233,236,236,233, 99,128,  4,147,245,240,244,245,242,238,
-    227,249,242,233,236,236,233, 99,128,  4,145,232, 97,  2, 91, 98,
-     91,105,228,229,246, 97,128,  9, 90,231,245,242,237,245,235,232,
-    105,128, 10, 90,239,239,107,128,  2, 96,250,243,241,245,225,242,
-    101,128, 51,147,105,  3, 91,140, 91,151, 91,162,232,233,242,225,
-    231,225,238, 97,128, 48, 78,235,225,244,225,235,225,238, 97,128,
-     48,174,109,  2, 91,168, 91,179,225,242,237,229,238,233,225,110,
-    128,  5, 99,229,108,130,  5,210, 91,188, 91,208,228,225,231,229,
-    243,104,129,251, 50, 91,199,232,229,226,242,229,119,128,251, 50,
-    232,229,226,242,229,119,128,  5,210,234,229,227,249,242,233,236,
-    236,233, 99,128,  4, 83,236,239,244,244,225,108,  2, 91,241, 92,
-      2,233,238,246,229,242,244,229,228,243,244,242,239,235,101,128,
-      1,190,243,244,239,112,132,  2,148, 92, 17, 92, 28, 92, 34, 92,
-     66,233,238,246,229,242,244,229,100,128,  2,150,237,239,100,128,
-      2,192,242,229,246,229,242,243,229,100,130,  2,149, 92, 49, 92,
-     55,237,239,100,128,  2,193,243,245,240,229,242,233,239,114,128,
-      2,228,243,244,242,239,235,101,129,  2,161, 92, 77,242,229,246,
-    229,242,243,229,100,128,  2,162,109,  2, 92, 94, 92,102,225,227,
-    242,239,110,128, 30, 33,239,238,239,243,240,225,227,101,128,255,
-     71,111,  2, 92,119, 92,130,232,233,242,225,231,225,238, 97,128,
-     48, 84,235,225,244,225,235,225,238, 97,128, 48,180,240, 97,  2,
-     92,148, 92,154,242,229,110,128, 36,162,243,241,245,225,242,101,
-    128, 51,172,114,  2, 92,169, 93, 10, 97,  2, 92,175, 92,183,228,
-    233,229,238,116,128, 34,  7,246,101,134,  0, 96, 92,200, 92,211,
-     92,228, 92,235, 92,244, 93,  0,226,229,236,239,247,227,237, 98,
-    128,  3, 22, 99,  2, 92,217, 92,222,237, 98,128,  3,  0,239,237,
-     98,128,  3,  0,228,229,246, 97,128,  9, 83,236,239,247,237,239,
-    100,128,  2,206,237,239,238,239,243,240,225,227,101,128,255, 64,
-    244,239,238,229,227,237, 98,128,  3, 64,229,225,244,229,114,132,
-      0, 62, 93, 26, 93, 45, 93, 57, 93,100,229,241,245,225,108,129,
-     34,101, 93, 36,239,242,236,229,243,115,128, 34,219,237,239,238,
-    239,243,240,225,227,101,128,255, 30,111,  2, 93, 63, 93, 89,114,
-      2, 93, 69, 93, 82,229,241,245,233,246,225,236,229,238,116,128,
-     34,115,236,229,243,115,128, 34,119,246,229,242,229,241,245,225,
-    108,128, 34,103,243,237,225,236,108,128,254,101,115,  2, 93,114,
-     93,122,227,242,233,240,116,128,  2, 97,244,242,239,235,101,128,
-      1,229,117,  4, 93,140, 93,151, 93,208, 93,219,232,233,242,225,
-    231,225,238, 97,128, 48, 80,233,108,  2, 93,158, 93,183,236,229,
-    237,239,116,  2, 93,168, 93,175,236,229,230,116,128,  0,171,242,
-    233,231,232,116,128,  0,187,243,233,238,231,108,  2, 93,193, 93,
-    200,236,229,230,116,128, 32, 57,242,233,231,232,116,128, 32, 58,
-    235,225,244,225,235,225,238, 97,128, 48,176,242,225,237,245,243,
-    241,245,225,242,101,128, 51, 24,249,243,241,245,225,242,101,128,
-     51,201,104,144,  0,104, 94, 22, 96,164, 96,199, 96,236, 97, 20,
-     98,164, 98,184, 99,149, 99,161, 99,173,100,241,100,249,101,  4,
-    101, 13,101, 93,101, 97, 97, 13, 94, 50, 94, 89, 94, 99, 94,129,
-     94,154, 94,232, 94,244, 95, 13, 95, 28, 95, 57, 95, 70, 95,128,
-     95,137, 97,  2, 94, 56, 94, 75,226,235,232,225,243,233,225,238,
-    227,249,242,233,236,236,233, 99,128,  4,169,236,244,239,238,229,
-    225,242,225,226,233, 99,128,  6,193,226,229,238,231,225,236,105,
-    128,  9,185,228,101,  2, 94,106, 94,124,243,227,229,238,228,229,
-    242,227,249,242,233,236,236,233, 99,128,  4,179,246, 97,128,  9,
-     57,231,117,  2, 94,136, 94,145,234,225,242,225,244,105,128, 10,
-    185,242,237,245,235,232,105,128, 10, 57,104,  4, 94,164, 94,173,
-     94,187, 94,217,225,242,225,226,233, 99,128,  6, 45,230,233,238,
-    225,236,225,242,225,226,233, 99,128,254,162,105,  2, 94,193, 94,
-    208,238,233,244,233,225,236,225,242,225,226,233, 99,128,254,163,
-    242,225,231,225,238, 97,128, 48,111,237,229,228,233,225,236,225,
-    242,225,226,233, 99,128,254,164,233,244,245,243,241,245,225,242,
-    101,128, 51, 42,235,225,244,225,235,225,238, 97,129, 48,207, 95,
-      1,232,225,236,230,247,233,228,244,104,128,255,138,236,225,238,
-    244,231,245,242,237,245,235,232,105,128, 10, 77,237,250, 97,  2,
-     95, 36, 95, 45,225,242,225,226,233, 99,128,  6, 33,236,239,247,
-    225,242,225,226,233, 99,128,  6, 33,238,231,245,236,230,233,236,
-    236,229,114,128, 49,100,114,  2, 95, 76, 95, 92,228,243,233,231,
-    238,227,249,242,233,236,236,233, 99,128,  4, 74,240,239,239,110,
-      2, 95,101, 95,114,236,229,230,244,226,225,242,226,245,112,128,
-     33,188,242,233,231,232,244,226,225,242,226,245,112,128, 33,192,
-    243,241,245,225,242,101,128, 51,202,244,225,102,  3, 95,147, 95,
-    239, 96, 74,240,225,244,225,104,134,  5,178, 95,167, 95,172, 95,
-    186, 95,195, 95,210, 95,226,177, 54,128,  5,178, 50,  2, 95,178,
-     95,182, 51,128,  5,178,102,128,  5,178,232,229,226,242,229,119,
-    128,  5,178,238,225,242,242,239,247,232,229,226,242,229,119,128,
-      5,178,241,245,225,242,244,229,242,232,229,226,242,229,119,128,
-      5,178,247,233,228,229,232,229,226,242,229,119,128,  5,178,241,
-    225,237,225,244,115,135,  5,179, 96,  6, 96, 11, 96, 16, 96, 21,
-     96, 30, 96, 45, 96, 61,177, 98,128,  5,179,178, 56,128,  5,179,
-    179, 52,128,  5,179,232,229,226,242,229,119,128,  5,179,238,225,
-    242,242,239,247,232,229,226,242,229,119,128,  5,179,241,245,225,
-    242,244,229,242,232,229,226,242,229,119,128,  5,179,247,233,228,
-    229,232,229,226,242,229,119,128,  5,179,243,229,231,239,108,135,
-      5,177, 96, 96, 96,101, 96,106, 96,111, 96,120, 96,135, 96,151,
-    177, 55,128,  5,177,178, 52,128,  5,177,179, 48,128,  5,177,232,
-    229,226,242,229,119,128,  5,177,238,225,242,242,239,247,232,229,
-    226,242,229,119,128,  5,177,241,245,225,242,244,229,242,232,229,
-    226,242,229,119,128,  5,177,247,233,228,229,232,229,226,242,229,
-    119,128,  5,177, 98,  3, 96,172, 96,177, 96,187,225,114,128,  1,
-     39,239,240,239,237,239,230,111,128, 49, 15,242,229,246,229,226,
-    229,236,239,119,128, 30, 43, 99,  2, 96,205, 96,214,229,228,233,
-    236,236, 97,128, 30, 41,233,242, 99,  2, 96,222, 96,227,236,101,
-    128, 36,215,245,237,230,236,229,120,128,  1, 37,100,  2, 96,242,
-     96,252,233,229,242,229,243,233,115,128, 30, 39,239,116,  2, 97,
-      3, 97, 12,225,227,227,229,238,116,128, 30, 35,226,229,236,239,
-    119,128, 30, 37,101,136,  5,212, 97, 40, 97, 73, 97, 93, 98, 66,
-     98, 82, 98,127, 98,136, 98,149,225,242,116,129, 38,101, 97, 48,
-    243,245,233,116,  2, 97, 57, 97, 65,226,236,225,227,107,128, 38,
-    101,247,232,233,244,101,128, 38, 97,228,225,231,229,243,104,129,
-    251, 52, 97, 84,232,229,226,242,229,119,128,251, 52,104,  6, 97,
-    107, 97,135, 97,143, 97,193, 97,239, 98, 32, 97,  2, 97,113, 97,
-    127,236,244,239,238,229,225,242,225,226,233, 99,128,  6,193,242,
-    225,226,233, 99,128,  6, 71,229,226,242,229,119,128,  5,212,230,
-    233,238,225,236, 97,  2, 97,154, 97,185,236,116,  2, 97,161, 97,
-    173,239,238,229,225,242,225,226,233, 99,128,251,167,244,247,239,
-    225,242,225,226,233, 99,128,254,234,242,225,226,233, 99,128,254,
-    234,232,225,237,250,225,225,226,239,246,101,  2, 97,208, 97,222,
-    230,233,238,225,236,225,242,225,226,233, 99,128,251,165,233,243,
-    239,236,225,244,229,228,225,242,225,226,233, 99,128,251,164,105,
-      2, 97,245, 98, 23,238,233,244,233,225,236, 97,  2, 98,  1, 98,
-     15,236,244,239,238,229,225,242,225,226,233, 99,128,251,168,242,
-    225,226,233, 99,128,254,235,242,225,231,225,238, 97,128, 48,120,
-    237,229,228,233,225,236, 97,  2, 98, 44, 98, 58,236,244,239,238,
-    229,225,242,225,226,233, 99,128,251,169,242,225,226,233, 99,128,
-    254,236,233,243,229,233,229,242,225,243,241,245,225,242,101,128,
-     51,123,107,  2, 98, 88, 98,112,225,244,225,235,225,238, 97,129,
-     48,216, 98,100,232,225,236,230,247,233,228,244,104,128,255,141,
-    245,244,225,225,242,245,243,241,245,225,242,101,128, 51, 54,238,
-    231,232,239,239,107,128,  2,103,242,245,244,245,243,241,245,225,
-    242,101,128, 51, 57,116,129,  5,215, 98,155,232,229,226,242,229,
-    119,128,  5,215,232,239,239,107,129,  2,102, 98,173,243,245,240,
-    229,242,233,239,114,128,  2,177,105,  4, 98,194, 99, 23, 99, 34,
-     99, 59,229,245,104,  4, 98,206, 98,241, 99,  0, 99,  9, 97,  2,
-     98,212, 98,227,227,233,242,227,236,229,235,239,242,229,225,110,
-    128, 50,123,240,225,242,229,238,235,239,242,229,225,110,128, 50,
-     27,227,233,242,227,236,229,235,239,242,229,225,110,128, 50,109,
-    235,239,242,229,225,110,128, 49, 78,240,225,242,229,238,235,239,
-    242,229,225,110,128, 50, 13,232,233,242,225,231,225,238, 97,128,
-     48,114,235,225,244,225,235,225,238, 97,129, 48,210, 99, 47,232,
-    225,236,230,247,233,228,244,104,128,255,139,242,233,113,134,  5,
-    180, 99, 77, 99, 82, 99, 96, 99,105, 99,120, 99,136,177, 52,128,
-      5,180, 50,  2, 99, 88, 99, 92, 49,128,  5,180,100,128,  5,180,
-    232,229,226,242,229,119,128,  5,180,238,225,242,242,239,247,232,
-    229,226,242,229,119,128,  5,180,241,245,225,242,244,229,242,232,
-    229,226,242,229,119,128,  5,180,247,233,228,229,232,229,226,242,
-    229,119,128,  5,180,236,233,238,229,226,229,236,239,119,128, 30,
-    150,237,239,238,239,243,240,225,227,101,128,255, 72,111,  9, 99,
-    193, 99,204, 99,228, 99,253,100, 85,100, 98,100,184,100,224,100,
-    235,225,242,237,229,238,233,225,110,128,  5,112,232,105,  2, 99,
-    211, 99,219,240,244,232,225,105,128, 14, 43,242,225,231,225,238,
-     97,128, 48,123,235,225,244,225,235,225,238, 97,129, 48,219, 99,
-    241,232,225,236,230,247,233,228,244,104,128,255,142,236,225,109,
-    135,  5,185,100, 17,100, 22,100, 27,100, 32,100, 41,100, 56,100,
-     72,177, 57,128,  5,185,178, 54,128,  5,185,179, 50,128,  5,185,
-    232,229,226,242,229,119,128,  5,185,238,225,242,242,239,247,232,
-    229,226,242,229,119,128,  5,185,241,245,225,242,244,229,242,232,
-    229,226,242,229,119,128,  5,185,247,233,228,229,232,229,226,242,
-    229,119,128,  5,185,238,239,235,232,245,235,244,232,225,105,128,
-     14, 46,111,  2,100,104,100,174,107,  4,100,114,100,126,100,132,
-    100,154,225,226,239,246,229,227,239,237, 98,128,  3,  9,227,237,
-     98,128,  3,  9,240,225,236,225,244,225,236,233,250,229,228,226,
-    229,236,239,247,227,237, 98,128,  3, 33,242,229,244,242,239,230,
-    236,229,248,226,229,236,239,247,227,237, 98,128,  3, 34,238,243,
-    241,245,225,242,101,128, 51, 66,114,  2,100,190,100,217,105,  2,
-    100,196,100,205,227,239,240,244,233, 99,128,  3,233,250,239,238,
-    244,225,236,226,225,114,128, 32, 21,238,227,237, 98,128,  3, 27,
-    244,243,240,242,233,238,231,115,128, 38,104,245,243,101,128, 35,
-      2,240,225,242,229,110,128, 36,163,243,245,240,229,242,233,239,
-    114,128,  2,176,244,245,242,238,229,100,128,  2,101,117,  4,101,
-     23,101, 34,101, 47,101, 72,232,233,242,225,231,225,238, 97,128,
-     48,117,233,233,244,239,243,241,245,225,242,101,128, 51, 51,235,
-    225,244,225,235,225,238, 97,129, 48,213,101, 60,232,225,236,230,
-    247,233,228,244,104,128,255,140,238,231,225,242,245,237,236,225,
-    245,116,129,  2,221,101, 87,227,237, 98,128,  3, 11,118,128,  1,
-    149,249,240,232,229,110,132,  0, 45,101,113,101,124,101,136,101,
-    159,233,238,230,229,242,233,239,114,128,246,229,237,239,238,239,
-    243,240,225,227,101,128,255, 13,115,  2,101,142,101,149,237,225,
-    236,108,128,254, 99,245,240,229,242,233,239,114,128,246,230,244,
-    247,111,128, 32, 16,105,149,  0,105,101,211,101,234,102, 12,102,
-     59,105,197,106, 61,106, 98,106,125,107, 31,107, 35,107, 73,107,
-     95,107,179,108, 88,108,163,108,171,108,184,109, 15,109, 72,109,
-    100,109,144,225, 99,  2,101,218,101,224,245,244,101,128,  0,237,
-    249,242,233,236,236,233, 99,128,  4, 79, 98,  3,101,242,101,251,
-    102,  5,229,238,231,225,236,105,128,  9,135,239,240,239,237,239,
-    230,111,128, 49, 39,242,229,246,101,128,  1, 45, 99,  3,102, 20,
-    102, 27,102, 49,225,242,239,110,128,  1,208,233,242, 99,  2,102,
-     35,102, 40,236,101,128, 36,216,245,237,230,236,229,120,128,  0,
-    238,249,242,233,236,236,233, 99,128,  4, 86,100,  4,102, 69,102,
-     79,105,154,105,187,226,236,231,242,225,246,101,128,  2,  9,101,
-      2,102, 85,105,149,239,231,242,225,240,104,  7,102,106,102,120,
-    102,133,105, 62,105, 93,105,106,105,118,229,225,242,244,232,227,
-    233,242,227,236,101,128, 50,143,230,233,242,229,227,233,242,227,
-    236,101,128, 50,139,233, 99, 14,102,164,102,180,103, 23,103, 77,
-    103,143,103,172,103,188,103,245,104, 38,104, 50,104, 77,104,144,
-    105, 26,105, 55,225,236,236,233,225,238,227,229,240,225,242,229,
-    110,128, 50, 63, 99,  4,102,190,102,201,102,215,102,222,225,236,
-    236,240,225,242,229,110,128, 50, 58,229,238,244,242,229,227,233,
-    242,227,236,101,128, 50,165,236,239,243,101,128, 48,  6,111,  3,
-    102,230,102,245,103,  9,237,237, 97,129, 48,  1,102,238,236,229,
-    230,116,128,255,100,238,231,242,225,244,245,236,225,244,233,239,
-    238,240,225,242,229,110,128, 50, 55,242,242,229,227,244,227,233,
-    242,227,236,101,128, 50,163,101,  3,103, 31,103, 43,103, 60,225,
-    242,244,232,240,225,242,229,110,128, 50, 47,238,244,229,242,240,
-    242,233,243,229,240,225,242,229,110,128, 50, 61,248,227,229,236,
-    236,229,238,244,227,233,242,227,236,101,128, 50,157,102,  2,103,
-     83,103, 98,229,243,244,233,246,225,236,240,225,242,229,110,128,
-     50, 64,105,  2,103,104,103,133,238,225,238,227,233,225,108,  2,
-    103,116,103,125,227,233,242,227,236,101,128, 50,150,240,225,242,
-    229,110,128, 50, 54,242,229,240,225,242,229,110,128, 50, 43,104,
-      2,103,149,103,160,225,246,229,240,225,242,229,110,128, 50, 50,
-    233,231,232,227,233,242,227,236,101,128, 50,164,233,244,229,242,
-    225,244,233,239,238,237,225,242,107,128, 48,  5,108,  3,103,196,
-    103,222,103,234,225,226,239,114,  2,103,205,103,214,227,233,242,
-    227,236,101,128, 50,152,240,225,242,229,110,128, 50, 56,229,230,
-    244,227,233,242,227,236,101,128, 50,167,239,247,227,233,242,227,
-    236,101,128, 50,166,109,  2,103,251,104, 27,101,  2,104,  1,104,
-     16,228,233,227,233,238,229,227,233,242,227,236,101,128, 50,169,
-    244,225,236,240,225,242,229,110,128, 50, 46,239,239,238,240,225,
-    242,229,110,128, 50, 42,238,225,237,229,240,225,242,229,110,128,
-     50, 52,112,  2,104, 56,104, 64,229,242,233,239,100,128, 48,  2,
-    242,233,238,244,227,233,242,227,236,101,128, 50,158,114,  2,104,
-     83,104,131,101,  3,104, 91,104,102,104,117,225,227,232,240,225,
-    242,229,110,128, 50, 67,240,242,229,243,229,238,244,240,225,242,
-    229,110,128, 50, 57,243,239,245,242,227,229,240,225,242,229,110,
-    128, 50, 62,233,231,232,244,227,233,242,227,236,101,128, 50,168,
-    115,  5,104,156,104,185,104,199,104,224,104,252,101,  2,104,162,
-    104,175,227,242,229,244,227,233,242,227,236,101,128, 50,153,236,
-    230,240,225,242,229,110,128, 50, 66,239,227,233,229,244,249,240,
-    225,242,229,110,128, 50, 51,112,  2,104,205,104,211,225,227,101,
-    128, 48,  0,229,227,233,225,236,240,225,242,229,110,128, 50, 53,
-    116,  2,104,230,104,241,239,227,235,240,225,242,229,110,128, 50,
-     49,245,228,249,240,225,242,229,110,128, 50, 59,117,  2,105,  2,
-    105, 11,238,240,225,242,229,110,128, 50, 48,240,229,242,246,233,
-    243,229,240,225,242,229,110,128, 50, 60,119,  2,105, 32,105, 44,
-    225,244,229,242,240,225,242,229,110,128, 50, 44,239,239,228,240,
-    225,242,229,110,128, 50, 45,250,229,242,111,128, 48,  7,109,  2,
-    105, 68,105, 81,229,244,225,236,227,233,242,227,236,101,128, 50,
-    142,239,239,238,227,233,242,227,236,101,128, 50,138,238,225,237,
-    229,227,233,242,227,236,101,128, 50,148,243,245,238,227,233,242,
-    227,236,101,128, 50,144,119,  2,105,124,105,137,225,244,229,242,
-    227,233,242,227,236,101,128, 50,140,239,239,228,227,233,242,227,
-    236,101,128, 50,141,246, 97,128,  9,  7,233,229,242,229,243,233,
-    115,130,  0,239,105,168,105,176,225,227,245,244,101,128, 30, 47,
-    227,249,242,233,236,236,233, 99,128,  4,229,239,244,226,229,236,
-    239,119,128, 30,203,101,  3,105,205,105,221,105,232,226,242,229,
-    246,229,227,249,242,233,236,236,233, 99,128,  4,215,227,249,242,
-    233,236,236,233, 99,128,  4, 53,245,238,103,  4,105,244,106, 23,
-    106, 38,106, 47, 97,  2,105,250,106,  9,227,233,242,227,236,229,
-    235,239,242,229,225,110,128, 50,117,240,225,242,229,238,235,239,
-    242,229,225,110,128, 50, 21,227,233,242,227,236,229,235,239,242,
-    229,225,110,128, 50,103,235,239,242,229,225,110,128, 49, 71,240,
-    225,242,229,238,235,239,242,229,225,110,128, 50,  7,103,  2,106,
-     67,106, 74,242,225,246,101,128,  0,236,117,  2,106, 80,106, 89,
-    234,225,242,225,244,105,128, 10,135,242,237,245,235,232,105,128,
-     10,  7,104,  2,106,104,106,114,233,242,225,231,225,238, 97,128,
-     48, 68,239,239,235,225,226,239,246,101,128, 30,201,105,  8,106,
-    143,106,153,106,164,106,171,106,196,106,212,106,227,106,243,226,
-    229,238,231,225,236,105,128,  9,136,227,249,242,233,236,236,233,
-     99,128,  4, 56,228,229,246, 97,128,  9,  8,231,117,  2,106,178,
-    106,187,234,225,242,225,244,105,128, 10,136,242,237,245,235,232,
-    105,128, 10,  8,237,225,244,242,225,231,245,242,237,245,235,232,
-    105,128, 10, 64,238,246,229,242,244,229,228,226,242,229,246,101,
-    128,  2, 11,243,232,239,242,244,227,249,242,233,236,236,233, 99,
-    128,  4, 57,246,239,247,229,236,243,233,231,110,  3,107,  3,107,
-     13,107, 20,226,229,238,231,225,236,105,128,  9,192,228,229,246,
-     97,128,  9, 64,231,245,234,225,242,225,244,105,128, 10,192,106,
-    128,  1, 51,107,  2,107, 41,107, 65,225,244,225,235,225,238, 97,
-    129, 48,164,107, 53,232,225,236,230,247,233,228,244,104,128,255,
-    114,239,242,229,225,110,128, 49, 99,108,  2,107, 79,107, 84,228,
-    101,128,  2,220,245,249,232,229,226,242,229,119,128,  5,172,109,
-      2,107,101,107,168, 97,  3,107,109,107,129,107,154,227,242,239,
-    110,129,  1, 43,107,118,227,249,242,233,236,236,233, 99,128,  4,
-    227,231,229,239,242,225,240,240,242,239,248,233,237,225,244,229,
-    236,249,229,241,245,225,108,128, 34, 83,244,242,225,231,245,242,
-    237,245,235,232,105,128, 10, 63,239,238,239,243,240,225,227,101,
-    128,255, 73,110,  5,107,191,107,201,107,210,107,222,108, 50,227,
-    242,229,237,229,238,116,128, 34,  6,230,233,238,233,244,121,128,
-     34, 30,233,225,242,237,229,238,233,225,110,128,  5,107,116,  2,
-    107,228,108, 40,101,  2,107,234,108, 29,231,242,225,108,131, 34,
-     43,107,247,108,  9,108, 14, 98,  2,107,253,108,  5,239,244,244,
-    239,109,128, 35, 33,116,128, 35, 33,229,120,128,248,245,116,  2,
-    108, 20,108, 25,239,112,128, 35, 32,112,128, 35, 32,242,243,229,
-    227,244,233,239,110,128, 34, 41,233,243,241,245,225,242,101,128,
-     51,  5,118,  3,108, 58,108, 67,108, 76,226,245,236,236,229,116,
-    128, 37,216,227,233,242,227,236,101,128, 37,217,243,237,233,236,
-    229,230,225,227,101,128, 38, 59,111,  3,108, 96,108,107,108,115,
-    227,249,242,233,236,236,233, 99,128,  4, 81,231,239,238,229,107,
-    128,  1, 47,244, 97,131,  3,185,108,126,108,147,108,155,228,233,
-    229,242,229,243,233,115,129,  3,202,108,139,244,239,238,239,115,
-    128,  3,144,236,225,244,233,110,128,  2,105,244,239,238,239,115,
-    128,  3,175,240,225,242,229,110,128, 36,164,242,233,231,245,242,
-    237,245,235,232,105,128, 10,114,115,  4,108,194,108,239,108,253,
-    109,  5,237,225,236,108,  2,108,203,108,214,232,233,242,225,231,
-    225,238, 97,128, 48, 67,235,225,244,225,235,225,238, 97,129, 48,
-    163,108,227,232,225,236,230,247,233,228,244,104,128,255,104,243,
-    232,225,242,226,229,238,231,225,236,105,128,  9,250,244,242,239,
-    235,101,128,  2,104,245,240,229,242,233,239,114,128,246,237,116,
-      2,109, 21,109, 55,229,242,225,244,233,239,110,  2,109, 33,109,
-     44,232,233,242,225,231,225,238, 97,128, 48,157,235,225,244,225,
-    235,225,238, 97,128, 48,253,233,236,228,101,129,  1, 41,109, 64,
-    226,229,236,239,119,128, 30, 45,117,  2,109, 78,109, 89,226,239,
-    240,239,237,239,230,111,128, 49, 41,227,249,242,233,236,236,233,
-     99,128,  4, 78,246,239,247,229,236,243,233,231,110,  3,109,116,
-    109,126,109,133,226,229,238,231,225,236,105,128,  9,191,228,229,
-    246, 97,128,  9, 63,231,245,234,225,242,225,244,105,128, 10,191,
-    250,232,233,244,243, 97,  2,109,155,109,166,227,249,242,233,236,
-    236,233, 99,128,  4,117,228,226,236,231,242,225,246,229,227,249,
-    242,233,236,236,233, 99,128,  4,119,106,138,  0,106,109,209,110,
-     16,110, 27,110, 77,110, 93,110,206,111, 19,111, 24,111, 36,111,
-     44, 97,  4,109,219,109,230,109,240,109,247,225,242,237,229,238,
-    233,225,110,128,  5,113,226,229,238,231,225,236,105,128,  9,156,
-    228,229,246, 97,128,  9, 28,231,117,  2,109,254,110,  7,234,225,
-    242,225,244,105,128, 10,156,242,237,245,235,232,105,128, 10, 28,
-    226,239,240,239,237,239,230,111,128, 49, 16, 99,  3,110, 35,110,
-     42,110, 64,225,242,239,110,128,  1,240,233,242, 99,  2,110, 50,
-    110, 55,236,101,128, 36,217,245,237,230,236,229,120,128,  1, 53,
-    242,239,243,243,229,228,244,225,233,108,128,  2,157,228,239,244,
-    236,229,243,243,243,244,242,239,235,101,128,  2, 95,101,  3,110,
-    101,110,112,110,177,227,249,242,233,236,236,233, 99,128,  4, 88,
-    229,109,  4,110,123,110,132,110,146,110,162,225,242,225,226,233,
-     99,128,  6, 44,230,233,238,225,236,225,242,225,226,233, 99,128,
-    254,158,233,238,233,244,233,225,236,225,242,225,226,233, 99,128,
-    254,159,237,229,228,233,225,236,225,242,225,226,233, 99,128,254,
-    160,104,  2,110,183,110,192,225,242,225,226,233, 99,128,  6,152,
-    230,233,238,225,236,225,242,225,226,233, 99,128,251,139,104,  2,
-    110,212,111,  6, 97,  3,110,220,110,230,110,237,226,229,238,231,
-    225,236,105,128,  9,157,228,229,246, 97,128,  9, 29,231,117,  2,
-    110,244,110,253,234,225,242,225,244,105,128, 10,157,242,237,245,
-    235,232,105,128, 10, 29,229,232,225,242,237,229,238,233,225,110,
-    128,  5,123,233,115,128, 48,  4,237,239,238,239,243,240,225,227,
-    101,128,255, 74,240,225,242,229,110,128, 36,165,243,245,240,229,
-    242,233,239,114,128,  2,178,107,146,  0,107,111, 95,113,184,113,
-    195,114,  1,114, 12,114,102,114,116,115,224,116,164,116,177,116,
-    203,116,252,117,134,117,156,117,169,117,192,117,234,117,244, 97,
-     12,111,121,111,153,111,175,111,205,112, 63,112, 88,112,118,112,
-    143,112,249,113,  7,113,130,113,159, 98,  2,111,127,111,144,225,
-    243,232,235,233,242,227,249,242,233,236,236,233, 99,128,  4,161,
-    229,238,231,225,236,105,128,  9,149, 99,  2,111,159,111,165,245,
-    244,101,128, 30, 49,249,242,233,236,236,233, 99,128,  4, 58,228,
-    101,  2,111,182,111,200,243,227,229,238,228,229,242,227,249,242,
-    233,236,236,233, 99,128,  4,155,246, 97,128,  9, 21,102,135,  5,
-    219,111,223,111,232,111,252,112, 10,112, 19,112, 35,112, 50,225,
-    242,225,226,233, 99,128,  6, 67,228,225,231,229,243,104,129,251,
-     59,111,243,232,229,226,242,229,119,128,251, 59,230,233,238,225,
-    236,225,242,225,226,233, 99,128,254,218,232,229,226,242,229,119,
-    128,  5,219,233,238,233,244,233,225,236,225,242,225,226,233, 99,
-    128,254,219,237,229,228,233,225,236,225,242,225,226,233, 99,128,
-    254,220,242,225,230,229,232,229,226,242,229,119,128,251, 77,231,
-    117,  2,112, 70,112, 79,234,225,242,225,244,105,128, 10,149,242,
-    237,245,235,232,105,128, 10, 21,104,  2,112, 94,112,104,233,242,
-    225,231,225,238, 97,128, 48, 75,239,239,235,227,249,242,233,236,
-    236,233, 99,128,  4,196,235,225,244,225,235,225,238, 97,129, 48,
-    171,112,131,232,225,236,230,247,233,228,244,104,128,255,118,112,
-      2,112,149,112,170,240, 97,129,  3,186,112,156,243,249,237,226,
-    239,236,231,242,229,229,107,128,  3,240,249,229,239,245,110,  3,
-    112,182,112,196,112,230,237,233,229,245,237,235,239,242,229,225,
-    110,128, 49,113,112,  2,112,202,112,217,232,233,229,245,240,232,
-    235,239,242,229,225,110,128, 49,132,233,229,245,240,235,239,242,
-    229,225,110,128, 49,120,243,243,225,238,231,240,233,229,245,240,
-    235,239,242,229,225,110,128, 49,121,242,239,242,233,233,243,241,
-    245,225,242,101,128, 51, 13,115,  5,113, 19,113, 63,113, 78,113,
-     86,113,114,232,233,228,225,225,245,244,111,  2,113, 32,113, 41,
-    225,242,225,226,233, 99,128,  6, 64,238,239,243,233,228,229,226,
-    229,225,242,233,238,231,225,242,225,226,233, 99,128,  6, 64,237,
-    225,236,236,235,225,244,225,235,225,238, 97,128, 48,245,241,245,
-    225,242,101,128, 51,132,242, 97,  2,113, 93,113,102,225,242,225,
-    226,233, 99,128,  6, 80,244,225,238,225,242,225,226,233, 99,128,
-      6, 77,244,242,239,235,229,227,249,242,233,236,236,233, 99,128,
-      4,159,244,225,232,233,242,225,240,242,239,236,239,238,231,237,
-    225,242,235,232,225,236,230,247,233,228,244,104,128,255,112,246,
-    229,242,244,233,227,225,236,243,244,242,239,235,229,227,249,242,
-    233,236,236,233, 99,128,  4,157,226,239,240,239,237,239,230,111,
-    128, 49, 14, 99,  4,113,205,113,227,113,236,113,244, 97,  2,113,
-    211,113,221,236,243,241,245,225,242,101,128, 51,137,242,239,110,
-    128,  1,233,229,228,233,236,236, 97,128,  1, 55,233,242,227,236,
-    101,128, 36,218,239,237,237,225,225,227,227,229,238,116,128,  1,
-     55,228,239,244,226,229,236,239,119,128, 30, 51,101,  4,114, 22,
-    114, 49,114, 74,114, 86,104,  2,114, 28,114, 39,225,242,237,229,
-    238,233,225,110,128,  5,132,233,242,225,231,225,238, 97,128, 48,
-     81,235,225,244,225,235,225,238, 97,129, 48,177,114, 62,232,225,
-    236,230,247,233,228,244,104,128,255,121,238,225,242,237,229,238,
-    233,225,110,128,  5,111,243,237,225,236,236,235,225,244,225,235,
-    225,238, 97,128, 48,246,231,242,229,229,238,236,225,238,228,233,
-     99,128,  1, 56,104,  6,114,130,115,  3,115, 14,115, 39,115,126,
-    115,214, 97,  5,114,142,114,152,114,163,114,170,114,195,226,229,
-    238,231,225,236,105,128,  9,150,227,249,242,233,236,236,233, 99,
-    128,  4, 69,228,229,246, 97,128,  9, 22,231,117,  2,114,177,114,
-    186,234,225,242,225,244,105,128, 10,150,242,237,245,235,232,105,
-    128, 10, 22,104,  4,114,205,114,214,114,228,114,244,225,242,225,
-    226,233, 99,128,  6, 46,230,233,238,225,236,225,242,225,226,233,
-     99,128,254,166,233,238,233,244,233,225,236,225,242,225,226,233,
-     99,128,254,167,237,229,228,233,225,236,225,242,225,226,233, 99,
-    128,254,168,229,233,227,239,240,244,233, 99,128,  3,231,232, 97,
-      2,115, 21,115, 28,228,229,246, 97,128,  9, 89,231,245,242,237,
-    245,235,232,105,128, 10, 89,233,229,245,235,104,  4,115, 53,115,
-     88,115,103,115,112, 97,  2,115, 59,115, 74,227,233,242,227,236,
-    229,235,239,242,229,225,110,128, 50,120,240,225,242,229,238,235,
-    239,242,229,225,110,128, 50, 24,227,233,242,227,236,229,235,239,
-    242,229,225,110,128, 50,106,235,239,242,229,225,110,128, 49, 75,
-    240,225,242,229,238,235,239,242,229,225,110,128, 50, 10,111,  4,
-    115,136,115,185,115,195,115,200,235,104,  4,115,147,115,156,115,
-    165,115,175,225,233,244,232,225,105,128, 14,  2,239,238,244,232,
-    225,105,128, 14,  5,245,225,244,244,232,225,105,128, 14,  3,247,
-    225,233,244,232,225,105,128, 14,  4,237,245,244,244,232,225,105,
-    128, 14, 91,239,107,128,  1,153,242,225,235,232,225,238,231,244,
-    232,225,105,128, 14,  6,250,243,241,245,225,242,101,128, 51,145,
-    105,  4,115,234,115,245,116, 14,116, 63,232,233,242,225,231,225,
-    238, 97,128, 48, 77,235,225,244,225,235,225,238, 97,129, 48,173,
-    116,  2,232,225,236,230,247,233,228,244,104,128,255,119,242,111,
-      3,116, 23,116, 38,116, 54,231,245,242,225,237,245,243,241,245,
-    225,242,101,128, 51, 21,237,229,229,244,239,242,245,243,241,245,
-    225,242,101,128, 51, 22,243,241,245,225,242,101,128, 51, 20,249,
-    229,239,107,  5,116, 78,116,113,116,128,116,137,116,151, 97,  2,
-    116, 84,116, 99,227,233,242,227,236,229,235,239,242,229,225,110,
-    128, 50,110,240,225,242,229,238,235,239,242,229,225,110,128, 50,
-     14,227,233,242,227,236,229,235,239,242,229,225,110,128, 50, 96,
-    235,239,242,229,225,110,128, 49, 49,240,225,242,229,238,235,239,
-    242,229,225,110,128, 50,  0,243,233,239,243,235,239,242,229,225,
-    110,128, 49, 51,234,229,227,249,242,233,236,236,233, 99,128,  4,
-     92,108,  2,116,183,116,194,233,238,229,226,229,236,239,119,128,
-     30, 53,243,241,245,225,242,101,128, 51,152,109,  3,116,211,116,
-    225,116,236,227,245,226,229,228,243,241,245,225,242,101,128, 51,
-    166,239,238,239,243,240,225,227,101,128,255, 75,243,241,245,225,
-    242,229,228,243,241,245,225,242,101,128, 51,162,111,  5,117,  8,
-    117, 34,117, 72,117, 84,117, 98,104,  2,117, 14,117, 24,233,242,
-    225,231,225,238, 97,128, 48, 83,237,243,241,245,225,242,101,128,
-     51,192,235, 97,  2,117, 41,117, 49,233,244,232,225,105,128, 14,
-      1,244,225,235,225,238, 97,129, 48,179,117, 60,232,225,236,230,
-    247,233,228,244,104,128,255,122,239,240,239,243,241,245,225,242,
-    101,128, 51, 30,240,240,225,227,249,242,233,236,236,233, 99,128,
-      4,129,114,  2,117,104,117,124,229,225,238,243,244,225,238,228,
-    225,242,228,243,249,237,226,239,108,128, 50,127,239,238,233,243,
-    227,237, 98,128,  3, 67,240, 97,  2,117,141,117,147,242,229,110,
-    128, 36,166,243,241,245,225,242,101,128, 51,170,243,233,227,249,
-    242,233,236,236,233, 99,128,  4,111,116,  2,117,175,117,184,243,
-    241,245,225,242,101,128, 51,207,245,242,238,229,100,128,  2,158,
-    117,  2,117,198,117,209,232,233,242,225,231,225,238, 97,128, 48,
-     79,235,225,244,225,235,225,238, 97,129, 48,175,117,222,232,225,
-    236,230,247,233,228,244,104,128,255,120,246,243,241,245,225,242,
-    101,128, 51,184,247,243,241,245,225,242,101,128, 51,190,108,146,
-      0,108,118, 38,120, 65,120, 94,120,160,120,198,121, 94,121,103,
-    121,119,121,143,121,161,122, 23,122, 64,122,199,122,207,122,240,
-    122,249,123,  1,123, 63, 97,  7,118, 54,118, 64,118, 71,118, 78,
-    118,103,118,119,120, 53,226,229,238,231,225,236,105,128,  9,178,
-    227,245,244,101,128,  1, 58,228,229,246, 97,128,  9, 50,231,117,
-      2,118, 85,118, 94,234,225,242,225,244,105,128, 10,178,242,237,
-    245,235,232,105,128, 10, 50,235,235,232,225,238,231,249,225,239,
-    244,232,225,105,128, 14, 69,109, 10,118,141,119, 80,119, 97,119,
-    135,119,149,119,168,119,184,119,204,119,224,119,247, 97,  2,118,
-    147,119, 72,236,229,102,  4,118,159,118,173,119,  9,119, 26,230,
-    233,238,225,236,225,242,225,226,233, 99,128,254,252,232,225,237,
-    250, 97,  2,118,183,118,224,225,226,239,246,101,  2,118,193,118,
-    207,230,233,238,225,236,225,242,225,226,233, 99,128,254,248,233,
-    243,239,236,225,244,229,228,225,242,225,226,233, 99,128,254,247,
-    226,229,236,239,119,  2,118,234,118,248,230,233,238,225,236,225,
-    242,225,226,233, 99,128,254,250,233,243,239,236,225,244,229,228,
-    225,242,225,226,233, 99,128,254,249,233,243,239,236,225,244,229,
-    228,225,242,225,226,233, 99,128,254,251,237,225,228,228,225,225,
-    226,239,246,101,  2,119, 41,119, 55,230,233,238,225,236,225,242,
-    225,226,233, 99,128,254,246,233,243,239,236,225,244,229,228,225,
-    242,225,226,233, 99,128,254,245,242,225,226,233, 99,128,  6, 68,
-    226,228, 97,129,  3,187,119, 88,243,244,242,239,235,101,128,  1,
-    155,229,100,130,  5,220,119,106,119,126,228,225,231,229,243,104,
-    129,251, 60,119,117,232,229,226,242,229,119,128,251, 60,232,229,
-    226,242,229,119,128,  5,220,230,233,238,225,236,225,242,225,226,
-    233, 99,128,254,222,232,225,232,233,238,233,244,233,225,236,225,
-    242,225,226,233, 99,128,252,202,233,238,233,244,233,225,236,225,
-    242,225,226,233, 99,128,254,223,234,229,229,237,233,238,233,244,
-    233,225,236,225,242,225,226,233, 99,128,252,201,235,232,225,232,
-    233,238,233,244,233,225,236,225,242,225,226,233, 99,128,252,203,
-    236,225,237,232,229,232,233,243,239,236,225,244,229,228,225,242,
-    225,226,233, 99,128,253,242,237,101,  2,119,254,120, 11,228,233,
-    225,236,225,242,225,226,233, 99,128,254,224,229,109,  2,120, 18,
-    120, 37,232,225,232,233,238,233,244,233,225,236,225,242,225,226,
-    233, 99,128,253,136,233,238,233,244,233,225,236,225,242,225,226,
-    233, 99,128,252,204,242,231,229,227,233,242,227,236,101,128, 37,
-    239, 98,  3,120, 73,120, 78,120, 84,225,114,128,  1,154,229,236,
-    116,128,  2,108,239,240,239,237,239,230,111,128, 49, 12, 99,  4,
-    120,104,120,111,120,120,120,147,225,242,239,110,128,  1, 62,229,
-    228,233,236,236, 97,128,  1, 60,233,242, 99,  2,120,128,120,133,
-    236,101,128, 36,219,245,237,230,236,229,248,226,229,236,239,119,
-    128, 30, 61,239,237,237,225,225,227,227,229,238,116,128,  1, 60,
-    228,239,116,130,  1, 64,120,170,120,179,225,227,227,229,238,116,
-    128,  1, 64,226,229,236,239,119,129, 30, 55,120,189,237,225,227,
-    242,239,110,128, 30, 57,101,  3,120,206,120,244,121, 89,230,116,
-      2,120,213,120,229,225,238,231,236,229,225,226,239,246,229,227,
-    237, 98,128,  3, 26,244,225,227,235,226,229,236,239,247,227,237,
-     98,128,  3, 24,243,115,132,  0, 60,121,  1,121, 23,121, 35,121,
-     81,229,241,245,225,108,129, 34,100,121, 11,239,242,231,242,229,
-    225,244,229,114,128, 34,218,237,239,238,239,243,240,225,227,101,
-    128,255, 28,111,  2,121, 41,121, 70,114,  2,121, 47,121, 60,229,
-    241,245,233,246,225,236,229,238,116,128, 34,114,231,242,229,225,
-    244,229,114,128, 34,118,246,229,242,229,241,245,225,108,128, 34,
-    102,243,237,225,236,108,128,254,100,250,104,128,  2,110,230,226,
-    236,239,227,107,128, 37,140,232,239,239,235,242,229,244,242,239,
-    230,236,229,120,128,  2,109,105,  2,121,125,121,130,242, 97,128,
-     32,164,247,238,225,242,237,229,238,233,225,110,128,  5,108,106,
-    129,  1,201,121,149,229,227,249,242,233,236,236,233, 99,128,  4,
-     89,108,132,246,192,121,173,121,197,121,208,121,217, 97,  2,121,
-    179,121,186,228,229,246, 97,128,  9, 51,231,245,234,225,242,225,
-    244,105,128, 10,179,233,238,229,226,229,236,239,119,128, 30, 59,
-    236,225,228,229,246, 97,128,  9, 52,246,239,227,225,236,233, 99,
-      3,121,231,121,241,121,248,226,229,238,231,225,236,105,128,  9,
-    225,228,229,246, 97,128,  9, 97,246,239,247,229,236,243,233,231,
-    110,  2,122,  6,122, 16,226,229,238,231,225,236,105,128,  9,227,
-    228,229,246, 97,128,  9, 99,109,  3,122, 31,122, 44,122, 55,233,
-    228,228,236,229,244,233,236,228,101,128,  2,107,239,238,239,243,
-    240,225,227,101,128,255, 76,243,241,245,225,242,101,128, 51,208,
-    111,  6,122, 78,122, 90,122,132,122,143,122,149,122,191,227,232,
-    245,236,225,244,232,225,105,128, 14, 44,231,233,227,225,108,  3,
-    122,102,122,108,122,127,225,238,100,128, 34, 39,238,239,116,129,
-      0,172,122,116,242,229,246,229,242,243,229,100,128, 35, 16,239,
-    114,128, 34, 40,236,233,238,231,244,232,225,105,128, 14, 37,238,
-    231,115,128,  1,127,247,236,233,238,101,  2,122,159,122,182, 99,
-      2,122,165,122,177,229,238,244,229,242,236,233,238,101,128,254,
-     78,237, 98,128,  3, 50,228,225,243,232,229,100,128,254, 77,250,
-    229,238,231,101,128, 37,202,240,225,242,229,110,128, 36,167,115,
-      3,122,215,122,222,122,230,236,225,243,104,128,  1, 66,241,245,
-    225,242,101,128, 33, 19,245,240,229,242,233,239,114,128,246,238,
-    244,243,232,225,228,101,128, 37,145,245,244,232,225,105,128, 14,
-     38,246,239,227,225,236,233, 99,  3,123, 15,123, 25,123, 32,226,
-    229,238,231,225,236,105,128,  9,140,228,229,246, 97,128,  9, 12,
-    246,239,247,229,236,243,233,231,110,  2,123, 46,123, 56,226,229,
-    238,231,225,236,105,128,  9,226,228,229,246, 97,128,  9, 98,248,
-    243,241,245,225,242,101,128, 51,211,109,144,  0,109,123,109,125,
-    218,125,243,126, 14,126, 39,127, 92,127,114,128,169,128,199,128,
-    248,129, 99,129,121,129,146,129,155,130,182,130,210, 97, 12,123,
-    135,123,145,123,209,123,216,123,241,124, 33,125,125,125,150,125,
-    155,125,169,125,181,125,186,226,229,238,231,225,236,105,128,  9,
-    174, 99,  2,123,151,123,203,242,239,110,132,  0,175,123,165,123,
-    176,123,182,123,191,226,229,236,239,247,227,237, 98,128,  3, 49,
-    227,237, 98,128,  3,  4,236,239,247,237,239,100,128,  2,205,237,
-    239,238,239,243,240,225,227,101,128,255,227,245,244,101,128, 30,
-     63,228,229,246, 97,128,  9, 46,231,117,  2,123,223,123,232,234,
-    225,242,225,244,105,128, 10,174,242,237,245,235,232,105,128, 10,
-     46,104,  2,123,247,124, 23,225,240,225,235,104,  2,124,  1,124,
-     10,232,229,226,242,229,119,128,  5,164,236,229,230,244,232,229,
-    226,242,229,119,128,  5,164,233,242,225,231,225,238, 97,128, 48,
-    126,105,  5,124, 45,124,114,124,177,124,207,125,113,227,232,225,
-    244,244,225,247, 97,  3,124, 60,124, 91,124, 98,236,239,119,  2,
-    124, 68,124, 79,236,229,230,244,244,232,225,105,128,248,149,242,
-    233,231,232,244,244,232,225,105,128,248,148,244,232,225,105,128,
-     14, 75,245,240,240,229,242,236,229,230,244,244,232,225,105,128,
-    248,147,229,107,  3,124,123,124,154,124,161,236,239,119,  2,124,
-    131,124,142,236,229,230,244,244,232,225,105,128,248,140,242,233,
-    231,232,244,244,232,225,105,128,248,139,244,232,225,105,128, 14,
-     72,245,240,240,229,242,236,229,230,244,244,232,225,105,128,248,
-    138,232,225,238,225,235,225,116,  2,124,189,124,200,236,229,230,
-    244,244,232,225,105,128,248,132,244,232,225,105,128, 14, 49,116,
-      3,124,215,124,243,125, 50,225,233,235,232,117,  2,124,225,124,
-    236,236,229,230,244,244,232,225,105,128,248,137,244,232,225,105,
-    128, 14, 71,232,111,  3,124,252,125, 27,125, 34,236,239,119,  2,
-    125,  4,125, 15,236,229,230,244,244,232,225,105,128,248,143,242,
-    233,231,232,244,244,232,225,105,128,248,142,244,232,225,105,128,
-     14, 73,245,240,240,229,242,236,229,230,244,244,232,225,105,128,
-    248,141,242,105,  3,125, 59,125, 90,125, 97,236,239,119,  2,125,
-     67,125, 78,236,229,230,244,244,232,225,105,128,248,146,242,233,
-    231,232,244,244,232,225,105,128,248,145,244,232,225,105,128, 14,
-     74,245,240,240,229,242,236,229,230,244,244,232,225,105,128,248,
-    144,249,225,237,239,235,244,232,225,105,128, 14, 70,235,225,244,
-    225,235,225,238, 97,129, 48,222,125,138,232,225,236,230,247,233,
-    228,244,104,128,255,143,236,101,128, 38, 66,238,243,249,239,238,
-    243,241,245,225,242,101,128, 51, 71,241,225,230,232,229,226,242,
-    229,119,128,  5,190,242,115,128, 38, 66,115,  2,125,192,125,210,
-    239,242,225,227,233,242,227,236,229,232,229,226,242,229,119,128,
-      5,175,241,245,225,242,101,128, 51,131, 98,  2,125,224,125,234,
-    239,240,239,237,239,230,111,128, 49,  7,243,241,245,225,242,101,
-    128, 51,212, 99,  2,125,249,126,  1,233,242,227,236,101,128, 36,
-    220,245,226,229,228,243,241,245,225,242,101,128, 51,165,228,239,
-    116,  2,126, 22,126, 31,225,227,227,229,238,116,128, 30, 65,226,
-    229,236,239,119,128, 30, 67,101,  7,126, 55,126,182,126,193,126,
-    208,126,233,127, 14,127, 26,101,  2,126, 61,126,169,109,  4,126,
-     71,126, 80,126, 94,126,110,225,242,225,226,233, 99,128,  6, 69,
-    230,233,238,225,236,225,242,225,226,233, 99,128,254,226,233,238,
-    233,244,233,225,236,225,242,225,226,233, 99,128,254,227,237,101,
-      2,126,117,126,130,228,233,225,236,225,242,225,226,233, 99,128,
-    254,228,229,237,105,  2,126,138,126,153,238,233,244,233,225,236,
-    225,242,225,226,233, 99,128,252,209,243,239,236,225,244,229,228,
-    225,242,225,226,233, 99,128,252, 72,244,239,242,245,243,241,245,
-    225,242,101,128, 51, 77,232,233,242,225,231,225,238, 97,128, 48,
-    129,233,250,233,229,242,225,243,241,245,225,242,101,128, 51,126,
-    235,225,244,225,235,225,238, 97,129, 48,225,126,221,232,225,236,
-    230,247,233,228,244,104,128,255,146,109,130,  5,222,126,241,127,
-      5,228,225,231,229,243,104,129,251, 62,126,252,232,229,226,242,
-    229,119,128,251, 62,232,229,226,242,229,119,128,  5,222,238,225,
-    242,237,229,238,233,225,110,128,  5,116,242,235,232, 97,  3,127,
-     37,127, 46,127, 79,232,229,226,242,229,119,128,  5,165,235,229,
-    230,245,236, 97,  2,127, 57,127, 66,232,229,226,242,229,119,128,
-      5,166,236,229,230,244,232,229,226,242,229,119,128,  5,166,236,
-    229,230,244,232,229,226,242,229,119,128,  5,165,104,  2,127, 98,
-    127,104,239,239,107,128,  2,113,250,243,241,245,225,242,101,128,
-     51,146,105,  6,127,128,127,165,128, 46,128, 57,128, 82,128,139,
-    228,100,  2,127,135,127,160,236,229,228,239,244,235,225,244,225,
-    235,225,238,225,232,225,236,230,247,233,228,244,104,128,255,101,
-    239,116,128,  0,183,229,245,109,  5,127,179,127,214,127,229,127,
-    238,128, 33, 97,  2,127,185,127,200,227,233,242,227,236,229,235,
-    239,242,229,225,110,128, 50,114,240,225,242,229,238,235,239,242,
-    229,225,110,128, 50, 18,227,233,242,227,236,229,235,239,242,229,
-    225,110,128, 50,100,235,239,242,229,225,110,128, 49, 65,112,  2,
-    127,244,128, 20, 97,  2,127,250,128,  8,238,243,233,239,243,235,
-    239,242,229,225,110,128, 49,112,242,229,238,235,239,242,229,225,
-    110,128, 50,  4,233,229,245,240,235,239,242,229,225,110,128, 49,
-    110,243,233,239,243,235,239,242,229,225,110,128, 49,111,232,233,
-    242,225,231,225,238, 97,128, 48,127,235,225,244,225,235,225,238,
-     97,129, 48,223,128, 70,232,225,236,230,247,233,228,244,104,128,
-    255,144,238,117,  2,128, 89,128,134,115,132, 34, 18,128,101,128,
-    112,128,121,128,127,226,229,236,239,247,227,237, 98,128,  3, 32,
-    227,233,242,227,236,101,128, 34,150,237,239,100,128,  2,215,240,
-    236,245,115,128, 34, 19,244,101,128, 32, 50,242,105,  2,128,146,
-    128,160,226,225,225,242,245,243,241,245,225,242,101,128, 51, 74,
-    243,241,245,225,242,101,128, 51, 73,108,  2,128,175,128,190,239,
-    238,231,236,229,231,244,245,242,238,229,100,128,  2,112,243,241,
-    245,225,242,101,128, 51,150,109,  3,128,207,128,221,128,232,227,
-    245,226,229,228,243,241,245,225,242,101,128, 51,163,239,238,239,
-    243,240,225,227,101,128,255, 77,243,241,245,225,242,229,228,243,
-    241,245,225,242,101,128, 51,159,111,  5,129,  4,129, 30,129, 55,
-    129, 65,129, 74,104,  2,129, 10,129, 20,233,242,225,231,225,238,
-     97,128, 48,130,237,243,241,245,225,242,101,128, 51,193,235,225,
-    244,225,235,225,238, 97,129, 48,226,129, 43,232,225,236,230,247,
-    233,228,244,104,128,255,147,236,243,241,245,225,242,101,128, 51,
-    214,237,225,244,232,225,105,128, 14, 33,246,229,242,243,243,241,
-    245,225,242,101,129, 51,167,129, 89,228,243,241,245,225,242,101,
-    128, 51,168,240, 97,  2,129,106,129,112,242,229,110,128, 36,168,
-    243,241,245,225,242,101,128, 51,171,115,  2,129,127,129,136,243,
-    241,245,225,242,101,128, 51,179,245,240,229,242,233,239,114,128,
-    246,239,244,245,242,238,229,100,128,  2,111,117,141,  0,181,129,
-    185,129,189,129,199,129,223,129,233,129,255,130, 10,130, 35,130,
-     58,130, 68,130, 98,130,162,130,172, 49,128,  0,181,225,243,241,
-    245,225,242,101,128, 51,130,227,104,  2,129,206,129,216,231,242,
-    229,225,244,229,114,128, 34,107,236,229,243,115,128, 34,106,230,
-    243,241,245,225,242,101,128, 51,140,103,  2,129,239,129,246,242,
-    229,229,107,128,  3,188,243,241,245,225,242,101,128, 51,141,232,
-    233,242,225,231,225,238, 97,128, 48,128,235,225,244,225,235,225,
-    238, 97,129, 48,224,130, 23,232,225,236,230,247,233,228,244,104,
-    128,255,145,108,  2,130, 41,130, 50,243,241,245,225,242,101,128,
-     51,149,244,233,240,236,121,128,  0,215,237,243,241,245,225,242,
-    101,128, 51,155,238,225,104,  2,130, 76,130, 85,232,229,226,242,
-    229,119,128,  5,163,236,229,230,244,232,229,226,242,229,119,128,
-      5,163,115,  2,130,104,130,153,233, 99,  3,130,113,130,130,130,
-    141,225,236,238,239,244,101,129, 38,106,130,124,228,226,108,128,
-     38,107,230,236,225,244,243,233,231,110,128, 38,109,243,232,225,
-    242,240,243,233,231,110,128, 38,111,243,241,245,225,242,101,128,
-     51,178,246,243,241,245,225,242,101,128, 51,182,247,243,241,245,
-    225,242,101,128, 51,188,118,  2,130,188,130,201,237,229,231,225,
-    243,241,245,225,242,101,128, 51,185,243,241,245,225,242,101,128,
-     51,183,119,  2,130,216,130,229,237,229,231,225,243,241,245,225,
-    242,101,128, 51,191,243,241,245,225,242,101,128, 51,189,110,150,
-      0,110,131, 30,131,164,131,188,131,254,132, 23,132, 81,132, 91,
-    132,158,132,201,134,235,134,253,135, 22,135, 53,135, 79,135,144,
-    137,126,137,134,137,159,137,167,138,135,138,145,138,155, 97,  8,
-    131, 48,131, 68,131, 75,131, 82,131,107,131,118,131,143,131,155,
-     98,  2,131, 54,131, 63,229,238,231,225,236,105,128,  9,168,236,
-     97,128, 34,  7,227,245,244,101,128,  1, 68,228,229,246, 97,128,
-      9, 40,231,117,  2,131, 89,131, 98,234,225,242,225,244,105,128,
-     10,168,242,237,245,235,232,105,128, 10, 40,232,233,242,225,231,
-    225,238, 97,128, 48,106,235,225,244,225,235,225,238, 97,129, 48,
-    202,131,131,232,225,236,230,247,233,228,244,104,128,255,133,240,
-    239,243,244,242,239,240,232,101,128,  1, 73,243,241,245,225,242,
-    101,128, 51,129, 98,  2,131,170,131,180,239,240,239,237,239,230,
-    111,128, 49, 11,243,240,225,227,101,128,  0,160, 99,  4,131,198,
-    131,205,131,214,131,241,225,242,239,110,128,  1, 72,229,228,233,
-    236,236, 97,128,  1, 70,233,242, 99,  2,131,222,131,227,236,101,
-    128, 36,221,245,237,230,236,229,248,226,229,236,239,119,128, 30,
-     75,239,237,237,225,225,227,227,229,238,116,128,  1, 70,228,239,
-    116,  2,132,  6,132, 15,225,227,227,229,238,116,128, 30, 69,226,
-    229,236,239,119,128, 30, 71,101,  3,132, 31,132, 42,132, 67,232,
-    233,242,225,231,225,238, 97,128, 48,109,235,225,244,225,235,225,
-    238, 97,129, 48,205,132, 55,232,225,236,230,247,233,228,244,104,
-    128,255,136,247,243,232,229,241,229,236,243,233,231,110,128, 32,
-    170,230,243,241,245,225,242,101,128, 51,139,103,  2,132, 97,132,
-    147, 97,  3,132,105,132,115,132,122,226,229,238,231,225,236,105,
-    128,  9,153,228,229,246, 97,128,  9, 25,231,117,  2,132,129,132,
-    138,234,225,242,225,244,105,128, 10,153,242,237,245,235,232,105,
-    128, 10, 25,239,238,231,245,244,232,225,105,128, 14,  7,104,  2,
-    132,164,132,174,233,242,225,231,225,238, 97,128, 48,147,239,239,
-    107,  2,132,182,132,189,236,229,230,116,128,  2,114,242,229,244,
-    242,239,230,236,229,120,128,  2,115,105,  4,132,211,133,124,133,
-    135,133,193,229,245,110,  7,132,229,133,  8,133, 40,133, 54,133,
-     63,133, 96,133,109, 97,  2,132,235,132,250,227,233,242,227,236,
-    229,235,239,242,229,225,110,128, 50,111,240,225,242,229,238,235,
-    239,242,229,225,110,128, 50, 15,227,105,  2,133, 15,133, 27,229,
-    245,227,235,239,242,229,225,110,128, 49, 53,242,227,236,229,235,
-    239,242,229,225,110,128, 50, 97,232,233,229,245,232,235,239,242,
-    229,225,110,128, 49, 54,235,239,242,229,225,110,128, 49, 52,240,
-     97,  2,133, 70,133, 84,238,243,233,239,243,235,239,242,229,225,
-    110,128, 49,104,242,229,238,235,239,242,229,225,110,128, 50,  1,
-    243,233,239,243,235,239,242,229,225,110,128, 49,103,244,233,235,
-    229,245,244,235,239,242,229,225,110,128, 49,102,232,233,242,225,
-    231,225,238, 97,128, 48,107,107,  2,133,141,133,165,225,244,225,
-    235,225,238, 97,129, 48,203,133,153,232,225,236,230,247,233,228,
-    244,104,128,255,134,232,225,232,233,116,  2,133,175,133,186,236,
-    229,230,244,244,232,225,105,128,248,153,244,232,225,105,128, 14,
-     77,238,101,141,  0, 57,133,224,133,233,133,243,134, 17,134, 24,
-    134, 49,134, 76,134,110,134,122,134,133,134,166,134,174,134,185,
-    225,242,225,226,233, 99,128,  6,105,226,229,238,231,225,236,105,
-    128,  9,239,227,233,242,227,236,101,129, 36,104,133,254,233,238,
+    247,122,244,242,239,235,101,128,  1,181, 97,158,  0, 97, 36, 26,
+     38,154, 39,  4, 39, 68, 39,132, 39,196, 40,  4, 40, 68, 40,126,
+     40,190, 41, 70, 41,217, 42,137, 42,237, 43, 17, 49,192, 49,229,
+     50,  0, 50,225, 51,  7, 52, 96, 52,168, 53,123, 53,132, 54,  5,
+     56, 13, 57,  3, 57, 50, 57,201, 57,215, 49,138, 39,  1, 36, 50,
+     36,114, 36,154, 36,218, 37, 26, 37, 90, 37,154, 37,218, 38, 26,
+     38, 90, 48,138, 39, 33, 36, 74, 36, 78, 36, 82, 36, 86, 36, 90,
+     36, 94, 36, 98, 36,102, 36,106, 36,110, 48,128, 39, 94, 49,128,
+     39, 97, 50,128, 39, 98, 51,128, 39, 99, 52,128, 39,100, 53,128,
+     39, 16, 54,128, 39,101, 55,128, 39,102, 56,128, 39,103, 57,128,
+     38, 96, 49,134, 38, 27, 36,130, 36,134, 36,138, 36,142, 36,146,
+     36,150, 48,128, 38,101, 49,128, 38,102, 50,128, 38, 99, 55,128,
+     39,  9, 56,128, 39,  8, 57,128, 39,  7, 50,138, 38, 30, 36,178,
+     36,182, 36,186, 36,190, 36,194, 36,198, 36,202, 36,206, 36,210,
+     36,214, 48,128, 36, 96, 49,128, 36, 97, 50,128, 36, 98, 51,128,
+     36, 99, 52,128, 36,100, 53,128, 36,101, 54,128, 36,102, 55,128,
+     36,103, 56,128, 36,104, 57,128, 36,105, 51,138, 39, 12, 36,242,
+     36,246, 36,250, 36,254, 37,  2, 37,  6, 37, 10, 37, 14, 37, 18,
+     37, 22, 48,128, 39,118, 49,128, 39,119, 50,128, 39,120, 51,128,
+     39,121, 52,128, 39,122, 53,128, 39,123, 54,128, 39,124, 55,128,
+     39,125, 56,128, 39,126, 57,128, 39,127, 52,138, 39, 13, 37, 50,
+     37, 54, 37, 58, 37, 62, 37, 66, 37, 70, 37, 74, 37, 78, 37, 82,
+     37, 86, 48,128, 39,128, 49,128, 39,129, 50,128, 39,130, 51,128,
+     39,131, 52,128, 39,132, 53,128, 39,133, 54,128, 39,134, 55,128,
+     39,135, 56,128, 39,136, 57,128, 39,137, 53,138, 39, 14, 37,114,
+     37,118, 37,122, 37,126, 37,130, 37,134, 37,138, 37,142, 37,146,
+     37,150, 48,128, 39,138, 49,128, 39,139, 50,128, 39,140, 51,128,
+     39,141, 52,128, 39,142, 53,128, 39,143, 54,128, 39,144, 55,128,
+     39,145, 56,128, 39,146, 57,128, 39,147, 54,138, 39, 15, 37,178,
+     37,182, 37,186, 37,190, 37,194, 37,198, 37,202, 37,206, 37,210,
+     37,214, 48,128, 39,148, 49,128, 33,146, 50,128, 39,163, 51,128,
+     33,148, 52,128, 33,149, 53,128, 39,153, 54,128, 39,155, 55,128,
+     39,156, 56,128, 39,157, 57,128, 39,158, 55,138, 39, 17, 37,242,
+     37,246, 37,250, 37,254, 38,  2, 38,  6, 38, 10, 38, 14, 38, 18,
+     38, 22, 48,128, 39,159, 49,128, 39,160, 50,128, 39,161, 51,128,
+     39,162, 52,128, 39,164, 53,128, 39,165, 54,128, 39,166, 55,128,
+     39,167, 56,128, 39,168, 57,128, 39,169, 56,138, 39, 18, 38, 50,
+     38, 54, 38, 58, 38, 62, 38, 66, 38, 70, 38, 74, 38, 78, 38, 82,
+     38, 86, 48,128, 39,171, 49,128, 39,173, 50,128, 39,175, 51,128,
+     39,178, 52,128, 39,179, 53,128, 39,181, 54,128, 39,184, 55,128,
+     39,186, 56,128, 39,187, 57,128, 39,188, 57,138, 39, 19, 38,114,
+     38,118, 38,122, 38,126, 38,130, 38,134, 38,138, 38,142, 38,146,
+     38,150, 48,128, 39,189, 49,128, 39,190, 50,128, 39,154, 51,128,
+     39,170, 52,128, 39,182, 53,128, 39,185, 54,128, 39,152, 55,128,
+     39,180, 56,128, 39,183, 57,128, 39,172, 50,138, 39,  2, 38,178,
+     38,224, 38,228, 38,232, 38,236, 38,240, 38,244, 38,248, 38,252,
+     39,  0, 48,135, 39, 20, 38,196, 38,200, 38,204, 38,208, 38,212,
+     38,216, 38,220, 48,128, 39,174, 49,128, 39,177, 50,128, 39,  3,
+     51,128, 39, 80, 52,128, 39, 82, 53,128, 39,110, 54,128, 39,112,
+     49,128, 39, 21, 50,128, 39, 22, 51,128, 39, 23, 52,128, 39, 24,
+     53,128, 39, 25, 54,128, 39, 26, 55,128, 39, 27, 56,128, 39, 28,
+     57,128, 39, 34, 51,138, 39,  4, 39, 28, 39, 32, 39, 36, 39, 40,
+     39, 44, 39, 48, 39, 52, 39, 56, 39, 60, 39, 64, 48,128, 39, 35,
+     49,128, 39, 36, 50,128, 39, 37, 51,128, 39, 38, 52,128, 39, 39,
+     53,128, 38,  5, 54,128, 39, 41, 55,128, 39, 42, 56,128, 39, 43,
+     57,128, 39, 44, 52,138, 38, 14, 39, 92, 39, 96, 39,100, 39,104,
+     39,108, 39,112, 39,116, 39,120, 39,124, 39,128, 48,128, 39, 45,
+     49,128, 39, 46, 50,128, 39, 47, 51,128, 39, 48, 52,128, 39, 49,
+     53,128, 39, 50, 54,128, 39, 51, 55,128, 39, 52, 56,128, 39, 53,
+     57,128, 39, 54, 53,138, 39,  6, 39,156, 39,160, 39,164, 39,168,
+     39,172, 39,176, 39,180, 39,184, 39,188, 39,192, 48,128, 39, 55,
+     49,128, 39, 56, 50,128, 39, 57, 51,128, 39, 58, 52,128, 39, 59,
+     53,128, 39, 60, 54,128, 39, 61, 55,128, 39, 62, 56,128, 39, 63,
+     57,128, 39, 64, 54,138, 39, 29, 39,220, 39,224, 39,228, 39,232,
+     39,236, 39,240, 39,244, 39,248, 39,252, 40,  0, 48,128, 39, 65,
+     49,128, 39, 66, 50,128, 39, 67, 51,128, 39, 68, 52,128, 39, 69,
+     53,128, 39, 70, 54,128, 39, 71, 55,128, 39, 72, 56,128, 39, 73,
+     57,128, 39, 74, 55,138, 39, 30, 40, 28, 40, 32, 40, 36, 40, 40,
+     40, 44, 40, 48, 40, 52, 40, 56, 40, 60, 40, 64, 48,128, 39, 75,
+     49,128, 37,207, 50,128, 39, 77, 51,128, 37,160, 52,128, 39, 79,
+     53,128, 39, 81, 54,128, 37,178, 55,128, 37,188, 56,128, 37,198,
+     57,128, 39, 86, 56,137, 39, 31, 40, 90, 40, 94, 40, 98, 40,102,
+     40,106, 40,110, 40,114, 40,118, 40,122, 49,128, 37,215, 50,128,
+     39, 88, 51,128, 39, 89, 52,128, 39, 90, 53,128, 39,111, 54,128,
+     39,113, 55,128, 39,114, 56,128, 39,115, 57,128, 39,104, 57,138,
+     39, 32, 40,150, 40,154, 40,158, 40,162, 40,166, 40,170, 40,174,
+     40,178, 40,182, 40,186, 48,128, 39,105, 49,128, 39,108, 50,128,
+     39,109, 51,128, 39,106, 52,128, 39,107, 53,128, 39,116, 54,128,
+     39,117, 55,128, 39, 91, 56,128, 39, 92, 57,128, 39, 93, 97,  7,
+     40,206, 40,216, 40,223, 40,230, 40,255, 41, 15, 41, 26,226,229,
+    238,231,225,236,105,128,  9,134,227,245,244,101,128,  0,225,228,
+    229,246, 97,128,  9,  6,231,117,  2, 40,237, 40,246,234,225,242,
+    225,244,105,128, 10,134,242,237,245,235,232,105,128, 10,  6,237,
+    225,244,242,225,231,245,242,237,245,235,232,105,128, 10, 62,242,
+    245,243,241,245,225,242,101,128, 51,  3,246,239,247,229,236,243,
+    233,231,110,  3, 41, 42, 41, 52, 41, 59,226,229,238,231,225,236,
+    105,128,  9,190,228,229,246, 97,128,  9, 62,231,245,234,225,242,
+    225,244,105,128, 10,190, 98,  4, 41, 80, 41,121, 41,130, 41,140,
+    226,242,229,246,233,225,244,233,239,110,  2, 41, 95, 41,110,237,
+    225,242,235,225,242,237,229,238,233,225,110,128,  5, 95,243,233,
+    231,238,228,229,246, 97,128,  9,112,229,238,231,225,236,105,128,
+      9,133,239,240,239,237,239,230,111,128, 49, 26,242,229,246,101,
+    134,  1,  3, 41,159, 41,167, 41,178, 41,189, 41,197, 41,209,225,
+    227,245,244,101,128, 30,175,227,249,242,233,236,236,233, 99,128,
+      4,209,228,239,244,226,229,236,239,119,128, 30,183,231,242,225,
+    246,101,128, 30,177,232,239,239,235,225,226,239,246,101,128, 30,
+    179,244,233,236,228,101,128, 30,181, 99,  4, 41,227, 41,234, 42,
+     57, 42,127,225,242,239,110,128,  1,206,233,242, 99,  2, 41,242,
+     41,247,236,101,128, 36,208,245,237,230,236,229,120,133,  0,226,
+     42, 10, 42, 18, 42, 29, 42, 37, 42, 49,225,227,245,244,101,128,
+     30,165,228,239,244,226,229,236,239,119,128, 30,173,231,242,225,
+    246,101,128, 30,167,232,239,239,235,225,226,239,246,101,128, 30,
+    169,244,233,236,228,101,128, 30,171,245,244,101,133,  0,180, 42,
+     73, 42, 84, 42,101, 42,108, 42,117,226,229,236,239,247,227,237,
+     98,128,  3, 23, 99,  2, 42, 90, 42, 95,237, 98,128,  3,  1,239,
+    237, 98,128,  3,  1,228,229,246, 97,128,  9, 84,236,239,247,237,
+    239,100,128,  2,207,244,239,238,229,227,237, 98,128,  3, 65,249,
+    242,233,236,236,233, 99,128,  4, 48,100,  5, 42,149, 42,159, 42,
+    173, 42,179, 42,213,226,236,231,242,225,246,101,128,  2,  1,228,
+    225,235,231,245,242,237,245,235,232,105,128, 10,113,229,246, 97,
+    128,  9,  5,233,229,242,229,243,233,115,130,  0,228, 42,193, 42,
+    204,227,249,242,233,236,236,233, 99,128,  4,211,237,225,227,242,
+    239,110,128,  1,223,239,116,  2, 42,220, 42,228,226,229,236,239,
+    119,128, 30,161,237,225,227,242,239,110,128,  1,225,101,131,  0,
+    230, 42,247, 42,255, 43,  8,225,227,245,244,101,128,  1,253,235,
+    239,242,229,225,110,128, 49, 80,237,225,227,242,239,110,128,  1,
+    227,230,233,105,  6, 43, 33, 43, 53, 45,246, 45,252, 46, 11, 49,
+    111, 48,  2, 43, 39, 43, 46,176,178,176, 56,128, 32, 21,184,185,
+    180, 49,128, 32,164,177, 48,  3, 43, 62, 45, 86, 45,221, 48,  9,
+     43, 82, 43,102, 43,164, 43,226, 44, 32, 44, 94, 44,156, 44,218,
+     45, 24, 49,  3, 43, 90, 43, 94, 43, 98, 55,128,  4, 16, 56,128,
+      4, 17, 57,128,  4, 18, 50, 10, 43,124, 43,128, 43,132, 43,136,
+     43,140, 43,144, 43,148, 43,152, 43,156, 43,160, 48,128,  4, 19,
+     49,128,  4, 20, 50,128,  4, 21, 51,128,  4,  1, 52,128,  4, 22,
+     53,128,  4, 23, 54,128,  4, 24, 55,128,  4, 25, 56,128,  4, 26,
+     57,128,  4, 27, 51, 10, 43,186, 43,190, 43,194, 43,198, 43,202,
+     43,206, 43,210, 43,214, 43,218, 43,222, 48,128,  4, 28, 49,128,
+      4, 29, 50,128,  4, 30, 51,128,  4, 31, 52,128,  4, 32, 53,128,
+      4, 33, 54,128,  4, 34, 55,128,  4, 35, 56,128,  4, 36, 57,128,
+      4, 37, 52, 10, 43,248, 43,252, 44,  0, 44,  4, 44,  8, 44, 12,
+     44, 16, 44, 20, 44, 24, 44, 28, 48,128,  4, 38, 49,128,  4, 39,
+     50,128,  4, 40, 51,128,  4, 41, 52,128,  4, 42, 53,128,  4, 43,
+     54,128,  4, 44, 55,128,  4, 45, 56,128,  4, 46, 57,128,  4, 47,
+     53, 10, 44, 54, 44, 58, 44, 62, 44, 66, 44, 70, 44, 74, 44, 78,
+     44, 82, 44, 86, 44, 90, 48,128,  4,144, 49,128,  4,  2, 50,128,
+      4,  3, 51,128,  4,  4, 52,128,  4,  5, 53,128,  4,  6, 54,128,
+      4,  7, 55,128,  4,  8, 56,128,  4,  9, 57,128,  4, 10, 54, 10,
+     44,116, 44,120, 44,124, 44,128, 44,132, 44,136, 44,140, 44,144,
+     44,148, 44,152, 48,128,  4, 11, 49,128,  4, 12, 50,128,  4, 14,
+     51,128,246,196, 52,128,246,197, 53,128,  4, 48, 54,128,  4, 49,
+     55,128,  4, 50, 56,128,  4, 51, 57,128,  4, 52, 55, 10, 44,178,
+     44,182, 44,186, 44,190, 44,194, 44,198, 44,202, 44,206, 44,210,
+     44,214, 48,128,  4, 53, 49,128,  4, 81, 50,128,  4, 54, 51,128,
+      4, 55, 52,128,  4, 56, 53,128,  4, 57, 54,128,  4, 58, 55,128,
+      4, 59, 56,128,  4, 60, 57,128,  4, 61, 56, 10, 44,240, 44,244,
+     44,248, 44,252, 45,  0, 45,  4, 45,  8, 45, 12, 45, 16, 45, 20,
+     48,128,  4, 62, 49,128,  4, 63, 50,128,  4, 64, 51,128,  4, 65,
+     52,128,  4, 66, 53,128,  4, 67, 54,128,  4, 68, 55,128,  4, 69,
+     56,128,  4, 70, 57,128,  4, 71, 57, 10, 45, 46, 45, 50, 45, 54,
+     45, 58, 45, 62, 45, 66, 45, 70, 45, 74, 45, 78, 45, 82, 48,128,
+      4, 72, 49,128,  4, 73, 50,128,  4, 74, 51,128,  4, 75, 52,128,
+      4, 76, 53,128,  4, 77, 54,128,  4, 78, 55,128,  4, 79, 56,128,
+      4,145, 57,128,  4, 82, 49,  4, 45, 96, 45,158, 45,163, 45,189,
+     48, 10, 45,118, 45,122, 45,126, 45,130, 45,134, 45,138, 45,142,
+     45,146, 45,150, 45,154, 48,128,  4, 83, 49,128,  4, 84, 50,128,
+      4, 85, 51,128,  4, 86, 52,128,  4, 87, 53,128,  4, 88, 54,128,
+      4, 89, 55,128,  4, 90, 56,128,  4, 91, 57,128,  4, 92,177, 48,
+    128,  4, 94, 52,  4, 45,173, 45,177, 45,181, 45,185, 53,128,  4,
+     15, 54,128,  4, 98, 55,128,  4,114, 56,128,  4,116, 57,  5, 45,
+    201, 45,205, 45,209, 45,213, 45,217, 50,128,246,198, 51,128,  4,
+     95, 52,128,  4, 99, 53,128,  4,115, 54,128,  4,117, 56,  2, 45,
+    227, 45,241, 51,  2, 45,233, 45,237, 49,128,246,199, 50,128,246,
+    200,180, 54,128,  4,217,178,185, 57,128, 32, 14,179, 48,  2, 46,
+      3, 46,  7, 48,128, 32, 15, 49,128, 32, 13,181, 55,  7, 46, 28,
+     46, 98, 47,163, 47,240, 48,197, 49, 34, 49,105, 51,  2, 46, 34,
+     46, 48, 56,  2, 46, 40, 46, 44, 49,128,  6,106, 56,128,  6, 12,
+     57,  8, 46, 66, 46, 70, 46, 74, 46, 78, 46, 82, 46, 86, 46, 90,
+     46, 94, 50,128,  6, 96, 51,128,  6, 97, 52,128,  6, 98, 53,128,
+      6, 99, 54,128,  6,100, 55,128,  6,101, 56,128,  6,102, 57,128,
+      6,103, 52,  7, 46,114, 46,146, 46,208, 47, 14, 47, 46, 47,102,
+     47,158, 48,  5, 46,126, 46,130, 46,134, 46,138, 46,142, 48,128,
+      6,104, 49,128,  6,105, 51,128,  6, 27, 55,128,  6, 31, 57,128,
+      6, 33, 49, 10, 46,168, 46,172, 46,176, 46,180, 46,184, 46,188,
+     46,192, 46,196, 46,200, 46,204, 48,128,  6, 34, 49,128,  6, 35,
+     50,128,  6, 36, 51,128,  6, 37, 52,128,  6, 38, 53,128,  6, 39,
+     54,128,  6, 40, 55,128,  6, 41, 56,128,  6, 42, 57,128,  6, 43,
+     50, 10, 46,230, 46,234, 46,238, 46,242, 46,246, 46,250, 46,254,
+     47,  2, 47,  6, 47, 10, 48,128,  6, 44, 49,128,  6, 45, 50,128,
+      6, 46, 51,128,  6, 47, 52,128,  6, 48, 53,128,  6, 49, 54,128,
+      6, 50, 55,128,  6, 51, 56,128,  6, 52, 57,128,  6, 53, 51,  5,
+     47, 26, 47, 30, 47, 34, 47, 38, 47, 42, 48,128,  6, 54, 49,128,
+      6, 55, 50,128,  6, 56, 51,128,  6, 57, 52,128,  6, 58, 52,  9,
+     47, 66, 47, 70, 47, 74, 47, 78, 47, 82, 47, 86, 47, 90, 47, 94,
+     47, 98, 48,128,  6, 64, 49,128,  6, 65, 50,128,  6, 66, 51,128,
+      6, 67, 52,128,  6, 68, 53,128,  6, 69, 54,128,  6, 70, 56,128,
+      6, 72, 57,128,  6, 73, 53,  9, 47,122, 47,126, 47,130, 47,134,
+     47,138, 47,142, 47,146, 47,150, 47,154, 48,128,  6, 74, 49,128,
+      6, 75, 50,128,  6, 76, 51,128,  6, 77, 52,128,  6, 78, 53,128,
+      6, 79, 54,128,  6, 80, 55,128,  6, 81, 56,128,  6, 82,183, 48,
+    128,  6, 71, 53,  3, 47,171, 47,203, 47,235, 48,  5, 47,183, 47,
+    187, 47,191, 47,195, 47,199, 53,128,  6,164, 54,128,  6,126, 55,
+    128,  6,134, 56,128,  6,152, 57,128,  6,175, 49,  5, 47,215, 47,
+    219, 47,223, 47,227, 47,231, 49,128,  6,121, 50,128,  6,136, 51,
+    128,  6,145, 52,128,  6,186, 57,128,  6,210,179, 52,128,  6,213,
+     54,  7, 48,  0, 48,  5, 48, 10, 48, 15, 48, 53, 48,115, 48,177,
+    179, 54,128, 32,170,180, 53,128,  5,190,181, 56,128,  5,195, 54,
+      6, 48, 29, 48, 33, 48, 37, 48, 41, 48, 45, 48, 49, 52,128,  5,
+    208, 53,128,  5,209, 54,128,  5,210, 55,128,  5,211, 56,128,  5,
+    212, 57,128,  5,213, 55, 10, 48, 75, 48, 79, 48, 83, 48, 87, 48,
+     91, 48, 95, 48, 99, 48,103, 48,107, 48,111, 48,128,  5,214, 49,
+    128,  5,215, 50,128,  5,216, 51,128,  5,217, 52,128,  5,218, 53,
+    128,  5,219, 54,128,  5,220, 55,128,  5,221, 56,128,  5,222, 57,
+    128,  5,223, 56, 10, 48,137, 48,141, 48,145, 48,149, 48,153, 48,
+    157, 48,161, 48,165, 48,169, 48,173, 48,128,  5,224, 49,128,  5,
+    225, 50,128,  5,226, 51,128,  5,227, 52,128,  5,228, 53,128,  5,
+    229, 54,128,  5,230, 55,128,  5,231, 56,128,  5,232, 57,128,  5,
+    233, 57,  3, 48,185, 48,189, 48,193, 48,128,  5,234, 52,128,251,
+     42, 53,128,251, 43, 55,  4, 48,207, 48,221, 48,241, 48,246, 48,
+      2, 48,213, 48,217, 48,128,251, 75, 53,128,251, 31, 49,  3, 48,
+    229, 48,233, 48,237, 54,128,  5,240, 55,128,  5,241, 56,128,  5,
+    242,178, 51,128,251, 53, 57,  7, 49,  6, 49, 10, 49, 14, 49, 18,
+     49, 22, 49, 26, 49, 30, 51,128,  5,180, 52,128,  5,181, 53,128,
+      5,182, 54,128,  5,187, 55,128,  5,184, 56,128,  5,183, 57,128,
+      5,176, 56,  3, 49, 42, 49, 86, 49, 91, 48,  7, 49, 58, 49, 62,
+     49, 66, 49, 70, 49, 74, 49, 78, 49, 82, 48,128,  5,178, 49,128,
+      5,177, 50,128,  5,179, 51,128,  5,194, 52,128,  5,193, 54,128,
+      5,185, 55,128,  5,188,179, 57,128,  5,189, 52,  2, 49, 97, 49,
+    101, 49,128,  5,191, 50,128,  5,192,185,178, 57,128,  2,188, 54,
+      3, 49,119, 49,178, 49,185, 49,  4, 49,129, 49,145, 49,151, 49,
+    172, 50,  2, 49,135, 49,140,180, 56,128, 33,  5,184, 57,128, 33,
+     19,179,181, 50,128, 33, 22,181, 55,  3, 49,160, 49,164, 49,168,
+     51,128, 32, 44, 52,128, 32, 45, 53,128, 32, 46,182,182, 52,128,
+     32, 12,179,177,182, 55,128,  6,109,180,185,179, 55,128,  2,189,
+    103,  2, 49,198, 49,205,242,225,246,101,128,  0,224,117,  2, 49,
+    211, 49,220,234,225,242,225,244,105,128, 10,133,242,237,245,235,
+    232,105,128, 10,  5,104,  2, 49,235, 49,245,233,242,225,231,225,
+    238, 97,128, 48, 66,239,239,235,225,226,239,246,101,128, 30,163,
+    105,  7, 50, 16, 50, 41, 50, 48, 50, 60, 50, 85, 50,101, 50,181,
+     98,  2, 50, 22, 50, 31,229,238,231,225,236,105,128,  9,144,239,
+    240,239,237,239,230,111,128, 49, 30,228,229,246, 97,128,  9, 16,
+    229,227,249,242,233,236,236,233, 99,128,  4,213,231,117,  2, 50,
+     67, 50, 76,234,225,242,225,244,105,128, 10,144,242,237,245,235,
+    232,105,128, 10, 16,237,225,244,242,225,231,245,242,237,245,235,
+    232,105,128, 10, 72,110,  5, 50,113, 50,122, 50,136, 50,152, 50,
+    167,225,242,225,226,233, 99,128,  6, 57,230,233,238,225,236,225,
+    242,225,226,233, 99,128,254,202,233,238,233,244,233,225,236,225,
+    242,225,226,233, 99,128,254,203,237,229,228,233,225,236,225,242,
+    225,226,233, 99,128,254,204,246,229,242,244,229,228,226,242,229,
+    246,101,128,  2,  3,246,239,247,229,236,243,233,231,110,  3, 50,
+    197, 50,207, 50,214,226,229,238,231,225,236,105,128,  9,200,228,
+    229,246, 97,128,  9, 72,231,245,234,225,242,225,244,105,128, 10,
+    200,107,  2, 50,231, 50,255,225,244,225,235,225,238, 97,129, 48,
+    162, 50,243,232,225,236,230,247,233,228,244,104,128,255,113,239,
+    242,229,225,110,128, 49, 79,108,  3, 51, 15, 52, 71, 52, 80,101,
+      2, 51, 21, 52, 66,102,136,  5,208, 51, 41, 51, 50, 51, 65, 51,
+     79, 51,168, 51,182, 52, 37, 52, 51,225,242,225,226,233, 99,128,
+      6, 39,228,225,231,229,243,232,232,229,226,242,229,119,128,251,
+     48,230,233,238,225,236,225,242,225,226,233, 99,128,254,142,104,
+      2, 51, 85, 51,160,225,237,250, 97,  2, 51, 94, 51,127,225,226,
+    239,246,101,  2, 51,104, 51,113,225,242,225,226,233, 99,128,  6,
+     35,230,233,238,225,236,225,242,225,226,233, 99,128,254,132,226,
+    229,236,239,119,  2, 51,137, 51,146,225,242,225,226,233, 99,128,
+      6, 37,230,233,238,225,236,225,242,225,226,233, 99,128,254,136,
+    229,226,242,229,119,128,  5,208,236,225,237,229,228,232,229,226,
+    242,229,119,128,251, 79,237, 97,  2, 51,189, 51,225,228,228,225,
+    225,226,239,246,101,  2, 51,202, 51,211,225,242,225,226,233, 99,
+    128,  6, 34,230,233,238,225,236,225,242,225,226,233, 99,128,254,
+    130,235,243,245,242, 97,  4, 51,239, 51,248, 52,  6, 52, 22,225,
+    242,225,226,233, 99,128,  6, 73,230,233,238,225,236,225,242,225,
+    226,233, 99,128,254,240,233,238,233,244,233,225,236,225,242,225,
+    226,233, 99,128,254,243,237,229,228,233,225,236,225,242,225,226,
+    233, 99,128,254,244,240,225,244,225,232,232,229,226,242,229,119,
+    128,251, 46,241,225,237,225,244,243,232,229,226,242,229,119,128,
+    251, 47,240,104,128, 33, 53,236,229,241,245,225,108,128, 34, 76,
+    240,232, 97,129,  3,177, 52, 88,244,239,238,239,115,128,  3,172,
+    109,  4, 52,106, 52,114, 52,125, 52,159,225,227,242,239,110,128,
+      1,  1,239,238,239,243,240,225,227,101,128,255, 65,240,229,242,
+    243,225,238,100,130,  0, 38, 52,139, 52,151,237,239,238,239,243,
+    240,225,227,101,128,255,  6,243,237,225,236,108,128,247, 38,243,
+    241,245,225,242,101,128, 51,194,110,  4, 52,178, 52,189, 53, 55,
+     53, 65,226,239,240,239,237,239,230,111,128, 49, 34,103,  4, 52,
+    199, 52,210, 52,224, 53, 47,226,239,240,239,237,239,230,111,128,
+     49, 36,235,232,225,238,235,232,245,244,232,225,105,128, 14, 90,
+    236,101,131, 34, 32, 52,235, 53, 32, 53, 39,226,242,225,227,235,
+    229,116,  2, 52,247, 53, 11,236,229,230,116,129, 48,  8, 53,  0,
+    246,229,242,244,233,227,225,108,128,254, 63,242,233,231,232,116,
+    129, 48,  9, 53, 21,246,229,242,244,233,227,225,108,128,254, 64,
+    236,229,230,116,128, 35, 41,242,233,231,232,116,128, 35, 42,243,
+    244,242,239,109,128, 33, 43,239,244,229,236,229,233, 97,128,  3,
+    135,117,  2, 53, 71, 53, 83,228,225,244,244,225,228,229,246, 97,
+    128,  9, 82,243,246,225,242, 97,  3, 53, 95, 53,105, 53,112,226,
+    229,238,231,225,236,105,128,  9,130,228,229,246, 97,128,  9,  2,
+    231,245,234,225,242,225,244,105,128, 10,130,239,231,239,238,229,
+    107,128,  1,  5,112,  3, 53,140, 53,164, 53,194, 97,  2, 53,146,
+     53,158,225,244,239,243,241,245,225,242,101,128, 51,  0,242,229,
+    110,128, 36,156,239,243,244,242,239,240,232,101,  2, 53,177, 53,
+    188,225,242,237,229,238,233,225,110,128,  5, 90,237,239,100,128,
+      2,188,112,  2, 53,200, 53,205,236,101,128,248,255,242,111,  2,
+     53,212, 53,220,225,227,232,229,115,128, 34, 80,120,  2, 53,226,
+     53,246,229,241,245,225,108,129, 34, 72, 53,236,239,242,233,237,
+    225,231,101,128, 34, 82,233,237,225,244,229,236,249,229,241,245,
+    225,108,128, 34, 69,114,  4, 54, 15, 54, 42, 54, 46, 54, 91,225,
+    229, 97,  2, 54, 23, 54, 33,229,235,239,242,229,225,110,128, 49,
+    142,235,239,242,229,225,110,128, 49,141, 99,128, 35, 18,105,  2,
+     54, 52, 54, 66,231,232,244,232,225,236,230,242,233,238,103,128,
+     30,154,238,103,130,  0,229, 54, 75, 54, 83,225,227,245,244,101,
+    128,  1,251,226,229,236,239,119,128, 30,  1,242,239,119,  8, 54,
+    111, 54,118, 54,247, 55, 57, 55,107, 55,162, 55,185, 56,  4,226,
+    239,244,104,128, 33,148,100,  3, 54,126, 54,165, 54,212,225,243,
+    104,  4, 54,138, 54,145, 54,152, 54,160,228,239,247,110,128, 33,
+    227,236,229,230,116,128, 33,224,242,233,231,232,116,128, 33,226,
+    245,112,128, 33,225,226,108,  5, 54,178, 54,185, 54,192, 54,199,
+     54,207,226,239,244,104,128, 33,212,228,239,247,110,128, 33,211,
+    236,229,230,116,128, 33,208,242,233,231,232,116,128, 33,210,245,
+    112,128, 33,209,239,247,110,131, 33,147, 54,224, 54,231, 54,239,
+    236,229,230,116,128, 33,153,242,233,231,232,116,128, 33,152,247,
+    232,233,244,101,128, 33,233,104,  2, 54,253, 55, 48,229,225,100,
+      4, 55,  9, 55, 19, 55, 29, 55, 40,228,239,247,238,237,239,100,
+    128,  2,197,236,229,230,244,237,239,100,128,  2,194,242,233,231,
+    232,244,237,239,100,128,  2,195,245,240,237,239,100,128,  2,196,
+    239,242,233,250,229,120,128,248,231,236,229,230,116,131, 33,144,
+     55, 70, 55, 87, 55, 99,228,226,108,129, 33,208, 55, 78,243,244,
+    242,239,235,101,128, 33,205,239,246,229,242,242,233,231,232,116,
+    128, 33,198,247,232,233,244,101,128, 33,230,242,233,231,232,116,
+    132, 33,146, 55,123, 55,135, 55,143, 55,154,228,226,236,243,244,
+    242,239,235,101,128, 33,207,232,229,225,246,121,128, 39,158,239,
+    246,229,242,236,229,230,116,128, 33,196,247,232,233,244,101,128,
+     33,232,244,225, 98,  2, 55,170, 55,177,236,229,230,116,128, 33,
+    228,242,233,231,232,116,128, 33,229,245,112,132, 33,145, 55,198,
+     55,226, 55,244, 55,252,100,  2, 55,204, 55,216,110,129, 33,149,
+     55,210,226,243,101,128, 33,168,239,247,238,226,225,243,101,128,
+     33,168,236,229,230,116,129, 33,150, 55,235,239,230,228,239,247,
+    110,128, 33,197,242,233,231,232,116,128, 33,151,247,232,233,244,
+    101,128, 33,231,246,229,242,244,229,120,128,248,230,115,  5, 56,
+     25, 56,101, 56,146, 56,229, 56,239, 99,  2, 56, 31, 56, 83,233,
+    105,  2, 56, 38, 56, 61,227,233,242,227,245,109,129,  0, 94, 56,
+     49,237,239,238,239,243,240,225,227,101,128,255, 62,244,233,236,
+    228,101,129,  0,126, 56, 71,237,239,238,239,243,240,225,227,101,
+    128,255, 94,242,233,240,116,129,  2, 81, 56, 92,244,245,242,238,
+    229,100,128,  2, 82,237,225,236,108,  2, 56,110, 56,121,232,233,
+    242,225,231,225,238, 97,128, 48, 65,235,225,244,225,235,225,238,
+     97,129, 48,161, 56,134,232,225,236,230,247,233,228,244,104,128,
+    255,103,244,229,242,233,115,  2, 56,156, 56,225,107,131,  0, 42,
+     56,166, 56,194, 56,217, 97,  2, 56,172, 56,186,236,244,239,238,
+    229,225,242,225,226,233, 99,128,  6,109,242,225,226,233, 99,128,
+      6,109,109,  2, 56,200, 56,206,225,244,104,128, 34, 23,239,238,
+    239,243,240,225,227,101,128,255, 10,243,237,225,236,108,128,254,
+     97,109,128, 32, 66,245,240,229,242,233,239,114,128,246,233,249,
+    237,240,244,239,244,233,227,225,236,236,249,229,241,245,225,108,
+    128, 34, 67,116,132,  0, 64, 57, 15, 57, 22, 57, 34, 57, 42,233,
+    236,228,101,128,  0,227,237,239,238,239,243,240,225,227,101,128,
+    255, 32,243,237,225,236,108,128,254,107,245,242,238,229,100,128,
+      2, 80,117,  6, 57, 64, 57, 89, 57, 96, 57,121, 57,141, 57,157,
+     98,  2, 57, 70, 57, 79,229,238,231,225,236,105,128,  9,148,239,
+    240,239,237,239,230,111,128, 49, 32,228,229,246, 97,128,  9, 20,
+    231,117,  2, 57,103, 57,112,234,225,242,225,244,105,128, 10,148,
+    242,237,245,235,232,105,128, 10, 20,236,229,238,231,244,232,237,
+    225,242,235,226,229,238,231,225,236,105,128,  9,215,237,225,244,
+    242,225,231,245,242,237,245,235,232,105,128, 10, 76,246,239,247,
+    229,236,243,233,231,110,  3, 57,173, 57,183, 57,190,226,229,238,
+    231,225,236,105,128,  9,204,228,229,246, 97,128,  9, 76,231,245,
+    234,225,242,225,244,105,128, 10,204,246,225,231,242,225,232,225,
+    228,229,246, 97,128,  9, 61,121,  2, 57,221, 57,233,226,225,242,
+    237,229,238,233,225,110,128,  5, 97,233,110,130,  5,226, 57,242,
+     58,  1,225,236,244,239,238,229,232,229,226,242,229,119,128,251,
+     32,232,229,226,242,229,119,128,  5,226, 98,144,  0, 98, 58, 46,
+     58,181, 58,192, 58,201, 58,226, 60, 11, 60, 73, 60,146, 62, 72,
+     62, 84, 62,127, 62,135, 62,145, 64, 15, 64, 39, 64, 48, 97,  7,
+     58, 62, 58, 72, 58, 96, 58,103, 58,128, 58,152, 58,163,226,229,
+    238,231,225,236,105,128,  9,172,227,235,243,236,225,243,104,129,
+      0, 92, 58, 84,237,239,238,239,243,240,225,227,101,128,255, 60,
+    228,229,246, 97,128,  9, 44,231,117,  2, 58,110, 58,119,234,225,
+    242,225,244,105,128, 10,172,242,237,245,235,232,105,128, 10, 44,
+    104,  2, 58,134, 58,144,233,242,225,231,225,238, 97,128, 48,112,
+    244,244,232,225,105,128, 14, 63,235,225,244,225,235,225,238, 97,
+    128, 48,208,114,129,  0,124, 58,169,237,239,238,239,243,240,225,
+    227,101,128,255, 92,226,239,240,239,237,239,230,111,128, 49,  5,
+    227,233,242,227,236,101,128, 36,209,228,239,116,  2, 58,209, 58,
+    218,225,227,227,229,238,116,128, 30,  3,226,229,236,239,119,128,
+     30,  5,101,  6, 58,240, 59,  5, 59, 28, 59,170, 59,181, 59,193,
+    225,237,229,228,243,233,248,244,229,229,238,244,232,238,239,244,
+    229,115,128, 38,108, 99,  2, 59, 11, 59, 18,225,245,243,101,128,
+     34, 53,249,242,233,236,236,233, 99,128,  4, 49,104,  5, 59, 40,
+     59, 49, 59, 63, 59, 93, 59,152,225,242,225,226,233, 99,128,  6,
+     40,230,233,238,225,236,225,242,225,226,233, 99,128,254,144,105,
+      2, 59, 69, 59, 84,238,233,244,233,225,236,225,242,225,226,233,
+     99,128,254,145,242,225,231,225,238, 97,128, 48,121,237,101,  2,
+     59,100, 59,113,228,233,225,236,225,242,225,226,233, 99,128,254,
+    146,229,237,105,  2, 59,121, 59,136,238,233,244,233,225,236,225,
+    242,225,226,233, 99,128,252,159,243,239,236,225,244,229,228,225,
+    242,225,226,233, 99,128,252,  8,238,239,239,238,230,233,238,225,
+    236,225,242,225,226,233, 99,128,252,109,235,225,244,225,235,225,
+    238, 97,128, 48,217,238,225,242,237,229,238,233,225,110,128,  5,
+     98,116,132,  5,209, 59,205, 59,225, 59,245, 59,254, 97,129,  3,
+    178, 59,211,243,249,237,226,239,236,231,242,229,229,107,128,  3,
+    208,228,225,231,229,243,104,129,251, 49, 59,236,232,229,226,242,
+    229,119,128,251, 49,232,229,226,242,229,119,128,  5,209,242,225,
+    230,229,232,229,226,242,229,119,128,251, 76,104,  2, 60, 17, 60,
+     67, 97,  3, 60, 25, 60, 35, 60, 42,226,229,238,231,225,236,105,
+    128,  9,173,228,229,246, 97,128,  9, 45,231,117,  2, 60, 49, 60,
+     58,234,225,242,225,244,105,128, 10,173,242,237,245,235,232,105,
+    128, 10, 45,239,239,107,128,  2, 83,105,  5, 60, 85, 60, 96, 60,
+    107, 60,121, 60,135,232,233,242,225,231,225,238, 97,128, 48,115,
+    235,225,244,225,235,225,238, 97,128, 48,211,236,225,226,233,225,
+    236,227,236,233,227,107,128,  2,152,238,228,233,231,245,242,237,
+    245,235,232,105,128, 10,  2,242,245,243,241,245,225,242,101,128,
+     51, 49,108,  3, 60,154, 62, 55, 62, 66, 97,  2, 60,160, 62, 50,
+    227,107,  6, 60,175, 60,184, 60,221, 61,114, 61,169, 61,221,227,
+    233,242,227,236,101,128, 37,207,100,  2, 60,190, 60,199,233,225,
+    237,239,238,100,128, 37,198,239,247,238,240,239,233,238,244,233,
+    238,231,244,242,233,225,238,231,236,101,128, 37,188,108,  2, 60,
+    227, 61, 74,101,  2, 60,233, 61, 13,230,244,240,239,233,238,244,
+    233,238,103,  2, 60,248, 61,  2,240,239,233,238,244,229,114,128,
+     37,196,244,242,233,225,238,231,236,101,128, 37,192,238,244,233,
+    227,245,236,225,242,226,242,225,227,235,229,116,  2, 61, 33, 61,
+     53,236,229,230,116,129, 48, 16, 61, 42,246,229,242,244,233,227,
+    225,108,128,254, 59,242,233,231,232,116,129, 48, 17, 61, 63,246,
+    229,242,244,233,227,225,108,128,254, 60,239,247,229,114,  2, 61,
+     83, 61, 98,236,229,230,244,244,242,233,225,238,231,236,101,128,
+     37,227,242,233,231,232,244,244,242,233,225,238,231,236,101,128,
+     37,226,114,  2, 61,120, 61,131,229,227,244,225,238,231,236,101,
+    128, 37,172,233,231,232,244,240,239,233,238,244,233,238,103,  2,
+     61,148, 61,158,240,239,233,238,244,229,114,128, 37,186,244,242,
+    233,225,238,231,236,101,128, 37,182,115,  3, 61,177, 61,207, 61,
+    215,109,  2, 61,183, 61,195,225,236,236,243,241,245,225,242,101,
+    128, 37,170,233,236,233,238,231,230,225,227,101,128, 38, 59,241,
+    245,225,242,101,128, 37,160,244,225,114,128, 38,  5,245,240,112,
+      2, 61,229, 62, 11,229,114,  2, 61,236, 61,251,236,229,230,244,
+    244,242,233,225,238,231,236,101,128, 37,228,242,233,231,232,244,
+    244,242,233,225,238,231,236,101,128, 37,229,239,233,238,244,233,
+    238,103,  2, 62, 23, 62, 39,243,237,225,236,236,244,242,233,225,
+    238,231,236,101,128, 37,180,244,242,233,225,238,231,236,101,128,
+     37,178,238,107,128, 36, 35,233,238,229,226,229,236,239,119,128,
+     30,  7,239,227,107,128, 37,136,237,239,238,239,243,240,225,227,
+    101,128,255, 66,111,  3, 62, 92, 62,105, 62,116,226,225,233,237,
+    225,233,244,232,225,105,128, 14, 26,232,233,242,225,231,225,238,
+     97,128, 48,124,235,225,244,225,235,225,238, 97,128, 48,220,240,
+    225,242,229,110,128, 36,157,241,243,241,245,225,242,101,128, 51,
+    195,114,  4, 62,155, 63,149, 63,222, 64,  5,225, 99,  2, 62,162,
+     63, 56,101,  3, 62,170, 62,175, 62,243,229,120,128,248,244,236,
+    229,230,116,133,  0,123, 62,192, 62,197, 62,219, 62,227, 62,232,
+    226,116,128,248,243,109,  2, 62,203, 62,208,233,100,128,248,242,
+    239,238,239,243,240,225,227,101,128,255, 91,243,237,225,236,108,
+    128,254, 91,244,112,128,248,241,246,229,242,244,233,227,225,108,
+    128,254, 55,242,233,231,232,116,133,  0,125, 63,  5, 63, 10, 63,
+     32, 63, 40, 63, 45,226,116,128,248,254,109,  2, 63, 16, 63, 21,
+    233,100,128,248,253,239,238,239,243,240,225,227,101,128,255, 93,
+    243,237,225,236,108,128,254, 92,244,112,128,248,252,246,229,242,
+    244,233,227,225,108,128,254, 56,235,229,116,  2, 63, 64, 63,106,
+    236,229,230,116,132,  0, 91, 63, 79, 63, 84, 63, 89, 63,101,226,
+    116,128,248,240,229,120,128,248,239,237,239,238,239,243,240,225,
+    227,101,128,255, 59,244,112,128,248,238,242,233,231,232,116,132,
+      0, 93, 63,122, 63,127, 63,132, 63,144,226,116,128,248,251,229,
+    120,128,248,250,237,239,238,239,243,240,225,227,101,128,255, 61,
+    244,112,128,248,249,229,246,101,131,  2,216, 63,161, 63,172, 63,
+    178,226,229,236,239,247,227,237, 98,128,  3, 46,227,237, 98,128,
+      3,  6,233,238,246,229,242,244,229,100,  3, 63,193, 63,204, 63,
+    210,226,229,236,239,247,227,237, 98,128,  3, 47,227,237, 98,128,
+      3, 17,228,239,245,226,236,229,227,237, 98,128,  3, 97,233,228,
+    231,101,  2, 63,231, 63,242,226,229,236,239,247,227,237, 98,128,
+      3, 42,233,238,246,229,242,244,229,228,226,229,236,239,247,227,
+    237, 98,128,  3, 58,239,235,229,238,226,225,114,128,  0,166,115,
+      2, 64, 21, 64, 29,244,242,239,235,101,128,  1,128,245,240,229,
+    242,233,239,114,128,246,234,244,239,240,226,225,114,128,  1,131,
+    117,  3, 64, 56, 64, 67, 64, 78,232,233,242,225,231,225,238, 97,
+    128, 48,118,235,225,244,225,235,225,238, 97,128, 48,214,236,108,
+      2, 64, 85, 64,115,229,116,130, 32, 34, 64, 94, 64,104,233,238,
+    246,229,242,243,101,128, 37,216,239,240,229,242,225,244,239,114,
+    128, 34, 25,243,229,249,101,128, 37,206, 99,143,  0, 99, 64,156,
+     65,105, 65,116, 65,180, 65,211, 66, 48, 67,215, 68,199, 69, 43,
+     69, 92, 72, 84, 72, 92, 72,102, 72,114, 72,147, 97,  9, 64,176,
+     64,187, 64,197, 64,204, 64,211, 64,236, 64,246, 65, 42, 65, 51,
+    225,242,237,229,238,233,225,110,128,  5,110,226,229,238,231,225,
+    236,105,128,  9,154,227,245,244,101,128,  1,  7,228,229,246, 97,
+    128,  9, 26,231,117,  2, 64,218, 64,227,234,225,242,225,244,105,
+    128, 10,154,242,237,245,235,232,105,128, 10, 26,236,243,241,245,
+    225,242,101,128, 51,136,238,228,242,225,226,233,238,228,117,  4,
+     65,  8, 65, 18, 65, 24, 65, 31,226,229,238,231,225,236,105,128,
+      9,129,227,237, 98,128,  3, 16,228,229,246, 97,128,  9,  1,231,
+    245,234,225,242,225,244,105,128, 10,129,240,243,236,239,227,107,
+    128, 33,234,114,  3, 65, 59, 65, 65, 65, 91,229,239,102,128, 33,
+      5,239,110,130,  2,199, 65, 74, 65, 85,226,229,236,239,247,227,
+    237, 98,128,  3, 44,227,237, 98,128,  3, 12,242,233,225,231,229,
+    242,229,244,245,242,110,128, 33,181,226,239,240,239,237,239,230,
+    111,128, 49, 24, 99,  4, 65,126, 65,133, 65,152, 65,174,225,242,
+    239,110,128,  1, 13,229,228,233,236,236, 97,129,  0,231, 65,144,
+    225,227,245,244,101,128, 30,  9,233,242, 99,  2, 65,160, 65,165,
+    236,101,128, 36,210,245,237,230,236,229,120,128,  1,  9,245,242,
+    108,128,  2, 85,100,  2, 65,186, 65,202,239,116,129,  1, 11, 65,
+    193,225,227,227,229,238,116,128,  1, 11,243,241,245,225,242,101,
+    128, 51,197,101,  2, 65,217, 65,233,228,233,236,236, 97,129,  0,
+    184, 65,227,227,237, 98,128,  3, 39,238,116,132,  0,162, 65,246,
+     66, 14, 66, 26, 66, 37,105,  2, 65,252, 66,  4,231,242,225,228,
+    101,128, 33,  3,238,230,229,242,233,239,114,128,246,223,237,239,
+    238,239,243,240,225,227,101,128,255,224,239,236,228,243,244,249,
+    236,101,128,247,162,243,245,240,229,242,233,239,114,128,246,224,
+    104,  5, 66, 60, 66,123, 66,134, 67, 62, 67,154, 97,  4, 66, 70,
+     66, 81, 66, 91, 66, 98,225,242,237,229,238,233,225,110,128,  5,
+    121,226,229,238,231,225,236,105,128,  9,155,228,229,246, 97,128,
+      9, 27,231,117,  2, 66,105, 66,114,234,225,242,225,244,105,128,
+     10,155,242,237,245,235,232,105,128, 10, 27,226,239,240,239,237,
+    239,230,111,128, 49, 20,101,  6, 66,148, 66,168, 66,192, 67,  4,
+     67, 16, 67, 37,225,226,235,232,225,243,233,225,238,227,249,242,
+    233,236,236,233, 99,128,  4,189, 99,  2, 66,174, 66,182,235,237,
+    225,242,107,128, 39, 19,249,242,233,236,236,233, 99,128,  4, 71,
+    100,  2, 66,198, 66,242,229,243,227,229,238,228,229,114,  2, 66,
+    211, 66,231,225,226,235,232,225,243,233,225,238,227,249,242,233,
+    236,236,233, 99,128,  4,191,227,249,242,233,236,236,233, 99,128,
+      4,183,233,229,242,229,243,233,243,227,249,242,233,236,236,233,
+     99,128,  4,245,232,225,242,237,229,238,233,225,110,128,  5,115,
+    235,232,225,235,225,243,243,233,225,238,227,249,242,233,236,236,
+    233, 99,128,  4,204,246,229,242,244,233,227,225,236,243,244,242,
+    239,235,229,227,249,242,233,236,236,233, 99,128,  4,185,105,129,
+      3,199, 67, 68,229,245,227,104,  4, 67, 81, 67,116, 67,131, 67,
+    140, 97,  2, 67, 87, 67,102,227,233,242,227,236,229,235,239,242,
+    229,225,110,128, 50,119,240,225,242,229,238,235,239,242,229,225,
+    110,128, 50, 23,227,233,242,227,236,229,235,239,242,229,225,110,
+    128, 50,105,235,239,242,229,225,110,128, 49, 74,240,225,242,229,
+    238,235,239,242,229,225,110,128, 50,  9,111,  2, 67,160, 67,210,
+    227,104,  3, 67,169, 67,191, 67,201,225,110,  2, 67,176, 67,184,
+    231,244,232,225,105,128, 14, 10,244,232,225,105,128, 14,  8,233,
+    238,231,244,232,225,105,128, 14,  9,239,229,244,232,225,105,128,
+     14, 12,239,107,128,  1,136,105,  2, 67,221, 68, 67,229,245, 99,
+      5, 67,235, 68, 14, 68, 29, 68, 38, 68, 52, 97,  2, 67,241, 68,
+      0,227,233,242,227,236,229,235,239,242,229,225,110,128, 50,118,
+    240,225,242,229,238,235,239,242,229,225,110,128, 50, 22,227,233,
+    242,227,236,229,235,239,242,229,225,110,128, 50,104,235,239,242,
+    229,225,110,128, 49, 72,240,225,242,229,238,235,239,242,229,225,
+    110,128, 50,  8,245,240,225,242,229,238,235,239,242,229,225,110,
+    128, 50, 28,242, 99,  2, 68, 74, 68,169,236,101,132, 37,203, 68,
+     87, 68, 98, 68,103, 68,127,237,245,236,244,233,240,236,121,128,
+     34,151,239,116,128, 34,153,112,  2, 68,109, 68,115,236,245,115,
+    128, 34,149,239,243,244,225,236,237,225,242,107,128, 48, 54,247,
+    233,244,104,  2, 68,136, 68,152,236,229,230,244,232,225,236,230,
+    226,236,225,227,107,128, 37,208,242,233,231,232,244,232,225,236,
+    230,226,236,225,227,107,128, 37,209,245,237,230,236,229,120,130,
+      2,198, 68,182, 68,193,226,229,236,239,247,227,237, 98,128,  3,
+     45,227,237, 98,128,  3,  2,108,  3, 68,207, 68,213, 69, 11,229,
+    225,114,128, 35, 39,233,227,107,  4, 68,225, 68,236, 68,245, 68,
+    255,225,236,246,229,239,236,225,114,128,  1,194,228,229,238,244,
+    225,108,128,  1,192,236,225,244,229,242,225,108,128,  1,193,242,
+    229,244,242,239,230,236,229,120,128,  1,195,245, 98,129, 38, 99,
+     69, 18,243,245,233,116,  2, 69, 27, 69, 35,226,236,225,227,107,
+    128, 38, 99,247,232,233,244,101,128, 38,103,109,  3, 69, 51, 69,
+     65, 69, 76,227,245,226,229,228,243,241,245,225,242,101,128, 51,
+    164,239,238,239,243,240,225,227,101,128,255, 67,243,241,245,225,
+    242,229,228,243,241,245,225,242,101,128, 51,160,111,  8, 69,110,
+     69,121, 69,208, 70,150, 71,179, 71,210, 72, 61, 72, 70,225,242,
+    237,229,238,233,225,110,128,  5,129,236,239,110,131,  0, 58, 69,
+    133, 69,158, 69,177,237,239,110,  2, 69,141, 69,149,229,244,225,
+    242,121,128, 32,161,239,243,240,225,227,101,128,255, 26,115,  2,
+     69,164, 69,170,233,231,110,128, 32,161,237,225,236,108,128,254,
+     85,244,242,233,225,238,231,245,236,225,114,  2, 69,192, 69,202,
+    232,225,236,230,237,239,100,128,  2,209,237,239,100,128,  2,208,
+    109,  2, 69,214, 70,143,237, 97,134,  0, 44, 69,231, 70, 39, 70,
+     50, 70, 62, 70, 92, 70,115, 97,  3, 69,239, 70,  9, 70, 17,226,
+    239,246,101,  2, 69,248, 69,254,227,237, 98,128,  3, 19,242,233,
+    231,232,244,227,237, 98,128,  3, 21,227,227,229,238,116,128,246,
+    195,114,  2, 70, 23, 70, 30,225,226,233, 99,128,  6, 12,237,229,
+    238,233,225,110,128,  5, 93,233,238,230,229,242,233,239,114,128,
+    246,225,237,239,238,239,243,240,225,227,101,128,255, 12,242,229,
+    246,229,242,243,229,100,  2, 70, 75, 70, 86,225,226,239,246,229,
+    227,237, 98,128,  3, 20,237,239,100,128,  2,189,115,  2, 70, 98,
+     70,105,237,225,236,108,128,254, 80,245,240,229,242,233,239,114,
+    128,246,226,244,245,242,238,229,100,  2, 70,126, 70,137,225,226,
+    239,246,229,227,237, 98,128,  3, 18,237,239,100,128,  2,187,240,
+    225,243,115,128, 38, 60,110,  2, 70,156, 70,165,231,242,245,229,
+    238,116,128, 34, 69,116,  2, 70,171, 70,185,239,245,242,233,238,
+    244,229,231,242,225,108,128, 34, 46,242,239,108,142, 35,  3, 70,
+    219, 70,225, 70,240, 70,255, 71, 43, 71, 88, 71,102, 71,107, 71,
+    112, 71,117, 71,123, 71,128, 71,169, 71,174,193,195, 75,128,  0,
+      6, 66,  2, 70,231, 70,236,197, 76,128,  0,  7, 83,128,  0,  8,
+     67,  2, 70,246, 70,251,193, 78,128,  0, 24, 82,128,  0, 13, 68,
+      3, 71,  7, 71, 33, 71, 38, 67,  4, 71, 17, 71, 21, 71, 25, 71,
+     29, 49,128,  0, 17, 50,128,  0, 18, 51,128,  0, 19, 52,128,  0,
+     20,197, 76,128,  0,127,204, 69,128,  0, 16, 69,  5, 71, 55, 71,
+     59, 71, 64, 71, 69, 71, 74, 77,128,  0, 25,206, 81,128,  0,  5,
+    207, 84,128,  0,  4,211, 67,128,  0, 27, 84,  2, 71, 80, 71, 84,
+     66,128,  0, 23, 88,128,  0,  3, 70,  2, 71, 94, 71, 98, 70,128,
+      0, 12, 83,128,  0, 28,199, 83,128,  0, 29,200, 84,128,  0,  9,
+    204, 70,128,  0, 10,206,193, 75,128,  0, 21,210, 83,128,  0, 30,
+     83,  5, 71,140, 71,144, 71,154, 71,159, 71,164, 73,128,  0, 15,
+     79,129,  0, 14, 71,150, 84,128,  0,  2,212, 88,128,  0,  1,213,
+     66,128,  0, 26,217, 78,128,  0, 22,213, 83,128,  0, 31,214, 84,
+    128,  0, 11,240,249,242,233,231,232,116,129,  0,169, 71,191,115,
+      2, 71,197, 71,203,225,238,115,128,248,233,229,242,233,102,128,
+    246,217,114,  2, 71,216, 72, 44,238,229,242,226,242,225,227,235,
+    229,116,  2, 71,231, 72,  9,236,229,230,116,130, 48, 12, 71,242,
+     71,254,232,225,236,230,247,233,228,244,104,128,255, 98,246,229,
+    242,244,233,227,225,108,128,254, 65,242,233,231,232,116,130, 48,
+     13, 72, 21, 72, 33,232,225,236,230,247,233,228,244,104,128,255,
+     99,246,229,242,244,233,227,225,108,128,254, 66,240,239,242,225,
+    244,233,239,238,243,241,245,225,242,101,128, 51,127,243,241,245,
+    225,242,101,128, 51,199,246,229,242,235,231,243,241,245,225,242,
+    101,128, 51,198,240,225,242,229,110,128, 36,158,242,245,250,229,
+    233,242,111,128, 32,162,243,244,242,229,244,227,232,229,100,128,
+      2,151,245,114,  2, 72,121, 72,139,236,121,  2, 72,128, 72,134,
+    225,238,100,128, 34,207,239,114,128, 34,206,242,229,238,227,121,
+    128,  0,164,249,114,  4, 72,158, 72,166, 72,173, 72,181,194,242,
+    229,246,101,128,246,209,198,236,229,120,128,246,210,226,242,229,
+    246,101,128,246,212,230,236,229,120,128,246,213,100,146,  0,100,
+     72,228, 74,110, 75,134, 75,194, 76,114, 77, 68, 77,130, 78, 59,
+     78, 72, 78, 81, 78,107, 78,132, 78,141, 79,208, 79,216, 79,227,
+     79,247, 80, 19, 97, 11, 72,252, 73,  7, 73, 17, 73, 89, 73,152,
+     73,163, 73,174, 73,243, 74, 49, 74, 55, 74, 85,225,242,237,229,
+    238,233,225,110,128,  5,100,226,229,238,231,225,236,105,128,  9,
+    166,100,  5, 73, 29, 73, 38, 73, 44, 73, 58, 73, 74,225,242,225,
+    226,233, 99,128,  6, 54,229,246, 97,128,  9, 38,230,233,238,225,
+    236,225,242,225,226,233, 99,128,254,190,233,238,233,244,233,225,
+    236,225,242,225,226,233, 99,128,254,191,237,229,228,233,225,236,
+    225,242,225,226,233, 99,128,254,192,103,  3, 73, 97, 73,114, 73,
+    128,229,243,104,129,  5,188, 73,105,232,229,226,242,229,119,128,
+      5,188,231,229,114,129, 32, 32, 73,122,228,226,108,128, 32, 33,
+    117,  2, 73,134, 73,143,234,225,242,225,244,105,128, 10,166,242,
+    237,245,235,232,105,128, 10, 38,232,233,242,225,231,225,238, 97,
+    128, 48, 96,235,225,244,225,235,225,238, 97,128, 48,192,108,  3,
+     73,182, 73,191, 73,229,225,242,225,226,233, 99,128,  6, 47,229,
+    116,130,  5,211, 73,200, 73,220,228,225,231,229,243,104,129,251,
+     51, 73,211,232,229,226,242,229,119,128,251, 51,232,229,226,242,
+    229,119,128,  5,211,230,233,238,225,236,225,242,225,226,233, 99,
+    128,254,170,237,237, 97,  3, 73,253, 74,  6, 74, 18,225,242,225,
+    226,233, 99,128,  6, 79,236,239,247,225,242,225,226,233, 99,128,
+      6, 79,244,225,238, 97,  2, 74, 27, 74, 41,236,244,239,238,229,
+    225,242,225,226,233, 99,128,  6, 76,242,225,226,233, 99,128,  6,
+     76,238,228, 97,128,  9,100,242,231, 97,  2, 74, 63, 74, 72,232,
+    229,226,242,229,119,128,  5,167,236,229,230,244,232,229,226,242,
+    229,119,128,  5,167,243,233,225,240,238,229,245,237,225,244,225,
+    227,249,242,233,236,236,233,227,227,237, 98,128,  4,133, 98,  3,
+     74,118, 75,115, 75,125,108,  9, 74,138, 74,146, 75,  3, 75, 11,
+     75, 27, 75, 38, 75, 56, 75, 70, 75, 81,199,242,225,246,101,128,
+    246,211, 97,  2, 74,152, 74,209,238,231,236,229,226,242,225,227,
+    235,229,116,  2, 74,168, 74,188,236,229,230,116,129, 48, 10, 74,
+    177,246,229,242,244,233,227,225,108,128,254, 61,242,233,231,232,
+    116,129, 48, 11, 74,198,246,229,242,244,233,227,225,108,128,254,
+     62,114,  2, 74,215, 74,236,227,232,233,238,246,229,242,244,229,
+    228,226,229,236,239,247,227,237, 98,128,  3, 43,242,239,119,  2,
+     74,244, 74,251,236,229,230,116,128, 33,212,242,233,231,232,116,
+    128, 33,210,228,225,238,228, 97,128,  9,101,231,242,225,246,101,
+    129,246,214, 75, 21,227,237, 98,128,  3, 15,233,238,244,229,231,
+    242,225,108,128, 34, 44,236,239,247,236,233,238,101,129, 32, 23,
+     75, 50,227,237, 98,128,  3, 51,239,246,229,242,236,233,238,229,
+    227,237, 98,128,  3, 63,240,242,233,237,229,237,239,100,128,  2,
+    186,246,229,242,244,233,227,225,108,  2, 75, 94, 75,100,226,225,
+    114,128, 32, 22,236,233,238,229,225,226,239,246,229,227,237, 98,
+    128,  3, 14,239,240,239,237,239,230,111,128, 49,  9,243,241,245,
+    225,242,101,128, 51,200, 99,  4, 75,144, 75,151, 75,160, 75,187,
+    225,242,239,110,128,  1, 15,229,228,233,236,236, 97,128, 30, 17,
+    233,242, 99,  2, 75,168, 75,173,236,101,128, 36,211,245,237,230,
+    236,229,248,226,229,236,239,119,128, 30, 19,242,239,225,116,128,
+      1, 17,100,  4, 75,204, 76, 29, 76, 39, 76, 90, 97,  4, 75,214,
+     75,224, 75,231, 76,  0,226,229,238,231,225,236,105,128,  9,161,
+    228,229,246, 97,128,  9, 33,231,117,  2, 75,238, 75,247,234,225,
+    242,225,244,105,128, 10,161,242,237,245,235,232,105,128, 10, 33,
+    108,  2, 76,  6, 76, 15,225,242,225,226,233, 99,128,  6,136,230,
+    233,238,225,236,225,242,225,226,233, 99,128,251,137,228,232,225,
+    228,229,246, 97,128,  9, 92,232, 97,  3, 76, 48, 76, 58, 76, 65,
+    226,229,238,231,225,236,105,128,  9,162,228,229,246, 97,128,  9,
+     34,231,117,  2, 76, 72, 76, 81,234,225,242,225,244,105,128, 10,
+    162,242,237,245,235,232,105,128, 10, 34,239,116,  2, 76, 97, 76,
+    106,225,227,227,229,238,116,128, 30, 11,226,229,236,239,119,128,
+     30, 13,101,  8, 76,132, 76,185, 76,192, 76,217, 76,227, 76,238,
+     77, 27, 77, 63, 99,  2, 76,138, 76,175,233,237,225,236,243,229,
+    240,225,242,225,244,239,114,  2, 76,156, 76,165,225,242,225,226,
+    233, 99,128,  6,107,240,229,242,243,233,225,110,128,  6,107,249,
+    242,233,236,236,233, 99,128,  4, 52,231,242,229,101,128,  0,176,
+    232,105,  2, 76,199, 76,208,232,229,226,242,229,119,128,  5,173,
+    242,225,231,225,238, 97,128, 48,103,233,227,239,240,244,233, 99,
+    128,  3,239,235,225,244,225,235,225,238, 97,128, 48,199,108,  2,
+     76,244, 77, 11,229,244,101,  2, 76,252, 77,  3,236,229,230,116,
+    128, 35, 43,242,233,231,232,116,128, 35, 38,244, 97,129,  3,180,
+     77, 18,244,245,242,238,229,100,128,  1,141,238,239,237,233,238,
+    225,244,239,242,237,233,238,245,243,239,238,229,238,245,237,229,
+    242,225,244,239,242,226,229,238,231,225,236,105,128,  9,248,250,
+    104,128,  2,164,104,  2, 77, 74, 77,124, 97,  3, 77, 82, 77, 92,
+     77, 99,226,229,238,231,225,236,105,128,  9,167,228,229,246, 97,
+    128,  9, 39,231,117,  2, 77,106, 77,115,234,225,242,225,244,105,
+    128, 10,167,242,237,245,235,232,105,128, 10, 39,239,239,107,128,
+      2, 87,105,  6, 77,144, 77,193, 77,253, 78,  8, 78, 19, 78, 29,
+     97,  2, 77,150, 77,172,236,249,244,233,235,225,244,239,238,239,
+    115,129,  3,133, 77,166,227,237, 98,128,  3, 68,237,239,238,100,
+    129, 38,102, 77,181,243,245,233,244,247,232,233,244,101,128, 38,
+     98,229,242,229,243,233,115,133,  0,168, 77,212, 77,220, 77,231,
+     77,237, 77,245,225,227,245,244,101,128,246,215,226,229,236,239,
+    247,227,237, 98,128,  3, 36,227,237, 98,128,  3,  8,231,242,225,
+    246,101,128,246,216,244,239,238,239,115,128,  3,133,232,233,242,
+    225,231,225,238, 97,128, 48, 98,235,225,244,225,235,225,238, 97,
+    128, 48,194,244,244,239,237,225,242,107,128, 48,  3,246,105,  2,
+     78, 36, 78, 47,228,101,129,  0,247, 78, 43,115,128, 34, 35,243,
+    233,239,238,243,236,225,243,104,128, 34, 21,234,229,227,249,242,
+    233,236,236,233, 99,128,  4, 82,235,243,232,225,228,101,128, 37,
+    147,108,  2, 78, 87, 78, 98,233,238,229,226,229,236,239,119,128,
+     30, 15,243,241,245,225,242,101,128, 51,151,109,  2, 78,113, 78,
+    121,225,227,242,239,110,128,  1, 17,239,238,239,243,240,225,227,
+    101,128,255, 68,238,226,236,239,227,107,128, 37,132,111, 10, 78,
+    163, 78,175, 78,185, 78,196, 78,207, 79, 23, 79, 28, 79, 39, 79,
+    154, 79,180,227,232,225,228,225,244,232,225,105,128, 14, 14,228,
+    229,235,244,232,225,105,128, 14, 20,232,233,242,225,231,225,238,
+     97,128, 48,105,235,225,244,225,235,225,238, 97,128, 48,201,236,
+    236,225,114,132,  0, 36, 78,222, 78,233, 78,245, 79,  0,233,238,
+    230,229,242,233,239,114,128,246,227,237,239,238,239,243,240,225,
+    227,101,128,255,  4,239,236,228,243,244,249,236,101,128,247, 36,
+    115,  2, 79,  6, 79, 13,237,225,236,108,128,254,105,245,240,229,
+    242,233,239,114,128,246,228,238,103,128, 32,171,242,245,243,241,
+    245,225,242,101,128, 51, 38,116,  6, 79, 53, 79, 70, 79, 92, 79,
+    103, 79,135, 79,142,225,227,227,229,238,116,129,  2,217, 79, 64,
+    227,237, 98,128,  3,  7,226,229,236,239,247, 99,  2, 79, 81, 79,
+     86,237, 98,128,  3, 35,239,237, 98,128,  3, 35,235,225,244,225,
+    235,225,238, 97,128, 48,251,236,229,243,115,  2, 79,112, 79,116,
+    105,128,  1, 49,106,129,246,190, 79,122,243,244,242,239,235,229,
+    232,239,239,107,128,  2,132,237,225,244,104,128, 34,197,244,229,
+    228,227,233,242,227,236,101,128, 37,204,245,226,236,229,249,239,
+    228,240,225,244,225,104,129,251, 31, 79,171,232,229,226,242,229,
+    119,128,251, 31,247,238,244,225,227,107,  2, 79,191, 79,202,226,
+    229,236,239,247,227,237, 98,128,  3, 30,237,239,100,128,  2,213,
+    240,225,242,229,110,128, 36,159,243,245,240,229,242,233,239,114,
+    128,246,235,116,  2, 79,233, 79,239,225,233,108,128,  2, 86,239,
+    240,226,225,114,128,  1,140,117,  2, 79,253, 80,  8,232,233,242,
+    225,231,225,238, 97,128, 48,101,235,225,244,225,235,225,238, 97,
+    128, 48,197,122,132,  1,243, 80, 31, 80, 40, 80, 59, 80, 96,225,
+    236,244,239,238,101,128,  2,163, 99,  2, 80, 46, 80, 53,225,242,
+    239,110,128,  1,198,245,242,108,128,  2,165,101,  2, 80, 65, 80,
+     85,225,226,235,232,225,243,233,225,238,227,249,242,233,236,236,
+    233, 99,128,  4,225,227,249,242,233,236,236,233, 99,128,  4, 85,
+    232,229,227,249,242,233,236,236,233, 99,128,  4, 95,101,151,  0,
+    101, 80,159, 80,178, 80,212, 81,186, 81,248, 82, 25, 82, 37, 82,
+     60, 82,113, 83,225, 84, 27, 84,129, 84,245, 85,124, 85,199, 85,
+    230, 86, 36, 86, 89, 87, 24, 87,157, 87,177, 87,221, 88, 56, 97,
+      2, 80,165, 80,172,227,245,244,101,128,  0,233,242,244,104,128,
+     38, 65, 98,  3, 80,186, 80,195, 80,205,229,238,231,225,236,105,
+    128,  9,143,239,240,239,237,239,230,111,128, 49, 28,242,229,246,
+    101,128,  1, 21, 99,  5, 80,224, 81, 41, 81, 55, 81, 87, 81,176,
+     97,  2, 80,230, 81, 35,238,228,242, 97,  3, 80,241, 80,248, 81,
+      3,228,229,246, 97,128,  9, 13,231,245,234,225,242,225,244,105,
+    128, 10,141,246,239,247,229,236,243,233,231,110,  2, 81, 17, 81,
+     24,228,229,246, 97,128,  9, 69,231,245,234,225,242,225,244,105,
+    128, 10,197,242,239,110,128,  1, 27,229,228,233,236,236,225,226,
+    242,229,246,101,128, 30, 29,104,  2, 81, 61, 81, 72,225,242,237,
+    229,238,233,225,110,128,  5,101,249,233,247,238,225,242,237,229,
+    238,233,225,110,128,  5,135,233,242, 99,  2, 81, 95, 81,100,236,
+    101,128, 36,212,245,237,230,236,229,120,134,  0,234, 81,121, 81,
+    129, 81,137, 81,148, 81,156, 81,168,225,227,245,244,101,128, 30,
+    191,226,229,236,239,119,128, 30, 25,228,239,244,226,229,236,239,
+    119,128, 30,199,231,242,225,246,101,128, 30,193,232,239,239,235,
+    225,226,239,246,101,128, 30,195,244,233,236,228,101,128, 30,197,
+    249,242,233,236,236,233, 99,128,  4, 84,100,  4, 81,196, 81,206,
+     81,212, 81,222,226,236,231,242,225,246,101,128,  2,  5,229,246,
+     97,128,  9, 15,233,229,242,229,243,233,115,128,  0,235,239,116,
+    130,  1, 23, 81,231, 81,240,225,227,227,229,238,116,128,  1, 23,
+    226,229,236,239,119,128, 30,185,101,  2, 81,254, 82,  9,231,245,
+    242,237,245,235,232,105,128, 10, 15,237,225,244,242,225,231,245,
+    242,237,245,235,232,105,128, 10, 71,230,227,249,242,233,236,236,
+    233, 99,128,  4, 68,103,  2, 82, 43, 82, 50,242,225,246,101,128,
+      0,232,245,234,225,242,225,244,105,128, 10,143,104,  4, 82, 70,
+     82, 81, 82, 92, 82,102,225,242,237,229,238,233,225,110,128,  5,
+    103,226,239,240,239,237,239,230,111,128, 49, 29,233,242,225,231,
+    225,238, 97,128, 48, 72,239,239,235,225,226,239,246,101,128, 30,
+    187,105,  4, 82,123, 82,134, 83,192, 83,207,226,239,240,239,237,
+    239,230,111,128, 49, 31,231,232,116,142,  0, 56, 82,168, 82,177,
+     82,187, 82,217, 82,224, 83,  6, 83, 31, 83, 76, 83,110, 83,122,
+     83,133, 83,166, 83,174, 83,185,225,242,225,226,233, 99,128,  6,
+    104,226,229,238,231,225,236,105,128,  9,238,227,233,242,227,236,
+    101,129, 36,103, 82,198,233,238,246,229,242,243,229,243,225,238,
+    243,243,229,242,233,102,128, 39,145,228,229,246, 97,128,  9,110,
+    229,229,110,  2, 82,232, 82,241,227,233,242,227,236,101,128, 36,
+    113,112,  2, 82,247, 82,254,225,242,229,110,128, 36,133,229,242,
+    233,239,100,128, 36,153,231,117,  2, 83, 13, 83, 22,234,225,242,
+    225,244,105,128, 10,238,242,237,245,235,232,105,128, 10,110,104,
+      2, 83, 37, 83, 63, 97,  2, 83, 43, 83, 54,227,235,225,242,225,
+    226,233, 99,128,  6,104,238,231,250,232,239,117,128, 48, 40,238,
+    239,244,229,226,229,225,237,229,100,128, 38,107,105,  2, 83, 82,
+     83,100,228,229,239,231,242,225,240,232,233,227,240,225,242,229,
+    110,128, 50, 39,238,230,229,242,233,239,114,128, 32,136,237,239,
+    238,239,243,240,225,227,101,128,255, 24,239,236,228,243,244,249,
+    236,101,128,247, 56,112,  2, 83,139, 83,146,225,242,229,110,128,
+     36,123,229,114,  2, 83,153, 83,159,233,239,100,128, 36,143,243,
+    233,225,110,128,  6,248,242,239,237,225,110,128, 33,119,243,245,
+    240,229,242,233,239,114,128, 32,120,244,232,225,105,128, 14, 88,
+    238,246,229,242,244,229,228,226,242,229,246,101,128,  2,  7,239,
+    244,233,230,233,229,228,227,249,242,233,236,236,233, 99,128,  4,
+    101,107,  2, 83,231, 83,255,225,244,225,235,225,238, 97,129, 48,
+    168, 83,243,232,225,236,230,247,233,228,244,104,128,255,116,111,
+      2, 84,  5, 84, 20,238,235,225,242,231,245,242,237,245,235,232,
+    105,128, 10,116,242,229,225,110,128, 49, 84,108,  3, 84, 35, 84,
+     46, 84,107,227,249,242,233,236,236,233, 99,128,  4, 59,101,  2,
+     84, 52, 84, 59,237,229,238,116,128, 34,  8,246,229,110,  3, 84,
+     69, 84, 78, 84, 99,227,233,242,227,236,101,128, 36,106,112,  2,
+     84, 84, 84, 91,225,242,229,110,128, 36,126,229,242,233,239,100,
+    128, 36,146,242,239,237,225,110,128, 33,122,236,233,240,243,233,
+    115,129, 32, 38, 84,118,246,229,242,244,233,227,225,108,128, 34,
+    238,109,  5, 84,141, 84,169, 84,180, 84,200, 84,211,225,227,242,
+    239,110,130,  1, 19, 84,153, 84,161,225,227,245,244,101,128, 30,
+     23,231,242,225,246,101,128, 30, 21,227,249,242,233,236,236,233,
+     99,128,  4, 60,228,225,243,104,129, 32, 20, 84,189,246,229,242,
+    244,233,227,225,108,128,254, 49,239,238,239,243,240,225,227,101,
+    128,255, 69,112,  2, 84,217, 84,237,232,225,243,233,243,237,225,
+    242,235,225,242,237,229,238,233,225,110,128,  5, 91,244,249,243,
+    229,116,128, 34,  5,110,  6, 85,  3, 85, 14, 85, 25, 85, 69, 85,
+    101, 85,116,226,239,240,239,237,239,230,111,128, 49, 35,227,249,
+    242,233,236,236,233, 99,128,  4, 61,100,  2, 85, 31, 85, 50,225,
+    243,104,129, 32, 19, 85, 39,246,229,242,244,233,227,225,108,128,
+    254, 50,229,243,227,229,238,228,229,242,227,249,242,233,236,236,
+    233, 99,128,  4,163,103,130,  1, 75, 85, 77, 85, 88,226,239,240,
+    239,237,239,230,111,128, 49, 37,232,229,227,249,242,233,236,236,
+    233, 99,128,  4,165,232,239,239,235,227,249,242,233,236,236,233,
+     99,128,  4,200,243,240,225,227,101,128, 32,  2,111,  3, 85,132,
+     85,140, 85,149,231,239,238,229,107,128,  1, 25,235,239,242,229,
+    225,110,128, 49, 83,240,229,110,130,  2, 91, 85,159, 85,168,227,
+    236,239,243,229,100,128,  2,154,242,229,246,229,242,243,229,100,
+    130,  2, 92, 85,183, 85,192,227,236,239,243,229,100,128,  2, 94,
+    232,239,239,107,128,  2, 93,112,  2, 85,205, 85,212,225,242,229,
+    110,128, 36,160,243,233,236,239,110,129,  3,181, 85,222,244,239,
+    238,239,115,128,  3,173,241,117,  2, 85,237, 86, 25,225,108,130,
+      0, 61, 85,246, 86,  2,237,239,238,239,243,240,225,227,101,128,
+    255, 29,115,  2, 86,  8, 86, 15,237,225,236,108,128,254,102,245,
+    240,229,242,233,239,114,128, 32,124,233,246,225,236,229,238,227,
+    101,128, 34, 97,114,  3, 86, 44, 86, 55, 86, 66,226,239,240,239,
+    237,239,230,111,128, 49, 38,227,249,242,233,236,236,233, 99,128,
+      4, 64,229,246,229,242,243,229,100,129,  2, 88, 86, 78,227,249,
+    242,233,236,236,233, 99,128,  4, 77,115,  6, 86,103, 86,114, 86,
+    134, 86,215, 87,  4, 87, 14,227,249,242,233,236,236,233, 99,128,
+      4, 65,228,229,243,227,229,238,228,229,242,227,249,242,233,236,
+    236,233, 99,128,  4,171,104,132,  2,131, 86,146, 86,153, 86,184,
+     86,199,227,245,242,108,128,  2,134,239,242,116,  2, 86,161, 86,
+    168,228,229,246, 97,128,  9, 14,246,239,247,229,236,243,233,231,
+    238,228,229,246, 97,128,  9, 70,242,229,246,229,242,243,229,228,
+    236,239,239,112,128,  1,170,243,241,245,225,244,242,229,246,229,
+    242,243,229,100,128,  2,133,237,225,236,108,  2, 86,224, 86,235,
+    232,233,242,225,231,225,238, 97,128, 48, 71,235,225,244,225,235,
+    225,238, 97,129, 48,167, 86,248,232,225,236,230,247,233,228,244,
+    104,128,255,106,244,233,237,225,244,229,100,128, 33, 46,245,240,
+    229,242,233,239,114,128,246,236,116,  5, 87, 36, 87, 62, 87, 66,
+     87, 83, 87,149, 97,130,  3,183, 87, 44, 87, 54,242,237,229,238,
+    233,225,110,128,  5,104,244,239,238,239,115,128,  3,174,104,128,
+      0,240,233,236,228,101,129, 30,189, 87, 75,226,229,236,239,119,
+    128, 30, 27,238,225,232,244, 97,  3, 87, 95, 87,127, 87,136,230,
+    239,245,235,104,  2, 87,105, 87,114,232,229,226,242,229,119,128,
+      5,145,236,229,230,244,232,229,226,242,229,119,128,  5,145,232,
+    229,226,242,229,119,128,  5,145,236,229,230,244,232,229,226,242,
+    229,119,128,  5,145,245,242,238,229,100,128,  1,221,117,  2, 87,
+    163, 87,172,235,239,242,229,225,110,128, 49, 97,242,111,128, 32,
+    172,246,239,247,229,236,243,233,231,110,  3, 87,193, 87,203, 87,
+    210,226,229,238,231,225,236,105,128,  9,199,228,229,246, 97,128,
+      9, 71,231,245,234,225,242,225,244,105,128, 10,199,120,  2, 87,
+    227, 88, 44,227,236,225,109,132,  0, 33, 87,242, 87,253, 88, 24,
+     88, 36,225,242,237,229,238,233,225,110,128,  5, 92,100,  2, 88,
+      3, 88,  8,226,108,128, 32, 60,239,247,110,129,  0,161, 88, 16,
+    243,237,225,236,108,128,247,161,237,239,238,239,243,240,225,227,
+    101,128,255,  1,243,237,225,236,108,128,247, 33,233,243,244,229,
+    238,244,233,225,108,128, 34,  3,250,104,131,  2,146, 88, 67, 88,
+     86, 88, 97, 99,  2, 88, 73, 88, 80,225,242,239,110,128,  1,239,
+    245,242,108,128,  2,147,242,229,246,229,242,243,229,100,128,  1,
+    185,244,225,233,108,128,  1,186,102,140,  0,102, 88,132, 88,214,
+     88,225, 88,234, 88,246, 89, 93, 89,109, 91,117, 91,130, 91,156,
+     93, 33, 93, 41, 97,  4, 88,142, 88,149, 88,160, 88,171,228,229,
+    246, 97,128,  9, 94,231,245,242,237,245,235,232,105,128, 10, 94,
+    232,242,229,238,232,229,233,116,128, 33,  9,244,232, 97,  3, 88,
+    181, 88,190, 88,202,225,242,225,226,233, 99,128,  6, 78,236,239,
+    247,225,242,225,226,233, 99,128,  6, 78,244,225,238,225,242,225,
+    226,233, 99,128,  6, 75,226,239,240,239,237,239,230,111,128, 49,
+      8,227,233,242,227,236,101,128, 36,213,228,239,244,225,227,227,
+    229,238,116,128, 30, 31,101,  3, 88,254, 89, 76, 89, 86,104,  4,
+     89,  8, 89, 31, 89, 45, 89, 61,225,114,  2, 89, 15, 89, 22,225,
+    226,233, 99,128,  6, 65,237,229,238,233,225,110,128,  5,134,230,
+    233,238,225,236,225,242,225,226,233, 99,128,254,210,233,238,233,
+    244,233,225,236,225,242,225,226,233, 99,128,254,211,237,229,228,
+    233,225,236,225,242,225,226,233, 99,128,254,212,233,227,239,240,
+    244,233, 99,128,  3,229,237,225,236,101,128, 38, 64,102,130,251,
+      0, 89,101, 89,105,105,128,251,  3,108,128,251,  4,105,136,251,
+      1, 89,129, 89,169, 89,180, 89,202, 90, 68, 90, 85, 90, 93, 90,
+    106,230,244,229,229,110,  2, 89,139, 89,148,227,233,242,227,236,
+    101,128, 36,110,112,  2, 89,154, 89,161,225,242,229,110,128, 36,
+    130,229,242,233,239,100,128, 36,150,231,245,242,229,228,225,243,
+    104,128, 32, 18,236,236,229,100,  2, 89,189, 89,195,226,239,120,
+    128, 37,160,242,229,227,116,128, 37,172,238,225,108,  5, 89,216,
+     89,255, 90, 16, 90, 33, 90, 49,235,225,102,130,  5,218, 89,226,
+     89,246,228,225,231,229,243,104,129,251, 58, 89,237,232,229,226,
+    242,229,119,128,251, 58,232,229,226,242,229,119,128,  5,218,237,
+    229,109,129,  5,221, 90,  7,232,229,226,242,229,119,128,  5,221,
+    238,245,110,129,  5,223, 90, 24,232,229,226,242,229,119,128,  5,
+    223,240,101,129,  5,227, 90, 40,232,229,226,242,229,119,128,  5,
+    227,244,243,225,228,105,129,  5,229, 90, 59,232,229,226,242,229,
+    119,128,  5,229,242,243,244,244,239,238,229,227,232,233,238,229,
+    243,101,128,  2,201,243,232,229,249,101,128, 37,201,244,225,227,
+    249,242,233,236,236,233, 99,128,  4,115,246,101,142,  0, 53, 90,
+    139, 90,148, 90,158, 90,188, 90,195, 90,205, 90,230, 91,  1, 91,
+     35, 91, 47, 91, 58, 91, 91, 91, 99, 91,110,225,242,225,226,233,
+     99,128,  6,101,226,229,238,231,225,236,105,128,  9,235,227,233,
+    242,227,236,101,129, 36,100, 90,169,233,238,246,229,242,243,229,
+    243,225,238,243,243,229,242,233,102,128, 39,142,228,229,246, 97,
+    128,  9,107,229,233,231,232,244,232,115,128, 33, 93,231,117,  2,
+     90,212, 90,221,234,225,242,225,244,105,128, 10,235,242,237,245,
+    235,232,105,128, 10,107,232, 97,  2, 90,237, 90,248,227,235,225,
+    242,225,226,233, 99,128,  6,101,238,231,250,232,239,117,128, 48,
+     37,105,  2, 91,  7, 91, 25,228,229,239,231,242,225,240,232,233,
+    227,240,225,242,229,110,128, 50, 36,238,230,229,242,233,239,114,
+    128, 32,133,237,239,238,239,243,240,225,227,101,128,255, 21,239,
+    236,228,243,244,249,236,101,128,247, 53,112,  2, 91, 64, 91, 71,
+    225,242,229,110,128, 36,120,229,114,  2, 91, 78, 91, 84,233,239,
+    100,128, 36,140,243,233,225,110,128,  6,245,242,239,237,225,110,
+    128, 33,116,243,245,240,229,242,233,239,114,128, 32,117,244,232,
+    225,105,128, 14, 85,108,129,251,  2, 91,123,239,242,233,110,128,
+      1,146,109,  2, 91,136, 91,147,239,238,239,243,240,225,227,101,
+    128,255, 70,243,241,245,225,242,101,128, 51,153,111,  4, 91,166,
+     91,188, 91,200, 91,207,230, 97,  2, 91,173, 91,181,238,244,232,
+    225,105,128, 14, 31,244,232,225,105,128, 14, 29,238,231,237,225,
+    238,244,232,225,105,128, 14, 79,242,225,236,108,128, 34,  0,245,
+    114,142,  0, 52, 91,240, 91,249, 92,  3, 92, 33, 92, 40, 92, 65,
+     92, 92, 92,126, 92,138, 92,157, 92,168, 92,201, 92,209, 92,220,
+    225,242,225,226,233, 99,128,  6,100,226,229,238,231,225,236,105,
+    128,  9,234,227,233,242,227,236,101,129, 36, 99, 92, 14,233,238,
     246,229,242,243,229,243,225,238,243,243,229,242,233,102,128, 39,
-    146,228,229,246, 97,128,  9,111,231,117,  2,134, 31,134, 40,234,
-    225,242,225,244,105,128, 10,239,242,237,245,235,232,105,128, 10,
-    111,232, 97,  2,134, 56,134, 67,227,235,225,242,225,226,233, 99,
-    128,  6,105,238,231,250,232,239,117,128, 48, 41,105,  2,134, 82,
-    134,100,228,229,239,231,242,225,240,232,233,227,240,225,242,229,
-    110,128, 50, 40,238,230,229,242,233,239,114,128, 32,137,237,239,
-    238,239,243,240,225,227,101,128,255, 25,239,236,228,243,244,249,
-    236,101,128,247, 57,112,  2,134,139,134,146,225,242,229,110,128,
-     36,124,229,114,  2,134,153,134,159,233,239,100,128, 36,144,243,
-    233,225,110,128,  6,249,242,239,237,225,110,128, 33,120,243,245,
-    240,229,242,233,239,114,128, 32,121,116,  2,134,191,134,229,229,
-    229,110,  2,134,199,134,208,227,233,242,227,236,101,128, 36,114,
-    112,  2,134,214,134,221,225,242,229,110,128, 36,134,229,242,233,
-    239,100,128, 36,154,232,225,105,128, 14, 89,106,129,  1,204,134,
-    241,229,227,249,242,233,236,236,233, 99,128,  4, 90,235,225,244,
-    225,235,225,238, 97,129, 48,243,135, 10,232,225,236,230,247,233,
-    228,244,104,128,255,157,108,  2,135, 28,135, 42,229,231,242,233,
-    231,232,244,236,239,238,103,128,  1,158,233,238,229,226,229,236,
-    239,119,128, 30, 73,109,  2,135, 59,135, 70,239,238,239,243,240,
-    225,227,101,128,255, 78,243,241,245,225,242,101,128, 51,154,110,
-      2,135, 85,135,135, 97,  3,135, 93,135,103,135,110,226,229,238,
-    231,225,236,105,128,  9,163,228,229,246, 97,128,  9, 35,231,117,
-      2,135,117,135,126,234,225,242,225,244,105,128, 10,163,242,237,
-    245,235,232,105,128, 10, 35,238,225,228,229,246, 97,128,  9, 41,
-    111,  6,135,158,135,169,135,194,135,235,136,187,137,114,232,233,
-    242,225,231,225,238, 97,128, 48,110,235,225,244,225,235,225,238,
-     97,129, 48,206,135,182,232,225,236,230,247,233,228,244,104,128,
-    255,137,110,  3,135,202,135,218,135,227,226,242,229,225,235,233,
-    238,231,243,240,225,227,101,128,  0,160,229,238,244,232,225,105,
-    128, 14, 19,245,244,232,225,105,128, 14, 25,239,110,  7,135,252,
-    136,  5,136, 19,136, 53,136, 69,136,110,136,169,225,242,225,226,
-    233, 99,128,  6, 70,230,233,238,225,236,225,242,225,226,233, 99,
-    128,254,230,231,232,245,238,238, 97,  2,136, 30,136, 39,225,242,
-    225,226,233, 99,128,  6,186,230,233,238,225,236,225,242,225,226,
-    233, 99,128,251,159,233,238,233,244,233,225,236,225,242,225,226,
-    233, 99,128,254,231,234,229,229,237,105,  2,136, 79,136, 94,238,
-    233,244,233,225,236,225,242,225,226,233, 99,128,252,210,243,239,
-    236,225,244,229,228,225,242,225,226,233, 99,128,252, 75,237,101,
-      2,136,117,136,130,228,233,225,236,225,242,225,226,233, 99,128,
-    254,232,229,237,105,  2,136,138,136,153,238,233,244,233,225,236,
-    225,242,225,226,233, 99,128,252,213,243,239,236,225,244,229,228,
-    225,242,225,226,233, 99,128,252, 78,238,239,239,238,230,233,238,
-    225,236,225,242,225,226,233, 99,128,252,141,116,  7,136,203,136,
-    214,136,243,137, 22,137, 34,137, 54,137, 80,227,239,238,244,225,
-    233,238,115,128, 34, 12,101,  2,136,220,136,236,236,229,237,229,
-    238,116,129, 34,  9,136,231,239,102,128, 34,  9,241,245,225,108,
-    128, 34, 96,231,242,229,225,244,229,114,129, 34,111,136,255,238,
-    239,114,  2,137,  7,137, 15,229,241,245,225,108,128, 34,113,236,
-    229,243,115,128, 34,121,233,228,229,238,244,233,227,225,108,128,
-     34, 98,236,229,243,115,129, 34,110,137, 43,238,239,242,229,241,
-    245,225,108,128, 34,112,112,  2,137, 60,137, 70,225,242,225,236,
-    236,229,108,128, 34, 38,242,229,227,229,228,229,115,128, 34,128,
-    243,117,  3,137, 89,137, 96,137,105,226,243,229,116,128, 34,132,
-    227,227,229,229,228,115,128, 34,129,240,229,242,243,229,116,128,
-     34,133,247,225,242,237,229,238,233,225,110,128,  5,118,240,225,
-    242,229,110,128, 36,169,115,  2,137,140,137,149,243,241,245,225,
-    242,101,128, 51,177,245,240,229,242,233,239,114,128, 32,127,244,
-    233,236,228,101,128,  0,241,117,132,  3,189,137,179,137,190,138,
-     15,138, 98,232,233,242,225,231,225,238, 97,128, 48,108,107,  2,
-    137,196,137,220,225,244,225,235,225,238, 97,129, 48,204,137,208,
-    232,225,236,230,247,233,228,244,104,128,255,135,244, 97,  3,137,
-    229,137,239,137,246,226,229,238,231,225,236,105,128,  9,188,228,
-    229,246, 97,128,  9, 60,231,117,  2,137,253,138,  6,234,225,242,
-    225,244,105,128, 10,188,242,237,245,235,232,105,128, 10, 60,109,
-      2,138, 21,138, 55,226,229,242,243,233,231,110,130,  0, 35,138,
-     35,138, 47,237,239,238,239,243,240,225,227,101,128,255,  3,243,
-    237,225,236,108,128,254, 95,229,114,  2,138, 62,138, 94,225,236,
-    243,233,231,110,  2,138, 73,138, 81,231,242,229,229,107,128,  3,
-    116,236,239,247,229,242,231,242,229,229,107,128,  3,117,111,128,
-     33, 22,110,130,  5,224,138,106,138,126,228,225,231,229,243,104,
-    129,251, 64,138,117,232,229,226,242,229,119,128,251, 64,232,229,
-    226,242,229,119,128,  5,224,246,243,241,245,225,242,101,128, 51,
-    181,247,243,241,245,225,242,101,128, 51,187,249, 97,  3,138,164,
-    138,174,138,181,226,229,238,231,225,236,105,128,  9,158,228,229,
-    246, 97,128,  9, 30,231,117,  2,138,188,138,197,234,225,242,225,
-    244,105,128, 10,158,242,237,245,235,232,105,128, 10, 30,111,147,
-      0,111,138,248,139, 14,139, 92,140,  6,140, 78,140, 93,140,133,
-    141,  0,141, 21,141, 59,141, 70,141,248,143, 82,143,146,143,179,
-    143,225,144, 98,144,145,144,157, 97,  2,138,254,139,  5,227,245,
-    244,101,128,  0,243,238,231,244,232,225,105,128, 14, 45, 98,  4,
-    139, 24,139, 66,139, 75,139, 85,225,242,242,229,100,130,  2,117,
-    139, 36,139, 47,227,249,242,233,236,236,233, 99,128,  4,233,228,
+    141,228,229,246, 97,128,  9,106,231,117,  2, 92, 47, 92, 56,234,
+    225,242,225,244,105,128, 10,234,242,237,245,235,232,105,128, 10,
+    106,232, 97,  2, 92, 72, 92, 83,227,235,225,242,225,226,233, 99,
+    128,  6,100,238,231,250,232,239,117,128, 48, 36,105,  2, 92, 98,
+     92,116,228,229,239,231,242,225,240,232,233,227,240,225,242,229,
+    110,128, 50, 35,238,230,229,242,233,239,114,128, 32,132,237,239,
+    238,239,243,240,225,227,101,128,255, 20,238,245,237,229,242,225,
+    244,239,242,226,229,238,231,225,236,105,128,  9,247,239,236,228,
+    243,244,249,236,101,128,247, 52,112,  2, 92,174, 92,181,225,242,
+    229,110,128, 36,119,229,114,  2, 92,188, 92,194,233,239,100,128,
+     36,139,243,233,225,110,128,  6,244,242,239,237,225,110,128, 33,
+    115,243,245,240,229,242,233,239,114,128, 32,116,116,  2, 92,226,
+     93,  8,229,229,110,  2, 92,234, 92,243,227,233,242,227,236,101,
+    128, 36,109,112,  2, 92,249, 93,  0,225,242,229,110,128, 36,129,
+    229,242,233,239,100,128, 36,149,104,  2, 93, 14, 93, 19,225,105,
+    128, 14, 84,244,239,238,229,227,232,233,238,229,243,101,128,  2,
+    203,240,225,242,229,110,128, 36,161,242, 97,  2, 93, 48, 93, 56,
+    227,244,233,239,110,128, 32, 68,238, 99,128, 32,163,103,144,  0,
+    103, 93, 97, 94, 43, 94, 66, 94,127, 94,144, 95, 65, 96, 58, 96,
+    143, 96,156, 97, 14, 97, 39, 97, 67, 97, 89, 98, 34, 98, 56, 98,
+    158, 97,  9, 93,117, 93,127, 93,134, 93,141, 93,205, 93,230, 93,
+    241, 93,252, 94, 30,226,229,238,231,225,236,105,128,  9,151,227,
+    245,244,101,128,  1,245,228,229,246, 97,128,  9, 23,102,  4, 93,
+    151, 93,160, 93,174, 93,190,225,242,225,226,233, 99,128,  6,175,
+    230,233,238,225,236,225,242,225,226,233, 99,128,251,147,233,238,
+    233,244,233,225,236,225,242,225,226,233, 99,128,251,148,237,229,
+    228,233,225,236,225,242,225,226,233, 99,128,251,149,231,117,  2,
+     93,212, 93,221,234,225,242,225,244,105,128, 10,151,242,237,245,
+    235,232,105,128, 10, 23,232,233,242,225,231,225,238, 97,128, 48,
+     76,235,225,244,225,235,225,238, 97,128, 48,172,237,237, 97,130,
+      3,179, 94,  6, 94, 19,236,225,244,233,238,243,237,225,236,108,
+    128,  2, 99,243,245,240,229,242,233,239,114,128,  2,224,238,231,
+    233,225,227,239,240,244,233, 99,128,  3,235, 98,  2, 94, 49, 94,
+     59,239,240,239,237,239,230,111,128, 49, 13,242,229,246,101,128,
+      1, 31, 99,  4, 94, 76, 94, 83, 94, 92, 94,114,225,242,239,110,
+    128,  1,231,229,228,233,236,236, 97,128,  1, 35,233,242, 99,  2,
+     94,100, 94,105,236,101,128, 36,214,245,237,230,236,229,120,128,
+      1, 29,239,237,237,225,225,227,227,229,238,116,128,  1, 35,228,
+    239,116,129,  1, 33, 94,135,225,227,227,229,238,116,128,  1, 33,
+    101,  6, 94,158, 94,169, 94,180, 94,191, 94,210, 95, 56,227,249,
+    242,233,236,236,233, 99,128,  4, 51,232,233,242,225,231,225,238,
+     97,128, 48, 82,235,225,244,225,235,225,238, 97,128, 48,178,239,
+    237,229,244,242,233,227,225,236,236,249,229,241,245,225,108,128,
+     34, 81,114,  3, 94,218, 95, 11, 95, 21,229,243,104,  3, 94,228,
+     94,243, 94,252,225,227,227,229,238,244,232,229,226,242,229,119,
+    128,  5,156,232,229,226,242,229,119,128,  5,243,237,245,241,228,
+    225,237,232,229,226,242,229,119,128,  5,157,237,225,238,228,226,
+    236,115,128,  0,223,243,232,225,249,233,109,  2, 95, 32, 95, 47,
+    225,227,227,229,238,244,232,229,226,242,229,119,128,  5,158,232,
+    229,226,242,229,119,128,  5,244,244,225,237,225,242,107,128, 48,
+     19,104,  5, 95, 77, 95,210, 96, 17, 96, 42, 96, 48, 97,  4, 95,
+     87, 95, 97, 95,120, 95,145,226,229,238,231,225,236,105,128,  9,
+    152,100,  2, 95,103, 95,114,225,242,237,229,238,233,225,110,128,
+      5,114,229,246, 97,128,  9, 24,231,117,  2, 95,127, 95,136,234,
+    225,242,225,244,105,128, 10,152,242,237,245,235,232,105,128, 10,
+     24,233,110,  4, 95,156, 95,165, 95,179, 95,195,225,242,225,226,
+    233, 99,128,  6, 58,230,233,238,225,236,225,242,225,226,233, 99,
+    128,254,206,233,238,233,244,233,225,236,225,242,225,226,233, 99,
+    128,254,207,237,229,228,233,225,236,225,242,225,226,233, 99,128,
+    254,208,101,  3, 95,218, 95,239, 96,  0,237,233,228,228,236,229,
+    232,239,239,235,227,249,242,233,236,236,233, 99,128,  4,149,243,
+    244,242,239,235,229,227,249,242,233,236,236,233, 99,128,  4,147,
+    245,240,244,245,242,238,227,249,242,233,236,236,233, 99,128,  4,
+    145,232, 97,  2, 96, 24, 96, 31,228,229,246, 97,128,  9, 90,231,
+    245,242,237,245,235,232,105,128, 10, 90,239,239,107,128,  2, 96,
+    250,243,241,245,225,242,101,128, 51,147,105,  3, 96, 66, 96, 77,
+     96, 88,232,233,242,225,231,225,238, 97,128, 48, 78,235,225,244,
+    225,235,225,238, 97,128, 48,174,109,  2, 96, 94, 96,105,225,242,
+    237,229,238,233,225,110,128,  5, 99,229,108,130,  5,210, 96,114,
+     96,134,228,225,231,229,243,104,129,251, 50, 96,125,232,229,226,
+    242,229,119,128,251, 50,232,229,226,242,229,119,128,  5,210,234,
+    229,227,249,242,233,236,236,233, 99,128,  4, 83,236,239,244,244,
+    225,108,  2, 96,167, 96,184,233,238,246,229,242,244,229,228,243,
+    244,242,239,235,101,128,  1,190,243,244,239,112,132,  2,148, 96,
+    199, 96,210, 96,216, 96,248,233,238,246,229,242,244,229,100,128,
+      2,150,237,239,100,128,  2,192,242,229,246,229,242,243,229,100,
+    130,  2,149, 96,231, 96,237,237,239,100,128,  2,193,243,245,240,
+    229,242,233,239,114,128,  2,228,243,244,242,239,235,101,129,  2,
+    161, 97,  3,242,229,246,229,242,243,229,100,128,  2,162,109,  2,
+     97, 20, 97, 28,225,227,242,239,110,128, 30, 33,239,238,239,243,
+    240,225,227,101,128,255, 71,111,  2, 97, 45, 97, 56,232,233,242,
+    225,231,225,238, 97,128, 48, 84,235,225,244,225,235,225,238, 97,
+    128, 48,180,240, 97,  2, 97, 74, 97, 80,242,229,110,128, 36,162,
+    243,241,245,225,242,101,128, 51,172,114,  2, 97, 95, 97,192, 97,
+      2, 97,101, 97,109,228,233,229,238,116,128, 34,  7,246,101,134,
+      0, 96, 97,126, 97,137, 97,154, 97,161, 97,170, 97,182,226,229,
+    236,239,247,227,237, 98,128,  3, 22, 99,  2, 97,143, 97,148,237,
+     98,128,  3,  0,239,237, 98,128,  3,  0,228,229,246, 97,128,  9,
+     83,236,239,247,237,239,100,128,  2,206,237,239,238,239,243,240,
+    225,227,101,128,255, 64,244,239,238,229,227,237, 98,128,  3, 64,
+    229,225,244,229,114,132,  0, 62, 97,208, 97,227, 97,239, 98, 26,
+    229,241,245,225,108,129, 34,101, 97,218,239,242,236,229,243,115,
+    128, 34,219,237,239,238,239,243,240,225,227,101,128,255, 30,111,
+      2, 97,245, 98, 15,114,  2, 97,251, 98,  8,229,241,245,233,246,
+    225,236,229,238,116,128, 34,115,236,229,243,115,128, 34,119,246,
+    229,242,229,241,245,225,108,128, 34,103,243,237,225,236,108,128,
+    254,101,115,  2, 98, 40, 98, 48,227,242,233,240,116,128,  2, 97,
+    244,242,239,235,101,128,  1,229,117,  4, 98, 66, 98, 77, 98,134,
+     98,145,232,233,242,225,231,225,238, 97,128, 48, 80,233,108,  2,
+     98, 84, 98,109,236,229,237,239,116,  2, 98, 94, 98,101,236,229,
+    230,116,128,  0,171,242,233,231,232,116,128,  0,187,243,233,238,
+    231,108,  2, 98,119, 98,126,236,229,230,116,128, 32, 57,242,233,
+    231,232,116,128, 32, 58,235,225,244,225,235,225,238, 97,128, 48,
+    176,242,225,237,245,243,241,245,225,242,101,128, 51, 24,249,243,
+    241,245,225,242,101,128, 51,201,104,144,  0,104, 98,204,101, 90,
+    101,125,101,162,101,202,103, 90,103,110,104, 75,104, 87,104, 99,
+    105,167,105,175,105,186,105,195,106, 19,106, 23, 97, 13, 98,232,
+     99, 15, 99, 25, 99, 55, 99, 80, 99,158, 99,170, 99,195, 99,210,
+     99,239, 99,252,100, 54,100, 63, 97,  2, 98,238, 99,  1,226,235,
+    232,225,243,233,225,238,227,249,242,233,236,236,233, 99,128,  4,
+    169,236,244,239,238,229,225,242,225,226,233, 99,128,  6,193,226,
+    229,238,231,225,236,105,128,  9,185,228,101,  2, 99, 32, 99, 50,
+    243,227,229,238,228,229,242,227,249,242,233,236,236,233, 99,128,
+      4,179,246, 97,128,  9, 57,231,117,  2, 99, 62, 99, 71,234,225,
+    242,225,244,105,128, 10,185,242,237,245,235,232,105,128, 10, 57,
+    104,  4, 99, 90, 99, 99, 99,113, 99,143,225,242,225,226,233, 99,
+    128,  6, 45,230,233,238,225,236,225,242,225,226,233, 99,128,254,
+    162,105,  2, 99,119, 99,134,238,233,244,233,225,236,225,242,225,
+    226,233, 99,128,254,163,242,225,231,225,238, 97,128, 48,111,237,
+    229,228,233,225,236,225,242,225,226,233, 99,128,254,164,233,244,
+    245,243,241,245,225,242,101,128, 51, 42,235,225,244,225,235,225,
+    238, 97,129, 48,207, 99,183,232,225,236,230,247,233,228,244,104,
+    128,255,138,236,225,238,244,231,245,242,237,245,235,232,105,128,
+     10, 77,237,250, 97,  2, 99,218, 99,227,225,242,225,226,233, 99,
+    128,  6, 33,236,239,247,225,242,225,226,233, 99,128,  6, 33,238,
+    231,245,236,230,233,236,236,229,114,128, 49,100,114,  2,100,  2,
+    100, 18,228,243,233,231,238,227,249,242,233,236,236,233, 99,128,
+      4, 74,240,239,239,110,  2,100, 27,100, 40,236,229,230,244,226,
+    225,242,226,245,112,128, 33,188,242,233,231,232,244,226,225,242,
+    226,245,112,128, 33,192,243,241,245,225,242,101,128, 51,202,244,
+    225,102,  3,100, 73,100,165,101,  0,240,225,244,225,104,134,  5,
+    178,100, 93,100, 98,100,112,100,121,100,136,100,152,177, 54,128,
+      5,178, 50,  2,100,104,100,108, 51,128,  5,178,102,128,  5,178,
+    232,229,226,242,229,119,128,  5,178,238,225,242,242,239,247,232,
+    229,226,242,229,119,128,  5,178,241,245,225,242,244,229,242,232,
+    229,226,242,229,119,128,  5,178,247,233,228,229,232,229,226,242,
+    229,119,128,  5,178,241,225,237,225,244,115,135,  5,179,100,188,
+    100,193,100,198,100,203,100,212,100,227,100,243,177, 98,128,  5,
+    179,178, 56,128,  5,179,179, 52,128,  5,179,232,229,226,242,229,
+    119,128,  5,179,238,225,242,242,239,247,232,229,226,242,229,119,
+    128,  5,179,241,245,225,242,244,229,242,232,229,226,242,229,119,
+    128,  5,179,247,233,228,229,232,229,226,242,229,119,128,  5,179,
+    243,229,231,239,108,135,  5,177,101, 22,101, 27,101, 32,101, 37,
+    101, 46,101, 61,101, 77,177, 55,128,  5,177,178, 52,128,  5,177,
+    179, 48,128,  5,177,232,229,226,242,229,119,128,  5,177,238,225,
+    242,242,239,247,232,229,226,242,229,119,128,  5,177,241,245,225,
+    242,244,229,242,232,229,226,242,229,119,128,  5,177,247,233,228,
+    229,232,229,226,242,229,119,128,  5,177, 98,  3,101, 98,101,103,
+    101,113,225,114,128,  1, 39,239,240,239,237,239,230,111,128, 49,
+     15,242,229,246,229,226,229,236,239,119,128, 30, 43, 99,  2,101,
+    131,101,140,229,228,233,236,236, 97,128, 30, 41,233,242, 99,  2,
+    101,148,101,153,236,101,128, 36,215,245,237,230,236,229,120,128,
+      1, 37,100,  2,101,168,101,178,233,229,242,229,243,233,115,128,
+     30, 39,239,116,  2,101,185,101,194,225,227,227,229,238,116,128,
+     30, 35,226,229,236,239,119,128, 30, 37,101,136,  5,212,101,222,
+    101,255,102, 19,102,248,103,  8,103, 53,103, 62,103, 75,225,242,
+    116,129, 38,101,101,230,243,245,233,116,  2,101,239,101,247,226,
+    236,225,227,107,128, 38,101,247,232,233,244,101,128, 38, 97,228,
+    225,231,229,243,104,129,251, 52,102, 10,232,229,226,242,229,119,
+    128,251, 52,104,  6,102, 33,102, 61,102, 69,102,119,102,165,102,
+    214, 97,  2,102, 39,102, 53,236,244,239,238,229,225,242,225,226,
+    233, 99,128,  6,193,242,225,226,233, 99,128,  6, 71,229,226,242,
+    229,119,128,  5,212,230,233,238,225,236, 97,  2,102, 80,102,111,
+    236,116,  2,102, 87,102, 99,239,238,229,225,242,225,226,233, 99,
+    128,251,167,244,247,239,225,242,225,226,233, 99,128,254,234,242,
+    225,226,233, 99,128,254,234,232,225,237,250,225,225,226,239,246,
+    101,  2,102,134,102,148,230,233,238,225,236,225,242,225,226,233,
+     99,128,251,165,233,243,239,236,225,244,229,228,225,242,225,226,
+    233, 99,128,251,164,105,  2,102,171,102,205,238,233,244,233,225,
+    236, 97,  2,102,183,102,197,236,244,239,238,229,225,242,225,226,
+    233, 99,128,251,168,242,225,226,233, 99,128,254,235,242,225,231,
+    225,238, 97,128, 48,120,237,229,228,233,225,236, 97,  2,102,226,
+    102,240,236,244,239,238,229,225,242,225,226,233, 99,128,251,169,
+    242,225,226,233, 99,128,254,236,233,243,229,233,229,242,225,243,
+    241,245,225,242,101,128, 51,123,107,  2,103, 14,103, 38,225,244,
+    225,235,225,238, 97,129, 48,216,103, 26,232,225,236,230,247,233,
+    228,244,104,128,255,141,245,244,225,225,242,245,243,241,245,225,
+    242,101,128, 51, 54,238,231,232,239,239,107,128,  2,103,242,245,
+    244,245,243,241,245,225,242,101,128, 51, 57,116,129,  5,215,103,
+     81,232,229,226,242,229,119,128,  5,215,232,239,239,107,129,  2,
+    102,103, 99,243,245,240,229,242,233,239,114,128,  2,177,105,  4,
+    103,120,103,205,103,216,103,241,229,245,104,  4,103,132,103,167,
+    103,182,103,191, 97,  2,103,138,103,153,227,233,242,227,236,229,
+    235,239,242,229,225,110,128, 50,123,240,225,242,229,238,235,239,
+    242,229,225,110,128, 50, 27,227,233,242,227,236,229,235,239,242,
+    229,225,110,128, 50,109,235,239,242,229,225,110,128, 49, 78,240,
+    225,242,229,238,235,239,242,229,225,110,128, 50, 13,232,233,242,
+    225,231,225,238, 97,128, 48,114,235,225,244,225,235,225,238, 97,
+    129, 48,210,103,229,232,225,236,230,247,233,228,244,104,128,255,
+    139,242,233,113,134,  5,180,104,  3,104,  8,104, 22,104, 31,104,
+     46,104, 62,177, 52,128,  5,180, 50,  2,104, 14,104, 18, 49,128,
+      5,180,100,128,  5,180,232,229,226,242,229,119,128,  5,180,238,
+    225,242,242,239,247,232,229,226,242,229,119,128,  5,180,241,245,
+    225,242,244,229,242,232,229,226,242,229,119,128,  5,180,247,233,
+    228,229,232,229,226,242,229,119,128,  5,180,236,233,238,229,226,
+    229,236,239,119,128, 30,150,237,239,238,239,243,240,225,227,101,
+    128,255, 72,111,  9,104,119,104,130,104,154,104,179,105, 11,105,
+     24,105,110,105,150,105,161,225,242,237,229,238,233,225,110,128,
+      5,112,232,105,  2,104,137,104,145,240,244,232,225,105,128, 14,
+     43,242,225,231,225,238, 97,128, 48,123,235,225,244,225,235,225,
+    238, 97,129, 48,219,104,167,232,225,236,230,247,233,228,244,104,
+    128,255,142,236,225,109,135,  5,185,104,199,104,204,104,209,104,
+    214,104,223,104,238,104,254,177, 57,128,  5,185,178, 54,128,  5,
+    185,179, 50,128,  5,185,232,229,226,242,229,119,128,  5,185,238,
+    225,242,242,239,247,232,229,226,242,229,119,128,  5,185,241,245,
+    225,242,244,229,242,232,229,226,242,229,119,128,  5,185,247,233,
+    228,229,232,229,226,242,229,119,128,  5,185,238,239,235,232,245,
+    235,244,232,225,105,128, 14, 46,111,  2,105, 30,105,100,107,  4,
+    105, 40,105, 52,105, 58,105, 80,225,226,239,246,229,227,239,237,
+     98,128,  3,  9,227,237, 98,128,  3,  9,240,225,236,225,244,225,
+    236,233,250,229,228,226,229,236,239,247,227,237, 98,128,  3, 33,
+    242,229,244,242,239,230,236,229,248,226,229,236,239,247,227,237,
+     98,128,  3, 34,238,243,241,245,225,242,101,128, 51, 66,114,  2,
+    105,116,105,143,105,  2,105,122,105,131,227,239,240,244,233, 99,
+    128,  3,233,250,239,238,244,225,236,226,225,114,128, 32, 21,238,
+    227,237, 98,128,  3, 27,244,243,240,242,233,238,231,115,128, 38,
+    104,245,243,101,128, 35,  2,240,225,242,229,110,128, 36,163,243,
+    245,240,229,242,233,239,114,128,  2,176,244,245,242,238,229,100,
+    128,  2,101,117,  4,105,205,105,216,105,229,105,254,232,233,242,
+    225,231,225,238, 97,128, 48,117,233,233,244,239,243,241,245,225,
+    242,101,128, 51, 51,235,225,244,225,235,225,238, 97,129, 48,213,
+    105,242,232,225,236,230,247,233,228,244,104,128,255,140,238,231,
+    225,242,245,237,236,225,245,116,129,  2,221,106, 13,227,237, 98,
+    128,  3, 11,118,128,  1,149,249,240,232,229,110,132,  0, 45,106,
+     39,106, 50,106, 62,106, 85,233,238,230,229,242,233,239,114,128,
+    246,229,237,239,238,239,243,240,225,227,101,128,255, 13,115,  2,
+    106, 68,106, 75,237,225,236,108,128,254, 99,245,240,229,242,233,
+    239,114,128,246,230,244,247,111,128, 32, 16,105,149,  0,105,106,
+    137,106,160,106,194,106,241,110,123,110,243,111, 24,111, 51,111,
+    213,111,217,111,255,112, 21,112,105,113, 14,113, 89,113, 97,113,
+    110,113,197,113,254,114, 26,114, 70,225, 99,  2,106,144,106,150,
+    245,244,101,128,  0,237,249,242,233,236,236,233, 99,128,  4, 79,
+     98,  3,106,168,106,177,106,187,229,238,231,225,236,105,128,  9,
+    135,239,240,239,237,239,230,111,128, 49, 39,242,229,246,101,128,
+      1, 45, 99,  3,106,202,106,209,106,231,225,242,239,110,128,  1,
+    208,233,242, 99,  2,106,217,106,222,236,101,128, 36,216,245,237,
+    230,236,229,120,128,  0,238,249,242,233,236,236,233, 99,128,  4,
+     86,100,  4,106,251,107,  5,110, 80,110,113,226,236,231,242,225,
+    246,101,128,  2,  9,101,  2,107, 11,110, 75,239,231,242,225,240,
+    104,  7,107, 32,107, 46,107, 59,109,244,110, 19,110, 32,110, 44,
+    229,225,242,244,232,227,233,242,227,236,101,128, 50,143,230,233,
+    242,229,227,233,242,227,236,101,128, 50,139,233, 99, 14,107, 90,
+    107,106,107,205,108,  3,108, 69,108, 98,108,114,108,171,108,220,
+    108,232,109,  3,109, 70,109,208,109,237,225,236,236,233,225,238,
+    227,229,240,225,242,229,110,128, 50, 63, 99,  4,107,116,107,127,
+    107,141,107,148,225,236,236,240,225,242,229,110,128, 50, 58,229,
+    238,244,242,229,227,233,242,227,236,101,128, 50,165,236,239,243,
+    101,128, 48,  6,111,  3,107,156,107,171,107,191,237,237, 97,129,
+     48,  1,107,164,236,229,230,116,128,255,100,238,231,242,225,244,
+    245,236,225,244,233,239,238,240,225,242,229,110,128, 50, 55,242,
+    242,229,227,244,227,233,242,227,236,101,128, 50,163,101,  3,107,
+    213,107,225,107,242,225,242,244,232,240,225,242,229,110,128, 50,
+     47,238,244,229,242,240,242,233,243,229,240,225,242,229,110,128,
+     50, 61,248,227,229,236,236,229,238,244,227,233,242,227,236,101,
+    128, 50,157,102,  2,108,  9,108, 24,229,243,244,233,246,225,236,
+    240,225,242,229,110,128, 50, 64,105,  2,108, 30,108, 59,238,225,
+    238,227,233,225,108,  2,108, 42,108, 51,227,233,242,227,236,101,
+    128, 50,150,240,225,242,229,110,128, 50, 54,242,229,240,225,242,
+    229,110,128, 50, 43,104,  2,108, 75,108, 86,225,246,229,240,225,
+    242,229,110,128, 50, 50,233,231,232,227,233,242,227,236,101,128,
+     50,164,233,244,229,242,225,244,233,239,238,237,225,242,107,128,
+     48,  5,108,  3,108,122,108,148,108,160,225,226,239,114,  2,108,
+    131,108,140,227,233,242,227,236,101,128, 50,152,240,225,242,229,
+    110,128, 50, 56,229,230,244,227,233,242,227,236,101,128, 50,167,
+    239,247,227,233,242,227,236,101,128, 50,166,109,  2,108,177,108,
+    209,101,  2,108,183,108,198,228,233,227,233,238,229,227,233,242,
+    227,236,101,128, 50,169,244,225,236,240,225,242,229,110,128, 50,
+     46,239,239,238,240,225,242,229,110,128, 50, 42,238,225,237,229,
+    240,225,242,229,110,128, 50, 52,112,  2,108,238,108,246,229,242,
+    233,239,100,128, 48,  2,242,233,238,244,227,233,242,227,236,101,
+    128, 50,158,114,  2,109,  9,109, 57,101,  3,109, 17,109, 28,109,
+     43,225,227,232,240,225,242,229,110,128, 50, 67,240,242,229,243,
+    229,238,244,240,225,242,229,110,128, 50, 57,243,239,245,242,227,
+    229,240,225,242,229,110,128, 50, 62,233,231,232,244,227,233,242,
+    227,236,101,128, 50,168,115,  5,109, 82,109,111,109,125,109,150,
+    109,178,101,  2,109, 88,109,101,227,242,229,244,227,233,242,227,
+    236,101,128, 50,153,236,230,240,225,242,229,110,128, 50, 66,239,
+    227,233,229,244,249,240,225,242,229,110,128, 50, 51,112,  2,109,
+    131,109,137,225,227,101,128, 48,  0,229,227,233,225,236,240,225,
+    242,229,110,128, 50, 53,116,  2,109,156,109,167,239,227,235,240,
+    225,242,229,110,128, 50, 49,245,228,249,240,225,242,229,110,128,
+     50, 59,117,  2,109,184,109,193,238,240,225,242,229,110,128, 50,
+     48,240,229,242,246,233,243,229,240,225,242,229,110,128, 50, 60,
+    119,  2,109,214,109,226,225,244,229,242,240,225,242,229,110,128,
+     50, 44,239,239,228,240,225,242,229,110,128, 50, 45,250,229,242,
+    111,128, 48,  7,109,  2,109,250,110,  7,229,244,225,236,227,233,
+    242,227,236,101,128, 50,142,239,239,238,227,233,242,227,236,101,
+    128, 50,138,238,225,237,229,227,233,242,227,236,101,128, 50,148,
+    243,245,238,227,233,242,227,236,101,128, 50,144,119,  2,110, 50,
+    110, 63,225,244,229,242,227,233,242,227,236,101,128, 50,140,239,
+    239,228,227,233,242,227,236,101,128, 50,141,246, 97,128,  9,  7,
+    233,229,242,229,243,233,115,130,  0,239,110, 94,110,102,225,227,
+    245,244,101,128, 30, 47,227,249,242,233,236,236,233, 99,128,  4,
+    229,239,244,226,229,236,239,119,128, 30,203,101,  3,110,131,110,
+    147,110,158,226,242,229,246,229,227,249,242,233,236,236,233, 99,
+    128,  4,215,227,249,242,233,236,236,233, 99,128,  4, 53,245,238,
+    103,  4,110,170,110,205,110,220,110,229, 97,  2,110,176,110,191,
+    227,233,242,227,236,229,235,239,242,229,225,110,128, 50,117,240,
+    225,242,229,238,235,239,242,229,225,110,128, 50, 21,227,233,242,
+    227,236,229,235,239,242,229,225,110,128, 50,103,235,239,242,229,
+    225,110,128, 49, 71,240,225,242,229,238,235,239,242,229,225,110,
+    128, 50,  7,103,  2,110,249,111,  0,242,225,246,101,128,  0,236,
+    117,  2,111,  6,111, 15,234,225,242,225,244,105,128, 10,135,242,
+    237,245,235,232,105,128, 10,  7,104,  2,111, 30,111, 40,233,242,
+    225,231,225,238, 97,128, 48, 68,239,239,235,225,226,239,246,101,
+    128, 30,201,105,  8,111, 69,111, 79,111, 90,111, 97,111,122,111,
+    138,111,153,111,169,226,229,238,231,225,236,105,128,  9,136,227,
+    249,242,233,236,236,233, 99,128,  4, 56,228,229,246, 97,128,  9,
+      8,231,117,  2,111,104,111,113,234,225,242,225,244,105,128, 10,
+    136,242,237,245,235,232,105,128, 10,  8,237,225,244,242,225,231,
+    245,242,237,245,235,232,105,128, 10, 64,238,246,229,242,244,229,
+    228,226,242,229,246,101,128,  2, 11,243,232,239,242,244,227,249,
+    242,233,236,236,233, 99,128,  4, 57,246,239,247,229,236,243,233,
+    231,110,  3,111,185,111,195,111,202,226,229,238,231,225,236,105,
+    128,  9,192,228,229,246, 97,128,  9, 64,231,245,234,225,242,225,
+    244,105,128, 10,192,106,128,  1, 51,107,  2,111,223,111,247,225,
+    244,225,235,225,238, 97,129, 48,164,111,235,232,225,236,230,247,
+    233,228,244,104,128,255,114,239,242,229,225,110,128, 49, 99,108,
+      2,112,  5,112, 10,228,101,128,  2,220,245,249,232,229,226,242,
+    229,119,128,  5,172,109,  2,112, 27,112, 94, 97,  3,112, 35,112,
+     55,112, 80,227,242,239,110,129,  1, 43,112, 44,227,249,242,233,
+    236,236,233, 99,128,  4,227,231,229,239,242,225,240,240,242,239,
+    248,233,237,225,244,229,236,249,229,241,245,225,108,128, 34, 83,
+    244,242,225,231,245,242,237,245,235,232,105,128, 10, 63,239,238,
+    239,243,240,225,227,101,128,255, 73,110,  5,112,117,112,127,112,
+    136,112,148,112,232,227,242,229,237,229,238,116,128, 34,  6,230,
+    233,238,233,244,121,128, 34, 30,233,225,242,237,229,238,233,225,
+    110,128,  5,107,116,  2,112,154,112,222,101,  2,112,160,112,211,
+    231,242,225,108,131, 34, 43,112,173,112,191,112,196, 98,  2,112,
+    179,112,187,239,244,244,239,109,128, 35, 33,116,128, 35, 33,229,
+    120,128,248,245,116,  2,112,202,112,207,239,112,128, 35, 32,112,
+    128, 35, 32,242,243,229,227,244,233,239,110,128, 34, 41,233,243,
+    241,245,225,242,101,128, 51,  5,118,  3,112,240,112,249,113,  2,
+    226,245,236,236,229,116,128, 37,216,227,233,242,227,236,101,128,
+     37,217,243,237,233,236,229,230,225,227,101,128, 38, 59,111,  3,
+    113, 22,113, 33,113, 41,227,249,242,233,236,236,233, 99,128,  4,
+     81,231,239,238,229,107,128,  1, 47,244, 97,131,  3,185,113, 52,
+    113, 73,113, 81,228,233,229,242,229,243,233,115,129,  3,202,113,
+     65,244,239,238,239,115,128,  3,144,236,225,244,233,110,128,  2,
+    105,244,239,238,239,115,128,  3,175,240,225,242,229,110,128, 36,
+    164,242,233,231,245,242,237,245,235,232,105,128, 10,114,115,  4,
+    113,120,113,165,113,179,113,187,237,225,236,108,  2,113,129,113,
+    140,232,233,242,225,231,225,238, 97,128, 48, 67,235,225,244,225,
+    235,225,238, 97,129, 48,163,113,153,232,225,236,230,247,233,228,
+    244,104,128,255,104,243,232,225,242,226,229,238,231,225,236,105,
+    128,  9,250,244,242,239,235,101,128,  2,104,245,240,229,242,233,
+    239,114,128,246,237,116,  2,113,203,113,237,229,242,225,244,233,
+    239,110,  2,113,215,113,226,232,233,242,225,231,225,238, 97,128,
+     48,157,235,225,244,225,235,225,238, 97,128, 48,253,233,236,228,
+    101,129,  1, 41,113,246,226,229,236,239,119,128, 30, 45,117,  2,
+    114,  4,114, 15,226,239,240,239,237,239,230,111,128, 49, 41,227,
+    249,242,233,236,236,233, 99,128,  4, 78,246,239,247,229,236,243,
+    233,231,110,  3,114, 42,114, 52,114, 59,226,229,238,231,225,236,
+    105,128,  9,191,228,229,246, 97,128,  9, 63,231,245,234,225,242,
+    225,244,105,128, 10,191,250,232,233,244,243, 97,  2,114, 81,114,
+     92,227,249,242,233,236,236,233, 99,128,  4,117,228,226,236,231,
+    242,225,246,229,227,249,242,233,236,236,233, 99,128,  4,119,106,
+    138,  0,106,114,135,114,198,114,209,115,  3,115, 19,115,132,115,
+    201,115,206,115,218,115,226, 97,  4,114,145,114,156,114,166,114,
+    173,225,242,237,229,238,233,225,110,128,  5,113,226,229,238,231,
+    225,236,105,128,  9,156,228,229,246, 97,128,  9, 28,231,117,  2,
+    114,180,114,189,234,225,242,225,244,105,128, 10,156,242,237,245,
+    235,232,105,128, 10, 28,226,239,240,239,237,239,230,111,128, 49,
+     16, 99,  3,114,217,114,224,114,246,225,242,239,110,128,  1,240,
+    233,242, 99,  2,114,232,114,237,236,101,128, 36,217,245,237,230,
+    236,229,120,128,  1, 53,242,239,243,243,229,228,244,225,233,108,
+    128,  2,157,228,239,244,236,229,243,243,243,244,242,239,235,101,
+    128,  2, 95,101,  3,115, 27,115, 38,115,103,227,249,242,233,236,
+    236,233, 99,128,  4, 88,229,109,  4,115, 49,115, 58,115, 72,115,
+     88,225,242,225,226,233, 99,128,  6, 44,230,233,238,225,236,225,
+    242,225,226,233, 99,128,254,158,233,238,233,244,233,225,236,225,
+    242,225,226,233, 99,128,254,159,237,229,228,233,225,236,225,242,
+    225,226,233, 99,128,254,160,104,  2,115,109,115,118,225,242,225,
+    226,233, 99,128,  6,152,230,233,238,225,236,225,242,225,226,233,
+     99,128,251,139,104,  2,115,138,115,188, 97,  3,115,146,115,156,
+    115,163,226,229,238,231,225,236,105,128,  9,157,228,229,246, 97,
+    128,  9, 29,231,117,  2,115,170,115,179,234,225,242,225,244,105,
+    128, 10,157,242,237,245,235,232,105,128, 10, 29,229,232,225,242,
+    237,229,238,233,225,110,128,  5,123,233,115,128, 48,  4,237,239,
+    238,239,243,240,225,227,101,128,255, 74,240,225,242,229,110,128,
+     36,165,243,245,240,229,242,233,239,114,128,  2,178,107,146,  0,
+    107,116, 21,118,110,118,121,118,183,118,194,119, 28,119, 42,120,
+    150,121, 90,121,103,121,129,121,178,122, 60,122, 82,122, 95,122,
+    118,122,160,122,170, 97, 12,116, 47,116, 79,116,101,116,131,116,
+    245,117, 14,117, 44,117, 69,117,175,117,189,118, 56,118, 85, 98,
+      2,116, 53,116, 70,225,243,232,235,233,242,227,249,242,233,236,
+    236,233, 99,128,  4,161,229,238,231,225,236,105,128,  9,149, 99,
+      2,116, 85,116, 91,245,244,101,128, 30, 49,249,242,233,236,236,
+    233, 99,128,  4, 58,228,101,  2,116,108,116,126,243,227,229,238,
+    228,229,242,227,249,242,233,236,236,233, 99,128,  4,155,246, 97,
+    128,  9, 21,102,135,  5,219,116,149,116,158,116,178,116,192,116,
+    201,116,217,116,232,225,242,225,226,233, 99,128,  6, 67,228,225,
+    231,229,243,104,129,251, 59,116,169,232,229,226,242,229,119,128,
+    251, 59,230,233,238,225,236,225,242,225,226,233, 99,128,254,218,
+    232,229,226,242,229,119,128,  5,219,233,238,233,244,233,225,236,
+    225,242,225,226,233, 99,128,254,219,237,229,228,233,225,236,225,
+    242,225,226,233, 99,128,254,220,242,225,230,229,232,229,226,242,
+    229,119,128,251, 77,231,117,  2,116,252,117,  5,234,225,242,225,
+    244,105,128, 10,149,242,237,245,235,232,105,128, 10, 21,104,  2,
+    117, 20,117, 30,233,242,225,231,225,238, 97,128, 48, 75,239,239,
+    235,227,249,242,233,236,236,233, 99,128,  4,196,235,225,244,225,
+    235,225,238, 97,129, 48,171,117, 57,232,225,236,230,247,233,228,
+    244,104,128,255,118,112,  2,117, 75,117, 96,240, 97,129,  3,186,
+    117, 82,243,249,237,226,239,236,231,242,229,229,107,128,  3,240,
+    249,229,239,245,110,  3,117,108,117,122,117,156,237,233,229,245,
+    237,235,239,242,229,225,110,128, 49,113,112,  2,117,128,117,143,
+    232,233,229,245,240,232,235,239,242,229,225,110,128, 49,132,233,
+    229,245,240,235,239,242,229,225,110,128, 49,120,243,243,225,238,
+    231,240,233,229,245,240,235,239,242,229,225,110,128, 49,121,242,
+    239,242,233,233,243,241,245,225,242,101,128, 51, 13,115,  5,117,
+    201,117,245,118,  4,118, 12,118, 40,232,233,228,225,225,245,244,
+    111,  2,117,214,117,223,225,242,225,226,233, 99,128,  6, 64,238,
+    239,243,233,228,229,226,229,225,242,233,238,231,225,242,225,226,
+    233, 99,128,  6, 64,237,225,236,236,235,225,244,225,235,225,238,
+     97,128, 48,245,241,245,225,242,101,128, 51,132,242, 97,  2,118,
+     19,118, 28,225,242,225,226,233, 99,128,  6, 80,244,225,238,225,
+    242,225,226,233, 99,128,  6, 77,244,242,239,235,229,227,249,242,
+    233,236,236,233, 99,128,  4,159,244,225,232,233,242,225,240,242,
+    239,236,239,238,231,237,225,242,235,232,225,236,230,247,233,228,
+    244,104,128,255,112,246,229,242,244,233,227,225,236,243,244,242,
+    239,235,229,227,249,242,233,236,236,233, 99,128,  4,157,226,239,
+    240,239,237,239,230,111,128, 49, 14, 99,  4,118,131,118,153,118,
+    162,118,170, 97,  2,118,137,118,147,236,243,241,245,225,242,101,
+    128, 51,137,242,239,110,128,  1,233,229,228,233,236,236, 97,128,
+      1, 55,233,242,227,236,101,128, 36,218,239,237,237,225,225,227,
+    227,229,238,116,128,  1, 55,228,239,244,226,229,236,239,119,128,
+     30, 51,101,  4,118,204,118,231,119,  0,119, 12,104,  2,118,210,
+    118,221,225,242,237,229,238,233,225,110,128,  5,132,233,242,225,
+    231,225,238, 97,128, 48, 81,235,225,244,225,235,225,238, 97,129,
+     48,177,118,244,232,225,236,230,247,233,228,244,104,128,255,121,
+    238,225,242,237,229,238,233,225,110,128,  5,111,243,237,225,236,
+    236,235,225,244,225,235,225,238, 97,128, 48,246,231,242,229,229,
+    238,236,225,238,228,233, 99,128,  1, 56,104,  6,119, 56,119,185,
+    119,196,119,221,120, 52,120,140, 97,  5,119, 68,119, 78,119, 89,
+    119, 96,119,121,226,229,238,231,225,236,105,128,  9,150,227,249,
+    242,233,236,236,233, 99,128,  4, 69,228,229,246, 97,128,  9, 22,
+    231,117,  2,119,103,119,112,234,225,242,225,244,105,128, 10,150,
+    242,237,245,235,232,105,128, 10, 22,104,  4,119,131,119,140,119,
+    154,119,170,225,242,225,226,233, 99,128,  6, 46,230,233,238,225,
+    236,225,242,225,226,233, 99,128,254,166,233,238,233,244,233,225,
+    236,225,242,225,226,233, 99,128,254,167,237,229,228,233,225,236,
+    225,242,225,226,233, 99,128,254,168,229,233,227,239,240,244,233,
+     99,128,  3,231,232, 97,  2,119,203,119,210,228,229,246, 97,128,
+      9, 89,231,245,242,237,245,235,232,105,128, 10, 89,233,229,245,
+    235,104,  4,119,235,120, 14,120, 29,120, 38, 97,  2,119,241,120,
+      0,227,233,242,227,236,229,235,239,242,229,225,110,128, 50,120,
+    240,225,242,229,238,235,239,242,229,225,110,128, 50, 24,227,233,
+    242,227,236,229,235,239,242,229,225,110,128, 50,106,235,239,242,
+    229,225,110,128, 49, 75,240,225,242,229,238,235,239,242,229,225,
+    110,128, 50, 10,111,  4,120, 62,120,111,120,121,120,126,235,104,
+      4,120, 73,120, 82,120, 91,120,101,225,233,244,232,225,105,128,
+     14,  2,239,238,244,232,225,105,128, 14,  5,245,225,244,244,232,
+    225,105,128, 14,  3,247,225,233,244,232,225,105,128, 14,  4,237,
+    245,244,244,232,225,105,128, 14, 91,239,107,128,  1,153,242,225,
+    235,232,225,238,231,244,232,225,105,128, 14,  6,250,243,241,245,
+    225,242,101,128, 51,145,105,  4,120,160,120,171,120,196,120,245,
+    232,233,242,225,231,225,238, 97,128, 48, 77,235,225,244,225,235,
+    225,238, 97,129, 48,173,120,184,232,225,236,230,247,233,228,244,
+    104,128,255,119,242,111,  3,120,205,120,220,120,236,231,245,242,
+    225,237,245,243,241,245,225,242,101,128, 51, 21,237,229,229,244,
+    239,242,245,243,241,245,225,242,101,128, 51, 22,243,241,245,225,
+    242,101,128, 51, 20,249,229,239,107,  5,121,  4,121, 39,121, 54,
+    121, 63,121, 77, 97,  2,121, 10,121, 25,227,233,242,227,236,229,
+    235,239,242,229,225,110,128, 50,110,240,225,242,229,238,235,239,
+    242,229,225,110,128, 50, 14,227,233,242,227,236,229,235,239,242,
+    229,225,110,128, 50, 96,235,239,242,229,225,110,128, 49, 49,240,
+    225,242,229,238,235,239,242,229,225,110,128, 50,  0,243,233,239,
+    243,235,239,242,229,225,110,128, 49, 51,234,229,227,249,242,233,
+    236,236,233, 99,128,  4, 92,108,  2,121,109,121,120,233,238,229,
+    226,229,236,239,119,128, 30, 53,243,241,245,225,242,101,128, 51,
+    152,109,  3,121,137,121,151,121,162,227,245,226,229,228,243,241,
+    245,225,242,101,128, 51,166,239,238,239,243,240,225,227,101,128,
+    255, 75,243,241,245,225,242,229,228,243,241,245,225,242,101,128,
+     51,162,111,  5,121,190,121,216,121,254,122, 10,122, 24,104,  2,
+    121,196,121,206,233,242,225,231,225,238, 97,128, 48, 83,237,243,
+    241,245,225,242,101,128, 51,192,235, 97,  2,121,223,121,231,233,
+    244,232,225,105,128, 14,  1,244,225,235,225,238, 97,129, 48,179,
+    121,242,232,225,236,230,247,233,228,244,104,128,255,122,239,240,
+    239,243,241,245,225,242,101,128, 51, 30,240,240,225,227,249,242,
+    233,236,236,233, 99,128,  4,129,114,  2,122, 30,122, 50,229,225,
+    238,243,244,225,238,228,225,242,228,243,249,237,226,239,108,128,
+     50,127,239,238,233,243,227,237, 98,128,  3, 67,240, 97,  2,122,
+     67,122, 73,242,229,110,128, 36,166,243,241,245,225,242,101,128,
+     51,170,243,233,227,249,242,233,236,236,233, 99,128,  4,111,116,
+      2,122,101,122,110,243,241,245,225,242,101,128, 51,207,245,242,
+    238,229,100,128,  2,158,117,  2,122,124,122,135,232,233,242,225,
+    231,225,238, 97,128, 48, 79,235,225,244,225,235,225,238, 97,129,
+     48,175,122,148,232,225,236,230,247,233,228,244,104,128,255,120,
+    246,243,241,245,225,242,101,128, 51,184,247,243,241,245,225,242,
+    101,128, 51,190,108,146,  0,108,122,220,124,247,125, 20,125, 86,
+    125,124,126, 20,126, 29,126, 45,126, 69,126, 87,126,205,126,246,
+    127,125,127,133,127,166,127,175,127,183,127,245, 97,  7,122,236,
+    122,246,122,253,123,  4,123, 29,123, 45,124,235,226,229,238,231,
+    225,236,105,128,  9,178,227,245,244,101,128,  1, 58,228,229,246,
+     97,128,  9, 50,231,117,  2,123, 11,123, 20,234,225,242,225,244,
+    105,128, 10,178,242,237,245,235,232,105,128, 10, 50,235,235,232,
+    225,238,231,249,225,239,244,232,225,105,128, 14, 69,109, 10,123,
+     67,124,  6,124, 23,124, 61,124, 75,124, 94,124,110,124,130,124,
+    150,124,173, 97,  2,123, 73,123,254,236,229,102,  4,123, 85,123,
+     99,123,191,123,208,230,233,238,225,236,225,242,225,226,233, 99,
+    128,254,252,232,225,237,250, 97,  2,123,109,123,150,225,226,239,
+    246,101,  2,123,119,123,133,230,233,238,225,236,225,242,225,226,
+    233, 99,128,254,248,233,243,239,236,225,244,229,228,225,242,225,
+    226,233, 99,128,254,247,226,229,236,239,119,  2,123,160,123,174,
+    230,233,238,225,236,225,242,225,226,233, 99,128,254,250,233,243,
+    239,236,225,244,229,228,225,242,225,226,233, 99,128,254,249,233,
+    243,239,236,225,244,229,228,225,242,225,226,233, 99,128,254,251,
+    237,225,228,228,225,225,226,239,246,101,  2,123,223,123,237,230,
+    233,238,225,236,225,242,225,226,233, 99,128,254,246,233,243,239,
+    236,225,244,229,228,225,242,225,226,233, 99,128,254,245,242,225,
+    226,233, 99,128,  6, 68,226,228, 97,129,  3,187,124, 14,243,244,
+    242,239,235,101,128,  1,155,229,100,130,  5,220,124, 32,124, 52,
+    228,225,231,229,243,104,129,251, 60,124, 43,232,229,226,242,229,
+    119,128,251, 60,232,229,226,242,229,119,128,  5,220,230,233,238,
+    225,236,225,242,225,226,233, 99,128,254,222,232,225,232,233,238,
+    233,244,233,225,236,225,242,225,226,233, 99,128,252,202,233,238,
+    233,244,233,225,236,225,242,225,226,233, 99,128,254,223,234,229,
+    229,237,233,238,233,244,233,225,236,225,242,225,226,233, 99,128,
+    252,201,235,232,225,232,233,238,233,244,233,225,236,225,242,225,
+    226,233, 99,128,252,203,236,225,237,232,229,232,233,243,239,236,
+    225,244,229,228,225,242,225,226,233, 99,128,253,242,237,101,  2,
+    124,180,124,193,228,233,225,236,225,242,225,226,233, 99,128,254,
+    224,229,109,  2,124,200,124,219,232,225,232,233,238,233,244,233,
+    225,236,225,242,225,226,233, 99,128,253,136,233,238,233,244,233,
+    225,236,225,242,225,226,233, 99,128,252,204,242,231,229,227,233,
+    242,227,236,101,128, 37,239, 98,  3,124,255,125,  4,125, 10,225,
+    114,128,  1,154,229,236,116,128,  2,108,239,240,239,237,239,230,
+    111,128, 49, 12, 99,  4,125, 30,125, 37,125, 46,125, 73,225,242,
+    239,110,128,  1, 62,229,228,233,236,236, 97,128,  1, 60,233,242,
+     99,  2,125, 54,125, 59,236,101,128, 36,219,245,237,230,236,229,
+    248,226,229,236,239,119,128, 30, 61,239,237,237,225,225,227,227,
+    229,238,116,128,  1, 60,228,239,116,130,  1, 64,125, 96,125,105,
+    225,227,227,229,238,116,128,  1, 64,226,229,236,239,119,129, 30,
+     55,125,115,237,225,227,242,239,110,128, 30, 57,101,  3,125,132,
+    125,170,126, 15,230,116,  2,125,139,125,155,225,238,231,236,229,
+    225,226,239,246,229,227,237, 98,128,  3, 26,244,225,227,235,226,
+    229,236,239,247,227,237, 98,128,  3, 24,243,115,132,  0, 60,125,
+    183,125,205,125,217,126,  7,229,241,245,225,108,129, 34,100,125,
+    193,239,242,231,242,229,225,244,229,114,128, 34,218,237,239,238,
+    239,243,240,225,227,101,128,255, 28,111,  2,125,223,125,252,114,
+      2,125,229,125,242,229,241,245,233,246,225,236,229,238,116,128,
+     34,114,231,242,229,225,244,229,114,128, 34,118,246,229,242,229,
+    241,245,225,108,128, 34,102,243,237,225,236,108,128,254,100,250,
+    104,128,  2,110,230,226,236,239,227,107,128, 37,140,232,239,239,
+    235,242,229,244,242,239,230,236,229,120,128,  2,109,105,  2,126,
+     51,126, 56,242, 97,128, 32,164,247,238,225,242,237,229,238,233,
+    225,110,128,  5,108,106,129,  1,201,126, 75,229,227,249,242,233,
+    236,236,233, 99,128,  4, 89,108,132,246,192,126, 99,126,123,126,
+    134,126,143, 97,  2,126,105,126,112,228,229,246, 97,128,  9, 51,
+    231,245,234,225,242,225,244,105,128, 10,179,233,238,229,226,229,
+    236,239,119,128, 30, 59,236,225,228,229,246, 97,128,  9, 52,246,
+    239,227,225,236,233, 99,  3,126,157,126,167,126,174,226,229,238,
+    231,225,236,105,128,  9,225,228,229,246, 97,128,  9, 97,246,239,
+    247,229,236,243,233,231,110,  2,126,188,126,198,226,229,238,231,
+    225,236,105,128,  9,227,228,229,246, 97,128,  9, 99,109,  3,126,
+    213,126,226,126,237,233,228,228,236,229,244,233,236,228,101,128,
+      2,107,239,238,239,243,240,225,227,101,128,255, 76,243,241,245,
+    225,242,101,128, 51,208,111,  6,127,  4,127, 16,127, 58,127, 69,
+    127, 75,127,117,227,232,245,236,225,244,232,225,105,128, 14, 44,
+    231,233,227,225,108,  3,127, 28,127, 34,127, 53,225,238,100,128,
+     34, 39,238,239,116,129,  0,172,127, 42,242,229,246,229,242,243,
+    229,100,128, 35, 16,239,114,128, 34, 40,236,233,238,231,244,232,
+    225,105,128, 14, 37,238,231,115,128,  1,127,247,236,233,238,101,
+      2,127, 85,127,108, 99,  2,127, 91,127,103,229,238,244,229,242,
+    236,233,238,101,128,254, 78,237, 98,128,  3, 50,228,225,243,232,
+    229,100,128,254, 77,250,229,238,231,101,128, 37,202,240,225,242,
+    229,110,128, 36,167,115,  3,127,141,127,148,127,156,236,225,243,
+    104,128,  1, 66,241,245,225,242,101,128, 33, 19,245,240,229,242,
+    233,239,114,128,246,238,244,243,232,225,228,101,128, 37,145,245,
+    244,232,225,105,128, 14, 38,246,239,227,225,236,233, 99,  3,127,
+    197,127,207,127,214,226,229,238,231,225,236,105,128,  9,140,228,
+    229,246, 97,128,  9, 12,246,239,247,229,236,243,233,231,110,  2,
+    127,228,127,238,226,229,238,231,225,236,105,128,  9,226,228,229,
+    246, 97,128,  9, 98,248,243,241,245,225,242,101,128, 51,211,109,
+    144,  0,109,128, 35,130,144,130,169,130,196,130,221,132, 18,132,
+     40,133, 95,133,125,133,174,134, 25,134, 47,134, 72,134, 81,135,
+    108,135,136, 97, 12,128, 61,128, 71,128,135,128,142,128,167,128,
+    215,130, 51,130, 76,130, 81,130, 95,130,107,130,112,226,229,238,
+    231,225,236,105,128,  9,174, 99,  2,128, 77,128,129,242,239,110,
+    132,  0,175,128, 91,128,102,128,108,128,117,226,229,236,239,247,
+    227,237, 98,128,  3, 49,227,237, 98,128,  3,  4,236,239,247,237,
+    239,100,128,  2,205,237,239,238,239,243,240,225,227,101,128,255,
+    227,245,244,101,128, 30, 63,228,229,246, 97,128,  9, 46,231,117,
+      2,128,149,128,158,234,225,242,225,244,105,128, 10,174,242,237,
+    245,235,232,105,128, 10, 46,104,  2,128,173,128,205,225,240,225,
+    235,104,  2,128,183,128,192,232,229,226,242,229,119,128,  5,164,
+    236,229,230,244,232,229,226,242,229,119,128,  5,164,233,242,225,
+    231,225,238, 97,128, 48,126,105,  5,128,227,129, 40,129,103,129,
+    133,130, 39,227,232,225,244,244,225,247, 97,  3,128,242,129, 17,
+    129, 24,236,239,119,  2,128,250,129,  5,236,229,230,244,244,232,
+    225,105,128,248,149,242,233,231,232,244,244,232,225,105,128,248,
+    148,244,232,225,105,128, 14, 75,245,240,240,229,242,236,229,230,
+    244,244,232,225,105,128,248,147,229,107,  3,129, 49,129, 80,129,
+     87,236,239,119,  2,129, 57,129, 68,236,229,230,244,244,232,225,
+    105,128,248,140,242,233,231,232,244,244,232,225,105,128,248,139,
+    244,232,225,105,128, 14, 72,245,240,240,229,242,236,229,230,244,
+    244,232,225,105,128,248,138,232,225,238,225,235,225,116,  2,129,
+    115,129,126,236,229,230,244,244,232,225,105,128,248,132,244,232,
+    225,105,128, 14, 49,116,  3,129,141,129,169,129,232,225,233,235,
+    232,117,  2,129,151,129,162,236,229,230,244,244,232,225,105,128,
+    248,137,244,232,225,105,128, 14, 71,232,111,  3,129,178,129,209,
+    129,216,236,239,119,  2,129,186,129,197,236,229,230,244,244,232,
+    225,105,128,248,143,242,233,231,232,244,244,232,225,105,128,248,
+    142,244,232,225,105,128, 14, 73,245,240,240,229,242,236,229,230,
+    244,244,232,225,105,128,248,141,242,105,  3,129,241,130, 16,130,
+     23,236,239,119,  2,129,249,130,  4,236,229,230,244,244,232,225,
+    105,128,248,146,242,233,231,232,244,244,232,225,105,128,248,145,
+    244,232,225,105,128, 14, 74,245,240,240,229,242,236,229,230,244,
+    244,232,225,105,128,248,144,249,225,237,239,235,244,232,225,105,
+    128, 14, 70,235,225,244,225,235,225,238, 97,129, 48,222,130, 64,
+    232,225,236,230,247,233,228,244,104,128,255,143,236,101,128, 38,
+     66,238,243,249,239,238,243,241,245,225,242,101,128, 51, 71,241,
+    225,230,232,229,226,242,229,119,128,  5,190,242,115,128, 38, 66,
+    115,  2,130,118,130,136,239,242,225,227,233,242,227,236,229,232,
+    229,226,242,229,119,128,  5,175,241,245,225,242,101,128, 51,131,
+     98,  2,130,150,130,160,239,240,239,237,239,230,111,128, 49,  7,
+    243,241,245,225,242,101,128, 51,212, 99,  2,130,175,130,183,233,
+    242,227,236,101,128, 36,220,245,226,229,228,243,241,245,225,242,
+    101,128, 51,165,228,239,116,  2,130,204,130,213,225,227,227,229,
+    238,116,128, 30, 65,226,229,236,239,119,128, 30, 67,101,  7,130,
+    237,131,108,131,119,131,134,131,159,131,196,131,208,101,  2,130,
+    243,131, 95,109,  4,130,253,131,  6,131, 20,131, 36,225,242,225,
+    226,233, 99,128,  6, 69,230,233,238,225,236,225,242,225,226,233,
+     99,128,254,226,233,238,233,244,233,225,236,225,242,225,226,233,
+     99,128,254,227,237,101,  2,131, 43,131, 56,228,233,225,236,225,
+    242,225,226,233, 99,128,254,228,229,237,105,  2,131, 64,131, 79,
+    238,233,244,233,225,236,225,242,225,226,233, 99,128,252,209,243,
+    239,236,225,244,229,228,225,242,225,226,233, 99,128,252, 72,244,
+    239,242,245,243,241,245,225,242,101,128, 51, 77,232,233,242,225,
+    231,225,238, 97,128, 48,129,233,250,233,229,242,225,243,241,245,
+    225,242,101,128, 51,126,235,225,244,225,235,225,238, 97,129, 48,
+    225,131,147,232,225,236,230,247,233,228,244,104,128,255,146,109,
+    130,  5,222,131,167,131,187,228,225,231,229,243,104,129,251, 62,
+    131,178,232,229,226,242,229,119,128,251, 62,232,229,226,242,229,
+    119,128,  5,222,238,225,242,237,229,238,233,225,110,128,  5,116,
+    242,235,232, 97,  3,131,219,131,228,132,  5,232,229,226,242,229,
+    119,128,  5,165,235,229,230,245,236, 97,  2,131,239,131,248,232,
+    229,226,242,229,119,128,  5,166,236,229,230,244,232,229,226,242,
+    229,119,128,  5,166,236,229,230,244,232,229,226,242,229,119,128,
+      5,165,104,  2,132, 24,132, 30,239,239,107,128,  2,113,250,243,
+    241,245,225,242,101,128, 51,146,105,  6,132, 54,132, 91,132,228,
+    132,239,133,  8,133, 65,228,100,  2,132, 61,132, 86,236,229,228,
+    239,244,235,225,244,225,235,225,238,225,232,225,236,230,247,233,
+    228,244,104,128,255,101,239,116,128,  0,183,229,245,109,  5,132,
+    105,132,140,132,155,132,164,132,215, 97,  2,132,111,132,126,227,
+    233,242,227,236,229,235,239,242,229,225,110,128, 50,114,240,225,
+    242,229,238,235,239,242,229,225,110,128, 50, 18,227,233,242,227,
+    236,229,235,239,242,229,225,110,128, 50,100,235,239,242,229,225,
+    110,128, 49, 65,112,  2,132,170,132,202, 97,  2,132,176,132,190,
+    238,243,233,239,243,235,239,242,229,225,110,128, 49,112,242,229,
+    238,235,239,242,229,225,110,128, 50,  4,233,229,245,240,235,239,
+    242,229,225,110,128, 49,110,243,233,239,243,235,239,242,229,225,
+    110,128, 49,111,232,233,242,225,231,225,238, 97,128, 48,127,235,
+    225,244,225,235,225,238, 97,129, 48,223,132,252,232,225,236,230,
+    247,233,228,244,104,128,255,144,238,117,  2,133, 15,133, 60,115,
+    132, 34, 18,133, 27,133, 38,133, 47,133, 53,226,229,236,239,247,
+    227,237, 98,128,  3, 32,227,233,242,227,236,101,128, 34,150,237,
+    239,100,128,  2,215,240,236,245,115,128, 34, 19,244,101,128, 32,
+     50,242,105,  2,133, 72,133, 86,226,225,225,242,245,243,241,245,
+    225,242,101,128, 51, 74,243,241,245,225,242,101,128, 51, 73,108,
+      2,133,101,133,116,239,238,231,236,229,231,244,245,242,238,229,
+    100,128,  2,112,243,241,245,225,242,101,128, 51,150,109,  3,133,
+    133,133,147,133,158,227,245,226,229,228,243,241,245,225,242,101,
+    128, 51,163,239,238,239,243,240,225,227,101,128,255, 77,243,241,
+    245,225,242,229,228,243,241,245,225,242,101,128, 51,159,111,  5,
+    133,186,133,212,133,237,133,247,134,  0,104,  2,133,192,133,202,
+    233,242,225,231,225,238, 97,128, 48,130,237,243,241,245,225,242,
+    101,128, 51,193,235,225,244,225,235,225,238, 97,129, 48,226,133,
+    225,232,225,236,230,247,233,228,244,104,128,255,147,236,243,241,
+    245,225,242,101,128, 51,214,237,225,244,232,225,105,128, 14, 33,
+    246,229,242,243,243,241,245,225,242,101,129, 51,167,134, 15,228,
+    243,241,245,225,242,101,128, 51,168,240, 97,  2,134, 32,134, 38,
+    242,229,110,128, 36,168,243,241,245,225,242,101,128, 51,171,115,
+      2,134, 53,134, 62,243,241,245,225,242,101,128, 51,179,245,240,
+    229,242,233,239,114,128,246,239,244,245,242,238,229,100,128,  2,
+    111,117,141,  0,181,134,111,134,115,134,125,134,149,134,159,134,
+    181,134,192,134,217,134,240,134,250,135, 24,135, 88,135, 98, 49,
+    128,  0,181,225,243,241,245,225,242,101,128, 51,130,227,104,  2,
+    134,132,134,142,231,242,229,225,244,229,114,128, 34,107,236,229,
+    243,115,128, 34,106,230,243,241,245,225,242,101,128, 51,140,103,
+      2,134,165,134,172,242,229,229,107,128,  3,188,243,241,245,225,
+    242,101,128, 51,141,232,233,242,225,231,225,238, 97,128, 48,128,
+    235,225,244,225,235,225,238, 97,129, 48,224,134,205,232,225,236,
+    230,247,233,228,244,104,128,255,145,108,  2,134,223,134,232,243,
+    241,245,225,242,101,128, 51,149,244,233,240,236,121,128,  0,215,
+    237,243,241,245,225,242,101,128, 51,155,238,225,104,  2,135,  2,
+    135, 11,232,229,226,242,229,119,128,  5,163,236,229,230,244,232,
+    229,226,242,229,119,128,  5,163,115,  2,135, 30,135, 79,233, 99,
+      3,135, 39,135, 56,135, 67,225,236,238,239,244,101,129, 38,106,
+    135, 50,228,226,108,128, 38,107,230,236,225,244,243,233,231,110,
+    128, 38,109,243,232,225,242,240,243,233,231,110,128, 38,111,243,
+    241,245,225,242,101,128, 51,178,246,243,241,245,225,242,101,128,
+     51,182,247,243,241,245,225,242,101,128, 51,188,118,  2,135,114,
+    135,127,237,229,231,225,243,241,245,225,242,101,128, 51,185,243,
+    241,245,225,242,101,128, 51,183,119,  2,135,142,135,155,237,229,
+    231,225,243,241,245,225,242,101,128, 51,191,243,241,245,225,242,
+    101,128, 51,189,110,150,  0,110,135,212,136, 90,136,114,136,180,
+    136,205,137,  7,137, 17,137, 84,137,127,139,161,139,179,139,204,
+    139,235,140,  5,140, 70,142, 52,142, 60,142, 85,142, 93,143, 61,
+    143, 71,143, 81, 97,  8,135,230,135,250,136,  1,136,  8,136, 33,
+    136, 44,136, 69,136, 81, 98,  2,135,236,135,245,229,238,231,225,
+    236,105,128,  9,168,236, 97,128, 34,  7,227,245,244,101,128,  1,
+     68,228,229,246, 97,128,  9, 40,231,117,  2,136, 15,136, 24,234,
+    225,242,225,244,105,128, 10,168,242,237,245,235,232,105,128, 10,
+     40,232,233,242,225,231,225,238, 97,128, 48,106,235,225,244,225,
+    235,225,238, 97,129, 48,202,136, 57,232,225,236,230,247,233,228,
+    244,104,128,255,133,240,239,243,244,242,239,240,232,101,128,  1,
+     73,243,241,245,225,242,101,128, 51,129, 98,  2,136, 96,136,106,
+    239,240,239,237,239,230,111,128, 49, 11,243,240,225,227,101,128,
+      0,160, 99,  4,136,124,136,131,136,140,136,167,225,242,239,110,
+    128,  1, 72,229,228,233,236,236, 97,128,  1, 70,233,242, 99,  2,
+    136,148,136,153,236,101,128, 36,221,245,237,230,236,229,248,226,
+    229,236,239,119,128, 30, 75,239,237,237,225,225,227,227,229,238,
+    116,128,  1, 70,228,239,116,  2,136,188,136,197,225,227,227,229,
+    238,116,128, 30, 69,226,229,236,239,119,128, 30, 71,101,  3,136,
+    213,136,224,136,249,232,233,242,225,231,225,238, 97,128, 48,109,
+    235,225,244,225,235,225,238, 97,129, 48,205,136,237,232,225,236,
+    230,247,233,228,244,104,128,255,136,247,243,232,229,241,229,236,
+    243,233,231,110,128, 32,170,230,243,241,245,225,242,101,128, 51,
+    139,103,  2,137, 23,137, 73, 97,  3,137, 31,137, 41,137, 48,226,
+    229,238,231,225,236,105,128,  9,153,228,229,246, 97,128,  9, 25,
+    231,117,  2,137, 55,137, 64,234,225,242,225,244,105,128, 10,153,
+    242,237,245,235,232,105,128, 10, 25,239,238,231,245,244,232,225,
+    105,128, 14,  7,104,  2,137, 90,137,100,233,242,225,231,225,238,
+     97,128, 48,147,239,239,107,  2,137,108,137,115,236,229,230,116,
+    128,  2,114,242,229,244,242,239,230,236,229,120,128,  2,115,105,
+      4,137,137,138, 50,138, 61,138,119,229,245,110,  7,137,155,137,
+    190,137,222,137,236,137,245,138, 22,138, 35, 97,  2,137,161,137,
+    176,227,233,242,227,236,229,235,239,242,229,225,110,128, 50,111,
+    240,225,242,229,238,235,239,242,229,225,110,128, 50, 15,227,105,
+      2,137,197,137,209,229,245,227,235,239,242,229,225,110,128, 49,
+     53,242,227,236,229,235,239,242,229,225,110,128, 50, 97,232,233,
+    229,245,232,235,239,242,229,225,110,128, 49, 54,235,239,242,229,
+    225,110,128, 49, 52,240, 97,  2,137,252,138, 10,238,243,233,239,
+    243,235,239,242,229,225,110,128, 49,104,242,229,238,235,239,242,
+    229,225,110,128, 50,  1,243,233,239,243,235,239,242,229,225,110,
+    128, 49,103,244,233,235,229,245,244,235,239,242,229,225,110,128,
+     49,102,232,233,242,225,231,225,238, 97,128, 48,107,107,  2,138,
+     67,138, 91,225,244,225,235,225,238, 97,129, 48,203,138, 79,232,
+    225,236,230,247,233,228,244,104,128,255,134,232,225,232,233,116,
+      2,138,101,138,112,236,229,230,244,244,232,225,105,128,248,153,
+    244,232,225,105,128, 14, 77,238,101,141,  0, 57,138,150,138,159,
+    138,169,138,199,138,206,138,231,139,  2,139, 36,139, 48,139, 59,
+    139, 92,139,100,139,111,225,242,225,226,233, 99,128,  6,105,226,
+    229,238,231,225,236,105,128,  9,239,227,233,242,227,236,101,129,
+     36,104,138,180,233,238,246,229,242,243,229,243,225,238,243,243,
+    229,242,233,102,128, 39,146,228,229,246, 97,128,  9,111,231,117,
+      2,138,213,138,222,234,225,242,225,244,105,128, 10,239,242,237,
+    245,235,232,105,128, 10,111,232, 97,  2,138,238,138,249,227,235,
+    225,242,225,226,233, 99,128,  6,105,238,231,250,232,239,117,128,
+     48, 41,105,  2,139,  8,139, 26,228,229,239,231,242,225,240,232,
+    233,227,240,225,242,229,110,128, 50, 40,238,230,229,242,233,239,
+    114,128, 32,137,237,239,238,239,243,240,225,227,101,128,255, 25,
+    239,236,228,243,244,249,236,101,128,247, 57,112,  2,139, 65,139,
+     72,225,242,229,110,128, 36,124,229,114,  2,139, 79,139, 85,233,
+    239,100,128, 36,144,243,233,225,110,128,  6,249,242,239,237,225,
+    110,128, 33,120,243,245,240,229,242,233,239,114,128, 32,121,116,
+      2,139,117,139,155,229,229,110,  2,139,125,139,134,227,233,242,
+    227,236,101,128, 36,114,112,  2,139,140,139,147,225,242,229,110,
+    128, 36,134,229,242,233,239,100,128, 36,154,232,225,105,128, 14,
+     89,106,129,  1,204,139,167,229,227,249,242,233,236,236,233, 99,
+    128,  4, 90,235,225,244,225,235,225,238, 97,129, 48,243,139,192,
+    232,225,236,230,247,233,228,244,104,128,255,157,108,  2,139,210,
+    139,224,229,231,242,233,231,232,244,236,239,238,103,128,  1,158,
+    233,238,229,226,229,236,239,119,128, 30, 73,109,  2,139,241,139,
+    252,239,238,239,243,240,225,227,101,128,255, 78,243,241,245,225,
+    242,101,128, 51,154,110,  2,140, 11,140, 61, 97,  3,140, 19,140,
+     29,140, 36,226,229,238,231,225,236,105,128,  9,163,228,229,246,
+     97,128,  9, 35,231,117,  2,140, 43,140, 52,234,225,242,225,244,
+    105,128, 10,163,242,237,245,235,232,105,128, 10, 35,238,225,228,
+    229,246, 97,128,  9, 41,111,  6,140, 84,140, 95,140,120,140,161,
+    141,113,142, 40,232,233,242,225,231,225,238, 97,128, 48,110,235,
+    225,244,225,235,225,238, 97,129, 48,206,140,108,232,225,236,230,
+    247,233,228,244,104,128,255,137,110,  3,140,128,140,144,140,153,
+    226,242,229,225,235,233,238,231,243,240,225,227,101,128,  0,160,
+    229,238,244,232,225,105,128, 14, 19,245,244,232,225,105,128, 14,
+     25,239,110,  7,140,178,140,187,140,201,140,235,140,251,141, 36,
+    141, 95,225,242,225,226,233, 99,128,  6, 70,230,233,238,225,236,
+    225,242,225,226,233, 99,128,254,230,231,232,245,238,238, 97,  2,
+    140,212,140,221,225,242,225,226,233, 99,128,  6,186,230,233,238,
+    225,236,225,242,225,226,233, 99,128,251,159,233,238,233,244,233,
+    225,236,225,242,225,226,233, 99,128,254,231,234,229,229,237,105,
+      2,141,  5,141, 20,238,233,244,233,225,236,225,242,225,226,233,
+     99,128,252,210,243,239,236,225,244,229,228,225,242,225,226,233,
+     99,128,252, 75,237,101,  2,141, 43,141, 56,228,233,225,236,225,
+    242,225,226,233, 99,128,254,232,229,237,105,  2,141, 64,141, 79,
+    238,233,244,233,225,236,225,242,225,226,233, 99,128,252,213,243,
+    239,236,225,244,229,228,225,242,225,226,233, 99,128,252, 78,238,
+    239,239,238,230,233,238,225,236,225,242,225,226,233, 99,128,252,
+    141,116,  7,141,129,141,140,141,169,141,204,141,216,141,236,142,
+      6,227,239,238,244,225,233,238,115,128, 34, 12,101,  2,141,146,
+    141,162,236,229,237,229,238,116,129, 34,  9,141,157,239,102,128,
+     34,  9,241,245,225,108,128, 34, 96,231,242,229,225,244,229,114,
+    129, 34,111,141,181,238,239,114,  2,141,189,141,197,229,241,245,
+    225,108,128, 34,113,236,229,243,115,128, 34,121,233,228,229,238,
+    244,233,227,225,108,128, 34, 98,236,229,243,115,129, 34,110,141,
+    225,238,239,242,229,241,245,225,108,128, 34,112,112,  2,141,242,
+    141,252,225,242,225,236,236,229,108,128, 34, 38,242,229,227,229,
+    228,229,115,128, 34,128,243,117,  3,142, 15,142, 22,142, 31,226,
+    243,229,116,128, 34,132,227,227,229,229,228,115,128, 34,129,240,
+    229,242,243,229,116,128, 34,133,247,225,242,237,229,238,233,225,
+    110,128,  5,118,240,225,242,229,110,128, 36,169,115,  2,142, 66,
+    142, 75,243,241,245,225,242,101,128, 51,177,245,240,229,242,233,
+    239,114,128, 32,127,244,233,236,228,101,128,  0,241,117,132,  3,
+    189,142,105,142,116,142,197,143, 24,232,233,242,225,231,225,238,
+     97,128, 48,108,107,  2,142,122,142,146,225,244,225,235,225,238,
+     97,129, 48,204,142,134,232,225,236,230,247,233,228,244,104,128,
+    255,135,244, 97,  3,142,155,142,165,142,172,226,229,238,231,225,
+    236,105,128,  9,188,228,229,246, 97,128,  9, 60,231,117,  2,142,
+    179,142,188,234,225,242,225,244,105,128, 10,188,242,237,245,235,
+    232,105,128, 10, 60,109,  2,142,203,142,237,226,229,242,243,233,
+    231,110,130,  0, 35,142,217,142,229,237,239,238,239,243,240,225,
+    227,101,128,255,  3,243,237,225,236,108,128,254, 95,229,114,  2,
+    142,244,143, 20,225,236,243,233,231,110,  2,142,255,143,  7,231,
+    242,229,229,107,128,  3,116,236,239,247,229,242,231,242,229,229,
+    107,128,  3,117,111,128, 33, 22,110,130,  5,224,143, 32,143, 52,
+    228,225,231,229,243,104,129,251, 64,143, 43,232,229,226,242,229,
+    119,128,251, 64,232,229,226,242,229,119,128,  5,224,246,243,241,
+    245,225,242,101,128, 51,181,247,243,241,245,225,242,101,128, 51,
+    187,249, 97,  3,143, 90,143,100,143,107,226,229,238,231,225,236,
+    105,128,  9,158,228,229,246, 97,128,  9, 30,231,117,  2,143,114,
+    143,123,234,225,242,225,244,105,128, 10,158,242,237,245,235,232,
+    105,128, 10, 30,111,147,  0,111,143,174,143,196,144, 18,144,188,
+    145,  4,145, 19,145, 59,145,182,145,203,145,241,145,252,146,174,
+    148,  8,148, 72,148,105,148,151,149, 24,149, 71,149, 83, 97,  2,
+    143,180,143,187,227,245,244,101,128,  0,243,238,231,244,232,225,
+    105,128, 14, 45, 98,  4,143,206,143,248,144,  1,144, 11,225,242,
+    242,229,100,130,  2,117,143,218,143,229,227,249,242,233,236,236,
+    233, 99,128,  4,233,228,233,229,242,229,243,233,243,227,249,242,
+    233,236,236,233, 99,128,  4,235,229,238,231,225,236,105,128,  9,
+    147,239,240,239,237,239,230,111,128, 49, 27,242,229,246,101,128,
+      1, 79, 99,  3,144, 26,144, 99,144,178, 97,  2,144, 32,144, 93,
+    238,228,242, 97,  3,144, 43,144, 50,144, 61,228,229,246, 97,128,
+      9, 17,231,245,234,225,242,225,244,105,128, 10,145,246,239,247,
+    229,236,243,233,231,110,  2,144, 75,144, 82,228,229,246, 97,128,
+      9, 73,231,245,234,225,242,225,244,105,128, 10,201,242,239,110,
+    128,  1,210,233,242, 99,  2,144,107,144,112,236,101,128, 36,222,
+    245,237,230,236,229,120,133,  0,244,144,131,144,139,144,150,144,
+    158,144,170,225,227,245,244,101,128, 30,209,228,239,244,226,229,
+    236,239,119,128, 30,217,231,242,225,246,101,128, 30,211,232,239,
+    239,235,225,226,239,246,101,128, 30,213,244,233,236,228,101,128,
+     30,215,249,242,233,236,236,233, 99,128,  4, 62,100,  4,144,198,
+    144,221,144,227,144,250,226,108,  2,144,205,144,213,225,227,245,
+    244,101,128,  1, 81,231,242,225,246,101,128,  2, 13,229,246, 97,
+    128,  9, 19,233,229,242,229,243,233,115,129,  0,246,144,239,227,
+    249,242,233,236,236,233, 99,128,  4,231,239,244,226,229,236,239,
+    119,128, 30,205,101,129,  1, 83,145, 10,235,239,242,229,225,110,
+    128, 49, 90,103,  3,145, 27,145, 42,145, 49,239,238,229,107,129,
+      2,219,145, 36,227,237, 98,128,  3, 40,242,225,246,101,128,  0,
+    242,245,234,225,242,225,244,105,128, 10,147,104,  4,145, 69,145,
+     80,145, 90,145,168,225,242,237,229,238,233,225,110,128,  5,133,
+    233,242,225,231,225,238, 97,128, 48, 74,111,  2,145, 96,145,106,
+    239,235,225,226,239,246,101,128, 30,207,242,110,133,  1,161,145,
+    121,145,129,145,140,145,148,145,160,225,227,245,244,101,128, 30,
+    219,228,239,244,226,229,236,239,119,128, 30,227,231,242,225,246,
+    101,128, 30,221,232,239,239,235,225,226,239,246,101,128, 30,223,
+    244,233,236,228,101,128, 30,225,245,238,231,225,242,245,237,236,
+    225,245,116,128,  1, 81,105,129,  1,163,145,188,238,246,229,242,
+    244,229,228,226,242,229,246,101,128,  2, 15,107,  2,145,209,145,
+    233,225,244,225,235,225,238, 97,129, 48,170,145,221,232,225,236,
+    230,247,233,228,244,104,128,255,117,239,242,229,225,110,128, 49,
+     87,236,229,232,229,226,242,229,119,128,  5,171,109,  6,146, 10,
+    146, 38,146, 45,146,134,146,145,146,163,225,227,242,239,110,130,
+      1, 77,146, 22,146, 30,225,227,245,244,101,128, 30, 83,231,242,
+    225,246,101,128, 30, 81,228,229,246, 97,128,  9, 80,229,231, 97,
+    133,  3,201,146, 61,146, 65,146, 76,146, 90,146,106, 49,128,  3,
+    214,227,249,242,233,236,236,233, 99,128,  4, 97,236,225,244,233,
+    238,227,236,239,243,229,100,128,  2,119,242,239,245,238,228,227,
+    249,242,233,236,236,233, 99,128,  4,123,116,  2,146,112,146,127,
+    233,244,236,239,227,249,242,233,236,236,233, 99,128,  4,125,239,
+    238,239,115,128,  3,206,231,245,234,225,242,225,244,105,128, 10,
+    208,233,227,242,239,110,129,  3,191,146,155,244,239,238,239,115,
+    128,  3,204,239,238,239,243,240,225,227,101,128,255, 79,238,101,
+    145,  0, 49,146,213,146,222,146,232,147,  6,147, 31,147, 40,147,
+     49,147, 74,147,108,147,142,147,154,147,173,147,184,147,217,147,
+    227,147,235,147,246,225,242,225,226,233, 99,128,  6, 97,226,229,
+    238,231,225,236,105,128,  9,231,227,233,242,227,236,101,129, 36,
+     96,146,243,233,238,246,229,242,243,229,243,225,238,243,243,229,
+    242,233,102,128, 39,138,100,  2,147, 12,147, 18,229,246, 97,128,
+      9,103,239,244,229,238,236,229,225,228,229,114,128, 32, 36,229,
+    233,231,232,244,104,128, 33, 91,230,233,244,244,229,100,128,246,
+    220,231,117,  2,147, 56,147, 65,234,225,242,225,244,105,128, 10,
+    231,242,237,245,235,232,105,128, 10,103,232, 97,  3,147, 83,147,
+     94,147, 99,227,235,225,242,225,226,233, 99,128,  6, 97,236,102,
+    128,  0,189,238,231,250,232,239,117,128, 48, 33,105,  2,147,114,
+    147,132,228,229,239,231,242,225,240,232,233,227,240,225,242,229,
+    110,128, 50, 32,238,230,229,242,233,239,114,128, 32,129,237,239,
+    238,239,243,240,225,227,101,128,255, 17,238,245,237,229,242,225,
+    244,239,242,226,229,238,231,225,236,105,128,  9,244,239,236,228,
+    243,244,249,236,101,128,247, 49,112,  2,147,190,147,197,225,242,
+    229,110,128, 36,116,229,114,  2,147,204,147,210,233,239,100,128,
+     36,136,243,233,225,110,128,  6,241,241,245,225,242,244,229,114,
+    128,  0,188,242,239,237,225,110,128, 33,112,243,245,240,229,242,
+    233,239,114,128,  0,185,244,104,  2,147,253,148,  2,225,105,128,
+     14, 81,233,242,100,128, 33, 83,111,  3,148, 16,148, 50,148, 66,
+    103,  2,148, 22,148, 40,239,238,229,107,129,  1,235,148, 31,237,
+    225,227,242,239,110,128,  1,237,245,242,237,245,235,232,105,128,
+     10, 19,237,225,244,242,225,231,245,242,237,245,235,232,105,128,
+     10, 75,240,229,110,128,  2, 84,112,  3,148, 80,148, 87,148, 98,
+    225,242,229,110,128, 36,170,229,238,226,245,236,236,229,116,128,
+     37,230,244,233,239,110,128, 35, 37,114,  2,148,111,148,140,100,
+      2,148,117,148,128,230,229,237,233,238,233,238,101,128,  0,170,
+    237,225,243,227,245,236,233,238,101,128,  0,186,244,232,239,231,
+    239,238,225,108,128, 34, 31,115,  5,148,163,148,195,148,212,149,
+      1,149, 14,232,239,242,116,  2,148,172,148,179,228,229,246, 97,
+    128,  9, 18,246,239,247,229,236,243,233,231,238,228,229,246, 97,
+    128,  9, 74,236,225,243,104,129,  0,248,148,204,225,227,245,244,
+    101,128,  1,255,237,225,236,108,  2,148,221,148,232,232,233,242,
+    225,231,225,238, 97,128, 48, 73,235,225,244,225,235,225,238, 97,
+    129, 48,169,148,245,232,225,236,230,247,233,228,244,104,128,255,
+    107,244,242,239,235,229,225,227,245,244,101,128,  1,255,245,240,
+    229,242,233,239,114,128,246,240,116,  2,149, 30,149, 41,227,249,
+    242,233,236,236,233, 99,128,  4,127,233,236,228,101,130,  0,245,
+    149, 52,149, 60,225,227,245,244,101,128, 30, 77,228,233,229,242,
+    229,243,233,115,128, 30, 79,245,226,239,240,239,237,239,230,111,
+    128, 49, 33,118,  2,149, 89,149,170,229,114,  2,149, 96,149,162,
+    236,233,238,101,131, 32, 62,149,109,149,132,149,155, 99,  2,149,
+    115,149,127,229,238,244,229,242,236,233,238,101,128,254, 74,237,
+     98,128,  3,  5,100,  2,149,138,149,146,225,243,232,229,100,128,
+    254, 73,226,236,247,225,246,121,128,254, 76,247,225,246,121,128,
+    254, 75,243,227,239,242,101,128,  0,175,239,247,229,236,243,233,
+    231,110,  3,149,185,149,195,149,202,226,229,238,231,225,236,105,
+    128,  9,203,228,229,246, 97,128,  9, 75,231,245,234,225,242,225,
+    244,105,128, 10,203,112,145,  0,112,149,251,152,123,152,134,152,
+    143,152,155,154, 80,154, 90,155, 82,156,101,156,191,156,217,157,
+     92,157,100,158,  2,158, 60,158, 88,158, 98, 97, 14,150, 25,150,
+     57,150, 67,150, 74,150, 81,150,129,150,140,150,154,150,165,150,
+    212,150,226,151,238,152, 21,152,111, 97,  2,150, 31,150, 43,237,
+    240,243,243,241,245,225,242,101,128, 51,128,243,229,238,244,239,
+    243,241,245,225,242,101,128, 51, 43,226,229,238,231,225,236,105,
+    128,  9,170,227,245,244,101,128, 30, 85,228,229,246, 97,128,  9,
+     42,103,  2,150, 87,150,105,101,  2,150, 93,150,100,228,239,247,
+    110,128, 33,223,245,112,128, 33,222,117,  2,150,111,150,120,234,
+    225,242,225,244,105,128, 10,170,242,237,245,235,232,105,128, 10,
+     42,232,233,242,225,231,225,238, 97,128, 48,113,233,249,225,238,
+    238,239,233,244,232,225,105,128, 14, 47,235,225,244,225,235,225,
+    238, 97,128, 48,209,108,  2,150,171,150,196,225,244,225,236,233,
+    250,225,244,233,239,238,227,249,242,233,236,236,233,227,227,237,
+     98,128,  4,132,239,227,232,235,225,227,249,242,233,236,236,233,
+     99,128,  4,192,238,243,233,239,243,235,239,242,229,225,110,128,
+     49,127,114,  3,150,234,150,255,151,227, 97,  2,150,240,150,248,
+    231,242,225,240,104,128,  0,182,236,236,229,108,128, 34, 37,229,
+    110,  2,151,  6,151,116,236,229,230,116,136,  0, 40,151, 29,151,
+     44,151, 49,151, 54,151, 65,151, 77,151,100,151,105,225,236,244,
+    239,238,229,225,242,225,226,233, 99,128,253, 62,226,116,128,248,
+    237,229,120,128,248,236,233,238,230,229,242,233,239,114,128, 32,
+    141,237,239,238,239,243,240,225,227,101,128,255,  8,115,  2,151,
+     83,151, 90,237,225,236,108,128,254, 89,245,240,229,242,233,239,
+    114,128, 32,125,244,112,128,248,235,246,229,242,244,233,227,225,
+    108,128,254, 53,242,233,231,232,116,136,  0, 41,151,140,151,155,
+    151,160,151,165,151,176,151,188,151,211,151,216,225,236,244,239,
+    238,229,225,242,225,226,233, 99,128,253, 63,226,116,128,248,248,
+    229,120,128,248,247,233,238,230,229,242,233,239,114,128, 32,142,
+    237,239,238,239,243,240,225,227,101,128,255,  9,115,  2,151,194,
+    151,201,237,225,236,108,128,254, 90,245,240,229,242,233,239,114,
+    128, 32,126,244,112,128,248,246,246,229,242,244,233,227,225,108,
+    128,254, 54,244,233,225,236,228,233,230,102,128, 34,  2,115,  3,
+    151,246,152,  1,152, 13,229,241,232,229,226,242,229,119,128,  5,
+    192,232,244,225,232,229,226,242,229,119,128,  5,153,241,245,225,
+    242,101,128, 51,169,244,225,104,134,  5,183,152, 39,152, 53,152,
+     58,152, 67,152, 82,152, 98, 49,  2,152, 45,152, 49, 49,128,  5,
+    183,100,128,  5,183,178, 97,128,  5,183,232,229,226,242,229,119,
+    128,  5,183,238,225,242,242,239,247,232,229,226,242,229,119,128,
+      5,183,241,245,225,242,244,229,242,232,229,226,242,229,119,128,
+      5,183,247,233,228,229,232,229,226,242,229,119,128,  5,183,250,
+    229,242,232,229,226,242,229,119,128,  5,161,226,239,240,239,237,
+    239,230,111,128, 49,  6,227,233,242,227,236,101,128, 36,223,228,
+    239,244,225,227,227,229,238,116,128, 30, 87,101,137,  5,228,152,
+    177,152,188,152,208,152,220,152,240,153, 86,153, 97,153,118,154,
+     73,227,249,242,233,236,236,233, 99,128,  4, 63,228,225,231,229,
+    243,104,129,251, 68,152,199,232,229,226,242,229,119,128,251, 68,
+    229,250,233,243,241,245,225,242,101,128, 51, 59,230,233,238,225,
+    236,228,225,231,229,243,232,232,229,226,242,229,119,128,251, 67,
+    104,  5,152,252,153, 19,153, 27,153, 41,153, 71,225,114,  2,153,
+      3,153, 10,225,226,233, 99,128,  6,126,237,229,238,233,225,110,
+    128,  5,122,229,226,242,229,119,128,  5,228,230,233,238,225,236,
+    225,242,225,226,233, 99,128,251, 87,105,  2,153, 47,153, 62,238,
+    233,244,233,225,236,225,242,225,226,233, 99,128,251, 88,242,225,
+    231,225,238, 97,128, 48,122,237,229,228,233,225,236,225,242,225,
+    226,233, 99,128,251, 89,235,225,244,225,235,225,238, 97,128, 48,
+    218,237,233,228,228,236,229,232,239,239,235,227,249,242,233,236,
+    236,233, 99,128,  4,167,114,  5,153,130,153,142,153,184,154, 49,
+    154, 62,225,230,229,232,229,226,242,229,119,128,251, 78,227,229,
+    238,116,131,  0, 37,153,155,153,164,153,176,225,242,225,226,233,
+     99,128,  6,106,237,239,238,239,243,240,225,227,101,128,255,  5,
+    243,237,225,236,108,128,254,106,105,  2,153,190,154, 31,239,100,
+    134,  0, 46,153,207,153,218,153,229,153,241,153,252,154,  8,225,
+    242,237,229,238,233,225,110,128,  5,137,227,229,238,244,229,242,
+    229,100,128,  0,183,232,225,236,230,247,233,228,244,104,128,255,
+     97,233,238,230,229,242,233,239,114,128,246,231,237,239,238,239,
+    243,240,225,227,101,128,255, 14,115,  2,154, 14,154, 21,237,225,
+    236,108,128,254, 82,245,240,229,242,233,239,114,128,246,232,243,
+    240,239,237,229,238,233,231,242,229,229,235,227,237, 98,128,  3,
+     66,240,229,238,228,233,227,245,236,225,114,128, 34,165,244,232,
+    239,245,243,225,238,100,128, 32, 48,243,229,244, 97,128, 32,167,
+    230,243,241,245,225,242,101,128, 51,138,104,  3,154, 98,154,148,
+    155, 29, 97,  3,154,106,154,116,154,123,226,229,238,231,225,236,
+    105,128,  9,171,228,229,246, 97,128,  9, 43,231,117,  2,154,130,
+    154,139,234,225,242,225,244,105,128, 10,171,242,237,245,235,232,
+    105,128, 10, 43,105,133,  3,198,154,162,154,166,154,252,155,  4,
+    155, 15, 49,128,  3,213,229,245,240,104,  4,154,179,154,214,154,
+    229,154,238, 97,  2,154,185,154,200,227,233,242,227,236,229,235,
+    239,242,229,225,110,128, 50,122,240,225,242,229,238,235,239,242,
+    229,225,110,128, 50, 26,227,233,242,227,236,229,235,239,242,229,
+    225,110,128, 50,108,235,239,242,229,225,110,128, 49, 77,240,225,
+    242,229,238,235,239,242,229,225,110,128, 50, 12,236,225,244,233,
+    110,128,  2,120,238,244,232,245,244,232,225,105,128, 14, 58,243,
+    249,237,226,239,236,231,242,229,229,107,128,  3,213,111,  3,155,
+     37,155, 42,155, 68,239,107,128,  1,165,240,104,  2,155, 49,155,
+     58,225,238,244,232,225,105,128, 14, 30,245,238,231,244,232,225,
+    105,128, 14, 28,243,225,237,240,232,225,239,244,232,225,105,128,
+     14, 32,105,133,  3,192,155, 96,156, 52,156, 63,156, 74,156, 88,
+    229,245,112,  6,155,112,155,147,155,179,155,207,155,221,156, 17,
+     97,  2,155,118,155,133,227,233,242,227,236,229,235,239,242,229,
+    225,110,128, 50,115,240,225,242,229,238,235,239,242,229,225,110,
+    128, 50, 19,227,105,  2,155,154,155,166,229,245,227,235,239,242,
+    229,225,110,128, 49,118,242,227,236,229,235,239,242,229,225,110,
+    128, 50,101,107,  2,155,185,155,199,233,249,229,239,235,235,239,
+    242,229,225,110,128, 49,114,239,242,229,225,110,128, 49, 66,240,
+    225,242,229,238,235,239,242,229,225,110,128, 50,  5,243,233,239,
+    115,  2,155,230,156,  2,107,  2,155,236,155,250,233,249,229,239,
+    235,235,239,242,229,225,110,128, 49,116,239,242,229,225,110,128,
+     49, 68,244,233,235,229,245,244,235,239,242,229,225,110,128, 49,
+    117,116,  2,156, 23,156, 38,232,233,229,245,244,232,235,239,242,
+    229,225,110,128, 49,119,233,235,229,245,244,235,239,242,229,225,
+    110,128, 49,115,232,233,242,225,231,225,238, 97,128, 48,116,235,
+    225,244,225,235,225,238, 97,128, 48,212,243,249,237,226,239,236,
+    231,242,229,229,107,128,  3,214,247,242,225,242,237,229,238,233,
+    225,110,128,  5,131,236,245,115,132,  0, 43,156,115,156,126,156,
+    135,156,168,226,229,236,239,247,227,237, 98,128,  3, 31,227,233,
+    242,227,236,101,128, 34,149,109,  2,156,141,156,148,233,238,245,
+    115,128,  0,177,111,  2,156,154,156,158,100,128,  2,214,238,239,
+    243,240,225,227,101,128,255, 11,115,  2,156,174,156,181,237,225,
+    236,108,128,254, 98,245,240,229,242,233,239,114,128, 32,122,109,
+      2,156,197,156,208,239,238,239,243,240,225,227,101,128,255, 80,
+    243,241,245,225,242,101,128, 51,216,111,  5,156,229,156,240,157,
+     51,157, 62,157, 72,232,233,242,225,231,225,238, 97,128, 48,125,
+    233,238,244,233,238,231,233,238,228,229,120,  4,157,  4,157, 16,
+    157, 28,157, 41,228,239,247,238,247,232,233,244,101,128, 38, 31,
+    236,229,230,244,247,232,233,244,101,128, 38, 28,242,233,231,232,
+    244,247,232,233,244,101,128, 38, 30,245,240,247,232,233,244,101,
+    128, 38, 29,235,225,244,225,235,225,238, 97,128, 48,221,240,236,
+    225,244,232,225,105,128, 14, 27,243,244,225,236,237,225,242,107,
+    129, 48, 18,157, 85,230,225,227,101,128, 48, 32,240,225,242,229,
+    110,128, 36,171,114,  3,157,108,157,134,157,159,101,  2,157,114,
+    157,122,227,229,228,229,115,128, 34,122,243,227,242,233,240,244,
+    233,239,110,128, 33, 30,233,237,101,  2,157,142,157,148,237,239,
+    100,128,  2,185,242,229,246,229,242,243,229,100,128, 32, 53,111,
+      4,157,169,157,176,157,186,157,199,228,245,227,116,128, 34, 15,
+    234,229,227,244,233,246,101,128, 35,  5,236,239,238,231,229,228,
+    235,225,238, 97,128, 48,252,112,  2,157,205,157,242,101,  2,157,
+    211,157,218,236,236,239,114,128, 35, 24,242,243,117,  2,157,226,
+    157,233,226,243,229,116,128, 34,130,240,229,242,243,229,116,128,
+     34,131,239,242,244,233,239,110,129, 34, 55,157,253,225,108,128,
+     34, 29,115,  2,158,  8,158, 51,105,130,  3,200,158, 16,158, 27,
+    227,249,242,233,236,236,233, 99,128,  4,113,236,233,240,238,229,
+    245,237,225,244,225,227,249,242,233,236,236,233,227,227,237, 98,
+    128,  4,134,243,241,245,225,242,101,128, 51,176,117,  2,158, 66,
+    158, 77,232,233,242,225,231,225,238, 97,128, 48,119,235,225,244,
+    225,235,225,238, 97,128, 48,215,246,243,241,245,225,242,101,128,
+     51,180,247,243,241,245,225,242,101,128, 51,186,113,136,  0,113,
+    158,128,159,177,159,188,159,197,159,204,159,216,159,254,160,  6,
+     97,  4,158,138,158,161,158,225,159,160,100,  2,158,144,158,150,
+    229,246, 97,128,  9, 88,237,225,232,229,226,242,229,119,128,  5,
+    168,102,  4,158,171,158,180,158,194,158,210,225,242,225,226,233,
+     99,128,  6, 66,230,233,238,225,236,225,242,225,226,233, 99,128,
+    254,214,233,238,233,244,233,225,236,225,242,225,226,233, 99,128,
+    254,215,237,229,228,233,225,236,225,242,225,226,233, 99,128,254,
+    216,237,225,244,115,136,  5,184,158,248,159, 12,159, 26,159, 31,
+    159, 36,159, 45,159, 60,159,147, 49,  3,159,  0,159,  4,159,  8,
+     48,128,  5,184, 97,128,  5,184, 99,128,  5,184, 50,  2,159, 18,
+    159, 22, 55,128,  5,184, 57,128,  5,184,179, 51,128,  5,184,228,
+    101,128,  5,184,232,229,226,242,229,119,128,  5,184,238,225,242,
+    242,239,247,232,229,226,242,229,119,128,  5,184,113,  2,159, 66,
+    159,132,225,244,225,110,  4,159, 79,159, 88,159,103,159,119,232,
+    229,226,242,229,119,128,  5,184,238,225,242,242,239,247,232,229,
+    226,242,229,119,128,  5,184,241,245,225,242,244,229,242,232,229,
+    226,242,229,119,128,  5,184,247,233,228,229,232,229,226,242,229,
+    119,128,  5,184,245,225,242,244,229,242,232,229,226,242,229,119,
+    128,  5,184,247,233,228,229,232,229,226,242,229,119,128,  5,184,
+    242,238,229,249,240,225,242,225,232,229,226,242,229,119,128,  5,
+    159,226,239,240,239,237,239,230,111,128, 49, 17,227,233,242,227,
+    236,101,128, 36,224,232,239,239,107,128,  2,160,237,239,238,239,
+    243,240,225,227,101,128,255, 81,239,102,130,  5,231,159,225,159,
+    245,228,225,231,229,243,104,129,251, 71,159,236,232,229,226,242,
+    229,119,128,251, 71,232,229,226,242,229,119,128,  5,231,240,225,
+    242,229,110,128, 36,172,117,  4,160, 16,160, 28,160,117,160,204,
+    225,242,244,229,242,238,239,244,101,128, 38,105,226,245,244,115,
+    135,  5,187,160, 49,160, 54,160, 59,160, 64,160, 73,160, 88,160,
+    104,177, 56,128,  5,187,178, 53,128,  5,187,179, 49,128,  5,187,
+    232,229,226,242,229,119,128,  5,187,238,225,242,242,239,247,232,
+    229,226,242,229,119,128,  5,187,241,245,225,242,244,229,242,232,
+    229,226,242,229,119,128,  5,187,247,233,228,229,232,229,226,242,
+    229,119,128,  5,187,229,243,244,233,239,110,133,  0, 63,160,136,
+    160,159,160,176,160,184,160,196,225,114,  2,160,143,160,150,225,
+    226,233, 99,128,  6, 31,237,229,238,233,225,110,128,  5, 94,228,
+    239,247,110,129,  0,191,160,168,243,237,225,236,108,128,247,191,
+    231,242,229,229,107,128,  3,126,237,239,238,239,243,240,225,227,
+    101,128,255, 31,243,237,225,236,108,128,247, 63,239,244,101,  4,
+    160,216,161, 31,161, 51,161, 80,228,226,108,133,  0, 34,160,232,
+    160,239,160,246,161,  2,161, 23,226,225,243,101,128, 32, 30,236,
+    229,230,116,128, 32, 28,237,239,238,239,243,240,225,227,101,128,
+    255,  2,240,242,233,237,101,129, 48, 30,161, 12,242,229,246,229,
+    242,243,229,100,128, 48, 29,242,233,231,232,116,128, 32, 29,236,
+    229,230,116,129, 32, 24,161, 40,242,229,246,229,242,243,229,100,
+    128, 32, 27,114,  2,161, 57,161, 67,229,246,229,242,243,229,100,
+    128, 32, 27,233,231,232,116,129, 32, 25,161, 76,110,128,  1, 73,
+    243,233,238,231,108,  2,161, 90,161, 97,226,225,243,101,128, 32,
+     26,101,129,  0, 39,161,103,237,239,238,239,243,240,225,227,101,
+    128,255,  7,114,145,  0,114,161,153,162,157,162,168,162,215,163,
+     10,164, 27,164, 51,164,146,166,180,166,217,166,229,167, 27,167,
+     35,167,197,167,208,167,243,168, 87, 97, 11,161,177,161,188,161,
+    198,161,205,162, 14,162, 30,162, 55,162, 66,162, 91,162,114,162,
+    151,225,242,237,229,238,233,225,110,128,  5,124,226,229,238,231,
+    225,236,105,128,  9,176,227,245,244,101,128,  1, 85,100,  4,161,
+    215,161,221,161,235,162,  5,229,246, 97,128,  9, 48,233,227,225,
+    108,129, 34, 26,161,230,229,120,128,248,229,239,246,229,242,243,
+    243,241,245,225,242,101,129, 51,174,161,251,228,243,241,245,225,
+    242,101,128, 51,175,243,241,245,225,242,101,128, 51,173,230,101,
+    129,  5,191,162, 21,232,229,226,242,229,119,128,  5,191,231,117,
+      2,162, 37,162, 46,234,225,242,225,244,105,128, 10,176,242,237,
+    245,235,232,105,128, 10, 48,232,233,242,225,231,225,238, 97,128,
+     48,137,235,225,244,225,235,225,238, 97,129, 48,233,162, 79,232,
+    225,236,230,247,233,228,244,104,128,255,151,236,239,247,229,242,
+    228,233,225,231,239,238,225,236,226,229,238,231,225,236,105,128,
+      9,241,109,  2,162,120,162,143,233,228,228,236,229,228,233,225,
+    231,239,238,225,236,226,229,238,231,225,236,105,128,  9,240,243,
+    232,239,242,110,128,  2,100,244,233,111,128, 34, 54,226,239,240,
+    239,237,239,230,111,128, 49, 22, 99,  4,162,178,162,185,162,194,
+    162,202,225,242,239,110,128,  1, 89,229,228,233,236,236, 97,128,
+      1, 87,233,242,227,236,101,128, 36,225,239,237,237,225,225,227,
+    227,229,238,116,128,  1, 87,100,  2,162,221,162,231,226,236,231,
+    242,225,246,101,128,  2, 17,239,116,  2,162,238,162,247,225,227,
+    227,229,238,116,128, 30, 89,226,229,236,239,119,129, 30, 91,163,
+      1,237,225,227,242,239,110,128, 30, 93,101,  6,163, 24,163, 69,
+    163,104,163,159,163,184,163,217,102,  2,163, 30,163, 43,229,242,
+    229,238,227,229,237,225,242,107,128, 32, 59,236,229,248,243,117,
+      2,163, 53,163, 60,226,243,229,116,128, 34,134,240,229,242,243,
+    229,116,128, 34,135,231,233,243,244,229,114,  2,163, 80,163, 85,
+    229,100,128,  0,174,115,  2,163, 91,163, 97,225,238,115,128,248,
+    232,229,242,233,102,128,246,218,104,  3,163,112,163,135,163,149,
+    225,114,  2,163,119,163,126,225,226,233, 99,128,  6, 49,237,229,
+    238,233,225,110,128,  5,128,230,233,238,225,236,225,242,225,226,
+    233, 99,128,254,174,233,242,225,231,225,238, 97,128, 48,140,235,
+    225,244,225,235,225,238, 97,129, 48,236,163,172,232,225,236,230,
+    247,233,228,244,104,128,255,154,243,104,130,  5,232,163,193,163,
+    208,228,225,231,229,243,232,232,229,226,242,229,119,128,251, 72,
+    232,229,226,242,229,119,128,  5,232,118,  3,163,225,163,238,164,
+     14,229,242,243,229,228,244,233,236,228,101,128, 34, 61,233, 97,
+      2,163,245,163,254,232,229,226,242,229,119,128,  5,151,237,245,
+    231,242,225,243,232,232,229,226,242,229,119,128,  5,151,236,239,
+    231,233,227,225,236,238,239,116,128, 35, 16,230,233,243,232,232,
+    239,239,107,129,  2,126,164, 40,242,229,246,229,242,243,229,100,
+    128,  2,127,104,  2,164, 57,164, 80, 97,  2,164, 63,164, 73,226,
+    229,238,231,225,236,105,128,  9,221,228,229,246, 97,128,  9, 93,
+    111,131,  3,193,164, 90,164,119,164,133,239,107,129,  2,125,164,
+     97,244,245,242,238,229,100,129,  2,123,164,108,243,245,240,229,
+    242,233,239,114,128,  2,181,243,249,237,226,239,236,231,242,229,
+    229,107,128,  3,241,244,233,227,232,239,239,235,237,239,100,128,
+      2,222,105,  6,164,160,165,204,165,250,166,  5,166, 30,166,166,
+    229,245,108,  9,164,182,164,217,164,232,164,246,165, 36,165, 50,
+    165,136,165,149,165,184, 97,  2,164,188,164,203,227,233,242,227,
+    236,229,235,239,242,229,225,110,128, 50,113,240,225,242,229,238,
+    235,239,242,229,225,110,128, 50, 17,227,233,242,227,236,229,235,
+    239,242,229,225,110,128, 50, 99,232,233,229,245,232,235,239,242,
+    229,225,110,128, 49, 64,107,  2,164,252,165, 28,233,249,229,239,
+    107,  2,165,  6,165, 15,235,239,242,229,225,110,128, 49, 58,243,
+    233,239,243,235,239,242,229,225,110,128, 49,105,239,242,229,225,
+    110,128, 49, 57,237,233,229,245,237,235,239,242,229,225,110,128,
+     49, 59,112,  3,165, 58,165, 90,165,105, 97,  2,165, 64,165, 78,
+    238,243,233,239,243,235,239,242,229,225,110,128, 49,108,242,229,
+    238,235,239,242,229,225,110,128, 50,  3,232,233,229,245,240,232,
+    235,239,242,229,225,110,128, 49, 63,233,229,245,112,  2,165,114,
+    165,123,235,239,242,229,225,110,128, 49, 60,243,233,239,243,235,
+    239,242,229,225,110,128, 49,107,243,233,239,243,235,239,242,229,
+    225,110,128, 49, 61,116,  2,165,155,165,170,232,233,229,245,244,
+    232,235,239,242,229,225,110,128, 49, 62,233,235,229,245,244,235,
+    239,242,229,225,110,128, 49,106,249,229,239,242,233,238,232,233,
+    229,245,232,235,239,242,229,225,110,128, 49,109,231,232,116,  2,
+    165,212,165,220,225,238,231,236,101,128, 34, 31,116,  2,165,226,
+    165,240,225,227,235,226,229,236,239,247,227,237, 98,128,  3, 25,
+    242,233,225,238,231,236,101,128, 34,191,232,233,242,225,231,225,
+    238, 97,128, 48,138,235,225,244,225,235,225,238, 97,129, 48,234,
+    166, 18,232,225,236,230,247,233,228,244,104,128,255,152,110,  2,
+    166, 36,166,152,103,131,  2,218,166, 46,166, 57,166, 63,226,229,
+    236,239,247,227,237, 98,128,  3, 37,227,237, 98,128,  3, 10,232,
+    225,236,102,  2,166, 72,166,118,236,229,230,116,131,  2,191,166,
+     85,166, 96,166,107,225,242,237,229,238,233,225,110,128,  5, 89,
+    226,229,236,239,247,227,237, 98,128,  3, 28,227,229,238,244,229,
+    242,229,100,128,  2,211,242,233,231,232,116,130,  2,190,166,130,
+    166,141,226,229,236,239,247,227,237, 98,128,  3, 57,227,229,238,
+    244,229,242,229,100,128,  2,210,246,229,242,244,229,228,226,242,
+    229,246,101,128,  2, 19,244,244,239,242,245,243,241,245,225,242,
+    101,128, 51, 81,108,  2,166,186,166,197,233,238,229,226,229,236,
+    239,119,128, 30, 95,239,238,231,236,229,103,129,  2,124,166,208,
+    244,245,242,238,229,100,128,  2,122,237,239,238,239,243,240,225,
+    227,101,128,255, 82,111,  3,166,237,166,248,167, 17,232,233,242,
+    225,231,225,238, 97,128, 48,141,235,225,244,225,235,225,238, 97,
+    129, 48,237,167,  5,232,225,236,230,247,233,228,244,104,128,255,
+    155,242,245,225,244,232,225,105,128, 14, 35,240,225,242,229,110,
+    128, 36,173,114,  3,167, 43,167, 79,167,109, 97,  3,167, 51,167,
+     61,167, 68,226,229,238,231,225,236,105,128,  9,220,228,229,246,
+     97,128,  9, 49,231,245,242,237,245,235,232,105,128, 10, 92,229,
+    104,  2,167, 86,167, 95,225,242,225,226,233, 99,128,  6,145,230,
+    233,238,225,236,225,242,225,226,233, 99,128,251,141,246,239,227,
+    225,236,233, 99,  4,167,125,167,135,167,142,167,153,226,229,238,
+    231,225,236,105,128,  9,224,228,229,246, 97,128,  9, 96,231,245,
+    234,225,242,225,244,105,128, 10,224,246,239,247,229,236,243,233,
+    231,110,  3,167,169,167,179,167,186,226,229,238,231,225,236,105,
+    128,  9,196,228,229,246, 97,128,  9, 68,231,245,234,225,242,225,
+    244,105,128, 10,196,243,245,240,229,242,233,239,114,128,246,241,
+    116,  2,167,214,167,222,226,236,239,227,107,128, 37,144,245,242,
+    238,229,100,129,  2,121,167,232,243,245,240,229,242,233,239,114,
+    128,  2,180,117,  4,167,253,168,  8,168, 33,168, 80,232,233,242,
+    225,231,225,238, 97,128, 48,139,235,225,244,225,235,225,238, 97,
+    129, 48,235,168, 21,232,225,236,230,247,233,228,244,104,128,255,
+    153,112,  2,168, 39,168, 74,229,101,  2,168, 46,168, 60,237,225,
+    242,235,226,229,238,231,225,236,105,128,  9,242,243,233,231,238,
+    226,229,238,231,225,236,105,128,  9,243,233,225,104,128,246,221,
+    244,232,225,105,128, 14, 36,246,239,227,225,236,233, 99,  4,168,
+    103,168,113,168,120,168,131,226,229,238,231,225,236,105,128,  9,
+    139,228,229,246, 97,128,  9, 11,231,245,234,225,242,225,244,105,
+    128, 10,139,246,239,247,229,236,243,233,231,110,  3,168,147,168,
+    157,168,164,226,229,238,231,225,236,105,128,  9,195,228,229,246,
+     97,128,  9, 67,231,245,234,225,242,225,244,105,128, 10,195,115,
+    147,  0,115,168,217,170,187,170,198,171, 68,171,107,174, 49,174,
+     60,176,203,179, 85,179,131,179,158,180, 93,180,160,181,193,181,
+    203,182,133,182,206,183,120,183,130, 97,  9,168,237,168,247,169,
+     12,169, 84,169,109,169,120,169,145,169,177,169,217,226,229,238,
+    231,225,236,105,128,  9,184,227,245,244,101,129,  1, 91,169,  0,
+    228,239,244,225,227,227,229,238,116,128, 30,101,100,  5,169, 24,
+    169, 33,169, 39,169, 53,169, 69,225,242,225,226,233, 99,128,  6,
+     53,229,246, 97,128,  9, 56,230,233,238,225,236,225,242,225,226,
+    233, 99,128,254,186,233,238,233,244,233,225,236,225,242,225,226,
+    233, 99,128,254,187,237,229,228,233,225,236,225,242,225,226,233,
+     99,128,254,188,231,117,  2,169, 91,169,100,234,225,242,225,244,
+    105,128, 10,184,242,237,245,235,232,105,128, 10, 56,232,233,242,
+    225,231,225,238, 97,128, 48, 85,235,225,244,225,235,225,238, 97,
+    129, 48,181,169,133,232,225,236,230,247,233,228,244,104,128,255,
+    123,236,236,225,236,236,225,232,239,245,225,236,225,249,232,229,
+    247,225,243,225,236,236,225,237,225,242,225,226,233, 99,128,253,
+    250,237,229,235,104,130,  5,225,169,188,169,208,228,225,231,229,
+    243,104,129,251, 65,169,199,232,229,226,242,229,119,128,251, 65,
+    232,229,226,242,229,119,128,  5,225,242, 97,  5,169,230,170, 48,
+    170, 56,170,106,170,114, 97,  5,169,242,169,250,170,  2,170, 33,
+    170, 41,225,244,232,225,105,128, 14, 50,229,244,232,225,105,128,
+     14, 65,233,237,225,233,109,  2,170, 12,170, 23,225,236,225,233,
+    244,232,225,105,128, 14, 68,245,225,238,244,232,225,105,128, 14,
+     67,237,244,232,225,105,128, 14, 51,244,232,225,105,128, 14, 48,
+    229,244,232,225,105,128, 14, 64,105,  3,170, 64,170, 88,170, 99,
+    105,  2,170, 70,170, 81,236,229,230,244,244,232,225,105,128,248,
+    134,244,232,225,105,128, 14, 53,236,229,230,244,244,232,225,105,
+    128,248,133,244,232,225,105,128, 14, 52,239,244,232,225,105,128,
+     14, 66,117,  3,170,122,170,172,170,179,101,  3,170,130,170,154,
+    170,165,101,  2,170,136,170,147,236,229,230,244,244,232,225,105,
+    128,248,136,244,232,225,105,128, 14, 55,236,229,230,244,244,232,
+    225,105,128,248,135,244,232,225,105,128, 14, 54,244,232,225,105,
+    128, 14, 56,245,244,232,225,105,128, 14, 57,226,239,240,239,237,
+    239,230,111,128, 49, 25, 99,  5,170,210,170,231,170,240,171, 33,
+    171, 55,225,242,239,110,129,  1, 97,170,219,228,239,244,225,227,
+    227,229,238,116,128, 30,103,229,228,233,236,236, 97,128,  1, 95,
+    232,247, 97,131,  2, 89,170,252,171,  7,171, 26,227,249,242,233,
+    236,236,233, 99,128,  4,217,228,233,229,242,229,243,233,243,227,
+    249,242,233,236,236,233, 99,128,  4,219,232,239,239,107,128,  2,
+     90,233,242, 99,  2,171, 41,171, 46,236,101,128, 36,226,245,237,
+    230,236,229,120,128,  1, 93,239,237,237,225,225,227,227,229,238,
+    116,128,  2, 25,228,239,116,  2,171, 76,171, 85,225,227,227,229,
+    238,116,128, 30, 97,226,229,236,239,119,129, 30, 99,171, 95,228,
+    239,244,225,227,227,229,238,116,128, 30,105,101,  9,171,127,171,
+    143,171,178,171,243,172, 90,172,117,172,142,172,223,172,250,225,
+    231,245,236,236,226,229,236,239,247,227,237, 98,128,  3, 60, 99,
+      2,171,149,171,171,239,238,100,129, 32, 51,171,157,244,239,238,
+    229,227,232,233,238,229,243,101,128,  2,202,244,233,239,110,128,
+      0,167,229,110,  4,171,189,171,198,171,212,171,228,225,242,225,
+    226,233, 99,128,  6, 51,230,233,238,225,236,225,242,225,226,233,
+     99,128,254,178,233,238,233,244,233,225,236,225,242,225,226,233,
+     99,128,254,179,237,229,228,233,225,236,225,242,225,226,233, 99,
+    128,254,180,231,239,108,135,  5,182,172,  7,172, 21,172, 26,172,
+     35,172, 50,172, 66,172, 77, 49,  2,172, 13,172, 17, 51,128,  5,
+    182,102,128,  5,182,178, 99,128,  5,182,232,229,226,242,229,119,
+    128,  5,182,238,225,242,242,239,247,232,229,226,242,229,119,128,
+      5,182,241,245,225,242,244,229,242,232,229,226,242,229,119,128,
+      5,182,244,225,232,229,226,242,229,119,128,  5,146,247,233,228,
+    229,232,229,226,242,229,119,128,  5,182,104,  2,172, 96,172,107,
+    225,242,237,229,238,233,225,110,128,  5,125,233,242,225,231,225,
+    238, 97,128, 48, 91,235,225,244,225,235,225,238, 97,129, 48,187,
+    172,130,232,225,236,230,247,233,228,244,104,128,255,126,237,105,
+      2,172,149,172,192,227,239,236,239,110,131,  0, 59,172,163,172,
+    172,172,184,225,242,225,226,233, 99,128,  6, 27,237,239,238,239,
+    243,240,225,227,101,128,255, 27,243,237,225,236,108,128,254, 84,
+    246,239,233,227,229,228,237,225,242,235,235,225,238, 97,129, 48,
+    156,172,211,232,225,236,230,247,233,228,244,104,128,255,159,238,
+    116,  2,172,230,172,240,233,243,241,245,225,242,101,128, 51, 34,
+    239,243,241,245,225,242,101,128, 51, 35,246,229,110,142,  0, 55,
+    173, 28,173, 37,173, 47,173, 77,173, 84,173, 94,173,119,173,146,
+    173,180,173,192,173,203,173,236,173,244,173,255,225,242,225,226,
+    233, 99,128,  6,103,226,229,238,231,225,236,105,128,  9,237,227,
+    233,242,227,236,101,129, 36,102,173, 58,233,238,246,229,242,243,
+    229,243,225,238,243,243,229,242,233,102,128, 39,144,228,229,246,
+     97,128,  9,109,229,233,231,232,244,232,115,128, 33, 94,231,117,
+      2,173,101,173,110,234,225,242,225,244,105,128, 10,237,242,237,
+    245,235,232,105,128, 10,109,232, 97,  2,173,126,173,137,227,235,
+    225,242,225,226,233, 99,128,  6,103,238,231,250,232,239,117,128,
+     48, 39,105,  2,173,152,173,170,228,229,239,231,242,225,240,232,
+    233,227,240,225,242,229,110,128, 50, 38,238,230,229,242,233,239,
+    114,128, 32,135,237,239,238,239,243,240,225,227,101,128,255, 23,
+    239,236,228,243,244,249,236,101,128,247, 55,112,  2,173,209,173,
+    216,225,242,229,110,128, 36,122,229,114,  2,173,223,173,229,233,
+    239,100,128, 36,142,243,233,225,110,128,  6,247,242,239,237,225,
+    110,128, 33,118,243,245,240,229,242,233,239,114,128, 32,119,116,
+      2,174,  5,174, 43,229,229,110,  2,174, 13,174, 22,227,233,242,
+    227,236,101,128, 36,112,112,  2,174, 28,174, 35,225,242,229,110,
+    128, 36,132,229,242,233,239,100,128, 36,152,232,225,105,128, 14,
+     87,230,244,232,249,240,232,229,110,128,  0,173,104,  7,174, 76,
+    175, 50,175, 61,175, 75,176, 20,176, 33,176,197, 97,  6,174, 90,
+    174,101,174,111,174,122,175,  9,175, 34,225,242,237,229,238,233,
+    225,110,128,  5,119,226,229,238,231,225,236,105,128,  9,182,227,
+    249,242,233,236,236,233, 99,128,  4, 72,100,  2,174,128,174,224,
+    228, 97,  4,174,139,174,148,174,179,174,193,225,242,225,226,233,
+     99,128,  6, 81,228,225,237,237, 97,  2,174,158,174,167,225,242,
+    225,226,233, 99,128,252, 97,244,225,238,225,242,225,226,233, 99,
+    128,252, 94,230,225,244,232,225,225,242,225,226,233, 99,128,252,
+     96,235,225,243,242, 97,  2,174,203,174,212,225,242,225,226,233,
+     99,128,252, 98,244,225,238,225,242,225,226,233, 99,128,252, 95,
+    101,132, 37,146,174,236,174,243,174,251,175,  4,228,225,242,107,
+    128, 37,147,236,233,231,232,116,128, 37,145,237,229,228,233,245,
+    109,128, 37,146,246, 97,128,  9, 54,231,117,  2,175, 16,175, 25,
+    234,225,242,225,244,105,128, 10,182,242,237,245,235,232,105,128,
+     10, 54,236,243,232,229,236,229,244,232,229,226,242,229,119,128,
+      5,147,226,239,240,239,237,239,230,111,128, 49, 21,227,232,225,
+    227,249,242,233,236,236,233, 99,128,  4, 73,101,  4,175, 85,175,
+    150,175,160,175,177,229,110,  4,175, 96,175,105,175,119,175,135,
+    225,242,225,226,233, 99,128,  6, 52,230,233,238,225,236,225,242,
+    225,226,233, 99,128,254,182,233,238,233,244,233,225,236,225,242,
+    225,226,233, 99,128,254,183,237,229,228,233,225,236,225,242,225,
+    226,233, 99,128,254,184,233,227,239,240,244,233, 99,128,  3,227,
+    241,229,108,129, 32,170,175,168,232,229,226,242,229,119,128, 32,
+    170,246, 97,134,  5,176,175,194,175,209,175,223,175,232,175,247,
+    176,  7, 49,  2,175,200,175,205,177, 53,128,  5,176, 53,128,  5,
+    176, 50,  2,175,215,175,219, 50,128,  5,176,101,128,  5,176,232,
+    229,226,242,229,119,128,  5,176,238,225,242,242,239,247,232,229,
+    226,242,229,119,128,  5,176,241,245,225,242,244,229,242,232,229,
+    226,242,229,119,128,  5,176,247,233,228,229,232,229,226,242,229,
+    119,128,  5,176,232,225,227,249,242,233,236,236,233, 99,128,  4,
+    187,105,  2,176, 39,176, 50,237,225,227,239,240,244,233, 99,128,
+      3,237,110,131,  5,233,176, 60,176,143,176,152,100,  2,176, 66,
+    176,132,225,231,229,243,104,130,251, 73,176, 78,176, 87,232,229,
+    226,242,229,119,128,251, 73,115,  2,176, 93,176,113,232,233,238,
+    228,239,116,129,251, 44,176,104,232,229,226,242,229,119,128,251,
+     44,233,238,228,239,116,129,251, 45,176,123,232,229,226,242,229,
+    119,128,251, 45,239,244,232,229,226,242,229,119,128,  5,193,232,
+    229,226,242,229,119,128,  5,233,115,  2,176,158,176,178,232,233,
+    238,228,239,116,129,251, 42,176,169,232,229,226,242,229,119,128,
+    251, 42,233,238,228,239,116,129,251, 43,176,188,232,229,226,242,
+    229,119,128,251, 43,239,239,107,128,  2,130,105,  8,176,221,177,
+      9,177, 20,177, 45,177, 75,177, 83,177, 96,178, 11,231,237, 97,
+    131,  3,195,176,233,176,237,176,245, 49,128,  3,194,230,233,238,
+    225,108,128,  3,194,236,245,238,225,244,229,243,249,237,226,239,
+    236,231,242,229,229,107,128,  3,242,232,233,242,225,231,225,238,
+     97,128, 48, 87,235,225,244,225,235,225,238, 97,129, 48,183,177,
+     33,232,225,236,230,247,233,228,244,104,128,255,124,236,245,113,
+      2,177, 53,177, 62,232,229,226,242,229,119,128,  5,189,236,229,
+    230,244,232,229,226,242,229,119,128,  5,189,237,233,236,225,114,
+    128, 34, 60,238,228,239,244,232,229,226,242,229,119,128,  5,194,
+    239,115,  6,177,111,177,146,177,178,177,206,177,220,177,252, 97,
+      2,177,117,177,132,227,233,242,227,236,229,235,239,242,229,225,
+    110,128, 50,116,240,225,242,229,238,235,239,242,229,225,110,128,
+     50, 20,227,105,  2,177,153,177,165,229,245,227,235,239,242,229,
+    225,110,128, 49,126,242,227,236,229,235,239,242,229,225,110,128,
+     50,102,107,  2,177,184,177,198,233,249,229,239,235,235,239,242,
+    229,225,110,128, 49,122,239,242,229,225,110,128, 49, 69,238,233,
+    229,245,238,235,239,242,229,225,110,128, 49,123,112,  2,177,226,
+    177,239,225,242,229,238,235,239,242,229,225,110,128, 50,  6,233,
+    229,245,240,235,239,242,229,225,110,128, 49,125,244,233,235,229,
+    245,244,235,239,242,229,225,110,128, 49,124,120,141,  0, 54,178,
+     41,178, 50,178, 60,178, 90,178, 97,178,122,178,149,178,183,178,
+    195,178,206,178,239,178,247,179,  2,225,242,225,226,233, 99,128,
+      6,102,226,229,238,231,225,236,105,128,  9,236,227,233,242,227,
+    236,101,129, 36,101,178, 71,233,238,246,229,242,243,229,243,225,
+    238,243,243,229,242,233,102,128, 39,143,228,229,246, 97,128,  9,
+    108,231,117,  2,178,104,178,113,234,225,242,225,244,105,128, 10,
+    236,242,237,245,235,232,105,128, 10,108,232, 97,  2,178,129,178,
+    140,227,235,225,242,225,226,233, 99,128,  6,102,238,231,250,232,
+    239,117,128, 48, 38,105,  2,178,155,178,173,228,229,239,231,242,
+    225,240,232,233,227,240,225,242,229,110,128, 50, 37,238,230,229,
+    242,233,239,114,128, 32,134,237,239,238,239,243,240,225,227,101,
+    128,255, 22,239,236,228,243,244,249,236,101,128,247, 54,112,  2,
+    178,212,178,219,225,242,229,110,128, 36,121,229,114,  2,178,226,
+    178,232,233,239,100,128, 36,141,243,233,225,110,128,  6,246,242,
+    239,237,225,110,128, 33,117,243,245,240,229,242,233,239,114,128,
+     32,118,116,  2,179,  8,179, 79,229,229,110,  2,179, 16,179, 58,
+     99,  2,179, 22,179, 30,233,242,227,236,101,128, 36,111,245,242,
+    242,229,238,227,249,228,229,238,239,237,233,238,225,244,239,242,
+    226,229,238,231,225,236,105,128,  9,249,112,  2,179, 64,179, 71,
+    225,242,229,110,128, 36,131,229,242,233,239,100,128, 36,151,232,
+    225,105,128, 14, 86,108,  2,179, 91,179,111,225,243,104,129,  0,
+     47,179, 99,237,239,238,239,243,240,225,227,101,128,255, 15,239,
+    238,103,129,  1,127,179,119,228,239,244,225,227,227,229,238,116,
+    128, 30,155,109,  2,179,137,179,147,233,236,229,230,225,227,101,
+    128, 38, 58,239,238,239,243,240,225,227,101,128,255, 83,111,  6,
+    179,172,179,222,179,233,180,  2,180, 47,180, 58,102,  2,179,178,
+    179,192,240,225,243,245,241,232,229,226,242,229,119,128,  5,195,
+    116,  2,179,198,179,207,232,249,240,232,229,110,128,  0,173,243,
+    233,231,238,227,249,242,233,236,236,233, 99,128,  4, 76,232,233,
+    242,225,231,225,238, 97,128, 48, 93,235,225,244,225,235,225,238,
+     97,129, 48,189,179,246,232,225,236,230,247,233,228,244,104,128,
+    255,127,236,233,228,245,115,  2,180, 12,180, 29,236,239,238,231,
+    239,246,229,242,236,225,249,227,237, 98,128,  3, 56,243,232,239,
+    242,244,239,246,229,242,236,225,249,227,237, 98,128,  3, 55,242,
+    245,243,233,244,232,225,105,128, 14, 41,115,  3,180, 66,180, 76,
+    180, 84,225,236,225,244,232,225,105,128, 14, 40,239,244,232,225,
+    105,128, 14, 11,245,225,244,232,225,105,128, 14, 42,240, 97,  3,
+    180,102,180,122,180,154,227,101,129,  0, 32,180,109,232,225,227,
+    235,225,242,225,226,233, 99,128,  0, 32,228,101,129, 38, 96,180,
+    129,243,245,233,116,  2,180,138,180,146,226,236,225,227,107,128,
+     38, 96,247,232,233,244,101,128, 38,100,242,229,110,128, 36,174,
+    241,245,225,242,101, 11,180,188,180,199,180,213,180,238,180,255,
+    181, 25,181, 40,181, 73,181,100,181,156,181,171,226,229,236,239,
+    247,227,237, 98,128,  3, 59, 99,  2,180,205,180,209, 99,128, 51,
+    196,109,128, 51,157,228,233,225,231,239,238,225,236,227,242,239,
+    243,243,232,225,244,227,232,230,233,236,108,128, 37,169,232,239,
+    242,233,250,239,238,244,225,236,230,233,236,108,128, 37,164,107,
+      2,181,  5,181,  9,103,128, 51,143,109,129, 51,158,181, 15,227,
+    225,240,233,244,225,108,128, 51,206,108,  2,181, 31,181, 35,110,
+    128, 51,209,239,103,128, 51,210,109,  4,181, 50,181, 54,181, 59,
+    181, 63,103,128, 51,142,233,108,128, 51,213,109,128, 51,156,243,
+    241,245,225,242,229,100,128, 51,161,239,242,244,232,239,231,239,
+    238,225,236,227,242,239,243,243,232,225,244,227,232,230,233,236,
+    108,128, 37,166,245,240,240,229,114,  2,181,110,181,133,236,229,
+    230,244,244,239,236,239,247,229,242,242,233,231,232,244,230,233,
+    236,108,128, 37,167,242,233,231,232,244,244,239,236,239,247,229,
+    242,236,229,230,244,230,233,236,108,128, 37,168,246,229,242,244,
+    233,227,225,236,230,233,236,108,128, 37,165,247,232,233,244,229,
+    247,233,244,232,243,237,225,236,236,226,236,225,227,107,128, 37,
+    163,242,243,241,245,225,242,101,128, 51,219,115,  2,181,209,182,
+    123, 97,  4,181,219,181,229,181,236,181,247,226,229,238,231,225,
+    236,105,128,  9,183,228,229,246, 97,128,  9, 55,231,245,234,225,
+    242,225,244,105,128, 10,183,238,103,  8,182, 10,182, 24,182, 38,
+    182, 52,182, 67,182, 81,182, 95,182,108,227,233,229,245,227,235,
+    239,242,229,225,110,128, 49, 73,232,233,229,245,232,235,239,242,
+    229,225,110,128, 49,133,233,229,245,238,231,235,239,242,229,225,
+    110,128, 49,128,235,233,249,229,239,235,235,239,242,229,225,110,
+    128, 49, 50,238,233,229,245,238,235,239,242,229,225,110,128, 49,
+    101,240,233,229,245,240,235,239,242,229,225,110,128, 49, 67,243,
+    233,239,243,235,239,242,229,225,110,128, 49, 70,244,233,235,229,
+    245,244,235,239,242,229,225,110,128, 49, 56,245,240,229,242,233,
+    239,114,128,246,242,116,  2,182,139,182,162,229,242,236,233,238,
+    103,129,  0,163,182,150,237,239,238,239,243,240,225,227,101,128,
+    255,225,242,239,235,101,  2,182,171,182,188,236,239,238,231,239,
+    246,229,242,236,225,249,227,237, 98,128,  3, 54,243,232,239,242,
+    244,239,246,229,242,236,225,249,227,237, 98,128,  3, 53,117,  7,
+    182,222,182,254,183, 20,183, 31,183, 72,183, 82,183, 86,226,243,
+    229,116,130, 34,130,182,233,182,244,238,239,244,229,241,245,225,
+    108,128, 34,138,239,242,229,241,245,225,108,128, 34,134, 99,  2,
+    183,  4,183, 12,227,229,229,228,115,128, 34,123,232,244,232,225,
+    116,128, 34, 11,232,233,242,225,231,225,238, 97,128, 48, 89,107,
+      2,183, 37,183, 61,225,244,225,235,225,238, 97,129, 48,185,183,
+     49,232,225,236,230,247,233,228,244,104,128,255,125,245,238,225,
+    242,225,226,233, 99,128,  6, 82,237,237,225,244,233,239,110,128,
+     34, 17,110,128, 38, 60,240,229,242,243,229,116,130, 34,131,183,
+     99,183,110,238,239,244,229,241,245,225,108,128, 34,139,239,242,
+    229,241,245,225,108,128, 34,135,246,243,241,245,225,242,101,128,
+     51,220,249,239,245,247,225,229,242,225,243,241,245,225,242,101,
+    128, 51,124,116,144,  0,116,183,183,184,192,184,213,185,100,185,
+    140,187,188,191, 70,192,145,192,157,192,169,193,202,193,227,194,
+     57,194,237,195,165,195,255, 97, 10,183,205,183,215,183,236,183,
+    243,184, 12,184, 90,184,107,184,132,184,146,184,150,226,229,238,
+    231,225,236,105,128,  9,164,227,107,  2,183,222,183,229,228,239,
+    247,110,128, 34,164,236,229,230,116,128, 34,163,228,229,246, 97,
+    128,  9, 36,231,117,  2,183,250,184,  3,234,225,242,225,244,105,
+    128, 10,164,242,237,245,235,232,105,128, 10, 36,104,  4,184, 22,
+    184, 31,184, 45,184, 75,225,242,225,226,233, 99,128,  6, 55,230,
+    233,238,225,236,225,242,225,226,233, 99,128,254,194,105,  2,184,
+     51,184, 66,238,233,244,233,225,236,225,242,225,226,233, 99,128,
+    254,195,242,225,231,225,238, 97,128, 48, 95,237,229,228,233,225,
+    236,225,242,225,226,233, 99,128,254,196,233,243,249,239,245,229,
+    242,225,243,241,245,225,242,101,128, 51,125,235,225,244,225,235,
+    225,238, 97,129, 48,191,184,120,232,225,236,230,247,233,228,244,
+    104,128,255,128,244,247,229,229,236,225,242,225,226,233, 99,128,
+      6, 64,117,128,  3,196,118,130,  5,234,184,158,184,183,228,225,
+    231,229,115,129,251, 74,184,168,104,129,251, 74,184,174,232,229,
+    226,242,229,119,128,251, 74,232,229,226,242,229,119,128,  5,234,
+     98,  2,184,198,184,203,225,114,128,  1,103,239,240,239,237,239,
+    230,111,128, 49, 10, 99,  6,184,227,184,234,184,241,184,250,185,
+     60,185, 87,225,242,239,110,128,  1,101,227,245,242,108,128,  2,
+    168,229,228,233,236,236, 97,128,  1, 99,232,229,104,  4,185,  6,
+    185, 15,185, 29,185, 45,225,242,225,226,233, 99,128,  6,134,230,
+    233,238,225,236,225,242,225,226,233, 99,128,251,123,233,238,233,
+    244,233,225,236,225,242,225,226,233, 99,128,251,124,237,229,228,
+    233,225,236,225,242,225,226,233, 99,128,251,125,233,242, 99,  2,
+    185, 68,185, 73,236,101,128, 36,227,245,237,230,236,229,248,226,
+    229,236,239,119,128, 30,113,239,237,237,225,225,227,227,229,238,
+    116,128,  1, 99,100,  2,185,106,185,116,233,229,242,229,243,233,
+    115,128, 30,151,239,116,  2,185,123,185,132,225,227,227,229,238,
+    116,128, 30,107,226,229,236,239,119,128, 30,109,101,  9,185,160,
+    185,171,185,191,186,201,186,226,187, 34,187,101,187,106,187,158,
+    227,249,242,233,236,236,233, 99,128,  4, 66,228,229,243,227,229,
+    238,228,229,242,227,249,242,233,236,236,233, 99,128,  4,173,104,
+      7,185,207,185,216,185,230,186, 14,186, 44,186, 85,186,183,225,
+    242,225,226,233, 99,128,  6, 42,230,233,238,225,236,225,242,225,
+    226,233, 99,128,254,150,232,225,232,105,  2,185,239,185,254,238,
+    233,244,233,225,236,225,242,225,226,233, 99,128,252,162,243,239,
+    236,225,244,229,228,225,242,225,226,233, 99,128,252, 12,105,  2,
+    186, 20,186, 35,238,233,244,233,225,236,225,242,225,226,233, 99,
+    128,254,151,242,225,231,225,238, 97,128, 48,102,234,229,229,237,
+    105,  2,186, 54,186, 69,238,233,244,233,225,236,225,242,225,226,
+    233, 99,128,252,161,243,239,236,225,244,229,228,225,242,225,226,
+    233, 99,128,252, 11,109,  2,186, 91,186,125,225,242,226,245,244,
+     97,  2,186,102,186,111,225,242,225,226,233, 99,128,  6, 41,230,
+    233,238,225,236,225,242,225,226,233, 99,128,254,148,101,  2,186,
+    131,186,144,228,233,225,236,225,242,225,226,233, 99,128,254,152,
+    229,237,105,  2,186,152,186,167,238,233,244,233,225,236,225,242,
+    225,226,233, 99,128,252,164,243,239,236,225,244,229,228,225,242,
+    225,226,233, 99,128,252, 14,238,239,239,238,230,233,238,225,236,
+    225,242,225,226,233, 99,128,252,115,235,225,244,225,235,225,238,
+     97,129, 48,198,186,214,232,225,236,230,247,233,228,244,104,128,
+    255,131,108,  2,186,232,186,251,229,240,232,239,238,101,129, 33,
+     33,186,243,226,236,225,227,107,128, 38, 14,233,243,232, 97,  2,
+    187,  4,187, 19,231,229,228,239,236,225,232,229,226,242,229,119,
+    128,  5,160,241,229,244,225,238,225,232,229,226,242,229,119,128,
+      5,169,110,  4,187, 44,187, 53,187, 72,187, 93,227,233,242,227,
+    236,101,128, 36,105,233,228,229,239,231,242,225,240,232,233,227,
+    240,225,242,229,110,128, 50, 41,112,  2,187, 78,187, 85,225,242,
+    229,110,128, 36,125,229,242,233,239,100,128, 36,145,242,239,237,
+    225,110,128, 33,121,243,104,128,  2,167,116,131,  5,216,187,116,
+    187,136,187,145,228,225,231,229,243,104,129,251, 56,187,127,232,
+    229,226,242,229,119,128,251, 56,232,229,226,242,229,119,128,  5,
+    216,243,229,227,249,242,233,236,236,233, 99,128,  4,181,246,233,
+    114,  2,187,166,187,175,232,229,226,242,229,119,128,  5,155,236,
+    229,230,244,232,229,226,242,229,119,128,  5,155,104,  6,187,202,
+    188, 98,188,220,189, 96,190,  3,191, 60, 97,  5,187,214,187,224,
+    187,231,188,  0,188, 29,226,229,238,231,225,236,105,128,  9,165,
+    228,229,246, 97,128,  9, 37,231,117,  2,187,238,187,247,234,225,
+    242,225,244,105,128, 10,165,242,237,245,235,232,105,128, 10, 37,
+    108,  2,188,  6,188, 15,225,242,225,226,233, 99,128,  6, 48,230,
+    233,238,225,236,225,242,225,226,233, 99,128,254,172,238,244,232,
+    225,235,232,225,116,  3,188, 44,188, 75,188, 82,236,239,119,  2,
+    188, 52,188, 63,236,229,230,244,244,232,225,105,128,248,152,242,
+    233,231,232,244,244,232,225,105,128,248,151,244,232,225,105,128,
+     14, 76,245,240,240,229,242,236,229,230,244,244,232,225,105,128,
+    248,150,101,  3,188,106,188,170,188,193,104,  4,188,116,188,125,
+    188,139,188,155,225,242,225,226,233, 99,128,  6, 43,230,233,238,
+    225,236,225,242,225,226,233, 99,128,254,154,233,238,233,244,233,
+    225,236,225,242,225,226,233, 99,128,254,155,237,229,228,233,225,
+    236,225,242,225,226,233, 99,128,254,156,242,101,  2,188,177,188,
+    186,229,248,233,243,244,115,128, 34,  3,230,239,242,101,128, 34,
+     52,244, 97,130,  3,184,188,202,188,206, 49,128,  3,209,243,249,
+    237,226,239,236,231,242,229,229,107,128,  3,209,105,  2,188,226,
+    189, 56,229,245,244,104,  4,188,239,189, 18,189, 33,189, 42, 97,
+      2,188,245,189,  4,227,233,242,227,236,229,235,239,242,229,225,
+    110,128, 50,121,240,225,242,229,238,235,239,242,229,225,110,128,
+     50, 25,227,233,242,227,236,229,235,239,242,229,225,110,128, 50,
+    107,235,239,242,229,225,110,128, 49, 76,240,225,242,229,238,235,
+    239,242,229,225,110,128, 50, 11,242,244,229,229,110,  2,189, 66,
+    189, 75,227,233,242,227,236,101,128, 36,108,112,  2,189, 81,189,
+     88,225,242,229,110,128, 36,128,229,242,233,239,100,128, 36,148,
+    111,  6,189,110,189,127,189,132,189,146,189,151,189,204,238,225,
+    238,231,237,239,238,244,232,239,244,232,225,105,128, 14, 17,239,
+    107,128,  1,173,240,232,245,244,232,225,239,244,232,225,105,128,
+     14, 18,242,110,128,  0,254,244,104,  3,189,160,189,184,189,194,
+     97,  2,189,166,189,176,232,225,238,244,232,225,105,128, 14, 23,
+    238,244,232,225,105,128, 14, 16,239,238,231,244,232,225,105,128,
+     14, 24,245,238,231,244,232,225,105,128, 14, 22,245,243,225,238,
+    100,  2,189,214,189,225,227,249,242,233,236,236,233, 99,128,  4,
+    130,243,243,229,240,225,242,225,244,239,114,  2,189,240,189,249,
+    225,242,225,226,233, 99,128,  6,108,240,229,242,243,233,225,110,
+    128,  6,108,242,229,101,144,  0, 51,190, 41,190, 50,190, 60,190,
+     90,190, 97,190,107,190,132,190,159,190,193,190,205,190,224,190,
+    235,191, 12,191, 34,191, 42,191, 53,225,242,225,226,233, 99,128,
+      6, 99,226,229,238,231,225,236,105,128,  9,233,227,233,242,227,
+    236,101,129, 36, 98,190, 71,233,238,246,229,242,243,229,243,225,
+    238,243,243,229,242,233,102,128, 39,140,228,229,246, 97,128,  9,
+    105,229,233,231,232,244,232,115,128, 33, 92,231,117,  2,190,114,
+    190,123,234,225,242,225,244,105,128, 10,233,242,237,245,235,232,
+    105,128, 10,105,232, 97,  2,190,139,190,150,227,235,225,242,225,
+    226,233, 99,128,  6, 99,238,231,250,232,239,117,128, 48, 35,105,
+      2,190,165,190,183,228,229,239,231,242,225,240,232,233,227,240,
+    225,242,229,110,128, 50, 34,238,230,229,242,233,239,114,128, 32,
+    131,237,239,238,239,243,240,225,227,101,128,255, 19,238,245,237,
+    229,242,225,244,239,242,226,229,238,231,225,236,105,128,  9,246,
+    239,236,228,243,244,249,236,101,128,247, 51,112,  2,190,241,190,
+    248,225,242,229,110,128, 36,118,229,114,  2,190,255,191,  5,233,
+    239,100,128, 36,138,243,233,225,110,128,  6,243,241,245,225,242,
+    244,229,242,115,129,  0,190,191, 25,229,237,228,225,243,104,128,
+    246,222,242,239,237,225,110,128, 33,114,243,245,240,229,242,233,
+    239,114,128,  0,179,244,232,225,105,128, 14, 83,250,243,241,245,
+    225,242,101,128, 51,148,105,  7,191, 86,191, 97,191,212,192, 54,
+    192, 66,192,115,192,132,232,233,242,225,231,225,238, 97,128, 48,
+     97,107,  2,191,103,191,127,225,244,225,235,225,238, 97,129, 48,
+    193,191,115,232,225,236,230,247,233,228,244,104,128,255,129,229,
+    245,116,  4,191,139,191,174,191,189,191,198, 97,  2,191,145,191,
+    160,227,233,242,227,236,229,235,239,242,229,225,110,128, 50,112,
+    240,225,242,229,238,235,239,242,229,225,110,128, 50, 16,227,233,
+    242,227,236,229,235,239,242,229,225,110,128, 50, 98,235,239,242,
+    229,225,110,128, 49, 55,240,225,242,229,238,235,239,242,229,225,
+    110,128, 50,  2,236,228,101,133,  2,220,191,228,191,239,192,  0,
+    192, 12,192, 40,226,229,236,239,247,227,237, 98,128,  3, 48, 99,
+      2,191,245,191,250,237, 98,128,  3,  3,239,237, 98,128,  3,  3,
+    228,239,245,226,236,229,227,237, 98,128,  3, 96,111,  2,192, 18,
+    192, 28,240,229,242,225,244,239,114,128, 34, 60,246,229,242,236,
+    225,249,227,237, 98,128,  3, 52,246,229,242,244,233,227,225,236,
+    227,237, 98,128,  3, 62,237,229,243,227,233,242,227,236,101,128,
+     34,151,112,  2,192, 72,192,102,229,232, 97,  2,192, 80,192, 89,
+    232,229,226,242,229,119,128,  5,150,236,229,230,244,232,229,226,
+    242,229,119,128,  5,150,240,233,231,245,242,237,245,235,232,105,
+    128, 10,112,244,236,239,227,249,242,233,236,236,233,227,227,237,
+     98,128,  4,131,247,238,225,242,237,229,238,233,225,110,128,  5,
+    127,236,233,238,229,226,229,236,239,119,128, 30,111,237,239,238,
+    239,243,240,225,227,101,128,255, 84,111,  7,192,185,192,196,192,
+    207,192,232,193, 96,193,108,193,192,225,242,237,229,238,233,225,
+    110,128,  5,105,232,233,242,225,231,225,238, 97,128, 48,104,235,
+    225,244,225,235,225,238, 97,129, 48,200,192,220,232,225,236,230,
+    247,233,228,244,104,128,255,132,110,  3,192,240,193, 82,193, 87,
+    101,  4,192,250,193, 63,193, 70,193, 76,226,225,114,  4,193,  6,
+    193, 35,193, 45,193, 54,229,248,244,242, 97,  2,193, 16,193, 26,
+    232,233,231,232,237,239,100,128,  2,229,236,239,247,237,239,100,
+    128,  2,233,232,233,231,232,237,239,100,128,  2,230,236,239,247,
+    237,239,100,128,  2,232,237,233,228,237,239,100,128,  2,231,230,
+    233,246,101,128,  1,189,243,233,120,128,  1,133,244,247,111,128,
+      1,168,239,115,128,  3,132,243,241,245,225,242,101,128, 51, 39,
+    240,225,244,225,235,244,232,225,105,128, 14, 15,242,244,239,233,
+    243,229,243,232,229,236,236,226,242,225,227,235,229,116,  2,193,
+    131,193,161,236,229,230,116,130, 48, 20,193,142,193,150,243,237,
+    225,236,108,128,254, 93,246,229,242,244,233,227,225,108,128,254,
+     57,242,233,231,232,116,130, 48, 21,193,173,193,181,243,237,225,
+    236,108,128,254, 94,246,229,242,244,233,227,225,108,128,254, 58,
+    244,225,239,244,232,225,105,128, 14, 21,240, 97,  2,193,209,193,
+    221,236,225,244,225,236,232,239,239,107,128,  1,171,242,229,110,
+    128, 36,175,114,  3,193,235,194, 10,194, 25,225,228,229,237,225,
+    242,107,129, 33, 34,193,247,115,  2,193,253,194,  3,225,238,115,
+    128,248,234,229,242,233,102,128,246,219,229,244,242,239,230,236,
+    229,248,232,239,239,107,128,  2,136,233,225,103,  4,194, 37,194,
+     42,194, 47,194, 52,228,110,128, 37,188,236,102,128, 37,196,242,
+    116,128, 37,186,245,112,128, 37,178,115,132,  2,166,194, 69,194,
+    108,194,214,194,227,225,228,105,130,  5,230,194, 79,194, 99,228,
+    225,231,229,243,104,129,251, 70,194, 90,232,229,226,242,229,119,
+    128,251, 70,232,229,226,242,229,119,128,  5,230,101,  2,194,114,
+    194,125,227,249,242,233,236,236,233, 99,128,  4, 70,242,101,134,
+      5,181,194,142,194,156,194,161,194,170,194,185,194,201, 49,  2,
+    194,148,194,152, 50,128,  5,181,101,128,  5,181,178, 98,128,  5,
+    181,232,229,226,242,229,119,128,  5,181,238,225,242,242,239,247,
+    232,229,226,242,229,119,128,  5,181,241,245,225,242,244,229,242,
+    232,229,226,242,229,119,128,  5,181,247,233,228,229,232,229,226,
+    242,229,119,128,  5,181,232,229,227,249,242,233,236,236,233, 99,
+    128,  4, 91,245,240,229,242,233,239,114,128,246,243,116,  4,194,
+    247,195, 41,195,106,195,157, 97,  3,194,255,195,  9,195, 16,226,
+    229,238,231,225,236,105,128,  9,159,228,229,246, 97,128,  9, 31,
+    231,117,  2,195, 23,195, 32,234,225,242,225,244,105,128, 10,159,
+    242,237,245,235,232,105,128, 10, 31,229,104,  4,195, 52,195, 61,
+    195, 75,195, 91,225,242,225,226,233, 99,128,  6,121,230,233,238,
+    225,236,225,242,225,226,233, 99,128,251,103,233,238,233,244,233,
+    225,236,225,242,225,226,233, 99,128,251,104,237,229,228,233,225,
+    236,225,242,225,226,233, 99,128,251,105,232, 97,  3,195,115,195,
+    125,195,132,226,229,238,231,225,236,105,128,  9,160,228,229,246,
+     97,128,  9, 32,231,117,  2,195,139,195,148,234,225,242,225,244,
+    105,128, 10,160,242,237,245,235,232,105,128, 10, 32,245,242,238,
+    229,100,128,  2,135,117,  3,195,173,195,184,195,209,232,233,242,
+    225,231,225,238, 97,128, 48,100,235,225,244,225,235,225,238, 97,
+    129, 48,196,195,197,232,225,236,230,247,233,228,244,104,128,255,
+    130,243,237,225,236,108,  2,195,219,195,230,232,233,242,225,231,
+    225,238, 97,128, 48, 99,235,225,244,225,235,225,238, 97,129, 48,
+    195,195,243,232,225,236,230,247,233,228,244,104,128,255,111,119,
+      2,196,  5,196,110,101,  2,196, 11,196, 59,236,246,101,  3,196,
+     21,196, 30,196, 51,227,233,242,227,236,101,128, 36,107,112,  2,
+    196, 36,196, 43,225,242,229,110,128, 36,127,229,242,233,239,100,
+    128, 36,147,242,239,237,225,110,128, 33,123,238,244,121,  3,196,
+     69,196, 78,196, 89,227,233,242,227,236,101,128, 36,115,232,225,
+    238,231,250,232,239,117,128, 83, 68,112,  2,196, 95,196,102,225,
+    242,229,110,128, 36,135,229,242,233,239,100,128, 36,155,111,142,
+      0, 50,196,142,196,151,196,161,196,191,196,243,197, 12,197, 39,
+    197, 73,197, 85,197,104,197,115,197,148,197,156,197,180,225,242,
+    225,226,233, 99,128,  6, 98,226,229,238,231,225,236,105,128,  9,
+    232,227,233,242,227,236,101,129, 36, 97,196,172,233,238,246,229,
+    242,243,229,243,225,238,243,243,229,242,233,102,128, 39,139,100,
+      2,196,197,196,203,229,246, 97,128,  9,104,239,116,  2,196,210,
+    196,221,229,238,236,229,225,228,229,114,128, 32, 37,236,229,225,
+    228,229,114,129, 32, 37,196,232,246,229,242,244,233,227,225,108,
+    128,254, 48,231,117,  2,196,250,197,  3,234,225,242,225,244,105,
+    128, 10,232,242,237,245,235,232,105,128, 10,104,232, 97,  2,197,
+     19,197, 30,227,235,225,242,225,226,233, 99,128,  6, 98,238,231,
+    250,232,239,117,128, 48, 34,105,  2,197, 45,197, 63,228,229,239,
+    231,242,225,240,232,233,227,240,225,242,229,110,128, 50, 33,238,
+    230,229,242,233,239,114,128, 32,130,237,239,238,239,243,240,225,
+    227,101,128,255, 18,238,245,237,229,242,225,244,239,242,226,229,
+    238,231,225,236,105,128,  9,245,239,236,228,243,244,249,236,101,
+    128,247, 50,112,  2,197,121,197,128,225,242,229,110,128, 36,117,
+    229,114,  2,197,135,197,141,233,239,100,128, 36,137,243,233,225,
+    110,128,  6,242,242,239,237,225,110,128, 33,113,115,  2,197,162,
+    197,170,244,242,239,235,101,128,  1,187,245,240,229,242,233,239,
+    114,128,  0,178,244,104,  2,197,187,197,192,225,105,128, 14, 82,
+    233,242,228,115,128, 33, 84,117,145,  0,117,197,237,197,245,198,
+     30,198, 87,198,225,199,  6,199,129,199,145,199,196,200, 10,200,
+     91,200,100,200,219,200,243,201, 95,201,123,201,237,225,227,245,
+    244,101,128,  0,250, 98,  4,197,255,198,  4,198, 13,198, 23,225,
+    114,128,  2,137,229,238,231,225,236,105,128,  9,137,239,240,239,
+    237,239,230,111,128, 49, 40,242,229,246,101,128,  1,109, 99,  3,
+    198, 38,198, 45,198, 77,225,242,239,110,128,  1,212,233,242, 99,
+      2,198, 53,198, 58,236,101,128, 36,228,245,237,230,236,229,120,
+    129,  0,251,198, 69,226,229,236,239,119,128, 30,119,249,242,233,
+    236,236,233, 99,128,  4, 67,100,  5,198, 99,198,110,198,133,198,
+    139,198,215,225,244,244,225,228,229,246, 97,128,  9, 81,226,108,
+      2,198,117,198,125,225,227,245,244,101,128,  1,113,231,242,225,
+    246,101,128,  2, 21,229,246, 97,128,  9,  9,233,229,242,229,243,
+    233,115,133,  0,252,198,159,198,167,198,175,198,198,198,206,225,
+    227,245,244,101,128,  1,216,226,229,236,239,119,128, 30,115, 99,
+      2,198,181,198,188,225,242,239,110,128,  1,218,249,242,233,236,
+    236,233, 99,128,  4,241,231,242,225,246,101,128,  1,220,237,225,
+    227,242,239,110,128,  1,214,239,244,226,229,236,239,119,128, 30,
+    229,103,  2,198,231,198,238,242,225,246,101,128,  0,249,117,  2,
+    198,244,198,253,234,225,242,225,244,105,128, 10,137,242,237,245,
+    235,232,105,128, 10,  9,104,  3,199, 14,199, 24,199,102,233,242,
+    225,231,225,238, 97,128, 48, 70,111,  2,199, 30,199, 40,239,235,
+    225,226,239,246,101,128, 30,231,242,110,133,  1,176,199, 55,199,
+     63,199, 74,199, 82,199, 94,225,227,245,244,101,128, 30,233,228,
+    239,244,226,229,236,239,119,128, 30,241,231,242,225,246,101,128,
+     30,235,232,239,239,235,225,226,239,246,101,128, 30,237,244,233,
+    236,228,101,128, 30,239,245,238,231,225,242,245,237,236,225,245,
+    116,129,  1,113,199,118,227,249,242,233,236,236,233, 99,128,  4,
+    243,233,238,246,229,242,244,229,228,226,242,229,246,101,128,  2,
+     23,107,  3,199,153,199,177,199,188,225,244,225,235,225,238, 97,
+    129, 48,166,199,165,232,225,236,230,247,233,228,244,104,128,255,
+    115,227,249,242,233,236,236,233, 99,128,  4,121,239,242,229,225,
+    110,128, 49, 92,109,  2,199,202,199,255, 97,  2,199,208,199,241,
+    227,242,239,110,130,  1,107,199,219,199,230,227,249,242,233,236,
+    236,233, 99,128,  4,239,228,233,229,242,229,243,233,115,128, 30,
+    123,244,242,225,231,245,242,237,245,235,232,105,128, 10, 65,239,
+    238,239,243,240,225,227,101,128,255, 85,110,  2,200, 16,200, 71,
+    228,229,242,243,227,239,242,101,132,  0, 95,200, 35,200, 41,200,
+     53,200, 64,228,226,108,128, 32, 23,237,239,238,239,243,240,225,
+    227,101,128,255, 63,246,229,242,244,233,227,225,108,128,254, 51,
+    247,225,246,121,128,254, 79,105,  2,200, 77,200, 82,239,110,128,
+     34, 42,246,229,242,243,225,108,128, 34,  0,239,231,239,238,229,
+    107,128,  1,115,112,  5,200,112,200,119,200,127,200,142,200,193,
+    225,242,229,110,128, 36,176,226,236,239,227,107,128, 37,128,240,
+    229,242,228,239,244,232,229,226,242,229,119,128,  5,196,243,233,
+    236,239,110,131,  3,197,200,156,200,177,200,185,228,233,229,242,
+    229,243,233,115,129,  3,203,200,169,244,239,238,239,115,128,  3,
+    176,236,225,244,233,110,128,  2,138,244,239,238,239,115,128,  3,
+    205,244,225,227,107,  2,200,202,200,213,226,229,236,239,247,227,
+    237, 98,128,  3, 29,237,239,100,128,  2,212,114,  2,200,225,200,
+    237,225,231,245,242,237,245,235,232,105,128, 10,115,233,238,103,
+    128,  1,111,115,  3,200,251,201, 10,201, 55,232,239,242,244,227,
+    249,242,233,236,236,233, 99,128,  4, 94,237,225,236,108,  2,201,
+     19,201, 30,232,233,242,225,231,225,238, 97,128, 48, 69,235,225,
+    244,225,235,225,238, 97,129, 48,165,201, 43,232,225,236,230,247,
+    233,228,244,104,128,255,105,244,242,225,233,231,232,116,  2,201,
+     67,201, 78,227,249,242,233,236,236,233, 99,128,  4,175,243,244,
+    242,239,235,229,227,249,242,233,236,236,233, 99,128,  4,177,244,
+    233,236,228,101,130,  1,105,201,107,201,115,225,227,245,244,101,
+    128, 30,121,226,229,236,239,119,128, 30,117,117,  5,201,135,201,
+    145,201,152,201,177,201,193,226,229,238,231,225,236,105,128,  9,
+    138,228,229,246, 97,128,  9, 10,231,117,  2,201,159,201,168,234,
+    225,242,225,244,105,128, 10,138,242,237,245,235,232,105,128, 10,
+     10,237,225,244,242,225,231,245,242,237,245,235,232,105,128, 10,
+     66,246,239,247,229,236,243,233,231,110,  3,201,209,201,219,201,
+    226,226,229,238,231,225,236,105,128,  9,194,228,229,246, 97,128,
+      9, 66,231,245,234,225,242,225,244,105,128, 10,194,246,239,247,
+    229,236,243,233,231,110,  3,201,253,202,  7,202, 14,226,229,238,
+    231,225,236,105,128,  9,193,228,229,246, 97,128,  9, 65,231,245,
+    234,225,242,225,244,105,128, 10,193,118,139,  0,118,202, 51,202,
+    199,202,208,202,219,203,148,203,155,203,253,204,  9,204,109,204,
+    117,204,138, 97,  4,202, 61,202, 68,202, 93,202,104,228,229,246,
+     97,128,  9, 53,231,117,  2,202, 75,202, 84,234,225,242,225,244,
+    105,128, 10,181,242,237,245,235,232,105,128, 10, 53,235,225,244,
+    225,235,225,238, 97,128, 48,247,118,132,  5,213,202,116,202,143,
+    202,175,202,187,228,225,231,229,243,104,130,251, 53,202,129,202,
+    134,182, 53,128,251, 53,232,229,226,242,229,119,128,251, 53,104,
+      2,202,149,202,157,229,226,242,229,119,128,  5,213,239,236,225,
+    109,129,251, 75,202,166,232,229,226,242,229,119,128,251, 75,246,
+    225,246,232,229,226,242,229,119,128,  5,240,249,239,228,232,229,
+    226,242,229,119,128,  5,241,227,233,242,227,236,101,128, 36,229,
+    228,239,244,226,229,236,239,119,128, 30,127,101,  6,202,233,202,
+    244,203, 52,203, 63,203, 69,203,136,227,249,242,233,236,236,233,
+     99,128,  4, 50,104,  4,202,254,203,  7,203, 21,203, 37,225,242,
+    225,226,233, 99,128,  6,164,230,233,238,225,236,225,242,225,226,
+    233, 99,128,251,107,233,238,233,244,233,225,236,225,242,225,226,
+    233, 99,128,251,108,237,229,228,233,225,236,225,242,225,226,233,
+     99,128,251,109,235,225,244,225,235,225,238, 97,128, 48,249,238,
+    245,115,128, 38, 64,242,244,233,227,225,108,  2,203, 80,203, 86,
+    226,225,114,128,  0,124,236,233,238,101,  4,203, 99,203,110,203,
+    121,203,130,225,226,239,246,229,227,237, 98,128,  3, 13,226,229,
+    236,239,247,227,237, 98,128,  3, 41,236,239,247,237,239,100,128,
+      2,204,237,239,100,128,  2,200,247,225,242,237,229,238,233,225,
+    110,128,  5,126,232,239,239,107,128,  2,139,105,  3,203,163,203,
+    174,203,213,235,225,244,225,235,225,238, 97,128, 48,248,242,225,
+    237, 97,  3,203,185,203,195,203,202,226,229,238,231,225,236,105,
+    128,  9,205,228,229,246, 97,128,  9, 77,231,245,234,225,242,225,
+    244,105,128, 10,205,243,225,242,231, 97,  3,203,225,203,235,203,
+    242,226,229,238,231,225,236,105,128,  9,131,228,229,246, 97,128,
+      9,  3,231,245,234,225,242,225,244,105,128, 10,131,237,239,238,
+    239,243,240,225,227,101,128,255, 86,111,  3,204, 17,204, 28,204,
+     98,225,242,237,229,238,233,225,110,128,  5,120,233,227,229,100,
+      2,204, 37,204, 73,233,244,229,242,225,244,233,239,110,  2,204,
+     51,204, 62,232,233,242,225,231,225,238, 97,128, 48,158,235,225,
+    244,225,235,225,238, 97,128, 48,254,237,225,242,235,235,225,238,
+     97,129, 48,155,204, 86,232,225,236,230,247,233,228,244,104,128,
+    255,158,235,225,244,225,235,225,238, 97,128, 48,250,240,225,242,
+    229,110,128, 36,177,116,  2,204,123,204,130,233,236,228,101,128,
+     30,125,245,242,238,229,100,128,  2,140,117,  2,204,144,204,155,
+    232,233,242,225,231,225,238, 97,128, 48,148,235,225,244,225,235,
+    225,238, 97,128, 48,244,119,143,  0,119,204,200,205,177,205,187,
+    205,210,205,250,206, 61,206, 69,208, 40,208, 81,208, 93,208,168,
+    208,176,208,183,208,194,208,203, 97,  8,204,218,204,225,204,235,
+    204,246,205, 28,205, 60,205, 72,205,108,227,245,244,101,128, 30,
+    131,229,235,239,242,229,225,110,128, 49, 89,232,233,242,225,231,
+    225,238, 97,128, 48,143,107,  2,204,252,205, 20,225,244,225,235,
+    225,238, 97,129, 48,239,205,  8,232,225,236,230,247,233,228,244,
+    104,128,255,156,239,242,229,225,110,128, 49, 88,243,237,225,236,
+    108,  2,205, 38,205, 49,232,233,242,225,231,225,238, 97,128, 48,
+    142,235,225,244,225,235,225,238, 97,128, 48,238,244,244,239,243,
+    241,245,225,242,101,128, 51, 87,118,  2,205, 78,205, 86,229,228,
+    225,243,104,128, 48, 28,249,245,238,228,229,242,243,227,239,242,
+    229,246,229,242,244,233,227,225,108,128,254, 52,119,  3,205,116,
+    205,125,205,139,225,242,225,226,233, 99,128,  6, 72,230,233,238,
+    225,236,225,242,225,226,233, 99,128,254,238,232,225,237,250,225,
+    225,226,239,246,101,  2,205,154,205,163,225,242,225,226,233, 99,
+    128,  6, 36,230,233,238,225,236,225,242,225,226,233, 99,128,254,
+    134,226,243,241,245,225,242,101,128, 51,221,227,233,242, 99,  2,
+    205,196,205,201,236,101,128, 36,230,245,237,230,236,229,120,128,
+      1,117,100,  2,205,216,205,226,233,229,242,229,243,233,115,128,
+     30,133,239,116,  2,205,233,205,242,225,227,227,229,238,116,128,
+     30,135,226,229,236,239,119,128, 30,137,101,  4,206,  4,206, 15,
+    206, 27,206, 51,232,233,242,225,231,225,238, 97,128, 48,145,233,
+    229,242,243,244,242,225,243,115,128, 33, 24,107,  2,206, 33,206,
+     43,225,244,225,235,225,238, 97,128, 48,241,239,242,229,225,110,
+    128, 49, 94,239,235,239,242,229,225,110,128, 49, 93,231,242,225,
+    246,101,128, 30,129,232,233,244,101,  8,206, 90,206, 99,206,183,
+    207, 17,207,101,207,146,207,198,207,254,226,245,236,236,229,116,
+    128, 37,230, 99,  2,206,105,206,125,233,242,227,236,101,129, 37,
+    203,206,115,233,238,246,229,242,243,101,128, 37,217,239,242,238,
+    229,242,226,242,225,227,235,229,116,  2,206,142,206,162,236,229,
+    230,116,129, 48, 14,206,151,246,229,242,244,233,227,225,108,128,
+    254, 67,242,233,231,232,116,129, 48, 15,206,172,246,229,242,244,
+    233,227,225,108,128,254, 68,100,  2,206,189,206,230,233,225,237,
+    239,238,100,129, 37,199,206,200,227,239,238,244,225,233,238,233,
+    238,231,226,236,225,227,235,243,237,225,236,236,228,233,225,237,
+    239,238,100,128, 37,200,239,247,238,240,239,233,238,244,233,238,
+    103,  2,206,246,207,  6,243,237,225,236,236,244,242,233,225,238,
+    231,236,101,128, 37,191,244,242,233,225,238,231,236,101,128, 37,
+    189,236,101,  2,207, 24,207, 66,230,244,240,239,233,238,244,233,
+    238,103,  2,207, 39,207, 55,243,237,225,236,236,244,242,233,225,
+    238,231,236,101,128, 37,195,244,242,233,225,238,231,236,101,128,
+     37,193,238,244,233,227,245,236,225,242,226,242,225,227,235,229,
+    116,  2,207, 86,207, 93,236,229,230,116,128, 48, 22,242,233,231,
+    232,116,128, 48, 23,242,233,231,232,244,240,239,233,238,244,233,
+    238,103,  2,207,119,207,135,243,237,225,236,236,244,242,233,225,
+    238,231,236,101,128, 37,185,244,242,233,225,238,231,236,101,128,
+     37,183,115,  3,207,154,207,184,207,192,109,  2,207,160,207,172,
+    225,236,236,243,241,245,225,242,101,128, 37,171,233,236,233,238,
+    231,230,225,227,101,128, 38, 58,241,245,225,242,101,128, 37,161,
+    244,225,114,128, 38,  6,116,  2,207,204,207,215,229,236,229,240,
+    232,239,238,101,128, 38, 15,239,242,244,239,233,243,229,243,232,
+    229,236,236,226,242,225,227,235,229,116,  2,207,239,207,246,236,
+    229,230,116,128, 48, 24,242,233,231,232,116,128, 48, 25,245,240,
+    240,239,233,238,244,233,238,103,  2,208, 13,208, 29,243,237,225,
+    236,236,244,242,233,225,238,231,236,101,128, 37,181,244,242,233,
+    225,238,231,236,101,128, 37,179,105,  2,208, 46,208, 57,232,233,
+    242,225,231,225,238, 97,128, 48,144,107,  2,208, 63,208, 73,225,
+    244,225,235,225,238, 97,128, 48,240,239,242,229,225,110,128, 49,
+     95,237,239,238,239,243,240,225,227,101,128,255, 87,111,  4,208,
+    103,208,114,208,139,208,157,232,233,242,225,231,225,238, 97,128,
+     48,146,235,225,244,225,235,225,238, 97,129, 48,242,208,127,232,
+    225,236,230,247,233,228,244,104,128,255,102,110,129, 32,169,208,
+    145,237,239,238,239,243,240,225,227,101,128,255,230,247,225,229,
+    238,244,232,225,105,128, 14, 39,240,225,242,229,110,128, 36,178,
+    242,233,238,103,128, 30,152,243,245,240,229,242,233,239,114,128,
+      2,183,244,245,242,238,229,100,128,  2,141,249,238,110,128,  1,
+    191,120,137,  0,120,208,231,208,242,208,253,209,  6,209, 33,209,
+     46,209, 50,209, 62,209, 70,225,226,239,246,229,227,237, 98,128,
+      3, 61,226,239,240,239,237,239,230,111,128, 49, 18,227,233,242,
+    227,236,101,128, 36,231,100,  2,209, 12,209, 22,233,229,242,229,
+    243,233,115,128, 30,141,239,244,225,227,227,229,238,116,128, 30,
+    139,229,232,225,242,237,229,238,233,225,110,128,  5,109,105,128,
+      3,190,237,239,238,239,243,240,225,227,101,128,255, 88,240,225,
+    242,229,110,128, 36,179,243,245,240,229,242,233,239,114,128,  2,
+    227,121,143,  0,121,209,115,210, 74,210, 97,210,137,212,103,212,
+    111,212,128,212,192,212,204,213,201,213,241,213,253,214,  8,214,
+     29,215,  2, 97, 11,209,139,209,151,209,161,209,168,209,175,209,
+    185,209,210,209,221,210,  3,210, 16,210, 62,225,228,239,243,241,
+    245,225,242,101,128, 51, 78,226,229,238,231,225,236,105,128,  9,
+    175,227,245,244,101,128,  0,253,228,229,246, 97,128,  9, 47,229,
+    235,239,242,229,225,110,128, 49, 82,231,117,  2,209,192,209,201,
+    234,225,242,225,244,105,128, 10,175,242,237,245,235,232,105,128,
+     10, 47,232,233,242,225,231,225,238, 97,128, 48,132,107,  2,209,
+    227,209,251,225,244,225,235,225,238, 97,129, 48,228,209,239,232,
+    225,236,230,247,233,228,244,104,128,255,148,239,242,229,225,110,
+    128, 49, 81,237,225,235,235,225,238,244,232,225,105,128, 14, 78,
+    243,237,225,236,108,  2,210, 26,210, 37,232,233,242,225,231,225,
+    238, 97,128, 48,131,235,225,244,225,235,225,238, 97,129, 48,227,
+    210, 50,232,225,236,230,247,233,228,244,104,128,255,108,244,227,
+    249,242,233,236,236,233, 99,128,  4, 99,227,233,242, 99,  2,210,
+     83,210, 88,236,101,128, 36,232,245,237,230,236,229,120,128,  1,
+    119,100,  2,210,103,210,113,233,229,242,229,243,233,115,128,  0,
+    255,239,116,  2,210,120,210,129,225,227,227,229,238,116,128, 30,
+    143,226,229,236,239,119,128, 30,245,101,  7,210,153,211,161,211,
+    170,211,188,211,220,212, 40,212, 91,104,  8,210,171,210,180,210,
+    214,210,228,211, 45,211, 61,211,120,211,138,225,242,225,226,233,
+     99,128,  6, 74,226,225,242,242,229,101,  2,210,191,210,200,225,
+    242,225,226,233, 99,128,  6,210,230,233,238,225,236,225,242,225,
+    226,233, 99,128,251,175,230,233,238,225,236,225,242,225,226,233,
+     99,128,254,242,232,225,237,250,225,225,226,239,246,101,  4,210,
+    247,211,  0,211, 14,211, 30,225,242,225,226,233, 99,128,  6, 38,
+    230,233,238,225,236,225,242,225,226,233, 99,128,254,138,233,238,
+    233,244,233,225,236,225,242,225,226,233, 99,128,254,139,237,229,
+    228,233,225,236,225,242,225,226,233, 99,128,254,140,233,238,233,
+    244,233,225,236,225,242,225,226,233, 99,128,254,243,237,101,  2,
+    211, 68,211, 81,228,233,225,236,225,242,225,226,233, 99,128,254,
+    244,229,237,105,  2,211, 89,211,104,238,233,244,233,225,236,225,
+    242,225,226,233, 99,128,252,221,243,239,236,225,244,229,228,225,
+    242,225,226,233, 99,128,252, 88,238,239,239,238,230,233,238,225,
+    236,225,242,225,226,233, 99,128,252,148,244,232,242,229,229,228,
+    239,244,243,226,229,236,239,247,225,242,225,226,233, 99,128,  6,
+    209,235,239,242,229,225,110,128, 49, 86,110,129,  0,165,211,176,
+    237,239,238,239,243,240,225,227,101,128,255,229,111,  2,211,194,
+    211,203,235,239,242,229,225,110,128, 49, 85,242,233,238,232,233,
+    229,245,232,235,239,242,229,225,110,128, 49,134,114,  3,211,228,
+    212,  8,212, 20,225,232,226,229,238,249,239,237,111,  2,211,242,
+    211,251,232,229,226,242,229,119,128,  5,170,236,229,230,244,232,
+    229,226,242,229,119,128,  5,170,233,227,249,242,233,236,236,233,
+     99,128,  4, 75,245,228,233,229,242,229,243,233,243,227,249,242,
+    233,236,236,233, 99,128,  4,249,243,233,229,245,238,103,  3,212,
+     53,212, 62,212, 78,235,239,242,229,225,110,128, 49,129,240,225,
+    238,243,233,239,243,235,239,242,229,225,110,128, 49,131,243,233,
+    239,243,235,239,242,229,225,110,128, 49,130,244,233,246,232,229,
+    226,242,229,119,128,  5,154,231,242,225,246,101,128, 30,243,232,
+    239,239,107,129,  1,180,212,120,225,226,239,246,101,128, 30,247,
+    105,  5,212,140,212,151,212,162,212,171,212,179,225,242,237,229,
+    238,233,225,110,128,  5,117,227,249,242,233,236,236,233, 99,128,
+      4, 87,235,239,242,229,225,110,128, 49, 98,238,249,225,238,103,
+    128, 38, 47,247,238,225,242,237,229,238,233,225,110,128,  5,130,
+    237,239,238,239,243,240,225,227,101,128,255, 89,111,  7,212,220,
+    213, 34,213, 45,213, 55,213, 93,213,139,213,148,100,131,  5,217,
+    212,230,212,250,213,  3,228,225,231,229,243,104,129,251, 57,212,
+    241,232,229,226,242,229,119,128,251, 57,232,229,226,242,229,119,
+    128,  5,217,249,239,100,  2,213, 11,213, 20,232,229,226,242,229,
+    119,128,  5,242,240,225,244,225,232,232,229,226,242,229,119,128,
+    251, 31,232,233,242,225,231,225,238, 97,128, 48,136,233,235,239,
+    242,229,225,110,128, 49,137,107,  2,213, 61,213, 85,225,244,225,
+    235,225,238, 97,129, 48,232,213, 73,232,225,236,230,247,233,228,
+    244,104,128,255,150,239,242,229,225,110,128, 49, 91,243,237,225,
+    236,108,  2,213,103,213,114,232,233,242,225,231,225,238, 97,128,
+     48,135,235,225,244,225,235,225,238, 97,129, 48,231,213,127,232,
+    225,236,230,247,233,228,244,104,128,255,110,244,231,242,229,229,
+    107,128,  3,243,121,  2,213,154,213,191, 97,  2,213,160,213,170,
+    229,235,239,242,229,225,110,128, 49,136,107,  2,213,176,213,184,
+    239,242,229,225,110,128, 49,135,244,232,225,105,128, 14, 34,233,
+    238,231,244,232,225,105,128, 14, 13,112,  2,213,207,213,214,225,
+    242,229,110,128, 36,180,239,231,229,231,242,225,237,237,229,238,
+    105,129,  3,122,213,230,231,242,229,229,235,227,237, 98,128,  3,
+     69,114,129,  1,166,213,247,233,238,103,128, 30,153,243,245,240,
+    229,242,233,239,114,128,  2,184,116,  2,214, 14,214, 21,233,236,
+    228,101,128, 30,249,245,242,238,229,100,128,  2,142,117,  5,214,
+     41,214, 52,214, 62,214,100,214,232,232,233,242,225,231,225,238,
+     97,128, 48,134,233,235,239,242,229,225,110,128, 49,140,107,  2,
+    214, 68,214, 92,225,244,225,235,225,238, 97,129, 48,230,214, 80,
+    232,225,236,230,247,233,228,244,104,128,255,149,239,242,229,225,
+    110,128, 49, 96,115,  3,214,108,214,146,214,187,226,233,103,  2,
+    214,116,214,127,227,249,242,233,236,236,233, 99,128,  4,107,233,
+    239,244,233,230,233,229,228,227,249,242,233,236,236,233, 99,128,
+      4,109,236,233,244,244,236,101,  2,214,157,214,168,227,249,242,
+    233,236,236,233, 99,128,  4,103,233,239,244,233,230,233,229,228,
+    227,249,242,233,236,236,233, 99,128,  4,105,237,225,236,108,  2,
+    214,196,214,207,232,233,242,225,231,225,238, 97,128, 48,133,235,
+    225,244,225,235,225,238, 97,129, 48,229,214,220,232,225,236,230,
+    247,233,228,244,104,128,255,109,249,101,  2,214,239,214,248,235,
+    239,242,229,225,110,128, 49,139,239,235,239,242,229,225,110,128,
+     49,138,249, 97,  2,215,  9,215, 19,226,229,238,231,225,236,105,
+    128,  9,223,228,229,246, 97,128,  9, 95,122,142,  0,122,215, 58,
+    216, 66,216, 77,216,120,216,147,217,182,218, 34,218, 76,218, 88,
+    218,100,218,128,218,136,218,152,218,161, 97, 10,215, 80,215, 91,
+    215, 98,215,105,215,116,215,194,215,224,215,235,216, 15,216, 27,
+    225,242,237,229,238,233,225,110,128,  5,102,227,245,244,101,128,
+      1,122,228,229,246, 97,128,  9, 91,231,245,242,237,245,235,232,
+    105,128, 10, 91,104,  4,215,126,215,135,215,149,215,179,225,242,
+    225,226,233, 99,128,  6, 56,230,233,238,225,236,225,242,225,226,
+    233, 99,128,254,198,105,  2,215,155,215,170,238,233,244,233,225,
+    236,225,242,225,226,233, 99,128,254,199,242,225,231,225,238, 97,
+    128, 48, 86,237,229,228,233,225,236,225,242,225,226,233, 99,128,
+    254,200,233,110,  2,215,201,215,210,225,242,225,226,233, 99,128,
+      6, 50,230,233,238,225,236,225,242,225,226,233, 99,128,254,176,
+    235,225,244,225,235,225,238, 97,128, 48,182,241,229,102,  2,215,
+    243,216,  1,231,225,228,239,236,232,229,226,242,229,119,128,  5,
+    149,241,225,244,225,238,232,229,226,242,229,119,128,  5,148,242,
+    241,225,232,229,226,242,229,119,128,  5,152,249,233,110,130,  5,
+    214,216, 37,216, 57,228,225,231,229,243,104,129,251, 54,216, 48,
+    232,229,226,242,229,119,128,251, 54,232,229,226,242,229,119,128,
+      5,214,226,239,240,239,237,239,230,111,128, 49, 23, 99,  3,216,
+     85,216, 92,216,114,225,242,239,110,128,  1,126,233,242, 99,  2,
+    216,100,216,105,236,101,128, 36,233,245,237,230,236,229,120,128,
+     30,145,245,242,108,128,  2,145,228,239,116,130,  1,124,216,130,
+    216,139,225,227,227,229,238,116,128,  1,124,226,229,236,239,119,
+    128, 30,147,101,  6,216,161,216,172,216,215,216,226,216,237,217,
+    177,227,249,242,233,236,236,233, 99,128,  4, 55,100,  2,216,178,
+    216,197,229,243,227,229,238,228,229,242,227,249,242,233,236,236,
+    233, 99,128,  4,153,233,229,242,229,243,233,243,227,249,242,233,
+    236,236,233, 99,128,  4,223,232,233,242,225,231,225,238, 97,128,
+     48, 92,235,225,244,225,235,225,238, 97,128, 48,188,242,111,140,
+      0, 48,217, 10,217, 19,217, 29,217, 36,217, 61,217, 74,217, 85,
+    217, 97,217,108,217,118,217,129,217,136,225,242,225,226,233, 99,
+    128,  6, 96,226,229,238,231,225,236,105,128,  9,230,228,229,246,
+     97,128,  9,102,231,117,  2,217, 43,217, 52,234,225,242,225,244,
+    105,128, 10,230,242,237,245,235,232,105,128, 10,102,232,225,227,
+    235,225,242,225,226,233, 99,128,  6, 96,233,238,230,229,242,233,
+    239,114,128, 32,128,237,239,238,239,243,240,225,227,101,128,255,
+     16,239,236,228,243,244,249,236,101,128,247, 48,240,229,242,243,
+    233,225,110,128,  6,240,243,245,240,229,242,233,239,114,128, 32,
+    112,244,232,225,105,128, 14, 80,247,233,228,244,104,  3,217,148,
+    217,157,217,169,234,239,233,238,229,114,128,254,255,238,239,238,
+    234,239,233,238,229,114,128, 32, 12,243,240,225,227,101,128, 32,
+     11,244, 97,128,  3,182,104,  2,217,188,217,199,226,239,240,239,
+    237,239,230,111,128, 49, 19,101,  4,217,209,217,220,217,236,217,
+    247,225,242,237,229,238,233,225,110,128,  5,106,226,242,229,246,
+    229,227,249,242,233,236,236,233, 99,128,  4,194,227,249,242,233,
+    236,236,233, 99,128,  4, 54,100,  2,217,253,218, 16,229,243,227,
+    229,238,228,229,242,227,249,242,233,236,236,233, 99,128,  4,151,
     233,229,242,229,243,233,243,227,249,242,233,236,236,233, 99,128,
-      4,235,229,238,231,225,236,105,128,  9,147,239,240,239,237,239,
-    230,111,128, 49, 27,242,229,246,101,128,  1, 79, 99,  3,139,100,
-    139,173,139,252, 97,  2,139,106,139,167,238,228,242, 97,  3,139,
-    117,139,124,139,135,228,229,246, 97,128,  9, 17,231,245,234,225,
-    242,225,244,105,128, 10,145,246,239,247,229,236,243,233,231,110,
-      2,139,149,139,156,228,229,246, 97,128,  9, 73,231,245,234,225,
-    242,225,244,105,128, 10,201,242,239,110,128,  1,210,233,242, 99,
-      2,139,181,139,186,236,101,128, 36,222,245,237,230,236,229,120,
-    133,  0,244,139,205,139,213,139,224,139,232,139,244,225,227,245,
-    244,101,128, 30,209,228,239,244,226,229,236,239,119,128, 30,217,
-    231,242,225,246,101,128, 30,211,232,239,239,235,225,226,239,246,
-    101,128, 30,213,244,233,236,228,101,128, 30,215,249,242,233,236,
-    236,233, 99,128,  4, 62,100,  4,140, 16,140, 39,140, 45,140, 68,
-    226,108,  2,140, 23,140, 31,225,227,245,244,101,128,  1, 81,231,
-    242,225,246,101,128,  2, 13,229,246, 97,128,  9, 19,233,229,242,
-    229,243,233,115,129,  0,246,140, 57,227,249,242,233,236,236,233,
-     99,128,  4,231,239,244,226,229,236,239,119,128, 30,205,101,129,
-      1, 83,140, 84,235,239,242,229,225,110,128, 49, 90,103,  3,140,
-    101,140,116,140,123,239,238,229,107,129,  2,219,140,110,227,237,
-     98,128,  3, 40,242,225,246,101,128,  0,242,245,234,225,242,225,
-    244,105,128, 10,147,104,  4,140,143,140,154,140,164,140,242,225,
-    242,237,229,238,233,225,110,128,  5,133,233,242,225,231,225,238,
-     97,128, 48, 74,111,  2,140,170,140,180,239,235,225,226,239,246,
-    101,128, 30,207,242,110,133,  1,161,140,195,140,203,140,214,140,
-    222,140,234,225,227,245,244,101,128, 30,219,228,239,244,226,229,
-    236,239,119,128, 30,227,231,242,225,246,101,128, 30,221,232,239,
-    239,235,225,226,239,246,101,128, 30,223,244,233,236,228,101,128,
-     30,225,245,238,231,225,242,245,237,236,225,245,116,128,  1, 81,
-    105,129,  1,163,141,  6,238,246,229,242,244,229,228,226,242,229,
-    246,101,128,  2, 15,107,  2,141, 27,141, 51,225,244,225,235,225,
-    238, 97,129, 48,170,141, 39,232,225,236,230,247,233,228,244,104,
-    128,255,117,239,242,229,225,110,128, 49, 87,236,229,232,229,226,
-    242,229,119,128,  5,171,109,  6,141, 84,141,112,141,119,141,208,
-    141,219,141,237,225,227,242,239,110,130,  1, 77,141, 96,141,104,
-    225,227,245,244,101,128, 30, 83,231,242,225,246,101,128, 30, 81,
-    228,229,246, 97,128,  9, 80,229,231, 97,133,  3,201,141,135,141,
-    139,141,150,141,164,141,180, 49,128,  3,214,227,249,242,233,236,
-    236,233, 99,128,  4, 97,236,225,244,233,238,227,236,239,243,229,
-    100,128,  2,119,242,239,245,238,228,227,249,242,233,236,236,233,
-     99,128,  4,123,116,  2,141,186,141,201,233,244,236,239,227,249,
-    242,233,236,236,233, 99,128,  4,125,239,238,239,115,128,  3,206,
-    231,245,234,225,242,225,244,105,128, 10,208,233,227,242,239,110,
-    129,  3,191,141,229,244,239,238,239,115,128,  3,204,239,238,239,
-    243,240,225,227,101,128,255, 79,238,101,145,  0, 49,142, 31,142,
-     40,142, 50,142, 80,142,105,142,114,142,123,142,148,142,182,142,
-    216,142,228,142,247,143,  2,143, 35,143, 45,143, 53,143, 64,225,
-    242,225,226,233, 99,128,  6, 97,226,229,238,231,225,236,105,128,
-      9,231,227,233,242,227,236,101,129, 36, 96,142, 61,233,238,246,
-    229,242,243,229,243,225,238,243,243,229,242,233,102,128, 39,138,
-    100,  2,142, 86,142, 92,229,246, 97,128,  9,103,239,244,229,238,
-    236,229,225,228,229,114,128, 32, 36,229,233,231,232,244,104,128,
-     33, 91,230,233,244,244,229,100,128,246,220,231,117,  2,142,130,
-    142,139,234,225,242,225,244,105,128, 10,231,242,237,245,235,232,
-    105,128, 10,103,232, 97,  3,142,157,142,168,142,173,227,235,225,
-    242,225,226,233, 99,128,  6, 97,236,102,128,  0,189,238,231,250,
-    232,239,117,128, 48, 33,105,  2,142,188,142,206,228,229,239,231,
-    242,225,240,232,233,227,240,225,242,229,110,128, 50, 32,238,230,
-    229,242,233,239,114,128, 32,129,237,239,238,239,243,240,225,227,
-    101,128,255, 17,238,245,237,229,242,225,244,239,242,226,229,238,
-    231,225,236,105,128,  9,244,239,236,228,243,244,249,236,101,128,
-    247, 49,112,  2,143,  8,143, 15,225,242,229,110,128, 36,116,229,
-    114,  2,143, 22,143, 28,233,239,100,128, 36,136,243,233,225,110,
-    128,  6,241,241,245,225,242,244,229,114,128,  0,188,242,239,237,
-    225,110,128, 33,112,243,245,240,229,242,233,239,114,128,  0,185,
-    244,104,  2,143, 71,143, 76,225,105,128, 14, 81,233,242,100,128,
-     33, 83,111,  3,143, 90,143,124,143,140,103,  2,143, 96,143,114,
-    239,238,229,107,129,  1,235,143,105,237,225,227,242,239,110,128,
-      1,237,245,242,237,245,235,232,105,128, 10, 19,237,225,244,242,
-    225,231,245,242,237,245,235,232,105,128, 10, 75,240,229,110,128,
-      2, 84,112,  3,143,154,143,161,143,172,225,242,229,110,128, 36,
-    170,229,238,226,245,236,236,229,116,128, 37,230,244,233,239,110,
-    128, 35, 37,114,  2,143,185,143,214,100,  2,143,191,143,202,230,
-    229,237,233,238,233,238,101,128,  0,170,237,225,243,227,245,236,
-    233,238,101,128,  0,186,244,232,239,231,239,238,225,108,128, 34,
-     31,115,  5,143,237,144, 13,144, 30,144, 75,144, 88,232,239,242,
-    116,  2,143,246,143,253,228,229,246, 97,128,  9, 18,246,239,247,
-    229,236,243,233,231,238,228,229,246, 97,128,  9, 74,236,225,243,
-    104,129,  0,248,144, 22,225,227,245,244,101,128,  1,255,237,225,
-    236,108,  2,144, 39,144, 50,232,233,242,225,231,225,238, 97,128,
-     48, 73,235,225,244,225,235,225,238, 97,129, 48,169,144, 63,232,
-    225,236,230,247,233,228,244,104,128,255,107,244,242,239,235,229,
-    225,227,245,244,101,128,  1,255,245,240,229,242,233,239,114,128,
-    246,240,116,  2,144,104,144,115,227,249,242,233,236,236,233, 99,
-    128,  4,127,233,236,228,101,130,  0,245,144,126,144,134,225,227,
-    245,244,101,128, 30, 77,228,233,229,242,229,243,233,115,128, 30,
-     79,245,226,239,240,239,237,239,230,111,128, 49, 33,118,  2,144,
-    163,144,244,229,114,  2,144,170,144,236,236,233,238,101,131, 32,
-     62,144,183,144,206,144,229, 99,  2,144,189,144,201,229,238,244,
-    229,242,236,233,238,101,128,254, 74,237, 98,128,  3,  5,100,  2,
-    144,212,144,220,225,243,232,229,100,128,254, 73,226,236,247,225,
-    246,121,128,254, 76,247,225,246,121,128,254, 75,243,227,239,242,
-    101,128,  0,175,239,247,229,236,243,233,231,110,  3,145,  3,145,
-     13,145, 20,226,229,238,231,225,236,105,128,  9,203,228,229,246,
-     97,128,  9, 75,231,245,234,225,242,225,244,105,128, 10,203,112,
-    145,  0,112,145, 69,147,197,147,208,147,217,147,229,149,154,149,
-    164,150,156,151,175,152,  9,152, 35,152,166,152,174,153, 76,153,
-    134,153,162,153,172, 97, 14,145, 99,145,131,145,141,145,148,145,
-    155,145,203,145,214,145,228,145,239,146, 30,146, 44,147, 56,147,
-     95,147,185, 97,  2,145,105,145,117,237,240,243,243,241,245,225,
-    242,101,128, 51,128,243,229,238,244,239,243,241,245,225,242,101,
-    128, 51, 43,226,229,238,231,225,236,105,128,  9,170,227,245,244,
-    101,128, 30, 85,228,229,246, 97,128,  9, 42,103,  2,145,161,145,
-    179,101,  2,145,167,145,174,228,239,247,110,128, 33,223,245,112,
-    128, 33,222,117,  2,145,185,145,194,234,225,242,225,244,105,128,
-     10,170,242,237,245,235,232,105,128, 10, 42,232,233,242,225,231,
-    225,238, 97,128, 48,113,233,249,225,238,238,239,233,244,232,225,
-    105,128, 14, 47,235,225,244,225,235,225,238, 97,128, 48,209,108,
-      2,145,245,146, 14,225,244,225,236,233,250,225,244,233,239,238,
-    227,249,242,233,236,236,233,227,227,237, 98,128,  4,132,239,227,
-    232,235,225,227,249,242,233,236,236,233, 99,128,  4,192,238,243,
-    233,239,243,235,239,242,229,225,110,128, 49,127,114,  3,146, 52,
-    146, 73,147, 45, 97,  2,146, 58,146, 66,231,242,225,240,104,128,
-      0,182,236,236,229,108,128, 34, 37,229,110,  2,146, 80,146,190,
-    236,229,230,116,136,  0, 40,146,103,146,118,146,123,146,128,146,
-    139,146,151,146,174,146,179,225,236,244,239,238,229,225,242,225,
-    226,233, 99,128,253, 62,226,116,128,248,237,229,120,128,248,236,
-    233,238,230,229,242,233,239,114,128, 32,141,237,239,238,239,243,
-    240,225,227,101,128,255,  8,115,  2,146,157,146,164,237,225,236,
-    108,128,254, 89,245,240,229,242,233,239,114,128, 32,125,244,112,
-    128,248,235,246,229,242,244,233,227,225,108,128,254, 53,242,233,
-    231,232,116,136,  0, 41,146,214,146,229,146,234,146,239,146,250,
-    147,  6,147, 29,147, 34,225,236,244,239,238,229,225,242,225,226,
-    233, 99,128,253, 63,226,116,128,248,248,229,120,128,248,247,233,
-    238,230,229,242,233,239,114,128, 32,142,237,239,238,239,243,240,
-    225,227,101,128,255,  9,115,  2,147, 12,147, 19,237,225,236,108,
-    128,254, 90,245,240,229,242,233,239,114,128, 32,126,244,112,128,
-    248,246,246,229,242,244,233,227,225,108,128,254, 54,244,233,225,
-    236,228,233,230,102,128, 34,  2,115,  3,147, 64,147, 75,147, 87,
-    229,241,232,229,226,242,229,119,128,  5,192,232,244,225,232,229,
-    226,242,229,119,128,  5,153,241,245,225,242,101,128, 51,169,244,
-    225,104,134,  5,183,147,113,147,127,147,132,147,141,147,156,147,
-    172, 49,  2,147,119,147,123, 49,128,  5,183,100,128,  5,183,178,
-     97,128,  5,183,232,229,226,242,229,119,128,  5,183,238,225,242,
-    242,239,247,232,229,226,242,229,119,128,  5,183,241,245,225,242,
-    244,229,242,232,229,226,242,229,119,128,  5,183,247,233,228,229,
-    232,229,226,242,229,119,128,  5,183,250,229,242,232,229,226,242,
-    229,119,128,  5,161,226,239,240,239,237,239,230,111,128, 49,  6,
-    227,233,242,227,236,101,128, 36,223,228,239,244,225,227,227,229,
-    238,116,128, 30, 87,101,137,  5,228,147,251,148,  6,148, 26,148,
-     38,148, 58,148,160,148,171,148,192,149,147,227,249,242,233,236,
-    236,233, 99,128,  4, 63,228,225,231,229,243,104,129,251, 68,148,
-     17,232,229,226,242,229,119,128,251, 68,229,250,233,243,241,245,
-    225,242,101,128, 51, 59,230,233,238,225,236,228,225,231,229,243,
-    232,232,229,226,242,229,119,128,251, 67,104,  5,148, 70,148, 93,
-    148,101,148,115,148,145,225,114,  2,148, 77,148, 84,225,226,233,
-     99,128,  6,126,237,229,238,233,225,110,128,  5,122,229,226,242,
-    229,119,128,  5,228,230,233,238,225,236,225,242,225,226,233, 99,
-    128,251, 87,105,  2,148,121,148,136,238,233,244,233,225,236,225,
-    242,225,226,233, 99,128,251, 88,242,225,231,225,238, 97,128, 48,
-    122,237,229,228,233,225,236,225,242,225,226,233, 99,128,251, 89,
-    235,225,244,225,235,225,238, 97,128, 48,218,237,233,228,228,236,
-    229,232,239,239,235,227,249,242,233,236,236,233, 99,128,  4,167,
-    114,  5,148,204,148,216,149,  2,149,123,149,136,225,230,229,232,
-    229,226,242,229,119,128,251, 78,227,229,238,116,131,  0, 37,148,
-    229,148,238,148,250,225,242,225,226,233, 99,128,  6,106,237,239,
-    238,239,243,240,225,227,101,128,255,  5,243,237,225,236,108,128,
-    254,106,105,  2,149,  8,149,105,239,100,134,  0, 46,149, 25,149,
-     36,149, 47,149, 59,149, 70,149, 82,225,242,237,229,238,233,225,
-    110,128,  5,137,227,229,238,244,229,242,229,100,128,  0,183,232,
-    225,236,230,247,233,228,244,104,128,255, 97,233,238,230,229,242,
-    233,239,114,128,246,231,237,239,238,239,243,240,225,227,101,128,
-    255, 14,115,  2,149, 88,149, 95,237,225,236,108,128,254, 82,245,
-    240,229,242,233,239,114,128,246,232,243,240,239,237,229,238,233,
-    231,242,229,229,235,227,237, 98,128,  3, 66,240,229,238,228,233,
-    227,245,236,225,114,128, 34,165,244,232,239,245,243,225,238,100,
-    128, 32, 48,243,229,244, 97,128, 32,167,230,243,241,245,225,242,
-    101,128, 51,138,104,  3,149,172,149,222,150,103, 97,  3,149,180,
-    149,190,149,197,226,229,238,231,225,236,105,128,  9,171,228,229,
-    246, 97,128,  9, 43,231,117,  2,149,204,149,213,234,225,242,225,
-    244,105,128, 10,171,242,237,245,235,232,105,128, 10, 43,105,133,
-      3,198,149,236,149,240,150, 70,150, 78,150, 89, 49,128,  3,213,
-    229,245,240,104,  4,149,253,150, 32,150, 47,150, 56, 97,  2,150,
-      3,150, 18,227,233,242,227,236,229,235,239,242,229,225,110,128,
-     50,122,240,225,242,229,238,235,239,242,229,225,110,128, 50, 26,
-    227,233,242,227,236,229,235,239,242,229,225,110,128, 50,108,235,
-    239,242,229,225,110,128, 49, 77,240,225,242,229,238,235,239,242,
-    229,225,110,128, 50, 12,236,225,244,233,110,128,  2,120,238,244,
-    232,245,244,232,225,105,128, 14, 58,243,249,237,226,239,236,231,
-    242,229,229,107,128,  3,213,111,  3,150,111,150,116,150,142,239,
-    107,128,  1,165,240,104,  2,150,123,150,132,225,238,244,232,225,
-    105,128, 14, 30,245,238,231,244,232,225,105,128, 14, 28,243,225,
-    237,240,232,225,239,244,232,225,105,128, 14, 32,105,133,  3,192,
-    150,170,151,126,151,137,151,148,151,162,229,245,112,  6,150,186,
-    150,221,150,253,151, 25,151, 39,151, 91, 97,  2,150,192,150,207,
-    227,233,242,227,236,229,235,239,242,229,225,110,128, 50,115,240,
-    225,242,229,238,235,239,242,229,225,110,128, 50, 19,227,105,  2,
-    150,228,150,240,229,245,227,235,239,242,229,225,110,128, 49,118,
-    242,227,236,229,235,239,242,229,225,110,128, 50,101,107,  2,151,
-      3,151, 17,233,249,229,239,235,235,239,242,229,225,110,128, 49,
-    114,239,242,229,225,110,128, 49, 66,240,225,242,229,238,235,239,
-    242,229,225,110,128, 50,  5,243,233,239,115,  2,151, 48,151, 76,
-    107,  2,151, 54,151, 68,233,249,229,239,235,235,239,242,229,225,
-    110,128, 49,116,239,242,229,225,110,128, 49, 68,244,233,235,229,
-    245,244,235,239,242,229,225,110,128, 49,117,116,  2,151, 97,151,
-    112,232,233,229,245,244,232,235,239,242,229,225,110,128, 49,119,
-    233,235,229,245,244,235,239,242,229,225,110,128, 49,115,232,233,
-    242,225,231,225,238, 97,128, 48,116,235,225,244,225,235,225,238,
-     97,128, 48,212,243,249,237,226,239,236,231,242,229,229,107,128,
-      3,214,247,242,225,242,237,229,238,233,225,110,128,  5,131,236,
-    245,115,132,  0, 43,151,189,151,200,151,209,151,242,226,229,236,
-    239,247,227,237, 98,128,  3, 31,227,233,242,227,236,101,128, 34,
-    149,109,  2,151,215,151,222,233,238,245,115,128,  0,177,111,  2,
-    151,228,151,232,100,128,  2,214,238,239,243,240,225,227,101,128,
-    255, 11,115,  2,151,248,151,255,237,225,236,108,128,254, 98,245,
-    240,229,242,233,239,114,128, 32,122,109,  2,152, 15,152, 26,239,
-    238,239,243,240,225,227,101,128,255, 80,243,241,245,225,242,101,
-    128, 51,216,111,  5,152, 47,152, 58,152,125,152,136,152,146,232,
-    233,242,225,231,225,238, 97,128, 48,125,233,238,244,233,238,231,
-    233,238,228,229,120,  4,152, 78,152, 90,152,102,152,115,228,239,
-    247,238,247,232,233,244,101,128, 38, 31,236,229,230,244,247,232,
-    233,244,101,128, 38, 28,242,233,231,232,244,247,232,233,244,101,
-    128, 38, 30,245,240,247,232,233,244,101,128, 38, 29,235,225,244,
-    225,235,225,238, 97,128, 48,221,240,236,225,244,232,225,105,128,
-     14, 27,243,244,225,236,237,225,242,107,129, 48, 18,152,159,230,
-    225,227,101,128, 48, 32,240,225,242,229,110,128, 36,171,114,  3,
-    152,182,152,208,152,233,101,  2,152,188,152,196,227,229,228,229,
-    115,128, 34,122,243,227,242,233,240,244,233,239,110,128, 33, 30,
-    233,237,101,  2,152,216,152,222,237,239,100,128,  2,185,242,229,
-    246,229,242,243,229,100,128, 32, 53,111,  4,152,243,152,250,153,
-      4,153, 17,228,245,227,116,128, 34, 15,234,229,227,244,233,246,
-    101,128, 35,  5,236,239,238,231,229,228,235,225,238, 97,128, 48,
-    252,112,  2,153, 23,153, 60,101,  2,153, 29,153, 36,236,236,239,
-    114,128, 35, 24,242,243,117,  2,153, 44,153, 51,226,243,229,116,
-    128, 34,130,240,229,242,243,229,116,128, 34,131,239,242,244,233,
-    239,110,129, 34, 55,153, 71,225,108,128, 34, 29,115,  2,153, 82,
-    153,125,105,130,  3,200,153, 90,153,101,227,249,242,233,236,236,
-    233, 99,128,  4,113,236,233,240,238,229,245,237,225,244,225,227,
-    249,242,233,236,236,233,227,227,237, 98,128,  4,134,243,241,245,
-    225,242,101,128, 51,176,117,  2,153,140,153,151,232,233,242,225,
-    231,225,238, 97,128, 48,119,235,225,244,225,235,225,238, 97,128,
-     48,215,246,243,241,245,225,242,101,128, 51,180,247,243,241,245,
-    225,242,101,128, 51,186,113,136,  0,113,153,202,154,251,155,  6,
-    155, 15,155, 22,155, 34,155, 72,155, 80, 97,  4,153,212,153,235,
-    154, 43,154,234,100,  2,153,218,153,224,229,246, 97,128,  9, 88,
-    237,225,232,229,226,242,229,119,128,  5,168,102,  4,153,245,153,
-    254,154, 12,154, 28,225,242,225,226,233, 99,128,  6, 66,230,233,
-    238,225,236,225,242,225,226,233, 99,128,254,214,233,238,233,244,
-    233,225,236,225,242,225,226,233, 99,128,254,215,237,229,228,233,
-    225,236,225,242,225,226,233, 99,128,254,216,237,225,244,115,136,
-      5,184,154, 66,154, 86,154,100,154,105,154,110,154,119,154,134,
-    154,221, 49,  3,154, 74,154, 78,154, 82, 48,128,  5,184, 97,128,
-      5,184, 99,128,  5,184, 50,  2,154, 92,154, 96, 55,128,  5,184,
-     57,128,  5,184,179, 51,128,  5,184,228,101,128,  5,184,232,229,
-    226,242,229,119,128,  5,184,238,225,242,242,239,247,232,229,226,
-    242,229,119,128,  5,184,113,  2,154,140,154,206,225,244,225,110,
-      4,154,153,154,162,154,177,154,193,232,229,226,242,229,119,128,
-      5,184,238,225,242,242,239,247,232,229,226,242,229,119,128,  5,
-    184,241,245,225,242,244,229,242,232,229,226,242,229,119,128,  5,
-    184,247,233,228,229,232,229,226,242,229,119,128,  5,184,245,225,
-    242,244,229,242,232,229,226,242,229,119,128,  5,184,247,233,228,
-    229,232,229,226,242,229,119,128,  5,184,242,238,229,249,240,225,
-    242,225,232,229,226,242,229,119,128,  5,159,226,239,240,239,237,
-    239,230,111,128, 49, 17,227,233,242,227,236,101,128, 36,224,232,
-    239,239,107,128,  2,160,237,239,238,239,243,240,225,227,101,128,
-    255, 81,239,102,130,  5,231,155, 43,155, 63,228,225,231,229,243,
-    104,129,251, 71,155, 54,232,229,226,242,229,119,128,251, 71,232,
-    229,226,242,229,119,128,  5,231,240,225,242,229,110,128, 36,172,
-    117,  4,155, 90,155,102,155,191,156, 22,225,242,244,229,242,238,
-    239,244,101,128, 38,105,226,245,244,115,135,  5,187,155,123,155,
-    128,155,133,155,138,155,147,155,162,155,178,177, 56,128,  5,187,
-    178, 53,128,  5,187,179, 49,128,  5,187,232,229,226,242,229,119,
-    128,  5,187,238,225,242,242,239,247,232,229,226,242,229,119,128,
-      5,187,241,245,225,242,244,229,242,232,229,226,242,229,119,128,
-      5,187,247,233,228,229,232,229,226,242,229,119,128,  5,187,229,
-    243,244,233,239,110,133,  0, 63,155,210,155,233,155,250,156,  2,
-    156, 14,225,114,  2,155,217,155,224,225,226,233, 99,128,  6, 31,
-    237,229,238,233,225,110,128,  5, 94,228,239,247,110,129,  0,191,
-    155,242,243,237,225,236,108,128,247,191,231,242,229,229,107,128,
-      3,126,237,239,238,239,243,240,225,227,101,128,255, 31,243,237,
-    225,236,108,128,247, 63,239,244,101,  4,156, 34,156,105,156,125,
-    156,154,228,226,108,133,  0, 34,156, 50,156, 57,156, 64,156, 76,
-    156, 97,226,225,243,101,128, 32, 30,236,229,230,116,128, 32, 28,
-    237,239,238,239,243,240,225,227,101,128,255,  2,240,242,233,237,
-    101,129, 48, 30,156, 86,242,229,246,229,242,243,229,100,128, 48,
-     29,242,233,231,232,116,128, 32, 29,236,229,230,116,129, 32, 24,
-    156,114,242,229,246,229,242,243,229,100,128, 32, 27,114,  2,156,
-    131,156,141,229,246,229,242,243,229,100,128, 32, 27,233,231,232,
-    116,129, 32, 25,156,150,110,128,  1, 73,243,233,238,231,108,  2,
-    156,164,156,171,226,225,243,101,128, 32, 26,101,129,  0, 39,156,
-    177,237,239,238,239,243,240,225,227,101,128,255,  7,114,145,  0,
-    114,156,227,157,231,157,242,158, 33,158, 84,159,101,159,125,159,
-    220,161,254,162, 35,162, 47,162,101,162,109,163, 15,163, 26,163,
-     61,163,161, 97, 11,156,251,157,  6,157, 16,157, 23,157, 88,157,
-    104,157,129,157,140,157,165,157,188,157,225,225,242,237,229,238,
-    233,225,110,128,  5,124,226,229,238,231,225,236,105,128,  9,176,
-    227,245,244,101,128,  1, 85,100,  4,157, 33,157, 39,157, 53,157,
-     79,229,246, 97,128,  9, 48,233,227,225,108,129, 34, 26,157, 48,
-    229,120,128,248,229,239,246,229,242,243,243,241,245,225,242,101,
-    129, 51,174,157, 69,228,243,241,245,225,242,101,128, 51,175,243,
-    241,245,225,242,101,128, 51,173,230,101,129,  5,191,157, 95,232,
-    229,226,242,229,119,128,  5,191,231,117,  2,157,111,157,120,234,
-    225,242,225,244,105,128, 10,176,242,237,245,235,232,105,128, 10,
-     48,232,233,242,225,231,225,238, 97,128, 48,137,235,225,244,225,
-    235,225,238, 97,129, 48,233,157,153,232,225,236,230,247,233,228,
-    244,104,128,255,151,236,239,247,229,242,228,233,225,231,239,238,
-    225,236,226,229,238,231,225,236,105,128,  9,241,109,  2,157,194,
-    157,217,233,228,228,236,229,228,233,225,231,239,238,225,236,226,
-    229,238,231,225,236,105,128,  9,240,243,232,239,242,110,128,  2,
-    100,244,233,111,128, 34, 54,226,239,240,239,237,239,230,111,128,
-     49, 22, 99,  4,157,252,158,  3,158, 12,158, 20,225,242,239,110,
-    128,  1, 89,229,228,233,236,236, 97,128,  1, 87,233,242,227,236,
-    101,128, 36,225,239,237,237,225,225,227,227,229,238,116,128,  1,
-     87,100,  2,158, 39,158, 49,226,236,231,242,225,246,101,128,  2,
-     17,239,116,  2,158, 56,158, 65,225,227,227,229,238,116,128, 30,
-     89,226,229,236,239,119,129, 30, 91,158, 75,237,225,227,242,239,
-    110,128, 30, 93,101,  6,158, 98,158,143,158,178,158,233,159,  2,
-    159, 35,102,  2,158,104,158,117,229,242,229,238,227,229,237,225,
-    242,107,128, 32, 59,236,229,248,243,117,  2,158,127,158,134,226,
-    243,229,116,128, 34,134,240,229,242,243,229,116,128, 34,135,231,
-    233,243,244,229,114,  2,158,154,158,159,229,100,128,  0,174,115,
-      2,158,165,158,171,225,238,115,128,248,232,229,242,233,102,128,
-    246,218,104,  3,158,186,158,209,158,223,225,114,  2,158,193,158,
-    200,225,226,233, 99,128,  6, 49,237,229,238,233,225,110,128,  5,
-    128,230,233,238,225,236,225,242,225,226,233, 99,128,254,174,233,
-    242,225,231,225,238, 97,128, 48,140,235,225,244,225,235,225,238,
-     97,129, 48,236,158,246,232,225,236,230,247,233,228,244,104,128,
-    255,154,243,104,130,  5,232,159, 11,159, 26,228,225,231,229,243,
-    232,232,229,226,242,229,119,128,251, 72,232,229,226,242,229,119,
-    128,  5,232,118,  3,159, 43,159, 56,159, 88,229,242,243,229,228,
-    244,233,236,228,101,128, 34, 61,233, 97,  2,159, 63,159, 72,232,
-    229,226,242,229,119,128,  5,151,237,245,231,242,225,243,232,232,
-    229,226,242,229,119,128,  5,151,236,239,231,233,227,225,236,238,
-    239,116,128, 35, 16,230,233,243,232,232,239,239,107,129,  2,126,
-    159,114,242,229,246,229,242,243,229,100,128,  2,127,104,  2,159,
-    131,159,154, 97,  2,159,137,159,147,226,229,238,231,225,236,105,
-    128,  9,221,228,229,246, 97,128,  9, 93,111,131,  3,193,159,164,
-    159,193,159,207,239,107,129,  2,125,159,171,244,245,242,238,229,
-    100,129,  2,123,159,182,243,245,240,229,242,233,239,114,128,  2,
-    181,243,249,237,226,239,236,231,242,229,229,107,128,  3,241,244,
-    233,227,232,239,239,235,237,239,100,128,  2,222,105,  6,159,234,
-    161, 22,161, 68,161, 79,161,104,161,240,229,245,108,  9,160,  0,
-    160, 35,160, 50,160, 64,160,110,160,124,160,210,160,223,161,  2,
-     97,  2,160,  6,160, 21,227,233,242,227,236,229,235,239,242,229,
-    225,110,128, 50,113,240,225,242,229,238,235,239,242,229,225,110,
-    128, 50, 17,227,233,242,227,236,229,235,239,242,229,225,110,128,
-     50, 99,232,233,229,245,232,235,239,242,229,225,110,128, 49, 64,
-    107,  2,160, 70,160,102,233,249,229,239,107,  2,160, 80,160, 89,
-    235,239,242,229,225,110,128, 49, 58,243,233,239,243,235,239,242,
-    229,225,110,128, 49,105,239,242,229,225,110,128, 49, 57,237,233,
-    229,245,237,235,239,242,229,225,110,128, 49, 59,112,  3,160,132,
-    160,164,160,179, 97,  2,160,138,160,152,238,243,233,239,243,235,
-    239,242,229,225,110,128, 49,108,242,229,238,235,239,242,229,225,
-    110,128, 50,  3,232,233,229,245,240,232,235,239,242,229,225,110,
-    128, 49, 63,233,229,245,112,  2,160,188,160,197,235,239,242,229,
-    225,110,128, 49, 60,243,233,239,243,235,239,242,229,225,110,128,
-     49,107,243,233,239,243,235,239,242,229,225,110,128, 49, 61,116,
-      2,160,229,160,244,232,233,229,245,244,232,235,239,242,229,225,
-    110,128, 49, 62,233,235,229,245,244,235,239,242,229,225,110,128,
-     49,106,249,229,239,242,233,238,232,233,229,245,232,235,239,242,
-    229,225,110,128, 49,109,231,232,116,  2,161, 30,161, 38,225,238,
-    231,236,101,128, 34, 31,116,  2,161, 44,161, 58,225,227,235,226,
-    229,236,239,247,227,237, 98,128,  3, 25,242,233,225,238,231,236,
-    101,128, 34,191,232,233,242,225,231,225,238, 97,128, 48,138,235,
-    225,244,225,235,225,238, 97,129, 48,234,161, 92,232,225,236,230,
-    247,233,228,244,104,128,255,152,110,  2,161,110,161,226,103,131,
-      2,218,161,120,161,131,161,137,226,229,236,239,247,227,237, 98,
-    128,  3, 37,227,237, 98,128,  3, 10,232,225,236,102,  2,161,146,
-    161,192,236,229,230,116,131,  2,191,161,159,161,170,161,181,225,
-    242,237,229,238,233,225,110,128,  5, 89,226,229,236,239,247,227,
-    237, 98,128,  3, 28,227,229,238,244,229,242,229,100,128,  2,211,
-    242,233,231,232,116,130,  2,190,161,204,161,215,226,229,236,239,
-    247,227,237, 98,128,  3, 57,227,229,238,244,229,242,229,100,128,
-      2,210,246,229,242,244,229,228,226,242,229,246,101,128,  2, 19,
-    244,244,239,242,245,243,241,245,225,242,101,128, 51, 81,108,  2,
-    162,  4,162, 15,233,238,229,226,229,236,239,119,128, 30, 95,239,
-    238,231,236,229,103,129,  2,124,162, 26,244,245,242,238,229,100,
-    128,  2,122,237,239,238,239,243,240,225,227,101,128,255, 82,111,
-      3,162, 55,162, 66,162, 91,232,233,242,225,231,225,238, 97,128,
-     48,141,235,225,244,225,235,225,238, 97,129, 48,237,162, 79,232,
-    225,236,230,247,233,228,244,104,128,255,155,242,245,225,244,232,
-    225,105,128, 14, 35,240,225,242,229,110,128, 36,173,114,  3,162,
-    117,162,153,162,183, 97,  3,162,125,162,135,162,142,226,229,238,
-    231,225,236,105,128,  9,220,228,229,246, 97,128,  9, 49,231,245,
-    242,237,245,235,232,105,128, 10, 92,229,104,  2,162,160,162,169,
-    225,242,225,226,233, 99,128,  6,145,230,233,238,225,236,225,242,
-    225,226,233, 99,128,251,141,246,239,227,225,236,233, 99,  4,162,
-    199,162,209,162,216,162,227,226,229,238,231,225,236,105,128,  9,
-    224,228,229,246, 97,128,  9, 96,231,245,234,225,242,225,244,105,
-    128, 10,224,246,239,247,229,236,243,233,231,110,  3,162,243,162,
-    253,163,  4,226,229,238,231,225,236,105,128,  9,196,228,229,246,
-     97,128,  9, 68,231,245,234,225,242,225,244,105,128, 10,196,243,
-    245,240,229,242,233,239,114,128,246,241,116,  2,163, 32,163, 40,
-    226,236,239,227,107,128, 37,144,245,242,238,229,100,129,  2,121,
-    163, 50,243,245,240,229,242,233,239,114,128,  2,180,117,  4,163,
-     71,163, 82,163,107,163,154,232,233,242,225,231,225,238, 97,128,
-     48,139,235,225,244,225,235,225,238, 97,129, 48,235,163, 95,232,
-    225,236,230,247,233,228,244,104,128,255,153,112,  2,163,113,163,
-    148,229,101,  2,163,120,163,134,237,225,242,235,226,229,238,231,
-    225,236,105,128,  9,242,243,233,231,238,226,229,238,231,225,236,
-    105,128,  9,243,233,225,104,128,246,221,244,232,225,105,128, 14,
-     36,246,239,227,225,236,233, 99,  4,163,177,163,187,163,194,163,
-    205,226,229,238,231,225,236,105,128,  9,139,228,229,246, 97,128,
-      9, 11,231,245,234,225,242,225,244,105,128, 10,139,246,239,247,
-    229,236,243,233,231,110,  3,163,221,163,231,163,238,226,229,238,
-    231,225,236,105,128,  9,195,228,229,246, 97,128,  9, 67,231,245,
-    234,225,242,225,244,105,128, 10,195,115,147,  0,115,164, 35,166,
-      5,166, 16,166,142,166,181,169,123,169,134,172, 21,174,159,174,
-    205,174,232,175,167,175,234,177, 11,177, 21,177,207,178, 24,178,
-    194,178,204, 97,  9,164, 55,164, 65,164, 86,164,158,164,183,164,
-    194,164,219,164,251,165, 35,226,229,238,231,225,236,105,128,  9,
-    184,227,245,244,101,129,  1, 91,164, 74,228,239,244,225,227,227,
-    229,238,116,128, 30,101,100,  5,164, 98,164,107,164,113,164,127,
-    164,143,225,242,225,226,233, 99,128,  6, 53,229,246, 97,128,  9,
-     56,230,233,238,225,236,225,242,225,226,233, 99,128,254,186,233,
-    238,233,244,233,225,236,225,242,225,226,233, 99,128,254,187,237,
-    229,228,233,225,236,225,242,225,226,233, 99,128,254,188,231,117,
-      2,164,165,164,174,234,225,242,225,244,105,128, 10,184,242,237,
-    245,235,232,105,128, 10, 56,232,233,242,225,231,225,238, 97,128,
-     48, 85,235,225,244,225,235,225,238, 97,129, 48,181,164,207,232,
-    225,236,230,247,233,228,244,104,128,255,123,236,236,225,236,236,
-    225,232,239,245,225,236,225,249,232,229,247,225,243,225,236,236,
-    225,237,225,242,225,226,233, 99,128,253,250,237,229,235,104,130,
-      5,225,165,  6,165, 26,228,225,231,229,243,104,129,251, 65,165,
-     17,232,229,226,242,229,119,128,251, 65,232,229,226,242,229,119,
-    128,  5,225,242, 97,  5,165, 48,165,122,165,130,165,180,165,188,
-     97,  5,165, 60,165, 68,165, 76,165,107,165,115,225,244,232,225,
-    105,128, 14, 50,229,244,232,225,105,128, 14, 65,233,237,225,233,
-    109,  2,165, 86,165, 97,225,236,225,233,244,232,225,105,128, 14,
-     68,245,225,238,244,232,225,105,128, 14, 67,237,244,232,225,105,
-    128, 14, 51,244,232,225,105,128, 14, 48,229,244,232,225,105,128,
-     14, 64,105,  3,165,138,165,162,165,173,105,  2,165,144,165,155,
-    236,229,230,244,244,232,225,105,128,248,134,244,232,225,105,128,
-     14, 53,236,229,230,244,244,232,225,105,128,248,133,244,232,225,
-    105,128, 14, 52,239,244,232,225,105,128, 14, 66,117,  3,165,196,
-    165,246,165,253,101,  3,165,204,165,228,165,239,101,  2,165,210,
-    165,221,236,229,230,244,244,232,225,105,128,248,136,244,232,225,
-    105,128, 14, 55,236,229,230,244,244,232,225,105,128,248,135,244,
-    232,225,105,128, 14, 54,244,232,225,105,128, 14, 56,245,244,232,
-    225,105,128, 14, 57,226,239,240,239,237,239,230,111,128, 49, 25,
-     99,  5,166, 28,166, 49,166, 58,166,107,166,129,225,242,239,110,
-    129,  1, 97,166, 37,228,239,244,225,227,227,229,238,116,128, 30,
-    103,229,228,233,236,236, 97,128,  1, 95,232,247, 97,131,  2, 89,
-    166, 70,166, 81,166,100,227,249,242,233,236,236,233, 99,128,  4,
-    217,228,233,229,242,229,243,233,243,227,249,242,233,236,236,233,
-     99,128,  4,219,232,239,239,107,128,  2, 90,233,242, 99,  2,166,
-    115,166,120,236,101,128, 36,226,245,237,230,236,229,120,128,  1,
-     93,239,237,237,225,225,227,227,229,238,116,128,  2, 25,228,239,
-    116,  2,166,150,166,159,225,227,227,229,238,116,128, 30, 97,226,
-    229,236,239,119,129, 30, 99,166,169,228,239,244,225,227,227,229,
-    238,116,128, 30,105,101,  9,166,201,166,217,166,252,167, 61,167,
-    164,167,191,167,216,168, 41,168, 68,225,231,245,236,236,226,229,
-    236,239,247,227,237, 98,128,  3, 60, 99,  2,166,223,166,245,239,
-    238,100,129, 32, 51,166,231,244,239,238,229,227,232,233,238,229,
-    243,101,128,  2,202,244,233,239,110,128,  0,167,229,110,  4,167,
-      7,167, 16,167, 30,167, 46,225,242,225,226,233, 99,128,  6, 51,
-    230,233,238,225,236,225,242,225,226,233, 99,128,254,178,233,238,
-    233,244,233,225,236,225,242,225,226,233, 99,128,254,179,237,229,
-    228,233,225,236,225,242,225,226,233, 99,128,254,180,231,239,108,
-    135,  5,182,167, 81,167, 95,167,100,167,109,167,124,167,140,167,
-    151, 49,  2,167, 87,167, 91, 51,128,  5,182,102,128,  5,182,178,
-     99,128,  5,182,232,229,226,242,229,119,128,  5,182,238,225,242,
-    242,239,247,232,229,226,242,229,119,128,  5,182,241,245,225,242,
-    244,229,242,232,229,226,242,229,119,128,  5,182,244,225,232,229,
-    226,242,229,119,128,  5,146,247,233,228,229,232,229,226,242,229,
-    119,128,  5,182,104,  2,167,170,167,181,225,242,237,229,238,233,
-    225,110,128,  5,125,233,242,225,231,225,238, 97,128, 48, 91,235,
-    225,244,225,235,225,238, 97,129, 48,187,167,204,232,225,236,230,
-    247,233,228,244,104,128,255,126,237,105,  2,167,223,168, 10,227,
-    239,236,239,110,131,  0, 59,167,237,167,246,168,  2,225,242,225,
-    226,233, 99,128,  6, 27,237,239,238,239,243,240,225,227,101,128,
-    255, 27,243,237,225,236,108,128,254, 84,246,239,233,227,229,228,
-    237,225,242,235,235,225,238, 97,129, 48,156,168, 29,232,225,236,
-    230,247,233,228,244,104,128,255,159,238,116,  2,168, 48,168, 58,
-    233,243,241,245,225,242,101,128, 51, 34,239,243,241,245,225,242,
-    101,128, 51, 35,246,229,110,142,  0, 55,168,102,168,111,168,121,
-    168,151,168,158,168,168,168,193,168,220,168,254,169, 10,169, 21,
-    169, 54,169, 62,169, 73,225,242,225,226,233, 99,128,  6,103,226,
-    229,238,231,225,236,105,128,  9,237,227,233,242,227,236,101,129,
-     36,102,168,132,233,238,246,229,242,243,229,243,225,238,243,243,
-    229,242,233,102,128, 39,144,228,229,246, 97,128,  9,109,229,233,
-    231,232,244,232,115,128, 33, 94,231,117,  2,168,175,168,184,234,
-    225,242,225,244,105,128, 10,237,242,237,245,235,232,105,128, 10,
-    109,232, 97,  2,168,200,168,211,227,235,225,242,225,226,233, 99,
-    128,  6,103,238,231,250,232,239,117,128, 48, 39,105,  2,168,226,
-    168,244,228,229,239,231,242,225,240,232,233,227,240,225,242,229,
-    110,128, 50, 38,238,230,229,242,233,239,114,128, 32,135,237,239,
-    238,239,243,240,225,227,101,128,255, 23,239,236,228,243,244,249,
-    236,101,128,247, 55,112,  2,169, 27,169, 34,225,242,229,110,128,
-     36,122,229,114,  2,169, 41,169, 47,233,239,100,128, 36,142,243,
-    233,225,110,128,  6,247,242,239,237,225,110,128, 33,118,243,245,
-    240,229,242,233,239,114,128, 32,119,116,  2,169, 79,169,117,229,
-    229,110,  2,169, 87,169, 96,227,233,242,227,236,101,128, 36,112,
-    112,  2,169,102,169,109,225,242,229,110,128, 36,132,229,242,233,
-    239,100,128, 36,152,232,225,105,128, 14, 87,230,244,232,249,240,
-    232,229,110,128,  0,173,104,  7,169,150,170,124,170,135,170,149,
-    171, 94,171,107,172, 15, 97,  6,169,164,169,175,169,185,169,196,
-    170, 83,170,108,225,242,237,229,238,233,225,110,128,  5,119,226,
-    229,238,231,225,236,105,128,  9,182,227,249,242,233,236,236,233,
-     99,128,  4, 72,100,  2,169,202,170, 42,228, 97,  4,169,213,169,
-    222,169,253,170, 11,225,242,225,226,233, 99,128,  6, 81,228,225,
-    237,237, 97,  2,169,232,169,241,225,242,225,226,233, 99,128,252,
-     97,244,225,238,225,242,225,226,233, 99,128,252, 94,230,225,244,
-    232,225,225,242,225,226,233, 99,128,252, 96,235,225,243,242, 97,
-      2,170, 21,170, 30,225,242,225,226,233, 99,128,252, 98,244,225,
-    238,225,242,225,226,233, 99,128,252, 95,101,132, 37,146,170, 54,
-    170, 61,170, 69,170, 78,228,225,242,107,128, 37,147,236,233,231,
-    232,116,128, 37,145,237,229,228,233,245,109,128, 37,146,246, 97,
-    128,  9, 54,231,117,  2,170, 90,170, 99,234,225,242,225,244,105,
-    128, 10,182,242,237,245,235,232,105,128, 10, 54,236,243,232,229,
-    236,229,244,232,229,226,242,229,119,128,  5,147,226,239,240,239,
-    237,239,230,111,128, 49, 21,227,232,225,227,249,242,233,236,236,
-    233, 99,128,  4, 73,101,  4,170,159,170,224,170,234,170,251,229,
-    110,  4,170,170,170,179,170,193,170,209,225,242,225,226,233, 99,
-    128,  6, 52,230,233,238,225,236,225,242,225,226,233, 99,128,254,
-    182,233,238,233,244,233,225,236,225,242,225,226,233, 99,128,254,
-    183,237,229,228,233,225,236,225,242,225,226,233, 99,128,254,184,
-    233,227,239,240,244,233, 99,128,  3,227,241,229,108,129, 32,170,
-    170,242,232,229,226,242,229,119,128, 32,170,246, 97,134,  5,176,
-    171, 12,171, 27,171, 41,171, 50,171, 65,171, 81, 49,  2,171, 18,
-    171, 23,177, 53,128,  5,176, 53,128,  5,176, 50,  2,171, 33,171,
-     37, 50,128,  5,176,101,128,  5,176,232,229,226,242,229,119,128,
-      5,176,238,225,242,242,239,247,232,229,226,242,229,119,128,  5,
-    176,241,245,225,242,244,229,242,232,229,226,242,229,119,128,  5,
-    176,247,233,228,229,232,229,226,242,229,119,128,  5,176,232,225,
-    227,249,242,233,236,236,233, 99,128,  4,187,105,  2,171,113,171,
-    124,237,225,227,239,240,244,233, 99,128,  3,237,110,131,  5,233,
-    171,134,171,217,171,226,100,  2,171,140,171,206,225,231,229,243,
-    104,130,251, 73,171,152,171,161,232,229,226,242,229,119,128,251,
-     73,115,  2,171,167,171,187,232,233,238,228,239,116,129,251, 44,
-    171,178,232,229,226,242,229,119,128,251, 44,233,238,228,239,116,
-    129,251, 45,171,197,232,229,226,242,229,119,128,251, 45,239,244,
-    232,229,226,242,229,119,128,  5,193,232,229,226,242,229,119,128,
-      5,233,115,  2,171,232,171,252,232,233,238,228,239,116,129,251,
-     42,171,243,232,229,226,242,229,119,128,251, 42,233,238,228,239,
-    116,129,251, 43,172,  6,232,229,226,242,229,119,128,251, 43,239,
-    239,107,128,  2,130,105,  8,172, 39,172, 83,172, 94,172,119,172,
-    149,172,157,172,170,173, 85,231,237, 97,131,  3,195,172, 51,172,
-     55,172, 63, 49,128,  3,194,230,233,238,225,108,128,  3,194,236,
-    245,238,225,244,229,243,249,237,226,239,236,231,242,229,229,107,
-    128,  3,242,232,233,242,225,231,225,238, 97,128, 48, 87,235,225,
-    244,225,235,225,238, 97,129, 48,183,172,107,232,225,236,230,247,
-    233,228,244,104,128,255,124,236,245,113,  2,172,127,172,136,232,
-    229,226,242,229,119,128,  5,189,236,229,230,244,232,229,226,242,
-    229,119,128,  5,189,237,233,236,225,114,128, 34, 60,238,228,239,
-    244,232,229,226,242,229,119,128,  5,194,239,115,  6,172,185,172,
-    220,172,252,173, 24,173, 38,173, 70, 97,  2,172,191,172,206,227,
-    233,242,227,236,229,235,239,242,229,225,110,128, 50,116,240,225,
-    242,229,238,235,239,242,229,225,110,128, 50, 20,227,105,  2,172,
-    227,172,239,229,245,227,235,239,242,229,225,110,128, 49,126,242,
-    227,236,229,235,239,242,229,225,110,128, 50,102,107,  2,173,  2,
-    173, 16,233,249,229,239,235,235,239,242,229,225,110,128, 49,122,
-    239,242,229,225,110,128, 49, 69,238,233,229,245,238,235,239,242,
-    229,225,110,128, 49,123,112,  2,173, 44,173, 57,225,242,229,238,
-    235,239,242,229,225,110,128, 50,  6,233,229,245,240,235,239,242,
-    229,225,110,128, 49,125,244,233,235,229,245,244,235,239,242,229,
-    225,110,128, 49,124,120,141,  0, 54,173,115,173,124,173,134,173,
-    164,173,171,173,196,173,223,174,  1,174, 13,174, 24,174, 57,174,
-     65,174, 76,225,242,225,226,233, 99,128,  6,102,226,229,238,231,
-    225,236,105,128,  9,236,227,233,242,227,236,101,129, 36,101,173,
-    145,233,238,246,229,242,243,229,243,225,238,243,243,229,242,233,
-    102,128, 39,143,228,229,246, 97,128,  9,108,231,117,  2,173,178,
-    173,187,234,225,242,225,244,105,128, 10,236,242,237,245,235,232,
-    105,128, 10,108,232, 97,  2,173,203,173,214,227,235,225,242,225,
-    226,233, 99,128,  6,102,238,231,250,232,239,117,128, 48, 38,105,
-      2,173,229,173,247,228,229,239,231,242,225,240,232,233,227,240,
-    225,242,229,110,128, 50, 37,238,230,229,242,233,239,114,128, 32,
-    134,237,239,238,239,243,240,225,227,101,128,255, 22,239,236,228,
-    243,244,249,236,101,128,247, 54,112,  2,174, 30,174, 37,225,242,
-    229,110,128, 36,121,229,114,  2,174, 44,174, 50,233,239,100,128,
-     36,141,243,233,225,110,128,  6,246,242,239,237,225,110,128, 33,
-    117,243,245,240,229,242,233,239,114,128, 32,118,116,  2,174, 82,
-    174,153,229,229,110,  2,174, 90,174,132, 99,  2,174, 96,174,104,
-    233,242,227,236,101,128, 36,111,245,242,242,229,238,227,249,228,
-    229,238,239,237,233,238,225,244,239,242,226,229,238,231,225,236,
-    105,128,  9,249,112,  2,174,138,174,145,225,242,229,110,128, 36,
-    131,229,242,233,239,100,128, 36,151,232,225,105,128, 14, 86,108,
-      2,174,165,174,185,225,243,104,129,  0, 47,174,173,237,239,238,
-    239,243,240,225,227,101,128,255, 15,239,238,103,129,  1,127,174,
-    193,228,239,244,225,227,227,229,238,116,128, 30,155,109,  2,174,
-    211,174,221,233,236,229,230,225,227,101,128, 38, 58,239,238,239,
-    243,240,225,227,101,128,255, 83,111,  6,174,246,175, 40,175, 51,
-    175, 76,175,121,175,132,102,  2,174,252,175, 10,240,225,243,245,
-    241,232,229,226,242,229,119,128,  5,195,116,  2,175, 16,175, 25,
-    232,249,240,232,229,110,128,  0,173,243,233,231,238,227,249,242,
-    233,236,236,233, 99,128,  4, 76,232,233,242,225,231,225,238, 97,
-    128, 48, 93,235,225,244,225,235,225,238, 97,129, 48,189,175, 64,
-    232,225,236,230,247,233,228,244,104,128,255,127,236,233,228,245,
-    115,  2,175, 86,175,103,236,239,238,231,239,246,229,242,236,225,
-    249,227,237, 98,128,  3, 56,243,232,239,242,244,239,246,229,242,
-    236,225,249,227,237, 98,128,  3, 55,242,245,243,233,244,232,225,
-    105,128, 14, 41,115,  3,175,140,175,150,175,158,225,236,225,244,
-    232,225,105,128, 14, 40,239,244,232,225,105,128, 14, 11,245,225,
-    244,232,225,105,128, 14, 42,240, 97,  3,175,176,175,196,175,228,
-    227,101,129,  0, 32,175,183,232,225,227,235,225,242,225,226,233,
-     99,128,  0, 32,228,101,129, 38, 96,175,203,243,245,233,116,  2,
-    175,212,175,220,226,236,225,227,107,128, 38, 96,247,232,233,244,
-    101,128, 38,100,242,229,110,128, 36,174,241,245,225,242,101, 11,
-    176,  6,176, 17,176, 31,176, 56,176, 73,176, 99,176,114,176,147,
-    176,174,176,230,176,245,226,229,236,239,247,227,237, 98,128,  3,
-     59, 99,  2,176, 23,176, 27, 99,128, 51,196,109,128, 51,157,228,
-    233,225,231,239,238,225,236,227,242,239,243,243,232,225,244,227,
-    232,230,233,236,108,128, 37,169,232,239,242,233,250,239,238,244,
-    225,236,230,233,236,108,128, 37,164,107,  2,176, 79,176, 83,103,
-    128, 51,143,109,129, 51,158,176, 89,227,225,240,233,244,225,108,
-    128, 51,206,108,  2,176,105,176,109,110,128, 51,209,239,103,128,
-     51,210,109,  4,176,124,176,128,176,133,176,137,103,128, 51,142,
-    233,108,128, 51,213,109,128, 51,156,243,241,245,225,242,229,100,
-    128, 51,161,239,242,244,232,239,231,239,238,225,236,227,242,239,
-    243,243,232,225,244,227,232,230,233,236,108,128, 37,166,245,240,
-    240,229,114,  2,176,184,176,207,236,229,230,244,244,239,236,239,
-    247,229,242,242,233,231,232,244,230,233,236,108,128, 37,167,242,
-    233,231,232,244,244,239,236,239,247,229,242,236,229,230,244,230,
-    233,236,108,128, 37,168,246,229,242,244,233,227,225,236,230,233,
-    236,108,128, 37,165,247,232,233,244,229,247,233,244,232,243,237,
-    225,236,236,226,236,225,227,107,128, 37,163,242,243,241,245,225,
-    242,101,128, 51,219,115,  2,177, 27,177,197, 97,  4,177, 37,177,
-     47,177, 54,177, 65,226,229,238,231,225,236,105,128,  9,183,228,
-    229,246, 97,128,  9, 55,231,245,234,225,242,225,244,105,128, 10,
-    183,238,103,  8,177, 84,177, 98,177,112,177,126,177,141,177,155,
-    177,169,177,182,227,233,229,245,227,235,239,242,229,225,110,128,
-     49, 73,232,233,229,245,232,235,239,242,229,225,110,128, 49,133,
-    233,229,245,238,231,235,239,242,229,225,110,128, 49,128,235,233,
-    249,229,239,235,235,239,242,229,225,110,128, 49, 50,238,233,229,
-    245,238,235,239,242,229,225,110,128, 49,101,240,233,229,245,240,
-    235,239,242,229,225,110,128, 49, 67,243,233,239,243,235,239,242,
-    229,225,110,128, 49, 70,244,233,235,229,245,244,235,239,242,229,
-    225,110,128, 49, 56,245,240,229,242,233,239,114,128,246,242,116,
-      2,177,213,177,236,229,242,236,233,238,103,129,  0,163,177,224,
-    237,239,238,239,243,240,225,227,101,128,255,225,242,239,235,101,
-      2,177,245,178,  6,236,239,238,231,239,246,229,242,236,225,249,
-    227,237, 98,128,  3, 54,243,232,239,242,244,239,246,229,242,236,
-    225,249,227,237, 98,128,  3, 53,117,  7,178, 40,178, 72,178, 94,
-    178,105,178,146,178,156,178,160,226,243,229,116,130, 34,130,178,
-     51,178, 62,238,239,244,229,241,245,225,108,128, 34,138,239,242,
-    229,241,245,225,108,128, 34,134, 99,  2,178, 78,178, 86,227,229,
-    229,228,115,128, 34,123,232,244,232,225,116,128, 34, 11,232,233,
-    242,225,231,225,238, 97,128, 48, 89,107,  2,178,111,178,135,225,
-    244,225,235,225,238, 97,129, 48,185,178,123,232,225,236,230,247,
-    233,228,244,104,128,255,125,245,238,225,242,225,226,233, 99,128,
-      6, 82,237,237,225,244,233,239,110,128, 34, 17,110,128, 38, 60,
-    240,229,242,243,229,116,130, 34,131,178,173,178,184,238,239,244,
-    229,241,245,225,108,128, 34,139,239,242,229,241,245,225,108,128,
-     34,135,246,243,241,245,225,242,101,128, 51,220,249,239,245,247,
-    225,229,242,225,243,241,245,225,242,101,128, 51,124,116,144,  0,
-    116,179,  1,180, 10,180, 31,180,174,180,214,183,  6,186,144,187,
-    219,187,231,187,243,189, 20,189, 45,189,131,190, 55,190,239,191,
-     73, 97, 10,179, 23,179, 33,179, 54,179, 61,179, 86,179,164,179,
-    181,179,206,179,220,179,224,226,229,238,231,225,236,105,128,  9,
-    164,227,107,  2,179, 40,179, 47,228,239,247,110,128, 34,164,236,
-    229,230,116,128, 34,163,228,229,246, 97,128,  9, 36,231,117,  2,
-    179, 68,179, 77,234,225,242,225,244,105,128, 10,164,242,237,245,
-    235,232,105,128, 10, 36,104,  4,179, 96,179,105,179,119,179,149,
-    225,242,225,226,233, 99,128,  6, 55,230,233,238,225,236,225,242,
-    225,226,233, 99,128,254,194,105,  2,179,125,179,140,238,233,244,
-    233,225,236,225,242,225,226,233, 99,128,254,195,242,225,231,225,
-    238, 97,128, 48, 95,237,229,228,233,225,236,225,242,225,226,233,
-     99,128,254,196,233,243,249,239,245,229,242,225,243,241,245,225,
-    242,101,128, 51,125,235,225,244,225,235,225,238, 97,129, 48,191,
-    179,194,232,225,236,230,247,233,228,244,104,128,255,128,244,247,
-    229,229,236,225,242,225,226,233, 99,128,  6, 64,117,128,  3,196,
-    118,130,  5,234,179,232,180,  1,228,225,231,229,115,129,251, 74,
-    179,242,104,129,251, 74,179,248,232,229,226,242,229,119,128,251,
-     74,232,229,226,242,229,119,128,  5,234, 98,  2,180, 16,180, 21,
-    225,114,128,  1,103,239,240,239,237,239,230,111,128, 49, 10, 99,
-      6,180, 45,180, 52,180, 59,180, 68,180,134,180,161,225,242,239,
-    110,128,  1,101,227,245,242,108,128,  2,168,229,228,233,236,236,
-     97,128,  1, 99,232,229,104,  4,180, 80,180, 89,180,103,180,119,
-    225,242,225,226,233, 99,128,  6,134,230,233,238,225,236,225,242,
-    225,226,233, 99,128,251,123,233,238,233,244,233,225,236,225,242,
-    225,226,233, 99,128,251,124,237,229,228,233,225,236,225,242,225,
-    226,233, 99,128,251,125,233,242, 99,  2,180,142,180,147,236,101,
-    128, 36,227,245,237,230,236,229,248,226,229,236,239,119,128, 30,
-    113,239,237,237,225,225,227,227,229,238,116,128,  1, 99,100,  2,
-    180,180,180,190,233,229,242,229,243,233,115,128, 30,151,239,116,
-      2,180,197,180,206,225,227,227,229,238,116,128, 30,107,226,229,
-    236,239,119,128, 30,109,101,  9,180,234,180,245,181,  9,182, 19,
-    182, 44,182,108,182,175,182,180,182,232,227,249,242,233,236,236,
-    233, 99,128,  4, 66,228,229,243,227,229,238,228,229,242,227,249,
-    242,233,236,236,233, 99,128,  4,173,104,  7,181, 25,181, 34,181,
-     48,181, 88,181,118,181,159,182,  1,225,242,225,226,233, 99,128,
-      6, 42,230,233,238,225,236,225,242,225,226,233, 99,128,254,150,
-    232,225,232,105,  2,181, 57,181, 72,238,233,244,233,225,236,225,
-    242,225,226,233, 99,128,252,162,243,239,236,225,244,229,228,225,
-    242,225,226,233, 99,128,252, 12,105,  2,181, 94,181,109,238,233,
-    244,233,225,236,225,242,225,226,233, 99,128,254,151,242,225,231,
-    225,238, 97,128, 48,102,234,229,229,237,105,  2,181,128,181,143,
-    238,233,244,233,225,236,225,242,225,226,233, 99,128,252,161,243,
-    239,236,225,244,229,228,225,242,225,226,233, 99,128,252, 11,109,
-      2,181,165,181,199,225,242,226,245,244, 97,  2,181,176,181,185,
-    225,242,225,226,233, 99,128,  6, 41,230,233,238,225,236,225,242,
-    225,226,233, 99,128,254,148,101,  2,181,205,181,218,228,233,225,
-    236,225,242,225,226,233, 99,128,254,152,229,237,105,  2,181,226,
-    181,241,238,233,244,233,225,236,225,242,225,226,233, 99,128,252,
-    164,243,239,236,225,244,229,228,225,242,225,226,233, 99,128,252,
-     14,238,239,239,238,230,233,238,225,236,225,242,225,226,233, 99,
-    128,252,115,235,225,244,225,235,225,238, 97,129, 48,198,182, 32,
-    232,225,236,230,247,233,228,244,104,128,255,131,108,  2,182, 50,
-    182, 69,229,240,232,239,238,101,129, 33, 33,182, 61,226,236,225,
-    227,107,128, 38, 14,233,243,232, 97,  2,182, 78,182, 93,231,229,
-    228,239,236,225,232,229,226,242,229,119,128,  5,160,241,229,244,
-    225,238,225,232,229,226,242,229,119,128,  5,169,110,  4,182,118,
-    182,127,182,146,182,167,227,233,242,227,236,101,128, 36,105,233,
-    228,229,239,231,242,225,240,232,233,227,240,225,242,229,110,128,
-     50, 41,112,  2,182,152,182,159,225,242,229,110,128, 36,125,229,
-    242,233,239,100,128, 36,145,242,239,237,225,110,128, 33,121,243,
-    104,128,  2,167,116,131,  5,216,182,190,182,210,182,219,228,225,
-    231,229,243,104,129,251, 56,182,201,232,229,226,242,229,119,128,
-    251, 56,232,229,226,242,229,119,128,  5,216,243,229,227,249,242,
-    233,236,236,233, 99,128,  4,181,246,233,114,  2,182,240,182,249,
-    232,229,226,242,229,119,128,  5,155,236,229,230,244,232,229,226,
-    242,229,119,128,  5,155,104,  6,183, 20,183,172,184, 38,184,170,
-    185, 77,186,134, 97,  5,183, 32,183, 42,183, 49,183, 74,183,103,
-    226,229,238,231,225,236,105,128,  9,165,228,229,246, 97,128,  9,
-     37,231,117,  2,183, 56,183, 65,234,225,242,225,244,105,128, 10,
-    165,242,237,245,235,232,105,128, 10, 37,108,  2,183, 80,183, 89,
-    225,242,225,226,233, 99,128,  6, 48,230,233,238,225,236,225,242,
-    225,226,233, 99,128,254,172,238,244,232,225,235,232,225,116,  3,
-    183,118,183,149,183,156,236,239,119,  2,183,126,183,137,236,229,
-    230,244,244,232,225,105,128,248,152,242,233,231,232,244,244,232,
-    225,105,128,248,151,244,232,225,105,128, 14, 76,245,240,240,229,
-    242,236,229,230,244,244,232,225,105,128,248,150,101,  3,183,180,
-    183,244,184, 11,104,  4,183,190,183,199,183,213,183,229,225,242,
-    225,226,233, 99,128,  6, 43,230,233,238,225,236,225,242,225,226,
-    233, 99,128,254,154,233,238,233,244,233,225,236,225,242,225,226,
-    233, 99,128,254,155,237,229,228,233,225,236,225,242,225,226,233,
-     99,128,254,156,242,101,  2,183,251,184,  4,229,248,233,243,244,
-    115,128, 34,  3,230,239,242,101,128, 34, 52,244, 97,130,  3,184,
-    184, 20,184, 24, 49,128,  3,209,243,249,237,226,239,236,231,242,
-    229,229,107,128,  3,209,105,  2,184, 44,184,130,229,245,244,104,
-      4,184, 57,184, 92,184,107,184,116, 97,  2,184, 63,184, 78,227,
-    233,242,227,236,229,235,239,242,229,225,110,128, 50,121,240,225,
-    242,229,238,235,239,242,229,225,110,128, 50, 25,227,233,242,227,
-    236,229,235,239,242,229,225,110,128, 50,107,235,239,242,229,225,
-    110,128, 49, 76,240,225,242,229,238,235,239,242,229,225,110,128,
-     50, 11,242,244,229,229,110,  2,184,140,184,149,227,233,242,227,
-    236,101,128, 36,108,112,  2,184,155,184,162,225,242,229,110,128,
-     36,128,229,242,233,239,100,128, 36,148,111,  6,184,184,184,201,
-    184,206,184,220,184,225,185, 22,238,225,238,231,237,239,238,244,
-    232,239,244,232,225,105,128, 14, 17,239,107,128,  1,173,240,232,
-    245,244,232,225,239,244,232,225,105,128, 14, 18,242,110,128,  0,
-    254,244,104,  3,184,234,185,  2,185, 12, 97,  2,184,240,184,250,
-    232,225,238,244,232,225,105,128, 14, 23,238,244,232,225,105,128,
-     14, 16,239,238,231,244,232,225,105,128, 14, 24,245,238,231,244,
-    232,225,105,128, 14, 22,245,243,225,238,100,  2,185, 32,185, 43,
-    227,249,242,233,236,236,233, 99,128,  4,130,243,243,229,240,225,
-    242,225,244,239,114,  2,185, 58,185, 67,225,242,225,226,233, 99,
-    128,  6,108,240,229,242,243,233,225,110,128,  6,108,242,229,101,
-    144,  0, 51,185,115,185,124,185,134,185,164,185,171,185,181,185,
-    206,185,233,186, 11,186, 23,186, 42,186, 53,186, 86,186,108,186,
-    116,186,127,225,242,225,226,233, 99,128,  6, 99,226,229,238,231,
-    225,236,105,128,  9,233,227,233,242,227,236,101,129, 36, 98,185,
-    145,233,238,246,229,242,243,229,243,225,238,243,243,229,242,233,
-    102,128, 39,140,228,229,246, 97,128,  9,105,229,233,231,232,244,
-    232,115,128, 33, 92,231,117,  2,185,188,185,197,234,225,242,225,
-    244,105,128, 10,233,242,237,245,235,232,105,128, 10,105,232, 97,
-      2,185,213,185,224,227,235,225,242,225,226,233, 99,128,  6, 99,
-    238,231,250,232,239,117,128, 48, 35,105,  2,185,239,186,  1,228,
-    229,239,231,242,225,240,232,233,227,240,225,242,229,110,128, 50,
-     34,238,230,229,242,233,239,114,128, 32,131,237,239,238,239,243,
-    240,225,227,101,128,255, 19,238,245,237,229,242,225,244,239,242,
-    226,229,238,231,225,236,105,128,  9,246,239,236,228,243,244,249,
-    236,101,128,247, 51,112,  2,186, 59,186, 66,225,242,229,110,128,
-     36,118,229,114,  2,186, 73,186, 79,233,239,100,128, 36,138,243,
-    233,225,110,128,  6,243,241,245,225,242,244,229,242,115,129,  0,
-    190,186, 99,229,237,228,225,243,104,128,246,222,242,239,237,225,
-    110,128, 33,114,243,245,240,229,242,233,239,114,128,  0,179,244,
-    232,225,105,128, 14, 83,250,243,241,245,225,242,101,128, 51,148,
-    105,  7,186,160,186,171,187, 30,187,128,187,140,187,189,187,206,
-    232,233,242,225,231,225,238, 97,128, 48, 97,107,  2,186,177,186,
-    201,225,244,225,235,225,238, 97,129, 48,193,186,189,232,225,236,
-    230,247,233,228,244,104,128,255,129,229,245,116,  4,186,213,186,
-    248,187,  7,187, 16, 97,  2,186,219,186,234,227,233,242,227,236,
-    229,235,239,242,229,225,110,128, 50,112,240,225,242,229,238,235,
-    239,242,229,225,110,128, 50, 16,227,233,242,227,236,229,235,239,
-    242,229,225,110,128, 50, 98,235,239,242,229,225,110,128, 49, 55,
-    240,225,242,229,238,235,239,242,229,225,110,128, 50,  2,236,228,
-    101,133,  2,220,187, 46,187, 57,187, 74,187, 86,187,114,226,229,
-    236,239,247,227,237, 98,128,  3, 48, 99,  2,187, 63,187, 68,237,
-     98,128,  3,  3,239,237, 98,128,  3,  3,228,239,245,226,236,229,
-    227,237, 98,128,  3, 96,111,  2,187, 92,187,102,240,229,242,225,
-    244,239,114,128, 34, 60,246,229,242,236,225,249,227,237, 98,128,
-      3, 52,246,229,242,244,233,227,225,236,227,237, 98,128,  3, 62,
-    237,229,243,227,233,242,227,236,101,128, 34,151,112,  2,187,146,
-    187,176,229,232, 97,  2,187,154,187,163,232,229,226,242,229,119,
-    128,  5,150,236,229,230,244,232,229,226,242,229,119,128,  5,150,
-    240,233,231,245,242,237,245,235,232,105,128, 10,112,244,236,239,
-    227,249,242,233,236,236,233,227,227,237, 98,128,  4,131,247,238,
-    225,242,237,229,238,233,225,110,128,  5,127,236,233,238,229,226,
-    229,236,239,119,128, 30,111,237,239,238,239,243,240,225,227,101,
-    128,255, 84,111,  7,188,  3,188, 14,188, 25,188, 50,188,170,188,
-    182,189, 10,225,242,237,229,238,233,225,110,128,  5,105,232,233,
-    242,225,231,225,238, 97,128, 48,104,235,225,244,225,235,225,238,
-     97,129, 48,200,188, 38,232,225,236,230,247,233,228,244,104,128,
-    255,132,110,  3,188, 58,188,156,188,161,101,  4,188, 68,188,137,
-    188,144,188,150,226,225,114,  4,188, 80,188,109,188,119,188,128,
-    229,248,244,242, 97,  2,188, 90,188,100,232,233,231,232,237,239,
-    100,128,  2,229,236,239,247,237,239,100,128,  2,233,232,233,231,
-    232,237,239,100,128,  2,230,236,239,247,237,239,100,128,  2,232,
-    237,233,228,237,239,100,128,  2,231,230,233,246,101,128,  1,189,
-    243,233,120,128,  1,133,244,247,111,128,  1,168,239,115,128,  3,
-    132,243,241,245,225,242,101,128, 51, 39,240,225,244,225,235,244,
-    232,225,105,128, 14, 15,242,244,239,233,243,229,243,232,229,236,
-    236,226,242,225,227,235,229,116,  2,188,205,188,235,236,229,230,
-    116,130, 48, 20,188,216,188,224,243,237,225,236,108,128,254, 93,
-    246,229,242,244,233,227,225,108,128,254, 57,242,233,231,232,116,
-    130, 48, 21,188,247,188,255,243,237,225,236,108,128,254, 94,246,
-    229,242,244,233,227,225,108,128,254, 58,244,225,239,244,232,225,
-    105,128, 14, 21,240, 97,  2,189, 27,189, 39,236,225,244,225,236,
-    232,239,239,107,128,  1,171,242,229,110,128, 36,175,114,  3,189,
-     53,189, 84,189, 99,225,228,229,237,225,242,107,129, 33, 34,189,
-     65,115,  2,189, 71,189, 77,225,238,115,128,248,234,229,242,233,
-    102,128,246,219,229,244,242,239,230,236,229,248,232,239,239,107,
-    128,  2,136,233,225,103,  4,189,111,189,116,189,121,189,126,228,
-    110,128, 37,188,236,102,128, 37,196,242,116,128, 37,186,245,112,
-    128, 37,178,115,132,  2,166,189,143,189,182,190, 32,190, 45,225,
-    228,105,130,  5,230,189,153,189,173,228,225,231,229,243,104,129,
-    251, 70,189,164,232,229,226,242,229,119,128,251, 70,232,229,226,
-    242,229,119,128,  5,230,101,  2,189,188,189,199,227,249,242,233,
-    236,236,233, 99,128,  4, 70,242,101,134,  5,181,189,216,189,230,
-    189,235,189,244,190,  3,190, 19, 49,  2,189,222,189,226, 50,128,
-      5,181,101,128,  5,181,178, 98,128,  5,181,232,229,226,242,229,
-    119,128,  5,181,238,225,242,242,239,247,232,229,226,242,229,119,
-    128,  5,181,241,245,225,242,244,229,242,232,229,226,242,229,119,
-    128,  5,181,247,233,228,229,232,229,226,242,229,119,128,  5,181,
-    232,229,227,249,242,233,236,236,233, 99,128,  4, 91,245,240,229,
-    242,233,239,114,128,246,243,116,  4,190, 65,190,115,190,180,190,
-    231, 97,  3,190, 73,190, 83,190, 90,226,229,238,231,225,236,105,
-    128,  9,159,228,229,246, 97,128,  9, 31,231,117,  2,190, 97,190,
-    106,234,225,242,225,244,105,128, 10,159,242,237,245,235,232,105,
-    128, 10, 31,229,104,  4,190,126,190,135,190,149,190,165,225,242,
-    225,226,233, 99,128,  6,121,230,233,238,225,236,225,242,225,226,
-    233, 99,128,251,103,233,238,233,244,233,225,236,225,242,225,226,
-    233, 99,128,251,104,237,229,228,233,225,236,225,242,225,226,233,
-     99,128,251,105,232, 97,  3,190,189,190,199,190,206,226,229,238,
-    231,225,236,105,128,  9,160,228,229,246, 97,128,  9, 32,231,117,
-      2,190,213,190,222,234,225,242,225,244,105,128, 10,160,242,237,
-    245,235,232,105,128, 10, 32,245,242,238,229,100,128,  2,135,117,
-      3,190,247,191,  2,191, 27,232,233,242,225,231,225,238, 97,128,
-     48,100,235,225,244,225,235,225,238, 97,129, 48,196,191, 15,232,
-    225,236,230,247,233,228,244,104,128,255,130,243,237,225,236,108,
-      2,191, 37,191, 48,232,233,242,225,231,225,238, 97,128, 48, 99,
-    235,225,244,225,235,225,238, 97,129, 48,195,191, 61,232,225,236,
-    230,247,233,228,244,104,128,255,111,119,  2,191, 79,191,184,101,
-      2,191, 85,191,133,236,246,101,  3,191, 95,191,104,191,125,227,
-    233,242,227,236,101,128, 36,107,112,  2,191,110,191,117,225,242,
-    229,110,128, 36,127,229,242,233,239,100,128, 36,147,242,239,237,
-    225,110,128, 33,123,238,244,121,  3,191,143,191,152,191,163,227,
-    233,242,227,236,101,128, 36,115,232,225,238,231,250,232,239,117,
-    128, 83, 68,112,  2,191,169,191,176,225,242,229,110,128, 36,135,
-    229,242,233,239,100,128, 36,155,111,142,  0, 50,191,216,191,225,
-    191,235,192,  9,192, 61,192, 86,192,113,192,147,192,159,192,178,
-    192,189,192,222,192,230,192,254,225,242,225,226,233, 99,128,  6,
-     98,226,229,238,231,225,236,105,128,  9,232,227,233,242,227,236,
-    101,129, 36, 97,191,246,233,238,246,229,242,243,229,243,225,238,
-    243,243,229,242,233,102,128, 39,139,100,  2,192, 15,192, 21,229,
-    246, 97,128,  9,104,239,116,  2,192, 28,192, 39,229,238,236,229,
-    225,228,229,114,128, 32, 37,236,229,225,228,229,114,129, 32, 37,
-    192, 50,246,229,242,244,233,227,225,108,128,254, 48,231,117,  2,
-    192, 68,192, 77,234,225,242,225,244,105,128, 10,232,242,237,245,
-    235,232,105,128, 10,104,232, 97,  2,192, 93,192,104,227,235,225,
-    242,225,226,233, 99,128,  6, 98,238,231,250,232,239,117,128, 48,
-     34,105,  2,192,119,192,137,228,229,239,231,242,225,240,232,233,
-    227,240,225,242,229,110,128, 50, 33,238,230,229,242,233,239,114,
-    128, 32,130,237,239,238,239,243,240,225,227,101,128,255, 18,238,
-    245,237,229,242,225,244,239,242,226,229,238,231,225,236,105,128,
-      9,245,239,236,228,243,244,249,236,101,128,247, 50,112,  2,192,
-    195,192,202,225,242,229,110,128, 36,117,229,114,  2,192,209,192,
-    215,233,239,100,128, 36,137,243,233,225,110,128,  6,242,242,239,
-    237,225,110,128, 33,113,115,  2,192,236,192,244,244,242,239,235,
-    101,128,  1,187,245,240,229,242,233,239,114,128,  0,178,244,104,
-      2,193,  5,193, 10,225,105,128, 14, 82,233,242,228,115,128, 33,
-     84,117,145,  0,117,193, 55,193, 63,193,104,193,161,194, 43,194,
-     80,194,203,194,219,195, 14,195, 84,195,165,195,174,196, 37,196,
-     61,196,169,196,197,197, 55,225,227,245,244,101,128,  0,250, 98,
-      4,193, 73,193, 78,193, 87,193, 97,225,114,128,  2,137,229,238,
-    231,225,236,105,128,  9,137,239,240,239,237,239,230,111,128, 49,
-     40,242,229,246,101,128,  1,109, 99,  3,193,112,193,119,193,151,
-    225,242,239,110,128,  1,212,233,242, 99,  2,193,127,193,132,236,
-    101,128, 36,228,245,237,230,236,229,120,129,  0,251,193,143,226,
-    229,236,239,119,128, 30,119,249,242,233,236,236,233, 99,128,  4,
-     67,100,  5,193,173,193,184,193,207,193,213,194, 33,225,244,244,
-    225,228,229,246, 97,128,  9, 81,226,108,  2,193,191,193,199,225,
-    227,245,244,101,128,  1,113,231,242,225,246,101,128,  2, 21,229,
-    246, 97,128,  9,  9,233,229,242,229,243,233,115,133,  0,252,193,
-    233,193,241,193,249,194, 16,194, 24,225,227,245,244,101,128,  1,
-    216,226,229,236,239,119,128, 30,115, 99,  2,193,255,194,  6,225,
-    242,239,110,128,  1,218,249,242,233,236,236,233, 99,128,  4,241,
-    231,242,225,246,101,128,  1,220,237,225,227,242,239,110,128,  1,
-    214,239,244,226,229,236,239,119,128, 30,229,103,  2,194, 49,194,
-     56,242,225,246,101,128,  0,249,117,  2,194, 62,194, 71,234,225,
-    242,225,244,105,128, 10,137,242,237,245,235,232,105,128, 10,  9,
-    104,  3,194, 88,194, 98,194,176,233,242,225,231,225,238, 97,128,
-     48, 70,111,  2,194,104,194,114,239,235,225,226,239,246,101,128,
-     30,231,242,110,133,  1,176,194,129,194,137,194,148,194,156,194,
-    168,225,227,245,244,101,128, 30,233,228,239,244,226,229,236,239,
-    119,128, 30,241,231,242,225,246,101,128, 30,235,232,239,239,235,
-    225,226,239,246,101,128, 30,237,244,233,236,228,101,128, 30,239,
-    245,238,231,225,242,245,237,236,225,245,116,129,  1,113,194,192,
-    227,249,242,233,236,236,233, 99,128,  4,243,233,238,246,229,242,
-    244,229,228,226,242,229,246,101,128,  2, 23,107,  3,194,227,194,
-    251,195,  6,225,244,225,235,225,238, 97,129, 48,166,194,239,232,
-    225,236,230,247,233,228,244,104,128,255,115,227,249,242,233,236,
-    236,233, 99,128,  4,121,239,242,229,225,110,128, 49, 92,109,  2,
-    195, 20,195, 73, 97,  2,195, 26,195, 59,227,242,239,110,130,  1,
-    107,195, 37,195, 48,227,249,242,233,236,236,233, 99,128,  4,239,
-    228,233,229,242,229,243,233,115,128, 30,123,244,242,225,231,245,
-    242,237,245,235,232,105,128, 10, 65,239,238,239,243,240,225,227,
-    101,128,255, 85,110,  2,195, 90,195,145,228,229,242,243,227,239,
-    242,101,132,  0, 95,195,109,195,115,195,127,195,138,228,226,108,
-    128, 32, 23,237,239,238,239,243,240,225,227,101,128,255, 63,246,
-    229,242,244,233,227,225,108,128,254, 51,247,225,246,121,128,254,
-     79,105,  2,195,151,195,156,239,110,128, 34, 42,246,229,242,243,
-    225,108,128, 34,  0,239,231,239,238,229,107,128,  1,115,112,  5,
-    195,186,195,193,195,201,195,216,196, 11,225,242,229,110,128, 36,
-    176,226,236,239,227,107,128, 37,128,240,229,242,228,239,244,232,
-    229,226,242,229,119,128,  5,196,243,233,236,239,110,131,  3,197,
-    195,230,195,251,196,  3,228,233,229,242,229,243,233,115,129,  3,
-    203,195,243,244,239,238,239,115,128,  3,176,236,225,244,233,110,
-    128,  2,138,244,239,238,239,115,128,  3,205,244,225,227,107,  2,
-    196, 20,196, 31,226,229,236,239,247,227,237, 98,128,  3, 29,237,
-    239,100,128,  2,212,114,  2,196, 43,196, 55,225,231,245,242,237,
-    245,235,232,105,128, 10,115,233,238,103,128,  1,111,115,  3,196,
-     69,196, 84,196,129,232,239,242,244,227,249,242,233,236,236,233,
-     99,128,  4, 94,237,225,236,108,  2,196, 93,196,104,232,233,242,
-    225,231,225,238, 97,128, 48, 69,235,225,244,225,235,225,238, 97,
-    129, 48,165,196,117,232,225,236,230,247,233,228,244,104,128,255,
-    105,244,242,225,233,231,232,116,  2,196,141,196,152,227,249,242,
-    233,236,236,233, 99,128,  4,175,243,244,242,239,235,229,227,249,
-    242,233,236,236,233, 99,128,  4,177,244,233,236,228,101,130,  1,
-    105,196,181,196,189,225,227,245,244,101,128, 30,121,226,229,236,
-    239,119,128, 30,117,117,  5,196,209,196,219,196,226,196,251,197,
-     11,226,229,238,231,225,236,105,128,  9,138,228,229,246, 97,128,
-      9, 10,231,117,  2,196,233,196,242,234,225,242,225,244,105,128,
-     10,138,242,237,245,235,232,105,128, 10, 10,237,225,244,242,225,
-    231,245,242,237,245,235,232,105,128, 10, 66,246,239,247,229,236,
-    243,233,231,110,  3,197, 27,197, 37,197, 44,226,229,238,231,225,
-    236,105,128,  9,194,228,229,246, 97,128,  9, 66,231,245,234,225,
-    242,225,244,105,128, 10,194,246,239,247,229,236,243,233,231,110,
-      3,197, 71,197, 81,197, 88,226,229,238,231,225,236,105,128,  9,
-    193,228,229,246, 97,128,  9, 65,231,245,234,225,242,225,244,105,
-    128, 10,193,118,139,  0,118,197,125,198, 17,198, 26,198, 37,198,
-    222,198,229,199, 71,199, 83,199,183,199,191,199,212, 97,  4,197,
-    135,197,142,197,167,197,178,228,229,246, 97,128,  9, 53,231,117,
-      2,197,149,197,158,234,225,242,225,244,105,128, 10,181,242,237,
-    245,235,232,105,128, 10, 53,235,225,244,225,235,225,238, 97,128,
-     48,247,118,132,  5,213,197,190,197,217,197,249,198,  5,228,225,
-    231,229,243,104,130,251, 53,197,203,197,208,182, 53,128,251, 53,
-    232,229,226,242,229,119,128,251, 53,104,  2,197,223,197,231,229,
-    226,242,229,119,128,  5,213,239,236,225,109,129,251, 75,197,240,
-    232,229,226,242,229,119,128,251, 75,246,225,246,232,229,226,242,
-    229,119,128,  5,240,249,239,228,232,229,226,242,229,119,128,  5,
-    241,227,233,242,227,236,101,128, 36,229,228,239,244,226,229,236,
-    239,119,128, 30,127,101,  6,198, 51,198, 62,198,126,198,137,198,
-    143,198,210,227,249,242,233,236,236,233, 99,128,  4, 50,104,  4,
-    198, 72,198, 81,198, 95,198,111,225,242,225,226,233, 99,128,  6,
-    164,230,233,238,225,236,225,242,225,226,233, 99,128,251,107,233,
-    238,233,244,233,225,236,225,242,225,226,233, 99,128,251,108,237,
-    229,228,233,225,236,225,242,225,226,233, 99,128,251,109,235,225,
-    244,225,235,225,238, 97,128, 48,249,238,245,115,128, 38, 64,242,
-    244,233,227,225,108,  2,198,154,198,160,226,225,114,128,  0,124,
-    236,233,238,101,  4,198,173,198,184,198,195,198,204,225,226,239,
-    246,229,227,237, 98,128,  3, 13,226,229,236,239,247,227,237, 98,
-    128,  3, 41,236,239,247,237,239,100,128,  2,204,237,239,100,128,
-      2,200,247,225,242,237,229,238,233,225,110,128,  5,126,232,239,
-    239,107,128,  2,139,105,  3,198,237,198,248,199, 31,235,225,244,
-    225,235,225,238, 97,128, 48,248,242,225,237, 97,  3,199,  3,199,
-     13,199, 20,226,229,238,231,225,236,105,128,  9,205,228,229,246,
-     97,128,  9, 77,231,245,234,225,242,225,244,105,128, 10,205,243,
-    225,242,231, 97,  3,199, 43,199, 53,199, 60,226,229,238,231,225,
-    236,105,128,  9,131,228,229,246, 97,128,  9,  3,231,245,234,225,
-    242,225,244,105,128, 10,131,237,239,238,239,243,240,225,227,101,
-    128,255, 86,111,  3,199, 91,199,102,199,172,225,242,237,229,238,
-    233,225,110,128,  5,120,233,227,229,100,  2,199,111,199,147,233,
-    244,229,242,225,244,233,239,110,  2,199,125,199,136,232,233,242,
-    225,231,225,238, 97,128, 48,158,235,225,244,225,235,225,238, 97,
-    128, 48,254,237,225,242,235,235,225,238, 97,129, 48,155,199,160,
-    232,225,236,230,247,233,228,244,104,128,255,158,235,225,244,225,
-    235,225,238, 97,128, 48,250,240,225,242,229,110,128, 36,177,116,
-      2,199,197,199,204,233,236,228,101,128, 30,125,245,242,238,229,
-    100,128,  2,140,117,  2,199,218,199,229,232,233,242,225,231,225,
-    238, 97,128, 48,148,235,225,244,225,235,225,238, 97,128, 48,244,
-    119,143,  0,119,200, 18,200,251,201,  5,201, 28,201, 68,201,135,
-    201,143,203,114,203,155,203,167,203,242,203,250,204,  1,204, 12,
-    204, 21, 97,  8,200, 36,200, 43,200, 53,200, 64,200,102,200,134,
-    200,146,200,182,227,245,244,101,128, 30,131,229,235,239,242,229,
-    225,110,128, 49, 89,232,233,242,225,231,225,238, 97,128, 48,143,
-    107,  2,200, 70,200, 94,225,244,225,235,225,238, 97,129, 48,239,
-    200, 82,232,225,236,230,247,233,228,244,104,128,255,156,239,242,
-    229,225,110,128, 49, 88,243,237,225,236,108,  2,200,112,200,123,
-    232,233,242,225,231,225,238, 97,128, 48,142,235,225,244,225,235,
-    225,238, 97,128, 48,238,244,244,239,243,241,245,225,242,101,128,
-     51, 87,118,  2,200,152,200,160,229,228,225,243,104,128, 48, 28,
-    249,245,238,228,229,242,243,227,239,242,229,246,229,242,244,233,
-    227,225,108,128,254, 52,119,  3,200,190,200,199,200,213,225,242,
-    225,226,233, 99,128,  6, 72,230,233,238,225,236,225,242,225,226,
-    233, 99,128,254,238,232,225,237,250,225,225,226,239,246,101,  2,
-    200,228,200,237,225,242,225,226,233, 99,128,  6, 36,230,233,238,
-    225,236,225,242,225,226,233, 99,128,254,134,226,243,241,245,225,
-    242,101,128, 51,221,227,233,242, 99,  2,201, 14,201, 19,236,101,
-    128, 36,230,245,237,230,236,229,120,128,  1,117,100,  2,201, 34,
-    201, 44,233,229,242,229,243,233,115,128, 30,133,239,116,  2,201,
-     51,201, 60,225,227,227,229,238,116,128, 30,135,226,229,236,239,
-    119,128, 30,137,101,  4,201, 78,201, 89,201,101,201,125,232,233,
-    242,225,231,225,238, 97,128, 48,145,233,229,242,243,244,242,225,
-    243,115,128, 33, 24,107,  2,201,107,201,117,225,244,225,235,225,
-    238, 97,128, 48,241,239,242,229,225,110,128, 49, 94,239,235,239,
-    242,229,225,110,128, 49, 93,231,242,225,246,101,128, 30,129,232,
-    233,244,101,  8,201,164,201,173,202,  1,202, 91,202,175,202,220,
-    203, 16,203, 72,226,245,236,236,229,116,128, 37,230, 99,  2,201,
-    179,201,199,233,242,227,236,101,129, 37,203,201,189,233,238,246,
-    229,242,243,101,128, 37,217,239,242,238,229,242,226,242,225,227,
-    235,229,116,  2,201,216,201,236,236,229,230,116,129, 48, 14,201,
-    225,246,229,242,244,233,227,225,108,128,254, 67,242,233,231,232,
-    116,129, 48, 15,201,246,246,229,242,244,233,227,225,108,128,254,
-     68,100,  2,202,  7,202, 48,233,225,237,239,238,100,129, 37,199,
-    202, 18,227,239,238,244,225,233,238,233,238,231,226,236,225,227,
-    235,243,237,225,236,236,228,233,225,237,239,238,100,128, 37,200,
-    239,247,238,240,239,233,238,244,233,238,103,  2,202, 64,202, 80,
-    243,237,225,236,236,244,242,233,225,238,231,236,101,128, 37,191,
-    244,242,233,225,238,231,236,101,128, 37,189,236,101,  2,202, 98,
-    202,140,230,244,240,239,233,238,244,233,238,103,  2,202,113,202,
-    129,243,237,225,236,236,244,242,233,225,238,231,236,101,128, 37,
-    195,244,242,233,225,238,231,236,101,128, 37,193,238,244,233,227,
-    245,236,225,242,226,242,225,227,235,229,116,  2,202,160,202,167,
-    236,229,230,116,128, 48, 22,242,233,231,232,116,128, 48, 23,242,
-    233,231,232,244,240,239,233,238,244,233,238,103,  2,202,193,202,
-    209,243,237,225,236,236,244,242,233,225,238,231,236,101,128, 37,
-    185,244,242,233,225,238,231,236,101,128, 37,183,115,  3,202,228,
-    203,  2,203, 10,109,  2,202,234,202,246,225,236,236,243,241,245,
-    225,242,101,128, 37,171,233,236,233,238,231,230,225,227,101,128,
-     38, 58,241,245,225,242,101,128, 37,161,244,225,114,128, 38,  6,
-    116,  2,203, 22,203, 33,229,236,229,240,232,239,238,101,128, 38,
-     15,239,242,244,239,233,243,229,243,232,229,236,236,226,242,225,
-    227,235,229,116,  2,203, 57,203, 64,236,229,230,116,128, 48, 24,
-    242,233,231,232,116,128, 48, 25,245,240,240,239,233,238,244,233,
-    238,103,  2,203, 87,203,103,243,237,225,236,236,244,242,233,225,
-    238,231,236,101,128, 37,181,244,242,233,225,238,231,236,101,128,
-     37,179,105,  2,203,120,203,131,232,233,242,225,231,225,238, 97,
-    128, 48,144,107,  2,203,137,203,147,225,244,225,235,225,238, 97,
-    128, 48,240,239,242,229,225,110,128, 49, 95,237,239,238,239,243,
-    240,225,227,101,128,255, 87,111,  4,203,177,203,188,203,213,203,
-    231,232,233,242,225,231,225,238, 97,128, 48,146,235,225,244,225,
-    235,225,238, 97,129, 48,242,203,201,232,225,236,230,247,233,228,
-    244,104,128,255,102,110,129, 32,169,203,219,237,239,238,239,243,
-    240,225,227,101,128,255,230,247,225,229,238,244,232,225,105,128,
-     14, 39,240,225,242,229,110,128, 36,178,242,233,238,103,128, 30,
-    152,243,245,240,229,242,233,239,114,128,  2,183,244,245,242,238,
-    229,100,128,  2,141,249,238,110,128,  1,191,120,137,  0,120,204,
-     49,204, 60,204, 71,204, 80,204,107,204,120,204,124,204,136,204,
-    144,225,226,239,246,229,227,237, 98,128,  3, 61,226,239,240,239,
-    237,239,230,111,128, 49, 18,227,233,242,227,236,101,128, 36,231,
-    100,  2,204, 86,204, 96,233,229,242,229,243,233,115,128, 30,141,
-    239,244,225,227,227,229,238,116,128, 30,139,229,232,225,242,237,
-    229,238,233,225,110,128,  5,109,105,128,  3,190,237,239,238,239,
-    243,240,225,227,101,128,255, 88,240,225,242,229,110,128, 36,179,
-    243,245,240,229,242,233,239,114,128,  2,227,121,143,  0,121,204,
-    189,205,148,205,171,205,211,207,177,207,185,207,202,208, 10,208,
-     22,209, 19,209, 59,209, 71,209, 82,209,103,210, 76, 97, 11,204,
-    213,204,225,204,235,204,242,204,249,205,  3,205, 28,205, 39,205,
-     77,205, 90,205,136,225,228,239,243,241,245,225,242,101,128, 51,
-     78,226,229,238,231,225,236,105,128,  9,175,227,245,244,101,128,
-      0,253,228,229,246, 97,128,  9, 47,229,235,239,242,229,225,110,
-    128, 49, 82,231,117,  2,205, 10,205, 19,234,225,242,225,244,105,
-    128, 10,175,242,237,245,235,232,105,128, 10, 47,232,233,242,225,
-    231,225,238, 97,128, 48,132,107,  2,205, 45,205, 69,225,244,225,
-    235,225,238, 97,129, 48,228,205, 57,232,225,236,230,247,233,228,
-    244,104,128,255,148,239,242,229,225,110,128, 49, 81,237,225,235,
-    235,225,238,244,232,225,105,128, 14, 78,243,237,225,236,108,  2,
-    205,100,205,111,232,233,242,225,231,225,238, 97,128, 48,131,235,
-    225,244,225,235,225,238, 97,129, 48,227,205,124,232,225,236,230,
-    247,233,228,244,104,128,255,108,244,227,249,242,233,236,236,233,
-     99,128,  4, 99,227,233,242, 99,  2,205,157,205,162,236,101,128,
-     36,232,245,237,230,236,229,120,128,  1,119,100,  2,205,177,205,
-    187,233,229,242,229,243,233,115,128,  0,255,239,116,  2,205,194,
-    205,203,225,227,227,229,238,116,128, 30,143,226,229,236,239,119,
-    128, 30,245,101,  7,205,227,206,235,206,244,207,  6,207, 38,207,
-    114,207,165,104,  8,205,245,205,254,206, 32,206, 46,206,119,206,
-    135,206,194,206,212,225,242,225,226,233, 99,128,  6, 74,226,225,
-    242,242,229,101,  2,206,  9,206, 18,225,242,225,226,233, 99,128,
-      6,210,230,233,238,225,236,225,242,225,226,233, 99,128,251,175,
-    230,233,238,225,236,225,242,225,226,233, 99,128,254,242,232,225,
-    237,250,225,225,226,239,246,101,  4,206, 65,206, 74,206, 88,206,
-    104,225,242,225,226,233, 99,128,  6, 38,230,233,238,225,236,225,
-    242,225,226,233, 99,128,254,138,233,238,233,244,233,225,236,225,
-    242,225,226,233, 99,128,254,139,237,229,228,233,225,236,225,242,
-    225,226,233, 99,128,254,140,233,238,233,244,233,225,236,225,242,
-    225,226,233, 99,128,254,243,237,101,  2,206,142,206,155,228,233,
-    225,236,225,242,225,226,233, 99,128,254,244,229,237,105,  2,206,
-    163,206,178,238,233,244,233,225,236,225,242,225,226,233, 99,128,
-    252,221,243,239,236,225,244,229,228,225,242,225,226,233, 99,128,
-    252, 88,238,239,239,238,230,233,238,225,236,225,242,225,226,233,
-     99,128,252,148,244,232,242,229,229,228,239,244,243,226,229,236,
-    239,247,225,242,225,226,233, 99,128,  6,209,235,239,242,229,225,
-    110,128, 49, 86,110,129,  0,165,206,250,237,239,238,239,243,240,
-    225,227,101,128,255,229,111,  2,207, 12,207, 21,235,239,242,229,
-    225,110,128, 49, 85,242,233,238,232,233,229,245,232,235,239,242,
-    229,225,110,128, 49,134,114,  3,207, 46,207, 82,207, 94,225,232,
-    226,229,238,249,239,237,111,  2,207, 60,207, 69,232,229,226,242,
-    229,119,128,  5,170,236,229,230,244,232,229,226,242,229,119,128,
-      5,170,233,227,249,242,233,236,236,233, 99,128,  4, 75,245,228,
-    233,229,242,229,243,233,243,227,249,242,233,236,236,233, 99,128,
-      4,249,243,233,229,245,238,103,  3,207,127,207,136,207,152,235,
-    239,242,229,225,110,128, 49,129,240,225,238,243,233,239,243,235,
-    239,242,229,225,110,128, 49,131,243,233,239,243,235,239,242,229,
-    225,110,128, 49,130,244,233,246,232,229,226,242,229,119,128,  5,
-    154,231,242,225,246,101,128, 30,243,232,239,239,107,129,  1,180,
-    207,194,225,226,239,246,101,128, 30,247,105,  5,207,214,207,225,
-    207,236,207,245,207,253,225,242,237,229,238,233,225,110,128,  5,
-    117,227,249,242,233,236,236,233, 99,128,  4, 87,235,239,242,229,
-    225,110,128, 49, 98,238,249,225,238,103,128, 38, 47,247,238,225,
-    242,237,229,238,233,225,110,128,  5,130,237,239,238,239,243,240,
-    225,227,101,128,255, 89,111,  7,208, 38,208,108,208,119,208,129,
-    208,167,208,213,208,222,100,131,  5,217,208, 48,208, 68,208, 77,
-    228,225,231,229,243,104,129,251, 57,208, 59,232,229,226,242,229,
-    119,128,251, 57,232,229,226,242,229,119,128,  5,217,249,239,100,
-      2,208, 85,208, 94,232,229,226,242,229,119,128,  5,242,240,225,
-    244,225,232,232,229,226,242,229,119,128,251, 31,232,233,242,225,
-    231,225,238, 97,128, 48,136,233,235,239,242,229,225,110,128, 49,
-    137,107,  2,208,135,208,159,225,244,225,235,225,238, 97,129, 48,
-    232,208,147,232,225,236,230,247,233,228,244,104,128,255,150,239,
-    242,229,225,110,128, 49, 91,243,237,225,236,108,  2,208,177,208,
-    188,232,233,242,225,231,225,238, 97,128, 48,135,235,225,244,225,
-    235,225,238, 97,129, 48,231,208,201,232,225,236,230,247,233,228,
-    244,104,128,255,110,244,231,242,229,229,107,128,  3,243,121,  2,
-    208,228,209,  9, 97,  2,208,234,208,244,229,235,239,242,229,225,
-    110,128, 49,136,107,  2,208,250,209,  2,239,242,229,225,110,128,
-     49,135,244,232,225,105,128, 14, 34,233,238,231,244,232,225,105,
-    128, 14, 13,112,  2,209, 25,209, 32,225,242,229,110,128, 36,180,
-    239,231,229,231,242,225,237,237,229,238,105,129,  3,122,209, 48,
-    231,242,229,229,235,227,237, 98,128,  3, 69,114,129,  1,166,209,
-     65,233,238,103,128, 30,153,243,245,240,229,242,233,239,114,128,
-      2,184,116,  2,209, 88,209, 95,233,236,228,101,128, 30,249,245,
-    242,238,229,100,128,  2,142,117,  5,209,115,209,126,209,136,209,
-    174,210, 50,232,233,242,225,231,225,238, 97,128, 48,134,233,235,
-    239,242,229,225,110,128, 49,140,107,  2,209,142,209,166,225,244,
-    225,235,225,238, 97,129, 48,230,209,154,232,225,236,230,247,233,
-    228,244,104,128,255,149,239,242,229,225,110,128, 49, 96,115,  3,
-    209,182,209,220,210,  5,226,233,103,  2,209,190,209,201,227,249,
-    242,233,236,236,233, 99,128,  4,107,233,239,244,233,230,233,229,
-    228,227,249,242,233,236,236,233, 99,128,  4,109,236,233,244,244,
-    236,101,  2,209,231,209,242,227,249,242,233,236,236,233, 99,128,
-      4,103,233,239,244,233,230,233,229,228,227,249,242,233,236,236,
-    233, 99,128,  4,105,237,225,236,108,  2,210, 14,210, 25,232,233,
-    242,225,231,225,238, 97,128, 48,133,235,225,244,225,235,225,238,
-     97,129, 48,229,210, 38,232,225,236,230,247,233,228,244,104,128,
-    255,109,249,101,  2,210, 57,210, 66,235,239,242,229,225,110,128,
-     49,139,239,235,239,242,229,225,110,128, 49,138,249, 97,  2,210,
-     83,210, 93,226,229,238,231,225,236,105,128,  9,223,228,229,246,
-     97,128,  9, 95,122,142,  0,122,210,132,211,140,211,151,211,194,
-    211,221,213,  0,213,108,213,150,213,162,213,174,213,202,213,210,
-    213,226,213,235, 97, 10,210,154,210,165,210,172,210,179,210,190,
-    211, 12,211, 42,211, 53,211, 89,211,101,225,242,237,229,238,233,
-    225,110,128,  5,102,227,245,244,101,128,  1,122,228,229,246, 97,
-    128,  9, 91,231,245,242,237,245,235,232,105,128, 10, 91,104,  4,
-    210,200,210,209,210,223,210,253,225,242,225,226,233, 99,128,  6,
-     56,230,233,238,225,236,225,242,225,226,233, 99,128,254,198,105,
-      2,210,229,210,244,238,233,244,233,225,236,225,242,225,226,233,
-     99,128,254,199,242,225,231,225,238, 97,128, 48, 86,237,229,228,
-    233,225,236,225,242,225,226,233, 99,128,254,200,233,110,  2,211,
-     19,211, 28,225,242,225,226,233, 99,128,  6, 50,230,233,238,225,
-    236,225,242,225,226,233, 99,128,254,176,235,225,244,225,235,225,
-    238, 97,128, 48,182,241,229,102,  2,211, 61,211, 75,231,225,228,
-    239,236,232,229,226,242,229,119,128,  5,149,241,225,244,225,238,
-    232,229,226,242,229,119,128,  5,148,242,241,225,232,229,226,242,
-    229,119,128,  5,152,249,233,110,130,  5,214,211,111,211,131,228,
-    225,231,229,243,104,129,251, 54,211,122,232,229,226,242,229,119,
-    128,251, 54,232,229,226,242,229,119,128,  5,214,226,239,240,239,
-    237,239,230,111,128, 49, 23, 99,  3,211,159,211,166,211,188,225,
-    242,239,110,128,  1,126,233,242, 99,  2,211,174,211,179,236,101,
-    128, 36,233,245,237,230,236,229,120,128, 30,145,245,242,108,128,
-      2,145,228,239,116,130,  1,124,211,204,211,213,225,227,227,229,
-    238,116,128,  1,124,226,229,236,239,119,128, 30,147,101,  6,211,
-    235,211,246,212, 33,212, 44,212, 55,212,251,227,249,242,233,236,
-    236,233, 99,128,  4, 55,100,  2,211,252,212, 15,229,243,227,229,
-    238,228,229,242,227,249,242,233,236,236,233, 99,128,  4,153,233,
-    229,242,229,243,233,243,227,249,242,233,236,236,233, 99,128,  4,
-    223,232,233,242,225,231,225,238, 97,128, 48, 92,235,225,244,225,
-    235,225,238, 97,128, 48,188,242,111,140,  0, 48,212, 84,212, 93,
-    212,103,212,110,212,135,212,148,212,159,212,171,212,182,212,192,
-    212,203,212,210,225,242,225,226,233, 99,128,  6, 96,226,229,238,
-    231,225,236,105,128,  9,230,228,229,246, 97,128,  9,102,231,117,
-      2,212,117,212,126,234,225,242,225,244,105,128, 10,230,242,237,
-    245,235,232,105,128, 10,102,232,225,227,235,225,242,225,226,233,
-     99,128,  6, 96,233,238,230,229,242,233,239,114,128, 32,128,237,
-    239,238,239,243,240,225,227,101,128,255, 16,239,236,228,243,244,
-    249,236,101,128,247, 48,240,229,242,243,233,225,110,128,  6,240,
-    243,245,240,229,242,233,239,114,128, 32,112,244,232,225,105,128,
-     14, 80,247,233,228,244,104,  3,212,222,212,231,212,243,234,239,
-    233,238,229,114,128,254,255,238,239,238,234,239,233,238,229,114,
-    128, 32, 12,243,240,225,227,101,128, 32, 11,244, 97,128,  3,182,
-    104,  2,213,  6,213, 17,226,239,240,239,237,239,230,111,128, 49,
-     19,101,  4,213, 27,213, 38,213, 54,213, 65,225,242,237,229,238,
-    233,225,110,128,  5,106,226,242,229,246,229,227,249,242,233,236,
-    236,233, 99,128,  4,194,227,249,242,233,236,236,233, 99,128,  4,
-     54,100,  2,213, 71,213, 90,229,243,227,229,238,228,229,242,227,
-    249,242,233,236,236,233, 99,128,  4,151,233,229,242,229,243,233,
-    243,227,249,242,233,236,236,233, 99,128,  4,221,105,  3,213,116,
-    213,127,213,138,232,233,242,225,231,225,238, 97,128, 48, 88,235,
-    225,244,225,235,225,238, 97,128, 48,184,238,239,242,232,229,226,
-    242,229,119,128,  5,174,236,233,238,229,226,229,236,239,119,128,
-     30,149,237,239,238,239,243,240,225,227,101,128,255, 90,111,  2,
-    213,180,213,191,232,233,242,225,231,225,238, 97,128, 48, 94,235,
-    225,244,225,235,225,238, 97,128, 48,190,240,225,242,229,110,128,
-     36,181,242,229,244,242,239,230,236,229,248,232,239,239,107,128,
-      2,144,243,244,242,239,235,101,128,  1,182,117,  2,213,241,213,
-    252,232,233,242,225,231,225,238, 97,128, 48, 90,235,225,244,225,
-    235,225,238, 97,128, 48,186
+      4,221,105,  3,218, 42,218, 53,218, 64,232,233,242,225,231,225,
+    238, 97,128, 48, 88,235,225,244,225,235,225,238, 97,128, 48,184,
+    238,239,242,232,229,226,242,229,119,128,  5,174,236,233,238,229,
+    226,229,236,239,119,128, 30,149,237,239,238,239,243,240,225,227,
+    101,128,255, 90,111,  2,218,106,218,117,232,233,242,225,231,225,
+    238, 97,128, 48, 94,235,225,244,225,235,225,238, 97,128, 48,190,
+    240,225,242,229,110,128, 36,181,242,229,244,242,239,230,236,229,
+    248,232,239,239,107,128,  2,144,243,244,242,239,235,101,128,  1,
+    182,117,  2,218,167,218,178,232,233,242,225,231,225,238, 97,128,
+     48, 90,235,225,244,225,235,225,238, 97,128, 48,186
   };
 
 
diff --git a/src/raster/ftrend1.c b/src/raster/ftrend1.c
index d8a89f2..28b1b58 100644
--- a/src/raster/ftrend1.c
+++ b/src/raster/ftrend1.c
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    The FreeType glyph rasterizer interface (body).                      */
 /*                                                                         */
-/*  Copyright 1996-2001, 2002, 2003, 2005, 2006 by                         */
+/*  Copyright 1996-2003, 2005, 2006, 2011 by                               */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -176,6 +176,13 @@
 
     width  = (FT_UInt)( ( cbox.xMax - cbox.xMin ) >> 6 );
     height = (FT_UInt)( ( cbox.yMax - cbox.yMin ) >> 6 );
+
+    if ( width > FT_USHORT_MAX || height > FT_USHORT_MAX )
+    {
+      error = Raster_Err_Invalid_Argument;
+      goto Exit;
+    }
+
     bitmap = &slot->bitmap;
     memory = render->root.memory;
 
diff --git a/src/smooth/ftgrays.c b/src/smooth/ftgrays.c
index 40de269..895e748 100644
--- a/src/smooth/ftgrays.c
+++ b/src/smooth/ftgrays.c
@@ -872,6 +872,7 @@
                               const FT_Vector*  to )
   {
     TPos        dx, dy;
+    TPos        min, max, y;
     int         top, level;
     int*        levels;
     FT_Vector*  arc;
@@ -884,45 +885,45 @@
     arc[1].y = UPSCALE( control->y );
     arc[2].x = ras.x;
     arc[2].y = ras.y;
+    top      = 0;
 
     dx = FT_ABS( arc[2].x + arc[0].x - 2 * arc[1].x );
     dy = FT_ABS( arc[2].y + arc[0].y - 2 * arc[1].y );
     if ( dx < dy )
       dx = dy;
 
+    if ( dx < ONE_PIXEL / 4 )
+      goto Draw;
+
+    /* short-cut the arc that crosses the current band */
+    min = max = arc[0].y;
+
+    y = arc[1].y;
+    if ( y < min ) min = y;
+    if ( y > max ) max = y;
+
+    y = arc[2].y;
+    if ( y < min ) min = y;
+    if ( y > max ) max = y;
+
+    if ( TRUNC( min ) >= ras.max_ey || TRUNC( max ) < ras.min_ey )
+      goto Draw;
+
     level = 0;
-    while ( dx > ONE_PIXEL / 6 )
+    do
     {
       dx >>= 2;
       level++;
-    }
+    } while ( dx > ONE_PIXEL / 4 );
 
     levels    = ras.lev_stack;
     levels[0] = level;
-    top       = 0;
 
     do
     {
       level = levels[top];
-      if ( level > 1 )
+      if ( level > 0 )
       {
-        /* check that the arc crosses the current band */
-        TPos  min, max, y;
-
-
-        min = max = arc[0].y;
-
-        y = arc[1].y;
-        if ( y < min ) min = y;
-        if ( y > max ) max = y;
-
-        y = arc[2].y;
-        if ( y < min ) min = y;
-        if ( y > max ) max = y;
-
-        if ( TRUNC( min ) >= ras.max_ey || TRUNC( max ) < ras.min_ey )
-          goto Draw;
-
         gray_split_conic( arc );
         arc += 2;
         top++;
@@ -973,6 +974,7 @@
                               const FT_Vector*  to )
   {
     FT_Vector*  arc;
+    TPos        min, max, y;
 
 
     arc      = ras.bez_stack;
@@ -985,35 +987,32 @@
     arc[3].x = ras.x;
     arc[3].y = ras.y;
 
+    /* Short-cut the arc that crosses the current band. */
+    min = max = arc[0].y;
+
+    y = arc[1].y;
+    if ( y < min )
+      min = y;
+    if ( y > max )
+      max = y;
+
+    y = arc[2].y;
+    if ( y < min )
+      min = y;
+    if ( y > max )
+      max = y;
+
+    y = arc[3].y;
+    if ( y < min )
+      min = y;
+    if ( y > max )
+      max = y;
+
+    if ( TRUNC( min ) >= ras.max_ey || TRUNC( max ) < ras.min_ey )
+      goto Draw;
+
     for (;;)
     {
-      /* Check that the arc crosses the current band. */
-      TPos  min, max, y;
-
-
-      min = max = arc[0].y;
-
-      y = arc[1].y;
-      if ( y < min )
-        min = y;
-      if ( y > max )
-        max = y;
-
-      y = arc[2].y;
-      if ( y < min )
-        min = y;
-      if ( y > max )
-        max = y;
-
-      y = arc[3].y;
-      if ( y < min )
-        min = y;
-      if ( y > max )
-        max = y;
-
-      if ( TRUNC( min ) >= ras.max_ey || TRUNC( max ) < ras.min_ey )
-        goto Draw;
-
       /* Decide whether to split or draw. See `Rapid Termination          */
       /* Evaluation for Recursive Subdivision of Bezier Curves' by Thomas */
       /* F. Hain, at                                                      */
diff --git a/src/truetype/ttgxvar.c b/src/truetype/ttgxvar.c
index 37bbe6d..69b702f 100644
--- a/src/truetype/ttgxvar.c
+++ b/src/truetype/ttgxvar.c
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    TrueType GX Font Variation loader                                    */
 /*                                                                         */
-/*  Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010 by                  */
+/*  Copyright 2004-2011 by                                                 */
 /*  David Turner, Robert Wilhelm, Werner Lemberg, and George Williams.     */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -1474,6 +1474,9 @@
       {
         for ( j = 0; j < point_count; ++j )
         {
+          if ( localpoints[j] >= n_points )
+            continue;
+
           delta_xy[localpoints[j]].x += FT_MulFix( deltas_x[j], apply );
           delta_xy[localpoints[j]].y += FT_MulFix( deltas_y[j], apply );
         }