Oops.
Oops.
This commit is contained in:
		
							
								
								
									
										1
									
								
								modules/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								modules/Makefile.am
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| SUBDIRS=linux-fb | ||||
							
								
								
									
										35
									
								
								modules/linux-fb/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								modules/linux-fb/Makefile.am
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,35 @@ | ||||
| ## Process this file with automake to produce Makefile.in | ||||
|  | ||||
| INCLUDES = @STRIP_BEGIN@ 	\ | ||||
| 	-DG_LOG_DOMAIN=\"Gdk\"	\ | ||||
| 	-I$(top_srcdir)		\ | ||||
| 	-I$(top_srcdir)/gdk	\ | ||||
| 	-I$(top_builddir)/gdk	\ | ||||
| 	-I$(top_srcdir)/gdk/linux-fb \ | ||||
| 	@GTK_DEBUG_FLAGS@ 	\ | ||||
| 	@GTK_XIM_FLAGS@		\ | ||||
| 	@GTK_LOCALE_FLAGS@	\ | ||||
| 	@GLIB_CFLAGS@		\ | ||||
| 	@PANGO_CFLAGS@		\ | ||||
| @STRIP_END@ | ||||
|  | ||||
| LDFLAGS = @STRIP_BEGIN@ \ | ||||
| 	@GLIB_LIBS@	\ | ||||
| 	@PANGO_CFLAGS@	\ | ||||
| 	-L/gnome2/lib   \ | ||||
| 	-lfreetype	\ | ||||
| 	-lm		\ | ||||
| @STRIP_END@ | ||||
|  | ||||
| moduledir = $(libdir)/pango/modules | ||||
| module_LTLIBRARIES = fb-basic.la | ||||
|  | ||||
| fb_basic_la_LDFLAGS = -export-dynamic -avoid-version -module | ||||
| fb_basic_la_LIBADD = $(PANGO_LIBS) -L$(top_builddir)/gdk/.libs -lgdk-linux-fb | ||||
| fb_basic_la_SOURCES = $(sources) | ||||
|  | ||||
| fb_basic_la_SOURCES = basic.c | ||||
|  | ||||
| EXTRA_DIST =            \ | ||||
|         tables-big.i    \ | ||||
|         tables-small.i | ||||
							
								
								
									
										498
									
								
								modules/linux-fb/basic.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										498
									
								
								modules/linux-fb/basic.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,498 @@ | ||||
