diff --git a/ChangeLog b/ChangeLog index 0a308db9c8..8d381eaa68 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,28 @@ +Sat Jan 3 16:48:02 PST 1998 Manish Singh + + * app/colormaps.c: check for NULL pointer access when not enough + colormaps for standard colormaps (gimp-joke-971219-0) + + * app/fileops.c: fix for saving files in the wrong place + + * app/fuzzy_select.c: now less aggressive (doesn't grab the whole + image with diagonal 1-pixel wide line) Too conservative now? + + * app/text_tool.c: negative border-value disables autocropping + of text + + * libgimp/gimplayer.c: gimp_layer_copy pdb called with correct args + + * docs/Wilber.xcf.gz: added logo to docs dir :) + + * Added DigitalSignature, FractalExplorer (not made by default), + facesaver (not made by default), and Stegano plugins + + * Updated Encrypt_Decrypt, changing the dir name (no more + Encript_Decript) + + * Updated plugins with their new registry versions + Thu Dec 25 23:04:00 PST 1997 Manish Singh * Updates from the plugin registry: Compose, Film, FITS, ps, diff --git a/NOTES b/NOTES index c1c45ce1ef..27152840f4 100644 --- a/NOTES +++ b/NOTES @@ -1,8 +1,8 @@ -Some notes on GIMP-0.99.16: +Some notes on GIMP-0.99.17: -* The AA, MathMap, GimpTcl, GAG, user_filter, rcm, and Gfig plugins are -included but not yet integrated into the build cause of instability or -other unresolved issues. +* The AA, MathMap, GimpTcl, GAG, user_filter, rcm, FractalExplorer, and Gfig +plugins are included but not yet integrated into the build cause of instability +or other unresolved issues. Please read the file TODO-DIST to find more information about things that were not included or that are (possibly) broken in this distribution. @@ -11,3 +11,4 @@ that were not included or that are (possibly) broken in this distribution. -- Federico Mena -- Christoph Hoegl +-- Manish Singh diff --git a/README b/README index 60e1df0f6c..e85360b5ff 100644 --- a/README +++ b/README @@ -1,12 +1,12 @@ The GIMP: the GNU Image Manipulation Program -------------------------------------------- -This is version 0.99.16 of the GIMP. For the most part it contains all +This is version 0.99.17 of the GIMP. For the most part it contains all of the features that will be in version 1.0 of the GIMP. It does, however, lack a) documentation, b) robustness and c) some of the plug-ins found in the 0.54 version. -The main difference between v0.99.16 and much earlier versions is the +The main difference between v0.99.17 and much earlier versions is the use of a tile based memory management for images. This allows the GIMP to work with images much larger than physical memory in a usable fashion. Before such memory management, the GIMP was nearly unusable diff --git a/TODO b/TODO index c572269a42..c3bd551a2e 100644 --- a/TODO +++ b/TODO @@ -3,9 +3,6 @@ discovered. * Fix srand/srandom and rand/random confusion in plugins -* Fix megawidget link ordering in deinterlace, emboss, hot, nlfilt, - sinus, and waves plugins - * configure: SunOS 4 SEEK_* and RAND_MAX defines * configure: check for regex library presence diff --git a/app/colormaps.c b/app/colormaps.c index b5d6164f10..0927438020 100644 --- a/app/colormaps.c +++ b/app/colormaps.c @@ -19,11 +19,17 @@ #include #include "appenv.h" #include "app_procs.h" +#include "brushes.h" #include "colormaps.h" #include "errors.h" #include "general.h" #include "gimprc.h" -#include "colormaps.h" +#include "gradient.h" +#include "palette.h" +#include "patterns.h" +#include "plug_in.h" +#include "temp_buf.h" +#include "tile_swap.h" GdkVisual *g_visual = NULL; @@ -194,8 +200,23 @@ get_standard_colormaps () gtk_widget_set_default_colormap (gtk_preview_get_cmap ()); info = gtk_preview_get_info (); - g_visual = info->visual; + + if (g_visual->depth == 8 && info->reserved_pixels == NULL) { + g_print("GIMP cannot get enough colormaps to boot.\n"); + g_print("Try exiting other color intensive applications.\n"); + swapping_free (); + brushes_free (); + patterns_free (); + palettes_free (); + gradients_free (); + palette_free (); + procedural_db_free (); + plug_in_kill (); + tile_swap_exit (); + gtk_exit(0); + } + g_cmap = info->cmap; color_pixel_vals = info->color_pixels; gray_pixel_vals = info->gray_pixels; diff --git a/app/fileops.c b/app/fileops.c index c866147d7f..7c5f07adf5 100644 --- a/app/fileops.c +++ b/app/fileops.c @@ -543,7 +543,8 @@ file_save_callback (GtkWidget *w, file_save_as_callback (w, client_data); } else - file_save (gdisplay->gimage->ID, gimage_filename (gdisplay->gimage), gimage_filename(gdisplay->gimage)); + file_save (gdisplay->gimage->ID, gimage_filename (gdisplay->gimage), + prune_filename (gimage_filename(gdisplay->gimage))); } } @@ -788,7 +789,7 @@ file_save (int image_ID, gimage_clean_all (gimage); /* set the image title */ - gimage_set_filename (gimage, prune_filename (filename)); + gimage_set_filename (gimage, filename); } g_free (return_vals); diff --git a/app/fuzzy_select.c b/app/fuzzy_select.c index 6723aaf59f..2a86f16721 100644 --- a/app/fuzzy_select.c +++ b/app/fuzzy_select.c @@ -227,7 +227,7 @@ find_contiguous_region_helper (PixelRegion *mask, PixelRegion *src, antialias, threshold, x, &start, &end)) return; - for (i = start; i < end; i++) + for (i = start + 1; i < end; i++) { find_contiguous_region_helper (mask, src, has_alpha, antialias, threshold, i, y - 1, col); find_contiguous_region_helper (mask, src, has_alpha, antialias, threshold, i, y + 1, col); diff --git a/app/text_tool.c b/app/text_tool.c index 4e2ac78f6a..4b662ee985 100644 --- a/app/text_tool.c +++ b/app/text_tool.c @@ -1511,6 +1511,7 @@ text_render (GImage *gimage, unsigned char color[MAX_CHANNELS]; char *str; int nstrs; + int crop; int line_width, line_height; int pixmap_width, pixmap_height; int text_width, text_height; @@ -1530,6 +1531,10 @@ text_render (GImage *gimage, else antialias = 1; + /* Dont crop the text if border is negative */ + crop = (border >= 0); + if (!crop) border = 0; + /* load the font in */ font = gdk_font_load (fontname); if (!font) @@ -1627,7 +1632,7 @@ text_render (GImage *gimage, } /* Crop the mask buffer */ - newmask = crop_buffer (mask, border); + newmask = crop ? crop_buffer (mask, border) : mask; if (newmask != mask) tile_manager_destroy (mask); @@ -2000,7 +2005,7 @@ text_tool_invoker (Argument *args) if (success) { int_value = args[5].value.pdb_int; - if (int_value >= 0) + if (int_value >= -1) border = int_value; else success = FALSE; diff --git a/app/tools/fuzzy_select.c b/app/tools/fuzzy_select.c index 6723aaf59f..2a86f16721 100644 --- a/app/tools/fuzzy_select.c +++ b/app/tools/fuzzy_select.c @@ -227,7 +227,7 @@ find_contiguous_region_helper (PixelRegion *mask, PixelRegion *src, antialias, threshold, x, &start, &end)) return; - for (i = start; i < end; i++) + for (i = start + 1; i < end; i++) { find_contiguous_region_helper (mask, src, has_alpha, antialias, threshold, i, y - 1, col); find_contiguous_region_helper (mask, src, has_alpha, antialias, threshold, i, y + 1, col); diff --git a/app/tools/gimpfuzzyselecttool.c b/app/tools/gimpfuzzyselecttool.c index 6723aaf59f..2a86f16721 100644 --- a/app/tools/gimpfuzzyselecttool.c +++ b/app/tools/gimpfuzzyselecttool.c @@ -227,7 +227,7 @@ find_contiguous_region_helper (PixelRegion *mask, PixelRegion *src, antialias, threshold, x, &start, &end)) return; - for (i = start; i < end; i++) + for (i = start + 1; i < end; i++) { find_contiguous_region_helper (mask, src, has_alpha, antialias, threshold, i, y - 1, col); find_contiguous_region_helper (mask, src, has_alpha, antialias, threshold, i, y + 1, col); diff --git a/app/tools/gimpregionselecttool.c b/app/tools/gimpregionselecttool.c index 6723aaf59f..2a86f16721 100644 --- a/app/tools/gimpregionselecttool.c +++ b/app/tools/gimpregionselecttool.c @@ -227,7 +227,7 @@ find_contiguous_region_helper (PixelRegion *mask, PixelRegion *src, antialias, threshold, x, &start, &end)) return; - for (i = start; i < end; i++) + for (i = start + 1; i < end; i++) { find_contiguous_region_helper (mask, src, has_alpha, antialias, threshold, i, y - 1, col); find_contiguous_region_helper (mask, src, has_alpha, antialias, threshold, i, y + 1, col); diff --git a/app/tools/gimptexttool.c b/app/tools/gimptexttool.c index 4e2ac78f6a..4b662ee985 100644 --- a/app/tools/gimptexttool.c +++ b/app/tools/gimptexttool.c @@ -1511,6 +1511,7 @@ text_render (GImage *gimage, unsigned char color[MAX_CHANNELS]; char *str; int nstrs; + int crop; int line_width, line_height; int pixmap_width, pixmap_height; int text_width, text_height; @@ -1530,6 +1531,10 @@ text_render (GImage *gimage, else antialias = 1; + /* Dont crop the text if border is negative */ + crop = (border >= 0); + if (!crop) border = 0; + /* load the font in */ font = gdk_font_load (fontname); if (!font) @@ -1627,7 +1632,7 @@ text_render (GImage *gimage, } /* Crop the mask buffer */ - newmask = crop_buffer (mask, border); + newmask = crop ? crop_buffer (mask, border) : mask; if (newmask != mask) tile_manager_destroy (mask); @@ -2000,7 +2005,7 @@ text_tool_invoker (Argument *args) if (success) { int_value = args[5].value.pdb_int; - if (int_value >= 0) + if (int_value >= -1) border = int_value; else success = FALSE; diff --git a/app/tools/text_tool.c b/app/tools/text_tool.c index 4e2ac78f6a..4b662ee985 100644 --- a/app/tools/text_tool.c +++ b/app/tools/text_tool.c @@ -1511,6 +1511,7 @@ text_render (GImage *gimage, unsigned char color[MAX_CHANNELS]; char *str; int nstrs; + int crop; int line_width, line_height; int pixmap_width, pixmap_height; int text_width, text_height; @@ -1530,6 +1531,10 @@ text_render (GImage *gimage, else antialias = 1; + /* Dont crop the text if border is negative */ + crop = (border >= 0); + if (!crop) border = 0; + /* load the font in */ font = gdk_font_load (fontname); if (!font) @@ -1627,7 +1632,7 @@ text_render (GImage *gimage, } /* Crop the mask buffer */ - newmask = crop_buffer (mask, border); + newmask = crop ? crop_buffer (mask, border) : mask; if (newmask != mask) tile_manager_destroy (mask); @@ -2000,7 +2005,7 @@ text_tool_invoker (Argument *args) if (success) { int_value = args[5].value.pdb_int; - if (int_value >= 0) + if (int_value >= -1) border = int_value; else success = FALSE; diff --git a/configure.in b/configure.in index 45648bdb64..2648b69183 100644 --- a/configure.in +++ b/configure.in @@ -7,10 +7,10 @@ GIMP_MAJOR_VERSION_NUMBER=0 dnl $Format: "GIMP_MINOR_VERSION_NUMBER=$ReleaseMinorVersion$" $ GIMP_MINOR_VERSION_NUMBER=99 dnl $Format: "GIMP_MICRO_VERSION_NUMBER=$ReleaseMicroVersion$" $ -GIMP_MICRO_VERSION_NUMBER=16 +GIMP_MICRO_VERSION_NUMBER=17 dnl $Format: "AM_INIT_AUTOMAKE(gimp, $ReleaseVersion$)" $ -AM_INIT_AUTOMAKE(gimp, 0.99.16) +AM_INIT_AUTOMAKE(gimp, 0.99.17) dnl Specify a header configuration file AM_CONFIG_HEADER(config.h) @@ -68,10 +68,10 @@ AC_DEFUN(AC_GIMP_CHECK, LDFLAGS="$saved_ldflags $X_LDFLAGS $X_LIBS" dnl Dont cache this as it depends on CFLAGS, LDFLAGS, etc - AC_MSG_CHECKING([for glib and gtk]) + AC_MSG_CHECKING([for glib and gtk >= 0.99.1]) AC_TRY_COMPILE( [#include ], -[gtk_button_new ();], +[gtk_pixmap_unref ();], gtk_found=yes, gtk_found=no) AC_MSG_RESULT($gtk_found) @@ -344,7 +344,7 @@ plug-ins/gag-0.3/Makefile plug-ins/Anamorphose/Makefile plug-ins/CentralReflection/Makefile plug-ins/Curtain/Makefile -plug-ins/Encript_Decript/Makefile +plug-ins/Encrypt_Decrypt/Makefile plug-ins/Julia/Makefile plug-ins/Mandelbrot/Makefile plug-ins/MapObject/Makefile @@ -353,11 +353,8 @@ plug-ins/libgck/Makefile plug-ins/libgck/gck/Makefile plug-ins/blur/Makefile plug-ins/gfig/Makefile -plug-ins/gfig/gfig-examples/Makefile plug-ins/flame/Makefile plug-ins/gimptcl/Makefile -plug-ins/gimptcl/frags/Makefile -plug-ins/gimptcl/misc/Makefile plug-ins/gimptcl/scripts/Makefile plug-ins/fuse/Makefile plug-ins/mathmap/Makefile @@ -366,7 +363,6 @@ plug-ins/refract/Makefile plug-ins/struc/Makefile plug-ins/twist/Makefile plug-ins/user_filter/Makefile -plug-ins/user_filter/doc/Makefile plug-ins/warp/Makefile plug-ins/zealouscrop/Makefile plug-ins/xwd/Makefile @@ -421,6 +417,10 @@ plug-ins/colorify/Makefile plug-ins/papertile/Makefile plug-ins/illusion/Makefile plug-ins/fractaltrace/Makefile +plug-ins/DigitalSignature/Makefile +plug-ins/FractalExplorer/Makefile +plug-ins/stegano/Makefile +plug-ins/fs/Makefile app/Makefile docs/Makefile ) diff --git a/docs/Wilber.xcf.gz b/docs/Wilber.xcf.gz new file mode 100644 index 0000000000..f0c016e017 Binary files /dev/null and b/docs/Wilber.xcf.gz differ diff --git a/docs/Wilber.xcf.gz.README b/docs/Wilber.xcf.gz.README new file mode 100644 index 0000000000..fad28f4841 --- /dev/null +++ b/docs/Wilber.xcf.gz.README @@ -0,0 +1,15 @@ +Wilber.xcf.gz.README +----------------------------------------------------------------------------- + +This is Wilber, the Gimp Mascot. + +Gimp is a image manipulation program for unix computers, see +http://www.gimp.org for more detais. + +The use of Wilber.xcf.gz is free, though it would be kind of you to mention +the original author (Tuomas Kuosmanen ) somewhere. + +Enjoy. + +Tuomas / tigert + diff --git a/docs/pdb.texi b/docs/pdb.texi index 6f6ea66080..1bdaf14bf0 100644 --- a/docs/pdb.texi +++ b/docs/pdb.texi @@ -460,6 +460,38 @@ HRZ saving handles all image types except those with alpha channels.--@strong{GI @end defun @emph{Albert Cahalan} +@defun file_icon_load run_mode, filename, raw_filename +Loads files of Windows ICO file format--@strong{GIMP Plug-In} + +@strong{Inputs} +@itemize @bullet +@item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive +@item @emph{filename} (PDB_STRING)--The name of the file to load +@item @emph{raw_filename} (PDB_STRING)--The name entered +@end itemize + + +@strong{Outputs} +@itemize @bullet +@item @emph{image} (PDB_IMAGE)--Output image +@end itemize +@end defun +@emph{Lance Dillon} + +@defun file_icon_save run_mode, image, drawable, filename, raw_filename +Saves files in Windows ICO file format--@strong{GIMP Plug-In} + +@strong{Inputs} +@itemize @bullet +@item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive +@item @emph{image} (PDB_IMAGE)--Input image +@item @emph{drawable} (PDB_DRAWABLE)--Drawable to save +@item @emph{filename} (PDB_STRING)--The name of the file to save the image in +@item @emph{raw_filename} (PDB_STRING)--The name entered +@end itemize +@end defun +@emph{Lance Dillon} + @defun file_jpeg_load run_mode, filename, raw_filename FIXME: write help for jpeg_load--@strong{GIMP Plug-In} @@ -495,24 +527,6 @@ FIXME: write help for jpeg_save--@strong{GIMP Plug-In} @end defun @emph{Spencer Kimball & Peter Mattis} -@defun file_mpeg_load run_mode, filename, raw_filename -FIXME: write help for mpeg_load--@strong{GIMP Plug-In} - -@strong{Inputs} -@itemize @bullet -@item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive -@item @emph{filename} (PDB_STRING)--The name of the file to load -@item @emph{raw_filename} (PDB_STRING)--The name entered -@end itemize - - -@strong{Outputs} -@itemize @bullet -@item @emph{image} (PDB_IMAGE)--Output image -@end itemize -@end defun -@emph{Adam D. Moss} - @defun file_pat_load run_mode, filename, raw_filename FIXME: write help--@strong{GIMP Plug-In} @@ -714,7 +728,7 @@ load file of PostScript/PDF file format--@strong{GIMP Plug-In} @item @emph{image} (PDB_IMAGE)--Output image @end itemize @end defun -@emph{Peter Kirchgessner} +@emph{Peter Kirchgessner } @defun file_ps_load_setargs resolution, width, height, check_bbox, pages, coloring, TextAlphaBits, GraphicsAlphaBits set additional parameters for procedure file_ps_load--@strong{GIMP Plug-In} @@ -731,9 +745,9 @@ set additional parameters for procedure file_ps_load--@strong{GIMP Plug-In} @item @emph{GraphicsAlphaBits} (PDB_INT32)--1, 2, or 4 @end itemize @end defun -@emph{Peter Kirchgessner} +@emph{Peter Kirchgessner } -@defun file_ps_save run_mode, image, drawable, filename, raw_filename, width, height, x_offset, y_offset, unit, keep_ratio, rotation +@defun file_ps_save run_mode, image, drawable, filename, raw_filename, width, height, x_offset, y_offset, unit, keep_ratio, rotation, eps_flag, preview PostScript saving handles all image types except those with alpha channels.--@strong{GIMP Plug-In} @strong{Inputs} @@ -747,12 +761,14 @@ PostScript saving handles all image types except those with alpha channels.--@st @item @emph{height} (PDB_FLOAT)--Height of image in PostScript file @item @emph{x_offset} (PDB_FLOAT)--X-offset to image from lower left corner @item @emph{y_offset} (PDB_FLOAT)--Y-offset to image from lower left corner -@item @emph{unit} (PDB_INT32)--0: inches, 1: millimeters +@item @emph{unit} (PDB_INT32)--Unit for width/height/offset. 0: inches, 1: millimeters @item @emph{keep_ratio} (PDB_INT32)--0: use width/height, 1: keep aspect ratio @item @emph{rotation} (PDB_INT32)--0, 90, 180, 270 +@item @emph{eps_flag} (PDB_INT32)--0: PostScript, 1: Encapsulated PostScript +@item @emph{preview} (PDB_INT32)--0: no preview, >0: max. size of preview @end itemize @end defun -@emph{Peter Kirchgessner} +@emph{Peter Kirchgessner } @defun file_psd_load run_mode, filename, raw_filename FIXME: write help for psd_load--@strong{GIMP Plug-In} @@ -941,38 +957,6 @@ You need to have GNU Wget installed.--@strong{GIMP Plug-In} @end defun @emph{Spencer Kimball & Peter Mattis} -@defun file_xd_load run_mode, filename, raw_filename ---@strong{GIMP Plug-In} - -@strong{Inputs} -@itemize @bullet -@item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive -@item @emph{filename} (PDB_STRING)--The name of the file to load -@item @emph{raw_filename} (PDB_STRING)--The name entered -@end itemize - - -@strong{Outputs} -@itemize @bullet -@item @emph{image} (PDB_IMAGE)--Output image -@end itemize -@end defun -@emph{Josh MacDonald} - -@defun file_xd_save run_mode, image, drawable, filename, raw_filename ---@strong{GIMP Plug-In} - -@strong{Inputs} -@itemize @bullet -@item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive -@item @emph{image} (PDB_IMAGE)--Input image -@item @emph{drawable} (PDB_DRAWABLE)--Drawable to save -@item @emph{filename} (PDB_STRING)--The name of the file to save the image in -@item @emph{raw_filename} (PDB_STRING)--The name of the file to save the image in -@end itemize -@end defun -@emph{Josh MacDonald} - @defun file_xpm_load run_mode, filename, raw_filename FIXME: write help for xpm_load--@strong{GIMP Plug-In} @@ -991,7 +975,7 @@ FIXME: write help for xpm_load--@strong{GIMP Plug-In} @end defun @emph{Spencer Kimball & Peter Mattis & Ray Lehtiniemi} -@defun file_xpm_save run_mode, image, drawable, filename, raw_filename +@defun file_xpm_save run_mode, image, drawable, filename, raw_filename, alpha_threshold FIXME: write help for xpm--@strong{GIMP Plug-In} @strong{Inputs} @@ -1001,6 +985,7 @@ FIXME: write help for xpm--@strong{GIMP Plug-In} @item @emph{drawable} (PDB_DRAWABLE)--Drawable to save @item @emph{filename} (PDB_STRING)--The name of the file to save the image in @item @emph{raw_filename} (PDB_STRING)--The name of the file to save the image in +@item @emph{alpha_threshold} (PDB_FLOAT)--Alpha cutoff threshold @end itemize @end defun @emph{Spencer Kimball & Peter Mattis & Ray Lehtiniemi} @@ -4547,7 +4532,7 @@ Emboss or Bumpmap the given drawable, specifying the angle and elevation for the @end defun @emph{Eric L. Hernes, John Schlag} -@defun plug_in_encript run_mode, image, drawable, password, warning +@defun plug_in_encrypt run_mode, image, drawable, password, warning, compatibility, remember --@strong{GIMP Plug-In} @strong{Inputs} @@ -4555,8 +4540,10 @@ Emboss or Bumpmap the given drawable, specifying the angle and elevation for the @item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive @item @emph{image} (PDB_IMAGE)--Input image (unused) @item @emph{drawable} (PDB_DRAWABLE)--Input drawable -@item @emph{password} (PDB_INT8)--Numeric password (used to encript and decript) +@item @emph{password} (PDB_STRING)--Password (used to encrypt and decrypt) @item @emph{warning} (PDB_INT8)--Disable warning message toggle (only in RUN_INTERACTIVE) +@item @emph{compatibility} (PDB_INT8)--Use version 1.0x compatibility mode +@item @emph{remember} (PDB_INT8)--Remember the password after execution @end itemize @end defun @emph{Daniel Cotting (cotting@@mygale.org, http://www.mygale.org/~cotting)} @@ -4619,7 +4606,7 @@ Compose several images to a roll film--@strong{GIMP Plug-In} @item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive @item @emph{image} (PDB_IMAGE)--Input image (only used as default image in interactive mode) @item @emph{drawable} (PDB_DRAWABLE)--Input drawable (not used) -@item @emph{film_height} (PDB_INT32)--Height of film +@item @emph{film_height} (PDB_INT32)--Height of film (0: fit to images) @item @emph{film_color} (PDB_COLOR)--Color of the film @item @emph{number_start} (PDB_INT32)--Start index for numbering @item @emph{number_fontf} (PDB_STRING)--Font family for drawing numbers @@ -4681,6 +4668,36 @@ transform image with the Mandelbrot Fractal--@strong{GIMP Plug-In} @end defun @emph{Hirotsuna Mizuno } +@defun plug_in_fractalexplorer run_mode, image, drawable, fractaltype, xmin, xmax, ymin, ymax, iter, cx, cy, colormode, redstretch, greenstretch, bluestretch, redmode, greenmode, bluemode, redinvert, greeninvert, blueinvert +No help yet.--@strong{GIMP Plug-In} + +@strong{Inputs} +@itemize @bullet +@item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive +@item @emph{image} (PDB_IMAGE)--Input image +@item @emph{drawable} (PDB_DRAWABLE)--Input drawable +@item @emph{fractaltype} (PDB_INT8)--0: Mandelbrot; 1: Julia; 2: Barnsley 1; 3: Barnsley 2; 4: Barnsley 3; 5: Spider; 6: ManOWar; 7: Lambda; 8: Sierpinski +@item @emph{xmin} (PDB_FLOAT)--Xmin fractal image delimiter +@item @emph{xmax} (PDB_FLOAT)--Xmax fractal image delimiter +@item @emph{ymin} (PDB_FLOAT)--Ymin fractal image delimiter +@item @emph{ymax} (PDB_FLOAT)--Ymax fractal image delimiter +@item @emph{iter} (PDB_FLOAT)--Iteration value +@item @emph{cx} (PDB_FLOAT)--Cx value ( only Julia) +@item @emph{cy} (PDB_FLOAT)--Cy value ( only Julia) +@item @emph{colormode} (PDB_INT8)--0: Apply colormap as specified by the parameters below; 1: Apply active gradient to final image +@item @emph{redstretch} (PDB_FLOAT)--Red stretching factor +@item @emph{greenstretch} (PDB_FLOAT)--Green stretching factor +@item @emph{bluestretch} (PDB_FLOAT)--Blue stretching factor +@item @emph{redmode} (PDB_INT8)--Red application mode (0:SIN;1:COS;2:NONE) +@item @emph{greenmode} (PDB_INT8)--Green application mode (0:SIN;1:COS;2:NONE) +@item @emph{bluemode} (PDB_INT8)--Blue application mode (0:SIN;1:COS;2:NONE) +@item @emph{redinvert} (PDB_INT8)--Red inversion mode (1: enabled; 0: disabled) +@item @emph{greeninvert} (PDB_INT8)--Green inversion mode (1: enabled; 0: disabled) +@item @emph{blueinvert} (PDB_INT8)--Green inversion mode (1: enabled; 0: disabled) +@end itemize +@end defun +@emph{Daniel Cotting (cotting@@mygale.org, www.mygale.org/~cotting)} + @defun plug_in_fuse run_mode, image, drawable uhm, image dissociation--@strong{GIMP Plug-In} @@ -4723,6 +4740,19 @@ Applies a gaussian blur to the drawable, with specified radius of affect. The s @end defun @emph{Spencer Kimball & Peter Mattis} +@defun plug_in_gfig run_mode, image, drawable, dummy +More here later--@strong{GIMP Plug-In} + +@strong{Inputs} +@itemize @bullet +@item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive +@item @emph{image} (PDB_IMAGE)--Input image (unused) +@item @emph{drawable} (PDB_DRAWABLE)--Input drawable +@item @emph{dummy} (PDB_INT32)--Dummy +@end itemize +@end defun +@emph{Andy Thomas} + @defun plug_in_gflare run_mode, image, drawable, gflare_name, xcenter, ycenter, radius, rotation, hue, vangle, vlength, use_asupsample, asupsample_max_depth, asupsample_threshold This plug-in produces a lense flare effect using custom gradients. In interactive call, the user can edit his/her own favorite lense flare (GFlare) and render it. Edited gflare is saved automatically to the directory in gflare-path, if it is defined in gimprc. In non-interactive call, the user can only render one of GFlare which has been stored in gflare-path already.--@strong{GIMP Plug-In} @@ -5286,7 +5316,7 @@ This function randomly ``blurs'' the specified drawable, using either a 3x3 blur @end defun @emph{Miles O'Neal http://www.rru.com/~meo/} -@defun plug_in_refract run_mode, image, drawable, lensmap, depth, dist, na, nb, wrap, newl, xofs, yofs +@defun plug_in_refract run_mode, image, drawable, lensmap, thick, dist, na, nb, edge, newl, xofs, yofs Distorts the image by refracting it through a height field 'lens' with a specified index of refraction.--@strong{GIMP Plug-In} @strong{Inputs} @@ -5295,11 +5325,11 @@ Distorts the image by refracting it through a height field 'lens' with a specifi @item @emph{image} (PDB_IMAGE)--Input image @item @emph{drawable} (PDB_DRAWABLE)--Input drawable @item @emph{lensmap} (PDB_DRAWABLE)--Lens map drawable -@item @emph{depth} (PDB_INT32)--Lens depth +@item @emph{thick} (PDB_INT32)--Lens thickness @item @emph{dist} (PDB_INT32)--Lens distance from image @item @emph{na} (PDB_FLOAT)--Index of Refraction A @item @emph{nb} (PDB_FLOAT)--Index of Refraction B -@item @emph{wrap} (PDB_INT32)--Wrap (0), Background (1) +@item @emph{edge} (PDB_INT32)--Background (0), Outside (1), Wrap (2) @item @emph{newl} (PDB_INT32)--New layer? @item @emph{xofs} (PDB_INT32)--X offset @item @emph{yofs} (PDB_INT32)--Y offset @@ -5383,6 +5413,25 @@ Shifts the pixels of the specified drawable. Each row will be displaced a random @end defun @emph{Spencer Kimball and Peter Mattis, ported by Brian Degenhardt and Federico Mena Quintero} +@defun plug_in_signature run_mode, image, drawable, signature[50], e-mail[30], homepage[50], date[20], mode, licence, contents +--@strong{GIMP Plug-In} + +@strong{Inputs} +@itemize @bullet +@item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive +@item @emph{image} (PDB_IMAGE)--Input image (unused) +@item @emph{drawable} (PDB_DRAWABLE)--Input drawable +@item @emph{signature[50]} (PDB_STRING)--Signature (Name of author, company etc.) +@item @emph{e-mail[30]} (PDB_STRING)--E-mail address +@item @emph{homepage[50]} (PDB_STRING)--Address of the homepage +@item @emph{date[20]} (PDB_STRING)--Date of creation +@item @emph{mode} (PDB_INT8)--FALSE: Write signature; TRUE: Read signature +@item @emph{licence} (PDB_INT8)--FALSE: Freely distributable; TRUE: Restricted distribution +@item @emph{contents} (PDB_INT8)--TRUE: Adult only contents +@end itemize +@end defun +@emph{Daniel Cotting (cotting@@mygale.org, http://www.mygale.org/~cotting)} + @defun plug_in_sinus run_mode, image, drawable, xscale, yscale, complex, seed, tiling, perturb, colors, alpha1, alpha2, blend, blend_power FIX ME: sinus help--@strong{GIMP Plug-In} @@ -5482,6 +5531,20 @@ Spreads the pixels of the specified drawable. Pixels are randomly moved to anot @end defun @emph{Spencer Kimball and Peter Mattis, ported by Brian Degenhardt and Federico Mena Quintero} +@defun plug_in_stegano run_mode, image, drawable, mode, filename[128] +--@strong{GIMP Plug-In} + +@strong{Inputs} +@itemize @bullet +@item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive +@item @emph{image} (PDB_IMAGE)--Input image (unused) +@item @emph{drawable} (PDB_DRAWABLE)--Input drawable +@item @emph{mode} (PDB_INT8)--FALSE: Hide file in image; TRUE: Get hidden file +@item @emph{filename[128]} (PDB_STRING)--Name of the file to hide in an image (only of importance if mode=FALSE +@end itemize +@end defun +@emph{Daniel Cotting (cotting@@mygale.org, http://www.mygale.org/~cotting)} + @defun plug_in_stereogram run_mode, image, heightmap, type, pat Based on the Stereogram FAQ--@strong{GIMP Plug-In} @@ -6066,21 +6129,6 @@ Chalk scribbled logos--@strong{Temporary Procedure} @end defun @emph{Manish Singh } -@defun script-fu-chalk-test-logo run_mode, value, value, value, color, color -Chalk scribbled logos--@strong{Temporary Procedure} - -@strong{Inputs} -@itemize @bullet -@item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive -@item @emph{value} (PDB_STRING)--Text String -@item @emph{value} (PDB_STRING)--Font Size (in pixels) -@item @emph{value} (PDB_STRING)--Font -@item @emph{color} (PDB_COLOR)--Background Color -@item @emph{color} (PDB_COLOR)--Chalk Color -@end itemize -@end defun -@emph{Manish Singh } - @defun script-fu-chrome-logo run_mode, value, value, value, color Somewhat simplistic, but cool chromed logos--@strong{Temporary Procedure} @@ -6148,6 +6196,46 @@ Render the specified text along the perimeter of a circle--@strong{Temporary Pro @end defun @emph{Tim Newsome } +@defun script-fu-colorcycling-anim run_mode, image, drawable, value, value, value, value, value, value, value, value, value, value, value, value, value, value, value, value, value, value, value, value, value, value, value, value, value, value, value, value +Creates an animation with the help of the alienmap plug-in--@strong{Temporary Procedure} + +@strong{Inputs} +@itemize @bullet +@item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive +@item @emph{image} (PDB_IMAGE)--Image +@item @emph{drawable} (PDB_DRAWABLE)--Drawable +@item @emph{value} (PDB_STRING)--Number of frames +@item @emph{value} (PDB_STRING)--Start: red intensity factor (max. 128) +@item @emph{value} (PDB_STRING)--Start: green intensity factor (max. 128) +@item @emph{value} (PDB_STRING)--Start: blue intensity factor (max. 128) +@item @emph{value} (PDB_STRING)--End: red intensity factor (max. 128) +@item @emph{value} (PDB_STRING)--End: green intensity factor (max. 128) +@item @emph{value} (PDB_STRING)--End: blue intensity factor (max. 128) +@item @emph{value} (PDB_STRING)--Red color mode (sin:0/cos:1/none:2) +@item @emph{value} (PDB_STRING)--Green color mode (sin:0/cos:1/none:2) +@item @emph{value} (PDB_STRING)--Blue color mode (sin:0/cos:1/none:2) +@item @emph{value} (PDB_STRING)--Red inversion before transformation +@item @emph{value} (PDB_STRING)--Green inversion before transformation +@item @emph{value} (PDB_STRING)--Blue inversion before transformation +@item @emph{value} (PDB_STRING)--Start: red phase displacement (RAD) +@item @emph{value} (PDB_STRING)--Start: green phase displacement (RAD) +@item @emph{value} (PDB_STRING)--Start: blue phase displacement (RAD) +@item @emph{value} (PDB_STRING)--End: red phase displacement (RAD) +@item @emph{value} (PDB_STRING)--End: green phase displacement (RAD) +@item @emph{value} (PDB_STRING)--End: blue phase displacement (RAD) +@item @emph{value} (PDB_STRING)--Start: red frequency (> 0) +@item @emph{value} (PDB_STRING)--Start: green frequency (> 0) +@item @emph{value} (PDB_STRING)--Start: blue frequency (> 0) +@item @emph{value} (PDB_STRING)--End: red frequency (> 0) +@item @emph{value} (PDB_STRING)--End: green frequency (> 0) +@item @emph{value} (PDB_STRING)--End: blue frequency (> 0) +@item @emph{value} (PDB_STRING)--Red inversion after transformation +@item @emph{value} (PDB_STRING)--Green inversion after transformation +@item @emph{value} (PDB_STRING)--Blue inversion after transformation +@end itemize +@end defun +@emph{Daniel Cotting (cotting@@mygale.org)} + @defun script-fu-cool-metal-logo run_mode, value, value, value, color, toggle Metallic logos with reflections and perspective shadows--@strong{Temporary Procedure} @@ -6327,38 +6415,6 @@ Draph the graph of H/S/V values on the drawable--@strong{Temporary Procedure} @end defun @emph{Shuji Narazaki (narazaki@@InetQ.or.jp)} -@defun script-fu-kanji-circle run_mode, value, value, value, value, value, value, toggle -Kanji Circle (version 0.3)--@strong{Temporary Procedure} - -@strong{Inputs} -@itemize @bullet -@item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive -@item @emph{value} (PDB_STRING)--Kanji Text -@item @emph{value} (PDB_STRING)--Radius -@item @emph{value} (PDB_STRING)--Start-angle -@item @emph{value} (PDB_STRING)--Fill-angle -@item @emph{value} (PDB_STRING)--Font name -@item @emph{value} (PDB_STRING)--Font Size -@item @emph{toggle} (PDB_INT32)--Antialias -@end itemize -@end defun -@emph{Shuji Narazaki } - -@defun script-fu-kanji-neon run_mode, color, value, value, value, value -Kanji Neon Text Cyan (0.3)--@strong{Temporary Procedure} - -@strong{Inputs} -@itemize @bullet -@item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive -@item @emph{color} (PDB_COLOR)--Glow Color -@item @emph{value} (PDB_STRING)--Tube Hue -@item @emph{value} (PDB_STRING)--Text (ill-displayed) -@item @emph{value} (PDB_STRING)--Font Size (in pixels) -@item @emph{value} (PDB_STRING)--Font (string) -@end itemize -@end defun -@emph{Shuji Narazaki } - @defun script-fu-labels-gimp-org run_mode, value, value, value, value, value, value, color, color, color, toggle, toggle, value, value, value, value, value Tube Button Label Header for gimp.org--@strong{Temporary Procedure} @@ -6532,19 +6588,6 @@ Add a perspective shadow--@strong{Temporary Procedure} @end defun @emph{Sven Neumann (neumanns@@uni-duesseldorf.de)} -@defun script-fu-pie-chart run_mode, value, value, value -Pie chart--@strong{Temporary Procedure} - -@strong{Inputs} -@itemize @bullet -@item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive -@item @emph{value} (PDB_STRING)--Width -@item @emph{value} (PDB_STRING)--Value/color list -@item @emph{value} (PDB_STRING)--Start angle -@end itemize -@end defun -@emph{Federico Mena Quintero} - @defun script-fu-predator run_mode, image, drawable, value, toggle, value, toggle, toggle Fills the current selection with test--@strong{Temporary Procedure} diff --git a/libgimp/gimplayer.c b/libgimp/gimplayer.c index c6c68b1440..1aa640ad1a 100644 --- a/libgimp/gimplayer.c +++ b/libgimp/gimplayer.c @@ -43,6 +43,7 @@ gimp_layer_copy (gint32 layer_ID) return_vals = gimp_run_procedure ("gimp_layer_copy", &nreturn_vals, PARAM_LAYER, layer_ID, + PARAM_INT32, 0, PARAM_END); layer_ID = -1; diff --git a/libgimp/gimplayer_pdb.c b/libgimp/gimplayer_pdb.c index c6c68b1440..1aa640ad1a 100644 --- a/libgimp/gimplayer_pdb.c +++ b/libgimp/gimplayer_pdb.c @@ -43,6 +43,7 @@ gimp_layer_copy (gint32 layer_ID) return_vals = gimp_run_procedure ("gimp_layer_copy", &nreturn_vals, PARAM_LAYER, layer_ID, + PARAM_INT32, 0, PARAM_END); layer_ID = -1; diff --git a/plug-ins/AlienMap/AlienMap.c b/plug-ins/AlienMap/AlienMap.c index b2ee904fee..84cf9dbbe5 100644 --- a/plug-ins/AlienMap/AlienMap.c +++ b/plug-ins/AlienMap/AlienMap.c @@ -1156,8 +1156,8 @@ alienmap_logo_dialog() GtkWidget *xvbox; GtkWidget *xhbox; char *text; - gchar *temp,*temp2; - char *datapointer; + guchar *temp,*temp2; + guchar *datapointer; gint y,x; xdlg = logodlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(xdlg), "About"); @@ -1199,7 +1199,7 @@ alienmap_logo_dialog() xpreview = gtk_preview_new (GTK_PREVIEW_COLOR); gtk_preview_size (GTK_PREVIEW (xpreview), logo_width, logo_height); temp = g_malloc((logo_width+10)*3); - datapointer=header_data; + datapointer=header_data+logo_width*logo_height-1; for (y = 0; y < logo_height; y++){ temp2=temp; for (x = 0; x< logo_width; x++) { diff --git a/plug-ins/AlienMap/INSTALL b/plug-ins/AlienMap/INSTALL index 5e53dcbbc9..f4fc223940 100644 --- a/plug-ins/AlienMap/INSTALL +++ b/plug-ins/AlienMap/INSTALL @@ -16,25 +16,44 @@ ------------------------------------------- INSTALLATION ------------------------------------------- - To install it, you have to edit the - Makefile (change install-path). - Afterwards run make. This will compile - and install the plug-in in the right - directory. Once the new code is installed, - you can run the GIMP and enjoy the new - functions and effects it provides. + To install it, you have to edit the Make- + file (change install-path). Afterwards run + 'make'. This will compile and install the + plug-in in the right directory. Once the + new code is installed, you can run the GIMP + and enjoy the new functions and effects it + provides. +------------------------------------------- + + +------------------------------------------- + COLOR-CYCLING SCRIPT +------------------------------------------- + This version of the alienmap plug-in inclu- + des a script for color cycling animations. + It is recommended to start the alienmap + plug-in, to fiddle about with the parame- + ters until you have found optimal start va- + lues. Then put these values in the appro- + priate edit fields in the animation dialog. + Now you can change the values in the alien- + map plug-in to find interesting end values. + After you have inserted these new values in + the corresponding fields of the animation + script, you can start the calculation of + the animation. The script will create a new + picture with a layer for each animation + frame. With each new frame the start values + will gradually turn into the specified end + values, creating an amazing effect of color + cycling. ------------------------------------------- ------------------------------------------- REDUCE CODE SIZE ------------------------------------------- - With this new release 1.01 the size of - the logo in the about box has been reduced - in order to make smaller binaries. In - general the compiled plug-in will be - about 25-30% of the size of version 1.00. - If you find that the plug-in is still + If you find that the plug-in binary is too big, you can compress the executables with the gzexe program (if it is avaiable on your system). To do so, change to the @@ -53,7 +72,7 @@ rm PLUGIN_NAME~ This will result in a code size of about - 35 to 40 kB, which isn't too much IMHO. + 20 kB, which isn't too much IMHO. ------------------------------------------ @@ -61,9 +80,9 @@ FEEDBACK ------------------------------------------ I'm interested in any feedback, comments, - bug-reports, suggestions etc. If you - have anything you would like to tell - me, you can write to cotting@mygale.org. + bug-reports, suggestions etc. If you have + anything you would like to tell me, you + can write to cotting@mygale.org. Also have a look at the GIMP-section of my homepage at www.mygale.org/~cotting. ------------------------------------------ diff --git a/plug-ins/AlienMap/README b/plug-ins/AlienMap/README index 5e53dcbbc9..f4fc223940 100644 --- a/plug-ins/AlienMap/README +++ b/plug-ins/AlienMap/README @@ -16,25 +16,44 @@ ------------------------------------------- INSTALLATION ------------------------------------------- - To install it, you have to edit the - Makefile (change install-path). - Afterwards run make. This will compile - and install the plug-in in the right - directory. Once the new code is installed, - you can run the GIMP and enjoy the new - functions and effects it provides. + To install it, you have to edit the Make- + file (change install-path). Afterwards run + 'make'. This will compile and install the + plug-in in the right directory. Once the + new code is installed, you can run the GIMP + and enjoy the new functions and effects it + provides. +------------------------------------------- + + +------------------------------------------- + COLOR-CYCLING SCRIPT +------------------------------------------- + This version of the alienmap plug-in inclu- + des a script for color cycling animations. + It is recommended to start the alienmap + plug-in, to fiddle about with the parame- + ters until you have found optimal start va- + lues. Then put these values in the appro- + priate edit fields in the animation dialog. + Now you can change the values in the alien- + map plug-in to find interesting end values. + After you have inserted these new values in + the corresponding fields of the animation + script, you can start the calculation of + the animation. The script will create a new + picture with a layer for each animation + frame. With each new frame the start values + will gradually turn into the specified end + values, creating an amazing effect of color + cycling. ------------------------------------------- ------------------------------------------- REDUCE CODE SIZE ------------------------------------------- - With this new release 1.01 the size of - the logo in the about box has been reduced - in order to make smaller binaries. In - general the compiled plug-in will be - about 25-30% of the size of version 1.00. - If you find that the plug-in is still + If you find that the plug-in binary is too big, you can compress the executables with the gzexe program (if it is avaiable on your system). To do so, change to the @@ -53,7 +72,7 @@ rm PLUGIN_NAME~ This will result in a code size of about - 35 to 40 kB, which isn't too much IMHO. + 20 kB, which isn't too much IMHO. ------------------------------------------ @@ -61,9 +80,9 @@ FEEDBACK ------------------------------------------ I'm interested in any feedback, comments, - bug-reports, suggestions etc. If you - have anything you would like to tell - me, you can write to cotting@mygale.org. + bug-reports, suggestions etc. If you have + anything you would like to tell me, you + can write to cotting@mygale.org. Also have a look at the GIMP-section of my homepage at www.mygale.org/~cotting. ------------------------------------------ diff --git a/plug-ins/AlienMap/alienmap.c b/plug-ins/AlienMap/alienmap.c index 075e981247..c7e90414a0 100644 --- a/plug-ins/AlienMap/alienmap.c +++ b/plug-ins/AlienMap/alienmap.c @@ -1,14 +1,10 @@ /********************************************************************** - * AlienMap (Co-)sine color transformation plug-in (Version 1.00) + * AlienMap (Co-)sine color transformation plug-in (Version 1.03) * Daniel Cotting (cotting@mygale.org) ********************************************************************** - * Official Homepage: http://www.mygale.org/~cotting - ********************************************************************** - * Homepages under construction: http://www.chez.com/cotting - * http://www.cyberbrain.com/cotting - * You won't be able to see anything yet, as I don't really have the - * time to build up these two sites :-( - * Have a look at www.mygale.org/~cotting instead! + * Official homepages: http://www.mygale.org/~cotting + * http://cotting.citeweb.net + * http://village.cyberbrain.com/cotting ********************************************************************** */ @@ -47,7 +43,7 @@ #define PREVIEW_SIZE 128 #define SCALE_WIDTH 200 -#define ENTRY_WIDTH 60 +#define ENTRY_WIDTH 45 #define SINUS 0 #define COSINUS 1 @@ -61,6 +57,19 @@ typedef struct { gint redmode; gint greenmode; gint bluemode; + gint redinvert; + gint greeninvert; + gint blueinvert; + gdouble redphase; + gdouble greenphase; + gdouble bluephase; + gdouble redfrequency; + gdouble greenfrequency; + gdouble bluefrequency; + gint redinvert2; + gint greeninvert2; + gint blueinvert2; + } alienmap_vals_t; typedef struct { @@ -86,9 +95,9 @@ static void alienmap_render_row (const guchar *src_row, guchar *dest_row, gint row, gint row_width, - gint bytes, double, double, double); + gint bytes, double, double, double , double, double, double, double, double, double); static void alienmap_get_pixel(int x, int y, guchar *pixel); -void transform (short int *, short int *, short int *,double, double, double); +void transform (short int *, short int *, short int *,double, double, double ,double, double, double,double, double, double); static void build_preview_source_image(void); @@ -96,15 +105,16 @@ static void build_preview_source_image(void); static gint alienmap_dialog(void); static void dialog_update_preview(void); static void dialog_create_value(char *title, GtkTable *table, int row, gdouble *value, - int left, int right); + int left, int right, const char *desc); static void dialog_scale_update(GtkAdjustment *adjustment, gdouble *value); static void dialog_entry_update(GtkWidget *widget, gdouble *value); static void dialog_close_callback(GtkWidget *widget, gpointer data); static void dialog_ok_callback(GtkWidget *widget, gpointer data); +static void dialog_animation_callback(GtkWidget *widget, gpointer data); static void dialog_cancel_callback(GtkWidget *widget, gpointer data); static void alienmap_toggle_update (GtkWidget *widget, gpointer data); -GtkWidget * alienmap_logo_dialog(void); +GtkWidget * alienmap_logo_dialog(void); @@ -114,6 +124,14 @@ GtkWidget * alienmap_logo_dialog(void); GtkWidget *maindlg; GtkWidget *logodlg; +GtkTooltips *tips; +GdkColor tips_fg,tips_bg; +int ready=0; +static GParam *ExternalParam=NULL; +static int ExternalInt; +gint32 image_ID; + + GPlugInInfo PLUG_IN_INFO = { @@ -131,7 +149,7 @@ static alienmap_interface_t wint = { }; /* wint */ static alienmap_vals_t wvals = { - 128,128,128,COSINUS,SINUS,SINUS, + 128,128,128,COSINUS,SINUS,SINUS,0,0,0,0,0,0,1,1,1,0,0,0, }; /* wvals */ static GDrawable *drawable; @@ -155,25 +173,46 @@ gint do_greennone; gint do_bluesinus; gint do_bluecosinus; gint do_bluenone; + +gint do_redinvert; +gint do_greeninvert; +gint do_blueinvert; + +gint do_redinvert2; +gint do_greeninvert2; +gint do_blueinvert2; + /***** Functions *****/ -MAIN (); +MAIN () static void query () { static GParamDef args[] = { - { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, - { PARAM_IMAGE, "image", "Input image" }, - { PARAM_DRAWABLE, "drawable", "Input drawable" }, - { PARAM_INT8, "redstretch", "Red component stretching factor (0-128)" }, - { PARAM_INT8, "greenstretch", "Green component stretching factor (0-128)" }, - { PARAM_INT8, "bluestretch", "Blue component stretching factor (0-128)" }, + { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, + { PARAM_IMAGE, "image", "Input image" }, + { PARAM_DRAWABLE, "drawable", "Input drawable" }, + { PARAM_FLOAT, "redstretch", "Red component stretching factor (0-128)" }, + { PARAM_FLOAT, "greenstretch", "Green component stretching factor (0-128)" }, + { PARAM_FLOAT, "bluestretch", "Blue component stretching factor (0-128)" }, { PARAM_INT8, "redmode", "Red application mode (0:SIN;1:COS;2:NONE)" }, { PARAM_INT8, "greenmode", "Green application mode (0:SIN;1:COS;2:NONE)" }, { PARAM_INT8, "bluemode", "Blue application mode (0:SIN;1:COS;2:NONE)" }, + { PARAM_INT8, "redinvert", "Red inversion before transformation (true or false)" }, + { PARAM_INT8, "greeninvert", "Green inversion before transformation (true or false)" }, + { PARAM_INT8, "blueinvert", "Blue inversion before transformation (true or false)" }, + { PARAM_FLOAT, "redphase", "Red component phase displacement [-PI;PI]" }, + { PARAM_FLOAT, "greenphase", "Green component phase displacement [-PI;PI]" }, + { PARAM_FLOAT, "bluephase", "Blue component phase displacement [-PI;PI]" }, + { PARAM_FLOAT, "redfrequency", "Red component frequency" }, + { PARAM_FLOAT, "greenfrequency", "Green component frequency" }, + { PARAM_FLOAT, "bluefrequency", "Blue component frequency" }, + { PARAM_INT8, "redinvert2", "Red inversion after transformation (true or false)" }, + { PARAM_INT8, "greeninvert2", "Green inversion after transformation (true or false)" }, + { PARAM_INT8, "blueinvert2", "Blue inversion after transformation (true or false)" }, }; static GParamDef *return_vals = NULL; static int nargs = sizeof (args) / sizeof (args[0]); @@ -184,7 +223,7 @@ query () "No help yet. Just try it and you'll see!", "Daniel Cotting (cotting@mygale.org, http://www.mygale.org/~cotting)", "Daniel Cotting (cotting@mygale.org, http://www.mygale.org/~cotting)", - "1th May 1997", + "December 1997", "/Filters/Image/Alien-Map", "RGB*", PROC_PLUG_IN, @@ -197,20 +236,37 @@ query () void transform (short int *r, short int *g, - short int *b, double redstretch, double greenstretch, double bluestretch) + short int *b, double redstretch, double greenstretch, double bluestretch, + double redphase, double greenphase, double bluephase, + double redfrequency, double greenfrequency, double bluefrequency + ) { int red, green, blue; - float pi=3.1415926; + double pi=atan(1)*4; red = *r; green = *g; blue = *b; + + if (wvals.redinvert) { + red = 255-red; + } + if (wvals.greeninvert) { + green = 255-green; + } + if (wvals.blueinvert) { + blue = 255-blue; + } + switch (wvals.redmode) { case SINUS: - red = (int) redstretch*(1.0+sin((red/128.0-1)*pi)); + red = (int) redstretch*(1.0+sin((red/128.0-1)*pi*redfrequency+redphase)); break; case COSINUS: - red = (int) redstretch*(1.0+cos((red/128.0-1)*pi)); + red = (int) redstretch*(1.0+cos((red/128.0-1)*pi*redfrequency+redphase)); + break; + case NONE: + red = (int) (redstretch *(red / 128.0)); break; default: break; @@ -219,10 +275,13 @@ transform (short int *r, switch (wvals.greenmode) { case SINUS: - green = (int) greenstretch*(1.0+sin((green/128.0-1)*pi)); + green = (int) greenstretch*(1.0+sin((green/128.0-1)*pi*greenfrequency+greenphase)); break; case COSINUS: - green = (int) greenstretch*(1.0+cos((green/128.0-1)*pi)); + green = (int) greenstretch*(1.0+cos((green/128.0-1)*pi*greenfrequency+greenphase)); + break; + case NONE: + green = (int) (greenstretch *(green / 128.0)); break; default: break; @@ -231,14 +290,36 @@ transform (short int *r, switch (wvals.bluemode) { case SINUS: - blue = (int) bluestretch*(1.0+sin((blue/128.0-1)*pi)); + blue = (int) bluestretch*(1.0+sin((blue/128.0-1)*pi*bluefrequency+bluephase)); break; case COSINUS: - blue = (int) bluestretch*(1.0+cos((blue/128.0-1)*pi)); + blue = (int) bluestretch*(1.0+cos((blue/128.0-1)*pi*bluefrequency+bluephase)); + break; + case NONE: + blue = (int) (bluestretch *(blue / 128.0)); break; default: break; } + + if (red== 256) { + red= 255;} + if (green== 256) { + green= 255;} + if (blue== 256) + {blue= 255;} + + if (wvals.redinvert2) { + red = 255-red; + } + if (wvals.greeninvert2) { + green = 255-green; + } + if (wvals.blueinvert2) { + blue = 255-blue; + } + + *r = red; *g = green; *b = blue; @@ -253,8 +334,6 @@ run (char *name, GParam **return_vals) { static GParam values[1]; - /* GDrawable *drawable; */ - /* gint32 image_ID; */ GRunModeType run_mode; double xhsiz, yhsiz; int pwidth, pheight; @@ -273,7 +352,7 @@ run (char *name, /* Get the specified drawable */ drawable = gimp_drawable_get (param[2].data.d_drawable); - /* image_ID = param[1].data.d_image; */ + image_ID = param[1].data.d_image; tile_width = gimp_tile_width(); tile_height = gimp_tile_height(); @@ -332,17 +411,29 @@ run (char *name, case RUN_NONINTERACTIVE: /* Make sure all the arguments are present */ - if (nparams != 9) + if (nparams != 21) status = STATUS_CALLING_ERROR; if (status == STATUS_SUCCESS) - wvals.redstretch = param[3].data.d_int8; - wvals.greenstretch = param[4].data.d_int8; - wvals.bluestretch = param[5].data.d_int8; + wvals.redstretch = param[3].data.d_float; + wvals.greenstretch = param[4].data.d_float; + wvals.bluestretch = param[5].data.d_float; wvals.redmode = param[6].data.d_int8; wvals.greenmode = param[7].data.d_int8; wvals.bluemode = param[8].data.d_int8; + wvals.redinvert = param[9].data.d_int8; + wvals.greeninvert = param[10].data.d_int8; + wvals.blueinvert = param[11].data.d_int8; + wvals.redphase = param[12].data.d_float; + wvals.greenphase = param[13].data.d_float; + wvals.bluephase = param[14].data.d_float; + wvals.redfrequency = param[15].data.d_float; + wvals.greenfrequency= param[16].data.d_float; + wvals.bluefrequency = param[17].data.d_float; + wvals.redinvert2 = param[18].data.d_int8; + wvals.greeninvert2 = param[19].data.d_int8; + wvals.blueinvert2 = param[20].data.d_int8; break; @@ -386,7 +477,6 @@ run (char *name, } else { - /* gimp_message("This filter only applies on RGB-images"); */ status = STATUS_EXECUTION_ERROR; } } @@ -446,7 +536,10 @@ alienmap_render_row (const guchar *src_row, guchar *dest_row, gint row, gint row_width, - gint bytes, double redstretch, double greenstretch, double bluestretch) + gint bytes, double redstretch, double greenstretch, double bluestretch, + double redphase, double greenphase, double bluephase, + double redfrequency, double greenfrequency, double bluefrequency + ) @@ -462,7 +555,8 @@ alienmap_render_row (const guchar *src_row, v2 = (short int)src_row[col*bytes +1]; v3 = (short int)src_row[col*bytes +2]; - transform(&v1, &v2, &v3, redstretch, greenstretch, bluestretch); + transform(&v1, &v2, &v3, redstretch, greenstretch, bluestretch,redphase, greenphase,bluephase, + redfrequency, greenfrequency, bluefrequency); dest_row[col*bytes] = (int)v1; dest_row[col*bytes +1] = (int)v2; @@ -491,6 +585,8 @@ alienmap (GDrawable *drawable) gint row; gint x1, y1, x2, y2; double redstretch,greenstretch,bluestretch; + double redphase, greenphase, bluephase; + double redfrequency, greenfrequency,bluefrequency; /* Get the input area. This is the bounding box of the selection in * the image (or the entire image if there is no selection). Only @@ -520,6 +616,12 @@ alienmap (GDrawable *drawable) redstretch = wvals.redstretch; greenstretch = wvals.greenstretch; bluestretch = wvals.bluestretch; + redphase = wvals.redphase; + greenphase = wvals.greenphase; + bluephase = wvals.bluephase; + redfrequency = wvals.redfrequency; + greenfrequency = wvals.greenfrequency; + bluefrequency = wvals.bluefrequency; for (row = y1; row < y2; row++) @@ -531,7 +633,9 @@ alienmap (GDrawable *drawable) row, (x2 - x1), bytes, - redstretch, greenstretch, bluestretch); + redstretch, greenstretch, bluestretch, + redphase, greenphase, bluephase, + redfrequency, greenfrequency, bluefrequency); /* store the dest */ gimp_pixel_rgn_set_row (&destPR, dest_row, x1, row, (x2 - x1)); @@ -606,6 +710,79 @@ alienmap_close_callback(GtkWidget *widget, gpointer data) gtk_main_quit(); } +static void +dialog_animation_callback(GtkWidget *widget, gpointer data) +{ + char r_stretch[20], g_stretch[20], b_stretch[20]; + char r_mode[10], g_mode[10], b_mode[10]; + char r_invert[10], g_invert[10], b_invert[10]; + char r_invert2[10], g_invert2[10], b_invert2[10]; + char r_phase[20], g_phase[20], b_phase[20]; + char r_freq[20], g_freq[20], b_freq[20]; + + sprintf(r_stretch,"%f", wvals.redstretch); + sprintf(g_stretch,"%f", wvals.greenstretch); + sprintf(b_stretch,"%f", wvals.bluestretch); + + sprintf(r_mode,"%i", wvals.redmode); + sprintf(g_mode,"%i", wvals.greenmode); + sprintf(b_mode,"%i", wvals.bluemode); + + sprintf(r_invert,"%s", (wvals.redinvert) ? "TRUE" : "FALSE"); + sprintf(g_invert,"%s", (wvals.greeninvert) ? "TRUE" : "FALSE"); + sprintf(b_invert,"%s", (wvals.blueinvert) ? "TRUE" : "FALSE"); + + sprintf(r_phase,"%f", wvals.redphase); + sprintf(g_phase,"%f", wvals.greenphase); + sprintf(b_phase,"%f", wvals.bluephase); + + sprintf(r_freq,"%f", wvals.redfrequency); + sprintf(g_freq,"%f", wvals.greenfrequency); + sprintf(b_freq,"%f", wvals.bluefrequency); + + + sprintf(r_invert2,"%s", (wvals.redinvert2) ? "TRUE" : "FALSE"); + sprintf(g_invert2,"%s", (wvals.greeninvert2) ? "TRUE" : "FALSE"); + sprintf(b_invert2,"%s", (wvals.blueinvert2) ? "TRUE" : "FALSE"); + + gtk_main_quit(); + + ExternalParam = gimp_run_procedure("script-fu-colorcycling-anim",&ExternalInt, + PARAM_INT32, 0, + PARAM_IMAGE, image_ID, + PARAM_DRAWABLE, drawable->id, + PARAM_STRING, "10", + PARAM_STRING, r_stretch, + PARAM_STRING, g_stretch, + PARAM_STRING, b_stretch, + PARAM_STRING, r_stretch, + PARAM_STRING, g_stretch, + PARAM_STRING, b_stretch, + PARAM_STRING, r_mode, + PARAM_STRING, g_mode, + PARAM_STRING, b_mode, + PARAM_STRING, r_invert, + PARAM_STRING, g_invert, + PARAM_STRING, b_invert, + PARAM_STRING, r_phase, + PARAM_STRING, g_phase, + PARAM_STRING, b_phase, + PARAM_STRING, r_phase, + PARAM_STRING, g_phase, + PARAM_STRING, b_phase, + PARAM_STRING, r_freq, + PARAM_STRING, g_freq, + PARAM_STRING, b_freq, + PARAM_STRING, r_freq, + PARAM_STRING, g_freq, + PARAM_STRING, b_freq, + PARAM_STRING, r_invert2, + PARAM_STRING, g_invert2, + PARAM_STRING, b_invert2, + PARAM_END); + gtk_main_quit(); +} + static void @@ -615,6 +792,14 @@ alienmap_about_callback(GtkWidget *widget, gpointer data) alienmap_logo_dialog(); } +static void +set_tooltip (GtkTooltips *tooltips, GtkWidget *widget, const char *desc) +{ + if (desc && desc[0]) + gtk_tooltips_set_tips (tooltips, widget, (char *) desc); +} + + /*****/ static gint @@ -628,6 +813,7 @@ alienmap_dialog(void) GtkWidget *table, *table2, *table3; GtkWidget *button; gint argc; + double pi=atan(1)*4.0; gchar **argv; guchar *color_cube; GSList *redmode_group = NULL; @@ -642,12 +828,17 @@ alienmap_dialog(void) do_bluesinus = (wvals.bluemode == SINUS); do_bluecosinus = (wvals.bluemode == COSINUS); do_bluenone = (wvals.bluemode == NONE); - /* - printf("Waiting... (pid %d)\n", getpid()); - kill(getpid(), SIGSTOP); - */ - argc = 1; + do_redinvert = (wvals.redinvert != 0); + do_greeninvert = (wvals.greeninvert != 0); + do_blueinvert = (wvals.blueinvert != 0); + + + do_redinvert2 = (wvals.redinvert2 != 0); + do_greeninvert2 = (wvals.greeninvert2 != 0); + do_blueinvert2 = (wvals.blueinvert2 != 0); + + argc = 1; argv = g_new(gchar *, 1); argv[0] = g_strdup("alienmap"); @@ -670,55 +861,147 @@ alienmap_dialog(void) (GtkSignalFunc) dialog_close_callback, NULL); - top_table = gtk_table_new(4, 4, FALSE); + top_table = gtk_table_new(10, 10, FALSE); gtk_container_border_width(GTK_CONTAINER(top_table), 6); gtk_table_set_row_spacings(GTK_TABLE(top_table), 4); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), top_table, FALSE, FALSE, 0); gtk_widget_show(top_table); + /* use black as foreground: */ + tips = gtk_tooltips_new (); + tips_fg.red = 0; + tips_fg.green = 0; + tips_fg.blue = 0; + /* postit yellow (khaki) as background: */ + gdk_color_alloc (gtk_widget_get_colormap (top_table), &tips_fg); + tips_bg.red = 61669; + tips_bg.green = 59113; + tips_bg.blue = 35979; + gdk_color_alloc (gtk_widget_get_colormap (top_table), &tips_bg); + gtk_tooltips_set_colors (tips,&tips_bg,&tips_fg); + /* Preview */ frame = gtk_frame_new(NULL); gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); - gtk_table_attach(GTK_TABLE(top_table), frame, 0, 1, 0, 1, 0, 0, 0, 0); + gtk_table_attach(GTK_TABLE(top_table), frame, 0, 1, 0, 1, 0, 0, 5, 0); gtk_widget_show(frame); wint.preview = gtk_preview_new(GTK_PREVIEW_COLOR); gtk_preview_size(GTK_PREVIEW(wint.preview), preview_width, preview_height); gtk_container_add(GTK_CONTAINER(frame), wint.preview); gtk_widget_show(wint.preview); - + /* Controls */ + frame = gtk_frame_new ("Color intensity"); + gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width(GTK_CONTAINER(frame), 0); + gtk_table_attach (GTK_TABLE (top_table), frame, 0, 4, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 0); + toggle_vbox = gtk_vbox_new (FALSE, 0); + gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); + gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); + table = gtk_table_new(1, 3, FALSE); gtk_container_border_width(GTK_CONTAINER(table), 0); - gtk_table_attach(GTK_TABLE(top_table), table, 0, 4, 1, 2, GTK_EXPAND | GTK_FILL, 0, 0, 0); + gtk_box_pack_start (GTK_BOX (toggle_vbox), table, FALSE, FALSE, 0); gtk_widget_show(table); - dialog_create_value("R", GTK_TABLE(table), 0, &wvals.redstretch,0,128); + dialog_create_value("R", GTK_TABLE(table), 0, &wvals.redstretch,0,128.00000000000, "Change intensity of the red channel"); table2 = gtk_table_new(1, 3, FALSE); gtk_container_border_width(GTK_CONTAINER(table2), 0); - gtk_table_attach(GTK_TABLE(top_table), table2, 0, 4, 2, 3, GTK_EXPAND | GTK_FILL, 0, 0, 0); + gtk_box_pack_start (GTK_BOX (toggle_vbox), table2, FALSE, FALSE, 0); gtk_widget_show(table2); - dialog_create_value("G", GTK_TABLE(table2), 0, &wvals.greenstretch,0,128); + dialog_create_value("G", GTK_TABLE(table2), 0, &wvals.greenstretch,0,128.0000000000000, "Change intensity of the green channel"); table3 = gtk_table_new(1, 3, FALSE); gtk_container_border_width(GTK_CONTAINER(table3), 0); - gtk_table_attach(GTK_TABLE(top_table), table3, 0, 4, 3, 4, GTK_EXPAND | GTK_FILL, 0, 0, 0); + gtk_box_pack_start (GTK_BOX (toggle_vbox), table3, FALSE, FALSE, 0); gtk_widget_show(table3); - dialog_create_value("B", GTK_TABLE(table3), 0, &wvals.bluestretch,0,128); + dialog_create_value("B", GTK_TABLE(table3), 0, &wvals.bluestretch,0,128.00000000000000, "Change intensity of the blue channel"); + gtk_widget_show(toggle_vbox); + gtk_widget_show(frame); + frame = gtk_frame_new ("Phase displacement"); + gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width(GTK_CONTAINER(frame), 0); + gtk_table_attach (GTK_TABLE (top_table), frame, 0, 4, 4, 5, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 0); + toggle_vbox = gtk_vbox_new (FALSE, 0); + gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); + gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); + + table = gtk_table_new(1, 3, FALSE); + gtk_container_border_width(GTK_CONTAINER(table), 0); + gtk_box_pack_start (GTK_BOX (toggle_vbox), table, FALSE, FALSE, 0); + gtk_widget_show(table); + gtk_widget_show(toggle_vbox); + gtk_widget_show(frame); + + + dialog_create_value("R", GTK_TABLE(table), 0, &wvals.redphase,-pi,pi, "Change phase displacement of function for red channel"); + + + table2 = gtk_table_new(1, 3, FALSE); + gtk_container_border_width(GTK_CONTAINER(table2), 0); + gtk_box_pack_start (GTK_BOX (toggle_vbox), table2, FALSE, FALSE, 0); + gtk_widget_show(table2); + + dialog_create_value("G", GTK_TABLE(table2), 0, &wvals.greenphase,-pi,pi, "Change phase displacement of function for green channel"); + + + table3 = gtk_table_new(1, 3, FALSE); + gtk_container_border_width(GTK_CONTAINER(table3), 0); + gtk_box_pack_start (GTK_BOX (toggle_vbox), table3, FALSE, FALSE, 0); + gtk_widget_show(table3); + + dialog_create_value("B", GTK_TABLE(table3), 0, &wvals.bluephase,-pi,pi, "Change phase displacement of function for blue channel"); + + + frame = gtk_frame_new ("Frequency"); + gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width(GTK_CONTAINER(frame), 0); + gtk_table_attach (GTK_TABLE (top_table), frame, 0, 4, 7, 8, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 0); + toggle_vbox = gtk_vbox_new (FALSE, 0); + gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); + gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); + + table = gtk_table_new(1, 3, FALSE); + gtk_container_border_width(GTK_CONTAINER(table), 0); + gtk_box_pack_start (GTK_BOX (toggle_vbox), table, FALSE, FALSE, 0); + gtk_widget_show(table); + gtk_widget_show(toggle_vbox); + gtk_widget_show(frame); + + dialog_create_value("R", GTK_TABLE(table), 0, &wvals.redfrequency,0,10, "Change frequency of function for red channel"); + + + table2 = gtk_table_new(1, 3, FALSE); + gtk_container_border_width(GTK_CONTAINER(table2), 0); + gtk_box_pack_start (GTK_BOX (toggle_vbox), table2, FALSE, FALSE, 0); + gtk_widget_show(table2); + + dialog_create_value("G", GTK_TABLE(table2), 0, &wvals.greenfrequency,0,10, "Change frequency of function for green channel"); + + + table3 = gtk_table_new(1, 3, FALSE); + gtk_container_border_width(GTK_CONTAINER(table3), 0); + gtk_box_pack_start (GTK_BOX (toggle_vbox), table3, FALSE, FALSE, 0); + + gtk_widget_show(table3); + + dialog_create_value("B", GTK_TABLE(table3), 0, &wvals.bluefrequency,0,10, "Change frequency of function for blue channel"); + /* Redmode toggle box */ - frame = gtk_frame_new ("Red:"); + frame = gtk_frame_new ("Red"); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (top_table), frame, 1, 2, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 5); - toggle_vbox = gtk_vbox_new (FALSE, 5); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 5); + gtk_table_attach (GTK_TABLE (top_table), frame, 1, 2, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 0); + toggle_vbox = gtk_vbox_new (FALSE, 0); + gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); toggle = gtk_radio_button_new_with_label (redmode_group, "Sine"); @@ -729,6 +1012,8 @@ alienmap_dialog(void) &do_redsinus); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_redsinus); gtk_widget_show (toggle); + + set_tooltip(tips,toggle,"Use sine-function for red component"); toggle = gtk_radio_button_new_with_label (redmode_group, "Cosine"); redmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); @@ -738,6 +1023,7 @@ alienmap_dialog(void) &do_redcosinus); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_redcosinus); gtk_widget_show (toggle); + set_tooltip(tips,toggle,"Use cosine-function for red component"); toggle = gtk_radio_button_new_with_label (redmode_group, "None"); redmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); @@ -747,17 +1033,36 @@ alienmap_dialog(void) &do_rednone); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_rednone); gtk_widget_show (toggle); + set_tooltip(tips,toggle,"Red channel: use linear mapping instead of any trigonometrical function"); + + toggle = gtk_check_button_new_with_label("Inversion 1"); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) alienmap_toggle_update, + &wvals.redinvert); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), wvals.redinvert); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "If you enable this option, higher color values will be swapped with lower ones (and vice versa) before color transformation is applied."); + + toggle = gtk_check_button_new_with_label("Inversion 2"); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) alienmap_toggle_update, + &wvals.redinvert2); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), wvals.redinvert2); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "If you enable this option, higher color values will be swapped with lower ones (and vice versa) after color transformation is applied."); gtk_widget_show (toggle_vbox); gtk_widget_show (frame); /* Greenmode toggle box */ - frame = gtk_frame_new ("Green:"); + frame = gtk_frame_new ("Green"); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (top_table), frame, 2, 3, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 5); - toggle_vbox = gtk_vbox_new (FALSE, 5); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 5); + gtk_table_attach (GTK_TABLE (top_table), frame, 2, 3, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 0); + toggle_vbox = gtk_vbox_new (FALSE, 0); + gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); toggle = gtk_radio_button_new_with_label (greenmode_group, "Sine"); @@ -768,6 +1073,7 @@ alienmap_dialog(void) &do_greensinus); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_greensinus); gtk_widget_show (toggle); + set_tooltip(tips,toggle,"Use sine-function for green component"); toggle = gtk_radio_button_new_with_label (greenmode_group, "Cosine"); greenmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); @@ -777,6 +1083,7 @@ alienmap_dialog(void) &do_greencosinus); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_greencosinus); gtk_widget_show (toggle); + set_tooltip(tips,toggle,"Use cosine-function for green component"); toggle = gtk_radio_button_new_with_label (greenmode_group, "None"); greenmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); @@ -786,17 +1093,37 @@ alienmap_dialog(void) &do_greennone); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_greennone); gtk_widget_show (toggle); + set_tooltip(tips,toggle,"Green channel: use linear mapping instead of any trigonometrical function"); + toggle = gtk_check_button_new_with_label("Inversion 1"); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) alienmap_toggle_update, + &wvals.greeninvert); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), wvals.greeninvert); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "If you enable this option higher color values will be swapped with lower ones (and vice versa) before color transformation is applied."); + + toggle = gtk_check_button_new_with_label("Inversion 2"); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) alienmap_toggle_update, + &wvals.greeninvert2); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), wvals.greeninvert2); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "If you enable this option higher color values will be swapped with lower ones (and vice versa) after color transformation is applied."); + + gtk_widget_show (toggle_vbox); gtk_widget_show (frame); /* Bluemode toggle box */ - frame = gtk_frame_new ("Blue:"); + frame = gtk_frame_new ("Blue"); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (top_table), frame, 3, 4, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 5); - toggle_vbox = gtk_vbox_new (FALSE, 5); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 5); + gtk_table_attach (GTK_TABLE (top_table), frame, 3, 4, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 0); + toggle_vbox = gtk_vbox_new (FALSE, 0); + gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); toggle = gtk_radio_button_new_with_label (bluemode_group, "Sine"); @@ -807,6 +1134,7 @@ alienmap_dialog(void) &do_bluesinus); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_bluesinus); gtk_widget_show (toggle); + set_tooltip(tips,toggle,"Use sine-function for blue component"); toggle = gtk_radio_button_new_with_label (bluemode_group, "Cosine"); bluemode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); @@ -816,6 +1144,7 @@ alienmap_dialog(void) &do_bluecosinus); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_bluecosinus); gtk_widget_show (toggle); + set_tooltip(tips,toggle,"Use cosine-function for blue component"); toggle = gtk_radio_button_new_with_label (bluemode_group, "None"); bluemode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); @@ -825,10 +1154,28 @@ alienmap_dialog(void) &do_bluenone); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_bluenone); gtk_widget_show (toggle); + set_tooltip(tips,toggle,"Blue channel: use linear mapping instead of any trigonometrical function"); + + toggle = gtk_check_button_new_with_label("Inversion 1"); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) alienmap_toggle_update, + &wvals.blueinvert); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), wvals.blueinvert); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "If you enable this option higher color values will be swapped with lower ones (and vice versa) before color transformation is applied."); + + toggle = gtk_check_button_new_with_label("Inversion 2"); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) alienmap_toggle_update, + &wvals.blueinvert2); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), wvals.blueinvert2); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "If you enable this option higher color values will be swapped with lower ones (and vice versa) after color transformation is applied."); gtk_widget_show (toggle_vbox); gtk_widget_show (frame); - /* gtk_widget_show (table); */ /* Buttons */ @@ -844,7 +1191,18 @@ gtk_container_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), 6); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); gtk_widget_grab_default(button); gtk_widget_show(button); + set_tooltip(tips,button,"Accept settings and apply filter on image"); + button = gtk_button_new_with_label("Animation"); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc) dialog_animation_callback, + dialog); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); + gtk_widget_show(button); + set_tooltip(tips,button,"Create an animation with the color-cycling script and then exit this dialog box."); + + button = gtk_button_new_with_label("Cancel"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_signal_connect(GTK_OBJECT(button), "clicked", @@ -852,6 +1210,7 @@ gtk_container_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), 6); dialog); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); gtk_widget_show(button); + set_tooltip(tips,button,"Reject any changes and close plug-in"); button = gtk_button_new_with_label("About..."); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); @@ -860,10 +1219,13 @@ gtk_container_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), 6); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); gtk_widget_show(button); + set_tooltip(tips,button,"Show information about this plug-in and the author"); + /* Done */ gtk_widget_show(dialog); + ready=1; dialog_update_preview(); gtk_main(); @@ -890,10 +1252,12 @@ dialog_update_preview(void) int px, py; int x, y; double redstretch, greenstretch, bluestretch; + double redphase, greenphase, bluephase; + double redfrequency, greenfrequency, bluefrequency; short int r,g,b; double scale_x, scale_y; guchar *p_ul, *i, *p; - + if (ready==0) return; left = sel_x1; right = sel_x2 - 1; bottom = sel_y2 - 1; @@ -904,6 +1268,14 @@ dialog_update_preview(void) redstretch = wvals.redstretch; greenstretch = wvals.greenstretch; bluestretch = wvals.bluestretch; + + redphase = wvals.redphase; + greenphase = wvals.greenphase; + bluephase = wvals.bluephase; + + redfrequency = wvals.redfrequency; + greenfrequency = wvals.greenfrequency; + bluefrequency = wvals.bluefrequency; scale_x = (double) (preview_width - 1) / (right - left); scale_y = (double) (preview_height - 1) / (bottom - top); @@ -920,14 +1292,16 @@ dialog_update_preview(void) r = *i++; g = *i++; b = *i; - transform(&r,&g,&b,redstretch, greenstretch, bluestretch); + transform(&r,&g,&b,redstretch, greenstretch, bluestretch + , redphase, greenphase, bluephase, + redfrequency, greenfrequency, bluefrequency); p_ul[0] = r; p_ul[1] = g; p_ul[2] = b; p_ul += 3; - px += 1; /*dx; */ + px += 1; } /* for */ - py +=1; /* dy; */ + py +=1; } /* for */ p = wint.wimage; @@ -945,7 +1319,7 @@ dialog_update_preview(void) static void dialog_create_value(char *title, GtkTable *table, int row, gdouble *value, - int left, int right) + int left, int right, const char *desc) { GtkWidget *label; GtkWidget *scale; @@ -960,8 +1334,8 @@ dialog_create_value(char *title, GtkTable *table, int row, gdouble *value, scale_data = gtk_adjustment_new(*value, left, right, - (right - left) / 128, - (right - left) / 128, + (right - left) / 1000, + (right - left) / 1000, 0); gtk_signal_connect(GTK_OBJECT(scale_data), "value_changed", @@ -975,6 +1349,7 @@ dialog_create_value(char *title, GtkTable *table, int row, gdouble *value, gtk_scale_set_digits(GTK_SCALE(scale), 3); gtk_range_set_update_policy(GTK_RANGE(scale), GTK_UPDATE_CONTINUOUS); gtk_widget_show(scale); + set_tooltip(tips,scale,desc); entry = gtk_entry_new(); gtk_object_set_user_data(GTK_OBJECT(entry), scale_data); @@ -987,6 +1362,8 @@ dialog_create_value(char *title, GtkTable *table, int row, gdouble *value, value); gtk_table_attach(GTK_TABLE(table), entry, 2, 3, row, row + 1, GTK_FILL, GTK_FILL, 4, 0); gtk_widget_show(entry); + set_tooltip(tips,entry,desc); + } /* dialog_create_value */ /*****/ @@ -1095,6 +1472,7 @@ alienmap_toggle_update (GtkWidget *widget, wvals.bluemode = COSINUS; else if (do_bluenone) wvals.bluemode = NONE; + dialog_update_preview(); } @@ -1111,8 +1489,8 @@ alienmap_logo_dialog() GtkWidget *xvbox; GtkWidget *xhbox; char *text; - gchar *temp,*temp2; - char *datapointer; + guchar *temp,*temp2; + unsigned char *datapointer; gint y,x; xdlg = logodlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(xdlg), "About"); @@ -1130,6 +1508,7 @@ alienmap_logo_dialog() xbutton, TRUE, TRUE, 0); gtk_widget_grab_default(xbutton); gtk_widget_show(xbutton); + set_tooltip(tips,xbutton,"This closes the information box"); xframe = gtk_frame_new(NULL); gtk_frame_set_shadow_type(GTK_FRAME(xframe), GTK_SHADOW_ETCHED_IN); @@ -1153,7 +1532,7 @@ alienmap_logo_dialog() xpreview = gtk_preview_new (GTK_PREVIEW_COLOR); gtk_preview_size (GTK_PREVIEW (xpreview), logo_width, logo_height); temp = g_malloc((logo_width+10)*3); - datapointer=header_data; + datapointer=header_data+logo_width*logo_height-1; for (y = 0; y < logo_height; y++){ temp2=temp; for (x = 0; x< logo_width; x++) { @@ -1176,8 +1555,8 @@ alienmap_logo_dialog() "CH-3066 Stettlen (Switzerland)\n\n" "cotting@mygale.org\n" "http://www.mygale.org/~cotting\n\n" - "AlienMap Plug-In for the GIMP\n" - "Version 1.00\n"; + "AlienMap Plug-In for the GIMP\n" + "Version 1.03\n"; xlabel = gtk_label_new(text); gtk_box_pack_start(GTK_BOX(xhbox), xlabel, TRUE, FALSE, 0); gtk_widget_show(xlabel); diff --git a/plug-ins/AlienMap/logo.h b/plug-ins/AlienMap/logo.h index 871a318a06..cb94ec445f 100644 --- a/plug-ins/AlienMap/logo.h +++ b/plug-ins/AlienMap/logo.h @@ -1,4 +1,4 @@ -/* GIMP header image file format (RGB-only): //logo.h */ +/* GIMP header image file format (Indexed): //logo.h */ static unsigned int logo_width = 200; static unsigned int logo_height = 72; @@ -6,9 +6,783 @@ static unsigned int logo_height = 72; /* Call this macro repeatedly. After each use, the pixel data can be extracted */ #define HEADER_PIXEL(data,pixel) \ - pixel[0] = (((data[0] - 33) << 2) | ((data[1] - 33) >> 4)); \ - pixel[1] = ((((data[1] - 33) & 0xF) << 4) | ((data[2] - 33) >> 2)); \ - pixel[2] = ((((data[2] - 33) & 0x3) << 6) | ((data[3] - 33))); \ - data += 4; + pixel[0] = palette_data[data[0]*3+2]; \ + pixel[1] = palette_data[data[0]*3+1]; \ + pixel[2] = palette_data[data[0]*3+0]; \ + data--; -static char *header_data = ")1!X)1!X)A!Y)Q!\\)Q!\\)A!Z)A!Z)Q!])A!Z)A!Z)1!X)Q!\\*!!^)Q!])Q!]*1\"!*1\"!*1\"\"*1\"!*1\"!*1\"!*1\"!*Q\"%*!!_*!!_*!!_*1\"\"*!!^*A\"$+!\"(*!!_*Q\"%*1\"\"*A\"$*Q\"%*A\"#*A\"#*1\"\"*!!_*!!_*A\"$*Q\"&+A\",*Q\"%*A\"$*A\"$*Q\"$+!!\\*A\"#+1\"+*A\"$*Q\"%+1\"++!\")+Q\".+A\",+Q\".+1\"+*Q\"%*A\"$*A\"$*A\"$+!\"(*1!`*A\"$+A\"-+A\"-+A\",,!\"1,!\"1+A\",,!\"2+1\"++Q\"'+A\",+A\"-+A\",*A\"$*A\"$*A\"$+!\"(+!\"(+!\"(+1\"+*Q\"'+!\"(+!\"(+A\",,!\"),1\"2+A\",,!\"2+Q\"0,!\"1,!\"1,!\"1+A\"-+A\",,!\"1+A\"-,1\"2,!\"2+A\",+A\".+1\"++A\"-+Q\".+Q\"0+A\"-+Q\".+Q\".,!\"1,!\")+A\"+*Q\"'+A\"-+A\"-+A\",,!\"1,Q\"*+Q\".+A\".+A\"-+Q\".+Q\".+1\"++1\"+*Q\"%+!\"(*A\"$*A\"$*A\"$*A\"$*A\"$*A\"$+Q\".+A\",+Q\".,1\"4+Q\".+1\"++1\"*+1\")*Q\"&*!!_*A\"$*1\"!*A\"$*A\"$,!\"(+Q\".+1\"++!\"(*Q\"'*Q\"'*A\"$*1\"\"*1!`*!!_*A\"$*A\"$*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*A\"#*Q\"%)A!Z*A\"#*!!_*1\"!*Q\"%*Q\"%*1\"!+!\"(*!!_*1\"\")Q!]*A\"#)Q!\\*!!^*!!^*!!_)Q!]*!!^*1\"!*!!^)Q!\\)Q!\\*!!^*!!^*!!^)Q!])A!Z*!!^)1!X)A!Y)A!Z)1!W)1!X*!!^*!!^)Q!\\)Q!\\*1!`)Q!\\*1\"\")Q!]*1\"\"*A\"#*!!^*1\"\"*1\"!*1!`)Q!])Q!]*!!^*!!_*Q\"&*A\"\"*A\"\"*Q\"%*1\"\"*Q\"&*1!`*A\"#*A\"#*A\"$+!\"'*Q\"%*Q\"%*A\"#*A\"$*Q\"%*A\"#*A\"#*A\"#*Q\"&*Q\"'+1\")+Q\".+!\"(+1\"+*A\"$*A\"$*A\"$*A\"$*Q\"%*Q\"'+!\")+1\"++Q\".,!\"1+A\"-,1\"0+!\"(,!\"&+!\"$*A\"$*Q\"&*Q\"&+!\")+A\"-+A\",+Q\".+Q\"0,1\"3,!\"2+1\"+,!\"1+A\"+,!\".,A\"/+A\"++A\"-+Q\".+Q\"0+Q\".*Q\"'+1\")+1\"*+A\".+A\"-,!\"2,A\"3+Q\"-,1\"3,A\"1+A\"-,1\"3,1\"2,1\"0,!\"2,!\"2+Q\".,!\"1+A\".+A\"-,!\"1+A\"-+A\"-,!\"1+A\"-,!\"1+Q\"0,!\"0+Q\".+A\",+Q\"/+Q\"0+A\",,A\"0+A\"++A\"-+1\"+,!\"1,!\"1+A\"-,1\"4+1\"+,!\"1,!\"1,A\"1,!\"1,1\"4,1\"/,!\"1+A\",+Q\"/+A\"-*Q\"'*Q\"'*Q\"',1\"%,!\"1,!\"-,A\"*,!\"/,!\"1+Q\".+Q\".,!\"1+1\"*+1\"**Q\"'*A\"#*A\"$*Q\"%+1\"$+!\"(+1\"++A\"-+Q\".+A\"-+A\",+!\"(*A\"$*A\"$*A\"$*A\"$*Q\"%*Q\"%*Q\"%+1\"+*Q\"&+!\"(*Q\"%+!\"(*!!_*A\"$*A\"#*1!`*Q\"%*A\"\"*!!`*A\"\"*A\"#*A\"#*!!^*Q\"$*1\"!*A\"\"*A\"$*!!^*A\"$*1\"!*A\"\")Q!]*1\"!*!!^*!!_*!!^)Q!]*1!`)Q!\\)Q!\\)Q!]*!!`)1!X*!!^*!!^)A!Z*1\"!*A\"\"*!!^*1\"!)Q!]*1!`*Q\"%*!!^*A\"\"*!!^*1\"\"+!\"'*1\"\"*A\"#*1\"!*A\"$*A\"$*Q\"%*1!`*Q\"%*A\"#*A\"#*1\"\"*A\"$+A\"-+!\"(+!\"(*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%+1\"**Q\"%+A\"-+Q\"/,A\"/+Q\"++A\",*Q\"&*A\"$*A\"$*A\"$+!\")+Q\"/,1\"4+A\"-,!\"1,!\"1+A\".,!\"1,!\"&+1\"++A\",+!\"(+A\"-+A\",,1\"3,1\"4,1\"4-A\"1-A\"5-!\"5,1\"4+Q\"/+Q\"/+A\"-,1\"1,A\",+A\"-+A\"-+Q\"0+Q\"0,!\"1,1\"4.1\"5,A\"4,1\"4,1\"4.1\"5.1\"5-1\"5.Q\"6-Q\"5-A\"5-A\"5.1\"5,Q\"5-Q\"5,1\"4,1\"4.!\"0,1\"4,1\"4,Q\"3-1\"2,1\"4,1\"4,!\"1.!\"4,!\"2-1\".,1\"3-1\"1,Q\"4+Q\"0,!\"2,1\"3,!\"0,!\"1+A\"-,!\"2+A\",+A\",,!\"2+A\",,!\"1,!\"1,!\"1.!\"5.1\"5,A\"5.A\"6-Q\"5.1\"5-A\"1,A\"4,1\"4,!\"0+Q\".+1\"++Q\"$,!\"&+!\"(+A\"-+A\",,1\"4,1\"4,1\"4,1\"4,1\"4+Q\"/+Q\"/+!\")*Q\"&+!\"'+!\"(+!\"(+A\",+Q\".+Q\"0,!\"2+A\",+A\"-+1\"+*A\"$*A\"$*Q\"%*Q\"%*Q\"%+1\"*+A\",+A\",+A\"-+!\"'+!\"'*Q\"%+1\")*Q\"%*Q\"%*Q\"%+1\")*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*1\"!*A\"$*Q\"%*!!^+!\"'*1\"!*1!`*1!`+!\"'*A\"#*1\"!*1!`*Q\"$)Q!\\)Q!\\)Q!]*!!^*1!`*1\"!*1\"!*A\"$*1!`*A\"$*1\"!*A\"\"*!!`*A\"$*1!`*A\"$*Q\"%*A\"$*A\"$*A\"\"*A\"\"*Q\"'*A\"$*A\"$*A\"$*Q\"%*A\"$*Q\"%*Q\"%*A\"#*Q\"&*Q\"&+!\"(+1\"*+A\"-+!\"'*Q\"%*Q\"%*Q\"%*Q\"%+Q\"/+!\"(,1\"3+A\",,!\"2+A\"-+Q\".+1\"**Q\"&*Q\"&,!\"1,!\"2+Q\"/,A\"3-!\"5-A\"5-!\"4+A\"-+A\".+1\"*+A\",+A\",+Q\"/,!\"1-!\"1,1\"3.Q\"6.Q\"6.!\"6-!\"6,A\"5,1\"2+Q\"0+Q\"/,!\"1,!\"1,!\"2,1\"4,!\".-!\"4-A\"6-A\"8.Q\"8/1\"9-A\"8.Q\"7.Q\"7.A\"7.!\"7-1\"5.A\"6-1\"7-A\"8-Q\"6,A\"5-1\"5,Q\"5.!\"5-Q\"5,1\"4.1\"8-1\"5.Q\"6-Q\"9.Q\"6-1\"5/1\"8-A\"6.!\"6-A\"6.A\"7-Q\"7-1\"8.Q\"7/1\"9/A\"8-Q\"6-A\"6-!\"4-!\"4.!\"5-1\"6-!\"4,1\"4,1\"3,1\"4+Q\".,1\"4,1\"4,Q\"5,A\"4-A\"9-A\"8.1\"8-Q\"9-Q\"5.1\"7.Q\"8.A\"5,1\"3,A\"3+Q\".,1\"3,A\"&+1\"*-!\",,1\"3,1\"4.Q\"1/!\"8-1\"4-1\"5,1\"4,!\"0+Q\"/+!\"(+!\"(+A\",+1\")+A\"-+Q\".,1\"3+Q\"0,1\"3+1\"*+Q\"/+!\"(*Q\"%*Q\"&+!\"'+A\",+A\",+Q\"0+A\"++A\"-*Q\"%+!\"'*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"'+!\"'*Q\"%*Q\"%*Q\"%*Q\"%*A\"$*Q\"%*A\"$*Q\"%*Q\"%*1\"!*A\"#*A\"$*A\"#*!!`*A\"#*!!`*Q\"%*A\"$*1\"\"*Q\"%*!!`*A\"#*A\"#*1!`*A\"#*1\"!*A\"#*Q\"&*1\"!*A\"$*Q\"%*Q\"&*A\"$*Q\"%*Q\"%+!\"(*Q\"%*Q\"%*Q\"%*Q\"%*A\"$*Q\"%*Q\"%*Q\"%*Q\"%+Q\".+!\"'+Q\".+A\",+1\"++!\"'+!\"(+1\"++1\"*+Q\"/+Q\"/+Q\".,!\"1,A\"5,1\"3+A\",,1\"2+!\"(+1\"*+A\"-+Q\"-,1\"2,Q\"4/Q\"7-1\"5-1\"5,1\"4,1\"3+A\"-,!\"+,A\".+Q\"/,!\"0,A\"5.A\"6.A\":.!\"<.!\";.1\"8.Q\"7.!\"7,1\"4,!\"0,!\"0,!\"1,!\"1.A\"6.A\"/-1\"8.A\"<.Q\".!\";.Q\"?.Q\"?.Q\"?/!\"7/!\"7,Q\"6-A\"7.1\"9-Q\"5.!\"8-1\"8/A\":.Q\":-Q\"8/A\"8-1\"8.1\"8/1\"9.1\":.!\":.1\"9.A\":.Q\":.1\"8.A\"=.A\";.A\":/A\">.A\">-Q\":.Q\"?.1\"=.Q\"?/1\">/Q\"=/A\">.Q\"<.Q\"<0!\"=/1\">.1\"9.A\"6.A\"6-Q\"6/A\"6.!\"5-!\"5.A\"6-Q\"5-Q\"5.!\"5.A\"6.1\"8.A\"9/!\"=.Q\"?.!\"<.!\"<.A\"6.A\"6,A\"5,!\"1,!\"1+A\",+A\"-,1\"4-!\"7-!\"7.1\"8.A\"7.1\"6.A\"6,A\"5,1\"2+A\",+A\"-+A\",+!\"(,1\"4,Q\"5.1\"5,A\"5,!\"1,!\"1,!\"1+1\"*+A\",+!\"',A\"(,A\"(+Q\"/+Q\"/,1\"2+Q\"/+A\",+1\"**Q\"%*Q\"%+!\"(+!\"(+A\"-+A\",+!\")+A\"+*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"'*A\"#*Q\"'*1\"!*Q\"%*A\"$*Q\"%*Q\"%*A\"$*A\"#*1\"!*1\"!*A\"$*A\"$*A\"%*A\"$*A\"$*A\"$*Q\"&+1\")*A\"$+1\"**A\"$*Q\"%+!\"(*Q\"&+1\"++A\"-+!\"'+A\"-+A\"-+!\"'+Q\"/+1\"++A\"-+Q\"0+Q\"/,!\"1,!\"1+A\"-,!\"2+Q\".,1\".+Q\"*+Q\"0+A\"-,A\"5,A\"5.A\"6,A\"5+A\",,Q\"*+1\"*+Q\"/+Q\"0+Q\"/.A\"6.A\":.1\":.1\"8-Q\"6-A\"5,!\"2+A\",,!\"1,1\"4-Q\"5.!\"7.A\":/Q\"=.Q\"?.Q\"?.Q\";-Q\"7.!\"5,1\"4,1\"4,1\"4,Q\"5/1\"6.1\"9.A\":.Q\"?/A\"C.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.!\"9-1\"5.Q\"9.Q\":.!\"7.A\"=/A\":.1\"=/A\":/!\":.1\";.!\";.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/A\"C.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?-A\"9/A\":-A\"9-A\"9,Q\"6.!\"7,Q\"5,1\"4-1\"5-Q\"8.1\"8.Q\"?.Q\"?.Q\"?.Q\"?/Q\"=-A\"8-Q\"5,A\"5,1\"3+Q\"0,1\"4-Q\"5-A\"5.1\":.1\"=.A\":.A\":.1\"8-1\"5,1\"4+Q\"/-!\"0+A\",,1\"3.!\"5-A\"5-A\"5.A\"6-Q\"4+Q\"0+A\"-+Q\".,!\"0,!\"0+Q\"0,!\"1,!\"1-!\".,1\"3+A\"-+Q\"0+Q\"/+!\"'+Q\".+Q\"0+A\"-,!\"1,A\"(+A\",+1\")+Q\"/+!\")+!\"'+1\"*+!\"(*Q\"%+!\")+!\"(+!\"'*Q\"%*Q\"%*Q\"%*Q\"&+!\"(*Q\"%+!\"'+!\"(*A\"$*A\"$*A\"$*Q\"%*Q\"&+!\"'+1\"*+1\"++Q\".+1\"++Q\".+Q\".+A\"-,!\",,!\"(+Q\".+A\"-+A\"-+Q\".+A\",+A\",+1\")+Q\".,!\"2+Q\".,!\"1,!\"1+Q\".+A\"-+1\"),A\"3,!\"-,Q\"5-Q\"5.!\"6.Q\"6,A\"5,A\"5,!\"+,Q\"0,!\"1-!\"4.1\"6/Q\"9.1\"=.Q\"?/1\"9-Q\"8,A\"5,1\"4,1\"3,Q\"4.!\"5-A\"8/!\">.A\">.Q\"?.Q\"?.Q\"?/!\">,Q\"5,Q\"5.!\"5-Q\"6.!\"7.1\"=.A\"?/1\"@/A\"D/Q\"E0!\"G/1\"C/A\"D.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/!\"?.Q\"=/!\">/1\">/1\"@/!\"@/1\"B/1\"B/1\"C/Q\"F/A\"D/Q\"E/Q\"E/Q\"E01\"I01\"I0A\"K/Q\"F/1\"C/Q\"F/1\"B/1\"B/1\"B/Q\"F/1\"B/1\"A/!\"A/!\"@/1\"B/1\"B/!\"@.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/1\"B/Q\"E/1\"B/A\"D01\"I0A\"J01\"I/Q\"E/Q\"E/!\"A.Q\"@/1\"?/1\"8/!\"8-1\"7-A\"8.A\"9.1\"=.A\">.Q\"?.Q\"?/A\"D/1\"B/A\"@.1\"=/1\"9.1\"6-A\"5-!\"5,A\"4.Q\"7.!\":.Q\"?.Q\"?.Q\"?.A\"=.A\"7-!\"5,Q\"2,1\"3+A\"-,1\"4-1\"7/!\"8.Q\"<.1\"9.1\"6.A\"5,!\"1,!\"1,!\"1+1\"+,!\"2,A\"5,Q\"5,Q\"5,Q\"3+Q\"0,!\"1+!\")+A\"-+Q\"-,!\"0+Q\"/+A\",,!\"1+A\",+Q\".+!\"(,1\"+,1\".+!\")+A\",+1\")+A\",+!\"(+A\"*+A\",+!\"'+!\"(*Q\"%*Q\"%*Q\"%*Q\"%+1\"*+1\"++!\")+A\",+A\"-,Q\"++1\"++A\",,A\"(+A\"-+1\"*+1\"++A\"-+A\"-,!\"1+A\",+A\"-+A\"-+Q\"0+1\"*,!\"2,1\"3,A\"5,A\"5.1\"6,1\"5,1\"3,A\"+,!\".,!\"0,A\"5,Q\"5.1\"8.!\"6/!\"9-1\"5-!\"5,A\"5,A\"5,1\"4.1\"6/!\":.1\"=.Q\"?.Q\"?.1\"=-A\":.!\"5,Q\"5.1\"6-A\"5/Q\":.1\"=/Q\"F0!\"G/A\"D.Q\"?.Q\"?.1\"=.Q\"9/A\"6.1\"9-Q\";.!\".A\">.Q\"?.Q\"?/A\"D0!\"G0!\"G0A\"J1!\"N0Q\"M0Q\"M0Q\"M0Q\"M0Q\"M01\"I0Q\"M0Q\"M/Q\"F01\"I0Q\"M01\"J0Q\"M0Q\"M0Q\"M0Q\"M0Q\"M01\"J0Q\"M0Q\"L0A\"K01\"J0Q\"M0Q\"M0Q\"L0!\"G0!\"G0!\"G/A\"C/A\"D/A\"D/1\"B/1\"A/1\"C0!\"G/Q\"F0!\"G/Q\"F/Q\"F0Q\"M0Q\"M1!\"N0Q\"M0!\"G0!\"G/1\"B.Q\"?.1\"-Q\";-Q\":.Q\"?/!\"@/A\"C01\"J0A\"K0!\"G/Q\"F.1\"=/1\";-Q\";.Q\"8-!\"6.1\"8/Q\"<.Q\"?.Q\"?.Q\"?.Q\"?/A\"<-!\"7.1\"6,1\"4,1\"4.!\"5-1\"8.Q\"9/!\"@.1\"=-Q\";.Q\"8,!\"2,!\"2,!\"0,!\"0.1\"6-1\"5.1\"9/1\"6,Q\"5,A\"5-!\".+Q\"/,A\"-,!\".,!\"0,!\"2+A\"-,!\"0,!\"0+1\"+,!\"2+A\",+A\",+A\"-+A\",,!\"*+Q\"(+Q\"%,!\"+,A\"/+!\"'+A\",+!\")*Q\"&+1\"**Q\"'+A\",+A\",+A\",+A\",+A\"++A\"-+Q\"/+A\",+Q\".+A\",,1\"2,!\"1+Q\".,!\"1,!\"0,!\"1+A\"-+A\"-,1\"4,1\"/-1\"5/Q\"6-Q\"5,A\"5,A\"5,1\"4,A\"3,1\"4.A\"6.A\"9/1\">.Q\"?.A\">-Q\"9-Q\"5-1\"5-1\"5-Q\"6.A\"9/!\"?/!\"A/Q\"F.Q\"?.Q\"?.!\"7.!\"7.1\"8.Q\":.1\"/Q\"F0A\"K1!\"N0Q\"M0A\"K/1\"A.Q\"?.Q\"?.Q\"?/!\"@/Q\"F01\"J1!\"N2A\"X2!\"V1!\"O11\"P0!\"H01\"I0!\"G/1\"B/Q\"F01\"J0A\"L1!\"N1Q\"S2Q\"U3Q\"T2!\"V3A\"R31\"X2A\"T1Q\"T11\"P1!\"N0Q\"M0Q\"M0!\"H0Q\"L0Q\"L1!\"L1!\"K0A\"I/1\"8.1\"-/A\"811\">11\">11\"=11\">11\">11\">11\">11\">1A\"=1A\"A11\"A1A\"B0Q\"A0A\"E1A\"I1A\"P11\"P2!\"T2A\"Y3A\"U2A\"Z2Q\"Z3!\"U2Q\"Y2!\"V1A\"R0Q\"M0Q\"L0Q\"L01\"I0A\"J0Q\"L11\"Q1A\"R21\"W2Q\"U2A\"W1A\"R1!\"M0A\"J/Q\"F/!\"@/!\"@.Q\"?/1\"C0!\"G0Q\"M1A\"R1!\"O1!\"N01\"J/1\"C.A\">/!\">.Q\"<.Q\"?/!\"@0!\"H0A\"J0Q\"M01\"I/1\"C/1\">.!\":.Q\"6-A\"9-Q\":/!\"@/!\"@/!\"@.A\">/!\"?0!\":-Q\"6-Q\"5.Q\"7-Q\"6-!\"7.1\"=.Q\";.!\"<-!\"7,1\"2,A\"4,A\"5.Q\"6,Q\"5/!\"6-!\"5,A\"5,1\"3,1\"3,Q\"2,!\"1,!\"1,!\"1+A\"++Q\"0+Q\".,!\"1+A\",+A\"-+Q\"0+A\"%+A\"-+A\"-+Q\".,!\"1,!\"1,!\"1+Q\"/,1\"4-A\"5,Q\"5.!\"5,1\"4-Q\"0,A\"5.1\"/,A\"5.!\"5.1\"6-A\"5.1\"6-!\"8/1\";.Q\"=.A\"8.Q\"9,A\"5-A\"5.1\"9/Q\"=.A\">.1\"=/!\"@/!\"@/!\"@-!\"7.Q\"8/1\";.A\">/!\"@0!\"G0Q\"M01\"J01\"I/1\"C.Q\"?.Q\"?.Q\"?/!\"@/Q\"F1A\"R11\"P1Q\"T1!\"O0A\"J/1\"B/1\"B.Q\"?/!\"@/Q\"F1A\"R21\"P2A\"Z3A\"V3Q\"U1Q\"S0Q\"M01\"J01\"J0A\"J0!\"H0Q\"M2!\"Q2!\"R21\"W4!\"Z4!\"Z2Q\"Z2A\"Z2A\"Z2A\"Y1Q\"U1!\"N0Q\"M0Q\"M1!\"K0A\"F11\"D1!\"B/!\"4/!\"0/Q\"*/Q!`.1!^-1!X-A!Z/!\"!/Q\"+/A\",/1\")/A\"*/Q\"+/1\"*/1\"*01\"*0A\").Q\".1Q\")0Q\".1Q\"/1Q\"11Q\"11Q\"20Q\":1!\":1!\">11\"D11\"H2A\"O1Q\"U3A\"U3!\"Y2A\"Z2A\"Z2A\"Z2!\"S2!\"Q11\"Q1Q\"M01\"J1A\"R1A\"R2A\"U3Q\"U2A\"Z3!\"Y3!\"X1Q\"S1A\"S01\"J/Q\"F0!\"G/A\"C/Q\"F0Q\"M1Q\"T3!\"U2Q\"V2!\"R1!\"O/Q\"E.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F0A\"K0Q\"M0Q\"M/Q\"F/!\"@.Q\"?.Q\":/1\"8/!\"@/!\"@/A\"D0A\"K/1\"B/1\"C.A\">-A\"9.!\"5-A\"9/1\";/!\"@/!\"@/!\"@/!\"?.A\"8/!\"6-1\"5-A\"5-A\"5.1\"8/!\"60!\"9.!\"5.!\"5,A\"5,A\"5.!\"5,A\"5.1\"6,A\"5,1\"2,!\"1,!\"1,!\"1+A\"-,!\"2+A\",,1\"3,1\"3,1\"3,1\"4,1\"4-!\"3.A\"/-A\"5,Q\"5-1\"6-!\"5.!\"7-Q\"8-!\"7.!\"9-1\"6.!\"6.!\"9-1\"9-A\":/1\"?.Q\"?.1\":.!\"9/A\":/1\"/!\"A/A\"E/A\"D/Q\"E/!\"@/!\"@/Q\";.A\">/1\"@01\"I0A\"K0Q\"M0Q\"M01\"I/1\"C/!\"A.Q\"?/1\"A/Q\"F1!\"N2A\"W21\"S21\"W1!\"O0Q\"L/Q\"F/A\"C/1\"B0Q\"L11\"O2A\"W3Q\"W2Q\"Y2A\"Z3!\"Y2!\"S1A\"S0Q\"M0Q\"L0Q\"L1Q\"R2!\"R31\"X31\"\\41#!3Q\"`41#\"3A\"^3!\"Y3A\"V1Q\"T1!\"O1!\"K0Q\"J11\"G0A\"<0Q\"60A\"+.A\"\".!!^-1!\\-A!Z-1!X+Q!X-1!X-1!X-A!Z.A\"!.1!].Q!_.1!`.A!^.A!].Q\"!.Q\"!.Q\"!.Q\"!.Q\"\".Q\"\".A\"\"/!\"#/!\"$/!\"&1!\"&1!\"(11\"(1Q\".1Q\"01Q\"41A\"71Q\"91!\"B1A\"J3!\"P31\"S31\"[4!#!3A\"^3!\"\\2Q\"Y1Q\"T11\"P1!\"O1Q\"S2!\"V3Q\"\\4!\"^3A\"_4!#!4!\"X31\"V2!\"S0A\"K0!\"G01\"H0!\"H0Q\"M2!\"S3!\"Y3!\"Y3A\"V1Q\"S1!\"O/1\"B/1\"B/!\"A/Q\"F01\"I11\"Q1A\"R1Q\"R1!\"M/Q\"F/1\"A/1\"?/!\"@/!\"@/!\"@0A\"K0A\"J0!\"H/1\"B/!\"A/!\">/A\";.!\";.1\"=/!\"@/!\"@/!\"@.Q\"?.1\".A\">/!\"@/!\"@.Q\";.1\"<.!\";/!\"@/!\"A0!\"G0Q\"L01\"J.Q\"?/!\"@/!\"@/!\"@/!\"@01\"J1!\"N1A\"Q1!\"N01\"H/A\"E.Q\"?.Q\"?/1\"B0A\"K1Q\"N3A\"T3!\"X31\"W1A\"R0A\"J/Q\"F0A\"K0Q\"M1A\"R2Q\"U4!\"]4A\"_4A#$3!\"]3A\"V3!\"V0Q\"M0Q\"M0Q\"M2!\"U21\"V4A\"_41#(4Q#(4Q#*4Q#%3A\"_2Q\"[3A\"V2Q\"U1A\"R0Q\"M1!\"C1!\"=01\"5/Q\"*.A\"!-Q!\\-1!X-1!X-1!X-1!X-1!X-1!X-1!X-1!X-1!U-1!X-1!X-A![/A!\\0!\"\"1A\"'0Q\"'2Q\"+3!\"+3A\",3A\"-3A\"-21\".21\"-2A\"%0A\"$01\"$/A\"$/A\"$/!\"#/Q\"$/Q\"$0A\"$1A\"%1Q\")1Q\"-1Q\"-1A\"91A\"?21\"A21\"Q3!\"V4A\"[3Q\"`4!#!2Q\"[21\"W2A\"S2A\"T3A\"V31\"W3A\"_4Q#%4Q#%4A##4!#!4!\"Y2!\"U11\"Q0A\"K0Q\"M0Q\"M3!\"Y2Q\"Y3Q\"[3!\"[21\"W1A\"R0Q\"M0!\"G/!\"@/A\"C0Q\"M1A\"R2Q\"V2A\"Y11\"P0A\"K/1\"B/!\"@/!\"@/!\"@/A\"E01\"H1!\"N01\"J/Q\"E/!\"@/!\"@/!\"@-Q\";.1\"=/!\"@/!\"A/A\"D.1\"=.1\"=.Q\";-A\"7.Q\";/A\"9.!\";/Q\"=.!\"<-Q\";.1\"7,Q\"6.Q\"9.!\"6.Q\"9.A\"9-A\"5-A\"5-1\"5,A\"5,A\"5,A\"5-Q\"5-1\"5-A\"5.!\"8.Q\"6-Q\":/!\"8/1\";.1\":.1\"=.!\";.1\"<.!\"<.A\"=.1\"=/!\"?/!\"@/!\"@/!\"@.Q\"?/!\"@/!\"@.Q\"?.Q\"?.Q\"?0!\"H0Q\"M0Q\"M/Q\"F0!\"G.Q\"?/!\"@/1\"B0!\"G0Q\"M1Q\"Q2A\"V21\"R1A\"Q0A\"J0!\"H0!\"G0Q\"M1A\"S3A\"V3A\"^31\"]3!\"Y3A\"U11\"Q0A\"J0Q\"M11\"P3!\"W4!\"X4Q#%4Q#%4Q#%3Q\"`2Q\"[2Q\"U11\"Q2!\"V3!\"X41\"Z41#%5A#*5Q#06A#-6!#)4Q#&3A\"^3Q\"\\31\"U21\"Q1!\"K01\"?01\"4.!\"+.!!`-A!Y-A!Y-1!X-1!X-1!X-1!W,A!W-1!W-A!U/!!`11\"&2!\"+41\"17Q\"79Q\"?:1\"A;Q\"H;A\"B9A\">:A\"?:!\"781\";:A\"<:Q\"?:Q\"?;Q\"C0!\"<-Q\":/1\"9-!\"7-A\"7.1\":.A\"6.!\":01\"8.1\"8.1\"8.A\"9.A\":-1\"5-Q\"9.1\"9/!\"8.!\"<-Q\";.1\"=.Q\"?/A\">/!\"<.Q\"?.A\">.1\"=/!\"@/!\"A/A\"E/1\"A.Q\"?/!\"@/!\"@/!\"@/!\"A/Q\"F1!\"N1!\"N1!\"N0Q\"L0A\"K/!\"@/Q\"F0!\"G1!\"N2!\"S2Q\"Y3Q\"U2!\"R11\"P0A\"J0Q\"M0Q\"L21\"V3Q\"W3Q\"`4Q#%3A\"_3!\"X1A\"Q1!\"N11\"O2A\"V31\"W4Q##5!#+51#-51#'41#\"3!\"Z3A\"V31\"X3A\"T41\"\\5!#$5Q#-6!#061#06A#05!#)4Q#&4!\"Z4!\"T2!\"R1A\"F11\">.!\"7.1\"&-Q\"!-A![-1!X-1!X-1!X-1!X,A!V*Q!W.1!V.Q\"!3A\"+7A\";:1\"A=1\"?:Q\";9!\"68Q\"67Q\"-5A\")5A\"%4Q\")51\"&51\"(5Q\"(51\"+5Q\"25A\"16!\"*5!\"+4Q\"*4!\"(51\"+5A\".81\"08Q\"6;Q\"A>1\"F>1\"O;A\"L9Q\"E61\";2A\",0Q\")1!\"&0!\"'.Q\")01\"*0A\".1A\"70Q\":11\"@2!\"L31\"X3Q\"_4A##4A#!41\"^2Q\"[3A\"V4Q\"`4Q#%5Q#*6A#.61#-5Q#*4Q#\"3!\"Y3!\"V1A\"Q3!\"V31\"W4A#\"4Q#%4Q#%4A##41\"\\21\"U1!\"O1!\"N0!\"G0Q\"M3A\"U2Q\"Z3Q\"`3!\"X1Q\"R0Q\"L0!\"G01\"I0A\"K1!\"N11\"Q2Q\"Q1Q\"T0Q\"M/Q\"E/!\"A/!\"@/!\"A01\"I0A\"L01\"I0!\"H/Q\"F.Q\"?.A\">/!\"@/!\"@/!\"@.A\">/!\"@/!\"@/!\"@.A\">-Q\";/A\".A\">.Q\"?.Q\"?.Q\"?.Q\"?/!\"@.1\"=.Q\"?/!\"@/1\"B0!\"G01\"J0A\"K/1\"B/!\"@/!\"@/1\"C0Q\"L1A\"Q0Q\"M1A\"R1!\"N0!\"G0A\"K01\"I1!\"N1Q\"T3A\"U3Q\"U2A\"[31\"W1Q\"T1!\"N01\"I11\"P31\"V41\"]4Q#&4Q#'41#\"3A\"\\3Q\"U1A\"R2!\"V41\"W41\"`51#.6A#06Q#)5A#,4Q#$4Q\"[3Q\"W2A\"Z4A\"\\4Q#(51#+5A#+4Q#+5Q#05Q#04Q#+41##4!\"[2Q\"R01\"G01\"<.A\"5.1\")-Q!\\-1!X-1!X-1!X-1!X-1!W,!!U,1!R/A!V3Q\"/:!\"7.A\">-A\":.1\"=.A\"=.Q\"?.Q\"?.Q\"?.A\">.A\">.Q\"?.Q\"?.Q\"?.Q\"?/Q\"E.Q\"?/!\"@/!\"@/A\"D0A\"J0Q\"L0Q\"L1!\"N0!\"G0A\"K/1\"B01\"I0Q\"M11\"P1A\"R1Q\"U1A\"S1!\"N0A\"K0A\"J1!\"O1Q\"Q31\"W4!\"`3A\"_2Q\"Z2A\"V1!\"N1!\"N2!\"V3A\"U4A#!5!#(5!#(4Q#&41\"^3A\"W3A\"V31\"W3Q\"[5!#)61#/6A#06Q#061#/5!#&3Q\"`3A\"\\3A\"_4A#'5Q#.51#-5!#&4Q#&51#,6!#05!#)41\"`3A\"U11\"N1!\"C/Q\"7/1\"%-Q!`-Q![-A![-A![-Q!\\,Q!X+Q!U,A!W0!!`8!\"71!\"K21\"W4!\"]4Q#&4Q#)4Q#%4Q#&4Q#'6!#/5Q#05!#.5A#*6!#/51#+3A\"_3!\"Z2Q\"Z4!\"^4Q#&5A#*6A#061#/5A#&3A\"[2Q\"W1A\"O21\"S3A\"V41##5!#&4Q#%4Q\"`31\"X1A\"N1!\"N1!\"N11\"P3!\"R3!\"Y2Q\"Z1Q\"U1Q\"T01\"I01\"I01\"I0Q\"M1!\"N1!\"N1!\"O01\"I0A\"L/A\"C/!\"@/Q\"E/1\"B/Q\"E01\"I/1\"C/!\"@/!\"@/!\"@/!\"@.Q\"?.Q\"?-Q\";.Q\"?-Q\";.!\";.1\"=.1\"=.!\"<.1\"=.1\"=.Q\"?.Q\"?.Q\"?/1\"B/1\"C.Q\"?/Q\"F0!\"H0A\"L0A\"L1!\"N1!\"N01\"I0A\"K0A\"L0A\"L0Q\"L1A\"R21\"S4!\"T2A\"Y11\"P1!\"N1!\"N1!\"N2Q\"U31\"Z4!#!4!#!3Q\"`3!\"Y21\"U1A\"R31\"Q4!\"\\41##4Q#$51#&5!#)4Q#%2A\"Z31\"W31\"W4!#\"5Q#*6!#.5A#*5Q#-6A#/51#'41##4A#$4Q#%6!#-51#,51#(4Q#%4Q#%4Q#-6!#051#.4!#!3Q\"S1A\"L0Q\";.1\"1.Q\"$,Q![-1!X-A![-1!Y-!!R+!!H,1!R1A\"#7A\"99Q\"8:!\"+7Q\"+3Q\"%51\"-51\"22Q\"0/Q\"#-Q!X+!!U-Q![2!\"%7A\"8BQ\"7CQ\"2AA\"1BQ\"1B1\"2B1\"2D!\"6BQ\"9B!\";A1\"A@Q\"H;A\"C6A\"92!\"'.!!Z-1!V-A!T/A!^1Q\"$3A\"&1!\"%11\"%41\"/;Q\"DBQ\"]C1#!=!\"S41\"811\"(.1\"\".1\"$0!\"'/Q\"21!\"70A\";1!\"C1Q\"N2Q\"Z4A#$4Q#%4Q#%4Q#%51#*6!#05A#)4Q#%4!#$5!#(6!#-4A##4!#!3Q\"Z4!#!5A#)6Q#05Q#061#+51#+4!\"`3Q\"U2Q\"Z4!\"T3A\"_5!#&5!#&5!#*41##3A\"S21\"S1!\"N1A\"S31\"T2Q\"Z3A\"_2Q\"[21\"W1A\"R1!\"N0A\"J1!\"N11\"P11\"Q1Q\"T1Q\"T1!\"N0Q\"L0!\"H/Q\"E01\"I0!\"H0!\"G0!\"H/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@.Q\"?.Q\"?/1\"B/1\"A/1\"A/A\"E0!\"G0!\"H0A\"K/Q\"E0A\"J/Q\"F01\"I1!\"N1!\"O11\"Q1!\"N1!\"N0A\"K0A\"J1!\"O1Q\"S3Q\"U2Q\"Z2Q\"[31\"T1A\"S11\"P11\"P2A\"Y4A\"[4A#$3!\"[41#\"31\"]4!\"T2A\"R3!\"X3Q#!4!#!,AR6)QB!3Q\"_4Q#%3Q\"`3A\"_3Q\"`4Q#(5!#+1Q\"P1!\"O4A#$61#05A#.4Q#%4Q#%51#)5A#.5!#+4Q#,5A#)51#)4Q#(5Q#051#.4Q\"]3A\"Q11\"E/1\"6.!\"'.1\"\".!!_.1\"\"/1\"#-Q!\\+!!Q+!!O0Q\"(71\"5;1\"2:Q\".6A\"*61\"-6Q\"55!\"31Q\"(-Q!W.1!X2Q\"'7Q\"0?Q\"FC1\"@B1\"*@!!W<1!L6Q!?4Q!;21!91!!;/Q!5.Q!:-1!7.Q!8.Q!:.Q!:1!!>4!!<61!>81!D=A!M@1!VCQ\"-BA\"7?!\"?9A\":2Q\"*-A!^+1!W.Q!\\2Q\"$21\"'11!_2A\"'9Q\"?C1\"[DQ#&Q\">B!\"7?Q\"!;A!I5!!?0A!7.!!6*Q!7*1!6(1!8)1!9'!!6&A!8'1!5&Q!6&Q!;(1!9(1!=)!!=(!!<*!!:*1!9,!!=/1!<2Q!;6Q!<&A!='A!9'A!9'Q!=+A!<,1!90!!<5!!;01\"H1Q\"T41#$5A#/5Q#05Q#04Q#-3Q#-/1#3.1#3/1#241#,6!#/51#(6!#&61#.5Q#-.Q#+.A#*/1#\"3Q#.51#(41#\"3A\"_5!#&61#'5A#/6Q#16!#,41##3Q\"]3!\"Y3!\"]4A\"]41##4A#$4A#$31\"^3A\"V2Q\"U1Q\"T1Q\"T31\"W31\"W31\"X3!\"Y2A\"U1!\"N1!\"N11\"Q11\"P11\"P1!\"N1!\"N1!\"N01\"I01\"I0A\"K0A\"K0!\"G01\"I01\"H01\"I/Q\"F1!\"N0Q\"M1!\"N1!\"N1!\"N1!\"N1!\"N1!\"N11\"P1Q\"T2A\"V3Q\"U3!\"X21\"X1Q\"S1Q\"T2Q\"W3!\"W3A\"]4Q#$3Q\"`3Q\"^3A\"_3A\"V2Q\"Z4!\"`4A##.A\"?$2!;#A!=/!\"=4Q#$3Q\"`5!#$0!2J$!!;!!Q)!!Q'#A!821\"U61#(5!#)61#--QR:#R!6#\"!<(A\"\"1Q\"X4Q#'5Q#061#05Q#,4Q#)5A#,5Q#061#061#04Q#*4Q#'5!#.61#-4Q\"\\21\"H0A\"2.A\"&/Q\"%/A\"$0Q\"%0A\"#,!!S*Q!L2!\"(61\")81\"&7!\".6A\"+8A\"?3A\"-,1!Q0!!]:1\";CQ\"AC!\"!81!G/1!:*1!3(Q!3&Q!8&!!2&A!:)1!E/A!Y4A\"+;Q\"6@1\"9F1B6HA21J1R)KQR%L1\"%M!B%MA2%LQB%JQB3F!29AQ\";>!\"87!\"50A\"#+!!M'Q!C'1!>(Q!;)Q!?,Q!=2!!;91!=A1!SF!\"C/1\"\"+Q!Y1!\"%5A\"011\"'0A!`:Q\"=G1#!?A\"Y41\"0.Q\"\".A\"!0!\"%01\"2.Q\"50!\":/Q\">/Q\"D1A\"R4!#!5A#*5A#051#/4Q#*2A#1/A#3/A#3/1#22Q#26A#,5Q#/5Q#06!#00!#&.A#-.Q#%.A##2Q#)5!#'4Q#%5!#&5A#+51#+5A#/6Q#06!#,5!#&3Q\"`3A\"W3Q\"_41#\"5!#&5!#'4Q#%3Q\"^2Q\"Z2A\"S2Q\"R3A\"V3!\"Y31\"[3!\"X3A\"V2!\"V11\"Q11\"P1!\"N1A\"S11\"Q1A\"R1!\"N1!\"N1!\"N0A\"J0A\"K0A\"K0Q\"L0!\"H1!\"N0!\"H1!\"N1!\"N1!\"N1!\"N1!\"O1A\"R1!\"N1!\"N21\"Q2A\"S3A\"S3!\"Y3Q\"U2Q\"P2!\"R3!\"U3A\"V3A\"_4A##5!#&4A#$3Q\"`2Q\"[31\"]31\"^4Q#%0!\"H%!QA!!!(\"2A-/1\"D4A#$4A#$0!\"L#1!@!\"A&!\"1'!!!(&AQK4Q#%5A#+6!#/-QR4!2!*%1Q?'1!Z-!\"64A#$5A#,61#05A#-5!#,5Q#/6!#05!#,5A#05A#/4Q#'4Q#'5Q#-4Q\"^2!\"J1!\"9.Q\"+01\"$0!\"$1A\"&1Q\",-1!T+Q!P4A\"08Q\",91\"$4A\"&4Q\"*8!\"801\"#,Q!T4A\"0B1\"LFQ\"0<1!L0Q!9*A!6'Q!3&1!3%Q!2&A!=.!!U81\":B!\"@HA23J1ARMQA?M\"A/HRQ&HC1!G#!!E31!ESA!G31!H#A!I3Q!J3Q!K3!)O3!4Q\"!CO!AOL12,DQ\"C;A\"@11\"\"(1!I)1!='A!>)Q!D-Q!?11!6=!!4Q\"0I1\"FNA!PG\"Q$BSA!A#A!:B!#1!!4.Q!E-1!M.1!I0!!@4115;\"!-?R!,BSA.E#A.D3A2BS!1B\"A6.!#.01#021#+/!#).A#\",!\"5,1\"4-!\"7.!\"L.!#\"0Q#\"/1#&.1#\"-Q\"C(1!S)1!Z/!\"<5Q#*5Q#+5!#)5!#)51#*+Q\"/+A\",/A\"E4A##4!#\"4A\"]3!\"]41#\"3A\"V1Q\"S1Q\"O3!\"Z31\"^31\"W2Q\"[2Q\"[2Q\"[31\"X3Q\"U3!\"Y21\"R2!\"R1Q\"T11\"Q11\"P1A\"R2!\"T21\"T21\"R31\"T1Q\"S1A\"R21\"X21\"V1A\"Q0!\"G01\"J0Q\"K2Q\"V31\"]3A\"^3Q\"`0A\"I+!\"(*Q\"%*Q\"%0!\"G5!#&5!#&5!#&11\"O'!!O$A!K&Q!P(Q!W!\"A&!!!(!!!)!B1)%AQD'1!P&Q!N'Q!Q\"\"1+!!A'!2Q(!1A*$1Q@&A!L'A!Q'1!](1\"&21\"Z5!#'6!#-6!#06!#/2A\"W.A\"<.1\":/Q\"G3A\"^41\"_3Q\"S3Q\"Z5!\"Y21\"F1Q\"/2A\",3!\")1A\"%5A\"8-!!U'Q!A01!`7Q\"&61\"%2A\"#8A\">4!\".(Q!G41\",I1\"WCA!Y2Q!9)Q!1&A!0%A!0(1!H9!\"5PQ\"8L!Q4E3A\"E#Q!?C!%2Q!5.A!G.!!J1A!>8BQ*E#1%ME1\"Q6A!P6Q!M6!!MF!!N&1!PF1!R'1!SW1!VW1!TFA\"R51$HSA'>RA>4!!Q0!!T+!!E)1!>*QA/5R!$D#Q!T$1$TAQWG1\"O/A!]'Q!<)1!E+A!L.!!A91!EGQ\"*BA\"P/1!_+1!P41\"411\"\"/1!Z?A\"OM1#961\"=,!!V-A!W.A\"$1!\"3.1\"=-Q\";.A\"=-A\"9/1\"80A\"N5A#.51#03Q#1/1#3.1\">+!\")+Q\"/,Q\"B.1#,.A#1.A#1.Q#*,A\":,1\"4*Q\"%,1\"1-Q\"Q-!#!-!#!-Q#!.A\"I'!AI$A1;(1!T1!\"M5Q#,61#)6Q#'41#%,A\"(+1\"*+1\"+0A\"J4Q#\"41##4A##4A##21\"U1!\"N1!\"M11\"P3!\"]3!\"Z3Q\"]3Q\"U3Q\"]31\"W3!\"X31\"X2Q\"X2Q\"Y2!\"R2!\"U2!\"U2A\"S2Q\"U2A\"T21\"S01\"J0Q\"M1!\"O1!\"O0A\"K/Q\"E0A\"L0!\"H/Q\"F2Q\"U3!\"\\4!#!0!\"H+1\")*Q\"%+1\"+*Q\"%.Q\"@5!#&5A#$5A#!(!QY\"Q!4#!1@'A!S'A!S!!A'!!A)!\"A'%!!B'1!O%!!J&1!M'A!Q\"\"Q*!\"A&!!!(!RA+'!!P'A!S'A!S&!!`)!\"#51#+51#.6!#061#031#!/Q\"@-Q\"8.Q\"\"Q&1QQ8-A!M.A1@6RQ,FTQ\"R'!!OV1!H%1!>T!!8C1!2\"A$/!1%/11%0B1&32A#8B1\">TA!I5Q!R'Q!W81!WG1!LD1(>QA<51!U,A!P*!!?*1!5/1!&A4!!T4Q%WRQSE1\"W/A!]&1!8)A!I-1!N/Q!;=1!LJQ\"@:Q\"D+A!T11\"#6A\":.!!W41\"/HQ\"]C1#(/Q\"#+Q!R-A!]0!\"1/Q\":-Q\";/1\";.Q\"+A!8+Q!4-QQ)21Q(?$1\"MF!!YHA!ZG!!L3!,:QQS0!![*!!D)1!9-!Q*@3!!U$Q!XQ!]EA\"R,!!N'Q!>+A!N-A!J1!!BE1!VGA\"P31\")*!!M5A\"721\"+.A!W.A\"8.A\"9.!\"9.Q\"8.1\"7/1\";/1\"C31\"O21\"F21\"761\"96!\"5/1\"#9!\"B+A!S)!!B6A\"0:1!^3Q!`51\"':Q\"I,Q!S+1!OBQ\"OJQ\"34Q!D*Q!1'1!0$Q!0(1!AAA\"GUA!`E!Q$DTA!F$!!1Q!7*Q!B-A!BC$1\"VWA!Q'!!:C1!.1A#*!!0*1!2-1!>-Q!81A!421A14AQ*52A'42!+2!14/!Q:-!!A*Q!=,1A23\"1(F5Q!UGQ![(A!OD1)>!!I01![*1!B)Q!60QA&ED!!Z31%TQR191\"A)!!>(A!<-1!R.1!C9A!JJ1\"6>!\"J)1!O.A!`5Q\"4.1!T41\"+L!#'C!#!,1!R*A!Q-A!]1A\"6/1\">/!\">.!\":.1\"9/!\"7.1\";/!\"D31#+1!#2.1#++A\"60A\"O3!\"_+Q\"+,1\"1.1\"U.A#,-Q\"@,!\"2)!!X01\"K*!!_+A\",-A\">-1\"_.Q\"I'1!U%11<+Q\"*(!!O(Q!T-Q\"32Q\"Q/Q\"H+!\"(-!\",-1\"6,1\"1+A\",/Q\"F2A\"V31\"V11\"P1!\"O1Q\"T1Q\"T0A\"K0A\"K3!\"R31\"Z4!\"W3!\"Z31\"]31\"\\3!\"[3Q\"]31\"W3A\"V3A\"V/Q\"E/1\"B0!\"G/Q\"F/1\"C/Q\"E0A\"K0!\"G0!\"I-!\"5,1\"-+!\"#+!\"!,1\"&+Q\"&+!\"'+!\"'-1\"90Q\"E+!\"$*!!^+!\"&+Q\"#&A!K#114*12$3!\"`,A\"1&Q!P'A!T%1A>&QAK%!!K+!\"&4!#$1Q\"S'Q!V'Q!Q\"Q1<$1!F'Q!Q,Q\"64Q#.6!#01!\"O,!\"20!\"L5Q#06Q#061#02Q\"V/Q\"B-!\"7/!\";.1\"7-A\":/A\";.Q\"9.A\">31\"O21\"F3Q\"78Q\"B4A\"3.1!`6A\"=)Q!G+Q!O7!\"/8!!\\1!!Y7!\"07Q\"?)1!G.Q!XI1\"RE1!_/Q!9)A!1&1!0\"QA-.!!SNQ\"MOAQ7B2Q!J51!=R1%,A!C,1!D7B1,UH1!WXA!=$1!-!Q$+!!)*A!9,1!>1!10821&BT1!LVQ!PWA!Q7A!PG1!L6A!C$!!82!&0!!4-!!B+Q!90AQ'ETA!Y8A!ZX1!P$!);!\"$-Q!U(A!B*Q1052Q$Q51![\"A?K1\"W,Q!W&A!7+Q!S-A!H2A!AFQ\"$FQ\"Q-A!Y-A!V6Q\"@.1\"!/!!_F!\"\\IA#/11\"))Q!C,!!R11\"40!\"C/A\">-A\"6-1\"5-1\"5/!\"6-!\"7.Q\"T0!#3/Q#0-Q\"G1A\"R6!#02Q\"]*!!\\-1\"9.1\"[,1\"9,!\"2+1\".4Q#.2A\"X)!!X,!\"1-Q\"F-Q\";(Q!Z%AAF3!\"U0Q\"L(!!S+!\"'-1\"7-A\"0,!\"*,A\",2A\"S3!\"U-!\".-A\";0Q\"L11\"P1A\"S11\"P2Q\"U21\"U1Q\"T11\"P11\"Q2Q\"U21\"Y2A\"T3!\"W3!\"X3A\"\\3!\"Z31\"^2Q\"[2Q\"[/1\"C0!\"H01\"I0!\"G0!\"H01\"J0!\"H0A\"K.Q\"@/Q\"A0A\"F,1\"1*A\"$*Q\"$*Q\"%*Q\"%-!\"33Q#\"5A#..A\"<(1!Q*A!]'A!O\"115%11J5Q#*6!#/0A\"I&Q!R'1!P'Q!Q&A!L'Q!R2A\"X5!#&3A\"^(A!W'!!O'1!P&A!M*1\"!31#\"51#051#02!\"X-Q\";1A\"U5Q#06Q#05A#04!##/!\"A/!\"6.1\"<0!\"<.A\"9-Q\":.1\"9.!\":3A\"L1Q\"84Q\"9:A\"M4!\".0Q\"!41\"7'Q!?*Q!P5!\"#6!\"!0!![:1\"85Q\"9)1!B2A\",KQ\"MAA!O,A!5(Q!1$Q!/&1!851\".U1\";IAA*A#1!K5Q!4Q1/+A!@/A1=F$!![91!N'A!2\"Q#+1!&*Q!0,A!@1AQ1;#!!L7!!W(!!O71!GV!!F%A!N'Q!VYA!XYQ!QG1!ADA!2!Q0+1!?)Q!:3!A)M&!![)Q!Z'Q!G!A<6!\"')Q!G)A!:+Q!)H51!\\$A)UQ\"D7A\"6&Q!;+1!J/1!P-Q!D>Q!ZJQ\"H3!\"*)1!K5Q\"84A\")-1!P@!\"FLQ#/5A\"7(Q!G+Q!T/Q\"+1!\"B.Q\"?/Q\"9-Q\"7.A\"6,Q\"5.Q\"<-Q\"@.1#$.A#3.A\"L2!\"T6!#06!#00!\"F+Q\"/,A\"5,!\"1,!\"1-A\"86Q#(5A#-.Q\"A)!!\\+1\"+,A\"5)1!`)!!Z3Q\"`4Q#%/1\"E(A!X,A\"(,1\"*+A\",,Q\"36!#,5Q#02A\"[+A\",/1\"C1A\"R1A\"Q1!\"N4!#\"4Q#%2Q\"V1!\"N0!\"H1!\"N01\"H01\"I11\"P31\"X3A\"\\3Q\"]31\"W3Q\"]31\"X0A\"K0Q\"K2A\"O1Q\"P0Q\"M0!\"H0Q\"L0Q\"M2Q\"P4!\"]4!\"^1Q\"L+A\"+*Q\"%*Q\"%,1\"22A\"W6!#.6Q#12A\"Y&!!F&Q!N%Q!?#Q!;01\"E7!#15A#/2Q\"Y$QAP'Q!Q&Q!M&A!K-A\"64Q#%5!#&4Q#$*!\"\"'1!O'!!O'Q!Q.1\"@51#/6!#/5A#03A##1A\"S3Q\"_6A#06Q#06A#05A#+/1\"B.!\"8/1\"8.A\"=-Q\"7/1\"9-A\"5.Q\"=3A\"L2!\"961\"<+1!O8!\"*8Q!_0A!\\;!\"@5Q\"9'A!B3Q\"-MA\"M?Q!R,1!5(Q!0$Q!0$A177!\"2VQ\"3I11%A31!KE!!3AA4*A!A01A=KEQ!ZYQ!IV1!1AA\"-!!'*A!3,A!?1A1'?$!!RXQ!OW1!6\"A\"-Q!%,A1,1\"A%@$!!W)A!Z)!!Q'!!?#!\"/1!2)Q!=,1A2@TA!Y81![I!!Q#!/;A\")+!!N)!!<*!!/ACA!Z%!#ZQR&>A\"H(1!C*1!J0A!Z-A!?;!!VJA\"<5A\"6)!!E31\"35A\"9-1!S=A\";MA#)8A\"E(Q!F*!!M/Q\"*2Q\"C.Q\"A.!\":-!\"5,1\"4,1\"4-1\"5-1\"7.!\"B.A#+.Q\"L3!\"Y61#05Q#041#)+1\"-,A\"5+A\",+1\"*/A\"F5A#+5A#)4Q##)A\"#,A\"0+1\"*(1!T+1\"'4A#$4Q#%3Q\"_*A\"$,1\"'+Q\"),Q\"*/!\"@61#16!#16A#101\"B,1\"00!\"G01\"I2A\"O5!#*51#-5!#&2Q\"Y11\"Q1!\"N0!\"H1Q\"R31\"T31\"Z41#!3Q\"^31\"^31\"]31\"]3Q\"U31\"Y3Q\"Z4!\"Z2Q\"[21\"R2Q\"W3Q\"[4Q#%5!#&5!#'41#$.!\"<+Q\"%+1\")1!\"N5Q#,6A#+6Q#161#1'Q!P%11;!!A1*Q\"%6!#,7!#16Q#/5!#&(1![&Q!N&A!O'Q!T3Q\"`5!#&5!#&5!#'+!\"''Q!Q&Q!N(A!Z5!#15Q#/6!#+5Q#04A#)41#'5Q#/6Q#06A#06!#05A#,11\"E-Q\"5.Q\"<.1\"9/1\";,Q\"6-Q\"5.!\"84A\"I2Q\">8!\"B?Q\"Y4Q\".2!\"+6!\":'Q!<)A!G5A\"!91!^41\"&81\"75!\"6(Q!A1!\"(L!\"MAQ!P,Q!2(Q!0$11/&1!55!\")V1\"8K1!'B#1!LEA!6!1.,A!J0!1;GU!![:!!MW!!3B1!,A1&*A!2-A!:/A1,6B1!B4A!BEQ!4B!!+AA&)Q!0)1!0+Q1(HFQ!Z)!!WYQ!J&!!4!Q**Q!B,115/1\"_-A\"A4Q#(6A#051#06!#00A\"O+A\"-,1\"4*1\"\"1A\"V5Q#-6A#&5Q#,01\"E(A!T+Q\".&AQK.Q\"A41#\"4A##4!#!0A\"H*A\"#+A\"-+A\",2Q\"U7!#17!#17!#15!#%-!\"6,A\"3.1\"=3!\"Z5A#.61#'5!#+4A#%31\"U1A\"Q1A\"S3Q\"Z5!#$5!#&41#\"4Q#%31\"]3A\"\\3!\"X31\"\\3!\"]31\"^4A#!4A#$3Q\"_3A\"]5!#$5!#&5!#&5!#'6A#$3!\"Z0!\"A11\"I5Q#+6Q#-6!#16A#17!#1-Q\"?#AA;%!AE31\"[7!#17!#16Q#/5!#$+A\"0&1!O%A!I.A\"=4Q#%5!#&5!#&5!#).1\"?'1!P'!!P.Q\"B6Q#+61#)4Q#.61#06!#05Q#06Q#06Q#06A#06!#05!#0/!\"E.1\"8.A\"<.A\"<.Q\"9,1\"4-!\"5-A\"731\"I2Q\";8!\"GAQ#&71\"81!\"&8Q\"H)1!H)!!E61\");A!]6Q\"-6!\",9!\"@(Q!J.Q!ZGA\"TCQ!V0A!7)1!0%!!/$Q!3/!!]OA\"GOAQ0BCA!K%A!;RQ$,A!?-A!C<31(WY1!VIA!>DQ!1AA\",!!*+1!7-1!;-111111&2B1$/1A&*A!.*1!3)Q!0-QA'J61!Z)!!XY1!M6A!4RA,+!!>,A11>#A!U8Q!XH!!P41*>!\"',1!U(A!=)A!4.!!S:A\"7LQ#&9Q\"G'A!E(A!M/1\"&2Q\"I/A\"D.!\"6-Q\"5,Q\"0,Q\"2,Q\"5-1\"5-Q\"6/!\"N+Q\"35Q#05A#051#06A#-4!#)+!\"&+!\"((A!W4!#.61#+51#(5!#,5!#+)!!X(!!S&Q1E1Q\"R4Q#%3Q\"`41#\"3Q\"_,A\"-,!\"--A\"251#$7!#17!#17!#16Q#02Q\"Z,A\"30Q\"B41#(7!#(51#*6!#*6A#%5!#&3!\"\\31\"^4Q#%5!#&5!#&4!#!3A\"^3Q\"`3A\"^2Q\"[31\"]31\"^41#\"41\"^3A\"_41##5!#&5!#&5!#&5!#&5!#'5!#)5!#&3Q\"_4A#(5Q#.6!#+6!#-61#07!#141\"`,!\"./!\"E61#.7!#17!#16Q#141##01\"I&!!H(1!\\31\"Z41#\"3Q\"`5!#&51#(1Q\"S&!!N)A!^3!#!4Q#06!#*5A#)51#06A#06Q#06Q#06Q#05Q#06!#051#0/Q\"H-A\"5.A\";.Q\"<-Q\"5,1\"4-A\"5-1\"511\"<3!\"=7A\"AAA##:1\"@0Q!]8A\"G+!!R'A!<3A\"!91![71\"!4A\"(9A\"D*A!P+!!NA1\"SHA\"-61!>*Q!1&1!/$A!/)A!FDA\"JTAQKEBQ!I%Q!DD!\"0Q16,!!A01Q8JF!!YIQ!T8Q!>4!!1!!\".QA$,!!1+1!8,!!7,1!7+1!3+!!3*A!5+Q!)9CA!TH!![*!!V81!F5A!01!1)Q!=.!12A3A!UX1!Z8Q!O#Q:5Q\"7+Q!U>!\"ELQ#,6A\"<(Q!E*1!K/Q\"*2Q\"I/A\"D-A\"6-Q\"5,Q\"*.1\">-Q\"<-1\"5.Q\"9,!\"1,A\"25Q#051#051#06A#+6!#0/A\"F)1!X*A\"\"51#/6!#)5!#&5!#&5!#*/!\">$A1='A!Q31\"\\41##3!\"\\3!\"\\3A\"_1Q\"Q-!\"301\"L61#.7!#16!#17!#17!#16!#+3!\"S4!\"^6!#/5Q#15A#-5Q#)5!#*5!#(5!#&5!#&5!#&5!#&5!#&3Q\"`4A##3Q\"`4A#$31\"]3Q\"`3!\"]3A\"_4A#$4A#$5!#&5!#&5!#&5!#&5!#&6!#)6!#+61#(6!#&6A#(6A#+6A#061#-7!#17!#16A#141#'61#-7!#17!#17!#16Q#14A#(3!\"\\.!\":1!\"P5!#&5!#&4A#$41##5!#(5Q#+.1\":0A\"M4Q#06A#&4Q#'5Q#'5A#/6!#06Q#06Q#06A#05A#06Q#+4Q#021\"T-A\"5.!\"8-Q\"5-Q\"5,A\"3-!\"/-1\"50Q\"@4A\">5Q\"BAA#!?!\"R1!\"#6!\"411\"'&1!7.Q![8A\"$8!!^1A!W9Q\"C0A\"#'Q!B8Q\"7KQ\"I@Q!T-Q!5(1!0$A!/%A!31Q\"\"O!\"=PQQ5D3A!I%1!>#A%.!A>+Q!C11A4BDA#R81!U9!!I6A!;D1!6C!!0!Q$.1A*.!A*.!A*0!Q)7SQ!FF1!T(!![*!!WI!!FEQ!2Q!.*A!=+1!88B1%OF!!UXQ!UFA!DQ!T4A\"&(Q!C'Q!7+QQ(J$Q!\\31+U1\"U61\"7'1!<01!_41\"$.Q!G?1!`J1\"L/!\"\")A!I31\"311\"$,A!RB!\"KL1#/21\"/)A!A)Q!P0A\"01A\"H1!\"G,Q\"6,1\"4.1\"93Q\"U3!\"V-Q\":-Q\"5,!\"1/Q\"G6!#05Q#04Q#*51#.5!#05!#--!\"20A\"L61#-51#)5!#&5!#&5!#&4!#'-!\"2/A\"B4A#$4!#!5!#'5!#)4A##4!#!2Q\"Z6!#,7!#17!#16!#17!#17!#16Q#15Q#15A#16A#(51#.6A#&5!#+7!#%5A#)5!#*5!#&5!#&5!#&5!#&5!#&4A#$3Q\"`3!\"]3!\"\\3A\"_4!#!4!#!4A#$4Q#%4!#!5!#&5!#&5!#&5!#&5!#'51#)61#(5Q#+5!#/61#-5Q#,5A#,6Q#06Q#17!#16A#16Q#17!#17!#17!#17!#16!#,4A#%3A\"_4A#$4Q#$31\"^3A\"^31\"^5!#&5Q#(41#&4Q#*5!#-4Q#'4Q#%51#'51#+5A#06Q#06Q#05Q#051#05Q#,6A#'3Q#$-!\"5-1\"8-A\"7-1\"4,!\",-A\"),A\"3.Q\"93!\"A5A\"B>Q\"`CA#\"7Q\"62Q\"061\"?(!!B*!!N61\"$9!!\\5Q![6Q\",81\"B)1!L.A!XCA\"UJA\"061!G+A!1&!!0%A!1(1!<:Q\"8RA\"1JQA(F3A!IU!!.1A3821&NV1!U7!!S6A!JRA<@!\"4.!!Z'Q!9'Q!0/A1(F$!![C!/TQ2J7A\"=(1!9-Q!S6Q\".0!!K9!!XFA\"K71\":(A!G0A\"'31\"2-Q!S81\"=O1#911\"&1!\"\"EQ\"PI1#.1A\"&)1!C+Q!T-Q\"&1A\"D2!\"S/A\"E,A\"5-1\".3Q#\"4Q#'4Q#&4Q#(11\"J1A\"Q6!#-5!#-4Q#&4!#!4Q#%5!#,6!#06!#051#05A#+4A#$3Q\"`3!\"]4!#!4A#&4Q#&5!#&3Q#!5!#+6Q#17!#17!#15A#061#07!#16Q#15Q#16A#16!#17!#16Q#161#16!#-6A#+51#-51#)6!#)6Q#'6A#'5!#*5!#&5!#&5!#\"5!\"`5!#&4!#!4Q#%3A\"_4!#!31\"]3Q\"`4A##3Q\"`4!#\"4Q#%5!#&5!#&5!#&5!#&5!#&5Q#(5A#+51#'51#.61#,5A#*6!#+6!#-5A#.6Q#16Q#16A#16Q#17!#15Q#16Q#16Q#15!#*4A#$4!#\"4A##4Q#(6A#15A#.41##5!#&5Q#,5Q#.4Q#%41##3A\"^3A\"_4Q#'4Q#06!#06!#051#04Q#)4!#!4Q#%4Q#'21\"[,Q\"7,1\"4,1\"2/Q\"F4A\"`1!\"N-!\"8.1\"61!\"75!\"@#1&9\"A)1A1+.!14.119-A1:.11:.A15/!A/4!1);\"Q&@#Q$HU1!O&A!O%!!NU1\"I\"Q3C!\"!7A\".,A!L'Q!;'1!3-Q!)@3Q!TCA)WQB-FA\"Y.!![)!!D2Q\"%4A\"$1A!H=Q\"#EA\"I2A\"*(Q!G3A\".3Q\"3-A!X9Q\";N!#-<1\"M,!!W*Q!H,1!\\0!\"/11\"K2!\"T.!\"<,Q\"2/A\"@4Q#%4Q#%4Q#)5!#/4!\"Z4Q#&5Q#05A#-4A#$41##4!#!5!#&51#-51#05A#,51#(4!#!4A#'41#$41##4A#&4Q#&41#\"3Q#!5Q#.6Q#16Q#17!#17!#17!#17!#16Q#161#16!#16A#17!#16!#17!#161#06A#06Q#(5Q#+5Q#)5!#)5!#)5!#&5!#&5!#&5!#&5!#&4!#!4!#!41#\"3Q\"`3A\"^3A\"_41#\"3A\"_41#\"5!#&4!#!5!#&5!#&5!#&5!#&5!#&5Q#(5Q#&61#*6A#,51#(5Q#+61#'6Q#)6!#.61#16Q#15Q#161#17!#161#16!#16!#15Q#/3A\"`3A\"_3!\"\\6!#-7!#17!#14A#*4A#$5!#&5A#*4Q#%4A##3Q\"`4A#%4Q#%4Q#,51#05Q#04Q#04Q#'41##3Q\"`4Q#$41#%.Q\"?,Q\"2,Q\"11Q\"P4Q#%3A\"^0A\"J.1\"80!\"62Q\"77!\"G@1#$EQ#*?Q\"R4!\"*8!\"?/A\"%(1!<-Q!Z6!\"!8A\"!6!!^5Q\".7Q\">.A!T)Q!J5A\"2E1\"LEQ\"\"71!;,Q!-(1!0&Q!0%A!1'Q!@1Q\"\">A\"@FA\"+I!QII210J#!!KD!!I$!!GT1!G4A!E4A!E$1!ET!!GDQ!JUQ!L%A!M%!!L%Q!KD1!IC!/G2!D@!\"\"7!\".-Q!V(A!?'1!4)!!02B!&ECA!UC!3TQRKBA\"Y+Q!O)A!F21\")4!\"'/Q!M;!![E1\"A71\"6)A!I.Q!`6Q\"@-Q!\\1!\"!F1#\"F!#(0!\"!*A!L,1!V.1\")0!\"=4!\"T11\"M-!\"8,Q\"72A\"W4Q#%4!#!4Q#%5A#,4Q#,51#05Q#/4Q#)41##4!#!41#'5!#'6Q#*5Q#,5Q#)4A##4Q#%5Q#14A#'4!#!4A##4A#$5!#&51#(7!#15Q#15Q#17!#17!#17!#17!#16!#15A#16A#.5A#-6A#16A#16!#.6A#)5Q#.5!#,5Q#)5Q#)6A#(6A#&5!#*5!#&5!#&5!#&5!#&5!#&41#\"3Q\"`3Q\"`3!\"]3!\"\\31\"]4!#!4!#!41##4!#!5!#&5!#&4Q#$5!#&5!#&51#'51#*51#(7!#(5A#-6!#*61#)5Q#+5Q#,6Q#16Q#16Q#16!#15Q#16!#161#16Q#16A#14Q#)4A##3Q#!6A#16A#16A#15Q#-4Q#%5!#&5!#'4Q#%3Q#!4Q#,5!#.4!##4Q#&5Q#051#04Q#,4Q#%3A\"_41#\"41#\"4Q#'1Q\"S,Q\"3,A\"51A\"S4Q#%41#\"2A\"W/!\"@/A\"81A\"731\":9A\"QCA#*FA#)!!D2A!3+1!0'Q!0&1!0&Q!4(1!:.1!Q61\"(=1\"0BQR&D11ZDAADF!15HRA1HBA.GRQ.HC1.H3!.H3!.F\"A1C1!>BQAT?Q!]9!\"'2Q!`-!!N)!!>'!!8(Q10.11,9B!\"LCQ&QQALNA\"L;Q\"C,A!R*Q!M4!\"-51\"&0Q!R71!WB1\"98A\"8*A!K.A!W7A\"<0A\"!/1![@!\"JH!#%71\";,!!V,!!S-1!^0A\"22Q\"O3Q\"W0Q\"K-A\"0.Q\"A4A#$41##3Q\"`4Q#%51#-6!#051#05!#-4Q#%4A#%4!#\"4!#\"4A#%51#+51#-4Q#)3A\"_5!#+7!#15Q#-3Q\"`4A#$41##3A\"_5A#-7!#15Q#161#17!#17!#17!#16A#15A#15Q#15Q#.5A#-71#+61#-5Q#.5Q#+51#)6A#%51#)51#)5!#(5!#'5!#&5!#&5!#&5!##5!#&5!##3Q\"`4!#!3A\"_4!#!3A\"_5!\"^3Q\"`3Q\"`3Q\"_5!#&5!\"^5!#&41#\"5!#&5!#&5!#&5!#(61#(5!#.51#'5!#*5!#(7!#&5!#+6A#16Q#16A#161#17!#151#151#161#16Q#161#15!#&5!#'6A#17!#17!#16A#141#(3Q\"_4Q#(4Q#%4A#$5A#-6Q#05A#-4A#$51#*5Q#.4Q#(4A#(3Q\"`4Q#(41#$4Q#%4A#&0!\"G-Q\"<3!\"[4Q#%31\"]3Q\"`2!\"L.A\"=/1\"61A\"73Q\"==!\"WCA#)FQ#*:!\";41\"+61\"<+Q!T(1!A-Q!R4!!_51!Y51!Y6A\"&:A\">3A\"/*1!I+Q!P7A\"7CA\"=G!\"!<1!=3A!0.1!0(A!0&A!0%A!5'!!2(!!@+!!K/A!^4Q\"*6!\",8!\"151\"0+Q!M,!!T3Q\"50A\"&/!!X=1\"HHA#/:!\"F.Q![*Q!U-A!Y.!\"01Q\"E41\"Z3!\"[/A\"=-!\"82Q\"Y4!#\"4Q#%4!#\"4Q#%61#)5Q#,5Q#/5!#&41#\"51#,51#-4!#\"51#)6!#)61#'4Q#%4A#&6Q#17!#15Q#/4!#$3Q#!3Q\"`41#%6A#061#15Q#15A#17!#17!#17!#161#16!#16!#15A#.61#-61#17!#)6!#.5Q#+51#+51#+51#'5!#&5!#'5!#'5!#&5!#&5!#&5!\"_4!#\"4A\"]3Q\"`41#\"4A#$3!\"]3Q\"`31\"\\4!#\"4Q#%3A\"^5!#&4Q#$4A#$5!#&5!#&5!#&5!#&5!#'5A#(6!#)6A#'6A#'5A#+51#,5Q#*5A#/6!#061#161#161#16!#15!#16!#15Q#16Q#15Q#06A#07!#16Q#15Q#15Q#161#/4Q#&4Q#%4Q#%4Q#%61#.6Q#06A#041#'4A##5!#'5A#+4Q#&41##5A#05Q#/4A#%4Q#%3Q\"`1Q\"S4!##4Q#%41##4Q#%2Q\"Y01\"F01\"8/A\"51Q\"571\"F<1\"UC1#)EQ#'=1\"F5!\"06A\";.A!`(!!E)A!L2Q\"\"5!!\\51!X5Q!]7Q\"581\"71A\"%+Q!J.1![7!\"4C1\"AF1\"0AQ!O9Q!D3Q!7.!!6+!!3'A!2'!!1'!!2'A!5&A!4&1!6&A!;'1!<&A!<'1!;&1!6'1!6'!!7(!!4)Q!7,!!1.Q!,4A1&?\"!%H\"13N!ARKABBC!\"R3!\",+A!M,1!T21\",71\"231!X2Q!S;!\"&Q\"KH!#'<1\"H0A\"#-1!T-1!Z.A\".0Q\"C3A\"U41#\"11\"Q-A\"90A\"L4Q#$4Q#'51#-41##41#\"5!#.5!#/6Q#$4A#$5!#,6A#05Q#041#\"4A#$4Q#&4Q#%3Q#\"5Q#06Q#17!#16A#141#'4!#\"4A#$6!#06A#16!#15A#16A#161#17!#16A#16A#161#161#*6!#+5A#'61#/5Q#/6!#/6!#*61#+5!#&5!#&5!#'5!#&5!#&5!#&5!#&4A#$4!#!4Q#%3A\"_3Q\"`3A\"^4!#\"3!\"]3!\"\\3!\"\\4!\"[3Q\"_4A#\"41#\"41##4A#$5!#&5!#&5!#&5!#&5!#'5!#)5!#'5!#)6A#&5A#+51#*5A#(5Q#/61#061#16A#15Q#16!#16Q#(51#15Q#16Q#16Q#16Q#17!#16A#16!#16A#16A#15A#+3Q#!4!#!4!#!61#.6Q#06Q#06A#04A#$4Q#&4Q#+4Q#&41##5A#06Q#051#-4!#\"4Q#%4A#)4Q#+4Q#%41##5Q#*4Q#)2A\"X/1\"D.A\"70Q\"02A\"971\"FA\"CD1\"CCQ\")A!!T=!!E8Q!;4!!41Q!5-Q!4,Q!1+!!1+1!0*Q!/*!!0*Q!0+1!1-!1+2!A'41A,8QQ*@1A'E114K!!UJAR0FQ\"E=A\"B3!\"),A!N,A!T2!\"*61\"25!\"$1Q!X81!];Q\"-81\"7/A![+1!M2!\"+7!\"@0Q\"&0!\"!E!1EC!ADF11DGAQKGQ!SFQ\"$H!\"5E1\"C@!\"C8A\"9A\"K?A\"^C!#&DA\"\\=A\"I81\"97A\"=5!\"6,Q!X*A!C*A!L.A!X3!!Y4A!Z4!!W4A\"\"5Q\"$8!\"07Q\"93A\",01\"!.1!_-1!]/Q!Z1!!`1A\"%6A\"-8!\"49Q\"39A\"49A\"5<1\";:A\"::A\"9:!\";61\".2Q\"(0Q\"!-A!Z-!!V.A!\\01\"!41\"+7A\"75A\"&4A!]3Q!Y5Q!^8A\".9!\"821\"(-Q!S-1!U01\"%21\",01\"!/Q!_8!\"8BA\"V?!\"R7!\"7.Q!`-A!Y,Q!]-1\"-.Q\":21\"P4A#\"4Q#.4Q#'3Q\"`4!#\"4A#%5Q#/6Q#06Q#061#/4!##4Q#%4Q#&3Q\"`5Q#/6Q#06!#06A#05Q#04A##3Q#!4A#%6!#.5Q#06A#06!#16A#16Q#16A#16Q#/6A#15Q#15A#.6!#-5A#15Q#16Q#15A#15Q#16!#15A#)61#)6A#$5Q#&51#,5A#*61#&51#)5!#&41#$4A#$4Q#$4A#$5!#&5!#&4Q#\"3Q\"`4Q#$3Q\"^3Q#!3A\"_31\"^3A\"_2Q\"[3!\"Y3!\"Z4!\"[31\"]3A\"_3!\"]3Q\"`3Q\"`41#\"2Q\"[4A#$3Q\"`5!#&4!#!5!#&5A#*51#)5!#(5!#&5!#*5!#&5A#)5A#-6!#,5Q#.6!#(5!#)51#(6Q#(5A#16A#15Q#16!#16!#161#15Q#.5Q#/51#16Q#15A#04Q#*61#06A#05Q#06A#06!#061#041#%4Q#%4!#!51#,6A#061#061#061#04A#'4A#$4Q#%4A#$4A#*6Q#06Q#06A#05!#-3!\"Z/1\"C.Q\"7-A\"11A\"44A\"791\"D=1\"VB!##D!#\"B1\"X:Q\"D71\"771\"@2Q\"1+Q!Q)!!G*!!G-Q!Z3A!`5A\"!4Q!\\5A!Y6!\"\"7A\"'7Q\",71\"271\"341\",2!\")1!\"\".!!]-!!U-!!Q,1!O,A!P,1!V,1!V,1!X.1!^11!_11\"(4!\"15A\"/71\"561\"261\")3Q!`3Q!\\6!!]7Q\"&8A\"25Q\"/1Q\"&,Q!Q+Q!W2A\")3A\"31!\"%/1!_41\".>!\"J@A\"W;A\"A21\"*.1!]-A!Y-Q!^-!\"+/Q\"92!\"L41#%4Q#/4Q#(4Q#%4Q#%4!#$5Q#-6Q#06Q#06Q#05A#,4Q#%41#\"4A#$51#(6A#05Q#061#06Q#05Q#03A\"_4!#\"5A#.6A#06A#06!#05Q#16A#17!#17!#17!#15A#151#17!#'6!#/5Q#161#16A#16!#16!#16A#&5!#*5!#(5!#*6!#)51#'5A#*5!#*5!#&5!#&5!#&4Q#%3Q\"`4Q#%4!#!4A##4A\"]3!\"]4A#\"4!\"^4A\"[3!\"\\31\"^2Q\"\\3!\"\\31\"]3!\"\\2Q\"[3!\"]3A\"_2Q\"[3A\"_3Q\"`41#\"3A\"_3A\"_3!\"\\4A#$4Q#%4A##4A#$4Q#%5!#&4A#$41##5!#&51#'61#&5Q#-5A#,51#*7!#'5!#,5!#*5Q#*5Q#16A#161#16A#16!#161#+5A#,61#-5A#16A#06Q#06Q#061#061#06!#061#061#061#03Q##3Q\"`4Q#*61#06A#05Q#06A#06Q#051#*4A#$41#\"4A#$5Q#06Q#061#06A#05A#031\"`0Q\"M/Q\"7.A\"70!\"62!\"461\"@:!\"I=Q\"WAQ#\"E!\"_AA\"W;A\"@8!\"971\";2!\".-Q!^+Q!J(Q!I+A!O.Q!]2A!`5A\"$51\"\"5A!^4Q!X5!!X4A!\\4A!`5!\"!61\",71\"-6Q\"081\"48A\".61\"+71\"07A\",5Q\"+5A\"+61\"*4Q\"!3A!\\6A!\\5Q!_7Q\"'9!\"+7!\"-51\".0A!`,!!R+1!M-Q![2A\"*4A\"71A\"+0A\"%61\"1=Q\"M@A\"T;!\"I4!\"2.1!`-A!Z,Q![-!\"#.1\"10Q\"C1Q\"T41#%5Q#051#-4A#$4A#$4A#&6!#061#06!#06!#06Q#041#*3A\"_41#\"51#*6A#05Q#05A#06A#06Q#05Q#04Q#)5A#.61#061#06!#061#.5A#17!#16Q#16A#16A#16A#/61#(5!#+6!#-5!#*61#15Q#16!#151#15A#,51#'5!#&5A#'6!#)51#(51#'5!#&5!#&4A##3A\"_41##41#\"3Q\"`4A#$4!#\"3Q\"`3Q\"`3!\"\\3!\"\\3Q\"`2Q\"[3Q\"\\4A\"^31\"]31\"]41\"`3A\"^41\"Z4!#!3A\"]4!#!3Q\"_4A#$31\"]4Q#%41##3Q\"`4A#$41##4A#&3Q#\"5!#&4A#$41##4!#!5!#'5!#&6Q##5A#.6A#$51#)61#'6!#(6!#(5Q#,6!#16Q#15Q#16!#16!#.51#-5A#)6!#06!#06Q#06Q#06Q#061#06!#06!#061#061#06!#04A#'4Q#*61#06A#05A#061#05A#06!#05A#)41#$3Q\"`5A#06Q#061#06!#06Q#05Q#/41#$2A\"Q/A\"C/A\";/1\"02!\"44A\"98!\"@;1\"L@1\"_C!#%CA#!BA\"U=A\"I81\"95A\"53Q\"11!\"$-A!W+1!Q*Q!L*A!S.Q!Y/Q!^1Q!_2!!_31!_3Q!]2Q!]1Q!S1Q!S01!R/A!Q0!!Q/1!P11!M3A!V4A!X41!^51\"#6!\"!6!\",61\"-51\"+0A!_.Q!],1!V-1!V-A!X01\"(1A\"*0A\")0!\"%2Q\")8!\";?1\"NAA\"V=Q\"K7A\"60!!`.!![-!!Y,Q!\\.!\"&-Q\"70Q\"D1A\"R41#%5Q#/51#04Q#'4A##4Q#'5A#.61#06!#05Q#06Q#06!#041#&4A#%5A#*61#06A#06!#06!#06!#06Q#05Q#061#06A#05A#06!#.5A#-5Q#/6!#15Q#16A#16A#15Q#051#+5!#*6A#%5A#)5A#/5Q#061#06!#.51#)5!#&5!#&5!#&5!#(5!#'5!#*4Q#%4Q#%4Q#%41##4!#!5!#&5!#&4Q#$4A##3Q\"_4!#\"3Q\"`4!\"^41\"]3!\"\\3!\"\\3!\"Y4!\"]2Q\"Z3!\"X3Q\"V31\"]2Q\"[31\"W3Q\"\\3!\"Z31\"]31\"]3A\"_3Q\"`3Q\"`3Q\"`3!\"]3Q##41#\"41#\"5!#&5!#&5!#&4A#$4A#$5!#&5!#)61#&5!#/61#'5!#+5!#(5!#(5!#+5Q#/51#16!#161#15!#+61#$5!#(5Q#,5Q#061#06Q#06A#05Q#06A#05A#/5Q#/5Q#06!#061#05Q#06A#06Q#06Q#06A#06!#06!#06Q#051#/4Q#'4Q#-61#061#06!#051#061#06Q#051#.3Q##2Q\"R01\"J/!\"@/Q\"41A\"73Q\"86Q\"B;1\"N?A\"[AQ#%E!#'D!\"`AQ\"V=!\"H8Q\">61\"85!\"13!\"03!\"'-Q!],Q!R+1!O+!!J)1!J+1!S+A!S+!!N*Q!M*A!K+A!K,!!N,Q!P-Q![/A!_/1!T-Q!R-A!^,A!S+A!O*1!E*1!R.!!T01!`11\"*2!\".1Q\",2Q\"+1A\"'6!\"61\"W@A\"T:A\"I4A\"10Q!`-A!Z,A!X,Q!Y+A\"$-Q\"1.A\"=0A\"K2!\"U41#%5Q#06A#04A#*3Q\"`4Q#(6Q#05Q#06!#06!#061#06Q#05Q#04Q#.5A#/61#06!#05Q#06!#06!#06Q#06Q#06Q#06A#06A#05A#.6A#&51#-7!#*61#17!#161#161#15A#,5Q#)6!#(5!#+61#'5Q#/51#(6!#+5!#&4Q#&5!#&5!#&5!#&5!#&5!#)5!#&4Q#%41##4!#!3Q\"`5!#&5!#&5!#&4!#!3Q\"`31\"^2Q\"[31\"]2Q\"[2Q\"[3A\"[4!\"^31\"]3!\"]3Q\"Y2Q\"[31\"Z3A\"]3Q\"_3!\"[3Q\"`31\"Z3A\"_3!\"\\4!#!31\"^3A\"^3A\"_41#\"4!#\"41##4A#$41#\"41##5!#&4Q#%3A\"_4A#$5!#'51#+5A#'51#'5!#&5!#&5!#&5!#&5!#'61#-6!#,6Q#+6!#/5A#,61#(5A#&5Q#,6!#061#06Q#05Q#051#06!#.5!#)5Q#,6!#/6!#06A#06Q#06Q#06!#05Q#05Q#061#06Q#061#06A#05Q#06Q#06Q#06A#061#06!#06A#06Q#061#051#-4A#!21\"T0Q\"N1A\">11\"921\"831\":71\"A9A\"J3!\"'/!\"\"-Q!Y-!!X,A!Z,1\"\",1\"/-!\"6/A\"B1!\"O3!\"Y41#$5!#06Q#06!#051#,61#/6!#05A#05Q#051#05Q#061#06Q#06Q#06A#06A#06!#05A#05Q#+6Q#+61#-6Q#06Q#06!#061#05A#/5A#-5A#)51#,6!#/6Q#16!#151#151#/5Q#'5!#'5!#*6A#$51#)5Q#'6!#.5Q#*4Q#%41#\"41##4A#$4A#$4Q#%5!#&5!#&4!#!3Q\"_4!#\"3Q\"`3A\"_4Q#%3Q\"_3A\"_3Q\"`3Q\"^3A\"]3A\"]3!\"\\2Q\"[4!\"]3A\"^3A\"X3A\"Z31\"]3Q\"X31\"Y3!\"X31\"Y3A\"Z41\"^4A\"[31\"^4!\"^3Q\"[2Q\"[31\"]2Q\"[4!\"^4!\"\\4!#!3Q\"`5!#&4!#!41##3A\"_4!#!4A##4!#!5!#&6!#)7!#%5!#)5!#&5!#&5!#&5!#&5Q#*5!#+6A#(5Q#/51#*5!#+6!#)4Q#'51#,51#06Q#05Q#06!#05A#.7!#%4Q#+5!#-6!#051#06A#06Q#06!#05Q#06A#06!#05Q#06A#06!#06Q#06Q#06Q#06Q#06!#06!#05A#05Q#06!#06Q#06!#05!#-4!#%3!\"Z2!\"L0Q\"B1A\"91Q\"72A\"941\">6Q\"C:Q\"O=Q\"W@!\"_CQ#(CQ#)EA#'EQ#%AQ\"V?Q\"NQ\"O?!\"[A1\"X@!\"Z>A\"R9Q\"?4!\"00!\"#.1!]-A!Y-1!X,!!X+A\"!+A\",-Q\"5.Q\"<0Q\"L1!\"O1Q\"T4Q\"`5Q#+6A#06Q#06Q#06Q#06Q#05Q#06A#06!#05Q#061#06Q#06Q#06Q#05Q#05Q#051#-5!#*7!#&51#06A#061#06Q#05Q#051#051#)5A#)51#*5A#-6!#05A#16!#15Q#-61#)6!##5!#&5!#&5!#*51#+6!#'51#(5!#&4Q#$31\"]4Q#%5!#&4A##4Q#%5!#&5!#&4!#!31\"^3A\"_4!#!31\"]3Q\"`4!#!4!#!31\"]3A\"\\31\"\\3!\"X3!\"[3Q\"`31\"X3Q\"^31\"W3A\"Z31\"]3!\"Y4!\"]3Q\"Y41\"]3A\"V2A\"[2A\"Z31\"W2Q\"Z3A\"_31\"]4!#!31\"^3Q\"X31\"]3!\"\\4!#!5!#&41##3A\"_41##3!\"\\3A\"_4!#!4A#$41##4Q#*5!#(5!#&41##4A#$41#\"5!#%6A#&4Q#,5A#)5Q#-61#$5!#%4Q#%4Q#%5Q#+5Q#06!#06A#05Q#,5A#061#$51#%4Q#*6A#05A#05Q#06Q#06!#051#.5Q#-4Q#)51#-6A#06!#06A#06Q#06Q#06Q#06!#05Q#.3Q\"[2A\"Z4A#&6A#.7!#07!#16!#16!#15!#'4!#!2A\"W3!\"C2!\"@1Q\"81Q\"73Q\"861\"B7A\"D:A\"L<1\"S?1\"^A!#$BA#$DA#)E1#%E1#\"E!#\"D1\"YB1\"_AQ\"Z@A\"Y@!\"Y?A\"Q>1\"N>A\"O?A\"XA1\"W@A\"YAQ\"]CA##CQ#&BQ#$A!\"`=1\"R:!\"F7!\"<3A\".0Q\"$-Q!\\-1!X,A!X,Q!X+Q!X,1!]+!\"\"+Q\"0,A\"6-1\"90!\"H1!\"N11\"P2Q\"[3A#!6!#06Q#06Q#06Q#06Q#06!#06!#06!#05Q#-6A#+5Q#06Q#06Q#06Q#06!#05Q#05Q#-4Q#)6A#'4Q#16!#06Q#06!#06!#05Q#06!#$6A#%51#(6!#&6Q#+51#06!#.51#+5!#*5!#&5!#&5!#&5!#)6A#%51#(6!#%5!#'5!#&3Q\"`4A#$4!#!41#\"5!#&4!#!5!#&3Q\"`41#\"31\"^31\"^4!#!3!\"\\31\"^2Q\"[2Q\"\\3A\"Y3A\"_3A\"_2Q\"[4!\"\\31\"]31\"X3A\"[3Q\"\\4!\"X3A\"Y3!\"Y2Q\"Y3A\"X31\"X3Q\"^31\"]4!\"X2Q\"[3Q\"^3A\"_2Q\"[3A\"_31\"^31\"]31\"]3!\"\\2Q\"\\3A\"_41##41#\"4Q#%3A\"_3A\"_3Q\"`4!#!4A#$5!#&5!#'5!#*4A#$3A\"_3A\"_4Q#%5!#'6A#\"51#-5A#)51#'5!#&4Q#%4Q#%5!#&51#(5Q#.61#/5Q#.5Q#*5A#*4Q#*4Q#%5!#/5Q#06!#061#061#06!#06Q#(5!#.6A#&51#05!#05A#06Q#06Q#06Q#06!#06!#04Q#*1Q\"R11\"O2A\"Y3A\"^5!#-6A#06A#06Q#06Q#061#.5!#'3A\"]31\"Q3Q\"L2!\"C21\";1Q\";31\";31\";3Q\"<7!\"@8!\"@8Q\"B:!\"M!\"X>Q\"Y?A\"Z?A\"Z@Q\"Z?Q\"Z@!\"Z@1\"\\?Q\"Z?1\"W=!\"X51\"421\".0A\"'/1!`.A!]-A!\\-1!Y,Q!Y+Q!X*1!W)Q!Y*Q!`*A\"#*Q\"',!\"1-A\"9/!\"A0A\"J0Q\"M1!\"O2!\"V4A#&5Q#06Q#06Q#06Q#061#061#05!#/51#.6A#*61#05Q#06A#05Q#061#06A#05A#05Q#-5!#'51#)5A#-5A#,6Q#06Q#061#05Q#.4Q#+5A#)4Q#(5!#*5Q#+6!#,6!#+5Q#)6A##51#$4Q#%5!#&5!#&5!#&51#'51#(5!#&41##4!#!3A\"^4!#!41#\"41##4Q#%4A##31\"^41#\"3Q\"`2Q\"[4!#!31\"^3!\"\\3A\"_41#!3Q\"X31\"Z3!\"[3!\"[3A\"]3A\"[4A\"Z3!\"[31\"\\3!\"Z3!\"Z31\"Z3!\"Y3!\"X31\"X31\"^31\"W3Q\"\\31\"Y3Q\"Z3A\"Y3Q\"Y3Q\"`3!\"]31\"]31\"^2Q\"[3Q\"`31\"\\41\"]3Q\"`4A#$3A\"_4!#!41##31\"]3Q\"`4A##3Q#!5!#&5!#&5!#&41#\"4!#!41##3Q#!4A#'5!#&5Q#,6!#(5!#*4Q#%4Q#%4Q#%4Q#%5A#&5Q#)5Q#.5Q#.6!#%51#(4Q#%4Q#%5!#*5Q#051#06!#06!#06!#051#.4Q#-4Q#)5A#05Q#05Q#05Q#05Q#06Q#061#051#05!#(1Q\"R01\"I0Q\"M11\"P31\"]4Q#'5Q#06!#06A#06!#06!#05!#&4!#!3Q\"[3A\"T3!\"O3!\"E1A\"D1A\"=0A\";01\"<1Q\"81Q\"62A\"231\"131\"12Q\".2A\".1!\"00Q\"10A\",/1\"$/1\"$.1\"\".1\"\",Q!`.!!^-1\"#-A\"\"-Q!_.!!^,1\"!,!!_*A!Z*1!X(Q!W(1!Z(1![*A\"$+A\",,!\"2,1\"4-A\"9/A\"C0!\"H0Q\"M11\"P31\"^4Q#+5Q#05Q#06A#06!#051#04Q#.4!#%41#$4Q#,6!#+5Q#/5A#061#06Q#061#05Q#051#-5Q#%5Q#)6!#+61#*6!#05A#05A#04Q#.6!#&4A##41#\"4Q#&5A#+5A#*61#)5Q#)5A#%5!#&4A#$4A#$41#\"5!#&5!#(61#(5!#'4A##3Q#!3Q\"`41##3Q\"`3Q\"`4A#$3Q\"`4!#!31\"^2Q\"[41\"[31\"]3!\"\\4A##41\"^4!\"]31\"X31\"^2Q\"[3Q\"\\3!\"Y3Q\"U3Q\"\\3Q\"U3Q\"\\31\"Y3Q\"Z31\"W31\"W3!\"Y3!\"X21\"V3Q\"U3Q\"U3!\"\\2Q\"[3A\"]3Q\"W31\"\\31\"X31\"X3Q\"Y3!\"\\3Q\"`3Q\"X2Q\"[3!\"[4!#!3!\"]4!#\"31\"]3Q\"`2Q\"[2Q\"[31\"^3A\"_41#\"4A##5!#&3Q\"`4!#!31\"]4!#\"3!\"\\5!#&5!#'61#&51#*4Q#%4Q#%3A\"_41#\"4Q#%4Q#&51#)6!#.5A#/5!#(4Q#'4Q#%4Q#&4Q#'4Q#(5Q#-5Q#*5A#/5Q#06A#(5Q#'5!#+5!#-5!#/51#06!#05Q#06!#05Q#05A#05!#.1Q\"S0Q\"M0A\"K0Q\"L0Q\"K3!\"W3!\"Y4!#'5Q#(4Q#*4Q#)31\"]3!\"Y2!\"V1Q\"R0Q\"J01\"I/Q\"E/A\"E.Q\"@.A\"<.A\";.A\";/1\"6/!\"501\"501\"4/Q\"0/Q\"./A\"0/1\")/1\"(/1\"%.1\"$,1\"(,1\"\"+1!`*!!Z(A!W'A!W'1!R&Q!N&1!O&A!Q'Q!W(1!Y)1!_*1\"!*1\"\"*A\"\"+Q\"/.1\"=01\"H0Q\"M11\"P3Q#\"51#.61#061#06!#04Q#*4!#&2!\"W0A\"L2A\"X5!#+5!#.5!#/5A#06!#061#05Q#05!#04Q#,4Q#&5!#(51#*5Q#,61#-5Q#,5Q#,6Q#$4Q#)4!#\"4Q#%4Q#%51#(5!#(5Q#*5Q#+5!#,4!#\"41#\"31\"^3!\"]41#\"4A#$5!#&4A#%3A\"_4!#!3!\"]3A\"^31\"^4!#\"41##4!#!41#\"31\"^4!#!3A\"\\31\"[3!\"\\3Q\"]31\"Y2Q\"[3Q\"^3Q\"\\4!\"W3Q\"^3A\"V4!\"]3!\"[3!\"[3!\"[3!\"Z31\"[3A\"W31\"X31\"X3Q\"V3A\"V2Q\"Z2Q\"Y3!\"Y2A\"Y3A\"]31\"W3Q\"]4A\"V2Q\"[2Q\"Z3Q\"Y3A\"Y3A\"Y3A\"Y4!\"^3!\"]3!\"\\3!\"\\4!#!31\"]3Q\"`4!#!31\"]3A\"_31\"]31\"^3A\"^4!#!4A#$31\"^3Q\"`31\"^3Q\"`4!#!4Q#&41#&4Q#'4Q#(4Q#%41#\"3A\"^4A#$4Q#%4Q#%6A##51#-5Q#&6!#)5!#&4Q#%4Q#%4Q#%4Q#%6!#-5Q#-71#*5Q#05Q#,6!#&5A#$4Q#'4Q#+6A#'5A#05Q#05Q#05A#051#04Q#,21\"Y0A\"L0Q\"N/Q\"F0Q\"M0Q\"M1A\"Q2!\"P2!\"W21\"W2A\"Y1Q\"P1Q\"T0Q\"L/Q\"F.Q\"@-1\"9+A\",*Q\"%*1\"!*1\"!*!!`*!!`)!!\\)A!](1!Y(1!Y(!!X&1!S%A!S%A!S%A!S$A!R%A!O%1!M$A!J$1!J$A!J%1!K$!!I$A!J&!!N%!!K&A!L'!!N'1!O'1!O)!!V*!!^-A\"6/Q\"F0Q\"M21\"W3Q#%51#05Q#/6!#/4!#!2A\"Y1!\"O0A\"L0A\"K1A\"T4A#)6!#,6!#-5A#-5A#.4Q#.51#*4Q#)4Q#)4Q#&4Q#%5!#*5A#)5Q#.6!#,51#,5!#'4Q#&41#\"41##41##4Q#%5Q#(61#(5Q#)4!##4!#!4!#!41#\"3Q#!3Q#!5!#&5!#&4Q#%4A##3A\"_31\"]31\"^31\"^3Q\"`31\"]3Q\"`31\"^31\"^31\"]31\"]3Q\"]3!\"Z3Q\"`2Q\"[2Q\"[2Q\"[2Q\"Z3!\"Y3!\"Y3Q\"]31\"]3A\"Z3Q\"Y3A\"Y41\"]2A\"V3Q\"U2Q\"[31\"X31\"X21\"X3!\"U2Q\"S3!\"X3Q\"U2Q\"U3!\"Y31\"W2Q\"Z2Q\"[4A\"^4!\"Y3!\"]3A\"\\3A\"\\3!\"\\3A\"Y31\"^3Q\"X3!\"\\3A\"V3!\"\\4A\"]3!\"X3!\"X31\"]3A\"_2Q\"[3Q\"`4A##3Q\"`4!#!3A\"_3A\"_2Q\"[3!\"]4!#!41#\"4Q#$4A#$4Q#%41##41#\"31\"^31\"]4!#!4Q#$5A#)5!#,6!#%5A#,4Q#%4A##4A#$3!\"]4Q#%4Q#*5Q#*51#+51#+6!#+4Q#(4Q#%4A#$2A\"Y2!\"T3A\"]5A#)5Q#,5A#+5Q#,5Q#,4Q#\"11\"Q0A\"J/Q\"E0A\"K0!\"G0!\"G/1\"C01\"J0Q\"M0A\"K0Q\"M1!\"O11\"P11\"O01\"I.Q\"@-!\"5+!\"&(!!T%!!K%A!D$1!A#1A>#1A>$1Q=#1Q>#1A>$!A=$!A=#AQ?#QAA$AA:#AAB$AA:#AQ?#A!<#A!;$A!4#1!9#A!6#A16#113#Q19&A!G)A!\\-!\"30A\"J0Q\"M1!\"N11\"P3A\"]31\"`31\"`11\"P0A\"K01\"J/Q\"E0A\"J0A\"K2!\"U4Q#&6Q#(6!#06Q#(5A#.6Q#'4Q#(4Q#*4Q#%4Q#%4Q#%4Q#(6A#'5A#+5Q#&6A#*51#$41##4A#$31\"^4!#!4Q#%4Q#'4Q#'4A#&4A#$4A#$31\"]3A\"_3Q\"`41#\"5!#&5!#&41#\"3Q\"`3!\"\\3Q\"`3Q\"`3!\"]3!\"]31\"]3A\"_3A\"_3A\"_3!\"]2Q\"Y3Q\"]3A\"V31\"]31\"W3!\"[3Q\"`31\"X4!\"\\31\"^3A\"W3A\"V3!\"X3Q\"[3!\"X31\"X3A\"V3!\"X2Q\"X21\"X31\"U3!\"T1A\"S2Q\"W2Q\"Z2!\"U3!\"W21\"U31\"T31\"W3A\"W31\"X31\"X2Q\"Z3Q\"Y31\"Z4!\"W3!\"]31\"[4!\"[31\"Y41\"]31\"]41\"Y3A\"_3!\"\\2Q\"[4!\"Y2Q\"[3A\"]3A\"_31\"^3A\"_3A\"_4!#!4!#!31\"]41\"`31\"]3Q\"`41##4Q#%4Q#%41##3A\"`41#\"4!#!31\"]3A\"_41#\"4A#&51#*4Q#(4Q#&4Q#$3Q\"`4A##4!#!4Q#$51#'5!#&5!#+5A#*5Q#*4Q#)4Q#(3Q\"_/Q\"F/Q\"E1!\"M21\"V41#!5Q#(5Q#,5Q#,4A#&2A\"Y1!\"N0!\"H0!\"H/1\"B+Q\"**A!`*Q\"\"+!\"%-!\"5.Q\"?/A\"D/A\"D/A\"D/A\"D/Q\"F/!\"?+Q\"+*1!Y(1!R&!AK&1Q@$AQ;#AA8#!!:#Q!9\"A!:\"A!9#1Q8\"!!1\"!11\"1A5\"112#!!2#Q!2\"A!1\"!!1#!14#AQ4#1!;'!!O*A\"#-Q\"8/Q\"F0Q\"M0Q\"M0Q\"M0Q\"M01\"I1!\"N0A\"K01\"I0!\"H/Q\"E01\"I0A\"K11\"O3A\"^4Q#+5!#*6!#+5Q#-4Q#(4Q#'4Q#'4Q#%4Q#%4Q#%4Q#%4Q#%4Q#(51#&51#'51#&4!#!3A\"_3Q\"`41#\"41#\"4!#!4Q#%4Q#&4Q#&4A##41##3A\"^3A\"^4!#!3A\"_4A#$4!#!41##4!#!3Q\"`31\"Z3A\"Z3A\"^3!\"]31\"^31\"^4!#!3A\"^41\"Y3Q\"^3!\"[3!\"[31\"X3A\"[41\"`31\"Z3A\"Y31\"Z31\"Y4!\"[31\"[41\"X31\"X3A\"Y2Q\"Y2Q\"W21\"W2Q\"Z2Q\"Y1Q\"T3!\"S3!\"S1Q\"T2!\"U2Q\"T2A\"X3!\"U3!\"Y3Q\"U2Q\"[31\"W2Q\"[3Q\"U3!\"Y31\"]3Q\"Z3Q\"Y3Q\"`3Q\"X31\"^3!\"]3Q\"Y2Q\"[31\"^2Q\"[31\"]3A\"_3Q\"`3!\"[3Q\"[3!\"]4A\"\\3Q\"`3Q\"_3Q\"`3A\"_3A\"^3Q\"Z3Q\"`2Q\"[4!#!4!#\"4A#$3Q#!41#%4A#$3Q\"`3A\"^3A\"^3Q\"_3Q\"`3Q\"`4Q#'4Q#'4Q#%4Q#%4!#\"4A##3Q\"`3Q\"`4Q#%4Q#%4Q#)5Q#)6!#\"4Q#)5A#)41#!11\"P/1\"C/Q\"E0!\"G1!\"M2Q\"Y41\"\\51#*4Q#*2A\"X1!\"O0Q\"M01\"J01\"J,1\"-*!!\\)!!V)!!V(!!S'A!P'A!P'A!P(!!V(Q![)A!Y(A!S'A!P'A!P'!!K%A!C#Q1;#!A3#1Q1\"!17#115#1A1\"!11\"1A6\"Q15#1A.!QQ4\"112\"Q!1\"1!0$A1E%Q!J)!!Y-!\"3/!\"@0Q\"M01\"I0Q\"M0Q\"M0Q\"M0A\"K0A\"L0!\"G/Q\"E0!\"G0!\"G0!\"G0!\"G/Q\"E1A\"Q3Q##4Q#)4Q#%5A#+61#'5!#)4Q#%41#\"3Q\"_4A##4Q#!4!\"_4Q#%4Q#%4Q#,61#\"4Q#)3Q\"_3Q\"`3Q\"`41#\"31\"^3Q\"`4Q#%4Q#%4A##41##3Q\"`3!\"\\3A\"^3!\"]3!\"]3Q#!4!#!4!#\"4!#\"31\"]31\"]2Q\"[4!\"Z3!\"]3!\"]3Q\"_3!\"]3!\"]31\"^3A\"]31\"X3Q\"]3Q\"[3!\"]3!\"[3Q\"[3A\"W3A\"^4!\"Z31\"W2Q\"[3!\"Y3!\"Y3A\"W3A\"W2Q\"T21\"X3!\"T3!\"Y21\"T2Q\"U2A\"X1Q\"S2!\"V2!\"Q2Q\"S2!\"S21\"R1Q\"R2Q\"X2A\"U2A\"W3Q\"U3!\"X3A\"V31\"W2Q\"Z2Q\"Z3Q\"X3!\"[3A\"W3A\"[3!\"Y4!\"\\3Q\"[41\"`3Q\"W2Q\"[3A\"W2Q\"[3Q\"Y2Q\"Z2Q\"Z2Q\"[3!\"]3!\"]31\"]3Q\"`3!\"\\3!\"\\3!\"\\2Q\"\\2Q\"[31\"^3Q\"_4!#\"4!#!3A\"^3Q#!3Q\"`3!\"\\3!\"]31\"]4A##4Q#%4Q#%4Q#%41##4Q#%41##3A\"^4!#!41#\"4!#!5!#&41#%4Q#)4Q#%4Q#%4A##1A\"R/Q\"F/!\"@/!\"A/1\"A/!\"A0!\"G0!\"H0Q\"L1!\"N0Q\"M0A\"K0A\"J0!\"G/A\"D-!\"2*A\"!)1!X&Q!K&1!?#Q14\"AA/$111#1Q2#1Q1\"QA/\"QA/#1A/\"1A0#AA5\"AA4\"1Q5#!A.\"!11\"!!.#114\"1!2$!A6$!A@$1A;%11C(Q!T)Q!]+A\"*/1\"D/A\"D/Q\"F0Q\"L0!\"H0A\"K/Q\"E/1\"B.1\";-Q\"7-Q\"7/A\"D/Q\"F/!\"@/Q\"F/Q\"F0Q\"M3A\"_4Q#'4Q#(4Q#&4Q#%4!#!3A\"]11\"P01\"I2A\"Y4A#$4Q#%4!#!4Q#%4Q#%4Q#%4A#%4!#\"3Q#!3Q\"`4!#!31\"^41##4A##4A##41#\"41#\"3Q#!3Q\"`3!\"]3Q\"`3!\"\\3Q\"`3A\"_3Q\"`4!#!3Q\"_3!\"\\3A\"Z31\"^31\"\\3Q\"]3!\"\\3A\"Z3Q\"`3A\"[4!\"Y3!\"\\31\"Y31\"W3!\"[3A\"Y31\"X3A\"Z3A\"W31\"[4A\"X3!\"Y3A\"W3Q\"U4!\"]31\"X3!\"Y3!\"Y3!\"X31\"U1Q\"S31\"R2A\"V31\"U1Q\"T1A\"S11\"Q21\"Q2!\"V31\"T2Q\"W2!\"S2A\"W21\"T2A\"V2Q\"Y31\"X2A\"Z2Q\"Z3!\"X31\"W3A\"Y41\"]31\"W4!\"X3!\"Y3A\"V4!\"X3!\"Y2Q\"Z3A\"_31\"]4!\"X3Q\"_3Q\"W3A\"^31\"]3A\"_41\"\\3Q\"_31\"\\41\"]31\"Z4A\"\\31\"\\41#!3A\"_4!#!3A\"_41#\"4Q#%3!\"]3!\"\\3Q\"`31\"]31\"]3Q\"`3A\"_4Q#%4Q#%4A##4!#!41##41#\"31\"^31\"^3A\"^41##4!#!4Q#%4Q#%4Q#%4Q#%4A#$2A\"W/Q\"E0!\"G/1\"B0!\"H0!\"H/1\"C0!\"G/A\"D/A\"D0Q\"L0Q\"M0A\"J0A\"K0!\"G/Q\"F.!\"9+Q\"))A!Z'A!P&11G\"QA6$1A4\"1!7\"AA4\"QQ1\"1A0\"!14\"1!1\"AA1\"!Q5#!A.!Q!5$1Q?%1!B&Q1K'!1O(A!T)!!V)!!V)1!X+!\"&-!\"6-1\"9,Q\"3+A\"'+1\"&+A\"'+A\"'+!\"#*A\"!)A![)1!X*Q\"#.1\"<0!\"H01\"I01\"I1A\"R41#\"4Q#%4Q#$4A#%4!\"X11\"P0Q\"M/1\"B/!\"@1A\"R31\"]3Q\"`4Q#%4Q#%4Q#%4!#\"4A#$3Q\"`3A\"_3!\"]3!\"\\3A\"_3A\"_4!#!4Q#%41##4!#\"4!#!3!\"\\2Q\"[3Q\"Y3!\"[3!\"]3!\"\\41#\"31\"]2Q\"[31\"\\41\"]4A\"\\31\"W3A\"[3!\"Y3!\"\\4!\"]3!\"\\31\"Y2Q\"[3Q\"X3A\"Z31\"^3Q\"W31\"Z4!\"\\3Q\"[4!\"Z3!\"Y3!\"Y3!\"Y31\"W3Q\"U31\"X4!\"T2Q\"X3!\"Y2Q\"X1Q\"T1Q\"T2A\"V31\"S1Q\"T2!\"V11\"P1Q\"T11\"P1Q\"T1Q\"T1Q\"T21\"Q21\"X1Q\"T2!\"W1A\"R3A\"W2A\"R2Q\"T3A\"V3A\"W2Q\"[3A\"W2Q\"[31\"W3A\"W2Q\"[2Q\"Z3Q\"[3Q\"Y3Q\"Y3Q\"\\3!\"X31\"W3!\"Y3!\"X3Q\"Y3A\"Y2Q\"[3!\"\\3Q\"Y3!\"\\3!\"[31\"W3!\"Y3Q\"T3!\"\\3!\"\\3Q#!3Q\"`3Q\"_3Q#!3Q\"`31\"]3A\"Y3!\"]31\"^3A\"^31\"]3!\"]4A#$4A#$4A#$3Q#!4!#\"41#\"3!\"]3!\"[31\"X4!#!4!#\"41#\"4Q#%4Q#%4Q#%4Q#%11\"O/A\"C/Q\"F/1\"B/1\"B/1\"B/1\"B/1\"C/Q\"F/1\"B0!\"G0A\"K0!\"G01\"I01\"I/A\"C/A\"D-1\"4+Q\")*!!](A!T'!!E%11>$A1=#117#110\"QQ3\"112\"!!1\"!13#A1.#Q15%!!>&A!D%A1C&QAH&Q1K'1!K'A!M'A!M'Q!R&Q!N'Q!R)!!V)!!V(A!T(Q!U)!!V)A!Z+1\"'-1\"4/Q\"F0!\"G/Q\"E0!\"H2!\"V3!\"[2Q\"X1Q\"S01\"J/!\"@/A\"D.Q\"?.Q\"?/A\"C2A\"W4A#$4Q#%4Q#%4Q#%4A#$3Q#!3Q\"`3!\"\\3Q\"`2Q\"[3A\"_3Q\"_31\"^3A\"_4Q#%4!#!31\"]3A\"^2A\"Z31\"^31\"^2A\"Z3Q\"^41\"_3Q\"_3!\"\\3Q#!3!\"]3Q\"Y2Q\"Z2Q\"[2Q\"[3A\"\\3!\"Y2Q\"[2Q\"[3Q\"[31\"Z4!\"X3A\"[4!\"W31\"]3!\"\\3Q\"Y2Q\"[3A\"W31\"W2A\"U3!\"Y3A\"W3A\"W2Q\"[2!\"U21\"X21\"R2A\"W1Q\"S1Q\"T1Q\"T1Q\"T1Q\"U11\"P1!\"O1Q\"T11\"P11\"P1!\"O1Q\"T1Q\"T1Q\"P1A\"Q2A\"Q21\"U1Q\"T2!\"S3!\"V2!\"U2A\"X2Q\"Z3A\"V3A\"V2Q\"[2Q\"Y3!\"Y31\"X31\"W3A\"V3Q\"V3!\"Z2Q\"[3!\"Z3A\"]31\"\\4A\"_3Q\"W3A\"Y4!\"[31\"[2Q\"Z3!\"\\2Q\"\\2Q\"[2Q\"[3!\"]31\"Y3A\"Z3!\"Z3!\"\\4!#!4!#!31\"^3A\"_31\"\\2A\"Z3A\"]3A\"]2Q\"[3A\"_2Q\"\\3Q\"`41##4A#$31\"^4!#\"3Q\"`3A\"_21\"V/Q\"F0Q\"K2A\"X3!\"[3A\"^4Q#%4A#$41##3A\"]01\"I/1\"C/!\"@.Q\"?/Q\"E.1\"=+A\"+*Q\"&,1\"1-A\"7.1\";.!\":-Q\"7.1\"<.1\"<.1\"=/A\"E.1\"<,Q\"2)A!Y(Q!V)!!V(!!Q(!!P'!!M%Q1J%A1?#QQ?#Q!9\"1!5\"1A/\"1A/\"AA2\"!11\"!12\"QA1\"AA0#A11$!17&1!>&A!M(1!T(!!S)1!X*1!_,1\"-.!\":/A\"D/1\"C/Q\"F/A\"D/Q\"F/1\"B/A\"D/A\"D0!\"G0!\"G/1\"C.Q\"?/!\"@/!\"A2!\"U3!\"[4Q#%4!#!41#\"41##3A\"_3Q\"`3!\"\\3!\"Z4!\"]41\"]3A\"^4!#!4!#!41#\"3Q\"`3!\"\\31\"^3!\"]31\"[41\"Z3Q\"W3!\"]31\"^31\"]31\"\\3!\"\\2Q\"[3!\"[4!\"]3A\"W4!\"\\3A\"X4!\"[31\"[31\"Y4!\"\\3!\"Y3A\"[2Q\"Z3!\"Y3!\"X3!\"Y3A\"X3Q\"V31\"Y2Q\"[3!\"Y31\"W2A\"W2Q\"Y2!\"V1Q\"S31\"V2A\"W31\"T1Q\"T1Q\"S1Q\"Q1Q\"T1Q\"P1Q\"T1Q\"U1A\"S2Q\"Q11\"Q11\"Q1A\"R1A\"Q1!\"O11\"P2A\"V1Q\"R1Q\"T11\"P1Q\"T3!\"V2A\"R3!\"U21\"S2A\"V2!\"V1Q\"U2Q\"S3!\"X3Q\"U2!\"V31\"X2!\"W2Q\"X4!\"T41\"V3Q\"W3!\"X3!\"Y3A\"V2Q\"[31\"X31\"W3A\"[3Q\"]3Q\"X2Q\"\\2Q\"[31\"Z4Q\"Y3!\"X3Q\"[41\"W3Q\"^2A\"Z3A\"_31\"^31\"^31\"]2A\"Z3Q\"]3A\"]4!\"[3A\"^3A\"_31\"]2Q\"[3A\"_4Q#%4!#!3Q\"`3Q\"`2A\"Z0Q\"M.Q\"?/A\"E/Q\"E0Q\"L11\"O21\"V3!\"]4Q#$3Q\"`1Q\"T/Q\"E/A\"E.Q\"?.Q\"?-1\"4*1\"\"(!!R(!!R)!!V)!!V)!!V)!!V)A![)A!`*A\"#*A\"#)Q!\\)1!X)!!V)!!V)!!V(A!T(Q!U(1!S'Q!R)!!V'1!P&!!J$!!>#!!3\"!15#A14!QA2\"Q16%A1A%Q1E'A!N(Q!U(A!T*!!]+Q\",-1\"7/A\"E/1\"B/Q\"E/A\"E/A\"E/A\"C.Q\"?/!\"A/1\"B.Q\"?.Q\"?/1\"B/1\"B/1\"C.Q\"?/A\"C2Q\"Y3!\"\\3Q\"`4!#!4!#!3A\"_3!\"]3!\"]3A\"_4!\"Y3!\"X3A\"^2A\"Z3Q\"`3!\"]3!\"]3A\"^3Q\"`2Q\"[4!\"Y3Q\"Z3A\"W31\"]2Q\"[3A\"_31\"^2A\"Z2A\"Z4!#!4!\"Y3A\"[2Q\"Z31\"X3A\"_31\"X2Q\"[2Q\"\\3A\"Y3!\"]4!\"X41\"W3A\"V3A\"V31\"X2Q\"[2Q\"[2Q\"Y3Q\"U3!\"X3A\"V2!\"W31\"T31\"T2Q\"U2Q\"W2A\"Q1Q\"R11\"Q21\"Q2!\"R2A\"T1A\"P2Q\"U11\"Q1A\"R1!\"N11\"Q11\"Q1Q\"T1!\"O1A\"R11\"Q1Q\"S11\"Q1A\"R1Q\"T3!\"R21\"Q11\"Q1Q\"U1Q\"T1A\"Q21\"Q1Q\"T21\"X21\"X2A\"W21\"T2A\"V2!\"R31\"W2A\"Y2A\"X2Q\"Z2Q\"Z31\"W31\"\\3!\"Y3Q\"U3Q\"U2Q\"Z3Q\"T31\"X3Q\"Z4!\"W3Q\"\\2Q\"[31\"\\3!\"\\3A\"]3!\"X4!\"X4!\"Y3A\"\\3!\"Z3!\"]3Q\"`3Q\"_3!\"\\2Q\"[2Q\"Z3Q\"W3A\"Z4!\"\\3!\"]2A\"Z3!\"]4!#!3A\"_3!\"\\4!#\"31\"]1Q\"U01\"I/1\"B/!\"@.Q\"?/!\"@/Q\"F/1\"B0Q\"M11\"Q0A\"L/A\"C/A\"E.Q\"?.Q\"?.Q\"?.!\";+A\"))1!Z)!!V(!!R(A!T(A!T(A!T(!!R(!!R(!!Q&A!I'!!K&11H%11C'!!H&A!D%1!B$A!7\"!Q.%Q!8$Q1<%11=$QA;&A!B'Q!Q(Q!U(!!R(!!R)!!X)A!^+A\"(.Q\">/!\"A/1\"C/!\"@/!\"@/1\"B/!\"@/!\"@/1\"C.Q\"?.Q\"@.A\">.Q\"?/1\"C/1\"B.Q\"?/!\"@/1\"C1Q\"U3A\"^41#\"41#\"4!#!31\"]3A\"^3A\"Z2A\"U3!\"V3A\"V2Q\"[3!\"\\3!\"\\31\"]4!#!31\"^3Q\"`4!\"\\31\"]4!\"\\31\"]3!\"\\3!\"\\3A\"Z4!\"\\31\"Y4Q\"[4!\"^41\"[4!\"T3!\"Y31\"W4A\"Z31\"X3A\"V4!\"\\31\"^3Q\"V3Q\"]3A\"V2Q\"Z21\"X31\"X2Q\"Z3A\"V3A\"V21\"X31\"U2A\"Y21\"X21\"V2A\"T21\"V2!\"V1Q\"T21\"X1Q\"T2!\"U2Q\"P1Q\"T1Q\"T1Q\"T1Q\"U11\"O2Q\"Q1A\"Q2Q\"R11\"Q1Q\"S0Q\"L1A\"R1!\"N1A\"S1Q\"U11\"Q1A\"R11\"P1A\"S21\"S2!\"V1A\"Q1Q\"S1Q\"T21\"T11\"P2!\"V1A\"P21\"V2!\"S3Q\"U2A\"X2!\"V2A\"X1Q\"T2A\"S3!\"Y2!\"V4!\"V3!\"Y2Q\"Y3Q\"U31\"W2Q\"Y2Q\"Z3!\"Y3!\"Y3!\"X2Q\"[4!\"X3A\"Y3A\"[31\"Y4!\"]4!\"T4!\"W3!\"Y3Q\"X4!\"]3Q\"[3!\"[2Q\"\\2A\"Z31\"Z4Q\"[3!\"Y4!\"X3A\"]3Q\"W2Q\"Z3A\"_2Q\"[31\"^3A\"^31\"^21\"X0A\"L/1\"B.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/1\"B0!\"H/!\"@/1\"C/A\"D/Q\"E/!\"@/Q\"E.Q\"?.!\":-1\"4+!\"$)A!Z)!!W'Q!R(A!T(A!T&1!K%A!@#Q18\"AA2\"AA0#11<$A!@'A!K&Q!H'A!K'A!N(1!S)!!V(Q!U(1!S'1!P(A!T(1!S(1!S)Q!],!\"2.!\":.1\";/!\"A.1\";,1\"1+!\"$+!\"$*A\"\"*A\"!*Q\"$)A!^*A\"#.!\":.Q\"?.Q\"?/!\"A/1\"B11\"Q2!\"V4!#!4!#\"3Q\"`2Q\"Z2Q\"Z1!\"N0!\"G0!\"D01\"J2A\"Y3Q\"^3!\"[3Q\"_31\"]31\"^2Q\"[3!\"Z3Q\"Y3A\"Z4A\"[3!\"Y4!\"X3Q\"Y3A\"Y3Q\"W2Q\"[2Q\"[31\"[2Q\"Y3A\"W2Q\"Z3A\"V2Q\"[31\"Y3Q\"^31\"]3A\"Y2Q\"Z2Q\"Y3!\"Y3!\"S21\"W21\"X31\"W31\"W31\"X3Q\"T3!\"U2A\"X1Q\"S1A\"S1Q\"R21\"T2!\"U1A\"Q21\"Q2!\"Q11\"P11\"P1Q\"T11\"P1!\"O11\"P1A\"Q1A\"R11\"Q11\"Q1A\"Q1A\"S11\"Q11\"P1!\"O11\"Q11\"P11\"P11\"P11\"P1Q\"T1A\"R1A\"Q1!\"N1A\"R11\"Q1Q\"S1Q\"T1Q\"T11\"P2Q\"U21\"V1A\"R21\"X2A\"Q1Q\"T2!\"R21\"R21\"X1Q\"T2Q\"T3!\"Y3Q\"U31\"W31\"W31\"X3!\"X3Q\"U2Q\"[3A\"V3Q\"U41\"Z31\"^31\"W3!\"[41\"X2Q\"Z2A\"Z3!\"Y3A\"V31\"X3!\"X3Q\"\\41\"W31\"[2A\"Z31\"^2A\"Z3Q\"\\3!\"X31\"X3!\"\\3Q\"Y3!\"]3Q\"_31\"X2A\"Z31\"^3Q\"\\3A\"\\21\"W0!\"I.A\"=.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F/!\"A.Q\"?.Q\"?/A\"D/1\"B/Q\"F/1\"C.Q\"?.Q\"?.A\"=,1\".+1\"()A!['Q!Q(A!U(Q!U)!!V'1!M&Q!A%Q1D&!!E%A!C%Q1D&A!N'Q!Q'A!Q'A!Q(!!S(1!S)!!V(1!S)!!V(Q!U(A!U'A!Q(Q!U)!!V(1!S(1!S(1!S(1!S)!!V'Q!R'A!Q)1!Z,1\"-.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F1Q\"T2Q\"Z21\"V0Q\"M0Q\"M/Q\"F.Q\"?/A\"D0!\"H/!\"A0Q\"M3!\"\\2A\"Z4!\"Z3A\"]31\"X2A\"Z4!\"[3Q\"`3!\"[3Q\"[3A\"X2A\"Z3Q\"\\3Q\"]3Q\"[3!\"[3Q\"Y3Q\"\\3!\"Z3Q\"[2Q\"Z31\"W3!\"X3!\"X31\"X4A\"[41\"W3Q\"U3Q\"U3Q\"U3!\"X2A\"T31\"W2Q\"R1Q\"T2A\"Z31\"W2Q\"[2A\"Z1Q\"T1Q\"T3!\"T1Q\"T1Q\"T1Q\"T1A\"R1A\"R1Q\"T1Q\"T1Q\"T1Q\"T11\"P1Q\"T11\"P11\"Q1A\"R1!\"N1A\"R2!\"M0Q\"M1!\"N0Q\"M1!\"N1!\"N1A\"Q1!\"N1!\"N11\"P1!\"N1!\"N1!\"O1!\"O1Q\"T1!\"O1A\"R11\"Q1!\"N2A\"T2A\"U1A\"R1A\"R1!\"O1A\"R2Q\"V2A\"Q21\"X1A\"R2A\"R2A\"U21\"W2A\"X2A\"X31\"X31\"X2Q\"Z3!\"Y2Q\"Z21\"T2!\"U31\"U31\"W41\"U31\"Y31\"[3Q\"\\31\"]4!\"Y2Q\"Z31\"X31\"W31\"X3!\"X3!\"Y4!\"]3A\"V4!\"]31\"X31\"]31\"\\3A\"]3Q\"]3A\"Z41\"[4!\"U2Q\"Z31\"[4!\"Y3!\"[3!\"[3!\"\\2A\"Z3!\"S/Q\"F/!\"A/A\"D0!\"H0A\"J1!\"O1!\"O0A\"L/A\"C.Q\"?.Q\"?.1\"<.!\":.!\":.1\"=/A\"F.Q\"?.Q\"?-Q\"9,Q\"3*A!W(A!T(1!S(Q!U)!!V'Q!Q(A!T(!!P(!!P(!!S'A!Q'A!Q&A!I&!!>%Q!B&A!I&A!M'A!P(A!R)!!V)1!V(1!T)1!X)1!X)!!X(Q!V)!!W)A!]+!\"&.Q\"?.A\".1\"=.!\";,A\"5,A\"3-!\"+*A\"#*!!^)1!W(A!T)!!V)!!V)!!V(Q!U(Q!U(A!T(Q!U(Q!U)!!V*Q!X)!!Y*!!^*!!_)Q!^)Q\"\"*!\"%,!\")+1\")+Q\"),!\"-+!\"'*A\"#*A\"#,Q\"0-!\"2.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F0A\"K2!\"M2!\"O3Q\"R4!\"T3!\"X2A\"T1!\"O1Q\"T2A\"Z2A\"Z2A\"Z3A\"_3A\"_3!\"Y3!\"Y4A\"V3A\"[3!\"Y3!\"Y3!\"Y3!\"X3!\"\\4!\"Y4!\"Y2A\"Z3Q\"Y3!\"Z2A\"Z3A\"V2Q\"Y3!\"U3A\"V31\"X31\"X2Q\"Z31\"W3A\"V2A\"S3A\"V2!\"V1A\"R1A\"R1Q\"T1A\"R21\"W2A\"T21\"R2A\"S2!\"U2!\"V11\"P1A\"R1Q\"T2Q\"U1A\"S1A\"R11\"Q11\"Q1!\"O11\"P1Q\"T1!\"O1!\"O1!\"O1!\"O1A\"R11\"P1!\"O11\"Q0Q\"L1!\"N1!\"N1!\"N"; +static unsigned char +palette_data[] = { 4,2,2,4,110,178,32,4,122,4,36, +86,15,3,66,4,58,127,36,8,186,4,34,122,17,2, +34,4,19,66,12,4,162,90,2,69,88,2,48,7,20, +2,25,2,103,8,14,48,4,58,186,90,3,154,82,2, +129,55,2,34,17,2,18,17,34,191,94,2,101,57,2, +70,7,32,154,12,22,157,17,3,50,4,88,150,96,3, +186,86,2,138,87,2,86,212,214,210,4,19,98,52,2, +154,15,11,2,4,132,216,7,18,125,12,6,82,37,12, +18,4,88,189,86,14,48,128,2,157,32,4,138,4,60, +155,4,48,126,60,2,218,7,10,52,13,12,66,129,2, +50,56,2,52,52,14,98,4,47,157,6,20,87,48,2, +24,58,2,101,120,2,141,52,5,170,4,113,215,127,2, +73,4,90,210,4,52,112,36,18,194,59,2,85,42,2, +10,107,2,173,95,2,114,31,3,52,4,79,160,84,3, +189,14,10,40,30,2,69,96,2,58,113,2,126,9,37, +231,17,33,170,28,14,2,4,30,146,68,10,37,132,2, +82,23,4,7,4,10,122,4,36,108,32,2,37,7,27, +2,4,98,175,84,10,146,4,101,191,4,14,146,8,29, +86,4,2,170,8,60,230,84,10,162,72,2,39,102,2, +142,4,142,221,4,49,143,68,12,170,4,124,213,15,4, +74,114,2,69,112,2,158,32,3,23,8,50,190,111,2, +104,6,40,154,96,2,210,6,28,104,60,2,138,61,2, +25,68,2,114,58,2,125,39,2,114,73,2,69,16,4, +58,4,88,177,56,14,26,138,2,173,4,68,176,71,2, +55,76,2,210,4,78,130,17,3,42,6,27,69,112,2, +49,12,26,178,47,13,159,18,11,10,13,11,74,141,2, +58,52,18,234,4,82,186,4,126,198,4,103,213,4,62, +206,4,72,226,12,46,210,72,12,222,12,26,146,20,34, +210,4,113,197,4,131,229,4,48,170,4,76,170,7,43, +95,52,30,218,15,11,170,52,14,202,12,14,86,4,40, +174,108,14,202,156,2,186,60,12,130,5,40,129,73,13, +189,12,42,138,44,14,202,4,59,143,4,124,229,4,69, +191,4,69,157,4,60,114,4,43,110,14,14,58,20,26, +157,28,26,210,4,87,162,4,91,202,4,110,226,4,98, +226,4,101,202,17,14,186,28,18,18,60,2,234,28,10, +114,4,30,114,8,10,162,12,54,186,20,26,130,100,10, +170,40,18,154,4,22,114,28,26,234,4,22,58,4,66, +226,4,54,202,12,42,202,4,38,98,4,145,234,4,76, +146,4,94,148,4,138,213,4,94,186,4,54,126,4,54, +154,4,118,211,4,106,178,4,106,188,4,54,142,4,94, +170,4,70,202,4,118,197,4,54,173,4,82,178,72,4, +172,36,10,138,76,14,162,4,98,210,4,118,226,112,2, +114,24,19,8,30,2,85,84,6,226,141,2,73,28,30, +10,28,46,186,112,4,206,36,10,90,36,2,174,108,2, +58,41,3,130,44,10,194,9,33,130,92,2,162,51,2, +42,12,32,162,81,3,146,44,11,26,28,6,146,44,2, +178,30,12,10,60,10,178,64,2,146,28,10,178,92,10, +210,5,41,146,40,2,102,96,2,125,100,2,88,74,2, +157,142,2,159,26,10,55,143,2,50,73,2,102,134,2, +142,73,2,84,127,2,126,142,2,82,156,2,178,28,10, +158,28,26,114,84,14,202,12,4,10,5,20,74,17,2, +26,92,2,194,7,19,106}; + +static unsigned char header_data[] = { 71,99,218,218,99,11,71,218,71,71, +218,99,99,99,71,99,218,99,99,99,99,218,71,218,99,218,218,99,99,218, +218,99,99,218,99,218,99,58,218,99,99,99,58,218,99,99,99,58,99,58, +99,58,11,58,99,58,58,11,99,58,99,58,99,99,99,218,99,218,99,58, +99,71,99,218,71,12,12,12,12,12,12,12,12,12,92,19,19,19,92,92, +92,92,19,108,19,19,19,19,19,19,53,53,53,53,101,19,19,53,53,19, +19,19,12,92,92,12,12,12,71,71,218,99,218,218,71,71,12,12,218,99, +58,58,58,99,99,99,58,99,99,99,11,58,11,58,58,99,58,99,99,99, +58,99,99,99,99,58,99,99,99,99,99,218,99,99,11,99,99,99,11,99, +99,218,218,218,99,218,99,99,218,218,99,99,218,99,218,218,99,99,218,11, +218,71,99,218,99,218,218,99,71,8,218,99,218,218,99,99,99,99,99,99, +218,218,99,99,218,99,218,99,218,71,99,99,99,218,99,99,218,99,99,99, +218,218,99,99,99,99,58,99,58,30,99,99,99,99,99,99,58,99,99,58, +99,58,99,58,99,99,58,58,58,99,58,58,99,218,218,71,99,99,71,71, +71,123,12,118,71,71,12,71,123,12,12,19,19,19,53,19,19,53,53,19, +19,53,101,63,20,63,20,63,53,53,53,101,53,53,53,19,53,53,53,19, +92,12,12,12,71,12,12,12,12,12,92,71,218,218,71,218,71,71,71,71, +99,218,58,58,58,99,99,99,99,58,58,58,99,58,99,58,58,99,58,58, +99,99,58,99,99,99,99,58,99,58,30,99,99,99,218,99,58,99,99,58, +11,99,99,218,99,218,218,99,99,218,71,99,218,99,99,218,99,99,218,99, +11,218,99,218,99,11,218,99,99,8,71,71,71,99,218,71,218,99,71,218, +11,99,218,218,99,218,99,218,99,99,99,99,218,99,99,99,99,99,218,99, +99,99,99,99,99,11,99,99,99,99,99,99,58,99,58,99,58,99,58,58, +99,11,58,58,99,58,99,99,58,58,218,99,123,71,71,71,123,71,71,218, +99,99,218,71,12,12,12,12,92,19,19,53,19,53,53,53,53,19,53,53, +53,53,19,53,19,53,53,53,53,53,63,63,101,63,63,20,53,19,53,53, +53,19,92,92,12,12,12,71,71,71,71,12,12,71,71,12,12,12,12,12, +12,218,218,99,58,58,99,58,99,58,99,58,99,99,58,218,58,99,58,99, +99,99,99,11,58,99,99,58,99,99,58,58,99,99,99,99,99,99,99,99, +99,58,218,99,218,99,99,99,218,99,99,218,99,11,218,99,218,218,99,99, +218,99,218,11,99,71,99,218,71,8,99,99,218,99,99,99,218,99,99,218, +218,99,11,99,99,218,99,218,99,218,218,99,58,99,99,99,58,11,99,99, +58,99,99,58,58,58,58,99,99,99,99,218,58,99,99,99,58,58,99,99, +58,58,99,58,99,58,99,99,58,58,99,218,71,71,218,218,218,58,58,58, +218,99,71,123,12,12,12,19,19,108,108,108,92,92,92,12,71,12,12,92, +19,53,53,53,101,53,53,19,53,101,53,20,53,79,79,0,34,79,20,63, +53,53,53,19,19,19,12,12,12,71,71,71,71,71,71,123,71,12,12,12, +12,12,71,71,218,58,99,58,218,58,218,99,58,99,58,99,99,218,58,58, +58,99,58,58,99,99,58,99,58,99,99,218,58,58,99,99,99,99,99,99, +58,11,99,99,218,218,218,99,218,99,99,218,218,99,218,99,99,218,218,99, +218,99,71,218,99,218,99,99,99,8,218,218,99,218,99,218,99,218,218,99, +11,218,218,218,218,99,71,99,218,99,99,99,218,58,99,99,99,99,218,30, +58,99,58,99,58,11,58,99,58,99,58,58,58,99,58,58,99,99,58,58, +58,99,58,99,58,58,99,58,218,99,99,218,58,99,58,58,58,58,58,218, +71,12,12,71,71,12,12,12,12,71,71,118,71,71,118,71,71,12,223,19, +19,53,53,53,53,63,229,20,79,20,34,0,20,101,101,63,20,101,101,53, +108,53,53,53,53,53,101,19,92,12,12,12,12,71,71,218,218,218,71,71, +118,12,71,71,218,218,58,58,58,58,58,58,218,58,58,58,99,99,218,99, +58,58,99,99,58,99,58,99,58,58,58,99,99,99,58,99,99,99,58,58, +99,58,58,99,99,99,99,99,99,99,218,99,99,218,99,218,218,99,99,218, +99,58,99,99,218,99,218,218,218,8,99,218,99,218,99,218,11,99,218,99, +99,99,99,99,218,99,58,99,99,99,58,99,218,99,99,99,99,99,58,99, +58,218,99,99,99,58,218,58,58,58,99,99,58,99,218,58,99,99,58,218, +58,99,58,99,99,99,58,99,58,58,58,58,99,58,58,58,58,218,218,12, +71,71,71,12,12,71,71,12,71,12,71,71,71,71,12,92,19,53,53,53, +101,63,79,34,251,0,0,63,20,53,19,53,53,53,53,19,19,53,19,19, +19,108,19,19,19,19,19,19,53,53,108,12,12,12,71,71,218,58,58,58, +99,218,71,71,71,12,218,99,99,58,58,58,58,218,58,58,58,58,58,99, +99,58,58,99,58,218,58,99,99,99,99,58,99,128,99,58,99,99,11,99, +99,58,11,58,99,99,99,218,58,11,99,58,99,218,99,99,218,99,99,99, +218,71,99,99,218,99,11,99,218,8,218,99,218,99,218,99,99,218,99,218, +58,218,58,218,99,99,218,99,58,99,99,99,99,78,11,58,99,58,99,99, +99,58,58,99,58,11,58,58,218,99,99,58,58,58,99,58,58,58,99,99, +58,58,58,58,58,58,99,58,99,99,99,58,58,58,58,58,218,71,118,12, +71,71,71,71,71,12,71,71,71,71,71,12,92,19,19,53,53,63,20,251, +0,79,79,0,79,34,34,79,0,63,229,20,63,101,53,101,19,53,19,92, +12,71,12,92,12,12,12,12,12,92,19,92,92,71,12,118,71,218,99,58, +58,58,58,58,218,123,71,218,58,58,58,99,58,58,58,218,58,218,58,58, +218,58,99,58,58,58,99,99,58,99,58,99,218,99,99,99,58,58,58,11, +58,58,99,58,99,99,30,99,99,99,58,218,218,30,99,218,99,99,99,218, +99,99,218,218,99,99,218,71,99,8,99,99,71,99,218,218,99,218,99,218, +99,218,99,58,11,58,99,99,11,58,99,58,99,99,99,99,58,58,99,99, +58,99,99,99,99,58,99,78,58,58,99,99,218,78,58,218,58,99,212,58, +99,58,58,58,218,58,58,58,58,58,58,58,58,58,218,71,12,12,71,71, +123,218,218,58,99,71,123,71,71,12,19,19,19,53,53,19,19,53,63,53, +101,101,101,63,101,101,20,20,79,0,0,79,79,34,251,79,79,251,101,53, +19,92,12,71,71,71,218,12,218,12,71,71,71,71,71,12,71,71,123,71, +58,58,58,58,58,58,58,99,99,58,58,58,99,58,58,58,99,58,99,58, +99,58,58,99,58,58,58,58,99,58,99,58,99,58,99,58,99,99,58,58, +99,99,99,58,99,58,58,58,99,99,99,30,128,58,99,99,99,99,99,58, +218,99,99,218,218,99,99,218,71,8,71,218,99,99,99,99,218,99,99,99, +99,30,58,11,58,58,99,58,58,58,58,30,58,58,99,99,99,58,99,58, +99,58,99,58,58,58,218,99,58,99,58,58,58,218,99,58,58,58,58,58, +58,99,99,99,58,99,99,58,58,212,99,58,58,218,71,71,218,218,99,58, +58,58,58,218,123,71,71,12,108,19,19,108,19,19,223,92,19,92,12,12, +19,19,19,19,53,53,63,63,229,0,34,34,79,0,79,0,75,34,0,34, +79,20,53,19,92,12,71,71,71,218,71,123,71,123,71,71,71,71,71,71, +71,218,58,58,58,58,58,58,58,99,58,58,58,58,58,58,58,58,99,58, +58,99,99,58,99,58,58,58,58,58,58,99,58,99,58,99,58,58,99,99, +58,58,99,99,58,58,218,58,58,99,58,99,11,58,58,99,58,218,99,99, +99,99,218,99,99,218,99,99,99,8,99,218,99,218,99,99,99,99,58,58, +11,58,99,58,58,30,58,11,58,11,58,99,99,58,99,58,58,58,99,58, +58,99,58,99,99,58,58,99,58,99,58,99,58,99,212,58,58,58,58,58, +58,58,58,58,58,58,58,58,58,58,212,58,218,218,218,99,58,58,58,58, +58,99,71,71,71,12,71,71,12,12,12,71,71,123,71,218,71,71,71,92, +19,108,63,79,229,126,0,79,0,0,34,34,34,126,34,251,79,0,126,34, +79,0,79,20,63,19,19,12,71,71,71,218,71,99,71,71,71,71,71,71, +71,71,218,58,58,58,212,58,58,58,58,58,58,58,58,58,58,58,58,58, +58,58,99,58,58,99,58,58,99,99,128,218,58,58,99,58,99,58,58,99, +218,58,58,218,99,99,99,99,99,99,58,99,99,58,30,218,99,99,99,99, +99,99,218,99,99,99,218,218,99,8,218,99,99,99,58,99,99,99,99,99, +58,58,218,99,99,99,58,99,58,58,58,99,58,99,58,99,99,99,58,58, +99,99,58,58,58,58,58,58,99,99,58,99,99,58,58,58,58,99,58,58, +99,58,99,58,78,212,99,212,99,58,58,99,58,58,78,78,246,99,212,58, +99,71,123,71,71,71,71,71,218,218,71,123,218,218,218,118,12,19,63,63, +0,0,0,34,34,0,34,79,79,79,0,34,79,79,20,101,53,101,53,19, +53,53,101,101,53,53,19,19,19,92,218,218,218,218,218,212,78,58,218,218, +71,71,71,11,58,246,58,78,246,58,58,58,99,99,58,58,99,58,212,58, +99,58,99,58,58,99,58,58,58,58,58,212,218,58,58,99,58,58,99,58, +99,99,99,58,58,99,99,99,58,99,58,58,99,99,99,58,58,99,99,99, +99,99,99,11,58,99,99,99,218,8,99,99,218,99,99,218,99,218,58,58, +11,78,58,99,58,99,58,99,58,11,58,99,58,99,58,58,58,99,99,58, +99,99,99,58,58,58,58,58,58,58,58,58,58,58,58,212,99,58,212,99, +58,58,78,58,78,58,58,58,58,58,58,58,58,58,246,58,246,58,58,71, +218,71,71,71,218,71,71,71,71,218,218,71,71,92,92,53,63,126,79,0, +0,79,0,79,34,79,0,126,79,79,79,79,79,229,229,101,53,108,92,71, +71,71,71,71,71,12,12,19,108,19,92,71,71,71,71,218,212,246,78,58, +58,218,218,71,71,58,58,212,212,78,212,78,78,58,58,58,58,58,99,58, +78,58,58,99,58,58,58,58,58,58,58,58,99,58,99,58,58,212,99,58, +58,99,58,99,58,99,99,58,58,99,99,58,58,58,58,11,78,99,99,99, +99,58,99,58,71,99,99,99,99,8,99,99,99,218,99,58,99,30,58,11, +58,11,58,58,99,58,58,99,58,99,58,99,99,58,99,58,99,58,58,99, +58,58,58,58,58,78,58,99,58,99,58,58,58,58,99,58,212,99,58,58, +58,78,78,78,58,58,58,58,58,212,58,78,58,78,78,78,58,99,218,218, +71,218,218,71,58,99,58,99,71,71,71,12,19,20,79,251,0,251,79,251, +79,63,126,79,79,79,79,229,79,79,79,126,126,79,79,63,20,53,53,92, +12,12,218,71,71,218,218,218,71,218,71,71,71,218,71,218,218,58,246,246, +78,212,78,58,218,218,58,58,58,246,78,212,78,212,58,58,58,58,58,212, +78,78,78,58,58,99,58,58,58,58,58,58,58,58,58,218,99,99,58,99, +58,58,218,99,58,58,99,58,99,99,58,99,99,99,58,99,99,58,58,58, +218,99,11,58,99,99,99,218,99,8,99,30,218,58,11,99,99,58,99,58, +99,58,58,99,218,99,218,58,99,99,58,58,58,58,99,58,99,99,58,99, +58,58,58,78,78,58,58,58,58,58,99,246,78,78,58,58,58,58,58,78, +78,212,78,246,246,58,58,58,212,58,212,246,78,246,58,212,218,218,218,218, +218,58,246,58,246,58,218,218,123,12,19,19,53,53,101,53,63,101,63,63, +63,63,63,63,63,101,63,53,63,53,53,53,53,108,19,19,19,19,108,19, +92,92,12,12,71,71,218,99,99,218,218,218,218,218,71,71,71,218,218,246, +78,78,246,78,78,78,58,58,58,78,78,78,78,246,58,58,58,58,58,78, +212,78,78,58,58,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58, +58,99,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,99,99,99, +58,99,58,99,99,58,99,99,99,8,99,99,30,58,58,58,58,58,58,99, +58,11,99,58,99,58,58,58,58,58,58,99,58,58,58,58,58,58,99,58, +99,58,78,58,58,58,99,58,58,78,246,78,58,78,58,58,58,58,78,212, +246,78,246,78,78,99,212,246,78,246,58,246,246,78,246,218,218,218,58,58, +246,78,78,246,58,218,218,71,12,12,108,92,108,19,108,53,63,63,63,53, +53,53,19,223,92,92,49,118,118,118,118,118,118,118,71,118,118,12,12,12, +92,71,71,123,218,99,11,58,58,58,58,78,58,99,99,123,71,218,218,218, +246,246,78,212,78,212,78,246,78,78,58,78,246,78,246,78,58,58,58,58, +99,78,246,78,246,99,58,58,58,58,58,78,78,78,78,99,58,99,58,99, +78,58,58,99,58,218,218,58,58,99,58,58,58,218,99,58,58,58,58,11, +58,99,99,99,58,99,99,218,58,8,99,99,58,99,58,11,58,11,58,58, +99,58,99,58,99,58,99,58,58,218,58,58,58,99,58,99,58,58,58,99, +78,58,58,58,99,58,58,78,78,58,246,78,246,99,58,58,58,212,78,78, +246,58,246,58,78,78,78,58,246,78,78,58,246,58,58,58,212,58,246,78, +212,246,58,58,71,71,71,71,12,92,92,92,108,53,53,53,19,19,223,223, +49,223,92,49,49,223,92,49,118,118,118,71,118,112,118,11,11,112,71,112, +71,71,11,11,11,99,99,58,58,78,78,78,246,78,246,58,99,71,218,71, +218,78,78,246,78,246,58,246,78,246,212,58,246,58,246,78,212,78,246,58, +58,58,78,246,246,78,78,99,58,58,58,212,78,58,78,58,58,58,58,58, +78,58,78,99,58,58,99,58,58,58,58,99,58,58,99,218,58,99,58,58, +58,58,99,58,99,99,58,99,99,8,99,99,58,58,58,99,58,99,99,58, +99,58,58,58,58,58,58,218,99,58,99,58,58,58,58,58,99,58,58,78, +58,78,78,78,78,58,78,58,78,78,78,212,78,58,78,58,78,212,78,246, +78,246,78,78,212,246,246,78,246,212,246,246,78,246,58,246,78,246,58,246, +246,58,99,218,218,218,71,12,92,19,19,19,19,19,223,223,49,223,49,118, +49,112,30,30,237,103,208,208,245,208,245,208,245,245,245,103,208,103,22,237, +30,30,11,11,11,11,71,71,11,99,58,78,78,246,58,246,246,246,58,99, +99,218,212,78,246,78,246,78,246,58,78,58,246,78,58,246,78,212,78,246, +58,212,58,78,78,212,78,78,58,58,99,78,78,78,78,78,58,58,99,58, +58,78,78,78,58,58,99,58,99,58,58,99,58,218,58,58,99,58,58,218, +99,58,99,99,58,99,30,99,99,8,58,99,58,99,58,58,58,99,58,99, +58,218,218,58,99,58,99,58,58,58,78,99,78,58,99,58,58,78,58,78, +78,58,78,78,58,78,78,246,246,212,78,78,78,58,78,246,78,246,58,246, +212,78,58,78,78,58,246,78,78,78,58,246,78,246,78,58,246,78,78,78, +58,218,99,11,71,12,92,92,92,223,223,223,223,223,49,118,112,22,237,208, +72,245,55,243,245,72,72,72,65,208,236,208,208,245,72,55,243,55,55,243, +245,245,245,103,237,237,30,11,11,112,71,11,99,58,78,246,246,246,246,78, +58,218,58,58,246,78,212,78,246,78,246,78,212,78,78,212,78,246,78,78, +58,78,78,78,78,78,246,246,246,58,58,78,58,246,78,212,78,78,99,58, +58,78,58,58,58,58,58,99,58,58,58,58,78,58,58,99,99,58,58,58, +99,218,58,99,99,99,58,99,58,8,99,99,99,58,11,58,58,58,99,58, +58,58,58,58,58,58,58,99,99,78,78,58,58,78,58,58,99,78,78,78, +78,78,78,78,78,78,212,246,246,246,246,78,78,246,246,58,246,78,246,78, +78,78,212,246,246,246,78,78,212,246,246,246,58,246,246,78,246,246,78,58, +218,99,71,12,12,92,92,82,223,49,223,118,112,22,208,72,72,208,65,22, +22,112,11,112,112,112,112,112,118,118,118,112,112,112,30,244,244,30,237,65, +236,72,55,55,243,243,208,208,237,237,11,71,11,11,71,11,99,58,246,246, +246,78,78,246,58,246,78,246,58,246,58,246,58,246,246,78,78,78,212,78, +212,246,212,78,246,246,58,78,78,246,99,246,246,58,246,58,78,78,78,58, +78,78,78,78,78,78,58,58,58,99,58,58,78,99,58,58,58,218,99,99, +58,58,99,58,99,58,58,99,99,8,58,58,99,58,99,218,99,58,99,99, +99,58,99,58,99,58,58,58,58,78,58,58,58,58,58,58,58,78,212,78, +78,58,246,78,58,246,246,246,246,246,246,246,78,58,246,78,246,58,246,58, +246,78,78,78,58,246,212,78,78,78,58,246,78,212,246,58,78,212,58,99, +218,71,12,92,19,223,49,49,118,62,30,22,208,208,103,30,244,112,244,118, +112,23,49,49,49,49,49,49,49,49,82,82,223,82,49,118,23,118,118,112, +11,30,237,22,65,245,55,243,245,245,103,237,237,11,71,11,71,71,218,58, +246,246,78,246,78,212,78,246,246,78,246,246,78,78,212,78,212,78,246,78, +78,58,246,78,58,246,78,212,78,246,78,78,78,78,78,212,246,246,246,78, +58,78,78,78,58,78,78,58,58,58,58,58,99,58,58,58,58,58,99,58, +58,58,58,58,58,99,99,58,58,8,99,99,58,58,58,99,99,99,99,58, +58,99,78,58,78,99,58,58,99,78,78,78,58,78,58,58,78,246,78,212, +78,78,58,78,246,246,246,246,246,246,58,78,78,246,58,246,78,246,78,246, +78,212,78,212,212,246,78,78,246,246,78,212,58,99,212,246,246,58,99,218, +118,12,92,223,223,49,49,11,237,208,208,103,244,23,118,112,118,112,49,49, +19,82,82,82,223,49,66,49,49,82,223,223,101,19,223,82,223,82,223,82, +82,49,23,112,11,244,30,65,72,55,55,245,208,22,237,112,11,118,71,218, +218,58,58,78,246,78,212,78,78,212,99,78,212,246,78,246,78,246,78,212, +246,246,78,246,246,78,246,78,246,58,246,78,58,78,246,246,246,246,212,246, +78,78,78,78,78,58,78,78,99,58,78,78,78,99,58,58,99,58,99,99, +58,99,99,99,99,58,99,58,99,8,99,99,99,58,58,99,58,58,99,58, +58,58,78,78,58,58,58,58,58,58,78,78,78,78,78,58,246,246,246,246, +246,78,78,212,246,246,246,246,246,246,78,212,78,246,78,212,78,246,58,246, +78,246,78,58,58,212,246,58,78,246,246,58,58,58,58,246,58,218,71,12, +223,223,49,49,49,30,65,72,72,30,112,118,118,112,118,49,223,223,223,49, +244,244,244,244,23,23,23,23,70,66,49,70,49,70,70,118,23,23,23,23, +49,223,19,82,223,223,23,11,244,237,208,72,55,55,208,103,30,11,11,49, +71,71,99,58,246,78,246,246,58,246,58,58,246,212,78,246,58,246,78,58, +58,212,78,78,212,78,212,78,78,78,212,78,78,78,246,212,246,246,246,212, +246,58,78,78,78,78,58,78,78,99,58,58,78,58,58,58,99,58,58,58, +58,58,58,58,99,58,99,58,99,8,99,58,58,218,58,58,58,99,58,58, +58,99,58,58,99,58,78,78,78,78,78,78,78,58,246,246,246,212,246,246, +212,246,78,246,246,246,246,246,212,246,246,78,246,58,212,246,78,78,78,246, +58,246,212,99,58,246,78,246,246,58,58,58,58,78,246,58,99,118,12,92, +223,223,223,11,22,72,208,244,49,112,112,118,49,82,223,49,244,244,242,62, +23,62,23,23,244,244,244,244,244,244,62,30,244,244,244,244,23,112,210,23, +62,244,244,23,223,82,53,82,49,112,30,30,65,72,55,245,208,237,30,112, +71,49,118,71,99,78,78,78,246,246,58,99,58,246,212,78,246,58,246,212, +99,58,212,246,78,246,78,246,212,246,78,246,246,212,246,246,246,212,246,246, +246,246,78,78,246,246,78,78,78,78,58,58,78,58,58,58,58,58,99,99, +99,78,99,58,99,99,58,99,58,8,58,99,58,99,99,58,58,99,58,58, +58,58,58,58,78,58,78,78,58,78,58,246,78,78,78,212,246,246,212,246, +246,246,246,246,246,246,246,246,246,246,246,58,246,58,99,212,246,212,78,78, +78,99,58,58,78,246,58,78,246,58,58,58,58,212,58,218,71,12,49,49, +49,112,22,72,65,112,49,112,112,112,223,19,118,62,244,62,62,23,23,244, +244,244,244,112,23,49,49,223,19,223,82,223,223,49,223,23,118,112,244,30, +62,62,62,62,23,62,23,223,82,8,82,71,30,244,22,72,55,245,103,237, +11,71,12,12,71,99,78,78,78,58,212,58,58,58,58,212,78,58,246,78, +58,58,58,212,78,246,58,78,78,212,212,246,246,246,212,246,246,246,246,246, +246,246,58,78,78,58,246,212,78,78,58,78,58,78,78,78,58,78,58,58, +218,58,58,99,58,99,99,99,58,8,218,99,58,58,58,99,58,58,99,78, +78,58,99,58,58,78,58,78,246,78,78,58,78,212,246,246,246,246,246,246, +246,246,246,212,246,212,246,246,246,212,78,246,58,58,58,246,78,78,212,246, +58,58,58,58,212,78,246,212,58,58,58,58,58,58,71,12,49,223,223,49, +30,208,72,30,49,49,112,49,223,223,23,22,244,62,23,23,62,22,112,118, +49,49,223,118,23,244,30,242,22,242,242,62,242,244,244,112,23,49,49,223, +23,112,30,244,62,112,210,23,23,49,82,8,223,244,237,30,208,55,243,245, +22,30,71,118,12,71,99,78,78,246,212,58,58,58,58,246,246,246,78,246, +58,58,58,78,212,78,246,246,246,58,58,212,246,246,246,246,246,246,246,246, +246,78,246,58,246,246,246,78,212,78,78,78,58,78,58,78,58,58,99,58, +58,58,99,58,58,58,58,58,58,8,58,99,58,58,58,58,99,58,78,78, +58,58,78,58,58,78,78,58,78,78,78,78,78,246,212,246,246,246,246,246, +246,246,246,246,246,246,212,246,246,246,78,58,58,58,58,246,78,78,246,99, +212,58,212,58,212,78,78,58,58,218,58,212,58,99,71,49,223,49,49,30, +55,72,112,49,244,11,49,82,112,242,242,62,23,62,244,112,118,223,82,118, +30,236,29,225,231,33,248,42,42,42,219,2,42,219,110,107,231,29,65,244, +112,223,223,49,112,30,30,23,23,23,23,49,82,101,49,30,30,242,72,243, +208,103,30,71,118,12,71,99,78,78,78,58,58,58,58,58,78,58,246,78, +58,58,99,58,246,58,246,58,246,58,99,58,212,246,246,212,246,246,246,246, +246,246,246,246,212,246,246,246,246,78,58,78,78,78,78,78,58,78,78,78, +58,78,99,99,99,58,58,99,99,8,99,58,99,99,58,58,58,58,78,78, +78,78,58,58,58,78,78,78,78,78,246,246,58,246,246,246,246,246,246,246, +246,246,212,246,99,58,246,246,246,246,212,58,58,58,99,212,78,212,212,58, +78,58,58,58,246,246,78,58,71,218,58,58,11,71,118,223,49,23,103,243, +22,49,118,30,118,82,49,30,242,62,70,62,244,118,223,82,112,65,93,205, +217,42,80,147,98,4,26,8,8,8,8,121,8,8,26,4,98,210,111,219, +29,29,65,112,223,82,23,30,244,62,62,62,62,49,82,82,112,30,30,65, +243,245,103,30,71,118,12,71,218,212,246,58,58,212,212,58,58,246,212,78, +58,58,212,58,58,246,78,246,58,58,58,58,246,212,246,246,246,246,246,246, +246,212,246,246,246,246,212,246,246,212,78,246,212,78,58,78,78,78,58,78, +78,78,58,58,58,58,99,58,58,8,58,58,58,58,58,58,58,58,237,78, +58,78,78,58,78,78,212,78,246,78,78,246,246,246,246,246,246,246,246,246, +246,246,246,58,58,58,246,246,246,246,58,58,99,58,58,246,246,78,99,78, +246,78,58,58,58,58,58,218,12,99,58,99,71,92,49,223,118,22,41,65, +223,23,30,118,19,23,22,242,23,23,30,112,223,19,112,29,222,232,87,80, +98,26,121,8,20,253,20,20,20,20,101,20,20,20,253,253,20,8,121,26, +4,14,2,231,29,30,49,82,112,30,244,62,23,210,118,82,101,223,30,244, +65,55,243,103,237,71,118,71,71,99,58,58,58,58,218,58,58,58,246,212, +58,58,212,78,99,58,246,246,78,58,58,58,58,246,246,246,246,246,246,246, +246,246,246,212,246,246,246,246,246,246,246,78,78,78,78,78,58,78,58,78, +78,58,58,58,78,99,58,58,99,8,99,58,58,99,99,58,58,58,58,237, +78,78,58,78,78,246,78,246,78,246,78,246,246,246,246,246,246,246,246,246, +246,246,58,58,58,58,246,246,246,58,99,78,246,212,99,246,212,58,78,246, +58,246,58,58,58,212,218,12,118,58,58,71,12,49,19,49,237,41,65,49, +118,112,223,82,244,236,62,66,62,30,82,8,112,93,68,6,137,88,162,253, +253,20,253,19,223,23,244,244,54,242,54,242,244,62,112,49,223,20,20,20, +20,253,26,98,14,33,29,244,82,101,112,22,62,62,62,23,49,53,82,30, +112,22,243,243,208,11,71,118,12,218,99,58,58,58,12,71,58,58,58,58, +99,58,58,246,246,58,58,246,246,58,58,58,99,58,246,246,246,246,78,58, +246,212,246,246,246,246,246,212,246,246,78,78,78,78,58,78,78,78,78,58, +78,58,78,237,78,58,99,99,78,8,58,99,58,58,78,78,78,78,78,78, +58,78,78,58,78,246,78,212,246,246,246,246,246,246,246,246,246,103,246,246, +246,246,58,58,58,99,212,246,246,58,212,78,246,58,58,58,58,58,212,78, +78,78,58,58,58,58,123,49,218,99,11,118,223,223,82,237,41,208,23,118, +237,223,82,244,18,210,23,23,112,19,223,103,64,6,148,147,26,253,20,8, +66,23,54,111,219,219,137,24,76,24,163,25,137,42,204,42,151,109,244,223, +20,20,20,20,8,4,111,231,236,23,82,12,237,62,62,23,62,223,253,223, +237,244,22,41,245,103,11,112,118,71,218,58,58,99,92,92,128,58,58,58, +58,58,58,212,78,58,58,212,58,58,58,78,78,58,212,246,246,246,58,58, +212,246,212,246,246,246,246,246,246,212,246,78,246,246,78,78,78,78,78,58, +78,58,58,78,99,58,58,58,99,8,99,58,58,58,58,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,246,246,246,246,103,246,246,246,246,246, +246,78,58,58,58,58,58,212,58,58,78,212,78,78,99,58,58,212,78,246, +212,212,58,58,58,218,92,12,218,99,71,12,223,82,118,243,55,23,223,30, +223,19,244,93,54,49,23,112,82,82,245,153,138,234,162,8,253,101,49,30, +111,125,24,201,142,16,159,142,43,95,197,156,193,193,51,141,224,25,248,231, +65,118,20,20,20,20,121,210,231,55,244,82,49,30,244,62,62,244,223,20, +118,237,112,208,243,245,237,71,118,49,71,58,58,218,92,92,12,58,58,99, +58,58,212,78,212,212,58,58,58,58,58,212,78,58,58,246,246,246,99,58, +99,246,246,246,246,246,246,246,246,246,212,246,58,78,78,78,78,78,58,78, +78,58,78,78,58,78,58,99,58,8,99,99,58,58,58,78,78,58,78,58, +78,78,78,246,78,78,78,246,246,246,246,246,246,246,246,103,246,246,246,246, +246,58,58,58,58,58,58,58,58,58,78,78,246,78,58,58,58,212,78,58, +58,78,58,58,58,12,92,12,99,218,118,19,82,223,22,116,237,49,112,112, +101,112,93,109,70,112,118,82,223,55,136,185,44,26,253,253,82,62,107,163, +117,16,114,159,161,106,98,46,26,26,26,26,26,4,32,81,44,142,43,234, +10,56,236,23,20,20,20,8,4,219,225,237,19,82,11,244,62,54,62,223, +20,112,30,244,72,239,103,237,71,12,12,71,58,71,92,92,12,128,58,58, +58,58,246,78,246,58,58,58,99,58,58,246,78,78,58,246,246,58,58,58, +58,212,246,212,246,246,246,246,246,246,78,78,246,58,246,58,78,246,78,58, +78,58,78,78,58,58,58,58,58,8,58,58,58,58,78,237,58,78,78,78, +78,78,78,58,246,246,212,246,246,246,246,246,246,246,246,246,246,246,246,246, +78,58,58,58,58,58,99,58,58,246,246,246,58,246,58,58,58,78,246,218, +11,58,58,58,58,12,92,71,218,11,49,223,101,23,239,93,23,118,244,223, +223,65,29,70,70,112,82,82,72,233,135,152,121,253,20,49,242,179,176,39, +198,156,32,47,26,26,69,113,26,47,9,47,162,113,26,121,113,252,152,159, +43,234,217,238,30,253,20,251,8,4,107,17,30,82,223,22,62,62,54,244, +82,19,237,112,244,41,245,30,112,71,92,71,99,71,12,92,92,71,78,58, +58,246,246,58,78,212,58,58,58,58,58,78,246,58,99,58,212,58,58,58, +58,78,246,246,246,246,246,246,246,246,246,246,78,78,78,78,246,58,78,78, +58,58,58,99,58,99,58,58,58,8,58,99,99,58,58,78,78,58,78,58, +78,58,78,78,78,78,78,246,246,246,246,246,246,246,246,246,78,246,246,246, +58,58,78,58,78,58,58,99,58,78,58,246,246,58,58,58,212,58,58,12, +71,58,58,58,99,92,92,71,218,71,223,8,19,22,150,30,49,11,23,101, +30,93,54,49,112,49,20,30,254,181,95,26,253,253,49,65,163,166,206,202, +52,26,8,121,4,161,43,114,139,131,57,200,195,188,192,88,26,26,121,98, +197,67,234,145,230,22,82,20,20,8,98,107,100,112,253,112,103,244,54,62, +49,20,49,237,118,208,243,103,11,11,12,92,92,92,92,12,49,12,58,58, +78,58,246,78,246,78,212,99,58,58,78,246,58,78,58,58,58,99,58,58, +58,99,246,246,246,246,246,246,246,246,246,246,246,78,246,78,246,78,58,78, +78,58,78,78,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,78,78,78,78,246,246,246,246,246,246,246,246,246,246,246,58,212,58,246, +99,212,58,99,78,99,58,58,78,246,58,58,58,78,78,58,78,78,99,71, +12,71,58,58,12,12,12,71,11,12,223,101,49,243,100,118,223,112,82,19, +93,225,113,23,244,101,223,41,129,199,52,253,20,223,242,124,39,57,117,122, +121,121,47,44,195,35,94,196,165,189,189,189,27,84,200,139,67,186,26,121, +240,106,159,234,175,68,242,20,20,20,8,210,238,93,223,19,237,244,23,54, +62,19,101,244,112,30,243,208,237,11,12,92,49,223,12,12,92,12,58,78, +246,78,58,246,78,212,78,78,58,58,212,58,58,58,78,99,58,58,99,58, +58,58,246,246,246,246,246,246,246,246,246,246,78,246,58,78,58,78,78,78, +78,78,237,78,58,58,58,58,58,8,99,58,99,58,78,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,103,246,246,246,246,218,58,58,78,78, +58,99,71,12,58,78,58,78,58,78,123,12,78,78,58,212,78,78,123,92, +12,12,99,99,12,92,92,71,11,118,82,101,112,116,236,82,112,112,82,118, +100,110,66,23,49,101,244,215,73,43,69,253,101,23,219,59,97,202,52,8, +8,4,120,97,187,139,27,143,46,113,26,26,46,88,60,27,131,200,192,47, +82,66,81,159,234,170,68,118,20,251,20,26,2,64,244,101,118,22,23,62, +62,49,20,118,244,23,208,245,30,11,71,12,92,12,12,49,12,12,71,58, +246,246,78,246,78,246,58,78,58,78,212,218,12,246,78,99,58,78,78,11, +12,58,58,246,246,103,246,246,58,246,246,246,246,78,246,78,78,78,58,78, +78,58,58,58,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,212,78,246,246,78,99,58,246,246,246,246,246,246,71,12,99,58,58,99, +58,58,53,251,71,78,78,78,78,246,19,19,71,246,246,78,212,246,12,92, +12,12,12,12,92,12,12,71,218,118,19,101,244,239,65,223,244,11,53,112, +222,235,66,112,223,20,72,45,90,221,8,253,19,242,214,97,57,152,26,8, +26,188,57,187,139,186,8,8,8,8,121,121,8,8,26,4,44,131,94,67, +162,82,113,44,159,76,220,29,82,0,20,8,98,238,245,82,82,237,23,62, +54,112,20,223,237,49,22,245,237,11,71,49,12,92,12,12,12,12,71,78, +246,58,246,58,246,78,246,58,246,212,58,19,101,218,78,78,99,58,58,53, +101,71,58,246,246,246,78,71,92,58,246,246,212,246,78,58,58,78,78,58, +78,78,78,78,58,58,58,58,58,8,99,99,58,99,58,78,78,58,99,58, +78,78,58,246,78,58,71,92,218,246,246,246,103,246,12,92,92,58,58,58, +58,218,63,53,19,246,246,78,78,212,53,92,92,212,246,78,78,58,92,218, +12,12,92,92,92,12,12,71,11,118,101,101,22,116,242,223,237,11,8,30, +17,62,70,112,8,53,72,172,134,143,8,20,223,109,102,57,97,81,121,82, +252,114,35,157,165,26,253,8,8,46,182,4,26,26,8,8,113,160,190,35, +186,66,121,106,117,152,232,68,49,79,20,8,26,42,17,223,53,22,112,244, +54,244,8,82,30,118,30,245,30,11,99,12,12,92,123,12,12,12,71,78, +246,78,246,78,58,246,246,58,246,58,12,53,53,12,78,78,78,99,12,63, +63,92,78,78,246,246,78,229,229,12,246,246,246,212,78,71,71,58,78,78, +58,78,78,58,58,58,212,58,58,8,99,58,58,58,58,78,78,58,99,218, +99,58,246,78,78,58,12,92,12,78,246,246,246,218,92,92,19,71,58,58, +58,12,38,92,53,71,246,58,246,218,108,92,92,218,246,212,78,58,12,218, +12,12,12,92,12,92,12,71,71,118,82,8,103,116,242,82,244,11,82,30, +222,210,223,23,8,101,55,172,183,186,8,253,223,110,102,157,97,161,8,8, +127,67,190,140,189,26,8,8,69,127,120,5,52,26,26,8,121,9,84,187, +43,113,82,98,142,152,89,119,244,20,0,253,121,219,64,23,101,30,30,23, +54,244,82,101,30,112,112,72,237,71,30,12,12,92,118,12,12,12,71,58, +246,246,58,246,58,212,78,246,58,246,108,63,53,19,78,78,78,58,53,101, +53,108,78,246,246,246,108,79,20,53,246,246,246,78,99,92,92,12,99,78, +78,58,58,218,218,218,99,58,58,8,99,99,58,58,58,99,99,218,71,11, +99,99,78,246,212,71,218,71,92,71,246,246,246,71,92,92,19,19,58,58, +58,92,53,92,92,108,58,246,246,71,92,92,92,92,212,246,246,58,123,48, +12,12,12,92,92,12,12,12,99,118,19,101,237,116,65,49,30,112,82,244, +222,235,26,118,82,101,65,136,183,7,8,8,82,242,21,157,57,192,69,8, +26,7,191,157,190,60,9,8,26,52,84,131,60,4,121,8,26,113,67,94, +142,113,82,98,43,152,10,119,244,251,0,253,121,111,64,23,101,244,22,49, +62,62,82,101,112,23,112,103,30,71,11,12,12,118,12,12,118,12,71,78, +78,246,78,58,218,58,78,246,246,12,53,101,53,19,58,78,58,12,63,63, +53,63,218,246,246,71,79,20,63,101,218,246,246,218,12,19,108,12,99,58, +99,71,218,71,71,218,71,218,71,8,99,58,99,99,58,58,11,218,71,218, +71,71,218,58,58,99,218,99,71,92,218,78,246,92,92,12,223,53,71,58, +58,19,19,92,92,19,12,78,78,12,92,92,92,92,71,78,78,218,123,241, +48,12,12,92,49,12,118,12,71,49,223,101,11,116,65,66,112,11,82,112, +100,54,66,66,223,20,244,105,90,159,8,8,8,244,10,167,187,202,98,8, +121,47,192,169,190,35,195,188,188,195,57,84,106,47,8,8,8,122,195,140, +95,66,82,98,142,221,175,119,244,251,251,20,8,219,64,112,101,30,242,118, +23,62,19,20,11,118,112,22,11,11,99,12,12,12,12,71,12,118,71,58, +246,58,246,99,12,99,212,78,58,19,53,53,101,53,58,78,218,53,101,53, +53,63,218,246,246,63,0,101,19,53,12,78,58,12,108,92,19,108,92,71, +71,12,71,71,123,71,71,123,71,8,99,99,58,58,58,11,58,11,99,218, +99,11,99,99,218,99,218,99,71,12,12,99,99,92,92,92,12,19,53,71, +99,38,53,12,12,92,19,218,212,92,92,92,48,12,108,128,246,218,123,48, +128,123,12,12,12,12,12,118,71,71,223,8,112,41,55,49,49,244,223,49, +93,231,70,82,223,20,82,116,181,158,252,8,20,223,242,214,57,157,156,46, +8,66,26,147,44,198,86,196,86,198,44,52,4,8,8,8,46,60,97,194, +52,82,82,180,159,177,232,64,66,79,20,8,26,231,100,49,8,237,62,23, +62,244,82,82,30,223,11,237,112,11,11,12,12,71,12,12,118,12,71,218, +246,78,58,218,92,99,246,212,92,53,79,79,53,53,218,58,19,63,38,126, +53,101,92,58,19,251,63,223,19,19,92,71,12,223,92,223,223,92,19,92, +12,71,123,71,71,71,71,71,71,8,11,58,11,58,99,58,99,58,99,58, +58,218,218,218,99,218,11,99,99,71,92,92,12,49,92,71,99,12,53,53, +92,20,53,123,48,12,92,19,218,19,92,12,241,48,92,92,58,218,92,241, +128,212,71,12,118,12,12,71,71,112,223,19,82,55,116,112,49,244,223,19, +208,238,235,66,223,253,82,22,250,73,95,113,8,82,49,111,102,207,132,188, +252,69,8,121,162,4,47,52,127,4,4,26,26,8,8,46,186,86,169,95, +66,8,4,95,192,87,45,236,101,251,253,8,70,222,236,223,223,237,244,23, +54,244,82,82,237,118,11,244,71,11,99,71,118,12,12,12,12,12,12,58, +78,78,246,123,108,12,212,12,53,63,13,83,63,53,12,92,53,226,13,13, +53,53,53,226,75,63,12,71,92,19,19,92,92,92,19,12,12,12,92,12, +71,71,71,71,71,12,71,71,71,8,99,99,58,99,99,58,58,99,58,58, +11,218,71,71,11,218,99,99,58,218,12,19,92,92,92,99,78,58,92,101, +75,251,53,12,123,48,92,108,101,63,92,12,241,241,92,92,108,92,108,128, +212,246,58,12,12,12,49,12,12,118,12,49,19,237,116,22,49,118,244,82, +112,17,231,70,223,82,20,82,93,45,133,7,46,8,8,49,50,224,168,207, +142,60,127,46,8,26,8,8,8,8,8,8,121,26,47,192,166,169,7,113, +66,113,7,156,36,217,28,23,251,251,20,26,111,222,30,8,49,22,112,62, +242,112,101,112,30,49,244,11,112,11,99,71,12,12,118,12,12,12,71,246, +246,78,212,92,108,92,218,53,38,13,0,0,63,101,20,63,101,75,83,83, +63,101,229,79,126,92,58,78,12,19,92,92,19,92,12,71,71,118,71,71, +218,12,71,71,71,71,71,218,99,8,218,99,218,58,58,218,99,99,58,99, +58,58,99,99,218,99,218,99,58,58,99,92,92,92,19,58,78,78,99,108, +0,34,38,123,123,48,123,92,53,108,92,12,241,241,241,123,92,19,19,123, +241,212,246,99,12,71,12,71,12,71,118,223,82,118,245,100,112,49,30,118, +223,237,238,111,113,223,19,20,49,93,144,184,44,113,8,253,19,210,173,141, +168,57,196,142,60,52,122,182,113,113,122,3,60,159,130,86,43,122,26,223, +47,106,95,76,89,68,244,20,251,20,8,210,238,72,223,19,30,112,23,62, +244,223,20,118,112,112,244,118,11,99,99,218,71,218,71,12,12,71,58,58, +78,246,246,92,63,53,53,101,83,0,83,83,53,63,63,53,20,83,0,0, +53,53,79,0,226,78,58,78,12,108,92,19,92,71,58,58,99,71,71,123, +71,218,218,71,218,218,99,218,99,8,99,99,218,218,99,99,99,99,58,99, +99,58,99,11,71,99,99,58,58,58,58,71,92,92,19,78,78,58,78,218, +53,63,101,123,123,48,48,123,92,19,92,92,241,241,241,241,92,92,92,12, +241,212,78,78,123,118,12,12,12,12,112,92,49,223,30,247,65,49,23,112, +82,23,72,231,14,26,82,19,101,49,17,146,102,154,147,69,8,82,49,23, +249,104,158,39,206,169,86,130,202,142,202,114,39,117,76,88,4,66,66,113, +7,95,234,175,68,22,101,20,251,8,4,107,100,112,101,112,30,23,112,62, +49,101,49,244,118,112,112,118,11,78,99,99,99,58,71,12,92,99,246,78, +246,58,218,108,108,53,63,229,0,83,34,13,53,53,101,38,13,0,0,13, +53,101,63,101,99,78,58,78,71,19,19,92,71,58,99,58,11,218,218,71, +99,99,99,99,218,58,99,218,218,8,71,218,99,99,218,58,99,99,99,99, +99,58,99,58,99,218,11,58,58,99,58,58,71,92,92,58,78,78,78,78, +118,19,53,123,48,128,128,48,123,12,92,92,48,128,212,48,241,12,12,92, +241,128,246,246,246,71,12,12,12,71,71,118,49,223,49,208,116,22,49,23, +11,223,223,72,225,235,113,82,82,101,49,65,68,164,201,7,162,26,8,121, +66,223,23,216,14,36,177,152,154,152,80,255,98,66,66,223,66,4,32,152, +152,163,228,222,112,251,20,20,8,113,219,222,22,82,23,22,62,112,54,244, +101,82,112,112,23,118,112,11,11,78,58,58,246,99,71,71,99,58,246,212, +58,58,123,108,108,53,20,13,101,19,34,13,53,53,53,0,75,38,0,34, +63,53,53,71,58,78,58,78,11,92,92,71,58,58,58,58,99,218,11,99, +11,58,218,218,99,99,218,99,99,8,99,71,99,99,99,99,99,218,58,99, +218,58,99,99,99,58,58,78,58,99,58,58,58,71,12,78,78,78,78,78, +58,12,19,12,48,218,246,218,48,12,92,92,241,48,58,212,48,241,12,92, +48,241,212,58,212,212,123,118,12,71,118,118,12,223,49,118,55,239,244,223, +112,112,82,118,236,225,14,4,26,82,101,19,112,93,153,21,224,174,88,162, +26,26,121,82,66,66,66,66,66,66,26,82,66,26,113,127,32,44,51,87, +248,222,236,223,20,20,20,8,70,111,17,237,223,49,237,30,62,54,30,118, +253,49,112,118,23,118,118,11,99,58,58,58,212,99,71,218,246,78,78,58, +58,58,108,108,63,38,13,92,58,12,13,251,53,63,251,79,12,71,34,34, +251,53,19,58,78,78,78,58,58,71,71,58,99,99,58,99,58,11,58,99, +99,99,99,218,218,99,218,218,99,8,71,99,218,218,218,99,218,99,99,99, +99,71,58,99,99,99,99,58,58,99,58,58,78,58,99,78,58,78,58,78, +78,78,99,218,128,58,58,78,128,48,12,92,123,241,78,246,58,48,241,218, +12,128,212,212,58,58,212,218,71,12,71,12,118,12,223,49,11,243,55,244, +49,112,244,223,49,236,17,111,4,121,82,82,8,223,244,29,153,61,148,234, +152,32,147,52,4,4,113,26,113,26,98,98,147,255,7,193,24,163,217,238, +110,112,101,20,20,253,8,70,107,222,22,223,223,244,244,244,244,242,112,82, +223,118,23,23,49,118,71,11,58,58,58,246,246,58,99,78,58,212,212,78, +58,99,53,53,38,83,19,58,246,19,34,79,251,34,34,71,58,71,79,13, +83,63,218,58,58,99,58,78,58,99,78,58,99,99,99,58,58,99,99,58, +218,11,218,99,11,218,11,99,71,8,71,218,218,11,71,99,218,99,99,99, +99,218,11,99,58,58,58,58,11,58,99,218,58,58,78,78,78,78,58,58, +78,78,78,78,58,78,78,78,58,58,48,123,48,48,128,78,246,78,128,241, +241,241,128,212,58,58,58,58,218,12,118,71,71,112,118,223,49,11,245,55, +30,49,112,244,223,19,30,93,107,111,4,26,101,101,8,101,112,242,93,203, +6,170,21,74,51,51,104,24,234,76,24,104,76,124,232,56,225,18,30,223, +20,20,20,20,8,66,235,231,236,112,223,118,30,112,112,54,244,112,82,49, +112,23,118,118,12,11,99,99,246,58,58,58,78,58,246,246,78,78,212,78, +58,12,53,229,34,40,78,78,58,38,0,13,13,79,71,58,58,71,13,0, +38,71,58,99,58,99,58,99,78,58,58,99,99,99,71,99,58,99,218,99, +71,99,218,99,99,71,218,99,71,8,71,71,71,123,218,218,11,218,218,218, +218,99,218,218,99,99,99,99,58,99,99,99,99,99,58,78,78,58,58,99, +99,78,78,246,78,212,78,78,58,78,128,48,48,241,48,246,78,58,246,128, +128,128,128,128,212,78,212,78,58,218,71,71,12,12,118,118,49,49,112,208, +41,22,49,112,244,23,19,49,22,93,219,14,4,8,82,101,20,101,223,49, +30,65,18,29,17,203,228,230,56,96,91,225,225,236,242,112,49,82,20,20, +20,20,82,113,210,107,29,22,118,223,112,30,244,244,62,112,23,82,223,49, +118,118,49,49,118,71,99,246,58,58,212,246,246,78,212,58,246,246,78,58, +218,53,209,126,40,78,78,78,218,0,34,34,79,71,78,99,58,71,251,229, +12,58,99,99,99,58,58,58,58,99,99,99,99,218,99,58,99,99,99,218, +99,218,11,218,218,11,218,71,71,8,71,123,71,71,218,123,71,99,11,99, +218,11,99,71,218,99,58,99,99,58,218,218,99,99,58,58,58,58,99,58, +58,99,58,246,246,246,78,58,58,58,78,58,48,48,241,78,246,78,78,58, +58,241,241,241,212,58,246,78,246,58,218,71,71,71,118,118,118,49,49,112, +103,243,236,112,49,244,112,49,223,118,65,93,107,14,98,113,82,8,101,253, +101,20,101,82,82,223,118,118,49,49,49,82,82,101,101,20,20,253,253,121, +26,70,235,110,29,103,118,223,223,11,244,244,54,242,244,49,19,223,49,118, +118,49,12,71,11,99,212,246,78,78,78,78,212,246,78,58,78,212,78,58, +12,38,213,71,78,58,58,78,40,83,79,20,99,58,99,58,99,12,92,71, +78,58,99,99,99,99,99,99,99,99,218,218,99,218,218,99,218,218,11,218, +11,218,218,71,218,218,71,123,71,8,71,71,12,71,71,218,218,218,71,71, +218,218,218,218,71,218,218,99,99,218,99,99,99,99,99,99,58,99,58,99, +99,99,99,58,78,78,78,78,58,99,58,58,58,128,48,128,78,78,58,78, +212,212,212,241,128,58,246,246,58,246,58,218,218,118,71,71,118,12,118,49, +23,237,245,55,208,23,118,23,112,223,223,118,244,236,18,110,14,210,4,66, +121,8,82,20,82,101,101,251,20,20,20,101,8,20,8,8,26,26,210,235, +109,110,65,30,118,223,49,244,244,244,244,242,65,30,223,82,49,118,118,49, +92,49,118,71,11,78,246,78,58,246,212,246,78,78,246,78,246,78,212,218, +53,92,99,78,58,58,58,246,53,0,53,99,99,58,99,58,99,71,218,58, +99,58,99,218,58,99,58,78,99,99,11,99,71,99,99,218,99,99,218,71, +123,218,71,218,12,71,71,71,71,8,71,71,71,71,71,118,71,71,218,99, +71,71,71,123,71,71,218,99,99,218,218,71,11,218,99,99,58,99,58,99, +99,99,218,58,58,78,78,78,58,99,99,58,58,58,58,128,246,78,58,58, +58,58,246,128,128,58,212,246,78,78,78,58,58,218,71,71,11,118,118,49, +12,23,11,103,243,72,237,23,23,112,23,223,19,223,112,22,109,18,29,111, +111,210,210,70,4,26,26,26,26,26,26,4,4,70,98,235,2,18,29,65, +54,23,223,49,23,244,244,112,244,54,22,244,118,82,223,223,118,92,49,49, +223,71,11,99,99,78,246,58,246,78,58,212,78,78,58,58,246,78,58,218, +71,78,58,58,99,58,58,99,19,77,58,58,58,218,99,58,58,58,58,58, +218,99,11,218,58,99,218,58,218,218,71,218,218,71,99,71,218,71,71,218, +71,123,71,71,71,71,71,71,12,8,118,118,71,71,118,71,71,71,118,12, +71,123,71,71,71,71,71,71,218,99,99,99,218,218,71,218,99,99,58,99, +99,218,99,218,58,58,246,78,78,99,99,99,99,58,246,78,58,246,58,58, +58,58,58,78,78,58,58,58,246,212,99,58,58,58,218,99,71,118,11,118, +49,49,49,23,11,208,55,245,22,112,23,23,23,23,49,49,49,223,112,30, +22,236,18,18,18,29,18,18,18,18,107,236,29,236,236,22,30,23,223,223, +223,118,118,112,244,112,244,242,242,30,23,223,82,223,49,49,49,223,49,12, +71,71,99,58,246,212,58,58,58,78,78,78,58,58,58,58,78,212,246,78, +78,58,58,11,99,58,78,78,99,58,58,99,218,99,58,99,58,58,58,218, +99,71,218,99,218,58,99,218,218,71,218,123,71,99,71,218,71,71,71,12, +71,71,12,12,12,12,12,12,12,8,12,12,12,12,12,12,118,118,71,71, +71,218,71,123,71,71,71,71,123,71,218,11,218,71,218,123,218,99,218,58, +99,99,11,218,71,99,99,58,78,58,99,99,71,99,58,78,246,246,246,58, +58,218,58,99,78,78,246,78,78,246,58,58,58,212,58,58,99,71,71,118, +71,118,118,23,49,112,112,103,72,72,65,244,112,23,118,118,70,223,223,223, +223,49,118,23,118,112,112,244,112,112,23,23,23,49,49,223,223,49,23,118, +244,244,112,62,244,109,22,30,49,223,223,82,49,223,49,223,223,118,118,71, +99,99,99,78,78,246,58,58,78,78,58,58,58,99,78,246,78,78,78,78, +99,99,99,58,99,58,78,78,58,99,99,11,218,99,99,58,58,11,99,218, +218,218,71,99,218,218,11,218,123,71,218,71,71,218,71,71,123,71,118,12, +71,12,12,12,12,12,12,12,12,8,12,12,12,12,12,12,71,71,71,118, +71,118,71,71,118,12,71,71,71,71,99,218,123,71,218,71,218,71,99,99, +99,218,218,71,218,218,99,58,58,58,58,218,99,218,218,99,58,99,78,58, +58,99,99,99,58,58,78,246,246,78,78,78,58,99,58,58,99,58,99,71, +11,71,12,23,118,118,118,23,112,30,103,208,208,65,242,112,118,23,23,118, +118,118,49,112,23,112,11,112,112,112,118,49,49,49,49,112,23,23,112,244, +244,22,22,22,242,112,49,223,223,66,223,49,223,49,223,49,12,71,71,99, +99,58,212,212,246,58,78,78,58,58,99,99,99,58,78,78,78,78,58,58, +99,99,99,58,58,58,58,58,99,218,71,218,99,99,218,58,99,99,71,218, +71,71,218,99,71,99,123,71,118,118,123,71,71,123,71,71,12,12,118,12, +12,12,12,12,12,12,71,12,71,8,12,92,12,92,71,12,118,118,12,12, +118,71,71,12,71,71,118,12,12,71,118,218,71,71,71,12,71,12,218,218, +99,99,218,218,71,71,71,218,99,99,99,99,71,71,218,71,99,58,58,58, +58,58,99,11,99,99,99,58,246,78,246,78,58,99,99,99,58,58,99,99, +99,11,71,112,112,118,118,92,118,23,118,112,30,237,103,65,65,22,30,54, +244,244,23,112,244,112,244,112,244,23,244,23,112,62,244,244,30,242,22,242, +22,30,23,49,49,19,82,223,223,49,49,49,223,49,12,11,11,218,99,58, +58,78,78,78,246,78,78,99,99,58,99,58,58,78,78,78,58,99,218,218, +71,99,99,99,58,99,58,99,71,123,71,218,99,99,218,99,218,71,12,71, +71,218,71,71,218,71,71,71,71,71,12,71,71,71,118,12,12,12,71,71, +12,12,12,12,118,12,12,92,12,8,12,12,71,12,12,12,12,12,71,12, +118,12,12,12,118,12,71,12,12,71,71,71,71,123,71,12,12,71,71,218, +218,218,11,71,123,71,71,218,71,99,99,58,99,99,71,218,218,99,218,58, +58,58,58,99,218,71,99,218,58,58,58,246,212,58,58,99,99,58,99,58, +58,58,58,218,71,71,112,71,118,118,49,23,118,118,49,112,112,30,237,22, +22,22,103,22,22,22,22,22,30,242,22,22,22,103,22,22,30,112,112,23, +49,49,49,82,223,66,49,49,49,49,223,12,118,71,218,99,99,58,99,58, +78,246,78,246,58,58,99,99,218,218,99,99,99,58,58,58,99,218,71,218, +99,99,58,58,58,99,218,123,71,71,218,218,99,99,99,123,71,71,71,92, +71,71,218,218,71,12,12,12,118,71,12,118,71,71,71,12,12,12,12,12, +12,12,118,118,12,12,12,12,12,8,92,92,92,12,12,12,12,12,12,12, +92,12,12,12,71,12,118,12,12,12,12,12,71,71,71,12,12,71,118,71, +71,123,71,71,71,118,71,71,71,123,71,218,218,99,218,71,12,71,71,218, +218,58,58,99,58,71,71,218,218,218,99,58,58,58,58,58,99,99,99,218, +218,99,58,58,99,99,99,11,11,11,23,112,118,112,49,118,118,118,23,118, +49,118,23,112,112,112,112,244,112,112,118,112,118,49,49,223,49,223,223,49, +223,223,49,49,223,49,223,223,118,118,71,11,218,99,218,99,218,78,58,58, +58,58,58,218,218,218,218,218,58,99,58,58,58,58,218,99,71,71,123,71, +218,99,58,99,99,71,71,12,12,71,71,71,218,218,218,71,118,71,71,12, +123,71,12,71,71,12,12,12,118,71,12,12,12,118,118,12,71,118,12,118, +12,12,12,12,12,92,12,12,92,8,92,92,12,12,92,12,92,12,12,12, +12,12,118,12,12,12,12,12,12,12,118,12,12,71,118,71,12,12,71,118, +71,71,71,123,218,118,12,71,71,71,71,99,99,218,218,71,71,71,71,71, +99,218,99,58,99,218,218,71,71,71,218,71,58,99,58,58,99,58,218,99, +99,218,99,99,58,58,58,99,58,99,218,11,71,112,11,112,118,23,118,23, +49,118,118,92,49,92,49,92,49,92,49,223,223,49,223,49,49,49,49,82, +49,49,49,223,118,118,71,71,11,71,99,218,218,99,58,58,58,58,58,58, +58,218,218,218,71,218,218,99,99,99,99,58,218,218,71,123,71,71,218,11, +99,99,218,218,71,71,12,71,12,218,218,218,71,218,118,12,71,118,71,71, +71,71,71,71,118,71,12,12,12,71,12,12,12,12,12,12,12,49,12,12, +12,92,12,49,12,92,12,12,92,8,92,92,92,92,92,12,92,12,12,92, +12,92,12,92,12,71,71,12,12,12,12,71,12,118,71,118,71,118,12,12, +12,12,71,71,218,71,71,118,118,12,12,118,71,218,71,218,123,12,12,12, +12,71,71,99,99,99,218,71,71,71,71,123,71,218,218,58,99,99,58,218, +99,218,218,11,99,218,99,218,218,58,58,58,99,218,71,11,71,71,118,11, +112,71,112,118,112,12,118,118,118,118,118,118,118,118,118,118,223,223,49,49, +118,118,118,71,71,71,218,71,218,71,99,99,99,218,58,58,58,218,218,218, +218,71,71,218,123,71,218,99,58,218,218,99,71,118,12,71,71,71,218,218, +218,99,71,118,12,12,12,71,71,123,71,71,71,12,118,12,92,71,118,71, +12,12,71,12,12,92,12,12,12,118,12,12,12,12,12,92,12,12,12,92, +71,92,12,92,92,92,92,92,12,8,92,92,92,92,92,92,92,92,92,12, +92,12,92,12,92,92,12,118,92,12,12,92,92,12,12,12,12,12,12,12, +12,12,71,118,12,118,71,71,12,12,12,12,118,71,218,71,218,71,118,12, +12,71,12,71,218,71,99,218,123,71,71,12,71,118,71,71,99,218,218,99, +218,99,218,218,218,71,123,71,218,218,218,218,99,99,99,58,99,99,99,218, +99,71,71,71,11,71,11,11,11,11,11,11,11,11,71,118,12,118,218,218, +71,218,71,71,218,71,99,71,99,99,99,58,218,99,218,218,71,71,71,71, +71,71,123,71,11,99,99,99,218,218,71,71,12,12,12,71,123,218,71,218, +71,118,71,12,118,12,12,71,71,218,118,12,12,12,92,12,71,118,71,71, +12,71,92,12,92,12,12,12,118,12,12,92,92,12,92,12,92,92,92,92, +92,92,92,92,12,92,92,92,92,8,92,92,92,12,92,92,92,92,92,92, +92,92,92,12,92,92,12,12,92,92,92,12,92,92,12,12,118,12,12,92, +92,12,12,12,71,71,71,118,12,118,12,12,12,71,12,71,71,71,71,12, +12,12,118,12,12,118,218,71,71,71,12,71,71,71,12,12,71,71,71,11, +218,99,218,218,218,218,71,71,71,71,71,71,71,71,218,218,218,218,99,218, +218,218,99,218,99,218,218,218,218,218,218,218,218,99,218,11,218,71,71,71, +71,123,71,123,71,218,99,218,218,11,218,99,71,71,71,71,71,71,71,92, +71,71,71,123,71,218,71,71,71,118,12,12,12,12,71,71,71,218,71,71, +12,12,12,12,12,12,12,71,71,71,12,12,12,12,12,12,12,12,118,12, +12,92,92,92,12,92,12,71,12,92,92,12,92,92,92,92,92,12,92,92, +92,92,92,92,92,92,92,92,92,8,92,19,92,92,92,92,92,223,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,12,118,12,12, +12,92,92,12,92,12,12,12,71,12,49,12,92,92,12,12,71,12,12,12, +12,71,12,12,12,12,71,12,71,71,218,218,71,118,12,12,12,71,12,12, +71,123,71,71,99,71,71,123,71,123,71,123,71,71,71,71,71,71,71,71, +71,218,218,218,71,71,218,71,218,71,218,71,71,123,71,123,71,123,71,123, +218,71,218,218,218,218,71,71,71,71,71,12,12,12,12,12,12,12,71,71, +71,123,218,218,71,71,12,12,12,71,12,12,12,12,71,71,71,12,118,12, +12,92,12,12,12,12,12,12,71,12,92,12,92,12,12,118,12,12,12,92, +92,92,92,92,92,12,92,92,12,92,92,92,92,19,12,92,92,92,92,92, +12,92,92,92,92,92,92,92,92,8,19,108,19,108,12,19,92,92,92,92, +92,92,92,92,92,19,92,92,92,92,92,92,92,92,92,92,92,92,12,92, +92,92,92,92,92,92,12,12,12,12,71,12,92,92,92,92,12,92,118,12, +12,12,12,12,92,12,12,12,71,12,71,71,71,12,12,12,12,12,12,92, +112,118,71,12,71,71,71,218,71,71,71,71,71,71,12,12,12,12,12,12, +12,118,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, +71,71,71,71,71,71,71,71,118,71,12,71,12,12,12,12,12,71,71,123, +71,71,71,92,12,12,12,12,92,92,71,12,12,12,12,71,12,12,92,12, +92,92,12,118,12,12,118,12,12,92,92,92,92,12,12,12,12,92,92,92, +92,12,92,12,92,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,19,19,108,92,8,92,92,19,92,108,92,19,92,92,92, +92,108,92,92,92,12,92,92,12,92,92,92,92,92,92,92,92,92,92,12, +12,92,92,92,92,223,12,92,12,12,12,12,12,92,92,12,92,12,12,12, +12,12,12,12,49,12,92,92,92,92,12,12,71,12,12,12,12,12,12,12, +92,92,118,92,12,12,118,12,12,12,12,12,12,71,12,12,12,12,12,12, +12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, +12,12,118,118,12,118,12,12,12,12,12,12,12,12,12,12,12,12,71,12, +12,12,71,92,12,92,92,49,12,12,12,12,118,12,12,118,92,12,92,92, +12,12,12,12,123,12,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,92,92,19,92,92,108, +92,19,92,108,108,92,108,92,108,8,19,108,19,92,19,108,108,108,92,19, +92,92,19,92,108,108,92,108,108,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,12,12,12,12,12,12,92,92,92,92,92,92,12,12,12,12,12,118,12, +12,12,12,92,12,12,12,12,71,12,12,12,12,71,71,12,12,71,118,118, +12,12,12,12,12,118,12,12,12,92,12,12,12,12,12,71,12,12,118,12, +12,71,12,12,12,12,12,92,118,118,12,12,12,12,71,12,12,12,49,12, +92,12,92,92,92,12,92,12,12,12,12,12,92,92,92,92,92,92,92,92, +12,12,71,92,92,92,12,92,223,92,92,92,12,92,92,92,92,92,12,19, +92,92,92,92,92,92,108,92,108,19,92,108,108,108,92,92,19,108,92,108, +19,92,19,92,108,92,108,19,19,8,19,108,19,108,108,19,92,19,108,19, +19,108,108,19,19,92,108,92,92,108,19,12,108,108,92,19,108,108,92,19, +92,92,92,92,92,92,108,19,92,92,92,92,12,92,92,92,92,92,92,92, +92,92,92,12,12,118,123,92,12,12,92,92,92,92,92,92,12,12,12,12, +12,92,12,12,92,12,92,92,92,92,92,92,12,12,12,12,12,12,12,71, +71,12,12,12,12,12,12,12,71,12,12,12,12,12,12,92,12,12,92,12, +92,12,12,49,12,92,12,12,12,12,12,71,12,12,12,12,92,12,92,12, +92,92,92,92,92,12,12,12,12,92,12,12,92,92,92,92,92,92,12,12, +12,92,92,92,92,19,108,92,92,92,92,92,92,92,92,19,92,108,108,92, +92,92,92,19,108,92,19,108,92,108,108,92,19,92,108,19,108,92,108,92, +19,108,108,92,108,108,19,92,108,8,19,19,19,19,19,108,19,19,108,92, +19,19,108,92,19,19,108,19,108,92,108,19,92,19,92,92,92,19,92,92, +92,92,92,92,92,92,19,108,92,19,19,92,92,92,92,92,92,92,223,92, +223,92,92,92,92,92,92,92,92,92,92,92,92,223,92,92,92,12,92,12, +12,12,12,12,92,12,12,92,12,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,92,49,92,12,92,92,12,12,92,12,92,12,92,12,12,92,12, +12,12,12,12,12,12,12,92,92,92,12,92,92,92,92,92,92,92,92,92, +92,92,12,12,12,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,19,92,92,108,12,92,92,92,12,19,92,92,108,92,19,19,92, +92,92,92,92,108,19,92,19,19,92,92,108,108,92,108,92,19,19,19,108, +19,19,19,19,19,19,108,19,19,8,19,53,19,53,19,53,19,53,19,108, +19,108,19,108,108,108,19,108,19,108,19,108,108,108,108,19,108,19,108,19, +19,92,108,19,19,12,108,92,108,92,108,19,108,92,92,92,92,92,92,19, +92,19,108,92,19,92,92,92,92,92,92,92,92,92,92,92,108,108,19,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,92,92,92,12,92,19,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,108,19,92,92,223,92,92,92,92,92,92, +19,108,108,108,108,19,92,92,92,92,108,108,108,108,108,92,108,92,108,19, +92,19,108,108,19,108,108,108,108,108,19,19,19,19,19,19,108,108,53,19, +108,19,108,53,19,53,19,53,19,8,19,19,19,19,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,108,19,108,19, +19,19,19,19,108,19,108,19,108,19,108,19,19,19,19,108,19,92,92,92, +19,19,108,19,108,19,19,92,92,92,92,92,92,92,92,19,19,108,19,108, +19,92,19,92,92,92,92,92,92,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,19,19,19,92,19,19,92,19,19,108,92,92,92,19,92,92,92, +92,92,92,92,92,19,19,19,19,108,19,108,92,92,92,92,92,92,19,19, +92,19,223,19,108,19,108,92,19,19,19,19,19,19,108,19,108,19,108,19, +19,19,19,19,19,19,19,19,19,108,19,108,19,108,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,8}; diff --git a/plug-ins/Anamorphose/Anamorphose.c b/plug-ins/Anamorphose/Anamorphose.c index 9435abb700..516fada55f 100644 --- a/plug-ins/Anamorphose/Anamorphose.c +++ b/plug-ins/Anamorphose/Anamorphose.c @@ -1,8 +1,9 @@ /********************************************************************** - * Conical Anamorphose Distortion Plug-In (Version 1.02) + * Conical Anamorphose Distortion Plug-In (Version 1.03) * Daniel Cotting (cotting@mygale.org) ********************************************************************** * Official homepages: http://www.mygale.org/~cotting + * http://cotting.citeweb.net * http://village.cyberbrain.com/cotting ********************************************************************** */ @@ -641,8 +642,8 @@ anamorphose_logo_dialog() GtkWidget *xvbox; GtkWidget *xhbox; char *text; - gchar *temp,*temp2; - char *datapointer; + guchar *temp,*temp2; + guchar *datapointer; gint y,x; xdlg = logodlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(xdlg), "About"); @@ -684,7 +685,7 @@ anamorphose_logo_dialog() xpreview = gtk_preview_new (GTK_PREVIEW_COLOR); gtk_preview_size (GTK_PREVIEW (xpreview), logo_width, logo_height); temp = g_malloc((logo_width+10)*3); - datapointer=header_data; + datapointer=header_data+logo_width*logo_height-1; for (y = 0; y < logo_height; y++){ temp2=temp; for (x = 0; x< logo_width; x++) { @@ -708,7 +709,7 @@ anamorphose_logo_dialog() "cotting@mygale.org\n" "http://www.mygale.org/~cotting\n\n" "Conical Anamorphose\nPlug-In for the GIMP\n" - "Version 1.02\n"; + "Version 1.03\n"; xlabel = gtk_label_new(text); gtk_box_pack_start(GTK_BOX(xhbox), xlabel, TRUE, FALSE, 0); gtk_widget_show(xlabel); diff --git a/plug-ins/Anamorphose/INSTALL b/plug-ins/Anamorphose/INSTALL index 5e53dcbbc9..d6f045b270 100644 --- a/plug-ins/Anamorphose/INSTALL +++ b/plug-ins/Anamorphose/INSTALL @@ -29,11 +29,9 @@ ------------------------------------------- REDUCE CODE SIZE ------------------------------------------- - With this new release 1.01 the size of + With this new release 1.03 the size of the logo in the about box has been reduced - in order to make smaller binaries. In - general the compiled plug-in will be - about 25-30% of the size of version 1.00. + in order to make smaller binaries. If you find that the plug-in is still too big, you can compress the executables with the gzexe program (if it is avaiable @@ -53,7 +51,7 @@ rm PLUGIN_NAME~ This will result in a code size of about - 35 to 40 kB, which isn't too much IMHO. + 20 kB, which isn't too much IMHO. ------------------------------------------ diff --git a/plug-ins/Anamorphose/README b/plug-ins/Anamorphose/README index 5e53dcbbc9..d6f045b270 100644 --- a/plug-ins/Anamorphose/README +++ b/plug-ins/Anamorphose/README @@ -29,11 +29,9 @@ ------------------------------------------- REDUCE CODE SIZE ------------------------------------------- - With this new release 1.01 the size of + With this new release 1.03 the size of the logo in the about box has been reduced - in order to make smaller binaries. In - general the compiled plug-in will be - about 25-30% of the size of version 1.00. + in order to make smaller binaries. If you find that the plug-in is still too big, you can compress the executables with the gzexe program (if it is avaiable @@ -53,7 +51,7 @@ rm PLUGIN_NAME~ This will result in a code size of about - 35 to 40 kB, which isn't too much IMHO. + 20 kB, which isn't too much IMHO. ------------------------------------------ diff --git a/plug-ins/Anamorphose/logo.h b/plug-ins/Anamorphose/logo.h index 871a318a06..cb94ec445f 100644 --- a/plug-ins/Anamorphose/logo.h +++ b/plug-ins/Anamorphose/logo.h @@ -1,4 +1,4 @@ -/* GIMP header image file format (RGB-only): //logo.h */ +/* GIMP header image file format (Indexed): //logo.h */ static unsigned int logo_width = 200; static unsigned int logo_height = 72; @@ -6,9 +6,783 @@ static unsigned int logo_height = 72; /* Call this macro repeatedly. After each use, the pixel data can be extracted */ #define HEADER_PIXEL(data,pixel) \ - pixel[0] = (((data[0] - 33) << 2) | ((data[1] - 33) >> 4)); \ - pixel[1] = ((((data[1] - 33) & 0xF) << 4) | ((data[2] - 33) >> 2)); \ - pixel[2] = ((((data[2] - 33) & 0x3) << 6) | ((data[3] - 33))); \ - data += 4; + pixel[0] = palette_data[data[0]*3+2]; \ + pixel[1] = palette_data[data[0]*3+1]; \ + pixel[2] = palette_data[data[0]*3+0]; \ + data--; -static char *header_data = ")1!X)1!X)A!Y)Q!\\)Q!\\)A!Z)A!Z)Q!])A!Z)A!Z)1!X)Q!\\*!!^)Q!])Q!]*1\"!*1\"!*1\"\"*1\"!*1\"!*1\"!*1\"!*Q\"%*!!_*!!_*!!_*1\"\"*!!^*A\"$+!\"(*!!_*Q\"%*1\"\"*A\"$*Q\"%*A\"#*A\"#*1\"\"*!!_*!!_*A\"$*Q\"&+A\",*Q\"%*A\"$*A\"$*Q\"$+!!\\*A\"#+1\"+*A\"$*Q\"%+1\"++!\")+Q\".+A\",+Q\".+1\"+*Q\"%*A\"$*A\"$*A\"$+!\"(*1!`*A\"$+A\"-+A\"-+A\",,!\"1,!\"1+A\",,!\"2+1\"++Q\"'+A\",+A\"-+A\",*A\"$*A\"$*A\"$+!\"(+!\"(+!\"(+1\"+*Q\"'+!\"(+!\"(+A\",,!\"),1\"2+A\",,!\"2+Q\"0,!\"1,!\"1,!\"1+A\"-+A\",,!\"1+A\"-,1\"2,!\"2+A\",+A\".+1\"++A\"-+Q\".+Q\"0+A\"-+Q\".+Q\".,!\"1,!\")+A\"+*Q\"'+A\"-+A\"-+A\",,!\"1,Q\"*+Q\".+A\".+A\"-+Q\".+Q\".+1\"++1\"+*Q\"%+!\"(*A\"$*A\"$*A\"$*A\"$*A\"$*A\"$+Q\".+A\",+Q\".,1\"4+Q\".+1\"++1\"*+1\")*Q\"&*!!_*A\"$*1\"!*A\"$*A\"$,!\"(+Q\".+1\"++!\"(*Q\"'*Q\"'*A\"$*1\"\"*1!`*!!_*A\"$*A\"$*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*A\"#*Q\"%)A!Z*A\"#*!!_*1\"!*Q\"%*Q\"%*1\"!+!\"(*!!_*1\"\")Q!]*A\"#)Q!\\*!!^*!!^*!!_)Q!]*!!^*1\"!*!!^)Q!\\)Q!\\*!!^*!!^*!!^)Q!])A!Z*!!^)1!X)A!Y)A!Z)1!W)1!X*!!^*!!^)Q!\\)Q!\\*1!`)Q!\\*1\"\")Q!]*1\"\"*A\"#*!!^*1\"\"*1\"!*1!`)Q!])Q!]*!!^*!!_*Q\"&*A\"\"*A\"\"*Q\"%*1\"\"*Q\"&*1!`*A\"#*A\"#*A\"$+!\"'*Q\"%*Q\"%*A\"#*A\"$*Q\"%*A\"#*A\"#*A\"#*Q\"&*Q\"'+1\")+Q\".+!\"(+1\"+*A\"$*A\"$*A\"$*A\"$*Q\"%*Q\"'+!\")+1\"++Q\".,!\"1+A\"-,1\"0+!\"(,!\"&+!\"$*A\"$*Q\"&*Q\"&+!\")+A\"-+A\",+Q\".+Q\"0,1\"3,!\"2+1\"+,!\"1+A\"+,!\".,A\"/+A\"++A\"-+Q\".+Q\"0+Q\".*Q\"'+1\")+1\"*+A\".+A\"-,!\"2,A\"3+Q\"-,1\"3,A\"1+A\"-,1\"3,1\"2,1\"0,!\"2,!\"2+Q\".,!\"1+A\".+A\"-,!\"1+A\"-+A\"-,!\"1+A\"-,!\"1+Q\"0,!\"0+Q\".+A\",+Q\"/+Q\"0+A\",,A\"0+A\"++A\"-+1\"+,!\"1,!\"1+A\"-,1\"4+1\"+,!\"1,!\"1,A\"1,!\"1,1\"4,1\"/,!\"1+A\",+Q\"/+A\"-*Q\"'*Q\"'*Q\"',1\"%,!\"1,!\"-,A\"*,!\"/,!\"1+Q\".+Q\".,!\"1+1\"*+1\"**Q\"'*A\"#*A\"$*Q\"%+1\"$+!\"(+1\"++A\"-+Q\".+A\"-+A\",+!\"(*A\"$*A\"$*A\"$*A\"$*Q\"%*Q\"%*Q\"%+1\"+*Q\"&+!\"(*Q\"%+!\"(*!!_*A\"$*A\"#*1!`*Q\"%*A\"\"*!!`*A\"\"*A\"#*A\"#*!!^*Q\"$*1\"!*A\"\"*A\"$*!!^*A\"$*1\"!*A\"\")Q!]*1\"!*!!^*!!_*!!^)Q!]*1!`)Q!\\)Q!\\)Q!]*!!`)1!X*!!^*!!^)A!Z*1\"!*A\"\"*!!^*1\"!)Q!]*1!`*Q\"%*!!^*A\"\"*!!^*1\"\"+!\"'*1\"\"*A\"#*1\"!*A\"$*A\"$*Q\"%*1!`*Q\"%*A\"#*A\"#*1\"\"*A\"$+A\"-+!\"(+!\"(*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%+1\"**Q\"%+A\"-+Q\"/,A\"/+Q\"++A\",*Q\"&*A\"$*A\"$*A\"$+!\")+Q\"/,1\"4+A\"-,!\"1,!\"1+A\".,!\"1,!\"&+1\"++A\",+!\"(+A\"-+A\",,1\"3,1\"4,1\"4-A\"1-A\"5-!\"5,1\"4+Q\"/+Q\"/+A\"-,1\"1,A\",+A\"-+A\"-+Q\"0+Q\"0,!\"1,1\"4.1\"5,A\"4,1\"4,1\"4.1\"5.1\"5-1\"5.Q\"6-Q\"5-A\"5-A\"5.1\"5,Q\"5-Q\"5,1\"4,1\"4.!\"0,1\"4,1\"4,Q\"3-1\"2,1\"4,1\"4,!\"1.!\"4,!\"2-1\".,1\"3-1\"1,Q\"4+Q\"0,!\"2,1\"3,!\"0,!\"1+A\"-,!\"2+A\",+A\",,!\"2+A\",,!\"1,!\"1,!\"1.!\"5.1\"5,A\"5.A\"6-Q\"5.1\"5-A\"1,A\"4,1\"4,!\"0+Q\".+1\"++Q\"$,!\"&+!\"(+A\"-+A\",,1\"4,1\"4,1\"4,1\"4,1\"4+Q\"/+Q\"/+!\")*Q\"&+!\"'+!\"(+!\"(+A\",+Q\".+Q\"0,!\"2+A\",+A\"-+1\"+*A\"$*A\"$*Q\"%*Q\"%*Q\"%+1\"*+A\",+A\",+A\"-+!\"'+!\"'*Q\"%+1\")*Q\"%*Q\"%*Q\"%+1\")*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*1\"!*A\"$*Q\"%*!!^+!\"'*1\"!*1!`*1!`+!\"'*A\"#*1\"!*1!`*Q\"$)Q!\\)Q!\\)Q!]*!!^*1!`*1\"!*1\"!*A\"$*1!`*A\"$*1\"!*A\"\"*!!`*A\"$*1!`*A\"$*Q\"%*A\"$*A\"$*A\"\"*A\"\"*Q\"'*A\"$*A\"$*A\"$*Q\"%*A\"$*Q\"%*Q\"%*A\"#*Q\"&*Q\"&+!\"(+1\"*+A\"-+!\"'*Q\"%*Q\"%*Q\"%*Q\"%+Q\"/+!\"(,1\"3+A\",,!\"2+A\"-+Q\".+1\"**Q\"&*Q\"&,!\"1,!\"2+Q\"/,A\"3-!\"5-A\"5-!\"4+A\"-+A\".+1\"*+A\",+A\",+Q\"/,!\"1-!\"1,1\"3.Q\"6.Q\"6.!\"6-!\"6,A\"5,1\"2+Q\"0+Q\"/,!\"1,!\"1,!\"2,1\"4,!\".-!\"4-A\"6-A\"8.Q\"8/1\"9-A\"8.Q\"7.Q\"7.A\"7.!\"7-1\"5.A\"6-1\"7-A\"8-Q\"6,A\"5-1\"5,Q\"5.!\"5-Q\"5,1\"4.1\"8-1\"5.Q\"6-Q\"9.Q\"6-1\"5/1\"8-A\"6.!\"6-A\"6.A\"7-Q\"7-1\"8.Q\"7/1\"9/A\"8-Q\"6-A\"6-!\"4-!\"4.!\"5-1\"6-!\"4,1\"4,1\"3,1\"4+Q\".,1\"4,1\"4,Q\"5,A\"4-A\"9-A\"8.1\"8-Q\"9-Q\"5.1\"7.Q\"8.A\"5,1\"3,A\"3+Q\".,1\"3,A\"&+1\"*-!\",,1\"3,1\"4.Q\"1/!\"8-1\"4-1\"5,1\"4,!\"0+Q\"/+!\"(+!\"(+A\",+1\")+A\"-+Q\".,1\"3+Q\"0,1\"3+1\"*+Q\"/+!\"(*Q\"%*Q\"&+!\"'+A\",+A\",+Q\"0+A\"++A\"-*Q\"%+!\"'*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"'+!\"'*Q\"%*Q\"%*Q\"%*Q\"%*A\"$*Q\"%*A\"$*Q\"%*Q\"%*1\"!*A\"#*A\"$*A\"#*!!`*A\"#*!!`*Q\"%*A\"$*1\"\"*Q\"%*!!`*A\"#*A\"#*1!`*A\"#*1\"!*A\"#*Q\"&*1\"!*A\"$*Q\"%*Q\"&*A\"$*Q\"%*Q\"%+!\"(*Q\"%*Q\"%*Q\"%*Q\"%*A\"$*Q\"%*Q\"%*Q\"%*Q\"%+Q\".+!\"'+Q\".+A\",+1\"++!\"'+!\"(+1\"++1\"*+Q\"/+Q\"/+Q\".,!\"1,A\"5,1\"3+A\",,1\"2+!\"(+1\"*+A\"-+Q\"-,1\"2,Q\"4/Q\"7-1\"5-1\"5,1\"4,1\"3+A\"-,!\"+,A\".+Q\"/,!\"0,A\"5.A\"6.A\":.!\"<.!\";.1\"8.Q\"7.!\"7,1\"4,!\"0,!\"0,!\"1,!\"1.A\"6.A\"/-1\"8.A\"<.Q\".!\";.Q\"?.Q\"?.Q\"?/!\"7/!\"7,Q\"6-A\"7.1\"9-Q\"5.!\"8-1\"8/A\":.Q\":-Q\"8/A\"8-1\"8.1\"8/1\"9.1\":.!\":.1\"9.A\":.Q\":.1\"8.A\"=.A\";.A\":/A\">.A\">-Q\":.Q\"?.1\"=.Q\"?/1\">/Q\"=/A\">.Q\"<.Q\"<0!\"=/1\">.1\"9.A\"6.A\"6-Q\"6/A\"6.!\"5-!\"5.A\"6-Q\"5-Q\"5.!\"5.A\"6.1\"8.A\"9/!\"=.Q\"?.!\"<.!\"<.A\"6.A\"6,A\"5,!\"1,!\"1+A\",+A\"-,1\"4-!\"7-!\"7.1\"8.A\"7.1\"6.A\"6,A\"5,1\"2+A\",+A\"-+A\",+!\"(,1\"4,Q\"5.1\"5,A\"5,!\"1,!\"1,!\"1+1\"*+A\",+!\"',A\"(,A\"(+Q\"/+Q\"/,1\"2+Q\"/+A\",+1\"**Q\"%*Q\"%+!\"(+!\"(+A\"-+A\",+!\")+A\"+*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"'*A\"#*Q\"'*1\"!*Q\"%*A\"$*Q\"%*Q\"%*A\"$*A\"#*1\"!*1\"!*A\"$*A\"$*A\"%*A\"$*A\"$*A\"$*Q\"&+1\")*A\"$+1\"**A\"$*Q\"%+!\"(*Q\"&+1\"++A\"-+!\"'+A\"-+A\"-+!\"'+Q\"/+1\"++A\"-+Q\"0+Q\"/,!\"1,!\"1+A\"-,!\"2+Q\".,1\".+Q\"*+Q\"0+A\"-,A\"5,A\"5.A\"6,A\"5+A\",,Q\"*+1\"*+Q\"/+Q\"0+Q\"/.A\"6.A\":.1\":.1\"8-Q\"6-A\"5,!\"2+A\",,!\"1,1\"4-Q\"5.!\"7.A\":/Q\"=.Q\"?.Q\"?.Q\";-Q\"7.!\"5,1\"4,1\"4,1\"4,Q\"5/1\"6.1\"9.A\":.Q\"?/A\"C.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.!\"9-1\"5.Q\"9.Q\":.!\"7.A\"=/A\":.1\"=/A\":/!\":.1\";.!\";.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/A\"C.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?-A\"9/A\":-A\"9-A\"9,Q\"6.!\"7,Q\"5,1\"4-1\"5-Q\"8.1\"8.Q\"?.Q\"?.Q\"?.Q\"?/Q\"=-A\"8-Q\"5,A\"5,1\"3+Q\"0,1\"4-Q\"5-A\"5.1\":.1\"=.A\":.A\":.1\"8-1\"5,1\"4+Q\"/-!\"0+A\",,1\"3.!\"5-A\"5-A\"5.A\"6-Q\"4+Q\"0+A\"-+Q\".,!\"0,!\"0+Q\"0,!\"1,!\"1-!\".,1\"3+A\"-+Q\"0+Q\"/+!\"'+Q\".+Q\"0+A\"-,!\"1,A\"(+A\",+1\")+Q\"/+!\")+!\"'+1\"*+!\"(*Q\"%+!\")+!\"(+!\"'*Q\"%*Q\"%*Q\"%*Q\"&+!\"(*Q\"%+!\"'+!\"(*A\"$*A\"$*A\"$*Q\"%*Q\"&+!\"'+1\"*+1\"++Q\".+1\"++Q\".+Q\".+A\"-,!\",,!\"(+Q\".+A\"-+A\"-+Q\".+A\",+A\",+1\")+Q\".,!\"2+Q\".,!\"1,!\"1+Q\".+A\"-+1\"),A\"3,!\"-,Q\"5-Q\"5.!\"6.Q\"6,A\"5,A\"5,!\"+,Q\"0,!\"1-!\"4.1\"6/Q\"9.1\"=.Q\"?/1\"9-Q\"8,A\"5,1\"4,1\"3,Q\"4.!\"5-A\"8/!\">.A\">.Q\"?.Q\"?.Q\"?/!\">,Q\"5,Q\"5.!\"5-Q\"6.!\"7.1\"=.A\"?/1\"@/A\"D/Q\"E0!\"G/1\"C/A\"D.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/!\"?.Q\"=/!\">/1\">/1\"@/!\"@/1\"B/1\"B/1\"C/Q\"F/A\"D/Q\"E/Q\"E/Q\"E01\"I01\"I0A\"K/Q\"F/1\"C/Q\"F/1\"B/1\"B/1\"B/Q\"F/1\"B/1\"A/!\"A/!\"@/1\"B/1\"B/!\"@.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/1\"B/Q\"E/1\"B/A\"D01\"I0A\"J01\"I/Q\"E/Q\"E/!\"A.Q\"@/1\"?/1\"8/!\"8-1\"7-A\"8.A\"9.1\"=.A\">.Q\"?.Q\"?/A\"D/1\"B/A\"@.1\"=/1\"9.1\"6-A\"5-!\"5,A\"4.Q\"7.!\":.Q\"?.Q\"?.Q\"?.A\"=.A\"7-!\"5,Q\"2,1\"3+A\"-,1\"4-1\"7/!\"8.Q\"<.1\"9.1\"6.A\"5,!\"1,!\"1,!\"1+1\"+,!\"2,A\"5,Q\"5,Q\"5,Q\"3+Q\"0,!\"1+!\")+A\"-+Q\"-,!\"0+Q\"/+A\",,!\"1+A\",+Q\".+!\"(,1\"+,1\".+!\")+A\",+1\")+A\",+!\"(+A\"*+A\",+!\"'+!\"(*Q\"%*Q\"%*Q\"%*Q\"%+1\"*+1\"++!\")+A\",+A\"-,Q\"++1\"++A\",,A\"(+A\"-+1\"*+1\"++A\"-+A\"-,!\"1+A\",+A\"-+A\"-+Q\"0+1\"*,!\"2,1\"3,A\"5,A\"5.1\"6,1\"5,1\"3,A\"+,!\".,!\"0,A\"5,Q\"5.1\"8.!\"6/!\"9-1\"5-!\"5,A\"5,A\"5,1\"4.1\"6/!\":.1\"=.Q\"?.Q\"?.1\"=-A\":.!\"5,Q\"5.1\"6-A\"5/Q\":.1\"=/Q\"F0!\"G/A\"D.Q\"?.Q\"?.1\"=.Q\"9/A\"6.1\"9-Q\";.!\".A\">.Q\"?.Q\"?/A\"D0!\"G0!\"G0A\"J1!\"N0Q\"M0Q\"M0Q\"M0Q\"M0Q\"M01\"I0Q\"M0Q\"M/Q\"F01\"I0Q\"M01\"J0Q\"M0Q\"M0Q\"M0Q\"M0Q\"M01\"J0Q\"M0Q\"L0A\"K01\"J0Q\"M0Q\"M0Q\"L0!\"G0!\"G0!\"G/A\"C/A\"D/A\"D/1\"B/1\"A/1\"C0!\"G/Q\"F0!\"G/Q\"F/Q\"F0Q\"M0Q\"M1!\"N0Q\"M0!\"G0!\"G/1\"B.Q\"?.1\"-Q\";-Q\":.Q\"?/!\"@/A\"C01\"J0A\"K0!\"G/Q\"F.1\"=/1\";-Q\";.Q\"8-!\"6.1\"8/Q\"<.Q\"?.Q\"?.Q\"?.Q\"?/A\"<-!\"7.1\"6,1\"4,1\"4.!\"5-1\"8.Q\"9/!\"@.1\"=-Q\";.Q\"8,!\"2,!\"2,!\"0,!\"0.1\"6-1\"5.1\"9/1\"6,Q\"5,A\"5-!\".+Q\"/,A\"-,!\".,!\"0,!\"2+A\"-,!\"0,!\"0+1\"+,!\"2+A\",+A\",+A\"-+A\",,!\"*+Q\"(+Q\"%,!\"+,A\"/+!\"'+A\",+!\")*Q\"&+1\"**Q\"'+A\",+A\",+A\",+A\",+A\"++A\"-+Q\"/+A\",+Q\".+A\",,1\"2,!\"1+Q\".,!\"1,!\"0,!\"1+A\"-+A\"-,1\"4,1\"/-1\"5/Q\"6-Q\"5,A\"5,A\"5,1\"4,A\"3,1\"4.A\"6.A\"9/1\">.Q\"?.A\">-Q\"9-Q\"5-1\"5-1\"5-Q\"6.A\"9/!\"?/!\"A/Q\"F.Q\"?.Q\"?.!\"7.!\"7.1\"8.Q\":.1\"/Q\"F0A\"K1!\"N0Q\"M0A\"K/1\"A.Q\"?.Q\"?.Q\"?/!\"@/Q\"F01\"J1!\"N2A\"X2!\"V1!\"O11\"P0!\"H01\"I0!\"G/1\"B/Q\"F01\"J0A\"L1!\"N1Q\"S2Q\"U3Q\"T2!\"V3A\"R31\"X2A\"T1Q\"T11\"P1!\"N0Q\"M0Q\"M0!\"H0Q\"L0Q\"L1!\"L1!\"K0A\"I/1\"8.1\"-/A\"811\">11\">11\"=11\">11\">11\">11\">11\">1A\"=1A\"A11\"A1A\"B0Q\"A0A\"E1A\"I1A\"P11\"P2!\"T2A\"Y3A\"U2A\"Z2Q\"Z3!\"U2Q\"Y2!\"V1A\"R0Q\"M0Q\"L0Q\"L01\"I0A\"J0Q\"L11\"Q1A\"R21\"W2Q\"U2A\"W1A\"R1!\"M0A\"J/Q\"F/!\"@/!\"@.Q\"?/1\"C0!\"G0Q\"M1A\"R1!\"O1!\"N01\"J/1\"C.A\">/!\">.Q\"<.Q\"?/!\"@0!\"H0A\"J0Q\"M01\"I/1\"C/1\">.!\":.Q\"6-A\"9-Q\":/!\"@/!\"@/!\"@.A\">/!\"?0!\":-Q\"6-Q\"5.Q\"7-Q\"6-!\"7.1\"=.Q\";.!\"<-!\"7,1\"2,A\"4,A\"5.Q\"6,Q\"5/!\"6-!\"5,A\"5,1\"3,1\"3,Q\"2,!\"1,!\"1,!\"1+A\"++Q\"0+Q\".,!\"1+A\",+A\"-+Q\"0+A\"%+A\"-+A\"-+Q\".,!\"1,!\"1,!\"1+Q\"/,1\"4-A\"5,Q\"5.!\"5,1\"4-Q\"0,A\"5.1\"/,A\"5.!\"5.1\"6-A\"5.1\"6-!\"8/1\";.Q\"=.A\"8.Q\"9,A\"5-A\"5.1\"9/Q\"=.A\">.1\"=/!\"@/!\"@/!\"@-!\"7.Q\"8/1\";.A\">/!\"@0!\"G0Q\"M01\"J01\"I/1\"C.Q\"?.Q\"?.Q\"?/!\"@/Q\"F1A\"R11\"P1Q\"T1!\"O0A\"J/1\"B/1\"B.Q\"?/!\"@/Q\"F1A\"R21\"P2A\"Z3A\"V3Q\"U1Q\"S0Q\"M01\"J01\"J0A\"J0!\"H0Q\"M2!\"Q2!\"R21\"W4!\"Z4!\"Z2Q\"Z2A\"Z2A\"Z2A\"Y1Q\"U1!\"N0Q\"M0Q\"M1!\"K0A\"F11\"D1!\"B/!\"4/!\"0/Q\"*/Q!`.1!^-1!X-A!Z/!\"!/Q\"+/A\",/1\")/A\"*/Q\"+/1\"*/1\"*01\"*0A\").Q\".1Q\")0Q\".1Q\"/1Q\"11Q\"11Q\"20Q\":1!\":1!\">11\"D11\"H2A\"O1Q\"U3A\"U3!\"Y2A\"Z2A\"Z2A\"Z2!\"S2!\"Q11\"Q1Q\"M01\"J1A\"R1A\"R2A\"U3Q\"U2A\"Z3!\"Y3!\"X1Q\"S1A\"S01\"J/Q\"F0!\"G/A\"C/Q\"F0Q\"M1Q\"T3!\"U2Q\"V2!\"R1!\"O/Q\"E.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F0A\"K0Q\"M0Q\"M/Q\"F/!\"@.Q\"?.Q\":/1\"8/!\"@/!\"@/A\"D0A\"K/1\"B/1\"C.A\">-A\"9.!\"5-A\"9/1\";/!\"@/!\"@/!\"@/!\"?.A\"8/!\"6-1\"5-A\"5-A\"5.1\"8/!\"60!\"9.!\"5.!\"5,A\"5,A\"5.!\"5,A\"5.1\"6,A\"5,1\"2,!\"1,!\"1,!\"1+A\"-,!\"2+A\",,1\"3,1\"3,1\"3,1\"4,1\"4-!\"3.A\"/-A\"5,Q\"5-1\"6-!\"5.!\"7-Q\"8-!\"7.!\"9-1\"6.!\"6.!\"9-1\"9-A\":/1\"?.Q\"?.1\":.!\"9/A\":/1\"/!\"A/A\"E/A\"D/Q\"E/!\"@/!\"@/Q\";.A\">/1\"@01\"I0A\"K0Q\"M0Q\"M01\"I/1\"C/!\"A.Q\"?/1\"A/Q\"F1!\"N2A\"W21\"S21\"W1!\"O0Q\"L/Q\"F/A\"C/1\"B0Q\"L11\"O2A\"W3Q\"W2Q\"Y2A\"Z3!\"Y2!\"S1A\"S0Q\"M0Q\"L0Q\"L1Q\"R2!\"R31\"X31\"\\41#!3Q\"`41#\"3A\"^3!\"Y3A\"V1Q\"T1!\"O1!\"K0Q\"J11\"G0A\"<0Q\"60A\"+.A\"\".!!^-1!\\-A!Z-1!X+Q!X-1!X-1!X-A!Z.A\"!.1!].Q!_.1!`.A!^.A!].Q\"!.Q\"!.Q\"!.Q\"!.Q\"\".Q\"\".A\"\"/!\"#/!\"$/!\"&1!\"&1!\"(11\"(1Q\".1Q\"01Q\"41A\"71Q\"91!\"B1A\"J3!\"P31\"S31\"[4!#!3A\"^3!\"\\2Q\"Y1Q\"T11\"P1!\"O1Q\"S2!\"V3Q\"\\4!\"^3A\"_4!#!4!\"X31\"V2!\"S0A\"K0!\"G01\"H0!\"H0Q\"M2!\"S3!\"Y3!\"Y3A\"V1Q\"S1!\"O/1\"B/1\"B/!\"A/Q\"F01\"I11\"Q1A\"R1Q\"R1!\"M/Q\"F/1\"A/1\"?/!\"@/!\"@/!\"@0A\"K0A\"J0!\"H/1\"B/!\"A/!\">/A\";.!\";.1\"=/!\"@/!\"@/!\"@.Q\"?.1\".A\">/!\"@/!\"@.Q\";.1\"<.!\";/!\"@/!\"A0!\"G0Q\"L01\"J.Q\"?/!\"@/!\"@/!\"@/!\"@01\"J1!\"N1A\"Q1!\"N01\"H/A\"E.Q\"?.Q\"?/1\"B0A\"K1Q\"N3A\"T3!\"X31\"W1A\"R0A\"J/Q\"F0A\"K0Q\"M1A\"R2Q\"U4!\"]4A\"_4A#$3!\"]3A\"V3!\"V0Q\"M0Q\"M0Q\"M2!\"U21\"V4A\"_41#(4Q#(4Q#*4Q#%3A\"_2Q\"[3A\"V2Q\"U1A\"R0Q\"M1!\"C1!\"=01\"5/Q\"*.A\"!-Q!\\-1!X-1!X-1!X-1!X-1!X-1!X-1!X-1!X-1!U-1!X-1!X-A![/A!\\0!\"\"1A\"'0Q\"'2Q\"+3!\"+3A\",3A\"-3A\"-21\".21\"-2A\"%0A\"$01\"$/A\"$/A\"$/!\"#/Q\"$/Q\"$0A\"$1A\"%1Q\")1Q\"-1Q\"-1A\"91A\"?21\"A21\"Q3!\"V4A\"[3Q\"`4!#!2Q\"[21\"W2A\"S2A\"T3A\"V31\"W3A\"_4Q#%4Q#%4A##4!#!4!\"Y2!\"U11\"Q0A\"K0Q\"M0Q\"M3!\"Y2Q\"Y3Q\"[3!\"[21\"W1A\"R0Q\"M0!\"G/!\"@/A\"C0Q\"M1A\"R2Q\"V2A\"Y11\"P0A\"K/1\"B/!\"@/!\"@/!\"@/A\"E01\"H1!\"N01\"J/Q\"E/!\"@/!\"@/!\"@-Q\";.1\"=/!\"@/!\"A/A\"D.1\"=.1\"=.Q\";-A\"7.Q\";/A\"9.!\";/Q\"=.!\"<-Q\";.1\"7,Q\"6.Q\"9.!\"6.Q\"9.A\"9-A\"5-A\"5-1\"5,A\"5,A\"5,A\"5-Q\"5-1\"5-A\"5.!\"8.Q\"6-Q\":/!\"8/1\";.1\":.1\"=.!\";.1\"<.!\"<.A\"=.1\"=/!\"?/!\"@/!\"@/!\"@.Q\"?/!\"@/!\"@.Q\"?.Q\"?.Q\"?0!\"H0Q\"M0Q\"M/Q\"F0!\"G.Q\"?/!\"@/1\"B0!\"G0Q\"M1Q\"Q2A\"V21\"R1A\"Q0A\"J0!\"H0!\"G0Q\"M1A\"S3A\"V3A\"^31\"]3!\"Y3A\"U11\"Q0A\"J0Q\"M11\"P3!\"W4!\"X4Q#%4Q#%4Q#%3Q\"`2Q\"[2Q\"U11\"Q2!\"V3!\"X41\"Z41#%5A#*5Q#06A#-6!#)4Q#&3A\"^3Q\"\\31\"U21\"Q1!\"K01\"?01\"4.!\"+.!!`-A!Y-A!Y-1!X-1!X-1!X-1!W,A!W-1!W-A!U/!!`11\"&2!\"+41\"17Q\"79Q\"?:1\"A;Q\"H;A\"B9A\">:A\"?:!\"781\";:A\"<:Q\"?:Q\"?;Q\"C0!\"<-Q\":/1\"9-!\"7-A\"7.1\":.A\"6.!\":01\"8.1\"8.1\"8.A\"9.A\":-1\"5-Q\"9.1\"9/!\"8.!\"<-Q\";.1\"=.Q\"?/A\">/!\"<.Q\"?.A\">.1\"=/!\"@/!\"A/A\"E/1\"A.Q\"?/!\"@/!\"@/!\"@/!\"A/Q\"F1!\"N1!\"N1!\"N0Q\"L0A\"K/!\"@/Q\"F0!\"G1!\"N2!\"S2Q\"Y3Q\"U2!\"R11\"P0A\"J0Q\"M0Q\"L21\"V3Q\"W3Q\"`4Q#%3A\"_3!\"X1A\"Q1!\"N11\"O2A\"V31\"W4Q##5!#+51#-51#'41#\"3!\"Z3A\"V31\"X3A\"T41\"\\5!#$5Q#-6!#061#06A#05!#)4Q#&4!\"Z4!\"T2!\"R1A\"F11\">.!\"7.1\"&-Q\"!-A![-1!X-1!X-1!X-1!X,A!V*Q!W.1!V.Q\"!3A\"+7A\";:1\"A=1\"?:Q\";9!\"68Q\"67Q\"-5A\")5A\"%4Q\")51\"&51\"(5Q\"(51\"+5Q\"25A\"16!\"*5!\"+4Q\"*4!\"(51\"+5A\".81\"08Q\"6;Q\"A>1\"F>1\"O;A\"L9Q\"E61\";2A\",0Q\")1!\"&0!\"'.Q\")01\"*0A\".1A\"70Q\":11\"@2!\"L31\"X3Q\"_4A##4A#!41\"^2Q\"[3A\"V4Q\"`4Q#%5Q#*6A#.61#-5Q#*4Q#\"3!\"Y3!\"V1A\"Q3!\"V31\"W4A#\"4Q#%4Q#%4A##41\"\\21\"U1!\"O1!\"N0!\"G0Q\"M3A\"U2Q\"Z3Q\"`3!\"X1Q\"R0Q\"L0!\"G01\"I0A\"K1!\"N11\"Q2Q\"Q1Q\"T0Q\"M/Q\"E/!\"A/!\"@/!\"A01\"I0A\"L01\"I0!\"H/Q\"F.Q\"?.A\">/!\"@/!\"@/!\"@.A\">/!\"@/!\"@/!\"@.A\">-Q\";/A\".A\">.Q\"?.Q\"?.Q\"?.Q\"?/!\"@.1\"=.Q\"?/!\"@/1\"B0!\"G01\"J0A\"K/1\"B/!\"@/!\"@/1\"C0Q\"L1A\"Q0Q\"M1A\"R1!\"N0!\"G0A\"K01\"I1!\"N1Q\"T3A\"U3Q\"U2A\"[31\"W1Q\"T1!\"N01\"I11\"P31\"V41\"]4Q#&4Q#'41#\"3A\"\\3Q\"U1A\"R2!\"V41\"W41\"`51#.6A#06Q#)5A#,4Q#$4Q\"[3Q\"W2A\"Z4A\"\\4Q#(51#+5A#+4Q#+5Q#05Q#04Q#+41##4!\"[2Q\"R01\"G01\"<.A\"5.1\")-Q!\\-1!X-1!X-1!X-1!X-1!W,!!U,1!R/A!V3Q\"/:!\"7.A\">-A\":.1\"=.A\"=.Q\"?.Q\"?.Q\"?.A\">.A\">.Q\"?.Q\"?.Q\"?.Q\"?/Q\"E.Q\"?/!\"@/!\"@/A\"D0A\"J0Q\"L0Q\"L1!\"N0!\"G0A\"K/1\"B01\"I0Q\"M11\"P1A\"R1Q\"U1A\"S1!\"N0A\"K0A\"J1!\"O1Q\"Q31\"W4!\"`3A\"_2Q\"Z2A\"V1!\"N1!\"N2!\"V3A\"U4A#!5!#(5!#(4Q#&41\"^3A\"W3A\"V31\"W3Q\"[5!#)61#/6A#06Q#061#/5!#&3Q\"`3A\"\\3A\"_4A#'5Q#.51#-5!#&4Q#&51#,6!#05!#)41\"`3A\"U11\"N1!\"C/Q\"7/1\"%-Q!`-Q![-A![-A![-Q!\\,Q!X+Q!U,A!W0!!`8!\"71!\"K21\"W4!\"]4Q#&4Q#)4Q#%4Q#&4Q#'6!#/5Q#05!#.5A#*6!#/51#+3A\"_3!\"Z2Q\"Z4!\"^4Q#&5A#*6A#061#/5A#&3A\"[2Q\"W1A\"O21\"S3A\"V41##5!#&4Q#%4Q\"`31\"X1A\"N1!\"N1!\"N11\"P3!\"R3!\"Y2Q\"Z1Q\"U1Q\"T01\"I01\"I01\"I0Q\"M1!\"N1!\"N1!\"O01\"I0A\"L/A\"C/!\"@/Q\"E/1\"B/Q\"E01\"I/1\"C/!\"@/!\"@/!\"@/!\"@.Q\"?.Q\"?-Q\";.Q\"?-Q\";.!\";.1\"=.1\"=.!\"<.1\"=.1\"=.Q\"?.Q\"?.Q\"?/1\"B/1\"C.Q\"?/Q\"F0!\"H0A\"L0A\"L1!\"N1!\"N01\"I0A\"K0A\"L0A\"L0Q\"L1A\"R21\"S4!\"T2A\"Y11\"P1!\"N1!\"N1!\"N2Q\"U31\"Z4!#!4!#!3Q\"`3!\"Y21\"U1A\"R31\"Q4!\"\\41##4Q#$51#&5!#)4Q#%2A\"Z31\"W31\"W4!#\"5Q#*6!#.5A#*5Q#-6A#/51#'41##4A#$4Q#%6!#-51#,51#(4Q#%4Q#%4Q#-6!#051#.4!#!3Q\"S1A\"L0Q\";.1\"1.Q\"$,Q![-1!X-A![-1!Y-!!R+!!H,1!R1A\"#7A\"99Q\"8:!\"+7Q\"+3Q\"%51\"-51\"22Q\"0/Q\"#-Q!X+!!U-Q![2!\"%7A\"8BQ\"7CQ\"2AA\"1BQ\"1B1\"2B1\"2D!\"6BQ\"9B!\";A1\"A@Q\"H;A\"C6A\"92!\"'.!!Z-1!V-A!T/A!^1Q\"$3A\"&1!\"%11\"%41\"/;Q\"DBQ\"]C1#!=!\"S41\"811\"(.1\"\".1\"$0!\"'/Q\"21!\"70A\";1!\"C1Q\"N2Q\"Z4A#$4Q#%4Q#%4Q#%51#*6!#05A#)4Q#%4!#$5!#(6!#-4A##4!#!3Q\"Z4!#!5A#)6Q#05Q#061#+51#+4!\"`3Q\"U2Q\"Z4!\"T3A\"_5!#&5!#&5!#*41##3A\"S21\"S1!\"N1A\"S31\"T2Q\"Z3A\"_2Q\"[21\"W1A\"R1!\"N0A\"J1!\"N11\"P11\"Q1Q\"T1Q\"T1!\"N0Q\"L0!\"H/Q\"E01\"I0!\"H0!\"G0!\"H/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@.Q\"?.Q\"?/1\"B/1\"A/1\"A/A\"E0!\"G0!\"H0A\"K/Q\"E0A\"J/Q\"F01\"I1!\"N1!\"O11\"Q1!\"N1!\"N0A\"K0A\"J1!\"O1Q\"S3Q\"U2Q\"Z2Q\"[31\"T1A\"S11\"P11\"P2A\"Y4A\"[4A#$3!\"[41#\"31\"]4!\"T2A\"R3!\"X3Q#!4!#!,AR6)QB!3Q\"_4Q#%3Q\"`3A\"_3Q\"`4Q#(5!#+1Q\"P1!\"O4A#$61#05A#.4Q#%4Q#%51#)5A#.5!#+4Q#,5A#)51#)4Q#(5Q#051#.4Q\"]3A\"Q11\"E/1\"6.!\"'.1\"\".!!_.1\"\"/1\"#-Q!\\+!!Q+!!O0Q\"(71\"5;1\"2:Q\".6A\"*61\"-6Q\"55!\"31Q\"(-Q!W.1!X2Q\"'7Q\"0?Q\"FC1\"@B1\"*@!!W<1!L6Q!?4Q!;21!91!!;/Q!5.Q!:-1!7.Q!8.Q!:.Q!:1!!>4!!<61!>81!D=A!M@1!VCQ\"-BA\"7?!\"?9A\":2Q\"*-A!^+1!W.Q!\\2Q\"$21\"'11!_2A\"'9Q\"?C1\"[DQ#&Q\">B!\"7?Q\"!;A!I5!!?0A!7.!!6*Q!7*1!6(1!8)1!9'!!6&A!8'1!5&Q!6&Q!;(1!9(1!=)!!=(!!<*!!:*1!9,!!=/1!<2Q!;6Q!<&A!='A!9'A!9'Q!=+A!<,1!90!!<5!!;01\"H1Q\"T41#$5A#/5Q#05Q#04Q#-3Q#-/1#3.1#3/1#241#,6!#/51#(6!#&61#.5Q#-.Q#+.A#*/1#\"3Q#.51#(41#\"3A\"_5!#&61#'5A#/6Q#16!#,41##3Q\"]3!\"Y3!\"]4A\"]41##4A#$4A#$31\"^3A\"V2Q\"U1Q\"T1Q\"T31\"W31\"W31\"X3!\"Y2A\"U1!\"N1!\"N11\"Q11\"P11\"P1!\"N1!\"N1!\"N01\"I01\"I0A\"K0A\"K0!\"G01\"I01\"H01\"I/Q\"F1!\"N0Q\"M1!\"N1!\"N1!\"N1!\"N1!\"N1!\"N11\"P1Q\"T2A\"V3Q\"U3!\"X21\"X1Q\"S1Q\"T2Q\"W3!\"W3A\"]4Q#$3Q\"`3Q\"^3A\"_3A\"V2Q\"Z4!\"`4A##.A\"?$2!;#A!=/!\"=4Q#$3Q\"`5!#$0!2J$!!;!!Q)!!Q'#A!821\"U61#(5!#)61#--QR:#R!6#\"!<(A\"\"1Q\"X4Q#'5Q#061#05Q#,4Q#)5A#,5Q#061#061#04Q#*4Q#'5!#.61#-4Q\"\\21\"H0A\"2.A\"&/Q\"%/A\"$0Q\"%0A\"#,!!S*Q!L2!\"(61\")81\"&7!\".6A\"+8A\"?3A\"-,1!Q0!!]:1\";CQ\"AC!\"!81!G/1!:*1!3(Q!3&Q!8&!!2&A!:)1!E/A!Y4A\"+;Q\"6@1\"9F1B6HA21J1R)KQR%L1\"%M!B%MA2%LQB%JQB3F!29AQ\";>!\"87!\"50A\"#+!!M'Q!C'1!>(Q!;)Q!?,Q!=2!!;91!=A1!SF!\"C/1\"\"+Q!Y1!\"%5A\"011\"'0A!`:Q\"=G1#!?A\"Y41\"0.Q\"\".A\"!0!\"%01\"2.Q\"50!\":/Q\">/Q\"D1A\"R4!#!5A#*5A#051#/4Q#*2A#1/A#3/A#3/1#22Q#26A#,5Q#/5Q#06!#00!#&.A#-.Q#%.A##2Q#)5!#'4Q#%5!#&5A#+51#+5A#/6Q#06!#,5!#&3Q\"`3A\"W3Q\"_41#\"5!#&5!#'4Q#%3Q\"^2Q\"Z2A\"S2Q\"R3A\"V3!\"Y31\"[3!\"X3A\"V2!\"V11\"Q11\"P1!\"N1A\"S11\"Q1A\"R1!\"N1!\"N1!\"N0A\"J0A\"K0A\"K0Q\"L0!\"H1!\"N0!\"H1!\"N1!\"N1!\"N1!\"N1!\"O1A\"R1!\"N1!\"N21\"Q2A\"S3A\"S3!\"Y3Q\"U2Q\"P2!\"R3!\"U3A\"V3A\"_4A##5!#&4A#$3Q\"`2Q\"[31\"]31\"^4Q#%0!\"H%!QA!!!(\"2A-/1\"D4A#$4A#$0!\"L#1!@!\"A&!\"1'!!!(&AQK4Q#%5A#+6!#/-QR4!2!*%1Q?'1!Z-!\"64A#$5A#,61#05A#-5!#,5Q#/6!#05!#,5A#05A#/4Q#'4Q#'5Q#-4Q\"^2!\"J1!\"9.Q\"+01\"$0!\"$1A\"&1Q\",-1!T+Q!P4A\"08Q\",91\"$4A\"&4Q\"*8!\"801\"#,Q!T4A\"0B1\"LFQ\"0<1!L0Q!9*A!6'Q!3&1!3%Q!2&A!=.!!U81\":B!\"@HA23J1ARMQA?M\"A/HRQ&HC1!G#!!E31!ESA!G31!H#A!I3Q!J3Q!K3!)O3!4Q\"!CO!AOL12,DQ\"C;A\"@11\"\"(1!I)1!='A!>)Q!D-Q!?11!6=!!4Q\"0I1\"FNA!PG\"Q$BSA!A#A!:B!#1!!4.Q!E-1!M.1!I0!!@4115;\"!-?R!,BSA.E#A.D3A2BS!1B\"A6.!#.01#021#+/!#).A#\",!\"5,1\"4-!\"7.!\"L.!#\"0Q#\"/1#&.1#\"-Q\"C(1!S)1!Z/!\"<5Q#*5Q#+5!#)5!#)51#*+Q\"/+A\",/A\"E4A##4!#\"4A\"]3!\"]41#\"3A\"V1Q\"S1Q\"O3!\"Z31\"^31\"W2Q\"[2Q\"[2Q\"[31\"X3Q\"U3!\"Y21\"R2!\"R1Q\"T11\"Q11\"P1A\"R2!\"T21\"T21\"R31\"T1Q\"S1A\"R21\"X21\"V1A\"Q0!\"G01\"J0Q\"K2Q\"V31\"]3A\"^3Q\"`0A\"I+!\"(*Q\"%*Q\"%0!\"G5!#&5!#&5!#&11\"O'!!O$A!K&Q!P(Q!W!\"A&!!!(!!!)!B1)%AQD'1!P&Q!N'Q!Q\"\"1+!!A'!2Q(!1A*$1Q@&A!L'A!Q'1!](1\"&21\"Z5!#'6!#-6!#06!#/2A\"W.A\"<.1\":/Q\"G3A\"^41\"_3Q\"S3Q\"Z5!\"Y21\"F1Q\"/2A\",3!\")1A\"%5A\"8-!!U'Q!A01!`7Q\"&61\"%2A\"#8A\">4!\".(Q!G41\",I1\"WCA!Y2Q!9)Q!1&A!0%A!0(1!H9!\"5PQ\"8L!Q4E3A\"E#Q!?C!%2Q!5.A!G.!!J1A!>8BQ*E#1%ME1\"Q6A!P6Q!M6!!MF!!N&1!PF1!R'1!SW1!VW1!TFA\"R51$HSA'>RA>4!!Q0!!T+!!E)1!>*QA/5R!$D#Q!T$1$TAQWG1\"O/A!]'Q!<)1!E+A!L.!!A91!EGQ\"*BA\"P/1!_+1!P41\"411\"\"/1!Z?A\"OM1#961\"=,!!V-A!W.A\"$1!\"3.1\"=-Q\";.A\"=-A\"9/1\"80A\"N5A#.51#03Q#1/1#3.1\">+!\")+Q\"/,Q\"B.1#,.A#1.A#1.Q#*,A\":,1\"4*Q\"%,1\"1-Q\"Q-!#!-!#!-Q#!.A\"I'!AI$A1;(1!T1!\"M5Q#,61#)6Q#'41#%,A\"(+1\"*+1\"+0A\"J4Q#\"41##4A##4A##21\"U1!\"N1!\"M11\"P3!\"]3!\"Z3Q\"]3Q\"U3Q\"]31\"W3!\"X31\"X2Q\"X2Q\"Y2!\"R2!\"U2!\"U2A\"S2Q\"U2A\"T21\"S01\"J0Q\"M1!\"O1!\"O0A\"K/Q\"E0A\"L0!\"H/Q\"F2Q\"U3!\"\\4!#!0!\"H+1\")*Q\"%+1\"+*Q\"%.Q\"@5!#&5A#$5A#!(!QY\"Q!4#!1@'A!S'A!S!!A'!!A)!\"A'%!!B'1!O%!!J&1!M'A!Q\"\"Q*!\"A&!!!(!RA+'!!P'A!S'A!S&!!`)!\"#51#+51#.6!#061#031#!/Q\"@-Q\"8.Q\"\"Q&1QQ8-A!M.A1@6RQ,FTQ\"R'!!OV1!H%1!>T!!8C1!2\"A$/!1%/11%0B1&32A#8B1\">TA!I5Q!R'Q!W81!WG1!LD1(>QA<51!U,A!P*!!?*1!5/1!&A4!!T4Q%WRQSE1\"W/A!]&1!8)A!I-1!N/Q!;=1!LJQ\"@:Q\"D+A!T11\"#6A\":.!!W41\"/HQ\"]C1#(/Q\"#+Q!R-A!]0!\"1/Q\":-Q\";/1\";.Q\"+A!8+Q!4-QQ)21Q(?$1\"MF!!YHA!ZG!!L3!,:QQS0!![*!!D)1!9-!Q*@3!!U$Q!XQ!]EA\"R,!!N'Q!>+A!N-A!J1!!BE1!VGA\"P31\")*!!M5A\"721\"+.A!W.A\"8.A\"9.!\"9.Q\"8.1\"7/1\";/1\"C31\"O21\"F21\"761\"96!\"5/1\"#9!\"B+A!S)!!B6A\"0:1!^3Q!`51\"':Q\"I,Q!S+1!OBQ\"OJQ\"34Q!D*Q!1'1!0$Q!0(1!AAA\"GUA!`E!Q$DTA!F$!!1Q!7*Q!B-A!BC$1\"VWA!Q'!!:C1!.1A#*!!0*1!2-1!>-Q!81A!421A14AQ*52A'42!+2!14/!Q:-!!A*Q!=,1A23\"1(F5Q!UGQ![(A!OD1)>!!I01![*1!B)Q!60QA&ED!!Z31%TQR191\"A)!!>(A!<-1!R.1!C9A!JJ1\"6>!\"J)1!O.A!`5Q\"4.1!T41\"+L!#'C!#!,1!R*A!Q-A!]1A\"6/1\">/!\">.!\":.1\"9/!\"7.1\";/!\"D31#+1!#2.1#++A\"60A\"O3!\"_+Q\"+,1\"1.1\"U.A#,-Q\"@,!\"2)!!X01\"K*!!_+A\",-A\">-1\"_.Q\"I'1!U%11<+Q\"*(!!O(Q!T-Q\"32Q\"Q/Q\"H+!\"(-!\",-1\"6,1\"1+A\",/Q\"F2A\"V31\"V11\"P1!\"O1Q\"T1Q\"T0A\"K0A\"K3!\"R31\"Z4!\"W3!\"Z31\"]31\"\\3!\"[3Q\"]31\"W3A\"V3A\"V/Q\"E/1\"B0!\"G/Q\"F/1\"C/Q\"E0A\"K0!\"G0!\"I-!\"5,1\"-+!\"#+!\"!,1\"&+Q\"&+!\"'+!\"'-1\"90Q\"E+!\"$*!!^+!\"&+Q\"#&A!K#114*12$3!\"`,A\"1&Q!P'A!T%1A>&QAK%!!K+!\"&4!#$1Q\"S'Q!V'Q!Q\"Q1<$1!F'Q!Q,Q\"64Q#.6!#01!\"O,!\"20!\"L5Q#06Q#061#02Q\"V/Q\"B-!\"7/!\";.1\"7-A\":/A\";.Q\"9.A\">31\"O21\"F3Q\"78Q\"B4A\"3.1!`6A\"=)Q!G+Q!O7!\"/8!!\\1!!Y7!\"07Q\"?)1!G.Q!XI1\"RE1!_/Q!9)A!1&1!0\"QA-.!!SNQ\"MOAQ7B2Q!J51!=R1%,A!C,1!D7B1,UH1!WXA!=$1!-!Q$+!!)*A!9,1!>1!10821&BT1!LVQ!PWA!Q7A!PG1!L6A!C$!!82!&0!!4-!!B+Q!90AQ'ETA!Y8A!ZX1!P$!);!\"$-Q!U(A!B*Q1052Q$Q51![\"A?K1\"W,Q!W&A!7+Q!S-A!H2A!AFQ\"$FQ\"Q-A!Y-A!V6Q\"@.1\"!/!!_F!\"\\IA#/11\"))Q!C,!!R11\"40!\"C/A\">-A\"6-1\"5-1\"5/!\"6-!\"7.Q\"T0!#3/Q#0-Q\"G1A\"R6!#02Q\"]*!!\\-1\"9.1\"[,1\"9,!\"2+1\".4Q#.2A\"X)!!X,!\"1-Q\"F-Q\";(Q!Z%AAF3!\"U0Q\"L(!!S+!\"'-1\"7-A\"0,!\"*,A\",2A\"S3!\"U-!\".-A\";0Q\"L11\"P1A\"S11\"P2Q\"U21\"U1Q\"T11\"P11\"Q2Q\"U21\"Y2A\"T3!\"W3!\"X3A\"\\3!\"Z31\"^2Q\"[2Q\"[/1\"C0!\"H01\"I0!\"G0!\"H01\"J0!\"H0A\"K.Q\"@/Q\"A0A\"F,1\"1*A\"$*Q\"$*Q\"%*Q\"%-!\"33Q#\"5A#..A\"<(1!Q*A!]'A!O\"115%11J5Q#*6!#/0A\"I&Q!R'1!P'Q!Q&A!L'Q!R2A\"X5!#&3A\"^(A!W'!!O'1!P&A!M*1\"!31#\"51#051#02!\"X-Q\";1A\"U5Q#06Q#05A#04!##/!\"A/!\"6.1\"<0!\"<.A\"9-Q\":.1\"9.!\":3A\"L1Q\"84Q\"9:A\"M4!\".0Q\"!41\"7'Q!?*Q!P5!\"#6!\"!0!![:1\"85Q\"9)1!B2A\",KQ\"MAA!O,A!5(Q!1$Q!/&1!851\".U1\";IAA*A#1!K5Q!4Q1/+A!@/A1=F$!![91!N'A!2\"Q#+1!&*Q!0,A!@1AQ1;#!!L7!!W(!!O71!GV!!F%A!N'Q!VYA!XYQ!QG1!ADA!2!Q0+1!?)Q!:3!A)M&!![)Q!Z'Q!G!A<6!\"')Q!G)A!:+Q!)H51!\\$A)UQ\"D7A\"6&Q!;+1!J/1!P-Q!D>Q!ZJQ\"H3!\"*)1!K5Q\"84A\")-1!P@!\"FLQ#/5A\"7(Q!G+Q!T/Q\"+1!\"B.Q\"?/Q\"9-Q\"7.A\"6,Q\"5.Q\"<-Q\"@.1#$.A#3.A\"L2!\"T6!#06!#00!\"F+Q\"/,A\"5,!\"1,!\"1-A\"86Q#(5A#-.Q\"A)!!\\+1\"+,A\"5)1!`)!!Z3Q\"`4Q#%/1\"E(A!X,A\"(,1\"*+A\",,Q\"36!#,5Q#02A\"[+A\",/1\"C1A\"R1A\"Q1!\"N4!#\"4Q#%2Q\"V1!\"N0!\"H1!\"N01\"H01\"I11\"P31\"X3A\"\\3Q\"]31\"W3Q\"]31\"X0A\"K0Q\"K2A\"O1Q\"P0Q\"M0!\"H0Q\"L0Q\"M2Q\"P4!\"]4!\"^1Q\"L+A\"+*Q\"%*Q\"%,1\"22A\"W6!#.6Q#12A\"Y&!!F&Q!N%Q!?#Q!;01\"E7!#15A#/2Q\"Y$QAP'Q!Q&Q!M&A!K-A\"64Q#%5!#&4Q#$*!\"\"'1!O'!!O'Q!Q.1\"@51#/6!#/5A#03A##1A\"S3Q\"_6A#06Q#06A#05A#+/1\"B.!\"8/1\"8.A\"=-Q\"7/1\"9-A\"5.Q\"=3A\"L2!\"961\"<+1!O8!\"*8Q!_0A!\\;!\"@5Q\"9'A!B3Q\"-MA\"M?Q!R,1!5(Q!0$Q!0$A177!\"2VQ\"3I11%A31!KE!!3AA4*A!A01A=KEQ!ZYQ!IV1!1AA\"-!!'*A!3,A!?1A1'?$!!RXQ!OW1!6\"A\"-Q!%,A1,1\"A%@$!!W)A!Z)!!Q'!!?#!\"/1!2)Q!=,1A2@TA!Y81![I!!Q#!/;A\")+!!N)!!<*!!/ACA!Z%!#ZQR&>A\"H(1!C*1!J0A!Z-A!?;!!VJA\"<5A\"6)!!E31\"35A\"9-1!S=A\";MA#)8A\"E(Q!F*!!M/Q\"*2Q\"C.Q\"A.!\":-!\"5,1\"4,1\"4-1\"5-1\"7.!\"B.A#+.Q\"L3!\"Y61#05Q#041#)+1\"-,A\"5+A\",+1\"*/A\"F5A#+5A#)4Q##)A\"#,A\"0+1\"*(1!T+1\"'4A#$4Q#%3Q\"_*A\"$,1\"'+Q\"),Q\"*/!\"@61#16!#16A#101\"B,1\"00!\"G01\"I2A\"O5!#*51#-5!#&2Q\"Y11\"Q1!\"N0!\"H1Q\"R31\"T31\"Z41#!3Q\"^31\"^31\"]31\"]3Q\"U31\"Y3Q\"Z4!\"Z2Q\"[21\"R2Q\"W3Q\"[4Q#%5!#&5!#'41#$.!\"<+Q\"%+1\")1!\"N5Q#,6A#+6Q#161#1'Q!P%11;!!A1*Q\"%6!#,7!#16Q#/5!#&(1![&Q!N&A!O'Q!T3Q\"`5!#&5!#&5!#'+!\"''Q!Q&Q!N(A!Z5!#15Q#/6!#+5Q#04A#)41#'5Q#/6Q#06A#06!#05A#,11\"E-Q\"5.Q\"<.1\"9/1\";,Q\"6-Q\"5.!\"84A\"I2Q\">8!\"B?Q\"Y4Q\".2!\"+6!\":'Q!<)A!G5A\"!91!^41\"&81\"75!\"6(Q!A1!\"(L!\"MAQ!P,Q!2(Q!0$11/&1!55!\")V1\"8K1!'B#1!LEA!6!1.,A!J0!1;GU!![:!!MW!!3B1!,A1&*A!2-A!:/A1,6B1!B4A!BEQ!4B!!+AA&)Q!0)1!0+Q1(HFQ!Z)!!WYQ!J&!!4!Q**Q!B,115/1\"_-A\"A4Q#(6A#051#06!#00A\"O+A\"-,1\"4*1\"\"1A\"V5Q#-6A#&5Q#,01\"E(A!T+Q\".&AQK.Q\"A41#\"4A##4!#!0A\"H*A\"#+A\"-+A\",2Q\"U7!#17!#17!#15!#%-!\"6,A\"3.1\"=3!\"Z5A#.61#'5!#+4A#%31\"U1A\"Q1A\"S3Q\"Z5!#$5!#&41#\"4Q#%31\"]3A\"\\3!\"X31\"\\3!\"]31\"^4A#!4A#$3Q\"_3A\"]5!#$5!#&5!#&5!#'6A#$3!\"Z0!\"A11\"I5Q#+6Q#-6!#16A#17!#1-Q\"?#AA;%!AE31\"[7!#17!#16Q#/5!#$+A\"0&1!O%A!I.A\"=4Q#%5!#&5!#&5!#).1\"?'1!P'!!P.Q\"B6Q#+61#)4Q#.61#06!#05Q#06Q#06Q#06A#06!#05!#0/!\"E.1\"8.A\"<.A\"<.Q\"9,1\"4-!\"5-A\"731\"I2Q\";8!\"GAQ#&71\"81!\"&8Q\"H)1!H)!!E61\");A!]6Q\"-6!\",9!\"@(Q!J.Q!ZGA\"TCQ!V0A!7)1!0%!!/$Q!3/!!]OA\"GOAQ0BCA!K%A!;RQ$,A!?-A!C<31(WY1!VIA!>DQ!1AA\",!!*+1!7-1!;-111111&2B1$/1A&*A!.*1!3)Q!0-QA'J61!Z)!!XY1!M6A!4RA,+!!>,A11>#A!U8Q!XH!!P41*>!\"',1!U(A!=)A!4.!!S:A\"7LQ#&9Q\"G'A!E(A!M/1\"&2Q\"I/A\"D.!\"6-Q\"5,Q\"0,Q\"2,Q\"5-1\"5-Q\"6/!\"N+Q\"35Q#05A#051#06A#-4!#)+!\"&+!\"((A!W4!#.61#+51#(5!#,5!#+)!!X(!!S&Q1E1Q\"R4Q#%3Q\"`41#\"3Q\"_,A\"-,!\"--A\"251#$7!#17!#17!#16Q#02Q\"Z,A\"30Q\"B41#(7!#(51#*6!#*6A#%5!#&3!\"\\31\"^4Q#%5!#&5!#&4!#!3A\"^3Q\"`3A\"^2Q\"[31\"]31\"^41#\"41\"^3A\"_41##5!#&5!#&5!#&5!#&5!#'5!#)5!#&3Q\"_4A#(5Q#.6!#+6!#-61#07!#141\"`,!\"./!\"E61#.7!#17!#16Q#141##01\"I&!!H(1!\\31\"Z41#\"3Q\"`5!#&51#(1Q\"S&!!N)A!^3!#!4Q#06!#*5A#)51#06A#06Q#06Q#06Q#05Q#06!#051#0/Q\"H-A\"5.A\";.Q\"<-Q\"5,1\"4-A\"5-1\"511\"<3!\"=7A\"AAA##:1\"@0Q!]8A\"G+!!R'A!<3A\"!91![71\"!4A\"(9A\"D*A!P+!!NA1\"SHA\"-61!>*Q!1&1!/$A!/)A!FDA\"JTAQKEBQ!I%Q!DD!\"0Q16,!!A01Q8JF!!YIQ!T8Q!>4!!1!!\".QA$,!!1+1!8,!!7,1!7+1!3+!!3*A!5+Q!)9CA!TH!![*!!V81!F5A!01!1)Q!=.!12A3A!UX1!Z8Q!O#Q:5Q\"7+Q!U>!\"ELQ#,6A\"<(Q!E*1!K/Q\"*2Q\"I/A\"D-A\"6-Q\"5,Q\"*.1\">-Q\"<-1\"5.Q\"9,!\"1,A\"25Q#051#051#06A#+6!#0/A\"F)1!X*A\"\"51#/6!#)5!#&5!#&5!#*/!\">$A1='A!Q31\"\\41##3!\"\\3!\"\\3A\"_1Q\"Q-!\"301\"L61#.7!#16!#17!#17!#16!#+3!\"S4!\"^6!#/5Q#15A#-5Q#)5!#*5!#(5!#&5!#&5!#&5!#&5!#&3Q\"`4A##3Q\"`4A#$31\"]3Q\"`3!\"]3A\"_4A#$4A#$5!#&5!#&5!#&5!#&5!#&6!#)6!#+61#(6!#&6A#(6A#+6A#061#-7!#17!#16A#141#'61#-7!#17!#17!#16Q#14A#(3!\"\\.!\":1!\"P5!#&5!#&4A#$41##5!#(5Q#+.1\":0A\"M4Q#06A#&4Q#'5Q#'5A#/6!#06Q#06Q#06A#05A#06Q#+4Q#021\"T-A\"5.!\"8-Q\"5-Q\"5,A\"3-!\"/-1\"50Q\"@4A\">5Q\"BAA#!?!\"R1!\"#6!\"411\"'&1!7.Q![8A\"$8!!^1A!W9Q\"C0A\"#'Q!B8Q\"7KQ\"I@Q!T-Q!5(1!0$A!/%A!31Q\"\"O!\"=PQQ5D3A!I%1!>#A%.!A>+Q!C11A4BDA#R81!U9!!I6A!;D1!6C!!0!Q$.1A*.!A*.!A*0!Q)7SQ!FF1!T(!![*!!WI!!FEQ!2Q!.*A!=+1!88B1%OF!!UXQ!UFA!DQ!T4A\"&(Q!C'Q!7+QQ(J$Q!\\31+U1\"U61\"7'1!<01!_41\"$.Q!G?1!`J1\"L/!\"\")A!I31\"311\"$,A!RB!\"KL1#/21\"/)A!A)Q!P0A\"01A\"H1!\"G,Q\"6,1\"4.1\"93Q\"U3!\"V-Q\":-Q\"5,!\"1/Q\"G6!#05Q#04Q#*51#.5!#05!#--!\"20A\"L61#-51#)5!#&5!#&5!#&4!#'-!\"2/A\"B4A#$4!#!5!#'5!#)4A##4!#!2Q\"Z6!#,7!#17!#16!#17!#17!#16Q#15Q#15A#16A#(51#.6A#&5!#+7!#%5A#)5!#*5!#&5!#&5!#&5!#&5!#&4A#$3Q\"`3!\"]3!\"\\3A\"_4!#!4!#!4A#$4Q#%4!#!5!#&5!#&5!#&5!#&5!#'51#)61#(5Q#+5!#/61#-5Q#,5A#,6Q#06Q#17!#16A#16Q#17!#17!#17!#17!#16!#,4A#%3A\"_4A#$4Q#$31\"^3A\"^31\"^5!#&5Q#(41#&4Q#*5!#-4Q#'4Q#%51#'51#+5A#06Q#06Q#05Q#051#05Q#,6A#'3Q#$-!\"5-1\"8-A\"7-1\"4,!\",-A\"),A\"3.Q\"93!\"A5A\"B>Q\"`CA#\"7Q\"62Q\"061\"?(!!B*!!N61\"$9!!\\5Q![6Q\",81\"B)1!L.A!XCA\"UJA\"061!G+A!1&!!0%A!1(1!<:Q\"8RA\"1JQA(F3A!IU!!.1A3821&NV1!U7!!S6A!JRA<@!\"4.!!Z'Q!9'Q!0/A1(F$!![C!/TQ2J7A\"=(1!9-Q!S6Q\".0!!K9!!XFA\"K71\":(A!G0A\"'31\"2-Q!S81\"=O1#911\"&1!\"\"EQ\"PI1#.1A\"&)1!C+Q!T-Q\"&1A\"D2!\"S/A\"E,A\"5-1\".3Q#\"4Q#'4Q#&4Q#(11\"J1A\"Q6!#-5!#-4Q#&4!#!4Q#%5!#,6!#06!#051#05A#+4A#$3Q\"`3!\"]4!#!4A#&4Q#&5!#&3Q#!5!#+6Q#17!#17!#15A#061#07!#16Q#15Q#16A#16!#17!#16Q#161#16!#-6A#+51#-51#)6!#)6Q#'6A#'5!#*5!#&5!#&5!#\"5!\"`5!#&4!#!4Q#%3A\"_4!#!31\"]3Q\"`4A##3Q\"`4!#\"4Q#%5!#&5!#&5!#&5!#&5!#&5Q#(5A#+51#'51#.61#,5A#*6!#+6!#-5A#.6Q#16Q#16A#16Q#17!#15Q#16Q#16Q#15!#*4A#$4!#\"4A##4Q#(6A#15A#.41##5!#&5Q#,5Q#.4Q#%41##3A\"^3A\"_4Q#'4Q#06!#06!#051#04Q#)4!#!4Q#%4Q#'21\"[,Q\"7,1\"4,1\"2/Q\"F4A\"`1!\"N-!\"8.1\"61!\"75!\"@#1&9\"A)1A1+.!14.119-A1:.11:.A15/!A/4!1);\"Q&@#Q$HU1!O&A!O%!!NU1\"I\"Q3C!\"!7A\".,A!L'Q!;'1!3-Q!)@3Q!TCA)WQB-FA\"Y.!![)!!D2Q\"%4A\"$1A!H=Q\"#EA\"I2A\"*(Q!G3A\".3Q\"3-A!X9Q\";N!#-<1\"M,!!W*Q!H,1!\\0!\"/11\"K2!\"T.!\"<,Q\"2/A\"@4Q#%4Q#%4Q#)5!#/4!\"Z4Q#&5Q#05A#-4A#$41##4!#!5!#&51#-51#05A#,51#(4!#!4A#'41#$41##4A#&4Q#&41#\"3Q#!5Q#.6Q#16Q#17!#17!#17!#17!#16Q#161#16!#16A#17!#16!#17!#161#06A#06Q#(5Q#+5Q#)5!#)5!#)5!#&5!#&5!#&5!#&5!#&4!#!4!#!41#\"3Q\"`3A\"^3A\"_41#\"3A\"_41#\"5!#&4!#!5!#&5!#&5!#&5!#&5!#&5Q#(5Q#&61#*6A#,51#(5Q#+61#'6Q#)6!#.61#16Q#15Q#161#17!#161#16!#16!#15Q#/3A\"`3A\"_3!\"\\6!#-7!#17!#14A#*4A#$5!#&5A#*4Q#%4A##3Q\"`4A#%4Q#%4Q#,51#05Q#04Q#04Q#'41##3Q\"`4Q#$41#%.Q\"?,Q\"2,Q\"11Q\"P4Q#%3A\"^0A\"J.1\"80!\"62Q\"77!\"G@1#$EQ#*?Q\"R4!\"*8!\"?/A\"%(1!<-Q!Z6!\"!8A\"!6!!^5Q\".7Q\">.A!T)Q!J5A\"2E1\"LEQ\"\"71!;,Q!-(1!0&Q!0%A!1'Q!@1Q\"\">A\"@FA\"+I!QII210J#!!KD!!I$!!GT1!G4A!E4A!E$1!ET!!GDQ!JUQ!L%A!M%!!L%Q!KD1!IC!/G2!D@!\"\"7!\".-Q!V(A!?'1!4)!!02B!&ECA!UC!3TQRKBA\"Y+Q!O)A!F21\")4!\"'/Q!M;!![E1\"A71\"6)A!I.Q!`6Q\"@-Q!\\1!\"!F1#\"F!#(0!\"!*A!L,1!V.1\")0!\"=4!\"T11\"M-!\"8,Q\"72A\"W4Q#%4!#!4Q#%5A#,4Q#,51#05Q#/4Q#)41##4!#!41#'5!#'6Q#*5Q#,5Q#)4A##4Q#%5Q#14A#'4!#!4A##4A#$5!#&51#(7!#15Q#15Q#17!#17!#17!#17!#16!#15A#16A#.5A#-6A#16A#16!#.6A#)5Q#.5!#,5Q#)5Q#)6A#(6A#&5!#*5!#&5!#&5!#&5!#&5!#&41#\"3Q\"`3Q\"`3!\"]3!\"\\31\"]4!#!4!#!41##4!#!5!#&5!#&4Q#$5!#&5!#&51#'51#*51#(7!#(5A#-6!#*61#)5Q#+5Q#,6Q#16Q#16Q#16!#15Q#16!#161#16Q#16A#14Q#)4A##3Q#!6A#16A#16A#15Q#-4Q#%5!#&5!#'4Q#%3Q#!4Q#,5!#.4!##4Q#&5Q#051#04Q#,4Q#%3A\"_41#\"41#\"4Q#'1Q\"S,Q\"3,A\"51A\"S4Q#%41#\"2A\"W/!\"@/A\"81A\"731\":9A\"QCA#*FA#)!!D2A!3+1!0'Q!0&1!0&Q!4(1!:.1!Q61\"(=1\"0BQR&D11ZDAADF!15HRA1HBA.GRQ.HC1.H3!.H3!.F\"A1C1!>BQAT?Q!]9!\"'2Q!`-!!N)!!>'!!8(Q10.11,9B!\"LCQ&QQALNA\"L;Q\"C,A!R*Q!M4!\"-51\"&0Q!R71!WB1\"98A\"8*A!K.A!W7A\"<0A\"!/1![@!\"JH!#%71\";,!!V,!!S-1!^0A\"22Q\"O3Q\"W0Q\"K-A\"0.Q\"A4A#$41##3Q\"`4Q#%51#-6!#051#05!#-4Q#%4A#%4!#\"4!#\"4A#%51#+51#-4Q#)3A\"_5!#+7!#15Q#-3Q\"`4A#$41##3A\"_5A#-7!#15Q#161#17!#17!#17!#16A#15A#15Q#15Q#.5A#-71#+61#-5Q#.5Q#+51#)6A#%51#)51#)5!#(5!#'5!#&5!#&5!#&5!##5!#&5!##3Q\"`4!#!3A\"_4!#!3A\"_5!\"^3Q\"`3Q\"`3Q\"_5!#&5!\"^5!#&41#\"5!#&5!#&5!#&5!#(61#(5!#.51#'5!#*5!#(7!#&5!#+6A#16Q#16A#161#17!#151#151#161#16Q#161#15!#&5!#'6A#17!#17!#16A#141#(3Q\"_4Q#(4Q#%4A#$5A#-6Q#05A#-4A#$51#*5Q#.4Q#(4A#(3Q\"`4Q#(41#$4Q#%4A#&0!\"G-Q\"<3!\"[4Q#%31\"]3Q\"`2!\"L.A\"=/1\"61A\"73Q\"==!\"WCA#)FQ#*:!\";41\"+61\"<+Q!T(1!A-Q!R4!!_51!Y51!Y6A\"&:A\">3A\"/*1!I+Q!P7A\"7CA\"=G!\"!<1!=3A!0.1!0(A!0&A!0%A!5'!!2(!!@+!!K/A!^4Q\"*6!\",8!\"151\"0+Q!M,!!T3Q\"50A\"&/!!X=1\"HHA#/:!\"F.Q![*Q!U-A!Y.!\"01Q\"E41\"Z3!\"[/A\"=-!\"82Q\"Y4!#\"4Q#%4!#\"4Q#%61#)5Q#,5Q#/5!#&41#\"51#,51#-4!#\"51#)6!#)61#'4Q#%4A#&6Q#17!#15Q#/4!#$3Q#!3Q\"`41#%6A#061#15Q#15A#17!#17!#17!#161#16!#16!#15A#.61#-61#17!#)6!#.5Q#+51#+51#+51#'5!#&5!#'5!#'5!#&5!#&5!#&5!\"_4!#\"4A\"]3Q\"`41#\"4A#$3!\"]3Q\"`31\"\\4!#\"4Q#%3A\"^5!#&4Q#$4A#$5!#&5!#&5!#&5!#&5!#'5A#(6!#)6A#'6A#'5A#+51#,5Q#*5A#/6!#061#161#161#16!#15!#16!#15Q#16Q#15Q#06A#07!#16Q#15Q#15Q#161#/4Q#&4Q#%4Q#%4Q#%61#.6Q#06A#041#'4A##5!#'5A#+4Q#&41##5A#05Q#/4A#%4Q#%3Q\"`1Q\"S4!##4Q#%41##4Q#%2Q\"Y01\"F01\"8/A\"51Q\"571\"F<1\"UC1#)EQ#'=1\"F5!\"06A\";.A!`(!!E)A!L2Q\"\"5!!\\51!X5Q!]7Q\"581\"71A\"%+Q!J.1![7!\"4C1\"AF1\"0AQ!O9Q!D3Q!7.!!6+!!3'A!2'!!1'!!2'A!5&A!4&1!6&A!;'1!<&A!<'1!;&1!6'1!6'!!7(!!4)Q!7,!!1.Q!,4A1&?\"!%H\"13N!ARKABBC!\"R3!\",+A!M,1!T21\",71\"231!X2Q!S;!\"&Q\"KH!#'<1\"H0A\"#-1!T-1!Z.A\".0Q\"C3A\"U41#\"11\"Q-A\"90A\"L4Q#$4Q#'51#-41##41#\"5!#.5!#/6Q#$4A#$5!#,6A#05Q#041#\"4A#$4Q#&4Q#%3Q#\"5Q#06Q#17!#16A#141#'4!#\"4A#$6!#06A#16!#15A#16A#161#17!#16A#16A#161#161#*6!#+5A#'61#/5Q#/6!#/6!#*61#+5!#&5!#&5!#'5!#&5!#&5!#&5!#&4A#$4!#!4Q#%3A\"_3Q\"`3A\"^4!#\"3!\"]3!\"\\3!\"\\4!\"[3Q\"_4A#\"41#\"41##4A#$5!#&5!#&5!#&5!#&5!#'5!#)5!#'5!#)6A#&5A#+51#*5A#(5Q#/61#061#16A#15Q#16!#16Q#(51#15Q#16Q#16Q#16Q#17!#16A#16!#16A#16A#15A#+3Q#!4!#!4!#!61#.6Q#06Q#06A#04A#$4Q#&4Q#+4Q#&41##5A#06Q#051#-4!#\"4Q#%4A#)4Q#+4Q#%41##5Q#*4Q#)2A\"X/1\"D.A\"70Q\"02A\"971\"FA\"CD1\"CCQ\")A!!T=!!E8Q!;4!!41Q!5-Q!4,Q!1+!!1+1!0*Q!/*!!0*Q!0+1!1-!1+2!A'41A,8QQ*@1A'E114K!!UJAR0FQ\"E=A\"B3!\"),A!N,A!T2!\"*61\"25!\"$1Q!X81!];Q\"-81\"7/A![+1!M2!\"+7!\"@0Q\"&0!\"!E!1EC!ADF11DGAQKGQ!SFQ\"$H!\"5E1\"C@!\"C8A\"9A\"K?A\"^C!#&DA\"\\=A\"I81\"97A\"=5!\"6,Q!X*A!C*A!L.A!X3!!Y4A!Z4!!W4A\"\"5Q\"$8!\"07Q\"93A\",01\"!.1!_-1!]/Q!Z1!!`1A\"%6A\"-8!\"49Q\"39A\"49A\"5<1\";:A\"::A\"9:!\";61\".2Q\"(0Q\"!-A!Z-!!V.A!\\01\"!41\"+7A\"75A\"&4A!]3Q!Y5Q!^8A\".9!\"821\"(-Q!S-1!U01\"%21\",01\"!/Q!_8!\"8BA\"V?!\"R7!\"7.Q!`-A!Y,Q!]-1\"-.Q\":21\"P4A#\"4Q#.4Q#'3Q\"`4!#\"4A#%5Q#/6Q#06Q#061#/4!##4Q#%4Q#&3Q\"`5Q#/6Q#06!#06A#05Q#04A##3Q#!4A#%6!#.5Q#06A#06!#16A#16Q#16A#16Q#/6A#15Q#15A#.6!#-5A#15Q#16Q#15A#15Q#16!#15A#)61#)6A#$5Q#&51#,5A#*61#&51#)5!#&41#$4A#$4Q#$4A#$5!#&5!#&4Q#\"3Q\"`4Q#$3Q\"^3Q#!3A\"_31\"^3A\"_2Q\"[3!\"Y3!\"Z4!\"[31\"]3A\"_3!\"]3Q\"`3Q\"`41#\"2Q\"[4A#$3Q\"`5!#&4!#!5!#&5A#*51#)5!#(5!#&5!#*5!#&5A#)5A#-6!#,5Q#.6!#(5!#)51#(6Q#(5A#16A#15Q#16!#16!#161#15Q#.5Q#/51#16Q#15A#04Q#*61#06A#05Q#06A#06!#061#041#%4Q#%4!#!51#,6A#061#061#061#04A#'4A#$4Q#%4A#$4A#*6Q#06Q#06A#05!#-3!\"Z/1\"C.Q\"7-A\"11A\"44A\"791\"D=1\"VB!##D!#\"B1\"X:Q\"D71\"771\"@2Q\"1+Q!Q)!!G*!!G-Q!Z3A!`5A\"!4Q!\\5A!Y6!\"\"7A\"'7Q\",71\"271\"341\",2!\")1!\"\".!!]-!!U-!!Q,1!O,A!P,1!V,1!V,1!X.1!^11!_11\"(4!\"15A\"/71\"561\"261\")3Q!`3Q!\\6!!]7Q\"&8A\"25Q\"/1Q\"&,Q!Q+Q!W2A\")3A\"31!\"%/1!_41\".>!\"J@A\"W;A\"A21\"*.1!]-A!Y-Q!^-!\"+/Q\"92!\"L41#%4Q#/4Q#(4Q#%4Q#%4!#$5Q#-6Q#06Q#06Q#05A#,4Q#%41#\"4A#$51#(6A#05Q#061#06Q#05Q#03A\"_4!#\"5A#.6A#06A#06!#05Q#16A#17!#17!#17!#15A#151#17!#'6!#/5Q#161#16A#16!#16!#16A#&5!#*5!#(5!#*6!#)51#'5A#*5!#*5!#&5!#&5!#&4Q#%3Q\"`4Q#%4!#!4A##4A\"]3!\"]4A#\"4!\"^4A\"[3!\"\\31\"^2Q\"\\3!\"\\31\"]3!\"\\2Q\"[3!\"]3A\"_2Q\"[3A\"_3Q\"`41#\"3A\"_3A\"_3!\"\\4A#$4Q#%4A##4A#$4Q#%5!#&4A#$41##5!#&51#'61#&5Q#-5A#,51#*7!#'5!#,5!#*5Q#*5Q#16A#161#16A#16!#161#+5A#,61#-5A#16A#06Q#06Q#061#061#06!#061#061#061#03Q##3Q\"`4Q#*61#06A#05Q#06A#06Q#051#*4A#$41#\"4A#$5Q#06Q#061#06A#05A#031\"`0Q\"M/Q\"7.A\"70!\"62!\"461\"@:!\"I=Q\"WAQ#\"E!\"_AA\"W;A\"@8!\"971\";2!\".-Q!^+Q!J(Q!I+A!O.Q!]2A!`5A\"$51\"\"5A!^4Q!X5!!X4A!\\4A!`5!\"!61\",71\"-6Q\"081\"48A\".61\"+71\"07A\",5Q\"+5A\"+61\"*4Q\"!3A!\\6A!\\5Q!_7Q\"'9!\"+7!\"-51\".0A!`,!!R+1!M-Q![2A\"*4A\"71A\"+0A\"%61\"1=Q\"M@A\"T;!\"I4!\"2.1!`-A!Z,Q![-!\"#.1\"10Q\"C1Q\"T41#%5Q#051#-4A#$4A#$4A#&6!#061#06!#06!#06Q#041#*3A\"_41#\"51#*6A#05Q#05A#06A#06Q#05Q#04Q#)5A#.61#061#06!#061#.5A#17!#16Q#16A#16A#16A#/61#(5!#+6!#-5!#*61#15Q#16!#151#15A#,51#'5!#&5A#'6!#)51#(51#'5!#&5!#&4A##3A\"_41##41#\"3Q\"`4A#$4!#\"3Q\"`3Q\"`3!\"\\3!\"\\3Q\"`2Q\"[3Q\"\\4A\"^31\"]31\"]41\"`3A\"^41\"Z4!#!3A\"]4!#!3Q\"_4A#$31\"]4Q#%41##3Q\"`4A#$41##4A#&3Q#\"5!#&4A#$41##4!#!5!#'5!#&6Q##5A#.6A#$51#)61#'6!#(6!#(5Q#,6!#16Q#15Q#16!#16!#.51#-5A#)6!#06!#06Q#06Q#06Q#061#06!#06!#061#061#06!#04A#'4Q#*61#06A#05A#061#05A#06!#05A#)41#$3Q\"`5A#06Q#061#06!#06Q#05Q#/41#$2A\"Q/A\"C/A\";/1\"02!\"44A\"98!\"@;1\"L@1\"_C!#%CA#!BA\"U=A\"I81\"95A\"53Q\"11!\"$-A!W+1!Q*Q!L*A!S.Q!Y/Q!^1Q!_2!!_31!_3Q!]2Q!]1Q!S1Q!S01!R/A!Q0!!Q/1!P11!M3A!V4A!X41!^51\"#6!\"!6!\",61\"-51\"+0A!_.Q!],1!V-1!V-A!X01\"(1A\"*0A\")0!\"%2Q\")8!\";?1\"NAA\"V=Q\"K7A\"60!!`.!![-!!Y,Q!\\.!\"&-Q\"70Q\"D1A\"R41#%5Q#/51#04Q#'4A##4Q#'5A#.61#06!#05Q#06Q#06!#041#&4A#%5A#*61#06A#06!#06!#06!#06Q#05Q#061#06A#05A#06!#.5A#-5Q#/6!#15Q#16A#16A#15Q#051#+5!#*6A#%5A#)5A#/5Q#061#06!#.51#)5!#&5!#&5!#&5!#(5!#'5!#*4Q#%4Q#%4Q#%41##4!#!5!#&5!#&4Q#$4A##3Q\"_4!#\"3Q\"`4!\"^41\"]3!\"\\3!\"\\3!\"Y4!\"]2Q\"Z3!\"X3Q\"V31\"]2Q\"[31\"W3Q\"\\3!\"Z31\"]31\"]3A\"_3Q\"`3Q\"`3Q\"`3!\"]3Q##41#\"41#\"5!#&5!#&5!#&4A#$4A#$5!#&5!#)61#&5!#/61#'5!#+5!#(5!#(5!#+5Q#/51#16!#161#15!#+61#$5!#(5Q#,5Q#061#06Q#06A#05Q#06A#05A#/5Q#/5Q#06!#061#05Q#06A#06Q#06Q#06A#06!#06!#06Q#051#/4Q#'4Q#-61#061#06!#051#061#06Q#051#.3Q##2Q\"R01\"J/!\"@/Q\"41A\"73Q\"86Q\"B;1\"N?A\"[AQ#%E!#'D!\"`AQ\"V=!\"H8Q\">61\"85!\"13!\"03!\"'-Q!],Q!R+1!O+!!J)1!J+1!S+A!S+!!N*Q!M*A!K+A!K,!!N,Q!P-Q![/A!_/1!T-Q!R-A!^,A!S+A!O*1!E*1!R.!!T01!`11\"*2!\".1Q\",2Q\"+1A\"'6!\"61\"W@A\"T:A\"I4A\"10Q!`-A!Z,A!X,Q!Y+A\"$-Q\"1.A\"=0A\"K2!\"U41#%5Q#06A#04A#*3Q\"`4Q#(6Q#05Q#06!#06!#061#06Q#05Q#04Q#.5A#/61#06!#05Q#06!#06!#06Q#06Q#06Q#06A#06A#05A#.6A#&51#-7!#*61#17!#161#161#15A#,5Q#)6!#(5!#+61#'5Q#/51#(6!#+5!#&4Q#&5!#&5!#&5!#&5!#&5!#)5!#&4Q#%41##4!#!3Q\"`5!#&5!#&5!#&4!#!3Q\"`31\"^2Q\"[31\"]2Q\"[2Q\"[3A\"[4!\"^31\"]3!\"]3Q\"Y2Q\"[31\"Z3A\"]3Q\"_3!\"[3Q\"`31\"Z3A\"_3!\"\\4!#!31\"^3A\"^3A\"_41#\"4!#\"41##4A#$41#\"41##5!#&4Q#%3A\"_4A#$5!#'51#+5A#'51#'5!#&5!#&5!#&5!#&5!#'61#-6!#,6Q#+6!#/5A#,61#(5A#&5Q#,6!#061#06Q#05Q#051#06!#.5!#)5Q#,6!#/6!#06A#06Q#06Q#06!#05Q#05Q#061#06Q#061#06A#05Q#06Q#06Q#06A#061#06!#06A#06Q#061#051#-4A#!21\"T0Q\"N1A\">11\"921\"831\":71\"A9A\"J3!\"'/!\"\"-Q!Y-!!X,A!Z,1\"\",1\"/-!\"6/A\"B1!\"O3!\"Y41#$5!#06Q#06!#051#,61#/6!#05A#05Q#051#05Q#061#06Q#06Q#06A#06A#06!#05A#05Q#+6Q#+61#-6Q#06Q#06!#061#05A#/5A#-5A#)51#,6!#/6Q#16!#151#151#/5Q#'5!#'5!#*6A#$51#)5Q#'6!#.5Q#*4Q#%41#\"41##4A#$4A#$4Q#%5!#&5!#&4!#!3Q\"_4!#\"3Q\"`3A\"_4Q#%3Q\"_3A\"_3Q\"`3Q\"^3A\"]3A\"]3!\"\\2Q\"[4!\"]3A\"^3A\"X3A\"Z31\"]3Q\"X31\"Y3!\"X31\"Y3A\"Z41\"^4A\"[31\"^4!\"^3Q\"[2Q\"[31\"]2Q\"[4!\"^4!\"\\4!#!3Q\"`5!#&4!#!41##3A\"_4!#!4A##4!#!5!#&6!#)7!#%5!#)5!#&5!#&5!#&5!#&5Q#*5!#+6A#(5Q#/51#*5!#+6!#)4Q#'51#,51#06Q#05Q#06!#05A#.7!#%4Q#+5!#-6!#051#06A#06Q#06!#05Q#06A#06!#05Q#06A#06!#06Q#06Q#06Q#06Q#06!#06!#05A#05Q#06!#06Q#06!#05!#-4!#%3!\"Z2!\"L0Q\"B1A\"91Q\"72A\"941\">6Q\"C:Q\"O=Q\"W@!\"_CQ#(CQ#)EA#'EQ#%AQ\"V?Q\"NQ\"O?!\"[A1\"X@!\"Z>A\"R9Q\"?4!\"00!\"#.1!]-A!Y-1!X,!!X+A\"!+A\",-Q\"5.Q\"<0Q\"L1!\"O1Q\"T4Q\"`5Q#+6A#06Q#06Q#06Q#06Q#05Q#06A#06!#05Q#061#06Q#06Q#06Q#05Q#05Q#051#-5!#*7!#&51#06A#061#06Q#05Q#051#051#)5A#)51#*5A#-6!#05A#16!#15Q#-61#)6!##5!#&5!#&5!#*51#+6!#'51#(5!#&4Q#$31\"]4Q#%5!#&4A##4Q#%5!#&5!#&4!#!31\"^3A\"_4!#!31\"]3Q\"`4!#!4!#!31\"]3A\"\\31\"\\3!\"X3!\"[3Q\"`31\"X3Q\"^31\"W3A\"Z31\"]3!\"Y4!\"]3Q\"Y41\"]3A\"V2A\"[2A\"Z31\"W2Q\"Z3A\"_31\"]4!#!31\"^3Q\"X31\"]3!\"\\4!#!5!#&41##3A\"_41##3!\"\\3A\"_4!#!4A#$41##4Q#*5!#(5!#&41##4A#$41#\"5!#%6A#&4Q#,5A#)5Q#-61#$5!#%4Q#%4Q#%5Q#+5Q#06!#06A#05Q#,5A#061#$51#%4Q#*6A#05A#05Q#06Q#06!#051#.5Q#-4Q#)51#-6A#06!#06A#06Q#06Q#06Q#06!#05Q#.3Q\"[2A\"Z4A#&6A#.7!#07!#16!#16!#15!#'4!#!2A\"W3!\"C2!\"@1Q\"81Q\"73Q\"861\"B7A\"D:A\"L<1\"S?1\"^A!#$BA#$DA#)E1#%E1#\"E!#\"D1\"YB1\"_AQ\"Z@A\"Y@!\"Y?A\"Q>1\"N>A\"O?A\"XA1\"W@A\"YAQ\"]CA##CQ#&BQ#$A!\"`=1\"R:!\"F7!\"<3A\".0Q\"$-Q!\\-1!X,A!X,Q!X+Q!X,1!]+!\"\"+Q\"0,A\"6-1\"90!\"H1!\"N11\"P2Q\"[3A#!6!#06Q#06Q#06Q#06Q#06!#06!#06!#05Q#-6A#+5Q#06Q#06Q#06Q#06!#05Q#05Q#-4Q#)6A#'4Q#16!#06Q#06!#06!#05Q#06!#$6A#%51#(6!#&6Q#+51#06!#.51#+5!#*5!#&5!#&5!#&5!#)6A#%51#(6!#%5!#'5!#&3Q\"`4A#$4!#!41#\"5!#&4!#!5!#&3Q\"`41#\"31\"^31\"^4!#!3!\"\\31\"^2Q\"[2Q\"\\3A\"Y3A\"_3A\"_2Q\"[4!\"\\31\"]31\"X3A\"[3Q\"\\4!\"X3A\"Y3!\"Y2Q\"Y3A\"X31\"X3Q\"^31\"]4!\"X2Q\"[3Q\"^3A\"_2Q\"[3A\"_31\"^31\"]31\"]3!\"\\2Q\"\\3A\"_41##41#\"4Q#%3A\"_3A\"_3Q\"`4!#!4A#$5!#&5!#'5!#*4A#$3A\"_3A\"_4Q#%5!#'6A#\"51#-5A#)51#'5!#&4Q#%4Q#%5!#&51#(5Q#.61#/5Q#.5Q#*5A#*4Q#*4Q#%5!#/5Q#06!#061#061#06!#06Q#(5!#.6A#&51#05!#05A#06Q#06Q#06Q#06!#06!#04Q#*1Q\"R11\"O2A\"Y3A\"^5!#-6A#06A#06Q#06Q#061#.5!#'3A\"]31\"Q3Q\"L2!\"C21\";1Q\";31\";31\";3Q\"<7!\"@8!\"@8Q\"B:!\"M!\"X>Q\"Y?A\"Z?A\"Z@Q\"Z?Q\"Z@!\"Z@1\"\\?Q\"Z?1\"W=!\"X51\"421\".0A\"'/1!`.A!]-A!\\-1!Y,Q!Y+Q!X*1!W)Q!Y*Q!`*A\"#*Q\"',!\"1-A\"9/!\"A0A\"J0Q\"M1!\"O2!\"V4A#&5Q#06Q#06Q#06Q#061#061#05!#/51#.6A#*61#05Q#06A#05Q#061#06A#05A#05Q#-5!#'51#)5A#-5A#,6Q#06Q#061#05Q#.4Q#+5A#)4Q#(5!#*5Q#+6!#,6!#+5Q#)6A##51#$4Q#%5!#&5!#&5!#&51#'51#(5!#&41##4!#!3A\"^4!#!41#\"41##4Q#%4A##31\"^41#\"3Q\"`2Q\"[4!#!31\"^3!\"\\3A\"_41#!3Q\"X31\"Z3!\"[3!\"[3A\"]3A\"[4A\"Z3!\"[31\"\\3!\"Z3!\"Z31\"Z3!\"Y3!\"X31\"X31\"^31\"W3Q\"\\31\"Y3Q\"Z3A\"Y3Q\"Y3Q\"`3!\"]31\"]31\"^2Q\"[3Q\"`31\"\\41\"]3Q\"`4A#$3A\"_4!#!41##31\"]3Q\"`4A##3Q#!5!#&5!#&5!#&41#\"4!#!41##3Q#!4A#'5!#&5Q#,6!#(5!#*4Q#%4Q#%4Q#%4Q#%5A#&5Q#)5Q#.5Q#.6!#%51#(4Q#%4Q#%5!#*5Q#051#06!#06!#06!#051#.4Q#-4Q#)5A#05Q#05Q#05Q#05Q#06Q#061#051#05!#(1Q\"R01\"I0Q\"M11\"P31\"]4Q#'5Q#06!#06A#06!#06!#05!#&4!#!3Q\"[3A\"T3!\"O3!\"E1A\"D1A\"=0A\";01\"<1Q\"81Q\"62A\"231\"131\"12Q\".2A\".1!\"00Q\"10A\",/1\"$/1\"$.1\"\".1\"\",Q!`.!!^-1\"#-A\"\"-Q!_.!!^,1\"!,!!_*A!Z*1!X(Q!W(1!Z(1![*A\"$+A\",,!\"2,1\"4-A\"9/A\"C0!\"H0Q\"M11\"P31\"^4Q#+5Q#05Q#06A#06!#051#04Q#.4!#%41#$4Q#,6!#+5Q#/5A#061#06Q#061#05Q#051#-5Q#%5Q#)6!#+61#*6!#05A#05A#04Q#.6!#&4A##41#\"4Q#&5A#+5A#*61#)5Q#)5A#%5!#&4A#$4A#$41#\"5!#&5!#(61#(5!#'4A##3Q#!3Q\"`41##3Q\"`3Q\"`4A#$3Q\"`4!#!31\"^2Q\"[41\"[31\"]3!\"\\4A##41\"^4!\"]31\"X31\"^2Q\"[3Q\"\\3!\"Y3Q\"U3Q\"\\3Q\"U3Q\"\\31\"Y3Q\"Z31\"W31\"W3!\"Y3!\"X21\"V3Q\"U3Q\"U3!\"\\2Q\"[3A\"]3Q\"W31\"\\31\"X31\"X3Q\"Y3!\"\\3Q\"`3Q\"X2Q\"[3!\"[4!#!3!\"]4!#\"31\"]3Q\"`2Q\"[2Q\"[31\"^3A\"_41#\"4A##5!#&3Q\"`4!#!31\"]4!#\"3!\"\\5!#&5!#'61#&51#*4Q#%4Q#%3A\"_41#\"4Q#%4Q#&51#)6!#.5A#/5!#(4Q#'4Q#%4Q#&4Q#'4Q#(5Q#-5Q#*5A#/5Q#06A#(5Q#'5!#+5!#-5!#/51#06!#05Q#06!#05Q#05A#05!#.1Q\"S0Q\"M0A\"K0Q\"L0Q\"K3!\"W3!\"Y4!#'5Q#(4Q#*4Q#)31\"]3!\"Y2!\"V1Q\"R0Q\"J01\"I/Q\"E/A\"E.Q\"@.A\"<.A\";.A\";/1\"6/!\"501\"501\"4/Q\"0/Q\"./A\"0/1\")/1\"(/1\"%.1\"$,1\"(,1\"\"+1!`*!!Z(A!W'A!W'1!R&Q!N&1!O&A!Q'Q!W(1!Y)1!_*1\"!*1\"\"*A\"\"+Q\"/.1\"=01\"H0Q\"M11\"P3Q#\"51#.61#061#06!#04Q#*4!#&2!\"W0A\"L2A\"X5!#+5!#.5!#/5A#06!#061#05Q#05!#04Q#,4Q#&5!#(51#*5Q#,61#-5Q#,5Q#,6Q#$4Q#)4!#\"4Q#%4Q#%51#(5!#(5Q#*5Q#+5!#,4!#\"41#\"31\"^3!\"]41#\"4A#$5!#&4A#%3A\"_4!#!3!\"]3A\"^31\"^4!#\"41##4!#!41#\"31\"^4!#!3A\"\\31\"[3!\"\\3Q\"]31\"Y2Q\"[3Q\"^3Q\"\\4!\"W3Q\"^3A\"V4!\"]3!\"[3!\"[3!\"[3!\"Z31\"[3A\"W31\"X31\"X3Q\"V3A\"V2Q\"Z2Q\"Y3!\"Y2A\"Y3A\"]31\"W3Q\"]4A\"V2Q\"[2Q\"Z3Q\"Y3A\"Y3A\"Y3A\"Y4!\"^3!\"]3!\"\\3!\"\\4!#!31\"]3Q\"`4!#!31\"]3A\"_31\"]31\"^3A\"^4!#!4A#$31\"^3Q\"`31\"^3Q\"`4!#!4Q#&41#&4Q#'4Q#(4Q#%41#\"3A\"^4A#$4Q#%4Q#%6A##51#-5Q#&6!#)5!#&4Q#%4Q#%4Q#%4Q#%6!#-5Q#-71#*5Q#05Q#,6!#&5A#$4Q#'4Q#+6A#'5A#05Q#05Q#05A#051#04Q#,21\"Y0A\"L0Q\"N/Q\"F0Q\"M0Q\"M1A\"Q2!\"P2!\"W21\"W2A\"Y1Q\"P1Q\"T0Q\"L/Q\"F.Q\"@-1\"9+A\",*Q\"%*1\"!*1\"!*!!`*!!`)!!\\)A!](1!Y(1!Y(!!X&1!S%A!S%A!S%A!S$A!R%A!O%1!M$A!J$1!J$A!J%1!K$!!I$A!J&!!N%!!K&A!L'!!N'1!O'1!O)!!V*!!^-A\"6/Q\"F0Q\"M21\"W3Q#%51#05Q#/6!#/4!#!2A\"Y1!\"O0A\"L0A\"K1A\"T4A#)6!#,6!#-5A#-5A#.4Q#.51#*4Q#)4Q#)4Q#&4Q#%5!#*5A#)5Q#.6!#,51#,5!#'4Q#&41#\"41##41##4Q#%5Q#(61#(5Q#)4!##4!#!4!#!41#\"3Q#!3Q#!5!#&5!#&4Q#%4A##3A\"_31\"]31\"^31\"^3Q\"`31\"]3Q\"`31\"^31\"^31\"]31\"]3Q\"]3!\"Z3Q\"`2Q\"[2Q\"[2Q\"[2Q\"Z3!\"Y3!\"Y3Q\"]31\"]3A\"Z3Q\"Y3A\"Y41\"]2A\"V3Q\"U2Q\"[31\"X31\"X21\"X3!\"U2Q\"S3!\"X3Q\"U2Q\"U3!\"Y31\"W2Q\"Z2Q\"[4A\"^4!\"Y3!\"]3A\"\\3A\"\\3!\"\\3A\"Y31\"^3Q\"X3!\"\\3A\"V3!\"\\4A\"]3!\"X3!\"X31\"]3A\"_2Q\"[3Q\"`4A##3Q\"`4!#!3A\"_3A\"_2Q\"[3!\"]4!#!41#\"4Q#$4A#$4Q#%41##41#\"31\"^31\"]4!#!4Q#$5A#)5!#,6!#%5A#,4Q#%4A##4A#$3!\"]4Q#%4Q#*5Q#*51#+51#+6!#+4Q#(4Q#%4A#$2A\"Y2!\"T3A\"]5A#)5Q#,5A#+5Q#,5Q#,4Q#\"11\"Q0A\"J/Q\"E0A\"K0!\"G0!\"G/1\"C01\"J0Q\"M0A\"K0Q\"M1!\"O11\"P11\"O01\"I.Q\"@-!\"5+!\"&(!!T%!!K%A!D$1!A#1A>#1A>$1Q=#1Q>#1A>$!A=$!A=#AQ?#QAA$AA:#AAB$AA:#AQ?#A!<#A!;$A!4#1!9#A!6#A16#113#Q19&A!G)A!\\-!\"30A\"J0Q\"M1!\"N11\"P3A\"]31\"`31\"`11\"P0A\"K01\"J/Q\"E0A\"J0A\"K2!\"U4Q#&6Q#(6!#06Q#(5A#.6Q#'4Q#(4Q#*4Q#%4Q#%4Q#%4Q#(6A#'5A#+5Q#&6A#*51#$41##4A#$31\"^4!#!4Q#%4Q#'4Q#'4A#&4A#$4A#$31\"]3A\"_3Q\"`41#\"5!#&5!#&41#\"3Q\"`3!\"\\3Q\"`3Q\"`3!\"]3!\"]31\"]3A\"_3A\"_3A\"_3!\"]2Q\"Y3Q\"]3A\"V31\"]31\"W3!\"[3Q\"`31\"X4!\"\\31\"^3A\"W3A\"V3!\"X3Q\"[3!\"X31\"X3A\"V3!\"X2Q\"X21\"X31\"U3!\"T1A\"S2Q\"W2Q\"Z2!\"U3!\"W21\"U31\"T31\"W3A\"W31\"X31\"X2Q\"Z3Q\"Y31\"Z4!\"W3!\"]31\"[4!\"[31\"Y41\"]31\"]41\"Y3A\"_3!\"\\2Q\"[4!\"Y2Q\"[3A\"]3A\"_31\"^3A\"_3A\"_4!#!4!#!31\"]41\"`31\"]3Q\"`41##4Q#%4Q#%41##3A\"`41#\"4!#!31\"]3A\"_41#\"4A#&51#*4Q#(4Q#&4Q#$3Q\"`4A##4!#!4Q#$51#'5!#&5!#+5A#*5Q#*4Q#)4Q#(3Q\"_/Q\"F/Q\"E1!\"M21\"V41#!5Q#(5Q#,5Q#,4A#&2A\"Y1!\"N0!\"H0!\"H/1\"B+Q\"**A!`*Q\"\"+!\"%-!\"5.Q\"?/A\"D/A\"D/A\"D/A\"D/Q\"F/!\"?+Q\"+*1!Y(1!R&!AK&1Q@$AQ;#AA8#!!:#Q!9\"A!:\"A!9#1Q8\"!!1\"!11\"1A5\"112#!!2#Q!2\"A!1\"!!1#!14#AQ4#1!;'!!O*A\"#-Q\"8/Q\"F0Q\"M0Q\"M0Q\"M0Q\"M01\"I1!\"N0A\"K01\"I0!\"H/Q\"E01\"I0A\"K11\"O3A\"^4Q#+5!#*6!#+5Q#-4Q#(4Q#'4Q#'4Q#%4Q#%4Q#%4Q#%4Q#%4Q#(51#&51#'51#&4!#!3A\"_3Q\"`41#\"41#\"4!#!4Q#%4Q#&4Q#&4A##41##3A\"^3A\"^4!#!3A\"_4A#$4!#!41##4!#!3Q\"`31\"Z3A\"Z3A\"^3!\"]31\"^31\"^4!#!3A\"^41\"Y3Q\"^3!\"[3!\"[31\"X3A\"[41\"`31\"Z3A\"Y31\"Z31\"Y4!\"[31\"[41\"X31\"X3A\"Y2Q\"Y2Q\"W21\"W2Q\"Z2Q\"Y1Q\"T3!\"S3!\"S1Q\"T2!\"U2Q\"T2A\"X3!\"U3!\"Y3Q\"U2Q\"[31\"W2Q\"[3Q\"U3!\"Y31\"]3Q\"Z3Q\"Y3Q\"`3Q\"X31\"^3!\"]3Q\"Y2Q\"[31\"^2Q\"[31\"]3A\"_3Q\"`3!\"[3Q\"[3!\"]4A\"\\3Q\"`3Q\"_3Q\"`3A\"_3A\"^3Q\"Z3Q\"`2Q\"[4!#!4!#\"4A#$3Q#!41#%4A#$3Q\"`3A\"^3A\"^3Q\"_3Q\"`3Q\"`4Q#'4Q#'4Q#%4Q#%4!#\"4A##3Q\"`3Q\"`4Q#%4Q#%4Q#)5Q#)6!#\"4Q#)5A#)41#!11\"P/1\"C/Q\"E0!\"G1!\"M2Q\"Y41\"\\51#*4Q#*2A\"X1!\"O0Q\"M01\"J01\"J,1\"-*!!\\)!!V)!!V(!!S'A!P'A!P'A!P(!!V(Q![)A!Y(A!S'A!P'A!P'!!K%A!C#Q1;#!A3#1Q1\"!17#115#1A1\"!11\"1A6\"Q15#1A.!QQ4\"112\"Q!1\"1!0$A1E%Q!J)!!Y-!\"3/!\"@0Q\"M01\"I0Q\"M0Q\"M0Q\"M0A\"K0A\"L0!\"G/Q\"E0!\"G0!\"G0!\"G0!\"G/Q\"E1A\"Q3Q##4Q#)4Q#%5A#+61#'5!#)4Q#%41#\"3Q\"_4A##4Q#!4!\"_4Q#%4Q#%4Q#,61#\"4Q#)3Q\"_3Q\"`3Q\"`41#\"31\"^3Q\"`4Q#%4Q#%4A##41##3Q\"`3!\"\\3A\"^3!\"]3!\"]3Q#!4!#!4!#\"4!#\"31\"]31\"]2Q\"[4!\"Z3!\"]3!\"]3Q\"_3!\"]3!\"]31\"^3A\"]31\"X3Q\"]3Q\"[3!\"]3!\"[3Q\"[3A\"W3A\"^4!\"Z31\"W2Q\"[3!\"Y3!\"Y3A\"W3A\"W2Q\"T21\"X3!\"T3!\"Y21\"T2Q\"U2A\"X1Q\"S2!\"V2!\"Q2Q\"S2!\"S21\"R1Q\"R2Q\"X2A\"U2A\"W3Q\"U3!\"X3A\"V31\"W2Q\"Z2Q\"Z3Q\"X3!\"[3A\"W3A\"[3!\"Y4!\"\\3Q\"[41\"`3Q\"W2Q\"[3A\"W2Q\"[3Q\"Y2Q\"Z2Q\"Z2Q\"[3!\"]3!\"]31\"]3Q\"`3!\"\\3!\"\\3!\"\\2Q\"\\2Q\"[31\"^3Q\"_4!#\"4!#!3A\"^3Q#!3Q\"`3!\"\\3!\"]31\"]4A##4Q#%4Q#%4Q#%41##4Q#%41##3A\"^4!#!41#\"4!#!5!#&41#%4Q#)4Q#%4Q#%4A##1A\"R/Q\"F/!\"@/!\"A/1\"A/!\"A0!\"G0!\"H0Q\"L1!\"N0Q\"M0A\"K0A\"J0!\"G/A\"D-!\"2*A\"!)1!X&Q!K&1!?#Q14\"AA/$111#1Q2#1Q1\"QA/\"QA/#1A/\"1A0#AA5\"AA4\"1Q5#!A.\"!11\"!!.#114\"1!2$!A6$!A@$1A;%11C(Q!T)Q!]+A\"*/1\"D/A\"D/Q\"F0Q\"L0!\"H0A\"K/Q\"E/1\"B.1\";-Q\"7-Q\"7/A\"D/Q\"F/!\"@/Q\"F/Q\"F0Q\"M3A\"_4Q#'4Q#(4Q#&4Q#%4!#!3A\"]11\"P01\"I2A\"Y4A#$4Q#%4!#!4Q#%4Q#%4Q#%4A#%4!#\"3Q#!3Q\"`4!#!31\"^41##4A##4A##41#\"41#\"3Q#!3Q\"`3!\"]3Q\"`3!\"\\3Q\"`3A\"_3Q\"`4!#!3Q\"_3!\"\\3A\"Z31\"^31\"\\3Q\"]3!\"\\3A\"Z3Q\"`3A\"[4!\"Y3!\"\\31\"Y31\"W3!\"[3A\"Y31\"X3A\"Z3A\"W31\"[4A\"X3!\"Y3A\"W3Q\"U4!\"]31\"X3!\"Y3!\"Y3!\"X31\"U1Q\"S31\"R2A\"V31\"U1Q\"T1A\"S11\"Q21\"Q2!\"V31\"T2Q\"W2!\"S2A\"W21\"T2A\"V2Q\"Y31\"X2A\"Z2Q\"Z3!\"X31\"W3A\"Y41\"]31\"W4!\"X3!\"Y3A\"V4!\"X3!\"Y2Q\"Z3A\"_31\"]4!\"X3Q\"_3Q\"W3A\"^31\"]3A\"_41\"\\3Q\"_31\"\\41\"]31\"Z4A\"\\31\"\\41#!3A\"_4!#!3A\"_41#\"4Q#%3!\"]3!\"\\3Q\"`31\"]31\"]3Q\"`3A\"_4Q#%4Q#%4A##4!#!41##41#\"31\"^31\"^3A\"^41##4!#!4Q#%4Q#%4Q#%4Q#%4A#$2A\"W/Q\"E0!\"G/1\"B0!\"H0!\"H/1\"C0!\"G/A\"D/A\"D0Q\"L0Q\"M0A\"J0A\"K0!\"G/Q\"F.!\"9+Q\"))A!Z'A!P&11G\"QA6$1A4\"1!7\"AA4\"QQ1\"1A0\"!14\"1!1\"AA1\"!Q5#!A.!Q!5$1Q?%1!B&Q1K'!1O(A!T)!!V)!!V)1!X+!\"&-!\"6-1\"9,Q\"3+A\"'+1\"&+A\"'+A\"'+!\"#*A\"!)A![)1!X*Q\"#.1\"<0!\"H01\"I01\"I1A\"R41#\"4Q#%4Q#$4A#%4!\"X11\"P0Q\"M/1\"B/!\"@1A\"R31\"]3Q\"`4Q#%4Q#%4Q#%4!#\"4A#$3Q\"`3A\"_3!\"]3!\"\\3A\"_3A\"_4!#!4Q#%41##4!#\"4!#!3!\"\\2Q\"[3Q\"Y3!\"[3!\"]3!\"\\41#\"31\"]2Q\"[31\"\\41\"]4A\"\\31\"W3A\"[3!\"Y3!\"\\4!\"]3!\"\\31\"Y2Q\"[3Q\"X3A\"Z31\"^3Q\"W31\"Z4!\"\\3Q\"[4!\"Z3!\"Y3!\"Y3!\"Y31\"W3Q\"U31\"X4!\"T2Q\"X3!\"Y2Q\"X1Q\"T1Q\"T2A\"V31\"S1Q\"T2!\"V11\"P1Q\"T11\"P1Q\"T1Q\"T1Q\"T21\"Q21\"X1Q\"T2!\"W1A\"R3A\"W2A\"R2Q\"T3A\"V3A\"W2Q\"[3A\"W2Q\"[31\"W3A\"W2Q\"[2Q\"Z3Q\"[3Q\"Y3Q\"Y3Q\"\\3!\"X31\"W3!\"Y3!\"X3Q\"Y3A\"Y2Q\"[3!\"\\3Q\"Y3!\"\\3!\"[31\"W3!\"Y3Q\"T3!\"\\3!\"\\3Q#!3Q\"`3Q\"_3Q#!3Q\"`31\"]3A\"Y3!\"]31\"^3A\"^31\"]3!\"]4A#$4A#$4A#$3Q#!4!#\"41#\"3!\"]3!\"[31\"X4!#!4!#\"41#\"4Q#%4Q#%4Q#%4Q#%11\"O/A\"C/Q\"F/1\"B/1\"B/1\"B/1\"B/1\"C/Q\"F/1\"B0!\"G0A\"K0!\"G01\"I01\"I/A\"C/A\"D-1\"4+Q\")*!!](A!T'!!E%11>$A1=#117#110\"QQ3\"112\"!!1\"!13#A1.#Q15%!!>&A!D%A1C&QAH&Q1K'1!K'A!M'A!M'Q!R&Q!N'Q!R)!!V)!!V(A!T(Q!U)!!V)A!Z+1\"'-1\"4/Q\"F0!\"G/Q\"E0!\"H2!\"V3!\"[2Q\"X1Q\"S01\"J/!\"@/A\"D.Q\"?.Q\"?/A\"C2A\"W4A#$4Q#%4Q#%4Q#%4A#$3Q#!3Q\"`3!\"\\3Q\"`2Q\"[3A\"_3Q\"_31\"^3A\"_4Q#%4!#!31\"]3A\"^2A\"Z31\"^31\"^2A\"Z3Q\"^41\"_3Q\"_3!\"\\3Q#!3!\"]3Q\"Y2Q\"Z2Q\"[2Q\"[3A\"\\3!\"Y2Q\"[2Q\"[3Q\"[31\"Z4!\"X3A\"[4!\"W31\"]3!\"\\3Q\"Y2Q\"[3A\"W31\"W2A\"U3!\"Y3A\"W3A\"W2Q\"[2!\"U21\"X21\"R2A\"W1Q\"S1Q\"T1Q\"T1Q\"T1Q\"U11\"P1!\"O1Q\"T11\"P11\"P1!\"O1Q\"T1Q\"T1Q\"P1A\"Q2A\"Q21\"U1Q\"T2!\"S3!\"V2!\"U2A\"X2Q\"Z3A\"V3A\"V2Q\"[2Q\"Y3!\"Y31\"X31\"W3A\"V3Q\"V3!\"Z2Q\"[3!\"Z3A\"]31\"\\4A\"_3Q\"W3A\"Y4!\"[31\"[2Q\"Z3!\"\\2Q\"\\2Q\"[2Q\"[3!\"]31\"Y3A\"Z3!\"Z3!\"\\4!#!4!#!31\"^3A\"_31\"\\2A\"Z3A\"]3A\"]2Q\"[3A\"_2Q\"\\3Q\"`41##4A#$31\"^4!#\"3Q\"`3A\"_21\"V/Q\"F0Q\"K2A\"X3!\"[3A\"^4Q#%4A#$41##3A\"]01\"I/1\"C/!\"@.Q\"?/Q\"E.1\"=+A\"+*Q\"&,1\"1-A\"7.1\";.!\":-Q\"7.1\"<.1\"<.1\"=/A\"E.1\"<,Q\"2)A!Y(Q!V)!!V(!!Q(!!P'!!M%Q1J%A1?#QQ?#Q!9\"1!5\"1A/\"1A/\"AA2\"!11\"!12\"QA1\"AA0#A11$!17&1!>&A!M(1!T(!!S)1!X*1!_,1\"-.!\":/A\"D/1\"C/Q\"F/A\"D/Q\"F/1\"B/A\"D/A\"D0!\"G0!\"G/1\"C.Q\"?/!\"@/!\"A2!\"U3!\"[4Q#%4!#!41#\"41##3A\"_3Q\"`3!\"\\3!\"Z4!\"]41\"]3A\"^4!#!4!#!41#\"3Q\"`3!\"\\31\"^3!\"]31\"[41\"Z3Q\"W3!\"]31\"^31\"]31\"\\3!\"\\2Q\"[3!\"[4!\"]3A\"W4!\"\\3A\"X4!\"[31\"[31\"Y4!\"\\3!\"Y3A\"[2Q\"Z3!\"Y3!\"X3!\"Y3A\"X3Q\"V31\"Y2Q\"[3!\"Y31\"W2A\"W2Q\"Y2!\"V1Q\"S31\"V2A\"W31\"T1Q\"T1Q\"S1Q\"Q1Q\"T1Q\"P1Q\"T1Q\"U1A\"S2Q\"Q11\"Q11\"Q1A\"R1A\"Q1!\"O11\"P2A\"V1Q\"R1Q\"T11\"P1Q\"T3!\"V2A\"R3!\"U21\"S2A\"V2!\"V1Q\"U2Q\"S3!\"X3Q\"U2!\"V31\"X2!\"W2Q\"X4!\"T41\"V3Q\"W3!\"X3!\"Y3A\"V2Q\"[31\"X31\"W3A\"[3Q\"]3Q\"X2Q\"\\2Q\"[31\"Z4Q\"Y3!\"X3Q\"[41\"W3Q\"^2A\"Z3A\"_31\"^31\"^31\"]2A\"Z3Q\"]3A\"]4!\"[3A\"^3A\"_31\"]2Q\"[3A\"_4Q#%4!#!3Q\"`3Q\"`2A\"Z0Q\"M.Q\"?/A\"E/Q\"E0Q\"L11\"O21\"V3!\"]4Q#$3Q\"`1Q\"T/Q\"E/A\"E.Q\"?.Q\"?-1\"4*1\"\"(!!R(!!R)!!V)!!V)!!V)!!V)A![)A!`*A\"#*A\"#)Q!\\)1!X)!!V)!!V)!!V(A!T(Q!U(1!S'Q!R)!!V'1!P&!!J$!!>#!!3\"!15#A14!QA2\"Q16%A1A%Q1E'A!N(Q!U(A!T*!!]+Q\",-1\"7/A\"E/1\"B/Q\"E/A\"E/A\"E/A\"C.Q\"?/!\"A/1\"B.Q\"?.Q\"?/1\"B/1\"B/1\"C.Q\"?/A\"C2Q\"Y3!\"\\3Q\"`4!#!4!#!3A\"_3!\"]3!\"]3A\"_4!\"Y3!\"X3A\"^2A\"Z3Q\"`3!\"]3!\"]3A\"^3Q\"`2Q\"[4!\"Y3Q\"Z3A\"W31\"]2Q\"[3A\"_31\"^2A\"Z2A\"Z4!#!4!\"Y3A\"[2Q\"Z31\"X3A\"_31\"X2Q\"[2Q\"\\3A\"Y3!\"]4!\"X41\"W3A\"V3A\"V31\"X2Q\"[2Q\"[2Q\"Y3Q\"U3!\"X3A\"V2!\"W31\"T31\"T2Q\"U2Q\"W2A\"Q1Q\"R11\"Q21\"Q2!\"R2A\"T1A\"P2Q\"U11\"Q1A\"R1!\"N11\"Q11\"Q1Q\"T1!\"O1A\"R11\"Q1Q\"S11\"Q1A\"R1Q\"T3!\"R21\"Q11\"Q1Q\"U1Q\"T1A\"Q21\"Q1Q\"T21\"X21\"X2A\"W21\"T2A\"V2!\"R31\"W2A\"Y2A\"X2Q\"Z2Q\"Z31\"W31\"\\3!\"Y3Q\"U3Q\"U2Q\"Z3Q\"T31\"X3Q\"Z4!\"W3Q\"\\2Q\"[31\"\\3!\"\\3A\"]3!\"X4!\"X4!\"Y3A\"\\3!\"Z3!\"]3Q\"`3Q\"_3!\"\\2Q\"[2Q\"Z3Q\"W3A\"Z4!\"\\3!\"]2A\"Z3!\"]4!#!3A\"_3!\"\\4!#\"31\"]1Q\"U01\"I/1\"B/!\"@.Q\"?/!\"@/Q\"F/1\"B0Q\"M11\"Q0A\"L/A\"C/A\"E.Q\"?.Q\"?.Q\"?.!\";+A\"))1!Z)!!V(!!R(A!T(A!T(A!T(!!R(!!R(!!Q&A!I'!!K&11H%11C'!!H&A!D%1!B$A!7\"!Q.%Q!8$Q1<%11=$QA;&A!B'Q!Q(Q!U(!!R(!!R)!!X)A!^+A\"(.Q\">/!\"A/1\"C/!\"@/!\"@/1\"B/!\"@/!\"@/1\"C.Q\"?.Q\"@.A\">.Q\"?/1\"C/1\"B.Q\"?/!\"@/1\"C1Q\"U3A\"^41#\"41#\"4!#!31\"]3A\"^3A\"Z2A\"U3!\"V3A\"V2Q\"[3!\"\\3!\"\\31\"]4!#!31\"^3Q\"`4!\"\\31\"]4!\"\\31\"]3!\"\\3!\"\\3A\"Z4!\"\\31\"Y4Q\"[4!\"^41\"[4!\"T3!\"Y31\"W4A\"Z31\"X3A\"V4!\"\\31\"^3Q\"V3Q\"]3A\"V2Q\"Z21\"X31\"X2Q\"Z3A\"V3A\"V21\"X31\"U2A\"Y21\"X21\"V2A\"T21\"V2!\"V1Q\"T21\"X1Q\"T2!\"U2Q\"P1Q\"T1Q\"T1Q\"T1Q\"U11\"O2Q\"Q1A\"Q2Q\"R11\"Q1Q\"S0Q\"L1A\"R1!\"N1A\"S1Q\"U11\"Q1A\"R11\"P1A\"S21\"S2!\"V1A\"Q1Q\"S1Q\"T21\"T11\"P2!\"V1A\"P21\"V2!\"S3Q\"U2A\"X2!\"V2A\"X1Q\"T2A\"S3!\"Y2!\"V4!\"V3!\"Y2Q\"Y3Q\"U31\"W2Q\"Y2Q\"Z3!\"Y3!\"Y3!\"X2Q\"[4!\"X3A\"Y3A\"[31\"Y4!\"]4!\"T4!\"W3!\"Y3Q\"X4!\"]3Q\"[3!\"[2Q\"\\2A\"Z31\"Z4Q\"[3!\"Y4!\"X3A\"]3Q\"W2Q\"Z3A\"_2Q\"[31\"^3A\"^31\"^21\"X0A\"L/1\"B.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/1\"B0!\"H/!\"@/1\"C/A\"D/Q\"E/!\"@/Q\"E.Q\"?.!\":-1\"4+!\"$)A!Z)!!W'Q!R(A!T(A!T&1!K%A!@#Q18\"AA2\"AA0#11<$A!@'A!K&Q!H'A!K'A!N(1!S)!!V(Q!U(1!S'1!P(A!T(1!S(1!S)Q!],!\"2.!\":.1\";/!\"A.1\";,1\"1+!\"$+!\"$*A\"\"*A\"!*Q\"$)A!^*A\"#.!\":.Q\"?.Q\"?/!\"A/1\"B11\"Q2!\"V4!#!4!#\"3Q\"`2Q\"Z2Q\"Z1!\"N0!\"G0!\"D01\"J2A\"Y3Q\"^3!\"[3Q\"_31\"]31\"^2Q\"[3!\"Z3Q\"Y3A\"Z4A\"[3!\"Y4!\"X3Q\"Y3A\"Y3Q\"W2Q\"[2Q\"[31\"[2Q\"Y3A\"W2Q\"Z3A\"V2Q\"[31\"Y3Q\"^31\"]3A\"Y2Q\"Z2Q\"Y3!\"Y3!\"S21\"W21\"X31\"W31\"W31\"X3Q\"T3!\"U2A\"X1Q\"S1A\"S1Q\"R21\"T2!\"U1A\"Q21\"Q2!\"Q11\"P11\"P1Q\"T11\"P1!\"O11\"P1A\"Q1A\"R11\"Q11\"Q1A\"Q1A\"S11\"Q11\"P1!\"O11\"Q11\"P11\"P11\"P11\"P1Q\"T1A\"R1A\"Q1!\"N1A\"R11\"Q1Q\"S1Q\"T1Q\"T11\"P2Q\"U21\"V1A\"R21\"X2A\"Q1Q\"T2!\"R21\"R21\"X1Q\"T2Q\"T3!\"Y3Q\"U31\"W31\"W31\"X3!\"X3Q\"U2Q\"[3A\"V3Q\"U41\"Z31\"^31\"W3!\"[41\"X2Q\"Z2A\"Z3!\"Y3A\"V31\"X3!\"X3Q\"\\41\"W31\"[2A\"Z31\"^2A\"Z3Q\"\\3!\"X31\"X3!\"\\3Q\"Y3!\"]3Q\"_31\"X2A\"Z31\"^3Q\"\\3A\"\\21\"W0!\"I.A\"=.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F/!\"A.Q\"?.Q\"?/A\"D/1\"B/Q\"F/1\"C.Q\"?.Q\"?.A\"=,1\".+1\"()A!['Q!Q(A!U(Q!U)!!V'1!M&Q!A%Q1D&!!E%A!C%Q1D&A!N'Q!Q'A!Q'A!Q(!!S(1!S)!!V(1!S)!!V(Q!U(A!U'A!Q(Q!U)!!V(1!S(1!S(1!S(1!S)!!V'Q!R'A!Q)1!Z,1\"-.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F1Q\"T2Q\"Z21\"V0Q\"M0Q\"M/Q\"F.Q\"?/A\"D0!\"H/!\"A0Q\"M3!\"\\2A\"Z4!\"Z3A\"]31\"X2A\"Z4!\"[3Q\"`3!\"[3Q\"[3A\"X2A\"Z3Q\"\\3Q\"]3Q\"[3!\"[3Q\"Y3Q\"\\3!\"Z3Q\"[2Q\"Z31\"W3!\"X3!\"X31\"X4A\"[41\"W3Q\"U3Q\"U3Q\"U3!\"X2A\"T31\"W2Q\"R1Q\"T2A\"Z31\"W2Q\"[2A\"Z1Q\"T1Q\"T3!\"T1Q\"T1Q\"T1Q\"T1A\"R1A\"R1Q\"T1Q\"T1Q\"T1Q\"T11\"P1Q\"T11\"P11\"Q1A\"R1!\"N1A\"R2!\"M0Q\"M1!\"N0Q\"M1!\"N1!\"N1A\"Q1!\"N1!\"N11\"P1!\"N1!\"N1!\"O1!\"O1Q\"T1!\"O1A\"R11\"Q1!\"N2A\"T2A\"U1A\"R1A\"R1!\"O1A\"R2Q\"V2A\"Q21\"X1A\"R2A\"R2A\"U21\"W2A\"X2A\"X31\"X31\"X2Q\"Z3!\"Y2Q\"Z21\"T2!\"U31\"U31\"W41\"U31\"Y31\"[3Q\"\\31\"]4!\"Y2Q\"Z31\"X31\"W31\"X3!\"X3!\"Y4!\"]3A\"V4!\"]31\"X31\"]31\"\\3A\"]3Q\"]3A\"Z41\"[4!\"U2Q\"Z31\"[4!\"Y3!\"[3!\"[3!\"\\2A\"Z3!\"S/Q\"F/!\"A/A\"D0!\"H0A\"J1!\"O1!\"O0A\"L/A\"C.Q\"?.Q\"?.1\"<.!\":.!\":.1\"=/A\"F.Q\"?.Q\"?-Q\"9,Q\"3*A!W(A!T(1!S(Q!U)!!V'Q!Q(A!T(!!P(!!P(!!S'A!Q'A!Q&A!I&!!>%Q!B&A!I&A!M'A!P(A!R)!!V)1!V(1!T)1!X)1!X)!!X(Q!V)!!W)A!]+!\"&.Q\"?.A\".1\"=.!\";,A\"5,A\"3-!\"+*A\"#*!!^)1!W(A!T)!!V)!!V)!!V(Q!U(Q!U(A!T(Q!U(Q!U)!!V*Q!X)!!Y*!!^*!!_)Q!^)Q\"\"*!\"%,!\")+1\")+Q\"),!\"-+!\"'*A\"#*A\"#,Q\"0-!\"2.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F0A\"K2!\"M2!\"O3Q\"R4!\"T3!\"X2A\"T1!\"O1Q\"T2A\"Z2A\"Z2A\"Z3A\"_3A\"_3!\"Y3!\"Y4A\"V3A\"[3!\"Y3!\"Y3!\"Y3!\"X3!\"\\4!\"Y4!\"Y2A\"Z3Q\"Y3!\"Z2A\"Z3A\"V2Q\"Y3!\"U3A\"V31\"X31\"X2Q\"Z31\"W3A\"V2A\"S3A\"V2!\"V1A\"R1A\"R1Q\"T1A\"R21\"W2A\"T21\"R2A\"S2!\"U2!\"V11\"P1A\"R1Q\"T2Q\"U1A\"S1A\"R11\"Q11\"Q1!\"O11\"P1Q\"T1!\"O1!\"O1!\"O1!\"O1A\"R11\"P1!\"O11\"Q0Q\"L1!\"N1!\"N1!\"N"; +static unsigned char +palette_data[] = { 4,2,2,4,110,178,32,4,122,4,36, +86,15,3,66,4,58,127,36,8,186,4,34,122,17,2, +34,4,19,66,12,4,162,90,2,69,88,2,48,7,20, +2,25,2,103,8,14,48,4,58,186,90,3,154,82,2, +129,55,2,34,17,2,18,17,34,191,94,2,101,57,2, +70,7,32,154,12,22,157,17,3,50,4,88,150,96,3, +186,86,2,138,87,2,86,212,214,210,4,19,98,52,2, +154,15,11,2,4,132,216,7,18,125,12,6,82,37,12, +18,4,88,189,86,14,48,128,2,157,32,4,138,4,60, +155,4,48,126,60,2,218,7,10,52,13,12,66,129,2, +50,56,2,52,52,14,98,4,47,157,6,20,87,48,2, +24,58,2,101,120,2,141,52,5,170,4,113,215,127,2, +73,4,90,210,4,52,112,36,18,194,59,2,85,42,2, +10,107,2,173,95,2,114,31,3,52,4,79,160,84,3, +189,14,10,40,30,2,69,96,2,58,113,2,126,9,37, +231,17,33,170,28,14,2,4,30,146,68,10,37,132,2, +82,23,4,7,4,10,122,4,36,108,32,2,37,7,27, +2,4,98,175,84,10,146,4,101,191,4,14,146,8,29, +86,4,2,170,8,60,230,84,10,162,72,2,39,102,2, +142,4,142,221,4,49,143,68,12,170,4,124,213,15,4, +74,114,2,69,112,2,158,32,3,23,8,50,190,111,2, +104,6,40,154,96,2,210,6,28,104,60,2,138,61,2, +25,68,2,114,58,2,125,39,2,114,73,2,69,16,4, +58,4,88,177,56,14,26,138,2,173,4,68,176,71,2, +55,76,2,210,4,78,130,17,3,42,6,27,69,112,2, +49,12,26,178,47,13,159,18,11,10,13,11,74,141,2, +58,52,18,234,4,82,186,4,126,198,4,103,213,4,62, +206,4,72,226,12,46,210,72,12,222,12,26,146,20,34, +210,4,113,197,4,131,229,4,48,170,4,76,170,7,43, +95,52,30,218,15,11,170,52,14,202,12,14,86,4,40, +174,108,14,202,156,2,186,60,12,130,5,40,129,73,13, +189,12,42,138,44,14,202,4,59,143,4,124,229,4,69, +191,4,69,157,4,60,114,4,43,110,14,14,58,20,26, +157,28,26,210,4,87,162,4,91,202,4,110,226,4,98, +226,4,101,202,17,14,186,28,18,18,60,2,234,28,10, +114,4,30,114,8,10,162,12,54,186,20,26,130,100,10, +170,40,18,154,4,22,114,28,26,234,4,22,58,4,66, +226,4,54,202,12,42,202,4,38,98,4,145,234,4,76, +146,4,94,148,4,138,213,4,94,186,4,54,126,4,54, +154,4,118,211,4,106,178,4,106,188,4,54,142,4,94, +170,4,70,202,4,118,197,4,54,173,4,82,178,72,4, +172,36,10,138,76,14,162,4,98,210,4,118,226,112,2, +114,24,19,8,30,2,85,84,6,226,141,2,73,28,30, +10,28,46,186,112,4,206,36,10,90,36,2,174,108,2, +58,41,3,130,44,10,194,9,33,130,92,2,162,51,2, +42,12,32,162,81,3,146,44,11,26,28,6,146,44,2, +178,30,12,10,60,10,178,64,2,146,28,10,178,92,10, +210,5,41,146,40,2,102,96,2,125,100,2,88,74,2, +157,142,2,159,26,10,55,143,2,50,73,2,102,134,2, +142,73,2,84,127,2,126,142,2,82,156,2,178,28,10, +158,28,26,114,84,14,202,12,4,10,5,20,74,17,2, +26,92,2,194,7,19,106}; + +static unsigned char header_data[] = { 71,99,218,218,99,11,71,218,71,71, +218,99,99,99,71,99,218,99,99,99,99,218,71,218,99,218,218,99,99,218, +218,99,99,218,99,218,99,58,218,99,99,99,58,218,99,99,99,58,99,58, +99,58,11,58,99,58,58,11,99,58,99,58,99,99,99,218,99,218,99,58, +99,71,99,218,71,12,12,12,12,12,12,12,12,12,92,19,19,19,92,92, +92,92,19,108,19,19,19,19,19,19,53,53,53,53,101,19,19,53,53,19, +19,19,12,92,92,12,12,12,71,71,218,99,218,218,71,71,12,12,218,99, +58,58,58,99,99,99,58,99,99,99,11,58,11,58,58,99,58,99,99,99, +58,99,99,99,99,58,99,99,99,99,99,218,99,99,11,99,99,99,11,99, +99,218,218,218,99,218,99,99,218,218,99,99,218,99,218,218,99,99,218,11, +218,71,99,218,99,218,218,99,71,8,218,99,218,218,99,99,99,99,99,99, +218,218,99,99,218,99,218,99,218,71,99,99,99,218,99,99,218,99,99,99, +218,218,99,99,99,99,58,99,58,30,99,99,99,99,99,99,58,99,99,58, +99,58,99,58,99,99,58,58,58,99,58,58,99,218,218,71,99,99,71,71, +71,123,12,118,71,71,12,71,123,12,12,19,19,19,53,19,19,53,53,19, +19,53,101,63,20,63,20,63,53,53,53,101,53,53,53,19,53,53,53,19, +92,12,12,12,71,12,12,12,12,12,92,71,218,218,71,218,71,71,71,71, +99,218,58,58,58,99,99,99,99,58,58,58,99,58,99,58,58,99,58,58, +99,99,58,99,99,99,99,58,99,58,30,99,99,99,218,99,58,99,99,58, +11,99,99,218,99,218,218,99,99,218,71,99,218,99,99,218,99,99,218,99, +11,218,99,218,99,11,218,99,99,8,71,71,71,99,218,71,218,99,71,218, +11,99,218,218,99,218,99,218,99,99,99,99,218,99,99,99,99,99,218,99, +99,99,99,99,99,11,99,99,99,99,99,99,58,99,58,99,58,99,58,58, +99,11,58,58,99,58,99,99,58,58,218,99,123,71,71,71,123,71,71,218, +99,99,218,71,12,12,12,12,92,19,19,53,19,53,53,53,53,19,53,53, +53,53,19,53,19,53,53,53,53,53,63,63,101,63,63,20,53,19,53,53, +53,19,92,92,12,12,12,71,71,71,71,12,12,71,71,12,12,12,12,12, +12,218,218,99,58,58,99,58,99,58,99,58,99,99,58,218,58,99,58,99, +99,99,99,11,58,99,99,58,99,99,58,58,99,99,99,99,99,99,99,99, +99,58,218,99,218,99,99,99,218,99,99,218,99,11,218,99,218,218,99,99, +218,99,218,11,99,71,99,218,71,8,99,99,218,99,99,99,218,99,99,218, +218,99,11,99,99,218,99,218,99,218,218,99,58,99,99,99,58,11,99,99, +58,99,99,58,58,58,58,99,99,99,99,218,58,99,99,99,58,58,99,99, +58,58,99,58,99,58,99,99,58,58,99,218,71,71,218,218,218,58,58,58, +218,99,71,123,12,12,12,19,19,108,108,108,92,92,92,12,71,12,12,92, +19,53,53,53,101,53,53,19,53,101,53,20,53,79,79,0,34,79,20,63, +53,53,53,19,19,19,12,12,12,71,71,71,71,71,71,123,71,12,12,12, +12,12,71,71,218,58,99,58,218,58,218,99,58,99,58,99,99,218,58,58, +58,99,58,58,99,99,58,99,58,99,99,218,58,58,99,99,99,99,99,99, +58,11,99,99,218,218,218,99,218,99,99,218,218,99,218,99,99,218,218,99, +218,99,71,218,99,218,99,99,99,8,218,218,99,218,99,218,99,218,218,99, +11,218,218,218,218,99,71,99,218,99,99,99,218,58,99,99,99,99,218,30, +58,99,58,99,58,11,58,99,58,99,58,58,58,99,58,58,99,99,58,58, +58,99,58,99,58,58,99,58,218,99,99,218,58,99,58,58,58,58,58,218, +71,12,12,71,71,12,12,12,12,71,71,118,71,71,118,71,71,12,223,19, +19,53,53,53,53,63,229,20,79,20,34,0,20,101,101,63,20,101,101,53, +108,53,53,53,53,53,101,19,92,12,12,12,12,71,71,218,218,218,71,71, +118,12,71,71,218,218,58,58,58,58,58,58,218,58,58,58,99,99,218,99, +58,58,99,99,58,99,58,99,58,58,58,99,99,99,58,99,99,99,58,58, +99,58,58,99,99,99,99,99,99,99,218,99,99,218,99,218,218,99,99,218, +99,58,99,99,218,99,218,218,218,8,99,218,99,218,99,218,11,99,218,99, +99,99,99,99,218,99,58,99,99,99,58,99,218,99,99,99,99,99,58,99, +58,218,99,99,99,58,218,58,58,58,99,99,58,99,218,58,99,99,58,218, +58,99,58,99,99,99,58,99,58,58,58,58,99,58,58,58,58,218,218,12, +71,71,71,12,12,71,71,12,71,12,71,71,71,71,12,92,19,53,53,53, +101,63,79,34,251,0,0,63,20,53,19,53,53,53,53,19,19,53,19,19, +19,108,19,19,19,19,19,19,53,53,108,12,12,12,71,71,218,58,58,58, +99,218,71,71,71,12,218,99,99,58,58,58,58,218,58,58,58,58,58,99, +99,58,58,99,58,218,58,99,99,99,99,58,99,128,99,58,99,99,11,99, +99,58,11,58,99,99,99,218,58,11,99,58,99,218,99,99,218,99,99,99, +218,71,99,99,218,99,11,99,218,8,218,99,218,99,218,99,99,218,99,218, +58,218,58,218,99,99,218,99,58,99,99,99,99,78,11,58,99,58,99,99, +99,58,58,99,58,11,58,58,218,99,99,58,58,58,99,58,58,58,99,99, +58,58,58,58,58,58,99,58,99,99,99,58,58,58,58,58,218,71,118,12, +71,71,71,71,71,12,71,71,71,71,71,12,92,19,19,53,53,63,20,251, +0,79,79,0,79,34,34,79,0,63,229,20,63,101,53,101,19,53,19,92, +12,71,12,92,12,12,12,12,12,92,19,92,92,71,12,118,71,218,99,58, +58,58,58,58,218,123,71,218,58,58,58,99,58,58,58,218,58,218,58,58, +218,58,99,58,58,58,99,99,58,99,58,99,218,99,99,99,58,58,58,11, +58,58,99,58,99,99,30,99,99,99,58,218,218,30,99,218,99,99,99,218, +99,99,218,218,99,99,218,71,99,8,99,99,71,99,218,218,99,218,99,218, +99,218,99,58,11,58,99,99,11,58,99,58,99,99,99,99,58,58,99,99, +58,99,99,99,99,58,99,78,58,58,99,99,218,78,58,218,58,99,212,58, +99,58,58,58,218,58,58,58,58,58,58,58,58,58,218,71,12,12,71,71, +123,218,218,58,99,71,123,71,71,12,19,19,19,53,53,19,19,53,63,53, +101,101,101,63,101,101,20,20,79,0,0,79,79,34,251,79,79,251,101,53, +19,92,12,71,71,71,218,12,218,12,71,71,71,71,71,12,71,71,123,71, +58,58,58,58,58,58,58,99,99,58,58,58,99,58,58,58,99,58,99,58, +99,58,58,99,58,58,58,58,99,58,99,58,99,58,99,58,99,99,58,58, +99,99,99,58,99,58,58,58,99,99,99,30,128,58,99,99,99,99,99,58, +218,99,99,218,218,99,99,218,71,8,71,218,99,99,99,99,218,99,99,99, +99,30,58,11,58,58,99,58,58,58,58,30,58,58,99,99,99,58,99,58, +99,58,99,58,58,58,218,99,58,99,58,58,58,218,99,58,58,58,58,58, +58,99,99,99,58,99,99,58,58,212,99,58,58,218,71,71,218,218,99,58, +58,58,58,218,123,71,71,12,108,19,19,108,19,19,223,92,19,92,12,12, +19,19,19,19,53,53,63,63,229,0,34,34,79,0,79,0,75,34,0,34, +79,20,53,19,92,12,71,71,71,218,71,123,71,123,71,71,71,71,71,71, +71,218,58,58,58,58,58,58,58,99,58,58,58,58,58,58,58,58,99,58, +58,99,99,58,99,58,58,58,58,58,58,99,58,99,58,99,58,58,99,99, +58,58,99,99,58,58,218,58,58,99,58,99,11,58,58,99,58,218,99,99, +99,99,218,99,99,218,99,99,99,8,99,218,99,218,99,99,99,99,58,58, +11,58,99,58,58,30,58,11,58,11,58,99,99,58,99,58,58,58,99,58, +58,99,58,99,99,58,58,99,58,99,58,99,58,99,212,58,58,58,58,58, +58,58,58,58,58,58,58,58,58,58,212,58,218,218,218,99,58,58,58,58, +58,99,71,71,71,12,71,71,12,12,12,71,71,123,71,218,71,71,71,92, +19,108,63,79,229,126,0,79,0,0,34,34,34,126,34,251,79,0,126,34, +79,0,79,20,63,19,19,12,71,71,71,218,71,99,71,71,71,71,71,71, +71,71,218,58,58,58,212,58,58,58,58,58,58,58,58,58,58,58,58,58, +58,58,99,58,58,99,58,58,99,99,128,218,58,58,99,58,99,58,58,99, +218,58,58,218,99,99,99,99,99,99,58,99,99,58,30,218,99,99,99,99, +99,99,218,99,99,99,218,218,99,8,218,99,99,99,58,99,99,99,99,99, +58,58,218,99,99,99,58,99,58,58,58,99,58,99,58,99,99,99,58,58, +99,99,58,58,58,58,58,58,99,99,58,99,99,58,58,58,58,99,58,58, +99,58,99,58,78,212,99,212,99,58,58,99,58,58,78,78,246,99,212,58, +99,71,123,71,71,71,71,71,218,218,71,123,218,218,218,118,12,19,63,63, +0,0,0,34,34,0,34,79,79,79,0,34,79,79,20,101,53,101,53,19, +53,53,101,101,53,53,19,19,19,92,218,218,218,218,218,212,78,58,218,218, +71,71,71,11,58,246,58,78,246,58,58,58,99,99,58,58,99,58,212,58, +99,58,99,58,58,99,58,58,58,58,58,212,218,58,58,99,58,58,99,58, +99,99,99,58,58,99,99,99,58,99,58,58,99,99,99,58,58,99,99,99, +99,99,99,11,58,99,99,99,218,8,99,99,218,99,99,218,99,218,58,58, +11,78,58,99,58,99,58,99,58,11,58,99,58,99,58,58,58,99,99,58, +99,99,99,58,58,58,58,58,58,58,58,58,58,58,58,212,99,58,212,99, +58,58,78,58,78,58,58,58,58,58,58,58,58,58,246,58,246,58,58,71, +218,71,71,71,218,71,71,71,71,218,218,71,71,92,92,53,63,126,79,0, +0,79,0,79,34,79,0,126,79,79,79,79,79,229,229,101,53,108,92,71, +71,71,71,71,71,12,12,19,108,19,92,71,71,71,71,218,212,246,78,58, +58,218,218,71,71,58,58,212,212,78,212,78,78,58,58,58,58,58,99,58, +78,58,58,99,58,58,58,58,58,58,58,58,99,58,99,58,58,212,99,58, +58,99,58,99,58,99,99,58,58,99,99,58,58,58,58,11,78,99,99,99, +99,58,99,58,71,99,99,99,99,8,99,99,99,218,99,58,99,30,58,11, +58,11,58,58,99,58,58,99,58,99,58,99,99,58,99,58,99,58,58,99, +58,58,58,58,58,78,58,99,58,99,58,58,58,58,99,58,212,99,58,58, +58,78,78,78,58,58,58,58,58,212,58,78,58,78,78,78,58,99,218,218, +71,218,218,71,58,99,58,99,71,71,71,12,19,20,79,251,0,251,79,251, +79,63,126,79,79,79,79,229,79,79,79,126,126,79,79,63,20,53,53,92, +12,12,218,71,71,218,218,218,71,218,71,71,71,218,71,218,218,58,246,246, +78,212,78,58,218,218,58,58,58,246,78,212,78,212,58,58,58,58,58,212, +78,78,78,58,58,99,58,58,58,58,58,58,58,58,58,218,99,99,58,99, +58,58,218,99,58,58,99,58,99,99,58,99,99,99,58,99,99,58,58,58, +218,99,11,58,99,99,99,218,99,8,99,30,218,58,11,99,99,58,99,58, +99,58,58,99,218,99,218,58,99,99,58,58,58,58,99,58,99,99,58,99, +58,58,58,78,78,58,58,58,58,58,99,246,78,78,58,58,58,58,58,78, +78,212,78,246,246,58,58,58,212,58,212,246,78,246,58,212,218,218,218,218, +218,58,246,58,246,58,218,218,123,12,19,19,53,53,101,53,63,101,63,63, +63,63,63,63,63,101,63,53,63,53,53,53,53,108,19,19,19,19,108,19, +92,92,12,12,71,71,218,99,99,218,218,218,218,218,71,71,71,218,218,246, +78,78,246,78,78,78,58,58,58,78,78,78,78,246,58,58,58,58,58,78, +212,78,78,58,58,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58, +58,99,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,99,99,99, +58,99,58,99,99,58,99,99,99,8,99,99,30,58,58,58,58,58,58,99, +58,11,99,58,99,58,58,58,58,58,58,99,58,58,58,58,58,58,99,58, +99,58,78,58,58,58,99,58,58,78,246,78,58,78,58,58,58,58,78,212, +246,78,246,78,78,99,212,246,78,246,58,246,246,78,246,218,218,218,58,58, +246,78,78,246,58,218,218,71,12,12,108,92,108,19,108,53,63,63,63,53, +53,53,19,223,92,92,49,118,118,118,118,118,118,118,71,118,118,12,12,12, +92,71,71,123,218,99,11,58,58,58,58,78,58,99,99,123,71,218,218,218, +246,246,78,212,78,212,78,246,78,78,58,78,246,78,246,78,58,58,58,58, +99,78,246,78,246,99,58,58,58,58,58,78,78,78,78,99,58,99,58,99, +78,58,58,99,58,218,218,58,58,99,58,58,58,218,99,58,58,58,58,11, +58,99,99,99,58,99,99,218,58,8,99,99,58,99,58,11,58,11,58,58, +99,58,99,58,99,58,99,58,58,218,58,58,58,99,58,99,58,58,58,99, +78,58,58,58,99,58,58,78,78,58,246,78,246,99,58,58,58,212,78,78, +246,58,246,58,78,78,78,58,246,78,78,58,246,58,58,58,212,58,246,78, +212,246,58,58,71,71,71,71,12,92,92,92,108,53,53,53,19,19,223,223, +49,223,92,49,49,223,92,49,118,118,118,71,118,112,118,11,11,112,71,112, +71,71,11,11,11,99,99,58,58,78,78,78,246,78,246,58,99,71,218,71, +218,78,78,246,78,246,58,246,78,246,212,58,246,58,246,78,212,78,246,58, +58,58,78,246,246,78,78,99,58,58,58,212,78,58,78,58,58,58,58,58, +78,58,78,99,58,58,99,58,58,58,58,99,58,58,99,218,58,99,58,58, +58,58,99,58,99,99,58,99,99,8,99,99,58,58,58,99,58,99,99,58, +99,58,58,58,58,58,58,218,99,58,99,58,58,58,58,58,99,58,58,78, +58,78,78,78,78,58,78,58,78,78,78,212,78,58,78,58,78,212,78,246, +78,246,78,78,212,246,246,78,246,212,246,246,78,246,58,246,78,246,58,246, +246,58,99,218,218,218,71,12,92,19,19,19,19,19,223,223,49,223,49,118, +49,112,30,30,237,103,208,208,245,208,245,208,245,245,245,103,208,103,22,237, +30,30,11,11,11,11,71,71,11,99,58,78,78,246,58,246,246,246,58,99, +99,218,212,78,246,78,246,78,246,58,78,58,246,78,58,246,78,212,78,246, +58,212,58,78,78,212,78,78,58,58,99,78,78,78,78,78,58,58,99,58, +58,78,78,78,58,58,99,58,99,58,58,99,58,218,58,58,99,58,58,218, +99,58,99,99,58,99,30,99,99,8,58,99,58,99,58,58,58,99,58,99, +58,218,218,58,99,58,99,58,58,58,78,99,78,58,99,58,58,78,58,78, +78,58,78,78,58,78,78,246,246,212,78,78,78,58,78,246,78,246,58,246, +212,78,58,78,78,58,246,78,78,78,58,246,78,246,78,58,246,78,78,78, +58,218,99,11,71,12,92,92,92,223,223,223,223,223,49,118,112,22,237,208, +72,245,55,243,245,72,72,72,65,208,236,208,208,245,72,55,243,55,55,243, +245,245,245,103,237,237,30,11,11,112,71,11,99,58,78,246,246,246,246,78, +58,218,58,58,246,78,212,78,246,78,246,78,212,78,78,212,78,246,78,78, +58,78,78,78,78,78,246,246,246,58,58,78,58,246,78,212,78,78,99,58, +58,78,58,58,58,58,58,99,58,58,58,58,78,58,58,99,99,58,58,58, +99,218,58,99,99,99,58,99,58,8,99,99,99,58,11,58,58,58,99,58, +58,58,58,58,58,58,58,99,99,78,78,58,58,78,58,58,99,78,78,78, +78,78,78,78,78,78,212,246,246,246,246,78,78,246,246,58,246,78,246,78, +78,78,212,246,246,246,78,78,212,246,246,246,58,246,246,78,246,246,78,58, +218,99,71,12,12,92,92,82,223,49,223,118,112,22,208,72,72,208,65,22, +22,112,11,112,112,112,112,112,118,118,118,112,112,112,30,244,244,30,237,65, +236,72,55,55,243,243,208,208,237,237,11,71,11,11,71,11,99,58,246,246, +246,78,78,246,58,246,78,246,58,246,58,246,58,246,246,78,78,78,212,78, +212,246,212,78,246,246,58,78,78,246,99,246,246,58,246,58,78,78,78,58, +78,78,78,78,78,78,58,58,58,99,58,58,78,99,58,58,58,218,99,99, +58,58,99,58,99,58,58,99,99,8,58,58,99,58,99,218,99,58,99,99, +99,58,99,58,99,58,58,58,58,78,58,58,58,58,58,58,58,78,212,78, +78,58,246,78,58,246,246,246,246,246,246,246,78,58,246,78,246,58,246,58, +246,78,78,78,58,246,212,78,78,78,58,246,78,212,246,58,78,212,58,99, +218,71,12,92,19,223,49,49,118,62,30,22,208,208,103,30,244,112,244,118, +112,23,49,49,49,49,49,49,49,49,82,82,223,82,49,118,23,118,118,112, +11,30,237,22,65,245,55,243,245,245,103,237,237,11,71,11,71,71,218,58, +246,246,78,246,78,212,78,246,246,78,246,246,78,78,212,78,212,78,246,78, +78,58,246,78,58,246,78,212,78,246,78,78,78,78,78,212,246,246,246,78, +58,78,78,78,58,78,78,58,58,58,58,58,99,58,58,58,58,58,99,58, +58,58,58,58,58,99,99,58,58,8,99,99,58,58,58,99,99,99,99,58, +58,99,78,58,78,99,58,58,99,78,78,78,58,78,58,58,78,246,78,212, +78,78,58,78,246,246,246,246,246,246,58,78,78,246,58,246,78,246,78,246, +78,212,78,212,212,246,78,78,246,246,78,212,58,99,212,246,246,58,99,218, +118,12,92,223,223,49,49,11,237,208,208,103,244,23,118,112,118,112,49,49, +19,82,82,82,223,49,66,49,49,82,223,223,101,19,223,82,223,82,223,82, +82,49,23,112,11,244,30,65,72,55,55,245,208,22,237,112,11,118,71,218, +218,58,58,78,246,78,212,78,78,212,99,78,212,246,78,246,78,246,78,212, +246,246,78,246,246,78,246,78,246,58,246,78,58,78,246,246,246,246,212,246, +78,78,78,78,78,58,78,78,99,58,78,78,78,99,58,58,99,58,99,99, +58,99,99,99,99,58,99,58,99,8,99,99,99,58,58,99,58,58,99,58, +58,58,78,78,58,58,58,58,58,58,78,78,78,78,78,58,246,246,246,246, +246,78,78,212,246,246,246,246,246,246,78,212,78,246,78,212,78,246,58,246, +78,246,78,58,58,212,246,58,78,246,246,58,58,58,58,246,58,218,71,12, +223,223,49,49,49,30,65,72,72,30,112,118,118,112,118,49,223,223,223,49, +244,244,244,244,23,23,23,23,70,66,49,70,49,70,70,118,23,23,23,23, +49,223,19,82,223,223,23,11,244,237,208,72,55,55,208,103,30,11,11,49, +71,71,99,58,246,78,246,246,58,246,58,58,246,212,78,246,58,246,78,58, +58,212,78,78,212,78,212,78,78,78,212,78,78,78,246,212,246,246,246,212, +246,58,78,78,78,78,58,78,78,99,58,58,78,58,58,58,99,58,58,58, +58,58,58,58,99,58,99,58,99,8,99,58,58,218,58,58,58,99,58,58, +58,99,58,58,99,58,78,78,78,78,78,78,78,58,246,246,246,212,246,246, +212,246,78,246,246,246,246,246,212,246,246,78,246,58,212,246,78,78,78,246, +58,246,212,99,58,246,78,246,246,58,58,58,58,78,246,58,99,118,12,92, +223,223,223,11,22,72,208,244,49,112,112,118,49,82,223,49,244,244,242,62, +23,62,23,23,244,244,244,244,244,244,62,30,244,244,244,244,23,112,210,23, +62,244,244,23,223,82,53,82,49,112,30,30,65,72,55,245,208,237,30,112, +71,49,118,71,99,78,78,78,246,246,58,99,58,246,212,78,246,58,246,212, +99,58,212,246,78,246,78,246,212,246,78,246,246,212,246,246,246,212,246,246, +246,246,78,78,246,246,78,78,78,78,58,58,78,58,58,58,58,58,99,99, +99,78,99,58,99,99,58,99,58,8,58,99,58,99,99,58,58,99,58,58, +58,58,58,58,78,58,78,78,58,78,58,246,78,78,78,212,246,246,212,246, +246,246,246,246,246,246,246,246,246,246,246,58,246,58,99,212,246,212,78,78, +78,99,58,58,78,246,58,78,246,58,58,58,58,212,58,218,71,12,49,49, +49,112,22,72,65,112,49,112,112,112,223,19,118,62,244,62,62,23,23,244, +244,244,244,112,23,49,49,223,19,223,82,223,223,49,223,23,118,112,244,30, +62,62,62,62,23,62,23,223,82,8,82,71,30,244,22,72,55,245,103,237, +11,71,12,12,71,99,78,78,78,58,212,58,58,58,58,212,78,58,246,78, +58,58,58,212,78,246,58,78,78,212,212,246,246,246,212,246,246,246,246,246, +246,246,58,78,78,58,246,212,78,78,58,78,58,78,78,78,58,78,58,58, +218,58,58,99,58,99,99,99,58,8,218,99,58,58,58,99,58,58,99,78, +78,58,99,58,58,78,58,78,246,78,78,58,78,212,246,246,246,246,246,246, +246,246,246,212,246,212,246,246,246,212,78,246,58,58,58,246,78,78,212,246, +58,58,58,58,212,78,246,212,58,58,58,58,58,58,71,12,49,223,223,49, +30,208,72,30,49,49,112,49,223,223,23,22,244,62,23,23,62,22,112,118, +49,49,223,118,23,244,30,242,22,242,242,62,242,244,244,112,23,49,49,223, +23,112,30,244,62,112,210,23,23,49,82,8,223,244,237,30,208,55,243,245, +22,30,71,118,12,71,99,78,78,246,212,58,58,58,58,246,246,246,78,246, +58,58,58,78,212,78,246,246,246,58,58,212,246,246,246,246,246,246,246,246, +246,78,246,58,246,246,246,78,212,78,78,78,58,78,58,78,58,58,99,58, +58,58,99,58,58,58,58,58,58,8,58,99,58,58,58,58,99,58,78,78, +58,58,78,58,58,78,78,58,78,78,78,78,78,246,212,246,246,246,246,246, +246,246,246,246,246,246,212,246,246,246,78,58,58,58,58,246,78,78,246,99, +212,58,212,58,212,78,78,58,58,218,58,212,58,99,71,49,223,49,49,30, +55,72,112,49,244,11,49,82,112,242,242,62,23,62,244,112,118,223,82,118, +30,236,29,225,231,33,248,42,42,42,219,2,42,219,110,107,231,29,65,244, +112,223,223,49,112,30,30,23,23,23,23,49,82,101,49,30,30,242,72,243, +208,103,30,71,118,12,71,99,78,78,78,58,58,58,58,58,78,58,246,78, +58,58,99,58,246,58,246,58,246,58,99,58,212,246,246,212,246,246,246,246, +246,246,246,246,212,246,246,246,246,78,58,78,78,78,78,78,58,78,78,78, +58,78,99,99,99,58,58,99,99,8,99,58,99,99,58,58,58,58,78,78, +78,78,58,58,58,78,78,78,78,78,246,246,58,246,246,246,246,246,246,246, +246,246,212,246,99,58,246,246,246,246,212,58,58,58,99,212,78,212,212,58, +78,58,58,58,246,246,78,58,71,218,58,58,11,71,118,223,49,23,103,243, +22,49,118,30,118,82,49,30,242,62,70,62,244,118,223,82,112,65,93,205, +217,42,80,147,98,4,26,8,8,8,8,121,8,8,26,4,98,210,111,219, +29,29,65,112,223,82,23,30,244,62,62,62,62,49,82,82,112,30,30,65, +243,245,103,30,71,118,12,71,218,212,246,58,58,212,212,58,58,246,212,78, +58,58,212,58,58,246,78,246,58,58,58,58,246,212,246,246,246,246,246,246, +246,212,246,246,246,246,212,246,246,212,78,246,212,78,58,78,78,78,58,78, +78,78,58,58,58,58,99,58,58,8,58,58,58,58,58,58,58,58,237,78, +58,78,78,58,78,78,212,78,246,78,78,246,246,246,246,246,246,246,246,246, +246,246,246,58,58,58,246,246,246,246,58,58,99,58,58,246,246,78,99,78, +246,78,58,58,58,58,58,218,12,99,58,99,71,92,49,223,118,22,41,65, +223,23,30,118,19,23,22,242,23,23,30,112,223,19,112,29,222,232,87,80, +98,26,121,8,20,253,20,20,20,20,101,20,20,20,253,253,20,8,121,26, +4,14,2,231,29,30,49,82,112,30,244,62,23,210,118,82,101,223,30,244, +65,55,243,103,237,71,118,71,71,99,58,58,58,58,218,58,58,58,246,212, +58,58,212,78,99,58,246,246,78,58,58,58,58,246,246,246,246,246,246,246, +246,246,246,212,246,246,246,246,246,246,246,78,78,78,78,78,58,78,58,78, +78,58,58,58,78,99,58,58,99,8,99,58,58,99,99,58,58,58,58,237, +78,78,58,78,78,246,78,246,78,246,78,246,246,246,246,246,246,246,246,246, +246,246,58,58,58,58,246,246,246,58,99,78,246,212,99,246,212,58,78,246, +58,246,58,58,58,212,218,12,118,58,58,71,12,49,19,49,237,41,65,49, +118,112,223,82,244,236,62,66,62,30,82,8,112,93,68,6,137,88,162,253, +253,20,253,19,223,23,244,244,54,242,54,242,244,62,112,49,223,20,20,20, +20,253,26,98,14,33,29,244,82,101,112,22,62,62,62,23,49,53,82,30, +112,22,243,243,208,11,71,118,12,218,99,58,58,58,12,71,58,58,58,58, +99,58,58,246,246,58,58,246,246,58,58,58,99,58,246,246,246,246,78,58, +246,212,246,246,246,246,246,212,246,246,78,78,78,78,58,78,78,78,78,58, +78,58,78,237,78,58,99,99,78,8,58,99,58,58,78,78,78,78,78,78, +58,78,78,58,78,246,78,212,246,246,246,246,246,246,246,246,246,103,246,246, +246,246,58,58,58,99,212,246,246,58,212,78,246,58,58,58,58,58,212,78, +78,78,58,58,58,58,123,49,218,99,11,118,223,223,82,237,41,208,23,118, +237,223,82,244,18,210,23,23,112,19,223,103,64,6,148,147,26,253,20,8, +66,23,54,111,219,219,137,24,76,24,163,25,137,42,204,42,151,109,244,223, +20,20,20,20,8,4,111,231,236,23,82,12,237,62,62,23,62,223,253,223, +237,244,22,41,245,103,11,112,118,71,218,58,58,99,92,92,128,58,58,58, +58,58,58,212,78,58,58,212,58,58,58,78,78,58,212,246,246,246,58,58, +212,246,212,246,246,246,246,246,246,212,246,78,246,246,78,78,78,78,78,58, +78,58,58,78,99,58,58,58,99,8,99,58,58,58,58,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,246,246,246,246,103,246,246,246,246,246, +246,78,58,58,58,58,58,212,58,58,78,212,78,78,99,58,58,212,78,246, +212,212,58,58,58,218,92,12,218,99,71,12,223,82,118,243,55,23,223,30, +223,19,244,93,54,49,23,112,82,82,245,153,138,234,162,8,253,101,49,30, +111,125,24,201,142,16,159,142,43,95,197,156,193,193,51,141,224,25,248,231, +65,118,20,20,20,20,121,210,231,55,244,82,49,30,244,62,62,244,223,20, +118,237,112,208,243,245,237,71,118,49,71,58,58,218,92,92,12,58,58,99, +58,58,212,78,212,212,58,58,58,58,58,212,78,58,58,246,246,246,99,58, +99,246,246,246,246,246,246,246,246,246,212,246,58,78,78,78,78,78,58,78, +78,58,78,78,58,78,58,99,58,8,99,99,58,58,58,78,78,58,78,58, +78,78,78,246,78,78,78,246,246,246,246,246,246,246,246,103,246,246,246,246, +246,58,58,58,58,58,58,58,58,58,78,78,246,78,58,58,58,212,78,58, +58,78,58,58,58,12,92,12,99,218,118,19,82,223,22,116,237,49,112,112, +101,112,93,109,70,112,118,82,223,55,136,185,44,26,253,253,82,62,107,163, +117,16,114,159,161,106,98,46,26,26,26,26,26,4,32,81,44,142,43,234, +10,56,236,23,20,20,20,8,4,219,225,237,19,82,11,244,62,54,62,223, +20,112,30,244,72,239,103,237,71,12,12,71,58,71,92,92,12,128,58,58, +58,58,246,78,246,58,58,58,99,58,58,246,78,78,58,246,246,58,58,58, +58,212,246,212,246,246,246,246,246,246,78,78,246,58,246,58,78,246,78,58, +78,58,78,78,58,58,58,58,58,8,58,58,58,58,78,237,58,78,78,78, +78,78,78,58,246,246,212,246,246,246,246,246,246,246,246,246,246,246,246,246, +78,58,58,58,58,58,99,58,58,246,246,246,58,246,58,58,58,78,246,218, +11,58,58,58,58,12,92,71,218,11,49,223,101,23,239,93,23,118,244,223, +223,65,29,70,70,112,82,82,72,233,135,152,121,253,20,49,242,179,176,39, +198,156,32,47,26,26,69,113,26,47,9,47,162,113,26,121,113,252,152,159, +43,234,217,238,30,253,20,251,8,4,107,17,30,82,223,22,62,62,54,244, +82,19,237,112,244,41,245,30,112,71,92,71,99,71,12,92,92,71,78,58, +58,246,246,58,78,212,58,58,58,58,58,78,246,58,99,58,212,58,58,58, +58,78,246,246,246,246,246,246,246,246,246,246,78,78,78,78,246,58,78,78, +58,58,58,99,58,99,58,58,58,8,58,99,99,58,58,78,78,58,78,58, +78,58,78,78,78,78,78,246,246,246,246,246,246,246,246,246,78,246,246,246, +58,58,78,58,78,58,58,99,58,78,58,246,246,58,58,58,212,58,58,12, +71,58,58,58,99,92,92,71,218,71,223,8,19,22,150,30,49,11,23,101, +30,93,54,49,112,49,20,30,254,181,95,26,253,253,49,65,163,166,206,202, +52,26,8,121,4,161,43,114,139,131,57,200,195,188,192,88,26,26,121,98, +197,67,234,145,230,22,82,20,20,8,98,107,100,112,253,112,103,244,54,62, +49,20,49,237,118,208,243,103,11,11,12,92,92,92,92,12,49,12,58,58, +78,58,246,78,246,78,212,99,58,58,78,246,58,78,58,58,58,99,58,58, +58,99,246,246,246,246,246,246,246,246,246,246,246,78,246,78,246,78,58,78, +78,58,78,78,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,78,78,78,78,246,246,246,246,246,246,246,246,246,246,246,58,212,58,246, +99,212,58,99,78,99,58,58,78,246,58,58,58,78,78,58,78,78,99,71, +12,71,58,58,12,12,12,71,11,12,223,101,49,243,100,118,223,112,82,19, +93,225,113,23,244,101,223,41,129,199,52,253,20,223,242,124,39,57,117,122, +121,121,47,44,195,35,94,196,165,189,189,189,27,84,200,139,67,186,26,121, +240,106,159,234,175,68,242,20,20,20,8,210,238,93,223,19,237,244,23,54, +62,19,101,244,112,30,243,208,237,11,12,92,49,223,12,12,92,12,58,78, +246,78,58,246,78,212,78,78,58,58,212,58,58,58,78,99,58,58,99,58, +58,58,246,246,246,246,246,246,246,246,246,246,78,246,58,78,58,78,78,78, +78,78,237,78,58,58,58,58,58,8,99,58,99,58,78,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,103,246,246,246,246,218,58,58,78,78, +58,99,71,12,58,78,58,78,58,78,123,12,78,78,58,212,78,78,123,92, +12,12,99,99,12,92,92,71,11,118,82,101,112,116,236,82,112,112,82,118, +100,110,66,23,49,101,244,215,73,43,69,253,101,23,219,59,97,202,52,8, +8,4,120,97,187,139,27,143,46,113,26,26,46,88,60,27,131,200,192,47, +82,66,81,159,234,170,68,118,20,251,20,26,2,64,244,101,118,22,23,62, +62,49,20,118,244,23,208,245,30,11,71,12,92,12,12,49,12,12,71,58, +246,246,78,246,78,246,58,78,58,78,212,218,12,246,78,99,58,78,78,11, +12,58,58,246,246,103,246,246,58,246,246,246,246,78,246,78,78,78,58,78, +78,58,58,58,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,212,78,246,246,78,99,58,246,246,246,246,246,246,71,12,99,58,58,99, +58,58,53,251,71,78,78,78,78,246,19,19,71,246,246,78,212,246,12,92, +12,12,12,12,92,12,12,71,218,118,19,101,244,239,65,223,244,11,53,112, +222,235,66,112,223,20,72,45,90,221,8,253,19,242,214,97,57,152,26,8, +26,188,57,187,139,186,8,8,8,8,121,121,8,8,26,4,44,131,94,67, +162,82,113,44,159,76,220,29,82,0,20,8,98,238,245,82,82,237,23,62, +54,112,20,223,237,49,22,245,237,11,71,49,12,92,12,12,12,12,71,78, +246,58,246,58,246,78,246,58,246,212,58,19,101,218,78,78,99,58,58,53, +101,71,58,246,246,246,78,71,92,58,246,246,212,246,78,58,58,78,78,58, +78,78,78,78,58,58,58,58,58,8,99,99,58,99,58,78,78,58,99,58, +78,78,58,246,78,58,71,92,218,246,246,246,103,246,12,92,92,58,58,58, +58,218,63,53,19,246,246,78,78,212,53,92,92,212,246,78,78,58,92,218, +12,12,92,92,92,12,12,71,11,118,101,101,22,116,242,223,237,11,8,30, +17,62,70,112,8,53,72,172,134,143,8,20,223,109,102,57,97,81,121,82, +252,114,35,157,165,26,253,8,8,46,182,4,26,26,8,8,113,160,190,35, +186,66,121,106,117,152,232,68,49,79,20,8,26,42,17,223,53,22,112,244, +54,244,8,82,30,118,30,245,30,11,99,12,12,92,123,12,12,12,71,78, +246,78,246,78,58,246,246,58,246,58,12,53,53,12,78,78,78,99,12,63, +63,92,78,78,246,246,78,229,229,12,246,246,246,212,78,71,71,58,78,78, +58,78,78,58,58,58,212,58,58,8,99,58,58,58,58,78,78,58,99,218, +99,58,246,78,78,58,12,92,12,78,246,246,246,218,92,92,19,71,58,58, +58,12,38,92,53,71,246,58,246,218,108,92,92,218,246,212,78,58,12,218, +12,12,12,92,12,92,12,71,71,118,82,8,103,116,242,82,244,11,82,30, +222,210,223,23,8,101,55,172,183,186,8,253,223,110,102,157,97,161,8,8, +127,67,190,140,189,26,8,8,69,127,120,5,52,26,26,8,121,9,84,187, +43,113,82,98,142,152,89,119,244,20,0,253,121,219,64,23,101,30,30,23, +54,244,82,101,30,112,112,72,237,71,30,12,12,92,118,12,12,12,71,58, +246,246,58,246,58,212,78,246,58,246,108,63,53,19,78,78,78,58,53,101, +53,108,78,246,246,246,108,79,20,53,246,246,246,78,99,92,92,12,99,78, +78,58,58,218,218,218,99,58,58,8,99,99,58,58,58,99,99,218,71,11, +99,99,78,246,212,71,218,71,92,71,246,246,246,71,92,92,19,19,58,58, +58,92,53,92,92,108,58,246,246,71,92,92,92,92,212,246,246,58,123,48, +12,12,12,92,92,12,12,12,99,118,19,101,237,116,65,49,30,112,82,244, +222,235,26,118,82,101,65,136,183,7,8,8,82,242,21,157,57,192,69,8, +26,7,191,157,190,60,9,8,26,52,84,131,60,4,121,8,26,113,67,94, +142,113,82,98,43,152,10,119,244,251,0,253,121,111,64,23,101,244,22,49, +62,62,82,101,112,23,112,103,30,71,11,12,12,118,12,12,118,12,71,78, +78,246,78,58,218,58,78,246,246,12,53,101,53,19,58,78,58,12,63,63, +53,63,218,246,246,71,79,20,63,101,218,246,246,218,12,19,108,12,99,58, +99,71,218,71,71,218,71,218,71,8,99,58,99,99,58,58,11,218,71,218, +71,71,218,58,58,99,218,99,71,92,218,78,246,92,92,12,223,53,71,58, +58,19,19,92,92,19,12,78,78,12,92,92,92,92,71,78,78,218,123,241, +48,12,12,92,49,12,118,12,71,49,223,101,11,116,65,66,112,11,82,112, +100,54,66,66,223,20,244,105,90,159,8,8,8,244,10,167,187,202,98,8, +121,47,192,169,190,35,195,188,188,195,57,84,106,47,8,8,8,122,195,140, +95,66,82,98,142,221,175,119,244,251,251,20,8,219,64,112,101,30,242,118, +23,62,19,20,11,118,112,22,11,11,99,12,12,12,12,71,12,118,71,58, +246,58,246,99,12,99,212,78,58,19,53,53,101,53,58,78,218,53,101,53, +53,63,218,246,246,63,0,101,19,53,12,78,58,12,108,92,19,108,92,71, +71,12,71,71,123,71,71,123,71,8,99,99,58,58,58,11,58,11,99,218, +99,11,99,99,218,99,218,99,71,12,12,99,99,92,92,92,12,19,53,71, +99,38,53,12,12,92,19,218,212,92,92,92,48,12,108,128,246,218,123,48, +128,123,12,12,12,12,12,118,71,71,223,8,112,41,55,49,49,244,223,49, +93,231,70,82,223,20,82,116,181,158,252,8,20,223,242,214,57,157,156,46, +8,66,26,147,44,198,86,196,86,198,44,52,4,8,8,8,46,60,97,194, +52,82,82,180,159,177,232,64,66,79,20,8,26,231,100,49,8,237,62,23, +62,244,82,82,30,223,11,237,112,11,11,12,12,71,12,12,118,12,71,218, +246,78,58,218,92,99,246,212,92,53,79,79,53,53,218,58,19,63,38,126, +53,101,92,58,19,251,63,223,19,19,92,71,12,223,92,223,223,92,19,92, +12,71,123,71,71,71,71,71,71,8,11,58,11,58,99,58,99,58,99,58, +58,218,218,218,99,218,11,99,99,71,92,92,12,49,92,71,99,12,53,53, +92,20,53,123,48,12,92,19,218,19,92,12,241,48,92,92,58,218,92,241, +128,212,71,12,118,12,12,71,71,112,223,19,82,55,116,112,49,244,223,19, +208,238,235,66,223,253,82,22,250,73,95,113,8,82,49,111,102,207,132,188, +252,69,8,121,162,4,47,52,127,4,4,26,26,8,8,46,186,86,169,95, +66,8,4,95,192,87,45,236,101,251,253,8,70,222,236,223,223,237,244,23, +54,244,82,82,237,118,11,244,71,11,99,71,118,12,12,12,12,12,12,58, +78,78,246,123,108,12,212,12,53,63,13,83,63,53,12,92,53,226,13,13, +53,53,53,226,75,63,12,71,92,19,19,92,92,92,19,12,12,12,92,12, +71,71,71,71,71,12,71,71,71,8,99,99,58,99,99,58,58,99,58,58, +11,218,71,71,11,218,99,99,58,218,12,19,92,92,92,99,78,58,92,101, +75,251,53,12,123,48,92,108,101,63,92,12,241,241,92,92,108,92,108,128, +212,246,58,12,12,12,49,12,12,118,12,49,19,237,116,22,49,118,244,82, +112,17,231,70,223,82,20,82,93,45,133,7,46,8,8,49,50,224,168,207, +142,60,127,46,8,26,8,8,8,8,8,8,121,26,47,192,166,169,7,113, +66,113,7,156,36,217,28,23,251,251,20,26,111,222,30,8,49,22,112,62, +242,112,101,112,30,49,244,11,112,11,99,71,12,12,118,12,12,12,71,246, +246,78,212,92,108,92,218,53,38,13,0,0,63,101,20,63,101,75,83,83, +63,101,229,79,126,92,58,78,12,19,92,92,19,92,12,71,71,118,71,71, +218,12,71,71,71,71,71,218,99,8,218,99,218,58,58,218,99,99,58,99, +58,58,99,99,218,99,218,99,58,58,99,92,92,92,19,58,78,78,99,108, +0,34,38,123,123,48,123,92,53,108,92,12,241,241,241,123,92,19,19,123, +241,212,246,99,12,71,12,71,12,71,118,223,82,118,245,100,112,49,30,118, +223,237,238,111,113,223,19,20,49,93,144,184,44,113,8,253,19,210,173,141, +168,57,196,142,60,52,122,182,113,113,122,3,60,159,130,86,43,122,26,223, +47,106,95,76,89,68,244,20,251,20,8,210,238,72,223,19,30,112,23,62, +244,223,20,118,112,112,244,118,11,99,99,218,71,218,71,12,12,71,58,58, +78,246,246,92,63,53,53,101,83,0,83,83,53,63,63,53,20,83,0,0, +53,53,79,0,226,78,58,78,12,108,92,19,92,71,58,58,99,71,71,123, +71,218,218,71,218,218,99,218,99,8,99,99,218,218,99,99,99,99,58,99, +99,58,99,11,71,99,99,58,58,58,58,71,92,92,19,78,78,58,78,218, +53,63,101,123,123,48,48,123,92,19,92,92,241,241,241,241,92,92,92,12, +241,212,78,78,123,118,12,12,12,12,112,92,49,223,30,247,65,49,23,112, +82,23,72,231,14,26,82,19,101,49,17,146,102,154,147,69,8,82,49,23, +249,104,158,39,206,169,86,130,202,142,202,114,39,117,76,88,4,66,66,113, +7,95,234,175,68,22,101,20,251,8,4,107,100,112,101,112,30,23,112,62, +49,101,49,244,118,112,112,118,11,78,99,99,99,58,71,12,92,99,246,78, +246,58,218,108,108,53,63,229,0,83,34,13,53,53,101,38,13,0,0,13, +53,101,63,101,99,78,58,78,71,19,19,92,71,58,99,58,11,218,218,71, +99,99,99,99,218,58,99,218,218,8,71,218,99,99,218,58,99,99,99,99, +99,58,99,58,99,218,11,58,58,99,58,58,71,92,92,58,78,78,78,78, +118,19,53,123,48,128,128,48,123,12,92,92,48,128,212,48,241,12,12,92, +241,128,246,246,246,71,12,12,12,71,71,118,49,223,49,208,116,22,49,23, +11,223,223,72,225,235,113,82,82,101,49,65,68,164,201,7,162,26,8,121, +66,223,23,216,14,36,177,152,154,152,80,255,98,66,66,223,66,4,32,152, +152,163,228,222,112,251,20,20,8,113,219,222,22,82,23,22,62,112,54,244, +101,82,112,112,23,118,112,11,11,78,58,58,246,99,71,71,99,58,246,212, +58,58,123,108,108,53,20,13,101,19,34,13,53,53,53,0,75,38,0,34, +63,53,53,71,58,78,58,78,11,92,92,71,58,58,58,58,99,218,11,99, +11,58,218,218,99,99,218,99,99,8,99,71,99,99,99,99,99,218,58,99, +218,58,99,99,99,58,58,78,58,99,58,58,58,71,12,78,78,78,78,78, +58,12,19,12,48,218,246,218,48,12,92,92,241,48,58,212,48,241,12,92, +48,241,212,58,212,212,123,118,12,71,118,118,12,223,49,118,55,239,244,223, +112,112,82,118,236,225,14,4,26,82,101,19,112,93,153,21,224,174,88,162, +26,26,121,82,66,66,66,66,66,66,26,82,66,26,113,127,32,44,51,87, +248,222,236,223,20,20,20,8,70,111,17,237,223,49,237,30,62,54,30,118, +253,49,112,118,23,118,118,11,99,58,58,58,212,99,71,218,246,78,78,58, +58,58,108,108,63,38,13,92,58,12,13,251,53,63,251,79,12,71,34,34, +251,53,19,58,78,78,78,58,58,71,71,58,99,99,58,99,58,11,58,99, +99,99,99,218,218,99,218,218,99,8,71,99,218,218,218,99,218,99,99,99, +99,71,58,99,99,99,99,58,58,99,58,58,78,58,99,78,58,78,58,78, +78,78,99,218,128,58,58,78,128,48,12,92,123,241,78,246,58,48,241,218, +12,128,212,212,58,58,212,218,71,12,71,12,118,12,223,49,11,243,55,244, +49,112,244,223,49,236,17,111,4,121,82,82,8,223,244,29,153,61,148,234, +152,32,147,52,4,4,113,26,113,26,98,98,147,255,7,193,24,163,217,238, +110,112,101,20,20,253,8,70,107,222,22,223,223,244,244,244,244,242,112,82, +223,118,23,23,49,118,71,11,58,58,58,246,246,58,99,78,58,212,212,78, +58,99,53,53,38,83,19,58,246,19,34,79,251,34,34,71,58,71,79,13, +83,63,218,58,58,99,58,78,58,99,78,58,99,99,99,58,58,99,99,58, +218,11,218,99,11,218,11,99,71,8,71,218,218,11,71,99,218,99,99,99, +99,218,11,99,58,58,58,58,11,58,99,218,58,58,78,78,78,78,58,58, +78,78,78,78,58,78,78,78,58,58,48,123,48,48,128,78,246,78,128,241, +241,241,128,212,58,58,58,58,218,12,118,71,71,112,118,223,49,11,245,55, +30,49,112,244,223,19,30,93,107,111,4,26,101,101,8,101,112,242,93,203, +6,170,21,74,51,51,104,24,234,76,24,104,76,124,232,56,225,18,30,223, +20,20,20,20,8,66,235,231,236,112,223,118,30,112,112,54,244,112,82,49, +112,23,118,118,12,11,99,99,246,58,58,58,78,58,246,246,78,78,212,78, +58,12,53,229,34,40,78,78,58,38,0,13,13,79,71,58,58,71,13,0, +38,71,58,99,58,99,58,99,78,58,58,99,99,99,71,99,58,99,218,99, +71,99,218,99,99,71,218,99,71,8,71,71,71,123,218,218,11,218,218,218, +218,99,218,218,99,99,99,99,58,99,99,99,99,99,58,78,78,58,58,99, +99,78,78,246,78,212,78,78,58,78,128,48,48,241,48,246,78,58,246,128, +128,128,128,128,212,78,212,78,58,218,71,71,12,12,118,118,49,49,112,208, +41,22,49,112,244,23,19,49,22,93,219,14,4,8,82,101,20,101,223,49, +30,65,18,29,17,203,228,230,56,96,91,225,225,236,242,112,49,82,20,20, +20,20,82,113,210,107,29,22,118,223,112,30,244,244,62,112,23,82,223,49, +118,118,49,49,118,71,99,246,58,58,212,246,246,78,212,58,246,246,78,58, +218,53,209,126,40,78,78,78,218,0,34,34,79,71,78,99,58,71,251,229, +12,58,99,99,99,58,58,58,58,99,99,99,99,218,99,58,99,99,99,218, +99,218,11,218,218,11,218,71,71,8,71,123,71,71,218,123,71,99,11,99, +218,11,99,71,218,99,58,99,99,58,218,218,99,99,58,58,58,58,99,58, +58,99,58,246,246,246,78,58,58,58,78,58,48,48,241,78,246,78,78,58, +58,241,241,241,212,58,246,78,246,58,218,71,71,71,118,118,118,49,49,112, +103,243,236,112,49,244,112,49,223,118,65,93,107,14,98,113,82,8,101,253, +101,20,101,82,82,223,118,118,49,49,49,82,82,101,101,20,20,253,253,121, +26,70,235,110,29,103,118,223,223,11,244,244,54,242,244,49,19,223,49,118, +118,49,12,71,11,99,212,246,78,78,78,78,212,246,78,58,78,212,78,58, +12,38,213,71,78,58,58,78,40,83,79,20,99,58,99,58,99,12,92,71, +78,58,99,99,99,99,99,99,99,99,218,218,99,218,218,99,218,218,11,218, +11,218,218,71,218,218,71,123,71,8,71,71,12,71,71,218,218,218,71,71, +218,218,218,218,71,218,218,99,99,218,99,99,99,99,99,99,58,99,58,99, +99,99,99,58,78,78,78,78,58,99,58,58,58,128,48,128,78,78,58,78, +212,212,212,241,128,58,246,246,58,246,58,218,218,118,71,71,118,12,118,49, +23,237,245,55,208,23,118,23,112,223,223,118,244,236,18,110,14,210,4,66, +121,8,82,20,82,101,101,251,20,20,20,101,8,20,8,8,26,26,210,235, +109,110,65,30,118,223,49,244,244,244,244,242,65,30,223,82,49,118,118,49, +92,49,118,71,11,78,246,78,58,246,212,246,78,78,246,78,246,78,212,218, +53,92,99,78,58,58,58,246,53,0,53,99,99,58,99,58,99,71,218,58, +99,58,99,218,58,99,58,78,99,99,11,99,71,99,99,218,99,99,218,71, +123,218,71,218,12,71,71,71,71,8,71,71,71,71,71,118,71,71,218,99, +71,71,71,123,71,71,218,99,99,218,218,71,11,218,99,99,58,99,58,99, +99,99,218,58,58,78,78,78,58,99,99,58,58,58,58,128,246,78,58,58, +58,58,246,128,128,58,212,246,78,78,78,58,58,218,71,71,11,118,118,49, +12,23,11,103,243,72,237,23,23,112,23,223,19,223,112,22,109,18,29,111, +111,210,210,70,4,26,26,26,26,26,26,4,4,70,98,235,2,18,29,65, +54,23,223,49,23,244,244,112,244,54,22,244,118,82,223,223,118,92,49,49, +223,71,11,99,99,78,246,58,246,78,58,212,78,78,58,58,246,78,58,218, +71,78,58,58,99,58,58,99,19,77,58,58,58,218,99,58,58,58,58,58, +218,99,11,218,58,99,218,58,218,218,71,218,218,71,99,71,218,71,71,218, +71,123,71,71,71,71,71,71,12,8,118,118,71,71,118,71,71,71,118,12, +71,123,71,71,71,71,71,71,218,99,99,99,218,218,71,218,99,99,58,99, +99,218,99,218,58,58,246,78,78,99,99,99,99,58,246,78,58,246,58,58, +58,58,58,78,78,58,58,58,246,212,99,58,58,58,218,99,71,118,11,118, +49,49,49,23,11,208,55,245,22,112,23,23,23,23,49,49,49,223,112,30, +22,236,18,18,18,29,18,18,18,18,107,236,29,236,236,22,30,23,223,223, +223,118,118,112,244,112,244,242,242,30,23,223,82,223,49,49,49,223,49,12, +71,71,99,58,246,212,58,58,58,78,78,78,58,58,58,58,78,212,246,78, +78,58,58,11,99,58,78,78,99,58,58,99,218,99,58,99,58,58,58,218, +99,71,218,99,218,58,99,218,218,71,218,123,71,99,71,218,71,71,71,12, +71,71,12,12,12,12,12,12,12,8,12,12,12,12,12,12,118,118,71,71, +71,218,71,123,71,71,71,71,123,71,218,11,218,71,218,123,218,99,218,58, +99,99,11,218,71,99,99,58,78,58,99,99,71,99,58,78,246,246,246,58, +58,218,58,99,78,78,246,78,78,246,58,58,58,212,58,58,99,71,71,118, +71,118,118,23,49,112,112,103,72,72,65,244,112,23,118,118,70,223,223,223, +223,49,118,23,118,112,112,244,112,112,23,23,23,49,49,223,223,49,23,118, +244,244,112,62,244,109,22,30,49,223,223,82,49,223,49,223,223,118,118,71, +99,99,99,78,78,246,58,58,78,78,58,58,58,99,78,246,78,78,78,78, +99,99,99,58,99,58,78,78,58,99,99,11,218,99,99,58,58,11,99,218, +218,218,71,99,218,218,11,218,123,71,218,71,71,218,71,71,123,71,118,12, +71,12,12,12,12,12,12,12,12,8,12,12,12,12,12,12,71,71,71,118, +71,118,71,71,118,12,71,71,71,71,99,218,123,71,218,71,218,71,99,99, +99,218,218,71,218,218,99,58,58,58,58,218,99,218,218,99,58,99,78,58, +58,99,99,99,58,58,78,246,246,78,78,78,58,99,58,58,99,58,99,71, +11,71,12,23,118,118,118,23,112,30,103,208,208,65,242,112,118,23,23,118, +118,118,49,112,23,112,11,112,112,112,118,49,49,49,49,112,23,23,112,244, +244,22,22,22,242,112,49,223,223,66,223,49,223,49,223,49,12,71,71,99, +99,58,212,212,246,58,78,78,58,58,99,99,99,58,78,78,78,78,58,58, +99,99,99,58,58,58,58,58,99,218,71,218,99,99,218,58,99,99,71,218, +71,71,218,99,71,99,123,71,118,118,123,71,71,123,71,71,12,12,118,12, +12,12,12,12,12,12,71,12,71,8,12,92,12,92,71,12,118,118,12,12, +118,71,71,12,71,71,118,12,12,71,118,218,71,71,71,12,71,12,218,218, +99,99,218,218,71,71,71,218,99,99,99,99,71,71,218,71,99,58,58,58, +58,58,99,11,99,99,99,58,246,78,246,78,58,99,99,99,58,58,99,99, +99,11,71,112,112,118,118,92,118,23,118,112,30,237,103,65,65,22,30,54, +244,244,23,112,244,112,244,112,244,23,244,23,112,62,244,244,30,242,22,242, +22,30,23,49,49,19,82,223,223,49,49,49,223,49,12,11,11,218,99,58, +58,78,78,78,246,78,78,99,99,58,99,58,58,78,78,78,58,99,218,218, +71,99,99,99,58,99,58,99,71,123,71,218,99,99,218,99,218,71,12,71, +71,218,71,71,218,71,71,71,71,71,12,71,71,71,118,12,12,12,71,71, +12,12,12,12,118,12,12,92,12,8,12,12,71,12,12,12,12,12,71,12, +118,12,12,12,118,12,71,12,12,71,71,71,71,123,71,12,12,71,71,218, +218,218,11,71,123,71,71,218,71,99,99,58,99,99,71,218,218,99,218,58, +58,58,58,99,218,71,99,218,58,58,58,246,212,58,58,99,99,58,99,58, +58,58,58,218,71,71,112,71,118,118,49,23,118,118,49,112,112,30,237,22, +22,22,103,22,22,22,22,22,30,242,22,22,22,103,22,22,30,112,112,23, +49,49,49,82,223,66,49,49,49,49,223,12,118,71,218,99,99,58,99,58, +78,246,78,246,58,58,99,99,218,218,99,99,99,58,58,58,99,218,71,218, +99,99,58,58,58,99,218,123,71,71,218,218,99,99,99,123,71,71,71,92, +71,71,218,218,71,12,12,12,118,71,12,118,71,71,71,12,12,12,12,12, +12,12,118,118,12,12,12,12,12,8,92,92,92,12,12,12,12,12,12,12, +92,12,12,12,71,12,118,12,12,12,12,12,71,71,71,12,12,71,118,71, +71,123,71,71,71,118,71,71,71,123,71,218,218,99,218,71,12,71,71,218, +218,58,58,99,58,71,71,218,218,218,99,58,58,58,58,58,99,99,99,218, +218,99,58,58,99,99,99,11,11,11,23,112,118,112,49,118,118,118,23,118, +49,118,23,112,112,112,112,244,112,112,118,112,118,49,49,223,49,223,223,49, +223,223,49,49,223,49,223,223,118,118,71,11,218,99,218,99,218,78,58,58, +58,58,58,218,218,218,218,218,58,99,58,58,58,58,218,99,71,71,123,71, +218,99,58,99,99,71,71,12,12,71,71,71,218,218,218,71,118,71,71,12, +123,71,12,71,71,12,12,12,118,71,12,12,12,118,118,12,71,118,12,118, +12,12,12,12,12,92,12,12,92,8,92,92,12,12,92,12,92,12,12,12, +12,12,118,12,12,12,12,12,12,12,118,12,12,71,118,71,12,12,71,118, +71,71,71,123,218,118,12,71,71,71,71,99,99,218,218,71,71,71,71,71, +99,218,99,58,99,218,218,71,71,71,218,71,58,99,58,58,99,58,218,99, +99,218,99,99,58,58,58,99,58,99,218,11,71,112,11,112,118,23,118,23, +49,118,118,92,49,92,49,92,49,92,49,223,223,49,223,49,49,49,49,82, +49,49,49,223,118,118,71,71,11,71,99,218,218,99,58,58,58,58,58,58, +58,218,218,218,71,218,218,99,99,99,99,58,218,218,71,123,71,71,218,11, +99,99,218,218,71,71,12,71,12,218,218,218,71,218,118,12,71,118,71,71, +71,71,71,71,118,71,12,12,12,71,12,12,12,12,12,12,12,49,12,12, +12,92,12,49,12,92,12,12,92,8,92,92,92,92,92,12,92,12,12,92, +12,92,12,92,12,71,71,12,12,12,12,71,12,118,71,118,71,118,12,12, +12,12,71,71,218,71,71,118,118,12,12,118,71,218,71,218,123,12,12,12, +12,71,71,99,99,99,218,71,71,71,71,123,71,218,218,58,99,99,58,218, +99,218,218,11,99,218,99,218,218,58,58,58,99,218,71,11,71,71,118,11, +112,71,112,118,112,12,118,118,118,118,118,118,118,118,118,118,223,223,49,49, +118,118,118,71,71,71,218,71,218,71,99,99,99,218,58,58,58,218,218,218, +218,71,71,218,123,71,218,99,58,218,218,99,71,118,12,71,71,71,218,218, +218,99,71,118,12,12,12,71,71,123,71,71,71,12,118,12,92,71,118,71, +12,12,71,12,12,92,12,12,12,118,12,12,12,12,12,92,12,12,12,92, +71,92,12,92,92,92,92,92,12,8,92,92,92,92,92,92,92,92,92,12, +92,12,92,12,92,92,12,118,92,12,12,92,92,12,12,12,12,12,12,12, +12,12,71,118,12,118,71,71,12,12,12,12,118,71,218,71,218,71,118,12, +12,71,12,71,218,71,99,218,123,71,71,12,71,118,71,71,99,218,218,99, +218,99,218,218,218,71,123,71,218,218,218,218,99,99,99,58,99,99,99,218, +99,71,71,71,11,71,11,11,11,11,11,11,11,11,71,118,12,118,218,218, +71,218,71,71,218,71,99,71,99,99,99,58,218,99,218,218,71,71,71,71, +71,71,123,71,11,99,99,99,218,218,71,71,12,12,12,71,123,218,71,218, +71,118,71,12,118,12,12,71,71,218,118,12,12,12,92,12,71,118,71,71, +12,71,92,12,92,12,12,12,118,12,12,92,92,12,92,12,92,92,92,92, +92,92,92,92,12,92,92,92,92,8,92,92,92,12,92,92,92,92,92,92, +92,92,92,12,92,92,12,12,92,92,92,12,92,92,12,12,118,12,12,92, +92,12,12,12,71,71,71,118,12,118,12,12,12,71,12,71,71,71,71,12, +12,12,118,12,12,118,218,71,71,71,12,71,71,71,12,12,71,71,71,11, +218,99,218,218,218,218,71,71,71,71,71,71,71,71,218,218,218,218,99,218, +218,218,99,218,99,218,218,218,218,218,218,218,218,99,218,11,218,71,71,71, +71,123,71,123,71,218,99,218,218,11,218,99,71,71,71,71,71,71,71,92, +71,71,71,123,71,218,71,71,71,118,12,12,12,12,71,71,71,218,71,71, +12,12,12,12,12,12,12,71,71,71,12,12,12,12,12,12,12,12,118,12, +12,92,92,92,12,92,12,71,12,92,92,12,92,92,92,92,92,12,92,92, +92,92,92,92,92,92,92,92,92,8,92,19,92,92,92,92,92,223,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,12,118,12,12, +12,92,92,12,92,12,12,12,71,12,49,12,92,92,12,12,71,12,12,12, +12,71,12,12,12,12,71,12,71,71,218,218,71,118,12,12,12,71,12,12, +71,123,71,71,99,71,71,123,71,123,71,123,71,71,71,71,71,71,71,71, +71,218,218,218,71,71,218,71,218,71,218,71,71,123,71,123,71,123,71,123, +218,71,218,218,218,218,71,71,71,71,71,12,12,12,12,12,12,12,71,71, +71,123,218,218,71,71,12,12,12,71,12,12,12,12,71,71,71,12,118,12, +12,92,12,12,12,12,12,12,71,12,92,12,92,12,12,118,12,12,12,92, +92,92,92,92,92,12,92,92,12,92,92,92,92,19,12,92,92,92,92,92, +12,92,92,92,92,92,92,92,92,8,19,108,19,108,12,19,92,92,92,92, +92,92,92,92,92,19,92,92,92,92,92,92,92,92,92,92,92,92,12,92, +92,92,92,92,92,92,12,12,12,12,71,12,92,92,92,92,12,92,118,12, +12,12,12,12,92,12,12,12,71,12,71,71,71,12,12,12,12,12,12,92, +112,118,71,12,71,71,71,218,71,71,71,71,71,71,12,12,12,12,12,12, +12,118,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, +71,71,71,71,71,71,71,71,118,71,12,71,12,12,12,12,12,71,71,123, +71,71,71,92,12,12,12,12,92,92,71,12,12,12,12,71,12,12,92,12, +92,92,12,118,12,12,118,12,12,92,92,92,92,12,12,12,12,92,92,92, +92,12,92,12,92,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,19,19,108,92,8,92,92,19,92,108,92,19,92,92,92, +92,108,92,92,92,12,92,92,12,92,92,92,92,92,92,92,92,92,92,12, +12,92,92,92,92,223,12,92,12,12,12,12,12,92,92,12,92,12,12,12, +12,12,12,12,49,12,92,92,92,92,12,12,71,12,12,12,12,12,12,12, +92,92,118,92,12,12,118,12,12,12,12,12,12,71,12,12,12,12,12,12, +12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, +12,12,118,118,12,118,12,12,12,12,12,12,12,12,12,12,12,12,71,12, +12,12,71,92,12,92,92,49,12,12,12,12,118,12,12,118,92,12,92,92, +12,12,12,12,123,12,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,92,92,19,92,92,108, +92,19,92,108,108,92,108,92,108,8,19,108,19,92,19,108,108,108,92,19, +92,92,19,92,108,108,92,108,108,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,12,12,12,12,12,12,92,92,92,92,92,92,12,12,12,12,12,118,12, +12,12,12,92,12,12,12,12,71,12,12,12,12,71,71,12,12,71,118,118, +12,12,12,12,12,118,12,12,12,92,12,12,12,12,12,71,12,12,118,12, +12,71,12,12,12,12,12,92,118,118,12,12,12,12,71,12,12,12,49,12, +92,12,92,92,92,12,92,12,12,12,12,12,92,92,92,92,92,92,92,92, +12,12,71,92,92,92,12,92,223,92,92,92,12,92,92,92,92,92,12,19, +92,92,92,92,92,92,108,92,108,19,92,108,108,108,92,92,19,108,92,108, +19,92,19,92,108,92,108,19,19,8,19,108,19,108,108,19,92,19,108,19, +19,108,108,19,19,92,108,92,92,108,19,12,108,108,92,19,108,108,92,19, +92,92,92,92,92,92,108,19,92,92,92,92,12,92,92,92,92,92,92,92, +92,92,92,12,12,118,123,92,12,12,92,92,92,92,92,92,12,12,12,12, +12,92,12,12,92,12,92,92,92,92,92,92,12,12,12,12,12,12,12,71, +71,12,12,12,12,12,12,12,71,12,12,12,12,12,12,92,12,12,92,12, +92,12,12,49,12,92,12,12,12,12,12,71,12,12,12,12,92,12,92,12, +92,92,92,92,92,12,12,12,12,92,12,12,92,92,92,92,92,92,12,12, +12,92,92,92,92,19,108,92,92,92,92,92,92,92,92,19,92,108,108,92, +92,92,92,19,108,92,19,108,92,108,108,92,19,92,108,19,108,92,108,92, +19,108,108,92,108,108,19,92,108,8,19,19,19,19,19,108,19,19,108,92, +19,19,108,92,19,19,108,19,108,92,108,19,92,19,92,92,92,19,92,92, +92,92,92,92,92,92,19,108,92,19,19,92,92,92,92,92,92,92,223,92, +223,92,92,92,92,92,92,92,92,92,92,92,92,223,92,92,92,12,92,12, +12,12,12,12,92,12,12,92,12,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,92,49,92,12,92,92,12,12,92,12,92,12,92,12,12,92,12, +12,12,12,12,12,12,12,92,92,92,12,92,92,92,92,92,92,92,92,92, +92,92,12,12,12,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,19,92,92,108,12,92,92,92,12,19,92,92,108,92,19,19,92, +92,92,92,92,108,19,92,19,19,92,92,108,108,92,108,92,19,19,19,108, +19,19,19,19,19,19,108,19,19,8,19,53,19,53,19,53,19,53,19,108, +19,108,19,108,108,108,19,108,19,108,19,108,108,108,108,19,108,19,108,19, +19,92,108,19,19,12,108,92,108,92,108,19,108,92,92,92,92,92,92,19, +92,19,108,92,19,92,92,92,92,92,92,92,92,92,92,92,108,108,19,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,92,92,92,12,92,19,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,108,19,92,92,223,92,92,92,92,92,92, +19,108,108,108,108,19,92,92,92,92,108,108,108,108,108,92,108,92,108,19, +92,19,108,108,19,108,108,108,108,108,19,19,19,19,19,19,108,108,53,19, +108,19,108,53,19,53,19,53,19,8,19,19,19,19,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,108,19,108,19, +19,19,19,19,108,19,108,19,108,19,108,19,19,19,19,108,19,92,92,92, +19,19,108,19,108,19,19,92,92,92,92,92,92,92,92,19,19,108,19,108, +19,92,19,92,92,92,92,92,92,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,19,19,19,92,19,19,92,19,19,108,92,92,92,19,92,92,92, +92,92,92,92,92,19,19,19,19,108,19,108,92,92,92,92,92,92,19,19, +92,19,223,19,108,19,108,92,19,19,19,19,19,19,108,19,108,19,108,19, +19,19,19,19,19,19,19,19,19,108,19,108,19,108,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,8}; diff --git a/plug-ins/CentralReflection/CentralReflection.c b/plug-ins/CentralReflection/CentralReflection.c index 39833af201..b0427b15d1 100644 --- a/plug-ins/CentralReflection/CentralReflection.c +++ b/plug-ins/CentralReflection/CentralReflection.c @@ -1,8 +1,9 @@ /********************************************************************** - * CentralReflection Distortion Plug-In (Version 1.02) + * CentralReflection Distortion Plug-In (Version 1.04) * Daniel Cotting (cotting@mygale.org) ********************************************************************** * Official homepages: http://www.mygale.org/~cotting + * http://cotting.citeweb.net * http://village.cyberbrain.com/cotting ********************************************************************** */ @@ -237,7 +238,7 @@ drawCentralReflection(GDrawable *drawable) dx = (gfloat)col - a; for(row = 0; row < regionheight; row++) { pixelpos = (col+row*regionwidth)*bytes; - dy = -((gfloat)row - b); + dy = -((gfloat)row - b); abstand=(sqrt(dx*dx+dy*dy)); succeeded=1; verhaltniss=radius/abstand; @@ -587,8 +588,8 @@ CentralReflection_logo_dialog() GtkWidget *xvbox; GtkWidget *xhbox; char *text; - gchar *temp,*temp2; - char *datapointer; + guchar *temp,*temp2; + guchar *datapointer; gint y,x; xdlg = logodlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(xdlg), "About"); @@ -630,7 +631,7 @@ CentralReflection_logo_dialog() xpreview = gtk_preview_new (GTK_PREVIEW_COLOR); gtk_preview_size (GTK_PREVIEW (xpreview), logo_width, logo_height); temp = g_malloc((logo_width+10)*3); - datapointer=header_data; + datapointer=header_data+logo_width*logo_height-1; for (y = 0; y < logo_height; y++){ temp2=temp; for (x = 0; x< logo_width; x++) { @@ -654,7 +655,7 @@ CentralReflection_logo_dialog() "cotting@mygale.org\n" "http://www.mygale.org/~cotting\n\n" "Central-Reflection\n Plug-In for the GIMP\n" - "Version 1.02\n"; + "Version 1.04\n"; xlabel = gtk_label_new(text); gtk_box_pack_start(GTK_BOX(xhbox), xlabel, TRUE, FALSE, 0); gtk_widget_show(xlabel); diff --git a/plug-ins/CentralReflection/INSTALL b/plug-ins/CentralReflection/INSTALL index 5e53dcbbc9..f5ab6b112a 100644 --- a/plug-ins/CentralReflection/INSTALL +++ b/plug-ins/CentralReflection/INSTALL @@ -29,11 +29,9 @@ ------------------------------------------- REDUCE CODE SIZE ------------------------------------------- - With this new release 1.01 the size of + With this new release 1.04 the size of the logo in the about box has been reduced - in order to make smaller binaries. In - general the compiled plug-in will be - about 25-30% of the size of version 1.00. + in order to make smaller binaries. If you find that the plug-in is still too big, you can compress the executables with the gzexe program (if it is avaiable @@ -53,7 +51,7 @@ rm PLUGIN_NAME~ This will result in a code size of about - 35 to 40 kB, which isn't too much IMHO. + 20 kB, which isn't too much IMHO. ------------------------------------------ diff --git a/plug-ins/CentralReflection/README b/plug-ins/CentralReflection/README index 5e53dcbbc9..f5ab6b112a 100644 --- a/plug-ins/CentralReflection/README +++ b/plug-ins/CentralReflection/README @@ -29,11 +29,9 @@ ------------------------------------------- REDUCE CODE SIZE ------------------------------------------- - With this new release 1.01 the size of + With this new release 1.04 the size of the logo in the about box has been reduced - in order to make smaller binaries. In - general the compiled plug-in will be - about 25-30% of the size of version 1.00. + in order to make smaller binaries. If you find that the plug-in is still too big, you can compress the executables with the gzexe program (if it is avaiable @@ -53,7 +51,7 @@ rm PLUGIN_NAME~ This will result in a code size of about - 35 to 40 kB, which isn't too much IMHO. + 20 kB, which isn't too much IMHO. ------------------------------------------ diff --git a/plug-ins/CentralReflection/logo.h b/plug-ins/CentralReflection/logo.h index 871a318a06..cb94ec445f 100644 --- a/plug-ins/CentralReflection/logo.h +++ b/plug-ins/CentralReflection/logo.h @@ -1,4 +1,4 @@ -/* GIMP header image file format (RGB-only): //logo.h */ +/* GIMP header image file format (Indexed): //logo.h */ static unsigned int logo_width = 200; static unsigned int logo_height = 72; @@ -6,9 +6,783 @@ static unsigned int logo_height = 72; /* Call this macro repeatedly. After each use, the pixel data can be extracted */ #define HEADER_PIXEL(data,pixel) \ - pixel[0] = (((data[0] - 33) << 2) | ((data[1] - 33) >> 4)); \ - pixel[1] = ((((data[1] - 33) & 0xF) << 4) | ((data[2] - 33) >> 2)); \ - pixel[2] = ((((data[2] - 33) & 0x3) << 6) | ((data[3] - 33))); \ - data += 4; + pixel[0] = palette_data[data[0]*3+2]; \ + pixel[1] = palette_data[data[0]*3+1]; \ + pixel[2] = palette_data[data[0]*3+0]; \ + data--; -static char *header_data = ")1!X)1!X)A!Y)Q!\\)Q!\\)A!Z)A!Z)Q!])A!Z)A!Z)1!X)Q!\\*!!^)Q!])Q!]*1\"!*1\"!*1\"\"*1\"!*1\"!*1\"!*1\"!*Q\"%*!!_*!!_*!!_*1\"\"*!!^*A\"$+!\"(*!!_*Q\"%*1\"\"*A\"$*Q\"%*A\"#*A\"#*1\"\"*!!_*!!_*A\"$*Q\"&+A\",*Q\"%*A\"$*A\"$*Q\"$+!!\\*A\"#+1\"+*A\"$*Q\"%+1\"++!\")+Q\".+A\",+Q\".+1\"+*Q\"%*A\"$*A\"$*A\"$+!\"(*1!`*A\"$+A\"-+A\"-+A\",,!\"1,!\"1+A\",,!\"2+1\"++Q\"'+A\",+A\"-+A\",*A\"$*A\"$*A\"$+!\"(+!\"(+!\"(+1\"+*Q\"'+!\"(+!\"(+A\",,!\"),1\"2+A\",,!\"2+Q\"0,!\"1,!\"1,!\"1+A\"-+A\",,!\"1+A\"-,1\"2,!\"2+A\",+A\".+1\"++A\"-+Q\".+Q\"0+A\"-+Q\".+Q\".,!\"1,!\")+A\"+*Q\"'+A\"-+A\"-+A\",,!\"1,Q\"*+Q\".+A\".+A\"-+Q\".+Q\".+1\"++1\"+*Q\"%+!\"(*A\"$*A\"$*A\"$*A\"$*A\"$*A\"$+Q\".+A\",+Q\".,1\"4+Q\".+1\"++1\"*+1\")*Q\"&*!!_*A\"$*1\"!*A\"$*A\"$,!\"(+Q\".+1\"++!\"(*Q\"'*Q\"'*A\"$*1\"\"*1!`*!!_*A\"$*A\"$*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*A\"#*Q\"%)A!Z*A\"#*!!_*1\"!*Q\"%*Q\"%*1\"!+!\"(*!!_*1\"\")Q!]*A\"#)Q!\\*!!^*!!^*!!_)Q!]*!!^*1\"!*!!^)Q!\\)Q!\\*!!^*!!^*!!^)Q!])A!Z*!!^)1!X)A!Y)A!Z)1!W)1!X*!!^*!!^)Q!\\)Q!\\*1!`)Q!\\*1\"\")Q!]*1\"\"*A\"#*!!^*1\"\"*1\"!*1!`)Q!])Q!]*!!^*!!_*Q\"&*A\"\"*A\"\"*Q\"%*1\"\"*Q\"&*1!`*A\"#*A\"#*A\"$+!\"'*Q\"%*Q\"%*A\"#*A\"$*Q\"%*A\"#*A\"#*A\"#*Q\"&*Q\"'+1\")+Q\".+!\"(+1\"+*A\"$*A\"$*A\"$*A\"$*Q\"%*Q\"'+!\")+1\"++Q\".,!\"1+A\"-,1\"0+!\"(,!\"&+!\"$*A\"$*Q\"&*Q\"&+!\")+A\"-+A\",+Q\".+Q\"0,1\"3,!\"2+1\"+,!\"1+A\"+,!\".,A\"/+A\"++A\"-+Q\".+Q\"0+Q\".*Q\"'+1\")+1\"*+A\".+A\"-,!\"2,A\"3+Q\"-,1\"3,A\"1+A\"-,1\"3,1\"2,1\"0,!\"2,!\"2+Q\".,!\"1+A\".+A\"-,!\"1+A\"-+A\"-,!\"1+A\"-,!\"1+Q\"0,!\"0+Q\".+A\",+Q\"/+Q\"0+A\",,A\"0+A\"++A\"-+1\"+,!\"1,!\"1+A\"-,1\"4+1\"+,!\"1,!\"1,A\"1,!\"1,1\"4,1\"/,!\"1+A\",+Q\"/+A\"-*Q\"'*Q\"'*Q\"',1\"%,!\"1,!\"-,A\"*,!\"/,!\"1+Q\".+Q\".,!\"1+1\"*+1\"**Q\"'*A\"#*A\"$*Q\"%+1\"$+!\"(+1\"++A\"-+Q\".+A\"-+A\",+!\"(*A\"$*A\"$*A\"$*A\"$*Q\"%*Q\"%*Q\"%+1\"+*Q\"&+!\"(*Q\"%+!\"(*!!_*A\"$*A\"#*1!`*Q\"%*A\"\"*!!`*A\"\"*A\"#*A\"#*!!^*Q\"$*1\"!*A\"\"*A\"$*!!^*A\"$*1\"!*A\"\")Q!]*1\"!*!!^*!!_*!!^)Q!]*1!`)Q!\\)Q!\\)Q!]*!!`)1!X*!!^*!!^)A!Z*1\"!*A\"\"*!!^*1\"!)Q!]*1!`*Q\"%*!!^*A\"\"*!!^*1\"\"+!\"'*1\"\"*A\"#*1\"!*A\"$*A\"$*Q\"%*1!`*Q\"%*A\"#*A\"#*1\"\"*A\"$+A\"-+!\"(+!\"(*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%+1\"**Q\"%+A\"-+Q\"/,A\"/+Q\"++A\",*Q\"&*A\"$*A\"$*A\"$+!\")+Q\"/,1\"4+A\"-,!\"1,!\"1+A\".,!\"1,!\"&+1\"++A\",+!\"(+A\"-+A\",,1\"3,1\"4,1\"4-A\"1-A\"5-!\"5,1\"4+Q\"/+Q\"/+A\"-,1\"1,A\",+A\"-+A\"-+Q\"0+Q\"0,!\"1,1\"4.1\"5,A\"4,1\"4,1\"4.1\"5.1\"5-1\"5.Q\"6-Q\"5-A\"5-A\"5.1\"5,Q\"5-Q\"5,1\"4,1\"4.!\"0,1\"4,1\"4,Q\"3-1\"2,1\"4,1\"4,!\"1.!\"4,!\"2-1\".,1\"3-1\"1,Q\"4+Q\"0,!\"2,1\"3,!\"0,!\"1+A\"-,!\"2+A\",+A\",,!\"2+A\",,!\"1,!\"1,!\"1.!\"5.1\"5,A\"5.A\"6-Q\"5.1\"5-A\"1,A\"4,1\"4,!\"0+Q\".+1\"++Q\"$,!\"&+!\"(+A\"-+A\",,1\"4,1\"4,1\"4,1\"4,1\"4+Q\"/+Q\"/+!\")*Q\"&+!\"'+!\"(+!\"(+A\",+Q\".+Q\"0,!\"2+A\",+A\"-+1\"+*A\"$*A\"$*Q\"%*Q\"%*Q\"%+1\"*+A\",+A\",+A\"-+!\"'+!\"'*Q\"%+1\")*Q\"%*Q\"%*Q\"%+1\")*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*1\"!*A\"$*Q\"%*!!^+!\"'*1\"!*1!`*1!`+!\"'*A\"#*1\"!*1!`*Q\"$)Q!\\)Q!\\)Q!]*!!^*1!`*1\"!*1\"!*A\"$*1!`*A\"$*1\"!*A\"\"*!!`*A\"$*1!`*A\"$*Q\"%*A\"$*A\"$*A\"\"*A\"\"*Q\"'*A\"$*A\"$*A\"$*Q\"%*A\"$*Q\"%*Q\"%*A\"#*Q\"&*Q\"&+!\"(+1\"*+A\"-+!\"'*Q\"%*Q\"%*Q\"%*Q\"%+Q\"/+!\"(,1\"3+A\",,!\"2+A\"-+Q\".+1\"**Q\"&*Q\"&,!\"1,!\"2+Q\"/,A\"3-!\"5-A\"5-!\"4+A\"-+A\".+1\"*+A\",+A\",+Q\"/,!\"1-!\"1,1\"3.Q\"6.Q\"6.!\"6-!\"6,A\"5,1\"2+Q\"0+Q\"/,!\"1,!\"1,!\"2,1\"4,!\".-!\"4-A\"6-A\"8.Q\"8/1\"9-A\"8.Q\"7.Q\"7.A\"7.!\"7-1\"5.A\"6-1\"7-A\"8-Q\"6,A\"5-1\"5,Q\"5.!\"5-Q\"5,1\"4.1\"8-1\"5.Q\"6-Q\"9.Q\"6-1\"5/1\"8-A\"6.!\"6-A\"6.A\"7-Q\"7-1\"8.Q\"7/1\"9/A\"8-Q\"6-A\"6-!\"4-!\"4.!\"5-1\"6-!\"4,1\"4,1\"3,1\"4+Q\".,1\"4,1\"4,Q\"5,A\"4-A\"9-A\"8.1\"8-Q\"9-Q\"5.1\"7.Q\"8.A\"5,1\"3,A\"3+Q\".,1\"3,A\"&+1\"*-!\",,1\"3,1\"4.Q\"1/!\"8-1\"4-1\"5,1\"4,!\"0+Q\"/+!\"(+!\"(+A\",+1\")+A\"-+Q\".,1\"3+Q\"0,1\"3+1\"*+Q\"/+!\"(*Q\"%*Q\"&+!\"'+A\",+A\",+Q\"0+A\"++A\"-*Q\"%+!\"'*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"'+!\"'*Q\"%*Q\"%*Q\"%*Q\"%*A\"$*Q\"%*A\"$*Q\"%*Q\"%*1\"!*A\"#*A\"$*A\"#*!!`*A\"#*!!`*Q\"%*A\"$*1\"\"*Q\"%*!!`*A\"#*A\"#*1!`*A\"#*1\"!*A\"#*Q\"&*1\"!*A\"$*Q\"%*Q\"&*A\"$*Q\"%*Q\"%+!\"(*Q\"%*Q\"%*Q\"%*Q\"%*A\"$*Q\"%*Q\"%*Q\"%*Q\"%+Q\".+!\"'+Q\".+A\",+1\"++!\"'+!\"(+1\"++1\"*+Q\"/+Q\"/+Q\".,!\"1,A\"5,1\"3+A\",,1\"2+!\"(+1\"*+A\"-+Q\"-,1\"2,Q\"4/Q\"7-1\"5-1\"5,1\"4,1\"3+A\"-,!\"+,A\".+Q\"/,!\"0,A\"5.A\"6.A\":.!\"<.!\";.1\"8.Q\"7.!\"7,1\"4,!\"0,!\"0,!\"1,!\"1.A\"6.A\"/-1\"8.A\"<.Q\".!\";.Q\"?.Q\"?.Q\"?/!\"7/!\"7,Q\"6-A\"7.1\"9-Q\"5.!\"8-1\"8/A\":.Q\":-Q\"8/A\"8-1\"8.1\"8/1\"9.1\":.!\":.1\"9.A\":.Q\":.1\"8.A\"=.A\";.A\":/A\">.A\">-Q\":.Q\"?.1\"=.Q\"?/1\">/Q\"=/A\">.Q\"<.Q\"<0!\"=/1\">.1\"9.A\"6.A\"6-Q\"6/A\"6.!\"5-!\"5.A\"6-Q\"5-Q\"5.!\"5.A\"6.1\"8.A\"9/!\"=.Q\"?.!\"<.!\"<.A\"6.A\"6,A\"5,!\"1,!\"1+A\",+A\"-,1\"4-!\"7-!\"7.1\"8.A\"7.1\"6.A\"6,A\"5,1\"2+A\",+A\"-+A\",+!\"(,1\"4,Q\"5.1\"5,A\"5,!\"1,!\"1,!\"1+1\"*+A\",+!\"',A\"(,A\"(+Q\"/+Q\"/,1\"2+Q\"/+A\",+1\"**Q\"%*Q\"%+!\"(+!\"(+A\"-+A\",+!\")+A\"+*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"'*A\"#*Q\"'*1\"!*Q\"%*A\"$*Q\"%*Q\"%*A\"$*A\"#*1\"!*1\"!*A\"$*A\"$*A\"%*A\"$*A\"$*A\"$*Q\"&+1\")*A\"$+1\"**A\"$*Q\"%+!\"(*Q\"&+1\"++A\"-+!\"'+A\"-+A\"-+!\"'+Q\"/+1\"++A\"-+Q\"0+Q\"/,!\"1,!\"1+A\"-,!\"2+Q\".,1\".+Q\"*+Q\"0+A\"-,A\"5,A\"5.A\"6,A\"5+A\",,Q\"*+1\"*+Q\"/+Q\"0+Q\"/.A\"6.A\":.1\":.1\"8-Q\"6-A\"5,!\"2+A\",,!\"1,1\"4-Q\"5.!\"7.A\":/Q\"=.Q\"?.Q\"?.Q\";-Q\"7.!\"5,1\"4,1\"4,1\"4,Q\"5/1\"6.1\"9.A\":.Q\"?/A\"C.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.!\"9-1\"5.Q\"9.Q\":.!\"7.A\"=/A\":.1\"=/A\":/!\":.1\";.!\";.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/A\"C.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?-A\"9/A\":-A\"9-A\"9,Q\"6.!\"7,Q\"5,1\"4-1\"5-Q\"8.1\"8.Q\"?.Q\"?.Q\"?.Q\"?/Q\"=-A\"8-Q\"5,A\"5,1\"3+Q\"0,1\"4-Q\"5-A\"5.1\":.1\"=.A\":.A\":.1\"8-1\"5,1\"4+Q\"/-!\"0+A\",,1\"3.!\"5-A\"5-A\"5.A\"6-Q\"4+Q\"0+A\"-+Q\".,!\"0,!\"0+Q\"0,!\"1,!\"1-!\".,1\"3+A\"-+Q\"0+Q\"/+!\"'+Q\".+Q\"0+A\"-,!\"1,A\"(+A\",+1\")+Q\"/+!\")+!\"'+1\"*+!\"(*Q\"%+!\")+!\"(+!\"'*Q\"%*Q\"%*Q\"%*Q\"&+!\"(*Q\"%+!\"'+!\"(*A\"$*A\"$*A\"$*Q\"%*Q\"&+!\"'+1\"*+1\"++Q\".+1\"++Q\".+Q\".+A\"-,!\",,!\"(+Q\".+A\"-+A\"-+Q\".+A\",+A\",+1\")+Q\".,!\"2+Q\".,!\"1,!\"1+Q\".+A\"-+1\"),A\"3,!\"-,Q\"5-Q\"5.!\"6.Q\"6,A\"5,A\"5,!\"+,Q\"0,!\"1-!\"4.1\"6/Q\"9.1\"=.Q\"?/1\"9-Q\"8,A\"5,1\"4,1\"3,Q\"4.!\"5-A\"8/!\">.A\">.Q\"?.Q\"?.Q\"?/!\">,Q\"5,Q\"5.!\"5-Q\"6.!\"7.1\"=.A\"?/1\"@/A\"D/Q\"E0!\"G/1\"C/A\"D.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/!\"?.Q\"=/!\">/1\">/1\"@/!\"@/1\"B/1\"B/1\"C/Q\"F/A\"D/Q\"E/Q\"E/Q\"E01\"I01\"I0A\"K/Q\"F/1\"C/Q\"F/1\"B/1\"B/1\"B/Q\"F/1\"B/1\"A/!\"A/!\"@/1\"B/1\"B/!\"@.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/1\"B/Q\"E/1\"B/A\"D01\"I0A\"J01\"I/Q\"E/Q\"E/!\"A.Q\"@/1\"?/1\"8/!\"8-1\"7-A\"8.A\"9.1\"=.A\">.Q\"?.Q\"?/A\"D/1\"B/A\"@.1\"=/1\"9.1\"6-A\"5-!\"5,A\"4.Q\"7.!\":.Q\"?.Q\"?.Q\"?.A\"=.A\"7-!\"5,Q\"2,1\"3+A\"-,1\"4-1\"7/!\"8.Q\"<.1\"9.1\"6.A\"5,!\"1,!\"1,!\"1+1\"+,!\"2,A\"5,Q\"5,Q\"5,Q\"3+Q\"0,!\"1+!\")+A\"-+Q\"-,!\"0+Q\"/+A\",,!\"1+A\",+Q\".+!\"(,1\"+,1\".+!\")+A\",+1\")+A\",+!\"(+A\"*+A\",+!\"'+!\"(*Q\"%*Q\"%*Q\"%*Q\"%+1\"*+1\"++!\")+A\",+A\"-,Q\"++1\"++A\",,A\"(+A\"-+1\"*+1\"++A\"-+A\"-,!\"1+A\",+A\"-+A\"-+Q\"0+1\"*,!\"2,1\"3,A\"5,A\"5.1\"6,1\"5,1\"3,A\"+,!\".,!\"0,A\"5,Q\"5.1\"8.!\"6/!\"9-1\"5-!\"5,A\"5,A\"5,1\"4.1\"6/!\":.1\"=.Q\"?.Q\"?.1\"=-A\":.!\"5,Q\"5.1\"6-A\"5/Q\":.1\"=/Q\"F0!\"G/A\"D.Q\"?.Q\"?.1\"=.Q\"9/A\"6.1\"9-Q\";.!\".A\">.Q\"?.Q\"?/A\"D0!\"G0!\"G0A\"J1!\"N0Q\"M0Q\"M0Q\"M0Q\"M0Q\"M01\"I0Q\"M0Q\"M/Q\"F01\"I0Q\"M01\"J0Q\"M0Q\"M0Q\"M0Q\"M0Q\"M01\"J0Q\"M0Q\"L0A\"K01\"J0Q\"M0Q\"M0Q\"L0!\"G0!\"G0!\"G/A\"C/A\"D/A\"D/1\"B/1\"A/1\"C0!\"G/Q\"F0!\"G/Q\"F/Q\"F0Q\"M0Q\"M1!\"N0Q\"M0!\"G0!\"G/1\"B.Q\"?.1\"-Q\";-Q\":.Q\"?/!\"@/A\"C01\"J0A\"K0!\"G/Q\"F.1\"=/1\";-Q\";.Q\"8-!\"6.1\"8/Q\"<.Q\"?.Q\"?.Q\"?.Q\"?/A\"<-!\"7.1\"6,1\"4,1\"4.!\"5-1\"8.Q\"9/!\"@.1\"=-Q\";.Q\"8,!\"2,!\"2,!\"0,!\"0.1\"6-1\"5.1\"9/1\"6,Q\"5,A\"5-!\".+Q\"/,A\"-,!\".,!\"0,!\"2+A\"-,!\"0,!\"0+1\"+,!\"2+A\",+A\",+A\"-+A\",,!\"*+Q\"(+Q\"%,!\"+,A\"/+!\"'+A\",+!\")*Q\"&+1\"**Q\"'+A\",+A\",+A\",+A\",+A\"++A\"-+Q\"/+A\",+Q\".+A\",,1\"2,!\"1+Q\".,!\"1,!\"0,!\"1+A\"-+A\"-,1\"4,1\"/-1\"5/Q\"6-Q\"5,A\"5,A\"5,1\"4,A\"3,1\"4.A\"6.A\"9/1\">.Q\"?.A\">-Q\"9-Q\"5-1\"5-1\"5-Q\"6.A\"9/!\"?/!\"A/Q\"F.Q\"?.Q\"?.!\"7.!\"7.1\"8.Q\":.1\"/Q\"F0A\"K1!\"N0Q\"M0A\"K/1\"A.Q\"?.Q\"?.Q\"?/!\"@/Q\"F01\"J1!\"N2A\"X2!\"V1!\"O11\"P0!\"H01\"I0!\"G/1\"B/Q\"F01\"J0A\"L1!\"N1Q\"S2Q\"U3Q\"T2!\"V3A\"R31\"X2A\"T1Q\"T11\"P1!\"N0Q\"M0Q\"M0!\"H0Q\"L0Q\"L1!\"L1!\"K0A\"I/1\"8.1\"-/A\"811\">11\">11\"=11\">11\">11\">11\">11\">1A\"=1A\"A11\"A1A\"B0Q\"A0A\"E1A\"I1A\"P11\"P2!\"T2A\"Y3A\"U2A\"Z2Q\"Z3!\"U2Q\"Y2!\"V1A\"R0Q\"M0Q\"L0Q\"L01\"I0A\"J0Q\"L11\"Q1A\"R21\"W2Q\"U2A\"W1A\"R1!\"M0A\"J/Q\"F/!\"@/!\"@.Q\"?/1\"C0!\"G0Q\"M1A\"R1!\"O1!\"N01\"J/1\"C.A\">/!\">.Q\"<.Q\"?/!\"@0!\"H0A\"J0Q\"M01\"I/1\"C/1\">.!\":.Q\"6-A\"9-Q\":/!\"@/!\"@/!\"@.A\">/!\"?0!\":-Q\"6-Q\"5.Q\"7-Q\"6-!\"7.1\"=.Q\";.!\"<-!\"7,1\"2,A\"4,A\"5.Q\"6,Q\"5/!\"6-!\"5,A\"5,1\"3,1\"3,Q\"2,!\"1,!\"1,!\"1+A\"++Q\"0+Q\".,!\"1+A\",+A\"-+Q\"0+A\"%+A\"-+A\"-+Q\".,!\"1,!\"1,!\"1+Q\"/,1\"4-A\"5,Q\"5.!\"5,1\"4-Q\"0,A\"5.1\"/,A\"5.!\"5.1\"6-A\"5.1\"6-!\"8/1\";.Q\"=.A\"8.Q\"9,A\"5-A\"5.1\"9/Q\"=.A\">.1\"=/!\"@/!\"@/!\"@-!\"7.Q\"8/1\";.A\">/!\"@0!\"G0Q\"M01\"J01\"I/1\"C.Q\"?.Q\"?.Q\"?/!\"@/Q\"F1A\"R11\"P1Q\"T1!\"O0A\"J/1\"B/1\"B.Q\"?/!\"@/Q\"F1A\"R21\"P2A\"Z3A\"V3Q\"U1Q\"S0Q\"M01\"J01\"J0A\"J0!\"H0Q\"M2!\"Q2!\"R21\"W4!\"Z4!\"Z2Q\"Z2A\"Z2A\"Z2A\"Y1Q\"U1!\"N0Q\"M0Q\"M1!\"K0A\"F11\"D1!\"B/!\"4/!\"0/Q\"*/Q!`.1!^-1!X-A!Z/!\"!/Q\"+/A\",/1\")/A\"*/Q\"+/1\"*/1\"*01\"*0A\").Q\".1Q\")0Q\".1Q\"/1Q\"11Q\"11Q\"20Q\":1!\":1!\">11\"D11\"H2A\"O1Q\"U3A\"U3!\"Y2A\"Z2A\"Z2A\"Z2!\"S2!\"Q11\"Q1Q\"M01\"J1A\"R1A\"R2A\"U3Q\"U2A\"Z3!\"Y3!\"X1Q\"S1A\"S01\"J/Q\"F0!\"G/A\"C/Q\"F0Q\"M1Q\"T3!\"U2Q\"V2!\"R1!\"O/Q\"E.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F0A\"K0Q\"M0Q\"M/Q\"F/!\"@.Q\"?.Q\":/1\"8/!\"@/!\"@/A\"D0A\"K/1\"B/1\"C.A\">-A\"9.!\"5-A\"9/1\";/!\"@/!\"@/!\"@/!\"?.A\"8/!\"6-1\"5-A\"5-A\"5.1\"8/!\"60!\"9.!\"5.!\"5,A\"5,A\"5.!\"5,A\"5.1\"6,A\"5,1\"2,!\"1,!\"1,!\"1+A\"-,!\"2+A\",,1\"3,1\"3,1\"3,1\"4,1\"4-!\"3.A\"/-A\"5,Q\"5-1\"6-!\"5.!\"7-Q\"8-!\"7.!\"9-1\"6.!\"6.!\"9-1\"9-A\":/1\"?.Q\"?.1\":.!\"9/A\":/1\"/!\"A/A\"E/A\"D/Q\"E/!\"@/!\"@/Q\";.A\">/1\"@01\"I0A\"K0Q\"M0Q\"M01\"I/1\"C/!\"A.Q\"?/1\"A/Q\"F1!\"N2A\"W21\"S21\"W1!\"O0Q\"L/Q\"F/A\"C/1\"B0Q\"L11\"O2A\"W3Q\"W2Q\"Y2A\"Z3!\"Y2!\"S1A\"S0Q\"M0Q\"L0Q\"L1Q\"R2!\"R31\"X31\"\\41#!3Q\"`41#\"3A\"^3!\"Y3A\"V1Q\"T1!\"O1!\"K0Q\"J11\"G0A\"<0Q\"60A\"+.A\"\".!!^-1!\\-A!Z-1!X+Q!X-1!X-1!X-A!Z.A\"!.1!].Q!_.1!`.A!^.A!].Q\"!.Q\"!.Q\"!.Q\"!.Q\"\".Q\"\".A\"\"/!\"#/!\"$/!\"&1!\"&1!\"(11\"(1Q\".1Q\"01Q\"41A\"71Q\"91!\"B1A\"J3!\"P31\"S31\"[4!#!3A\"^3!\"\\2Q\"Y1Q\"T11\"P1!\"O1Q\"S2!\"V3Q\"\\4!\"^3A\"_4!#!4!\"X31\"V2!\"S0A\"K0!\"G01\"H0!\"H0Q\"M2!\"S3!\"Y3!\"Y3A\"V1Q\"S1!\"O/1\"B/1\"B/!\"A/Q\"F01\"I11\"Q1A\"R1Q\"R1!\"M/Q\"F/1\"A/1\"?/!\"@/!\"@/!\"@0A\"K0A\"J0!\"H/1\"B/!\"A/!\">/A\";.!\";.1\"=/!\"@/!\"@/!\"@.Q\"?.1\".A\">/!\"@/!\"@.Q\";.1\"<.!\";/!\"@/!\"A0!\"G0Q\"L01\"J.Q\"?/!\"@/!\"@/!\"@/!\"@01\"J1!\"N1A\"Q1!\"N01\"H/A\"E.Q\"?.Q\"?/1\"B0A\"K1Q\"N3A\"T3!\"X31\"W1A\"R0A\"J/Q\"F0A\"K0Q\"M1A\"R2Q\"U4!\"]4A\"_4A#$3!\"]3A\"V3!\"V0Q\"M0Q\"M0Q\"M2!\"U21\"V4A\"_41#(4Q#(4Q#*4Q#%3A\"_2Q\"[3A\"V2Q\"U1A\"R0Q\"M1!\"C1!\"=01\"5/Q\"*.A\"!-Q!\\-1!X-1!X-1!X-1!X-1!X-1!X-1!X-1!X-1!U-1!X-1!X-A![/A!\\0!\"\"1A\"'0Q\"'2Q\"+3!\"+3A\",3A\"-3A\"-21\".21\"-2A\"%0A\"$01\"$/A\"$/A\"$/!\"#/Q\"$/Q\"$0A\"$1A\"%1Q\")1Q\"-1Q\"-1A\"91A\"?21\"A21\"Q3!\"V4A\"[3Q\"`4!#!2Q\"[21\"W2A\"S2A\"T3A\"V31\"W3A\"_4Q#%4Q#%4A##4!#!4!\"Y2!\"U11\"Q0A\"K0Q\"M0Q\"M3!\"Y2Q\"Y3Q\"[3!\"[21\"W1A\"R0Q\"M0!\"G/!\"@/A\"C0Q\"M1A\"R2Q\"V2A\"Y11\"P0A\"K/1\"B/!\"@/!\"@/!\"@/A\"E01\"H1!\"N01\"J/Q\"E/!\"@/!\"@/!\"@-Q\";.1\"=/!\"@/!\"A/A\"D.1\"=.1\"=.Q\";-A\"7.Q\";/A\"9.!\";/Q\"=.!\"<-Q\";.1\"7,Q\"6.Q\"9.!\"6.Q\"9.A\"9-A\"5-A\"5-1\"5,A\"5,A\"5,A\"5-Q\"5-1\"5-A\"5.!\"8.Q\"6-Q\":/!\"8/1\";.1\":.1\"=.!\";.1\"<.!\"<.A\"=.1\"=/!\"?/!\"@/!\"@/!\"@.Q\"?/!\"@/!\"@.Q\"?.Q\"?.Q\"?0!\"H0Q\"M0Q\"M/Q\"F0!\"G.Q\"?/!\"@/1\"B0!\"G0Q\"M1Q\"Q2A\"V21\"R1A\"Q0A\"J0!\"H0!\"G0Q\"M1A\"S3A\"V3A\"^31\"]3!\"Y3A\"U11\"Q0A\"J0Q\"M11\"P3!\"W4!\"X4Q#%4Q#%4Q#%3Q\"`2Q\"[2Q\"U11\"Q2!\"V3!\"X41\"Z41#%5A#*5Q#06A#-6!#)4Q#&3A\"^3Q\"\\31\"U21\"Q1!\"K01\"?01\"4.!\"+.!!`-A!Y-A!Y-1!X-1!X-1!X-1!W,A!W-1!W-A!U/!!`11\"&2!\"+41\"17Q\"79Q\"?:1\"A;Q\"H;A\"B9A\">:A\"?:!\"781\";:A\"<:Q\"?:Q\"?;Q\"C0!\"<-Q\":/1\"9-!\"7-A\"7.1\":.A\"6.!\":01\"8.1\"8.1\"8.A\"9.A\":-1\"5-Q\"9.1\"9/!\"8.!\"<-Q\";.1\"=.Q\"?/A\">/!\"<.Q\"?.A\">.1\"=/!\"@/!\"A/A\"E/1\"A.Q\"?/!\"@/!\"@/!\"@/!\"A/Q\"F1!\"N1!\"N1!\"N0Q\"L0A\"K/!\"@/Q\"F0!\"G1!\"N2!\"S2Q\"Y3Q\"U2!\"R11\"P0A\"J0Q\"M0Q\"L21\"V3Q\"W3Q\"`4Q#%3A\"_3!\"X1A\"Q1!\"N11\"O2A\"V31\"W4Q##5!#+51#-51#'41#\"3!\"Z3A\"V31\"X3A\"T41\"\\5!#$5Q#-6!#061#06A#05!#)4Q#&4!\"Z4!\"T2!\"R1A\"F11\">.!\"7.1\"&-Q\"!-A![-1!X-1!X-1!X-1!X,A!V*Q!W.1!V.Q\"!3A\"+7A\";:1\"A=1\"?:Q\";9!\"68Q\"67Q\"-5A\")5A\"%4Q\")51\"&51\"(5Q\"(51\"+5Q\"25A\"16!\"*5!\"+4Q\"*4!\"(51\"+5A\".81\"08Q\"6;Q\"A>1\"F>1\"O;A\"L9Q\"E61\";2A\",0Q\")1!\"&0!\"'.Q\")01\"*0A\".1A\"70Q\":11\"@2!\"L31\"X3Q\"_4A##4A#!41\"^2Q\"[3A\"V4Q\"`4Q#%5Q#*6A#.61#-5Q#*4Q#\"3!\"Y3!\"V1A\"Q3!\"V31\"W4A#\"4Q#%4Q#%4A##41\"\\21\"U1!\"O1!\"N0!\"G0Q\"M3A\"U2Q\"Z3Q\"`3!\"X1Q\"R0Q\"L0!\"G01\"I0A\"K1!\"N11\"Q2Q\"Q1Q\"T0Q\"M/Q\"E/!\"A/!\"@/!\"A01\"I0A\"L01\"I0!\"H/Q\"F.Q\"?.A\">/!\"@/!\"@/!\"@.A\">/!\"@/!\"@/!\"@.A\">-Q\";/A\".A\">.Q\"?.Q\"?.Q\"?.Q\"?/!\"@.1\"=.Q\"?/!\"@/1\"B0!\"G01\"J0A\"K/1\"B/!\"@/!\"@/1\"C0Q\"L1A\"Q0Q\"M1A\"R1!\"N0!\"G0A\"K01\"I1!\"N1Q\"T3A\"U3Q\"U2A\"[31\"W1Q\"T1!\"N01\"I11\"P31\"V41\"]4Q#&4Q#'41#\"3A\"\\3Q\"U1A\"R2!\"V41\"W41\"`51#.6A#06Q#)5A#,4Q#$4Q\"[3Q\"W2A\"Z4A\"\\4Q#(51#+5A#+4Q#+5Q#05Q#04Q#+41##4!\"[2Q\"R01\"G01\"<.A\"5.1\")-Q!\\-1!X-1!X-1!X-1!X-1!W,!!U,1!R/A!V3Q\"/:!\"7.A\">-A\":.1\"=.A\"=.Q\"?.Q\"?.Q\"?.A\">.A\">.Q\"?.Q\"?.Q\"?.Q\"?/Q\"E.Q\"?/!\"@/!\"@/A\"D0A\"J0Q\"L0Q\"L1!\"N0!\"G0A\"K/1\"B01\"I0Q\"M11\"P1A\"R1Q\"U1A\"S1!\"N0A\"K0A\"J1!\"O1Q\"Q31\"W4!\"`3A\"_2Q\"Z2A\"V1!\"N1!\"N2!\"V3A\"U4A#!5!#(5!#(4Q#&41\"^3A\"W3A\"V31\"W3Q\"[5!#)61#/6A#06Q#061#/5!#&3Q\"`3A\"\\3A\"_4A#'5Q#.51#-5!#&4Q#&51#,6!#05!#)41\"`3A\"U11\"N1!\"C/Q\"7/1\"%-Q!`-Q![-A![-A![-Q!\\,Q!X+Q!U,A!W0!!`8!\"71!\"K21\"W4!\"]4Q#&4Q#)4Q#%4Q#&4Q#'6!#/5Q#05!#.5A#*6!#/51#+3A\"_3!\"Z2Q\"Z4!\"^4Q#&5A#*6A#061#/5A#&3A\"[2Q\"W1A\"O21\"S3A\"V41##5!#&4Q#%4Q\"`31\"X1A\"N1!\"N1!\"N11\"P3!\"R3!\"Y2Q\"Z1Q\"U1Q\"T01\"I01\"I01\"I0Q\"M1!\"N1!\"N1!\"O01\"I0A\"L/A\"C/!\"@/Q\"E/1\"B/Q\"E01\"I/1\"C/!\"@/!\"@/!\"@/!\"@.Q\"?.Q\"?-Q\";.Q\"?-Q\";.!\";.1\"=.1\"=.!\"<.1\"=.1\"=.Q\"?.Q\"?.Q\"?/1\"B/1\"C.Q\"?/Q\"F0!\"H0A\"L0A\"L1!\"N1!\"N01\"I0A\"K0A\"L0A\"L0Q\"L1A\"R21\"S4!\"T2A\"Y11\"P1!\"N1!\"N1!\"N2Q\"U31\"Z4!#!4!#!3Q\"`3!\"Y21\"U1A\"R31\"Q4!\"\\41##4Q#$51#&5!#)4Q#%2A\"Z31\"W31\"W4!#\"5Q#*6!#.5A#*5Q#-6A#/51#'41##4A#$4Q#%6!#-51#,51#(4Q#%4Q#%4Q#-6!#051#.4!#!3Q\"S1A\"L0Q\";.1\"1.Q\"$,Q![-1!X-A![-1!Y-!!R+!!H,1!R1A\"#7A\"99Q\"8:!\"+7Q\"+3Q\"%51\"-51\"22Q\"0/Q\"#-Q!X+!!U-Q![2!\"%7A\"8BQ\"7CQ\"2AA\"1BQ\"1B1\"2B1\"2D!\"6BQ\"9B!\";A1\"A@Q\"H;A\"C6A\"92!\"'.!!Z-1!V-A!T/A!^1Q\"$3A\"&1!\"%11\"%41\"/;Q\"DBQ\"]C1#!=!\"S41\"811\"(.1\"\".1\"$0!\"'/Q\"21!\"70A\";1!\"C1Q\"N2Q\"Z4A#$4Q#%4Q#%4Q#%51#*6!#05A#)4Q#%4!#$5!#(6!#-4A##4!#!3Q\"Z4!#!5A#)6Q#05Q#061#+51#+4!\"`3Q\"U2Q\"Z4!\"T3A\"_5!#&5!#&5!#*41##3A\"S21\"S1!\"N1A\"S31\"T2Q\"Z3A\"_2Q\"[21\"W1A\"R1!\"N0A\"J1!\"N11\"P11\"Q1Q\"T1Q\"T1!\"N0Q\"L0!\"H/Q\"E01\"I0!\"H0!\"G0!\"H/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@.Q\"?.Q\"?/1\"B/1\"A/1\"A/A\"E0!\"G0!\"H0A\"K/Q\"E0A\"J/Q\"F01\"I1!\"N1!\"O11\"Q1!\"N1!\"N0A\"K0A\"J1!\"O1Q\"S3Q\"U2Q\"Z2Q\"[31\"T1A\"S11\"P11\"P2A\"Y4A\"[4A#$3!\"[41#\"31\"]4!\"T2A\"R3!\"X3Q#!4!#!,AR6)QB!3Q\"_4Q#%3Q\"`3A\"_3Q\"`4Q#(5!#+1Q\"P1!\"O4A#$61#05A#.4Q#%4Q#%51#)5A#.5!#+4Q#,5A#)51#)4Q#(5Q#051#.4Q\"]3A\"Q11\"E/1\"6.!\"'.1\"\".!!_.1\"\"/1\"#-Q!\\+!!Q+!!O0Q\"(71\"5;1\"2:Q\".6A\"*61\"-6Q\"55!\"31Q\"(-Q!W.1!X2Q\"'7Q\"0?Q\"FC1\"@B1\"*@!!W<1!L6Q!?4Q!;21!91!!;/Q!5.Q!:-1!7.Q!8.Q!:.Q!:1!!>4!!<61!>81!D=A!M@1!VCQ\"-BA\"7?!\"?9A\":2Q\"*-A!^+1!W.Q!\\2Q\"$21\"'11!_2A\"'9Q\"?C1\"[DQ#&Q\">B!\"7?Q\"!;A!I5!!?0A!7.!!6*Q!7*1!6(1!8)1!9'!!6&A!8'1!5&Q!6&Q!;(1!9(1!=)!!=(!!<*!!:*1!9,!!=/1!<2Q!;6Q!<&A!='A!9'A!9'Q!=+A!<,1!90!!<5!!;01\"H1Q\"T41#$5A#/5Q#05Q#04Q#-3Q#-/1#3.1#3/1#241#,6!#/51#(6!#&61#.5Q#-.Q#+.A#*/1#\"3Q#.51#(41#\"3A\"_5!#&61#'5A#/6Q#16!#,41##3Q\"]3!\"Y3!\"]4A\"]41##4A#$4A#$31\"^3A\"V2Q\"U1Q\"T1Q\"T31\"W31\"W31\"X3!\"Y2A\"U1!\"N1!\"N11\"Q11\"P11\"P1!\"N1!\"N1!\"N01\"I01\"I0A\"K0A\"K0!\"G01\"I01\"H01\"I/Q\"F1!\"N0Q\"M1!\"N1!\"N1!\"N1!\"N1!\"N1!\"N11\"P1Q\"T2A\"V3Q\"U3!\"X21\"X1Q\"S1Q\"T2Q\"W3!\"W3A\"]4Q#$3Q\"`3Q\"^3A\"_3A\"V2Q\"Z4!\"`4A##.A\"?$2!;#A!=/!\"=4Q#$3Q\"`5!#$0!2J$!!;!!Q)!!Q'#A!821\"U61#(5!#)61#--QR:#R!6#\"!<(A\"\"1Q\"X4Q#'5Q#061#05Q#,4Q#)5A#,5Q#061#061#04Q#*4Q#'5!#.61#-4Q\"\\21\"H0A\"2.A\"&/Q\"%/A\"$0Q\"%0A\"#,!!S*Q!L2!\"(61\")81\"&7!\".6A\"+8A\"?3A\"-,1!Q0!!]:1\";CQ\"AC!\"!81!G/1!:*1!3(Q!3&Q!8&!!2&A!:)1!E/A!Y4A\"+;Q\"6@1\"9F1B6HA21J1R)KQR%L1\"%M!B%MA2%LQB%JQB3F!29AQ\";>!\"87!\"50A\"#+!!M'Q!C'1!>(Q!;)Q!?,Q!=2!!;91!=A1!SF!\"C/1\"\"+Q!Y1!\"%5A\"011\"'0A!`:Q\"=G1#!?A\"Y41\"0.Q\"\".A\"!0!\"%01\"2.Q\"50!\":/Q\">/Q\"D1A\"R4!#!5A#*5A#051#/4Q#*2A#1/A#3/A#3/1#22Q#26A#,5Q#/5Q#06!#00!#&.A#-.Q#%.A##2Q#)5!#'4Q#%5!#&5A#+51#+5A#/6Q#06!#,5!#&3Q\"`3A\"W3Q\"_41#\"5!#&5!#'4Q#%3Q\"^2Q\"Z2A\"S2Q\"R3A\"V3!\"Y31\"[3!\"X3A\"V2!\"V11\"Q11\"P1!\"N1A\"S11\"Q1A\"R1!\"N1!\"N1!\"N0A\"J0A\"K0A\"K0Q\"L0!\"H1!\"N0!\"H1!\"N1!\"N1!\"N1!\"N1!\"O1A\"R1!\"N1!\"N21\"Q2A\"S3A\"S3!\"Y3Q\"U2Q\"P2!\"R3!\"U3A\"V3A\"_4A##5!#&4A#$3Q\"`2Q\"[31\"]31\"^4Q#%0!\"H%!QA!!!(\"2A-/1\"D4A#$4A#$0!\"L#1!@!\"A&!\"1'!!!(&AQK4Q#%5A#+6!#/-QR4!2!*%1Q?'1!Z-!\"64A#$5A#,61#05A#-5!#,5Q#/6!#05!#,5A#05A#/4Q#'4Q#'5Q#-4Q\"^2!\"J1!\"9.Q\"+01\"$0!\"$1A\"&1Q\",-1!T+Q!P4A\"08Q\",91\"$4A\"&4Q\"*8!\"801\"#,Q!T4A\"0B1\"LFQ\"0<1!L0Q!9*A!6'Q!3&1!3%Q!2&A!=.!!U81\":B!\"@HA23J1ARMQA?M\"A/HRQ&HC1!G#!!E31!ESA!G31!H#A!I3Q!J3Q!K3!)O3!4Q\"!CO!AOL12,DQ\"C;A\"@11\"\"(1!I)1!='A!>)Q!D-Q!?11!6=!!4Q\"0I1\"FNA!PG\"Q$BSA!A#A!:B!#1!!4.Q!E-1!M.1!I0!!@4115;\"!-?R!,BSA.E#A.D3A2BS!1B\"A6.!#.01#021#+/!#).A#\",!\"5,1\"4-!\"7.!\"L.!#\"0Q#\"/1#&.1#\"-Q\"C(1!S)1!Z/!\"<5Q#*5Q#+5!#)5!#)51#*+Q\"/+A\",/A\"E4A##4!#\"4A\"]3!\"]41#\"3A\"V1Q\"S1Q\"O3!\"Z31\"^31\"W2Q\"[2Q\"[2Q\"[31\"X3Q\"U3!\"Y21\"R2!\"R1Q\"T11\"Q11\"P1A\"R2!\"T21\"T21\"R31\"T1Q\"S1A\"R21\"X21\"V1A\"Q0!\"G01\"J0Q\"K2Q\"V31\"]3A\"^3Q\"`0A\"I+!\"(*Q\"%*Q\"%0!\"G5!#&5!#&5!#&11\"O'!!O$A!K&Q!P(Q!W!\"A&!!!(!!!)!B1)%AQD'1!P&Q!N'Q!Q\"\"1+!!A'!2Q(!1A*$1Q@&A!L'A!Q'1!](1\"&21\"Z5!#'6!#-6!#06!#/2A\"W.A\"<.1\":/Q\"G3A\"^41\"_3Q\"S3Q\"Z5!\"Y21\"F1Q\"/2A\",3!\")1A\"%5A\"8-!!U'Q!A01!`7Q\"&61\"%2A\"#8A\">4!\".(Q!G41\",I1\"WCA!Y2Q!9)Q!1&A!0%A!0(1!H9!\"5PQ\"8L!Q4E3A\"E#Q!?C!%2Q!5.A!G.!!J1A!>8BQ*E#1%ME1\"Q6A!P6Q!M6!!MF!!N&1!PF1!R'1!SW1!VW1!TFA\"R51$HSA'>RA>4!!Q0!!T+!!E)1!>*QA/5R!$D#Q!T$1$TAQWG1\"O/A!]'Q!<)1!E+A!L.!!A91!EGQ\"*BA\"P/1!_+1!P41\"411\"\"/1!Z?A\"OM1#961\"=,!!V-A!W.A\"$1!\"3.1\"=-Q\";.A\"=-A\"9/1\"80A\"N5A#.51#03Q#1/1#3.1\">+!\")+Q\"/,Q\"B.1#,.A#1.A#1.Q#*,A\":,1\"4*Q\"%,1\"1-Q\"Q-!#!-!#!-Q#!.A\"I'!AI$A1;(1!T1!\"M5Q#,61#)6Q#'41#%,A\"(+1\"*+1\"+0A\"J4Q#\"41##4A##4A##21\"U1!\"N1!\"M11\"P3!\"]3!\"Z3Q\"]3Q\"U3Q\"]31\"W3!\"X31\"X2Q\"X2Q\"Y2!\"R2!\"U2!\"U2A\"S2Q\"U2A\"T21\"S01\"J0Q\"M1!\"O1!\"O0A\"K/Q\"E0A\"L0!\"H/Q\"F2Q\"U3!\"\\4!#!0!\"H+1\")*Q\"%+1\"+*Q\"%.Q\"@5!#&5A#$5A#!(!QY\"Q!4#!1@'A!S'A!S!!A'!!A)!\"A'%!!B'1!O%!!J&1!M'A!Q\"\"Q*!\"A&!!!(!RA+'!!P'A!S'A!S&!!`)!\"#51#+51#.6!#061#031#!/Q\"@-Q\"8.Q\"\"Q&1QQ8-A!M.A1@6RQ,FTQ\"R'!!OV1!H%1!>T!!8C1!2\"A$/!1%/11%0B1&32A#8B1\">TA!I5Q!R'Q!W81!WG1!LD1(>QA<51!U,A!P*!!?*1!5/1!&A4!!T4Q%WRQSE1\"W/A!]&1!8)A!I-1!N/Q!;=1!LJQ\"@:Q\"D+A!T11\"#6A\":.!!W41\"/HQ\"]C1#(/Q\"#+Q!R-A!]0!\"1/Q\":-Q\";/1\";.Q\"+A!8+Q!4-QQ)21Q(?$1\"MF!!YHA!ZG!!L3!,:QQS0!![*!!D)1!9-!Q*@3!!U$Q!XQ!]EA\"R,!!N'Q!>+A!N-A!J1!!BE1!VGA\"P31\")*!!M5A\"721\"+.A!W.A\"8.A\"9.!\"9.Q\"8.1\"7/1\";/1\"C31\"O21\"F21\"761\"96!\"5/1\"#9!\"B+A!S)!!B6A\"0:1!^3Q!`51\"':Q\"I,Q!S+1!OBQ\"OJQ\"34Q!D*Q!1'1!0$Q!0(1!AAA\"GUA!`E!Q$DTA!F$!!1Q!7*Q!B-A!BC$1\"VWA!Q'!!:C1!.1A#*!!0*1!2-1!>-Q!81A!421A14AQ*52A'42!+2!14/!Q:-!!A*Q!=,1A23\"1(F5Q!UGQ![(A!OD1)>!!I01![*1!B)Q!60QA&ED!!Z31%TQR191\"A)!!>(A!<-1!R.1!C9A!JJ1\"6>!\"J)1!O.A!`5Q\"4.1!T41\"+L!#'C!#!,1!R*A!Q-A!]1A\"6/1\">/!\">.!\":.1\"9/!\"7.1\";/!\"D31#+1!#2.1#++A\"60A\"O3!\"_+Q\"+,1\"1.1\"U.A#,-Q\"@,!\"2)!!X01\"K*!!_+A\",-A\">-1\"_.Q\"I'1!U%11<+Q\"*(!!O(Q!T-Q\"32Q\"Q/Q\"H+!\"(-!\",-1\"6,1\"1+A\",/Q\"F2A\"V31\"V11\"P1!\"O1Q\"T1Q\"T0A\"K0A\"K3!\"R31\"Z4!\"W3!\"Z31\"]31\"\\3!\"[3Q\"]31\"W3A\"V3A\"V/Q\"E/1\"B0!\"G/Q\"F/1\"C/Q\"E0A\"K0!\"G0!\"I-!\"5,1\"-+!\"#+!\"!,1\"&+Q\"&+!\"'+!\"'-1\"90Q\"E+!\"$*!!^+!\"&+Q\"#&A!K#114*12$3!\"`,A\"1&Q!P'A!T%1A>&QAK%!!K+!\"&4!#$1Q\"S'Q!V'Q!Q\"Q1<$1!F'Q!Q,Q\"64Q#.6!#01!\"O,!\"20!\"L5Q#06Q#061#02Q\"V/Q\"B-!\"7/!\";.1\"7-A\":/A\";.Q\"9.A\">31\"O21\"F3Q\"78Q\"B4A\"3.1!`6A\"=)Q!G+Q!O7!\"/8!!\\1!!Y7!\"07Q\"?)1!G.Q!XI1\"RE1!_/Q!9)A!1&1!0\"QA-.!!SNQ\"MOAQ7B2Q!J51!=R1%,A!C,1!D7B1,UH1!WXA!=$1!-!Q$+!!)*A!9,1!>1!10821&BT1!LVQ!PWA!Q7A!PG1!L6A!C$!!82!&0!!4-!!B+Q!90AQ'ETA!Y8A!ZX1!P$!);!\"$-Q!U(A!B*Q1052Q$Q51![\"A?K1\"W,Q!W&A!7+Q!S-A!H2A!AFQ\"$FQ\"Q-A!Y-A!V6Q\"@.1\"!/!!_F!\"\\IA#/11\"))Q!C,!!R11\"40!\"C/A\">-A\"6-1\"5-1\"5/!\"6-!\"7.Q\"T0!#3/Q#0-Q\"G1A\"R6!#02Q\"]*!!\\-1\"9.1\"[,1\"9,!\"2+1\".4Q#.2A\"X)!!X,!\"1-Q\"F-Q\";(Q!Z%AAF3!\"U0Q\"L(!!S+!\"'-1\"7-A\"0,!\"*,A\",2A\"S3!\"U-!\".-A\";0Q\"L11\"P1A\"S11\"P2Q\"U21\"U1Q\"T11\"P11\"Q2Q\"U21\"Y2A\"T3!\"W3!\"X3A\"\\3!\"Z31\"^2Q\"[2Q\"[/1\"C0!\"H01\"I0!\"G0!\"H01\"J0!\"H0A\"K.Q\"@/Q\"A0A\"F,1\"1*A\"$*Q\"$*Q\"%*Q\"%-!\"33Q#\"5A#..A\"<(1!Q*A!]'A!O\"115%11J5Q#*6!#/0A\"I&Q!R'1!P'Q!Q&A!L'Q!R2A\"X5!#&3A\"^(A!W'!!O'1!P&A!M*1\"!31#\"51#051#02!\"X-Q\";1A\"U5Q#06Q#05A#04!##/!\"A/!\"6.1\"<0!\"<.A\"9-Q\":.1\"9.!\":3A\"L1Q\"84Q\"9:A\"M4!\".0Q\"!41\"7'Q!?*Q!P5!\"#6!\"!0!![:1\"85Q\"9)1!B2A\",KQ\"MAA!O,A!5(Q!1$Q!/&1!851\".U1\";IAA*A#1!K5Q!4Q1/+A!@/A1=F$!![91!N'A!2\"Q#+1!&*Q!0,A!@1AQ1;#!!L7!!W(!!O71!GV!!F%A!N'Q!VYA!XYQ!QG1!ADA!2!Q0+1!?)Q!:3!A)M&!![)Q!Z'Q!G!A<6!\"')Q!G)A!:+Q!)H51!\\$A)UQ\"D7A\"6&Q!;+1!J/1!P-Q!D>Q!ZJQ\"H3!\"*)1!K5Q\"84A\")-1!P@!\"FLQ#/5A\"7(Q!G+Q!T/Q\"+1!\"B.Q\"?/Q\"9-Q\"7.A\"6,Q\"5.Q\"<-Q\"@.1#$.A#3.A\"L2!\"T6!#06!#00!\"F+Q\"/,A\"5,!\"1,!\"1-A\"86Q#(5A#-.Q\"A)!!\\+1\"+,A\"5)1!`)!!Z3Q\"`4Q#%/1\"E(A!X,A\"(,1\"*+A\",,Q\"36!#,5Q#02A\"[+A\",/1\"C1A\"R1A\"Q1!\"N4!#\"4Q#%2Q\"V1!\"N0!\"H1!\"N01\"H01\"I11\"P31\"X3A\"\\3Q\"]31\"W3Q\"]31\"X0A\"K0Q\"K2A\"O1Q\"P0Q\"M0!\"H0Q\"L0Q\"M2Q\"P4!\"]4!\"^1Q\"L+A\"+*Q\"%*Q\"%,1\"22A\"W6!#.6Q#12A\"Y&!!F&Q!N%Q!?#Q!;01\"E7!#15A#/2Q\"Y$QAP'Q!Q&Q!M&A!K-A\"64Q#%5!#&4Q#$*!\"\"'1!O'!!O'Q!Q.1\"@51#/6!#/5A#03A##1A\"S3Q\"_6A#06Q#06A#05A#+/1\"B.!\"8/1\"8.A\"=-Q\"7/1\"9-A\"5.Q\"=3A\"L2!\"961\"<+1!O8!\"*8Q!_0A!\\;!\"@5Q\"9'A!B3Q\"-MA\"M?Q!R,1!5(Q!0$Q!0$A177!\"2VQ\"3I11%A31!KE!!3AA4*A!A01A=KEQ!ZYQ!IV1!1AA\"-!!'*A!3,A!?1A1'?$!!RXQ!OW1!6\"A\"-Q!%,A1,1\"A%@$!!W)A!Z)!!Q'!!?#!\"/1!2)Q!=,1A2@TA!Y81![I!!Q#!/;A\")+!!N)!!<*!!/ACA!Z%!#ZQR&>A\"H(1!C*1!J0A!Z-A!?;!!VJA\"<5A\"6)!!E31\"35A\"9-1!S=A\";MA#)8A\"E(Q!F*!!M/Q\"*2Q\"C.Q\"A.!\":-!\"5,1\"4,1\"4-1\"5-1\"7.!\"B.A#+.Q\"L3!\"Y61#05Q#041#)+1\"-,A\"5+A\",+1\"*/A\"F5A#+5A#)4Q##)A\"#,A\"0+1\"*(1!T+1\"'4A#$4Q#%3Q\"_*A\"$,1\"'+Q\"),Q\"*/!\"@61#16!#16A#101\"B,1\"00!\"G01\"I2A\"O5!#*51#-5!#&2Q\"Y11\"Q1!\"N0!\"H1Q\"R31\"T31\"Z41#!3Q\"^31\"^31\"]31\"]3Q\"U31\"Y3Q\"Z4!\"Z2Q\"[21\"R2Q\"W3Q\"[4Q#%5!#&5!#'41#$.!\"<+Q\"%+1\")1!\"N5Q#,6A#+6Q#161#1'Q!P%11;!!A1*Q\"%6!#,7!#16Q#/5!#&(1![&Q!N&A!O'Q!T3Q\"`5!#&5!#&5!#'+!\"''Q!Q&Q!N(A!Z5!#15Q#/6!#+5Q#04A#)41#'5Q#/6Q#06A#06!#05A#,11\"E-Q\"5.Q\"<.1\"9/1\";,Q\"6-Q\"5.!\"84A\"I2Q\">8!\"B?Q\"Y4Q\".2!\"+6!\":'Q!<)A!G5A\"!91!^41\"&81\"75!\"6(Q!A1!\"(L!\"MAQ!P,Q!2(Q!0$11/&1!55!\")V1\"8K1!'B#1!LEA!6!1.,A!J0!1;GU!![:!!MW!!3B1!,A1&*A!2-A!:/A1,6B1!B4A!BEQ!4B!!+AA&)Q!0)1!0+Q1(HFQ!Z)!!WYQ!J&!!4!Q**Q!B,115/1\"_-A\"A4Q#(6A#051#06!#00A\"O+A\"-,1\"4*1\"\"1A\"V5Q#-6A#&5Q#,01\"E(A!T+Q\".&AQK.Q\"A41#\"4A##4!#!0A\"H*A\"#+A\"-+A\",2Q\"U7!#17!#17!#15!#%-!\"6,A\"3.1\"=3!\"Z5A#.61#'5!#+4A#%31\"U1A\"Q1A\"S3Q\"Z5!#$5!#&41#\"4Q#%31\"]3A\"\\3!\"X31\"\\3!\"]31\"^4A#!4A#$3Q\"_3A\"]5!#$5!#&5!#&5!#'6A#$3!\"Z0!\"A11\"I5Q#+6Q#-6!#16A#17!#1-Q\"?#AA;%!AE31\"[7!#17!#16Q#/5!#$+A\"0&1!O%A!I.A\"=4Q#%5!#&5!#&5!#).1\"?'1!P'!!P.Q\"B6Q#+61#)4Q#.61#06!#05Q#06Q#06Q#06A#06!#05!#0/!\"E.1\"8.A\"<.A\"<.Q\"9,1\"4-!\"5-A\"731\"I2Q\";8!\"GAQ#&71\"81!\"&8Q\"H)1!H)!!E61\");A!]6Q\"-6!\",9!\"@(Q!J.Q!ZGA\"TCQ!V0A!7)1!0%!!/$Q!3/!!]OA\"GOAQ0BCA!K%A!;RQ$,A!?-A!C<31(WY1!VIA!>DQ!1AA\",!!*+1!7-1!;-111111&2B1$/1A&*A!.*1!3)Q!0-QA'J61!Z)!!XY1!M6A!4RA,+!!>,A11>#A!U8Q!XH!!P41*>!\"',1!U(A!=)A!4.!!S:A\"7LQ#&9Q\"G'A!E(A!M/1\"&2Q\"I/A\"D.!\"6-Q\"5,Q\"0,Q\"2,Q\"5-1\"5-Q\"6/!\"N+Q\"35Q#05A#051#06A#-4!#)+!\"&+!\"((A!W4!#.61#+51#(5!#,5!#+)!!X(!!S&Q1E1Q\"R4Q#%3Q\"`41#\"3Q\"_,A\"-,!\"--A\"251#$7!#17!#17!#16Q#02Q\"Z,A\"30Q\"B41#(7!#(51#*6!#*6A#%5!#&3!\"\\31\"^4Q#%5!#&5!#&4!#!3A\"^3Q\"`3A\"^2Q\"[31\"]31\"^41#\"41\"^3A\"_41##5!#&5!#&5!#&5!#&5!#'5!#)5!#&3Q\"_4A#(5Q#.6!#+6!#-61#07!#141\"`,!\"./!\"E61#.7!#17!#16Q#141##01\"I&!!H(1!\\31\"Z41#\"3Q\"`5!#&51#(1Q\"S&!!N)A!^3!#!4Q#06!#*5A#)51#06A#06Q#06Q#06Q#05Q#06!#051#0/Q\"H-A\"5.A\";.Q\"<-Q\"5,1\"4-A\"5-1\"511\"<3!\"=7A\"AAA##:1\"@0Q!]8A\"G+!!R'A!<3A\"!91![71\"!4A\"(9A\"D*A!P+!!NA1\"SHA\"-61!>*Q!1&1!/$A!/)A!FDA\"JTAQKEBQ!I%Q!DD!\"0Q16,!!A01Q8JF!!YIQ!T8Q!>4!!1!!\".QA$,!!1+1!8,!!7,1!7+1!3+!!3*A!5+Q!)9CA!TH!![*!!V81!F5A!01!1)Q!=.!12A3A!UX1!Z8Q!O#Q:5Q\"7+Q!U>!\"ELQ#,6A\"<(Q!E*1!K/Q\"*2Q\"I/A\"D-A\"6-Q\"5,Q\"*.1\">-Q\"<-1\"5.Q\"9,!\"1,A\"25Q#051#051#06A#+6!#0/A\"F)1!X*A\"\"51#/6!#)5!#&5!#&5!#*/!\">$A1='A!Q31\"\\41##3!\"\\3!\"\\3A\"_1Q\"Q-!\"301\"L61#.7!#16!#17!#17!#16!#+3!\"S4!\"^6!#/5Q#15A#-5Q#)5!#*5!#(5!#&5!#&5!#&5!#&5!#&3Q\"`4A##3Q\"`4A#$31\"]3Q\"`3!\"]3A\"_4A#$4A#$5!#&5!#&5!#&5!#&5!#&6!#)6!#+61#(6!#&6A#(6A#+6A#061#-7!#17!#16A#141#'61#-7!#17!#17!#16Q#14A#(3!\"\\.!\":1!\"P5!#&5!#&4A#$41##5!#(5Q#+.1\":0A\"M4Q#06A#&4Q#'5Q#'5A#/6!#06Q#06Q#06A#05A#06Q#+4Q#021\"T-A\"5.!\"8-Q\"5-Q\"5,A\"3-!\"/-1\"50Q\"@4A\">5Q\"BAA#!?!\"R1!\"#6!\"411\"'&1!7.Q![8A\"$8!!^1A!W9Q\"C0A\"#'Q!B8Q\"7KQ\"I@Q!T-Q!5(1!0$A!/%A!31Q\"\"O!\"=PQQ5D3A!I%1!>#A%.!A>+Q!C11A4BDA#R81!U9!!I6A!;D1!6C!!0!Q$.1A*.!A*.!A*0!Q)7SQ!FF1!T(!![*!!WI!!FEQ!2Q!.*A!=+1!88B1%OF!!UXQ!UFA!DQ!T4A\"&(Q!C'Q!7+QQ(J$Q!\\31+U1\"U61\"7'1!<01!_41\"$.Q!G?1!`J1\"L/!\"\")A!I31\"311\"$,A!RB!\"KL1#/21\"/)A!A)Q!P0A\"01A\"H1!\"G,Q\"6,1\"4.1\"93Q\"U3!\"V-Q\":-Q\"5,!\"1/Q\"G6!#05Q#04Q#*51#.5!#05!#--!\"20A\"L61#-51#)5!#&5!#&5!#&4!#'-!\"2/A\"B4A#$4!#!5!#'5!#)4A##4!#!2Q\"Z6!#,7!#17!#16!#17!#17!#16Q#15Q#15A#16A#(51#.6A#&5!#+7!#%5A#)5!#*5!#&5!#&5!#&5!#&5!#&4A#$3Q\"`3!\"]3!\"\\3A\"_4!#!4!#!4A#$4Q#%4!#!5!#&5!#&5!#&5!#&5!#'51#)61#(5Q#+5!#/61#-5Q#,5A#,6Q#06Q#17!#16A#16Q#17!#17!#17!#17!#16!#,4A#%3A\"_4A#$4Q#$31\"^3A\"^31\"^5!#&5Q#(41#&4Q#*5!#-4Q#'4Q#%51#'51#+5A#06Q#06Q#05Q#051#05Q#,6A#'3Q#$-!\"5-1\"8-A\"7-1\"4,!\",-A\"),A\"3.Q\"93!\"A5A\"B>Q\"`CA#\"7Q\"62Q\"061\"?(!!B*!!N61\"$9!!\\5Q![6Q\",81\"B)1!L.A!XCA\"UJA\"061!G+A!1&!!0%A!1(1!<:Q\"8RA\"1JQA(F3A!IU!!.1A3821&NV1!U7!!S6A!JRA<@!\"4.!!Z'Q!9'Q!0/A1(F$!![C!/TQ2J7A\"=(1!9-Q!S6Q\".0!!K9!!XFA\"K71\":(A!G0A\"'31\"2-Q!S81\"=O1#911\"&1!\"\"EQ\"PI1#.1A\"&)1!C+Q!T-Q\"&1A\"D2!\"S/A\"E,A\"5-1\".3Q#\"4Q#'4Q#&4Q#(11\"J1A\"Q6!#-5!#-4Q#&4!#!4Q#%5!#,6!#06!#051#05A#+4A#$3Q\"`3!\"]4!#!4A#&4Q#&5!#&3Q#!5!#+6Q#17!#17!#15A#061#07!#16Q#15Q#16A#16!#17!#16Q#161#16!#-6A#+51#-51#)6!#)6Q#'6A#'5!#*5!#&5!#&5!#\"5!\"`5!#&4!#!4Q#%3A\"_4!#!31\"]3Q\"`4A##3Q\"`4!#\"4Q#%5!#&5!#&5!#&5!#&5!#&5Q#(5A#+51#'51#.61#,5A#*6!#+6!#-5A#.6Q#16Q#16A#16Q#17!#15Q#16Q#16Q#15!#*4A#$4!#\"4A##4Q#(6A#15A#.41##5!#&5Q#,5Q#.4Q#%41##3A\"^3A\"_4Q#'4Q#06!#06!#051#04Q#)4!#!4Q#%4Q#'21\"[,Q\"7,1\"4,1\"2/Q\"F4A\"`1!\"N-!\"8.1\"61!\"75!\"@#1&9\"A)1A1+.!14.119-A1:.11:.A15/!A/4!1);\"Q&@#Q$HU1!O&A!O%!!NU1\"I\"Q3C!\"!7A\".,A!L'Q!;'1!3-Q!)@3Q!TCA)WQB-FA\"Y.!![)!!D2Q\"%4A\"$1A!H=Q\"#EA\"I2A\"*(Q!G3A\".3Q\"3-A!X9Q\";N!#-<1\"M,!!W*Q!H,1!\\0!\"/11\"K2!\"T.!\"<,Q\"2/A\"@4Q#%4Q#%4Q#)5!#/4!\"Z4Q#&5Q#05A#-4A#$41##4!#!5!#&51#-51#05A#,51#(4!#!4A#'41#$41##4A#&4Q#&41#\"3Q#!5Q#.6Q#16Q#17!#17!#17!#17!#16Q#161#16!#16A#17!#16!#17!#161#06A#06Q#(5Q#+5Q#)5!#)5!#)5!#&5!#&5!#&5!#&5!#&4!#!4!#!41#\"3Q\"`3A\"^3A\"_41#\"3A\"_41#\"5!#&4!#!5!#&5!#&5!#&5!#&5!#&5Q#(5Q#&61#*6A#,51#(5Q#+61#'6Q#)6!#.61#16Q#15Q#161#17!#161#16!#16!#15Q#/3A\"`3A\"_3!\"\\6!#-7!#17!#14A#*4A#$5!#&5A#*4Q#%4A##3Q\"`4A#%4Q#%4Q#,51#05Q#04Q#04Q#'41##3Q\"`4Q#$41#%.Q\"?,Q\"2,Q\"11Q\"P4Q#%3A\"^0A\"J.1\"80!\"62Q\"77!\"G@1#$EQ#*?Q\"R4!\"*8!\"?/A\"%(1!<-Q!Z6!\"!8A\"!6!!^5Q\".7Q\">.A!T)Q!J5A\"2E1\"LEQ\"\"71!;,Q!-(1!0&Q!0%A!1'Q!@1Q\"\">A\"@FA\"+I!QII210J#!!KD!!I$!!GT1!G4A!E4A!E$1!ET!!GDQ!JUQ!L%A!M%!!L%Q!KD1!IC!/G2!D@!\"\"7!\".-Q!V(A!?'1!4)!!02B!&ECA!UC!3TQRKBA\"Y+Q!O)A!F21\")4!\"'/Q!M;!![E1\"A71\"6)A!I.Q!`6Q\"@-Q!\\1!\"!F1#\"F!#(0!\"!*A!L,1!V.1\")0!\"=4!\"T11\"M-!\"8,Q\"72A\"W4Q#%4!#!4Q#%5A#,4Q#,51#05Q#/4Q#)41##4!#!41#'5!#'6Q#*5Q#,5Q#)4A##4Q#%5Q#14A#'4!#!4A##4A#$5!#&51#(7!#15Q#15Q#17!#17!#17!#17!#16!#15A#16A#.5A#-6A#16A#16!#.6A#)5Q#.5!#,5Q#)5Q#)6A#(6A#&5!#*5!#&5!#&5!#&5!#&5!#&41#\"3Q\"`3Q\"`3!\"]3!\"\\31\"]4!#!4!#!41##4!#!5!#&5!#&4Q#$5!#&5!#&51#'51#*51#(7!#(5A#-6!#*61#)5Q#+5Q#,6Q#16Q#16Q#16!#15Q#16!#161#16Q#16A#14Q#)4A##3Q#!6A#16A#16A#15Q#-4Q#%5!#&5!#'4Q#%3Q#!4Q#,5!#.4!##4Q#&5Q#051#04Q#,4Q#%3A\"_41#\"41#\"4Q#'1Q\"S,Q\"3,A\"51A\"S4Q#%41#\"2A\"W/!\"@/A\"81A\"731\":9A\"QCA#*FA#)!!D2A!3+1!0'Q!0&1!0&Q!4(1!:.1!Q61\"(=1\"0BQR&D11ZDAADF!15HRA1HBA.GRQ.HC1.H3!.H3!.F\"A1C1!>BQAT?Q!]9!\"'2Q!`-!!N)!!>'!!8(Q10.11,9B!\"LCQ&QQALNA\"L;Q\"C,A!R*Q!M4!\"-51\"&0Q!R71!WB1\"98A\"8*A!K.A!W7A\"<0A\"!/1![@!\"JH!#%71\";,!!V,!!S-1!^0A\"22Q\"O3Q\"W0Q\"K-A\"0.Q\"A4A#$41##3Q\"`4Q#%51#-6!#051#05!#-4Q#%4A#%4!#\"4!#\"4A#%51#+51#-4Q#)3A\"_5!#+7!#15Q#-3Q\"`4A#$41##3A\"_5A#-7!#15Q#161#17!#17!#17!#16A#15A#15Q#15Q#.5A#-71#+61#-5Q#.5Q#+51#)6A#%51#)51#)5!#(5!#'5!#&5!#&5!#&5!##5!#&5!##3Q\"`4!#!3A\"_4!#!3A\"_5!\"^3Q\"`3Q\"`3Q\"_5!#&5!\"^5!#&41#\"5!#&5!#&5!#&5!#(61#(5!#.51#'5!#*5!#(7!#&5!#+6A#16Q#16A#161#17!#151#151#161#16Q#161#15!#&5!#'6A#17!#17!#16A#141#(3Q\"_4Q#(4Q#%4A#$5A#-6Q#05A#-4A#$51#*5Q#.4Q#(4A#(3Q\"`4Q#(41#$4Q#%4A#&0!\"G-Q\"<3!\"[4Q#%31\"]3Q\"`2!\"L.A\"=/1\"61A\"73Q\"==!\"WCA#)FQ#*:!\";41\"+61\"<+Q!T(1!A-Q!R4!!_51!Y51!Y6A\"&:A\">3A\"/*1!I+Q!P7A\"7CA\"=G!\"!<1!=3A!0.1!0(A!0&A!0%A!5'!!2(!!@+!!K/A!^4Q\"*6!\",8!\"151\"0+Q!M,!!T3Q\"50A\"&/!!X=1\"HHA#/:!\"F.Q![*Q!U-A!Y.!\"01Q\"E41\"Z3!\"[/A\"=-!\"82Q\"Y4!#\"4Q#%4!#\"4Q#%61#)5Q#,5Q#/5!#&41#\"51#,51#-4!#\"51#)6!#)61#'4Q#%4A#&6Q#17!#15Q#/4!#$3Q#!3Q\"`41#%6A#061#15Q#15A#17!#17!#17!#161#16!#16!#15A#.61#-61#17!#)6!#.5Q#+51#+51#+51#'5!#&5!#'5!#'5!#&5!#&5!#&5!\"_4!#\"4A\"]3Q\"`41#\"4A#$3!\"]3Q\"`31\"\\4!#\"4Q#%3A\"^5!#&4Q#$4A#$5!#&5!#&5!#&5!#&5!#'5A#(6!#)6A#'6A#'5A#+51#,5Q#*5A#/6!#061#161#161#16!#15!#16!#15Q#16Q#15Q#06A#07!#16Q#15Q#15Q#161#/4Q#&4Q#%4Q#%4Q#%61#.6Q#06A#041#'4A##5!#'5A#+4Q#&41##5A#05Q#/4A#%4Q#%3Q\"`1Q\"S4!##4Q#%41##4Q#%2Q\"Y01\"F01\"8/A\"51Q\"571\"F<1\"UC1#)EQ#'=1\"F5!\"06A\";.A!`(!!E)A!L2Q\"\"5!!\\51!X5Q!]7Q\"581\"71A\"%+Q!J.1![7!\"4C1\"AF1\"0AQ!O9Q!D3Q!7.!!6+!!3'A!2'!!1'!!2'A!5&A!4&1!6&A!;'1!<&A!<'1!;&1!6'1!6'!!7(!!4)Q!7,!!1.Q!,4A1&?\"!%H\"13N!ARKABBC!\"R3!\",+A!M,1!T21\",71\"231!X2Q!S;!\"&Q\"KH!#'<1\"H0A\"#-1!T-1!Z.A\".0Q\"C3A\"U41#\"11\"Q-A\"90A\"L4Q#$4Q#'51#-41##41#\"5!#.5!#/6Q#$4A#$5!#,6A#05Q#041#\"4A#$4Q#&4Q#%3Q#\"5Q#06Q#17!#16A#141#'4!#\"4A#$6!#06A#16!#15A#16A#161#17!#16A#16A#161#161#*6!#+5A#'61#/5Q#/6!#/6!#*61#+5!#&5!#&5!#'5!#&5!#&5!#&5!#&4A#$4!#!4Q#%3A\"_3Q\"`3A\"^4!#\"3!\"]3!\"\\3!\"\\4!\"[3Q\"_4A#\"41#\"41##4A#$5!#&5!#&5!#&5!#&5!#'5!#)5!#'5!#)6A#&5A#+51#*5A#(5Q#/61#061#16A#15Q#16!#16Q#(51#15Q#16Q#16Q#16Q#17!#16A#16!#16A#16A#15A#+3Q#!4!#!4!#!61#.6Q#06Q#06A#04A#$4Q#&4Q#+4Q#&41##5A#06Q#051#-4!#\"4Q#%4A#)4Q#+4Q#%41##5Q#*4Q#)2A\"X/1\"D.A\"70Q\"02A\"971\"FA\"CD1\"CCQ\")A!!T=!!E8Q!;4!!41Q!5-Q!4,Q!1+!!1+1!0*Q!/*!!0*Q!0+1!1-!1+2!A'41A,8QQ*@1A'E114K!!UJAR0FQ\"E=A\"B3!\"),A!N,A!T2!\"*61\"25!\"$1Q!X81!];Q\"-81\"7/A![+1!M2!\"+7!\"@0Q\"&0!\"!E!1EC!ADF11DGAQKGQ!SFQ\"$H!\"5E1\"C@!\"C8A\"9A\"K?A\"^C!#&DA\"\\=A\"I81\"97A\"=5!\"6,Q!X*A!C*A!L.A!X3!!Y4A!Z4!!W4A\"\"5Q\"$8!\"07Q\"93A\",01\"!.1!_-1!]/Q!Z1!!`1A\"%6A\"-8!\"49Q\"39A\"49A\"5<1\";:A\"::A\"9:!\";61\".2Q\"(0Q\"!-A!Z-!!V.A!\\01\"!41\"+7A\"75A\"&4A!]3Q!Y5Q!^8A\".9!\"821\"(-Q!S-1!U01\"%21\",01\"!/Q!_8!\"8BA\"V?!\"R7!\"7.Q!`-A!Y,Q!]-1\"-.Q\":21\"P4A#\"4Q#.4Q#'3Q\"`4!#\"4A#%5Q#/6Q#06Q#061#/4!##4Q#%4Q#&3Q\"`5Q#/6Q#06!#06A#05Q#04A##3Q#!4A#%6!#.5Q#06A#06!#16A#16Q#16A#16Q#/6A#15Q#15A#.6!#-5A#15Q#16Q#15A#15Q#16!#15A#)61#)6A#$5Q#&51#,5A#*61#&51#)5!#&41#$4A#$4Q#$4A#$5!#&5!#&4Q#\"3Q\"`4Q#$3Q\"^3Q#!3A\"_31\"^3A\"_2Q\"[3!\"Y3!\"Z4!\"[31\"]3A\"_3!\"]3Q\"`3Q\"`41#\"2Q\"[4A#$3Q\"`5!#&4!#!5!#&5A#*51#)5!#(5!#&5!#*5!#&5A#)5A#-6!#,5Q#.6!#(5!#)51#(6Q#(5A#16A#15Q#16!#16!#161#15Q#.5Q#/51#16Q#15A#04Q#*61#06A#05Q#06A#06!#061#041#%4Q#%4!#!51#,6A#061#061#061#04A#'4A#$4Q#%4A#$4A#*6Q#06Q#06A#05!#-3!\"Z/1\"C.Q\"7-A\"11A\"44A\"791\"D=1\"VB!##D!#\"B1\"X:Q\"D71\"771\"@2Q\"1+Q!Q)!!G*!!G-Q!Z3A!`5A\"!4Q!\\5A!Y6!\"\"7A\"'7Q\",71\"271\"341\",2!\")1!\"\".!!]-!!U-!!Q,1!O,A!P,1!V,1!V,1!X.1!^11!_11\"(4!\"15A\"/71\"561\"261\")3Q!`3Q!\\6!!]7Q\"&8A\"25Q\"/1Q\"&,Q!Q+Q!W2A\")3A\"31!\"%/1!_41\".>!\"J@A\"W;A\"A21\"*.1!]-A!Y-Q!^-!\"+/Q\"92!\"L41#%4Q#/4Q#(4Q#%4Q#%4!#$5Q#-6Q#06Q#06Q#05A#,4Q#%41#\"4A#$51#(6A#05Q#061#06Q#05Q#03A\"_4!#\"5A#.6A#06A#06!#05Q#16A#17!#17!#17!#15A#151#17!#'6!#/5Q#161#16A#16!#16!#16A#&5!#*5!#(5!#*6!#)51#'5A#*5!#*5!#&5!#&5!#&4Q#%3Q\"`4Q#%4!#!4A##4A\"]3!\"]4A#\"4!\"^4A\"[3!\"\\31\"^2Q\"\\3!\"\\31\"]3!\"\\2Q\"[3!\"]3A\"_2Q\"[3A\"_3Q\"`41#\"3A\"_3A\"_3!\"\\4A#$4Q#%4A##4A#$4Q#%5!#&4A#$41##5!#&51#'61#&5Q#-5A#,51#*7!#'5!#,5!#*5Q#*5Q#16A#161#16A#16!#161#+5A#,61#-5A#16A#06Q#06Q#061#061#06!#061#061#061#03Q##3Q\"`4Q#*61#06A#05Q#06A#06Q#051#*4A#$41#\"4A#$5Q#06Q#061#06A#05A#031\"`0Q\"M/Q\"7.A\"70!\"62!\"461\"@:!\"I=Q\"WAQ#\"E!\"_AA\"W;A\"@8!\"971\";2!\".-Q!^+Q!J(Q!I+A!O.Q!]2A!`5A\"$51\"\"5A!^4Q!X5!!X4A!\\4A!`5!\"!61\",71\"-6Q\"081\"48A\".61\"+71\"07A\",5Q\"+5A\"+61\"*4Q\"!3A!\\6A!\\5Q!_7Q\"'9!\"+7!\"-51\".0A!`,!!R+1!M-Q![2A\"*4A\"71A\"+0A\"%61\"1=Q\"M@A\"T;!\"I4!\"2.1!`-A!Z,Q![-!\"#.1\"10Q\"C1Q\"T41#%5Q#051#-4A#$4A#$4A#&6!#061#06!#06!#06Q#041#*3A\"_41#\"51#*6A#05Q#05A#06A#06Q#05Q#04Q#)5A#.61#061#06!#061#.5A#17!#16Q#16A#16A#16A#/61#(5!#+6!#-5!#*61#15Q#16!#151#15A#,51#'5!#&5A#'6!#)51#(51#'5!#&5!#&4A##3A\"_41##41#\"3Q\"`4A#$4!#\"3Q\"`3Q\"`3!\"\\3!\"\\3Q\"`2Q\"[3Q\"\\4A\"^31\"]31\"]41\"`3A\"^41\"Z4!#!3A\"]4!#!3Q\"_4A#$31\"]4Q#%41##3Q\"`4A#$41##4A#&3Q#\"5!#&4A#$41##4!#!5!#'5!#&6Q##5A#.6A#$51#)61#'6!#(6!#(5Q#,6!#16Q#15Q#16!#16!#.51#-5A#)6!#06!#06Q#06Q#06Q#061#06!#06!#061#061#06!#04A#'4Q#*61#06A#05A#061#05A#06!#05A#)41#$3Q\"`5A#06Q#061#06!#06Q#05Q#/41#$2A\"Q/A\"C/A\";/1\"02!\"44A\"98!\"@;1\"L@1\"_C!#%CA#!BA\"U=A\"I81\"95A\"53Q\"11!\"$-A!W+1!Q*Q!L*A!S.Q!Y/Q!^1Q!_2!!_31!_3Q!]2Q!]1Q!S1Q!S01!R/A!Q0!!Q/1!P11!M3A!V4A!X41!^51\"#6!\"!6!\",61\"-51\"+0A!_.Q!],1!V-1!V-A!X01\"(1A\"*0A\")0!\"%2Q\")8!\";?1\"NAA\"V=Q\"K7A\"60!!`.!![-!!Y,Q!\\.!\"&-Q\"70Q\"D1A\"R41#%5Q#/51#04Q#'4A##4Q#'5A#.61#06!#05Q#06Q#06!#041#&4A#%5A#*61#06A#06!#06!#06!#06Q#05Q#061#06A#05A#06!#.5A#-5Q#/6!#15Q#16A#16A#15Q#051#+5!#*6A#%5A#)5A#/5Q#061#06!#.51#)5!#&5!#&5!#&5!#(5!#'5!#*4Q#%4Q#%4Q#%41##4!#!5!#&5!#&4Q#$4A##3Q\"_4!#\"3Q\"`4!\"^41\"]3!\"\\3!\"\\3!\"Y4!\"]2Q\"Z3!\"X3Q\"V31\"]2Q\"[31\"W3Q\"\\3!\"Z31\"]31\"]3A\"_3Q\"`3Q\"`3Q\"`3!\"]3Q##41#\"41#\"5!#&5!#&5!#&4A#$4A#$5!#&5!#)61#&5!#/61#'5!#+5!#(5!#(5!#+5Q#/51#16!#161#15!#+61#$5!#(5Q#,5Q#061#06Q#06A#05Q#06A#05A#/5Q#/5Q#06!#061#05Q#06A#06Q#06Q#06A#06!#06!#06Q#051#/4Q#'4Q#-61#061#06!#051#061#06Q#051#.3Q##2Q\"R01\"J/!\"@/Q\"41A\"73Q\"86Q\"B;1\"N?A\"[AQ#%E!#'D!\"`AQ\"V=!\"H8Q\">61\"85!\"13!\"03!\"'-Q!],Q!R+1!O+!!J)1!J+1!S+A!S+!!N*Q!M*A!K+A!K,!!N,Q!P-Q![/A!_/1!T-Q!R-A!^,A!S+A!O*1!E*1!R.!!T01!`11\"*2!\".1Q\",2Q\"+1A\"'6!\"61\"W@A\"T:A\"I4A\"10Q!`-A!Z,A!X,Q!Y+A\"$-Q\"1.A\"=0A\"K2!\"U41#%5Q#06A#04A#*3Q\"`4Q#(6Q#05Q#06!#06!#061#06Q#05Q#04Q#.5A#/61#06!#05Q#06!#06!#06Q#06Q#06Q#06A#06A#05A#.6A#&51#-7!#*61#17!#161#161#15A#,5Q#)6!#(5!#+61#'5Q#/51#(6!#+5!#&4Q#&5!#&5!#&5!#&5!#&5!#)5!#&4Q#%41##4!#!3Q\"`5!#&5!#&5!#&4!#!3Q\"`31\"^2Q\"[31\"]2Q\"[2Q\"[3A\"[4!\"^31\"]3!\"]3Q\"Y2Q\"[31\"Z3A\"]3Q\"_3!\"[3Q\"`31\"Z3A\"_3!\"\\4!#!31\"^3A\"^3A\"_41#\"4!#\"41##4A#$41#\"41##5!#&4Q#%3A\"_4A#$5!#'51#+5A#'51#'5!#&5!#&5!#&5!#&5!#'61#-6!#,6Q#+6!#/5A#,61#(5A#&5Q#,6!#061#06Q#05Q#051#06!#.5!#)5Q#,6!#/6!#06A#06Q#06Q#06!#05Q#05Q#061#06Q#061#06A#05Q#06Q#06Q#06A#061#06!#06A#06Q#061#051#-4A#!21\"T0Q\"N1A\">11\"921\"831\":71\"A9A\"J3!\"'/!\"\"-Q!Y-!!X,A!Z,1\"\",1\"/-!\"6/A\"B1!\"O3!\"Y41#$5!#06Q#06!#051#,61#/6!#05A#05Q#051#05Q#061#06Q#06Q#06A#06A#06!#05A#05Q#+6Q#+61#-6Q#06Q#06!#061#05A#/5A#-5A#)51#,6!#/6Q#16!#151#151#/5Q#'5!#'5!#*6A#$51#)5Q#'6!#.5Q#*4Q#%41#\"41##4A#$4A#$4Q#%5!#&5!#&4!#!3Q\"_4!#\"3Q\"`3A\"_4Q#%3Q\"_3A\"_3Q\"`3Q\"^3A\"]3A\"]3!\"\\2Q\"[4!\"]3A\"^3A\"X3A\"Z31\"]3Q\"X31\"Y3!\"X31\"Y3A\"Z41\"^4A\"[31\"^4!\"^3Q\"[2Q\"[31\"]2Q\"[4!\"^4!\"\\4!#!3Q\"`5!#&4!#!41##3A\"_4!#!4A##4!#!5!#&6!#)7!#%5!#)5!#&5!#&5!#&5!#&5Q#*5!#+6A#(5Q#/51#*5!#+6!#)4Q#'51#,51#06Q#05Q#06!#05A#.7!#%4Q#+5!#-6!#051#06A#06Q#06!#05Q#06A#06!#05Q#06A#06!#06Q#06Q#06Q#06Q#06!#06!#05A#05Q#06!#06Q#06!#05!#-4!#%3!\"Z2!\"L0Q\"B1A\"91Q\"72A\"941\">6Q\"C:Q\"O=Q\"W@!\"_CQ#(CQ#)EA#'EQ#%AQ\"V?Q\"NQ\"O?!\"[A1\"X@!\"Z>A\"R9Q\"?4!\"00!\"#.1!]-A!Y-1!X,!!X+A\"!+A\",-Q\"5.Q\"<0Q\"L1!\"O1Q\"T4Q\"`5Q#+6A#06Q#06Q#06Q#06Q#05Q#06A#06!#05Q#061#06Q#06Q#06Q#05Q#05Q#051#-5!#*7!#&51#06A#061#06Q#05Q#051#051#)5A#)51#*5A#-6!#05A#16!#15Q#-61#)6!##5!#&5!#&5!#*51#+6!#'51#(5!#&4Q#$31\"]4Q#%5!#&4A##4Q#%5!#&5!#&4!#!31\"^3A\"_4!#!31\"]3Q\"`4!#!4!#!31\"]3A\"\\31\"\\3!\"X3!\"[3Q\"`31\"X3Q\"^31\"W3A\"Z31\"]3!\"Y4!\"]3Q\"Y41\"]3A\"V2A\"[2A\"Z31\"W2Q\"Z3A\"_31\"]4!#!31\"^3Q\"X31\"]3!\"\\4!#!5!#&41##3A\"_41##3!\"\\3A\"_4!#!4A#$41##4Q#*5!#(5!#&41##4A#$41#\"5!#%6A#&4Q#,5A#)5Q#-61#$5!#%4Q#%4Q#%5Q#+5Q#06!#06A#05Q#,5A#061#$51#%4Q#*6A#05A#05Q#06Q#06!#051#.5Q#-4Q#)51#-6A#06!#06A#06Q#06Q#06Q#06!#05Q#.3Q\"[2A\"Z4A#&6A#.7!#07!#16!#16!#15!#'4!#!2A\"W3!\"C2!\"@1Q\"81Q\"73Q\"861\"B7A\"D:A\"L<1\"S?1\"^A!#$BA#$DA#)E1#%E1#\"E!#\"D1\"YB1\"_AQ\"Z@A\"Y@!\"Y?A\"Q>1\"N>A\"O?A\"XA1\"W@A\"YAQ\"]CA##CQ#&BQ#$A!\"`=1\"R:!\"F7!\"<3A\".0Q\"$-Q!\\-1!X,A!X,Q!X+Q!X,1!]+!\"\"+Q\"0,A\"6-1\"90!\"H1!\"N11\"P2Q\"[3A#!6!#06Q#06Q#06Q#06Q#06!#06!#06!#05Q#-6A#+5Q#06Q#06Q#06Q#06!#05Q#05Q#-4Q#)6A#'4Q#16!#06Q#06!#06!#05Q#06!#$6A#%51#(6!#&6Q#+51#06!#.51#+5!#*5!#&5!#&5!#&5!#)6A#%51#(6!#%5!#'5!#&3Q\"`4A#$4!#!41#\"5!#&4!#!5!#&3Q\"`41#\"31\"^31\"^4!#!3!\"\\31\"^2Q\"[2Q\"\\3A\"Y3A\"_3A\"_2Q\"[4!\"\\31\"]31\"X3A\"[3Q\"\\4!\"X3A\"Y3!\"Y2Q\"Y3A\"X31\"X3Q\"^31\"]4!\"X2Q\"[3Q\"^3A\"_2Q\"[3A\"_31\"^31\"]31\"]3!\"\\2Q\"\\3A\"_41##41#\"4Q#%3A\"_3A\"_3Q\"`4!#!4A#$5!#&5!#'5!#*4A#$3A\"_3A\"_4Q#%5!#'6A#\"51#-5A#)51#'5!#&4Q#%4Q#%5!#&51#(5Q#.61#/5Q#.5Q#*5A#*4Q#*4Q#%5!#/5Q#06!#061#061#06!#06Q#(5!#.6A#&51#05!#05A#06Q#06Q#06Q#06!#06!#04Q#*1Q\"R11\"O2A\"Y3A\"^5!#-6A#06A#06Q#06Q#061#.5!#'3A\"]31\"Q3Q\"L2!\"C21\";1Q\";31\";31\";3Q\"<7!\"@8!\"@8Q\"B:!\"M!\"X>Q\"Y?A\"Z?A\"Z@Q\"Z?Q\"Z@!\"Z@1\"\\?Q\"Z?1\"W=!\"X51\"421\".0A\"'/1!`.A!]-A!\\-1!Y,Q!Y+Q!X*1!W)Q!Y*Q!`*A\"#*Q\"',!\"1-A\"9/!\"A0A\"J0Q\"M1!\"O2!\"V4A#&5Q#06Q#06Q#06Q#061#061#05!#/51#.6A#*61#05Q#06A#05Q#061#06A#05A#05Q#-5!#'51#)5A#-5A#,6Q#06Q#061#05Q#.4Q#+5A#)4Q#(5!#*5Q#+6!#,6!#+5Q#)6A##51#$4Q#%5!#&5!#&5!#&51#'51#(5!#&41##4!#!3A\"^4!#!41#\"41##4Q#%4A##31\"^41#\"3Q\"`2Q\"[4!#!31\"^3!\"\\3A\"_41#!3Q\"X31\"Z3!\"[3!\"[3A\"]3A\"[4A\"Z3!\"[31\"\\3!\"Z3!\"Z31\"Z3!\"Y3!\"X31\"X31\"^31\"W3Q\"\\31\"Y3Q\"Z3A\"Y3Q\"Y3Q\"`3!\"]31\"]31\"^2Q\"[3Q\"`31\"\\41\"]3Q\"`4A#$3A\"_4!#!41##31\"]3Q\"`4A##3Q#!5!#&5!#&5!#&41#\"4!#!41##3Q#!4A#'5!#&5Q#,6!#(5!#*4Q#%4Q#%4Q#%4Q#%5A#&5Q#)5Q#.5Q#.6!#%51#(4Q#%4Q#%5!#*5Q#051#06!#06!#06!#051#.4Q#-4Q#)5A#05Q#05Q#05Q#05Q#06Q#061#051#05!#(1Q\"R01\"I0Q\"M11\"P31\"]4Q#'5Q#06!#06A#06!#06!#05!#&4!#!3Q\"[3A\"T3!\"O3!\"E1A\"D1A\"=0A\";01\"<1Q\"81Q\"62A\"231\"131\"12Q\".2A\".1!\"00Q\"10A\",/1\"$/1\"$.1\"\".1\"\",Q!`.!!^-1\"#-A\"\"-Q!_.!!^,1\"!,!!_*A!Z*1!X(Q!W(1!Z(1![*A\"$+A\",,!\"2,1\"4-A\"9/A\"C0!\"H0Q\"M11\"P31\"^4Q#+5Q#05Q#06A#06!#051#04Q#.4!#%41#$4Q#,6!#+5Q#/5A#061#06Q#061#05Q#051#-5Q#%5Q#)6!#+61#*6!#05A#05A#04Q#.6!#&4A##41#\"4Q#&5A#+5A#*61#)5Q#)5A#%5!#&4A#$4A#$41#\"5!#&5!#(61#(5!#'4A##3Q#!3Q\"`41##3Q\"`3Q\"`4A#$3Q\"`4!#!31\"^2Q\"[41\"[31\"]3!\"\\4A##41\"^4!\"]31\"X31\"^2Q\"[3Q\"\\3!\"Y3Q\"U3Q\"\\3Q\"U3Q\"\\31\"Y3Q\"Z31\"W31\"W3!\"Y3!\"X21\"V3Q\"U3Q\"U3!\"\\2Q\"[3A\"]3Q\"W31\"\\31\"X31\"X3Q\"Y3!\"\\3Q\"`3Q\"X2Q\"[3!\"[4!#!3!\"]4!#\"31\"]3Q\"`2Q\"[2Q\"[31\"^3A\"_41#\"4A##5!#&3Q\"`4!#!31\"]4!#\"3!\"\\5!#&5!#'61#&51#*4Q#%4Q#%3A\"_41#\"4Q#%4Q#&51#)6!#.5A#/5!#(4Q#'4Q#%4Q#&4Q#'4Q#(5Q#-5Q#*5A#/5Q#06A#(5Q#'5!#+5!#-5!#/51#06!#05Q#06!#05Q#05A#05!#.1Q\"S0Q\"M0A\"K0Q\"L0Q\"K3!\"W3!\"Y4!#'5Q#(4Q#*4Q#)31\"]3!\"Y2!\"V1Q\"R0Q\"J01\"I/Q\"E/A\"E.Q\"@.A\"<.A\";.A\";/1\"6/!\"501\"501\"4/Q\"0/Q\"./A\"0/1\")/1\"(/1\"%.1\"$,1\"(,1\"\"+1!`*!!Z(A!W'A!W'1!R&Q!N&1!O&A!Q'Q!W(1!Y)1!_*1\"!*1\"\"*A\"\"+Q\"/.1\"=01\"H0Q\"M11\"P3Q#\"51#.61#061#06!#04Q#*4!#&2!\"W0A\"L2A\"X5!#+5!#.5!#/5A#06!#061#05Q#05!#04Q#,4Q#&5!#(51#*5Q#,61#-5Q#,5Q#,6Q#$4Q#)4!#\"4Q#%4Q#%51#(5!#(5Q#*5Q#+5!#,4!#\"41#\"31\"^3!\"]41#\"4A#$5!#&4A#%3A\"_4!#!3!\"]3A\"^31\"^4!#\"41##4!#!41#\"31\"^4!#!3A\"\\31\"[3!\"\\3Q\"]31\"Y2Q\"[3Q\"^3Q\"\\4!\"W3Q\"^3A\"V4!\"]3!\"[3!\"[3!\"[3!\"Z31\"[3A\"W31\"X31\"X3Q\"V3A\"V2Q\"Z2Q\"Y3!\"Y2A\"Y3A\"]31\"W3Q\"]4A\"V2Q\"[2Q\"Z3Q\"Y3A\"Y3A\"Y3A\"Y4!\"^3!\"]3!\"\\3!\"\\4!#!31\"]3Q\"`4!#!31\"]3A\"_31\"]31\"^3A\"^4!#!4A#$31\"^3Q\"`31\"^3Q\"`4!#!4Q#&41#&4Q#'4Q#(4Q#%41#\"3A\"^4A#$4Q#%4Q#%6A##51#-5Q#&6!#)5!#&4Q#%4Q#%4Q#%4Q#%6!#-5Q#-71#*5Q#05Q#,6!#&5A#$4Q#'4Q#+6A#'5A#05Q#05Q#05A#051#04Q#,21\"Y0A\"L0Q\"N/Q\"F0Q\"M0Q\"M1A\"Q2!\"P2!\"W21\"W2A\"Y1Q\"P1Q\"T0Q\"L/Q\"F.Q\"@-1\"9+A\",*Q\"%*1\"!*1\"!*!!`*!!`)!!\\)A!](1!Y(1!Y(!!X&1!S%A!S%A!S%A!S$A!R%A!O%1!M$A!J$1!J$A!J%1!K$!!I$A!J&!!N%!!K&A!L'!!N'1!O'1!O)!!V*!!^-A\"6/Q\"F0Q\"M21\"W3Q#%51#05Q#/6!#/4!#!2A\"Y1!\"O0A\"L0A\"K1A\"T4A#)6!#,6!#-5A#-5A#.4Q#.51#*4Q#)4Q#)4Q#&4Q#%5!#*5A#)5Q#.6!#,51#,5!#'4Q#&41#\"41##41##4Q#%5Q#(61#(5Q#)4!##4!#!4!#!41#\"3Q#!3Q#!5!#&5!#&4Q#%4A##3A\"_31\"]31\"^31\"^3Q\"`31\"]3Q\"`31\"^31\"^31\"]31\"]3Q\"]3!\"Z3Q\"`2Q\"[2Q\"[2Q\"[2Q\"Z3!\"Y3!\"Y3Q\"]31\"]3A\"Z3Q\"Y3A\"Y41\"]2A\"V3Q\"U2Q\"[31\"X31\"X21\"X3!\"U2Q\"S3!\"X3Q\"U2Q\"U3!\"Y31\"W2Q\"Z2Q\"[4A\"^4!\"Y3!\"]3A\"\\3A\"\\3!\"\\3A\"Y31\"^3Q\"X3!\"\\3A\"V3!\"\\4A\"]3!\"X3!\"X31\"]3A\"_2Q\"[3Q\"`4A##3Q\"`4!#!3A\"_3A\"_2Q\"[3!\"]4!#!41#\"4Q#$4A#$4Q#%41##41#\"31\"^31\"]4!#!4Q#$5A#)5!#,6!#%5A#,4Q#%4A##4A#$3!\"]4Q#%4Q#*5Q#*51#+51#+6!#+4Q#(4Q#%4A#$2A\"Y2!\"T3A\"]5A#)5Q#,5A#+5Q#,5Q#,4Q#\"11\"Q0A\"J/Q\"E0A\"K0!\"G0!\"G/1\"C01\"J0Q\"M0A\"K0Q\"M1!\"O11\"P11\"O01\"I.Q\"@-!\"5+!\"&(!!T%!!K%A!D$1!A#1A>#1A>$1Q=#1Q>#1A>$!A=$!A=#AQ?#QAA$AA:#AAB$AA:#AQ?#A!<#A!;$A!4#1!9#A!6#A16#113#Q19&A!G)A!\\-!\"30A\"J0Q\"M1!\"N11\"P3A\"]31\"`31\"`11\"P0A\"K01\"J/Q\"E0A\"J0A\"K2!\"U4Q#&6Q#(6!#06Q#(5A#.6Q#'4Q#(4Q#*4Q#%4Q#%4Q#%4Q#(6A#'5A#+5Q#&6A#*51#$41##4A#$31\"^4!#!4Q#%4Q#'4Q#'4A#&4A#$4A#$31\"]3A\"_3Q\"`41#\"5!#&5!#&41#\"3Q\"`3!\"\\3Q\"`3Q\"`3!\"]3!\"]31\"]3A\"_3A\"_3A\"_3!\"]2Q\"Y3Q\"]3A\"V31\"]31\"W3!\"[3Q\"`31\"X4!\"\\31\"^3A\"W3A\"V3!\"X3Q\"[3!\"X31\"X3A\"V3!\"X2Q\"X21\"X31\"U3!\"T1A\"S2Q\"W2Q\"Z2!\"U3!\"W21\"U31\"T31\"W3A\"W31\"X31\"X2Q\"Z3Q\"Y31\"Z4!\"W3!\"]31\"[4!\"[31\"Y41\"]31\"]41\"Y3A\"_3!\"\\2Q\"[4!\"Y2Q\"[3A\"]3A\"_31\"^3A\"_3A\"_4!#!4!#!31\"]41\"`31\"]3Q\"`41##4Q#%4Q#%41##3A\"`41#\"4!#!31\"]3A\"_41#\"4A#&51#*4Q#(4Q#&4Q#$3Q\"`4A##4!#!4Q#$51#'5!#&5!#+5A#*5Q#*4Q#)4Q#(3Q\"_/Q\"F/Q\"E1!\"M21\"V41#!5Q#(5Q#,5Q#,4A#&2A\"Y1!\"N0!\"H0!\"H/1\"B+Q\"**A!`*Q\"\"+!\"%-!\"5.Q\"?/A\"D/A\"D/A\"D/A\"D/Q\"F/!\"?+Q\"+*1!Y(1!R&!AK&1Q@$AQ;#AA8#!!:#Q!9\"A!:\"A!9#1Q8\"!!1\"!11\"1A5\"112#!!2#Q!2\"A!1\"!!1#!14#AQ4#1!;'!!O*A\"#-Q\"8/Q\"F0Q\"M0Q\"M0Q\"M0Q\"M01\"I1!\"N0A\"K01\"I0!\"H/Q\"E01\"I0A\"K11\"O3A\"^4Q#+5!#*6!#+5Q#-4Q#(4Q#'4Q#'4Q#%4Q#%4Q#%4Q#%4Q#%4Q#(51#&51#'51#&4!#!3A\"_3Q\"`41#\"41#\"4!#!4Q#%4Q#&4Q#&4A##41##3A\"^3A\"^4!#!3A\"_4A#$4!#!41##4!#!3Q\"`31\"Z3A\"Z3A\"^3!\"]31\"^31\"^4!#!3A\"^41\"Y3Q\"^3!\"[3!\"[31\"X3A\"[41\"`31\"Z3A\"Y31\"Z31\"Y4!\"[31\"[41\"X31\"X3A\"Y2Q\"Y2Q\"W21\"W2Q\"Z2Q\"Y1Q\"T3!\"S3!\"S1Q\"T2!\"U2Q\"T2A\"X3!\"U3!\"Y3Q\"U2Q\"[31\"W2Q\"[3Q\"U3!\"Y31\"]3Q\"Z3Q\"Y3Q\"`3Q\"X31\"^3!\"]3Q\"Y2Q\"[31\"^2Q\"[31\"]3A\"_3Q\"`3!\"[3Q\"[3!\"]4A\"\\3Q\"`3Q\"_3Q\"`3A\"_3A\"^3Q\"Z3Q\"`2Q\"[4!#!4!#\"4A#$3Q#!41#%4A#$3Q\"`3A\"^3A\"^3Q\"_3Q\"`3Q\"`4Q#'4Q#'4Q#%4Q#%4!#\"4A##3Q\"`3Q\"`4Q#%4Q#%4Q#)5Q#)6!#\"4Q#)5A#)41#!11\"P/1\"C/Q\"E0!\"G1!\"M2Q\"Y41\"\\51#*4Q#*2A\"X1!\"O0Q\"M01\"J01\"J,1\"-*!!\\)!!V)!!V(!!S'A!P'A!P'A!P(!!V(Q![)A!Y(A!S'A!P'A!P'!!K%A!C#Q1;#!A3#1Q1\"!17#115#1A1\"!11\"1A6\"Q15#1A.!QQ4\"112\"Q!1\"1!0$A1E%Q!J)!!Y-!\"3/!\"@0Q\"M01\"I0Q\"M0Q\"M0Q\"M0A\"K0A\"L0!\"G/Q\"E0!\"G0!\"G0!\"G0!\"G/Q\"E1A\"Q3Q##4Q#)4Q#%5A#+61#'5!#)4Q#%41#\"3Q\"_4A##4Q#!4!\"_4Q#%4Q#%4Q#,61#\"4Q#)3Q\"_3Q\"`3Q\"`41#\"31\"^3Q\"`4Q#%4Q#%4A##41##3Q\"`3!\"\\3A\"^3!\"]3!\"]3Q#!4!#!4!#\"4!#\"31\"]31\"]2Q\"[4!\"Z3!\"]3!\"]3Q\"_3!\"]3!\"]31\"^3A\"]31\"X3Q\"]3Q\"[3!\"]3!\"[3Q\"[3A\"W3A\"^4!\"Z31\"W2Q\"[3!\"Y3!\"Y3A\"W3A\"W2Q\"T21\"X3!\"T3!\"Y21\"T2Q\"U2A\"X1Q\"S2!\"V2!\"Q2Q\"S2!\"S21\"R1Q\"R2Q\"X2A\"U2A\"W3Q\"U3!\"X3A\"V31\"W2Q\"Z2Q\"Z3Q\"X3!\"[3A\"W3A\"[3!\"Y4!\"\\3Q\"[41\"`3Q\"W2Q\"[3A\"W2Q\"[3Q\"Y2Q\"Z2Q\"Z2Q\"[3!\"]3!\"]31\"]3Q\"`3!\"\\3!\"\\3!\"\\2Q\"\\2Q\"[31\"^3Q\"_4!#\"4!#!3A\"^3Q#!3Q\"`3!\"\\3!\"]31\"]4A##4Q#%4Q#%4Q#%41##4Q#%41##3A\"^4!#!41#\"4!#!5!#&41#%4Q#)4Q#%4Q#%4A##1A\"R/Q\"F/!\"@/!\"A/1\"A/!\"A0!\"G0!\"H0Q\"L1!\"N0Q\"M0A\"K0A\"J0!\"G/A\"D-!\"2*A\"!)1!X&Q!K&1!?#Q14\"AA/$111#1Q2#1Q1\"QA/\"QA/#1A/\"1A0#AA5\"AA4\"1Q5#!A.\"!11\"!!.#114\"1!2$!A6$!A@$1A;%11C(Q!T)Q!]+A\"*/1\"D/A\"D/Q\"F0Q\"L0!\"H0A\"K/Q\"E/1\"B.1\";-Q\"7-Q\"7/A\"D/Q\"F/!\"@/Q\"F/Q\"F0Q\"M3A\"_4Q#'4Q#(4Q#&4Q#%4!#!3A\"]11\"P01\"I2A\"Y4A#$4Q#%4!#!4Q#%4Q#%4Q#%4A#%4!#\"3Q#!3Q\"`4!#!31\"^41##4A##4A##41#\"41#\"3Q#!3Q\"`3!\"]3Q\"`3!\"\\3Q\"`3A\"_3Q\"`4!#!3Q\"_3!\"\\3A\"Z31\"^31\"\\3Q\"]3!\"\\3A\"Z3Q\"`3A\"[4!\"Y3!\"\\31\"Y31\"W3!\"[3A\"Y31\"X3A\"Z3A\"W31\"[4A\"X3!\"Y3A\"W3Q\"U4!\"]31\"X3!\"Y3!\"Y3!\"X31\"U1Q\"S31\"R2A\"V31\"U1Q\"T1A\"S11\"Q21\"Q2!\"V31\"T2Q\"W2!\"S2A\"W21\"T2A\"V2Q\"Y31\"X2A\"Z2Q\"Z3!\"X31\"W3A\"Y41\"]31\"W4!\"X3!\"Y3A\"V4!\"X3!\"Y2Q\"Z3A\"_31\"]4!\"X3Q\"_3Q\"W3A\"^31\"]3A\"_41\"\\3Q\"_31\"\\41\"]31\"Z4A\"\\31\"\\41#!3A\"_4!#!3A\"_41#\"4Q#%3!\"]3!\"\\3Q\"`31\"]31\"]3Q\"`3A\"_4Q#%4Q#%4A##4!#!41##41#\"31\"^31\"^3A\"^41##4!#!4Q#%4Q#%4Q#%4Q#%4A#$2A\"W/Q\"E0!\"G/1\"B0!\"H0!\"H/1\"C0!\"G/A\"D/A\"D0Q\"L0Q\"M0A\"J0A\"K0!\"G/Q\"F.!\"9+Q\"))A!Z'A!P&11G\"QA6$1A4\"1!7\"AA4\"QQ1\"1A0\"!14\"1!1\"AA1\"!Q5#!A.!Q!5$1Q?%1!B&Q1K'!1O(A!T)!!V)!!V)1!X+!\"&-!\"6-1\"9,Q\"3+A\"'+1\"&+A\"'+A\"'+!\"#*A\"!)A![)1!X*Q\"#.1\"<0!\"H01\"I01\"I1A\"R41#\"4Q#%4Q#$4A#%4!\"X11\"P0Q\"M/1\"B/!\"@1A\"R31\"]3Q\"`4Q#%4Q#%4Q#%4!#\"4A#$3Q\"`3A\"_3!\"]3!\"\\3A\"_3A\"_4!#!4Q#%41##4!#\"4!#!3!\"\\2Q\"[3Q\"Y3!\"[3!\"]3!\"\\41#\"31\"]2Q\"[31\"\\41\"]4A\"\\31\"W3A\"[3!\"Y3!\"\\4!\"]3!\"\\31\"Y2Q\"[3Q\"X3A\"Z31\"^3Q\"W31\"Z4!\"\\3Q\"[4!\"Z3!\"Y3!\"Y3!\"Y31\"W3Q\"U31\"X4!\"T2Q\"X3!\"Y2Q\"X1Q\"T1Q\"T2A\"V31\"S1Q\"T2!\"V11\"P1Q\"T11\"P1Q\"T1Q\"T1Q\"T21\"Q21\"X1Q\"T2!\"W1A\"R3A\"W2A\"R2Q\"T3A\"V3A\"W2Q\"[3A\"W2Q\"[31\"W3A\"W2Q\"[2Q\"Z3Q\"[3Q\"Y3Q\"Y3Q\"\\3!\"X31\"W3!\"Y3!\"X3Q\"Y3A\"Y2Q\"[3!\"\\3Q\"Y3!\"\\3!\"[31\"W3!\"Y3Q\"T3!\"\\3!\"\\3Q#!3Q\"`3Q\"_3Q#!3Q\"`31\"]3A\"Y3!\"]31\"^3A\"^31\"]3!\"]4A#$4A#$4A#$3Q#!4!#\"41#\"3!\"]3!\"[31\"X4!#!4!#\"41#\"4Q#%4Q#%4Q#%4Q#%11\"O/A\"C/Q\"F/1\"B/1\"B/1\"B/1\"B/1\"C/Q\"F/1\"B0!\"G0A\"K0!\"G01\"I01\"I/A\"C/A\"D-1\"4+Q\")*!!](A!T'!!E%11>$A1=#117#110\"QQ3\"112\"!!1\"!13#A1.#Q15%!!>&A!D%A1C&QAH&Q1K'1!K'A!M'A!M'Q!R&Q!N'Q!R)!!V)!!V(A!T(Q!U)!!V)A!Z+1\"'-1\"4/Q\"F0!\"G/Q\"E0!\"H2!\"V3!\"[2Q\"X1Q\"S01\"J/!\"@/A\"D.Q\"?.Q\"?/A\"C2A\"W4A#$4Q#%4Q#%4Q#%4A#$3Q#!3Q\"`3!\"\\3Q\"`2Q\"[3A\"_3Q\"_31\"^3A\"_4Q#%4!#!31\"]3A\"^2A\"Z31\"^31\"^2A\"Z3Q\"^41\"_3Q\"_3!\"\\3Q#!3!\"]3Q\"Y2Q\"Z2Q\"[2Q\"[3A\"\\3!\"Y2Q\"[2Q\"[3Q\"[31\"Z4!\"X3A\"[4!\"W31\"]3!\"\\3Q\"Y2Q\"[3A\"W31\"W2A\"U3!\"Y3A\"W3A\"W2Q\"[2!\"U21\"X21\"R2A\"W1Q\"S1Q\"T1Q\"T1Q\"T1Q\"U11\"P1!\"O1Q\"T11\"P11\"P1!\"O1Q\"T1Q\"T1Q\"P1A\"Q2A\"Q21\"U1Q\"T2!\"S3!\"V2!\"U2A\"X2Q\"Z3A\"V3A\"V2Q\"[2Q\"Y3!\"Y31\"X31\"W3A\"V3Q\"V3!\"Z2Q\"[3!\"Z3A\"]31\"\\4A\"_3Q\"W3A\"Y4!\"[31\"[2Q\"Z3!\"\\2Q\"\\2Q\"[2Q\"[3!\"]31\"Y3A\"Z3!\"Z3!\"\\4!#!4!#!31\"^3A\"_31\"\\2A\"Z3A\"]3A\"]2Q\"[3A\"_2Q\"\\3Q\"`41##4A#$31\"^4!#\"3Q\"`3A\"_21\"V/Q\"F0Q\"K2A\"X3!\"[3A\"^4Q#%4A#$41##3A\"]01\"I/1\"C/!\"@.Q\"?/Q\"E.1\"=+A\"+*Q\"&,1\"1-A\"7.1\";.!\":-Q\"7.1\"<.1\"<.1\"=/A\"E.1\"<,Q\"2)A!Y(Q!V)!!V(!!Q(!!P'!!M%Q1J%A1?#QQ?#Q!9\"1!5\"1A/\"1A/\"AA2\"!11\"!12\"QA1\"AA0#A11$!17&1!>&A!M(1!T(!!S)1!X*1!_,1\"-.!\":/A\"D/1\"C/Q\"F/A\"D/Q\"F/1\"B/A\"D/A\"D0!\"G0!\"G/1\"C.Q\"?/!\"@/!\"A2!\"U3!\"[4Q#%4!#!41#\"41##3A\"_3Q\"`3!\"\\3!\"Z4!\"]41\"]3A\"^4!#!4!#!41#\"3Q\"`3!\"\\31\"^3!\"]31\"[41\"Z3Q\"W3!\"]31\"^31\"]31\"\\3!\"\\2Q\"[3!\"[4!\"]3A\"W4!\"\\3A\"X4!\"[31\"[31\"Y4!\"\\3!\"Y3A\"[2Q\"Z3!\"Y3!\"X3!\"Y3A\"X3Q\"V31\"Y2Q\"[3!\"Y31\"W2A\"W2Q\"Y2!\"V1Q\"S31\"V2A\"W31\"T1Q\"T1Q\"S1Q\"Q1Q\"T1Q\"P1Q\"T1Q\"U1A\"S2Q\"Q11\"Q11\"Q1A\"R1A\"Q1!\"O11\"P2A\"V1Q\"R1Q\"T11\"P1Q\"T3!\"V2A\"R3!\"U21\"S2A\"V2!\"V1Q\"U2Q\"S3!\"X3Q\"U2!\"V31\"X2!\"W2Q\"X4!\"T41\"V3Q\"W3!\"X3!\"Y3A\"V2Q\"[31\"X31\"W3A\"[3Q\"]3Q\"X2Q\"\\2Q\"[31\"Z4Q\"Y3!\"X3Q\"[41\"W3Q\"^2A\"Z3A\"_31\"^31\"^31\"]2A\"Z3Q\"]3A\"]4!\"[3A\"^3A\"_31\"]2Q\"[3A\"_4Q#%4!#!3Q\"`3Q\"`2A\"Z0Q\"M.Q\"?/A\"E/Q\"E0Q\"L11\"O21\"V3!\"]4Q#$3Q\"`1Q\"T/Q\"E/A\"E.Q\"?.Q\"?-1\"4*1\"\"(!!R(!!R)!!V)!!V)!!V)!!V)A![)A!`*A\"#*A\"#)Q!\\)1!X)!!V)!!V)!!V(A!T(Q!U(1!S'Q!R)!!V'1!P&!!J$!!>#!!3\"!15#A14!QA2\"Q16%A1A%Q1E'A!N(Q!U(A!T*!!]+Q\",-1\"7/A\"E/1\"B/Q\"E/A\"E/A\"E/A\"C.Q\"?/!\"A/1\"B.Q\"?.Q\"?/1\"B/1\"B/1\"C.Q\"?/A\"C2Q\"Y3!\"\\3Q\"`4!#!4!#!3A\"_3!\"]3!\"]3A\"_4!\"Y3!\"X3A\"^2A\"Z3Q\"`3!\"]3!\"]3A\"^3Q\"`2Q\"[4!\"Y3Q\"Z3A\"W31\"]2Q\"[3A\"_31\"^2A\"Z2A\"Z4!#!4!\"Y3A\"[2Q\"Z31\"X3A\"_31\"X2Q\"[2Q\"\\3A\"Y3!\"]4!\"X41\"W3A\"V3A\"V31\"X2Q\"[2Q\"[2Q\"Y3Q\"U3!\"X3A\"V2!\"W31\"T31\"T2Q\"U2Q\"W2A\"Q1Q\"R11\"Q21\"Q2!\"R2A\"T1A\"P2Q\"U11\"Q1A\"R1!\"N11\"Q11\"Q1Q\"T1!\"O1A\"R11\"Q1Q\"S11\"Q1A\"R1Q\"T3!\"R21\"Q11\"Q1Q\"U1Q\"T1A\"Q21\"Q1Q\"T21\"X21\"X2A\"W21\"T2A\"V2!\"R31\"W2A\"Y2A\"X2Q\"Z2Q\"Z31\"W31\"\\3!\"Y3Q\"U3Q\"U2Q\"Z3Q\"T31\"X3Q\"Z4!\"W3Q\"\\2Q\"[31\"\\3!\"\\3A\"]3!\"X4!\"X4!\"Y3A\"\\3!\"Z3!\"]3Q\"`3Q\"_3!\"\\2Q\"[2Q\"Z3Q\"W3A\"Z4!\"\\3!\"]2A\"Z3!\"]4!#!3A\"_3!\"\\4!#\"31\"]1Q\"U01\"I/1\"B/!\"@.Q\"?/!\"@/Q\"F/1\"B0Q\"M11\"Q0A\"L/A\"C/A\"E.Q\"?.Q\"?.Q\"?.!\";+A\"))1!Z)!!V(!!R(A!T(A!T(A!T(!!R(!!R(!!Q&A!I'!!K&11H%11C'!!H&A!D%1!B$A!7\"!Q.%Q!8$Q1<%11=$QA;&A!B'Q!Q(Q!U(!!R(!!R)!!X)A!^+A\"(.Q\">/!\"A/1\"C/!\"@/!\"@/1\"B/!\"@/!\"@/1\"C.Q\"?.Q\"@.A\">.Q\"?/1\"C/1\"B.Q\"?/!\"@/1\"C1Q\"U3A\"^41#\"41#\"4!#!31\"]3A\"^3A\"Z2A\"U3!\"V3A\"V2Q\"[3!\"\\3!\"\\31\"]4!#!31\"^3Q\"`4!\"\\31\"]4!\"\\31\"]3!\"\\3!\"\\3A\"Z4!\"\\31\"Y4Q\"[4!\"^41\"[4!\"T3!\"Y31\"W4A\"Z31\"X3A\"V4!\"\\31\"^3Q\"V3Q\"]3A\"V2Q\"Z21\"X31\"X2Q\"Z3A\"V3A\"V21\"X31\"U2A\"Y21\"X21\"V2A\"T21\"V2!\"V1Q\"T21\"X1Q\"T2!\"U2Q\"P1Q\"T1Q\"T1Q\"T1Q\"U11\"O2Q\"Q1A\"Q2Q\"R11\"Q1Q\"S0Q\"L1A\"R1!\"N1A\"S1Q\"U11\"Q1A\"R11\"P1A\"S21\"S2!\"V1A\"Q1Q\"S1Q\"T21\"T11\"P2!\"V1A\"P21\"V2!\"S3Q\"U2A\"X2!\"V2A\"X1Q\"T2A\"S3!\"Y2!\"V4!\"V3!\"Y2Q\"Y3Q\"U31\"W2Q\"Y2Q\"Z3!\"Y3!\"Y3!\"X2Q\"[4!\"X3A\"Y3A\"[31\"Y4!\"]4!\"T4!\"W3!\"Y3Q\"X4!\"]3Q\"[3!\"[2Q\"\\2A\"Z31\"Z4Q\"[3!\"Y4!\"X3A\"]3Q\"W2Q\"Z3A\"_2Q\"[31\"^3A\"^31\"^21\"X0A\"L/1\"B.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/1\"B0!\"H/!\"@/1\"C/A\"D/Q\"E/!\"@/Q\"E.Q\"?.!\":-1\"4+!\"$)A!Z)!!W'Q!R(A!T(A!T&1!K%A!@#Q18\"AA2\"AA0#11<$A!@'A!K&Q!H'A!K'A!N(1!S)!!V(Q!U(1!S'1!P(A!T(1!S(1!S)Q!],!\"2.!\":.1\";/!\"A.1\";,1\"1+!\"$+!\"$*A\"\"*A\"!*Q\"$)A!^*A\"#.!\":.Q\"?.Q\"?/!\"A/1\"B11\"Q2!\"V4!#!4!#\"3Q\"`2Q\"Z2Q\"Z1!\"N0!\"G0!\"D01\"J2A\"Y3Q\"^3!\"[3Q\"_31\"]31\"^2Q\"[3!\"Z3Q\"Y3A\"Z4A\"[3!\"Y4!\"X3Q\"Y3A\"Y3Q\"W2Q\"[2Q\"[31\"[2Q\"Y3A\"W2Q\"Z3A\"V2Q\"[31\"Y3Q\"^31\"]3A\"Y2Q\"Z2Q\"Y3!\"Y3!\"S21\"W21\"X31\"W31\"W31\"X3Q\"T3!\"U2A\"X1Q\"S1A\"S1Q\"R21\"T2!\"U1A\"Q21\"Q2!\"Q11\"P11\"P1Q\"T11\"P1!\"O11\"P1A\"Q1A\"R11\"Q11\"Q1A\"Q1A\"S11\"Q11\"P1!\"O11\"Q11\"P11\"P11\"P11\"P1Q\"T1A\"R1A\"Q1!\"N1A\"R11\"Q1Q\"S1Q\"T1Q\"T11\"P2Q\"U21\"V1A\"R21\"X2A\"Q1Q\"T2!\"R21\"R21\"X1Q\"T2Q\"T3!\"Y3Q\"U31\"W31\"W31\"X3!\"X3Q\"U2Q\"[3A\"V3Q\"U41\"Z31\"^31\"W3!\"[41\"X2Q\"Z2A\"Z3!\"Y3A\"V31\"X3!\"X3Q\"\\41\"W31\"[2A\"Z31\"^2A\"Z3Q\"\\3!\"X31\"X3!\"\\3Q\"Y3!\"]3Q\"_31\"X2A\"Z31\"^3Q\"\\3A\"\\21\"W0!\"I.A\"=.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F/!\"A.Q\"?.Q\"?/A\"D/1\"B/Q\"F/1\"C.Q\"?.Q\"?.A\"=,1\".+1\"()A!['Q!Q(A!U(Q!U)!!V'1!M&Q!A%Q1D&!!E%A!C%Q1D&A!N'Q!Q'A!Q'A!Q(!!S(1!S)!!V(1!S)!!V(Q!U(A!U'A!Q(Q!U)!!V(1!S(1!S(1!S(1!S)!!V'Q!R'A!Q)1!Z,1\"-.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F1Q\"T2Q\"Z21\"V0Q\"M0Q\"M/Q\"F.Q\"?/A\"D0!\"H/!\"A0Q\"M3!\"\\2A\"Z4!\"Z3A\"]31\"X2A\"Z4!\"[3Q\"`3!\"[3Q\"[3A\"X2A\"Z3Q\"\\3Q\"]3Q\"[3!\"[3Q\"Y3Q\"\\3!\"Z3Q\"[2Q\"Z31\"W3!\"X3!\"X31\"X4A\"[41\"W3Q\"U3Q\"U3Q\"U3!\"X2A\"T31\"W2Q\"R1Q\"T2A\"Z31\"W2Q\"[2A\"Z1Q\"T1Q\"T3!\"T1Q\"T1Q\"T1Q\"T1A\"R1A\"R1Q\"T1Q\"T1Q\"T1Q\"T11\"P1Q\"T11\"P11\"Q1A\"R1!\"N1A\"R2!\"M0Q\"M1!\"N0Q\"M1!\"N1!\"N1A\"Q1!\"N1!\"N11\"P1!\"N1!\"N1!\"O1!\"O1Q\"T1!\"O1A\"R11\"Q1!\"N2A\"T2A\"U1A\"R1A\"R1!\"O1A\"R2Q\"V2A\"Q21\"X1A\"R2A\"R2A\"U21\"W2A\"X2A\"X31\"X31\"X2Q\"Z3!\"Y2Q\"Z21\"T2!\"U31\"U31\"W41\"U31\"Y31\"[3Q\"\\31\"]4!\"Y2Q\"Z31\"X31\"W31\"X3!\"X3!\"Y4!\"]3A\"V4!\"]31\"X31\"]31\"\\3A\"]3Q\"]3A\"Z41\"[4!\"U2Q\"Z31\"[4!\"Y3!\"[3!\"[3!\"\\2A\"Z3!\"S/Q\"F/!\"A/A\"D0!\"H0A\"J1!\"O1!\"O0A\"L/A\"C.Q\"?.Q\"?.1\"<.!\":.!\":.1\"=/A\"F.Q\"?.Q\"?-Q\"9,Q\"3*A!W(A!T(1!S(Q!U)!!V'Q!Q(A!T(!!P(!!P(!!S'A!Q'A!Q&A!I&!!>%Q!B&A!I&A!M'A!P(A!R)!!V)1!V(1!T)1!X)1!X)!!X(Q!V)!!W)A!]+!\"&.Q\"?.A\".1\"=.!\";,A\"5,A\"3-!\"+*A\"#*!!^)1!W(A!T)!!V)!!V)!!V(Q!U(Q!U(A!T(Q!U(Q!U)!!V*Q!X)!!Y*!!^*!!_)Q!^)Q\"\"*!\"%,!\")+1\")+Q\"),!\"-+!\"'*A\"#*A\"#,Q\"0-!\"2.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F0A\"K2!\"M2!\"O3Q\"R4!\"T3!\"X2A\"T1!\"O1Q\"T2A\"Z2A\"Z2A\"Z3A\"_3A\"_3!\"Y3!\"Y4A\"V3A\"[3!\"Y3!\"Y3!\"Y3!\"X3!\"\\4!\"Y4!\"Y2A\"Z3Q\"Y3!\"Z2A\"Z3A\"V2Q\"Y3!\"U3A\"V31\"X31\"X2Q\"Z31\"W3A\"V2A\"S3A\"V2!\"V1A\"R1A\"R1Q\"T1A\"R21\"W2A\"T21\"R2A\"S2!\"U2!\"V11\"P1A\"R1Q\"T2Q\"U1A\"S1A\"R11\"Q11\"Q1!\"O11\"P1Q\"T1!\"O1!\"O1!\"O1!\"O1A\"R11\"P1!\"O11\"Q0Q\"L1!\"N1!\"N1!\"N"; +static unsigned char +palette_data[] = { 4,2,2,4,110,178,32,4,122,4,36, +86,15,3,66,4,58,127,36,8,186,4,34,122,17,2, +34,4,19,66,12,4,162,90,2,69,88,2,48,7,20, +2,25,2,103,8,14,48,4,58,186,90,3,154,82,2, +129,55,2,34,17,2,18,17,34,191,94,2,101,57,2, +70,7,32,154,12,22,157,17,3,50,4,88,150,96,3, +186,86,2,138,87,2,86,212,214,210,4,19,98,52,2, +154,15,11,2,4,132,216,7,18,125,12,6,82,37,12, +18,4,88,189,86,14,48,128,2,157,32,4,138,4,60, +155,4,48,126,60,2,218,7,10,52,13,12,66,129,2, +50,56,2,52,52,14,98,4,47,157,6,20,87,48,2, +24,58,2,101,120,2,141,52,5,170,4,113,215,127,2, +73,4,90,210,4,52,112,36,18,194,59,2,85,42,2, +10,107,2,173,95,2,114,31,3,52,4,79,160,84,3, +189,14,10,40,30,2,69,96,2,58,113,2,126,9,37, +231,17,33,170,28,14,2,4,30,146,68,10,37,132,2, +82,23,4,7,4,10,122,4,36,108,32,2,37,7,27, +2,4,98,175,84,10,146,4,101,191,4,14,146,8,29, +86,4,2,170,8,60,230,84,10,162,72,2,39,102,2, +142,4,142,221,4,49,143,68,12,170,4,124,213,15,4, +74,114,2,69,112,2,158,32,3,23,8,50,190,111,2, +104,6,40,154,96,2,210,6,28,104,60,2,138,61,2, +25,68,2,114,58,2,125,39,2,114,73,2,69,16,4, +58,4,88,177,56,14,26,138,2,173,4,68,176,71,2, +55,76,2,210,4,78,130,17,3,42,6,27,69,112,2, +49,12,26,178,47,13,159,18,11,10,13,11,74,141,2, +58,52,18,234,4,82,186,4,126,198,4,103,213,4,62, +206,4,72,226,12,46,210,72,12,222,12,26,146,20,34, +210,4,113,197,4,131,229,4,48,170,4,76,170,7,43, +95,52,30,218,15,11,170,52,14,202,12,14,86,4,40, +174,108,14,202,156,2,186,60,12,130,5,40,129,73,13, +189,12,42,138,44,14,202,4,59,143,4,124,229,4,69, +191,4,69,157,4,60,114,4,43,110,14,14,58,20,26, +157,28,26,210,4,87,162,4,91,202,4,110,226,4,98, +226,4,101,202,17,14,186,28,18,18,60,2,234,28,10, +114,4,30,114,8,10,162,12,54,186,20,26,130,100,10, +170,40,18,154,4,22,114,28,26,234,4,22,58,4,66, +226,4,54,202,12,42,202,4,38,98,4,145,234,4,76, +146,4,94,148,4,138,213,4,94,186,4,54,126,4,54, +154,4,118,211,4,106,178,4,106,188,4,54,142,4,94, +170,4,70,202,4,118,197,4,54,173,4,82,178,72,4, +172,36,10,138,76,14,162,4,98,210,4,118,226,112,2, +114,24,19,8,30,2,85,84,6,226,141,2,73,28,30, +10,28,46,186,112,4,206,36,10,90,36,2,174,108,2, +58,41,3,130,44,10,194,9,33,130,92,2,162,51,2, +42,12,32,162,81,3,146,44,11,26,28,6,146,44,2, +178,30,12,10,60,10,178,64,2,146,28,10,178,92,10, +210,5,41,146,40,2,102,96,2,125,100,2,88,74,2, +157,142,2,159,26,10,55,143,2,50,73,2,102,134,2, +142,73,2,84,127,2,126,142,2,82,156,2,178,28,10, +158,28,26,114,84,14,202,12,4,10,5,20,74,17,2, +26,92,2,194,7,19,106}; + +static unsigned char header_data[] = { 71,99,218,218,99,11,71,218,71,71, +218,99,99,99,71,99,218,99,99,99,99,218,71,218,99,218,218,99,99,218, +218,99,99,218,99,218,99,58,218,99,99,99,58,218,99,99,99,58,99,58, +99,58,11,58,99,58,58,11,99,58,99,58,99,99,99,218,99,218,99,58, +99,71,99,218,71,12,12,12,12,12,12,12,12,12,92,19,19,19,92,92, +92,92,19,108,19,19,19,19,19,19,53,53,53,53,101,19,19,53,53,19, +19,19,12,92,92,12,12,12,71,71,218,99,218,218,71,71,12,12,218,99, +58,58,58,99,99,99,58,99,99,99,11,58,11,58,58,99,58,99,99,99, +58,99,99,99,99,58,99,99,99,99,99,218,99,99,11,99,99,99,11,99, +99,218,218,218,99,218,99,99,218,218,99,99,218,99,218,218,99,99,218,11, +218,71,99,218,99,218,218,99,71,8,218,99,218,218,99,99,99,99,99,99, +218,218,99,99,218,99,218,99,218,71,99,99,99,218,99,99,218,99,99,99, +218,218,99,99,99,99,58,99,58,30,99,99,99,99,99,99,58,99,99,58, +99,58,99,58,99,99,58,58,58,99,58,58,99,218,218,71,99,99,71,71, +71,123,12,118,71,71,12,71,123,12,12,19,19,19,53,19,19,53,53,19, +19,53,101,63,20,63,20,63,53,53,53,101,53,53,53,19,53,53,53,19, +92,12,12,12,71,12,12,12,12,12,92,71,218,218,71,218,71,71,71,71, +99,218,58,58,58,99,99,99,99,58,58,58,99,58,99,58,58,99,58,58, +99,99,58,99,99,99,99,58,99,58,30,99,99,99,218,99,58,99,99,58, +11,99,99,218,99,218,218,99,99,218,71,99,218,99,99,218,99,99,218,99, +11,218,99,218,99,11,218,99,99,8,71,71,71,99,218,71,218,99,71,218, +11,99,218,218,99,218,99,218,99,99,99,99,218,99,99,99,99,99,218,99, +99,99,99,99,99,11,99,99,99,99,99,99,58,99,58,99,58,99,58,58, +99,11,58,58,99,58,99,99,58,58,218,99,123,71,71,71,123,71,71,218, +99,99,218,71,12,12,12,12,92,19,19,53,19,53,53,53,53,19,53,53, +53,53,19,53,19,53,53,53,53,53,63,63,101,63,63,20,53,19,53,53, +53,19,92,92,12,12,12,71,71,71,71,12,12,71,71,12,12,12,12,12, +12,218,218,99,58,58,99,58,99,58,99,58,99,99,58,218,58,99,58,99, +99,99,99,11,58,99,99,58,99,99,58,58,99,99,99,99,99,99,99,99, +99,58,218,99,218,99,99,99,218,99,99,218,99,11,218,99,218,218,99,99, +218,99,218,11,99,71,99,218,71,8,99,99,218,99,99,99,218,99,99,218, +218,99,11,99,99,218,99,218,99,218,218,99,58,99,99,99,58,11,99,99, +58,99,99,58,58,58,58,99,99,99,99,218,58,99,99,99,58,58,99,99, +58,58,99,58,99,58,99,99,58,58,99,218,71,71,218,218,218,58,58,58, +218,99,71,123,12,12,12,19,19,108,108,108,92,92,92,12,71,12,12,92, +19,53,53,53,101,53,53,19,53,101,53,20,53,79,79,0,34,79,20,63, +53,53,53,19,19,19,12,12,12,71,71,71,71,71,71,123,71,12,12,12, +12,12,71,71,218,58,99,58,218,58,218,99,58,99,58,99,99,218,58,58, +58,99,58,58,99,99,58,99,58,99,99,218,58,58,99,99,99,99,99,99, +58,11,99,99,218,218,218,99,218,99,99,218,218,99,218,99,99,218,218,99, +218,99,71,218,99,218,99,99,99,8,218,218,99,218,99,218,99,218,218,99, +11,218,218,218,218,99,71,99,218,99,99,99,218,58,99,99,99,99,218,30, +58,99,58,99,58,11,58,99,58,99,58,58,58,99,58,58,99,99,58,58, +58,99,58,99,58,58,99,58,218,99,99,218,58,99,58,58,58,58,58,218, +71,12,12,71,71,12,12,12,12,71,71,118,71,71,118,71,71,12,223,19, +19,53,53,53,53,63,229,20,79,20,34,0,20,101,101,63,20,101,101,53, +108,53,53,53,53,53,101,19,92,12,12,12,12,71,71,218,218,218,71,71, +118,12,71,71,218,218,58,58,58,58,58,58,218,58,58,58,99,99,218,99, +58,58,99,99,58,99,58,99,58,58,58,99,99,99,58,99,99,99,58,58, +99,58,58,99,99,99,99,99,99,99,218,99,99,218,99,218,218,99,99,218, +99,58,99,99,218,99,218,218,218,8,99,218,99,218,99,218,11,99,218,99, +99,99,99,99,218,99,58,99,99,99,58,99,218,99,99,99,99,99,58,99, +58,218,99,99,99,58,218,58,58,58,99,99,58,99,218,58,99,99,58,218, +58,99,58,99,99,99,58,99,58,58,58,58,99,58,58,58,58,218,218,12, +71,71,71,12,12,71,71,12,71,12,71,71,71,71,12,92,19,53,53,53, +101,63,79,34,251,0,0,63,20,53,19,53,53,53,53,19,19,53,19,19, +19,108,19,19,19,19,19,19,53,53,108,12,12,12,71,71,218,58,58,58, +99,218,71,71,71,12,218,99,99,58,58,58,58,218,58,58,58,58,58,99, +99,58,58,99,58,218,58,99,99,99,99,58,99,128,99,58,99,99,11,99, +99,58,11,58,99,99,99,218,58,11,99,58,99,218,99,99,218,99,99,99, +218,71,99,99,218,99,11,99,218,8,218,99,218,99,218,99,99,218,99,218, +58,218,58,218,99,99,218,99,58,99,99,99,99,78,11,58,99,58,99,99, +99,58,58,99,58,11,58,58,218,99,99,58,58,58,99,58,58,58,99,99, +58,58,58,58,58,58,99,58,99,99,99,58,58,58,58,58,218,71,118,12, +71,71,71,71,71,12,71,71,71,71,71,12,92,19,19,53,53,63,20,251, +0,79,79,0,79,34,34,79,0,63,229,20,63,101,53,101,19,53,19,92, +12,71,12,92,12,12,12,12,12,92,19,92,92,71,12,118,71,218,99,58, +58,58,58,58,218,123,71,218,58,58,58,99,58,58,58,218,58,218,58,58, +218,58,99,58,58,58,99,99,58,99,58,99,218,99,99,99,58,58,58,11, +58,58,99,58,99,99,30,99,99,99,58,218,218,30,99,218,99,99,99,218, +99,99,218,218,99,99,218,71,99,8,99,99,71,99,218,218,99,218,99,218, +99,218,99,58,11,58,99,99,11,58,99,58,99,99,99,99,58,58,99,99, +58,99,99,99,99,58,99,78,58,58,99,99,218,78,58,218,58,99,212,58, +99,58,58,58,218,58,58,58,58,58,58,58,58,58,218,71,12,12,71,71, +123,218,218,58,99,71,123,71,71,12,19,19,19,53,53,19,19,53,63,53, +101,101,101,63,101,101,20,20,79,0,0,79,79,34,251,79,79,251,101,53, +19,92,12,71,71,71,218,12,218,12,71,71,71,71,71,12,71,71,123,71, +58,58,58,58,58,58,58,99,99,58,58,58,99,58,58,58,99,58,99,58, +99,58,58,99,58,58,58,58,99,58,99,58,99,58,99,58,99,99,58,58, +99,99,99,58,99,58,58,58,99,99,99,30,128,58,99,99,99,99,99,58, +218,99,99,218,218,99,99,218,71,8,71,218,99,99,99,99,218,99,99,99, +99,30,58,11,58,58,99,58,58,58,58,30,58,58,99,99,99,58,99,58, +99,58,99,58,58,58,218,99,58,99,58,58,58,218,99,58,58,58,58,58, +58,99,99,99,58,99,99,58,58,212,99,58,58,218,71,71,218,218,99,58, +58,58,58,218,123,71,71,12,108,19,19,108,19,19,223,92,19,92,12,12, +19,19,19,19,53,53,63,63,229,0,34,34,79,0,79,0,75,34,0,34, +79,20,53,19,92,12,71,71,71,218,71,123,71,123,71,71,71,71,71,71, +71,218,58,58,58,58,58,58,58,99,58,58,58,58,58,58,58,58,99,58, +58,99,99,58,99,58,58,58,58,58,58,99,58,99,58,99,58,58,99,99, +58,58,99,99,58,58,218,58,58,99,58,99,11,58,58,99,58,218,99,99, +99,99,218,99,99,218,99,99,99,8,99,218,99,218,99,99,99,99,58,58, +11,58,99,58,58,30,58,11,58,11,58,99,99,58,99,58,58,58,99,58, +58,99,58,99,99,58,58,99,58,99,58,99,58,99,212,58,58,58,58,58, +58,58,58,58,58,58,58,58,58,58,212,58,218,218,218,99,58,58,58,58, +58,99,71,71,71,12,71,71,12,12,12,71,71,123,71,218,71,71,71,92, +19,108,63,79,229,126,0,79,0,0,34,34,34,126,34,251,79,0,126,34, +79,0,79,20,63,19,19,12,71,71,71,218,71,99,71,71,71,71,71,71, +71,71,218,58,58,58,212,58,58,58,58,58,58,58,58,58,58,58,58,58, +58,58,99,58,58,99,58,58,99,99,128,218,58,58,99,58,99,58,58,99, +218,58,58,218,99,99,99,99,99,99,58,99,99,58,30,218,99,99,99,99, +99,99,218,99,99,99,218,218,99,8,218,99,99,99,58,99,99,99,99,99, +58,58,218,99,99,99,58,99,58,58,58,99,58,99,58,99,99,99,58,58, +99,99,58,58,58,58,58,58,99,99,58,99,99,58,58,58,58,99,58,58, +99,58,99,58,78,212,99,212,99,58,58,99,58,58,78,78,246,99,212,58, +99,71,123,71,71,71,71,71,218,218,71,123,218,218,218,118,12,19,63,63, +0,0,0,34,34,0,34,79,79,79,0,34,79,79,20,101,53,101,53,19, +53,53,101,101,53,53,19,19,19,92,218,218,218,218,218,212,78,58,218,218, +71,71,71,11,58,246,58,78,246,58,58,58,99,99,58,58,99,58,212,58, +99,58,99,58,58,99,58,58,58,58,58,212,218,58,58,99,58,58,99,58, +99,99,99,58,58,99,99,99,58,99,58,58,99,99,99,58,58,99,99,99, +99,99,99,11,58,99,99,99,218,8,99,99,218,99,99,218,99,218,58,58, +11,78,58,99,58,99,58,99,58,11,58,99,58,99,58,58,58,99,99,58, +99,99,99,58,58,58,58,58,58,58,58,58,58,58,58,212,99,58,212,99, +58,58,78,58,78,58,58,58,58,58,58,58,58,58,246,58,246,58,58,71, +218,71,71,71,218,71,71,71,71,218,218,71,71,92,92,53,63,126,79,0, +0,79,0,79,34,79,0,126,79,79,79,79,79,229,229,101,53,108,92,71, +71,71,71,71,71,12,12,19,108,19,92,71,71,71,71,218,212,246,78,58, +58,218,218,71,71,58,58,212,212,78,212,78,78,58,58,58,58,58,99,58, +78,58,58,99,58,58,58,58,58,58,58,58,99,58,99,58,58,212,99,58, +58,99,58,99,58,99,99,58,58,99,99,58,58,58,58,11,78,99,99,99, +99,58,99,58,71,99,99,99,99,8,99,99,99,218,99,58,99,30,58,11, +58,11,58,58,99,58,58,99,58,99,58,99,99,58,99,58,99,58,58,99, +58,58,58,58,58,78,58,99,58,99,58,58,58,58,99,58,212,99,58,58, +58,78,78,78,58,58,58,58,58,212,58,78,58,78,78,78,58,99,218,218, +71,218,218,71,58,99,58,99,71,71,71,12,19,20,79,251,0,251,79,251, +79,63,126,79,79,79,79,229,79,79,79,126,126,79,79,63,20,53,53,92, +12,12,218,71,71,218,218,218,71,218,71,71,71,218,71,218,218,58,246,246, +78,212,78,58,218,218,58,58,58,246,78,212,78,212,58,58,58,58,58,212, +78,78,78,58,58,99,58,58,58,58,58,58,58,58,58,218,99,99,58,99, +58,58,218,99,58,58,99,58,99,99,58,99,99,99,58,99,99,58,58,58, +218,99,11,58,99,99,99,218,99,8,99,30,218,58,11,99,99,58,99,58, +99,58,58,99,218,99,218,58,99,99,58,58,58,58,99,58,99,99,58,99, +58,58,58,78,78,58,58,58,58,58,99,246,78,78,58,58,58,58,58,78, +78,212,78,246,246,58,58,58,212,58,212,246,78,246,58,212,218,218,218,218, +218,58,246,58,246,58,218,218,123,12,19,19,53,53,101,53,63,101,63,63, +63,63,63,63,63,101,63,53,63,53,53,53,53,108,19,19,19,19,108,19, +92,92,12,12,71,71,218,99,99,218,218,218,218,218,71,71,71,218,218,246, +78,78,246,78,78,78,58,58,58,78,78,78,78,246,58,58,58,58,58,78, +212,78,78,58,58,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58, +58,99,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,99,99,99, +58,99,58,99,99,58,99,99,99,8,99,99,30,58,58,58,58,58,58,99, +58,11,99,58,99,58,58,58,58,58,58,99,58,58,58,58,58,58,99,58, +99,58,78,58,58,58,99,58,58,78,246,78,58,78,58,58,58,58,78,212, +246,78,246,78,78,99,212,246,78,246,58,246,246,78,246,218,218,218,58,58, +246,78,78,246,58,218,218,71,12,12,108,92,108,19,108,53,63,63,63,53, +53,53,19,223,92,92,49,118,118,118,118,118,118,118,71,118,118,12,12,12, +92,71,71,123,218,99,11,58,58,58,58,78,58,99,99,123,71,218,218,218, +246,246,78,212,78,212,78,246,78,78,58,78,246,78,246,78,58,58,58,58, +99,78,246,78,246,99,58,58,58,58,58,78,78,78,78,99,58,99,58,99, +78,58,58,99,58,218,218,58,58,99,58,58,58,218,99,58,58,58,58,11, +58,99,99,99,58,99,99,218,58,8,99,99,58,99,58,11,58,11,58,58, +99,58,99,58,99,58,99,58,58,218,58,58,58,99,58,99,58,58,58,99, +78,58,58,58,99,58,58,78,78,58,246,78,246,99,58,58,58,212,78,78, +246,58,246,58,78,78,78,58,246,78,78,58,246,58,58,58,212,58,246,78, +212,246,58,58,71,71,71,71,12,92,92,92,108,53,53,53,19,19,223,223, +49,223,92,49,49,223,92,49,118,118,118,71,118,112,118,11,11,112,71,112, +71,71,11,11,11,99,99,58,58,78,78,78,246,78,246,58,99,71,218,71, +218,78,78,246,78,246,58,246,78,246,212,58,246,58,246,78,212,78,246,58, +58,58,78,246,246,78,78,99,58,58,58,212,78,58,78,58,58,58,58,58, +78,58,78,99,58,58,99,58,58,58,58,99,58,58,99,218,58,99,58,58, +58,58,99,58,99,99,58,99,99,8,99,99,58,58,58,99,58,99,99,58, +99,58,58,58,58,58,58,218,99,58,99,58,58,58,58,58,99,58,58,78, +58,78,78,78,78,58,78,58,78,78,78,212,78,58,78,58,78,212,78,246, +78,246,78,78,212,246,246,78,246,212,246,246,78,246,58,246,78,246,58,246, +246,58,99,218,218,218,71,12,92,19,19,19,19,19,223,223,49,223,49,118, +49,112,30,30,237,103,208,208,245,208,245,208,245,245,245,103,208,103,22,237, +30,30,11,11,11,11,71,71,11,99,58,78,78,246,58,246,246,246,58,99, +99,218,212,78,246,78,246,78,246,58,78,58,246,78,58,246,78,212,78,246, +58,212,58,78,78,212,78,78,58,58,99,78,78,78,78,78,58,58,99,58, +58,78,78,78,58,58,99,58,99,58,58,99,58,218,58,58,99,58,58,218, +99,58,99,99,58,99,30,99,99,8,58,99,58,99,58,58,58,99,58,99, +58,218,218,58,99,58,99,58,58,58,78,99,78,58,99,58,58,78,58,78, +78,58,78,78,58,78,78,246,246,212,78,78,78,58,78,246,78,246,58,246, +212,78,58,78,78,58,246,78,78,78,58,246,78,246,78,58,246,78,78,78, +58,218,99,11,71,12,92,92,92,223,223,223,223,223,49,118,112,22,237,208, +72,245,55,243,245,72,72,72,65,208,236,208,208,245,72,55,243,55,55,243, +245,245,245,103,237,237,30,11,11,112,71,11,99,58,78,246,246,246,246,78, +58,218,58,58,246,78,212,78,246,78,246,78,212,78,78,212,78,246,78,78, +58,78,78,78,78,78,246,246,246,58,58,78,58,246,78,212,78,78,99,58, +58,78,58,58,58,58,58,99,58,58,58,58,78,58,58,99,99,58,58,58, +99,218,58,99,99,99,58,99,58,8,99,99,99,58,11,58,58,58,99,58, +58,58,58,58,58,58,58,99,99,78,78,58,58,78,58,58,99,78,78,78, +78,78,78,78,78,78,212,246,246,246,246,78,78,246,246,58,246,78,246,78, +78,78,212,246,246,246,78,78,212,246,246,246,58,246,246,78,246,246,78,58, +218,99,71,12,12,92,92,82,223,49,223,118,112,22,208,72,72,208,65,22, +22,112,11,112,112,112,112,112,118,118,118,112,112,112,30,244,244,30,237,65, +236,72,55,55,243,243,208,208,237,237,11,71,11,11,71,11,99,58,246,246, +246,78,78,246,58,246,78,246,58,246,58,246,58,246,246,78,78,78,212,78, +212,246,212,78,246,246,58,78,78,246,99,246,246,58,246,58,78,78,78,58, +78,78,78,78,78,78,58,58,58,99,58,58,78,99,58,58,58,218,99,99, +58,58,99,58,99,58,58,99,99,8,58,58,99,58,99,218,99,58,99,99, +99,58,99,58,99,58,58,58,58,78,58,58,58,58,58,58,58,78,212,78, +78,58,246,78,58,246,246,246,246,246,246,246,78,58,246,78,246,58,246,58, +246,78,78,78,58,246,212,78,78,78,58,246,78,212,246,58,78,212,58,99, +218,71,12,92,19,223,49,49,118,62,30,22,208,208,103,30,244,112,244,118, +112,23,49,49,49,49,49,49,49,49,82,82,223,82,49,118,23,118,118,112, +11,30,237,22,65,245,55,243,245,245,103,237,237,11,71,11,71,71,218,58, +246,246,78,246,78,212,78,246,246,78,246,246,78,78,212,78,212,78,246,78, +78,58,246,78,58,246,78,212,78,246,78,78,78,78,78,212,246,246,246,78, +58,78,78,78,58,78,78,58,58,58,58,58,99,58,58,58,58,58,99,58, +58,58,58,58,58,99,99,58,58,8,99,99,58,58,58,99,99,99,99,58, +58,99,78,58,78,99,58,58,99,78,78,78,58,78,58,58,78,246,78,212, +78,78,58,78,246,246,246,246,246,246,58,78,78,246,58,246,78,246,78,246, +78,212,78,212,212,246,78,78,246,246,78,212,58,99,212,246,246,58,99,218, +118,12,92,223,223,49,49,11,237,208,208,103,244,23,118,112,118,112,49,49, +19,82,82,82,223,49,66,49,49,82,223,223,101,19,223,82,223,82,223,82, +82,49,23,112,11,244,30,65,72,55,55,245,208,22,237,112,11,118,71,218, +218,58,58,78,246,78,212,78,78,212,99,78,212,246,78,246,78,246,78,212, +246,246,78,246,246,78,246,78,246,58,246,78,58,78,246,246,246,246,212,246, +78,78,78,78,78,58,78,78,99,58,78,78,78,99,58,58,99,58,99,99, +58,99,99,99,99,58,99,58,99,8,99,99,99,58,58,99,58,58,99,58, +58,58,78,78,58,58,58,58,58,58,78,78,78,78,78,58,246,246,246,246, +246,78,78,212,246,246,246,246,246,246,78,212,78,246,78,212,78,246,58,246, +78,246,78,58,58,212,246,58,78,246,246,58,58,58,58,246,58,218,71,12, +223,223,49,49,49,30,65,72,72,30,112,118,118,112,118,49,223,223,223,49, +244,244,244,244,23,23,23,23,70,66,49,70,49,70,70,118,23,23,23,23, +49,223,19,82,223,223,23,11,244,237,208,72,55,55,208,103,30,11,11,49, +71,71,99,58,246,78,246,246,58,246,58,58,246,212,78,246,58,246,78,58, +58,212,78,78,212,78,212,78,78,78,212,78,78,78,246,212,246,246,246,212, +246,58,78,78,78,78,58,78,78,99,58,58,78,58,58,58,99,58,58,58, +58,58,58,58,99,58,99,58,99,8,99,58,58,218,58,58,58,99,58,58, +58,99,58,58,99,58,78,78,78,78,78,78,78,58,246,246,246,212,246,246, +212,246,78,246,246,246,246,246,212,246,246,78,246,58,212,246,78,78,78,246, +58,246,212,99,58,246,78,246,246,58,58,58,58,78,246,58,99,118,12,92, +223,223,223,11,22,72,208,244,49,112,112,118,49,82,223,49,244,244,242,62, +23,62,23,23,244,244,244,244,244,244,62,30,244,244,244,244,23,112,210,23, +62,244,244,23,223,82,53,82,49,112,30,30,65,72,55,245,208,237,30,112, +71,49,118,71,99,78,78,78,246,246,58,99,58,246,212,78,246,58,246,212, +99,58,212,246,78,246,78,246,212,246,78,246,246,212,246,246,246,212,246,246, +246,246,78,78,246,246,78,78,78,78,58,58,78,58,58,58,58,58,99,99, +99,78,99,58,99,99,58,99,58,8,58,99,58,99,99,58,58,99,58,58, +58,58,58,58,78,58,78,78,58,78,58,246,78,78,78,212,246,246,212,246, +246,246,246,246,246,246,246,246,246,246,246,58,246,58,99,212,246,212,78,78, +78,99,58,58,78,246,58,78,246,58,58,58,58,212,58,218,71,12,49,49, +49,112,22,72,65,112,49,112,112,112,223,19,118,62,244,62,62,23,23,244, +244,244,244,112,23,49,49,223,19,223,82,223,223,49,223,23,118,112,244,30, +62,62,62,62,23,62,23,223,82,8,82,71,30,244,22,72,55,245,103,237, +11,71,12,12,71,99,78,78,78,58,212,58,58,58,58,212,78,58,246,78, +58,58,58,212,78,246,58,78,78,212,212,246,246,246,212,246,246,246,246,246, +246,246,58,78,78,58,246,212,78,78,58,78,58,78,78,78,58,78,58,58, +218,58,58,99,58,99,99,99,58,8,218,99,58,58,58,99,58,58,99,78, +78,58,99,58,58,78,58,78,246,78,78,58,78,212,246,246,246,246,246,246, +246,246,246,212,246,212,246,246,246,212,78,246,58,58,58,246,78,78,212,246, +58,58,58,58,212,78,246,212,58,58,58,58,58,58,71,12,49,223,223,49, +30,208,72,30,49,49,112,49,223,223,23,22,244,62,23,23,62,22,112,118, +49,49,223,118,23,244,30,242,22,242,242,62,242,244,244,112,23,49,49,223, +23,112,30,244,62,112,210,23,23,49,82,8,223,244,237,30,208,55,243,245, +22,30,71,118,12,71,99,78,78,246,212,58,58,58,58,246,246,246,78,246, +58,58,58,78,212,78,246,246,246,58,58,212,246,246,246,246,246,246,246,246, +246,78,246,58,246,246,246,78,212,78,78,78,58,78,58,78,58,58,99,58, +58,58,99,58,58,58,58,58,58,8,58,99,58,58,58,58,99,58,78,78, +58,58,78,58,58,78,78,58,78,78,78,78,78,246,212,246,246,246,246,246, +246,246,246,246,246,246,212,246,246,246,78,58,58,58,58,246,78,78,246,99, +212,58,212,58,212,78,78,58,58,218,58,212,58,99,71,49,223,49,49,30, +55,72,112,49,244,11,49,82,112,242,242,62,23,62,244,112,118,223,82,118, +30,236,29,225,231,33,248,42,42,42,219,2,42,219,110,107,231,29,65,244, +112,223,223,49,112,30,30,23,23,23,23,49,82,101,49,30,30,242,72,243, +208,103,30,71,118,12,71,99,78,78,78,58,58,58,58,58,78,58,246,78, +58,58,99,58,246,58,246,58,246,58,99,58,212,246,246,212,246,246,246,246, +246,246,246,246,212,246,246,246,246,78,58,78,78,78,78,78,58,78,78,78, +58,78,99,99,99,58,58,99,99,8,99,58,99,99,58,58,58,58,78,78, +78,78,58,58,58,78,78,78,78,78,246,246,58,246,246,246,246,246,246,246, +246,246,212,246,99,58,246,246,246,246,212,58,58,58,99,212,78,212,212,58, +78,58,58,58,246,246,78,58,71,218,58,58,11,71,118,223,49,23,103,243, +22,49,118,30,118,82,49,30,242,62,70,62,244,118,223,82,112,65,93,205, +217,42,80,147,98,4,26,8,8,8,8,121,8,8,26,4,98,210,111,219, +29,29,65,112,223,82,23,30,244,62,62,62,62,49,82,82,112,30,30,65, +243,245,103,30,71,118,12,71,218,212,246,58,58,212,212,58,58,246,212,78, +58,58,212,58,58,246,78,246,58,58,58,58,246,212,246,246,246,246,246,246, +246,212,246,246,246,246,212,246,246,212,78,246,212,78,58,78,78,78,58,78, +78,78,58,58,58,58,99,58,58,8,58,58,58,58,58,58,58,58,237,78, +58,78,78,58,78,78,212,78,246,78,78,246,246,246,246,246,246,246,246,246, +246,246,246,58,58,58,246,246,246,246,58,58,99,58,58,246,246,78,99,78, +246,78,58,58,58,58,58,218,12,99,58,99,71,92,49,223,118,22,41,65, +223,23,30,118,19,23,22,242,23,23,30,112,223,19,112,29,222,232,87,80, +98,26,121,8,20,253,20,20,20,20,101,20,20,20,253,253,20,8,121,26, +4,14,2,231,29,30,49,82,112,30,244,62,23,210,118,82,101,223,30,244, +65,55,243,103,237,71,118,71,71,99,58,58,58,58,218,58,58,58,246,212, +58,58,212,78,99,58,246,246,78,58,58,58,58,246,246,246,246,246,246,246, +246,246,246,212,246,246,246,246,246,246,246,78,78,78,78,78,58,78,58,78, +78,58,58,58,78,99,58,58,99,8,99,58,58,99,99,58,58,58,58,237, +78,78,58,78,78,246,78,246,78,246,78,246,246,246,246,246,246,246,246,246, +246,246,58,58,58,58,246,246,246,58,99,78,246,212,99,246,212,58,78,246, +58,246,58,58,58,212,218,12,118,58,58,71,12,49,19,49,237,41,65,49, +118,112,223,82,244,236,62,66,62,30,82,8,112,93,68,6,137,88,162,253, +253,20,253,19,223,23,244,244,54,242,54,242,244,62,112,49,223,20,20,20, +20,253,26,98,14,33,29,244,82,101,112,22,62,62,62,23,49,53,82,30, +112,22,243,243,208,11,71,118,12,218,99,58,58,58,12,71,58,58,58,58, +99,58,58,246,246,58,58,246,246,58,58,58,99,58,246,246,246,246,78,58, +246,212,246,246,246,246,246,212,246,246,78,78,78,78,58,78,78,78,78,58, +78,58,78,237,78,58,99,99,78,8,58,99,58,58,78,78,78,78,78,78, +58,78,78,58,78,246,78,212,246,246,246,246,246,246,246,246,246,103,246,246, +246,246,58,58,58,99,212,246,246,58,212,78,246,58,58,58,58,58,212,78, +78,78,58,58,58,58,123,49,218,99,11,118,223,223,82,237,41,208,23,118, +237,223,82,244,18,210,23,23,112,19,223,103,64,6,148,147,26,253,20,8, +66,23,54,111,219,219,137,24,76,24,163,25,137,42,204,42,151,109,244,223, +20,20,20,20,8,4,111,231,236,23,82,12,237,62,62,23,62,223,253,223, +237,244,22,41,245,103,11,112,118,71,218,58,58,99,92,92,128,58,58,58, +58,58,58,212,78,58,58,212,58,58,58,78,78,58,212,246,246,246,58,58, +212,246,212,246,246,246,246,246,246,212,246,78,246,246,78,78,78,78,78,58, +78,58,58,78,99,58,58,58,99,8,99,58,58,58,58,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,246,246,246,246,103,246,246,246,246,246, +246,78,58,58,58,58,58,212,58,58,78,212,78,78,99,58,58,212,78,246, +212,212,58,58,58,218,92,12,218,99,71,12,223,82,118,243,55,23,223,30, +223,19,244,93,54,49,23,112,82,82,245,153,138,234,162,8,253,101,49,30, +111,125,24,201,142,16,159,142,43,95,197,156,193,193,51,141,224,25,248,231, +65,118,20,20,20,20,121,210,231,55,244,82,49,30,244,62,62,244,223,20, +118,237,112,208,243,245,237,71,118,49,71,58,58,218,92,92,12,58,58,99, +58,58,212,78,212,212,58,58,58,58,58,212,78,58,58,246,246,246,99,58, +99,246,246,246,246,246,246,246,246,246,212,246,58,78,78,78,78,78,58,78, +78,58,78,78,58,78,58,99,58,8,99,99,58,58,58,78,78,58,78,58, +78,78,78,246,78,78,78,246,246,246,246,246,246,246,246,103,246,246,246,246, +246,58,58,58,58,58,58,58,58,58,78,78,246,78,58,58,58,212,78,58, +58,78,58,58,58,12,92,12,99,218,118,19,82,223,22,116,237,49,112,112, +101,112,93,109,70,112,118,82,223,55,136,185,44,26,253,253,82,62,107,163, +117,16,114,159,161,106,98,46,26,26,26,26,26,4,32,81,44,142,43,234, +10,56,236,23,20,20,20,8,4,219,225,237,19,82,11,244,62,54,62,223, +20,112,30,244,72,239,103,237,71,12,12,71,58,71,92,92,12,128,58,58, +58,58,246,78,246,58,58,58,99,58,58,246,78,78,58,246,246,58,58,58, +58,212,246,212,246,246,246,246,246,246,78,78,246,58,246,58,78,246,78,58, +78,58,78,78,58,58,58,58,58,8,58,58,58,58,78,237,58,78,78,78, +78,78,78,58,246,246,212,246,246,246,246,246,246,246,246,246,246,246,246,246, +78,58,58,58,58,58,99,58,58,246,246,246,58,246,58,58,58,78,246,218, +11,58,58,58,58,12,92,71,218,11,49,223,101,23,239,93,23,118,244,223, +223,65,29,70,70,112,82,82,72,233,135,152,121,253,20,49,242,179,176,39, +198,156,32,47,26,26,69,113,26,47,9,47,162,113,26,121,113,252,152,159, +43,234,217,238,30,253,20,251,8,4,107,17,30,82,223,22,62,62,54,244, +82,19,237,112,244,41,245,30,112,71,92,71,99,71,12,92,92,71,78,58, +58,246,246,58,78,212,58,58,58,58,58,78,246,58,99,58,212,58,58,58, +58,78,246,246,246,246,246,246,246,246,246,246,78,78,78,78,246,58,78,78, +58,58,58,99,58,99,58,58,58,8,58,99,99,58,58,78,78,58,78,58, +78,58,78,78,78,78,78,246,246,246,246,246,246,246,246,246,78,246,246,246, +58,58,78,58,78,58,58,99,58,78,58,246,246,58,58,58,212,58,58,12, +71,58,58,58,99,92,92,71,218,71,223,8,19,22,150,30,49,11,23,101, +30,93,54,49,112,49,20,30,254,181,95,26,253,253,49,65,163,166,206,202, +52,26,8,121,4,161,43,114,139,131,57,200,195,188,192,88,26,26,121,98, +197,67,234,145,230,22,82,20,20,8,98,107,100,112,253,112,103,244,54,62, +49,20,49,237,118,208,243,103,11,11,12,92,92,92,92,12,49,12,58,58, +78,58,246,78,246,78,212,99,58,58,78,246,58,78,58,58,58,99,58,58, +58,99,246,246,246,246,246,246,246,246,246,246,246,78,246,78,246,78,58,78, +78,58,78,78,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,78,78,78,78,246,246,246,246,246,246,246,246,246,246,246,58,212,58,246, +99,212,58,99,78,99,58,58,78,246,58,58,58,78,78,58,78,78,99,71, +12,71,58,58,12,12,12,71,11,12,223,101,49,243,100,118,223,112,82,19, +93,225,113,23,244,101,223,41,129,199,52,253,20,223,242,124,39,57,117,122, +121,121,47,44,195,35,94,196,165,189,189,189,27,84,200,139,67,186,26,121, +240,106,159,234,175,68,242,20,20,20,8,210,238,93,223,19,237,244,23,54, +62,19,101,244,112,30,243,208,237,11,12,92,49,223,12,12,92,12,58,78, +246,78,58,246,78,212,78,78,58,58,212,58,58,58,78,99,58,58,99,58, +58,58,246,246,246,246,246,246,246,246,246,246,78,246,58,78,58,78,78,78, +78,78,237,78,58,58,58,58,58,8,99,58,99,58,78,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,103,246,246,246,246,218,58,58,78,78, +58,99,71,12,58,78,58,78,58,78,123,12,78,78,58,212,78,78,123,92, +12,12,99,99,12,92,92,71,11,118,82,101,112,116,236,82,112,112,82,118, +100,110,66,23,49,101,244,215,73,43,69,253,101,23,219,59,97,202,52,8, +8,4,120,97,187,139,27,143,46,113,26,26,46,88,60,27,131,200,192,47, +82,66,81,159,234,170,68,118,20,251,20,26,2,64,244,101,118,22,23,62, +62,49,20,118,244,23,208,245,30,11,71,12,92,12,12,49,12,12,71,58, +246,246,78,246,78,246,58,78,58,78,212,218,12,246,78,99,58,78,78,11, +12,58,58,246,246,103,246,246,58,246,246,246,246,78,246,78,78,78,58,78, +78,58,58,58,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,212,78,246,246,78,99,58,246,246,246,246,246,246,71,12,99,58,58,99, +58,58,53,251,71,78,78,78,78,246,19,19,71,246,246,78,212,246,12,92, +12,12,12,12,92,12,12,71,218,118,19,101,244,239,65,223,244,11,53,112, +222,235,66,112,223,20,72,45,90,221,8,253,19,242,214,97,57,152,26,8, +26,188,57,187,139,186,8,8,8,8,121,121,8,8,26,4,44,131,94,67, +162,82,113,44,159,76,220,29,82,0,20,8,98,238,245,82,82,237,23,62, +54,112,20,223,237,49,22,245,237,11,71,49,12,92,12,12,12,12,71,78, +246,58,246,58,246,78,246,58,246,212,58,19,101,218,78,78,99,58,58,53, +101,71,58,246,246,246,78,71,92,58,246,246,212,246,78,58,58,78,78,58, +78,78,78,78,58,58,58,58,58,8,99,99,58,99,58,78,78,58,99,58, +78,78,58,246,78,58,71,92,218,246,246,246,103,246,12,92,92,58,58,58, +58,218,63,53,19,246,246,78,78,212,53,92,92,212,246,78,78,58,92,218, +12,12,92,92,92,12,12,71,11,118,101,101,22,116,242,223,237,11,8,30, +17,62,70,112,8,53,72,172,134,143,8,20,223,109,102,57,97,81,121,82, +252,114,35,157,165,26,253,8,8,46,182,4,26,26,8,8,113,160,190,35, +186,66,121,106,117,152,232,68,49,79,20,8,26,42,17,223,53,22,112,244, +54,244,8,82,30,118,30,245,30,11,99,12,12,92,123,12,12,12,71,78, +246,78,246,78,58,246,246,58,246,58,12,53,53,12,78,78,78,99,12,63, +63,92,78,78,246,246,78,229,229,12,246,246,246,212,78,71,71,58,78,78, +58,78,78,58,58,58,212,58,58,8,99,58,58,58,58,78,78,58,99,218, +99,58,246,78,78,58,12,92,12,78,246,246,246,218,92,92,19,71,58,58, +58,12,38,92,53,71,246,58,246,218,108,92,92,218,246,212,78,58,12,218, +12,12,12,92,12,92,12,71,71,118,82,8,103,116,242,82,244,11,82,30, +222,210,223,23,8,101,55,172,183,186,8,253,223,110,102,157,97,161,8,8, +127,67,190,140,189,26,8,8,69,127,120,5,52,26,26,8,121,9,84,187, +43,113,82,98,142,152,89,119,244,20,0,253,121,219,64,23,101,30,30,23, +54,244,82,101,30,112,112,72,237,71,30,12,12,92,118,12,12,12,71,58, +246,246,58,246,58,212,78,246,58,246,108,63,53,19,78,78,78,58,53,101, +53,108,78,246,246,246,108,79,20,53,246,246,246,78,99,92,92,12,99,78, +78,58,58,218,218,218,99,58,58,8,99,99,58,58,58,99,99,218,71,11, +99,99,78,246,212,71,218,71,92,71,246,246,246,71,92,92,19,19,58,58, +58,92,53,92,92,108,58,246,246,71,92,92,92,92,212,246,246,58,123,48, +12,12,12,92,92,12,12,12,99,118,19,101,237,116,65,49,30,112,82,244, +222,235,26,118,82,101,65,136,183,7,8,8,82,242,21,157,57,192,69,8, +26,7,191,157,190,60,9,8,26,52,84,131,60,4,121,8,26,113,67,94, +142,113,82,98,43,152,10,119,244,251,0,253,121,111,64,23,101,244,22,49, +62,62,82,101,112,23,112,103,30,71,11,12,12,118,12,12,118,12,71,78, +78,246,78,58,218,58,78,246,246,12,53,101,53,19,58,78,58,12,63,63, +53,63,218,246,246,71,79,20,63,101,218,246,246,218,12,19,108,12,99,58, +99,71,218,71,71,218,71,218,71,8,99,58,99,99,58,58,11,218,71,218, +71,71,218,58,58,99,218,99,71,92,218,78,246,92,92,12,223,53,71,58, +58,19,19,92,92,19,12,78,78,12,92,92,92,92,71,78,78,218,123,241, +48,12,12,92,49,12,118,12,71,49,223,101,11,116,65,66,112,11,82,112, +100,54,66,66,223,20,244,105,90,159,8,8,8,244,10,167,187,202,98,8, +121,47,192,169,190,35,195,188,188,195,57,84,106,47,8,8,8,122,195,140, +95,66,82,98,142,221,175,119,244,251,251,20,8,219,64,112,101,30,242,118, +23,62,19,20,11,118,112,22,11,11,99,12,12,12,12,71,12,118,71,58, +246,58,246,99,12,99,212,78,58,19,53,53,101,53,58,78,218,53,101,53, +53,63,218,246,246,63,0,101,19,53,12,78,58,12,108,92,19,108,92,71, +71,12,71,71,123,71,71,123,71,8,99,99,58,58,58,11,58,11,99,218, +99,11,99,99,218,99,218,99,71,12,12,99,99,92,92,92,12,19,53,71, +99,38,53,12,12,92,19,218,212,92,92,92,48,12,108,128,246,218,123,48, +128,123,12,12,12,12,12,118,71,71,223,8,112,41,55,49,49,244,223,49, +93,231,70,82,223,20,82,116,181,158,252,8,20,223,242,214,57,157,156,46, +8,66,26,147,44,198,86,196,86,198,44,52,4,8,8,8,46,60,97,194, +52,82,82,180,159,177,232,64,66,79,20,8,26,231,100,49,8,237,62,23, +62,244,82,82,30,223,11,237,112,11,11,12,12,71,12,12,118,12,71,218, +246,78,58,218,92,99,246,212,92,53,79,79,53,53,218,58,19,63,38,126, +53,101,92,58,19,251,63,223,19,19,92,71,12,223,92,223,223,92,19,92, +12,71,123,71,71,71,71,71,71,8,11,58,11,58,99,58,99,58,99,58, +58,218,218,218,99,218,11,99,99,71,92,92,12,49,92,71,99,12,53,53, +92,20,53,123,48,12,92,19,218,19,92,12,241,48,92,92,58,218,92,241, +128,212,71,12,118,12,12,71,71,112,223,19,82,55,116,112,49,244,223,19, +208,238,235,66,223,253,82,22,250,73,95,113,8,82,49,111,102,207,132,188, +252,69,8,121,162,4,47,52,127,4,4,26,26,8,8,46,186,86,169,95, +66,8,4,95,192,87,45,236,101,251,253,8,70,222,236,223,223,237,244,23, +54,244,82,82,237,118,11,244,71,11,99,71,118,12,12,12,12,12,12,58, +78,78,246,123,108,12,212,12,53,63,13,83,63,53,12,92,53,226,13,13, +53,53,53,226,75,63,12,71,92,19,19,92,92,92,19,12,12,12,92,12, +71,71,71,71,71,12,71,71,71,8,99,99,58,99,99,58,58,99,58,58, +11,218,71,71,11,218,99,99,58,218,12,19,92,92,92,99,78,58,92,101, +75,251,53,12,123,48,92,108,101,63,92,12,241,241,92,92,108,92,108,128, +212,246,58,12,12,12,49,12,12,118,12,49,19,237,116,22,49,118,244,82, +112,17,231,70,223,82,20,82,93,45,133,7,46,8,8,49,50,224,168,207, +142,60,127,46,8,26,8,8,8,8,8,8,121,26,47,192,166,169,7,113, +66,113,7,156,36,217,28,23,251,251,20,26,111,222,30,8,49,22,112,62, +242,112,101,112,30,49,244,11,112,11,99,71,12,12,118,12,12,12,71,246, +246,78,212,92,108,92,218,53,38,13,0,0,63,101,20,63,101,75,83,83, +63,101,229,79,126,92,58,78,12,19,92,92,19,92,12,71,71,118,71,71, +218,12,71,71,71,71,71,218,99,8,218,99,218,58,58,218,99,99,58,99, +58,58,99,99,218,99,218,99,58,58,99,92,92,92,19,58,78,78,99,108, +0,34,38,123,123,48,123,92,53,108,92,12,241,241,241,123,92,19,19,123, +241,212,246,99,12,71,12,71,12,71,118,223,82,118,245,100,112,49,30,118, +223,237,238,111,113,223,19,20,49,93,144,184,44,113,8,253,19,210,173,141, +168,57,196,142,60,52,122,182,113,113,122,3,60,159,130,86,43,122,26,223, +47,106,95,76,89,68,244,20,251,20,8,210,238,72,223,19,30,112,23,62, +244,223,20,118,112,112,244,118,11,99,99,218,71,218,71,12,12,71,58,58, +78,246,246,92,63,53,53,101,83,0,83,83,53,63,63,53,20,83,0,0, +53,53,79,0,226,78,58,78,12,108,92,19,92,71,58,58,99,71,71,123, +71,218,218,71,218,218,99,218,99,8,99,99,218,218,99,99,99,99,58,99, +99,58,99,11,71,99,99,58,58,58,58,71,92,92,19,78,78,58,78,218, +53,63,101,123,123,48,48,123,92,19,92,92,241,241,241,241,92,92,92,12, +241,212,78,78,123,118,12,12,12,12,112,92,49,223,30,247,65,49,23,112, +82,23,72,231,14,26,82,19,101,49,17,146,102,154,147,69,8,82,49,23, +249,104,158,39,206,169,86,130,202,142,202,114,39,117,76,88,4,66,66,113, +7,95,234,175,68,22,101,20,251,8,4,107,100,112,101,112,30,23,112,62, +49,101,49,244,118,112,112,118,11,78,99,99,99,58,71,12,92,99,246,78, +246,58,218,108,108,53,63,229,0,83,34,13,53,53,101,38,13,0,0,13, +53,101,63,101,99,78,58,78,71,19,19,92,71,58,99,58,11,218,218,71, +99,99,99,99,218,58,99,218,218,8,71,218,99,99,218,58,99,99,99,99, +99,58,99,58,99,218,11,58,58,99,58,58,71,92,92,58,78,78,78,78, +118,19,53,123,48,128,128,48,123,12,92,92,48,128,212,48,241,12,12,92, +241,128,246,246,246,71,12,12,12,71,71,118,49,223,49,208,116,22,49,23, +11,223,223,72,225,235,113,82,82,101,49,65,68,164,201,7,162,26,8,121, +66,223,23,216,14,36,177,152,154,152,80,255,98,66,66,223,66,4,32,152, +152,163,228,222,112,251,20,20,8,113,219,222,22,82,23,22,62,112,54,244, +101,82,112,112,23,118,112,11,11,78,58,58,246,99,71,71,99,58,246,212, +58,58,123,108,108,53,20,13,101,19,34,13,53,53,53,0,75,38,0,34, +63,53,53,71,58,78,58,78,11,92,92,71,58,58,58,58,99,218,11,99, +11,58,218,218,99,99,218,99,99,8,99,71,99,99,99,99,99,218,58,99, +218,58,99,99,99,58,58,78,58,99,58,58,58,71,12,78,78,78,78,78, +58,12,19,12,48,218,246,218,48,12,92,92,241,48,58,212,48,241,12,92, +48,241,212,58,212,212,123,118,12,71,118,118,12,223,49,118,55,239,244,223, +112,112,82,118,236,225,14,4,26,82,101,19,112,93,153,21,224,174,88,162, +26,26,121,82,66,66,66,66,66,66,26,82,66,26,113,127,32,44,51,87, +248,222,236,223,20,20,20,8,70,111,17,237,223,49,237,30,62,54,30,118, +253,49,112,118,23,118,118,11,99,58,58,58,212,99,71,218,246,78,78,58, +58,58,108,108,63,38,13,92,58,12,13,251,53,63,251,79,12,71,34,34, +251,53,19,58,78,78,78,58,58,71,71,58,99,99,58,99,58,11,58,99, +99,99,99,218,218,99,218,218,99,8,71,99,218,218,218,99,218,99,99,99, +99,71,58,99,99,99,99,58,58,99,58,58,78,58,99,78,58,78,58,78, +78,78,99,218,128,58,58,78,128,48,12,92,123,241,78,246,58,48,241,218, +12,128,212,212,58,58,212,218,71,12,71,12,118,12,223,49,11,243,55,244, +49,112,244,223,49,236,17,111,4,121,82,82,8,223,244,29,153,61,148,234, +152,32,147,52,4,4,113,26,113,26,98,98,147,255,7,193,24,163,217,238, +110,112,101,20,20,253,8,70,107,222,22,223,223,244,244,244,244,242,112,82, +223,118,23,23,49,118,71,11,58,58,58,246,246,58,99,78,58,212,212,78, +58,99,53,53,38,83,19,58,246,19,34,79,251,34,34,71,58,71,79,13, +83,63,218,58,58,99,58,78,58,99,78,58,99,99,99,58,58,99,99,58, +218,11,218,99,11,218,11,99,71,8,71,218,218,11,71,99,218,99,99,99, +99,218,11,99,58,58,58,58,11,58,99,218,58,58,78,78,78,78,58,58, +78,78,78,78,58,78,78,78,58,58,48,123,48,48,128,78,246,78,128,241, +241,241,128,212,58,58,58,58,218,12,118,71,71,112,118,223,49,11,245,55, +30,49,112,244,223,19,30,93,107,111,4,26,101,101,8,101,112,242,93,203, +6,170,21,74,51,51,104,24,234,76,24,104,76,124,232,56,225,18,30,223, +20,20,20,20,8,66,235,231,236,112,223,118,30,112,112,54,244,112,82,49, +112,23,118,118,12,11,99,99,246,58,58,58,78,58,246,246,78,78,212,78, +58,12,53,229,34,40,78,78,58,38,0,13,13,79,71,58,58,71,13,0, +38,71,58,99,58,99,58,99,78,58,58,99,99,99,71,99,58,99,218,99, +71,99,218,99,99,71,218,99,71,8,71,71,71,123,218,218,11,218,218,218, +218,99,218,218,99,99,99,99,58,99,99,99,99,99,58,78,78,58,58,99, +99,78,78,246,78,212,78,78,58,78,128,48,48,241,48,246,78,58,246,128, +128,128,128,128,212,78,212,78,58,218,71,71,12,12,118,118,49,49,112,208, +41,22,49,112,244,23,19,49,22,93,219,14,4,8,82,101,20,101,223,49, +30,65,18,29,17,203,228,230,56,96,91,225,225,236,242,112,49,82,20,20, +20,20,82,113,210,107,29,22,118,223,112,30,244,244,62,112,23,82,223,49, +118,118,49,49,118,71,99,246,58,58,212,246,246,78,212,58,246,246,78,58, +218,53,209,126,40,78,78,78,218,0,34,34,79,71,78,99,58,71,251,229, +12,58,99,99,99,58,58,58,58,99,99,99,99,218,99,58,99,99,99,218, +99,218,11,218,218,11,218,71,71,8,71,123,71,71,218,123,71,99,11,99, +218,11,99,71,218,99,58,99,99,58,218,218,99,99,58,58,58,58,99,58, +58,99,58,246,246,246,78,58,58,58,78,58,48,48,241,78,246,78,78,58, +58,241,241,241,212,58,246,78,246,58,218,71,71,71,118,118,118,49,49,112, +103,243,236,112,49,244,112,49,223,118,65,93,107,14,98,113,82,8,101,253, +101,20,101,82,82,223,118,118,49,49,49,82,82,101,101,20,20,253,253,121, +26,70,235,110,29,103,118,223,223,11,244,244,54,242,244,49,19,223,49,118, +118,49,12,71,11,99,212,246,78,78,78,78,212,246,78,58,78,212,78,58, +12,38,213,71,78,58,58,78,40,83,79,20,99,58,99,58,99,12,92,71, +78,58,99,99,99,99,99,99,99,99,218,218,99,218,218,99,218,218,11,218, +11,218,218,71,218,218,71,123,71,8,71,71,12,71,71,218,218,218,71,71, +218,218,218,218,71,218,218,99,99,218,99,99,99,99,99,99,58,99,58,99, +99,99,99,58,78,78,78,78,58,99,58,58,58,128,48,128,78,78,58,78, +212,212,212,241,128,58,246,246,58,246,58,218,218,118,71,71,118,12,118,49, +23,237,245,55,208,23,118,23,112,223,223,118,244,236,18,110,14,210,4,66, +121,8,82,20,82,101,101,251,20,20,20,101,8,20,8,8,26,26,210,235, +109,110,65,30,118,223,49,244,244,244,244,242,65,30,223,82,49,118,118,49, +92,49,118,71,11,78,246,78,58,246,212,246,78,78,246,78,246,78,212,218, +53,92,99,78,58,58,58,246,53,0,53,99,99,58,99,58,99,71,218,58, +99,58,99,218,58,99,58,78,99,99,11,99,71,99,99,218,99,99,218,71, +123,218,71,218,12,71,71,71,71,8,71,71,71,71,71,118,71,71,218,99, +71,71,71,123,71,71,218,99,99,218,218,71,11,218,99,99,58,99,58,99, +99,99,218,58,58,78,78,78,58,99,99,58,58,58,58,128,246,78,58,58, +58,58,246,128,128,58,212,246,78,78,78,58,58,218,71,71,11,118,118,49, +12,23,11,103,243,72,237,23,23,112,23,223,19,223,112,22,109,18,29,111, +111,210,210,70,4,26,26,26,26,26,26,4,4,70,98,235,2,18,29,65, +54,23,223,49,23,244,244,112,244,54,22,244,118,82,223,223,118,92,49,49, +223,71,11,99,99,78,246,58,246,78,58,212,78,78,58,58,246,78,58,218, +71,78,58,58,99,58,58,99,19,77,58,58,58,218,99,58,58,58,58,58, +218,99,11,218,58,99,218,58,218,218,71,218,218,71,99,71,218,71,71,218, +71,123,71,71,71,71,71,71,12,8,118,118,71,71,118,71,71,71,118,12, +71,123,71,71,71,71,71,71,218,99,99,99,218,218,71,218,99,99,58,99, +99,218,99,218,58,58,246,78,78,99,99,99,99,58,246,78,58,246,58,58, +58,58,58,78,78,58,58,58,246,212,99,58,58,58,218,99,71,118,11,118, +49,49,49,23,11,208,55,245,22,112,23,23,23,23,49,49,49,223,112,30, +22,236,18,18,18,29,18,18,18,18,107,236,29,236,236,22,30,23,223,223, +223,118,118,112,244,112,244,242,242,30,23,223,82,223,49,49,49,223,49,12, +71,71,99,58,246,212,58,58,58,78,78,78,58,58,58,58,78,212,246,78, +78,58,58,11,99,58,78,78,99,58,58,99,218,99,58,99,58,58,58,218, +99,71,218,99,218,58,99,218,218,71,218,123,71,99,71,218,71,71,71,12, +71,71,12,12,12,12,12,12,12,8,12,12,12,12,12,12,118,118,71,71, +71,218,71,123,71,71,71,71,123,71,218,11,218,71,218,123,218,99,218,58, +99,99,11,218,71,99,99,58,78,58,99,99,71,99,58,78,246,246,246,58, +58,218,58,99,78,78,246,78,78,246,58,58,58,212,58,58,99,71,71,118, +71,118,118,23,49,112,112,103,72,72,65,244,112,23,118,118,70,223,223,223, +223,49,118,23,118,112,112,244,112,112,23,23,23,49,49,223,223,49,23,118, +244,244,112,62,244,109,22,30,49,223,223,82,49,223,49,223,223,118,118,71, +99,99,99,78,78,246,58,58,78,78,58,58,58,99,78,246,78,78,78,78, +99,99,99,58,99,58,78,78,58,99,99,11,218,99,99,58,58,11,99,218, +218,218,71,99,218,218,11,218,123,71,218,71,71,218,71,71,123,71,118,12, +71,12,12,12,12,12,12,12,12,8,12,12,12,12,12,12,71,71,71,118, +71,118,71,71,118,12,71,71,71,71,99,218,123,71,218,71,218,71,99,99, +99,218,218,71,218,218,99,58,58,58,58,218,99,218,218,99,58,99,78,58, +58,99,99,99,58,58,78,246,246,78,78,78,58,99,58,58,99,58,99,71, +11,71,12,23,118,118,118,23,112,30,103,208,208,65,242,112,118,23,23,118, +118,118,49,112,23,112,11,112,112,112,118,49,49,49,49,112,23,23,112,244, +244,22,22,22,242,112,49,223,223,66,223,49,223,49,223,49,12,71,71,99, +99,58,212,212,246,58,78,78,58,58,99,99,99,58,78,78,78,78,58,58, +99,99,99,58,58,58,58,58,99,218,71,218,99,99,218,58,99,99,71,218, +71,71,218,99,71,99,123,71,118,118,123,71,71,123,71,71,12,12,118,12, +12,12,12,12,12,12,71,12,71,8,12,92,12,92,71,12,118,118,12,12, +118,71,71,12,71,71,118,12,12,71,118,218,71,71,71,12,71,12,218,218, +99,99,218,218,71,71,71,218,99,99,99,99,71,71,218,71,99,58,58,58, +58,58,99,11,99,99,99,58,246,78,246,78,58,99,99,99,58,58,99,99, +99,11,71,112,112,118,118,92,118,23,118,112,30,237,103,65,65,22,30,54, +244,244,23,112,244,112,244,112,244,23,244,23,112,62,244,244,30,242,22,242, +22,30,23,49,49,19,82,223,223,49,49,49,223,49,12,11,11,218,99,58, +58,78,78,78,246,78,78,99,99,58,99,58,58,78,78,78,58,99,218,218, +71,99,99,99,58,99,58,99,71,123,71,218,99,99,218,99,218,71,12,71, +71,218,71,71,218,71,71,71,71,71,12,71,71,71,118,12,12,12,71,71, +12,12,12,12,118,12,12,92,12,8,12,12,71,12,12,12,12,12,71,12, +118,12,12,12,118,12,71,12,12,71,71,71,71,123,71,12,12,71,71,218, +218,218,11,71,123,71,71,218,71,99,99,58,99,99,71,218,218,99,218,58, +58,58,58,99,218,71,99,218,58,58,58,246,212,58,58,99,99,58,99,58, +58,58,58,218,71,71,112,71,118,118,49,23,118,118,49,112,112,30,237,22, +22,22,103,22,22,22,22,22,30,242,22,22,22,103,22,22,30,112,112,23, +49,49,49,82,223,66,49,49,49,49,223,12,118,71,218,99,99,58,99,58, +78,246,78,246,58,58,99,99,218,218,99,99,99,58,58,58,99,218,71,218, +99,99,58,58,58,99,218,123,71,71,218,218,99,99,99,123,71,71,71,92, +71,71,218,218,71,12,12,12,118,71,12,118,71,71,71,12,12,12,12,12, +12,12,118,118,12,12,12,12,12,8,92,92,92,12,12,12,12,12,12,12, +92,12,12,12,71,12,118,12,12,12,12,12,71,71,71,12,12,71,118,71, +71,123,71,71,71,118,71,71,71,123,71,218,218,99,218,71,12,71,71,218, +218,58,58,99,58,71,71,218,218,218,99,58,58,58,58,58,99,99,99,218, +218,99,58,58,99,99,99,11,11,11,23,112,118,112,49,118,118,118,23,118, +49,118,23,112,112,112,112,244,112,112,118,112,118,49,49,223,49,223,223,49, +223,223,49,49,223,49,223,223,118,118,71,11,218,99,218,99,218,78,58,58, +58,58,58,218,218,218,218,218,58,99,58,58,58,58,218,99,71,71,123,71, +218,99,58,99,99,71,71,12,12,71,71,71,218,218,218,71,118,71,71,12, +123,71,12,71,71,12,12,12,118,71,12,12,12,118,118,12,71,118,12,118, +12,12,12,12,12,92,12,12,92,8,92,92,12,12,92,12,92,12,12,12, +12,12,118,12,12,12,12,12,12,12,118,12,12,71,118,71,12,12,71,118, +71,71,71,123,218,118,12,71,71,71,71,99,99,218,218,71,71,71,71,71, +99,218,99,58,99,218,218,71,71,71,218,71,58,99,58,58,99,58,218,99, +99,218,99,99,58,58,58,99,58,99,218,11,71,112,11,112,118,23,118,23, +49,118,118,92,49,92,49,92,49,92,49,223,223,49,223,49,49,49,49,82, +49,49,49,223,118,118,71,71,11,71,99,218,218,99,58,58,58,58,58,58, +58,218,218,218,71,218,218,99,99,99,99,58,218,218,71,123,71,71,218,11, +99,99,218,218,71,71,12,71,12,218,218,218,71,218,118,12,71,118,71,71, +71,71,71,71,118,71,12,12,12,71,12,12,12,12,12,12,12,49,12,12, +12,92,12,49,12,92,12,12,92,8,92,92,92,92,92,12,92,12,12,92, +12,92,12,92,12,71,71,12,12,12,12,71,12,118,71,118,71,118,12,12, +12,12,71,71,218,71,71,118,118,12,12,118,71,218,71,218,123,12,12,12, +12,71,71,99,99,99,218,71,71,71,71,123,71,218,218,58,99,99,58,218, +99,218,218,11,99,218,99,218,218,58,58,58,99,218,71,11,71,71,118,11, +112,71,112,118,112,12,118,118,118,118,118,118,118,118,118,118,223,223,49,49, +118,118,118,71,71,71,218,71,218,71,99,99,99,218,58,58,58,218,218,218, +218,71,71,218,123,71,218,99,58,218,218,99,71,118,12,71,71,71,218,218, +218,99,71,118,12,12,12,71,71,123,71,71,71,12,118,12,92,71,118,71, +12,12,71,12,12,92,12,12,12,118,12,12,12,12,12,92,12,12,12,92, +71,92,12,92,92,92,92,92,12,8,92,92,92,92,92,92,92,92,92,12, +92,12,92,12,92,92,12,118,92,12,12,92,92,12,12,12,12,12,12,12, +12,12,71,118,12,118,71,71,12,12,12,12,118,71,218,71,218,71,118,12, +12,71,12,71,218,71,99,218,123,71,71,12,71,118,71,71,99,218,218,99, +218,99,218,218,218,71,123,71,218,218,218,218,99,99,99,58,99,99,99,218, +99,71,71,71,11,71,11,11,11,11,11,11,11,11,71,118,12,118,218,218, +71,218,71,71,218,71,99,71,99,99,99,58,218,99,218,218,71,71,71,71, +71,71,123,71,11,99,99,99,218,218,71,71,12,12,12,71,123,218,71,218, +71,118,71,12,118,12,12,71,71,218,118,12,12,12,92,12,71,118,71,71, +12,71,92,12,92,12,12,12,118,12,12,92,92,12,92,12,92,92,92,92, +92,92,92,92,12,92,92,92,92,8,92,92,92,12,92,92,92,92,92,92, +92,92,92,12,92,92,12,12,92,92,92,12,92,92,12,12,118,12,12,92, +92,12,12,12,71,71,71,118,12,118,12,12,12,71,12,71,71,71,71,12, +12,12,118,12,12,118,218,71,71,71,12,71,71,71,12,12,71,71,71,11, +218,99,218,218,218,218,71,71,71,71,71,71,71,71,218,218,218,218,99,218, +218,218,99,218,99,218,218,218,218,218,218,218,218,99,218,11,218,71,71,71, +71,123,71,123,71,218,99,218,218,11,218,99,71,71,71,71,71,71,71,92, +71,71,71,123,71,218,71,71,71,118,12,12,12,12,71,71,71,218,71,71, +12,12,12,12,12,12,12,71,71,71,12,12,12,12,12,12,12,12,118,12, +12,92,92,92,12,92,12,71,12,92,92,12,92,92,92,92,92,12,92,92, +92,92,92,92,92,92,92,92,92,8,92,19,92,92,92,92,92,223,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,12,118,12,12, +12,92,92,12,92,12,12,12,71,12,49,12,92,92,12,12,71,12,12,12, +12,71,12,12,12,12,71,12,71,71,218,218,71,118,12,12,12,71,12,12, +71,123,71,71,99,71,71,123,71,123,71,123,71,71,71,71,71,71,71,71, +71,218,218,218,71,71,218,71,218,71,218,71,71,123,71,123,71,123,71,123, +218,71,218,218,218,218,71,71,71,71,71,12,12,12,12,12,12,12,71,71, +71,123,218,218,71,71,12,12,12,71,12,12,12,12,71,71,71,12,118,12, +12,92,12,12,12,12,12,12,71,12,92,12,92,12,12,118,12,12,12,92, +92,92,92,92,92,12,92,92,12,92,92,92,92,19,12,92,92,92,92,92, +12,92,92,92,92,92,92,92,92,8,19,108,19,108,12,19,92,92,92,92, +92,92,92,92,92,19,92,92,92,92,92,92,92,92,92,92,92,92,12,92, +92,92,92,92,92,92,12,12,12,12,71,12,92,92,92,92,12,92,118,12, +12,12,12,12,92,12,12,12,71,12,71,71,71,12,12,12,12,12,12,92, +112,118,71,12,71,71,71,218,71,71,71,71,71,71,12,12,12,12,12,12, +12,118,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, +71,71,71,71,71,71,71,71,118,71,12,71,12,12,12,12,12,71,71,123, +71,71,71,92,12,12,12,12,92,92,71,12,12,12,12,71,12,12,92,12, +92,92,12,118,12,12,118,12,12,92,92,92,92,12,12,12,12,92,92,92, +92,12,92,12,92,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,19,19,108,92,8,92,92,19,92,108,92,19,92,92,92, +92,108,92,92,92,12,92,92,12,92,92,92,92,92,92,92,92,92,92,12, +12,92,92,92,92,223,12,92,12,12,12,12,12,92,92,12,92,12,12,12, +12,12,12,12,49,12,92,92,92,92,12,12,71,12,12,12,12,12,12,12, +92,92,118,92,12,12,118,12,12,12,12,12,12,71,12,12,12,12,12,12, +12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, +12,12,118,118,12,118,12,12,12,12,12,12,12,12,12,12,12,12,71,12, +12,12,71,92,12,92,92,49,12,12,12,12,118,12,12,118,92,12,92,92, +12,12,12,12,123,12,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,92,92,19,92,92,108, +92,19,92,108,108,92,108,92,108,8,19,108,19,92,19,108,108,108,92,19, +92,92,19,92,108,108,92,108,108,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,12,12,12,12,12,12,92,92,92,92,92,92,12,12,12,12,12,118,12, +12,12,12,92,12,12,12,12,71,12,12,12,12,71,71,12,12,71,118,118, +12,12,12,12,12,118,12,12,12,92,12,12,12,12,12,71,12,12,118,12, +12,71,12,12,12,12,12,92,118,118,12,12,12,12,71,12,12,12,49,12, +92,12,92,92,92,12,92,12,12,12,12,12,92,92,92,92,92,92,92,92, +12,12,71,92,92,92,12,92,223,92,92,92,12,92,92,92,92,92,12,19, +92,92,92,92,92,92,108,92,108,19,92,108,108,108,92,92,19,108,92,108, +19,92,19,92,108,92,108,19,19,8,19,108,19,108,108,19,92,19,108,19, +19,108,108,19,19,92,108,92,92,108,19,12,108,108,92,19,108,108,92,19, +92,92,92,92,92,92,108,19,92,92,92,92,12,92,92,92,92,92,92,92, +92,92,92,12,12,118,123,92,12,12,92,92,92,92,92,92,12,12,12,12, +12,92,12,12,92,12,92,92,92,92,92,92,12,12,12,12,12,12,12,71, +71,12,12,12,12,12,12,12,71,12,12,12,12,12,12,92,12,12,92,12, +92,12,12,49,12,92,12,12,12,12,12,71,12,12,12,12,92,12,92,12, +92,92,92,92,92,12,12,12,12,92,12,12,92,92,92,92,92,92,12,12, +12,92,92,92,92,19,108,92,92,92,92,92,92,92,92,19,92,108,108,92, +92,92,92,19,108,92,19,108,92,108,108,92,19,92,108,19,108,92,108,92, +19,108,108,92,108,108,19,92,108,8,19,19,19,19,19,108,19,19,108,92, +19,19,108,92,19,19,108,19,108,92,108,19,92,19,92,92,92,19,92,92, +92,92,92,92,92,92,19,108,92,19,19,92,92,92,92,92,92,92,223,92, +223,92,92,92,92,92,92,92,92,92,92,92,92,223,92,92,92,12,92,12, +12,12,12,12,92,12,12,92,12,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,92,49,92,12,92,92,12,12,92,12,92,12,92,12,12,92,12, +12,12,12,12,12,12,12,92,92,92,12,92,92,92,92,92,92,92,92,92, +92,92,12,12,12,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,19,92,92,108,12,92,92,92,12,19,92,92,108,92,19,19,92, +92,92,92,92,108,19,92,19,19,92,92,108,108,92,108,92,19,19,19,108, +19,19,19,19,19,19,108,19,19,8,19,53,19,53,19,53,19,53,19,108, +19,108,19,108,108,108,19,108,19,108,19,108,108,108,108,19,108,19,108,19, +19,92,108,19,19,12,108,92,108,92,108,19,108,92,92,92,92,92,92,19, +92,19,108,92,19,92,92,92,92,92,92,92,92,92,92,92,108,108,19,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,92,92,92,12,92,19,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,108,19,92,92,223,92,92,92,92,92,92, +19,108,108,108,108,19,92,92,92,92,108,108,108,108,108,92,108,92,108,19, +92,19,108,108,19,108,108,108,108,108,19,19,19,19,19,19,108,108,53,19, +108,19,108,53,19,53,19,53,19,8,19,19,19,19,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,108,19,108,19, +19,19,19,19,108,19,108,19,108,19,108,19,19,19,19,108,19,92,92,92, +19,19,108,19,108,19,19,92,92,92,92,92,92,92,92,19,19,108,19,108, +19,92,19,92,92,92,92,92,92,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,19,19,19,92,19,19,92,19,19,108,92,92,92,19,92,92,92, +92,92,92,92,92,19,19,19,19,108,19,108,92,92,92,92,92,92,19,19, +92,19,223,19,108,19,108,92,19,19,19,19,19,19,108,19,108,19,108,19, +19,19,19,19,19,19,19,19,19,108,19,108,19,108,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,8}; diff --git a/plug-ins/Curtain/Curtain.c b/plug-ins/Curtain/Curtain.c index d52b853b95..1c2bbf99fb 100644 --- a/plug-ins/Curtain/Curtain.c +++ b/plug-ins/Curtain/Curtain.c @@ -1,14 +1,10 @@ /********************************************************************** - * Curtain Plug-In (Version 1.01) + * Curtain Plug-In (Version 1.03) * Daniel Cotting (cotting@mygale.org) ********************************************************************** - * Official Homepage: http://www.mygale.org/~cotting - ********************************************************************** - * Homepages under construction: http://www.chez.com/cotting - * http://www.cyberbrain.com/cotting - * You won't be able to see anything yet, as I don't really have the - * time to build up these two sites :-( - * Have a look at www.mygale.org/~cotting instead! + * Official homepages: http://www.mygale.org/~cotting + * http://cotting.citeweb.net + * http://village.cyberbrain.com/cotting ********************************************************************** */ @@ -228,9 +224,11 @@ drawCurtain(GDrawable *drawable) ix=(int)x; iy=(int)y; -/* Flags horiz and vert inversed by mistake! */ -/* Corrected this with a small hack in the next lines. */ -/* (one more inversion) */ + /* + Flags horiz and vert inversed by mistake! + Corrected this with a small hack in the next lines. + (one more inversion) + */ if ((((int)((float)ix/2.0))*2==ix) && (wvals.vert)) { pos = ((gint)(regionheight-1-iy)*regionwidth) * bytes; @@ -424,8 +422,8 @@ curtain_logo_dialog() GtkWidget *xvbox; GtkWidget *xhbox; char *text; - gchar *temp,*temp2; - char *datapointer; + guchar *temp,*temp2; + guchar *datapointer; gint y,x; xdlg = logodlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(xdlg), "About"); @@ -467,7 +465,7 @@ curtain_logo_dialog() xpreview = gtk_preview_new (GTK_PREVIEW_COLOR); gtk_preview_size (GTK_PREVIEW (xpreview), logo_width, logo_height); temp = g_malloc((logo_width+10)*3); - datapointer=header_data; + datapointer=header_data+logo_height*logo_width-1; for (y = 0; y < logo_height; y++){ temp2=temp; for (x = 0; x< logo_width; x++) { @@ -491,7 +489,7 @@ curtain_logo_dialog() "cotting@mygale.org\n" "http://www.mygale.org/~cotting\n\n" "Curtain Plug-In for the GIMP\n" - "Version 1.01\n"; + "Version 1.03\n"; xlabel = gtk_label_new(text); gtk_box_pack_start(GTK_BOX(xhbox), xlabel, TRUE, FALSE, 0); gtk_widget_show(xlabel); diff --git a/plug-ins/Curtain/INSTALL b/plug-ins/Curtain/INSTALL index 5e53dcbbc9..d6f045b270 100644 --- a/plug-ins/Curtain/INSTALL +++ b/plug-ins/Curtain/INSTALL @@ -29,11 +29,9 @@ ------------------------------------------- REDUCE CODE SIZE ------------------------------------------- - With this new release 1.01 the size of + With this new release 1.03 the size of the logo in the about box has been reduced - in order to make smaller binaries. In - general the compiled plug-in will be - about 25-30% of the size of version 1.00. + in order to make smaller binaries. If you find that the plug-in is still too big, you can compress the executables with the gzexe program (if it is avaiable @@ -53,7 +51,7 @@ rm PLUGIN_NAME~ This will result in a code size of about - 35 to 40 kB, which isn't too much IMHO. + 20 kB, which isn't too much IMHO. ------------------------------------------ diff --git a/plug-ins/Curtain/README b/plug-ins/Curtain/README index 5e53dcbbc9..d6f045b270 100644 --- a/plug-ins/Curtain/README +++ b/plug-ins/Curtain/README @@ -29,11 +29,9 @@ ------------------------------------------- REDUCE CODE SIZE ------------------------------------------- - With this new release 1.01 the size of + With this new release 1.03 the size of the logo in the about box has been reduced - in order to make smaller binaries. In - general the compiled plug-in will be - about 25-30% of the size of version 1.00. + in order to make smaller binaries. If you find that the plug-in is still too big, you can compress the executables with the gzexe program (if it is avaiable @@ -53,7 +51,7 @@ rm PLUGIN_NAME~ This will result in a code size of about - 35 to 40 kB, which isn't too much IMHO. + 20 kB, which isn't too much IMHO. ------------------------------------------ diff --git a/plug-ins/Curtain/logo.h b/plug-ins/Curtain/logo.h index 871a318a06..cb94ec445f 100644 --- a/plug-ins/Curtain/logo.h +++ b/plug-ins/Curtain/logo.h @@ -1,4 +1,4 @@ -/* GIMP header image file format (RGB-only): //logo.h */ +/* GIMP header image file format (Indexed): //logo.h */ static unsigned int logo_width = 200; static unsigned int logo_height = 72; @@ -6,9 +6,783 @@ static unsigned int logo_height = 72; /* Call this macro repeatedly. After each use, the pixel data can be extracted */ #define HEADER_PIXEL(data,pixel) \ - pixel[0] = (((data[0] - 33) << 2) | ((data[1] - 33) >> 4)); \ - pixel[1] = ((((data[1] - 33) & 0xF) << 4) | ((data[2] - 33) >> 2)); \ - pixel[2] = ((((data[2] - 33) & 0x3) << 6) | ((data[3] - 33))); \ - data += 4; + pixel[0] = palette_data[data[0]*3+2]; \ + pixel[1] = palette_data[data[0]*3+1]; \ + pixel[2] = palette_data[data[0]*3+0]; \ + data--; -static char *header_data = ")1!X)1!X)A!Y)Q!\\)Q!\\)A!Z)A!Z)Q!])A!Z)A!Z)1!X)Q!\\*!!^)Q!])Q!]*1\"!*1\"!*1\"\"*1\"!*1\"!*1\"!*1\"!*Q\"%*!!_*!!_*!!_*1\"\"*!!^*A\"$+!\"(*!!_*Q\"%*1\"\"*A\"$*Q\"%*A\"#*A\"#*1\"\"*!!_*!!_*A\"$*Q\"&+A\",*Q\"%*A\"$*A\"$*Q\"$+!!\\*A\"#+1\"+*A\"$*Q\"%+1\"++!\")+Q\".+A\",+Q\".+1\"+*Q\"%*A\"$*A\"$*A\"$+!\"(*1!`*A\"$+A\"-+A\"-+A\",,!\"1,!\"1+A\",,!\"2+1\"++Q\"'+A\",+A\"-+A\",*A\"$*A\"$*A\"$+!\"(+!\"(+!\"(+1\"+*Q\"'+!\"(+!\"(+A\",,!\"),1\"2+A\",,!\"2+Q\"0,!\"1,!\"1,!\"1+A\"-+A\",,!\"1+A\"-,1\"2,!\"2+A\",+A\".+1\"++A\"-+Q\".+Q\"0+A\"-+Q\".+Q\".,!\"1,!\")+A\"+*Q\"'+A\"-+A\"-+A\",,!\"1,Q\"*+Q\".+A\".+A\"-+Q\".+Q\".+1\"++1\"+*Q\"%+!\"(*A\"$*A\"$*A\"$*A\"$*A\"$*A\"$+Q\".+A\",+Q\".,1\"4+Q\".+1\"++1\"*+1\")*Q\"&*!!_*A\"$*1\"!*A\"$*A\"$,!\"(+Q\".+1\"++!\"(*Q\"'*Q\"'*A\"$*1\"\"*1!`*!!_*A\"$*A\"$*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*A\"#*Q\"%)A!Z*A\"#*!!_*1\"!*Q\"%*Q\"%*1\"!+!\"(*!!_*1\"\")Q!]*A\"#)Q!\\*!!^*!!^*!!_)Q!]*!!^*1\"!*!!^)Q!\\)Q!\\*!!^*!!^*!!^)Q!])A!Z*!!^)1!X)A!Y)A!Z)1!W)1!X*!!^*!!^)Q!\\)Q!\\*1!`)Q!\\*1\"\")Q!]*1\"\"*A\"#*!!^*1\"\"*1\"!*1!`)Q!])Q!]*!!^*!!_*Q\"&*A\"\"*A\"\"*Q\"%*1\"\"*Q\"&*1!`*A\"#*A\"#*A\"$+!\"'*Q\"%*Q\"%*A\"#*A\"$*Q\"%*A\"#*A\"#*A\"#*Q\"&*Q\"'+1\")+Q\".+!\"(+1\"+*A\"$*A\"$*A\"$*A\"$*Q\"%*Q\"'+!\")+1\"++Q\".,!\"1+A\"-,1\"0+!\"(,!\"&+!\"$*A\"$*Q\"&*Q\"&+!\")+A\"-+A\",+Q\".+Q\"0,1\"3,!\"2+1\"+,!\"1+A\"+,!\".,A\"/+A\"++A\"-+Q\".+Q\"0+Q\".*Q\"'+1\")+1\"*+A\".+A\"-,!\"2,A\"3+Q\"-,1\"3,A\"1+A\"-,1\"3,1\"2,1\"0,!\"2,!\"2+Q\".,!\"1+A\".+A\"-,!\"1+A\"-+A\"-,!\"1+A\"-,!\"1+Q\"0,!\"0+Q\".+A\",+Q\"/+Q\"0+A\",,A\"0+A\"++A\"-+1\"+,!\"1,!\"1+A\"-,1\"4+1\"+,!\"1,!\"1,A\"1,!\"1,1\"4,1\"/,!\"1+A\",+Q\"/+A\"-*Q\"'*Q\"'*Q\"',1\"%,!\"1,!\"-,A\"*,!\"/,!\"1+Q\".+Q\".,!\"1+1\"*+1\"**Q\"'*A\"#*A\"$*Q\"%+1\"$+!\"(+1\"++A\"-+Q\".+A\"-+A\",+!\"(*A\"$*A\"$*A\"$*A\"$*Q\"%*Q\"%*Q\"%+1\"+*Q\"&+!\"(*Q\"%+!\"(*!!_*A\"$*A\"#*1!`*Q\"%*A\"\"*!!`*A\"\"*A\"#*A\"#*!!^*Q\"$*1\"!*A\"\"*A\"$*!!^*A\"$*1\"!*A\"\")Q!]*1\"!*!!^*!!_*!!^)Q!]*1!`)Q!\\)Q!\\)Q!]*!!`)1!X*!!^*!!^)A!Z*1\"!*A\"\"*!!^*1\"!)Q!]*1!`*Q\"%*!!^*A\"\"*!!^*1\"\"+!\"'*1\"\"*A\"#*1\"!*A\"$*A\"$*Q\"%*1!`*Q\"%*A\"#*A\"#*1\"\"*A\"$+A\"-+!\"(+!\"(*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%+1\"**Q\"%+A\"-+Q\"/,A\"/+Q\"++A\",*Q\"&*A\"$*A\"$*A\"$+!\")+Q\"/,1\"4+A\"-,!\"1,!\"1+A\".,!\"1,!\"&+1\"++A\",+!\"(+A\"-+A\",,1\"3,1\"4,1\"4-A\"1-A\"5-!\"5,1\"4+Q\"/+Q\"/+A\"-,1\"1,A\",+A\"-+A\"-+Q\"0+Q\"0,!\"1,1\"4.1\"5,A\"4,1\"4,1\"4.1\"5.1\"5-1\"5.Q\"6-Q\"5-A\"5-A\"5.1\"5,Q\"5-Q\"5,1\"4,1\"4.!\"0,1\"4,1\"4,Q\"3-1\"2,1\"4,1\"4,!\"1.!\"4,!\"2-1\".,1\"3-1\"1,Q\"4+Q\"0,!\"2,1\"3,!\"0,!\"1+A\"-,!\"2+A\",+A\",,!\"2+A\",,!\"1,!\"1,!\"1.!\"5.1\"5,A\"5.A\"6-Q\"5.1\"5-A\"1,A\"4,1\"4,!\"0+Q\".+1\"++Q\"$,!\"&+!\"(+A\"-+A\",,1\"4,1\"4,1\"4,1\"4,1\"4+Q\"/+Q\"/+!\")*Q\"&+!\"'+!\"(+!\"(+A\",+Q\".+Q\"0,!\"2+A\",+A\"-+1\"+*A\"$*A\"$*Q\"%*Q\"%*Q\"%+1\"*+A\",+A\",+A\"-+!\"'+!\"'*Q\"%+1\")*Q\"%*Q\"%*Q\"%+1\")*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*1\"!*A\"$*Q\"%*!!^+!\"'*1\"!*1!`*1!`+!\"'*A\"#*1\"!*1!`*Q\"$)Q!\\)Q!\\)Q!]*!!^*1!`*1\"!*1\"!*A\"$*1!`*A\"$*1\"!*A\"\"*!!`*A\"$*1!`*A\"$*Q\"%*A\"$*A\"$*A\"\"*A\"\"*Q\"'*A\"$*A\"$*A\"$*Q\"%*A\"$*Q\"%*Q\"%*A\"#*Q\"&*Q\"&+!\"(+1\"*+A\"-+!\"'*Q\"%*Q\"%*Q\"%*Q\"%+Q\"/+!\"(,1\"3+A\",,!\"2+A\"-+Q\".+1\"**Q\"&*Q\"&,!\"1,!\"2+Q\"/,A\"3-!\"5-A\"5-!\"4+A\"-+A\".+1\"*+A\",+A\",+Q\"/,!\"1-!\"1,1\"3.Q\"6.Q\"6.!\"6-!\"6,A\"5,1\"2+Q\"0+Q\"/,!\"1,!\"1,!\"2,1\"4,!\".-!\"4-A\"6-A\"8.Q\"8/1\"9-A\"8.Q\"7.Q\"7.A\"7.!\"7-1\"5.A\"6-1\"7-A\"8-Q\"6,A\"5-1\"5,Q\"5.!\"5-Q\"5,1\"4.1\"8-1\"5.Q\"6-Q\"9.Q\"6-1\"5/1\"8-A\"6.!\"6-A\"6.A\"7-Q\"7-1\"8.Q\"7/1\"9/A\"8-Q\"6-A\"6-!\"4-!\"4.!\"5-1\"6-!\"4,1\"4,1\"3,1\"4+Q\".,1\"4,1\"4,Q\"5,A\"4-A\"9-A\"8.1\"8-Q\"9-Q\"5.1\"7.Q\"8.A\"5,1\"3,A\"3+Q\".,1\"3,A\"&+1\"*-!\",,1\"3,1\"4.Q\"1/!\"8-1\"4-1\"5,1\"4,!\"0+Q\"/+!\"(+!\"(+A\",+1\")+A\"-+Q\".,1\"3+Q\"0,1\"3+1\"*+Q\"/+!\"(*Q\"%*Q\"&+!\"'+A\",+A\",+Q\"0+A\"++A\"-*Q\"%+!\"'*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"'+!\"'*Q\"%*Q\"%*Q\"%*Q\"%*A\"$*Q\"%*A\"$*Q\"%*Q\"%*1\"!*A\"#*A\"$*A\"#*!!`*A\"#*!!`*Q\"%*A\"$*1\"\"*Q\"%*!!`*A\"#*A\"#*1!`*A\"#*1\"!*A\"#*Q\"&*1\"!*A\"$*Q\"%*Q\"&*A\"$*Q\"%*Q\"%+!\"(*Q\"%*Q\"%*Q\"%*Q\"%*A\"$*Q\"%*Q\"%*Q\"%*Q\"%+Q\".+!\"'+Q\".+A\",+1\"++!\"'+!\"(+1\"++1\"*+Q\"/+Q\"/+Q\".,!\"1,A\"5,1\"3+A\",,1\"2+!\"(+1\"*+A\"-+Q\"-,1\"2,Q\"4/Q\"7-1\"5-1\"5,1\"4,1\"3+A\"-,!\"+,A\".+Q\"/,!\"0,A\"5.A\"6.A\":.!\"<.!\";.1\"8.Q\"7.!\"7,1\"4,!\"0,!\"0,!\"1,!\"1.A\"6.A\"/-1\"8.A\"<.Q\".!\";.Q\"?.Q\"?.Q\"?/!\"7/!\"7,Q\"6-A\"7.1\"9-Q\"5.!\"8-1\"8/A\":.Q\":-Q\"8/A\"8-1\"8.1\"8/1\"9.1\":.!\":.1\"9.A\":.Q\":.1\"8.A\"=.A\";.A\":/A\">.A\">-Q\":.Q\"?.1\"=.Q\"?/1\">/Q\"=/A\">.Q\"<.Q\"<0!\"=/1\">.1\"9.A\"6.A\"6-Q\"6/A\"6.!\"5-!\"5.A\"6-Q\"5-Q\"5.!\"5.A\"6.1\"8.A\"9/!\"=.Q\"?.!\"<.!\"<.A\"6.A\"6,A\"5,!\"1,!\"1+A\",+A\"-,1\"4-!\"7-!\"7.1\"8.A\"7.1\"6.A\"6,A\"5,1\"2+A\",+A\"-+A\",+!\"(,1\"4,Q\"5.1\"5,A\"5,!\"1,!\"1,!\"1+1\"*+A\",+!\"',A\"(,A\"(+Q\"/+Q\"/,1\"2+Q\"/+A\",+1\"**Q\"%*Q\"%+!\"(+!\"(+A\"-+A\",+!\")+A\"+*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"'*A\"#*Q\"'*1\"!*Q\"%*A\"$*Q\"%*Q\"%*A\"$*A\"#*1\"!*1\"!*A\"$*A\"$*A\"%*A\"$*A\"$*A\"$*Q\"&+1\")*A\"$+1\"**A\"$*Q\"%+!\"(*Q\"&+1\"++A\"-+!\"'+A\"-+A\"-+!\"'+Q\"/+1\"++A\"-+Q\"0+Q\"/,!\"1,!\"1+A\"-,!\"2+Q\".,1\".+Q\"*+Q\"0+A\"-,A\"5,A\"5.A\"6,A\"5+A\",,Q\"*+1\"*+Q\"/+Q\"0+Q\"/.A\"6.A\":.1\":.1\"8-Q\"6-A\"5,!\"2+A\",,!\"1,1\"4-Q\"5.!\"7.A\":/Q\"=.Q\"?.Q\"?.Q\";-Q\"7.!\"5,1\"4,1\"4,1\"4,Q\"5/1\"6.1\"9.A\":.Q\"?/A\"C.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.!\"9-1\"5.Q\"9.Q\":.!\"7.A\"=/A\":.1\"=/A\":/!\":.1\";.!\";.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/A\"C.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?-A\"9/A\":-A\"9-A\"9,Q\"6.!\"7,Q\"5,1\"4-1\"5-Q\"8.1\"8.Q\"?.Q\"?.Q\"?.Q\"?/Q\"=-A\"8-Q\"5,A\"5,1\"3+Q\"0,1\"4-Q\"5-A\"5.1\":.1\"=.A\":.A\":.1\"8-1\"5,1\"4+Q\"/-!\"0+A\",,1\"3.!\"5-A\"5-A\"5.A\"6-Q\"4+Q\"0+A\"-+Q\".,!\"0,!\"0+Q\"0,!\"1,!\"1-!\".,1\"3+A\"-+Q\"0+Q\"/+!\"'+Q\".+Q\"0+A\"-,!\"1,A\"(+A\",+1\")+Q\"/+!\")+!\"'+1\"*+!\"(*Q\"%+!\")+!\"(+!\"'*Q\"%*Q\"%*Q\"%*Q\"&+!\"(*Q\"%+!\"'+!\"(*A\"$*A\"$*A\"$*Q\"%*Q\"&+!\"'+1\"*+1\"++Q\".+1\"++Q\".+Q\".+A\"-,!\",,!\"(+Q\".+A\"-+A\"-+Q\".+A\",+A\",+1\")+Q\".,!\"2+Q\".,!\"1,!\"1+Q\".+A\"-+1\"),A\"3,!\"-,Q\"5-Q\"5.!\"6.Q\"6,A\"5,A\"5,!\"+,Q\"0,!\"1-!\"4.1\"6/Q\"9.1\"=.Q\"?/1\"9-Q\"8,A\"5,1\"4,1\"3,Q\"4.!\"5-A\"8/!\">.A\">.Q\"?.Q\"?.Q\"?/!\">,Q\"5,Q\"5.!\"5-Q\"6.!\"7.1\"=.A\"?/1\"@/A\"D/Q\"E0!\"G/1\"C/A\"D.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/!\"?.Q\"=/!\">/1\">/1\"@/!\"@/1\"B/1\"B/1\"C/Q\"F/A\"D/Q\"E/Q\"E/Q\"E01\"I01\"I0A\"K/Q\"F/1\"C/Q\"F/1\"B/1\"B/1\"B/Q\"F/1\"B/1\"A/!\"A/!\"@/1\"B/1\"B/!\"@.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/1\"B/Q\"E/1\"B/A\"D01\"I0A\"J01\"I/Q\"E/Q\"E/!\"A.Q\"@/1\"?/1\"8/!\"8-1\"7-A\"8.A\"9.1\"=.A\">.Q\"?.Q\"?/A\"D/1\"B/A\"@.1\"=/1\"9.1\"6-A\"5-!\"5,A\"4.Q\"7.!\":.Q\"?.Q\"?.Q\"?.A\"=.A\"7-!\"5,Q\"2,1\"3+A\"-,1\"4-1\"7/!\"8.Q\"<.1\"9.1\"6.A\"5,!\"1,!\"1,!\"1+1\"+,!\"2,A\"5,Q\"5,Q\"5,Q\"3+Q\"0,!\"1+!\")+A\"-+Q\"-,!\"0+Q\"/+A\",,!\"1+A\",+Q\".+!\"(,1\"+,1\".+!\")+A\",+1\")+A\",+!\"(+A\"*+A\",+!\"'+!\"(*Q\"%*Q\"%*Q\"%*Q\"%+1\"*+1\"++!\")+A\",+A\"-,Q\"++1\"++A\",,A\"(+A\"-+1\"*+1\"++A\"-+A\"-,!\"1+A\",+A\"-+A\"-+Q\"0+1\"*,!\"2,1\"3,A\"5,A\"5.1\"6,1\"5,1\"3,A\"+,!\".,!\"0,A\"5,Q\"5.1\"8.!\"6/!\"9-1\"5-!\"5,A\"5,A\"5,1\"4.1\"6/!\":.1\"=.Q\"?.Q\"?.1\"=-A\":.!\"5,Q\"5.1\"6-A\"5/Q\":.1\"=/Q\"F0!\"G/A\"D.Q\"?.Q\"?.1\"=.Q\"9/A\"6.1\"9-Q\";.!\".A\">.Q\"?.Q\"?/A\"D0!\"G0!\"G0A\"J1!\"N0Q\"M0Q\"M0Q\"M0Q\"M0Q\"M01\"I0Q\"M0Q\"M/Q\"F01\"I0Q\"M01\"J0Q\"M0Q\"M0Q\"M0Q\"M0Q\"M01\"J0Q\"M0Q\"L0A\"K01\"J0Q\"M0Q\"M0Q\"L0!\"G0!\"G0!\"G/A\"C/A\"D/A\"D/1\"B/1\"A/1\"C0!\"G/Q\"F0!\"G/Q\"F/Q\"F0Q\"M0Q\"M1!\"N0Q\"M0!\"G0!\"G/1\"B.Q\"?.1\"-Q\";-Q\":.Q\"?/!\"@/A\"C01\"J0A\"K0!\"G/Q\"F.1\"=/1\";-Q\";.Q\"8-!\"6.1\"8/Q\"<.Q\"?.Q\"?.Q\"?.Q\"?/A\"<-!\"7.1\"6,1\"4,1\"4.!\"5-1\"8.Q\"9/!\"@.1\"=-Q\";.Q\"8,!\"2,!\"2,!\"0,!\"0.1\"6-1\"5.1\"9/1\"6,Q\"5,A\"5-!\".+Q\"/,A\"-,!\".,!\"0,!\"2+A\"-,!\"0,!\"0+1\"+,!\"2+A\",+A\",+A\"-+A\",,!\"*+Q\"(+Q\"%,!\"+,A\"/+!\"'+A\",+!\")*Q\"&+1\"**Q\"'+A\",+A\",+A\",+A\",+A\"++A\"-+Q\"/+A\",+Q\".+A\",,1\"2,!\"1+Q\".,!\"1,!\"0,!\"1+A\"-+A\"-,1\"4,1\"/-1\"5/Q\"6-Q\"5,A\"5,A\"5,1\"4,A\"3,1\"4.A\"6.A\"9/1\">.Q\"?.A\">-Q\"9-Q\"5-1\"5-1\"5-Q\"6.A\"9/!\"?/!\"A/Q\"F.Q\"?.Q\"?.!\"7.!\"7.1\"8.Q\":.1\"/Q\"F0A\"K1!\"N0Q\"M0A\"K/1\"A.Q\"?.Q\"?.Q\"?/!\"@/Q\"F01\"J1!\"N2A\"X2!\"V1!\"O11\"P0!\"H01\"I0!\"G/1\"B/Q\"F01\"J0A\"L1!\"N1Q\"S2Q\"U3Q\"T2!\"V3A\"R31\"X2A\"T1Q\"T11\"P1!\"N0Q\"M0Q\"M0!\"H0Q\"L0Q\"L1!\"L1!\"K0A\"I/1\"8.1\"-/A\"811\">11\">11\"=11\">11\">11\">11\">11\">1A\"=1A\"A11\"A1A\"B0Q\"A0A\"E1A\"I1A\"P11\"P2!\"T2A\"Y3A\"U2A\"Z2Q\"Z3!\"U2Q\"Y2!\"V1A\"R0Q\"M0Q\"L0Q\"L01\"I0A\"J0Q\"L11\"Q1A\"R21\"W2Q\"U2A\"W1A\"R1!\"M0A\"J/Q\"F/!\"@/!\"@.Q\"?/1\"C0!\"G0Q\"M1A\"R1!\"O1!\"N01\"J/1\"C.A\">/!\">.Q\"<.Q\"?/!\"@0!\"H0A\"J0Q\"M01\"I/1\"C/1\">.!\":.Q\"6-A\"9-Q\":/!\"@/!\"@/!\"@.A\">/!\"?0!\":-Q\"6-Q\"5.Q\"7-Q\"6-!\"7.1\"=.Q\";.!\"<-!\"7,1\"2,A\"4,A\"5.Q\"6,Q\"5/!\"6-!\"5,A\"5,1\"3,1\"3,Q\"2,!\"1,!\"1,!\"1+A\"++Q\"0+Q\".,!\"1+A\",+A\"-+Q\"0+A\"%+A\"-+A\"-+Q\".,!\"1,!\"1,!\"1+Q\"/,1\"4-A\"5,Q\"5.!\"5,1\"4-Q\"0,A\"5.1\"/,A\"5.!\"5.1\"6-A\"5.1\"6-!\"8/1\";.Q\"=.A\"8.Q\"9,A\"5-A\"5.1\"9/Q\"=.A\">.1\"=/!\"@/!\"@/!\"@-!\"7.Q\"8/1\";.A\">/!\"@0!\"G0Q\"M01\"J01\"I/1\"C.Q\"?.Q\"?.Q\"?/!\"@/Q\"F1A\"R11\"P1Q\"T1!\"O0A\"J/1\"B/1\"B.Q\"?/!\"@/Q\"F1A\"R21\"P2A\"Z3A\"V3Q\"U1Q\"S0Q\"M01\"J01\"J0A\"J0!\"H0Q\"M2!\"Q2!\"R21\"W4!\"Z4!\"Z2Q\"Z2A\"Z2A\"Z2A\"Y1Q\"U1!\"N0Q\"M0Q\"M1!\"K0A\"F11\"D1!\"B/!\"4/!\"0/Q\"*/Q!`.1!^-1!X-A!Z/!\"!/Q\"+/A\",/1\")/A\"*/Q\"+/1\"*/1\"*01\"*0A\").Q\".1Q\")0Q\".1Q\"/1Q\"11Q\"11Q\"20Q\":1!\":1!\">11\"D11\"H2A\"O1Q\"U3A\"U3!\"Y2A\"Z2A\"Z2A\"Z2!\"S2!\"Q11\"Q1Q\"M01\"J1A\"R1A\"R2A\"U3Q\"U2A\"Z3!\"Y3!\"X1Q\"S1A\"S01\"J/Q\"F0!\"G/A\"C/Q\"F0Q\"M1Q\"T3!\"U2Q\"V2!\"R1!\"O/Q\"E.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F0A\"K0Q\"M0Q\"M/Q\"F/!\"@.Q\"?.Q\":/1\"8/!\"@/!\"@/A\"D0A\"K/1\"B/1\"C.A\">-A\"9.!\"5-A\"9/1\";/!\"@/!\"@/!\"@/!\"?.A\"8/!\"6-1\"5-A\"5-A\"5.1\"8/!\"60!\"9.!\"5.!\"5,A\"5,A\"5.!\"5,A\"5.1\"6,A\"5,1\"2,!\"1,!\"1,!\"1+A\"-,!\"2+A\",,1\"3,1\"3,1\"3,1\"4,1\"4-!\"3.A\"/-A\"5,Q\"5-1\"6-!\"5.!\"7-Q\"8-!\"7.!\"9-1\"6.!\"6.!\"9-1\"9-A\":/1\"?.Q\"?.1\":.!\"9/A\":/1\"/!\"A/A\"E/A\"D/Q\"E/!\"@/!\"@/Q\";.A\">/1\"@01\"I0A\"K0Q\"M0Q\"M01\"I/1\"C/!\"A.Q\"?/1\"A/Q\"F1!\"N2A\"W21\"S21\"W1!\"O0Q\"L/Q\"F/A\"C/1\"B0Q\"L11\"O2A\"W3Q\"W2Q\"Y2A\"Z3!\"Y2!\"S1A\"S0Q\"M0Q\"L0Q\"L1Q\"R2!\"R31\"X31\"\\41#!3Q\"`41#\"3A\"^3!\"Y3A\"V1Q\"T1!\"O1!\"K0Q\"J11\"G0A\"<0Q\"60A\"+.A\"\".!!^-1!\\-A!Z-1!X+Q!X-1!X-1!X-A!Z.A\"!.1!].Q!_.1!`.A!^.A!].Q\"!.Q\"!.Q\"!.Q\"!.Q\"\".Q\"\".A\"\"/!\"#/!\"$/!\"&1!\"&1!\"(11\"(1Q\".1Q\"01Q\"41A\"71Q\"91!\"B1A\"J3!\"P31\"S31\"[4!#!3A\"^3!\"\\2Q\"Y1Q\"T11\"P1!\"O1Q\"S2!\"V3Q\"\\4!\"^3A\"_4!#!4!\"X31\"V2!\"S0A\"K0!\"G01\"H0!\"H0Q\"M2!\"S3!\"Y3!\"Y3A\"V1Q\"S1!\"O/1\"B/1\"B/!\"A/Q\"F01\"I11\"Q1A\"R1Q\"R1!\"M/Q\"F/1\"A/1\"?/!\"@/!\"@/!\"@0A\"K0A\"J0!\"H/1\"B/!\"A/!\">/A\";.!\";.1\"=/!\"@/!\"@/!\"@.Q\"?.1\".A\">/!\"@/!\"@.Q\";.1\"<.!\";/!\"@/!\"A0!\"G0Q\"L01\"J.Q\"?/!\"@/!\"@/!\"@/!\"@01\"J1!\"N1A\"Q1!\"N01\"H/A\"E.Q\"?.Q\"?/1\"B0A\"K1Q\"N3A\"T3!\"X31\"W1A\"R0A\"J/Q\"F0A\"K0Q\"M1A\"R2Q\"U4!\"]4A\"_4A#$3!\"]3A\"V3!\"V0Q\"M0Q\"M0Q\"M2!\"U21\"V4A\"_41#(4Q#(4Q#*4Q#%3A\"_2Q\"[3A\"V2Q\"U1A\"R0Q\"M1!\"C1!\"=01\"5/Q\"*.A\"!-Q!\\-1!X-1!X-1!X-1!X-1!X-1!X-1!X-1!X-1!U-1!X-1!X-A![/A!\\0!\"\"1A\"'0Q\"'2Q\"+3!\"+3A\",3A\"-3A\"-21\".21\"-2A\"%0A\"$01\"$/A\"$/A\"$/!\"#/Q\"$/Q\"$0A\"$1A\"%1Q\")1Q\"-1Q\"-1A\"91A\"?21\"A21\"Q3!\"V4A\"[3Q\"`4!#!2Q\"[21\"W2A\"S2A\"T3A\"V31\"W3A\"_4Q#%4Q#%4A##4!#!4!\"Y2!\"U11\"Q0A\"K0Q\"M0Q\"M3!\"Y2Q\"Y3Q\"[3!\"[21\"W1A\"R0Q\"M0!\"G/!\"@/A\"C0Q\"M1A\"R2Q\"V2A\"Y11\"P0A\"K/1\"B/!\"@/!\"@/!\"@/A\"E01\"H1!\"N01\"J/Q\"E/!\"@/!\"@/!\"@-Q\";.1\"=/!\"@/!\"A/A\"D.1\"=.1\"=.Q\";-A\"7.Q\";/A\"9.!\";/Q\"=.!\"<-Q\";.1\"7,Q\"6.Q\"9.!\"6.Q\"9.A\"9-A\"5-A\"5-1\"5,A\"5,A\"5,A\"5-Q\"5-1\"5-A\"5.!\"8.Q\"6-Q\":/!\"8/1\";.1\":.1\"=.!\";.1\"<.!\"<.A\"=.1\"=/!\"?/!\"@/!\"@/!\"@.Q\"?/!\"@/!\"@.Q\"?.Q\"?.Q\"?0!\"H0Q\"M0Q\"M/Q\"F0!\"G.Q\"?/!\"@/1\"B0!\"G0Q\"M1Q\"Q2A\"V21\"R1A\"Q0A\"J0!\"H0!\"G0Q\"M1A\"S3A\"V3A\"^31\"]3!\"Y3A\"U11\"Q0A\"J0Q\"M11\"P3!\"W4!\"X4Q#%4Q#%4Q#%3Q\"`2Q\"[2Q\"U11\"Q2!\"V3!\"X41\"Z41#%5A#*5Q#06A#-6!#)4Q#&3A\"^3Q\"\\31\"U21\"Q1!\"K01\"?01\"4.!\"+.!!`-A!Y-A!Y-1!X-1!X-1!X-1!W,A!W-1!W-A!U/!!`11\"&2!\"+41\"17Q\"79Q\"?:1\"A;Q\"H;A\"B9A\">:A\"?:!\"781\";:A\"<:Q\"?:Q\"?;Q\"C0!\"<-Q\":/1\"9-!\"7-A\"7.1\":.A\"6.!\":01\"8.1\"8.1\"8.A\"9.A\":-1\"5-Q\"9.1\"9/!\"8.!\"<-Q\";.1\"=.Q\"?/A\">/!\"<.Q\"?.A\">.1\"=/!\"@/!\"A/A\"E/1\"A.Q\"?/!\"@/!\"@/!\"@/!\"A/Q\"F1!\"N1!\"N1!\"N0Q\"L0A\"K/!\"@/Q\"F0!\"G1!\"N2!\"S2Q\"Y3Q\"U2!\"R11\"P0A\"J0Q\"M0Q\"L21\"V3Q\"W3Q\"`4Q#%3A\"_3!\"X1A\"Q1!\"N11\"O2A\"V31\"W4Q##5!#+51#-51#'41#\"3!\"Z3A\"V31\"X3A\"T41\"\\5!#$5Q#-6!#061#06A#05!#)4Q#&4!\"Z4!\"T2!\"R1A\"F11\">.!\"7.1\"&-Q\"!-A![-1!X-1!X-1!X-1!X,A!V*Q!W.1!V.Q\"!3A\"+7A\";:1\"A=1\"?:Q\";9!\"68Q\"67Q\"-5A\")5A\"%4Q\")51\"&51\"(5Q\"(51\"+5Q\"25A\"16!\"*5!\"+4Q\"*4!\"(51\"+5A\".81\"08Q\"6;Q\"A>1\"F>1\"O;A\"L9Q\"E61\";2A\",0Q\")1!\"&0!\"'.Q\")01\"*0A\".1A\"70Q\":11\"@2!\"L31\"X3Q\"_4A##4A#!41\"^2Q\"[3A\"V4Q\"`4Q#%5Q#*6A#.61#-5Q#*4Q#\"3!\"Y3!\"V1A\"Q3!\"V31\"W4A#\"4Q#%4Q#%4A##41\"\\21\"U1!\"O1!\"N0!\"G0Q\"M3A\"U2Q\"Z3Q\"`3!\"X1Q\"R0Q\"L0!\"G01\"I0A\"K1!\"N11\"Q2Q\"Q1Q\"T0Q\"M/Q\"E/!\"A/!\"@/!\"A01\"I0A\"L01\"I0!\"H/Q\"F.Q\"?.A\">/!\"@/!\"@/!\"@.A\">/!\"@/!\"@/!\"@.A\">-Q\";/A\".A\">.Q\"?.Q\"?.Q\"?.Q\"?/!\"@.1\"=.Q\"?/!\"@/1\"B0!\"G01\"J0A\"K/1\"B/!\"@/!\"@/1\"C0Q\"L1A\"Q0Q\"M1A\"R1!\"N0!\"G0A\"K01\"I1!\"N1Q\"T3A\"U3Q\"U2A\"[31\"W1Q\"T1!\"N01\"I11\"P31\"V41\"]4Q#&4Q#'41#\"3A\"\\3Q\"U1A\"R2!\"V41\"W41\"`51#.6A#06Q#)5A#,4Q#$4Q\"[3Q\"W2A\"Z4A\"\\4Q#(51#+5A#+4Q#+5Q#05Q#04Q#+41##4!\"[2Q\"R01\"G01\"<.A\"5.1\")-Q!\\-1!X-1!X-1!X-1!X-1!W,!!U,1!R/A!V3Q\"/:!\"7.A\">-A\":.1\"=.A\"=.Q\"?.Q\"?.Q\"?.A\">.A\">.Q\"?.Q\"?.Q\"?.Q\"?/Q\"E.Q\"?/!\"@/!\"@/A\"D0A\"J0Q\"L0Q\"L1!\"N0!\"G0A\"K/1\"B01\"I0Q\"M11\"P1A\"R1Q\"U1A\"S1!\"N0A\"K0A\"J1!\"O1Q\"Q31\"W4!\"`3A\"_2Q\"Z2A\"V1!\"N1!\"N2!\"V3A\"U4A#!5!#(5!#(4Q#&41\"^3A\"W3A\"V31\"W3Q\"[5!#)61#/6A#06Q#061#/5!#&3Q\"`3A\"\\3A\"_4A#'5Q#.51#-5!#&4Q#&51#,6!#05!#)41\"`3A\"U11\"N1!\"C/Q\"7/1\"%-Q!`-Q![-A![-A![-Q!\\,Q!X+Q!U,A!W0!!`8!\"71!\"K21\"W4!\"]4Q#&4Q#)4Q#%4Q#&4Q#'6!#/5Q#05!#.5A#*6!#/51#+3A\"_3!\"Z2Q\"Z4!\"^4Q#&5A#*6A#061#/5A#&3A\"[2Q\"W1A\"O21\"S3A\"V41##5!#&4Q#%4Q\"`31\"X1A\"N1!\"N1!\"N11\"P3!\"R3!\"Y2Q\"Z1Q\"U1Q\"T01\"I01\"I01\"I0Q\"M1!\"N1!\"N1!\"O01\"I0A\"L/A\"C/!\"@/Q\"E/1\"B/Q\"E01\"I/1\"C/!\"@/!\"@/!\"@/!\"@.Q\"?.Q\"?-Q\";.Q\"?-Q\";.!\";.1\"=.1\"=.!\"<.1\"=.1\"=.Q\"?.Q\"?.Q\"?/1\"B/1\"C.Q\"?/Q\"F0!\"H0A\"L0A\"L1!\"N1!\"N01\"I0A\"K0A\"L0A\"L0Q\"L1A\"R21\"S4!\"T2A\"Y11\"P1!\"N1!\"N1!\"N2Q\"U31\"Z4!#!4!#!3Q\"`3!\"Y21\"U1A\"R31\"Q4!\"\\41##4Q#$51#&5!#)4Q#%2A\"Z31\"W31\"W4!#\"5Q#*6!#.5A#*5Q#-6A#/51#'41##4A#$4Q#%6!#-51#,51#(4Q#%4Q#%4Q#-6!#051#.4!#!3Q\"S1A\"L0Q\";.1\"1.Q\"$,Q![-1!X-A![-1!Y-!!R+!!H,1!R1A\"#7A\"99Q\"8:!\"+7Q\"+3Q\"%51\"-51\"22Q\"0/Q\"#-Q!X+!!U-Q![2!\"%7A\"8BQ\"7CQ\"2AA\"1BQ\"1B1\"2B1\"2D!\"6BQ\"9B!\";A1\"A@Q\"H;A\"C6A\"92!\"'.!!Z-1!V-A!T/A!^1Q\"$3A\"&1!\"%11\"%41\"/;Q\"DBQ\"]C1#!=!\"S41\"811\"(.1\"\".1\"$0!\"'/Q\"21!\"70A\";1!\"C1Q\"N2Q\"Z4A#$4Q#%4Q#%4Q#%51#*6!#05A#)4Q#%4!#$5!#(6!#-4A##4!#!3Q\"Z4!#!5A#)6Q#05Q#061#+51#+4!\"`3Q\"U2Q\"Z4!\"T3A\"_5!#&5!#&5!#*41##3A\"S21\"S1!\"N1A\"S31\"T2Q\"Z3A\"_2Q\"[21\"W1A\"R1!\"N0A\"J1!\"N11\"P11\"Q1Q\"T1Q\"T1!\"N0Q\"L0!\"H/Q\"E01\"I0!\"H0!\"G0!\"H/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@.Q\"?.Q\"?/1\"B/1\"A/1\"A/A\"E0!\"G0!\"H0A\"K/Q\"E0A\"J/Q\"F01\"I1!\"N1!\"O11\"Q1!\"N1!\"N0A\"K0A\"J1!\"O1Q\"S3Q\"U2Q\"Z2Q\"[31\"T1A\"S11\"P11\"P2A\"Y4A\"[4A#$3!\"[41#\"31\"]4!\"T2A\"R3!\"X3Q#!4!#!,AR6)QB!3Q\"_4Q#%3Q\"`3A\"_3Q\"`4Q#(5!#+1Q\"P1!\"O4A#$61#05A#.4Q#%4Q#%51#)5A#.5!#+4Q#,5A#)51#)4Q#(5Q#051#.4Q\"]3A\"Q11\"E/1\"6.!\"'.1\"\".!!_.1\"\"/1\"#-Q!\\+!!Q+!!O0Q\"(71\"5;1\"2:Q\".6A\"*61\"-6Q\"55!\"31Q\"(-Q!W.1!X2Q\"'7Q\"0?Q\"FC1\"@B1\"*@!!W<1!L6Q!?4Q!;21!91!!;/Q!5.Q!:-1!7.Q!8.Q!:.Q!:1!!>4!!<61!>81!D=A!M@1!VCQ\"-BA\"7?!\"?9A\":2Q\"*-A!^+1!W.Q!\\2Q\"$21\"'11!_2A\"'9Q\"?C1\"[DQ#&Q\">B!\"7?Q\"!;A!I5!!?0A!7.!!6*Q!7*1!6(1!8)1!9'!!6&A!8'1!5&Q!6&Q!;(1!9(1!=)!!=(!!<*!!:*1!9,!!=/1!<2Q!;6Q!<&A!='A!9'A!9'Q!=+A!<,1!90!!<5!!;01\"H1Q\"T41#$5A#/5Q#05Q#04Q#-3Q#-/1#3.1#3/1#241#,6!#/51#(6!#&61#.5Q#-.Q#+.A#*/1#\"3Q#.51#(41#\"3A\"_5!#&61#'5A#/6Q#16!#,41##3Q\"]3!\"Y3!\"]4A\"]41##4A#$4A#$31\"^3A\"V2Q\"U1Q\"T1Q\"T31\"W31\"W31\"X3!\"Y2A\"U1!\"N1!\"N11\"Q11\"P11\"P1!\"N1!\"N1!\"N01\"I01\"I0A\"K0A\"K0!\"G01\"I01\"H01\"I/Q\"F1!\"N0Q\"M1!\"N1!\"N1!\"N1!\"N1!\"N1!\"N11\"P1Q\"T2A\"V3Q\"U3!\"X21\"X1Q\"S1Q\"T2Q\"W3!\"W3A\"]4Q#$3Q\"`3Q\"^3A\"_3A\"V2Q\"Z4!\"`4A##.A\"?$2!;#A!=/!\"=4Q#$3Q\"`5!#$0!2J$!!;!!Q)!!Q'#A!821\"U61#(5!#)61#--QR:#R!6#\"!<(A\"\"1Q\"X4Q#'5Q#061#05Q#,4Q#)5A#,5Q#061#061#04Q#*4Q#'5!#.61#-4Q\"\\21\"H0A\"2.A\"&/Q\"%/A\"$0Q\"%0A\"#,!!S*Q!L2!\"(61\")81\"&7!\".6A\"+8A\"?3A\"-,1!Q0!!]:1\";CQ\"AC!\"!81!G/1!:*1!3(Q!3&Q!8&!!2&A!:)1!E/A!Y4A\"+;Q\"6@1\"9F1B6HA21J1R)KQR%L1\"%M!B%MA2%LQB%JQB3F!29AQ\";>!\"87!\"50A\"#+!!M'Q!C'1!>(Q!;)Q!?,Q!=2!!;91!=A1!SF!\"C/1\"\"+Q!Y1!\"%5A\"011\"'0A!`:Q\"=G1#!?A\"Y41\"0.Q\"\".A\"!0!\"%01\"2.Q\"50!\":/Q\">/Q\"D1A\"R4!#!5A#*5A#051#/4Q#*2A#1/A#3/A#3/1#22Q#26A#,5Q#/5Q#06!#00!#&.A#-.Q#%.A##2Q#)5!#'4Q#%5!#&5A#+51#+5A#/6Q#06!#,5!#&3Q\"`3A\"W3Q\"_41#\"5!#&5!#'4Q#%3Q\"^2Q\"Z2A\"S2Q\"R3A\"V3!\"Y31\"[3!\"X3A\"V2!\"V11\"Q11\"P1!\"N1A\"S11\"Q1A\"R1!\"N1!\"N1!\"N0A\"J0A\"K0A\"K0Q\"L0!\"H1!\"N0!\"H1!\"N1!\"N1!\"N1!\"N1!\"O1A\"R1!\"N1!\"N21\"Q2A\"S3A\"S3!\"Y3Q\"U2Q\"P2!\"R3!\"U3A\"V3A\"_4A##5!#&4A#$3Q\"`2Q\"[31\"]31\"^4Q#%0!\"H%!QA!!!(\"2A-/1\"D4A#$4A#$0!\"L#1!@!\"A&!\"1'!!!(&AQK4Q#%5A#+6!#/-QR4!2!*%1Q?'1!Z-!\"64A#$5A#,61#05A#-5!#,5Q#/6!#05!#,5A#05A#/4Q#'4Q#'5Q#-4Q\"^2!\"J1!\"9.Q\"+01\"$0!\"$1A\"&1Q\",-1!T+Q!P4A\"08Q\",91\"$4A\"&4Q\"*8!\"801\"#,Q!T4A\"0B1\"LFQ\"0<1!L0Q!9*A!6'Q!3&1!3%Q!2&A!=.!!U81\":B!\"@HA23J1ARMQA?M\"A/HRQ&HC1!G#!!E31!ESA!G31!H#A!I3Q!J3Q!K3!)O3!4Q\"!CO!AOL12,DQ\"C;A\"@11\"\"(1!I)1!='A!>)Q!D-Q!?11!6=!!4Q\"0I1\"FNA!PG\"Q$BSA!A#A!:B!#1!!4.Q!E-1!M.1!I0!!@4115;\"!-?R!,BSA.E#A.D3A2BS!1B\"A6.!#.01#021#+/!#).A#\",!\"5,1\"4-!\"7.!\"L.!#\"0Q#\"/1#&.1#\"-Q\"C(1!S)1!Z/!\"<5Q#*5Q#+5!#)5!#)51#*+Q\"/+A\",/A\"E4A##4!#\"4A\"]3!\"]41#\"3A\"V1Q\"S1Q\"O3!\"Z31\"^31\"W2Q\"[2Q\"[2Q\"[31\"X3Q\"U3!\"Y21\"R2!\"R1Q\"T11\"Q11\"P1A\"R2!\"T21\"T21\"R31\"T1Q\"S1A\"R21\"X21\"V1A\"Q0!\"G01\"J0Q\"K2Q\"V31\"]3A\"^3Q\"`0A\"I+!\"(*Q\"%*Q\"%0!\"G5!#&5!#&5!#&11\"O'!!O$A!K&Q!P(Q!W!\"A&!!!(!!!)!B1)%AQD'1!P&Q!N'Q!Q\"\"1+!!A'!2Q(!1A*$1Q@&A!L'A!Q'1!](1\"&21\"Z5!#'6!#-6!#06!#/2A\"W.A\"<.1\":/Q\"G3A\"^41\"_3Q\"S3Q\"Z5!\"Y21\"F1Q\"/2A\",3!\")1A\"%5A\"8-!!U'Q!A01!`7Q\"&61\"%2A\"#8A\">4!\".(Q!G41\",I1\"WCA!Y2Q!9)Q!1&A!0%A!0(1!H9!\"5PQ\"8L!Q4E3A\"E#Q!?C!%2Q!5.A!G.!!J1A!>8BQ*E#1%ME1\"Q6A!P6Q!M6!!MF!!N&1!PF1!R'1!SW1!VW1!TFA\"R51$HSA'>RA>4!!Q0!!T+!!E)1!>*QA/5R!$D#Q!T$1$TAQWG1\"O/A!]'Q!<)1!E+A!L.!!A91!EGQ\"*BA\"P/1!_+1!P41\"411\"\"/1!Z?A\"OM1#961\"=,!!V-A!W.A\"$1!\"3.1\"=-Q\";.A\"=-A\"9/1\"80A\"N5A#.51#03Q#1/1#3.1\">+!\")+Q\"/,Q\"B.1#,.A#1.A#1.Q#*,A\":,1\"4*Q\"%,1\"1-Q\"Q-!#!-!#!-Q#!.A\"I'!AI$A1;(1!T1!\"M5Q#,61#)6Q#'41#%,A\"(+1\"*+1\"+0A\"J4Q#\"41##4A##4A##21\"U1!\"N1!\"M11\"P3!\"]3!\"Z3Q\"]3Q\"U3Q\"]31\"W3!\"X31\"X2Q\"X2Q\"Y2!\"R2!\"U2!\"U2A\"S2Q\"U2A\"T21\"S01\"J0Q\"M1!\"O1!\"O0A\"K/Q\"E0A\"L0!\"H/Q\"F2Q\"U3!\"\\4!#!0!\"H+1\")*Q\"%+1\"+*Q\"%.Q\"@5!#&5A#$5A#!(!QY\"Q!4#!1@'A!S'A!S!!A'!!A)!\"A'%!!B'1!O%!!J&1!M'A!Q\"\"Q*!\"A&!!!(!RA+'!!P'A!S'A!S&!!`)!\"#51#+51#.6!#061#031#!/Q\"@-Q\"8.Q\"\"Q&1QQ8-A!M.A1@6RQ,FTQ\"R'!!OV1!H%1!>T!!8C1!2\"A$/!1%/11%0B1&32A#8B1\">TA!I5Q!R'Q!W81!WG1!LD1(>QA<51!U,A!P*!!?*1!5/1!&A4!!T4Q%WRQSE1\"W/A!]&1!8)A!I-1!N/Q!;=1!LJQ\"@:Q\"D+A!T11\"#6A\":.!!W41\"/HQ\"]C1#(/Q\"#+Q!R-A!]0!\"1/Q\":-Q\";/1\";.Q\"+A!8+Q!4-QQ)21Q(?$1\"MF!!YHA!ZG!!L3!,:QQS0!![*!!D)1!9-!Q*@3!!U$Q!XQ!]EA\"R,!!N'Q!>+A!N-A!J1!!BE1!VGA\"P31\")*!!M5A\"721\"+.A!W.A\"8.A\"9.!\"9.Q\"8.1\"7/1\";/1\"C31\"O21\"F21\"761\"96!\"5/1\"#9!\"B+A!S)!!B6A\"0:1!^3Q!`51\"':Q\"I,Q!S+1!OBQ\"OJQ\"34Q!D*Q!1'1!0$Q!0(1!AAA\"GUA!`E!Q$DTA!F$!!1Q!7*Q!B-A!BC$1\"VWA!Q'!!:C1!.1A#*!!0*1!2-1!>-Q!81A!421A14AQ*52A'42!+2!14/!Q:-!!A*Q!=,1A23\"1(F5Q!UGQ![(A!OD1)>!!I01![*1!B)Q!60QA&ED!!Z31%TQR191\"A)!!>(A!<-1!R.1!C9A!JJ1\"6>!\"J)1!O.A!`5Q\"4.1!T41\"+L!#'C!#!,1!R*A!Q-A!]1A\"6/1\">/!\">.!\":.1\"9/!\"7.1\";/!\"D31#+1!#2.1#++A\"60A\"O3!\"_+Q\"+,1\"1.1\"U.A#,-Q\"@,!\"2)!!X01\"K*!!_+A\",-A\">-1\"_.Q\"I'1!U%11<+Q\"*(!!O(Q!T-Q\"32Q\"Q/Q\"H+!\"(-!\",-1\"6,1\"1+A\",/Q\"F2A\"V31\"V11\"P1!\"O1Q\"T1Q\"T0A\"K0A\"K3!\"R31\"Z4!\"W3!\"Z31\"]31\"\\3!\"[3Q\"]31\"W3A\"V3A\"V/Q\"E/1\"B0!\"G/Q\"F/1\"C/Q\"E0A\"K0!\"G0!\"I-!\"5,1\"-+!\"#+!\"!,1\"&+Q\"&+!\"'+!\"'-1\"90Q\"E+!\"$*!!^+!\"&+Q\"#&A!K#114*12$3!\"`,A\"1&Q!P'A!T%1A>&QAK%!!K+!\"&4!#$1Q\"S'Q!V'Q!Q\"Q1<$1!F'Q!Q,Q\"64Q#.6!#01!\"O,!\"20!\"L5Q#06Q#061#02Q\"V/Q\"B-!\"7/!\";.1\"7-A\":/A\";.Q\"9.A\">31\"O21\"F3Q\"78Q\"B4A\"3.1!`6A\"=)Q!G+Q!O7!\"/8!!\\1!!Y7!\"07Q\"?)1!G.Q!XI1\"RE1!_/Q!9)A!1&1!0\"QA-.!!SNQ\"MOAQ7B2Q!J51!=R1%,A!C,1!D7B1,UH1!WXA!=$1!-!Q$+!!)*A!9,1!>1!10821&BT1!LVQ!PWA!Q7A!PG1!L6A!C$!!82!&0!!4-!!B+Q!90AQ'ETA!Y8A!ZX1!P$!);!\"$-Q!U(A!B*Q1052Q$Q51![\"A?K1\"W,Q!W&A!7+Q!S-A!H2A!AFQ\"$FQ\"Q-A!Y-A!V6Q\"@.1\"!/!!_F!\"\\IA#/11\"))Q!C,!!R11\"40!\"C/A\">-A\"6-1\"5-1\"5/!\"6-!\"7.Q\"T0!#3/Q#0-Q\"G1A\"R6!#02Q\"]*!!\\-1\"9.1\"[,1\"9,!\"2+1\".4Q#.2A\"X)!!X,!\"1-Q\"F-Q\";(Q!Z%AAF3!\"U0Q\"L(!!S+!\"'-1\"7-A\"0,!\"*,A\",2A\"S3!\"U-!\".-A\";0Q\"L11\"P1A\"S11\"P2Q\"U21\"U1Q\"T11\"P11\"Q2Q\"U21\"Y2A\"T3!\"W3!\"X3A\"\\3!\"Z31\"^2Q\"[2Q\"[/1\"C0!\"H01\"I0!\"G0!\"H01\"J0!\"H0A\"K.Q\"@/Q\"A0A\"F,1\"1*A\"$*Q\"$*Q\"%*Q\"%-!\"33Q#\"5A#..A\"<(1!Q*A!]'A!O\"115%11J5Q#*6!#/0A\"I&Q!R'1!P'Q!Q&A!L'Q!R2A\"X5!#&3A\"^(A!W'!!O'1!P&A!M*1\"!31#\"51#051#02!\"X-Q\";1A\"U5Q#06Q#05A#04!##/!\"A/!\"6.1\"<0!\"<.A\"9-Q\":.1\"9.!\":3A\"L1Q\"84Q\"9:A\"M4!\".0Q\"!41\"7'Q!?*Q!P5!\"#6!\"!0!![:1\"85Q\"9)1!B2A\",KQ\"MAA!O,A!5(Q!1$Q!/&1!851\".U1\";IAA*A#1!K5Q!4Q1/+A!@/A1=F$!![91!N'A!2\"Q#+1!&*Q!0,A!@1AQ1;#!!L7!!W(!!O71!GV!!F%A!N'Q!VYA!XYQ!QG1!ADA!2!Q0+1!?)Q!:3!A)M&!![)Q!Z'Q!G!A<6!\"')Q!G)A!:+Q!)H51!\\$A)UQ\"D7A\"6&Q!;+1!J/1!P-Q!D>Q!ZJQ\"H3!\"*)1!K5Q\"84A\")-1!P@!\"FLQ#/5A\"7(Q!G+Q!T/Q\"+1!\"B.Q\"?/Q\"9-Q\"7.A\"6,Q\"5.Q\"<-Q\"@.1#$.A#3.A\"L2!\"T6!#06!#00!\"F+Q\"/,A\"5,!\"1,!\"1-A\"86Q#(5A#-.Q\"A)!!\\+1\"+,A\"5)1!`)!!Z3Q\"`4Q#%/1\"E(A!X,A\"(,1\"*+A\",,Q\"36!#,5Q#02A\"[+A\",/1\"C1A\"R1A\"Q1!\"N4!#\"4Q#%2Q\"V1!\"N0!\"H1!\"N01\"H01\"I11\"P31\"X3A\"\\3Q\"]31\"W3Q\"]31\"X0A\"K0Q\"K2A\"O1Q\"P0Q\"M0!\"H0Q\"L0Q\"M2Q\"P4!\"]4!\"^1Q\"L+A\"+*Q\"%*Q\"%,1\"22A\"W6!#.6Q#12A\"Y&!!F&Q!N%Q!?#Q!;01\"E7!#15A#/2Q\"Y$QAP'Q!Q&Q!M&A!K-A\"64Q#%5!#&4Q#$*!\"\"'1!O'!!O'Q!Q.1\"@51#/6!#/5A#03A##1A\"S3Q\"_6A#06Q#06A#05A#+/1\"B.!\"8/1\"8.A\"=-Q\"7/1\"9-A\"5.Q\"=3A\"L2!\"961\"<+1!O8!\"*8Q!_0A!\\;!\"@5Q\"9'A!B3Q\"-MA\"M?Q!R,1!5(Q!0$Q!0$A177!\"2VQ\"3I11%A31!KE!!3AA4*A!A01A=KEQ!ZYQ!IV1!1AA\"-!!'*A!3,A!?1A1'?$!!RXQ!OW1!6\"A\"-Q!%,A1,1\"A%@$!!W)A!Z)!!Q'!!?#!\"/1!2)Q!=,1A2@TA!Y81![I!!Q#!/;A\")+!!N)!!<*!!/ACA!Z%!#ZQR&>A\"H(1!C*1!J0A!Z-A!?;!!VJA\"<5A\"6)!!E31\"35A\"9-1!S=A\";MA#)8A\"E(Q!F*!!M/Q\"*2Q\"C.Q\"A.!\":-!\"5,1\"4,1\"4-1\"5-1\"7.!\"B.A#+.Q\"L3!\"Y61#05Q#041#)+1\"-,A\"5+A\",+1\"*/A\"F5A#+5A#)4Q##)A\"#,A\"0+1\"*(1!T+1\"'4A#$4Q#%3Q\"_*A\"$,1\"'+Q\"),Q\"*/!\"@61#16!#16A#101\"B,1\"00!\"G01\"I2A\"O5!#*51#-5!#&2Q\"Y11\"Q1!\"N0!\"H1Q\"R31\"T31\"Z41#!3Q\"^31\"^31\"]31\"]3Q\"U31\"Y3Q\"Z4!\"Z2Q\"[21\"R2Q\"W3Q\"[4Q#%5!#&5!#'41#$.!\"<+Q\"%+1\")1!\"N5Q#,6A#+6Q#161#1'Q!P%11;!!A1*Q\"%6!#,7!#16Q#/5!#&(1![&Q!N&A!O'Q!T3Q\"`5!#&5!#&5!#'+!\"''Q!Q&Q!N(A!Z5!#15Q#/6!#+5Q#04A#)41#'5Q#/6Q#06A#06!#05A#,11\"E-Q\"5.Q\"<.1\"9/1\";,Q\"6-Q\"5.!\"84A\"I2Q\">8!\"B?Q\"Y4Q\".2!\"+6!\":'Q!<)A!G5A\"!91!^41\"&81\"75!\"6(Q!A1!\"(L!\"MAQ!P,Q!2(Q!0$11/&1!55!\")V1\"8K1!'B#1!LEA!6!1.,A!J0!1;GU!![:!!MW!!3B1!,A1&*A!2-A!:/A1,6B1!B4A!BEQ!4B!!+AA&)Q!0)1!0+Q1(HFQ!Z)!!WYQ!J&!!4!Q**Q!B,115/1\"_-A\"A4Q#(6A#051#06!#00A\"O+A\"-,1\"4*1\"\"1A\"V5Q#-6A#&5Q#,01\"E(A!T+Q\".&AQK.Q\"A41#\"4A##4!#!0A\"H*A\"#+A\"-+A\",2Q\"U7!#17!#17!#15!#%-!\"6,A\"3.1\"=3!\"Z5A#.61#'5!#+4A#%31\"U1A\"Q1A\"S3Q\"Z5!#$5!#&41#\"4Q#%31\"]3A\"\\3!\"X31\"\\3!\"]31\"^4A#!4A#$3Q\"_3A\"]5!#$5!#&5!#&5!#'6A#$3!\"Z0!\"A11\"I5Q#+6Q#-6!#16A#17!#1-Q\"?#AA;%!AE31\"[7!#17!#16Q#/5!#$+A\"0&1!O%A!I.A\"=4Q#%5!#&5!#&5!#).1\"?'1!P'!!P.Q\"B6Q#+61#)4Q#.61#06!#05Q#06Q#06Q#06A#06!#05!#0/!\"E.1\"8.A\"<.A\"<.Q\"9,1\"4-!\"5-A\"731\"I2Q\";8!\"GAQ#&71\"81!\"&8Q\"H)1!H)!!E61\");A!]6Q\"-6!\",9!\"@(Q!J.Q!ZGA\"TCQ!V0A!7)1!0%!!/$Q!3/!!]OA\"GOAQ0BCA!K%A!;RQ$,A!?-A!C<31(WY1!VIA!>DQ!1AA\",!!*+1!7-1!;-111111&2B1$/1A&*A!.*1!3)Q!0-QA'J61!Z)!!XY1!M6A!4RA,+!!>,A11>#A!U8Q!XH!!P41*>!\"',1!U(A!=)A!4.!!S:A\"7LQ#&9Q\"G'A!E(A!M/1\"&2Q\"I/A\"D.!\"6-Q\"5,Q\"0,Q\"2,Q\"5-1\"5-Q\"6/!\"N+Q\"35Q#05A#051#06A#-4!#)+!\"&+!\"((A!W4!#.61#+51#(5!#,5!#+)!!X(!!S&Q1E1Q\"R4Q#%3Q\"`41#\"3Q\"_,A\"-,!\"--A\"251#$7!#17!#17!#16Q#02Q\"Z,A\"30Q\"B41#(7!#(51#*6!#*6A#%5!#&3!\"\\31\"^4Q#%5!#&5!#&4!#!3A\"^3Q\"`3A\"^2Q\"[31\"]31\"^41#\"41\"^3A\"_41##5!#&5!#&5!#&5!#&5!#'5!#)5!#&3Q\"_4A#(5Q#.6!#+6!#-61#07!#141\"`,!\"./!\"E61#.7!#17!#16Q#141##01\"I&!!H(1!\\31\"Z41#\"3Q\"`5!#&51#(1Q\"S&!!N)A!^3!#!4Q#06!#*5A#)51#06A#06Q#06Q#06Q#05Q#06!#051#0/Q\"H-A\"5.A\";.Q\"<-Q\"5,1\"4-A\"5-1\"511\"<3!\"=7A\"AAA##:1\"@0Q!]8A\"G+!!R'A!<3A\"!91![71\"!4A\"(9A\"D*A!P+!!NA1\"SHA\"-61!>*Q!1&1!/$A!/)A!FDA\"JTAQKEBQ!I%Q!DD!\"0Q16,!!A01Q8JF!!YIQ!T8Q!>4!!1!!\".QA$,!!1+1!8,!!7,1!7+1!3+!!3*A!5+Q!)9CA!TH!![*!!V81!F5A!01!1)Q!=.!12A3A!UX1!Z8Q!O#Q:5Q\"7+Q!U>!\"ELQ#,6A\"<(Q!E*1!K/Q\"*2Q\"I/A\"D-A\"6-Q\"5,Q\"*.1\">-Q\"<-1\"5.Q\"9,!\"1,A\"25Q#051#051#06A#+6!#0/A\"F)1!X*A\"\"51#/6!#)5!#&5!#&5!#*/!\">$A1='A!Q31\"\\41##3!\"\\3!\"\\3A\"_1Q\"Q-!\"301\"L61#.7!#16!#17!#17!#16!#+3!\"S4!\"^6!#/5Q#15A#-5Q#)5!#*5!#(5!#&5!#&5!#&5!#&5!#&3Q\"`4A##3Q\"`4A#$31\"]3Q\"`3!\"]3A\"_4A#$4A#$5!#&5!#&5!#&5!#&5!#&6!#)6!#+61#(6!#&6A#(6A#+6A#061#-7!#17!#16A#141#'61#-7!#17!#17!#16Q#14A#(3!\"\\.!\":1!\"P5!#&5!#&4A#$41##5!#(5Q#+.1\":0A\"M4Q#06A#&4Q#'5Q#'5A#/6!#06Q#06Q#06A#05A#06Q#+4Q#021\"T-A\"5.!\"8-Q\"5-Q\"5,A\"3-!\"/-1\"50Q\"@4A\">5Q\"BAA#!?!\"R1!\"#6!\"411\"'&1!7.Q![8A\"$8!!^1A!W9Q\"C0A\"#'Q!B8Q\"7KQ\"I@Q!T-Q!5(1!0$A!/%A!31Q\"\"O!\"=PQQ5D3A!I%1!>#A%.!A>+Q!C11A4BDA#R81!U9!!I6A!;D1!6C!!0!Q$.1A*.!A*.!A*0!Q)7SQ!FF1!T(!![*!!WI!!FEQ!2Q!.*A!=+1!88B1%OF!!UXQ!UFA!DQ!T4A\"&(Q!C'Q!7+QQ(J$Q!\\31+U1\"U61\"7'1!<01!_41\"$.Q!G?1!`J1\"L/!\"\")A!I31\"311\"$,A!RB!\"KL1#/21\"/)A!A)Q!P0A\"01A\"H1!\"G,Q\"6,1\"4.1\"93Q\"U3!\"V-Q\":-Q\"5,!\"1/Q\"G6!#05Q#04Q#*51#.5!#05!#--!\"20A\"L61#-51#)5!#&5!#&5!#&4!#'-!\"2/A\"B4A#$4!#!5!#'5!#)4A##4!#!2Q\"Z6!#,7!#17!#16!#17!#17!#16Q#15Q#15A#16A#(51#.6A#&5!#+7!#%5A#)5!#*5!#&5!#&5!#&5!#&5!#&4A#$3Q\"`3!\"]3!\"\\3A\"_4!#!4!#!4A#$4Q#%4!#!5!#&5!#&5!#&5!#&5!#'51#)61#(5Q#+5!#/61#-5Q#,5A#,6Q#06Q#17!#16A#16Q#17!#17!#17!#17!#16!#,4A#%3A\"_4A#$4Q#$31\"^3A\"^31\"^5!#&5Q#(41#&4Q#*5!#-4Q#'4Q#%51#'51#+5A#06Q#06Q#05Q#051#05Q#,6A#'3Q#$-!\"5-1\"8-A\"7-1\"4,!\",-A\"),A\"3.Q\"93!\"A5A\"B>Q\"`CA#\"7Q\"62Q\"061\"?(!!B*!!N61\"$9!!\\5Q![6Q\",81\"B)1!L.A!XCA\"UJA\"061!G+A!1&!!0%A!1(1!<:Q\"8RA\"1JQA(F3A!IU!!.1A3821&NV1!U7!!S6A!JRA<@!\"4.!!Z'Q!9'Q!0/A1(F$!![C!/TQ2J7A\"=(1!9-Q!S6Q\".0!!K9!!XFA\"K71\":(A!G0A\"'31\"2-Q!S81\"=O1#911\"&1!\"\"EQ\"PI1#.1A\"&)1!C+Q!T-Q\"&1A\"D2!\"S/A\"E,A\"5-1\".3Q#\"4Q#'4Q#&4Q#(11\"J1A\"Q6!#-5!#-4Q#&4!#!4Q#%5!#,6!#06!#051#05A#+4A#$3Q\"`3!\"]4!#!4A#&4Q#&5!#&3Q#!5!#+6Q#17!#17!#15A#061#07!#16Q#15Q#16A#16!#17!#16Q#161#16!#-6A#+51#-51#)6!#)6Q#'6A#'5!#*5!#&5!#&5!#\"5!\"`5!#&4!#!4Q#%3A\"_4!#!31\"]3Q\"`4A##3Q\"`4!#\"4Q#%5!#&5!#&5!#&5!#&5!#&5Q#(5A#+51#'51#.61#,5A#*6!#+6!#-5A#.6Q#16Q#16A#16Q#17!#15Q#16Q#16Q#15!#*4A#$4!#\"4A##4Q#(6A#15A#.41##5!#&5Q#,5Q#.4Q#%41##3A\"^3A\"_4Q#'4Q#06!#06!#051#04Q#)4!#!4Q#%4Q#'21\"[,Q\"7,1\"4,1\"2/Q\"F4A\"`1!\"N-!\"8.1\"61!\"75!\"@#1&9\"A)1A1+.!14.119-A1:.11:.A15/!A/4!1);\"Q&@#Q$HU1!O&A!O%!!NU1\"I\"Q3C!\"!7A\".,A!L'Q!;'1!3-Q!)@3Q!TCA)WQB-FA\"Y.!![)!!D2Q\"%4A\"$1A!H=Q\"#EA\"I2A\"*(Q!G3A\".3Q\"3-A!X9Q\";N!#-<1\"M,!!W*Q!H,1!\\0!\"/11\"K2!\"T.!\"<,Q\"2/A\"@4Q#%4Q#%4Q#)5!#/4!\"Z4Q#&5Q#05A#-4A#$41##4!#!5!#&51#-51#05A#,51#(4!#!4A#'41#$41##4A#&4Q#&41#\"3Q#!5Q#.6Q#16Q#17!#17!#17!#17!#16Q#161#16!#16A#17!#16!#17!#161#06A#06Q#(5Q#+5Q#)5!#)5!#)5!#&5!#&5!#&5!#&5!#&4!#!4!#!41#\"3Q\"`3A\"^3A\"_41#\"3A\"_41#\"5!#&4!#!5!#&5!#&5!#&5!#&5!#&5Q#(5Q#&61#*6A#,51#(5Q#+61#'6Q#)6!#.61#16Q#15Q#161#17!#161#16!#16!#15Q#/3A\"`3A\"_3!\"\\6!#-7!#17!#14A#*4A#$5!#&5A#*4Q#%4A##3Q\"`4A#%4Q#%4Q#,51#05Q#04Q#04Q#'41##3Q\"`4Q#$41#%.Q\"?,Q\"2,Q\"11Q\"P4Q#%3A\"^0A\"J.1\"80!\"62Q\"77!\"G@1#$EQ#*?Q\"R4!\"*8!\"?/A\"%(1!<-Q!Z6!\"!8A\"!6!!^5Q\".7Q\">.A!T)Q!J5A\"2E1\"LEQ\"\"71!;,Q!-(1!0&Q!0%A!1'Q!@1Q\"\">A\"@FA\"+I!QII210J#!!KD!!I$!!GT1!G4A!E4A!E$1!ET!!GDQ!JUQ!L%A!M%!!L%Q!KD1!IC!/G2!D@!\"\"7!\".-Q!V(A!?'1!4)!!02B!&ECA!UC!3TQRKBA\"Y+Q!O)A!F21\")4!\"'/Q!M;!![E1\"A71\"6)A!I.Q!`6Q\"@-Q!\\1!\"!F1#\"F!#(0!\"!*A!L,1!V.1\")0!\"=4!\"T11\"M-!\"8,Q\"72A\"W4Q#%4!#!4Q#%5A#,4Q#,51#05Q#/4Q#)41##4!#!41#'5!#'6Q#*5Q#,5Q#)4A##4Q#%5Q#14A#'4!#!4A##4A#$5!#&51#(7!#15Q#15Q#17!#17!#17!#17!#16!#15A#16A#.5A#-6A#16A#16!#.6A#)5Q#.5!#,5Q#)5Q#)6A#(6A#&5!#*5!#&5!#&5!#&5!#&5!#&41#\"3Q\"`3Q\"`3!\"]3!\"\\31\"]4!#!4!#!41##4!#!5!#&5!#&4Q#$5!#&5!#&51#'51#*51#(7!#(5A#-6!#*61#)5Q#+5Q#,6Q#16Q#16Q#16!#15Q#16!#161#16Q#16A#14Q#)4A##3Q#!6A#16A#16A#15Q#-4Q#%5!#&5!#'4Q#%3Q#!4Q#,5!#.4!##4Q#&5Q#051#04Q#,4Q#%3A\"_41#\"41#\"4Q#'1Q\"S,Q\"3,A\"51A\"S4Q#%41#\"2A\"W/!\"@/A\"81A\"731\":9A\"QCA#*FA#)!!D2A!3+1!0'Q!0&1!0&Q!4(1!:.1!Q61\"(=1\"0BQR&D11ZDAADF!15HRA1HBA.GRQ.HC1.H3!.H3!.F\"A1C1!>BQAT?Q!]9!\"'2Q!`-!!N)!!>'!!8(Q10.11,9B!\"LCQ&QQALNA\"L;Q\"C,A!R*Q!M4!\"-51\"&0Q!R71!WB1\"98A\"8*A!K.A!W7A\"<0A\"!/1![@!\"JH!#%71\";,!!V,!!S-1!^0A\"22Q\"O3Q\"W0Q\"K-A\"0.Q\"A4A#$41##3Q\"`4Q#%51#-6!#051#05!#-4Q#%4A#%4!#\"4!#\"4A#%51#+51#-4Q#)3A\"_5!#+7!#15Q#-3Q\"`4A#$41##3A\"_5A#-7!#15Q#161#17!#17!#17!#16A#15A#15Q#15Q#.5A#-71#+61#-5Q#.5Q#+51#)6A#%51#)51#)5!#(5!#'5!#&5!#&5!#&5!##5!#&5!##3Q\"`4!#!3A\"_4!#!3A\"_5!\"^3Q\"`3Q\"`3Q\"_5!#&5!\"^5!#&41#\"5!#&5!#&5!#&5!#(61#(5!#.51#'5!#*5!#(7!#&5!#+6A#16Q#16A#161#17!#151#151#161#16Q#161#15!#&5!#'6A#17!#17!#16A#141#(3Q\"_4Q#(4Q#%4A#$5A#-6Q#05A#-4A#$51#*5Q#.4Q#(4A#(3Q\"`4Q#(41#$4Q#%4A#&0!\"G-Q\"<3!\"[4Q#%31\"]3Q\"`2!\"L.A\"=/1\"61A\"73Q\"==!\"WCA#)FQ#*:!\";41\"+61\"<+Q!T(1!A-Q!R4!!_51!Y51!Y6A\"&:A\">3A\"/*1!I+Q!P7A\"7CA\"=G!\"!<1!=3A!0.1!0(A!0&A!0%A!5'!!2(!!@+!!K/A!^4Q\"*6!\",8!\"151\"0+Q!M,!!T3Q\"50A\"&/!!X=1\"HHA#/:!\"F.Q![*Q!U-A!Y.!\"01Q\"E41\"Z3!\"[/A\"=-!\"82Q\"Y4!#\"4Q#%4!#\"4Q#%61#)5Q#,5Q#/5!#&41#\"51#,51#-4!#\"51#)6!#)61#'4Q#%4A#&6Q#17!#15Q#/4!#$3Q#!3Q\"`41#%6A#061#15Q#15A#17!#17!#17!#161#16!#16!#15A#.61#-61#17!#)6!#.5Q#+51#+51#+51#'5!#&5!#'5!#'5!#&5!#&5!#&5!\"_4!#\"4A\"]3Q\"`41#\"4A#$3!\"]3Q\"`31\"\\4!#\"4Q#%3A\"^5!#&4Q#$4A#$5!#&5!#&5!#&5!#&5!#'5A#(6!#)6A#'6A#'5A#+51#,5Q#*5A#/6!#061#161#161#16!#15!#16!#15Q#16Q#15Q#06A#07!#16Q#15Q#15Q#161#/4Q#&4Q#%4Q#%4Q#%61#.6Q#06A#041#'4A##5!#'5A#+4Q#&41##5A#05Q#/4A#%4Q#%3Q\"`1Q\"S4!##4Q#%41##4Q#%2Q\"Y01\"F01\"8/A\"51Q\"571\"F<1\"UC1#)EQ#'=1\"F5!\"06A\";.A!`(!!E)A!L2Q\"\"5!!\\51!X5Q!]7Q\"581\"71A\"%+Q!J.1![7!\"4C1\"AF1\"0AQ!O9Q!D3Q!7.!!6+!!3'A!2'!!1'!!2'A!5&A!4&1!6&A!;'1!<&A!<'1!;&1!6'1!6'!!7(!!4)Q!7,!!1.Q!,4A1&?\"!%H\"13N!ARKABBC!\"R3!\",+A!M,1!T21\",71\"231!X2Q!S;!\"&Q\"KH!#'<1\"H0A\"#-1!T-1!Z.A\".0Q\"C3A\"U41#\"11\"Q-A\"90A\"L4Q#$4Q#'51#-41##41#\"5!#.5!#/6Q#$4A#$5!#,6A#05Q#041#\"4A#$4Q#&4Q#%3Q#\"5Q#06Q#17!#16A#141#'4!#\"4A#$6!#06A#16!#15A#16A#161#17!#16A#16A#161#161#*6!#+5A#'61#/5Q#/6!#/6!#*61#+5!#&5!#&5!#'5!#&5!#&5!#&5!#&4A#$4!#!4Q#%3A\"_3Q\"`3A\"^4!#\"3!\"]3!\"\\3!\"\\4!\"[3Q\"_4A#\"41#\"41##4A#$5!#&5!#&5!#&5!#&5!#'5!#)5!#'5!#)6A#&5A#+51#*5A#(5Q#/61#061#16A#15Q#16!#16Q#(51#15Q#16Q#16Q#16Q#17!#16A#16!#16A#16A#15A#+3Q#!4!#!4!#!61#.6Q#06Q#06A#04A#$4Q#&4Q#+4Q#&41##5A#06Q#051#-4!#\"4Q#%4A#)4Q#+4Q#%41##5Q#*4Q#)2A\"X/1\"D.A\"70Q\"02A\"971\"FA\"CD1\"CCQ\")A!!T=!!E8Q!;4!!41Q!5-Q!4,Q!1+!!1+1!0*Q!/*!!0*Q!0+1!1-!1+2!A'41A,8QQ*@1A'E114K!!UJAR0FQ\"E=A\"B3!\"),A!N,A!T2!\"*61\"25!\"$1Q!X81!];Q\"-81\"7/A![+1!M2!\"+7!\"@0Q\"&0!\"!E!1EC!ADF11DGAQKGQ!SFQ\"$H!\"5E1\"C@!\"C8A\"9A\"K?A\"^C!#&DA\"\\=A\"I81\"97A\"=5!\"6,Q!X*A!C*A!L.A!X3!!Y4A!Z4!!W4A\"\"5Q\"$8!\"07Q\"93A\",01\"!.1!_-1!]/Q!Z1!!`1A\"%6A\"-8!\"49Q\"39A\"49A\"5<1\";:A\"::A\"9:!\";61\".2Q\"(0Q\"!-A!Z-!!V.A!\\01\"!41\"+7A\"75A\"&4A!]3Q!Y5Q!^8A\".9!\"821\"(-Q!S-1!U01\"%21\",01\"!/Q!_8!\"8BA\"V?!\"R7!\"7.Q!`-A!Y,Q!]-1\"-.Q\":21\"P4A#\"4Q#.4Q#'3Q\"`4!#\"4A#%5Q#/6Q#06Q#061#/4!##4Q#%4Q#&3Q\"`5Q#/6Q#06!#06A#05Q#04A##3Q#!4A#%6!#.5Q#06A#06!#16A#16Q#16A#16Q#/6A#15Q#15A#.6!#-5A#15Q#16Q#15A#15Q#16!#15A#)61#)6A#$5Q#&51#,5A#*61#&51#)5!#&41#$4A#$4Q#$4A#$5!#&5!#&4Q#\"3Q\"`4Q#$3Q\"^3Q#!3A\"_31\"^3A\"_2Q\"[3!\"Y3!\"Z4!\"[31\"]3A\"_3!\"]3Q\"`3Q\"`41#\"2Q\"[4A#$3Q\"`5!#&4!#!5!#&5A#*51#)5!#(5!#&5!#*5!#&5A#)5A#-6!#,5Q#.6!#(5!#)51#(6Q#(5A#16A#15Q#16!#16!#161#15Q#.5Q#/51#16Q#15A#04Q#*61#06A#05Q#06A#06!#061#041#%4Q#%4!#!51#,6A#061#061#061#04A#'4A#$4Q#%4A#$4A#*6Q#06Q#06A#05!#-3!\"Z/1\"C.Q\"7-A\"11A\"44A\"791\"D=1\"VB!##D!#\"B1\"X:Q\"D71\"771\"@2Q\"1+Q!Q)!!G*!!G-Q!Z3A!`5A\"!4Q!\\5A!Y6!\"\"7A\"'7Q\",71\"271\"341\",2!\")1!\"\".!!]-!!U-!!Q,1!O,A!P,1!V,1!V,1!X.1!^11!_11\"(4!\"15A\"/71\"561\"261\")3Q!`3Q!\\6!!]7Q\"&8A\"25Q\"/1Q\"&,Q!Q+Q!W2A\")3A\"31!\"%/1!_41\".>!\"J@A\"W;A\"A21\"*.1!]-A!Y-Q!^-!\"+/Q\"92!\"L41#%4Q#/4Q#(4Q#%4Q#%4!#$5Q#-6Q#06Q#06Q#05A#,4Q#%41#\"4A#$51#(6A#05Q#061#06Q#05Q#03A\"_4!#\"5A#.6A#06A#06!#05Q#16A#17!#17!#17!#15A#151#17!#'6!#/5Q#161#16A#16!#16!#16A#&5!#*5!#(5!#*6!#)51#'5A#*5!#*5!#&5!#&5!#&4Q#%3Q\"`4Q#%4!#!4A##4A\"]3!\"]4A#\"4!\"^4A\"[3!\"\\31\"^2Q\"\\3!\"\\31\"]3!\"\\2Q\"[3!\"]3A\"_2Q\"[3A\"_3Q\"`41#\"3A\"_3A\"_3!\"\\4A#$4Q#%4A##4A#$4Q#%5!#&4A#$41##5!#&51#'61#&5Q#-5A#,51#*7!#'5!#,5!#*5Q#*5Q#16A#161#16A#16!#161#+5A#,61#-5A#16A#06Q#06Q#061#061#06!#061#061#061#03Q##3Q\"`4Q#*61#06A#05Q#06A#06Q#051#*4A#$41#\"4A#$5Q#06Q#061#06A#05A#031\"`0Q\"M/Q\"7.A\"70!\"62!\"461\"@:!\"I=Q\"WAQ#\"E!\"_AA\"W;A\"@8!\"971\";2!\".-Q!^+Q!J(Q!I+A!O.Q!]2A!`5A\"$51\"\"5A!^4Q!X5!!X4A!\\4A!`5!\"!61\",71\"-6Q\"081\"48A\".61\"+71\"07A\",5Q\"+5A\"+61\"*4Q\"!3A!\\6A!\\5Q!_7Q\"'9!\"+7!\"-51\".0A!`,!!R+1!M-Q![2A\"*4A\"71A\"+0A\"%61\"1=Q\"M@A\"T;!\"I4!\"2.1!`-A!Z,Q![-!\"#.1\"10Q\"C1Q\"T41#%5Q#051#-4A#$4A#$4A#&6!#061#06!#06!#06Q#041#*3A\"_41#\"51#*6A#05Q#05A#06A#06Q#05Q#04Q#)5A#.61#061#06!#061#.5A#17!#16Q#16A#16A#16A#/61#(5!#+6!#-5!#*61#15Q#16!#151#15A#,51#'5!#&5A#'6!#)51#(51#'5!#&5!#&4A##3A\"_41##41#\"3Q\"`4A#$4!#\"3Q\"`3Q\"`3!\"\\3!\"\\3Q\"`2Q\"[3Q\"\\4A\"^31\"]31\"]41\"`3A\"^41\"Z4!#!3A\"]4!#!3Q\"_4A#$31\"]4Q#%41##3Q\"`4A#$41##4A#&3Q#\"5!#&4A#$41##4!#!5!#'5!#&6Q##5A#.6A#$51#)61#'6!#(6!#(5Q#,6!#16Q#15Q#16!#16!#.51#-5A#)6!#06!#06Q#06Q#06Q#061#06!#06!#061#061#06!#04A#'4Q#*61#06A#05A#061#05A#06!#05A#)41#$3Q\"`5A#06Q#061#06!#06Q#05Q#/41#$2A\"Q/A\"C/A\";/1\"02!\"44A\"98!\"@;1\"L@1\"_C!#%CA#!BA\"U=A\"I81\"95A\"53Q\"11!\"$-A!W+1!Q*Q!L*A!S.Q!Y/Q!^1Q!_2!!_31!_3Q!]2Q!]1Q!S1Q!S01!R/A!Q0!!Q/1!P11!M3A!V4A!X41!^51\"#6!\"!6!\",61\"-51\"+0A!_.Q!],1!V-1!V-A!X01\"(1A\"*0A\")0!\"%2Q\")8!\";?1\"NAA\"V=Q\"K7A\"60!!`.!![-!!Y,Q!\\.!\"&-Q\"70Q\"D1A\"R41#%5Q#/51#04Q#'4A##4Q#'5A#.61#06!#05Q#06Q#06!#041#&4A#%5A#*61#06A#06!#06!#06!#06Q#05Q#061#06A#05A#06!#.5A#-5Q#/6!#15Q#16A#16A#15Q#051#+5!#*6A#%5A#)5A#/5Q#061#06!#.51#)5!#&5!#&5!#&5!#(5!#'5!#*4Q#%4Q#%4Q#%41##4!#!5!#&5!#&4Q#$4A##3Q\"_4!#\"3Q\"`4!\"^41\"]3!\"\\3!\"\\3!\"Y4!\"]2Q\"Z3!\"X3Q\"V31\"]2Q\"[31\"W3Q\"\\3!\"Z31\"]31\"]3A\"_3Q\"`3Q\"`3Q\"`3!\"]3Q##41#\"41#\"5!#&5!#&5!#&4A#$4A#$5!#&5!#)61#&5!#/61#'5!#+5!#(5!#(5!#+5Q#/51#16!#161#15!#+61#$5!#(5Q#,5Q#061#06Q#06A#05Q#06A#05A#/5Q#/5Q#06!#061#05Q#06A#06Q#06Q#06A#06!#06!#06Q#051#/4Q#'4Q#-61#061#06!#051#061#06Q#051#.3Q##2Q\"R01\"J/!\"@/Q\"41A\"73Q\"86Q\"B;1\"N?A\"[AQ#%E!#'D!\"`AQ\"V=!\"H8Q\">61\"85!\"13!\"03!\"'-Q!],Q!R+1!O+!!J)1!J+1!S+A!S+!!N*Q!M*A!K+A!K,!!N,Q!P-Q![/A!_/1!T-Q!R-A!^,A!S+A!O*1!E*1!R.!!T01!`11\"*2!\".1Q\",2Q\"+1A\"'6!\"61\"W@A\"T:A\"I4A\"10Q!`-A!Z,A!X,Q!Y+A\"$-Q\"1.A\"=0A\"K2!\"U41#%5Q#06A#04A#*3Q\"`4Q#(6Q#05Q#06!#06!#061#06Q#05Q#04Q#.5A#/61#06!#05Q#06!#06!#06Q#06Q#06Q#06A#06A#05A#.6A#&51#-7!#*61#17!#161#161#15A#,5Q#)6!#(5!#+61#'5Q#/51#(6!#+5!#&4Q#&5!#&5!#&5!#&5!#&5!#)5!#&4Q#%41##4!#!3Q\"`5!#&5!#&5!#&4!#!3Q\"`31\"^2Q\"[31\"]2Q\"[2Q\"[3A\"[4!\"^31\"]3!\"]3Q\"Y2Q\"[31\"Z3A\"]3Q\"_3!\"[3Q\"`31\"Z3A\"_3!\"\\4!#!31\"^3A\"^3A\"_41#\"4!#\"41##4A#$41#\"41##5!#&4Q#%3A\"_4A#$5!#'51#+5A#'51#'5!#&5!#&5!#&5!#&5!#'61#-6!#,6Q#+6!#/5A#,61#(5A#&5Q#,6!#061#06Q#05Q#051#06!#.5!#)5Q#,6!#/6!#06A#06Q#06Q#06!#05Q#05Q#061#06Q#061#06A#05Q#06Q#06Q#06A#061#06!#06A#06Q#061#051#-4A#!21\"T0Q\"N1A\">11\"921\"831\":71\"A9A\"J3!\"'/!\"\"-Q!Y-!!X,A!Z,1\"\",1\"/-!\"6/A\"B1!\"O3!\"Y41#$5!#06Q#06!#051#,61#/6!#05A#05Q#051#05Q#061#06Q#06Q#06A#06A#06!#05A#05Q#+6Q#+61#-6Q#06Q#06!#061#05A#/5A#-5A#)51#,6!#/6Q#16!#151#151#/5Q#'5!#'5!#*6A#$51#)5Q#'6!#.5Q#*4Q#%41#\"41##4A#$4A#$4Q#%5!#&5!#&4!#!3Q\"_4!#\"3Q\"`3A\"_4Q#%3Q\"_3A\"_3Q\"`3Q\"^3A\"]3A\"]3!\"\\2Q\"[4!\"]3A\"^3A\"X3A\"Z31\"]3Q\"X31\"Y3!\"X31\"Y3A\"Z41\"^4A\"[31\"^4!\"^3Q\"[2Q\"[31\"]2Q\"[4!\"^4!\"\\4!#!3Q\"`5!#&4!#!41##3A\"_4!#!4A##4!#!5!#&6!#)7!#%5!#)5!#&5!#&5!#&5!#&5Q#*5!#+6A#(5Q#/51#*5!#+6!#)4Q#'51#,51#06Q#05Q#06!#05A#.7!#%4Q#+5!#-6!#051#06A#06Q#06!#05Q#06A#06!#05Q#06A#06!#06Q#06Q#06Q#06Q#06!#06!#05A#05Q#06!#06Q#06!#05!#-4!#%3!\"Z2!\"L0Q\"B1A\"91Q\"72A\"941\">6Q\"C:Q\"O=Q\"W@!\"_CQ#(CQ#)EA#'EQ#%AQ\"V?Q\"NQ\"O?!\"[A1\"X@!\"Z>A\"R9Q\"?4!\"00!\"#.1!]-A!Y-1!X,!!X+A\"!+A\",-Q\"5.Q\"<0Q\"L1!\"O1Q\"T4Q\"`5Q#+6A#06Q#06Q#06Q#06Q#05Q#06A#06!#05Q#061#06Q#06Q#06Q#05Q#05Q#051#-5!#*7!#&51#06A#061#06Q#05Q#051#051#)5A#)51#*5A#-6!#05A#16!#15Q#-61#)6!##5!#&5!#&5!#*51#+6!#'51#(5!#&4Q#$31\"]4Q#%5!#&4A##4Q#%5!#&5!#&4!#!31\"^3A\"_4!#!31\"]3Q\"`4!#!4!#!31\"]3A\"\\31\"\\3!\"X3!\"[3Q\"`31\"X3Q\"^31\"W3A\"Z31\"]3!\"Y4!\"]3Q\"Y41\"]3A\"V2A\"[2A\"Z31\"W2Q\"Z3A\"_31\"]4!#!31\"^3Q\"X31\"]3!\"\\4!#!5!#&41##3A\"_41##3!\"\\3A\"_4!#!4A#$41##4Q#*5!#(5!#&41##4A#$41#\"5!#%6A#&4Q#,5A#)5Q#-61#$5!#%4Q#%4Q#%5Q#+5Q#06!#06A#05Q#,5A#061#$51#%4Q#*6A#05A#05Q#06Q#06!#051#.5Q#-4Q#)51#-6A#06!#06A#06Q#06Q#06Q#06!#05Q#.3Q\"[2A\"Z4A#&6A#.7!#07!#16!#16!#15!#'4!#!2A\"W3!\"C2!\"@1Q\"81Q\"73Q\"861\"B7A\"D:A\"L<1\"S?1\"^A!#$BA#$DA#)E1#%E1#\"E!#\"D1\"YB1\"_AQ\"Z@A\"Y@!\"Y?A\"Q>1\"N>A\"O?A\"XA1\"W@A\"YAQ\"]CA##CQ#&BQ#$A!\"`=1\"R:!\"F7!\"<3A\".0Q\"$-Q!\\-1!X,A!X,Q!X+Q!X,1!]+!\"\"+Q\"0,A\"6-1\"90!\"H1!\"N11\"P2Q\"[3A#!6!#06Q#06Q#06Q#06Q#06!#06!#06!#05Q#-6A#+5Q#06Q#06Q#06Q#06!#05Q#05Q#-4Q#)6A#'4Q#16!#06Q#06!#06!#05Q#06!#$6A#%51#(6!#&6Q#+51#06!#.51#+5!#*5!#&5!#&5!#&5!#)6A#%51#(6!#%5!#'5!#&3Q\"`4A#$4!#!41#\"5!#&4!#!5!#&3Q\"`41#\"31\"^31\"^4!#!3!\"\\31\"^2Q\"[2Q\"\\3A\"Y3A\"_3A\"_2Q\"[4!\"\\31\"]31\"X3A\"[3Q\"\\4!\"X3A\"Y3!\"Y2Q\"Y3A\"X31\"X3Q\"^31\"]4!\"X2Q\"[3Q\"^3A\"_2Q\"[3A\"_31\"^31\"]31\"]3!\"\\2Q\"\\3A\"_41##41#\"4Q#%3A\"_3A\"_3Q\"`4!#!4A#$5!#&5!#'5!#*4A#$3A\"_3A\"_4Q#%5!#'6A#\"51#-5A#)51#'5!#&4Q#%4Q#%5!#&51#(5Q#.61#/5Q#.5Q#*5A#*4Q#*4Q#%5!#/5Q#06!#061#061#06!#06Q#(5!#.6A#&51#05!#05A#06Q#06Q#06Q#06!#06!#04Q#*1Q\"R11\"O2A\"Y3A\"^5!#-6A#06A#06Q#06Q#061#.5!#'3A\"]31\"Q3Q\"L2!\"C21\";1Q\";31\";31\";3Q\"<7!\"@8!\"@8Q\"B:!\"M!\"X>Q\"Y?A\"Z?A\"Z@Q\"Z?Q\"Z@!\"Z@1\"\\?Q\"Z?1\"W=!\"X51\"421\".0A\"'/1!`.A!]-A!\\-1!Y,Q!Y+Q!X*1!W)Q!Y*Q!`*A\"#*Q\"',!\"1-A\"9/!\"A0A\"J0Q\"M1!\"O2!\"V4A#&5Q#06Q#06Q#06Q#061#061#05!#/51#.6A#*61#05Q#06A#05Q#061#06A#05A#05Q#-5!#'51#)5A#-5A#,6Q#06Q#061#05Q#.4Q#+5A#)4Q#(5!#*5Q#+6!#,6!#+5Q#)6A##51#$4Q#%5!#&5!#&5!#&51#'51#(5!#&41##4!#!3A\"^4!#!41#\"41##4Q#%4A##31\"^41#\"3Q\"`2Q\"[4!#!31\"^3!\"\\3A\"_41#!3Q\"X31\"Z3!\"[3!\"[3A\"]3A\"[4A\"Z3!\"[31\"\\3!\"Z3!\"Z31\"Z3!\"Y3!\"X31\"X31\"^31\"W3Q\"\\31\"Y3Q\"Z3A\"Y3Q\"Y3Q\"`3!\"]31\"]31\"^2Q\"[3Q\"`31\"\\41\"]3Q\"`4A#$3A\"_4!#!41##31\"]3Q\"`4A##3Q#!5!#&5!#&5!#&41#\"4!#!41##3Q#!4A#'5!#&5Q#,6!#(5!#*4Q#%4Q#%4Q#%4Q#%5A#&5Q#)5Q#.5Q#.6!#%51#(4Q#%4Q#%5!#*5Q#051#06!#06!#06!#051#.4Q#-4Q#)5A#05Q#05Q#05Q#05Q#06Q#061#051#05!#(1Q\"R01\"I0Q\"M11\"P31\"]4Q#'5Q#06!#06A#06!#06!#05!#&4!#!3Q\"[3A\"T3!\"O3!\"E1A\"D1A\"=0A\";01\"<1Q\"81Q\"62A\"231\"131\"12Q\".2A\".1!\"00Q\"10A\",/1\"$/1\"$.1\"\".1\"\",Q!`.!!^-1\"#-A\"\"-Q!_.!!^,1\"!,!!_*A!Z*1!X(Q!W(1!Z(1![*A\"$+A\",,!\"2,1\"4-A\"9/A\"C0!\"H0Q\"M11\"P31\"^4Q#+5Q#05Q#06A#06!#051#04Q#.4!#%41#$4Q#,6!#+5Q#/5A#061#06Q#061#05Q#051#-5Q#%5Q#)6!#+61#*6!#05A#05A#04Q#.6!#&4A##41#\"4Q#&5A#+5A#*61#)5Q#)5A#%5!#&4A#$4A#$41#\"5!#&5!#(61#(5!#'4A##3Q#!3Q\"`41##3Q\"`3Q\"`4A#$3Q\"`4!#!31\"^2Q\"[41\"[31\"]3!\"\\4A##41\"^4!\"]31\"X31\"^2Q\"[3Q\"\\3!\"Y3Q\"U3Q\"\\3Q\"U3Q\"\\31\"Y3Q\"Z31\"W31\"W3!\"Y3!\"X21\"V3Q\"U3Q\"U3!\"\\2Q\"[3A\"]3Q\"W31\"\\31\"X31\"X3Q\"Y3!\"\\3Q\"`3Q\"X2Q\"[3!\"[4!#!3!\"]4!#\"31\"]3Q\"`2Q\"[2Q\"[31\"^3A\"_41#\"4A##5!#&3Q\"`4!#!31\"]4!#\"3!\"\\5!#&5!#'61#&51#*4Q#%4Q#%3A\"_41#\"4Q#%4Q#&51#)6!#.5A#/5!#(4Q#'4Q#%4Q#&4Q#'4Q#(5Q#-5Q#*5A#/5Q#06A#(5Q#'5!#+5!#-5!#/51#06!#05Q#06!#05Q#05A#05!#.1Q\"S0Q\"M0A\"K0Q\"L0Q\"K3!\"W3!\"Y4!#'5Q#(4Q#*4Q#)31\"]3!\"Y2!\"V1Q\"R0Q\"J01\"I/Q\"E/A\"E.Q\"@.A\"<.A\";.A\";/1\"6/!\"501\"501\"4/Q\"0/Q\"./A\"0/1\")/1\"(/1\"%.1\"$,1\"(,1\"\"+1!`*!!Z(A!W'A!W'1!R&Q!N&1!O&A!Q'Q!W(1!Y)1!_*1\"!*1\"\"*A\"\"+Q\"/.1\"=01\"H0Q\"M11\"P3Q#\"51#.61#061#06!#04Q#*4!#&2!\"W0A\"L2A\"X5!#+5!#.5!#/5A#06!#061#05Q#05!#04Q#,4Q#&5!#(51#*5Q#,61#-5Q#,5Q#,6Q#$4Q#)4!#\"4Q#%4Q#%51#(5!#(5Q#*5Q#+5!#,4!#\"41#\"31\"^3!\"]41#\"4A#$5!#&4A#%3A\"_4!#!3!\"]3A\"^31\"^4!#\"41##4!#!41#\"31\"^4!#!3A\"\\31\"[3!\"\\3Q\"]31\"Y2Q\"[3Q\"^3Q\"\\4!\"W3Q\"^3A\"V4!\"]3!\"[3!\"[3!\"[3!\"Z31\"[3A\"W31\"X31\"X3Q\"V3A\"V2Q\"Z2Q\"Y3!\"Y2A\"Y3A\"]31\"W3Q\"]4A\"V2Q\"[2Q\"Z3Q\"Y3A\"Y3A\"Y3A\"Y4!\"^3!\"]3!\"\\3!\"\\4!#!31\"]3Q\"`4!#!31\"]3A\"_31\"]31\"^3A\"^4!#!4A#$31\"^3Q\"`31\"^3Q\"`4!#!4Q#&41#&4Q#'4Q#(4Q#%41#\"3A\"^4A#$4Q#%4Q#%6A##51#-5Q#&6!#)5!#&4Q#%4Q#%4Q#%4Q#%6!#-5Q#-71#*5Q#05Q#,6!#&5A#$4Q#'4Q#+6A#'5A#05Q#05Q#05A#051#04Q#,21\"Y0A\"L0Q\"N/Q\"F0Q\"M0Q\"M1A\"Q2!\"P2!\"W21\"W2A\"Y1Q\"P1Q\"T0Q\"L/Q\"F.Q\"@-1\"9+A\",*Q\"%*1\"!*1\"!*!!`*!!`)!!\\)A!](1!Y(1!Y(!!X&1!S%A!S%A!S%A!S$A!R%A!O%1!M$A!J$1!J$A!J%1!K$!!I$A!J&!!N%!!K&A!L'!!N'1!O'1!O)!!V*!!^-A\"6/Q\"F0Q\"M21\"W3Q#%51#05Q#/6!#/4!#!2A\"Y1!\"O0A\"L0A\"K1A\"T4A#)6!#,6!#-5A#-5A#.4Q#.51#*4Q#)4Q#)4Q#&4Q#%5!#*5A#)5Q#.6!#,51#,5!#'4Q#&41#\"41##41##4Q#%5Q#(61#(5Q#)4!##4!#!4!#!41#\"3Q#!3Q#!5!#&5!#&4Q#%4A##3A\"_31\"]31\"^31\"^3Q\"`31\"]3Q\"`31\"^31\"^31\"]31\"]3Q\"]3!\"Z3Q\"`2Q\"[2Q\"[2Q\"[2Q\"Z3!\"Y3!\"Y3Q\"]31\"]3A\"Z3Q\"Y3A\"Y41\"]2A\"V3Q\"U2Q\"[31\"X31\"X21\"X3!\"U2Q\"S3!\"X3Q\"U2Q\"U3!\"Y31\"W2Q\"Z2Q\"[4A\"^4!\"Y3!\"]3A\"\\3A\"\\3!\"\\3A\"Y31\"^3Q\"X3!\"\\3A\"V3!\"\\4A\"]3!\"X3!\"X31\"]3A\"_2Q\"[3Q\"`4A##3Q\"`4!#!3A\"_3A\"_2Q\"[3!\"]4!#!41#\"4Q#$4A#$4Q#%41##41#\"31\"^31\"]4!#!4Q#$5A#)5!#,6!#%5A#,4Q#%4A##4A#$3!\"]4Q#%4Q#*5Q#*51#+51#+6!#+4Q#(4Q#%4A#$2A\"Y2!\"T3A\"]5A#)5Q#,5A#+5Q#,5Q#,4Q#\"11\"Q0A\"J/Q\"E0A\"K0!\"G0!\"G/1\"C01\"J0Q\"M0A\"K0Q\"M1!\"O11\"P11\"O01\"I.Q\"@-!\"5+!\"&(!!T%!!K%A!D$1!A#1A>#1A>$1Q=#1Q>#1A>$!A=$!A=#AQ?#QAA$AA:#AAB$AA:#AQ?#A!<#A!;$A!4#1!9#A!6#A16#113#Q19&A!G)A!\\-!\"30A\"J0Q\"M1!\"N11\"P3A\"]31\"`31\"`11\"P0A\"K01\"J/Q\"E0A\"J0A\"K2!\"U4Q#&6Q#(6!#06Q#(5A#.6Q#'4Q#(4Q#*4Q#%4Q#%4Q#%4Q#(6A#'5A#+5Q#&6A#*51#$41##4A#$31\"^4!#!4Q#%4Q#'4Q#'4A#&4A#$4A#$31\"]3A\"_3Q\"`41#\"5!#&5!#&41#\"3Q\"`3!\"\\3Q\"`3Q\"`3!\"]3!\"]31\"]3A\"_3A\"_3A\"_3!\"]2Q\"Y3Q\"]3A\"V31\"]31\"W3!\"[3Q\"`31\"X4!\"\\31\"^3A\"W3A\"V3!\"X3Q\"[3!\"X31\"X3A\"V3!\"X2Q\"X21\"X31\"U3!\"T1A\"S2Q\"W2Q\"Z2!\"U3!\"W21\"U31\"T31\"W3A\"W31\"X31\"X2Q\"Z3Q\"Y31\"Z4!\"W3!\"]31\"[4!\"[31\"Y41\"]31\"]41\"Y3A\"_3!\"\\2Q\"[4!\"Y2Q\"[3A\"]3A\"_31\"^3A\"_3A\"_4!#!4!#!31\"]41\"`31\"]3Q\"`41##4Q#%4Q#%41##3A\"`41#\"4!#!31\"]3A\"_41#\"4A#&51#*4Q#(4Q#&4Q#$3Q\"`4A##4!#!4Q#$51#'5!#&5!#+5A#*5Q#*4Q#)4Q#(3Q\"_/Q\"F/Q\"E1!\"M21\"V41#!5Q#(5Q#,5Q#,4A#&2A\"Y1!\"N0!\"H0!\"H/1\"B+Q\"**A!`*Q\"\"+!\"%-!\"5.Q\"?/A\"D/A\"D/A\"D/A\"D/Q\"F/!\"?+Q\"+*1!Y(1!R&!AK&1Q@$AQ;#AA8#!!:#Q!9\"A!:\"A!9#1Q8\"!!1\"!11\"1A5\"112#!!2#Q!2\"A!1\"!!1#!14#AQ4#1!;'!!O*A\"#-Q\"8/Q\"F0Q\"M0Q\"M0Q\"M0Q\"M01\"I1!\"N0A\"K01\"I0!\"H/Q\"E01\"I0A\"K11\"O3A\"^4Q#+5!#*6!#+5Q#-4Q#(4Q#'4Q#'4Q#%4Q#%4Q#%4Q#%4Q#%4Q#(51#&51#'51#&4!#!3A\"_3Q\"`41#\"41#\"4!#!4Q#%4Q#&4Q#&4A##41##3A\"^3A\"^4!#!3A\"_4A#$4!#!41##4!#!3Q\"`31\"Z3A\"Z3A\"^3!\"]31\"^31\"^4!#!3A\"^41\"Y3Q\"^3!\"[3!\"[31\"X3A\"[41\"`31\"Z3A\"Y31\"Z31\"Y4!\"[31\"[41\"X31\"X3A\"Y2Q\"Y2Q\"W21\"W2Q\"Z2Q\"Y1Q\"T3!\"S3!\"S1Q\"T2!\"U2Q\"T2A\"X3!\"U3!\"Y3Q\"U2Q\"[31\"W2Q\"[3Q\"U3!\"Y31\"]3Q\"Z3Q\"Y3Q\"`3Q\"X31\"^3!\"]3Q\"Y2Q\"[31\"^2Q\"[31\"]3A\"_3Q\"`3!\"[3Q\"[3!\"]4A\"\\3Q\"`3Q\"_3Q\"`3A\"_3A\"^3Q\"Z3Q\"`2Q\"[4!#!4!#\"4A#$3Q#!41#%4A#$3Q\"`3A\"^3A\"^3Q\"_3Q\"`3Q\"`4Q#'4Q#'4Q#%4Q#%4!#\"4A##3Q\"`3Q\"`4Q#%4Q#%4Q#)5Q#)6!#\"4Q#)5A#)41#!11\"P/1\"C/Q\"E0!\"G1!\"M2Q\"Y41\"\\51#*4Q#*2A\"X1!\"O0Q\"M01\"J01\"J,1\"-*!!\\)!!V)!!V(!!S'A!P'A!P'A!P(!!V(Q![)A!Y(A!S'A!P'A!P'!!K%A!C#Q1;#!A3#1Q1\"!17#115#1A1\"!11\"1A6\"Q15#1A.!QQ4\"112\"Q!1\"1!0$A1E%Q!J)!!Y-!\"3/!\"@0Q\"M01\"I0Q\"M0Q\"M0Q\"M0A\"K0A\"L0!\"G/Q\"E0!\"G0!\"G0!\"G0!\"G/Q\"E1A\"Q3Q##4Q#)4Q#%5A#+61#'5!#)4Q#%41#\"3Q\"_4A##4Q#!4!\"_4Q#%4Q#%4Q#,61#\"4Q#)3Q\"_3Q\"`3Q\"`41#\"31\"^3Q\"`4Q#%4Q#%4A##41##3Q\"`3!\"\\3A\"^3!\"]3!\"]3Q#!4!#!4!#\"4!#\"31\"]31\"]2Q\"[4!\"Z3!\"]3!\"]3Q\"_3!\"]3!\"]31\"^3A\"]31\"X3Q\"]3Q\"[3!\"]3!\"[3Q\"[3A\"W3A\"^4!\"Z31\"W2Q\"[3!\"Y3!\"Y3A\"W3A\"W2Q\"T21\"X3!\"T3!\"Y21\"T2Q\"U2A\"X1Q\"S2!\"V2!\"Q2Q\"S2!\"S21\"R1Q\"R2Q\"X2A\"U2A\"W3Q\"U3!\"X3A\"V31\"W2Q\"Z2Q\"Z3Q\"X3!\"[3A\"W3A\"[3!\"Y4!\"\\3Q\"[41\"`3Q\"W2Q\"[3A\"W2Q\"[3Q\"Y2Q\"Z2Q\"Z2Q\"[3!\"]3!\"]31\"]3Q\"`3!\"\\3!\"\\3!\"\\2Q\"\\2Q\"[31\"^3Q\"_4!#\"4!#!3A\"^3Q#!3Q\"`3!\"\\3!\"]31\"]4A##4Q#%4Q#%4Q#%41##4Q#%41##3A\"^4!#!41#\"4!#!5!#&41#%4Q#)4Q#%4Q#%4A##1A\"R/Q\"F/!\"@/!\"A/1\"A/!\"A0!\"G0!\"H0Q\"L1!\"N0Q\"M0A\"K0A\"J0!\"G/A\"D-!\"2*A\"!)1!X&Q!K&1!?#Q14\"AA/$111#1Q2#1Q1\"QA/\"QA/#1A/\"1A0#AA5\"AA4\"1Q5#!A.\"!11\"!!.#114\"1!2$!A6$!A@$1A;%11C(Q!T)Q!]+A\"*/1\"D/A\"D/Q\"F0Q\"L0!\"H0A\"K/Q\"E/1\"B.1\";-Q\"7-Q\"7/A\"D/Q\"F/!\"@/Q\"F/Q\"F0Q\"M3A\"_4Q#'4Q#(4Q#&4Q#%4!#!3A\"]11\"P01\"I2A\"Y4A#$4Q#%4!#!4Q#%4Q#%4Q#%4A#%4!#\"3Q#!3Q\"`4!#!31\"^41##4A##4A##41#\"41#\"3Q#!3Q\"`3!\"]3Q\"`3!\"\\3Q\"`3A\"_3Q\"`4!#!3Q\"_3!\"\\3A\"Z31\"^31\"\\3Q\"]3!\"\\3A\"Z3Q\"`3A\"[4!\"Y3!\"\\31\"Y31\"W3!\"[3A\"Y31\"X3A\"Z3A\"W31\"[4A\"X3!\"Y3A\"W3Q\"U4!\"]31\"X3!\"Y3!\"Y3!\"X31\"U1Q\"S31\"R2A\"V31\"U1Q\"T1A\"S11\"Q21\"Q2!\"V31\"T2Q\"W2!\"S2A\"W21\"T2A\"V2Q\"Y31\"X2A\"Z2Q\"Z3!\"X31\"W3A\"Y41\"]31\"W4!\"X3!\"Y3A\"V4!\"X3!\"Y2Q\"Z3A\"_31\"]4!\"X3Q\"_3Q\"W3A\"^31\"]3A\"_41\"\\3Q\"_31\"\\41\"]31\"Z4A\"\\31\"\\41#!3A\"_4!#!3A\"_41#\"4Q#%3!\"]3!\"\\3Q\"`31\"]31\"]3Q\"`3A\"_4Q#%4Q#%4A##4!#!41##41#\"31\"^31\"^3A\"^41##4!#!4Q#%4Q#%4Q#%4Q#%4A#$2A\"W/Q\"E0!\"G/1\"B0!\"H0!\"H/1\"C0!\"G/A\"D/A\"D0Q\"L0Q\"M0A\"J0A\"K0!\"G/Q\"F.!\"9+Q\"))A!Z'A!P&11G\"QA6$1A4\"1!7\"AA4\"QQ1\"1A0\"!14\"1!1\"AA1\"!Q5#!A.!Q!5$1Q?%1!B&Q1K'!1O(A!T)!!V)!!V)1!X+!\"&-!\"6-1\"9,Q\"3+A\"'+1\"&+A\"'+A\"'+!\"#*A\"!)A![)1!X*Q\"#.1\"<0!\"H01\"I01\"I1A\"R41#\"4Q#%4Q#$4A#%4!\"X11\"P0Q\"M/1\"B/!\"@1A\"R31\"]3Q\"`4Q#%4Q#%4Q#%4!#\"4A#$3Q\"`3A\"_3!\"]3!\"\\3A\"_3A\"_4!#!4Q#%41##4!#\"4!#!3!\"\\2Q\"[3Q\"Y3!\"[3!\"]3!\"\\41#\"31\"]2Q\"[31\"\\41\"]4A\"\\31\"W3A\"[3!\"Y3!\"\\4!\"]3!\"\\31\"Y2Q\"[3Q\"X3A\"Z31\"^3Q\"W31\"Z4!\"\\3Q\"[4!\"Z3!\"Y3!\"Y3!\"Y31\"W3Q\"U31\"X4!\"T2Q\"X3!\"Y2Q\"X1Q\"T1Q\"T2A\"V31\"S1Q\"T2!\"V11\"P1Q\"T11\"P1Q\"T1Q\"T1Q\"T21\"Q21\"X1Q\"T2!\"W1A\"R3A\"W2A\"R2Q\"T3A\"V3A\"W2Q\"[3A\"W2Q\"[31\"W3A\"W2Q\"[2Q\"Z3Q\"[3Q\"Y3Q\"Y3Q\"\\3!\"X31\"W3!\"Y3!\"X3Q\"Y3A\"Y2Q\"[3!\"\\3Q\"Y3!\"\\3!\"[31\"W3!\"Y3Q\"T3!\"\\3!\"\\3Q#!3Q\"`3Q\"_3Q#!3Q\"`31\"]3A\"Y3!\"]31\"^3A\"^31\"]3!\"]4A#$4A#$4A#$3Q#!4!#\"41#\"3!\"]3!\"[31\"X4!#!4!#\"41#\"4Q#%4Q#%4Q#%4Q#%11\"O/A\"C/Q\"F/1\"B/1\"B/1\"B/1\"B/1\"C/Q\"F/1\"B0!\"G0A\"K0!\"G01\"I01\"I/A\"C/A\"D-1\"4+Q\")*!!](A!T'!!E%11>$A1=#117#110\"QQ3\"112\"!!1\"!13#A1.#Q15%!!>&A!D%A1C&QAH&Q1K'1!K'A!M'A!M'Q!R&Q!N'Q!R)!!V)!!V(A!T(Q!U)!!V)A!Z+1\"'-1\"4/Q\"F0!\"G/Q\"E0!\"H2!\"V3!\"[2Q\"X1Q\"S01\"J/!\"@/A\"D.Q\"?.Q\"?/A\"C2A\"W4A#$4Q#%4Q#%4Q#%4A#$3Q#!3Q\"`3!\"\\3Q\"`2Q\"[3A\"_3Q\"_31\"^3A\"_4Q#%4!#!31\"]3A\"^2A\"Z31\"^31\"^2A\"Z3Q\"^41\"_3Q\"_3!\"\\3Q#!3!\"]3Q\"Y2Q\"Z2Q\"[2Q\"[3A\"\\3!\"Y2Q\"[2Q\"[3Q\"[31\"Z4!\"X3A\"[4!\"W31\"]3!\"\\3Q\"Y2Q\"[3A\"W31\"W2A\"U3!\"Y3A\"W3A\"W2Q\"[2!\"U21\"X21\"R2A\"W1Q\"S1Q\"T1Q\"T1Q\"T1Q\"U11\"P1!\"O1Q\"T11\"P11\"P1!\"O1Q\"T1Q\"T1Q\"P1A\"Q2A\"Q21\"U1Q\"T2!\"S3!\"V2!\"U2A\"X2Q\"Z3A\"V3A\"V2Q\"[2Q\"Y3!\"Y31\"X31\"W3A\"V3Q\"V3!\"Z2Q\"[3!\"Z3A\"]31\"\\4A\"_3Q\"W3A\"Y4!\"[31\"[2Q\"Z3!\"\\2Q\"\\2Q\"[2Q\"[3!\"]31\"Y3A\"Z3!\"Z3!\"\\4!#!4!#!31\"^3A\"_31\"\\2A\"Z3A\"]3A\"]2Q\"[3A\"_2Q\"\\3Q\"`41##4A#$31\"^4!#\"3Q\"`3A\"_21\"V/Q\"F0Q\"K2A\"X3!\"[3A\"^4Q#%4A#$41##3A\"]01\"I/1\"C/!\"@.Q\"?/Q\"E.1\"=+A\"+*Q\"&,1\"1-A\"7.1\";.!\":-Q\"7.1\"<.1\"<.1\"=/A\"E.1\"<,Q\"2)A!Y(Q!V)!!V(!!Q(!!P'!!M%Q1J%A1?#QQ?#Q!9\"1!5\"1A/\"1A/\"AA2\"!11\"!12\"QA1\"AA0#A11$!17&1!>&A!M(1!T(!!S)1!X*1!_,1\"-.!\":/A\"D/1\"C/Q\"F/A\"D/Q\"F/1\"B/A\"D/A\"D0!\"G0!\"G/1\"C.Q\"?/!\"@/!\"A2!\"U3!\"[4Q#%4!#!41#\"41##3A\"_3Q\"`3!\"\\3!\"Z4!\"]41\"]3A\"^4!#!4!#!41#\"3Q\"`3!\"\\31\"^3!\"]31\"[41\"Z3Q\"W3!\"]31\"^31\"]31\"\\3!\"\\2Q\"[3!\"[4!\"]3A\"W4!\"\\3A\"X4!\"[31\"[31\"Y4!\"\\3!\"Y3A\"[2Q\"Z3!\"Y3!\"X3!\"Y3A\"X3Q\"V31\"Y2Q\"[3!\"Y31\"W2A\"W2Q\"Y2!\"V1Q\"S31\"V2A\"W31\"T1Q\"T1Q\"S1Q\"Q1Q\"T1Q\"P1Q\"T1Q\"U1A\"S2Q\"Q11\"Q11\"Q1A\"R1A\"Q1!\"O11\"P2A\"V1Q\"R1Q\"T11\"P1Q\"T3!\"V2A\"R3!\"U21\"S2A\"V2!\"V1Q\"U2Q\"S3!\"X3Q\"U2!\"V31\"X2!\"W2Q\"X4!\"T41\"V3Q\"W3!\"X3!\"Y3A\"V2Q\"[31\"X31\"W3A\"[3Q\"]3Q\"X2Q\"\\2Q\"[31\"Z4Q\"Y3!\"X3Q\"[41\"W3Q\"^2A\"Z3A\"_31\"^31\"^31\"]2A\"Z3Q\"]3A\"]4!\"[3A\"^3A\"_31\"]2Q\"[3A\"_4Q#%4!#!3Q\"`3Q\"`2A\"Z0Q\"M.Q\"?/A\"E/Q\"E0Q\"L11\"O21\"V3!\"]4Q#$3Q\"`1Q\"T/Q\"E/A\"E.Q\"?.Q\"?-1\"4*1\"\"(!!R(!!R)!!V)!!V)!!V)!!V)A![)A!`*A\"#*A\"#)Q!\\)1!X)!!V)!!V)!!V(A!T(Q!U(1!S'Q!R)!!V'1!P&!!J$!!>#!!3\"!15#A14!QA2\"Q16%A1A%Q1E'A!N(Q!U(A!T*!!]+Q\",-1\"7/A\"E/1\"B/Q\"E/A\"E/A\"E/A\"C.Q\"?/!\"A/1\"B.Q\"?.Q\"?/1\"B/1\"B/1\"C.Q\"?/A\"C2Q\"Y3!\"\\3Q\"`4!#!4!#!3A\"_3!\"]3!\"]3A\"_4!\"Y3!\"X3A\"^2A\"Z3Q\"`3!\"]3!\"]3A\"^3Q\"`2Q\"[4!\"Y3Q\"Z3A\"W31\"]2Q\"[3A\"_31\"^2A\"Z2A\"Z4!#!4!\"Y3A\"[2Q\"Z31\"X3A\"_31\"X2Q\"[2Q\"\\3A\"Y3!\"]4!\"X41\"W3A\"V3A\"V31\"X2Q\"[2Q\"[2Q\"Y3Q\"U3!\"X3A\"V2!\"W31\"T31\"T2Q\"U2Q\"W2A\"Q1Q\"R11\"Q21\"Q2!\"R2A\"T1A\"P2Q\"U11\"Q1A\"R1!\"N11\"Q11\"Q1Q\"T1!\"O1A\"R11\"Q1Q\"S11\"Q1A\"R1Q\"T3!\"R21\"Q11\"Q1Q\"U1Q\"T1A\"Q21\"Q1Q\"T21\"X21\"X2A\"W21\"T2A\"V2!\"R31\"W2A\"Y2A\"X2Q\"Z2Q\"Z31\"W31\"\\3!\"Y3Q\"U3Q\"U2Q\"Z3Q\"T31\"X3Q\"Z4!\"W3Q\"\\2Q\"[31\"\\3!\"\\3A\"]3!\"X4!\"X4!\"Y3A\"\\3!\"Z3!\"]3Q\"`3Q\"_3!\"\\2Q\"[2Q\"Z3Q\"W3A\"Z4!\"\\3!\"]2A\"Z3!\"]4!#!3A\"_3!\"\\4!#\"31\"]1Q\"U01\"I/1\"B/!\"@.Q\"?/!\"@/Q\"F/1\"B0Q\"M11\"Q0A\"L/A\"C/A\"E.Q\"?.Q\"?.Q\"?.!\";+A\"))1!Z)!!V(!!R(A!T(A!T(A!T(!!R(!!R(!!Q&A!I'!!K&11H%11C'!!H&A!D%1!B$A!7\"!Q.%Q!8$Q1<%11=$QA;&A!B'Q!Q(Q!U(!!R(!!R)!!X)A!^+A\"(.Q\">/!\"A/1\"C/!\"@/!\"@/1\"B/!\"@/!\"@/1\"C.Q\"?.Q\"@.A\">.Q\"?/1\"C/1\"B.Q\"?/!\"@/1\"C1Q\"U3A\"^41#\"41#\"4!#!31\"]3A\"^3A\"Z2A\"U3!\"V3A\"V2Q\"[3!\"\\3!\"\\31\"]4!#!31\"^3Q\"`4!\"\\31\"]4!\"\\31\"]3!\"\\3!\"\\3A\"Z4!\"\\31\"Y4Q\"[4!\"^41\"[4!\"T3!\"Y31\"W4A\"Z31\"X3A\"V4!\"\\31\"^3Q\"V3Q\"]3A\"V2Q\"Z21\"X31\"X2Q\"Z3A\"V3A\"V21\"X31\"U2A\"Y21\"X21\"V2A\"T21\"V2!\"V1Q\"T21\"X1Q\"T2!\"U2Q\"P1Q\"T1Q\"T1Q\"T1Q\"U11\"O2Q\"Q1A\"Q2Q\"R11\"Q1Q\"S0Q\"L1A\"R1!\"N1A\"S1Q\"U11\"Q1A\"R11\"P1A\"S21\"S2!\"V1A\"Q1Q\"S1Q\"T21\"T11\"P2!\"V1A\"P21\"V2!\"S3Q\"U2A\"X2!\"V2A\"X1Q\"T2A\"S3!\"Y2!\"V4!\"V3!\"Y2Q\"Y3Q\"U31\"W2Q\"Y2Q\"Z3!\"Y3!\"Y3!\"X2Q\"[4!\"X3A\"Y3A\"[31\"Y4!\"]4!\"T4!\"W3!\"Y3Q\"X4!\"]3Q\"[3!\"[2Q\"\\2A\"Z31\"Z4Q\"[3!\"Y4!\"X3A\"]3Q\"W2Q\"Z3A\"_2Q\"[31\"^3A\"^31\"^21\"X0A\"L/1\"B.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/1\"B0!\"H/!\"@/1\"C/A\"D/Q\"E/!\"@/Q\"E.Q\"?.!\":-1\"4+!\"$)A!Z)!!W'Q!R(A!T(A!T&1!K%A!@#Q18\"AA2\"AA0#11<$A!@'A!K&Q!H'A!K'A!N(1!S)!!V(Q!U(1!S'1!P(A!T(1!S(1!S)Q!],!\"2.!\":.1\";/!\"A.1\";,1\"1+!\"$+!\"$*A\"\"*A\"!*Q\"$)A!^*A\"#.!\":.Q\"?.Q\"?/!\"A/1\"B11\"Q2!\"V4!#!4!#\"3Q\"`2Q\"Z2Q\"Z1!\"N0!\"G0!\"D01\"J2A\"Y3Q\"^3!\"[3Q\"_31\"]31\"^2Q\"[3!\"Z3Q\"Y3A\"Z4A\"[3!\"Y4!\"X3Q\"Y3A\"Y3Q\"W2Q\"[2Q\"[31\"[2Q\"Y3A\"W2Q\"Z3A\"V2Q\"[31\"Y3Q\"^31\"]3A\"Y2Q\"Z2Q\"Y3!\"Y3!\"S21\"W21\"X31\"W31\"W31\"X3Q\"T3!\"U2A\"X1Q\"S1A\"S1Q\"R21\"T2!\"U1A\"Q21\"Q2!\"Q11\"P11\"P1Q\"T11\"P1!\"O11\"P1A\"Q1A\"R11\"Q11\"Q1A\"Q1A\"S11\"Q11\"P1!\"O11\"Q11\"P11\"P11\"P11\"P1Q\"T1A\"R1A\"Q1!\"N1A\"R11\"Q1Q\"S1Q\"T1Q\"T11\"P2Q\"U21\"V1A\"R21\"X2A\"Q1Q\"T2!\"R21\"R21\"X1Q\"T2Q\"T3!\"Y3Q\"U31\"W31\"W31\"X3!\"X3Q\"U2Q\"[3A\"V3Q\"U41\"Z31\"^31\"W3!\"[41\"X2Q\"Z2A\"Z3!\"Y3A\"V31\"X3!\"X3Q\"\\41\"W31\"[2A\"Z31\"^2A\"Z3Q\"\\3!\"X31\"X3!\"\\3Q\"Y3!\"]3Q\"_31\"X2A\"Z31\"^3Q\"\\3A\"\\21\"W0!\"I.A\"=.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F/!\"A.Q\"?.Q\"?/A\"D/1\"B/Q\"F/1\"C.Q\"?.Q\"?.A\"=,1\".+1\"()A!['Q!Q(A!U(Q!U)!!V'1!M&Q!A%Q1D&!!E%A!C%Q1D&A!N'Q!Q'A!Q'A!Q(!!S(1!S)!!V(1!S)!!V(Q!U(A!U'A!Q(Q!U)!!V(1!S(1!S(1!S(1!S)!!V'Q!R'A!Q)1!Z,1\"-.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F1Q\"T2Q\"Z21\"V0Q\"M0Q\"M/Q\"F.Q\"?/A\"D0!\"H/!\"A0Q\"M3!\"\\2A\"Z4!\"Z3A\"]31\"X2A\"Z4!\"[3Q\"`3!\"[3Q\"[3A\"X2A\"Z3Q\"\\3Q\"]3Q\"[3!\"[3Q\"Y3Q\"\\3!\"Z3Q\"[2Q\"Z31\"W3!\"X3!\"X31\"X4A\"[41\"W3Q\"U3Q\"U3Q\"U3!\"X2A\"T31\"W2Q\"R1Q\"T2A\"Z31\"W2Q\"[2A\"Z1Q\"T1Q\"T3!\"T1Q\"T1Q\"T1Q\"T1A\"R1A\"R1Q\"T1Q\"T1Q\"T1Q\"T11\"P1Q\"T11\"P11\"Q1A\"R1!\"N1A\"R2!\"M0Q\"M1!\"N0Q\"M1!\"N1!\"N1A\"Q1!\"N1!\"N11\"P1!\"N1!\"N1!\"O1!\"O1Q\"T1!\"O1A\"R11\"Q1!\"N2A\"T2A\"U1A\"R1A\"R1!\"O1A\"R2Q\"V2A\"Q21\"X1A\"R2A\"R2A\"U21\"W2A\"X2A\"X31\"X31\"X2Q\"Z3!\"Y2Q\"Z21\"T2!\"U31\"U31\"W41\"U31\"Y31\"[3Q\"\\31\"]4!\"Y2Q\"Z31\"X31\"W31\"X3!\"X3!\"Y4!\"]3A\"V4!\"]31\"X31\"]31\"\\3A\"]3Q\"]3A\"Z41\"[4!\"U2Q\"Z31\"[4!\"Y3!\"[3!\"[3!\"\\2A\"Z3!\"S/Q\"F/!\"A/A\"D0!\"H0A\"J1!\"O1!\"O0A\"L/A\"C.Q\"?.Q\"?.1\"<.!\":.!\":.1\"=/A\"F.Q\"?.Q\"?-Q\"9,Q\"3*A!W(A!T(1!S(Q!U)!!V'Q!Q(A!T(!!P(!!P(!!S'A!Q'A!Q&A!I&!!>%Q!B&A!I&A!M'A!P(A!R)!!V)1!V(1!T)1!X)1!X)!!X(Q!V)!!W)A!]+!\"&.Q\"?.A\".1\"=.!\";,A\"5,A\"3-!\"+*A\"#*!!^)1!W(A!T)!!V)!!V)!!V(Q!U(Q!U(A!T(Q!U(Q!U)!!V*Q!X)!!Y*!!^*!!_)Q!^)Q\"\"*!\"%,!\")+1\")+Q\"),!\"-+!\"'*A\"#*A\"#,Q\"0-!\"2.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F0A\"K2!\"M2!\"O3Q\"R4!\"T3!\"X2A\"T1!\"O1Q\"T2A\"Z2A\"Z2A\"Z3A\"_3A\"_3!\"Y3!\"Y4A\"V3A\"[3!\"Y3!\"Y3!\"Y3!\"X3!\"\\4!\"Y4!\"Y2A\"Z3Q\"Y3!\"Z2A\"Z3A\"V2Q\"Y3!\"U3A\"V31\"X31\"X2Q\"Z31\"W3A\"V2A\"S3A\"V2!\"V1A\"R1A\"R1Q\"T1A\"R21\"W2A\"T21\"R2A\"S2!\"U2!\"V11\"P1A\"R1Q\"T2Q\"U1A\"S1A\"R11\"Q11\"Q1!\"O11\"P1Q\"T1!\"O1!\"O1!\"O1!\"O1A\"R11\"P1!\"O11\"Q0Q\"L1!\"N1!\"N1!\"N"; +static unsigned char +palette_data[] = { 4,2,2,4,110,178,32,4,122,4,36, +86,15,3,66,4,58,127,36,8,186,4,34,122,17,2, +34,4,19,66,12,4,162,90,2,69,88,2,48,7,20, +2,25,2,103,8,14,48,4,58,186,90,3,154,82,2, +129,55,2,34,17,2,18,17,34,191,94,2,101,57,2, +70,7,32,154,12,22,157,17,3,50,4,88,150,96,3, +186,86,2,138,87,2,86,212,214,210,4,19,98,52,2, +154,15,11,2,4,132,216,7,18,125,12,6,82,37,12, +18,4,88,189,86,14,48,128,2,157,32,4,138,4,60, +155,4,48,126,60,2,218,7,10,52,13,12,66,129,2, +50,56,2,52,52,14,98,4,47,157,6,20,87,48,2, +24,58,2,101,120,2,141,52,5,170,4,113,215,127,2, +73,4,90,210,4,52,112,36,18,194,59,2,85,42,2, +10,107,2,173,95,2,114,31,3,52,4,79,160,84,3, +189,14,10,40,30,2,69,96,2,58,113,2,126,9,37, +231,17,33,170,28,14,2,4,30,146,68,10,37,132,2, +82,23,4,7,4,10,122,4,36,108,32,2,37,7,27, +2,4,98,175,84,10,146,4,101,191,4,14,146,8,29, +86,4,2,170,8,60,230,84,10,162,72,2,39,102,2, +142,4,142,221,4,49,143,68,12,170,4,124,213,15,4, +74,114,2,69,112,2,158,32,3,23,8,50,190,111,2, +104,6,40,154,96,2,210,6,28,104,60,2,138,61,2, +25,68,2,114,58,2,125,39,2,114,73,2,69,16,4, +58,4,88,177,56,14,26,138,2,173,4,68,176,71,2, +55,76,2,210,4,78,130,17,3,42,6,27,69,112,2, +49,12,26,178,47,13,159,18,11,10,13,11,74,141,2, +58,52,18,234,4,82,186,4,126,198,4,103,213,4,62, +206,4,72,226,12,46,210,72,12,222,12,26,146,20,34, +210,4,113,197,4,131,229,4,48,170,4,76,170,7,43, +95,52,30,218,15,11,170,52,14,202,12,14,86,4,40, +174,108,14,202,156,2,186,60,12,130,5,40,129,73,13, +189,12,42,138,44,14,202,4,59,143,4,124,229,4,69, +191,4,69,157,4,60,114,4,43,110,14,14,58,20,26, +157,28,26,210,4,87,162,4,91,202,4,110,226,4,98, +226,4,101,202,17,14,186,28,18,18,60,2,234,28,10, +114,4,30,114,8,10,162,12,54,186,20,26,130,100,10, +170,40,18,154,4,22,114,28,26,234,4,22,58,4,66, +226,4,54,202,12,42,202,4,38,98,4,145,234,4,76, +146,4,94,148,4,138,213,4,94,186,4,54,126,4,54, +154,4,118,211,4,106,178,4,106,188,4,54,142,4,94, +170,4,70,202,4,118,197,4,54,173,4,82,178,72,4, +172,36,10,138,76,14,162,4,98,210,4,118,226,112,2, +114,24,19,8,30,2,85,84,6,226,141,2,73,28,30, +10,28,46,186,112,4,206,36,10,90,36,2,174,108,2, +58,41,3,130,44,10,194,9,33,130,92,2,162,51,2, +42,12,32,162,81,3,146,44,11,26,28,6,146,44,2, +178,30,12,10,60,10,178,64,2,146,28,10,178,92,10, +210,5,41,146,40,2,102,96,2,125,100,2,88,74,2, +157,142,2,159,26,10,55,143,2,50,73,2,102,134,2, +142,73,2,84,127,2,126,142,2,82,156,2,178,28,10, +158,28,26,114,84,14,202,12,4,10,5,20,74,17,2, +26,92,2,194,7,19,106}; + +static unsigned char header_data[] = { 71,99,218,218,99,11,71,218,71,71, +218,99,99,99,71,99,218,99,99,99,99,218,71,218,99,218,218,99,99,218, +218,99,99,218,99,218,99,58,218,99,99,99,58,218,99,99,99,58,99,58, +99,58,11,58,99,58,58,11,99,58,99,58,99,99,99,218,99,218,99,58, +99,71,99,218,71,12,12,12,12,12,12,12,12,12,92,19,19,19,92,92, +92,92,19,108,19,19,19,19,19,19,53,53,53,53,101,19,19,53,53,19, +19,19,12,92,92,12,12,12,71,71,218,99,218,218,71,71,12,12,218,99, +58,58,58,99,99,99,58,99,99,99,11,58,11,58,58,99,58,99,99,99, +58,99,99,99,99,58,99,99,99,99,99,218,99,99,11,99,99,99,11,99, +99,218,218,218,99,218,99,99,218,218,99,99,218,99,218,218,99,99,218,11, +218,71,99,218,99,218,218,99,71,8,218,99,218,218,99,99,99,99,99,99, +218,218,99,99,218,99,218,99,218,71,99,99,99,218,99,99,218,99,99,99, +218,218,99,99,99,99,58,99,58,30,99,99,99,99,99,99,58,99,99,58, +99,58,99,58,99,99,58,58,58,99,58,58,99,218,218,71,99,99,71,71, +71,123,12,118,71,71,12,71,123,12,12,19,19,19,53,19,19,53,53,19, +19,53,101,63,20,63,20,63,53,53,53,101,53,53,53,19,53,53,53,19, +92,12,12,12,71,12,12,12,12,12,92,71,218,218,71,218,71,71,71,71, +99,218,58,58,58,99,99,99,99,58,58,58,99,58,99,58,58,99,58,58, +99,99,58,99,99,99,99,58,99,58,30,99,99,99,218,99,58,99,99,58, +11,99,99,218,99,218,218,99,99,218,71,99,218,99,99,218,99,99,218,99, +11,218,99,218,99,11,218,99,99,8,71,71,71,99,218,71,218,99,71,218, +11,99,218,218,99,218,99,218,99,99,99,99,218,99,99,99,99,99,218,99, +99,99,99,99,99,11,99,99,99,99,99,99,58,99,58,99,58,99,58,58, +99,11,58,58,99,58,99,99,58,58,218,99,123,71,71,71,123,71,71,218, +99,99,218,71,12,12,12,12,92,19,19,53,19,53,53,53,53,19,53,53, +53,53,19,53,19,53,53,53,53,53,63,63,101,63,63,20,53,19,53,53, +53,19,92,92,12,12,12,71,71,71,71,12,12,71,71,12,12,12,12,12, +12,218,218,99,58,58,99,58,99,58,99,58,99,99,58,218,58,99,58,99, +99,99,99,11,58,99,99,58,99,99,58,58,99,99,99,99,99,99,99,99, +99,58,218,99,218,99,99,99,218,99,99,218,99,11,218,99,218,218,99,99, +218,99,218,11,99,71,99,218,71,8,99,99,218,99,99,99,218,99,99,218, +218,99,11,99,99,218,99,218,99,218,218,99,58,99,99,99,58,11,99,99, +58,99,99,58,58,58,58,99,99,99,99,218,58,99,99,99,58,58,99,99, +58,58,99,58,99,58,99,99,58,58,99,218,71,71,218,218,218,58,58,58, +218,99,71,123,12,12,12,19,19,108,108,108,92,92,92,12,71,12,12,92, +19,53,53,53,101,53,53,19,53,101,53,20,53,79,79,0,34,79,20,63, +53,53,53,19,19,19,12,12,12,71,71,71,71,71,71,123,71,12,12,12, +12,12,71,71,218,58,99,58,218,58,218,99,58,99,58,99,99,218,58,58, +58,99,58,58,99,99,58,99,58,99,99,218,58,58,99,99,99,99,99,99, +58,11,99,99,218,218,218,99,218,99,99,218,218,99,218,99,99,218,218,99, +218,99,71,218,99,218,99,99,99,8,218,218,99,218,99,218,99,218,218,99, +11,218,218,218,218,99,71,99,218,99,99,99,218,58,99,99,99,99,218,30, +58,99,58,99,58,11,58,99,58,99,58,58,58,99,58,58,99,99,58,58, +58,99,58,99,58,58,99,58,218,99,99,218,58,99,58,58,58,58,58,218, +71,12,12,71,71,12,12,12,12,71,71,118,71,71,118,71,71,12,223,19, +19,53,53,53,53,63,229,20,79,20,34,0,20,101,101,63,20,101,101,53, +108,53,53,53,53,53,101,19,92,12,12,12,12,71,71,218,218,218,71,71, +118,12,71,71,218,218,58,58,58,58,58,58,218,58,58,58,99,99,218,99, +58,58,99,99,58,99,58,99,58,58,58,99,99,99,58,99,99,99,58,58, +99,58,58,99,99,99,99,99,99,99,218,99,99,218,99,218,218,99,99,218, +99,58,99,99,218,99,218,218,218,8,99,218,99,218,99,218,11,99,218,99, +99,99,99,99,218,99,58,99,99,99,58,99,218,99,99,99,99,99,58,99, +58,218,99,99,99,58,218,58,58,58,99,99,58,99,218,58,99,99,58,218, +58,99,58,99,99,99,58,99,58,58,58,58,99,58,58,58,58,218,218,12, +71,71,71,12,12,71,71,12,71,12,71,71,71,71,12,92,19,53,53,53, +101,63,79,34,251,0,0,63,20,53,19,53,53,53,53,19,19,53,19,19, +19,108,19,19,19,19,19,19,53,53,108,12,12,12,71,71,218,58,58,58, +99,218,71,71,71,12,218,99,99,58,58,58,58,218,58,58,58,58,58,99, +99,58,58,99,58,218,58,99,99,99,99,58,99,128,99,58,99,99,11,99, +99,58,11,58,99,99,99,218,58,11,99,58,99,218,99,99,218,99,99,99, +218,71,99,99,218,99,11,99,218,8,218,99,218,99,218,99,99,218,99,218, +58,218,58,218,99,99,218,99,58,99,99,99,99,78,11,58,99,58,99,99, +99,58,58,99,58,11,58,58,218,99,99,58,58,58,99,58,58,58,99,99, +58,58,58,58,58,58,99,58,99,99,99,58,58,58,58,58,218,71,118,12, +71,71,71,71,71,12,71,71,71,71,71,12,92,19,19,53,53,63,20,251, +0,79,79,0,79,34,34,79,0,63,229,20,63,101,53,101,19,53,19,92, +12,71,12,92,12,12,12,12,12,92,19,92,92,71,12,118,71,218,99,58, +58,58,58,58,218,123,71,218,58,58,58,99,58,58,58,218,58,218,58,58, +218,58,99,58,58,58,99,99,58,99,58,99,218,99,99,99,58,58,58,11, +58,58,99,58,99,99,30,99,99,99,58,218,218,30,99,218,99,99,99,218, +99,99,218,218,99,99,218,71,99,8,99,99,71,99,218,218,99,218,99,218, +99,218,99,58,11,58,99,99,11,58,99,58,99,99,99,99,58,58,99,99, +58,99,99,99,99,58,99,78,58,58,99,99,218,78,58,218,58,99,212,58, +99,58,58,58,218,58,58,58,58,58,58,58,58,58,218,71,12,12,71,71, +123,218,218,58,99,71,123,71,71,12,19,19,19,53,53,19,19,53,63,53, +101,101,101,63,101,101,20,20,79,0,0,79,79,34,251,79,79,251,101,53, +19,92,12,71,71,71,218,12,218,12,71,71,71,71,71,12,71,71,123,71, +58,58,58,58,58,58,58,99,99,58,58,58,99,58,58,58,99,58,99,58, +99,58,58,99,58,58,58,58,99,58,99,58,99,58,99,58,99,99,58,58, +99,99,99,58,99,58,58,58,99,99,99,30,128,58,99,99,99,99,99,58, +218,99,99,218,218,99,99,218,71,8,71,218,99,99,99,99,218,99,99,99, +99,30,58,11,58,58,99,58,58,58,58,30,58,58,99,99,99,58,99,58, +99,58,99,58,58,58,218,99,58,99,58,58,58,218,99,58,58,58,58,58, +58,99,99,99,58,99,99,58,58,212,99,58,58,218,71,71,218,218,99,58, +58,58,58,218,123,71,71,12,108,19,19,108,19,19,223,92,19,92,12,12, +19,19,19,19,53,53,63,63,229,0,34,34,79,0,79,0,75,34,0,34, +79,20,53,19,92,12,71,71,71,218,71,123,71,123,71,71,71,71,71,71, +71,218,58,58,58,58,58,58,58,99,58,58,58,58,58,58,58,58,99,58, +58,99,99,58,99,58,58,58,58,58,58,99,58,99,58,99,58,58,99,99, +58,58,99,99,58,58,218,58,58,99,58,99,11,58,58,99,58,218,99,99, +99,99,218,99,99,218,99,99,99,8,99,218,99,218,99,99,99,99,58,58, +11,58,99,58,58,30,58,11,58,11,58,99,99,58,99,58,58,58,99,58, +58,99,58,99,99,58,58,99,58,99,58,99,58,99,212,58,58,58,58,58, +58,58,58,58,58,58,58,58,58,58,212,58,218,218,218,99,58,58,58,58, +58,99,71,71,71,12,71,71,12,12,12,71,71,123,71,218,71,71,71,92, +19,108,63,79,229,126,0,79,0,0,34,34,34,126,34,251,79,0,126,34, +79,0,79,20,63,19,19,12,71,71,71,218,71,99,71,71,71,71,71,71, +71,71,218,58,58,58,212,58,58,58,58,58,58,58,58,58,58,58,58,58, +58,58,99,58,58,99,58,58,99,99,128,218,58,58,99,58,99,58,58,99, +218,58,58,218,99,99,99,99,99,99,58,99,99,58,30,218,99,99,99,99, +99,99,218,99,99,99,218,218,99,8,218,99,99,99,58,99,99,99,99,99, +58,58,218,99,99,99,58,99,58,58,58,99,58,99,58,99,99,99,58,58, +99,99,58,58,58,58,58,58,99,99,58,99,99,58,58,58,58,99,58,58, +99,58,99,58,78,212,99,212,99,58,58,99,58,58,78,78,246,99,212,58, +99,71,123,71,71,71,71,71,218,218,71,123,218,218,218,118,12,19,63,63, +0,0,0,34,34,0,34,79,79,79,0,34,79,79,20,101,53,101,53,19, +53,53,101,101,53,53,19,19,19,92,218,218,218,218,218,212,78,58,218,218, +71,71,71,11,58,246,58,78,246,58,58,58,99,99,58,58,99,58,212,58, +99,58,99,58,58,99,58,58,58,58,58,212,218,58,58,99,58,58,99,58, +99,99,99,58,58,99,99,99,58,99,58,58,99,99,99,58,58,99,99,99, +99,99,99,11,58,99,99,99,218,8,99,99,218,99,99,218,99,218,58,58, +11,78,58,99,58,99,58,99,58,11,58,99,58,99,58,58,58,99,99,58, +99,99,99,58,58,58,58,58,58,58,58,58,58,58,58,212,99,58,212,99, +58,58,78,58,78,58,58,58,58,58,58,58,58,58,246,58,246,58,58,71, +218,71,71,71,218,71,71,71,71,218,218,71,71,92,92,53,63,126,79,0, +0,79,0,79,34,79,0,126,79,79,79,79,79,229,229,101,53,108,92,71, +71,71,71,71,71,12,12,19,108,19,92,71,71,71,71,218,212,246,78,58, +58,218,218,71,71,58,58,212,212,78,212,78,78,58,58,58,58,58,99,58, +78,58,58,99,58,58,58,58,58,58,58,58,99,58,99,58,58,212,99,58, +58,99,58,99,58,99,99,58,58,99,99,58,58,58,58,11,78,99,99,99, +99,58,99,58,71,99,99,99,99,8,99,99,99,218,99,58,99,30,58,11, +58,11,58,58,99,58,58,99,58,99,58,99,99,58,99,58,99,58,58,99, +58,58,58,58,58,78,58,99,58,99,58,58,58,58,99,58,212,99,58,58, +58,78,78,78,58,58,58,58,58,212,58,78,58,78,78,78,58,99,218,218, +71,218,218,71,58,99,58,99,71,71,71,12,19,20,79,251,0,251,79,251, +79,63,126,79,79,79,79,229,79,79,79,126,126,79,79,63,20,53,53,92, +12,12,218,71,71,218,218,218,71,218,71,71,71,218,71,218,218,58,246,246, +78,212,78,58,218,218,58,58,58,246,78,212,78,212,58,58,58,58,58,212, +78,78,78,58,58,99,58,58,58,58,58,58,58,58,58,218,99,99,58,99, +58,58,218,99,58,58,99,58,99,99,58,99,99,99,58,99,99,58,58,58, +218,99,11,58,99,99,99,218,99,8,99,30,218,58,11,99,99,58,99,58, +99,58,58,99,218,99,218,58,99,99,58,58,58,58,99,58,99,99,58,99, +58,58,58,78,78,58,58,58,58,58,99,246,78,78,58,58,58,58,58,78, +78,212,78,246,246,58,58,58,212,58,212,246,78,246,58,212,218,218,218,218, +218,58,246,58,246,58,218,218,123,12,19,19,53,53,101,53,63,101,63,63, +63,63,63,63,63,101,63,53,63,53,53,53,53,108,19,19,19,19,108,19, +92,92,12,12,71,71,218,99,99,218,218,218,218,218,71,71,71,218,218,246, +78,78,246,78,78,78,58,58,58,78,78,78,78,246,58,58,58,58,58,78, +212,78,78,58,58,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58, +58,99,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,99,99,99, +58,99,58,99,99,58,99,99,99,8,99,99,30,58,58,58,58,58,58,99, +58,11,99,58,99,58,58,58,58,58,58,99,58,58,58,58,58,58,99,58, +99,58,78,58,58,58,99,58,58,78,246,78,58,78,58,58,58,58,78,212, +246,78,246,78,78,99,212,246,78,246,58,246,246,78,246,218,218,218,58,58, +246,78,78,246,58,218,218,71,12,12,108,92,108,19,108,53,63,63,63,53, +53,53,19,223,92,92,49,118,118,118,118,118,118,118,71,118,118,12,12,12, +92,71,71,123,218,99,11,58,58,58,58,78,58,99,99,123,71,218,218,218, +246,246,78,212,78,212,78,246,78,78,58,78,246,78,246,78,58,58,58,58, +99,78,246,78,246,99,58,58,58,58,58,78,78,78,78,99,58,99,58,99, +78,58,58,99,58,218,218,58,58,99,58,58,58,218,99,58,58,58,58,11, +58,99,99,99,58,99,99,218,58,8,99,99,58,99,58,11,58,11,58,58, +99,58,99,58,99,58,99,58,58,218,58,58,58,99,58,99,58,58,58,99, +78,58,58,58,99,58,58,78,78,58,246,78,246,99,58,58,58,212,78,78, +246,58,246,58,78,78,78,58,246,78,78,58,246,58,58,58,212,58,246,78, +212,246,58,58,71,71,71,71,12,92,92,92,108,53,53,53,19,19,223,223, +49,223,92,49,49,223,92,49,118,118,118,71,118,112,118,11,11,112,71,112, +71,71,11,11,11,99,99,58,58,78,78,78,246,78,246,58,99,71,218,71, +218,78,78,246,78,246,58,246,78,246,212,58,246,58,246,78,212,78,246,58, +58,58,78,246,246,78,78,99,58,58,58,212,78,58,78,58,58,58,58,58, +78,58,78,99,58,58,99,58,58,58,58,99,58,58,99,218,58,99,58,58, +58,58,99,58,99,99,58,99,99,8,99,99,58,58,58,99,58,99,99,58, +99,58,58,58,58,58,58,218,99,58,99,58,58,58,58,58,99,58,58,78, +58,78,78,78,78,58,78,58,78,78,78,212,78,58,78,58,78,212,78,246, +78,246,78,78,212,246,246,78,246,212,246,246,78,246,58,246,78,246,58,246, +246,58,99,218,218,218,71,12,92,19,19,19,19,19,223,223,49,223,49,118, +49,112,30,30,237,103,208,208,245,208,245,208,245,245,245,103,208,103,22,237, +30,30,11,11,11,11,71,71,11,99,58,78,78,246,58,246,246,246,58,99, +99,218,212,78,246,78,246,78,246,58,78,58,246,78,58,246,78,212,78,246, +58,212,58,78,78,212,78,78,58,58,99,78,78,78,78,78,58,58,99,58, +58,78,78,78,58,58,99,58,99,58,58,99,58,218,58,58,99,58,58,218, +99,58,99,99,58,99,30,99,99,8,58,99,58,99,58,58,58,99,58,99, +58,218,218,58,99,58,99,58,58,58,78,99,78,58,99,58,58,78,58,78, +78,58,78,78,58,78,78,246,246,212,78,78,78,58,78,246,78,246,58,246, +212,78,58,78,78,58,246,78,78,78,58,246,78,246,78,58,246,78,78,78, +58,218,99,11,71,12,92,92,92,223,223,223,223,223,49,118,112,22,237,208, +72,245,55,243,245,72,72,72,65,208,236,208,208,245,72,55,243,55,55,243, +245,245,245,103,237,237,30,11,11,112,71,11,99,58,78,246,246,246,246,78, +58,218,58,58,246,78,212,78,246,78,246,78,212,78,78,212,78,246,78,78, +58,78,78,78,78,78,246,246,246,58,58,78,58,246,78,212,78,78,99,58, +58,78,58,58,58,58,58,99,58,58,58,58,78,58,58,99,99,58,58,58, +99,218,58,99,99,99,58,99,58,8,99,99,99,58,11,58,58,58,99,58, +58,58,58,58,58,58,58,99,99,78,78,58,58,78,58,58,99,78,78,78, +78,78,78,78,78,78,212,246,246,246,246,78,78,246,246,58,246,78,246,78, +78,78,212,246,246,246,78,78,212,246,246,246,58,246,246,78,246,246,78,58, +218,99,71,12,12,92,92,82,223,49,223,118,112,22,208,72,72,208,65,22, +22,112,11,112,112,112,112,112,118,118,118,112,112,112,30,244,244,30,237,65, +236,72,55,55,243,243,208,208,237,237,11,71,11,11,71,11,99,58,246,246, +246,78,78,246,58,246,78,246,58,246,58,246,58,246,246,78,78,78,212,78, +212,246,212,78,246,246,58,78,78,246,99,246,246,58,246,58,78,78,78,58, +78,78,78,78,78,78,58,58,58,99,58,58,78,99,58,58,58,218,99,99, +58,58,99,58,99,58,58,99,99,8,58,58,99,58,99,218,99,58,99,99, +99,58,99,58,99,58,58,58,58,78,58,58,58,58,58,58,58,78,212,78, +78,58,246,78,58,246,246,246,246,246,246,246,78,58,246,78,246,58,246,58, +246,78,78,78,58,246,212,78,78,78,58,246,78,212,246,58,78,212,58,99, +218,71,12,92,19,223,49,49,118,62,30,22,208,208,103,30,244,112,244,118, +112,23,49,49,49,49,49,49,49,49,82,82,223,82,49,118,23,118,118,112, +11,30,237,22,65,245,55,243,245,245,103,237,237,11,71,11,71,71,218,58, +246,246,78,246,78,212,78,246,246,78,246,246,78,78,212,78,212,78,246,78, +78,58,246,78,58,246,78,212,78,246,78,78,78,78,78,212,246,246,246,78, +58,78,78,78,58,78,78,58,58,58,58,58,99,58,58,58,58,58,99,58, +58,58,58,58,58,99,99,58,58,8,99,99,58,58,58,99,99,99,99,58, +58,99,78,58,78,99,58,58,99,78,78,78,58,78,58,58,78,246,78,212, +78,78,58,78,246,246,246,246,246,246,58,78,78,246,58,246,78,246,78,246, +78,212,78,212,212,246,78,78,246,246,78,212,58,99,212,246,246,58,99,218, +118,12,92,223,223,49,49,11,237,208,208,103,244,23,118,112,118,112,49,49, +19,82,82,82,223,49,66,49,49,82,223,223,101,19,223,82,223,82,223,82, +82,49,23,112,11,244,30,65,72,55,55,245,208,22,237,112,11,118,71,218, +218,58,58,78,246,78,212,78,78,212,99,78,212,246,78,246,78,246,78,212, +246,246,78,246,246,78,246,78,246,58,246,78,58,78,246,246,246,246,212,246, +78,78,78,78,78,58,78,78,99,58,78,78,78,99,58,58,99,58,99,99, +58,99,99,99,99,58,99,58,99,8,99,99,99,58,58,99,58,58,99,58, +58,58,78,78,58,58,58,58,58,58,78,78,78,78,78,58,246,246,246,246, +246,78,78,212,246,246,246,246,246,246,78,212,78,246,78,212,78,246,58,246, +78,246,78,58,58,212,246,58,78,246,246,58,58,58,58,246,58,218,71,12, +223,223,49,49,49,30,65,72,72,30,112,118,118,112,118,49,223,223,223,49, +244,244,244,244,23,23,23,23,70,66,49,70,49,70,70,118,23,23,23,23, +49,223,19,82,223,223,23,11,244,237,208,72,55,55,208,103,30,11,11,49, +71,71,99,58,246,78,246,246,58,246,58,58,246,212,78,246,58,246,78,58, +58,212,78,78,212,78,212,78,78,78,212,78,78,78,246,212,246,246,246,212, +246,58,78,78,78,78,58,78,78,99,58,58,78,58,58,58,99,58,58,58, +58,58,58,58,99,58,99,58,99,8,99,58,58,218,58,58,58,99,58,58, +58,99,58,58,99,58,78,78,78,78,78,78,78,58,246,246,246,212,246,246, +212,246,78,246,246,246,246,246,212,246,246,78,246,58,212,246,78,78,78,246, +58,246,212,99,58,246,78,246,246,58,58,58,58,78,246,58,99,118,12,92, +223,223,223,11,22,72,208,244,49,112,112,118,49,82,223,49,244,244,242,62, +23,62,23,23,244,244,244,244,244,244,62,30,244,244,244,244,23,112,210,23, +62,244,244,23,223,82,53,82,49,112,30,30,65,72,55,245,208,237,30,112, +71,49,118,71,99,78,78,78,246,246,58,99,58,246,212,78,246,58,246,212, +99,58,212,246,78,246,78,246,212,246,78,246,246,212,246,246,246,212,246,246, +246,246,78,78,246,246,78,78,78,78,58,58,78,58,58,58,58,58,99,99, +99,78,99,58,99,99,58,99,58,8,58,99,58,99,99,58,58,99,58,58, +58,58,58,58,78,58,78,78,58,78,58,246,78,78,78,212,246,246,212,246, +246,246,246,246,246,246,246,246,246,246,246,58,246,58,99,212,246,212,78,78, +78,99,58,58,78,246,58,78,246,58,58,58,58,212,58,218,71,12,49,49, +49,112,22,72,65,112,49,112,112,112,223,19,118,62,244,62,62,23,23,244, +244,244,244,112,23,49,49,223,19,223,82,223,223,49,223,23,118,112,244,30, +62,62,62,62,23,62,23,223,82,8,82,71,30,244,22,72,55,245,103,237, +11,71,12,12,71,99,78,78,78,58,212,58,58,58,58,212,78,58,246,78, +58,58,58,212,78,246,58,78,78,212,212,246,246,246,212,246,246,246,246,246, +246,246,58,78,78,58,246,212,78,78,58,78,58,78,78,78,58,78,58,58, +218,58,58,99,58,99,99,99,58,8,218,99,58,58,58,99,58,58,99,78, +78,58,99,58,58,78,58,78,246,78,78,58,78,212,246,246,246,246,246,246, +246,246,246,212,246,212,246,246,246,212,78,246,58,58,58,246,78,78,212,246, +58,58,58,58,212,78,246,212,58,58,58,58,58,58,71,12,49,223,223,49, +30,208,72,30,49,49,112,49,223,223,23,22,244,62,23,23,62,22,112,118, +49,49,223,118,23,244,30,242,22,242,242,62,242,244,244,112,23,49,49,223, +23,112,30,244,62,112,210,23,23,49,82,8,223,244,237,30,208,55,243,245, +22,30,71,118,12,71,99,78,78,246,212,58,58,58,58,246,246,246,78,246, +58,58,58,78,212,78,246,246,246,58,58,212,246,246,246,246,246,246,246,246, +246,78,246,58,246,246,246,78,212,78,78,78,58,78,58,78,58,58,99,58, +58,58,99,58,58,58,58,58,58,8,58,99,58,58,58,58,99,58,78,78, +58,58,78,58,58,78,78,58,78,78,78,78,78,246,212,246,246,246,246,246, +246,246,246,246,246,246,212,246,246,246,78,58,58,58,58,246,78,78,246,99, +212,58,212,58,212,78,78,58,58,218,58,212,58,99,71,49,223,49,49,30, +55,72,112,49,244,11,49,82,112,242,242,62,23,62,244,112,118,223,82,118, +30,236,29,225,231,33,248,42,42,42,219,2,42,219,110,107,231,29,65,244, +112,223,223,49,112,30,30,23,23,23,23,49,82,101,49,30,30,242,72,243, +208,103,30,71,118,12,71,99,78,78,78,58,58,58,58,58,78,58,246,78, +58,58,99,58,246,58,246,58,246,58,99,58,212,246,246,212,246,246,246,246, +246,246,246,246,212,246,246,246,246,78,58,78,78,78,78,78,58,78,78,78, +58,78,99,99,99,58,58,99,99,8,99,58,99,99,58,58,58,58,78,78, +78,78,58,58,58,78,78,78,78,78,246,246,58,246,246,246,246,246,246,246, +246,246,212,246,99,58,246,246,246,246,212,58,58,58,99,212,78,212,212,58, +78,58,58,58,246,246,78,58,71,218,58,58,11,71,118,223,49,23,103,243, +22,49,118,30,118,82,49,30,242,62,70,62,244,118,223,82,112,65,93,205, +217,42,80,147,98,4,26,8,8,8,8,121,8,8,26,4,98,210,111,219, +29,29,65,112,223,82,23,30,244,62,62,62,62,49,82,82,112,30,30,65, +243,245,103,30,71,118,12,71,218,212,246,58,58,212,212,58,58,246,212,78, +58,58,212,58,58,246,78,246,58,58,58,58,246,212,246,246,246,246,246,246, +246,212,246,246,246,246,212,246,246,212,78,246,212,78,58,78,78,78,58,78, +78,78,58,58,58,58,99,58,58,8,58,58,58,58,58,58,58,58,237,78, +58,78,78,58,78,78,212,78,246,78,78,246,246,246,246,246,246,246,246,246, +246,246,246,58,58,58,246,246,246,246,58,58,99,58,58,246,246,78,99,78, +246,78,58,58,58,58,58,218,12,99,58,99,71,92,49,223,118,22,41,65, +223,23,30,118,19,23,22,242,23,23,30,112,223,19,112,29,222,232,87,80, +98,26,121,8,20,253,20,20,20,20,101,20,20,20,253,253,20,8,121,26, +4,14,2,231,29,30,49,82,112,30,244,62,23,210,118,82,101,223,30,244, +65,55,243,103,237,71,118,71,71,99,58,58,58,58,218,58,58,58,246,212, +58,58,212,78,99,58,246,246,78,58,58,58,58,246,246,246,246,246,246,246, +246,246,246,212,246,246,246,246,246,246,246,78,78,78,78,78,58,78,58,78, +78,58,58,58,78,99,58,58,99,8,99,58,58,99,99,58,58,58,58,237, +78,78,58,78,78,246,78,246,78,246,78,246,246,246,246,246,246,246,246,246, +246,246,58,58,58,58,246,246,246,58,99,78,246,212,99,246,212,58,78,246, +58,246,58,58,58,212,218,12,118,58,58,71,12,49,19,49,237,41,65,49, +118,112,223,82,244,236,62,66,62,30,82,8,112,93,68,6,137,88,162,253, +253,20,253,19,223,23,244,244,54,242,54,242,244,62,112,49,223,20,20,20, +20,253,26,98,14,33,29,244,82,101,112,22,62,62,62,23,49,53,82,30, +112,22,243,243,208,11,71,118,12,218,99,58,58,58,12,71,58,58,58,58, +99,58,58,246,246,58,58,246,246,58,58,58,99,58,246,246,246,246,78,58, +246,212,246,246,246,246,246,212,246,246,78,78,78,78,58,78,78,78,78,58, +78,58,78,237,78,58,99,99,78,8,58,99,58,58,78,78,78,78,78,78, +58,78,78,58,78,246,78,212,246,246,246,246,246,246,246,246,246,103,246,246, +246,246,58,58,58,99,212,246,246,58,212,78,246,58,58,58,58,58,212,78, +78,78,58,58,58,58,123,49,218,99,11,118,223,223,82,237,41,208,23,118, +237,223,82,244,18,210,23,23,112,19,223,103,64,6,148,147,26,253,20,8, +66,23,54,111,219,219,137,24,76,24,163,25,137,42,204,42,151,109,244,223, +20,20,20,20,8,4,111,231,236,23,82,12,237,62,62,23,62,223,253,223, +237,244,22,41,245,103,11,112,118,71,218,58,58,99,92,92,128,58,58,58, +58,58,58,212,78,58,58,212,58,58,58,78,78,58,212,246,246,246,58,58, +212,246,212,246,246,246,246,246,246,212,246,78,246,246,78,78,78,78,78,58, +78,58,58,78,99,58,58,58,99,8,99,58,58,58,58,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,246,246,246,246,103,246,246,246,246,246, +246,78,58,58,58,58,58,212,58,58,78,212,78,78,99,58,58,212,78,246, +212,212,58,58,58,218,92,12,218,99,71,12,223,82,118,243,55,23,223,30, +223,19,244,93,54,49,23,112,82,82,245,153,138,234,162,8,253,101,49,30, +111,125,24,201,142,16,159,142,43,95,197,156,193,193,51,141,224,25,248,231, +65,118,20,20,20,20,121,210,231,55,244,82,49,30,244,62,62,244,223,20, +118,237,112,208,243,245,237,71,118,49,71,58,58,218,92,92,12,58,58,99, +58,58,212,78,212,212,58,58,58,58,58,212,78,58,58,246,246,246,99,58, +99,246,246,246,246,246,246,246,246,246,212,246,58,78,78,78,78,78,58,78, +78,58,78,78,58,78,58,99,58,8,99,99,58,58,58,78,78,58,78,58, +78,78,78,246,78,78,78,246,246,246,246,246,246,246,246,103,246,246,246,246, +246,58,58,58,58,58,58,58,58,58,78,78,246,78,58,58,58,212,78,58, +58,78,58,58,58,12,92,12,99,218,118,19,82,223,22,116,237,49,112,112, +101,112,93,109,70,112,118,82,223,55,136,185,44,26,253,253,82,62,107,163, +117,16,114,159,161,106,98,46,26,26,26,26,26,4,32,81,44,142,43,234, +10,56,236,23,20,20,20,8,4,219,225,237,19,82,11,244,62,54,62,223, +20,112,30,244,72,239,103,237,71,12,12,71,58,71,92,92,12,128,58,58, +58,58,246,78,246,58,58,58,99,58,58,246,78,78,58,246,246,58,58,58, +58,212,246,212,246,246,246,246,246,246,78,78,246,58,246,58,78,246,78,58, +78,58,78,78,58,58,58,58,58,8,58,58,58,58,78,237,58,78,78,78, +78,78,78,58,246,246,212,246,246,246,246,246,246,246,246,246,246,246,246,246, +78,58,58,58,58,58,99,58,58,246,246,246,58,246,58,58,58,78,246,218, +11,58,58,58,58,12,92,71,218,11,49,223,101,23,239,93,23,118,244,223, +223,65,29,70,70,112,82,82,72,233,135,152,121,253,20,49,242,179,176,39, +198,156,32,47,26,26,69,113,26,47,9,47,162,113,26,121,113,252,152,159, +43,234,217,238,30,253,20,251,8,4,107,17,30,82,223,22,62,62,54,244, +82,19,237,112,244,41,245,30,112,71,92,71,99,71,12,92,92,71,78,58, +58,246,246,58,78,212,58,58,58,58,58,78,246,58,99,58,212,58,58,58, +58,78,246,246,246,246,246,246,246,246,246,246,78,78,78,78,246,58,78,78, +58,58,58,99,58,99,58,58,58,8,58,99,99,58,58,78,78,58,78,58, +78,58,78,78,78,78,78,246,246,246,246,246,246,246,246,246,78,246,246,246, +58,58,78,58,78,58,58,99,58,78,58,246,246,58,58,58,212,58,58,12, +71,58,58,58,99,92,92,71,218,71,223,8,19,22,150,30,49,11,23,101, +30,93,54,49,112,49,20,30,254,181,95,26,253,253,49,65,163,166,206,202, +52,26,8,121,4,161,43,114,139,131,57,200,195,188,192,88,26,26,121,98, +197,67,234,145,230,22,82,20,20,8,98,107,100,112,253,112,103,244,54,62, +49,20,49,237,118,208,243,103,11,11,12,92,92,92,92,12,49,12,58,58, +78,58,246,78,246,78,212,99,58,58,78,246,58,78,58,58,58,99,58,58, +58,99,246,246,246,246,246,246,246,246,246,246,246,78,246,78,246,78,58,78, +78,58,78,78,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,78,78,78,78,246,246,246,246,246,246,246,246,246,246,246,58,212,58,246, +99,212,58,99,78,99,58,58,78,246,58,58,58,78,78,58,78,78,99,71, +12,71,58,58,12,12,12,71,11,12,223,101,49,243,100,118,223,112,82,19, +93,225,113,23,244,101,223,41,129,199,52,253,20,223,242,124,39,57,117,122, +121,121,47,44,195,35,94,196,165,189,189,189,27,84,200,139,67,186,26,121, +240,106,159,234,175,68,242,20,20,20,8,210,238,93,223,19,237,244,23,54, +62,19,101,244,112,30,243,208,237,11,12,92,49,223,12,12,92,12,58,78, +246,78,58,246,78,212,78,78,58,58,212,58,58,58,78,99,58,58,99,58, +58,58,246,246,246,246,246,246,246,246,246,246,78,246,58,78,58,78,78,78, +78,78,237,78,58,58,58,58,58,8,99,58,99,58,78,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,103,246,246,246,246,218,58,58,78,78, +58,99,71,12,58,78,58,78,58,78,123,12,78,78,58,212,78,78,123,92, +12,12,99,99,12,92,92,71,11,118,82,101,112,116,236,82,112,112,82,118, +100,110,66,23,49,101,244,215,73,43,69,253,101,23,219,59,97,202,52,8, +8,4,120,97,187,139,27,143,46,113,26,26,46,88,60,27,131,200,192,47, +82,66,81,159,234,170,68,118,20,251,20,26,2,64,244,101,118,22,23,62, +62,49,20,118,244,23,208,245,30,11,71,12,92,12,12,49,12,12,71,58, +246,246,78,246,78,246,58,78,58,78,212,218,12,246,78,99,58,78,78,11, +12,58,58,246,246,103,246,246,58,246,246,246,246,78,246,78,78,78,58,78, +78,58,58,58,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,212,78,246,246,78,99,58,246,246,246,246,246,246,71,12,99,58,58,99, +58,58,53,251,71,78,78,78,78,246,19,19,71,246,246,78,212,246,12,92, +12,12,12,12,92,12,12,71,218,118,19,101,244,239,65,223,244,11,53,112, +222,235,66,112,223,20,72,45,90,221,8,253,19,242,214,97,57,152,26,8, +26,188,57,187,139,186,8,8,8,8,121,121,8,8,26,4,44,131,94,67, +162,82,113,44,159,76,220,29,82,0,20,8,98,238,245,82,82,237,23,62, +54,112,20,223,237,49,22,245,237,11,71,49,12,92,12,12,12,12,71,78, +246,58,246,58,246,78,246,58,246,212,58,19,101,218,78,78,99,58,58,53, +101,71,58,246,246,246,78,71,92,58,246,246,212,246,78,58,58,78,78,58, +78,78,78,78,58,58,58,58,58,8,99,99,58,99,58,78,78,58,99,58, +78,78,58,246,78,58,71,92,218,246,246,246,103,246,12,92,92,58,58,58, +58,218,63,53,19,246,246,78,78,212,53,92,92,212,246,78,78,58,92,218, +12,12,92,92,92,12,12,71,11,118,101,101,22,116,242,223,237,11,8,30, +17,62,70,112,8,53,72,172,134,143,8,20,223,109,102,57,97,81,121,82, +252,114,35,157,165,26,253,8,8,46,182,4,26,26,8,8,113,160,190,35, +186,66,121,106,117,152,232,68,49,79,20,8,26,42,17,223,53,22,112,244, +54,244,8,82,30,118,30,245,30,11,99,12,12,92,123,12,12,12,71,78, +246,78,246,78,58,246,246,58,246,58,12,53,53,12,78,78,78,99,12,63, +63,92,78,78,246,246,78,229,229,12,246,246,246,212,78,71,71,58,78,78, +58,78,78,58,58,58,212,58,58,8,99,58,58,58,58,78,78,58,99,218, +99,58,246,78,78,58,12,92,12,78,246,246,246,218,92,92,19,71,58,58, +58,12,38,92,53,71,246,58,246,218,108,92,92,218,246,212,78,58,12,218, +12,12,12,92,12,92,12,71,71,118,82,8,103,116,242,82,244,11,82,30, +222,210,223,23,8,101,55,172,183,186,8,253,223,110,102,157,97,161,8,8, +127,67,190,140,189,26,8,8,69,127,120,5,52,26,26,8,121,9,84,187, +43,113,82,98,142,152,89,119,244,20,0,253,121,219,64,23,101,30,30,23, +54,244,82,101,30,112,112,72,237,71,30,12,12,92,118,12,12,12,71,58, +246,246,58,246,58,212,78,246,58,246,108,63,53,19,78,78,78,58,53,101, +53,108,78,246,246,246,108,79,20,53,246,246,246,78,99,92,92,12,99,78, +78,58,58,218,218,218,99,58,58,8,99,99,58,58,58,99,99,218,71,11, +99,99,78,246,212,71,218,71,92,71,246,246,246,71,92,92,19,19,58,58, +58,92,53,92,92,108,58,246,246,71,92,92,92,92,212,246,246,58,123,48, +12,12,12,92,92,12,12,12,99,118,19,101,237,116,65,49,30,112,82,244, +222,235,26,118,82,101,65,136,183,7,8,8,82,242,21,157,57,192,69,8, +26,7,191,157,190,60,9,8,26,52,84,131,60,4,121,8,26,113,67,94, +142,113,82,98,43,152,10,119,244,251,0,253,121,111,64,23,101,244,22,49, +62,62,82,101,112,23,112,103,30,71,11,12,12,118,12,12,118,12,71,78, +78,246,78,58,218,58,78,246,246,12,53,101,53,19,58,78,58,12,63,63, +53,63,218,246,246,71,79,20,63,101,218,246,246,218,12,19,108,12,99,58, +99,71,218,71,71,218,71,218,71,8,99,58,99,99,58,58,11,218,71,218, +71,71,218,58,58,99,218,99,71,92,218,78,246,92,92,12,223,53,71,58, +58,19,19,92,92,19,12,78,78,12,92,92,92,92,71,78,78,218,123,241, +48,12,12,92,49,12,118,12,71,49,223,101,11,116,65,66,112,11,82,112, +100,54,66,66,223,20,244,105,90,159,8,8,8,244,10,167,187,202,98,8, +121,47,192,169,190,35,195,188,188,195,57,84,106,47,8,8,8,122,195,140, +95,66,82,98,142,221,175,119,244,251,251,20,8,219,64,112,101,30,242,118, +23,62,19,20,11,118,112,22,11,11,99,12,12,12,12,71,12,118,71,58, +246,58,246,99,12,99,212,78,58,19,53,53,101,53,58,78,218,53,101,53, +53,63,218,246,246,63,0,101,19,53,12,78,58,12,108,92,19,108,92,71, +71,12,71,71,123,71,71,123,71,8,99,99,58,58,58,11,58,11,99,218, +99,11,99,99,218,99,218,99,71,12,12,99,99,92,92,92,12,19,53,71, +99,38,53,12,12,92,19,218,212,92,92,92,48,12,108,128,246,218,123,48, +128,123,12,12,12,12,12,118,71,71,223,8,112,41,55,49,49,244,223,49, +93,231,70,82,223,20,82,116,181,158,252,8,20,223,242,214,57,157,156,46, +8,66,26,147,44,198,86,196,86,198,44,52,4,8,8,8,46,60,97,194, +52,82,82,180,159,177,232,64,66,79,20,8,26,231,100,49,8,237,62,23, +62,244,82,82,30,223,11,237,112,11,11,12,12,71,12,12,118,12,71,218, +246,78,58,218,92,99,246,212,92,53,79,79,53,53,218,58,19,63,38,126, +53,101,92,58,19,251,63,223,19,19,92,71,12,223,92,223,223,92,19,92, +12,71,123,71,71,71,71,71,71,8,11,58,11,58,99,58,99,58,99,58, +58,218,218,218,99,218,11,99,99,71,92,92,12,49,92,71,99,12,53,53, +92,20,53,123,48,12,92,19,218,19,92,12,241,48,92,92,58,218,92,241, +128,212,71,12,118,12,12,71,71,112,223,19,82,55,116,112,49,244,223,19, +208,238,235,66,223,253,82,22,250,73,95,113,8,82,49,111,102,207,132,188, +252,69,8,121,162,4,47,52,127,4,4,26,26,8,8,46,186,86,169,95, +66,8,4,95,192,87,45,236,101,251,253,8,70,222,236,223,223,237,244,23, +54,244,82,82,237,118,11,244,71,11,99,71,118,12,12,12,12,12,12,58, +78,78,246,123,108,12,212,12,53,63,13,83,63,53,12,92,53,226,13,13, +53,53,53,226,75,63,12,71,92,19,19,92,92,92,19,12,12,12,92,12, +71,71,71,71,71,12,71,71,71,8,99,99,58,99,99,58,58,99,58,58, +11,218,71,71,11,218,99,99,58,218,12,19,92,92,92,99,78,58,92,101, +75,251,53,12,123,48,92,108,101,63,92,12,241,241,92,92,108,92,108,128, +212,246,58,12,12,12,49,12,12,118,12,49,19,237,116,22,49,118,244,82, +112,17,231,70,223,82,20,82,93,45,133,7,46,8,8,49,50,224,168,207, +142,60,127,46,8,26,8,8,8,8,8,8,121,26,47,192,166,169,7,113, +66,113,7,156,36,217,28,23,251,251,20,26,111,222,30,8,49,22,112,62, +242,112,101,112,30,49,244,11,112,11,99,71,12,12,118,12,12,12,71,246, +246,78,212,92,108,92,218,53,38,13,0,0,63,101,20,63,101,75,83,83, +63,101,229,79,126,92,58,78,12,19,92,92,19,92,12,71,71,118,71,71, +218,12,71,71,71,71,71,218,99,8,218,99,218,58,58,218,99,99,58,99, +58,58,99,99,218,99,218,99,58,58,99,92,92,92,19,58,78,78,99,108, +0,34,38,123,123,48,123,92,53,108,92,12,241,241,241,123,92,19,19,123, +241,212,246,99,12,71,12,71,12,71,118,223,82,118,245,100,112,49,30,118, +223,237,238,111,113,223,19,20,49,93,144,184,44,113,8,253,19,210,173,141, +168,57,196,142,60,52,122,182,113,113,122,3,60,159,130,86,43,122,26,223, +47,106,95,76,89,68,244,20,251,20,8,210,238,72,223,19,30,112,23,62, +244,223,20,118,112,112,244,118,11,99,99,218,71,218,71,12,12,71,58,58, +78,246,246,92,63,53,53,101,83,0,83,83,53,63,63,53,20,83,0,0, +53,53,79,0,226,78,58,78,12,108,92,19,92,71,58,58,99,71,71,123, +71,218,218,71,218,218,99,218,99,8,99,99,218,218,99,99,99,99,58,99, +99,58,99,11,71,99,99,58,58,58,58,71,92,92,19,78,78,58,78,218, +53,63,101,123,123,48,48,123,92,19,92,92,241,241,241,241,92,92,92,12, +241,212,78,78,123,118,12,12,12,12,112,92,49,223,30,247,65,49,23,112, +82,23,72,231,14,26,82,19,101,49,17,146,102,154,147,69,8,82,49,23, +249,104,158,39,206,169,86,130,202,142,202,114,39,117,76,88,4,66,66,113, +7,95,234,175,68,22,101,20,251,8,4,107,100,112,101,112,30,23,112,62, +49,101,49,244,118,112,112,118,11,78,99,99,99,58,71,12,92,99,246,78, +246,58,218,108,108,53,63,229,0,83,34,13,53,53,101,38,13,0,0,13, +53,101,63,101,99,78,58,78,71,19,19,92,71,58,99,58,11,218,218,71, +99,99,99,99,218,58,99,218,218,8,71,218,99,99,218,58,99,99,99,99, +99,58,99,58,99,218,11,58,58,99,58,58,71,92,92,58,78,78,78,78, +118,19,53,123,48,128,128,48,123,12,92,92,48,128,212,48,241,12,12,92, +241,128,246,246,246,71,12,12,12,71,71,118,49,223,49,208,116,22,49,23, +11,223,223,72,225,235,113,82,82,101,49,65,68,164,201,7,162,26,8,121, +66,223,23,216,14,36,177,152,154,152,80,255,98,66,66,223,66,4,32,152, +152,163,228,222,112,251,20,20,8,113,219,222,22,82,23,22,62,112,54,244, +101,82,112,112,23,118,112,11,11,78,58,58,246,99,71,71,99,58,246,212, +58,58,123,108,108,53,20,13,101,19,34,13,53,53,53,0,75,38,0,34, +63,53,53,71,58,78,58,78,11,92,92,71,58,58,58,58,99,218,11,99, +11,58,218,218,99,99,218,99,99,8,99,71,99,99,99,99,99,218,58,99, +218,58,99,99,99,58,58,78,58,99,58,58,58,71,12,78,78,78,78,78, +58,12,19,12,48,218,246,218,48,12,92,92,241,48,58,212,48,241,12,92, +48,241,212,58,212,212,123,118,12,71,118,118,12,223,49,118,55,239,244,223, +112,112,82,118,236,225,14,4,26,82,101,19,112,93,153,21,224,174,88,162, +26,26,121,82,66,66,66,66,66,66,26,82,66,26,113,127,32,44,51,87, +248,222,236,223,20,20,20,8,70,111,17,237,223,49,237,30,62,54,30,118, +253,49,112,118,23,118,118,11,99,58,58,58,212,99,71,218,246,78,78,58, +58,58,108,108,63,38,13,92,58,12,13,251,53,63,251,79,12,71,34,34, +251,53,19,58,78,78,78,58,58,71,71,58,99,99,58,99,58,11,58,99, +99,99,99,218,218,99,218,218,99,8,71,99,218,218,218,99,218,99,99,99, +99,71,58,99,99,99,99,58,58,99,58,58,78,58,99,78,58,78,58,78, +78,78,99,218,128,58,58,78,128,48,12,92,123,241,78,246,58,48,241,218, +12,128,212,212,58,58,212,218,71,12,71,12,118,12,223,49,11,243,55,244, +49,112,244,223,49,236,17,111,4,121,82,82,8,223,244,29,153,61,148,234, +152,32,147,52,4,4,113,26,113,26,98,98,147,255,7,193,24,163,217,238, +110,112,101,20,20,253,8,70,107,222,22,223,223,244,244,244,244,242,112,82, +223,118,23,23,49,118,71,11,58,58,58,246,246,58,99,78,58,212,212,78, +58,99,53,53,38,83,19,58,246,19,34,79,251,34,34,71,58,71,79,13, +83,63,218,58,58,99,58,78,58,99,78,58,99,99,99,58,58,99,99,58, +218,11,218,99,11,218,11,99,71,8,71,218,218,11,71,99,218,99,99,99, +99,218,11,99,58,58,58,58,11,58,99,218,58,58,78,78,78,78,58,58, +78,78,78,78,58,78,78,78,58,58,48,123,48,48,128,78,246,78,128,241, +241,241,128,212,58,58,58,58,218,12,118,71,71,112,118,223,49,11,245,55, +30,49,112,244,223,19,30,93,107,111,4,26,101,101,8,101,112,242,93,203, +6,170,21,74,51,51,104,24,234,76,24,104,76,124,232,56,225,18,30,223, +20,20,20,20,8,66,235,231,236,112,223,118,30,112,112,54,244,112,82,49, +112,23,118,118,12,11,99,99,246,58,58,58,78,58,246,246,78,78,212,78, +58,12,53,229,34,40,78,78,58,38,0,13,13,79,71,58,58,71,13,0, +38,71,58,99,58,99,58,99,78,58,58,99,99,99,71,99,58,99,218,99, +71,99,218,99,99,71,218,99,71,8,71,71,71,123,218,218,11,218,218,218, +218,99,218,218,99,99,99,99,58,99,99,99,99,99,58,78,78,58,58,99, +99,78,78,246,78,212,78,78,58,78,128,48,48,241,48,246,78,58,246,128, +128,128,128,128,212,78,212,78,58,218,71,71,12,12,118,118,49,49,112,208, +41,22,49,112,244,23,19,49,22,93,219,14,4,8,82,101,20,101,223,49, +30,65,18,29,17,203,228,230,56,96,91,225,225,236,242,112,49,82,20,20, +20,20,82,113,210,107,29,22,118,223,112,30,244,244,62,112,23,82,223,49, +118,118,49,49,118,71,99,246,58,58,212,246,246,78,212,58,246,246,78,58, +218,53,209,126,40,78,78,78,218,0,34,34,79,71,78,99,58,71,251,229, +12,58,99,99,99,58,58,58,58,99,99,99,99,218,99,58,99,99,99,218, +99,218,11,218,218,11,218,71,71,8,71,123,71,71,218,123,71,99,11,99, +218,11,99,71,218,99,58,99,99,58,218,218,99,99,58,58,58,58,99,58, +58,99,58,246,246,246,78,58,58,58,78,58,48,48,241,78,246,78,78,58, +58,241,241,241,212,58,246,78,246,58,218,71,71,71,118,118,118,49,49,112, +103,243,236,112,49,244,112,49,223,118,65,93,107,14,98,113,82,8,101,253, +101,20,101,82,82,223,118,118,49,49,49,82,82,101,101,20,20,253,253,121, +26,70,235,110,29,103,118,223,223,11,244,244,54,242,244,49,19,223,49,118, +118,49,12,71,11,99,212,246,78,78,78,78,212,246,78,58,78,212,78,58, +12,38,213,71,78,58,58,78,40,83,79,20,99,58,99,58,99,12,92,71, +78,58,99,99,99,99,99,99,99,99,218,218,99,218,218,99,218,218,11,218, +11,218,218,71,218,218,71,123,71,8,71,71,12,71,71,218,218,218,71,71, +218,218,218,218,71,218,218,99,99,218,99,99,99,99,99,99,58,99,58,99, +99,99,99,58,78,78,78,78,58,99,58,58,58,128,48,128,78,78,58,78, +212,212,212,241,128,58,246,246,58,246,58,218,218,118,71,71,118,12,118,49, +23,237,245,55,208,23,118,23,112,223,223,118,244,236,18,110,14,210,4,66, +121,8,82,20,82,101,101,251,20,20,20,101,8,20,8,8,26,26,210,235, +109,110,65,30,118,223,49,244,244,244,244,242,65,30,223,82,49,118,118,49, +92,49,118,71,11,78,246,78,58,246,212,246,78,78,246,78,246,78,212,218, +53,92,99,78,58,58,58,246,53,0,53,99,99,58,99,58,99,71,218,58, +99,58,99,218,58,99,58,78,99,99,11,99,71,99,99,218,99,99,218,71, +123,218,71,218,12,71,71,71,71,8,71,71,71,71,71,118,71,71,218,99, +71,71,71,123,71,71,218,99,99,218,218,71,11,218,99,99,58,99,58,99, +99,99,218,58,58,78,78,78,58,99,99,58,58,58,58,128,246,78,58,58, +58,58,246,128,128,58,212,246,78,78,78,58,58,218,71,71,11,118,118,49, +12,23,11,103,243,72,237,23,23,112,23,223,19,223,112,22,109,18,29,111, +111,210,210,70,4,26,26,26,26,26,26,4,4,70,98,235,2,18,29,65, +54,23,223,49,23,244,244,112,244,54,22,244,118,82,223,223,118,92,49,49, +223,71,11,99,99,78,246,58,246,78,58,212,78,78,58,58,246,78,58,218, +71,78,58,58,99,58,58,99,19,77,58,58,58,218,99,58,58,58,58,58, +218,99,11,218,58,99,218,58,218,218,71,218,218,71,99,71,218,71,71,218, +71,123,71,71,71,71,71,71,12,8,118,118,71,71,118,71,71,71,118,12, +71,123,71,71,71,71,71,71,218,99,99,99,218,218,71,218,99,99,58,99, +99,218,99,218,58,58,246,78,78,99,99,99,99,58,246,78,58,246,58,58, +58,58,58,78,78,58,58,58,246,212,99,58,58,58,218,99,71,118,11,118, +49,49,49,23,11,208,55,245,22,112,23,23,23,23,49,49,49,223,112,30, +22,236,18,18,18,29,18,18,18,18,107,236,29,236,236,22,30,23,223,223, +223,118,118,112,244,112,244,242,242,30,23,223,82,223,49,49,49,223,49,12, +71,71,99,58,246,212,58,58,58,78,78,78,58,58,58,58,78,212,246,78, +78,58,58,11,99,58,78,78,99,58,58,99,218,99,58,99,58,58,58,218, +99,71,218,99,218,58,99,218,218,71,218,123,71,99,71,218,71,71,71,12, +71,71,12,12,12,12,12,12,12,8,12,12,12,12,12,12,118,118,71,71, +71,218,71,123,71,71,71,71,123,71,218,11,218,71,218,123,218,99,218,58, +99,99,11,218,71,99,99,58,78,58,99,99,71,99,58,78,246,246,246,58, +58,218,58,99,78,78,246,78,78,246,58,58,58,212,58,58,99,71,71,118, +71,118,118,23,49,112,112,103,72,72,65,244,112,23,118,118,70,223,223,223, +223,49,118,23,118,112,112,244,112,112,23,23,23,49,49,223,223,49,23,118, +244,244,112,62,244,109,22,30,49,223,223,82,49,223,49,223,223,118,118,71, +99,99,99,78,78,246,58,58,78,78,58,58,58,99,78,246,78,78,78,78, +99,99,99,58,99,58,78,78,58,99,99,11,218,99,99,58,58,11,99,218, +218,218,71,99,218,218,11,218,123,71,218,71,71,218,71,71,123,71,118,12, +71,12,12,12,12,12,12,12,12,8,12,12,12,12,12,12,71,71,71,118, +71,118,71,71,118,12,71,71,71,71,99,218,123,71,218,71,218,71,99,99, +99,218,218,71,218,218,99,58,58,58,58,218,99,218,218,99,58,99,78,58, +58,99,99,99,58,58,78,246,246,78,78,78,58,99,58,58,99,58,99,71, +11,71,12,23,118,118,118,23,112,30,103,208,208,65,242,112,118,23,23,118, +118,118,49,112,23,112,11,112,112,112,118,49,49,49,49,112,23,23,112,244, +244,22,22,22,242,112,49,223,223,66,223,49,223,49,223,49,12,71,71,99, +99,58,212,212,246,58,78,78,58,58,99,99,99,58,78,78,78,78,58,58, +99,99,99,58,58,58,58,58,99,218,71,218,99,99,218,58,99,99,71,218, +71,71,218,99,71,99,123,71,118,118,123,71,71,123,71,71,12,12,118,12, +12,12,12,12,12,12,71,12,71,8,12,92,12,92,71,12,118,118,12,12, +118,71,71,12,71,71,118,12,12,71,118,218,71,71,71,12,71,12,218,218, +99,99,218,218,71,71,71,218,99,99,99,99,71,71,218,71,99,58,58,58, +58,58,99,11,99,99,99,58,246,78,246,78,58,99,99,99,58,58,99,99, +99,11,71,112,112,118,118,92,118,23,118,112,30,237,103,65,65,22,30,54, +244,244,23,112,244,112,244,112,244,23,244,23,112,62,244,244,30,242,22,242, +22,30,23,49,49,19,82,223,223,49,49,49,223,49,12,11,11,218,99,58, +58,78,78,78,246,78,78,99,99,58,99,58,58,78,78,78,58,99,218,218, +71,99,99,99,58,99,58,99,71,123,71,218,99,99,218,99,218,71,12,71, +71,218,71,71,218,71,71,71,71,71,12,71,71,71,118,12,12,12,71,71, +12,12,12,12,118,12,12,92,12,8,12,12,71,12,12,12,12,12,71,12, +118,12,12,12,118,12,71,12,12,71,71,71,71,123,71,12,12,71,71,218, +218,218,11,71,123,71,71,218,71,99,99,58,99,99,71,218,218,99,218,58, +58,58,58,99,218,71,99,218,58,58,58,246,212,58,58,99,99,58,99,58, +58,58,58,218,71,71,112,71,118,118,49,23,118,118,49,112,112,30,237,22, +22,22,103,22,22,22,22,22,30,242,22,22,22,103,22,22,30,112,112,23, +49,49,49,82,223,66,49,49,49,49,223,12,118,71,218,99,99,58,99,58, +78,246,78,246,58,58,99,99,218,218,99,99,99,58,58,58,99,218,71,218, +99,99,58,58,58,99,218,123,71,71,218,218,99,99,99,123,71,71,71,92, +71,71,218,218,71,12,12,12,118,71,12,118,71,71,71,12,12,12,12,12, +12,12,118,118,12,12,12,12,12,8,92,92,92,12,12,12,12,12,12,12, +92,12,12,12,71,12,118,12,12,12,12,12,71,71,71,12,12,71,118,71, +71,123,71,71,71,118,71,71,71,123,71,218,218,99,218,71,12,71,71,218, +218,58,58,99,58,71,71,218,218,218,99,58,58,58,58,58,99,99,99,218, +218,99,58,58,99,99,99,11,11,11,23,112,118,112,49,118,118,118,23,118, +49,118,23,112,112,112,112,244,112,112,118,112,118,49,49,223,49,223,223,49, +223,223,49,49,223,49,223,223,118,118,71,11,218,99,218,99,218,78,58,58, +58,58,58,218,218,218,218,218,58,99,58,58,58,58,218,99,71,71,123,71, +218,99,58,99,99,71,71,12,12,71,71,71,218,218,218,71,118,71,71,12, +123,71,12,71,71,12,12,12,118,71,12,12,12,118,118,12,71,118,12,118, +12,12,12,12,12,92,12,12,92,8,92,92,12,12,92,12,92,12,12,12, +12,12,118,12,12,12,12,12,12,12,118,12,12,71,118,71,12,12,71,118, +71,71,71,123,218,118,12,71,71,71,71,99,99,218,218,71,71,71,71,71, +99,218,99,58,99,218,218,71,71,71,218,71,58,99,58,58,99,58,218,99, +99,218,99,99,58,58,58,99,58,99,218,11,71,112,11,112,118,23,118,23, +49,118,118,92,49,92,49,92,49,92,49,223,223,49,223,49,49,49,49,82, +49,49,49,223,118,118,71,71,11,71,99,218,218,99,58,58,58,58,58,58, +58,218,218,218,71,218,218,99,99,99,99,58,218,218,71,123,71,71,218,11, +99,99,218,218,71,71,12,71,12,218,218,218,71,218,118,12,71,118,71,71, +71,71,71,71,118,71,12,12,12,71,12,12,12,12,12,12,12,49,12,12, +12,92,12,49,12,92,12,12,92,8,92,92,92,92,92,12,92,12,12,92, +12,92,12,92,12,71,71,12,12,12,12,71,12,118,71,118,71,118,12,12, +12,12,71,71,218,71,71,118,118,12,12,118,71,218,71,218,123,12,12,12, +12,71,71,99,99,99,218,71,71,71,71,123,71,218,218,58,99,99,58,218, +99,218,218,11,99,218,99,218,218,58,58,58,99,218,71,11,71,71,118,11, +112,71,112,118,112,12,118,118,118,118,118,118,118,118,118,118,223,223,49,49, +118,118,118,71,71,71,218,71,218,71,99,99,99,218,58,58,58,218,218,218, +218,71,71,218,123,71,218,99,58,218,218,99,71,118,12,71,71,71,218,218, +218,99,71,118,12,12,12,71,71,123,71,71,71,12,118,12,92,71,118,71, +12,12,71,12,12,92,12,12,12,118,12,12,12,12,12,92,12,12,12,92, +71,92,12,92,92,92,92,92,12,8,92,92,92,92,92,92,92,92,92,12, +92,12,92,12,92,92,12,118,92,12,12,92,92,12,12,12,12,12,12,12, +12,12,71,118,12,118,71,71,12,12,12,12,118,71,218,71,218,71,118,12, +12,71,12,71,218,71,99,218,123,71,71,12,71,118,71,71,99,218,218,99, +218,99,218,218,218,71,123,71,218,218,218,218,99,99,99,58,99,99,99,218, +99,71,71,71,11,71,11,11,11,11,11,11,11,11,71,118,12,118,218,218, +71,218,71,71,218,71,99,71,99,99,99,58,218,99,218,218,71,71,71,71, +71,71,123,71,11,99,99,99,218,218,71,71,12,12,12,71,123,218,71,218, +71,118,71,12,118,12,12,71,71,218,118,12,12,12,92,12,71,118,71,71, +12,71,92,12,92,12,12,12,118,12,12,92,92,12,92,12,92,92,92,92, +92,92,92,92,12,92,92,92,92,8,92,92,92,12,92,92,92,92,92,92, +92,92,92,12,92,92,12,12,92,92,92,12,92,92,12,12,118,12,12,92, +92,12,12,12,71,71,71,118,12,118,12,12,12,71,12,71,71,71,71,12, +12,12,118,12,12,118,218,71,71,71,12,71,71,71,12,12,71,71,71,11, +218,99,218,218,218,218,71,71,71,71,71,71,71,71,218,218,218,218,99,218, +218,218,99,218,99,218,218,218,218,218,218,218,218,99,218,11,218,71,71,71, +71,123,71,123,71,218,99,218,218,11,218,99,71,71,71,71,71,71,71,92, +71,71,71,123,71,218,71,71,71,118,12,12,12,12,71,71,71,218,71,71, +12,12,12,12,12,12,12,71,71,71,12,12,12,12,12,12,12,12,118,12, +12,92,92,92,12,92,12,71,12,92,92,12,92,92,92,92,92,12,92,92, +92,92,92,92,92,92,92,92,92,8,92,19,92,92,92,92,92,223,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,12,118,12,12, +12,92,92,12,92,12,12,12,71,12,49,12,92,92,12,12,71,12,12,12, +12,71,12,12,12,12,71,12,71,71,218,218,71,118,12,12,12,71,12,12, +71,123,71,71,99,71,71,123,71,123,71,123,71,71,71,71,71,71,71,71, +71,218,218,218,71,71,218,71,218,71,218,71,71,123,71,123,71,123,71,123, +218,71,218,218,218,218,71,71,71,71,71,12,12,12,12,12,12,12,71,71, +71,123,218,218,71,71,12,12,12,71,12,12,12,12,71,71,71,12,118,12, +12,92,12,12,12,12,12,12,71,12,92,12,92,12,12,118,12,12,12,92, +92,92,92,92,92,12,92,92,12,92,92,92,92,19,12,92,92,92,92,92, +12,92,92,92,92,92,92,92,92,8,19,108,19,108,12,19,92,92,92,92, +92,92,92,92,92,19,92,92,92,92,92,92,92,92,92,92,92,92,12,92, +92,92,92,92,92,92,12,12,12,12,71,12,92,92,92,92,12,92,118,12, +12,12,12,12,92,12,12,12,71,12,71,71,71,12,12,12,12,12,12,92, +112,118,71,12,71,71,71,218,71,71,71,71,71,71,12,12,12,12,12,12, +12,118,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, +71,71,71,71,71,71,71,71,118,71,12,71,12,12,12,12,12,71,71,123, +71,71,71,92,12,12,12,12,92,92,71,12,12,12,12,71,12,12,92,12, +92,92,12,118,12,12,118,12,12,92,92,92,92,12,12,12,12,92,92,92, +92,12,92,12,92,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,19,19,108,92,8,92,92,19,92,108,92,19,92,92,92, +92,108,92,92,92,12,92,92,12,92,92,92,92,92,92,92,92,92,92,12, +12,92,92,92,92,223,12,92,12,12,12,12,12,92,92,12,92,12,12,12, +12,12,12,12,49,12,92,92,92,92,12,12,71,12,12,12,12,12,12,12, +92,92,118,92,12,12,118,12,12,12,12,12,12,71,12,12,12,12,12,12, +12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, +12,12,118,118,12,118,12,12,12,12,12,12,12,12,12,12,12,12,71,12, +12,12,71,92,12,92,92,49,12,12,12,12,118,12,12,118,92,12,92,92, +12,12,12,12,123,12,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,92,92,19,92,92,108, +92,19,92,108,108,92,108,92,108,8,19,108,19,92,19,108,108,108,92,19, +92,92,19,92,108,108,92,108,108,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,12,12,12,12,12,12,92,92,92,92,92,92,12,12,12,12,12,118,12, +12,12,12,92,12,12,12,12,71,12,12,12,12,71,71,12,12,71,118,118, +12,12,12,12,12,118,12,12,12,92,12,12,12,12,12,71,12,12,118,12, +12,71,12,12,12,12,12,92,118,118,12,12,12,12,71,12,12,12,49,12, +92,12,92,92,92,12,92,12,12,12,12,12,92,92,92,92,92,92,92,92, +12,12,71,92,92,92,12,92,223,92,92,92,12,92,92,92,92,92,12,19, +92,92,92,92,92,92,108,92,108,19,92,108,108,108,92,92,19,108,92,108, +19,92,19,92,108,92,108,19,19,8,19,108,19,108,108,19,92,19,108,19, +19,108,108,19,19,92,108,92,92,108,19,12,108,108,92,19,108,108,92,19, +92,92,92,92,92,92,108,19,92,92,92,92,12,92,92,92,92,92,92,92, +92,92,92,12,12,118,123,92,12,12,92,92,92,92,92,92,12,12,12,12, +12,92,12,12,92,12,92,92,92,92,92,92,12,12,12,12,12,12,12,71, +71,12,12,12,12,12,12,12,71,12,12,12,12,12,12,92,12,12,92,12, +92,12,12,49,12,92,12,12,12,12,12,71,12,12,12,12,92,12,92,12, +92,92,92,92,92,12,12,12,12,92,12,12,92,92,92,92,92,92,12,12, +12,92,92,92,92,19,108,92,92,92,92,92,92,92,92,19,92,108,108,92, +92,92,92,19,108,92,19,108,92,108,108,92,19,92,108,19,108,92,108,92, +19,108,108,92,108,108,19,92,108,8,19,19,19,19,19,108,19,19,108,92, +19,19,108,92,19,19,108,19,108,92,108,19,92,19,92,92,92,19,92,92, +92,92,92,92,92,92,19,108,92,19,19,92,92,92,92,92,92,92,223,92, +223,92,92,92,92,92,92,92,92,92,92,92,92,223,92,92,92,12,92,12, +12,12,12,12,92,12,12,92,12,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,92,49,92,12,92,92,12,12,92,12,92,12,92,12,12,92,12, +12,12,12,12,12,12,12,92,92,92,12,92,92,92,92,92,92,92,92,92, +92,92,12,12,12,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,19,92,92,108,12,92,92,92,12,19,92,92,108,92,19,19,92, +92,92,92,92,108,19,92,19,19,92,92,108,108,92,108,92,19,19,19,108, +19,19,19,19,19,19,108,19,19,8,19,53,19,53,19,53,19,53,19,108, +19,108,19,108,108,108,19,108,19,108,19,108,108,108,108,19,108,19,108,19, +19,92,108,19,19,12,108,92,108,92,108,19,108,92,92,92,92,92,92,19, +92,19,108,92,19,92,92,92,92,92,92,92,92,92,92,92,108,108,19,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,92,92,92,12,92,19,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,108,19,92,92,223,92,92,92,92,92,92, +19,108,108,108,108,19,92,92,92,92,108,108,108,108,108,92,108,92,108,19, +92,19,108,108,19,108,108,108,108,108,19,19,19,19,19,19,108,108,53,19, +108,19,108,53,19,53,19,53,19,8,19,19,19,19,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,108,19,108,19, +19,19,19,19,108,19,108,19,108,19,108,19,19,19,19,108,19,92,92,92, +19,19,108,19,108,19,19,92,92,92,92,92,92,92,92,19,19,108,19,108, +19,92,19,92,92,92,92,92,92,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,19,19,19,92,19,19,92,19,19,108,92,92,92,19,92,92,92, +92,92,92,92,92,19,19,19,19,108,19,108,92,92,92,92,92,92,19,19, +92,19,223,19,108,19,108,92,19,19,19,19,19,19,108,19,108,19,108,19, +19,19,19,19,19,19,19,19,19,108,19,108,19,108,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,8}; diff --git a/plug-ins/DigitalSignature/.cvsignore b/plug-ins/DigitalSignature/.cvsignore new file mode 100644 index 0000000000..147fc23536 --- /dev/null +++ b/plug-ins/DigitalSignature/.cvsignore @@ -0,0 +1,5 @@ +Makefile.in +Makefile +.deps +_libs +DigitalSignature diff --git a/plug-ins/DigitalSignature/DigitalSignature.c b/plug-ins/DigitalSignature/DigitalSignature.c new file mode 100644 index 0000000000..e221b4f896 --- /dev/null +++ b/plug-ins/DigitalSignature/DigitalSignature.c @@ -0,0 +1,1010 @@ +/********************************************************************** + * Digital Signature Plug-In (Version 1.00) + * Daniel Cotting (cotting@mygale.org) + ********************************************************************** + * Official homepages: http://www.mygale.org/~cotting + * http://cotting.citeweb.net + * http://village.cyberbrain.com/cotting + ********************************************************************** + */ + + +/* The GIMP -- an image manipulation program + * Copyright (C) 1995 Spencer Kimball and Peter Mattis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include +#include +#include + +#include "libgimp/gimp.h" +#include "gtk/gtk.h" +#include "logo.h" + +#define ENTRY_WIDTH 200 + +typedef struct { + gint mode; + gint licence; + gint contents; + char signature[50]; + char email[30]; + char homepage[50]; + char date[20]; + gint warningmessage; +} signatureValues; + +typedef struct { + gint run; +} signatureInterface; + + +/* Declare local functions. + */ +static void query(void); +static void run(char *name, int nparams, + GParam *param, + int *nreturn_vals, + GParam **return_vals); +static void drawsignature(GDrawable *drawable); +static void readsignature(GDrawable *drawable); +static gint signature_dialog(void); +static gint signature_warning_dialog(void); +static gint message_dialog(char *, char *, char *); +GtkWidget * signature_logo_dialog(void); + + + + +GtkWidget *maindlg; +GtkWidget *logodlg; +GtkTooltips *tips; +GdkColor tips_fg,tips_bg; + +GPlugInInfo PLUG_IN_INFO = +{ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ +}; + +static signatureValues wvals = { + 1,0,0,"","","","",1 +}; /* wvals */ + +static signatureInterface bint = +{ + FALSE /* run */ +}; + + +MAIN() + +static void +query(void) +{ + static GParamDef args[] = + { + { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, + { PARAM_IMAGE, "image", "Input image (unused)" }, + { PARAM_DRAWABLE, "drawable", "Input drawable" }, + { PARAM_STRING, "signature[50]", "Signature (Name of author, company etc.)" }, + { PARAM_STRING, "e-mail[30]", "e-mail address" }, + { PARAM_STRING, "homepage[50]", "Address of the homepage" }, + { PARAM_STRING, "date[20]", "Date of creation" }, + { PARAM_INT8, "mode", "FALSE: Write signature; TRUE: Read signature" }, + { PARAM_INT8, "licence", "FALSE: Freely distributable; TRUE: Restricted distribution" }, + { PARAM_INT8, "contents", "TRUE: Adult only contents" }, + }; + + static GParamDef *return_vals = NULL; + static int nargs = sizeof(args)/ sizeof(args[0]); + static int nreturn_vals = 0; + + gimp_install_procedure("plug_in_signature", + "Puts a hidden signature on your images.", + "", + "Daniel Cotting (cotting@mygale.org, http://www.mygale.org/~cotting)", + "Daniel Cotting (cotting@mygale.org, http://www.mygale.org/~cotting)", + "December, 1997", + "/Filters/Image/Digital Signature", + "RGB*, GRAY*, INDEXED*", + PROC_PLUG_IN, + nargs, nreturn_vals, + args, return_vals); +} + +static void +run(char *name, + int nparams, + GParam *param, + int *nreturn_vals, + GParam **return_vals) +{ + static GParam values[1]; + GDrawable *drawable; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gchar **argv; + gint argc; + gint ending=FALSE; + + run_mode = param[0].data.d_int32; + + values[0].type = PARAM_STATUS; + values[0].data.d_status = status; + + *nreturn_vals = 1; + *return_vals = values; + + drawable = gimp_drawable_get(param[2].data.d_drawable); + + switch(run_mode) { + case RUN_INTERACTIVE: + /* Possibly retrieve data */ + gimp_get_data("plug_in_signature", &wvals); + /* Get information from the dialog */ + argc = 1; + argv = g_new(gchar *, 1); + argv[0] = g_strdup("apply_signature"); + gtk_init(&argc, &argv); + gtk_rc_parse(gimp_gtkrc()); + + ending=signature_dialog(); + + if (ending==FALSE) return; + if ((wvals.warningmessage) && (ending!=100)) + if (!signature_warning_dialog()) + return; + + if (ending==100) {wvals.mode=1;} else {wvals.mode=0;} + break; + + case RUN_NONINTERACTIVE: + /* Make sure all the arguments are present */ + if (nparams != 10) + status = STATUS_CALLING_ERROR; + if (status == STATUS_SUCCESS) + wvals.mode = param[3].data.d_int8; + strncpy (wvals.signature,param[4].data.d_string, 50); + strncpy (wvals.email,param[5].data.d_string, 30); + strncpy (wvals.homepage,param[6].data.d_string, 50); + strncpy (wvals.date,param[7].data.d_string, 20); + wvals.signature[49]='\0'; + wvals.email[29]='\0'; + wvals.homepage[49]='\0'; + wvals.date[19]='\0'; + + wvals.licence = param[8].data.d_int8; + wvals.contents = param[9].data.d_int8; + argc = 1; + argv = g_new(gchar *, 1); + argv[0] = g_strdup("apply_signature"); + gtk_init(&argc, &argv); + gtk_rc_parse(gimp_gtkrc()); + tips = gtk_tooltips_new (); + + break; + case RUN_WITH_LAST_VALS: + /* Possibly retrieve data */ + argc = 1; + argv = g_new(gchar *, 1); + argv[0] = g_strdup("apply_signature"); + gtk_init(&argc, &argv); + gtk_rc_parse(gimp_gtkrc()); + tips = gtk_tooltips_new (); + gimp_get_data("plug_in_signature", &wvals); + + break; + default: + break; + } + if (status == STATUS_SUCCESS) { + if (!wvals.mode) { + gimp_tile_cache_ntiles(2 *(drawable->width / gimp_tile_width() + 1)); + gimp_progress_init("Writing signature. Please wait..."); + drawsignature(drawable); + if(run_mode != RUN_NONINTERACTIVE) + gimp_displays_flush(); + if(run_mode == RUN_INTERACTIVE) + gimp_set_data("plug_in_signature", &wvals, sizeof(signatureValues)); + values[0].data.d_status = status; + gimp_drawable_detach(drawable); + } else { + readsignature(drawable); + if(run_mode == RUN_INTERACTIVE) + gimp_set_data("plug_in_signature", &wvals, sizeof(signatureValues)); + values[0].data.d_status = status; + gimp_drawable_detach(drawable); + } + } +} + +static void +drawsignature(GDrawable *drawable) +{ + GPixelRgn srcPR, destPR; + gint width, height; + gint bytes; + gint row; + gint x1, y1, x2, y2, ix, iy; + guchar *src, *dest; + gint i, col; + gint value; + long count=1,smallcount=0; + gfloat regionwidth, regionheight, dx, dy; + gfloat a, b, x, y; + glong pixelpos, pos; + guchar bgr_red, bgr_blue, bgr_green; + char *point; + char *point2; + int finished_atleast_once=0; + + + typedef struct { + char header[3]; + char signature[50]; + char email[30]; + char homepage[50]; + char date[20]; + char flags[1]; + char reserved[45]; + } _wholedata; + + _wholedata wholedata; + wvals.signature[49]='\0'; + wvals.email[29]='\0'; + wvals.homepage[49]='\0'; + wvals.date[19]='\0'; + point2=(char*) &wholedata; + for (i=0;i<200; i++) + { + point2[i]='\0'; + } + strncpy(wholedata.header,"SIG",3); + strncpy(wholedata.signature,wvals.signature,50); + strncpy(wholedata.email,wvals.email,30); + strncpy(wholedata.homepage,wvals.homepage,50); + strncpy(wholedata.date,wvals.date,20); + if (wvals.contents) wholedata.flags[1]|=1; + if (wvals.licence) wholedata.flags[1]|=2; + + gimp_palette_get_background(&bgr_red, &bgr_green, &bgr_blue); + + gimp_drawable_mask_bounds(drawable->id, &x1, &y1, &x2, &y2); + + + regionwidth = x2-x1; + a = regionwidth/2; + regionheight = y2-y1; + b = regionheight/2; + + width = drawable->width; + height = drawable->height; + bytes = drawable->bpp; + + gimp_pixel_rgn_init(&srcPR, drawable, 0, 0, width, height, FALSE, FALSE); + gimp_pixel_rgn_init(&destPR, drawable, 0, 0, width, height, TRUE, TRUE); + + src = g_malloc((x2-x1)*(y2-y1)*bytes); + dest = g_malloc((x2-x1)*(y2-y1)*bytes); + gimp_pixel_rgn_get_rect(&srcPR, src, x1, y1, regionwidth, regionheight); + + point=(char *)&wholedata; + + + for(col = 0; col < regionwidth; col++) { + dx = (gfloat)col - a; + for(row = 0; row < regionheight; row++) { + pixelpos = (col+row*regionwidth)*bytes; + dy = -((gfloat)row - b); + x = dx+a; + y = -dy+b; + ix=(int)x; + iy=(int)y; + smallcount++; + if (smallcount==9) { + count++; + point++; + smallcount=1; + } + if ((count % 200)==0) { point=(char *)&wholedata; finished_atleast_once=1;} + pos = ((gint)(iy)*regionwidth + (gint)(ix)) * bytes; + for(i = 0; i < bytes; i++) { + value = src[pos+i]; + if (point[0]&(1<<(smallcount-1))){ + if (((int)((float)value/2.0))*2==value){ + value+=1; + if (value==257) { value=255; } + } + } else { + if (!(((int)((float)value/2.0))*2==value)){ + value+=1; + if (value==256) { value=254; } + } + } + dest[pixelpos+i] = value; } } + if(((gint)(regionwidth-col) % 5) == 0) + gimp_progress_update((gdouble)col/(gdouble)regionwidth); + } + + gimp_pixel_rgn_set_rect(&destPR, dest, x1, y1, regionwidth, regionheight); + g_free(src); + g_free(dest); + + if (!finished_atleast_once) { + message_dialog("Error", "Could not write signature", "The picture you wanted to process is to small\n" + "to contain the whole signature information.\n" + "Use an image with larger dimensions."); + } else { + message_dialog("Signature written successfully", NULL, "\nYour signature has been written\n" + "successfully! Start the Digital\n" + "Signature plug-in once again and\n" + "select 'read' to view the hidden\n" + "information included in the image.\n"); + } + gimp_drawable_flush(drawable); + gimp_drawable_merge_shadow(drawable->id, TRUE); + gimp_drawable_update(drawable->id, x1, y1,(x2 - x1),(y2 - y1)); +} + +static void +readsignature(GDrawable *drawable) +{ + GPixelRgn srcPR; + gint width, height; + gint bytes; + gint row, value; + gint x1, y1, x2, y2, ix, iy, i; + guchar *src; + gint col, finished_atleast_once=FALSE; + gfloat regionwidth, regionheight, dx, dy; + gfloat a, b, x, y; + glong pixelpos, pos; + guchar bgr_red, bgr_blue, bgr_green; + long count=1,smallcount=0; + char displaystring[500]; + char * point; + char *point2; + typedef struct { + char header[3]; + char signature[50]; + char email[30]; + char homepage[50]; + char date[20]; + char flags[1]; + char reserved[45]; + } _wholedata; + + _wholedata wholedata; + point2=(char*) &wholedata; + for (i=0;i<200; i++) + { + point2[i]='\0'; + } + + gimp_palette_get_background(&bgr_red, &bgr_green, &bgr_blue); + + gimp_drawable_mask_bounds(drawable->id, &x1, &y1, &x2, &y2); + regionwidth = x2-x1; + a = regionwidth/2; + regionheight = y2-y1; + b = regionheight/2; + + width = drawable->width; + height = drawable->height; + bytes = drawable->bpp; + + gimp_pixel_rgn_init(&srcPR, drawable, 0, 0, width, height, FALSE, FALSE); + + src = g_malloc((x2-x1)*(y2-y1)*bytes); + gimp_pixel_rgn_get_rect(&srcPR, src, x1, y1, regionwidth, regionheight); + + point=(char *)&wholedata; + + for(col = 0; col < regionwidth; col++) { + dx = (gfloat)col - a; + for(row = 0; row < regionheight; row++) { + pixelpos = (col+row*regionwidth)*bytes; + dy = -((gfloat)row - b); + x = dx+a; + y = -dy+b; + ix=(int)x; + iy=(int)y; + pos = ((gint)(iy)*regionwidth + (gint)(ix)) * bytes; + + smallcount++; + if (smallcount==9) { + count++; + point++; + smallcount=1; + } + if ((count % 200)==0) {finished_atleast_once=1; goto fin;} + + + value = src[pos]; + if (!(((int)((float)value/2.0))*2==value)){ + point[0]|=(1<<(smallcount-1)); + } + } + } +fin: + g_free(src); + + if (!finished_atleast_once) { + message_dialog("Error", "Could not read signature", "The picture you wanted to process is to small\n" + "to contain the whole signature information.\n" + "Use an image with larger dimensions."); + return; + } + if (strncmp("SIG",wholedata.header,3)) { + message_dialog("Error", "No signature", "The picture you wanted to process contains\n" + "no signature or the signature has been destroyed\n" + "with some image manipulation."); + return; + } + sprintf(displaystring, "----------------------------------\nImage creator:\n%s\n\n" + "E-mail address:\n%s\n\n" + "Internet homepage:\n%s\n\n" + "Date of creation:\n%s\n\n" + "Freely distributable:\n%s\n\n" + "Adult contents:\n%s\n----------------------------------" + , wholedata.signature + , wholedata.email + , wholedata.homepage + , wholedata.date + , (wholedata.flags[1] & 2) ? "Yes" : "No" + , (wholedata.flags[1] & 1) ? "Yes" : "No" + ); + + message_dialog("Signature read successfully", "Image information", displaystring ); +} + +void +signature_close_callback(GtkWidget *widget, gpointer data) +{ + gtk_widget_destroy(maindlg); + gtk_main_quit(); +} + + +void +signature_logo_close_callback(GtkWidget *widget, gpointer data) +{ + gtk_main_quit(); +} + +void +signature_ok_callback(GtkWidget *widget, gpointer data) +{ + bint.run = TRUE; + gtk_widget_destroy(GTK_WIDGET(data)); +} + +void +signature_ok2_callback(GtkWidget *widget, gpointer data) +{ + bint.run = 100; + gtk_widget_destroy(GTK_WIDGET(data)); +} + +void +signature_logo_ok_callback(GtkWidget *widget, gpointer data) +{ + gtk_widget_set_sensitive (maindlg, TRUE); + gtk_widget_destroy(logodlg); +} + +void +signature_about_callback(GtkWidget *widget, gpointer data) +{ + gtk_widget_set_sensitive (maindlg, FALSE); + signature_logo_dialog(); +} + +static void +toggle_update (GtkWidget *widget, + gpointer data) +{ + int *toggle_val; + + toggle_val = (int *) data; + + if (GTK_TOGGLE_BUTTON (widget)->active) + *toggle_val = TRUE; + else + *toggle_val = FALSE; +} + +static void +signature_entry1_callback (GtkWidget * widget, gpointer data) +{ + strncpy (wvals.signature, gtk_entry_get_text (GTK_ENTRY (widget)), 50); +} + +static void +signature_entry2_callback (GtkWidget * widget, gpointer data) +{ + strncpy (wvals.email, gtk_entry_get_text (GTK_ENTRY (widget)), 30); +} +static void +signature_entry3_callback (GtkWidget * widget, gpointer data) +{ + strncpy (wvals.homepage, gtk_entry_get_text (GTK_ENTRY (widget)), 50); +} +static void +signature_entry4_callback (GtkWidget * widget, gpointer data) +{ + strncpy (wvals.date, gtk_entry_get_text (GTK_ENTRY (widget)), 20); +} + +static void +set_tooltip (GtkTooltips *tooltips, GtkWidget *widget, const char *desc) +{ + if (desc && desc[0]) + gtk_tooltips_set_tips (tooltips, widget, (char *) desc); +} + +static gint +signature_dialog() +{ + GtkWidget *dlg; + GtkWidget *label; + GtkWidget *entry; + GtkWidget *button; + GtkWidget *toggle; + GtkWidget *frame; + GtkWidget *vbox; + GtkWidget *hbox; + gchar buffer[100]; + + + bint.run=FALSE; + + dlg = maindlg = gtk_dialog_new(); + gtk_window_set_title(GTK_WINDOW(dlg), "Digital Signature "); + gtk_window_position(GTK_WINDOW(dlg), GTK_WIN_POS_MOUSE); + gtk_signal_connect(GTK_OBJECT(dlg), "destroy", + (GtkSignalFunc)signature_close_callback, + NULL); + + + + frame = gtk_frame_new("Settings"); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width(GTK_CONTAINER(frame), 10); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->vbox), frame, TRUE, TRUE, 0); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_border_width(GTK_CONTAINER(vbox), 10); + gtk_container_add(GTK_CONTAINER(frame), vbox); + + tips = gtk_tooltips_new (); + /* use black as foreground: */ + tips_fg.red = 0; + tips_fg.green = 0; + tips_fg.blue = 0; + /* postit yellow (khaki) as background: */ + gdk_color_alloc (gtk_widget_get_colormap (frame), &tips_fg); + tips_bg.red = 61669; + tips_bg.green = 59113; + tips_bg.blue = 35979; + gdk_color_alloc (gtk_widget_get_colormap (frame), &tips_bg); + gtk_tooltips_set_colors (tips,&tips_bg,&tips_fg); + + hbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); + + + label = gtk_label_new("Signature: "); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + gtk_widget_show(label); + + entry = gtk_entry_new(); + gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); + gtk_widget_set_usize(entry, ENTRY_WIDTH, 0); + sprintf(buffer, "%s", wvals.signature); + gtk_entry_set_text(GTK_ENTRY(entry), buffer); + + gtk_signal_connect(GTK_OBJECT(entry), "changed", + (GtkSignalFunc)signature_entry1_callback, + NULL); + gtk_widget_show(entry); + set_tooltip(tips,entry,"Here you can specify your signature (name of author, company etc.)"); + + gtk_widget_show(hbox); + + hbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); + + label = gtk_label_new("E-mail: "); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + gtk_widget_show(label); + + entry = gtk_entry_new(); + gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); + gtk_widget_set_usize(entry, ENTRY_WIDTH, 0); + sprintf(buffer, "%s", wvals.email); + gtk_entry_set_text(GTK_ENTRY(entry), buffer); + gtk_signal_connect(GTK_OBJECT(entry), "changed", + (GtkSignalFunc)signature_entry2_callback, + NULL); + gtk_widget_show(entry); + set_tooltip(tips,entry,"Here you can specify an e-mail address, where the author/company can be contacted."); + + gtk_widget_show(hbox); + + hbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); + + label = gtk_label_new("Internet address: "); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + gtk_widget_show(label); + + entry = gtk_entry_new(); + gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); + gtk_widget_set_usize(entry, ENTRY_WIDTH, 0); + sprintf(buffer, "%s", wvals.homepage); + gtk_entry_set_text(GTK_ENTRY(entry), buffer); + gtk_signal_connect(GTK_OBJECT(entry), "changed", + (GtkSignalFunc)signature_entry3_callback, + NULL); + gtk_widget_show(entry); + set_tooltip(tips,entry,"Here you can specify an internet address, where the homepage of the author/company can be found."); + + gtk_widget_show(hbox); + + hbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); + + label = gtk_label_new("Date of creation: "); + gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0); + gtk_widget_show(label); + + entry = gtk_entry_new(); + gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); + gtk_widget_set_usize(entry, ENTRY_WIDTH, 0); + sprintf(buffer, "%s", wvals.date); + gtk_entry_set_text(GTK_ENTRY(entry), buffer); + gtk_signal_connect(GTK_OBJECT(entry), "changed", + (GtkSignalFunc)signature_entry4_callback, + NULL); + gtk_widget_show(entry); + set_tooltip(tips,entry,"Here you can specify the date, when the image was created."); + + gtk_widget_show(hbox); + + toggle = gtk_check_button_new_with_label ("Restricted image distribution"); + gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect (GTK_OBJECT (toggle), "toggled", + (GtkSignalFunc) toggle_update, + &wvals.licence); + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), wvals.licence); + gtk_widget_show (toggle); + set_tooltip(tips,toggle,"If this option is enabled, a flag will be set, that the image is not freely distributable."); + + toggle = gtk_check_button_new_with_label ("Adult contents"); + gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect (GTK_OBJECT (toggle), "toggled", + (GtkSignalFunc) toggle_update, + &wvals.contents); + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), wvals.contents); + gtk_widget_show (toggle); + set_tooltip(tips,toggle,"If this option is enabled, a flag will be set, that the contents of the image should only be accessible to adults."); + + gtk_widget_show(vbox); + gtk_widget_show(frame); + + button = gtk_button_new_with_label("Write"); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc)signature_ok_callback, + dlg); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), + button, TRUE, TRUE, 0); + gtk_widget_grab_default(button); + gtk_widget_show(button); + + set_tooltip(tips,button,"Close the dialog box and write signature."); + + button = gtk_button_new_with_label("Read"); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc)signature_ok2_callback, + dlg); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), + button, TRUE, TRUE, 0); + gtk_widget_show(button); + + set_tooltip(tips,button,"Close the dialog box and read signature."); + + button = gtk_button_new_with_label("Cancel"); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_signal_connect_object(GTK_OBJECT(button), "clicked", + (GtkSignalFunc)gtk_widget_destroy, + GTK_OBJECT(dlg)); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), + button, TRUE, TRUE, 0); + gtk_widget_show(button); + set_tooltip(tips,button,"Close the dialog box without reading or writing a signature."); + + button = gtk_button_new_with_label("About..."); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc)signature_about_callback,button); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), + button, TRUE, TRUE, 0); + gtk_widget_show(button); + set_tooltip(tips,button,"Show information about the author and the plug-in."); + + gtk_widget_show(dlg); + + gtk_main(); + gdk_flush(); + + return bint.run; +} + +static gint +message_dialog(char * title, char *title2, char * text) +{ + GtkWidget *dlg; + GtkWidget *label; + GtkWidget *button; + GtkWidget *frame; + GtkWidget *vbox; + GtkWidget *hbox; + bint.run=FALSE; + + dlg = gtk_dialog_new(); + /* use black as foreground: */ + tips_fg.red = 0; + tips_fg.green = 0; + tips_fg.blue = 0; + /* postit yellow (khaki) as background: */ + gdk_color_alloc (gtk_widget_get_colormap (dlg), &tips_fg); + tips_bg.red = 61669; + tips_bg.green = 59113; + tips_bg.blue = 35979; + gdk_color_alloc (gtk_widget_get_colormap (dlg), &tips_bg); + gtk_tooltips_set_colors (tips,&tips_bg,&tips_fg); + + gtk_window_set_title(GTK_WINDOW(dlg), title); + gtk_window_position(GTK_WINDOW(dlg), GTK_WIN_POS_MOUSE); + gtk_signal_connect(GTK_OBJECT(dlg), "destroy", + (GtkSignalFunc)signature_close_callback, + NULL); + + + button = gtk_button_new_with_label("OK"); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_signal_connect_object(GTK_OBJECT(button), "clicked", + (GtkSignalFunc)gtk_widget_destroy, + GTK_OBJECT(dlg)); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), + button, TRUE, TRUE, 0); + gtk_widget_show(button); + set_tooltip(tips,button,"Close this message box and continue"); + + frame = gtk_frame_new(title2); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width(GTK_CONTAINER(frame), 10); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->vbox), frame, TRUE, TRUE, 0); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_border_width(GTK_CONTAINER(vbox), 10); + gtk_container_add(GTK_CONTAINER(frame), vbox); + + + hbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); + + label = gtk_label_new(text); + gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0); + gtk_widget_show(label); + + gtk_widget_show(hbox); + + gtk_widget_show(vbox); + gtk_widget_show(frame); + gtk_widget_show(dlg); + + gtk_main(); + gdk_flush(); + return 0; +} + + + +static gint +signature_warning_dialog() +{ + GtkWidget *dlg; + GtkWidget *label; + GtkWidget *button; + GtkWidget *toggle; + GtkWidget *frame; + GtkWidget *vbox; + GtkWidget *hbox; + bint.run=FALSE; + + dlg = gtk_dialog_new(); + gtk_window_set_title(GTK_WINDOW(dlg), "Warning"); + gtk_window_position(GTK_WINDOW(dlg), GTK_WIN_POS_MOUSE); + gtk_signal_connect(GTK_OBJECT(dlg), "destroy", + (GtkSignalFunc)signature_close_callback, + NULL); + + button = gtk_button_new_with_label("OK"); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc)signature_ok_callback, + dlg); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), + button, TRUE, TRUE, 0); + gtk_widget_grab_default(button); + gtk_widget_show(button); + set_tooltip(tips,button,"Proceed with writing the signature."); + + button = gtk_button_new_with_label("Cancel"); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_signal_connect_object(GTK_OBJECT(button), "clicked", + (GtkSignalFunc)gtk_widget_destroy, + GTK_OBJECT(dlg)); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), + button, TRUE, TRUE, 0); + gtk_widget_show(button); + set_tooltip(tips,button,"Cancel the writing of signature."); + + frame = gtk_frame_new("Please note:"); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width(GTK_CONTAINER(frame), 10); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->vbox), frame, TRUE, TRUE, 0); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_border_width(GTK_CONTAINER(vbox), 10); + gtk_container_add(GTK_CONTAINER(frame), vbox); + + + hbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); + + label = gtk_label_new("Sensitive Signature Warning:\n\n" + "Remember to save your image in a non-destructive format!\n" + "For indexed images GIF could be a good choice, for RGB\n" + "use BMP/TIFF/TGA etc. Never use a JPEG-compression!\n\n" + "You shouldn't apply any filter to the image after the\n" + "signature has been written. No blur/constrast etc.\n\n" + "This restriction will hopefully be removed in a future\n" + "version of the plug-in (available at cotting.citeweb.net)\n"); + gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0); + gtk_widget_show(label); + + toggle = gtk_check_button_new_with_label ("Show warning message every time"); + gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect (GTK_OBJECT (toggle), "toggled", + (GtkSignalFunc) toggle_update, + &wvals.warningmessage); + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), wvals.warningmessage); + gtk_widget_show (toggle); + set_tooltip(tips,toggle,"If you want this message to be displayed every time you write a signature, then check this box."); + + gtk_widget_show(hbox); + + gtk_widget_show(vbox); + gtk_widget_show(frame); + gtk_widget_show(dlg); + + gtk_main(); + gdk_flush(); + + return bint.run; +} + +GtkWidget * +signature_logo_dialog() +{ + GtkWidget *xdlg; + GtkWidget *xlabel; + GtkWidget *xbutton; + GtkWidget *xlogo_box; + GtkWidget *xpreview; + GtkWidget *xframe,*xframe2; + GtkWidget *xvbox; + GtkWidget *xhbox; + char *text; + guchar *temp,*temp2; + guchar *datapointer; + gint y,x; + xdlg = logodlg = gtk_dialog_new(); + gtk_window_set_title(GTK_WINDOW(xdlg), "About"); + gtk_window_position(GTK_WINDOW(xdlg), GTK_WIN_POS_MOUSE); + + gtk_signal_connect(GTK_OBJECT(xdlg), "destroy", + (GtkSignalFunc)signature_logo_close_callback, + NULL); + + xbutton = gtk_button_new_with_label("OK"); + GTK_WIDGET_SET_FLAGS(xbutton, GTK_CAN_DEFAULT); + gtk_signal_connect(GTK_OBJECT(xbutton), "clicked", + (GtkSignalFunc)signature_logo_ok_callback, + xdlg); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(xdlg)->action_area), + xbutton, TRUE, TRUE, 0); + gtk_widget_grab_default(xbutton); + gtk_widget_show(xbutton); + set_tooltip(tips,xbutton,"Click here to close the information box."); + + xframe = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(xframe), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width(GTK_CONTAINER(xframe), 10); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(xdlg)->vbox), xframe, TRUE, TRUE, 0); + xvbox = gtk_vbox_new(FALSE, 5); + gtk_container_border_width(GTK_CONTAINER(xvbox), 10); + gtk_container_add(GTK_CONTAINER(xframe), xvbox); + + /* The logo frame & drawing area */ + xhbox = gtk_hbox_new (FALSE, 5); + gtk_box_pack_start (GTK_BOX (xvbox), xhbox, FALSE, TRUE, 0); + + xlogo_box = gtk_vbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (xhbox), xlogo_box, FALSE, FALSE, 0); + + xframe2 = gtk_frame_new (NULL); + gtk_frame_set_shadow_type (GTK_FRAME (xframe2), GTK_SHADOW_IN); + gtk_box_pack_start (GTK_BOX (xlogo_box), xframe2, FALSE, FALSE, 0); + + xpreview = gtk_preview_new (GTK_PREVIEW_COLOR); + gtk_preview_size (GTK_PREVIEW (xpreview), logo_width, logo_height); + temp = g_malloc((logo_width+10)*3); + datapointer=header_data+logo_width*logo_height-1; + for (y = 0; y < logo_height; y++){ + temp2=temp; + for (x = 0; x< logo_width; x++) { + HEADER_PIXEL(datapointer,temp2); temp2+=3;} + gtk_preview_draw_row (GTK_PREVIEW (xpreview), + temp, + 0, y, logo_width); + } + g_free(temp); + gtk_container_add (GTK_CONTAINER (xframe2), xpreview); + gtk_widget_show (xpreview); + gtk_widget_show (xframe2); + gtk_widget_show (xlogo_box); + gtk_widget_show (xhbox); + + xhbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(xvbox), xhbox, TRUE, TRUE, 0); + text = "\nCotting Software Productions\n" + "Bahnhofstrasse 31\n" + "CH-3066 Stettlen (Switzerland)\n\n" + "cotting@mygale.org\n" + "http://www.mygale.org/~cotting\n\n" + "Digital Signature\n Plug-In for the GIMP\n" + "Version 1.00\n"; + xlabel = gtk_label_new(text); + gtk_box_pack_start(GTK_BOX(xhbox), xlabel, TRUE, FALSE, 0); + gtk_widget_show(xlabel); + + gtk_widget_show(xhbox); + + gtk_widget_show(xvbox); + gtk_widget_show(xframe); + gtk_widget_show(xdlg); + + gtk_main(); + gdk_flush(); + return xdlg; +} diff --git a/plug-ins/Encript_Decript/doc/doc b/plug-ins/DigitalSignature/INSTALL similarity index 79% rename from plug-ins/Encript_Decript/doc/doc rename to plug-ins/DigitalSignature/INSTALL index 5e53dcbbc9..bebbb6e1dd 100644 --- a/plug-ins/Encript_Decript/doc/doc +++ b/plug-ins/DigitalSignature/INSTALL @@ -1,5 +1,5 @@ ------------------------------------------- - GIMP-Plug-In + GIMP-Plug-In (Digital Signature) ------------------------------------------- Written by Daniel Cotting Bahnhofstrasse 31 @@ -29,16 +29,11 @@ ------------------------------------------- REDUCE CODE SIZE ------------------------------------------- - With this new release 1.01 the size of - the logo in the about box has been reduced - in order to make smaller binaries. In - general the compiled plug-in will be - about 25-30% of the size of version 1.00. - If you find that the plug-in is still - too big, you can compress the executables - with the gzexe program (if it is avaiable - on your system). To do so, change to the - plug-in directory of the GIMP... + If you find that the plug-in is too big, + you can compress the executables with the + gzexe program (if it is avaiable on your + system). To do so, change to the plug-in + directory of the GIMP... cd /usr/local/lib/gimp/VERSION/plug-ins @@ -53,7 +48,7 @@ rm PLUGIN_NAME~ This will result in a code size of about - 35 to 40 kB, which isn't too much IMHO. + 20 kB, which isn't too much IMHO. ------------------------------------------ diff --git a/plug-ins/DigitalSignature/Makefile.am b/plug-ins/DigitalSignature/Makefile.am new file mode 100644 index 0000000000..4181bdb845 --- /dev/null +++ b/plug-ins/DigitalSignature/Makefile.am @@ -0,0 +1,43 @@ +## Process this file with automake to produce Makefile.in + +pluginlibdir = $(gimpplugindir)/plug-ins + +pluginlib_PROGRAMS = DigitalSignature + +DigitalSignature_SOURCES = \ + DigitalSignature.c logo.h + +INCLUDES = \ + $(X_CFLAGS) \ + -I$(top_srcdir) \ + -I$(includedir) + +LDADD = \ + $(top_builddir)/libgimp/libgimpui.la \ + $(top_builddir)/libgimp/libgimp.la \ + $(X_LIBS) \ + -lc + +DEPS = \ + $(top_builddir)/libgimp/libgimpui.la \ + $(top_builddir)/libgimp/libgimp.la + +DigitalSignature_DEPENDENCIES = $(DEPS) + +.PHONY: files + +files: + @files=`ls $(DISTFILES) 2> /dev/null`; for p in $$files; do \ + echo $$p; \ + done + @for subdir in $(SUBDIRS); do \ + files=`cd $$subdir; $(MAKE) files | grep -v "make\[[1-9]\]"`; \ + for file in $$files; do \ + echo $$subdir/$$file; \ + done; \ + done + + + + + diff --git a/plug-ins/DigitalSignature/README b/plug-ins/DigitalSignature/README new file mode 100644 index 0000000000..bebbb6e1dd --- /dev/null +++ b/plug-ins/DigitalSignature/README @@ -0,0 +1,70 @@ +------------------------------------------- + GIMP-Plug-In (Digital Signature) +------------------------------------------- + Written by Daniel Cotting + Bahnhofstrasse 31 + CH-3066 Stettlen (Switzerland) + + cotting@mygale.org + www.mygale.org/~cotting +------------------------------------------- + Some code is taken out of other plug-ins + written by other authors. +------------------------------------------- + + +------------------------------------------- + INSTALLATION +------------------------------------------- + To install it, you have to edit the + Makefile (change install-path). + Afterwards run make. This will compile + and install the plug-in in the right + directory. Once the new code is installed, + you can run the GIMP and enjoy the new + functions and effects it provides. +------------------------------------------- + + +------------------------------------------- + REDUCE CODE SIZE +------------------------------------------- + If you find that the plug-in is too big, + you can compress the executables with the + gzexe program (if it is avaiable on your + system). To do so, change to the plug-in + directory of the GIMP... + + cd /usr/local/lib/gimp/VERSION/plug-ins + + ...and execute the command... + + gzexe PLUGIN_NAME + + ...and remember to remove the uncompres- + sed binary, which has been renamed to + PLUGIN_NAME~, by running the command: + + rm PLUGIN_NAME~ + + This will result in a code size of about + 20 kB, which isn't too much IMHO. +------------------------------------------ + + +------------------------------------------ + FEEDBACK +------------------------------------------ + I'm interested in any feedback, comments, + bug-reports, suggestions etc. If you + have anything you would like to tell + me, you can write to cotting@mygale.org. + Also have a look at the GIMP-section of + my homepage at www.mygale.org/~cotting. +------------------------------------------ + + Thank you and happy GIMPing! + Daniel Cotting + +------------------------------------------ + \ No newline at end of file diff --git a/plug-ins/DigitalSignature/logo.h b/plug-ins/DigitalSignature/logo.h new file mode 100644 index 0000000000..cb94ec445f --- /dev/null +++ b/plug-ins/DigitalSignature/logo.h @@ -0,0 +1,788 @@ +/* GIMP header image file format (Indexed): //logo.h */ + +static unsigned int logo_width = 200; +static unsigned int logo_height = 72; + +/* Call this macro repeatedly. After each use, the pixel data can be extracted */ + +#define HEADER_PIXEL(data,pixel) \ + pixel[0] = palette_data[data[0]*3+2]; \ + pixel[1] = palette_data[data[0]*3+1]; \ + pixel[2] = palette_data[data[0]*3+0]; \ + data--; + +static unsigned char +palette_data[] = { 4,2,2,4,110,178,32,4,122,4,36, +86,15,3,66,4,58,127,36,8,186,4,34,122,17,2, +34,4,19,66,12,4,162,90,2,69,88,2,48,7,20, +2,25,2,103,8,14,48,4,58,186,90,3,154,82,2, +129,55,2,34,17,2,18,17,34,191,94,2,101,57,2, +70,7,32,154,12,22,157,17,3,50,4,88,150,96,3, +186,86,2,138,87,2,86,212,214,210,4,19,98,52,2, +154,15,11,2,4,132,216,7,18,125,12,6,82,37,12, +18,4,88,189,86,14,48,128,2,157,32,4,138,4,60, +155,4,48,126,60,2,218,7,10,52,13,12,66,129,2, +50,56,2,52,52,14,98,4,47,157,6,20,87,48,2, +24,58,2,101,120,2,141,52,5,170,4,113,215,127,2, +73,4,90,210,4,52,112,36,18,194,59,2,85,42,2, +10,107,2,173,95,2,114,31,3,52,4,79,160,84,3, +189,14,10,40,30,2,69,96,2,58,113,2,126,9,37, +231,17,33,170,28,14,2,4,30,146,68,10,37,132,2, +82,23,4,7,4,10,122,4,36,108,32,2,37,7,27, +2,4,98,175,84,10,146,4,101,191,4,14,146,8,29, +86,4,2,170,8,60,230,84,10,162,72,2,39,102,2, +142,4,142,221,4,49,143,68,12,170,4,124,213,15,4, +74,114,2,69,112,2,158,32,3,23,8,50,190,111,2, +104,6,40,154,96,2,210,6,28,104,60,2,138,61,2, +25,68,2,114,58,2,125,39,2,114,73,2,69,16,4, +58,4,88,177,56,14,26,138,2,173,4,68,176,71,2, +55,76,2,210,4,78,130,17,3,42,6,27,69,112,2, +49,12,26,178,47,13,159,18,11,10,13,11,74,141,2, +58,52,18,234,4,82,186,4,126,198,4,103,213,4,62, +206,4,72,226,12,46,210,72,12,222,12,26,146,20,34, +210,4,113,197,4,131,229,4,48,170,4,76,170,7,43, +95,52,30,218,15,11,170,52,14,202,12,14,86,4,40, +174,108,14,202,156,2,186,60,12,130,5,40,129,73,13, +189,12,42,138,44,14,202,4,59,143,4,124,229,4,69, +191,4,69,157,4,60,114,4,43,110,14,14,58,20,26, +157,28,26,210,4,87,162,4,91,202,4,110,226,4,98, +226,4,101,202,17,14,186,28,18,18,60,2,234,28,10, +114,4,30,114,8,10,162,12,54,186,20,26,130,100,10, +170,40,18,154,4,22,114,28,26,234,4,22,58,4,66, +226,4,54,202,12,42,202,4,38,98,4,145,234,4,76, +146,4,94,148,4,138,213,4,94,186,4,54,126,4,54, +154,4,118,211,4,106,178,4,106,188,4,54,142,4,94, +170,4,70,202,4,118,197,4,54,173,4,82,178,72,4, +172,36,10,138,76,14,162,4,98,210,4,118,226,112,2, +114,24,19,8,30,2,85,84,6,226,141,2,73,28,30, +10,28,46,186,112,4,206,36,10,90,36,2,174,108,2, +58,41,3,130,44,10,194,9,33,130,92,2,162,51,2, +42,12,32,162,81,3,146,44,11,26,28,6,146,44,2, +178,30,12,10,60,10,178,64,2,146,28,10,178,92,10, +210,5,41,146,40,2,102,96,2,125,100,2,88,74,2, +157,142,2,159,26,10,55,143,2,50,73,2,102,134,2, +142,73,2,84,127,2,126,142,2,82,156,2,178,28,10, +158,28,26,114,84,14,202,12,4,10,5,20,74,17,2, +26,92,2,194,7,19,106}; + +static unsigned char header_data[] = { 71,99,218,218,99,11,71,218,71,71, +218,99,99,99,71,99,218,99,99,99,99,218,71,218,99,218,218,99,99,218, +218,99,99,218,99,218,99,58,218,99,99,99,58,218,99,99,99,58,99,58, +99,58,11,58,99,58,58,11,99,58,99,58,99,99,99,218,99,218,99,58, +99,71,99,218,71,12,12,12,12,12,12,12,12,12,92,19,19,19,92,92, +92,92,19,108,19,19,19,19,19,19,53,53,53,53,101,19,19,53,53,19, +19,19,12,92,92,12,12,12,71,71,218,99,218,218,71,71,12,12,218,99, +58,58,58,99,99,99,58,99,99,99,11,58,11,58,58,99,58,99,99,99, +58,99,99,99,99,58,99,99,99,99,99,218,99,99,11,99,99,99,11,99, +99,218,218,218,99,218,99,99,218,218,99,99,218,99,218,218,99,99,218,11, +218,71,99,218,99,218,218,99,71,8,218,99,218,218,99,99,99,99,99,99, +218,218,99,99,218,99,218,99,218,71,99,99,99,218,99,99,218,99,99,99, +218,218,99,99,99,99,58,99,58,30,99,99,99,99,99,99,58,99,99,58, +99,58,99,58,99,99,58,58,58,99,58,58,99,218,218,71,99,99,71,71, +71,123,12,118,71,71,12,71,123,12,12,19,19,19,53,19,19,53,53,19, +19,53,101,63,20,63,20,63,53,53,53,101,53,53,53,19,53,53,53,19, +92,12,12,12,71,12,12,12,12,12,92,71,218,218,71,218,71,71,71,71, +99,218,58,58,58,99,99,99,99,58,58,58,99,58,99,58,58,99,58,58, +99,99,58,99,99,99,99,58,99,58,30,99,99,99,218,99,58,99,99,58, +11,99,99,218,99,218,218,99,99,218,71,99,218,99,99,218,99,99,218,99, +11,218,99,218,99,11,218,99,99,8,71,71,71,99,218,71,218,99,71,218, +11,99,218,218,99,218,99,218,99,99,99,99,218,99,99,99,99,99,218,99, +99,99,99,99,99,11,99,99,99,99,99,99,58,99,58,99,58,99,58,58, +99,11,58,58,99,58,99,99,58,58,218,99,123,71,71,71,123,71,71,218, +99,99,218,71,12,12,12,12,92,19,19,53,19,53,53,53,53,19,53,53, +53,53,19,53,19,53,53,53,53,53,63,63,101,63,63,20,53,19,53,53, +53,19,92,92,12,12,12,71,71,71,71,12,12,71,71,12,12,12,12,12, +12,218,218,99,58,58,99,58,99,58,99,58,99,99,58,218,58,99,58,99, +99,99,99,11,58,99,99,58,99,99,58,58,99,99,99,99,99,99,99,99, +99,58,218,99,218,99,99,99,218,99,99,218,99,11,218,99,218,218,99,99, +218,99,218,11,99,71,99,218,71,8,99,99,218,99,99,99,218,99,99,218, +218,99,11,99,99,218,99,218,99,218,218,99,58,99,99,99,58,11,99,99, +58,99,99,58,58,58,58,99,99,99,99,218,58,99,99,99,58,58,99,99, +58,58,99,58,99,58,99,99,58,58,99,218,71,71,218,218,218,58,58,58, +218,99,71,123,12,12,12,19,19,108,108,108,92,92,92,12,71,12,12,92, +19,53,53,53,101,53,53,19,53,101,53,20,53,79,79,0,34,79,20,63, +53,53,53,19,19,19,12,12,12,71,71,71,71,71,71,123,71,12,12,12, +12,12,71,71,218,58,99,58,218,58,218,99,58,99,58,99,99,218,58,58, +58,99,58,58,99,99,58,99,58,99,99,218,58,58,99,99,99,99,99,99, +58,11,99,99,218,218,218,99,218,99,99,218,218,99,218,99,99,218,218,99, +218,99,71,218,99,218,99,99,99,8,218,218,99,218,99,218,99,218,218,99, +11,218,218,218,218,99,71,99,218,99,99,99,218,58,99,99,99,99,218,30, +58,99,58,99,58,11,58,99,58,99,58,58,58,99,58,58,99,99,58,58, +58,99,58,99,58,58,99,58,218,99,99,218,58,99,58,58,58,58,58,218, +71,12,12,71,71,12,12,12,12,71,71,118,71,71,118,71,71,12,223,19, +19,53,53,53,53,63,229,20,79,20,34,0,20,101,101,63,20,101,101,53, +108,53,53,53,53,53,101,19,92,12,12,12,12,71,71,218,218,218,71,71, +118,12,71,71,218,218,58,58,58,58,58,58,218,58,58,58,99,99,218,99, +58,58,99,99,58,99,58,99,58,58,58,99,99,99,58,99,99,99,58,58, +99,58,58,99,99,99,99,99,99,99,218,99,99,218,99,218,218,99,99,218, +99,58,99,99,218,99,218,218,218,8,99,218,99,218,99,218,11,99,218,99, +99,99,99,99,218,99,58,99,99,99,58,99,218,99,99,99,99,99,58,99, +58,218,99,99,99,58,218,58,58,58,99,99,58,99,218,58,99,99,58,218, +58,99,58,99,99,99,58,99,58,58,58,58,99,58,58,58,58,218,218,12, +71,71,71,12,12,71,71,12,71,12,71,71,71,71,12,92,19,53,53,53, +101,63,79,34,251,0,0,63,20,53,19,53,53,53,53,19,19,53,19,19, +19,108,19,19,19,19,19,19,53,53,108,12,12,12,71,71,218,58,58,58, +99,218,71,71,71,12,218,99,99,58,58,58,58,218,58,58,58,58,58,99, +99,58,58,99,58,218,58,99,99,99,99,58,99,128,99,58,99,99,11,99, +99,58,11,58,99,99,99,218,58,11,99,58,99,218,99,99,218,99,99,99, +218,71,99,99,218,99,11,99,218,8,218,99,218,99,218,99,99,218,99,218, +58,218,58,218,99,99,218,99,58,99,99,99,99,78,11,58,99,58,99,99, +99,58,58,99,58,11,58,58,218,99,99,58,58,58,99,58,58,58,99,99, +58,58,58,58,58,58,99,58,99,99,99,58,58,58,58,58,218,71,118,12, +71,71,71,71,71,12,71,71,71,71,71,12,92,19,19,53,53,63,20,251, +0,79,79,0,79,34,34,79,0,63,229,20,63,101,53,101,19,53,19,92, +12,71,12,92,12,12,12,12,12,92,19,92,92,71,12,118,71,218,99,58, +58,58,58,58,218,123,71,218,58,58,58,99,58,58,58,218,58,218,58,58, +218,58,99,58,58,58,99,99,58,99,58,99,218,99,99,99,58,58,58,11, +58,58,99,58,99,99,30,99,99,99,58,218,218,30,99,218,99,99,99,218, +99,99,218,218,99,99,218,71,99,8,99,99,71,99,218,218,99,218,99,218, +99,218,99,58,11,58,99,99,11,58,99,58,99,99,99,99,58,58,99,99, +58,99,99,99,99,58,99,78,58,58,99,99,218,78,58,218,58,99,212,58, +99,58,58,58,218,58,58,58,58,58,58,58,58,58,218,71,12,12,71,71, +123,218,218,58,99,71,123,71,71,12,19,19,19,53,53,19,19,53,63,53, +101,101,101,63,101,101,20,20,79,0,0,79,79,34,251,79,79,251,101,53, +19,92,12,71,71,71,218,12,218,12,71,71,71,71,71,12,71,71,123,71, +58,58,58,58,58,58,58,99,99,58,58,58,99,58,58,58,99,58,99,58, +99,58,58,99,58,58,58,58,99,58,99,58,99,58,99,58,99,99,58,58, +99,99,99,58,99,58,58,58,99,99,99,30,128,58,99,99,99,99,99,58, +218,99,99,218,218,99,99,218,71,8,71,218,99,99,99,99,218,99,99,99, +99,30,58,11,58,58,99,58,58,58,58,30,58,58,99,99,99,58,99,58, +99,58,99,58,58,58,218,99,58,99,58,58,58,218,99,58,58,58,58,58, +58,99,99,99,58,99,99,58,58,212,99,58,58,218,71,71,218,218,99,58, +58,58,58,218,123,71,71,12,108,19,19,108,19,19,223,92,19,92,12,12, +19,19,19,19,53,53,63,63,229,0,34,34,79,0,79,0,75,34,0,34, +79,20,53,19,92,12,71,71,71,218,71,123,71,123,71,71,71,71,71,71, +71,218,58,58,58,58,58,58,58,99,58,58,58,58,58,58,58,58,99,58, +58,99,99,58,99,58,58,58,58,58,58,99,58,99,58,99,58,58,99,99, +58,58,99,99,58,58,218,58,58,99,58,99,11,58,58,99,58,218,99,99, +99,99,218,99,99,218,99,99,99,8,99,218,99,218,99,99,99,99,58,58, +11,58,99,58,58,30,58,11,58,11,58,99,99,58,99,58,58,58,99,58, +58,99,58,99,99,58,58,99,58,99,58,99,58,99,212,58,58,58,58,58, +58,58,58,58,58,58,58,58,58,58,212,58,218,218,218,99,58,58,58,58, +58,99,71,71,71,12,71,71,12,12,12,71,71,123,71,218,71,71,71,92, +19,108,63,79,229,126,0,79,0,0,34,34,34,126,34,251,79,0,126,34, +79,0,79,20,63,19,19,12,71,71,71,218,71,99,71,71,71,71,71,71, +71,71,218,58,58,58,212,58,58,58,58,58,58,58,58,58,58,58,58,58, +58,58,99,58,58,99,58,58,99,99,128,218,58,58,99,58,99,58,58,99, +218,58,58,218,99,99,99,99,99,99,58,99,99,58,30,218,99,99,99,99, +99,99,218,99,99,99,218,218,99,8,218,99,99,99,58,99,99,99,99,99, +58,58,218,99,99,99,58,99,58,58,58,99,58,99,58,99,99,99,58,58, +99,99,58,58,58,58,58,58,99,99,58,99,99,58,58,58,58,99,58,58, +99,58,99,58,78,212,99,212,99,58,58,99,58,58,78,78,246,99,212,58, +99,71,123,71,71,71,71,71,218,218,71,123,218,218,218,118,12,19,63,63, +0,0,0,34,34,0,34,79,79,79,0,34,79,79,20,101,53,101,53,19, +53,53,101,101,53,53,19,19,19,92,218,218,218,218,218,212,78,58,218,218, +71,71,71,11,58,246,58,78,246,58,58,58,99,99,58,58,99,58,212,58, +99,58,99,58,58,99,58,58,58,58,58,212,218,58,58,99,58,58,99,58, +99,99,99,58,58,99,99,99,58,99,58,58,99,99,99,58,58,99,99,99, +99,99,99,11,58,99,99,99,218,8,99,99,218,99,99,218,99,218,58,58, +11,78,58,99,58,99,58,99,58,11,58,99,58,99,58,58,58,99,99,58, +99,99,99,58,58,58,58,58,58,58,58,58,58,58,58,212,99,58,212,99, +58,58,78,58,78,58,58,58,58,58,58,58,58,58,246,58,246,58,58,71, +218,71,71,71,218,71,71,71,71,218,218,71,71,92,92,53,63,126,79,0, +0,79,0,79,34,79,0,126,79,79,79,79,79,229,229,101,53,108,92,71, +71,71,71,71,71,12,12,19,108,19,92,71,71,71,71,218,212,246,78,58, +58,218,218,71,71,58,58,212,212,78,212,78,78,58,58,58,58,58,99,58, +78,58,58,99,58,58,58,58,58,58,58,58,99,58,99,58,58,212,99,58, +58,99,58,99,58,99,99,58,58,99,99,58,58,58,58,11,78,99,99,99, +99,58,99,58,71,99,99,99,99,8,99,99,99,218,99,58,99,30,58,11, +58,11,58,58,99,58,58,99,58,99,58,99,99,58,99,58,99,58,58,99, +58,58,58,58,58,78,58,99,58,99,58,58,58,58,99,58,212,99,58,58, +58,78,78,78,58,58,58,58,58,212,58,78,58,78,78,78,58,99,218,218, +71,218,218,71,58,99,58,99,71,71,71,12,19,20,79,251,0,251,79,251, +79,63,126,79,79,79,79,229,79,79,79,126,126,79,79,63,20,53,53,92, +12,12,218,71,71,218,218,218,71,218,71,71,71,218,71,218,218,58,246,246, +78,212,78,58,218,218,58,58,58,246,78,212,78,212,58,58,58,58,58,212, +78,78,78,58,58,99,58,58,58,58,58,58,58,58,58,218,99,99,58,99, +58,58,218,99,58,58,99,58,99,99,58,99,99,99,58,99,99,58,58,58, +218,99,11,58,99,99,99,218,99,8,99,30,218,58,11,99,99,58,99,58, +99,58,58,99,218,99,218,58,99,99,58,58,58,58,99,58,99,99,58,99, +58,58,58,78,78,58,58,58,58,58,99,246,78,78,58,58,58,58,58,78, +78,212,78,246,246,58,58,58,212,58,212,246,78,246,58,212,218,218,218,218, +218,58,246,58,246,58,218,218,123,12,19,19,53,53,101,53,63,101,63,63, +63,63,63,63,63,101,63,53,63,53,53,53,53,108,19,19,19,19,108,19, +92,92,12,12,71,71,218,99,99,218,218,218,218,218,71,71,71,218,218,246, +78,78,246,78,78,78,58,58,58,78,78,78,78,246,58,58,58,58,58,78, +212,78,78,58,58,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58, +58,99,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,99,99,99, +58,99,58,99,99,58,99,99,99,8,99,99,30,58,58,58,58,58,58,99, +58,11,99,58,99,58,58,58,58,58,58,99,58,58,58,58,58,58,99,58, +99,58,78,58,58,58,99,58,58,78,246,78,58,78,58,58,58,58,78,212, +246,78,246,78,78,99,212,246,78,246,58,246,246,78,246,218,218,218,58,58, +246,78,78,246,58,218,218,71,12,12,108,92,108,19,108,53,63,63,63,53, +53,53,19,223,92,92,49,118,118,118,118,118,118,118,71,118,118,12,12,12, +92,71,71,123,218,99,11,58,58,58,58,78,58,99,99,123,71,218,218,218, +246,246,78,212,78,212,78,246,78,78,58,78,246,78,246,78,58,58,58,58, +99,78,246,78,246,99,58,58,58,58,58,78,78,78,78,99,58,99,58,99, +78,58,58,99,58,218,218,58,58,99,58,58,58,218,99,58,58,58,58,11, +58,99,99,99,58,99,99,218,58,8,99,99,58,99,58,11,58,11,58,58, +99,58,99,58,99,58,99,58,58,218,58,58,58,99,58,99,58,58,58,99, +78,58,58,58,99,58,58,78,78,58,246,78,246,99,58,58,58,212,78,78, +246,58,246,58,78,78,78,58,246,78,78,58,246,58,58,58,212,58,246,78, +212,246,58,58,71,71,71,71,12,92,92,92,108,53,53,53,19,19,223,223, +49,223,92,49,49,223,92,49,118,118,118,71,118,112,118,11,11,112,71,112, +71,71,11,11,11,99,99,58,58,78,78,78,246,78,246,58,99,71,218,71, +218,78,78,246,78,246,58,246,78,246,212,58,246,58,246,78,212,78,246,58, +58,58,78,246,246,78,78,99,58,58,58,212,78,58,78,58,58,58,58,58, +78,58,78,99,58,58,99,58,58,58,58,99,58,58,99,218,58,99,58,58, +58,58,99,58,99,99,58,99,99,8,99,99,58,58,58,99,58,99,99,58, +99,58,58,58,58,58,58,218,99,58,99,58,58,58,58,58,99,58,58,78, +58,78,78,78,78,58,78,58,78,78,78,212,78,58,78,58,78,212,78,246, +78,246,78,78,212,246,246,78,246,212,246,246,78,246,58,246,78,246,58,246, +246,58,99,218,218,218,71,12,92,19,19,19,19,19,223,223,49,223,49,118, +49,112,30,30,237,103,208,208,245,208,245,208,245,245,245,103,208,103,22,237, +30,30,11,11,11,11,71,71,11,99,58,78,78,246,58,246,246,246,58,99, +99,218,212,78,246,78,246,78,246,58,78,58,246,78,58,246,78,212,78,246, +58,212,58,78,78,212,78,78,58,58,99,78,78,78,78,78,58,58,99,58, +58,78,78,78,58,58,99,58,99,58,58,99,58,218,58,58,99,58,58,218, +99,58,99,99,58,99,30,99,99,8,58,99,58,99,58,58,58,99,58,99, +58,218,218,58,99,58,99,58,58,58,78,99,78,58,99,58,58,78,58,78, +78,58,78,78,58,78,78,246,246,212,78,78,78,58,78,246,78,246,58,246, +212,78,58,78,78,58,246,78,78,78,58,246,78,246,78,58,246,78,78,78, +58,218,99,11,71,12,92,92,92,223,223,223,223,223,49,118,112,22,237,208, +72,245,55,243,245,72,72,72,65,208,236,208,208,245,72,55,243,55,55,243, +245,245,245,103,237,237,30,11,11,112,71,11,99,58,78,246,246,246,246,78, +58,218,58,58,246,78,212,78,246,78,246,78,212,78,78,212,78,246,78,78, +58,78,78,78,78,78,246,246,246,58,58,78,58,246,78,212,78,78,99,58, +58,78,58,58,58,58,58,99,58,58,58,58,78,58,58,99,99,58,58,58, +99,218,58,99,99,99,58,99,58,8,99,99,99,58,11,58,58,58,99,58, +58,58,58,58,58,58,58,99,99,78,78,58,58,78,58,58,99,78,78,78, +78,78,78,78,78,78,212,246,246,246,246,78,78,246,246,58,246,78,246,78, +78,78,212,246,246,246,78,78,212,246,246,246,58,246,246,78,246,246,78,58, +218,99,71,12,12,92,92,82,223,49,223,118,112,22,208,72,72,208,65,22, +22,112,11,112,112,112,112,112,118,118,118,112,112,112,30,244,244,30,237,65, +236,72,55,55,243,243,208,208,237,237,11,71,11,11,71,11,99,58,246,246, +246,78,78,246,58,246,78,246,58,246,58,246,58,246,246,78,78,78,212,78, +212,246,212,78,246,246,58,78,78,246,99,246,246,58,246,58,78,78,78,58, +78,78,78,78,78,78,58,58,58,99,58,58,78,99,58,58,58,218,99,99, +58,58,99,58,99,58,58,99,99,8,58,58,99,58,99,218,99,58,99,99, +99,58,99,58,99,58,58,58,58,78,58,58,58,58,58,58,58,78,212,78, +78,58,246,78,58,246,246,246,246,246,246,246,78,58,246,78,246,58,246,58, +246,78,78,78,58,246,212,78,78,78,58,246,78,212,246,58,78,212,58,99, +218,71,12,92,19,223,49,49,118,62,30,22,208,208,103,30,244,112,244,118, +112,23,49,49,49,49,49,49,49,49,82,82,223,82,49,118,23,118,118,112, +11,30,237,22,65,245,55,243,245,245,103,237,237,11,71,11,71,71,218,58, +246,246,78,246,78,212,78,246,246,78,246,246,78,78,212,78,212,78,246,78, +78,58,246,78,58,246,78,212,78,246,78,78,78,78,78,212,246,246,246,78, +58,78,78,78,58,78,78,58,58,58,58,58,99,58,58,58,58,58,99,58, +58,58,58,58,58,99,99,58,58,8,99,99,58,58,58,99,99,99,99,58, +58,99,78,58,78,99,58,58,99,78,78,78,58,78,58,58,78,246,78,212, +78,78,58,78,246,246,246,246,246,246,58,78,78,246,58,246,78,246,78,246, +78,212,78,212,212,246,78,78,246,246,78,212,58,99,212,246,246,58,99,218, +118,12,92,223,223,49,49,11,237,208,208,103,244,23,118,112,118,112,49,49, +19,82,82,82,223,49,66,49,49,82,223,223,101,19,223,82,223,82,223,82, +82,49,23,112,11,244,30,65,72,55,55,245,208,22,237,112,11,118,71,218, +218,58,58,78,246,78,212,78,78,212,99,78,212,246,78,246,78,246,78,212, +246,246,78,246,246,78,246,78,246,58,246,78,58,78,246,246,246,246,212,246, +78,78,78,78,78,58,78,78,99,58,78,78,78,99,58,58,99,58,99,99, +58,99,99,99,99,58,99,58,99,8,99,99,99,58,58,99,58,58,99,58, +58,58,78,78,58,58,58,58,58,58,78,78,78,78,78,58,246,246,246,246, +246,78,78,212,246,246,246,246,246,246,78,212,78,246,78,212,78,246,58,246, +78,246,78,58,58,212,246,58,78,246,246,58,58,58,58,246,58,218,71,12, +223,223,49,49,49,30,65,72,72,30,112,118,118,112,118,49,223,223,223,49, +244,244,244,244,23,23,23,23,70,66,49,70,49,70,70,118,23,23,23,23, +49,223,19,82,223,223,23,11,244,237,208,72,55,55,208,103,30,11,11,49, +71,71,99,58,246,78,246,246,58,246,58,58,246,212,78,246,58,246,78,58, +58,212,78,78,212,78,212,78,78,78,212,78,78,78,246,212,246,246,246,212, +246,58,78,78,78,78,58,78,78,99,58,58,78,58,58,58,99,58,58,58, +58,58,58,58,99,58,99,58,99,8,99,58,58,218,58,58,58,99,58,58, +58,99,58,58,99,58,78,78,78,78,78,78,78,58,246,246,246,212,246,246, +212,246,78,246,246,246,246,246,212,246,246,78,246,58,212,246,78,78,78,246, +58,246,212,99,58,246,78,246,246,58,58,58,58,78,246,58,99,118,12,92, +223,223,223,11,22,72,208,244,49,112,112,118,49,82,223,49,244,244,242,62, +23,62,23,23,244,244,244,244,244,244,62,30,244,244,244,244,23,112,210,23, +62,244,244,23,223,82,53,82,49,112,30,30,65,72,55,245,208,237,30,112, +71,49,118,71,99,78,78,78,246,246,58,99,58,246,212,78,246,58,246,212, +99,58,212,246,78,246,78,246,212,246,78,246,246,212,246,246,246,212,246,246, +246,246,78,78,246,246,78,78,78,78,58,58,78,58,58,58,58,58,99,99, +99,78,99,58,99,99,58,99,58,8,58,99,58,99,99,58,58,99,58,58, +58,58,58,58,78,58,78,78,58,78,58,246,78,78,78,212,246,246,212,246, +246,246,246,246,246,246,246,246,246,246,246,58,246,58,99,212,246,212,78,78, +78,99,58,58,78,246,58,78,246,58,58,58,58,212,58,218,71,12,49,49, +49,112,22,72,65,112,49,112,112,112,223,19,118,62,244,62,62,23,23,244, +244,244,244,112,23,49,49,223,19,223,82,223,223,49,223,23,118,112,244,30, +62,62,62,62,23,62,23,223,82,8,82,71,30,244,22,72,55,245,103,237, +11,71,12,12,71,99,78,78,78,58,212,58,58,58,58,212,78,58,246,78, +58,58,58,212,78,246,58,78,78,212,212,246,246,246,212,246,246,246,246,246, +246,246,58,78,78,58,246,212,78,78,58,78,58,78,78,78,58,78,58,58, +218,58,58,99,58,99,99,99,58,8,218,99,58,58,58,99,58,58,99,78, +78,58,99,58,58,78,58,78,246,78,78,58,78,212,246,246,246,246,246,246, +246,246,246,212,246,212,246,246,246,212,78,246,58,58,58,246,78,78,212,246, +58,58,58,58,212,78,246,212,58,58,58,58,58,58,71,12,49,223,223,49, +30,208,72,30,49,49,112,49,223,223,23,22,244,62,23,23,62,22,112,118, +49,49,223,118,23,244,30,242,22,242,242,62,242,244,244,112,23,49,49,223, +23,112,30,244,62,112,210,23,23,49,82,8,223,244,237,30,208,55,243,245, +22,30,71,118,12,71,99,78,78,246,212,58,58,58,58,246,246,246,78,246, +58,58,58,78,212,78,246,246,246,58,58,212,246,246,246,246,246,246,246,246, +246,78,246,58,246,246,246,78,212,78,78,78,58,78,58,78,58,58,99,58, +58,58,99,58,58,58,58,58,58,8,58,99,58,58,58,58,99,58,78,78, +58,58,78,58,58,78,78,58,78,78,78,78,78,246,212,246,246,246,246,246, +246,246,246,246,246,246,212,246,246,246,78,58,58,58,58,246,78,78,246,99, +212,58,212,58,212,78,78,58,58,218,58,212,58,99,71,49,223,49,49,30, +55,72,112,49,244,11,49,82,112,242,242,62,23,62,244,112,118,223,82,118, +30,236,29,225,231,33,248,42,42,42,219,2,42,219,110,107,231,29,65,244, +112,223,223,49,112,30,30,23,23,23,23,49,82,101,49,30,30,242,72,243, +208,103,30,71,118,12,71,99,78,78,78,58,58,58,58,58,78,58,246,78, +58,58,99,58,246,58,246,58,246,58,99,58,212,246,246,212,246,246,246,246, +246,246,246,246,212,246,246,246,246,78,58,78,78,78,78,78,58,78,78,78, +58,78,99,99,99,58,58,99,99,8,99,58,99,99,58,58,58,58,78,78, +78,78,58,58,58,78,78,78,78,78,246,246,58,246,246,246,246,246,246,246, +246,246,212,246,99,58,246,246,246,246,212,58,58,58,99,212,78,212,212,58, +78,58,58,58,246,246,78,58,71,218,58,58,11,71,118,223,49,23,103,243, +22,49,118,30,118,82,49,30,242,62,70,62,244,118,223,82,112,65,93,205, +217,42,80,147,98,4,26,8,8,8,8,121,8,8,26,4,98,210,111,219, +29,29,65,112,223,82,23,30,244,62,62,62,62,49,82,82,112,30,30,65, +243,245,103,30,71,118,12,71,218,212,246,58,58,212,212,58,58,246,212,78, +58,58,212,58,58,246,78,246,58,58,58,58,246,212,246,246,246,246,246,246, +246,212,246,246,246,246,212,246,246,212,78,246,212,78,58,78,78,78,58,78, +78,78,58,58,58,58,99,58,58,8,58,58,58,58,58,58,58,58,237,78, +58,78,78,58,78,78,212,78,246,78,78,246,246,246,246,246,246,246,246,246, +246,246,246,58,58,58,246,246,246,246,58,58,99,58,58,246,246,78,99,78, +246,78,58,58,58,58,58,218,12,99,58,99,71,92,49,223,118,22,41,65, +223,23,30,118,19,23,22,242,23,23,30,112,223,19,112,29,222,232,87,80, +98,26,121,8,20,253,20,20,20,20,101,20,20,20,253,253,20,8,121,26, +4,14,2,231,29,30,49,82,112,30,244,62,23,210,118,82,101,223,30,244, +65,55,243,103,237,71,118,71,71,99,58,58,58,58,218,58,58,58,246,212, +58,58,212,78,99,58,246,246,78,58,58,58,58,246,246,246,246,246,246,246, +246,246,246,212,246,246,246,246,246,246,246,78,78,78,78,78,58,78,58,78, +78,58,58,58,78,99,58,58,99,8,99,58,58,99,99,58,58,58,58,237, +78,78,58,78,78,246,78,246,78,246,78,246,246,246,246,246,246,246,246,246, +246,246,58,58,58,58,246,246,246,58,99,78,246,212,99,246,212,58,78,246, +58,246,58,58,58,212,218,12,118,58,58,71,12,49,19,49,237,41,65,49, +118,112,223,82,244,236,62,66,62,30,82,8,112,93,68,6,137,88,162,253, +253,20,253,19,223,23,244,244,54,242,54,242,244,62,112,49,223,20,20,20, +20,253,26,98,14,33,29,244,82,101,112,22,62,62,62,23,49,53,82,30, +112,22,243,243,208,11,71,118,12,218,99,58,58,58,12,71,58,58,58,58, +99,58,58,246,246,58,58,246,246,58,58,58,99,58,246,246,246,246,78,58, +246,212,246,246,246,246,246,212,246,246,78,78,78,78,58,78,78,78,78,58, +78,58,78,237,78,58,99,99,78,8,58,99,58,58,78,78,78,78,78,78, +58,78,78,58,78,246,78,212,246,246,246,246,246,246,246,246,246,103,246,246, +246,246,58,58,58,99,212,246,246,58,212,78,246,58,58,58,58,58,212,78, +78,78,58,58,58,58,123,49,218,99,11,118,223,223,82,237,41,208,23,118, +237,223,82,244,18,210,23,23,112,19,223,103,64,6,148,147,26,253,20,8, +66,23,54,111,219,219,137,24,76,24,163,25,137,42,204,42,151,109,244,223, +20,20,20,20,8,4,111,231,236,23,82,12,237,62,62,23,62,223,253,223, +237,244,22,41,245,103,11,112,118,71,218,58,58,99,92,92,128,58,58,58, +58,58,58,212,78,58,58,212,58,58,58,78,78,58,212,246,246,246,58,58, +212,246,212,246,246,246,246,246,246,212,246,78,246,246,78,78,78,78,78,58, +78,58,58,78,99,58,58,58,99,8,99,58,58,58,58,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,246,246,246,246,103,246,246,246,246,246, +246,78,58,58,58,58,58,212,58,58,78,212,78,78,99,58,58,212,78,246, +212,212,58,58,58,218,92,12,218,99,71,12,223,82,118,243,55,23,223,30, +223,19,244,93,54,49,23,112,82,82,245,153,138,234,162,8,253,101,49,30, +111,125,24,201,142,16,159,142,43,95,197,156,193,193,51,141,224,25,248,231, +65,118,20,20,20,20,121,210,231,55,244,82,49,30,244,62,62,244,223,20, +118,237,112,208,243,245,237,71,118,49,71,58,58,218,92,92,12,58,58,99, +58,58,212,78,212,212,58,58,58,58,58,212,78,58,58,246,246,246,99,58, +99,246,246,246,246,246,246,246,246,246,212,246,58,78,78,78,78,78,58,78, +78,58,78,78,58,78,58,99,58,8,99,99,58,58,58,78,78,58,78,58, +78,78,78,246,78,78,78,246,246,246,246,246,246,246,246,103,246,246,246,246, +246,58,58,58,58,58,58,58,58,58,78,78,246,78,58,58,58,212,78,58, +58,78,58,58,58,12,92,12,99,218,118,19,82,223,22,116,237,49,112,112, +101,112,93,109,70,112,118,82,223,55,136,185,44,26,253,253,82,62,107,163, +117,16,114,159,161,106,98,46,26,26,26,26,26,4,32,81,44,142,43,234, +10,56,236,23,20,20,20,8,4,219,225,237,19,82,11,244,62,54,62,223, +20,112,30,244,72,239,103,237,71,12,12,71,58,71,92,92,12,128,58,58, +58,58,246,78,246,58,58,58,99,58,58,246,78,78,58,246,246,58,58,58, +58,212,246,212,246,246,246,246,246,246,78,78,246,58,246,58,78,246,78,58, +78,58,78,78,58,58,58,58,58,8,58,58,58,58,78,237,58,78,78,78, +78,78,78,58,246,246,212,246,246,246,246,246,246,246,246,246,246,246,246,246, +78,58,58,58,58,58,99,58,58,246,246,246,58,246,58,58,58,78,246,218, +11,58,58,58,58,12,92,71,218,11,49,223,101,23,239,93,23,118,244,223, +223,65,29,70,70,112,82,82,72,233,135,152,121,253,20,49,242,179,176,39, +198,156,32,47,26,26,69,113,26,47,9,47,162,113,26,121,113,252,152,159, +43,234,217,238,30,253,20,251,8,4,107,17,30,82,223,22,62,62,54,244, +82,19,237,112,244,41,245,30,112,71,92,71,99,71,12,92,92,71,78,58, +58,246,246,58,78,212,58,58,58,58,58,78,246,58,99,58,212,58,58,58, +58,78,246,246,246,246,246,246,246,246,246,246,78,78,78,78,246,58,78,78, +58,58,58,99,58,99,58,58,58,8,58,99,99,58,58,78,78,58,78,58, +78,58,78,78,78,78,78,246,246,246,246,246,246,246,246,246,78,246,246,246, +58,58,78,58,78,58,58,99,58,78,58,246,246,58,58,58,212,58,58,12, +71,58,58,58,99,92,92,71,218,71,223,8,19,22,150,30,49,11,23,101, +30,93,54,49,112,49,20,30,254,181,95,26,253,253,49,65,163,166,206,202, +52,26,8,121,4,161,43,114,139,131,57,200,195,188,192,88,26,26,121,98, +197,67,234,145,230,22,82,20,20,8,98,107,100,112,253,112,103,244,54,62, +49,20,49,237,118,208,243,103,11,11,12,92,92,92,92,12,49,12,58,58, +78,58,246,78,246,78,212,99,58,58,78,246,58,78,58,58,58,99,58,58, +58,99,246,246,246,246,246,246,246,246,246,246,246,78,246,78,246,78,58,78, +78,58,78,78,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,78,78,78,78,246,246,246,246,246,246,246,246,246,246,246,58,212,58,246, +99,212,58,99,78,99,58,58,78,246,58,58,58,78,78,58,78,78,99,71, +12,71,58,58,12,12,12,71,11,12,223,101,49,243,100,118,223,112,82,19, +93,225,113,23,244,101,223,41,129,199,52,253,20,223,242,124,39,57,117,122, +121,121,47,44,195,35,94,196,165,189,189,189,27,84,200,139,67,186,26,121, +240,106,159,234,175,68,242,20,20,20,8,210,238,93,223,19,237,244,23,54, +62,19,101,244,112,30,243,208,237,11,12,92,49,223,12,12,92,12,58,78, +246,78,58,246,78,212,78,78,58,58,212,58,58,58,78,99,58,58,99,58, +58,58,246,246,246,246,246,246,246,246,246,246,78,246,58,78,58,78,78,78, +78,78,237,78,58,58,58,58,58,8,99,58,99,58,78,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,103,246,246,246,246,218,58,58,78,78, +58,99,71,12,58,78,58,78,58,78,123,12,78,78,58,212,78,78,123,92, +12,12,99,99,12,92,92,71,11,118,82,101,112,116,236,82,112,112,82,118, +100,110,66,23,49,101,244,215,73,43,69,253,101,23,219,59,97,202,52,8, +8,4,120,97,187,139,27,143,46,113,26,26,46,88,60,27,131,200,192,47, +82,66,81,159,234,170,68,118,20,251,20,26,2,64,244,101,118,22,23,62, +62,49,20,118,244,23,208,245,30,11,71,12,92,12,12,49,12,12,71,58, +246,246,78,246,78,246,58,78,58,78,212,218,12,246,78,99,58,78,78,11, +12,58,58,246,246,103,246,246,58,246,246,246,246,78,246,78,78,78,58,78, +78,58,58,58,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,212,78,246,246,78,99,58,246,246,246,246,246,246,71,12,99,58,58,99, +58,58,53,251,71,78,78,78,78,246,19,19,71,246,246,78,212,246,12,92, +12,12,12,12,92,12,12,71,218,118,19,101,244,239,65,223,244,11,53,112, +222,235,66,112,223,20,72,45,90,221,8,253,19,242,214,97,57,152,26,8, +26,188,57,187,139,186,8,8,8,8,121,121,8,8,26,4,44,131,94,67, +162,82,113,44,159,76,220,29,82,0,20,8,98,238,245,82,82,237,23,62, +54,112,20,223,237,49,22,245,237,11,71,49,12,92,12,12,12,12,71,78, +246,58,246,58,246,78,246,58,246,212,58,19,101,218,78,78,99,58,58,53, +101,71,58,246,246,246,78,71,92,58,246,246,212,246,78,58,58,78,78,58, +78,78,78,78,58,58,58,58,58,8,99,99,58,99,58,78,78,58,99,58, +78,78,58,246,78,58,71,92,218,246,246,246,103,246,12,92,92,58,58,58, +58,218,63,53,19,246,246,78,78,212,53,92,92,212,246,78,78,58,92,218, +12,12,92,92,92,12,12,71,11,118,101,101,22,116,242,223,237,11,8,30, +17,62,70,112,8,53,72,172,134,143,8,20,223,109,102,57,97,81,121,82, +252,114,35,157,165,26,253,8,8,46,182,4,26,26,8,8,113,160,190,35, +186,66,121,106,117,152,232,68,49,79,20,8,26,42,17,223,53,22,112,244, +54,244,8,82,30,118,30,245,30,11,99,12,12,92,123,12,12,12,71,78, +246,78,246,78,58,246,246,58,246,58,12,53,53,12,78,78,78,99,12,63, +63,92,78,78,246,246,78,229,229,12,246,246,246,212,78,71,71,58,78,78, +58,78,78,58,58,58,212,58,58,8,99,58,58,58,58,78,78,58,99,218, +99,58,246,78,78,58,12,92,12,78,246,246,246,218,92,92,19,71,58,58, +58,12,38,92,53,71,246,58,246,218,108,92,92,218,246,212,78,58,12,218, +12,12,12,92,12,92,12,71,71,118,82,8,103,116,242,82,244,11,82,30, +222,210,223,23,8,101,55,172,183,186,8,253,223,110,102,157,97,161,8,8, +127,67,190,140,189,26,8,8,69,127,120,5,52,26,26,8,121,9,84,187, +43,113,82,98,142,152,89,119,244,20,0,253,121,219,64,23,101,30,30,23, +54,244,82,101,30,112,112,72,237,71,30,12,12,92,118,12,12,12,71,58, +246,246,58,246,58,212,78,246,58,246,108,63,53,19,78,78,78,58,53,101, +53,108,78,246,246,246,108,79,20,53,246,246,246,78,99,92,92,12,99,78, +78,58,58,218,218,218,99,58,58,8,99,99,58,58,58,99,99,218,71,11, +99,99,78,246,212,71,218,71,92,71,246,246,246,71,92,92,19,19,58,58, +58,92,53,92,92,108,58,246,246,71,92,92,92,92,212,246,246,58,123,48, +12,12,12,92,92,12,12,12,99,118,19,101,237,116,65,49,30,112,82,244, +222,235,26,118,82,101,65,136,183,7,8,8,82,242,21,157,57,192,69,8, +26,7,191,157,190,60,9,8,26,52,84,131,60,4,121,8,26,113,67,94, +142,113,82,98,43,152,10,119,244,251,0,253,121,111,64,23,101,244,22,49, +62,62,82,101,112,23,112,103,30,71,11,12,12,118,12,12,118,12,71,78, +78,246,78,58,218,58,78,246,246,12,53,101,53,19,58,78,58,12,63,63, +53,63,218,246,246,71,79,20,63,101,218,246,246,218,12,19,108,12,99,58, +99,71,218,71,71,218,71,218,71,8,99,58,99,99,58,58,11,218,71,218, +71,71,218,58,58,99,218,99,71,92,218,78,246,92,92,12,223,53,71,58, +58,19,19,92,92,19,12,78,78,12,92,92,92,92,71,78,78,218,123,241, +48,12,12,92,49,12,118,12,71,49,223,101,11,116,65,66,112,11,82,112, +100,54,66,66,223,20,244,105,90,159,8,8,8,244,10,167,187,202,98,8, +121,47,192,169,190,35,195,188,188,195,57,84,106,47,8,8,8,122,195,140, +95,66,82,98,142,221,175,119,244,251,251,20,8,219,64,112,101,30,242,118, +23,62,19,20,11,118,112,22,11,11,99,12,12,12,12,71,12,118,71,58, +246,58,246,99,12,99,212,78,58,19,53,53,101,53,58,78,218,53,101,53, +53,63,218,246,246,63,0,101,19,53,12,78,58,12,108,92,19,108,92,71, +71,12,71,71,123,71,71,123,71,8,99,99,58,58,58,11,58,11,99,218, +99,11,99,99,218,99,218,99,71,12,12,99,99,92,92,92,12,19,53,71, +99,38,53,12,12,92,19,218,212,92,92,92,48,12,108,128,246,218,123,48, +128,123,12,12,12,12,12,118,71,71,223,8,112,41,55,49,49,244,223,49, +93,231,70,82,223,20,82,116,181,158,252,8,20,223,242,214,57,157,156,46, +8,66,26,147,44,198,86,196,86,198,44,52,4,8,8,8,46,60,97,194, +52,82,82,180,159,177,232,64,66,79,20,8,26,231,100,49,8,237,62,23, +62,244,82,82,30,223,11,237,112,11,11,12,12,71,12,12,118,12,71,218, +246,78,58,218,92,99,246,212,92,53,79,79,53,53,218,58,19,63,38,126, +53,101,92,58,19,251,63,223,19,19,92,71,12,223,92,223,223,92,19,92, +12,71,123,71,71,71,71,71,71,8,11,58,11,58,99,58,99,58,99,58, +58,218,218,218,99,218,11,99,99,71,92,92,12,49,92,71,99,12,53,53, +92,20,53,123,48,12,92,19,218,19,92,12,241,48,92,92,58,218,92,241, +128,212,71,12,118,12,12,71,71,112,223,19,82,55,116,112,49,244,223,19, +208,238,235,66,223,253,82,22,250,73,95,113,8,82,49,111,102,207,132,188, +252,69,8,121,162,4,47,52,127,4,4,26,26,8,8,46,186,86,169,95, +66,8,4,95,192,87,45,236,101,251,253,8,70,222,236,223,223,237,244,23, +54,244,82,82,237,118,11,244,71,11,99,71,118,12,12,12,12,12,12,58, +78,78,246,123,108,12,212,12,53,63,13,83,63,53,12,92,53,226,13,13, +53,53,53,226,75,63,12,71,92,19,19,92,92,92,19,12,12,12,92,12, +71,71,71,71,71,12,71,71,71,8,99,99,58,99,99,58,58,99,58,58, +11,218,71,71,11,218,99,99,58,218,12,19,92,92,92,99,78,58,92,101, +75,251,53,12,123,48,92,108,101,63,92,12,241,241,92,92,108,92,108,128, +212,246,58,12,12,12,49,12,12,118,12,49,19,237,116,22,49,118,244,82, +112,17,231,70,223,82,20,82,93,45,133,7,46,8,8,49,50,224,168,207, +142,60,127,46,8,26,8,8,8,8,8,8,121,26,47,192,166,169,7,113, +66,113,7,156,36,217,28,23,251,251,20,26,111,222,30,8,49,22,112,62, +242,112,101,112,30,49,244,11,112,11,99,71,12,12,118,12,12,12,71,246, +246,78,212,92,108,92,218,53,38,13,0,0,63,101,20,63,101,75,83,83, +63,101,229,79,126,92,58,78,12,19,92,92,19,92,12,71,71,118,71,71, +218,12,71,71,71,71,71,218,99,8,218,99,218,58,58,218,99,99,58,99, +58,58,99,99,218,99,218,99,58,58,99,92,92,92,19,58,78,78,99,108, +0,34,38,123,123,48,123,92,53,108,92,12,241,241,241,123,92,19,19,123, +241,212,246,99,12,71,12,71,12,71,118,223,82,118,245,100,112,49,30,118, +223,237,238,111,113,223,19,20,49,93,144,184,44,113,8,253,19,210,173,141, +168,57,196,142,60,52,122,182,113,113,122,3,60,159,130,86,43,122,26,223, +47,106,95,76,89,68,244,20,251,20,8,210,238,72,223,19,30,112,23,62, +244,223,20,118,112,112,244,118,11,99,99,218,71,218,71,12,12,71,58,58, +78,246,246,92,63,53,53,101,83,0,83,83,53,63,63,53,20,83,0,0, +53,53,79,0,226,78,58,78,12,108,92,19,92,71,58,58,99,71,71,123, +71,218,218,71,218,218,99,218,99,8,99,99,218,218,99,99,99,99,58,99, +99,58,99,11,71,99,99,58,58,58,58,71,92,92,19,78,78,58,78,218, +53,63,101,123,123,48,48,123,92,19,92,92,241,241,241,241,92,92,92,12, +241,212,78,78,123,118,12,12,12,12,112,92,49,223,30,247,65,49,23,112, +82,23,72,231,14,26,82,19,101,49,17,146,102,154,147,69,8,82,49,23, +249,104,158,39,206,169,86,130,202,142,202,114,39,117,76,88,4,66,66,113, +7,95,234,175,68,22,101,20,251,8,4,107,100,112,101,112,30,23,112,62, +49,101,49,244,118,112,112,118,11,78,99,99,99,58,71,12,92,99,246,78, +246,58,218,108,108,53,63,229,0,83,34,13,53,53,101,38,13,0,0,13, +53,101,63,101,99,78,58,78,71,19,19,92,71,58,99,58,11,218,218,71, +99,99,99,99,218,58,99,218,218,8,71,218,99,99,218,58,99,99,99,99, +99,58,99,58,99,218,11,58,58,99,58,58,71,92,92,58,78,78,78,78, +118,19,53,123,48,128,128,48,123,12,92,92,48,128,212,48,241,12,12,92, +241,128,246,246,246,71,12,12,12,71,71,118,49,223,49,208,116,22,49,23, +11,223,223,72,225,235,113,82,82,101,49,65,68,164,201,7,162,26,8,121, +66,223,23,216,14,36,177,152,154,152,80,255,98,66,66,223,66,4,32,152, +152,163,228,222,112,251,20,20,8,113,219,222,22,82,23,22,62,112,54,244, +101,82,112,112,23,118,112,11,11,78,58,58,246,99,71,71,99,58,246,212, +58,58,123,108,108,53,20,13,101,19,34,13,53,53,53,0,75,38,0,34, +63,53,53,71,58,78,58,78,11,92,92,71,58,58,58,58,99,218,11,99, +11,58,218,218,99,99,218,99,99,8,99,71,99,99,99,99,99,218,58,99, +218,58,99,99,99,58,58,78,58,99,58,58,58,71,12,78,78,78,78,78, +58,12,19,12,48,218,246,218,48,12,92,92,241,48,58,212,48,241,12,92, +48,241,212,58,212,212,123,118,12,71,118,118,12,223,49,118,55,239,244,223, +112,112,82,118,236,225,14,4,26,82,101,19,112,93,153,21,224,174,88,162, +26,26,121,82,66,66,66,66,66,66,26,82,66,26,113,127,32,44,51,87, +248,222,236,223,20,20,20,8,70,111,17,237,223,49,237,30,62,54,30,118, +253,49,112,118,23,118,118,11,99,58,58,58,212,99,71,218,246,78,78,58, +58,58,108,108,63,38,13,92,58,12,13,251,53,63,251,79,12,71,34,34, +251,53,19,58,78,78,78,58,58,71,71,58,99,99,58,99,58,11,58,99, +99,99,99,218,218,99,218,218,99,8,71,99,218,218,218,99,218,99,99,99, +99,71,58,99,99,99,99,58,58,99,58,58,78,58,99,78,58,78,58,78, +78,78,99,218,128,58,58,78,128,48,12,92,123,241,78,246,58,48,241,218, +12,128,212,212,58,58,212,218,71,12,71,12,118,12,223,49,11,243,55,244, +49,112,244,223,49,236,17,111,4,121,82,82,8,223,244,29,153,61,148,234, +152,32,147,52,4,4,113,26,113,26,98,98,147,255,7,193,24,163,217,238, +110,112,101,20,20,253,8,70,107,222,22,223,223,244,244,244,244,242,112,82, +223,118,23,23,49,118,71,11,58,58,58,246,246,58,99,78,58,212,212,78, +58,99,53,53,38,83,19,58,246,19,34,79,251,34,34,71,58,71,79,13, +83,63,218,58,58,99,58,78,58,99,78,58,99,99,99,58,58,99,99,58, +218,11,218,99,11,218,11,99,71,8,71,218,218,11,71,99,218,99,99,99, +99,218,11,99,58,58,58,58,11,58,99,218,58,58,78,78,78,78,58,58, +78,78,78,78,58,78,78,78,58,58,48,123,48,48,128,78,246,78,128,241, +241,241,128,212,58,58,58,58,218,12,118,71,71,112,118,223,49,11,245,55, +30,49,112,244,223,19,30,93,107,111,4,26,101,101,8,101,112,242,93,203, +6,170,21,74,51,51,104,24,234,76,24,104,76,124,232,56,225,18,30,223, +20,20,20,20,8,66,235,231,236,112,223,118,30,112,112,54,244,112,82,49, +112,23,118,118,12,11,99,99,246,58,58,58,78,58,246,246,78,78,212,78, +58,12,53,229,34,40,78,78,58,38,0,13,13,79,71,58,58,71,13,0, +38,71,58,99,58,99,58,99,78,58,58,99,99,99,71,99,58,99,218,99, +71,99,218,99,99,71,218,99,71,8,71,71,71,123,218,218,11,218,218,218, +218,99,218,218,99,99,99,99,58,99,99,99,99,99,58,78,78,58,58,99, +99,78,78,246,78,212,78,78,58,78,128,48,48,241,48,246,78,58,246,128, +128,128,128,128,212,78,212,78,58,218,71,71,12,12,118,118,49,49,112,208, +41,22,49,112,244,23,19,49,22,93,219,14,4,8,82,101,20,101,223,49, +30,65,18,29,17,203,228,230,56,96,91,225,225,236,242,112,49,82,20,20, +20,20,82,113,210,107,29,22,118,223,112,30,244,244,62,112,23,82,223,49, +118,118,49,49,118,71,99,246,58,58,212,246,246,78,212,58,246,246,78,58, +218,53,209,126,40,78,78,78,218,0,34,34,79,71,78,99,58,71,251,229, +12,58,99,99,99,58,58,58,58,99,99,99,99,218,99,58,99,99,99,218, +99,218,11,218,218,11,218,71,71,8,71,123,71,71,218,123,71,99,11,99, +218,11,99,71,218,99,58,99,99,58,218,218,99,99,58,58,58,58,99,58, +58,99,58,246,246,246,78,58,58,58,78,58,48,48,241,78,246,78,78,58, +58,241,241,241,212,58,246,78,246,58,218,71,71,71,118,118,118,49,49,112, +103,243,236,112,49,244,112,49,223,118,65,93,107,14,98,113,82,8,101,253, +101,20,101,82,82,223,118,118,49,49,49,82,82,101,101,20,20,253,253,121, +26,70,235,110,29,103,118,223,223,11,244,244,54,242,244,49,19,223,49,118, +118,49,12,71,11,99,212,246,78,78,78,78,212,246,78,58,78,212,78,58, +12,38,213,71,78,58,58,78,40,83,79,20,99,58,99,58,99,12,92,71, +78,58,99,99,99,99,99,99,99,99,218,218,99,218,218,99,218,218,11,218, +11,218,218,71,218,218,71,123,71,8,71,71,12,71,71,218,218,218,71,71, +218,218,218,218,71,218,218,99,99,218,99,99,99,99,99,99,58,99,58,99, +99,99,99,58,78,78,78,78,58,99,58,58,58,128,48,128,78,78,58,78, +212,212,212,241,128,58,246,246,58,246,58,218,218,118,71,71,118,12,118,49, +23,237,245,55,208,23,118,23,112,223,223,118,244,236,18,110,14,210,4,66, +121,8,82,20,82,101,101,251,20,20,20,101,8,20,8,8,26,26,210,235, +109,110,65,30,118,223,49,244,244,244,244,242,65,30,223,82,49,118,118,49, +92,49,118,71,11,78,246,78,58,246,212,246,78,78,246,78,246,78,212,218, +53,92,99,78,58,58,58,246,53,0,53,99,99,58,99,58,99,71,218,58, +99,58,99,218,58,99,58,78,99,99,11,99,71,99,99,218,99,99,218,71, +123,218,71,218,12,71,71,71,71,8,71,71,71,71,71,118,71,71,218,99, +71,71,71,123,71,71,218,99,99,218,218,71,11,218,99,99,58,99,58,99, +99,99,218,58,58,78,78,78,58,99,99,58,58,58,58,128,246,78,58,58, +58,58,246,128,128,58,212,246,78,78,78,58,58,218,71,71,11,118,118,49, +12,23,11,103,243,72,237,23,23,112,23,223,19,223,112,22,109,18,29,111, +111,210,210,70,4,26,26,26,26,26,26,4,4,70,98,235,2,18,29,65, +54,23,223,49,23,244,244,112,244,54,22,244,118,82,223,223,118,92,49,49, +223,71,11,99,99,78,246,58,246,78,58,212,78,78,58,58,246,78,58,218, +71,78,58,58,99,58,58,99,19,77,58,58,58,218,99,58,58,58,58,58, +218,99,11,218,58,99,218,58,218,218,71,218,218,71,99,71,218,71,71,218, +71,123,71,71,71,71,71,71,12,8,118,118,71,71,118,71,71,71,118,12, +71,123,71,71,71,71,71,71,218,99,99,99,218,218,71,218,99,99,58,99, +99,218,99,218,58,58,246,78,78,99,99,99,99,58,246,78,58,246,58,58, +58,58,58,78,78,58,58,58,246,212,99,58,58,58,218,99,71,118,11,118, +49,49,49,23,11,208,55,245,22,112,23,23,23,23,49,49,49,223,112,30, +22,236,18,18,18,29,18,18,18,18,107,236,29,236,236,22,30,23,223,223, +223,118,118,112,244,112,244,242,242,30,23,223,82,223,49,49,49,223,49,12, +71,71,99,58,246,212,58,58,58,78,78,78,58,58,58,58,78,212,246,78, +78,58,58,11,99,58,78,78,99,58,58,99,218,99,58,99,58,58,58,218, +99,71,218,99,218,58,99,218,218,71,218,123,71,99,71,218,71,71,71,12, +71,71,12,12,12,12,12,12,12,8,12,12,12,12,12,12,118,118,71,71, +71,218,71,123,71,71,71,71,123,71,218,11,218,71,218,123,218,99,218,58, +99,99,11,218,71,99,99,58,78,58,99,99,71,99,58,78,246,246,246,58, +58,218,58,99,78,78,246,78,78,246,58,58,58,212,58,58,99,71,71,118, +71,118,118,23,49,112,112,103,72,72,65,244,112,23,118,118,70,223,223,223, +223,49,118,23,118,112,112,244,112,112,23,23,23,49,49,223,223,49,23,118, +244,244,112,62,244,109,22,30,49,223,223,82,49,223,49,223,223,118,118,71, +99,99,99,78,78,246,58,58,78,78,58,58,58,99,78,246,78,78,78,78, +99,99,99,58,99,58,78,78,58,99,99,11,218,99,99,58,58,11,99,218, +218,218,71,99,218,218,11,218,123,71,218,71,71,218,71,71,123,71,118,12, +71,12,12,12,12,12,12,12,12,8,12,12,12,12,12,12,71,71,71,118, +71,118,71,71,118,12,71,71,71,71,99,218,123,71,218,71,218,71,99,99, +99,218,218,71,218,218,99,58,58,58,58,218,99,218,218,99,58,99,78,58, +58,99,99,99,58,58,78,246,246,78,78,78,58,99,58,58,99,58,99,71, +11,71,12,23,118,118,118,23,112,30,103,208,208,65,242,112,118,23,23,118, +118,118,49,112,23,112,11,112,112,112,118,49,49,49,49,112,23,23,112,244, +244,22,22,22,242,112,49,223,223,66,223,49,223,49,223,49,12,71,71,99, +99,58,212,212,246,58,78,78,58,58,99,99,99,58,78,78,78,78,58,58, +99,99,99,58,58,58,58,58,99,218,71,218,99,99,218,58,99,99,71,218, +71,71,218,99,71,99,123,71,118,118,123,71,71,123,71,71,12,12,118,12, +12,12,12,12,12,12,71,12,71,8,12,92,12,92,71,12,118,118,12,12, +118,71,71,12,71,71,118,12,12,71,118,218,71,71,71,12,71,12,218,218, +99,99,218,218,71,71,71,218,99,99,99,99,71,71,218,71,99,58,58,58, +58,58,99,11,99,99,99,58,246,78,246,78,58,99,99,99,58,58,99,99, +99,11,71,112,112,118,118,92,118,23,118,112,30,237,103,65,65,22,30,54, +244,244,23,112,244,112,244,112,244,23,244,23,112,62,244,244,30,242,22,242, +22,30,23,49,49,19,82,223,223,49,49,49,223,49,12,11,11,218,99,58, +58,78,78,78,246,78,78,99,99,58,99,58,58,78,78,78,58,99,218,218, +71,99,99,99,58,99,58,99,71,123,71,218,99,99,218,99,218,71,12,71, +71,218,71,71,218,71,71,71,71,71,12,71,71,71,118,12,12,12,71,71, +12,12,12,12,118,12,12,92,12,8,12,12,71,12,12,12,12,12,71,12, +118,12,12,12,118,12,71,12,12,71,71,71,71,123,71,12,12,71,71,218, +218,218,11,71,123,71,71,218,71,99,99,58,99,99,71,218,218,99,218,58, +58,58,58,99,218,71,99,218,58,58,58,246,212,58,58,99,99,58,99,58, +58,58,58,218,71,71,112,71,118,118,49,23,118,118,49,112,112,30,237,22, +22,22,103,22,22,22,22,22,30,242,22,22,22,103,22,22,30,112,112,23, +49,49,49,82,223,66,49,49,49,49,223,12,118,71,218,99,99,58,99,58, +78,246,78,246,58,58,99,99,218,218,99,99,99,58,58,58,99,218,71,218, +99,99,58,58,58,99,218,123,71,71,218,218,99,99,99,123,71,71,71,92, +71,71,218,218,71,12,12,12,118,71,12,118,71,71,71,12,12,12,12,12, +12,12,118,118,12,12,12,12,12,8,92,92,92,12,12,12,12,12,12,12, +92,12,12,12,71,12,118,12,12,12,12,12,71,71,71,12,12,71,118,71, +71,123,71,71,71,118,71,71,71,123,71,218,218,99,218,71,12,71,71,218, +218,58,58,99,58,71,71,218,218,218,99,58,58,58,58,58,99,99,99,218, +218,99,58,58,99,99,99,11,11,11,23,112,118,112,49,118,118,118,23,118, +49,118,23,112,112,112,112,244,112,112,118,112,118,49,49,223,49,223,223,49, +223,223,49,49,223,49,223,223,118,118,71,11,218,99,218,99,218,78,58,58, +58,58,58,218,218,218,218,218,58,99,58,58,58,58,218,99,71,71,123,71, +218,99,58,99,99,71,71,12,12,71,71,71,218,218,218,71,118,71,71,12, +123,71,12,71,71,12,12,12,118,71,12,12,12,118,118,12,71,118,12,118, +12,12,12,12,12,92,12,12,92,8,92,92,12,12,92,12,92,12,12,12, +12,12,118,12,12,12,12,12,12,12,118,12,12,71,118,71,12,12,71,118, +71,71,71,123,218,118,12,71,71,71,71,99,99,218,218,71,71,71,71,71, +99,218,99,58,99,218,218,71,71,71,218,71,58,99,58,58,99,58,218,99, +99,218,99,99,58,58,58,99,58,99,218,11,71,112,11,112,118,23,118,23, +49,118,118,92,49,92,49,92,49,92,49,223,223,49,223,49,49,49,49,82, +49,49,49,223,118,118,71,71,11,71,99,218,218,99,58,58,58,58,58,58, +58,218,218,218,71,218,218,99,99,99,99,58,218,218,71,123,71,71,218,11, +99,99,218,218,71,71,12,71,12,218,218,218,71,218,118,12,71,118,71,71, +71,71,71,71,118,71,12,12,12,71,12,12,12,12,12,12,12,49,12,12, +12,92,12,49,12,92,12,12,92,8,92,92,92,92,92,12,92,12,12,92, +12,92,12,92,12,71,71,12,12,12,12,71,12,118,71,118,71,118,12,12, +12,12,71,71,218,71,71,118,118,12,12,118,71,218,71,218,123,12,12,12, +12,71,71,99,99,99,218,71,71,71,71,123,71,218,218,58,99,99,58,218, +99,218,218,11,99,218,99,218,218,58,58,58,99,218,71,11,71,71,118,11, +112,71,112,118,112,12,118,118,118,118,118,118,118,118,118,118,223,223,49,49, +118,118,118,71,71,71,218,71,218,71,99,99,99,218,58,58,58,218,218,218, +218,71,71,218,123,71,218,99,58,218,218,99,71,118,12,71,71,71,218,218, +218,99,71,118,12,12,12,71,71,123,71,71,71,12,118,12,92,71,118,71, +12,12,71,12,12,92,12,12,12,118,12,12,12,12,12,92,12,12,12,92, +71,92,12,92,92,92,92,92,12,8,92,92,92,92,92,92,92,92,92,12, +92,12,92,12,92,92,12,118,92,12,12,92,92,12,12,12,12,12,12,12, +12,12,71,118,12,118,71,71,12,12,12,12,118,71,218,71,218,71,118,12, +12,71,12,71,218,71,99,218,123,71,71,12,71,118,71,71,99,218,218,99, +218,99,218,218,218,71,123,71,218,218,218,218,99,99,99,58,99,99,99,218, +99,71,71,71,11,71,11,11,11,11,11,11,11,11,71,118,12,118,218,218, +71,218,71,71,218,71,99,71,99,99,99,58,218,99,218,218,71,71,71,71, +71,71,123,71,11,99,99,99,218,218,71,71,12,12,12,71,123,218,71,218, +71,118,71,12,118,12,12,71,71,218,118,12,12,12,92,12,71,118,71,71, +12,71,92,12,92,12,12,12,118,12,12,92,92,12,92,12,92,92,92,92, +92,92,92,92,12,92,92,92,92,8,92,92,92,12,92,92,92,92,92,92, +92,92,92,12,92,92,12,12,92,92,92,12,92,92,12,12,118,12,12,92, +92,12,12,12,71,71,71,118,12,118,12,12,12,71,12,71,71,71,71,12, +12,12,118,12,12,118,218,71,71,71,12,71,71,71,12,12,71,71,71,11, +218,99,218,218,218,218,71,71,71,71,71,71,71,71,218,218,218,218,99,218, +218,218,99,218,99,218,218,218,218,218,218,218,218,99,218,11,218,71,71,71, +71,123,71,123,71,218,99,218,218,11,218,99,71,71,71,71,71,71,71,92, +71,71,71,123,71,218,71,71,71,118,12,12,12,12,71,71,71,218,71,71, +12,12,12,12,12,12,12,71,71,71,12,12,12,12,12,12,12,12,118,12, +12,92,92,92,12,92,12,71,12,92,92,12,92,92,92,92,92,12,92,92, +92,92,92,92,92,92,92,92,92,8,92,19,92,92,92,92,92,223,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,12,118,12,12, +12,92,92,12,92,12,12,12,71,12,49,12,92,92,12,12,71,12,12,12, +12,71,12,12,12,12,71,12,71,71,218,218,71,118,12,12,12,71,12,12, +71,123,71,71,99,71,71,123,71,123,71,123,71,71,71,71,71,71,71,71, +71,218,218,218,71,71,218,71,218,71,218,71,71,123,71,123,71,123,71,123, +218,71,218,218,218,218,71,71,71,71,71,12,12,12,12,12,12,12,71,71, +71,123,218,218,71,71,12,12,12,71,12,12,12,12,71,71,71,12,118,12, +12,92,12,12,12,12,12,12,71,12,92,12,92,12,12,118,12,12,12,92, +92,92,92,92,92,12,92,92,12,92,92,92,92,19,12,92,92,92,92,92, +12,92,92,92,92,92,92,92,92,8,19,108,19,108,12,19,92,92,92,92, +92,92,92,92,92,19,92,92,92,92,92,92,92,92,92,92,92,92,12,92, +92,92,92,92,92,92,12,12,12,12,71,12,92,92,92,92,12,92,118,12, +12,12,12,12,92,12,12,12,71,12,71,71,71,12,12,12,12,12,12,92, +112,118,71,12,71,71,71,218,71,71,71,71,71,71,12,12,12,12,12,12, +12,118,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, +71,71,71,71,71,71,71,71,118,71,12,71,12,12,12,12,12,71,71,123, +71,71,71,92,12,12,12,12,92,92,71,12,12,12,12,71,12,12,92,12, +92,92,12,118,12,12,118,12,12,92,92,92,92,12,12,12,12,92,92,92, +92,12,92,12,92,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,19,19,108,92,8,92,92,19,92,108,92,19,92,92,92, +92,108,92,92,92,12,92,92,12,92,92,92,92,92,92,92,92,92,92,12, +12,92,92,92,92,223,12,92,12,12,12,12,12,92,92,12,92,12,12,12, +12,12,12,12,49,12,92,92,92,92,12,12,71,12,12,12,12,12,12,12, +92,92,118,92,12,12,118,12,12,12,12,12,12,71,12,12,12,12,12,12, +12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, +12,12,118,118,12,118,12,12,12,12,12,12,12,12,12,12,12,12,71,12, +12,12,71,92,12,92,92,49,12,12,12,12,118,12,12,118,92,12,92,92, +12,12,12,12,123,12,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,92,92,19,92,92,108, +92,19,92,108,108,92,108,92,108,8,19,108,19,92,19,108,108,108,92,19, +92,92,19,92,108,108,92,108,108,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,12,12,12,12,12,12,92,92,92,92,92,92,12,12,12,12,12,118,12, +12,12,12,92,12,12,12,12,71,12,12,12,12,71,71,12,12,71,118,118, +12,12,12,12,12,118,12,12,12,92,12,12,12,12,12,71,12,12,118,12, +12,71,12,12,12,12,12,92,118,118,12,12,12,12,71,12,12,12,49,12, +92,12,92,92,92,12,92,12,12,12,12,12,92,92,92,92,92,92,92,92, +12,12,71,92,92,92,12,92,223,92,92,92,12,92,92,92,92,92,12,19, +92,92,92,92,92,92,108,92,108,19,92,108,108,108,92,92,19,108,92,108, +19,92,19,92,108,92,108,19,19,8,19,108,19,108,108,19,92,19,108,19, +19,108,108,19,19,92,108,92,92,108,19,12,108,108,92,19,108,108,92,19, +92,92,92,92,92,92,108,19,92,92,92,92,12,92,92,92,92,92,92,92, +92,92,92,12,12,118,123,92,12,12,92,92,92,92,92,92,12,12,12,12, +12,92,12,12,92,12,92,92,92,92,92,92,12,12,12,12,12,12,12,71, +71,12,12,12,12,12,12,12,71,12,12,12,12,12,12,92,12,12,92,12, +92,12,12,49,12,92,12,12,12,12,12,71,12,12,12,12,92,12,92,12, +92,92,92,92,92,12,12,12,12,92,12,12,92,92,92,92,92,92,12,12, +12,92,92,92,92,19,108,92,92,92,92,92,92,92,92,19,92,108,108,92, +92,92,92,19,108,92,19,108,92,108,108,92,19,92,108,19,108,92,108,92, +19,108,108,92,108,108,19,92,108,8,19,19,19,19,19,108,19,19,108,92, +19,19,108,92,19,19,108,19,108,92,108,19,92,19,92,92,92,19,92,92, +92,92,92,92,92,92,19,108,92,19,19,92,92,92,92,92,92,92,223,92, +223,92,92,92,92,92,92,92,92,92,92,92,92,223,92,92,92,12,92,12, +12,12,12,12,92,12,12,92,12,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,92,49,92,12,92,92,12,12,92,12,92,12,92,12,12,92,12, +12,12,12,12,12,12,12,92,92,92,12,92,92,92,92,92,92,92,92,92, +92,92,12,12,12,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,19,92,92,108,12,92,92,92,12,19,92,92,108,92,19,19,92, +92,92,92,92,108,19,92,19,19,92,92,108,108,92,108,92,19,19,19,108, +19,19,19,19,19,19,108,19,19,8,19,53,19,53,19,53,19,53,19,108, +19,108,19,108,108,108,19,108,19,108,19,108,108,108,108,19,108,19,108,19, +19,92,108,19,19,12,108,92,108,92,108,19,108,92,92,92,92,92,92,19, +92,19,108,92,19,92,92,92,92,92,92,92,92,92,92,92,108,108,19,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,92,92,92,12,92,19,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,108,19,92,92,223,92,92,92,92,92,92, +19,108,108,108,108,19,92,92,92,92,108,108,108,108,108,92,108,92,108,19, +92,19,108,108,19,108,108,108,108,108,19,19,19,19,19,19,108,108,53,19, +108,19,108,53,19,53,19,53,19,8,19,19,19,19,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,108,19,108,19, +19,19,19,19,108,19,108,19,108,19,108,19,19,19,19,108,19,92,92,92, +19,19,108,19,108,19,19,92,92,92,92,92,92,92,92,19,19,108,19,108, +19,92,19,92,92,92,92,92,92,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,19,19,19,92,19,19,92,19,19,108,92,92,92,19,92,92,92, +92,92,92,92,92,19,19,19,19,108,19,108,92,92,92,92,92,92,19,19, +92,19,223,19,108,19,108,92,19,19,19,19,19,19,108,19,108,19,108,19, +19,19,19,19,19,19,19,19,19,108,19,108,19,108,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,8}; diff --git a/plug-ins/Encript_Decript/logo.h b/plug-ins/Encript_Decript/logo.h deleted file mode 100644 index 871a318a06..0000000000 --- a/plug-ins/Encript_Decript/logo.h +++ /dev/null @@ -1,14 +0,0 @@ -/* GIMP header image file format (RGB-only): //logo.h */ - -static unsigned int logo_width = 200; -static unsigned int logo_height = 72; - -/* Call this macro repeatedly. After each use, the pixel data can be extracted */ - -#define HEADER_PIXEL(data,pixel) \ - pixel[0] = (((data[0] - 33) << 2) | ((data[1] - 33) >> 4)); \ - pixel[1] = ((((data[1] - 33) & 0xF) << 4) | ((data[2] - 33) >> 2)); \ - pixel[2] = ((((data[2] - 33) & 0x3) << 6) | ((data[3] - 33))); \ - data += 4; - -static char *header_data = ")1!X)1!X)A!Y)Q!\\)Q!\\)A!Z)A!Z)Q!])A!Z)A!Z)1!X)Q!\\*!!^)Q!])Q!]*1\"!*1\"!*1\"\"*1\"!*1\"!*1\"!*1\"!*Q\"%*!!_*!!_*!!_*1\"\"*!!^*A\"$+!\"(*!!_*Q\"%*1\"\"*A\"$*Q\"%*A\"#*A\"#*1\"\"*!!_*!!_*A\"$*Q\"&+A\",*Q\"%*A\"$*A\"$*Q\"$+!!\\*A\"#+1\"+*A\"$*Q\"%+1\"++!\")+Q\".+A\",+Q\".+1\"+*Q\"%*A\"$*A\"$*A\"$+!\"(*1!`*A\"$+A\"-+A\"-+A\",,!\"1,!\"1+A\",,!\"2+1\"++Q\"'+A\",+A\"-+A\",*A\"$*A\"$*A\"$+!\"(+!\"(+!\"(+1\"+*Q\"'+!\"(+!\"(+A\",,!\"),1\"2+A\",,!\"2+Q\"0,!\"1,!\"1,!\"1+A\"-+A\",,!\"1+A\"-,1\"2,!\"2+A\",+A\".+1\"++A\"-+Q\".+Q\"0+A\"-+Q\".+Q\".,!\"1,!\")+A\"+*Q\"'+A\"-+A\"-+A\",,!\"1,Q\"*+Q\".+A\".+A\"-+Q\".+Q\".+1\"++1\"+*Q\"%+!\"(*A\"$*A\"$*A\"$*A\"$*A\"$*A\"$+Q\".+A\",+Q\".,1\"4+Q\".+1\"++1\"*+1\")*Q\"&*!!_*A\"$*1\"!*A\"$*A\"$,!\"(+Q\".+1\"++!\"(*Q\"'*Q\"'*A\"$*1\"\"*1!`*!!_*A\"$*A\"$*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*A\"#*Q\"%)A!Z*A\"#*!!_*1\"!*Q\"%*Q\"%*1\"!+!\"(*!!_*1\"\")Q!]*A\"#)Q!\\*!!^*!!^*!!_)Q!]*!!^*1\"!*!!^)Q!\\)Q!\\*!!^*!!^*!!^)Q!])A!Z*!!^)1!X)A!Y)A!Z)1!W)1!X*!!^*!!^)Q!\\)Q!\\*1!`)Q!\\*1\"\")Q!]*1\"\"*A\"#*!!^*1\"\"*1\"!*1!`)Q!])Q!]*!!^*!!_*Q\"&*A\"\"*A\"\"*Q\"%*1\"\"*Q\"&*1!`*A\"#*A\"#*A\"$+!\"'*Q\"%*Q\"%*A\"#*A\"$*Q\"%*A\"#*A\"#*A\"#*Q\"&*Q\"'+1\")+Q\".+!\"(+1\"+*A\"$*A\"$*A\"$*A\"$*Q\"%*Q\"'+!\")+1\"++Q\".,!\"1+A\"-,1\"0+!\"(,!\"&+!\"$*A\"$*Q\"&*Q\"&+!\")+A\"-+A\",+Q\".+Q\"0,1\"3,!\"2+1\"+,!\"1+A\"+,!\".,A\"/+A\"++A\"-+Q\".+Q\"0+Q\".*Q\"'+1\")+1\"*+A\".+A\"-,!\"2,A\"3+Q\"-,1\"3,A\"1+A\"-,1\"3,1\"2,1\"0,!\"2,!\"2+Q\".,!\"1+A\".+A\"-,!\"1+A\"-+A\"-,!\"1+A\"-,!\"1+Q\"0,!\"0+Q\".+A\",+Q\"/+Q\"0+A\",,A\"0+A\"++A\"-+1\"+,!\"1,!\"1+A\"-,1\"4+1\"+,!\"1,!\"1,A\"1,!\"1,1\"4,1\"/,!\"1+A\",+Q\"/+A\"-*Q\"'*Q\"'*Q\"',1\"%,!\"1,!\"-,A\"*,!\"/,!\"1+Q\".+Q\".,!\"1+1\"*+1\"**Q\"'*A\"#*A\"$*Q\"%+1\"$+!\"(+1\"++A\"-+Q\".+A\"-+A\",+!\"(*A\"$*A\"$*A\"$*A\"$*Q\"%*Q\"%*Q\"%+1\"+*Q\"&+!\"(*Q\"%+!\"(*!!_*A\"$*A\"#*1!`*Q\"%*A\"\"*!!`*A\"\"*A\"#*A\"#*!!^*Q\"$*1\"!*A\"\"*A\"$*!!^*A\"$*1\"!*A\"\")Q!]*1\"!*!!^*!!_*!!^)Q!]*1!`)Q!\\)Q!\\)Q!]*!!`)1!X*!!^*!!^)A!Z*1\"!*A\"\"*!!^*1\"!)Q!]*1!`*Q\"%*!!^*A\"\"*!!^*1\"\"+!\"'*1\"\"*A\"#*1\"!*A\"$*A\"$*Q\"%*1!`*Q\"%*A\"#*A\"#*1\"\"*A\"$+A\"-+!\"(+!\"(*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%+1\"**Q\"%+A\"-+Q\"/,A\"/+Q\"++A\",*Q\"&*A\"$*A\"$*A\"$+!\")+Q\"/,1\"4+A\"-,!\"1,!\"1+A\".,!\"1,!\"&+1\"++A\",+!\"(+A\"-+A\",,1\"3,1\"4,1\"4-A\"1-A\"5-!\"5,1\"4+Q\"/+Q\"/+A\"-,1\"1,A\",+A\"-+A\"-+Q\"0+Q\"0,!\"1,1\"4.1\"5,A\"4,1\"4,1\"4.1\"5.1\"5-1\"5.Q\"6-Q\"5-A\"5-A\"5.1\"5,Q\"5-Q\"5,1\"4,1\"4.!\"0,1\"4,1\"4,Q\"3-1\"2,1\"4,1\"4,!\"1.!\"4,!\"2-1\".,1\"3-1\"1,Q\"4+Q\"0,!\"2,1\"3,!\"0,!\"1+A\"-,!\"2+A\",+A\",,!\"2+A\",,!\"1,!\"1,!\"1.!\"5.1\"5,A\"5.A\"6-Q\"5.1\"5-A\"1,A\"4,1\"4,!\"0+Q\".+1\"++Q\"$,!\"&+!\"(+A\"-+A\",,1\"4,1\"4,1\"4,1\"4,1\"4+Q\"/+Q\"/+!\")*Q\"&+!\"'+!\"(+!\"(+A\",+Q\".+Q\"0,!\"2+A\",+A\"-+1\"+*A\"$*A\"$*Q\"%*Q\"%*Q\"%+1\"*+A\",+A\",+A\"-+!\"'+!\"'*Q\"%+1\")*Q\"%*Q\"%*Q\"%+1\")*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*1\"!*A\"$*Q\"%*!!^+!\"'*1\"!*1!`*1!`+!\"'*A\"#*1\"!*1!`*Q\"$)Q!\\)Q!\\)Q!]*!!^*1!`*1\"!*1\"!*A\"$*1!`*A\"$*1\"!*A\"\"*!!`*A\"$*1!`*A\"$*Q\"%*A\"$*A\"$*A\"\"*A\"\"*Q\"'*A\"$*A\"$*A\"$*Q\"%*A\"$*Q\"%*Q\"%*A\"#*Q\"&*Q\"&+!\"(+1\"*+A\"-+!\"'*Q\"%*Q\"%*Q\"%*Q\"%+Q\"/+!\"(,1\"3+A\",,!\"2+A\"-+Q\".+1\"**Q\"&*Q\"&,!\"1,!\"2+Q\"/,A\"3-!\"5-A\"5-!\"4+A\"-+A\".+1\"*+A\",+A\",+Q\"/,!\"1-!\"1,1\"3.Q\"6.Q\"6.!\"6-!\"6,A\"5,1\"2+Q\"0+Q\"/,!\"1,!\"1,!\"2,1\"4,!\".-!\"4-A\"6-A\"8.Q\"8/1\"9-A\"8.Q\"7.Q\"7.A\"7.!\"7-1\"5.A\"6-1\"7-A\"8-Q\"6,A\"5-1\"5,Q\"5.!\"5-Q\"5,1\"4.1\"8-1\"5.Q\"6-Q\"9.Q\"6-1\"5/1\"8-A\"6.!\"6-A\"6.A\"7-Q\"7-1\"8.Q\"7/1\"9/A\"8-Q\"6-A\"6-!\"4-!\"4.!\"5-1\"6-!\"4,1\"4,1\"3,1\"4+Q\".,1\"4,1\"4,Q\"5,A\"4-A\"9-A\"8.1\"8-Q\"9-Q\"5.1\"7.Q\"8.A\"5,1\"3,A\"3+Q\".,1\"3,A\"&+1\"*-!\",,1\"3,1\"4.Q\"1/!\"8-1\"4-1\"5,1\"4,!\"0+Q\"/+!\"(+!\"(+A\",+1\")+A\"-+Q\".,1\"3+Q\"0,1\"3+1\"*+Q\"/+!\"(*Q\"%*Q\"&+!\"'+A\",+A\",+Q\"0+A\"++A\"-*Q\"%+!\"'*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"'+!\"'*Q\"%*Q\"%*Q\"%*Q\"%*A\"$*Q\"%*A\"$*Q\"%*Q\"%*1\"!*A\"#*A\"$*A\"#*!!`*A\"#*!!`*Q\"%*A\"$*1\"\"*Q\"%*!!`*A\"#*A\"#*1!`*A\"#*1\"!*A\"#*Q\"&*1\"!*A\"$*Q\"%*Q\"&*A\"$*Q\"%*Q\"%+!\"(*Q\"%*Q\"%*Q\"%*Q\"%*A\"$*Q\"%*Q\"%*Q\"%*Q\"%+Q\".+!\"'+Q\".+A\",+1\"++!\"'+!\"(+1\"++1\"*+Q\"/+Q\"/+Q\".,!\"1,A\"5,1\"3+A\",,1\"2+!\"(+1\"*+A\"-+Q\"-,1\"2,Q\"4/Q\"7-1\"5-1\"5,1\"4,1\"3+A\"-,!\"+,A\".+Q\"/,!\"0,A\"5.A\"6.A\":.!\"<.!\";.1\"8.Q\"7.!\"7,1\"4,!\"0,!\"0,!\"1,!\"1.A\"6.A\"/-1\"8.A\"<.Q\".!\";.Q\"?.Q\"?.Q\"?/!\"7/!\"7,Q\"6-A\"7.1\"9-Q\"5.!\"8-1\"8/A\":.Q\":-Q\"8/A\"8-1\"8.1\"8/1\"9.1\":.!\":.1\"9.A\":.Q\":.1\"8.A\"=.A\";.A\":/A\">.A\">-Q\":.Q\"?.1\"=.Q\"?/1\">/Q\"=/A\">.Q\"<.Q\"<0!\"=/1\">.1\"9.A\"6.A\"6-Q\"6/A\"6.!\"5-!\"5.A\"6-Q\"5-Q\"5.!\"5.A\"6.1\"8.A\"9/!\"=.Q\"?.!\"<.!\"<.A\"6.A\"6,A\"5,!\"1,!\"1+A\",+A\"-,1\"4-!\"7-!\"7.1\"8.A\"7.1\"6.A\"6,A\"5,1\"2+A\",+A\"-+A\",+!\"(,1\"4,Q\"5.1\"5,A\"5,!\"1,!\"1,!\"1+1\"*+A\",+!\"',A\"(,A\"(+Q\"/+Q\"/,1\"2+Q\"/+A\",+1\"**Q\"%*Q\"%+!\"(+!\"(+A\"-+A\",+!\")+A\"+*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"'*A\"#*Q\"'*1\"!*Q\"%*A\"$*Q\"%*Q\"%*A\"$*A\"#*1\"!*1\"!*A\"$*A\"$*A\"%*A\"$*A\"$*A\"$*Q\"&+1\")*A\"$+1\"**A\"$*Q\"%+!\"(*Q\"&+1\"++A\"-+!\"'+A\"-+A\"-+!\"'+Q\"/+1\"++A\"-+Q\"0+Q\"/,!\"1,!\"1+A\"-,!\"2+Q\".,1\".+Q\"*+Q\"0+A\"-,A\"5,A\"5.A\"6,A\"5+A\",,Q\"*+1\"*+Q\"/+Q\"0+Q\"/.A\"6.A\":.1\":.1\"8-Q\"6-A\"5,!\"2+A\",,!\"1,1\"4-Q\"5.!\"7.A\":/Q\"=.Q\"?.Q\"?.Q\";-Q\"7.!\"5,1\"4,1\"4,1\"4,Q\"5/1\"6.1\"9.A\":.Q\"?/A\"C.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.!\"9-1\"5.Q\"9.Q\":.!\"7.A\"=/A\":.1\"=/A\":/!\":.1\";.!\";.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/A\"C.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?-A\"9/A\":-A\"9-A\"9,Q\"6.!\"7,Q\"5,1\"4-1\"5-Q\"8.1\"8.Q\"?.Q\"?.Q\"?.Q\"?/Q\"=-A\"8-Q\"5,A\"5,1\"3+Q\"0,1\"4-Q\"5-A\"5.1\":.1\"=.A\":.A\":.1\"8-1\"5,1\"4+Q\"/-!\"0+A\",,1\"3.!\"5-A\"5-A\"5.A\"6-Q\"4+Q\"0+A\"-+Q\".,!\"0,!\"0+Q\"0,!\"1,!\"1-!\".,1\"3+A\"-+Q\"0+Q\"/+!\"'+Q\".+Q\"0+A\"-,!\"1,A\"(+A\",+1\")+Q\"/+!\")+!\"'+1\"*+!\"(*Q\"%+!\")+!\"(+!\"'*Q\"%*Q\"%*Q\"%*Q\"&+!\"(*Q\"%+!\"'+!\"(*A\"$*A\"$*A\"$*Q\"%*Q\"&+!\"'+1\"*+1\"++Q\".+1\"++Q\".+Q\".+A\"-,!\",,!\"(+Q\".+A\"-+A\"-+Q\".+A\",+A\",+1\")+Q\".,!\"2+Q\".,!\"1,!\"1+Q\".+A\"-+1\"),A\"3,!\"-,Q\"5-Q\"5.!\"6.Q\"6,A\"5,A\"5,!\"+,Q\"0,!\"1-!\"4.1\"6/Q\"9.1\"=.Q\"?/1\"9-Q\"8,A\"5,1\"4,1\"3,Q\"4.!\"5-A\"8/!\">.A\">.Q\"?.Q\"?.Q\"?/!\">,Q\"5,Q\"5.!\"5-Q\"6.!\"7.1\"=.A\"?/1\"@/A\"D/Q\"E0!\"G/1\"C/A\"D.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/!\"?.Q\"=/!\">/1\">/1\"@/!\"@/1\"B/1\"B/1\"C/Q\"F/A\"D/Q\"E/Q\"E/Q\"E01\"I01\"I0A\"K/Q\"F/1\"C/Q\"F/1\"B/1\"B/1\"B/Q\"F/1\"B/1\"A/!\"A/!\"@/1\"B/1\"B/!\"@.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/1\"B/Q\"E/1\"B/A\"D01\"I0A\"J01\"I/Q\"E/Q\"E/!\"A.Q\"@/1\"?/1\"8/!\"8-1\"7-A\"8.A\"9.1\"=.A\">.Q\"?.Q\"?/A\"D/1\"B/A\"@.1\"=/1\"9.1\"6-A\"5-!\"5,A\"4.Q\"7.!\":.Q\"?.Q\"?.Q\"?.A\"=.A\"7-!\"5,Q\"2,1\"3+A\"-,1\"4-1\"7/!\"8.Q\"<.1\"9.1\"6.A\"5,!\"1,!\"1,!\"1+1\"+,!\"2,A\"5,Q\"5,Q\"5,Q\"3+Q\"0,!\"1+!\")+A\"-+Q\"-,!\"0+Q\"/+A\",,!\"1+A\",+Q\".+!\"(,1\"+,1\".+!\")+A\",+1\")+A\",+!\"(+A\"*+A\",+!\"'+!\"(*Q\"%*Q\"%*Q\"%*Q\"%+1\"*+1\"++!\")+A\",+A\"-,Q\"++1\"++A\",,A\"(+A\"-+1\"*+1\"++A\"-+A\"-,!\"1+A\",+A\"-+A\"-+Q\"0+1\"*,!\"2,1\"3,A\"5,A\"5.1\"6,1\"5,1\"3,A\"+,!\".,!\"0,A\"5,Q\"5.1\"8.!\"6/!\"9-1\"5-!\"5,A\"5,A\"5,1\"4.1\"6/!\":.1\"=.Q\"?.Q\"?.1\"=-A\":.!\"5,Q\"5.1\"6-A\"5/Q\":.1\"=/Q\"F0!\"G/A\"D.Q\"?.Q\"?.1\"=.Q\"9/A\"6.1\"9-Q\";.!\".A\">.Q\"?.Q\"?/A\"D0!\"G0!\"G0A\"J1!\"N0Q\"M0Q\"M0Q\"M0Q\"M0Q\"M01\"I0Q\"M0Q\"M/Q\"F01\"I0Q\"M01\"J0Q\"M0Q\"M0Q\"M0Q\"M0Q\"M01\"J0Q\"M0Q\"L0A\"K01\"J0Q\"M0Q\"M0Q\"L0!\"G0!\"G0!\"G/A\"C/A\"D/A\"D/1\"B/1\"A/1\"C0!\"G/Q\"F0!\"G/Q\"F/Q\"F0Q\"M0Q\"M1!\"N0Q\"M0!\"G0!\"G/1\"B.Q\"?.1\"-Q\";-Q\":.Q\"?/!\"@/A\"C01\"J0A\"K0!\"G/Q\"F.1\"=/1\";-Q\";.Q\"8-!\"6.1\"8/Q\"<.Q\"?.Q\"?.Q\"?.Q\"?/A\"<-!\"7.1\"6,1\"4,1\"4.!\"5-1\"8.Q\"9/!\"@.1\"=-Q\";.Q\"8,!\"2,!\"2,!\"0,!\"0.1\"6-1\"5.1\"9/1\"6,Q\"5,A\"5-!\".+Q\"/,A\"-,!\".,!\"0,!\"2+A\"-,!\"0,!\"0+1\"+,!\"2+A\",+A\",+A\"-+A\",,!\"*+Q\"(+Q\"%,!\"+,A\"/+!\"'+A\",+!\")*Q\"&+1\"**Q\"'+A\",+A\",+A\",+A\",+A\"++A\"-+Q\"/+A\",+Q\".+A\",,1\"2,!\"1+Q\".,!\"1,!\"0,!\"1+A\"-+A\"-,1\"4,1\"/-1\"5/Q\"6-Q\"5,A\"5,A\"5,1\"4,A\"3,1\"4.A\"6.A\"9/1\">.Q\"?.A\">-Q\"9-Q\"5-1\"5-1\"5-Q\"6.A\"9/!\"?/!\"A/Q\"F.Q\"?.Q\"?.!\"7.!\"7.1\"8.Q\":.1\"/Q\"F0A\"K1!\"N0Q\"M0A\"K/1\"A.Q\"?.Q\"?.Q\"?/!\"@/Q\"F01\"J1!\"N2A\"X2!\"V1!\"O11\"P0!\"H01\"I0!\"G/1\"B/Q\"F01\"J0A\"L1!\"N1Q\"S2Q\"U3Q\"T2!\"V3A\"R31\"X2A\"T1Q\"T11\"P1!\"N0Q\"M0Q\"M0!\"H0Q\"L0Q\"L1!\"L1!\"K0A\"I/1\"8.1\"-/A\"811\">11\">11\"=11\">11\">11\">11\">11\">1A\"=1A\"A11\"A1A\"B0Q\"A0A\"E1A\"I1A\"P11\"P2!\"T2A\"Y3A\"U2A\"Z2Q\"Z3!\"U2Q\"Y2!\"V1A\"R0Q\"M0Q\"L0Q\"L01\"I0A\"J0Q\"L11\"Q1A\"R21\"W2Q\"U2A\"W1A\"R1!\"M0A\"J/Q\"F/!\"@/!\"@.Q\"?/1\"C0!\"G0Q\"M1A\"R1!\"O1!\"N01\"J/1\"C.A\">/!\">.Q\"<.Q\"?/!\"@0!\"H0A\"J0Q\"M01\"I/1\"C/1\">.!\":.Q\"6-A\"9-Q\":/!\"@/!\"@/!\"@.A\">/!\"?0!\":-Q\"6-Q\"5.Q\"7-Q\"6-!\"7.1\"=.Q\";.!\"<-!\"7,1\"2,A\"4,A\"5.Q\"6,Q\"5/!\"6-!\"5,A\"5,1\"3,1\"3,Q\"2,!\"1,!\"1,!\"1+A\"++Q\"0+Q\".,!\"1+A\",+A\"-+Q\"0+A\"%+A\"-+A\"-+Q\".,!\"1,!\"1,!\"1+Q\"/,1\"4-A\"5,Q\"5.!\"5,1\"4-Q\"0,A\"5.1\"/,A\"5.!\"5.1\"6-A\"5.1\"6-!\"8/1\";.Q\"=.A\"8.Q\"9,A\"5-A\"5.1\"9/Q\"=.A\">.1\"=/!\"@/!\"@/!\"@-!\"7.Q\"8/1\";.A\">/!\"@0!\"G0Q\"M01\"J01\"I/1\"C.Q\"?.Q\"?.Q\"?/!\"@/Q\"F1A\"R11\"P1Q\"T1!\"O0A\"J/1\"B/1\"B.Q\"?/!\"@/Q\"F1A\"R21\"P2A\"Z3A\"V3Q\"U1Q\"S0Q\"M01\"J01\"J0A\"J0!\"H0Q\"M2!\"Q2!\"R21\"W4!\"Z4!\"Z2Q\"Z2A\"Z2A\"Z2A\"Y1Q\"U1!\"N0Q\"M0Q\"M1!\"K0A\"F11\"D1!\"B/!\"4/!\"0/Q\"*/Q!`.1!^-1!X-A!Z/!\"!/Q\"+/A\",/1\")/A\"*/Q\"+/1\"*/1\"*01\"*0A\").Q\".1Q\")0Q\".1Q\"/1Q\"11Q\"11Q\"20Q\":1!\":1!\">11\"D11\"H2A\"O1Q\"U3A\"U3!\"Y2A\"Z2A\"Z2A\"Z2!\"S2!\"Q11\"Q1Q\"M01\"J1A\"R1A\"R2A\"U3Q\"U2A\"Z3!\"Y3!\"X1Q\"S1A\"S01\"J/Q\"F0!\"G/A\"C/Q\"F0Q\"M1Q\"T3!\"U2Q\"V2!\"R1!\"O/Q\"E.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F0A\"K0Q\"M0Q\"M/Q\"F/!\"@.Q\"?.Q\":/1\"8/!\"@/!\"@/A\"D0A\"K/1\"B/1\"C.A\">-A\"9.!\"5-A\"9/1\";/!\"@/!\"@/!\"@/!\"?.A\"8/!\"6-1\"5-A\"5-A\"5.1\"8/!\"60!\"9.!\"5.!\"5,A\"5,A\"5.!\"5,A\"5.1\"6,A\"5,1\"2,!\"1,!\"1,!\"1+A\"-,!\"2+A\",,1\"3,1\"3,1\"3,1\"4,1\"4-!\"3.A\"/-A\"5,Q\"5-1\"6-!\"5.!\"7-Q\"8-!\"7.!\"9-1\"6.!\"6.!\"9-1\"9-A\":/1\"?.Q\"?.1\":.!\"9/A\":/1\"/!\"A/A\"E/A\"D/Q\"E/!\"@/!\"@/Q\";.A\">/1\"@01\"I0A\"K0Q\"M0Q\"M01\"I/1\"C/!\"A.Q\"?/1\"A/Q\"F1!\"N2A\"W21\"S21\"W1!\"O0Q\"L/Q\"F/A\"C/1\"B0Q\"L11\"O2A\"W3Q\"W2Q\"Y2A\"Z3!\"Y2!\"S1A\"S0Q\"M0Q\"L0Q\"L1Q\"R2!\"R31\"X31\"\\41#!3Q\"`41#\"3A\"^3!\"Y3A\"V1Q\"T1!\"O1!\"K0Q\"J11\"G0A\"<0Q\"60A\"+.A\"\".!!^-1!\\-A!Z-1!X+Q!X-1!X-1!X-A!Z.A\"!.1!].Q!_.1!`.A!^.A!].Q\"!.Q\"!.Q\"!.Q\"!.Q\"\".Q\"\".A\"\"/!\"#/!\"$/!\"&1!\"&1!\"(11\"(1Q\".1Q\"01Q\"41A\"71Q\"91!\"B1A\"J3!\"P31\"S31\"[4!#!3A\"^3!\"\\2Q\"Y1Q\"T11\"P1!\"O1Q\"S2!\"V3Q\"\\4!\"^3A\"_4!#!4!\"X31\"V2!\"S0A\"K0!\"G01\"H0!\"H0Q\"M2!\"S3!\"Y3!\"Y3A\"V1Q\"S1!\"O/1\"B/1\"B/!\"A/Q\"F01\"I11\"Q1A\"R1Q\"R1!\"M/Q\"F/1\"A/1\"?/!\"@/!\"@/!\"@0A\"K0A\"J0!\"H/1\"B/!\"A/!\">/A\";.!\";.1\"=/!\"@/!\"@/!\"@.Q\"?.1\".A\">/!\"@/!\"@.Q\";.1\"<.!\";/!\"@/!\"A0!\"G0Q\"L01\"J.Q\"?/!\"@/!\"@/!\"@/!\"@01\"J1!\"N1A\"Q1!\"N01\"H/A\"E.Q\"?.Q\"?/1\"B0A\"K1Q\"N3A\"T3!\"X31\"W1A\"R0A\"J/Q\"F0A\"K0Q\"M1A\"R2Q\"U4!\"]4A\"_4A#$3!\"]3A\"V3!\"V0Q\"M0Q\"M0Q\"M2!\"U21\"V4A\"_41#(4Q#(4Q#*4Q#%3A\"_2Q\"[3A\"V2Q\"U1A\"R0Q\"M1!\"C1!\"=01\"5/Q\"*.A\"!-Q!\\-1!X-1!X-1!X-1!X-1!X-1!X-1!X-1!X-1!U-1!X-1!X-A![/A!\\0!\"\"1A\"'0Q\"'2Q\"+3!\"+3A\",3A\"-3A\"-21\".21\"-2A\"%0A\"$01\"$/A\"$/A\"$/!\"#/Q\"$/Q\"$0A\"$1A\"%1Q\")1Q\"-1Q\"-1A\"91A\"?21\"A21\"Q3!\"V4A\"[3Q\"`4!#!2Q\"[21\"W2A\"S2A\"T3A\"V31\"W3A\"_4Q#%4Q#%4A##4!#!4!\"Y2!\"U11\"Q0A\"K0Q\"M0Q\"M3!\"Y2Q\"Y3Q\"[3!\"[21\"W1A\"R0Q\"M0!\"G/!\"@/A\"C0Q\"M1A\"R2Q\"V2A\"Y11\"P0A\"K/1\"B/!\"@/!\"@/!\"@/A\"E01\"H1!\"N01\"J/Q\"E/!\"@/!\"@/!\"@-Q\";.1\"=/!\"@/!\"A/A\"D.1\"=.1\"=.Q\";-A\"7.Q\";/A\"9.!\";/Q\"=.!\"<-Q\";.1\"7,Q\"6.Q\"9.!\"6.Q\"9.A\"9-A\"5-A\"5-1\"5,A\"5,A\"5,A\"5-Q\"5-1\"5-A\"5.!\"8.Q\"6-Q\":/!\"8/1\";.1\":.1\"=.!\";.1\"<.!\"<.A\"=.1\"=/!\"?/!\"@/!\"@/!\"@.Q\"?/!\"@/!\"@.Q\"?.Q\"?.Q\"?0!\"H0Q\"M0Q\"M/Q\"F0!\"G.Q\"?/!\"@/1\"B0!\"G0Q\"M1Q\"Q2A\"V21\"R1A\"Q0A\"J0!\"H0!\"G0Q\"M1A\"S3A\"V3A\"^31\"]3!\"Y3A\"U11\"Q0A\"J0Q\"M11\"P3!\"W4!\"X4Q#%4Q#%4Q#%3Q\"`2Q\"[2Q\"U11\"Q2!\"V3!\"X41\"Z41#%5A#*5Q#06A#-6!#)4Q#&3A\"^3Q\"\\31\"U21\"Q1!\"K01\"?01\"4.!\"+.!!`-A!Y-A!Y-1!X-1!X-1!X-1!W,A!W-1!W-A!U/!!`11\"&2!\"+41\"17Q\"79Q\"?:1\"A;Q\"H;A\"B9A\">:A\"?:!\"781\";:A\"<:Q\"?:Q\"?;Q\"C0!\"<-Q\":/1\"9-!\"7-A\"7.1\":.A\"6.!\":01\"8.1\"8.1\"8.A\"9.A\":-1\"5-Q\"9.1\"9/!\"8.!\"<-Q\";.1\"=.Q\"?/A\">/!\"<.Q\"?.A\">.1\"=/!\"@/!\"A/A\"E/1\"A.Q\"?/!\"@/!\"@/!\"@/!\"A/Q\"F1!\"N1!\"N1!\"N0Q\"L0A\"K/!\"@/Q\"F0!\"G1!\"N2!\"S2Q\"Y3Q\"U2!\"R11\"P0A\"J0Q\"M0Q\"L21\"V3Q\"W3Q\"`4Q#%3A\"_3!\"X1A\"Q1!\"N11\"O2A\"V31\"W4Q##5!#+51#-51#'41#\"3!\"Z3A\"V31\"X3A\"T41\"\\5!#$5Q#-6!#061#06A#05!#)4Q#&4!\"Z4!\"T2!\"R1A\"F11\">.!\"7.1\"&-Q\"!-A![-1!X-1!X-1!X-1!X,A!V*Q!W.1!V.Q\"!3A\"+7A\";:1\"A=1\"?:Q\";9!\"68Q\"67Q\"-5A\")5A\"%4Q\")51\"&51\"(5Q\"(51\"+5Q\"25A\"16!\"*5!\"+4Q\"*4!\"(51\"+5A\".81\"08Q\"6;Q\"A>1\"F>1\"O;A\"L9Q\"E61\";2A\",0Q\")1!\"&0!\"'.Q\")01\"*0A\".1A\"70Q\":11\"@2!\"L31\"X3Q\"_4A##4A#!41\"^2Q\"[3A\"V4Q\"`4Q#%5Q#*6A#.61#-5Q#*4Q#\"3!\"Y3!\"V1A\"Q3!\"V31\"W4A#\"4Q#%4Q#%4A##41\"\\21\"U1!\"O1!\"N0!\"G0Q\"M3A\"U2Q\"Z3Q\"`3!\"X1Q\"R0Q\"L0!\"G01\"I0A\"K1!\"N11\"Q2Q\"Q1Q\"T0Q\"M/Q\"E/!\"A/!\"@/!\"A01\"I0A\"L01\"I0!\"H/Q\"F.Q\"?.A\">/!\"@/!\"@/!\"@.A\">/!\"@/!\"@/!\"@.A\">-Q\";/A\".A\">.Q\"?.Q\"?.Q\"?.Q\"?/!\"@.1\"=.Q\"?/!\"@/1\"B0!\"G01\"J0A\"K/1\"B/!\"@/!\"@/1\"C0Q\"L1A\"Q0Q\"M1A\"R1!\"N0!\"G0A\"K01\"I1!\"N1Q\"T3A\"U3Q\"U2A\"[31\"W1Q\"T1!\"N01\"I11\"P31\"V41\"]4Q#&4Q#'41#\"3A\"\\3Q\"U1A\"R2!\"V41\"W41\"`51#.6A#06Q#)5A#,4Q#$4Q\"[3Q\"W2A\"Z4A\"\\4Q#(51#+5A#+4Q#+5Q#05Q#04Q#+41##4!\"[2Q\"R01\"G01\"<.A\"5.1\")-Q!\\-1!X-1!X-1!X-1!X-1!W,!!U,1!R/A!V3Q\"/:!\"7.A\">-A\":.1\"=.A\"=.Q\"?.Q\"?.Q\"?.A\">.A\">.Q\"?.Q\"?.Q\"?.Q\"?/Q\"E.Q\"?/!\"@/!\"@/A\"D0A\"J0Q\"L0Q\"L1!\"N0!\"G0A\"K/1\"B01\"I0Q\"M11\"P1A\"R1Q\"U1A\"S1!\"N0A\"K0A\"J1!\"O1Q\"Q31\"W4!\"`3A\"_2Q\"Z2A\"V1!\"N1!\"N2!\"V3A\"U4A#!5!#(5!#(4Q#&41\"^3A\"W3A\"V31\"W3Q\"[5!#)61#/6A#06Q#061#/5!#&3Q\"`3A\"\\3A\"_4A#'5Q#.51#-5!#&4Q#&51#,6!#05!#)41\"`3A\"U11\"N1!\"C/Q\"7/1\"%-Q!`-Q![-A![-A![-Q!\\,Q!X+Q!U,A!W0!!`8!\"71!\"K21\"W4!\"]4Q#&4Q#)4Q#%4Q#&4Q#'6!#/5Q#05!#.5A#*6!#/51#+3A\"_3!\"Z2Q\"Z4!\"^4Q#&5A#*6A#061#/5A#&3A\"[2Q\"W1A\"O21\"S3A\"V41##5!#&4Q#%4Q\"`31\"X1A\"N1!\"N1!\"N11\"P3!\"R3!\"Y2Q\"Z1Q\"U1Q\"T01\"I01\"I01\"I0Q\"M1!\"N1!\"N1!\"O01\"I0A\"L/A\"C/!\"@/Q\"E/1\"B/Q\"E01\"I/1\"C/!\"@/!\"@/!\"@/!\"@.Q\"?.Q\"?-Q\";.Q\"?-Q\";.!\";.1\"=.1\"=.!\"<.1\"=.1\"=.Q\"?.Q\"?.Q\"?/1\"B/1\"C.Q\"?/Q\"F0!\"H0A\"L0A\"L1!\"N1!\"N01\"I0A\"K0A\"L0A\"L0Q\"L1A\"R21\"S4!\"T2A\"Y11\"P1!\"N1!\"N1!\"N2Q\"U31\"Z4!#!4!#!3Q\"`3!\"Y21\"U1A\"R31\"Q4!\"\\41##4Q#$51#&5!#)4Q#%2A\"Z31\"W31\"W4!#\"5Q#*6!#.5A#*5Q#-6A#/51#'41##4A#$4Q#%6!#-51#,51#(4Q#%4Q#%4Q#-6!#051#.4!#!3Q\"S1A\"L0Q\";.1\"1.Q\"$,Q![-1!X-A![-1!Y-!!R+!!H,1!R1A\"#7A\"99Q\"8:!\"+7Q\"+3Q\"%51\"-51\"22Q\"0/Q\"#-Q!X+!!U-Q![2!\"%7A\"8BQ\"7CQ\"2AA\"1BQ\"1B1\"2B1\"2D!\"6BQ\"9B!\";A1\"A@Q\"H;A\"C6A\"92!\"'.!!Z-1!V-A!T/A!^1Q\"$3A\"&1!\"%11\"%41\"/;Q\"DBQ\"]C1#!=!\"S41\"811\"(.1\"\".1\"$0!\"'/Q\"21!\"70A\";1!\"C1Q\"N2Q\"Z4A#$4Q#%4Q#%4Q#%51#*6!#05A#)4Q#%4!#$5!#(6!#-4A##4!#!3Q\"Z4!#!5A#)6Q#05Q#061#+51#+4!\"`3Q\"U2Q\"Z4!\"T3A\"_5!#&5!#&5!#*41##3A\"S21\"S1!\"N1A\"S31\"T2Q\"Z3A\"_2Q\"[21\"W1A\"R1!\"N0A\"J1!\"N11\"P11\"Q1Q\"T1Q\"T1!\"N0Q\"L0!\"H/Q\"E01\"I0!\"H0!\"G0!\"H/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@.Q\"?.Q\"?/1\"B/1\"A/1\"A/A\"E0!\"G0!\"H0A\"K/Q\"E0A\"J/Q\"F01\"I1!\"N1!\"O11\"Q1!\"N1!\"N0A\"K0A\"J1!\"O1Q\"S3Q\"U2Q\"Z2Q\"[31\"T1A\"S11\"P11\"P2A\"Y4A\"[4A#$3!\"[41#\"31\"]4!\"T2A\"R3!\"X3Q#!4!#!,AR6)QB!3Q\"_4Q#%3Q\"`3A\"_3Q\"`4Q#(5!#+1Q\"P1!\"O4A#$61#05A#.4Q#%4Q#%51#)5A#.5!#+4Q#,5A#)51#)4Q#(5Q#051#.4Q\"]3A\"Q11\"E/1\"6.!\"'.1\"\".!!_.1\"\"/1\"#-Q!\\+!!Q+!!O0Q\"(71\"5;1\"2:Q\".6A\"*61\"-6Q\"55!\"31Q\"(-Q!W.1!X2Q\"'7Q\"0?Q\"FC1\"@B1\"*@!!W<1!L6Q!?4Q!;21!91!!;/Q!5.Q!:-1!7.Q!8.Q!:.Q!:1!!>4!!<61!>81!D=A!M@1!VCQ\"-BA\"7?!\"?9A\":2Q\"*-A!^+1!W.Q!\\2Q\"$21\"'11!_2A\"'9Q\"?C1\"[DQ#&Q\">B!\"7?Q\"!;A!I5!!?0A!7.!!6*Q!7*1!6(1!8)1!9'!!6&A!8'1!5&Q!6&Q!;(1!9(1!=)!!=(!!<*!!:*1!9,!!=/1!<2Q!;6Q!<&A!='A!9'A!9'Q!=+A!<,1!90!!<5!!;01\"H1Q\"T41#$5A#/5Q#05Q#04Q#-3Q#-/1#3.1#3/1#241#,6!#/51#(6!#&61#.5Q#-.Q#+.A#*/1#\"3Q#.51#(41#\"3A\"_5!#&61#'5A#/6Q#16!#,41##3Q\"]3!\"Y3!\"]4A\"]41##4A#$4A#$31\"^3A\"V2Q\"U1Q\"T1Q\"T31\"W31\"W31\"X3!\"Y2A\"U1!\"N1!\"N11\"Q11\"P11\"P1!\"N1!\"N1!\"N01\"I01\"I0A\"K0A\"K0!\"G01\"I01\"H01\"I/Q\"F1!\"N0Q\"M1!\"N1!\"N1!\"N1!\"N1!\"N1!\"N11\"P1Q\"T2A\"V3Q\"U3!\"X21\"X1Q\"S1Q\"T2Q\"W3!\"W3A\"]4Q#$3Q\"`3Q\"^3A\"_3A\"V2Q\"Z4!\"`4A##.A\"?$2!;#A!=/!\"=4Q#$3Q\"`5!#$0!2J$!!;!!Q)!!Q'#A!821\"U61#(5!#)61#--QR:#R!6#\"!<(A\"\"1Q\"X4Q#'5Q#061#05Q#,4Q#)5A#,5Q#061#061#04Q#*4Q#'5!#.61#-4Q\"\\21\"H0A\"2.A\"&/Q\"%/A\"$0Q\"%0A\"#,!!S*Q!L2!\"(61\")81\"&7!\".6A\"+8A\"?3A\"-,1!Q0!!]:1\";CQ\"AC!\"!81!G/1!:*1!3(Q!3&Q!8&!!2&A!:)1!E/A!Y4A\"+;Q\"6@1\"9F1B6HA21J1R)KQR%L1\"%M!B%MA2%LQB%JQB3F!29AQ\";>!\"87!\"50A\"#+!!M'Q!C'1!>(Q!;)Q!?,Q!=2!!;91!=A1!SF!\"C/1\"\"+Q!Y1!\"%5A\"011\"'0A!`:Q\"=G1#!?A\"Y41\"0.Q\"\".A\"!0!\"%01\"2.Q\"50!\":/Q\">/Q\"D1A\"R4!#!5A#*5A#051#/4Q#*2A#1/A#3/A#3/1#22Q#26A#,5Q#/5Q#06!#00!#&.A#-.Q#%.A##2Q#)5!#'4Q#%5!#&5A#+51#+5A#/6Q#06!#,5!#&3Q\"`3A\"W3Q\"_41#\"5!#&5!#'4Q#%3Q\"^2Q\"Z2A\"S2Q\"R3A\"V3!\"Y31\"[3!\"X3A\"V2!\"V11\"Q11\"P1!\"N1A\"S11\"Q1A\"R1!\"N1!\"N1!\"N0A\"J0A\"K0A\"K0Q\"L0!\"H1!\"N0!\"H1!\"N1!\"N1!\"N1!\"N1!\"O1A\"R1!\"N1!\"N21\"Q2A\"S3A\"S3!\"Y3Q\"U2Q\"P2!\"R3!\"U3A\"V3A\"_4A##5!#&4A#$3Q\"`2Q\"[31\"]31\"^4Q#%0!\"H%!QA!!!(\"2A-/1\"D4A#$4A#$0!\"L#1!@!\"A&!\"1'!!!(&AQK4Q#%5A#+6!#/-QR4!2!*%1Q?'1!Z-!\"64A#$5A#,61#05A#-5!#,5Q#/6!#05!#,5A#05A#/4Q#'4Q#'5Q#-4Q\"^2!\"J1!\"9.Q\"+01\"$0!\"$1A\"&1Q\",-1!T+Q!P4A\"08Q\",91\"$4A\"&4Q\"*8!\"801\"#,Q!T4A\"0B1\"LFQ\"0<1!L0Q!9*A!6'Q!3&1!3%Q!2&A!=.!!U81\":B!\"@HA23J1ARMQA?M\"A/HRQ&HC1!G#!!E31!ESA!G31!H#A!I3Q!J3Q!K3!)O3!4Q\"!CO!AOL12,DQ\"C;A\"@11\"\"(1!I)1!='A!>)Q!D-Q!?11!6=!!4Q\"0I1\"FNA!PG\"Q$BSA!A#A!:B!#1!!4.Q!E-1!M.1!I0!!@4115;\"!-?R!,BSA.E#A.D3A2BS!1B\"A6.!#.01#021#+/!#).A#\",!\"5,1\"4-!\"7.!\"L.!#\"0Q#\"/1#&.1#\"-Q\"C(1!S)1!Z/!\"<5Q#*5Q#+5!#)5!#)51#*+Q\"/+A\",/A\"E4A##4!#\"4A\"]3!\"]41#\"3A\"V1Q\"S1Q\"O3!\"Z31\"^31\"W2Q\"[2Q\"[2Q\"[31\"X3Q\"U3!\"Y21\"R2!\"R1Q\"T11\"Q11\"P1A\"R2!\"T21\"T21\"R31\"T1Q\"S1A\"R21\"X21\"V1A\"Q0!\"G01\"J0Q\"K2Q\"V31\"]3A\"^3Q\"`0A\"I+!\"(*Q\"%*Q\"%0!\"G5!#&5!#&5!#&11\"O'!!O$A!K&Q!P(Q!W!\"A&!!!(!!!)!B1)%AQD'1!P&Q!N'Q!Q\"\"1+!!A'!2Q(!1A*$1Q@&A!L'A!Q'1!](1\"&21\"Z5!#'6!#-6!#06!#/2A\"W.A\"<.1\":/Q\"G3A\"^41\"_3Q\"S3Q\"Z5!\"Y21\"F1Q\"/2A\",3!\")1A\"%5A\"8-!!U'Q!A01!`7Q\"&61\"%2A\"#8A\">4!\".(Q!G41\",I1\"WCA!Y2Q!9)Q!1&A!0%A!0(1!H9!\"5PQ\"8L!Q4E3A\"E#Q!?C!%2Q!5.A!G.!!J1A!>8BQ*E#1%ME1\"Q6A!P6Q!M6!!MF!!N&1!PF1!R'1!SW1!VW1!TFA\"R51$HSA'>RA>4!!Q0!!T+!!E)1!>*QA/5R!$D#Q!T$1$TAQWG1\"O/A!]'Q!<)1!E+A!L.!!A91!EGQ\"*BA\"P/1!_+1!P41\"411\"\"/1!Z?A\"OM1#961\"=,!!V-A!W.A\"$1!\"3.1\"=-Q\";.A\"=-A\"9/1\"80A\"N5A#.51#03Q#1/1#3.1\">+!\")+Q\"/,Q\"B.1#,.A#1.A#1.Q#*,A\":,1\"4*Q\"%,1\"1-Q\"Q-!#!-!#!-Q#!.A\"I'!AI$A1;(1!T1!\"M5Q#,61#)6Q#'41#%,A\"(+1\"*+1\"+0A\"J4Q#\"41##4A##4A##21\"U1!\"N1!\"M11\"P3!\"]3!\"Z3Q\"]3Q\"U3Q\"]31\"W3!\"X31\"X2Q\"X2Q\"Y2!\"R2!\"U2!\"U2A\"S2Q\"U2A\"T21\"S01\"J0Q\"M1!\"O1!\"O0A\"K/Q\"E0A\"L0!\"H/Q\"F2Q\"U3!\"\\4!#!0!\"H+1\")*Q\"%+1\"+*Q\"%.Q\"@5!#&5A#$5A#!(!QY\"Q!4#!1@'A!S'A!S!!A'!!A)!\"A'%!!B'1!O%!!J&1!M'A!Q\"\"Q*!\"A&!!!(!RA+'!!P'A!S'A!S&!!`)!\"#51#+51#.6!#061#031#!/Q\"@-Q\"8.Q\"\"Q&1QQ8-A!M.A1@6RQ,FTQ\"R'!!OV1!H%1!>T!!8C1!2\"A$/!1%/11%0B1&32A#8B1\">TA!I5Q!R'Q!W81!WG1!LD1(>QA<51!U,A!P*!!?*1!5/1!&A4!!T4Q%WRQSE1\"W/A!]&1!8)A!I-1!N/Q!;=1!LJQ\"@:Q\"D+A!T11\"#6A\":.!!W41\"/HQ\"]C1#(/Q\"#+Q!R-A!]0!\"1/Q\":-Q\";/1\";.Q\"+A!8+Q!4-QQ)21Q(?$1\"MF!!YHA!ZG!!L3!,:QQS0!![*!!D)1!9-!Q*@3!!U$Q!XQ!]EA\"R,!!N'Q!>+A!N-A!J1!!BE1!VGA\"P31\")*!!M5A\"721\"+.A!W.A\"8.A\"9.!\"9.Q\"8.1\"7/1\";/1\"C31\"O21\"F21\"761\"96!\"5/1\"#9!\"B+A!S)!!B6A\"0:1!^3Q!`51\"':Q\"I,Q!S+1!OBQ\"OJQ\"34Q!D*Q!1'1!0$Q!0(1!AAA\"GUA!`E!Q$DTA!F$!!1Q!7*Q!B-A!BC$1\"VWA!Q'!!:C1!.1A#*!!0*1!2-1!>-Q!81A!421A14AQ*52A'42!+2!14/!Q:-!!A*Q!=,1A23\"1(F5Q!UGQ![(A!OD1)>!!I01![*1!B)Q!60QA&ED!!Z31%TQR191\"A)!!>(A!<-1!R.1!C9A!JJ1\"6>!\"J)1!O.A!`5Q\"4.1!T41\"+L!#'C!#!,1!R*A!Q-A!]1A\"6/1\">/!\">.!\":.1\"9/!\"7.1\";/!\"D31#+1!#2.1#++A\"60A\"O3!\"_+Q\"+,1\"1.1\"U.A#,-Q\"@,!\"2)!!X01\"K*!!_+A\",-A\">-1\"_.Q\"I'1!U%11<+Q\"*(!!O(Q!T-Q\"32Q\"Q/Q\"H+!\"(-!\",-1\"6,1\"1+A\",/Q\"F2A\"V31\"V11\"P1!\"O1Q\"T1Q\"T0A\"K0A\"K3!\"R31\"Z4!\"W3!\"Z31\"]31\"\\3!\"[3Q\"]31\"W3A\"V3A\"V/Q\"E/1\"B0!\"G/Q\"F/1\"C/Q\"E0A\"K0!\"G0!\"I-!\"5,1\"-+!\"#+!\"!,1\"&+Q\"&+!\"'+!\"'-1\"90Q\"E+!\"$*!!^+!\"&+Q\"#&A!K#114*12$3!\"`,A\"1&Q!P'A!T%1A>&QAK%!!K+!\"&4!#$1Q\"S'Q!V'Q!Q\"Q1<$1!F'Q!Q,Q\"64Q#.6!#01!\"O,!\"20!\"L5Q#06Q#061#02Q\"V/Q\"B-!\"7/!\";.1\"7-A\":/A\";.Q\"9.A\">31\"O21\"F3Q\"78Q\"B4A\"3.1!`6A\"=)Q!G+Q!O7!\"/8!!\\1!!Y7!\"07Q\"?)1!G.Q!XI1\"RE1!_/Q!9)A!1&1!0\"QA-.!!SNQ\"MOAQ7B2Q!J51!=R1%,A!C,1!D7B1,UH1!WXA!=$1!-!Q$+!!)*A!9,1!>1!10821&BT1!LVQ!PWA!Q7A!PG1!L6A!C$!!82!&0!!4-!!B+Q!90AQ'ETA!Y8A!ZX1!P$!);!\"$-Q!U(A!B*Q1052Q$Q51![\"A?K1\"W,Q!W&A!7+Q!S-A!H2A!AFQ\"$FQ\"Q-A!Y-A!V6Q\"@.1\"!/!!_F!\"\\IA#/11\"))Q!C,!!R11\"40!\"C/A\">-A\"6-1\"5-1\"5/!\"6-!\"7.Q\"T0!#3/Q#0-Q\"G1A\"R6!#02Q\"]*!!\\-1\"9.1\"[,1\"9,!\"2+1\".4Q#.2A\"X)!!X,!\"1-Q\"F-Q\";(Q!Z%AAF3!\"U0Q\"L(!!S+!\"'-1\"7-A\"0,!\"*,A\",2A\"S3!\"U-!\".-A\";0Q\"L11\"P1A\"S11\"P2Q\"U21\"U1Q\"T11\"P11\"Q2Q\"U21\"Y2A\"T3!\"W3!\"X3A\"\\3!\"Z31\"^2Q\"[2Q\"[/1\"C0!\"H01\"I0!\"G0!\"H01\"J0!\"H0A\"K.Q\"@/Q\"A0A\"F,1\"1*A\"$*Q\"$*Q\"%*Q\"%-!\"33Q#\"5A#..A\"<(1!Q*A!]'A!O\"115%11J5Q#*6!#/0A\"I&Q!R'1!P'Q!Q&A!L'Q!R2A\"X5!#&3A\"^(A!W'!!O'1!P&A!M*1\"!31#\"51#051#02!\"X-Q\";1A\"U5Q#06Q#05A#04!##/!\"A/!\"6.1\"<0!\"<.A\"9-Q\":.1\"9.!\":3A\"L1Q\"84Q\"9:A\"M4!\".0Q\"!41\"7'Q!?*Q!P5!\"#6!\"!0!![:1\"85Q\"9)1!B2A\",KQ\"MAA!O,A!5(Q!1$Q!/&1!851\".U1\";IAA*A#1!K5Q!4Q1/+A!@/A1=F$!![91!N'A!2\"Q#+1!&*Q!0,A!@1AQ1;#!!L7!!W(!!O71!GV!!F%A!N'Q!VYA!XYQ!QG1!ADA!2!Q0+1!?)Q!:3!A)M&!![)Q!Z'Q!G!A<6!\"')Q!G)A!:+Q!)H51!\\$A)UQ\"D7A\"6&Q!;+1!J/1!P-Q!D>Q!ZJQ\"H3!\"*)1!K5Q\"84A\")-1!P@!\"FLQ#/5A\"7(Q!G+Q!T/Q\"+1!\"B.Q\"?/Q\"9-Q\"7.A\"6,Q\"5.Q\"<-Q\"@.1#$.A#3.A\"L2!\"T6!#06!#00!\"F+Q\"/,A\"5,!\"1,!\"1-A\"86Q#(5A#-.Q\"A)!!\\+1\"+,A\"5)1!`)!!Z3Q\"`4Q#%/1\"E(A!X,A\"(,1\"*+A\",,Q\"36!#,5Q#02A\"[+A\",/1\"C1A\"R1A\"Q1!\"N4!#\"4Q#%2Q\"V1!\"N0!\"H1!\"N01\"H01\"I11\"P31\"X3A\"\\3Q\"]31\"W3Q\"]31\"X0A\"K0Q\"K2A\"O1Q\"P0Q\"M0!\"H0Q\"L0Q\"M2Q\"P4!\"]4!\"^1Q\"L+A\"+*Q\"%*Q\"%,1\"22A\"W6!#.6Q#12A\"Y&!!F&Q!N%Q!?#Q!;01\"E7!#15A#/2Q\"Y$QAP'Q!Q&Q!M&A!K-A\"64Q#%5!#&4Q#$*!\"\"'1!O'!!O'Q!Q.1\"@51#/6!#/5A#03A##1A\"S3Q\"_6A#06Q#06A#05A#+/1\"B.!\"8/1\"8.A\"=-Q\"7/1\"9-A\"5.Q\"=3A\"L2!\"961\"<+1!O8!\"*8Q!_0A!\\;!\"@5Q\"9'A!B3Q\"-MA\"M?Q!R,1!5(Q!0$Q!0$A177!\"2VQ\"3I11%A31!KE!!3AA4*A!A01A=KEQ!ZYQ!IV1!1AA\"-!!'*A!3,A!?1A1'?$!!RXQ!OW1!6\"A\"-Q!%,A1,1\"A%@$!!W)A!Z)!!Q'!!?#!\"/1!2)Q!=,1A2@TA!Y81![I!!Q#!/;A\")+!!N)!!<*!!/ACA!Z%!#ZQR&>A\"H(1!C*1!J0A!Z-A!?;!!VJA\"<5A\"6)!!E31\"35A\"9-1!S=A\";MA#)8A\"E(Q!F*!!M/Q\"*2Q\"C.Q\"A.!\":-!\"5,1\"4,1\"4-1\"5-1\"7.!\"B.A#+.Q\"L3!\"Y61#05Q#041#)+1\"-,A\"5+A\",+1\"*/A\"F5A#+5A#)4Q##)A\"#,A\"0+1\"*(1!T+1\"'4A#$4Q#%3Q\"_*A\"$,1\"'+Q\"),Q\"*/!\"@61#16!#16A#101\"B,1\"00!\"G01\"I2A\"O5!#*51#-5!#&2Q\"Y11\"Q1!\"N0!\"H1Q\"R31\"T31\"Z41#!3Q\"^31\"^31\"]31\"]3Q\"U31\"Y3Q\"Z4!\"Z2Q\"[21\"R2Q\"W3Q\"[4Q#%5!#&5!#'41#$.!\"<+Q\"%+1\")1!\"N5Q#,6A#+6Q#161#1'Q!P%11;!!A1*Q\"%6!#,7!#16Q#/5!#&(1![&Q!N&A!O'Q!T3Q\"`5!#&5!#&5!#'+!\"''Q!Q&Q!N(A!Z5!#15Q#/6!#+5Q#04A#)41#'5Q#/6Q#06A#06!#05A#,11\"E-Q\"5.Q\"<.1\"9/1\";,Q\"6-Q\"5.!\"84A\"I2Q\">8!\"B?Q\"Y4Q\".2!\"+6!\":'Q!<)A!G5A\"!91!^41\"&81\"75!\"6(Q!A1!\"(L!\"MAQ!P,Q!2(Q!0$11/&1!55!\")V1\"8K1!'B#1!LEA!6!1.,A!J0!1;GU!![:!!MW!!3B1!,A1&*A!2-A!:/A1,6B1!B4A!BEQ!4B!!+AA&)Q!0)1!0+Q1(HFQ!Z)!!WYQ!J&!!4!Q**Q!B,115/1\"_-A\"A4Q#(6A#051#06!#00A\"O+A\"-,1\"4*1\"\"1A\"V5Q#-6A#&5Q#,01\"E(A!T+Q\".&AQK.Q\"A41#\"4A##4!#!0A\"H*A\"#+A\"-+A\",2Q\"U7!#17!#17!#15!#%-!\"6,A\"3.1\"=3!\"Z5A#.61#'5!#+4A#%31\"U1A\"Q1A\"S3Q\"Z5!#$5!#&41#\"4Q#%31\"]3A\"\\3!\"X31\"\\3!\"]31\"^4A#!4A#$3Q\"_3A\"]5!#$5!#&5!#&5!#'6A#$3!\"Z0!\"A11\"I5Q#+6Q#-6!#16A#17!#1-Q\"?#AA;%!AE31\"[7!#17!#16Q#/5!#$+A\"0&1!O%A!I.A\"=4Q#%5!#&5!#&5!#).1\"?'1!P'!!P.Q\"B6Q#+61#)4Q#.61#06!#05Q#06Q#06Q#06A#06!#05!#0/!\"E.1\"8.A\"<.A\"<.Q\"9,1\"4-!\"5-A\"731\"I2Q\";8!\"GAQ#&71\"81!\"&8Q\"H)1!H)!!E61\");A!]6Q\"-6!\",9!\"@(Q!J.Q!ZGA\"TCQ!V0A!7)1!0%!!/$Q!3/!!]OA\"GOAQ0BCA!K%A!;RQ$,A!?-A!C<31(WY1!VIA!>DQ!1AA\",!!*+1!7-1!;-111111&2B1$/1A&*A!.*1!3)Q!0-QA'J61!Z)!!XY1!M6A!4RA,+!!>,A11>#A!U8Q!XH!!P41*>!\"',1!U(A!=)A!4.!!S:A\"7LQ#&9Q\"G'A!E(A!M/1\"&2Q\"I/A\"D.!\"6-Q\"5,Q\"0,Q\"2,Q\"5-1\"5-Q\"6/!\"N+Q\"35Q#05A#051#06A#-4!#)+!\"&+!\"((A!W4!#.61#+51#(5!#,5!#+)!!X(!!S&Q1E1Q\"R4Q#%3Q\"`41#\"3Q\"_,A\"-,!\"--A\"251#$7!#17!#17!#16Q#02Q\"Z,A\"30Q\"B41#(7!#(51#*6!#*6A#%5!#&3!\"\\31\"^4Q#%5!#&5!#&4!#!3A\"^3Q\"`3A\"^2Q\"[31\"]31\"^41#\"41\"^3A\"_41##5!#&5!#&5!#&5!#&5!#'5!#)5!#&3Q\"_4A#(5Q#.6!#+6!#-61#07!#141\"`,!\"./!\"E61#.7!#17!#16Q#141##01\"I&!!H(1!\\31\"Z41#\"3Q\"`5!#&51#(1Q\"S&!!N)A!^3!#!4Q#06!#*5A#)51#06A#06Q#06Q#06Q#05Q#06!#051#0/Q\"H-A\"5.A\";.Q\"<-Q\"5,1\"4-A\"5-1\"511\"<3!\"=7A\"AAA##:1\"@0Q!]8A\"G+!!R'A!<3A\"!91![71\"!4A\"(9A\"D*A!P+!!NA1\"SHA\"-61!>*Q!1&1!/$A!/)A!FDA\"JTAQKEBQ!I%Q!DD!\"0Q16,!!A01Q8JF!!YIQ!T8Q!>4!!1!!\".QA$,!!1+1!8,!!7,1!7+1!3+!!3*A!5+Q!)9CA!TH!![*!!V81!F5A!01!1)Q!=.!12A3A!UX1!Z8Q!O#Q:5Q\"7+Q!U>!\"ELQ#,6A\"<(Q!E*1!K/Q\"*2Q\"I/A\"D-A\"6-Q\"5,Q\"*.1\">-Q\"<-1\"5.Q\"9,!\"1,A\"25Q#051#051#06A#+6!#0/A\"F)1!X*A\"\"51#/6!#)5!#&5!#&5!#*/!\">$A1='A!Q31\"\\41##3!\"\\3!\"\\3A\"_1Q\"Q-!\"301\"L61#.7!#16!#17!#17!#16!#+3!\"S4!\"^6!#/5Q#15A#-5Q#)5!#*5!#(5!#&5!#&5!#&5!#&5!#&3Q\"`4A##3Q\"`4A#$31\"]3Q\"`3!\"]3A\"_4A#$4A#$5!#&5!#&5!#&5!#&5!#&6!#)6!#+61#(6!#&6A#(6A#+6A#061#-7!#17!#16A#141#'61#-7!#17!#17!#16Q#14A#(3!\"\\.!\":1!\"P5!#&5!#&4A#$41##5!#(5Q#+.1\":0A\"M4Q#06A#&4Q#'5Q#'5A#/6!#06Q#06Q#06A#05A#06Q#+4Q#021\"T-A\"5.!\"8-Q\"5-Q\"5,A\"3-!\"/-1\"50Q\"@4A\">5Q\"BAA#!?!\"R1!\"#6!\"411\"'&1!7.Q![8A\"$8!!^1A!W9Q\"C0A\"#'Q!B8Q\"7KQ\"I@Q!T-Q!5(1!0$A!/%A!31Q\"\"O!\"=PQQ5D3A!I%1!>#A%.!A>+Q!C11A4BDA#R81!U9!!I6A!;D1!6C!!0!Q$.1A*.!A*.!A*0!Q)7SQ!FF1!T(!![*!!WI!!FEQ!2Q!.*A!=+1!88B1%OF!!UXQ!UFA!DQ!T4A\"&(Q!C'Q!7+QQ(J$Q!\\31+U1\"U61\"7'1!<01!_41\"$.Q!G?1!`J1\"L/!\"\")A!I31\"311\"$,A!RB!\"KL1#/21\"/)A!A)Q!P0A\"01A\"H1!\"G,Q\"6,1\"4.1\"93Q\"U3!\"V-Q\":-Q\"5,!\"1/Q\"G6!#05Q#04Q#*51#.5!#05!#--!\"20A\"L61#-51#)5!#&5!#&5!#&4!#'-!\"2/A\"B4A#$4!#!5!#'5!#)4A##4!#!2Q\"Z6!#,7!#17!#16!#17!#17!#16Q#15Q#15A#16A#(51#.6A#&5!#+7!#%5A#)5!#*5!#&5!#&5!#&5!#&5!#&4A#$3Q\"`3!\"]3!\"\\3A\"_4!#!4!#!4A#$4Q#%4!#!5!#&5!#&5!#&5!#&5!#'51#)61#(5Q#+5!#/61#-5Q#,5A#,6Q#06Q#17!#16A#16Q#17!#17!#17!#17!#16!#,4A#%3A\"_4A#$4Q#$31\"^3A\"^31\"^5!#&5Q#(41#&4Q#*5!#-4Q#'4Q#%51#'51#+5A#06Q#06Q#05Q#051#05Q#,6A#'3Q#$-!\"5-1\"8-A\"7-1\"4,!\",-A\"),A\"3.Q\"93!\"A5A\"B>Q\"`CA#\"7Q\"62Q\"061\"?(!!B*!!N61\"$9!!\\5Q![6Q\",81\"B)1!L.A!XCA\"UJA\"061!G+A!1&!!0%A!1(1!<:Q\"8RA\"1JQA(F3A!IU!!.1A3821&NV1!U7!!S6A!JRA<@!\"4.!!Z'Q!9'Q!0/A1(F$!![C!/TQ2J7A\"=(1!9-Q!S6Q\".0!!K9!!XFA\"K71\":(A!G0A\"'31\"2-Q!S81\"=O1#911\"&1!\"\"EQ\"PI1#.1A\"&)1!C+Q!T-Q\"&1A\"D2!\"S/A\"E,A\"5-1\".3Q#\"4Q#'4Q#&4Q#(11\"J1A\"Q6!#-5!#-4Q#&4!#!4Q#%5!#,6!#06!#051#05A#+4A#$3Q\"`3!\"]4!#!4A#&4Q#&5!#&3Q#!5!#+6Q#17!#17!#15A#061#07!#16Q#15Q#16A#16!#17!#16Q#161#16!#-6A#+51#-51#)6!#)6Q#'6A#'5!#*5!#&5!#&5!#\"5!\"`5!#&4!#!4Q#%3A\"_4!#!31\"]3Q\"`4A##3Q\"`4!#\"4Q#%5!#&5!#&5!#&5!#&5!#&5Q#(5A#+51#'51#.61#,5A#*6!#+6!#-5A#.6Q#16Q#16A#16Q#17!#15Q#16Q#16Q#15!#*4A#$4!#\"4A##4Q#(6A#15A#.41##5!#&5Q#,5Q#.4Q#%41##3A\"^3A\"_4Q#'4Q#06!#06!#051#04Q#)4!#!4Q#%4Q#'21\"[,Q\"7,1\"4,1\"2/Q\"F4A\"`1!\"N-!\"8.1\"61!\"75!\"@#1&9\"A)1A1+.!14.119-A1:.11:.A15/!A/4!1);\"Q&@#Q$HU1!O&A!O%!!NU1\"I\"Q3C!\"!7A\".,A!L'Q!;'1!3-Q!)@3Q!TCA)WQB-FA\"Y.!![)!!D2Q\"%4A\"$1A!H=Q\"#EA\"I2A\"*(Q!G3A\".3Q\"3-A!X9Q\";N!#-<1\"M,!!W*Q!H,1!\\0!\"/11\"K2!\"T.!\"<,Q\"2/A\"@4Q#%4Q#%4Q#)5!#/4!\"Z4Q#&5Q#05A#-4A#$41##4!#!5!#&51#-51#05A#,51#(4!#!4A#'41#$41##4A#&4Q#&41#\"3Q#!5Q#.6Q#16Q#17!#17!#17!#17!#16Q#161#16!#16A#17!#16!#17!#161#06A#06Q#(5Q#+5Q#)5!#)5!#)5!#&5!#&5!#&5!#&5!#&4!#!4!#!41#\"3Q\"`3A\"^3A\"_41#\"3A\"_41#\"5!#&4!#!5!#&5!#&5!#&5!#&5!#&5Q#(5Q#&61#*6A#,51#(5Q#+61#'6Q#)6!#.61#16Q#15Q#161#17!#161#16!#16!#15Q#/3A\"`3A\"_3!\"\\6!#-7!#17!#14A#*4A#$5!#&5A#*4Q#%4A##3Q\"`4A#%4Q#%4Q#,51#05Q#04Q#04Q#'41##3Q\"`4Q#$41#%.Q\"?,Q\"2,Q\"11Q\"P4Q#%3A\"^0A\"J.1\"80!\"62Q\"77!\"G@1#$EQ#*?Q\"R4!\"*8!\"?/A\"%(1!<-Q!Z6!\"!8A\"!6!!^5Q\".7Q\">.A!T)Q!J5A\"2E1\"LEQ\"\"71!;,Q!-(1!0&Q!0%A!1'Q!@1Q\"\">A\"@FA\"+I!QII210J#!!KD!!I$!!GT1!G4A!E4A!E$1!ET!!GDQ!JUQ!L%A!M%!!L%Q!KD1!IC!/G2!D@!\"\"7!\".-Q!V(A!?'1!4)!!02B!&ECA!UC!3TQRKBA\"Y+Q!O)A!F21\")4!\"'/Q!M;!![E1\"A71\"6)A!I.Q!`6Q\"@-Q!\\1!\"!F1#\"F!#(0!\"!*A!L,1!V.1\")0!\"=4!\"T11\"M-!\"8,Q\"72A\"W4Q#%4!#!4Q#%5A#,4Q#,51#05Q#/4Q#)41##4!#!41#'5!#'6Q#*5Q#,5Q#)4A##4Q#%5Q#14A#'4!#!4A##4A#$5!#&51#(7!#15Q#15Q#17!#17!#17!#17!#16!#15A#16A#.5A#-6A#16A#16!#.6A#)5Q#.5!#,5Q#)5Q#)6A#(6A#&5!#*5!#&5!#&5!#&5!#&5!#&41#\"3Q\"`3Q\"`3!\"]3!\"\\31\"]4!#!4!#!41##4!#!5!#&5!#&4Q#$5!#&5!#&51#'51#*51#(7!#(5A#-6!#*61#)5Q#+5Q#,6Q#16Q#16Q#16!#15Q#16!#161#16Q#16A#14Q#)4A##3Q#!6A#16A#16A#15Q#-4Q#%5!#&5!#'4Q#%3Q#!4Q#,5!#.4!##4Q#&5Q#051#04Q#,4Q#%3A\"_41#\"41#\"4Q#'1Q\"S,Q\"3,A\"51A\"S4Q#%41#\"2A\"W/!\"@/A\"81A\"731\":9A\"QCA#*FA#)!!D2A!3+1!0'Q!0&1!0&Q!4(1!:.1!Q61\"(=1\"0BQR&D11ZDAADF!15HRA1HBA.GRQ.HC1.H3!.H3!.F\"A1C1!>BQAT?Q!]9!\"'2Q!`-!!N)!!>'!!8(Q10.11,9B!\"LCQ&QQALNA\"L;Q\"C,A!R*Q!M4!\"-51\"&0Q!R71!WB1\"98A\"8*A!K.A!W7A\"<0A\"!/1![@!\"JH!#%71\";,!!V,!!S-1!^0A\"22Q\"O3Q\"W0Q\"K-A\"0.Q\"A4A#$41##3Q\"`4Q#%51#-6!#051#05!#-4Q#%4A#%4!#\"4!#\"4A#%51#+51#-4Q#)3A\"_5!#+7!#15Q#-3Q\"`4A#$41##3A\"_5A#-7!#15Q#161#17!#17!#17!#16A#15A#15Q#15Q#.5A#-71#+61#-5Q#.5Q#+51#)6A#%51#)51#)5!#(5!#'5!#&5!#&5!#&5!##5!#&5!##3Q\"`4!#!3A\"_4!#!3A\"_5!\"^3Q\"`3Q\"`3Q\"_5!#&5!\"^5!#&41#\"5!#&5!#&5!#&5!#(61#(5!#.51#'5!#*5!#(7!#&5!#+6A#16Q#16A#161#17!#151#151#161#16Q#161#15!#&5!#'6A#17!#17!#16A#141#(3Q\"_4Q#(4Q#%4A#$5A#-6Q#05A#-4A#$51#*5Q#.4Q#(4A#(3Q\"`4Q#(41#$4Q#%4A#&0!\"G-Q\"<3!\"[4Q#%31\"]3Q\"`2!\"L.A\"=/1\"61A\"73Q\"==!\"WCA#)FQ#*:!\";41\"+61\"<+Q!T(1!A-Q!R4!!_51!Y51!Y6A\"&:A\">3A\"/*1!I+Q!P7A\"7CA\"=G!\"!<1!=3A!0.1!0(A!0&A!0%A!5'!!2(!!@+!!K/A!^4Q\"*6!\",8!\"151\"0+Q!M,!!T3Q\"50A\"&/!!X=1\"HHA#/:!\"F.Q![*Q!U-A!Y.!\"01Q\"E41\"Z3!\"[/A\"=-!\"82Q\"Y4!#\"4Q#%4!#\"4Q#%61#)5Q#,5Q#/5!#&41#\"51#,51#-4!#\"51#)6!#)61#'4Q#%4A#&6Q#17!#15Q#/4!#$3Q#!3Q\"`41#%6A#061#15Q#15A#17!#17!#17!#161#16!#16!#15A#.61#-61#17!#)6!#.5Q#+51#+51#+51#'5!#&5!#'5!#'5!#&5!#&5!#&5!\"_4!#\"4A\"]3Q\"`41#\"4A#$3!\"]3Q\"`31\"\\4!#\"4Q#%3A\"^5!#&4Q#$4A#$5!#&5!#&5!#&5!#&5!#'5A#(6!#)6A#'6A#'5A#+51#,5Q#*5A#/6!#061#161#161#16!#15!#16!#15Q#16Q#15Q#06A#07!#16Q#15Q#15Q#161#/4Q#&4Q#%4Q#%4Q#%61#.6Q#06A#041#'4A##5!#'5A#+4Q#&41##5A#05Q#/4A#%4Q#%3Q\"`1Q\"S4!##4Q#%41##4Q#%2Q\"Y01\"F01\"8/A\"51Q\"571\"F<1\"UC1#)EQ#'=1\"F5!\"06A\";.A!`(!!E)A!L2Q\"\"5!!\\51!X5Q!]7Q\"581\"71A\"%+Q!J.1![7!\"4C1\"AF1\"0AQ!O9Q!D3Q!7.!!6+!!3'A!2'!!1'!!2'A!5&A!4&1!6&A!;'1!<&A!<'1!;&1!6'1!6'!!7(!!4)Q!7,!!1.Q!,4A1&?\"!%H\"13N!ARKABBC!\"R3!\",+A!M,1!T21\",71\"231!X2Q!S;!\"&Q\"KH!#'<1\"H0A\"#-1!T-1!Z.A\".0Q\"C3A\"U41#\"11\"Q-A\"90A\"L4Q#$4Q#'51#-41##41#\"5!#.5!#/6Q#$4A#$5!#,6A#05Q#041#\"4A#$4Q#&4Q#%3Q#\"5Q#06Q#17!#16A#141#'4!#\"4A#$6!#06A#16!#15A#16A#161#17!#16A#16A#161#161#*6!#+5A#'61#/5Q#/6!#/6!#*61#+5!#&5!#&5!#'5!#&5!#&5!#&5!#&4A#$4!#!4Q#%3A\"_3Q\"`3A\"^4!#\"3!\"]3!\"\\3!\"\\4!\"[3Q\"_4A#\"41#\"41##4A#$5!#&5!#&5!#&5!#&5!#'5!#)5!#'5!#)6A#&5A#+51#*5A#(5Q#/61#061#16A#15Q#16!#16Q#(51#15Q#16Q#16Q#16Q#17!#16A#16!#16A#16A#15A#+3Q#!4!#!4!#!61#.6Q#06Q#06A#04A#$4Q#&4Q#+4Q#&41##5A#06Q#051#-4!#\"4Q#%4A#)4Q#+4Q#%41##5Q#*4Q#)2A\"X/1\"D.A\"70Q\"02A\"971\"FA\"CD1\"CCQ\")A!!T=!!E8Q!;4!!41Q!5-Q!4,Q!1+!!1+1!0*Q!/*!!0*Q!0+1!1-!1+2!A'41A,8QQ*@1A'E114K!!UJAR0FQ\"E=A\"B3!\"),A!N,A!T2!\"*61\"25!\"$1Q!X81!];Q\"-81\"7/A![+1!M2!\"+7!\"@0Q\"&0!\"!E!1EC!ADF11DGAQKGQ!SFQ\"$H!\"5E1\"C@!\"C8A\"9A\"K?A\"^C!#&DA\"\\=A\"I81\"97A\"=5!\"6,Q!X*A!C*A!L.A!X3!!Y4A!Z4!!W4A\"\"5Q\"$8!\"07Q\"93A\",01\"!.1!_-1!]/Q!Z1!!`1A\"%6A\"-8!\"49Q\"39A\"49A\"5<1\";:A\"::A\"9:!\";61\".2Q\"(0Q\"!-A!Z-!!V.A!\\01\"!41\"+7A\"75A\"&4A!]3Q!Y5Q!^8A\".9!\"821\"(-Q!S-1!U01\"%21\",01\"!/Q!_8!\"8BA\"V?!\"R7!\"7.Q!`-A!Y,Q!]-1\"-.Q\":21\"P4A#\"4Q#.4Q#'3Q\"`4!#\"4A#%5Q#/6Q#06Q#061#/4!##4Q#%4Q#&3Q\"`5Q#/6Q#06!#06A#05Q#04A##3Q#!4A#%6!#.5Q#06A#06!#16A#16Q#16A#16Q#/6A#15Q#15A#.6!#-5A#15Q#16Q#15A#15Q#16!#15A#)61#)6A#$5Q#&51#,5A#*61#&51#)5!#&41#$4A#$4Q#$4A#$5!#&5!#&4Q#\"3Q\"`4Q#$3Q\"^3Q#!3A\"_31\"^3A\"_2Q\"[3!\"Y3!\"Z4!\"[31\"]3A\"_3!\"]3Q\"`3Q\"`41#\"2Q\"[4A#$3Q\"`5!#&4!#!5!#&5A#*51#)5!#(5!#&5!#*5!#&5A#)5A#-6!#,5Q#.6!#(5!#)51#(6Q#(5A#16A#15Q#16!#16!#161#15Q#.5Q#/51#16Q#15A#04Q#*61#06A#05Q#06A#06!#061#041#%4Q#%4!#!51#,6A#061#061#061#04A#'4A#$4Q#%4A#$4A#*6Q#06Q#06A#05!#-3!\"Z/1\"C.Q\"7-A\"11A\"44A\"791\"D=1\"VB!##D!#\"B1\"X:Q\"D71\"771\"@2Q\"1+Q!Q)!!G*!!G-Q!Z3A!`5A\"!4Q!\\5A!Y6!\"\"7A\"'7Q\",71\"271\"341\",2!\")1!\"\".!!]-!!U-!!Q,1!O,A!P,1!V,1!V,1!X.1!^11!_11\"(4!\"15A\"/71\"561\"261\")3Q!`3Q!\\6!!]7Q\"&8A\"25Q\"/1Q\"&,Q!Q+Q!W2A\")3A\"31!\"%/1!_41\".>!\"J@A\"W;A\"A21\"*.1!]-A!Y-Q!^-!\"+/Q\"92!\"L41#%4Q#/4Q#(4Q#%4Q#%4!#$5Q#-6Q#06Q#06Q#05A#,4Q#%41#\"4A#$51#(6A#05Q#061#06Q#05Q#03A\"_4!#\"5A#.6A#06A#06!#05Q#16A#17!#17!#17!#15A#151#17!#'6!#/5Q#161#16A#16!#16!#16A#&5!#*5!#(5!#*6!#)51#'5A#*5!#*5!#&5!#&5!#&4Q#%3Q\"`4Q#%4!#!4A##4A\"]3!\"]4A#\"4!\"^4A\"[3!\"\\31\"^2Q\"\\3!\"\\31\"]3!\"\\2Q\"[3!\"]3A\"_2Q\"[3A\"_3Q\"`41#\"3A\"_3A\"_3!\"\\4A#$4Q#%4A##4A#$4Q#%5!#&4A#$41##5!#&51#'61#&5Q#-5A#,51#*7!#'5!#,5!#*5Q#*5Q#16A#161#16A#16!#161#+5A#,61#-5A#16A#06Q#06Q#061#061#06!#061#061#061#03Q##3Q\"`4Q#*61#06A#05Q#06A#06Q#051#*4A#$41#\"4A#$5Q#06Q#061#06A#05A#031\"`0Q\"M/Q\"7.A\"70!\"62!\"461\"@:!\"I=Q\"WAQ#\"E!\"_AA\"W;A\"@8!\"971\";2!\".-Q!^+Q!J(Q!I+A!O.Q!]2A!`5A\"$51\"\"5A!^4Q!X5!!X4A!\\4A!`5!\"!61\",71\"-6Q\"081\"48A\".61\"+71\"07A\",5Q\"+5A\"+61\"*4Q\"!3A!\\6A!\\5Q!_7Q\"'9!\"+7!\"-51\".0A!`,!!R+1!M-Q![2A\"*4A\"71A\"+0A\"%61\"1=Q\"M@A\"T;!\"I4!\"2.1!`-A!Z,Q![-!\"#.1\"10Q\"C1Q\"T41#%5Q#051#-4A#$4A#$4A#&6!#061#06!#06!#06Q#041#*3A\"_41#\"51#*6A#05Q#05A#06A#06Q#05Q#04Q#)5A#.61#061#06!#061#.5A#17!#16Q#16A#16A#16A#/61#(5!#+6!#-5!#*61#15Q#16!#151#15A#,51#'5!#&5A#'6!#)51#(51#'5!#&5!#&4A##3A\"_41##41#\"3Q\"`4A#$4!#\"3Q\"`3Q\"`3!\"\\3!\"\\3Q\"`2Q\"[3Q\"\\4A\"^31\"]31\"]41\"`3A\"^41\"Z4!#!3A\"]4!#!3Q\"_4A#$31\"]4Q#%41##3Q\"`4A#$41##4A#&3Q#\"5!#&4A#$41##4!#!5!#'5!#&6Q##5A#.6A#$51#)61#'6!#(6!#(5Q#,6!#16Q#15Q#16!#16!#.51#-5A#)6!#06!#06Q#06Q#06Q#061#06!#06!#061#061#06!#04A#'4Q#*61#06A#05A#061#05A#06!#05A#)41#$3Q\"`5A#06Q#061#06!#06Q#05Q#/41#$2A\"Q/A\"C/A\";/1\"02!\"44A\"98!\"@;1\"L@1\"_C!#%CA#!BA\"U=A\"I81\"95A\"53Q\"11!\"$-A!W+1!Q*Q!L*A!S.Q!Y/Q!^1Q!_2!!_31!_3Q!]2Q!]1Q!S1Q!S01!R/A!Q0!!Q/1!P11!M3A!V4A!X41!^51\"#6!\"!6!\",61\"-51\"+0A!_.Q!],1!V-1!V-A!X01\"(1A\"*0A\")0!\"%2Q\")8!\";?1\"NAA\"V=Q\"K7A\"60!!`.!![-!!Y,Q!\\.!\"&-Q\"70Q\"D1A\"R41#%5Q#/51#04Q#'4A##4Q#'5A#.61#06!#05Q#06Q#06!#041#&4A#%5A#*61#06A#06!#06!#06!#06Q#05Q#061#06A#05A#06!#.5A#-5Q#/6!#15Q#16A#16A#15Q#051#+5!#*6A#%5A#)5A#/5Q#061#06!#.51#)5!#&5!#&5!#&5!#(5!#'5!#*4Q#%4Q#%4Q#%41##4!#!5!#&5!#&4Q#$4A##3Q\"_4!#\"3Q\"`4!\"^41\"]3!\"\\3!\"\\3!\"Y4!\"]2Q\"Z3!\"X3Q\"V31\"]2Q\"[31\"W3Q\"\\3!\"Z31\"]31\"]3A\"_3Q\"`3Q\"`3Q\"`3!\"]3Q##41#\"41#\"5!#&5!#&5!#&4A#$4A#$5!#&5!#)61#&5!#/61#'5!#+5!#(5!#(5!#+5Q#/51#16!#161#15!#+61#$5!#(5Q#,5Q#061#06Q#06A#05Q#06A#05A#/5Q#/5Q#06!#061#05Q#06A#06Q#06Q#06A#06!#06!#06Q#051#/4Q#'4Q#-61#061#06!#051#061#06Q#051#.3Q##2Q\"R01\"J/!\"@/Q\"41A\"73Q\"86Q\"B;1\"N?A\"[AQ#%E!#'D!\"`AQ\"V=!\"H8Q\">61\"85!\"13!\"03!\"'-Q!],Q!R+1!O+!!J)1!J+1!S+A!S+!!N*Q!M*A!K+A!K,!!N,Q!P-Q![/A!_/1!T-Q!R-A!^,A!S+A!O*1!E*1!R.!!T01!`11\"*2!\".1Q\",2Q\"+1A\"'6!\"61\"W@A\"T:A\"I4A\"10Q!`-A!Z,A!X,Q!Y+A\"$-Q\"1.A\"=0A\"K2!\"U41#%5Q#06A#04A#*3Q\"`4Q#(6Q#05Q#06!#06!#061#06Q#05Q#04Q#.5A#/61#06!#05Q#06!#06!#06Q#06Q#06Q#06A#06A#05A#.6A#&51#-7!#*61#17!#161#161#15A#,5Q#)6!#(5!#+61#'5Q#/51#(6!#+5!#&4Q#&5!#&5!#&5!#&5!#&5!#)5!#&4Q#%41##4!#!3Q\"`5!#&5!#&5!#&4!#!3Q\"`31\"^2Q\"[31\"]2Q\"[2Q\"[3A\"[4!\"^31\"]3!\"]3Q\"Y2Q\"[31\"Z3A\"]3Q\"_3!\"[3Q\"`31\"Z3A\"_3!\"\\4!#!31\"^3A\"^3A\"_41#\"4!#\"41##4A#$41#\"41##5!#&4Q#%3A\"_4A#$5!#'51#+5A#'51#'5!#&5!#&5!#&5!#&5!#'61#-6!#,6Q#+6!#/5A#,61#(5A#&5Q#,6!#061#06Q#05Q#051#06!#.5!#)5Q#,6!#/6!#06A#06Q#06Q#06!#05Q#05Q#061#06Q#061#06A#05Q#06Q#06Q#06A#061#06!#06A#06Q#061#051#-4A#!21\"T0Q\"N1A\">11\"921\"831\":71\"A9A\"J3!\"'/!\"\"-Q!Y-!!X,A!Z,1\"\",1\"/-!\"6/A\"B1!\"O3!\"Y41#$5!#06Q#06!#051#,61#/6!#05A#05Q#051#05Q#061#06Q#06Q#06A#06A#06!#05A#05Q#+6Q#+61#-6Q#06Q#06!#061#05A#/5A#-5A#)51#,6!#/6Q#16!#151#151#/5Q#'5!#'5!#*6A#$51#)5Q#'6!#.5Q#*4Q#%41#\"41##4A#$4A#$4Q#%5!#&5!#&4!#!3Q\"_4!#\"3Q\"`3A\"_4Q#%3Q\"_3A\"_3Q\"`3Q\"^3A\"]3A\"]3!\"\\2Q\"[4!\"]3A\"^3A\"X3A\"Z31\"]3Q\"X31\"Y3!\"X31\"Y3A\"Z41\"^4A\"[31\"^4!\"^3Q\"[2Q\"[31\"]2Q\"[4!\"^4!\"\\4!#!3Q\"`5!#&4!#!41##3A\"_4!#!4A##4!#!5!#&6!#)7!#%5!#)5!#&5!#&5!#&5!#&5Q#*5!#+6A#(5Q#/51#*5!#+6!#)4Q#'51#,51#06Q#05Q#06!#05A#.7!#%4Q#+5!#-6!#051#06A#06Q#06!#05Q#06A#06!#05Q#06A#06!#06Q#06Q#06Q#06Q#06!#06!#05A#05Q#06!#06Q#06!#05!#-4!#%3!\"Z2!\"L0Q\"B1A\"91Q\"72A\"941\">6Q\"C:Q\"O=Q\"W@!\"_CQ#(CQ#)EA#'EQ#%AQ\"V?Q\"NQ\"O?!\"[A1\"X@!\"Z>A\"R9Q\"?4!\"00!\"#.1!]-A!Y-1!X,!!X+A\"!+A\",-Q\"5.Q\"<0Q\"L1!\"O1Q\"T4Q\"`5Q#+6A#06Q#06Q#06Q#06Q#05Q#06A#06!#05Q#061#06Q#06Q#06Q#05Q#05Q#051#-5!#*7!#&51#06A#061#06Q#05Q#051#051#)5A#)51#*5A#-6!#05A#16!#15Q#-61#)6!##5!#&5!#&5!#*51#+6!#'51#(5!#&4Q#$31\"]4Q#%5!#&4A##4Q#%5!#&5!#&4!#!31\"^3A\"_4!#!31\"]3Q\"`4!#!4!#!31\"]3A\"\\31\"\\3!\"X3!\"[3Q\"`31\"X3Q\"^31\"W3A\"Z31\"]3!\"Y4!\"]3Q\"Y41\"]3A\"V2A\"[2A\"Z31\"W2Q\"Z3A\"_31\"]4!#!31\"^3Q\"X31\"]3!\"\\4!#!5!#&41##3A\"_41##3!\"\\3A\"_4!#!4A#$41##4Q#*5!#(5!#&41##4A#$41#\"5!#%6A#&4Q#,5A#)5Q#-61#$5!#%4Q#%4Q#%5Q#+5Q#06!#06A#05Q#,5A#061#$51#%4Q#*6A#05A#05Q#06Q#06!#051#.5Q#-4Q#)51#-6A#06!#06A#06Q#06Q#06Q#06!#05Q#.3Q\"[2A\"Z4A#&6A#.7!#07!#16!#16!#15!#'4!#!2A\"W3!\"C2!\"@1Q\"81Q\"73Q\"861\"B7A\"D:A\"L<1\"S?1\"^A!#$BA#$DA#)E1#%E1#\"E!#\"D1\"YB1\"_AQ\"Z@A\"Y@!\"Y?A\"Q>1\"N>A\"O?A\"XA1\"W@A\"YAQ\"]CA##CQ#&BQ#$A!\"`=1\"R:!\"F7!\"<3A\".0Q\"$-Q!\\-1!X,A!X,Q!X+Q!X,1!]+!\"\"+Q\"0,A\"6-1\"90!\"H1!\"N11\"P2Q\"[3A#!6!#06Q#06Q#06Q#06Q#06!#06!#06!#05Q#-6A#+5Q#06Q#06Q#06Q#06!#05Q#05Q#-4Q#)6A#'4Q#16!#06Q#06!#06!#05Q#06!#$6A#%51#(6!#&6Q#+51#06!#.51#+5!#*5!#&5!#&5!#&5!#)6A#%51#(6!#%5!#'5!#&3Q\"`4A#$4!#!41#\"5!#&4!#!5!#&3Q\"`41#\"31\"^31\"^4!#!3!\"\\31\"^2Q\"[2Q\"\\3A\"Y3A\"_3A\"_2Q\"[4!\"\\31\"]31\"X3A\"[3Q\"\\4!\"X3A\"Y3!\"Y2Q\"Y3A\"X31\"X3Q\"^31\"]4!\"X2Q\"[3Q\"^3A\"_2Q\"[3A\"_31\"^31\"]31\"]3!\"\\2Q\"\\3A\"_41##41#\"4Q#%3A\"_3A\"_3Q\"`4!#!4A#$5!#&5!#'5!#*4A#$3A\"_3A\"_4Q#%5!#'6A#\"51#-5A#)51#'5!#&4Q#%4Q#%5!#&51#(5Q#.61#/5Q#.5Q#*5A#*4Q#*4Q#%5!#/5Q#06!#061#061#06!#06Q#(5!#.6A#&51#05!#05A#06Q#06Q#06Q#06!#06!#04Q#*1Q\"R11\"O2A\"Y3A\"^5!#-6A#06A#06Q#06Q#061#.5!#'3A\"]31\"Q3Q\"L2!\"C21\";1Q\";31\";31\";3Q\"<7!\"@8!\"@8Q\"B:!\"M!\"X>Q\"Y?A\"Z?A\"Z@Q\"Z?Q\"Z@!\"Z@1\"\\?Q\"Z?1\"W=!\"X51\"421\".0A\"'/1!`.A!]-A!\\-1!Y,Q!Y+Q!X*1!W)Q!Y*Q!`*A\"#*Q\"',!\"1-A\"9/!\"A0A\"J0Q\"M1!\"O2!\"V4A#&5Q#06Q#06Q#06Q#061#061#05!#/51#.6A#*61#05Q#06A#05Q#061#06A#05A#05Q#-5!#'51#)5A#-5A#,6Q#06Q#061#05Q#.4Q#+5A#)4Q#(5!#*5Q#+6!#,6!#+5Q#)6A##51#$4Q#%5!#&5!#&5!#&51#'51#(5!#&41##4!#!3A\"^4!#!41#\"41##4Q#%4A##31\"^41#\"3Q\"`2Q\"[4!#!31\"^3!\"\\3A\"_41#!3Q\"X31\"Z3!\"[3!\"[3A\"]3A\"[4A\"Z3!\"[31\"\\3!\"Z3!\"Z31\"Z3!\"Y3!\"X31\"X31\"^31\"W3Q\"\\31\"Y3Q\"Z3A\"Y3Q\"Y3Q\"`3!\"]31\"]31\"^2Q\"[3Q\"`31\"\\41\"]3Q\"`4A#$3A\"_4!#!41##31\"]3Q\"`4A##3Q#!5!#&5!#&5!#&41#\"4!#!41##3Q#!4A#'5!#&5Q#,6!#(5!#*4Q#%4Q#%4Q#%4Q#%5A#&5Q#)5Q#.5Q#.6!#%51#(4Q#%4Q#%5!#*5Q#051#06!#06!#06!#051#.4Q#-4Q#)5A#05Q#05Q#05Q#05Q#06Q#061#051#05!#(1Q\"R01\"I0Q\"M11\"P31\"]4Q#'5Q#06!#06A#06!#06!#05!#&4!#!3Q\"[3A\"T3!\"O3!\"E1A\"D1A\"=0A\";01\"<1Q\"81Q\"62A\"231\"131\"12Q\".2A\".1!\"00Q\"10A\",/1\"$/1\"$.1\"\".1\"\",Q!`.!!^-1\"#-A\"\"-Q!_.!!^,1\"!,!!_*A!Z*1!X(Q!W(1!Z(1![*A\"$+A\",,!\"2,1\"4-A\"9/A\"C0!\"H0Q\"M11\"P31\"^4Q#+5Q#05Q#06A#06!#051#04Q#.4!#%41#$4Q#,6!#+5Q#/5A#061#06Q#061#05Q#051#-5Q#%5Q#)6!#+61#*6!#05A#05A#04Q#.6!#&4A##41#\"4Q#&5A#+5A#*61#)5Q#)5A#%5!#&4A#$4A#$41#\"5!#&5!#(61#(5!#'4A##3Q#!3Q\"`41##3Q\"`3Q\"`4A#$3Q\"`4!#!31\"^2Q\"[41\"[31\"]3!\"\\4A##41\"^4!\"]31\"X31\"^2Q\"[3Q\"\\3!\"Y3Q\"U3Q\"\\3Q\"U3Q\"\\31\"Y3Q\"Z31\"W31\"W3!\"Y3!\"X21\"V3Q\"U3Q\"U3!\"\\2Q\"[3A\"]3Q\"W31\"\\31\"X31\"X3Q\"Y3!\"\\3Q\"`3Q\"X2Q\"[3!\"[4!#!3!\"]4!#\"31\"]3Q\"`2Q\"[2Q\"[31\"^3A\"_41#\"4A##5!#&3Q\"`4!#!31\"]4!#\"3!\"\\5!#&5!#'61#&51#*4Q#%4Q#%3A\"_41#\"4Q#%4Q#&51#)6!#.5A#/5!#(4Q#'4Q#%4Q#&4Q#'4Q#(5Q#-5Q#*5A#/5Q#06A#(5Q#'5!#+5!#-5!#/51#06!#05Q#06!#05Q#05A#05!#.1Q\"S0Q\"M0A\"K0Q\"L0Q\"K3!\"W3!\"Y4!#'5Q#(4Q#*4Q#)31\"]3!\"Y2!\"V1Q\"R0Q\"J01\"I/Q\"E/A\"E.Q\"@.A\"<.A\";.A\";/1\"6/!\"501\"501\"4/Q\"0/Q\"./A\"0/1\")/1\"(/1\"%.1\"$,1\"(,1\"\"+1!`*!!Z(A!W'A!W'1!R&Q!N&1!O&A!Q'Q!W(1!Y)1!_*1\"!*1\"\"*A\"\"+Q\"/.1\"=01\"H0Q\"M11\"P3Q#\"51#.61#061#06!#04Q#*4!#&2!\"W0A\"L2A\"X5!#+5!#.5!#/5A#06!#061#05Q#05!#04Q#,4Q#&5!#(51#*5Q#,61#-5Q#,5Q#,6Q#$4Q#)4!#\"4Q#%4Q#%51#(5!#(5Q#*5Q#+5!#,4!#\"41#\"31\"^3!\"]41#\"4A#$5!#&4A#%3A\"_4!#!3!\"]3A\"^31\"^4!#\"41##4!#!41#\"31\"^4!#!3A\"\\31\"[3!\"\\3Q\"]31\"Y2Q\"[3Q\"^3Q\"\\4!\"W3Q\"^3A\"V4!\"]3!\"[3!\"[3!\"[3!\"Z31\"[3A\"W31\"X31\"X3Q\"V3A\"V2Q\"Z2Q\"Y3!\"Y2A\"Y3A\"]31\"W3Q\"]4A\"V2Q\"[2Q\"Z3Q\"Y3A\"Y3A\"Y3A\"Y4!\"^3!\"]3!\"\\3!\"\\4!#!31\"]3Q\"`4!#!31\"]3A\"_31\"]31\"^3A\"^4!#!4A#$31\"^3Q\"`31\"^3Q\"`4!#!4Q#&41#&4Q#'4Q#(4Q#%41#\"3A\"^4A#$4Q#%4Q#%6A##51#-5Q#&6!#)5!#&4Q#%4Q#%4Q#%4Q#%6!#-5Q#-71#*5Q#05Q#,6!#&5A#$4Q#'4Q#+6A#'5A#05Q#05Q#05A#051#04Q#,21\"Y0A\"L0Q\"N/Q\"F0Q\"M0Q\"M1A\"Q2!\"P2!\"W21\"W2A\"Y1Q\"P1Q\"T0Q\"L/Q\"F.Q\"@-1\"9+A\",*Q\"%*1\"!*1\"!*!!`*!!`)!!\\)A!](1!Y(1!Y(!!X&1!S%A!S%A!S%A!S$A!R%A!O%1!M$A!J$1!J$A!J%1!K$!!I$A!J&!!N%!!K&A!L'!!N'1!O'1!O)!!V*!!^-A\"6/Q\"F0Q\"M21\"W3Q#%51#05Q#/6!#/4!#!2A\"Y1!\"O0A\"L0A\"K1A\"T4A#)6!#,6!#-5A#-5A#.4Q#.51#*4Q#)4Q#)4Q#&4Q#%5!#*5A#)5Q#.6!#,51#,5!#'4Q#&41#\"41##41##4Q#%5Q#(61#(5Q#)4!##4!#!4!#!41#\"3Q#!3Q#!5!#&5!#&4Q#%4A##3A\"_31\"]31\"^31\"^3Q\"`31\"]3Q\"`31\"^31\"^31\"]31\"]3Q\"]3!\"Z3Q\"`2Q\"[2Q\"[2Q\"[2Q\"Z3!\"Y3!\"Y3Q\"]31\"]3A\"Z3Q\"Y3A\"Y41\"]2A\"V3Q\"U2Q\"[31\"X31\"X21\"X3!\"U2Q\"S3!\"X3Q\"U2Q\"U3!\"Y31\"W2Q\"Z2Q\"[4A\"^4!\"Y3!\"]3A\"\\3A\"\\3!\"\\3A\"Y31\"^3Q\"X3!\"\\3A\"V3!\"\\4A\"]3!\"X3!\"X31\"]3A\"_2Q\"[3Q\"`4A##3Q\"`4!#!3A\"_3A\"_2Q\"[3!\"]4!#!41#\"4Q#$4A#$4Q#%41##41#\"31\"^31\"]4!#!4Q#$5A#)5!#,6!#%5A#,4Q#%4A##4A#$3!\"]4Q#%4Q#*5Q#*51#+51#+6!#+4Q#(4Q#%4A#$2A\"Y2!\"T3A\"]5A#)5Q#,5A#+5Q#,5Q#,4Q#\"11\"Q0A\"J/Q\"E0A\"K0!\"G0!\"G/1\"C01\"J0Q\"M0A\"K0Q\"M1!\"O11\"P11\"O01\"I.Q\"@-!\"5+!\"&(!!T%!!K%A!D$1!A#1A>#1A>$1Q=#1Q>#1A>$!A=$!A=#AQ?#QAA$AA:#AAB$AA:#AQ?#A!<#A!;$A!4#1!9#A!6#A16#113#Q19&A!G)A!\\-!\"30A\"J0Q\"M1!\"N11\"P3A\"]31\"`31\"`11\"P0A\"K01\"J/Q\"E0A\"J0A\"K2!\"U4Q#&6Q#(6!#06Q#(5A#.6Q#'4Q#(4Q#*4Q#%4Q#%4Q#%4Q#(6A#'5A#+5Q#&6A#*51#$41##4A#$31\"^4!#!4Q#%4Q#'4Q#'4A#&4A#$4A#$31\"]3A\"_3Q\"`41#\"5!#&5!#&41#\"3Q\"`3!\"\\3Q\"`3Q\"`3!\"]3!\"]31\"]3A\"_3A\"_3A\"_3!\"]2Q\"Y3Q\"]3A\"V31\"]31\"W3!\"[3Q\"`31\"X4!\"\\31\"^3A\"W3A\"V3!\"X3Q\"[3!\"X31\"X3A\"V3!\"X2Q\"X21\"X31\"U3!\"T1A\"S2Q\"W2Q\"Z2!\"U3!\"W21\"U31\"T31\"W3A\"W31\"X31\"X2Q\"Z3Q\"Y31\"Z4!\"W3!\"]31\"[4!\"[31\"Y41\"]31\"]41\"Y3A\"_3!\"\\2Q\"[4!\"Y2Q\"[3A\"]3A\"_31\"^3A\"_3A\"_4!#!4!#!31\"]41\"`31\"]3Q\"`41##4Q#%4Q#%41##3A\"`41#\"4!#!31\"]3A\"_41#\"4A#&51#*4Q#(4Q#&4Q#$3Q\"`4A##4!#!4Q#$51#'5!#&5!#+5A#*5Q#*4Q#)4Q#(3Q\"_/Q\"F/Q\"E1!\"M21\"V41#!5Q#(5Q#,5Q#,4A#&2A\"Y1!\"N0!\"H0!\"H/1\"B+Q\"**A!`*Q\"\"+!\"%-!\"5.Q\"?/A\"D/A\"D/A\"D/A\"D/Q\"F/!\"?+Q\"+*1!Y(1!R&!AK&1Q@$AQ;#AA8#!!:#Q!9\"A!:\"A!9#1Q8\"!!1\"!11\"1A5\"112#!!2#Q!2\"A!1\"!!1#!14#AQ4#1!;'!!O*A\"#-Q\"8/Q\"F0Q\"M0Q\"M0Q\"M0Q\"M01\"I1!\"N0A\"K01\"I0!\"H/Q\"E01\"I0A\"K11\"O3A\"^4Q#+5!#*6!#+5Q#-4Q#(4Q#'4Q#'4Q#%4Q#%4Q#%4Q#%4Q#%4Q#(51#&51#'51#&4!#!3A\"_3Q\"`41#\"41#\"4!#!4Q#%4Q#&4Q#&4A##41##3A\"^3A\"^4!#!3A\"_4A#$4!#!41##4!#!3Q\"`31\"Z3A\"Z3A\"^3!\"]31\"^31\"^4!#!3A\"^41\"Y3Q\"^3!\"[3!\"[31\"X3A\"[41\"`31\"Z3A\"Y31\"Z31\"Y4!\"[31\"[41\"X31\"X3A\"Y2Q\"Y2Q\"W21\"W2Q\"Z2Q\"Y1Q\"T3!\"S3!\"S1Q\"T2!\"U2Q\"T2A\"X3!\"U3!\"Y3Q\"U2Q\"[31\"W2Q\"[3Q\"U3!\"Y31\"]3Q\"Z3Q\"Y3Q\"`3Q\"X31\"^3!\"]3Q\"Y2Q\"[31\"^2Q\"[31\"]3A\"_3Q\"`3!\"[3Q\"[3!\"]4A\"\\3Q\"`3Q\"_3Q\"`3A\"_3A\"^3Q\"Z3Q\"`2Q\"[4!#!4!#\"4A#$3Q#!41#%4A#$3Q\"`3A\"^3A\"^3Q\"_3Q\"`3Q\"`4Q#'4Q#'4Q#%4Q#%4!#\"4A##3Q\"`3Q\"`4Q#%4Q#%4Q#)5Q#)6!#\"4Q#)5A#)41#!11\"P/1\"C/Q\"E0!\"G1!\"M2Q\"Y41\"\\51#*4Q#*2A\"X1!\"O0Q\"M01\"J01\"J,1\"-*!!\\)!!V)!!V(!!S'A!P'A!P'A!P(!!V(Q![)A!Y(A!S'A!P'A!P'!!K%A!C#Q1;#!A3#1Q1\"!17#115#1A1\"!11\"1A6\"Q15#1A.!QQ4\"112\"Q!1\"1!0$A1E%Q!J)!!Y-!\"3/!\"@0Q\"M01\"I0Q\"M0Q\"M0Q\"M0A\"K0A\"L0!\"G/Q\"E0!\"G0!\"G0!\"G0!\"G/Q\"E1A\"Q3Q##4Q#)4Q#%5A#+61#'5!#)4Q#%41#\"3Q\"_4A##4Q#!4!\"_4Q#%4Q#%4Q#,61#\"4Q#)3Q\"_3Q\"`3Q\"`41#\"31\"^3Q\"`4Q#%4Q#%4A##41##3Q\"`3!\"\\3A\"^3!\"]3!\"]3Q#!4!#!4!#\"4!#\"31\"]31\"]2Q\"[4!\"Z3!\"]3!\"]3Q\"_3!\"]3!\"]31\"^3A\"]31\"X3Q\"]3Q\"[3!\"]3!\"[3Q\"[3A\"W3A\"^4!\"Z31\"W2Q\"[3!\"Y3!\"Y3A\"W3A\"W2Q\"T21\"X3!\"T3!\"Y21\"T2Q\"U2A\"X1Q\"S2!\"V2!\"Q2Q\"S2!\"S21\"R1Q\"R2Q\"X2A\"U2A\"W3Q\"U3!\"X3A\"V31\"W2Q\"Z2Q\"Z3Q\"X3!\"[3A\"W3A\"[3!\"Y4!\"\\3Q\"[41\"`3Q\"W2Q\"[3A\"W2Q\"[3Q\"Y2Q\"Z2Q\"Z2Q\"[3!\"]3!\"]31\"]3Q\"`3!\"\\3!\"\\3!\"\\2Q\"\\2Q\"[31\"^3Q\"_4!#\"4!#!3A\"^3Q#!3Q\"`3!\"\\3!\"]31\"]4A##4Q#%4Q#%4Q#%41##4Q#%41##3A\"^4!#!41#\"4!#!5!#&41#%4Q#)4Q#%4Q#%4A##1A\"R/Q\"F/!\"@/!\"A/1\"A/!\"A0!\"G0!\"H0Q\"L1!\"N0Q\"M0A\"K0A\"J0!\"G/A\"D-!\"2*A\"!)1!X&Q!K&1!?#Q14\"AA/$111#1Q2#1Q1\"QA/\"QA/#1A/\"1A0#AA5\"AA4\"1Q5#!A.\"!11\"!!.#114\"1!2$!A6$!A@$1A;%11C(Q!T)Q!]+A\"*/1\"D/A\"D/Q\"F0Q\"L0!\"H0A\"K/Q\"E/1\"B.1\";-Q\"7-Q\"7/A\"D/Q\"F/!\"@/Q\"F/Q\"F0Q\"M3A\"_4Q#'4Q#(4Q#&4Q#%4!#!3A\"]11\"P01\"I2A\"Y4A#$4Q#%4!#!4Q#%4Q#%4Q#%4A#%4!#\"3Q#!3Q\"`4!#!31\"^41##4A##4A##41#\"41#\"3Q#!3Q\"`3!\"]3Q\"`3!\"\\3Q\"`3A\"_3Q\"`4!#!3Q\"_3!\"\\3A\"Z31\"^31\"\\3Q\"]3!\"\\3A\"Z3Q\"`3A\"[4!\"Y3!\"\\31\"Y31\"W3!\"[3A\"Y31\"X3A\"Z3A\"W31\"[4A\"X3!\"Y3A\"W3Q\"U4!\"]31\"X3!\"Y3!\"Y3!\"X31\"U1Q\"S31\"R2A\"V31\"U1Q\"T1A\"S11\"Q21\"Q2!\"V31\"T2Q\"W2!\"S2A\"W21\"T2A\"V2Q\"Y31\"X2A\"Z2Q\"Z3!\"X31\"W3A\"Y41\"]31\"W4!\"X3!\"Y3A\"V4!\"X3!\"Y2Q\"Z3A\"_31\"]4!\"X3Q\"_3Q\"W3A\"^31\"]3A\"_41\"\\3Q\"_31\"\\41\"]31\"Z4A\"\\31\"\\41#!3A\"_4!#!3A\"_41#\"4Q#%3!\"]3!\"\\3Q\"`31\"]31\"]3Q\"`3A\"_4Q#%4Q#%4A##4!#!41##41#\"31\"^31\"^3A\"^41##4!#!4Q#%4Q#%4Q#%4Q#%4A#$2A\"W/Q\"E0!\"G/1\"B0!\"H0!\"H/1\"C0!\"G/A\"D/A\"D0Q\"L0Q\"M0A\"J0A\"K0!\"G/Q\"F.!\"9+Q\"))A!Z'A!P&11G\"QA6$1A4\"1!7\"AA4\"QQ1\"1A0\"!14\"1!1\"AA1\"!Q5#!A.!Q!5$1Q?%1!B&Q1K'!1O(A!T)!!V)!!V)1!X+!\"&-!\"6-1\"9,Q\"3+A\"'+1\"&+A\"'+A\"'+!\"#*A\"!)A![)1!X*Q\"#.1\"<0!\"H01\"I01\"I1A\"R41#\"4Q#%4Q#$4A#%4!\"X11\"P0Q\"M/1\"B/!\"@1A\"R31\"]3Q\"`4Q#%4Q#%4Q#%4!#\"4A#$3Q\"`3A\"_3!\"]3!\"\\3A\"_3A\"_4!#!4Q#%41##4!#\"4!#!3!\"\\2Q\"[3Q\"Y3!\"[3!\"]3!\"\\41#\"31\"]2Q\"[31\"\\41\"]4A\"\\31\"W3A\"[3!\"Y3!\"\\4!\"]3!\"\\31\"Y2Q\"[3Q\"X3A\"Z31\"^3Q\"W31\"Z4!\"\\3Q\"[4!\"Z3!\"Y3!\"Y3!\"Y31\"W3Q\"U31\"X4!\"T2Q\"X3!\"Y2Q\"X1Q\"T1Q\"T2A\"V31\"S1Q\"T2!\"V11\"P1Q\"T11\"P1Q\"T1Q\"T1Q\"T21\"Q21\"X1Q\"T2!\"W1A\"R3A\"W2A\"R2Q\"T3A\"V3A\"W2Q\"[3A\"W2Q\"[31\"W3A\"W2Q\"[2Q\"Z3Q\"[3Q\"Y3Q\"Y3Q\"\\3!\"X31\"W3!\"Y3!\"X3Q\"Y3A\"Y2Q\"[3!\"\\3Q\"Y3!\"\\3!\"[31\"W3!\"Y3Q\"T3!\"\\3!\"\\3Q#!3Q\"`3Q\"_3Q#!3Q\"`31\"]3A\"Y3!\"]31\"^3A\"^31\"]3!\"]4A#$4A#$4A#$3Q#!4!#\"41#\"3!\"]3!\"[31\"X4!#!4!#\"41#\"4Q#%4Q#%4Q#%4Q#%11\"O/A\"C/Q\"F/1\"B/1\"B/1\"B/1\"B/1\"C/Q\"F/1\"B0!\"G0A\"K0!\"G01\"I01\"I/A\"C/A\"D-1\"4+Q\")*!!](A!T'!!E%11>$A1=#117#110\"QQ3\"112\"!!1\"!13#A1.#Q15%!!>&A!D%A1C&QAH&Q1K'1!K'A!M'A!M'Q!R&Q!N'Q!R)!!V)!!V(A!T(Q!U)!!V)A!Z+1\"'-1\"4/Q\"F0!\"G/Q\"E0!\"H2!\"V3!\"[2Q\"X1Q\"S01\"J/!\"@/A\"D.Q\"?.Q\"?/A\"C2A\"W4A#$4Q#%4Q#%4Q#%4A#$3Q#!3Q\"`3!\"\\3Q\"`2Q\"[3A\"_3Q\"_31\"^3A\"_4Q#%4!#!31\"]3A\"^2A\"Z31\"^31\"^2A\"Z3Q\"^41\"_3Q\"_3!\"\\3Q#!3!\"]3Q\"Y2Q\"Z2Q\"[2Q\"[3A\"\\3!\"Y2Q\"[2Q\"[3Q\"[31\"Z4!\"X3A\"[4!\"W31\"]3!\"\\3Q\"Y2Q\"[3A\"W31\"W2A\"U3!\"Y3A\"W3A\"W2Q\"[2!\"U21\"X21\"R2A\"W1Q\"S1Q\"T1Q\"T1Q\"T1Q\"U11\"P1!\"O1Q\"T11\"P11\"P1!\"O1Q\"T1Q\"T1Q\"P1A\"Q2A\"Q21\"U1Q\"T2!\"S3!\"V2!\"U2A\"X2Q\"Z3A\"V3A\"V2Q\"[2Q\"Y3!\"Y31\"X31\"W3A\"V3Q\"V3!\"Z2Q\"[3!\"Z3A\"]31\"\\4A\"_3Q\"W3A\"Y4!\"[31\"[2Q\"Z3!\"\\2Q\"\\2Q\"[2Q\"[3!\"]31\"Y3A\"Z3!\"Z3!\"\\4!#!4!#!31\"^3A\"_31\"\\2A\"Z3A\"]3A\"]2Q\"[3A\"_2Q\"\\3Q\"`41##4A#$31\"^4!#\"3Q\"`3A\"_21\"V/Q\"F0Q\"K2A\"X3!\"[3A\"^4Q#%4A#$41##3A\"]01\"I/1\"C/!\"@.Q\"?/Q\"E.1\"=+A\"+*Q\"&,1\"1-A\"7.1\";.!\":-Q\"7.1\"<.1\"<.1\"=/A\"E.1\"<,Q\"2)A!Y(Q!V)!!V(!!Q(!!P'!!M%Q1J%A1?#QQ?#Q!9\"1!5\"1A/\"1A/\"AA2\"!11\"!12\"QA1\"AA0#A11$!17&1!>&A!M(1!T(!!S)1!X*1!_,1\"-.!\":/A\"D/1\"C/Q\"F/A\"D/Q\"F/1\"B/A\"D/A\"D0!\"G0!\"G/1\"C.Q\"?/!\"@/!\"A2!\"U3!\"[4Q#%4!#!41#\"41##3A\"_3Q\"`3!\"\\3!\"Z4!\"]41\"]3A\"^4!#!4!#!41#\"3Q\"`3!\"\\31\"^3!\"]31\"[41\"Z3Q\"W3!\"]31\"^31\"]31\"\\3!\"\\2Q\"[3!\"[4!\"]3A\"W4!\"\\3A\"X4!\"[31\"[31\"Y4!\"\\3!\"Y3A\"[2Q\"Z3!\"Y3!\"X3!\"Y3A\"X3Q\"V31\"Y2Q\"[3!\"Y31\"W2A\"W2Q\"Y2!\"V1Q\"S31\"V2A\"W31\"T1Q\"T1Q\"S1Q\"Q1Q\"T1Q\"P1Q\"T1Q\"U1A\"S2Q\"Q11\"Q11\"Q1A\"R1A\"Q1!\"O11\"P2A\"V1Q\"R1Q\"T11\"P1Q\"T3!\"V2A\"R3!\"U21\"S2A\"V2!\"V1Q\"U2Q\"S3!\"X3Q\"U2!\"V31\"X2!\"W2Q\"X4!\"T41\"V3Q\"W3!\"X3!\"Y3A\"V2Q\"[31\"X31\"W3A\"[3Q\"]3Q\"X2Q\"\\2Q\"[31\"Z4Q\"Y3!\"X3Q\"[41\"W3Q\"^2A\"Z3A\"_31\"^31\"^31\"]2A\"Z3Q\"]3A\"]4!\"[3A\"^3A\"_31\"]2Q\"[3A\"_4Q#%4!#!3Q\"`3Q\"`2A\"Z0Q\"M.Q\"?/A\"E/Q\"E0Q\"L11\"O21\"V3!\"]4Q#$3Q\"`1Q\"T/Q\"E/A\"E.Q\"?.Q\"?-1\"4*1\"\"(!!R(!!R)!!V)!!V)!!V)!!V)A![)A!`*A\"#*A\"#)Q!\\)1!X)!!V)!!V)!!V(A!T(Q!U(1!S'Q!R)!!V'1!P&!!J$!!>#!!3\"!15#A14!QA2\"Q16%A1A%Q1E'A!N(Q!U(A!T*!!]+Q\",-1\"7/A\"E/1\"B/Q\"E/A\"E/A\"E/A\"C.Q\"?/!\"A/1\"B.Q\"?.Q\"?/1\"B/1\"B/1\"C.Q\"?/A\"C2Q\"Y3!\"\\3Q\"`4!#!4!#!3A\"_3!\"]3!\"]3A\"_4!\"Y3!\"X3A\"^2A\"Z3Q\"`3!\"]3!\"]3A\"^3Q\"`2Q\"[4!\"Y3Q\"Z3A\"W31\"]2Q\"[3A\"_31\"^2A\"Z2A\"Z4!#!4!\"Y3A\"[2Q\"Z31\"X3A\"_31\"X2Q\"[2Q\"\\3A\"Y3!\"]4!\"X41\"W3A\"V3A\"V31\"X2Q\"[2Q\"[2Q\"Y3Q\"U3!\"X3A\"V2!\"W31\"T31\"T2Q\"U2Q\"W2A\"Q1Q\"R11\"Q21\"Q2!\"R2A\"T1A\"P2Q\"U11\"Q1A\"R1!\"N11\"Q11\"Q1Q\"T1!\"O1A\"R11\"Q1Q\"S11\"Q1A\"R1Q\"T3!\"R21\"Q11\"Q1Q\"U1Q\"T1A\"Q21\"Q1Q\"T21\"X21\"X2A\"W21\"T2A\"V2!\"R31\"W2A\"Y2A\"X2Q\"Z2Q\"Z31\"W31\"\\3!\"Y3Q\"U3Q\"U2Q\"Z3Q\"T31\"X3Q\"Z4!\"W3Q\"\\2Q\"[31\"\\3!\"\\3A\"]3!\"X4!\"X4!\"Y3A\"\\3!\"Z3!\"]3Q\"`3Q\"_3!\"\\2Q\"[2Q\"Z3Q\"W3A\"Z4!\"\\3!\"]2A\"Z3!\"]4!#!3A\"_3!\"\\4!#\"31\"]1Q\"U01\"I/1\"B/!\"@.Q\"?/!\"@/Q\"F/1\"B0Q\"M11\"Q0A\"L/A\"C/A\"E.Q\"?.Q\"?.Q\"?.!\";+A\"))1!Z)!!V(!!R(A!T(A!T(A!T(!!R(!!R(!!Q&A!I'!!K&11H%11C'!!H&A!D%1!B$A!7\"!Q.%Q!8$Q1<%11=$QA;&A!B'Q!Q(Q!U(!!R(!!R)!!X)A!^+A\"(.Q\">/!\"A/1\"C/!\"@/!\"@/1\"B/!\"@/!\"@/1\"C.Q\"?.Q\"@.A\">.Q\"?/1\"C/1\"B.Q\"?/!\"@/1\"C1Q\"U3A\"^41#\"41#\"4!#!31\"]3A\"^3A\"Z2A\"U3!\"V3A\"V2Q\"[3!\"\\3!\"\\31\"]4!#!31\"^3Q\"`4!\"\\31\"]4!\"\\31\"]3!\"\\3!\"\\3A\"Z4!\"\\31\"Y4Q\"[4!\"^41\"[4!\"T3!\"Y31\"W4A\"Z31\"X3A\"V4!\"\\31\"^3Q\"V3Q\"]3A\"V2Q\"Z21\"X31\"X2Q\"Z3A\"V3A\"V21\"X31\"U2A\"Y21\"X21\"V2A\"T21\"V2!\"V1Q\"T21\"X1Q\"T2!\"U2Q\"P1Q\"T1Q\"T1Q\"T1Q\"U11\"O2Q\"Q1A\"Q2Q\"R11\"Q1Q\"S0Q\"L1A\"R1!\"N1A\"S1Q\"U11\"Q1A\"R11\"P1A\"S21\"S2!\"V1A\"Q1Q\"S1Q\"T21\"T11\"P2!\"V1A\"P21\"V2!\"S3Q\"U2A\"X2!\"V2A\"X1Q\"T2A\"S3!\"Y2!\"V4!\"V3!\"Y2Q\"Y3Q\"U31\"W2Q\"Y2Q\"Z3!\"Y3!\"Y3!\"X2Q\"[4!\"X3A\"Y3A\"[31\"Y4!\"]4!\"T4!\"W3!\"Y3Q\"X4!\"]3Q\"[3!\"[2Q\"\\2A\"Z31\"Z4Q\"[3!\"Y4!\"X3A\"]3Q\"W2Q\"Z3A\"_2Q\"[31\"^3A\"^31\"^21\"X0A\"L/1\"B.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/1\"B0!\"H/!\"@/1\"C/A\"D/Q\"E/!\"@/Q\"E.Q\"?.!\":-1\"4+!\"$)A!Z)!!W'Q!R(A!T(A!T&1!K%A!@#Q18\"AA2\"AA0#11<$A!@'A!K&Q!H'A!K'A!N(1!S)!!V(Q!U(1!S'1!P(A!T(1!S(1!S)Q!],!\"2.!\":.1\";/!\"A.1\";,1\"1+!\"$+!\"$*A\"\"*A\"!*Q\"$)A!^*A\"#.!\":.Q\"?.Q\"?/!\"A/1\"B11\"Q2!\"V4!#!4!#\"3Q\"`2Q\"Z2Q\"Z1!\"N0!\"G0!\"D01\"J2A\"Y3Q\"^3!\"[3Q\"_31\"]31\"^2Q\"[3!\"Z3Q\"Y3A\"Z4A\"[3!\"Y4!\"X3Q\"Y3A\"Y3Q\"W2Q\"[2Q\"[31\"[2Q\"Y3A\"W2Q\"Z3A\"V2Q\"[31\"Y3Q\"^31\"]3A\"Y2Q\"Z2Q\"Y3!\"Y3!\"S21\"W21\"X31\"W31\"W31\"X3Q\"T3!\"U2A\"X1Q\"S1A\"S1Q\"R21\"T2!\"U1A\"Q21\"Q2!\"Q11\"P11\"P1Q\"T11\"P1!\"O11\"P1A\"Q1A\"R11\"Q11\"Q1A\"Q1A\"S11\"Q11\"P1!\"O11\"Q11\"P11\"P11\"P11\"P1Q\"T1A\"R1A\"Q1!\"N1A\"R11\"Q1Q\"S1Q\"T1Q\"T11\"P2Q\"U21\"V1A\"R21\"X2A\"Q1Q\"T2!\"R21\"R21\"X1Q\"T2Q\"T3!\"Y3Q\"U31\"W31\"W31\"X3!\"X3Q\"U2Q\"[3A\"V3Q\"U41\"Z31\"^31\"W3!\"[41\"X2Q\"Z2A\"Z3!\"Y3A\"V31\"X3!\"X3Q\"\\41\"W31\"[2A\"Z31\"^2A\"Z3Q\"\\3!\"X31\"X3!\"\\3Q\"Y3!\"]3Q\"_31\"X2A\"Z31\"^3Q\"\\3A\"\\21\"W0!\"I.A\"=.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F/!\"A.Q\"?.Q\"?/A\"D/1\"B/Q\"F/1\"C.Q\"?.Q\"?.A\"=,1\".+1\"()A!['Q!Q(A!U(Q!U)!!V'1!M&Q!A%Q1D&!!E%A!C%Q1D&A!N'Q!Q'A!Q'A!Q(!!S(1!S)!!V(1!S)!!V(Q!U(A!U'A!Q(Q!U)!!V(1!S(1!S(1!S(1!S)!!V'Q!R'A!Q)1!Z,1\"-.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F1Q\"T2Q\"Z21\"V0Q\"M0Q\"M/Q\"F.Q\"?/A\"D0!\"H/!\"A0Q\"M3!\"\\2A\"Z4!\"Z3A\"]31\"X2A\"Z4!\"[3Q\"`3!\"[3Q\"[3A\"X2A\"Z3Q\"\\3Q\"]3Q\"[3!\"[3Q\"Y3Q\"\\3!\"Z3Q\"[2Q\"Z31\"W3!\"X3!\"X31\"X4A\"[41\"W3Q\"U3Q\"U3Q\"U3!\"X2A\"T31\"W2Q\"R1Q\"T2A\"Z31\"W2Q\"[2A\"Z1Q\"T1Q\"T3!\"T1Q\"T1Q\"T1Q\"T1A\"R1A\"R1Q\"T1Q\"T1Q\"T1Q\"T11\"P1Q\"T11\"P11\"Q1A\"R1!\"N1A\"R2!\"M0Q\"M1!\"N0Q\"M1!\"N1!\"N1A\"Q1!\"N1!\"N11\"P1!\"N1!\"N1!\"O1!\"O1Q\"T1!\"O1A\"R11\"Q1!\"N2A\"T2A\"U1A\"R1A\"R1!\"O1A\"R2Q\"V2A\"Q21\"X1A\"R2A\"R2A\"U21\"W2A\"X2A\"X31\"X31\"X2Q\"Z3!\"Y2Q\"Z21\"T2!\"U31\"U31\"W41\"U31\"Y31\"[3Q\"\\31\"]4!\"Y2Q\"Z31\"X31\"W31\"X3!\"X3!\"Y4!\"]3A\"V4!\"]31\"X31\"]31\"\\3A\"]3Q\"]3A\"Z41\"[4!\"U2Q\"Z31\"[4!\"Y3!\"[3!\"[3!\"\\2A\"Z3!\"S/Q\"F/!\"A/A\"D0!\"H0A\"J1!\"O1!\"O0A\"L/A\"C.Q\"?.Q\"?.1\"<.!\":.!\":.1\"=/A\"F.Q\"?.Q\"?-Q\"9,Q\"3*A!W(A!T(1!S(Q!U)!!V'Q!Q(A!T(!!P(!!P(!!S'A!Q'A!Q&A!I&!!>%Q!B&A!I&A!M'A!P(A!R)!!V)1!V(1!T)1!X)1!X)!!X(Q!V)!!W)A!]+!\"&.Q\"?.A\".1\"=.!\";,A\"5,A\"3-!\"+*A\"#*!!^)1!W(A!T)!!V)!!V)!!V(Q!U(Q!U(A!T(Q!U(Q!U)!!V*Q!X)!!Y*!!^*!!_)Q!^)Q\"\"*!\"%,!\")+1\")+Q\"),!\"-+!\"'*A\"#*A\"#,Q\"0-!\"2.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F0A\"K2!\"M2!\"O3Q\"R4!\"T3!\"X2A\"T1!\"O1Q\"T2A\"Z2A\"Z2A\"Z3A\"_3A\"_3!\"Y3!\"Y4A\"V3A\"[3!\"Y3!\"Y3!\"Y3!\"X3!\"\\4!\"Y4!\"Y2A\"Z3Q\"Y3!\"Z2A\"Z3A\"V2Q\"Y3!\"U3A\"V31\"X31\"X2Q\"Z31\"W3A\"V2A\"S3A\"V2!\"V1A\"R1A\"R1Q\"T1A\"R21\"W2A\"T21\"R2A\"S2!\"U2!\"V11\"P1A\"R1Q\"T2Q\"U1A\"S1A\"R11\"Q11\"Q1!\"O11\"P1Q\"T1!\"O1!\"O1!\"O1!\"O1A\"R11\"P1!\"O11\"Q0Q\"L1!\"N1!\"N1!\"N"; diff --git a/plug-ins/Encript_Decript/.cvsignore b/plug-ins/Encrypt_Decrypt/.cvsignore similarity index 67% rename from plug-ins/Encript_Decript/.cvsignore rename to plug-ins/Encrypt_Decrypt/.cvsignore index 655408a73c..8677f04b37 100644 --- a/plug-ins/Encript_Decript/.cvsignore +++ b/plug-ins/Encrypt_Decrypt/.cvsignore @@ -2,4 +2,4 @@ Makefile.in Makefile .deps _libs -Encript_Decript +Encrypt_Decrypt diff --git a/plug-ins/Encript_Decript/Encript_Decript.c b/plug-ins/Encrypt_Decrypt/Encrypt_Decrypt.c similarity index 55% rename from plug-ins/Encript_Decript/Encript_Decript.c rename to plug-ins/Encrypt_Decrypt/Encrypt_Decrypt.c index 5b0b7cff53..410d69dc8c 100644 --- a/plug-ins/Encript_Decript/Encript_Decript.c +++ b/plug-ins/Encrypt_Decrypt/Encrypt_Decrypt.c @@ -1,16 +1,19 @@ /********************************************************************** - * Encript_Decript Plug-In (Version 1.01, first public release) + ATTENTION: Plug-In Arguments Have Been Changed!!!!! + This version will not be fully backwards compatible + with the version 1.0x. Nevertheless it can encrypt and + decrypt version 1.0x images. +**********************************************************************/ + + +/********************************************************************** + * Encrypt_Decrypt Plug-In (Version 2.02) * Daniel Cotting (cotting@mygale.org) ********************************************************************** - * Official Homepage: http://www.mygale.org/~cotting - ********************************************************************** - * Homepages under construction: http://www.chez.com/cotting - * http://www.cyberbrain.com/cotting - * You won't be able to see anything yet, as I don't really have the - * time to build up these two sites :-( - * Have a look at www.mygale.org/~cotting instead! - ********************************************************************** - */ + * Official homepages: http://www.mygale.org/~cotting + * http://cotting.citeweb.net + * http://village.cyberbrain.com/cotting + *********************************************************************/ /* The GIMP -- an image manipulation program @@ -31,6 +34,11 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + +/********************************************************************** + * Include files + *********************************************************************/ + #include #include #include @@ -39,39 +47,49 @@ #include "gtk/gtk.h" #include "logo.h" -#define ENTRY_WIDTH 100 +/********************************************************************** + * Define constants + *********************************************************************/ -typedef struct { - gint password; - gint warningmessage; -} EncriptValues; +#define ENTRY_WIDTH 260 +/* Large Prime */ +#define MULT 1103515245l -typedef struct { - gint run; -} EncriptInterface; - - -/* Declare local functions. - */ +/********************************************************************** + * Declare some of the local functions + *********************************************************************/ + static void query(void); static void run(char *name, int nparams, GParam *param, int *nreturn_vals, GParam **return_vals); -static void drawEncript(GDrawable *drawable); -static gint encript_dialog(void); -static gint encript_warning_dialog(void); -static gint encript_enter_dialog(void); -static gint encript_no_last_val_dialog(void); -GtkWidget * encript_logo_dialog(void); +static void drawEncrypt(GDrawable *drawable); +static gint encrypt_dialog(void); +static gint encrypt_warning_dialog(void); +static gint encrypt_enter_dialog(void); +static gint encrypt_no_last_val_dialog(void); +GtkWidget * encrypt_logo_dialog(void); +/********************************************************************** + * Define types of structures + *********************************************************************/ +typedef struct { + char password[128]; + gint warningmessage; + gint compatibility; + gint remember; +} EncryptValues; -GtkWidget *maindlg; -GtkWidget *logodlg; -GtkTooltips *tips; -GdkColor tips_fg,tips_bg; +typedef struct { + gint run; +} EncryptInterface; + +/********************************************************************** + * Define structure and set their values + *********************************************************************/ GPlugInInfo PLUG_IN_INFO = { @@ -81,18 +99,44 @@ GPlugInInfo PLUG_IN_INFO = run, /* run_proc */ }; -static EncriptValues wvals = { - 0,1, +static EncryptValues wvals = { + "Enter password here.",1,0,0, }; /* wvals */ -static EncriptInterface bint = +static EncryptInterface bint = { FALSE /* run */ }; +/********************************************************************** + * Declare global variables + *********************************************************************/ + +GtkWidget *maindlg; +GtkWidget *logodlg; +GtkTooltips *tips; +GdkColor tips_fg,tips_bg; +/* This is initialized with the password or a part of the password. It is + used as the seed value in StandardRandom */ +long Seed; +/* Table for R250 number generator */ +long Table[250]; +/* Increment table - speeds R250 up, but not really needed in this case */ +unsigned char IncrementTable[250]; +/* Two Index values into R250 table */ +unsigned char Index1, Index2; + + +/********************************************************************** + * call MAIN() + *********************************************************************/ MAIN() +/********************************************************************** + * FUNCTION query + *********************************************************************/ + static void query(void) { @@ -101,27 +145,33 @@ query(void) { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, { PARAM_IMAGE, "image", "Input image (unused)" }, { PARAM_DRAWABLE, "drawable", "Input drawable" }, - { PARAM_INT8, "password", "Numeric password (used to encript and decript)" }, + { PARAM_STRING, "password", "Password (used to encrypt and decrypt)" }, { PARAM_INT8, "warning", "Disable warning message toggle (only in RUN_INTERACTIVE)" }, + { PARAM_INT8, "compatibility", "Use version 1.0x compatibility mode" }, + { PARAM_INT8, "remember", "Remember the password after execution" }, }; static GParamDef *return_vals = NULL; static int nargs = sizeof(args)/ sizeof(args[0]); static int nreturn_vals = 0; - gimp_install_procedure("plug_in_encript", - "Encript the image using a code, second call with same code decripts image.", + gimp_install_procedure("plug_in_encrypt", + "Encrypt the image using a code, second call with same code decrypts image.", "", "Daniel Cotting (cotting@mygale.org, http://www.mygale.org/~cotting)", "Daniel Cotting (cotting@mygale.org, http://www.mygale.org/~cotting)", "October, 1997", - "/Filters/Image/Encript & Decript", + "/Filters/Image/Encrypt & Decrypt", "RGB*, GRAY*, INDEXED*", PROC_PLUG_IN, nargs, nreturn_vals, args, return_vals); } +/********************************************************************** + * FUNCTION run + *********************************************************************/ + static void run(char *name, int nparams, @@ -136,6 +186,7 @@ run(char *name, GStatusType status = STATUS_SUCCESS; gchar **argv; gint argc; + int iaa, expression; run_mode = param[0].data.d_int32; @@ -150,60 +201,149 @@ run(char *name, switch(run_mode) { case RUN_INTERACTIVE: /* Possibly retrieve data */ - gimp_get_data("plug_in_encript", &wvals); + gimp_get_data("plug_in_encrypt", &wvals); /* Get information from the dialog */ argc = 1; argv = g_new(gchar *, 1); - argv[0] = g_strdup("apply_encript"); + argv[0] = g_strdup("apply_encrypt"); gtk_init(&argc, &argv); gtk_rc_parse(gimp_gtkrc()); do { - if (!encript_dialog()) + if (!encrypt_dialog()) return; - } while ((wvals.password==0) && (succeeded=encript_enter_dialog())); + expression=((!strcmp(wvals.password,"Enter password here.") || + (wvals.compatibility&&(atoi(wvals.password)==0))) + && (succeeded=encrypt_enter_dialog())); + } while (expression); + if (!succeeded) return; if (wvals.warningmessage) - if (!encript_warning_dialog()) + if (!encrypt_warning_dialog()) return; break; case RUN_NONINTERACTIVE: /* Make sure all the arguments are present */ - if (nparams != 5) + if (nparams != 7) status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS) - wvals.password = param[3].data.d_int8; + if (status == STATUS_SUCCESS) { + strcpy(wvals.password,param[3].data.d_string); wvals.warningmessage = param[4].data.d_int8; + wvals.compatibility = param[5].data.d_int8; + wvals.remember = param[6].data.d_int8; + } break; case RUN_WITH_LAST_VALS: /* Possibly retrieve data */ - gimp_get_data("plug_in_encript", &wvals); - encript_no_last_val_dialog(); - return; + gimp_get_data("plug_in_encrypt", &wvals); + argc = 1; + argv = g_new(gchar *, 1); + argv[0] = g_strdup("apply_encrypt"); + gtk_init(&argc, &argv); + gtk_rc_parse(gimp_gtkrc()); + if (!wvals.remember) { + encrypt_no_last_val_dialog(); + return; + } break; default: break; } if (status == STATUS_SUCCESS) { gimp_tile_cache_ntiles(2 *(drawable->width / gimp_tile_width() + 1)); - gimp_progress_init("Encripting Image. Please wait..."); - drawEncript(drawable); -/* Delete active Password */ - wvals.password=0; + gimp_progress_init("Encrypting image. Please wait..."); + drawEncrypt(drawable); + if (!wvals.remember){ + /* Delete active Password */ + for (iaa=0; iaa<128; iaa++) wvals.password[iaa] = 0; + } if(run_mode != RUN_NONINTERACTIVE) gimp_displays_flush(); if(run_mode == RUN_INTERACTIVE) - gimp_set_data("plug_in_encript", &wvals, sizeof(EncriptValues)); + gimp_set_data("plug_in_encrypt", &wvals, sizeof(EncryptValues)); values[0].data.d_status = status; gimp_drawable_detach(drawable); } } + + +/********************************************************************** + * FUNCTIONS for the random number generator + *********************************************************************/ + +/* Code provided by Pascal Schuppli, Worb (Switzerland) + Fast high security encryption based on two 'random' number generators + Sets up the increment table and the two index pointers */ +void InitGenerator() { + int i; + for (i=0; i<249; i++) IncrementTable[i] = i+1; + IncrementTable[249] = 0; + Index1 = 0; + Index2 = 103; +} + +/* StandardRandom is used to initialize the R250 random number table. It is + neither fast nor very good. */ +long StandardRandom() { + + unsigned long lo, hi, ll, lh, hh, hl; + + lo = Seed & 0xFFFF; + hi = Seed >> 16; + Seed = Seed * MULT + 12345; + ll = lo*(MULT & 0xFFFF); + lh = lo*(MULT >> 16); + hl = hi*(MULT & 0xFFFF); + hh = hi*(MULT >> 16); + return ((ll + 12345) >> 16) + lh + hl + (hh << 16); +} + +/* Fill R250 table. Use two seeds (64 bit encoding) + This is where most of the processing power goes when trying to break an + encrypted file. Because StandardRandom is not very fast, and because it is + called 500 times, this takes the CPU a couple thousand cycles. The table + needed to decrypt a file thus can't be constructed without serious delays, + which is the whole point of high security encryption. */ +void FillTable(long FirstSeed, long SecondSeed) { + int i; + /* Construct table with first seed */ + Seed = FirstSeed; + for (i=0; i<250; i++) + Table[i] = StandardRandom(); + + /* Xor second seed into table. Not sure whether this makes the random numbers + better or worse, but it takes time */ + Seed = SecondSeed; + for (i=0; i<250; i++) + Table[i] ^= StandardRandom(); + +} + +/* Returns a four-byte random number generated by 'xoring' two table entries */ +unsigned long R250Random() { + unsigned long ret; + ret = (Table[Index1] ^= Table[Index2]); + + Index1 = IncrementTable[Index1]; + Index2 = IncrementTable[Index2]; + return ret; +} + +/********************************************************************** + * FUNCTION drawEncrypt + *********************************************************************/ + static void -drawEncript(GDrawable *drawable) +drawEncrypt(GDrawable *drawable) { + char Password[128]; + + /* Take some primes to start with */ + long s1 = 17, s2 = 23; + GPixelRgn srcPR, destPR; gint width, height; gint bytes; @@ -216,7 +356,33 @@ drawEncript(GDrawable *drawable) gfloat a, b, x, y; glong pixelpos, pos; guchar bgr_red, bgr_blue, bgr_green; + + if (!wvals.compatibility){ + for (i=0; i<128; i++) Password[i] = 1; + strcpy(Password, wvals.password); + InitGenerator(); + + /* The hash algorithm should make sure that the hash codes it generates + differ so that code breakers cannot concentrate on a certain range of + seeds to speed up the process of breaking the code. + + Hash up keyword, -> create two four-byte seeds */ + + for (i=0; i=0; i--) { + s2 ^= *(long *)&Password[i]; + s2 <<= 3; + } + + /* Generate table with hash value */ + FillTable(s1, s2); + } + + gimp_palette_get_background(&bgr_red, &bgr_green, &bgr_blue); gimp_drawable_mask_bounds(drawable->id, &x1, &y1, &x2, &y2); @@ -235,9 +401,10 @@ drawEncript(GDrawable *drawable) src = g_malloc((x2-x1)*(y2-y1)*bytes); dest = g_malloc((x2-x1)*(y2-y1)*bytes); gimp_pixel_rgn_get_rect(&srcPR, src, x1, y1, regionwidth, regionheight); - - password=wvals.password; - srand(password); + if (wvals.compatibility) { + password=atoi(wvals.password); + srand(password); + } for(col = 0; col < regionwidth; col++) { dx = (gfloat)col - a; for(row = 0; row < regionheight; row++) { @@ -249,7 +416,12 @@ drawEncript(GDrawable *drawable) iy=(int)y; pos = ((gint)(iy)*regionwidth + (gint)(ix)) * bytes; for(i = 0; i < bytes; i++) { - dest[pixelpos+i] = src[pos+i] ^(int)(rand()*255)^(int)(rand()*255); } + if (!wvals.compatibility) { + dest[pixelpos+i] = src[pos+i]^R250Random(); + } else { + dest[pixelpos+i] = src[pos+i] ^(int)(rand()*255)^(int)(rand()*255); + } + } } if(((gint)(regionwidth-col) % 5) == 0) gimp_progress_update((gdouble)col/(gdouble)regionwidth); @@ -264,32 +436,42 @@ drawEncript(GDrawable *drawable) gimp_drawable_update(drawable->id, x1, y1,(x2 - x1),(y2 - y1)); } +/********************************************************************** + * FUNCTIONS: callbacks + *********************************************************************/ + static void -encript_close_callback(GtkWidget *widget, gpointer data) +encrypt_close_callback(GtkWidget *widget, gpointer data) { gtk_main_quit(); } static void -encript_ok_callback(GtkWidget *widget, gpointer data) +encrypt_ok_callback(GtkWidget *widget, gpointer data) { bint.run = TRUE; gtk_widget_destroy(GTK_WIDGET (data)); } static void -encript_logo_ok_callback(GtkWidget *widget, gpointer data) +encrypt_logo_ok_callback(GtkWidget *widget, gpointer data) { gtk_widget_set_sensitive (maindlg, TRUE); gtk_widget_destroy(logodlg); } static void -encript_about_callback(GtkWidget *widget, gpointer data) +encrypt_about_callback(GtkWidget *widget, gpointer data) { gtk_widget_set_sensitive (maindlg, FALSE); - encript_logo_dialog(); + encrypt_logo_dialog(); +} + +static void +encrypt_entry_callback(GtkWidget *widget, gpointer data) +{ + strcpy(wvals.password,gtk_entry_get_text(GTK_ENTRY(widget))); } static void @@ -306,11 +488,9 @@ toggle_update (GtkWidget *widget, *toggle_val = FALSE; } -static void -encript_entry_callback(GtkWidget *widget, gpointer data) -{ - wvals.password = atof(gtk_entry_get_text(GTK_ENTRY(widget))); -} +/********************************************************************** + * FUNCTION set_tooltip + *********************************************************************/ static void set_tooltip (GtkTooltips *tooltips, GtkWidget *widget, const char *desc) @@ -319,8 +499,12 @@ set_tooltip (GtkTooltips *tooltips, GtkWidget *widget, const char *desc) gtk_tooltips_set_tips (tooltips, widget, (char *) desc); } +/********************************************************************** + * FUNCTIONS: encrypt_dialog + *********************************************************************/ + static gint -encript_dialog() +encrypt_dialog() { GtkWidget *dlg; GtkWidget *label; @@ -330,17 +514,18 @@ encript_dialog() GtkWidget *frame; GtkWidget *vbox; GtkWidget *hbox; - gchar buffer[12]; + gchar buffer[128]; bint.run=FALSE; + + dlg = maindlg = gtk_dialog_new(); - gtk_window_set_title(GTK_WINDOW(dlg), "Encript&Decript (cotting@mygale.org)"); + gtk_window_set_title(GTK_WINDOW(dlg), "Encrypt & Decrypt "); gtk_window_position(GTK_WINDOW(dlg), GTK_WIN_POS_MOUSE); gtk_signal_connect(GTK_OBJECT(dlg), "destroy", - (GtkSignalFunc)encript_close_callback, + (GtkSignalFunc)encrypt_close_callback, NULL); - frame = gtk_frame_new("Parameter Settings"); gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); gtk_container_border_width(GTK_CONTAINER(frame), 10); @@ -349,19 +534,38 @@ encript_dialog() gtk_container_border_width(GTK_CONTAINER(vbox), 10); gtk_container_add(GTK_CONTAINER(frame), vbox); - /* use black as foreground: */ - tips = gtk_tooltips_new (); - tips_fg.red = 0; - tips_fg.green = 0; - tips_fg.blue = 0; - /* postit yellow (khaki) as background: */ - gdk_color_alloc (gtk_widget_get_colormap (frame), &tips_fg); - tips_bg.red = 61669; - tips_bg.green = 59113; - tips_bg.blue = 35979; - gdk_color_alloc (gtk_widget_get_colormap (frame), &tips_bg); - gtk_tooltips_set_colors (tips,&tips_bg,&tips_fg); + /* use black as foreground: */ + tips = gtk_tooltips_new (); + tips_fg.red = 0; + tips_fg.green = 0; + tips_fg.blue = 0; + /* postit yellow (khaki) as background: */ + gdk_color_alloc (gtk_widget_get_colormap (frame), &tips_fg); + tips_bg.red = 61669; + tips_bg.green = 59113; + tips_bg.blue = 35979; + gdk_color_alloc (gtk_widget_get_colormap (frame), &tips_bg); + gtk_tooltips_set_colors (tips,&tips_bg,&tips_fg); + hbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); + + label = gtk_label_new("Password: "); + gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0); + gtk_widget_show(label); + + entry = gtk_entry_new(); + gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, FALSE, 0); + gtk_widget_set_usize(entry, ENTRY_WIDTH, 0); + sprintf(buffer, "%s", wvals.password); + gtk_entry_set_text(GTK_ENTRY(entry), buffer); + gtk_signal_connect(GTK_OBJECT(entry), "changed", + (GtkSignalFunc)encrypt_entry_callback, + NULL); + gtk_widget_show(entry); + set_tooltip(tips,entry,"Here, you can specify your password. To decrypt your image, just enter the value you used for the encryption. Unless you use version 1.0x compatibility (numeric passwords), the password can contain any characters."); + + gtk_widget_show(hbox); toggle = gtk_check_button_new_with_label ("Show warning message"); gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); @@ -370,27 +574,25 @@ encript_dialog() &wvals.warningmessage); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), wvals.warningmessage); gtk_widget_show (toggle); - set_tooltip(tips,toggle,"If this option is enabled, a warning message will be displayed every time you encript/decript an image. Make sure to read these warnings at least once."); + set_tooltip(tips,toggle,"If this option is enabled, a warning message will be displayed every time you encrypt/decrypt an image. Make sure to read these warnings at least once."); - hbox = gtk_hbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); + toggle = gtk_check_button_new_with_label ("Enable version 1.0x compatibility"); + gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect (GTK_OBJECT (toggle), "toggled", + (GtkSignalFunc) toggle_update, + &wvals.compatibility); + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), wvals.compatibility); + gtk_widget_show (toggle); + set_tooltip(tips,toggle,"If this option is enabled, the encryption/decryption will be compatible with the version 1.0x plug-in."); - label = gtk_label_new("Numeric password (Integer): "); - gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0); - gtk_widget_show(label); - - entry = gtk_entry_new(); - gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); - gtk_widget_set_usize(entry, ENTRY_WIDTH, 0); - sprintf(buffer, "%i", wvals.password); - gtk_entry_set_text(GTK_ENTRY(entry), buffer); - gtk_signal_connect(GTK_OBJECT(entry), "changed", - (GtkSignalFunc)encript_entry_callback, - NULL); - gtk_widget_show(entry); - set_tooltip(tips,entry,"Here, you can specify your numeric password. To decript your image, just enter the value you used for the encription."); - - gtk_widget_show(hbox); + toggle = gtk_check_button_new_with_label ("Remember password"); + gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect (GTK_OBJECT (toggle), "toggled", + (GtkSignalFunc) toggle_update, + &wvals.remember); + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), wvals.remember); + gtk_widget_show (toggle); + set_tooltip(tips,toggle,"If this option is enabled, the password will be remembered for a further encryption/decryption."); gtk_widget_show(vbox); gtk_widget_show(frame); @@ -398,14 +600,14 @@ encript_dialog() button = gtk_button_new_with_label("OK"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_signal_connect(GTK_OBJECT(button), "clicked", - (GtkSignalFunc)encript_ok_callback, + (GtkSignalFunc)encrypt_ok_callback, dlg); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), button, TRUE, TRUE, 0); gtk_widget_grab_default(button); gtk_widget_show(button); - set_tooltip(tips,button,"Close the dialog box and encript/decript your image with the specified password."); + set_tooltip(tips,button,"Close the dialog box and encrypt/decrypt your image with the specified password."); button = gtk_button_new_with_label("Cancel"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); @@ -420,7 +622,7 @@ encript_dialog() button = gtk_button_new_with_label("About..."); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_signal_connect(GTK_OBJECT(button), "clicked", - (GtkSignalFunc)encript_about_callback,button); + (GtkSignalFunc)encrypt_about_callback,button); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), button, TRUE, TRUE, 0); gtk_widget_show(button); @@ -434,8 +636,12 @@ encript_dialog() return bint.run; } +/********************************************************************** + * FUNCTION encrypt_warning_dialog + *********************************************************************/ + static gint -encript_warning_dialog() +encrypt_warning_dialog() { GtkWidget *dlg; GtkWidget *label; @@ -450,19 +656,19 @@ encript_warning_dialog() gtk_window_set_title(GTK_WINDOW(dlg), "Warning"); gtk_window_position(GTK_WINDOW(dlg), GTK_WIN_POS_MOUSE); gtk_signal_connect(GTK_OBJECT(dlg), "destroy", - (GtkSignalFunc)encript_close_callback, + (GtkSignalFunc)encrypt_close_callback, NULL); button = gtk_button_new_with_label("OK"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_signal_connect(GTK_OBJECT(button), "clicked", - (GtkSignalFunc)encript_ok_callback, + (GtkSignalFunc)encrypt_ok_callback, dlg); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), button, TRUE, TRUE, 0); gtk_widget_grab_default(button); gtk_widget_show(button); - set_tooltip(tips,button,"Proceed with the encription/decription."); + set_tooltip(tips,button,"Proceed with the encryption/decryption."); button = gtk_button_new_with_label("Cancel"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); @@ -472,7 +678,7 @@ encript_warning_dialog() gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), button, TRUE, TRUE, 0); gtk_widget_show(button); - set_tooltip(tips,button,"Cancel the encription/decription."); + set_tooltip(tips,button,"Cancel the encryption/decryption."); frame = gtk_frame_new("Please note:"); gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); @@ -485,21 +691,35 @@ encript_warning_dialog() hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); - - label = gtk_label_new("This plug-in uses a numeric password to encript your image.\n\n" + + if (wvals.compatibility) { + label = gtk_label_new("Version 1.0x compatibility mode:\n\n" + "This plug-in uses a numeric password to encrypt your image.\n\n" "Although it has been tested thoroughly, the author cannot be\n" "sure that it will work properly in all circumstances. Therefore\n" "the author doesn't want to take any responsibility in case of\n" - "data loss or any other damage, this plug-in could occasion.\n\n" + "data loss or any other damage this plug-in could cause.\n\n" "*******USE IT AT YOUR OWN RISK (AND ENJOY IT)!*******\n\n" "The plug-in could fail in the following situations, because of\n" "a possibly different implementation of the random number\n" - "generator: - Encript a picture and decript it on a different\n" - "plattform. OR - Decript a picture that was encripted on a\n" + "generator: - Encrypt a picture and decrypt it on a different\n" + "plattform. OR - Decrypt a picture that was encrypted on a\n" "computer with a different OS-version or a different math-lib.\n\n" "Remember to save your image in a non-destructive format!\n" "For indexed images GIF could be a good choice, for RGB\n" - "use BMP/TIFF/TGA etc. Never use a JPEG-compression!\n\n"); + "use BMP/TIFF/TGA etc. Never use a JPEG-compression!\n"); + } else { + label = gtk_label_new("This plug-in uses a password to encrypt your image.\n\n" + "Although it has been tested thoroughly, the author cannot be\n" + "sure that it will work properly in all circumstances. Therefore\n" + "the author doesn't want to take any responsibility in case of\n" + "data loss or any other damage this plug-in could cause.\n\n" + "*******USE IT AT YOUR OWN RISK (AND ENJOY IT)!*******\n\n" + "Remember to save your image in a non-destructive format!\n" + "For indexed images GIF could be a good choice, for RGB\n" + "use BMP/TIFF/TGA etc. Never use a JPEG-compression!\n"); + + } gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0); gtk_widget_show(label); @@ -510,7 +730,7 @@ encript_warning_dialog() &wvals.warningmessage); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), wvals.warningmessage); gtk_widget_show (toggle); - set_tooltip(tips,toggle,"If you want this message to be displayed every time you encript/decript an image, then check this box."); + set_tooltip(tips,toggle,"If you want this message to be displayed every time you encrypt/decrypt an image, then check this box."); gtk_widget_show(hbox); @@ -524,8 +744,13 @@ encript_warning_dialog() return bint.run; } + +/********************************************************************** + * FUNCTION encrypt_enter_dialog + *********************************************************************/ + static gint -encript_enter_dialog() +encrypt_enter_dialog() { GtkWidget *dlg; GtkWidget *label; @@ -538,13 +763,13 @@ encript_enter_dialog() gtk_window_set_title(GTK_WINDOW(dlg), "Warning"); gtk_window_position(GTK_WINDOW(dlg), GTK_WIN_POS_MOUSE); gtk_signal_connect(GTK_OBJECT(dlg), "destroy", - (GtkSignalFunc)encript_close_callback, + (GtkSignalFunc)encrypt_close_callback, NULL); button = gtk_button_new_with_label("OK"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_signal_connect(GTK_OBJECT(button), "clicked", - (GtkSignalFunc)encript_ok_callback, + (GtkSignalFunc)encrypt_ok_callback, dlg); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), button, TRUE, TRUE, 0); @@ -560,7 +785,7 @@ encript_enter_dialog() gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), button, TRUE, TRUE, 0); gtk_widget_show(button); - set_tooltip(tips,button,"Cancel process of encription/decription."); + set_tooltip(tips,button,"Cancel process of encryption/decryption."); frame = gtk_frame_new("Password needed:"); gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); @@ -574,9 +799,12 @@ encript_enter_dialog() hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); - label = gtk_label_new("You have not entered a valid non-zero password.\n\n" + label = gtk_label_new("You have not entered a valid, personalized password.\n" + "If you want to use the version 1.0x compatibility\n" + "mode, make sure that the password consists only of\n" + "numerical characters (0-9).\n\n" "Choose OK to repeat your password selection.\n" - "Choose CANCEL to abort the encription.\n"); + "Choose CANCEL to abort the encryption.\n"); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0); gtk_widget_show(label); @@ -592,8 +820,13 @@ encript_enter_dialog() return bint.run; } + +/********************************************************************** + * FUNCTION encrypt_no_last_val_dialog + *********************************************************************/ + static gint -encript_no_last_val_dialog() +encrypt_no_last_val_dialog() { GtkWidget *dlg; GtkWidget *label; @@ -606,13 +839,13 @@ encript_no_last_val_dialog() gtk_window_set_title(GTK_WINDOW(dlg), "Error"); gtk_window_position(GTK_WINDOW(dlg), GTK_WIN_POS_MOUSE); gtk_signal_connect(GTK_OBJECT(dlg), "destroy", - (GtkSignalFunc)encript_close_callback, + (GtkSignalFunc)encrypt_close_callback, NULL); button = gtk_button_new_with_label("OK"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_signal_connect(GTK_OBJECT(button), "clicked", - (GtkSignalFunc)encript_ok_callback, + (GtkSignalFunc)encrypt_ok_callback, dlg); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), button, TRUE, TRUE, 0); @@ -631,9 +864,11 @@ encript_no_last_val_dialog() hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); - label = gtk_label_new("For security reasons, the password is not saved\n" - "for later use. That's why this plug-in cannot be\n" - "executed with the last values.\n"); + label = gtk_label_new("For security reasons, the last password has not\n" + "been saved for further use. Thus the plug-in cannot\n" + "be executed in non-interactive mode. If you want to\n" + "be able to do this, enable the option 'remember password'\n" + "in the dialog box of the plug-in.\n"); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0); gtk_widget_show(label); @@ -649,11 +884,12 @@ encript_no_last_val_dialog() return bint.run; } - - +/********************************************************************** + * FUNCTION encrypt_logo_dialog + *********************************************************************/ GtkWidget * -encript_logo_dialog() +encrypt_logo_dialog() { GtkWidget *xdlg; GtkWidget *xlabel; @@ -664,20 +900,20 @@ encript_logo_dialog() GtkWidget *xvbox; GtkWidget *xhbox; char *text; - gchar *temp,*temp2; - char *datapointer; + guchar *temp,*temp2; + guchar *datapointer; gint y,x; xdlg = logodlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(xdlg), "About"); gtk_window_position(GTK_WINDOW(xdlg), GTK_WIN_POS_MOUSE); gtk_signal_connect(GTK_OBJECT(xdlg), "destroy", - (GtkSignalFunc)encript_close_callback, + (GtkSignalFunc)encrypt_close_callback, NULL); xbutton = gtk_button_new_with_label("OK"); GTK_WIDGET_SET_FLAGS(xbutton, GTK_CAN_DEFAULT); gtk_signal_connect(GTK_OBJECT(xbutton), "clicked", - (GtkSignalFunc)encript_logo_ok_callback, + (GtkSignalFunc)encrypt_logo_ok_callback, xdlg); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(xdlg)->action_area), xbutton, TRUE, TRUE, 0); @@ -707,7 +943,7 @@ encript_logo_dialog() xpreview = gtk_preview_new (GTK_PREVIEW_COLOR); gtk_preview_size (GTK_PREVIEW (xpreview), logo_width, logo_height); temp = g_malloc((logo_width+10)*3); - datapointer=header_data; + datapointer=header_data+logo_width*logo_height-1; for (y = 0; y < logo_height; y++){ temp2=temp; for (x = 0; x< logo_width; x++) { @@ -730,8 +966,8 @@ encript_logo_dialog() "CH-3066 Stettlen (Switzerland)\n\n" "cotting@mygale.org\n" "http://www.mygale.org/~cotting\n\n" - "Encript & Decript\n Plug-In for the GIMP\n" - "Version 1.01\n"; + "Encrypt & Decrypt\n Plug-In for the GIMP\n" + "Version 2.02\n"; xlabel = gtk_label_new(text); gtk_box_pack_start(GTK_BOX(xhbox), xlabel, TRUE, FALSE, 0); gtk_widget_show(xlabel); @@ -746,3 +982,5 @@ encript_logo_dialog() gdk_flush(); return xdlg; } + + diff --git a/plug-ins/Encript_Decript/INSTALL b/plug-ins/Encrypt_Decrypt/INSTALL similarity index 89% rename from plug-ins/Encript_Decript/INSTALL rename to plug-ins/Encrypt_Decrypt/INSTALL index 5e53dcbbc9..ab99ad8988 100644 --- a/plug-ins/Encript_Decript/INSTALL +++ b/plug-ins/Encrypt_Decrypt/INSTALL @@ -29,14 +29,12 @@ ------------------------------------------- REDUCE CODE SIZE ------------------------------------------- - With this new release 1.01 the size of + With this new release 2.02 the size of the logo in the about box has been reduced - in order to make smaller binaries. In - general the compiled plug-in will be - about 25-30% of the size of version 1.00. + in order to make smaller binaries. If you find that the plug-in is still too big, you can compress the executables - with the gzexe program (if it is avaiable + with the gzexe program (if it is available on your system). To do so, change to the plug-in directory of the GIMP... @@ -53,7 +51,7 @@ rm PLUGIN_NAME~ This will result in a code size of about - 35 to 40 kB, which isn't too much IMHO. + 20 kB, which isn't too much IMHO. ------------------------------------------ diff --git a/plug-ins/Encript_Decript/Makefile.am b/plug-ins/Encrypt_Decrypt/Makefile.am similarity index 83% rename from plug-ins/Encript_Decript/Makefile.am rename to plug-ins/Encrypt_Decrypt/Makefile.am index b498a63e0a..e1daf85a17 100644 --- a/plug-ins/Encript_Decript/Makefile.am +++ b/plug-ins/Encrypt_Decrypt/Makefile.am @@ -2,10 +2,10 @@ pluginlibdir = $(gimpplugindir)/plug-ins -pluginlib_PROGRAMS = Encript_Decript +pluginlib_PROGRAMS = Encrypt_Decrypt -Encript_Decript_SOURCES = \ - Encript_Decript.c logo.h +Encrypt_Decrypt_SOURCES = \ + Encrypt_Decrypt.c logo.h INCLUDES = \ $(X_CFLAGS) \ @@ -22,7 +22,7 @@ DEPS = \ $(top_builddir)/libgimp/libgimpui.la \ $(top_builddir)/libgimp/libgimp.la -Encript_Decript_DEPENDENCIES = $(DEPS) +Encrypt_Decrypt_DEPENDENCIES = $(DEPS) .PHONY: files diff --git a/plug-ins/Encript_Decript/README b/plug-ins/Encrypt_Decrypt/README similarity index 89% rename from plug-ins/Encript_Decript/README rename to plug-ins/Encrypt_Decrypt/README index 5e53dcbbc9..ab99ad8988 100644 --- a/plug-ins/Encript_Decript/README +++ b/plug-ins/Encrypt_Decrypt/README @@ -29,14 +29,12 @@ ------------------------------------------- REDUCE CODE SIZE ------------------------------------------- - With this new release 1.01 the size of + With this new release 2.02 the size of the logo in the about box has been reduced - in order to make smaller binaries. In - general the compiled plug-in will be - about 25-30% of the size of version 1.00. + in order to make smaller binaries. If you find that the plug-in is still too big, you can compress the executables - with the gzexe program (if it is avaiable + with the gzexe program (if it is available on your system). To do so, change to the plug-in directory of the GIMP... @@ -53,7 +51,7 @@ rm PLUGIN_NAME~ This will result in a code size of about - 35 to 40 kB, which isn't too much IMHO. + 20 kB, which isn't too much IMHO. ------------------------------------------ diff --git a/plug-ins/Encrypt_Decrypt/logo.h b/plug-ins/Encrypt_Decrypt/logo.h new file mode 100644 index 0000000000..cb94ec445f --- /dev/null +++ b/plug-ins/Encrypt_Decrypt/logo.h @@ -0,0 +1,788 @@ +/* GIMP header image file format (Indexed): //logo.h */ + +static unsigned int logo_width = 200; +static unsigned int logo_height = 72; + +/* Call this macro repeatedly. After each use, the pixel data can be extracted */ + +#define HEADER_PIXEL(data,pixel) \ + pixel[0] = palette_data[data[0]*3+2]; \ + pixel[1] = palette_data[data[0]*3+1]; \ + pixel[2] = palette_data[data[0]*3+0]; \ + data--; + +static unsigned char +palette_data[] = { 4,2,2,4,110,178,32,4,122,4,36, +86,15,3,66,4,58,127,36,8,186,4,34,122,17,2, +34,4,19,66,12,4,162,90,2,69,88,2,48,7,20, +2,25,2,103,8,14,48,4,58,186,90,3,154,82,2, +129,55,2,34,17,2,18,17,34,191,94,2,101,57,2, +70,7,32,154,12,22,157,17,3,50,4,88,150,96,3, +186,86,2,138,87,2,86,212,214,210,4,19,98,52,2, +154,15,11,2,4,132,216,7,18,125,12,6,82,37,12, +18,4,88,189,86,14,48,128,2,157,32,4,138,4,60, +155,4,48,126,60,2,218,7,10,52,13,12,66,129,2, +50,56,2,52,52,14,98,4,47,157,6,20,87,48,2, +24,58,2,101,120,2,141,52,5,170,4,113,215,127,2, +73,4,90,210,4,52,112,36,18,194,59,2,85,42,2, +10,107,2,173,95,2,114,31,3,52,4,79,160,84,3, +189,14,10,40,30,2,69,96,2,58,113,2,126,9,37, +231,17,33,170,28,14,2,4,30,146,68,10,37,132,2, +82,23,4,7,4,10,122,4,36,108,32,2,37,7,27, +2,4,98,175,84,10,146,4,101,191,4,14,146,8,29, +86,4,2,170,8,60,230,84,10,162,72,2,39,102,2, +142,4,142,221,4,49,143,68,12,170,4,124,213,15,4, +74,114,2,69,112,2,158,32,3,23,8,50,190,111,2, +104,6,40,154,96,2,210,6,28,104,60,2,138,61,2, +25,68,2,114,58,2,125,39,2,114,73,2,69,16,4, +58,4,88,177,56,14,26,138,2,173,4,68,176,71,2, +55,76,2,210,4,78,130,17,3,42,6,27,69,112,2, +49,12,26,178,47,13,159,18,11,10,13,11,74,141,2, +58,52,18,234,4,82,186,4,126,198,4,103,213,4,62, +206,4,72,226,12,46,210,72,12,222,12,26,146,20,34, +210,4,113,197,4,131,229,4,48,170,4,76,170,7,43, +95,52,30,218,15,11,170,52,14,202,12,14,86,4,40, +174,108,14,202,156,2,186,60,12,130,5,40,129,73,13, +189,12,42,138,44,14,202,4,59,143,4,124,229,4,69, +191,4,69,157,4,60,114,4,43,110,14,14,58,20,26, +157,28,26,210,4,87,162,4,91,202,4,110,226,4,98, +226,4,101,202,17,14,186,28,18,18,60,2,234,28,10, +114,4,30,114,8,10,162,12,54,186,20,26,130,100,10, +170,40,18,154,4,22,114,28,26,234,4,22,58,4,66, +226,4,54,202,12,42,202,4,38,98,4,145,234,4,76, +146,4,94,148,4,138,213,4,94,186,4,54,126,4,54, +154,4,118,211,4,106,178,4,106,188,4,54,142,4,94, +170,4,70,202,4,118,197,4,54,173,4,82,178,72,4, +172,36,10,138,76,14,162,4,98,210,4,118,226,112,2, +114,24,19,8,30,2,85,84,6,226,141,2,73,28,30, +10,28,46,186,112,4,206,36,10,90,36,2,174,108,2, +58,41,3,130,44,10,194,9,33,130,92,2,162,51,2, +42,12,32,162,81,3,146,44,11,26,28,6,146,44,2, +178,30,12,10,60,10,178,64,2,146,28,10,178,92,10, +210,5,41,146,40,2,102,96,2,125,100,2,88,74,2, +157,142,2,159,26,10,55,143,2,50,73,2,102,134,2, +142,73,2,84,127,2,126,142,2,82,156,2,178,28,10, +158,28,26,114,84,14,202,12,4,10,5,20,74,17,2, +26,92,2,194,7,19,106}; + +static unsigned char header_data[] = { 71,99,218,218,99,11,71,218,71,71, +218,99,99,99,71,99,218,99,99,99,99,218,71,218,99,218,218,99,99,218, +218,99,99,218,99,218,99,58,218,99,99,99,58,218,99,99,99,58,99,58, +99,58,11,58,99,58,58,11,99,58,99,58,99,99,99,218,99,218,99,58, +99,71,99,218,71,12,12,12,12,12,12,12,12,12,92,19,19,19,92,92, +92,92,19,108,19,19,19,19,19,19,53,53,53,53,101,19,19,53,53,19, +19,19,12,92,92,12,12,12,71,71,218,99,218,218,71,71,12,12,218,99, +58,58,58,99,99,99,58,99,99,99,11,58,11,58,58,99,58,99,99,99, +58,99,99,99,99,58,99,99,99,99,99,218,99,99,11,99,99,99,11,99, +99,218,218,218,99,218,99,99,218,218,99,99,218,99,218,218,99,99,218,11, +218,71,99,218,99,218,218,99,71,8,218,99,218,218,99,99,99,99,99,99, +218,218,99,99,218,99,218,99,218,71,99,99,99,218,99,99,218,99,99,99, +218,218,99,99,99,99,58,99,58,30,99,99,99,99,99,99,58,99,99,58, +99,58,99,58,99,99,58,58,58,99,58,58,99,218,218,71,99,99,71,71, +71,123,12,118,71,71,12,71,123,12,12,19,19,19,53,19,19,53,53,19, +19,53,101,63,20,63,20,63,53,53,53,101,53,53,53,19,53,53,53,19, +92,12,12,12,71,12,12,12,12,12,92,71,218,218,71,218,71,71,71,71, +99,218,58,58,58,99,99,99,99,58,58,58,99,58,99,58,58,99,58,58, +99,99,58,99,99,99,99,58,99,58,30,99,99,99,218,99,58,99,99,58, +11,99,99,218,99,218,218,99,99,218,71,99,218,99,99,218,99,99,218,99, +11,218,99,218,99,11,218,99,99,8,71,71,71,99,218,71,218,99,71,218, +11,99,218,218,99,218,99,218,99,99,99,99,218,99,99,99,99,99,218,99, +99,99,99,99,99,11,99,99,99,99,99,99,58,99,58,99,58,99,58,58, +99,11,58,58,99,58,99,99,58,58,218,99,123,71,71,71,123,71,71,218, +99,99,218,71,12,12,12,12,92,19,19,53,19,53,53,53,53,19,53,53, +53,53,19,53,19,53,53,53,53,53,63,63,101,63,63,20,53,19,53,53, +53,19,92,92,12,12,12,71,71,71,71,12,12,71,71,12,12,12,12,12, +12,218,218,99,58,58,99,58,99,58,99,58,99,99,58,218,58,99,58,99, +99,99,99,11,58,99,99,58,99,99,58,58,99,99,99,99,99,99,99,99, +99,58,218,99,218,99,99,99,218,99,99,218,99,11,218,99,218,218,99,99, +218,99,218,11,99,71,99,218,71,8,99,99,218,99,99,99,218,99,99,218, +218,99,11,99,99,218,99,218,99,218,218,99,58,99,99,99,58,11,99,99, +58,99,99,58,58,58,58,99,99,99,99,218,58,99,99,99,58,58,99,99, +58,58,99,58,99,58,99,99,58,58,99,218,71,71,218,218,218,58,58,58, +218,99,71,123,12,12,12,19,19,108,108,108,92,92,92,12,71,12,12,92, +19,53,53,53,101,53,53,19,53,101,53,20,53,79,79,0,34,79,20,63, +53,53,53,19,19,19,12,12,12,71,71,71,71,71,71,123,71,12,12,12, +12,12,71,71,218,58,99,58,218,58,218,99,58,99,58,99,99,218,58,58, +58,99,58,58,99,99,58,99,58,99,99,218,58,58,99,99,99,99,99,99, +58,11,99,99,218,218,218,99,218,99,99,218,218,99,218,99,99,218,218,99, +218,99,71,218,99,218,99,99,99,8,218,218,99,218,99,218,99,218,218,99, +11,218,218,218,218,99,71,99,218,99,99,99,218,58,99,99,99,99,218,30, +58,99,58,99,58,11,58,99,58,99,58,58,58,99,58,58,99,99,58,58, +58,99,58,99,58,58,99,58,218,99,99,218,58,99,58,58,58,58,58,218, +71,12,12,71,71,12,12,12,12,71,71,118,71,71,118,71,71,12,223,19, +19,53,53,53,53,63,229,20,79,20,34,0,20,101,101,63,20,101,101,53, +108,53,53,53,53,53,101,19,92,12,12,12,12,71,71,218,218,218,71,71, +118,12,71,71,218,218,58,58,58,58,58,58,218,58,58,58,99,99,218,99, +58,58,99,99,58,99,58,99,58,58,58,99,99,99,58,99,99,99,58,58, +99,58,58,99,99,99,99,99,99,99,218,99,99,218,99,218,218,99,99,218, +99,58,99,99,218,99,218,218,218,8,99,218,99,218,99,218,11,99,218,99, +99,99,99,99,218,99,58,99,99,99,58,99,218,99,99,99,99,99,58,99, +58,218,99,99,99,58,218,58,58,58,99,99,58,99,218,58,99,99,58,218, +58,99,58,99,99,99,58,99,58,58,58,58,99,58,58,58,58,218,218,12, +71,71,71,12,12,71,71,12,71,12,71,71,71,71,12,92,19,53,53,53, +101,63,79,34,251,0,0,63,20,53,19,53,53,53,53,19,19,53,19,19, +19,108,19,19,19,19,19,19,53,53,108,12,12,12,71,71,218,58,58,58, +99,218,71,71,71,12,218,99,99,58,58,58,58,218,58,58,58,58,58,99, +99,58,58,99,58,218,58,99,99,99,99,58,99,128,99,58,99,99,11,99, +99,58,11,58,99,99,99,218,58,11,99,58,99,218,99,99,218,99,99,99, +218,71,99,99,218,99,11,99,218,8,218,99,218,99,218,99,99,218,99,218, +58,218,58,218,99,99,218,99,58,99,99,99,99,78,11,58,99,58,99,99, +99,58,58,99,58,11,58,58,218,99,99,58,58,58,99,58,58,58,99,99, +58,58,58,58,58,58,99,58,99,99,99,58,58,58,58,58,218,71,118,12, +71,71,71,71,71,12,71,71,71,71,71,12,92,19,19,53,53,63,20,251, +0,79,79,0,79,34,34,79,0,63,229,20,63,101,53,101,19,53,19,92, +12,71,12,92,12,12,12,12,12,92,19,92,92,71,12,118,71,218,99,58, +58,58,58,58,218,123,71,218,58,58,58,99,58,58,58,218,58,218,58,58, +218,58,99,58,58,58,99,99,58,99,58,99,218,99,99,99,58,58,58,11, +58,58,99,58,99,99,30,99,99,99,58,218,218,30,99,218,99,99,99,218, +99,99,218,218,99,99,218,71,99,8,99,99,71,99,218,218,99,218,99,218, +99,218,99,58,11,58,99,99,11,58,99,58,99,99,99,99,58,58,99,99, +58,99,99,99,99,58,99,78,58,58,99,99,218,78,58,218,58,99,212,58, +99,58,58,58,218,58,58,58,58,58,58,58,58,58,218,71,12,12,71,71, +123,218,218,58,99,71,123,71,71,12,19,19,19,53,53,19,19,53,63,53, +101,101,101,63,101,101,20,20,79,0,0,79,79,34,251,79,79,251,101,53, +19,92,12,71,71,71,218,12,218,12,71,71,71,71,71,12,71,71,123,71, +58,58,58,58,58,58,58,99,99,58,58,58,99,58,58,58,99,58,99,58, +99,58,58,99,58,58,58,58,99,58,99,58,99,58,99,58,99,99,58,58, +99,99,99,58,99,58,58,58,99,99,99,30,128,58,99,99,99,99,99,58, +218,99,99,218,218,99,99,218,71,8,71,218,99,99,99,99,218,99,99,99, +99,30,58,11,58,58,99,58,58,58,58,30,58,58,99,99,99,58,99,58, +99,58,99,58,58,58,218,99,58,99,58,58,58,218,99,58,58,58,58,58, +58,99,99,99,58,99,99,58,58,212,99,58,58,218,71,71,218,218,99,58, +58,58,58,218,123,71,71,12,108,19,19,108,19,19,223,92,19,92,12,12, +19,19,19,19,53,53,63,63,229,0,34,34,79,0,79,0,75,34,0,34, +79,20,53,19,92,12,71,71,71,218,71,123,71,123,71,71,71,71,71,71, +71,218,58,58,58,58,58,58,58,99,58,58,58,58,58,58,58,58,99,58, +58,99,99,58,99,58,58,58,58,58,58,99,58,99,58,99,58,58,99,99, +58,58,99,99,58,58,218,58,58,99,58,99,11,58,58,99,58,218,99,99, +99,99,218,99,99,218,99,99,99,8,99,218,99,218,99,99,99,99,58,58, +11,58,99,58,58,30,58,11,58,11,58,99,99,58,99,58,58,58,99,58, +58,99,58,99,99,58,58,99,58,99,58,99,58,99,212,58,58,58,58,58, +58,58,58,58,58,58,58,58,58,58,212,58,218,218,218,99,58,58,58,58, +58,99,71,71,71,12,71,71,12,12,12,71,71,123,71,218,71,71,71,92, +19,108,63,79,229,126,0,79,0,0,34,34,34,126,34,251,79,0,126,34, +79,0,79,20,63,19,19,12,71,71,71,218,71,99,71,71,71,71,71,71, +71,71,218,58,58,58,212,58,58,58,58,58,58,58,58,58,58,58,58,58, +58,58,99,58,58,99,58,58,99,99,128,218,58,58,99,58,99,58,58,99, +218,58,58,218,99,99,99,99,99,99,58,99,99,58,30,218,99,99,99,99, +99,99,218,99,99,99,218,218,99,8,218,99,99,99,58,99,99,99,99,99, +58,58,218,99,99,99,58,99,58,58,58,99,58,99,58,99,99,99,58,58, +99,99,58,58,58,58,58,58,99,99,58,99,99,58,58,58,58,99,58,58, +99,58,99,58,78,212,99,212,99,58,58,99,58,58,78,78,246,99,212,58, +99,71,123,71,71,71,71,71,218,218,71,123,218,218,218,118,12,19,63,63, +0,0,0,34,34,0,34,79,79,79,0,34,79,79,20,101,53,101,53,19, +53,53,101,101,53,53,19,19,19,92,218,218,218,218,218,212,78,58,218,218, +71,71,71,11,58,246,58,78,246,58,58,58,99,99,58,58,99,58,212,58, +99,58,99,58,58,99,58,58,58,58,58,212,218,58,58,99,58,58,99,58, +99,99,99,58,58,99,99,99,58,99,58,58,99,99,99,58,58,99,99,99, +99,99,99,11,58,99,99,99,218,8,99,99,218,99,99,218,99,218,58,58, +11,78,58,99,58,99,58,99,58,11,58,99,58,99,58,58,58,99,99,58, +99,99,99,58,58,58,58,58,58,58,58,58,58,58,58,212,99,58,212,99, +58,58,78,58,78,58,58,58,58,58,58,58,58,58,246,58,246,58,58,71, +218,71,71,71,218,71,71,71,71,218,218,71,71,92,92,53,63,126,79,0, +0,79,0,79,34,79,0,126,79,79,79,79,79,229,229,101,53,108,92,71, +71,71,71,71,71,12,12,19,108,19,92,71,71,71,71,218,212,246,78,58, +58,218,218,71,71,58,58,212,212,78,212,78,78,58,58,58,58,58,99,58, +78,58,58,99,58,58,58,58,58,58,58,58,99,58,99,58,58,212,99,58, +58,99,58,99,58,99,99,58,58,99,99,58,58,58,58,11,78,99,99,99, +99,58,99,58,71,99,99,99,99,8,99,99,99,218,99,58,99,30,58,11, +58,11,58,58,99,58,58,99,58,99,58,99,99,58,99,58,99,58,58,99, +58,58,58,58,58,78,58,99,58,99,58,58,58,58,99,58,212,99,58,58, +58,78,78,78,58,58,58,58,58,212,58,78,58,78,78,78,58,99,218,218, +71,218,218,71,58,99,58,99,71,71,71,12,19,20,79,251,0,251,79,251, +79,63,126,79,79,79,79,229,79,79,79,126,126,79,79,63,20,53,53,92, +12,12,218,71,71,218,218,218,71,218,71,71,71,218,71,218,218,58,246,246, +78,212,78,58,218,218,58,58,58,246,78,212,78,212,58,58,58,58,58,212, +78,78,78,58,58,99,58,58,58,58,58,58,58,58,58,218,99,99,58,99, +58,58,218,99,58,58,99,58,99,99,58,99,99,99,58,99,99,58,58,58, +218,99,11,58,99,99,99,218,99,8,99,30,218,58,11,99,99,58,99,58, +99,58,58,99,218,99,218,58,99,99,58,58,58,58,99,58,99,99,58,99, +58,58,58,78,78,58,58,58,58,58,99,246,78,78,58,58,58,58,58,78, +78,212,78,246,246,58,58,58,212,58,212,246,78,246,58,212,218,218,218,218, +218,58,246,58,246,58,218,218,123,12,19,19,53,53,101,53,63,101,63,63, +63,63,63,63,63,101,63,53,63,53,53,53,53,108,19,19,19,19,108,19, +92,92,12,12,71,71,218,99,99,218,218,218,218,218,71,71,71,218,218,246, +78,78,246,78,78,78,58,58,58,78,78,78,78,246,58,58,58,58,58,78, +212,78,78,58,58,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58, +58,99,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,99,99,99, +58,99,58,99,99,58,99,99,99,8,99,99,30,58,58,58,58,58,58,99, +58,11,99,58,99,58,58,58,58,58,58,99,58,58,58,58,58,58,99,58, +99,58,78,58,58,58,99,58,58,78,246,78,58,78,58,58,58,58,78,212, +246,78,246,78,78,99,212,246,78,246,58,246,246,78,246,218,218,218,58,58, +246,78,78,246,58,218,218,71,12,12,108,92,108,19,108,53,63,63,63,53, +53,53,19,223,92,92,49,118,118,118,118,118,118,118,71,118,118,12,12,12, +92,71,71,123,218,99,11,58,58,58,58,78,58,99,99,123,71,218,218,218, +246,246,78,212,78,212,78,246,78,78,58,78,246,78,246,78,58,58,58,58, +99,78,246,78,246,99,58,58,58,58,58,78,78,78,78,99,58,99,58,99, +78,58,58,99,58,218,218,58,58,99,58,58,58,218,99,58,58,58,58,11, +58,99,99,99,58,99,99,218,58,8,99,99,58,99,58,11,58,11,58,58, +99,58,99,58,99,58,99,58,58,218,58,58,58,99,58,99,58,58,58,99, +78,58,58,58,99,58,58,78,78,58,246,78,246,99,58,58,58,212,78,78, +246,58,246,58,78,78,78,58,246,78,78,58,246,58,58,58,212,58,246,78, +212,246,58,58,71,71,71,71,12,92,92,92,108,53,53,53,19,19,223,223, +49,223,92,49,49,223,92,49,118,118,118,71,118,112,118,11,11,112,71,112, +71,71,11,11,11,99,99,58,58,78,78,78,246,78,246,58,99,71,218,71, +218,78,78,246,78,246,58,246,78,246,212,58,246,58,246,78,212,78,246,58, +58,58,78,246,246,78,78,99,58,58,58,212,78,58,78,58,58,58,58,58, +78,58,78,99,58,58,99,58,58,58,58,99,58,58,99,218,58,99,58,58, +58,58,99,58,99,99,58,99,99,8,99,99,58,58,58,99,58,99,99,58, +99,58,58,58,58,58,58,218,99,58,99,58,58,58,58,58,99,58,58,78, +58,78,78,78,78,58,78,58,78,78,78,212,78,58,78,58,78,212,78,246, +78,246,78,78,212,246,246,78,246,212,246,246,78,246,58,246,78,246,58,246, +246,58,99,218,218,218,71,12,92,19,19,19,19,19,223,223,49,223,49,118, +49,112,30,30,237,103,208,208,245,208,245,208,245,245,245,103,208,103,22,237, +30,30,11,11,11,11,71,71,11,99,58,78,78,246,58,246,246,246,58,99, +99,218,212,78,246,78,246,78,246,58,78,58,246,78,58,246,78,212,78,246, +58,212,58,78,78,212,78,78,58,58,99,78,78,78,78,78,58,58,99,58, +58,78,78,78,58,58,99,58,99,58,58,99,58,218,58,58,99,58,58,218, +99,58,99,99,58,99,30,99,99,8,58,99,58,99,58,58,58,99,58,99, +58,218,218,58,99,58,99,58,58,58,78,99,78,58,99,58,58,78,58,78, +78,58,78,78,58,78,78,246,246,212,78,78,78,58,78,246,78,246,58,246, +212,78,58,78,78,58,246,78,78,78,58,246,78,246,78,58,246,78,78,78, +58,218,99,11,71,12,92,92,92,223,223,223,223,223,49,118,112,22,237,208, +72,245,55,243,245,72,72,72,65,208,236,208,208,245,72,55,243,55,55,243, +245,245,245,103,237,237,30,11,11,112,71,11,99,58,78,246,246,246,246,78, +58,218,58,58,246,78,212,78,246,78,246,78,212,78,78,212,78,246,78,78, +58,78,78,78,78,78,246,246,246,58,58,78,58,246,78,212,78,78,99,58, +58,78,58,58,58,58,58,99,58,58,58,58,78,58,58,99,99,58,58,58, +99,218,58,99,99,99,58,99,58,8,99,99,99,58,11,58,58,58,99,58, +58,58,58,58,58,58,58,99,99,78,78,58,58,78,58,58,99,78,78,78, +78,78,78,78,78,78,212,246,246,246,246,78,78,246,246,58,246,78,246,78, +78,78,212,246,246,246,78,78,212,246,246,246,58,246,246,78,246,246,78,58, +218,99,71,12,12,92,92,82,223,49,223,118,112,22,208,72,72,208,65,22, +22,112,11,112,112,112,112,112,118,118,118,112,112,112,30,244,244,30,237,65, +236,72,55,55,243,243,208,208,237,237,11,71,11,11,71,11,99,58,246,246, +246,78,78,246,58,246,78,246,58,246,58,246,58,246,246,78,78,78,212,78, +212,246,212,78,246,246,58,78,78,246,99,246,246,58,246,58,78,78,78,58, +78,78,78,78,78,78,58,58,58,99,58,58,78,99,58,58,58,218,99,99, +58,58,99,58,99,58,58,99,99,8,58,58,99,58,99,218,99,58,99,99, +99,58,99,58,99,58,58,58,58,78,58,58,58,58,58,58,58,78,212,78, +78,58,246,78,58,246,246,246,246,246,246,246,78,58,246,78,246,58,246,58, +246,78,78,78,58,246,212,78,78,78,58,246,78,212,246,58,78,212,58,99, +218,71,12,92,19,223,49,49,118,62,30,22,208,208,103,30,244,112,244,118, +112,23,49,49,49,49,49,49,49,49,82,82,223,82,49,118,23,118,118,112, +11,30,237,22,65,245,55,243,245,245,103,237,237,11,71,11,71,71,218,58, +246,246,78,246,78,212,78,246,246,78,246,246,78,78,212,78,212,78,246,78, +78,58,246,78,58,246,78,212,78,246,78,78,78,78,78,212,246,246,246,78, +58,78,78,78,58,78,78,58,58,58,58,58,99,58,58,58,58,58,99,58, +58,58,58,58,58,99,99,58,58,8,99,99,58,58,58,99,99,99,99,58, +58,99,78,58,78,99,58,58,99,78,78,78,58,78,58,58,78,246,78,212, +78,78,58,78,246,246,246,246,246,246,58,78,78,246,58,246,78,246,78,246, +78,212,78,212,212,246,78,78,246,246,78,212,58,99,212,246,246,58,99,218, +118,12,92,223,223,49,49,11,237,208,208,103,244,23,118,112,118,112,49,49, +19,82,82,82,223,49,66,49,49,82,223,223,101,19,223,82,223,82,223,82, +82,49,23,112,11,244,30,65,72,55,55,245,208,22,237,112,11,118,71,218, +218,58,58,78,246,78,212,78,78,212,99,78,212,246,78,246,78,246,78,212, +246,246,78,246,246,78,246,78,246,58,246,78,58,78,246,246,246,246,212,246, +78,78,78,78,78,58,78,78,99,58,78,78,78,99,58,58,99,58,99,99, +58,99,99,99,99,58,99,58,99,8,99,99,99,58,58,99,58,58,99,58, +58,58,78,78,58,58,58,58,58,58,78,78,78,78,78,58,246,246,246,246, +246,78,78,212,246,246,246,246,246,246,78,212,78,246,78,212,78,246,58,246, +78,246,78,58,58,212,246,58,78,246,246,58,58,58,58,246,58,218,71,12, +223,223,49,49,49,30,65,72,72,30,112,118,118,112,118,49,223,223,223,49, +244,244,244,244,23,23,23,23,70,66,49,70,49,70,70,118,23,23,23,23, +49,223,19,82,223,223,23,11,244,237,208,72,55,55,208,103,30,11,11,49, +71,71,99,58,246,78,246,246,58,246,58,58,246,212,78,246,58,246,78,58, +58,212,78,78,212,78,212,78,78,78,212,78,78,78,246,212,246,246,246,212, +246,58,78,78,78,78,58,78,78,99,58,58,78,58,58,58,99,58,58,58, +58,58,58,58,99,58,99,58,99,8,99,58,58,218,58,58,58,99,58,58, +58,99,58,58,99,58,78,78,78,78,78,78,78,58,246,246,246,212,246,246, +212,246,78,246,246,246,246,246,212,246,246,78,246,58,212,246,78,78,78,246, +58,246,212,99,58,246,78,246,246,58,58,58,58,78,246,58,99,118,12,92, +223,223,223,11,22,72,208,244,49,112,112,118,49,82,223,49,244,244,242,62, +23,62,23,23,244,244,244,244,244,244,62,30,244,244,244,244,23,112,210,23, +62,244,244,23,223,82,53,82,49,112,30,30,65,72,55,245,208,237,30,112, +71,49,118,71,99,78,78,78,246,246,58,99,58,246,212,78,246,58,246,212, +99,58,212,246,78,246,78,246,212,246,78,246,246,212,246,246,246,212,246,246, +246,246,78,78,246,246,78,78,78,78,58,58,78,58,58,58,58,58,99,99, +99,78,99,58,99,99,58,99,58,8,58,99,58,99,99,58,58,99,58,58, +58,58,58,58,78,58,78,78,58,78,58,246,78,78,78,212,246,246,212,246, +246,246,246,246,246,246,246,246,246,246,246,58,246,58,99,212,246,212,78,78, +78,99,58,58,78,246,58,78,246,58,58,58,58,212,58,218,71,12,49,49, +49,112,22,72,65,112,49,112,112,112,223,19,118,62,244,62,62,23,23,244, +244,244,244,112,23,49,49,223,19,223,82,223,223,49,223,23,118,112,244,30, +62,62,62,62,23,62,23,223,82,8,82,71,30,244,22,72,55,245,103,237, +11,71,12,12,71,99,78,78,78,58,212,58,58,58,58,212,78,58,246,78, +58,58,58,212,78,246,58,78,78,212,212,246,246,246,212,246,246,246,246,246, +246,246,58,78,78,58,246,212,78,78,58,78,58,78,78,78,58,78,58,58, +218,58,58,99,58,99,99,99,58,8,218,99,58,58,58,99,58,58,99,78, +78,58,99,58,58,78,58,78,246,78,78,58,78,212,246,246,246,246,246,246, +246,246,246,212,246,212,246,246,246,212,78,246,58,58,58,246,78,78,212,246, +58,58,58,58,212,78,246,212,58,58,58,58,58,58,71,12,49,223,223,49, +30,208,72,30,49,49,112,49,223,223,23,22,244,62,23,23,62,22,112,118, +49,49,223,118,23,244,30,242,22,242,242,62,242,244,244,112,23,49,49,223, +23,112,30,244,62,112,210,23,23,49,82,8,223,244,237,30,208,55,243,245, +22,30,71,118,12,71,99,78,78,246,212,58,58,58,58,246,246,246,78,246, +58,58,58,78,212,78,246,246,246,58,58,212,246,246,246,246,246,246,246,246, +246,78,246,58,246,246,246,78,212,78,78,78,58,78,58,78,58,58,99,58, +58,58,99,58,58,58,58,58,58,8,58,99,58,58,58,58,99,58,78,78, +58,58,78,58,58,78,78,58,78,78,78,78,78,246,212,246,246,246,246,246, +246,246,246,246,246,246,212,246,246,246,78,58,58,58,58,246,78,78,246,99, +212,58,212,58,212,78,78,58,58,218,58,212,58,99,71,49,223,49,49,30, +55,72,112,49,244,11,49,82,112,242,242,62,23,62,244,112,118,223,82,118, +30,236,29,225,231,33,248,42,42,42,219,2,42,219,110,107,231,29,65,244, +112,223,223,49,112,30,30,23,23,23,23,49,82,101,49,30,30,242,72,243, +208,103,30,71,118,12,71,99,78,78,78,58,58,58,58,58,78,58,246,78, +58,58,99,58,246,58,246,58,246,58,99,58,212,246,246,212,246,246,246,246, +246,246,246,246,212,246,246,246,246,78,58,78,78,78,78,78,58,78,78,78, +58,78,99,99,99,58,58,99,99,8,99,58,99,99,58,58,58,58,78,78, +78,78,58,58,58,78,78,78,78,78,246,246,58,246,246,246,246,246,246,246, +246,246,212,246,99,58,246,246,246,246,212,58,58,58,99,212,78,212,212,58, +78,58,58,58,246,246,78,58,71,218,58,58,11,71,118,223,49,23,103,243, +22,49,118,30,118,82,49,30,242,62,70,62,244,118,223,82,112,65,93,205, +217,42,80,147,98,4,26,8,8,8,8,121,8,8,26,4,98,210,111,219, +29,29,65,112,223,82,23,30,244,62,62,62,62,49,82,82,112,30,30,65, +243,245,103,30,71,118,12,71,218,212,246,58,58,212,212,58,58,246,212,78, +58,58,212,58,58,246,78,246,58,58,58,58,246,212,246,246,246,246,246,246, +246,212,246,246,246,246,212,246,246,212,78,246,212,78,58,78,78,78,58,78, +78,78,58,58,58,58,99,58,58,8,58,58,58,58,58,58,58,58,237,78, +58,78,78,58,78,78,212,78,246,78,78,246,246,246,246,246,246,246,246,246, +246,246,246,58,58,58,246,246,246,246,58,58,99,58,58,246,246,78,99,78, +246,78,58,58,58,58,58,218,12,99,58,99,71,92,49,223,118,22,41,65, +223,23,30,118,19,23,22,242,23,23,30,112,223,19,112,29,222,232,87,80, +98,26,121,8,20,253,20,20,20,20,101,20,20,20,253,253,20,8,121,26, +4,14,2,231,29,30,49,82,112,30,244,62,23,210,118,82,101,223,30,244, +65,55,243,103,237,71,118,71,71,99,58,58,58,58,218,58,58,58,246,212, +58,58,212,78,99,58,246,246,78,58,58,58,58,246,246,246,246,246,246,246, +246,246,246,212,246,246,246,246,246,246,246,78,78,78,78,78,58,78,58,78, +78,58,58,58,78,99,58,58,99,8,99,58,58,99,99,58,58,58,58,237, +78,78,58,78,78,246,78,246,78,246,78,246,246,246,246,246,246,246,246,246, +246,246,58,58,58,58,246,246,246,58,99,78,246,212,99,246,212,58,78,246, +58,246,58,58,58,212,218,12,118,58,58,71,12,49,19,49,237,41,65,49, +118,112,223,82,244,236,62,66,62,30,82,8,112,93,68,6,137,88,162,253, +253,20,253,19,223,23,244,244,54,242,54,242,244,62,112,49,223,20,20,20, +20,253,26,98,14,33,29,244,82,101,112,22,62,62,62,23,49,53,82,30, +112,22,243,243,208,11,71,118,12,218,99,58,58,58,12,71,58,58,58,58, +99,58,58,246,246,58,58,246,246,58,58,58,99,58,246,246,246,246,78,58, +246,212,246,246,246,246,246,212,246,246,78,78,78,78,58,78,78,78,78,58, +78,58,78,237,78,58,99,99,78,8,58,99,58,58,78,78,78,78,78,78, +58,78,78,58,78,246,78,212,246,246,246,246,246,246,246,246,246,103,246,246, +246,246,58,58,58,99,212,246,246,58,212,78,246,58,58,58,58,58,212,78, +78,78,58,58,58,58,123,49,218,99,11,118,223,223,82,237,41,208,23,118, +237,223,82,244,18,210,23,23,112,19,223,103,64,6,148,147,26,253,20,8, +66,23,54,111,219,219,137,24,76,24,163,25,137,42,204,42,151,109,244,223, +20,20,20,20,8,4,111,231,236,23,82,12,237,62,62,23,62,223,253,223, +237,244,22,41,245,103,11,112,118,71,218,58,58,99,92,92,128,58,58,58, +58,58,58,212,78,58,58,212,58,58,58,78,78,58,212,246,246,246,58,58, +212,246,212,246,246,246,246,246,246,212,246,78,246,246,78,78,78,78,78,58, +78,58,58,78,99,58,58,58,99,8,99,58,58,58,58,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,246,246,246,246,103,246,246,246,246,246, +246,78,58,58,58,58,58,212,58,58,78,212,78,78,99,58,58,212,78,246, +212,212,58,58,58,218,92,12,218,99,71,12,223,82,118,243,55,23,223,30, +223,19,244,93,54,49,23,112,82,82,245,153,138,234,162,8,253,101,49,30, +111,125,24,201,142,16,159,142,43,95,197,156,193,193,51,141,224,25,248,231, +65,118,20,20,20,20,121,210,231,55,244,82,49,30,244,62,62,244,223,20, +118,237,112,208,243,245,237,71,118,49,71,58,58,218,92,92,12,58,58,99, +58,58,212,78,212,212,58,58,58,58,58,212,78,58,58,246,246,246,99,58, +99,246,246,246,246,246,246,246,246,246,212,246,58,78,78,78,78,78,58,78, +78,58,78,78,58,78,58,99,58,8,99,99,58,58,58,78,78,58,78,58, +78,78,78,246,78,78,78,246,246,246,246,246,246,246,246,103,246,246,246,246, +246,58,58,58,58,58,58,58,58,58,78,78,246,78,58,58,58,212,78,58, +58,78,58,58,58,12,92,12,99,218,118,19,82,223,22,116,237,49,112,112, +101,112,93,109,70,112,118,82,223,55,136,185,44,26,253,253,82,62,107,163, +117,16,114,159,161,106,98,46,26,26,26,26,26,4,32,81,44,142,43,234, +10,56,236,23,20,20,20,8,4,219,225,237,19,82,11,244,62,54,62,223, +20,112,30,244,72,239,103,237,71,12,12,71,58,71,92,92,12,128,58,58, +58,58,246,78,246,58,58,58,99,58,58,246,78,78,58,246,246,58,58,58, +58,212,246,212,246,246,246,246,246,246,78,78,246,58,246,58,78,246,78,58, +78,58,78,78,58,58,58,58,58,8,58,58,58,58,78,237,58,78,78,78, +78,78,78,58,246,246,212,246,246,246,246,246,246,246,246,246,246,246,246,246, +78,58,58,58,58,58,99,58,58,246,246,246,58,246,58,58,58,78,246,218, +11,58,58,58,58,12,92,71,218,11,49,223,101,23,239,93,23,118,244,223, +223,65,29,70,70,112,82,82,72,233,135,152,121,253,20,49,242,179,176,39, +198,156,32,47,26,26,69,113,26,47,9,47,162,113,26,121,113,252,152,159, +43,234,217,238,30,253,20,251,8,4,107,17,30,82,223,22,62,62,54,244, +82,19,237,112,244,41,245,30,112,71,92,71,99,71,12,92,92,71,78,58, +58,246,246,58,78,212,58,58,58,58,58,78,246,58,99,58,212,58,58,58, +58,78,246,246,246,246,246,246,246,246,246,246,78,78,78,78,246,58,78,78, +58,58,58,99,58,99,58,58,58,8,58,99,99,58,58,78,78,58,78,58, +78,58,78,78,78,78,78,246,246,246,246,246,246,246,246,246,78,246,246,246, +58,58,78,58,78,58,58,99,58,78,58,246,246,58,58,58,212,58,58,12, +71,58,58,58,99,92,92,71,218,71,223,8,19,22,150,30,49,11,23,101, +30,93,54,49,112,49,20,30,254,181,95,26,253,253,49,65,163,166,206,202, +52,26,8,121,4,161,43,114,139,131,57,200,195,188,192,88,26,26,121,98, +197,67,234,145,230,22,82,20,20,8,98,107,100,112,253,112,103,244,54,62, +49,20,49,237,118,208,243,103,11,11,12,92,92,92,92,12,49,12,58,58, +78,58,246,78,246,78,212,99,58,58,78,246,58,78,58,58,58,99,58,58, +58,99,246,246,246,246,246,246,246,246,246,246,246,78,246,78,246,78,58,78, +78,58,78,78,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,78,78,78,78,246,246,246,246,246,246,246,246,246,246,246,58,212,58,246, +99,212,58,99,78,99,58,58,78,246,58,58,58,78,78,58,78,78,99,71, +12,71,58,58,12,12,12,71,11,12,223,101,49,243,100,118,223,112,82,19, +93,225,113,23,244,101,223,41,129,199,52,253,20,223,242,124,39,57,117,122, +121,121,47,44,195,35,94,196,165,189,189,189,27,84,200,139,67,186,26,121, +240,106,159,234,175,68,242,20,20,20,8,210,238,93,223,19,237,244,23,54, +62,19,101,244,112,30,243,208,237,11,12,92,49,223,12,12,92,12,58,78, +246,78,58,246,78,212,78,78,58,58,212,58,58,58,78,99,58,58,99,58, +58,58,246,246,246,246,246,246,246,246,246,246,78,246,58,78,58,78,78,78, +78,78,237,78,58,58,58,58,58,8,99,58,99,58,78,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,103,246,246,246,246,218,58,58,78,78, +58,99,71,12,58,78,58,78,58,78,123,12,78,78,58,212,78,78,123,92, +12,12,99,99,12,92,92,71,11,118,82,101,112,116,236,82,112,112,82,118, +100,110,66,23,49,101,244,215,73,43,69,253,101,23,219,59,97,202,52,8, +8,4,120,97,187,139,27,143,46,113,26,26,46,88,60,27,131,200,192,47, +82,66,81,159,234,170,68,118,20,251,20,26,2,64,244,101,118,22,23,62, +62,49,20,118,244,23,208,245,30,11,71,12,92,12,12,49,12,12,71,58, +246,246,78,246,78,246,58,78,58,78,212,218,12,246,78,99,58,78,78,11, +12,58,58,246,246,103,246,246,58,246,246,246,246,78,246,78,78,78,58,78, +78,58,58,58,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,212,78,246,246,78,99,58,246,246,246,246,246,246,71,12,99,58,58,99, +58,58,53,251,71,78,78,78,78,246,19,19,71,246,246,78,212,246,12,92, +12,12,12,12,92,12,12,71,218,118,19,101,244,239,65,223,244,11,53,112, +222,235,66,112,223,20,72,45,90,221,8,253,19,242,214,97,57,152,26,8, +26,188,57,187,139,186,8,8,8,8,121,121,8,8,26,4,44,131,94,67, +162,82,113,44,159,76,220,29,82,0,20,8,98,238,245,82,82,237,23,62, +54,112,20,223,237,49,22,245,237,11,71,49,12,92,12,12,12,12,71,78, +246,58,246,58,246,78,246,58,246,212,58,19,101,218,78,78,99,58,58,53, +101,71,58,246,246,246,78,71,92,58,246,246,212,246,78,58,58,78,78,58, +78,78,78,78,58,58,58,58,58,8,99,99,58,99,58,78,78,58,99,58, +78,78,58,246,78,58,71,92,218,246,246,246,103,246,12,92,92,58,58,58, +58,218,63,53,19,246,246,78,78,212,53,92,92,212,246,78,78,58,92,218, +12,12,92,92,92,12,12,71,11,118,101,101,22,116,242,223,237,11,8,30, +17,62,70,112,8,53,72,172,134,143,8,20,223,109,102,57,97,81,121,82, +252,114,35,157,165,26,253,8,8,46,182,4,26,26,8,8,113,160,190,35, +186,66,121,106,117,152,232,68,49,79,20,8,26,42,17,223,53,22,112,244, +54,244,8,82,30,118,30,245,30,11,99,12,12,92,123,12,12,12,71,78, +246,78,246,78,58,246,246,58,246,58,12,53,53,12,78,78,78,99,12,63, +63,92,78,78,246,246,78,229,229,12,246,246,246,212,78,71,71,58,78,78, +58,78,78,58,58,58,212,58,58,8,99,58,58,58,58,78,78,58,99,218, +99,58,246,78,78,58,12,92,12,78,246,246,246,218,92,92,19,71,58,58, +58,12,38,92,53,71,246,58,246,218,108,92,92,218,246,212,78,58,12,218, +12,12,12,92,12,92,12,71,71,118,82,8,103,116,242,82,244,11,82,30, +222,210,223,23,8,101,55,172,183,186,8,253,223,110,102,157,97,161,8,8, +127,67,190,140,189,26,8,8,69,127,120,5,52,26,26,8,121,9,84,187, +43,113,82,98,142,152,89,119,244,20,0,253,121,219,64,23,101,30,30,23, +54,244,82,101,30,112,112,72,237,71,30,12,12,92,118,12,12,12,71,58, +246,246,58,246,58,212,78,246,58,246,108,63,53,19,78,78,78,58,53,101, +53,108,78,246,246,246,108,79,20,53,246,246,246,78,99,92,92,12,99,78, +78,58,58,218,218,218,99,58,58,8,99,99,58,58,58,99,99,218,71,11, +99,99,78,246,212,71,218,71,92,71,246,246,246,71,92,92,19,19,58,58, +58,92,53,92,92,108,58,246,246,71,92,92,92,92,212,246,246,58,123,48, +12,12,12,92,92,12,12,12,99,118,19,101,237,116,65,49,30,112,82,244, +222,235,26,118,82,101,65,136,183,7,8,8,82,242,21,157,57,192,69,8, +26,7,191,157,190,60,9,8,26,52,84,131,60,4,121,8,26,113,67,94, +142,113,82,98,43,152,10,119,244,251,0,253,121,111,64,23,101,244,22,49, +62,62,82,101,112,23,112,103,30,71,11,12,12,118,12,12,118,12,71,78, +78,246,78,58,218,58,78,246,246,12,53,101,53,19,58,78,58,12,63,63, +53,63,218,246,246,71,79,20,63,101,218,246,246,218,12,19,108,12,99,58, +99,71,218,71,71,218,71,218,71,8,99,58,99,99,58,58,11,218,71,218, +71,71,218,58,58,99,218,99,71,92,218,78,246,92,92,12,223,53,71,58, +58,19,19,92,92,19,12,78,78,12,92,92,92,92,71,78,78,218,123,241, +48,12,12,92,49,12,118,12,71,49,223,101,11,116,65,66,112,11,82,112, +100,54,66,66,223,20,244,105,90,159,8,8,8,244,10,167,187,202,98,8, +121,47,192,169,190,35,195,188,188,195,57,84,106,47,8,8,8,122,195,140, +95,66,82,98,142,221,175,119,244,251,251,20,8,219,64,112,101,30,242,118, +23,62,19,20,11,118,112,22,11,11,99,12,12,12,12,71,12,118,71,58, +246,58,246,99,12,99,212,78,58,19,53,53,101,53,58,78,218,53,101,53, +53,63,218,246,246,63,0,101,19,53,12,78,58,12,108,92,19,108,92,71, +71,12,71,71,123,71,71,123,71,8,99,99,58,58,58,11,58,11,99,218, +99,11,99,99,218,99,218,99,71,12,12,99,99,92,92,92,12,19,53,71, +99,38,53,12,12,92,19,218,212,92,92,92,48,12,108,128,246,218,123,48, +128,123,12,12,12,12,12,118,71,71,223,8,112,41,55,49,49,244,223,49, +93,231,70,82,223,20,82,116,181,158,252,8,20,223,242,214,57,157,156,46, +8,66,26,147,44,198,86,196,86,198,44,52,4,8,8,8,46,60,97,194, +52,82,82,180,159,177,232,64,66,79,20,8,26,231,100,49,8,237,62,23, +62,244,82,82,30,223,11,237,112,11,11,12,12,71,12,12,118,12,71,218, +246,78,58,218,92,99,246,212,92,53,79,79,53,53,218,58,19,63,38,126, +53,101,92,58,19,251,63,223,19,19,92,71,12,223,92,223,223,92,19,92, +12,71,123,71,71,71,71,71,71,8,11,58,11,58,99,58,99,58,99,58, +58,218,218,218,99,218,11,99,99,71,92,92,12,49,92,71,99,12,53,53, +92,20,53,123,48,12,92,19,218,19,92,12,241,48,92,92,58,218,92,241, +128,212,71,12,118,12,12,71,71,112,223,19,82,55,116,112,49,244,223,19, +208,238,235,66,223,253,82,22,250,73,95,113,8,82,49,111,102,207,132,188, +252,69,8,121,162,4,47,52,127,4,4,26,26,8,8,46,186,86,169,95, +66,8,4,95,192,87,45,236,101,251,253,8,70,222,236,223,223,237,244,23, +54,244,82,82,237,118,11,244,71,11,99,71,118,12,12,12,12,12,12,58, +78,78,246,123,108,12,212,12,53,63,13,83,63,53,12,92,53,226,13,13, +53,53,53,226,75,63,12,71,92,19,19,92,92,92,19,12,12,12,92,12, +71,71,71,71,71,12,71,71,71,8,99,99,58,99,99,58,58,99,58,58, +11,218,71,71,11,218,99,99,58,218,12,19,92,92,92,99,78,58,92,101, +75,251,53,12,123,48,92,108,101,63,92,12,241,241,92,92,108,92,108,128, +212,246,58,12,12,12,49,12,12,118,12,49,19,237,116,22,49,118,244,82, +112,17,231,70,223,82,20,82,93,45,133,7,46,8,8,49,50,224,168,207, +142,60,127,46,8,26,8,8,8,8,8,8,121,26,47,192,166,169,7,113, +66,113,7,156,36,217,28,23,251,251,20,26,111,222,30,8,49,22,112,62, +242,112,101,112,30,49,244,11,112,11,99,71,12,12,118,12,12,12,71,246, +246,78,212,92,108,92,218,53,38,13,0,0,63,101,20,63,101,75,83,83, +63,101,229,79,126,92,58,78,12,19,92,92,19,92,12,71,71,118,71,71, +218,12,71,71,71,71,71,218,99,8,218,99,218,58,58,218,99,99,58,99, +58,58,99,99,218,99,218,99,58,58,99,92,92,92,19,58,78,78,99,108, +0,34,38,123,123,48,123,92,53,108,92,12,241,241,241,123,92,19,19,123, +241,212,246,99,12,71,12,71,12,71,118,223,82,118,245,100,112,49,30,118, +223,237,238,111,113,223,19,20,49,93,144,184,44,113,8,253,19,210,173,141, +168,57,196,142,60,52,122,182,113,113,122,3,60,159,130,86,43,122,26,223, +47,106,95,76,89,68,244,20,251,20,8,210,238,72,223,19,30,112,23,62, +244,223,20,118,112,112,244,118,11,99,99,218,71,218,71,12,12,71,58,58, +78,246,246,92,63,53,53,101,83,0,83,83,53,63,63,53,20,83,0,0, +53,53,79,0,226,78,58,78,12,108,92,19,92,71,58,58,99,71,71,123, +71,218,218,71,218,218,99,218,99,8,99,99,218,218,99,99,99,99,58,99, +99,58,99,11,71,99,99,58,58,58,58,71,92,92,19,78,78,58,78,218, +53,63,101,123,123,48,48,123,92,19,92,92,241,241,241,241,92,92,92,12, +241,212,78,78,123,118,12,12,12,12,112,92,49,223,30,247,65,49,23,112, +82,23,72,231,14,26,82,19,101,49,17,146,102,154,147,69,8,82,49,23, +249,104,158,39,206,169,86,130,202,142,202,114,39,117,76,88,4,66,66,113, +7,95,234,175,68,22,101,20,251,8,4,107,100,112,101,112,30,23,112,62, +49,101,49,244,118,112,112,118,11,78,99,99,99,58,71,12,92,99,246,78, +246,58,218,108,108,53,63,229,0,83,34,13,53,53,101,38,13,0,0,13, +53,101,63,101,99,78,58,78,71,19,19,92,71,58,99,58,11,218,218,71, +99,99,99,99,218,58,99,218,218,8,71,218,99,99,218,58,99,99,99,99, +99,58,99,58,99,218,11,58,58,99,58,58,71,92,92,58,78,78,78,78, +118,19,53,123,48,128,128,48,123,12,92,92,48,128,212,48,241,12,12,92, +241,128,246,246,246,71,12,12,12,71,71,118,49,223,49,208,116,22,49,23, +11,223,223,72,225,235,113,82,82,101,49,65,68,164,201,7,162,26,8,121, +66,223,23,216,14,36,177,152,154,152,80,255,98,66,66,223,66,4,32,152, +152,163,228,222,112,251,20,20,8,113,219,222,22,82,23,22,62,112,54,244, +101,82,112,112,23,118,112,11,11,78,58,58,246,99,71,71,99,58,246,212, +58,58,123,108,108,53,20,13,101,19,34,13,53,53,53,0,75,38,0,34, +63,53,53,71,58,78,58,78,11,92,92,71,58,58,58,58,99,218,11,99, +11,58,218,218,99,99,218,99,99,8,99,71,99,99,99,99,99,218,58,99, +218,58,99,99,99,58,58,78,58,99,58,58,58,71,12,78,78,78,78,78, +58,12,19,12,48,218,246,218,48,12,92,92,241,48,58,212,48,241,12,92, +48,241,212,58,212,212,123,118,12,71,118,118,12,223,49,118,55,239,244,223, +112,112,82,118,236,225,14,4,26,82,101,19,112,93,153,21,224,174,88,162, +26,26,121,82,66,66,66,66,66,66,26,82,66,26,113,127,32,44,51,87, +248,222,236,223,20,20,20,8,70,111,17,237,223,49,237,30,62,54,30,118, +253,49,112,118,23,118,118,11,99,58,58,58,212,99,71,218,246,78,78,58, +58,58,108,108,63,38,13,92,58,12,13,251,53,63,251,79,12,71,34,34, +251,53,19,58,78,78,78,58,58,71,71,58,99,99,58,99,58,11,58,99, +99,99,99,218,218,99,218,218,99,8,71,99,218,218,218,99,218,99,99,99, +99,71,58,99,99,99,99,58,58,99,58,58,78,58,99,78,58,78,58,78, +78,78,99,218,128,58,58,78,128,48,12,92,123,241,78,246,58,48,241,218, +12,128,212,212,58,58,212,218,71,12,71,12,118,12,223,49,11,243,55,244, +49,112,244,223,49,236,17,111,4,121,82,82,8,223,244,29,153,61,148,234, +152,32,147,52,4,4,113,26,113,26,98,98,147,255,7,193,24,163,217,238, +110,112,101,20,20,253,8,70,107,222,22,223,223,244,244,244,244,242,112,82, +223,118,23,23,49,118,71,11,58,58,58,246,246,58,99,78,58,212,212,78, +58,99,53,53,38,83,19,58,246,19,34,79,251,34,34,71,58,71,79,13, +83,63,218,58,58,99,58,78,58,99,78,58,99,99,99,58,58,99,99,58, +218,11,218,99,11,218,11,99,71,8,71,218,218,11,71,99,218,99,99,99, +99,218,11,99,58,58,58,58,11,58,99,218,58,58,78,78,78,78,58,58, +78,78,78,78,58,78,78,78,58,58,48,123,48,48,128,78,246,78,128,241, +241,241,128,212,58,58,58,58,218,12,118,71,71,112,118,223,49,11,245,55, +30,49,112,244,223,19,30,93,107,111,4,26,101,101,8,101,112,242,93,203, +6,170,21,74,51,51,104,24,234,76,24,104,76,124,232,56,225,18,30,223, +20,20,20,20,8,66,235,231,236,112,223,118,30,112,112,54,244,112,82,49, +112,23,118,118,12,11,99,99,246,58,58,58,78,58,246,246,78,78,212,78, +58,12,53,229,34,40,78,78,58,38,0,13,13,79,71,58,58,71,13,0, +38,71,58,99,58,99,58,99,78,58,58,99,99,99,71,99,58,99,218,99, +71,99,218,99,99,71,218,99,71,8,71,71,71,123,218,218,11,218,218,218, +218,99,218,218,99,99,99,99,58,99,99,99,99,99,58,78,78,58,58,99, +99,78,78,246,78,212,78,78,58,78,128,48,48,241,48,246,78,58,246,128, +128,128,128,128,212,78,212,78,58,218,71,71,12,12,118,118,49,49,112,208, +41,22,49,112,244,23,19,49,22,93,219,14,4,8,82,101,20,101,223,49, +30,65,18,29,17,203,228,230,56,96,91,225,225,236,242,112,49,82,20,20, +20,20,82,113,210,107,29,22,118,223,112,30,244,244,62,112,23,82,223,49, +118,118,49,49,118,71,99,246,58,58,212,246,246,78,212,58,246,246,78,58, +218,53,209,126,40,78,78,78,218,0,34,34,79,71,78,99,58,71,251,229, +12,58,99,99,99,58,58,58,58,99,99,99,99,218,99,58,99,99,99,218, +99,218,11,218,218,11,218,71,71,8,71,123,71,71,218,123,71,99,11,99, +218,11,99,71,218,99,58,99,99,58,218,218,99,99,58,58,58,58,99,58, +58,99,58,246,246,246,78,58,58,58,78,58,48,48,241,78,246,78,78,58, +58,241,241,241,212,58,246,78,246,58,218,71,71,71,118,118,118,49,49,112, +103,243,236,112,49,244,112,49,223,118,65,93,107,14,98,113,82,8,101,253, +101,20,101,82,82,223,118,118,49,49,49,82,82,101,101,20,20,253,253,121, +26,70,235,110,29,103,118,223,223,11,244,244,54,242,244,49,19,223,49,118, +118,49,12,71,11,99,212,246,78,78,78,78,212,246,78,58,78,212,78,58, +12,38,213,71,78,58,58,78,40,83,79,20,99,58,99,58,99,12,92,71, +78,58,99,99,99,99,99,99,99,99,218,218,99,218,218,99,218,218,11,218, +11,218,218,71,218,218,71,123,71,8,71,71,12,71,71,218,218,218,71,71, +218,218,218,218,71,218,218,99,99,218,99,99,99,99,99,99,58,99,58,99, +99,99,99,58,78,78,78,78,58,99,58,58,58,128,48,128,78,78,58,78, +212,212,212,241,128,58,246,246,58,246,58,218,218,118,71,71,118,12,118,49, +23,237,245,55,208,23,118,23,112,223,223,118,244,236,18,110,14,210,4,66, +121,8,82,20,82,101,101,251,20,20,20,101,8,20,8,8,26,26,210,235, +109,110,65,30,118,223,49,244,244,244,244,242,65,30,223,82,49,118,118,49, +92,49,118,71,11,78,246,78,58,246,212,246,78,78,246,78,246,78,212,218, +53,92,99,78,58,58,58,246,53,0,53,99,99,58,99,58,99,71,218,58, +99,58,99,218,58,99,58,78,99,99,11,99,71,99,99,218,99,99,218,71, +123,218,71,218,12,71,71,71,71,8,71,71,71,71,71,118,71,71,218,99, +71,71,71,123,71,71,218,99,99,218,218,71,11,218,99,99,58,99,58,99, +99,99,218,58,58,78,78,78,58,99,99,58,58,58,58,128,246,78,58,58, +58,58,246,128,128,58,212,246,78,78,78,58,58,218,71,71,11,118,118,49, +12,23,11,103,243,72,237,23,23,112,23,223,19,223,112,22,109,18,29,111, +111,210,210,70,4,26,26,26,26,26,26,4,4,70,98,235,2,18,29,65, +54,23,223,49,23,244,244,112,244,54,22,244,118,82,223,223,118,92,49,49, +223,71,11,99,99,78,246,58,246,78,58,212,78,78,58,58,246,78,58,218, +71,78,58,58,99,58,58,99,19,77,58,58,58,218,99,58,58,58,58,58, +218,99,11,218,58,99,218,58,218,218,71,218,218,71,99,71,218,71,71,218, +71,123,71,71,71,71,71,71,12,8,118,118,71,71,118,71,71,71,118,12, +71,123,71,71,71,71,71,71,218,99,99,99,218,218,71,218,99,99,58,99, +99,218,99,218,58,58,246,78,78,99,99,99,99,58,246,78,58,246,58,58, +58,58,58,78,78,58,58,58,246,212,99,58,58,58,218,99,71,118,11,118, +49,49,49,23,11,208,55,245,22,112,23,23,23,23,49,49,49,223,112,30, +22,236,18,18,18,29,18,18,18,18,107,236,29,236,236,22,30,23,223,223, +223,118,118,112,244,112,244,242,242,30,23,223,82,223,49,49,49,223,49,12, +71,71,99,58,246,212,58,58,58,78,78,78,58,58,58,58,78,212,246,78, +78,58,58,11,99,58,78,78,99,58,58,99,218,99,58,99,58,58,58,218, +99,71,218,99,218,58,99,218,218,71,218,123,71,99,71,218,71,71,71,12, +71,71,12,12,12,12,12,12,12,8,12,12,12,12,12,12,118,118,71,71, +71,218,71,123,71,71,71,71,123,71,218,11,218,71,218,123,218,99,218,58, +99,99,11,218,71,99,99,58,78,58,99,99,71,99,58,78,246,246,246,58, +58,218,58,99,78,78,246,78,78,246,58,58,58,212,58,58,99,71,71,118, +71,118,118,23,49,112,112,103,72,72,65,244,112,23,118,118,70,223,223,223, +223,49,118,23,118,112,112,244,112,112,23,23,23,49,49,223,223,49,23,118, +244,244,112,62,244,109,22,30,49,223,223,82,49,223,49,223,223,118,118,71, +99,99,99,78,78,246,58,58,78,78,58,58,58,99,78,246,78,78,78,78, +99,99,99,58,99,58,78,78,58,99,99,11,218,99,99,58,58,11,99,218, +218,218,71,99,218,218,11,218,123,71,218,71,71,218,71,71,123,71,118,12, +71,12,12,12,12,12,12,12,12,8,12,12,12,12,12,12,71,71,71,118, +71,118,71,71,118,12,71,71,71,71,99,218,123,71,218,71,218,71,99,99, +99,218,218,71,218,218,99,58,58,58,58,218,99,218,218,99,58,99,78,58, +58,99,99,99,58,58,78,246,246,78,78,78,58,99,58,58,99,58,99,71, +11,71,12,23,118,118,118,23,112,30,103,208,208,65,242,112,118,23,23,118, +118,118,49,112,23,112,11,112,112,112,118,49,49,49,49,112,23,23,112,244, +244,22,22,22,242,112,49,223,223,66,223,49,223,49,223,49,12,71,71,99, +99,58,212,212,246,58,78,78,58,58,99,99,99,58,78,78,78,78,58,58, +99,99,99,58,58,58,58,58,99,218,71,218,99,99,218,58,99,99,71,218, +71,71,218,99,71,99,123,71,118,118,123,71,71,123,71,71,12,12,118,12, +12,12,12,12,12,12,71,12,71,8,12,92,12,92,71,12,118,118,12,12, +118,71,71,12,71,71,118,12,12,71,118,218,71,71,71,12,71,12,218,218, +99,99,218,218,71,71,71,218,99,99,99,99,71,71,218,71,99,58,58,58, +58,58,99,11,99,99,99,58,246,78,246,78,58,99,99,99,58,58,99,99, +99,11,71,112,112,118,118,92,118,23,118,112,30,237,103,65,65,22,30,54, +244,244,23,112,244,112,244,112,244,23,244,23,112,62,244,244,30,242,22,242, +22,30,23,49,49,19,82,223,223,49,49,49,223,49,12,11,11,218,99,58, +58,78,78,78,246,78,78,99,99,58,99,58,58,78,78,78,58,99,218,218, +71,99,99,99,58,99,58,99,71,123,71,218,99,99,218,99,218,71,12,71, +71,218,71,71,218,71,71,71,71,71,12,71,71,71,118,12,12,12,71,71, +12,12,12,12,118,12,12,92,12,8,12,12,71,12,12,12,12,12,71,12, +118,12,12,12,118,12,71,12,12,71,71,71,71,123,71,12,12,71,71,218, +218,218,11,71,123,71,71,218,71,99,99,58,99,99,71,218,218,99,218,58, +58,58,58,99,218,71,99,218,58,58,58,246,212,58,58,99,99,58,99,58, +58,58,58,218,71,71,112,71,118,118,49,23,118,118,49,112,112,30,237,22, +22,22,103,22,22,22,22,22,30,242,22,22,22,103,22,22,30,112,112,23, +49,49,49,82,223,66,49,49,49,49,223,12,118,71,218,99,99,58,99,58, +78,246,78,246,58,58,99,99,218,218,99,99,99,58,58,58,99,218,71,218, +99,99,58,58,58,99,218,123,71,71,218,218,99,99,99,123,71,71,71,92, +71,71,218,218,71,12,12,12,118,71,12,118,71,71,71,12,12,12,12,12, +12,12,118,118,12,12,12,12,12,8,92,92,92,12,12,12,12,12,12,12, +92,12,12,12,71,12,118,12,12,12,12,12,71,71,71,12,12,71,118,71, +71,123,71,71,71,118,71,71,71,123,71,218,218,99,218,71,12,71,71,218, +218,58,58,99,58,71,71,218,218,218,99,58,58,58,58,58,99,99,99,218, +218,99,58,58,99,99,99,11,11,11,23,112,118,112,49,118,118,118,23,118, +49,118,23,112,112,112,112,244,112,112,118,112,118,49,49,223,49,223,223,49, +223,223,49,49,223,49,223,223,118,118,71,11,218,99,218,99,218,78,58,58, +58,58,58,218,218,218,218,218,58,99,58,58,58,58,218,99,71,71,123,71, +218,99,58,99,99,71,71,12,12,71,71,71,218,218,218,71,118,71,71,12, +123,71,12,71,71,12,12,12,118,71,12,12,12,118,118,12,71,118,12,118, +12,12,12,12,12,92,12,12,92,8,92,92,12,12,92,12,92,12,12,12, +12,12,118,12,12,12,12,12,12,12,118,12,12,71,118,71,12,12,71,118, +71,71,71,123,218,118,12,71,71,71,71,99,99,218,218,71,71,71,71,71, +99,218,99,58,99,218,218,71,71,71,218,71,58,99,58,58,99,58,218,99, +99,218,99,99,58,58,58,99,58,99,218,11,71,112,11,112,118,23,118,23, +49,118,118,92,49,92,49,92,49,92,49,223,223,49,223,49,49,49,49,82, +49,49,49,223,118,118,71,71,11,71,99,218,218,99,58,58,58,58,58,58, +58,218,218,218,71,218,218,99,99,99,99,58,218,218,71,123,71,71,218,11, +99,99,218,218,71,71,12,71,12,218,218,218,71,218,118,12,71,118,71,71, +71,71,71,71,118,71,12,12,12,71,12,12,12,12,12,12,12,49,12,12, +12,92,12,49,12,92,12,12,92,8,92,92,92,92,92,12,92,12,12,92, +12,92,12,92,12,71,71,12,12,12,12,71,12,118,71,118,71,118,12,12, +12,12,71,71,218,71,71,118,118,12,12,118,71,218,71,218,123,12,12,12, +12,71,71,99,99,99,218,71,71,71,71,123,71,218,218,58,99,99,58,218, +99,218,218,11,99,218,99,218,218,58,58,58,99,218,71,11,71,71,118,11, +112,71,112,118,112,12,118,118,118,118,118,118,118,118,118,118,223,223,49,49, +118,118,118,71,71,71,218,71,218,71,99,99,99,218,58,58,58,218,218,218, +218,71,71,218,123,71,218,99,58,218,218,99,71,118,12,71,71,71,218,218, +218,99,71,118,12,12,12,71,71,123,71,71,71,12,118,12,92,71,118,71, +12,12,71,12,12,92,12,12,12,118,12,12,12,12,12,92,12,12,12,92, +71,92,12,92,92,92,92,92,12,8,92,92,92,92,92,92,92,92,92,12, +92,12,92,12,92,92,12,118,92,12,12,92,92,12,12,12,12,12,12,12, +12,12,71,118,12,118,71,71,12,12,12,12,118,71,218,71,218,71,118,12, +12,71,12,71,218,71,99,218,123,71,71,12,71,118,71,71,99,218,218,99, +218,99,218,218,218,71,123,71,218,218,218,218,99,99,99,58,99,99,99,218, +99,71,71,71,11,71,11,11,11,11,11,11,11,11,71,118,12,118,218,218, +71,218,71,71,218,71,99,71,99,99,99,58,218,99,218,218,71,71,71,71, +71,71,123,71,11,99,99,99,218,218,71,71,12,12,12,71,123,218,71,218, +71,118,71,12,118,12,12,71,71,218,118,12,12,12,92,12,71,118,71,71, +12,71,92,12,92,12,12,12,118,12,12,92,92,12,92,12,92,92,92,92, +92,92,92,92,12,92,92,92,92,8,92,92,92,12,92,92,92,92,92,92, +92,92,92,12,92,92,12,12,92,92,92,12,92,92,12,12,118,12,12,92, +92,12,12,12,71,71,71,118,12,118,12,12,12,71,12,71,71,71,71,12, +12,12,118,12,12,118,218,71,71,71,12,71,71,71,12,12,71,71,71,11, +218,99,218,218,218,218,71,71,71,71,71,71,71,71,218,218,218,218,99,218, +218,218,99,218,99,218,218,218,218,218,218,218,218,99,218,11,218,71,71,71, +71,123,71,123,71,218,99,218,218,11,218,99,71,71,71,71,71,71,71,92, +71,71,71,123,71,218,71,71,71,118,12,12,12,12,71,71,71,218,71,71, +12,12,12,12,12,12,12,71,71,71,12,12,12,12,12,12,12,12,118,12, +12,92,92,92,12,92,12,71,12,92,92,12,92,92,92,92,92,12,92,92, +92,92,92,92,92,92,92,92,92,8,92,19,92,92,92,92,92,223,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,12,118,12,12, +12,92,92,12,92,12,12,12,71,12,49,12,92,92,12,12,71,12,12,12, +12,71,12,12,12,12,71,12,71,71,218,218,71,118,12,12,12,71,12,12, +71,123,71,71,99,71,71,123,71,123,71,123,71,71,71,71,71,71,71,71, +71,218,218,218,71,71,218,71,218,71,218,71,71,123,71,123,71,123,71,123, +218,71,218,218,218,218,71,71,71,71,71,12,12,12,12,12,12,12,71,71, +71,123,218,218,71,71,12,12,12,71,12,12,12,12,71,71,71,12,118,12, +12,92,12,12,12,12,12,12,71,12,92,12,92,12,12,118,12,12,12,92, +92,92,92,92,92,12,92,92,12,92,92,92,92,19,12,92,92,92,92,92, +12,92,92,92,92,92,92,92,92,8,19,108,19,108,12,19,92,92,92,92, +92,92,92,92,92,19,92,92,92,92,92,92,92,92,92,92,92,92,12,92, +92,92,92,92,92,92,12,12,12,12,71,12,92,92,92,92,12,92,118,12, +12,12,12,12,92,12,12,12,71,12,71,71,71,12,12,12,12,12,12,92, +112,118,71,12,71,71,71,218,71,71,71,71,71,71,12,12,12,12,12,12, +12,118,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, +71,71,71,71,71,71,71,71,118,71,12,71,12,12,12,12,12,71,71,123, +71,71,71,92,12,12,12,12,92,92,71,12,12,12,12,71,12,12,92,12, +92,92,12,118,12,12,118,12,12,92,92,92,92,12,12,12,12,92,92,92, +92,12,92,12,92,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,19,19,108,92,8,92,92,19,92,108,92,19,92,92,92, +92,108,92,92,92,12,92,92,12,92,92,92,92,92,92,92,92,92,92,12, +12,92,92,92,92,223,12,92,12,12,12,12,12,92,92,12,92,12,12,12, +12,12,12,12,49,12,92,92,92,92,12,12,71,12,12,12,12,12,12,12, +92,92,118,92,12,12,118,12,12,12,12,12,12,71,12,12,12,12,12,12, +12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, +12,12,118,118,12,118,12,12,12,12,12,12,12,12,12,12,12,12,71,12, +12,12,71,92,12,92,92,49,12,12,12,12,118,12,12,118,92,12,92,92, +12,12,12,12,123,12,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,92,92,19,92,92,108, +92,19,92,108,108,92,108,92,108,8,19,108,19,92,19,108,108,108,92,19, +92,92,19,92,108,108,92,108,108,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,12,12,12,12,12,12,92,92,92,92,92,92,12,12,12,12,12,118,12, +12,12,12,92,12,12,12,12,71,12,12,12,12,71,71,12,12,71,118,118, +12,12,12,12,12,118,12,12,12,92,12,12,12,12,12,71,12,12,118,12, +12,71,12,12,12,12,12,92,118,118,12,12,12,12,71,12,12,12,49,12, +92,12,92,92,92,12,92,12,12,12,12,12,92,92,92,92,92,92,92,92, +12,12,71,92,92,92,12,92,223,92,92,92,12,92,92,92,92,92,12,19, +92,92,92,92,92,92,108,92,108,19,92,108,108,108,92,92,19,108,92,108, +19,92,19,92,108,92,108,19,19,8,19,108,19,108,108,19,92,19,108,19, +19,108,108,19,19,92,108,92,92,108,19,12,108,108,92,19,108,108,92,19, +92,92,92,92,92,92,108,19,92,92,92,92,12,92,92,92,92,92,92,92, +92,92,92,12,12,118,123,92,12,12,92,92,92,92,92,92,12,12,12,12, +12,92,12,12,92,12,92,92,92,92,92,92,12,12,12,12,12,12,12,71, +71,12,12,12,12,12,12,12,71,12,12,12,12,12,12,92,12,12,92,12, +92,12,12,49,12,92,12,12,12,12,12,71,12,12,12,12,92,12,92,12, +92,92,92,92,92,12,12,12,12,92,12,12,92,92,92,92,92,92,12,12, +12,92,92,92,92,19,108,92,92,92,92,92,92,92,92,19,92,108,108,92, +92,92,92,19,108,92,19,108,92,108,108,92,19,92,108,19,108,92,108,92, +19,108,108,92,108,108,19,92,108,8,19,19,19,19,19,108,19,19,108,92, +19,19,108,92,19,19,108,19,108,92,108,19,92,19,92,92,92,19,92,92, +92,92,92,92,92,92,19,108,92,19,19,92,92,92,92,92,92,92,223,92, +223,92,92,92,92,92,92,92,92,92,92,92,92,223,92,92,92,12,92,12, +12,12,12,12,92,12,12,92,12,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,92,49,92,12,92,92,12,12,92,12,92,12,92,12,12,92,12, +12,12,12,12,12,12,12,92,92,92,12,92,92,92,92,92,92,92,92,92, +92,92,12,12,12,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,19,92,92,108,12,92,92,92,12,19,92,92,108,92,19,19,92, +92,92,92,92,108,19,92,19,19,92,92,108,108,92,108,92,19,19,19,108, +19,19,19,19,19,19,108,19,19,8,19,53,19,53,19,53,19,53,19,108, +19,108,19,108,108,108,19,108,19,108,19,108,108,108,108,19,108,19,108,19, +19,92,108,19,19,12,108,92,108,92,108,19,108,92,92,92,92,92,92,19, +92,19,108,92,19,92,92,92,92,92,92,92,92,92,92,92,108,108,19,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,92,92,92,12,92,19,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,108,19,92,92,223,92,92,92,92,92,92, +19,108,108,108,108,19,92,92,92,92,108,108,108,108,108,92,108,92,108,19, +92,19,108,108,19,108,108,108,108,108,19,19,19,19,19,19,108,108,53,19, +108,19,108,53,19,53,19,53,19,8,19,19,19,19,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,108,19,108,19, +19,19,19,19,108,19,108,19,108,19,108,19,19,19,19,108,19,92,92,92, +19,19,108,19,108,19,19,92,92,92,92,92,92,92,92,19,19,108,19,108, +19,92,19,92,92,92,92,92,92,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,19,19,19,92,19,19,92,19,19,108,92,92,92,19,92,92,92, +92,92,92,92,92,19,19,19,19,108,19,108,92,92,92,92,92,92,19,19, +92,19,223,19,108,19,108,92,19,19,19,19,19,19,108,19,108,19,108,19, +19,19,19,19,19,19,19,19,19,108,19,108,19,108,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,8}; diff --git a/plug-ins/FractalExplorer/.cvsignore b/plug-ins/FractalExplorer/.cvsignore new file mode 100644 index 0000000000..d3267e4231 --- /dev/null +++ b/plug-ins/FractalExplorer/.cvsignore @@ -0,0 +1,5 @@ +Makefile.in +Makefile +.deps +_libs +FractalExplorer diff --git a/plug-ins/FractalExplorer/Callbacks.h b/plug-ins/FractalExplorer/Callbacks.h new file mode 100644 index 0000000000..f0f25790f2 --- /dev/null +++ b/plug-ins/FractalExplorer/Callbacks.h @@ -0,0 +1,362 @@ +/********************************************************************** + FUNCTION: dialog_close_callback + *********************************************************************/ + +void +dialog_close_callback(GtkWidget * widget, gpointer data) +{ + gtk_main_quit(); +} /* dialog_close_callback */ + +/********************************************************************** + FUNCTION: dialog_save_callback + *********************************************************************/ + +void +dialog_save_callback(GtkWidget * widget, gpointer data) +{ + create_file_selection(); +} /* dialog_save_callback */ + +/********************************************************************** + FUNCTION: dialog_savelanguage_callback + *********************************************************************/ + +void +dialog_savelanguage_callback(GtkWidget * widget, gpointer data) +{ + FILE * fp; + char * filname=NULL; + filname =g_malloc(100); + sprintf (filname, "%s%s", getenv("HOME"), "/.fractalexplorerrc"); + lng=wvals.language; + fp = fopen (filname, "w"); + if (fp) { + if (lng==0) fputs("FX-LANG:En\n",fp); + if (lng==1) fputs("FX-LANG:Fr\n",fp); + if (lng==2) fputs("FX-LANG:De\n",fp); + fclose(fp); + } + +} /* dialog_savelanguage_callback */ + + +/********************************************************************** + FUNCTION: load_button_press + *********************************************************************/ + +void +load_button_press(GtkWidget * widget, + gpointer data) +{ + create_load_file_selection(); +} + + +/********************************************************************** + FUNCTION: dialog_ok_callback + *********************************************************************/ + +void +dialog_ok_callback(GtkWidget * widget, gpointer data) +{ + wint.run = TRUE; + gtk_widget_destroy(GTK_WIDGET(data)); +} /* dialog_ok_callback */ + +/********************************************************************** + FUNCTION: dialog_reset_callback + *********************************************************************/ + +void +dialog_reset_callback(GtkWidget * widget, gpointer data) +{ + wvals.xmin = standardvals.xmin; + wvals.xmax = standardvals.xmax; + wvals.ymin = standardvals.ymin; + wvals.ymax = standardvals.ymax; + wvals.iter = standardvals.iter; + wvals.cx = standardvals.cx; + wvals.cy = standardvals.cy; + dialog_change_scale(); + set_cmap_preview(); + dialog_update_preview(); +} + +/********************************************************************** + FUNCTION: dialog_redraw_callback + *********************************************************************/ + +void +dialog_redraw_callback(GtkWidget * widget, gpointer data) +{ + int alwaysprev = wvals.alwayspreview; + wvals.alwayspreview = TRUE; + set_cmap_preview(); + dialog_update_preview(); + wvals.alwayspreview = alwaysprev; +} + +/********************************************************************** + FUNCTION: dialog_cancel_callback + *********************************************************************/ + +void +dialog_cancel_callback(GtkWidget * widget, gpointer data) +{ + gtk_widget_destroy(GTK_WIDGET(data)); +} /* dialog_cancel_callback */ + +/********************************************************************** + FUNCTION: dialog_undo_zoom_callback + *********************************************************************/ + +void +dialog_undo_zoom_callback(GtkWidget * widget, gpointer data) +{ + if (zoomindex > 1) { + zooms[zoomindex] = wvals; + zoomindex--; + wvals = zooms[zoomindex]; + dialog_change_scale(); + set_cmap_preview(); + dialog_update_preview(); + } +} /* dialog_undo_zoom_callback */ + +/********************************************************************** + FUNCTION: dialog_redo_zoom_callback + *********************************************************************/ + +void +dialog_redo_zoom_callback(GtkWidget * widget, gpointer data) +{ + if (zoomindex < zoommax) { + zoomindex++; + wvals = zooms[zoomindex]; + dialog_change_scale(); + set_cmap_preview(); + dialog_update_preview(); + } +} /* dialog_redo_zoom_callback */ + +/********************************************************************** + FUNCTION: dialog_step_in_callback + *********************************************************************/ + +void +dialog_step_in_callback(GtkWidget * widget, gpointer data) +{ + double xdifferenz; + double ydifferenz; + if (zoomindex < zoommax) { + zooms[zoomindex]=wvals; + zoomindex++; + } + xdifferenz=wvals.xmax-wvals.xmin; + ydifferenz=wvals.ymax-wvals.ymin; + wvals.xmin+=1.0/6.0*xdifferenz; + wvals.ymin+=1.0/6.0*ydifferenz; + wvals.xmax-=1.0/6.0*xdifferenz; + wvals.ymax-=1.0/6.0*ydifferenz; + zooms[zoomindex]=wvals; + dialog_change_scale(); + set_cmap_preview(); + dialog_update_preview(); +} /* dialog_step_in_callback */ + +/********************************************************************** + FUNCTION: dialog_step_out_callback + *********************************************************************/ + +void +dialog_step_out_callback(GtkWidget * widget, gpointer data) +{ + double xdifferenz; + double ydifferenz; + if (zoomindex < zoommax) { + zooms[zoomindex]=wvals; + zoomindex++; + } + xdifferenz=wvals.xmax-wvals.xmin; + ydifferenz=wvals.ymax-wvals.ymin; + wvals.xmin-=1.0/4.0*xdifferenz; + wvals.ymin-=1.0/4.0*ydifferenz; + wvals.xmax+=1.0/4.0*xdifferenz; + wvals.ymax+=1.0/4.0*ydifferenz; + zooms[zoomindex]=wvals; + dialog_change_scale(); + set_cmap_preview(); + dialog_update_preview(); +} /* dialog_step_out_callback */ + +/********************************************************************** + FUNCTION: explorer_logo_ok_callback + *********************************************************************/ + +void +explorer_logo_ok_callback(GtkWidget * widget, gpointer data) +{ + gtk_widget_set_sensitive(maindlg, TRUE); + gtk_widget_destroy(logodlg); +} + +/********************************************************************** + FUNCTION: explorer_about_callback + *********************************************************************/ + +void +explorer_about_callback(GtkWidget * widget, gpointer data) +{ + gtk_widget_set_sensitive(maindlg, FALSE); + explorer_logo_dialog(); +} + +/********************************************************************** + FUNCTION: explorer_toggle_update + *********************************************************************/ + +void +explorer_toggle_update(GtkWidget * widget, + gpointer data) +{ + int *toggle_val; + + toggle_val = (int *) data; + + if (GTK_TOGGLE_BUTTON(widget)->active) + *toggle_val = TRUE; + else + *toggle_val = FALSE; + + if (do_redsinus) + wvals.redmode = SINUS; + else if (do_redcosinus) + wvals.redmode = COSINUS; + else if (do_rednone) + wvals.redmode = NONE; + + if (do_greensinus) + wvals.greenmode = SINUS; + else if (do_greencosinus) + wvals.greenmode = COSINUS; + else if (do_greennone) + wvals.greenmode = NONE; + + if (do_bluesinus) + wvals.bluemode = SINUS; + else if (do_bluecosinus) + wvals.bluemode = COSINUS; + else if (do_bluenone) + wvals.bluemode = NONE; + + if (do_colormode1) + wvals.colormode = 0; + else if (do_colormode2) + wvals.colormode = 1; + + if (do_english) + wvals.language = 0; + else if (do_french) + wvals.language = 1; + else if (do_german) + wvals.language = 2; + + + if (do_type0) + wvals.fractaltype = 0; + else if (do_type1) + wvals.fractaltype = 1; + else if (do_type2) + wvals.fractaltype = 2; + else if (do_type3) + wvals.fractaltype = 3; + else if (do_type4) + wvals.fractaltype = 4; + else if (do_type5) + wvals.fractaltype = 5; + else if (do_type6) + wvals.fractaltype = 6; + else if (do_type7) + wvals.fractaltype = 7; + else if (do_type8) + wvals.fractaltype = 8; + + set_cmap_preview(); + dialog_update_preview(); +} + +/********************************************************************** + FUNCTION: dialog_scale_update + *********************************************************************/ + +void +dialog_scale_update(GtkAdjustment * adjustment, gdouble * value) +{ + GtkWidget *entry; + char buf[256]; + + if (*value != adjustment->value) { + *value = adjustment->value; + + entry = gtk_object_get_user_data(GTK_OBJECT(adjustment)); + sprintf(buf, "%0.15f", *value); + + gtk_signal_handler_block_by_data(GTK_OBJECT(entry), value); + gtk_entry_set_text(GTK_ENTRY(entry), buf); + gtk_signal_handler_unblock_by_data(GTK_OBJECT(entry), value); + + dialog_update_preview(); + } +} /* dialog_scale_update */ + +/********************************************************************** + FUNCTION: dialog_scale_int_update + *********************************************************************/ + +void +dialog_scale_int_update(GtkAdjustment * adjustment, gdouble * value) +{ + GtkWidget *entry; + char buf[256]; + + if (*value != adjustment->value) { + *value = adjustment->value; + + entry = gtk_object_get_user_data(GTK_OBJECT(adjustment)); + sprintf(buf, "%i", (int) *value); + + gtk_signal_handler_block_by_data(GTK_OBJECT(entry), value); + gtk_entry_set_text(GTK_ENTRY(entry), buf); + gtk_signal_handler_unblock_by_data(GTK_OBJECT(entry), value); + set_cmap_preview(); + dialog_update_preview(); + } +} /* dialog_scale_int_update */ + +/********************************************************************** + FUNCTION: dialog_entry_update + *********************************************************************/ + +void +dialog_entry_update(GtkWidget * widget, gdouble * value) +{ + GtkAdjustment *adjustment; + gdouble new_value; + + new_value = atof(gtk_entry_get_text(GTK_ENTRY(widget))); + + if (*value != new_value) { + adjustment = gtk_object_get_user_data(GTK_OBJECT(widget)); + + if ((new_value >= adjustment->lower) && + (new_value <= adjustment->upper)) { + *value = new_value; + adjustment->value = new_value; + + gtk_signal_emit_by_name(GTK_OBJECT(adjustment), "value_changed"); + + dialog_update_preview(); + } + } +} /* dialog_entry_update */ diff --git a/plug-ins/FractalExplorer/Dialogs.h b/plug-ins/FractalExplorer/Dialogs.h new file mode 100644 index 0000000000..c7bf0b66cc --- /dev/null +++ b/plug-ins/FractalExplorer/Dialogs.h @@ -0,0 +1,2300 @@ +/********************************************************************** + FUNCTION: explorer_dialog + *********************************************************************/ + +gint +explorer_dialog(void) +{ + GtkWidget *dialog, + *top_table, + *text, + *top_table2, + *frame, + *frame2, + *frame3, + *toggle, + *toggle_vbox, + *toggle_vbox2, + *toggle_vbox3, + *notebook, + *hbox, + *table, + *table6, + *button; + gint argc; + gchar **argv; + guchar *color_cube; + GSList *redmode_group = NULL, + *greenmode_group = NULL, + *bluemode_group = NULL, + *language_group = NULL, + *colormode_group = NULL, + *type_group = NULL; + + do_redsinus = (wvals.redmode == SINUS); + do_redcosinus = (wvals.redmode == COSINUS); + do_rednone = (wvals.redmode == NONE); + do_greensinus = (wvals.greenmode == SINUS); + do_greencosinus = (wvals.greenmode == COSINUS); + do_greennone = (wvals.greenmode == NONE); + do_bluesinus = (wvals.bluemode == SINUS); + do_bluecosinus = (wvals.bluemode == COSINUS); + do_bluenone = (wvals.bluemode == NONE); + do_redinvert = (wvals.redinvert != FALSE); + do_greeninvert = (wvals.greeninvert != FALSE); + do_blueinvert = (wvals.blueinvert != FALSE); + do_colormode1 = (wvals.colormode == 0); + do_colormode2 = (wvals.colormode == 1); + do_type0 = (wvals.fractaltype == 0); + do_type1 = (wvals.fractaltype == 1); + do_type2 = (wvals.fractaltype == 2); + do_type3 = (wvals.fractaltype == 3); + do_type4 = (wvals.fractaltype == 4); + do_type5 = (wvals.fractaltype == 5); + do_type6 = (wvals.fractaltype == 6); + do_type7 = (wvals.fractaltype == 7); + do_type8 = (wvals.fractaltype == 8); + + do_english = (wvals.language == 0); + do_french = (wvals.language == 1); + do_german = (wvals.language == 2); + + argc = 1; + argv = g_new(gchar *, 1); + argv[0] = g_strdup("fractalexplorer"); + + gtk_init(&argc, &argv); + + plug_in_parse_fractalexplorer_path(); + + gtk_preview_set_gamma(gimp_gamma()); + gtk_preview_set_install_cmap(gimp_install_cmap()); + color_cube = gimp_color_cube(); + gtk_preview_set_color_cube(color_cube[0], color_cube[1], color_cube[2], color_cube[3]); + + gtk_widget_set_default_visual(gtk_preview_get_visual()); + gtk_widget_set_default_colormap(gtk_preview_get_cmap()); + + wint.wimage = g_malloc(preview_width * preview_height * 3 * sizeof(guchar)); + elements = g_malloc(sizeof(DialogElements)); + + explorer_load_dialog(); + + dialog = maindlg = gtk_dialog_new(); + gtk_window_set_title(GTK_WINDOW(dialog), "Fractal Explorer "); + gtk_window_position(GTK_WINDOW(dialog), GTK_WIN_POS_NONE); + gtk_container_border_width(GTK_CONTAINER(dialog), 0); + gtk_signal_connect(GTK_OBJECT(dialog), "destroy", + (GtkSignalFunc) dialog_close_callback, + NULL); + + top_table = gtk_table_new(4, 5, FALSE); + gtk_container_border_width(GTK_CONTAINER(top_table), 4); + gtk_table_set_row_spacings(GTK_TABLE(top_table), 10); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), top_table, FALSE, FALSE, 0); + gtk_widget_show(top_table); + + /* Tool-Tips */ + + /* use black as foreground: */ + tips = gtk_tooltips_new(); + tips_fg.red = 0; + tips_fg.green = 0; + tips_fg.blue = 0; + /* postit yellow (khaki) as background: */ + gdk_color_alloc(gtk_widget_get_colormap(top_table), &tips_fg); + tips_bg.red = 61669; + tips_bg.green = 59113; + tips_bg.blue = 35979; + gdk_color_alloc(gtk_widget_get_colormap(top_table), &tips_bg); + gtk_tooltips_set_colors(tips, &tips_bg, &tips_fg); + + /* Preview */ + + frame = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); + gtk_table_attach(GTK_TABLE(top_table), frame, 0, 1, 0, 1, 0, 0, 0, 0); + gtk_widget_show(frame); + + wint.preview = gtk_preview_new(GTK_PREVIEW_COLOR); + gtk_preview_size(GTK_PREVIEW(wint.preview), preview_width, preview_height); + gtk_container_add(GTK_CONTAINER(frame), wint.preview); + gtk_signal_connect(GTK_OBJECT(wint.preview), "button_press_event", + (GtkSignalFunc) preview_button_press_event, NULL); + gtk_signal_connect(GTK_OBJECT(wint.preview), "button_release_event", + (GtkSignalFunc) preview_button_release_event, NULL); + gtk_signal_connect(GTK_OBJECT(wint.preview), "motion_notify_event", + (GtkSignalFunc) preview_motion_notify_event, NULL); + gtk_signal_connect(GTK_OBJECT(wint.preview), "leave_notify_event", + (GtkSignalFunc) preview_leave_notify_event, NULL); + gtk_signal_connect(GTK_OBJECT(wint.preview), "enter_notify_event", + (GtkSignalFunc) preview_enter_notify_event, NULL); + gtk_widget_set_events(wint.preview, GDK_BUTTON_PRESS_MASK + | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK + | GDK_LEAVE_NOTIFY_MASK | GDK_ENTER_NOTIFY_MASK); + gtk_widget_show(wint.preview); + + /* Create notebook */ + notebook = gtk_notebook_new (); + gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook), GTK_POS_TOP); + gtk_table_attach(GTK_TABLE(top_table), notebook, 4, 5, 0, 4, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); + gtk_widget_show (notebook); + + + /* Controls */ + frame2 = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(frame2), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width (GTK_CONTAINER (frame2), 10); + gtk_notebook_append_page (GTK_NOTEBOOK (notebook), frame2, + gtk_label_new (msg[lng][MSG_FRACTALOPTIONS])); + gtk_widget_show (frame2); + + toggle_vbox2 = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(toggle_vbox2), 0); + gtk_container_add(GTK_CONTAINER(frame2), toggle_vbox2); + gtk_widget_show(toggle_vbox2); + + top_table2 = gtk_table_new(5, 5, FALSE); + gtk_container_border_width(GTK_CONTAINER(top_table2), 10); + gtk_table_set_row_spacings(GTK_TABLE(top_table2), 0); + gtk_box_pack_start(GTK_BOX(toggle_vbox2), top_table2, FALSE, FALSE, 0); + gtk_widget_show(top_table2); + + frame = gtk_frame_new(msg[lng][MSG_PARAMETERS]); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width (GTK_CONTAINER (frame), 0); + gtk_table_attach(GTK_TABLE(top_table2), frame, 0, 4, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); + + toggle_vbox = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(toggle_vbox), 0); + gtk_container_add(GTK_CONTAINER(frame), toggle_vbox); + + table = gtk_table_new(9, 5, FALSE); + gtk_container_border_width(GTK_CONTAINER(table), 5); + gtk_table_set_row_spacings(GTK_TABLE(table), 0); + gtk_box_pack_start(GTK_BOX(toggle_vbox), table, FALSE, FALSE, 0); + gtk_widget_show(table); + dialog_create_value("XMIN", GTK_TABLE(table), 0, &wvals.xmin, -3, 3, msg[lng][MSG_XMIN], &(elements->xmin)); + dialog_create_value("XMAX", GTK_TABLE(table), 1, &wvals.xmax, -3, 3, msg[lng][MSG_XMAX], &(elements->xmax)); + dialog_create_value("YMIN", GTK_TABLE(table), 2, &wvals.ymin, -3, 3, msg[lng][MSG_YMIN], &(elements->ymin)); + dialog_create_value("YMAX", GTK_TABLE(table), 3, &wvals.ymax, -3, 3, msg[lng][MSG_YMAX], &(elements->ymax)); + dialog_create_value("ITER", GTK_TABLE(table), 4, &wvals.iter, 0, 1000, msg[lng][MSG_ITER], &(elements->iter)); + dialog_create_value("CX", GTK_TABLE(table), 5, &wvals.cx, -2.5, 2.5, msg[lng][MSG_CX], &(elements->cx)); + dialog_create_value("CY", GTK_TABLE(table), 6, &wvals.cy, -2.5, 2.5, msg[lng][MSG_CY], &(elements->cy)); + + + button = gtk_button_new(); + gtk_table_attach(GTK_TABLE(table), button, 1, 2, 7, 8, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); + text = gtk_label_new(msg[lng][MSG_RESET]); + gtk_misc_set_alignment(GTK_MISC(text), 0.5, 0.5); + gtk_container_add(GTK_CONTAINER(button), text); + gtk_widget_show(text); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc) dialog_reset_callback, + dialog); + gtk_widget_show(button); + set_tooltip(tips, button, msg[lng][MSG_RESET_PARAM_COMMENT]); + + button = gtk_button_new(); + text = gtk_label_new(msg[lng][MSG_LOAD]); + gtk_misc_set_alignment(GTK_MISC(text), 0.5, 0.5); + gtk_container_add(GTK_CONTAINER(button), text); + gtk_table_attach(GTK_TABLE(table), button, 0, 1, 7, 8, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); + gtk_widget_show(text); + + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc) load_button_press, + dialog); + gtk_widget_show(button); + set_tooltip(tips, button, msg[lng][MSG_LOADCOMMENT]); + + button = gtk_button_new(); + gtk_table_attach(GTK_TABLE(table), button, 2, 3, 7, 8, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); + text = gtk_label_new(msg[lng][MSG_SAVE]); + gtk_misc_set_alignment(GTK_MISC(text), 0.5, 0.5); + gtk_container_add(GTK_CONTAINER(button), text); + gtk_widget_show(text); + + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc) dialog_save_callback, + dialog); + gtk_widget_show(button); + set_tooltip(tips, button, msg[lng][MSG_SAVECOMMENT]); + + + gtk_widget_show(table); + gtk_widget_show(toggle_vbox); + gtk_widget_show(frame); + +/* Fractal type toggle box */ + frame = gtk_frame_new(msg[lng][MSG_FRACTALTYPE]); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_table_attach(GTK_TABLE(top_table2), frame, 0, 4, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); + + hbox = gtk_hbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(hbox), 0); + gtk_container_add(GTK_CONTAINER(frame), hbox); + + toggle_vbox = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox), toggle_vbox, FALSE, FALSE, 0); + + toggle = elements->type_mandelbrot = gtk_radio_button_new_with_label(type_group, "Mandelbrot"); + type_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_type0); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_type0); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "Mandelbrot"); + + toggle = elements->type_julia = gtk_radio_button_new_with_label(type_group, "Julia"); + type_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_type1); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_type1); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "Julia"); + + toggle = elements->type_barnsley1 = gtk_radio_button_new_with_label(type_group, "Barnsley 1"); + type_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_type2); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_type2); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "Barnsley"); + + gtk_widget_show(toggle_vbox); + + toggle_vbox = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox), toggle_vbox, FALSE, FALSE, 0); + + toggle = elements->type_barnsley2 = gtk_radio_button_new_with_label(type_group, "Barnsley 2"); + type_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_type3); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_type3); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "Barnsley 2"); + + toggle = elements->type_barnsley3 = gtk_radio_button_new_with_label(type_group, "Barnsley 3"); + type_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_type4); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_type4); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "Barnsley 3"); + + toggle = elements->type_spider = gtk_radio_button_new_with_label(type_group, "Spider"); + type_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_type5); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_type5); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "Spider"); + + gtk_widget_show(toggle_vbox); + + toggle_vbox = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox), toggle_vbox, FALSE, FALSE, 0); + + toggle = elements->type_manowar = gtk_radio_button_new_with_label(type_group, "Man'o'war"); + type_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_type6); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_type6); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "Man'o'war"); + + toggle = elements->type_lambda = gtk_radio_button_new_with_label(type_group, "Lambda"); + type_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_type7); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_type7); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "Lambda"); + + toggle = elements->type_sierpinski = gtk_radio_button_new_with_label(type_group, "Sierpinski"); + type_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_type8); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_type8); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "Sierpinski"); + + gtk_widget_show(toggle_vbox); + + toggle_vbox = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(toggle_vbox), 5); + + gtk_box_pack_start(GTK_BOX(hbox), toggle_vbox, TRUE, TRUE, 0); + + + gtk_widget_show(toggle_vbox); + gtk_widget_show(hbox); + gtk_widget_show(frame); + + frame = gtk_frame_new(msg[lng][MSG_PREVIEW]); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_table_attach(GTK_TABLE(top_table), frame, 0, 1, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); + toggle_vbox = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(toggle_vbox), 5); + gtk_container_add(GTK_CONTAINER(frame), toggle_vbox); + + toggle = gtk_check_button_new_with_label(msg[lng][MSG_REALTIMEPREVIEW]); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &wvals.alwayspreview); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), wvals.alwayspreview); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_REDRAWCOMMENT]); + + button = gtk_button_new(); + text = gtk_label_new(msg[lng][MSG_REDRAW]); + gtk_misc_set_alignment(GTK_MISC(text), 0.5, 0.5); + gtk_container_add(GTK_CONTAINER(button), text); + gtk_widget_show(text); + + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc) dialog_redraw_callback, + dialog); + gtk_box_pack_start(GTK_BOX(toggle_vbox), button, FALSE, FALSE, 0); + gtk_widget_show(button); + set_tooltip(tips, button, msg[lng][MSG_REDRAWPREVIEW]); + + gtk_widget_show(toggle_vbox); + gtk_widget_show(frame); + + frame = gtk_frame_new(msg[lng][MSG_ZOOMOPTS]); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_table_attach(GTK_TABLE(top_table), frame, 0, 1, 3, 4, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); + toggle_vbox = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(toggle_vbox), 5); + gtk_container_add(GTK_CONTAINER(frame), toggle_vbox); + + button = gtk_button_new(); + text = gtk_label_new(msg[lng][MSG_UNDOZOOM]); + gtk_misc_set_alignment(GTK_MISC(text), 0.5, 0.5); + gtk_container_add(GTK_CONTAINER(button), text); + gtk_widget_show(text); + + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc) dialog_undo_zoom_callback, + dialog); + gtk_box_pack_start(GTK_BOX(toggle_vbox), button, FALSE, FALSE, 0); + gtk_widget_show(button); + set_tooltip(tips, button,msg[lng][MSG_UNDOCOMMENT]); + + button = gtk_button_new(); + text = gtk_label_new(msg[lng][MSG_REDOZOOM]); + gtk_misc_set_alignment(GTK_MISC(text), 0.5, 0.5); + gtk_container_add(GTK_CONTAINER(button), text); + gtk_widget_show(text); + + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc) dialog_redo_zoom_callback, + dialog); + gtk_box_pack_start(GTK_BOX(toggle_vbox), button, FALSE, FALSE, 0); + gtk_widget_show(button); + set_tooltip(tips, button, msg[lng][MSG_REDOCOMMENT]); + + button = gtk_button_new(); + text = gtk_label_new(msg[lng][MSG_STEPIN]); + gtk_misc_set_alignment(GTK_MISC(text), 0.5, 0.5); + gtk_container_add(GTK_CONTAINER(button), text); + gtk_widget_show(text); + + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc) dialog_step_in_callback, + dialog); + gtk_box_pack_start(GTK_BOX(toggle_vbox), button, FALSE, FALSE, 0); + gtk_widget_show(button); + set_tooltip(tips, button, msg[lng][MSG_STEPIN]); + + button = gtk_button_new(); + text = gtk_label_new(msg[lng][MSG_STEPOUT]); + gtk_misc_set_alignment(GTK_MISC(text), 0.5, 0.5); + gtk_container_add(GTK_CONTAINER(button), text); + gtk_widget_show(text); + + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc) dialog_step_out_callback, + dialog); + gtk_box_pack_start(GTK_BOX(toggle_vbox), button, FALSE, FALSE, 0); + gtk_widget_show(button); + set_tooltip(tips, button, msg[lng][MSG_STEPOUT]); + + gtk_widget_show(toggle_vbox); + gtk_widget_show(frame); + + frame2 = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(frame2), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width (GTK_CONTAINER (frame2), 10); + gtk_widget_show(frame2); + gtk_notebook_append_page (GTK_NOTEBOOK (notebook), frame2, + gtk_label_new (msg[lng][MSG_COLOROPTS])); + + toggle_vbox2 = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(toggle_vbox2), 0); + gtk_container_add(GTK_CONTAINER(frame2), toggle_vbox2); + gtk_widget_show(toggle_vbox2); + + top_table2 = gtk_table_new(5, 5, FALSE); + gtk_container_border_width(GTK_CONTAINER(top_table2), 10); + gtk_table_set_row_spacings(GTK_TABLE(top_table2), 0); + gtk_box_pack_start(GTK_BOX(toggle_vbox2), top_table2, FALSE, FALSE, 0); + gtk_widget_show(top_table2); + + frame = gtk_frame_new(msg[lng][MSG_COLORDENSITY]); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_table_attach(GTK_TABLE(top_table2), frame, 0, 1, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); + gtk_widget_show(frame); + + toggle_vbox = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(toggle_vbox), 0); + gtk_container_add(GTK_CONTAINER(frame), toggle_vbox); + gtk_widget_show(toggle_vbox); + + table6 = gtk_table_new(3, 3, FALSE); + gtk_container_border_width(GTK_CONTAINER(table6), 0); + gtk_table_set_row_spacings(GTK_TABLE(table6), 0); + gtk_box_pack_start(GTK_BOX(toggle_vbox), table6, FALSE, FALSE, 0); + gtk_widget_show(table6); + dialog_create_int_value(msg[lng][MSG_RED], GTK_TABLE(table6), 0, &wvals.redstretch, 0, 128, msg[lng][MSG_REDINTENSITY], &(elements->red)); + dialog_create_int_value(msg[lng][MSG_GREEN], GTK_TABLE(table6), 1, &wvals.greenstretch, 0, 128, msg[lng][MSG_GREENINTENSITY], &(elements->green)); + dialog_create_int_value(msg[lng][MSG_BLUE], GTK_TABLE(table6), 2, &wvals.bluestretch, 0, 128, msg[lng][MSG_BLUEINTENSITY], &(elements->blue)); + gtk_widget_show(toggle_vbox); + gtk_widget_show(frame); + + frame3 = gtk_frame_new(msg[lng][MSG_COLORFUNCTION]); + gtk_frame_set_shadow_type(GTK_FRAME(frame3), GTK_SHADOW_ETCHED_IN); + gtk_table_attach(GTK_TABLE(top_table2), frame3, 0, 1, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); + gtk_widget_show(frame3); + + toggle_vbox3 = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(toggle_vbox3), 0); + gtk_container_add(GTK_CONTAINER(frame3), toggle_vbox3); + gtk_widget_show(toggle_vbox3); + + table6 = gtk_table_new(4, 4, FALSE); + gtk_container_border_width(GTK_CONTAINER(table6), 0); + gtk_table_set_row_spacings(GTK_TABLE(table6), 0); + gtk_box_pack_start(GTK_BOX(toggle_vbox3), table6, FALSE, FALSE, 0); + gtk_widget_show(table6); + + frame = gtk_frame_new(msg[lng][MSG_RED]); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_table_attach(GTK_TABLE(table6), frame, 0, 1, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); + gtk_widget_show(frame); + + toggle_vbox = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(toggle_vbox), 0); + gtk_container_add(GTK_CONTAINER(frame), toggle_vbox); + gtk_widget_show(toggle_vbox); + + toggle = elements->redmodesin = gtk_radio_button_new_with_label(redmode_group, msg[lng][MSG_SINE]); + redmode_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_redsinus); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_redsinus); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_SINECOMMENT]); + + toggle = elements->redmodecos = gtk_radio_button_new_with_label(redmode_group, msg[lng][MSG_COSINE]); + redmode_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_redcosinus); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_redcosinus); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_COSINECOMMENT]); + + toggle = elements->redmodenone = gtk_radio_button_new_with_label(redmode_group, msg[lng][MSG_NONE]); + redmode_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_rednone); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_rednone); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_NONECOMMENT]); + + elements->redinvert = toggle = gtk_check_button_new_with_label(msg[lng][MSG_INVERSION]); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &wvals.redinvert); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), wvals.redinvert); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_INVERSIONCOMMENT]); + + + gtk_widget_show(toggle_vbox); + gtk_widget_show(frame); + +/* Greenmode toggle box */ + frame = gtk_frame_new(msg[lng][MSG_GREEN]); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_table_attach(GTK_TABLE(table6), frame, 1, 2, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); + gtk_widget_show(frame); + toggle_vbox = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(toggle_vbox), 0); + gtk_container_add(GTK_CONTAINER(frame), toggle_vbox); + gtk_widget_show(toggle_vbox); + + toggle = elements->greenmodesin = gtk_radio_button_new_with_label(greenmode_group, msg[lng][MSG_SINE]); + greenmode_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_greensinus); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_greensinus); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_SINECOMMENT]); + + toggle = elements->greenmodecos = gtk_radio_button_new_with_label(greenmode_group, msg[lng][MSG_COSINE]); + greenmode_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_greencosinus); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_greencosinus); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_COSINECOMMENT]); + + toggle = elements->greenmodenone = gtk_radio_button_new_with_label(greenmode_group, msg[lng][MSG_NONE]); + greenmode_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_greennone); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_greennone); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_NONECOMMENT]); + + elements->greeninvert = toggle = gtk_check_button_new_with_label(msg[lng][MSG_INVERSION]); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &wvals.greeninvert); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), wvals.greeninvert); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_INVERSIONCOMMENT]); + + gtk_widget_show(toggle_vbox); + gtk_widget_show(frame); + +/* Bluemode toggle box */ + frame = gtk_frame_new(msg[lng][MSG_BLUE]); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_table_attach(GTK_TABLE(table6), frame, 2, 3, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); + gtk_widget_show(frame); + toggle_vbox = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(toggle_vbox), 0); + gtk_container_add(GTK_CONTAINER(frame), toggle_vbox); + gtk_widget_show(toggle_vbox); + + toggle = elements->bluemodesin = gtk_radio_button_new_with_label(bluemode_group, msg[lng][MSG_SINE]); + bluemode_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_bluesinus); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_bluesinus); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_SINECOMMENT]); + + toggle = elements->bluemodecos = gtk_radio_button_new_with_label(bluemode_group, msg[lng][MSG_COSINE]); + bluemode_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_bluecosinus); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_bluecosinus); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_COSINECOMMENT]); + + toggle = elements->bluemodenone = gtk_radio_button_new_with_label(bluemode_group, msg[lng][MSG_NONE]); + bluemode_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_bluenone); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_bluenone); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_NONECOMMENT]); + + + elements->blueinvert = toggle = gtk_check_button_new_with_label(msg[lng][MSG_INVERSION]); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &wvals.blueinvert); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), wvals.blueinvert); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_INVERSIONCOMMENT]); + + gtk_widget_show(toggle_vbox); + gtk_widget_show(frame); + gtk_widget_show(toggle_vbox3); + gtk_widget_show(frame3); + +/* Colormode toggle box */ + + frame = gtk_frame_new(msg[lng][MSG_COLORMODE]); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_table_attach(GTK_TABLE(top_table2), frame, 0, 1, 2, 3, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); + hbox = gtk_hbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(hbox), 0); + gtk_container_add(GTK_CONTAINER(frame), hbox); + toggle_vbox = gtk_vbox_new(FALSE, 0); + + gtk_box_pack_start(GTK_BOX(hbox), toggle_vbox, FALSE, FALSE, 10); + toggle = elements->colormode0 = gtk_radio_button_new_with_label(colormode_group, msg[lng][MSG_ASSPECIFIED]); + colormode_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_colormode1); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_colormode1); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_ASSPECIFIEDCOMMENT]); + + + toggle = elements->colormode1 = gtk_radio_button_new_with_label(colormode_group, msg[lng][MSG_APPLYGRADIENT]); + colormode_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_colormode2); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_colormode2); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_APPLYGRADIENTCOMMENT]); + gtk_widget_show(toggle_vbox); + toggle_vbox = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox), toggle_vbox, TRUE, TRUE, 10); + cmap_preview = gtk_preview_new(GTK_PREVIEW_COLOR); + gtk_preview_size(GTK_PREVIEW(cmap_preview), 32, 32); + gtk_box_pack_start(GTK_BOX(toggle_vbox), cmap_preview, FALSE, FALSE, 10); + gtk_widget_show(cmap_preview); + gtk_widget_show(toggle_vbox); + gtk_widget_show(hbox); + gtk_widget_show(frame); + + frame= add_objects_list (); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width (GTK_CONTAINER (frame), 10); + gtk_notebook_append_page (GTK_NOTEBOOK (notebook), frame, + gtk_label_new (msg[lng][MSG_FRACTALPRESETS])); + gtk_widget_show (frame); + + frame= add_gradients_list (); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width (GTK_CONTAINER (frame), 10); + gtk_notebook_append_page (GTK_NOTEBOOK (notebook), frame, + gtk_label_new (msg[lng][MSG_GRADIENTPRESETS])); + gtk_widget_show (frame); + + frame2 = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(frame2), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width (GTK_CONTAINER (frame2), 10); + gtk_notebook_append_page (GTK_NOTEBOOK (notebook), frame2, + gtk_label_new (msg[lng][MSG_GENERALOPTIONS])); + + toggle_vbox2 = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(toggle_vbox2), 10); + gtk_container_add(GTK_CONTAINER(frame2), toggle_vbox2); + gtk_widget_show(toggle_vbox2); + + toggle_vbox = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(toggle_vbox), 10); + gtk_box_pack_start(GTK_BOX(toggle_vbox2), toggle_vbox, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 0); + gtk_widget_show(toggle_vbox); + + toggle = gtk_radio_button_new_with_label(language_group, "English"); + language_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_english); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_english); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "This sets the default language to English. Note that you will have to restart the plug-in!"); + + toggle = gtk_radio_button_new_with_label(language_group, "Français"); + language_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_french); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_french); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "Cette option active les messages en français. Il vous faudra redémarrer le programme pour que les changements prennent effet."); + + toggle = gtk_radio_button_new_with_label(language_group, "Deutsch"); + language_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_german); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_german); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "Diese Option stellt die deutschen Texte ein. Damit diese jedoch angezeigt werden, ist ein Neustart des Programms noetig."); + gtk_widget_show(toggle_vbox); + + toggle_vbox = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(toggle_vbox), 10); + gtk_box_pack_start(GTK_BOX(toggle_vbox2), toggle_vbox, FALSE, FALSE, 0); + gtk_widget_show(toggle_vbox); + + button = gtk_button_new(); + gtk_box_pack_start(GTK_BOX(toggle_vbox), button, FALSE, FALSE, 0); + text = gtk_label_new(msg[lng][MSG_SAVELANGUAGE]); + gtk_misc_set_alignment(GTK_MISC(text), 0.5, 0.5); + gtk_container_add(GTK_CONTAINER(button), text); + gtk_widget_show(text); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc) dialog_savelanguage_callback, + dialog); + gtk_widget_show(button); + set_tooltip(tips, button, msg[lng][MSG_SAVELANGUAGE_COMMENT]); + + gtk_widget_show(toggle_vbox); + + + gtk_widget_show (frame2); + + /* Buttons */ + + gtk_container_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), 5); + + button = gtk_button_new_with_label(msg[lng][MSG_OK]); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc) dialog_ok_callback, + dialog); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); + gtk_widget_grab_default(button); + gtk_widget_show(button); + set_tooltip(tips, button, msg[lng][MSG_STARTCALC]); + + button = gtk_button_new_with_label(msg[lng][MSG_CANCEL]); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc) dialog_cancel_callback, + dialog); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); + gtk_widget_show(button); + set_tooltip(tips, button, msg[lng][MSG_MAINDLGCANCEL]); + + button = gtk_button_new_with_label(msg[lng][MSG_ABOUT]); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc) explorer_about_callback, button); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), + button, TRUE, TRUE, 0); + gtk_widget_show(button); + set_tooltip(tips, button, msg[lng][MSG_ABOUTCOMMENT]); + + /* Done */ + + /* Popup for list area: Not yet fully implemented + + fractalexplorer_op_menu_create(maindlg); + + */ + gtk_widget_destroy(loaddlg); + + gtk_widget_show(dialog); + ready_now = TRUE; + + set_cmap_preview(); + + dialog_update_preview(); + gtk_window_position(GTK_WINDOW(dialog), GTK_WIN_POS_NONE); + gtk_main(); + gdk_flush(); + if (the_tile != NULL) { + gimp_tile_unref(the_tile, FALSE); + the_tile = NULL; + } + g_free(wint.wimage); + + return wint.run; +} /* explorer_dialog */ + +/********************************************************************** + FUNCTION: dialog_update_preview + *********************************************************************/ + +void +dialog_update_preview() +{ + double left, + right, + bottom, + top; + double dx, + dy, + cx, + cy; + int px, + py; + int xcoord, + ycoord; + int iteration; + guchar *p_ul, + *p; + double a, + b, + x, + y, + oldx, + oldy, + foldxinitx, + foldxinity, + tempsqrx, + tempsqry, + tmpx=0, + tmpy=0, + foldyinitx, + foldyinity, + xx=0; + int zaehler, + color; + + if (NULL == wint.preview) + return; + + if ((ready_now) && (wvals.alwayspreview)) { +/* gtk_widget_set_sensitive(maindlg, FALSE); */ + left = sel_x1; + right = sel_x2 - 1; + bottom = sel_y2 - 1; + top = sel_y1; + dx = (right - left) / (preview_width - 1); + dy = (bottom - top) / (preview_height - 1); + + xmin = wvals.xmin; + xmax = wvals.xmax; + ymin = wvals.ymin; + ymax = wvals.ymax; + cx = wvals.cx; + cy = wvals.cy; + xbild = preview_width; + ybild = preview_height; + xdiff = (xmax - xmin) / xbild; + ydiff = (ymax - ymin) / ybild; + + py = 0; + + p_ul = wint.wimage; + iteration = (int) wvals.iter; + for (ycoord = 0; ycoord < preview_height; ycoord++) { + px = 0; + + for (xcoord = 0; xcoord < preview_width; xcoord++) { + a = (double) xmin + (double) xcoord *xdiff; + b = (double) ymin + (double) ycoord *ydiff; + + if (wvals.fractaltype!=0) { + tmpx=x = a; + tmpy=y = b; + } else { + x = 0; + y = 0; + } + for (zaehler = 0; (zaehler < iteration) && ((x * x + y * y) < 4); zaehler++) { + oldx=x; oldy=y; + if (wvals.fractaltype==1) { + /* Julia */ + xx = x * x - y * y + cx; + y = 2.0 * x * y + cy; + } else if (wvals.fractaltype==0) { + /*Mandelbrot*/ + xx = x * x - y * y + a; + y = 2.0 * x * y + b; + } else if (wvals.fractaltype==2) { +/* Barnsley M1 */ + foldxinitx = oldx * cx; + foldyinity = oldy * cy; + foldxinity = oldx * cy; + foldyinitx = oldy * cx; + /* orbit calculation */ + if(oldx >= 0) + { + xx = (foldxinitx - cx - foldyinity); + y = (foldyinitx - cy + foldxinity); + } + else + { + xx = (foldxinitx + cx - foldyinity); + y = (foldyinitx + cy + foldxinity); + } + } else if (wvals.fractaltype==3) { +/* Barnsley Unnamed */ + + foldxinitx = oldx * cx; + foldyinity = oldy * cy; + foldxinity = oldx * cy; + foldyinitx = oldy * cx; + /* orbit calculation */ + if(foldxinity + foldyinitx >= 0) + { + xx = foldxinitx - cx - foldyinity; + y = foldyinitx - cy + foldxinity; + } + else + { + xx = foldxinitx + cx - foldyinity; + y = foldyinitx + cy + foldxinity; + } + } else if (wvals.fractaltype==4) { + /*Barnsley 1*/ + foldxinitx = oldx * oldx; + foldyinity = oldy * oldy; + foldxinity = oldx * oldy; + /* orbit calculation */ + if(oldx > 0) + { + xx = foldxinitx - foldyinity - 1.0; + y = foldxinity * 2; + } + else + { + xx = foldxinitx - foldyinity -1.0 + cx * oldx; + y = foldxinity * 2; + y += cy * oldx; + } + } else if (wvals.fractaltype==5) { + /* Spider(XAXIS) { c=z=pixel: z=z*z+c; c=c/2+z, |z|<=4 } */ + xx = x*x - y*y + tmpx + cx; + y = 2 * oldx * oldy + tmpy +cy; + tmpx = tmpx/2 + xx; + tmpy = tmpy/2 + y; + } else if (wvals.fractaltype==6) { +/* ManOWarfpFractal() */ + xx = x*x - y*y + tmpx + cx; + y = 2.0 * x * y + tmpy + cy; + tmpx = oldx; + tmpy = oldy; + } else if (wvals.fractaltype==7) { +/* Lambda */ + tempsqrx=x*x; + tempsqry=y*y; + tempsqrx = oldx - tempsqrx + tempsqry; + tempsqry = -(oldy * oldx); + tempsqry += tempsqry + oldy; + xx = cx * tempsqrx - cy * tempsqry; + y = cx * tempsqry + cy * tempsqrx; + } else if (wvals.fractaltype==8) { +/* Sierpinski */ + xx = oldx + oldx; + y = oldy + oldy; + if(oldy > .5) + y = y - 1; + else if (oldx > .5) + xx = xx - 1; + } + x = xx; + } + color = (int) (255.0 * zaehler / iteration); + p_ul[0] = colormap[color][0]; + p_ul[1] = colormap[color][1]; + p_ul[2] = colormap[color][2]; + p_ul += 3; + px += 1; + } /* for */ + py += 1; + } /* for */ + p = wint.wimage; + + for (y = 0; y < preview_height; y++) { + gtk_preview_draw_row(GTK_PREVIEW(wint.preview), p, 0, y, preview_width); + p += preview_width * 3; + } /* for */ + gtk_widget_draw(wint.preview, NULL); + gdk_flush(); +/* gtk_widget_set_sensitive(maindlg, TRUE); */ + } +} /* dialog_update_preview */ + +/********************************************************************** + FUNCTION: dialog_create_value + *********************************************************************/ + +void +dialog_create_value(char *title, GtkTable * table, int row, gdouble * value, + int left, int right, const char *desc, scaledata * scalevalues) +{ + GtkWidget *label; + GtkWidget *scale; + GtkWidget *entry; + GtkObject *scale_data; + char buf[256]; + scaledata *pppp; + + pppp = scalevalues; + + label = gtk_label_new(title); + gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); + gtk_table_attach(table, label, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, 4, 0); + gtk_widget_show(label); + + scale_data = gtk_adjustment_new(*value, left, right, + (right - left) / 1000, + (right - left) / 1000, + 0); + pppp->data = GTK_ADJUSTMENT(scale_data); + gtk_signal_connect(GTK_OBJECT(scale_data), "value_changed", + (GtkSignalFunc) dialog_scale_update, + value); + + scale = gtk_hscale_new(GTK_ADJUSTMENT(scale_data)); + gtk_widget_set_usize(scale, SCALE_WIDTH, 0); + gtk_table_attach(table, scale, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + gtk_scale_set_draw_value(GTK_SCALE(scale), FALSE); + gtk_scale_set_digits(GTK_SCALE(scale), 3); + gtk_range_set_update_policy(GTK_RANGE(scale), GTK_UPDATE_CONTINUOUS); + gtk_widget_show(scale); + set_tooltip(tips, scale, desc); + + entry = gtk_entry_new(); + pppp->text = entry; + gtk_object_set_user_data(GTK_OBJECT(entry), scale_data); + gtk_object_set_user_data(scale_data, entry); + gtk_widget_set_usize(entry, ENTRY_WIDTH, 0); + sprintf(buf, "%0.15f", *value); + gtk_entry_set_text(GTK_ENTRY(entry), buf); + gtk_entry_set_position (GTK_ENTRY (entry), 0); + gtk_entry_adjust_scroll (GTK_ENTRY (entry)); + gtk_signal_connect(GTK_OBJECT(entry), "changed", + (GtkSignalFunc) dialog_entry_update, + value); + gtk_table_attach(GTK_TABLE(table), entry, 2, 3, row, row + 1, 0, 0, 4, 0); + gtk_widget_show(entry); + set_tooltip(tips, entry, desc); + +} /* dialog_create_value */ + +/********************************************************************** + FUNCTION: dialog_create_int_value + *********************************************************************/ + +void +dialog_create_int_value(char *title, GtkTable * table, int row, gdouble * value, + int left, int right, const char *desc, scaledata * scalevalues) +{ + GtkWidget *label; + GtkWidget *scale; + GtkWidget *entry; + GtkObject *scale_data; + char buf[256]; + scaledata *pppp; + + pppp = scalevalues; + + label = gtk_label_new(title); + gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); + gtk_table_attach(table, label, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, 4, 0); + gtk_widget_show(label); + + scale_data = gtk_adjustment_new(*value, left, right, + (right - left) / 200, + (right - left) / 200, + 0); + pppp->data = GTK_ADJUSTMENT(scale_data); + gtk_signal_connect(GTK_OBJECT(scale_data), "value_changed", + (GtkSignalFunc) dialog_scale_int_update, + value); + + scale = gtk_hscale_new(GTK_ADJUSTMENT(scale_data)); + gtk_widget_set_usize(scale, SCALE_WIDTH, 0); + gtk_table_attach(table, scale, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + gtk_scale_set_draw_value(GTK_SCALE(scale), FALSE); + gtk_scale_set_digits(GTK_SCALE(scale), 3); + gtk_range_set_update_policy(GTK_RANGE(scale), GTK_UPDATE_CONTINUOUS); + gtk_widget_show(scale); + set_tooltip(tips, scale, desc); + + entry = gtk_entry_new(); + pppp->text = entry; + gtk_object_set_user_data(GTK_OBJECT(entry), scale_data); + gtk_object_set_user_data(scale_data, entry); + gtk_widget_set_usize(entry, ENTRY_WIDTH - 20, 0); + sprintf(buf, "%i", (int) *value); + gtk_entry_set_text(GTK_ENTRY(entry), buf); + gtk_signal_connect(GTK_OBJECT(entry), "changed", + (GtkSignalFunc) dialog_entry_update, + value); + gtk_table_attach(GTK_TABLE(table), entry, 2, 3, row, row + 1, 0, 0, 4, 0); + gtk_widget_show(entry); + set_tooltip(tips, entry, desc); + +} /* dialog_create_int_value */ + +/********************************************************************** + FUNCTION: set_cmap_preview() + *********************************************************************/ + +void +set_cmap_preview() +{ + int i, + x, + y, + j; + guchar b[96]; + guchar c[GR_WIDTH*3]; + + if (NULL == cmap_preview) + return; + + if (NULL == cmap_preview_long) + return; + + if (NULL == cmap_preview_long2) + return; + + make_color_map(); + + for (y = 0; y < 32; y += 4) { + for (x = 0; x < 32; x++) { + i = x + (y / 4) * 32; + for (j = 0; j < 3; j++) + b[x * 3 + j] = colormap[i][j]; + } + gtk_preview_draw_row(GTK_PREVIEW(cmap_preview), b, 0, y, 32); + gtk_preview_draw_row(GTK_PREVIEW(cmap_preview), b, 0, y + 1, 32); + gtk_preview_draw_row(GTK_PREVIEW(cmap_preview), b, 0, y + 2, 32); + gtk_preview_draw_row(GTK_PREVIEW(cmap_preview), b, 0, y + 3, 32); + } + + for (x = 0; x < GR_WIDTH; x++) { + for (j = 0; j < 3; j++) + c[x * 3 + j] = colormap[(int)((float)x/(float)GR_WIDTH*256.0)][j]; + } + for (i=0; i<32; i++) + { + gtk_preview_draw_row(GTK_PREVIEW(cmap_preview_long), c, 0, i, GR_WIDTH); + } + for (i=0; i<32; i++) + { + gtk_preview_draw_row(GTK_PREVIEW(cmap_preview_long2), c, 0, i, GR_WIDTH); + } + gtk_widget_draw(cmap_preview, NULL); + gtk_widget_draw(cmap_preview_long, NULL); + gtk_widget_draw(cmap_preview_long2, NULL); +} + +/********************************************************************** + FUNCTION: make_color_map() + *********************************************************************/ + +void +make_color_map() +{ + int i, + j; + int r, + gr, + bl; + double *g = NULL; + double redstretch, + greenstretch, + bluestretch, + pi = atan(1) * 4; + + if (wvals.colormode) { + g = gimp_gradients_sample_uniform(256); + } + redstretch = wvals.redstretch; + greenstretch = wvals.greenstretch; + bluestretch = wvals.bluestretch; + for (i = 0; i < 256; i++) + if (wvals.colormode) { + for (j = 0; j < 3; j++) + colormap[i][j] = (int) (g[i * 4 + j] * 255.0); + } else { + r = gr = bl = i; + + switch (wvals.redmode) { + case SINUS: + r = (int) redstretch *(1.0 + sin((r / 128.0 - 1) * pi)); + break; + case COSINUS: + r = (int) redstretch *(1.0 + cos((r / 128.0 - 1) * pi)); + break; + case NONE: + r = (int)(redstretch *(r / 128.0)); + break; + default: + break; + } + + switch (wvals.greenmode) { + case SINUS: + gr = (int) greenstretch *(1.0 + sin((gr / 128.0 - 1) * pi)); + break; + case COSINUS: + gr = (int) greenstretch *(1.0 + cos((gr / 128.0 - 1) * pi)); + break; + case NONE: + gr = (int)(greenstretch *(gr / 128.0)); + break; + default: + break; + } + switch (wvals.bluemode) { + case SINUS: + bl = (int) bluestretch *(1.0 + sin((bl / 128.0 - 1) * pi)); + break; + case COSINUS: + bl = (int) bluestretch *(1.0 + cos((bl / 128.0 - 1) * pi)); + break; + case NONE: + bl = (int)(bluestretch *(bl / 128.0)); + break; + default: + break; + } + if (r == 256) { + r = 255; + } + if (gr == 256) { + gr = 255; + } + if (bl == 256) { + bl = 255; + } + if (wvals.redinvert) { + r = 255-r; + } + if (wvals.greeninvert) { + gr = 255-gr; + } + if (wvals.blueinvert) { + bl = 255-bl; + } + colormap[i][0] = r; + colormap[i][1] = gr; + colormap[i][2] = bl; + } + free(g); +} + +/********************************************************************** + FUNCTION: explorer_logo_dialog + *********************************************************************/ + +GtkWidget * +explorer_logo_dialog() +{ + GtkWidget *xdlg; + GtkWidget *xbutton; + GtkWidget *xlabel=NULL; + GtkWidget *xlogo_box; + GtkWidget *xpreview; + GtkWidget *xframe, + *xframe2, + *xframe3; + GtkWidget *xvbox; + GtkWidget *xhbox; + GtkWidget *vpaned; + #if 0 + GtkWidget *table; + GtkWidget *text; + GtkWidget *hscrollbar; + GtkWidget *vscrollbar; + #endif + guchar *temp, + *temp2; + unsigned char *datapointer; + gint y, + x; + + xdlg = logodlg = gtk_dialog_new(); + gtk_window_set_title(GTK_WINDOW(xdlg), msg[lng][MSG_ABOUT]); + gtk_window_position(GTK_WINDOW(xdlg), GTK_WIN_POS_NONE); + gtk_signal_connect(GTK_OBJECT(xdlg), "destroy", + (GtkSignalFunc) dialog_close_callback, + NULL); + + xbutton = gtk_button_new_with_label(msg[lng][MSG_OK]); + GTK_WIDGET_SET_FLAGS(xbutton, GTK_CAN_DEFAULT); + gtk_signal_connect(GTK_OBJECT(xbutton), "clicked", + (GtkSignalFunc) explorer_logo_ok_callback, + xdlg); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(xdlg)->action_area), + xbutton, TRUE, TRUE, 0); + gtk_widget_grab_default(xbutton); + gtk_widget_show(xbutton); + set_tooltip(tips, xbutton, msg[lng][MSG_ABOUTBOXOKCOMMENT]); + + xframe = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(xframe), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width(GTK_CONTAINER(xframe), 10); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(xdlg)->vbox), xframe, TRUE, TRUE, 0); + xvbox = gtk_vbox_new(FALSE, 5); + gtk_container_border_width(GTK_CONTAINER(xvbox), 10); + gtk_container_add(GTK_CONTAINER(xframe), xvbox); + + /* The logo frame & drawing area */ + xhbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(xvbox), xhbox, FALSE, TRUE, 0); + + xlogo_box = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(xhbox), xlogo_box, FALSE, FALSE, 0); + + xframe2 = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(xframe2), GTK_SHADOW_IN); + gtk_box_pack_start(GTK_BOX(xlogo_box), xframe2, FALSE, FALSE, 0); + + xpreview = gtk_preview_new(GTK_PREVIEW_COLOR); + gtk_preview_size(GTK_PREVIEW(xpreview), logo_width, logo_height); + temp = g_malloc((logo_width + 10) * 3); + datapointer = header_data+logo_width*logo_height-1; + for (y = 0; y < logo_height; y++) { + temp2 = temp; + for (x = 0; x < logo_width; x++) { + HEADER_PIXEL(datapointer, temp2); + temp2 += 3; + } + gtk_preview_draw_row(GTK_PREVIEW(xpreview), + temp, + 0, y, logo_width); + } + g_free(temp); + gtk_container_add(GTK_CONTAINER(xframe2), xpreview); + gtk_widget_show(xpreview); + gtk_widget_show(xframe2); + gtk_widget_show(xlogo_box); + gtk_widget_show(xhbox); + + xhbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(xvbox), xhbox, TRUE, TRUE, 0); + + vpaned = gtk_vpaned_new (); + gtk_box_pack_start(GTK_BOX(xhbox), vpaned, TRUE, TRUE, 0); + gtk_container_border_width (GTK_CONTAINER(vpaned), 0); + gtk_widget_show (vpaned); + + xframe3 = gtk_frame_new (NULL); +/* gtk_frame_set_shadow_type (GTK_FRAME(xframe3), GTK_SHADOW_IN); */ +/* gtk_widget_set_usize (xframe3, 20, 20); */ + gtk_paned_add1 (GTK_PANED (vpaned), xframe3); + gtk_widget_show (xframe3); +#if 0 + table = gtk_table_new (2, 2, FALSE); + gtk_table_set_row_spacing (GTK_TABLE (table), 0, 0); + gtk_table_set_col_spacing (GTK_TABLE (table), 0, 0); + gtk_container_add(GTK_CONTAINER(xframe3), table); + gtk_widget_show (table); + + text = gtk_text_new (NULL, NULL); + gtk_table_attach (GTK_TABLE (table), text, 0, 1, 0, 1, + GTK_EXPAND | GTK_FILL | GTK_SHRINK, GTK_FILL | GTK_SHRINK | GTK_EXPAND, 0, 0); + gtk_widget_show (text); + + hscrollbar = gtk_hscrollbar_new (GTK_TEXT (text)->hadj); + gtk_table_attach (GTK_TABLE (table), hscrollbar, 0, 1, 1, 2, + GTK_EXPAND | GTK_FILL | GTK_SHRINK, GTK_EXPAND| GTK_FILL | GTK_SHRINK, 0, 0); + gtk_widget_show (hscrollbar); + + vscrollbar = gtk_vscrollbar_new (GTK_TEXT (text)->vadj); + gtk_table_attach (GTK_TABLE (table), vscrollbar, 1, 2, 0, 1, + GTK_EXPAND| GTK_FILL | GTK_SHRINK, GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, 0); + gtk_widget_show (vscrollbar); + + gtk_text_freeze (GTK_TEXT (text)); + + gtk_widget_realize (text); + + gtk_text_insert (GTK_TEXT (text), NULL, &text->style->black, NULL, + "\nCotting Software Productions\n" + "Bahnhofstrasse 31\n" + "CH-3066 Stettlen (Switzerland)\n\n" + "cotting@mygale.org\n" + "http://www.mygale.org/~cotting\n\n" + "Fractal Chaos Explorer\nPlug-In for the GIMP\n" + "Version 2.00 Beta (Multilingual)\n" + , -1); + + gtk_text_thaw (GTK_TEXT (text)); +#endif + + xlabel = gtk_label_new("\nCotting Software Productions\n" + "Bahnhofstrasse 31\n" + "CH-3066 Stettlen (Switzerland)\n\n" + "cotting@mygale.org\n" + "http://www.mygale.org/~cotting\n\n" + "Fractal Chaos Explorer\nPlug-In for the GIMP\n" + "Version 2.00 Beta (Multilingual)\n"); + gtk_container_add(GTK_CONTAINER(xframe3), xlabel); + gtk_widget_show(xlabel); + + xframe3 = gtk_frame_new (NULL); +/* gtk_frame_set_shadow_type (GTK_FRAME(xframe3), GTK_SHADOW_IN); */ +/* gtk_widget_set_usize (xframe3, 20, 20); */ + gtk_paned_add2 (GTK_PANED (vpaned), xframe3); + gtk_widget_show (xframe3); + +#if 0 + table = gtk_table_new (2, 2, FALSE); + gtk_table_set_row_spacing (GTK_TABLE (table), 0, 0); + gtk_table_set_col_spacing (GTK_TABLE (table), 0, 0); + gtk_container_add(GTK_CONTAINER(xframe3), table); + gtk_widget_show (table); + + text = gtk_text_new (NULL, NULL); + gtk_table_attach (GTK_TABLE (table), text, 0, 1, 0, 1, + GTK_EXPAND | GTK_FILL | GTK_SHRINK, GTK_FILL | GTK_SHRINK | GTK_EXPAND, 0, 0); + gtk_widget_show (text); + + hscrollbar = gtk_hscrollbar_new (GTK_TEXT (text)->hadj); + gtk_table_attach (GTK_TABLE (table), hscrollbar, 0, 1, 1, 2, + GTK_EXPAND | GTK_FILL | GTK_SHRINK, GTK_FILL | GTK_SHRINK | GTK_EXPAND, 0, 0); + gtk_widget_show (hscrollbar); + + vscrollbar = gtk_vscrollbar_new (GTK_TEXT (text)->vadj); + gtk_table_attach (GTK_TABLE (table), vscrollbar, 1, 2, 0, 1, + GTK_EXPAND | GTK_FILL | GTK_SHRINK, GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, 0); + gtk_widget_show (vscrollbar); + + gtk_text_freeze (GTK_TEXT (text)); + + gtk_widget_realize (text); + + gtk_text_insert (GTK_TEXT (text), NULL, &text->style->black, NULL, + "\nContains code from:\n\n" + "Daniel Cotting\n\n" + "Peter Kirchgessner\n\n" + "Scott Draves\n\n" + "Andy Thomas\n\n" + "and the GIMP distribution.\n" + , -1); + + gtk_text_thaw (GTK_TEXT (text)); +#endif + + xlabel = gtk_label_new("\nContains code from:\n\n" + "Daniel Cotting\n\n" + "Peter Kirchgessner\n\n" + "Scott Draves\n\n" + "Andy Thomas\n\n" + "and the GIMP distribution.\n"); + gtk_container_add(GTK_CONTAINER(xframe3), xlabel); + gtk_widget_show(xlabel); + + gtk_widget_show(xhbox); + + gtk_widget_show(xvbox); + gtk_widget_show(xframe); + gtk_widget_show(xdlg); + + gtk_main(); + gdk_flush(); + return xdlg; +} + +/********************************************************************** + FUNCTION: explorer_load_dialog + *********************************************************************/ + +GtkWidget * +explorer_load_dialog() +{ + GtkWidget *xdlg; + + GtkWidget *xlabel; + GtkWidget *xlogo_box; + GtkWidget *xpreview; + GtkWidget *xframe, + *xframe2; + GtkWidget *xvbox; + GtkWidget *xhbox; + guchar *temp, + *temp2; + unsigned char *datapointer; + gint y, + x; + + xdlg = loaddlg = gtk_dialog_new(); + gtk_window_set_title(GTK_WINDOW(xdlg), "Loading..."); + gtk_window_position(GTK_WINDOW(xdlg), GTK_WIN_POS_NONE); + gtk_signal_connect(GTK_OBJECT(xdlg), "destroy", + (GtkSignalFunc) dialog_close_callback, + NULL); + + xframe = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(xframe), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width(GTK_CONTAINER(xframe), 10); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(xdlg)->vbox), xframe, TRUE, TRUE, 0); + xvbox = gtk_vbox_new(FALSE, 5); + gtk_container_border_width(GTK_CONTAINER(xvbox), 10); + gtk_container_add(GTK_CONTAINER(xframe), xvbox); + + /* The logo frame & drawing area */ + xhbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(xvbox), xhbox, FALSE, TRUE, 0); + + xlogo_box = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(xhbox), xlogo_box, FALSE, FALSE, 0); + + xframe2 = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(xframe2), GTK_SHADOW_IN); + gtk_box_pack_start(GTK_BOX(xlogo_box), xframe2, FALSE, FALSE, 0); + + xpreview = gtk_preview_new(GTK_PREVIEW_COLOR); + gtk_preview_size(GTK_PREVIEW(xpreview), logo_width, logo_height); + temp = g_malloc((logo_width + 10) * 3); + datapointer = header_data+logo_width*logo_height-1; + for (y = 0; y < logo_height; y++) { + temp2 = temp; + for (x = 0; x < logo_width; x++) { + HEADER_PIXEL(datapointer, temp2); + temp2 += 3; + } + gtk_preview_draw_row(GTK_PREVIEW(xpreview), + temp, + 0, y, logo_width); + } + g_free(temp); + gtk_container_add(GTK_CONTAINER(xframe2), xpreview); + gtk_widget_show(xpreview); + gtk_widget_show(xframe2); + gtk_widget_show(xlogo_box); + gtk_widget_show(xhbox); + + xhbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(xvbox), xhbox, TRUE, TRUE, 0); + xlabel = gtk_label_new("... Loading FractalExplorer ...\n" + "... Lade FractalExplorer ...\n" + "... Chargement de FractalExplorer ..."); + gtk_box_pack_start(GTK_BOX(xhbox), xlabel, TRUE, FALSE, 0); + gtk_widget_show(xlabel); + + gtk_widget_show(xhbox); + + gtk_widget_show(xvbox); + gtk_widget_show(xframe); + gtk_widget_show(xdlg); + gtk_widget_realize(xdlg); + gdk_flush(); + return xdlg; +} + +/********************************************************************** + FUNCTION: set_tooltip + *********************************************************************/ + +void +set_tooltip(GtkTooltips * tooltips, GtkWidget * widget, const char *desc) +{ + if (desc && desc[0]) + gtk_tooltips_set_tips(tooltips, widget, (char *) desc); +} + +/********************************************************************** + FUNCTION: dialog_change_scale + *********************************************************************/ + +void +dialog_change_scale() +{ + char text[256]; + ready_now = FALSE; + + do_redsinus = (wvals.redmode == SINUS); + do_redcosinus = (wvals.redmode == COSINUS); + do_rednone = (wvals.redmode == NONE); + do_greensinus = (wvals.greenmode == SINUS); + do_greencosinus = (wvals.greenmode == COSINUS); + do_greennone = (wvals.greenmode == NONE); + do_bluesinus = (wvals.bluemode == SINUS); + do_bluecosinus = (wvals.bluemode == COSINUS); + do_bluenone = (wvals.bluemode == NONE); + do_redinvert = (wvals.redinvert != FALSE); + do_greeninvert = (wvals.greeninvert != FALSE); + do_blueinvert = (wvals.blueinvert != FALSE); + do_colormode1 = (wvals.colormode == 0); + do_colormode2 = (wvals.colormode == 1); + do_type0 = (wvals.fractaltype == 0); + do_type1 = (wvals.fractaltype == 1); + do_type2 = (wvals.fractaltype == 2); + do_type3 = (wvals.fractaltype == 3); + do_type4 = (wvals.fractaltype == 4); + do_type5 = (wvals.fractaltype == 5); + do_type6 = (wvals.fractaltype == 6); + do_type7 = (wvals.fractaltype == 7); + do_type8 = (wvals.fractaltype == 8); + + do_english = (wvals.language == 0); + do_german = (wvals.language == 2); + do_french = (wvals.language == 1); + + elements->xmin.data->value = wvals.xmin; + gtk_signal_emit_by_name(GTK_OBJECT(elements->xmin.data), "value_changed"); + elements->xmax.data->value = wvals.xmax; + gtk_signal_emit_by_name(GTK_OBJECT(elements->xmax.data), "value_changed"); + elements->ymin.data->value = wvals.ymin; + gtk_signal_emit_by_name(GTK_OBJECT(elements->ymin.data), "value_changed"); + elements->ymax.data->value = wvals.ymax; + gtk_signal_emit_by_name(GTK_OBJECT(elements->ymax.data), "value_changed"); + elements->iter.data->value = wvals.iter; + gtk_signal_emit_by_name(GTK_OBJECT(elements->iter.data), "value_changed"); + elements->cx.data->value = wvals.cx; + gtk_signal_emit_by_name(GTK_OBJECT(elements->cx.data), "value_changed"); + elements->cy.data->value = wvals.cy; + gtk_signal_emit_by_name(GTK_OBJECT(elements->cy.data), "value_changed"); + + sprintf(text, "%0.15f", wvals.xmin); + gtk_entry_set_text(GTK_ENTRY(elements->xmin.text), text); + gtk_entry_set_position (GTK_ENTRY (elements->xmin.text), 0); + gtk_entry_adjust_scroll (GTK_ENTRY (elements->xmin.text)); + sprintf(text, "%0.15f", wvals.xmax); + gtk_entry_set_text(GTK_ENTRY(elements->xmax.text), text); + gtk_entry_set_position (GTK_ENTRY (elements->xmax.text), 0); + gtk_entry_adjust_scroll (GTK_ENTRY (elements->xmax.text)); + sprintf(text, "%0.15f", wvals.ymin); + gtk_entry_set_text(GTK_ENTRY(elements->ymin.text), text); + gtk_entry_set_position (GTK_ENTRY (elements->ymin.text), 0); + gtk_entry_adjust_scroll (GTK_ENTRY (elements->ymin.text)); + sprintf(text, "%0.15f", wvals.ymax); + gtk_entry_set_text(GTK_ENTRY(elements->ymax.text), text); + gtk_entry_set_position (GTK_ENTRY (elements->ymax.text), 0); + gtk_entry_adjust_scroll (GTK_ENTRY (elements->ymax.text)); + sprintf(text, "%0.15f", wvals.iter); + gtk_entry_set_text(GTK_ENTRY(elements->iter.text), text); + gtk_entry_set_position (GTK_ENTRY (elements->iter.text), 0); + gtk_entry_adjust_scroll (GTK_ENTRY (elements->iter.text)); + sprintf(text, "%0.15f", wvals.cx); + gtk_entry_set_text(GTK_ENTRY(elements->cx.text), text); + gtk_entry_set_position (GTK_ENTRY (elements->cx.text), 0); + gtk_entry_adjust_scroll (GTK_ENTRY (elements->cx.text)); + sprintf(text, "%0.15f", wvals.cy); + gtk_entry_set_text(GTK_ENTRY(elements->cy.text), text); + gtk_entry_set_position (GTK_ENTRY (elements->cy.text), 0); + gtk_entry_adjust_scroll (GTK_ENTRY (elements->cy.text)); + + elements->red.data->value = wvals.redstretch; + gtk_signal_emit_by_name(GTK_OBJECT(elements->red.data), "value_changed"); + sprintf(text, "%0.0f", wvals.redstretch); + gtk_entry_set_text(GTK_ENTRY(elements->red.text), text); + elements->green.data->value = wvals.greenstretch; + gtk_signal_emit_by_name(GTK_OBJECT(elements->green.data), "value_changed"); + sprintf(text, "%0.0f", wvals.greenstretch); + gtk_entry_set_text(GTK_ENTRY(elements->green.text), text); + elements->blue.data->value = wvals.bluestretch; + gtk_signal_emit_by_name(GTK_OBJECT(elements->blue.data), "value_changed"); + sprintf(text, "%0.0f", wvals.bluestretch); + gtk_entry_set_text(GTK_ENTRY(elements->blue.text), text); + + + if (wvals.fractaltype==0) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->type_mandelbrot), wvals.fractaltype == 0); + if (wvals.fractaltype==1) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->type_julia), wvals.fractaltype == 1); + if (wvals.fractaltype==2) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->type_barnsley1), wvals.fractaltype == 2); + if (wvals.fractaltype==3) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->type_barnsley2), wvals.fractaltype == 3); + if (wvals.fractaltype==4) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->type_barnsley3), wvals.fractaltype == 4); + if (wvals.fractaltype==5) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->type_spider), wvals.fractaltype == 5); + if (wvals.fractaltype==6) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->type_manowar), wvals.fractaltype == 6); + if (wvals.fractaltype==7) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->type_lambda), wvals.fractaltype == 7); + if (wvals.fractaltype==8) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->type_sierpinski), wvals.fractaltype == 8); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->redmodesin), wvals.redmode == SINUS); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->redmodecos), wvals.redmode == COSINUS); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->redmodenone), wvals.redmode == NONE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->greenmodesin), wvals.greenmode == SINUS); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->greenmodecos), wvals.greenmode == COSINUS); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->greenmodenone), wvals.greenmode == NONE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->bluemodesin), wvals.bluemode == SINUS); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->bluemodecos), wvals.bluemode == COSINUS); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->bluemodenone), wvals.bluemode == NONE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->redinvert), wvals.redinvert != FALSE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->greeninvert), wvals.greeninvert != FALSE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->blueinvert), wvals.blueinvert != FALSE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->colormode0), wvals.colormode == 0); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->colormode1), wvals.colormode == 1); + ready_now = TRUE; +} + +/********************************************************************** + FUNCTION: ok_warn_window + *********************************************************************/ + +/* From testgtk */ +static void +ok_warn_window(GtkWidget * widget, + gpointer data) +{ + gtk_widget_destroy(GTK_WIDGET(data)); +} + +/********************************************************************** + FUNCTION: create_warn_dialog + *********************************************************************/ + +void +create_warn_dialog(gchar * msg) +{ + GtkWidget *window = NULL; + GtkWidget *label; + GtkWidget *button; + + window = gtk_dialog_new(); + + gtk_window_set_title(GTK_WINDOW(window), "Warning"); + gtk_container_border_width(GTK_CONTAINER(window), 0); + + button = gtk_button_new_with_label("OK"); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc) ok_warn_window, + window); + + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->action_area), button, TRUE, TRUE, 0); + gtk_widget_grab_default(button); + gtk_widget_show(button); + label = gtk_label_new(msg); + gtk_misc_set_padding(GTK_MISC(label), 10, 10); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox), label, TRUE, TRUE, 0); + gtk_widget_show(label); + gtk_widget_show(window); + gtk_main(); + gdk_flush(); + +} + +/********************************************************************** + FUNCTION: save_options + *********************************************************************/ + +void +save_options(FILE * fp) +{ + /* Save options */ + + fprintf(fp, "fractaltype: %i\n", wvals.fractaltype); + fprintf(fp, "xmin: %0.15f\n", wvals.xmin); + fprintf(fp, "xmax: %0.15f\n", wvals.xmax); + fprintf(fp, "ymin: %0.15f\n", wvals.ymin); + fprintf(fp, "ymax: %0.15f\n", wvals.ymax); + fprintf(fp, "iter: %0.15f\n", wvals.iter); + fprintf(fp, "cx: %0.15f\n", wvals.cx); + fprintf(fp, "cy: %0.15f\n", wvals.cy); + fprintf(fp, "redstretch: %0.15f\n", wvals.redstretch); + fprintf(fp, "greenstretch: %0.15f\n", wvals.greenstretch); + fprintf(fp, "bluestretch: %0.15f\n", wvals.bluestretch); + fprintf(fp, "redmode: %i\n", wvals.redmode); + fprintf(fp, "greenmode: %i\n", wvals.greenmode); + fprintf(fp, "bluemode: %i\n", wvals.bluemode); + fprintf(fp, "redinvert: %i\n", wvals.redinvert); + fprintf(fp, "greeninvert: %i\n", wvals.greeninvert); + fprintf(fp, "blueinvert: %i\n", wvals.blueinvert); + fprintf(fp, "colormode: %i\n", wvals.colormode); + fputs("#**********************************************************************\n", fp); + fprintf(fp, "\n"); + fputs("#**********************************************************************\n", fp); +} + +/********************************************************************** + FUNCTION: save_callback + *********************************************************************/ + +void +save_callback() +{ + FILE *fp; + gchar *savename; + + savename = filename; + + fp = fopen(savename, "w+"); + + if (!fp) { + gchar errbuf[256]; + + sprintf(errbuf, msg[lng][MSG_SAVEERROR], savename); + create_warn_dialog(errbuf); + g_warning(errbuf); + return; + } + /* Write header out */ + fputs(FRACTAL_HEADER, fp); + fputs("#**********************************************************************\n", fp); + fputs("# This is a data file for the Fractal Explorer plug-in for the GIMP *\n", fp); + fputs("# Get the plug-in at http://www.mygale.org/~cotting *\n", fp); + fputs("#**********************************************************************\n", fp); + + save_options(fp); + + if (ferror(fp)) + create_warn_dialog(msg[lng][MSG_WRITEFAILURE]); + fclose(fp); +} + +/********************************************************************** + FUNCTION: file_selection_ok + *********************************************************************/ + +void +file_selection_ok(GtkWidget * w, + GtkFileSelection * fs, + gpointer data) +{ + gchar *filenamebuf; + struct stat filestat; + gint err; + filenamebuf = gtk_file_selection_get_filename(GTK_FILE_SELECTION(fs)); + + /* Get the name */ + if (strlen(filenamebuf) == 0) { + create_warn_dialog(msg[lng][MSG_NOFILENAME]); + return; + } + /* Check if directory exists */ + err = stat(filenamebuf, &filestat); + + if (!err && S_ISDIR(filestat.st_mode)) { + /* Can't save to directory */ + create_warn_dialog(msg[lng][MSG_NOSAVETODIR]); + return; + } + filename = g_strdup(filenamebuf); + save_callback(); + gtk_widget_destroy(GTK_WIDGET(fs)); +} + +/********************************************************************** + FUNCTION: destroy_window + *********************************************************************/ + +void +destroy_window(GtkWidget * widget, + GtkWidget ** window) +{ + *window = NULL; +} + +/********************************************************************** + FUNCTION: load_file_selection_ok +**********************************************************************/ + +void +load_file_selection_ok(GtkWidget * w, + GtkFileSelection * fs, + gpointer data) +{ + struct stat filestat; + gint err; + + filename = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(fs))); + + err = stat(filename, &filestat); + + if (!err && S_ISREG(filestat.st_mode)) { + explorer_load(); + } + gtk_widget_destroy(GTK_WIDGET(fs)); + gtk_widget_show(maindlg); + dialog_change_scale(); + set_cmap_preview(); + dialog_update_preview(); +} + + +/********************************************************************** + FUNCTION: create_load_file_selection + *********************************************************************/ + + +void +create_load_file_selection() +{ + GtkWidget *window = NULL; + + /* Load a single object */ + window = gtk_file_selection_new(msg[lng][MSG_LOADWINTITLE]); + gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_NONE); + + gtk_signal_connect(GTK_OBJECT(window), "destroy", + (GtkSignalFunc) destroy_window, + &window); + + gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(window)->ok_button), + "clicked", (GtkSignalFunc) load_file_selection_ok, + (gpointer) window); + set_tooltip(tips, GTK_FILE_SELECTION(window)->ok_button, msg[lng][MSG_LOADBUTTONCOMMENT]); + + gtk_signal_connect_object(GTK_OBJECT(GTK_FILE_SELECTION(window)->cancel_button), + "clicked", (GtkSignalFunc) gtk_widget_destroy, + GTK_OBJECT(window)); + set_tooltip(tips, GTK_FILE_SELECTION(window)->cancel_button, msg[lng][MSG_CANCELLOAD]); + if (!GTK_WIDGET_VISIBLE(window)) + gtk_widget_show(window); +} + + +/********************************************************************** + FUNCTION: create_file_selection + *********************************************************************/ + +void +create_file_selection() +{ + GtkWidget *window = NULL; + + if (!window) { + window = gtk_file_selection_new(msg[lng][MSG_SAVEWINTITLE]); + gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_NONE); + + gtk_signal_connect(GTK_OBJECT(window), "destroy", + (GtkSignalFunc) destroy_window, + &window); + + gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(window)->ok_button), + "clicked", (GtkSignalFunc) file_selection_ok, + (gpointer) window); + set_tooltip(tips, GTK_FILE_SELECTION(window)->ok_button, msg[lng][MSG_SAVEBUTTONCOMMENT]); + + gtk_signal_connect_object(GTK_OBJECT(GTK_FILE_SELECTION(window)->cancel_button), + "clicked", (GtkSignalFunc) gtk_widget_destroy, + GTK_OBJECT(window)); + set_tooltip(tips, GTK_FILE_SELECTION(window)->cancel_button, msg[lng][MSG_CANCELSAVE]); + } + if(tpath) + { + gtk_file_selection_set_filename(GTK_FILE_SELECTION (window),tpath); + } + else + /* Last path is where usually saved to */ + if(fractalexplorer_path_list) + { + gtk_file_selection_set_filename(GTK_FILE_SELECTION (window), + g_list_nth(fractalexplorer_path_list, + g_list_length(fractalexplorer_path_list)-1)->data); + } + else + gtk_file_selection_set_filename(GTK_FILE_SELECTION (window),"/tmp"); + + if (!GTK_WIDGET_VISIBLE(window)) + gtk_widget_show(window); + +} + +/********************************************************************** + FUNCTION: get_line + *********************************************************************/ + +char * +get_line(gchar * buf, gint s, FILE * from, gint init) +{ + gint slen; + char *ret; + + if (init) + line_no = 1; + else + line_no++; + + do { + ret = fgets(buf, s, from); + } + while (!ferror(from) && buf[0] == '#'); + + slen = strlen(buf); + + /* The last newline is a pain */ + if (slen > 0) + buf[slen - 1] = '\0'; + + if (ferror(from)) { + g_warning("Error reading file"); + return (0); + } + return (ret); +} + +/********************************************************************** + FUNCTION: load_options + *********************************************************************/ + +gint +load_options(fractalexplorerOBJ * xxx, FILE * fp) +{ + gchar load_buf[MAX_LOAD_LINE]; + gchar str_buf[MAX_LOAD_LINE]; + gchar opt_buf[MAX_LOAD_LINE]; + + xxx->opts.fractaltype=0; + xxx->opts.xmin=-2.0; + xxx->opts.xmax=2.0; + xxx->opts.ymin=-1.5; + xxx->opts.ymax=1.5; + xxx->opts.iter=50.0; + xxx->opts.cx=-0.75; + xxx->opts.cy=-0.2; + xxx->opts.colormode=0; + xxx->opts.redstretch=128.0; + xxx->opts.greenstretch=128.0; + xxx->opts.bluestretch=128.0; + xxx->opts.redmode=1; + xxx->opts.greenmode=1; + xxx->opts.bluemode=1; + xxx->opts.redinvert=0; + xxx->opts.greeninvert=0; + xxx->opts.blueinvert=0; + xxx->opts.alwayspreview=1; + + get_line(load_buf, MAX_LOAD_LINE, fp, 0); + + while (strcmp(load_buf, "")) { + /* Get option name */ + + sscanf(load_buf, "%s %s", str_buf, opt_buf); + + if (!strcmp(str_buf, "fractaltype:")) { + /* Value is decimal */ + int sp = 0; + + sp = atoi(opt_buf); + if (sp < 0) + return (-1); + xxx->opts.fractaltype = sp; + } else if (!strcmp(str_buf, "xmin:")) { + /* Value is double */ + double sp = 0; + + sp = atof(opt_buf); + xxx->opts.xmin = sp; + } else if (!strcmp(str_buf, "xmax:")) { + /* Value is double */ + double sp = 0; + + sp = atof(opt_buf); + xxx->opts.xmax = sp; + } else if (!strcmp(str_buf, "ymin:")) { + /* Value is double */ + double sp = 0; + + sp = atof(opt_buf); + xxx->opts.ymin = sp; + } else if (!strcmp(str_buf, "ymax:")) { + /* Value is double */ + double sp = 0; + + sp = atof(opt_buf); + xxx->opts.ymax = sp; + } else if (!strcmp(str_buf, "redstretch:")) { + /* Value is double */ + double sp = 0; + + sp = atof(opt_buf); + xxx->opts.redstretch = sp; + } else if (!strcmp(str_buf, "greenstretch:")) { + /* Value is double */ + double sp = 0; + + sp = atof(opt_buf); + xxx->opts.greenstretch = sp; + } else if (!strcmp(str_buf, "bluestretch:")) { + /* Value is double */ + double sp = 0; + + sp = atof(opt_buf); + xxx->opts.bluestretch = sp; + } else if (!strcmp(str_buf, "iter:")) { + /* Value is double */ + double sp = 0; + + sp = atof(opt_buf); + xxx->opts.iter = sp; + } else if (!strcmp(str_buf, "cx:")) { + /* Value is double */ + double sp = 0; + + sp = atof(opt_buf); + xxx->opts.cx = sp; + } else if (!strcmp(str_buf, "cy:")) { + /* Value is double */ + double sp = 0; + + sp = atof(opt_buf); + xxx->opts.cy = sp; + } else if (!strcmp(str_buf, "redmode:")) { + int sp = 0; + + sp = atoi(opt_buf); + xxx->opts.redmode = sp; + } else if (!strcmp(str_buf, "greenmode:")) { + int sp = 0; + + sp = atoi(opt_buf); + xxx->opts.greenmode = sp; + } else if (!strcmp(str_buf, "bluemode:")) { + int sp = 0; + + sp = atoi(opt_buf); + xxx->opts.bluemode = sp; + } else if (!strcmp(str_buf, "redinvert:")) { + int sp = 0; + + sp = atoi(opt_buf); + xxx->opts.redinvert = sp; + } else if (!strcmp(str_buf, "greeninvert:")) { + int sp = 0; + + sp = atoi(opt_buf); + xxx->opts.greeninvert = sp; + } else if (!strcmp(str_buf, "blueinvert:")) { + int sp = 0; + + sp = atoi(opt_buf); + xxx->opts.blueinvert = sp; + } else if (!strcmp(str_buf, "colormode:")) { + int sp = 0; + + sp = atoi(opt_buf); + xxx->opts.colormode = sp; + } + get_line(load_buf, MAX_LOAD_LINE, fp, 0); + } + return (0); +} + + +/********************************************************************** + FUNCTION: gradient_load_options + *********************************************************************/ + +gint +gradient_load_options(gradientOBJ * xxx, FILE * fp) +{ + gchar load_buf[MAX_LOAD_LINE]; + gchar str_buf[MAX_LOAD_LINE]; + gchar opt_buf[MAX_LOAD_LINE]; + + get_line(load_buf, MAX_LOAD_LINE, fp, 0); + + while (strcmp(load_buf, "")) { + /* Get option name */ + + sscanf(load_buf, "%s %s", str_buf, opt_buf); + + if (!strcmp(str_buf, "redstretch:")) { + /* Value is double */ + double sp = 0; + + sp = atof(opt_buf); + wvals.redstretch = sp; + } else if (!strcmp(str_buf, "greenstretch:")) { + /* Value is double */ + double sp = 0; + + sp = atof(opt_buf); + wvals.greenstretch = sp; + } else if (!strcmp(str_buf, "bluestretch:")) { + /* Value is double */ + double sp = 0; + + sp = atof(opt_buf); + wvals.bluestretch = sp; + } else if (!strcmp(str_buf, "redmode:")) { + int sp = 0; + + sp = atoi(opt_buf); + wvals.redmode = sp; + } else if (!strcmp(str_buf, "greenmode:")) { + int sp = 0; + + sp = atoi(opt_buf); + wvals.greenmode = sp; + } else if (!strcmp(str_buf, "bluemode:")) { + int sp = 0; + + sp = atoi(opt_buf); + wvals.bluemode = sp; + } else if (!strcmp(str_buf, "redinvert:")) { + int sp = 0; + + sp = atoi(opt_buf); + wvals.redinvert = sp; + } else if (!strcmp(str_buf, "greeninvert:")) { + int sp = 0; + + sp = atoi(opt_buf); + wvals.greeninvert = sp; + } else if (!strcmp(str_buf, "blueinvert:")) { + int sp = 0; + + sp = atoi(opt_buf); + wvals.blueinvert = sp; + } else if (!strcmp(str_buf, "colormode:")) { + int sp = 0; + + sp = atoi(opt_buf); + wvals.colormode = sp; + } + get_line(load_buf, MAX_LOAD_LINE, fp, 0); + } + return (0); +} + +/********************************************************************** + FUNCTION: explorer_load + *********************************************************************/ + +void +explorer_load() +{ + FILE *fp; + gchar load_buf[MAX_LOAD_LINE]; + + g_assert(filename != NULL); + fp = fopen(filename, "r"); + if (!fp) { + g_warning(msg[lng][MSG_OPENERROR], filename); + return; + } + get_line(load_buf, MAX_LOAD_LINE, fp, 1); + + if (strncmp(FRACTAL_HEADER, load_buf, strlen(load_buf))) { + gchar err[256]; + + sprintf(err, msg[lng][MSG_WRONGFILETYPE], filename); + create_warn_dialog(err); + return; + } + if (load_options(current_obj,fp)) { + /* waste some mem */ + gchar err[256]; + + sprintf(err, + msg[lng][MSG_CORRUPTFILE], + filename, + line_no); + create_warn_dialog(err); + return; + } + wvals=current_obj->opts; + fclose(fp); +} diff --git a/plug-ins/FractalExplorer/Events.h b/plug-ins/FractalExplorer/Events.h new file mode 100644 index 0000000000..d40011c2ee --- /dev/null +++ b/plug-ins/FractalExplorer/Events.h @@ -0,0 +1,304 @@ + +/********************************************************************** + FUNCTION: preview_button_press_event + *********************************************************************/ + +gint +preview_button_press_event(GtkWidget * widget, GdkEventButton * event) +{ + double left, + right, + bottom, + top, + dx, + dy; + int px, + py, + x, + y; + unsigned short r, + g, + b; + guchar *p_ul, + *i, + *p; + + if (event->button == 1) { + x_press = event->x; + y_press = event->y; + left = sel_x1; + right = sel_x2 - 1; + bottom = sel_y2 - 1; + top = sel_y1; + dx = (right - left) / (preview_width - 1); + dy = (bottom - top) / (preview_height - 1); + xbild = preview_width; + ybild = preview_height; + xdiff = (xmax - xmin) / xbild; + ydiff = (ymax - ymin) / ybild; + + py = y_press; + px = 0; + p_ul = wint.wimage + 3 * (preview_width * py + 0); + + for (x = 0; x < preview_width; x++) { + i = wint.wimage + 3 * (preview_width * py + px); + r = (*i++) ^ 254; + g = (*i++) ^ 254; + b = (*i) ^ 254; + p_ul[0] = r; + p_ul[1] = g; + p_ul[2] = b; + p_ul += 3; + px += 1; + } + py = 0; + p_ul = wint.wimage + 3 * (preview_width * 0 + (int) x_press); + px = x_press; + for (y = 0; y < preview_height; y++) { + i = wint.wimage + 3 * (preview_width * py + px); + r = (*i++) ^ 254; + g = (*i++) ^ 254; + b = (*i) ^ 254; + p_ul[0] = r; + p_ul[1] = g; + p_ul[2] = b; + p_ul += 3 * (preview_width); + py += 1; + } /* for */ + + p = wint.wimage; + + for (y = 0; y < preview_height; y++) { + gtk_preview_draw_row(GTK_PREVIEW(wint.preview), p, 0, y, preview_width); + p += preview_width * 3; + } /* for */ + gtk_widget_draw(wint.preview, NULL); + gdk_flush(); + + } + return (TRUE); +} + +/********************************************************************** + FUNCTION: preview_motion_notify_event + *********************************************************************/ + +gint +preview_motion_notify_event(GtkWidget * widget, GdkEventButton * event) +{ + int px, + py, + x, + y; + unsigned short r, + g, + b; + guchar *p_ul, + *i, + *p; + + ypos = oldypos; + xpos = oldxpos; + if (oldypos != -1) { + py = ypos; + px = 0; + p_ul = wint.wimage + 3 * (preview_width * py + 0); + + for (x = 0; x < preview_width; x++) { + i = wint.wimage + 3 * (preview_width * py + px); + r = (*i++) ^ 254; + g = (*i++) ^ 254; + b = (*i) ^ 254; + p_ul[0] = r; + p_ul[1] = g; + p_ul[2] = b; + p_ul += 3; + px += 1; + } + py = 0; + p_ul = wint.wimage + 3 * (preview_width * 0 + (int) xpos); + px = xpos; + for (y = 0; y < preview_height; y++) { + i = wint.wimage + 3 * (preview_width * py + px); + r = (*i++) ^ 254; + g = (*i++) ^ 254; + b = (*i) ^ 254; + p_ul[0] = r; + p_ul[1] = g; + p_ul[2] = b; + p_ul += 3 * (preview_width); + py += 1; + } /* for */ + } + oldxpos = xpos = event->x; + oldypos = ypos = event->y; + + if ((xpos >= 0.0) && (ypos >= 0.0) + && (xpos < preview_width) && (ypos < preview_height)) { + + py = ypos; + px = 0; + p_ul = wint.wimage + 3 * (preview_width * py + 0); + + for (x = 0; x < preview_width; x++) { + i = wint.wimage + 3 * (preview_width * py + px); + r = (*i++) ^ 254; + g = (*i++) ^ 254; + b = (*i) ^ 254; + p_ul[0] = r; + p_ul[1] = g; + p_ul[2] = b; + p_ul += 3; + px += 1; + } + py = 0; + p_ul = wint.wimage + 3 * (preview_width * 0 + (int) xpos); + px = xpos; + for (y = 0; y < preview_height; y++) { + i = wint.wimage + 3 * (preview_width * py + px); + r = (*i++) ^ 254; + g = (*i++) ^ 254; + b = (*i) ^ 254; + p_ul[0] = r; + p_ul[1] = g; + p_ul[2] = b; + p_ul += 3 * (preview_width); + py += 1; + } /* for */ + } else { + oldypos = -1; + oldxpos = -1; + } + + p = wint.wimage; + + for (y = 0; y < preview_height; y++) { + gtk_preview_draw_row(GTK_PREVIEW(wint.preview), p, 0, y, preview_width); + p += preview_width * 3; + } /* for */ + gtk_widget_draw(wint.preview, NULL); + gdk_flush(); + + return (TRUE); +} + +/********************************************************************** + FUNCTION: preview_leave_notify_event + *********************************************************************/ + +gint +preview_leave_notify_event(GtkWidget * widget, GdkEventButton * event) +{ + int px, + py, + x, + y; + unsigned short r, + g, + b; + guchar *p_ul, + *i, + *p; + + ypos = oldypos; + xpos = oldxpos; + if (oldypos != -1) { + py = ypos; + px = 0; + p_ul = wint.wimage + 3 * (preview_width * py + 0); + + for (x = 0; x < preview_width; x++) { + i = wint.wimage + 3 * (preview_width * py + px); + r = (*i++) ^ 254; + g = (*i++) ^ 254; + b = (*i) ^ 254; + p_ul[0] = r; + p_ul[1] = g; + p_ul[2] = b; + p_ul += 3; + px += 1; + } + py = 0; + p_ul = wint.wimage + 3 * (preview_width * 0 + (int) xpos); + px = xpos; + for (y = 0; y < preview_height; y++) { + i = wint.wimage + 3 * (preview_width * py + px); + r = (*i++) ^ 254; + g = (*i++) ^ 254; + b = (*i) ^ 254; + p_ul[0] = r; + p_ul[1] = g; + p_ul[2] = b; + p_ul += 3 * (preview_width); + py += 1; + } /* for */ + } + oldxpos = -1; + oldypos = -1; + + p = wint.wimage; + + for (y = 0; y < preview_height; y++) { + gtk_preview_draw_row(GTK_PREVIEW(wint.preview), p, 0, y, preview_width); + p += preview_width * 3; + } /* for */ + gtk_widget_draw(wint.preview, NULL); + gdk_flush(); + MyCursor = gdk_cursor_new(GDK_TOP_LEFT_ARROW); + gdk_window_set_cursor(maindlg->window, MyCursor); + + return (TRUE); +} + +/********************************************************************** + FUNCTION: preview_enter_notify_event + *********************************************************************/ + +gint +preview_enter_notify_event(GtkWidget * widget, GdkEventButton * event) +{ + MyCursor = gdk_cursor_new(GDK_TCROSS); + gdk_window_set_cursor(maindlg->window, MyCursor); + return (TRUE); +} + +/********************************************************************** + FUNCTION: preview_button_release_event + *********************************************************************/ + +gint +preview_button_release_event(GtkWidget * widget, GdkEventButton * event) +{ + double l_xmin, + l_xmax, + l_ymin, + l_ymax; + if (event->button == 1) { + x_release = event->x; + y_release = event->y; + + if ((x_press >= 0.0) && (y_press >= 0.0) + && (x_release >= 0.0) && (y_release >= 0.0) + && (x_press < preview_width) && (y_press < preview_height) + && (x_release < preview_width) && (y_release < preview_height)) { + l_xmin = wvals.xmin + (wvals.xmax - wvals.xmin) * (x_press / preview_width); + l_xmax = wvals.xmin + (wvals.xmax - wvals.xmin) * (x_release / preview_width); + l_ymin = wvals.ymin + (wvals.ymax - wvals.ymin) * (y_press / preview_height); + l_ymax = wvals.ymin + (wvals.ymax - wvals.ymin) * (y_release / preview_height); + zooms[zoomindex] = wvals; + zoomindex++; + if (zoomindex > 99) + zoomindex = 99; + zoommax = zoomindex; + wvals.xmin = l_xmin; + wvals.xmax = l_xmax; + wvals.ymin = l_ymin; + wvals.ymax = l_ymax; + dialog_change_scale(); + dialog_update_preview(); + oldypos = oldxpos = -1; + } + } + return (TRUE); +} diff --git a/plug-ins/FractalExplorer/FractalExplorer.c b/plug-ins/FractalExplorer/FractalExplorer.c new file mode 100644 index 0000000000..6675eb5b80 --- /dev/null +++ b/plug-ins/FractalExplorer/FractalExplorer.c @@ -0,0 +1,2209 @@ +/********************************************************************** + Fractal Explorer Plug-in (Version 2.00 Beta) + Daniel Cotting (cotting@mygale.org) + ********************************************************************** + ********************************************************************** + Official homepages: http://www.mygale.org/~cotting + http://cotting.citeweb.net + http://village.cyberbrain.com/cotting + *********************************************************************/ + +/********************************************************************** + The GIMP -- an image manipulation program + Copyright (C) 1995 Spencer Kimball and Peter Mattis + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *********************************************************************/ + +/********************************************************************** + Some code has been 'stolen' from: + - Peter Kirchgessner (Pkirchg@aol.com) + - Scott Draves (spot@cs.cmu.edu) + - Andy Thomas (alt@picnic.demon.co.uk) + . + . + . + ********************************************************************** + "If you steal from one author it's plagiarism; if you steal from + many it's research." --Wilson Mizner + *********************************************************************/ + +/********************************************************************** + Include necessary files + *********************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "gtk/gtk.h" +#include "libgimp/gimp.h" + +#include "logo.h" +#include "pix_data.h" + +#include "Languages.h" +#include "FractalExplorer.h" +#include "Events.h" +#include "Callbacks.h" +#include "Dialogs.h" + +/********************************************************************** + MAIN() + *********************************************************************/ + +MAIN() + +/********************************************************************** + FUNCTION: query + *********************************************************************/ + +static void +query() +{ + static GParamDef args[] = + { + {PARAM_INT32, "run_mode", "Interactive, non-interactive"}, + {PARAM_IMAGE, "image", "Input image"}, + {PARAM_DRAWABLE, "drawable", "Input drawable"}, + {PARAM_INT8, "fractaltype", "0: Mandelbrot; 1: Julia; 2: Barnsley 1; 3: Barnsley 2; 4: Barnsley 3; 5: Spider; 6: ManOWar; 7: Lambda; 8: Sierpinski"}, + {PARAM_FLOAT, "xmin", "xmin fractal image delimiter"}, + {PARAM_FLOAT, "xmax", "xmax fractal image delimiter"}, + {PARAM_FLOAT, "ymin", "ymin fractal image delimiter"}, + {PARAM_FLOAT, "ymax", "ymax fractal image delimiter"}, + {PARAM_FLOAT, "iter", "Iteration value"}, + {PARAM_FLOAT, "cx", "cx value ( only Julia)"}, + {PARAM_FLOAT, "cy", "cy value ( only Julia)"}, + {PARAM_INT8, "colormode", "0: Apply colormap as specified by the parameters below; 1: Apply active gradient to final image"}, + {PARAM_FLOAT, "redstretch", "Red stretching factor"}, + {PARAM_FLOAT, "greenstretch", "Green stretching factor"}, + {PARAM_FLOAT, "bluestretch", "Blue stretching factor"}, + {PARAM_INT8, "redmode", "Red application mode (0:SIN;1:COS;2:NONE)"}, + {PARAM_INT8, "greenmode", "Green application mode (0:SIN;1:COS;2:NONE)"}, + {PARAM_INT8, "bluemode", "Blue application mode (0:SIN;1:COS;2:NONE)"}, + {PARAM_INT8, "redinvert", "Red inversion mode (1: enabled; 0: disabled)"}, + {PARAM_INT8, "greeninvert", "Green inversion mode (1: enabled; 0: disabled)"}, + {PARAM_INT8, "blueinvert", "Green inversion mode (1: enabled; 0: disabled)"}, + }; + static GParamDef *return_vals = NULL; + static int nargs = sizeof(args) / sizeof(args[0]); + static int nreturn_vals = 0; + + gimp_install_procedure("plug_in_fractalexplorer", + "Chaos Fractal Explorer Plug-In", + "No help yet.", + "Daniel Cotting (cotting@mygale.org, www.mygale.org/~cotting)", + "Daniel Cotting (cotting@mygale.org, www.mygale.org/~cotting)", + "October 1997", + "/Filters/Render/Fractal Explorer", + "RGB*", + PROC_PLUG_IN, + nargs, nreturn_vals, + args, return_vals); +} + +/********************************************************************** + FUNCTION: run + *********************************************************************/ + +static void +run(char *name, + int nparams, + GParam * param, + int *nreturn_vals, + GParam ** return_vals) +{ + GParam *values; + gint32 image_ID; + GRunModeType run_mode; + double xhsiz, + yhsiz; + int pwidth, + pheight; + GStatusType status = STATUS_SUCCESS; + FILE * fp; + gchar * filname=NULL; + gchar load_buf[MAX_LOAD_LINE]; + + values = g_new(GParam, 1); + + run_mode = param[0].data.d_int32; + + values[0].type = PARAM_STATUS; + values[0].data.d_status = status; + + *nreturn_vals = 1; + *return_vals = values; + + /* Get the specified drawable */ + drawable = gimp_drawable_get(param[2].data.d_drawable); + image_ID = param[1].data.d_image; + tile_width = gimp_tile_width(); + tile_height = gimp_tile_height(); + + img_width = gimp_drawable_width(drawable->id); + img_height = gimp_drawable_height(drawable->id); + img_bpp = gimp_drawable_bpp(drawable->id); + + gimp_drawable_mask_bounds(drawable->id, &sel_x1, &sel_y1, &sel_x2, &sel_y2); + + sel_width = sel_x2 - sel_x1; + sel_height = sel_y2 - sel_y1; + + cen_x = (double) (sel_x2 - 1 + sel_x1) / 2.0; + cen_y = (double) (sel_y2 - 1 + sel_y1) / 2.0; + + xhsiz = (double) (sel_width - 1) / 2.0; + yhsiz = (double) (sel_height - 1) / 2.0; + + /* Calculate preview size */ + if (sel_width > sel_height) { + pwidth = MIN(sel_width, PREVIEW_SIZE); + pheight = sel_height * pwidth / sel_width; + } else { + pheight = MIN(sel_height, PREVIEW_SIZE); + pwidth = sel_width * pheight / sel_height; + } /* else */ + + preview_width = MAX(pwidth, 2); /* Min size is 2 */ + preview_height = MAX(pheight, 2); + + /* See how we will run */ + switch (run_mode) { + case RUN_INTERACTIVE: + /* Possibly retrieve data */ + + gimp_get_data("plug_in_fractalexplorer", &wvals); + + lng=0; + filname = g_malloc (100); + sprintf (filname, "%s%s", getenv("HOME"), "/.fractalexplorerrc"); + fp = fopen (filname, "r"); + if (!fp) + { + fp = fopen (filname, "w"); + if (fp) fputs("FX-LANG:En\n",fp); + } + else + { + fgets(load_buf, MAX_LOAD_LINE, fp); + if (strlen(load_buf) > 0) load_buf[strlen(load_buf) - 1] = '\0'; + if(strncmp("FX-LANG:En",load_buf,strlen(load_buf))==0) + { lng=0; } + if(strncmp("FX-LANG:Fr",load_buf,strlen(load_buf))==0) + { lng=1; } + if(strncmp("FX-LANG:De",load_buf,strlen(load_buf))==0) + { lng=2; } + } + fclose(fp); + + wvals.language=lng; + do_english = (wvals.language == 0); + do_french = (wvals.language == 1); + do_german = (wvals.language == 2); + + /* Get information from the dialog */ + + if (!explorer_dialog()) + return; + + break; + + case RUN_NONINTERACTIVE: + /* Make sure all the arguments are present */ + + if (nparams != 21) + status = STATUS_CALLING_ERROR; + + if (status == STATUS_SUCCESS) { + wvals.fractaltype = param[3].data.d_int8; + wvals.xmin = param[4].data.d_float; + wvals.xmax = param[5].data.d_float; + wvals.ymin = param[6].data.d_float; + wvals.ymax = param[7].data.d_float; + wvals.iter = param[8].data.d_float; + wvals.cx = param[9].data.d_float; + wvals.cy = param[10].data.d_float; + wvals.colormode = param[11].data.d_int8; + wvals.redstretch = param[12].data.d_float; + wvals.greenstretch = param[13].data.d_float; + wvals.bluestretch = param[14].data.d_float; + wvals.redmode = param[15].data.d_int8; + wvals.greenmode = param[16].data.d_int8; + wvals.bluemode = param[17].data.d_int8; + wvals.redinvert = param[18].data.d_int8; + wvals.greeninvert = param[19].data.d_int8; + wvals.blueinvert = param[20].data.d_int8; + } + make_color_map(); + break; + + case RUN_WITH_LAST_VALS: + /* Possibly retrieve data */ + + gimp_get_data("plug_in_fractalexplorer", &wvals); + make_color_map(); + break; + + default: + break; + } /* switch */ + + xmin = wvals.xmin; + xmax = wvals.xmax; + ymin = wvals.ymin; + ymax = wvals.ymax; + cx = wvals.cx; + cy = wvals.cy; + + if (status == STATUS_SUCCESS) { + /* Make sure that the drawable is indexed or RGB color */ + if (gimp_drawable_color(drawable->id)) { + gimp_progress_init("Rendering fractal..."); + + /* Set the tile cache size */ + gimp_tile_cache_ntiles(2 * (drawable->width / gimp_tile_width() + 1)); + /* Run! */ + + explorer(drawable); + if (run_mode != RUN_NONINTERACTIVE) + gimp_displays_flush(); + + /* Store data */ + + if (run_mode == RUN_INTERACTIVE) + gimp_set_data("plug_in_fractalexplorer", &wvals, sizeof(explorer_vals_t)); + } else { + status = STATUS_EXECUTION_ERROR; + } + } + values[0].data.d_status = status; + + gimp_drawable_detach(drawable); +} + +/********************************************************************** + FUNCTION: explorer + *********************************************************************/ + +void +explorer(GDrawable * drawable) +{ + GPixelRgn srcPR, + destPR; + gint width, + height, + bytes, + row, + x1, + y1, + x2, + y2; + guchar *src_row, + *dest_row; + + /* Get the input area. This is the bounding box of the selection in + * the image (or the entire image if there is no selection). Only + * operating on the input area is simply an optimization. It doesn't + * need to be done for correct operation. (It simply makes it go + * faster, since fewer pixels need to be operated on). + */ + gimp_drawable_mask_bounds(drawable->id, &x1, &y1, &x2, &y2); + + /* Get the size of the input image. (This will/must be the same + * as the size of the output image. + */ + width = drawable->width; + height = drawable->height; + bytes = drawable->bpp; + + /* allocate row buffers */ + src_row = (guchar *) malloc((x2 - x1) * bytes); + dest_row = (guchar *) malloc((x2 - x1) * bytes); + + /* initialize the pixel regions */ + gimp_pixel_rgn_init(&srcPR, drawable, 0, 0, width, height, FALSE, FALSE); + gimp_pixel_rgn_init(&destPR, drawable, 0, 0, width, height, TRUE, TRUE); + + xbild = width; + ybild = height; + xdiff = (xmax - xmin) / xbild; + ydiff = (ymax - ymin) / ybild; + + for (row = y1; row < y2; row++) { + gimp_pixel_rgn_get_row(&srcPR, src_row, x1, row, (x2 - x1)); + + explorer_render_row(src_row, + dest_row, + row, + (x2 - x1), + bytes); + + /* store the dest */ + gimp_pixel_rgn_set_row(&destPR, dest_row, x1, row, (x2 - x1)); + + if ((row % 10) == 0) + gimp_progress_update((double) row / (double) (y2 - y1)); + } + + /* update the processed region */ + gimp_drawable_flush(drawable); + gimp_drawable_merge_shadow(drawable->id, TRUE); + gimp_drawable_update(drawable->id, x1, y1, (x2 - x1), (y2 - y1)); + + free(src_row); + free(dest_row); +} + +/********************************************************************** + FUNCTION: explorer_render_row + *********************************************************************/ + +void +explorer_render_row(const guchar * src_row, + guchar * dest_row, + gint row, + gint row_width, + gint bytes) +{ + gint col, + bytenum; + double a, + b, + x, + y, + oldx, + oldy, + tempsqrx, + tempsqry, + tmpx=0, + tmpy=0, + foldxinitx, + foldxinity, + foldyinitx, + foldyinity, + xx=0, + cx, + cy; + int zaehler, + color, + iteration; + cx = wvals.cx; + cy = wvals.cy; + iteration = wvals.iter; + for (col = 0; col < row_width; col++) { + a = xmin + (double) col *xdiff; + b = ymin + (double) row *ydiff; + if (wvals.fractaltype!=0) { + tmpx = x = a; + tmpy = y = b; + } else { + x = 0; + y = 0; + } + for (zaehler = 0; (zaehler < iteration) && ((x * x + y * y) < 4); zaehler++) { + oldx=x; oldy=y; + if (wvals.fractaltype==1) { + /* Julia */ + xx = x * x - y * y + cx; + y = 2.0 * x * y + cy; + } else if (wvals.fractaltype==0) { + /*Mandelbrot*/ + xx = x * x - y * y + a; + y = 2.0 * x * y + b; + } else if (wvals.fractaltype==2) { +/* Some code taken from X-Fractint */ +/* Barnsley M1 */ + foldxinitx = oldx * cx; + foldyinity = oldy * cy; + foldxinity = oldx * cy; + foldyinitx = oldy * cx; + /* orbit calculation */ + if(oldx >= 0) + { + xx = (foldxinitx - cx - foldyinity); + y = (foldyinitx - cy + foldxinity); + } + else + { + xx = (foldxinitx + cx - foldyinity); + y = (foldyinitx + cy + foldxinity); + } + } else if (wvals.fractaltype==3) { +/* Barnsley Unnamed */ + + foldxinitx = oldx * cx; + foldyinity = oldy * cy; + foldxinity = oldx * cy; + foldyinitx = oldy * cx; + /* orbit calculation */ + if(foldxinity + foldyinitx >= 0) + { + xx = foldxinitx - cx - foldyinity; + y = foldyinitx - cy + foldxinity; + } + else + { + xx = foldxinitx + cx - foldyinity; + y = foldyinitx + cy + foldxinity; + } + } else if (wvals.fractaltype==4) { + /*Barnsley 1*/ + foldxinitx = oldx * oldx; + foldyinity = oldy * oldy; + foldxinity = oldx * oldy; + /* orbit calculation */ + if(oldx > 0) + { + xx = foldxinitx - foldyinity - 1.0; + y = foldxinity * 2; + } + else + { + xx = foldxinitx - foldyinity -1.0 + cx * oldx; + y = foldxinity * 2; + y += cy * oldx; + } + } else if (wvals.fractaltype==5) { + /* Spider(XAXIS) { c=z=pixel: z=z*z+c; c=c/2+z, |z|<=4 } */ + xx = x*x - y*y + tmpx + cx; + y = 2 * oldx * oldy + tmpy +cy; + tmpx = tmpx/2 + xx; + tmpy = tmpy/2 + y; + } else if (wvals.fractaltype==6) { +/* ManOWarfpFractal() */ + xx = x*x - y*y + tmpx + cx; + y = 2.0 * x * y + tmpy + cy; + tmpx = oldx; + tmpy = oldy; + } else if (wvals.fractaltype==7) { +/* Lambda */ + tempsqrx=x*x; + tempsqry=y*y; + tempsqrx = oldx - tempsqrx + tempsqry; + tempsqry = -(oldy * oldx); + tempsqry += tempsqry + oldy; + xx = cx * tempsqrx - cy * tempsqry; + y = cx * tempsqry + cy * tempsqrx; + } else if (wvals.fractaltype==8) { +/* Sierpinski */ + xx = oldx + oldx; + y = oldy + oldy; + if(oldy > .5) + y = y - 1; + else if (oldx > .5) + xx = xx - 1; + } + x = xx; + } + color = (int) (zaehler * 255.0 / iteration); + dest_row[col * bytes] = colormap[color][0]; + dest_row[col * bytes + 1] = colormap[color][1]; + dest_row[col * bytes + 2] = colormap[color][2]; + + if (bytes > 3) + for (bytenum = 3; bytenum < bytes; bytenum++) { + dest_row[col * bytes + bytenum] = src_row[col * bytes + bytenum]; + } + } +} + + +/* + +static gint +rename_button_press(GtkWidget *widget, + GdkEventButton *event, + gpointer data) +{ + GtkWidget *list = (GtkWidget *)data; + GList * sellist; + fractalexplorerOBJ * sel_obj; + + sellist = GTK_LIST(list)->selection; + + sel_obj = (fractalexplorerOBJ *)gtk_object_get_user_data(GTK_OBJECT((GtkWidget *)(sellist->data))); + + fractalexplorer_dialog_edit_list(widget,(gpointer) sel_obj,FALSE); + return(FALSE); +} +*/ + +static gint +delete_button_press_cancel(GtkWidget *widget, + gpointer data) +{ + gtk_widget_destroy(delete_dialog); + gtk_widget_set_sensitive(delete_frame_to_freeze,TRUE); + delete_dialog = NULL; + + return(FALSE); +} + +static gint +fractalexplorer_delete_fractalexplorer_callback(GtkWidget *widget, + GdkEventButton *event, + gpointer data) +{ + GtkWidget *vbox; + GtkWidget *label; + GtkWidget *button; + char *str; + GtkWidget *list = (GtkWidget *)data; + GList * sellist; + fractalexplorerOBJ * sel_obj; + + + sellist = GTK_LIST(list)->selection; + + sel_obj = (fractalexplorerOBJ *)gtk_object_get_user_data(GTK_OBJECT((GtkWidget *)(sellist->data))); + if(delete_dialog) + return(FALSE); + + delete_dialog = gtk_dialog_new(); + gtk_window_set_title(GTK_WINDOW(delete_dialog), msg[lng][MSG_DELFRAC]); + gtk_window_position(GTK_WINDOW(delete_dialog), GTK_WIN_POS_MOUSE); + gtk_container_border_width(GTK_CONTAINER(delete_dialog), 0); + + vbox = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(vbox), 8); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(delete_dialog)->vbox), vbox, + FALSE, FALSE, 0); + gtk_widget_show(vbox); + + /* Question */ + + label = gtk_label_new(msg[lng][MSG_DELSURE]); + gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); + gtk_widget_show(label); + + str = g_malloc((strlen(sel_obj->draw_name) + 32 * sizeof(char))); + + sprintf(str, msg[lng][MSG_DELSURE2], sel_obj->draw_name); + + label = gtk_label_new(str); + gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); + gtk_widget_show(label); + + g_free(str); + + /* Buttons */ + button = gtk_button_new_with_label (msg[lng][MSG_DEL]); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + (GtkSignalFunc) delete_button_press_ok, + data); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (delete_dialog)->action_area), button, TRUE, TRUE, 0); + gtk_widget_grab_default (button); + gtk_object_set_user_data(GTK_OBJECT(button),widget); + gtk_widget_show (button); + + button = gtk_button_new_with_label (msg[lng][MSG_CANCEL]); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + (GtkSignalFunc) delete_button_press_cancel, + data); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (delete_dialog)->action_area), button, TRUE, TRUE, 0); + gtk_widget_grab_default (button); + gtk_object_set_user_data(GTK_OBJECT(button),widget); + gtk_widget_show (button); + + /* Show! */ + + gtk_widget_set_sensitive(GTK_WIDGET(delete_frame_to_freeze), FALSE); + gtk_widget_show(delete_dialog); + + return(FALSE); +} + + +void +fractalexplorer_save(void) +{ + /* Save the current object */ + if(!current_obj->filename) + { + create_file_selection(current_obj,NULL); + return; + } + save_callback(); +} + + +static gint +gradient_list_button_press(GtkWidget *widget, + GdkEventButton *event, + gpointer data) +{ + + gradientOBJ * sel_obj; + FILE * fp; + gchar * filename; + gchar load_buf[MAX_LOAD_LINE]; + + switch (event->type) + { + case GDK_BUTTON_PRESS: + if(event->button == 3) + { + } + break; + case GDK_2BUTTON_PRESS: + sel_obj = (gradientOBJ *)data; + if(sel_obj) { + if (sel_obj->obj_status && gradient_GRADIENTEDITOR) + { + wvals.colormode=1; + gimp_gradients_set_active(sel_obj->name); + dialog_change_scale(); + set_cmap_preview(); + dialog_update_preview(); + } + else + { + filename=sel_obj->filename; + g_assert (filename != NULL); + fp = fopen (filename, "r"); + if (!fp) + { + g_warning (msg[lng][MSG_OPENERROR], filename); + return 0; + } + get_line(load_buf,MAX_LOAD_LINE,fp,1); + if(strncmp(fractalexplorer_HEADER,load_buf,strlen(load_buf))) + { + gchar err[256]; + sprintf(err,msg[lng][MSG_WRONGFILETYPE],sel_obj->filename); + create_warn_dialog(err); + return(0); + } + + if(gradient_load_options(sel_obj,fp)) + { + gchar err[256]; + sprintf(err,msg[lng][MSG_CORRUPTFILE], + filename, + line_no); + create_warn_dialog(err); + return(0); + } + fclose(fp); + dialog_change_scale(); + set_cmap_preview(); + dialog_update_preview(); + } + } + else + g_warning(msg[lng][MSG_NULLLIST]); + break; + default: + printf(msg[lng][MSG_UNKNOWN_EVENT]); + break; + } + + return(FALSE); +} + + +static void +fractalexplorer_list_ok_callback (GtkWidget *w, + gpointer client_data) +{ + fractalexplorerListOptions *options; + GtkWidget *list; + gint pos; + + options = (fractalexplorerListOptions *) client_data; + list = options->list_entry; + + /* Set the new layer name */ + if (options->obj->draw_name) + { + g_free(options->obj->draw_name); + } + options->obj->draw_name = g_strdup (gtk_entry_get_text (GTK_ENTRY (options->name_entry))); + + /* Need to reorder the list */ + /* gtk_label_set (GTK_LABEL (options->layer_widget->label), layer->name);*/ + + pos = gtk_list_child_position(GTK_LIST(fractalexplorer_gtk_list),list); + + gtk_list_clear_items(GTK_LIST (fractalexplorer_gtk_list),pos,pos+1); + + /* remove/Add again */ + fractalexplorer_list = g_list_remove(fractalexplorer_list,options->obj); + fractalexplorer_list_add(options->obj); + + options->obj->obj_status |= fractalexplorer_MODIFIED; + + gtk_widget_destroy (options->query_box); + g_free (options); + +} + +static void +fractalexplorer_list_cancel_callback (GtkWidget *w, + gpointer client_data) +{ + fractalexplorerListOptions *options; + + options = (fractalexplorerListOptions *) client_data; + if(options->created) + { + /* We are creating an entry so if cancelled must del the list item as well */ + delete_button_press_ok(w,fractalexplorer_gtk_list); + } + + gtk_widget_destroy (options->query_box); + g_free (options); +} + + +static void +fractalexplorer_dialog_edit_list (GtkWidget *lwidget,fractalexplorerOBJ *obj,gint created) +{ + fractalexplorerListOptions *options; + GtkWidget *vbox; + GtkWidget *hbox; + GtkWidget *button; + GtkWidget *label; + + /* the new options structure */ + options = (fractalexplorerListOptions *) g_malloc (sizeof (fractalexplorerListOptions)); + options->list_entry = lwidget; + options->obj = obj; + options->created = created; + + /* the dialog */ + options->query_box = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (options->query_box),msg[lng][MSG_EDIT_FRACNAME]); + gtk_window_position (GTK_WINDOW (options->query_box), GTK_WIN_POS_MOUSE); + + /* the main vbox */ + vbox = gtk_vbox_new (FALSE, 1); + gtk_container_border_width (GTK_CONTAINER (vbox), 2); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (options->query_box)->vbox), vbox, TRUE, TRUE, 0); + + /* the name entry hbox, label and entry */ + hbox = gtk_hbox_new (FALSE, 1); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); + label = gtk_label_new (msg[lng][MSG_FRACNAME]); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + gtk_widget_show (label); + options->name_entry = gtk_entry_new (); + gtk_box_pack_start (GTK_BOX (hbox), options->name_entry, TRUE, TRUE, 0); + gtk_entry_set_text (GTK_ENTRY (options->name_entry),obj->draw_name); + + gtk_widget_show (options->name_entry); + gtk_widget_show (hbox); + + button = gtk_button_new_with_label (msg[lng][MSG_OK]); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + (GtkSignalFunc)fractalexplorer_list_ok_callback, + options); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (options->query_box)->action_area), button, TRUE, TRUE, 0); + gtk_widget_grab_default (button); + gtk_widget_show (button); + + button = gtk_button_new_with_label (msg[lng][MSG_CANCEL]); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + (GtkSignalFunc)fractalexplorer_list_cancel_callback, + options); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (options->query_box)->action_area), button, TRUE, TRUE, 0); + gtk_widget_show (button); + + gtk_widget_show (vbox); + gtk_widget_show (options->query_box); +} + + +static GtkWidget * +new_fractalexplorer_obj(gchar * name) +{ + fractalexplorerOBJ * fractalexplorer; + GtkWidget * new_list_item; + /* Create a new entry */ + + fractalexplorer = fractalexplorer_new(); + + if(!name) + name = msg[lng][MSG_NEWFRAC]; + + fractalexplorer->draw_name = g_strdup(name); + + /* Leave options as before */ + pic_obj = current_obj = fractalexplorer; + + new_list_item = fractalexplorer_list_add(fractalexplorer); + +/* obj_creating = tmp_line = NULL; */ + + /* Redraw areas */ + /* update_draw_area(fractalexplorer_preview,NULL); */ + list_button_update(fractalexplorer); + return(new_list_item); +} + + +static gint +new_button_press(GtkWidget *widget, + GdkEventButton *event, + gpointer data) +{ + GtkWidget * new_list_item; + + new_list_item = new_fractalexplorer_obj((gchar*)data); + fractalexplorer_dialog_edit_list(new_list_item,current_obj,TRUE); + + return(FALSE); +} + +static void +fractalexplorer_rescan_cancel_callback (GtkWidget *w, + gpointer client_data) +{ + gtk_widget_destroy (GTK_WIDGET (client_data)); +} + +void +clear_list_items(GtkList *list) +{ + gtk_list_clear_items(list,0,-1); +} + +/* + * Load all fractalexplorer, which are founded in fractalexplorer-path-list, into fractalexplorer_list. + * fractalexplorer-path-list must be initialized first. (plug_in_parse_fractalexplorer_path ()) + * based on code from Gflare. + */ + +gint +fractalexplorer_list_pos(fractalexplorerOBJ *fractalexplorer) +{ + fractalexplorerOBJ *g; + int n; + GList *tmp; + + n = 0; + + tmp = fractalexplorer_list; + + while (tmp) + { + g = tmp->data; + + if (strcmp (fractalexplorer->draw_name, g->draw_name) <= 0) + break; + n++; + tmp = tmp->next; + } + + return(n); +} + +gint +gradient_list_pos(gradientOBJ *gradi) +{ + gradientOBJ *g; + int n; + GList *tmp; + + n = 0; + + tmp = gradient_list; + + while (tmp) + { + g = tmp->data; + + if (strcmp (gradi->draw_name, g->draw_name) <= 0) + break; + n++; + tmp = tmp->next; + } + + return(n); +} + + +gint +fractalexplorer_list_insert (fractalexplorerOBJ *fractalexplorer) +{ + int n; + + /* + * Insert fractalexplorers in alphabetical order + */ + + n = fractalexplorer_list_pos(fractalexplorer); + + fractalexplorer_list = g_list_insert (fractalexplorer_list, fractalexplorer, n); + + return n; +} + +gint +gradient_list_insert (gradientOBJ *gradi) +{ + int n; + + /* + * Insert gradis in alphabetical order + */ + + n = gradient_list_pos(gradi); + + gradient_list = g_list_insert (gradient_list, gradi, n); + + return n; +} + +GtkWidget* +fractalexplorer_list_item_new_with_label_and_pixmap (fractalexplorerOBJ *obj, gchar *label, GtkWidget *pix_widget) +{ + GtkWidget *list_item; + GtkWidget *label_widget; + GtkWidget *alignment; + GtkWidget *hbox; + + hbox = gtk_hbox_new(FALSE,1); + gtk_widget_show(hbox); + + list_item = gtk_list_item_new (); + label_widget = gtk_label_new (label); + gtk_misc_set_alignment (GTK_MISC (label_widget), 0.0, 0.5); + + alignment = gtk_alignment_new (0.5, 0.5, 0.0, 0.0); + gtk_container_border_width (GTK_CONTAINER (alignment), 0); + gtk_widget_show(alignment); + + gtk_box_pack_start(GTK_BOX(hbox),pix_widget,FALSE,FALSE,0); + gtk_container_add (GTK_CONTAINER (hbox), label_widget); + gtk_container_add (GTK_CONTAINER (list_item), hbox); + + gtk_widget_show (obj->label_widget = label_widget); + gtk_widget_show (obj->pixmap_widget = pix_widget); + gtk_widget_show (obj->list_item = list_item); + + return list_item; +} + +GtkWidget* +gradient_list_item_new_with_label_and_pixmap (gradientOBJ *obj, gchar *label, GtkWidget *pix_widget) +{ + GtkWidget *list_item; + GtkWidget *label_widget; + GtkWidget *alignment; + GtkWidget *hbox; + + hbox = gtk_hbox_new(FALSE,1); + gtk_widget_show(hbox); + + list_item = gtk_list_item_new (); + label_widget = gtk_label_new (label); + gtk_misc_set_alignment (GTK_MISC (label_widget), 0.0, 0.5); + + alignment = gtk_alignment_new (0.5, 0.5, 0.0, 0.0); + gtk_container_border_width (GTK_CONTAINER (alignment), 0); + gtk_widget_show(alignment); + + gtk_box_pack_start(GTK_BOX(hbox),pix_widget,FALSE,FALSE,0); + gtk_container_add (GTK_CONTAINER (hbox), label_widget); + gtk_container_add (GTK_CONTAINER (list_item), hbox); + + gtk_widget_show (obj->label_widget = label_widget); + gtk_widget_show (obj->pixmap_widget = pix_widget); + gtk_widget_show (obj->list_item = list_item); + + return list_item; +} + + +GtkWidget* +fractalexplorer_new_pixmap(GtkWidget *list, char **pixdata) +{ + GtkWidget *pixmap_widget; + GdkPixmap *pixmap; + GdkColor transparent; + GdkBitmap *mask; + + pixmap = gdk_pixmap_create_from_xpm_d(list->window,&mask,&transparent,pixdata); + pixmap_widget = gtk_pixmap_new(pixmap,mask); + gtk_widget_show(pixmap_widget); + return(pixmap_widget); +} + + +static GtkWidget * +fractalexplorer_list_add(fractalexplorerOBJ *obj) +{ + GList *list; + gint pos; + GtkWidget *list_item; + GtkWidget *list_pix; + + list_pix = fractalexplorer_new_pixmap(fractalexplorer_gtk_list,Floppy6_xpm); + list_item = fractalexplorer_list_item_new_with_label_and_pixmap(obj,obj->draw_name,list_pix); + + gtk_object_set_user_data (GTK_OBJECT (list_item), (gpointer)obj); + + pos = fractalexplorer_list_insert(obj); + + list = g_list_append(NULL, list_item); + gtk_list_insert_items(GTK_LIST(fractalexplorer_gtk_list), list, pos); + gtk_widget_show (list_item); + gtk_list_select_item(GTK_LIST(fractalexplorer_gtk_list), pos); + + gtk_signal_connect(GTK_OBJECT(list_item), "button_press_event", + (GtkSignalFunc) list_button_press, + (gpointer)obj); + + return(list_item); +} + + + + +void +list_button_update(fractalexplorerOBJ *obj) +{ + g_return_if_fail (obj != NULL); + pic_obj = (fractalexplorerOBJ *)obj; + /* Draw xxxxxxxxxxxxxxxxxxxx */ +} + + + + + + +fractalexplorerOBJ * +fractalexplorer_new(void) +{ + fractalexplorerOBJ * new; + + new = g_new0(fractalexplorerOBJ,1); + return(new); +} + +gradientOBJ * +gradient_new(void) +{ + gradientOBJ * new; + + new = g_new0(gradientOBJ,1); + return(new); +} + +void +build_list_items(GtkWidget *list) +{ + GList *tmp = fractalexplorer_list; + GtkWidget *list_item; + GtkWidget *list_pix; + fractalexplorerOBJ *g; + + while(tmp) + { + g = tmp->data; + + if(g->obj_status & fractalexplorer_READONLY) + list_pix = fractalexplorer_new_pixmap(list,mini_cross_xpm); + else + list_pix = fractalexplorer_new_pixmap(list,bluedot_xpm); + + list_item = fractalexplorer_list_item_new_with_label_and_pixmap(g,g->draw_name,list_pix); + gtk_object_set_user_data (GTK_OBJECT (list_item), (gpointer)g); + gtk_list_append_items (GTK_LIST (list), g_list_append(NULL,list_item)); + + gtk_signal_connect(GTK_OBJECT(list_item), "button_press_event", + (GtkSignalFunc) list_button_press, + (gpointer)g); + gtk_widget_show (list_item); + + tmp = tmp->next; + } +} + +void +gradient_build_list_items(GtkWidget *list) +{ + GList *tmp = gradient_list; + GtkWidget *list_item; + GtkWidget *list_pix; + gradientOBJ *g; + + while(tmp) + { + g = tmp->data; + + if(g->obj_status & gradient_GRADIENTEDITOR) + list_pix = fractalexplorer_new_pixmap(list,greendot_xpm); + else + list_pix = fractalexplorer_new_pixmap(list,bluedot_xpm); + + list_item = gradient_list_item_new_with_label_and_pixmap(g,g->draw_name,list_pix); + gtk_object_set_user_data (GTK_OBJECT (list_item), (gpointer)g); + gtk_list_append_items (GTK_LIST (list), g_list_append(NULL,list_item)); + + gtk_signal_connect(GTK_OBJECT(list_item), "button_press_event", + (GtkSignalFunc) gradient_list_button_press, + (gpointer)g); + gtk_widget_show (list_item); + + tmp = tmp->next; + } +} + +/* + +static void +fractalexplorer_save_menu_callback(GtkWidget *widget, gpointer data) +{ + fractalexplorerOBJ * real_current = current_obj; + + current_obj = fractalexplorer_obj_for_menu; + + fractalexplorer_save(); + + current_obj = real_current; +} + +static void +fractalexplorer_load_menu_callback(GtkWidget *widget, gpointer data) +{ + dialog_change_scale(); + set_cmap_preview(); + dialog_update_preview(); +} + +static void +fractalexplorer_rename_menu_callback(GtkWidget *widget, gpointer data) +{ + create_file_selection(fractalexplorer_obj_for_menu,fractalexplorer_obj_for_menu->filename); +} + +static void +fractalexplorer_copy_menu_callback(GtkWidget *widget, gpointer data) +{ + gchar *new_name = g_malloc(strlen(fractalexplorer_obj_for_menu->draw_name) + 6); + + sprintf(new_name,msg[lng][MSG_COPYNAME],fractalexplorer_obj_for_menu->draw_name); + new_fractalexplorer_obj(new_name); + g_free(new_name); + + current_obj->opts = fractalexplorer_obj_for_menu->opts; + + update_draw_area(fractalexplorer_preview,NULL); + list_button_update(current_obj); +} + +*/ + + +/* + +static void +fractalexplorer_op_menu_create(GtkWidget *window) +{ + GtkWidget *menu_item; + GtkAcceleratorTable *accelerator_table; + + fractalexplorer_op_menu = gtk_menu_new(); + + accelerator_table = gtk_accelerator_table_new(); + gtk_menu_set_accelerator_table(GTK_MENU(fractalexplorer_op_menu), + accelerator_table); + gtk_window_add_accelerator_table(GTK_WINDOW(window),accelerator_table); + + save_menu_item = menu_item = gtk_menu_item_new_with_label(msg[lng][MSG_SAVE]); + gtk_menu_append(GTK_MENU(fractalexplorer_op_menu),menu_item); + gtk_widget_show(menu_item); + + gtk_signal_connect(GTK_OBJECT(menu_item),"activate", + (GtkSignalFunc)fractalexplorer_save_menu_callback, + NULL); + + gtk_widget_install_accelerator(menu_item, + accelerator_table, + "activate",'S',0); + + menu_item = gtk_menu_item_new_with_label(msg[lng][MSG_SAVEAS]); + gtk_menu_append(GTK_MENU(fractalexplorer_op_menu),menu_item); + gtk_widget_show(menu_item); + gtk_signal_connect(GTK_OBJECT(menu_item),"activate", + (GtkSignalFunc)fractalexplorer_rename_menu_callback, + NULL); + gtk_widget_install_accelerator(menu_item, + accelerator_table, + "activate",'A',0); + + menu_item = gtk_menu_item_new_with_label(msg[lng][MSG_COPY]); + gtk_menu_append(GTK_MENU(fractalexplorer_op_menu),menu_item); + gtk_widget_show(menu_item); + gtk_signal_connect(GTK_OBJECT(menu_item),"activate", + (GtkSignalFunc)fractalexplorer_copy_menu_callback, + NULL); + gtk_widget_install_accelerator(menu_item, + accelerator_table, + "activate",'C',0); + + menu_item = gtk_menu_item_new_with_label(msg[lng][MSG_LOAD]); + gtk_menu_append(GTK_MENU(fractalexplorer_op_menu),menu_item); + gtk_widget_show(menu_item); + gtk_signal_connect(GTK_OBJECT(menu_item),"activate", + (GtkSignalFunc)fractalexplorer_load_menu_callback, + NULL); + gtk_widget_install_accelerator(menu_item, + accelerator_table, + "activate",'L',0); + +} + + +static void +fractalexplorer_op_menu_popup(gint button, guint32 activate_time,fractalexplorerOBJ *obj) +{ + fractalexplorer_obj_for_menu = obj; + + if(obj->obj_status & fractalexplorer_READONLY) + { + gtk_widget_set_sensitive(save_menu_item,FALSE); + } + else + { + gtk_widget_set_sensitive(save_menu_item,TRUE); + } + + gtk_menu_popup(GTK_MENU(fractalexplorer_op_menu),NULL,NULL,NULL,NULL,button,activate_time); +} + +*/ + +static gint +list_button_press(GtkWidget *widget, + GdkEventButton *event, + gpointer data) +{ + + fractalexplorerOBJ * sel_obj; + + switch (event->type) + { + case GDK_BUTTON_PRESS: + /* + if(event->button == 3) + { + fractalexplorer_op_menu_popup(event->button,event->time,(fractalexplorerOBJ *)data); + return(FALSE); + } +*/ + list_button_update((fractalexplorerOBJ *)data); + break; + case GDK_2BUTTON_PRESS: + + sel_obj = (fractalexplorerOBJ *)data; + + if(sel_obj) { + current_obj=sel_obj; + wvals=current_obj->opts; + dialog_change_scale(); + set_cmap_preview(); + dialog_update_preview(); } +/* new_obj_2edit(sel_obj); */ + else + g_warning(msg[lng][MSG_NULLLIST]); + + break; + default: + printf(msg[lng][MSG_UNKNOWN_EVENT]); + break; + } + + return(FALSE); +} + + + +/* + * Query gimprc for fractalexplorer-path, and parse it. + * This code is based on script_fu_find_scripts () + * and the Gflare plugin. + */ + +void +plug_in_parse_fractalexplorer_path() +{ + GParam *return_vals; + gint nreturn_vals; + gchar *path_string; + gchar *home; + gchar *path; + gchar *token; + struct stat filestat; + gint err; + gchar buf[256]; + + if(fractalexplorer_path_list) + g_list_free(fractalexplorer_path_list); + + fractalexplorer_path_list = NULL; + + return_vals = gimp_run_procedure ("gimp_gimprc_query", + &nreturn_vals, + PARAM_STRING, "fractalexplorer-path", + PARAM_END); + + if (return_vals[0].data.d_status != STATUS_SUCCESS || return_vals[1].data.d_string == NULL) + { + g_warning(msg[lng][MSG_MISSING_GIMPRC]); + create_warn_dialog(msg[lng][MSG_MISSING_GIMPRC]); + + gimp_destroy_params (return_vals, nreturn_vals); + return; + } + + path_string = g_strdup (return_vals[1].data.d_string); + gimp_destroy_params (return_vals, nreturn_vals); + + /* Set local path to contain temp_path, where (supposedly) + * there may be working files. + */ + home = getenv ("HOME"); + + /* Search through all directories in the path */ + + token = strtok (path_string, ":"); + + while (token) + { + if (*token == '\0') + { + token = strtok (NULL, ":"); + continue; + } + + if (*token == '~') + { + path = g_malloc (strlen (home) + strlen (token) + 2); + sprintf (path, "%s%s", home, token + 1); + } + else + { + path = g_malloc (strlen (token) + 2); + strcpy (path, token); + } /* else */ + + /* Check if directory exists */ + err = stat (path, &filestat); + + if (!err && S_ISDIR (filestat.st_mode)) + { + if (path[strlen (path) - 1] != '/') + strcat (path, "/"); + + fractalexplorer_path_list = g_list_append (fractalexplorer_path_list, path); + } + else + { + sprintf(buf,msg[lng][MSG_WRONGPATH], path); + g_warning(buf); + create_warn_dialog(buf); + g_free (path); + } + token = strtok (NULL, ":"); + } + g_free (path_string); +} + + +void +fractalexplorer_free(fractalexplorerOBJ * fractalexplorer) +{ + g_assert (fractalexplorer != NULL); + + if(fractalexplorer->name) + g_free(fractalexplorer->name); + if(fractalexplorer->filename) + g_free(fractalexplorer->filename); + if(fractalexplorer->draw_name) + g_free(fractalexplorer->draw_name); + g_free (fractalexplorer); +} + +void +gradient_free(gradientOBJ * gradi) +{ + g_assert (gradi != NULL); + + if(gradi->name) + g_free(gradi->name); + if(gradi->filename) + g_free(gradi->filename); + if(gradi->draw_name) + g_free(gradi->draw_name); + g_free (gradi); +} + +void +fractalexplorer_free_everything(fractalexplorerOBJ * fractalexplorer) +{ + g_assert (fractalexplorer != NULL); + + if(fractalexplorer->filename) + { + remove(fractalexplorer->filename); + } + fractalexplorer_free(fractalexplorer); +} + +void +gradient_free_everything(gradientOBJ * gradi) +{ + g_assert (gradi != NULL); + + if(gradi->filename) + { + remove(gradi->filename); + } + gradient_free(gradi); +} + +void +fractalexplorer_list_free_all () +{ + GList * list; + fractalexplorerOBJ * fractalexplorer; + + list = fractalexplorer_list; + while (list) + { + fractalexplorer = (fractalexplorerOBJ *) list->data; + fractalexplorer_free (fractalexplorer); + list = list->next; + } + + g_list_free (fractalexplorer_list); + fractalexplorer_list = NULL; +} + +void +gradient_list_free_all () +{ + GList * list; + gradientOBJ * gradi; + + list = gradient_list; + while (list) + { + gradi = (gradientOBJ *) list->data; + gradient_free (gradi); + list = list->next; + } + + g_list_free (gradient_list); + gradient_list = NULL; +} + +fractalexplorerOBJ * +fractalexplorer_load (gchar *filename, gchar *name) +{ + fractalexplorerOBJ * fractalexplorer; + FILE * fp; + gchar load_buf[MAX_LOAD_LINE]; + + g_assert (filename != NULL); + fp = fopen (filename, "r"); + if (!fp) + { + g_warning (msg[lng][MSG_OPENERROR], filename); + return NULL; + } + + fractalexplorer = fractalexplorer_new(); + + fractalexplorer->name = g_strdup(name); + fractalexplorer->draw_name = g_strdup(name); + fractalexplorer->filename = g_strdup(filename); + + + /* HEADER + * draw_name + * version + * obj_list + */ + + get_line(load_buf,MAX_LOAD_LINE,fp,1); + + if(strncmp(fractalexplorer_HEADER,load_buf,strlen(load_buf))) + { + gchar err[256]; + sprintf(err,msg[lng][MSG_WRONGFILETYPE],fractalexplorer->filename); + create_warn_dialog(err); + fclose(fp); + return(NULL); + } + + if(load_options(fractalexplorer,fp)) + { + /* waste some mem */ + gchar err[256]; + sprintf(err, + msg[lng][MSG_CORRUPTFILE], + filename, + line_no); + create_warn_dialog(err); + fclose(fp); + return(NULL); + } + + fclose(fp); + + if(!pic_obj) + pic_obj = fractalexplorer; + + fractalexplorer->obj_status = fractalexplorer_OK; + + return(fractalexplorer); +} + + +gradientOBJ * +gradient_load (gchar *filename, gchar *name) +{ + gradientOBJ * gradi; + FILE * fp; + gchar load_buf[MAX_LOAD_LINE]; + + g_assert (filename != NULL); + + fp = fopen (filename, "r"); + if (!fp) + { + g_warning (msg[lng][MSG_OPENERROR], filename); + return NULL; + } + + gradi = gradient_new(); + + gradi->name = g_strdup(name); + gradi->draw_name = g_strdup(name); + gradi->filename = g_strdup(filename); + + + /* HEADER + * draw_name + * version + * obj_list + */ + + get_line(load_buf,MAX_LOAD_LINE,fp,1); + + if(strncmp(fractalexplorer_HEADER,load_buf,strlen(load_buf))) + { + gchar err[256]; + sprintf(err,msg[lng][MSG_WRONGFILETYPE],gradi->filename); + create_warn_dialog(err); + return(NULL); + } + +/* + if(gradient_load_options(gradient,fp)) + { + gchar err[256]; + sprintf(err, + msg[lng][MSG_CORRUPTFILE], + filename, + line_no); + create_warn_dialog(err); + return(NULL); + } +*/ + fclose(fp); + /* + if(!pic_obj) + pic_obj = fractalexplorer; + + fractalexplorer->obj_status = fractalexplorer_OK; +*/ + return(gradi); +} + +static void +fractalexplorer_rescan_file_selection_ok(GtkWidget *w, + GtkFileSelection *fs, + gpointer data) +{ + GtkWidget *list_item; + GtkWidget *lw = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(fs)); + gchar * filenamebuf; + struct stat filestat; + gint err; + + filenamebuf = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs)); + + err = stat(filenamebuf, &filestat); + + if (!S_ISDIR(filestat.st_mode)) + { + g_warning(msg[lng][MSG_NOTDIR],filenamebuf); + } + else + { + + list_item = gtk_list_item_new_with_label(filenamebuf); + gtk_widget_show(list_item); + + gtk_list_prepend_items(GTK_LIST(lw),g_list_append(NULL, list_item)); + + rescan_list = g_list_prepend(rescan_list,g_strdup(filenamebuf)); + } + + gtk_widget_destroy(GTK_WIDGET(fs)); +} + +void +fractalexplorer_list_load_all(GList *plist) +{ + fractalexplorerOBJ * fractalexplorer; + GList * list; + gchar * path; + gchar * filename; + DIR * dir; + struct dirent *dir_ent; + struct stat filestat; + gint err; + /* Make sure to clear any existing fractalexplorers */ + current_obj = pic_obj = NULL; + fractalexplorer_list_free_all (); + list = plist; + while (list) + { + path = list->data; + list = list->next; + + /* Open directory */ + dir = opendir (path); + + if (!dir) + g_warning(msg[lng][MSG_DIRREADERROR], path); + else + { + while ((dir_ent = readdir (dir))) + { + filename = g_malloc (strlen(path) + strlen (dir_ent->d_name) + 1); + + sprintf (filename, "%s%s", path, dir_ent->d_name); + + /* Check the file and see that it is not a sub-directory */ + err = stat (filename, &filestat); + + if (!err && S_ISREG (filestat.st_mode)) + { + + fractalexplorer = fractalexplorer_load (filename, dir_ent->d_name); + + if (fractalexplorer) + { + /* Read only ?*/ + if(access(filename,W_OK)) + fractalexplorer->obj_status |= fractalexplorer_READONLY; + + fractalexplorer_list_insert (fractalexplorer); + } + } + + g_free (filename); + } /* while */ + closedir (dir); + } /* else */ + } + + if(!fractalexplorer_list) + { + /* lets have at least one! */ + fractalexplorer = fractalexplorer_new(); + fractalexplorer->draw_name = g_strdup(msg[lng][MSG_FIRSTFRACTAL]); + fractalexplorer_list_insert(fractalexplorer); + } + pic_obj = current_obj = fractalexplorer_list->data; /* set to first entry */ + +} + +void +gradient_list_load_all(GList *plist) +{ + gradientOBJ * gradi; + GList * list; + gchar * path; + gchar * filename; + char **gradients=NULL; + DIR * dir; + struct dirent *dir_ent; + struct stat filestat; + gint err; + gint gradnumber=200,i; + /* Make sure to clear any existing gradients */ + gradient_list_free_all (); + list = plist; + while (list) + { + path = list->data; + list = list->next; + + /* Open directory */ + dir = opendir (path); + + if (!dir) + g_warning(msg[lng][MSG_DIRREADERROR], path); + else + { + while ((dir_ent = readdir (dir))) + { + filename = g_malloc (strlen(path) + strlen (dir_ent->d_name) + 1); + + sprintf (filename, "%s%s", path, dir_ent->d_name); + + /* Check the file and see that it is not a sub-directory */ + err = stat (filename, &filestat); + + if (!err && S_ISREG (filestat.st_mode)) + { + + gradi = gradient_load (filename, dir_ent->d_name); + + if (gradi) + { + gradient_list_insert (gradi); + } + } + + g_free (filename); + } /* while */ + closedir (dir); + } /* else */ + } + + gradients=gimp_gradients_get_list(&gradnumber); + for (i=0; i< gradnumber; i++) + { + gradi = gradient_new(); + gradi->name = gradi->draw_name = gradi->filename=gradients[i]; + if (gradi) + { + gradi->obj_status=gradient_GRADIENTEDITOR; + gradient_list_insert (gradi); + } + } + + if(!gradient_list) + { + /* lets have at least one! */ + gradi = gradient_new(); + gradi->draw_name = g_strdup("Gradient"); + gradient_list_insert(gradi); + } +/* pic_obj = current_obj = gradient_list->data; set to first entry */ +} + + +static GtkWidget * +add_objects_list () +{ + GtkWidget *table; + GtkWidget *frame; + GtkWidget *list_frame; + GtkWidget *scrolled_win; + GtkWidget *list; + GtkWidget *button; + + frame = gtk_frame_new(msg[lng][MSG_CHOOSE_FRACTAL]); + gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width(GTK_CONTAINER(frame), 10); + gtk_widget_show(frame); + + table = gtk_table_new (6, 4, FALSE); + gtk_container_border_width(GTK_CONTAINER(table), 10); + gtk_table_set_row_spacings(GTK_TABLE(table), 10); +/* gtk_table_set_col_spacings(GTK_TABLE(table), 10); */ + gtk_widget_show(table); + + delete_frame_to_freeze = list_frame = gtk_frame_new(NULL); + gtk_frame_set_shadow_type (GTK_FRAME (list_frame), GTK_SHADOW_ETCHED_IN); + gtk_widget_show(list_frame); + + scrolled_win = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_container_add (GTK_CONTAINER (list_frame), scrolled_win); + gtk_widget_show (scrolled_win); + + fractalexplorer_gtk_list = list = gtk_list_new (); + /* gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_MULTIPLE); */ + gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_BROWSE); + gtk_container_add (GTK_CONTAINER (scrolled_win), list); + gtk_widget_show (list); + /* Load saved objects */ + fractalexplorer_list_load_all(fractalexplorer_path_list); + /* Put list in */ + build_list_items(list); + + /* Put buttons in */ + button = gtk_button_new_with_label (msg[lng][MSG_RESCAN]); + gtk_widget_show(button); + gtk_signal_connect (GTK_OBJECT (button), "button_press_event", + (GtkSignalFunc) rescan_button_press, + NULL); + gtk_tooltips_set_tips(tips,button,msg[lng][MSG_RESCAN_COMMENT]); + gtk_table_attach(GTK_TABLE(table), button, 0, 1, 3, 4, GTK_FILL, GTK_FILL, 0, 0); + +/* + button = gtk_button_new_with_label (msg[lng][MSG_NEW]); + gtk_signal_connect (GTK_OBJECT (button), "button_press_event", + (GtkSignalFunc) new_button_press, + "My New Fractal"); + gtk_widget_show(button); + gtk_tooltips_set_tips(tips,button,msg[lng][MSG_NEW_COMMENT]); + gtk_table_attach(GTK_TABLE(table), button, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0); + + button = gtk_button_new_with_label (msg[lng][MSG_RENAME]); + gtk_widget_show(button); + gtk_signal_connect (GTK_OBJECT (button), "button_press_event", + (GtkSignalFunc) rename_button_press, + (gpointer) list); + gtk_tooltips_set_tips(tips,button,msg[lng][MSG_RENAME_COMMENT]); + gtk_table_attach(GTK_TABLE(table), button, 2, 3, 2, 3, GTK_FILL, GTK_FILL, 0, 0); +*/ + + button = gtk_button_new_with_label (msg[lng][MSG_DEL]); + gtk_signal_connect (GTK_OBJECT (button), "button_press_event", + (GtkSignalFunc) fractalexplorer_delete_fractalexplorer_callback, + (gpointer)list); + gtk_widget_show(button); + gtk_tooltips_set_tips(tips,button,msg[lng][MSG_DELETE_COMMENT]); + gtk_table_attach(GTK_TABLE(table), button, 1, 2, 3, 4, GTK_FILL, GTK_FILL, 0, 0); + + /* Attach the frame for the list Show the widgets */ + + gtk_table_attach(GTK_TABLE(table), list_frame, 0, 2, 0, 3, GTK_FILL|GTK_EXPAND , GTK_FILL|GTK_EXPAND, 0, 0); + + cmap_preview_long = gtk_preview_new(GTK_PREVIEW_COLOR); + gtk_preview_size(GTK_PREVIEW(cmap_preview_long), GR_WIDTH, 32); + gtk_table_attach(GTK_TABLE(table), cmap_preview_long, 0, 2, 4, 5, GTK_FILL|GTK_EXPAND , GTK_FILL|GTK_EXPAND, 0, 0); + gtk_widget_show(cmap_preview_long); + + gtk_container_add (GTK_CONTAINER (frame), table); + return (frame); +} + + + +static GtkWidget * +add_gradients_list () +{ + GtkWidget *table; + GtkWidget *frame; + GtkWidget *list_frame; + GtkWidget *scrolled_win; + GtkWidget *list; + + frame = gtk_frame_new(msg[lng][MSG_CHOOSE_GRADIENT]); + gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width(GTK_CONTAINER(frame), 10); + gtk_widget_show(frame); + + table = gtk_table_new (6, 4, FALSE); + + gtk_container_border_width(GTK_CONTAINER(table), 10); + gtk_table_set_row_spacings(GTK_TABLE(table), 10); +/* gtk_table_set_col_spacings(GTK_TABLE(table), 10); */ + gtk_widget_show(table); + + list_frame = gtk_frame_new(NULL); + gtk_frame_set_shadow_type (GTK_FRAME (list_frame), GTK_SHADOW_ETCHED_IN); + gtk_widget_show(list_frame); + + scrolled_win = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_container_add (GTK_CONTAINER (list_frame), scrolled_win); + gtk_widget_show (scrolled_win); + + list = gtk_list_new (); + gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_BROWSE); + gtk_container_add (GTK_CONTAINER (scrolled_win), list); + gtk_widget_show (list); + /* Load saved objects */ + + gradient_list_load_all(fractalexplorer_path_list); + /* Put list in */ + gradient_build_list_items(list); + + /* Put buttons in + button = gtk_button_new_with_label (msg[lng][MSG_RESCAN]); + gtk_widget_show(button); + gtk_signal_connect (GTK_OBJECT (button), "button_press_event", + (GtkSignalFunc) rescan_button_press, + NULL); + gtk_tooltips_set_tips(tips,button,msg[lng][MSG_RESCAN_COMMENT]); + gtk_table_attach(GTK_TABLE(table), button, 2, 3, 0, 1, GTK_FILL, GTK_FILL, 0, 0); + */ + + /* Attach the frame for the list Show the widgets */ + + gtk_table_attach(GTK_TABLE(table), list_frame, 0, 3, 0, 4, GTK_FILL|GTK_EXPAND , GTK_FILL|GTK_EXPAND, 1, 1); + + cmap_preview_long2 = gtk_preview_new(GTK_PREVIEW_COLOR); + gtk_preview_size(GTK_PREVIEW(cmap_preview_long2), GR_WIDTH, 32); + gtk_table_attach(GTK_TABLE(table), cmap_preview_long2, 0, 3, 4, 5, GTK_FILL|GTK_EXPAND , GTK_FILL|GTK_EXPAND, 1, 1); + gtk_widget_show(cmap_preview_long2); + + gtk_container_add (GTK_CONTAINER (frame), table); + return (frame); +} + + + +static void +fractalexplorer_rescan_ok_callback (GtkWidget *w, + gpointer client_data) +{ + GList *list; + + list = rescan_list; + while (list) + { + list = list->next; + } + list = fractalexplorer_path_list; + while (list) + { + rescan_list = g_list_append(rescan_list,g_strdup(list->data)); + list = list->next; + } + clear_list_items(GTK_LIST(fractalexplorer_gtk_list)); + fractalexplorer_list_load_all(rescan_list); + build_list_items(fractalexplorer_gtk_list); + list_button_update(current_obj); + gtk_widget_destroy (GTK_WIDGET (client_data)); +} + + +static void +fractalexplorer_rescan_add_entry_callback (GtkWidget *w, + gpointer client_data) +{ + static GtkWidget *window = NULL; + + /* Call up the file sel dialouge */ + window = gtk_file_selection_new (msg[lng][MSG_ADDPATH]); + gtk_window_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE); + gtk_object_set_user_data(GTK_OBJECT(window),(gpointer)client_data); + + + gtk_signal_connect (GTK_OBJECT (window), "destroy", + (GtkSignalFunc) destroy_window, + &window); + + gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (window)->ok_button), + "clicked", (GtkSignalFunc) fractalexplorer_rescan_file_selection_ok, + (gpointer)window); + + gtk_signal_connect_object(GTK_OBJECT (GTK_FILE_SELECTION (window)->cancel_button), + "clicked", (GtkSignalFunc) gtk_widget_destroy, + GTK_OBJECT(window)); + gtk_widget_show(window); +} + + +static void +fractalexplorer_rescan_list (void) +{ + GtkWidget *vbox; + GtkWidget *button; + GtkWidget *dlg; + GtkWidget *list_frame; + GtkWidget *scrolled_win; + GtkWidget *list_widget; + GList *list; + + /* the dialog */ + dlg = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (dlg), msg[lng][MSG_RESCANTITLE1]); + gtk_window_position (GTK_WINDOW (dlg), GTK_WIN_POS_MOUSE); + + /* the main vbox */ + vbox = gtk_vbox_new (FALSE, 1); + gtk_container_border_width (GTK_CONTAINER (vbox), 2); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), vbox, TRUE, TRUE, 0); + + /* path list */ + list_frame = gtk_frame_new(NULL); + gtk_frame_set_shadow_type (GTK_FRAME (list_frame), GTK_SHADOW_ETCHED_IN); + gtk_widget_show(list_frame); + + scrolled_win = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_container_add (GTK_CONTAINER (list_frame), scrolled_win); + gtk_widget_show (scrolled_win); + + list_widget = gtk_list_new (); + gtk_list_set_selection_mode (GTK_LIST (list_widget), GTK_SELECTION_BROWSE); + gtk_container_add (GTK_CONTAINER (scrolled_win), list_widget); + gtk_widget_show (list_widget); + gtk_box_pack_start (GTK_BOX (vbox), list_frame, TRUE, TRUE, 0); + + list = fractalexplorer_path_list; + while (list) + { + GtkWidget *list_item; + list_item = gtk_list_item_new_with_label(list->data); + gtk_widget_show(list_item); + gtk_container_add (GTK_CONTAINER (list_widget), list_item); + list = list->next; + } + + button = gtk_button_new_with_label (msg[lng][MSG_OK]); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + (GtkSignalFunc)fractalexplorer_rescan_ok_callback, + (gpointer)dlg); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->action_area), button, TRUE, TRUE, 0); + gtk_widget_grab_default (button); + gtk_widget_show (button); + + /* Clear the old list out */ + if((list = rescan_list)) + { + while (list) + { + g_free(list->data); + list = list->next; + } + + g_list_free(rescan_list); + rescan_list = NULL; + } + + button = gtk_button_new_with_label (msg[lng][MSG_ADDDIR]); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + (GtkSignalFunc)fractalexplorer_rescan_add_entry_callback, + (gpointer)list_widget); + + gtk_object_set_user_data(GTK_OBJECT(dlg),(gpointer)list_widget); + + + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->action_area), button, TRUE, TRUE, 0); + gtk_widget_show (button); + + button = gtk_button_new_with_label (msg[lng][MSG_CANCEL]); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + (GtkSignalFunc)fractalexplorer_rescan_cancel_callback, + (gpointer)dlg); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->action_area), button, TRUE, TRUE, 0); + gtk_widget_show (button); + + gtk_widget_show (vbox); + gtk_widget_show (dlg); +} + + +static gint +rescan_button_press(GtkWidget *widget, + GdkEventButton *event, + gpointer data) +{ + fractalexplorer_rescan_list(); + return(FALSE); +} + + +static gint +delete_button_press_ok(GtkWidget *widget, + gpointer data) +{ + gint pos; + GList * sellist; + fractalexplorerOBJ * sel_obj; + GtkWidget *list = (GtkWidget *)data; + + /* Must update which object we are editing */ + /* Get the list and which item is selected */ + /* Only allow single selections */ + + sellist = GTK_LIST(list)->selection; + + sel_obj = (fractalexplorerOBJ *)gtk_object_get_user_data(GTK_OBJECT((GtkWidget *)(sellist->data))); + + pos = gtk_list_child_position(GTK_LIST(fractalexplorer_gtk_list),sellist->data); + + /* Delete the current item + asssociated file */ + gtk_list_clear_items(GTK_LIST (fractalexplorer_gtk_list),pos,pos+1); + /* Shadow copy for ordering info */ + fractalexplorer_list = g_list_remove(fractalexplorer_list,sel_obj); +/* + if(sel_obj == current_obj) + { + clear_undo(); + } +*/ + /* Free current obj */ + fractalexplorer_free_everything(sel_obj); + + + /* Select previous one */ + pos--; + + if(pos < 0 && g_list_length(fractalexplorer_list) == 0) + { + /* Warning - we have a problem here + * since we are not really "creating an entry" + * why call fractalexplorer_new? + */ + new_button_press(NULL,NULL,NULL); + pos = 0; + } + + gtk_widget_destroy(delete_dialog); + gtk_widget_set_sensitive(delete_frame_to_freeze,TRUE); + + delete_dialog = NULL; + + gtk_list_select_item(GTK_LIST(fractalexplorer_gtk_list), pos); + + current_obj = g_list_nth(fractalexplorer_list,pos)->data; + + /* + draw xxxxxxxxxxxxxxxx + update_draw_area(fractalexplorer_preview,NULL); + */ + + list_button_update(current_obj); + + + return(FALSE); +} diff --git a/plug-ins/FractalExplorer/FractalExplorer.h b/plug-ins/FractalExplorer/FractalExplorer.h new file mode 100644 index 0000000000..35be64715f --- /dev/null +++ b/plug-ins/FractalExplorer/FractalExplorer.h @@ -0,0 +1,357 @@ +/********************************************************************** + Magic numbers + *********************************************************************/ + +#define PREVIEW_SIZE 128 +#define SCALE_WIDTH 200 +#define ENTRY_WIDTH 60 +#define MAX_LOAD_LINE 256 +#define GR_WIDTH 325 + +#define SINUS 0 +#define COSINUS 1 +#define NONE 2 + +#define FRACTAL_HEADER "Fractal Explorer Plug-In Version 2 - (c) 1997 \n" +#define fractalexplorer_HEADER "Fractal Explorer Plug-In Version 2 - (c) 1997 \n" + +/********************************************************************** + Types + *********************************************************************/ + +typedef struct { + gint fractaltype; + gdouble xmin; + gdouble xmax; + gdouble ymin; + gdouble ymax; + gdouble iter; + gdouble cx; + gdouble cy; + gint colormode; + gdouble redstretch; + gdouble greenstretch; + gdouble bluestretch; + gint redmode; + gint greenmode; + gint bluemode; + gint redinvert; + gint greeninvert; + gint blueinvert; + gint alwayspreview; + gint language; + +} explorer_vals_t; + +typedef struct { + GtkWidget *preview; + guchar *wimage; + gint run; +} explorer_interface_t; + +typedef int clrmap[256][3]; + +typedef struct { + GtkWidget *text; + GtkAdjustment *data; +} scaledata; + +typedef struct _DialogElements DialogElements; + + +struct _DialogElements { + GtkWidget *type_mandelbrot; + GtkWidget *type_julia; + GtkWidget *type_barnsley1; + GtkWidget *type_barnsley2; + GtkWidget *type_barnsley3; + GtkWidget *type_spider; + GtkWidget *type_manowar; + GtkWidget *type_lambda; + GtkWidget *type_sierpinski; + scaledata xmin; + scaledata xmax; + scaledata ymin; + scaledata ymax; + scaledata iter; + scaledata cx; + scaledata cy; + scaledata red; + scaledata green; + scaledata blue; + GtkWidget *redmodecos; + GtkWidget *redmodesin; + GtkWidget *redmodenone; + GtkWidget *greenmodecos; + GtkWidget *greenmodesin; + GtkWidget *greenmodenone; + GtkWidget *bluemodecos; + GtkWidget *bluemodesin; + GtkWidget *bluemodenone; + GtkWidget *redinvert; + GtkWidget *greeninvert; + GtkWidget *blueinvert; + GtkWidget *colormode0; + GtkWidget *colormode1; +}; + + +typedef struct DFigObj { + gchar * name; /* Trailing name of file */ + gchar * filename; /* Filename itself */ + gchar * draw_name;/* Name of the drawing */ + explorer_vals_t opts; /* Options enforced when fig saved */ + GtkWidget *list_item; + GtkWidget *label_widget; + GtkWidget *pixmap_widget; + gint obj_status; +} fractalexplorerOBJ; + + +typedef struct GigObj { + gchar * name; /* Trailing name of file */ + gchar * filename; /* Filename itself */ + gchar * draw_name;/* Name of the drawing */ + gint typus; + GtkWidget *list_item; + GtkWidget *label_widget; + GtkWidget *pixmap_widget; + gint obj_status; +} gradientOBJ; + +typedef struct _fractalexplorerListOptions { + GtkWidget *query_box; + GtkWidget *name_entry; + GtkWidget *list_entry; + fractalexplorerOBJ * obj; + gint created; +} fractalexplorerListOptions; + +/* States of the object */ +#define fractalexplorer_OK 0x0 +#define fractalexplorer_MODIFIED 0x1 +#define fractalexplorer_READONLY 0x2 + +#define gradient_GRADIENTEDITOR 0x2 + +static fractalexplorerOBJ *current_obj; +static fractalexplorerOBJ *pic_obj; +static GtkWidget *delete_dialog = NULL; + + + +/********************************************************************** + Declare local functions + *********************************************************************/ + +/* Gimp interface functions */ +static void query(void); +static void run(char *name, int nparams, GParam * param, int *nreturn_vals, + GParam ** return_vals); + +/* Dialog and fractal functions */ +void explorer(GDrawable * drawable); +void explorer_render_row(const guchar * src_row, guchar * dest_row, gint row, + gint row_width, gint bytes); +void transform(short int *, short int *, short int *, double, double, double); +gint explorer_dialog(void); +void dialog_update_preview(void); + +/* Functions for dialog widgets */ +void dialog_create_value(char *title, GtkTable * table, int row, gdouble * value, + int left, int right, const char *desc, scaledata * scalevalues); +void dialog_scale_update(GtkAdjustment * adjustment, gdouble * value); +void dialog_create_int_value(char *title, GtkTable * table, int row, gdouble * value, + int left, int right, const char *desc, scaledata * scalevalues); +void dialog_scale_int_update(GtkAdjustment * adjustment, gdouble * value); +void dialog_entry_update(GtkWidget * widget, gdouble * value); +void dialog_close_callback(GtkWidget * widget, gpointer data); +void dialog_ok_callback(GtkWidget * widget, gpointer data); +void dialog_cancel_callback(GtkWidget * widget, gpointer data); +void dialog_step_out_callback(GtkWidget * widget, gpointer data); +void dialog_step_in_callback(GtkWidget * widget, gpointer data); +void dialog_undo_zoom_callback(GtkWidget * widget, gpointer data); +void dialog_redo_zoom_callback(GtkWidget * widget, gpointer data); +void dialog_redraw_callback(GtkWidget * widget, gpointer data); +void dialog_reset_callback(GtkWidget * widget, gpointer data); +GtkWidget *explorer_logo_dialog(); +GtkWidget *explorer_load_dialog(); +void explorer_toggle_update(GtkWidget * widget, gpointer data); +void set_tooltip(GtkTooltips * tooltips, GtkWidget * widget, const char *desc); +void dialog_change_scale(void); +void set_cmap_preview(void); +void make_color_map(void); +void create_file_selection(); +void create_load_file_selection(); +void explorer_load(); +void load_button_press(GtkWidget * widget, gpointer data); + +/* Preview events */ +gint preview_button_press_event(GtkWidget * widget, GdkEventButton * event); +gint preview_button_release_event(GtkWidget * widget, GdkEventButton * event); +gint preview_motion_notify_event(GtkWidget * widget, GdkEventButton * event); +gint preview_leave_notify_event(GtkWidget * widget, GdkEventButton * event); +gint preview_enter_notify_event(GtkWidget * widget, GdkEventButton * event); + + + +static gint list_button_press(GtkWidget *widget,GdkEventButton *event,gpointer data); +static gint new_button_press(GtkWidget *widget,GdkEventButton *bevent,gpointer data); +static gint fractalexplorer_delete_fractalexplorer_callback(GtkWidget *widget,GdkEventButton *bevent,gpointer data); +static gint delete_button_press_ok(GtkWidget *widget,gpointer data); +static gint rescan_button_press(GtkWidget *widget,GdkEventButton *bevent,gpointer data); +static void fractalexplorer_list_ok_callback (GtkWidget *w, gpointer client_data); +static void fractalexplorer_list_cancel_callback (GtkWidget *w, gpointer client_data); +static void fractalexplorer_dialog_edit_list (GtkWidget *lwidget,fractalexplorerOBJ *obj,gint created); +static GtkWidget *new_fractalexplorer_obj(gchar * name); +static void fractalexplorer_rescan_cancel_callback (GtkWidget *w, gpointer client_data); +void clear_list_items(GtkList *list); +gint fractalexplorer_list_pos(fractalexplorerOBJ *fractalexplorer); +gint fractalexplorer_list_insert (fractalexplorerOBJ *fractalexplorer); +GtkWidget* fractalexplorer_list_item_new_with_label_and_pixmap (fractalexplorerOBJ *obj, gchar *label, GtkWidget *pix_widget); +GtkWidget* fractalexplorer_new_pixmap(GtkWidget *list, char **pixdata); +static GtkWidget *fractalexplorer_list_add(fractalexplorerOBJ *obj); +void list_button_update(fractalexplorerOBJ *obj); +fractalexplorerOBJ *fractalexplorer_new(void); +void build_list_items(GtkWidget *list); +/* +static void fractalexplorer_op_menu_popup(gint button, guint32 activate_time,fractalexplorerOBJ *obj); +*/ +void plug_in_parse_fractalexplorer_path(); +void fractalexplorer_free(fractalexplorerOBJ * fractalexplorer); +void fractalexplorer_free_everything(fractalexplorerOBJ * fractalexplorer); +void fractalexplorer_list_free_all (); +fractalexplorerOBJ *fractalexplorer_load (gchar *filename, gchar *name); +static void fractalexplorer_rescan_file_selection_ok(GtkWidget *w, GtkFileSelection *fs, gpointer data); +void fractalexplorer_list_load_all(GList *plist); +static GtkWidget *add_objects_list (); +static GtkWidget *add_gradients_list (); +static void fractalexplorer_rescan_ok_callback (GtkWidget *w, gpointer client_data); +static void fractalexplorer_rescan_add_entry_callback (GtkWidget *w, gpointer client_data); +static void fractalexplorer_rescan_list (void); +/* +static void fractalexplorer_op_menu_create(GtkWidget *window); +*/ + + +/********************************************************************** + Global variables + *********************************************************************/ + +double xmin = -2, + xmax = 1, + ymin = -1.5, + ymax = 1.5; +double xbild, + ybild, + xdiff, + ydiff; +double x_press = -1.0, + y_press = -1.0; +double x_release = -1.0, + y_release = -1.0; +float cx = -0.75; +float cy = -0.2; +GDrawable *drawable; +gint tile_width, + tile_height; +gint img_width, + img_height, + img_bpp; +gint sel_x1, + sel_y1, + sel_x2, + sel_y2; +gint sel_width, + sel_height; +gint preview_width, + preview_height; +GTile *the_tile = NULL; +double cen_x, + cen_y; +double xpos, + ypos, + oldxpos = -1, + oldypos = -1; +gint do_redsinus, + do_redcosinus, + do_rednone; +gint do_greensinus, + do_greencosinus, + do_greennone; +gint do_bluesinus, + do_bluecosinus, + do_bluenone; +gint do_redinvert, + do_greeninvert, + do_blueinvert; +gint do_colormode1 = FALSE, + do_colormode2 = FALSE; +gint do_type0 = FALSE, + do_type1 = FALSE, + do_type2 = FALSE, + do_type3 = FALSE, + do_type4 = FALSE, + do_type5 = FALSE, + do_type6 = FALSE, + do_type7 = FALSE, + do_type8 = FALSE, + do_english = TRUE, + do_french = FALSE, + do_german = FALSE; +GtkWidget *maindlg; +GtkWidget *logodlg; +GtkWidget *loaddlg; +GtkWidget *cmap_preview; +GtkWidget *cmap_preview_long; +GtkWidget *cmap_preview_long2; +GtkWidget *delete_frame_to_freeze; +GtkWidget *fractalexplorer_gtk_list; +GtkWidget *save_menu_item; +GtkWidget *fractalexplorer_op_menu; +GtkTooltips *tips; +GdkColor tips_fg, + tips_bg; +GdkCursor *MyCursor; +int ready_now = FALSE; +explorer_vals_t zooms[100]; +DialogElements *elements = NULL; +int zoomindex = 1; +int zoommax = 1; +gdouble *gg; +int line_no; +gchar *filename; +clrmap colormap; +GList *fractalexplorer_path_list = NULL; +GList *fractalexplorer_list = NULL; +GList *gradient_list = NULL; +gchar *tpath = NULL; +fractalexplorerOBJ *fractalexplorer_obj_for_menu; +static GList *rescan_list = NULL; +int lng=LNG_GERMAN; + + +GPlugInInfo PLUG_IN_INFO = +{ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ +}; + +explorer_interface_t wint = +{ + NULL, /* preview */ + NULL, /* wimage */ + FALSE /* run */ +}; /* wint */ + +static explorer_vals_t wvals = +{ + 0, -2.0, 2.0, -1.5, 1.5, 50.0, -0.75, -0.2, 0, 128.0, 128.0, 128.0, 1, 1, 0, 0, 0, 0, 1, 0, +}; /* wvals */ + +static explorer_vals_t standardvals = +{ + 0, -2.0, 2.0, -1.5, 1.5, 50.0, -0.75, -0.2, 0, 128.0, 128.0, 128.0, 1, 1, 0, 0, 0, 0, 1, 0, +}; /* standardvals */ diff --git a/plug-ins/FractalExplorer/INSTALL b/plug-ins/FractalExplorer/INSTALL new file mode 100644 index 0000000000..a55f1675a5 --- /dev/null +++ b/plug-ins/FractalExplorer/INSTALL @@ -0,0 +1,89 @@ +------------------------------------------- + GIMP-Plug-In +------------------------------------------- + Written by Daniel Cotting + Bahnhofstrasse 31 + CH-3066 Stettlen (Switzerland) + + cotting@mygale.org + www.mygale.org/~cotting +------------------------------------------- + Some code is taken out of other plug-ins + written by other authors. +------------------------------------------- + + +------------------------------------------- + INSTALLATION +------------------------------------------- + To install it, you have to edit the + Makefile (change install-path). + Afterwards run make. This will compile + and install the plug-in in the right + directory. Once the new code is installed, + you can run the GIMP and enjoy the new + functions and effects it provides. + + Note that this plug-in has some sample + files which must be installed in one of + the following directories: + + ~/.gimp/fractalexplorer + /usr/local/share/gimp/0.99.XX/fractalexplorer + + You can find the sample files in the + subdirectory fractalexplorer-examples + of this distribution. + + You will have to add the following lines + to your gimprc file (usually + /usr/local/ share/gimp/0.99.XX/gimprc): + + # fractalexplorer directory + (fractalexplorer-path "${gimp_data_dir}/fractalexplorer:${gimp_dir}/fractalexplorer") + +------------------------------------------- + + +------------------------------------------- + REDUCE CODE SIZE +------------------------------------------- + If you find that the plug-in is too big, + you can compress the executables with the + gzexe program (if it is avaiable on your + system). To do so, change to the plug-in + directory of the GIMP... + + cd /usr/local/lib/gimp/VERSION/plug-ins + + ...and execute the command... + + gzexe PLUGIN_NAME + + ...and remember to remove the uncompres- + sed binary, which has been renamed to + PLUGIN_NAME~, by running the command: + + rm PLUGIN_NAME~ + + This will result in a code size of about + 50 kB, which isn't too much IMHO. +------------------------------------------ + + +------------------------------------------ + FEEDBACK +------------------------------------------ + I'm interested in any feedback, comments, + bug-reports, suggestions etc. If you + have anything you would like to tell + me, you can write to cotting@mygale.org. + Also have a look at the GIMP-section of + my homepage at www.mygale.org/~cotting. +------------------------------------------ + + Thank you and happy GIMPing! + Daniel Cotting + +------------------------------------------ + \ No newline at end of file diff --git a/plug-ins/FractalExplorer/Languages.h b/plug-ins/FractalExplorer/Languages.h new file mode 100644 index 0000000000..fc6a758bd3 --- /dev/null +++ b/plug-ins/FractalExplorer/Languages.h @@ -0,0 +1,566 @@ +static char * msg[4][104] = +{ + +/* English messages */ +{ + "OK", + "Cancel", + "Delete fractal", + "Are you sure you want to delete", + "\"%s\" from the list and from disk?", + "Delete", + "Error opening: %s", + "File '%s' Not a FractalExplorer file", + "File '%s' corrupt file - Line %d Option section incorrect", + "Internal error - list item has null object!", + "Unknown event\n", + "Edit fractal name", + "Fractal name:", + "New fractal", + "%s [copy]", + "Save", + "Save as...", + "Copy", + "Load", + "No fractalexplorer-path in gimprc:\n" + "You need to add an entry like\n" + "(fractalexplorer-path \"${gimp_dir}/fractalexplorer:${gimp_data_dir}/fractalexplorer\n" + "to your ~/.gimprc/gimprc file\n", + "fractalexplorer-path miss-configured - \nPath `%.100s' not found\n", + "Entry %.100s is not a directory\n", + "error reading fractalexplorer directory \"%s\"", + "My first fractal", + "Choose fractal by double-clicking on it", + "Rescan", + "Select directory and rescan collection", + "New", + "Create a new fractal for editing", + "Rename", + "Rename fractal in list", + "Delete currently selected fractal", + "Choose gradient by double-clicking on it", + "Add FractalExplorer path", + "Rescan for fractals", + "Add dir", + "Parameters", + "Parameters", + "Change the first (minimal) x-coordinate delimitation", + "Change the second (maximal) x-coordinate delimitation", + "Change the first (minimal) y-coordinate delimitation", + "Change the second (maximal) y-coordinate delimitation", + "Change the iteration value. The higher it is, the more details will be calculated, which will take more time.", + "Change the CX value (changes aspect of fractal, active with every fractal but Mandelbrot and Sierpinski)", + "Change the CY value (changes aspect of fractal, active with every fractal but Mandelbrot and Sierpinski)", + "Reset parameters to default values", + "Load a fractal from file", + "Save active fractal to file", + "Fractal type", + "Options", + "Reset to default values", + "Preview options", + "Realtime preview", + "If you enable this option the preview will be redrawn automatically.", + "Redraw", + "Redraw preview", + "Zoom options", + "Undo zoom", + "Undo last zoom", + "Redo zoom", + "Redo last zoom", + "Step in", + "Step out", + "Colors", + "Color density", + "Red", + "Green", + "Blue", + "Change the intensity of the red channel", + "Change the intensity of the green channel", + "Change the intensity of the blue channel", + "Color function", + "Sine", + "Cosine", + "None", + "Use sine-function for this color component", + "Use cosine-function for this color component", + "Use linear mapping instead of any trigonometrical function for this color channel", + "Inversion", + "If you enable this option higher color values will be swapped with lower ones and vice versa.", + "Color mode", + "As specified above", + "Create a color-map with the options you specified above (color density/function). The result is visible in the preview image", + "Apply active gradient to final image", + "Create a color-map using a gradient from the gradient editor.", + "Gradients", + "Fractals", + "Accept settings and start the calculation of the fractal", + "Discard any changes and close dialog box", + "About", + "Show information about the plug-in and the author", + "This will close the information box", + "Error opening '%.100s' could not save", + "Failed to write file\n", + "Save: No filename given", + "Save: Can't save to a directory", + "Load fractal parameters", + "Click here to load your file.", + "Click here to cancel load procedure.", + "Save fractal parameters", + "Click here to save your file.", + "Click here to cancel save procedure.", + "Save settings", + "This saves the currently selected language to the configuration file", +}, + + +/* Messages en français */ +{ + "Accepter", + "Annuler", + "Effacer fractal", + "Etes-vous sur de vouloir effacer le fichier", + "\"%s\" de la liste est du disque?", + "Effacer", + "Erreur lors de l'ouverture du fichier: %s", + "Le fichier '%s' ne correspond pas au format FractalExplorer!", + "Le fichier '%s' est corrompu - Ligne %d incorrecte.", + "Erreur interne - l'élément de la liste contient un objet NULL!", + "Evénement inconnu.\n", + "Changer le nom du fractal", + "Nom du fractal:", + "Nouveau fractal", + "%s [copie]", + "Enregistrer", + "Enregistrer sous...", + "Copier", + "Charger", + "Aucun répertoire FractalExplorer inscrit dans gimprc:\n" + "Vous devez aujouter une ligne telle que\n" + "(fractalexplorer-path \"${gimp_dir}/fractalexplorer:${gimp_data_dir}/fractalexplorer\n" + "dans votre fichier ~/.gimprc/gimprc\n", + "fractalexplorer-path n'est pas configuré correctement - \nDossier `%.100s' introuvable.\n", + "L'entrée %.100s n'est pas un répertoire.\n", + "Erreur lors de la lecture du répertoire \"%s\".", + "Mon premier fractal", + "Choisissez un fractal en double-cliquant sur celui-ci", + "Rafraîchir", + "Choix du répertoire et rechargement de la collection.", + "Nouveau", + "Créer nouveau fractal.", + "Renommer", + "Renommer le fractal contenu dans la liste.", + "Efface le fractal actuellement selectioné dans la liste.", + "Choisissez un dégradé de couleurs avec un double-click", + "Ajouter un dossier FractalExplorer.", + "Rechargement de nouveaux fractals.", + "Ajout de répertoires", + "Paramètres", + "Paramètres", + "Change la première delimitation de l'axe x (delimitation minimale de x).", + "Change la deuxième delimitation de l'axe x (delimitation maximale de x).", + "Change la première delimitation de l'axe y (delimitation minimale de y).", + "Change la deuxième delimitation de l'axe y (delimitation maximale de y).", + "Change la valeur d'iteration. Une valeur plus haute rend l'image plus detailée, mais utilise plus de temps de calcul.", + "Change la valeur CX (cela change l'aspect du fractal; l'option n'est pas active pour les types de fractal Mandelbrot and Sierpinski).", + "Change la valeur CY (cela change l'aspect du fractal; l'option n'est pas active pour les types de fractal Mandelbrot and Sierpinski).", + "Remets tous les paramètres à leur valeur par défaut.", + "Charge un fractal à partir d'un fichier.", + "Enregistre un fractal dans un fichier.", + "Type de fractal", + "Configuration", + "Valeurs par défaut", + "Prévisualisation", + "En temps réel", + "Si vous activez cette option, la fenêtre de prévisualisation sera automatiquement rafraîchie après chaque changement d'option.", + "Actualiser", + "Actualise et redessine la prévisualisation.", + "Options de zoom", + "Annuler zoom", + "Ceci annule le dernier zoom.", + "Refaire zoom", + "Ceci annule la dernière annulation du zoom.", + "Se rapprocher", + "S'éloigner", + "Couleurs", + "Densité des valeurs RVB d'une couleur", + "Rouge", + "Vert", + "Bleu", + "Change l'intensité du canal rouge.", + "Change l'intensité du canal vert.", + "Change l'intensité du canal bleu.", + "Fonctions appliqués aux canaux RVB", + "Sinus", + "Cosinus", + "Aucun", + "Utilise la fonction trigonométrique 'sinus' pour le calcul de cette composante de couleur.", + "Utilise la fonction trigonométrique 'cosinus' pour le calcul de cette composante de couleur.", + "Utilise une fonction linéaire au lieu d'une fonction trigonométrique pour ce canal.", + "Inversion", + "En activant cette option, vous assignez de grandes valeurs de couleurs aux couleurs ayant reçu des valeurs petites et vice versa.", + "Mode de couleur", + "Comme specifié ci-dessus", + "Crée une palette de couleur en utilisant les options que vous avez choisies ci-dessus (densité/fonction). Le résultat est visible dans l'image de prévisualisation.", + "Applique le dégradé de couleur actif", + "Crée une palette en utilisant le dégradé de couleur du 'Gradient Editor'.", + "Dégradés", + "Fractals", + "Accepte les options et démarre la calculation du fractal.", + "Rejette tout changement et ferme la boîte de dialogue.", + "Info...", + "Affiche des informations concernant l'auteur et le plug-in.", + "Ceci fermera la boîte de dialogue d'info.", + "Erreur lors de l'ouverture de '%.100s'. Sauvegarde echouée.", + "Ecriture du fichier impossible.\n", + "Enregistrement: Aucun fichier specifié.", + "Enregistrement: Impossible de sauvegarder dans un répertoire.", + "Chargement des paramètres d'un fractal", + "Cliquez ici afin de charger un fichier FractalExplorer.", + "Cliquez ici pour interrompre la procédure de chargement.", + "Enregistrement des paramètres d'un fractal", + "Cliquez ici pour charger votre fichier.", + "Cliquez ici pour imterropre la procédure d'enregistrement.", + "Enregistrer langue", + "Ceci enregistre la langue actuelle dans le fichier de configuration.", +}, + +/* Deutsche Mitteilungen */ +{ + "Weiter", + "Abbrechen", + "Fraktal löschen", + "Sind sie sicher, dass sie die Datei", + "\"%s\" aus der Liste und von der Festplatte entfernen möchten?", + "Löschen", + "Fehler beim Öffnen der Datei: %s", + "Die Datei '%s' scheint nicht im FractalExplorer-Format zu sein!", + "Die Datei '%s' ist beschädigt - Zeile %d inkorrekt.", + "Interner Fehler - das Listenelement besitzt ein NULL Objekt!", + "Unbekanntes Ereignis.\n", + "Ändere Fraktalnamen", + "Fraktal-Name:", + "Neues Fraktal", + "%s [Kopie]", + "Speichern", + "Speichern als...", + "Kopie", + "Laden", + "Kein fractalexplorer-path in gimprc:\n" + "Sie müssen einen Eintrag wie der folgende in ihre ~/.gimprc/gimprc Datei einfügen:\n" + "(fractalexplorer-path \"${gimp_dir}/fractalexplorer:${gimp_data_dir}/fractalexplorer\n", + "fractalexplorer-path falsch konfiguriert - \nPfad `%.100s' nicht gefunden\n", + "Eintrag %.100s ist kein Verzeichnis.\n", + "Fehler beim Lesen des FractalExplorer-Verzeichnisses \"%s\".", + "Mein erstes Fraktal", + "Wählen Sie ein Fraktal durch Doppelklick aus", + "Aktualisieren", + "Wahl eines Verzeichnisses und Wiedereinlese der Dateisammlung.", + "Neu", + "Erstellt ein neues Fraktal.", + "Umbenennen", + "Benennt das Fraktal in der Liste um.", + "Löscht das gerade gewählte Fraktal der Liste.", + "Wählen Sie einen Farbverlauf durch Doppelklick aus", + "Füge FractalExplorer-Pfad hinzu", + "Nach neuen Fraktalen suchen", + "Neues Verzeichis hinzufügen.", + "Fraktal-Optionen", + "Parameter", + "Ändert die erste (minimale) Begrenzung der x-Koordinate.", + "Ändert die zweite (maximale) Begrenzung der x-Koordinate.", + "Ändert die erste (minimale) Begrenzung der y-Koordinate.", + "Ändert die zweite (maximale) Begrenzung der y-Koordinate.", + "Ändert die Iterations-Variable. Je höher sie ist, um so genauer und detailierter wird das Bild sein. Eine grössere Berechenzeit ist allerdings in Kauf zu nehmen.", + "Ändert den CX-Wert (Dies wirkt sich auf alle Fraktale aus, ausser Mandelbrot und Sierpinski).", + "Ändert den CY-Wert (Dies wirkt sich auf alle Fraktale aus, ausser Mandelbrot und Sierpinski).", + "Setze Parameter auf die Standardwerte zurueck.", + "Lade ein Fraktal aus einer Datei", + "Speichere das aktive Fraktal in eine Datei", + "Fraktal-Typ", + "Diverse Optionen", + "Zurücksetzen", + "Vorschau-Optionen", + "Echtzeit-Vorschau", + "Falls Sie diese Option aktivieren, wird das Vorschaufenster stets automatisch aktualisiert.", + "Neu zeichnen", + "Zeichnet die Vorschau neu", + "Zoom-Optionen", + "Rueckgängig", + "Macht den letzten Zoom-Vorgang wieder rückgängig.", + "Wiederherstellen", + "Stellt den letzten Zoom-Vorgang wieder her.", + "Hinein", + "Hinaus", + "Farb-Optionen", + "Farbintensität", + "Rot", + "Gruen", + "Blau", + "Ändert die Intensität des roten Kanals.", + "Ändert die Intensität des gruenen Kanals.", + "Ändert die Intensität des blauen Kanals.", + "Farb-Funktion", + "Sinus", + "Cosinus", + "Keine", + "Verwende Sinus-Funktion für diese Farbkomponente.", + "Verwende Cosinus-Funktion für diese Farbkomponente.", + "Verwende lineare Farbabstufung statt einer trigonometrischen Funktion.", + "Inversion", + "Falls Sie diese Option aktivieren, werden tiefere Farbwerte durch höhere ausgetauscht und umgekehrt.", + "Farb-Modus", + "Wie oben stehend angegeben", + "Berechne Farbpalette mit den oben angegebenen Optionen (Farb-Intensität/-Funktion). Das Resultat ist in der Vorschau sichtbar.", + "Wende aktiven Farbverlauf an", + "Berechne Farbpalette mit den Angaben eines Verlaufes aus dem Gradient-Editor.", + "Farbverläufe", + "Fraktale", + "Akzeptiere Einstellungen und starte die Berechnung des Fraktals.", + "Verwerfe jegliche Änderungen und schliesse das Fenster.", + "Über...", + "Zeige Informationen über den Autor und das Plug-In.", + "Info-Box schliessen", + "Fehler beim Öffnen von '%.100s'. Konnte nicht speichern", + "Speichern der Datei fehlgeschlagen\n", + "Speichern: Keine Datei angegeben", + "Speichern: Kann nicht in ein Verzeichnis speichern", + "Lade Parameter eines Fraktals", + "Klicken Sie hier, um das Fraktal zu laden.", + "Klicken Sie hier, um den Ladevorgang abzubrechen.", + "Speichere Fraktalparameter", + "Klicken Sie hier, um das Fraktal in eine Datei zu speichern.", + "Klicken Sie hier, um den Speicherungsvorgang abzubrechen.", + "Sprache abspeichern", + "Klicken Sie hier, um die gewaehlte Sprache als Standard zu definieren und in die Konfigurationsdatei abzuspeichern.", +}, + +/* Schwedische Mitteilungen + ======================== + Hier koenntest Du die schwedischen Texte einfuegen, d.h. die deutschen ueberschreiben. +*/ + +{ + "Weiter", + "Abbrechen", + "Fraktal löschen", + "Sind sie sicher, dass sie die Datei", + "\"%s\" aus der Liste und von der Festplatte entfernen möchten?", + "Löschen", + "Fehler beim Öffnen der Datei: %s", + "Die Datei '%s' scheint nicht im FractalExplorer-Format zu sein!", + "Die Datei '%s' ist beschädigt - Zeile %d inkorrekt.", + "Interner Fehler - das Listenelement besitzt ein NULL Objekt!", + "Unbekanntes Ereignis.\n", + "Ändere Fraktalnamen", + "Fraktal-Name:", + "Neues Fraktal", + "%s [Kopie]", + "Speichern", + "Speichern als...", + "Kopie", + "Laden", + "Kein fractalexplorer-path in gimprc:\n" + "Sie müssen einen Eintrag wie der folgende in ihre ~/.gimprc/gimprc Datei einfügen:\n" + "(fractalexplorer-path \"${gimp_dir}/fractalexplorer:${gimp_data_dir}/fractalexplorer\n", + "fractalexplorer-path falsch konfiguriert - \nPfad `%.100s' nicht gefunden\n", + "Eintrag %.100s ist kein Verzeichnis.\n", + "Fehler beim Lesen des FractalExplorer-Verzeichnisses \"%s\".", + "Mein erstes Fraktal", + "Wählen Sie ein Fraktal durch Doppelklick aus", + "Aktualisieren", + "Wahl eines Verzeichnisses und Wiedereinlese der Dateisammlung.", + "Neu", + "Erstellt ein neues Fraktal.", + "Umbenennen", + "Benennt das Fraktal in der Liste um.", + "Löscht das gerade gewählte Fraktal der Liste.", + "Wählen Sie einen Farbverlauf durch Doppelklick aus", + "Füge FractalExplorer-Pfad hinzu", + "Nach neuen Fraktalen suchen", + "Neues Verzeichis hinzufügen.", + "Fraktal-Optionen", + "Parameter", + "Ändert die erste (minimale) Begrenzung der x-Koordinate.", + "Ändert die zweite (maximale) Begrenzung der x-Koordinate.", + "Ändert die erste (minimale) Begrenzung der y-Koordinate.", + "Ändert die zweite (maximale) Begrenzung der y-Koordinate.", + "Ändert die Iterations-Variable. Je höher sie ist, um so genauer und detailierter wird das Bild sein. Eine grössere Berechenzeit ist allerdings in Kauf zu nehmen.", + "Ändert den CX-Wert (Dies wirkt sich auf alle Fraktale aus, ausser Mandelbrot und Sierpinski).", + "Ändert den CY-Wert (Dies wirkt sich auf alle Fraktale aus, ausser Mandelbrot und Sierpinski).", + "Setze Parameter auf die Standardwerte zurueck.", + "Lade ein Fraktal aus einer Datei", + "Speichere das aktive Fraktal in eine Datei", + "Fraktal-Typ", + "Diverse Optionen", + "Zurücksetzen", + "Vorschau-Optionen", + "Echtzeit-Vorschau", + "Falls Sie diese Option aktivieren, wird das Vorschaufenster stets automatisch aktualisiert.", + "Neu zeichnen", + "Zeichnet die Vorschau neu", + "Zoom-Optionen", + "Rueckgängig", + "Macht den letzten Zoom-Vorgang wieder rückgängig.", + "Wiederherstellen", + "Stellt den letzten Zoom-Vorgang wieder her.", + "Hinein", + "Hinaus", + "Farb-Optionen", + "Farbintensität", + "Rot", + "Gruen", + "Blau", + "Ändert die Intensität des roten Kanals.", + "Ändert die Intensität des gruenen Kanals.", + "Ändert die Intensität des blauen Kanals.", + "Farb-Funktion", + "Sinus", + "Cosinus", + "Keine", + "Verwende Sinus-Funktion für diese Farbkomponente.", + "Verwende Cosinus-Funktion für diese Farbkomponente.", + "Verwende lineare Farbabstufung statt einer trigonometrischen Funktion.", + "Inversion", + "Falls Sie diese Option aktivieren, werden tiefere Farbwerte durch höhere ausgetauscht und umgekehrt.", + "Farb-Modus", + "Wie oben stehend angegeben", + "Berechne Farbpalette mit den oben angegebenen Optionen (Farb-Intensität/-Funktion). Das Resultat ist in der Vorschau sichtbar.", + "Wende aktiven Farbverlauf an", + "Berechne Farbpalette mit den Angaben eines Verlaufes aus dem Gradient-Editor.", + "Farbverläufe", + "Fraktale", + "Akzeptiere Einstellungen und starte die Berechnung des Fraktals.", + "Verwerfe jegliche Änderungen und schliesse das Fenster.", + "Über...", + "Zeige Informationen über den Autor und das Plug-In.", + "Info-Box schliessen", + "Fehler beim Öffnen von '%.100s'. Konnte nicht speichern", + "Speichern der Datei fehlgeschlagen\n", + "Speichern: Keine Datei angegeben", + "Speichern: Kann nicht in ein Verzeichnis speichern", + "Lade Parameter eines Fraktals", + "Klicken Sie hier, um das Fraktal zu laden.", + "Klicken Sie hier, um den Ladevorgang abzubrechen.", + "Speichere Fraktalparameter", + "Klicken Sie hier, um das Fraktal in eine Datei zu speichern.", + "Klicken Sie hier, um den Speicherungsvorgang abzubrechen.", + "Sprache abspeichern", + "Klicken Sie hier, um die gewaehlte Sprache als Standard zu definieren und in die Konfigurationsdatei abzuspeichern.", +}, + +}; + +enum { + MSG_OK, + MSG_CANCEL, + MSG_DELFRAC, + MSG_DELSURE, + MSG_DELSURE2, + MSG_DEL, + MSG_OPENERROR, + MSG_WRONGFILETYPE, + MSG_CORRUPTFILE, + MSG_NULLLIST, + MSG_UNKNOWN_EVENT, + MSG_EDIT_FRACNAME, + MSG_FRACNAME, + MSG_NEWFRAC, + MSG_COPYNAME, + MSG_SAVE, + MSG_SAVEAS, + MSG_COPY, + MSG_LOAD, + MSG_MISSING_GIMPRC, + MSG_WRONGPATH, + MSG_NOTDIR, + MSG_DIRREADERROR, + MSG_FIRSTFRACTAL, + MSG_CHOOSE_FRACTAL, + MSG_RESCAN, + MSG_RESCAN_COMMENT, + MSG_NEW, + MSG_NEW_COMMENT, + MSG_RENAME, + MSG_RENAME_COMMENT, + MSG_DELETE_COMMENT, + MSG_CHOOSE_GRADIENT, + MSG_ADDPATH, + MSG_RESCANTITLE1, + MSG_ADDDIR, + MSG_FRACTALOPTIONS, + MSG_PARAMETERS, + MSG_XMIN, + MSG_XMAX, + MSG_YMIN, + MSG_YMAX, + MSG_ITER, + MSG_CX, + MSG_CY, + MSG_RESET_PARAM_COMMENT, + MSG_LOADCOMMENT, + MSG_SAVECOMMENT, + MSG_FRACTALTYPE, + MSG_GENERALOPTIONS, + MSG_RESET, + MSG_PREVIEW, + MSG_REALTIMEPREVIEW, + MSG_REDRAWCOMMENT, + MSG_REDRAW, + MSG_REDRAWPREVIEW, + MSG_ZOOMOPTS, + MSG_UNDOZOOM, + MSG_UNDOCOMMENT, + MSG_REDOZOOM, + MSG_REDOCOMMENT, + MSG_STEPIN, + MSG_STEPOUT, + MSG_COLOROPTS, + MSG_COLORDENSITY, + MSG_RED, + MSG_GREEN, + MSG_BLUE, + MSG_REDINTENSITY, + MSG_GREENINTENSITY, + MSG_BLUEINTENSITY, + MSG_COLORFUNCTION, + MSG_SINE, + MSG_COSINE, + MSG_NONE, + MSG_SINECOMMENT, + MSG_COSINECOMMENT, + MSG_NONECOMMENT, + MSG_INVERSION, + MSG_INVERSIONCOMMENT, + MSG_COLORMODE, + MSG_ASSPECIFIED, + MSG_ASSPECIFIEDCOMMENT, + MSG_APPLYGRADIENT, + MSG_APPLYGRADIENTCOMMENT, + MSG_GRADIENTPRESETS, + MSG_FRACTALPRESETS, + MSG_STARTCALC, + MSG_MAINDLGCANCEL, + MSG_ABOUT, + MSG_ABOUTCOMMENT, + MSG_ABOUTBOXOKCOMMENT, + MSG_SAVEERROR, + MSG_WRITEFAILURE, + MSG_NOFILENAME, + MSG_NOSAVETODIR, + MSG_LOADWINTITLE, + MSG_LOADBUTTONCOMMENT, + MSG_CANCELLOAD, + MSG_SAVEWINTITLE, + MSG_SAVEBUTTONCOMMENT, + MSG_CANCELSAVE, + MSG_SAVELANGUAGE, + MSG_SAVELANGUAGE_COMMENT +}; + +enum { + LNG_ENGLISH, + LNG_FRENCH, + LNG_GERMAN, + LNG_ITALIAN, + LNG_SPANISH +}; diff --git a/plug-ins/FractalExplorer/Makefile.am b/plug-ins/FractalExplorer/Makefile.am new file mode 100644 index 0000000000..dea5b15f92 --- /dev/null +++ b/plug-ins/FractalExplorer/Makefile.am @@ -0,0 +1,50 @@ +## Process this file with automake to produce Makefile.in + +pluginlibdir = $(gimpplugindir)/plug-ins + +pluginlib_PROGRAMS = FractalExplorer + +FractalExplorer_SOURCES = \ + FractalExplorer.c \ + Dialogs.h \ + Callbacks.h \ + Events.h \ + FractalExplorer.h \ + Languages.h \ + logo.h \ + pix_data.h + +INCLUDES = \ + $(X_CFLAGS) \ + -I$(top_srcdir) \ + -I$(includedir) + +LDADD = \ + $(top_builddir)/libgimp/libgimpui.la \ + $(top_builddir)/libgimp/libgimp.la \ + $(X_LIBS) \ + -lc + +DEPS = \ + $(top_builddir)/libgimp/libgimpui.la \ + $(top_builddir)/libgimp/libgimp.la + +FractalExplorer_DEPENDENCIES = $(DEPS) + +.PHONY: files + +files: + @files=`ls $(DISTFILES) 2> /dev/null`; for p in $$files; do \ + echo $$p; \ + done + @for subdir in $(SUBDIRS); do \ + files=`cd $$subdir; $(MAKE) files | grep -v "make\[[1-9]\]"`; \ + for file in $$files; do \ + echo $$subdir/$$file; \ + done; \ + done + + + + + diff --git a/plug-ins/FractalExplorer/README b/plug-ins/FractalExplorer/README new file mode 100644 index 0000000000..a55f1675a5 --- /dev/null +++ b/plug-ins/FractalExplorer/README @@ -0,0 +1,89 @@ +------------------------------------------- + GIMP-Plug-In +------------------------------------------- + Written by Daniel Cotting + Bahnhofstrasse 31 + CH-3066 Stettlen (Switzerland) + + cotting@mygale.org + www.mygale.org/~cotting +------------------------------------------- + Some code is taken out of other plug-ins + written by other authors. +------------------------------------------- + + +------------------------------------------- + INSTALLATION +------------------------------------------- + To install it, you have to edit the + Makefile (change install-path). + Afterwards run make. This will compile + and install the plug-in in the right + directory. Once the new code is installed, + you can run the GIMP and enjoy the new + functions and effects it provides. + + Note that this plug-in has some sample + files which must be installed in one of + the following directories: + + ~/.gimp/fractalexplorer + /usr/local/share/gimp/0.99.XX/fractalexplorer + + You can find the sample files in the + subdirectory fractalexplorer-examples + of this distribution. + + You will have to add the following lines + to your gimprc file (usually + /usr/local/ share/gimp/0.99.XX/gimprc): + + # fractalexplorer directory + (fractalexplorer-path "${gimp_data_dir}/fractalexplorer:${gimp_dir}/fractalexplorer") + +------------------------------------------- + + +------------------------------------------- + REDUCE CODE SIZE +------------------------------------------- + If you find that the plug-in is too big, + you can compress the executables with the + gzexe program (if it is avaiable on your + system). To do so, change to the plug-in + directory of the GIMP... + + cd /usr/local/lib/gimp/VERSION/plug-ins + + ...and execute the command... + + gzexe PLUGIN_NAME + + ...and remember to remove the uncompres- + sed binary, which has been renamed to + PLUGIN_NAME~, by running the command: + + rm PLUGIN_NAME~ + + This will result in a code size of about + 50 kB, which isn't too much IMHO. +------------------------------------------ + + +------------------------------------------ + FEEDBACK +------------------------------------------ + I'm interested in any feedback, comments, + bug-reports, suggestions etc. If you + have anything you would like to tell + me, you can write to cotting@mygale.org. + Also have a look at the GIMP-section of + my homepage at www.mygale.org/~cotting. +------------------------------------------ + + Thank you and happy GIMPing! + Daniel Cotting + +------------------------------------------ + \ No newline at end of file diff --git a/plug-ins/FractalExplorer/examples/Asteroid Field b/plug-ins/FractalExplorer/examples/Asteroid Field new file mode 100644 index 0000000000..887acc362d --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Asteroid Field @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 5 +xmin: -0.664136886596680 +xmax: -0.663678705692291 +ymin: -0.378479450941086 +ymax: -0.378030359745026 +iter: 214.723999023437500 +cx: 0.184000000357628 +cy: -0.200000002980232 +redstretch: 89.130996704101562 +greenstretch: 70.365997314453125 +bluestretch: 58.000000000000000 +redmode: 0 +greenmode: 0 +bluemode: 2 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Bar Code Label b/plug-ins/FractalExplorer/examples/Bar Code Label new file mode 100644 index 0000000000..9a967bfc81 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Bar Code Label @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.443357914686203 +xmax: -0.443357914686203 +ymin: 0.085399866104126 +ymax: 0.085484646260738 +iter: 50.000000000000000 +cx: -0.847000002861023 +cy: -0.184000000357628 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 0 +greenmode: 0 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Beauty of Nature b/plug-ins/FractalExplorer/examples/Beauty of Nature new file mode 100644 index 0000000000..2b56507209 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Beauty of Nature @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.125070333480835 +xmax: -0.120749041438103 +ymin: -0.537724196910858 +ymax: -0.532733201980591 +iter: 49.080001831054688 +cx: 0.453999996185303 +cy: 0.000000000000000 +redstretch: 123.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 78.000000000000000 +redmode: 1 +greenmode: 2 +bluemode: 0 +redinvert: 0 +greeninvert: 1 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Blue Curtain b/plug-ins/FractalExplorer/examples/Blue Curtain new file mode 100644 index 0000000000..272fe7ac58 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Blue Curtain @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: 0.257157027721405 +xmax: 0.257280886173248 +ymin: 0.153874531388283 +ymax: 0.154003381729126 +iter: 49.080001831054688 +cx: -0.750000000000000 +cy: -0.356000006198883 +redstretch: 123.978996276855469 +greenstretch: 112.000000000000000 +bluestretch: 60.000000000000000 +redmode: 1 +greenmode: 1 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Car Track b/plug-ins/FractalExplorer/examples/Car Track new file mode 100644 index 0000000000..5d37c6c6e4 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Car Track @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.104991987347603 +xmax: -0.104991905391216 +ymin: 0.250050097703934 +ymax: 0.250050216913223 +iter: 202.453994750976562 +cx: 0.356000006198883 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 2 +greenmode: 0 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Energetic Diamond b/plug-ins/FractalExplorer/examples/Energetic Diamond new file mode 100644 index 0000000000..f8e79ca83b --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Energetic Diamond @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 0 +xmin: -1.255496978759766 +xmax: -1.249950170516968 +ymin: -0.347052335739136 +ymax: -0.338468551635742 +iter: 50.000000000000000 +cx: -0.750000000000000 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 113.000000000000000 +bluestretch: 128.000000000000000 +redmode: 0 +greenmode: 1 +bluemode: 2 +redinvert: 1 +greeninvert: 1 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Explosive b/plug-ins/FractalExplorer/examples/Explosive new file mode 100644 index 0000000000..57327691a8 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Explosive @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 6 +xmin: 0.353848785161972 +xmax: 0.356627285480499 +ymin: 0.458385974168777 +ymax: 0.460633248090744 +iter: 147.238998413085938 +cx: 0.000000000000000 +cy: 0.000000000000000 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 1 +greenmode: 1 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 1 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Flower b/plug-ins/FractalExplorer/examples/Flower new file mode 100644 index 0000000000..f1712a9b04 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Flower @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.125281319022179 +xmax: -0.116631627082825 +ymin: 0.375891804695129 +ymax: 0.384632647037506 +iter: 67.485000610351562 +cx: 0.405000001192093 +cy: -0.200000002980232 +redstretch: 124.000000000000000 +greenstretch: 112.000000000000000 +bluestretch: 60.000000000000000 +redmode: 0 +greenmode: 2 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 1 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Fragments b/plug-ins/FractalExplorer/examples/Fragments new file mode 100644 index 0000000000..37fa127301 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Fragments @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 2 +xmin: -0.508517742156982 +xmax: -0.475813776254654 +ymin: -0.025438375771046 +ymax: 0.025984741747379 +iter: 177.914001464843750 +cx: -1.018000006675720 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 0 +greenmode: 0 +bluemode: 1 +redinvert: 1 +greeninvert: 1 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Hemp b/plug-ins/FractalExplorer/examples/Hemp new file mode 100644 index 0000000000..6d941acfa5 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Hemp @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 6 +xmin: -0.968750000000000 +xmax: 0.437500000000000 +ymin: -0.703125000000000 +ymax: 0.843750000000000 +iter: 50.000000000000000 +cx: -0.012000000104308 +cy: 0.000000000000000 +redstretch: 87.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 0.000000000000000 +redmode: 0 +greenmode: 2 +bluemode: 1 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/High Voltage b/plug-ins/FractalExplorer/examples/High Voltage new file mode 100644 index 0000000000..788cfa8010 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/High Voltage @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 1 +xmin: -0.476808547973633 +xmax: -0.223514556884766 +ymin: -0.017941474914551 +ymax: 0.114898681640625 +iter: 50.000000000000000 +cx: -1.337000012397766 +cy: 0.086000002920628 +redstretch: 127.330001831054688 +greenstretch: 90.000000000000000 +bluestretch: 128.000000000000000 +redmode: 2 +greenmode: 2 +bluemode: 2 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Hoops b/plug-ins/FractalExplorer/examples/Hoops new file mode 100644 index 0000000000..83f09aeb7f --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Hoops @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.345402956008911 +xmax: -0.252956151962280 +ymin: -0.274888515472412 +ymax: -0.204696178436279 +iter: 30.674999237060547 +cx: 0.356000006198883 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 67.000000000000000 +bluestretch: 98.000000000000000 +redmode: 1 +greenmode: 1 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Ice Crystal b/plug-ins/FractalExplorer/examples/Ice Crystal new file mode 100644 index 0000000000..db6a396a55 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Ice Crystal @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 1 +xmin: 0.068130433559418 +xmax: 0.116958513855934 +ymin: 0.512302279472351 +ymax: 0.534968316555023 +iter: 202.453994750976562 +cx: 0.356000006198883 +cy: 0.428999990224838 +redstretch: 128.000000000000000 +greenstretch: 113.000000000000000 +bluestretch: 128.000000000000000 +redmode: 0 +greenmode: 0 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Leaves b/plug-ins/FractalExplorer/examples/Leaves new file mode 100644 index 0000000000..43706e8969 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Leaves @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 6 +xmin: -0.350769042968750 +xmax: -0.080402374267578 +ymin: -0.264384269714355 +ymax: -0.041095733642578 +iter: 50.000000000000000 +cx: -0.184000000357628 +cy: 0.000000000000000 +redstretch: 29.000000000000000 +greenstretch: 80.000000000000000 +bluestretch: 7.000000000000000 +redmode: 0 +greenmode: 1 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Lightning b/plug-ins/FractalExplorer/examples/Lightning new file mode 100644 index 0000000000..bb23dc5453 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Lightning @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 0 +xmin: -1.285429239273071 +xmax: -1.283814907073975 +ymin: 0.428520709276199 +ymax: 0.432528734207153 +iter: 50.000000000000000 +cx: -0.750000000000000 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 89.130996704101562 +bluestretch: 128.000000000000000 +redmode: 0 +greenmode: 0 +bluemode: 2 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Mandelbrot b/plug-ins/FractalExplorer/examples/Mandelbrot new file mode 100644 index 0000000000..5a604e51d6 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Mandelbrot @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 0 +xmin: -0.078803382813931 +xmax: -0.077717751264572 +ymin: -0.880311131477356 +ymax: -0.879459798336029 +iter: 503.066986083984375 +cx: -0.750000000000000 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 120.627998352050781 +bluestretch: 128.000000000000000 +redmode: 1 +greenmode: 2 +bluemode: 0 +redinvert: 1 +greeninvert: 0 +blueinvert: 1 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Marble b/plug-ins/FractalExplorer/examples/Marble new file mode 100644 index 0000000000..ea3f71a2a2 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Marble @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.235851287841797 +xmax: -0.060367584228516 +ymin: 0.091303825378418 +ymax: 0.220178604125977 +iter: 55.215000152587891 +cx: 0.356000006198883 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 127.330001831054688 +redmode: 1 +greenmode: 2 +bluemode: 2 +redinvert: 0 +greeninvert: 1 +blueinvert: 1 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Marble2 b/plug-ins/FractalExplorer/examples/Marble2 new file mode 100644 index 0000000000..a0f26cb354 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Marble2 @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.146484375000000 +xmax: 0.064453125000000 +ymin: 0.154907226562500 +ymax: 0.358154296875000 +iter: 50.000000000000000 +cx: 0.356000006198883 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 1 +greenmode: 1 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Medusa b/plug-ins/FractalExplorer/examples/Medusa new file mode 100644 index 0000000000..5b74743545 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Medusa @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 0 +xmin: -1.408687233924866 +xmax: -1.408686757087708 +ymin: -0.135643482208252 +ymax: -0.135642752051353 +iter: 104.293998718261719 +cx: -0.750000000000000 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 113.000000000000000 +bluestretch: 128.000000000000000 +redmode: 1 +greenmode: 0 +bluemode: 1 +redinvert: 1 +greeninvert: 1 +blueinvert: 1 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Nautilus b/plug-ins/FractalExplorer/examples/Nautilus new file mode 100644 index 0000000000..0c7da432df --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Nautilus @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 6 +xmin: -0.078369140625000 +xmax: 0.158203125000000 +ymin: -0.485778808593750 +ymax: -0.197387695312500 +iter: 134.968994140625000 +cx: 0.109999999403954 +cy: 0.037000000476837 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 1 +greenmode: 2 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Nebula b/plug-ins/FractalExplorer/examples/Nebula new file mode 100644 index 0000000000..1246289a17 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Nebula @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 6 +xmin: -0.935546875000000 +xmax: 0.226562500000000 +ymin: 0.034790039062500 +ymax: 0.995361328125000 +iter: 67.485000610351562 +cx: 0.428999990224838 +cy: 0.232999995350838 +redstretch: 128.000000000000000 +greenstretch: 120.627998352050781 +bluestretch: 93.000000000000000 +redmode: 2 +greenmode: 2 +bluemode: 1 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Plant b/plug-ins/FractalExplorer/examples/Plant new file mode 100644 index 0000000000..29731eca3d --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Plant @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.251464843750000 +xmax: -0.097656250000000 +ymin: -0.626953125000000 +ymax: -0.503356933593750 +iter: 55.215000152587891 +cx: 0.503000020980835 +cy: -0.012000000104308 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 2 +greenmode: 1 +bluemode: 0 +redinvert: 1 +greeninvert: 1 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Rose b/plug-ins/FractalExplorer/examples/Rose new file mode 100644 index 0000000000..8c88d8e321 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Rose @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 7 +xmin: 0.011789147742093 +xmax: 0.012022980488837 +ymin: 0.040065050125122 +ymax: 0.040298193693161 +iter: 92.025001525878906 +cx: -1.092000007629395 +cy: 0.232999995350838 +redstretch: 124.000000000000000 +greenstretch: 112.000000000000000 +bluestretch: 60.000000000000000 +redmode: 1 +greenmode: 0 +bluemode: 0 +redinvert: 1 +greeninvert: 1 +blueinvert: 1 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Saturn b/plug-ins/FractalExplorer/examples/Saturn new file mode 100644 index 0000000000..ec0542be09 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Saturn @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.720550119876862 +xmax: -0.736553728580475 +ymin: 0.128735020756721 +ymax: 0.068184189498425 +iter: 49.080001831054688 +cx: -0.750000000000000 +cy: -0.200000002980232 +redstretch: 119.958000183105469 +greenstretch: 85.779998779296875 +bluestretch: 6.031000137329102 +redmode: 0 +greenmode: 0 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Snow Crystal b/plug-ins/FractalExplorer/examples/Snow Crystal new file mode 100644 index 0000000000..02f2928d05 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Snow Crystal @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 0 +xmin: -0.562806546688080 +xmax: -0.561547160148621 +ymin: -0.643333077430725 +ymax: -0.642277657985687 +iter: 122.698997497558594 +cx: -0.750000000000000 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 113.000000000000000 +bluestretch: 128.000000000000000 +redmode: 0 +greenmode: 0 +bluemode: 2 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Soma b/plug-ins/FractalExplorer/examples/Soma new file mode 100644 index 0000000000..9d9b44666f --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Soma @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 6 +xmin: -0.038584709167480 +xmax: 0.094075202941895 +ymin: -0.689266920089722 +ymax: -0.584711074829102 +iter: 98.160003662109375 +cx: 0.405000001192093 +cy: 0.037000000476837 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 0 +greenmode: 1 +bluemode: 2 +redinvert: 0 +greeninvert: 1 +blueinvert: 1 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Spark b/plug-ins/FractalExplorer/examples/Spark new file mode 100644 index 0000000000..f4b2ec6993 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Spark @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 7 +xmin: -0.014160156250000 +xmax: 1.014160156250000 +ymin: -0.261108398437500 +ymax: 0.252685546875000 +iter: 42.944999694824219 +cx: -1.386999964714050 +cy: -0.257999986410141 +redstretch: 124.000000000000000 +greenstretch: 112.000000000000000 +bluestretch: 60.000000000000000 +redmode: 0 +greenmode: 2 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 1 +colormode: 1 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Suns b/plug-ins/FractalExplorer/examples/Suns new file mode 100644 index 0000000000..683a147c05 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Suns @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 1 +xmin: -0.573436737060547 +xmax: -0.399868011474609 +ymin: -0.177640914916992 +ymax: -0.024647712707520 +iter: 607.361999511718750 +cx: -0.723999977111816 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 2 +greenmode: 0 +bluemode: 1 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Tentacles b/plug-ins/FractalExplorer/examples/Tentacles new file mode 100644 index 0000000000..19402f4dc3 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Tentacles @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 6 +xmin: -0.430790066719055 +xmax: -0.421469658613205 +ymin: 0.017559077590704 +ymax: 0.025114785879850 +iter: 67.485000610351562 +cx: -0.086000002920628 +cy: -0.012000000104308 +redstretch: 128.000000000000000 +greenstretch: 37.000000000000000 +bluestretch: 93.000000000000000 +redmode: 2 +greenmode: 2 +bluemode: 1 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/The Green Place b/plug-ins/FractalExplorer/examples/The Green Place new file mode 100644 index 0000000000..8504364f4b --- /dev/null +++ b/plug-ins/FractalExplorer/examples/The Green Place @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 2 +xmin: 0.064453125000000 +xmax: 0.950683593750000 +ymin: -0.389648437500000 +ymax: 0.476440429687500 +iter: 50.000000000000000 +cx: -1.067000031471252 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 110.000000000000000 +bluestretch: 2.000000000000000 +redmode: 0 +greenmode: 1 +bluemode: 1 +redinvert: 1 +greeninvert: 1 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Wave b/plug-ins/FractalExplorer/examples/Wave new file mode 100644 index 0000000000..e9deae072d --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Wave @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 2 +xmin: -0.937500000000000 +xmax: 1.125000000000000 +ymin: -0.609375000000000 +ymax: 0.609375000000000 +iter: 50.000000000000000 +cx: -1.042999982833862 +cy: -0.037000000476837 +redstretch: 128.000000000000000 +greenstretch: 22.000000000000000 +bluestretch: 101.000000000000000 +redmode: 1 +greenmode: 1 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Wood b/plug-ins/FractalExplorer/examples/Wood new file mode 100644 index 0000000000..ffdd12078f --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Wood @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -1.287102937698364 +xmax: -1.287102580070496 +ymin: 0.099825143814087 +ymax: 0.099862203001976 +iter: 50.000000000000000 +cx: -0.750000000000000 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 109.905998229980469 +bluestretch: 2.009999990463257 +redmode: 1 +greenmode: 0 +bluemode: 0 +redinvert: 1 +greeninvert: 1 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Zooming Circle b/plug-ins/FractalExplorer/examples/Zooming Circle new file mode 100644 index 0000000000..75a704daf3 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Zooming Circle @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 3 +xmin: 0.187500000000000 +xmax: 0.984375000000000 +ymin: 0.843750000000000 +ymax: 1.734375000000000 +iter: 50.000000000000000 +cx: 0.773000001907349 +cy: -0.723999977111816 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 2 +greenmode: 0 +bluemode: 1 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Asteroid Field b/plug-ins/FractalExplorer/fractalexplorer-examples/Asteroid Field new file mode 100644 index 0000000000..887acc362d --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Asteroid Field @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 5 +xmin: -0.664136886596680 +xmax: -0.663678705692291 +ymin: -0.378479450941086 +ymax: -0.378030359745026 +iter: 214.723999023437500 +cx: 0.184000000357628 +cy: -0.200000002980232 +redstretch: 89.130996704101562 +greenstretch: 70.365997314453125 +bluestretch: 58.000000000000000 +redmode: 0 +greenmode: 0 +bluemode: 2 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Bar Code Label b/plug-ins/FractalExplorer/fractalexplorer-examples/Bar Code Label new file mode 100644 index 0000000000..9a967bfc81 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Bar Code Label @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.443357914686203 +xmax: -0.443357914686203 +ymin: 0.085399866104126 +ymax: 0.085484646260738 +iter: 50.000000000000000 +cx: -0.847000002861023 +cy: -0.184000000357628 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 0 +greenmode: 0 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Beauty of Nature b/plug-ins/FractalExplorer/fractalexplorer-examples/Beauty of Nature new file mode 100644 index 0000000000..2b56507209 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Beauty of Nature @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.125070333480835 +xmax: -0.120749041438103 +ymin: -0.537724196910858 +ymax: -0.532733201980591 +iter: 49.080001831054688 +cx: 0.453999996185303 +cy: 0.000000000000000 +redstretch: 123.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 78.000000000000000 +redmode: 1 +greenmode: 2 +bluemode: 0 +redinvert: 0 +greeninvert: 1 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Blue Curtain b/plug-ins/FractalExplorer/fractalexplorer-examples/Blue Curtain new file mode 100644 index 0000000000..272fe7ac58 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Blue Curtain @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: 0.257157027721405 +xmax: 0.257280886173248 +ymin: 0.153874531388283 +ymax: 0.154003381729126 +iter: 49.080001831054688 +cx: -0.750000000000000 +cy: -0.356000006198883 +redstretch: 123.978996276855469 +greenstretch: 112.000000000000000 +bluestretch: 60.000000000000000 +redmode: 1 +greenmode: 1 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Car Track b/plug-ins/FractalExplorer/fractalexplorer-examples/Car Track new file mode 100644 index 0000000000..5d37c6c6e4 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Car Track @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.104991987347603 +xmax: -0.104991905391216 +ymin: 0.250050097703934 +ymax: 0.250050216913223 +iter: 202.453994750976562 +cx: 0.356000006198883 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 2 +greenmode: 0 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Energetic Diamond b/plug-ins/FractalExplorer/fractalexplorer-examples/Energetic Diamond new file mode 100644 index 0000000000..f8e79ca83b --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Energetic Diamond @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 0 +xmin: -1.255496978759766 +xmax: -1.249950170516968 +ymin: -0.347052335739136 +ymax: -0.338468551635742 +iter: 50.000000000000000 +cx: -0.750000000000000 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 113.000000000000000 +bluestretch: 128.000000000000000 +redmode: 0 +greenmode: 1 +bluemode: 2 +redinvert: 1 +greeninvert: 1 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Explosive b/plug-ins/FractalExplorer/fractalexplorer-examples/Explosive new file mode 100644 index 0000000000..57327691a8 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Explosive @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 6 +xmin: 0.353848785161972 +xmax: 0.356627285480499 +ymin: 0.458385974168777 +ymax: 0.460633248090744 +iter: 147.238998413085938 +cx: 0.000000000000000 +cy: 0.000000000000000 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 1 +greenmode: 1 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 1 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Flower b/plug-ins/FractalExplorer/fractalexplorer-examples/Flower new file mode 100644 index 0000000000..f1712a9b04 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Flower @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.125281319022179 +xmax: -0.116631627082825 +ymin: 0.375891804695129 +ymax: 0.384632647037506 +iter: 67.485000610351562 +cx: 0.405000001192093 +cy: -0.200000002980232 +redstretch: 124.000000000000000 +greenstretch: 112.000000000000000 +bluestretch: 60.000000000000000 +redmode: 0 +greenmode: 2 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 1 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Fragments b/plug-ins/FractalExplorer/fractalexplorer-examples/Fragments new file mode 100644 index 0000000000..37fa127301 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Fragments @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 2 +xmin: -0.508517742156982 +xmax: -0.475813776254654 +ymin: -0.025438375771046 +ymax: 0.025984741747379 +iter: 177.914001464843750 +cx: -1.018000006675720 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 0 +greenmode: 0 +bluemode: 1 +redinvert: 1 +greeninvert: 1 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Hemp b/plug-ins/FractalExplorer/fractalexplorer-examples/Hemp new file mode 100644 index 0000000000..6d941acfa5 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Hemp @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 6 +xmin: -0.968750000000000 +xmax: 0.437500000000000 +ymin: -0.703125000000000 +ymax: 0.843750000000000 +iter: 50.000000000000000 +cx: -0.012000000104308 +cy: 0.000000000000000 +redstretch: 87.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 0.000000000000000 +redmode: 0 +greenmode: 2 +bluemode: 1 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/High Voltage b/plug-ins/FractalExplorer/fractalexplorer-examples/High Voltage new file mode 100644 index 0000000000..788cfa8010 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/High Voltage @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 1 +xmin: -0.476808547973633 +xmax: -0.223514556884766 +ymin: -0.017941474914551 +ymax: 0.114898681640625 +iter: 50.000000000000000 +cx: -1.337000012397766 +cy: 0.086000002920628 +redstretch: 127.330001831054688 +greenstretch: 90.000000000000000 +bluestretch: 128.000000000000000 +redmode: 2 +greenmode: 2 +bluemode: 2 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Hoops b/plug-ins/FractalExplorer/fractalexplorer-examples/Hoops new file mode 100644 index 0000000000..83f09aeb7f --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Hoops @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.345402956008911 +xmax: -0.252956151962280 +ymin: -0.274888515472412 +ymax: -0.204696178436279 +iter: 30.674999237060547 +cx: 0.356000006198883 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 67.000000000000000 +bluestretch: 98.000000000000000 +redmode: 1 +greenmode: 1 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Ice Crystal b/plug-ins/FractalExplorer/fractalexplorer-examples/Ice Crystal new file mode 100644 index 0000000000..db6a396a55 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Ice Crystal @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 1 +xmin: 0.068130433559418 +xmax: 0.116958513855934 +ymin: 0.512302279472351 +ymax: 0.534968316555023 +iter: 202.453994750976562 +cx: 0.356000006198883 +cy: 0.428999990224838 +redstretch: 128.000000000000000 +greenstretch: 113.000000000000000 +bluestretch: 128.000000000000000 +redmode: 0 +greenmode: 0 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Leaves b/plug-ins/FractalExplorer/fractalexplorer-examples/Leaves new file mode 100644 index 0000000000..43706e8969 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Leaves @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 6 +xmin: -0.350769042968750 +xmax: -0.080402374267578 +ymin: -0.264384269714355 +ymax: -0.041095733642578 +iter: 50.000000000000000 +cx: -0.184000000357628 +cy: 0.000000000000000 +redstretch: 29.000000000000000 +greenstretch: 80.000000000000000 +bluestretch: 7.000000000000000 +redmode: 0 +greenmode: 1 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Lightning b/plug-ins/FractalExplorer/fractalexplorer-examples/Lightning new file mode 100644 index 0000000000..bb23dc5453 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Lightning @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 0 +xmin: -1.285429239273071 +xmax: -1.283814907073975 +ymin: 0.428520709276199 +ymax: 0.432528734207153 +iter: 50.000000000000000 +cx: -0.750000000000000 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 89.130996704101562 +bluestretch: 128.000000000000000 +redmode: 0 +greenmode: 0 +bluemode: 2 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Mandelbrot b/plug-ins/FractalExplorer/fractalexplorer-examples/Mandelbrot new file mode 100644 index 0000000000..5a604e51d6 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Mandelbrot @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 0 +xmin: -0.078803382813931 +xmax: -0.077717751264572 +ymin: -0.880311131477356 +ymax: -0.879459798336029 +iter: 503.066986083984375 +cx: -0.750000000000000 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 120.627998352050781 +bluestretch: 128.000000000000000 +redmode: 1 +greenmode: 2 +bluemode: 0 +redinvert: 1 +greeninvert: 0 +blueinvert: 1 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Marble b/plug-ins/FractalExplorer/fractalexplorer-examples/Marble new file mode 100644 index 0000000000..ea3f71a2a2 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Marble @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.235851287841797 +xmax: -0.060367584228516 +ymin: 0.091303825378418 +ymax: 0.220178604125977 +iter: 55.215000152587891 +cx: 0.356000006198883 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 127.330001831054688 +redmode: 1 +greenmode: 2 +bluemode: 2 +redinvert: 0 +greeninvert: 1 +blueinvert: 1 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Marble2 b/plug-ins/FractalExplorer/fractalexplorer-examples/Marble2 new file mode 100644 index 0000000000..a0f26cb354 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Marble2 @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.146484375000000 +xmax: 0.064453125000000 +ymin: 0.154907226562500 +ymax: 0.358154296875000 +iter: 50.000000000000000 +cx: 0.356000006198883 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 1 +greenmode: 1 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Medusa b/plug-ins/FractalExplorer/fractalexplorer-examples/Medusa new file mode 100644 index 0000000000..5b74743545 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Medusa @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 0 +xmin: -1.408687233924866 +xmax: -1.408686757087708 +ymin: -0.135643482208252 +ymax: -0.135642752051353 +iter: 104.293998718261719 +cx: -0.750000000000000 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 113.000000000000000 +bluestretch: 128.000000000000000 +redmode: 1 +greenmode: 0 +bluemode: 1 +redinvert: 1 +greeninvert: 1 +blueinvert: 1 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Nautilus b/plug-ins/FractalExplorer/fractalexplorer-examples/Nautilus new file mode 100644 index 0000000000..0c7da432df --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Nautilus @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 6 +xmin: -0.078369140625000 +xmax: 0.158203125000000 +ymin: -0.485778808593750 +ymax: -0.197387695312500 +iter: 134.968994140625000 +cx: 0.109999999403954 +cy: 0.037000000476837 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 1 +greenmode: 2 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Nebula b/plug-ins/FractalExplorer/fractalexplorer-examples/Nebula new file mode 100644 index 0000000000..1246289a17 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Nebula @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 6 +xmin: -0.935546875000000 +xmax: 0.226562500000000 +ymin: 0.034790039062500 +ymax: 0.995361328125000 +iter: 67.485000610351562 +cx: 0.428999990224838 +cy: 0.232999995350838 +redstretch: 128.000000000000000 +greenstretch: 120.627998352050781 +bluestretch: 93.000000000000000 +redmode: 2 +greenmode: 2 +bluemode: 1 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Plant b/plug-ins/FractalExplorer/fractalexplorer-examples/Plant new file mode 100644 index 0000000000..29731eca3d --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Plant @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.251464843750000 +xmax: -0.097656250000000 +ymin: -0.626953125000000 +ymax: -0.503356933593750 +iter: 55.215000152587891 +cx: 0.503000020980835 +cy: -0.012000000104308 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 2 +greenmode: 1 +bluemode: 0 +redinvert: 1 +greeninvert: 1 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Rose b/plug-ins/FractalExplorer/fractalexplorer-examples/Rose new file mode 100644 index 0000000000..8c88d8e321 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Rose @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 7 +xmin: 0.011789147742093 +xmax: 0.012022980488837 +ymin: 0.040065050125122 +ymax: 0.040298193693161 +iter: 92.025001525878906 +cx: -1.092000007629395 +cy: 0.232999995350838 +redstretch: 124.000000000000000 +greenstretch: 112.000000000000000 +bluestretch: 60.000000000000000 +redmode: 1 +greenmode: 0 +bluemode: 0 +redinvert: 1 +greeninvert: 1 +blueinvert: 1 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Saturn b/plug-ins/FractalExplorer/fractalexplorer-examples/Saturn new file mode 100644 index 0000000000..ec0542be09 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Saturn @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.720550119876862 +xmax: -0.736553728580475 +ymin: 0.128735020756721 +ymax: 0.068184189498425 +iter: 49.080001831054688 +cx: -0.750000000000000 +cy: -0.200000002980232 +redstretch: 119.958000183105469 +greenstretch: 85.779998779296875 +bluestretch: 6.031000137329102 +redmode: 0 +greenmode: 0 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Snow Crystal b/plug-ins/FractalExplorer/fractalexplorer-examples/Snow Crystal new file mode 100644 index 0000000000..02f2928d05 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Snow Crystal @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 0 +xmin: -0.562806546688080 +xmax: -0.561547160148621 +ymin: -0.643333077430725 +ymax: -0.642277657985687 +iter: 122.698997497558594 +cx: -0.750000000000000 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 113.000000000000000 +bluestretch: 128.000000000000000 +redmode: 0 +greenmode: 0 +bluemode: 2 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Soma b/plug-ins/FractalExplorer/fractalexplorer-examples/Soma new file mode 100644 index 0000000000..9d9b44666f --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Soma @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 6 +xmin: -0.038584709167480 +xmax: 0.094075202941895 +ymin: -0.689266920089722 +ymax: -0.584711074829102 +iter: 98.160003662109375 +cx: 0.405000001192093 +cy: 0.037000000476837 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 0 +greenmode: 1 +bluemode: 2 +redinvert: 0 +greeninvert: 1 +blueinvert: 1 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Spark b/plug-ins/FractalExplorer/fractalexplorer-examples/Spark new file mode 100644 index 0000000000..f4b2ec6993 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Spark @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 7 +xmin: -0.014160156250000 +xmax: 1.014160156250000 +ymin: -0.261108398437500 +ymax: 0.252685546875000 +iter: 42.944999694824219 +cx: -1.386999964714050 +cy: -0.257999986410141 +redstretch: 124.000000000000000 +greenstretch: 112.000000000000000 +bluestretch: 60.000000000000000 +redmode: 0 +greenmode: 2 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 1 +colormode: 1 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Suns b/plug-ins/FractalExplorer/fractalexplorer-examples/Suns new file mode 100644 index 0000000000..683a147c05 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Suns @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 1 +xmin: -0.573436737060547 +xmax: -0.399868011474609 +ymin: -0.177640914916992 +ymax: -0.024647712707520 +iter: 607.361999511718750 +cx: -0.723999977111816 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 2 +greenmode: 0 +bluemode: 1 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Tentacles b/plug-ins/FractalExplorer/fractalexplorer-examples/Tentacles new file mode 100644 index 0000000000..19402f4dc3 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Tentacles @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 6 +xmin: -0.430790066719055 +xmax: -0.421469658613205 +ymin: 0.017559077590704 +ymax: 0.025114785879850 +iter: 67.485000610351562 +cx: -0.086000002920628 +cy: -0.012000000104308 +redstretch: 128.000000000000000 +greenstretch: 37.000000000000000 +bluestretch: 93.000000000000000 +redmode: 2 +greenmode: 2 +bluemode: 1 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/The Green Place b/plug-ins/FractalExplorer/fractalexplorer-examples/The Green Place new file mode 100644 index 0000000000..8504364f4b --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/The Green Place @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 2 +xmin: 0.064453125000000 +xmax: 0.950683593750000 +ymin: -0.389648437500000 +ymax: 0.476440429687500 +iter: 50.000000000000000 +cx: -1.067000031471252 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 110.000000000000000 +bluestretch: 2.000000000000000 +redmode: 0 +greenmode: 1 +bluemode: 1 +redinvert: 1 +greeninvert: 1 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Wave b/plug-ins/FractalExplorer/fractalexplorer-examples/Wave new file mode 100644 index 0000000000..e9deae072d --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Wave @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 2 +xmin: -0.937500000000000 +xmax: 1.125000000000000 +ymin: -0.609375000000000 +ymax: 0.609375000000000 +iter: 50.000000000000000 +cx: -1.042999982833862 +cy: -0.037000000476837 +redstretch: 128.000000000000000 +greenstretch: 22.000000000000000 +bluestretch: 101.000000000000000 +redmode: 1 +greenmode: 1 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Wood b/plug-ins/FractalExplorer/fractalexplorer-examples/Wood new file mode 100644 index 0000000000..ffdd12078f --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Wood @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -1.287102937698364 +xmax: -1.287102580070496 +ymin: 0.099825143814087 +ymax: 0.099862203001976 +iter: 50.000000000000000 +cx: -0.750000000000000 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 109.905998229980469 +bluestretch: 2.009999990463257 +redmode: 1 +greenmode: 0 +bluemode: 0 +redinvert: 1 +greeninvert: 1 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Zooming Circle b/plug-ins/FractalExplorer/fractalexplorer-examples/Zooming Circle new file mode 100644 index 0000000000..75a704daf3 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Zooming Circle @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 3 +xmin: 0.187500000000000 +xmax: 0.984375000000000 +ymin: 0.843750000000000 +ymax: 1.734375000000000 +iter: 50.000000000000000 +cx: 0.773000001907349 +cy: -0.723999977111816 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 2 +greenmode: 0 +bluemode: 1 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/logo.h b/plug-ins/FractalExplorer/logo.h new file mode 100644 index 0000000000..cb94ec445f --- /dev/null +++ b/plug-ins/FractalExplorer/logo.h @@ -0,0 +1,788 @@ +/* GIMP header image file format (Indexed): //logo.h */ + +static unsigned int logo_width = 200; +static unsigned int logo_height = 72; + +/* Call this macro repeatedly. After each use, the pixel data can be extracted */ + +#define HEADER_PIXEL(data,pixel) \ + pixel[0] = palette_data[data[0]*3+2]; \ + pixel[1] = palette_data[data[0]*3+1]; \ + pixel[2] = palette_data[data[0]*3+0]; \ + data--; + +static unsigned char +palette_data[] = { 4,2,2,4,110,178,32,4,122,4,36, +86,15,3,66,4,58,127,36,8,186,4,34,122,17,2, +34,4,19,66,12,4,162,90,2,69,88,2,48,7,20, +2,25,2,103,8,14,48,4,58,186,90,3,154,82,2, +129,55,2,34,17,2,18,17,34,191,94,2,101,57,2, +70,7,32,154,12,22,157,17,3,50,4,88,150,96,3, +186,86,2,138,87,2,86,212,214,210,4,19,98,52,2, +154,15,11,2,4,132,216,7,18,125,12,6,82,37,12, +18,4,88,189,86,14,48,128,2,157,32,4,138,4,60, +155,4,48,126,60,2,218,7,10,52,13,12,66,129,2, +50,56,2,52,52,14,98,4,47,157,6,20,87,48,2, +24,58,2,101,120,2,141,52,5,170,4,113,215,127,2, +73,4,90,210,4,52,112,36,18,194,59,2,85,42,2, +10,107,2,173,95,2,114,31,3,52,4,79,160,84,3, +189,14,10,40,30,2,69,96,2,58,113,2,126,9,37, +231,17,33,170,28,14,2,4,30,146,68,10,37,132,2, +82,23,4,7,4,10,122,4,36,108,32,2,37,7,27, +2,4,98,175,84,10,146,4,101,191,4,14,146,8,29, +86,4,2,170,8,60,230,84,10,162,72,2,39,102,2, +142,4,142,221,4,49,143,68,12,170,4,124,213,15,4, +74,114,2,69,112,2,158,32,3,23,8,50,190,111,2, +104,6,40,154,96,2,210,6,28,104,60,2,138,61,2, +25,68,2,114,58,2,125,39,2,114,73,2,69,16,4, +58,4,88,177,56,14,26,138,2,173,4,68,176,71,2, +55,76,2,210,4,78,130,17,3,42,6,27,69,112,2, +49,12,26,178,47,13,159,18,11,10,13,11,74,141,2, +58,52,18,234,4,82,186,4,126,198,4,103,213,4,62, +206,4,72,226,12,46,210,72,12,222,12,26,146,20,34, +210,4,113,197,4,131,229,4,48,170,4,76,170,7,43, +95,52,30,218,15,11,170,52,14,202,12,14,86,4,40, +174,108,14,202,156,2,186,60,12,130,5,40,129,73,13, +189,12,42,138,44,14,202,4,59,143,4,124,229,4,69, +191,4,69,157,4,60,114,4,43,110,14,14,58,20,26, +157,28,26,210,4,87,162,4,91,202,4,110,226,4,98, +226,4,101,202,17,14,186,28,18,18,60,2,234,28,10, +114,4,30,114,8,10,162,12,54,186,20,26,130,100,10, +170,40,18,154,4,22,114,28,26,234,4,22,58,4,66, +226,4,54,202,12,42,202,4,38,98,4,145,234,4,76, +146,4,94,148,4,138,213,4,94,186,4,54,126,4,54, +154,4,118,211,4,106,178,4,106,188,4,54,142,4,94, +170,4,70,202,4,118,197,4,54,173,4,82,178,72,4, +172,36,10,138,76,14,162,4,98,210,4,118,226,112,2, +114,24,19,8,30,2,85,84,6,226,141,2,73,28,30, +10,28,46,186,112,4,206,36,10,90,36,2,174,108,2, +58,41,3,130,44,10,194,9,33,130,92,2,162,51,2, +42,12,32,162,81,3,146,44,11,26,28,6,146,44,2, +178,30,12,10,60,10,178,64,2,146,28,10,178,92,10, +210,5,41,146,40,2,102,96,2,125,100,2,88,74,2, +157,142,2,159,26,10,55,143,2,50,73,2,102,134,2, +142,73,2,84,127,2,126,142,2,82,156,2,178,28,10, +158,28,26,114,84,14,202,12,4,10,5,20,74,17,2, +26,92,2,194,7,19,106}; + +static unsigned char header_data[] = { 71,99,218,218,99,11,71,218,71,71, +218,99,99,99,71,99,218,99,99,99,99,218,71,218,99,218,218,99,99,218, +218,99,99,218,99,218,99,58,218,99,99,99,58,218,99,99,99,58,99,58, +99,58,11,58,99,58,58,11,99,58,99,58,99,99,99,218,99,218,99,58, +99,71,99,218,71,12,12,12,12,12,12,12,12,12,92,19,19,19,92,92, +92,92,19,108,19,19,19,19,19,19,53,53,53,53,101,19,19,53,53,19, +19,19,12,92,92,12,12,12,71,71,218,99,218,218,71,71,12,12,218,99, +58,58,58,99,99,99,58,99,99,99,11,58,11,58,58,99,58,99,99,99, +58,99,99,99,99,58,99,99,99,99,99,218,99,99,11,99,99,99,11,99, +99,218,218,218,99,218,99,99,218,218,99,99,218,99,218,218,99,99,218,11, +218,71,99,218,99,218,218,99,71,8,218,99,218,218,99,99,99,99,99,99, +218,218,99,99,218,99,218,99,218,71,99,99,99,218,99,99,218,99,99,99, +218,218,99,99,99,99,58,99,58,30,99,99,99,99,99,99,58,99,99,58, +99,58,99,58,99,99,58,58,58,99,58,58,99,218,218,71,99,99,71,71, +71,123,12,118,71,71,12,71,123,12,12,19,19,19,53,19,19,53,53,19, +19,53,101,63,20,63,20,63,53,53,53,101,53,53,53,19,53,53,53,19, +92,12,12,12,71,12,12,12,12,12,92,71,218,218,71,218,71,71,71,71, +99,218,58,58,58,99,99,99,99,58,58,58,99,58,99,58,58,99,58,58, +99,99,58,99,99,99,99,58,99,58,30,99,99,99,218,99,58,99,99,58, +11,99,99,218,99,218,218,99,99,218,71,99,218,99,99,218,99,99,218,99, +11,218,99,218,99,11,218,99,99,8,71,71,71,99,218,71,218,99,71,218, +11,99,218,218,99,218,99,218,99,99,99,99,218,99,99,99,99,99,218,99, +99,99,99,99,99,11,99,99,99,99,99,99,58,99,58,99,58,99,58,58, +99,11,58,58,99,58,99,99,58,58,218,99,123,71,71,71,123,71,71,218, +99,99,218,71,12,12,12,12,92,19,19,53,19,53,53,53,53,19,53,53, +53,53,19,53,19,53,53,53,53,53,63,63,101,63,63,20,53,19,53,53, +53,19,92,92,12,12,12,71,71,71,71,12,12,71,71,12,12,12,12,12, +12,218,218,99,58,58,99,58,99,58,99,58,99,99,58,218,58,99,58,99, +99,99,99,11,58,99,99,58,99,99,58,58,99,99,99,99,99,99,99,99, +99,58,218,99,218,99,99,99,218,99,99,218,99,11,218,99,218,218,99,99, +218,99,218,11,99,71,99,218,71,8,99,99,218,99,99,99,218,99,99,218, +218,99,11,99,99,218,99,218,99,218,218,99,58,99,99,99,58,11,99,99, +58,99,99,58,58,58,58,99,99,99,99,218,58,99,99,99,58,58,99,99, +58,58,99,58,99,58,99,99,58,58,99,218,71,71,218,218,218,58,58,58, +218,99,71,123,12,12,12,19,19,108,108,108,92,92,92,12,71,12,12,92, +19,53,53,53,101,53,53,19,53,101,53,20,53,79,79,0,34,79,20,63, +53,53,53,19,19,19,12,12,12,71,71,71,71,71,71,123,71,12,12,12, +12,12,71,71,218,58,99,58,218,58,218,99,58,99,58,99,99,218,58,58, +58,99,58,58,99,99,58,99,58,99,99,218,58,58,99,99,99,99,99,99, +58,11,99,99,218,218,218,99,218,99,99,218,218,99,218,99,99,218,218,99, +218,99,71,218,99,218,99,99,99,8,218,218,99,218,99,218,99,218,218,99, +11,218,218,218,218,99,71,99,218,99,99,99,218,58,99,99,99,99,218,30, +58,99,58,99,58,11,58,99,58,99,58,58,58,99,58,58,99,99,58,58, +58,99,58,99,58,58,99,58,218,99,99,218,58,99,58,58,58,58,58,218, +71,12,12,71,71,12,12,12,12,71,71,118,71,71,118,71,71,12,223,19, +19,53,53,53,53,63,229,20,79,20,34,0,20,101,101,63,20,101,101,53, +108,53,53,53,53,53,101,19,92,12,12,12,12,71,71,218,218,218,71,71, +118,12,71,71,218,218,58,58,58,58,58,58,218,58,58,58,99,99,218,99, +58,58,99,99,58,99,58,99,58,58,58,99,99,99,58,99,99,99,58,58, +99,58,58,99,99,99,99,99,99,99,218,99,99,218,99,218,218,99,99,218, +99,58,99,99,218,99,218,218,218,8,99,218,99,218,99,218,11,99,218,99, +99,99,99,99,218,99,58,99,99,99,58,99,218,99,99,99,99,99,58,99, +58,218,99,99,99,58,218,58,58,58,99,99,58,99,218,58,99,99,58,218, +58,99,58,99,99,99,58,99,58,58,58,58,99,58,58,58,58,218,218,12, +71,71,71,12,12,71,71,12,71,12,71,71,71,71,12,92,19,53,53,53, +101,63,79,34,251,0,0,63,20,53,19,53,53,53,53,19,19,53,19,19, +19,108,19,19,19,19,19,19,53,53,108,12,12,12,71,71,218,58,58,58, +99,218,71,71,71,12,218,99,99,58,58,58,58,218,58,58,58,58,58,99, +99,58,58,99,58,218,58,99,99,99,99,58,99,128,99,58,99,99,11,99, +99,58,11,58,99,99,99,218,58,11,99,58,99,218,99,99,218,99,99,99, +218,71,99,99,218,99,11,99,218,8,218,99,218,99,218,99,99,218,99,218, +58,218,58,218,99,99,218,99,58,99,99,99,99,78,11,58,99,58,99,99, +99,58,58,99,58,11,58,58,218,99,99,58,58,58,99,58,58,58,99,99, +58,58,58,58,58,58,99,58,99,99,99,58,58,58,58,58,218,71,118,12, +71,71,71,71,71,12,71,71,71,71,71,12,92,19,19,53,53,63,20,251, +0,79,79,0,79,34,34,79,0,63,229,20,63,101,53,101,19,53,19,92, +12,71,12,92,12,12,12,12,12,92,19,92,92,71,12,118,71,218,99,58, +58,58,58,58,218,123,71,218,58,58,58,99,58,58,58,218,58,218,58,58, +218,58,99,58,58,58,99,99,58,99,58,99,218,99,99,99,58,58,58,11, +58,58,99,58,99,99,30,99,99,99,58,218,218,30,99,218,99,99,99,218, +99,99,218,218,99,99,218,71,99,8,99,99,71,99,218,218,99,218,99,218, +99,218,99,58,11,58,99,99,11,58,99,58,99,99,99,99,58,58,99,99, +58,99,99,99,99,58,99,78,58,58,99,99,218,78,58,218,58,99,212,58, +99,58,58,58,218,58,58,58,58,58,58,58,58,58,218,71,12,12,71,71, +123,218,218,58,99,71,123,71,71,12,19,19,19,53,53,19,19,53,63,53, +101,101,101,63,101,101,20,20,79,0,0,79,79,34,251,79,79,251,101,53, +19,92,12,71,71,71,218,12,218,12,71,71,71,71,71,12,71,71,123,71, +58,58,58,58,58,58,58,99,99,58,58,58,99,58,58,58,99,58,99,58, +99,58,58,99,58,58,58,58,99,58,99,58,99,58,99,58,99,99,58,58, +99,99,99,58,99,58,58,58,99,99,99,30,128,58,99,99,99,99,99,58, +218,99,99,218,218,99,99,218,71,8,71,218,99,99,99,99,218,99,99,99, +99,30,58,11,58,58,99,58,58,58,58,30,58,58,99,99,99,58,99,58, +99,58,99,58,58,58,218,99,58,99,58,58,58,218,99,58,58,58,58,58, +58,99,99,99,58,99,99,58,58,212,99,58,58,218,71,71,218,218,99,58, +58,58,58,218,123,71,71,12,108,19,19,108,19,19,223,92,19,92,12,12, +19,19,19,19,53,53,63,63,229,0,34,34,79,0,79,0,75,34,0,34, +79,20,53,19,92,12,71,71,71,218,71,123,71,123,71,71,71,71,71,71, +71,218,58,58,58,58,58,58,58,99,58,58,58,58,58,58,58,58,99,58, +58,99,99,58,99,58,58,58,58,58,58,99,58,99,58,99,58,58,99,99, +58,58,99,99,58,58,218,58,58,99,58,99,11,58,58,99,58,218,99,99, +99,99,218,99,99,218,99,99,99,8,99,218,99,218,99,99,99,99,58,58, +11,58,99,58,58,30,58,11,58,11,58,99,99,58,99,58,58,58,99,58, +58,99,58,99,99,58,58,99,58,99,58,99,58,99,212,58,58,58,58,58, +58,58,58,58,58,58,58,58,58,58,212,58,218,218,218,99,58,58,58,58, +58,99,71,71,71,12,71,71,12,12,12,71,71,123,71,218,71,71,71,92, +19,108,63,79,229,126,0,79,0,0,34,34,34,126,34,251,79,0,126,34, +79,0,79,20,63,19,19,12,71,71,71,218,71,99,71,71,71,71,71,71, +71,71,218,58,58,58,212,58,58,58,58,58,58,58,58,58,58,58,58,58, +58,58,99,58,58,99,58,58,99,99,128,218,58,58,99,58,99,58,58,99, +218,58,58,218,99,99,99,99,99,99,58,99,99,58,30,218,99,99,99,99, +99,99,218,99,99,99,218,218,99,8,218,99,99,99,58,99,99,99,99,99, +58,58,218,99,99,99,58,99,58,58,58,99,58,99,58,99,99,99,58,58, +99,99,58,58,58,58,58,58,99,99,58,99,99,58,58,58,58,99,58,58, +99,58,99,58,78,212,99,212,99,58,58,99,58,58,78,78,246,99,212,58, +99,71,123,71,71,71,71,71,218,218,71,123,218,218,218,118,12,19,63,63, +0,0,0,34,34,0,34,79,79,79,0,34,79,79,20,101,53,101,53,19, +53,53,101,101,53,53,19,19,19,92,218,218,218,218,218,212,78,58,218,218, +71,71,71,11,58,246,58,78,246,58,58,58,99,99,58,58,99,58,212,58, +99,58,99,58,58,99,58,58,58,58,58,212,218,58,58,99,58,58,99,58, +99,99,99,58,58,99,99,99,58,99,58,58,99,99,99,58,58,99,99,99, +99,99,99,11,58,99,99,99,218,8,99,99,218,99,99,218,99,218,58,58, +11,78,58,99,58,99,58,99,58,11,58,99,58,99,58,58,58,99,99,58, +99,99,99,58,58,58,58,58,58,58,58,58,58,58,58,212,99,58,212,99, +58,58,78,58,78,58,58,58,58,58,58,58,58,58,246,58,246,58,58,71, +218,71,71,71,218,71,71,71,71,218,218,71,71,92,92,53,63,126,79,0, +0,79,0,79,34,79,0,126,79,79,79,79,79,229,229,101,53,108,92,71, +71,71,71,71,71,12,12,19,108,19,92,71,71,71,71,218,212,246,78,58, +58,218,218,71,71,58,58,212,212,78,212,78,78,58,58,58,58,58,99,58, +78,58,58,99,58,58,58,58,58,58,58,58,99,58,99,58,58,212,99,58, +58,99,58,99,58,99,99,58,58,99,99,58,58,58,58,11,78,99,99,99, +99,58,99,58,71,99,99,99,99,8,99,99,99,218,99,58,99,30,58,11, +58,11,58,58,99,58,58,99,58,99,58,99,99,58,99,58,99,58,58,99, +58,58,58,58,58,78,58,99,58,99,58,58,58,58,99,58,212,99,58,58, +58,78,78,78,58,58,58,58,58,212,58,78,58,78,78,78,58,99,218,218, +71,218,218,71,58,99,58,99,71,71,71,12,19,20,79,251,0,251,79,251, +79,63,126,79,79,79,79,229,79,79,79,126,126,79,79,63,20,53,53,92, +12,12,218,71,71,218,218,218,71,218,71,71,71,218,71,218,218,58,246,246, +78,212,78,58,218,218,58,58,58,246,78,212,78,212,58,58,58,58,58,212, +78,78,78,58,58,99,58,58,58,58,58,58,58,58,58,218,99,99,58,99, +58,58,218,99,58,58,99,58,99,99,58,99,99,99,58,99,99,58,58,58, +218,99,11,58,99,99,99,218,99,8,99,30,218,58,11,99,99,58,99,58, +99,58,58,99,218,99,218,58,99,99,58,58,58,58,99,58,99,99,58,99, +58,58,58,78,78,58,58,58,58,58,99,246,78,78,58,58,58,58,58,78, +78,212,78,246,246,58,58,58,212,58,212,246,78,246,58,212,218,218,218,218, +218,58,246,58,246,58,218,218,123,12,19,19,53,53,101,53,63,101,63,63, +63,63,63,63,63,101,63,53,63,53,53,53,53,108,19,19,19,19,108,19, +92,92,12,12,71,71,218,99,99,218,218,218,218,218,71,71,71,218,218,246, +78,78,246,78,78,78,58,58,58,78,78,78,78,246,58,58,58,58,58,78, +212,78,78,58,58,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58, +58,99,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,99,99,99, +58,99,58,99,99,58,99,99,99,8,99,99,30,58,58,58,58,58,58,99, +58,11,99,58,99,58,58,58,58,58,58,99,58,58,58,58,58,58,99,58, +99,58,78,58,58,58,99,58,58,78,246,78,58,78,58,58,58,58,78,212, +246,78,246,78,78,99,212,246,78,246,58,246,246,78,246,218,218,218,58,58, +246,78,78,246,58,218,218,71,12,12,108,92,108,19,108,53,63,63,63,53, +53,53,19,223,92,92,49,118,118,118,118,118,118,118,71,118,118,12,12,12, +92,71,71,123,218,99,11,58,58,58,58,78,58,99,99,123,71,218,218,218, +246,246,78,212,78,212,78,246,78,78,58,78,246,78,246,78,58,58,58,58, +99,78,246,78,246,99,58,58,58,58,58,78,78,78,78,99,58,99,58,99, +78,58,58,99,58,218,218,58,58,99,58,58,58,218,99,58,58,58,58,11, +58,99,99,99,58,99,99,218,58,8,99,99,58,99,58,11,58,11,58,58, +99,58,99,58,99,58,99,58,58,218,58,58,58,99,58,99,58,58,58,99, +78,58,58,58,99,58,58,78,78,58,246,78,246,99,58,58,58,212,78,78, +246,58,246,58,78,78,78,58,246,78,78,58,246,58,58,58,212,58,246,78, +212,246,58,58,71,71,71,71,12,92,92,92,108,53,53,53,19,19,223,223, +49,223,92,49,49,223,92,49,118,118,118,71,118,112,118,11,11,112,71,112, +71,71,11,11,11,99,99,58,58,78,78,78,246,78,246,58,99,71,218,71, +218,78,78,246,78,246,58,246,78,246,212,58,246,58,246,78,212,78,246,58, +58,58,78,246,246,78,78,99,58,58,58,212,78,58,78,58,58,58,58,58, +78,58,78,99,58,58,99,58,58,58,58,99,58,58,99,218,58,99,58,58, +58,58,99,58,99,99,58,99,99,8,99,99,58,58,58,99,58,99,99,58, +99,58,58,58,58,58,58,218,99,58,99,58,58,58,58,58,99,58,58,78, +58,78,78,78,78,58,78,58,78,78,78,212,78,58,78,58,78,212,78,246, +78,246,78,78,212,246,246,78,246,212,246,246,78,246,58,246,78,246,58,246, +246,58,99,218,218,218,71,12,92,19,19,19,19,19,223,223,49,223,49,118, +49,112,30,30,237,103,208,208,245,208,245,208,245,245,245,103,208,103,22,237, +30,30,11,11,11,11,71,71,11,99,58,78,78,246,58,246,246,246,58,99, +99,218,212,78,246,78,246,78,246,58,78,58,246,78,58,246,78,212,78,246, +58,212,58,78,78,212,78,78,58,58,99,78,78,78,78,78,58,58,99,58, +58,78,78,78,58,58,99,58,99,58,58,99,58,218,58,58,99,58,58,218, +99,58,99,99,58,99,30,99,99,8,58,99,58,99,58,58,58,99,58,99, +58,218,218,58,99,58,99,58,58,58,78,99,78,58,99,58,58,78,58,78, +78,58,78,78,58,78,78,246,246,212,78,78,78,58,78,246,78,246,58,246, +212,78,58,78,78,58,246,78,78,78,58,246,78,246,78,58,246,78,78,78, +58,218,99,11,71,12,92,92,92,223,223,223,223,223,49,118,112,22,237,208, +72,245,55,243,245,72,72,72,65,208,236,208,208,245,72,55,243,55,55,243, +245,245,245,103,237,237,30,11,11,112,71,11,99,58,78,246,246,246,246,78, +58,218,58,58,246,78,212,78,246,78,246,78,212,78,78,212,78,246,78,78, +58,78,78,78,78,78,246,246,246,58,58,78,58,246,78,212,78,78,99,58, +58,78,58,58,58,58,58,99,58,58,58,58,78,58,58,99,99,58,58,58, +99,218,58,99,99,99,58,99,58,8,99,99,99,58,11,58,58,58,99,58, +58,58,58,58,58,58,58,99,99,78,78,58,58,78,58,58,99,78,78,78, +78,78,78,78,78,78,212,246,246,246,246,78,78,246,246,58,246,78,246,78, +78,78,212,246,246,246,78,78,212,246,246,246,58,246,246,78,246,246,78,58, +218,99,71,12,12,92,92,82,223,49,223,118,112,22,208,72,72,208,65,22, +22,112,11,112,112,112,112,112,118,118,118,112,112,112,30,244,244,30,237,65, +236,72,55,55,243,243,208,208,237,237,11,71,11,11,71,11,99,58,246,246, +246,78,78,246,58,246,78,246,58,246,58,246,58,246,246,78,78,78,212,78, +212,246,212,78,246,246,58,78,78,246,99,246,246,58,246,58,78,78,78,58, +78,78,78,78,78,78,58,58,58,99,58,58,78,99,58,58,58,218,99,99, +58,58,99,58,99,58,58,99,99,8,58,58,99,58,99,218,99,58,99,99, +99,58,99,58,99,58,58,58,58,78,58,58,58,58,58,58,58,78,212,78, +78,58,246,78,58,246,246,246,246,246,246,246,78,58,246,78,246,58,246,58, +246,78,78,78,58,246,212,78,78,78,58,246,78,212,246,58,78,212,58,99, +218,71,12,92,19,223,49,49,118,62,30,22,208,208,103,30,244,112,244,118, +112,23,49,49,49,49,49,49,49,49,82,82,223,82,49,118,23,118,118,112, +11,30,237,22,65,245,55,243,245,245,103,237,237,11,71,11,71,71,218,58, +246,246,78,246,78,212,78,246,246,78,246,246,78,78,212,78,212,78,246,78, +78,58,246,78,58,246,78,212,78,246,78,78,78,78,78,212,246,246,246,78, +58,78,78,78,58,78,78,58,58,58,58,58,99,58,58,58,58,58,99,58, +58,58,58,58,58,99,99,58,58,8,99,99,58,58,58,99,99,99,99,58, +58,99,78,58,78,99,58,58,99,78,78,78,58,78,58,58,78,246,78,212, +78,78,58,78,246,246,246,246,246,246,58,78,78,246,58,246,78,246,78,246, +78,212,78,212,212,246,78,78,246,246,78,212,58,99,212,246,246,58,99,218, +118,12,92,223,223,49,49,11,237,208,208,103,244,23,118,112,118,112,49,49, +19,82,82,82,223,49,66,49,49,82,223,223,101,19,223,82,223,82,223,82, +82,49,23,112,11,244,30,65,72,55,55,245,208,22,237,112,11,118,71,218, +218,58,58,78,246,78,212,78,78,212,99,78,212,246,78,246,78,246,78,212, +246,246,78,246,246,78,246,78,246,58,246,78,58,78,246,246,246,246,212,246, +78,78,78,78,78,58,78,78,99,58,78,78,78,99,58,58,99,58,99,99, +58,99,99,99,99,58,99,58,99,8,99,99,99,58,58,99,58,58,99,58, +58,58,78,78,58,58,58,58,58,58,78,78,78,78,78,58,246,246,246,246, +246,78,78,212,246,246,246,246,246,246,78,212,78,246,78,212,78,246,58,246, +78,246,78,58,58,212,246,58,78,246,246,58,58,58,58,246,58,218,71,12, +223,223,49,49,49,30,65,72,72,30,112,118,118,112,118,49,223,223,223,49, +244,244,244,244,23,23,23,23,70,66,49,70,49,70,70,118,23,23,23,23, +49,223,19,82,223,223,23,11,244,237,208,72,55,55,208,103,30,11,11,49, +71,71,99,58,246,78,246,246,58,246,58,58,246,212,78,246,58,246,78,58, +58,212,78,78,212,78,212,78,78,78,212,78,78,78,246,212,246,246,246,212, +246,58,78,78,78,78,58,78,78,99,58,58,78,58,58,58,99,58,58,58, +58,58,58,58,99,58,99,58,99,8,99,58,58,218,58,58,58,99,58,58, +58,99,58,58,99,58,78,78,78,78,78,78,78,58,246,246,246,212,246,246, +212,246,78,246,246,246,246,246,212,246,246,78,246,58,212,246,78,78,78,246, +58,246,212,99,58,246,78,246,246,58,58,58,58,78,246,58,99,118,12,92, +223,223,223,11,22,72,208,244,49,112,112,118,49,82,223,49,244,244,242,62, +23,62,23,23,244,244,244,244,244,244,62,30,244,244,244,244,23,112,210,23, +62,244,244,23,223,82,53,82,49,112,30,30,65,72,55,245,208,237,30,112, +71,49,118,71,99,78,78,78,246,246,58,99,58,246,212,78,246,58,246,212, +99,58,212,246,78,246,78,246,212,246,78,246,246,212,246,246,246,212,246,246, +246,246,78,78,246,246,78,78,78,78,58,58,78,58,58,58,58,58,99,99, +99,78,99,58,99,99,58,99,58,8,58,99,58,99,99,58,58,99,58,58, +58,58,58,58,78,58,78,78,58,78,58,246,78,78,78,212,246,246,212,246, +246,246,246,246,246,246,246,246,246,246,246,58,246,58,99,212,246,212,78,78, +78,99,58,58,78,246,58,78,246,58,58,58,58,212,58,218,71,12,49,49, +49,112,22,72,65,112,49,112,112,112,223,19,118,62,244,62,62,23,23,244, +244,244,244,112,23,49,49,223,19,223,82,223,223,49,223,23,118,112,244,30, +62,62,62,62,23,62,23,223,82,8,82,71,30,244,22,72,55,245,103,237, +11,71,12,12,71,99,78,78,78,58,212,58,58,58,58,212,78,58,246,78, +58,58,58,212,78,246,58,78,78,212,212,246,246,246,212,246,246,246,246,246, +246,246,58,78,78,58,246,212,78,78,58,78,58,78,78,78,58,78,58,58, +218,58,58,99,58,99,99,99,58,8,218,99,58,58,58,99,58,58,99,78, +78,58,99,58,58,78,58,78,246,78,78,58,78,212,246,246,246,246,246,246, +246,246,246,212,246,212,246,246,246,212,78,246,58,58,58,246,78,78,212,246, +58,58,58,58,212,78,246,212,58,58,58,58,58,58,71,12,49,223,223,49, +30,208,72,30,49,49,112,49,223,223,23,22,244,62,23,23,62,22,112,118, +49,49,223,118,23,244,30,242,22,242,242,62,242,244,244,112,23,49,49,223, +23,112,30,244,62,112,210,23,23,49,82,8,223,244,237,30,208,55,243,245, +22,30,71,118,12,71,99,78,78,246,212,58,58,58,58,246,246,246,78,246, +58,58,58,78,212,78,246,246,246,58,58,212,246,246,246,246,246,246,246,246, +246,78,246,58,246,246,246,78,212,78,78,78,58,78,58,78,58,58,99,58, +58,58,99,58,58,58,58,58,58,8,58,99,58,58,58,58,99,58,78,78, +58,58,78,58,58,78,78,58,78,78,78,78,78,246,212,246,246,246,246,246, +246,246,246,246,246,246,212,246,246,246,78,58,58,58,58,246,78,78,246,99, +212,58,212,58,212,78,78,58,58,218,58,212,58,99,71,49,223,49,49,30, +55,72,112,49,244,11,49,82,112,242,242,62,23,62,244,112,118,223,82,118, +30,236,29,225,231,33,248,42,42,42,219,2,42,219,110,107,231,29,65,244, +112,223,223,49,112,30,30,23,23,23,23,49,82,101,49,30,30,242,72,243, +208,103,30,71,118,12,71,99,78,78,78,58,58,58,58,58,78,58,246,78, +58,58,99,58,246,58,246,58,246,58,99,58,212,246,246,212,246,246,246,246, +246,246,246,246,212,246,246,246,246,78,58,78,78,78,78,78,58,78,78,78, +58,78,99,99,99,58,58,99,99,8,99,58,99,99,58,58,58,58,78,78, +78,78,58,58,58,78,78,78,78,78,246,246,58,246,246,246,246,246,246,246, +246,246,212,246,99,58,246,246,246,246,212,58,58,58,99,212,78,212,212,58, +78,58,58,58,246,246,78,58,71,218,58,58,11,71,118,223,49,23,103,243, +22,49,118,30,118,82,49,30,242,62,70,62,244,118,223,82,112,65,93,205, +217,42,80,147,98,4,26,8,8,8,8,121,8,8,26,4,98,210,111,219, +29,29,65,112,223,82,23,30,244,62,62,62,62,49,82,82,112,30,30,65, +243,245,103,30,71,118,12,71,218,212,246,58,58,212,212,58,58,246,212,78, +58,58,212,58,58,246,78,246,58,58,58,58,246,212,246,246,246,246,246,246, +246,212,246,246,246,246,212,246,246,212,78,246,212,78,58,78,78,78,58,78, +78,78,58,58,58,58,99,58,58,8,58,58,58,58,58,58,58,58,237,78, +58,78,78,58,78,78,212,78,246,78,78,246,246,246,246,246,246,246,246,246, +246,246,246,58,58,58,246,246,246,246,58,58,99,58,58,246,246,78,99,78, +246,78,58,58,58,58,58,218,12,99,58,99,71,92,49,223,118,22,41,65, +223,23,30,118,19,23,22,242,23,23,30,112,223,19,112,29,222,232,87,80, +98,26,121,8,20,253,20,20,20,20,101,20,20,20,253,253,20,8,121,26, +4,14,2,231,29,30,49,82,112,30,244,62,23,210,118,82,101,223,30,244, +65,55,243,103,237,71,118,71,71,99,58,58,58,58,218,58,58,58,246,212, +58,58,212,78,99,58,246,246,78,58,58,58,58,246,246,246,246,246,246,246, +246,246,246,212,246,246,246,246,246,246,246,78,78,78,78,78,58,78,58,78, +78,58,58,58,78,99,58,58,99,8,99,58,58,99,99,58,58,58,58,237, +78,78,58,78,78,246,78,246,78,246,78,246,246,246,246,246,246,246,246,246, +246,246,58,58,58,58,246,246,246,58,99,78,246,212,99,246,212,58,78,246, +58,246,58,58,58,212,218,12,118,58,58,71,12,49,19,49,237,41,65,49, +118,112,223,82,244,236,62,66,62,30,82,8,112,93,68,6,137,88,162,253, +253,20,253,19,223,23,244,244,54,242,54,242,244,62,112,49,223,20,20,20, +20,253,26,98,14,33,29,244,82,101,112,22,62,62,62,23,49,53,82,30, +112,22,243,243,208,11,71,118,12,218,99,58,58,58,12,71,58,58,58,58, +99,58,58,246,246,58,58,246,246,58,58,58,99,58,246,246,246,246,78,58, +246,212,246,246,246,246,246,212,246,246,78,78,78,78,58,78,78,78,78,58, +78,58,78,237,78,58,99,99,78,8,58,99,58,58,78,78,78,78,78,78, +58,78,78,58,78,246,78,212,246,246,246,246,246,246,246,246,246,103,246,246, +246,246,58,58,58,99,212,246,246,58,212,78,246,58,58,58,58,58,212,78, +78,78,58,58,58,58,123,49,218,99,11,118,223,223,82,237,41,208,23,118, +237,223,82,244,18,210,23,23,112,19,223,103,64,6,148,147,26,253,20,8, +66,23,54,111,219,219,137,24,76,24,163,25,137,42,204,42,151,109,244,223, +20,20,20,20,8,4,111,231,236,23,82,12,237,62,62,23,62,223,253,223, +237,244,22,41,245,103,11,112,118,71,218,58,58,99,92,92,128,58,58,58, +58,58,58,212,78,58,58,212,58,58,58,78,78,58,212,246,246,246,58,58, +212,246,212,246,246,246,246,246,246,212,246,78,246,246,78,78,78,78,78,58, +78,58,58,78,99,58,58,58,99,8,99,58,58,58,58,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,246,246,246,246,103,246,246,246,246,246, +246,78,58,58,58,58,58,212,58,58,78,212,78,78,99,58,58,212,78,246, +212,212,58,58,58,218,92,12,218,99,71,12,223,82,118,243,55,23,223,30, +223,19,244,93,54,49,23,112,82,82,245,153,138,234,162,8,253,101,49,30, +111,125,24,201,142,16,159,142,43,95,197,156,193,193,51,141,224,25,248,231, +65,118,20,20,20,20,121,210,231,55,244,82,49,30,244,62,62,244,223,20, +118,237,112,208,243,245,237,71,118,49,71,58,58,218,92,92,12,58,58,99, +58,58,212,78,212,212,58,58,58,58,58,212,78,58,58,246,246,246,99,58, +99,246,246,246,246,246,246,246,246,246,212,246,58,78,78,78,78,78,58,78, +78,58,78,78,58,78,58,99,58,8,99,99,58,58,58,78,78,58,78,58, +78,78,78,246,78,78,78,246,246,246,246,246,246,246,246,103,246,246,246,246, +246,58,58,58,58,58,58,58,58,58,78,78,246,78,58,58,58,212,78,58, +58,78,58,58,58,12,92,12,99,218,118,19,82,223,22,116,237,49,112,112, +101,112,93,109,70,112,118,82,223,55,136,185,44,26,253,253,82,62,107,163, +117,16,114,159,161,106,98,46,26,26,26,26,26,4,32,81,44,142,43,234, +10,56,236,23,20,20,20,8,4,219,225,237,19,82,11,244,62,54,62,223, +20,112,30,244,72,239,103,237,71,12,12,71,58,71,92,92,12,128,58,58, +58,58,246,78,246,58,58,58,99,58,58,246,78,78,58,246,246,58,58,58, +58,212,246,212,246,246,246,246,246,246,78,78,246,58,246,58,78,246,78,58, +78,58,78,78,58,58,58,58,58,8,58,58,58,58,78,237,58,78,78,78, +78,78,78,58,246,246,212,246,246,246,246,246,246,246,246,246,246,246,246,246, +78,58,58,58,58,58,99,58,58,246,246,246,58,246,58,58,58,78,246,218, +11,58,58,58,58,12,92,71,218,11,49,223,101,23,239,93,23,118,244,223, +223,65,29,70,70,112,82,82,72,233,135,152,121,253,20,49,242,179,176,39, +198,156,32,47,26,26,69,113,26,47,9,47,162,113,26,121,113,252,152,159, +43,234,217,238,30,253,20,251,8,4,107,17,30,82,223,22,62,62,54,244, +82,19,237,112,244,41,245,30,112,71,92,71,99,71,12,92,92,71,78,58, +58,246,246,58,78,212,58,58,58,58,58,78,246,58,99,58,212,58,58,58, +58,78,246,246,246,246,246,246,246,246,246,246,78,78,78,78,246,58,78,78, +58,58,58,99,58,99,58,58,58,8,58,99,99,58,58,78,78,58,78,58, +78,58,78,78,78,78,78,246,246,246,246,246,246,246,246,246,78,246,246,246, +58,58,78,58,78,58,58,99,58,78,58,246,246,58,58,58,212,58,58,12, +71,58,58,58,99,92,92,71,218,71,223,8,19,22,150,30,49,11,23,101, +30,93,54,49,112,49,20,30,254,181,95,26,253,253,49,65,163,166,206,202, +52,26,8,121,4,161,43,114,139,131,57,200,195,188,192,88,26,26,121,98, +197,67,234,145,230,22,82,20,20,8,98,107,100,112,253,112,103,244,54,62, +49,20,49,237,118,208,243,103,11,11,12,92,92,92,92,12,49,12,58,58, +78,58,246,78,246,78,212,99,58,58,78,246,58,78,58,58,58,99,58,58, +58,99,246,246,246,246,246,246,246,246,246,246,246,78,246,78,246,78,58,78, +78,58,78,78,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,78,78,78,78,246,246,246,246,246,246,246,246,246,246,246,58,212,58,246, +99,212,58,99,78,99,58,58,78,246,58,58,58,78,78,58,78,78,99,71, +12,71,58,58,12,12,12,71,11,12,223,101,49,243,100,118,223,112,82,19, +93,225,113,23,244,101,223,41,129,199,52,253,20,223,242,124,39,57,117,122, +121,121,47,44,195,35,94,196,165,189,189,189,27,84,200,139,67,186,26,121, +240,106,159,234,175,68,242,20,20,20,8,210,238,93,223,19,237,244,23,54, +62,19,101,244,112,30,243,208,237,11,12,92,49,223,12,12,92,12,58,78, +246,78,58,246,78,212,78,78,58,58,212,58,58,58,78,99,58,58,99,58, +58,58,246,246,246,246,246,246,246,246,246,246,78,246,58,78,58,78,78,78, +78,78,237,78,58,58,58,58,58,8,99,58,99,58,78,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,103,246,246,246,246,218,58,58,78,78, +58,99,71,12,58,78,58,78,58,78,123,12,78,78,58,212,78,78,123,92, +12,12,99,99,12,92,92,71,11,118,82,101,112,116,236,82,112,112,82,118, +100,110,66,23,49,101,244,215,73,43,69,253,101,23,219,59,97,202,52,8, +8,4,120,97,187,139,27,143,46,113,26,26,46,88,60,27,131,200,192,47, +82,66,81,159,234,170,68,118,20,251,20,26,2,64,244,101,118,22,23,62, +62,49,20,118,244,23,208,245,30,11,71,12,92,12,12,49,12,12,71,58, +246,246,78,246,78,246,58,78,58,78,212,218,12,246,78,99,58,78,78,11, +12,58,58,246,246,103,246,246,58,246,246,246,246,78,246,78,78,78,58,78, +78,58,58,58,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,212,78,246,246,78,99,58,246,246,246,246,246,246,71,12,99,58,58,99, +58,58,53,251,71,78,78,78,78,246,19,19,71,246,246,78,212,246,12,92, +12,12,12,12,92,12,12,71,218,118,19,101,244,239,65,223,244,11,53,112, +222,235,66,112,223,20,72,45,90,221,8,253,19,242,214,97,57,152,26,8, +26,188,57,187,139,186,8,8,8,8,121,121,8,8,26,4,44,131,94,67, +162,82,113,44,159,76,220,29,82,0,20,8,98,238,245,82,82,237,23,62, +54,112,20,223,237,49,22,245,237,11,71,49,12,92,12,12,12,12,71,78, +246,58,246,58,246,78,246,58,246,212,58,19,101,218,78,78,99,58,58,53, +101,71,58,246,246,246,78,71,92,58,246,246,212,246,78,58,58,78,78,58, +78,78,78,78,58,58,58,58,58,8,99,99,58,99,58,78,78,58,99,58, +78,78,58,246,78,58,71,92,218,246,246,246,103,246,12,92,92,58,58,58, +58,218,63,53,19,246,246,78,78,212,53,92,92,212,246,78,78,58,92,218, +12,12,92,92,92,12,12,71,11,118,101,101,22,116,242,223,237,11,8,30, +17,62,70,112,8,53,72,172,134,143,8,20,223,109,102,57,97,81,121,82, +252,114,35,157,165,26,253,8,8,46,182,4,26,26,8,8,113,160,190,35, +186,66,121,106,117,152,232,68,49,79,20,8,26,42,17,223,53,22,112,244, +54,244,8,82,30,118,30,245,30,11,99,12,12,92,123,12,12,12,71,78, +246,78,246,78,58,246,246,58,246,58,12,53,53,12,78,78,78,99,12,63, +63,92,78,78,246,246,78,229,229,12,246,246,246,212,78,71,71,58,78,78, +58,78,78,58,58,58,212,58,58,8,99,58,58,58,58,78,78,58,99,218, +99,58,246,78,78,58,12,92,12,78,246,246,246,218,92,92,19,71,58,58, +58,12,38,92,53,71,246,58,246,218,108,92,92,218,246,212,78,58,12,218, +12,12,12,92,12,92,12,71,71,118,82,8,103,116,242,82,244,11,82,30, +222,210,223,23,8,101,55,172,183,186,8,253,223,110,102,157,97,161,8,8, +127,67,190,140,189,26,8,8,69,127,120,5,52,26,26,8,121,9,84,187, +43,113,82,98,142,152,89,119,244,20,0,253,121,219,64,23,101,30,30,23, +54,244,82,101,30,112,112,72,237,71,30,12,12,92,118,12,12,12,71,58, +246,246,58,246,58,212,78,246,58,246,108,63,53,19,78,78,78,58,53,101, +53,108,78,246,246,246,108,79,20,53,246,246,246,78,99,92,92,12,99,78, +78,58,58,218,218,218,99,58,58,8,99,99,58,58,58,99,99,218,71,11, +99,99,78,246,212,71,218,71,92,71,246,246,246,71,92,92,19,19,58,58, +58,92,53,92,92,108,58,246,246,71,92,92,92,92,212,246,246,58,123,48, +12,12,12,92,92,12,12,12,99,118,19,101,237,116,65,49,30,112,82,244, +222,235,26,118,82,101,65,136,183,7,8,8,82,242,21,157,57,192,69,8, +26,7,191,157,190,60,9,8,26,52,84,131,60,4,121,8,26,113,67,94, +142,113,82,98,43,152,10,119,244,251,0,253,121,111,64,23,101,244,22,49, +62,62,82,101,112,23,112,103,30,71,11,12,12,118,12,12,118,12,71,78, +78,246,78,58,218,58,78,246,246,12,53,101,53,19,58,78,58,12,63,63, +53,63,218,246,246,71,79,20,63,101,218,246,246,218,12,19,108,12,99,58, +99,71,218,71,71,218,71,218,71,8,99,58,99,99,58,58,11,218,71,218, +71,71,218,58,58,99,218,99,71,92,218,78,246,92,92,12,223,53,71,58, +58,19,19,92,92,19,12,78,78,12,92,92,92,92,71,78,78,218,123,241, +48,12,12,92,49,12,118,12,71,49,223,101,11,116,65,66,112,11,82,112, +100,54,66,66,223,20,244,105,90,159,8,8,8,244,10,167,187,202,98,8, +121,47,192,169,190,35,195,188,188,195,57,84,106,47,8,8,8,122,195,140, +95,66,82,98,142,221,175,119,244,251,251,20,8,219,64,112,101,30,242,118, +23,62,19,20,11,118,112,22,11,11,99,12,12,12,12,71,12,118,71,58, +246,58,246,99,12,99,212,78,58,19,53,53,101,53,58,78,218,53,101,53, +53,63,218,246,246,63,0,101,19,53,12,78,58,12,108,92,19,108,92,71, +71,12,71,71,123,71,71,123,71,8,99,99,58,58,58,11,58,11,99,218, +99,11,99,99,218,99,218,99,71,12,12,99,99,92,92,92,12,19,53,71, +99,38,53,12,12,92,19,218,212,92,92,92,48,12,108,128,246,218,123,48, +128,123,12,12,12,12,12,118,71,71,223,8,112,41,55,49,49,244,223,49, +93,231,70,82,223,20,82,116,181,158,252,8,20,223,242,214,57,157,156,46, +8,66,26,147,44,198,86,196,86,198,44,52,4,8,8,8,46,60,97,194, +52,82,82,180,159,177,232,64,66,79,20,8,26,231,100,49,8,237,62,23, +62,244,82,82,30,223,11,237,112,11,11,12,12,71,12,12,118,12,71,218, +246,78,58,218,92,99,246,212,92,53,79,79,53,53,218,58,19,63,38,126, +53,101,92,58,19,251,63,223,19,19,92,71,12,223,92,223,223,92,19,92, +12,71,123,71,71,71,71,71,71,8,11,58,11,58,99,58,99,58,99,58, +58,218,218,218,99,218,11,99,99,71,92,92,12,49,92,71,99,12,53,53, +92,20,53,123,48,12,92,19,218,19,92,12,241,48,92,92,58,218,92,241, +128,212,71,12,118,12,12,71,71,112,223,19,82,55,116,112,49,244,223,19, +208,238,235,66,223,253,82,22,250,73,95,113,8,82,49,111,102,207,132,188, +252,69,8,121,162,4,47,52,127,4,4,26,26,8,8,46,186,86,169,95, +66,8,4,95,192,87,45,236,101,251,253,8,70,222,236,223,223,237,244,23, +54,244,82,82,237,118,11,244,71,11,99,71,118,12,12,12,12,12,12,58, +78,78,246,123,108,12,212,12,53,63,13,83,63,53,12,92,53,226,13,13, +53,53,53,226,75,63,12,71,92,19,19,92,92,92,19,12,12,12,92,12, +71,71,71,71,71,12,71,71,71,8,99,99,58,99,99,58,58,99,58,58, +11,218,71,71,11,218,99,99,58,218,12,19,92,92,92,99,78,58,92,101, +75,251,53,12,123,48,92,108,101,63,92,12,241,241,92,92,108,92,108,128, +212,246,58,12,12,12,49,12,12,118,12,49,19,237,116,22,49,118,244,82, +112,17,231,70,223,82,20,82,93,45,133,7,46,8,8,49,50,224,168,207, +142,60,127,46,8,26,8,8,8,8,8,8,121,26,47,192,166,169,7,113, +66,113,7,156,36,217,28,23,251,251,20,26,111,222,30,8,49,22,112,62, +242,112,101,112,30,49,244,11,112,11,99,71,12,12,118,12,12,12,71,246, +246,78,212,92,108,92,218,53,38,13,0,0,63,101,20,63,101,75,83,83, +63,101,229,79,126,92,58,78,12,19,92,92,19,92,12,71,71,118,71,71, +218,12,71,71,71,71,71,218,99,8,218,99,218,58,58,218,99,99,58,99, +58,58,99,99,218,99,218,99,58,58,99,92,92,92,19,58,78,78,99,108, +0,34,38,123,123,48,123,92,53,108,92,12,241,241,241,123,92,19,19,123, +241,212,246,99,12,71,12,71,12,71,118,223,82,118,245,100,112,49,30,118, +223,237,238,111,113,223,19,20,49,93,144,184,44,113,8,253,19,210,173,141, +168,57,196,142,60,52,122,182,113,113,122,3,60,159,130,86,43,122,26,223, +47,106,95,76,89,68,244,20,251,20,8,210,238,72,223,19,30,112,23,62, +244,223,20,118,112,112,244,118,11,99,99,218,71,218,71,12,12,71,58,58, +78,246,246,92,63,53,53,101,83,0,83,83,53,63,63,53,20,83,0,0, +53,53,79,0,226,78,58,78,12,108,92,19,92,71,58,58,99,71,71,123, +71,218,218,71,218,218,99,218,99,8,99,99,218,218,99,99,99,99,58,99, +99,58,99,11,71,99,99,58,58,58,58,71,92,92,19,78,78,58,78,218, +53,63,101,123,123,48,48,123,92,19,92,92,241,241,241,241,92,92,92,12, +241,212,78,78,123,118,12,12,12,12,112,92,49,223,30,247,65,49,23,112, +82,23,72,231,14,26,82,19,101,49,17,146,102,154,147,69,8,82,49,23, +249,104,158,39,206,169,86,130,202,142,202,114,39,117,76,88,4,66,66,113, +7,95,234,175,68,22,101,20,251,8,4,107,100,112,101,112,30,23,112,62, +49,101,49,244,118,112,112,118,11,78,99,99,99,58,71,12,92,99,246,78, +246,58,218,108,108,53,63,229,0,83,34,13,53,53,101,38,13,0,0,13, +53,101,63,101,99,78,58,78,71,19,19,92,71,58,99,58,11,218,218,71, +99,99,99,99,218,58,99,218,218,8,71,218,99,99,218,58,99,99,99,99, +99,58,99,58,99,218,11,58,58,99,58,58,71,92,92,58,78,78,78,78, +118,19,53,123,48,128,128,48,123,12,92,92,48,128,212,48,241,12,12,92, +241,128,246,246,246,71,12,12,12,71,71,118,49,223,49,208,116,22,49,23, +11,223,223,72,225,235,113,82,82,101,49,65,68,164,201,7,162,26,8,121, +66,223,23,216,14,36,177,152,154,152,80,255,98,66,66,223,66,4,32,152, +152,163,228,222,112,251,20,20,8,113,219,222,22,82,23,22,62,112,54,244, +101,82,112,112,23,118,112,11,11,78,58,58,246,99,71,71,99,58,246,212, +58,58,123,108,108,53,20,13,101,19,34,13,53,53,53,0,75,38,0,34, +63,53,53,71,58,78,58,78,11,92,92,71,58,58,58,58,99,218,11,99, +11,58,218,218,99,99,218,99,99,8,99,71,99,99,99,99,99,218,58,99, +218,58,99,99,99,58,58,78,58,99,58,58,58,71,12,78,78,78,78,78, +58,12,19,12,48,218,246,218,48,12,92,92,241,48,58,212,48,241,12,92, +48,241,212,58,212,212,123,118,12,71,118,118,12,223,49,118,55,239,244,223, +112,112,82,118,236,225,14,4,26,82,101,19,112,93,153,21,224,174,88,162, +26,26,121,82,66,66,66,66,66,66,26,82,66,26,113,127,32,44,51,87, +248,222,236,223,20,20,20,8,70,111,17,237,223,49,237,30,62,54,30,118, +253,49,112,118,23,118,118,11,99,58,58,58,212,99,71,218,246,78,78,58, +58,58,108,108,63,38,13,92,58,12,13,251,53,63,251,79,12,71,34,34, +251,53,19,58,78,78,78,58,58,71,71,58,99,99,58,99,58,11,58,99, +99,99,99,218,218,99,218,218,99,8,71,99,218,218,218,99,218,99,99,99, +99,71,58,99,99,99,99,58,58,99,58,58,78,58,99,78,58,78,58,78, +78,78,99,218,128,58,58,78,128,48,12,92,123,241,78,246,58,48,241,218, +12,128,212,212,58,58,212,218,71,12,71,12,118,12,223,49,11,243,55,244, +49,112,244,223,49,236,17,111,4,121,82,82,8,223,244,29,153,61,148,234, +152,32,147,52,4,4,113,26,113,26,98,98,147,255,7,193,24,163,217,238, +110,112,101,20,20,253,8,70,107,222,22,223,223,244,244,244,244,242,112,82, +223,118,23,23,49,118,71,11,58,58,58,246,246,58,99,78,58,212,212,78, +58,99,53,53,38,83,19,58,246,19,34,79,251,34,34,71,58,71,79,13, +83,63,218,58,58,99,58,78,58,99,78,58,99,99,99,58,58,99,99,58, +218,11,218,99,11,218,11,99,71,8,71,218,218,11,71,99,218,99,99,99, +99,218,11,99,58,58,58,58,11,58,99,218,58,58,78,78,78,78,58,58, +78,78,78,78,58,78,78,78,58,58,48,123,48,48,128,78,246,78,128,241, +241,241,128,212,58,58,58,58,218,12,118,71,71,112,118,223,49,11,245,55, +30,49,112,244,223,19,30,93,107,111,4,26,101,101,8,101,112,242,93,203, +6,170,21,74,51,51,104,24,234,76,24,104,76,124,232,56,225,18,30,223, +20,20,20,20,8,66,235,231,236,112,223,118,30,112,112,54,244,112,82,49, +112,23,118,118,12,11,99,99,246,58,58,58,78,58,246,246,78,78,212,78, +58,12,53,229,34,40,78,78,58,38,0,13,13,79,71,58,58,71,13,0, +38,71,58,99,58,99,58,99,78,58,58,99,99,99,71,99,58,99,218,99, +71,99,218,99,99,71,218,99,71,8,71,71,71,123,218,218,11,218,218,218, +218,99,218,218,99,99,99,99,58,99,99,99,99,99,58,78,78,58,58,99, +99,78,78,246,78,212,78,78,58,78,128,48,48,241,48,246,78,58,246,128, +128,128,128,128,212,78,212,78,58,218,71,71,12,12,118,118,49,49,112,208, +41,22,49,112,244,23,19,49,22,93,219,14,4,8,82,101,20,101,223,49, +30,65,18,29,17,203,228,230,56,96,91,225,225,236,242,112,49,82,20,20, +20,20,82,113,210,107,29,22,118,223,112,30,244,244,62,112,23,82,223,49, +118,118,49,49,118,71,99,246,58,58,212,246,246,78,212,58,246,246,78,58, +218,53,209,126,40,78,78,78,218,0,34,34,79,71,78,99,58,71,251,229, +12,58,99,99,99,58,58,58,58,99,99,99,99,218,99,58,99,99,99,218, +99,218,11,218,218,11,218,71,71,8,71,123,71,71,218,123,71,99,11,99, +218,11,99,71,218,99,58,99,99,58,218,218,99,99,58,58,58,58,99,58, +58,99,58,246,246,246,78,58,58,58,78,58,48,48,241,78,246,78,78,58, +58,241,241,241,212,58,246,78,246,58,218,71,71,71,118,118,118,49,49,112, +103,243,236,112,49,244,112,49,223,118,65,93,107,14,98,113,82,8,101,253, +101,20,101,82,82,223,118,118,49,49,49,82,82,101,101,20,20,253,253,121, +26,70,235,110,29,103,118,223,223,11,244,244,54,242,244,49,19,223,49,118, +118,49,12,71,11,99,212,246,78,78,78,78,212,246,78,58,78,212,78,58, +12,38,213,71,78,58,58,78,40,83,79,20,99,58,99,58,99,12,92,71, +78,58,99,99,99,99,99,99,99,99,218,218,99,218,218,99,218,218,11,218, +11,218,218,71,218,218,71,123,71,8,71,71,12,71,71,218,218,218,71,71, +218,218,218,218,71,218,218,99,99,218,99,99,99,99,99,99,58,99,58,99, +99,99,99,58,78,78,78,78,58,99,58,58,58,128,48,128,78,78,58,78, +212,212,212,241,128,58,246,246,58,246,58,218,218,118,71,71,118,12,118,49, +23,237,245,55,208,23,118,23,112,223,223,118,244,236,18,110,14,210,4,66, +121,8,82,20,82,101,101,251,20,20,20,101,8,20,8,8,26,26,210,235, +109,110,65,30,118,223,49,244,244,244,244,242,65,30,223,82,49,118,118,49, +92,49,118,71,11,78,246,78,58,246,212,246,78,78,246,78,246,78,212,218, +53,92,99,78,58,58,58,246,53,0,53,99,99,58,99,58,99,71,218,58, +99,58,99,218,58,99,58,78,99,99,11,99,71,99,99,218,99,99,218,71, +123,218,71,218,12,71,71,71,71,8,71,71,71,71,71,118,71,71,218,99, +71,71,71,123,71,71,218,99,99,218,218,71,11,218,99,99,58,99,58,99, +99,99,218,58,58,78,78,78,58,99,99,58,58,58,58,128,246,78,58,58, +58,58,246,128,128,58,212,246,78,78,78,58,58,218,71,71,11,118,118,49, +12,23,11,103,243,72,237,23,23,112,23,223,19,223,112,22,109,18,29,111, +111,210,210,70,4,26,26,26,26,26,26,4,4,70,98,235,2,18,29,65, +54,23,223,49,23,244,244,112,244,54,22,244,118,82,223,223,118,92,49,49, +223,71,11,99,99,78,246,58,246,78,58,212,78,78,58,58,246,78,58,218, +71,78,58,58,99,58,58,99,19,77,58,58,58,218,99,58,58,58,58,58, +218,99,11,218,58,99,218,58,218,218,71,218,218,71,99,71,218,71,71,218, +71,123,71,71,71,71,71,71,12,8,118,118,71,71,118,71,71,71,118,12, +71,123,71,71,71,71,71,71,218,99,99,99,218,218,71,218,99,99,58,99, +99,218,99,218,58,58,246,78,78,99,99,99,99,58,246,78,58,246,58,58, +58,58,58,78,78,58,58,58,246,212,99,58,58,58,218,99,71,118,11,118, +49,49,49,23,11,208,55,245,22,112,23,23,23,23,49,49,49,223,112,30, +22,236,18,18,18,29,18,18,18,18,107,236,29,236,236,22,30,23,223,223, +223,118,118,112,244,112,244,242,242,30,23,223,82,223,49,49,49,223,49,12, +71,71,99,58,246,212,58,58,58,78,78,78,58,58,58,58,78,212,246,78, +78,58,58,11,99,58,78,78,99,58,58,99,218,99,58,99,58,58,58,218, +99,71,218,99,218,58,99,218,218,71,218,123,71,99,71,218,71,71,71,12, +71,71,12,12,12,12,12,12,12,8,12,12,12,12,12,12,118,118,71,71, +71,218,71,123,71,71,71,71,123,71,218,11,218,71,218,123,218,99,218,58, +99,99,11,218,71,99,99,58,78,58,99,99,71,99,58,78,246,246,246,58, +58,218,58,99,78,78,246,78,78,246,58,58,58,212,58,58,99,71,71,118, +71,118,118,23,49,112,112,103,72,72,65,244,112,23,118,118,70,223,223,223, +223,49,118,23,118,112,112,244,112,112,23,23,23,49,49,223,223,49,23,118, +244,244,112,62,244,109,22,30,49,223,223,82,49,223,49,223,223,118,118,71, +99,99,99,78,78,246,58,58,78,78,58,58,58,99,78,246,78,78,78,78, +99,99,99,58,99,58,78,78,58,99,99,11,218,99,99,58,58,11,99,218, +218,218,71,99,218,218,11,218,123,71,218,71,71,218,71,71,123,71,118,12, +71,12,12,12,12,12,12,12,12,8,12,12,12,12,12,12,71,71,71,118, +71,118,71,71,118,12,71,71,71,71,99,218,123,71,218,71,218,71,99,99, +99,218,218,71,218,218,99,58,58,58,58,218,99,218,218,99,58,99,78,58, +58,99,99,99,58,58,78,246,246,78,78,78,58,99,58,58,99,58,99,71, +11,71,12,23,118,118,118,23,112,30,103,208,208,65,242,112,118,23,23,118, +118,118,49,112,23,112,11,112,112,112,118,49,49,49,49,112,23,23,112,244, +244,22,22,22,242,112,49,223,223,66,223,49,223,49,223,49,12,71,71,99, +99,58,212,212,246,58,78,78,58,58,99,99,99,58,78,78,78,78,58,58, +99,99,99,58,58,58,58,58,99,218,71,218,99,99,218,58,99,99,71,218, +71,71,218,99,71,99,123,71,118,118,123,71,71,123,71,71,12,12,118,12, +12,12,12,12,12,12,71,12,71,8,12,92,12,92,71,12,118,118,12,12, +118,71,71,12,71,71,118,12,12,71,118,218,71,71,71,12,71,12,218,218, +99,99,218,218,71,71,71,218,99,99,99,99,71,71,218,71,99,58,58,58, +58,58,99,11,99,99,99,58,246,78,246,78,58,99,99,99,58,58,99,99, +99,11,71,112,112,118,118,92,118,23,118,112,30,237,103,65,65,22,30,54, +244,244,23,112,244,112,244,112,244,23,244,23,112,62,244,244,30,242,22,242, +22,30,23,49,49,19,82,223,223,49,49,49,223,49,12,11,11,218,99,58, +58,78,78,78,246,78,78,99,99,58,99,58,58,78,78,78,58,99,218,218, +71,99,99,99,58,99,58,99,71,123,71,218,99,99,218,99,218,71,12,71, +71,218,71,71,218,71,71,71,71,71,12,71,71,71,118,12,12,12,71,71, +12,12,12,12,118,12,12,92,12,8,12,12,71,12,12,12,12,12,71,12, +118,12,12,12,118,12,71,12,12,71,71,71,71,123,71,12,12,71,71,218, +218,218,11,71,123,71,71,218,71,99,99,58,99,99,71,218,218,99,218,58, +58,58,58,99,218,71,99,218,58,58,58,246,212,58,58,99,99,58,99,58, +58,58,58,218,71,71,112,71,118,118,49,23,118,118,49,112,112,30,237,22, +22,22,103,22,22,22,22,22,30,242,22,22,22,103,22,22,30,112,112,23, +49,49,49,82,223,66,49,49,49,49,223,12,118,71,218,99,99,58,99,58, +78,246,78,246,58,58,99,99,218,218,99,99,99,58,58,58,99,218,71,218, +99,99,58,58,58,99,218,123,71,71,218,218,99,99,99,123,71,71,71,92, +71,71,218,218,71,12,12,12,118,71,12,118,71,71,71,12,12,12,12,12, +12,12,118,118,12,12,12,12,12,8,92,92,92,12,12,12,12,12,12,12, +92,12,12,12,71,12,118,12,12,12,12,12,71,71,71,12,12,71,118,71, +71,123,71,71,71,118,71,71,71,123,71,218,218,99,218,71,12,71,71,218, +218,58,58,99,58,71,71,218,218,218,99,58,58,58,58,58,99,99,99,218, +218,99,58,58,99,99,99,11,11,11,23,112,118,112,49,118,118,118,23,118, +49,118,23,112,112,112,112,244,112,112,118,112,118,49,49,223,49,223,223,49, +223,223,49,49,223,49,223,223,118,118,71,11,218,99,218,99,218,78,58,58, +58,58,58,218,218,218,218,218,58,99,58,58,58,58,218,99,71,71,123,71, +218,99,58,99,99,71,71,12,12,71,71,71,218,218,218,71,118,71,71,12, +123,71,12,71,71,12,12,12,118,71,12,12,12,118,118,12,71,118,12,118, +12,12,12,12,12,92,12,12,92,8,92,92,12,12,92,12,92,12,12,12, +12,12,118,12,12,12,12,12,12,12,118,12,12,71,118,71,12,12,71,118, +71,71,71,123,218,118,12,71,71,71,71,99,99,218,218,71,71,71,71,71, +99,218,99,58,99,218,218,71,71,71,218,71,58,99,58,58,99,58,218,99, +99,218,99,99,58,58,58,99,58,99,218,11,71,112,11,112,118,23,118,23, +49,118,118,92,49,92,49,92,49,92,49,223,223,49,223,49,49,49,49,82, +49,49,49,223,118,118,71,71,11,71,99,218,218,99,58,58,58,58,58,58, +58,218,218,218,71,218,218,99,99,99,99,58,218,218,71,123,71,71,218,11, +99,99,218,218,71,71,12,71,12,218,218,218,71,218,118,12,71,118,71,71, +71,71,71,71,118,71,12,12,12,71,12,12,12,12,12,12,12,49,12,12, +12,92,12,49,12,92,12,12,92,8,92,92,92,92,92,12,92,12,12,92, +12,92,12,92,12,71,71,12,12,12,12,71,12,118,71,118,71,118,12,12, +12,12,71,71,218,71,71,118,118,12,12,118,71,218,71,218,123,12,12,12, +12,71,71,99,99,99,218,71,71,71,71,123,71,218,218,58,99,99,58,218, +99,218,218,11,99,218,99,218,218,58,58,58,99,218,71,11,71,71,118,11, +112,71,112,118,112,12,118,118,118,118,118,118,118,118,118,118,223,223,49,49, +118,118,118,71,71,71,218,71,218,71,99,99,99,218,58,58,58,218,218,218, +218,71,71,218,123,71,218,99,58,218,218,99,71,118,12,71,71,71,218,218, +218,99,71,118,12,12,12,71,71,123,71,71,71,12,118,12,92,71,118,71, +12,12,71,12,12,92,12,12,12,118,12,12,12,12,12,92,12,12,12,92, +71,92,12,92,92,92,92,92,12,8,92,92,92,92,92,92,92,92,92,12, +92,12,92,12,92,92,12,118,92,12,12,92,92,12,12,12,12,12,12,12, +12,12,71,118,12,118,71,71,12,12,12,12,118,71,218,71,218,71,118,12, +12,71,12,71,218,71,99,218,123,71,71,12,71,118,71,71,99,218,218,99, +218,99,218,218,218,71,123,71,218,218,218,218,99,99,99,58,99,99,99,218, +99,71,71,71,11,71,11,11,11,11,11,11,11,11,71,118,12,118,218,218, +71,218,71,71,218,71,99,71,99,99,99,58,218,99,218,218,71,71,71,71, +71,71,123,71,11,99,99,99,218,218,71,71,12,12,12,71,123,218,71,218, +71,118,71,12,118,12,12,71,71,218,118,12,12,12,92,12,71,118,71,71, +12,71,92,12,92,12,12,12,118,12,12,92,92,12,92,12,92,92,92,92, +92,92,92,92,12,92,92,92,92,8,92,92,92,12,92,92,92,92,92,92, +92,92,92,12,92,92,12,12,92,92,92,12,92,92,12,12,118,12,12,92, +92,12,12,12,71,71,71,118,12,118,12,12,12,71,12,71,71,71,71,12, +12,12,118,12,12,118,218,71,71,71,12,71,71,71,12,12,71,71,71,11, +218,99,218,218,218,218,71,71,71,71,71,71,71,71,218,218,218,218,99,218, +218,218,99,218,99,218,218,218,218,218,218,218,218,99,218,11,218,71,71,71, +71,123,71,123,71,218,99,218,218,11,218,99,71,71,71,71,71,71,71,92, +71,71,71,123,71,218,71,71,71,118,12,12,12,12,71,71,71,218,71,71, +12,12,12,12,12,12,12,71,71,71,12,12,12,12,12,12,12,12,118,12, +12,92,92,92,12,92,12,71,12,92,92,12,92,92,92,92,92,12,92,92, +92,92,92,92,92,92,92,92,92,8,92,19,92,92,92,92,92,223,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,12,118,12,12, +12,92,92,12,92,12,12,12,71,12,49,12,92,92,12,12,71,12,12,12, +12,71,12,12,12,12,71,12,71,71,218,218,71,118,12,12,12,71,12,12, +71,123,71,71,99,71,71,123,71,123,71,123,71,71,71,71,71,71,71,71, +71,218,218,218,71,71,218,71,218,71,218,71,71,123,71,123,71,123,71,123, +218,71,218,218,218,218,71,71,71,71,71,12,12,12,12,12,12,12,71,71, +71,123,218,218,71,71,12,12,12,71,12,12,12,12,71,71,71,12,118,12, +12,92,12,12,12,12,12,12,71,12,92,12,92,12,12,118,12,12,12,92, +92,92,92,92,92,12,92,92,12,92,92,92,92,19,12,92,92,92,92,92, +12,92,92,92,92,92,92,92,92,8,19,108,19,108,12,19,92,92,92,92, +92,92,92,92,92,19,92,92,92,92,92,92,92,92,92,92,92,92,12,92, +92,92,92,92,92,92,12,12,12,12,71,12,92,92,92,92,12,92,118,12, +12,12,12,12,92,12,12,12,71,12,71,71,71,12,12,12,12,12,12,92, +112,118,71,12,71,71,71,218,71,71,71,71,71,71,12,12,12,12,12,12, +12,118,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, +71,71,71,71,71,71,71,71,118,71,12,71,12,12,12,12,12,71,71,123, +71,71,71,92,12,12,12,12,92,92,71,12,12,12,12,71,12,12,92,12, +92,92,12,118,12,12,118,12,12,92,92,92,92,12,12,12,12,92,92,92, +92,12,92,12,92,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,19,19,108,92,8,92,92,19,92,108,92,19,92,92,92, +92,108,92,92,92,12,92,92,12,92,92,92,92,92,92,92,92,92,92,12, +12,92,92,92,92,223,12,92,12,12,12,12,12,92,92,12,92,12,12,12, +12,12,12,12,49,12,92,92,92,92,12,12,71,12,12,12,12,12,12,12, +92,92,118,92,12,12,118,12,12,12,12,12,12,71,12,12,12,12,12,12, +12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, +12,12,118,118,12,118,12,12,12,12,12,12,12,12,12,12,12,12,71,12, +12,12,71,92,12,92,92,49,12,12,12,12,118,12,12,118,92,12,92,92, +12,12,12,12,123,12,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,92,92,19,92,92,108, +92,19,92,108,108,92,108,92,108,8,19,108,19,92,19,108,108,108,92,19, +92,92,19,92,108,108,92,108,108,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,12,12,12,12,12,12,92,92,92,92,92,92,12,12,12,12,12,118,12, +12,12,12,92,12,12,12,12,71,12,12,12,12,71,71,12,12,71,118,118, +12,12,12,12,12,118,12,12,12,92,12,12,12,12,12,71,12,12,118,12, +12,71,12,12,12,12,12,92,118,118,12,12,12,12,71,12,12,12,49,12, +92,12,92,92,92,12,92,12,12,12,12,12,92,92,92,92,92,92,92,92, +12,12,71,92,92,92,12,92,223,92,92,92,12,92,92,92,92,92,12,19, +92,92,92,92,92,92,108,92,108,19,92,108,108,108,92,92,19,108,92,108, +19,92,19,92,108,92,108,19,19,8,19,108,19,108,108,19,92,19,108,19, +19,108,108,19,19,92,108,92,92,108,19,12,108,108,92,19,108,108,92,19, +92,92,92,92,92,92,108,19,92,92,92,92,12,92,92,92,92,92,92,92, +92,92,92,12,12,118,123,92,12,12,92,92,92,92,92,92,12,12,12,12, +12,92,12,12,92,12,92,92,92,92,92,92,12,12,12,12,12,12,12,71, +71,12,12,12,12,12,12,12,71,12,12,12,12,12,12,92,12,12,92,12, +92,12,12,49,12,92,12,12,12,12,12,71,12,12,12,12,92,12,92,12, +92,92,92,92,92,12,12,12,12,92,12,12,92,92,92,92,92,92,12,12, +12,92,92,92,92,19,108,92,92,92,92,92,92,92,92,19,92,108,108,92, +92,92,92,19,108,92,19,108,92,108,108,92,19,92,108,19,108,92,108,92, +19,108,108,92,108,108,19,92,108,8,19,19,19,19,19,108,19,19,108,92, +19,19,108,92,19,19,108,19,108,92,108,19,92,19,92,92,92,19,92,92, +92,92,92,92,92,92,19,108,92,19,19,92,92,92,92,92,92,92,223,92, +223,92,92,92,92,92,92,92,92,92,92,92,92,223,92,92,92,12,92,12, +12,12,12,12,92,12,12,92,12,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,92,49,92,12,92,92,12,12,92,12,92,12,92,12,12,92,12, +12,12,12,12,12,12,12,92,92,92,12,92,92,92,92,92,92,92,92,92, +92,92,12,12,12,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,19,92,92,108,12,92,92,92,12,19,92,92,108,92,19,19,92, +92,92,92,92,108,19,92,19,19,92,92,108,108,92,108,92,19,19,19,108, +19,19,19,19,19,19,108,19,19,8,19,53,19,53,19,53,19,53,19,108, +19,108,19,108,108,108,19,108,19,108,19,108,108,108,108,19,108,19,108,19, +19,92,108,19,19,12,108,92,108,92,108,19,108,92,92,92,92,92,92,19, +92,19,108,92,19,92,92,92,92,92,92,92,92,92,92,92,108,108,19,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,92,92,92,12,92,19,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,108,19,92,92,223,92,92,92,92,92,92, +19,108,108,108,108,19,92,92,92,92,108,108,108,108,108,92,108,92,108,19, +92,19,108,108,19,108,108,108,108,108,19,19,19,19,19,19,108,108,53,19, +108,19,108,53,19,53,19,53,19,8,19,19,19,19,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,108,19,108,19, +19,19,19,19,108,19,108,19,108,19,108,19,19,19,19,108,19,92,92,92, +19,19,108,19,108,19,19,92,92,92,92,92,92,92,92,19,19,108,19,108, +19,92,19,92,92,92,92,92,92,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,19,19,19,92,19,19,92,19,19,108,92,92,92,19,92,92,92, +92,92,92,92,92,19,19,19,19,108,19,108,92,92,92,92,92,92,19,19, +92,19,223,19,108,19,108,92,19,19,19,19,19,19,108,19,108,19,108,19, +19,19,19,19,19,19,19,19,19,108,19,108,19,108,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,8}; diff --git a/plug-ins/FractalExplorer/pix_data.h b/plug-ins/FractalExplorer/pix_data.h new file mode 100644 index 0000000000..4b459e0fa0 --- /dev/null +++ b/plug-ins/FractalExplorer/pix_data.h @@ -0,0 +1,154 @@ +/* XPM */ +static char * mini_cross_xpm[] = { +"16 14 4 1", +" c None s None", +". c red", +"X c gray50", +"o c black", +" ", +" . ", +" ..X ... ", +" ..X ..... ", +" .......oo ", +" .....o ", +" ....o ", +" ...... ", +" ..o ... ", +" ..o ... ", +" .o ..X ", +" .o .o ", +" o o ", +" "}; + +/* XPM */ +static char * greendot_xpm[] = { +"18 18 21 1", +" c None", +". c #FFFFFBEEFFFF", +"X c #F7DEF7DEF7DE", +"o c #F7DEF3CEF7DE", +"O c #E79DE79DEFBE", +"+ c #D75CDB6CDF7D", +"@ c #CF3CD75CDF7D", +"# c #D75CDF7DE79D", +"$ c #B6DAC30BC71B", +"% c #9E79AEBAB6DA", +"& c #8E38A289AEBA", +"* c #EFBEF3CEF7DE", +"= c #F7DEFBEEFFFF", +"- c #86179658A699", +"; c #514479E78E38", +": c #492471C68617", +"> c #DF7DE38DE79D", +", c #9658AAAAB6DA", +"< c #30C25D7571C6", +"1 c #2081596569A6", +"2 c #1861555569A6", +" ", +" ", +" ", +" ", +" .XXX. ", +" .oO+@+Oo. ", +" .o#$%&%$#*. ", +" =O$-;:;-$>= ", +" X+,;<1<;,+X ", +" o@&:121:&@o ", +" X+,;<1<;,+X ", +" =O$-;:;-$>= ", +" .*#$,&,$#*. ", +" .oO+@+Oo. ", +" .=XoX=. ", +" ", +" ", +" "}; + + +/* XPM */ +static char * bluedot_xpm[] = { +"18 18 20 1", +" c None", +". c #FFFFFBEEFFFF", +"X c #F7DEF7DEF7DE", +"o c #F7DEF3CEF7DE", +"O c #E79DE38DEFBE", +"+ c #D75CD75CDF7D", +"@ c #D75CCF3CDF7D", +"# c #DF7DD75CE79D", +"$ c #BEFBB6DACF3C", +"% c #A6999A69B6DA", +"& c #96588E38AEBA", +"* c #F7DEEFBEF7DE", +"= c #F7DEF7DEFFFF", +"- c #8E388207A699", +"; c #618559658E38", +": c #596549248617", +"> c #E79DE38DE79D", +", c #410330C271C6", +"< c #38E3249271C6", +"1 c #30C2186169A6", +" ", +" ", +" ", +" ", +" .XoX. ", +" .oO+@+Oo. ", +" .o#$%&%$#*. ", +" =O$-;:;-$>= ", +" o+%;,<,;%+o ", +" o@&:<1<:&@o ", +" o+%;,<,;%+o ", +" =O$-;:;-$>= ", +" .*#$%&%$#*. ", +" .oO+@+Oo. ", +" .=ooo=. ", +" ", +" ", +" "}; + + +/* XPM */ +static char * Floppy6_xpm[] = { +"18 18 24 1", +" c None", +". c #861782078617", +"X c #5965596571C6", +"o c #618565955965", +"O c #596559659E79", +"+ c #0000000079E7", +"@ c #0820082071C6", +"# c #9E799E790000", +"$ c #FFFFFFFF0000", +"% c #186118614103", +"& c #965896589E79", +"* c #9E799E795965", +"= c #000000006185", +"- c #9E799E799E79", +"; c #FFFFFFFFFFFF", +": c #000000000000", +"> c #71C675D69658", +", c #BEFBBEFBBEFB", +"< c #B6DAB2CABEFB", +"1 c #1040145171C6", +"2 c #28A228A28617", +"3 c #79E77DF78E38", +"4 c #A699A289A699", +"5 c #38E33CF379E7", +" ", +" .XXoooooooooXO ", +" +@#$$$$$$$$$%+O ", +" &++*$$$$$$$$$%+O ", +" &+=-;;;;;;;;;%+O ", +" &==-;::;:;:;;%+O ", +" &++-;;;;;;;;;%+O ", +" &++-;:;:::;:;%+O ", +" &++-;;;;;;;;;%+O ", +" &+=>,,<,,,,,,1+O ", +" &++==========++O ", +" &+++22222222+++O ", +" &++;11>-333.+++O ", +" &++;++>43333+++O ", +" &++5++>4...3=++O ", +" 31+++======+++O ", +" &&&&&&&&&&&& ", +" "}; diff --git a/plug-ins/Julia/Julia.c b/plug-ins/Julia/Julia.c index 92ebfa3305..98de36b69e 100644 --- a/plug-ins/Julia/Julia.c +++ b/plug-ins/Julia/Julia.c @@ -1493,7 +1493,7 @@ Julia_logo_dialog() xpreview = gtk_preview_new (GTK_PREVIEW_COLOR); gtk_preview_size (GTK_PREVIEW (xpreview), logo_width, logo_height); temp = g_malloc((logo_width+10)*3); - datapointer=header_data; + datapointer=header_data+logo_width*logo_height-1; for (y = 0; y < logo_height; y++){ temp2=temp; for (x = 0; x< logo_width; x++) { diff --git a/plug-ins/Julia/julia.c b/plug-ins/Julia/julia.c deleted file mode 100644 index 9d5e80a368..0000000000 --- a/plug-ins/Julia/julia.c +++ /dev/null @@ -1,1411 +0,0 @@ -/********************************************************************** - * Julia Chaos Fractal Explorer Plug-in (Version 1.00) - * Daniel Cotting (cotting@mygale.org) - ********************************************************************** - * Official Homepage: http://www.mygale.org/~cotting - ********************************************************************** - * Homepages under construction: http://www.chez.com/cotting - * http://www.cyberbrain.com/cotting - * You won't be able to see anything yet, as I don't really have the - * time to build up these two sites :-( - * Have a look at www.mygale.org/~cotting instead! - ********************************************************************** - */ - -/* The GIMP -- an image manipulation program - * Copyright (C) 1995 Spencer Kimball and Peter Mattis - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include -#include -#include "gtk/gtk.h" -#include "libgimp/gimp.h" -#include "../include/logo.h" - -/***** Macros *****/ - -#define MIN(a, b) (((a) < (b)) ? (a) : (b)) -#define MAX(a, b) (((a) > (b)) ? (a) : (b)) - - -/***** Magic numbers *****/ - -#define PREVIEW_SIZE 128 -#define SCALE_WIDTH 200 -#define ENTRY_WIDTH 60 - -#define SINUS 0 -#define COSINUS 1 -#define NONE 2 - -/***** Types *****/ -typedef struct { - gdouble xmin; - gdouble xmax; - gdouble ymin; - gdouble ymax; - gdouble iter; - gdouble cx; - gdouble cy; - gint colormode; - gdouble redstretch; - gdouble greenstretch; - gdouble bluestretch; - gint redmode; - gint greenmode; - gint bluemode; -} Julia_vals_t; - -typedef struct { - GtkWidget *preview; - guchar *image; - guchar *wimage; - gint run; -} Julia_interface_t; - - - -/* Declare local functions. */ - -static void query (void); -static void run (char *name, - int nparams, - GParam *param, - int *nreturn_vals, - GParam **return_vals); - -static void Julia (GDrawable *drawable); -static void Julia_render_row (const guchar *src_row, - guchar *dest_row, - gint row, - gint row_width,gint bytes); -static void Julia_get_pixel(int x, int y, guchar *pixel); -void transform (short int *, short int *, short int *,double, double, double); - - -static void build_preview_source_image(void); - -static gint Julia_dialog(void); -static void dialog_update_preview(void); -static void dialog_create_value(char *title, GtkTable *table, int row, gdouble *value, - int left, int right); -static void dialog_scale_update(GtkAdjustment *adjustment, gdouble *value); -static void dialog_entry_update(GtkWidget *widget, gdouble *value); -static void dialog_close_callback(GtkWidget *widget, gpointer data); -static void dialog_ok_callback(GtkWidget *widget, gpointer data); -/* static void dialog_reset_callback(GtkWidget *widget, gpointer data); */ -static void dialog_cancel_callback(GtkWidget *widget, gpointer data); -static void Julia_toggle_update (GtkWidget *widget, - gpointer data); -static float xmin=-2.0; -static float xmax=2.0; - -static float ymin=-2.0; -static float ymax=2.0; -static float cx=-1.0; -static float cy=-0.2; -static float xbild; -static float ybild; -static float xdiff; -static float ydiff; - -/***** Variables *****/ - -GPlugInInfo PLUG_IN_INFO = -{ - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ -}; - -static Julia_interface_t wint = { - NULL, /* preview */ - NULL, /* image */ - NULL, /* wimage */ - FALSE /* run */ -}; /* wint */ - -static Julia_vals_t wvals = { - -2.0,2.0,-2.0,2.0,50.0,-1.0,-0.2,0,128,128,128,1,1,0, -}; /* wvals */ - -static GDrawable *drawable; -static gint tile_width, tile_height; -static gint img_width, img_height, img_bpp; -static gint sel_x1, sel_y1, sel_x2, sel_y2; -static gint sel_width, sel_height; -static gint preview_width, preview_height; -static GTile *the_tile = NULL; -static double cen_x, cen_y; -static double scale_x, scale_y; - -gint do_redsinus; -gint do_redcosinus; -gint do_rednone; - -gint do_greensinus; -gint do_greencosinus; -gint do_greennone; - -gint do_bluesinus; -gint do_bluecosinus; -gint do_bluenone; - -gint do_colormode1; -gint do_colormode2; - -static GParam *ExternalParam=NULL; -static int ExternalInt; - - - -GtkWidget * Julia_logo_dialog(void); - -GtkWidget *maindlg; -GtkWidget *logodlg; - - - - -MAIN (); - -static void -query () -{ - static GParamDef args[] = - { - { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, - { PARAM_IMAGE, "image", "Input image" }, - { PARAM_DRAWABLE, "drawable", "Input drawable" }, - { PARAM_FLOAT, "xmin", "xmin fractal image delimiter" }, - { PARAM_FLOAT, "xmax", "xmax fractal image delimiter" }, - { PARAM_FLOAT, "ymin", "ymin fractal image delimiter" }, - { PARAM_FLOAT, "ymax", "ymax fractal image delimiter" }, - { PARAM_FLOAT, "iter", "Iteration value" }, - { PARAM_FLOAT, "cx", "cx value" }, - { PARAM_FLOAT, "cy", "cy value" }, - { PARAM_INT8, "colormode", "0: Apply colormap as specified by the parameters below; 1: Apply active gradient to final image"}, - { PARAM_FLOAT, "redstretch", "Red stretching factor" }, - { PARAM_FLOAT, "greenstretch","Green stretching factor" }, - { PARAM_FLOAT, "bluestretch", "Blue stretching factor" }, - { PARAM_INT8, "redmode", "Red application mode (0:SIN;1:COS;2:NONE)" }, - { PARAM_INT8, "greenmode", "Green application mode (0:SIN;1:COS;2:NONE)" }, - { PARAM_INT8, "bluemode", "Blue application mode (0:SIN;1:COS;2:NONE)" }, - }; - static GParamDef *return_vals = NULL; - static int nargs = sizeof (args) / sizeof (args[0]); - static int nreturn_vals = 0; - - gimp_install_procedure ("plug_in_julia", - "Julia Chaos Fractal Explorer Plug-In", - "Fills the active painting area with a Julia fractal.", - "Daniel Cotting (cotting@mygale.org, www.mygale.org/~cotting)", - "Daniel Cotting (cotting@mygale.org, www.mygale.org/~cotting)", - "1th May 1997", - "/Filters/Render/Julia Fractal", - "RGB*", - PROC_PLUG_IN, - nargs, nreturn_vals, - args, return_vals); -} - - -static void -run (char *name, - int nparams, - GParam *param, - int *nreturn_vals, - GParam **return_vals) -{ - static GParam values[1]; - /* GDrawable *drawable; */ - gint32 image_ID; - GRunModeType run_mode; - double xhsiz, yhsiz; - int pwidth, pheight; - GStatusType status = STATUS_SUCCESS; - - - run_mode = param[0].data.d_int32; - - values[0].type = PARAM_STATUS; - values[0].data.d_status = status; - - *nreturn_vals = 1; - *return_vals = values; - - - - /* Get the specified drawable */ - drawable = gimp_drawable_get (param[2].data.d_drawable); - image_ID = param[1].data.d_image; - tile_width = gimp_tile_width(); - tile_height = gimp_tile_height(); - - img_width = gimp_drawable_width(drawable->id); - img_height = gimp_drawable_height(drawable->id); - img_bpp = gimp_drawable_bpp(drawable->id); - - gimp_drawable_mask_bounds(drawable->id, &sel_x1, &sel_y1, &sel_x2, &sel_y2); - - sel_width = sel_x2 - sel_x1; - sel_height = sel_y2 - sel_y1; - - cen_x = (double) (sel_x2 - 1 + sel_x1) / 2.0; - cen_y = (double) (sel_y2 - 1 + sel_y1) / 2.0; - - xhsiz = (double) (sel_width - 1) / 2.0; - yhsiz = (double) (sel_height - 1) / 2.0; - - if (xhsiz < yhsiz) { - scale_x = yhsiz / xhsiz; - scale_y = 1.0; - } else if (xhsiz > yhsiz) { - scale_x = 1.0; - scale_y = xhsiz / yhsiz; - } else { - scale_x = 1.0; - scale_y = 1.0; - } /* else */ - - /* Calculate preview size */ - if (sel_width > sel_height) { - pwidth = MIN(sel_width, PREVIEW_SIZE); - pheight = sel_height * pwidth / sel_width; - } else { - pheight = MIN(sel_height, PREVIEW_SIZE); - pwidth = sel_width * pheight / sel_height; - } /* else */ - - preview_width = MAX(pwidth, 2); /* Min size is 2 */ - preview_height = MAX(pheight, 2); - - /* See how we will run */ - switch (run_mode) { - case RUN_INTERACTIVE: - /* Possibly retrieve data */ - - gimp_get_data("plug_in_julia", &wvals); - - /* Get information from the dialog */ - - if (!Julia_dialog()) - return; - - break; - - case RUN_NONINTERACTIVE: - /* Make sure all the arguments are present */ - - if (nparams != 17) - status = STATUS_CALLING_ERROR; - - if (status == STATUS_SUCCESS) - - wvals.xmin = param[3].data.d_float; - wvals.xmax = param[4].data.d_float; - wvals.ymin = param[5].data.d_float; - wvals.ymax = param[6].data.d_float; - wvals.iter = param[7].data.d_float; - wvals.cx = param[8].data.d_float; - wvals.cy = param[9].data.d_float; - wvals.colormode = param[10].data.d_int8; - wvals.redstretch = param[11].data.d_float; - wvals.greenstretch = param[12].data.d_float; - wvals.bluestretch = param[13].data.d_float; - wvals.redmode = param[14].data.d_int8; - wvals.greenmode = param[15].data.d_int8; - wvals.bluemode = param[16].data.d_int8; - - break; - - case RUN_WITH_LAST_VALS: - /* Possibly retrieve data */ - - gimp_get_data("plug_in_julia", &wvals); - break; - - default: - break; - } /* switch */ - - - if (status == STATUS_SUCCESS) - { - /* Make sure that the drawable is indexed or RGB color */ - if (gimp_drawable_color (drawable->id)) - { - gimp_progress_init ("Rendering Julia Fractal..."); - - /* Set the tile cache size */ - - gimp_tile_cache_ntiles(2*(drawable->width / gimp_tile_width()+1)); - - /* Run! */ - - -/* gimp_tile_cache_ntiles (2 * (drawable->width / gimp_tile_width () - + 1));*/ - Julia (drawable); - if (wvals.colormode==1) ExternalParam = gimp_run_procedure("plug_in_gradmap",&ExternalInt, - PARAM_INT32, run_mode, - PARAM_IMAGE, image_ID, - PARAM_DRAWABLE, drawable->id, - PARAM_END); - - if (run_mode != RUN_NONINTERACTIVE) - gimp_displays_flush(); - - /* Store data */ - - if (run_mode == RUN_INTERACTIVE) - gimp_set_data("plug_in_julia", &wvals, sizeof(Julia_vals_t)); - } - else - { - /* gimp_message("This filter only applies on RGB-images"); */ - status = STATUS_EXECUTION_ERROR; - } - } - - values[0].data.d_status = status; - - gimp_drawable_detach (drawable); -} - -/*****/ - -static void -Julia_get_pixel(int x, int y, guchar *pixel) -{ - static gint row = -1; - static gint col = -1; - - gint newcol, newrow; - gint newcoloff, newrowoff; - guchar *p; - int i; - - if ((x < 0) || (x >= img_width) || (y < 0) || (y >= img_height)) { - pixel[0] = 0; - pixel[1] = 0; - pixel[2] = 0; - pixel[3] = 0; - - return; - } /* if */ - - newcol = x / tile_width; /* The compiler should optimize this */ - newcoloff = x % tile_width; - newrow = y / tile_height; - newrowoff = y % tile_height; - - if ((col != newcol) || (row != newrow) || (the_tile == NULL)) { - - if (the_tile != NULL) - gimp_tile_unref(the_tile, FALSE); - - the_tile = gimp_drawable_get_tile(drawable, FALSE, newrow, newcol); - gimp_tile_ref(the_tile); - col = newcol; - row = newrow; - } /* if */ - p = the_tile->data + the_tile->bpp * (the_tile->ewidth * newrowoff + newcoloff); - for (i = img_bpp; i; i--) - *pixel++ = *p++; - -} /* Julia_get_pixel */ - - - -static void -Julia_render_row (const guchar *src_row, - guchar *dest_row, - gint row, - gint row_width, - gint bytes) -{ - gint col, bytenum; - double redstretch, greenstretch, bluestretch; - for (col = 0; col < row_width ; col++) - { - float a,tb,x,y,xx; - int zaehler,color,r,g,b; - float pi=3.1415926; - cx=wvals.cx; - cy=wvals.cy; - redstretch = wvals.redstretch; - greenstretch = wvals.greenstretch; - bluestretch = wvals.bluestretch; - a=xmin+col*xdiff; - tb=ymin+row*ydiff; - x=a; - y=tb; - zaehler=0; - for (zaehler=0; (zaehler <= wvals.iter) && ((x*x+y*y)<4); zaehler++) - { - xx=x*x-y*y+cx; - y=2*x*y+cy; - x=xx; - } - color=zaehler*256/wvals.iter; - r=g=b=color; - switch (wvals.redmode) - { - case SINUS: - r = (int) redstretch*(1.0+sin((r/128.0-1)*pi)); - break; - case COSINUS: - r = (int) redstretch*(1.0+cos((r/128.0-1)*pi)); - break; - default: - break; - } - - switch (wvals.greenmode) - { - case SINUS: - g = (int) greenstretch*(1.0+sin((g/128.0-1)*pi)); - break; - case COSINUS: - g = (int) greenstretch*(1.0+cos((g/128.0-1)*pi)); - break; - default: - break; - } - switch (wvals.bluemode) - { - case SINUS: - b = (int) bluestretch*(1.0+sin((b/128.0-1)*pi)); - break; - case COSINUS: - b = (int) bluestretch*(1.0+cos((b/128.0-1)*pi)); - break; - default: - break; - } - - dest_row[col*bytes] = (int)r; - dest_row[col*bytes +1] = (int)g; - dest_row[col*bytes +2] = (int)b; - - if (bytes>3) - for (bytenum = 3; bytenumid, &x1, &y1, &x2, &y2); - - /* Get the size of the input image. (This will/must be the same - * as the size of the output image. - */ - width = drawable->width; - height = drawable->height; - bytes = drawable->bpp; - - /* allocate row buffers */ - src_row = (guchar *) malloc ((x2 - x1) * bytes); - dest_row = (guchar *) malloc ((x2 - x1) * bytes); - - - /* initialize the pixel regions */ - gimp_pixel_rgn_init (&srcPR, drawable, 0, 0, width, height, FALSE, FALSE); - gimp_pixel_rgn_init (&destPR, drawable, 0, 0, width, height, TRUE, TRUE); - - xbild=width; - ybild=height; - xdiff=(xmax-xmin)/xbild; - ydiff=(ymax-ymin)/ybild; - - for (row = y1; row < y2; row++) - - { - gimp_pixel_rgn_get_row (&srcPR, src_row, x1, row, (x2 - x1)); - - Julia_render_row (src_row, - dest_row, - row, - (x2 - x1), - bytes); - - /* store the dest */ - gimp_pixel_rgn_set_row (&destPR, dest_row, x1, row, (x2 - x1)); - - if ((row % 10) == 0) - gimp_progress_update ((double) row / (double) (y2 - y1)); - } - - /* update the processed region */ - gimp_drawable_flush (drawable); - gimp_drawable_merge_shadow (drawable->id, TRUE); - gimp_drawable_update (drawable->id, x1, y1, (x2 - x1), (y2 - y1)); - - free (src_row); - free (dest_row); -} - -/*****/ - -static void -build_preview_source_image(void) -{ - double left, right, bottom, top; - double px, py; - double dx, dy; - int x, y; - guchar *p; - guchar pixel[4]; - - wint.image = g_malloc(preview_width * preview_height * 3 * sizeof(guchar)); - wint.wimage = g_malloc(preview_width * preview_height * 3 * sizeof(guchar)); - - left = sel_x1; - right = sel_x2 - 1; - bottom = sel_y2 - 1; - top = sel_y1; - - dx = (right - left) / (preview_width - 1); - dy = (bottom - top) / (preview_height - 1); - - py = top; - - p = wint.image; - - for (y = 0; y < preview_height; y++) { - px = left; - for (x = 0; x < preview_width; x++) { - Julia_get_pixel((int) px, (int) py, pixel); - - *p++ = pixel[0]; - *p++ = pixel[1]; - *p++ = pixel[2]; - - px += dx; - } /* for */ - - py += dy; - } /* for */ -} /* build_preview_source_image */ - - -/*****/ - -static gint -Julia_dialog(void) -{ - GtkWidget *dialog; - GtkWidget *top_table; - GtkWidget *top_table2; - GtkWidget *frame; - GtkWidget *frame2; - GtkWidget *frame3; - GtkWidget *toggle; - GtkWidget *toggle_vbox; - GtkWidget *toggle_vbox2; - GtkWidget *toggle_vbox3; - GtkWidget *table, *table6; - GtkWidget *button; - gint argc; - gchar **argv; - guchar *color_cube; - GSList *redmode_group = NULL; - GSList *greenmode_group = NULL; - GSList *bluemode_group = NULL; - GSList *colormode_group = NULL; - - do_redsinus = (wvals.redmode == SINUS); - do_redcosinus = (wvals.redmode == COSINUS); - do_rednone = (wvals.redmode == NONE); - do_greensinus = (wvals.greenmode == SINUS); - do_greencosinus = (wvals.greenmode == COSINUS); - do_greennone = (wvals.greenmode == NONE); - do_bluesinus = (wvals.bluemode == SINUS); - do_bluecosinus = (wvals.bluemode == COSINUS); - do_bluenone = (wvals.bluemode == NONE); - do_colormode1 = (wvals.colormode == 0); - do_colormode2 = (wvals.colormode == 1); - - - - argc = 1; - argv = g_new(gchar *, 1); - argv[0] = g_strdup("Julia"); - - gtk_init(&argc, &argv); - - gtk_preview_set_gamma(gimp_gamma()); - gtk_preview_set_install_cmap(gimp_install_cmap()); - color_cube = gimp_color_cube(); - gtk_preview_set_color_cube(color_cube[0], color_cube[1], color_cube[2], color_cube[3]); - - gtk_widget_set_default_visual(gtk_preview_get_visual()); - gtk_widget_set_default_colormap(gtk_preview_get_cmap()); - - build_preview_source_image(); - dialog = maindlg = gtk_dialog_new(); - gtk_window_set_title(GTK_WINDOW(dialog), "Julia Fractal Explorer (cotting@mygale.org)"); - gtk_window_position(GTK_WINDOW(dialog), GTK_WIN_POS_MOUSE); - gtk_container_border_width(GTK_CONTAINER(dialog), 0); - gtk_signal_connect(GTK_OBJECT(dialog), "destroy", - (GtkSignalFunc) dialog_close_callback, - NULL); - - top_table = gtk_table_new(4, 4, FALSE); - gtk_container_border_width(GTK_CONTAINER(top_table), 0); - gtk_table_set_row_spacings(GTK_TABLE(top_table), 0); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), top_table, FALSE, FALSE, 0); - gtk_widget_show(top_table); - - /* Preview */ - - frame = gtk_frame_new(NULL); - gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); - gtk_table_attach(GTK_TABLE(top_table), frame, 0, 1, 0, 1,0, 0, 0, 0); - gtk_widget_show(frame); - - wint.preview = gtk_preview_new(GTK_PREVIEW_COLOR); - gtk_preview_size(GTK_PREVIEW(wint.preview), preview_width, preview_height); - gtk_container_add(GTK_CONTAINER(frame), wint.preview); - gtk_widget_show(wint.preview); - - /* Controls */ - - frame = gtk_frame_new ("Fractal options:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (top_table), frame, 1, 4, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - gtk_widget_show(frame); - - toggle_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - - table = gtk_table_new(7, 7, FALSE); - gtk_container_border_width(GTK_CONTAINER(table), 5); - gtk_table_set_row_spacings(GTK_TABLE(table), 0); - gtk_box_pack_start(GTK_BOX(toggle_vbox),table, FALSE, FALSE, 0); - gtk_widget_show(table); - dialog_create_value("XMIN", GTK_TABLE(table), 0, &wvals.xmin,-10,10); - dialog_create_value("XMAX", GTK_TABLE(table), 1, &wvals.xmax,-10,10); - dialog_create_value("YMIN", GTK_TABLE(table), 2, &wvals.ymin,-10,10); - dialog_create_value("YMAX", GTK_TABLE(table), 3, &wvals.ymax,-10,10); - dialog_create_value("ITER", GTK_TABLE(table), 4, &wvals.iter,0,1000); - dialog_create_value("CX", GTK_TABLE(table), 5, &wvals.cx,-5,5); - dialog_create_value("CY", GTK_TABLE(table), 6, &wvals.cy,-5,5); - gtk_widget_show(table); - gtk_widget_show(toggle_vbox); - gtk_widget_show(frame); - - - frame2 = gtk_frame_new ("Color options:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame2), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (top_table), frame2, 0, 4, 1, 3, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - gtk_widget_show(frame2); - - toggle_vbox2 = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox2), 0); - gtk_container_add (GTK_CONTAINER (frame2), toggle_vbox2); - gtk_widget_show(toggle_vbox2); - - top_table2 = gtk_table_new(5, 5, FALSE); - gtk_container_border_width(GTK_CONTAINER(top_table2), 10); - gtk_table_set_row_spacings(GTK_TABLE(top_table2), 0); - gtk_box_pack_start(GTK_BOX(toggle_vbox2), top_table2, FALSE, FALSE, 0); - gtk_widget_show(top_table2); - - - frame = gtk_frame_new ("Color density:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (top_table2), frame, 0, 1, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - gtk_widget_show(frame); - - toggle_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - gtk_widget_show(toggle_vbox); - - table6 = gtk_table_new(3, 3, FALSE); - gtk_container_border_width(GTK_CONTAINER(table6), 0); - gtk_table_set_row_spacings(GTK_TABLE(table6), 0); - gtk_box_pack_start(GTK_BOX(toggle_vbox), table6, FALSE, FALSE, 0); - gtk_widget_show(table6); - dialog_create_value("Red", GTK_TABLE(table6), 0, &wvals.redstretch,0,128); - dialog_create_value("Green", GTK_TABLE(table6), 1, &wvals.greenstretch,0,128); - dialog_create_value("Blue", GTK_TABLE(table6), 2, &wvals.bluestretch,0,128); - gtk_widget_show (toggle_vbox); - gtk_widget_show (frame); - - frame3 = gtk_frame_new ("Color function:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame3), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (top_table2), frame3, 0, 1, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - gtk_widget_show (frame3); - - toggle_vbox3 = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox3), 0); - gtk_container_add (GTK_CONTAINER (frame3), toggle_vbox3); - gtk_widget_show (toggle_vbox3); - - table6 = gtk_table_new(4, 4, FALSE); - gtk_container_border_width(GTK_CONTAINER(table6), 0); - gtk_table_set_row_spacings(GTK_TABLE(table6), 0); - gtk_box_pack_start(GTK_BOX(toggle_vbox3), table6, FALSE, FALSE, 0); - gtk_widget_show(table6); - - frame = gtk_frame_new ("Red:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (table6), frame, 0, 1, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - gtk_widget_show (frame); - - toggle_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - gtk_widget_show (toggle_vbox); - /* <------------------------------- */ - toggle = gtk_radio_button_new_with_label (redmode_group, "Sine"); - redmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) Julia_toggle_update, - &do_redsinus); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_redsinus); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (redmode_group, "Cosine"); - redmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) Julia_toggle_update, - &do_redcosinus); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_redcosinus); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (redmode_group, "None"); - redmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) Julia_toggle_update, - &do_rednone); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_rednone); - gtk_widget_show (toggle); - gtk_widget_show (toggle_vbox); - gtk_widget_show (frame); - - -/* Greenmode toggle box */ - frame = gtk_frame_new ("Green:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (table6), frame, 1, 2, 0,1 , GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - gtk_widget_show (frame); - toggle_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - gtk_widget_show (toggle_vbox); - - /* <----- */ - toggle = gtk_radio_button_new_with_label (greenmode_group, "Sine"); - greenmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) Julia_toggle_update, - &do_greensinus); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_greensinus); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (greenmode_group, "Cosine"); - greenmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) Julia_toggle_update, - &do_greencosinus); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_greencosinus); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (greenmode_group, "None"); - greenmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) Julia_toggle_update, - &do_greennone); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_greennone); - gtk_widget_show (toggle); - - gtk_widget_show (toggle_vbox); - gtk_widget_show (frame); - - -/* Bluemode toggle box */ - frame = gtk_frame_new ("Blue:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (table6), frame, 2, 3,0,1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - gtk_widget_show (frame); - toggle_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - gtk_widget_show (toggle_vbox); - - toggle = gtk_radio_button_new_with_label (bluemode_group, "Sine"); - bluemode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) Julia_toggle_update, - &do_bluesinus); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_bluesinus); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (bluemode_group, "Cosine"); - bluemode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) Julia_toggle_update, - &do_bluecosinus); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_bluecosinus); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (bluemode_group, "None"); - bluemode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) Julia_toggle_update, - &do_bluenone); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_bluenone); - gtk_widget_show (toggle); - gtk_widget_show (toggle_vbox); - gtk_widget_show (frame); - gtk_widget_show (toggle_vbox3); - gtk_widget_show (frame3); - -/* Colormode toggle box */ - frame = gtk_frame_new ("Color Mode:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (top_table2), frame, 0, 1, 2, 3, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - toggle_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - - toggle = gtk_radio_button_new_with_label (colormode_group, "As specified above"); - bluemode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) Julia_toggle_update, - &do_colormode1); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_colormode1); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (bluemode_group, "Apply active gradient to final image"); - bluemode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) Julia_toggle_update, - &do_colormode2); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_colormode2); - gtk_widget_show (toggle); - - gtk_widget_show (toggle_vbox); - gtk_widget_show (frame); - /* gtk_widget_show (table); */ - - - /* Buttons */ - - -gtk_container_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), 5); - - button = gtk_button_new_with_label("OK"); - GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - (GtkSignalFunc) dialog_ok_callback, - dialog); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); - gtk_widget_grab_default(button); - gtk_widget_show(button); - - button = gtk_button_new_with_label("Cancel"); - GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - (GtkSignalFunc) dialog_cancel_callback, - dialog); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); - gtk_widget_show(button); - - button = gtk_button_new_with_label("About..."); - GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - (GtkSignalFunc)Julia_about_callback,button); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), - button, TRUE, TRUE, 0); - gtk_widget_show(button); - -/* - button = gtk_button_new_with_label("Reset"); - GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - (GtkSignalFunc) dialog_reset_callback, - dialog); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); - gtk_widget_show(button); -*/ - /* Done */ - - gtk_widget_show(dialog); - dialog_update_preview(); - - gtk_main(); - gdk_flush(); - if (the_tile != NULL) { - gimp_tile_unref(the_tile, FALSE); - the_tile = NULL; - } /* if */ - - g_free(wint.image); - g_free(wint.wimage); - - return wint.run; -} /* Julia_dialog */ - - -/*****/ - -static void -dialog_update_preview(void) -{ - double left, right, bottom, top; - double dx, dy; - int px, py; - int x, y; - double redstretch, greenstretch, bluestretch; - int r,g,b; - double scale_x, scale_y; - guchar *p_ul, *i, *p; - float ta,tb,tx,ty,txx; - int zaehler,color; - float pi=3.1415926; - - left = sel_x1; - right = sel_x2 - 1; - bottom = sel_y2 - 1; - top = sel_y1; - dx = (right - left) / (preview_width - 1); - dy = (bottom - top) / (preview_height - 1); - - xmin = wvals.xmin; - xmax = wvals.xmax; - ymin = wvals.ymin; - ymax = wvals.ymax; - cx=wvals.cx; - cy=wvals.cy; - - redstretch = wvals.redstretch; - greenstretch = wvals.greenstretch; - bluestretch = wvals.bluestretch; - xbild=preview_width; - ybild=preview_height; - xdiff=(xmax-xmin)/xbild; - ydiff=(ymax-ymin)/ybild; - - scale_x = (double) (preview_width - 1) / (right - left); - scale_y = (double) (preview_height - 1) / (bottom - top); - - py = 0; - - p_ul = wint.wimage; - - - - for (y = 0; y < preview_height; y++) { - px = 0; - - for (x = 0; x < preview_width; x++) { - i = wint.image + 3 * (preview_width * py + px); - r = *i++; - g = *i++; - b = *i; - ta=(float)xmin+(float)x*xdiff; - tb=(float)ymin+(float)y*ydiff; - tx=ta; - ty=tb; - zaehler=0; - for (zaehler=0; (zaehler <= wvals.iter) && ((tx*tx+ty*ty)<4); zaehler++) - { - txx=tx*tx-ty*ty+cx; - ty=2.0*tx*ty+cy; - tx=txx; - } - r=g=b=color=zaehler*256/wvals.iter; - switch (wvals.redmode) - { - case SINUS: - r = (int) redstretch*(1.0+sin((r/128.0-1)*pi)); - break; - case COSINUS: - r = (int) redstretch*(1.0+cos((r/128.0-1)*pi)); - break; - default: - break; - } - - switch (wvals.greenmode) - { - case SINUS: - g = (int) greenstretch*(1.0+sin((g/128.0-1)*pi)); - break; - case COSINUS: - g = (int) greenstretch*(1.0+cos((g/128.0-1)*pi)); - break; - default: - break; - } - switch (wvals.bluemode) - { - case SINUS: - b = (int) bluestretch*(1.0+sin((b/128.0-1)*pi)); - break; - case COSINUS: - b = (int) bluestretch*(1.0+cos((b/128.0-1)*pi)); - break; - default: - break; - } - - - p_ul[0] = r; - p_ul[1] = g; - p_ul[2] = b; - p_ul += 3; - px += 1; /* dx; */ - } /* for */ - py +=1; /* dy; */ - } /* for */ - - p = wint.wimage; - - for (y = 0; y < preview_height; y++) { - gtk_preview_draw_row(GTK_PREVIEW(wint.preview), p, 0, y, preview_width); - p += preview_width * 3; - } /* for */ - gtk_widget_draw(wint.preview, NULL); - gdk_flush(); -} /* dialog_update_preview */ - - -/*****/ - -static void -dialog_create_value(char *title, GtkTable *table, int row, gdouble *value, - int left, int right) -{ - GtkWidget *label; - GtkWidget *scale; - GtkWidget *entry; - GtkObject *scale_data; - char buf[256]; - - label = gtk_label_new(title); - gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); - gtk_table_attach(table, label, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, 4, 0); - gtk_widget_show(label); - - - scale_data = gtk_adjustment_new(*value, left, right, - (right - left) / 20, - (right - left) / 20, - 0); - - gtk_signal_connect(GTK_OBJECT(scale_data), "value_changed", - (GtkSignalFunc) dialog_scale_update, - value); - - scale = gtk_hscale_new(GTK_ADJUSTMENT(scale_data)); - gtk_widget_set_usize(scale, SCALE_WIDTH, 0); - gtk_table_attach(table, scale, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_scale_set_draw_value(GTK_SCALE(scale), FALSE); - gtk_scale_set_digits(GTK_SCALE(scale), 3); - gtk_range_set_update_policy(GTK_RANGE(scale), GTK_UPDATE_CONTINUOUS); - gtk_widget_show(scale); - - entry = gtk_entry_new(); - gtk_object_set_user_data(GTK_OBJECT(entry), scale_data); - gtk_object_set_user_data(scale_data, entry); - gtk_widget_set_usize(entry, ENTRY_WIDTH, 0); - sprintf(buf, "%0.2f", *value); - gtk_entry_set_text(GTK_ENTRY(entry), buf); - gtk_signal_connect(GTK_OBJECT(entry), "changed", - (GtkSignalFunc) dialog_entry_update, - value); - gtk_table_attach(GTK_TABLE(table), entry, 2, 3, row, row + 1, 0,0,4, 0); - gtk_widget_show(entry); -} /* dialog_create_value */ - -/*****/ - -static void -dialog_scale_update(GtkAdjustment *adjustment, gdouble *value) -{ - GtkWidget *entry; - char buf[256]; - - if (*value != adjustment->value) { - *value = adjustment->value; - - entry = gtk_object_get_user_data(GTK_OBJECT(adjustment)); - sprintf(buf, "%0.2f", *value); - - gtk_signal_handler_block_by_data(GTK_OBJECT(entry), value); - gtk_entry_set_text(GTK_ENTRY(entry), buf); - gtk_signal_handler_unblock_by_data(GTK_OBJECT(entry), value); - - dialog_update_preview(); - } /* if */ -} /* dialog_scale_update */ -/*****/ - -static void -dialog_entry_update(GtkWidget *widget, gdouble *value) -{ - GtkAdjustment *adjustment; - gdouble new_value; - - new_value = atof(gtk_entry_get_text(GTK_ENTRY(widget))); - - if (*value != new_value) { - adjustment = gtk_object_get_user_data(GTK_OBJECT(widget)); - - if ((new_value >= adjustment->lower) && - (new_value <= adjustment->upper)) { - *value = new_value; - adjustment->value = new_value; - - gtk_signal_emit_by_name(GTK_OBJECT(adjustment), "value_changed"); - - dialog_update_preview(); - } /* if */ - } /* if */ -} /* dialog_entry_update */ - - -static void -dialog_close_callback(GtkWidget *widget, gpointer data) -{ - gtk_main_quit(); -} /* dialog_close_callback */ - - -/*****/ - -static void -dialog_ok_callback(GtkWidget *widget, gpointer data) -{ - wint.run = TRUE; - gtk_widget_destroy(GTK_WIDGET(data)); -} /* dialog_ok_callback */ - - -/*****/ -/* -static void -dialog_reset_callback(GtkWidget *widget, gpointer data) -{ -static Julia_vals_t wvals = { - -2,1,-1.5,1.5,100,0,128,128,128,0,0,0, -}; - gtk_widget_destroy(GTK_WIDGET(data)); - Julia_dialog(); -} -*/ - -/*****/ - -static void -dialog_cancel_callback(GtkWidget *widget, gpointer data) -{ - gtk_widget_destroy(GTK_WIDGET(data)); -} /* dialog_cancel_callback */ - - -static void -Julia_toggle_update (GtkWidget *widget, - gpointer data) -{ - int *toggle_val; - - toggle_val = (int *) data; - - if (GTK_TOGGLE_BUTTON (widget)->active) - *toggle_val = TRUE; - else - *toggle_val = FALSE; - if (do_redsinus) - wvals.redmode = SINUS; - else if (do_redcosinus) - wvals.redmode = COSINUS; - else if (do_rednone) - wvals.redmode = NONE; - - if (do_greensinus) - wvals.greenmode = SINUS; - else if (do_greencosinus) - wvals.greenmode = COSINUS; - else if (do_greennone) - wvals.greenmode = NONE; - - if (do_bluesinus) - wvals.bluemode = SINUS; - else if (do_bluecosinus) - wvals.bluemode = COSINUS; - else if (do_bluenone) - wvals.bluemode = NONE; - dialog_update_preview(); - - if (do_colormode1) - wvals.colormode = 0; - else if (do_colormode2) - wvals.colormode = 1; - dialog_update_preview(); - -} - -GtkWidget * -Julia_logo_dialog() -{ - GtkWidget *xdlg; - GtkWidget *xlabel; - GtkWidget *xbutton; - GtkWidget *xlogo_box; - GtkWidget *xpreview; - GtkWidget *xframe,*xframe2; - GtkWidget *xvbox; - GtkWidget *xhbox; - char *text; - gchar *temp,*temp2; - char *datapointer; - gint y,x; - xdlg = logodlg = gtk_dialog_new(); - gtk_window_set_title(GTK_WINDOW(xdlg), "About"); - gtk_window_position(GTK_WINDOW(xdlg), GTK_WIN_POS_MOUSE); - gtk_signal_connect(GTK_OBJECT(xdlg), "destroy", - (GtkSignalFunc)dialog_close_callback, - NULL); - - xbutton = gtk_button_new_with_label("OK"); - GTK_WIDGET_SET_FLAGS(xbutton, GTK_CAN_DEFAULT); - gtk_signal_connect(GTK_OBJECT(xbutton), "clicked", - (GtkSignalFunc)Julia_logo_ok_callback, - xdlg); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(xdlg)->action_area), - xbutton, TRUE, TRUE, 0); - gtk_widget_grab_default(xbutton); - gtk_widget_show(xbutton); - - xframe = gtk_frame_new(NULL); - gtk_frame_set_shadow_type(GTK_FRAME(xframe), GTK_SHADOW_ETCHED_IN); - gtk_container_border_width(GTK_CONTAINER(xframe), 10); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(xdlg)->vbox), xframe, TRUE, TRUE, 0); - xvbox = gtk_vbox_new(FALSE, 5); - gtk_container_border_width(GTK_CONTAINER(xvbox), 10); - gtk_container_add(GTK_CONTAINER(xframe), xvbox); - - /* The logo frame & drawing area */ - xhbox = gtk_hbox_new (FALSE, 5); - gtk_box_pack_start (GTK_BOX (xvbox), xhbox, FALSE, TRUE, 0); - - xlogo_box = gtk_vbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX (xhbox), xlogo_box, FALSE, FALSE, 0); - - xframe2 = gtk_frame_new (NULL); - gtk_frame_set_shadow_type (GTK_FRAME (xframe2), GTK_SHADOW_IN); - gtk_box_pack_start (GTK_BOX (xlogo_box), xframe2, FALSE, FALSE, 0); - - xpreview = gtk_preview_new (GTK_PREVIEW_COLOR); - gtk_preview_size (GTK_PREVIEW (xpreview), logo_width, logo_height); - temp = g_malloc((logo_width+10)*3); - datapointer=header_data; - for (y = 0; y < logo_height; y++){ - temp2=temp; - for (x = 0; x< logo_width; x++) { - HEADER_PIXEL(datapointer,temp2); temp2+=3;} - gtk_preview_draw_row (GTK_PREVIEW (xpreview), - temp, - 0, y, logo_width); - } - g_free(temp); - gtk_container_add (GTK_CONTAINER (xframe2), xpreview); - gtk_widget_show (xpreview); - gtk_widget_show (xframe2); - gtk_widget_show (xlogo_box); - gtk_widget_show (xhbox); - - xhbox = gtk_hbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(xvbox), xhbox, TRUE, TRUE, 0); - text = "\nCotting Software Productions\n" - "Bahnhofstrasse 31\n" - "CH-3066 Stettlen (Switzerland)\n\n" - "cotting@mygale.org\n" - "http://www.mygale.org/~cotting\n\n" - "Julia Fractal Chaos Explorer Plug-In for the GIMP\n" - "Version 1.00\n"; - xlabel = gtk_label_new(text); - gtk_box_pack_start(GTK_BOX(xhbox), xlabel, TRUE, FALSE, 0); - gtk_widget_show(xlabel); - - gtk_widget_show(xhbox); - - gtk_widget_show(xvbox); - gtk_widget_show(xframe); - gtk_widget_show(xdlg); - - gtk_main(); - gdk_flush(); - return xdlg; -} diff --git a/plug-ins/Julia/logo.h b/plug-ins/Julia/logo.h index 871a318a06..cb94ec445f 100644 --- a/plug-ins/Julia/logo.h +++ b/plug-ins/Julia/logo.h @@ -1,4 +1,4 @@ -/* GIMP header image file format (RGB-only): //logo.h */ +/* GIMP header image file format (Indexed): //logo.h */ static unsigned int logo_width = 200; static unsigned int logo_height = 72; @@ -6,9 +6,783 @@ static unsigned int logo_height = 72; /* Call this macro repeatedly. After each use, the pixel data can be extracted */ #define HEADER_PIXEL(data,pixel) \ - pixel[0] = (((data[0] - 33) << 2) | ((data[1] - 33) >> 4)); \ - pixel[1] = ((((data[1] - 33) & 0xF) << 4) | ((data[2] - 33) >> 2)); \ - pixel[2] = ((((data[2] - 33) & 0x3) << 6) | ((data[3] - 33))); \ - data += 4; + pixel[0] = palette_data[data[0]*3+2]; \ + pixel[1] = palette_data[data[0]*3+1]; \ + pixel[2] = palette_data[data[0]*3+0]; \ + data--; -static char *header_data = ")1!X)1!X)A!Y)Q!\\)Q!\\)A!Z)A!Z)Q!])A!Z)A!Z)1!X)Q!\\*!!^)Q!])Q!]*1\"!*1\"!*1\"\"*1\"!*1\"!*1\"!*1\"!*Q\"%*!!_*!!_*!!_*1\"\"*!!^*A\"$+!\"(*!!_*Q\"%*1\"\"*A\"$*Q\"%*A\"#*A\"#*1\"\"*!!_*!!_*A\"$*Q\"&+A\",*Q\"%*A\"$*A\"$*Q\"$+!!\\*A\"#+1\"+*A\"$*Q\"%+1\"++!\")+Q\".+A\",+Q\".+1\"+*Q\"%*A\"$*A\"$*A\"$+!\"(*1!`*A\"$+A\"-+A\"-+A\",,!\"1,!\"1+A\",,!\"2+1\"++Q\"'+A\",+A\"-+A\",*A\"$*A\"$*A\"$+!\"(+!\"(+!\"(+1\"+*Q\"'+!\"(+!\"(+A\",,!\"),1\"2+A\",,!\"2+Q\"0,!\"1,!\"1,!\"1+A\"-+A\",,!\"1+A\"-,1\"2,!\"2+A\",+A\".+1\"++A\"-+Q\".+Q\"0+A\"-+Q\".+Q\".,!\"1,!\")+A\"+*Q\"'+A\"-+A\"-+A\",,!\"1,Q\"*+Q\".+A\".+A\"-+Q\".+Q\".+1\"++1\"+*Q\"%+!\"(*A\"$*A\"$*A\"$*A\"$*A\"$*A\"$+Q\".+A\",+Q\".,1\"4+Q\".+1\"++1\"*+1\")*Q\"&*!!_*A\"$*1\"!*A\"$*A\"$,!\"(+Q\".+1\"++!\"(*Q\"'*Q\"'*A\"$*1\"\"*1!`*!!_*A\"$*A\"$*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*A\"#*Q\"%)A!Z*A\"#*!!_*1\"!*Q\"%*Q\"%*1\"!+!\"(*!!_*1\"\")Q!]*A\"#)Q!\\*!!^*!!^*!!_)Q!]*!!^*1\"!*!!^)Q!\\)Q!\\*!!^*!!^*!!^)Q!])A!Z*!!^)1!X)A!Y)A!Z)1!W)1!X*!!^*!!^)Q!\\)Q!\\*1!`)Q!\\*1\"\")Q!]*1\"\"*A\"#*!!^*1\"\"*1\"!*1!`)Q!])Q!]*!!^*!!_*Q\"&*A\"\"*A\"\"*Q\"%*1\"\"*Q\"&*1!`*A\"#*A\"#*A\"$+!\"'*Q\"%*Q\"%*A\"#*A\"$*Q\"%*A\"#*A\"#*A\"#*Q\"&*Q\"'+1\")+Q\".+!\"(+1\"+*A\"$*A\"$*A\"$*A\"$*Q\"%*Q\"'+!\")+1\"++Q\".,!\"1+A\"-,1\"0+!\"(,!\"&+!\"$*A\"$*Q\"&*Q\"&+!\")+A\"-+A\",+Q\".+Q\"0,1\"3,!\"2+1\"+,!\"1+A\"+,!\".,A\"/+A\"++A\"-+Q\".+Q\"0+Q\".*Q\"'+1\")+1\"*+A\".+A\"-,!\"2,A\"3+Q\"-,1\"3,A\"1+A\"-,1\"3,1\"2,1\"0,!\"2,!\"2+Q\".,!\"1+A\".+A\"-,!\"1+A\"-+A\"-,!\"1+A\"-,!\"1+Q\"0,!\"0+Q\".+A\",+Q\"/+Q\"0+A\",,A\"0+A\"++A\"-+1\"+,!\"1,!\"1+A\"-,1\"4+1\"+,!\"1,!\"1,A\"1,!\"1,1\"4,1\"/,!\"1+A\",+Q\"/+A\"-*Q\"'*Q\"'*Q\"',1\"%,!\"1,!\"-,A\"*,!\"/,!\"1+Q\".+Q\".,!\"1+1\"*+1\"**Q\"'*A\"#*A\"$*Q\"%+1\"$+!\"(+1\"++A\"-+Q\".+A\"-+A\",+!\"(*A\"$*A\"$*A\"$*A\"$*Q\"%*Q\"%*Q\"%+1\"+*Q\"&+!\"(*Q\"%+!\"(*!!_*A\"$*A\"#*1!`*Q\"%*A\"\"*!!`*A\"\"*A\"#*A\"#*!!^*Q\"$*1\"!*A\"\"*A\"$*!!^*A\"$*1\"!*A\"\")Q!]*1\"!*!!^*!!_*!!^)Q!]*1!`)Q!\\)Q!\\)Q!]*!!`)1!X*!!^*!!^)A!Z*1\"!*A\"\"*!!^*1\"!)Q!]*1!`*Q\"%*!!^*A\"\"*!!^*1\"\"+!\"'*1\"\"*A\"#*1\"!*A\"$*A\"$*Q\"%*1!`*Q\"%*A\"#*A\"#*1\"\"*A\"$+A\"-+!\"(+!\"(*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%+1\"**Q\"%+A\"-+Q\"/,A\"/+Q\"++A\",*Q\"&*A\"$*A\"$*A\"$+!\")+Q\"/,1\"4+A\"-,!\"1,!\"1+A\".,!\"1,!\"&+1\"++A\",+!\"(+A\"-+A\",,1\"3,1\"4,1\"4-A\"1-A\"5-!\"5,1\"4+Q\"/+Q\"/+A\"-,1\"1,A\",+A\"-+A\"-+Q\"0+Q\"0,!\"1,1\"4.1\"5,A\"4,1\"4,1\"4.1\"5.1\"5-1\"5.Q\"6-Q\"5-A\"5-A\"5.1\"5,Q\"5-Q\"5,1\"4,1\"4.!\"0,1\"4,1\"4,Q\"3-1\"2,1\"4,1\"4,!\"1.!\"4,!\"2-1\".,1\"3-1\"1,Q\"4+Q\"0,!\"2,1\"3,!\"0,!\"1+A\"-,!\"2+A\",+A\",,!\"2+A\",,!\"1,!\"1,!\"1.!\"5.1\"5,A\"5.A\"6-Q\"5.1\"5-A\"1,A\"4,1\"4,!\"0+Q\".+1\"++Q\"$,!\"&+!\"(+A\"-+A\",,1\"4,1\"4,1\"4,1\"4,1\"4+Q\"/+Q\"/+!\")*Q\"&+!\"'+!\"(+!\"(+A\",+Q\".+Q\"0,!\"2+A\",+A\"-+1\"+*A\"$*A\"$*Q\"%*Q\"%*Q\"%+1\"*+A\",+A\",+A\"-+!\"'+!\"'*Q\"%+1\")*Q\"%*Q\"%*Q\"%+1\")*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*1\"!*A\"$*Q\"%*!!^+!\"'*1\"!*1!`*1!`+!\"'*A\"#*1\"!*1!`*Q\"$)Q!\\)Q!\\)Q!]*!!^*1!`*1\"!*1\"!*A\"$*1!`*A\"$*1\"!*A\"\"*!!`*A\"$*1!`*A\"$*Q\"%*A\"$*A\"$*A\"\"*A\"\"*Q\"'*A\"$*A\"$*A\"$*Q\"%*A\"$*Q\"%*Q\"%*A\"#*Q\"&*Q\"&+!\"(+1\"*+A\"-+!\"'*Q\"%*Q\"%*Q\"%*Q\"%+Q\"/+!\"(,1\"3+A\",,!\"2+A\"-+Q\".+1\"**Q\"&*Q\"&,!\"1,!\"2+Q\"/,A\"3-!\"5-A\"5-!\"4+A\"-+A\".+1\"*+A\",+A\",+Q\"/,!\"1-!\"1,1\"3.Q\"6.Q\"6.!\"6-!\"6,A\"5,1\"2+Q\"0+Q\"/,!\"1,!\"1,!\"2,1\"4,!\".-!\"4-A\"6-A\"8.Q\"8/1\"9-A\"8.Q\"7.Q\"7.A\"7.!\"7-1\"5.A\"6-1\"7-A\"8-Q\"6,A\"5-1\"5,Q\"5.!\"5-Q\"5,1\"4.1\"8-1\"5.Q\"6-Q\"9.Q\"6-1\"5/1\"8-A\"6.!\"6-A\"6.A\"7-Q\"7-1\"8.Q\"7/1\"9/A\"8-Q\"6-A\"6-!\"4-!\"4.!\"5-1\"6-!\"4,1\"4,1\"3,1\"4+Q\".,1\"4,1\"4,Q\"5,A\"4-A\"9-A\"8.1\"8-Q\"9-Q\"5.1\"7.Q\"8.A\"5,1\"3,A\"3+Q\".,1\"3,A\"&+1\"*-!\",,1\"3,1\"4.Q\"1/!\"8-1\"4-1\"5,1\"4,!\"0+Q\"/+!\"(+!\"(+A\",+1\")+A\"-+Q\".,1\"3+Q\"0,1\"3+1\"*+Q\"/+!\"(*Q\"%*Q\"&+!\"'+A\",+A\",+Q\"0+A\"++A\"-*Q\"%+!\"'*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"'+!\"'*Q\"%*Q\"%*Q\"%*Q\"%*A\"$*Q\"%*A\"$*Q\"%*Q\"%*1\"!*A\"#*A\"$*A\"#*!!`*A\"#*!!`*Q\"%*A\"$*1\"\"*Q\"%*!!`*A\"#*A\"#*1!`*A\"#*1\"!*A\"#*Q\"&*1\"!*A\"$*Q\"%*Q\"&*A\"$*Q\"%*Q\"%+!\"(*Q\"%*Q\"%*Q\"%*Q\"%*A\"$*Q\"%*Q\"%*Q\"%*Q\"%+Q\".+!\"'+Q\".+A\",+1\"++!\"'+!\"(+1\"++1\"*+Q\"/+Q\"/+Q\".,!\"1,A\"5,1\"3+A\",,1\"2+!\"(+1\"*+A\"-+Q\"-,1\"2,Q\"4/Q\"7-1\"5-1\"5,1\"4,1\"3+A\"-,!\"+,A\".+Q\"/,!\"0,A\"5.A\"6.A\":.!\"<.!\";.1\"8.Q\"7.!\"7,1\"4,!\"0,!\"0,!\"1,!\"1.A\"6.A\"/-1\"8.A\"<.Q\".!\";.Q\"?.Q\"?.Q\"?/!\"7/!\"7,Q\"6-A\"7.1\"9-Q\"5.!\"8-1\"8/A\":.Q\":-Q\"8/A\"8-1\"8.1\"8/1\"9.1\":.!\":.1\"9.A\":.Q\":.1\"8.A\"=.A\";.A\":/A\">.A\">-Q\":.Q\"?.1\"=.Q\"?/1\">/Q\"=/A\">.Q\"<.Q\"<0!\"=/1\">.1\"9.A\"6.A\"6-Q\"6/A\"6.!\"5-!\"5.A\"6-Q\"5-Q\"5.!\"5.A\"6.1\"8.A\"9/!\"=.Q\"?.!\"<.!\"<.A\"6.A\"6,A\"5,!\"1,!\"1+A\",+A\"-,1\"4-!\"7-!\"7.1\"8.A\"7.1\"6.A\"6,A\"5,1\"2+A\",+A\"-+A\",+!\"(,1\"4,Q\"5.1\"5,A\"5,!\"1,!\"1,!\"1+1\"*+A\",+!\"',A\"(,A\"(+Q\"/+Q\"/,1\"2+Q\"/+A\",+1\"**Q\"%*Q\"%+!\"(+!\"(+A\"-+A\",+!\")+A\"+*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"'*A\"#*Q\"'*1\"!*Q\"%*A\"$*Q\"%*Q\"%*A\"$*A\"#*1\"!*1\"!*A\"$*A\"$*A\"%*A\"$*A\"$*A\"$*Q\"&+1\")*A\"$+1\"**A\"$*Q\"%+!\"(*Q\"&+1\"++A\"-+!\"'+A\"-+A\"-+!\"'+Q\"/+1\"++A\"-+Q\"0+Q\"/,!\"1,!\"1+A\"-,!\"2+Q\".,1\".+Q\"*+Q\"0+A\"-,A\"5,A\"5.A\"6,A\"5+A\",,Q\"*+1\"*+Q\"/+Q\"0+Q\"/.A\"6.A\":.1\":.1\"8-Q\"6-A\"5,!\"2+A\",,!\"1,1\"4-Q\"5.!\"7.A\":/Q\"=.Q\"?.Q\"?.Q\";-Q\"7.!\"5,1\"4,1\"4,1\"4,Q\"5/1\"6.1\"9.A\":.Q\"?/A\"C.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.!\"9-1\"5.Q\"9.Q\":.!\"7.A\"=/A\":.1\"=/A\":/!\":.1\";.!\";.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/A\"C.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?-A\"9/A\":-A\"9-A\"9,Q\"6.!\"7,Q\"5,1\"4-1\"5-Q\"8.1\"8.Q\"?.Q\"?.Q\"?.Q\"?/Q\"=-A\"8-Q\"5,A\"5,1\"3+Q\"0,1\"4-Q\"5-A\"5.1\":.1\"=.A\":.A\":.1\"8-1\"5,1\"4+Q\"/-!\"0+A\",,1\"3.!\"5-A\"5-A\"5.A\"6-Q\"4+Q\"0+A\"-+Q\".,!\"0,!\"0+Q\"0,!\"1,!\"1-!\".,1\"3+A\"-+Q\"0+Q\"/+!\"'+Q\".+Q\"0+A\"-,!\"1,A\"(+A\",+1\")+Q\"/+!\")+!\"'+1\"*+!\"(*Q\"%+!\")+!\"(+!\"'*Q\"%*Q\"%*Q\"%*Q\"&+!\"(*Q\"%+!\"'+!\"(*A\"$*A\"$*A\"$*Q\"%*Q\"&+!\"'+1\"*+1\"++Q\".+1\"++Q\".+Q\".+A\"-,!\",,!\"(+Q\".+A\"-+A\"-+Q\".+A\",+A\",+1\")+Q\".,!\"2+Q\".,!\"1,!\"1+Q\".+A\"-+1\"),A\"3,!\"-,Q\"5-Q\"5.!\"6.Q\"6,A\"5,A\"5,!\"+,Q\"0,!\"1-!\"4.1\"6/Q\"9.1\"=.Q\"?/1\"9-Q\"8,A\"5,1\"4,1\"3,Q\"4.!\"5-A\"8/!\">.A\">.Q\"?.Q\"?.Q\"?/!\">,Q\"5,Q\"5.!\"5-Q\"6.!\"7.1\"=.A\"?/1\"@/A\"D/Q\"E0!\"G/1\"C/A\"D.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/!\"?.Q\"=/!\">/1\">/1\"@/!\"@/1\"B/1\"B/1\"C/Q\"F/A\"D/Q\"E/Q\"E/Q\"E01\"I01\"I0A\"K/Q\"F/1\"C/Q\"F/1\"B/1\"B/1\"B/Q\"F/1\"B/1\"A/!\"A/!\"@/1\"B/1\"B/!\"@.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/1\"B/Q\"E/1\"B/A\"D01\"I0A\"J01\"I/Q\"E/Q\"E/!\"A.Q\"@/1\"?/1\"8/!\"8-1\"7-A\"8.A\"9.1\"=.A\">.Q\"?.Q\"?/A\"D/1\"B/A\"@.1\"=/1\"9.1\"6-A\"5-!\"5,A\"4.Q\"7.!\":.Q\"?.Q\"?.Q\"?.A\"=.A\"7-!\"5,Q\"2,1\"3+A\"-,1\"4-1\"7/!\"8.Q\"<.1\"9.1\"6.A\"5,!\"1,!\"1,!\"1+1\"+,!\"2,A\"5,Q\"5,Q\"5,Q\"3+Q\"0,!\"1+!\")+A\"-+Q\"-,!\"0+Q\"/+A\",,!\"1+A\",+Q\".+!\"(,1\"+,1\".+!\")+A\",+1\")+A\",+!\"(+A\"*+A\",+!\"'+!\"(*Q\"%*Q\"%*Q\"%*Q\"%+1\"*+1\"++!\")+A\",+A\"-,Q\"++1\"++A\",,A\"(+A\"-+1\"*+1\"++A\"-+A\"-,!\"1+A\",+A\"-+A\"-+Q\"0+1\"*,!\"2,1\"3,A\"5,A\"5.1\"6,1\"5,1\"3,A\"+,!\".,!\"0,A\"5,Q\"5.1\"8.!\"6/!\"9-1\"5-!\"5,A\"5,A\"5,1\"4.1\"6/!\":.1\"=.Q\"?.Q\"?.1\"=-A\":.!\"5,Q\"5.1\"6-A\"5/Q\":.1\"=/Q\"F0!\"G/A\"D.Q\"?.Q\"?.1\"=.Q\"9/A\"6.1\"9-Q\";.!\".A\">.Q\"?.Q\"?/A\"D0!\"G0!\"G0A\"J1!\"N0Q\"M0Q\"M0Q\"M0Q\"M0Q\"M01\"I0Q\"M0Q\"M/Q\"F01\"I0Q\"M01\"J0Q\"M0Q\"M0Q\"M0Q\"M0Q\"M01\"J0Q\"M0Q\"L0A\"K01\"J0Q\"M0Q\"M0Q\"L0!\"G0!\"G0!\"G/A\"C/A\"D/A\"D/1\"B/1\"A/1\"C0!\"G/Q\"F0!\"G/Q\"F/Q\"F0Q\"M0Q\"M1!\"N0Q\"M0!\"G0!\"G/1\"B.Q\"?.1\"-Q\";-Q\":.Q\"?/!\"@/A\"C01\"J0A\"K0!\"G/Q\"F.1\"=/1\";-Q\";.Q\"8-!\"6.1\"8/Q\"<.Q\"?.Q\"?.Q\"?.Q\"?/A\"<-!\"7.1\"6,1\"4,1\"4.!\"5-1\"8.Q\"9/!\"@.1\"=-Q\";.Q\"8,!\"2,!\"2,!\"0,!\"0.1\"6-1\"5.1\"9/1\"6,Q\"5,A\"5-!\".+Q\"/,A\"-,!\".,!\"0,!\"2+A\"-,!\"0,!\"0+1\"+,!\"2+A\",+A\",+A\"-+A\",,!\"*+Q\"(+Q\"%,!\"+,A\"/+!\"'+A\",+!\")*Q\"&+1\"**Q\"'+A\",+A\",+A\",+A\",+A\"++A\"-+Q\"/+A\",+Q\".+A\",,1\"2,!\"1+Q\".,!\"1,!\"0,!\"1+A\"-+A\"-,1\"4,1\"/-1\"5/Q\"6-Q\"5,A\"5,A\"5,1\"4,A\"3,1\"4.A\"6.A\"9/1\">.Q\"?.A\">-Q\"9-Q\"5-1\"5-1\"5-Q\"6.A\"9/!\"?/!\"A/Q\"F.Q\"?.Q\"?.!\"7.!\"7.1\"8.Q\":.1\"/Q\"F0A\"K1!\"N0Q\"M0A\"K/1\"A.Q\"?.Q\"?.Q\"?/!\"@/Q\"F01\"J1!\"N2A\"X2!\"V1!\"O11\"P0!\"H01\"I0!\"G/1\"B/Q\"F01\"J0A\"L1!\"N1Q\"S2Q\"U3Q\"T2!\"V3A\"R31\"X2A\"T1Q\"T11\"P1!\"N0Q\"M0Q\"M0!\"H0Q\"L0Q\"L1!\"L1!\"K0A\"I/1\"8.1\"-/A\"811\">11\">11\"=11\">11\">11\">11\">11\">1A\"=1A\"A11\"A1A\"B0Q\"A0A\"E1A\"I1A\"P11\"P2!\"T2A\"Y3A\"U2A\"Z2Q\"Z3!\"U2Q\"Y2!\"V1A\"R0Q\"M0Q\"L0Q\"L01\"I0A\"J0Q\"L11\"Q1A\"R21\"W2Q\"U2A\"W1A\"R1!\"M0A\"J/Q\"F/!\"@/!\"@.Q\"?/1\"C0!\"G0Q\"M1A\"R1!\"O1!\"N01\"J/1\"C.A\">/!\">.Q\"<.Q\"?/!\"@0!\"H0A\"J0Q\"M01\"I/1\"C/1\">.!\":.Q\"6-A\"9-Q\":/!\"@/!\"@/!\"@.A\">/!\"?0!\":-Q\"6-Q\"5.Q\"7-Q\"6-!\"7.1\"=.Q\";.!\"<-!\"7,1\"2,A\"4,A\"5.Q\"6,Q\"5/!\"6-!\"5,A\"5,1\"3,1\"3,Q\"2,!\"1,!\"1,!\"1+A\"++Q\"0+Q\".,!\"1+A\",+A\"-+Q\"0+A\"%+A\"-+A\"-+Q\".,!\"1,!\"1,!\"1+Q\"/,1\"4-A\"5,Q\"5.!\"5,1\"4-Q\"0,A\"5.1\"/,A\"5.!\"5.1\"6-A\"5.1\"6-!\"8/1\";.Q\"=.A\"8.Q\"9,A\"5-A\"5.1\"9/Q\"=.A\">.1\"=/!\"@/!\"@/!\"@-!\"7.Q\"8/1\";.A\">/!\"@0!\"G0Q\"M01\"J01\"I/1\"C.Q\"?.Q\"?.Q\"?/!\"@/Q\"F1A\"R11\"P1Q\"T1!\"O0A\"J/1\"B/1\"B.Q\"?/!\"@/Q\"F1A\"R21\"P2A\"Z3A\"V3Q\"U1Q\"S0Q\"M01\"J01\"J0A\"J0!\"H0Q\"M2!\"Q2!\"R21\"W4!\"Z4!\"Z2Q\"Z2A\"Z2A\"Z2A\"Y1Q\"U1!\"N0Q\"M0Q\"M1!\"K0A\"F11\"D1!\"B/!\"4/!\"0/Q\"*/Q!`.1!^-1!X-A!Z/!\"!/Q\"+/A\",/1\")/A\"*/Q\"+/1\"*/1\"*01\"*0A\").Q\".1Q\")0Q\".1Q\"/1Q\"11Q\"11Q\"20Q\":1!\":1!\">11\"D11\"H2A\"O1Q\"U3A\"U3!\"Y2A\"Z2A\"Z2A\"Z2!\"S2!\"Q11\"Q1Q\"M01\"J1A\"R1A\"R2A\"U3Q\"U2A\"Z3!\"Y3!\"X1Q\"S1A\"S01\"J/Q\"F0!\"G/A\"C/Q\"F0Q\"M1Q\"T3!\"U2Q\"V2!\"R1!\"O/Q\"E.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F0A\"K0Q\"M0Q\"M/Q\"F/!\"@.Q\"?.Q\":/1\"8/!\"@/!\"@/A\"D0A\"K/1\"B/1\"C.A\">-A\"9.!\"5-A\"9/1\";/!\"@/!\"@/!\"@/!\"?.A\"8/!\"6-1\"5-A\"5-A\"5.1\"8/!\"60!\"9.!\"5.!\"5,A\"5,A\"5.!\"5,A\"5.1\"6,A\"5,1\"2,!\"1,!\"1,!\"1+A\"-,!\"2+A\",,1\"3,1\"3,1\"3,1\"4,1\"4-!\"3.A\"/-A\"5,Q\"5-1\"6-!\"5.!\"7-Q\"8-!\"7.!\"9-1\"6.!\"6.!\"9-1\"9-A\":/1\"?.Q\"?.1\":.!\"9/A\":/1\"/!\"A/A\"E/A\"D/Q\"E/!\"@/!\"@/Q\";.A\">/1\"@01\"I0A\"K0Q\"M0Q\"M01\"I/1\"C/!\"A.Q\"?/1\"A/Q\"F1!\"N2A\"W21\"S21\"W1!\"O0Q\"L/Q\"F/A\"C/1\"B0Q\"L11\"O2A\"W3Q\"W2Q\"Y2A\"Z3!\"Y2!\"S1A\"S0Q\"M0Q\"L0Q\"L1Q\"R2!\"R31\"X31\"\\41#!3Q\"`41#\"3A\"^3!\"Y3A\"V1Q\"T1!\"O1!\"K0Q\"J11\"G0A\"<0Q\"60A\"+.A\"\".!!^-1!\\-A!Z-1!X+Q!X-1!X-1!X-A!Z.A\"!.1!].Q!_.1!`.A!^.A!].Q\"!.Q\"!.Q\"!.Q\"!.Q\"\".Q\"\".A\"\"/!\"#/!\"$/!\"&1!\"&1!\"(11\"(1Q\".1Q\"01Q\"41A\"71Q\"91!\"B1A\"J3!\"P31\"S31\"[4!#!3A\"^3!\"\\2Q\"Y1Q\"T11\"P1!\"O1Q\"S2!\"V3Q\"\\4!\"^3A\"_4!#!4!\"X31\"V2!\"S0A\"K0!\"G01\"H0!\"H0Q\"M2!\"S3!\"Y3!\"Y3A\"V1Q\"S1!\"O/1\"B/1\"B/!\"A/Q\"F01\"I11\"Q1A\"R1Q\"R1!\"M/Q\"F/1\"A/1\"?/!\"@/!\"@/!\"@0A\"K0A\"J0!\"H/1\"B/!\"A/!\">/A\";.!\";.1\"=/!\"@/!\"@/!\"@.Q\"?.1\".A\">/!\"@/!\"@.Q\";.1\"<.!\";/!\"@/!\"A0!\"G0Q\"L01\"J.Q\"?/!\"@/!\"@/!\"@/!\"@01\"J1!\"N1A\"Q1!\"N01\"H/A\"E.Q\"?.Q\"?/1\"B0A\"K1Q\"N3A\"T3!\"X31\"W1A\"R0A\"J/Q\"F0A\"K0Q\"M1A\"R2Q\"U4!\"]4A\"_4A#$3!\"]3A\"V3!\"V0Q\"M0Q\"M0Q\"M2!\"U21\"V4A\"_41#(4Q#(4Q#*4Q#%3A\"_2Q\"[3A\"V2Q\"U1A\"R0Q\"M1!\"C1!\"=01\"5/Q\"*.A\"!-Q!\\-1!X-1!X-1!X-1!X-1!X-1!X-1!X-1!X-1!U-1!X-1!X-A![/A!\\0!\"\"1A\"'0Q\"'2Q\"+3!\"+3A\",3A\"-3A\"-21\".21\"-2A\"%0A\"$01\"$/A\"$/A\"$/!\"#/Q\"$/Q\"$0A\"$1A\"%1Q\")1Q\"-1Q\"-1A\"91A\"?21\"A21\"Q3!\"V4A\"[3Q\"`4!#!2Q\"[21\"W2A\"S2A\"T3A\"V31\"W3A\"_4Q#%4Q#%4A##4!#!4!\"Y2!\"U11\"Q0A\"K0Q\"M0Q\"M3!\"Y2Q\"Y3Q\"[3!\"[21\"W1A\"R0Q\"M0!\"G/!\"@/A\"C0Q\"M1A\"R2Q\"V2A\"Y11\"P0A\"K/1\"B/!\"@/!\"@/!\"@/A\"E01\"H1!\"N01\"J/Q\"E/!\"@/!\"@/!\"@-Q\";.1\"=/!\"@/!\"A/A\"D.1\"=.1\"=.Q\";-A\"7.Q\";/A\"9.!\";/Q\"=.!\"<-Q\";.1\"7,Q\"6.Q\"9.!\"6.Q\"9.A\"9-A\"5-A\"5-1\"5,A\"5,A\"5,A\"5-Q\"5-1\"5-A\"5.!\"8.Q\"6-Q\":/!\"8/1\";.1\":.1\"=.!\";.1\"<.!\"<.A\"=.1\"=/!\"?/!\"@/!\"@/!\"@.Q\"?/!\"@/!\"@.Q\"?.Q\"?.Q\"?0!\"H0Q\"M0Q\"M/Q\"F0!\"G.Q\"?/!\"@/1\"B0!\"G0Q\"M1Q\"Q2A\"V21\"R1A\"Q0A\"J0!\"H0!\"G0Q\"M1A\"S3A\"V3A\"^31\"]3!\"Y3A\"U11\"Q0A\"J0Q\"M11\"P3!\"W4!\"X4Q#%4Q#%4Q#%3Q\"`2Q\"[2Q\"U11\"Q2!\"V3!\"X41\"Z41#%5A#*5Q#06A#-6!#)4Q#&3A\"^3Q\"\\31\"U21\"Q1!\"K01\"?01\"4.!\"+.!!`-A!Y-A!Y-1!X-1!X-1!X-1!W,A!W-1!W-A!U/!!`11\"&2!\"+41\"17Q\"79Q\"?:1\"A;Q\"H;A\"B9A\">:A\"?:!\"781\";:A\"<:Q\"?:Q\"?;Q\"C0!\"<-Q\":/1\"9-!\"7-A\"7.1\":.A\"6.!\":01\"8.1\"8.1\"8.A\"9.A\":-1\"5-Q\"9.1\"9/!\"8.!\"<-Q\";.1\"=.Q\"?/A\">/!\"<.Q\"?.A\">.1\"=/!\"@/!\"A/A\"E/1\"A.Q\"?/!\"@/!\"@/!\"@/!\"A/Q\"F1!\"N1!\"N1!\"N0Q\"L0A\"K/!\"@/Q\"F0!\"G1!\"N2!\"S2Q\"Y3Q\"U2!\"R11\"P0A\"J0Q\"M0Q\"L21\"V3Q\"W3Q\"`4Q#%3A\"_3!\"X1A\"Q1!\"N11\"O2A\"V31\"W4Q##5!#+51#-51#'41#\"3!\"Z3A\"V31\"X3A\"T41\"\\5!#$5Q#-6!#061#06A#05!#)4Q#&4!\"Z4!\"T2!\"R1A\"F11\">.!\"7.1\"&-Q\"!-A![-1!X-1!X-1!X-1!X,A!V*Q!W.1!V.Q\"!3A\"+7A\";:1\"A=1\"?:Q\";9!\"68Q\"67Q\"-5A\")5A\"%4Q\")51\"&51\"(5Q\"(51\"+5Q\"25A\"16!\"*5!\"+4Q\"*4!\"(51\"+5A\".81\"08Q\"6;Q\"A>1\"F>1\"O;A\"L9Q\"E61\";2A\",0Q\")1!\"&0!\"'.Q\")01\"*0A\".1A\"70Q\":11\"@2!\"L31\"X3Q\"_4A##4A#!41\"^2Q\"[3A\"V4Q\"`4Q#%5Q#*6A#.61#-5Q#*4Q#\"3!\"Y3!\"V1A\"Q3!\"V31\"W4A#\"4Q#%4Q#%4A##41\"\\21\"U1!\"O1!\"N0!\"G0Q\"M3A\"U2Q\"Z3Q\"`3!\"X1Q\"R0Q\"L0!\"G01\"I0A\"K1!\"N11\"Q2Q\"Q1Q\"T0Q\"M/Q\"E/!\"A/!\"@/!\"A01\"I0A\"L01\"I0!\"H/Q\"F.Q\"?.A\">/!\"@/!\"@/!\"@.A\">/!\"@/!\"@/!\"@.A\">-Q\";/A\".A\">.Q\"?.Q\"?.Q\"?.Q\"?/!\"@.1\"=.Q\"?/!\"@/1\"B0!\"G01\"J0A\"K/1\"B/!\"@/!\"@/1\"C0Q\"L1A\"Q0Q\"M1A\"R1!\"N0!\"G0A\"K01\"I1!\"N1Q\"T3A\"U3Q\"U2A\"[31\"W1Q\"T1!\"N01\"I11\"P31\"V41\"]4Q#&4Q#'41#\"3A\"\\3Q\"U1A\"R2!\"V41\"W41\"`51#.6A#06Q#)5A#,4Q#$4Q\"[3Q\"W2A\"Z4A\"\\4Q#(51#+5A#+4Q#+5Q#05Q#04Q#+41##4!\"[2Q\"R01\"G01\"<.A\"5.1\")-Q!\\-1!X-1!X-1!X-1!X-1!W,!!U,1!R/A!V3Q\"/:!\"7.A\">-A\":.1\"=.A\"=.Q\"?.Q\"?.Q\"?.A\">.A\">.Q\"?.Q\"?.Q\"?.Q\"?/Q\"E.Q\"?/!\"@/!\"@/A\"D0A\"J0Q\"L0Q\"L1!\"N0!\"G0A\"K/1\"B01\"I0Q\"M11\"P1A\"R1Q\"U1A\"S1!\"N0A\"K0A\"J1!\"O1Q\"Q31\"W4!\"`3A\"_2Q\"Z2A\"V1!\"N1!\"N2!\"V3A\"U4A#!5!#(5!#(4Q#&41\"^3A\"W3A\"V31\"W3Q\"[5!#)61#/6A#06Q#061#/5!#&3Q\"`3A\"\\3A\"_4A#'5Q#.51#-5!#&4Q#&51#,6!#05!#)41\"`3A\"U11\"N1!\"C/Q\"7/1\"%-Q!`-Q![-A![-A![-Q!\\,Q!X+Q!U,A!W0!!`8!\"71!\"K21\"W4!\"]4Q#&4Q#)4Q#%4Q#&4Q#'6!#/5Q#05!#.5A#*6!#/51#+3A\"_3!\"Z2Q\"Z4!\"^4Q#&5A#*6A#061#/5A#&3A\"[2Q\"W1A\"O21\"S3A\"V41##5!#&4Q#%4Q\"`31\"X1A\"N1!\"N1!\"N11\"P3!\"R3!\"Y2Q\"Z1Q\"U1Q\"T01\"I01\"I01\"I0Q\"M1!\"N1!\"N1!\"O01\"I0A\"L/A\"C/!\"@/Q\"E/1\"B/Q\"E01\"I/1\"C/!\"@/!\"@/!\"@/!\"@.Q\"?.Q\"?-Q\";.Q\"?-Q\";.!\";.1\"=.1\"=.!\"<.1\"=.1\"=.Q\"?.Q\"?.Q\"?/1\"B/1\"C.Q\"?/Q\"F0!\"H0A\"L0A\"L1!\"N1!\"N01\"I0A\"K0A\"L0A\"L0Q\"L1A\"R21\"S4!\"T2A\"Y11\"P1!\"N1!\"N1!\"N2Q\"U31\"Z4!#!4!#!3Q\"`3!\"Y21\"U1A\"R31\"Q4!\"\\41##4Q#$51#&5!#)4Q#%2A\"Z31\"W31\"W4!#\"5Q#*6!#.5A#*5Q#-6A#/51#'41##4A#$4Q#%6!#-51#,51#(4Q#%4Q#%4Q#-6!#051#.4!#!3Q\"S1A\"L0Q\";.1\"1.Q\"$,Q![-1!X-A![-1!Y-!!R+!!H,1!R1A\"#7A\"99Q\"8:!\"+7Q\"+3Q\"%51\"-51\"22Q\"0/Q\"#-Q!X+!!U-Q![2!\"%7A\"8BQ\"7CQ\"2AA\"1BQ\"1B1\"2B1\"2D!\"6BQ\"9B!\";A1\"A@Q\"H;A\"C6A\"92!\"'.!!Z-1!V-A!T/A!^1Q\"$3A\"&1!\"%11\"%41\"/;Q\"DBQ\"]C1#!=!\"S41\"811\"(.1\"\".1\"$0!\"'/Q\"21!\"70A\";1!\"C1Q\"N2Q\"Z4A#$4Q#%4Q#%4Q#%51#*6!#05A#)4Q#%4!#$5!#(6!#-4A##4!#!3Q\"Z4!#!5A#)6Q#05Q#061#+51#+4!\"`3Q\"U2Q\"Z4!\"T3A\"_5!#&5!#&5!#*41##3A\"S21\"S1!\"N1A\"S31\"T2Q\"Z3A\"_2Q\"[21\"W1A\"R1!\"N0A\"J1!\"N11\"P11\"Q1Q\"T1Q\"T1!\"N0Q\"L0!\"H/Q\"E01\"I0!\"H0!\"G0!\"H/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@.Q\"?.Q\"?/1\"B/1\"A/1\"A/A\"E0!\"G0!\"H0A\"K/Q\"E0A\"J/Q\"F01\"I1!\"N1!\"O11\"Q1!\"N1!\"N0A\"K0A\"J1!\"O1Q\"S3Q\"U2Q\"Z2Q\"[31\"T1A\"S11\"P11\"P2A\"Y4A\"[4A#$3!\"[41#\"31\"]4!\"T2A\"R3!\"X3Q#!4!#!,AR6)QB!3Q\"_4Q#%3Q\"`3A\"_3Q\"`4Q#(5!#+1Q\"P1!\"O4A#$61#05A#.4Q#%4Q#%51#)5A#.5!#+4Q#,5A#)51#)4Q#(5Q#051#.4Q\"]3A\"Q11\"E/1\"6.!\"'.1\"\".!!_.1\"\"/1\"#-Q!\\+!!Q+!!O0Q\"(71\"5;1\"2:Q\".6A\"*61\"-6Q\"55!\"31Q\"(-Q!W.1!X2Q\"'7Q\"0?Q\"FC1\"@B1\"*@!!W<1!L6Q!?4Q!;21!91!!;/Q!5.Q!:-1!7.Q!8.Q!:.Q!:1!!>4!!<61!>81!D=A!M@1!VCQ\"-BA\"7?!\"?9A\":2Q\"*-A!^+1!W.Q!\\2Q\"$21\"'11!_2A\"'9Q\"?C1\"[DQ#&Q\">B!\"7?Q\"!;A!I5!!?0A!7.!!6*Q!7*1!6(1!8)1!9'!!6&A!8'1!5&Q!6&Q!;(1!9(1!=)!!=(!!<*!!:*1!9,!!=/1!<2Q!;6Q!<&A!='A!9'A!9'Q!=+A!<,1!90!!<5!!;01\"H1Q\"T41#$5A#/5Q#05Q#04Q#-3Q#-/1#3.1#3/1#241#,6!#/51#(6!#&61#.5Q#-.Q#+.A#*/1#\"3Q#.51#(41#\"3A\"_5!#&61#'5A#/6Q#16!#,41##3Q\"]3!\"Y3!\"]4A\"]41##4A#$4A#$31\"^3A\"V2Q\"U1Q\"T1Q\"T31\"W31\"W31\"X3!\"Y2A\"U1!\"N1!\"N11\"Q11\"P11\"P1!\"N1!\"N1!\"N01\"I01\"I0A\"K0A\"K0!\"G01\"I01\"H01\"I/Q\"F1!\"N0Q\"M1!\"N1!\"N1!\"N1!\"N1!\"N1!\"N11\"P1Q\"T2A\"V3Q\"U3!\"X21\"X1Q\"S1Q\"T2Q\"W3!\"W3A\"]4Q#$3Q\"`3Q\"^3A\"_3A\"V2Q\"Z4!\"`4A##.A\"?$2!;#A!=/!\"=4Q#$3Q\"`5!#$0!2J$!!;!!Q)!!Q'#A!821\"U61#(5!#)61#--QR:#R!6#\"!<(A\"\"1Q\"X4Q#'5Q#061#05Q#,4Q#)5A#,5Q#061#061#04Q#*4Q#'5!#.61#-4Q\"\\21\"H0A\"2.A\"&/Q\"%/A\"$0Q\"%0A\"#,!!S*Q!L2!\"(61\")81\"&7!\".6A\"+8A\"?3A\"-,1!Q0!!]:1\";CQ\"AC!\"!81!G/1!:*1!3(Q!3&Q!8&!!2&A!:)1!E/A!Y4A\"+;Q\"6@1\"9F1B6HA21J1R)KQR%L1\"%M!B%MA2%LQB%JQB3F!29AQ\";>!\"87!\"50A\"#+!!M'Q!C'1!>(Q!;)Q!?,Q!=2!!;91!=A1!SF!\"C/1\"\"+Q!Y1!\"%5A\"011\"'0A!`:Q\"=G1#!?A\"Y41\"0.Q\"\".A\"!0!\"%01\"2.Q\"50!\":/Q\">/Q\"D1A\"R4!#!5A#*5A#051#/4Q#*2A#1/A#3/A#3/1#22Q#26A#,5Q#/5Q#06!#00!#&.A#-.Q#%.A##2Q#)5!#'4Q#%5!#&5A#+51#+5A#/6Q#06!#,5!#&3Q\"`3A\"W3Q\"_41#\"5!#&5!#'4Q#%3Q\"^2Q\"Z2A\"S2Q\"R3A\"V3!\"Y31\"[3!\"X3A\"V2!\"V11\"Q11\"P1!\"N1A\"S11\"Q1A\"R1!\"N1!\"N1!\"N0A\"J0A\"K0A\"K0Q\"L0!\"H1!\"N0!\"H1!\"N1!\"N1!\"N1!\"N1!\"O1A\"R1!\"N1!\"N21\"Q2A\"S3A\"S3!\"Y3Q\"U2Q\"P2!\"R3!\"U3A\"V3A\"_4A##5!#&4A#$3Q\"`2Q\"[31\"]31\"^4Q#%0!\"H%!QA!!!(\"2A-/1\"D4A#$4A#$0!\"L#1!@!\"A&!\"1'!!!(&AQK4Q#%5A#+6!#/-QR4!2!*%1Q?'1!Z-!\"64A#$5A#,61#05A#-5!#,5Q#/6!#05!#,5A#05A#/4Q#'4Q#'5Q#-4Q\"^2!\"J1!\"9.Q\"+01\"$0!\"$1A\"&1Q\",-1!T+Q!P4A\"08Q\",91\"$4A\"&4Q\"*8!\"801\"#,Q!T4A\"0B1\"LFQ\"0<1!L0Q!9*A!6'Q!3&1!3%Q!2&A!=.!!U81\":B!\"@HA23J1ARMQA?M\"A/HRQ&HC1!G#!!E31!ESA!G31!H#A!I3Q!J3Q!K3!)O3!4Q\"!CO!AOL12,DQ\"C;A\"@11\"\"(1!I)1!='A!>)Q!D-Q!?11!6=!!4Q\"0I1\"FNA!PG\"Q$BSA!A#A!:B!#1!!4.Q!E-1!M.1!I0!!@4115;\"!-?R!,BSA.E#A.D3A2BS!1B\"A6.!#.01#021#+/!#).A#\",!\"5,1\"4-!\"7.!\"L.!#\"0Q#\"/1#&.1#\"-Q\"C(1!S)1!Z/!\"<5Q#*5Q#+5!#)5!#)51#*+Q\"/+A\",/A\"E4A##4!#\"4A\"]3!\"]41#\"3A\"V1Q\"S1Q\"O3!\"Z31\"^31\"W2Q\"[2Q\"[2Q\"[31\"X3Q\"U3!\"Y21\"R2!\"R1Q\"T11\"Q11\"P1A\"R2!\"T21\"T21\"R31\"T1Q\"S1A\"R21\"X21\"V1A\"Q0!\"G01\"J0Q\"K2Q\"V31\"]3A\"^3Q\"`0A\"I+!\"(*Q\"%*Q\"%0!\"G5!#&5!#&5!#&11\"O'!!O$A!K&Q!P(Q!W!\"A&!!!(!!!)!B1)%AQD'1!P&Q!N'Q!Q\"\"1+!!A'!2Q(!1A*$1Q@&A!L'A!Q'1!](1\"&21\"Z5!#'6!#-6!#06!#/2A\"W.A\"<.1\":/Q\"G3A\"^41\"_3Q\"S3Q\"Z5!\"Y21\"F1Q\"/2A\",3!\")1A\"%5A\"8-!!U'Q!A01!`7Q\"&61\"%2A\"#8A\">4!\".(Q!G41\",I1\"WCA!Y2Q!9)Q!1&A!0%A!0(1!H9!\"5PQ\"8L!Q4E3A\"E#Q!?C!%2Q!5.A!G.!!J1A!>8BQ*E#1%ME1\"Q6A!P6Q!M6!!MF!!N&1!PF1!R'1!SW1!VW1!TFA\"R51$HSA'>RA>4!!Q0!!T+!!E)1!>*QA/5R!$D#Q!T$1$TAQWG1\"O/A!]'Q!<)1!E+A!L.!!A91!EGQ\"*BA\"P/1!_+1!P41\"411\"\"/1!Z?A\"OM1#961\"=,!!V-A!W.A\"$1!\"3.1\"=-Q\";.A\"=-A\"9/1\"80A\"N5A#.51#03Q#1/1#3.1\">+!\")+Q\"/,Q\"B.1#,.A#1.A#1.Q#*,A\":,1\"4*Q\"%,1\"1-Q\"Q-!#!-!#!-Q#!.A\"I'!AI$A1;(1!T1!\"M5Q#,61#)6Q#'41#%,A\"(+1\"*+1\"+0A\"J4Q#\"41##4A##4A##21\"U1!\"N1!\"M11\"P3!\"]3!\"Z3Q\"]3Q\"U3Q\"]31\"W3!\"X31\"X2Q\"X2Q\"Y2!\"R2!\"U2!\"U2A\"S2Q\"U2A\"T21\"S01\"J0Q\"M1!\"O1!\"O0A\"K/Q\"E0A\"L0!\"H/Q\"F2Q\"U3!\"\\4!#!0!\"H+1\")*Q\"%+1\"+*Q\"%.Q\"@5!#&5A#$5A#!(!QY\"Q!4#!1@'A!S'A!S!!A'!!A)!\"A'%!!B'1!O%!!J&1!M'A!Q\"\"Q*!\"A&!!!(!RA+'!!P'A!S'A!S&!!`)!\"#51#+51#.6!#061#031#!/Q\"@-Q\"8.Q\"\"Q&1QQ8-A!M.A1@6RQ,FTQ\"R'!!OV1!H%1!>T!!8C1!2\"A$/!1%/11%0B1&32A#8B1\">TA!I5Q!R'Q!W81!WG1!LD1(>QA<51!U,A!P*!!?*1!5/1!&A4!!T4Q%WRQSE1\"W/A!]&1!8)A!I-1!N/Q!;=1!LJQ\"@:Q\"D+A!T11\"#6A\":.!!W41\"/HQ\"]C1#(/Q\"#+Q!R-A!]0!\"1/Q\":-Q\";/1\";.Q\"+A!8+Q!4-QQ)21Q(?$1\"MF!!YHA!ZG!!L3!,:QQS0!![*!!D)1!9-!Q*@3!!U$Q!XQ!]EA\"R,!!N'Q!>+A!N-A!J1!!BE1!VGA\"P31\")*!!M5A\"721\"+.A!W.A\"8.A\"9.!\"9.Q\"8.1\"7/1\";/1\"C31\"O21\"F21\"761\"96!\"5/1\"#9!\"B+A!S)!!B6A\"0:1!^3Q!`51\"':Q\"I,Q!S+1!OBQ\"OJQ\"34Q!D*Q!1'1!0$Q!0(1!AAA\"GUA!`E!Q$DTA!F$!!1Q!7*Q!B-A!BC$1\"VWA!Q'!!:C1!.1A#*!!0*1!2-1!>-Q!81A!421A14AQ*52A'42!+2!14/!Q:-!!A*Q!=,1A23\"1(F5Q!UGQ![(A!OD1)>!!I01![*1!B)Q!60QA&ED!!Z31%TQR191\"A)!!>(A!<-1!R.1!C9A!JJ1\"6>!\"J)1!O.A!`5Q\"4.1!T41\"+L!#'C!#!,1!R*A!Q-A!]1A\"6/1\">/!\">.!\":.1\"9/!\"7.1\";/!\"D31#+1!#2.1#++A\"60A\"O3!\"_+Q\"+,1\"1.1\"U.A#,-Q\"@,!\"2)!!X01\"K*!!_+A\",-A\">-1\"_.Q\"I'1!U%11<+Q\"*(!!O(Q!T-Q\"32Q\"Q/Q\"H+!\"(-!\",-1\"6,1\"1+A\",/Q\"F2A\"V31\"V11\"P1!\"O1Q\"T1Q\"T0A\"K0A\"K3!\"R31\"Z4!\"W3!\"Z31\"]31\"\\3!\"[3Q\"]31\"W3A\"V3A\"V/Q\"E/1\"B0!\"G/Q\"F/1\"C/Q\"E0A\"K0!\"G0!\"I-!\"5,1\"-+!\"#+!\"!,1\"&+Q\"&+!\"'+!\"'-1\"90Q\"E+!\"$*!!^+!\"&+Q\"#&A!K#114*12$3!\"`,A\"1&Q!P'A!T%1A>&QAK%!!K+!\"&4!#$1Q\"S'Q!V'Q!Q\"Q1<$1!F'Q!Q,Q\"64Q#.6!#01!\"O,!\"20!\"L5Q#06Q#061#02Q\"V/Q\"B-!\"7/!\";.1\"7-A\":/A\";.Q\"9.A\">31\"O21\"F3Q\"78Q\"B4A\"3.1!`6A\"=)Q!G+Q!O7!\"/8!!\\1!!Y7!\"07Q\"?)1!G.Q!XI1\"RE1!_/Q!9)A!1&1!0\"QA-.!!SNQ\"MOAQ7B2Q!J51!=R1%,A!C,1!D7B1,UH1!WXA!=$1!-!Q$+!!)*A!9,1!>1!10821&BT1!LVQ!PWA!Q7A!PG1!L6A!C$!!82!&0!!4-!!B+Q!90AQ'ETA!Y8A!ZX1!P$!);!\"$-Q!U(A!B*Q1052Q$Q51![\"A?K1\"W,Q!W&A!7+Q!S-A!H2A!AFQ\"$FQ\"Q-A!Y-A!V6Q\"@.1\"!/!!_F!\"\\IA#/11\"))Q!C,!!R11\"40!\"C/A\">-A\"6-1\"5-1\"5/!\"6-!\"7.Q\"T0!#3/Q#0-Q\"G1A\"R6!#02Q\"]*!!\\-1\"9.1\"[,1\"9,!\"2+1\".4Q#.2A\"X)!!X,!\"1-Q\"F-Q\";(Q!Z%AAF3!\"U0Q\"L(!!S+!\"'-1\"7-A\"0,!\"*,A\",2A\"S3!\"U-!\".-A\";0Q\"L11\"P1A\"S11\"P2Q\"U21\"U1Q\"T11\"P11\"Q2Q\"U21\"Y2A\"T3!\"W3!\"X3A\"\\3!\"Z31\"^2Q\"[2Q\"[/1\"C0!\"H01\"I0!\"G0!\"H01\"J0!\"H0A\"K.Q\"@/Q\"A0A\"F,1\"1*A\"$*Q\"$*Q\"%*Q\"%-!\"33Q#\"5A#..A\"<(1!Q*A!]'A!O\"115%11J5Q#*6!#/0A\"I&Q!R'1!P'Q!Q&A!L'Q!R2A\"X5!#&3A\"^(A!W'!!O'1!P&A!M*1\"!31#\"51#051#02!\"X-Q\";1A\"U5Q#06Q#05A#04!##/!\"A/!\"6.1\"<0!\"<.A\"9-Q\":.1\"9.!\":3A\"L1Q\"84Q\"9:A\"M4!\".0Q\"!41\"7'Q!?*Q!P5!\"#6!\"!0!![:1\"85Q\"9)1!B2A\",KQ\"MAA!O,A!5(Q!1$Q!/&1!851\".U1\";IAA*A#1!K5Q!4Q1/+A!@/A1=F$!![91!N'A!2\"Q#+1!&*Q!0,A!@1AQ1;#!!L7!!W(!!O71!GV!!F%A!N'Q!VYA!XYQ!QG1!ADA!2!Q0+1!?)Q!:3!A)M&!![)Q!Z'Q!G!A<6!\"')Q!G)A!:+Q!)H51!\\$A)UQ\"D7A\"6&Q!;+1!J/1!P-Q!D>Q!ZJQ\"H3!\"*)1!K5Q\"84A\")-1!P@!\"FLQ#/5A\"7(Q!G+Q!T/Q\"+1!\"B.Q\"?/Q\"9-Q\"7.A\"6,Q\"5.Q\"<-Q\"@.1#$.A#3.A\"L2!\"T6!#06!#00!\"F+Q\"/,A\"5,!\"1,!\"1-A\"86Q#(5A#-.Q\"A)!!\\+1\"+,A\"5)1!`)!!Z3Q\"`4Q#%/1\"E(A!X,A\"(,1\"*+A\",,Q\"36!#,5Q#02A\"[+A\",/1\"C1A\"R1A\"Q1!\"N4!#\"4Q#%2Q\"V1!\"N0!\"H1!\"N01\"H01\"I11\"P31\"X3A\"\\3Q\"]31\"W3Q\"]31\"X0A\"K0Q\"K2A\"O1Q\"P0Q\"M0!\"H0Q\"L0Q\"M2Q\"P4!\"]4!\"^1Q\"L+A\"+*Q\"%*Q\"%,1\"22A\"W6!#.6Q#12A\"Y&!!F&Q!N%Q!?#Q!;01\"E7!#15A#/2Q\"Y$QAP'Q!Q&Q!M&A!K-A\"64Q#%5!#&4Q#$*!\"\"'1!O'!!O'Q!Q.1\"@51#/6!#/5A#03A##1A\"S3Q\"_6A#06Q#06A#05A#+/1\"B.!\"8/1\"8.A\"=-Q\"7/1\"9-A\"5.Q\"=3A\"L2!\"961\"<+1!O8!\"*8Q!_0A!\\;!\"@5Q\"9'A!B3Q\"-MA\"M?Q!R,1!5(Q!0$Q!0$A177!\"2VQ\"3I11%A31!KE!!3AA4*A!A01A=KEQ!ZYQ!IV1!1AA\"-!!'*A!3,A!?1A1'?$!!RXQ!OW1!6\"A\"-Q!%,A1,1\"A%@$!!W)A!Z)!!Q'!!?#!\"/1!2)Q!=,1A2@TA!Y81![I!!Q#!/;A\")+!!N)!!<*!!/ACA!Z%!#ZQR&>A\"H(1!C*1!J0A!Z-A!?;!!VJA\"<5A\"6)!!E31\"35A\"9-1!S=A\";MA#)8A\"E(Q!F*!!M/Q\"*2Q\"C.Q\"A.!\":-!\"5,1\"4,1\"4-1\"5-1\"7.!\"B.A#+.Q\"L3!\"Y61#05Q#041#)+1\"-,A\"5+A\",+1\"*/A\"F5A#+5A#)4Q##)A\"#,A\"0+1\"*(1!T+1\"'4A#$4Q#%3Q\"_*A\"$,1\"'+Q\"),Q\"*/!\"@61#16!#16A#101\"B,1\"00!\"G01\"I2A\"O5!#*51#-5!#&2Q\"Y11\"Q1!\"N0!\"H1Q\"R31\"T31\"Z41#!3Q\"^31\"^31\"]31\"]3Q\"U31\"Y3Q\"Z4!\"Z2Q\"[21\"R2Q\"W3Q\"[4Q#%5!#&5!#'41#$.!\"<+Q\"%+1\")1!\"N5Q#,6A#+6Q#161#1'Q!P%11;!!A1*Q\"%6!#,7!#16Q#/5!#&(1![&Q!N&A!O'Q!T3Q\"`5!#&5!#&5!#'+!\"''Q!Q&Q!N(A!Z5!#15Q#/6!#+5Q#04A#)41#'5Q#/6Q#06A#06!#05A#,11\"E-Q\"5.Q\"<.1\"9/1\";,Q\"6-Q\"5.!\"84A\"I2Q\">8!\"B?Q\"Y4Q\".2!\"+6!\":'Q!<)A!G5A\"!91!^41\"&81\"75!\"6(Q!A1!\"(L!\"MAQ!P,Q!2(Q!0$11/&1!55!\")V1\"8K1!'B#1!LEA!6!1.,A!J0!1;GU!![:!!MW!!3B1!,A1&*A!2-A!:/A1,6B1!B4A!BEQ!4B!!+AA&)Q!0)1!0+Q1(HFQ!Z)!!WYQ!J&!!4!Q**Q!B,115/1\"_-A\"A4Q#(6A#051#06!#00A\"O+A\"-,1\"4*1\"\"1A\"V5Q#-6A#&5Q#,01\"E(A!T+Q\".&AQK.Q\"A41#\"4A##4!#!0A\"H*A\"#+A\"-+A\",2Q\"U7!#17!#17!#15!#%-!\"6,A\"3.1\"=3!\"Z5A#.61#'5!#+4A#%31\"U1A\"Q1A\"S3Q\"Z5!#$5!#&41#\"4Q#%31\"]3A\"\\3!\"X31\"\\3!\"]31\"^4A#!4A#$3Q\"_3A\"]5!#$5!#&5!#&5!#'6A#$3!\"Z0!\"A11\"I5Q#+6Q#-6!#16A#17!#1-Q\"?#AA;%!AE31\"[7!#17!#16Q#/5!#$+A\"0&1!O%A!I.A\"=4Q#%5!#&5!#&5!#).1\"?'1!P'!!P.Q\"B6Q#+61#)4Q#.61#06!#05Q#06Q#06Q#06A#06!#05!#0/!\"E.1\"8.A\"<.A\"<.Q\"9,1\"4-!\"5-A\"731\"I2Q\";8!\"GAQ#&71\"81!\"&8Q\"H)1!H)!!E61\");A!]6Q\"-6!\",9!\"@(Q!J.Q!ZGA\"TCQ!V0A!7)1!0%!!/$Q!3/!!]OA\"GOAQ0BCA!K%A!;RQ$,A!?-A!C<31(WY1!VIA!>DQ!1AA\",!!*+1!7-1!;-111111&2B1$/1A&*A!.*1!3)Q!0-QA'J61!Z)!!XY1!M6A!4RA,+!!>,A11>#A!U8Q!XH!!P41*>!\"',1!U(A!=)A!4.!!S:A\"7LQ#&9Q\"G'A!E(A!M/1\"&2Q\"I/A\"D.!\"6-Q\"5,Q\"0,Q\"2,Q\"5-1\"5-Q\"6/!\"N+Q\"35Q#05A#051#06A#-4!#)+!\"&+!\"((A!W4!#.61#+51#(5!#,5!#+)!!X(!!S&Q1E1Q\"R4Q#%3Q\"`41#\"3Q\"_,A\"-,!\"--A\"251#$7!#17!#17!#16Q#02Q\"Z,A\"30Q\"B41#(7!#(51#*6!#*6A#%5!#&3!\"\\31\"^4Q#%5!#&5!#&4!#!3A\"^3Q\"`3A\"^2Q\"[31\"]31\"^41#\"41\"^3A\"_41##5!#&5!#&5!#&5!#&5!#'5!#)5!#&3Q\"_4A#(5Q#.6!#+6!#-61#07!#141\"`,!\"./!\"E61#.7!#17!#16Q#141##01\"I&!!H(1!\\31\"Z41#\"3Q\"`5!#&51#(1Q\"S&!!N)A!^3!#!4Q#06!#*5A#)51#06A#06Q#06Q#06Q#05Q#06!#051#0/Q\"H-A\"5.A\";.Q\"<-Q\"5,1\"4-A\"5-1\"511\"<3!\"=7A\"AAA##:1\"@0Q!]8A\"G+!!R'A!<3A\"!91![71\"!4A\"(9A\"D*A!P+!!NA1\"SHA\"-61!>*Q!1&1!/$A!/)A!FDA\"JTAQKEBQ!I%Q!DD!\"0Q16,!!A01Q8JF!!YIQ!T8Q!>4!!1!!\".QA$,!!1+1!8,!!7,1!7+1!3+!!3*A!5+Q!)9CA!TH!![*!!V81!F5A!01!1)Q!=.!12A3A!UX1!Z8Q!O#Q:5Q\"7+Q!U>!\"ELQ#,6A\"<(Q!E*1!K/Q\"*2Q\"I/A\"D-A\"6-Q\"5,Q\"*.1\">-Q\"<-1\"5.Q\"9,!\"1,A\"25Q#051#051#06A#+6!#0/A\"F)1!X*A\"\"51#/6!#)5!#&5!#&5!#*/!\">$A1='A!Q31\"\\41##3!\"\\3!\"\\3A\"_1Q\"Q-!\"301\"L61#.7!#16!#17!#17!#16!#+3!\"S4!\"^6!#/5Q#15A#-5Q#)5!#*5!#(5!#&5!#&5!#&5!#&5!#&3Q\"`4A##3Q\"`4A#$31\"]3Q\"`3!\"]3A\"_4A#$4A#$5!#&5!#&5!#&5!#&5!#&6!#)6!#+61#(6!#&6A#(6A#+6A#061#-7!#17!#16A#141#'61#-7!#17!#17!#16Q#14A#(3!\"\\.!\":1!\"P5!#&5!#&4A#$41##5!#(5Q#+.1\":0A\"M4Q#06A#&4Q#'5Q#'5A#/6!#06Q#06Q#06A#05A#06Q#+4Q#021\"T-A\"5.!\"8-Q\"5-Q\"5,A\"3-!\"/-1\"50Q\"@4A\">5Q\"BAA#!?!\"R1!\"#6!\"411\"'&1!7.Q![8A\"$8!!^1A!W9Q\"C0A\"#'Q!B8Q\"7KQ\"I@Q!T-Q!5(1!0$A!/%A!31Q\"\"O!\"=PQQ5D3A!I%1!>#A%.!A>+Q!C11A4BDA#R81!U9!!I6A!;D1!6C!!0!Q$.1A*.!A*.!A*0!Q)7SQ!FF1!T(!![*!!WI!!FEQ!2Q!.*A!=+1!88B1%OF!!UXQ!UFA!DQ!T4A\"&(Q!C'Q!7+QQ(J$Q!\\31+U1\"U61\"7'1!<01!_41\"$.Q!G?1!`J1\"L/!\"\")A!I31\"311\"$,A!RB!\"KL1#/21\"/)A!A)Q!P0A\"01A\"H1!\"G,Q\"6,1\"4.1\"93Q\"U3!\"V-Q\":-Q\"5,!\"1/Q\"G6!#05Q#04Q#*51#.5!#05!#--!\"20A\"L61#-51#)5!#&5!#&5!#&4!#'-!\"2/A\"B4A#$4!#!5!#'5!#)4A##4!#!2Q\"Z6!#,7!#17!#16!#17!#17!#16Q#15Q#15A#16A#(51#.6A#&5!#+7!#%5A#)5!#*5!#&5!#&5!#&5!#&5!#&4A#$3Q\"`3!\"]3!\"\\3A\"_4!#!4!#!4A#$4Q#%4!#!5!#&5!#&5!#&5!#&5!#'51#)61#(5Q#+5!#/61#-5Q#,5A#,6Q#06Q#17!#16A#16Q#17!#17!#17!#17!#16!#,4A#%3A\"_4A#$4Q#$31\"^3A\"^31\"^5!#&5Q#(41#&4Q#*5!#-4Q#'4Q#%51#'51#+5A#06Q#06Q#05Q#051#05Q#,6A#'3Q#$-!\"5-1\"8-A\"7-1\"4,!\",-A\"),A\"3.Q\"93!\"A5A\"B>Q\"`CA#\"7Q\"62Q\"061\"?(!!B*!!N61\"$9!!\\5Q![6Q\",81\"B)1!L.A!XCA\"UJA\"061!G+A!1&!!0%A!1(1!<:Q\"8RA\"1JQA(F3A!IU!!.1A3821&NV1!U7!!S6A!JRA<@!\"4.!!Z'Q!9'Q!0/A1(F$!![C!/TQ2J7A\"=(1!9-Q!S6Q\".0!!K9!!XFA\"K71\":(A!G0A\"'31\"2-Q!S81\"=O1#911\"&1!\"\"EQ\"PI1#.1A\"&)1!C+Q!T-Q\"&1A\"D2!\"S/A\"E,A\"5-1\".3Q#\"4Q#'4Q#&4Q#(11\"J1A\"Q6!#-5!#-4Q#&4!#!4Q#%5!#,6!#06!#051#05A#+4A#$3Q\"`3!\"]4!#!4A#&4Q#&5!#&3Q#!5!#+6Q#17!#17!#15A#061#07!#16Q#15Q#16A#16!#17!#16Q#161#16!#-6A#+51#-51#)6!#)6Q#'6A#'5!#*5!#&5!#&5!#\"5!\"`5!#&4!#!4Q#%3A\"_4!#!31\"]3Q\"`4A##3Q\"`4!#\"4Q#%5!#&5!#&5!#&5!#&5!#&5Q#(5A#+51#'51#.61#,5A#*6!#+6!#-5A#.6Q#16Q#16A#16Q#17!#15Q#16Q#16Q#15!#*4A#$4!#\"4A##4Q#(6A#15A#.41##5!#&5Q#,5Q#.4Q#%41##3A\"^3A\"_4Q#'4Q#06!#06!#051#04Q#)4!#!4Q#%4Q#'21\"[,Q\"7,1\"4,1\"2/Q\"F4A\"`1!\"N-!\"8.1\"61!\"75!\"@#1&9\"A)1A1+.!14.119-A1:.11:.A15/!A/4!1);\"Q&@#Q$HU1!O&A!O%!!NU1\"I\"Q3C!\"!7A\".,A!L'Q!;'1!3-Q!)@3Q!TCA)WQB-FA\"Y.!![)!!D2Q\"%4A\"$1A!H=Q\"#EA\"I2A\"*(Q!G3A\".3Q\"3-A!X9Q\";N!#-<1\"M,!!W*Q!H,1!\\0!\"/11\"K2!\"T.!\"<,Q\"2/A\"@4Q#%4Q#%4Q#)5!#/4!\"Z4Q#&5Q#05A#-4A#$41##4!#!5!#&51#-51#05A#,51#(4!#!4A#'41#$41##4A#&4Q#&41#\"3Q#!5Q#.6Q#16Q#17!#17!#17!#17!#16Q#161#16!#16A#17!#16!#17!#161#06A#06Q#(5Q#+5Q#)5!#)5!#)5!#&5!#&5!#&5!#&5!#&4!#!4!#!41#\"3Q\"`3A\"^3A\"_41#\"3A\"_41#\"5!#&4!#!5!#&5!#&5!#&5!#&5!#&5Q#(5Q#&61#*6A#,51#(5Q#+61#'6Q#)6!#.61#16Q#15Q#161#17!#161#16!#16!#15Q#/3A\"`3A\"_3!\"\\6!#-7!#17!#14A#*4A#$5!#&5A#*4Q#%4A##3Q\"`4A#%4Q#%4Q#,51#05Q#04Q#04Q#'41##3Q\"`4Q#$41#%.Q\"?,Q\"2,Q\"11Q\"P4Q#%3A\"^0A\"J.1\"80!\"62Q\"77!\"G@1#$EQ#*?Q\"R4!\"*8!\"?/A\"%(1!<-Q!Z6!\"!8A\"!6!!^5Q\".7Q\">.A!T)Q!J5A\"2E1\"LEQ\"\"71!;,Q!-(1!0&Q!0%A!1'Q!@1Q\"\">A\"@FA\"+I!QII210J#!!KD!!I$!!GT1!G4A!E4A!E$1!ET!!GDQ!JUQ!L%A!M%!!L%Q!KD1!IC!/G2!D@!\"\"7!\".-Q!V(A!?'1!4)!!02B!&ECA!UC!3TQRKBA\"Y+Q!O)A!F21\")4!\"'/Q!M;!![E1\"A71\"6)A!I.Q!`6Q\"@-Q!\\1!\"!F1#\"F!#(0!\"!*A!L,1!V.1\")0!\"=4!\"T11\"M-!\"8,Q\"72A\"W4Q#%4!#!4Q#%5A#,4Q#,51#05Q#/4Q#)41##4!#!41#'5!#'6Q#*5Q#,5Q#)4A##4Q#%5Q#14A#'4!#!4A##4A#$5!#&51#(7!#15Q#15Q#17!#17!#17!#17!#16!#15A#16A#.5A#-6A#16A#16!#.6A#)5Q#.5!#,5Q#)5Q#)6A#(6A#&5!#*5!#&5!#&5!#&5!#&5!#&41#\"3Q\"`3Q\"`3!\"]3!\"\\31\"]4!#!4!#!41##4!#!5!#&5!#&4Q#$5!#&5!#&51#'51#*51#(7!#(5A#-6!#*61#)5Q#+5Q#,6Q#16Q#16Q#16!#15Q#16!#161#16Q#16A#14Q#)4A##3Q#!6A#16A#16A#15Q#-4Q#%5!#&5!#'4Q#%3Q#!4Q#,5!#.4!##4Q#&5Q#051#04Q#,4Q#%3A\"_41#\"41#\"4Q#'1Q\"S,Q\"3,A\"51A\"S4Q#%41#\"2A\"W/!\"@/A\"81A\"731\":9A\"QCA#*FA#)!!D2A!3+1!0'Q!0&1!0&Q!4(1!:.1!Q61\"(=1\"0BQR&D11ZDAADF!15HRA1HBA.GRQ.HC1.H3!.H3!.F\"A1C1!>BQAT?Q!]9!\"'2Q!`-!!N)!!>'!!8(Q10.11,9B!\"LCQ&QQALNA\"L;Q\"C,A!R*Q!M4!\"-51\"&0Q!R71!WB1\"98A\"8*A!K.A!W7A\"<0A\"!/1![@!\"JH!#%71\";,!!V,!!S-1!^0A\"22Q\"O3Q\"W0Q\"K-A\"0.Q\"A4A#$41##3Q\"`4Q#%51#-6!#051#05!#-4Q#%4A#%4!#\"4!#\"4A#%51#+51#-4Q#)3A\"_5!#+7!#15Q#-3Q\"`4A#$41##3A\"_5A#-7!#15Q#161#17!#17!#17!#16A#15A#15Q#15Q#.5A#-71#+61#-5Q#.5Q#+51#)6A#%51#)51#)5!#(5!#'5!#&5!#&5!#&5!##5!#&5!##3Q\"`4!#!3A\"_4!#!3A\"_5!\"^3Q\"`3Q\"`3Q\"_5!#&5!\"^5!#&41#\"5!#&5!#&5!#&5!#(61#(5!#.51#'5!#*5!#(7!#&5!#+6A#16Q#16A#161#17!#151#151#161#16Q#161#15!#&5!#'6A#17!#17!#16A#141#(3Q\"_4Q#(4Q#%4A#$5A#-6Q#05A#-4A#$51#*5Q#.4Q#(4A#(3Q\"`4Q#(41#$4Q#%4A#&0!\"G-Q\"<3!\"[4Q#%31\"]3Q\"`2!\"L.A\"=/1\"61A\"73Q\"==!\"WCA#)FQ#*:!\";41\"+61\"<+Q!T(1!A-Q!R4!!_51!Y51!Y6A\"&:A\">3A\"/*1!I+Q!P7A\"7CA\"=G!\"!<1!=3A!0.1!0(A!0&A!0%A!5'!!2(!!@+!!K/A!^4Q\"*6!\",8!\"151\"0+Q!M,!!T3Q\"50A\"&/!!X=1\"HHA#/:!\"F.Q![*Q!U-A!Y.!\"01Q\"E41\"Z3!\"[/A\"=-!\"82Q\"Y4!#\"4Q#%4!#\"4Q#%61#)5Q#,5Q#/5!#&41#\"51#,51#-4!#\"51#)6!#)61#'4Q#%4A#&6Q#17!#15Q#/4!#$3Q#!3Q\"`41#%6A#061#15Q#15A#17!#17!#17!#161#16!#16!#15A#.61#-61#17!#)6!#.5Q#+51#+51#+51#'5!#&5!#'5!#'5!#&5!#&5!#&5!\"_4!#\"4A\"]3Q\"`41#\"4A#$3!\"]3Q\"`31\"\\4!#\"4Q#%3A\"^5!#&4Q#$4A#$5!#&5!#&5!#&5!#&5!#'5A#(6!#)6A#'6A#'5A#+51#,5Q#*5A#/6!#061#161#161#16!#15!#16!#15Q#16Q#15Q#06A#07!#16Q#15Q#15Q#161#/4Q#&4Q#%4Q#%4Q#%61#.6Q#06A#041#'4A##5!#'5A#+4Q#&41##5A#05Q#/4A#%4Q#%3Q\"`1Q\"S4!##4Q#%41##4Q#%2Q\"Y01\"F01\"8/A\"51Q\"571\"F<1\"UC1#)EQ#'=1\"F5!\"06A\";.A!`(!!E)A!L2Q\"\"5!!\\51!X5Q!]7Q\"581\"71A\"%+Q!J.1![7!\"4C1\"AF1\"0AQ!O9Q!D3Q!7.!!6+!!3'A!2'!!1'!!2'A!5&A!4&1!6&A!;'1!<&A!<'1!;&1!6'1!6'!!7(!!4)Q!7,!!1.Q!,4A1&?\"!%H\"13N!ARKABBC!\"R3!\",+A!M,1!T21\",71\"231!X2Q!S;!\"&Q\"KH!#'<1\"H0A\"#-1!T-1!Z.A\".0Q\"C3A\"U41#\"11\"Q-A\"90A\"L4Q#$4Q#'51#-41##41#\"5!#.5!#/6Q#$4A#$5!#,6A#05Q#041#\"4A#$4Q#&4Q#%3Q#\"5Q#06Q#17!#16A#141#'4!#\"4A#$6!#06A#16!#15A#16A#161#17!#16A#16A#161#161#*6!#+5A#'61#/5Q#/6!#/6!#*61#+5!#&5!#&5!#'5!#&5!#&5!#&5!#&4A#$4!#!4Q#%3A\"_3Q\"`3A\"^4!#\"3!\"]3!\"\\3!\"\\4!\"[3Q\"_4A#\"41#\"41##4A#$5!#&5!#&5!#&5!#&5!#'5!#)5!#'5!#)6A#&5A#+51#*5A#(5Q#/61#061#16A#15Q#16!#16Q#(51#15Q#16Q#16Q#16Q#17!#16A#16!#16A#16A#15A#+3Q#!4!#!4!#!61#.6Q#06Q#06A#04A#$4Q#&4Q#+4Q#&41##5A#06Q#051#-4!#\"4Q#%4A#)4Q#+4Q#%41##5Q#*4Q#)2A\"X/1\"D.A\"70Q\"02A\"971\"FA\"CD1\"CCQ\")A!!T=!!E8Q!;4!!41Q!5-Q!4,Q!1+!!1+1!0*Q!/*!!0*Q!0+1!1-!1+2!A'41A,8QQ*@1A'E114K!!UJAR0FQ\"E=A\"B3!\"),A!N,A!T2!\"*61\"25!\"$1Q!X81!];Q\"-81\"7/A![+1!M2!\"+7!\"@0Q\"&0!\"!E!1EC!ADF11DGAQKGQ!SFQ\"$H!\"5E1\"C@!\"C8A\"9A\"K?A\"^C!#&DA\"\\=A\"I81\"97A\"=5!\"6,Q!X*A!C*A!L.A!X3!!Y4A!Z4!!W4A\"\"5Q\"$8!\"07Q\"93A\",01\"!.1!_-1!]/Q!Z1!!`1A\"%6A\"-8!\"49Q\"39A\"49A\"5<1\";:A\"::A\"9:!\";61\".2Q\"(0Q\"!-A!Z-!!V.A!\\01\"!41\"+7A\"75A\"&4A!]3Q!Y5Q!^8A\".9!\"821\"(-Q!S-1!U01\"%21\",01\"!/Q!_8!\"8BA\"V?!\"R7!\"7.Q!`-A!Y,Q!]-1\"-.Q\":21\"P4A#\"4Q#.4Q#'3Q\"`4!#\"4A#%5Q#/6Q#06Q#061#/4!##4Q#%4Q#&3Q\"`5Q#/6Q#06!#06A#05Q#04A##3Q#!4A#%6!#.5Q#06A#06!#16A#16Q#16A#16Q#/6A#15Q#15A#.6!#-5A#15Q#16Q#15A#15Q#16!#15A#)61#)6A#$5Q#&51#,5A#*61#&51#)5!#&41#$4A#$4Q#$4A#$5!#&5!#&4Q#\"3Q\"`4Q#$3Q\"^3Q#!3A\"_31\"^3A\"_2Q\"[3!\"Y3!\"Z4!\"[31\"]3A\"_3!\"]3Q\"`3Q\"`41#\"2Q\"[4A#$3Q\"`5!#&4!#!5!#&5A#*51#)5!#(5!#&5!#*5!#&5A#)5A#-6!#,5Q#.6!#(5!#)51#(6Q#(5A#16A#15Q#16!#16!#161#15Q#.5Q#/51#16Q#15A#04Q#*61#06A#05Q#06A#06!#061#041#%4Q#%4!#!51#,6A#061#061#061#04A#'4A#$4Q#%4A#$4A#*6Q#06Q#06A#05!#-3!\"Z/1\"C.Q\"7-A\"11A\"44A\"791\"D=1\"VB!##D!#\"B1\"X:Q\"D71\"771\"@2Q\"1+Q!Q)!!G*!!G-Q!Z3A!`5A\"!4Q!\\5A!Y6!\"\"7A\"'7Q\",71\"271\"341\",2!\")1!\"\".!!]-!!U-!!Q,1!O,A!P,1!V,1!V,1!X.1!^11!_11\"(4!\"15A\"/71\"561\"261\")3Q!`3Q!\\6!!]7Q\"&8A\"25Q\"/1Q\"&,Q!Q+Q!W2A\")3A\"31!\"%/1!_41\".>!\"J@A\"W;A\"A21\"*.1!]-A!Y-Q!^-!\"+/Q\"92!\"L41#%4Q#/4Q#(4Q#%4Q#%4!#$5Q#-6Q#06Q#06Q#05A#,4Q#%41#\"4A#$51#(6A#05Q#061#06Q#05Q#03A\"_4!#\"5A#.6A#06A#06!#05Q#16A#17!#17!#17!#15A#151#17!#'6!#/5Q#161#16A#16!#16!#16A#&5!#*5!#(5!#*6!#)51#'5A#*5!#*5!#&5!#&5!#&4Q#%3Q\"`4Q#%4!#!4A##4A\"]3!\"]4A#\"4!\"^4A\"[3!\"\\31\"^2Q\"\\3!\"\\31\"]3!\"\\2Q\"[3!\"]3A\"_2Q\"[3A\"_3Q\"`41#\"3A\"_3A\"_3!\"\\4A#$4Q#%4A##4A#$4Q#%5!#&4A#$41##5!#&51#'61#&5Q#-5A#,51#*7!#'5!#,5!#*5Q#*5Q#16A#161#16A#16!#161#+5A#,61#-5A#16A#06Q#06Q#061#061#06!#061#061#061#03Q##3Q\"`4Q#*61#06A#05Q#06A#06Q#051#*4A#$41#\"4A#$5Q#06Q#061#06A#05A#031\"`0Q\"M/Q\"7.A\"70!\"62!\"461\"@:!\"I=Q\"WAQ#\"E!\"_AA\"W;A\"@8!\"971\";2!\".-Q!^+Q!J(Q!I+A!O.Q!]2A!`5A\"$51\"\"5A!^4Q!X5!!X4A!\\4A!`5!\"!61\",71\"-6Q\"081\"48A\".61\"+71\"07A\",5Q\"+5A\"+61\"*4Q\"!3A!\\6A!\\5Q!_7Q\"'9!\"+7!\"-51\".0A!`,!!R+1!M-Q![2A\"*4A\"71A\"+0A\"%61\"1=Q\"M@A\"T;!\"I4!\"2.1!`-A!Z,Q![-!\"#.1\"10Q\"C1Q\"T41#%5Q#051#-4A#$4A#$4A#&6!#061#06!#06!#06Q#041#*3A\"_41#\"51#*6A#05Q#05A#06A#06Q#05Q#04Q#)5A#.61#061#06!#061#.5A#17!#16Q#16A#16A#16A#/61#(5!#+6!#-5!#*61#15Q#16!#151#15A#,51#'5!#&5A#'6!#)51#(51#'5!#&5!#&4A##3A\"_41##41#\"3Q\"`4A#$4!#\"3Q\"`3Q\"`3!\"\\3!\"\\3Q\"`2Q\"[3Q\"\\4A\"^31\"]31\"]41\"`3A\"^41\"Z4!#!3A\"]4!#!3Q\"_4A#$31\"]4Q#%41##3Q\"`4A#$41##4A#&3Q#\"5!#&4A#$41##4!#!5!#'5!#&6Q##5A#.6A#$51#)61#'6!#(6!#(5Q#,6!#16Q#15Q#16!#16!#.51#-5A#)6!#06!#06Q#06Q#06Q#061#06!#06!#061#061#06!#04A#'4Q#*61#06A#05A#061#05A#06!#05A#)41#$3Q\"`5A#06Q#061#06!#06Q#05Q#/41#$2A\"Q/A\"C/A\";/1\"02!\"44A\"98!\"@;1\"L@1\"_C!#%CA#!BA\"U=A\"I81\"95A\"53Q\"11!\"$-A!W+1!Q*Q!L*A!S.Q!Y/Q!^1Q!_2!!_31!_3Q!]2Q!]1Q!S1Q!S01!R/A!Q0!!Q/1!P11!M3A!V4A!X41!^51\"#6!\"!6!\",61\"-51\"+0A!_.Q!],1!V-1!V-A!X01\"(1A\"*0A\")0!\"%2Q\")8!\";?1\"NAA\"V=Q\"K7A\"60!!`.!![-!!Y,Q!\\.!\"&-Q\"70Q\"D1A\"R41#%5Q#/51#04Q#'4A##4Q#'5A#.61#06!#05Q#06Q#06!#041#&4A#%5A#*61#06A#06!#06!#06!#06Q#05Q#061#06A#05A#06!#.5A#-5Q#/6!#15Q#16A#16A#15Q#051#+5!#*6A#%5A#)5A#/5Q#061#06!#.51#)5!#&5!#&5!#&5!#(5!#'5!#*4Q#%4Q#%4Q#%41##4!#!5!#&5!#&4Q#$4A##3Q\"_4!#\"3Q\"`4!\"^41\"]3!\"\\3!\"\\3!\"Y4!\"]2Q\"Z3!\"X3Q\"V31\"]2Q\"[31\"W3Q\"\\3!\"Z31\"]31\"]3A\"_3Q\"`3Q\"`3Q\"`3!\"]3Q##41#\"41#\"5!#&5!#&5!#&4A#$4A#$5!#&5!#)61#&5!#/61#'5!#+5!#(5!#(5!#+5Q#/51#16!#161#15!#+61#$5!#(5Q#,5Q#061#06Q#06A#05Q#06A#05A#/5Q#/5Q#06!#061#05Q#06A#06Q#06Q#06A#06!#06!#06Q#051#/4Q#'4Q#-61#061#06!#051#061#06Q#051#.3Q##2Q\"R01\"J/!\"@/Q\"41A\"73Q\"86Q\"B;1\"N?A\"[AQ#%E!#'D!\"`AQ\"V=!\"H8Q\">61\"85!\"13!\"03!\"'-Q!],Q!R+1!O+!!J)1!J+1!S+A!S+!!N*Q!M*A!K+A!K,!!N,Q!P-Q![/A!_/1!T-Q!R-A!^,A!S+A!O*1!E*1!R.!!T01!`11\"*2!\".1Q\",2Q\"+1A\"'6!\"61\"W@A\"T:A\"I4A\"10Q!`-A!Z,A!X,Q!Y+A\"$-Q\"1.A\"=0A\"K2!\"U41#%5Q#06A#04A#*3Q\"`4Q#(6Q#05Q#06!#06!#061#06Q#05Q#04Q#.5A#/61#06!#05Q#06!#06!#06Q#06Q#06Q#06A#06A#05A#.6A#&51#-7!#*61#17!#161#161#15A#,5Q#)6!#(5!#+61#'5Q#/51#(6!#+5!#&4Q#&5!#&5!#&5!#&5!#&5!#)5!#&4Q#%41##4!#!3Q\"`5!#&5!#&5!#&4!#!3Q\"`31\"^2Q\"[31\"]2Q\"[2Q\"[3A\"[4!\"^31\"]3!\"]3Q\"Y2Q\"[31\"Z3A\"]3Q\"_3!\"[3Q\"`31\"Z3A\"_3!\"\\4!#!31\"^3A\"^3A\"_41#\"4!#\"41##4A#$41#\"41##5!#&4Q#%3A\"_4A#$5!#'51#+5A#'51#'5!#&5!#&5!#&5!#&5!#'61#-6!#,6Q#+6!#/5A#,61#(5A#&5Q#,6!#061#06Q#05Q#051#06!#.5!#)5Q#,6!#/6!#06A#06Q#06Q#06!#05Q#05Q#061#06Q#061#06A#05Q#06Q#06Q#06A#061#06!#06A#06Q#061#051#-4A#!21\"T0Q\"N1A\">11\"921\"831\":71\"A9A\"J3!\"'/!\"\"-Q!Y-!!X,A!Z,1\"\",1\"/-!\"6/A\"B1!\"O3!\"Y41#$5!#06Q#06!#051#,61#/6!#05A#05Q#051#05Q#061#06Q#06Q#06A#06A#06!#05A#05Q#+6Q#+61#-6Q#06Q#06!#061#05A#/5A#-5A#)51#,6!#/6Q#16!#151#151#/5Q#'5!#'5!#*6A#$51#)5Q#'6!#.5Q#*4Q#%41#\"41##4A#$4A#$4Q#%5!#&5!#&4!#!3Q\"_4!#\"3Q\"`3A\"_4Q#%3Q\"_3A\"_3Q\"`3Q\"^3A\"]3A\"]3!\"\\2Q\"[4!\"]3A\"^3A\"X3A\"Z31\"]3Q\"X31\"Y3!\"X31\"Y3A\"Z41\"^4A\"[31\"^4!\"^3Q\"[2Q\"[31\"]2Q\"[4!\"^4!\"\\4!#!3Q\"`5!#&4!#!41##3A\"_4!#!4A##4!#!5!#&6!#)7!#%5!#)5!#&5!#&5!#&5!#&5Q#*5!#+6A#(5Q#/51#*5!#+6!#)4Q#'51#,51#06Q#05Q#06!#05A#.7!#%4Q#+5!#-6!#051#06A#06Q#06!#05Q#06A#06!#05Q#06A#06!#06Q#06Q#06Q#06Q#06!#06!#05A#05Q#06!#06Q#06!#05!#-4!#%3!\"Z2!\"L0Q\"B1A\"91Q\"72A\"941\">6Q\"C:Q\"O=Q\"W@!\"_CQ#(CQ#)EA#'EQ#%AQ\"V?Q\"NQ\"O?!\"[A1\"X@!\"Z>A\"R9Q\"?4!\"00!\"#.1!]-A!Y-1!X,!!X+A\"!+A\",-Q\"5.Q\"<0Q\"L1!\"O1Q\"T4Q\"`5Q#+6A#06Q#06Q#06Q#06Q#05Q#06A#06!#05Q#061#06Q#06Q#06Q#05Q#05Q#051#-5!#*7!#&51#06A#061#06Q#05Q#051#051#)5A#)51#*5A#-6!#05A#16!#15Q#-61#)6!##5!#&5!#&5!#*51#+6!#'51#(5!#&4Q#$31\"]4Q#%5!#&4A##4Q#%5!#&5!#&4!#!31\"^3A\"_4!#!31\"]3Q\"`4!#!4!#!31\"]3A\"\\31\"\\3!\"X3!\"[3Q\"`31\"X3Q\"^31\"W3A\"Z31\"]3!\"Y4!\"]3Q\"Y41\"]3A\"V2A\"[2A\"Z31\"W2Q\"Z3A\"_31\"]4!#!31\"^3Q\"X31\"]3!\"\\4!#!5!#&41##3A\"_41##3!\"\\3A\"_4!#!4A#$41##4Q#*5!#(5!#&41##4A#$41#\"5!#%6A#&4Q#,5A#)5Q#-61#$5!#%4Q#%4Q#%5Q#+5Q#06!#06A#05Q#,5A#061#$51#%4Q#*6A#05A#05Q#06Q#06!#051#.5Q#-4Q#)51#-6A#06!#06A#06Q#06Q#06Q#06!#05Q#.3Q\"[2A\"Z4A#&6A#.7!#07!#16!#16!#15!#'4!#!2A\"W3!\"C2!\"@1Q\"81Q\"73Q\"861\"B7A\"D:A\"L<1\"S?1\"^A!#$BA#$DA#)E1#%E1#\"E!#\"D1\"YB1\"_AQ\"Z@A\"Y@!\"Y?A\"Q>1\"N>A\"O?A\"XA1\"W@A\"YAQ\"]CA##CQ#&BQ#$A!\"`=1\"R:!\"F7!\"<3A\".0Q\"$-Q!\\-1!X,A!X,Q!X+Q!X,1!]+!\"\"+Q\"0,A\"6-1\"90!\"H1!\"N11\"P2Q\"[3A#!6!#06Q#06Q#06Q#06Q#06!#06!#06!#05Q#-6A#+5Q#06Q#06Q#06Q#06!#05Q#05Q#-4Q#)6A#'4Q#16!#06Q#06!#06!#05Q#06!#$6A#%51#(6!#&6Q#+51#06!#.51#+5!#*5!#&5!#&5!#&5!#)6A#%51#(6!#%5!#'5!#&3Q\"`4A#$4!#!41#\"5!#&4!#!5!#&3Q\"`41#\"31\"^31\"^4!#!3!\"\\31\"^2Q\"[2Q\"\\3A\"Y3A\"_3A\"_2Q\"[4!\"\\31\"]31\"X3A\"[3Q\"\\4!\"X3A\"Y3!\"Y2Q\"Y3A\"X31\"X3Q\"^31\"]4!\"X2Q\"[3Q\"^3A\"_2Q\"[3A\"_31\"^31\"]31\"]3!\"\\2Q\"\\3A\"_41##41#\"4Q#%3A\"_3A\"_3Q\"`4!#!4A#$5!#&5!#'5!#*4A#$3A\"_3A\"_4Q#%5!#'6A#\"51#-5A#)51#'5!#&4Q#%4Q#%5!#&51#(5Q#.61#/5Q#.5Q#*5A#*4Q#*4Q#%5!#/5Q#06!#061#061#06!#06Q#(5!#.6A#&51#05!#05A#06Q#06Q#06Q#06!#06!#04Q#*1Q\"R11\"O2A\"Y3A\"^5!#-6A#06A#06Q#06Q#061#.5!#'3A\"]31\"Q3Q\"L2!\"C21\";1Q\";31\";31\";3Q\"<7!\"@8!\"@8Q\"B:!\"M!\"X>Q\"Y?A\"Z?A\"Z@Q\"Z?Q\"Z@!\"Z@1\"\\?Q\"Z?1\"W=!\"X51\"421\".0A\"'/1!`.A!]-A!\\-1!Y,Q!Y+Q!X*1!W)Q!Y*Q!`*A\"#*Q\"',!\"1-A\"9/!\"A0A\"J0Q\"M1!\"O2!\"V4A#&5Q#06Q#06Q#06Q#061#061#05!#/51#.6A#*61#05Q#06A#05Q#061#06A#05A#05Q#-5!#'51#)5A#-5A#,6Q#06Q#061#05Q#.4Q#+5A#)4Q#(5!#*5Q#+6!#,6!#+5Q#)6A##51#$4Q#%5!#&5!#&5!#&51#'51#(5!#&41##4!#!3A\"^4!#!41#\"41##4Q#%4A##31\"^41#\"3Q\"`2Q\"[4!#!31\"^3!\"\\3A\"_41#!3Q\"X31\"Z3!\"[3!\"[3A\"]3A\"[4A\"Z3!\"[31\"\\3!\"Z3!\"Z31\"Z3!\"Y3!\"X31\"X31\"^31\"W3Q\"\\31\"Y3Q\"Z3A\"Y3Q\"Y3Q\"`3!\"]31\"]31\"^2Q\"[3Q\"`31\"\\41\"]3Q\"`4A#$3A\"_4!#!41##31\"]3Q\"`4A##3Q#!5!#&5!#&5!#&41#\"4!#!41##3Q#!4A#'5!#&5Q#,6!#(5!#*4Q#%4Q#%4Q#%4Q#%5A#&5Q#)5Q#.5Q#.6!#%51#(4Q#%4Q#%5!#*5Q#051#06!#06!#06!#051#.4Q#-4Q#)5A#05Q#05Q#05Q#05Q#06Q#061#051#05!#(1Q\"R01\"I0Q\"M11\"P31\"]4Q#'5Q#06!#06A#06!#06!#05!#&4!#!3Q\"[3A\"T3!\"O3!\"E1A\"D1A\"=0A\";01\"<1Q\"81Q\"62A\"231\"131\"12Q\".2A\".1!\"00Q\"10A\",/1\"$/1\"$.1\"\".1\"\",Q!`.!!^-1\"#-A\"\"-Q!_.!!^,1\"!,!!_*A!Z*1!X(Q!W(1!Z(1![*A\"$+A\",,!\"2,1\"4-A\"9/A\"C0!\"H0Q\"M11\"P31\"^4Q#+5Q#05Q#06A#06!#051#04Q#.4!#%41#$4Q#,6!#+5Q#/5A#061#06Q#061#05Q#051#-5Q#%5Q#)6!#+61#*6!#05A#05A#04Q#.6!#&4A##41#\"4Q#&5A#+5A#*61#)5Q#)5A#%5!#&4A#$4A#$41#\"5!#&5!#(61#(5!#'4A##3Q#!3Q\"`41##3Q\"`3Q\"`4A#$3Q\"`4!#!31\"^2Q\"[41\"[31\"]3!\"\\4A##41\"^4!\"]31\"X31\"^2Q\"[3Q\"\\3!\"Y3Q\"U3Q\"\\3Q\"U3Q\"\\31\"Y3Q\"Z31\"W31\"W3!\"Y3!\"X21\"V3Q\"U3Q\"U3!\"\\2Q\"[3A\"]3Q\"W31\"\\31\"X31\"X3Q\"Y3!\"\\3Q\"`3Q\"X2Q\"[3!\"[4!#!3!\"]4!#\"31\"]3Q\"`2Q\"[2Q\"[31\"^3A\"_41#\"4A##5!#&3Q\"`4!#!31\"]4!#\"3!\"\\5!#&5!#'61#&51#*4Q#%4Q#%3A\"_41#\"4Q#%4Q#&51#)6!#.5A#/5!#(4Q#'4Q#%4Q#&4Q#'4Q#(5Q#-5Q#*5A#/5Q#06A#(5Q#'5!#+5!#-5!#/51#06!#05Q#06!#05Q#05A#05!#.1Q\"S0Q\"M0A\"K0Q\"L0Q\"K3!\"W3!\"Y4!#'5Q#(4Q#*4Q#)31\"]3!\"Y2!\"V1Q\"R0Q\"J01\"I/Q\"E/A\"E.Q\"@.A\"<.A\";.A\";/1\"6/!\"501\"501\"4/Q\"0/Q\"./A\"0/1\")/1\"(/1\"%.1\"$,1\"(,1\"\"+1!`*!!Z(A!W'A!W'1!R&Q!N&1!O&A!Q'Q!W(1!Y)1!_*1\"!*1\"\"*A\"\"+Q\"/.1\"=01\"H0Q\"M11\"P3Q#\"51#.61#061#06!#04Q#*4!#&2!\"W0A\"L2A\"X5!#+5!#.5!#/5A#06!#061#05Q#05!#04Q#,4Q#&5!#(51#*5Q#,61#-5Q#,5Q#,6Q#$4Q#)4!#\"4Q#%4Q#%51#(5!#(5Q#*5Q#+5!#,4!#\"41#\"31\"^3!\"]41#\"4A#$5!#&4A#%3A\"_4!#!3!\"]3A\"^31\"^4!#\"41##4!#!41#\"31\"^4!#!3A\"\\31\"[3!\"\\3Q\"]31\"Y2Q\"[3Q\"^3Q\"\\4!\"W3Q\"^3A\"V4!\"]3!\"[3!\"[3!\"[3!\"Z31\"[3A\"W31\"X31\"X3Q\"V3A\"V2Q\"Z2Q\"Y3!\"Y2A\"Y3A\"]31\"W3Q\"]4A\"V2Q\"[2Q\"Z3Q\"Y3A\"Y3A\"Y3A\"Y4!\"^3!\"]3!\"\\3!\"\\4!#!31\"]3Q\"`4!#!31\"]3A\"_31\"]31\"^3A\"^4!#!4A#$31\"^3Q\"`31\"^3Q\"`4!#!4Q#&41#&4Q#'4Q#(4Q#%41#\"3A\"^4A#$4Q#%4Q#%6A##51#-5Q#&6!#)5!#&4Q#%4Q#%4Q#%4Q#%6!#-5Q#-71#*5Q#05Q#,6!#&5A#$4Q#'4Q#+6A#'5A#05Q#05Q#05A#051#04Q#,21\"Y0A\"L0Q\"N/Q\"F0Q\"M0Q\"M1A\"Q2!\"P2!\"W21\"W2A\"Y1Q\"P1Q\"T0Q\"L/Q\"F.Q\"@-1\"9+A\",*Q\"%*1\"!*1\"!*!!`*!!`)!!\\)A!](1!Y(1!Y(!!X&1!S%A!S%A!S%A!S$A!R%A!O%1!M$A!J$1!J$A!J%1!K$!!I$A!J&!!N%!!K&A!L'!!N'1!O'1!O)!!V*!!^-A\"6/Q\"F0Q\"M21\"W3Q#%51#05Q#/6!#/4!#!2A\"Y1!\"O0A\"L0A\"K1A\"T4A#)6!#,6!#-5A#-5A#.4Q#.51#*4Q#)4Q#)4Q#&4Q#%5!#*5A#)5Q#.6!#,51#,5!#'4Q#&41#\"41##41##4Q#%5Q#(61#(5Q#)4!##4!#!4!#!41#\"3Q#!3Q#!5!#&5!#&4Q#%4A##3A\"_31\"]31\"^31\"^3Q\"`31\"]3Q\"`31\"^31\"^31\"]31\"]3Q\"]3!\"Z3Q\"`2Q\"[2Q\"[2Q\"[2Q\"Z3!\"Y3!\"Y3Q\"]31\"]3A\"Z3Q\"Y3A\"Y41\"]2A\"V3Q\"U2Q\"[31\"X31\"X21\"X3!\"U2Q\"S3!\"X3Q\"U2Q\"U3!\"Y31\"W2Q\"Z2Q\"[4A\"^4!\"Y3!\"]3A\"\\3A\"\\3!\"\\3A\"Y31\"^3Q\"X3!\"\\3A\"V3!\"\\4A\"]3!\"X3!\"X31\"]3A\"_2Q\"[3Q\"`4A##3Q\"`4!#!3A\"_3A\"_2Q\"[3!\"]4!#!41#\"4Q#$4A#$4Q#%41##41#\"31\"^31\"]4!#!4Q#$5A#)5!#,6!#%5A#,4Q#%4A##4A#$3!\"]4Q#%4Q#*5Q#*51#+51#+6!#+4Q#(4Q#%4A#$2A\"Y2!\"T3A\"]5A#)5Q#,5A#+5Q#,5Q#,4Q#\"11\"Q0A\"J/Q\"E0A\"K0!\"G0!\"G/1\"C01\"J0Q\"M0A\"K0Q\"M1!\"O11\"P11\"O01\"I.Q\"@-!\"5+!\"&(!!T%!!K%A!D$1!A#1A>#1A>$1Q=#1Q>#1A>$!A=$!A=#AQ?#QAA$AA:#AAB$AA:#AQ?#A!<#A!;$A!4#1!9#A!6#A16#113#Q19&A!G)A!\\-!\"30A\"J0Q\"M1!\"N11\"P3A\"]31\"`31\"`11\"P0A\"K01\"J/Q\"E0A\"J0A\"K2!\"U4Q#&6Q#(6!#06Q#(5A#.6Q#'4Q#(4Q#*4Q#%4Q#%4Q#%4Q#(6A#'5A#+5Q#&6A#*51#$41##4A#$31\"^4!#!4Q#%4Q#'4Q#'4A#&4A#$4A#$31\"]3A\"_3Q\"`41#\"5!#&5!#&41#\"3Q\"`3!\"\\3Q\"`3Q\"`3!\"]3!\"]31\"]3A\"_3A\"_3A\"_3!\"]2Q\"Y3Q\"]3A\"V31\"]31\"W3!\"[3Q\"`31\"X4!\"\\31\"^3A\"W3A\"V3!\"X3Q\"[3!\"X31\"X3A\"V3!\"X2Q\"X21\"X31\"U3!\"T1A\"S2Q\"W2Q\"Z2!\"U3!\"W21\"U31\"T31\"W3A\"W31\"X31\"X2Q\"Z3Q\"Y31\"Z4!\"W3!\"]31\"[4!\"[31\"Y41\"]31\"]41\"Y3A\"_3!\"\\2Q\"[4!\"Y2Q\"[3A\"]3A\"_31\"^3A\"_3A\"_4!#!4!#!31\"]41\"`31\"]3Q\"`41##4Q#%4Q#%41##3A\"`41#\"4!#!31\"]3A\"_41#\"4A#&51#*4Q#(4Q#&4Q#$3Q\"`4A##4!#!4Q#$51#'5!#&5!#+5A#*5Q#*4Q#)4Q#(3Q\"_/Q\"F/Q\"E1!\"M21\"V41#!5Q#(5Q#,5Q#,4A#&2A\"Y1!\"N0!\"H0!\"H/1\"B+Q\"**A!`*Q\"\"+!\"%-!\"5.Q\"?/A\"D/A\"D/A\"D/A\"D/Q\"F/!\"?+Q\"+*1!Y(1!R&!AK&1Q@$AQ;#AA8#!!:#Q!9\"A!:\"A!9#1Q8\"!!1\"!11\"1A5\"112#!!2#Q!2\"A!1\"!!1#!14#AQ4#1!;'!!O*A\"#-Q\"8/Q\"F0Q\"M0Q\"M0Q\"M0Q\"M01\"I1!\"N0A\"K01\"I0!\"H/Q\"E01\"I0A\"K11\"O3A\"^4Q#+5!#*6!#+5Q#-4Q#(4Q#'4Q#'4Q#%4Q#%4Q#%4Q#%4Q#%4Q#(51#&51#'51#&4!#!3A\"_3Q\"`41#\"41#\"4!#!4Q#%4Q#&4Q#&4A##41##3A\"^3A\"^4!#!3A\"_4A#$4!#!41##4!#!3Q\"`31\"Z3A\"Z3A\"^3!\"]31\"^31\"^4!#!3A\"^41\"Y3Q\"^3!\"[3!\"[31\"X3A\"[41\"`31\"Z3A\"Y31\"Z31\"Y4!\"[31\"[41\"X31\"X3A\"Y2Q\"Y2Q\"W21\"W2Q\"Z2Q\"Y1Q\"T3!\"S3!\"S1Q\"T2!\"U2Q\"T2A\"X3!\"U3!\"Y3Q\"U2Q\"[31\"W2Q\"[3Q\"U3!\"Y31\"]3Q\"Z3Q\"Y3Q\"`3Q\"X31\"^3!\"]3Q\"Y2Q\"[31\"^2Q\"[31\"]3A\"_3Q\"`3!\"[3Q\"[3!\"]4A\"\\3Q\"`3Q\"_3Q\"`3A\"_3A\"^3Q\"Z3Q\"`2Q\"[4!#!4!#\"4A#$3Q#!41#%4A#$3Q\"`3A\"^3A\"^3Q\"_3Q\"`3Q\"`4Q#'4Q#'4Q#%4Q#%4!#\"4A##3Q\"`3Q\"`4Q#%4Q#%4Q#)5Q#)6!#\"4Q#)5A#)41#!11\"P/1\"C/Q\"E0!\"G1!\"M2Q\"Y41\"\\51#*4Q#*2A\"X1!\"O0Q\"M01\"J01\"J,1\"-*!!\\)!!V)!!V(!!S'A!P'A!P'A!P(!!V(Q![)A!Y(A!S'A!P'A!P'!!K%A!C#Q1;#!A3#1Q1\"!17#115#1A1\"!11\"1A6\"Q15#1A.!QQ4\"112\"Q!1\"1!0$A1E%Q!J)!!Y-!\"3/!\"@0Q\"M01\"I0Q\"M0Q\"M0Q\"M0A\"K0A\"L0!\"G/Q\"E0!\"G0!\"G0!\"G0!\"G/Q\"E1A\"Q3Q##4Q#)4Q#%5A#+61#'5!#)4Q#%41#\"3Q\"_4A##4Q#!4!\"_4Q#%4Q#%4Q#,61#\"4Q#)3Q\"_3Q\"`3Q\"`41#\"31\"^3Q\"`4Q#%4Q#%4A##41##3Q\"`3!\"\\3A\"^3!\"]3!\"]3Q#!4!#!4!#\"4!#\"31\"]31\"]2Q\"[4!\"Z3!\"]3!\"]3Q\"_3!\"]3!\"]31\"^3A\"]31\"X3Q\"]3Q\"[3!\"]3!\"[3Q\"[3A\"W3A\"^4!\"Z31\"W2Q\"[3!\"Y3!\"Y3A\"W3A\"W2Q\"T21\"X3!\"T3!\"Y21\"T2Q\"U2A\"X1Q\"S2!\"V2!\"Q2Q\"S2!\"S21\"R1Q\"R2Q\"X2A\"U2A\"W3Q\"U3!\"X3A\"V31\"W2Q\"Z2Q\"Z3Q\"X3!\"[3A\"W3A\"[3!\"Y4!\"\\3Q\"[41\"`3Q\"W2Q\"[3A\"W2Q\"[3Q\"Y2Q\"Z2Q\"Z2Q\"[3!\"]3!\"]31\"]3Q\"`3!\"\\3!\"\\3!\"\\2Q\"\\2Q\"[31\"^3Q\"_4!#\"4!#!3A\"^3Q#!3Q\"`3!\"\\3!\"]31\"]4A##4Q#%4Q#%4Q#%41##4Q#%41##3A\"^4!#!41#\"4!#!5!#&41#%4Q#)4Q#%4Q#%4A##1A\"R/Q\"F/!\"@/!\"A/1\"A/!\"A0!\"G0!\"H0Q\"L1!\"N0Q\"M0A\"K0A\"J0!\"G/A\"D-!\"2*A\"!)1!X&Q!K&1!?#Q14\"AA/$111#1Q2#1Q1\"QA/\"QA/#1A/\"1A0#AA5\"AA4\"1Q5#!A.\"!11\"!!.#114\"1!2$!A6$!A@$1A;%11C(Q!T)Q!]+A\"*/1\"D/A\"D/Q\"F0Q\"L0!\"H0A\"K/Q\"E/1\"B.1\";-Q\"7-Q\"7/A\"D/Q\"F/!\"@/Q\"F/Q\"F0Q\"M3A\"_4Q#'4Q#(4Q#&4Q#%4!#!3A\"]11\"P01\"I2A\"Y4A#$4Q#%4!#!4Q#%4Q#%4Q#%4A#%4!#\"3Q#!3Q\"`4!#!31\"^41##4A##4A##41#\"41#\"3Q#!3Q\"`3!\"]3Q\"`3!\"\\3Q\"`3A\"_3Q\"`4!#!3Q\"_3!\"\\3A\"Z31\"^31\"\\3Q\"]3!\"\\3A\"Z3Q\"`3A\"[4!\"Y3!\"\\31\"Y31\"W3!\"[3A\"Y31\"X3A\"Z3A\"W31\"[4A\"X3!\"Y3A\"W3Q\"U4!\"]31\"X3!\"Y3!\"Y3!\"X31\"U1Q\"S31\"R2A\"V31\"U1Q\"T1A\"S11\"Q21\"Q2!\"V31\"T2Q\"W2!\"S2A\"W21\"T2A\"V2Q\"Y31\"X2A\"Z2Q\"Z3!\"X31\"W3A\"Y41\"]31\"W4!\"X3!\"Y3A\"V4!\"X3!\"Y2Q\"Z3A\"_31\"]4!\"X3Q\"_3Q\"W3A\"^31\"]3A\"_41\"\\3Q\"_31\"\\41\"]31\"Z4A\"\\31\"\\41#!3A\"_4!#!3A\"_41#\"4Q#%3!\"]3!\"\\3Q\"`31\"]31\"]3Q\"`3A\"_4Q#%4Q#%4A##4!#!41##41#\"31\"^31\"^3A\"^41##4!#!4Q#%4Q#%4Q#%4Q#%4A#$2A\"W/Q\"E0!\"G/1\"B0!\"H0!\"H/1\"C0!\"G/A\"D/A\"D0Q\"L0Q\"M0A\"J0A\"K0!\"G/Q\"F.!\"9+Q\"))A!Z'A!P&11G\"QA6$1A4\"1!7\"AA4\"QQ1\"1A0\"!14\"1!1\"AA1\"!Q5#!A.!Q!5$1Q?%1!B&Q1K'!1O(A!T)!!V)!!V)1!X+!\"&-!\"6-1\"9,Q\"3+A\"'+1\"&+A\"'+A\"'+!\"#*A\"!)A![)1!X*Q\"#.1\"<0!\"H01\"I01\"I1A\"R41#\"4Q#%4Q#$4A#%4!\"X11\"P0Q\"M/1\"B/!\"@1A\"R31\"]3Q\"`4Q#%4Q#%4Q#%4!#\"4A#$3Q\"`3A\"_3!\"]3!\"\\3A\"_3A\"_4!#!4Q#%41##4!#\"4!#!3!\"\\2Q\"[3Q\"Y3!\"[3!\"]3!\"\\41#\"31\"]2Q\"[31\"\\41\"]4A\"\\31\"W3A\"[3!\"Y3!\"\\4!\"]3!\"\\31\"Y2Q\"[3Q\"X3A\"Z31\"^3Q\"W31\"Z4!\"\\3Q\"[4!\"Z3!\"Y3!\"Y3!\"Y31\"W3Q\"U31\"X4!\"T2Q\"X3!\"Y2Q\"X1Q\"T1Q\"T2A\"V31\"S1Q\"T2!\"V11\"P1Q\"T11\"P1Q\"T1Q\"T1Q\"T21\"Q21\"X1Q\"T2!\"W1A\"R3A\"W2A\"R2Q\"T3A\"V3A\"W2Q\"[3A\"W2Q\"[31\"W3A\"W2Q\"[2Q\"Z3Q\"[3Q\"Y3Q\"Y3Q\"\\3!\"X31\"W3!\"Y3!\"X3Q\"Y3A\"Y2Q\"[3!\"\\3Q\"Y3!\"\\3!\"[31\"W3!\"Y3Q\"T3!\"\\3!\"\\3Q#!3Q\"`3Q\"_3Q#!3Q\"`31\"]3A\"Y3!\"]31\"^3A\"^31\"]3!\"]4A#$4A#$4A#$3Q#!4!#\"41#\"3!\"]3!\"[31\"X4!#!4!#\"41#\"4Q#%4Q#%4Q#%4Q#%11\"O/A\"C/Q\"F/1\"B/1\"B/1\"B/1\"B/1\"C/Q\"F/1\"B0!\"G0A\"K0!\"G01\"I01\"I/A\"C/A\"D-1\"4+Q\")*!!](A!T'!!E%11>$A1=#117#110\"QQ3\"112\"!!1\"!13#A1.#Q15%!!>&A!D%A1C&QAH&Q1K'1!K'A!M'A!M'Q!R&Q!N'Q!R)!!V)!!V(A!T(Q!U)!!V)A!Z+1\"'-1\"4/Q\"F0!\"G/Q\"E0!\"H2!\"V3!\"[2Q\"X1Q\"S01\"J/!\"@/A\"D.Q\"?.Q\"?/A\"C2A\"W4A#$4Q#%4Q#%4Q#%4A#$3Q#!3Q\"`3!\"\\3Q\"`2Q\"[3A\"_3Q\"_31\"^3A\"_4Q#%4!#!31\"]3A\"^2A\"Z31\"^31\"^2A\"Z3Q\"^41\"_3Q\"_3!\"\\3Q#!3!\"]3Q\"Y2Q\"Z2Q\"[2Q\"[3A\"\\3!\"Y2Q\"[2Q\"[3Q\"[31\"Z4!\"X3A\"[4!\"W31\"]3!\"\\3Q\"Y2Q\"[3A\"W31\"W2A\"U3!\"Y3A\"W3A\"W2Q\"[2!\"U21\"X21\"R2A\"W1Q\"S1Q\"T1Q\"T1Q\"T1Q\"U11\"P1!\"O1Q\"T11\"P11\"P1!\"O1Q\"T1Q\"T1Q\"P1A\"Q2A\"Q21\"U1Q\"T2!\"S3!\"V2!\"U2A\"X2Q\"Z3A\"V3A\"V2Q\"[2Q\"Y3!\"Y31\"X31\"W3A\"V3Q\"V3!\"Z2Q\"[3!\"Z3A\"]31\"\\4A\"_3Q\"W3A\"Y4!\"[31\"[2Q\"Z3!\"\\2Q\"\\2Q\"[2Q\"[3!\"]31\"Y3A\"Z3!\"Z3!\"\\4!#!4!#!31\"^3A\"_31\"\\2A\"Z3A\"]3A\"]2Q\"[3A\"_2Q\"\\3Q\"`41##4A#$31\"^4!#\"3Q\"`3A\"_21\"V/Q\"F0Q\"K2A\"X3!\"[3A\"^4Q#%4A#$41##3A\"]01\"I/1\"C/!\"@.Q\"?/Q\"E.1\"=+A\"+*Q\"&,1\"1-A\"7.1\";.!\":-Q\"7.1\"<.1\"<.1\"=/A\"E.1\"<,Q\"2)A!Y(Q!V)!!V(!!Q(!!P'!!M%Q1J%A1?#QQ?#Q!9\"1!5\"1A/\"1A/\"AA2\"!11\"!12\"QA1\"AA0#A11$!17&1!>&A!M(1!T(!!S)1!X*1!_,1\"-.!\":/A\"D/1\"C/Q\"F/A\"D/Q\"F/1\"B/A\"D/A\"D0!\"G0!\"G/1\"C.Q\"?/!\"@/!\"A2!\"U3!\"[4Q#%4!#!41#\"41##3A\"_3Q\"`3!\"\\3!\"Z4!\"]41\"]3A\"^4!#!4!#!41#\"3Q\"`3!\"\\31\"^3!\"]31\"[41\"Z3Q\"W3!\"]31\"^31\"]31\"\\3!\"\\2Q\"[3!\"[4!\"]3A\"W4!\"\\3A\"X4!\"[31\"[31\"Y4!\"\\3!\"Y3A\"[2Q\"Z3!\"Y3!\"X3!\"Y3A\"X3Q\"V31\"Y2Q\"[3!\"Y31\"W2A\"W2Q\"Y2!\"V1Q\"S31\"V2A\"W31\"T1Q\"T1Q\"S1Q\"Q1Q\"T1Q\"P1Q\"T1Q\"U1A\"S2Q\"Q11\"Q11\"Q1A\"R1A\"Q1!\"O11\"P2A\"V1Q\"R1Q\"T11\"P1Q\"T3!\"V2A\"R3!\"U21\"S2A\"V2!\"V1Q\"U2Q\"S3!\"X3Q\"U2!\"V31\"X2!\"W2Q\"X4!\"T41\"V3Q\"W3!\"X3!\"Y3A\"V2Q\"[31\"X31\"W3A\"[3Q\"]3Q\"X2Q\"\\2Q\"[31\"Z4Q\"Y3!\"X3Q\"[41\"W3Q\"^2A\"Z3A\"_31\"^31\"^31\"]2A\"Z3Q\"]3A\"]4!\"[3A\"^3A\"_31\"]2Q\"[3A\"_4Q#%4!#!3Q\"`3Q\"`2A\"Z0Q\"M.Q\"?/A\"E/Q\"E0Q\"L11\"O21\"V3!\"]4Q#$3Q\"`1Q\"T/Q\"E/A\"E.Q\"?.Q\"?-1\"4*1\"\"(!!R(!!R)!!V)!!V)!!V)!!V)A![)A!`*A\"#*A\"#)Q!\\)1!X)!!V)!!V)!!V(A!T(Q!U(1!S'Q!R)!!V'1!P&!!J$!!>#!!3\"!15#A14!QA2\"Q16%A1A%Q1E'A!N(Q!U(A!T*!!]+Q\",-1\"7/A\"E/1\"B/Q\"E/A\"E/A\"E/A\"C.Q\"?/!\"A/1\"B.Q\"?.Q\"?/1\"B/1\"B/1\"C.Q\"?/A\"C2Q\"Y3!\"\\3Q\"`4!#!4!#!3A\"_3!\"]3!\"]3A\"_4!\"Y3!\"X3A\"^2A\"Z3Q\"`3!\"]3!\"]3A\"^3Q\"`2Q\"[4!\"Y3Q\"Z3A\"W31\"]2Q\"[3A\"_31\"^2A\"Z2A\"Z4!#!4!\"Y3A\"[2Q\"Z31\"X3A\"_31\"X2Q\"[2Q\"\\3A\"Y3!\"]4!\"X41\"W3A\"V3A\"V31\"X2Q\"[2Q\"[2Q\"Y3Q\"U3!\"X3A\"V2!\"W31\"T31\"T2Q\"U2Q\"W2A\"Q1Q\"R11\"Q21\"Q2!\"R2A\"T1A\"P2Q\"U11\"Q1A\"R1!\"N11\"Q11\"Q1Q\"T1!\"O1A\"R11\"Q1Q\"S11\"Q1A\"R1Q\"T3!\"R21\"Q11\"Q1Q\"U1Q\"T1A\"Q21\"Q1Q\"T21\"X21\"X2A\"W21\"T2A\"V2!\"R31\"W2A\"Y2A\"X2Q\"Z2Q\"Z31\"W31\"\\3!\"Y3Q\"U3Q\"U2Q\"Z3Q\"T31\"X3Q\"Z4!\"W3Q\"\\2Q\"[31\"\\3!\"\\3A\"]3!\"X4!\"X4!\"Y3A\"\\3!\"Z3!\"]3Q\"`3Q\"_3!\"\\2Q\"[2Q\"Z3Q\"W3A\"Z4!\"\\3!\"]2A\"Z3!\"]4!#!3A\"_3!\"\\4!#\"31\"]1Q\"U01\"I/1\"B/!\"@.Q\"?/!\"@/Q\"F/1\"B0Q\"M11\"Q0A\"L/A\"C/A\"E.Q\"?.Q\"?.Q\"?.!\";+A\"))1!Z)!!V(!!R(A!T(A!T(A!T(!!R(!!R(!!Q&A!I'!!K&11H%11C'!!H&A!D%1!B$A!7\"!Q.%Q!8$Q1<%11=$QA;&A!B'Q!Q(Q!U(!!R(!!R)!!X)A!^+A\"(.Q\">/!\"A/1\"C/!\"@/!\"@/1\"B/!\"@/!\"@/1\"C.Q\"?.Q\"@.A\">.Q\"?/1\"C/1\"B.Q\"?/!\"@/1\"C1Q\"U3A\"^41#\"41#\"4!#!31\"]3A\"^3A\"Z2A\"U3!\"V3A\"V2Q\"[3!\"\\3!\"\\31\"]4!#!31\"^3Q\"`4!\"\\31\"]4!\"\\31\"]3!\"\\3!\"\\3A\"Z4!\"\\31\"Y4Q\"[4!\"^41\"[4!\"T3!\"Y31\"W4A\"Z31\"X3A\"V4!\"\\31\"^3Q\"V3Q\"]3A\"V2Q\"Z21\"X31\"X2Q\"Z3A\"V3A\"V21\"X31\"U2A\"Y21\"X21\"V2A\"T21\"V2!\"V1Q\"T21\"X1Q\"T2!\"U2Q\"P1Q\"T1Q\"T1Q\"T1Q\"U11\"O2Q\"Q1A\"Q2Q\"R11\"Q1Q\"S0Q\"L1A\"R1!\"N1A\"S1Q\"U11\"Q1A\"R11\"P1A\"S21\"S2!\"V1A\"Q1Q\"S1Q\"T21\"T11\"P2!\"V1A\"P21\"V2!\"S3Q\"U2A\"X2!\"V2A\"X1Q\"T2A\"S3!\"Y2!\"V4!\"V3!\"Y2Q\"Y3Q\"U31\"W2Q\"Y2Q\"Z3!\"Y3!\"Y3!\"X2Q\"[4!\"X3A\"Y3A\"[31\"Y4!\"]4!\"T4!\"W3!\"Y3Q\"X4!\"]3Q\"[3!\"[2Q\"\\2A\"Z31\"Z4Q\"[3!\"Y4!\"X3A\"]3Q\"W2Q\"Z3A\"_2Q\"[31\"^3A\"^31\"^21\"X0A\"L/1\"B.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/1\"B0!\"H/!\"@/1\"C/A\"D/Q\"E/!\"@/Q\"E.Q\"?.!\":-1\"4+!\"$)A!Z)!!W'Q!R(A!T(A!T&1!K%A!@#Q18\"AA2\"AA0#11<$A!@'A!K&Q!H'A!K'A!N(1!S)!!V(Q!U(1!S'1!P(A!T(1!S(1!S)Q!],!\"2.!\":.1\";/!\"A.1\";,1\"1+!\"$+!\"$*A\"\"*A\"!*Q\"$)A!^*A\"#.!\":.Q\"?.Q\"?/!\"A/1\"B11\"Q2!\"V4!#!4!#\"3Q\"`2Q\"Z2Q\"Z1!\"N0!\"G0!\"D01\"J2A\"Y3Q\"^3!\"[3Q\"_31\"]31\"^2Q\"[3!\"Z3Q\"Y3A\"Z4A\"[3!\"Y4!\"X3Q\"Y3A\"Y3Q\"W2Q\"[2Q\"[31\"[2Q\"Y3A\"W2Q\"Z3A\"V2Q\"[31\"Y3Q\"^31\"]3A\"Y2Q\"Z2Q\"Y3!\"Y3!\"S21\"W21\"X31\"W31\"W31\"X3Q\"T3!\"U2A\"X1Q\"S1A\"S1Q\"R21\"T2!\"U1A\"Q21\"Q2!\"Q11\"P11\"P1Q\"T11\"P1!\"O11\"P1A\"Q1A\"R11\"Q11\"Q1A\"Q1A\"S11\"Q11\"P1!\"O11\"Q11\"P11\"P11\"P11\"P1Q\"T1A\"R1A\"Q1!\"N1A\"R11\"Q1Q\"S1Q\"T1Q\"T11\"P2Q\"U21\"V1A\"R21\"X2A\"Q1Q\"T2!\"R21\"R21\"X1Q\"T2Q\"T3!\"Y3Q\"U31\"W31\"W31\"X3!\"X3Q\"U2Q\"[3A\"V3Q\"U41\"Z31\"^31\"W3!\"[41\"X2Q\"Z2A\"Z3!\"Y3A\"V31\"X3!\"X3Q\"\\41\"W31\"[2A\"Z31\"^2A\"Z3Q\"\\3!\"X31\"X3!\"\\3Q\"Y3!\"]3Q\"_31\"X2A\"Z31\"^3Q\"\\3A\"\\21\"W0!\"I.A\"=.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F/!\"A.Q\"?.Q\"?/A\"D/1\"B/Q\"F/1\"C.Q\"?.Q\"?.A\"=,1\".+1\"()A!['Q!Q(A!U(Q!U)!!V'1!M&Q!A%Q1D&!!E%A!C%Q1D&A!N'Q!Q'A!Q'A!Q(!!S(1!S)!!V(1!S)!!V(Q!U(A!U'A!Q(Q!U)!!V(1!S(1!S(1!S(1!S)!!V'Q!R'A!Q)1!Z,1\"-.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F1Q\"T2Q\"Z21\"V0Q\"M0Q\"M/Q\"F.Q\"?/A\"D0!\"H/!\"A0Q\"M3!\"\\2A\"Z4!\"Z3A\"]31\"X2A\"Z4!\"[3Q\"`3!\"[3Q\"[3A\"X2A\"Z3Q\"\\3Q\"]3Q\"[3!\"[3Q\"Y3Q\"\\3!\"Z3Q\"[2Q\"Z31\"W3!\"X3!\"X31\"X4A\"[41\"W3Q\"U3Q\"U3Q\"U3!\"X2A\"T31\"W2Q\"R1Q\"T2A\"Z31\"W2Q\"[2A\"Z1Q\"T1Q\"T3!\"T1Q\"T1Q\"T1Q\"T1A\"R1A\"R1Q\"T1Q\"T1Q\"T1Q\"T11\"P1Q\"T11\"P11\"Q1A\"R1!\"N1A\"R2!\"M0Q\"M1!\"N0Q\"M1!\"N1!\"N1A\"Q1!\"N1!\"N11\"P1!\"N1!\"N1!\"O1!\"O1Q\"T1!\"O1A\"R11\"Q1!\"N2A\"T2A\"U1A\"R1A\"R1!\"O1A\"R2Q\"V2A\"Q21\"X1A\"R2A\"R2A\"U21\"W2A\"X2A\"X31\"X31\"X2Q\"Z3!\"Y2Q\"Z21\"T2!\"U31\"U31\"W41\"U31\"Y31\"[3Q\"\\31\"]4!\"Y2Q\"Z31\"X31\"W31\"X3!\"X3!\"Y4!\"]3A\"V4!\"]31\"X31\"]31\"\\3A\"]3Q\"]3A\"Z41\"[4!\"U2Q\"Z31\"[4!\"Y3!\"[3!\"[3!\"\\2A\"Z3!\"S/Q\"F/!\"A/A\"D0!\"H0A\"J1!\"O1!\"O0A\"L/A\"C.Q\"?.Q\"?.1\"<.!\":.!\":.1\"=/A\"F.Q\"?.Q\"?-Q\"9,Q\"3*A!W(A!T(1!S(Q!U)!!V'Q!Q(A!T(!!P(!!P(!!S'A!Q'A!Q&A!I&!!>%Q!B&A!I&A!M'A!P(A!R)!!V)1!V(1!T)1!X)1!X)!!X(Q!V)!!W)A!]+!\"&.Q\"?.A\".1\"=.!\";,A\"5,A\"3-!\"+*A\"#*!!^)1!W(A!T)!!V)!!V)!!V(Q!U(Q!U(A!T(Q!U(Q!U)!!V*Q!X)!!Y*!!^*!!_)Q!^)Q\"\"*!\"%,!\")+1\")+Q\"),!\"-+!\"'*A\"#*A\"#,Q\"0-!\"2.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F0A\"K2!\"M2!\"O3Q\"R4!\"T3!\"X2A\"T1!\"O1Q\"T2A\"Z2A\"Z2A\"Z3A\"_3A\"_3!\"Y3!\"Y4A\"V3A\"[3!\"Y3!\"Y3!\"Y3!\"X3!\"\\4!\"Y4!\"Y2A\"Z3Q\"Y3!\"Z2A\"Z3A\"V2Q\"Y3!\"U3A\"V31\"X31\"X2Q\"Z31\"W3A\"V2A\"S3A\"V2!\"V1A\"R1A\"R1Q\"T1A\"R21\"W2A\"T21\"R2A\"S2!\"U2!\"V11\"P1A\"R1Q\"T2Q\"U1A\"S1A\"R11\"Q11\"Q1!\"O11\"P1Q\"T1!\"O1!\"O1!\"O1!\"O1A\"R11\"P1!\"O11\"Q0Q\"L1!\"N1!\"N1!\"N"; +static unsigned char +palette_data[] = { 4,2,2,4,110,178,32,4,122,4,36, +86,15,3,66,4,58,127,36,8,186,4,34,122,17,2, +34,4,19,66,12,4,162,90,2,69,88,2,48,7,20, +2,25,2,103,8,14,48,4,58,186,90,3,154,82,2, +129,55,2,34,17,2,18,17,34,191,94,2,101,57,2, +70,7,32,154,12,22,157,17,3,50,4,88,150,96,3, +186,86,2,138,87,2,86,212,214,210,4,19,98,52,2, +154,15,11,2,4,132,216,7,18,125,12,6,82,37,12, +18,4,88,189,86,14,48,128,2,157,32,4,138,4,60, +155,4,48,126,60,2,218,7,10,52,13,12,66,129,2, +50,56,2,52,52,14,98,4,47,157,6,20,87,48,2, +24,58,2,101,120,2,141,52,5,170,4,113,215,127,2, +73,4,90,210,4,52,112,36,18,194,59,2,85,42,2, +10,107,2,173,95,2,114,31,3,52,4,79,160,84,3, +189,14,10,40,30,2,69,96,2,58,113,2,126,9,37, +231,17,33,170,28,14,2,4,30,146,68,10,37,132,2, +82,23,4,7,4,10,122,4,36,108,32,2,37,7,27, +2,4,98,175,84,10,146,4,101,191,4,14,146,8,29, +86,4,2,170,8,60,230,84,10,162,72,2,39,102,2, +142,4,142,221,4,49,143,68,12,170,4,124,213,15,4, +74,114,2,69,112,2,158,32,3,23,8,50,190,111,2, +104,6,40,154,96,2,210,6,28,104,60,2,138,61,2, +25,68,2,114,58,2,125,39,2,114,73,2,69,16,4, +58,4,88,177,56,14,26,138,2,173,4,68,176,71,2, +55,76,2,210,4,78,130,17,3,42,6,27,69,112,2, +49,12,26,178,47,13,159,18,11,10,13,11,74,141,2, +58,52,18,234,4,82,186,4,126,198,4,103,213,4,62, +206,4,72,226,12,46,210,72,12,222,12,26,146,20,34, +210,4,113,197,4,131,229,4,48,170,4,76,170,7,43, +95,52,30,218,15,11,170,52,14,202,12,14,86,4,40, +174,108,14,202,156,2,186,60,12,130,5,40,129,73,13, +189,12,42,138,44,14,202,4,59,143,4,124,229,4,69, +191,4,69,157,4,60,114,4,43,110,14,14,58,20,26, +157,28,26,210,4,87,162,4,91,202,4,110,226,4,98, +226,4,101,202,17,14,186,28,18,18,60,2,234,28,10, +114,4,30,114,8,10,162,12,54,186,20,26,130,100,10, +170,40,18,154,4,22,114,28,26,234,4,22,58,4,66, +226,4,54,202,12,42,202,4,38,98,4,145,234,4,76, +146,4,94,148,4,138,213,4,94,186,4,54,126,4,54, +154,4,118,211,4,106,178,4,106,188,4,54,142,4,94, +170,4,70,202,4,118,197,4,54,173,4,82,178,72,4, +172,36,10,138,76,14,162,4,98,210,4,118,226,112,2, +114,24,19,8,30,2,85,84,6,226,141,2,73,28,30, +10,28,46,186,112,4,206,36,10,90,36,2,174,108,2, +58,41,3,130,44,10,194,9,33,130,92,2,162,51,2, +42,12,32,162,81,3,146,44,11,26,28,6,146,44,2, +178,30,12,10,60,10,178,64,2,146,28,10,178,92,10, +210,5,41,146,40,2,102,96,2,125,100,2,88,74,2, +157,142,2,159,26,10,55,143,2,50,73,2,102,134,2, +142,73,2,84,127,2,126,142,2,82,156,2,178,28,10, +158,28,26,114,84,14,202,12,4,10,5,20,74,17,2, +26,92,2,194,7,19,106}; + +static unsigned char header_data[] = { 71,99,218,218,99,11,71,218,71,71, +218,99,99,99,71,99,218,99,99,99,99,218,71,218,99,218,218,99,99,218, +218,99,99,218,99,218,99,58,218,99,99,99,58,218,99,99,99,58,99,58, +99,58,11,58,99,58,58,11,99,58,99,58,99,99,99,218,99,218,99,58, +99,71,99,218,71,12,12,12,12,12,12,12,12,12,92,19,19,19,92,92, +92,92,19,108,19,19,19,19,19,19,53,53,53,53,101,19,19,53,53,19, +19,19,12,92,92,12,12,12,71,71,218,99,218,218,71,71,12,12,218,99, +58,58,58,99,99,99,58,99,99,99,11,58,11,58,58,99,58,99,99,99, +58,99,99,99,99,58,99,99,99,99,99,218,99,99,11,99,99,99,11,99, +99,218,218,218,99,218,99,99,218,218,99,99,218,99,218,218,99,99,218,11, +218,71,99,218,99,218,218,99,71,8,218,99,218,218,99,99,99,99,99,99, +218,218,99,99,218,99,218,99,218,71,99,99,99,218,99,99,218,99,99,99, +218,218,99,99,99,99,58,99,58,30,99,99,99,99,99,99,58,99,99,58, +99,58,99,58,99,99,58,58,58,99,58,58,99,218,218,71,99,99,71,71, +71,123,12,118,71,71,12,71,123,12,12,19,19,19,53,19,19,53,53,19, +19,53,101,63,20,63,20,63,53,53,53,101,53,53,53,19,53,53,53,19, +92,12,12,12,71,12,12,12,12,12,92,71,218,218,71,218,71,71,71,71, +99,218,58,58,58,99,99,99,99,58,58,58,99,58,99,58,58,99,58,58, +99,99,58,99,99,99,99,58,99,58,30,99,99,99,218,99,58,99,99,58, +11,99,99,218,99,218,218,99,99,218,71,99,218,99,99,218,99,99,218,99, +11,218,99,218,99,11,218,99,99,8,71,71,71,99,218,71,218,99,71,218, +11,99,218,218,99,218,99,218,99,99,99,99,218,99,99,99,99,99,218,99, +99,99,99,99,99,11,99,99,99,99,99,99,58,99,58,99,58,99,58,58, +99,11,58,58,99,58,99,99,58,58,218,99,123,71,71,71,123,71,71,218, +99,99,218,71,12,12,12,12,92,19,19,53,19,53,53,53,53,19,53,53, +53,53,19,53,19,53,53,53,53,53,63,63,101,63,63,20,53,19,53,53, +53,19,92,92,12,12,12,71,71,71,71,12,12,71,71,12,12,12,12,12, +12,218,218,99,58,58,99,58,99,58,99,58,99,99,58,218,58,99,58,99, +99,99,99,11,58,99,99,58,99,99,58,58,99,99,99,99,99,99,99,99, +99,58,218,99,218,99,99,99,218,99,99,218,99,11,218,99,218,218,99,99, +218,99,218,11,99,71,99,218,71,8,99,99,218,99,99,99,218,99,99,218, +218,99,11,99,99,218,99,218,99,218,218,99,58,99,99,99,58,11,99,99, +58,99,99,58,58,58,58,99,99,99,99,218,58,99,99,99,58,58,99,99, +58,58,99,58,99,58,99,99,58,58,99,218,71,71,218,218,218,58,58,58, +218,99,71,123,12,12,12,19,19,108,108,108,92,92,92,12,71,12,12,92, +19,53,53,53,101,53,53,19,53,101,53,20,53,79,79,0,34,79,20,63, +53,53,53,19,19,19,12,12,12,71,71,71,71,71,71,123,71,12,12,12, +12,12,71,71,218,58,99,58,218,58,218,99,58,99,58,99,99,218,58,58, +58,99,58,58,99,99,58,99,58,99,99,218,58,58,99,99,99,99,99,99, +58,11,99,99,218,218,218,99,218,99,99,218,218,99,218,99,99,218,218,99, +218,99,71,218,99,218,99,99,99,8,218,218,99,218,99,218,99,218,218,99, +11,218,218,218,218,99,71,99,218,99,99,99,218,58,99,99,99,99,218,30, +58,99,58,99,58,11,58,99,58,99,58,58,58,99,58,58,99,99,58,58, +58,99,58,99,58,58,99,58,218,99,99,218,58,99,58,58,58,58,58,218, +71,12,12,71,71,12,12,12,12,71,71,118,71,71,118,71,71,12,223,19, +19,53,53,53,53,63,229,20,79,20,34,0,20,101,101,63,20,101,101,53, +108,53,53,53,53,53,101,19,92,12,12,12,12,71,71,218,218,218,71,71, +118,12,71,71,218,218,58,58,58,58,58,58,218,58,58,58,99,99,218,99, +58,58,99,99,58,99,58,99,58,58,58,99,99,99,58,99,99,99,58,58, +99,58,58,99,99,99,99,99,99,99,218,99,99,218,99,218,218,99,99,218, +99,58,99,99,218,99,218,218,218,8,99,218,99,218,99,218,11,99,218,99, +99,99,99,99,218,99,58,99,99,99,58,99,218,99,99,99,99,99,58,99, +58,218,99,99,99,58,218,58,58,58,99,99,58,99,218,58,99,99,58,218, +58,99,58,99,99,99,58,99,58,58,58,58,99,58,58,58,58,218,218,12, +71,71,71,12,12,71,71,12,71,12,71,71,71,71,12,92,19,53,53,53, +101,63,79,34,251,0,0,63,20,53,19,53,53,53,53,19,19,53,19,19, +19,108,19,19,19,19,19,19,53,53,108,12,12,12,71,71,218,58,58,58, +99,218,71,71,71,12,218,99,99,58,58,58,58,218,58,58,58,58,58,99, +99,58,58,99,58,218,58,99,99,99,99,58,99,128,99,58,99,99,11,99, +99,58,11,58,99,99,99,218,58,11,99,58,99,218,99,99,218,99,99,99, +218,71,99,99,218,99,11,99,218,8,218,99,218,99,218,99,99,218,99,218, +58,218,58,218,99,99,218,99,58,99,99,99,99,78,11,58,99,58,99,99, +99,58,58,99,58,11,58,58,218,99,99,58,58,58,99,58,58,58,99,99, +58,58,58,58,58,58,99,58,99,99,99,58,58,58,58,58,218,71,118,12, +71,71,71,71,71,12,71,71,71,71,71,12,92,19,19,53,53,63,20,251, +0,79,79,0,79,34,34,79,0,63,229,20,63,101,53,101,19,53,19,92, +12,71,12,92,12,12,12,12,12,92,19,92,92,71,12,118,71,218,99,58, +58,58,58,58,218,123,71,218,58,58,58,99,58,58,58,218,58,218,58,58, +218,58,99,58,58,58,99,99,58,99,58,99,218,99,99,99,58,58,58,11, +58,58,99,58,99,99,30,99,99,99,58,218,218,30,99,218,99,99,99,218, +99,99,218,218,99,99,218,71,99,8,99,99,71,99,218,218,99,218,99,218, +99,218,99,58,11,58,99,99,11,58,99,58,99,99,99,99,58,58,99,99, +58,99,99,99,99,58,99,78,58,58,99,99,218,78,58,218,58,99,212,58, +99,58,58,58,218,58,58,58,58,58,58,58,58,58,218,71,12,12,71,71, +123,218,218,58,99,71,123,71,71,12,19,19,19,53,53,19,19,53,63,53, +101,101,101,63,101,101,20,20,79,0,0,79,79,34,251,79,79,251,101,53, +19,92,12,71,71,71,218,12,218,12,71,71,71,71,71,12,71,71,123,71, +58,58,58,58,58,58,58,99,99,58,58,58,99,58,58,58,99,58,99,58, +99,58,58,99,58,58,58,58,99,58,99,58,99,58,99,58,99,99,58,58, +99,99,99,58,99,58,58,58,99,99,99,30,128,58,99,99,99,99,99,58, +218,99,99,218,218,99,99,218,71,8,71,218,99,99,99,99,218,99,99,99, +99,30,58,11,58,58,99,58,58,58,58,30,58,58,99,99,99,58,99,58, +99,58,99,58,58,58,218,99,58,99,58,58,58,218,99,58,58,58,58,58, +58,99,99,99,58,99,99,58,58,212,99,58,58,218,71,71,218,218,99,58, +58,58,58,218,123,71,71,12,108,19,19,108,19,19,223,92,19,92,12,12, +19,19,19,19,53,53,63,63,229,0,34,34,79,0,79,0,75,34,0,34, +79,20,53,19,92,12,71,71,71,218,71,123,71,123,71,71,71,71,71,71, +71,218,58,58,58,58,58,58,58,99,58,58,58,58,58,58,58,58,99,58, +58,99,99,58,99,58,58,58,58,58,58,99,58,99,58,99,58,58,99,99, +58,58,99,99,58,58,218,58,58,99,58,99,11,58,58,99,58,218,99,99, +99,99,218,99,99,218,99,99,99,8,99,218,99,218,99,99,99,99,58,58, +11,58,99,58,58,30,58,11,58,11,58,99,99,58,99,58,58,58,99,58, +58,99,58,99,99,58,58,99,58,99,58,99,58,99,212,58,58,58,58,58, +58,58,58,58,58,58,58,58,58,58,212,58,218,218,218,99,58,58,58,58, +58,99,71,71,71,12,71,71,12,12,12,71,71,123,71,218,71,71,71,92, +19,108,63,79,229,126,0,79,0,0,34,34,34,126,34,251,79,0,126,34, +79,0,79,20,63,19,19,12,71,71,71,218,71,99,71,71,71,71,71,71, +71,71,218,58,58,58,212,58,58,58,58,58,58,58,58,58,58,58,58,58, +58,58,99,58,58,99,58,58,99,99,128,218,58,58,99,58,99,58,58,99, +218,58,58,218,99,99,99,99,99,99,58,99,99,58,30,218,99,99,99,99, +99,99,218,99,99,99,218,218,99,8,218,99,99,99,58,99,99,99,99,99, +58,58,218,99,99,99,58,99,58,58,58,99,58,99,58,99,99,99,58,58, +99,99,58,58,58,58,58,58,99,99,58,99,99,58,58,58,58,99,58,58, +99,58,99,58,78,212,99,212,99,58,58,99,58,58,78,78,246,99,212,58, +99,71,123,71,71,71,71,71,218,218,71,123,218,218,218,118,12,19,63,63, +0,0,0,34,34,0,34,79,79,79,0,34,79,79,20,101,53,101,53,19, +53,53,101,101,53,53,19,19,19,92,218,218,218,218,218,212,78,58,218,218, +71,71,71,11,58,246,58,78,246,58,58,58,99,99,58,58,99,58,212,58, +99,58,99,58,58,99,58,58,58,58,58,212,218,58,58,99,58,58,99,58, +99,99,99,58,58,99,99,99,58,99,58,58,99,99,99,58,58,99,99,99, +99,99,99,11,58,99,99,99,218,8,99,99,218,99,99,218,99,218,58,58, +11,78,58,99,58,99,58,99,58,11,58,99,58,99,58,58,58,99,99,58, +99,99,99,58,58,58,58,58,58,58,58,58,58,58,58,212,99,58,212,99, +58,58,78,58,78,58,58,58,58,58,58,58,58,58,246,58,246,58,58,71, +218,71,71,71,218,71,71,71,71,218,218,71,71,92,92,53,63,126,79,0, +0,79,0,79,34,79,0,126,79,79,79,79,79,229,229,101,53,108,92,71, +71,71,71,71,71,12,12,19,108,19,92,71,71,71,71,218,212,246,78,58, +58,218,218,71,71,58,58,212,212,78,212,78,78,58,58,58,58,58,99,58, +78,58,58,99,58,58,58,58,58,58,58,58,99,58,99,58,58,212,99,58, +58,99,58,99,58,99,99,58,58,99,99,58,58,58,58,11,78,99,99,99, +99,58,99,58,71,99,99,99,99,8,99,99,99,218,99,58,99,30,58,11, +58,11,58,58,99,58,58,99,58,99,58,99,99,58,99,58,99,58,58,99, +58,58,58,58,58,78,58,99,58,99,58,58,58,58,99,58,212,99,58,58, +58,78,78,78,58,58,58,58,58,212,58,78,58,78,78,78,58,99,218,218, +71,218,218,71,58,99,58,99,71,71,71,12,19,20,79,251,0,251,79,251, +79,63,126,79,79,79,79,229,79,79,79,126,126,79,79,63,20,53,53,92, +12,12,218,71,71,218,218,218,71,218,71,71,71,218,71,218,218,58,246,246, +78,212,78,58,218,218,58,58,58,246,78,212,78,212,58,58,58,58,58,212, +78,78,78,58,58,99,58,58,58,58,58,58,58,58,58,218,99,99,58,99, +58,58,218,99,58,58,99,58,99,99,58,99,99,99,58,99,99,58,58,58, +218,99,11,58,99,99,99,218,99,8,99,30,218,58,11,99,99,58,99,58, +99,58,58,99,218,99,218,58,99,99,58,58,58,58,99,58,99,99,58,99, +58,58,58,78,78,58,58,58,58,58,99,246,78,78,58,58,58,58,58,78, +78,212,78,246,246,58,58,58,212,58,212,246,78,246,58,212,218,218,218,218, +218,58,246,58,246,58,218,218,123,12,19,19,53,53,101,53,63,101,63,63, +63,63,63,63,63,101,63,53,63,53,53,53,53,108,19,19,19,19,108,19, +92,92,12,12,71,71,218,99,99,218,218,218,218,218,71,71,71,218,218,246, +78,78,246,78,78,78,58,58,58,78,78,78,78,246,58,58,58,58,58,78, +212,78,78,58,58,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58, +58,99,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,99,99,99, +58,99,58,99,99,58,99,99,99,8,99,99,30,58,58,58,58,58,58,99, +58,11,99,58,99,58,58,58,58,58,58,99,58,58,58,58,58,58,99,58, +99,58,78,58,58,58,99,58,58,78,246,78,58,78,58,58,58,58,78,212, +246,78,246,78,78,99,212,246,78,246,58,246,246,78,246,218,218,218,58,58, +246,78,78,246,58,218,218,71,12,12,108,92,108,19,108,53,63,63,63,53, +53,53,19,223,92,92,49,118,118,118,118,118,118,118,71,118,118,12,12,12, +92,71,71,123,218,99,11,58,58,58,58,78,58,99,99,123,71,218,218,218, +246,246,78,212,78,212,78,246,78,78,58,78,246,78,246,78,58,58,58,58, +99,78,246,78,246,99,58,58,58,58,58,78,78,78,78,99,58,99,58,99, +78,58,58,99,58,218,218,58,58,99,58,58,58,218,99,58,58,58,58,11, +58,99,99,99,58,99,99,218,58,8,99,99,58,99,58,11,58,11,58,58, +99,58,99,58,99,58,99,58,58,218,58,58,58,99,58,99,58,58,58,99, +78,58,58,58,99,58,58,78,78,58,246,78,246,99,58,58,58,212,78,78, +246,58,246,58,78,78,78,58,246,78,78,58,246,58,58,58,212,58,246,78, +212,246,58,58,71,71,71,71,12,92,92,92,108,53,53,53,19,19,223,223, +49,223,92,49,49,223,92,49,118,118,118,71,118,112,118,11,11,112,71,112, +71,71,11,11,11,99,99,58,58,78,78,78,246,78,246,58,99,71,218,71, +218,78,78,246,78,246,58,246,78,246,212,58,246,58,246,78,212,78,246,58, +58,58,78,246,246,78,78,99,58,58,58,212,78,58,78,58,58,58,58,58, +78,58,78,99,58,58,99,58,58,58,58,99,58,58,99,218,58,99,58,58, +58,58,99,58,99,99,58,99,99,8,99,99,58,58,58,99,58,99,99,58, +99,58,58,58,58,58,58,218,99,58,99,58,58,58,58,58,99,58,58,78, +58,78,78,78,78,58,78,58,78,78,78,212,78,58,78,58,78,212,78,246, +78,246,78,78,212,246,246,78,246,212,246,246,78,246,58,246,78,246,58,246, +246,58,99,218,218,218,71,12,92,19,19,19,19,19,223,223,49,223,49,118, +49,112,30,30,237,103,208,208,245,208,245,208,245,245,245,103,208,103,22,237, +30,30,11,11,11,11,71,71,11,99,58,78,78,246,58,246,246,246,58,99, +99,218,212,78,246,78,246,78,246,58,78,58,246,78,58,246,78,212,78,246, +58,212,58,78,78,212,78,78,58,58,99,78,78,78,78,78,58,58,99,58, +58,78,78,78,58,58,99,58,99,58,58,99,58,218,58,58,99,58,58,218, +99,58,99,99,58,99,30,99,99,8,58,99,58,99,58,58,58,99,58,99, +58,218,218,58,99,58,99,58,58,58,78,99,78,58,99,58,58,78,58,78, +78,58,78,78,58,78,78,246,246,212,78,78,78,58,78,246,78,246,58,246, +212,78,58,78,78,58,246,78,78,78,58,246,78,246,78,58,246,78,78,78, +58,218,99,11,71,12,92,92,92,223,223,223,223,223,49,118,112,22,237,208, +72,245,55,243,245,72,72,72,65,208,236,208,208,245,72,55,243,55,55,243, +245,245,245,103,237,237,30,11,11,112,71,11,99,58,78,246,246,246,246,78, +58,218,58,58,246,78,212,78,246,78,246,78,212,78,78,212,78,246,78,78, +58,78,78,78,78,78,246,246,246,58,58,78,58,246,78,212,78,78,99,58, +58,78,58,58,58,58,58,99,58,58,58,58,78,58,58,99,99,58,58,58, +99,218,58,99,99,99,58,99,58,8,99,99,99,58,11,58,58,58,99,58, +58,58,58,58,58,58,58,99,99,78,78,58,58,78,58,58,99,78,78,78, +78,78,78,78,78,78,212,246,246,246,246,78,78,246,246,58,246,78,246,78, +78,78,212,246,246,246,78,78,212,246,246,246,58,246,246,78,246,246,78,58, +218,99,71,12,12,92,92,82,223,49,223,118,112,22,208,72,72,208,65,22, +22,112,11,112,112,112,112,112,118,118,118,112,112,112,30,244,244,30,237,65, +236,72,55,55,243,243,208,208,237,237,11,71,11,11,71,11,99,58,246,246, +246,78,78,246,58,246,78,246,58,246,58,246,58,246,246,78,78,78,212,78, +212,246,212,78,246,246,58,78,78,246,99,246,246,58,246,58,78,78,78,58, +78,78,78,78,78,78,58,58,58,99,58,58,78,99,58,58,58,218,99,99, +58,58,99,58,99,58,58,99,99,8,58,58,99,58,99,218,99,58,99,99, +99,58,99,58,99,58,58,58,58,78,58,58,58,58,58,58,58,78,212,78, +78,58,246,78,58,246,246,246,246,246,246,246,78,58,246,78,246,58,246,58, +246,78,78,78,58,246,212,78,78,78,58,246,78,212,246,58,78,212,58,99, +218,71,12,92,19,223,49,49,118,62,30,22,208,208,103,30,244,112,244,118, +112,23,49,49,49,49,49,49,49,49,82,82,223,82,49,118,23,118,118,112, +11,30,237,22,65,245,55,243,245,245,103,237,237,11,71,11,71,71,218,58, +246,246,78,246,78,212,78,246,246,78,246,246,78,78,212,78,212,78,246,78, +78,58,246,78,58,246,78,212,78,246,78,78,78,78,78,212,246,246,246,78, +58,78,78,78,58,78,78,58,58,58,58,58,99,58,58,58,58,58,99,58, +58,58,58,58,58,99,99,58,58,8,99,99,58,58,58,99,99,99,99,58, +58,99,78,58,78,99,58,58,99,78,78,78,58,78,58,58,78,246,78,212, +78,78,58,78,246,246,246,246,246,246,58,78,78,246,58,246,78,246,78,246, +78,212,78,212,212,246,78,78,246,246,78,212,58,99,212,246,246,58,99,218, +118,12,92,223,223,49,49,11,237,208,208,103,244,23,118,112,118,112,49,49, +19,82,82,82,223,49,66,49,49,82,223,223,101,19,223,82,223,82,223,82, +82,49,23,112,11,244,30,65,72,55,55,245,208,22,237,112,11,118,71,218, +218,58,58,78,246,78,212,78,78,212,99,78,212,246,78,246,78,246,78,212, +246,246,78,246,246,78,246,78,246,58,246,78,58,78,246,246,246,246,212,246, +78,78,78,78,78,58,78,78,99,58,78,78,78,99,58,58,99,58,99,99, +58,99,99,99,99,58,99,58,99,8,99,99,99,58,58,99,58,58,99,58, +58,58,78,78,58,58,58,58,58,58,78,78,78,78,78,58,246,246,246,246, +246,78,78,212,246,246,246,246,246,246,78,212,78,246,78,212,78,246,58,246, +78,246,78,58,58,212,246,58,78,246,246,58,58,58,58,246,58,218,71,12, +223,223,49,49,49,30,65,72,72,30,112,118,118,112,118,49,223,223,223,49, +244,244,244,244,23,23,23,23,70,66,49,70,49,70,70,118,23,23,23,23, +49,223,19,82,223,223,23,11,244,237,208,72,55,55,208,103,30,11,11,49, +71,71,99,58,246,78,246,246,58,246,58,58,246,212,78,246,58,246,78,58, +58,212,78,78,212,78,212,78,78,78,212,78,78,78,246,212,246,246,246,212, +246,58,78,78,78,78,58,78,78,99,58,58,78,58,58,58,99,58,58,58, +58,58,58,58,99,58,99,58,99,8,99,58,58,218,58,58,58,99,58,58, +58,99,58,58,99,58,78,78,78,78,78,78,78,58,246,246,246,212,246,246, +212,246,78,246,246,246,246,246,212,246,246,78,246,58,212,246,78,78,78,246, +58,246,212,99,58,246,78,246,246,58,58,58,58,78,246,58,99,118,12,92, +223,223,223,11,22,72,208,244,49,112,112,118,49,82,223,49,244,244,242,62, +23,62,23,23,244,244,244,244,244,244,62,30,244,244,244,244,23,112,210,23, +62,244,244,23,223,82,53,82,49,112,30,30,65,72,55,245,208,237,30,112, +71,49,118,71,99,78,78,78,246,246,58,99,58,246,212,78,246,58,246,212, +99,58,212,246,78,246,78,246,212,246,78,246,246,212,246,246,246,212,246,246, +246,246,78,78,246,246,78,78,78,78,58,58,78,58,58,58,58,58,99,99, +99,78,99,58,99,99,58,99,58,8,58,99,58,99,99,58,58,99,58,58, +58,58,58,58,78,58,78,78,58,78,58,246,78,78,78,212,246,246,212,246, +246,246,246,246,246,246,246,246,246,246,246,58,246,58,99,212,246,212,78,78, +78,99,58,58,78,246,58,78,246,58,58,58,58,212,58,218,71,12,49,49, +49,112,22,72,65,112,49,112,112,112,223,19,118,62,244,62,62,23,23,244, +244,244,244,112,23,49,49,223,19,223,82,223,223,49,223,23,118,112,244,30, +62,62,62,62,23,62,23,223,82,8,82,71,30,244,22,72,55,245,103,237, +11,71,12,12,71,99,78,78,78,58,212,58,58,58,58,212,78,58,246,78, +58,58,58,212,78,246,58,78,78,212,212,246,246,246,212,246,246,246,246,246, +246,246,58,78,78,58,246,212,78,78,58,78,58,78,78,78,58,78,58,58, +218,58,58,99,58,99,99,99,58,8,218,99,58,58,58,99,58,58,99,78, +78,58,99,58,58,78,58,78,246,78,78,58,78,212,246,246,246,246,246,246, +246,246,246,212,246,212,246,246,246,212,78,246,58,58,58,246,78,78,212,246, +58,58,58,58,212,78,246,212,58,58,58,58,58,58,71,12,49,223,223,49, +30,208,72,30,49,49,112,49,223,223,23,22,244,62,23,23,62,22,112,118, +49,49,223,118,23,244,30,242,22,242,242,62,242,244,244,112,23,49,49,223, +23,112,30,244,62,112,210,23,23,49,82,8,223,244,237,30,208,55,243,245, +22,30,71,118,12,71,99,78,78,246,212,58,58,58,58,246,246,246,78,246, +58,58,58,78,212,78,246,246,246,58,58,212,246,246,246,246,246,246,246,246, +246,78,246,58,246,246,246,78,212,78,78,78,58,78,58,78,58,58,99,58, +58,58,99,58,58,58,58,58,58,8,58,99,58,58,58,58,99,58,78,78, +58,58,78,58,58,78,78,58,78,78,78,78,78,246,212,246,246,246,246,246, +246,246,246,246,246,246,212,246,246,246,78,58,58,58,58,246,78,78,246,99, +212,58,212,58,212,78,78,58,58,218,58,212,58,99,71,49,223,49,49,30, +55,72,112,49,244,11,49,82,112,242,242,62,23,62,244,112,118,223,82,118, +30,236,29,225,231,33,248,42,42,42,219,2,42,219,110,107,231,29,65,244, +112,223,223,49,112,30,30,23,23,23,23,49,82,101,49,30,30,242,72,243, +208,103,30,71,118,12,71,99,78,78,78,58,58,58,58,58,78,58,246,78, +58,58,99,58,246,58,246,58,246,58,99,58,212,246,246,212,246,246,246,246, +246,246,246,246,212,246,246,246,246,78,58,78,78,78,78,78,58,78,78,78, +58,78,99,99,99,58,58,99,99,8,99,58,99,99,58,58,58,58,78,78, +78,78,58,58,58,78,78,78,78,78,246,246,58,246,246,246,246,246,246,246, +246,246,212,246,99,58,246,246,246,246,212,58,58,58,99,212,78,212,212,58, +78,58,58,58,246,246,78,58,71,218,58,58,11,71,118,223,49,23,103,243, +22,49,118,30,118,82,49,30,242,62,70,62,244,118,223,82,112,65,93,205, +217,42,80,147,98,4,26,8,8,8,8,121,8,8,26,4,98,210,111,219, +29,29,65,112,223,82,23,30,244,62,62,62,62,49,82,82,112,30,30,65, +243,245,103,30,71,118,12,71,218,212,246,58,58,212,212,58,58,246,212,78, +58,58,212,58,58,246,78,246,58,58,58,58,246,212,246,246,246,246,246,246, +246,212,246,246,246,246,212,246,246,212,78,246,212,78,58,78,78,78,58,78, +78,78,58,58,58,58,99,58,58,8,58,58,58,58,58,58,58,58,237,78, +58,78,78,58,78,78,212,78,246,78,78,246,246,246,246,246,246,246,246,246, +246,246,246,58,58,58,246,246,246,246,58,58,99,58,58,246,246,78,99,78, +246,78,58,58,58,58,58,218,12,99,58,99,71,92,49,223,118,22,41,65, +223,23,30,118,19,23,22,242,23,23,30,112,223,19,112,29,222,232,87,80, +98,26,121,8,20,253,20,20,20,20,101,20,20,20,253,253,20,8,121,26, +4,14,2,231,29,30,49,82,112,30,244,62,23,210,118,82,101,223,30,244, +65,55,243,103,237,71,118,71,71,99,58,58,58,58,218,58,58,58,246,212, +58,58,212,78,99,58,246,246,78,58,58,58,58,246,246,246,246,246,246,246, +246,246,246,212,246,246,246,246,246,246,246,78,78,78,78,78,58,78,58,78, +78,58,58,58,78,99,58,58,99,8,99,58,58,99,99,58,58,58,58,237, +78,78,58,78,78,246,78,246,78,246,78,246,246,246,246,246,246,246,246,246, +246,246,58,58,58,58,246,246,246,58,99,78,246,212,99,246,212,58,78,246, +58,246,58,58,58,212,218,12,118,58,58,71,12,49,19,49,237,41,65,49, +118,112,223,82,244,236,62,66,62,30,82,8,112,93,68,6,137,88,162,253, +253,20,253,19,223,23,244,244,54,242,54,242,244,62,112,49,223,20,20,20, +20,253,26,98,14,33,29,244,82,101,112,22,62,62,62,23,49,53,82,30, +112,22,243,243,208,11,71,118,12,218,99,58,58,58,12,71,58,58,58,58, +99,58,58,246,246,58,58,246,246,58,58,58,99,58,246,246,246,246,78,58, +246,212,246,246,246,246,246,212,246,246,78,78,78,78,58,78,78,78,78,58, +78,58,78,237,78,58,99,99,78,8,58,99,58,58,78,78,78,78,78,78, +58,78,78,58,78,246,78,212,246,246,246,246,246,246,246,246,246,103,246,246, +246,246,58,58,58,99,212,246,246,58,212,78,246,58,58,58,58,58,212,78, +78,78,58,58,58,58,123,49,218,99,11,118,223,223,82,237,41,208,23,118, +237,223,82,244,18,210,23,23,112,19,223,103,64,6,148,147,26,253,20,8, +66,23,54,111,219,219,137,24,76,24,163,25,137,42,204,42,151,109,244,223, +20,20,20,20,8,4,111,231,236,23,82,12,237,62,62,23,62,223,253,223, +237,244,22,41,245,103,11,112,118,71,218,58,58,99,92,92,128,58,58,58, +58,58,58,212,78,58,58,212,58,58,58,78,78,58,212,246,246,246,58,58, +212,246,212,246,246,246,246,246,246,212,246,78,246,246,78,78,78,78,78,58, +78,58,58,78,99,58,58,58,99,8,99,58,58,58,58,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,246,246,246,246,103,246,246,246,246,246, +246,78,58,58,58,58,58,212,58,58,78,212,78,78,99,58,58,212,78,246, +212,212,58,58,58,218,92,12,218,99,71,12,223,82,118,243,55,23,223,30, +223,19,244,93,54,49,23,112,82,82,245,153,138,234,162,8,253,101,49,30, +111,125,24,201,142,16,159,142,43,95,197,156,193,193,51,141,224,25,248,231, +65,118,20,20,20,20,121,210,231,55,244,82,49,30,244,62,62,244,223,20, +118,237,112,208,243,245,237,71,118,49,71,58,58,218,92,92,12,58,58,99, +58,58,212,78,212,212,58,58,58,58,58,212,78,58,58,246,246,246,99,58, +99,246,246,246,246,246,246,246,246,246,212,246,58,78,78,78,78,78,58,78, +78,58,78,78,58,78,58,99,58,8,99,99,58,58,58,78,78,58,78,58, +78,78,78,246,78,78,78,246,246,246,246,246,246,246,246,103,246,246,246,246, +246,58,58,58,58,58,58,58,58,58,78,78,246,78,58,58,58,212,78,58, +58,78,58,58,58,12,92,12,99,218,118,19,82,223,22,116,237,49,112,112, +101,112,93,109,70,112,118,82,223,55,136,185,44,26,253,253,82,62,107,163, +117,16,114,159,161,106,98,46,26,26,26,26,26,4,32,81,44,142,43,234, +10,56,236,23,20,20,20,8,4,219,225,237,19,82,11,244,62,54,62,223, +20,112,30,244,72,239,103,237,71,12,12,71,58,71,92,92,12,128,58,58, +58,58,246,78,246,58,58,58,99,58,58,246,78,78,58,246,246,58,58,58, +58,212,246,212,246,246,246,246,246,246,78,78,246,58,246,58,78,246,78,58, +78,58,78,78,58,58,58,58,58,8,58,58,58,58,78,237,58,78,78,78, +78,78,78,58,246,246,212,246,246,246,246,246,246,246,246,246,246,246,246,246, +78,58,58,58,58,58,99,58,58,246,246,246,58,246,58,58,58,78,246,218, +11,58,58,58,58,12,92,71,218,11,49,223,101,23,239,93,23,118,244,223, +223,65,29,70,70,112,82,82,72,233,135,152,121,253,20,49,242,179,176,39, +198,156,32,47,26,26,69,113,26,47,9,47,162,113,26,121,113,252,152,159, +43,234,217,238,30,253,20,251,8,4,107,17,30,82,223,22,62,62,54,244, +82,19,237,112,244,41,245,30,112,71,92,71,99,71,12,92,92,71,78,58, +58,246,246,58,78,212,58,58,58,58,58,78,246,58,99,58,212,58,58,58, +58,78,246,246,246,246,246,246,246,246,246,246,78,78,78,78,246,58,78,78, +58,58,58,99,58,99,58,58,58,8,58,99,99,58,58,78,78,58,78,58, +78,58,78,78,78,78,78,246,246,246,246,246,246,246,246,246,78,246,246,246, +58,58,78,58,78,58,58,99,58,78,58,246,246,58,58,58,212,58,58,12, +71,58,58,58,99,92,92,71,218,71,223,8,19,22,150,30,49,11,23,101, +30,93,54,49,112,49,20,30,254,181,95,26,253,253,49,65,163,166,206,202, +52,26,8,121,4,161,43,114,139,131,57,200,195,188,192,88,26,26,121,98, +197,67,234,145,230,22,82,20,20,8,98,107,100,112,253,112,103,244,54,62, +49,20,49,237,118,208,243,103,11,11,12,92,92,92,92,12,49,12,58,58, +78,58,246,78,246,78,212,99,58,58,78,246,58,78,58,58,58,99,58,58, +58,99,246,246,246,246,246,246,246,246,246,246,246,78,246,78,246,78,58,78, +78,58,78,78,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,78,78,78,78,246,246,246,246,246,246,246,246,246,246,246,58,212,58,246, +99,212,58,99,78,99,58,58,78,246,58,58,58,78,78,58,78,78,99,71, +12,71,58,58,12,12,12,71,11,12,223,101,49,243,100,118,223,112,82,19, +93,225,113,23,244,101,223,41,129,199,52,253,20,223,242,124,39,57,117,122, +121,121,47,44,195,35,94,196,165,189,189,189,27,84,200,139,67,186,26,121, +240,106,159,234,175,68,242,20,20,20,8,210,238,93,223,19,237,244,23,54, +62,19,101,244,112,30,243,208,237,11,12,92,49,223,12,12,92,12,58,78, +246,78,58,246,78,212,78,78,58,58,212,58,58,58,78,99,58,58,99,58, +58,58,246,246,246,246,246,246,246,246,246,246,78,246,58,78,58,78,78,78, +78,78,237,78,58,58,58,58,58,8,99,58,99,58,78,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,103,246,246,246,246,218,58,58,78,78, +58,99,71,12,58,78,58,78,58,78,123,12,78,78,58,212,78,78,123,92, +12,12,99,99,12,92,92,71,11,118,82,101,112,116,236,82,112,112,82,118, +100,110,66,23,49,101,244,215,73,43,69,253,101,23,219,59,97,202,52,8, +8,4,120,97,187,139,27,143,46,113,26,26,46,88,60,27,131,200,192,47, +82,66,81,159,234,170,68,118,20,251,20,26,2,64,244,101,118,22,23,62, +62,49,20,118,244,23,208,245,30,11,71,12,92,12,12,49,12,12,71,58, +246,246,78,246,78,246,58,78,58,78,212,218,12,246,78,99,58,78,78,11, +12,58,58,246,246,103,246,246,58,246,246,246,246,78,246,78,78,78,58,78, +78,58,58,58,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,212,78,246,246,78,99,58,246,246,246,246,246,246,71,12,99,58,58,99, +58,58,53,251,71,78,78,78,78,246,19,19,71,246,246,78,212,246,12,92, +12,12,12,12,92,12,12,71,218,118,19,101,244,239,65,223,244,11,53,112, +222,235,66,112,223,20,72,45,90,221,8,253,19,242,214,97,57,152,26,8, +26,188,57,187,139,186,8,8,8,8,121,121,8,8,26,4,44,131,94,67, +162,82,113,44,159,76,220,29,82,0,20,8,98,238,245,82,82,237,23,62, +54,112,20,223,237,49,22,245,237,11,71,49,12,92,12,12,12,12,71,78, +246,58,246,58,246,78,246,58,246,212,58,19,101,218,78,78,99,58,58,53, +101,71,58,246,246,246,78,71,92,58,246,246,212,246,78,58,58,78,78,58, +78,78,78,78,58,58,58,58,58,8,99,99,58,99,58,78,78,58,99,58, +78,78,58,246,78,58,71,92,218,246,246,246,103,246,12,92,92,58,58,58, +58,218,63,53,19,246,246,78,78,212,53,92,92,212,246,78,78,58,92,218, +12,12,92,92,92,12,12,71,11,118,101,101,22,116,242,223,237,11,8,30, +17,62,70,112,8,53,72,172,134,143,8,20,223,109,102,57,97,81,121,82, +252,114,35,157,165,26,253,8,8,46,182,4,26,26,8,8,113,160,190,35, +186,66,121,106,117,152,232,68,49,79,20,8,26,42,17,223,53,22,112,244, +54,244,8,82,30,118,30,245,30,11,99,12,12,92,123,12,12,12,71,78, +246,78,246,78,58,246,246,58,246,58,12,53,53,12,78,78,78,99,12,63, +63,92,78,78,246,246,78,229,229,12,246,246,246,212,78,71,71,58,78,78, +58,78,78,58,58,58,212,58,58,8,99,58,58,58,58,78,78,58,99,218, +99,58,246,78,78,58,12,92,12,78,246,246,246,218,92,92,19,71,58,58, +58,12,38,92,53,71,246,58,246,218,108,92,92,218,246,212,78,58,12,218, +12,12,12,92,12,92,12,71,71,118,82,8,103,116,242,82,244,11,82,30, +222,210,223,23,8,101,55,172,183,186,8,253,223,110,102,157,97,161,8,8, +127,67,190,140,189,26,8,8,69,127,120,5,52,26,26,8,121,9,84,187, +43,113,82,98,142,152,89,119,244,20,0,253,121,219,64,23,101,30,30,23, +54,244,82,101,30,112,112,72,237,71,30,12,12,92,118,12,12,12,71,58, +246,246,58,246,58,212,78,246,58,246,108,63,53,19,78,78,78,58,53,101, +53,108,78,246,246,246,108,79,20,53,246,246,246,78,99,92,92,12,99,78, +78,58,58,218,218,218,99,58,58,8,99,99,58,58,58,99,99,218,71,11, +99,99,78,246,212,71,218,71,92,71,246,246,246,71,92,92,19,19,58,58, +58,92,53,92,92,108,58,246,246,71,92,92,92,92,212,246,246,58,123,48, +12,12,12,92,92,12,12,12,99,118,19,101,237,116,65,49,30,112,82,244, +222,235,26,118,82,101,65,136,183,7,8,8,82,242,21,157,57,192,69,8, +26,7,191,157,190,60,9,8,26,52,84,131,60,4,121,8,26,113,67,94, +142,113,82,98,43,152,10,119,244,251,0,253,121,111,64,23,101,244,22,49, +62,62,82,101,112,23,112,103,30,71,11,12,12,118,12,12,118,12,71,78, +78,246,78,58,218,58,78,246,246,12,53,101,53,19,58,78,58,12,63,63, +53,63,218,246,246,71,79,20,63,101,218,246,246,218,12,19,108,12,99,58, +99,71,218,71,71,218,71,218,71,8,99,58,99,99,58,58,11,218,71,218, +71,71,218,58,58,99,218,99,71,92,218,78,246,92,92,12,223,53,71,58, +58,19,19,92,92,19,12,78,78,12,92,92,92,92,71,78,78,218,123,241, +48,12,12,92,49,12,118,12,71,49,223,101,11,116,65,66,112,11,82,112, +100,54,66,66,223,20,244,105,90,159,8,8,8,244,10,167,187,202,98,8, +121,47,192,169,190,35,195,188,188,195,57,84,106,47,8,8,8,122,195,140, +95,66,82,98,142,221,175,119,244,251,251,20,8,219,64,112,101,30,242,118, +23,62,19,20,11,118,112,22,11,11,99,12,12,12,12,71,12,118,71,58, +246,58,246,99,12,99,212,78,58,19,53,53,101,53,58,78,218,53,101,53, +53,63,218,246,246,63,0,101,19,53,12,78,58,12,108,92,19,108,92,71, +71,12,71,71,123,71,71,123,71,8,99,99,58,58,58,11,58,11,99,218, +99,11,99,99,218,99,218,99,71,12,12,99,99,92,92,92,12,19,53,71, +99,38,53,12,12,92,19,218,212,92,92,92,48,12,108,128,246,218,123,48, +128,123,12,12,12,12,12,118,71,71,223,8,112,41,55,49,49,244,223,49, +93,231,70,82,223,20,82,116,181,158,252,8,20,223,242,214,57,157,156,46, +8,66,26,147,44,198,86,196,86,198,44,52,4,8,8,8,46,60,97,194, +52,82,82,180,159,177,232,64,66,79,20,8,26,231,100,49,8,237,62,23, +62,244,82,82,30,223,11,237,112,11,11,12,12,71,12,12,118,12,71,218, +246,78,58,218,92,99,246,212,92,53,79,79,53,53,218,58,19,63,38,126, +53,101,92,58,19,251,63,223,19,19,92,71,12,223,92,223,223,92,19,92, +12,71,123,71,71,71,71,71,71,8,11,58,11,58,99,58,99,58,99,58, +58,218,218,218,99,218,11,99,99,71,92,92,12,49,92,71,99,12,53,53, +92,20,53,123,48,12,92,19,218,19,92,12,241,48,92,92,58,218,92,241, +128,212,71,12,118,12,12,71,71,112,223,19,82,55,116,112,49,244,223,19, +208,238,235,66,223,253,82,22,250,73,95,113,8,82,49,111,102,207,132,188, +252,69,8,121,162,4,47,52,127,4,4,26,26,8,8,46,186,86,169,95, +66,8,4,95,192,87,45,236,101,251,253,8,70,222,236,223,223,237,244,23, +54,244,82,82,237,118,11,244,71,11,99,71,118,12,12,12,12,12,12,58, +78,78,246,123,108,12,212,12,53,63,13,83,63,53,12,92,53,226,13,13, +53,53,53,226,75,63,12,71,92,19,19,92,92,92,19,12,12,12,92,12, +71,71,71,71,71,12,71,71,71,8,99,99,58,99,99,58,58,99,58,58, +11,218,71,71,11,218,99,99,58,218,12,19,92,92,92,99,78,58,92,101, +75,251,53,12,123,48,92,108,101,63,92,12,241,241,92,92,108,92,108,128, +212,246,58,12,12,12,49,12,12,118,12,49,19,237,116,22,49,118,244,82, +112,17,231,70,223,82,20,82,93,45,133,7,46,8,8,49,50,224,168,207, +142,60,127,46,8,26,8,8,8,8,8,8,121,26,47,192,166,169,7,113, +66,113,7,156,36,217,28,23,251,251,20,26,111,222,30,8,49,22,112,62, +242,112,101,112,30,49,244,11,112,11,99,71,12,12,118,12,12,12,71,246, +246,78,212,92,108,92,218,53,38,13,0,0,63,101,20,63,101,75,83,83, +63,101,229,79,126,92,58,78,12,19,92,92,19,92,12,71,71,118,71,71, +218,12,71,71,71,71,71,218,99,8,218,99,218,58,58,218,99,99,58,99, +58,58,99,99,218,99,218,99,58,58,99,92,92,92,19,58,78,78,99,108, +0,34,38,123,123,48,123,92,53,108,92,12,241,241,241,123,92,19,19,123, +241,212,246,99,12,71,12,71,12,71,118,223,82,118,245,100,112,49,30,118, +223,237,238,111,113,223,19,20,49,93,144,184,44,113,8,253,19,210,173,141, +168,57,196,142,60,52,122,182,113,113,122,3,60,159,130,86,43,122,26,223, +47,106,95,76,89,68,244,20,251,20,8,210,238,72,223,19,30,112,23,62, +244,223,20,118,112,112,244,118,11,99,99,218,71,218,71,12,12,71,58,58, +78,246,246,92,63,53,53,101,83,0,83,83,53,63,63,53,20,83,0,0, +53,53,79,0,226,78,58,78,12,108,92,19,92,71,58,58,99,71,71,123, +71,218,218,71,218,218,99,218,99,8,99,99,218,218,99,99,99,99,58,99, +99,58,99,11,71,99,99,58,58,58,58,71,92,92,19,78,78,58,78,218, +53,63,101,123,123,48,48,123,92,19,92,92,241,241,241,241,92,92,92,12, +241,212,78,78,123,118,12,12,12,12,112,92,49,223,30,247,65,49,23,112, +82,23,72,231,14,26,82,19,101,49,17,146,102,154,147,69,8,82,49,23, +249,104,158,39,206,169,86,130,202,142,202,114,39,117,76,88,4,66,66,113, +7,95,234,175,68,22,101,20,251,8,4,107,100,112,101,112,30,23,112,62, +49,101,49,244,118,112,112,118,11,78,99,99,99,58,71,12,92,99,246,78, +246,58,218,108,108,53,63,229,0,83,34,13,53,53,101,38,13,0,0,13, +53,101,63,101,99,78,58,78,71,19,19,92,71,58,99,58,11,218,218,71, +99,99,99,99,218,58,99,218,218,8,71,218,99,99,218,58,99,99,99,99, +99,58,99,58,99,218,11,58,58,99,58,58,71,92,92,58,78,78,78,78, +118,19,53,123,48,128,128,48,123,12,92,92,48,128,212,48,241,12,12,92, +241,128,246,246,246,71,12,12,12,71,71,118,49,223,49,208,116,22,49,23, +11,223,223,72,225,235,113,82,82,101,49,65,68,164,201,7,162,26,8,121, +66,223,23,216,14,36,177,152,154,152,80,255,98,66,66,223,66,4,32,152, +152,163,228,222,112,251,20,20,8,113,219,222,22,82,23,22,62,112,54,244, +101,82,112,112,23,118,112,11,11,78,58,58,246,99,71,71,99,58,246,212, +58,58,123,108,108,53,20,13,101,19,34,13,53,53,53,0,75,38,0,34, +63,53,53,71,58,78,58,78,11,92,92,71,58,58,58,58,99,218,11,99, +11,58,218,218,99,99,218,99,99,8,99,71,99,99,99,99,99,218,58,99, +218,58,99,99,99,58,58,78,58,99,58,58,58,71,12,78,78,78,78,78, +58,12,19,12,48,218,246,218,48,12,92,92,241,48,58,212,48,241,12,92, +48,241,212,58,212,212,123,118,12,71,118,118,12,223,49,118,55,239,244,223, +112,112,82,118,236,225,14,4,26,82,101,19,112,93,153,21,224,174,88,162, +26,26,121,82,66,66,66,66,66,66,26,82,66,26,113,127,32,44,51,87, +248,222,236,223,20,20,20,8,70,111,17,237,223,49,237,30,62,54,30,118, +253,49,112,118,23,118,118,11,99,58,58,58,212,99,71,218,246,78,78,58, +58,58,108,108,63,38,13,92,58,12,13,251,53,63,251,79,12,71,34,34, +251,53,19,58,78,78,78,58,58,71,71,58,99,99,58,99,58,11,58,99, +99,99,99,218,218,99,218,218,99,8,71,99,218,218,218,99,218,99,99,99, +99,71,58,99,99,99,99,58,58,99,58,58,78,58,99,78,58,78,58,78, +78,78,99,218,128,58,58,78,128,48,12,92,123,241,78,246,58,48,241,218, +12,128,212,212,58,58,212,218,71,12,71,12,118,12,223,49,11,243,55,244, +49,112,244,223,49,236,17,111,4,121,82,82,8,223,244,29,153,61,148,234, +152,32,147,52,4,4,113,26,113,26,98,98,147,255,7,193,24,163,217,238, +110,112,101,20,20,253,8,70,107,222,22,223,223,244,244,244,244,242,112,82, +223,118,23,23,49,118,71,11,58,58,58,246,246,58,99,78,58,212,212,78, +58,99,53,53,38,83,19,58,246,19,34,79,251,34,34,71,58,71,79,13, +83,63,218,58,58,99,58,78,58,99,78,58,99,99,99,58,58,99,99,58, +218,11,218,99,11,218,11,99,71,8,71,218,218,11,71,99,218,99,99,99, +99,218,11,99,58,58,58,58,11,58,99,218,58,58,78,78,78,78,58,58, +78,78,78,78,58,78,78,78,58,58,48,123,48,48,128,78,246,78,128,241, +241,241,128,212,58,58,58,58,218,12,118,71,71,112,118,223,49,11,245,55, +30,49,112,244,223,19,30,93,107,111,4,26,101,101,8,101,112,242,93,203, +6,170,21,74,51,51,104,24,234,76,24,104,76,124,232,56,225,18,30,223, +20,20,20,20,8,66,235,231,236,112,223,118,30,112,112,54,244,112,82,49, +112,23,118,118,12,11,99,99,246,58,58,58,78,58,246,246,78,78,212,78, +58,12,53,229,34,40,78,78,58,38,0,13,13,79,71,58,58,71,13,0, +38,71,58,99,58,99,58,99,78,58,58,99,99,99,71,99,58,99,218,99, +71,99,218,99,99,71,218,99,71,8,71,71,71,123,218,218,11,218,218,218, +218,99,218,218,99,99,99,99,58,99,99,99,99,99,58,78,78,58,58,99, +99,78,78,246,78,212,78,78,58,78,128,48,48,241,48,246,78,58,246,128, +128,128,128,128,212,78,212,78,58,218,71,71,12,12,118,118,49,49,112,208, +41,22,49,112,244,23,19,49,22,93,219,14,4,8,82,101,20,101,223,49, +30,65,18,29,17,203,228,230,56,96,91,225,225,236,242,112,49,82,20,20, +20,20,82,113,210,107,29,22,118,223,112,30,244,244,62,112,23,82,223,49, +118,118,49,49,118,71,99,246,58,58,212,246,246,78,212,58,246,246,78,58, +218,53,209,126,40,78,78,78,218,0,34,34,79,71,78,99,58,71,251,229, +12,58,99,99,99,58,58,58,58,99,99,99,99,218,99,58,99,99,99,218, +99,218,11,218,218,11,218,71,71,8,71,123,71,71,218,123,71,99,11,99, +218,11,99,71,218,99,58,99,99,58,218,218,99,99,58,58,58,58,99,58, +58,99,58,246,246,246,78,58,58,58,78,58,48,48,241,78,246,78,78,58, +58,241,241,241,212,58,246,78,246,58,218,71,71,71,118,118,118,49,49,112, +103,243,236,112,49,244,112,49,223,118,65,93,107,14,98,113,82,8,101,253, +101,20,101,82,82,223,118,118,49,49,49,82,82,101,101,20,20,253,253,121, +26,70,235,110,29,103,118,223,223,11,244,244,54,242,244,49,19,223,49,118, +118,49,12,71,11,99,212,246,78,78,78,78,212,246,78,58,78,212,78,58, +12,38,213,71,78,58,58,78,40,83,79,20,99,58,99,58,99,12,92,71, +78,58,99,99,99,99,99,99,99,99,218,218,99,218,218,99,218,218,11,218, +11,218,218,71,218,218,71,123,71,8,71,71,12,71,71,218,218,218,71,71, +218,218,218,218,71,218,218,99,99,218,99,99,99,99,99,99,58,99,58,99, +99,99,99,58,78,78,78,78,58,99,58,58,58,128,48,128,78,78,58,78, +212,212,212,241,128,58,246,246,58,246,58,218,218,118,71,71,118,12,118,49, +23,237,245,55,208,23,118,23,112,223,223,118,244,236,18,110,14,210,4,66, +121,8,82,20,82,101,101,251,20,20,20,101,8,20,8,8,26,26,210,235, +109,110,65,30,118,223,49,244,244,244,244,242,65,30,223,82,49,118,118,49, +92,49,118,71,11,78,246,78,58,246,212,246,78,78,246,78,246,78,212,218, +53,92,99,78,58,58,58,246,53,0,53,99,99,58,99,58,99,71,218,58, +99,58,99,218,58,99,58,78,99,99,11,99,71,99,99,218,99,99,218,71, +123,218,71,218,12,71,71,71,71,8,71,71,71,71,71,118,71,71,218,99, +71,71,71,123,71,71,218,99,99,218,218,71,11,218,99,99,58,99,58,99, +99,99,218,58,58,78,78,78,58,99,99,58,58,58,58,128,246,78,58,58, +58,58,246,128,128,58,212,246,78,78,78,58,58,218,71,71,11,118,118,49, +12,23,11,103,243,72,237,23,23,112,23,223,19,223,112,22,109,18,29,111, +111,210,210,70,4,26,26,26,26,26,26,4,4,70,98,235,2,18,29,65, +54,23,223,49,23,244,244,112,244,54,22,244,118,82,223,223,118,92,49,49, +223,71,11,99,99,78,246,58,246,78,58,212,78,78,58,58,246,78,58,218, +71,78,58,58,99,58,58,99,19,77,58,58,58,218,99,58,58,58,58,58, +218,99,11,218,58,99,218,58,218,218,71,218,218,71,99,71,218,71,71,218, +71,123,71,71,71,71,71,71,12,8,118,118,71,71,118,71,71,71,118,12, +71,123,71,71,71,71,71,71,218,99,99,99,218,218,71,218,99,99,58,99, +99,218,99,218,58,58,246,78,78,99,99,99,99,58,246,78,58,246,58,58, +58,58,58,78,78,58,58,58,246,212,99,58,58,58,218,99,71,118,11,118, +49,49,49,23,11,208,55,245,22,112,23,23,23,23,49,49,49,223,112,30, +22,236,18,18,18,29,18,18,18,18,107,236,29,236,236,22,30,23,223,223, +223,118,118,112,244,112,244,242,242,30,23,223,82,223,49,49,49,223,49,12, +71,71,99,58,246,212,58,58,58,78,78,78,58,58,58,58,78,212,246,78, +78,58,58,11,99,58,78,78,99,58,58,99,218,99,58,99,58,58,58,218, +99,71,218,99,218,58,99,218,218,71,218,123,71,99,71,218,71,71,71,12, +71,71,12,12,12,12,12,12,12,8,12,12,12,12,12,12,118,118,71,71, +71,218,71,123,71,71,71,71,123,71,218,11,218,71,218,123,218,99,218,58, +99,99,11,218,71,99,99,58,78,58,99,99,71,99,58,78,246,246,246,58, +58,218,58,99,78,78,246,78,78,246,58,58,58,212,58,58,99,71,71,118, +71,118,118,23,49,112,112,103,72,72,65,244,112,23,118,118,70,223,223,223, +223,49,118,23,118,112,112,244,112,112,23,23,23,49,49,223,223,49,23,118, +244,244,112,62,244,109,22,30,49,223,223,82,49,223,49,223,223,118,118,71, +99,99,99,78,78,246,58,58,78,78,58,58,58,99,78,246,78,78,78,78, +99,99,99,58,99,58,78,78,58,99,99,11,218,99,99,58,58,11,99,218, +218,218,71,99,218,218,11,218,123,71,218,71,71,218,71,71,123,71,118,12, +71,12,12,12,12,12,12,12,12,8,12,12,12,12,12,12,71,71,71,118, +71,118,71,71,118,12,71,71,71,71,99,218,123,71,218,71,218,71,99,99, +99,218,218,71,218,218,99,58,58,58,58,218,99,218,218,99,58,99,78,58, +58,99,99,99,58,58,78,246,246,78,78,78,58,99,58,58,99,58,99,71, +11,71,12,23,118,118,118,23,112,30,103,208,208,65,242,112,118,23,23,118, +118,118,49,112,23,112,11,112,112,112,118,49,49,49,49,112,23,23,112,244, +244,22,22,22,242,112,49,223,223,66,223,49,223,49,223,49,12,71,71,99, +99,58,212,212,246,58,78,78,58,58,99,99,99,58,78,78,78,78,58,58, +99,99,99,58,58,58,58,58,99,218,71,218,99,99,218,58,99,99,71,218, +71,71,218,99,71,99,123,71,118,118,123,71,71,123,71,71,12,12,118,12, +12,12,12,12,12,12,71,12,71,8,12,92,12,92,71,12,118,118,12,12, +118,71,71,12,71,71,118,12,12,71,118,218,71,71,71,12,71,12,218,218, +99,99,218,218,71,71,71,218,99,99,99,99,71,71,218,71,99,58,58,58, +58,58,99,11,99,99,99,58,246,78,246,78,58,99,99,99,58,58,99,99, +99,11,71,112,112,118,118,92,118,23,118,112,30,237,103,65,65,22,30,54, +244,244,23,112,244,112,244,112,244,23,244,23,112,62,244,244,30,242,22,242, +22,30,23,49,49,19,82,223,223,49,49,49,223,49,12,11,11,218,99,58, +58,78,78,78,246,78,78,99,99,58,99,58,58,78,78,78,58,99,218,218, +71,99,99,99,58,99,58,99,71,123,71,218,99,99,218,99,218,71,12,71, +71,218,71,71,218,71,71,71,71,71,12,71,71,71,118,12,12,12,71,71, +12,12,12,12,118,12,12,92,12,8,12,12,71,12,12,12,12,12,71,12, +118,12,12,12,118,12,71,12,12,71,71,71,71,123,71,12,12,71,71,218, +218,218,11,71,123,71,71,218,71,99,99,58,99,99,71,218,218,99,218,58, +58,58,58,99,218,71,99,218,58,58,58,246,212,58,58,99,99,58,99,58, +58,58,58,218,71,71,112,71,118,118,49,23,118,118,49,112,112,30,237,22, +22,22,103,22,22,22,22,22,30,242,22,22,22,103,22,22,30,112,112,23, +49,49,49,82,223,66,49,49,49,49,223,12,118,71,218,99,99,58,99,58, +78,246,78,246,58,58,99,99,218,218,99,99,99,58,58,58,99,218,71,218, +99,99,58,58,58,99,218,123,71,71,218,218,99,99,99,123,71,71,71,92, +71,71,218,218,71,12,12,12,118,71,12,118,71,71,71,12,12,12,12,12, +12,12,118,118,12,12,12,12,12,8,92,92,92,12,12,12,12,12,12,12, +92,12,12,12,71,12,118,12,12,12,12,12,71,71,71,12,12,71,118,71, +71,123,71,71,71,118,71,71,71,123,71,218,218,99,218,71,12,71,71,218, +218,58,58,99,58,71,71,218,218,218,99,58,58,58,58,58,99,99,99,218, +218,99,58,58,99,99,99,11,11,11,23,112,118,112,49,118,118,118,23,118, +49,118,23,112,112,112,112,244,112,112,118,112,118,49,49,223,49,223,223,49, +223,223,49,49,223,49,223,223,118,118,71,11,218,99,218,99,218,78,58,58, +58,58,58,218,218,218,218,218,58,99,58,58,58,58,218,99,71,71,123,71, +218,99,58,99,99,71,71,12,12,71,71,71,218,218,218,71,118,71,71,12, +123,71,12,71,71,12,12,12,118,71,12,12,12,118,118,12,71,118,12,118, +12,12,12,12,12,92,12,12,92,8,92,92,12,12,92,12,92,12,12,12, +12,12,118,12,12,12,12,12,12,12,118,12,12,71,118,71,12,12,71,118, +71,71,71,123,218,118,12,71,71,71,71,99,99,218,218,71,71,71,71,71, +99,218,99,58,99,218,218,71,71,71,218,71,58,99,58,58,99,58,218,99, +99,218,99,99,58,58,58,99,58,99,218,11,71,112,11,112,118,23,118,23, +49,118,118,92,49,92,49,92,49,92,49,223,223,49,223,49,49,49,49,82, +49,49,49,223,118,118,71,71,11,71,99,218,218,99,58,58,58,58,58,58, +58,218,218,218,71,218,218,99,99,99,99,58,218,218,71,123,71,71,218,11, +99,99,218,218,71,71,12,71,12,218,218,218,71,218,118,12,71,118,71,71, +71,71,71,71,118,71,12,12,12,71,12,12,12,12,12,12,12,49,12,12, +12,92,12,49,12,92,12,12,92,8,92,92,92,92,92,12,92,12,12,92, +12,92,12,92,12,71,71,12,12,12,12,71,12,118,71,118,71,118,12,12, +12,12,71,71,218,71,71,118,118,12,12,118,71,218,71,218,123,12,12,12, +12,71,71,99,99,99,218,71,71,71,71,123,71,218,218,58,99,99,58,218, +99,218,218,11,99,218,99,218,218,58,58,58,99,218,71,11,71,71,118,11, +112,71,112,118,112,12,118,118,118,118,118,118,118,118,118,118,223,223,49,49, +118,118,118,71,71,71,218,71,218,71,99,99,99,218,58,58,58,218,218,218, +218,71,71,218,123,71,218,99,58,218,218,99,71,118,12,71,71,71,218,218, +218,99,71,118,12,12,12,71,71,123,71,71,71,12,118,12,92,71,118,71, +12,12,71,12,12,92,12,12,12,118,12,12,12,12,12,92,12,12,12,92, +71,92,12,92,92,92,92,92,12,8,92,92,92,92,92,92,92,92,92,12, +92,12,92,12,92,92,12,118,92,12,12,92,92,12,12,12,12,12,12,12, +12,12,71,118,12,118,71,71,12,12,12,12,118,71,218,71,218,71,118,12, +12,71,12,71,218,71,99,218,123,71,71,12,71,118,71,71,99,218,218,99, +218,99,218,218,218,71,123,71,218,218,218,218,99,99,99,58,99,99,99,218, +99,71,71,71,11,71,11,11,11,11,11,11,11,11,71,118,12,118,218,218, +71,218,71,71,218,71,99,71,99,99,99,58,218,99,218,218,71,71,71,71, +71,71,123,71,11,99,99,99,218,218,71,71,12,12,12,71,123,218,71,218, +71,118,71,12,118,12,12,71,71,218,118,12,12,12,92,12,71,118,71,71, +12,71,92,12,92,12,12,12,118,12,12,92,92,12,92,12,92,92,92,92, +92,92,92,92,12,92,92,92,92,8,92,92,92,12,92,92,92,92,92,92, +92,92,92,12,92,92,12,12,92,92,92,12,92,92,12,12,118,12,12,92, +92,12,12,12,71,71,71,118,12,118,12,12,12,71,12,71,71,71,71,12, +12,12,118,12,12,118,218,71,71,71,12,71,71,71,12,12,71,71,71,11, +218,99,218,218,218,218,71,71,71,71,71,71,71,71,218,218,218,218,99,218, +218,218,99,218,99,218,218,218,218,218,218,218,218,99,218,11,218,71,71,71, +71,123,71,123,71,218,99,218,218,11,218,99,71,71,71,71,71,71,71,92, +71,71,71,123,71,218,71,71,71,118,12,12,12,12,71,71,71,218,71,71, +12,12,12,12,12,12,12,71,71,71,12,12,12,12,12,12,12,12,118,12, +12,92,92,92,12,92,12,71,12,92,92,12,92,92,92,92,92,12,92,92, +92,92,92,92,92,92,92,92,92,8,92,19,92,92,92,92,92,223,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,12,118,12,12, +12,92,92,12,92,12,12,12,71,12,49,12,92,92,12,12,71,12,12,12, +12,71,12,12,12,12,71,12,71,71,218,218,71,118,12,12,12,71,12,12, +71,123,71,71,99,71,71,123,71,123,71,123,71,71,71,71,71,71,71,71, +71,218,218,218,71,71,218,71,218,71,218,71,71,123,71,123,71,123,71,123, +218,71,218,218,218,218,71,71,71,71,71,12,12,12,12,12,12,12,71,71, +71,123,218,218,71,71,12,12,12,71,12,12,12,12,71,71,71,12,118,12, +12,92,12,12,12,12,12,12,71,12,92,12,92,12,12,118,12,12,12,92, +92,92,92,92,92,12,92,92,12,92,92,92,92,19,12,92,92,92,92,92, +12,92,92,92,92,92,92,92,92,8,19,108,19,108,12,19,92,92,92,92, +92,92,92,92,92,19,92,92,92,92,92,92,92,92,92,92,92,92,12,92, +92,92,92,92,92,92,12,12,12,12,71,12,92,92,92,92,12,92,118,12, +12,12,12,12,92,12,12,12,71,12,71,71,71,12,12,12,12,12,12,92, +112,118,71,12,71,71,71,218,71,71,71,71,71,71,12,12,12,12,12,12, +12,118,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, +71,71,71,71,71,71,71,71,118,71,12,71,12,12,12,12,12,71,71,123, +71,71,71,92,12,12,12,12,92,92,71,12,12,12,12,71,12,12,92,12, +92,92,12,118,12,12,118,12,12,92,92,92,92,12,12,12,12,92,92,92, +92,12,92,12,92,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,19,19,108,92,8,92,92,19,92,108,92,19,92,92,92, +92,108,92,92,92,12,92,92,12,92,92,92,92,92,92,92,92,92,92,12, +12,92,92,92,92,223,12,92,12,12,12,12,12,92,92,12,92,12,12,12, +12,12,12,12,49,12,92,92,92,92,12,12,71,12,12,12,12,12,12,12, +92,92,118,92,12,12,118,12,12,12,12,12,12,71,12,12,12,12,12,12, +12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, +12,12,118,118,12,118,12,12,12,12,12,12,12,12,12,12,12,12,71,12, +12,12,71,92,12,92,92,49,12,12,12,12,118,12,12,118,92,12,92,92, +12,12,12,12,123,12,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,92,92,19,92,92,108, +92,19,92,108,108,92,108,92,108,8,19,108,19,92,19,108,108,108,92,19, +92,92,19,92,108,108,92,108,108,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,12,12,12,12,12,12,92,92,92,92,92,92,12,12,12,12,12,118,12, +12,12,12,92,12,12,12,12,71,12,12,12,12,71,71,12,12,71,118,118, +12,12,12,12,12,118,12,12,12,92,12,12,12,12,12,71,12,12,118,12, +12,71,12,12,12,12,12,92,118,118,12,12,12,12,71,12,12,12,49,12, +92,12,92,92,92,12,92,12,12,12,12,12,92,92,92,92,92,92,92,92, +12,12,71,92,92,92,12,92,223,92,92,92,12,92,92,92,92,92,12,19, +92,92,92,92,92,92,108,92,108,19,92,108,108,108,92,92,19,108,92,108, +19,92,19,92,108,92,108,19,19,8,19,108,19,108,108,19,92,19,108,19, +19,108,108,19,19,92,108,92,92,108,19,12,108,108,92,19,108,108,92,19, +92,92,92,92,92,92,108,19,92,92,92,92,12,92,92,92,92,92,92,92, +92,92,92,12,12,118,123,92,12,12,92,92,92,92,92,92,12,12,12,12, +12,92,12,12,92,12,92,92,92,92,92,92,12,12,12,12,12,12,12,71, +71,12,12,12,12,12,12,12,71,12,12,12,12,12,12,92,12,12,92,12, +92,12,12,49,12,92,12,12,12,12,12,71,12,12,12,12,92,12,92,12, +92,92,92,92,92,12,12,12,12,92,12,12,92,92,92,92,92,92,12,12, +12,92,92,92,92,19,108,92,92,92,92,92,92,92,92,19,92,108,108,92, +92,92,92,19,108,92,19,108,92,108,108,92,19,92,108,19,108,92,108,92, +19,108,108,92,108,108,19,92,108,8,19,19,19,19,19,108,19,19,108,92, +19,19,108,92,19,19,108,19,108,92,108,19,92,19,92,92,92,19,92,92, +92,92,92,92,92,92,19,108,92,19,19,92,92,92,92,92,92,92,223,92, +223,92,92,92,92,92,92,92,92,92,92,92,92,223,92,92,92,12,92,12, +12,12,12,12,92,12,12,92,12,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,92,49,92,12,92,92,12,12,92,12,92,12,92,12,12,92,12, +12,12,12,12,12,12,12,92,92,92,12,92,92,92,92,92,92,92,92,92, +92,92,12,12,12,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,19,92,92,108,12,92,92,92,12,19,92,92,108,92,19,19,92, +92,92,92,92,108,19,92,19,19,92,92,108,108,92,108,92,19,19,19,108, +19,19,19,19,19,19,108,19,19,8,19,53,19,53,19,53,19,53,19,108, +19,108,19,108,108,108,19,108,19,108,19,108,108,108,108,19,108,19,108,19, +19,92,108,19,19,12,108,92,108,92,108,19,108,92,92,92,92,92,92,19, +92,19,108,92,19,92,92,92,92,92,92,92,92,92,92,92,108,108,19,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,92,92,92,12,92,19,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,108,19,92,92,223,92,92,92,92,92,92, +19,108,108,108,108,19,92,92,92,92,108,108,108,108,108,92,108,92,108,19, +92,19,108,108,19,108,108,108,108,108,19,19,19,19,19,19,108,108,53,19, +108,19,108,53,19,53,19,53,19,8,19,19,19,19,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,108,19,108,19, +19,19,19,19,108,19,108,19,108,19,108,19,19,19,19,108,19,92,92,92, +19,19,108,19,108,19,19,92,92,92,92,92,92,92,92,19,19,108,19,108, +19,92,19,92,92,92,92,92,92,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,19,19,19,92,19,19,92,19,19,108,92,92,92,19,92,92,92, +92,92,92,92,92,19,19,19,19,108,19,108,92,92,92,92,92,92,19,19, +92,19,223,19,108,19,108,92,19,19,19,19,19,19,108,19,108,19,108,19, +19,19,19,19,19,19,19,19,19,108,19,108,19,108,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,8}; diff --git a/plug-ins/Makefile.am b/plug-ins/Makefile.am index cb7bdadfa3..c917e28c7d 100644 --- a/plug-ins/Makefile.am +++ b/plug-ins/Makefile.am @@ -8,9 +8,10 @@ SUBDIRS = \ Anamorphose \ CentralReflection \ Curtain \ - Encript_Decript \ + Encrypt_Decrypt \ Julia \ Mandelbrot \ + DigitalSignature \ dbbrowser \ fuse \ gflare \ @@ -121,6 +122,7 @@ SUBDIRS = \ sobel \ sparkle \ spread \ + stegano \ stereogram \ sunras \ tga \ diff --git a/plug-ins/Mandelbrot/Mandelbrot.c b/plug-ins/Mandelbrot/Mandelbrot.c index cab87087a8..d143fb5194 100644 --- a/plug-ins/Mandelbrot/Mandelbrot.c +++ b/plug-ins/Mandelbrot/Mandelbrot.c @@ -1497,7 +1497,7 @@ mandelbrot_logo_dialog() xpreview = gtk_preview_new (GTK_PREVIEW_COLOR); gtk_preview_size (GTK_PREVIEW (xpreview), logo_width, logo_height); temp = g_malloc((logo_width+10)*3); - datapointer=header_data; + datapointer=header_data+logo_width*logo_height-1; for (y = 0; y < logo_height; y++){ temp2=temp; for (x = 0; x< logo_width; x++) { diff --git a/plug-ins/Mandelbrot/logo.h b/plug-ins/Mandelbrot/logo.h index 871a318a06..cb94ec445f 100644 --- a/plug-ins/Mandelbrot/logo.h +++ b/plug-ins/Mandelbrot/logo.h @@ -1,4 +1,4 @@ -/* GIMP header image file format (RGB-only): //logo.h */ +/* GIMP header image file format (Indexed): //logo.h */ static unsigned int logo_width = 200; static unsigned int logo_height = 72; @@ -6,9 +6,783 @@ static unsigned int logo_height = 72; /* Call this macro repeatedly. After each use, the pixel data can be extracted */ #define HEADER_PIXEL(data,pixel) \ - pixel[0] = (((data[0] - 33) << 2) | ((data[1] - 33) >> 4)); \ - pixel[1] = ((((data[1] - 33) & 0xF) << 4) | ((data[2] - 33) >> 2)); \ - pixel[2] = ((((data[2] - 33) & 0x3) << 6) | ((data[3] - 33))); \ - data += 4; + pixel[0] = palette_data[data[0]*3+2]; \ + pixel[1] = palette_data[data[0]*3+1]; \ + pixel[2] = palette_data[data[0]*3+0]; \ + data--; -static char *header_data = ")1!X)1!X)A!Y)Q!\\)Q!\\)A!Z)A!Z)Q!])A!Z)A!Z)1!X)Q!\\*!!^)Q!])Q!]*1\"!*1\"!*1\"\"*1\"!*1\"!*1\"!*1\"!*Q\"%*!!_*!!_*!!_*1\"\"*!!^*A\"$+!\"(*!!_*Q\"%*1\"\"*A\"$*Q\"%*A\"#*A\"#*1\"\"*!!_*!!_*A\"$*Q\"&+A\",*Q\"%*A\"$*A\"$*Q\"$+!!\\*A\"#+1\"+*A\"$*Q\"%+1\"++!\")+Q\".+A\",+Q\".+1\"+*Q\"%*A\"$*A\"$*A\"$+!\"(*1!`*A\"$+A\"-+A\"-+A\",,!\"1,!\"1+A\",,!\"2+1\"++Q\"'+A\",+A\"-+A\",*A\"$*A\"$*A\"$+!\"(+!\"(+!\"(+1\"+*Q\"'+!\"(+!\"(+A\",,!\"),1\"2+A\",,!\"2+Q\"0,!\"1,!\"1,!\"1+A\"-+A\",,!\"1+A\"-,1\"2,!\"2+A\",+A\".+1\"++A\"-+Q\".+Q\"0+A\"-+Q\".+Q\".,!\"1,!\")+A\"+*Q\"'+A\"-+A\"-+A\",,!\"1,Q\"*+Q\".+A\".+A\"-+Q\".+Q\".+1\"++1\"+*Q\"%+!\"(*A\"$*A\"$*A\"$*A\"$*A\"$*A\"$+Q\".+A\",+Q\".,1\"4+Q\".+1\"++1\"*+1\")*Q\"&*!!_*A\"$*1\"!*A\"$*A\"$,!\"(+Q\".+1\"++!\"(*Q\"'*Q\"'*A\"$*1\"\"*1!`*!!_*A\"$*A\"$*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*A\"#*Q\"%)A!Z*A\"#*!!_*1\"!*Q\"%*Q\"%*1\"!+!\"(*!!_*1\"\")Q!]*A\"#)Q!\\*!!^*!!^*!!_)Q!]*!!^*1\"!*!!^)Q!\\)Q!\\*!!^*!!^*!!^)Q!])A!Z*!!^)1!X)A!Y)A!Z)1!W)1!X*!!^*!!^)Q!\\)Q!\\*1!`)Q!\\*1\"\")Q!]*1\"\"*A\"#*!!^*1\"\"*1\"!*1!`)Q!])Q!]*!!^*!!_*Q\"&*A\"\"*A\"\"*Q\"%*1\"\"*Q\"&*1!`*A\"#*A\"#*A\"$+!\"'*Q\"%*Q\"%*A\"#*A\"$*Q\"%*A\"#*A\"#*A\"#*Q\"&*Q\"'+1\")+Q\".+!\"(+1\"+*A\"$*A\"$*A\"$*A\"$*Q\"%*Q\"'+!\")+1\"++Q\".,!\"1+A\"-,1\"0+!\"(,!\"&+!\"$*A\"$*Q\"&*Q\"&+!\")+A\"-+A\",+Q\".+Q\"0,1\"3,!\"2+1\"+,!\"1+A\"+,!\".,A\"/+A\"++A\"-+Q\".+Q\"0+Q\".*Q\"'+1\")+1\"*+A\".+A\"-,!\"2,A\"3+Q\"-,1\"3,A\"1+A\"-,1\"3,1\"2,1\"0,!\"2,!\"2+Q\".,!\"1+A\".+A\"-,!\"1+A\"-+A\"-,!\"1+A\"-,!\"1+Q\"0,!\"0+Q\".+A\",+Q\"/+Q\"0+A\",,A\"0+A\"++A\"-+1\"+,!\"1,!\"1+A\"-,1\"4+1\"+,!\"1,!\"1,A\"1,!\"1,1\"4,1\"/,!\"1+A\",+Q\"/+A\"-*Q\"'*Q\"'*Q\"',1\"%,!\"1,!\"-,A\"*,!\"/,!\"1+Q\".+Q\".,!\"1+1\"*+1\"**Q\"'*A\"#*A\"$*Q\"%+1\"$+!\"(+1\"++A\"-+Q\".+A\"-+A\",+!\"(*A\"$*A\"$*A\"$*A\"$*Q\"%*Q\"%*Q\"%+1\"+*Q\"&+!\"(*Q\"%+!\"(*!!_*A\"$*A\"#*1!`*Q\"%*A\"\"*!!`*A\"\"*A\"#*A\"#*!!^*Q\"$*1\"!*A\"\"*A\"$*!!^*A\"$*1\"!*A\"\")Q!]*1\"!*!!^*!!_*!!^)Q!]*1!`)Q!\\)Q!\\)Q!]*!!`)1!X*!!^*!!^)A!Z*1\"!*A\"\"*!!^*1\"!)Q!]*1!`*Q\"%*!!^*A\"\"*!!^*1\"\"+!\"'*1\"\"*A\"#*1\"!*A\"$*A\"$*Q\"%*1!`*Q\"%*A\"#*A\"#*1\"\"*A\"$+A\"-+!\"(+!\"(*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%+1\"**Q\"%+A\"-+Q\"/,A\"/+Q\"++A\",*Q\"&*A\"$*A\"$*A\"$+!\")+Q\"/,1\"4+A\"-,!\"1,!\"1+A\".,!\"1,!\"&+1\"++A\",+!\"(+A\"-+A\",,1\"3,1\"4,1\"4-A\"1-A\"5-!\"5,1\"4+Q\"/+Q\"/+A\"-,1\"1,A\",+A\"-+A\"-+Q\"0+Q\"0,!\"1,1\"4.1\"5,A\"4,1\"4,1\"4.1\"5.1\"5-1\"5.Q\"6-Q\"5-A\"5-A\"5.1\"5,Q\"5-Q\"5,1\"4,1\"4.!\"0,1\"4,1\"4,Q\"3-1\"2,1\"4,1\"4,!\"1.!\"4,!\"2-1\".,1\"3-1\"1,Q\"4+Q\"0,!\"2,1\"3,!\"0,!\"1+A\"-,!\"2+A\",+A\",,!\"2+A\",,!\"1,!\"1,!\"1.!\"5.1\"5,A\"5.A\"6-Q\"5.1\"5-A\"1,A\"4,1\"4,!\"0+Q\".+1\"++Q\"$,!\"&+!\"(+A\"-+A\",,1\"4,1\"4,1\"4,1\"4,1\"4+Q\"/+Q\"/+!\")*Q\"&+!\"'+!\"(+!\"(+A\",+Q\".+Q\"0,!\"2+A\",+A\"-+1\"+*A\"$*A\"$*Q\"%*Q\"%*Q\"%+1\"*+A\",+A\",+A\"-+!\"'+!\"'*Q\"%+1\")*Q\"%*Q\"%*Q\"%+1\")*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*1\"!*A\"$*Q\"%*!!^+!\"'*1\"!*1!`*1!`+!\"'*A\"#*1\"!*1!`*Q\"$)Q!\\)Q!\\)Q!]*!!^*1!`*1\"!*1\"!*A\"$*1!`*A\"$*1\"!*A\"\"*!!`*A\"$*1!`*A\"$*Q\"%*A\"$*A\"$*A\"\"*A\"\"*Q\"'*A\"$*A\"$*A\"$*Q\"%*A\"$*Q\"%*Q\"%*A\"#*Q\"&*Q\"&+!\"(+1\"*+A\"-+!\"'*Q\"%*Q\"%*Q\"%*Q\"%+Q\"/+!\"(,1\"3+A\",,!\"2+A\"-+Q\".+1\"**Q\"&*Q\"&,!\"1,!\"2+Q\"/,A\"3-!\"5-A\"5-!\"4+A\"-+A\".+1\"*+A\",+A\",+Q\"/,!\"1-!\"1,1\"3.Q\"6.Q\"6.!\"6-!\"6,A\"5,1\"2+Q\"0+Q\"/,!\"1,!\"1,!\"2,1\"4,!\".-!\"4-A\"6-A\"8.Q\"8/1\"9-A\"8.Q\"7.Q\"7.A\"7.!\"7-1\"5.A\"6-1\"7-A\"8-Q\"6,A\"5-1\"5,Q\"5.!\"5-Q\"5,1\"4.1\"8-1\"5.Q\"6-Q\"9.Q\"6-1\"5/1\"8-A\"6.!\"6-A\"6.A\"7-Q\"7-1\"8.Q\"7/1\"9/A\"8-Q\"6-A\"6-!\"4-!\"4.!\"5-1\"6-!\"4,1\"4,1\"3,1\"4+Q\".,1\"4,1\"4,Q\"5,A\"4-A\"9-A\"8.1\"8-Q\"9-Q\"5.1\"7.Q\"8.A\"5,1\"3,A\"3+Q\".,1\"3,A\"&+1\"*-!\",,1\"3,1\"4.Q\"1/!\"8-1\"4-1\"5,1\"4,!\"0+Q\"/+!\"(+!\"(+A\",+1\")+A\"-+Q\".,1\"3+Q\"0,1\"3+1\"*+Q\"/+!\"(*Q\"%*Q\"&+!\"'+A\",+A\",+Q\"0+A\"++A\"-*Q\"%+!\"'*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"'+!\"'*Q\"%*Q\"%*Q\"%*Q\"%*A\"$*Q\"%*A\"$*Q\"%*Q\"%*1\"!*A\"#*A\"$*A\"#*!!`*A\"#*!!`*Q\"%*A\"$*1\"\"*Q\"%*!!`*A\"#*A\"#*1!`*A\"#*1\"!*A\"#*Q\"&*1\"!*A\"$*Q\"%*Q\"&*A\"$*Q\"%*Q\"%+!\"(*Q\"%*Q\"%*Q\"%*Q\"%*A\"$*Q\"%*Q\"%*Q\"%*Q\"%+Q\".+!\"'+Q\".+A\",+1\"++!\"'+!\"(+1\"++1\"*+Q\"/+Q\"/+Q\".,!\"1,A\"5,1\"3+A\",,1\"2+!\"(+1\"*+A\"-+Q\"-,1\"2,Q\"4/Q\"7-1\"5-1\"5,1\"4,1\"3+A\"-,!\"+,A\".+Q\"/,!\"0,A\"5.A\"6.A\":.!\"<.!\";.1\"8.Q\"7.!\"7,1\"4,!\"0,!\"0,!\"1,!\"1.A\"6.A\"/-1\"8.A\"<.Q\".!\";.Q\"?.Q\"?.Q\"?/!\"7/!\"7,Q\"6-A\"7.1\"9-Q\"5.!\"8-1\"8/A\":.Q\":-Q\"8/A\"8-1\"8.1\"8/1\"9.1\":.!\":.1\"9.A\":.Q\":.1\"8.A\"=.A\";.A\":/A\">.A\">-Q\":.Q\"?.1\"=.Q\"?/1\">/Q\"=/A\">.Q\"<.Q\"<0!\"=/1\">.1\"9.A\"6.A\"6-Q\"6/A\"6.!\"5-!\"5.A\"6-Q\"5-Q\"5.!\"5.A\"6.1\"8.A\"9/!\"=.Q\"?.!\"<.!\"<.A\"6.A\"6,A\"5,!\"1,!\"1+A\",+A\"-,1\"4-!\"7-!\"7.1\"8.A\"7.1\"6.A\"6,A\"5,1\"2+A\",+A\"-+A\",+!\"(,1\"4,Q\"5.1\"5,A\"5,!\"1,!\"1,!\"1+1\"*+A\",+!\"',A\"(,A\"(+Q\"/+Q\"/,1\"2+Q\"/+A\",+1\"**Q\"%*Q\"%+!\"(+!\"(+A\"-+A\",+!\")+A\"+*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"'*A\"#*Q\"'*1\"!*Q\"%*A\"$*Q\"%*Q\"%*A\"$*A\"#*1\"!*1\"!*A\"$*A\"$*A\"%*A\"$*A\"$*A\"$*Q\"&+1\")*A\"$+1\"**A\"$*Q\"%+!\"(*Q\"&+1\"++A\"-+!\"'+A\"-+A\"-+!\"'+Q\"/+1\"++A\"-+Q\"0+Q\"/,!\"1,!\"1+A\"-,!\"2+Q\".,1\".+Q\"*+Q\"0+A\"-,A\"5,A\"5.A\"6,A\"5+A\",,Q\"*+1\"*+Q\"/+Q\"0+Q\"/.A\"6.A\":.1\":.1\"8-Q\"6-A\"5,!\"2+A\",,!\"1,1\"4-Q\"5.!\"7.A\":/Q\"=.Q\"?.Q\"?.Q\";-Q\"7.!\"5,1\"4,1\"4,1\"4,Q\"5/1\"6.1\"9.A\":.Q\"?/A\"C.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.!\"9-1\"5.Q\"9.Q\":.!\"7.A\"=/A\":.1\"=/A\":/!\":.1\";.!\";.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/A\"C.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?-A\"9/A\":-A\"9-A\"9,Q\"6.!\"7,Q\"5,1\"4-1\"5-Q\"8.1\"8.Q\"?.Q\"?.Q\"?.Q\"?/Q\"=-A\"8-Q\"5,A\"5,1\"3+Q\"0,1\"4-Q\"5-A\"5.1\":.1\"=.A\":.A\":.1\"8-1\"5,1\"4+Q\"/-!\"0+A\",,1\"3.!\"5-A\"5-A\"5.A\"6-Q\"4+Q\"0+A\"-+Q\".,!\"0,!\"0+Q\"0,!\"1,!\"1-!\".,1\"3+A\"-+Q\"0+Q\"/+!\"'+Q\".+Q\"0+A\"-,!\"1,A\"(+A\",+1\")+Q\"/+!\")+!\"'+1\"*+!\"(*Q\"%+!\")+!\"(+!\"'*Q\"%*Q\"%*Q\"%*Q\"&+!\"(*Q\"%+!\"'+!\"(*A\"$*A\"$*A\"$*Q\"%*Q\"&+!\"'+1\"*+1\"++Q\".+1\"++Q\".+Q\".+A\"-,!\",,!\"(+Q\".+A\"-+A\"-+Q\".+A\",+A\",+1\")+Q\".,!\"2+Q\".,!\"1,!\"1+Q\".+A\"-+1\"),A\"3,!\"-,Q\"5-Q\"5.!\"6.Q\"6,A\"5,A\"5,!\"+,Q\"0,!\"1-!\"4.1\"6/Q\"9.1\"=.Q\"?/1\"9-Q\"8,A\"5,1\"4,1\"3,Q\"4.!\"5-A\"8/!\">.A\">.Q\"?.Q\"?.Q\"?/!\">,Q\"5,Q\"5.!\"5-Q\"6.!\"7.1\"=.A\"?/1\"@/A\"D/Q\"E0!\"G/1\"C/A\"D.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/!\"?.Q\"=/!\">/1\">/1\"@/!\"@/1\"B/1\"B/1\"C/Q\"F/A\"D/Q\"E/Q\"E/Q\"E01\"I01\"I0A\"K/Q\"F/1\"C/Q\"F/1\"B/1\"B/1\"B/Q\"F/1\"B/1\"A/!\"A/!\"@/1\"B/1\"B/!\"@.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/1\"B/Q\"E/1\"B/A\"D01\"I0A\"J01\"I/Q\"E/Q\"E/!\"A.Q\"@/1\"?/1\"8/!\"8-1\"7-A\"8.A\"9.1\"=.A\">.Q\"?.Q\"?/A\"D/1\"B/A\"@.1\"=/1\"9.1\"6-A\"5-!\"5,A\"4.Q\"7.!\":.Q\"?.Q\"?.Q\"?.A\"=.A\"7-!\"5,Q\"2,1\"3+A\"-,1\"4-1\"7/!\"8.Q\"<.1\"9.1\"6.A\"5,!\"1,!\"1,!\"1+1\"+,!\"2,A\"5,Q\"5,Q\"5,Q\"3+Q\"0,!\"1+!\")+A\"-+Q\"-,!\"0+Q\"/+A\",,!\"1+A\",+Q\".+!\"(,1\"+,1\".+!\")+A\",+1\")+A\",+!\"(+A\"*+A\",+!\"'+!\"(*Q\"%*Q\"%*Q\"%*Q\"%+1\"*+1\"++!\")+A\",+A\"-,Q\"++1\"++A\",,A\"(+A\"-+1\"*+1\"++A\"-+A\"-,!\"1+A\",+A\"-+A\"-+Q\"0+1\"*,!\"2,1\"3,A\"5,A\"5.1\"6,1\"5,1\"3,A\"+,!\".,!\"0,A\"5,Q\"5.1\"8.!\"6/!\"9-1\"5-!\"5,A\"5,A\"5,1\"4.1\"6/!\":.1\"=.Q\"?.Q\"?.1\"=-A\":.!\"5,Q\"5.1\"6-A\"5/Q\":.1\"=/Q\"F0!\"G/A\"D.Q\"?.Q\"?.1\"=.Q\"9/A\"6.1\"9-Q\";.!\".A\">.Q\"?.Q\"?/A\"D0!\"G0!\"G0A\"J1!\"N0Q\"M0Q\"M0Q\"M0Q\"M0Q\"M01\"I0Q\"M0Q\"M/Q\"F01\"I0Q\"M01\"J0Q\"M0Q\"M0Q\"M0Q\"M0Q\"M01\"J0Q\"M0Q\"L0A\"K01\"J0Q\"M0Q\"M0Q\"L0!\"G0!\"G0!\"G/A\"C/A\"D/A\"D/1\"B/1\"A/1\"C0!\"G/Q\"F0!\"G/Q\"F/Q\"F0Q\"M0Q\"M1!\"N0Q\"M0!\"G0!\"G/1\"B.Q\"?.1\"-Q\";-Q\":.Q\"?/!\"@/A\"C01\"J0A\"K0!\"G/Q\"F.1\"=/1\";-Q\";.Q\"8-!\"6.1\"8/Q\"<.Q\"?.Q\"?.Q\"?.Q\"?/A\"<-!\"7.1\"6,1\"4,1\"4.!\"5-1\"8.Q\"9/!\"@.1\"=-Q\";.Q\"8,!\"2,!\"2,!\"0,!\"0.1\"6-1\"5.1\"9/1\"6,Q\"5,A\"5-!\".+Q\"/,A\"-,!\".,!\"0,!\"2+A\"-,!\"0,!\"0+1\"+,!\"2+A\",+A\",+A\"-+A\",,!\"*+Q\"(+Q\"%,!\"+,A\"/+!\"'+A\",+!\")*Q\"&+1\"**Q\"'+A\",+A\",+A\",+A\",+A\"++A\"-+Q\"/+A\",+Q\".+A\",,1\"2,!\"1+Q\".,!\"1,!\"0,!\"1+A\"-+A\"-,1\"4,1\"/-1\"5/Q\"6-Q\"5,A\"5,A\"5,1\"4,A\"3,1\"4.A\"6.A\"9/1\">.Q\"?.A\">-Q\"9-Q\"5-1\"5-1\"5-Q\"6.A\"9/!\"?/!\"A/Q\"F.Q\"?.Q\"?.!\"7.!\"7.1\"8.Q\":.1\"/Q\"F0A\"K1!\"N0Q\"M0A\"K/1\"A.Q\"?.Q\"?.Q\"?/!\"@/Q\"F01\"J1!\"N2A\"X2!\"V1!\"O11\"P0!\"H01\"I0!\"G/1\"B/Q\"F01\"J0A\"L1!\"N1Q\"S2Q\"U3Q\"T2!\"V3A\"R31\"X2A\"T1Q\"T11\"P1!\"N0Q\"M0Q\"M0!\"H0Q\"L0Q\"L1!\"L1!\"K0A\"I/1\"8.1\"-/A\"811\">11\">11\"=11\">11\">11\">11\">11\">1A\"=1A\"A11\"A1A\"B0Q\"A0A\"E1A\"I1A\"P11\"P2!\"T2A\"Y3A\"U2A\"Z2Q\"Z3!\"U2Q\"Y2!\"V1A\"R0Q\"M0Q\"L0Q\"L01\"I0A\"J0Q\"L11\"Q1A\"R21\"W2Q\"U2A\"W1A\"R1!\"M0A\"J/Q\"F/!\"@/!\"@.Q\"?/1\"C0!\"G0Q\"M1A\"R1!\"O1!\"N01\"J/1\"C.A\">/!\">.Q\"<.Q\"?/!\"@0!\"H0A\"J0Q\"M01\"I/1\"C/1\">.!\":.Q\"6-A\"9-Q\":/!\"@/!\"@/!\"@.A\">/!\"?0!\":-Q\"6-Q\"5.Q\"7-Q\"6-!\"7.1\"=.Q\";.!\"<-!\"7,1\"2,A\"4,A\"5.Q\"6,Q\"5/!\"6-!\"5,A\"5,1\"3,1\"3,Q\"2,!\"1,!\"1,!\"1+A\"++Q\"0+Q\".,!\"1+A\",+A\"-+Q\"0+A\"%+A\"-+A\"-+Q\".,!\"1,!\"1,!\"1+Q\"/,1\"4-A\"5,Q\"5.!\"5,1\"4-Q\"0,A\"5.1\"/,A\"5.!\"5.1\"6-A\"5.1\"6-!\"8/1\";.Q\"=.A\"8.Q\"9,A\"5-A\"5.1\"9/Q\"=.A\">.1\"=/!\"@/!\"@/!\"@-!\"7.Q\"8/1\";.A\">/!\"@0!\"G0Q\"M01\"J01\"I/1\"C.Q\"?.Q\"?.Q\"?/!\"@/Q\"F1A\"R11\"P1Q\"T1!\"O0A\"J/1\"B/1\"B.Q\"?/!\"@/Q\"F1A\"R21\"P2A\"Z3A\"V3Q\"U1Q\"S0Q\"M01\"J01\"J0A\"J0!\"H0Q\"M2!\"Q2!\"R21\"W4!\"Z4!\"Z2Q\"Z2A\"Z2A\"Z2A\"Y1Q\"U1!\"N0Q\"M0Q\"M1!\"K0A\"F11\"D1!\"B/!\"4/!\"0/Q\"*/Q!`.1!^-1!X-A!Z/!\"!/Q\"+/A\",/1\")/A\"*/Q\"+/1\"*/1\"*01\"*0A\").Q\".1Q\")0Q\".1Q\"/1Q\"11Q\"11Q\"20Q\":1!\":1!\">11\"D11\"H2A\"O1Q\"U3A\"U3!\"Y2A\"Z2A\"Z2A\"Z2!\"S2!\"Q11\"Q1Q\"M01\"J1A\"R1A\"R2A\"U3Q\"U2A\"Z3!\"Y3!\"X1Q\"S1A\"S01\"J/Q\"F0!\"G/A\"C/Q\"F0Q\"M1Q\"T3!\"U2Q\"V2!\"R1!\"O/Q\"E.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F0A\"K0Q\"M0Q\"M/Q\"F/!\"@.Q\"?.Q\":/1\"8/!\"@/!\"@/A\"D0A\"K/1\"B/1\"C.A\">-A\"9.!\"5-A\"9/1\";/!\"@/!\"@/!\"@/!\"?.A\"8/!\"6-1\"5-A\"5-A\"5.1\"8/!\"60!\"9.!\"5.!\"5,A\"5,A\"5.!\"5,A\"5.1\"6,A\"5,1\"2,!\"1,!\"1,!\"1+A\"-,!\"2+A\",,1\"3,1\"3,1\"3,1\"4,1\"4-!\"3.A\"/-A\"5,Q\"5-1\"6-!\"5.!\"7-Q\"8-!\"7.!\"9-1\"6.!\"6.!\"9-1\"9-A\":/1\"?.Q\"?.1\":.!\"9/A\":/1\"/!\"A/A\"E/A\"D/Q\"E/!\"@/!\"@/Q\";.A\">/1\"@01\"I0A\"K0Q\"M0Q\"M01\"I/1\"C/!\"A.Q\"?/1\"A/Q\"F1!\"N2A\"W21\"S21\"W1!\"O0Q\"L/Q\"F/A\"C/1\"B0Q\"L11\"O2A\"W3Q\"W2Q\"Y2A\"Z3!\"Y2!\"S1A\"S0Q\"M0Q\"L0Q\"L1Q\"R2!\"R31\"X31\"\\41#!3Q\"`41#\"3A\"^3!\"Y3A\"V1Q\"T1!\"O1!\"K0Q\"J11\"G0A\"<0Q\"60A\"+.A\"\".!!^-1!\\-A!Z-1!X+Q!X-1!X-1!X-A!Z.A\"!.1!].Q!_.1!`.A!^.A!].Q\"!.Q\"!.Q\"!.Q\"!.Q\"\".Q\"\".A\"\"/!\"#/!\"$/!\"&1!\"&1!\"(11\"(1Q\".1Q\"01Q\"41A\"71Q\"91!\"B1A\"J3!\"P31\"S31\"[4!#!3A\"^3!\"\\2Q\"Y1Q\"T11\"P1!\"O1Q\"S2!\"V3Q\"\\4!\"^3A\"_4!#!4!\"X31\"V2!\"S0A\"K0!\"G01\"H0!\"H0Q\"M2!\"S3!\"Y3!\"Y3A\"V1Q\"S1!\"O/1\"B/1\"B/!\"A/Q\"F01\"I11\"Q1A\"R1Q\"R1!\"M/Q\"F/1\"A/1\"?/!\"@/!\"@/!\"@0A\"K0A\"J0!\"H/1\"B/!\"A/!\">/A\";.!\";.1\"=/!\"@/!\"@/!\"@.Q\"?.1\".A\">/!\"@/!\"@.Q\";.1\"<.!\";/!\"@/!\"A0!\"G0Q\"L01\"J.Q\"?/!\"@/!\"@/!\"@/!\"@01\"J1!\"N1A\"Q1!\"N01\"H/A\"E.Q\"?.Q\"?/1\"B0A\"K1Q\"N3A\"T3!\"X31\"W1A\"R0A\"J/Q\"F0A\"K0Q\"M1A\"R2Q\"U4!\"]4A\"_4A#$3!\"]3A\"V3!\"V0Q\"M0Q\"M0Q\"M2!\"U21\"V4A\"_41#(4Q#(4Q#*4Q#%3A\"_2Q\"[3A\"V2Q\"U1A\"R0Q\"M1!\"C1!\"=01\"5/Q\"*.A\"!-Q!\\-1!X-1!X-1!X-1!X-1!X-1!X-1!X-1!X-1!U-1!X-1!X-A![/A!\\0!\"\"1A\"'0Q\"'2Q\"+3!\"+3A\",3A\"-3A\"-21\".21\"-2A\"%0A\"$01\"$/A\"$/A\"$/!\"#/Q\"$/Q\"$0A\"$1A\"%1Q\")1Q\"-1Q\"-1A\"91A\"?21\"A21\"Q3!\"V4A\"[3Q\"`4!#!2Q\"[21\"W2A\"S2A\"T3A\"V31\"W3A\"_4Q#%4Q#%4A##4!#!4!\"Y2!\"U11\"Q0A\"K0Q\"M0Q\"M3!\"Y2Q\"Y3Q\"[3!\"[21\"W1A\"R0Q\"M0!\"G/!\"@/A\"C0Q\"M1A\"R2Q\"V2A\"Y11\"P0A\"K/1\"B/!\"@/!\"@/!\"@/A\"E01\"H1!\"N01\"J/Q\"E/!\"@/!\"@/!\"@-Q\";.1\"=/!\"@/!\"A/A\"D.1\"=.1\"=.Q\";-A\"7.Q\";/A\"9.!\";/Q\"=.!\"<-Q\";.1\"7,Q\"6.Q\"9.!\"6.Q\"9.A\"9-A\"5-A\"5-1\"5,A\"5,A\"5,A\"5-Q\"5-1\"5-A\"5.!\"8.Q\"6-Q\":/!\"8/1\";.1\":.1\"=.!\";.1\"<.!\"<.A\"=.1\"=/!\"?/!\"@/!\"@/!\"@.Q\"?/!\"@/!\"@.Q\"?.Q\"?.Q\"?0!\"H0Q\"M0Q\"M/Q\"F0!\"G.Q\"?/!\"@/1\"B0!\"G0Q\"M1Q\"Q2A\"V21\"R1A\"Q0A\"J0!\"H0!\"G0Q\"M1A\"S3A\"V3A\"^31\"]3!\"Y3A\"U11\"Q0A\"J0Q\"M11\"P3!\"W4!\"X4Q#%4Q#%4Q#%3Q\"`2Q\"[2Q\"U11\"Q2!\"V3!\"X41\"Z41#%5A#*5Q#06A#-6!#)4Q#&3A\"^3Q\"\\31\"U21\"Q1!\"K01\"?01\"4.!\"+.!!`-A!Y-A!Y-1!X-1!X-1!X-1!W,A!W-1!W-A!U/!!`11\"&2!\"+41\"17Q\"79Q\"?:1\"A;Q\"H;A\"B9A\">:A\"?:!\"781\";:A\"<:Q\"?:Q\"?;Q\"C0!\"<-Q\":/1\"9-!\"7-A\"7.1\":.A\"6.!\":01\"8.1\"8.1\"8.A\"9.A\":-1\"5-Q\"9.1\"9/!\"8.!\"<-Q\";.1\"=.Q\"?/A\">/!\"<.Q\"?.A\">.1\"=/!\"@/!\"A/A\"E/1\"A.Q\"?/!\"@/!\"@/!\"@/!\"A/Q\"F1!\"N1!\"N1!\"N0Q\"L0A\"K/!\"@/Q\"F0!\"G1!\"N2!\"S2Q\"Y3Q\"U2!\"R11\"P0A\"J0Q\"M0Q\"L21\"V3Q\"W3Q\"`4Q#%3A\"_3!\"X1A\"Q1!\"N11\"O2A\"V31\"W4Q##5!#+51#-51#'41#\"3!\"Z3A\"V31\"X3A\"T41\"\\5!#$5Q#-6!#061#06A#05!#)4Q#&4!\"Z4!\"T2!\"R1A\"F11\">.!\"7.1\"&-Q\"!-A![-1!X-1!X-1!X-1!X,A!V*Q!W.1!V.Q\"!3A\"+7A\";:1\"A=1\"?:Q\";9!\"68Q\"67Q\"-5A\")5A\"%4Q\")51\"&51\"(5Q\"(51\"+5Q\"25A\"16!\"*5!\"+4Q\"*4!\"(51\"+5A\".81\"08Q\"6;Q\"A>1\"F>1\"O;A\"L9Q\"E61\";2A\",0Q\")1!\"&0!\"'.Q\")01\"*0A\".1A\"70Q\":11\"@2!\"L31\"X3Q\"_4A##4A#!41\"^2Q\"[3A\"V4Q\"`4Q#%5Q#*6A#.61#-5Q#*4Q#\"3!\"Y3!\"V1A\"Q3!\"V31\"W4A#\"4Q#%4Q#%4A##41\"\\21\"U1!\"O1!\"N0!\"G0Q\"M3A\"U2Q\"Z3Q\"`3!\"X1Q\"R0Q\"L0!\"G01\"I0A\"K1!\"N11\"Q2Q\"Q1Q\"T0Q\"M/Q\"E/!\"A/!\"@/!\"A01\"I0A\"L01\"I0!\"H/Q\"F.Q\"?.A\">/!\"@/!\"@/!\"@.A\">/!\"@/!\"@/!\"@.A\">-Q\";/A\".A\">.Q\"?.Q\"?.Q\"?.Q\"?/!\"@.1\"=.Q\"?/!\"@/1\"B0!\"G01\"J0A\"K/1\"B/!\"@/!\"@/1\"C0Q\"L1A\"Q0Q\"M1A\"R1!\"N0!\"G0A\"K01\"I1!\"N1Q\"T3A\"U3Q\"U2A\"[31\"W1Q\"T1!\"N01\"I11\"P31\"V41\"]4Q#&4Q#'41#\"3A\"\\3Q\"U1A\"R2!\"V41\"W41\"`51#.6A#06Q#)5A#,4Q#$4Q\"[3Q\"W2A\"Z4A\"\\4Q#(51#+5A#+4Q#+5Q#05Q#04Q#+41##4!\"[2Q\"R01\"G01\"<.A\"5.1\")-Q!\\-1!X-1!X-1!X-1!X-1!W,!!U,1!R/A!V3Q\"/:!\"7.A\">-A\":.1\"=.A\"=.Q\"?.Q\"?.Q\"?.A\">.A\">.Q\"?.Q\"?.Q\"?.Q\"?/Q\"E.Q\"?/!\"@/!\"@/A\"D0A\"J0Q\"L0Q\"L1!\"N0!\"G0A\"K/1\"B01\"I0Q\"M11\"P1A\"R1Q\"U1A\"S1!\"N0A\"K0A\"J1!\"O1Q\"Q31\"W4!\"`3A\"_2Q\"Z2A\"V1!\"N1!\"N2!\"V3A\"U4A#!5!#(5!#(4Q#&41\"^3A\"W3A\"V31\"W3Q\"[5!#)61#/6A#06Q#061#/5!#&3Q\"`3A\"\\3A\"_4A#'5Q#.51#-5!#&4Q#&51#,6!#05!#)41\"`3A\"U11\"N1!\"C/Q\"7/1\"%-Q!`-Q![-A![-A![-Q!\\,Q!X+Q!U,A!W0!!`8!\"71!\"K21\"W4!\"]4Q#&4Q#)4Q#%4Q#&4Q#'6!#/5Q#05!#.5A#*6!#/51#+3A\"_3!\"Z2Q\"Z4!\"^4Q#&5A#*6A#061#/5A#&3A\"[2Q\"W1A\"O21\"S3A\"V41##5!#&4Q#%4Q\"`31\"X1A\"N1!\"N1!\"N11\"P3!\"R3!\"Y2Q\"Z1Q\"U1Q\"T01\"I01\"I01\"I0Q\"M1!\"N1!\"N1!\"O01\"I0A\"L/A\"C/!\"@/Q\"E/1\"B/Q\"E01\"I/1\"C/!\"@/!\"@/!\"@/!\"@.Q\"?.Q\"?-Q\";.Q\"?-Q\";.!\";.1\"=.1\"=.!\"<.1\"=.1\"=.Q\"?.Q\"?.Q\"?/1\"B/1\"C.Q\"?/Q\"F0!\"H0A\"L0A\"L1!\"N1!\"N01\"I0A\"K0A\"L0A\"L0Q\"L1A\"R21\"S4!\"T2A\"Y11\"P1!\"N1!\"N1!\"N2Q\"U31\"Z4!#!4!#!3Q\"`3!\"Y21\"U1A\"R31\"Q4!\"\\41##4Q#$51#&5!#)4Q#%2A\"Z31\"W31\"W4!#\"5Q#*6!#.5A#*5Q#-6A#/51#'41##4A#$4Q#%6!#-51#,51#(4Q#%4Q#%4Q#-6!#051#.4!#!3Q\"S1A\"L0Q\";.1\"1.Q\"$,Q![-1!X-A![-1!Y-!!R+!!H,1!R1A\"#7A\"99Q\"8:!\"+7Q\"+3Q\"%51\"-51\"22Q\"0/Q\"#-Q!X+!!U-Q![2!\"%7A\"8BQ\"7CQ\"2AA\"1BQ\"1B1\"2B1\"2D!\"6BQ\"9B!\";A1\"A@Q\"H;A\"C6A\"92!\"'.!!Z-1!V-A!T/A!^1Q\"$3A\"&1!\"%11\"%41\"/;Q\"DBQ\"]C1#!=!\"S41\"811\"(.1\"\".1\"$0!\"'/Q\"21!\"70A\";1!\"C1Q\"N2Q\"Z4A#$4Q#%4Q#%4Q#%51#*6!#05A#)4Q#%4!#$5!#(6!#-4A##4!#!3Q\"Z4!#!5A#)6Q#05Q#061#+51#+4!\"`3Q\"U2Q\"Z4!\"T3A\"_5!#&5!#&5!#*41##3A\"S21\"S1!\"N1A\"S31\"T2Q\"Z3A\"_2Q\"[21\"W1A\"R1!\"N0A\"J1!\"N11\"P11\"Q1Q\"T1Q\"T1!\"N0Q\"L0!\"H/Q\"E01\"I0!\"H0!\"G0!\"H/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@.Q\"?.Q\"?/1\"B/1\"A/1\"A/A\"E0!\"G0!\"H0A\"K/Q\"E0A\"J/Q\"F01\"I1!\"N1!\"O11\"Q1!\"N1!\"N0A\"K0A\"J1!\"O1Q\"S3Q\"U2Q\"Z2Q\"[31\"T1A\"S11\"P11\"P2A\"Y4A\"[4A#$3!\"[41#\"31\"]4!\"T2A\"R3!\"X3Q#!4!#!,AR6)QB!3Q\"_4Q#%3Q\"`3A\"_3Q\"`4Q#(5!#+1Q\"P1!\"O4A#$61#05A#.4Q#%4Q#%51#)5A#.5!#+4Q#,5A#)51#)4Q#(5Q#051#.4Q\"]3A\"Q11\"E/1\"6.!\"'.1\"\".!!_.1\"\"/1\"#-Q!\\+!!Q+!!O0Q\"(71\"5;1\"2:Q\".6A\"*61\"-6Q\"55!\"31Q\"(-Q!W.1!X2Q\"'7Q\"0?Q\"FC1\"@B1\"*@!!W<1!L6Q!?4Q!;21!91!!;/Q!5.Q!:-1!7.Q!8.Q!:.Q!:1!!>4!!<61!>81!D=A!M@1!VCQ\"-BA\"7?!\"?9A\":2Q\"*-A!^+1!W.Q!\\2Q\"$21\"'11!_2A\"'9Q\"?C1\"[DQ#&Q\">B!\"7?Q\"!;A!I5!!?0A!7.!!6*Q!7*1!6(1!8)1!9'!!6&A!8'1!5&Q!6&Q!;(1!9(1!=)!!=(!!<*!!:*1!9,!!=/1!<2Q!;6Q!<&A!='A!9'A!9'Q!=+A!<,1!90!!<5!!;01\"H1Q\"T41#$5A#/5Q#05Q#04Q#-3Q#-/1#3.1#3/1#241#,6!#/51#(6!#&61#.5Q#-.Q#+.A#*/1#\"3Q#.51#(41#\"3A\"_5!#&61#'5A#/6Q#16!#,41##3Q\"]3!\"Y3!\"]4A\"]41##4A#$4A#$31\"^3A\"V2Q\"U1Q\"T1Q\"T31\"W31\"W31\"X3!\"Y2A\"U1!\"N1!\"N11\"Q11\"P11\"P1!\"N1!\"N1!\"N01\"I01\"I0A\"K0A\"K0!\"G01\"I01\"H01\"I/Q\"F1!\"N0Q\"M1!\"N1!\"N1!\"N1!\"N1!\"N1!\"N11\"P1Q\"T2A\"V3Q\"U3!\"X21\"X1Q\"S1Q\"T2Q\"W3!\"W3A\"]4Q#$3Q\"`3Q\"^3A\"_3A\"V2Q\"Z4!\"`4A##.A\"?$2!;#A!=/!\"=4Q#$3Q\"`5!#$0!2J$!!;!!Q)!!Q'#A!821\"U61#(5!#)61#--QR:#R!6#\"!<(A\"\"1Q\"X4Q#'5Q#061#05Q#,4Q#)5A#,5Q#061#061#04Q#*4Q#'5!#.61#-4Q\"\\21\"H0A\"2.A\"&/Q\"%/A\"$0Q\"%0A\"#,!!S*Q!L2!\"(61\")81\"&7!\".6A\"+8A\"?3A\"-,1!Q0!!]:1\";CQ\"AC!\"!81!G/1!:*1!3(Q!3&Q!8&!!2&A!:)1!E/A!Y4A\"+;Q\"6@1\"9F1B6HA21J1R)KQR%L1\"%M!B%MA2%LQB%JQB3F!29AQ\";>!\"87!\"50A\"#+!!M'Q!C'1!>(Q!;)Q!?,Q!=2!!;91!=A1!SF!\"C/1\"\"+Q!Y1!\"%5A\"011\"'0A!`:Q\"=G1#!?A\"Y41\"0.Q\"\".A\"!0!\"%01\"2.Q\"50!\":/Q\">/Q\"D1A\"R4!#!5A#*5A#051#/4Q#*2A#1/A#3/A#3/1#22Q#26A#,5Q#/5Q#06!#00!#&.A#-.Q#%.A##2Q#)5!#'4Q#%5!#&5A#+51#+5A#/6Q#06!#,5!#&3Q\"`3A\"W3Q\"_41#\"5!#&5!#'4Q#%3Q\"^2Q\"Z2A\"S2Q\"R3A\"V3!\"Y31\"[3!\"X3A\"V2!\"V11\"Q11\"P1!\"N1A\"S11\"Q1A\"R1!\"N1!\"N1!\"N0A\"J0A\"K0A\"K0Q\"L0!\"H1!\"N0!\"H1!\"N1!\"N1!\"N1!\"N1!\"O1A\"R1!\"N1!\"N21\"Q2A\"S3A\"S3!\"Y3Q\"U2Q\"P2!\"R3!\"U3A\"V3A\"_4A##5!#&4A#$3Q\"`2Q\"[31\"]31\"^4Q#%0!\"H%!QA!!!(\"2A-/1\"D4A#$4A#$0!\"L#1!@!\"A&!\"1'!!!(&AQK4Q#%5A#+6!#/-QR4!2!*%1Q?'1!Z-!\"64A#$5A#,61#05A#-5!#,5Q#/6!#05!#,5A#05A#/4Q#'4Q#'5Q#-4Q\"^2!\"J1!\"9.Q\"+01\"$0!\"$1A\"&1Q\",-1!T+Q!P4A\"08Q\",91\"$4A\"&4Q\"*8!\"801\"#,Q!T4A\"0B1\"LFQ\"0<1!L0Q!9*A!6'Q!3&1!3%Q!2&A!=.!!U81\":B!\"@HA23J1ARMQA?M\"A/HRQ&HC1!G#!!E31!ESA!G31!H#A!I3Q!J3Q!K3!)O3!4Q\"!CO!AOL12,DQ\"C;A\"@11\"\"(1!I)1!='A!>)Q!D-Q!?11!6=!!4Q\"0I1\"FNA!PG\"Q$BSA!A#A!:B!#1!!4.Q!E-1!M.1!I0!!@4115;\"!-?R!,BSA.E#A.D3A2BS!1B\"A6.!#.01#021#+/!#).A#\",!\"5,1\"4-!\"7.!\"L.!#\"0Q#\"/1#&.1#\"-Q\"C(1!S)1!Z/!\"<5Q#*5Q#+5!#)5!#)51#*+Q\"/+A\",/A\"E4A##4!#\"4A\"]3!\"]41#\"3A\"V1Q\"S1Q\"O3!\"Z31\"^31\"W2Q\"[2Q\"[2Q\"[31\"X3Q\"U3!\"Y21\"R2!\"R1Q\"T11\"Q11\"P1A\"R2!\"T21\"T21\"R31\"T1Q\"S1A\"R21\"X21\"V1A\"Q0!\"G01\"J0Q\"K2Q\"V31\"]3A\"^3Q\"`0A\"I+!\"(*Q\"%*Q\"%0!\"G5!#&5!#&5!#&11\"O'!!O$A!K&Q!P(Q!W!\"A&!!!(!!!)!B1)%AQD'1!P&Q!N'Q!Q\"\"1+!!A'!2Q(!1A*$1Q@&A!L'A!Q'1!](1\"&21\"Z5!#'6!#-6!#06!#/2A\"W.A\"<.1\":/Q\"G3A\"^41\"_3Q\"S3Q\"Z5!\"Y21\"F1Q\"/2A\",3!\")1A\"%5A\"8-!!U'Q!A01!`7Q\"&61\"%2A\"#8A\">4!\".(Q!G41\",I1\"WCA!Y2Q!9)Q!1&A!0%A!0(1!H9!\"5PQ\"8L!Q4E3A\"E#Q!?C!%2Q!5.A!G.!!J1A!>8BQ*E#1%ME1\"Q6A!P6Q!M6!!MF!!N&1!PF1!R'1!SW1!VW1!TFA\"R51$HSA'>RA>4!!Q0!!T+!!E)1!>*QA/5R!$D#Q!T$1$TAQWG1\"O/A!]'Q!<)1!E+A!L.!!A91!EGQ\"*BA\"P/1!_+1!P41\"411\"\"/1!Z?A\"OM1#961\"=,!!V-A!W.A\"$1!\"3.1\"=-Q\";.A\"=-A\"9/1\"80A\"N5A#.51#03Q#1/1#3.1\">+!\")+Q\"/,Q\"B.1#,.A#1.A#1.Q#*,A\":,1\"4*Q\"%,1\"1-Q\"Q-!#!-!#!-Q#!.A\"I'!AI$A1;(1!T1!\"M5Q#,61#)6Q#'41#%,A\"(+1\"*+1\"+0A\"J4Q#\"41##4A##4A##21\"U1!\"N1!\"M11\"P3!\"]3!\"Z3Q\"]3Q\"U3Q\"]31\"W3!\"X31\"X2Q\"X2Q\"Y2!\"R2!\"U2!\"U2A\"S2Q\"U2A\"T21\"S01\"J0Q\"M1!\"O1!\"O0A\"K/Q\"E0A\"L0!\"H/Q\"F2Q\"U3!\"\\4!#!0!\"H+1\")*Q\"%+1\"+*Q\"%.Q\"@5!#&5A#$5A#!(!QY\"Q!4#!1@'A!S'A!S!!A'!!A)!\"A'%!!B'1!O%!!J&1!M'A!Q\"\"Q*!\"A&!!!(!RA+'!!P'A!S'A!S&!!`)!\"#51#+51#.6!#061#031#!/Q\"@-Q\"8.Q\"\"Q&1QQ8-A!M.A1@6RQ,FTQ\"R'!!OV1!H%1!>T!!8C1!2\"A$/!1%/11%0B1&32A#8B1\">TA!I5Q!R'Q!W81!WG1!LD1(>QA<51!U,A!P*!!?*1!5/1!&A4!!T4Q%WRQSE1\"W/A!]&1!8)A!I-1!N/Q!;=1!LJQ\"@:Q\"D+A!T11\"#6A\":.!!W41\"/HQ\"]C1#(/Q\"#+Q!R-A!]0!\"1/Q\":-Q\";/1\";.Q\"+A!8+Q!4-QQ)21Q(?$1\"MF!!YHA!ZG!!L3!,:QQS0!![*!!D)1!9-!Q*@3!!U$Q!XQ!]EA\"R,!!N'Q!>+A!N-A!J1!!BE1!VGA\"P31\")*!!M5A\"721\"+.A!W.A\"8.A\"9.!\"9.Q\"8.1\"7/1\";/1\"C31\"O21\"F21\"761\"96!\"5/1\"#9!\"B+A!S)!!B6A\"0:1!^3Q!`51\"':Q\"I,Q!S+1!OBQ\"OJQ\"34Q!D*Q!1'1!0$Q!0(1!AAA\"GUA!`E!Q$DTA!F$!!1Q!7*Q!B-A!BC$1\"VWA!Q'!!:C1!.1A#*!!0*1!2-1!>-Q!81A!421A14AQ*52A'42!+2!14/!Q:-!!A*Q!=,1A23\"1(F5Q!UGQ![(A!OD1)>!!I01![*1!B)Q!60QA&ED!!Z31%TQR191\"A)!!>(A!<-1!R.1!C9A!JJ1\"6>!\"J)1!O.A!`5Q\"4.1!T41\"+L!#'C!#!,1!R*A!Q-A!]1A\"6/1\">/!\">.!\":.1\"9/!\"7.1\";/!\"D31#+1!#2.1#++A\"60A\"O3!\"_+Q\"+,1\"1.1\"U.A#,-Q\"@,!\"2)!!X01\"K*!!_+A\",-A\">-1\"_.Q\"I'1!U%11<+Q\"*(!!O(Q!T-Q\"32Q\"Q/Q\"H+!\"(-!\",-1\"6,1\"1+A\",/Q\"F2A\"V31\"V11\"P1!\"O1Q\"T1Q\"T0A\"K0A\"K3!\"R31\"Z4!\"W3!\"Z31\"]31\"\\3!\"[3Q\"]31\"W3A\"V3A\"V/Q\"E/1\"B0!\"G/Q\"F/1\"C/Q\"E0A\"K0!\"G0!\"I-!\"5,1\"-+!\"#+!\"!,1\"&+Q\"&+!\"'+!\"'-1\"90Q\"E+!\"$*!!^+!\"&+Q\"#&A!K#114*12$3!\"`,A\"1&Q!P'A!T%1A>&QAK%!!K+!\"&4!#$1Q\"S'Q!V'Q!Q\"Q1<$1!F'Q!Q,Q\"64Q#.6!#01!\"O,!\"20!\"L5Q#06Q#061#02Q\"V/Q\"B-!\"7/!\";.1\"7-A\":/A\";.Q\"9.A\">31\"O21\"F3Q\"78Q\"B4A\"3.1!`6A\"=)Q!G+Q!O7!\"/8!!\\1!!Y7!\"07Q\"?)1!G.Q!XI1\"RE1!_/Q!9)A!1&1!0\"QA-.!!SNQ\"MOAQ7B2Q!J51!=R1%,A!C,1!D7B1,UH1!WXA!=$1!-!Q$+!!)*A!9,1!>1!10821&BT1!LVQ!PWA!Q7A!PG1!L6A!C$!!82!&0!!4-!!B+Q!90AQ'ETA!Y8A!ZX1!P$!);!\"$-Q!U(A!B*Q1052Q$Q51![\"A?K1\"W,Q!W&A!7+Q!S-A!H2A!AFQ\"$FQ\"Q-A!Y-A!V6Q\"@.1\"!/!!_F!\"\\IA#/11\"))Q!C,!!R11\"40!\"C/A\">-A\"6-1\"5-1\"5/!\"6-!\"7.Q\"T0!#3/Q#0-Q\"G1A\"R6!#02Q\"]*!!\\-1\"9.1\"[,1\"9,!\"2+1\".4Q#.2A\"X)!!X,!\"1-Q\"F-Q\";(Q!Z%AAF3!\"U0Q\"L(!!S+!\"'-1\"7-A\"0,!\"*,A\",2A\"S3!\"U-!\".-A\";0Q\"L11\"P1A\"S11\"P2Q\"U21\"U1Q\"T11\"P11\"Q2Q\"U21\"Y2A\"T3!\"W3!\"X3A\"\\3!\"Z31\"^2Q\"[2Q\"[/1\"C0!\"H01\"I0!\"G0!\"H01\"J0!\"H0A\"K.Q\"@/Q\"A0A\"F,1\"1*A\"$*Q\"$*Q\"%*Q\"%-!\"33Q#\"5A#..A\"<(1!Q*A!]'A!O\"115%11J5Q#*6!#/0A\"I&Q!R'1!P'Q!Q&A!L'Q!R2A\"X5!#&3A\"^(A!W'!!O'1!P&A!M*1\"!31#\"51#051#02!\"X-Q\";1A\"U5Q#06Q#05A#04!##/!\"A/!\"6.1\"<0!\"<.A\"9-Q\":.1\"9.!\":3A\"L1Q\"84Q\"9:A\"M4!\".0Q\"!41\"7'Q!?*Q!P5!\"#6!\"!0!![:1\"85Q\"9)1!B2A\",KQ\"MAA!O,A!5(Q!1$Q!/&1!851\".U1\";IAA*A#1!K5Q!4Q1/+A!@/A1=F$!![91!N'A!2\"Q#+1!&*Q!0,A!@1AQ1;#!!L7!!W(!!O71!GV!!F%A!N'Q!VYA!XYQ!QG1!ADA!2!Q0+1!?)Q!:3!A)M&!![)Q!Z'Q!G!A<6!\"')Q!G)A!:+Q!)H51!\\$A)UQ\"D7A\"6&Q!;+1!J/1!P-Q!D>Q!ZJQ\"H3!\"*)1!K5Q\"84A\")-1!P@!\"FLQ#/5A\"7(Q!G+Q!T/Q\"+1!\"B.Q\"?/Q\"9-Q\"7.A\"6,Q\"5.Q\"<-Q\"@.1#$.A#3.A\"L2!\"T6!#06!#00!\"F+Q\"/,A\"5,!\"1,!\"1-A\"86Q#(5A#-.Q\"A)!!\\+1\"+,A\"5)1!`)!!Z3Q\"`4Q#%/1\"E(A!X,A\"(,1\"*+A\",,Q\"36!#,5Q#02A\"[+A\",/1\"C1A\"R1A\"Q1!\"N4!#\"4Q#%2Q\"V1!\"N0!\"H1!\"N01\"H01\"I11\"P31\"X3A\"\\3Q\"]31\"W3Q\"]31\"X0A\"K0Q\"K2A\"O1Q\"P0Q\"M0!\"H0Q\"L0Q\"M2Q\"P4!\"]4!\"^1Q\"L+A\"+*Q\"%*Q\"%,1\"22A\"W6!#.6Q#12A\"Y&!!F&Q!N%Q!?#Q!;01\"E7!#15A#/2Q\"Y$QAP'Q!Q&Q!M&A!K-A\"64Q#%5!#&4Q#$*!\"\"'1!O'!!O'Q!Q.1\"@51#/6!#/5A#03A##1A\"S3Q\"_6A#06Q#06A#05A#+/1\"B.!\"8/1\"8.A\"=-Q\"7/1\"9-A\"5.Q\"=3A\"L2!\"961\"<+1!O8!\"*8Q!_0A!\\;!\"@5Q\"9'A!B3Q\"-MA\"M?Q!R,1!5(Q!0$Q!0$A177!\"2VQ\"3I11%A31!KE!!3AA4*A!A01A=KEQ!ZYQ!IV1!1AA\"-!!'*A!3,A!?1A1'?$!!RXQ!OW1!6\"A\"-Q!%,A1,1\"A%@$!!W)A!Z)!!Q'!!?#!\"/1!2)Q!=,1A2@TA!Y81![I!!Q#!/;A\")+!!N)!!<*!!/ACA!Z%!#ZQR&>A\"H(1!C*1!J0A!Z-A!?;!!VJA\"<5A\"6)!!E31\"35A\"9-1!S=A\";MA#)8A\"E(Q!F*!!M/Q\"*2Q\"C.Q\"A.!\":-!\"5,1\"4,1\"4-1\"5-1\"7.!\"B.A#+.Q\"L3!\"Y61#05Q#041#)+1\"-,A\"5+A\",+1\"*/A\"F5A#+5A#)4Q##)A\"#,A\"0+1\"*(1!T+1\"'4A#$4Q#%3Q\"_*A\"$,1\"'+Q\"),Q\"*/!\"@61#16!#16A#101\"B,1\"00!\"G01\"I2A\"O5!#*51#-5!#&2Q\"Y11\"Q1!\"N0!\"H1Q\"R31\"T31\"Z41#!3Q\"^31\"^31\"]31\"]3Q\"U31\"Y3Q\"Z4!\"Z2Q\"[21\"R2Q\"W3Q\"[4Q#%5!#&5!#'41#$.!\"<+Q\"%+1\")1!\"N5Q#,6A#+6Q#161#1'Q!P%11;!!A1*Q\"%6!#,7!#16Q#/5!#&(1![&Q!N&A!O'Q!T3Q\"`5!#&5!#&5!#'+!\"''Q!Q&Q!N(A!Z5!#15Q#/6!#+5Q#04A#)41#'5Q#/6Q#06A#06!#05A#,11\"E-Q\"5.Q\"<.1\"9/1\";,Q\"6-Q\"5.!\"84A\"I2Q\">8!\"B?Q\"Y4Q\".2!\"+6!\":'Q!<)A!G5A\"!91!^41\"&81\"75!\"6(Q!A1!\"(L!\"MAQ!P,Q!2(Q!0$11/&1!55!\")V1\"8K1!'B#1!LEA!6!1.,A!J0!1;GU!![:!!MW!!3B1!,A1&*A!2-A!:/A1,6B1!B4A!BEQ!4B!!+AA&)Q!0)1!0+Q1(HFQ!Z)!!WYQ!J&!!4!Q**Q!B,115/1\"_-A\"A4Q#(6A#051#06!#00A\"O+A\"-,1\"4*1\"\"1A\"V5Q#-6A#&5Q#,01\"E(A!T+Q\".&AQK.Q\"A41#\"4A##4!#!0A\"H*A\"#+A\"-+A\",2Q\"U7!#17!#17!#15!#%-!\"6,A\"3.1\"=3!\"Z5A#.61#'5!#+4A#%31\"U1A\"Q1A\"S3Q\"Z5!#$5!#&41#\"4Q#%31\"]3A\"\\3!\"X31\"\\3!\"]31\"^4A#!4A#$3Q\"_3A\"]5!#$5!#&5!#&5!#'6A#$3!\"Z0!\"A11\"I5Q#+6Q#-6!#16A#17!#1-Q\"?#AA;%!AE31\"[7!#17!#16Q#/5!#$+A\"0&1!O%A!I.A\"=4Q#%5!#&5!#&5!#).1\"?'1!P'!!P.Q\"B6Q#+61#)4Q#.61#06!#05Q#06Q#06Q#06A#06!#05!#0/!\"E.1\"8.A\"<.A\"<.Q\"9,1\"4-!\"5-A\"731\"I2Q\";8!\"GAQ#&71\"81!\"&8Q\"H)1!H)!!E61\");A!]6Q\"-6!\",9!\"@(Q!J.Q!ZGA\"TCQ!V0A!7)1!0%!!/$Q!3/!!]OA\"GOAQ0BCA!K%A!;RQ$,A!?-A!C<31(WY1!VIA!>DQ!1AA\",!!*+1!7-1!;-111111&2B1$/1A&*A!.*1!3)Q!0-QA'J61!Z)!!XY1!M6A!4RA,+!!>,A11>#A!U8Q!XH!!P41*>!\"',1!U(A!=)A!4.!!S:A\"7LQ#&9Q\"G'A!E(A!M/1\"&2Q\"I/A\"D.!\"6-Q\"5,Q\"0,Q\"2,Q\"5-1\"5-Q\"6/!\"N+Q\"35Q#05A#051#06A#-4!#)+!\"&+!\"((A!W4!#.61#+51#(5!#,5!#+)!!X(!!S&Q1E1Q\"R4Q#%3Q\"`41#\"3Q\"_,A\"-,!\"--A\"251#$7!#17!#17!#16Q#02Q\"Z,A\"30Q\"B41#(7!#(51#*6!#*6A#%5!#&3!\"\\31\"^4Q#%5!#&5!#&4!#!3A\"^3Q\"`3A\"^2Q\"[31\"]31\"^41#\"41\"^3A\"_41##5!#&5!#&5!#&5!#&5!#'5!#)5!#&3Q\"_4A#(5Q#.6!#+6!#-61#07!#141\"`,!\"./!\"E61#.7!#17!#16Q#141##01\"I&!!H(1!\\31\"Z41#\"3Q\"`5!#&51#(1Q\"S&!!N)A!^3!#!4Q#06!#*5A#)51#06A#06Q#06Q#06Q#05Q#06!#051#0/Q\"H-A\"5.A\";.Q\"<-Q\"5,1\"4-A\"5-1\"511\"<3!\"=7A\"AAA##:1\"@0Q!]8A\"G+!!R'A!<3A\"!91![71\"!4A\"(9A\"D*A!P+!!NA1\"SHA\"-61!>*Q!1&1!/$A!/)A!FDA\"JTAQKEBQ!I%Q!DD!\"0Q16,!!A01Q8JF!!YIQ!T8Q!>4!!1!!\".QA$,!!1+1!8,!!7,1!7+1!3+!!3*A!5+Q!)9CA!TH!![*!!V81!F5A!01!1)Q!=.!12A3A!UX1!Z8Q!O#Q:5Q\"7+Q!U>!\"ELQ#,6A\"<(Q!E*1!K/Q\"*2Q\"I/A\"D-A\"6-Q\"5,Q\"*.1\">-Q\"<-1\"5.Q\"9,!\"1,A\"25Q#051#051#06A#+6!#0/A\"F)1!X*A\"\"51#/6!#)5!#&5!#&5!#*/!\">$A1='A!Q31\"\\41##3!\"\\3!\"\\3A\"_1Q\"Q-!\"301\"L61#.7!#16!#17!#17!#16!#+3!\"S4!\"^6!#/5Q#15A#-5Q#)5!#*5!#(5!#&5!#&5!#&5!#&5!#&3Q\"`4A##3Q\"`4A#$31\"]3Q\"`3!\"]3A\"_4A#$4A#$5!#&5!#&5!#&5!#&5!#&6!#)6!#+61#(6!#&6A#(6A#+6A#061#-7!#17!#16A#141#'61#-7!#17!#17!#16Q#14A#(3!\"\\.!\":1!\"P5!#&5!#&4A#$41##5!#(5Q#+.1\":0A\"M4Q#06A#&4Q#'5Q#'5A#/6!#06Q#06Q#06A#05A#06Q#+4Q#021\"T-A\"5.!\"8-Q\"5-Q\"5,A\"3-!\"/-1\"50Q\"@4A\">5Q\"BAA#!?!\"R1!\"#6!\"411\"'&1!7.Q![8A\"$8!!^1A!W9Q\"C0A\"#'Q!B8Q\"7KQ\"I@Q!T-Q!5(1!0$A!/%A!31Q\"\"O!\"=PQQ5D3A!I%1!>#A%.!A>+Q!C11A4BDA#R81!U9!!I6A!;D1!6C!!0!Q$.1A*.!A*.!A*0!Q)7SQ!FF1!T(!![*!!WI!!FEQ!2Q!.*A!=+1!88B1%OF!!UXQ!UFA!DQ!T4A\"&(Q!C'Q!7+QQ(J$Q!\\31+U1\"U61\"7'1!<01!_41\"$.Q!G?1!`J1\"L/!\"\")A!I31\"311\"$,A!RB!\"KL1#/21\"/)A!A)Q!P0A\"01A\"H1!\"G,Q\"6,1\"4.1\"93Q\"U3!\"V-Q\":-Q\"5,!\"1/Q\"G6!#05Q#04Q#*51#.5!#05!#--!\"20A\"L61#-51#)5!#&5!#&5!#&4!#'-!\"2/A\"B4A#$4!#!5!#'5!#)4A##4!#!2Q\"Z6!#,7!#17!#16!#17!#17!#16Q#15Q#15A#16A#(51#.6A#&5!#+7!#%5A#)5!#*5!#&5!#&5!#&5!#&5!#&4A#$3Q\"`3!\"]3!\"\\3A\"_4!#!4!#!4A#$4Q#%4!#!5!#&5!#&5!#&5!#&5!#'51#)61#(5Q#+5!#/61#-5Q#,5A#,6Q#06Q#17!#16A#16Q#17!#17!#17!#17!#16!#,4A#%3A\"_4A#$4Q#$31\"^3A\"^31\"^5!#&5Q#(41#&4Q#*5!#-4Q#'4Q#%51#'51#+5A#06Q#06Q#05Q#051#05Q#,6A#'3Q#$-!\"5-1\"8-A\"7-1\"4,!\",-A\"),A\"3.Q\"93!\"A5A\"B>Q\"`CA#\"7Q\"62Q\"061\"?(!!B*!!N61\"$9!!\\5Q![6Q\",81\"B)1!L.A!XCA\"UJA\"061!G+A!1&!!0%A!1(1!<:Q\"8RA\"1JQA(F3A!IU!!.1A3821&NV1!U7!!S6A!JRA<@!\"4.!!Z'Q!9'Q!0/A1(F$!![C!/TQ2J7A\"=(1!9-Q!S6Q\".0!!K9!!XFA\"K71\":(A!G0A\"'31\"2-Q!S81\"=O1#911\"&1!\"\"EQ\"PI1#.1A\"&)1!C+Q!T-Q\"&1A\"D2!\"S/A\"E,A\"5-1\".3Q#\"4Q#'4Q#&4Q#(11\"J1A\"Q6!#-5!#-4Q#&4!#!4Q#%5!#,6!#06!#051#05A#+4A#$3Q\"`3!\"]4!#!4A#&4Q#&5!#&3Q#!5!#+6Q#17!#17!#15A#061#07!#16Q#15Q#16A#16!#17!#16Q#161#16!#-6A#+51#-51#)6!#)6Q#'6A#'5!#*5!#&5!#&5!#\"5!\"`5!#&4!#!4Q#%3A\"_4!#!31\"]3Q\"`4A##3Q\"`4!#\"4Q#%5!#&5!#&5!#&5!#&5!#&5Q#(5A#+51#'51#.61#,5A#*6!#+6!#-5A#.6Q#16Q#16A#16Q#17!#15Q#16Q#16Q#15!#*4A#$4!#\"4A##4Q#(6A#15A#.41##5!#&5Q#,5Q#.4Q#%41##3A\"^3A\"_4Q#'4Q#06!#06!#051#04Q#)4!#!4Q#%4Q#'21\"[,Q\"7,1\"4,1\"2/Q\"F4A\"`1!\"N-!\"8.1\"61!\"75!\"@#1&9\"A)1A1+.!14.119-A1:.11:.A15/!A/4!1);\"Q&@#Q$HU1!O&A!O%!!NU1\"I\"Q3C!\"!7A\".,A!L'Q!;'1!3-Q!)@3Q!TCA)WQB-FA\"Y.!![)!!D2Q\"%4A\"$1A!H=Q\"#EA\"I2A\"*(Q!G3A\".3Q\"3-A!X9Q\";N!#-<1\"M,!!W*Q!H,1!\\0!\"/11\"K2!\"T.!\"<,Q\"2/A\"@4Q#%4Q#%4Q#)5!#/4!\"Z4Q#&5Q#05A#-4A#$41##4!#!5!#&51#-51#05A#,51#(4!#!4A#'41#$41##4A#&4Q#&41#\"3Q#!5Q#.6Q#16Q#17!#17!#17!#17!#16Q#161#16!#16A#17!#16!#17!#161#06A#06Q#(5Q#+5Q#)5!#)5!#)5!#&5!#&5!#&5!#&5!#&4!#!4!#!41#\"3Q\"`3A\"^3A\"_41#\"3A\"_41#\"5!#&4!#!5!#&5!#&5!#&5!#&5!#&5Q#(5Q#&61#*6A#,51#(5Q#+61#'6Q#)6!#.61#16Q#15Q#161#17!#161#16!#16!#15Q#/3A\"`3A\"_3!\"\\6!#-7!#17!#14A#*4A#$5!#&5A#*4Q#%4A##3Q\"`4A#%4Q#%4Q#,51#05Q#04Q#04Q#'41##3Q\"`4Q#$41#%.Q\"?,Q\"2,Q\"11Q\"P4Q#%3A\"^0A\"J.1\"80!\"62Q\"77!\"G@1#$EQ#*?Q\"R4!\"*8!\"?/A\"%(1!<-Q!Z6!\"!8A\"!6!!^5Q\".7Q\">.A!T)Q!J5A\"2E1\"LEQ\"\"71!;,Q!-(1!0&Q!0%A!1'Q!@1Q\"\">A\"@FA\"+I!QII210J#!!KD!!I$!!GT1!G4A!E4A!E$1!ET!!GDQ!JUQ!L%A!M%!!L%Q!KD1!IC!/G2!D@!\"\"7!\".-Q!V(A!?'1!4)!!02B!&ECA!UC!3TQRKBA\"Y+Q!O)A!F21\")4!\"'/Q!M;!![E1\"A71\"6)A!I.Q!`6Q\"@-Q!\\1!\"!F1#\"F!#(0!\"!*A!L,1!V.1\")0!\"=4!\"T11\"M-!\"8,Q\"72A\"W4Q#%4!#!4Q#%5A#,4Q#,51#05Q#/4Q#)41##4!#!41#'5!#'6Q#*5Q#,5Q#)4A##4Q#%5Q#14A#'4!#!4A##4A#$5!#&51#(7!#15Q#15Q#17!#17!#17!#17!#16!#15A#16A#.5A#-6A#16A#16!#.6A#)5Q#.5!#,5Q#)5Q#)6A#(6A#&5!#*5!#&5!#&5!#&5!#&5!#&41#\"3Q\"`3Q\"`3!\"]3!\"\\31\"]4!#!4!#!41##4!#!5!#&5!#&4Q#$5!#&5!#&51#'51#*51#(7!#(5A#-6!#*61#)5Q#+5Q#,6Q#16Q#16Q#16!#15Q#16!#161#16Q#16A#14Q#)4A##3Q#!6A#16A#16A#15Q#-4Q#%5!#&5!#'4Q#%3Q#!4Q#,5!#.4!##4Q#&5Q#051#04Q#,4Q#%3A\"_41#\"41#\"4Q#'1Q\"S,Q\"3,A\"51A\"S4Q#%41#\"2A\"W/!\"@/A\"81A\"731\":9A\"QCA#*FA#)!!D2A!3+1!0'Q!0&1!0&Q!4(1!:.1!Q61\"(=1\"0BQR&D11ZDAADF!15HRA1HBA.GRQ.HC1.H3!.H3!.F\"A1C1!>BQAT?Q!]9!\"'2Q!`-!!N)!!>'!!8(Q10.11,9B!\"LCQ&QQALNA\"L;Q\"C,A!R*Q!M4!\"-51\"&0Q!R71!WB1\"98A\"8*A!K.A!W7A\"<0A\"!/1![@!\"JH!#%71\";,!!V,!!S-1!^0A\"22Q\"O3Q\"W0Q\"K-A\"0.Q\"A4A#$41##3Q\"`4Q#%51#-6!#051#05!#-4Q#%4A#%4!#\"4!#\"4A#%51#+51#-4Q#)3A\"_5!#+7!#15Q#-3Q\"`4A#$41##3A\"_5A#-7!#15Q#161#17!#17!#17!#16A#15A#15Q#15Q#.5A#-71#+61#-5Q#.5Q#+51#)6A#%51#)51#)5!#(5!#'5!#&5!#&5!#&5!##5!#&5!##3Q\"`4!#!3A\"_4!#!3A\"_5!\"^3Q\"`3Q\"`3Q\"_5!#&5!\"^5!#&41#\"5!#&5!#&5!#&5!#(61#(5!#.51#'5!#*5!#(7!#&5!#+6A#16Q#16A#161#17!#151#151#161#16Q#161#15!#&5!#'6A#17!#17!#16A#141#(3Q\"_4Q#(4Q#%4A#$5A#-6Q#05A#-4A#$51#*5Q#.4Q#(4A#(3Q\"`4Q#(41#$4Q#%4A#&0!\"G-Q\"<3!\"[4Q#%31\"]3Q\"`2!\"L.A\"=/1\"61A\"73Q\"==!\"WCA#)FQ#*:!\";41\"+61\"<+Q!T(1!A-Q!R4!!_51!Y51!Y6A\"&:A\">3A\"/*1!I+Q!P7A\"7CA\"=G!\"!<1!=3A!0.1!0(A!0&A!0%A!5'!!2(!!@+!!K/A!^4Q\"*6!\",8!\"151\"0+Q!M,!!T3Q\"50A\"&/!!X=1\"HHA#/:!\"F.Q![*Q!U-A!Y.!\"01Q\"E41\"Z3!\"[/A\"=-!\"82Q\"Y4!#\"4Q#%4!#\"4Q#%61#)5Q#,5Q#/5!#&41#\"51#,51#-4!#\"51#)6!#)61#'4Q#%4A#&6Q#17!#15Q#/4!#$3Q#!3Q\"`41#%6A#061#15Q#15A#17!#17!#17!#161#16!#16!#15A#.61#-61#17!#)6!#.5Q#+51#+51#+51#'5!#&5!#'5!#'5!#&5!#&5!#&5!\"_4!#\"4A\"]3Q\"`41#\"4A#$3!\"]3Q\"`31\"\\4!#\"4Q#%3A\"^5!#&4Q#$4A#$5!#&5!#&5!#&5!#&5!#'5A#(6!#)6A#'6A#'5A#+51#,5Q#*5A#/6!#061#161#161#16!#15!#16!#15Q#16Q#15Q#06A#07!#16Q#15Q#15Q#161#/4Q#&4Q#%4Q#%4Q#%61#.6Q#06A#041#'4A##5!#'5A#+4Q#&41##5A#05Q#/4A#%4Q#%3Q\"`1Q\"S4!##4Q#%41##4Q#%2Q\"Y01\"F01\"8/A\"51Q\"571\"F<1\"UC1#)EQ#'=1\"F5!\"06A\";.A!`(!!E)A!L2Q\"\"5!!\\51!X5Q!]7Q\"581\"71A\"%+Q!J.1![7!\"4C1\"AF1\"0AQ!O9Q!D3Q!7.!!6+!!3'A!2'!!1'!!2'A!5&A!4&1!6&A!;'1!<&A!<'1!;&1!6'1!6'!!7(!!4)Q!7,!!1.Q!,4A1&?\"!%H\"13N!ARKABBC!\"R3!\",+A!M,1!T21\",71\"231!X2Q!S;!\"&Q\"KH!#'<1\"H0A\"#-1!T-1!Z.A\".0Q\"C3A\"U41#\"11\"Q-A\"90A\"L4Q#$4Q#'51#-41##41#\"5!#.5!#/6Q#$4A#$5!#,6A#05Q#041#\"4A#$4Q#&4Q#%3Q#\"5Q#06Q#17!#16A#141#'4!#\"4A#$6!#06A#16!#15A#16A#161#17!#16A#16A#161#161#*6!#+5A#'61#/5Q#/6!#/6!#*61#+5!#&5!#&5!#'5!#&5!#&5!#&5!#&4A#$4!#!4Q#%3A\"_3Q\"`3A\"^4!#\"3!\"]3!\"\\3!\"\\4!\"[3Q\"_4A#\"41#\"41##4A#$5!#&5!#&5!#&5!#&5!#'5!#)5!#'5!#)6A#&5A#+51#*5A#(5Q#/61#061#16A#15Q#16!#16Q#(51#15Q#16Q#16Q#16Q#17!#16A#16!#16A#16A#15A#+3Q#!4!#!4!#!61#.6Q#06Q#06A#04A#$4Q#&4Q#+4Q#&41##5A#06Q#051#-4!#\"4Q#%4A#)4Q#+4Q#%41##5Q#*4Q#)2A\"X/1\"D.A\"70Q\"02A\"971\"FA\"CD1\"CCQ\")A!!T=!!E8Q!;4!!41Q!5-Q!4,Q!1+!!1+1!0*Q!/*!!0*Q!0+1!1-!1+2!A'41A,8QQ*@1A'E114K!!UJAR0FQ\"E=A\"B3!\"),A!N,A!T2!\"*61\"25!\"$1Q!X81!];Q\"-81\"7/A![+1!M2!\"+7!\"@0Q\"&0!\"!E!1EC!ADF11DGAQKGQ!SFQ\"$H!\"5E1\"C@!\"C8A\"9A\"K?A\"^C!#&DA\"\\=A\"I81\"97A\"=5!\"6,Q!X*A!C*A!L.A!X3!!Y4A!Z4!!W4A\"\"5Q\"$8!\"07Q\"93A\",01\"!.1!_-1!]/Q!Z1!!`1A\"%6A\"-8!\"49Q\"39A\"49A\"5<1\";:A\"::A\"9:!\";61\".2Q\"(0Q\"!-A!Z-!!V.A!\\01\"!41\"+7A\"75A\"&4A!]3Q!Y5Q!^8A\".9!\"821\"(-Q!S-1!U01\"%21\",01\"!/Q!_8!\"8BA\"V?!\"R7!\"7.Q!`-A!Y,Q!]-1\"-.Q\":21\"P4A#\"4Q#.4Q#'3Q\"`4!#\"4A#%5Q#/6Q#06Q#061#/4!##4Q#%4Q#&3Q\"`5Q#/6Q#06!#06A#05Q#04A##3Q#!4A#%6!#.5Q#06A#06!#16A#16Q#16A#16Q#/6A#15Q#15A#.6!#-5A#15Q#16Q#15A#15Q#16!#15A#)61#)6A#$5Q#&51#,5A#*61#&51#)5!#&41#$4A#$4Q#$4A#$5!#&5!#&4Q#\"3Q\"`4Q#$3Q\"^3Q#!3A\"_31\"^3A\"_2Q\"[3!\"Y3!\"Z4!\"[31\"]3A\"_3!\"]3Q\"`3Q\"`41#\"2Q\"[4A#$3Q\"`5!#&4!#!5!#&5A#*51#)5!#(5!#&5!#*5!#&5A#)5A#-6!#,5Q#.6!#(5!#)51#(6Q#(5A#16A#15Q#16!#16!#161#15Q#.5Q#/51#16Q#15A#04Q#*61#06A#05Q#06A#06!#061#041#%4Q#%4!#!51#,6A#061#061#061#04A#'4A#$4Q#%4A#$4A#*6Q#06Q#06A#05!#-3!\"Z/1\"C.Q\"7-A\"11A\"44A\"791\"D=1\"VB!##D!#\"B1\"X:Q\"D71\"771\"@2Q\"1+Q!Q)!!G*!!G-Q!Z3A!`5A\"!4Q!\\5A!Y6!\"\"7A\"'7Q\",71\"271\"341\",2!\")1!\"\".!!]-!!U-!!Q,1!O,A!P,1!V,1!V,1!X.1!^11!_11\"(4!\"15A\"/71\"561\"261\")3Q!`3Q!\\6!!]7Q\"&8A\"25Q\"/1Q\"&,Q!Q+Q!W2A\")3A\"31!\"%/1!_41\".>!\"J@A\"W;A\"A21\"*.1!]-A!Y-Q!^-!\"+/Q\"92!\"L41#%4Q#/4Q#(4Q#%4Q#%4!#$5Q#-6Q#06Q#06Q#05A#,4Q#%41#\"4A#$51#(6A#05Q#061#06Q#05Q#03A\"_4!#\"5A#.6A#06A#06!#05Q#16A#17!#17!#17!#15A#151#17!#'6!#/5Q#161#16A#16!#16!#16A#&5!#*5!#(5!#*6!#)51#'5A#*5!#*5!#&5!#&5!#&4Q#%3Q\"`4Q#%4!#!4A##4A\"]3!\"]4A#\"4!\"^4A\"[3!\"\\31\"^2Q\"\\3!\"\\31\"]3!\"\\2Q\"[3!\"]3A\"_2Q\"[3A\"_3Q\"`41#\"3A\"_3A\"_3!\"\\4A#$4Q#%4A##4A#$4Q#%5!#&4A#$41##5!#&51#'61#&5Q#-5A#,51#*7!#'5!#,5!#*5Q#*5Q#16A#161#16A#16!#161#+5A#,61#-5A#16A#06Q#06Q#061#061#06!#061#061#061#03Q##3Q\"`4Q#*61#06A#05Q#06A#06Q#051#*4A#$41#\"4A#$5Q#06Q#061#06A#05A#031\"`0Q\"M/Q\"7.A\"70!\"62!\"461\"@:!\"I=Q\"WAQ#\"E!\"_AA\"W;A\"@8!\"971\";2!\".-Q!^+Q!J(Q!I+A!O.Q!]2A!`5A\"$51\"\"5A!^4Q!X5!!X4A!\\4A!`5!\"!61\",71\"-6Q\"081\"48A\".61\"+71\"07A\",5Q\"+5A\"+61\"*4Q\"!3A!\\6A!\\5Q!_7Q\"'9!\"+7!\"-51\".0A!`,!!R+1!M-Q![2A\"*4A\"71A\"+0A\"%61\"1=Q\"M@A\"T;!\"I4!\"2.1!`-A!Z,Q![-!\"#.1\"10Q\"C1Q\"T41#%5Q#051#-4A#$4A#$4A#&6!#061#06!#06!#06Q#041#*3A\"_41#\"51#*6A#05Q#05A#06A#06Q#05Q#04Q#)5A#.61#061#06!#061#.5A#17!#16Q#16A#16A#16A#/61#(5!#+6!#-5!#*61#15Q#16!#151#15A#,51#'5!#&5A#'6!#)51#(51#'5!#&5!#&4A##3A\"_41##41#\"3Q\"`4A#$4!#\"3Q\"`3Q\"`3!\"\\3!\"\\3Q\"`2Q\"[3Q\"\\4A\"^31\"]31\"]41\"`3A\"^41\"Z4!#!3A\"]4!#!3Q\"_4A#$31\"]4Q#%41##3Q\"`4A#$41##4A#&3Q#\"5!#&4A#$41##4!#!5!#'5!#&6Q##5A#.6A#$51#)61#'6!#(6!#(5Q#,6!#16Q#15Q#16!#16!#.51#-5A#)6!#06!#06Q#06Q#06Q#061#06!#06!#061#061#06!#04A#'4Q#*61#06A#05A#061#05A#06!#05A#)41#$3Q\"`5A#06Q#061#06!#06Q#05Q#/41#$2A\"Q/A\"C/A\";/1\"02!\"44A\"98!\"@;1\"L@1\"_C!#%CA#!BA\"U=A\"I81\"95A\"53Q\"11!\"$-A!W+1!Q*Q!L*A!S.Q!Y/Q!^1Q!_2!!_31!_3Q!]2Q!]1Q!S1Q!S01!R/A!Q0!!Q/1!P11!M3A!V4A!X41!^51\"#6!\"!6!\",61\"-51\"+0A!_.Q!],1!V-1!V-A!X01\"(1A\"*0A\")0!\"%2Q\")8!\";?1\"NAA\"V=Q\"K7A\"60!!`.!![-!!Y,Q!\\.!\"&-Q\"70Q\"D1A\"R41#%5Q#/51#04Q#'4A##4Q#'5A#.61#06!#05Q#06Q#06!#041#&4A#%5A#*61#06A#06!#06!#06!#06Q#05Q#061#06A#05A#06!#.5A#-5Q#/6!#15Q#16A#16A#15Q#051#+5!#*6A#%5A#)5A#/5Q#061#06!#.51#)5!#&5!#&5!#&5!#(5!#'5!#*4Q#%4Q#%4Q#%41##4!#!5!#&5!#&4Q#$4A##3Q\"_4!#\"3Q\"`4!\"^41\"]3!\"\\3!\"\\3!\"Y4!\"]2Q\"Z3!\"X3Q\"V31\"]2Q\"[31\"W3Q\"\\3!\"Z31\"]31\"]3A\"_3Q\"`3Q\"`3Q\"`3!\"]3Q##41#\"41#\"5!#&5!#&5!#&4A#$4A#$5!#&5!#)61#&5!#/61#'5!#+5!#(5!#(5!#+5Q#/51#16!#161#15!#+61#$5!#(5Q#,5Q#061#06Q#06A#05Q#06A#05A#/5Q#/5Q#06!#061#05Q#06A#06Q#06Q#06A#06!#06!#06Q#051#/4Q#'4Q#-61#061#06!#051#061#06Q#051#.3Q##2Q\"R01\"J/!\"@/Q\"41A\"73Q\"86Q\"B;1\"N?A\"[AQ#%E!#'D!\"`AQ\"V=!\"H8Q\">61\"85!\"13!\"03!\"'-Q!],Q!R+1!O+!!J)1!J+1!S+A!S+!!N*Q!M*A!K+A!K,!!N,Q!P-Q![/A!_/1!T-Q!R-A!^,A!S+A!O*1!E*1!R.!!T01!`11\"*2!\".1Q\",2Q\"+1A\"'6!\"61\"W@A\"T:A\"I4A\"10Q!`-A!Z,A!X,Q!Y+A\"$-Q\"1.A\"=0A\"K2!\"U41#%5Q#06A#04A#*3Q\"`4Q#(6Q#05Q#06!#06!#061#06Q#05Q#04Q#.5A#/61#06!#05Q#06!#06!#06Q#06Q#06Q#06A#06A#05A#.6A#&51#-7!#*61#17!#161#161#15A#,5Q#)6!#(5!#+61#'5Q#/51#(6!#+5!#&4Q#&5!#&5!#&5!#&5!#&5!#)5!#&4Q#%41##4!#!3Q\"`5!#&5!#&5!#&4!#!3Q\"`31\"^2Q\"[31\"]2Q\"[2Q\"[3A\"[4!\"^31\"]3!\"]3Q\"Y2Q\"[31\"Z3A\"]3Q\"_3!\"[3Q\"`31\"Z3A\"_3!\"\\4!#!31\"^3A\"^3A\"_41#\"4!#\"41##4A#$41#\"41##5!#&4Q#%3A\"_4A#$5!#'51#+5A#'51#'5!#&5!#&5!#&5!#&5!#'61#-6!#,6Q#+6!#/5A#,61#(5A#&5Q#,6!#061#06Q#05Q#051#06!#.5!#)5Q#,6!#/6!#06A#06Q#06Q#06!#05Q#05Q#061#06Q#061#06A#05Q#06Q#06Q#06A#061#06!#06A#06Q#061#051#-4A#!21\"T0Q\"N1A\">11\"921\"831\":71\"A9A\"J3!\"'/!\"\"-Q!Y-!!X,A!Z,1\"\",1\"/-!\"6/A\"B1!\"O3!\"Y41#$5!#06Q#06!#051#,61#/6!#05A#05Q#051#05Q#061#06Q#06Q#06A#06A#06!#05A#05Q#+6Q#+61#-6Q#06Q#06!#061#05A#/5A#-5A#)51#,6!#/6Q#16!#151#151#/5Q#'5!#'5!#*6A#$51#)5Q#'6!#.5Q#*4Q#%41#\"41##4A#$4A#$4Q#%5!#&5!#&4!#!3Q\"_4!#\"3Q\"`3A\"_4Q#%3Q\"_3A\"_3Q\"`3Q\"^3A\"]3A\"]3!\"\\2Q\"[4!\"]3A\"^3A\"X3A\"Z31\"]3Q\"X31\"Y3!\"X31\"Y3A\"Z41\"^4A\"[31\"^4!\"^3Q\"[2Q\"[31\"]2Q\"[4!\"^4!\"\\4!#!3Q\"`5!#&4!#!41##3A\"_4!#!4A##4!#!5!#&6!#)7!#%5!#)5!#&5!#&5!#&5!#&5Q#*5!#+6A#(5Q#/51#*5!#+6!#)4Q#'51#,51#06Q#05Q#06!#05A#.7!#%4Q#+5!#-6!#051#06A#06Q#06!#05Q#06A#06!#05Q#06A#06!#06Q#06Q#06Q#06Q#06!#06!#05A#05Q#06!#06Q#06!#05!#-4!#%3!\"Z2!\"L0Q\"B1A\"91Q\"72A\"941\">6Q\"C:Q\"O=Q\"W@!\"_CQ#(CQ#)EA#'EQ#%AQ\"V?Q\"NQ\"O?!\"[A1\"X@!\"Z>A\"R9Q\"?4!\"00!\"#.1!]-A!Y-1!X,!!X+A\"!+A\",-Q\"5.Q\"<0Q\"L1!\"O1Q\"T4Q\"`5Q#+6A#06Q#06Q#06Q#06Q#05Q#06A#06!#05Q#061#06Q#06Q#06Q#05Q#05Q#051#-5!#*7!#&51#06A#061#06Q#05Q#051#051#)5A#)51#*5A#-6!#05A#16!#15Q#-61#)6!##5!#&5!#&5!#*51#+6!#'51#(5!#&4Q#$31\"]4Q#%5!#&4A##4Q#%5!#&5!#&4!#!31\"^3A\"_4!#!31\"]3Q\"`4!#!4!#!31\"]3A\"\\31\"\\3!\"X3!\"[3Q\"`31\"X3Q\"^31\"W3A\"Z31\"]3!\"Y4!\"]3Q\"Y41\"]3A\"V2A\"[2A\"Z31\"W2Q\"Z3A\"_31\"]4!#!31\"^3Q\"X31\"]3!\"\\4!#!5!#&41##3A\"_41##3!\"\\3A\"_4!#!4A#$41##4Q#*5!#(5!#&41##4A#$41#\"5!#%6A#&4Q#,5A#)5Q#-61#$5!#%4Q#%4Q#%5Q#+5Q#06!#06A#05Q#,5A#061#$51#%4Q#*6A#05A#05Q#06Q#06!#051#.5Q#-4Q#)51#-6A#06!#06A#06Q#06Q#06Q#06!#05Q#.3Q\"[2A\"Z4A#&6A#.7!#07!#16!#16!#15!#'4!#!2A\"W3!\"C2!\"@1Q\"81Q\"73Q\"861\"B7A\"D:A\"L<1\"S?1\"^A!#$BA#$DA#)E1#%E1#\"E!#\"D1\"YB1\"_AQ\"Z@A\"Y@!\"Y?A\"Q>1\"N>A\"O?A\"XA1\"W@A\"YAQ\"]CA##CQ#&BQ#$A!\"`=1\"R:!\"F7!\"<3A\".0Q\"$-Q!\\-1!X,A!X,Q!X+Q!X,1!]+!\"\"+Q\"0,A\"6-1\"90!\"H1!\"N11\"P2Q\"[3A#!6!#06Q#06Q#06Q#06Q#06!#06!#06!#05Q#-6A#+5Q#06Q#06Q#06Q#06!#05Q#05Q#-4Q#)6A#'4Q#16!#06Q#06!#06!#05Q#06!#$6A#%51#(6!#&6Q#+51#06!#.51#+5!#*5!#&5!#&5!#&5!#)6A#%51#(6!#%5!#'5!#&3Q\"`4A#$4!#!41#\"5!#&4!#!5!#&3Q\"`41#\"31\"^31\"^4!#!3!\"\\31\"^2Q\"[2Q\"\\3A\"Y3A\"_3A\"_2Q\"[4!\"\\31\"]31\"X3A\"[3Q\"\\4!\"X3A\"Y3!\"Y2Q\"Y3A\"X31\"X3Q\"^31\"]4!\"X2Q\"[3Q\"^3A\"_2Q\"[3A\"_31\"^31\"]31\"]3!\"\\2Q\"\\3A\"_41##41#\"4Q#%3A\"_3A\"_3Q\"`4!#!4A#$5!#&5!#'5!#*4A#$3A\"_3A\"_4Q#%5!#'6A#\"51#-5A#)51#'5!#&4Q#%4Q#%5!#&51#(5Q#.61#/5Q#.5Q#*5A#*4Q#*4Q#%5!#/5Q#06!#061#061#06!#06Q#(5!#.6A#&51#05!#05A#06Q#06Q#06Q#06!#06!#04Q#*1Q\"R11\"O2A\"Y3A\"^5!#-6A#06A#06Q#06Q#061#.5!#'3A\"]31\"Q3Q\"L2!\"C21\";1Q\";31\";31\";3Q\"<7!\"@8!\"@8Q\"B:!\"M!\"X>Q\"Y?A\"Z?A\"Z@Q\"Z?Q\"Z@!\"Z@1\"\\?Q\"Z?1\"W=!\"X51\"421\".0A\"'/1!`.A!]-A!\\-1!Y,Q!Y+Q!X*1!W)Q!Y*Q!`*A\"#*Q\"',!\"1-A\"9/!\"A0A\"J0Q\"M1!\"O2!\"V4A#&5Q#06Q#06Q#06Q#061#061#05!#/51#.6A#*61#05Q#06A#05Q#061#06A#05A#05Q#-5!#'51#)5A#-5A#,6Q#06Q#061#05Q#.4Q#+5A#)4Q#(5!#*5Q#+6!#,6!#+5Q#)6A##51#$4Q#%5!#&5!#&5!#&51#'51#(5!#&41##4!#!3A\"^4!#!41#\"41##4Q#%4A##31\"^41#\"3Q\"`2Q\"[4!#!31\"^3!\"\\3A\"_41#!3Q\"X31\"Z3!\"[3!\"[3A\"]3A\"[4A\"Z3!\"[31\"\\3!\"Z3!\"Z31\"Z3!\"Y3!\"X31\"X31\"^31\"W3Q\"\\31\"Y3Q\"Z3A\"Y3Q\"Y3Q\"`3!\"]31\"]31\"^2Q\"[3Q\"`31\"\\41\"]3Q\"`4A#$3A\"_4!#!41##31\"]3Q\"`4A##3Q#!5!#&5!#&5!#&41#\"4!#!41##3Q#!4A#'5!#&5Q#,6!#(5!#*4Q#%4Q#%4Q#%4Q#%5A#&5Q#)5Q#.5Q#.6!#%51#(4Q#%4Q#%5!#*5Q#051#06!#06!#06!#051#.4Q#-4Q#)5A#05Q#05Q#05Q#05Q#06Q#061#051#05!#(1Q\"R01\"I0Q\"M11\"P31\"]4Q#'5Q#06!#06A#06!#06!#05!#&4!#!3Q\"[3A\"T3!\"O3!\"E1A\"D1A\"=0A\";01\"<1Q\"81Q\"62A\"231\"131\"12Q\".2A\".1!\"00Q\"10A\",/1\"$/1\"$.1\"\".1\"\",Q!`.!!^-1\"#-A\"\"-Q!_.!!^,1\"!,!!_*A!Z*1!X(Q!W(1!Z(1![*A\"$+A\",,!\"2,1\"4-A\"9/A\"C0!\"H0Q\"M11\"P31\"^4Q#+5Q#05Q#06A#06!#051#04Q#.4!#%41#$4Q#,6!#+5Q#/5A#061#06Q#061#05Q#051#-5Q#%5Q#)6!#+61#*6!#05A#05A#04Q#.6!#&4A##41#\"4Q#&5A#+5A#*61#)5Q#)5A#%5!#&4A#$4A#$41#\"5!#&5!#(61#(5!#'4A##3Q#!3Q\"`41##3Q\"`3Q\"`4A#$3Q\"`4!#!31\"^2Q\"[41\"[31\"]3!\"\\4A##41\"^4!\"]31\"X31\"^2Q\"[3Q\"\\3!\"Y3Q\"U3Q\"\\3Q\"U3Q\"\\31\"Y3Q\"Z31\"W31\"W3!\"Y3!\"X21\"V3Q\"U3Q\"U3!\"\\2Q\"[3A\"]3Q\"W31\"\\31\"X31\"X3Q\"Y3!\"\\3Q\"`3Q\"X2Q\"[3!\"[4!#!3!\"]4!#\"31\"]3Q\"`2Q\"[2Q\"[31\"^3A\"_41#\"4A##5!#&3Q\"`4!#!31\"]4!#\"3!\"\\5!#&5!#'61#&51#*4Q#%4Q#%3A\"_41#\"4Q#%4Q#&51#)6!#.5A#/5!#(4Q#'4Q#%4Q#&4Q#'4Q#(5Q#-5Q#*5A#/5Q#06A#(5Q#'5!#+5!#-5!#/51#06!#05Q#06!#05Q#05A#05!#.1Q\"S0Q\"M0A\"K0Q\"L0Q\"K3!\"W3!\"Y4!#'5Q#(4Q#*4Q#)31\"]3!\"Y2!\"V1Q\"R0Q\"J01\"I/Q\"E/A\"E.Q\"@.A\"<.A\";.A\";/1\"6/!\"501\"501\"4/Q\"0/Q\"./A\"0/1\")/1\"(/1\"%.1\"$,1\"(,1\"\"+1!`*!!Z(A!W'A!W'1!R&Q!N&1!O&A!Q'Q!W(1!Y)1!_*1\"!*1\"\"*A\"\"+Q\"/.1\"=01\"H0Q\"M11\"P3Q#\"51#.61#061#06!#04Q#*4!#&2!\"W0A\"L2A\"X5!#+5!#.5!#/5A#06!#061#05Q#05!#04Q#,4Q#&5!#(51#*5Q#,61#-5Q#,5Q#,6Q#$4Q#)4!#\"4Q#%4Q#%51#(5!#(5Q#*5Q#+5!#,4!#\"41#\"31\"^3!\"]41#\"4A#$5!#&4A#%3A\"_4!#!3!\"]3A\"^31\"^4!#\"41##4!#!41#\"31\"^4!#!3A\"\\31\"[3!\"\\3Q\"]31\"Y2Q\"[3Q\"^3Q\"\\4!\"W3Q\"^3A\"V4!\"]3!\"[3!\"[3!\"[3!\"Z31\"[3A\"W31\"X31\"X3Q\"V3A\"V2Q\"Z2Q\"Y3!\"Y2A\"Y3A\"]31\"W3Q\"]4A\"V2Q\"[2Q\"Z3Q\"Y3A\"Y3A\"Y3A\"Y4!\"^3!\"]3!\"\\3!\"\\4!#!31\"]3Q\"`4!#!31\"]3A\"_31\"]31\"^3A\"^4!#!4A#$31\"^3Q\"`31\"^3Q\"`4!#!4Q#&41#&4Q#'4Q#(4Q#%41#\"3A\"^4A#$4Q#%4Q#%6A##51#-5Q#&6!#)5!#&4Q#%4Q#%4Q#%4Q#%6!#-5Q#-71#*5Q#05Q#,6!#&5A#$4Q#'4Q#+6A#'5A#05Q#05Q#05A#051#04Q#,21\"Y0A\"L0Q\"N/Q\"F0Q\"M0Q\"M1A\"Q2!\"P2!\"W21\"W2A\"Y1Q\"P1Q\"T0Q\"L/Q\"F.Q\"@-1\"9+A\",*Q\"%*1\"!*1\"!*!!`*!!`)!!\\)A!](1!Y(1!Y(!!X&1!S%A!S%A!S%A!S$A!R%A!O%1!M$A!J$1!J$A!J%1!K$!!I$A!J&!!N%!!K&A!L'!!N'1!O'1!O)!!V*!!^-A\"6/Q\"F0Q\"M21\"W3Q#%51#05Q#/6!#/4!#!2A\"Y1!\"O0A\"L0A\"K1A\"T4A#)6!#,6!#-5A#-5A#.4Q#.51#*4Q#)4Q#)4Q#&4Q#%5!#*5A#)5Q#.6!#,51#,5!#'4Q#&41#\"41##41##4Q#%5Q#(61#(5Q#)4!##4!#!4!#!41#\"3Q#!3Q#!5!#&5!#&4Q#%4A##3A\"_31\"]31\"^31\"^3Q\"`31\"]3Q\"`31\"^31\"^31\"]31\"]3Q\"]3!\"Z3Q\"`2Q\"[2Q\"[2Q\"[2Q\"Z3!\"Y3!\"Y3Q\"]31\"]3A\"Z3Q\"Y3A\"Y41\"]2A\"V3Q\"U2Q\"[31\"X31\"X21\"X3!\"U2Q\"S3!\"X3Q\"U2Q\"U3!\"Y31\"W2Q\"Z2Q\"[4A\"^4!\"Y3!\"]3A\"\\3A\"\\3!\"\\3A\"Y31\"^3Q\"X3!\"\\3A\"V3!\"\\4A\"]3!\"X3!\"X31\"]3A\"_2Q\"[3Q\"`4A##3Q\"`4!#!3A\"_3A\"_2Q\"[3!\"]4!#!41#\"4Q#$4A#$4Q#%41##41#\"31\"^31\"]4!#!4Q#$5A#)5!#,6!#%5A#,4Q#%4A##4A#$3!\"]4Q#%4Q#*5Q#*51#+51#+6!#+4Q#(4Q#%4A#$2A\"Y2!\"T3A\"]5A#)5Q#,5A#+5Q#,5Q#,4Q#\"11\"Q0A\"J/Q\"E0A\"K0!\"G0!\"G/1\"C01\"J0Q\"M0A\"K0Q\"M1!\"O11\"P11\"O01\"I.Q\"@-!\"5+!\"&(!!T%!!K%A!D$1!A#1A>#1A>$1Q=#1Q>#1A>$!A=$!A=#AQ?#QAA$AA:#AAB$AA:#AQ?#A!<#A!;$A!4#1!9#A!6#A16#113#Q19&A!G)A!\\-!\"30A\"J0Q\"M1!\"N11\"P3A\"]31\"`31\"`11\"P0A\"K01\"J/Q\"E0A\"J0A\"K2!\"U4Q#&6Q#(6!#06Q#(5A#.6Q#'4Q#(4Q#*4Q#%4Q#%4Q#%4Q#(6A#'5A#+5Q#&6A#*51#$41##4A#$31\"^4!#!4Q#%4Q#'4Q#'4A#&4A#$4A#$31\"]3A\"_3Q\"`41#\"5!#&5!#&41#\"3Q\"`3!\"\\3Q\"`3Q\"`3!\"]3!\"]31\"]3A\"_3A\"_3A\"_3!\"]2Q\"Y3Q\"]3A\"V31\"]31\"W3!\"[3Q\"`31\"X4!\"\\31\"^3A\"W3A\"V3!\"X3Q\"[3!\"X31\"X3A\"V3!\"X2Q\"X21\"X31\"U3!\"T1A\"S2Q\"W2Q\"Z2!\"U3!\"W21\"U31\"T31\"W3A\"W31\"X31\"X2Q\"Z3Q\"Y31\"Z4!\"W3!\"]31\"[4!\"[31\"Y41\"]31\"]41\"Y3A\"_3!\"\\2Q\"[4!\"Y2Q\"[3A\"]3A\"_31\"^3A\"_3A\"_4!#!4!#!31\"]41\"`31\"]3Q\"`41##4Q#%4Q#%41##3A\"`41#\"4!#!31\"]3A\"_41#\"4A#&51#*4Q#(4Q#&4Q#$3Q\"`4A##4!#!4Q#$51#'5!#&5!#+5A#*5Q#*4Q#)4Q#(3Q\"_/Q\"F/Q\"E1!\"M21\"V41#!5Q#(5Q#,5Q#,4A#&2A\"Y1!\"N0!\"H0!\"H/1\"B+Q\"**A!`*Q\"\"+!\"%-!\"5.Q\"?/A\"D/A\"D/A\"D/A\"D/Q\"F/!\"?+Q\"+*1!Y(1!R&!AK&1Q@$AQ;#AA8#!!:#Q!9\"A!:\"A!9#1Q8\"!!1\"!11\"1A5\"112#!!2#Q!2\"A!1\"!!1#!14#AQ4#1!;'!!O*A\"#-Q\"8/Q\"F0Q\"M0Q\"M0Q\"M0Q\"M01\"I1!\"N0A\"K01\"I0!\"H/Q\"E01\"I0A\"K11\"O3A\"^4Q#+5!#*6!#+5Q#-4Q#(4Q#'4Q#'4Q#%4Q#%4Q#%4Q#%4Q#%4Q#(51#&51#'51#&4!#!3A\"_3Q\"`41#\"41#\"4!#!4Q#%4Q#&4Q#&4A##41##3A\"^3A\"^4!#!3A\"_4A#$4!#!41##4!#!3Q\"`31\"Z3A\"Z3A\"^3!\"]31\"^31\"^4!#!3A\"^41\"Y3Q\"^3!\"[3!\"[31\"X3A\"[41\"`31\"Z3A\"Y31\"Z31\"Y4!\"[31\"[41\"X31\"X3A\"Y2Q\"Y2Q\"W21\"W2Q\"Z2Q\"Y1Q\"T3!\"S3!\"S1Q\"T2!\"U2Q\"T2A\"X3!\"U3!\"Y3Q\"U2Q\"[31\"W2Q\"[3Q\"U3!\"Y31\"]3Q\"Z3Q\"Y3Q\"`3Q\"X31\"^3!\"]3Q\"Y2Q\"[31\"^2Q\"[31\"]3A\"_3Q\"`3!\"[3Q\"[3!\"]4A\"\\3Q\"`3Q\"_3Q\"`3A\"_3A\"^3Q\"Z3Q\"`2Q\"[4!#!4!#\"4A#$3Q#!41#%4A#$3Q\"`3A\"^3A\"^3Q\"_3Q\"`3Q\"`4Q#'4Q#'4Q#%4Q#%4!#\"4A##3Q\"`3Q\"`4Q#%4Q#%4Q#)5Q#)6!#\"4Q#)5A#)41#!11\"P/1\"C/Q\"E0!\"G1!\"M2Q\"Y41\"\\51#*4Q#*2A\"X1!\"O0Q\"M01\"J01\"J,1\"-*!!\\)!!V)!!V(!!S'A!P'A!P'A!P(!!V(Q![)A!Y(A!S'A!P'A!P'!!K%A!C#Q1;#!A3#1Q1\"!17#115#1A1\"!11\"1A6\"Q15#1A.!QQ4\"112\"Q!1\"1!0$A1E%Q!J)!!Y-!\"3/!\"@0Q\"M01\"I0Q\"M0Q\"M0Q\"M0A\"K0A\"L0!\"G/Q\"E0!\"G0!\"G0!\"G0!\"G/Q\"E1A\"Q3Q##4Q#)4Q#%5A#+61#'5!#)4Q#%41#\"3Q\"_4A##4Q#!4!\"_4Q#%4Q#%4Q#,61#\"4Q#)3Q\"_3Q\"`3Q\"`41#\"31\"^3Q\"`4Q#%4Q#%4A##41##3Q\"`3!\"\\3A\"^3!\"]3!\"]3Q#!4!#!4!#\"4!#\"31\"]31\"]2Q\"[4!\"Z3!\"]3!\"]3Q\"_3!\"]3!\"]31\"^3A\"]31\"X3Q\"]3Q\"[3!\"]3!\"[3Q\"[3A\"W3A\"^4!\"Z31\"W2Q\"[3!\"Y3!\"Y3A\"W3A\"W2Q\"T21\"X3!\"T3!\"Y21\"T2Q\"U2A\"X1Q\"S2!\"V2!\"Q2Q\"S2!\"S21\"R1Q\"R2Q\"X2A\"U2A\"W3Q\"U3!\"X3A\"V31\"W2Q\"Z2Q\"Z3Q\"X3!\"[3A\"W3A\"[3!\"Y4!\"\\3Q\"[41\"`3Q\"W2Q\"[3A\"W2Q\"[3Q\"Y2Q\"Z2Q\"Z2Q\"[3!\"]3!\"]31\"]3Q\"`3!\"\\3!\"\\3!\"\\2Q\"\\2Q\"[31\"^3Q\"_4!#\"4!#!3A\"^3Q#!3Q\"`3!\"\\3!\"]31\"]4A##4Q#%4Q#%4Q#%41##4Q#%41##3A\"^4!#!41#\"4!#!5!#&41#%4Q#)4Q#%4Q#%4A##1A\"R/Q\"F/!\"@/!\"A/1\"A/!\"A0!\"G0!\"H0Q\"L1!\"N0Q\"M0A\"K0A\"J0!\"G/A\"D-!\"2*A\"!)1!X&Q!K&1!?#Q14\"AA/$111#1Q2#1Q1\"QA/\"QA/#1A/\"1A0#AA5\"AA4\"1Q5#!A.\"!11\"!!.#114\"1!2$!A6$!A@$1A;%11C(Q!T)Q!]+A\"*/1\"D/A\"D/Q\"F0Q\"L0!\"H0A\"K/Q\"E/1\"B.1\";-Q\"7-Q\"7/A\"D/Q\"F/!\"@/Q\"F/Q\"F0Q\"M3A\"_4Q#'4Q#(4Q#&4Q#%4!#!3A\"]11\"P01\"I2A\"Y4A#$4Q#%4!#!4Q#%4Q#%4Q#%4A#%4!#\"3Q#!3Q\"`4!#!31\"^41##4A##4A##41#\"41#\"3Q#!3Q\"`3!\"]3Q\"`3!\"\\3Q\"`3A\"_3Q\"`4!#!3Q\"_3!\"\\3A\"Z31\"^31\"\\3Q\"]3!\"\\3A\"Z3Q\"`3A\"[4!\"Y3!\"\\31\"Y31\"W3!\"[3A\"Y31\"X3A\"Z3A\"W31\"[4A\"X3!\"Y3A\"W3Q\"U4!\"]31\"X3!\"Y3!\"Y3!\"X31\"U1Q\"S31\"R2A\"V31\"U1Q\"T1A\"S11\"Q21\"Q2!\"V31\"T2Q\"W2!\"S2A\"W21\"T2A\"V2Q\"Y31\"X2A\"Z2Q\"Z3!\"X31\"W3A\"Y41\"]31\"W4!\"X3!\"Y3A\"V4!\"X3!\"Y2Q\"Z3A\"_31\"]4!\"X3Q\"_3Q\"W3A\"^31\"]3A\"_41\"\\3Q\"_31\"\\41\"]31\"Z4A\"\\31\"\\41#!3A\"_4!#!3A\"_41#\"4Q#%3!\"]3!\"\\3Q\"`31\"]31\"]3Q\"`3A\"_4Q#%4Q#%4A##4!#!41##41#\"31\"^31\"^3A\"^41##4!#!4Q#%4Q#%4Q#%4Q#%4A#$2A\"W/Q\"E0!\"G/1\"B0!\"H0!\"H/1\"C0!\"G/A\"D/A\"D0Q\"L0Q\"M0A\"J0A\"K0!\"G/Q\"F.!\"9+Q\"))A!Z'A!P&11G\"QA6$1A4\"1!7\"AA4\"QQ1\"1A0\"!14\"1!1\"AA1\"!Q5#!A.!Q!5$1Q?%1!B&Q1K'!1O(A!T)!!V)!!V)1!X+!\"&-!\"6-1\"9,Q\"3+A\"'+1\"&+A\"'+A\"'+!\"#*A\"!)A![)1!X*Q\"#.1\"<0!\"H01\"I01\"I1A\"R41#\"4Q#%4Q#$4A#%4!\"X11\"P0Q\"M/1\"B/!\"@1A\"R31\"]3Q\"`4Q#%4Q#%4Q#%4!#\"4A#$3Q\"`3A\"_3!\"]3!\"\\3A\"_3A\"_4!#!4Q#%41##4!#\"4!#!3!\"\\2Q\"[3Q\"Y3!\"[3!\"]3!\"\\41#\"31\"]2Q\"[31\"\\41\"]4A\"\\31\"W3A\"[3!\"Y3!\"\\4!\"]3!\"\\31\"Y2Q\"[3Q\"X3A\"Z31\"^3Q\"W31\"Z4!\"\\3Q\"[4!\"Z3!\"Y3!\"Y3!\"Y31\"W3Q\"U31\"X4!\"T2Q\"X3!\"Y2Q\"X1Q\"T1Q\"T2A\"V31\"S1Q\"T2!\"V11\"P1Q\"T11\"P1Q\"T1Q\"T1Q\"T21\"Q21\"X1Q\"T2!\"W1A\"R3A\"W2A\"R2Q\"T3A\"V3A\"W2Q\"[3A\"W2Q\"[31\"W3A\"W2Q\"[2Q\"Z3Q\"[3Q\"Y3Q\"Y3Q\"\\3!\"X31\"W3!\"Y3!\"X3Q\"Y3A\"Y2Q\"[3!\"\\3Q\"Y3!\"\\3!\"[31\"W3!\"Y3Q\"T3!\"\\3!\"\\3Q#!3Q\"`3Q\"_3Q#!3Q\"`31\"]3A\"Y3!\"]31\"^3A\"^31\"]3!\"]4A#$4A#$4A#$3Q#!4!#\"41#\"3!\"]3!\"[31\"X4!#!4!#\"41#\"4Q#%4Q#%4Q#%4Q#%11\"O/A\"C/Q\"F/1\"B/1\"B/1\"B/1\"B/1\"C/Q\"F/1\"B0!\"G0A\"K0!\"G01\"I01\"I/A\"C/A\"D-1\"4+Q\")*!!](A!T'!!E%11>$A1=#117#110\"QQ3\"112\"!!1\"!13#A1.#Q15%!!>&A!D%A1C&QAH&Q1K'1!K'A!M'A!M'Q!R&Q!N'Q!R)!!V)!!V(A!T(Q!U)!!V)A!Z+1\"'-1\"4/Q\"F0!\"G/Q\"E0!\"H2!\"V3!\"[2Q\"X1Q\"S01\"J/!\"@/A\"D.Q\"?.Q\"?/A\"C2A\"W4A#$4Q#%4Q#%4Q#%4A#$3Q#!3Q\"`3!\"\\3Q\"`2Q\"[3A\"_3Q\"_31\"^3A\"_4Q#%4!#!31\"]3A\"^2A\"Z31\"^31\"^2A\"Z3Q\"^41\"_3Q\"_3!\"\\3Q#!3!\"]3Q\"Y2Q\"Z2Q\"[2Q\"[3A\"\\3!\"Y2Q\"[2Q\"[3Q\"[31\"Z4!\"X3A\"[4!\"W31\"]3!\"\\3Q\"Y2Q\"[3A\"W31\"W2A\"U3!\"Y3A\"W3A\"W2Q\"[2!\"U21\"X21\"R2A\"W1Q\"S1Q\"T1Q\"T1Q\"T1Q\"U11\"P1!\"O1Q\"T11\"P11\"P1!\"O1Q\"T1Q\"T1Q\"P1A\"Q2A\"Q21\"U1Q\"T2!\"S3!\"V2!\"U2A\"X2Q\"Z3A\"V3A\"V2Q\"[2Q\"Y3!\"Y31\"X31\"W3A\"V3Q\"V3!\"Z2Q\"[3!\"Z3A\"]31\"\\4A\"_3Q\"W3A\"Y4!\"[31\"[2Q\"Z3!\"\\2Q\"\\2Q\"[2Q\"[3!\"]31\"Y3A\"Z3!\"Z3!\"\\4!#!4!#!31\"^3A\"_31\"\\2A\"Z3A\"]3A\"]2Q\"[3A\"_2Q\"\\3Q\"`41##4A#$31\"^4!#\"3Q\"`3A\"_21\"V/Q\"F0Q\"K2A\"X3!\"[3A\"^4Q#%4A#$41##3A\"]01\"I/1\"C/!\"@.Q\"?/Q\"E.1\"=+A\"+*Q\"&,1\"1-A\"7.1\";.!\":-Q\"7.1\"<.1\"<.1\"=/A\"E.1\"<,Q\"2)A!Y(Q!V)!!V(!!Q(!!P'!!M%Q1J%A1?#QQ?#Q!9\"1!5\"1A/\"1A/\"AA2\"!11\"!12\"QA1\"AA0#A11$!17&1!>&A!M(1!T(!!S)1!X*1!_,1\"-.!\":/A\"D/1\"C/Q\"F/A\"D/Q\"F/1\"B/A\"D/A\"D0!\"G0!\"G/1\"C.Q\"?/!\"@/!\"A2!\"U3!\"[4Q#%4!#!41#\"41##3A\"_3Q\"`3!\"\\3!\"Z4!\"]41\"]3A\"^4!#!4!#!41#\"3Q\"`3!\"\\31\"^3!\"]31\"[41\"Z3Q\"W3!\"]31\"^31\"]31\"\\3!\"\\2Q\"[3!\"[4!\"]3A\"W4!\"\\3A\"X4!\"[31\"[31\"Y4!\"\\3!\"Y3A\"[2Q\"Z3!\"Y3!\"X3!\"Y3A\"X3Q\"V31\"Y2Q\"[3!\"Y31\"W2A\"W2Q\"Y2!\"V1Q\"S31\"V2A\"W31\"T1Q\"T1Q\"S1Q\"Q1Q\"T1Q\"P1Q\"T1Q\"U1A\"S2Q\"Q11\"Q11\"Q1A\"R1A\"Q1!\"O11\"P2A\"V1Q\"R1Q\"T11\"P1Q\"T3!\"V2A\"R3!\"U21\"S2A\"V2!\"V1Q\"U2Q\"S3!\"X3Q\"U2!\"V31\"X2!\"W2Q\"X4!\"T41\"V3Q\"W3!\"X3!\"Y3A\"V2Q\"[31\"X31\"W3A\"[3Q\"]3Q\"X2Q\"\\2Q\"[31\"Z4Q\"Y3!\"X3Q\"[41\"W3Q\"^2A\"Z3A\"_31\"^31\"^31\"]2A\"Z3Q\"]3A\"]4!\"[3A\"^3A\"_31\"]2Q\"[3A\"_4Q#%4!#!3Q\"`3Q\"`2A\"Z0Q\"M.Q\"?/A\"E/Q\"E0Q\"L11\"O21\"V3!\"]4Q#$3Q\"`1Q\"T/Q\"E/A\"E.Q\"?.Q\"?-1\"4*1\"\"(!!R(!!R)!!V)!!V)!!V)!!V)A![)A!`*A\"#*A\"#)Q!\\)1!X)!!V)!!V)!!V(A!T(Q!U(1!S'Q!R)!!V'1!P&!!J$!!>#!!3\"!15#A14!QA2\"Q16%A1A%Q1E'A!N(Q!U(A!T*!!]+Q\",-1\"7/A\"E/1\"B/Q\"E/A\"E/A\"E/A\"C.Q\"?/!\"A/1\"B.Q\"?.Q\"?/1\"B/1\"B/1\"C.Q\"?/A\"C2Q\"Y3!\"\\3Q\"`4!#!4!#!3A\"_3!\"]3!\"]3A\"_4!\"Y3!\"X3A\"^2A\"Z3Q\"`3!\"]3!\"]3A\"^3Q\"`2Q\"[4!\"Y3Q\"Z3A\"W31\"]2Q\"[3A\"_31\"^2A\"Z2A\"Z4!#!4!\"Y3A\"[2Q\"Z31\"X3A\"_31\"X2Q\"[2Q\"\\3A\"Y3!\"]4!\"X41\"W3A\"V3A\"V31\"X2Q\"[2Q\"[2Q\"Y3Q\"U3!\"X3A\"V2!\"W31\"T31\"T2Q\"U2Q\"W2A\"Q1Q\"R11\"Q21\"Q2!\"R2A\"T1A\"P2Q\"U11\"Q1A\"R1!\"N11\"Q11\"Q1Q\"T1!\"O1A\"R11\"Q1Q\"S11\"Q1A\"R1Q\"T3!\"R21\"Q11\"Q1Q\"U1Q\"T1A\"Q21\"Q1Q\"T21\"X21\"X2A\"W21\"T2A\"V2!\"R31\"W2A\"Y2A\"X2Q\"Z2Q\"Z31\"W31\"\\3!\"Y3Q\"U3Q\"U2Q\"Z3Q\"T31\"X3Q\"Z4!\"W3Q\"\\2Q\"[31\"\\3!\"\\3A\"]3!\"X4!\"X4!\"Y3A\"\\3!\"Z3!\"]3Q\"`3Q\"_3!\"\\2Q\"[2Q\"Z3Q\"W3A\"Z4!\"\\3!\"]2A\"Z3!\"]4!#!3A\"_3!\"\\4!#\"31\"]1Q\"U01\"I/1\"B/!\"@.Q\"?/!\"@/Q\"F/1\"B0Q\"M11\"Q0A\"L/A\"C/A\"E.Q\"?.Q\"?.Q\"?.!\";+A\"))1!Z)!!V(!!R(A!T(A!T(A!T(!!R(!!R(!!Q&A!I'!!K&11H%11C'!!H&A!D%1!B$A!7\"!Q.%Q!8$Q1<%11=$QA;&A!B'Q!Q(Q!U(!!R(!!R)!!X)A!^+A\"(.Q\">/!\"A/1\"C/!\"@/!\"@/1\"B/!\"@/!\"@/1\"C.Q\"?.Q\"@.A\">.Q\"?/1\"C/1\"B.Q\"?/!\"@/1\"C1Q\"U3A\"^41#\"41#\"4!#!31\"]3A\"^3A\"Z2A\"U3!\"V3A\"V2Q\"[3!\"\\3!\"\\31\"]4!#!31\"^3Q\"`4!\"\\31\"]4!\"\\31\"]3!\"\\3!\"\\3A\"Z4!\"\\31\"Y4Q\"[4!\"^41\"[4!\"T3!\"Y31\"W4A\"Z31\"X3A\"V4!\"\\31\"^3Q\"V3Q\"]3A\"V2Q\"Z21\"X31\"X2Q\"Z3A\"V3A\"V21\"X31\"U2A\"Y21\"X21\"V2A\"T21\"V2!\"V1Q\"T21\"X1Q\"T2!\"U2Q\"P1Q\"T1Q\"T1Q\"T1Q\"U11\"O2Q\"Q1A\"Q2Q\"R11\"Q1Q\"S0Q\"L1A\"R1!\"N1A\"S1Q\"U11\"Q1A\"R11\"P1A\"S21\"S2!\"V1A\"Q1Q\"S1Q\"T21\"T11\"P2!\"V1A\"P21\"V2!\"S3Q\"U2A\"X2!\"V2A\"X1Q\"T2A\"S3!\"Y2!\"V4!\"V3!\"Y2Q\"Y3Q\"U31\"W2Q\"Y2Q\"Z3!\"Y3!\"Y3!\"X2Q\"[4!\"X3A\"Y3A\"[31\"Y4!\"]4!\"T4!\"W3!\"Y3Q\"X4!\"]3Q\"[3!\"[2Q\"\\2A\"Z31\"Z4Q\"[3!\"Y4!\"X3A\"]3Q\"W2Q\"Z3A\"_2Q\"[31\"^3A\"^31\"^21\"X0A\"L/1\"B.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/1\"B0!\"H/!\"@/1\"C/A\"D/Q\"E/!\"@/Q\"E.Q\"?.!\":-1\"4+!\"$)A!Z)!!W'Q!R(A!T(A!T&1!K%A!@#Q18\"AA2\"AA0#11<$A!@'A!K&Q!H'A!K'A!N(1!S)!!V(Q!U(1!S'1!P(A!T(1!S(1!S)Q!],!\"2.!\":.1\";/!\"A.1\";,1\"1+!\"$+!\"$*A\"\"*A\"!*Q\"$)A!^*A\"#.!\":.Q\"?.Q\"?/!\"A/1\"B11\"Q2!\"V4!#!4!#\"3Q\"`2Q\"Z2Q\"Z1!\"N0!\"G0!\"D01\"J2A\"Y3Q\"^3!\"[3Q\"_31\"]31\"^2Q\"[3!\"Z3Q\"Y3A\"Z4A\"[3!\"Y4!\"X3Q\"Y3A\"Y3Q\"W2Q\"[2Q\"[31\"[2Q\"Y3A\"W2Q\"Z3A\"V2Q\"[31\"Y3Q\"^31\"]3A\"Y2Q\"Z2Q\"Y3!\"Y3!\"S21\"W21\"X31\"W31\"W31\"X3Q\"T3!\"U2A\"X1Q\"S1A\"S1Q\"R21\"T2!\"U1A\"Q21\"Q2!\"Q11\"P11\"P1Q\"T11\"P1!\"O11\"P1A\"Q1A\"R11\"Q11\"Q1A\"Q1A\"S11\"Q11\"P1!\"O11\"Q11\"P11\"P11\"P11\"P1Q\"T1A\"R1A\"Q1!\"N1A\"R11\"Q1Q\"S1Q\"T1Q\"T11\"P2Q\"U21\"V1A\"R21\"X2A\"Q1Q\"T2!\"R21\"R21\"X1Q\"T2Q\"T3!\"Y3Q\"U31\"W31\"W31\"X3!\"X3Q\"U2Q\"[3A\"V3Q\"U41\"Z31\"^31\"W3!\"[41\"X2Q\"Z2A\"Z3!\"Y3A\"V31\"X3!\"X3Q\"\\41\"W31\"[2A\"Z31\"^2A\"Z3Q\"\\3!\"X31\"X3!\"\\3Q\"Y3!\"]3Q\"_31\"X2A\"Z31\"^3Q\"\\3A\"\\21\"W0!\"I.A\"=.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F/!\"A.Q\"?.Q\"?/A\"D/1\"B/Q\"F/1\"C.Q\"?.Q\"?.A\"=,1\".+1\"()A!['Q!Q(A!U(Q!U)!!V'1!M&Q!A%Q1D&!!E%A!C%Q1D&A!N'Q!Q'A!Q'A!Q(!!S(1!S)!!V(1!S)!!V(Q!U(A!U'A!Q(Q!U)!!V(1!S(1!S(1!S(1!S)!!V'Q!R'A!Q)1!Z,1\"-.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F1Q\"T2Q\"Z21\"V0Q\"M0Q\"M/Q\"F.Q\"?/A\"D0!\"H/!\"A0Q\"M3!\"\\2A\"Z4!\"Z3A\"]31\"X2A\"Z4!\"[3Q\"`3!\"[3Q\"[3A\"X2A\"Z3Q\"\\3Q\"]3Q\"[3!\"[3Q\"Y3Q\"\\3!\"Z3Q\"[2Q\"Z31\"W3!\"X3!\"X31\"X4A\"[41\"W3Q\"U3Q\"U3Q\"U3!\"X2A\"T31\"W2Q\"R1Q\"T2A\"Z31\"W2Q\"[2A\"Z1Q\"T1Q\"T3!\"T1Q\"T1Q\"T1Q\"T1A\"R1A\"R1Q\"T1Q\"T1Q\"T1Q\"T11\"P1Q\"T11\"P11\"Q1A\"R1!\"N1A\"R2!\"M0Q\"M1!\"N0Q\"M1!\"N1!\"N1A\"Q1!\"N1!\"N11\"P1!\"N1!\"N1!\"O1!\"O1Q\"T1!\"O1A\"R11\"Q1!\"N2A\"T2A\"U1A\"R1A\"R1!\"O1A\"R2Q\"V2A\"Q21\"X1A\"R2A\"R2A\"U21\"W2A\"X2A\"X31\"X31\"X2Q\"Z3!\"Y2Q\"Z21\"T2!\"U31\"U31\"W41\"U31\"Y31\"[3Q\"\\31\"]4!\"Y2Q\"Z31\"X31\"W31\"X3!\"X3!\"Y4!\"]3A\"V4!\"]31\"X31\"]31\"\\3A\"]3Q\"]3A\"Z41\"[4!\"U2Q\"Z31\"[4!\"Y3!\"[3!\"[3!\"\\2A\"Z3!\"S/Q\"F/!\"A/A\"D0!\"H0A\"J1!\"O1!\"O0A\"L/A\"C.Q\"?.Q\"?.1\"<.!\":.!\":.1\"=/A\"F.Q\"?.Q\"?-Q\"9,Q\"3*A!W(A!T(1!S(Q!U)!!V'Q!Q(A!T(!!P(!!P(!!S'A!Q'A!Q&A!I&!!>%Q!B&A!I&A!M'A!P(A!R)!!V)1!V(1!T)1!X)1!X)!!X(Q!V)!!W)A!]+!\"&.Q\"?.A\".1\"=.!\";,A\"5,A\"3-!\"+*A\"#*!!^)1!W(A!T)!!V)!!V)!!V(Q!U(Q!U(A!T(Q!U(Q!U)!!V*Q!X)!!Y*!!^*!!_)Q!^)Q\"\"*!\"%,!\")+1\")+Q\"),!\"-+!\"'*A\"#*A\"#,Q\"0-!\"2.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F0A\"K2!\"M2!\"O3Q\"R4!\"T3!\"X2A\"T1!\"O1Q\"T2A\"Z2A\"Z2A\"Z3A\"_3A\"_3!\"Y3!\"Y4A\"V3A\"[3!\"Y3!\"Y3!\"Y3!\"X3!\"\\4!\"Y4!\"Y2A\"Z3Q\"Y3!\"Z2A\"Z3A\"V2Q\"Y3!\"U3A\"V31\"X31\"X2Q\"Z31\"W3A\"V2A\"S3A\"V2!\"V1A\"R1A\"R1Q\"T1A\"R21\"W2A\"T21\"R2A\"S2!\"U2!\"V11\"P1A\"R1Q\"T2Q\"U1A\"S1A\"R11\"Q11\"Q1!\"O11\"P1Q\"T1!\"O1!\"O1!\"O1!\"O1A\"R11\"P1!\"O11\"Q0Q\"L1!\"N1!\"N1!\"N"; +static unsigned char +palette_data[] = { 4,2,2,4,110,178,32,4,122,4,36, +86,15,3,66,4,58,127,36,8,186,4,34,122,17,2, +34,4,19,66,12,4,162,90,2,69,88,2,48,7,20, +2,25,2,103,8,14,48,4,58,186,90,3,154,82,2, +129,55,2,34,17,2,18,17,34,191,94,2,101,57,2, +70,7,32,154,12,22,157,17,3,50,4,88,150,96,3, +186,86,2,138,87,2,86,212,214,210,4,19,98,52,2, +154,15,11,2,4,132,216,7,18,125,12,6,82,37,12, +18,4,88,189,86,14,48,128,2,157,32,4,138,4,60, +155,4,48,126,60,2,218,7,10,52,13,12,66,129,2, +50,56,2,52,52,14,98,4,47,157,6,20,87,48,2, +24,58,2,101,120,2,141,52,5,170,4,113,215,127,2, +73,4,90,210,4,52,112,36,18,194,59,2,85,42,2, +10,107,2,173,95,2,114,31,3,52,4,79,160,84,3, +189,14,10,40,30,2,69,96,2,58,113,2,126,9,37, +231,17,33,170,28,14,2,4,30,146,68,10,37,132,2, +82,23,4,7,4,10,122,4,36,108,32,2,37,7,27, +2,4,98,175,84,10,146,4,101,191,4,14,146,8,29, +86,4,2,170,8,60,230,84,10,162,72,2,39,102,2, +142,4,142,221,4,49,143,68,12,170,4,124,213,15,4, +74,114,2,69,112,2,158,32,3,23,8,50,190,111,2, +104,6,40,154,96,2,210,6,28,104,60,2,138,61,2, +25,68,2,114,58,2,125,39,2,114,73,2,69,16,4, +58,4,88,177,56,14,26,138,2,173,4,68,176,71,2, +55,76,2,210,4,78,130,17,3,42,6,27,69,112,2, +49,12,26,178,47,13,159,18,11,10,13,11,74,141,2, +58,52,18,234,4,82,186,4,126,198,4,103,213,4,62, +206,4,72,226,12,46,210,72,12,222,12,26,146,20,34, +210,4,113,197,4,131,229,4,48,170,4,76,170,7,43, +95,52,30,218,15,11,170,52,14,202,12,14,86,4,40, +174,108,14,202,156,2,186,60,12,130,5,40,129,73,13, +189,12,42,138,44,14,202,4,59,143,4,124,229,4,69, +191,4,69,157,4,60,114,4,43,110,14,14,58,20,26, +157,28,26,210,4,87,162,4,91,202,4,110,226,4,98, +226,4,101,202,17,14,186,28,18,18,60,2,234,28,10, +114,4,30,114,8,10,162,12,54,186,20,26,130,100,10, +170,40,18,154,4,22,114,28,26,234,4,22,58,4,66, +226,4,54,202,12,42,202,4,38,98,4,145,234,4,76, +146,4,94,148,4,138,213,4,94,186,4,54,126,4,54, +154,4,118,211,4,106,178,4,106,188,4,54,142,4,94, +170,4,70,202,4,118,197,4,54,173,4,82,178,72,4, +172,36,10,138,76,14,162,4,98,210,4,118,226,112,2, +114,24,19,8,30,2,85,84,6,226,141,2,73,28,30, +10,28,46,186,112,4,206,36,10,90,36,2,174,108,2, +58,41,3,130,44,10,194,9,33,130,92,2,162,51,2, +42,12,32,162,81,3,146,44,11,26,28,6,146,44,2, +178,30,12,10,60,10,178,64,2,146,28,10,178,92,10, +210,5,41,146,40,2,102,96,2,125,100,2,88,74,2, +157,142,2,159,26,10,55,143,2,50,73,2,102,134,2, +142,73,2,84,127,2,126,142,2,82,156,2,178,28,10, +158,28,26,114,84,14,202,12,4,10,5,20,74,17,2, +26,92,2,194,7,19,106}; + +static unsigned char header_data[] = { 71,99,218,218,99,11,71,218,71,71, +218,99,99,99,71,99,218,99,99,99,99,218,71,218,99,218,218,99,99,218, +218,99,99,218,99,218,99,58,218,99,99,99,58,218,99,99,99,58,99,58, +99,58,11,58,99,58,58,11,99,58,99,58,99,99,99,218,99,218,99,58, +99,71,99,218,71,12,12,12,12,12,12,12,12,12,92,19,19,19,92,92, +92,92,19,108,19,19,19,19,19,19,53,53,53,53,101,19,19,53,53,19, +19,19,12,92,92,12,12,12,71,71,218,99,218,218,71,71,12,12,218,99, +58,58,58,99,99,99,58,99,99,99,11,58,11,58,58,99,58,99,99,99, +58,99,99,99,99,58,99,99,99,99,99,218,99,99,11,99,99,99,11,99, +99,218,218,218,99,218,99,99,218,218,99,99,218,99,218,218,99,99,218,11, +218,71,99,218,99,218,218,99,71,8,218,99,218,218,99,99,99,99,99,99, +218,218,99,99,218,99,218,99,218,71,99,99,99,218,99,99,218,99,99,99, +218,218,99,99,99,99,58,99,58,30,99,99,99,99,99,99,58,99,99,58, +99,58,99,58,99,99,58,58,58,99,58,58,99,218,218,71,99,99,71,71, +71,123,12,118,71,71,12,71,123,12,12,19,19,19,53,19,19,53,53,19, +19,53,101,63,20,63,20,63,53,53,53,101,53,53,53,19,53,53,53,19, +92,12,12,12,71,12,12,12,12,12,92,71,218,218,71,218,71,71,71,71, +99,218,58,58,58,99,99,99,99,58,58,58,99,58,99,58,58,99,58,58, +99,99,58,99,99,99,99,58,99,58,30,99,99,99,218,99,58,99,99,58, +11,99,99,218,99,218,218,99,99,218,71,99,218,99,99,218,99,99,218,99, +11,218,99,218,99,11,218,99,99,8,71,71,71,99,218,71,218,99,71,218, +11,99,218,218,99,218,99,218,99,99,99,99,218,99,99,99,99,99,218,99, +99,99,99,99,99,11,99,99,99,99,99,99,58,99,58,99,58,99,58,58, +99,11,58,58,99,58,99,99,58,58,218,99,123,71,71,71,123,71,71,218, +99,99,218,71,12,12,12,12,92,19,19,53,19,53,53,53,53,19,53,53, +53,53,19,53,19,53,53,53,53,53,63,63,101,63,63,20,53,19,53,53, +53,19,92,92,12,12,12,71,71,71,71,12,12,71,71,12,12,12,12,12, +12,218,218,99,58,58,99,58,99,58,99,58,99,99,58,218,58,99,58,99, +99,99,99,11,58,99,99,58,99,99,58,58,99,99,99,99,99,99,99,99, +99,58,218,99,218,99,99,99,218,99,99,218,99,11,218,99,218,218,99,99, +218,99,218,11,99,71,99,218,71,8,99,99,218,99,99,99,218,99,99,218, +218,99,11,99,99,218,99,218,99,218,218,99,58,99,99,99,58,11,99,99, +58,99,99,58,58,58,58,99,99,99,99,218,58,99,99,99,58,58,99,99, +58,58,99,58,99,58,99,99,58,58,99,218,71,71,218,218,218,58,58,58, +218,99,71,123,12,12,12,19,19,108,108,108,92,92,92,12,71,12,12,92, +19,53,53,53,101,53,53,19,53,101,53,20,53,79,79,0,34,79,20,63, +53,53,53,19,19,19,12,12,12,71,71,71,71,71,71,123,71,12,12,12, +12,12,71,71,218,58,99,58,218,58,218,99,58,99,58,99,99,218,58,58, +58,99,58,58,99,99,58,99,58,99,99,218,58,58,99,99,99,99,99,99, +58,11,99,99,218,218,218,99,218,99,99,218,218,99,218,99,99,218,218,99, +218,99,71,218,99,218,99,99,99,8,218,218,99,218,99,218,99,218,218,99, +11,218,218,218,218,99,71,99,218,99,99,99,218,58,99,99,99,99,218,30, +58,99,58,99,58,11,58,99,58,99,58,58,58,99,58,58,99,99,58,58, +58,99,58,99,58,58,99,58,218,99,99,218,58,99,58,58,58,58,58,218, +71,12,12,71,71,12,12,12,12,71,71,118,71,71,118,71,71,12,223,19, +19,53,53,53,53,63,229,20,79,20,34,0,20,101,101,63,20,101,101,53, +108,53,53,53,53,53,101,19,92,12,12,12,12,71,71,218,218,218,71,71, +118,12,71,71,218,218,58,58,58,58,58,58,218,58,58,58,99,99,218,99, +58,58,99,99,58,99,58,99,58,58,58,99,99,99,58,99,99,99,58,58, +99,58,58,99,99,99,99,99,99,99,218,99,99,218,99,218,218,99,99,218, +99,58,99,99,218,99,218,218,218,8,99,218,99,218,99,218,11,99,218,99, +99,99,99,99,218,99,58,99,99,99,58,99,218,99,99,99,99,99,58,99, +58,218,99,99,99,58,218,58,58,58,99,99,58,99,218,58,99,99,58,218, +58,99,58,99,99,99,58,99,58,58,58,58,99,58,58,58,58,218,218,12, +71,71,71,12,12,71,71,12,71,12,71,71,71,71,12,92,19,53,53,53, +101,63,79,34,251,0,0,63,20,53,19,53,53,53,53,19,19,53,19,19, +19,108,19,19,19,19,19,19,53,53,108,12,12,12,71,71,218,58,58,58, +99,218,71,71,71,12,218,99,99,58,58,58,58,218,58,58,58,58,58,99, +99,58,58,99,58,218,58,99,99,99,99,58,99,128,99,58,99,99,11,99, +99,58,11,58,99,99,99,218,58,11,99,58,99,218,99,99,218,99,99,99, +218,71,99,99,218,99,11,99,218,8,218,99,218,99,218,99,99,218,99,218, +58,218,58,218,99,99,218,99,58,99,99,99,99,78,11,58,99,58,99,99, +99,58,58,99,58,11,58,58,218,99,99,58,58,58,99,58,58,58,99,99, +58,58,58,58,58,58,99,58,99,99,99,58,58,58,58,58,218,71,118,12, +71,71,71,71,71,12,71,71,71,71,71,12,92,19,19,53,53,63,20,251, +0,79,79,0,79,34,34,79,0,63,229,20,63,101,53,101,19,53,19,92, +12,71,12,92,12,12,12,12,12,92,19,92,92,71,12,118,71,218,99,58, +58,58,58,58,218,123,71,218,58,58,58,99,58,58,58,218,58,218,58,58, +218,58,99,58,58,58,99,99,58,99,58,99,218,99,99,99,58,58,58,11, +58,58,99,58,99,99,30,99,99,99,58,218,218,30,99,218,99,99,99,218, +99,99,218,218,99,99,218,71,99,8,99,99,71,99,218,218,99,218,99,218, +99,218,99,58,11,58,99,99,11,58,99,58,99,99,99,99,58,58,99,99, +58,99,99,99,99,58,99,78,58,58,99,99,218,78,58,218,58,99,212,58, +99,58,58,58,218,58,58,58,58,58,58,58,58,58,218,71,12,12,71,71, +123,218,218,58,99,71,123,71,71,12,19,19,19,53,53,19,19,53,63,53, +101,101,101,63,101,101,20,20,79,0,0,79,79,34,251,79,79,251,101,53, +19,92,12,71,71,71,218,12,218,12,71,71,71,71,71,12,71,71,123,71, +58,58,58,58,58,58,58,99,99,58,58,58,99,58,58,58,99,58,99,58, +99,58,58,99,58,58,58,58,99,58,99,58,99,58,99,58,99,99,58,58, +99,99,99,58,99,58,58,58,99,99,99,30,128,58,99,99,99,99,99,58, +218,99,99,218,218,99,99,218,71,8,71,218,99,99,99,99,218,99,99,99, +99,30,58,11,58,58,99,58,58,58,58,30,58,58,99,99,99,58,99,58, +99,58,99,58,58,58,218,99,58,99,58,58,58,218,99,58,58,58,58,58, +58,99,99,99,58,99,99,58,58,212,99,58,58,218,71,71,218,218,99,58, +58,58,58,218,123,71,71,12,108,19,19,108,19,19,223,92,19,92,12,12, +19,19,19,19,53,53,63,63,229,0,34,34,79,0,79,0,75,34,0,34, +79,20,53,19,92,12,71,71,71,218,71,123,71,123,71,71,71,71,71,71, +71,218,58,58,58,58,58,58,58,99,58,58,58,58,58,58,58,58,99,58, +58,99,99,58,99,58,58,58,58,58,58,99,58,99,58,99,58,58,99,99, +58,58,99,99,58,58,218,58,58,99,58,99,11,58,58,99,58,218,99,99, +99,99,218,99,99,218,99,99,99,8,99,218,99,218,99,99,99,99,58,58, +11,58,99,58,58,30,58,11,58,11,58,99,99,58,99,58,58,58,99,58, +58,99,58,99,99,58,58,99,58,99,58,99,58,99,212,58,58,58,58,58, +58,58,58,58,58,58,58,58,58,58,212,58,218,218,218,99,58,58,58,58, +58,99,71,71,71,12,71,71,12,12,12,71,71,123,71,218,71,71,71,92, +19,108,63,79,229,126,0,79,0,0,34,34,34,126,34,251,79,0,126,34, +79,0,79,20,63,19,19,12,71,71,71,218,71,99,71,71,71,71,71,71, +71,71,218,58,58,58,212,58,58,58,58,58,58,58,58,58,58,58,58,58, +58,58,99,58,58,99,58,58,99,99,128,218,58,58,99,58,99,58,58,99, +218,58,58,218,99,99,99,99,99,99,58,99,99,58,30,218,99,99,99,99, +99,99,218,99,99,99,218,218,99,8,218,99,99,99,58,99,99,99,99,99, +58,58,218,99,99,99,58,99,58,58,58,99,58,99,58,99,99,99,58,58, +99,99,58,58,58,58,58,58,99,99,58,99,99,58,58,58,58,99,58,58, +99,58,99,58,78,212,99,212,99,58,58,99,58,58,78,78,246,99,212,58, +99,71,123,71,71,71,71,71,218,218,71,123,218,218,218,118,12,19,63,63, +0,0,0,34,34,0,34,79,79,79,0,34,79,79,20,101,53,101,53,19, +53,53,101,101,53,53,19,19,19,92,218,218,218,218,218,212,78,58,218,218, +71,71,71,11,58,246,58,78,246,58,58,58,99,99,58,58,99,58,212,58, +99,58,99,58,58,99,58,58,58,58,58,212,218,58,58,99,58,58,99,58, +99,99,99,58,58,99,99,99,58,99,58,58,99,99,99,58,58,99,99,99, +99,99,99,11,58,99,99,99,218,8,99,99,218,99,99,218,99,218,58,58, +11,78,58,99,58,99,58,99,58,11,58,99,58,99,58,58,58,99,99,58, +99,99,99,58,58,58,58,58,58,58,58,58,58,58,58,212,99,58,212,99, +58,58,78,58,78,58,58,58,58,58,58,58,58,58,246,58,246,58,58,71, +218,71,71,71,218,71,71,71,71,218,218,71,71,92,92,53,63,126,79,0, +0,79,0,79,34,79,0,126,79,79,79,79,79,229,229,101,53,108,92,71, +71,71,71,71,71,12,12,19,108,19,92,71,71,71,71,218,212,246,78,58, +58,218,218,71,71,58,58,212,212,78,212,78,78,58,58,58,58,58,99,58, +78,58,58,99,58,58,58,58,58,58,58,58,99,58,99,58,58,212,99,58, +58,99,58,99,58,99,99,58,58,99,99,58,58,58,58,11,78,99,99,99, +99,58,99,58,71,99,99,99,99,8,99,99,99,218,99,58,99,30,58,11, +58,11,58,58,99,58,58,99,58,99,58,99,99,58,99,58,99,58,58,99, +58,58,58,58,58,78,58,99,58,99,58,58,58,58,99,58,212,99,58,58, +58,78,78,78,58,58,58,58,58,212,58,78,58,78,78,78,58,99,218,218, +71,218,218,71,58,99,58,99,71,71,71,12,19,20,79,251,0,251,79,251, +79,63,126,79,79,79,79,229,79,79,79,126,126,79,79,63,20,53,53,92, +12,12,218,71,71,218,218,218,71,218,71,71,71,218,71,218,218,58,246,246, +78,212,78,58,218,218,58,58,58,246,78,212,78,212,58,58,58,58,58,212, +78,78,78,58,58,99,58,58,58,58,58,58,58,58,58,218,99,99,58,99, +58,58,218,99,58,58,99,58,99,99,58,99,99,99,58,99,99,58,58,58, +218,99,11,58,99,99,99,218,99,8,99,30,218,58,11,99,99,58,99,58, +99,58,58,99,218,99,218,58,99,99,58,58,58,58,99,58,99,99,58,99, +58,58,58,78,78,58,58,58,58,58,99,246,78,78,58,58,58,58,58,78, +78,212,78,246,246,58,58,58,212,58,212,246,78,246,58,212,218,218,218,218, +218,58,246,58,246,58,218,218,123,12,19,19,53,53,101,53,63,101,63,63, +63,63,63,63,63,101,63,53,63,53,53,53,53,108,19,19,19,19,108,19, +92,92,12,12,71,71,218,99,99,218,218,218,218,218,71,71,71,218,218,246, +78,78,246,78,78,78,58,58,58,78,78,78,78,246,58,58,58,58,58,78, +212,78,78,58,58,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58, +58,99,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,99,99,99, +58,99,58,99,99,58,99,99,99,8,99,99,30,58,58,58,58,58,58,99, +58,11,99,58,99,58,58,58,58,58,58,99,58,58,58,58,58,58,99,58, +99,58,78,58,58,58,99,58,58,78,246,78,58,78,58,58,58,58,78,212, +246,78,246,78,78,99,212,246,78,246,58,246,246,78,246,218,218,218,58,58, +246,78,78,246,58,218,218,71,12,12,108,92,108,19,108,53,63,63,63,53, +53,53,19,223,92,92,49,118,118,118,118,118,118,118,71,118,118,12,12,12, +92,71,71,123,218,99,11,58,58,58,58,78,58,99,99,123,71,218,218,218, +246,246,78,212,78,212,78,246,78,78,58,78,246,78,246,78,58,58,58,58, +99,78,246,78,246,99,58,58,58,58,58,78,78,78,78,99,58,99,58,99, +78,58,58,99,58,218,218,58,58,99,58,58,58,218,99,58,58,58,58,11, +58,99,99,99,58,99,99,218,58,8,99,99,58,99,58,11,58,11,58,58, +99,58,99,58,99,58,99,58,58,218,58,58,58,99,58,99,58,58,58,99, +78,58,58,58,99,58,58,78,78,58,246,78,246,99,58,58,58,212,78,78, +246,58,246,58,78,78,78,58,246,78,78,58,246,58,58,58,212,58,246,78, +212,246,58,58,71,71,71,71,12,92,92,92,108,53,53,53,19,19,223,223, +49,223,92,49,49,223,92,49,118,118,118,71,118,112,118,11,11,112,71,112, +71,71,11,11,11,99,99,58,58,78,78,78,246,78,246,58,99,71,218,71, +218,78,78,246,78,246,58,246,78,246,212,58,246,58,246,78,212,78,246,58, +58,58,78,246,246,78,78,99,58,58,58,212,78,58,78,58,58,58,58,58, +78,58,78,99,58,58,99,58,58,58,58,99,58,58,99,218,58,99,58,58, +58,58,99,58,99,99,58,99,99,8,99,99,58,58,58,99,58,99,99,58, +99,58,58,58,58,58,58,218,99,58,99,58,58,58,58,58,99,58,58,78, +58,78,78,78,78,58,78,58,78,78,78,212,78,58,78,58,78,212,78,246, +78,246,78,78,212,246,246,78,246,212,246,246,78,246,58,246,78,246,58,246, +246,58,99,218,218,218,71,12,92,19,19,19,19,19,223,223,49,223,49,118, +49,112,30,30,237,103,208,208,245,208,245,208,245,245,245,103,208,103,22,237, +30,30,11,11,11,11,71,71,11,99,58,78,78,246,58,246,246,246,58,99, +99,218,212,78,246,78,246,78,246,58,78,58,246,78,58,246,78,212,78,246, +58,212,58,78,78,212,78,78,58,58,99,78,78,78,78,78,58,58,99,58, +58,78,78,78,58,58,99,58,99,58,58,99,58,218,58,58,99,58,58,218, +99,58,99,99,58,99,30,99,99,8,58,99,58,99,58,58,58,99,58,99, +58,218,218,58,99,58,99,58,58,58,78,99,78,58,99,58,58,78,58,78, +78,58,78,78,58,78,78,246,246,212,78,78,78,58,78,246,78,246,58,246, +212,78,58,78,78,58,246,78,78,78,58,246,78,246,78,58,246,78,78,78, +58,218,99,11,71,12,92,92,92,223,223,223,223,223,49,118,112,22,237,208, +72,245,55,243,245,72,72,72,65,208,236,208,208,245,72,55,243,55,55,243, +245,245,245,103,237,237,30,11,11,112,71,11,99,58,78,246,246,246,246,78, +58,218,58,58,246,78,212,78,246,78,246,78,212,78,78,212,78,246,78,78, +58,78,78,78,78,78,246,246,246,58,58,78,58,246,78,212,78,78,99,58, +58,78,58,58,58,58,58,99,58,58,58,58,78,58,58,99,99,58,58,58, +99,218,58,99,99,99,58,99,58,8,99,99,99,58,11,58,58,58,99,58, +58,58,58,58,58,58,58,99,99,78,78,58,58,78,58,58,99,78,78,78, +78,78,78,78,78,78,212,246,246,246,246,78,78,246,246,58,246,78,246,78, +78,78,212,246,246,246,78,78,212,246,246,246,58,246,246,78,246,246,78,58, +218,99,71,12,12,92,92,82,223,49,223,118,112,22,208,72,72,208,65,22, +22,112,11,112,112,112,112,112,118,118,118,112,112,112,30,244,244,30,237,65, +236,72,55,55,243,243,208,208,237,237,11,71,11,11,71,11,99,58,246,246, +246,78,78,246,58,246,78,246,58,246,58,246,58,246,246,78,78,78,212,78, +212,246,212,78,246,246,58,78,78,246,99,246,246,58,246,58,78,78,78,58, +78,78,78,78,78,78,58,58,58,99,58,58,78,99,58,58,58,218,99,99, +58,58,99,58,99,58,58,99,99,8,58,58,99,58,99,218,99,58,99,99, +99,58,99,58,99,58,58,58,58,78,58,58,58,58,58,58,58,78,212,78, +78,58,246,78,58,246,246,246,246,246,246,246,78,58,246,78,246,58,246,58, +246,78,78,78,58,246,212,78,78,78,58,246,78,212,246,58,78,212,58,99, +218,71,12,92,19,223,49,49,118,62,30,22,208,208,103,30,244,112,244,118, +112,23,49,49,49,49,49,49,49,49,82,82,223,82,49,118,23,118,118,112, +11,30,237,22,65,245,55,243,245,245,103,237,237,11,71,11,71,71,218,58, +246,246,78,246,78,212,78,246,246,78,246,246,78,78,212,78,212,78,246,78, +78,58,246,78,58,246,78,212,78,246,78,78,78,78,78,212,246,246,246,78, +58,78,78,78,58,78,78,58,58,58,58,58,99,58,58,58,58,58,99,58, +58,58,58,58,58,99,99,58,58,8,99,99,58,58,58,99,99,99,99,58, +58,99,78,58,78,99,58,58,99,78,78,78,58,78,58,58,78,246,78,212, +78,78,58,78,246,246,246,246,246,246,58,78,78,246,58,246,78,246,78,246, +78,212,78,212,212,246,78,78,246,246,78,212,58,99,212,246,246,58,99,218, +118,12,92,223,223,49,49,11,237,208,208,103,244,23,118,112,118,112,49,49, +19,82,82,82,223,49,66,49,49,82,223,223,101,19,223,82,223,82,223,82, +82,49,23,112,11,244,30,65,72,55,55,245,208,22,237,112,11,118,71,218, +218,58,58,78,246,78,212,78,78,212,99,78,212,246,78,246,78,246,78,212, +246,246,78,246,246,78,246,78,246,58,246,78,58,78,246,246,246,246,212,246, +78,78,78,78,78,58,78,78,99,58,78,78,78,99,58,58,99,58,99,99, +58,99,99,99,99,58,99,58,99,8,99,99,99,58,58,99,58,58,99,58, +58,58,78,78,58,58,58,58,58,58,78,78,78,78,78,58,246,246,246,246, +246,78,78,212,246,246,246,246,246,246,78,212,78,246,78,212,78,246,58,246, +78,246,78,58,58,212,246,58,78,246,246,58,58,58,58,246,58,218,71,12, +223,223,49,49,49,30,65,72,72,30,112,118,118,112,118,49,223,223,223,49, +244,244,244,244,23,23,23,23,70,66,49,70,49,70,70,118,23,23,23,23, +49,223,19,82,223,223,23,11,244,237,208,72,55,55,208,103,30,11,11,49, +71,71,99,58,246,78,246,246,58,246,58,58,246,212,78,246,58,246,78,58, +58,212,78,78,212,78,212,78,78,78,212,78,78,78,246,212,246,246,246,212, +246,58,78,78,78,78,58,78,78,99,58,58,78,58,58,58,99,58,58,58, +58,58,58,58,99,58,99,58,99,8,99,58,58,218,58,58,58,99,58,58, +58,99,58,58,99,58,78,78,78,78,78,78,78,58,246,246,246,212,246,246, +212,246,78,246,246,246,246,246,212,246,246,78,246,58,212,246,78,78,78,246, +58,246,212,99,58,246,78,246,246,58,58,58,58,78,246,58,99,118,12,92, +223,223,223,11,22,72,208,244,49,112,112,118,49,82,223,49,244,244,242,62, +23,62,23,23,244,244,244,244,244,244,62,30,244,244,244,244,23,112,210,23, +62,244,244,23,223,82,53,82,49,112,30,30,65,72,55,245,208,237,30,112, +71,49,118,71,99,78,78,78,246,246,58,99,58,246,212,78,246,58,246,212, +99,58,212,246,78,246,78,246,212,246,78,246,246,212,246,246,246,212,246,246, +246,246,78,78,246,246,78,78,78,78,58,58,78,58,58,58,58,58,99,99, +99,78,99,58,99,99,58,99,58,8,58,99,58,99,99,58,58,99,58,58, +58,58,58,58,78,58,78,78,58,78,58,246,78,78,78,212,246,246,212,246, +246,246,246,246,246,246,246,246,246,246,246,58,246,58,99,212,246,212,78,78, +78,99,58,58,78,246,58,78,246,58,58,58,58,212,58,218,71,12,49,49, +49,112,22,72,65,112,49,112,112,112,223,19,118,62,244,62,62,23,23,244, +244,244,244,112,23,49,49,223,19,223,82,223,223,49,223,23,118,112,244,30, +62,62,62,62,23,62,23,223,82,8,82,71,30,244,22,72,55,245,103,237, +11,71,12,12,71,99,78,78,78,58,212,58,58,58,58,212,78,58,246,78, +58,58,58,212,78,246,58,78,78,212,212,246,246,246,212,246,246,246,246,246, +246,246,58,78,78,58,246,212,78,78,58,78,58,78,78,78,58,78,58,58, +218,58,58,99,58,99,99,99,58,8,218,99,58,58,58,99,58,58,99,78, +78,58,99,58,58,78,58,78,246,78,78,58,78,212,246,246,246,246,246,246, +246,246,246,212,246,212,246,246,246,212,78,246,58,58,58,246,78,78,212,246, +58,58,58,58,212,78,246,212,58,58,58,58,58,58,71,12,49,223,223,49, +30,208,72,30,49,49,112,49,223,223,23,22,244,62,23,23,62,22,112,118, +49,49,223,118,23,244,30,242,22,242,242,62,242,244,244,112,23,49,49,223, +23,112,30,244,62,112,210,23,23,49,82,8,223,244,237,30,208,55,243,245, +22,30,71,118,12,71,99,78,78,246,212,58,58,58,58,246,246,246,78,246, +58,58,58,78,212,78,246,246,246,58,58,212,246,246,246,246,246,246,246,246, +246,78,246,58,246,246,246,78,212,78,78,78,58,78,58,78,58,58,99,58, +58,58,99,58,58,58,58,58,58,8,58,99,58,58,58,58,99,58,78,78, +58,58,78,58,58,78,78,58,78,78,78,78,78,246,212,246,246,246,246,246, +246,246,246,246,246,246,212,246,246,246,78,58,58,58,58,246,78,78,246,99, +212,58,212,58,212,78,78,58,58,218,58,212,58,99,71,49,223,49,49,30, +55,72,112,49,244,11,49,82,112,242,242,62,23,62,244,112,118,223,82,118, +30,236,29,225,231,33,248,42,42,42,219,2,42,219,110,107,231,29,65,244, +112,223,223,49,112,30,30,23,23,23,23,49,82,101,49,30,30,242,72,243, +208,103,30,71,118,12,71,99,78,78,78,58,58,58,58,58,78,58,246,78, +58,58,99,58,246,58,246,58,246,58,99,58,212,246,246,212,246,246,246,246, +246,246,246,246,212,246,246,246,246,78,58,78,78,78,78,78,58,78,78,78, +58,78,99,99,99,58,58,99,99,8,99,58,99,99,58,58,58,58,78,78, +78,78,58,58,58,78,78,78,78,78,246,246,58,246,246,246,246,246,246,246, +246,246,212,246,99,58,246,246,246,246,212,58,58,58,99,212,78,212,212,58, +78,58,58,58,246,246,78,58,71,218,58,58,11,71,118,223,49,23,103,243, +22,49,118,30,118,82,49,30,242,62,70,62,244,118,223,82,112,65,93,205, +217,42,80,147,98,4,26,8,8,8,8,121,8,8,26,4,98,210,111,219, +29,29,65,112,223,82,23,30,244,62,62,62,62,49,82,82,112,30,30,65, +243,245,103,30,71,118,12,71,218,212,246,58,58,212,212,58,58,246,212,78, +58,58,212,58,58,246,78,246,58,58,58,58,246,212,246,246,246,246,246,246, +246,212,246,246,246,246,212,246,246,212,78,246,212,78,58,78,78,78,58,78, +78,78,58,58,58,58,99,58,58,8,58,58,58,58,58,58,58,58,237,78, +58,78,78,58,78,78,212,78,246,78,78,246,246,246,246,246,246,246,246,246, +246,246,246,58,58,58,246,246,246,246,58,58,99,58,58,246,246,78,99,78, +246,78,58,58,58,58,58,218,12,99,58,99,71,92,49,223,118,22,41,65, +223,23,30,118,19,23,22,242,23,23,30,112,223,19,112,29,222,232,87,80, +98,26,121,8,20,253,20,20,20,20,101,20,20,20,253,253,20,8,121,26, +4,14,2,231,29,30,49,82,112,30,244,62,23,210,118,82,101,223,30,244, +65,55,243,103,237,71,118,71,71,99,58,58,58,58,218,58,58,58,246,212, +58,58,212,78,99,58,246,246,78,58,58,58,58,246,246,246,246,246,246,246, +246,246,246,212,246,246,246,246,246,246,246,78,78,78,78,78,58,78,58,78, +78,58,58,58,78,99,58,58,99,8,99,58,58,99,99,58,58,58,58,237, +78,78,58,78,78,246,78,246,78,246,78,246,246,246,246,246,246,246,246,246, +246,246,58,58,58,58,246,246,246,58,99,78,246,212,99,246,212,58,78,246, +58,246,58,58,58,212,218,12,118,58,58,71,12,49,19,49,237,41,65,49, +118,112,223,82,244,236,62,66,62,30,82,8,112,93,68,6,137,88,162,253, +253,20,253,19,223,23,244,244,54,242,54,242,244,62,112,49,223,20,20,20, +20,253,26,98,14,33,29,244,82,101,112,22,62,62,62,23,49,53,82,30, +112,22,243,243,208,11,71,118,12,218,99,58,58,58,12,71,58,58,58,58, +99,58,58,246,246,58,58,246,246,58,58,58,99,58,246,246,246,246,78,58, +246,212,246,246,246,246,246,212,246,246,78,78,78,78,58,78,78,78,78,58, +78,58,78,237,78,58,99,99,78,8,58,99,58,58,78,78,78,78,78,78, +58,78,78,58,78,246,78,212,246,246,246,246,246,246,246,246,246,103,246,246, +246,246,58,58,58,99,212,246,246,58,212,78,246,58,58,58,58,58,212,78, +78,78,58,58,58,58,123,49,218,99,11,118,223,223,82,237,41,208,23,118, +237,223,82,244,18,210,23,23,112,19,223,103,64,6,148,147,26,253,20,8, +66,23,54,111,219,219,137,24,76,24,163,25,137,42,204,42,151,109,244,223, +20,20,20,20,8,4,111,231,236,23,82,12,237,62,62,23,62,223,253,223, +237,244,22,41,245,103,11,112,118,71,218,58,58,99,92,92,128,58,58,58, +58,58,58,212,78,58,58,212,58,58,58,78,78,58,212,246,246,246,58,58, +212,246,212,246,246,246,246,246,246,212,246,78,246,246,78,78,78,78,78,58, +78,58,58,78,99,58,58,58,99,8,99,58,58,58,58,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,246,246,246,246,103,246,246,246,246,246, +246,78,58,58,58,58,58,212,58,58,78,212,78,78,99,58,58,212,78,246, +212,212,58,58,58,218,92,12,218,99,71,12,223,82,118,243,55,23,223,30, +223,19,244,93,54,49,23,112,82,82,245,153,138,234,162,8,253,101,49,30, +111,125,24,201,142,16,159,142,43,95,197,156,193,193,51,141,224,25,248,231, +65,118,20,20,20,20,121,210,231,55,244,82,49,30,244,62,62,244,223,20, +118,237,112,208,243,245,237,71,118,49,71,58,58,218,92,92,12,58,58,99, +58,58,212,78,212,212,58,58,58,58,58,212,78,58,58,246,246,246,99,58, +99,246,246,246,246,246,246,246,246,246,212,246,58,78,78,78,78,78,58,78, +78,58,78,78,58,78,58,99,58,8,99,99,58,58,58,78,78,58,78,58, +78,78,78,246,78,78,78,246,246,246,246,246,246,246,246,103,246,246,246,246, +246,58,58,58,58,58,58,58,58,58,78,78,246,78,58,58,58,212,78,58, +58,78,58,58,58,12,92,12,99,218,118,19,82,223,22,116,237,49,112,112, +101,112,93,109,70,112,118,82,223,55,136,185,44,26,253,253,82,62,107,163, +117,16,114,159,161,106,98,46,26,26,26,26,26,4,32,81,44,142,43,234, +10,56,236,23,20,20,20,8,4,219,225,237,19,82,11,244,62,54,62,223, +20,112,30,244,72,239,103,237,71,12,12,71,58,71,92,92,12,128,58,58, +58,58,246,78,246,58,58,58,99,58,58,246,78,78,58,246,246,58,58,58, +58,212,246,212,246,246,246,246,246,246,78,78,246,58,246,58,78,246,78,58, +78,58,78,78,58,58,58,58,58,8,58,58,58,58,78,237,58,78,78,78, +78,78,78,58,246,246,212,246,246,246,246,246,246,246,246,246,246,246,246,246, +78,58,58,58,58,58,99,58,58,246,246,246,58,246,58,58,58,78,246,218, +11,58,58,58,58,12,92,71,218,11,49,223,101,23,239,93,23,118,244,223, +223,65,29,70,70,112,82,82,72,233,135,152,121,253,20,49,242,179,176,39, +198,156,32,47,26,26,69,113,26,47,9,47,162,113,26,121,113,252,152,159, +43,234,217,238,30,253,20,251,8,4,107,17,30,82,223,22,62,62,54,244, +82,19,237,112,244,41,245,30,112,71,92,71,99,71,12,92,92,71,78,58, +58,246,246,58,78,212,58,58,58,58,58,78,246,58,99,58,212,58,58,58, +58,78,246,246,246,246,246,246,246,246,246,246,78,78,78,78,246,58,78,78, +58,58,58,99,58,99,58,58,58,8,58,99,99,58,58,78,78,58,78,58, +78,58,78,78,78,78,78,246,246,246,246,246,246,246,246,246,78,246,246,246, +58,58,78,58,78,58,58,99,58,78,58,246,246,58,58,58,212,58,58,12, +71,58,58,58,99,92,92,71,218,71,223,8,19,22,150,30,49,11,23,101, +30,93,54,49,112,49,20,30,254,181,95,26,253,253,49,65,163,166,206,202, +52,26,8,121,4,161,43,114,139,131,57,200,195,188,192,88,26,26,121,98, +197,67,234,145,230,22,82,20,20,8,98,107,100,112,253,112,103,244,54,62, +49,20,49,237,118,208,243,103,11,11,12,92,92,92,92,12,49,12,58,58, +78,58,246,78,246,78,212,99,58,58,78,246,58,78,58,58,58,99,58,58, +58,99,246,246,246,246,246,246,246,246,246,246,246,78,246,78,246,78,58,78, +78,58,78,78,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,78,78,78,78,246,246,246,246,246,246,246,246,246,246,246,58,212,58,246, +99,212,58,99,78,99,58,58,78,246,58,58,58,78,78,58,78,78,99,71, +12,71,58,58,12,12,12,71,11,12,223,101,49,243,100,118,223,112,82,19, +93,225,113,23,244,101,223,41,129,199,52,253,20,223,242,124,39,57,117,122, +121,121,47,44,195,35,94,196,165,189,189,189,27,84,200,139,67,186,26,121, +240,106,159,234,175,68,242,20,20,20,8,210,238,93,223,19,237,244,23,54, +62,19,101,244,112,30,243,208,237,11,12,92,49,223,12,12,92,12,58,78, +246,78,58,246,78,212,78,78,58,58,212,58,58,58,78,99,58,58,99,58, +58,58,246,246,246,246,246,246,246,246,246,246,78,246,58,78,58,78,78,78, +78,78,237,78,58,58,58,58,58,8,99,58,99,58,78,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,103,246,246,246,246,218,58,58,78,78, +58,99,71,12,58,78,58,78,58,78,123,12,78,78,58,212,78,78,123,92, +12,12,99,99,12,92,92,71,11,118,82,101,112,116,236,82,112,112,82,118, +100,110,66,23,49,101,244,215,73,43,69,253,101,23,219,59,97,202,52,8, +8,4,120,97,187,139,27,143,46,113,26,26,46,88,60,27,131,200,192,47, +82,66,81,159,234,170,68,118,20,251,20,26,2,64,244,101,118,22,23,62, +62,49,20,118,244,23,208,245,30,11,71,12,92,12,12,49,12,12,71,58, +246,246,78,246,78,246,58,78,58,78,212,218,12,246,78,99,58,78,78,11, +12,58,58,246,246,103,246,246,58,246,246,246,246,78,246,78,78,78,58,78, +78,58,58,58,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,212,78,246,246,78,99,58,246,246,246,246,246,246,71,12,99,58,58,99, +58,58,53,251,71,78,78,78,78,246,19,19,71,246,246,78,212,246,12,92, +12,12,12,12,92,12,12,71,218,118,19,101,244,239,65,223,244,11,53,112, +222,235,66,112,223,20,72,45,90,221,8,253,19,242,214,97,57,152,26,8, +26,188,57,187,139,186,8,8,8,8,121,121,8,8,26,4,44,131,94,67, +162,82,113,44,159,76,220,29,82,0,20,8,98,238,245,82,82,237,23,62, +54,112,20,223,237,49,22,245,237,11,71,49,12,92,12,12,12,12,71,78, +246,58,246,58,246,78,246,58,246,212,58,19,101,218,78,78,99,58,58,53, +101,71,58,246,246,246,78,71,92,58,246,246,212,246,78,58,58,78,78,58, +78,78,78,78,58,58,58,58,58,8,99,99,58,99,58,78,78,58,99,58, +78,78,58,246,78,58,71,92,218,246,246,246,103,246,12,92,92,58,58,58, +58,218,63,53,19,246,246,78,78,212,53,92,92,212,246,78,78,58,92,218, +12,12,92,92,92,12,12,71,11,118,101,101,22,116,242,223,237,11,8,30, +17,62,70,112,8,53,72,172,134,143,8,20,223,109,102,57,97,81,121,82, +252,114,35,157,165,26,253,8,8,46,182,4,26,26,8,8,113,160,190,35, +186,66,121,106,117,152,232,68,49,79,20,8,26,42,17,223,53,22,112,244, +54,244,8,82,30,118,30,245,30,11,99,12,12,92,123,12,12,12,71,78, +246,78,246,78,58,246,246,58,246,58,12,53,53,12,78,78,78,99,12,63, +63,92,78,78,246,246,78,229,229,12,246,246,246,212,78,71,71,58,78,78, +58,78,78,58,58,58,212,58,58,8,99,58,58,58,58,78,78,58,99,218, +99,58,246,78,78,58,12,92,12,78,246,246,246,218,92,92,19,71,58,58, +58,12,38,92,53,71,246,58,246,218,108,92,92,218,246,212,78,58,12,218, +12,12,12,92,12,92,12,71,71,118,82,8,103,116,242,82,244,11,82,30, +222,210,223,23,8,101,55,172,183,186,8,253,223,110,102,157,97,161,8,8, +127,67,190,140,189,26,8,8,69,127,120,5,52,26,26,8,121,9,84,187, +43,113,82,98,142,152,89,119,244,20,0,253,121,219,64,23,101,30,30,23, +54,244,82,101,30,112,112,72,237,71,30,12,12,92,118,12,12,12,71,58, +246,246,58,246,58,212,78,246,58,246,108,63,53,19,78,78,78,58,53,101, +53,108,78,246,246,246,108,79,20,53,246,246,246,78,99,92,92,12,99,78, +78,58,58,218,218,218,99,58,58,8,99,99,58,58,58,99,99,218,71,11, +99,99,78,246,212,71,218,71,92,71,246,246,246,71,92,92,19,19,58,58, +58,92,53,92,92,108,58,246,246,71,92,92,92,92,212,246,246,58,123,48, +12,12,12,92,92,12,12,12,99,118,19,101,237,116,65,49,30,112,82,244, +222,235,26,118,82,101,65,136,183,7,8,8,82,242,21,157,57,192,69,8, +26,7,191,157,190,60,9,8,26,52,84,131,60,4,121,8,26,113,67,94, +142,113,82,98,43,152,10,119,244,251,0,253,121,111,64,23,101,244,22,49, +62,62,82,101,112,23,112,103,30,71,11,12,12,118,12,12,118,12,71,78, +78,246,78,58,218,58,78,246,246,12,53,101,53,19,58,78,58,12,63,63, +53,63,218,246,246,71,79,20,63,101,218,246,246,218,12,19,108,12,99,58, +99,71,218,71,71,218,71,218,71,8,99,58,99,99,58,58,11,218,71,218, +71,71,218,58,58,99,218,99,71,92,218,78,246,92,92,12,223,53,71,58, +58,19,19,92,92,19,12,78,78,12,92,92,92,92,71,78,78,218,123,241, +48,12,12,92,49,12,118,12,71,49,223,101,11,116,65,66,112,11,82,112, +100,54,66,66,223,20,244,105,90,159,8,8,8,244,10,167,187,202,98,8, +121,47,192,169,190,35,195,188,188,195,57,84,106,47,8,8,8,122,195,140, +95,66,82,98,142,221,175,119,244,251,251,20,8,219,64,112,101,30,242,118, +23,62,19,20,11,118,112,22,11,11,99,12,12,12,12,71,12,118,71,58, +246,58,246,99,12,99,212,78,58,19,53,53,101,53,58,78,218,53,101,53, +53,63,218,246,246,63,0,101,19,53,12,78,58,12,108,92,19,108,92,71, +71,12,71,71,123,71,71,123,71,8,99,99,58,58,58,11,58,11,99,218, +99,11,99,99,218,99,218,99,71,12,12,99,99,92,92,92,12,19,53,71, +99,38,53,12,12,92,19,218,212,92,92,92,48,12,108,128,246,218,123,48, +128,123,12,12,12,12,12,118,71,71,223,8,112,41,55,49,49,244,223,49, +93,231,70,82,223,20,82,116,181,158,252,8,20,223,242,214,57,157,156,46, +8,66,26,147,44,198,86,196,86,198,44,52,4,8,8,8,46,60,97,194, +52,82,82,180,159,177,232,64,66,79,20,8,26,231,100,49,8,237,62,23, +62,244,82,82,30,223,11,237,112,11,11,12,12,71,12,12,118,12,71,218, +246,78,58,218,92,99,246,212,92,53,79,79,53,53,218,58,19,63,38,126, +53,101,92,58,19,251,63,223,19,19,92,71,12,223,92,223,223,92,19,92, +12,71,123,71,71,71,71,71,71,8,11,58,11,58,99,58,99,58,99,58, +58,218,218,218,99,218,11,99,99,71,92,92,12,49,92,71,99,12,53,53, +92,20,53,123,48,12,92,19,218,19,92,12,241,48,92,92,58,218,92,241, +128,212,71,12,118,12,12,71,71,112,223,19,82,55,116,112,49,244,223,19, +208,238,235,66,223,253,82,22,250,73,95,113,8,82,49,111,102,207,132,188, +252,69,8,121,162,4,47,52,127,4,4,26,26,8,8,46,186,86,169,95, +66,8,4,95,192,87,45,236,101,251,253,8,70,222,236,223,223,237,244,23, +54,244,82,82,237,118,11,244,71,11,99,71,118,12,12,12,12,12,12,58, +78,78,246,123,108,12,212,12,53,63,13,83,63,53,12,92,53,226,13,13, +53,53,53,226,75,63,12,71,92,19,19,92,92,92,19,12,12,12,92,12, +71,71,71,71,71,12,71,71,71,8,99,99,58,99,99,58,58,99,58,58, +11,218,71,71,11,218,99,99,58,218,12,19,92,92,92,99,78,58,92,101, +75,251,53,12,123,48,92,108,101,63,92,12,241,241,92,92,108,92,108,128, +212,246,58,12,12,12,49,12,12,118,12,49,19,237,116,22,49,118,244,82, +112,17,231,70,223,82,20,82,93,45,133,7,46,8,8,49,50,224,168,207, +142,60,127,46,8,26,8,8,8,8,8,8,121,26,47,192,166,169,7,113, +66,113,7,156,36,217,28,23,251,251,20,26,111,222,30,8,49,22,112,62, +242,112,101,112,30,49,244,11,112,11,99,71,12,12,118,12,12,12,71,246, +246,78,212,92,108,92,218,53,38,13,0,0,63,101,20,63,101,75,83,83, +63,101,229,79,126,92,58,78,12,19,92,92,19,92,12,71,71,118,71,71, +218,12,71,71,71,71,71,218,99,8,218,99,218,58,58,218,99,99,58,99, +58,58,99,99,218,99,218,99,58,58,99,92,92,92,19,58,78,78,99,108, +0,34,38,123,123,48,123,92,53,108,92,12,241,241,241,123,92,19,19,123, +241,212,246,99,12,71,12,71,12,71,118,223,82,118,245,100,112,49,30,118, +223,237,238,111,113,223,19,20,49,93,144,184,44,113,8,253,19,210,173,141, +168,57,196,142,60,52,122,182,113,113,122,3,60,159,130,86,43,122,26,223, +47,106,95,76,89,68,244,20,251,20,8,210,238,72,223,19,30,112,23,62, +244,223,20,118,112,112,244,118,11,99,99,218,71,218,71,12,12,71,58,58, +78,246,246,92,63,53,53,101,83,0,83,83,53,63,63,53,20,83,0,0, +53,53,79,0,226,78,58,78,12,108,92,19,92,71,58,58,99,71,71,123, +71,218,218,71,218,218,99,218,99,8,99,99,218,218,99,99,99,99,58,99, +99,58,99,11,71,99,99,58,58,58,58,71,92,92,19,78,78,58,78,218, +53,63,101,123,123,48,48,123,92,19,92,92,241,241,241,241,92,92,92,12, +241,212,78,78,123,118,12,12,12,12,112,92,49,223,30,247,65,49,23,112, +82,23,72,231,14,26,82,19,101,49,17,146,102,154,147,69,8,82,49,23, +249,104,158,39,206,169,86,130,202,142,202,114,39,117,76,88,4,66,66,113, +7,95,234,175,68,22,101,20,251,8,4,107,100,112,101,112,30,23,112,62, +49,101,49,244,118,112,112,118,11,78,99,99,99,58,71,12,92,99,246,78, +246,58,218,108,108,53,63,229,0,83,34,13,53,53,101,38,13,0,0,13, +53,101,63,101,99,78,58,78,71,19,19,92,71,58,99,58,11,218,218,71, +99,99,99,99,218,58,99,218,218,8,71,218,99,99,218,58,99,99,99,99, +99,58,99,58,99,218,11,58,58,99,58,58,71,92,92,58,78,78,78,78, +118,19,53,123,48,128,128,48,123,12,92,92,48,128,212,48,241,12,12,92, +241,128,246,246,246,71,12,12,12,71,71,118,49,223,49,208,116,22,49,23, +11,223,223,72,225,235,113,82,82,101,49,65,68,164,201,7,162,26,8,121, +66,223,23,216,14,36,177,152,154,152,80,255,98,66,66,223,66,4,32,152, +152,163,228,222,112,251,20,20,8,113,219,222,22,82,23,22,62,112,54,244, +101,82,112,112,23,118,112,11,11,78,58,58,246,99,71,71,99,58,246,212, +58,58,123,108,108,53,20,13,101,19,34,13,53,53,53,0,75,38,0,34, +63,53,53,71,58,78,58,78,11,92,92,71,58,58,58,58,99,218,11,99, +11,58,218,218,99,99,218,99,99,8,99,71,99,99,99,99,99,218,58,99, +218,58,99,99,99,58,58,78,58,99,58,58,58,71,12,78,78,78,78,78, +58,12,19,12,48,218,246,218,48,12,92,92,241,48,58,212,48,241,12,92, +48,241,212,58,212,212,123,118,12,71,118,118,12,223,49,118,55,239,244,223, +112,112,82,118,236,225,14,4,26,82,101,19,112,93,153,21,224,174,88,162, +26,26,121,82,66,66,66,66,66,66,26,82,66,26,113,127,32,44,51,87, +248,222,236,223,20,20,20,8,70,111,17,237,223,49,237,30,62,54,30,118, +253,49,112,118,23,118,118,11,99,58,58,58,212,99,71,218,246,78,78,58, +58,58,108,108,63,38,13,92,58,12,13,251,53,63,251,79,12,71,34,34, +251,53,19,58,78,78,78,58,58,71,71,58,99,99,58,99,58,11,58,99, +99,99,99,218,218,99,218,218,99,8,71,99,218,218,218,99,218,99,99,99, +99,71,58,99,99,99,99,58,58,99,58,58,78,58,99,78,58,78,58,78, +78,78,99,218,128,58,58,78,128,48,12,92,123,241,78,246,58,48,241,218, +12,128,212,212,58,58,212,218,71,12,71,12,118,12,223,49,11,243,55,244, +49,112,244,223,49,236,17,111,4,121,82,82,8,223,244,29,153,61,148,234, +152,32,147,52,4,4,113,26,113,26,98,98,147,255,7,193,24,163,217,238, +110,112,101,20,20,253,8,70,107,222,22,223,223,244,244,244,244,242,112,82, +223,118,23,23,49,118,71,11,58,58,58,246,246,58,99,78,58,212,212,78, +58,99,53,53,38,83,19,58,246,19,34,79,251,34,34,71,58,71,79,13, +83,63,218,58,58,99,58,78,58,99,78,58,99,99,99,58,58,99,99,58, +218,11,218,99,11,218,11,99,71,8,71,218,218,11,71,99,218,99,99,99, +99,218,11,99,58,58,58,58,11,58,99,218,58,58,78,78,78,78,58,58, +78,78,78,78,58,78,78,78,58,58,48,123,48,48,128,78,246,78,128,241, +241,241,128,212,58,58,58,58,218,12,118,71,71,112,118,223,49,11,245,55, +30,49,112,244,223,19,30,93,107,111,4,26,101,101,8,101,112,242,93,203, +6,170,21,74,51,51,104,24,234,76,24,104,76,124,232,56,225,18,30,223, +20,20,20,20,8,66,235,231,236,112,223,118,30,112,112,54,244,112,82,49, +112,23,118,118,12,11,99,99,246,58,58,58,78,58,246,246,78,78,212,78, +58,12,53,229,34,40,78,78,58,38,0,13,13,79,71,58,58,71,13,0, +38,71,58,99,58,99,58,99,78,58,58,99,99,99,71,99,58,99,218,99, +71,99,218,99,99,71,218,99,71,8,71,71,71,123,218,218,11,218,218,218, +218,99,218,218,99,99,99,99,58,99,99,99,99,99,58,78,78,58,58,99, +99,78,78,246,78,212,78,78,58,78,128,48,48,241,48,246,78,58,246,128, +128,128,128,128,212,78,212,78,58,218,71,71,12,12,118,118,49,49,112,208, +41,22,49,112,244,23,19,49,22,93,219,14,4,8,82,101,20,101,223,49, +30,65,18,29,17,203,228,230,56,96,91,225,225,236,242,112,49,82,20,20, +20,20,82,113,210,107,29,22,118,223,112,30,244,244,62,112,23,82,223,49, +118,118,49,49,118,71,99,246,58,58,212,246,246,78,212,58,246,246,78,58, +218,53,209,126,40,78,78,78,218,0,34,34,79,71,78,99,58,71,251,229, +12,58,99,99,99,58,58,58,58,99,99,99,99,218,99,58,99,99,99,218, +99,218,11,218,218,11,218,71,71,8,71,123,71,71,218,123,71,99,11,99, +218,11,99,71,218,99,58,99,99,58,218,218,99,99,58,58,58,58,99,58, +58,99,58,246,246,246,78,58,58,58,78,58,48,48,241,78,246,78,78,58, +58,241,241,241,212,58,246,78,246,58,218,71,71,71,118,118,118,49,49,112, +103,243,236,112,49,244,112,49,223,118,65,93,107,14,98,113,82,8,101,253, +101,20,101,82,82,223,118,118,49,49,49,82,82,101,101,20,20,253,253,121, +26,70,235,110,29,103,118,223,223,11,244,244,54,242,244,49,19,223,49,118, +118,49,12,71,11,99,212,246,78,78,78,78,212,246,78,58,78,212,78,58, +12,38,213,71,78,58,58,78,40,83,79,20,99,58,99,58,99,12,92,71, +78,58,99,99,99,99,99,99,99,99,218,218,99,218,218,99,218,218,11,218, +11,218,218,71,218,218,71,123,71,8,71,71,12,71,71,218,218,218,71,71, +218,218,218,218,71,218,218,99,99,218,99,99,99,99,99,99,58,99,58,99, +99,99,99,58,78,78,78,78,58,99,58,58,58,128,48,128,78,78,58,78, +212,212,212,241,128,58,246,246,58,246,58,218,218,118,71,71,118,12,118,49, +23,237,245,55,208,23,118,23,112,223,223,118,244,236,18,110,14,210,4,66, +121,8,82,20,82,101,101,251,20,20,20,101,8,20,8,8,26,26,210,235, +109,110,65,30,118,223,49,244,244,244,244,242,65,30,223,82,49,118,118,49, +92,49,118,71,11,78,246,78,58,246,212,246,78,78,246,78,246,78,212,218, +53,92,99,78,58,58,58,246,53,0,53,99,99,58,99,58,99,71,218,58, +99,58,99,218,58,99,58,78,99,99,11,99,71,99,99,218,99,99,218,71, +123,218,71,218,12,71,71,71,71,8,71,71,71,71,71,118,71,71,218,99, +71,71,71,123,71,71,218,99,99,218,218,71,11,218,99,99,58,99,58,99, +99,99,218,58,58,78,78,78,58,99,99,58,58,58,58,128,246,78,58,58, +58,58,246,128,128,58,212,246,78,78,78,58,58,218,71,71,11,118,118,49, +12,23,11,103,243,72,237,23,23,112,23,223,19,223,112,22,109,18,29,111, +111,210,210,70,4,26,26,26,26,26,26,4,4,70,98,235,2,18,29,65, +54,23,223,49,23,244,244,112,244,54,22,244,118,82,223,223,118,92,49,49, +223,71,11,99,99,78,246,58,246,78,58,212,78,78,58,58,246,78,58,218, +71,78,58,58,99,58,58,99,19,77,58,58,58,218,99,58,58,58,58,58, +218,99,11,218,58,99,218,58,218,218,71,218,218,71,99,71,218,71,71,218, +71,123,71,71,71,71,71,71,12,8,118,118,71,71,118,71,71,71,118,12, +71,123,71,71,71,71,71,71,218,99,99,99,218,218,71,218,99,99,58,99, +99,218,99,218,58,58,246,78,78,99,99,99,99,58,246,78,58,246,58,58, +58,58,58,78,78,58,58,58,246,212,99,58,58,58,218,99,71,118,11,118, +49,49,49,23,11,208,55,245,22,112,23,23,23,23,49,49,49,223,112,30, +22,236,18,18,18,29,18,18,18,18,107,236,29,236,236,22,30,23,223,223, +223,118,118,112,244,112,244,242,242,30,23,223,82,223,49,49,49,223,49,12, +71,71,99,58,246,212,58,58,58,78,78,78,58,58,58,58,78,212,246,78, +78,58,58,11,99,58,78,78,99,58,58,99,218,99,58,99,58,58,58,218, +99,71,218,99,218,58,99,218,218,71,218,123,71,99,71,218,71,71,71,12, +71,71,12,12,12,12,12,12,12,8,12,12,12,12,12,12,118,118,71,71, +71,218,71,123,71,71,71,71,123,71,218,11,218,71,218,123,218,99,218,58, +99,99,11,218,71,99,99,58,78,58,99,99,71,99,58,78,246,246,246,58, +58,218,58,99,78,78,246,78,78,246,58,58,58,212,58,58,99,71,71,118, +71,118,118,23,49,112,112,103,72,72,65,244,112,23,118,118,70,223,223,223, +223,49,118,23,118,112,112,244,112,112,23,23,23,49,49,223,223,49,23,118, +244,244,112,62,244,109,22,30,49,223,223,82,49,223,49,223,223,118,118,71, +99,99,99,78,78,246,58,58,78,78,58,58,58,99,78,246,78,78,78,78, +99,99,99,58,99,58,78,78,58,99,99,11,218,99,99,58,58,11,99,218, +218,218,71,99,218,218,11,218,123,71,218,71,71,218,71,71,123,71,118,12, +71,12,12,12,12,12,12,12,12,8,12,12,12,12,12,12,71,71,71,118, +71,118,71,71,118,12,71,71,71,71,99,218,123,71,218,71,218,71,99,99, +99,218,218,71,218,218,99,58,58,58,58,218,99,218,218,99,58,99,78,58, +58,99,99,99,58,58,78,246,246,78,78,78,58,99,58,58,99,58,99,71, +11,71,12,23,118,118,118,23,112,30,103,208,208,65,242,112,118,23,23,118, +118,118,49,112,23,112,11,112,112,112,118,49,49,49,49,112,23,23,112,244, +244,22,22,22,242,112,49,223,223,66,223,49,223,49,223,49,12,71,71,99, +99,58,212,212,246,58,78,78,58,58,99,99,99,58,78,78,78,78,58,58, +99,99,99,58,58,58,58,58,99,218,71,218,99,99,218,58,99,99,71,218, +71,71,218,99,71,99,123,71,118,118,123,71,71,123,71,71,12,12,118,12, +12,12,12,12,12,12,71,12,71,8,12,92,12,92,71,12,118,118,12,12, +118,71,71,12,71,71,118,12,12,71,118,218,71,71,71,12,71,12,218,218, +99,99,218,218,71,71,71,218,99,99,99,99,71,71,218,71,99,58,58,58, +58,58,99,11,99,99,99,58,246,78,246,78,58,99,99,99,58,58,99,99, +99,11,71,112,112,118,118,92,118,23,118,112,30,237,103,65,65,22,30,54, +244,244,23,112,244,112,244,112,244,23,244,23,112,62,244,244,30,242,22,242, +22,30,23,49,49,19,82,223,223,49,49,49,223,49,12,11,11,218,99,58, +58,78,78,78,246,78,78,99,99,58,99,58,58,78,78,78,58,99,218,218, +71,99,99,99,58,99,58,99,71,123,71,218,99,99,218,99,218,71,12,71, +71,218,71,71,218,71,71,71,71,71,12,71,71,71,118,12,12,12,71,71, +12,12,12,12,118,12,12,92,12,8,12,12,71,12,12,12,12,12,71,12, +118,12,12,12,118,12,71,12,12,71,71,71,71,123,71,12,12,71,71,218, +218,218,11,71,123,71,71,218,71,99,99,58,99,99,71,218,218,99,218,58, +58,58,58,99,218,71,99,218,58,58,58,246,212,58,58,99,99,58,99,58, +58,58,58,218,71,71,112,71,118,118,49,23,118,118,49,112,112,30,237,22, +22,22,103,22,22,22,22,22,30,242,22,22,22,103,22,22,30,112,112,23, +49,49,49,82,223,66,49,49,49,49,223,12,118,71,218,99,99,58,99,58, +78,246,78,246,58,58,99,99,218,218,99,99,99,58,58,58,99,218,71,218, +99,99,58,58,58,99,218,123,71,71,218,218,99,99,99,123,71,71,71,92, +71,71,218,218,71,12,12,12,118,71,12,118,71,71,71,12,12,12,12,12, +12,12,118,118,12,12,12,12,12,8,92,92,92,12,12,12,12,12,12,12, +92,12,12,12,71,12,118,12,12,12,12,12,71,71,71,12,12,71,118,71, +71,123,71,71,71,118,71,71,71,123,71,218,218,99,218,71,12,71,71,218, +218,58,58,99,58,71,71,218,218,218,99,58,58,58,58,58,99,99,99,218, +218,99,58,58,99,99,99,11,11,11,23,112,118,112,49,118,118,118,23,118, +49,118,23,112,112,112,112,244,112,112,118,112,118,49,49,223,49,223,223,49, +223,223,49,49,223,49,223,223,118,118,71,11,218,99,218,99,218,78,58,58, +58,58,58,218,218,218,218,218,58,99,58,58,58,58,218,99,71,71,123,71, +218,99,58,99,99,71,71,12,12,71,71,71,218,218,218,71,118,71,71,12, +123,71,12,71,71,12,12,12,118,71,12,12,12,118,118,12,71,118,12,118, +12,12,12,12,12,92,12,12,92,8,92,92,12,12,92,12,92,12,12,12, +12,12,118,12,12,12,12,12,12,12,118,12,12,71,118,71,12,12,71,118, +71,71,71,123,218,118,12,71,71,71,71,99,99,218,218,71,71,71,71,71, +99,218,99,58,99,218,218,71,71,71,218,71,58,99,58,58,99,58,218,99, +99,218,99,99,58,58,58,99,58,99,218,11,71,112,11,112,118,23,118,23, +49,118,118,92,49,92,49,92,49,92,49,223,223,49,223,49,49,49,49,82, +49,49,49,223,118,118,71,71,11,71,99,218,218,99,58,58,58,58,58,58, +58,218,218,218,71,218,218,99,99,99,99,58,218,218,71,123,71,71,218,11, +99,99,218,218,71,71,12,71,12,218,218,218,71,218,118,12,71,118,71,71, +71,71,71,71,118,71,12,12,12,71,12,12,12,12,12,12,12,49,12,12, +12,92,12,49,12,92,12,12,92,8,92,92,92,92,92,12,92,12,12,92, +12,92,12,92,12,71,71,12,12,12,12,71,12,118,71,118,71,118,12,12, +12,12,71,71,218,71,71,118,118,12,12,118,71,218,71,218,123,12,12,12, +12,71,71,99,99,99,218,71,71,71,71,123,71,218,218,58,99,99,58,218, +99,218,218,11,99,218,99,218,218,58,58,58,99,218,71,11,71,71,118,11, +112,71,112,118,112,12,118,118,118,118,118,118,118,118,118,118,223,223,49,49, +118,118,118,71,71,71,218,71,218,71,99,99,99,218,58,58,58,218,218,218, +218,71,71,218,123,71,218,99,58,218,218,99,71,118,12,71,71,71,218,218, +218,99,71,118,12,12,12,71,71,123,71,71,71,12,118,12,92,71,118,71, +12,12,71,12,12,92,12,12,12,118,12,12,12,12,12,92,12,12,12,92, +71,92,12,92,92,92,92,92,12,8,92,92,92,92,92,92,92,92,92,12, +92,12,92,12,92,92,12,118,92,12,12,92,92,12,12,12,12,12,12,12, +12,12,71,118,12,118,71,71,12,12,12,12,118,71,218,71,218,71,118,12, +12,71,12,71,218,71,99,218,123,71,71,12,71,118,71,71,99,218,218,99, +218,99,218,218,218,71,123,71,218,218,218,218,99,99,99,58,99,99,99,218, +99,71,71,71,11,71,11,11,11,11,11,11,11,11,71,118,12,118,218,218, +71,218,71,71,218,71,99,71,99,99,99,58,218,99,218,218,71,71,71,71, +71,71,123,71,11,99,99,99,218,218,71,71,12,12,12,71,123,218,71,218, +71,118,71,12,118,12,12,71,71,218,118,12,12,12,92,12,71,118,71,71, +12,71,92,12,92,12,12,12,118,12,12,92,92,12,92,12,92,92,92,92, +92,92,92,92,12,92,92,92,92,8,92,92,92,12,92,92,92,92,92,92, +92,92,92,12,92,92,12,12,92,92,92,12,92,92,12,12,118,12,12,92, +92,12,12,12,71,71,71,118,12,118,12,12,12,71,12,71,71,71,71,12, +12,12,118,12,12,118,218,71,71,71,12,71,71,71,12,12,71,71,71,11, +218,99,218,218,218,218,71,71,71,71,71,71,71,71,218,218,218,218,99,218, +218,218,99,218,99,218,218,218,218,218,218,218,218,99,218,11,218,71,71,71, +71,123,71,123,71,218,99,218,218,11,218,99,71,71,71,71,71,71,71,92, +71,71,71,123,71,218,71,71,71,118,12,12,12,12,71,71,71,218,71,71, +12,12,12,12,12,12,12,71,71,71,12,12,12,12,12,12,12,12,118,12, +12,92,92,92,12,92,12,71,12,92,92,12,92,92,92,92,92,12,92,92, +92,92,92,92,92,92,92,92,92,8,92,19,92,92,92,92,92,223,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,12,118,12,12, +12,92,92,12,92,12,12,12,71,12,49,12,92,92,12,12,71,12,12,12, +12,71,12,12,12,12,71,12,71,71,218,218,71,118,12,12,12,71,12,12, +71,123,71,71,99,71,71,123,71,123,71,123,71,71,71,71,71,71,71,71, +71,218,218,218,71,71,218,71,218,71,218,71,71,123,71,123,71,123,71,123, +218,71,218,218,218,218,71,71,71,71,71,12,12,12,12,12,12,12,71,71, +71,123,218,218,71,71,12,12,12,71,12,12,12,12,71,71,71,12,118,12, +12,92,12,12,12,12,12,12,71,12,92,12,92,12,12,118,12,12,12,92, +92,92,92,92,92,12,92,92,12,92,92,92,92,19,12,92,92,92,92,92, +12,92,92,92,92,92,92,92,92,8,19,108,19,108,12,19,92,92,92,92, +92,92,92,92,92,19,92,92,92,92,92,92,92,92,92,92,92,92,12,92, +92,92,92,92,92,92,12,12,12,12,71,12,92,92,92,92,12,92,118,12, +12,12,12,12,92,12,12,12,71,12,71,71,71,12,12,12,12,12,12,92, +112,118,71,12,71,71,71,218,71,71,71,71,71,71,12,12,12,12,12,12, +12,118,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, +71,71,71,71,71,71,71,71,118,71,12,71,12,12,12,12,12,71,71,123, +71,71,71,92,12,12,12,12,92,92,71,12,12,12,12,71,12,12,92,12, +92,92,12,118,12,12,118,12,12,92,92,92,92,12,12,12,12,92,92,92, +92,12,92,12,92,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,19,19,108,92,8,92,92,19,92,108,92,19,92,92,92, +92,108,92,92,92,12,92,92,12,92,92,92,92,92,92,92,92,92,92,12, +12,92,92,92,92,223,12,92,12,12,12,12,12,92,92,12,92,12,12,12, +12,12,12,12,49,12,92,92,92,92,12,12,71,12,12,12,12,12,12,12, +92,92,118,92,12,12,118,12,12,12,12,12,12,71,12,12,12,12,12,12, +12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, +12,12,118,118,12,118,12,12,12,12,12,12,12,12,12,12,12,12,71,12, +12,12,71,92,12,92,92,49,12,12,12,12,118,12,12,118,92,12,92,92, +12,12,12,12,123,12,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,92,92,19,92,92,108, +92,19,92,108,108,92,108,92,108,8,19,108,19,92,19,108,108,108,92,19, +92,92,19,92,108,108,92,108,108,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,12,12,12,12,12,12,92,92,92,92,92,92,12,12,12,12,12,118,12, +12,12,12,92,12,12,12,12,71,12,12,12,12,71,71,12,12,71,118,118, +12,12,12,12,12,118,12,12,12,92,12,12,12,12,12,71,12,12,118,12, +12,71,12,12,12,12,12,92,118,118,12,12,12,12,71,12,12,12,49,12, +92,12,92,92,92,12,92,12,12,12,12,12,92,92,92,92,92,92,92,92, +12,12,71,92,92,92,12,92,223,92,92,92,12,92,92,92,92,92,12,19, +92,92,92,92,92,92,108,92,108,19,92,108,108,108,92,92,19,108,92,108, +19,92,19,92,108,92,108,19,19,8,19,108,19,108,108,19,92,19,108,19, +19,108,108,19,19,92,108,92,92,108,19,12,108,108,92,19,108,108,92,19, +92,92,92,92,92,92,108,19,92,92,92,92,12,92,92,92,92,92,92,92, +92,92,92,12,12,118,123,92,12,12,92,92,92,92,92,92,12,12,12,12, +12,92,12,12,92,12,92,92,92,92,92,92,12,12,12,12,12,12,12,71, +71,12,12,12,12,12,12,12,71,12,12,12,12,12,12,92,12,12,92,12, +92,12,12,49,12,92,12,12,12,12,12,71,12,12,12,12,92,12,92,12, +92,92,92,92,92,12,12,12,12,92,12,12,92,92,92,92,92,92,12,12, +12,92,92,92,92,19,108,92,92,92,92,92,92,92,92,19,92,108,108,92, +92,92,92,19,108,92,19,108,92,108,108,92,19,92,108,19,108,92,108,92, +19,108,108,92,108,108,19,92,108,8,19,19,19,19,19,108,19,19,108,92, +19,19,108,92,19,19,108,19,108,92,108,19,92,19,92,92,92,19,92,92, +92,92,92,92,92,92,19,108,92,19,19,92,92,92,92,92,92,92,223,92, +223,92,92,92,92,92,92,92,92,92,92,92,92,223,92,92,92,12,92,12, +12,12,12,12,92,12,12,92,12,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,92,49,92,12,92,92,12,12,92,12,92,12,92,12,12,92,12, +12,12,12,12,12,12,12,92,92,92,12,92,92,92,92,92,92,92,92,92, +92,92,12,12,12,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,19,92,92,108,12,92,92,92,12,19,92,92,108,92,19,19,92, +92,92,92,92,108,19,92,19,19,92,92,108,108,92,108,92,19,19,19,108, +19,19,19,19,19,19,108,19,19,8,19,53,19,53,19,53,19,53,19,108, +19,108,19,108,108,108,19,108,19,108,19,108,108,108,108,19,108,19,108,19, +19,92,108,19,19,12,108,92,108,92,108,19,108,92,92,92,92,92,92,19, +92,19,108,92,19,92,92,92,92,92,92,92,92,92,92,92,108,108,19,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,92,92,92,12,92,19,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,108,19,92,92,223,92,92,92,92,92,92, +19,108,108,108,108,19,92,92,92,92,108,108,108,108,108,92,108,92,108,19, +92,19,108,108,19,108,108,108,108,108,19,19,19,19,19,19,108,108,53,19, +108,19,108,53,19,53,19,53,19,8,19,19,19,19,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,108,19,108,19, +19,19,19,19,108,19,108,19,108,19,108,19,19,19,19,108,19,92,92,92, +19,19,108,19,108,19,19,92,92,92,92,92,92,92,92,19,19,108,19,108, +19,92,19,92,92,92,92,92,92,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,19,19,19,92,19,19,92,19,19,108,92,92,92,19,92,92,92, +92,92,92,92,92,19,19,19,19,108,19,108,92,92,92,92,92,92,19,19, +92,19,223,19,108,19,108,92,19,19,19,19,19,19,108,19,108,19,108,19, +19,19,19,19,19,19,19,19,19,108,19,108,19,108,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,8}; diff --git a/plug-ins/Mandelbrot/mandelbrot.c b/plug-ins/Mandelbrot/mandelbrot.c deleted file mode 100644 index 57e708897a..0000000000 --- a/plug-ins/Mandelbrot/mandelbrot.c +++ /dev/null @@ -1,1413 +0,0 @@ -/********************************************************************** - * Mandelbrot Chaos Fractal Explorer Plug-in (Version 1.00) - * Daniel Cotting (cotting@mygale.org) - ********************************************************************** - * Official Homepage: http://www.mygale.org/~cotting - ********************************************************************** - * Homepages under construction: http://www.chez.com/cotting - * http://www.cyberbrain.com/cotting - * You won't be able to see anything yet, as I don't really have the - * time to build up these two sites :-( - * Have a look at www.mygale.org/~cotting instead! - ********************************************************************** - */ - -/* The GIMP -- an image manipulation program - * Copyright (C) 1995 Spencer Kimball and Peter Mattis - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include -#include -#include "gtk/gtk.h" -#include "libgimp/gimp.h" -#include "../include/logo.h" - -/***** Macros *****/ - -#define MIN(a, b) (((a) < (b)) ? (a) : (b)) -#define MAX(a, b) (((a) > (b)) ? (a) : (b)) - - -/***** Magic numbers *****/ - -#define PREVIEW_SIZE 128 -#define SCALE_WIDTH 200 -#define ENTRY_WIDTH 60 - -#define SINUS 0 -#define COSINUS 1 -#define NONE 2 - -/***** Types *****/ -typedef struct { - gdouble xmin; - gdouble xmax; - gdouble ymin; - gdouble ymax; - gdouble iter; - gint colormode; - gdouble redstretch; - gdouble greenstretch; - gdouble bluestretch; - gint redmode; - gint greenmode; - gint bluemode; -} mandelbrot_vals_t; - -typedef struct { - GtkWidget *preview; - guchar *image; - guchar *wimage; - gint run; -} mandelbrot_interface_t; - - - -/* Declare local functions. */ - -static void query (void); -static void run (char *name, - int nparams, - GParam *param, - int *nreturn_vals, - GParam **return_vals); - -static void mandelbrot (GDrawable *drawable); -static void mandelbrot_render_row (const guchar *src_row, - guchar *dest_row, - gint row, - gint row_width, - gint bytes); -static void mandelbrot_get_pixel(int x, int y, guchar *pixel); -void transform (short int *, short int *, short int *,double, double, double); - - -static void build_preview_source_image(void); - -static gint mandelbrot_dialog(void); -static void dialog_update_preview(void); -static void dialog_create_value(char *title, GtkTable *table, int row, gdouble *value, - int left, int right); -static void dialog_scale_update(GtkAdjustment *adjustment, gdouble *value); -static void dialog_entry_update(GtkWidget *widget, gdouble *value); -static void dialog_close_callback(GtkWidget *widget, gpointer data); -static void dialog_ok_callback(GtkWidget *widget, gpointer data); -/* static void dialog_reset_callback(GtkWidget *widget, gpointer data); */ -static void dialog_cancel_callback(GtkWidget *widget, gpointer data); -static void mandelbrot_toggle_update (GtkWidget *widget, - gpointer data); -static float xmin=-2; -static float xmax=1; - -static float ymin=-1.5; -static float ymax=1.5; -static float xbild; -static float ybild; -static float xdiff; -static float ydiff; - -/***** Variables *****/ - -GPlugInInfo PLUG_IN_INFO = -{ - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ -}; - -static mandelbrot_interface_t wint = { - NULL, /* preview */ - NULL, /* image */ - NULL, /* wimage */ - FALSE /* run */ -}; /* wint */ - -static mandelbrot_vals_t wvals = { - -2.0,1.0,-1.5,1.5,50.0,0,128,128,128,1,1,0, -}; /* wvals */ - -static GDrawable *drawable; -static gint tile_width, tile_height; -static gint img_width, img_height, img_bpp; -static gint sel_x1, sel_y1, sel_x2, sel_y2; -static gint sel_width, sel_height; -static gint preview_width, preview_height; -static GTile *the_tile = NULL; -static double cen_x, cen_y; -static double scale_x, scale_y; - -gint do_redsinus; -gint do_redcosinus; -gint do_rednone; - -gint do_greensinus; -gint do_greencosinus; -gint do_greennone; - -gint do_bluesinus; -gint do_bluecosinus; -gint do_bluenone; - -gint do_colormode1; -gint do_colormode2; - -static GParam *ExternalParam=NULL; -static int ExternalInt; -/***** Functions *****/ - - -GtkWidget * mandelbrot_logo_dialog(void); - - -GtkWidget *maindlg; -GtkWidget *logodlg; - - - -MAIN (); - -static void -query () -{ - static GParamDef args[] = - { - { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, - { PARAM_IMAGE, "image", "Input image" }, - { PARAM_DRAWABLE, "drawable", "Input drawable" }, - { PARAM_FLOAT, "xmin", "xmin fractal image delimiter" }, - { PARAM_FLOAT, "xmax", "xmax fractal image delimiter" }, - { PARAM_FLOAT, "ymin", "ymin fractal image delimiter" }, - { PARAM_FLOAT, "ymax", "ymax fractal image delimiter" }, - { PARAM_FLOAT, "iter", "Iteration value" }, - { PARAM_INT8, "colormode", "0: Apply colormap as specified by the parameters below; 1: Apply active gradient to final image"}, - { PARAM_FLOAT, "redstretch", "Red stretching factor" }, - { PARAM_FLOAT, "greenstretch","Green stretching factor" }, - { PARAM_FLOAT, "bluestretch", "Blue stretching factor" }, - { PARAM_INT8, "redmode", "Red application mode (0:SIN;1:COS;2:NONE)" }, - { PARAM_INT8, "greenmode", "Green application mode (0:SIN;1:COS;2:NONE)" }, - { PARAM_INT8, "bluemode", "Blue application mode (0:SIN;1:COS;2:NONE)" }, - }; - static GParamDef *return_vals = NULL; - static int nargs = sizeof (args) / sizeof (args[0]); - static int nreturn_vals = 0; - - gimp_install_procedure ("plug_in_mandelbrot", - "Mandelbrot Chaos Fractal Explorer Plug-In", - "Fills the active painting area with a Mandelbrot fractal.", - "Daniel Cotting (cotting@mygale.org, www.mygale.org/~cotting)", - "Daniel Cotting (cotting@mygale.org, www.mygale.org/~cotting)", - "1th May 1997", - "/Filters/Render/Mandelbrot Fractal", - "RGB*", - PROC_PLUG_IN, - nargs, nreturn_vals, - args, return_vals); -} - - -static void -run (char *name, - int nparams, - GParam *param, - int *nreturn_vals, - GParam **return_vals) -{ - static GParam values[1]; - /* GDrawable *drawable; */ - gint32 image_ID; - GRunModeType run_mode; - double xhsiz, yhsiz; - int pwidth, pheight; - GStatusType status = STATUS_SUCCESS; - - - run_mode = param[0].data.d_int32; - - values[0].type = PARAM_STATUS; - values[0].data.d_status = status; - - *nreturn_vals = 1; - *return_vals = values; - - - - /* Get the specified drawable */ - drawable = gimp_drawable_get (param[2].data.d_drawable); - image_ID = param[1].data.d_image; - tile_width = gimp_tile_width(); - tile_height = gimp_tile_height(); - - img_width = gimp_drawable_width(drawable->id); - img_height = gimp_drawable_height(drawable->id); - img_bpp = gimp_drawable_bpp(drawable->id); - - gimp_drawable_mask_bounds(drawable->id, &sel_x1, &sel_y1, &sel_x2, &sel_y2); - - sel_width = sel_x2 - sel_x1; - sel_height = sel_y2 - sel_y1; - - cen_x = (double) (sel_x2 - 1 + sel_x1) / 2.0; - cen_y = (double) (sel_y2 - 1 + sel_y1) / 2.0; - - xhsiz = (double) (sel_width - 1) / 2.0; - yhsiz = (double) (sel_height - 1) / 2.0; - - if (xhsiz < yhsiz) { - scale_x = yhsiz / xhsiz; - scale_y = 1.0; - } else if (xhsiz > yhsiz) { - scale_x = 1.0; - scale_y = xhsiz / yhsiz; - } else { - scale_x = 1.0; - scale_y = 1.0; - } /* else */ - - /* Calculate preview size */ - if (sel_width > sel_height) { - pwidth = MIN(sel_width, PREVIEW_SIZE); - pheight = sel_height * pwidth / sel_width; - } else { - pheight = MIN(sel_height, PREVIEW_SIZE); - pwidth = sel_width * pheight / sel_height; - } /* else */ - - preview_width = MAX(pwidth, 2); /* Min size is 2 */ - preview_height = MAX(pheight, 2); - - /* See how we will run */ - switch (run_mode) { - case RUN_INTERACTIVE: - /* Possibly retrieve data */ - - gimp_get_data("plug_in_mandelbrot", &wvals); - - /* Get information from the dialog */ - - if (!mandelbrot_dialog()) - return; - - break; - - case RUN_NONINTERACTIVE: - /* Make sure all the arguments are present */ - - if (nparams != 15) - status = STATUS_CALLING_ERROR; - - if (status == STATUS_SUCCESS) - - wvals.xmin = param[3].data.d_float; - wvals.xmax = param[4].data.d_float; - wvals.ymin = param[5].data.d_float; - wvals.ymax = param[6].data.d_float; - wvals.iter = param[7].data.d_float; - wvals.colormode = param[8].data.d_int8; - wvals.redstretch = param[9].data.d_float; - wvals.greenstretch = param[10].data.d_float; - wvals.bluestretch = param[11].data.d_float; - wvals.redmode = param[12].data.d_int8; - wvals.greenmode = param[13].data.d_int8; - wvals.bluemode = param[14].data.d_int8; - - break; - - case RUN_WITH_LAST_VALS: - /* Possibly retrieve data */ - - gimp_get_data("plug_in_mandelbrot", &wvals); - break; - - default: - break; - } /* switch */ - - - if (status == STATUS_SUCCESS) - { - /* Make sure that the drawable is indexed or RGB color */ - if (gimp_drawable_color (drawable->id)) - { - gimp_progress_init ("Rendering mandelbrot fractal..."); - - /* Set the tile cache size */ - - gimp_tile_cache_ntiles(2*(drawable->width / gimp_tile_width()+1)); - - /* Run! */ - - -/* gimp_tile_cache_ntiles (2 * (drawable->width / gimp_tile_width () - + 1));*/ - mandelbrot (drawable); - if (wvals.colormode==1) ExternalParam = gimp_run_procedure("plug_in_gradmap",&ExternalInt, - PARAM_INT32, run_mode, - PARAM_IMAGE, image_ID, - PARAM_DRAWABLE, drawable->id, - PARAM_END); - - if (run_mode != RUN_NONINTERACTIVE) - gimp_displays_flush(); - - /* Store data */ - - if (run_mode == RUN_INTERACTIVE) - gimp_set_data("plug_in_mandelbrot", &wvals, sizeof(mandelbrot_vals_t)); - } - else - { - /* gimp_message("This filter only applies on RGB-images"); */ - status = STATUS_EXECUTION_ERROR; - } - } - - values[0].data.d_status = status; - - gimp_drawable_detach (drawable); -} - -/*****/ - -static void -mandelbrot_get_pixel(int x, int y, guchar *pixel) -{ - static gint row = -1; - static gint col = -1; - - gint newcol, newrow; - gint newcoloff, newrowoff; - guchar *p; - int i; - - if ((x < 0) || (x >= img_width) || (y < 0) || (y >= img_height)) { - pixel[0] = 0; - pixel[1] = 0; - pixel[2] = 0; - pixel[3] = 0; - - return; - } /* if */ - - newcol = x / tile_width; /* The compiler should optimize this */ - newcoloff = x % tile_width; - newrow = y / tile_height; - newrowoff = y % tile_height; - - if ((col != newcol) || (row != newrow) || (the_tile == NULL)) { - - if (the_tile != NULL) - gimp_tile_unref(the_tile, FALSE); - - the_tile = gimp_drawable_get_tile(drawable, FALSE, newrow, newcol); - gimp_tile_ref(the_tile); - col = newcol; - row = newrow; - } /* if */ - p = the_tile->data + the_tile->bpp * (the_tile->ewidth * newrowoff + newcoloff); - for (i = img_bpp; i; i--) - *pixel++ = *p++; - -} /* mandelbrot_get_pixel */ - - - -static void -mandelbrot_render_row (const guchar *src_row, - guchar *dest_row, - gint row, - gint row_width, - gint bytes) - - - - -{ - gint col, bytenum; - double redstretch,greenstretch, bluestretch; - for (col = 0; col < row_width ; col++) - { - float a,tb,x,y,xx; - int zaehler,color,r,g,b; - float pi=3.1415926; - - redstretch = wvals.redstretch; - greenstretch = wvals.greenstretch; - bluestretch = wvals.bluestretch; - /* v1 = (short int)src_row[col*bytes]; */ - /* v2 = (short int)src_row[col*bytes +1]; */ - /* v3 = (short int)src_row[col*bytes +2]; */ - - /* transform(&v1, &v2, &v3, redstretch, greenstretch, bluestretch); */ - a=xmin+col*xdiff; - tb=ymin+row*ydiff; - x=0; - y=0; - zaehler=0; - for (zaehler=0; (zaehler <= wvals.iter) && ((x*x+y*y)<4); zaehler++) - { - xx=x*x-y*y+a; - y=2*x*y+tb; - x=xx; - } - color=zaehler*256/wvals.iter; - r=g=b=color; - switch (wvals.redmode) - { - case SINUS: - r = (int) redstretch*(1.0+sin((r/128.0-1)*pi)); - break; - case COSINUS: - r = (int) redstretch*(1.0+cos((r/128.0-1)*pi)); - break; - default: - break; - } - - switch (wvals.greenmode) - { - case SINUS: - g = (int) greenstretch*(1.0+sin((g/128.0-1)*pi)); - break; - case COSINUS: - g = (int) greenstretch*(1.0+cos((g/128.0-1)*pi)); - break; - default: - break; - } - switch (wvals.bluemode) - { - case SINUS: - b = (int) bluestretch*(1.0+sin((b/128.0-1)*pi)); - break; - case COSINUS: - b = (int) bluestretch*(1.0+cos((b/128.0-1)*pi)); - break; - default: - break; - } - - dest_row[col*bytes] = (int)r; - dest_row[col*bytes +1] = (int)g; - dest_row[col*bytes +2] = (int)b; - - if (bytes>3) - for (bytenum = 3; bytenumid, &x1, &y1, &x2, &y2); - - /* Get the size of the input image. (This will/must be the same - * as the size of the output image. - */ - width = drawable->width; - height = drawable->height; - bytes = drawable->bpp; - - /* allocate row buffers */ - src_row = (guchar *) malloc ((x2 - x1) * bytes); - dest_row = (guchar *) malloc ((x2 - x1) * bytes); - - - /* initialize the pixel regions */ - gimp_pixel_rgn_init (&srcPR, drawable, 0, 0, width, height, FALSE, FALSE); - gimp_pixel_rgn_init (&destPR, drawable, 0, 0, width, height, TRUE, TRUE); - -/* - redstretch = wvals.redstretch; - greenstretch = wvals.greenstretch; - bluestretch = wvals.bluestretch; -*/ - xbild=width; - ybild=height; - xdiff=(xmax-xmin)/xbild; - ydiff=(ymax-ymin)/ybild; - - for (row = y1; row < y2; row++) - - { - gimp_pixel_rgn_get_row (&srcPR, src_row, x1, row, (x2 - x1)); - - mandelbrot_render_row (src_row, - dest_row, - row, - (x2 - x1), - bytes); - - /* store the dest */ - gimp_pixel_rgn_set_row (&destPR, dest_row, x1, row, (x2 - x1)); - - if ((row % 10) == 0) - gimp_progress_update ((double) row / (double) (y2 - y1)); - } - - /* update the processed region */ - gimp_drawable_flush (drawable); - gimp_drawable_merge_shadow (drawable->id, TRUE); - gimp_drawable_update (drawable->id, x1, y1, (x2 - x1), (y2 - y1)); - - free (src_row); - free (dest_row); -} - -/*****/ - -static void -build_preview_source_image(void) -{ - double left, right, bottom, top; - double px, py; - double dx, dy; - int x, y; - guchar *p; - guchar pixel[4]; - - wint.image = g_malloc(preview_width * preview_height * 3 * sizeof(guchar)); - wint.wimage = g_malloc(preview_width * preview_height * 3 * sizeof(guchar)); - - left = sel_x1; - right = sel_x2 - 1; - bottom = sel_y2 - 1; - top = sel_y1; - - dx = (right - left) / (preview_width - 1); - dy = (bottom - top) / (preview_height - 1); - - py = top; - - p = wint.image; - - for (y = 0; y < preview_height; y++) { - px = left; - for (x = 0; x < preview_width; x++) { - mandelbrot_get_pixel((int) px, (int) py, pixel); - - *p++ = pixel[0]; - *p++ = pixel[1]; - *p++ = pixel[2]; - - px += dx; - } /* for */ - - py += dy; - } /* for */ -} /* build_preview_source_image */ - - -/*****/ - -static gint -mandelbrot_dialog(void) -{ - GtkWidget *dialog; - GtkWidget *top_table; - GtkWidget *top_table2; - GtkWidget *frame; - GtkWidget *frame2; - GtkWidget *frame3; - GtkWidget *toggle; - GtkWidget *toggle_vbox; - GtkWidget *toggle_vbox2; - GtkWidget *toggle_vbox3; - GtkWidget *table, *table6; - GtkWidget *button; - gint argc; - gchar **argv; - guchar *color_cube; - GSList *redmode_group = NULL; - GSList *greenmode_group = NULL; - GSList *bluemode_group = NULL; - GSList *colormode_group = NULL; - - do_redsinus = (wvals.redmode == SINUS); - do_redcosinus = (wvals.redmode == COSINUS); - do_rednone = (wvals.redmode == NONE); - do_greensinus = (wvals.greenmode == SINUS); - do_greencosinus = (wvals.greenmode == COSINUS); - do_greennone = (wvals.greenmode == NONE); - do_bluesinus = (wvals.bluemode == SINUS); - do_bluecosinus = (wvals.bluemode == COSINUS); - do_bluenone = (wvals.bluemode == NONE); - do_colormode1 = (wvals.colormode == 0); - do_colormode2 = (wvals.colormode == 1); - - - argc = 1; - argv = g_new(gchar *, 1); - argv[0] = g_strdup("mandelbrot"); - - gtk_init(&argc, &argv); - - gtk_preview_set_gamma(gimp_gamma()); - gtk_preview_set_install_cmap(gimp_install_cmap()); - color_cube = gimp_color_cube(); - gtk_preview_set_color_cube(color_cube[0], color_cube[1], color_cube[2], color_cube[3]); - - gtk_widget_set_default_visual(gtk_preview_get_visual()); - gtk_widget_set_default_colormap(gtk_preview_get_cmap()); - - build_preview_source_image(); - dialog = maindlg = gtk_dialog_new(); - gtk_window_set_title(GTK_WINDOW(dialog), "Mandelbrot Fractal Explorer (cotting@mygale.org)"); - gtk_window_position(GTK_WINDOW(dialog), GTK_WIN_POS_MOUSE); - gtk_container_border_width(GTK_CONTAINER(dialog), 0); - gtk_signal_connect(GTK_OBJECT(dialog), "destroy", - (GtkSignalFunc) dialog_close_callback, - NULL); - - top_table = gtk_table_new(4, 4, FALSE); - gtk_container_border_width(GTK_CONTAINER(top_table), 0); - gtk_table_set_row_spacings(GTK_TABLE(top_table), 0); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), top_table, FALSE, FALSE, 0); - gtk_widget_show(top_table); - - /* Preview */ - - frame = gtk_frame_new(NULL); - gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); - gtk_table_attach(GTK_TABLE(top_table), frame, 0, 1, 0, 1,0,0, 0, 0); - gtk_widget_show(frame); - - wint.preview = gtk_preview_new(GTK_PREVIEW_COLOR); - gtk_preview_size(GTK_PREVIEW(wint.preview), preview_width, preview_height); - gtk_container_add(GTK_CONTAINER(frame), wint.preview); - gtk_widget_show(wint.preview); - - /* Controls */ - - frame = gtk_frame_new ("Fractal options:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (top_table), frame, 1, 4, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - gtk_widget_show(frame); - - toggle_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - - table = gtk_table_new(5, 5, FALSE); - gtk_container_border_width(GTK_CONTAINER(table), 5); - gtk_table_set_row_spacings(GTK_TABLE(table), 0); - gtk_box_pack_start(GTK_BOX(toggle_vbox),table, FALSE, FALSE, 0); - gtk_widget_show(table); - dialog_create_value("XMIN", GTK_TABLE(table), 0, &wvals.xmin,-10,10); - dialog_create_value("XMAX", GTK_TABLE(table), 1, &wvals.xmax,-10,10); - dialog_create_value("YMIN", GTK_TABLE(table), 2, &wvals.ymin,-10,10); - dialog_create_value("YMAX", GTK_TABLE(table), 3, &wvals.ymax,-10,10); - dialog_create_value("ITER", GTK_TABLE(table), 4, &wvals.iter,0,1000); - gtk_widget_show(table); - gtk_widget_show(toggle_vbox); - gtk_widget_show(frame); - - - frame2 = gtk_frame_new ("Color options:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame2), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (top_table), frame2, 0, 4, 1, 3, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - gtk_widget_show(frame2); - - toggle_vbox2 = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox2), 0); - gtk_container_add (GTK_CONTAINER (frame2), toggle_vbox2); - gtk_widget_show(toggle_vbox2); - - top_table2 = gtk_table_new(5, 5, FALSE); - gtk_container_border_width(GTK_CONTAINER(top_table2), 10); - gtk_table_set_row_spacings(GTK_TABLE(top_table2), 0); - gtk_box_pack_start(GTK_BOX(toggle_vbox2), top_table2, FALSE, FALSE, 0); - gtk_widget_show(top_table2); - - - frame = gtk_frame_new ("Color density:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (top_table2), frame, 0, 1, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - gtk_widget_show(frame); - - toggle_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - gtk_widget_show(toggle_vbox); - - table6 = gtk_table_new(3, 3, FALSE); - gtk_container_border_width(GTK_CONTAINER(table6), 0); - gtk_table_set_row_spacings(GTK_TABLE(table6), 0); - gtk_box_pack_start(GTK_BOX(toggle_vbox), table6, FALSE, FALSE, 0); - gtk_widget_show(table6); - dialog_create_value("Red", GTK_TABLE(table6), 0, &wvals.redstretch,0,128); - dialog_create_value("Green", GTK_TABLE(table6), 1, &wvals.greenstretch,0,128); - dialog_create_value("Blue", GTK_TABLE(table6), 2, &wvals.bluestretch,0,128); - gtk_widget_show (toggle_vbox); - gtk_widget_show (frame); - - frame3 = gtk_frame_new ("Color function:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame3), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (top_table2), frame3, 0, 1, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - gtk_widget_show (frame3); - - toggle_vbox3 = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox3), 0); - gtk_container_add (GTK_CONTAINER (frame3), toggle_vbox3); - gtk_widget_show (toggle_vbox3); - - table6 = gtk_table_new(4, 4, FALSE); - gtk_container_border_width(GTK_CONTAINER(table6), 0); - gtk_table_set_row_spacings(GTK_TABLE(table6), 0); - gtk_box_pack_start(GTK_BOX(toggle_vbox3), table6, FALSE, FALSE, 0); - gtk_widget_show(table6); - - frame = gtk_frame_new ("Red:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (table6), frame, 0, 1, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - gtk_widget_show (frame); - - toggle_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - gtk_widget_show (toggle_vbox); - /* <------------------------------- */ - toggle = gtk_radio_button_new_with_label (redmode_group, "Sine"); - redmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mandelbrot_toggle_update, - &do_redsinus); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_redsinus); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (redmode_group, "Cosine"); - redmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mandelbrot_toggle_update, - &do_redcosinus); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_redcosinus); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (redmode_group, "None"); - redmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mandelbrot_toggle_update, - &do_rednone); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_rednone); - gtk_widget_show (toggle); - gtk_widget_show (toggle_vbox); - gtk_widget_show (frame); - - -/* Greenmode toggle box */ - frame = gtk_frame_new ("Green:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (table6), frame, 1, 2, 0,1 , GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - gtk_widget_show (frame); - toggle_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - gtk_widget_show (toggle_vbox); - - /* <----- */ - toggle = gtk_radio_button_new_with_label (greenmode_group, "Sine"); - greenmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mandelbrot_toggle_update, - &do_greensinus); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_greensinus); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (greenmode_group, "Cosine"); - greenmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mandelbrot_toggle_update, - &do_greencosinus); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_greencosinus); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (greenmode_group, "None"); - greenmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mandelbrot_toggle_update, - &do_greennone); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_greennone); - gtk_widget_show (toggle); - - gtk_widget_show (toggle_vbox); - gtk_widget_show (frame); - - -/* Bluemode toggle box */ - frame = gtk_frame_new ("Blue:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (table6), frame, 2, 3,0,1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - gtk_widget_show (frame); - toggle_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - gtk_widget_show (toggle_vbox); - - toggle = gtk_radio_button_new_with_label (bluemode_group, "Sine"); - bluemode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mandelbrot_toggle_update, - &do_bluesinus); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_bluesinus); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (bluemode_group, "Cosine"); - bluemode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mandelbrot_toggle_update, - &do_bluecosinus); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_bluecosinus); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (bluemode_group, "None"); - bluemode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mandelbrot_toggle_update, - &do_bluenone); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_bluenone); - gtk_widget_show (toggle); - gtk_widget_show (toggle_vbox); - gtk_widget_show (frame); - gtk_widget_show (toggle_vbox3); - gtk_widget_show (frame3); - -/* Colormode toggle box */ - frame = gtk_frame_new ("Color Mode:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (top_table2), frame, 0, 1, 2, 3, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - toggle_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - - toggle = gtk_radio_button_new_with_label (colormode_group, "As specified above"); - bluemode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mandelbrot_toggle_update, - &do_colormode1); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_colormode1); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (bluemode_group, "Apply active gradient to final image"); - bluemode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mandelbrot_toggle_update, - &do_colormode2); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_colormode2); - gtk_widget_show (toggle); - - gtk_widget_show (toggle_vbox); - gtk_widget_show (frame); - /* gtk_widget_show (table); */ - - - /* Buttons */ - - -gtk_container_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), 5); - - button = gtk_button_new_with_label("OK"); - GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - (GtkSignalFunc) dialog_ok_callback, - dialog); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); - gtk_widget_grab_default(button); - gtk_widget_show(button); - - button = gtk_button_new_with_label("Cancel"); - GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - (GtkSignalFunc) dialog_cancel_callback, - dialog); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); - gtk_widget_show(button); - - button = gtk_button_new_with_label("About..."); - GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - (GtkSignalFunc)mandelbrot_about_callback,button); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), - button, TRUE, TRUE, 0); - gtk_widget_show(button); - - -/* - button = gtk_button_new_with_label("Reset"); - GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - (GtkSignalFunc) dialog_reset_callback, - dialog); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); - gtk_widget_show(button); -*/ - /* Done */ - - gtk_widget_show(dialog); - dialog_update_preview(); - - gtk_main(); - gdk_flush(); - if (the_tile != NULL) { - gimp_tile_unref(the_tile, FALSE); - the_tile = NULL; - } /* if */ - - g_free(wint.image); - g_free(wint.wimage); - - return wint.run; -} /* mandelbrot_dialog */ - - -/*****/ - -static void -dialog_update_preview(void) -{ - double left, right, bottom, top; - double dx, dy; - int px, py; - int x, y; - double redstretch, greenstretch, bluestretch; - int r,g,b; - double scale_x, scale_y; - guchar *p_ul, *i, *p; - float ta,tb,tx,ty,txx; - int zaehler,color; - float pi=3.1415926; - - left = sel_x1; - right = sel_x2 - 1; - bottom = sel_y2 - 1; - top = sel_y1; - dx = (right - left) / (preview_width - 1); - dy = (bottom - top) / (preview_height - 1); - - xmin = wvals.xmin; - xmax = wvals.xmax; - ymin = wvals.ymin; - ymax = wvals.ymax; - redstretch = wvals.redstretch; - greenstretch = wvals.greenstretch; - bluestretch = wvals.bluestretch; - xbild=preview_width; - ybild=preview_height; - xdiff=(xmax-xmin)/xbild; - ydiff=(ymax-ymin)/ybild; - - scale_x = (double) (preview_width - 1) / (right - left); - scale_y = (double) (preview_height - 1) / (bottom - top); - - py = 0; - - p_ul = wint.wimage; - - - - for (y = 0; y < preview_height; y++) { - px = 0; - - for (x = 0; x < preview_width; x++) { - i = wint.image + 3 * (preview_width * py + px); - r = *i++; - g = *i++; - b = *i; - ta=(float)xmin+(float)x*xdiff; - tb=(float)ymin+(float)y*ydiff; - tx=0; - ty=0; - zaehler=0; - for (zaehler=0; (zaehler <= wvals.iter) && ((tx*tx+ty*ty)<4); zaehler++) - { - txx=tx*tx-ty*ty+ta; - ty=2.0*tx*ty+tb; - tx=txx; - } - r=g=b=color=zaehler*256/wvals.iter; - switch (wvals.redmode) - { - case SINUS: - r = (int) redstretch*(1.0+sin((r/128.0-1)*pi)); - break; - case COSINUS: - r = (int) redstretch*(1.0+cos((r/128.0-1)*pi)); - break; - default: - break; - } - - switch (wvals.greenmode) - { - case SINUS: - g = (int) greenstretch*(1.0+sin((g/128.0-1)*pi)); - break; - case COSINUS: - g = (int) greenstretch*(1.0+cos((g/128.0-1)*pi)); - break; - default: - break; - } - switch (wvals.bluemode) - { - case SINUS: - b = (int) bluestretch*(1.0+sin((b/128.0-1)*pi)); - break; - case COSINUS: - b = (int) bluestretch*(1.0+cos((b/128.0-1)*pi)); - break; - default: - break; - } - - - p_ul[0] = r; - p_ul[1] = g; - p_ul[2] = b; - p_ul += 3; - px += 1; /* dx; */ - } /* for */ - py +=1; /* dy; */ - } /* for */ - - p = wint.wimage; - - for (y = 0; y < preview_height; y++) { - gtk_preview_draw_row(GTK_PREVIEW(wint.preview), p, 0, y, preview_width); - p += preview_width * 3; - } /* for */ - gtk_widget_draw(wint.preview, NULL); - gdk_flush(); -} /* dialog_update_preview */ - - -/*****/ - -static void -dialog_create_value(char *title, GtkTable *table, int row, gdouble *value, - int left, int right) -{ - GtkWidget *label; - GtkWidget *scale; - GtkWidget *entry; - GtkObject *scale_data; - char buf[256]; - - label = gtk_label_new(title); - gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); - gtk_table_attach(table, label, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, 4, 0); - gtk_widget_show(label); - - - scale_data = gtk_adjustment_new(*value, left, right, - (right - left) / 20, - (right - left) / 20, - 0); - - gtk_signal_connect(GTK_OBJECT(scale_data), "value_changed", - (GtkSignalFunc) dialog_scale_update, - value); - - scale = gtk_hscale_new(GTK_ADJUSTMENT(scale_data)); - gtk_widget_set_usize(scale, SCALE_WIDTH, 0); - gtk_table_attach(table, scale, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_scale_set_draw_value(GTK_SCALE(scale), FALSE); - gtk_scale_set_digits(GTK_SCALE(scale), 3); - gtk_range_set_update_policy(GTK_RANGE(scale), GTK_UPDATE_CONTINUOUS); - gtk_widget_show(scale); - - entry = gtk_entry_new(); - gtk_object_set_user_data(GTK_OBJECT(entry), scale_data); - gtk_object_set_user_data(scale_data, entry); - gtk_widget_set_usize(entry, ENTRY_WIDTH, 0); - sprintf(buf, "%0.2f", *value); - gtk_entry_set_text(GTK_ENTRY(entry), buf); - gtk_signal_connect(GTK_OBJECT(entry), "changed", - (GtkSignalFunc) dialog_entry_update, - value); - gtk_table_attach(GTK_TABLE(table), entry, 2, 3, row, row + 1, 0,0,4, 0); - gtk_widget_show(entry); -} /* dialog_create_value */ - -/*****/ - -static void -dialog_scale_update(GtkAdjustment *adjustment, gdouble *value) -{ - GtkWidget *entry; - char buf[256]; - - if (*value != adjustment->value) { - *value = adjustment->value; - - entry = gtk_object_get_user_data(GTK_OBJECT(adjustment)); - sprintf(buf, "%0.2f", *value); - - gtk_signal_handler_block_by_data(GTK_OBJECT(entry), value); - gtk_entry_set_text(GTK_ENTRY(entry), buf); - gtk_signal_handler_unblock_by_data(GTK_OBJECT(entry), value); - - dialog_update_preview(); - } /* if */ -} /* dialog_scale_update */ -/*****/ - -static void -dialog_entry_update(GtkWidget *widget, gdouble *value) -{ - GtkAdjustment *adjustment; - gdouble new_value; - - new_value = atof(gtk_entry_get_text(GTK_ENTRY(widget))); - - if (*value != new_value) { - adjustment = gtk_object_get_user_data(GTK_OBJECT(widget)); - - if ((new_value >= adjustment->lower) && - (new_value <= adjustment->upper)) { - *value = new_value; - adjustment->value = new_value; - - gtk_signal_emit_by_name(GTK_OBJECT(adjustment), "value_changed"); - - dialog_update_preview(); - } /* if */ - } /* if */ -} /* dialog_entry_update */ - - -static void -dialog_close_callback(GtkWidget *widget, gpointer data) -{ - gtk_main_quit(); -} /* dialog_close_callback */ - - -/*****/ - -static void -dialog_ok_callback(GtkWidget *widget, gpointer data) -{ - wint.run = TRUE; - gtk_widget_destroy(GTK_WIDGET(data)); -} /* dialog_ok_callback */ - - -/*****/ -/* -static void -dialog_reset_callback(GtkWidget *widget, gpointer data) -{ -static mandelbrot_vals_t wvals = { - -2,1,-1.5,1.5,100,0,128,128,128,0,0,0, -}; - gtk_widget_destroy(GTK_WIDGET(data)); - mandelbrot_dialog(); -} -*/ - -/*****/ - -static void -dialog_cancel_callback(GtkWidget *widget, gpointer data) -{ - gtk_widget_destroy(GTK_WIDGET(data)); -} /* dialog_cancel_callback */ - - -static void -mandelbrot_toggle_update (GtkWidget *widget, - gpointer data) -{ - int *toggle_val; - - toggle_val = (int *) data; - - if (GTK_TOGGLE_BUTTON (widget)->active) - *toggle_val = TRUE; - else - *toggle_val = FALSE; - if (do_redsinus) - wvals.redmode = SINUS; - else if (do_redcosinus) - wvals.redmode = COSINUS; - else if (do_rednone) - wvals.redmode = NONE; - - if (do_greensinus) - wvals.greenmode = SINUS; - else if (do_greencosinus) - wvals.greenmode = COSINUS; - else if (do_greennone) - wvals.greenmode = NONE; - - if (do_bluesinus) - wvals.bluemode = SINUS; - else if (do_bluecosinus) - wvals.bluemode = COSINUS; - else if (do_bluenone) - wvals.bluemode = NONE; - dialog_update_preview(); - - if (do_colormode1) - wvals.colormode = 0; - else if (do_colormode2) - wvals.colormode = 1; - dialog_update_preview(); - -} - -GtkWidget * -mandelbrot_logo_dialog() -{ - GtkWidget *xdlg; - GtkWidget *xlabel; - GtkWidget *xbutton; - GtkWidget *xlogo_box; - GtkWidget *xpreview; - GtkWidget *xframe,*xframe2; - GtkWidget *xvbox; - GtkWidget *xhbox; - char *text; - gchar *temp,*temp2; - char *datapointer; - gint y,x; - xdlg = logodlg = gtk_dialog_new(); - gtk_window_set_title(GTK_WINDOW(xdlg), "About"); - gtk_window_position(GTK_WINDOW(xdlg), GTK_WIN_POS_MOUSE); - gtk_signal_connect(GTK_OBJECT(xdlg), "destroy", - (GtkSignalFunc)dialog_close_callback, - NULL); - - xbutton = gtk_button_new_with_label("OK"); - GTK_WIDGET_SET_FLAGS(xbutton, GTK_CAN_DEFAULT); - gtk_signal_connect(GTK_OBJECT(xbutton), "clicked", - (GtkSignalFunc)mandelbrot_logo_ok_callback, - xdlg); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(xdlg)->action_area), - xbutton, TRUE, TRUE, 0); - gtk_widget_grab_default(xbutton); - gtk_widget_show(xbutton); - - xframe = gtk_frame_new(NULL); - gtk_frame_set_shadow_type(GTK_FRAME(xframe), GTK_SHADOW_ETCHED_IN); - gtk_container_border_width(GTK_CONTAINER(xframe), 10); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(xdlg)->vbox), xframe, TRUE, TRUE, 0); - xvbox = gtk_vbox_new(FALSE, 5); - gtk_container_border_width(GTK_CONTAINER(xvbox), 10); - gtk_container_add(GTK_CONTAINER(xframe), xvbox); - - /* The logo frame & drawing area */ - xhbox = gtk_hbox_new (FALSE, 5); - gtk_box_pack_start (GTK_BOX (xvbox), xhbox, FALSE, TRUE, 0); - - xlogo_box = gtk_vbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX (xhbox), xlogo_box, FALSE, FALSE, 0); - - xframe2 = gtk_frame_new (NULL); - gtk_frame_set_shadow_type (GTK_FRAME (xframe2), GTK_SHADOW_IN); - gtk_box_pack_start (GTK_BOX (xlogo_box), xframe2, FALSE, FALSE, 0); - - xpreview = gtk_preview_new (GTK_PREVIEW_COLOR); - gtk_preview_size (GTK_PREVIEW (xpreview), logo_width, logo_height); - temp = g_malloc((logo_width+10)*3); - datapointer=header_data; - for (y = 0; y < logo_height; y++){ - temp2=temp; - for (x = 0; x< logo_width; x++) { - HEADER_PIXEL(datapointer,temp2); temp2+=3;} - gtk_preview_draw_row (GTK_PREVIEW (xpreview), - temp, - 0, y, logo_width); - } - g_free(temp); - gtk_container_add (GTK_CONTAINER (xframe2), xpreview); - gtk_widget_show (xpreview); - gtk_widget_show (xframe2); - gtk_widget_show (xlogo_box); - gtk_widget_show (xhbox); - - xhbox = gtk_hbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(xvbox), xhbox, TRUE, TRUE, 0); - text = "\nCotting Software Productions\n" - "Bahnhofstrasse 31\n" - "CH-3066 Stettlen (Switzerland)\n\n" - "cotting@mygale.org\n" - "http://www.mygale.org/~cotting\n\n" - "Mandelbrot Fractal Chaos Explorer Plug-In for the GIMP\n" - "Version 1.00\n"; - xlabel = gtk_label_new(text); - gtk_box_pack_start(GTK_BOX(xhbox), xlabel, TRUE, FALSE, 0); - gtk_widget_show(xlabel); - - gtk_widget_show(xhbox); - - gtk_widget_show(xvbox); - gtk_widget_show(xframe); - gtk_widget_show(xdlg); - - gtk_main(); - gdk_flush(); - return xdlg; -} diff --git a/plug-ins/fs/.cvsignore b/plug-ins/fs/.cvsignore new file mode 100644 index 0000000000..1582a79801 --- /dev/null +++ b/plug-ins/fs/.cvsignore @@ -0,0 +1,6 @@ +Makefile.in +Makefile +.deps +_libs +fs +fs2pgm diff --git a/plug-ins/fs/Makefile.am b/plug-ins/fs/Makefile.am new file mode 100644 index 0000000000..d8816ecfc9 --- /dev/null +++ b/plug-ins/fs/Makefile.am @@ -0,0 +1,38 @@ +## Process this file with automake to produce Makefile.in + +pluginlibdir = $(gimpplugindir)/plug-ins + +pluginlib_PROGRAMS = #STD# + +#STD#_SOURCES = \ + #STD#.c + +INCLUDES = \ + $(X_CFLAGS) \ + -I$(top_srcdir) \ + -I$(includedir) + +LDADD = \ + $(top_builddir)/libgimp/libgimpui.la \ + $(top_builddir)/libgimp/libgimp.la \ + $(X_LIBS) \ + -lc + +DEPS = \ + $(top_builddir)/libgimp/libgimpui.la \ + $(top_builddir)/libgimp/libgimp.la + +#STD#_DEPENDENCIES = $(DEPS) + +.PHONY: files + +files: + @files=`ls $(DISTFILES) 2> /dev/null`; for p in $$files; do \ + echo $$p; \ + done + @for subdir in $(SUBDIRS); do \ + files=`cd $$subdir; $(MAKE) files | grep -v "make\[[1-9]\]"`; \ + for file in $$files; do \ + echo $$subdir/$$file; \ + done; \ + done diff --git a/plug-ins/fs/Makefile.classic b/plug-ins/fs/Makefile.classic new file mode 100644 index 0000000000..046467ae07 --- /dev/null +++ b/plug-ins/fs/Makefile.classic @@ -0,0 +1,15 @@ +CC = gcc +CFLAGS = -g -O2 -Wall +LDFLAGS = -g +LDLIBS = -L/usr/X11R6/lib -lgimp -lgtk -lgdk -lglib -lXext -lX11 -lm + +fs: fs.o + +install: fs + cp fs $(HOME)/.gimp/plug-ins/fs + +clean: + $(RM) *.o core *~ + +fs2pgm: fs2pgm.o + $(CC) -g -o $@ $< \ No newline at end of file diff --git a/plug-ins/fs/TODO b/plug-ins/fs/TODO new file mode 100644 index 0000000000..6618ef3d52 --- /dev/null +++ b/plug-ins/fs/TODO @@ -0,0 +1,21 @@ + +Add all the autoconfig/automake stuff, so that the standard build +procedures and such can be used. + +Figure out why the fs executable is as large as it is, and fix it, +unless the automake fix cures this as well. + +Handle non-square pixels properly. If px!=ix or py!=iy, there should +be an option to correct the display. I'm not sure whether this +correction should be on or off by default. Turning it on loses +information; leaving it off distorts the image display. Sigh, +decisions, decisions... + +Save header lines on input so that they can be restored on output. +The "Image:" line will have to be special cased, depending on what +gets done about non-square pixels. All other lines can just be cached +on input and restored on output. + +Write some help information. + + diff --git a/plug-ins/fs/doc/facesaver.txt b/plug-ins/fs/doc/facesaver.txt new file mode 100644 index 0000000000..106e5eb06f --- /dev/null +++ b/plug-ins/fs/doc/facesaver.txt @@ -0,0 +1,50 @@ +From: lou@usenix.UUCP (Lou Katz) +Newsgroups: comp.graphics +Subject: FaceSaver format Revealed +Message-ID: <312@usenix.UUCP> +Date: 16 Jan 90 08:02:52 GMT +Reply-To: lou@usenix.UUCP (Lou Katz) +Organization: USENIX Association, Berkeley, CA +Lines: 41 + +Format of pictures is: + +An ASCII file containing some or all of the following lines: + FirstName: + LastName: + E-mail: + Telephone: + Company: + Address1: + Address2: + CityStateZip: + Date: + PicData: Actual data: width - height - bits/pixel + Image: Should be transformed to: width - height - bits/pixel + (A REQUIRED Blank line) + + Hexified picture in scanline order, in the form suitable for +printing in postscript. It is unpadded scanlines, I believe left to right. +If it is bottom to top it is due to funny transforms in going from the real +scanned image, which came from a video camera turned on its side! (to get a +portrait aspect ratio). +All the images are 8 bits per pixel, and have been intensity levelled to +use up the full dynamic range (each pixel multiplied by 256/(max - min) and +shifted so that min becomes zero). +I'm sorry about that, I should have put out untransformed data. +The original frame grabbing was off a Targa M8, and the gamma varied due +to a number of real world factors. Most pictures had a dynamic range in +the 128 - 196 vicinity. + +The line labeled Image: can be used to correct for non-square pixels. +In most cases, there are 108 (non-square) pixels across in the data, but they +would have been 96 pixels across if they were square. Therefore, +Image: says 96, PicData says 108. + +Lou Katz +Saver of Lost Faces + +lou@usenix.org +(415) 530-8870 + + diff --git a/plug-ins/fs/fs.c b/plug-ins/fs/fs.c new file mode 100644 index 0000000000..b2fca34301 --- /dev/null +++ b/plug-ins/fs/fs.c @@ -0,0 +1,370 @@ +/* The GIMP -- an image manipulation program + * Copyright (C) 1995 Spencer Kimball and Peter Mattis + * Face saver reading and writing code Copyright 1998 by John Kodis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/* + * fs.c -- a facesaver/faceserver plugin for the gimp. Developed by + * John Kodis, Dec 1997. Bug reports are welcomed at kodis@jagunet.com + * + * Based on HRZ code by Albert Cahalan , + * which was in turn based on PNM code by Erik Nygren (nygren@mit.edu). + */ + +#include + +#include "gtk/gtk.h" +#include "libgimp/gimp.h" + +static int save_okay = FALSE; + +static void query() +{ + static GParamDef load_args[] = + { + { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, + { PARAM_STRING, "filename", "The name of the file to load" }, + { PARAM_STRING, "raw_filename", "The name of the file to load" }, + }; + static int nload_args = sizeof (load_args) / sizeof (load_args[0]); + + static GParamDef load_return_vals[] = + { + { PARAM_IMAGE, "image", "Output image" }, + }; + static int nload_return_vals = + sizeof(load_return_vals) / sizeof(*load_return_vals); + + static GParamDef save_args[] = + { + { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, + { PARAM_IMAGE, "image", "Input image" }, + { PARAM_DRAWABLE, "drawable", "Drawable to save" }, + { PARAM_STRING, "filename", "Name of the file to save the image in" }, + { PARAM_STRING, "raw_filename", "Name of the file to save the image in" } + }; + static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + + gimp_install_procedure( + "file_fs_load", + "loads files in face saver file format", + "FIXME: write help for file_fs_load", + "John Kodis", "John Kodis", "1997", + "/FS", + NULL, PROC_PLUG_IN, + nload_args, nload_return_vals, + load_args, load_return_vals); + + gimp_install_procedure( + "file_fs_save", + "saves files in face saver file format", + "saves a grayscale image in facesaver format", + "John Kodis", "John Kodis", "1997", + "/FS", + "GRAY*", PROC_PLUG_IN, + nsave_args, 0, + save_args, NULL); + + gimp_register_magic_load_handler( + "file_fs_load", "fs", "", ""); + gimp_register_save_handler( + "file_fs_save", "fs", ""); +} + +typedef struct +{ + int ix, iy, iz; + int px, py, pz; + char *emsg; + unsigned char *pixmap; +} +Fs_info; + +static Fs_info *fs_alloc(void) +{ + Fs_info *fs = g_malloc(sizeof(*fs)); + fs->emsg = g_malloc(FILENAME_MAX + 100); + *fs->emsg = '\0'; + fs->pixmap = NULL; + fs->ix = fs->iy = fs->iz = fs->px = fs->py = fs->pz = 0; + return fs; +} + +static void fs_free(Fs_info *fs) +{ + if (fs) + { + if (fs->emsg) g_free(fs->emsg); + if (fs->pixmap) g_free(fs->pixmap); + g_free(fs); + } +} + +static int fs_ingest(char *fn, Fs_info *fs) +{ + FILE *ifd = fopen(fn, "r"); + if (ifd == NULL) + sprintf(fs->emsg, "can't open file \"%s\"", fn); + else + { + int body = FALSE; + char buf[1000]; + + while (!body && fgets(buf, sizeof(buf), ifd)) + if (strncasecmp(buf, "picdata:", 8) == 0) + sscanf(buf+8, "%d %d %d", &fs->px, &fs->py, &fs->pz); + else if (strncasecmp(buf, "image:", 6) == 0) + sscanf(buf+6, "%d %d %d", &fs->ix, &fs->iy, &fs->iz); + else if (buf[strspn(buf, " \t\n")] == '\0') + body = TRUE; + + if (!body) + sprintf(fs->emsg, "%s: missing body", fn); + else if (!fs->pz) + sprintf(fs->emsg, "%s: bad or missing picdata line", fn); + #ifdef REQUIRE_IMAGE_LINE + else if (!fs->iz) + sprintf(fs->emsg, "%s: bad or missing image line", fn); + #endif + else + { + char *pix_x0; + int x, y, pixval, pixno = 0, pixcnt = fs->px * fs->py; + fs->pixmap = g_malloc(pixcnt + 1); + pix_x0 = fs->pixmap + pixcnt; + for (y=0; ypy; y++) + { + char *pix = (pix_x0 -= fs->px); + for (x=0; xpx; x++) + if (pixno++ < pixcnt && fscanf(ifd, "%2x", &pixval) == 1) + *pix++ = pixval & 0xff; + else + { + sprintf(fs->emsg, "%s: eof at %d of %d (%dx%d) pixels", + fn, pixno, pixcnt, fs->px, fs->py); + return FALSE; + } + } + } + } + return !*fs->emsg; +} + +static gint32 load_image(char *filename) +{ + char *loading; + gint32 image_id, layer_id; + GDrawable *drawable; + GPixelRgn pixel_rgn; + Fs_info *fs = fs_alloc(); + + loading = g_malloc(strlen(filename) + 11); + sprintf(loading, "Loading %s:", filename); + gimp_progress_init(loading); + g_free(loading); + + gimp_progress_update(0.25); + if (!fs_ingest(filename, fs)) + { + fprintf(stderr, "fs_load: %s\n", fs->emsg); + fs_free(fs); + return -1; + } + + /* Create new image of proper size and associate filename; create + and add a new layer to the image, and get a drawable; finally, + initialize the drawing region. */ + gimp_progress_update(0.50); + image_id = gimp_image_new(fs->px, fs->py, GRAY); + gimp_image_set_filename(image_id, filename); + layer_id = gimp_layer_new(image_id, "Background", + fs->px, fs->py, GRAY_IMAGE, 100, NORMAL_MODE); + gimp_image_add_layer(image_id, layer_id, 0); + drawable = gimp_drawable_get(layer_id); + gimp_pixel_rgn_init(&pixel_rgn, drawable, 0, 0, + drawable->width, drawable->height, TRUE, FALSE); + + /* Transfer the pixel buffer into the image layer. */ + gimp_progress_update(0.75); + gimp_pixel_rgn_set_rect(&pixel_rgn, fs->pixmap, 0,0, fs->px, fs->py); + + /* Lastly, display the image and return. */ + gimp_progress_update(1.00); + gimp_drawable_flush(drawable); + return image_id; +} + +static void save_close_callback(GtkWidget *widget, gpointer data) +{ + gtk_main_quit(); +} + +static void save_ok_callback(GtkWidget *widget, gpointer data) +{ + gtk_widget_destroy(GTK_WIDGET(data)); + save_okay = TRUE; +} + +static gint save_image(char *filename, gint32 image_id, gint32 drawable_id) +{ + GPixelRgn pixel_rgn; + GDrawable *drawable; + FILE *fd; + int x, y, w, h; + char *saving, *pixbuf, *pix_x0; + + drawable = gimp_drawable_get(drawable_id); + w = drawable->width; + h = drawable->height; + gimp_pixel_rgn_init(&pixel_rgn, drawable, 0, 0, w, h, FALSE, FALSE); + + if (gimp_drawable_has_alpha(drawable_id)) + { + fprintf(stderr, "fs: can't save images with alpha channels."); + return FALSE; + } + if (gimp_drawable_type(drawable_id) != GRAY_IMAGE) + { + fprintf(stderr, "fs: image must be grayscale for facesaver format\n"); + return FALSE; + } + if ((fd = fopen(filename, "w")) == NULL) + { + fprintf(stderr, "fs: can't open \"%s\"\n", filename); + return FALSE; + } + + saving = g_malloc(strlen(filename) + 11); + sprintf(saving, "Saving %s:", filename); + gimp_progress_init(saving); + g_free(saving); + fprintf(fd, "Picdata: %d %d %d\n", w, h, drawable->bpp * 8); + fprintf(fd, "Image: %d %d %d\n", w, h, drawable->bpp * 8); + + gimp_progress_update(0.25); + pixbuf = g_malloc(w * h); + gimp_pixel_rgn_get_rect(&pixel_rgn, pixbuf, 0, 0, w, h); + gimp_progress_update(0.50); + + pix_x0 = pixbuf + w*h; + for (y=0; yaction_area), + button, TRUE, TRUE, 0); + gtk_widget_grab_default(button); + gtk_widget_show(button); + + button = gtk_button_new_with_label("Cancel"); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_signal_connect_object(GTK_OBJECT(button), "clicked", + (GtkSignalFunc)gtk_widget_destroy, GTK_OBJECT(dlg)); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), + button, TRUE, TRUE, 0); + gtk_widget_show(button); + + gtk_widget_show(dlg); + gtk_main(); + gdk_flush(); + + return save_okay; /* Initially false; true after clicking on "Okay" */ +} + +static void +run(char *name, int params, GParam *param, int *rvals, GParam **rval) +{ + static GParam values[2]; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_SUCCESS; + + *rvals = 1; + *rval = values; + + if (strcmp(name, "file_fs_load") == 0) + { + gint32 image_id = load_image(param[1].data.d_string); + if (image_id == -1) + values[0].data.d_status = STATUS_EXECUTION_ERROR; + else + { + *rvals = 2; + values[1].type = PARAM_IMAGE; + values[1].data.d_image = image_id; + } + } + else if (strcmp(name, "file_fs_save") == 0) + { + GRunModeType mode = param[0].data.d_int32; + if (mode == RUN_NONINTERACTIVE && params != 4) + values[0].data.d_status = STATUS_CALLING_ERROR; + else if ((mode == RUN_WITH_LAST_VALS) || + (mode == RUN_INTERACTIVE && save_dialog()) ) + { + char *filename = param[3].data.d_string; + gint32 image_id = param[1].data.d_int32; + gint32 drawable_id = param[2].data.d_int32; + if (!save_image(filename, image_id, drawable_id)) + values[0].data.d_status = STATUS_EXECUTION_ERROR; + } + } + else + values[0].data.d_status = STATUS_CALLING_ERROR; +} + +GPlugInInfo PLUG_IN_INFO = +{ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ +}; + +MAIN() diff --git a/plug-ins/fs/fs2pgm.c b/plug-ins/fs/fs2pgm.c new file mode 100644 index 0000000000..603a1a9068 --- /dev/null +++ b/plug-ins/fs/fs2pgm.c @@ -0,0 +1,91 @@ +/* + * fs2pgm.c -- converts a face-saver image to a portable graymap image. + */ + +#include +#include +#include +#include + +static int errors; +static char *progname; +static void error(char *fmt, ...) +{ + va_list ap; + fprintf(stderr, "%s: ", progname); + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); + errors++; +} + +int main(int argc, char **argv) +{ + int arg; + + progname = strrchr(argv[0], '/') ? strrchr(argv[0], '/')+1 : argv[0]; + for (arg=1; arg strrchr(ofn, '/')) + *strrchr(ofn, '.') = '\0'; + strcat(ofn, ".pgm"); + + if ((ofd=fopen(ofn, "w")) == NULL) + error("%s: can't open output file \"%s\"\n", + argv[arg], ofn); + else + { + int x, y; + fprintf(ofd, "P5\n%d %d\n%d\n", px, py, 255); + for (y=0; y=3 ) +* Simple Bezier curves (see below) + +2) Refined control:- + +When "snap to grid" is active then using the third mouse button will cause +the point to be constrained to horz/vert (rect grid) or radius/radial +(polar gird). + +3) Proper brush preview. + +4) All brush types can be used including "painting with a pattern". + +5) Painting methods now include selections. + +6) Objects can now be filled with a pattern/colour (using selections+fill). + +7) Can "reload" background image while Gfig is running + +8) Possible to show X/Y pos. + +9) Can limit display to single object in the collection. (see below for more +details). + +10) Bug in GDK/GIMP interaction work around. Should now work on SGIs/Suns +with multiple screen depths. + +This is the second public release of GFig plug-in for the GIMP. With this plug-in you can created vector graphics and "render" them using the GIMPs painting functions. The vector graphics stuff is some what akin to those @@ -21,6 +55,7 @@ already present in the GIMP itself. Patch file ++++++++++ +ONLY required for GIMP <= 0.99.14 All released up to and including 0.99.14 contain a bug in the paintbrush.c code. I have submitted a patch to correct this fault. If you have NOT applied @@ -33,6 +68,9 @@ The patch is included at the end of this README. This define will be removed when the patch is integrated into the GIMP release. +The current version of the GIMP (release 0.99.15 at time of writing) does +NOT require this patch. + Objects +++++++ @@ -41,18 +79,20 @@ The plug-in allows you to draw the following shapes:- Lines Circles Ellipses -n sided polygons (n >=3) -Curves +n sided regular polygons (n >=3) +Curves (arcs) +Spirals +N pointed stars +Simple Beizer curves An object is constructed as a number of control points and these are used to select the object on the drawing area once it has been created. The drawing area preview is currently set to - MIN(256 x 256,img_width x img_height). -You can change this altering the PREVIEW_SIZE item in the source code. -Try and keep to multiples of 256 & remember the small preview scale is -related to this. + MIN(650 x 650,img_width x img_height). + +You can change this altering the PREVIEW_SIZE item in the source code. Operations ++++++++++ @@ -63,25 +103,42 @@ The objects can either be moved independently around the drawing area or all together. Each control point can be moved. + Objects can be copied. + Objects can be deleted. -N sided Polygons can be split into N line segments. + +N sided Polygons can be split into N line segments. This also works for N +pointed stars. + The drawing area can be scaled. + Control points can be hidden. To aid alignment of objects a "grid" can be placed on the drawing area. This can be either a normal rectangular grid or a polar type grid centered in the drawing area. -The spacings of the grid can be changed as well as the colours used to draw the +The spacings of the grid can be changed as well as the colours used to draw the grid lines. When "Snap to grid" is checked then all operations will be constrained to fall on a grid intersection. (Fun when using the polar grid). +Additionally the third mouse button will constrain the point movement to be +on a horiz/vert (for rect grid) or radial/radius (for polar) only when +"Snap to grid" is set. -The image that was selected when Gfig was started can also be shown (scaled) in +The image that was selected when Gfig was started can also be shown (scaled) in the drawing area. (Options tag). -Painting -++++++++ +Painting tab +++++++++++++ +There are three possible mode when painting. + +1) Brush +2) Selection +3) Selection+fill + +Brush +~~~~~ When the paint button is pressed each object will be rendered/drawn onto the image using the currently selected ink colour. The objects can be drawn onto the original layer or onto a new layer (either a single layer or @@ -94,11 +151,11 @@ White. Copy. The last option means that the layer is duplicated from the previous layer -berfore the draw operation is performed (re good for animations). +before the draw operation is performed (re good for animations). -Lines can be drawn in reverse order. This means that polygons/curves/lines that -are normally constructed of lines can be drawn starting at either "end". This -is only noticeable when the current brush has fading turned on. +Lines can be drawn in reverse order. This means that reg polygons/curves/lines +that are normally constructed of lines can be drawn starting at either "end". +This is only noticeable when the current brush has fading turned on. The "Approx Circles/Ellipses" toggle allows the same effects when drawing these types of objects. @@ -106,20 +163,90 @@ Note that in the current version any selections present in the image are first de-selected when Gfig starts up. This is because selections are used to draw circles and ellipses (unless the Approx. Circles & Ellipses toggle is set). -Brush -+++++ +Selection +~~~~~~~~~ +With this method closed selections are made of the objects. See selection +tab for more details. -I am not really happy with these contols. You can select a brush by name -but I would really like to have a preview of the bush as well. - just -copying the GIMP code begs code bloat question. Maybe I'll add a small -preview window that just contains the selected brush. +Selections can only be made on the current layer. +Selection+Fill +~~~~~~~~~~~~~~ +This method first selects the objects and then fills the selection area. The +selection tab gives more details on how the selections are filled. + + +Brush Tab ++++++++++ + +This tab now contains a preview of the selected brush in black ink. If the +brush is too large to fit in the preview use the mouse button to "move" it +around (as with the brush dialog in the main GIMP - until that brush +patch went in!). + +Four types of brush can be used:- + +Normal brush +~~~~~~~~~~~~ +Simply paints with the current brush - honors fading if any The Fade option allows the "brush fading" to be selected. I am sure that some nifty anims can be created with this option. -Presently I suggest that you also have the "Brush" dialog open when doing the -painting since the brush spacing/opacity/selection/mode is honoured in -the rendering. +Pencil brush +~~~~~~~~~~~~ +Same as the GIMPS pencil. + +Airbrush +~~~~~~~~ +As GIMPS airbrush. The "pressure" can be specified and this is reflected in the +preview window. + +Pattern +~~~~~~~ +The lines are drawn with the currently selected pattern. The preview will +show this pattern. + +Note a patch to enable a couple of "hidden" paintbrush features was recently +posted to the GIMP developers list. The patch only allowed these features +to be called via the UI and not the PDB so they cannot be used by Gfig. If they were exported via the PDB then they would have probably broken a number of +scripts and Gfig itself (number of args changes on the PDB call). + +Select tab +++++++++++ + +This is enabled when using either Selection or Selection+fill types when +painting objects. + +The anti aliasing and feather toggles apply to the selection made when +"painting" the objects. The feather radius can be changed. + +The default selection mode is to add to the current selection so each object +add to the overall selection. The other selection modes are also possible +but you must bear in mind the following:- + +Subtraction/Intersection will not produce any selection if no selection is +elect the area in the target window (AFTER starting Gfig up) and then paint +using this method. + +Replace will leave only the last object selection. + +When the paint type is selection+fill then the objects will be selected +and then filled. The opacity of the fill can be chosen. By default a fill +is performed after each section. If filling onto a single layer +then the fill will accumulate on the first objects painted. This will be +noticeable when opacity != 100. To get around this then use replace mode +OR use a new layer for each selection/fill. (Paint tab). Additionally you can +set the fill to be performed after ALL objects have been selected (useful +for intersection type selections). + +Selection of non-closed objects +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +For objects that are not closed the first & last points will be joined +together to form the closed selection. For arcs you can either fill +as segments or sectors. Note straight lines will not cause any selection to be +made. This can be a little confusing when filling since the whole canvas will +be filled if any straight lines are present on it. + Scaling +++++++ @@ -135,10 +262,20 @@ To reposition the objects on the drawing area use SHIFT + MOVE_OBJ operation. Other ops +++++++++ -Double click on polygon object selection to get dialog with slider to +Double click on reg polygon object selection to get dialog with slider to selected the number of sides to draw. -SHIFT + MOVE_PNT will break a polygon into a number of connected lines. +Double click on star object selection to get dialog with slider to +selected the number of points the star will have. + +Double click on spiral object selection to get dialog with slider to +selected the number of turns the spiral will have and it direction. + +Double click on bezier object selection to get dialog which allows you to +control how the curve is displayed and if it is closed. + +SHIFT + MOVE_PNT will break a reg polygon or star into a number of +connected lines. When drawing lines if the SHIFT modifier is used then connected lines can be drawn. @@ -146,13 +283,25 @@ can be drawn. SHIFT + MOVE_OBJ will move all objects. Note if "snap to grid" is selected then the new point will be constrained to fall on a grid intersection. +Mouse button 3 + "snap to grid" will constrain the point to fall on one of the +two gridlines it was originally on. + +The ">" and "<" buttons allow you to selective move through each of the +objects in the collection. The "==" returns the display to normal. If the +"paint" button is pressed then only the single object displayed will be +drawn into the target window. Also when in this mode pressing the shift button +will temporarily show all the objects in the collection. + +The the options tab there is now a toggle that allows you to turn the +position display on and off. + Gfig objects ++++++++++++ The upper right part of gfig contains a scroll region when different collection of objects can be found. When button 1 is pressed on an entry the small preview window will be updated with the objects contained in -the selected figure. Thes objects can then be loaded into the main window +the selected figure. These objects can then be loaded into the main window by using the "Edit" button or the "Merge" button. In the former case the objects area will first be cleared before the new objects are added. In the latter case the objects will be merged into the drawing area. @@ -207,14 +356,14 @@ modify the nme of an entry (similar to other list areas in the GIMP). Installation ++++++++++++ -Simply build(?) the Gfig object and install it in your plug-in directory. +Simply build(see INSTALL) the Gfig object and install it in your +plug-in directory. The program can be found under the following option. The program is distributed as a single "C" source files - hopefully makes building easier. /Filter/Render/Gfig. - In common with a number of other plug-ins Gfig uses an entry in the gimprc file to specify a directory to search for groups of objects. If this entry is absent or unreadable a warning dialog will appear. To remove this warning create the @@ -230,6 +379,35 @@ I have only managed to test this on Linux (8bit + 16bit displays). It should port to other platforms. (I am a little concerned over the rint() function - not sure which other systems have this). +INSTALL ++++++++ + +A number of people had problems compiling Gfig. I have released it a a single "C" +file in the hopes it makes building it easier. I use the following +simple shell script to compile/install Gfig. + +Invoke the script as + + ccgimp gfig + +--- Shell script ccgimp start ---- +: + +LD_LIBRARY_PATH=/usr/local/lib + +export LD_LIBRARY_PATH + +# Compile a gimp program. + +cc -o $* $*.c -lgimp -lglib -lgdk -lgtk -lgimpui -L/usr/X11/lib -lXmu -lX11 -lm + +if [ $? -ne 0 ]; then +exit 1 +fi + +cp $* ~/.gimp/plug-ins/ + +--- Shell script end ---- Problems? +++++++++ @@ -238,28 +416,60 @@ If you have any problems with this plug-in please mail me (alt@picnic.demon.co.uk) and I will try to help. - -TODO +TODO ++++ Some random ideas your thoughts welcome (no order implied & I might never get around to doing them!):- -1) Allow objects to be drawn with different brushes. +1) Allow objects to be drawn with different brushes. (0.95 - Can be done +by selecting each object one at a time and changing the brush). 2) Rotate objects (but you can do this in the GIMP?). -3) More object types (sprial, helix, .....). -4) Scale individual objects. -5) Some type of "Tab" through selection of objects. -6) Preview window for brush selection. +3) More object types (spiral, helix, .....).(0.95 - Added spiral/bezier/star) +4) Scale individual objects. (Still on todo). +5) Some type of "Tab" through selection of objects. (0.95 - Done) +6) Preview window for brush selection.(0.95 - Done) 7) Expand the drawing area (add scroll bars?) -8) Pointer locationa (x,y) indicator +8) Pointer locations (x,y) indicator.(0.95 - Done) Let me know if you find this plug-in useful. +Bezier +~~~~~~ -PATCH -+++++ +OK my maths is a little rusty. The bezier stuff is only very simple. However... +I have tried to abstract as much as possible the bezier calculations from +the drawing of the control points / painting on the screen and in the target +window. + +The bezier function is defined as:- + +void +DrawBezier (gdouble (*points)[2], gint np, gdouble mid, gint depth) +{ +... +} + +Points an array of pairs of doubles that define the control points +np is the number of points. Mid is always starts as 0.5 - and depth +defines how deep the recursion should go when calculating the line points. + +The function should call fp_pnt_add() when a point on the curve has been +calculated. + +If anyone would like to produce a better/faster function then you +should be able to replace the DrawBezier function. (Only the first two args +are really needed). + +The algorithm the current code is based on was obtained by looking +at the many many examples out on the web. +(Bezier drawing seems to be topic of the year for computer degrees +and people learning java!!!) + + +PATCH ONLY REQUIRED FOR GIMP <= 00.99.14 +++++++++++++++++++++++++++++++++++++++++ Apply to paintbrush.c in gimp*/app directory. Long ago this was a bug in another form! (See my web page on the script-fu script I wrote.) @@ -274,3 +484,5 @@ another form! (See my web page on the script-fu script I wrote.) if (num_strokes == 1) paintbrush_non_gui_paint_func (&non_gui_paint_core, drawable_id, 0); + + diff --git a/plug-ins/gfig/doc/doc b/plug-ins/gfig/doc/doc index c9cf945a3d..90825a8983 100644 --- a/plug-ins/gfig/doc/doc +++ b/plug-ins/gfig/doc/doc @@ -4,12 +4,46 @@ GFig Andy Thomas (alt@picnic.demon.co.uk). http://www.picnic.demon.co.uk. -(This README could do with expanding). +(This README could still do with expanding). -Release 0.9. -~~~~~~~~~~~~ +Release 0.95 14.11.97 +~~~~~~~~~~~~~~~~~~~~~ -This is the first release of GFig plug-in for the GIMP. +Change summary from 0.9 +~~~~~~~~~~~~~~~~~~~~~~~ +See below for details. + +1) More object types:- + +* Spiral +* N pointed star (N >=3 ) +* Simple Bezier curves (see below) + +2) Refined control:- + +When "snap to grid" is active then using the third mouse button will cause +the point to be constrained to horz/vert (rect grid) or radius/radial +(polar gird). + +3) Proper brush preview. + +4) All brush types can be used including "painting with a pattern". + +5) Painting methods now include selections. + +6) Objects can now be filled with a pattern/colour (using selections+fill). + +7) Can "reload" background image while Gfig is running + +8) Possible to show X/Y pos. + +9) Can limit display to single object in the collection. (see below for more +details). + +10) Bug in GDK/GIMP interaction work around. Should now work on SGIs/Suns +with multiple screen depths. + +This is the second public release of GFig plug-in for the GIMP. With this plug-in you can created vector graphics and "render" them using the GIMPs painting functions. The vector graphics stuff is some what akin to those @@ -21,6 +55,7 @@ already present in the GIMP itself. Patch file ++++++++++ +ONLY required for GIMP <= 0.99.14 All released up to and including 0.99.14 contain a bug in the paintbrush.c code. I have submitted a patch to correct this fault. If you have NOT applied @@ -33,6 +68,9 @@ The patch is included at the end of this README. This define will be removed when the patch is integrated into the GIMP release. +The current version of the GIMP (release 0.99.15 at time of writing) does +NOT require this patch. + Objects +++++++ @@ -41,18 +79,20 @@ The plug-in allows you to draw the following shapes:- Lines Circles Ellipses -n sided polygons (n >=3) -Curves +n sided regular polygons (n >=3) +Curves (arcs) +Spirals +N pointed stars +Simple Beizer curves An object is constructed as a number of control points and these are used to select the object on the drawing area once it has been created. The drawing area preview is currently set to - MIN(256 x 256,img_width x img_height). -You can change this altering the PREVIEW_SIZE item in the source code. -Try and keep to multiples of 256 & remember the small preview scale is -related to this. + MIN(650 x 650,img_width x img_height). + +You can change this altering the PREVIEW_SIZE item in the source code. Operations ++++++++++ @@ -63,25 +103,42 @@ The objects can either be moved independently around the drawing area or all together. Each control point can be moved. + Objects can be copied. + Objects can be deleted. -N sided Polygons can be split into N line segments. + +N sided Polygons can be split into N line segments. This also works for N +pointed stars. + The drawing area can be scaled. + Control points can be hidden. To aid alignment of objects a "grid" can be placed on the drawing area. This can be either a normal rectangular grid or a polar type grid centered in the drawing area. -The spacings of the grid can be changed as well as the colours used to draw the +The spacings of the grid can be changed as well as the colours used to draw the grid lines. When "Snap to grid" is checked then all operations will be constrained to fall on a grid intersection. (Fun when using the polar grid). +Additionally the third mouse button will constrain the point movement to be +on a horiz/vert (for rect grid) or radial/radius (for polar) only when +"Snap to grid" is set. -The image that was selected when Gfig was started can also be shown (scaled) in +The image that was selected when Gfig was started can also be shown (scaled) in the drawing area. (Options tag). -Painting -++++++++ +Painting tab +++++++++++++ +There are three possible mode when painting. + +1) Brush +2) Selection +3) Selection+fill + +Brush +~~~~~ When the paint button is pressed each object will be rendered/drawn onto the image using the currently selected ink colour. The objects can be drawn onto the original layer or onto a new layer (either a single layer or @@ -94,11 +151,11 @@ White. Copy. The last option means that the layer is duplicated from the previous layer -berfore the draw operation is performed (re good for animations). +before the draw operation is performed (re good for animations). -Lines can be drawn in reverse order. This means that polygons/curves/lines that -are normally constructed of lines can be drawn starting at either "end". This -is only noticeable when the current brush has fading turned on. +Lines can be drawn in reverse order. This means that reg polygons/curves/lines +that are normally constructed of lines can be drawn starting at either "end". +This is only noticeable when the current brush has fading turned on. The "Approx Circles/Ellipses" toggle allows the same effects when drawing these types of objects. @@ -106,20 +163,90 @@ Note that in the current version any selections present in the image are first de-selected when Gfig starts up. This is because selections are used to draw circles and ellipses (unless the Approx. Circles & Ellipses toggle is set). -Brush -+++++ +Selection +~~~~~~~~~ +With this method closed selections are made of the objects. See selection +tab for more details. -I am not really happy with these contols. You can select a brush by name -but I would really like to have a preview of the bush as well. - just -copying the GIMP code begs code bloat question. Maybe I'll add a small -preview window that just contains the selected brush. +Selections can only be made on the current layer. +Selection+Fill +~~~~~~~~~~~~~~ +This method first selects the objects and then fills the selection area. The +selection tab gives more details on how the selections are filled. + + +Brush Tab ++++++++++ + +This tab now contains a preview of the selected brush in black ink. If the +brush is too large to fit in the preview use the mouse button to "move" it +around (as with the brush dialog in the main GIMP - until that brush +patch went in!). + +Four types of brush can be used:- + +Normal brush +~~~~~~~~~~~~ +Simply paints with the current brush - honors fading if any The Fade option allows the "brush fading" to be selected. I am sure that some nifty anims can be created with this option. -Presently I suggest that you also have the "Brush" dialog open when doing the -painting since the brush spacing/opacity/selection/mode is honoured in -the rendering. +Pencil brush +~~~~~~~~~~~~ +Same as the GIMPS pencil. + +Airbrush +~~~~~~~~ +As GIMPS airbrush. The "pressure" can be specified and this is reflected in the +preview window. + +Pattern +~~~~~~~ +The lines are drawn with the currently selected pattern. The preview will +show this pattern. + +Note a patch to enable a couple of "hidden" paintbrush features was recently +posted to the GIMP developers list. The patch only allowed these features +to be called via the UI and not the PDB so they cannot be used by Gfig. If they were exported via the PDB then they would have probably broken a number of +scripts and Gfig itself (number of args changes on the PDB call). + +Select tab +++++++++++ + +This is enabled when using either Selection or Selection+fill types when +painting objects. + +The anti aliasing and feather toggles apply to the selection made when +"painting" the objects. The feather radius can be changed. + +The default selection mode is to add to the current selection so each object +add to the overall selection. The other selection modes are also possible +but you must bear in mind the following:- + +Subtraction/Intersection will not produce any selection if no selection is +elect the area in the target window (AFTER starting Gfig up) and then paint +using this method. + +Replace will leave only the last object selection. + +When the paint type is selection+fill then the objects will be selected +and then filled. The opacity of the fill can be chosen. By default a fill +is performed after each section. If filling onto a single layer +then the fill will accumulate on the first objects painted. This will be +noticeable when opacity != 100. To get around this then use replace mode +OR use a new layer for each selection/fill. (Paint tab). Additionally you can +set the fill to be performed after ALL objects have been selected (useful +for intersection type selections). + +Selection of non-closed objects +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +For objects that are not closed the first & last points will be joined +together to form the closed selection. For arcs you can either fill +as segments or sectors. Note straight lines will not cause any selection to be +made. This can be a little confusing when filling since the whole canvas will +be filled if any straight lines are present on it. + Scaling +++++++ @@ -135,10 +262,20 @@ To reposition the objects on the drawing area use SHIFT + MOVE_OBJ operation. Other ops +++++++++ -Double click on polygon object selection to get dialog with slider to +Double click on reg polygon object selection to get dialog with slider to selected the number of sides to draw. -SHIFT + MOVE_PNT will break a polygon into a number of connected lines. +Double click on star object selection to get dialog with slider to +selected the number of points the star will have. + +Double click on spiral object selection to get dialog with slider to +selected the number of turns the spiral will have and it direction. + +Double click on bezier object selection to get dialog which allows you to +control how the curve is displayed and if it is closed. + +SHIFT + MOVE_PNT will break a reg polygon or star into a number of +connected lines. When drawing lines if the SHIFT modifier is used then connected lines can be drawn. @@ -146,13 +283,25 @@ can be drawn. SHIFT + MOVE_OBJ will move all objects. Note if "snap to grid" is selected then the new point will be constrained to fall on a grid intersection. +Mouse button 3 + "snap to grid" will constrain the point to fall on one of the +two gridlines it was originally on. + +The ">" and "<" buttons allow you to selective move through each of the +objects in the collection. The "==" returns the display to normal. If the +"paint" button is pressed then only the single object displayed will be +drawn into the target window. Also when in this mode pressing the shift button +will temporarily show all the objects in the collection. + +The the options tab there is now a toggle that allows you to turn the +position display on and off. + Gfig objects ++++++++++++ The upper right part of gfig contains a scroll region when different collection of objects can be found. When button 1 is pressed on an entry the small preview window will be updated with the objects contained in -the selected figure. Thes objects can then be loaded into the main window +the selected figure. These objects can then be loaded into the main window by using the "Edit" button or the "Merge" button. In the former case the objects area will first be cleared before the new objects are added. In the latter case the objects will be merged into the drawing area. @@ -207,14 +356,14 @@ modify the nme of an entry (similar to other list areas in the GIMP). Installation ++++++++++++ -Simply build(?) the Gfig object and install it in your plug-in directory. +Simply build(see INSTALL) the Gfig object and install it in your +plug-in directory. The program can be found under the following option. The program is distributed as a single "C" source files - hopefully makes building easier. /Filter/Render/Gfig. - In common with a number of other plug-ins Gfig uses an entry in the gimprc file to specify a directory to search for groups of objects. If this entry is absent or unreadable a warning dialog will appear. To remove this warning create the @@ -230,6 +379,35 @@ I have only managed to test this on Linux (8bit + 16bit displays). It should port to other platforms. (I am a little concerned over the rint() function - not sure which other systems have this). +INSTALL ++++++++ + +A number of people had problems compiling Gfig. I have released it a a single "C" +file in the hopes it makes building it easier. I use the following +simple shell script to compile/install Gfig. + +Invoke the script as + + ccgimp gfig + +--- Shell script ccgimp start ---- +: + +LD_LIBRARY_PATH=/usr/local/lib + +export LD_LIBRARY_PATH + +# Compile a gimp program. + +cc -o $* $*.c -lgimp -lglib -lgdk -lgtk -lgimpui -L/usr/X11/lib -lXmu -lX11 -lm + +if [ $? -ne 0 ]; then +exit 1 +fi + +cp $* ~/.gimp/plug-ins/ + +--- Shell script end ---- Problems? +++++++++ @@ -238,28 +416,60 @@ If you have any problems with this plug-in please mail me (alt@picnic.demon.co.uk) and I will try to help. - -TODO +TODO ++++ Some random ideas your thoughts welcome (no order implied & I might never get around to doing them!):- -1) Allow objects to be drawn with different brushes. +1) Allow objects to be drawn with different brushes. (0.95 - Can be done +by selecting each object one at a time and changing the brush). 2) Rotate objects (but you can do this in the GIMP?). -3) More object types (sprial, helix, .....). -4) Scale individual objects. -5) Some type of "Tab" through selection of objects. -6) Preview window for brush selection. +3) More object types (spiral, helix, .....).(0.95 - Added spiral/bezier/star) +4) Scale individual objects. (Still on todo). +5) Some type of "Tab" through selection of objects. (0.95 - Done) +6) Preview window for brush selection.(0.95 - Done) 7) Expand the drawing area (add scroll bars?) -8) Pointer locationa (x,y) indicator +8) Pointer locations (x,y) indicator.(0.95 - Done) Let me know if you find this plug-in useful. +Bezier +~~~~~~ -PATCH -+++++ +OK my maths is a little rusty. The bezier stuff is only very simple. However... +I have tried to abstract as much as possible the bezier calculations from +the drawing of the control points / painting on the screen and in the target +window. + +The bezier function is defined as:- + +void +DrawBezier (gdouble (*points)[2], gint np, gdouble mid, gint depth) +{ +... +} + +Points an array of pairs of doubles that define the control points +np is the number of points. Mid is always starts as 0.5 - and depth +defines how deep the recursion should go when calculating the line points. + +The function should call fp_pnt_add() when a point on the curve has been +calculated. + +If anyone would like to produce a better/faster function then you +should be able to replace the DrawBezier function. (Only the first two args +are really needed). + +The algorithm the current code is based on was obtained by looking +at the many many examples out on the web. +(Bezier drawing seems to be topic of the year for computer degrees +and people learning java!!!) + + +PATCH ONLY REQUIRED FOR GIMP <= 00.99.14 +++++++++++++++++++++++++++++++++++++++++ Apply to paintbrush.c in gimp*/app directory. Long ago this was a bug in another form! (See my web page on the script-fu script I wrote.) @@ -274,3 +484,5 @@ another form! (See my web page on the script-fu script I wrote.) if (num_strokes == 1) paintbrush_non_gui_paint_func (&non_gui_paint_core, drawable_id, 0); + + diff --git a/plug-ins/gfig/pix_data.h b/plug-ins/gfig/pix_data.h index 41eee37943..40d153d695 100644 --- a/plug-ins/gfig/pix_data.h +++ b/plug-ins/gfig/pix_data.h @@ -376,3 +376,382 @@ static char * delete_xpm[] = { "o o o o o o o ", "o o o o o o o ", "ooo ooo ooooooo o ooo"}; + +/* XPM */ +static char * star_xpm[] = { +"24 24 4 1", +" s None c None", +". c black", +"X c red", +"o c white", +" . ", +" ... ", +" . . ", +" . . ", +" . . ", +" .. .. XXX ", +" ........ ......XoX ", +" .. XXX .XXX ", +" .. XXX XoX.. ", +" .. XoX XXX ", +" .. XXX .. ", +" . . ", +" . . . ", +" .. .... . ", +" . .. .. . ", +" ... ... ", +" .. .. ", +" . . ", +" ... ..... . ... ", +" . . ... . . ", +" .. . . . . . ", +" .. . ... .. ", +" . . . . . . ", +" ... . . . . . "}; + +/* XPM */ +static char * spiral_xpm[] = { +"24 24 4 1", +" s None c None", +". c red", +"X c white", +"o c black", +" ", +" ... ", +" .X.ooooooooooooooo ", +" ... o ", +" o ", +" oooooooooooo o ", +" o o o ", +" o ... o o ", +" o ooo.X. o o ", +" o o ... o o ", +" o o o o ", +" o ooooooooo o ", +" o o ", +" o o ", +" ooooooooooooooo ", +" ", +" ", +"ooo ooo o ooo o o ", +"o o o o o o ooo o ", +"oo o o o o o o o o ", +" oo ooo o oo ooo o ", +" o o o o o o o o ", +"ooo o o o o o o ooo", +" "}; + +/* XPM */ +static char * bezier_xpm[] = { +"24 24 4 1", +" s None c None", +". c red", +"X c white", +"o c black", +" ", +" ... ... ", +" .X. .X. ", +" ... o... ", +" o ", +" ooooo o ", +" o oo o ", +" o ooo ", +" o ", +" o ... ", +" o .X. ", +" ... ... ", +" .X. ", +" ... ", +" ", +" ", +" ", +" oooXooo ooo o ooo oo ", +" o oXo o o o o o ", +" oooXooo o o ooo o o ", +" o oXo o o o oo ", +" o oXo o o o o o ", +" oooXooo ooo o ooo o o ", +" "}; + + +/* XPM */ +static char * rulers_comp_xpm[] = { +"74 85 192 2", +" c None", +". c #965875D65144", +"X c #9E797DF75965", +"o c #861769A64103", +"O c #69A6555530C2", +"+ c #8E3871C64924", +"@ c #BEFB965869A6", +"# c #AEBA8A286185", +"$ c #79E765954103", +"% c #965879E75144", +"& c #C71B9E7971C6", +"* c #CF3CA28971C6", +"= c #A69982075965", +"- c #A69986175965", +"; c #8E386DB64924", +": c #AEBA86175965", +"> c #D75CA69979E7", +", c #8E3869A64103", +"< c #9E7982075965", +"1 c #861765954103", +"2 c #9E797DF75144", +"3 c #79E75D7538E3", +"4 c #9E7979E75144", +"5 c #C71B9A6971C6", +"6 c #71C6596538E3", +"7 c #965871C64924", +"8 c #79E761854103", +"9 c #492434D32081", +"0 c #38E328A21861", +"q c #208118610820", +"w c #28A220811040", +"e c #5965492428A2", +"r c #79E7618538E3", +"t c #28A21C711040", +"y c #28A218610820", +"u c #30C224921040", +"i c #410334D32081", +"p c #492438E32081", +"a c #5144410328A2", +"s c #5965451428A2", +"d c #B6DA8E386185", +"f c #38E32CB21861", +"g c #082008200000", +"h c #B6DA924869A6", +"j c #6185492428A2", +"k c #69A64D3430C2", +"l c #FFFFEBADCF3C", +"z c #49243CF32081", +"x c #410330C21861", +"c c #000000000000", +"v c #BEFB9A6969A6", +"b c #86176DB64924", +"n c #FFFFE79DC71B", +"m c #F7DED75C9E79", +"M c #FFFFE38DBEFB", +"N c #104008200000", +"B c #FFFFC71B6185", +"V c #FFFFAAAA0820", +"C c #FFFFA6990000", +"Z c #FFFFBAEA4103", +"A c #F7DEE38DBEFB", +"S c #28A224921040", +"D c #6185514430C2", +"F c #FFFFB2CA28A2", +"G c #FFFFA2890000", +"H c #FFFFAEBA1861", +"J c #61854D3430C2", +"K c #F7DED34C9658", +"L c #FFFFCB2B71C6", +"P c #71C6555530C2", +"I c #FFFFC30B5144", +"U c #FFFFBEFB4924", +"Y c #30C228A21861", +"T c #FFFFD75C9658", +"R c #186114510820", +"E c #F7DECF3C8617", +"W c #BEFB924869A6", +"Q c #CF3CA69971C6", +"! c #F7DEA2890000", +"~ c #79E76DB630C2", +"^ c #9E7979E72081", +"/ c #CF3C79E71040", +"( c #C71B7DF74103", +") c #30C220811040", +"_ c #51443CF32081", +"` c #69A6514430C2", +"' c #41032CB21861", +"] c #F7DE9E790000", +"[ c #BEFB82074103", +"{ c #CF3C8E381040", +"} c #EFBE92480820", +"| c #C71B924879E7", +" . c #20811C711040", +".. c #000004100000", +"X. c #30C251444924", +"o. c #E79D92480820", +"O. c #A699514428A2", +"+. c #FFFFFBEED75C", +"@. c #FFFFFFFFE79D", +"#. c #71C65D7538E3", +"$. c #10400C300000", +"%. c #E79D9A690820", +"&. c #C71B82074103", +"*. c #FFFFF7DEDF7D", +"=. c #DF7DD75CD75C", +"-. c #E79DE38DCF3C", +";. c #FFFF9E790000", +":. c #EFBE96580820", +">. c #BEFB75D638E3", +",. c #F7DEF7DEE79D", +"<. c #F7DEEFBECF3C", +"1. c #C71BC71BC71B", +"2. c #D75CD34CC71B", +"3. c #F7DEF3CECF3C", +"4. c #DF7D8A280820", +"5. c #A699555528A2", +"6. c #DF7DDB6CC71B", +"7. c #BEFBBEFBBEFB", +"8. c #C71BC30BBEFB", +"9. c #AEBA8E386185", +"0. c #CF3C8A284924", +"q. c #9E79A699A699", +"w. c #71C686178617", +"e. c #B6DAB6DAB6DA", +"r. c #E79DE79DC71B", +"t. c #8E3875D65144", +"y. c #EFBEEBADCF3C", +"u. c #A699AAAAAEBA", +"i. c #CF3CCB2BC71B", +"p. c #514438E32081", +"a. c #492465956185", +"s. c #8E3896589658", +"d. c #BEFBBAEABEFB", +"f. c #861786178617", +"g. c #69A669A669A6", +"h. c #69A66DB669A6", +"j. c #D75C92480820", +"k. c #30C234D330C2", +"l. c #BEFB75D61861", +"z. c #BEFB71C638E3", +"x. c #208114510820", +"c. c #E79D8A280820", +"v. c #AEBAAAAAAEBA", +"b. c #861782078617", +"n. c #596559655965", +"m. c #49244D344924", +"M. c #C71B79E730C2", +"N. c #AEBAB2CAAEBA", +"B. c #AEBAAEBAAEBA", +"V. c #A699A699A699", +"C. c #C71BA28971C6", +"Z. c #082004100000", +"A. c #CF3C861730C2", +"S. c #8E389A699E79", +"D. c #9E79A289A699", +"F. c #EFBEE79DC71B", +"G. c #9E799A699E79", +"H. c #FFFFF7DECF3C", +"J. c #79E78A288E38", +"K. c #208120812081", +"L. c #618565956185", +"P. c #F7DE9A690820", +"I. c #41035D755965", +"U. c #104014511040", +"Y. c #D75C7DF71040", +"T. c #B6DA69A630C2", +"R. c #38E338E338E3", +"E. c #965875D628A2", +"W. c #EFBE9E7928A2", +"Q. c #B6DA86171861", +"!. c #CF3C8E384924", +"~. c #C71B965879E7", +"^. c #618575D671C6", +"/. c #79E779E779E7", +"(. c #71C675D671C6", +"). c #AEBA5D7528A2", +"_. c #B6DA92486185", +"`. c #8E388E388E38", +"'. c #BEFB6DB628A2", +"]. c #DF7D86171040", +"[. c #CF3C92481040", +"{. c #861771C628A2", +"}. c #514451445144", +"|. c #BEFB861769A6", +" X c #8E3871C628A2", +".X c #C71B7DF730C2", +"XX c #71C671C671C6", +"oX c #B6DABAEABEFB", +"OX c #104010401040", +"+X c #69A6596538E3", +"@X c #9E799E799E79", +"#X c #79E77DF779E7", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" . X ", +" o O O X ", +" + + @ # $ ", +" $ % & * # $ = ", +" - ; : * > : , X ", +" < o = & * : 1 2 ", +" = + # & & X 3 4 ", +" = . # 5 @ 3 6 # ; 3 , ", +" 7 % 4 7 6 8 6 9 0 q w 9 e ; ", +" = $ $ r 3 t y u 9 i p a u s 6 = ", +" d # O f g i + d h 3 j k 3 l l ", +" z g x = c - v b q s n m m M ", +" = t N p c c c X 3 t O M B V C Z A ", +" 2 S p % c ; ; c O D - x a n B F G C H B M ", +" 7 w J h c o $ c a s q 9 n K V C C C G C L M ", +" 0 s # c O P c . j p f , A I H C C C G C G H U M ", +" x Y = J c c c c 6 6 c J P . L F G C G C C C G G H L T ", +" z R $ r = c o o c r # - + 2 - n E G G C G C C G G C C C C C F ", +" ; 0 0 = = c 4 W h x = Q h # 2 + X @ M I F C C d C G ! ~ ^ C C G G / ( ", +" 7 ) _ . r c . d & _ ; & * * @ 2 ` ` K F G C 4 ' J C ] [ c { ] G } ( | ", +" , .q w .c ; o D J _ a . : W * 5 @ < $ 6 4 C 4 x ..R $ C C c X.{ o.O. +.@. ", +" 7 8 0 q 0 #.4 . 3 1 . + ; . # v & * : 7 o r p $.q #.C G G %.c ( &. *.=.-.@. ", +" h % J O - & @ 8 1 & h . #.#.- & * * h ; O f f G C C C ;.:.>.| ,.<.1.2.3. ", +" 7 % v Q d 4 v * W . o 1 o 2 5 * 5 h 7 O 8 - C G 4.5. +.6.7.7.7.8.<.@. ", +" . # * @ ; + v & 9.. . 8 j . @ 5 * & @ : 1 7 2 0. ,.6.q.w.e.7.7.2.r.@. ", +" 2 4 & Q W j 2 h o #.. < _ 0 ; t.@ & Q * = 1 r + . *.y.7.c c u.e.7.7.i.*. ", +" o X * & 3 o = 6 o o p.g $.6 ; ; 7 9.* * @ : o $ 3 # @ =.1.7.e.c a.w.7.7.7.8.1.i.1. ", +" 2 6 W * # $ + ; o . ` R s c c % ; ; # & * & d # ; k ` = s.d.7.e.c s.7.7.7.7.f.g.h. ", +" # ` 2 & & , 1 o a ` + e 8 G j.c h < ; 7 : v * * v - . r r . 7.7.7.7.7.7.7.d.k.c c ", +" 4 o # & = 3 a q q e ; 3 t.G c l.z. 7 , . W Q * & - 3 6 4 7.7.7.7.7.7.7.k.c c ", +" E r , * 5 4 p x.a r 6 D 3 ;.c.0.| - 6 D 1 # h * * * d % 2 ; 7.7.7.v.b.n.m.m. ", +" n E G ; J d Q @ r s = C . 6 d } O. +.# o D O # * Q * v h 4 r . : b... ", +" n I F C G . ` & & 2 r C G C C / M. *.=.i.d.. 4 ` # d 5 * * 5 4 r 6 n. ", +" K H G G C #.9 @ Q 5 . o C ;.} ( | *.y.N.B.7.7.V.= + b 2 d v * & C.: ` a ; ", +" A L C C C W O Z.$.b 5 Q X 6 C c.O. +.6.e.c c 7.7.7.7.7.# + b . d & * & P f p o ", +" n I F G G G 6 R c ' ` # * h + 4 A. *.=.i.7.S.D.7.7.7.7.7.7.7.% + o o # - 6 O j O . ", +" n K H C C C G #.t x % . X v & d 2 # ,.F.e.e.7.7.7.7.7.7.7.7.7.7.B.G.< ; o r p s 1 + . . ", +" A B V G C C G C G ; = C # ; 4 5 & # - H.=.e.c J.7.7.7.7.7.7.7.7.7.7.n.K. = s q Y #.9.h % % ", +" n B F C G G C G C C G G C C 4 1 - * d . - ,.6.i.e.w.c J.e.7.7.7.7.7.7.B.L.h. - P O ` 7 h @ , + ", +" M m C C C C C C C G G C C G G P.o . & & # o : y.e.d.7.7.J.I.B.7.7.7.7.7.e.G.U. 6 3 ; % p.o 2 ", +" H H G G C C C C C C G G C G Y.T. 1 = * h 6 X N.c S.7.7.e.B.d.7.7.7.7.d.m.R. 5 d E.J i ' t ; ", +" W.4.G C C C :.Q.P.G C C ;.c.!.~. #.t.* * 2 r N.^.V.7.7.7.7.7.7.7.7.v./.L.(. # d - 3 r ", +" | ).P.G G C c X.{ G G G :.5. 4 1 _.* * 3 + 7.7.7.7.7.7.7.7.7.d.`... ", +" '.].C C %.[.~ {.C / >. ; ; @ & 8 , 7.7.7.7.7.7.7.7.d.}.}. ", +" |.A.} G G C Xc } &.| ,.. + h * @ + 7 7.7.7.7.7.7.v.`.m.h. ", +" 5.:.C G C c.O. *.-.7.. . @ > W $ 1 7.7.7.d.7./... ", +" M.Y.G / &. +.=.q.c = o - * & + 6 7.7.7.e.}.L. ", +" |..X:.>.~. ,.y.8.s.a.B.; X & * d b , 7.B.G.R.XX ", +" 5. +.6.8.7.d.e.7.7.; # * * X _ @ L.U. ", +" *.=.c w.e.7.7.7.7.= = C.Q @ ` 4 h. ", +" ,.<.7.w.c u.oX7.7.7.# . # * & = 6 : ", +" =.8.7.e.c a.w.7.7.7.7.2 o # & h ` . ", +" i.XXG.e.w.s.7.7.7.7.7.6 7 * 5 4 , ", +" OXg.e.d.7.7.7.7.7.d.. , d W 7 O J ", +" h.k.B.7.7.7.7.d.}.m.b +X+ s q w 7 ", +" }./.@X7.7.B.b.n.h.. a $ $ e t 1 ", +" K.}.d.d.f... 1 _ 9 #.r #.+ ", +" #Xk.k.n. #.u o h ; $ W ", +" c c m. 8 1 d 9.1 % ", +" c c m. + + # 3 r d ", +" . 6 _ _ . ", +" < $ J 1 ", +" 4 $ # ", +" h ; d ", +" h ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; + diff --git a/plug-ins/refract/CHANGES b/plug-ins/refract/CHANGES new file mode 100644 index 0000000000..1a03e886b1 --- /dev/null +++ b/plug-ins/refract/CHANGES @@ -0,0 +1,12 @@ +1/2/98: refract-Beta + +Refract is back, and better than ever! That's right... The New Layer +checkbox now works properly from layers with and without alpha. + +Fixed so small or goofily placed lenses don't crash. Lo and behold, +lens offsets also seem to be working. How that happened is beyond me. + +Fixed some bad GParam values thing in run(). + +Changed the name of the parameter that determines the lens thickness +to "thick" instead of "depth". diff --git a/plug-ins/refract/FILES b/plug-ins/refract/FILES new file mode 100644 index 0000000000..72300ceedd --- /dev/null +++ b/plug-ins/refract/FILES @@ -0,0 +1,12 @@ +Files that should be in refract distributions: +FILES - this file +INSTALL - Installation instructions (if not part of GIMP distrib) +Makefile +README +TODO +refguts.c - source file containing the actual distort refract code +refmain.c - source file containing query, run, and dialog things +refract.h - common header file, contains configurable settings + +Additional file included in refract-bin distributions: +refract - the compiled plug-in executable for linux-ELF-i386 \ No newline at end of file diff --git a/plug-ins/refract/INSTALL b/plug-ins/refract/INSTALL new file mode 100644 index 0000000000..5de6dad538 --- /dev/null +++ b/plug-ins/refract/INSTALL @@ -0,0 +1,28 @@ +If this file came as part of a GIMP distribution, no special +installation instructions are required. Refract will get built and +installed when all the other plug-ins do. + +However, if you wish to install this plug-in seperately, perhaps +because it's a newer version than the one in your distribution... + +First, try typing + +make install + +If that worked, stop reading and go play with GIMP. If it didn't, +read on... + +At this point in time, refract needs the files megawidget.h and +megawidget.o to compile. Since I've found megawidgets don't fully +suffice my needs, this will probably change in the near future. But +for now, stick those files (or links to them) somewhere where your +compiler can find them when compiling refract... They should be +included somewhere in the plug-ins directory of your GIMP source +distribution. + +You may also wish to dink with the compiler options in the Makefile. +At the moment, as refract is still Not Quite There Yet, it comes +shipped with all sorts of debugging flags turned on and optimizations +turned OFF. If you don't care why refract crashes if and when it +does, go ahead and comment out the debug flags and uncomment the +optimizations. Hopefully it will pick up some speed that way. diff --git a/plug-ins/refract/Makefile.am b/plug-ins/refract/Makefile.am index 81662dbc02..4a853cc3f9 100644 --- a/plug-ins/refract/Makefile.am +++ b/plug-ins/refract/Makefile.am @@ -5,7 +5,10 @@ pluginlibdir = $(gimpplugindir)/plug-ins pluginlib_PROGRAMS = refract refract_SOURCES = \ - refract.c + refmain.c \ + refguts.c \ + refract.h \ + $(top_srcdir)/plug-ins/megawidget/megawidget.h INCLUDES = \ $(X_CFLAGS) \ @@ -13,7 +16,7 @@ INCLUDES = \ -I$(includedir) LDADD = \ - $(top_builddir)/plug-ins/megawidget/megawidget.o \ + $(top_builddir)/plug-ins/megawidget/libmegawidget.a \ $(top_builddir)/libgimp/libgimpui.la \ $(top_builddir)/libgimp/libgimp.la \ $(X_LIBS) \ @@ -21,6 +24,7 @@ LDADD = \ DEPS = \ $(top_builddir)/libgimp/libgimpui.la \ + $(top_srcdir)/plug-ins/megawidget/libmegawidget.a \ $(top_builddir)/libgimp/libgimp.la refract_DEPENDENCIES = $(DEPS) @@ -37,8 +41,3 @@ files: echo $$subdir/$$file; \ done; \ done - - - - - diff --git a/plug-ins/refract/README b/plug-ins/refract/README new file mode 100644 index 0000000000..71fa681ea1 --- /dev/null +++ b/plug-ins/refract/README @@ -0,0 +1,48 @@ +refract: A plug-in for the GIMP 0.99 +by Kevin Turner +http://www.poboxes.com/kevint/gimp/refract.html + +Refract distorts an image by passing it through the lens. The side of +the lens towards the image is flat, the shape the other side is +determined by a height map; a grayscale image where white pixels are +high, black pixels are low, and anything between is somewhere +inbetween. (Refract will accept an RGB image as a lens map, but will +only use the first channel.) + + The thickness of the lens is determined by the "Thickness" +paramater. The "Distance" parameter is the distance between the +bottom of the lens and the image. (The distance between the observer +and the image is fixed at somewhere around infinity minus one. +Fortunately, there are no perspective effects.) + + The two indicies of refraction describe what substances you're +looking through. Index A is for the substance between you and the +lens, index B is that of the material the lens is crafted from. So +when looking from air in to water, index A would be about 1 and index +B is 1.333. These indicies are physical constants and can be obtained +by looking in your copy of the CRC, or using the samples provided. + + The X and Y offsets move the position of the lens. Sorry, +a preview image is on the TO DO list, but it ain't here yet. The +resulting image can be placed on a new layer by checking the "New +layer" checkbox. + + Read the code and the aformentioned web page for more +information. Questions, comments, reservations, and bug reports are +always welcome. + + * * * + +I'm not a very expirenced C programmer, so questions, comments, and +reservations on code and style are more than welcome. This plug-in +was developed on Linux and I will be the first to admit that I'm +rather inexpirenced (okay, ignorant) with other operating systems. +If I do wrong, educate me. + +Credits: +Pixel fetcher routines are from Quartic's whirlpinch plug-in. Thanks, +Quartic[1]! + +1: Quartic, AKA Federico Mena-Quintero + federico@nuclecu.unam.mx + http://www.nuclecu.unam.mx/~federico diff --git a/plug-ins/refract/refguts.c b/plug-ins/refract/refguts.c new file mode 100644 index 0000000000..e26ac1514a --- /dev/null +++ b/plug-ins/refract/refguts.c @@ -0,0 +1,542 @@ +/* refguts.c, 1/2/98 - this file contains the icky stuff. + * refract: a plug-in for the GIMP 0.99 + * By Kevin Turner + * http://www.poboxes.com/kevint/gimp/refract.html + */ + +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +/* Refresher course in optics: + Incident ray is the light ray hitting the surface. + Angles are measured from the perpendicular to the surface. + Angle of reflection is equal to angle of incidence. + Angle of refraction is determined by + + Snell's law: index[a] * sin(a) = index[b] * sin(b) + + If second index is smaller than first, light is bent toward normal. + Otherwise, away. + */ + +#include "refract.h" +#include "libgimp/gimp.h" + +typedef struct { /* Quartic's pixelfetcher thing */ + gint col, row; + gint img_width, img_height, img_bpp, img_has_alpha; + gint tile_width, tile_height; + guchar bg_color[4]; + GDrawable *drawable; + GTile *tile; +} pixel_fetcher_t; + +extern RefractValues refractvals; + +void go_refract(GDrawable *drawable, + gint32 image_id); +static void do_refract(GPixelRgn *dest_rgn, + GPixelRgn *lens_rgn, + pixel_fetcher_t *pf); +static gint delta (gdouble *offset, gdouble slope, gint height); +#ifndef OLD_SLOPE_MACROS +static gdouble slope(gint h, /* FIXME: I should probably be inlined. */ + HEIGHT_TYPE p1, + HEIGHT_TYPE p2, + HEIGHT_TYPE p3, + HEIGHT_TYPE p4); +#endif + +/* More pixelfetcher things */ +static pixel_fetcher_t *pixel_fetcher_new(GDrawable *drawable); +static void pixel_fetcher_set_bg_color(pixel_fetcher_t *pf, guchar r, guchar g, guchar b, guchar a); +static void pixel_fetcher_get_pixel(pixel_fetcher_t *pf, int x, int y, guchar *pixel); +static void pixel_fetcher_destroy(pixel_fetcher_t *pf); + +/* This bilinear interpolation function also borrowed. */ +static guchar bilinear_new (double x, + double y, + guchar v[4][4], + guint8 i); + +static gint sel_x1=-1,sel_x2=-1,sel_y1=-1,sel_y2=-1; +static gint sel_w, sel_h; +static guchar fg_color[4]; + +void +go_refract( GDrawable * drawable, gint32 image_id) +{ + /* For Initialize pixel fetcher. */ + pixel_fetcher_t *pf; + guchar bg_color[4]; + + /* For Initialize lens region. */ + GDrawable *lensmap; + GPixelRgn lens_rgn; + gint lxoff, lyoff; +#if 0 + gint use_x1,use_x2,use_y1,use_y2, use_w, use_h; +#endif + + /* For Initialize dest region. */ + GPixelRgn dest_rgn; + GDrawable *output_drawable; + gint32 new_layer_id; + char buf[256]; + + /*****************************/ + /* Initialize pixel fetcher. */ + + gimp_drawable_mask_bounds (drawable->id, &sel_x1, &sel_y1, &sel_x2, &sel_y2); + sel_w=sel_x2-sel_x1; sel_h=sel_y2-sel_y1; + pf = pixel_fetcher_new(drawable); + gimp_palette_get_background(&bg_color[0], &bg_color[1], &bg_color[2]); + pixel_fetcher_set_bg_color(pf, + bg_color[0], + bg_color[1], + bg_color[2], + 0); + + /***************************/ + /* Initialize lens region: */ + + lensmap = gimp_drawable_get (refractvals.lensmap); + + /* Fortunately, this isn't really run repeatedly, so it's OK if + it's not all that compact, right? */ + +#ifdef __PSYCHIC_COMPILER__ /* If your compiler can read my mind better than I can. */ + + /* Crap. We need a smegging lens-wrap toggle. */ + + if (lens wrap) { + + if (no lens offsets) { + /* no problems. */ + lens_rgn = foo(sel_x1, sel_x2, sel_w, sel_h); + /* To conserve resources, we might want to change that + to take less if the lens stops before the image + does. */ + } else { /* offsets. Uhoh. */ + if (lens_size >= drawable_size) { /* Do this for each dimension. */ + /* Oh, it'll be okay. We'll just add offset and take absmod. */ + if (split) { + lens_rgn = wholething; /* Oh well, we'll take the whole thing. */ + } else { /* not split */ + lens_rgn = foo(sel_x1-xoff, sel_y1-yoff, sel_w, sel_h); + } /* endif not split */ + } else { /* lens is smaller */ + if (split) { g_warning("refract: refguts.c: Go to hell.\n"); } + else { lens_rgn= foo(sel_x1-xoff, sel_y1-yoff, sel_w, sel_h); } + } /* lens is smaller */ + } /* endif offsets */ + + } else { /* no lens wrap */ + /* If there's no lens wrapping, I have no problem. It's yo + own dang fault if your lens doesn't land on your drawable + any more. */ + + /* Let's rub it in... */ + if (((xoff > 0) ? (xoff >= sel_w) : (-xoff <= lens_w)) || + ((yoff > 0) ? (yoff >= sel_h) : (-yoff <= lens_h))) { + g_warning("refract: refguts.c: loose nut detected between chair and keyboard.\n"); + g_error("refract: refguts.c: Offsets move lens off image.\n"); + } else { + lens_rgn = foo(sel_x1-xoff, sel_y1-yoff, sel_w, sel_h); + /* To conserve resources, we might want to change that + to take less if the lens stops before the image + does. */ + } + + } /* endif no lens wrap */ + +#else /* Compiler requires actual code. */ + + gimp_drawable_offsets(lensmap->id,&lxoff, &lyoff); + +#ifdef REFRACT_DEBUG + + g_print("x: %d\ty: %d\tw: %d\th: %d\n", + lxoff, lyoff, + lensmap->width,lensmap->height); + +#endif /* REFRACT_DEBUG */ + +#if 0 /* If we *didn't* wrap the lens... */ + if( (sel_x1 > (lxoff + lensmap->width)) || + (lxoff > sel_x2) || + (sel_y1 > (lyoff + lensmap->height)) || + (lyoff > sel_y2)) { + g_error("refract:refguts.c:Selection and lens don't overlap. You lose.\n"); + } else { + use_x1=MAX(sel_x1,lxoff); + use_x2=MIN(sel_x2,lxoff + lensmap->width); + use_y1=MAX(sel_y1,lyoff); + use_y2=MIN(sel_y2,lyoff + lensmap->height); + use_w=use_x2-use_x1; + use_h=use_y2-use_y1; + } +#endif /* if we didn't wrap lenses */ + + gimp_pixel_rgn_init (&lens_rgn, lensmap, + lxoff, lyoff, lensmap->width, lensmap->height, + FALSE, FALSE); + +#endif /* Compiler requires actual code. */ + + /**********************************/ + /* Initialize destination region: */ + + sprintf(buf,"Refracted %s",gimp_drawable_name(drawable->id)); + + if (refractvals.newl) { /* New layer? Yes... */ + new_layer_id=gimp_layer_new(image_id, buf, sel_w, sel_h, + gimp_drawable_gray(drawable->id) + ? GRAYA_IMAGE : RGBA_IMAGE, + 100.0, NORMAL_MODE); + /* For layer position (currently 0), how would I say + "one above current layer"? */ + gimp_image_add_layer(image_id,new_layer_id,0); + gimp_layer_set_offsets(new_layer_id, sel_x1, sel_y1); + output_drawable=gimp_drawable_get(new_layer_id); + } else { /* New layer No. */ + output_drawable=drawable; + } /* New layer No. */ + + gimp_pixel_rgn_init (&dest_rgn, output_drawable, + sel_x1, sel_y1, sel_w, sel_h, + TRUE, TRUE); + +#ifdef REFRACT_DEBUG + g_print("drawable-id: %d\toutput-id: %d:\tlens_rgn-id: %d\n", + drawable->id,output_drawable->id,lens_rgn.drawable->id); +#endif + + /********/ + /* Misc */ + + gimp_palette_get_foreground(&fg_color[0], &fg_color[1], &fg_color[2]); + fg_color[3] = 255; + + /**********/ + /* Do it! */ + + do_refract(&dest_rgn,&lens_rgn,pf); + + /*************/ + /* Clean up. */ + + /* FIXME: If we are cancelled, make sure there's none of that + unsightly new layer residue. */ + + pixel_fetcher_destroy(pf); + + /* I hope this works... */ + + gimp_drawable_flush(output_drawable); + gimp_drawable_merge_shadow(output_drawable->id,!refractvals.newl); + gimp_drawable_update(output_drawable->id,sel_x1,sel_y1,sel_w,sel_h); + gimp_drawable_detach(drawable); + if (drawable != output_drawable) gimp_drawable_detach(output_drawable); + gimp_drawable_detach(lensmap); + + /* return (refractvals.newl ? new_layer_id : NULL); */ + +} /* go_refract */ + +#define ABSMOD(A,B) ( ((A) < 0) ? (((B) + (A)) % (B)) : ((A) % (B)) ) + +#define X(F) ( ABSMOD((F)+refractvals.xofs,lens_rgn->w) ) +#define Y(F) ( ABSMOD((F)+refractvals.yofs,lens_rgn->h) ) + +#define ROWM2 (lm_rowm2[ X(x) * lens_rgn->bpp ]) +#define ROWM1 (lm_rowm1[ X(x) * lens_rgn->bpp ]) +#define ROW0(F) (lm_row0[ X(x+(F)) * lens_rgn->bpp ]) +#define ROWP1 (lm_rowp1[ X(x) * lens_rgn->bpp ]) +#define ROWP2 (lm_rowp2[ X(x) * lens_rgn->bpp ]) + +#ifdef OLD_SLOPE_MACROS +#define SLOPE_X ((gdouble) 1.0 / (12 * h) * ( ROW0(-2*h) - 8 * ROW0(-1*h) + 8 * ROW0(1*h) - ROW0(2*h) ) * depths ) +#define SLOPE_Y ((gdouble) 1.0 / (12 * h) * ( ROWM2 - 8 * ROWM1 + 8 * ROWP1 - ROWP2 ) * depths ) +#else /* Macros calling the slope function. Functionally equivillant. */ +#define SLOPE_X (slope(h,ROW0(-2*h), ROW0(-1*h), ROW0(1*h), ROW0(2*h))) +#define SLOPE_Y (slope(h,ROWM2, ROWM1, ROWP1, ROWP2)) +#endif /* OLD_SLOPE_MACROS */ + +static void +do_refract(GPixelRgn *dest_rgn, GPixelRgn *lens_rgn, + pixel_fetcher_t *pf) +{ + HEIGHT_TYPE *lm_rowm2, *lm_rowm1, *lm_row0, *lm_rowp1, *lm_rowp2; + HEIGHT_TYPE *lm_rowfoo; + + guchar pixel[4][4]; + guint8 i, j; + gint8 diff_bpp; + guchar *dest, *dest_row; + gdouble dx, dy; + gint x, y, xf, yf; + + gdouble depths=(gdouble) refractvals.thick/ (gdouble) 256.0; /* Depth scalar */ + const gint h=1; /* The delta value for the slope interpolation equation. */ + /* FIXME: Give option of changing h? */ + + /* See if dest_rgn and pf have different bpp */ + diff_bpp = dest_rgn->bpp - pf->img_bpp; + + /***************/ + /* Allocations */ + + lm_rowm2 = g_malloc(lens_rgn->w * lens_rgn->bpp * sizeof(HEIGHT_TYPE)); + lm_rowm1 = g_malloc(lens_rgn->w * lens_rgn->bpp * sizeof(HEIGHT_TYPE)); + lm_row0 = g_malloc(lens_rgn->w * lens_rgn->bpp * sizeof(HEIGHT_TYPE)); + lm_rowp1 = g_malloc(lens_rgn->w * lens_rgn->bpp * sizeof(HEIGHT_TYPE)); + lm_rowp2 = g_malloc(lens_rgn->w * lens_rgn->bpp * sizeof(HEIGHT_TYPE)); + + dest_row = g_malloc(dest_rgn->w * dest_rgn->bpp * sizeof(guchar)); + + /************************/ + /* Grab some lens rows. */ + + gimp_pixel_rgn_get_row(lens_rgn, lm_rowm2, 0, Y(sel_y1 - 2*h), lens_rgn->w); + gimp_pixel_rgn_get_row(lens_rgn, lm_rowm1, 0, Y(sel_y1 - 1*h), lens_rgn->w); + gimp_pixel_rgn_get_row(lens_rgn, lm_row0, 0, Y(sel_y1), lens_rgn->w); + gimp_pixel_rgn_get_row(lens_rgn, lm_rowp1, 0, Y(sel_y1 + 1*h), lens_rgn->w); + gimp_pixel_rgn_get_row(lens_rgn, lm_rowp2, 0, Y(sel_y1 + 2*h), lens_rgn->w); + + /***********************/ + /* Let's begin work... */ + for (y=sel_y1; y < sel_y2; y++) { + + gimp_pixel_rgn_get_row(dest_rgn, dest_row, sel_x1, y, sel_w); + dest = dest_row; + + for (x=sel_x1; x < sel_x2; x++) { + + /* If offsets in both X and Y direction exist... */ + /* (meaning no internal refraction) */ + if (delta(&dx, SLOPE_X, ROW0(0) * depths) && + delta(&dy, SLOPE_Y, ROW0(0) * depths)) { + + switch (refractvals.edge) { + case WRAP: + xf = ABSMOD(x + (gint) dx, dest_rgn->drawable->width); + yf = ABSMOD(y + (gint) dy, dest_rgn->drawable->height); + break; + case BACKGROUND: + case OUTSIDE: + xf = x + (gint) dx; + yf = y + (gint) dy; + break; + default: + g_error("refract: refract.c: Unanticipated value for edge in do_refract\n"); + } /* switch refractvals.edge */ + + pixel_fetcher_get_pixel(pf, xf, yf, pixel[0]); + pixel_fetcher_get_pixel(pf, xf + 1, yf, pixel[1]); + pixel_fetcher_get_pixel(pf, xf, yf + 1, pixel[2]); + pixel_fetcher_get_pixel(pf, xf + 1, yf + 1, pixel[3]); + + for (i = 0; i < pf->img_bpp; i++) { + *dest++ = bilinear_new(dx, dy, pixel, i); + } /* next i */ + /* If dest_rgn has more bpp than pf's source, + then fill in the rest with 255's... This helps + when making a new layer from a non-alpha layer. */ + for (j = 0; j < diff_bpp; j++) { + *dest++ = 255; + } + + } else { /* if a delta() call returns false. */ + for (i = 0; i < dest_rgn->bpp; i++) { + *dest++ = fg_color[i]; + } /* next i */ + } /* endif delta() */ + } /* next x */ + + gimp_pixel_rgn_set_row(dest_rgn, dest_row, sel_x1, y, sel_w); + + if (!(y % PROGRESS_ROWS)) + gimp_progress_update((double) (y-sel_y1) / (double) (sel_y2-sel_y1)); + + /* move lensmap pointers */ + + lm_rowfoo=lm_rowm2; + lm_rowm2=lm_rowm1; + lm_rowm1=lm_row0; + lm_row0= lm_rowp1; + lm_rowp1=lm_rowp2; + lm_rowp2=lm_rowfoo; + + /* get new lensmap row */ + + gimp_pixel_rgn_get_row(lens_rgn, lm_rowp2, 0, Y(y+3*h), lens_rgn->w); + + } /* next y */ +} /* do_refract */ + +#ifndef OLD_SLOPE_MACROS +static gdouble /* FIXME: I should probably be inlined. */ +slope(gint h, HEIGHT_TYPE p1, HEIGHT_TYPE p2, HEIGHT_TYPE p3, HEIGHT_TYPE p4) +{ + /* p1 = f(x-2h), p2 = f(x-1h), p3 = f(x+1h), p4=f(x+2h) */ + return 1.0 / (12 * h) * ( p1 - 8 * p2 + 8 * p3 - p4 ); +} +#endif /* OLD_SLOPE_MACROS */ + +static gint +delta(gdouble *offset, gdouble slope, gint height) +{ + gdouble alpha, beta; + + alpha = atan(slope); + + if( alpha > asin( refractvals.nb / refractvals.na )) { +#ifdef REFRACT_DEBUG + puts("!"); +#endif + return FALSE; /* Total Internal Refraction. Aiee! */ + } + + beta = asin(refractvals.na * sin(alpha)/refractvals.nb); + *offset = -(refractvals.dist + height) * tan(beta - alpha); + + return TRUE; +} + +/* A "borrowed" bilinear interpolation function, modified to select from a + two dimensional array instead of a linear one. */ +static guchar +bilinear_new(double x, double y, guchar values[4][4], guint8 i) +{ + double m0, m1; + + x = fmod(x, 1.0); + y = fmod(y, 1.0); + + if (x < 0.0) + x += 1.0; + + if (y < 0.0) + y += 1.0; + + m0 = (double) values[0][i] + x * ((double) values[1][i] - values[0][i]); + m1 = (double) values[2][i] + x * ((double) values[3][i] - values[2][i]); + + return (guchar) (m0 + y * (m1 - m0)); +} /* bilinear_new */ + +/************************************************************************ + * + * Fun pixel fetching stuff... Quartic's code from whirlpinch.c + * Uses the globals sel_x1,sel_x2,sel_y1,sel_y2. + */ + +static pixel_fetcher_t * +pixel_fetcher_new(GDrawable *drawable) +{ + pixel_fetcher_t *pf; + + pf = g_malloc(sizeof(pixel_fetcher_t)); + + pf->col = -1; + pf->row = -1; + pf->img_width = drawable->width; + pf->img_height = drawable->height; + pf->img_bpp = drawable->bpp; + pf->img_has_alpha = gimp_drawable_has_alpha(drawable->id); + pf->tile_width = gimp_tile_width(); + pf->tile_height = gimp_tile_height(); + pf->bg_color[0] = 0; + pf->bg_color[1] = 0; + pf->bg_color[2] = 0; + pf->bg_color[3] = 0; + + pf->drawable = drawable; + pf->tile = NULL; + + return pf; +} /* pixel_fetcher_new */ + + +/*****/ + +static void +pixel_fetcher_set_bg_color(pixel_fetcher_t *pf, guchar r, guchar g, guchar b, guchar a) +{ + pf->bg_color[0] = r; + pf->bg_color[1] = g; + pf->bg_color[2] = b; + + if (pf->img_has_alpha) + pf->bg_color[pf->img_bpp - 1] = a; +} /* pixel_fetcher_set_bg_color */ + + +/*****/ + +static void +pixel_fetcher_get_pixel(pixel_fetcher_t *pf, int x, int y, guchar *pixel) +{ + gint col, row; + gint coloff, rowoff; + guchar *p; + int i; + + if ((x < sel_x1) || (x >= sel_x2) || + (y < sel_y1) || (y >= sel_y2)) { + for (i = 0; i < pf->img_bpp; i++) + pixel[i] = pf->bg_color[i]; + + return; + } /* if */ + + col = x / pf->tile_width; + coloff = x % pf->tile_width; + row = y / pf->tile_height; + rowoff = y % pf->tile_height; + + if ((col != pf->col) || + (row != pf->row) || + (pf->tile == NULL)) { + if (pf->tile != NULL) + gimp_tile_unref(pf->tile, FALSE); + + pf->tile = gimp_drawable_get_tile(pf->drawable, FALSE, row, col); + gimp_tile_ref(pf->tile); + + pf->col = col; + pf->row = row; + } /* if */ + + p = pf->tile->data + pf->img_bpp * (pf->tile->ewidth * rowoff + coloff); + + for (i = pf->img_bpp; i; i--) + *pixel++ = *p++; +} /* pixel_fetcher_get_pixel */ + + +/*****/ + +static void +pixel_fetcher_destroy(pixel_fetcher_t *pf) +{ + if (pf->tile != NULL) + gimp_tile_unref(pf->tile, FALSE); + + g_free(pf); +} /* pixel_fetcher_destroy */ diff --git a/plug-ins/refract/refmain.c b/plug-ins/refract/refmain.c new file mode 100644 index 0000000000..144d8eed08 --- /dev/null +++ b/plug-ins/refract/refmain.c @@ -0,0 +1,527 @@ +/* refmain.c, 1/2/98 - this file contains startup routine and dialogs. + * refract: A plug-in for the GIMP 0.99. + * Uses a height field as a lens of specified refraction index. + * + * by Kevin Turner + * http://www.poboxes.com/kevint/gimp/refract.html + */ + +/* I require megawidgets to compile! A copy was probably compiled in + the plug-ins directory of your GIMP source distribution, it will + work nicely. Just move me or it somewhere I can see it... */ + +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + + +#ifdef REFRACT_DEBUG +#include +#include +#include +#endif /* DEBUG */ + +#include +#include /* It's not clear to me if this needs be here or no... */ +#include "refract.h" +#include "libgimp/gimp.h" +#include "libgimp/gimpui.h" + +/* megawidget.h could be in any of several places relative to us... */ +/* should this be an autoconf thing? */ +#ifdef HAVE_CONFIG_H /* We're part of the GIMP distribution. */ +#include "../megawidget/megawidget.h" +#else +#include "megawidget.h" +/* #include */ +#endif + +typedef struct { + gint run; +} RefractInterface; + +/* go_refract is in refguts.c */ +extern void go_refract(GDrawable *drawable, + gint32 image_id); +static void query (void); +static void run (gchar *name, + gint nparams, + GParam *param, + gint *nreturn_vals, + GParam **return_vals); + +static gint refract_dialog(); +static gint map_constrain(gint32 image_id, + gint32 drawable_id, + gpointer data); +static void newl_toggle_callback (GtkWidget *widget, + gpointer data); +static void tooltips_toggle_callback (GtkWidget *widget, + gpointer data); +static void refract_close_callback(GtkWidget *widget, + gpointer data); +static void refract_ok_callback(GtkWidget *widget, + gpointer data); +static void map_menu_callback (gint32 id, + gpointer data); +static GtkWidget* ior_menu_new(GtkWidget *tieto); +static void ior_menu_callback (GtkWidget *widget, + gfloat *data); + + +GPlugInInfo PLUG_IN_INFO = +{ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ +}; + +/* refractvals defined in refract.h */ +/* not static, used in refguts.c */ +RefractValues refractvals = +{ + -1, /* Lens map ID */ + 32, /* lens thickness */ + 0, /* distance */ + 1.0003, /* index a */ + 1.333, /* index b */ + WRAP, /* wrap behaviour */ + FALSE, /* new layer? */ + 0, /* offset x */ + 0, /* offset y */ +}; + +static RefractInterface refractint = +{ + FALSE /* run */ +}; + +MAIN () + +static void +query () +{ + static GParamDef args[] = + { + { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, + { PARAM_IMAGE, "image", "Input image" }, + { PARAM_DRAWABLE, "drawable", "Input drawable" }, + /* If we did have parameters, these be them: */ + { PARAM_DRAWABLE, "lensmap", "Lens map drawable" }, + { PARAM_INT32, "thick", "Lens thickness" }, + { PARAM_INT32, "dist", "Lens distance from image" }, + { PARAM_FLOAT, "na", "Index of Refraction A" }, + { PARAM_FLOAT, "nb", "Index of Refraction B" }, + { PARAM_INT32, "edge", "Background (0), Outside (1), Wrap (2)" }, + { PARAM_INT32, "newl", "New layer?" }, + { PARAM_INT32, "xofs", "X offset" }, + { PARAM_INT32, "yofs", "Y offset" } + }; + static GParamDef *return_vals = NULL; + static int nargs = sizeof (args) / sizeof (args[0]); + static int nreturn_vals = 0; + + gimp_install_procedure ("plug_in_refract", + "Uses a height field as a lens.", + "Distorts the image by refracting it through a height field 'lens' with a specified index of refraction.", + "Kevin Turner ", + "Kevin Turner", + "1997", + "/Filters/Distorts/Refract&Reflect...", + "RGB*, GRAY*, INDEXED*", + PROC_PLUG_IN, + nargs, nreturn_vals, + args, return_vals); +} /* query */ + +static void +run (gchar *name, + gint nparams, + GParam *param, + gint *nreturn_vals, + GParam **return_vals) +{ + static GParam values[1]; + GDrawable *drawable; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + +#ifdef REFRACT_DEBUG + printf("refract: pid %d\n", getpid()); +#endif + + run_mode = param[0].data.d_int32; + + *nreturn_vals = 1; + *return_vals = values; + + values[0].type = PARAM_STATUS; + values[0].data.d_status = status; + + drawable = gimp_drawable_get (param[2].data.d_drawable); + + switch (run_mode) { + case RUN_INTERACTIVE: + /* Possibly retrieve data */ + gimp_get_data ("plug_in_refract", &refractvals); + + /* Acquire info with a dialog */ + if (! refract_dialog ()) { + gimp_drawable_detach (drawable); + return; + } + break; + + case RUN_NONINTERACTIVE: + if (status == STATUS_SUCCESS) { + refractvals.lensmap = param[3].data.d_drawable; + refractvals.thick = param[4].data.d_int32; + refractvals.dist = param[5].data.d_int32; + refractvals.na = param[6].data.d_float; + refractvals.nb = param[7].data.d_float; + refractvals.edge = param[8].data.d_int32; + refractvals.newl = param[9].data.d_int32; + refractvals.xofs = param[10].data.d_int32; + refractvals.yofs = param[11].data.d_int32; + } /* if */ + + break; + + case RUN_WITH_LAST_VALS: + /* Possibly retrieve data */ + gimp_get_data ("plug_in_refract", &refractvals); + break; + + default: + break; + } /* switch run_mode */ + + if (gimp_drawable_color (drawable->id) || gimp_drawable_gray (drawable->id)) { + gimp_progress_init ("Doing optics homework..."); + + /* What's this do? */ + gimp_tile_cache_ntiles(2 * (drawable->width + gimp_tile_width() - 1) + / gimp_tile_width()); + + go_refract (drawable, param[1].data.d_image); + + if (run_mode != RUN_NONINTERACTIVE) + gimp_displays_flush (); + + if (run_mode == RUN_INTERACTIVE /*|| run_mode == RUN_WITH_LAST_VALS*/) + gimp_set_data ("plug_in_refract", &refractvals, sizeof (RefractValues)); + } else { + status = STATUS_EXECUTION_ERROR; + } + + values[0].data.d_status = status; + +} /* run */ + +static gint +refract_dialog() +{ + gint argc; + gchar **argv; + + GtkTooltips *tooltips; + GtkWidget *menu, *option_menu, *ior_a_menu, *ior_b_menu; + GtkWidget *ok_button, *cancel_button; + GtkWidget *layercheck, *toolcheck; + GtkWidget *dlg; + GtkWidget *table; + GtkWidget *label; + +#ifdef REFRACT_DEBUG +#if 0 + printf("refract: waiting... (pid %d)\n", getpid()); + kill(getpid(), SIGSTOP); +#endif +#endif + + /* Standard GTK startup sequence */ + argc = 1; + argv = g_new (gchar *, 1); + argv[0] = g_strdup ("refract"); + + gtk_init (&argc, &argv); + + gdk_set_use_xshm(gimp_use_xshm()); + + /* FIXME: Can we use the GIMP colormap when in 8-bit to reduce flashing? */ + /* end standard GTK startup */ + + /* I guess we need a window... */ + dlg = gtk_dialog_new(); + gtk_window_set_title(GTK_WINDOW(dlg), REFRACT_TITLE); + gtk_signal_connect(GTK_OBJECT(dlg), "destroy", + (GtkSignalFunc) refract_close_callback, + NULL); + + tooltips = gtk_tooltips_new (); + + /* Action area: */ + + /* OK */ + ok_button = gtk_button_new_with_label ("OK"); + GTK_WIDGET_SET_FLAGS (ok_button, GTK_CAN_DEFAULT); + gtk_signal_connect (GTK_OBJECT (ok_button), "clicked", + (GtkSignalFunc) refract_ok_callback, dlg); + gtk_widget_grab_default (ok_button); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->action_area), ok_button, + TRUE, TRUE, 0); + gtk_widget_show (ok_button); + + /* Cancel */ + cancel_button = gtk_button_new_with_label ("Cancel"); + GTK_WIDGET_SET_FLAGS (cancel_button, GTK_CAN_DEFAULT); + gtk_signal_connect_object (GTK_OBJECT (cancel_button), "clicked", + (GtkSignalFunc) refract_close_callback, + NULL); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->action_area), cancel_button, + TRUE, TRUE, 0); + gtk_widget_show (cancel_button); + + /* Paramater settings: */ + table = gtk_table_new(7, 3, FALSE); + gtk_container_add(GTK_CONTAINER (GTK_DIALOG (dlg)->vbox),table); + gtk_widget_show (table); + + /* FIXME: add preview box */ + + /* drop box for lens map */ + label = gtk_label_new("Lens map"); + + option_menu = gtk_option_menu_new(); + + menu = gimp_drawable_menu_new(map_constrain, map_menu_callback, + NULL, refractvals.lensmap); + gtk_option_menu_set_menu(GTK_OPTION_MENU(option_menu),menu); + gtk_tooltips_set_tips (tooltips, option_menu, + "The drawable to use as the lens."); + + gtk_table_attach_defaults(GTK_TABLE(table),label,0,1,0,1); + gtk_table_attach_defaults(GTK_TABLE(table),option_menu,1,3,0,1); + gtk_widget_show(label); + gtk_widget_show(option_menu); + + /* TODO? Add "Invert lens map" Not anytime soon... */ + /* Would require adding all sorts of conditional subtracting stuff + in the main loop... Let them invert it first! :) */ + + /* Eek. Megawidgets don't return a value I can tie tooltips to. + Maybe I should look in to libgck. */ + + /* entry/scale for lens thickness */ + + mw_iscale_entry_new(table, "Thickness", + 0, 256, + 1, 10, 0, + 0, 2, 1, 2, + &refractvals.thick); + + /* entry/scale pair for distance */ + mw_iscale_entry_new(table, "Distance", + 0, 1000, + 1, 10, 0/*what's this do?*/, + 0, 2, 2, 3, + &refractvals.dist); + + /* a entry/scale/drop-menu for each index */ + mw_fscale_entry_new(table, "Index A", + INDEX_SCALE_MIN, INDEX_SCALE_MAX, + 1.0, 0.1, 0, + 0,1, 3, 4, + &refractvals.na); + + ior_a_menu = ior_menu_new(NULL/*FIXME*/); + gtk_table_attach_defaults(GTK_TABLE(table),ior_a_menu,2,3,3,4); + gtk_widget_show (ior_a_menu); + + gtk_tooltips_set_tips (tooltips, ior_a_menu, + "FIXME (No, it doesn't work.)"); + + mw_fscale_entry_new(table, "Index B", + INDEX_SCALE_MIN, INDEX_SCALE_MAX, + 1.0, 0.1, 0, + 0, 1, 4, 5, + &refractvals.nb); + + ior_b_menu = ior_menu_new(NULL/*FIXME*/); + gtk_table_attach_defaults(GTK_TABLE(table),ior_b_menu,2,3,4,5); + gtk_widget_show (ior_b_menu); + + gtk_tooltips_set_tips (tooltips, ior_b_menu, + "FIXME (No, it doesn't work.)"); + + /* entry/scale pairs for x and y offsets */ + + mw_iscale_entry_new(table, "X Offset", + -1000, 1000, + 1, 20, 0, + 0,2, 5, 6, + &refractvals.xofs); + + mw_iscale_entry_new(table, "Y Offset", + -1000, 1000, + 1, 20, 0, + 0,2, 6, 7, + &refractvals.yofs); + + /* radio buttons for wrap/transparent (or bg, if image isn't layered) */ + + /* button = gtk_check_button_new_with_label ("Wrap?"); + toggle_button_callback (button, gpointer data); + gtk_toggle_button_set_state (GtkToggleButton button, refractvals.edge); */ + + /* Make new layer(s) or dirty the old? */ + layercheck = gtk_check_button_new_with_label ("New layer?"); + gtk_container_add(GTK_CONTAINER (GTK_DIALOG (dlg)->vbox),layercheck); + gtk_signal_connect (GTK_OBJECT (layercheck), "clicked", + GTK_SIGNAL_FUNC (newl_toggle_callback), NULL); + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (layercheck), refractvals.newl); + gtk_tooltips_set_tips (tooltips, layercheck, + "Put the refracted image on a new layer or dirty this one?"); + + gtk_widget_show (layercheck); + + toolcheck = gtk_check_button_new_with_label ("Tooltips?"); + gtk_container_add(GTK_CONTAINER (GTK_DIALOG (dlg)->vbox),toolcheck); + gtk_signal_connect (GTK_OBJECT (toolcheck), "clicked", + GTK_SIGNAL_FUNC (tooltips_toggle_callback), (gpointer) tooltips); + gtk_tooltips_set_tips (tooltips, toolcheck, + "Turn off these dumb tooltips."); + gtk_widget_show (toolcheck); + + /* Tooltips OFF by default. */ + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toolcheck), FALSE); + gtk_tooltips_disable (tooltips); + + gtk_widget_show (dlg); + + gtk_main (); + gdk_flush (); + + return refractint.run; +} /* refract_dialog */ + +static GtkWidget* +ior_menu_new(GtkWidget *tieto) +{ + GtkWidget *chooser; + GtkWidget *menu, *menuitem; + guint i; + + struct foo + { + const gfloat index; + const gchar *name; + }; + +/* If you change stuff, don't forget to change this. */ +#define NUMSTUFF 9 + static const struct foo material[NUMSTUFF] = + { + /* Common indicies of refraction (for yellow sodium light, 589 nm) */ + /* From my Sears, Zemansky, Young physics book. */ + /* For more, check your copy of the CRC or your favorite pov-ray + include file. */ + + { 1.0003, "Air" }, + { 1.309, "Ice" }, + { 1.333, "Water"}, + { 1.36, "Alcohol"}, + { 1.473, "Glycerine"}, + { 1.52, "Glass"}, + { 1.544, "Quartz"}, + { 1.923, "Zircon"}, + { 2.417, "Diamond"}, + }; + + chooser = gtk_option_menu_new(); + + menu = gtk_menu_new(); + + for (i=0; i < NUMSTUFF; i++) { + menuitem = gtk_menu_item_new_with_label(material[i].name); + gtk_menu_append(GTK_MENU(menu), menuitem); + gtk_signal_connect(GTK_OBJECT(menuitem), "activate", + (GtkSignalFunc)ior_menu_callback,(gfloat *)&material[i].index); + gtk_widget_show(menuitem); + }; /* next i */ + + gtk_option_menu_set_menu(GTK_OPTION_MENU(chooser), menu); + + return chooser; +} + +static void +ior_menu_callback (GtkWidget *widget, gfloat *data) +{ +#ifdef REFRACT_DEBUG + printf("%f\n",*data); +#endif +} + +static gint +map_constrain(gint32 image_id, gint32 drawable_id, gpointer data) +{ + if (drawable_id == -1) + return TRUE; + + return (gimp_drawable_color(drawable_id) || gimp_drawable_gray(drawable_id)); +} /* map_constrain */ + +/* Callbacks */ +static void +newl_toggle_callback (GtkWidget *widget, gpointer data) +{ + refractvals.newl = GTK_TOGGLE_BUTTON (widget)->active; +} + +static void +tooltips_toggle_callback (GtkWidget *widget, gpointer data) +{ + GtkTooltips *tooltips; + tooltips= (GtkTooltips *) data; + + if (GTK_TOGGLE_BUTTON (widget)->active) + gtk_tooltips_enable (tooltips); + else + gtk_tooltips_disable (tooltips); + +} + +static void +refract_close_callback (GtkWidget *widget, + gpointer data) +{ + gtk_main_quit (); +} + +static void +refract_ok_callback (GtkWidget *widget, gpointer data) +{ + refractint.run = TRUE; + gtk_widget_destroy (GTK_WIDGET (data)); +} + +static void +map_menu_callback (gint32 id, gpointer data) +{ + refractvals.lensmap = id; +} diff --git a/plug-ins/refract/refract.c b/plug-ins/refract/refract.c deleted file mode 100644 index 7319141a38..0000000000 --- a/plug-ins/refract/refract.c +++ /dev/null @@ -1,1016 +0,0 @@ -/* refract.c, version 0.1.1-alpha, 23 October 1997 - * A plug-in for the GIMP 0.99. - * Uses a height field as a lens of specified refraction index. - * - * by Kevin Turner - * http://www.poboxes.com/kevint/gimp/refract.html - * - * Check that web page for a more complete description of what the - * plug-in does and does _not_ do. */ - -/* I require megawidgets to compile! A copy was probably compiled in - the plug-ins directory of your GIMP source distribution, it will - work nicely. Just move me or it somewhere I can see it... */ - -/* THIS IS AN ALPHA RELEASE. - - The code is ugly, and the plug-in is NOT full featured and I know I - still have work left to do before it is. Hopefully I'll have much - done by the end of October (well, that's what I thought)... But I - thought I'd go with "release early, release often" in case anyone - cares to improve an alogrythm (or my spelling) or something... - - But it's fun enough that I thought I'd let people play with it... - So enjoy, and keep on hackin'. */ - - -/* - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -/* I'm not a very expirenced C programmer, so questions, comments, and - * reservations on code and style are more than welcome. This plug-in - * was developed on Linux and I will be the first to admit that I'm - * rather inexpirenced (okay, ignorant) with other operating systems. - * If I do wrong, educate me. */ - -/* Pixel fetcher routines are from Quartic's whirlpinch plug-in. - Thanks, Quartic[1]! */ - -/* 1: Quartic, AKA Federico Mena-Quintero - federico@nuclecu.unam.mx - http://www.nuclecu.unam.mx/~federico */ - -/* TO DO: - * UI: - * megawidgets are insufficient. (No way to integrate entry_scale - * with tooltips or option_menu). Replace them. - * necessities: - * Make the "new layer" option work correctly. - * necessary luxuries: - * Make offsets work. Add radio buttons for wrapping options. - * excess luxuries: - * Variable IOR information in some [alpha?] channel. - * for version 1.1: - * THIS PLUGIN NEEDS A PREVIEW THING! - * Reflections - * for version > 1.1: - * Diffraction or whatever that thing that makes rainbows is called. - * Lighting */ - -/* Refresher course in optics: - Incident ray is the light ray hitting the surface. - Angles are measured from the perpendicular to the surface. - Angle of reflection is equal to angle of incidence. - Angle of refraction is determined by - - Snell's law: index[a] * sin(a) = index[b] * sin(b) - - If second index is smaller than first, light is bent toward normal. - Otherwise, away. - */ - -/* Comment out the #define REFRACT_DEBUG for distribution releases, or - * if you get unwanted diagnostic noise from refract on stdout or - * stderr... */ - -#define REFRACT_DEBUG - -#ifdef REFRACT_DEBUG -#include -#include -#endif /* DEBUG */ - -#include -#include /* It's not clear to me if this needs be here or no... */ -#include "gtk/gtk.h" -#include "libgimp/gimp.h" -#include "libgimp/gimpui.h" - -#include "../megawidget/megawidget.h" /* For entry/scale pairs. */ -/* PONDER: How does libgck compare to megawidget? */ -/* I need radio buttons and drop-down menus too... */ - -#ifndef REFRACT_DEBUG -#define REFRACT_TITLE "Refract 12/24/97-Alpha" -#else -#define REFRACT_TITLE "Refract 12/24/97 (debug)" -#endif - -/* Update the progress bar every this-many rows... */ -#define PROGRESS_ROWS 8 - -typedef struct { - gint32 lensmap; /* lens map id */ - gint32 depth; /* lens depth */ - gint32 dist; /* distance */ - gdouble na; /* index a */ - gdouble nb; /* index b */ - gint wrap; /* wrap/transparent */ - gint newl; /* new layer? */ - gint xofs; /* offset x */ - gint yofs; /* offset y */ -} RefractValues; - -typedef struct { - gint x; - gint y; -} EksWhy; - -typedef struct { - gint run; -} RefractInterface; - -typedef struct { /* Quartic's pixelfetcher thing */ - gint col, row; - gint img_width, img_height, img_bpp, img_has_alpha; - gint tile_width, tile_height; - guchar bg_color[4]; - GDrawable *drawable; - GTile *tile; -} pixel_fetcher_t; - - -static void query (void); -static void run (gchar *name, - gint nparams, - GParam *param, - gint *nreturn_vals, - GParam **return_vals); - -static void refract (GDrawable * drawable, - gint32 image_id); -static gint delta (gdouble *offset, gdouble slope, gint height); -static gint refract_dialog(); -static gint map_constrain(gint32 image_id, - gint32 drawable_id, - gpointer data); -static void newl_toggle_callback (GtkWidget *widget, - gpointer data); -static void tooltips_toggle_callback (GtkWidget *widget, - gpointer data); -static void refract_close_callback(GtkWidget *widget, - gpointer data); -static void refract_ok_callback(GtkWidget *widget, - gpointer data); -static void map_menu_callback (gint32 id, - gpointer data); -static GtkWidget* ior_menu_new(GtkWidget *tieto); -static void ior_menu_callback (GtkWidget *widget, - gfloat *data); - -/* More pixelfetcher things */ -static pixel_fetcher_t *pixel_fetcher_new(GDrawable *drawable); -static void pixel_fetcher_set_bg_color(pixel_fetcher_t *pf, guchar r, guchar g, guchar b, guchar a); -static void pixel_fetcher_get_pixel(pixel_fetcher_t *pf, int x, int y, guchar *pixel); -static void pixel_fetcher_destroy(pixel_fetcher_t *pf); - -/* This bilinear interpolation function also borrowed. */ -static guchar bilinear (gdouble x, - gdouble y, - guchar * v); - -GPlugInInfo PLUG_IN_INFO = -{ - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ -}; - -static RefractValues refractvals = -{ - -1, /* Lens map ID */ - 32, /* lens depth */ - 0, /* distance */ - 1.0003, /* index a */ - 1.333, /* index b */ - 1, /* 0 = wrap, 1 = transparent */ - FALSE, /* new layer? */ - 0, /* offset x */ - 0, /* offset y */ -}; - -static RefractInterface refractint = -{ - FALSE /* run */ -}; - -gint sel_x1=-1,sel_x2=-1,sel_y1=-1,sel_y2=-1; -/* pixel_fetcher uses these as globals and I'm too lazy to make it do otherwise. */ - -MAIN () - -static void -query () -{ - static GParamDef args[] = - { - { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, - { PARAM_IMAGE, "image", "Input image" }, - { PARAM_DRAWABLE, "drawable", "Input drawable" }, - /* If we did have parameters, these be them: */ - { PARAM_DRAWABLE, "lensmap", "Lens map drawable" }, - { PARAM_INT32, "depth", "Lens depth" }, - { PARAM_INT32, "dist", "Lens distance from image" }, - { PARAM_FLOAT, "na", "Index of Refraction A" }, - { PARAM_FLOAT, "nb", "Index of Refraction B" }, - { PARAM_INT32, "wrap", "Wrap (0), Background (1)" }, - { PARAM_INT32, "newl", "New layer?" }, - { PARAM_INT32, "xofs", "X offset" }, - { PARAM_INT32, "yofs", "Y offset" } - }; - static GParamDef *return_vals = NULL; - static int nargs = sizeof (args) / sizeof (args[0]); - static int nreturn_vals = 0; - - gimp_install_procedure ("plug_in_refract", - "Uses a height field as a lens.", - "Distorts the image by refracting it through a height field 'lens' with a specified index of refraction.", - "Kevin Turner ", - "Kevin Turner", - "1997", - "/Filters/Distorts/Refract&Reflect...", - "RGB*, GRAY*, INDEXED*", - PROC_PLUG_IN, - nargs, nreturn_vals, - args, return_vals); -} /* query */ - -static void -run (gchar *name, - gint nparams, - GParam *param, - gint *nreturn_vals, - GParam **return_vals) -{ - static GParam values[1]; - GDrawable *drawable; - GRunModeType run_mode; - GStatusType status = STATUS_SUCCESS; - -#ifdef REFRACT_DEBUG - printf("refract: pid %d\n", getpid()); -#endif - - run_mode = param[0].data.d_int32; - - *nreturn_vals = 1; - *return_vals = values; - - values[0].type = PARAM_STATUS; - values[0].data.d_status = status; - - drawable = gimp_drawable_get (param[2].data.d_drawable); - - switch (run_mode) { - case RUN_INTERACTIVE: - /* Possibly retrieve data */ - gimp_get_data ("plug_in_refract", &refractvals); - - /* Acquire info with a dialog */ - if (! refract_dialog ()) { - gimp_drawable_detach (drawable); - return; - } - break; - - case RUN_NONINTERACTIVE: - if (status == STATUS_SUCCESS) { - refractvals.lensmap = param[3].data.d_drawable; - refractvals.depth = param[4].data.d_int32; - refractvals.dist = param[5].data.d_int32; - refractvals.na = param[6].data.d_float; - refractvals.nb = param[7].data.d_float; - refractvals.wrap = param[8].data.d_int32; - refractvals.newl = param[9].data.d_int32; - refractvals.xofs = param[10].data.d_int32; - refractvals.yofs = param[11].data.d_int32; - } /* if */ - - break; - - case RUN_WITH_LAST_VALS: - /* Possibly retrieve data */ - gimp_get_data ("plug_in_refract", &refractvals); - break; - - default: - break; - } /* switch run_mode */ - - if (gimp_drawable_color (drawable->id) || gimp_drawable_gray (drawable->id)) { - gimp_progress_init ("Doing optics homework..."); - - /* What's this do? */ - gimp_tile_cache_ntiles(2 * (drawable->width + gimp_tile_width() - 1) - / gimp_tile_width()); - - refract (drawable, param[1].data.d_image); - - if (run_mode != RUN_NONINTERACTIVE) - gimp_displays_flush (); - - if (run_mode == RUN_INTERACTIVE /*|| run_mode == RUN_WITH_LAST_VALS*/) - gimp_set_data ("plug_in_refract", &refractvals, sizeof (RefractValues)); - } else { - status = STATUS_EXECUTION_ERROR; - } - - values[0].data.d_status = status; - - gimp_drawable_detach (drawable); -} /* run */ - - -static void -refract( GDrawable * drawable, gint32 image_id) -{ - - GPixelRgn src_rgn, dest_rgn; - GPixelRgn lens_rgn; - GDrawable * output_drawable; - gint32 new_layer_id; - - guchar *lm_rowm2, *lm_rowm1, *lm_row0; - guchar *lm_rowp1, *lm_rowp2, *lm_rowfoo; - guchar *dest, *dest_row; - - GDrawable *lensmap; - gint lm_width, lm_row_width, lm_height; /* Lensmap stuff */ - gint lm_bpp, lm_has_alpha; - - gint x1, y1, x2, y2; /* Bounds of the selection */ - gint x, y, i; - - gdouble depths; /* Depth scalar */ - gdouble dx, dy; - gint xf, yf; - - const gint h=1; /* The delta value for the slope interpolation equation. */ - /* FIXME: Give option of changing h for large maps? */ - - gint img_width, img_height, img_has_alpha, img_bpp; - pixel_fetcher_t *pf; - guchar bg_color[4], fg_color[4]; - guchar pixel[4][4], values[4]; - - gimp_drawable_mask_bounds (drawable->id, &x1, &y1, &x2, &y2); - - sel_x1=x1,sel_y1=y1,sel_x2=x2,sel_y2=y2; - - /* Source region: */ - gimp_pixel_rgn_init (&src_rgn, drawable, x1, y1, (x2-x1), (y2-y1), FALSE, FALSE); - - img_width = gimp_drawable_width(drawable->id); - img_height = gimp_drawable_height(drawable->id); - - /* Destination region: */ - if (refractvals.newl) { - /* FIXME(somewhere): New layer doesn't work right! */ - /* FIXME: Make new layer no bigger than the selection. */ - new_layer_id=gimp_layer_new(image_id,"Refracted",img_width,img_height, - RGBA_IMAGE, /* Should this ever be RGB_IMAGE? */ - 100.0, NORMAL_MODE); /* or could be GRAY */ - gimp_image_add_layer(image_id,new_layer_id,0); - output_drawable=gimp_drawable_get(new_layer_id); - } else - output_drawable=drawable; - - gimp_pixel_rgn_init (&dest_rgn, output_drawable, x1, y1, (x2-x1), (y2-y1), - TRUE, TRUE); - - /* Set up pixel fetcher... */ - pf = pixel_fetcher_new(drawable); - - gimp_palette_get_background(&bg_color[0], &bg_color[1], &bg_color[2]); - gimp_palette_get_foreground(&fg_color[0], &fg_color[1], &fg_color[2]); - fg_color[3] = 255; - - /* Which needs drawable and which needs output_drawable - is somewhat confused. */ - - img_has_alpha = gimp_drawable_has_alpha(output_drawable->id); - img_bpp = gimp_drawable_bpp(output_drawable->id); - - pixel_fetcher_set_bg_color(pf, - bg_color[0], - bg_color[1], - bg_color[2], - (img_has_alpha ? 0 : 255)); - - /* Get the lens map... */ - lensmap = gimp_drawable_get (refractvals.lensmap); - - lm_width = gimp_drawable_width(refractvals.lensmap); - lm_height = gimp_drawable_height(refractvals.lensmap); - lm_bpp = gimp_drawable_bpp(refractvals.lensmap); - lm_has_alpha = gimp_drawable_has_alpha(refractvals.lensmap); - - gimp_pixel_rgn_init (&lens_rgn, lensmap, x1, y1, lm_width, lm_height, FALSE, FALSE); - - dest_row = g_malloc((x2-x1) * img_bpp * sizeof(guchar)); - - if ((x2-x1) >= lm_width) { /* If we need the entire lens map... */ - lm_row_width = lm_width; - } else if (refractvals.xofs == 0) { - /* Image is smaller than lens map, and doesn't */ - /* require wrapping over the edge... */ - lm_row_width = x2-x1; - } else { - /* FIXME */ - g_warning("refract: X offset breaks oversized lensmaps.\n"); - } - - /* lm_rows could (should?) be handled by array, but isn't. */ - - /* FIXME: Increase robustness for lensmaps with rather small heights. */ - - /* FIXME: X offset not used. - That'll take a bit of tweaking... */ - - if (lm_row_width > 0) { - lm_rowm2 = g_malloc(lm_row_width * lm_bpp * sizeof(guchar)); - lm_rowm1 = g_malloc(lm_row_width * lm_bpp * sizeof(guchar)); - lm_row0 = g_malloc(lm_row_width * lm_bpp * sizeof(guchar)); - lm_rowp1 = g_malloc(lm_row_width * lm_bpp * sizeof(guchar)); - lm_rowp2 = g_malloc(lm_row_width * lm_bpp * sizeof(guchar)); - - /* FIXME: Provide an alternative to wrapping - for the top and bottom of the lens map... */ -#define ABSMOD(A,B) ( ((A) < 0) ? (B) + (A) % (B) : (A) % (B) ) - -#define Y(O) ( ABSMOD((O)+refractvals.yofs,lm_height) ) - - gimp_pixel_rgn_get_row(&lens_rgn, lm_rowm2, 0, Y(y1 - 2), lm_row_width); - gimp_pixel_rgn_get_row(&lens_rgn, lm_rowm1, 0, Y(y1 - 1), lm_row_width); - - gimp_pixel_rgn_get_row(&lens_rgn, lm_row0, 0, Y(y1), lm_row_width); - - gimp_pixel_rgn_get_row(&lens_rgn, lm_rowp1, 0, Y(y1 + 1), lm_row_width); - gimp_pixel_rgn_get_row(&lens_rgn, lm_rowp2, 0, Y(y1 + 2), lm_row_width); - - } else { - /* FIXME */ - g_warning("refract: Row buffers not initalized.\n"); - } - - - depths = (gdouble) refractvals.depth/ (gdouble) 256.0; - - for (y=y1; y < y2; y++) { - - gimp_pixel_rgn_get_row(&dest_rgn, dest_row, x1, y, (x2-x1)); - dest = dest_row; - - for (x=x1; x < x2; x++) { - - /* So on a scale of 1 to 100, how far below zero does this - rank for coding style? */ - - /* FIXME: This may not produce the desired behaviour with - lm_row_width < lm_width and xofs != 0 */ - -#define X(O) ( ABSMOD((O)+refractvals.xofs,lm_row_width) ) - -#define ROWM2 (lm_rowm2[ X(x) * lm_bpp ]) -#define ROWM1 (lm_rowm1[ X(x) * lm_bpp ]) -#define ROW0(O) (lm_row0[ X(x+0) * lm_bpp ]) -#define ROWP1 (lm_rowp1[ X(x) * lm_bpp ]) -#define ROWP2 (lm_rowp2[ X(x) * lm_bpp ]) - -#define SLOPE_X ((gdouble) 1.0 / (12 * h) * ( ROW0(-2) - 8 * ROW0(-1) + 8 * ROW0(1) - ROW0(2) ) * depths ) -#define SLOPE_Y ((gdouble) 1.0 / (12 * h) * ( ROWM2 - 8 * ROWM1 + 8 * ROWP1 - ROWP2 ) * depths ) - - if (delta(&dx, SLOPE_X, ROW0(0) * depths) && - delta(&dy, SLOPE_Y, ROW0(0) * depths)) { - - if (refractvals.wrap) { - xf = ABSMOD(x + (gint) dx, img_width); - yf = ABSMOD(y + (gint) dy, img_height); - } else { - xf = x + (gint) dx; - yf = y + (gint) dy; - } - - pixel_fetcher_get_pixel(pf, xf, yf, pixel[0]); - pixel_fetcher_get_pixel(pf, xf + 1, yf, pixel[1]); - pixel_fetcher_get_pixel(pf, xf, yf + 1, pixel[2]); - pixel_fetcher_get_pixel(pf, xf + 1, yf + 1, pixel[3]); - - for (i = 0; i < img_bpp; i++) { - values[0] = pixel[0][i]; - values[1] = pixel[1][i]; - values[2] = pixel[2][i]; - values[3] = pixel[3][i]; - - *dest++ = bilinear(dx, dy, values); - } /* for */ - - } else { /* if a delta() call returns FALSE */ - for (i = 0; i < img_bpp; i++) { - *dest++ = fg_color[i]; - } /* for */ - }/* if */ - - } /* next x */ - - gimp_pixel_rgn_set_row(&dest_rgn, dest_row, x1, y, (x2-x1)); - - /* On the theory that a % takes less time than an update, - we only need them done occasionally... */ - if (!(y % PROGRESS_ROWS)) - gimp_progress_update((double) (y-y1) / (double) (y2-y1)); - - lm_rowfoo=lm_rowm2; lm_rowm2=lm_rowm1; lm_rowm1=lm_row0; lm_row0= lm_rowp1; - lm_rowp1=lm_rowp2; lm_rowp2=lm_rowfoo; - - gimp_pixel_rgn_get_row(&lens_rgn, lm_rowp2, x1, Y(y+3), lm_row_width); - - } /* next y */ - - /* Cleanup */ - - /* FIXME: Make *certain* that anything we created (e.g. new layers) is cleaned - up when plug-in is cancelled! */ - - pixel_fetcher_destroy(pf); - - g_free(dest_row); - - g_free(lm_rowm2);g_free(lm_rowm1); - g_free(lm_row0); - g_free(lm_rowp1);g_free(lm_rowp2); - - gimp_drawable_flush(output_drawable); - gimp_drawable_merge_shadow(output_drawable->id, TRUE); - gimp_drawable_update(output_drawable->id, x1, y1, (x2-x1), (y2-y1)); - - gimp_drawable_detach (output_drawable); - - if(refractvals.newl) { - gimp_drawable_flush(drawable); - gimp_drawable_detach(drawable); - } - -} /* refract */ - -static gint -delta(gdouble *offset, gdouble slope, gint height) -{ - gdouble alpha, beta; - - alpha = atan(slope); - - if( alpha > asin( refractvals.nb / refractvals.na )) { -#ifdef REFRACT_DEBUG - puts("!"); -#endif - return FALSE; /* Total Internal Refraction. Aiee! */ - } - - beta = asin(refractvals.na * sin(alpha)/refractvals.nb); - *offset = -(refractvals.dist + height) * tan(beta - alpha); - - return TRUE; -} - -/* Realistically, this number should be 1.0. An index of refraction - of less than 1 means the speed of light in that substance is - *faster* than in a vacuum! But hey, it's GIMP, when was the last - time we payed any attention to reality? Go ahead... Add - "subspace" to the list of materials... */ -#define INDEX_SCALE_MIN 0.0 - -static gint -refract_dialog() -{ - gint argc; - gchar **argv; - - GtkTooltips *tooltips; - GtkWidget *menu, *option_menu, *ior_a_menu, *ior_b_menu; - GtkWidget *ok_button, *cancel_button; - GtkWidget *layercheck, *toolcheck; - GtkWidget *dlg; - GtkWidget *table; - GtkWidget *label; - -#ifdef REFRACT_DEBUG -#if 0 - printf("refract: waiting... (pid %d)\n", getpid()); - kill(getpid(), SIGSTOP); -#endif -#endif - - /* Standard GTK startup sequence */ - argc = 1; - argv = g_new (gchar *, 1); - argv[0] = g_strdup ("refract"); - - gtk_init (&argc, &argv); - - gdk_set_use_xshm(gimp_use_xshm()); - - /* FIXME: Can we use the GIMP colormap when in 8-bit to reduce flashing? */ - /* end standard GTK startup */ - - /* I guess we need a window... */ - dlg = gtk_dialog_new(); - gtk_window_set_title(GTK_WINDOW(dlg), REFRACT_TITLE); - gtk_signal_connect(GTK_OBJECT(dlg), "destroy", - (GtkSignalFunc) refract_close_callback, - NULL); - - tooltips = gtk_tooltips_new (); - - /* Action area: */ - - /* OK */ - ok_button = gtk_button_new_with_label ("OK"); - GTK_WIDGET_SET_FLAGS (ok_button, GTK_CAN_DEFAULT); - gtk_signal_connect (GTK_OBJECT (ok_button), "clicked", - (GtkSignalFunc) refract_ok_callback, dlg); - gtk_widget_grab_default (ok_button); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->action_area), ok_button, - TRUE, TRUE, 0); - gtk_widget_show (ok_button); - - /* Cancel */ - cancel_button = gtk_button_new_with_label ("Cancel"); - GTK_WIDGET_SET_FLAGS (cancel_button, GTK_CAN_DEFAULT); - gtk_signal_connect_object (GTK_OBJECT (cancel_button), "clicked", - (GtkSignalFunc) refract_close_callback, - NULL); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->action_area), cancel_button, - TRUE, TRUE, 0); - gtk_widget_show (cancel_button); - - /* Paramater settings: */ - table = gtk_table_new(7, 3, FALSE); - gtk_container_add(GTK_CONTAINER (GTK_DIALOG (dlg)->vbox),table); - gtk_widget_show (table); - - /* FIXME: add preview box */ - - /* drop box for lens map */ - label = gtk_label_new("Lens map"); - - option_menu = gtk_option_menu_new(); - - menu = gimp_drawable_menu_new(map_constrain, map_menu_callback, - NULL, refractvals.lensmap); - gtk_option_menu_set_menu(GTK_OPTION_MENU(option_menu),menu); - gtk_tooltips_set_tips (tooltips, option_menu, - "The drawable to use as the lens."); - - gtk_table_attach_defaults(GTK_TABLE(table),label,0,1,0,1); - gtk_table_attach_defaults(GTK_TABLE(table),option_menu,1,3,0,1); - gtk_widget_show(label); - gtk_widget_show(option_menu); - - /* TODO? Add "Invert lens map" Not anytime soon... */ - /* Would require adding all sorts of conditional subtracting stuff - in the main loop... Let them invert it first! :) */ - - /* Eek. Megawidgets don't return a value I can tie tooltips to. - Maybe I should look in to libgck. */ - - /* entry/scale for depth of lens */ - - mw_iscale_entry_new(table, "Depth", - 0, 256, - 1, 10, 0, - 0, 2, 1, 2, - &refractvals.depth); - - /* entry/scale pair for distance */ - mw_iscale_entry_new(table, "Distance", - 0, 1000, - 1, 10, 0/*what's this do?*/, - 0, 2, 2, 3, - &refractvals.dist); - - /* a entry/scale/drop-menu for each index */ - mw_fscale_entry_new(table, "Index A", - INDEX_SCALE_MIN, 5.0, - 1.0, 0.1, 0, - 0,1, 3, 4, - &refractvals.na); - - ior_a_menu = ior_menu_new(NULL/*FIXME*/); - gtk_table_attach_defaults(GTK_TABLE(table),ior_a_menu,2,3,3,4); - gtk_widget_show (ior_a_menu); - - gtk_tooltips_set_tips (tooltips, ior_a_menu, - "FIXME (No, it doesn't work.)"); - - mw_fscale_entry_new(table, "Index B", - INDEX_SCALE_MIN, 5.0, - 1.0, 0.1, 0, - 0, 1, 4, 5, - &refractvals.nb); - - ior_b_menu = ior_menu_new(NULL/*FIXME*/); - gtk_table_attach_defaults(GTK_TABLE(table),ior_b_menu,2,3,4,5); - gtk_widget_show (ior_b_menu); - - gtk_tooltips_set_tips (tooltips, ior_b_menu, - "FIXME (No, it doesn't work.)"); - - /* entry/scale pairs for x and y offsets */ - - mw_iscale_entry_new(table, "X Offset", - -1000, 1000, - 1, 20, 0, - 0,2, 5, 6, - &refractvals.xofs); - - mw_iscale_entry_new(table, "Y Offset", - -1000, 1000, - 1, 20, 0, - 0,2, 6, 7, - &refractvals.yofs); - - /* radio buttons for wrap/transparent (or bg, if image isn't layered) */ - - /* button = gtk_check_button_new_with_label ("Wrap?"); - toggle_button_callback (button, gpointer data); - gtk_toggle_button_set_state (GtkToggleButton button, refractvals.wrap); */ - - /* Make new layer(s) or dirty the old? */ - layercheck = gtk_check_button_new_with_label ("New layer?"); - gtk_container_add(GTK_CONTAINER (GTK_DIALOG (dlg)->vbox),layercheck); - gtk_signal_connect (GTK_OBJECT (layercheck), "clicked", - GTK_SIGNAL_FUNC (newl_toggle_callback), NULL); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (layercheck), refractvals.newl); - gtk_tooltips_set_tips (tooltips, layercheck, - "Put the refracted image on a new layer or dirty this one?"); - - gtk_widget_show (layercheck); - - toolcheck = gtk_check_button_new_with_label ("Tooltips?"); - gtk_container_add(GTK_CONTAINER (GTK_DIALOG (dlg)->vbox),toolcheck); - gtk_signal_connect (GTK_OBJECT (toolcheck), "clicked", - GTK_SIGNAL_FUNC (tooltips_toggle_callback), (gpointer) tooltips); - gtk_tooltips_set_tips (tooltips, toolcheck, - "Turn off these dumb tooltips."); - gtk_widget_show (toolcheck); - - /* Tooltips OFF by default. */ - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toolcheck), FALSE); - gtk_tooltips_disable (tooltips); - - gtk_widget_show (dlg); - - gtk_main (); - gdk_flush (); - - return refractint.run; -} /* refract_dialog */ - -static GtkWidget* -ior_menu_new(GtkWidget *tieto) -{ - GtkWidget *chooser; - GtkWidget *menu, *menuitem; - guint i; - - struct foo - { - const gfloat index; - const gchar *name; - }; - -/* If you change stuff, don't forget to change this. */ -#define NUMSTUFF 9 - static const struct foo material[NUMSTUFF] = - { - /* Common indicies of refraction (for yellow sodium light, 589 nm) */ - /* From my Sears, Zemansky, Young physics book. */ - /* For more, check your copy of the CRC or your favorite pov-ray - include file. */ - - { 1.0003, "Air" }, - { 1.309, "Ice" }, - { 1.333, "Water"}, - { 1.36, "Alcohol"}, - { 1.473, "Glycerine"}, - { 1.52, "Glass"}, - { 1.544, "Quartz"}, - { 1.923, "Zircon"}, - { 2.417, "Diamond"}, - }; - - chooser = gtk_option_menu_new(); - - menu = gtk_menu_new(); - - for (i=0; i < NUMSTUFF; i++) { - menuitem = gtk_menu_item_new_with_label(material[i].name); - gtk_menu_append(GTK_MENU(menu), menuitem); - gtk_signal_connect(GTK_OBJECT(menuitem), "activate", - (GtkSignalFunc)ior_menu_callback,(gfloat *)&material[i].index); - gtk_widget_show(menuitem); - }; /* next i */ - - gtk_option_menu_set_menu(GTK_OPTION_MENU(chooser), menu); - - return chooser; -} - -static void -ior_menu_callback (GtkWidget *widget, gfloat *data) -{ -#ifdef REFRACT_DEBUG - printf("%f\n",*data); -#endif -} - -static gint -map_constrain(gint32 image_id, gint32 drawable_id, gpointer data) -{ - if (drawable_id == -1) - return TRUE; - - return (gimp_drawable_color(drawable_id) || gimp_drawable_gray(drawable_id)); -} /* map_constrain */ - -/* Callbacks */ -static void -newl_toggle_callback (GtkWidget *widget, gpointer data) -{ - refractvals.newl = GTK_TOGGLE_BUTTON (widget)->active; -} - -static void -tooltips_toggle_callback (GtkWidget *widget, gpointer data) -{ - GtkTooltips *tooltips; - tooltips= (GtkTooltips *) data; - - if (GTK_TOGGLE_BUTTON (widget)->active) - gtk_tooltips_enable (tooltips); - else - gtk_tooltips_disable (tooltips); - -} - -static void -refract_close_callback (GtkWidget *widget, - gpointer data) -{ - gtk_main_quit (); -} - -static void -refract_ok_callback (GtkWidget *widget, gpointer data) -{ - refractint.run = TRUE; - gtk_widget_destroy (GTK_WIDGET (data)); -} - -static void -map_menu_callback (gint32 id, gpointer data) -{ - refractvals.lensmap = id; -} - -/********************************************** - * A borrowed bilinear interpolation function. - */ - -static guchar -bilinear(double x, double y, guchar *values) -{ - double m0, m1; - - x = fmod(x, 1.0); - y = fmod(y, 1.0); - - if (x < 0.0) - x += 1.0; - - if (y < 0.0) - y += 1.0; - - m0 = (double) values[0] + x * ((double) values[1] - values[0]); - m1 = (double) values[2] + x * ((double) values[3] - values[2]); - - return (guchar) (m0 + y * (m1 - m0)); -} /* bilinear */ - - -/************************************************************************ - * - * Fun pixel fetching stuff... Quartic's code from whirlpinch.c - * Uses the globals sel_x1,sel_x2,sel_y1,sel_y2. - */ - -static pixel_fetcher_t * -pixel_fetcher_new(GDrawable *drawable) -{ - pixel_fetcher_t *pf; - - pf = g_malloc(sizeof(pixel_fetcher_t)); - - pf->col = -1; - pf->row = -1; - pf->img_width = gimp_drawable_width(drawable->id); - pf->img_height = gimp_drawable_height(drawable->id); - pf->img_bpp = gimp_drawable_bpp(drawable->id); - pf->img_has_alpha = gimp_drawable_has_alpha(drawable->id); - pf->tile_width = gimp_tile_width(); - pf->tile_height = gimp_tile_height(); - pf->bg_color[0] = 0; - pf->bg_color[1] = 0; - pf->bg_color[2] = 0; - pf->bg_color[3] = 0; - - pf->drawable = drawable; - pf->tile = NULL; - - return pf; -} /* pixel_fetcher_new */ - - -/*****/ - -static void -pixel_fetcher_set_bg_color(pixel_fetcher_t *pf, guchar r, guchar g, guchar b, guchar a) -{ - pf->bg_color[0] = r; - pf->bg_color[1] = g; - pf->bg_color[2] = b; - - if (pf->img_has_alpha) - pf->bg_color[pf->img_bpp - 1] = a; -} /* pixel_fetcher_set_bg_color */ - - -/*****/ - -static void -pixel_fetcher_get_pixel(pixel_fetcher_t *pf, int x, int y, guchar *pixel) -{ - gint col, row; - gint coloff, rowoff; - guchar *p; - int i; - - if ((x < sel_x1) || (x >= sel_x2) || - (y < sel_y1) || (y >= sel_y2)) { - for (i = 0; i < pf->img_bpp; i++) - pixel[i] = pf->bg_color[i]; - - return; - } /* if */ - - col = x / pf->tile_width; - coloff = x % pf->tile_width; - row = y / pf->tile_height; - rowoff = y % pf->tile_height; - - if ((col != pf->col) || - (row != pf->row) || - (pf->tile == NULL)) { - if (pf->tile != NULL) - gimp_tile_unref(pf->tile, FALSE); - - pf->tile = gimp_drawable_get_tile(pf->drawable, FALSE, row, col); - gimp_tile_ref(pf->tile); - - pf->col = col; - pf->row = row; - } /* if */ - - p = pf->tile->data + pf->img_bpp * (pf->tile->ewidth * rowoff + coloff); - - for (i = pf->img_bpp; i; i--) - *pixel++ = *p++; -} /* pixel_fetcher_get_pixel */ - - -/*****/ - -static void -pixel_fetcher_destroy(pixel_fetcher_t *pf) -{ - if (pf->tile != NULL) - gimp_tile_unref(pf->tile, FALSE); - - g_free(pf); -} /* pixel_fetcher_destroy */ diff --git a/plug-ins/refract/refract.h b/plug-ins/refract/refract.h new file mode 100644 index 0000000000..4337ecafd0 --- /dev/null +++ b/plug-ins/refract/refract.h @@ -0,0 +1,82 @@ +/* refract.h, 1/2/98 + * refract: a plug-in for the GIMP 0.99 + * By Kevin Turner + * http://www.poboxes.com/kevint/gimp/refract.html + */ + +#ifndef REFRACT_DEBUG +#warning "REFRACT_DEBUG flag is Off." +#define REFRACT_TITLE "Refract 1/2/98-Beta" +#else +#warning "REFRACT_DEBUG flag is On." +#define REFRACT_TITLE "Refract 1/2/98 (debug)" +#endif + +/* Update the progress bar every this-many rows... */ +#ifndef PROGRESS_ROWS +#define PROGRESS_ROWS 8 +#endif + +/* Realistically, this number should be 1.0. An index of refraction + of less than 1 means the speed of light in that substance is + *faster* than in a vacuum! But hey, it's GIMP, when was the last + time we payed any attention to reality? Go ahead... Add + "subspace" to the list of materials... */ +#ifndef INDEX_SCALE_MIN +#define INDEX_SCALE_MIN 0.0 +#endif + +/* This can be whatever is convient. However, I don't know of any + substances (even artifically generated ones) that have an index of + refraction higher than 4.7 or so...*/ + +#ifndef INDEX_SCALE_MAX +#define INDEX_SCALE_MAX 5.0 +#endif + +/* For now, our height maps only have one byte per pixel, so guchar + should be sufficient. May need to change in future versions of + GIMP when it supports greater pixel depth. */ +#ifndef HEIGHT_TYPE +#define HEIGHT_TYPE guchar +#endif + +/* Should we rely more on macros or functions? */ +/* #define OLD_SLOPE_MACROS */ + +#include "gtk/gtk.h" + +typedef struct { + gint32 lensmap; /* lens map id */ + gint32 thick; /* lens thickness */ + gint32 dist; /* distance */ + gdouble na; /* index a */ + gdouble nb; /* index b */ + gint edge; /* wrap/transparent */ + gint newl; /* new layer? */ + gint xofs; /* offset x */ + gint yofs; /* offset y */ +} RefractValues; + +/* for refractvals.edge */ +/* If a point is outside the selection, then */ +#define BACKGROUND 0 /* use background color (or leave transparent, if alpha) */ +#define OUTSIDE 1 /* look outside the selection for the point. If the point is + beyond the edge of the layer, use background or alpha. + Only makes sense if the drawable is a selection of only part + of the layer. */ +#define WRAP 2 /* like OUTSIDE, but if the point is over the edge of the layer, + get the point by wrapping around. Probably most useful on + images which are tileable. */ + +/* TO DO: provide a "smear" option? Would take whatever pixel was on + the edge of the selection or layer (depending if IN_ONLY or + OUTSIDE) where we went over. Then BACKGROUND/SMEAR would be a + choice independant of IN_ONLY/OUTSIDE/WRAP. BACKGROUND/SMEAR would + be ignored in the case of WRAP. */ + +/* One can also imagine a WRAP_WITHIN_SELECTION option, but I don't + think I would use it too often. Would you? Well, if you're + enthusiastic enough, either write a patch to implement it or + convince me to. For now, take the selection and float it, make it + a new layer, merge it back when you're done, or whatever. */ diff --git a/plug-ins/script-fu/scripts/Makefile.am b/plug-ins/script-fu/scripts/Makefile.am index d2fe7049e7..45dc93a45f 100644 --- a/plug-ins/script-fu/scripts/Makefile.am +++ b/plug-ins/script-fu/scripts/Makefile.am @@ -30,6 +30,7 @@ scriptdata_DATA = \ circle-logo.scm \ circuit.scm \ clothify.scm \ + color-cycling.scm \ coolmetal-logo.scm \ copy-visible.scm \ crystal-logo.scm \ diff --git a/plug-ins/script-fu/scripts/color-cycling.scm b/plug-ins/script-fu/scripts/color-cycling.scm new file mode 100644 index 0000000000..0ac88b6e37 --- /dev/null +++ b/plug-ins/script-fu/scripts/color-cycling.scm @@ -0,0 +1,249 @@ +; ********************************************************************** +; * Color cycling animation script +; * Daniel Cotting (cotting@mygale.org) +; ********************************************************************** +; * Official homepages: http://www.mygale.org/~cotting +; * http://cotting.citeweb.net +; * http://village.cyberbrain.com/cotting +; ********************************************************************** +; Makes a copy of your image and creates an animation of the active layer +; with the help of the alienmap plug-in. The animation may be saved with +; the gif-plug-in. +; ********************************************************************** +; It is recommended to start the alienmap plug-in, to fiddle about with +; the parameters until you have found optimal start va lues. Then put +; these values in the appropriate edit fields in the animation dialog. +; Now you can change the values in the alienmap plug-in to find interes- +; ting end values. After you have inserted these new values in the cor- +; responding fields of the animation script, you can start the calcula- +; tion of the animation. The script will create a new picture with a la- +; yer for each animation frame. With each new frame the start values +; will gradually turn into the specified end values, creating an amazing +; effect of color cycling. +; ********************************************************************** + + +; The GIMP -- an image manipulation program +; Copyright (C) 1995 Spencer Kimball and Peter Mattis +; +; This program is free software; you can redistribute it and/or modify +; it under the terms of the GNU General Public License as published by +; the Free Software Foundation; either version 2 of the License, or +; (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this program; if not, write to the Free Software +; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +; +; +; ********************************************************************** +; Original file: +; waves-anim.scm version 1.00 09/04/97 +; Copyright (C) 1997 Sven Neumann (neumanns@uni-duesseldorf.de) +; ********************************************************************** +; +; + +(define (script-fu-colorcycling-anim img + drawable + num-frames + startredstretch + startgreenstretch + startbluestretch + endredstretch + endgreenstretch + endbluestretch + redmode + greenmode + bluemode + redinvert + greeninvert + blueinvert + startredphase + startgreenphase + startbluephase + endredphase + endgreenphase + endbluephase + startredfrequency + startgreenfrequency + startbluefrequency + endredfrequency + endgreenfrequency + endbluefrequency + redinvert2 + greeninvert2 + blueinvert2) + (let* ((startredstretch (max 0 startredstretch)) + (startgreenstretch (max 0 startgreenstretch)) + (startbluestretch (max 0 startbluestretch)) + (startredstretch (min 128 startredstretch)) + (startgreenstretch (min 128 startgreenstretch)) + (startbluestretch (min 128 startbluestretch)) + (endredstretch (max 0 endredstretch)) + (endgreenstretch (max 0 endgreenstretch)) + (endbluestretch (max 0 endbluestretch)) + (endredstretch (min 128 endredstretch)) + (endgreenstretch (min 128 endgreenstretch)) + (endbluestretch (min 128 endbluestretch)) + + (redmode (max 0 redmode)) + (redmode (min 2 redmode)) + (greenmode (max 0 greenmode)) + (greenmode (min 2 greenmode)) + (bluemode (max 0 bluemode)) + (bluemode (min 2 bluemode)) + + (startredfrequency (max 0 startredfrequency)) + (startgreenfrequency (max 0 startgreenfrequency)) + (startbluefrequency (max 0 startbluefrequency)) + + (endredfrequency (max 0 endredfrequency)) + (endgreenfrequency (max 0 endgreenfrequency)) + (endbluefrequency (max 0 endbluefrequency)) + + (num-frames (max 1 num-frames)) + (remaining-frames num-frames) + + (redstretch startredstretch) + (greenstretch startgreenstretch) + (bluestretch startbluestretch) + (redphase startredphase) + (greenphase startgreenphase) + (bluephase startbluephase) + (redfrequency startredfrequency) + (greenfrequency startgreenfrequency) + (bluefrequency startbluefrequency) + + (redstretchshift (/ (- endredstretch startredstretch) num-frames)) + (greenstretchshift (/ (- endgreenstretch startgreenstretch) num-frames)) + (bluestretchshift (/ (- endbluestretch startbluestretch) num-frames)) + (redphaseshift (/ (- endredphase startredphase) num-frames)) + (greenphaseshift (/ (- endgreenphase startgreenphase) num-frames)) + (bluephaseshift (/ (- endbluephase startbluephase) num-frames)) + (redfrequencyshift (/ (- endredfrequency startredfrequency) num-frames)) + (greenfrequencyshift (/ (- endgreenfrequency startgreenfrequency) num-frames)) + (bluefrequencyshift (/ (- endbluefrequency startbluefrequency) num-frames)) + (image (car (gimp-channel-ops-duplicate img)))) + + (gimp-image-disable-undo image) + +; (if (= invert TRUE) +; (set! phaseshift (- 0 phaseshift))) + + (set! source-layer (car (gimp-image-get-active-layer image))) + + (while (> remaining-frames 1) + (set! alienmap-layer (car (gimp-layer-copy source-layer TRUE))) + (gimp-layer-set-preserve-trans alienmap-layer FALSE) + (gimp-image-add-layer image alienmap-layer -1) + (set! layer-name (string-append "Frame " + (number->string + (- (+ num-frames 2) + remaining-frames) 10))) + (gimp-layer-set-name alienmap-layer layer-name) + + (plug-in-alienmap 1 + image + alienmap-layer + redstretch + greenstretch + bluestretch + redmode + greenmode + bluemode + redinvert + greeninvert + blueinvert + redphase + greenphase + bluephase + redfrequency + greenfrequency + bluefrequency + redinvert2 + greeninvert2 + blueinvert2) + + (set! remaining-frames (- remaining-frames 1)) + (set! redphase (+ redphase redphaseshift)) + (set! greenphase (+ greenphase greenphaseshift)) + (set! bluephase (+ bluephase bluephaseshift)) + (set! redfrequency (+ redfrequency redfrequencyshift)) + (set! greenfrequency (+ greenfrequency greenfrequencyshift)) + (set! bluefrequency (+ bluefrequency bluefrequencyshift)) + (set! redstretch (+ redstretch redstretchshift)) + (set! greenstretch (+ greenstretch greenstretchshift)) + (set! bluestretch (+ bluestretch bluestretchshift)) + + ) + + (gimp-layer-set-name source-layer "Frame 1") + (plug-in-alienmap 1 + image + source-layer + redstretch + greenstretch + bluestretch + redmode + greenmode + bluemode + redinvert + greeninvert + blueinvert + redphase + greenphase + bluephase + redfrequency + greenfrequency + bluefrequency + redinvert2 + greeninvert2 + blueinvert2) + + (gimp-image-enable-undo image) + (gimp-display-new image))) + +(script-fu-register "script-fu-colorcycling-anim" + "/Script-Fu/Animators/Color Cycling" + "Creates an animation with the help of the alienmap plug-in" + "Daniel Cotting (cotting@mygale.org)" + "Daniel Cotting" + "December 1997" + "RGB RGBA" + SF-IMAGE "Image" 0 + SF-DRAWABLE "Drawable" 0 + SF-VALUE "Number of frames" "10" + SF-VALUE "Start: red intensity factor (max. 128)" "128" + SF-VALUE "Start: green intensity factor (max. 128)" "128" + SF-VALUE "Start: blue intensity factor (max. 128)" "128" + SF-VALUE "End: red intensity factor (max. 128)" "128" + SF-VALUE "End: green intensity factor (max. 128)" "128" + SF-VALUE "End: blue intensity factor (max. 128)" "128" + SF-VALUE "Red color mode (sin:0/cos:1/none:2)" "0" + SF-VALUE "Green color mode (sin:0/cos:1/none:2)" "0" + SF-VALUE "Blue color mode (sin:0/cos:1/none:2)" "0" + SF-VALUE "Red inversion before transformation" "FALSE" + SF-VALUE "Green inversion before transformation" "FALSE" + SF-VALUE "Blue inversion before transformation" "FALSE" + SF-VALUE "Start: red phase displacement (RAD)" "0" + SF-VALUE "Start: green phase displacement (RAD)" "0" + SF-VALUE "Start: blue phase displacement (RAD)" "0" + SF-VALUE "End: red phase displacement (RAD)" "0" + SF-VALUE "End: green phase displacement (RAD)" "0" + SF-VALUE "End: blue phase displacement (RAD)" "0" + SF-VALUE "Start: red frequency (> 0)" "1" + SF-VALUE "Start: green frequency (> 0)" "1" + SF-VALUE "Start: blue frequency (> 0)" "1" + SF-VALUE "End: red frequency (> 0)" "1" + SF-VALUE "End: green frequency (> 0)" "1" + SF-VALUE "End: blue frequency (> 0)" "1" + SF-VALUE "Red inversion after transformation" "FALSE" + SF-VALUE "Green inversion after transformation" "FALSE" + SF-VALUE "Blue inversion after transformation" "FALSE") + diff --git a/plug-ins/stegano/.cvsignore b/plug-ins/stegano/.cvsignore new file mode 100644 index 0000000000..60ce1025ec --- /dev/null +++ b/plug-ins/stegano/.cvsignore @@ -0,0 +1,5 @@ +Makefile.in +Makefile +.deps +_libs +stegano diff --git a/plug-ins/stegano/INSTALL b/plug-ins/stegano/INSTALL new file mode 100644 index 0000000000..ed84228336 --- /dev/null +++ b/plug-ins/stegano/INSTALL @@ -0,0 +1,70 @@ +------------------------------------------- + GIMP-Plug-In (Stegano) +------------------------------------------- + Written by Daniel Cotting + Bahnhofstrasse 31 + CH-3066 Stettlen (Switzerland) + + cotting@mygale.org + www.mygale.org/~cotting +------------------------------------------- + Some code is taken out of other plug-ins + written by other authors. +------------------------------------------- + + +------------------------------------------- + INSTALLATION +------------------------------------------- + To install it, you have to edit the + Makefile (change install-path). + Afterwards run make. This will compile + and install the plug-in in the right + directory. Once the new code is installed, + you can run the GIMP and enjoy the new + functions and effects it provides. +------------------------------------------- + + +------------------------------------------- + REDUCE CODE SIZE +------------------------------------------- + If you find that the plug-in is too big, + you can compress the executables with the + gzexe program (if it is avaiable on your + system). To do so, change to the plug-in + directory of the GIMP... + + cd /usr/local/lib/gimp/VERSION/plug-ins + + ...and execute the command... + + gzexe PLUGIN_NAME + + ...and remember to remove the uncompres- + sed binary, which has been renamed to + PLUGIN_NAME~, by running the command: + + rm PLUGIN_NAME~ + + This will result in a code size of about + 20 kB, which isn't too much IMHO. +------------------------------------------ + + +------------------------------------------ + FEEDBACK +------------------------------------------ + I'm interested in any feedback, comments, + bug-reports, suggestions etc. If you + have anything you would like to tell + me, you can write to cotting@mygale.org. + Also have a look at the GIMP-section of + my homepage at www.mygale.org/~cotting. +------------------------------------------ + + Thank you and happy GIMPing! + Daniel Cotting + +------------------------------------------ + \ No newline at end of file diff --git a/plug-ins/stegano/Makefile.am b/plug-ins/stegano/Makefile.am new file mode 100644 index 0000000000..218ce4b1b0 --- /dev/null +++ b/plug-ins/stegano/Makefile.am @@ -0,0 +1,43 @@ +## Process this file with automake to produce Makefile.in + +pluginlibdir = $(gimpplugindir)/plug-ins + +pluginlib_PROGRAMS = stegano + +stegano_SOURCES = \ + stegano.c logo.h + +INCLUDES = \ + $(X_CFLAGS) \ + -I$(top_srcdir) \ + -I$(includedir) + +LDADD = \ + $(top_builddir)/libgimp/libgimpui.la \ + $(top_builddir)/libgimp/libgimp.la \ + $(X_LIBS) \ + -lc + +DEPS = \ + $(top_builddir)/libgimp/libgimpui.la \ + $(top_builddir)/libgimp/libgimp.la + +stegano_DEPENDENCIES = $(DEPS) + +.PHONY: files + +files: + @files=`ls $(DISTFILES) 2> /dev/null`; for p in $$files; do \ + echo $$p; \ + done + @for subdir in $(SUBDIRS); do \ + files=`cd $$subdir; $(MAKE) files | grep -v "make\[[1-9]\]"`; \ + for file in $$files; do \ + echo $$subdir/$$file; \ + done; \ + done + + + + + diff --git a/plug-ins/stegano/README b/plug-ins/stegano/README new file mode 100644 index 0000000000..ed84228336 --- /dev/null +++ b/plug-ins/stegano/README @@ -0,0 +1,70 @@ +------------------------------------------- + GIMP-Plug-In (Stegano) +------------------------------------------- + Written by Daniel Cotting + Bahnhofstrasse 31 + CH-3066 Stettlen (Switzerland) + + cotting@mygale.org + www.mygale.org/~cotting +------------------------------------------- + Some code is taken out of other plug-ins + written by other authors. +------------------------------------------- + + +------------------------------------------- + INSTALLATION +------------------------------------------- + To install it, you have to edit the + Makefile (change install-path). + Afterwards run make. This will compile + and install the plug-in in the right + directory. Once the new code is installed, + you can run the GIMP and enjoy the new + functions and effects it provides. +------------------------------------------- + + +------------------------------------------- + REDUCE CODE SIZE +------------------------------------------- + If you find that the plug-in is too big, + you can compress the executables with the + gzexe program (if it is avaiable on your + system). To do so, change to the plug-in + directory of the GIMP... + + cd /usr/local/lib/gimp/VERSION/plug-ins + + ...and execute the command... + + gzexe PLUGIN_NAME + + ...and remember to remove the uncompres- + sed binary, which has been renamed to + PLUGIN_NAME~, by running the command: + + rm PLUGIN_NAME~ + + This will result in a code size of about + 20 kB, which isn't too much IMHO. +------------------------------------------ + + +------------------------------------------ + FEEDBACK +------------------------------------------ + I'm interested in any feedback, comments, + bug-reports, suggestions etc. If you + have anything you would like to tell + me, you can write to cotting@mygale.org. + Also have a look at the GIMP-section of + my homepage at www.mygale.org/~cotting. +------------------------------------------ + + Thank you and happy GIMPing! + Daniel Cotting + +------------------------------------------ + \ No newline at end of file diff --git a/plug-ins/stegano/logo.h b/plug-ins/stegano/logo.h new file mode 100644 index 0000000000..cb94ec445f --- /dev/null +++ b/plug-ins/stegano/logo.h @@ -0,0 +1,788 @@ +/* GIMP header image file format (Indexed): //logo.h */ + +static unsigned int logo_width = 200; +static unsigned int logo_height = 72; + +/* Call this macro repeatedly. After each use, the pixel data can be extracted */ + +#define HEADER_PIXEL(data,pixel) \ + pixel[0] = palette_data[data[0]*3+2]; \ + pixel[1] = palette_data[data[0]*3+1]; \ + pixel[2] = palette_data[data[0]*3+0]; \ + data--; + +static unsigned char +palette_data[] = { 4,2,2,4,110,178,32,4,122,4,36, +86,15,3,66,4,58,127,36,8,186,4,34,122,17,2, +34,4,19,66,12,4,162,90,2,69,88,2,48,7,20, +2,25,2,103,8,14,48,4,58,186,90,3,154,82,2, +129,55,2,34,17,2,18,17,34,191,94,2,101,57,2, +70,7,32,154,12,22,157,17,3,50,4,88,150,96,3, +186,86,2,138,87,2,86,212,214,210,4,19,98,52,2, +154,15,11,2,4,132,216,7,18,125,12,6,82,37,12, +18,4,88,189,86,14,48,128,2,157,32,4,138,4,60, +155,4,48,126,60,2,218,7,10,52,13,12,66,129,2, +50,56,2,52,52,14,98,4,47,157,6,20,87,48,2, +24,58,2,101,120,2,141,52,5,170,4,113,215,127,2, +73,4,90,210,4,52,112,36,18,194,59,2,85,42,2, +10,107,2,173,95,2,114,31,3,52,4,79,160,84,3, +189,14,10,40,30,2,69,96,2,58,113,2,126,9,37, +231,17,33,170,28,14,2,4,30,146,68,10,37,132,2, +82,23,4,7,4,10,122,4,36,108,32,2,37,7,27, +2,4,98,175,84,10,146,4,101,191,4,14,146,8,29, +86,4,2,170,8,60,230,84,10,162,72,2,39,102,2, +142,4,142,221,4,49,143,68,12,170,4,124,213,15,4, +74,114,2,69,112,2,158,32,3,23,8,50,190,111,2, +104,6,40,154,96,2,210,6,28,104,60,2,138,61,2, +25,68,2,114,58,2,125,39,2,114,73,2,69,16,4, +58,4,88,177,56,14,26,138,2,173,4,68,176,71,2, +55,76,2,210,4,78,130,17,3,42,6,27,69,112,2, +49,12,26,178,47,13,159,18,11,10,13,11,74,141,2, +58,52,18,234,4,82,186,4,126,198,4,103,213,4,62, +206,4,72,226,12,46,210,72,12,222,12,26,146,20,34, +210,4,113,197,4,131,229,4,48,170,4,76,170,7,43, +95,52,30,218,15,11,170,52,14,202,12,14,86,4,40, +174,108,14,202,156,2,186,60,12,130,5,40,129,73,13, +189,12,42,138,44,14,202,4,59,143,4,124,229,4,69, +191,4,69,157,4,60,114,4,43,110,14,14,58,20,26, +157,28,26,210,4,87,162,4,91,202,4,110,226,4,98, +226,4,101,202,17,14,186,28,18,18,60,2,234,28,10, +114,4,30,114,8,10,162,12,54,186,20,26,130,100,10, +170,40,18,154,4,22,114,28,26,234,4,22,58,4,66, +226,4,54,202,12,42,202,4,38,98,4,145,234,4,76, +146,4,94,148,4,138,213,4,94,186,4,54,126,4,54, +154,4,118,211,4,106,178,4,106,188,4,54,142,4,94, +170,4,70,202,4,118,197,4,54,173,4,82,178,72,4, +172,36,10,138,76,14,162,4,98,210,4,118,226,112,2, +114,24,19,8,30,2,85,84,6,226,141,2,73,28,30, +10,28,46,186,112,4,206,36,10,90,36,2,174,108,2, +58,41,3,130,44,10,194,9,33,130,92,2,162,51,2, +42,12,32,162,81,3,146,44,11,26,28,6,146,44,2, +178,30,12,10,60,10,178,64,2,146,28,10,178,92,10, +210,5,41,146,40,2,102,96,2,125,100,2,88,74,2, +157,142,2,159,26,10,55,143,2,50,73,2,102,134,2, +142,73,2,84,127,2,126,142,2,82,156,2,178,28,10, +158,28,26,114,84,14,202,12,4,10,5,20,74,17,2, +26,92,2,194,7,19,106}; + +static unsigned char header_data[] = { 71,99,218,218,99,11,71,218,71,71, +218,99,99,99,71,99,218,99,99,99,99,218,71,218,99,218,218,99,99,218, +218,99,99,218,99,218,99,58,218,99,99,99,58,218,99,99,99,58,99,58, +99,58,11,58,99,58,58,11,99,58,99,58,99,99,99,218,99,218,99,58, +99,71,99,218,71,12,12,12,12,12,12,12,12,12,92,19,19,19,92,92, +92,92,19,108,19,19,19,19,19,19,53,53,53,53,101,19,19,53,53,19, +19,19,12,92,92,12,12,12,71,71,218,99,218,218,71,71,12,12,218,99, +58,58,58,99,99,99,58,99,99,99,11,58,11,58,58,99,58,99,99,99, +58,99,99,99,99,58,99,99,99,99,99,218,99,99,11,99,99,99,11,99, +99,218,218,218,99,218,99,99,218,218,99,99,218,99,218,218,99,99,218,11, +218,71,99,218,99,218,218,99,71,8,218,99,218,218,99,99,99,99,99,99, +218,218,99,99,218,99,218,99,218,71,99,99,99,218,99,99,218,99,99,99, +218,218,99,99,99,99,58,99,58,30,99,99,99,99,99,99,58,99,99,58, +99,58,99,58,99,99,58,58,58,99,58,58,99,218,218,71,99,99,71,71, +71,123,12,118,71,71,12,71,123,12,12,19,19,19,53,19,19,53,53,19, +19,53,101,63,20,63,20,63,53,53,53,101,53,53,53,19,53,53,53,19, +92,12,12,12,71,12,12,12,12,12,92,71,218,218,71,218,71,71,71,71, +99,218,58,58,58,99,99,99,99,58,58,58,99,58,99,58,58,99,58,58, +99,99,58,99,99,99,99,58,99,58,30,99,99,99,218,99,58,99,99,58, +11,99,99,218,99,218,218,99,99,218,71,99,218,99,99,218,99,99,218,99, +11,218,99,218,99,11,218,99,99,8,71,71,71,99,218,71,218,99,71,218, +11,99,218,218,99,218,99,218,99,99,99,99,218,99,99,99,99,99,218,99, +99,99,99,99,99,11,99,99,99,99,99,99,58,99,58,99,58,99,58,58, +99,11,58,58,99,58,99,99,58,58,218,99,123,71,71,71,123,71,71,218, +99,99,218,71,12,12,12,12,92,19,19,53,19,53,53,53,53,19,53,53, +53,53,19,53,19,53,53,53,53,53,63,63,101,63,63,20,53,19,53,53, +53,19,92,92,12,12,12,71,71,71,71,12,12,71,71,12,12,12,12,12, +12,218,218,99,58,58,99,58,99,58,99,58,99,99,58,218,58,99,58,99, +99,99,99,11,58,99,99,58,99,99,58,58,99,99,99,99,99,99,99,99, +99,58,218,99,218,99,99,99,218,99,99,218,99,11,218,99,218,218,99,99, +218,99,218,11,99,71,99,218,71,8,99,99,218,99,99,99,218,99,99,218, +218,99,11,99,99,218,99,218,99,218,218,99,58,99,99,99,58,11,99,99, +58,99,99,58,58,58,58,99,99,99,99,218,58,99,99,99,58,58,99,99, +58,58,99,58,99,58,99,99,58,58,99,218,71,71,218,218,218,58,58,58, +218,99,71,123,12,12,12,19,19,108,108,108,92,92,92,12,71,12,12,92, +19,53,53,53,101,53,53,19,53,101,53,20,53,79,79,0,34,79,20,63, +53,53,53,19,19,19,12,12,12,71,71,71,71,71,71,123,71,12,12,12, +12,12,71,71,218,58,99,58,218,58,218,99,58,99,58,99,99,218,58,58, +58,99,58,58,99,99,58,99,58,99,99,218,58,58,99,99,99,99,99,99, +58,11,99,99,218,218,218,99,218,99,99,218,218,99,218,99,99,218,218,99, +218,99,71,218,99,218,99,99,99,8,218,218,99,218,99,218,99,218,218,99, +11,218,218,218,218,99,71,99,218,99,99,99,218,58,99,99,99,99,218,30, +58,99,58,99,58,11,58,99,58,99,58,58,58,99,58,58,99,99,58,58, +58,99,58,99,58,58,99,58,218,99,99,218,58,99,58,58,58,58,58,218, +71,12,12,71,71,12,12,12,12,71,71,118,71,71,118,71,71,12,223,19, +19,53,53,53,53,63,229,20,79,20,34,0,20,101,101,63,20,101,101,53, +108,53,53,53,53,53,101,19,92,12,12,12,12,71,71,218,218,218,71,71, +118,12,71,71,218,218,58,58,58,58,58,58,218,58,58,58,99,99,218,99, +58,58,99,99,58,99,58,99,58,58,58,99,99,99,58,99,99,99,58,58, +99,58,58,99,99,99,99,99,99,99,218,99,99,218,99,218,218,99,99,218, +99,58,99,99,218,99,218,218,218,8,99,218,99,218,99,218,11,99,218,99, +99,99,99,99,218,99,58,99,99,99,58,99,218,99,99,99,99,99,58,99, +58,218,99,99,99,58,218,58,58,58,99,99,58,99,218,58,99,99,58,218, +58,99,58,99,99,99,58,99,58,58,58,58,99,58,58,58,58,218,218,12, +71,71,71,12,12,71,71,12,71,12,71,71,71,71,12,92,19,53,53,53, +101,63,79,34,251,0,0,63,20,53,19,53,53,53,53,19,19,53,19,19, +19,108,19,19,19,19,19,19,53,53,108,12,12,12,71,71,218,58,58,58, +99,218,71,71,71,12,218,99,99,58,58,58,58,218,58,58,58,58,58,99, +99,58,58,99,58,218,58,99,99,99,99,58,99,128,99,58,99,99,11,99, +99,58,11,58,99,99,99,218,58,11,99,58,99,218,99,99,218,99,99,99, +218,71,99,99,218,99,11,99,218,8,218,99,218,99,218,99,99,218,99,218, +58,218,58,218,99,99,218,99,58,99,99,99,99,78,11,58,99,58,99,99, +99,58,58,99,58,11,58,58,218,99,99,58,58,58,99,58,58,58,99,99, +58,58,58,58,58,58,99,58,99,99,99,58,58,58,58,58,218,71,118,12, +71,71,71,71,71,12,71,71,71,71,71,12,92,19,19,53,53,63,20,251, +0,79,79,0,79,34,34,79,0,63,229,20,63,101,53,101,19,53,19,92, +12,71,12,92,12,12,12,12,12,92,19,92,92,71,12,118,71,218,99,58, +58,58,58,58,218,123,71,218,58,58,58,99,58,58,58,218,58,218,58,58, +218,58,99,58,58,58,99,99,58,99,58,99,218,99,99,99,58,58,58,11, +58,58,99,58,99,99,30,99,99,99,58,218,218,30,99,218,99,99,99,218, +99,99,218,218,99,99,218,71,99,8,99,99,71,99,218,218,99,218,99,218, +99,218,99,58,11,58,99,99,11,58,99,58,99,99,99,99,58,58,99,99, +58,99,99,99,99,58,99,78,58,58,99,99,218,78,58,218,58,99,212,58, +99,58,58,58,218,58,58,58,58,58,58,58,58,58,218,71,12,12,71,71, +123,218,218,58,99,71,123,71,71,12,19,19,19,53,53,19,19,53,63,53, +101,101,101,63,101,101,20,20,79,0,0,79,79,34,251,79,79,251,101,53, +19,92,12,71,71,71,218,12,218,12,71,71,71,71,71,12,71,71,123,71, +58,58,58,58,58,58,58,99,99,58,58,58,99,58,58,58,99,58,99,58, +99,58,58,99,58,58,58,58,99,58,99,58,99,58,99,58,99,99,58,58, +99,99,99,58,99,58,58,58,99,99,99,30,128,58,99,99,99,99,99,58, +218,99,99,218,218,99,99,218,71,8,71,218,99,99,99,99,218,99,99,99, +99,30,58,11,58,58,99,58,58,58,58,30,58,58,99,99,99,58,99,58, +99,58,99,58,58,58,218,99,58,99,58,58,58,218,99,58,58,58,58,58, +58,99,99,99,58,99,99,58,58,212,99,58,58,218,71,71,218,218,99,58, +58,58,58,218,123,71,71,12,108,19,19,108,19,19,223,92,19,92,12,12, +19,19,19,19,53,53,63,63,229,0,34,34,79,0,79,0,75,34,0,34, +79,20,53,19,92,12,71,71,71,218,71,123,71,123,71,71,71,71,71,71, +71,218,58,58,58,58,58,58,58,99,58,58,58,58,58,58,58,58,99,58, +58,99,99,58,99,58,58,58,58,58,58,99,58,99,58,99,58,58,99,99, +58,58,99,99,58,58,218,58,58,99,58,99,11,58,58,99,58,218,99,99, +99,99,218,99,99,218,99,99,99,8,99,218,99,218,99,99,99,99,58,58, +11,58,99,58,58,30,58,11,58,11,58,99,99,58,99,58,58,58,99,58, +58,99,58,99,99,58,58,99,58,99,58,99,58,99,212,58,58,58,58,58, +58,58,58,58,58,58,58,58,58,58,212,58,218,218,218,99,58,58,58,58, +58,99,71,71,71,12,71,71,12,12,12,71,71,123,71,218,71,71,71,92, +19,108,63,79,229,126,0,79,0,0,34,34,34,126,34,251,79,0,126,34, +79,0,79,20,63,19,19,12,71,71,71,218,71,99,71,71,71,71,71,71, +71,71,218,58,58,58,212,58,58,58,58,58,58,58,58,58,58,58,58,58, +58,58,99,58,58,99,58,58,99,99,128,218,58,58,99,58,99,58,58,99, +218,58,58,218,99,99,99,99,99,99,58,99,99,58,30,218,99,99,99,99, +99,99,218,99,99,99,218,218,99,8,218,99,99,99,58,99,99,99,99,99, +58,58,218,99,99,99,58,99,58,58,58,99,58,99,58,99,99,99,58,58, +99,99,58,58,58,58,58,58,99,99,58,99,99,58,58,58,58,99,58,58, +99,58,99,58,78,212,99,212,99,58,58,99,58,58,78,78,246,99,212,58, +99,71,123,71,71,71,71,71,218,218,71,123,218,218,218,118,12,19,63,63, +0,0,0,34,34,0,34,79,79,79,0,34,79,79,20,101,53,101,53,19, +53,53,101,101,53,53,19,19,19,92,218,218,218,218,218,212,78,58,218,218, +71,71,71,11,58,246,58,78,246,58,58,58,99,99,58,58,99,58,212,58, +99,58,99,58,58,99,58,58,58,58,58,212,218,58,58,99,58,58,99,58, +99,99,99,58,58,99,99,99,58,99,58,58,99,99,99,58,58,99,99,99, +99,99,99,11,58,99,99,99,218,8,99,99,218,99,99,218,99,218,58,58, +11,78,58,99,58,99,58,99,58,11,58,99,58,99,58,58,58,99,99,58, +99,99,99,58,58,58,58,58,58,58,58,58,58,58,58,212,99,58,212,99, +58,58,78,58,78,58,58,58,58,58,58,58,58,58,246,58,246,58,58,71, +218,71,71,71,218,71,71,71,71,218,218,71,71,92,92,53,63,126,79,0, +0,79,0,79,34,79,0,126,79,79,79,79,79,229,229,101,53,108,92,71, +71,71,71,71,71,12,12,19,108,19,92,71,71,71,71,218,212,246,78,58, +58,218,218,71,71,58,58,212,212,78,212,78,78,58,58,58,58,58,99,58, +78,58,58,99,58,58,58,58,58,58,58,58,99,58,99,58,58,212,99,58, +58,99,58,99,58,99,99,58,58,99,99,58,58,58,58,11,78,99,99,99, +99,58,99,58,71,99,99,99,99,8,99,99,99,218,99,58,99,30,58,11, +58,11,58,58,99,58,58,99,58,99,58,99,99,58,99,58,99,58,58,99, +58,58,58,58,58,78,58,99,58,99,58,58,58,58,99,58,212,99,58,58, +58,78,78,78,58,58,58,58,58,212,58,78,58,78,78,78,58,99,218,218, +71,218,218,71,58,99,58,99,71,71,71,12,19,20,79,251,0,251,79,251, +79,63,126,79,79,79,79,229,79,79,79,126,126,79,79,63,20,53,53,92, +12,12,218,71,71,218,218,218,71,218,71,71,71,218,71,218,218,58,246,246, +78,212,78,58,218,218,58,58,58,246,78,212,78,212,58,58,58,58,58,212, +78,78,78,58,58,99,58,58,58,58,58,58,58,58,58,218,99,99,58,99, +58,58,218,99,58,58,99,58,99,99,58,99,99,99,58,99,99,58,58,58, +218,99,11,58,99,99,99,218,99,8,99,30,218,58,11,99,99,58,99,58, +99,58,58,99,218,99,218,58,99,99,58,58,58,58,99,58,99,99,58,99, +58,58,58,78,78,58,58,58,58,58,99,246,78,78,58,58,58,58,58,78, +78,212,78,246,246,58,58,58,212,58,212,246,78,246,58,212,218,218,218,218, +218,58,246,58,246,58,218,218,123,12,19,19,53,53,101,53,63,101,63,63, +63,63,63,63,63,101,63,53,63,53,53,53,53,108,19,19,19,19,108,19, +92,92,12,12,71,71,218,99,99,218,218,218,218,218,71,71,71,218,218,246, +78,78,246,78,78,78,58,58,58,78,78,78,78,246,58,58,58,58,58,78, +212,78,78,58,58,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58, +58,99,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,99,99,99, +58,99,58,99,99,58,99,99,99,8,99,99,30,58,58,58,58,58,58,99, +58,11,99,58,99,58,58,58,58,58,58,99,58,58,58,58,58,58,99,58, +99,58,78,58,58,58,99,58,58,78,246,78,58,78,58,58,58,58,78,212, +246,78,246,78,78,99,212,246,78,246,58,246,246,78,246,218,218,218,58,58, +246,78,78,246,58,218,218,71,12,12,108,92,108,19,108,53,63,63,63,53, +53,53,19,223,92,92,49,118,118,118,118,118,118,118,71,118,118,12,12,12, +92,71,71,123,218,99,11,58,58,58,58,78,58,99,99,123,71,218,218,218, +246,246,78,212,78,212,78,246,78,78,58,78,246,78,246,78,58,58,58,58, +99,78,246,78,246,99,58,58,58,58,58,78,78,78,78,99,58,99,58,99, +78,58,58,99,58,218,218,58,58,99,58,58,58,218,99,58,58,58,58,11, +58,99,99,99,58,99,99,218,58,8,99,99,58,99,58,11,58,11,58,58, +99,58,99,58,99,58,99,58,58,218,58,58,58,99,58,99,58,58,58,99, +78,58,58,58,99,58,58,78,78,58,246,78,246,99,58,58,58,212,78,78, +246,58,246,58,78,78,78,58,246,78,78,58,246,58,58,58,212,58,246,78, +212,246,58,58,71,71,71,71,12,92,92,92,108,53,53,53,19,19,223,223, +49,223,92,49,49,223,92,49,118,118,118,71,118,112,118,11,11,112,71,112, +71,71,11,11,11,99,99,58,58,78,78,78,246,78,246,58,99,71,218,71, +218,78,78,246,78,246,58,246,78,246,212,58,246,58,246,78,212,78,246,58, +58,58,78,246,246,78,78,99,58,58,58,212,78,58,78,58,58,58,58,58, +78,58,78,99,58,58,99,58,58,58,58,99,58,58,99,218,58,99,58,58, +58,58,99,58,99,99,58,99,99,8,99,99,58,58,58,99,58,99,99,58, +99,58,58,58,58,58,58,218,99,58,99,58,58,58,58,58,99,58,58,78, +58,78,78,78,78,58,78,58,78,78,78,212,78,58,78,58,78,212,78,246, +78,246,78,78,212,246,246,78,246,212,246,246,78,246,58,246,78,246,58,246, +246,58,99,218,218,218,71,12,92,19,19,19,19,19,223,223,49,223,49,118, +49,112,30,30,237,103,208,208,245,208,245,208,245,245,245,103,208,103,22,237, +30,30,11,11,11,11,71,71,11,99,58,78,78,246,58,246,246,246,58,99, +99,218,212,78,246,78,246,78,246,58,78,58,246,78,58,246,78,212,78,246, +58,212,58,78,78,212,78,78,58,58,99,78,78,78,78,78,58,58,99,58, +58,78,78,78,58,58,99,58,99,58,58,99,58,218,58,58,99,58,58,218, +99,58,99,99,58,99,30,99,99,8,58,99,58,99,58,58,58,99,58,99, +58,218,218,58,99,58,99,58,58,58,78,99,78,58,99,58,58,78,58,78, +78,58,78,78,58,78,78,246,246,212,78,78,78,58,78,246,78,246,58,246, +212,78,58,78,78,58,246,78,78,78,58,246,78,246,78,58,246,78,78,78, +58,218,99,11,71,12,92,92,92,223,223,223,223,223,49,118,112,22,237,208, +72,245,55,243,245,72,72,72,65,208,236,208,208,245,72,55,243,55,55,243, +245,245,245,103,237,237,30,11,11,112,71,11,99,58,78,246,246,246,246,78, +58,218,58,58,246,78,212,78,246,78,246,78,212,78,78,212,78,246,78,78, +58,78,78,78,78,78,246,246,246,58,58,78,58,246,78,212,78,78,99,58, +58,78,58,58,58,58,58,99,58,58,58,58,78,58,58,99,99,58,58,58, +99,218,58,99,99,99,58,99,58,8,99,99,99,58,11,58,58,58,99,58, +58,58,58,58,58,58,58,99,99,78,78,58,58,78,58,58,99,78,78,78, +78,78,78,78,78,78,212,246,246,246,246,78,78,246,246,58,246,78,246,78, +78,78,212,246,246,246,78,78,212,246,246,246,58,246,246,78,246,246,78,58, +218,99,71,12,12,92,92,82,223,49,223,118,112,22,208,72,72,208,65,22, +22,112,11,112,112,112,112,112,118,118,118,112,112,112,30,244,244,30,237,65, +236,72,55,55,243,243,208,208,237,237,11,71,11,11,71,11,99,58,246,246, +246,78,78,246,58,246,78,246,58,246,58,246,58,246,246,78,78,78,212,78, +212,246,212,78,246,246,58,78,78,246,99,246,246,58,246,58,78,78,78,58, +78,78,78,78,78,78,58,58,58,99,58,58,78,99,58,58,58,218,99,99, +58,58,99,58,99,58,58,99,99,8,58,58,99,58,99,218,99,58,99,99, +99,58,99,58,99,58,58,58,58,78,58,58,58,58,58,58,58,78,212,78, +78,58,246,78,58,246,246,246,246,246,246,246,78,58,246,78,246,58,246,58, +246,78,78,78,58,246,212,78,78,78,58,246,78,212,246,58,78,212,58,99, +218,71,12,92,19,223,49,49,118,62,30,22,208,208,103,30,244,112,244,118, +112,23,49,49,49,49,49,49,49,49,82,82,223,82,49,118,23,118,118,112, +11,30,237,22,65,245,55,243,245,245,103,237,237,11,71,11,71,71,218,58, +246,246,78,246,78,212,78,246,246,78,246,246,78,78,212,78,212,78,246,78, +78,58,246,78,58,246,78,212,78,246,78,78,78,78,78,212,246,246,246,78, +58,78,78,78,58,78,78,58,58,58,58,58,99,58,58,58,58,58,99,58, +58,58,58,58,58,99,99,58,58,8,99,99,58,58,58,99,99,99,99,58, +58,99,78,58,78,99,58,58,99,78,78,78,58,78,58,58,78,246,78,212, +78,78,58,78,246,246,246,246,246,246,58,78,78,246,58,246,78,246,78,246, +78,212,78,212,212,246,78,78,246,246,78,212,58,99,212,246,246,58,99,218, +118,12,92,223,223,49,49,11,237,208,208,103,244,23,118,112,118,112,49,49, +19,82,82,82,223,49,66,49,49,82,223,223,101,19,223,82,223,82,223,82, +82,49,23,112,11,244,30,65,72,55,55,245,208,22,237,112,11,118,71,218, +218,58,58,78,246,78,212,78,78,212,99,78,212,246,78,246,78,246,78,212, +246,246,78,246,246,78,246,78,246,58,246,78,58,78,246,246,246,246,212,246, +78,78,78,78,78,58,78,78,99,58,78,78,78,99,58,58,99,58,99,99, +58,99,99,99,99,58,99,58,99,8,99,99,99,58,58,99,58,58,99,58, +58,58,78,78,58,58,58,58,58,58,78,78,78,78,78,58,246,246,246,246, +246,78,78,212,246,246,246,246,246,246,78,212,78,246,78,212,78,246,58,246, +78,246,78,58,58,212,246,58,78,246,246,58,58,58,58,246,58,218,71,12, +223,223,49,49,49,30,65,72,72,30,112,118,118,112,118,49,223,223,223,49, +244,244,244,244,23,23,23,23,70,66,49,70,49,70,70,118,23,23,23,23, +49,223,19,82,223,223,23,11,244,237,208,72,55,55,208,103,30,11,11,49, +71,71,99,58,246,78,246,246,58,246,58,58,246,212,78,246,58,246,78,58, +58,212,78,78,212,78,212,78,78,78,212,78,78,78,246,212,246,246,246,212, +246,58,78,78,78,78,58,78,78,99,58,58,78,58,58,58,99,58,58,58, +58,58,58,58,99,58,99,58,99,8,99,58,58,218,58,58,58,99,58,58, +58,99,58,58,99,58,78,78,78,78,78,78,78,58,246,246,246,212,246,246, +212,246,78,246,246,246,246,246,212,246,246,78,246,58,212,246,78,78,78,246, +58,246,212,99,58,246,78,246,246,58,58,58,58,78,246,58,99,118,12,92, +223,223,223,11,22,72,208,244,49,112,112,118,49,82,223,49,244,244,242,62, +23,62,23,23,244,244,244,244,244,244,62,30,244,244,244,244,23,112,210,23, +62,244,244,23,223,82,53,82,49,112,30,30,65,72,55,245,208,237,30,112, +71,49,118,71,99,78,78,78,246,246,58,99,58,246,212,78,246,58,246,212, +99,58,212,246,78,246,78,246,212,246,78,246,246,212,246,246,246,212,246,246, +246,246,78,78,246,246,78,78,78,78,58,58,78,58,58,58,58,58,99,99, +99,78,99,58,99,99,58,99,58,8,58,99,58,99,99,58,58,99,58,58, +58,58,58,58,78,58,78,78,58,78,58,246,78,78,78,212,246,246,212,246, +246,246,246,246,246,246,246,246,246,246,246,58,246,58,99,212,246,212,78,78, +78,99,58,58,78,246,58,78,246,58,58,58,58,212,58,218,71,12,49,49, +49,112,22,72,65,112,49,112,112,112,223,19,118,62,244,62,62,23,23,244, +244,244,244,112,23,49,49,223,19,223,82,223,223,49,223,23,118,112,244,30, +62,62,62,62,23,62,23,223,82,8,82,71,30,244,22,72,55,245,103,237, +11,71,12,12,71,99,78,78,78,58,212,58,58,58,58,212,78,58,246,78, +58,58,58,212,78,246,58,78,78,212,212,246,246,246,212,246,246,246,246,246, +246,246,58,78,78,58,246,212,78,78,58,78,58,78,78,78,58,78,58,58, +218,58,58,99,58,99,99,99,58,8,218,99,58,58,58,99,58,58,99,78, +78,58,99,58,58,78,58,78,246,78,78,58,78,212,246,246,246,246,246,246, +246,246,246,212,246,212,246,246,246,212,78,246,58,58,58,246,78,78,212,246, +58,58,58,58,212,78,246,212,58,58,58,58,58,58,71,12,49,223,223,49, +30,208,72,30,49,49,112,49,223,223,23,22,244,62,23,23,62,22,112,118, +49,49,223,118,23,244,30,242,22,242,242,62,242,244,244,112,23,49,49,223, +23,112,30,244,62,112,210,23,23,49,82,8,223,244,237,30,208,55,243,245, +22,30,71,118,12,71,99,78,78,246,212,58,58,58,58,246,246,246,78,246, +58,58,58,78,212,78,246,246,246,58,58,212,246,246,246,246,246,246,246,246, +246,78,246,58,246,246,246,78,212,78,78,78,58,78,58,78,58,58,99,58, +58,58,99,58,58,58,58,58,58,8,58,99,58,58,58,58,99,58,78,78, +58,58,78,58,58,78,78,58,78,78,78,78,78,246,212,246,246,246,246,246, +246,246,246,246,246,246,212,246,246,246,78,58,58,58,58,246,78,78,246,99, +212,58,212,58,212,78,78,58,58,218,58,212,58,99,71,49,223,49,49,30, +55,72,112,49,244,11,49,82,112,242,242,62,23,62,244,112,118,223,82,118, +30,236,29,225,231,33,248,42,42,42,219,2,42,219,110,107,231,29,65,244, +112,223,223,49,112,30,30,23,23,23,23,49,82,101,49,30,30,242,72,243, +208,103,30,71,118,12,71,99,78,78,78,58,58,58,58,58,78,58,246,78, +58,58,99,58,246,58,246,58,246,58,99,58,212,246,246,212,246,246,246,246, +246,246,246,246,212,246,246,246,246,78,58,78,78,78,78,78,58,78,78,78, +58,78,99,99,99,58,58,99,99,8,99,58,99,99,58,58,58,58,78,78, +78,78,58,58,58,78,78,78,78,78,246,246,58,246,246,246,246,246,246,246, +246,246,212,246,99,58,246,246,246,246,212,58,58,58,99,212,78,212,212,58, +78,58,58,58,246,246,78,58,71,218,58,58,11,71,118,223,49,23,103,243, +22,49,118,30,118,82,49,30,242,62,70,62,244,118,223,82,112,65,93,205, +217,42,80,147,98,4,26,8,8,8,8,121,8,8,26,4,98,210,111,219, +29,29,65,112,223,82,23,30,244,62,62,62,62,49,82,82,112,30,30,65, +243,245,103,30,71,118,12,71,218,212,246,58,58,212,212,58,58,246,212,78, +58,58,212,58,58,246,78,246,58,58,58,58,246,212,246,246,246,246,246,246, +246,212,246,246,246,246,212,246,246,212,78,246,212,78,58,78,78,78,58,78, +78,78,58,58,58,58,99,58,58,8,58,58,58,58,58,58,58,58,237,78, +58,78,78,58,78,78,212,78,246,78,78,246,246,246,246,246,246,246,246,246, +246,246,246,58,58,58,246,246,246,246,58,58,99,58,58,246,246,78,99,78, +246,78,58,58,58,58,58,218,12,99,58,99,71,92,49,223,118,22,41,65, +223,23,30,118,19,23,22,242,23,23,30,112,223,19,112,29,222,232,87,80, +98,26,121,8,20,253,20,20,20,20,101,20,20,20,253,253,20,8,121,26, +4,14,2,231,29,30,49,82,112,30,244,62,23,210,118,82,101,223,30,244, +65,55,243,103,237,71,118,71,71,99,58,58,58,58,218,58,58,58,246,212, +58,58,212,78,99,58,246,246,78,58,58,58,58,246,246,246,246,246,246,246, +246,246,246,212,246,246,246,246,246,246,246,78,78,78,78,78,58,78,58,78, +78,58,58,58,78,99,58,58,99,8,99,58,58,99,99,58,58,58,58,237, +78,78,58,78,78,246,78,246,78,246,78,246,246,246,246,246,246,246,246,246, +246,246,58,58,58,58,246,246,246,58,99,78,246,212,99,246,212,58,78,246, +58,246,58,58,58,212,218,12,118,58,58,71,12,49,19,49,237,41,65,49, +118,112,223,82,244,236,62,66,62,30,82,8,112,93,68,6,137,88,162,253, +253,20,253,19,223,23,244,244,54,242,54,242,244,62,112,49,223,20,20,20, +20,253,26,98,14,33,29,244,82,101,112,22,62,62,62,23,49,53,82,30, +112,22,243,243,208,11,71,118,12,218,99,58,58,58,12,71,58,58,58,58, +99,58,58,246,246,58,58,246,246,58,58,58,99,58,246,246,246,246,78,58, +246,212,246,246,246,246,246,212,246,246,78,78,78,78,58,78,78,78,78,58, +78,58,78,237,78,58,99,99,78,8,58,99,58,58,78,78,78,78,78,78, +58,78,78,58,78,246,78,212,246,246,246,246,246,246,246,246,246,103,246,246, +246,246,58,58,58,99,212,246,246,58,212,78,246,58,58,58,58,58,212,78, +78,78,58,58,58,58,123,49,218,99,11,118,223,223,82,237,41,208,23,118, +237,223,82,244,18,210,23,23,112,19,223,103,64,6,148,147,26,253,20,8, +66,23,54,111,219,219,137,24,76,24,163,25,137,42,204,42,151,109,244,223, +20,20,20,20,8,4,111,231,236,23,82,12,237,62,62,23,62,223,253,223, +237,244,22,41,245,103,11,112,118,71,218,58,58,99,92,92,128,58,58,58, +58,58,58,212,78,58,58,212,58,58,58,78,78,58,212,246,246,246,58,58, +212,246,212,246,246,246,246,246,246,212,246,78,246,246,78,78,78,78,78,58, +78,58,58,78,99,58,58,58,99,8,99,58,58,58,58,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,246,246,246,246,103,246,246,246,246,246, +246,78,58,58,58,58,58,212,58,58,78,212,78,78,99,58,58,212,78,246, +212,212,58,58,58,218,92,12,218,99,71,12,223,82,118,243,55,23,223,30, +223,19,244,93,54,49,23,112,82,82,245,153,138,234,162,8,253,101,49,30, +111,125,24,201,142,16,159,142,43,95,197,156,193,193,51,141,224,25,248,231, +65,118,20,20,20,20,121,210,231,55,244,82,49,30,244,62,62,244,223,20, +118,237,112,208,243,245,237,71,118,49,71,58,58,218,92,92,12,58,58,99, +58,58,212,78,212,212,58,58,58,58,58,212,78,58,58,246,246,246,99,58, +99,246,246,246,246,246,246,246,246,246,212,246,58,78,78,78,78,78,58,78, +78,58,78,78,58,78,58,99,58,8,99,99,58,58,58,78,78,58,78,58, +78,78,78,246,78,78,78,246,246,246,246,246,246,246,246,103,246,246,246,246, +246,58,58,58,58,58,58,58,58,58,78,78,246,78,58,58,58,212,78,58, +58,78,58,58,58,12,92,12,99,218,118,19,82,223,22,116,237,49,112,112, +101,112,93,109,70,112,118,82,223,55,136,185,44,26,253,253,82,62,107,163, +117,16,114,159,161,106,98,46,26,26,26,26,26,4,32,81,44,142,43,234, +10,56,236,23,20,20,20,8,4,219,225,237,19,82,11,244,62,54,62,223, +20,112,30,244,72,239,103,237,71,12,12,71,58,71,92,92,12,128,58,58, +58,58,246,78,246,58,58,58,99,58,58,246,78,78,58,246,246,58,58,58, +58,212,246,212,246,246,246,246,246,246,78,78,246,58,246,58,78,246,78,58, +78,58,78,78,58,58,58,58,58,8,58,58,58,58,78,237,58,78,78,78, +78,78,78,58,246,246,212,246,246,246,246,246,246,246,246,246,246,246,246,246, +78,58,58,58,58,58,99,58,58,246,246,246,58,246,58,58,58,78,246,218, +11,58,58,58,58,12,92,71,218,11,49,223,101,23,239,93,23,118,244,223, +223,65,29,70,70,112,82,82,72,233,135,152,121,253,20,49,242,179,176,39, +198,156,32,47,26,26,69,113,26,47,9,47,162,113,26,121,113,252,152,159, +43,234,217,238,30,253,20,251,8,4,107,17,30,82,223,22,62,62,54,244, +82,19,237,112,244,41,245,30,112,71,92,71,99,71,12,92,92,71,78,58, +58,246,246,58,78,212,58,58,58,58,58,78,246,58,99,58,212,58,58,58, +58,78,246,246,246,246,246,246,246,246,246,246,78,78,78,78,246,58,78,78, +58,58,58,99,58,99,58,58,58,8,58,99,99,58,58,78,78,58,78,58, +78,58,78,78,78,78,78,246,246,246,246,246,246,246,246,246,78,246,246,246, +58,58,78,58,78,58,58,99,58,78,58,246,246,58,58,58,212,58,58,12, +71,58,58,58,99,92,92,71,218,71,223,8,19,22,150,30,49,11,23,101, +30,93,54,49,112,49,20,30,254,181,95,26,253,253,49,65,163,166,206,202, +52,26,8,121,4,161,43,114,139,131,57,200,195,188,192,88,26,26,121,98, +197,67,234,145,230,22,82,20,20,8,98,107,100,112,253,112,103,244,54,62, +49,20,49,237,118,208,243,103,11,11,12,92,92,92,92,12,49,12,58,58, +78,58,246,78,246,78,212,99,58,58,78,246,58,78,58,58,58,99,58,58, +58,99,246,246,246,246,246,246,246,246,246,246,246,78,246,78,246,78,58,78, +78,58,78,78,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,78,78,78,78,246,246,246,246,246,246,246,246,246,246,246,58,212,58,246, +99,212,58,99,78,99,58,58,78,246,58,58,58,78,78,58,78,78,99,71, +12,71,58,58,12,12,12,71,11,12,223,101,49,243,100,118,223,112,82,19, +93,225,113,23,244,101,223,41,129,199,52,253,20,223,242,124,39,57,117,122, +121,121,47,44,195,35,94,196,165,189,189,189,27,84,200,139,67,186,26,121, +240,106,159,234,175,68,242,20,20,20,8,210,238,93,223,19,237,244,23,54, +62,19,101,244,112,30,243,208,237,11,12,92,49,223,12,12,92,12,58,78, +246,78,58,246,78,212,78,78,58,58,212,58,58,58,78,99,58,58,99,58, +58,58,246,246,246,246,246,246,246,246,246,246,78,246,58,78,58,78,78,78, +78,78,237,78,58,58,58,58,58,8,99,58,99,58,78,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,103,246,246,246,246,218,58,58,78,78, +58,99,71,12,58,78,58,78,58,78,123,12,78,78,58,212,78,78,123,92, +12,12,99,99,12,92,92,71,11,118,82,101,112,116,236,82,112,112,82,118, +100,110,66,23,49,101,244,215,73,43,69,253,101,23,219,59,97,202,52,8, +8,4,120,97,187,139,27,143,46,113,26,26,46,88,60,27,131,200,192,47, +82,66,81,159,234,170,68,118,20,251,20,26,2,64,244,101,118,22,23,62, +62,49,20,118,244,23,208,245,30,11,71,12,92,12,12,49,12,12,71,58, +246,246,78,246,78,246,58,78,58,78,212,218,12,246,78,99,58,78,78,11, +12,58,58,246,246,103,246,246,58,246,246,246,246,78,246,78,78,78,58,78, +78,58,58,58,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,212,78,246,246,78,99,58,246,246,246,246,246,246,71,12,99,58,58,99, +58,58,53,251,71,78,78,78,78,246,19,19,71,246,246,78,212,246,12,92, +12,12,12,12,92,12,12,71,218,118,19,101,244,239,65,223,244,11,53,112, +222,235,66,112,223,20,72,45,90,221,8,253,19,242,214,97,57,152,26,8, +26,188,57,187,139,186,8,8,8,8,121,121,8,8,26,4,44,131,94,67, +162,82,113,44,159,76,220,29,82,0,20,8,98,238,245,82,82,237,23,62, +54,112,20,223,237,49,22,245,237,11,71,49,12,92,12,12,12,12,71,78, +246,58,246,58,246,78,246,58,246,212,58,19,101,218,78,78,99,58,58,53, +101,71,58,246,246,246,78,71,92,58,246,246,212,246,78,58,58,78,78,58, +78,78,78,78,58,58,58,58,58,8,99,99,58,99,58,78,78,58,99,58, +78,78,58,246,78,58,71,92,218,246,246,246,103,246,12,92,92,58,58,58, +58,218,63,53,19,246,246,78,78,212,53,92,92,212,246,78,78,58,92,218, +12,12,92,92,92,12,12,71,11,118,101,101,22,116,242,223,237,11,8,30, +17,62,70,112,8,53,72,172,134,143,8,20,223,109,102,57,97,81,121,82, +252,114,35,157,165,26,253,8,8,46,182,4,26,26,8,8,113,160,190,35, +186,66,121,106,117,152,232,68,49,79,20,8,26,42,17,223,53,22,112,244, +54,244,8,82,30,118,30,245,30,11,99,12,12,92,123,12,12,12,71,78, +246,78,246,78,58,246,246,58,246,58,12,53,53,12,78,78,78,99,12,63, +63,92,78,78,246,246,78,229,229,12,246,246,246,212,78,71,71,58,78,78, +58,78,78,58,58,58,212,58,58,8,99,58,58,58,58,78,78,58,99,218, +99,58,246,78,78,58,12,92,12,78,246,246,246,218,92,92,19,71,58,58, +58,12,38,92,53,71,246,58,246,218,108,92,92,218,246,212,78,58,12,218, +12,12,12,92,12,92,12,71,71,118,82,8,103,116,242,82,244,11,82,30, +222,210,223,23,8,101,55,172,183,186,8,253,223,110,102,157,97,161,8,8, +127,67,190,140,189,26,8,8,69,127,120,5,52,26,26,8,121,9,84,187, +43,113,82,98,142,152,89,119,244,20,0,253,121,219,64,23,101,30,30,23, +54,244,82,101,30,112,112,72,237,71,30,12,12,92,118,12,12,12,71,58, +246,246,58,246,58,212,78,246,58,246,108,63,53,19,78,78,78,58,53,101, +53,108,78,246,246,246,108,79,20,53,246,246,246,78,99,92,92,12,99,78, +78,58,58,218,218,218,99,58,58,8,99,99,58,58,58,99,99,218,71,11, +99,99,78,246,212,71,218,71,92,71,246,246,246,71,92,92,19,19,58,58, +58,92,53,92,92,108,58,246,246,71,92,92,92,92,212,246,246,58,123,48, +12,12,12,92,92,12,12,12,99,118,19,101,237,116,65,49,30,112,82,244, +222,235,26,118,82,101,65,136,183,7,8,8,82,242,21,157,57,192,69,8, +26,7,191,157,190,60,9,8,26,52,84,131,60,4,121,8,26,113,67,94, +142,113,82,98,43,152,10,119,244,251,0,253,121,111,64,23,101,244,22,49, +62,62,82,101,112,23,112,103,30,71,11,12,12,118,12,12,118,12,71,78, +78,246,78,58,218,58,78,246,246,12,53,101,53,19,58,78,58,12,63,63, +53,63,218,246,246,71,79,20,63,101,218,246,246,218,12,19,108,12,99,58, +99,71,218,71,71,218,71,218,71,8,99,58,99,99,58,58,11,218,71,218, +71,71,218,58,58,99,218,99,71,92,218,78,246,92,92,12,223,53,71,58, +58,19,19,92,92,19,12,78,78,12,92,92,92,92,71,78,78,218,123,241, +48,12,12,92,49,12,118,12,71,49,223,101,11,116,65,66,112,11,82,112, +100,54,66,66,223,20,244,105,90,159,8,8,8,244,10,167,187,202,98,8, +121,47,192,169,190,35,195,188,188,195,57,84,106,47,8,8,8,122,195,140, +95,66,82,98,142,221,175,119,244,251,251,20,8,219,64,112,101,30,242,118, +23,62,19,20,11,118,112,22,11,11,99,12,12,12,12,71,12,118,71,58, +246,58,246,99,12,99,212,78,58,19,53,53,101,53,58,78,218,53,101,53, +53,63,218,246,246,63,0,101,19,53,12,78,58,12,108,92,19,108,92,71, +71,12,71,71,123,71,71,123,71,8,99,99,58,58,58,11,58,11,99,218, +99,11,99,99,218,99,218,99,71,12,12,99,99,92,92,92,12,19,53,71, +99,38,53,12,12,92,19,218,212,92,92,92,48,12,108,128,246,218,123,48, +128,123,12,12,12,12,12,118,71,71,223,8,112,41,55,49,49,244,223,49, +93,231,70,82,223,20,82,116,181,158,252,8,20,223,242,214,57,157,156,46, +8,66,26,147,44,198,86,196,86,198,44,52,4,8,8,8,46,60,97,194, +52,82,82,180,159,177,232,64,66,79,20,8,26,231,100,49,8,237,62,23, +62,244,82,82,30,223,11,237,112,11,11,12,12,71,12,12,118,12,71,218, +246,78,58,218,92,99,246,212,92,53,79,79,53,53,218,58,19,63,38,126, +53,101,92,58,19,251,63,223,19,19,92,71,12,223,92,223,223,92,19,92, +12,71,123,71,71,71,71,71,71,8,11,58,11,58,99,58,99,58,99,58, +58,218,218,218,99,218,11,99,99,71,92,92,12,49,92,71,99,12,53,53, +92,20,53,123,48,12,92,19,218,19,92,12,241,48,92,92,58,218,92,241, +128,212,71,12,118,12,12,71,71,112,223,19,82,55,116,112,49,244,223,19, +208,238,235,66,223,253,82,22,250,73,95,113,8,82,49,111,102,207,132,188, +252,69,8,121,162,4,47,52,127,4,4,26,26,8,8,46,186,86,169,95, +66,8,4,95,192,87,45,236,101,251,253,8,70,222,236,223,223,237,244,23, +54,244,82,82,237,118,11,244,71,11,99,71,118,12,12,12,12,12,12,58, +78,78,246,123,108,12,212,12,53,63,13,83,63,53,12,92,53,226,13,13, +53,53,53,226,75,63,12,71,92,19,19,92,92,92,19,12,12,12,92,12, +71,71,71,71,71,12,71,71,71,8,99,99,58,99,99,58,58,99,58,58, +11,218,71,71,11,218,99,99,58,218,12,19,92,92,92,99,78,58,92,101, +75,251,53,12,123,48,92,108,101,63,92,12,241,241,92,92,108,92,108,128, +212,246,58,12,12,12,49,12,12,118,12,49,19,237,116,22,49,118,244,82, +112,17,231,70,223,82,20,82,93,45,133,7,46,8,8,49,50,224,168,207, +142,60,127,46,8,26,8,8,8,8,8,8,121,26,47,192,166,169,7,113, +66,113,7,156,36,217,28,23,251,251,20,26,111,222,30,8,49,22,112,62, +242,112,101,112,30,49,244,11,112,11,99,71,12,12,118,12,12,12,71,246, +246,78,212,92,108,92,218,53,38,13,0,0,63,101,20,63,101,75,83,83, +63,101,229,79,126,92,58,78,12,19,92,92,19,92,12,71,71,118,71,71, +218,12,71,71,71,71,71,218,99,8,218,99,218,58,58,218,99,99,58,99, +58,58,99,99,218,99,218,99,58,58,99,92,92,92,19,58,78,78,99,108, +0,34,38,123,123,48,123,92,53,108,92,12,241,241,241,123,92,19,19,123, +241,212,246,99,12,71,12,71,12,71,118,223,82,118,245,100,112,49,30,118, +223,237,238,111,113,223,19,20,49,93,144,184,44,113,8,253,19,210,173,141, +168,57,196,142,60,52,122,182,113,113,122,3,60,159,130,86,43,122,26,223, +47,106,95,76,89,68,244,20,251,20,8,210,238,72,223,19,30,112,23,62, +244,223,20,118,112,112,244,118,11,99,99,218,71,218,71,12,12,71,58,58, +78,246,246,92,63,53,53,101,83,0,83,83,53,63,63,53,20,83,0,0, +53,53,79,0,226,78,58,78,12,108,92,19,92,71,58,58,99,71,71,123, +71,218,218,71,218,218,99,218,99,8,99,99,218,218,99,99,99,99,58,99, +99,58,99,11,71,99,99,58,58,58,58,71,92,92,19,78,78,58,78,218, +53,63,101,123,123,48,48,123,92,19,92,92,241,241,241,241,92,92,92,12, +241,212,78,78,123,118,12,12,12,12,112,92,49,223,30,247,65,49,23,112, +82,23,72,231,14,26,82,19,101,49,17,146,102,154,147,69,8,82,49,23, +249,104,158,39,206,169,86,130,202,142,202,114,39,117,76,88,4,66,66,113, +7,95,234,175,68,22,101,20,251,8,4,107,100,112,101,112,30,23,112,62, +49,101,49,244,118,112,112,118,11,78,99,99,99,58,71,12,92,99,246,78, +246,58,218,108,108,53,63,229,0,83,34,13,53,53,101,38,13,0,0,13, +53,101,63,101,99,78,58,78,71,19,19,92,71,58,99,58,11,218,218,71, +99,99,99,99,218,58,99,218,218,8,71,218,99,99,218,58,99,99,99,99, +99,58,99,58,99,218,11,58,58,99,58,58,71,92,92,58,78,78,78,78, +118,19,53,123,48,128,128,48,123,12,92,92,48,128,212,48,241,12,12,92, +241,128,246,246,246,71,12,12,12,71,71,118,49,223,49,208,116,22,49,23, +11,223,223,72,225,235,113,82,82,101,49,65,68,164,201,7,162,26,8,121, +66,223,23,216,14,36,177,152,154,152,80,255,98,66,66,223,66,4,32,152, +152,163,228,222,112,251,20,20,8,113,219,222,22,82,23,22,62,112,54,244, +101,82,112,112,23,118,112,11,11,78,58,58,246,99,71,71,99,58,246,212, +58,58,123,108,108,53,20,13,101,19,34,13,53,53,53,0,75,38,0,34, +63,53,53,71,58,78,58,78,11,92,92,71,58,58,58,58,99,218,11,99, +11,58,218,218,99,99,218,99,99,8,99,71,99,99,99,99,99,218,58,99, +218,58,99,99,99,58,58,78,58,99,58,58,58,71,12,78,78,78,78,78, +58,12,19,12,48,218,246,218,48,12,92,92,241,48,58,212,48,241,12,92, +48,241,212,58,212,212,123,118,12,71,118,118,12,223,49,118,55,239,244,223, +112,112,82,118,236,225,14,4,26,82,101,19,112,93,153,21,224,174,88,162, +26,26,121,82,66,66,66,66,66,66,26,82,66,26,113,127,32,44,51,87, +248,222,236,223,20,20,20,8,70,111,17,237,223,49,237,30,62,54,30,118, +253,49,112,118,23,118,118,11,99,58,58,58,212,99,71,218,246,78,78,58, +58,58,108,108,63,38,13,92,58,12,13,251,53,63,251,79,12,71,34,34, +251,53,19,58,78,78,78,58,58,71,71,58,99,99,58,99,58,11,58,99, +99,99,99,218,218,99,218,218,99,8,71,99,218,218,218,99,218,99,99,99, +99,71,58,99,99,99,99,58,58,99,58,58,78,58,99,78,58,78,58,78, +78,78,99,218,128,58,58,78,128,48,12,92,123,241,78,246,58,48,241,218, +12,128,212,212,58,58,212,218,71,12,71,12,118,12,223,49,11,243,55,244, +49,112,244,223,49,236,17,111,4,121,82,82,8,223,244,29,153,61,148,234, +152,32,147,52,4,4,113,26,113,26,98,98,147,255,7,193,24,163,217,238, +110,112,101,20,20,253,8,70,107,222,22,223,223,244,244,244,244,242,112,82, +223,118,23,23,49,118,71,11,58,58,58,246,246,58,99,78,58,212,212,78, +58,99,53,53,38,83,19,58,246,19,34,79,251,34,34,71,58,71,79,13, +83,63,218,58,58,99,58,78,58,99,78,58,99,99,99,58,58,99,99,58, +218,11,218,99,11,218,11,99,71,8,71,218,218,11,71,99,218,99,99,99, +99,218,11,99,58,58,58,58,11,58,99,218,58,58,78,78,78,78,58,58, +78,78,78,78,58,78,78,78,58,58,48,123,48,48,128,78,246,78,128,241, +241,241,128,212,58,58,58,58,218,12,118,71,71,112,118,223,49,11,245,55, +30,49,112,244,223,19,30,93,107,111,4,26,101,101,8,101,112,242,93,203, +6,170,21,74,51,51,104,24,234,76,24,104,76,124,232,56,225,18,30,223, +20,20,20,20,8,66,235,231,236,112,223,118,30,112,112,54,244,112,82,49, +112,23,118,118,12,11,99,99,246,58,58,58,78,58,246,246,78,78,212,78, +58,12,53,229,34,40,78,78,58,38,0,13,13,79,71,58,58,71,13,0, +38,71,58,99,58,99,58,99,78,58,58,99,99,99,71,99,58,99,218,99, +71,99,218,99,99,71,218,99,71,8,71,71,71,123,218,218,11,218,218,218, +218,99,218,218,99,99,99,99,58,99,99,99,99,99,58,78,78,58,58,99, +99,78,78,246,78,212,78,78,58,78,128,48,48,241,48,246,78,58,246,128, +128,128,128,128,212,78,212,78,58,218,71,71,12,12,118,118,49,49,112,208, +41,22,49,112,244,23,19,49,22,93,219,14,4,8,82,101,20,101,223,49, +30,65,18,29,17,203,228,230,56,96,91,225,225,236,242,112,49,82,20,20, +20,20,82,113,210,107,29,22,118,223,112,30,244,244,62,112,23,82,223,49, +118,118,49,49,118,71,99,246,58,58,212,246,246,78,212,58,246,246,78,58, +218,53,209,126,40,78,78,78,218,0,34,34,79,71,78,99,58,71,251,229, +12,58,99,99,99,58,58,58,58,99,99,99,99,218,99,58,99,99,99,218, +99,218,11,218,218,11,218,71,71,8,71,123,71,71,218,123,71,99,11,99, +218,11,99,71,218,99,58,99,99,58,218,218,99,99,58,58,58,58,99,58, +58,99,58,246,246,246,78,58,58,58,78,58,48,48,241,78,246,78,78,58, +58,241,241,241,212,58,246,78,246,58,218,71,71,71,118,118,118,49,49,112, +103,243,236,112,49,244,112,49,223,118,65,93,107,14,98,113,82,8,101,253, +101,20,101,82,82,223,118,118,49,49,49,82,82,101,101,20,20,253,253,121, +26,70,235,110,29,103,118,223,223,11,244,244,54,242,244,49,19,223,49,118, +118,49,12,71,11,99,212,246,78,78,78,78,212,246,78,58,78,212,78,58, +12,38,213,71,78,58,58,78,40,83,79,20,99,58,99,58,99,12,92,71, +78,58,99,99,99,99,99,99,99,99,218,218,99,218,218,99,218,218,11,218, +11,218,218,71,218,218,71,123,71,8,71,71,12,71,71,218,218,218,71,71, +218,218,218,218,71,218,218,99,99,218,99,99,99,99,99,99,58,99,58,99, +99,99,99,58,78,78,78,78,58,99,58,58,58,128,48,128,78,78,58,78, +212,212,212,241,128,58,246,246,58,246,58,218,218,118,71,71,118,12,118,49, +23,237,245,55,208,23,118,23,112,223,223,118,244,236,18,110,14,210,4,66, +121,8,82,20,82,101,101,251,20,20,20,101,8,20,8,8,26,26,210,235, +109,110,65,30,118,223,49,244,244,244,244,242,65,30,223,82,49,118,118,49, +92,49,118,71,11,78,246,78,58,246,212,246,78,78,246,78,246,78,212,218, +53,92,99,78,58,58,58,246,53,0,53,99,99,58,99,58,99,71,218,58, +99,58,99,218,58,99,58,78,99,99,11,99,71,99,99,218,99,99,218,71, +123,218,71,218,12,71,71,71,71,8,71,71,71,71,71,118,71,71,218,99, +71,71,71,123,71,71,218,99,99,218,218,71,11,218,99,99,58,99,58,99, +99,99,218,58,58,78,78,78,58,99,99,58,58,58,58,128,246,78,58,58, +58,58,246,128,128,58,212,246,78,78,78,58,58,218,71,71,11,118,118,49, +12,23,11,103,243,72,237,23,23,112,23,223,19,223,112,22,109,18,29,111, +111,210,210,70,4,26,26,26,26,26,26,4,4,70,98,235,2,18,29,65, +54,23,223,49,23,244,244,112,244,54,22,244,118,82,223,223,118,92,49,49, +223,71,11,99,99,78,246,58,246,78,58,212,78,78,58,58,246,78,58,218, +71,78,58,58,99,58,58,99,19,77,58,58,58,218,99,58,58,58,58,58, +218,99,11,218,58,99,218,58,218,218,71,218,218,71,99,71,218,71,71,218, +71,123,71,71,71,71,71,71,12,8,118,118,71,71,118,71,71,71,118,12, +71,123,71,71,71,71,71,71,218,99,99,99,218,218,71,218,99,99,58,99, +99,218,99,218,58,58,246,78,78,99,99,99,99,58,246,78,58,246,58,58, +58,58,58,78,78,58,58,58,246,212,99,58,58,58,218,99,71,118,11,118, +49,49,49,23,11,208,55,245,22,112,23,23,23,23,49,49,49,223,112,30, +22,236,18,18,18,29,18,18,18,18,107,236,29,236,236,22,30,23,223,223, +223,118,118,112,244,112,244,242,242,30,23,223,82,223,49,49,49,223,49,12, +71,71,99,58,246,212,58,58,58,78,78,78,58,58,58,58,78,212,246,78, +78,58,58,11,99,58,78,78,99,58,58,99,218,99,58,99,58,58,58,218, +99,71,218,99,218,58,99,218,218,71,218,123,71,99,71,218,71,71,71,12, +71,71,12,12,12,12,12,12,12,8,12,12,12,12,12,12,118,118,71,71, +71,218,71,123,71,71,71,71,123,71,218,11,218,71,218,123,218,99,218,58, +99,99,11,218,71,99,99,58,78,58,99,99,71,99,58,78,246,246,246,58, +58,218,58,99,78,78,246,78,78,246,58,58,58,212,58,58,99,71,71,118, +71,118,118,23,49,112,112,103,72,72,65,244,112,23,118,118,70,223,223,223, +223,49,118,23,118,112,112,244,112,112,23,23,23,49,49,223,223,49,23,118, +244,244,112,62,244,109,22,30,49,223,223,82,49,223,49,223,223,118,118,71, +99,99,99,78,78,246,58,58,78,78,58,58,58,99,78,246,78,78,78,78, +99,99,99,58,99,58,78,78,58,99,99,11,218,99,99,58,58,11,99,218, +218,218,71,99,218,218,11,218,123,71,218,71,71,218,71,71,123,71,118,12, +71,12,12,12,12,12,12,12,12,8,12,12,12,12,12,12,71,71,71,118, +71,118,71,71,118,12,71,71,71,71,99,218,123,71,218,71,218,71,99,99, +99,218,218,71,218,218,99,58,58,58,58,218,99,218,218,99,58,99,78,58, +58,99,99,99,58,58,78,246,246,78,78,78,58,99,58,58,99,58,99,71, +11,71,12,23,118,118,118,23,112,30,103,208,208,65,242,112,118,23,23,118, +118,118,49,112,23,112,11,112,112,112,118,49,49,49,49,112,23,23,112,244, +244,22,22,22,242,112,49,223,223,66,223,49,223,49,223,49,12,71,71,99, +99,58,212,212,246,58,78,78,58,58,99,99,99,58,78,78,78,78,58,58, +99,99,99,58,58,58,58,58,99,218,71,218,99,99,218,58,99,99,71,218, +71,71,218,99,71,99,123,71,118,118,123,71,71,123,71,71,12,12,118,12, +12,12,12,12,12,12,71,12,71,8,12,92,12,92,71,12,118,118,12,12, +118,71,71,12,71,71,118,12,12,71,118,218,71,71,71,12,71,12,218,218, +99,99,218,218,71,71,71,218,99,99,99,99,71,71,218,71,99,58,58,58, +58,58,99,11,99,99,99,58,246,78,246,78,58,99,99,99,58,58,99,99, +99,11,71,112,112,118,118,92,118,23,118,112,30,237,103,65,65,22,30,54, +244,244,23,112,244,112,244,112,244,23,244,23,112,62,244,244,30,242,22,242, +22,30,23,49,49,19,82,223,223,49,49,49,223,49,12,11,11,218,99,58, +58,78,78,78,246,78,78,99,99,58,99,58,58,78,78,78,58,99,218,218, +71,99,99,99,58,99,58,99,71,123,71,218,99,99,218,99,218,71,12,71, +71,218,71,71,218,71,71,71,71,71,12,71,71,71,118,12,12,12,71,71, +12,12,12,12,118,12,12,92,12,8,12,12,71,12,12,12,12,12,71,12, +118,12,12,12,118,12,71,12,12,71,71,71,71,123,71,12,12,71,71,218, +218,218,11,71,123,71,71,218,71,99,99,58,99,99,71,218,218,99,218,58, +58,58,58,99,218,71,99,218,58,58,58,246,212,58,58,99,99,58,99,58, +58,58,58,218,71,71,112,71,118,118,49,23,118,118,49,112,112,30,237,22, +22,22,103,22,22,22,22,22,30,242,22,22,22,103,22,22,30,112,112,23, +49,49,49,82,223,66,49,49,49,49,223,12,118,71,218,99,99,58,99,58, +78,246,78,246,58,58,99,99,218,218,99,99,99,58,58,58,99,218,71,218, +99,99,58,58,58,99,218,123,71,71,218,218,99,99,99,123,71,71,71,92, +71,71,218,218,71,12,12,12,118,71,12,118,71,71,71,12,12,12,12,12, +12,12,118,118,12,12,12,12,12,8,92,92,92,12,12,12,12,12,12,12, +92,12,12,12,71,12,118,12,12,12,12,12,71,71,71,12,12,71,118,71, +71,123,71,71,71,118,71,71,71,123,71,218,218,99,218,71,12,71,71,218, +218,58,58,99,58,71,71,218,218,218,99,58,58,58,58,58,99,99,99,218, +218,99,58,58,99,99,99,11,11,11,23,112,118,112,49,118,118,118,23,118, +49,118,23,112,112,112,112,244,112,112,118,112,118,49,49,223,49,223,223,49, +223,223,49,49,223,49,223,223,118,118,71,11,218,99,218,99,218,78,58,58, +58,58,58,218,218,218,218,218,58,99,58,58,58,58,218,99,71,71,123,71, +218,99,58,99,99,71,71,12,12,71,71,71,218,218,218,71,118,71,71,12, +123,71,12,71,71,12,12,12,118,71,12,12,12,118,118,12,71,118,12,118, +12,12,12,12,12,92,12,12,92,8,92,92,12,12,92,12,92,12,12,12, +12,12,118,12,12,12,12,12,12,12,118,12,12,71,118,71,12,12,71,118, +71,71,71,123,218,118,12,71,71,71,71,99,99,218,218,71,71,71,71,71, +99,218,99,58,99,218,218,71,71,71,218,71,58,99,58,58,99,58,218,99, +99,218,99,99,58,58,58,99,58,99,218,11,71,112,11,112,118,23,118,23, +49,118,118,92,49,92,49,92,49,92,49,223,223,49,223,49,49,49,49,82, +49,49,49,223,118,118,71,71,11,71,99,218,218,99,58,58,58,58,58,58, +58,218,218,218,71,218,218,99,99,99,99,58,218,218,71,123,71,71,218,11, +99,99,218,218,71,71,12,71,12,218,218,218,71,218,118,12,71,118,71,71, +71,71,71,71,118,71,12,12,12,71,12,12,12,12,12,12,12,49,12,12, +12,92,12,49,12,92,12,12,92,8,92,92,92,92,92,12,92,12,12,92, +12,92,12,92,12,71,71,12,12,12,12,71,12,118,71,118,71,118,12,12, +12,12,71,71,218,71,71,118,118,12,12,118,71,218,71,218,123,12,12,12, +12,71,71,99,99,99,218,71,71,71,71,123,71,218,218,58,99,99,58,218, +99,218,218,11,99,218,99,218,218,58,58,58,99,218,71,11,71,71,118,11, +112,71,112,118,112,12,118,118,118,118,118,118,118,118,118,118,223,223,49,49, +118,118,118,71,71,71,218,71,218,71,99,99,99,218,58,58,58,218,218,218, +218,71,71,218,123,71,218,99,58,218,218,99,71,118,12,71,71,71,218,218, +218,99,71,118,12,12,12,71,71,123,71,71,71,12,118,12,92,71,118,71, +12,12,71,12,12,92,12,12,12,118,12,12,12,12,12,92,12,12,12,92, +71,92,12,92,92,92,92,92,12,8,92,92,92,92,92,92,92,92,92,12, +92,12,92,12,92,92,12,118,92,12,12,92,92,12,12,12,12,12,12,12, +12,12,71,118,12,118,71,71,12,12,12,12,118,71,218,71,218,71,118,12, +12,71,12,71,218,71,99,218,123,71,71,12,71,118,71,71,99,218,218,99, +218,99,218,218,218,71,123,71,218,218,218,218,99,99,99,58,99,99,99,218, +99,71,71,71,11,71,11,11,11,11,11,11,11,11,71,118,12,118,218,218, +71,218,71,71,218,71,99,71,99,99,99,58,218,99,218,218,71,71,71,71, +71,71,123,71,11,99,99,99,218,218,71,71,12,12,12,71,123,218,71,218, +71,118,71,12,118,12,12,71,71,218,118,12,12,12,92,12,71,118,71,71, +12,71,92,12,92,12,12,12,118,12,12,92,92,12,92,12,92,92,92,92, +92,92,92,92,12,92,92,92,92,8,92,92,92,12,92,92,92,92,92,92, +92,92,92,12,92,92,12,12,92,92,92,12,92,92,12,12,118,12,12,92, +92,12,12,12,71,71,71,118,12,118,12,12,12,71,12,71,71,71,71,12, +12,12,118,12,12,118,218,71,71,71,12,71,71,71,12,12,71,71,71,11, +218,99,218,218,218,218,71,71,71,71,71,71,71,71,218,218,218,218,99,218, +218,218,99,218,99,218,218,218,218,218,218,218,218,99,218,11,218,71,71,71, +71,123,71,123,71,218,99,218,218,11,218,99,71,71,71,71,71,71,71,92, +71,71,71,123,71,218,71,71,71,118,12,12,12,12,71,71,71,218,71,71, +12,12,12,12,12,12,12,71,71,71,12,12,12,12,12,12,12,12,118,12, +12,92,92,92,12,92,12,71,12,92,92,12,92,92,92,92,92,12,92,92, +92,92,92,92,92,92,92,92,92,8,92,19,92,92,92,92,92,223,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,12,118,12,12, +12,92,92,12,92,12,12,12,71,12,49,12,92,92,12,12,71,12,12,12, +12,71,12,12,12,12,71,12,71,71,218,218,71,118,12,12,12,71,12,12, +71,123,71,71,99,71,71,123,71,123,71,123,71,71,71,71,71,71,71,71, +71,218,218,218,71,71,218,71,218,71,218,71,71,123,71,123,71,123,71,123, +218,71,218,218,218,218,71,71,71,71,71,12,12,12,12,12,12,12,71,71, +71,123,218,218,71,71,12,12,12,71,12,12,12,12,71,71,71,12,118,12, +12,92,12,12,12,12,12,12,71,12,92,12,92,12,12,118,12,12,12,92, +92,92,92,92,92,12,92,92,12,92,92,92,92,19,12,92,92,92,92,92, +12,92,92,92,92,92,92,92,92,8,19,108,19,108,12,19,92,92,92,92, +92,92,92,92,92,19,92,92,92,92,92,92,92,92,92,92,92,92,12,92, +92,92,92,92,92,92,12,12,12,12,71,12,92,92,92,92,12,92,118,12, +12,12,12,12,92,12,12,12,71,12,71,71,71,12,12,12,12,12,12,92, +112,118,71,12,71,71,71,218,71,71,71,71,71,71,12,12,12,12,12,12, +12,118,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, +71,71,71,71,71,71,71,71,118,71,12,71,12,12,12,12,12,71,71,123, +71,71,71,92,12,12,12,12,92,92,71,12,12,12,12,71,12,12,92,12, +92,92,12,118,12,12,118,12,12,92,92,92,92,12,12,12,12,92,92,92, +92,12,92,12,92,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,19,19,108,92,8,92,92,19,92,108,92,19,92,92,92, +92,108,92,92,92,12,92,92,12,92,92,92,92,92,92,92,92,92,92,12, +12,92,92,92,92,223,12,92,12,12,12,12,12,92,92,12,92,12,12,12, +12,12,12,12,49,12,92,92,92,92,12,12,71,12,12,12,12,12,12,12, +92,92,118,92,12,12,118,12,12,12,12,12,12,71,12,12,12,12,12,12, +12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, +12,12,118,118,12,118,12,12,12,12,12,12,12,12,12,12,12,12,71,12, +12,12,71,92,12,92,92,49,12,12,12,12,118,12,12,118,92,12,92,92, +12,12,12,12,123,12,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,92,92,19,92,92,108, +92,19,92,108,108,92,108,92,108,8,19,108,19,92,19,108,108,108,92,19, +92,92,19,92,108,108,92,108,108,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,12,12,12,12,12,12,92,92,92,92,92,92,12,12,12,12,12,118,12, +12,12,12,92,12,12,12,12,71,12,12,12,12,71,71,12,12,71,118,118, +12,12,12,12,12,118,12,12,12,92,12,12,12,12,12,71,12,12,118,12, +12,71,12,12,12,12,12,92,118,118,12,12,12,12,71,12,12,12,49,12, +92,12,92,92,92,12,92,12,12,12,12,12,92,92,92,92,92,92,92,92, +12,12,71,92,92,92,12,92,223,92,92,92,12,92,92,92,92,92,12,19, +92,92,92,92,92,92,108,92,108,19,92,108,108,108,92,92,19,108,92,108, +19,92,19,92,108,92,108,19,19,8,19,108,19,108,108,19,92,19,108,19, +19,108,108,19,19,92,108,92,92,108,19,12,108,108,92,19,108,108,92,19, +92,92,92,92,92,92,108,19,92,92,92,92,12,92,92,92,92,92,92,92, +92,92,92,12,12,118,123,92,12,12,92,92,92,92,92,92,12,12,12,12, +12,92,12,12,92,12,92,92,92,92,92,92,12,12,12,12,12,12,12,71, +71,12,12,12,12,12,12,12,71,12,12,12,12,12,12,92,12,12,92,12, +92,12,12,49,12,92,12,12,12,12,12,71,12,12,12,12,92,12,92,12, +92,92,92,92,92,12,12,12,12,92,12,12,92,92,92,92,92,92,12,12, +12,92,92,92,92,19,108,92,92,92,92,92,92,92,92,19,92,108,108,92, +92,92,92,19,108,92,19,108,92,108,108,92,19,92,108,19,108,92,108,92, +19,108,108,92,108,108,19,92,108,8,19,19,19,19,19,108,19,19,108,92, +19,19,108,92,19,19,108,19,108,92,108,19,92,19,92,92,92,19,92,92, +92,92,92,92,92,92,19,108,92,19,19,92,92,92,92,92,92,92,223,92, +223,92,92,92,92,92,92,92,92,92,92,92,92,223,92,92,92,12,92,12, +12,12,12,12,92,12,12,92,12,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,92,49,92,12,92,92,12,12,92,12,92,12,92,12,12,92,12, +12,12,12,12,12,12,12,92,92,92,12,92,92,92,92,92,92,92,92,92, +92,92,12,12,12,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,19,92,92,108,12,92,92,92,12,19,92,92,108,92,19,19,92, +92,92,92,92,108,19,92,19,19,92,92,108,108,92,108,92,19,19,19,108, +19,19,19,19,19,19,108,19,19,8,19,53,19,53,19,53,19,53,19,108, +19,108,19,108,108,108,19,108,19,108,19,108,108,108,108,19,108,19,108,19, +19,92,108,19,19,12,108,92,108,92,108,19,108,92,92,92,92,92,92,19, +92,19,108,92,19,92,92,92,92,92,92,92,92,92,92,92,108,108,19,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,92,92,92,12,92,19,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,108,19,92,92,223,92,92,92,92,92,92, +19,108,108,108,108,19,92,92,92,92,108,108,108,108,108,92,108,92,108,19, +92,19,108,108,19,108,108,108,108,108,19,19,19,19,19,19,108,108,53,19, +108,19,108,53,19,53,19,53,19,8,19,19,19,19,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,108,19,108,19, +19,19,19,19,108,19,108,19,108,19,108,19,19,19,19,108,19,92,92,92, +19,19,108,19,108,19,19,92,92,92,92,92,92,92,92,19,19,108,19,108, +19,92,19,92,92,92,92,92,92,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,19,19,19,92,19,19,92,19,19,108,92,92,92,19,92,92,92, +92,92,92,92,92,19,19,19,19,108,19,108,92,92,92,92,92,92,19,19, +92,19,223,19,108,19,108,92,19,19,19,19,19,19,108,19,108,19,108,19, +19,19,19,19,19,19,19,19,19,108,19,108,19,108,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,8}; diff --git a/plug-ins/stegano/stegano.c b/plug-ins/stegano/stegano.c new file mode 100644 index 0000000000..850d66ce1e --- /dev/null +++ b/plug-ins/stegano/stegano.c @@ -0,0 +1,1273 @@ +/********************************************************************** + * Stegano Plug-In (Version 1.00) + * Daniel Cotting (cotting@mygale.org) + ********************************************************************** + * Official homepages: http://www.mygale.org/~cotting + * http://cotting.citeweb.net + * http://village.cyberbrain.com/cotting + ********************************************************************** + */ + + +/* The GIMP -- an image manipulation program + * Copyright (C) 1995 Spencer Kimball and Peter Mattis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include +#include +#include +#include + +#include "libgimp/gimp.h" +#include "gtk/gtk.h" +#include "logo.h" + +#define ENTRY_WIDTH 200 + +typedef struct { + gint mode; + char filename[128]; + gint warningmessage; +} steganoValues; + +typedef struct { + gint run; +} steganoInterface; + + +/* Declare local functions. + */ +static void query(void); +static void run(char *name, int nparams, + GParam *param, + int *nreturn_vals, + GParam **return_vals); +static void drawstegano(GDrawable *drawable); +static void readstegano(GDrawable *drawable); +static gint stegano_dialog(void); +static gint stegano_save_dialog(void); +static gint stegano_warning_dialog(void); +static gint message_dialog(char *, char *, char *); +GtkWidget * stegano_logo_dialog(void); + + + + +GtkWidget *maindlg; +GtkWidget *globalentry; +GtkWidget *saveglobalentry; +GtkWidget *logodlg; +GtkWidget *warningdlg; +GtkWidget *messagedlg; +GtkWidget *savedlg; + +GtkTooltips *tips; +GdkColor tips_fg,tips_bg; +gchar filename[128]; +gint saverun; + static GParam values[1]; + GDrawable *drawable; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + + + +GPlugInInfo PLUG_IN_INFO = +{ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ +}; + +static steganoValues wvals = { + 1,"",1 +}; /* wvals */ + +static steganoInterface bint = +{ + FALSE /* run */ +}; + + +MAIN() + +static void +query(void) +{ + static GParamDef args[] = + { + { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, + { PARAM_IMAGE, "image", "Input image (unused)" }, + { PARAM_DRAWABLE, "drawable", "Input drawable" }, + { PARAM_INT8, "mode", "FALSE: Hide file in image; TRUE: Get hidden file" }, + { PARAM_STRING, "filename[128]", "Name of the file to hide in an image (only of importance if mode=FALSE" }, + }; + + static GParamDef *return_vals = NULL; + static int nargs = sizeof(args)/ sizeof(args[0]); + static int nreturn_vals = 0; + + gimp_install_procedure("plug_in_stegano", + "Hides a file in an image.", + "", + "Daniel Cotting (cotting@mygale.org, http://www.mygale.org/~cotting)", + "Daniel Cotting (cotting@mygale.org, http://www.mygale.org/~cotting)", + "December, 1997", + "/Filters/Image/Stegano", + "RGB*, GRAY*, INDEXED*", + PROC_PLUG_IN, + nargs, nreturn_vals, + args, return_vals); +} + +static void +run(char *name, + int nparams, + GParam *param, + int *nreturn_vals, + GParam **return_vals) +{ + gchar **argv; + gint argc; + + run_mode = param[0].data.d_int32; + + values[0].type = PARAM_STATUS; + values[0].data.d_status = status; + + *nreturn_vals = 1; + *return_vals = values; + + drawable = gimp_drawable_get(param[2].data.d_drawable); + + + switch(run_mode) { + case RUN_INTERACTIVE: + /* Possibly retrieve data */ + gimp_get_data("plug_in_stegano", &wvals); + /* Get information from the dialog */ + argc = 1; + argv = g_new(gchar *, 1); + argv[0] = g_strdup("apply_stegano"); + gtk_init(&argc, &argv); + gtk_rc_parse(gimp_gtkrc()); + + stegano_dialog(); + return; + + case RUN_NONINTERACTIVE: + /* Make sure all the arguments are present */ + if (nparams != 5) + status = STATUS_CALLING_ERROR; + if (status == STATUS_SUCCESS) + wvals.mode = param[3].data.d_int8; + strncpy (wvals.filename,param[4].data.d_string, 128); + wvals.filename[127]='\0'; + argc = 1; + argv = g_new(gchar *, 1); + argv[0] = g_strdup("apply_stegano"); + gtk_init(&argc, &argv); + gtk_rc_parse(gimp_gtkrc()); + tips = gtk_tooltips_new (); + gtk_tooltips_set_delay(tips, 2500); + + break; + case RUN_WITH_LAST_VALS: + /* Possibly retrieve data */ + argc = 1; + argv = g_new(gchar *, 1); + argv[0] = g_strdup("apply_stegano"); + gtk_init(&argc, &argv); + gtk_rc_parse(gimp_gtkrc()); + tips = gtk_tooltips_new (); + gtk_tooltips_set_delay(tips, 2500); + + gimp_get_data("plug_in_stegano", &wvals); + + break; + default: + break; + } + if (status == STATUS_SUCCESS) { + if (!wvals.mode) { + gimp_tile_cache_ntiles(2 *(drawable->width / gimp_tile_width() + 1)); +/* gimp_progress_init("Stegano plug-in is working. Please wait..."); */ + drawstegano(drawable); + if(run_mode != RUN_NONINTERACTIVE) + gimp_displays_flush(); + } else { + readstegano(drawable); + } + } + if(run_mode == RUN_INTERACTIVE) + gimp_set_data("plug_in_stegano", &wvals, sizeof(steganoValues)); + values[0].data.d_status = status; + gimp_drawable_detach(drawable); + +} + + +static void +set_tooltip (GtkTooltips *tooltips, GtkWidget *widget, const char *desc) +{ + if (desc && desc[0]) + gtk_tooltips_set_tips (tooltips, widget, (char *) desc); +} + + +static void +drawstegano(GDrawable *drawable) +{ + + FILE *In; + + GPixelRgn srcPR, destPR; + gint width, height; + gint bytes; + gint row; + gint x1, y1, x2, y2, ix, iy; + guchar *src, *dest; + gint i, col; + gint value; + long count=1,smallcount=0; + gfloat regionwidth, regionheight, dx, dy; + gfloat a, b, x, y; + glong pixelpos, pos; + guchar bgr_red, bgr_blue, bgr_green; + + char actualchar[1]; + gint made_it_once=FALSE; + glong backup; + gchar * point; + + typedef struct { + gchar identity[4]; + gchar filename[128]; + gdouble len; + } _header; + _header header; + + point=(char*) &header; + for (i=0;iid, &x1, &y1, &x2, &y2); + + + regionwidth = x2-x1; + a = regionwidth/2; + regionheight = y2-y1; + b = regionheight/2; + + width = drawable->width; + height = drawable->height; + bytes = drawable->bpp; + + gimp_pixel_rgn_init(&srcPR, drawable, 0, 0, width, height, FALSE, FALSE); + gimp_pixel_rgn_init(&destPR, drawable, 0, 0, width, height, TRUE, TRUE); + + src = g_malloc((x2-x1)*(y2-y1)*bytes); + dest = g_malloc((x2-x1)*(y2-y1)*bytes); + + gimp_pixel_rgn_get_rect(&srcPR, src, x1, y1, regionwidth, regionheight); + + backup = ftell(In); + fseek(In, 0, SEEK_END); + header.len = ftell(In)-backup; + fseek(In, backup, SEEK_SET); + + point = (char *) &header; + actualchar[0]=point[0]; + + for(col = 0; col < regionwidth; col++) { + dx = (gfloat)col - a; + for(row = 0; row < regionheight; row++) { + pixelpos = (col+row*regionwidth)*bytes; + dy = -((gfloat)row - b); + x = dx+a; + y = -dy+b; + ix=(int)x; + iy=(int)y; + pos = ((gint)(iy)*regionwidth + (gint)(ix)) * bytes; + for(i = 0; i < bytes; i++) { + smallcount++; + if (smallcount==9) { + if (count