splitting the dialogs and the events didn't make sense. Code merged with

2003-10-01  Maurits Rijk  <lpeek.mrijk@consunet.nl>

	* plug-ins/FractalExplorer/Events.[ch]: splitting the dialogs and the
	events didn't make sense. Code merged with Dialogs.[ch] and files
	removed.

	* plug-ins/FractalExplorer/Dialogs.[ch]
	* plug-ins/FractalExplorer/FractalExplorer.[ch]: major code clean-up.
	Still lots of work to do (remove several deprecated widgets, etc.)
This commit is contained in:
Maurits Rijk 2003-10-01 21:47:49 +00:00 committed by Maurits Rijk
parent 9042907762
commit 3a86448563
13 changed files with 429 additions and 1911 deletions

View File

@ -1,3 +1,23 @@
2003-10-01 Maurits Rijk <lpeek.mrijk@consunet.nl>
* plug-ins/FractalExplorer/Events.[ch]: splitting the dialogs and the
events didn't make sense. Code merged with Dialogs.[ch] and files
removed.
* plug-ins/FractalExplorer/Dialogs.[ch]
* plug-ins/FractalExplorer/FractalExplorer.[ch]: major code clean-up.
Still lots of work to do (remove several deprecated widgets, etc.)
2003-10-01 Maurits Rijk <lpeek.mrijk@consunet.nl>
* plug-ins/mosaic/mosaic_logo.h: removed (!) to make the plug-in more
consistent with other plug-ins.
* plug-ins/mosaic/Makefile.am
* plug-ins/mosaic/mosaic.c: changed accordingly + minor code clean-up.
Plug-in can now be moved to common directory since it's just a single
file.
2003-10-01 Sven Neumann <sven@gimp.org>
* libgimpwidgets/gimpwidgets.def: added new symbols.

View File

@ -15,33 +15,64 @@
#include "FractalExplorer.h"
#include "Dialogs.h"
#include "Events.h"
#include "logo.h"
#include "libgimp/stdplugins-intl.h"
static gdouble *gradient_samples = NULL;
static gchar *gradient_name = NULL;
static gboolean ready_now = FALSE;
static gchar *tpath = NULL;
static DialogElements *elements = NULL;
static GtkWidget *cmap_preview;
static GtkWidget *maindlg;
#if 0 //def G_OS_WIN32
# include <io.h>
# ifndef W_OK
# define W_OK 2
# endif
# ifndef S_ISDIR
# define S_ISDIR(m) ((m) & _S_IFDIR)
# endif
# ifndef S_ISREG
# define S_ISREG(m) ((m) & _S_IFREG)
# endif
#endif
static explorer_vals_t zooms[100];
static gint zoomindex = 1;
static gint zoommax = 1;
static gdouble *gradient_samples = NULL;
static gchar *gradient_name = NULL;
static gint oldxpos = -1;
static gint oldypos = -1;
static GdkCursor *MyCursor;
static gdouble x_press = -1.0;
static gdouble y_press = -1.0;
static explorer_vals_t standardvals =
{
0,
-2.0,
2.0,
-1.5,
1.5,
50.0,
-0.75,
-0.2,
0,
1.0,
1.0,
1.0,
1,
1,
0,
0,
0,
0,
1,
256,
0
};
/**********************************************************************
FORWARD DECLARATIONS
*********************************************************************/
static void load_file_selection_ok (GtkWidget *widget,
GtkFileSelection *fs,
gpointer data);
static void create_load_file_selection (void);
static void create_file_selection (void);
static void explorer_logo_dialog (void);
/**********************************************************************
@ -247,6 +278,177 @@ explorer_gradient_select_callback (const gchar *name,
}
}
static void
preview_draw_crosshair (gint px, gint py)
{
gint x, y;
guchar *p_ul;
p_ul = wint.wimage + 3 * (preview_width * py + 0);
for (x = 0; x < preview_width; x++)
{
p_ul[0] ^= 254;
p_ul[1] ^= 254;
p_ul[2] ^= 254;
p_ul += 3;
}
p_ul = wint.wimage + 3 * (preview_width * 0 + px);
for (y = 0; y < preview_height; y++)
{
p_ul[0] ^= 254;
p_ul[1] ^= 254;
p_ul[2] ^= 254;
p_ul += 3 * preview_width;
}
}
static void
preview_redraw (void)
{
gint y;
guchar *p;
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;
}
gtk_widget_queue_draw (wint.preview);
}
static gboolean
preview_button_press_event (GtkWidget *widget,
GdkEventButton *event)
{
if (event->button == 1)
{
x_press = event->x;
y_press = event->y;
xbild = preview_width;
ybild = preview_height;
xdiff = (xmax - xmin) / xbild;
ydiff = (ymax - ymin) / ybild;
preview_draw_crosshair (x_press, y_press);
preview_redraw ();
}
return TRUE;
}
static gboolean
preview_motion_notify_event (GtkWidget *widget,
GdkEventButton *event)
{
if (oldypos != -1)
{
preview_draw_crosshair (oldxpos, oldypos);
}
oldxpos = event->x;
oldypos = event->y;
if ((oldxpos >= 0.0) &&
(oldypos >= 0.0) &&
(oldxpos < preview_width) &&
(oldypos < preview_height))
{
preview_draw_crosshair (oldxpos, oldypos);
}
else
{
oldypos = -1;
oldxpos = -1;
}
preview_redraw ();
return TRUE;
}
static gboolean
preview_leave_notify_event (GtkWidget *widget,
GdkEventButton *event)
{
if (oldypos != -1)
{
preview_draw_crosshair (oldxpos, oldypos);
}
oldxpos = -1;
oldypos = -1;
preview_redraw ();
MyCursor = gdk_cursor_new (GDK_TOP_LEFT_ARROW);
gdk_window_set_cursor (maindlg->window, MyCursor);
return TRUE;
}
static gboolean
preview_enter_notify_event (GtkWidget *widget,
GdkEventButton *event)
{
MyCursor = gdk_cursor_new (GDK_TCROSS);
gdk_window_set_cursor (maindlg->window, MyCursor);
return TRUE;
}
static gboolean
preview_button_release_event (GtkWidget *widget,
GdkEventButton *event)
{
gdouble l_xmin;
gdouble l_xmax;
gdouble l_ymin;
gdouble l_ymax;
if (event->button == 1)
{
gdouble x_release, y_release;
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;
}
/**********************************************************************
FUNCTION: explorer_dialog
*********************************************************************/
@ -285,18 +487,17 @@ explorer_dialog (void)
elements = g_new (DialogElements, 1);
dialog = maindlg =
gimp_dialog_new ("Fractal Explorer <Daniel Cotting/cotting@multimania.com>",
"fractalexplorer",
gimp_dialog_new ("Fractal Explorer", "fractalexplorer",
gimp_standard_help_func, "filters/fractalexplorer.html",
GTK_WIN_POS_NONE,
FALSE, TRUE, FALSE,
GTK_STOCK_CANCEL, gtk_widget_destroy,
NULL, 1, NULL, FALSE, TRUE,
_("About"), explorer_logo_dialog,
NULL, NULL, NULL, FALSE, FALSE,
GTK_STOCK_CANCEL, gtk_widget_destroy,
NULL, 1, NULL, FALSE, TRUE,
GTK_STOCK_OK, dialog_ok_callback,
NULL, NULL, NULL, TRUE, FALSE,
@ -438,7 +639,7 @@ explorer_dialog (void)
vbox = gtk_vbox_new (FALSE, 4);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 4);
gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vbox,
gtk_label_new (_("Parameters")));
gtk_label_new_with_mnemonic (_("_Parameters")));
gtk_widget_show (vbox);
frame = gtk_frame_new (_("Fractal Parameters"));
@ -642,7 +843,7 @@ explorer_dialog (void)
vbox = gtk_vbox_new (FALSE, 4);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 4);
gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vbox,
gtk_label_new (_("Colors")));
gtk_label_new_with_mnemonic (_("Co_lors")));
gtk_widget_show (vbox);
/* Number of Colors frame */
@ -659,7 +860,7 @@ explorer_dialog (void)
elements->ncol =
gimp_scale_entry_new (GTK_TABLE (table), 0, 0,
_("Number of Colors:"), SCALE_WIDTH, 0,
_("Number of colors:"), SCALE_WIDTH, 0,
wvals.ncolors, 2, MAXNCOLORS, 1, 10, 0,
TRUE, 0, 0,
_("Change the number of colors in the mapping"),
@ -669,7 +870,7 @@ explorer_dialog (void)
&wvals.ncolors);
elements->useloglog = toggle =
gtk_check_button_new_with_label (_("Use loglog Smoothing"));
gtk_check_button_new_with_label (_("Use loglog smoothing"));
gtk_table_attach_defaults (GTK_TABLE (table), toggle, 0, 3, 1, 2);
g_signal_connect (toggle, "toggled",
G_CALLBACK (explorer_toggle_update),
@ -868,7 +1069,7 @@ explorer_dialog (void)
gtk_widget_show (toggle_vbox);
toggle = elements->colormode[0] =
gtk_radio_button_new_with_label (group, _("As Specified above"));
gtk_radio_button_new_with_label (group, _("As specified above"));
group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggle));
gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0);
g_object_set_data (G_OBJECT (toggle), "gimp-item-data",
@ -890,7 +1091,7 @@ explorer_dialog (void)
toggle = elements->colormode[1] =
gtk_radio_button_new_with_label (group,
_("Apply Active Gradient to Final Image"));
_("Apply active gradient to final image"));
group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggle));
gtk_box_pack_start (GTK_BOX (hbox), toggle, TRUE, TRUE, 0);
g_object_set_data (G_OBJECT (toggle), "gimp-item-data",
@ -940,17 +1141,11 @@ explorer_dialog (void)
frame = add_objects_list ();
gtk_notebook_append_page (GTK_NOTEBOOK (notebook), frame,
gtk_label_new (_("Fractals")));
gtk_label_new_with_mnemonic (_("_Fractals")));
gtk_widget_show (frame);
gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), 1);
/* Done */
/* Popup for list area: Not yet fully implemented
fractalexplorer_op_menu_create(maindlg);
*/
gtk_widget_show (dialog);
ready_now = TRUE;
@ -960,17 +1155,12 @@ explorer_dialog (void)
gtk_main ();
gdk_flush ();
if (the_tile != NULL)
{
gimp_tile_unref (the_tile, FALSE);
the_tile = NULL;
}
g_free (wint.wimage);
return wint.run;
}
/**********************************************************************
FUNCTION: dialog_update_preview
*********************************************************************/
@ -992,7 +1182,6 @@ dialog_update_preview (void)
gint ycoord;
gint iteration;
guchar *p_ul;
guchar *p;
gdouble a;
gdouble b;
gdouble x;
@ -1016,7 +1205,7 @@ dialog_update_preview (void)
if (NULL == wint.preview)
return;
if ((ready_now) && (wvals.alwayspreview))
if (ready_now && wvals.alwayspreview)
{
left = sel_x1;
right = sel_x2 - 1;
@ -1193,16 +1382,7 @@ dialog_update_preview (void)
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;
}
gtk_widget_queue_draw (wint.preview);
preview_redraw ();
gdk_flush ();
}
}
@ -1379,6 +1559,7 @@ make_color_map (void)
static void
explorer_logo_dialog (void)
{
static GtkWidget *logodlg;
GtkWidget *xdlg;
GtkWidget *xlabel = NULL;
GtkWidget *xlogo_box;
@ -1407,7 +1588,7 @@ explorer_logo_dialog (void)
GTK_WIN_POS_MOUSE,
FALSE, TRUE, FALSE,
GTK_STOCK_OK, gtk_widget_destroy,
GTK_STOCK_CLOSE, gtk_widget_destroy,
NULL, 1, NULL, TRUE, TRUE,
NULL);
@ -1552,7 +1733,7 @@ dialog_change_scale (void)
FUNCTION: save_options
*********************************************************************/
void
static void
save_options (FILE * fp)
{
/* Save options */
@ -1580,11 +1761,7 @@ save_options (FILE * fp)
fputs ("#**********************************************************************\n", fp);
}
/**********************************************************************
FUNCTION: save_callback
*********************************************************************/
void
static void
save_callback (void)
{
FILE *fp;
@ -1617,11 +1794,7 @@ save_callback (void)
fclose (fp);
}
/**********************************************************************
FUNCTION: file_selection_ok
*********************************************************************/
void
static void
file_selection_ok (GtkWidget *w,
GtkFileSelection *fs,
gpointer data)
@ -1649,11 +1822,7 @@ file_selection_ok (GtkWidget *w,
gtk_widget_destroy (GTK_WIDGET (fs));
}
/**********************************************************************
FUNCTION: load_file_selection_ok
**********************************************************************/
void
static void
load_file_selection_ok (GtkWidget *w,
GtkFileSelection *fs,
gpointer data)
@ -1673,16 +1842,11 @@ load_file_selection_ok (GtkWidget *w,
dialog_update_preview ();
}
/**********************************************************************
FUNCTION: create_load_file_selection
*********************************************************************/
void
static void
create_load_file_selection (void)
{
static GtkWidget *window = NULL;
/* Load a single object */
if (!window)
{
window = gtk_file_selection_new (_("Load Fractal Parameters"));
@ -1696,26 +1860,17 @@ create_load_file_selection (void)
"clicked",
G_CALLBACK (load_file_selection_ok),
window);
gimp_help_set_help_data (GTK_FILE_SELECTION (window)->ok_button,
_("Click here to load your file"), NULL);
g_signal_connect_swapped (GTK_FILE_SELECTION (window)->cancel_button,
"clicked",
G_CALLBACK (gtk_widget_destroy),
window);
gimp_help_set_help_data (GTK_FILE_SELECTION (window)->cancel_button,
_("Click here to cancel load procedure"), NULL);
}
if (!GTK_WIDGET_VISIBLE (window))
gtk_widget_show (window);
gtk_widget_show (window);
}
/**********************************************************************
FUNCTION: create_file_selection
*********************************************************************/
void
static void
create_file_selection (void)
{
static GtkWidget *window = NULL;
@ -1733,15 +1888,11 @@ create_file_selection (void)
"clicked",
G_CALLBACK (file_selection_ok),
window);
gimp_help_set_help_data (GTK_FILE_SELECTION (window)->ok_button,
_("Click here to save your file"), NULL);
g_signal_connect_swapped (GTK_FILE_SELECTION(window)->cancel_button,
"clicked",
G_CALLBACK (gtk_widget_destroy),
window);
gimp_help_set_help_data (GTK_FILE_SELECTION (window)->cancel_button,
_("Click here to cancel save procedure"), NULL);
}
if (tpath)
@ -1770,15 +1921,10 @@ create_file_selection (void)
gtk_file_selection_set_filename (GTK_FILE_SELECTION (window), "/tmp");
}
if (!GTK_WIDGET_VISIBLE (window))
gtk_widget_show (window);
gtk_widget_show (window);
}
/**********************************************************************
FUNCTION: get_line
*********************************************************************/
gchar *
gchar*
get_line (gchar *buf,
gint s,
FILE *from,
@ -1813,10 +1959,6 @@ get_line (gchar *buf,
return ret;
}
/**********************************************************************
FUNCTION: load_options
*********************************************************************/
gint
load_options (fractalexplorerOBJ *xxx,
FILE *fp)
@ -1826,26 +1968,7 @@ load_options (fractalexplorerOBJ *xxx,
gchar opt_buf[MAX_LOAD_LINE];
/* default values */
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 = 1.0;
xxx->opts.greenstretch = 1.0;
xxx->opts.bluestretch = 1.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;
xxx->opts.ncolors = 256; /* not saved */
xxx->opts = standardvals;
xxx->opts.gradinvert = FALSE;
get_line (load_buf, MAX_LOAD_LINE, fp, 0);
@ -1866,122 +1989,74 @@ load_options (fractalexplorerOBJ *xxx,
}
else if (!strcmp (str_buf, "xmin:"))
{
gdouble sp = 0;
sp = atof (opt_buf);
xxx->opts.xmin = sp;
xxx->opts.xmin = g_ascii_strtod (opt_buf, NULL);
}
else if (!strcmp (str_buf, "xmax:"))
{
gdouble sp = 0;
sp = atof (opt_buf);
xxx->opts.xmax = sp;
xxx->opts.xmax = g_ascii_strtod (opt_buf, NULL);
}
else if (!strcmp(str_buf, "ymin:"))
{
gdouble sp = 0;
sp = atof (opt_buf);
xxx->opts.ymin = sp;
xxx->opts.ymin = g_ascii_strtod (opt_buf, NULL);
}
else if (!strcmp (str_buf, "ymax:"))
{
gdouble sp = 0;
sp = atof (opt_buf);
xxx->opts.ymax = sp;
xxx->opts.ymax = g_ascii_strtod (opt_buf, NULL);
}
else if (!strcmp(str_buf, "redstretch:"))
{
gdouble sp = 0;
sp = atof (opt_buf);
gdouble sp = g_ascii_strtod (opt_buf, NULL);
xxx->opts.redstretch = sp / 128.0;
}
else if (!strcmp(str_buf, "greenstretch:"))
{
gdouble sp = 0;
sp = atof (opt_buf);
gdouble sp = g_ascii_strtod (opt_buf, NULL);
xxx->opts.greenstretch = sp / 128.0;
}
else if (!strcmp (str_buf, "bluestretch:"))
{
gdouble sp = 0;
sp = atof (opt_buf);
gdouble sp = g_ascii_strtod (opt_buf, NULL);
xxx->opts.bluestretch = sp / 128.0;
}
else if (!strcmp (str_buf, "iter:"))
{
gdouble sp = 0;
sp = atof (opt_buf);
xxx->opts.iter = sp;
xxx->opts.iter = g_ascii_strtod (opt_buf, NULL);
}
else if (!strcmp(str_buf, "cx:"))
{
gdouble sp = 0;
sp = atof (opt_buf);
xxx->opts.cx = sp;
xxx->opts.cx = g_ascii_strtod (opt_buf, NULL);
}
else if (!strcmp (str_buf, "cy:"))
{
gdouble sp = 0;
sp = atof (opt_buf);
xxx->opts.cy = sp;
xxx->opts.cy = g_ascii_strtod (opt_buf, NULL);
}
else if (!strcmp(str_buf, "redmode:"))
{
gint sp = 0;
sp = atoi (opt_buf);
xxx->opts.redmode = sp;
xxx->opts.redmode = atoi (opt_buf);
}
else if (!strcmp(str_buf, "greenmode:"))
{
gint sp = 0;
sp = atoi (opt_buf);
xxx->opts.greenmode = sp;
xxx->opts.greenmode = atoi (opt_buf);
}
else if (!strcmp(str_buf, "bluemode:"))
{
gint sp = 0;
sp = atoi (opt_buf);
xxx->opts.bluemode = sp;
xxx->opts.bluemode = atoi (opt_buf);
}
else if (!strcmp (str_buf, "redinvert:"))
{
gint sp = 0;
sp = atoi (opt_buf);
xxx->opts.redinvert = sp;
xxx->opts.redinvert = atoi (opt_buf);
}
else if (!strcmp (str_buf, "greeninvert:"))
{
gint sp = 0;
sp = atoi (opt_buf);
xxx->opts.greeninvert = sp;
xxx->opts.greeninvert = atoi (opt_buf);
}
else if (!strcmp(str_buf, "blueinvert:"))
{
gint sp = 0;
sp = atoi (opt_buf);
xxx->opts.blueinvert = sp;
xxx->opts.blueinvert = atoi (opt_buf);
}
else if (!strcmp (str_buf, "colormode:"))
{
gint sp = 0;
sp = atoi (opt_buf);
xxx->opts.colormode = sp;
xxx->opts.colormode = atoi (opt_buf);
}
get_line (load_buf, MAX_LOAD_LINE, fp, 0);
@ -1990,10 +2065,6 @@ load_options (fractalexplorerOBJ *xxx,
return 0;
}
/**********************************************************************
FUNCTION: explorer_load
*********************************************************************/
void
explorer_load (void)
{

View File

@ -8,16 +8,6 @@ void set_cmap_preview (void);
void make_color_map (void);
void dialog_change_scale (void);
void save_options (FILE *fp);
void save_callback (void);
void file_selection_ok (GtkWidget *widget,
GtkFileSelection *fs,
gpointer data);
void load_file_selection_ok (GtkWidget *widget,
GtkFileSelection *fs,
gpointer data);
void create_load_file_selection (void);
void create_file_selection (void);
gchar * get_line (gchar *buf,
gint s,
FILE *from,

View File

@ -1,364 +0,0 @@
#include "config.h"
#include <stdio.h>
#ifdef __GNUC__
#warning GTK_DISABLE_DEPRECATED
#endif
#undef GTK_DISABLE_DEPRECATED
#include <gtk/gtk.h>
#include <libgimp/gimp.h>
#include "FractalExplorer.h"
#include "Events.h"
#include "Dialogs.h"
/**********************************************************************
FUNCTION: preview_button_press_event
*********************************************************************/
gint
preview_button_press_event (GtkWidget *widget,
GdkEventButton *event)
{
gdouble left;
gdouble right;
gdouble bottom;
gdouble top;
gdouble dx;
gdouble dy;
gint px;
gint py;
gint x;
gint y;
gushort r;
gushort g;
gushort b;
guchar *p_ul;
guchar *i;
guchar *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;
}
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;
}
gtk_widget_queue_draw (wint.preview);
}
return TRUE;
}
/**********************************************************************
FUNCTION: preview_motion_notify_event
*********************************************************************/
gint
preview_motion_notify_event (GtkWidget *widget,
GdkEventButton *event)
{
gint px;
gint py;
gint x;
gint y;
gushort r;
gushort g;
gushort b;
guchar *p_ul;
guchar *i;
guchar *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;
}
}
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;
}
gtk_widget_queue_draw (wint.preview);
return TRUE;
}
/**********************************************************************
FUNCTION: preview_leave_notify_event
*********************************************************************/
gint
preview_leave_notify_event (GtkWidget *widget,
GdkEventButton *event)
{
gint px;
gint py;
gint x;
gint y;
gushort r;
gushort g;
gushort b;
guchar *p_ul;
guchar *i;
guchar *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;
}
}
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;
}
gtk_widget_queue_draw (wint.preview);
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)
{
gdouble l_xmin;
gdouble l_xmax;
gdouble l_ymin;
gdouble 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;
}