| /* Pango | ||||
|  * basic.c: | ||||
|  * | ||||
|  * Copyright (C) 1999 Red Hat Software | ||||
|  * | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
|  * License as published by the Free Software Foundation; either | ||||
|  * version 2 of the License, or (at your option) any later version. | ||||
|  * | ||||
|  * This library is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU | ||||
|  * Library General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Library General Public | ||||
|  * License along with this library; if not, write to the | ||||
|  * Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||||
|  * Boston, MA 02111-1307, USA. | ||||
|  */ | ||||
|  | ||||
| #include <iconv.h> | ||||
|  | ||||
| #include <glib.h> | ||||
| #include <pango/pango.h> | ||||
| #include "gdkprivate-fb.h" | ||||
| #include <unicode.h> | ||||
| #include <fribidi/fribidi.h> | ||||
|  | ||||
| PangoGlyph | ||||
| pango_fb_get_unknown_glyph(PangoFont *font) | ||||
| { | ||||
|   return '*'; | ||||
| } | ||||
|  | ||||
| typedef struct _CharRange CharRange; | ||||
| typedef struct _Charset Charset; | ||||
| typedef struct _CharCache CharCache; | ||||
| typedef struct _MaskTable MaskTable; | ||||
|  | ||||
| #define MAX_CHARSETS 32 | ||||
|  | ||||
| typedef PangoGlyph (*ConvFunc) (CharCache *cache, | ||||
| 				Charset *charset, | ||||
| 				const gchar *input); | ||||
| struct _CharRange | ||||
| { | ||||
|   guint16 start; | ||||
|   guint16 end; | ||||
|   guint16 charsets; | ||||
| }; | ||||
|  | ||||
| struct _MaskTable  | ||||
| { | ||||
|   int n_subfonts; | ||||
|  | ||||
|   Charset **charsets; | ||||
| }; | ||||
|  | ||||
| #define MAX_CHARSETS 32 | ||||
|  | ||||
| struct _CharCache  | ||||
| { | ||||
| #if 0 | ||||
|   MaskTable *mask_tables[256]; | ||||
| #endif | ||||
|   iconv_t converters[MAX_CHARSETS]; | ||||
| }; | ||||
|  | ||||
| struct _Charset | ||||
| { | ||||
|   int   index; | ||||
|   char *id; | ||||
|   char *x_charset; | ||||
|   ConvFunc conv_func; | ||||
| }; | ||||
|  | ||||
| static PangoGlyph conv_8bit (CharCache  *cache, | ||||
| 			     Charset    *charset, | ||||
| 			     const char *input); | ||||
| static PangoGlyph conv_euc (CharCache  *cache, | ||||
| 			    Charset    *charset, | ||||
| 			    const char *input); | ||||
| static PangoGlyph conv_ucs4 (CharCache  *cache, | ||||
| 			     Charset    *charset, | ||||
| 			     const char *input); | ||||
|  | ||||
| /* From pango/utils.h */ | ||||
| typedef guint16 GUChar2; | ||||
| typedef guint32 GUChar4; | ||||
|  | ||||
| gboolean _pango_utf8_iterate    (const char  *cur, | ||||
| 				 const char **next, | ||||
| 				 GUChar4     *wc_out); | ||||
| GUChar2 *_pango_utf8_to_ucs2    (const char  *str, | ||||
| 				 gint         len); | ||||
| GUChar4 *_pango_utf8_to_ucs4    (const char  *str, | ||||
| 			         int          len); | ||||
| int      _pango_guchar4_to_utf8 (GUChar4      c, | ||||
| 				 char        *outbuf); | ||||
| int      _pango_utf8_len        (const char  *str, | ||||
| 				 gint         limit); | ||||
|  | ||||
| #include "tables-big.i" | ||||
|  | ||||
| static PangoEngineInfo script_engines[] = { | ||||
|   { | ||||
|     "BasicScriptEngineLang", | ||||
|     PANGO_ENGINE_TYPE_LANG, | ||||
|     PANGO_RENDER_TYPE_NONE, | ||||
|     basic_ranges, G_N_ELEMENTS(basic_ranges) | ||||
|   }, | ||||
|   { | ||||
|     "BasicScriptEngineFB", | ||||
|     PANGO_ENGINE_TYPE_SHAPE, | ||||
|     "PangoRenderTypeFB", | ||||
|     basic_ranges, G_N_ELEMENTS(basic_ranges) | ||||
|   } | ||||
| }; | ||||
|  | ||||
| static gint n_script_engines = G_N_ELEMENTS (script_engines); | ||||
|  | ||||
| /* | ||||
|  * Language script engine | ||||
|  */ | ||||
|  | ||||
| static void  | ||||
| basic_engine_break (const char     *text, | ||||
| 		    gint            len, | ||||
| 		    PangoAnalysis  *analysis, | ||||
| 		    PangoLogAttr   *attrs) | ||||
| { | ||||
| } | ||||
|  | ||||
| static PangoEngine * | ||||
| basic_engine_lang_new () | ||||
| { | ||||
|   PangoEngineLang *result; | ||||
|    | ||||
|   result = g_new (PangoEngineLang, 1); | ||||
|  | ||||
|   result->engine.id = "BasicScriptEngine"; | ||||
|   result->engine.type = PANGO_ENGINE_TYPE_LANG; | ||||
|   result->engine.length = sizeof (result); | ||||
|   result->script_break = basic_engine_break; | ||||
|  | ||||
|   return (PangoEngine *)result; | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * FB window system script engine portion | ||||
|  */ | ||||
|  | ||||
| static CharCache * | ||||
| char_cache_new (void) | ||||
| { | ||||
|   CharCache *result; | ||||
|   int i; | ||||
|  | ||||
|   result = g_new0 (CharCache, 1); | ||||
|  | ||||
|   for (i=0; i < MAX_CHARSETS; i++) | ||||
|     result->converters[i] = (iconv_t)-1; | ||||
|  | ||||
|   return result; | ||||
| } | ||||
|  | ||||
| static void | ||||
| char_cache_free (CharCache *cache) | ||||
| { | ||||
|   int i; | ||||
|  | ||||
| #if 0 | ||||
|   for (i=0; i < 256; i++) | ||||
|     if (cache->mask_tables[i]) | ||||
|       { | ||||
| 	g_free (cache->mask_tables[i]->subfonts); | ||||
| 	g_free (cache->mask_tables[i]->charsets); | ||||
| 	 | ||||
| 	g_free (cache->mask_tables[i]); | ||||
|       } | ||||
| #endif | ||||
|  | ||||
|   for (i=0; i<MAX_CHARSETS; i++) | ||||
|     if (cache->converters[i] != (iconv_t)-1) | ||||
|       iconv_close (cache->converters[i]); | ||||
|    | ||||
|   g_free (cache); | ||||
| } | ||||
|  | ||||
| PangoGlyph  | ||||
| find_char (CharCache *cache, PangoFont *font, GUChar4 wc, const char *input) | ||||
| { | ||||
|   return FT_Get_Char_Index(PANGO_FB_FONT(font)->ftf, wc); | ||||
| } | ||||
|  | ||||
| static void | ||||
| set_glyph (PangoFont *font, PangoGlyphString *glyphs, int i, int offset, PangoGlyph glyph) | ||||
| { | ||||
|   PangoRectangle logical_rect; | ||||
|  | ||||
|   glyphs->glyphs[i].glyph = glyph; | ||||
|    | ||||
|   glyphs->glyphs[i].geometry.x_offset = 0; | ||||
|   glyphs->glyphs[i].geometry.y_offset = 0; | ||||
|  | ||||
|   glyphs->log_clusters[i] = offset; | ||||
|  | ||||
|   pango_font_get_glyph_extents (font, glyphs->glyphs[i].glyph, NULL, &logical_rect); | ||||
|   glyphs->glyphs[i].geometry.width = logical_rect.width; | ||||
| } | ||||
|  | ||||
| static iconv_t | ||||
| find_converter (CharCache *cache, Charset *charset) | ||||
| { | ||||
|   iconv_t cd = cache->converters[charset->index]; | ||||
|   if (cd == (iconv_t)-1) | ||||
|     { | ||||
|       cd = iconv_open  (charset->id, "UTF-8"); | ||||
|       g_assert (cd != (iconv_t)-1); | ||||
|       cache->converters[charset->index] = cd; | ||||
|     } | ||||
|  | ||||
|   return cd; | ||||
| } | ||||
|  | ||||
| static PangoGlyph | ||||
| conv_8bit (CharCache  *cache, | ||||
| 	   Charset *charset, | ||||
| 	   const char *input) | ||||
| { | ||||
|   iconv_t cd; | ||||
|   char outbuf; | ||||
|   const char *p; | ||||
|    | ||||
|   const char *inptr = input; | ||||
|   size_t inbytesleft; | ||||
|   char *outptr = &outbuf; | ||||
|   size_t outbytesleft = 1; | ||||
|  | ||||
|   _pango_utf8_iterate (input, &p, NULL); | ||||
|   inbytesleft = p - input; | ||||
|    | ||||
|   cd = find_converter (cache, charset); | ||||
|  | ||||
|   iconv (cd, (const char **)&inptr, &inbytesleft, &outptr, &outbytesleft); | ||||
|  | ||||
|   return (guchar)outbuf; | ||||
| } | ||||
|  | ||||
| static PangoGlyph | ||||
| conv_euc (CharCache  *cache, | ||||
| 	  Charset     *charset, | ||||
| 	  const char *input) | ||||
| { | ||||
|   iconv_t cd; | ||||
|   char outbuf[2]; | ||||
|   const char *p; | ||||
|  | ||||
|   const char *inptr = input; | ||||
|   size_t inbytesleft; | ||||
|   char *outptr = outbuf; | ||||
|   size_t outbytesleft = 2; | ||||
|  | ||||
|   _pango_utf8_iterate (input, &p, NULL); | ||||
|   inbytesleft = p - input; | ||||
|    | ||||
|   cd = find_converter (cache, charset); | ||||
|  | ||||
|   iconv (cd, &inptr, &inbytesleft, &outptr, &outbytesleft); | ||||
|  | ||||
|   if ((guchar)outbuf[0] < 128) | ||||
|     return outbuf[0]; | ||||
|   else | ||||
|     return ((guchar)outbuf[0] & 0x7f) * 256 + ((guchar)outbuf[1] & 0x7f); | ||||
| } | ||||
|  | ||||
| static PangoGlyph | ||||
| conv_ucs4 (CharCache  *cache, | ||||
| 	   Charset     *charset, | ||||
| 	   const char *input) | ||||
| { | ||||
|   GUChar4 wc; | ||||
|    | ||||
|   unicode_get_utf8 (input, &wc); | ||||
|   return wc; | ||||
| } | ||||
|  | ||||
| static void | ||||
| swap_range (PangoGlyphString *glyphs, int start, int end) | ||||
| { | ||||
|   int i, j; | ||||
|    | ||||
|   for (i = start, j = end - 1; i < j; i++, j--) | ||||
|     { | ||||
|       PangoGlyphInfo glyph_info; | ||||
|       gint log_cluster; | ||||
|        | ||||
|       glyph_info = glyphs->glyphs[i]; | ||||
|       glyphs->glyphs[i] = glyphs->glyphs[j]; | ||||
|       glyphs->glyphs[j] = glyph_info; | ||||
|        | ||||
|       log_cluster = glyphs->log_clusters[i]; | ||||
|       glyphs->log_clusters[i] = glyphs->log_clusters[j]; | ||||
|       glyphs->log_clusters[j] = log_cluster; | ||||
|     } | ||||
| } | ||||
|  | ||||
| static CharCache * | ||||
| get_char_cache (PangoFont *font) | ||||
| { | ||||
|   GQuark cache_id = g_quark_from_string ("basic-char-cache"); | ||||
|    | ||||
|   CharCache *cache = g_object_get_qdata (G_OBJECT (font), cache_id); | ||||
|   if (!cache) | ||||
|     { | ||||
|       cache = char_cache_new (); | ||||
|       g_object_set_qdata_full (G_OBJECT (font), cache_id,  | ||||
| 			       cache, (GDestroyNotify)char_cache_free); | ||||
|     } | ||||
|  | ||||
|   return cache; | ||||
| } | ||||
|  | ||||
| static void  | ||||
| basic_engine_shape (PangoFont        *font, | ||||
| 		    const char       *text, | ||||
| 		    gint              length, | ||||
| 		    PangoAnalysis    *analysis, | ||||
| 		    PangoGlyphString *glyphs) | ||||
| { | ||||
|   int n_chars; | ||||
|   int i; | ||||
|   const char *p; | ||||
|   const char *next; | ||||
|  | ||||
|   CharCache *cache; | ||||
|  | ||||
|   g_return_if_fail (font != NULL); | ||||
|   g_return_if_fail (text != NULL); | ||||
|   g_return_if_fail (length >= 0); | ||||
|   g_return_if_fail (analysis != NULL); | ||||
|  | ||||
|   cache = get_char_cache (font); | ||||
|  | ||||
|   n_chars = unicode_strlen (text, length); | ||||
|   pango_glyph_string_set_size (glyphs, n_chars); | ||||
|  | ||||
|   p = text; | ||||
|   for (i=0; i < n_chars; i++) | ||||
|     { | ||||
|       GUChar4 wc; | ||||
|       FriBidiChar mirrored_ch; | ||||
|       PangoGlyph index; | ||||
|       char buf[6]; | ||||
|       const char *input; | ||||
|  | ||||
|       _pango_utf8_iterate (p, &next, &wc); | ||||
|  | ||||
|       input = p; | ||||
|       if (analysis->level % 2) | ||||
| 	if (fribidi_get_mirror_char (wc, &mirrored_ch)) | ||||
| 	  { | ||||
| 	    wc = mirrored_ch; | ||||
| 	     | ||||
| 	    _pango_guchar4_to_utf8 (wc, buf); | ||||
| 	    input = buf; | ||||
| 	  } | ||||
|  | ||||
|       if (wc == 0x200B || wc == 0x200E || wc == 0x200F)	/* Zero-width characters */ | ||||
| 	{ | ||||
| 	  set_glyph (font, glyphs, i, p - text, 0); | ||||
| 	} | ||||
|       else | ||||
| 	{ | ||||
| 	  index = find_char (cache, font, wc, input); | ||||
| 	  if (index) | ||||
| 	    { | ||||
| 	      set_glyph (font, glyphs, i, p - text, index); | ||||
| 	       | ||||
| 	      if (unicode_type (wc) == UNICODE_NON_SPACING_MARK) | ||||
| 		{ | ||||
| 		  if (i > 0) | ||||
| 		    { | ||||
| 		      PangoRectangle logical_rect, ink_rect; | ||||
| 		       | ||||
| 		      glyphs->glyphs[i].geometry.width = MAX (glyphs->glyphs[i-1].geometry.width, | ||||
| 							      glyphs->glyphs[i].geometry.width); | ||||
| 		      glyphs->glyphs[i-1].geometry.width = 0; | ||||
| 		      glyphs->log_clusters[i] = glyphs->log_clusters[i-1]; | ||||
|  | ||||
| 		      /* Some heuristics to try to guess how overstrike glyphs are | ||||
| 		       * done and compensate | ||||
| 		       */ | ||||
| 		      pango_font_get_glyph_extents (font, glyphs->glyphs[i].glyph, &ink_rect, &logical_rect); | ||||
| 		      if (logical_rect.width == 0 && ink_rect.x == 0) | ||||
| 			glyphs->glyphs[i].geometry.x_offset = (glyphs->glyphs[i].geometry.width - ink_rect.width) / 2; | ||||
| 		    } | ||||
| 		} | ||||
| 	    } | ||||
| 	  else | ||||
| 	    set_glyph (font, glyphs, i, p - text, pango_fb_get_unknown_glyph (font)); | ||||
| 	} | ||||
|        | ||||
|       p = next; | ||||
|     } | ||||
|  | ||||
|   /* Simple bidi support... may have separate modules later */ | ||||
|  | ||||
|   if (analysis->level % 2) | ||||
|     { | ||||
|       int start, end; | ||||
|  | ||||
|       /* Swap all glyphs */ | ||||
|       swap_range (glyphs, 0, n_chars); | ||||
|        | ||||
|       /* Now reorder glyphs within each cluster back to LTR */ | ||||
|       for (start=0; start<n_chars;) | ||||
| 	{ | ||||
| 	  end = start; | ||||
| 	  while (end < n_chars && | ||||
| 		 glyphs->log_clusters[end] == glyphs->log_clusters[start]) | ||||
| 	    end++; | ||||
| 	   | ||||
| 	  swap_range (glyphs, start, end); | ||||
| 	  start = end; | ||||
| 	} | ||||
|     } | ||||
| } | ||||
|  | ||||
| static PangoCoverage * | ||||
| basic_engine_get_coverage (PangoFont  *font, | ||||
| 			   const char *lang) | ||||
| { | ||||
|   CharCache *cache = get_char_cache (font); | ||||
|   PangoCoverage *result = pango_coverage_new (); | ||||
|   GUChar4 wc; | ||||
|  | ||||
|   for (wc = 0; wc < 65536; wc++) | ||||
|     { | ||||
|       char buf[6]; | ||||
|  | ||||
|       _pango_guchar4_to_utf8 (wc, buf); | ||||
|       if (find_char (cache, font, wc, buf)) | ||||
| 	pango_coverage_set (result, wc, PANGO_COVERAGE_EXACT); | ||||
|     } | ||||
|  | ||||
|   return result; | ||||
| } | ||||
|  | ||||
| static PangoEngine * | ||||
| basic_engine_fb_new () | ||||
| { | ||||
|   PangoEngineShape *result; | ||||
|    | ||||
|   result = g_new (PangoEngineShape, 1); | ||||
|  | ||||
|   result->engine.id = "BasicScriptEngineFB"; | ||||
|   result->engine.type = PANGO_ENGINE_TYPE_LANG; | ||||
|   result->engine.length = sizeof (result); | ||||
|   result->script_shape = basic_engine_shape; | ||||
|   result->get_coverage = basic_engine_get_coverage; | ||||
|  | ||||
|   return (PangoEngine *)result; | ||||
| } | ||||
|  | ||||
| /* The following three functions provide the public module API for | ||||
|  * Pango | ||||
|  */ | ||||
| #ifdef MODULE_PREFIX | ||||
| #define MODULE_ENTRY(func) _pango_basic_##func | ||||
| #else | ||||
| #define MODULE_ENTRY(func) func | ||||
| #endif | ||||
|  | ||||
| void  | ||||
| MODULE_ENTRY(script_engine_list) (PangoEngineInfo **engines, gint *n_engines) | ||||
| { | ||||
|   *engines = script_engines; | ||||
|   *n_engines = n_script_engines; | ||||
| } | ||||
|  | ||||
| PangoEngine * | ||||
| MODULE_ENTRY(script_engine_load) (const char *id) | ||||
| { | ||||
|   if (!strcmp (id, "BasicScriptEngineFB")) | ||||
|     return basic_engine_fb_new (); | ||||
|   else if (!strcmp (id, "BasicScriptEngineLang")) | ||||
|     return basic_engine_lang_new (); | ||||
|   else | ||||
|     return NULL; | ||||
| } | ||||
|  | ||||
| void  | ||||
| MODULE_ENTRY(script_engine_unload) (PangoEngine *engine) | ||||
| { | ||||
| } | ||||
|  | ||||
							
								
								
									
										4212
									
								
								modules/linux-fb/tables-big.i
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4212
									
								
								modules/linux-fb/tables-big.i
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										600
									
								
								modules/linux-fb/tables-small.i
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										600
									
								
								modules/linux-fb/tables-small.i
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,600 @@ | ||||
| enum { | ||||
|   ENC_ISO_8859_1 = 1 << 0, | ||||
|   ENC_ISO_8859_2 = 1 << 1, | ||||
|   ENC_ISO_8859_3 = 1 << 2, | ||||
|   ENC_ISO_8859_4 = 1 << 3, | ||||
|   ENC_ISO_8859_5 = 1 << 4, | ||||
|   ENC_ISO_8859_6 = 1 << 5, | ||||
|   ENC_ISO_8859_7 = 1 << 6, | ||||
|   ENC_ISO_8859_8 = 1 << 7, | ||||
|   ENC_ISO_8859_9 = 1 << 8, | ||||
|   ENC_ISO_10646  = 1 << 12 | ||||
| }; | ||||
|  | ||||
| Charset charsets[] = { | ||||
|   { 0, "ISO-8859-1", "iso8859-1", conv_ucs4 }, | ||||
|   { 1, "ISO-8859-2", "iso8859-2", conv_8bit }, | ||||
|   { 2, "ISO-8859-3", "iso8859-3", conv_8bit }, | ||||
|   { 3, "ISO-8859-4", "iso8859-4", conv_8bit }, | ||||
|   { 4, "ISO-8859-5", "iso8859-5", conv_8bit }, | ||||
|   { 5, "ISO-8859-6", "iso8859-6", conv_8bit }, | ||||
|   { 6, "ISO-8859-7", "iso8859-7", conv_8bit }, | ||||
|   { 7, "ISO-8859-8", "iso8859-8", conv_8bit }, | ||||
|   { 8, "ISO-8859-9", "iso8859-9", conv_8bit }, | ||||
|   { 9, "ISO-10646",  "iso10646-1", conv_ucs4 } | ||||
| }; | ||||
|  | ||||
| static PangoEngineRange basic_ranges[] = { | ||||
|   { 0x0000, 0x02af, "*" }, | ||||
|   { 0x02b0, 0x02ff, "" }, | ||||
|   { 0x0380, 0x058f, "*" }, | ||||
|   { 0x0591, 0x05f4, "*" }, /* Hebrew */ | ||||
|   { 0x060c, 0x06f9, "" },  /* Arabic */ | ||||
|   { 0x2015, 0x2017, "*" }, | ||||
| }; | ||||
|  | ||||
| const guint32 char_mask_map[] = { | ||||
|   0, | ||||
|   ENC_ISO_8859_1|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_5|ENC_ISO_8859_6|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9, | ||||
|   ENC_ISO_8859_1|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_5|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9, | ||||
|   ENC_ISO_8859_1|ENC_ISO_8859_9, | ||||
|   ENC_ISO_8859_1|ENC_ISO_8859_8|ENC_ISO_8859_9, | ||||
|   ENC_ISO_8859_1|ENC_ISO_8859_3|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9, | ||||
|   ENC_ISO_8859_1|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_6|ENC_ISO_8859_8|ENC_ISO_8859_9, | ||||
|   ENC_ISO_8859_1|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9, | ||||
|   ENC_ISO_8859_1|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9, | ||||
|   ENC_ISO_8859_1|ENC_ISO_8859_4|ENC_ISO_8859_9, | ||||
|   ENC_ISO_8859_1|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_8|ENC_ISO_8859_9, | ||||
|   ENC_ISO_8859_1|ENC_ISO_8859_3|ENC_ISO_8859_8|ENC_ISO_8859_9, | ||||
|   ENC_ISO_8859_1|ENC_ISO_8859_3|ENC_ISO_8859_9, | ||||
|   ENC_ISO_8859_1|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_9, | ||||
|   ENC_ISO_8859_1|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_9, | ||||
|   ENC_ISO_8859_1, | ||||
|   ENC_ISO_8859_1|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_9, | ||||
|   ENC_ISO_8859_1|ENC_ISO_8859_2, | ||||
|   ENC_ISO_8859_4, | ||||
|   ENC_ISO_8859_2, | ||||
|   ENC_ISO_8859_2|ENC_ISO_8859_4, | ||||
|   ENC_ISO_8859_3, | ||||
|   ENC_ISO_8859_3|ENC_ISO_8859_9, | ||||
|   ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_9, | ||||
|   ENC_ISO_8859_2|ENC_ISO_8859_3, | ||||
|   ENC_ISO_8859_7, | ||||
|   ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4, | ||||
|   ENC_ISO_8859_5, | ||||
|   ENC_ISO_8859_8, | ||||
|   ENC_ISO_8859_6 | ||||
| }; | ||||
|  | ||||
| const guchar char_masks[] = { | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, | ||||
|   2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  1,  1,  1,  1,  1,  1, | ||||
|   1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, | ||||
|   1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, | ||||
|   1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, | ||||
|   1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   1,  3,  4,  5,  6,  4,  7,  2,  8,  7,  3,  7,  7,  1,  4,  9, | ||||
|   8,  7,  5,  5, 10, 11,  4,  5, 10,  4,  3,  7,  4,  5,  4,  3, | ||||
|  12, 13, 13,  9, 13,  9,  9, 14, 12, 13, 12, 13, 12, 13, 13, 12, | ||||
|  15, 12, 12, 14, 13,  9, 13, 10,  9, 12, 13, 16, 13, 17, 15, 13, | ||||
|  12, 13, 13,  9, 13,  9,  9, 14, 12, 13, 12, 13, 12, 13, 13, 12, | ||||
|  15, 12, 12, 14, 13,  9, 13, 10,  9, 12, 13, 16, 13, 17, 15,  3, | ||||
|  18, 18, 19, 19, 20, 20, 19, 19, 21, 21, 21, 21, 20, 20, 19, 19, | ||||
|  20, 20, 18, 18,  0,  0, 18, 18, 20, 20, 19, 19, 21, 21, 22, 22, | ||||
|  21, 21, 18, 18, 21, 21, 21, 21, 18, 18, 18, 18,  0,  0, 18, 18, | ||||
|  22, 22,  0,  0, 21, 21, 18, 18, 18, 19, 19, 18, 18, 19, 19,  0, | ||||
|   0, 19, 19, 19, 19, 18, 18, 19, 19,  0, 18, 18, 18, 18,  0,  0, | ||||
|  19, 19,  0,  0, 19, 19, 18, 18, 19, 19, 19, 19, 21, 21, 23, 23, | ||||
|  20, 20, 19, 19, 19, 19, 18, 18, 18, 18, 18, 18, 21, 21, 19, 19, | ||||
|  19, 19, 18, 18,  0,  0,  0,  0,  0, 19, 19, 24, 24, 20, 20,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 25, 25,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0, 20,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0, 24, 26,  0, 20,  0, 19,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0, 25, 25, 25,  0, 25, 25, 25,  0, 25,  0, 25, 25, | ||||
|  25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, | ||||
|  25, 25,  0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, | ||||
|  25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, | ||||
|  25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,  0, 27, 27, | ||||
|  27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, | ||||
|  27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, | ||||
|  27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, | ||||
|  27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, | ||||
|   0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,  0, 27, 27, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|  28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, | ||||
|  28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 29,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 29,  0,  0,  0, 29, | ||||
|   0, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, | ||||
|  29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,  0,  0,  0,  0,  0, | ||||
|  29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, | ||||
|  29, 29, 29,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|  29, 29, 29, 29, 29, 29, 29, 29, 29, 29,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0, 25,  0, 28,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, | ||||
|   0,  0,  0,  0,  0,  0, 27, | ||||
| }; | ||||
		Reference in New Issue
	
	Block a user
	 Elliot Lee
					Elliot Lee