View File

@ -1,11 +0,0 @@
#ifndef __FRACTALEXPLORER_EVENTS_H__
#define __FRACTALEXPLORER_EVENTS_H__
/* 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);
#endif

View File

@ -71,7 +71,6 @@
#include "pix_data.h"
#include "FractalExplorer.h"
#include "Events.h"
#include "Dialogs.h"
#include <gtk/gtklist.h>
@ -82,6 +81,72 @@
#include "libgimp/stdplugins-intl.h"
/**********************************************************************
Global variables
*********************************************************************/
gdouble xmin = -2;
gdouble xmax = 1;
gdouble ymin = -1.5;
gdouble ymax = 1.5;
gdouble xbild;
gdouble ybild;
gdouble xdiff;
gdouble ydiff;
gint sel_x1;
gint sel_y1;
gint sel_x2;
gint sel_y2;
gint preview_width;
gint preview_height;
GtkWidget *delete_frame_to_freeze;
gdouble *gg;
gint line_no;
gchar *filename;
clrmap colormap;
gchar *fractalexplorer_path = NULL;
static gfloat cx = -0.75;
static gfloat cy = -0.2;
static GimpDrawable *drawable;
static GList *fractalexplorer_list = NULL;
static GtkWidget *fractalexplorer_gtk_list;
explorer_interface_t wint =
{
NULL, /* preview */
NULL, /* wimage */
FALSE /* run */
}; /* wint */
explorer_vals_t wvals =
{
0,
-2.0,
2.0,
-1.5,
1.5,
50.0,
-0.75,
-0.2,
0,
1.0,
1.0,
1.0,
1,
1,
0,
0,
0,
0,
1,
256,
0
}; /* wvals */
fractalexplorerOBJ *current_obj;
static GtkWidget *delete_dialog = NULL;
static void query (void);
static void run (const gchar *name,
gint nparams,
@ -131,7 +196,6 @@ static GtkWidget * fractalexplorer_list_item_new_with_label_and_pixmap
static GtkWidget * fractalexplorer_new_pixmap (GtkWidget *list,
gchar **pixdata);
static GtkWidget * fractalexplorer_list_add (fractalexplorerOBJ *feOBJ);
static void list_button_update (fractalexplorerOBJ *feOBJ);
static fractalexplorerOBJ *fractalexplorer_new (void);
static void build_list_items (GtkWidget *list);
@ -200,7 +264,7 @@ query (void)
"Daniel Cotting (cotting@multimania.com, www.multimania.com/cotting)",
"Daniel Cotting (cotting@multimania.com, www.multimania.com/cotting)",
"December, 1998",
N_("<Image>/Filters/Render/Pattern/_Fractal Explorer..."),
N_("<Image>/Filters/Render/_Fractal Explorer..."),
"RGB*",
GIMP_PLUGIN,
G_N_ELEMENTS (args), 0,
@ -221,11 +285,11 @@ run (const gchar *name,
static GimpParam values[1];
gint32 image_ID;
GimpRunMode run_mode;
gdouble xhsiz;
gdouble yhsiz;
gint pwidth;
gint pheight;
GimpPDBStatusType status = GIMP_PDB_SUCCESS;
gint sel_width;
gint sel_height;
run_mode = param[0].data.d_int32;
@ -240,12 +304,6 @@ run (const gchar *name,
/* 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->drawable_id);
img_height = gimp_drawable_height (drawable->drawable_id);
img_bpp = gimp_drawable_bpp (drawable->drawable_id);
gimp_drawable_mask_bounds (drawable->drawable_id,
&sel_x1, &sel_y1, &sel_x2, &sel_y2);
@ -253,12 +311,6 @@ run (const gchar *name,
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)
{
@ -650,8 +702,6 @@ delete_dialog_callback (GtkWidget *widget,
sellist = GTK_LIST(list)->selection;
/* g_print ("list: %i\n", g_list_length (sellist)); */
sel_obj = (fractalexplorerOBJ *)
g_object_get_data (G_OBJECT (sellist->data), "fractalexplorer");
@ -690,8 +740,6 @@ delete_dialog_callback (GtkWidget *widget,
gtk_list_select_item (GTK_LIST (fractalexplorer_gtk_list), pos);
current_obj = g_list_nth_data (fractalexplorer_list, pos);
list_button_update(current_obj);
}
else
{
@ -747,11 +795,11 @@ fractalexplorer_list_ok_callback (GtkWidget *widget,
GtkWidget *list;
gint pos;
options = (fractalexplorerListOptions *) data;
options = (fractalexplorerListOptions*) data;
list = options->list_entry;
/* Set the new layer name */
g_free(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)));
@ -865,15 +913,12 @@ new_fractalexplorer_obj (gchar *name)
fractalexplorer->draw_name = g_strdup (name);
/* Leave options as before */
pic_obj = current_obj = fractalexplorer;
current_obj = fractalexplorer;
new_list_item = fractalexplorer_list_add(fractalexplorer);
/* obj_creating = tmp_line = NULL; */
new_list_item = fractalexplorer_list_add (fractalexplorer);
/* Redraw areas */
/* update_draw_area(fractalexplorer_preview,NULL); */
list_button_update (fractalexplorer);
return new_list_item;
}
@ -884,10 +929,10 @@ new_button_press (GtkWidget *widget,
{
GtkWidget * new_list_item;
new_list_item = new_fractalexplorer_obj((gchar*)data);
fractalexplorer_dialog_edit_list(new_list_item,current_obj,TRUE);
new_list_item = new_fractalexplorer_obj ((gchar*) data);
fractalexplorer_dialog_edit_list (new_list_item,current_obj, TRUE);
return(FALSE);
return FALSE;
}
/*
@ -953,7 +998,7 @@ fractalexplorer_list_item_new_with_label_and_pixmap (fractalexplorerOBJ *obj,
gtk_container_set_border_width (GTK_CONTAINER (alignment), 0);
gtk_widget_show(alignment);
gtk_box_pack_start(GTK_BOX(hbox),pix_widget,FALSE,FALSE,0);
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);
@ -964,14 +1009,14 @@ fractalexplorer_list_item_new_with_label_and_pixmap (fractalexplorerOBJ *obj,
return list_item;
}
GtkWidget *
static GtkWidget *
fractalexplorer_new_pixmap (GtkWidget *list,
gchar **pixdata)
{
GtkWidget *pixmap_widget;
GdkPixmap *pixmap;
GdkColor transparent;
GdkBitmap *mask=NULL;
GdkBitmap *mask = NULL;
GdkColormap *colormap;
colormap = gtk_widget_get_default_colormap ();
@ -988,7 +1033,7 @@ fractalexplorer_new_pixmap (GtkWidget *list,
return pixmap_widget;
}
GtkWidget *
static GtkWidget *
fractalexplorer_list_add (fractalexplorerOBJ *obj)
{
GList *list;
@ -1019,49 +1064,39 @@ fractalexplorer_list_add (fractalexplorerOBJ *obj)
return list_item;
}
static void
list_button_update (fractalexplorerOBJ *obj)
{
g_return_if_fail (obj != NULL);
pic_obj = obj;
}
fractalexplorerOBJ *
static fractalexplorerOBJ *
fractalexplorer_new (void)
{
return g_new0 (fractalexplorerOBJ, 1);
}
void
static void
build_list_items (GtkWidget *list)
{
GList *tmp = fractalexplorer_list;
GtkWidget *list_item;
GtkWidget *list_pix;
fractalexplorerOBJ *g;
GList *tmp;
while (tmp)
for (tmp = fractalexplorer_list; tmp; tmp = tmp->next)
{
GtkWidget *list_item, *list_pix;
fractalexplorerOBJ *g;
g = tmp->data;
if (g->obj_status & fractalexplorer_READONLY)
list_pix = fractalexplorer_new_pixmap(list,mini_cross_xpm);
list_pix = fractalexplorer_new_pixmap(list, mini_cross_xpm);
else
list_pix = fractalexplorer_new_pixmap(list,bluedot_xpm);
list_pix = fractalexplorer_new_pixmap(list, bluedot_xpm);
list_item =
fractalexplorer_list_item_new_with_label_and_pixmap
(g, g->draw_name,list_pix);
g_object_set_data (G_OBJECT (list_item), "factralexplorer",
g);
g_object_set_data (G_OBJECT (list_item), "factralexplorer", g);
gtk_list_append_items (GTK_LIST (list), g_list_append(NULL,list_item));
g_signal_connect (list_item, "button_press_event",
G_CALLBACK (list_button_press),
g);
gtk_widget_show (list_item);
tmp = tmp->next;
}
}
@ -1071,29 +1106,16 @@ list_button_press (GtkWidget *widget,
gpointer data)
{
fractalexplorerOBJ * sel_obj;
fractalexplorerOBJ *sel_obj = (fractalexplorerOBJ*) data;
switch (event->type)
{
case GDK_BUTTON_PRESS:
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 ();
}
else
{
g_warning ("Internal error - list item has null object!");
}
current_obj = sel_obj;
wvals = current_obj->opts;
dialog_change_scale ();
set_cmap_preview ();
dialog_update_preview ();
break;
default:
@ -1134,7 +1156,7 @@ fractalexplorer_list_free_all (void)
fractalexplorer_list = NULL;
}
fractalexplorerOBJ *
static fractalexplorerOBJ *
fractalexplorer_load (const gchar *filename,
const gchar *name)
{
@ -1182,9 +1204,6 @@ fractalexplorer_load (const gchar *filename,
fclose (fp);
if (!pic_obj)
pic_obj = fractalexplorer;
fractalexplorer->obj_status = fractalexplorer_OK;
return fractalexplorer;
@ -1213,14 +1232,14 @@ static void
fractalexplorer_list_load_all (const gchar *path)
{
/* Make sure to clear any existing fractalexplorers */
current_obj = pic_obj = NULL;
current_obj = NULL;
fractalexplorer_list_free_all ();
gimp_datafiles_read_directories (path, G_FILE_TEST_IS_REGULAR,
fractalexplorer_list_load_one,
NULL);
if (! fractalexplorer_list)
if (!fractalexplorer_list)
{
fractalexplorerOBJ *fractalexplorer;
@ -1229,7 +1248,7 @@ fractalexplorer_list_load_all (const gchar *path)
fractalexplorer->draw_name = g_strdup (_("My first fractal"));
fractalexplorer_list_insert (fractalexplorer);
}
pic_obj = current_obj = fractalexplorer_list->data; /* set to first entry */
current_obj = fractalexplorer_list->data; /* set to first entry */
}
GtkWidget *
@ -1320,7 +1339,6 @@ fractalexplorer_rescan_ok_callback (GtkWidget *widget,
gtk_list_clear_items (GTK_LIST (fractalexplorer_gtk_list), 0, -1);
fractalexplorer_list_load_all (fractalexplorer_path);
build_list_items (fractalexplorer_gtk_list);
list_button_update (current_obj);
}
gtk_widget_destroy (GTK_WIDGET (data));

View File

@ -161,8 +161,6 @@ typedef struct _fractalexplorerListOptions
#define gradient_GRADIENTEDITOR 0x2
extern fractalexplorerOBJ *current_obj;
extern fractalexplorerOBJ *pic_obj;
extern GtkWidget *delete_dialog;
GtkWidget * add_objects_list (void);
@ -178,65 +176,20 @@ extern gdouble xbild;
extern gdouble ybild;
extern gdouble xdiff;
extern gdouble ydiff;
extern gdouble x_press;
extern gdouble y_press;
extern gdouble x_release;
extern gdouble y_release;
extern gfloat cx;
extern gfloat cy;
extern GimpDrawable *drawable;
extern gint tile_width,
tile_height;
extern gint img_width,
img_height,
img_bpp;
extern gint sel_x1,
sel_y1,
sel_x2,
sel_y2;
extern gint sel_width,
sel_height;
extern gint preview_width,
preview_height;
extern GimpTile *the_tile;
extern double cen_x,
cen_y;
extern double xpos,
ypos,
oldxpos,
oldypos;
extern GtkWidget *maindlg;
extern GtkWidget *logodlg;
extern GtkWidget *cmap_preview;
extern GtkWidget *delete_frame_to_freeze;
extern GtkWidget *fractalexplorer_gtk_list;
extern GtkWidget *save_menu_item;
extern GtkWidget *fractalexplorer_op_menu;
extern GdkCursor *MyCursor;
extern int ready_now;
extern explorer_vals_t
zooms[100];
extern DialogElements
*elements;
extern int zoomindex;
extern int zoommax;
extern gdouble *gg;
extern int line_no;
extern gchar *filename;
extern clrmap colormap;
extern gchar *fractalexplorer_path;
extern GList *fractalexplorer_list;
extern GList *gradient_list;
extern gchar *tpath;
extern fractalexplorerOBJ
*fractalexplorer_obj_for_menu;
extern GList *rescan_list;
extern int lng;
extern explorer_interface_t wint;
extern explorer_vals_t wvals;
extern explorer_vals_t standardvals;
#endif

View File

@ -1,133 +0,0 @@
#include "config.h"
#include <gtk/gtk.h>
#include <libgimp/gimp.h>
#include "FractalExplorer.h"
/**********************************************************************
Global variables
*********************************************************************/
gdouble xmin = -2;
gdouble xmax = 1;
gdouble ymin = -1.5;
gdouble ymax = 1.5;
gdouble xbild;
gdouble ybild;
gdouble xdiff;
gdouble ydiff;
gdouble x_press = -1.0;
gdouble y_press = -1.0;
gdouble x_release = -1.0;
gdouble y_release = -1.0;
gfloat cx = -0.75;
gfloat cy = -0.2;
GimpDrawable *drawable;
gint tile_width;
gint tile_height;
gint img_width;
gint img_height;
gint img_bpp;
gint sel_x1;
gint sel_y1;
gint sel_x2;
gint sel_y2;
gint sel_width;
gint sel_height;
gint preview_width;
gint preview_height;
GimpTile *the_tile = NULL;
gdouble cen_x;
gdouble cen_y;
gdouble xpos;
gdouble ypos;
gdouble oldxpos = -1;
gdouble oldypos = -1;
GtkWidget *maindlg;
GtkWidget *logodlg;
GtkWidget *cmap_preview;
GtkWidget *delete_frame_to_freeze;
GtkWidget *fractalexplorer_gtk_list;
GtkWidget *save_menu_item;
GtkWidget *fractalexplorer_op_menu;
GdkCursor *MyCursor;
gboolean ready_now = FALSE;
explorer_vals_t zooms[100];
DialogElements *elements = NULL;
gint zoomindex = 1;
gint zoommax = 1;
gdouble *gg;
gint line_no;
gchar *filename;
clrmap colormap;
gchar *fractalexplorer_path = NULL;
GList *fractalexplorer_list = NULL;
GList *gradient_list = NULL;
gchar *tpath = NULL;
fractalexplorerOBJ *fractalexplorer_obj_for_menu;
GList *rescan_list = NULL;
explorer_interface_t wint =
{
NULL, /* preview */
NULL, /* wimage */
FALSE /* run */
}; /* wint */
explorer_vals_t wvals =
{
0,
-2.0,
2.0,
-1.5,
1.5,
50.0,
-0.75,
-0.2,
0,
1.0,
1.0,
1.0,
1,
1,
0,
0,
0,
0,
1,
256,
0
}; /* wvals */
explorer_vals_t standardvals =
{
0,
-2.0,
2.0,
-1.5,
1.5,
50.0,
-0.75,
-0.2,
0,
1.0,
1.0,
1.0,
1,
1,
0,
0,
0,
0,
1,
256,
0
}; /* standardvals */
fractalexplorerOBJ *current_obj;
fractalexplorerOBJ *pic_obj;
GtkWidget *delete_dialog = NULL;

View File

@ -15,11 +15,8 @@ libexec_PROGRAMS = FractalExplorer
FractalExplorer_SOURCES = \
Dialogs.h \
Dialogs.c \
Events.h \
Events.c \
FractalExplorer.c \
FractalExplorer.h \
Globals.c \
logo.h \
pix_data.h

View File

@ -35,10 +35,6 @@
#include "libgimp/stdplugins-intl.h"
/* The mosaic logo */
#include "mosaic_logo.h"
#define SCALE_WIDTH 150
#define HORIZONTAL 0
@ -440,8 +436,6 @@ mosaic (GimpDrawable *drawable)
{
gint x1, y1, x2, y2;
gint alpha;
GimpRGB foreground;
GimpRGB background;
/* Find the mask bounds */
gimp_drawable_mask_bounds (drawable->drawable_id, &x1, &y1, &x2, &y2);
@ -478,23 +472,8 @@ mosaic (GimpDrawable *drawable)
back[0] = back[1] = back[2] = 0;
break;
case FG_BG:
gimp_palette_get_foreground (&foreground);
gimp_palette_get_background (&background);
switch (gimp_drawable_type (drawable->drawable_id))
{
case GIMP_RGB_IMAGE:
case GIMP_RGBA_IMAGE:
gimp_rgb_get_uchar (&foreground, &fore[0], &fore[1], &fore[2]);
gimp_rgb_get_uchar (&background, &back[0], &back[1], &back[2]);
break;
case GIMP_GRAY_IMAGE:
case GIMP_GRAYA_IMAGE:
fore[0] = gimp_rgb_intensity_uchar (&foreground);
back[0] = gimp_rgb_intensity_uchar (&background);
break;
default:
break;
}
gimp_get_fg_guchar (drawable, FALSE, fore);
gimp_get_bg_guchar (drawable, FALSE, back);
break;
}
@ -528,15 +507,11 @@ mosaic_dialog (void)
GtkWidget *dlg;
GtkWidget *toggle;
GtkWidget *vbox;
GtkWidget *hbox;
GtkWidget *logo_box;
GtkWidget *toggle_vbox;
GtkWidget *main_hbox;
GtkWidget *frame;
GtkWidget *logo;
GtkWidget *table;
GtkObject *scale_data;
GdkPixbuf *pixbuf;
gimp_ui_init ("mosaic", TRUE);
@ -567,31 +542,10 @@ mosaic_dialog (void)
vbox = gtk_vbox_new (FALSE, 4);
gtk_box_pack_start (GTK_BOX (main_hbox), vbox, FALSE, FALSE, 0);
/* The logo frame & drawing area */
hbox = gtk_hbox_new (FALSE, 6);
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
logo_box = gtk_vbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX (hbox), logo_box, FALSE, FALSE, 0);
gtk_widget_show (logo_box);
frame = gtk_frame_new (NULL);
gtk_container_set_border_width (GTK_CONTAINER (frame), 4);
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
gtk_box_pack_start (GTK_BOX (logo_box), frame, FALSE, FALSE, 0);
gtk_widget_show (frame);
pixbuf = gdk_pixbuf_new_from_inline (-1, mosaic_logo, FALSE, NULL);
logo = gtk_image_new_from_pixbuf (pixbuf);
g_object_unref (pixbuf);
gtk_container_add (GTK_CONTAINER (frame), logo);
gtk_widget_show (logo);
/* the vertical box and its toggle buttons */
frame = gtk_frame_new (_("Options"));
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
toggle_vbox = gtk_vbox_new (FALSE, 1);
gtk_container_set_border_width (GTK_CONTAINER (toggle_vbox), 2);
@ -648,7 +602,6 @@ mosaic_dialog (void)
gtk_widget_show (toggle_vbox);
gtk_widget_show (frame);
gtk_widget_show (hbox);
/* tiling primitive */
frame = gimp_radio_group_new2 (TRUE, _("Tiling Primitives"),
@ -870,10 +823,10 @@ find_max_gradient (GimpPixelRgn *src_rgn,
#ifndef SLOW_CODE
#define ABSVAL(x) ((x) >= 0 ? (x) : -(x))
for(s_iter = s, s_end = s + src_rgn->bpp;
s_iter < s_end; s_iter++) {
for (s_iter = s, s_end = s + src_rgn->bpp;
s_iter < s_end; s_iter++) {
val = *s;
if(ABSVAL(val) > ABSVAL(max))
if (ABSVAL(val) > ABSVAL(max))
max = val;
}
*d++ = max;
@ -1012,13 +965,8 @@ gaussian_deriv (GimpPixelRgn *src_rgn,
{
for (chan = 0; chan < bytes; chan++)
{
b[chan] = b[chan] + 128;
if (b[chan] > 255)
dp[chan] = 255;
else if (b[chan] < 0)
dp[chan] = 0;
else
dp[chan] = b[chan];
b[chan] += 128;
dp[chan] = CLAMP0255 (b[chan]);
}
b += bytes;
dp += bytes;
@ -1028,12 +976,7 @@ gaussian_deriv (GimpPixelRgn *src_rgn,
{
for (chan = 0; chan < bytes; chan++)
{
if (b[chan] > 255)
dp[chan] = 255;
else if (b[chan] < 0)
dp[chan] = 0;
else
dp[chan] = b[chan];
dp[chan] = CLAMP0255 (b[chan]);
}
b += bytes;
dp += bytes;
@ -1105,13 +1048,8 @@ gaussian_deriv (GimpPixelRgn *src_rgn,
{
for (chan = 0; chan < bytes; chan++)
{
b[chan] = b[chan] + 128;
if (b[chan] > 255)
dp[chan] = 255;
else if (b[chan] < 0)
dp[chan] = 0;
else
dp[chan] = b[chan];
b[chan] += 128;
dp[chan] = CLAMP0255 (b[chan]);
}
b += bytes;
dp += bytes;
@ -1121,12 +1059,7 @@ gaussian_deriv (GimpPixelRgn *src_rgn,
{
for (chan = 0; chan < bytes; chan++)
{
if (b[chan] > 255)
dp[chan] = 255;
else if (b[chan] < 0)
dp[chan] = 0;
else
dp[chan] = b[chan];
dp[chan] = CLAMP0255 (b[chan]);
}
b += bytes;
dp += bytes;
@ -1218,7 +1151,6 @@ fp_rand (gdouble val)
return g_random_double () * val;
}
static void
grid_create_squares (gint x1,
gint y1,
@ -1256,7 +1188,6 @@ grid_create_squares (gint x1,
grid_rowstride = cols + 2;
}
static void
grid_create_hexagons (gint x1,
gint y1,
@ -1433,7 +1364,6 @@ grid_localize (gint x1,
}
}
static void
grid_render (GimpDrawable *drawable)
{
@ -1619,7 +1549,6 @@ grid_render (GimpDrawable *drawable)
gimp_progress_update (1.0);
}
static void
process_poly (Polygon *poly,
gint allow_split,
@ -1661,7 +1590,6 @@ process_poly (Polygon *poly,
render_poly (poly, drawable, col, color_vary);
}
static void
render_poly (Polygon *poly,
GimpDrawable *drawable,
@ -1683,7 +1611,6 @@ render_poly (Polygon *poly,
fill_poly_image (poly, drawable, vary);
}
static void
split_poly (Polygon *poly,
GimpDrawable *drawable,
@ -1745,7 +1672,6 @@ split_poly (Polygon *poly,
}
}
static void
clip_poly (gdouble *dir,
gdouble *pt,
@ -2020,12 +1946,7 @@ find_poly_color (Polygon *poly,
for (b = 0; b < bytes; b++)
{
col_sum[b] = (gint) (col_sum[b] / count + color_var);
if (col_sum[b] > 255)
col[b] = 255;
else if (col_sum[b] < 0)
col[b] = 0;
else
col[b] = col_sum[b];
col[b] = CLAMP0255 (col_sum[b]);
}
g_free (min_scanlines);
@ -2044,7 +1965,6 @@ scale_poly (Polygon *poly,
polygon_translate (poly, tx, ty);
}
static void
fill_poly_color (Polygon *poly,
GimpDrawable *drawable,
@ -2224,7 +2144,6 @@ fill_poly_color (Polygon *poly,
g_free (max_scanlines);
}
static void
fill_poly_image (Polygon *poly,
GimpDrawable *drawable,
@ -2382,7 +2301,6 @@ fill_poly_image (Polygon *poly,
g_free (max_scanlines);
}
static void
calc_spec_vec (SpecVec *vec,
gint x1,
@ -2416,12 +2334,13 @@ calc_spec_contrib (SpecVec *vecs,
gdouble y)
{
gint i;
gdouble dist;
gdouble contrib = 0;
gdouble x_p, y_p;
for (i = 0; i < n; i++)
{
gdouble x_p, y_p;
gdouble dist;
x_p = x - vecs[i].base_x;
y_p = y - vecs[i].base_y;
@ -2445,7 +2364,6 @@ calc_spec_contrib (SpecVec *vecs,
return contrib / 4.0;
}
static void
convert_segment (gint x1,
gint y1,
@ -2459,27 +2377,28 @@ convert_segment (gint x1,
gdouble xinc, xstart;
if (y1 > y2)
{ tmp = y2; y2 = y1; y1 = tmp;
tmp = x2; x2 = x1; x1 = tmp; }
ydiff = (y2 - y1);
{
tmp = y2; y2 = y1; y1 = tmp;
tmp = x2; x2 = x1; x1 = tmp;
}
ydiff = y2 - y1;
if ( ydiff )
if (ydiff)
{
xinc = (gdouble) (x2 - x1) / (gdouble) ydiff;
xstart = x1 + 0.5 * xinc;
for (y = y1 ; y < y2; y++)
{
if (xstart < min[y - offset])
min[y-offset] = xstart;
min[y - offset] = xstart;
if (xstart > max[y - offset])
max[y-offset] = xstart;
max[y - offset] = xstart;
xstart += xinc;
}
}
}
static void
polygon_add_point (Polygon *poly,
gdouble x,
@ -2495,7 +2414,6 @@ polygon_add_point (Polygon *poly,
g_print ( _("Unable to add additional point.\n"));
}
static int
polygon_find_center (Polygon *poly,
gdouble *cx,
@ -2521,7 +2439,6 @@ polygon_find_center (Polygon *poly,
return 1;
}
static void
polygon_translate (Polygon *poly,
gdouble tx,
@ -2536,7 +2453,6 @@ polygon_translate (Polygon *poly,
}
}
static void
polygon_scale (Polygon *poly,
gdouble poly_scale)
@ -2580,7 +2496,6 @@ polygon_extents (Polygon *poly,
return 1;
}
static void
polygon_reset (Polygon *poly)
{

View File

@ -11,8 +11,7 @@ libexecdir = $(gimpplugindir)/plug-ins
libexec_PROGRAMS = mosaic
mosaic_SOURCES = \
mosaic.c \
mosaic_logo.h
mosaic.c
INCLUDES = \
-I$(top_srcdir) \

View File

@ -35,10 +35,6 @@
#include "libgimp/stdplugins-intl.h"
/* The mosaic logo */
#include "mosaic_logo.h"
#define SCALE_WIDTH 150
#define HORIZONTAL 0
@ -440,8 +436,6 @@ mosaic (GimpDrawable *drawable)
{
gint x1, y1, x2, y2;
gint alpha;
GimpRGB foreground;
GimpRGB background;
/* Find the mask bounds */
gimp_drawable_mask_bounds (drawable->drawable_id, &x1, &y1, &x2, &y2);
@ -478,23 +472,8 @@ mosaic (GimpDrawable *drawable)
back[0] = back[1] = back[2] = 0;
break;
case FG_BG:
gimp_palette_get_foreground (&foreground);
gimp_palette_get_background (&background);
switch (gimp_drawable_type (drawable->drawable_id))
{
case GIMP_RGB_IMAGE:
case GIMP_RGBA_IMAGE:
gimp_rgb_get_uchar (&foreground, &fore[0], &fore[1], &fore[2]);
gimp_rgb_get_uchar (&background, &back[0], &back[1], &back[2]);
break;
case GIMP_GRAY_IMAGE:
case GIMP_GRAYA_IMAGE:
fore[0] = gimp_rgb_intensity_uchar (&foreground);
back[0] = gimp_rgb_intensity_uchar (&background);
break;
default:
break;
}
gimp_get_fg_guchar (drawable, FALSE, fore);
gimp_get_bg_guchar (drawable, FALSE, back);
break;
}
@ -528,15 +507,11 @@ mosaic_dialog (void)
GtkWidget *dlg;
GtkWidget *toggle;
GtkWidget *vbox;
GtkWidget *hbox;
GtkWidget *logo_box;
GtkWidget *toggle_vbox;
GtkWidget *main_hbox;
GtkWidget *frame;
GtkWidget *logo;
GtkWidget *table;
GtkObject *scale_data;
GdkPixbuf *pixbuf;
gimp_ui_init ("mosaic", TRUE);
@ -567,31 +542,10 @@ mosaic_dialog (void)
vbox = gtk_vbox_new (FALSE, 4);
gtk_box_pack_start (GTK_BOX (main_hbox), vbox, FALSE, FALSE, 0);
/* The logo frame & drawing area */
hbox = gtk_hbox_new (FALSE, 6);
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
logo_box = gtk_vbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX (hbox), logo_box, FALSE, FALSE, 0);
gtk_widget_show (logo_box);
frame = gtk_frame_new (NULL);
gtk_container_set_border_width (GTK_CONTAINER (frame), 4);
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
gtk_box_pack_start (GTK_BOX (logo_box), frame, FALSE, FALSE, 0);
gtk_widget_show (frame);
pixbuf = gdk_pixbuf_new_from_inline (-1, mosaic_logo, FALSE, NULL);
logo = gtk_image_new_from_pixbuf (pixbuf);
g_object_unref (pixbuf);
gtk_container_add (GTK_CONTAINER (frame), logo);
gtk_widget_show (logo);
/* the vertical box and its toggle buttons */
frame = gtk_frame_new (_("Options"));
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
toggle_vbox = gtk_vbox_new (FALSE, 1);
gtk_container_set_border_width (GTK_CONTAINER (toggle_vbox), 2);
@ -648,7 +602,6 @@ mosaic_dialog (void)
gtk_widget_show (toggle_vbox);
gtk_widget_show (frame);
gtk_widget_show (hbox);
/* tiling primitive */
frame = gimp_radio_group_new2 (TRUE, _("Tiling Primitives"),
@ -870,10 +823,10 @@ find_max_gradient (GimpPixelRgn *src_rgn,
#ifndef SLOW_CODE
#define ABSVAL(x) ((x) >= 0 ? (x) : -(x))
for(s_iter = s, s_end = s + src_rgn->bpp;
s_iter < s_end; s_iter++) {
for (s_iter = s, s_end = s + src_rgn->bpp;
s_iter < s_end; s_iter++) {
val = *s;
if(ABSVAL(val) > ABSVAL(max))
if (ABSVAL(val) > ABSVAL(max))
max = val;
}
*d++ = max;
@ -1012,13 +965,8 @@ gaussian_deriv (GimpPixelRgn *src_rgn,
{
for (chan = 0; chan < bytes; chan++)
{
b[chan] = b[chan] + 128;
if (b[chan] > 255)
dp[chan] = 255;
else if (b[chan] < 0)
dp[chan] = 0;
else
dp[chan] = b[chan];
b[chan] += 128;
dp[chan] = CLAMP0255 (b[chan]);
}
b += bytes;
dp += bytes;
@ -1028,12 +976,7 @@ gaussian_deriv (GimpPixelRgn *src_rgn,
{
for (chan = 0; chan < bytes; chan++)
{
if (b[chan] > 255)
dp[chan] = 255;
else if (b[chan] < 0)
dp[chan] = 0;
else
dp[chan] = b[chan];
dp[chan] = CLAMP0255 (b[chan]);
}
b += bytes;
dp += bytes;
@ -1105,13 +1048,8 @@ gaussian_deriv (GimpPixelRgn *src_rgn,
{
for (chan = 0; chan < bytes; chan++)
{
b[chan] = b[chan] + 128;
if (b[chan] > 255)
dp[chan] = 255;
else if (b[chan] < 0)
dp[chan] = 0;
else
dp[chan] = b[chan];
b[chan] += 128;
dp[chan] = CLAMP0255 (b[chan]);
}
b += bytes;
dp += bytes;
@ -1121,12 +1059,7 @@ gaussian_deriv (GimpPixelRgn *src_rgn,
{
for (chan = 0; chan < bytes; chan++)
{
if (b[chan] > 255)
dp[chan] = 255;
else if (b[chan] < 0)
dp[chan] = 0;
else
dp[chan] = b[chan];
dp[chan] = CLAMP0255 (b[chan]);
}
b += bytes;
dp += bytes;
@ -1218,7 +1151,6 @@ fp_rand (gdouble val)
return g_random_double () * val;
}
static void
grid_create_squares (gint x1,
gint y1,
@ -1256,7 +1188,6 @@ grid_create_squares (gint x1,
grid_rowstride = cols + 2;
}
static void
grid_create_hexagons (gint x1,
gint y1,
@ -1433,7 +1364,6 @@ grid_localize (gint x1,
}
}
static void
grid_render (GimpDrawable *drawable)
{
@ -1619,7 +1549,6 @@ grid_render (GimpDrawable *drawable)
gimp_progress_update (1.0);
}
static void
process_poly (Polygon *poly,
gint allow_split,
@ -1661,7 +1590,6 @@ process_poly (Polygon *poly,
render_poly (poly, drawable, col, color_vary);
}
static void
render_poly (Polygon *poly,
GimpDrawable *drawable,
@ -1683,7 +1611,6 @@ render_poly (Polygon *poly,
fill_poly_image (poly, drawable, vary);
}
static void
split_poly (Polygon *poly,
GimpDrawable *drawable,
@ -1745,7 +1672,6 @@ split_poly (Polygon *poly,
}
}
static void
clip_poly (gdouble *dir,
gdouble *pt,
@ -2020,12 +1946,7 @@ find_poly_color (Polygon *poly,
for (b = 0; b < bytes; b++)
{
col_sum[b] = (gint) (col_sum[b] / count + color_var);
if (col_sum[b] > 255)
col[b] = 255;
else if (col_sum[b] < 0)
col[b] = 0;
else
col[b] = col_sum[b];
col[b] = CLAMP0255 (col_sum[b]);
}
g_free (min_scanlines);
@ -2044,7 +1965,6 @@ scale_poly (Polygon *poly,
polygon_translate (poly, tx, ty);
}
static void
fill_poly_color (Polygon *poly,
GimpDrawable *drawable,
@ -2224,7 +2144,6 @@ fill_poly_color (Polygon *poly,
g_free (max_scanlines);
}
static void
fill_poly_image (Polygon *poly,
GimpDrawable *drawable,
@ -2382,7 +2301,6 @@ fill_poly_image (Polygon *poly,
g_free (max_scanlines);
}
static void
calc_spec_vec (SpecVec *vec,
gint x1,
@ -2416,12 +2334,13 @@ calc_spec_contrib (SpecVec *vecs,
gdouble y)
{
gint i;
gdouble dist;
gdouble contrib = 0;
gdouble x_p, y_p;
for (i = 0; i < n; i++)
{
gdouble x_p, y_p;
gdouble dist;
x_p = x - vecs[i].base_x;
y_p = y - vecs[i].base_y;
@ -2445,7 +2364,6 @@ calc_spec_contrib (SpecVec *vecs,
return contrib / 4.0;
}
static void
convert_segment (gint x1,
gint y1,
@ -2459,27 +2377,28 @@ convert_segment (gint x1,
gdouble xinc, xstart;
if (y1 > y2)
{ tmp = y2; y2 = y1; y1 = tmp;
tmp = x2; x2 = x1; x1 = tmp; }
ydiff = (y2 - y1);
{
tmp = y2; y2 = y1; y1 = tmp;
tmp = x2; x2 = x1; x1 = tmp;
}
ydiff = y2 - y1;
if ( ydiff )
if (ydiff)
{
xinc = (gdouble) (x2 - x1) / (gdouble) ydiff;
xstart = x1 + 0.5 * xinc;
for (y = y1 ; y < y2; y++)
{
if (xstart < min[y - offset])
min[y-offset] = xstart;
min[y - offset] = xstart;
if (xstart > max[y - offset])
max[y-offset] = xstart;
max[y - offset] = xstart;
xstart += xinc;
}
}
}
static void
polygon_add_point (Polygon *poly,
gdouble x,
@ -2495,7 +2414,6 @@ polygon_add_point (Polygon *poly,
g_print ( _("Unable to add additional point.\n"));
}
static int
polygon_find_center (Polygon *poly,
gdouble *cx,
@ -2521,7 +2439,6 @@ polygon_find_center (Polygon *poly,
return 1;
}
static void
polygon_translate (Polygon *poly,
gdouble tx,
@ -2536,7 +2453,6 @@ polygon_translate (Polygon *poly,
}
}
static void
polygon_scale (Polygon *poly,
gdouble poly_scale)
@ -2580,7 +2496,6 @@ polygon_extents (Polygon *poly,
return 1;
}
static void
polygon_reset (Polygon *poly)
{

View File

@ -1,852 +0,0 @@
/* GdkPixbuf RGB C-Source image dump 1-byte-run-length-encoded */
static const guint8 mosaic_logo[] =
{ ""
/* Pixbuf magic (0x47646b50) */
"GdkP"
/* length: header (24) + pixel_data (24909) */
"\0\0ae"
/* pixdata_type (0x2010001) */
"\2\1\0\1"
/* rowstride (252) */
"\0\0\0\374"
/* width (83) */
"\0\0\0S"
/* height (100) */
"\0\0\0d"
/* pixel_data: */
"3)7C1G[\21+B\7\35""1\0\31""1\0\33""5\15\37/9Oc\31""4L\23*\77\7!8\0\35"
"8\0\30.\32'37Nd\22/I\10\37""5$>U\22""0L\20,F\34*8)<T\22%=\40.<\34""7"
"O\0\34""6\0\27,\34*7\"2B\25\"-\16$:\0\31""0\0\24(\24\40-:J[\40""4I\31"
"#37\37(4\31#3\30\"/\30\36\212MDr*\40f<4j,\40f&\32]#\30C01G@K&\40+\7\23"
"\37\202\0\22$\31\1\16\32,5=\36+6\22\35'\12\31'\0\20\37\0\17\35\27\40"
")/9C\22\34&\21\30\37\3\17\32\0\13\27\0\10\20(,2\36#+\13\21\30\33\40$"
"\14\25\35\0\11\21\0\10\20$'*(-2\26\32!\2\7\13\202\0\5\13\14\34\36!/2"
"7\25\31\36\0\0\0(\77T\1\35""6\0\33""4\0\33""3\1\22!\3\26(\36""3E\10%"
"\77\202\0\36""9\177\0\32""0\0\25'\30#.\33""3I\3\"=\0\36;\0\35""8\14!"
"4\16%:\16\31&1@Q\15\"=\7\34""7\16\34-\7\36""2\7\24!\36-<\31""2K\4!;\5"
"\40:\14\31%#2@\21!/%5G\10\36""5\3\31""1\3\31""0\17\23\"0\27!1\27!8\30"
"\31f%\33j8+^9,g)\36[\"\30;$$81=\35\25#\32\22\40\26\25\35\23\37*\0\17"
"\34\26\40)\"2@\2\23#\0\20\36\6\17\27\0\15\31\7\21\32\35)4\4\21\37\0\16"
"\34\1\16\33\0\11\21\15\24\32(+0\"(0\2\11\24\1\10\23\2\7\17\3\13\22\0"
"\7\16\11\16\22""5:@\4\13\23\0\7\17\1\6\14\32\35\40\11\14\17\31\34\40"
"\3\7\14\0\4\11\0\0\0\13\"6\0\33""3\0\31""0\2\24#$4C\27,>\5\26&\0\30/"
"\0\35""6\0\35""8\0\34""4'3>:Qf\2\27*\0\32""2\0\36:\0\36""9\40'2H\77L"
"5*9\37):\13\40;\6\33""5\33#/=GX#0F\16\36""2\0\34""6\0\34""7\0\31""1$"
"3A\23-E\2\35""7\4\26(\6\34""3\3\31""1\3\30""0\2\24(,\36$F*\"]G8\301\253"
"\213\312\262\214ygPzdYI+\37,%-\35\26#\32\22\40\31\21\36\40!*\35.>\7\30"
"(n\22\34%\12\33*\0\20\37\3\16\27""0:D\31%0\20\31!\2\13\24\0\14\31\0\15"
"\33\0\14\30!%*HMU\23\32%\5\12\21\1\7\22\0\6\17\10\14\21""59>(/5\20\25"
"\33\22\30\37\0\7\17\0\7\15\37$(\34!&\15\22\30\7\13\17\0\3\7\0\4\10\0"
"\0\0\21\36*\21#2\14\33(\32+;\21-F\1\37:\4!:\2\22!\17\40""0\0\27,\14\35"
"-@Uh\7%A\0\33""3\36)6\10\35""0\0\33""32/:3&8*\35.\33\26$\10\34""5\7\27"
"*2<N\25$=\15\34""6\15\33""5\6\25(\0\30.\15\32&3FX\4\37""9\0\33""5\0\31"
"0\1\21#\2\27.\2\25*,\"+V,6\203I*nD(\226\210p\203{n\201~z\335\326\303"
"\216^\77w>\36\33\24\31#\34$&\35%''/\32+;\0\23%\0\20\37\14\25\36\31#,"
"\31!)\22!/\0\20\37\6\26$\10\25!\13\17\26\11\17\27)/5=CL\13\23\37\4\13"
"\27\7\13\22$'-\23\25\34""37=\33#,\12\23\35\7\16\26\34\40$\2\7\15\22\26"
"\32\23\30\36\1\6\14\202\0\6\14\177\15\20\22\24\25\27\0\0\0$4C\20+C\11"
"$=\3\27*\0\26*\0\34""5\0\32""1\40""2C\36""9S\13$;\20\37,\10#<\0\33""3"
"\40.\77(6N\30'@\22\37""1&\40,*\35/)\34.\40\26$D/0$\35$\30%<\15\33""5"
"\14\33""5\14\32""2\20\32)=HT.CW\24'8\1\34""5\0\31""0\5\24\"-7D\34(7\22"
"\27!D\37(>\23\36v:\32z\\H\335\325\301\257\255\252\336\336\336\253\246"
"\227\207bGj5\26XKR8&2,\30&\33\22\34\22#3\0\22#\7\23\35<HS\21\"2\2\22"
"!\0\13\24\0\16\33\0\15\30\27\31\40>17(\31\40\40!'\14\24\37\4\14\27\4"
"\12\25),3\40$.\11\15\30\13\17\26\12\22\33\10\20\30\5\13\20""5;A\20\27"
"\36\13\17\23\0\5\11\0\5\13\0\6\13\2\6\13'''\14\14\14\0\0\0\"2A\6\"<\0"
"\34""6\0\31.%5C\20$6\20\35*#>W\1\40=\0\36""9\7\32-%7H\17\33(\37-D\17"
"\37""9\16\36""9\21\40;\16\32/'\33!#\30&,\40%j3(m)\35)\26\27\27\33(\12"
"\25'-8EHZk\32""4M\2\35""8\24!.\22#4\14\27\"#1C\22$;\12\34""4\21$:\13"
"\26&3\36$j@**\215q[\330\317\272\251\247\242\351\350\350\200|uRF:fB9G"
"6B&\22\40%\21\37\33\17\31\32%0\4\17\32\40+4\15\36.\0\22#\0\21!\33!)\40"
"&0\31\32\40@29#\23\33\40\17\27\27\13\22\6\16\30\3\12\25\32\35$\37#-\6"
"\12\25\6\11\24\16\21\26/49\26\35\"\12\20\25""06<\1\11\21\5\15\24\4\11"
"\16\27\32\35\1\5\11\40!#\24\24\24\202\0\0\0R\6\31*\6!9\0\30.\36""1A\27"
"3M\3!=\2\35""4\7\36""3\0\35""7\4\25$)>R\15,H\12(D\12\32*\11\25'\14\32"
"2\12\26+7%#\224M7jB2xl\\\276\244\202vXBgB8\216P@g7*&.9\6\"=\0\35""9\0"
"\33""5\40""2C\16)C\14&@\7\31+\5\24'\6\30.\6\25*+%.i:D\213L)\217]<\332"
"\321\273\247\244\237\343\342\342\260\244\217{_J\215C*5#0%\22\37!\20\34"
"!%.\30*;\12\35/\7\22\34\0\20\37\0\21!\1\14\27-3>\15\25%\7\16\33\36\21"
"\30\40\17\27\37\17\27\34\15\24""3##8\37\36\33\32\40\10\13\26\6\11\24"
"\5\11\23\34\37$)29\2\14\25\0\11\22\16\23\30\0\7\16\1\7\14$',\25\33!\6"
"\13\21\23\24\25\3\3\3\202\0\0\0\13\0\31""1\14\31$\23\40+\32""6N\1\40"
"<\0\36:\0\31""0\5\21\34)8F%5D\26""4P\202\0!\77A\1!>\30!-:08'\32#v<+r"
"0\33\276\255\224\206{h\234\213s\204lS\216VG\202=+\202<*c.!\15\30%\2\27"
",\0\24'\34""2G\2\37:\0\35""9\1\35""8\5\25%&0<\32\36(^.8L\24\37\211I&"
"\211J$\317\306\261\240\235\227\301\300\277\322\300\237|S>\234B##\30\37"
"\37\24\35\26\20\27%5D\3\27)\0\24'\0\23&\4\15\26#,5\35$,'.;\7\17\37\6"
"\15\33'\31\34(\23\27\34\15\24\"\26\26h;.Y\27\21H\22\15\32\23\26-!\"7"
"\40\36""4))\36'/\0\12\23\0\11\21%),\32\37$\31\35!\34\"(\202\0\6\15\177"
"\0\4\10\17\17\20\6\7\10\0\0\0\12\27#2H[\21)\77\2\27*\0\36""9\0\30-\17"
"\32$<O_\35:T\3\35""4\14(B\0!>\0\37<\0\27,<2;+\30%#\17\35\40\15\24\205"
"nZ\253\235\202vsn\325\325\321\207|w\206H8\201;*w7&D$\36=EX\",B\36&7\20"
"\34+\0\30""0\0\34""7\3\31/,:K\34/E\16!9\22\22!/\14\23k2\23[4\33\204\177"
"s\224\224\222\201\200~\352\325\256\204L6\2047\35E@M(\"2\40\32)\11\24"
"!\0\24'\0\23&\3\22!4>I!/>\4\24$\15\24\40\10\17\35\25\17\25u63g\33\30"
"<\22\17]K9\253yI\213Z4L\37\24gF@W*\"M\35\26""3$#\17\31!\0\11\21\0\6\13"
"49\77\6\16\26\2\7\16\3\11\16\0\5\13\0\4\12\25\27\32""048\14\20\26\0\0"
"\0\40""0>\13(A\0\35""8\0\32""2\1\22\"&2=)\77S\11)E\0!>\0\35""7\1\23#"
"\11\37""2\24'9\24!/H8C#\17\35!\15\33\32\13\25}`@\230\223\211\363\360"
"\351\243\241\235\351\350\343pKAf0#k4'@-0\40+C\20\34""6\21\35""7\25\40"
"9\23\35*\10\31*\40.\77\30+B\7\33""4\7\32""3\7\27+iJFIq\77""8lMD\313\302"
"\255\305\305\304\264\263\262\212v`\206=$[0&.(7\32\23$\31\23#\20\16\30"
"\11\26#\1\21\37#.9\24\"2\2\22#\2\21\"\4\14\26;..Z.(f\32\26O\24\20\236"
"\204k\314\253\203kYD\217g@V9.W)\"K\32\22E\30\21+!!!%+\32\36%\15\21\27"
"28\77\2\12\23\0\7\17'()\33\33\35\23\23\25\35\36!\16\23\31\0\5\13\0\0"
"\0\1\25&\0\31""0\0\30-\16\35*FS_4Md\5\35""2\3\">\0\36""8\3\23!5DR0Jc"
"\21""2N\3!<,\37*!\16\34\33\13\26D$#\204W+\216~k\364\362\352\333\331\321"
"\263\262\256\207\204\177\204nZ\234>(t\"\20\16\26*\202\17\33""5\22\16"
"\30/'6H\24*A\11\31)\4\22#\6\31""1\6\31""0=.1{A8m,#e)!\244\226\204\210"
"\204}\211pg\245kV\212Q=B*&\34\25%\202\31\22#\177\31\32$&4C\15\27!\12"
"\26\"\2\21!\2\21\"\2\17\36U>8\227T\77\1772\33J\26\14\212nV\275\235w\202"
"r]\330\327\324\215\210\177D*#F\31\21F\30\21""3\26\22""26=\17\25\36\6"
"\14\26\3\11\22\21\26\35\1\11\22\0\7\16//1\5\5\7\0\0\2\1\1\3\2\7\14\0"
"\4\12\0\0\0\0\27*.>L\25\"/K`r#>W\2!>\0\37;\0\26*\13\35-3BP\22""1M\0#"
"B\0\"A\0\36""9\20\17\31.+6*3Cq=9c!\26\206X'\255\250\237\212\211\204\211"
"\211\207\252\251\247\270\244\200\202A*\202%\20I36%\35)\16\27+\21\32+"
"\":Q\2\36:\2\34""6\31\35*)\40)\26\32'~JCn.%k+\"`'\37J2*_I>\231`K\227"
"V\77\231V\77\217Q;:&&\37\24\36\25\20\36(0;\14\36""0\5\27*\5\22\40\24"
"\27\36\15\22\33,\40\37\221L7\2021\30\201/\26l(\23pdZ\216\210~\325\324"
"\323\355\354\352\245\233\210\242\226~N60D%\37\40\33\34\15\23\34\3\11"
"\22\3\10\22\2\7\16\40$(\22\27\35\6\13\17""335\3\3\5\0\0\2\2\2\3%(+\7"
"\13\17\0\0\0\26'6%\77V\3\40;\2\24$\0\26*\0\31/\0\25(\25#/N_o\177)E_\1"
"\27+\0\36""8\0\26)\40*6GTh(;V\20$C6\35#\203$\31M\"\21ueO\260\244\215"
"\351\351\347\372\372\371\226\222\212\241\202\\Y&\35e\77DR(-I'+$\36%\13"
"$=\0\32""3\30\34(c<@P\"&<\"\"q4,d(\40L\36\30V,!\257[>\266P.\217=!i4!"
"\203J5yD2sIFs96E\40\37!,8\4\26(\2\23&\5\21\37W\77BI(,9\36\40h*\27\201"
"/\27j'\23fRI\353\347\334\266\263\253\265\264\262\276\275\273\311\273"
"\240|m]|NDn9-_2(\21\13\15\2\7\20\2\7\17\31\35!\37'.\6\17\27\2\12\22\36"
"\36\40\2\2\4\0\0\1\16\16\20\40%*\2\7\15\0\0\0+9F\24""0I\0\34""7\24&7"
"0H]\23,A\30+;D\\q\31""7S\0\"A\0\37;\40,8$3C!3L\20$B\14!@\13\40\77\26"
"\32)gAA]79^A=\323\276\231\226\216\200\331\331\330\250\247\244\250\232"
"\201]\77\77S).N#(O$)L$)\31\23\32\36\34#b;>U$(P\37\"C\32\35B\"\35]+\40"
"e5%\266R/\260\77\31\256=\26\247:\25t-\30\2026&X4)\206SPp1-i.*5#\"\35"
"\32\40\3\3\17\35)&,P14\202<\31\35\1775\25\26V!\21;*$\334\330\316\275"
"\271\257\303\302\300\264\264\262kid\224\211t_C;p<0j3'h2&>&\"\"#*\14\15"
"\22\26\35$\2\13\22\0\11\21\0\10\17\22\24\26\40\"%\34\40$\22\26\33\24"
"\30\35\0\5\13\0\0\0\34-=\6!:\3\24$&>T\6&B\0!>\2\">\2\32/\0\34""6\0\40"
">\3\33""2/Ia\6)I\2\27-\12\34""6\14\40\77\13\36;F6=f8<Y'+T$(jYH\222\203"
"h\222\221\216\360\356\350\220\215\210U<4\77\35!I!&L#'A\36\"R3:V(3>\31"
"\35P\36\"O\36\"E\34\34\245P9\2426\30i\40\13\2379\26\254<\25\251;\25t"
"(\20\2225#\234%\17]\"\30\203MJo1-W'#~G:}6$l-\35A'%B!%9\30\34""8\27\33"
"*\24\26\177q_\222\221\215\254\252\245\230\227\224\320\317\315\\PK\227"
"aL\233V;j7%Y+\40e0%a/$5()\21\22\33\4\5\17\2\4\13\0\6\14\0\10\17\12\17"
"\24""7<A\20\27\35\3\12\21\0\7\15\1\5\11\0\5\13\0\0\0\20\37,!3C\37""3"
"F\10\35/\0\40=\0\40<\0\33""2\23\"0$;O\7\35""2\25&5\24""5S\0#D\0\37<\31"
")8\15\36""4>\21\31,iADY(+W%)R#'\\:,z^J\314\312\304\200wm\251\212i\266"
"\217d^;3V''C\32\33,\23\27H\34&@\34\34f9%J\40\31\77\30\33F\33\21_&\25"
"a2#lG9cH<\204F0n,\24}dK\212^B\200H/T)\31l74c+(X/(\203=,x+\30v*\27D\34"
"\24O+)G\40\35E\36\33qaT\267\240}\271\270\265\347\347\344\244\243\242"
"\200zq\205J3\230E%\226A\40\224@\40R'\27\77""0//!!'%*\13\14\26\0\1\13"
"\0\0\12$(,\16\24\31\35\40$\16\24\33\202\0\7\16\177\0\6\15\14\17\22\17"
"\21\25\0\0\0/>L#\77X\14+G\10!7\4\25$\4\27'\30'4!=X\4&E\3%D\2\31/\4\34"
"1\0\33""3\21\"2%D`\12-M\20\40""2>\35!K\40$N!%F&*kE7\241X(M9(\263\215"
"e\217nKd;1\21252{\36\33i\30\25a-\36\200L0\251Z-y<\31bL<\207\200w\226"
"\220\203\334\322\275\342\327\301\242\232\211\322\316\304\354\350\334"
"\317\313\301\241\232\214\177q[\207sU\201oStg\\\225\204qbH;q+\31v*\27"
"l'\26^0%\177-\"{$\30}%\31g\"\27cO:\254\253\250\227\223\214\216\206v\274"
"\252\215J0!f.\31\1777\33o0\30""1-/'+5\23\27\"\12\14\22\6\7\17\1\2\12"
"\4\5\12'.4\3\14\24\2\11\17\0\6\15\0\7\15\0\6\15\1\7\14&'+\11\12\20\0"
"\0\0%4B\35""9S\12)E\13\"8>Sf(E_\24*>\4&E\0!A\0!@\5\33""03Ld\15+F%:N\15"
"1R\0&I\1%G$4D&8L\30%9;0:X,8g4\33m;\34\203C:q.$e\"\37i\27\24Y!\31\232"
"T2\231J\"Q)\22}eU\225\217\203\341\331\306\303\274\251\213\207}\204~q"
"\244\241\232V\243\242\241\250\246\237\246\244\236\247\244\236\252\250"
"\241\177}x\365\365\364\367\367\366\213\204w\300\257\222\313\270\230["
"E6V\"\25R#\25\272jA\237L%u+\27i\32\20R\32\21\227T\77wI4\261\235}\204"
"mV|A+n,\26E8\77*\33!&\31\33\35\40*\15\22\35\14\21\34\34\40'=EN%-7\34"
"\"(\27\37&\0\11\21\0\7\15\33\36!\17\24\30\4\11\15\33\35\40\30\31\37\0"
"\1\7\0\0\0\21$5\34""8Q\10\40""6*=N\"@\\\21""2P\15&>\0\24'\0\26,\0\24"
"(&6E\22""3R\0#D\7\40""6\7+M\0\"B\0\31""06FW\17-M\5$D\32\33)O\37,B\27"
"\"B!\24\225<0|#\27H\36\25O+\33\253Y/i1\25p`U\313\310\300\350\344\331"
"\231\226\215\244\242\236\341\340\340\371\370\370\273\273\273\370\370"
"\370\357\357\357\274\273\272\202\373\372\367\177\343\342\337\255\255"
"\254\360\360\357\335\335\334\273\273\272\360\360\357\312\310\302}yq\337"
"\333\321\241\231\220\204C\"\264R!\270V%{8\30|B*\211:\40\2339\32g'\22"
"l)\22\207-\16C($,\34%\36\14\26!\17\31\27\14\23\12\14\24\14\20\32(-4#"
"-7\31#.\30\",\4\11\15\0\5\12\25\30\33$*0\10\16\25\10\17\25\6\11\14\2"
"\2\10\0\1\6\0\0\0\4\26&$5E\32,<\32-\77\23""3Q\20""1O\20(=9Od\35:U\17"
".K';N\10+K\0!\77\2\23\"\37""3F$9L\20,E8J]\10'H\3#C%%1S02<\30\37""2\24"
"\31\2072&S&\32\256Z7}4\26cL\77\265\261\250\306\303\271\274\271\256\251"
"\247\243\350\347\345\236\236\234\350\347\347\325\325\325\214\210\202"
"\243\231\215\240\222\202\217~k\255\253\250\313\312\310\227\226\223\314"
"\307\274\306\302\267\247\244\233\270\267\267\333\333\332\226\226\225"
"\243\243\240\256\254\243\345\340\324\225\221\211\212eO\205>\32\212K/"
"\276Y/\2025\25\2269\33\2140\23Y-$U-(&\30\33\36\15\26\35\13\25\33\13\24"
"\27\20\26#*2\6\13\22""7=D\35'2\30\"-\25\36'7<A18@\31\36$\11\20\26\0\7"
"\16\0\6\15\25\27\31%%%\16\16\17\0\0\0\33*8%@XZ\5#\77\0\34""4\13$:\16"
"*D\40""5H\21""1N\0\"A\0!@\14#8\4$A\6\26%3GW#C_\7+K\0\40<!6L\4\"A\3\40"
"=2*2g67^+,G!!W+\37\253V1v5\30rf^\351\345\330\256\252\240zyv\321\320\316"
"\354\353\350\256\256\254pka\245\225{\241\216o\232\203f\330\260\201\317"
"\250z\206kJ\266\212W\255\177I\220lB|iQ\203zqwkc\201~w\251\245\231\224"
"\222\213\355\355\353\352\352\350\252\251\245pnk\341\336\324\301\274\263"
"\201I0\265J\34\254F\32d%\17a-\40g2.X\32\26R\32\27\37\12\13\33\24\32\26"
"\24\30)1:\11\24\40\0\13\26\26\34\"\31#-\25\36'$).*19\20\30!\16\25\35"
"\5\12\20\0\6\14\5\11\15###\10\10\10\2\2\2\0\0\0\24$3\4\"=\0\37:\0\36"
"9\6\30(&1=\20$8\0\40<\202\0!\77G\0\25)!2B,BX\12$;\0%E\0$D\1\31/'4C\33"
"*<\32(;3,6e45\\'(['(O#\35vG0\263\244\212\233\227\215\237\234\222\317"
"\316\313\301\300\275\217\216\213\217\206zyhP\244\216l\212jM\204Q5V3)"
"hC;a=2Q'\36{5\40u2\33h/\26gC4\177HAk-%pI5\224qY\226\205s~zs\255\253\246"
"\217\217\215\346\345\342\271\267\262\326\323\310\277\273\261k9\"\200"
":\32U,\40h3/V\30\24S\25\21N\23\20""6'*-/9\21\24\34\20\32%\0\14\30\0\13"
"\27\3\13\22*/5\31\37%\"',\27\36'\17\27\40\15\24\33\30\33\36""9<@-38\16"
"\20\23\203\0\0\0R\3\31-\2\25&\0\34""6\3\31,,:K\"6O\24'>\7\25&\7\27'\11"
"\31)\",6CYp\7&F\1\31""1\5\32,\4\32.\35(40A[\23&C\21$B\15\37:@\40$Z&'"
"X%&N63\322\305\253\216\204o~}z\304\303\300\235\234\230qh\\\262\224k\277"
"\227btN/s0\32\241:\26x&\12f<=d#%]\34\36@\22\17c\33\21P\24\13Y2,v<4g&"
"\35d$\33s3\30\251F\22\2117\14X6!\233~U\225|S\244\236\223\356\354\351"
"\247\245\241\216\215\206\212\177n\317\267\222kRCY\35\32S\25\21Q\24\20"
"7\26\25-.8\14\16\32\11\13\27\11\20\30\4\20\33\0\12\25\40&,\36'0\4\16"
"\30\2\11\21\17\25\35\14\21\27\37\"%\77DI\31\40&\14\23\32\13\21\27\2\3"
"\4\202\0\0\0\5\4\32""0.@R\20\"4\20\34*\21&@\202\10\36""9\177\13\32.g"
"RT[=\77""8+1\21.L\2\"B\1\35""84CV\36""4O\26$7\27*G\14\40>\14\40=\13\33"
"36\"$U$\40@\37\37\264\247\220\236\222{\317\316\314\275\274\272\207\202"
"x\240\212g\234|T\207V7\2044\"x\"\23H11J8>(\35(o\77@^\34\36M\26\27""8"
"0778J\34\36""1`:7j)!f$\33_\"\32B\"\32^>7F+2P(%\2238\37\201A\40\222qD"
"~tc\246\244\241\254\254\251\320\317\312\254\232}\272\243}C\32\24I\22"
"\17:\17\14,)0\22\24\40\11\13\27\11\13\26\6\10\21\1\12\23\12\17\24\27"
"\40)\1\13\25\0\11\22\2\10\16""66:539\33\34!\24\33\"\14\23\31\13\22\31"
"\13\20\25&*-\3\5\10\0\0\0&8I\21*C\5\37:\13!7\3\20\37\7\30/\7\33""3=4"
";Y:<L*-C%'\5\25'\1!@\4\34""3.@W\12\"@\7\33""5\10\22#\24\32+\34\34)5#"
"$\234F6x*\32\216\177h\226\214v\321\317\315\355\354\352\204\177u\311\257"
"\203\212M0o*\32z\"\22H\24\13>2<>1B*\33/&\27*@\36#U\31\33(\25\27=\77O"
"\26\30-\23\25*:!#i*![!\31>\35\32ZBIC\",7\24\37\177/\24\26c'\33U\34\21"
"9\23\13\\B1\242~L\261\255\243\365\364\357\307\306\301kbS\177nViB0m(\36"
"&\20\21\7\10\20\5\6\15\25\26\33""116AAG44<\10\12\20\5\11\16\24\20\22"
"659$\")\14\11\21\7\5\13\7\14\20\11\17\24\10\15\21&)-\20\25\32\0\5\13"
"\0\0\0\23%8\3\35""8\3\33""5\3\27,7-6L08\27\21\32kRUM,/K),>#$\200SFL/"
"+\26\34'4H`\11!\77\10\35""7`FIj;>b02N\"!\217.\34\221lW\275\250\205\220"
"\217\215\276\276\275|yt\263\232p~C*\2274\25M=BC8G1%5-\40""1&\27+%\26"
")\40\23$\31\13\22H9\77>JX*+<\25\27,\22\24(\30\16\25H(&317\34\40)6\27"
"!6\23\36""5\22\35""2\36$R4<=\33$+\20\26\241B-T+\24\222pB\251\247\241"
"\230\227\224\361\360\357\247\230\202\250\201Nz\35\16k\16\1bB>q<69#$\26"
"\26\40\15\15\27\12\12\25\12\12\22nGAd(\36!\21\22\14\12\21\12\7\17\11"
"\6\16G=>2!\"\36\25\26\30\35\"\0\5\13\0\5\12\0\0\0\0\24(\22\35+\15\26"
"\">-4W1;;\30!F,\40P78M+.]@#&tI>\217J6\210@+X,\40\34/F\10\37<\15\32-m"
"CEY%(X#&O\40\"_'\33\312\264\223\202vc\364\364\364\303\303\302\232\202"
"eR4#k#\16\77&'<.A)\31.(\30-\40\23$\37\23#\32\23\36#$+NVb8GZ\15\40""7"
"\21\26%\21\22#\17\20\31""7AJ/BS\14\"7\2\30.\10\14\27&\15\25'\15\25""5"
"$)I)24\21\32'\15\22\2371\31\201\34\7;!\22\250\242\224\262\256\243\372"
"\371\367\346\344\342\244\210^\201G'[&\37t6/d\36\26b\36\26+\16\15\10\7"
"\17\11\11\23+\36\40o5+Z\27\14J\23\12\12\6\13\10\5\14\23\12\14@34)\23"
"\24\35\10\11\3\3\6\0\4\12\0\4\11\0\0\0\17\35.QFS3&5/\33$<\30!aA1\223"
"b<>&\37""7\36!V4,\221O<\210\77*\205=)U)\37b5:4\33%+\40'k<\77\202X#&\177"
"V#&\\E<\213}g~}{\351\351\351\246\231\212\330\260\202pPIh26=\34!\37\23"
"\"&\26*%\26)\35\22!,+3JSa'2@!2G\6\32""2\4\30/\23\31#EBI5.8\22\34)\1\30"
"-\0\26+\0\23%\24\36)5:G\30\36.'\",J*21\20\31\36\14\17q4'm9/v9-qQE\306"
"\276\251\333\332\330\350\350\346\201{qtZ=w@9e\40\30d\36\26c\35\26O\30"
"\22h82D\26\21Y95d%\33Y\26\13O\24\13P.&\203E4\203/\27H53)\23\24\34\10"
"\11&#%\27\30\33\15\16\21\0\0\0>:F2%4)\33+$\27%W</\212\\:aQB\265\261\246"
"\320\314\277ykah1!\201<(x7%M0%X\35\40c\31\37E\23\27I\"#Q!$V#&J\36!\201"
"wm\270\261\237\347\347\347xwv\275\234v\215qPuKN\\\34!Z\33\40;\22\26&"
"&1\32\35*9>G;HZ\22!8\11\31""0\7\25&\6\31""0\4\21\"A>E2+6#\33'\32\25\36"
"\12\25\40\16\31%\31\37'',=\5\14\37\0\7\33\14\15\32<\36&!\24\32^@<\201"
"C7p(\33l$\26]\37\23\216\203t\253\250\240\270\270\267\236\230\216\251"
"\234\211j`(\"c\36\26b\35\25`\35\25P#\36w,\"Y\22\11Q(\40\\\34\21M\23\12"
"5\22\13\2077\40\200%\13y\40\7B/-!\15\16\25\11\11**.\7\10\15\6\7\13\0"
"\0\0KAM*\34,(\33*(\32)(\32\35\206xf\243\240\225\243\240\226\237\235\225"
"\215\213\205\225\222\217\222~wS6,\262\177N\244p\77pB)F\37\34\216J\77"
"Y\40\30D!\34^KE\337\324\274\243\237\226\373\373\373\247\246\245\204v"
"br\77'{IMZ\32\37S\30\34""3$,&=S\11$=\11\34/\13\32/\12\32""0\12\31""0"
"\10\26*\21\27!6-/HAK$\34(\"\32&\34\30!=GU\30%9\16\25\"\15\24'\0\7\32"
"\0\6\31\5\11\23>=E,8F\"\26\32k%\27g\"\25Z\36\22j-\33~iU\225\222\214\371"
"\371\371\252\251\246\345\327\274wbTH\32\22C\26\20A\25\17H!\34]4'\216"
"nPcL=lQHM\77""8\253\241\220\226\202p}ZIc3\"3!\36[7*s<(\33\23\23\3\4\11"
"\3\3\10\0\0\0\30\24\36\202$\30&\\0\37#|J0\237\220z\307\303\273\374\374"
"\374\367\367\367\260\260\257\366\364\360\372\370\363\360\356\352\252"
"\245\237x^E\226f7\202F7\2153%h$\30\263_:xP9\246\235\210\272\272\270\354"
"\354\354\247\240\223\251\215q\232D\35_,0M\26\33,\23\26*>R\4\37""9\0\34"
"6\0\33""5\2\23$\11\30.\11\27,&%+}XQP&\37""2*3$\34(\37\30\"'-8\27$7\7"
"\25)\5\17\36\3\10\25\7\15\31\6\13\26EKS!.>\1\20\"\0\15\34""6\36\33>\37"
"\34Z)\31\260E\37\215]@\225\212u\355\355\355\333\333\333\272\257\232\224"
"\200j\317\200N\207B+\254@\"c9&\275\230njT<\306\277\261\346\334\311\330"
"\317\274zsf\326\310\256\341\323\270\311\274\244\205^N~;!w0\25K\36\16"
"\26\26\31\16\15\20\0\0\0\77@J,+8$\"-N1$\202A\36\200cK\251\236\210\255"
"\255\255\234\234\234\253\252\250\370\366\361\202\371\367\362~\320\317"
"\312\307\304\275\241\232\221w\77""4s$\27\201<\40\250I\36\206iY\271\265"
"\255\223\222\220\207\207\205\326\310\254\226cD\1772\16\77+170=($4\12"
"\34-\0\34""6\0\33""4\0\26*\37\40(<2:\37\33!rF>R*!\216yd1*)\27\22\32\30"
"\27\36'3D\10\26+\7\24)\6\23%BLU\32,>\6\27(#-:\3\22$\0\16\40\4\15\30N"
";B8\35'2\27\35c\37\11v7\34\255\233xyws\264\264\264\204\177u\216lS\310"
"q:\204=\36\2372\23Y$\23\241\235\227\254\253\250\236\232\220\242\236\226"
"\242\240\231\223\221\215\201\177z\243\235\220{tg\206UBw2\27t/\24H#\25"
"304\20\14\21\0\0\0MMZ\35\35/\36\36""0\"\"3\36\30\36W@9^IB\223\211u\316"
"\301\241\210\201o\245\244\240\331\327\323\343\341\334\243\242\235\351"
"\345\332\230\212~\256mKs:\37d)\31Y1\34\241\233\223\351\345\331\253\252"
"\250\267\266\263\250\233\202o6\34O/$HCU\"\35""3\35\30.\17\20\34\12\34"
",\4\21\36""5*0O8A\77&0\77&/<#\"\260\235\201\266\240\200\177dT\255rU\202"
"Q9\21\25\37\6\21\"\6\20\37\11\20\35""1<G\10\33.\0\23&\12\25!\1\16\36"
"\2\14\27-(-\77&.\202+\17\31>&\15\26""2\32\21vl_\363\363\363\374\374\374"
"\370\370\370\231\177o\301j3o6\26j(\27}bK\245\226\177\325\324\320\274"
"\274\273\371\371\370\346\346\345\260\260\257\371\371\370\356\356\355"
"\267\267\266Z1\"W#\17Q\40\16""8*(\31\25\32\7\3\10\0\0\0""66C\34\34-\27"
"\27'\35\30\40bCB`53V(&L&\35o9%e;'\177TC\200K7|SD\214\203{\213}r\251g"
"D\253Y.w8&\210%\34\271\215e\242\222\177\323\317\304\306\306\305\264\263"
"\261\216bS\241W=\226H--\32\37\34\30-\31\25('1\77#9N\27(:)\36'7\37(\202"
":\40*\177/\32\"UC3\222\213\177\207fU\251eD\241\\:S9/\77BN/3B\40#41;F"
"\7\32.\0\22%\32\"*'2<\30(7!!*7\35&*\17\31(\16\27)\21\23|6\40\244\207"
"a\363\363\363\376\376\376\367\367\367\213\203~\226b\77\203Q1\264[H\177"
"5\37\252\210Z\250\231\203\200\177{\244\237\230tqk\264\263\262\273\264"
"\252\267\254\233\243\226\201|WIzE4v\77-7#\36\22\16\23\7\3\10\0\0\0\23"
"\26!\25\27\"\25\27\37dCBZ-+T%#S$\"J\40\34\2205\25g2\37\240V;\225B#\225"
"B$\\,\32d=-\216H$y<\37\230:2n\24\14\314\232j\204dD\201\177y\250\250\247"
"\204\177}\251gP\232E(\231D'z7\40\27\22\34\37&3\34""4J\1\34""5\0\33""4"
"\4\35""3\16\21\34""0\34$/\33\"nL6\220[2\346\344\335~`Q\224V7|H.@>G$'"
":\32\36""1\27\32+\31#.\3\21\40\2\16\32""2;C\22$3\0\23$\3\17\34""2\31"
"\"&\15\26&\26\34p9-\203(\20\261\212W\263\257\252\316\316\316\240\240"
"\237zoe\337\230d\220Q.\261F.\230-\25W9,X=/q]D\250\207]\251\211^\214s"
"NeV\77\227\205q\202p^\203L9u5\37t4\37mI!\24\13\11\14\6\3\7\0\0\0""4>"
"H\"8L\10\37""57\37!Q$\"L\"\40D\36\34""0\30\27H77B68\221E)\223@!\210;"
"\37P.)^5>H!)>\35\37\217&\35m\36\23\314\227d\233\210t\366\366\363\351"
"\351\345\246\243\240\234ZD\230D(\220@%W-!9;J\22\32&\3\34""4\0\32""3\0"
"\32""2\0\26+/,5M9@8#\35\212S*qB\35\332\330\320zdY\211U<f=*'(3\32\36""0"
"\31\35""0\24\27&23=\32\34+\15\20\40%.7\10\33+\0\22\"\0\17\34!\26\33Q"
"DI]JRV'\"\211!\11\212i\77\177{u\326\325\322\273\270\262\316\311\277\261"
"p\77\210H,\2479\"j(\34l84Y\32\26O\33\20\245@\34\234:\27v(\15D'!g0&L."
"%v<(p3\36[)\30""4'$+,0\22\23\27\0\0\0""4BN\7!8\0\31""1\6\22\40""6,1#"
"#,\37\"*`^k\77>P\34\33/7\32\23_+\30C\37\23[9@K\35'H\31#I\33%C\22\24n"
"*\32\230rL\344\343\340\202\376\376\372K\326\326\323^2#c-\32D\"\27=\77"
"M\34\40""5\22\25)\15\30#\11\32)\2\21\37*$,L2;9\34&5\32$\37\17\24K1!\244"
"\242\234\211fT\245[8\241T0h7\40\23\24\36\24\27%\17\21\34,/=\1\4\26\0"
"\3\24\22\30\40\11\25\40\10\20\30F@EfT\\G/99\40*2\32!{\36\10YI;\352\351"
"\346\344\343\337\276\273\264\354\347\334s]M[,\34[!\25o\77<W\27\22R\20"
"\14C\16\12O&\31R$\26\77!\32n2([\26\13X\27\13=\24\12>\"\31'!\40\40!%\4"
"\5\11\2\3\10\0\0\0)7D\5\36""6\0\31""0\25$3%;P\7!9\3\33""3\27\33+\31\27"
"-\25\24'1;I)<Q\26';=!*\202H\31#cG\30\"8\23\33@'\35~iQ\372\372\366\376"
"\376\372\367\367\363\244\242\236\255t\\\273gErC204G\24\27-\20\23$+:H"
"\23*@\17&<$\40,8\33%1\26\40\40\17\23|Q7\216P)\333\330\317\214iX\244Y"
"5\235Q-}A$mQNZ1-C\40\35\34\35)\1\4\25\0\2\20.9D\35-=\32&3D1::\40+8\36"
")5\35'*\27\37G\34\23\270\243\213\275\266\253\337\337\333\303\300\267"
"\266\262\251\212UB\242I)m-\30d+'R\21\14J\17\13/\25\24>39\40\23\31\32"
"\14\17U\31\16W\24\11J\21\7""0%$66;\13\13\17\6\7\14\2\3\10\2\3\7\0\0\0"
"\21\35(\6\27'\1\20\36!2C\6\37""8\0\32""3\0\31""2\1\22$\26\26#\32\36*"
"\"5K\5\32""3\4\32""3\10\26*6\24\35;\24\35.\20\27J&%z<,\262\204Q\317\316"
"\312\342\342\336\244\244\241{ia\275mL\263W1\201>$\25\30*\17\22!\23\26"
"\37$9M\202\0\31""1>\0\27.\33\22\34,\32\40jD0\257a0\215H\35\315\311\277"
"\205cQ\213I)m8\40O&\25{TPU!\34R\40\33!\22\24)!&)\37\40\33)7\12\34-\12"
"\33,\15\24\36)\27\36(\30\35'\27\32\205YN\231C,\324\275\235\244\221u\246"
"\245\242\220\216\207qd\\\251W:\2329\27y-\22D\22\16""8\17\15*\22\22<3"
"7\36\20\27\25\7\16\24\6\15\40\16\15""6\30\24%\31\30,,1\7\7\15\3\3\11"
"\10\10\13\7\7\13\6\7\11\0\0\0.=K\24)>\23':\10\26#\0\26,\0\31""1\0\30"
"0\16\31&*0D\12\20\40\7\32/\202\4\31""1H\4\25(24=56E\35\37""1u60j&\30"
"\303\217W\203|r\235\235\232\356\356\353\240\224\216\266a\77\252R.u9\40"
"IHQ20@\40\36.\17\37""0\0\31""0\0\27-\0\24&\20\26\37oY]Z8=T)\26|\77\31"
"\272\266\254v]O\225L0\262Q+r.\23rGDT\40\33F\34\30aGBc=6W/'4\35\32\11"
"\25\40\10\27%%\40$dDFM&(A\32\34\224J8~2\33\300\250\206f]O\266\266\264"
"\272\267\260\265\256\241\214<\40\2268\26p*\21M>\77\77'+.\22\27#\26\33"
"\32\15\24\23\6\14\21\13\16""049\26\34\"\16\21\26\26\26\33\4\4\12\3\3"
"\11'')\30\30\32\13\13\15\0\0\0(=P\202\0\30/\177\0\27,\15\30\"\23#1\5"
"\23!$)7\11\21)\0\7\37\17\26\"\23\"1\10\26$\40%0-0D\26\31""0\22\25*>\30"
"\27A\30\17\202]5\306\303\275\261\257\251\354\354\351\251\246\242h<&v"
">,Z%\27MKZ\32\27+\30\25)\15\16\32\22!.\25\"/\21\33&zdg\\6<A\26\35""0"
"\21\25d9%ie^th\\\221R5\240;\23g(\20d51L\35\31H.*b<5R(\40Q'\37E\"\33*"
"\"$\40\34!T/2A\25\30>\21\24=\21\24@\23\20e*\30vod\343\342\340\353\352"
"\350\306\300\266\253\244\231e9'_'\24B\40\26O8<'\11\17%\10\16\32\7\14"
"\23\10\15\31\15\16,/4\12\20\27\0\6\15\0\5\12\4\4\11\3\3\10\6\6\11,,."
"\2\2\5\0\0\3\0\0\0\35""2F\0\27.\0\24'\15\33'*<M\21(=\12\"7\6\20\35\1"
"\11!\3\12\34.\77P\24,B\17'>\11\30'\21\24'\22\25+\20\23&^,.s;'\221T&\321"
"\316\307\317\315\304\275\275\273\237\236\231\315\264\213\214D0\214+\24"
"75C\32\27+\26\24%*1=+>P\13!6\2\30.9)0C\31\40+\17\23yD,\237H\36\303\274"
"\255\271\264\243\332\312\252\257\226yY9'pZRXIA\11^A;T+#O&\37<\36\31""2"
"(-.)6\31\24!%\16\24<\20\23\202=\21\24&7\17\22^E5\244\217x\361\360\356"
"\331\330\326\275\266\252pSE\275\\5y7$f)\37D+0&\10\16%\7\15\34\11\15^"
"CAS\"\35\26\17\21\2\10\17\0\6\14\0\4\12""025\32\35\40\15\20\23\33\33"
"\35\2\2\5\0\0\3\0\0\0\3\22!\5\23\40\16\30!\37""3F\5\36""4\0\31""0\0\30"
"/\0\24&\13\21\34\35)7\22+A\202\3\35""5\177\2\33""1\40$-((4\34\34)`-/"
"\\\37\27\270i.\245\234\222\302\300\270\202\201\177\210\206\202\336\301"
"\223\223U;\2310\26%\35'\25\22#\26\34'\34""0C\1\30.\0\27-\0\26,\7\20\36"
"3\32\35_<0\267X*\2127\17\322\314\273\337\332\306\257\243\213\341\316"
"\251\230\214s\353\341\312\350\336\305sdXL&\36""8\35\27)\40\"$\40-\24"
"\17\35\23\16\34\21\14\31+\23\23""3\17\21:\20\23;\40\35\304\231m\256\241"
"\223\344\343\342\266\264\262\203~v\247U3\264F\30s/\34j\36\20""4\32\37"
"$\10\15\40\7\14""5##_/+F\16\11,\11\6\3\6\12\3\5\11\10\11\14#&*\1\5\12"
"\0\4\11\1\2\5\0\0\3\0\0\2\0\0\0)3<$7I\15!4\0\20\37\0\26+\0\27-\1\23$"
"\35+8#8K\14\33*\3\30,\3\34""4\3\33""2\4\24$@\77K\37\35""1\31\27+\40\20"
"\32N\16\20\242Y#vcR\217\214\204\362\362\362\351\351\350\245\221r\250"
"tQ\206)\23F12U44.\34\40\0\22#\0\26+\0\26,\0\23&2/4|ZZU'&\220=\26}2\16"
"\304\277\257\224\220\203zvj\240\226\203z`J\222\205s\264\253\227\210\202"
"rf]W\201WC\204\77\37\33\15\17\21\15\31\21\15\32\17\13\25vD7p1\40\177"
"J\37\27qXD\247vD\331\327\324\360\357\355\202\201~\250\243\234\226O*\260"
"C\26s/\34l\35\16>!\32^-\34v4\31^;4P\33\27D\15\10""6\22\17m<9W\34\27B"
"\17\13\12\13\17\0\4\11\0\3\10\33\35\37+,.\25\27\31\0\0\0!/;\5\34""0\0"
"\27,\0\25(\23\35&\12\26!%3@\24*\77\1\30/\1\31""0\3\26(\6\24#%'1)\37&"
"A@P\27\25)\26\24(\26\22\37zNFu<1\201e[\331\323\302\320\320\316\343\343"
"\342\203zk\241}Wc/'p;:[\36\35Y\34\33/\23\24\17\34)\7\25#ZILxNNW\"!Q\33"
"\32L\33\24h,\17nld\350\342\321\346\337\313\246\202e\317w<\215H\36\177"
"9#\232\222\204\356\351\331\214gR\232B\33a*\23D16-\31\37\40\21\25\213"
"L<z*\25|,\27^\"\22xl_\307\306\304\241\241\237\327\325\320\232~l\311k"
"5\214;\24l%\21[.\"\201YA{2\20\2234\12T&\32G\22\15""6\13\10V,(M\16\11"
"G\5\0@\4\0""7%#\34\24\26\11\12\14#%(\4\7\12\1\4\7\0\0\0\10\24\37\1\27"
"+\0\26*\3\22\40):I\11\36""1\10\30'\0\30/\0\27-\0\26*\6\22\36_OUJ.9+\24"
"\35.,<\177\30\26*\25\24&S43\234K=\223;,v3'\313\304\265\306\304\275\246"
"\246\246\305\300\267\234\210hf98[\36\35X\32\31Q\31\30""1*2\40+=\27\33"
"&@!!M\32\31P\32\31Q\33\32G\27\26^M>\301\275\260\235\230\212\241\211q"
"\313v<\237P\35\250K+\212/\20\312\253\201\267\256\233\224\177m\215<\27"
"M.+A\35$5\17\27""1\15\25R!\26w(\24v(\23g=1\360\356\347\340\335\326\242"
"\241\235\337\336\327\223Z8\256V#e5\31c9'\225\220\211\214\203p\254\236"
"\202\222\200gV@/nL4O5&[#\37G\5\0F\5\0""6\13\10W<:D$\"9\40\36\11\7\10"
"\0\2\5\0\3\5\0\0\0\0\22$\22\34%\12\27$\33'1\23(;\0\27,\0\22#\20\30\""
"#!)/\"&A37K0:4\25!,\22\34\26\23\40\24\22#\34\26!\231XL\224=-\2179*s."
"\"cXO\257\253\240\316\316\315\346\346\344\307\261\216gI:W\33\33Q\30\27"
"5\31\33*4E\11\26)\11\26*\12\21\35M*%\77\26\24I\30\27N3.\246\224w\347"
"\343\323\247\243\225\246rH\253W\37\234J*\301\77\25\212F(\334\270\207"
"\233\200\\i_RK%\23G'.4\16\26""3\15\25""0\14\24E!\35k'\30R\32\14\232\217"
"\211\177\367\364\354\365\362\353\247\245\240\213\206\200}>\33]5\40\262"
"kI\214C\40\350\345\333\327\323\311\213\211\206\263\262\256\200xo\250"
"\202V\265\205ME\31\17E\5\0\77\4\0C)'J*)\77\35\33=\34\32)\26\25()*\16"
"\17\21\0\0\0\3\21\36.=K\16!4\13\33*\4\31-\0\27,\1\23$]FGQ--F!\"8#'>!"
",4\25!*\21\33f:3d*!S+$\240SE\2066'\\%\33p\77(~I+\207\204~\244\243\241"
"\247\247\246\250\234\211\234\207gY4.b3'D+&\23\36""0\7\24(\6\22%\35\30"
"\35\177B6i)\35J\33\23\231\214z\241\215m\354\350\330\224\220\203\313\264"
"\215wP5\304J#\2712\6\224dF\331\263\202\231~Y\315\255\200~S:=\24\20.\14"
"\23""2\14\24*\14\21\213;,\211!\15uZI\232\225\214\364\361\351\346\344"
"\334\210\204~\217\\J\251P4\222\77#q/\22j.\20\346\342\330\236\233\224"
"\336\336\334\364\364\362\260\260\256\352\352\347\257\246\233VD3lTNA&"
"\33A*'=\35\33""8\32\30(\23\21(&(\22\23\26\4\5\10\0\0\0\",4\33.@\0\25"
")\0\24(\0\17\35\0\23%\25\31\"[9:D\35\36B\34\35*\24\30""3\26!/\23\36("
"\20\26s*\34j\35\20R\31\16\177y5(Z,#r;-\235N$\257O\32\245\226\210\354"
"\347\332\241\236\227\234\231\223lTD\244\\D\225B'\220>#6\34\31\7\21\""
"))3J69w8,l%\27j$\27|aJ\213z_\300\273\255\206\203z\255\242\215\310\256"
"\202\220:\31\247,\5\240\177\\\304\241q\224}\\\273\230h}=,\\\36\17\\1"
",.\16\20K!\36\2301\36]\30\12\311\263\223\210zd\246\244\240\233\232\227"
"hOA\263S3\251<\30\245:\30n+\25m=.\177i^\221\213\200\300\267\246\253\247"
"\241\234\234\232\306\306\304\247\247\246\261\261\261\311\306\275\214"
"mQ\206Y26$\"8\40\40.\26\25\35\34\36\1\2\5\0\1\4\0\0\0\23\40,\7\33.\0"
"\24'\0\21!\40\37%K=A0!$E&'D\35\36B\34\35I0(\221Z:|A\"S.\32\244\224{\252"
"\231~\241\220uwTL\235K8\2226!t*\26\2019\23\207Q1\320\314\301\250\247"
"\241\314\313\310\221\177x\224A'\220<\40\2139\37Z*\33TIOW@J0\25!L\37\31"
"m'\31h$\26V;.\241\220r\303\253\202\243\222s\337\333\313\226\207m\204"
"s[\235\204t\241\227\204\230\216{{iN\215jF~,\30X.&\2006*r%\27S\37\25\203"
"\37\14vZH\313\263\216\237\230\216\367\367\367\243\233\221\177\303\241"
"|}2\30\2305\25i&\17yC3\2075\34\203/\25_1\40\264\251\225\314\301\252W"
"SL\247\247\246\363\363\363\365\365\365\236\236\234yiW\235g7N1/5\16\14"
".\6\4\22\2\1\0\0\3\0\1\4\0\0\0\32$-\30%0\12\26!\32\26\33E063\33\"0\27"
"\36%\21\25@\34\34>\33\34e@0\264]+\206E\36uZI\243\237\230\240\224\201"
"\232\211n\211UH\2227!\2172\34\205/\33[1\"\201F$\236\226\216\365\362\352"
"\221\217\213\311\310\305O7-b-\31R.$dSZ@&2-\20\35,\17\34#\14\23V\35\22"
"`!\24\212t[\340\303\220\336\277\211\254\224k\224\210v\237\233\217\304"
"\277\260\340\332\306\244\236\216\230\205i\210nMY8-T\37\32jA:x+\35r\40"
"\22r!\23E\22\11\237\215pqh[\364\364\364\276\275\274\270\235~\271\227"
"oY>9C\40\40""8\27\24\217E-\200+\20})\17c\"\16b<2d2&y[J\316\272\231\234"
"\220z\226\221\210vsqW;,kF'G%#.\5\3-\5\3!\7\6$$%\11\11\13\0\0\0-9D\12"
"\34-\7\31+\13\27%\31\16\23*\24\32-\26\34#\21\26RA6Q;,bNB\254\233\216"
"\343\341\332\300\276\271\355\354\352\354\354\351\220\216\211\201G9\214"
"3\36\177\2070\33c(\37Y##\252W%\220X5\347\344\334\320\316\306wvt\245\241"
"\225\223Y2\204I%3\32$-\20\35+\17\34#\15\27""8#%:\34\34q<\37~hJ\323\266"
"\203\312\256}iS8\301\203H}^>\223\215}|nY\270\227m\266\222cgH9r42T\13"
"\11Y*$u&\31q\37\22o\37\21O!\31\302\276\263\267\264\257\275\275\275\213"
"\177p\273\231s_=5L\27\27;\2\2""2\0\0M\32\12\\\37\13H\31\12c5){2\37q!"
"\14j\37\13jQ>\245\224v\211{bmL;\214M-`1\32""4\23\20,\5\3)\4\2%\34\34"
"\25\26\30\5\6\10\0\0\0""9GU\1\24&\0\22$\2\21\36\77""35@)*&\24\27[J9\255"
"\214`\224\210v\225\223\217\264\263\257\277\276\270\233\233\226\335\334"
"\331\237\224\206\236\204eZ:5V'\36H\35\24c*,e\24\27h+\25\245N\32i\\P\270"
"\270\266\335\335\333\255\252\241\236\210s\274`$G#\25*\24\33\36\13\22"
";\32\33>\21\22$\2\2\244M\31yV<\233\212om[D\220E0t0\26{E\36\203R$eL5c"
"H9@*\"o31V\11\7P\5\4=\23\15Y\33\20\\\32\17W\31\17\242\230\216\276\271"
"\253\355\354\352\212\210\207z_IQ5*K\30\30:\1\1\6""9\0\0""1\0\0;9=*+2"
"\37\35\"d(\31\202p\40\13Kl\37\12O&\34g=3H\33\21\202R:\206C!|<\35""7!"
"\30/!!\37\23\24!!\"\5\6\10\0\1\3\0\0\0\37-9\1\23$\5\20\34D35M,,\77\35"
"\35B\40\40E-#vcJ\332\330\322\242\241\236\364\363\362\322\321\320pol\272"
"\243\205\326\264\210x^Ik=7Z(!\\,%<\30\26M\13\17H\15\15a/\21\270\221e"
"\216\202u\373\373\372\302\302\300\233\226\212o\77\40\211SA\227Q;~B/K"
"#\31$\4\3\33\1\1\2035\6\217~i\314\265\221\266\241\177f*\26\212\"\6\207"
"\"\7Q\26\5cFDQ!\40<\22\21Z\33\31U\7\5P\6\4a*\35\255P-\2116\27[I\77\313"
"\306\267\267\265\261\341\340\337\222re\250^B\216@\"3\13\5\2028\0\0\2"
"(\15\16/07\202\21\22\32#\27\15\17b\34\11o\37\13\\\33\12Z2)S\33\16M\24"
"\7Q%\24{=\36A#\25>:;&!#\35\27\31\15\12\13\3\4\6\0\1\3\0\0\0\5\20\32\21"
"\33%\37!'7\35\35<\32\32=\32\32;\32\32:!\36\244\217v\267\261\245\240\237"
"\235\265\262\260\207sauL)\177cPqR@L2,^,%\202V\"\33\177P\40\32<&&O59>"
"#&\253\201U\241vG\266\265\264\231\231\230\262\262\260zUI\227F-\221:\37"
"\221:\40\215;!f-\37f4(\231P*\235\214v\313\264\217\300\251\205rYK\200"
"KCw<2S&\40nEEG\23\22E\22\21<\13\12Q\6\5K\5\3`)\34\261H!\216\\G\346\341"
"\323db\\\237\237\234wd]\243W:\231A\37\230\77\35u1\27,\20\17)\1\1.),\33"
"\34$\21\22\32\20\21\31\21\22\27*\40\40O\27\10M\"\27a.\"N\24\7J\23\6-"
"\22\13B2+400'\"#\30\22\24\27\21\23\22\16\17\36\36\37\4\5\6\0\0\0;BI\""
"0\77\11\31)\5\20\33\32\15\17'\21\21\40\16\16`E8\252\211b\262\217dlU\77"
"\263vB\272s6lA+t94d!\34H\26\21""6\26\22L\36\31K\36\30A%#W6;@\30\37;\22"
"\31""7\34\27zY4QI\77\274\271\262\330\330\325\301\271\264\2047\37\217"
"9\37\2148\36h+\33\2104.m&\27\260S\"\214mR\312\262\216\227\203g\207NE"
"\2057,\2023'U\"\33X)(E\22\21D\22\21""6\27\27X#!A\14\12b5!\224M1\350\341"
"\323\337\332\313\276\274\266\342\337\326fPA\212>\40\227\77\35\221<\34"
"X,\36L133\30\31Y\37\26\31\21\22\32\20\21\31\17\20\25)),\14\14\20\2\1"
"\5+\27\23O\31\14F\22\6""2\23\15:68\34\30\32\21\15\17\40\32\34\27\21\23"
"\26\21\22\32\30\31\36\36\37\12\12\13\0\0\0.:G\2\23$\0\20\40\1\15\30""2"
"5>37C\25\30#v;-b$\25`D.S<0d;&T0\33_2-a\35\27]\31\23R\26\21""34<\33\40"
"*\23\21\30P59\77\27\36:\21\30""8\21\30;\36\35\234YF{RE\360\354\342\246"
"\244\236\346\345\343VB8o6\37c)\31\20582\203\33\23j%\26\256Q!gC,\234\212"
"mpM@\211>3\2022&\1771&M%\37L,+:\31\30""0\20\17W*(h\27\24\200G*\216S&"
"\221\212\202\265\261\246\233\227\215\341\336\326tcU\274o9^0\27i0\33P"
"$\24R:;0\20\22*\12\14(\13\15\16\7\12\11\12\16$$(\16\16\23\202\0\0\5f"
"\7\7\12""7-,\"\32\31#\40!\21\15\17\7\2\5\5\1\4\22\16\20\32\27\30\26\25"
"\25'&'\17\17\20\1\1\2\0\0\0\23\40,\3\24#\1\13\25&*2\36\"0\13\20\37\12"
"\17\35""0\21\14R\31\13""7\31\24c=>J\34\36I\33\35,\15\15O\25\20Y\30\22"
">\24\21+1>\11\21!\10\20\40\34\16\25""9\23\31""2\17\25#\14\20\202OB\213"
"5\36~+\24\213~v\350\345\332wwt\300\276\273\300\233lyV:\204$\35~\23\13"
"g!\21\214=\24\210vc\307\257\220\207p\\e>2c(\37e'\36\\<:h97c20b31K\34"
"\32m2\37\232[+\255\241\224\365\361\347\354\351\336xvq\212|n\247`.g6\25"
"|C6\2135#d\40\21>$&)\12\14\36\7\10\33\16\20@02G03\25\14\16\0\0\5\0\0"
"\4\4\5\10-03\33\37\"\15\21\25\6\7\12\5\1\3\4\1\3\36\35\36:;<\30\31\32"
"\11\12\13\11\11\12\7\7\10\0\0\1\0\0\0\17\33%\22\33#,17\31\35*\202\13"
"\20\37&\12\17\34+.6,/;#\36'D\34\36E\26\30B\23\25.\27\32/09$\25\32$\30"
"\33!)7\10\20\40\7\17\37\13\15\26K54K/-@$\40\235UB\206.\26t(\23s:!\252"
"\247\237\240\237\234\367\367\366\275\256\232\314\235di+\33e\20\11^&\27"
"\221A\"\235\203k\331\272\222\325\267\217\260\224tnB4\77\36\31l\77>\203"
"]*(\37K\"\40\201M&\210{n\364\361\347\364\360\345\324\321\307e\\WzF4\205"
"<'y.\34\2035#\202#\16u\37\14#\12\11""3\32\25S1$>&)*\15\21#\5\11!\5\11"
"\15\7\11\31\30\33\33\34\36\26\32\35\11\15\21\10\14\20\11\14\16""89;\22"
"\23\25\31\32\32\5\6\7\202\0\1\2Q\1\2\2\36\36\36\16\16\17\0\0\0+05FPY"
"\20\36,\2\12\23\11\16\33\12\17\36\13\17\31.1=\16\22\40\13\17\36\16\13"
"\24""9\23\25;\21\23-,4\24\32(\13\22!\14\22\37\15\23\36\11\21!\7\17\37"
"$\37$d\77;O%\40;\34\27\215<&t(\23n4\36\275Y(\233{f\243\240\230\237\235"
"\230\206\205\203\266\221dyZ>\216X>\262O*\260>\23rI2\322\263\215\256\223"
"rxL=}5#j$\23C\34\27S%$Z('[)'J\"!\212|kqi[\257\254\245\345\341\327\177"
"ys\216M=\2368\37\230+\20\226)\16h\37\16\177$\20S\32\14TA6\246`\77\254"
"X0B\32\20\"\5\11\37\4\10\26\10\12""958$\37$\14\10\14\5\6\11\10\13\17"
"\7\12\15\36\37!\22\24\26\0\2\4\0\1\2\203\0\0\1\22\26\26\27\"\"\"\6\6"
"\6\0\0\0BKT\11\27&\0\17\35\0\15\33\26\34\"\14\21\33\32\34%\35\40.\13"
"\17\36\12\16\35\12\15\30\36\40'(\27\33%+8\203\10\17\36\202\6\14\30\77"
"\6\14\31E22V-(L\"\35""7\33\27k8+a1&c1\34\247B\21\224H\"\344\336\320\271"
"\264\251\214\212\206\222\211}\247rT\305h5\212:\30\254<\21\205cM\241\221"
"voN\77\201:(t&\22r%\21U\34\16Q0*I\"\35B\36\34o^T\303\261\220\252\250"
"\245\321\321\321\214\213\206ue\\\230:\"\226)\16\226(\16\224(\15}\"\14"
"E\23\10cYO\304\271\241\246\221y\204D#g'\12C%%J\34\31/$&\30\24\30\10\3"
"\10\7\3\7\11\7\11""124\30\32\35\31\32\34\6\10\11\0\2\4\0\2\3../\24\24"
"\25\15\15\15###\6\6\6\202\0\0\0J\2\13\24\0\16\33\0\15\32\5\16\26'4>\13"
"\32'\11\21\32\10\13\26\12\15\33\10\13\25$,4\22\37-\4\15\26\12\17\33\7"
"\16\35\10\16\35\7\16\35\10\14\27Z8:T\36!5\33\32Q(#J!\35V2+\217E5\204"
"4\"\2013!S\37\21b&\12zrh\330\326\321\276\274\267\334\333\330\230dG\305"
"d0\235M#u(\13\236\220}\337\313\250tZHw-\32n$\21P\32\14V.%\201;+v*\31"
"l(\30eO\77|r`\363\363\363\351\351\351\220\217\212\257\203cb#\14\200#"
"\14n\36\13Z\31\11R.\40\204jQ\322\317\311\245\242\233\200zl\255\243\214"
"]I5}=,s\23\13<\12\6\11\5\11\7\2\7\6\2\5%%'\25\27\33\1\3\7\0\1\4\202\0"
"\1\3\2\13\14\15\36\36\37\202\1\1\2\1\1\1\1\203\0\0\0N\34\40'$$,\25\25"
"\35\24\27\36\20\36+\0\17\35\0\15\30'.4\31!)\26\34#\31&3\1\17\36\1\16"
"\35\22\22\27""4\"#\22\17\26\6\13\26;\"&^\33\36K\30\24\221N*G\40\25<\33"
"\27xF<\2054#\177.\34m'\30Q\37\27uH.\245\206g\370\365\357\311\307\301"
"\326\325\322\224xh\215I#{E+\254N'\245\213s\337\314\250\300\257\217X&"
"\27P$\31^1(e-\40o$\23o#\21j!\21xbZ\264\262\253\272\272\271\233\232\231"
"\330\323\306\256l@s;\35g75_!\36d\40\34g>0\244uF\311\305\275\267\265\256"
"\275\274\272\276\275\271\226nI\270u8i\30\13U\11\3A/-H)#J\"\31!\32\32"
"\5\7\13\0\2\6\0\2\5""667\"\"$\27\27\30\10\10\11\202\0\0\1\17\6\6\6%%"
"%\10\10\10\0\0\0""23;\7\7\23\1\1\16\0\0\14\0\5\15\0\12\22\40'/\27$0\2"
"\20\36\1\15\31\1\13\25\202\1\16\34V7$#\177;*w/\37e*\34>\25\23X(\30\232"
"N!b5\31\210\200v\244\240\226uF:v,\34N\34\22Q!\34\214+%a(\26\245n9\342"
"\337\330\317\315\307\255\254\251rpl\320\243y\220Q-\301I\27\217V7\327"
"\304\242\255\235\201kQJ\221L\77\2020!a!\24D\33\24H\30\17Y-\35\234\230"
"\221\322\317\304\245\245\243\223\222\217\303\273\252\245T\40h8/c\30\24"
"[\14\10Z\14\10N\12\7U7\40vrk\270\266\261\314\312\305\372\371\366\247"
"\242\234\240i5\237`+F\33\25Z1(C\22\10A\20\6*\12\4\0\2\5\0\1\5$$&//1\33"
"\33\35\33\33\34\11\11\12\4\4\5\0\0\0$$$\20\20\20\4\4\4\0\0\0""009\1\1"
"\16\0\0\15\0\0\13*/6-6\77\25\40*\2\17\35\0\15\33\0\14\30)\"#5&&\31\24"
"\30U1)w.\35\202r&\24AY\36\20jF/\241\222\200\205\200s\256\253\245\240"
"\235\225XIBg\77""6zF9e\36\25{\21\12P\23\13\276}\77\215\202v\202\200|"
"\301\300\300\263\257\254\322\235j\215T-\276I\30k1\26\240\224\177\205"
"yc\217YO\201.\37~*\32]\40\25u1/V\27\20\305\211U\242\230\213\270\265\253"
"\303\303\302\244\243\241\232\211q\177E-[,(^\21\15Y\13\7Q\13\7I\26\24"
"\237b:\236f>\351\346\336\344\341\331\327\326\323\252\251\247\255\252"
"\246|W3X5+F\26\15@\20\6\77\17\5""1\15\5&%%\15\16\17//1\33\33\35\30\30"
"\32\24\24\26(((\33\33\33\11\11\11,,,\2\2\2\202\0\0\0H\17\17\27\1\1\16"
"\0\0\14\27\32\")4\77\16\32'\11\24\37\3\17\34\0\15\31\15\20\25a@;M#\35"
"M#\34G!\32l'\27p%\23c!\21Q3)\332\321\276\320\306\256tpf\301\300\276\214"
"\212\210\207_U\216I6\2013\36z/\33F\23\13:\11\6\250k3\234\221\204\322"
"\320\310\327\327\326\270\266\264\215hDc@%\1770\17\211xe\340\315\250\313"
"\267\222vA5},\34j$\27J\37\33t\32\31[!\25\300\202K\217yc\240\236\226\333"
"\333\332\227\224\217\325\270\213\230E.U\27\13G\13\10""8\12\11""5\23\22"
"o*(_\36\15\270]\36\233\177h\360\356\345\274\273\265\275\274\272\276\275"
"\273\311\275\246K7.8\16\5""3\15\5,\15\6(\40\36\40!!\202\4\5\6\7\25\25"
"\27\23\23\24\32\32\32\40\40\40\3\3\3\1\1\1\7\7\7\203\0\0\0\5\40\"'\12"
"\13\24\4\6\15\37)4\16\33'\202\13\30%A\6\17\30\32\40'ADJA#\37I\36\27H"
"\35\26G\34\25>\27\17T%\31s^P\246\237\217\270\257\232\244\241\233\337"
"\336\335sqo\261\235\177n;(\1771\34}0\33w-\32Y)!_\33\30\231_0\255\247"
"\237\325\323\313\317\317\315\273\272\270\315\257\213\235xU\312[/\237"
"x[\333\306\237\264\242\201T-!a/%wH<g/'j\15\13e/\36\271zCtcT\212\211\205"
"\230\230\227\217\207{\301\242w\244C*`'\32H59/\30\35(\17\23U\16\14V\10"
"\5z6\22i9\27\216\210\177\231\230\223\363\362\360\306\305\303\312\275"
"\246\233\220{P94O+\"M!\27/!\36\15\16\17\202\0\1\2A+++!!!\36\36\36\14"
"\14\14\2\2\2\1\1\1\31\31\31\35\35\35\22\22\22\0\0\0'09\25\37)\26\36&"
"\11\17\26\23\32!\11\21\31\10\21\32\36\"'MQY\20\26!\13\13\23@\33\25G\34"
"\25D\33\24J82\325\314\266\264\254\234\235\233\227\321\320\316\322\321"
"\320pnj\264\241\202\236zTu-\34L\36\23M\"\30>\33\25n96[\17\13\275p5\206"
"xk\315\312\302\301\301\277\261\257\254\331\266\216\225lI\306N\37\216"
":\26\234\214p_SH\207[M\235T>\2178\37~*\22T\11\4q<&\224`3\323\322\315"
"\273\273\266\336\336\335\210\177q\224vS\2418\34G*(*\20\26\202\36\3\11"
"\25%\15\16C\31\30""7\24\20b>$\256yI\257\252\237\252\250\242\230\230\225"
"\213\200nRA9X+\40D\21\5B\20\4(\15\6\12\13\14\0\0\1\21\21\22###\2\2\2"
"\1\1\1\10\10\10\202\2\2\2O'''\11\11\11\3\3\3\0\0\0\2\13\22\0\13\26\1"
"\14\27\21\30\37%.8\20\32$\12\22\33""8;A\23\30$\4\12\26\4\12\25\34\22"
"\23;\35\30/\32\26\312\301\253\272\260\230\330\330\326\341\341\341|{y"
"\257\250\231\230\213t\225mP\224:'g\34\14T@F:\37(,\20\31_'&Y\13\10\271"
"k0\232\214\177\271\266\260\212\212\211}zw\343\300\226\224hF\301I\33r"
"%\7\177xl\243\221\206\222A(\210.\23\200+\21j$\17>\22\7U.\30\205tc\374"
"\373\366\262\261\255\356\356\355\216pc\233[A|@):'($\11\17\36\3\11\31"
"\4\11M11F\34\33<\20\17""7\17\14\240`(\234qI\306\302\265y^O\227\\\77W"
"0\"I\30\15C\20\4B\17\3*\13\4\34\34\34\27\27\30\22\22\22\2\2\2\202\0\0"
"\0\4\23\23\23%%%\37\37\37\20\20\20\203\0\0\0R\0\11\23\4\11\17\1\11\20"
"(/6\11\23\36\0\13\26\0\13\25\3\11\17\7\14\27\4\12\25\33\25\27tF9q6%T"
"$\26\233\221|\260\255\246\366\366\366\242\241\240\331\317\272\213v_X"
"1\40\2258#~\36\11G'&5\32\"&\11\22%\10\21""2\12\13P\16\12|K$\254\247\241"
"\355\351\341\267\267\265\263\261\256\326\262\210\205T4\177+\13y`E\232"
"\206i\311\303\266x0\32i#\16H\35\20X&\35~/\"\203O=\253\221s\257\252\242"
"\244\243\240\343\343\342\220gW\270b>\265[7q9$\36\6\13\26\4\10*\33\34"
"I\40\37""5\7\6""4\6\5""2\6\5""4\30\15b<\37jK;\235W4\222C\35i/\24=\20"
"\5=\16\3""1\14\4.)(\"\"\"\11\11\11\4\4\4\2\2\2\0\0\0\7\7\7@@@\36\36\36"
"\23\23\23\12\12\12\6\6\6\202\0\0\0\5\0\11\22$*0\16\25\35\36%,\4\17\31"
"\202\0\12\25@\31\37%\")1\15\15\22Z,\37a&\25`\"\21Q!\23\257\240\210\257"
"\242\215\232\224\212\255\246\226\230|c\274j:M1,\77\33\31""8\22\15""7"
"\40'&\12\23%\10\21\"\10\20N)(y!\31\242qE\254\235\215\355\351\341\267"
"\267\265\274\273\271\216sUsL2\274M-\206=\36\217sN\340\333\315U6*\200"
"N>\271`D\201)\27\216\31\7\200S=\236\201`hZIyyw\306\304\277\206bQ\267"
"a>\264Z5\222I,5--936\24\15\20,\11\10""4\7\6""1\6\5\"\10\7L3/H\"\34V-"
"\33\217C\35\213@\32e.\23""3/.\35\30\30\24\20\20\17\17\17\203\0\0\0X%"
"%%\11\11\11\40\40\40\36\36\36\21\21\21\20\20\20\35\35\35""777\26\26\26"
"\0\0\0\16\24\32\"+3\1\13\25\3\11\20\3\15\30\0\12\24\1\7\16+18\7\21\34"
"\12\24\36\10\13\21<'$7\36\33-\32\26\233z_\266\240\200\300\254\213N;."
"\231T,y>\33I.04\17\24""5\22\26\32\7\12\"\23\30\40\21\26\36\20\25m1+g"
"\15\5\254uD\212pV\325\322\312\265\264\263\262\260\255\310\232h\222Y1"
"\276:\24\233#\0Y<\"\250\241\226\244o^\307cC\300P,\254F&v\30\7e\77+}w"
"p\352\352\347\277\277\274\354\351\341\200pf\217J.\222J,P6-6/3\17\7\13"
"\13\2\7\27\17\21%\24\24\31\11\10H/*A\32\23""5\14\5'\17\12M2&<\"\27(\32"
"\25/,,\7\3\3\6\1\2\10\6\6\13\13\13\0\0\0\23\23\23\30\30\30\1\1\1\3\3"
"\3\13\13\13\202\15\15\15N===\33\33\33\27\27\27\0\0\0\30\34!\21\33$\0"
"\11\22\1\7\14\"&+$*0\22\30\36&-5\1\13\26\0\11\24\24\25\33A04'\22\30\36"
"\14\20\203J+\217E\35`@.b\77<L!\37B\34\32)\22\24/\12\17,\11\16'\27\32"
"F7=(\26\35!\17\27D\27\27b\13\3\252r>}pe\265\265\264\204\204\204gd`\310"
"\223Y\213W/\254.\11\213L*\242d4uK;\304^>\277O+\277N*\265K(o+\27\213`"
"E\242\177a\366\366\363\257\257\254\346\343\332\200bU\227M/w5\32""0#\""
"\23\12\17\13\2\7\14\6\12+-0\21\23\27\11\13\16""6\32\26""7\16\7.\12\4"
"/%%\40\27\31\20\7\11\13\3\5\35\31\32\6\2\3\4\0\0\36\35\36\31\31\31\16"
"\16\16\13\13\13\203\0\0\0\40,,,\40\40\40\14\14\14$$$\26\26\26\25\25\25"
"\0\0\0\14\23\33\4\14\23\6\13\20""15:#+3\7\17\31\0\11\23\11\20\27\1\13"
"\26\0\7\17@58&\22\30\36\11\17\34\11\16""7\40\27K%\22V30H\30\25A\17\14"
"A\20\15.\13\11'\34\37\32\21\24""7+0\"\20\30\202\32\7\17&\31\7\15O\10"
"\1kH&\327\326\326\364\364\364\264\264\264\325\325\325\201uhY;\"\214C"
"\31\254b)\203G\30W5\33\223K/\262I(\226>\"t<#\237qM\261xH\275\261\236"
"\230\227\223wvt|zt\217V\77\231>\31\2279\24^$\16\15\5\11\10\2\6\36\37"
"!\16\20\24\0\3\7\0\2\6\11\5\6.\13\5\37\17\15+#%\12\1\3\202\10\0\1\26"
"\11\5\6\5\1\2\7\3\4...\3\3\3\1\1\1\6\6\6\4\4\4\10\10\10\14\14\14\40\40"
"\40\1\1\1\0\0\0\16\16\16\24\24\24\20\20\20\0\0\0\14\23\33\25\31\34KO"
"T\25\32!\4\15\27\202\0\10\22""3\4\11\17%*/\22\30\34:,0\40\14\22\34\11"
"\16\30\17\22""728\35\27\36%\20\20B\21\16@\17\14""9\16\13%\31\32*18\10"
"\21\32\21\16\23\34\11\21\31\7\17\27\7\16\20\5\11""3\30\24\256\223o\343"
"\342\340\243\243\243\333\333\333\351\351\351\255\253\247\353\346\333"
"\231\214}I=,\252\222g\312\256{\246\215b_E9zi\\\246j8\262s>\310\274\250"
"\345\335\311\224\222\213\313\313\313\301\271\252\211V\77\227<\30\201"
"1\21F\35\15""3/01.1\20\17\22\0\2\5\202\0\2\6\5\4\5\10""977''(\11\4\5"
"\11\0\2\202\10\0\1\4\24\21\22(''\16\16\16\37\37\37\203\0\0\0\4###\31"
"\31\31\14\14\14\6\6\6\202\0\0\0;###\26\26\26\17\17\17\0\0\0:>BJOU\21"
"\30\40\0\5\13\0\7\17\0\10\21\0\7\20+04\34$+\2\12\22\17\10\15\30\13\17"
"\30\25\30""515\30\22\31\16\7\17\16\7\16\37\11\10.\27\26\33\23\25.4:\6"
"\17\30\0\10\21\0\7\16\34\24\27!\25\31!\24\25\223[O\2019)\270\225izvr"
"\326\326\326\343\343\343\207\206\205\255\251\237\305\277\263\343\335"
"\317\264\257\244|wn\240\232\220zum\345\335\315\334\323\301\233\223\205"
"\202|s\272\263\244\302\273\251\302\301\300\272\272\271\337\324\300\224"
"yfp,\21H)\36""525\34\30\33\202\12\5\11\16\6\3\6!\"#\20\21\22""9:;\35"
"\35\37\1\2\4\4\4\6\32\27\27\13\6\7\5\0\2""000\15\15\15\0\0\0\1\1\1\202"
"\0\0\0\4\35\35\35\34\34\34\0\0\0\1\1\1\202\0\0\0\3\2\2\2&&&\2\2\2\202"
"\0\0\0&\27\33\37\6\16\25\0\7\16\23\27\32+06\17\23\31\11\15\21\31\40&"
"\1\12\21\0\7\16*-17<B\16\26\36\17\17\24\24\15\25\16\7\17\15\11\16""9"
"<A$+2\10\20\27\12\20\26\5\15\26\0\10\21\2\10\17E59)\23\31!\13\20@\30"
"\22m\27\5\242\201Xrka\254\254\252}}|\362\362\357\360\357\354\311\310"
"\306\241\240\235fec\202\371\371\371\17\231\231\230\271\271\267\267\267"
"\265vvt\365\365\365\353\353\353\226\225\223\331\331\331\251\247\244\347"
"\333\305\200vizSI\177=+(\21\15\12\5\11\202\6\1\5\22\24\21\24$$'\4\5\10"
"\5\6\10\3\4\6\0\0\2\20\20\21\36\36\36\12\12\12\4\4\4%%%\2\2\2\1\1\1""1"
"11\"\"\"\17\17\17\"\"\"\7\7\7\202\0\0\0\4\20\20\20///\21\21\21\20\20"
"\20\203\0\0\0\16\0\6\14\22\26\31\11\14\20*/5\6\15\25\1\10\20\2\10\20"
"\17\22\26\15\22\27\24\27\33#*1\3\12\22\0\10\20\0\6\14\202\12\6\13\5%"
").\21\30\40\0\10\20\0\7\17\0\6\14\202\0\7\15\26\25\24\30""7#(\35\6\14"
"\34\5\13\31\5\12G\40\30cB,\201zp\321\316\305\321\317\306\246\245\241"
"\352\351\346\347\346\343\201\201\200\307\307\307\331\331\331\332\332"
"\332\253\253\252\372\372\370\313\313\312\231\231\231\313\313\313\202"
"\303\303\303\14\224\224\224\243\237\231\245\231\210~UI|6#o!\14Y\32\12"
"\10\2\4\5\1\5\4\1\4""234\10\11\14\202\0\0\3\4\10\10\11\2\3\4\37\37\40"
"\20\20\20\202\0\0\0\202\10\10\10\2\23\23\23\27\27\27\202\0\0\0\6\3\3"
"\3\1\1\1\3\3\3\21\21\21!!!\5\5\5\202\1\1\1\203\0\0\0>\12\17\23).2\11"
"\16\23\22\27\35\2\11\20\0\6\16\0\6\15(+/\21\24\33\11\13\21\1\6\14\0\7"
"\17\0\7\15\13\16\21""558\31\31\34\11\15\21\0\10\17\0\7\17\0\7\16\13\16"
"\22""88=\31\31\37\16\15\21#\17\25\34\6\14\33\5\13""0\24\23\2228#\203"
"T6\226e2\263s/\223e3RD5\233zW\223uU\220y_\270\222g\260\213a\242\200Z"
"of\\\246\242\235tpi\251\241\222\276\264\244\312\300\257\314\303\262\266"
"\255\235YQHV8+a\"\21h\37\13j\37\13E\26\12""667\35\35\37\12\12\14\"#%"
"\1\2\5\0\0\3\22\22\23---\202\21\21\21\1\17\17\17\202\0\0\0\4...\31\31"
"\31\14\14\14\1\1\1\202\0\0\0\5\14\14\14""444\33\33\33\13\13\13\1\1\1"
"\202\0\0\0;\5\5\5///\24\24\24\0\0\0(,0\11\17\25\0\5\13\1\5\12\0\7\17"
"\0\6\15\14\20\24\32\36$\0\4\13\0\3\12\0\3\10\35\40#\22\23\26,,/\13\13"
"\17\0\0\4\0\0\3\25\27\31\26\30\32\14\15\16""336\20\20\27\0\0\7\0\0\6"
"\26\17\22\35\16\21\22\6\10\204;*j\31\6\247xLvV4\230`%k@\22iG\"\233b&"
"\242d\"\177W,\331\243f\320\233`\205c=\253\207Z\305\230_\276\222Z\217"
"mAkV\77\223xZviX|kY\231pJ\277}Q[6\"P&\34@\26\13\40\32\30\23\23\25\202"
"\1\1\3\5\6\7\10\15\15\17\21\21\22###\4\4\4\202\0\0\0\13\2\2\2\1\1\1\11"
"\11\11%%%\1\1\1\0\0\0\4\4\4)))\23\23\23\40\40\40\25\25\25\202\0\0\0\17"
"\3\3\3\13\13\13\1\1\1***\17\17\17\3\3\3\0\0\0\25\32\37\0\6\14\0\5\13"
"\0\5\11%'*\30\33\37\20\22\25\1\4\12\202\0\3\12""3\30\31\35((+\5\5\11"
"\13\13\16\5\5\11\0\0\3\10\10\12""000\13\13\13\2\2\2\34\34\37\5\5\14\0"
"\0\6\6\5\11=..'\21\21#\16\16@\22\10b)\24\226jA\314\302\260\337\325\300"
"\253\242\221~pZ\227|W\233\200Y{eD\206mQ\217vX\\F.\206S#\237b(\244g-w"
"K\40\307\213Q\323\210>\273w3\263\206[\224a4\264oAd8,a\"\25]\36\21""5"
"\24\15\1\1\2\0\0\2\7\7\11;;<\31\31\32\10\10\11\3\3\3\202\0\0\0\3\1\1"
"\1""444!!!\202\16\16\16\15\2\2\2\0\0\0\36\36\36\26\26\26\3\3\3\1\1\1"
"\10\10\10\0\0\0\2\2\2%%%\32\32\32\5\5\5\27\27\27\203\0\0\0\5\1\4\7\4"
"\10\14\7\13\16\27\31\34'+0\202\5\12\20\5\12\14\17\10\13\17\14\16\22'"
"'*\3\3\7\202\0\0\3\4\4\4\7\7\10\12)))\15\15\15\202\0\0\0\5\2\2\5\5\5"
"\12\7\10\14,#$(\23\23\202\26\0\0\40\21\0\0G1\37bR@\224\215~\205\177s"
"\212\205z\225\217\204IF@\240\230\214\246\235\221\256\241\213\334\310"
"\245\332\306\243\242\222x}lY}Y5tM&\245i-\250j,\256n.uJ\37\214Z2\200L"
".j0$W\24\6V\23\5S\23\6(\20\13\10\10\11))*\14\14\15\0\0\1\204\0\0\0\2"
"\35\35\35\27\27\27\203\0\0\0\4\2\2\2\36\36\36***\2\2\2\203\0\0\0\3\13"
"\13\13'''\22\22\22\202\0\0\0\26\10\10\10\16\16\16\11\11\11\0\0\0\"$'"
"259\21\25\32\14\17\22\17\23\31\0\5\12\5\10\14(,/\13\17\24\14\16\20\13"
"\13\17\0\0\4\0\0\3\6\7\11@CG\17\24\31\16\20\22\3\3\3\202\0\0\0-68;\36"
"\"(\16\23\30\13\11\14\35\7\7\24\0\0\20\1\0J\"\27zL3\216qT\353\352\347"
"\366\365\362\366\365\361\263\262\257\257\257\256\371\370\367\353\352"
"\351\211\210\207\262\257\253\253\250\241\200|u\362\362\357\351\351\346"
"\272\271\267\340\337\334\321\317\314\254\252\247\243\242\241\226\212"
"\203L)\35X\31\14U\23\5Q\23\5""5\20\10+))\13\13\13\13\12\13\2\2\3\0\0"
"\0\0\0\1\25\25\25)))\12\12\12\"\"\"\2\2\2\202\0\0\0\13\40\40\40EEE##"
"#\10\10\10\2\2\2\0\0\0\7\7\7""666...\16\16\16\4\4\4\202\0\0\0I\"\"\""
"\31\31\31\12\12\12\0\0\0\36\"&\2\6\13\0\3\10\0\3\7\12\15\20\7\12\14&"
")-\14\21\26\0\5\12\0\4\10\12\13\15\22\23\26\23\25\30\20\22\25+/4\0\5"
"\13\0\3\7\11\11\11\2\2\3\21\22\23\33\40%\0\5\13\0\4\12\0\4\10\35\23\23"
".\40\40F$\35\2268\35i+\23\272\215`\272\266\257\357\356\353\302\301\276"
"zwq\260\254\245\244\241\234\233\231\225\274\274\274\356\356\356\246\246"
"\245\232\231\227\270\270\265\267\266\264\216\216\214\370\367\365\340"
"\337\335\246\245\245\372\372\372\234\225\215\302\244\203G+\37""9\24\16"
")\15\7,*)\16\15\15\1\0\0\0\0\0\3\3\3\26\26\26\30\30\30\40\40\40\5\5\5"
"\3\3\3\2\2\2\1\1\1\25\25\25""888666\13\13\13\202\0\0\0\4\23\23\23\22"
"\22\22""111\17\17\17\202\0\0\0\1\1\1\1\202\0\0\0\2)))\6\6\6\202\0\0\0"
"\1\1\2\4\202\0\3\10""4\14\16\20""359\20\23\30\13\16\21\1\6\13\0\4\11"
"\0\4\7""358\24\27\34\7\13\20\1\5\11\34\40$\1\6\13\15\17\22/26\22\25\31"
"\20\23\26\5\10\15\0\4\12\0\4\11\37\32\34M8:+\21\23\40\5\6q!\13k\33\4"
"\272\216a{aI\237\202gzfS\242\226\205\301\267\245\326\312\266\302\270"
"\245\203}t\232\221\203\217\213\203\363\355\341\354\346\331\342\334\320"
"\216\212\203\262\257\251\211\206\200\311\311\311\351\351\351\246\223"
"}\340\272\217gPCF##.\12\12\27\21\21\3\2\2\202\0\0\0\13""777\36\36\36"
"\3\3\3\4\4\4\3\3\3\1\1\1\2\2\2\77\77\77\27\27\27\5\5\5\13\13\13\202\0"
"\0\0\5\21\21\21""111\6\6\6\12\12\12\1\1\1\202\0\0\0\5!!!\"\"\"\23\23"
"\23\26\26\26\6\6\6\203\0\0\0\4\37\40\"\16\20\22#%(\11\14\20\202\0\2\7"
"\5\0\4\7\5\11\14\22\24\25'*.\0\4\11\202\0\3\10\13\4\7\12\22\24\27\35"
"\37\"\7\13\20\0\4\11\1\4\11\0\3\7\20\23\25\33\34\36<()$\10\12\202\37"
"\3\5\40*\11\5}\37\4\223kG\231nG\324\212I\324\211H\305\202GxP-\225lL\222"
"^6\201kP\252\222o\214y^\202{q\236\216\177\230\200k}m^\355\346\325\347"
"\337\315\217\213\201wtr\223y^}dKG-,,\5\5'\0\0\33\1\1\2\1\1\4\3\3\21\21"
"\21'''\1\1\1\202\0\0\0\4\5\5\5\4\4\4\16\16\16***\202\0\0\0\5\3\3\3\1"
"\1\1\10\10\10'''\11\11\11\202\0\0\0\16\5\5\5\2\2\2\6\6\6+++\5\5\5\0\0"
"\0\1\1\1\2\2\2\1\1\1\0\0\0\31\32\33\36\37#\7\11\14\6\7\13\203\0\2\7\13"
"+,-146\14\17\21\14\17\23\0\4\10\0\3\7\17\21\23>\77A136\12\14\17\0\2\6"
"\202\0\3\10&\15\17\21\77AC\13\16\22\16\5\10\40\5\7\34\3\5\30\3\4\25\6"
"\6T+\33S<+\222jH\323\206C\313\177<\231_-\230_4\321u1\315k#\222L\32\272"
"]\40\256S\30\217S,\320p0\313e\"\222N\40\262m\77\252h:\221Z4\301\223k"
"\215W:\242F%5\22\12'\0\0&\0\0\33\1\1""433555\22\22\22\11\11\11\202\0"
"\0\0\5\10\10\10""888\30\30\30\14\14\14\25\25\25\202\0\0\0\4\30\30\30"
"666\27\27\27\10\10\10\202\0\0\0\5\31\31\31...\24\24\24\15\15\15\21\21"
"\21\202\0\0\0\6\5\5\5""111000\0\0\0\35\36\"\2\4\10\202\0\1\5\13\10\11"
"\13\23\25\27\11\12\14""9;=\12\15\20\6\11\14\36\37!\32\34\36\24\26\27"
"&),\14\17\23\202\0\3\7\5\5\7\11&(*\17\20\23""457\17\22\26\202\0\2\6&"
"\"\26\26/\34\33-\27\26\205W8\250b3\200wl\251\235\217\245h3\200X5Q\77"
"1\226^4\211H\31\232O\30\231O\30o@!\213>\14\237oH\244g8\234W%t;\25\330"
"n'\315f!\226Q!\322\231i\207Q1\240<\31X\37\13""4\36\36\36\10\7""1//&&"
"&\10\10\10\6\6\6\5\5\5\17\17\17\2\2\2'''\15\15\15\203\0\0\0\12\11\11"
"\11\14\14\14""555\10\10\10\0\0\0\2\2\2\35\35\35\7\7\7,,,\5\5\5\203\0"
"\0\0\7\7\7\7\21\21\21""555\26\26\26\2\2\2\0\0\0\1\1\3\202\0\1\5\13\16"
"\16\21./1\27\30\33\5\6\11!#%\10\13\16\13\14\16.03\15\17\22\13\15\20\3"
"\5\7\202\0\2\6'\7\11\14*+-\22\24\27\2\4\7\25\27\31\2\5\11\0\2\6\2\4\6"
"R:84\20\15,\7\4,\15\5t=\30\270\263\250\254\247\234\262\261\257\365\364"
"\362\277\276\273\367\365\360\362\360\353\321\317\312\210\205\201\355"
"\352\343\314\310\301\214\201p\247\211a\307\244u\213tT\256\240\217\245"
"\216uwcO\315\224e\215Z6\202.\20G)$;\27\25+\6\4\30\20\17\11\11\11\202"
"\6\6\6\22\32\32\32""888\40\40\40\15\15\15\1\1\1\0\0\0\1\1\1""555%%%\11"
"\11\11\16\16\16\1\1\1\0\0\0\25\25\25\35\35\35\5\5\5\16\16\16\3\3\3\202"
"\0\0\0\4!!!444\12\12\12\15\15\15\203\0\0\0\13\0\0\2\31\32\33\16\17\20"
"#$&\6\6\11\0\1\4\0\0\3\4\5\7\5\7\11!#$\23\25\30\202\6\10\13""4\5\7\12"
"\27\30\31\10\12\13,-/\13\15\20\0\2\5\0\1\4\30\31\32\33\34\35\23\24\26"
"\21\17\20N/-+\5\2*\4\1%\5\2S6(\251\240\224\200|t\253\250\242\251\250"
"\244\236\234\232\366\364\356\336\334\327\250\246\241\356\353\343\370"
"\364\353\367\363\352\350\344\334\224\223\217\265\264\260\206\204\201"
"\312\300\254\301\267\241\276\264\236\207eF\203V4G'\35D\"\40)\2\0(\1\0"
"\30\6\5\23\23\23\6\6\6\5\5\5""666\35\35\35\25\25\25\20\20\20\23\23\23"
"\2\2\2\33\33\33\27\27\27\204\0\0\0\3\1\1\1'''\5\5\5\202\0\0\0\25\1\1"
"\1\5\5\5\30\30\30\37\37\37\2\2\2\0\0\0\6\6\6\12\12\12\5\5\5\0\0\0\12"
"\13\14##$\4\4\5\3\3\5\0\1\4\0\0\3\2\3\5""000$$$\14\15\15\6\10\13\202"
"\5\7\12""3\11\12\14((*\5\6\7\11\12\14\2\4\7\0\1\4\6\7\11..0\11\12\14"
"\4\5\7\0\1\3&\15\13(\5\2$\4\2X4'\206F+v9\37cF5\230\216~\265\255\232q"
"la\231\217}\207}j\233\227\217\330\325\315\346\342\332\341\335\325\246"
"\245\241\354\354\354\354\354\353\236\236\235\333\332\327\317\316\312"
"\271\267\263_ZT\251\225}~kV*\11\7(\2\0&\1\0!\26\26\34\34\34\14\14\14"
"\6\6\6///\26\26\26\17\17\17&&&\31\31\31\14\14\14\10\10\10\203\0\0\0\4"
"\26\26\26***\14\14\14\16\16\16\202\0\0\0\5\2\2\2:::777\25\25\25\7\7\7"
"\202\0\0\0\14)))\33\33\33\14\14\14\0\0\0!!\"\25\25\27\0\0\1\4\4\5\40"
"\40!\24\24\25\36\36\36\27\27\27\202\0\0\0-\16\16\17\31\32\34\20\21\22"
"\32\32\33\33\34\36\0\1\3\0\0\2\11\12\14\12\13\15\32\33\34\24\25\27\0"
"\1\3\0\0\2\4\4\6.,,\25\17\17\"\24\20\213N4x1\22u/\21c(\17d9,t9+V\35\16"
"mQ4\300\243q\274\240n\200yj\243\232\210\204}o\223\203s\242\213s\235\201"
"dmV=\276\272\266\255\254\251\237\230\215\316\271\232\237\202d\200@$,"
"\25\17\40\14\13\30\5\4\"!!\7\7\7\202\0\0\0\4\11\11\11!!!\31\31\31\26"
"\26\26\203\0\0\0\22!!!\21\21\21\14\14\14,,,\5\5\5\0\0\0\31\31\31\26\26"
"\26\13\13\13+++(((\17\17\17\15\15\15\3\3\3\2\2\2\5\5\5+++\2\2\2\202\0"
"\0\0""6\17\17\20\16\16\17\0\0\2''(\35\35\35\6\6\7\2\2\2\5\5\5\0\0\0\2"
"\2\2""112\30\30\31\16\16\17\10\10\11\12\12\14\0\1\3\6\7\10""99:\17\17"
"\20\5\5\6\10\10\12\0\1\3\0\1\2$##\22\21\21\3\2\2\2\1\1a-\26n,\20M\37"
"\14c2&z,\32n\31\5k\27\4\177J(\232h:vdG\347\326\264\352\325\255\324\302"
"\235\256\204W\320\225W\306\214PqO-\240[\77y6\33\240\211m\213lP\215D&"
"j$\10""3*)\33\21\21\30\17\17\20\13\13\203\0\0\0\3...\"\"\"\4\4\4\203"
"\0\0\0\23\15\15\15$$$\6\6\6\2\2\2\14\14\14\0\0\0\2\2\2)))\11\11\11\5"
"\5\5\12\12\12\20\20\20\15\15\15\12\12\12)))...\17\17\17\15\15\15\1\1"
"\1\203\0\0\0\4\24\24\24###\34\34\35\1\1\2\202\0\0\0\5\14\14\14\21\21"
"\21\32\32\32\34\34\35\6\6\7\202\5\5\6\5\23\23\24''(\33\33\33\23\23\24"
"\0\0\1\202\0\0\0\4\30\30\31$$$$##\2\1\1\202\0\0\0\5\37\23\15""6%\36O"
"+\"y*\30n\30\4\202m\27\3\22U\33\11\253m7\264\240\202\352\326\257\351"
"\324\253\333\307\241v[<\204Z9vG/`.\36\227O3\227:\26j-\24u.\21R\40\15"
"-\31\24\34\23\23\12\0\0\202\11\0\0\13\12\10\10\2\2\2\16\16\16###\1\1"
"\1\0\0\0\5\5\5***\16\16\16!!!\10\10\10\202\0\0\0\4\7\7\7\21\21\21\26"
"\26\26\34\34\34\203\0\0\0#\25\25\25\32\32\32\30\30\30\40\40\40\2\2\2"
"\0\0\0\6\6\6\24\24\24\14\14\14\0\0\0\15\15\15CCC\11\11\11\1\1\1\0\0\1"
"\0\0\0\6\6\6""000\23\23\23\6\6\6\11\11\12\6\6\7\5\5\6\15\15\15<<<\27"
"\27\27\12\12\12\3\3\3\0\0\0\2\2\3""777333\7\7\7\6\6\6\3\2\2\202\0\0\0"
"\37,++\26\24\24\21\6\4j\34\12l\27\4g\26\3R\22\3""6\33\22\177kQ\253\234"
"\200\341\314\245\343\316\246\253\232}\206XI\223F/\2126\34\204/\26f-\30"
"\2208\25W#\17N@@4\36\36!\11\11\17\0\0\7\0\0\11\0\0\12\5\5---\22\22\22"
"\15\15\15\7\7\7\202\0\0\0\2\37\37\37\30\30\30\202\2\2\2\203\0\0\0\4-"
"--\32\32\32\4\4\4\7\7\7\202\0\0\0\15\3\3\3""444\15\15\15\3\3\3\5\5\5"
"\0\0\0\1\1\1,,,\32\32\32\14\14\14\0\0\0""333\17\17\17\202\0\0\0\4##$"
"\33\33\33\32\32\32\16\16\16\202\0\0\0\11\2\2\2\27\27\30\21\21\21'''\23"
"\23\23\11\11\11\10\10\10\14\14\14""888\202\33\33\33\1\2\2\2\202\0\0\0"
"\37\15\15\15\10\7\7\16\15\15*((\2\0\0\1\0\0(\11\2I\31\16""8\35\30#\26"
"\23\205E(g@%\254\220g\200pW\204q[^C5\220A*\207/\25\206.\24\200,\24H\""
"\26G-$-\37\35.\27\27\31\0\0\30\0\0\25\1\1+**\14\12\12$$$\16\16\16\202"
"\0\0\0\5\31\31\31\37\37\37\26\26\26\"\"\"\15\15\15\202\0\0\0\13\23\23"
"\23!!!\11\11\11:::\3\3\3\0\0\0\22\22\22\27\27\27\16\16\16\35\35\35\26"
"\26\26\202\0\0\0\4\1\1\1\30\30\30\35\35\35\26\26\26\203\0\0\0\6\24\24"
"\24\6\6\6\0\0\0\27\27\27%%%\5\5\5\202\1\1\1\202\0\0\0\5%%%,,,\13\13\13"
"\5\5\5\7\7\7\202\10\10\10\2'''\20\20\20\202\0\0\0\"\1\1\1\0\0\0\11\11"
"\11""666\17\17\17\11\11\11\30\26\26\2\0\0\6\4\4;448--\35\16\16\22\3\3"
"$\13\3x.\13L(\23qTC|;!^!\12Q\34\13\201-\24}+\23Q$\27""1++\26\17\17\11"
"\3\3\24\2\2\30\0\0\27\0\0\40\27\27\37\37\37\1\1\1\4\4\4\1\1\1\202\0\0"
"\0\13///\11\11\11\1\1\1\5\5\5\12\12\12\0\0\0\6\6\6...\13\13\13\0\0\0"
"\24\24\24\202\0\0\0\5)))\17\17\17\6\6\6\4\4\4\6\6\6\202\0\0\0\4&&&(("
"(\5\5\5\2\2\2\203\0\0\0\5\1\1\1\5\5\5\13\13\13""111\6\6\6\202\0\0\0\5"
"\4\4\4...+++444\11\11\11\202\0\0\0\4\13\13\13\21\21\21\37\37\37\34\34"
"\34\203\0\0\0\4\22\22\22\12\12\12\34\34\34\40\40\40\202\0\0\0\5\2\1\1"
"\20\17\17(\"\"#\26\26\17\0\0\202\16\0\0\13$\26\25O530\20\16mE6l\"\6f"
"\34\0\77\30\11\77#\34:\33\23.((\15\6\6\202\6\0\0\5\13\7\7$\33\33\23\13"
"\13""211\16\16\16\202\0\0\0\4\26\26\26\13\13\13\17\17\17***\202\0\0\0"
"\14\3\3\3\16\16\16\1\1\1***\14\14\14\0\0\0\1\1\1%%%\17\17\17\13\13\13"
"---\1\1\1\202\0\0\0\34\27\27\27\22\22\22\27\27\27%%%\2\2\2\0\0\0\11\11"
"\11\31\31\31\15\15\15\0\0\0\"\"\":::\17\17\17\15\15\15\2\2\2\0\0\0\12"
"\12\12===...\25\25\25\30\30\30\4\4\4\0\0\0\14\14\14***\20\20\20\13\13"
"\13\10\10\10\202\0\0\0,\30\30\30&&&\14\14\14\25\25\25\24\24\24\0\0\0"
"\2\2\2""888///\7\5\5\22\4\4\16\0\0\15\0\0&\26\25E$!/\7\4'\3\0`1\37e\35"
"\1I\27\3""6)'\34\16\16\21\5\5\14\7\7\7\0\0\6\0\0\14\7\7,,,\26\26\26\5"
"\5\5\32\32\32\5\5\5\0\0\0\31\31\31)))\21\21\21\12\12\12\30\30\30\0\0"
"\0\2\2\2$$$\32\32\32\11\11\11\21\21\21\202\0\0\0\5\27\27\27\33\33\33"
"\5\5\5\2\2\2\24\24\24\202\0\0\0\24\26\26\26(((\12\12\12\7\7\7\13\13\13"
"\0\0\0\2\2\2---\25\25\25\12\12\12\0\0\0\26\26\26\10\10\10\0\0\0\7\7\7"
"\23\23\23\13\13\13***\34\34\34\24\24\24\202\21\21\21\4\17\17\17\21\21"
"\21(((\7\7\7\202\0\0\0\13\23\23\23\14\14\14\27\27\27\34\34\34\2\2\2\0"
"\0\0\10\10\10\25\25\25\11\11\11""111\27\27\27\202\0\0\0\22\20\14\14\25"
"\17\17\27\16\16>\33\31-\5\2*\2\0!\2\0<\40\27""9\31\16\34\20\16\25\7\7"
"\17\0\0\16\0\0\14\4\4\27\24\24\13\11\11(((\12\12\12\202\0\0\0\5\16\16"
"\16\21\21\21\15\15\15\31\31\31\7\7\7\202\4\4\4\4\22\22\22\15\15\15\25"
"\25\25\20\20\20\202\0\0\0\5\3\3\3\27\27\27\15\15\15\37\37\37\3\3\3\202"
"\0\0\0\5\12\12\12\21\21\21\15\15\15\31\31\31\2\2\2\202\0\0\0\4\21\21"
"\21\14\14\14\31\31\31\23\23\23\203\0\0\0"};