mirror of https://github.com/GNOME/gimp.git
parent
4607c5e5e5
commit
6ad4b66240
11
configure.in
11
configure.in
|
@ -294,7 +294,6 @@ plug-ins/ifscompose/Makefile
|
|||
plug-ins/iwarp/Makefile
|
||||
plug-ins/hrz/Makefile
|
||||
plug-ins/hot/Makefile
|
||||
plug-ins/holes/Makefile
|
||||
plug-ins/gz/Makefile
|
||||
plug-ins/header/Makefile
|
||||
plug-ins/grid/Makefile
|
||||
|
@ -338,12 +337,6 @@ plug-ins/png/Makefile
|
|||
plug-ins/tiff/Makefile
|
||||
plug-ins/xd/Makefile
|
||||
plug-ins/bmp/Makefile
|
||||
plug-ins/aa/Makefile
|
||||
plug-ins/gag-0.3/Makefile
|
||||
plug-ins/Anamorphose/Makefile
|
||||
plug-ins/CentralReflection/Makefile
|
||||
plug-ins/Curtain/Makefile
|
||||
plug-ins/Encrypt_Decrypt/Makefile
|
||||
plug-ins/MapObject/Makefile
|
||||
plug-ins/megawidget/Makefile
|
||||
plug-ins/libgck/Makefile
|
||||
|
@ -355,9 +348,7 @@ plug-ins/flame/Makefile
|
|||
plug-ins/gimptcl/Makefile
|
||||
plug-ins/gimptcl/scripts/Makefile
|
||||
plug-ins/fuse/Makefile
|
||||
plug-ins/rcm/Makefile
|
||||
plug-ins/struc/Makefile
|
||||
plug-ins/twist/Makefile
|
||||
plug-ins/user_filter/Makefile
|
||||
plug-ins/zealouscrop/Makefile
|
||||
plug-ins/xwd/Makefile
|
||||
|
@ -412,9 +403,7 @@ plug-ins/colorify/Makefile
|
|||
plug-ins/papertile/Makefile
|
||||
plug-ins/illusion/Makefile
|
||||
plug-ins/fractaltrace/Makefile
|
||||
plug-ins/DigitalSignature/Makefile
|
||||
plug-ins/FractalExplorer/Makefile
|
||||
plug-ins/stegano/Makefile
|
||||
plug-ins/fs/Makefile
|
||||
plug-ins/flarefx/Makefile
|
||||
app/Makefile
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
Makefile.in
|
||||
Makefile
|
||||
.deps
|
||||
_libs
|
||||
.libs
|
||||
Anamorphose
|
|
@ -1,727 +0,0 @@
|
|||
/**********************************************************************
|
||||
* Conical Anamorphose Distortion Plug-In (Version 1.03)
|
||||
* Daniel Cotting (cotting@mygale.org)
|
||||
**********************************************************************
|
||||
* Official homepages: http://www.mygale.org/~cotting
|
||||
* http://cotting.citeweb.net
|
||||
* http://village.cyberbrain.com/cotting
|
||||
**********************************************************************
|
||||
*/
|
||||
|
||||
/* The GIMP -- an image manipulation program
|
||||
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "libgimp/gimp.h"
|
||||
#include "gtk/gtk.h"
|
||||
#include "logo.h"
|
||||
|
||||
#define ENTRY_WIDTH 100
|
||||
|
||||
/* Declare local functions.
|
||||
*/
|
||||
static void query(void);
|
||||
static void run(char *name, int nparams,
|
||||
GParam *param,
|
||||
int *nreturn_vals,
|
||||
GParam **return_vals);
|
||||
|
||||
static void drawanamorphose(GDrawable *drawable);
|
||||
static gint anamorphose_dialog(GDrawable *drawable);
|
||||
|
||||
GPlugInInfo PLUG_IN_INFO =
|
||||
{
|
||||
NULL, /* init_proc */
|
||||
NULL, /* quit_proc */
|
||||
query, /* query_proc */
|
||||
run, /* run_proc */
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
gdouble cone_radius;
|
||||
gdouble base_angle;
|
||||
gint keep_surr, use_bkgr, set_transparent, use_antialias,flip,dedouble;
|
||||
} anamorphoseValues;
|
||||
|
||||
static anamorphoseValues lvals =
|
||||
{
|
||||
/* anamorphose cone radius value */
|
||||
100,60,
|
||||
/* Surroundings options */
|
||||
TRUE, FALSE, FALSE, TRUE, TRUE, FALSE
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
gint run;
|
||||
} anamorphoseInterface;
|
||||
|
||||
static anamorphoseInterface bint =
|
||||
{
|
||||
FALSE /* run */
|
||||
};
|
||||
|
||||
GtkWidget * anamorphose_logo_dialog(void);
|
||||
|
||||
|
||||
GtkWidget *maindlg;
|
||||
GtkWidget *logodlg;
|
||||
GtkTooltips *tips;
|
||||
GdkColor tips_fg,tips_bg;
|
||||
|
||||
|
||||
|
||||
MAIN()
|
||||
|
||||
static void
|
||||
query(void)
|
||||
{
|
||||
static GParamDef args[] =
|
||||
{
|
||||
{ PARAM_INT32, "run_mode", "Interactive, non-interactive" },
|
||||
{ PARAM_IMAGE, "image", "Input image (unused)" },
|
||||
{ PARAM_DRAWABLE, "drawable", "Input drawable" },
|
||||
{ PARAM_FLOAT, "cone_radius", "Radius of the reflecting cone in the center" },
|
||||
{ PARAM_FLOAT, "base_angle", "Base angle of the reflecting cone (in degrees)" },
|
||||
{ PARAM_INT32, "keep_surroundings", "Keep anamorphose surroundings" },
|
||||
{ PARAM_INT32, "set_background", "Set anamorphose surroundings to bkgr value" },
|
||||
{ PARAM_INT32, "set_transparent", "Set anamorphose surroundings transparent (Only on Image w/ Alpha-Layer)" },
|
||||
{ PARAM_INT32, "use_antialias", "Use antialias for better and smoother results" },
|
||||
{ PARAM_INT32, "flip", "Flip the image vertically" },
|
||||
{ PARAM_INT32, "double", "Use double reflection algorithm" },
|
||||
};
|
||||
|
||||
static GParamDef *return_vals = NULL;
|
||||
static int nargs = sizeof(args)/ sizeof(args[0]);
|
||||
static int nreturn_vals = 0;
|
||||
|
||||
gimp_install_procedure("plug_in_anamorphose",
|
||||
"Apply an anamorphose effect",
|
||||
"",
|
||||
"Daniel Cotting (cotting@mygale.org, http://www.mygale.org/~cotting)",
|
||||
"Daniel Cotting (cotting@mygale.org, http://www.mygale.org/~cotting)",
|
||||
"October, 1997",
|
||||
"<Image>/Filters/Glass Effects/Conical Anamorphose",
|
||||
"RGB*, GRAY*, INDEXED*",
|
||||
PROC_PLUG_IN,
|
||||
nargs, nreturn_vals,
|
||||
args, return_vals);
|
||||
}
|
||||
|
||||
static void
|
||||
run(char *name,
|
||||
int nparams,
|
||||
GParam *param,
|
||||
int *nreturn_vals,
|
||||
GParam **return_vals)
|
||||
{
|
||||
static GParam values[1];
|
||||
GDrawable *drawable;
|
||||
GRunModeType run_mode;
|
||||
GStatusType status = STATUS_SUCCESS;
|
||||
|
||||
run_mode = param[0].data.d_int32;
|
||||
|
||||
values[0].type = PARAM_STATUS;
|
||||
values[0].data.d_status = status;
|
||||
|
||||
*nreturn_vals = 1;
|
||||
*return_vals = values;
|
||||
|
||||
drawable = gimp_drawable_get(param[2].data.d_drawable);
|
||||
|
||||
switch(run_mode) {
|
||||
case RUN_INTERACTIVE:
|
||||
gimp_get_data("plug_in_anamorphose", &lvals);
|
||||
if(!anamorphose_dialog(drawable)) return;
|
||||
break;
|
||||
|
||||
case RUN_NONINTERACTIVE:
|
||||
if(nparams != 11) status = STATUS_CALLING_ERROR;
|
||||
if(status == STATUS_SUCCESS) {
|
||||
lvals.cone_radius = param[3].data.d_float;
|
||||
lvals.base_angle = param[4].data.d_float;
|
||||
lvals.keep_surr = param[5].data.d_int32;
|
||||
lvals.use_bkgr = param[6].data.d_int32;
|
||||
lvals.set_transparent = param[7].data.d_int32;
|
||||
lvals.use_antialias = param[8].data.d_int32;
|
||||
lvals.flip = param[9].data.d_int32;
|
||||
lvals.dedouble = param[10].data.d_int32;
|
||||
}
|
||||
|
||||
if(status == STATUS_SUCCESS && (lvals.cone_radius <= 0))
|
||||
status = STATUS_CALLING_ERROR;
|
||||
break;
|
||||
|
||||
case RUN_WITH_LAST_VALS:
|
||||
gimp_get_data ("plug_in_anamorphose", &lvals);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
gimp_tile_cache_ntiles(2 *(drawable->width / gimp_tile_width() + 1));
|
||||
gimp_progress_init("Applying anamorphose. Please wait...");
|
||||
drawanamorphose(drawable);
|
||||
|
||||
if(run_mode != RUN_NONINTERACTIVE)
|
||||
gimp_displays_flush();
|
||||
if(run_mode == RUN_INTERACTIVE)
|
||||
gimp_set_data("plug_in_anamorphose", &lvals, sizeof(anamorphoseValues));
|
||||
|
||||
values[0].data.d_status = status;
|
||||
|
||||
gimp_drawable_detach(drawable);
|
||||
}
|
||||
|
||||
static void
|
||||
set_tooltip (GtkTooltips *tooltips, GtkWidget *widget, const char *desc)
|
||||
{
|
||||
if (desc && desc[0])
|
||||
gtk_tooltips_set_tips (tooltips, widget, (char *) desc);
|
||||
}
|
||||
|
||||
static void
|
||||
drawanamorphose(GDrawable *drawable)
|
||||
{
|
||||
GPixelRgn srcPR, destPR;
|
||||
gint width, height;
|
||||
gint bytes;
|
||||
gdouble abstand;
|
||||
gdouble radius;
|
||||
gdouble angle, alpha, gamma, abstandvonzentrum, distanzzukreis, pi ,seiteb, verhaltniss, a1,a2,a3,a4,faktor,a_tot;
|
||||
gint row;
|
||||
gint x1, y1, x2, y2, ix, iy;
|
||||
guchar *src, *dest;
|
||||
gint i, col, succeeded;
|
||||
gfloat regionwidth, regionheight, dx, dy, xsqr, ysqr;
|
||||
gfloat a, b, asqr, bsqr, x, y;
|
||||
glong pixelpos, pos;
|
||||
guchar bgr_red, bgr_blue, bgr_green, alphaval;
|
||||
GDrawableType drawtype = gimp_drawable_type(drawable->id);
|
||||
|
||||
gimp_palette_get_background(&bgr_red, &bgr_green, &bgr_blue);
|
||||
|
||||
gimp_drawable_mask_bounds(drawable->id, &x1, &y1, &x2, &y2);
|
||||
regionwidth = x2-x1;
|
||||
a = regionwidth/2;
|
||||
regionheight = y2-y1;
|
||||
b = regionheight/2;
|
||||
|
||||
asqr = a*a;
|
||||
bsqr = b*b;
|
||||
|
||||
radius=lvals.cone_radius;
|
||||
angle=lvals.base_angle;
|
||||
|
||||
width = drawable->width;
|
||||
height = drawable->height;
|
||||
bytes = drawable->bpp;
|
||||
|
||||
gimp_pixel_rgn_init(&srcPR, drawable, 0, 0, width, height, FALSE, FALSE);
|
||||
gimp_pixel_rgn_init(&destPR, drawable, 0, 0, width, height, TRUE, TRUE);
|
||||
|
||||
src = g_malloc((x2-x1)*(y2-y1)*bytes);
|
||||
dest = g_malloc((x2-x1)*(y2-y1)*bytes);
|
||||
gimp_pixel_rgn_get_rect(&srcPR, src, x1, y1, regionwidth, regionheight);
|
||||
|
||||
for(col = 0; col < regionwidth; col++) {
|
||||
dx = (gfloat)col - a+0.5;
|
||||
xsqr = dx*dx;
|
||||
for(row = 0; row < regionheight; row++) {
|
||||
pixelpos = (col+row*regionwidth)*bytes;
|
||||
dy = -((gfloat)row - b-0.5);
|
||||
ysqr = dy*dy;
|
||||
abstand=(sqrt(dx*dx+dy*dy));
|
||||
succeeded=1;
|
||||
if (abstand>radius){
|
||||
alpha=2.0*angle-90.0;
|
||||
gamma=90.0-angle;
|
||||
distanzzukreis=abstand-radius;
|
||||
pi=atan(1.0)*4.0;
|
||||
seiteb=sin(alpha/180.0*pi)/sin(gamma/180.0*pi)*distanzzukreis;
|
||||
abstandvonzentrum=radius-(sin(gamma/180.0*pi)*seiteb);
|
||||
if ((abstandvonzentrum<0) && (lvals.dedouble==0)) {
|
||||
succeeded=0;
|
||||
}else{
|
||||
verhaltniss=abstandvonzentrum/abstand;
|
||||
if (lvals.flip) dy = -dy;
|
||||
x = dx*verhaltniss+a;
|
||||
y = dy*verhaltniss+b;
|
||||
ix=(int)x;
|
||||
iy=(int)y;
|
||||
if (lvals.use_antialias) {
|
||||
if ((ix - x)<0){
|
||||
if ((iy - y)<0){} else {iy-=1;}
|
||||
} else{
|
||||
if ((iy - y)<0){ix-=1;} else {iy-=1;ix-=1;}
|
||||
}
|
||||
a1=1/((ix-x)*(ix-x)+(iy-y)*(iy-y));
|
||||
a2=1/((ix+1-x)*(ix+1-x)+(iy-y)*(iy-y));
|
||||
a3=1/((ix-x)*(ix-x)+(iy+1-y)*(iy+1-y));
|
||||
a4=1/((ix+1-x)*(ix+1-x)+(iy+1-y)*(iy+1-y));
|
||||
a_tot=a1+a2+a3+a4;
|
||||
faktor=1/a_tot;
|
||||
a1*=faktor;
|
||||
a2*=faktor;
|
||||
a3*=faktor;
|
||||
a4*=faktor;
|
||||
|
||||
pos = ((gint)(iy)*regionwidth + (gint)(ix)) * bytes;
|
||||
|
||||
for (i = 0; i < bytes; i++) {
|
||||
dest[pixelpos+i] = (gint)((gdouble)(src[pos+i])*a1+(gdouble)(src[pos+i+bytes])*a2+(gdouble)(src[pos+i+(gint)(regionwidth*bytes)])*a3+(gdouble)(src[pos+i+(gint)(regionwidth*bytes)+bytes])*a4);
|
||||
}
|
||||
} else {
|
||||
pos = ((gint)(iy)*regionwidth + (gint)(ix)) * bytes;
|
||||
for(i = 0; i < bytes; i++) {
|
||||
dest[pixelpos+i] = src[pos+i];
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
succeeded=0;
|
||||
}
|
||||
if (succeeded==0){
|
||||
if(lvals.keep_surr) {
|
||||
for(i = 0; i < bytes; i++) {
|
||||
dest[pixelpos+i] = src[pixelpos+i];
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(lvals.set_transparent) alphaval = 0;
|
||||
else alphaval = 255;
|
||||
|
||||
switch(drawtype) {
|
||||
case INDEXEDA_IMAGE:
|
||||
dest[pixelpos+1] = alphaval;
|
||||
case INDEXED_IMAGE:
|
||||
dest[pixelpos+0] = 0;
|
||||
break;
|
||||
|
||||
case RGBA_IMAGE:
|
||||
dest[pixelpos+3] = alphaval;
|
||||
case RGB_IMAGE:
|
||||
dest[pixelpos+0] = bgr_red;
|
||||
dest[pixelpos+1] = bgr_green;
|
||||
dest[pixelpos+2] = bgr_blue;
|
||||
break;
|
||||
|
||||
case GRAYA_IMAGE:
|
||||
dest[pixelpos+1] = alphaval;
|
||||
case GRAY_IMAGE:
|
||||
dest[pixelpos+0] = bgr_red;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(((gint)(regionwidth-col) % 5) == 0)
|
||||
gimp_progress_update((gdouble)col/(gdouble)regionwidth);
|
||||
}
|
||||
|
||||
gimp_pixel_rgn_set_rect(&destPR, dest, x1, y1, regionwidth, regionheight);
|
||||
g_free(src);
|
||||
g_free(dest);
|
||||
|
||||
gimp_drawable_flush(drawable);
|
||||
gimp_drawable_merge_shadow(drawable->id, TRUE);
|
||||
gimp_drawable_update(drawable->id, x1, y1,(x2 - x1),(y2 - y1));
|
||||
}
|
||||
|
||||
static void
|
||||
anamorphose_close_callback(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
gtk_main_quit();
|
||||
}
|
||||
|
||||
static void
|
||||
anamorphose_ok_callback(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
bint.run = TRUE;
|
||||
gtk_widget_destroy(GTK_WIDGET (data));
|
||||
}
|
||||
|
||||
static void
|
||||
anamorphose_toggle_update(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
int *toggle_val;
|
||||
|
||||
toggle_val = (int *)data;
|
||||
|
||||
if(GTK_TOGGLE_BUTTON (widget)->active)
|
||||
*toggle_val = TRUE;
|
||||
else
|
||||
*toggle_val = FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
toggle_update (GtkWidget *widget,
|
||||
gpointer data)
|
||||
{
|
||||
int *toggle_val;
|
||||
|
||||
toggle_val = (int *) data;
|
||||
|
||||
if (GTK_TOGGLE_BUTTON (widget)->active)
|
||||
*toggle_val = TRUE;
|
||||
else
|
||||
*toggle_val = FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
anamorphose_entry_callback(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
lvals.cone_radius = atof(gtk_entry_get_text(GTK_ENTRY(widget)));
|
||||
if(lvals.cone_radius <= 0) lvals.cone_radius = 10;
|
||||
}
|
||||
|
||||
static void
|
||||
anamorphose_entry_callback2(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
lvals.base_angle= atof(gtk_entry_get_text(GTK_ENTRY(widget)));
|
||||
if(lvals.base_angle <= 0) lvals.base_angle = 60;
|
||||
if(lvals.base_angle >= 90) lvals.base_angle = 60;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
anamorphose_logo_ok_callback(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
gtk_widget_set_sensitive (maindlg, TRUE);
|
||||
gtk_widget_destroy(logodlg);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
anamorphose_about_callback(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
gtk_widget_set_sensitive (maindlg, FALSE);
|
||||
anamorphose_logo_dialog();
|
||||
}
|
||||
|
||||
|
||||
static gint
|
||||
anamorphose_dialog(GDrawable *drawable)
|
||||
{
|
||||
GtkWidget *dlg;
|
||||
GtkWidget *label;
|
||||
GtkWidget *entry;
|
||||
GtkWidget *button;
|
||||
GtkWidget *toggle;
|
||||
GtkWidget *frame;
|
||||
GtkWidget *vbox;
|
||||
GtkWidget *hbox;
|
||||
gchar buffer[12];
|
||||
gchar **argv;
|
||||
gint argc;
|
||||
GSList *group = NULL;
|
||||
GDrawableType drawtype;
|
||||
|
||||
drawtype = gimp_drawable_type(drawable->id);
|
||||
|
||||
argc = 1;
|
||||
argv = g_new(gchar *, 1);
|
||||
argv[0] = g_strdup("apply_anamorphose");
|
||||
|
||||
gtk_init(&argc, &argv);
|
||||
gtk_rc_parse(gimp_gtkrc());
|
||||
|
||||
dlg = maindlg = gtk_dialog_new();
|
||||
gtk_window_set_title(GTK_WINDOW(dlg), "Apply anamorphose effect");
|
||||
gtk_window_position(GTK_WINDOW(dlg), GTK_WIN_POS_MOUSE);
|
||||
gtk_signal_connect(GTK_OBJECT(dlg), "destroy",
|
||||
(GtkSignalFunc)anamorphose_close_callback,
|
||||
NULL);
|
||||
|
||||
frame = gtk_frame_new("Parameter Settings");
|
||||
gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
|
||||
gtk_container_border_width(GTK_CONTAINER(frame), 10);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->vbox), frame, TRUE, TRUE, 0);
|
||||
vbox = gtk_vbox_new(FALSE, 5);
|
||||
gtk_container_border_width(GTK_CONTAINER(vbox), 10);
|
||||
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
||||
|
||||
/* use black as foreground: */
|
||||
tips = gtk_tooltips_new ();
|
||||
tips_fg.red = 0;
|
||||
tips_fg.green = 0;
|
||||
tips_fg.blue = 0;
|
||||
/* postit yellow (khaki) as background: */
|
||||
gdk_color_alloc (gtk_widget_get_colormap (frame), &tips_fg);
|
||||
tips_bg.red = 61669;
|
||||
tips_bg.green = 59113;
|
||||
tips_bg.blue = 35979;
|
||||
gdk_color_alloc (gtk_widget_get_colormap (frame), &tips_bg);
|
||||
gtk_tooltips_set_colors (tips,&tips_bg,&tips_fg);
|
||||
|
||||
|
||||
toggle = gtk_radio_button_new_with_label(group,
|
||||
"Keep original surroundings");
|
||||
group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle));
|
||||
gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0);
|
||||
gtk_signal_connect(GTK_OBJECT(toggle), "toggled",
|
||||
(GtkSignalFunc) anamorphose_toggle_update,
|
||||
&lvals.keep_surr);
|
||||
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), lvals.keep_surr);
|
||||
gtk_widget_show(toggle);
|
||||
set_tooltip(tips,toggle,"In the center, where the cone is placed, the plug-in can't render a reflected image. If this option is enabled, this area will be filled with the original image.");
|
||||
|
||||
toggle =
|
||||
gtk_radio_button_new_with_label(group,
|
||||
drawtype == INDEXEDA_IMAGE ||
|
||||
drawtype == INDEXED_IMAGE ?
|
||||
"Set surroundings to index 0" :
|
||||
"Set surroundings to background color");
|
||||
group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle));
|
||||
gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0);
|
||||
gtk_signal_connect(GTK_OBJECT(toggle), "toggled",
|
||||
(GtkSignalFunc) anamorphose_toggle_update,
|
||||
&lvals.use_bkgr);
|
||||
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), lvals.use_bkgr);
|
||||
gtk_widget_show(toggle);
|
||||
set_tooltip(tips,toggle,"In the center, where the cone is placed, the plug-in can't render a reflected image. If this option is enabled, this area will be filled with the active background color or the index-0-color, depending on the image type.");
|
||||
|
||||
if((drawtype == INDEXEDA_IMAGE) ||
|
||||
(drawtype == GRAYA_IMAGE) ||
|
||||
(drawtype == RGBA_IMAGE)) {
|
||||
toggle = gtk_radio_button_new_with_label(group,
|
||||
"Make surroundings transparent");
|
||||
group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle));
|
||||
gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0);
|
||||
gtk_signal_connect(GTK_OBJECT(toggle), "toggled",
|
||||
(GtkSignalFunc) anamorphose_toggle_update,
|
||||
&lvals.set_transparent);
|
||||
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle),
|
||||
lvals.set_transparent);
|
||||
gtk_widget_show(toggle);
|
||||
set_tooltip(tips,toggle,"In the center, where the cone is placed, the plug-in can't render a reflected image. If this option is enabled, this area will be kept transparent.");
|
||||
|
||||
}
|
||||
|
||||
if((drawtype != INDEXEDA_IMAGE) && (drawtype != INDEXED_IMAGE)){
|
||||
toggle = gtk_check_button_new_with_label ("Use antialias (recommended)");
|
||||
gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0);
|
||||
gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
|
||||
(GtkSignalFunc) toggle_update,
|
||||
&lvals.use_antialias);
|
||||
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), lvals.use_antialias);
|
||||
gtk_widget_show (toggle);
|
||||
set_tooltip(tips,toggle,"If this option is enabled, an antialias algorithm will be used to produce a better and smoother output.");
|
||||
|
||||
} else { lvals.use_antialias=FALSE;}
|
||||
toggle = gtk_check_button_new_with_label ("Flip image vertically");
|
||||
gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0);
|
||||
gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
|
||||
(GtkSignalFunc) toggle_update,
|
||||
&lvals.flip);
|
||||
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), lvals.flip);
|
||||
gtk_widget_show (toggle);
|
||||
set_tooltip(tips,toggle,"With this option you can flip the image vertically.");
|
||||
|
||||
toggle = gtk_check_button_new_with_label ("Double reflection");
|
||||
gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0);
|
||||
gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
|
||||
(GtkSignalFunc) toggle_update,
|
||||
&lvals.dedouble);
|
||||
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), lvals.dedouble);
|
||||
gtk_widget_show (toggle);
|
||||
set_tooltip(tips,toggle,"If this option is enabled, the plug-in will use the double reflection functionality. The produced images are only mathematically possible. A cone won't reflect all pixels to their original location.");
|
||||
|
||||
|
||||
hbox = gtk_hbox_new(FALSE, 5);
|
||||
gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
|
||||
|
||||
label = gtk_label_new("Radius of cone: ");
|
||||
gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0);
|
||||
gtk_widget_show(label);
|
||||
|
||||
entry = gtk_entry_new();
|
||||
gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0);
|
||||
gtk_widget_set_usize(entry, ENTRY_WIDTH, 0);
|
||||
sprintf(buffer, "%.2f", lvals.cone_radius);
|
||||
gtk_entry_set_text(GTK_ENTRY(entry), buffer);
|
||||
gtk_signal_connect(GTK_OBJECT(entry), "changed",
|
||||
(GtkSignalFunc)anamorphose_entry_callback,
|
||||
NULL);
|
||||
gtk_widget_show(entry);
|
||||
gtk_widget_show(hbox);
|
||||
set_tooltip(tips,entry,"Specify the base radius of the reflecting cone, here.");
|
||||
|
||||
hbox = gtk_hbox_new(FALSE, 5);
|
||||
gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
|
||||
label = gtk_label_new("Base angle of cone (in degrees): ");
|
||||
gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0);
|
||||
gtk_widget_show(label);
|
||||
|
||||
entry = gtk_entry_new();
|
||||
gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0);
|
||||
gtk_widget_set_usize(entry, ENTRY_WIDTH, 0);
|
||||
sprintf(buffer, "%.2f", lvals.base_angle);
|
||||
gtk_entry_set_text(GTK_ENTRY(entry), buffer);
|
||||
gtk_signal_connect(GTK_OBJECT(entry), "changed",
|
||||
(GtkSignalFunc)anamorphose_entry_callback2,
|
||||
NULL);
|
||||
gtk_widget_show(entry);
|
||||
set_tooltip(tips,entry,"Specify the base angle of the reflecting cone, here. The angle must have a value between 0 and 90 degrees.");
|
||||
|
||||
gtk_widget_show(hbox);
|
||||
gtk_widget_show(vbox);
|
||||
gtk_widget_show(frame);
|
||||
|
||||
button = gtk_button_new_with_label("OK");
|
||||
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect(GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc)anamorphose_ok_callback,
|
||||
dlg);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area),
|
||||
button, TRUE, TRUE, 0);
|
||||
gtk_widget_grab_default(button);
|
||||
gtk_widget_show(button);
|
||||
set_tooltip(tips,button,"Close the dialog box and apply distortion.");
|
||||
|
||||
button = gtk_button_new_with_label("Cancel");
|
||||
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc)gtk_widget_destroy,
|
||||
GTK_OBJECT(dlg));
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area),
|
||||
button, TRUE, TRUE, 0);
|
||||
gtk_widget_show(button);
|
||||
set_tooltip(tips,button,"Close the dialog box without applying distortion.");
|
||||
|
||||
button = gtk_button_new_with_label("About...");
|
||||
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect(GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc)anamorphose_about_callback,button);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area),
|
||||
button, TRUE, TRUE, 0);
|
||||
gtk_widget_show(button);
|
||||
set_tooltip(tips,button,"Show information about the author and the plug-in.");
|
||||
|
||||
|
||||
gtk_widget_show(dlg);
|
||||
|
||||
gtk_main();
|
||||
gtk_object_unref (GTK_OBJECT (tips));
|
||||
gdk_flush();
|
||||
|
||||
return bint.run;
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
anamorphose_logo_dialog()
|
||||
{
|
||||
GtkWidget *xdlg;
|
||||
GtkWidget *xlabel;
|
||||
GtkWidget *xbutton;
|
||||
GtkWidget *xlogo_box;
|
||||
GtkWidget *xpreview;
|
||||
GtkWidget *xframe,*xframe2;
|
||||
GtkWidget *xvbox;
|
||||
GtkWidget *xhbox;
|
||||
char *text;
|
||||
guchar *temp,*temp2;
|
||||
guchar *datapointer;
|
||||
gint y,x;
|
||||
xdlg = logodlg = gtk_dialog_new();
|
||||
gtk_window_set_title(GTK_WINDOW(xdlg), "About");
|
||||
gtk_window_position(GTK_WINDOW(xdlg), GTK_WIN_POS_MOUSE);
|
||||
gtk_signal_connect(GTK_OBJECT(xdlg), "destroy",
|
||||
(GtkSignalFunc)anamorphose_close_callback,
|
||||
NULL);
|
||||
|
||||
xbutton = gtk_button_new_with_label("OK");
|
||||
GTK_WIDGET_SET_FLAGS(xbutton, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect(GTK_OBJECT(xbutton), "clicked",
|
||||
(GtkSignalFunc)anamorphose_logo_ok_callback,
|
||||
xdlg);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(xdlg)->action_area),
|
||||
xbutton, TRUE, TRUE, 0);
|
||||
gtk_widget_grab_default(xbutton);
|
||||
gtk_widget_show(xbutton);
|
||||
set_tooltip(tips,xbutton,"Close the information box.");
|
||||
|
||||
xframe = gtk_frame_new(NULL);
|
||||
gtk_frame_set_shadow_type(GTK_FRAME(xframe), GTK_SHADOW_ETCHED_IN);
|
||||
gtk_container_border_width(GTK_CONTAINER(xframe), 10);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(xdlg)->vbox), xframe, TRUE, TRUE, 0);
|
||||
xvbox = gtk_vbox_new(FALSE, 5);
|
||||
gtk_container_border_width(GTK_CONTAINER(xvbox), 10);
|
||||
gtk_container_add(GTK_CONTAINER(xframe), xvbox);
|
||||
|
||||
/* The logo frame & drawing area */
|
||||
xhbox = gtk_hbox_new (FALSE, 5);
|
||||
gtk_box_pack_start (GTK_BOX (xvbox), xhbox, FALSE, TRUE, 0);
|
||||
|
||||
xlogo_box = gtk_vbox_new (FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (xhbox), xlogo_box, FALSE, FALSE, 0);
|
||||
|
||||
xframe2 = gtk_frame_new (NULL);
|
||||
gtk_frame_set_shadow_type (GTK_FRAME (xframe2), GTK_SHADOW_IN);
|
||||
gtk_box_pack_start (GTK_BOX (xlogo_box), xframe2, FALSE, FALSE, 0);
|
||||
|
||||
xpreview = gtk_preview_new (GTK_PREVIEW_COLOR);
|
||||
gtk_preview_size (GTK_PREVIEW (xpreview), logo_width, logo_height);
|
||||
temp = g_malloc((logo_width+10)*3);
|
||||
datapointer=header_data+logo_width*logo_height-1;
|
||||
for (y = 0; y < logo_height; y++){
|
||||
temp2=temp;
|
||||
for (x = 0; x< logo_width; x++) {
|
||||
HEADER_PIXEL(datapointer,temp2); temp2+=3;}
|
||||
gtk_preview_draw_row (GTK_PREVIEW (xpreview),
|
||||
temp,
|
||||
0, y, logo_width);
|
||||
}
|
||||
g_free(temp);
|
||||
gtk_container_add (GTK_CONTAINER (xframe2), xpreview);
|
||||
gtk_widget_show (xpreview);
|
||||
gtk_widget_show (xframe2);
|
||||
gtk_widget_show (xlogo_box);
|
||||
gtk_widget_show (xhbox);
|
||||
|
||||
xhbox = gtk_hbox_new(FALSE, 5);
|
||||
gtk_box_pack_start(GTK_BOX(xvbox), xhbox, TRUE, TRUE, 0);
|
||||
text = "\nCotting Software Productions\n"
|
||||
"Bahnhofstrasse 31\n"
|
||||
"CH-3066 Stettlen (Switzerland)\n\n"
|
||||
"cotting@mygale.org\n"
|
||||
"http://www.mygale.org/~cotting\n\n"
|
||||
"Conical Anamorphose\nPlug-In for the GIMP\n"
|
||||
"Version 1.03\n";
|
||||
xlabel = gtk_label_new(text);
|
||||
gtk_box_pack_start(GTK_BOX(xhbox), xlabel, TRUE, FALSE, 0);
|
||||
gtk_widget_show(xlabel);
|
||||
|
||||
gtk_widget_show(xhbox);
|
||||
|
||||
gtk_widget_show(xvbox);
|
||||
gtk_widget_show(xframe);
|
||||
gtk_widget_show(xdlg);
|
||||
|
||||
gtk_main();
|
||||
gdk_flush();
|
||||
return xdlg;
|
||||
}
|
|
@ -1,73 +0,0 @@
|
|||
-------------------------------------------
|
||||
GIMP-Plug-In
|
||||
-------------------------------------------
|
||||
Written by Daniel Cotting
|
||||
Bahnhofstrasse 31
|
||||
CH-3066 Stettlen (Switzerland)
|
||||
|
||||
cotting@mygale.org
|
||||
www.mygale.org/~cotting
|
||||
-------------------------------------------
|
||||
Some code is taken out of other plug-ins
|
||||
written by other authors.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
INSTALLATION
|
||||
-------------------------------------------
|
||||
To install it, you have to edit the
|
||||
Makefile (change install-path).
|
||||
Afterwards run make. This will compile
|
||||
and install the plug-in in the right
|
||||
directory. Once the new code is installed,
|
||||
you can run the GIMP and enjoy the new
|
||||
functions and effects it provides.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
REDUCE CODE SIZE
|
||||
-------------------------------------------
|
||||
With this new release 1.03 the size of
|
||||
the logo in the about box has been reduced
|
||||
in order to make smaller binaries.
|
||||
If you find that the plug-in is still
|
||||
too big, you can compress the executables
|
||||
with the gzexe program (if it is avaiable
|
||||
on your system). To do so, change to the
|
||||
plug-in directory of the GIMP...
|
||||
|
||||
cd /usr/local/lib/gimp/VERSION/plug-ins
|
||||
|
||||
...and execute the command...
|
||||
|
||||
gzexe PLUGIN_NAME
|
||||
|
||||
...and remember to remove the uncompres-
|
||||
sed binary, which has been renamed to
|
||||
PLUGIN_NAME~, by running the command:
|
||||
|
||||
rm PLUGIN_NAME~
|
||||
|
||||
This will result in a code size of about
|
||||
20 kB, which isn't too much IMHO.
|
||||
------------------------------------------
|
||||
|
||||
|
||||
------------------------------------------
|
||||
FEEDBACK
|
||||
------------------------------------------
|
||||
I'm interested in any feedback, comments,
|
||||
bug-reports, suggestions etc. If you
|
||||
have anything you would like to tell
|
||||
me, you can write to cotting@mygale.org.
|
||||
Also have a look at the GIMP-section of
|
||||
my homepage at www.mygale.org/~cotting.
|
||||
------------------------------------------
|
||||
|
||||
Thank you and happy GIMPing!
|
||||
Daniel Cotting
|
||||
|
||||
------------------------------------------
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
pluginlibdir = $(gimpplugindir)/plug-ins
|
||||
|
||||
pluginlib_PROGRAMS = Anamorphose
|
||||
|
||||
Anamorphose_SOURCES = \
|
||||
Anamorphose.c logo.h
|
||||
|
||||
INCLUDES = \
|
||||
$(X_CFLAGS) \
|
||||
-I$(top_srcdir) \
|
||||
-I$(includedir)
|
||||
|
||||
LDADD = \
|
||||
$(top_builddir)/libgimp/libgimpui.la \
|
||||
$(top_builddir)/libgimp/libgimp.la \
|
||||
$(X_LIBS) \
|
||||
-lc
|
||||
|
||||
DEPS = \
|
||||
$(top_builddir)/libgimp/libgimpui.la \
|
||||
$(top_builddir)/libgimp/libgimp.la
|
||||
|
||||
Anamorphose_DEPENDENCIES = $(DEPS)
|
||||
|
||||
.PHONY: files
|
||||
|
||||
files:
|
||||
@files=`ls $(DISTFILES) 2> /dev/null`; for p in $$files; do \
|
||||
echo $$p; \
|
||||
done
|
||||
@for subdir in $(SUBDIRS); do \
|
||||
files=`cd $$subdir; $(MAKE) files | grep -v "make\[[1-9]\]"`; \
|
||||
for file in $$files; do \
|
||||
echo $$subdir/$$file; \
|
||||
done; \
|
||||
done
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,73 +0,0 @@
|
|||
-------------------------------------------
|
||||
GIMP-Plug-In
|
||||
-------------------------------------------
|
||||
Written by Daniel Cotting
|
||||
Bahnhofstrasse 31
|
||||
CH-3066 Stettlen (Switzerland)
|
||||
|
||||
cotting@mygale.org
|
||||
www.mygale.org/~cotting
|
||||
-------------------------------------------
|
||||
Some code is taken out of other plug-ins
|
||||
written by other authors.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
INSTALLATION
|
||||
-------------------------------------------
|
||||
To install it, you have to edit the
|
||||
Makefile (change install-path).
|
||||
Afterwards run make. This will compile
|
||||
and install the plug-in in the right
|
||||
directory. Once the new code is installed,
|
||||
you can run the GIMP and enjoy the new
|
||||
functions and effects it provides.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
REDUCE CODE SIZE
|
||||
-------------------------------------------
|
||||
With this new release 1.03 the size of
|
||||
the logo in the about box has been reduced
|
||||
in order to make smaller binaries.
|
||||
If you find that the plug-in is still
|
||||
too big, you can compress the executables
|
||||
with the gzexe program (if it is avaiable
|
||||
on your system). To do so, change to the
|
||||
plug-in directory of the GIMP...
|
||||
|
||||
cd /usr/local/lib/gimp/VERSION/plug-ins
|
||||
|
||||
...and execute the command...
|
||||
|
||||
gzexe PLUGIN_NAME
|
||||
|
||||
...and remember to remove the uncompres-
|
||||
sed binary, which has been renamed to
|
||||
PLUGIN_NAME~, by running the command:
|
||||
|
||||
rm PLUGIN_NAME~
|
||||
|
||||
This will result in a code size of about
|
||||
20 kB, which isn't too much IMHO.
|
||||
------------------------------------------
|
||||
|
||||
|
||||
------------------------------------------
|
||||
FEEDBACK
|
||||
------------------------------------------
|
||||
I'm interested in any feedback, comments,
|
||||
bug-reports, suggestions etc. If you
|
||||
have anything you would like to tell
|
||||
me, you can write to cotting@mygale.org.
|
||||
Also have a look at the GIMP-section of
|
||||
my homepage at www.mygale.org/~cotting.
|
||||
------------------------------------------
|
||||
|
||||
Thank you and happy GIMPing!
|
||||
Daniel Cotting
|
||||
|
||||
------------------------------------------
|
||||
|
|
@ -1,75 +0,0 @@
|
|||
-------------------------------------------
|
||||
GIMP-Plug-In
|
||||
-------------------------------------------
|
||||
Written by Daniel Cotting
|
||||
Bahnhofstrasse 31
|
||||
CH-3066 Stettlen (Switzerland)
|
||||
|
||||
cotting@mygale.org
|
||||
www.mygale.org/~cotting
|
||||
-------------------------------------------
|
||||
Some code is taken out of other plug-ins
|
||||
written by other authors.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
INSTALLATION
|
||||
-------------------------------------------
|
||||
To install it, you have to edit the
|
||||
Makefile (change install-path).
|
||||
Afterwards run make. This will compile
|
||||
and install the plug-in in the right
|
||||
directory. Once the new code is installed,
|
||||
you can run the GIMP and enjoy the new
|
||||
functions and effects it provides.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
REDUCE CODE SIZE
|
||||
-------------------------------------------
|
||||
With this new release 1.01 the size of
|
||||
the logo in the about box has been reduced
|
||||
in order to make smaller binaries. In
|
||||
general the compiled plug-in will be
|
||||
about 25-30% of the size of version 1.00.
|
||||
If you find that the plug-in is still
|
||||
too big, you can compress the executables
|
||||
with the gzexe program (if it is avaiable
|
||||
on your system). To do so, change to the
|
||||
plug-in directory of the GIMP...
|
||||
|
||||
cd /usr/local/lib/gimp/VERSION/plug-ins
|
||||
|
||||
...and execute the command...
|
||||
|
||||
gzexe PLUGIN_NAME
|
||||
|
||||
...and remember to remove the uncompres-
|
||||
sed binary, which has been renamed to
|
||||
PLUGIN_NAME~, by running the command:
|
||||
|
||||
rm PLUGIN_NAME~
|
||||
|
||||
This will result in a code size of about
|
||||
35 to 40 kB, which isn't too much IMHO.
|
||||
------------------------------------------
|
||||
|
||||
|
||||
------------------------------------------
|
||||
FEEDBACK
|
||||
------------------------------------------
|
||||
I'm interested in any feedback, comments,
|
||||
bug-reports, suggestions etc. If you
|
||||
have anything you would like to tell
|
||||
me, you can write to cotting@mygale.org.
|
||||
Also have a look at the GIMP-section of
|
||||
my homepage at www.mygale.org/~cotting.
|
||||
------------------------------------------
|
||||
|
||||
Thank you and happy GIMPing!
|
||||
Daniel Cotting
|
||||
|
||||
------------------------------------------
|
||||
|
|
@ -1,788 +0,0 @@
|
|||
/* GIMP header image file format (Indexed): //logo.h */
|
||||
|
||||
static unsigned int logo_width = 200;
|
||||
static unsigned int logo_height = 72;
|
||||
|
||||
/* Call this macro repeatedly. After each use, the pixel data can be extracted */
|
||||
|
||||
#define HEADER_PIXEL(data,pixel) \
|
||||
pixel[0] = palette_data[data[0]*3+2]; \
|
||||
pixel[1] = palette_data[data[0]*3+1]; \
|
||||
pixel[2] = palette_data[data[0]*3+0]; \
|
||||
data--;
|
||||
|
||||
static unsigned char
|
||||
palette_data[] = { 4,2,2,4,110,178,32,4,122,4,36,
|
||||
86,15,3,66,4,58,127,36,8,186,4,34,122,17,2,
|
||||
34,4,19,66,12,4,162,90,2,69,88,2,48,7,20,
|
||||
2,25,2,103,8,14,48,4,58,186,90,3,154,82,2,
|
||||
129,55,2,34,17,2,18,17,34,191,94,2,101,57,2,
|
||||
70,7,32,154,12,22,157,17,3,50,4,88,150,96,3,
|
||||
186,86,2,138,87,2,86,212,214,210,4,19,98,52,2,
|
||||
154,15,11,2,4,132,216,7,18,125,12,6,82,37,12,
|
||||
18,4,88,189,86,14,48,128,2,157,32,4,138,4,60,
|
||||
155,4,48,126,60,2,218,7,10,52,13,12,66,129,2,
|
||||
50,56,2,52,52,14,98,4,47,157,6,20,87,48,2,
|
||||
24,58,2,101,120,2,141,52,5,170,4,113,215,127,2,
|
||||
73,4,90,210,4,52,112,36,18,194,59,2,85,42,2,
|
||||
10,107,2,173,95,2,114,31,3,52,4,79,160,84,3,
|
||||
189,14,10,40,30,2,69,96,2,58,113,2,126,9,37,
|
||||
231,17,33,170,28,14,2,4,30,146,68,10,37,132,2,
|
||||
82,23,4,7,4,10,122,4,36,108,32,2,37,7,27,
|
||||
2,4,98,175,84,10,146,4,101,191,4,14,146,8,29,
|
||||
86,4,2,170,8,60,230,84,10,162,72,2,39,102,2,
|
||||
142,4,142,221,4,49,143,68,12,170,4,124,213,15,4,
|
||||
74,114,2,69,112,2,158,32,3,23,8,50,190,111,2,
|
||||
104,6,40,154,96,2,210,6,28,104,60,2,138,61,2,
|
||||
25,68,2,114,58,2,125,39,2,114,73,2,69,16,4,
|
||||
58,4,88,177,56,14,26,138,2,173,4,68,176,71,2,
|
||||
55,76,2,210,4,78,130,17,3,42,6,27,69,112,2,
|
||||
49,12,26,178,47,13,159,18,11,10,13,11,74,141,2,
|
||||
58,52,18,234,4,82,186,4,126,198,4,103,213,4,62,
|
||||
206,4,72,226,12,46,210,72,12,222,12,26,146,20,34,
|
||||
210,4,113,197,4,131,229,4,48,170,4,76,170,7,43,
|
||||
95,52,30,218,15,11,170,52,14,202,12,14,86,4,40,
|
||||
174,108,14,202,156,2,186,60,12,130,5,40,129,73,13,
|
||||
189,12,42,138,44,14,202,4,59,143,4,124,229,4,69,
|
||||
191,4,69,157,4,60,114,4,43,110,14,14,58,20,26,
|
||||
157,28,26,210,4,87,162,4,91,202,4,110,226,4,98,
|
||||
226,4,101,202,17,14,186,28,18,18,60,2,234,28,10,
|
||||
114,4,30,114,8,10,162,12,54,186,20,26,130,100,10,
|
||||
170,40,18,154,4,22,114,28,26,234,4,22,58,4,66,
|
||||
226,4,54,202,12,42,202,4,38,98,4,145,234,4,76,
|
||||
146,4,94,148,4,138,213,4,94,186,4,54,126,4,54,
|
||||
154,4,118,211,4,106,178,4,106,188,4,54,142,4,94,
|
||||
170,4,70,202,4,118,197,4,54,173,4,82,178,72,4,
|
||||
172,36,10,138,76,14,162,4,98,210,4,118,226,112,2,
|
||||
114,24,19,8,30,2,85,84,6,226,141,2,73,28,30,
|
||||
10,28,46,186,112,4,206,36,10,90,36,2,174,108,2,
|
||||
58,41,3,130,44,10,194,9,33,130,92,2,162,51,2,
|
||||
42,12,32,162,81,3,146,44,11,26,28,6,146,44,2,
|
||||
178,30,12,10,60,10,178,64,2,146,28,10,178,92,10,
|
||||
210,5,41,146,40,2,102,96,2,125,100,2,88,74,2,
|
||||
157,142,2,159,26,10,55,143,2,50,73,2,102,134,2,
|
||||
142,73,2,84,127,2,126,142,2,82,156,2,178,28,10,
|
||||
158,28,26,114,84,14,202,12,4,10,5,20,74,17,2,
|
||||
26,92,2,194,7,19,106};
|
||||
|
||||
static unsigned char header_data[] = { 71,99,218,218,99,11,71,218,71,71,
|
||||
218,99,99,99,71,99,218,99,99,99,99,218,71,218,99,218,218,99,99,218,
|
||||
218,99,99,218,99,218,99,58,218,99,99,99,58,218,99,99,99,58,99,58,
|
||||
99,58,11,58,99,58,58,11,99,58,99,58,99,99,99,218,99,218,99,58,
|
||||
99,71,99,218,71,12,12,12,12,12,12,12,12,12,92,19,19,19,92,92,
|
||||
92,92,19,108,19,19,19,19,19,19,53,53,53,53,101,19,19,53,53,19,
|
||||
19,19,12,92,92,12,12,12,71,71,218,99,218,218,71,71,12,12,218,99,
|
||||
58,58,58,99,99,99,58,99,99,99,11,58,11,58,58,99,58,99,99,99,
|
||||
58,99,99,99,99,58,99,99,99,99,99,218,99,99,11,99,99,99,11,99,
|
||||
99,218,218,218,99,218,99,99,218,218,99,99,218,99,218,218,99,99,218,11,
|
||||
218,71,99,218,99,218,218,99,71,8,218,99,218,218,99,99,99,99,99,99,
|
||||
218,218,99,99,218,99,218,99,218,71,99,99,99,218,99,99,218,99,99,99,
|
||||
218,218,99,99,99,99,58,99,58,30,99,99,99,99,99,99,58,99,99,58,
|
||||
99,58,99,58,99,99,58,58,58,99,58,58,99,218,218,71,99,99,71,71,
|
||||
71,123,12,118,71,71,12,71,123,12,12,19,19,19,53,19,19,53,53,19,
|
||||
19,53,101,63,20,63,20,63,53,53,53,101,53,53,53,19,53,53,53,19,
|
||||
92,12,12,12,71,12,12,12,12,12,92,71,218,218,71,218,71,71,71,71,
|
||||
99,218,58,58,58,99,99,99,99,58,58,58,99,58,99,58,58,99,58,58,
|
||||
99,99,58,99,99,99,99,58,99,58,30,99,99,99,218,99,58,99,99,58,
|
||||
11,99,99,218,99,218,218,99,99,218,71,99,218,99,99,218,99,99,218,99,
|
||||
11,218,99,218,99,11,218,99,99,8,71,71,71,99,218,71,218,99,71,218,
|
||||
11,99,218,218,99,218,99,218,99,99,99,99,218,99,99,99,99,99,218,99,
|
||||
99,99,99,99,99,11,99,99,99,99,99,99,58,99,58,99,58,99,58,58,
|
||||
99,11,58,58,99,58,99,99,58,58,218,99,123,71,71,71,123,71,71,218,
|
||||
99,99,218,71,12,12,12,12,92,19,19,53,19,53,53,53,53,19,53,53,
|
||||
53,53,19,53,19,53,53,53,53,53,63,63,101,63,63,20,53,19,53,53,
|
||||
53,19,92,92,12,12,12,71,71,71,71,12,12,71,71,12,12,12,12,12,
|
||||
12,218,218,99,58,58,99,58,99,58,99,58,99,99,58,218,58,99,58,99,
|
||||
99,99,99,11,58,99,99,58,99,99,58,58,99,99,99,99,99,99,99,99,
|
||||
99,58,218,99,218,99,99,99,218,99,99,218,99,11,218,99,218,218,99,99,
|
||||
218,99,218,11,99,71,99,218,71,8,99,99,218,99,99,99,218,99,99,218,
|
||||
218,99,11,99,99,218,99,218,99,218,218,99,58,99,99,99,58,11,99,99,
|
||||
58,99,99,58,58,58,58,99,99,99,99,218,58,99,99,99,58,58,99,99,
|
||||
58,58,99,58,99,58,99,99,58,58,99,218,71,71,218,218,218,58,58,58,
|
||||
218,99,71,123,12,12,12,19,19,108,108,108,92,92,92,12,71,12,12,92,
|
||||
19,53,53,53,101,53,53,19,53,101,53,20,53,79,79,0,34,79,20,63,
|
||||
53,53,53,19,19,19,12,12,12,71,71,71,71,71,71,123,71,12,12,12,
|
||||
12,12,71,71,218,58,99,58,218,58,218,99,58,99,58,99,99,218,58,58,
|
||||
58,99,58,58,99,99,58,99,58,99,99,218,58,58,99,99,99,99,99,99,
|
||||
58,11,99,99,218,218,218,99,218,99,99,218,218,99,218,99,99,218,218,99,
|
||||
218,99,71,218,99,218,99,99,99,8,218,218,99,218,99,218,99,218,218,99,
|
||||
11,218,218,218,218,99,71,99,218,99,99,99,218,58,99,99,99,99,218,30,
|
||||
58,99,58,99,58,11,58,99,58,99,58,58,58,99,58,58,99,99,58,58,
|
||||
58,99,58,99,58,58,99,58,218,99,99,218,58,99,58,58,58,58,58,218,
|
||||
71,12,12,71,71,12,12,12,12,71,71,118,71,71,118,71,71,12,223,19,
|
||||
19,53,53,53,53,63,229,20,79,20,34,0,20,101,101,63,20,101,101,53,
|
||||
108,53,53,53,53,53,101,19,92,12,12,12,12,71,71,218,218,218,71,71,
|
||||
118,12,71,71,218,218,58,58,58,58,58,58,218,58,58,58,99,99,218,99,
|
||||
58,58,99,99,58,99,58,99,58,58,58,99,99,99,58,99,99,99,58,58,
|
||||
99,58,58,99,99,99,99,99,99,99,218,99,99,218,99,218,218,99,99,218,
|
||||
99,58,99,99,218,99,218,218,218,8,99,218,99,218,99,218,11,99,218,99,
|
||||
99,99,99,99,218,99,58,99,99,99,58,99,218,99,99,99,99,99,58,99,
|
||||
58,218,99,99,99,58,218,58,58,58,99,99,58,99,218,58,99,99,58,218,
|
||||
58,99,58,99,99,99,58,99,58,58,58,58,99,58,58,58,58,218,218,12,
|
||||
71,71,71,12,12,71,71,12,71,12,71,71,71,71,12,92,19,53,53,53,
|
||||
101,63,79,34,251,0,0,63,20,53,19,53,53,53,53,19,19,53,19,19,
|
||||
19,108,19,19,19,19,19,19,53,53,108,12,12,12,71,71,218,58,58,58,
|
||||
99,218,71,71,71,12,218,99,99,58,58,58,58,218,58,58,58,58,58,99,
|
||||
99,58,58,99,58,218,58,99,99,99,99,58,99,128,99,58,99,99,11,99,
|
||||
99,58,11,58,99,99,99,218,58,11,99,58,99,218,99,99,218,99,99,99,
|
||||
218,71,99,99,218,99,11,99,218,8,218,99,218,99,218,99,99,218,99,218,
|
||||
58,218,58,218,99,99,218,99,58,99,99,99,99,78,11,58,99,58,99,99,
|
||||
99,58,58,99,58,11,58,58,218,99,99,58,58,58,99,58,58,58,99,99,
|
||||
58,58,58,58,58,58,99,58,99,99,99,58,58,58,58,58,218,71,118,12,
|
||||
71,71,71,71,71,12,71,71,71,71,71,12,92,19,19,53,53,63,20,251,
|
||||
0,79,79,0,79,34,34,79,0,63,229,20,63,101,53,101,19,53,19,92,
|
||||
12,71,12,92,12,12,12,12,12,92,19,92,92,71,12,118,71,218,99,58,
|
||||
58,58,58,58,218,123,71,218,58,58,58,99,58,58,58,218,58,218,58,58,
|
||||
218,58,99,58,58,58,99,99,58,99,58,99,218,99,99,99,58,58,58,11,
|
||||
58,58,99,58,99,99,30,99,99,99,58,218,218,30,99,218,99,99,99,218,
|
||||
99,99,218,218,99,99,218,71,99,8,99,99,71,99,218,218,99,218,99,218,
|
||||
99,218,99,58,11,58,99,99,11,58,99,58,99,99,99,99,58,58,99,99,
|
||||
58,99,99,99,99,58,99,78,58,58,99,99,218,78,58,218,58,99,212,58,
|
||||
99,58,58,58,218,58,58,58,58,58,58,58,58,58,218,71,12,12,71,71,
|
||||
123,218,218,58,99,71,123,71,71,12,19,19,19,53,53,19,19,53,63,53,
|
||||
101,101,101,63,101,101,20,20,79,0,0,79,79,34,251,79,79,251,101,53,
|
||||
19,92,12,71,71,71,218,12,218,12,71,71,71,71,71,12,71,71,123,71,
|
||||
58,58,58,58,58,58,58,99,99,58,58,58,99,58,58,58,99,58,99,58,
|
||||
99,58,58,99,58,58,58,58,99,58,99,58,99,58,99,58,99,99,58,58,
|
||||
99,99,99,58,99,58,58,58,99,99,99,30,128,58,99,99,99,99,99,58,
|
||||
218,99,99,218,218,99,99,218,71,8,71,218,99,99,99,99,218,99,99,99,
|
||||
99,30,58,11,58,58,99,58,58,58,58,30,58,58,99,99,99,58,99,58,
|
||||
99,58,99,58,58,58,218,99,58,99,58,58,58,218,99,58,58,58,58,58,
|
||||
58,99,99,99,58,99,99,58,58,212,99,58,58,218,71,71,218,218,99,58,
|
||||
58,58,58,218,123,71,71,12,108,19,19,108,19,19,223,92,19,92,12,12,
|
||||
19,19,19,19,53,53,63,63,229,0,34,34,79,0,79,0,75,34,0,34,
|
||||
79,20,53,19,92,12,71,71,71,218,71,123,71,123,71,71,71,71,71,71,
|
||||
71,218,58,58,58,58,58,58,58,99,58,58,58,58,58,58,58,58,99,58,
|
||||
58,99,99,58,99,58,58,58,58,58,58,99,58,99,58,99,58,58,99,99,
|
||||
58,58,99,99,58,58,218,58,58,99,58,99,11,58,58,99,58,218,99,99,
|
||||
99,99,218,99,99,218,99,99,99,8,99,218,99,218,99,99,99,99,58,58,
|
||||
11,58,99,58,58,30,58,11,58,11,58,99,99,58,99,58,58,58,99,58,
|
||||
58,99,58,99,99,58,58,99,58,99,58,99,58,99,212,58,58,58,58,58,
|
||||
58,58,58,58,58,58,58,58,58,58,212,58,218,218,218,99,58,58,58,58,
|
||||
58,99,71,71,71,12,71,71,12,12,12,71,71,123,71,218,71,71,71,92,
|
||||
19,108,63,79,229,126,0,79,0,0,34,34,34,126,34,251,79,0,126,34,
|
||||
79,0,79,20,63,19,19,12,71,71,71,218,71,99,71,71,71,71,71,71,
|
||||
71,71,218,58,58,58,212,58,58,58,58,58,58,58,58,58,58,58,58,58,
|
||||
58,58,99,58,58,99,58,58,99,99,128,218,58,58,99,58,99,58,58,99,
|
||||
218,58,58,218,99,99,99,99,99,99,58,99,99,58,30,218,99,99,99,99,
|
||||
99,99,218,99,99,99,218,218,99,8,218,99,99,99,58,99,99,99,99,99,
|
||||
58,58,218,99,99,99,58,99,58,58,58,99,58,99,58,99,99,99,58,58,
|
||||
99,99,58,58,58,58,58,58,99,99,58,99,99,58,58,58,58,99,58,58,
|
||||
99,58,99,58,78,212,99,212,99,58,58,99,58,58,78,78,246,99,212,58,
|
||||
99,71,123,71,71,71,71,71,218,218,71,123,218,218,218,118,12,19,63,63,
|
||||
0,0,0,34,34,0,34,79,79,79,0,34,79,79,20,101,53,101,53,19,
|
||||
53,53,101,101,53,53,19,19,19,92,218,218,218,218,218,212,78,58,218,218,
|
||||
71,71,71,11,58,246,58,78,246,58,58,58,99,99,58,58,99,58,212,58,
|
||||
99,58,99,58,58,99,58,58,58,58,58,212,218,58,58,99,58,58,99,58,
|
||||
99,99,99,58,58,99,99,99,58,99,58,58,99,99,99,58,58,99,99,99,
|
||||
99,99,99,11,58,99,99,99,218,8,99,99,218,99,99,218,99,218,58,58,
|
||||
11,78,58,99,58,99,58,99,58,11,58,99,58,99,58,58,58,99,99,58,
|
||||
99,99,99,58,58,58,58,58,58,58,58,58,58,58,58,212,99,58,212,99,
|
||||
58,58,78,58,78,58,58,58,58,58,58,58,58,58,246,58,246,58,58,71,
|
||||
218,71,71,71,218,71,71,71,71,218,218,71,71,92,92,53,63,126,79,0,
|
||||
0,79,0,79,34,79,0,126,79,79,79,79,79,229,229,101,53,108,92,71,
|
||||
71,71,71,71,71,12,12,19,108,19,92,71,71,71,71,218,212,246,78,58,
|
||||
58,218,218,71,71,58,58,212,212,78,212,78,78,58,58,58,58,58,99,58,
|
||||
78,58,58,99,58,58,58,58,58,58,58,58,99,58,99,58,58,212,99,58,
|
||||
58,99,58,99,58,99,99,58,58,99,99,58,58,58,58,11,78,99,99,99,
|
||||
99,58,99,58,71,99,99,99,99,8,99,99,99,218,99,58,99,30,58,11,
|
||||
58,11,58,58,99,58,58,99,58,99,58,99,99,58,99,58,99,58,58,99,
|
||||
58,58,58,58,58,78,58,99,58,99,58,58,58,58,99,58,212,99,58,58,
|
||||
58,78,78,78,58,58,58,58,58,212,58,78,58,78,78,78,58,99,218,218,
|
||||
71,218,218,71,58,99,58,99,71,71,71,12,19,20,79,251,0,251,79,251,
|
||||
79,63,126,79,79,79,79,229,79,79,79,126,126,79,79,63,20,53,53,92,
|
||||
12,12,218,71,71,218,218,218,71,218,71,71,71,218,71,218,218,58,246,246,
|
||||
78,212,78,58,218,218,58,58,58,246,78,212,78,212,58,58,58,58,58,212,
|
||||
78,78,78,58,58,99,58,58,58,58,58,58,58,58,58,218,99,99,58,99,
|
||||
58,58,218,99,58,58,99,58,99,99,58,99,99,99,58,99,99,58,58,58,
|
||||
218,99,11,58,99,99,99,218,99,8,99,30,218,58,11,99,99,58,99,58,
|
||||
99,58,58,99,218,99,218,58,99,99,58,58,58,58,99,58,99,99,58,99,
|
||||
58,58,58,78,78,58,58,58,58,58,99,246,78,78,58,58,58,58,58,78,
|
||||
78,212,78,246,246,58,58,58,212,58,212,246,78,246,58,212,218,218,218,218,
|
||||
218,58,246,58,246,58,218,218,123,12,19,19,53,53,101,53,63,101,63,63,
|
||||
63,63,63,63,63,101,63,53,63,53,53,53,53,108,19,19,19,19,108,19,
|
||||
92,92,12,12,71,71,218,99,99,218,218,218,218,218,71,71,71,218,218,246,
|
||||
78,78,246,78,78,78,58,58,58,78,78,78,78,246,58,58,58,58,58,78,
|
||||
212,78,78,58,58,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,
|
||||
58,99,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,99,99,99,
|
||||
58,99,58,99,99,58,99,99,99,8,99,99,30,58,58,58,58,58,58,99,
|
||||
58,11,99,58,99,58,58,58,58,58,58,99,58,58,58,58,58,58,99,58,
|
||||
99,58,78,58,58,58,99,58,58,78,246,78,58,78,58,58,58,58,78,212,
|
||||
246,78,246,78,78,99,212,246,78,246,58,246,246,78,246,218,218,218,58,58,
|
||||
246,78,78,246,58,218,218,71,12,12,108,92,108,19,108,53,63,63,63,53,
|
||||
53,53,19,223,92,92,49,118,118,118,118,118,118,118,71,118,118,12,12,12,
|
||||
92,71,71,123,218,99,11,58,58,58,58,78,58,99,99,123,71,218,218,218,
|
||||
246,246,78,212,78,212,78,246,78,78,58,78,246,78,246,78,58,58,58,58,
|
||||
99,78,246,78,246,99,58,58,58,58,58,78,78,78,78,99,58,99,58,99,
|
||||
78,58,58,99,58,218,218,58,58,99,58,58,58,218,99,58,58,58,58,11,
|
||||
58,99,99,99,58,99,99,218,58,8,99,99,58,99,58,11,58,11,58,58,
|
||||
99,58,99,58,99,58,99,58,58,218,58,58,58,99,58,99,58,58,58,99,
|
||||
78,58,58,58,99,58,58,78,78,58,246,78,246,99,58,58,58,212,78,78,
|
||||
246,58,246,58,78,78,78,58,246,78,78,58,246,58,58,58,212,58,246,78,
|
||||
212,246,58,58,71,71,71,71,12,92,92,92,108,53,53,53,19,19,223,223,
|
||||
49,223,92,49,49,223,92,49,118,118,118,71,118,112,118,11,11,112,71,112,
|
||||
71,71,11,11,11,99,99,58,58,78,78,78,246,78,246,58,99,71,218,71,
|
||||
218,78,78,246,78,246,58,246,78,246,212,58,246,58,246,78,212,78,246,58,
|
||||
58,58,78,246,246,78,78,99,58,58,58,212,78,58,78,58,58,58,58,58,
|
||||
78,58,78,99,58,58,99,58,58,58,58,99,58,58,99,218,58,99,58,58,
|
||||
58,58,99,58,99,99,58,99,99,8,99,99,58,58,58,99,58,99,99,58,
|
||||
99,58,58,58,58,58,58,218,99,58,99,58,58,58,58,58,99,58,58,78,
|
||||
58,78,78,78,78,58,78,58,78,78,78,212,78,58,78,58,78,212,78,246,
|
||||
78,246,78,78,212,246,246,78,246,212,246,246,78,246,58,246,78,246,58,246,
|
||||
246,58,99,218,218,218,71,12,92,19,19,19,19,19,223,223,49,223,49,118,
|
||||
49,112,30,30,237,103,208,208,245,208,245,208,245,245,245,103,208,103,22,237,
|
||||
30,30,11,11,11,11,71,71,11,99,58,78,78,246,58,246,246,246,58,99,
|
||||
99,218,212,78,246,78,246,78,246,58,78,58,246,78,58,246,78,212,78,246,
|
||||
58,212,58,78,78,212,78,78,58,58,99,78,78,78,78,78,58,58,99,58,
|
||||
58,78,78,78,58,58,99,58,99,58,58,99,58,218,58,58,99,58,58,218,
|
||||
99,58,99,99,58,99,30,99,99,8,58,99,58,99,58,58,58,99,58,99,
|
||||
58,218,218,58,99,58,99,58,58,58,78,99,78,58,99,58,58,78,58,78,
|
||||
78,58,78,78,58,78,78,246,246,212,78,78,78,58,78,246,78,246,58,246,
|
||||
212,78,58,78,78,58,246,78,78,78,58,246,78,246,78,58,246,78,78,78,
|
||||
58,218,99,11,71,12,92,92,92,223,223,223,223,223,49,118,112,22,237,208,
|
||||
72,245,55,243,245,72,72,72,65,208,236,208,208,245,72,55,243,55,55,243,
|
||||
245,245,245,103,237,237,30,11,11,112,71,11,99,58,78,246,246,246,246,78,
|
||||
58,218,58,58,246,78,212,78,246,78,246,78,212,78,78,212,78,246,78,78,
|
||||
58,78,78,78,78,78,246,246,246,58,58,78,58,246,78,212,78,78,99,58,
|
||||
58,78,58,58,58,58,58,99,58,58,58,58,78,58,58,99,99,58,58,58,
|
||||
99,218,58,99,99,99,58,99,58,8,99,99,99,58,11,58,58,58,99,58,
|
||||
58,58,58,58,58,58,58,99,99,78,78,58,58,78,58,58,99,78,78,78,
|
||||
78,78,78,78,78,78,212,246,246,246,246,78,78,246,246,58,246,78,246,78,
|
||||
78,78,212,246,246,246,78,78,212,246,246,246,58,246,246,78,246,246,78,58,
|
||||
218,99,71,12,12,92,92,82,223,49,223,118,112,22,208,72,72,208,65,22,
|
||||
22,112,11,112,112,112,112,112,118,118,118,112,112,112,30,244,244,30,237,65,
|
||||
236,72,55,55,243,243,208,208,237,237,11,71,11,11,71,11,99,58,246,246,
|
||||
246,78,78,246,58,246,78,246,58,246,58,246,58,246,246,78,78,78,212,78,
|
||||
212,246,212,78,246,246,58,78,78,246,99,246,246,58,246,58,78,78,78,58,
|
||||
78,78,78,78,78,78,58,58,58,99,58,58,78,99,58,58,58,218,99,99,
|
||||
58,58,99,58,99,58,58,99,99,8,58,58,99,58,99,218,99,58,99,99,
|
||||
99,58,99,58,99,58,58,58,58,78,58,58,58,58,58,58,58,78,212,78,
|
||||
78,58,246,78,58,246,246,246,246,246,246,246,78,58,246,78,246,58,246,58,
|
||||
246,78,78,78,58,246,212,78,78,78,58,246,78,212,246,58,78,212,58,99,
|
||||
218,71,12,92,19,223,49,49,118,62,30,22,208,208,103,30,244,112,244,118,
|
||||
112,23,49,49,49,49,49,49,49,49,82,82,223,82,49,118,23,118,118,112,
|
||||
11,30,237,22,65,245,55,243,245,245,103,237,237,11,71,11,71,71,218,58,
|
||||
246,246,78,246,78,212,78,246,246,78,246,246,78,78,212,78,212,78,246,78,
|
||||
78,58,246,78,58,246,78,212,78,246,78,78,78,78,78,212,246,246,246,78,
|
||||
58,78,78,78,58,78,78,58,58,58,58,58,99,58,58,58,58,58,99,58,
|
||||
58,58,58,58,58,99,99,58,58,8,99,99,58,58,58,99,99,99,99,58,
|
||||
58,99,78,58,78,99,58,58,99,78,78,78,58,78,58,58,78,246,78,212,
|
||||
78,78,58,78,246,246,246,246,246,246,58,78,78,246,58,246,78,246,78,246,
|
||||
78,212,78,212,212,246,78,78,246,246,78,212,58,99,212,246,246,58,99,218,
|
||||
118,12,92,223,223,49,49,11,237,208,208,103,244,23,118,112,118,112,49,49,
|
||||
19,82,82,82,223,49,66,49,49,82,223,223,101,19,223,82,223,82,223,82,
|
||||
82,49,23,112,11,244,30,65,72,55,55,245,208,22,237,112,11,118,71,218,
|
||||
218,58,58,78,246,78,212,78,78,212,99,78,212,246,78,246,78,246,78,212,
|
||||
246,246,78,246,246,78,246,78,246,58,246,78,58,78,246,246,246,246,212,246,
|
||||
78,78,78,78,78,58,78,78,99,58,78,78,78,99,58,58,99,58,99,99,
|
||||
58,99,99,99,99,58,99,58,99,8,99,99,99,58,58,99,58,58,99,58,
|
||||
58,58,78,78,58,58,58,58,58,58,78,78,78,78,78,58,246,246,246,246,
|
||||
246,78,78,212,246,246,246,246,246,246,78,212,78,246,78,212,78,246,58,246,
|
||||
78,246,78,58,58,212,246,58,78,246,246,58,58,58,58,246,58,218,71,12,
|
||||
223,223,49,49,49,30,65,72,72,30,112,118,118,112,118,49,223,223,223,49,
|
||||
244,244,244,244,23,23,23,23,70,66,49,70,49,70,70,118,23,23,23,23,
|
||||
49,223,19,82,223,223,23,11,244,237,208,72,55,55,208,103,30,11,11,49,
|
||||
71,71,99,58,246,78,246,246,58,246,58,58,246,212,78,246,58,246,78,58,
|
||||
58,212,78,78,212,78,212,78,78,78,212,78,78,78,246,212,246,246,246,212,
|
||||
246,58,78,78,78,78,58,78,78,99,58,58,78,58,58,58,99,58,58,58,
|
||||
58,58,58,58,99,58,99,58,99,8,99,58,58,218,58,58,58,99,58,58,
|
||||
58,99,58,58,99,58,78,78,78,78,78,78,78,58,246,246,246,212,246,246,
|
||||
212,246,78,246,246,246,246,246,212,246,246,78,246,58,212,246,78,78,78,246,
|
||||
58,246,212,99,58,246,78,246,246,58,58,58,58,78,246,58,99,118,12,92,
|
||||
223,223,223,11,22,72,208,244,49,112,112,118,49,82,223,49,244,244,242,62,
|
||||
23,62,23,23,244,244,244,244,244,244,62,30,244,244,244,244,23,112,210,23,
|
||||
62,244,244,23,223,82,53,82,49,112,30,30,65,72,55,245,208,237,30,112,
|
||||
71,49,118,71,99,78,78,78,246,246,58,99,58,246,212,78,246,58,246,212,
|
||||
99,58,212,246,78,246,78,246,212,246,78,246,246,212,246,246,246,212,246,246,
|
||||
246,246,78,78,246,246,78,78,78,78,58,58,78,58,58,58,58,58,99,99,
|
||||
99,78,99,58,99,99,58,99,58,8,58,99,58,99,99,58,58,99,58,58,
|
||||
58,58,58,58,78,58,78,78,58,78,58,246,78,78,78,212,246,246,212,246,
|
||||
246,246,246,246,246,246,246,246,246,246,246,58,246,58,99,212,246,212,78,78,
|
||||
78,99,58,58,78,246,58,78,246,58,58,58,58,212,58,218,71,12,49,49,
|
||||
49,112,22,72,65,112,49,112,112,112,223,19,118,62,244,62,62,23,23,244,
|
||||
244,244,244,112,23,49,49,223,19,223,82,223,223,49,223,23,118,112,244,30,
|
||||
62,62,62,62,23,62,23,223,82,8,82,71,30,244,22,72,55,245,103,237,
|
||||
11,71,12,12,71,99,78,78,78,58,212,58,58,58,58,212,78,58,246,78,
|
||||
58,58,58,212,78,246,58,78,78,212,212,246,246,246,212,246,246,246,246,246,
|
||||
246,246,58,78,78,58,246,212,78,78,58,78,58,78,78,78,58,78,58,58,
|
||||
218,58,58,99,58,99,99,99,58,8,218,99,58,58,58,99,58,58,99,78,
|
||||
78,58,99,58,58,78,58,78,246,78,78,58,78,212,246,246,246,246,246,246,
|
||||
246,246,246,212,246,212,246,246,246,212,78,246,58,58,58,246,78,78,212,246,
|
||||
58,58,58,58,212,78,246,212,58,58,58,58,58,58,71,12,49,223,223,49,
|
||||
30,208,72,30,49,49,112,49,223,223,23,22,244,62,23,23,62,22,112,118,
|
||||
49,49,223,118,23,244,30,242,22,242,242,62,242,244,244,112,23,49,49,223,
|
||||
23,112,30,244,62,112,210,23,23,49,82,8,223,244,237,30,208,55,243,245,
|
||||
22,30,71,118,12,71,99,78,78,246,212,58,58,58,58,246,246,246,78,246,
|
||||
58,58,58,78,212,78,246,246,246,58,58,212,246,246,246,246,246,246,246,246,
|
||||
246,78,246,58,246,246,246,78,212,78,78,78,58,78,58,78,58,58,99,58,
|
||||
58,58,99,58,58,58,58,58,58,8,58,99,58,58,58,58,99,58,78,78,
|
||||
58,58,78,58,58,78,78,58,78,78,78,78,78,246,212,246,246,246,246,246,
|
||||
246,246,246,246,246,246,212,246,246,246,78,58,58,58,58,246,78,78,246,99,
|
||||
212,58,212,58,212,78,78,58,58,218,58,212,58,99,71,49,223,49,49,30,
|
||||
55,72,112,49,244,11,49,82,112,242,242,62,23,62,244,112,118,223,82,118,
|
||||
30,236,29,225,231,33,248,42,42,42,219,2,42,219,110,107,231,29,65,244,
|
||||
112,223,223,49,112,30,30,23,23,23,23,49,82,101,49,30,30,242,72,243,
|
||||
208,103,30,71,118,12,71,99,78,78,78,58,58,58,58,58,78,58,246,78,
|
||||
58,58,99,58,246,58,246,58,246,58,99,58,212,246,246,212,246,246,246,246,
|
||||
246,246,246,246,212,246,246,246,246,78,58,78,78,78,78,78,58,78,78,78,
|
||||
58,78,99,99,99,58,58,99,99,8,99,58,99,99,58,58,58,58,78,78,
|
||||
78,78,58,58,58,78,78,78,78,78,246,246,58,246,246,246,246,246,246,246,
|
||||
246,246,212,246,99,58,246,246,246,246,212,58,58,58,99,212,78,212,212,58,
|
||||
78,58,58,58,246,246,78,58,71,218,58,58,11,71,118,223,49,23,103,243,
|
||||
22,49,118,30,118,82,49,30,242,62,70,62,244,118,223,82,112,65,93,205,
|
||||
217,42,80,147,98,4,26,8,8,8,8,121,8,8,26,4,98,210,111,219,
|
||||
29,29,65,112,223,82,23,30,244,62,62,62,62,49,82,82,112,30,30,65,
|
||||
243,245,103,30,71,118,12,71,218,212,246,58,58,212,212,58,58,246,212,78,
|
||||
58,58,212,58,58,246,78,246,58,58,58,58,246,212,246,246,246,246,246,246,
|
||||
246,212,246,246,246,246,212,246,246,212,78,246,212,78,58,78,78,78,58,78,
|
||||
78,78,58,58,58,58,99,58,58,8,58,58,58,58,58,58,58,58,237,78,
|
||||
58,78,78,58,78,78,212,78,246,78,78,246,246,246,246,246,246,246,246,246,
|
||||
246,246,246,58,58,58,246,246,246,246,58,58,99,58,58,246,246,78,99,78,
|
||||
246,78,58,58,58,58,58,218,12,99,58,99,71,92,49,223,118,22,41,65,
|
||||
223,23,30,118,19,23,22,242,23,23,30,112,223,19,112,29,222,232,87,80,
|
||||
98,26,121,8,20,253,20,20,20,20,101,20,20,20,253,253,20,8,121,26,
|
||||
4,14,2,231,29,30,49,82,112,30,244,62,23,210,118,82,101,223,30,244,
|
||||
65,55,243,103,237,71,118,71,71,99,58,58,58,58,218,58,58,58,246,212,
|
||||
58,58,212,78,99,58,246,246,78,58,58,58,58,246,246,246,246,246,246,246,
|
||||
246,246,246,212,246,246,246,246,246,246,246,78,78,78,78,78,58,78,58,78,
|
||||
78,58,58,58,78,99,58,58,99,8,99,58,58,99,99,58,58,58,58,237,
|
||||
78,78,58,78,78,246,78,246,78,246,78,246,246,246,246,246,246,246,246,246,
|
||||
246,246,58,58,58,58,246,246,246,58,99,78,246,212,99,246,212,58,78,246,
|
||||
58,246,58,58,58,212,218,12,118,58,58,71,12,49,19,49,237,41,65,49,
|
||||
118,112,223,82,244,236,62,66,62,30,82,8,112,93,68,6,137,88,162,253,
|
||||
253,20,253,19,223,23,244,244,54,242,54,242,244,62,112,49,223,20,20,20,
|
||||
20,253,26,98,14,33,29,244,82,101,112,22,62,62,62,23,49,53,82,30,
|
||||
112,22,243,243,208,11,71,118,12,218,99,58,58,58,12,71,58,58,58,58,
|
||||
99,58,58,246,246,58,58,246,246,58,58,58,99,58,246,246,246,246,78,58,
|
||||
246,212,246,246,246,246,246,212,246,246,78,78,78,78,58,78,78,78,78,58,
|
||||
78,58,78,237,78,58,99,99,78,8,58,99,58,58,78,78,78,78,78,78,
|
||||
58,78,78,58,78,246,78,212,246,246,246,246,246,246,246,246,246,103,246,246,
|
||||
246,246,58,58,58,99,212,246,246,58,212,78,246,58,58,58,58,58,212,78,
|
||||
78,78,58,58,58,58,123,49,218,99,11,118,223,223,82,237,41,208,23,118,
|
||||
237,223,82,244,18,210,23,23,112,19,223,103,64,6,148,147,26,253,20,8,
|
||||
66,23,54,111,219,219,137,24,76,24,163,25,137,42,204,42,151,109,244,223,
|
||||
20,20,20,20,8,4,111,231,236,23,82,12,237,62,62,23,62,223,253,223,
|
||||
237,244,22,41,245,103,11,112,118,71,218,58,58,99,92,92,128,58,58,58,
|
||||
58,58,58,212,78,58,58,212,58,58,58,78,78,58,212,246,246,246,58,58,
|
||||
212,246,212,246,246,246,246,246,246,212,246,78,246,246,78,78,78,78,78,58,
|
||||
78,58,58,78,99,58,58,58,99,8,99,58,58,58,58,78,78,58,78,78,
|
||||
78,78,78,78,78,58,246,246,246,246,246,246,246,246,103,246,246,246,246,246,
|
||||
246,78,58,58,58,58,58,212,58,58,78,212,78,78,99,58,58,212,78,246,
|
||||
212,212,58,58,58,218,92,12,218,99,71,12,223,82,118,243,55,23,223,30,
|
||||
223,19,244,93,54,49,23,112,82,82,245,153,138,234,162,8,253,101,49,30,
|
||||
111,125,24,201,142,16,159,142,43,95,197,156,193,193,51,141,224,25,248,231,
|
||||
65,118,20,20,20,20,121,210,231,55,244,82,49,30,244,62,62,244,223,20,
|
||||
118,237,112,208,243,245,237,71,118,49,71,58,58,218,92,92,12,58,58,99,
|
||||
58,58,212,78,212,212,58,58,58,58,58,212,78,58,58,246,246,246,99,58,
|
||||
99,246,246,246,246,246,246,246,246,246,212,246,58,78,78,78,78,78,58,78,
|
||||
78,58,78,78,58,78,58,99,58,8,99,99,58,58,58,78,78,58,78,58,
|
||||
78,78,78,246,78,78,78,246,246,246,246,246,246,246,246,103,246,246,246,246,
|
||||
246,58,58,58,58,58,58,58,58,58,78,78,246,78,58,58,58,212,78,58,
|
||||
58,78,58,58,58,12,92,12,99,218,118,19,82,223,22,116,237,49,112,112,
|
||||
101,112,93,109,70,112,118,82,223,55,136,185,44,26,253,253,82,62,107,163,
|
||||
117,16,114,159,161,106,98,46,26,26,26,26,26,4,32,81,44,142,43,234,
|
||||
10,56,236,23,20,20,20,8,4,219,225,237,19,82,11,244,62,54,62,223,
|
||||
20,112,30,244,72,239,103,237,71,12,12,71,58,71,92,92,12,128,58,58,
|
||||
58,58,246,78,246,58,58,58,99,58,58,246,78,78,58,246,246,58,58,58,
|
||||
58,212,246,212,246,246,246,246,246,246,78,78,246,58,246,58,78,246,78,58,
|
||||
78,58,78,78,58,58,58,58,58,8,58,58,58,58,78,237,58,78,78,78,
|
||||
78,78,78,58,246,246,212,246,246,246,246,246,246,246,246,246,246,246,246,246,
|
||||
78,58,58,58,58,58,99,58,58,246,246,246,58,246,58,58,58,78,246,218,
|
||||
11,58,58,58,58,12,92,71,218,11,49,223,101,23,239,93,23,118,244,223,
|
||||
223,65,29,70,70,112,82,82,72,233,135,152,121,253,20,49,242,179,176,39,
|
||||
198,156,32,47,26,26,69,113,26,47,9,47,162,113,26,121,113,252,152,159,
|
||||
43,234,217,238,30,253,20,251,8,4,107,17,30,82,223,22,62,62,54,244,
|
||||
82,19,237,112,244,41,245,30,112,71,92,71,99,71,12,92,92,71,78,58,
|
||||
58,246,246,58,78,212,58,58,58,58,58,78,246,58,99,58,212,58,58,58,
|
||||
58,78,246,246,246,246,246,246,246,246,246,246,78,78,78,78,246,58,78,78,
|
||||
58,58,58,99,58,99,58,58,58,8,58,99,99,58,58,78,78,58,78,58,
|
||||
78,58,78,78,78,78,78,246,246,246,246,246,246,246,246,246,78,246,246,246,
|
||||
58,58,78,58,78,58,58,99,58,78,58,246,246,58,58,58,212,58,58,12,
|
||||
71,58,58,58,99,92,92,71,218,71,223,8,19,22,150,30,49,11,23,101,
|
||||
30,93,54,49,112,49,20,30,254,181,95,26,253,253,49,65,163,166,206,202,
|
||||
52,26,8,121,4,161,43,114,139,131,57,200,195,188,192,88,26,26,121,98,
|
||||
197,67,234,145,230,22,82,20,20,8,98,107,100,112,253,112,103,244,54,62,
|
||||
49,20,49,237,118,208,243,103,11,11,12,92,92,92,92,12,49,12,58,58,
|
||||
78,58,246,78,246,78,212,99,58,58,78,246,58,78,58,58,58,99,58,58,
|
||||
58,99,246,246,246,246,246,246,246,246,246,246,246,78,246,78,246,78,58,78,
|
||||
78,58,78,78,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78,
|
||||
78,78,78,78,78,246,246,246,246,246,246,246,246,246,246,246,58,212,58,246,
|
||||
99,212,58,99,78,99,58,58,78,246,58,58,58,78,78,58,78,78,99,71,
|
||||
12,71,58,58,12,12,12,71,11,12,223,101,49,243,100,118,223,112,82,19,
|
||||
93,225,113,23,244,101,223,41,129,199,52,253,20,223,242,124,39,57,117,122,
|
||||
121,121,47,44,195,35,94,196,165,189,189,189,27,84,200,139,67,186,26,121,
|
||||
240,106,159,234,175,68,242,20,20,20,8,210,238,93,223,19,237,244,23,54,
|
||||
62,19,101,244,112,30,243,208,237,11,12,92,49,223,12,12,92,12,58,78,
|
||||
246,78,58,246,78,212,78,78,58,58,212,58,58,58,78,99,58,58,99,58,
|
||||
58,58,246,246,246,246,246,246,246,246,246,246,78,246,58,78,58,78,78,78,
|
||||
78,78,237,78,58,58,58,58,58,8,99,58,99,58,78,78,78,58,78,78,
|
||||
78,78,78,78,78,58,246,246,246,246,103,246,246,246,246,218,58,58,78,78,
|
||||
58,99,71,12,58,78,58,78,58,78,123,12,78,78,58,212,78,78,123,92,
|
||||
12,12,99,99,12,92,92,71,11,118,82,101,112,116,236,82,112,112,82,118,
|
||||
100,110,66,23,49,101,244,215,73,43,69,253,101,23,219,59,97,202,52,8,
|
||||
8,4,120,97,187,139,27,143,46,113,26,26,46,88,60,27,131,200,192,47,
|
||||
82,66,81,159,234,170,68,118,20,251,20,26,2,64,244,101,118,22,23,62,
|
||||
62,49,20,118,244,23,208,245,30,11,71,12,92,12,12,49,12,12,71,58,
|
||||
246,246,78,246,78,246,58,78,58,78,212,218,12,246,78,99,58,78,78,11,
|
||||
12,58,58,246,246,103,246,246,58,246,246,246,246,78,246,78,78,78,58,78,
|
||||
78,58,58,58,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78,
|
||||
78,212,78,246,246,78,99,58,246,246,246,246,246,246,71,12,99,58,58,99,
|
||||
58,58,53,251,71,78,78,78,78,246,19,19,71,246,246,78,212,246,12,92,
|
||||
12,12,12,12,92,12,12,71,218,118,19,101,244,239,65,223,244,11,53,112,
|
||||
222,235,66,112,223,20,72,45,90,221,8,253,19,242,214,97,57,152,26,8,
|
||||
26,188,57,187,139,186,8,8,8,8,121,121,8,8,26,4,44,131,94,67,
|
||||
162,82,113,44,159,76,220,29,82,0,20,8,98,238,245,82,82,237,23,62,
|
||||
54,112,20,223,237,49,22,245,237,11,71,49,12,92,12,12,12,12,71,78,
|
||||
246,58,246,58,246,78,246,58,246,212,58,19,101,218,78,78,99,58,58,53,
|
||||
101,71,58,246,246,246,78,71,92,58,246,246,212,246,78,58,58,78,78,58,
|
||||
78,78,78,78,58,58,58,58,58,8,99,99,58,99,58,78,78,58,99,58,
|
||||
78,78,58,246,78,58,71,92,218,246,246,246,103,246,12,92,92,58,58,58,
|
||||
58,218,63,53,19,246,246,78,78,212,53,92,92,212,246,78,78,58,92,218,
|
||||
12,12,92,92,92,12,12,71,11,118,101,101,22,116,242,223,237,11,8,30,
|
||||
17,62,70,112,8,53,72,172,134,143,8,20,223,109,102,57,97,81,121,82,
|
||||
252,114,35,157,165,26,253,8,8,46,182,4,26,26,8,8,113,160,190,35,
|
||||
186,66,121,106,117,152,232,68,49,79,20,8,26,42,17,223,53,22,112,244,
|
||||
54,244,8,82,30,118,30,245,30,11,99,12,12,92,123,12,12,12,71,78,
|
||||
246,78,246,78,58,246,246,58,246,58,12,53,53,12,78,78,78,99,12,63,
|
||||
63,92,78,78,246,246,78,229,229,12,246,246,246,212,78,71,71,58,78,78,
|
||||
58,78,78,58,58,58,212,58,58,8,99,58,58,58,58,78,78,58,99,218,
|
||||
99,58,246,78,78,58,12,92,12,78,246,246,246,218,92,92,19,71,58,58,
|
||||
58,12,38,92,53,71,246,58,246,218,108,92,92,218,246,212,78,58,12,218,
|
||||
12,12,12,92,12,92,12,71,71,118,82,8,103,116,242,82,244,11,82,30,
|
||||
222,210,223,23,8,101,55,172,183,186,8,253,223,110,102,157,97,161,8,8,
|
||||
127,67,190,140,189,26,8,8,69,127,120,5,52,26,26,8,121,9,84,187,
|
||||
43,113,82,98,142,152,89,119,244,20,0,253,121,219,64,23,101,30,30,23,
|
||||
54,244,82,101,30,112,112,72,237,71,30,12,12,92,118,12,12,12,71,58,
|
||||
246,246,58,246,58,212,78,246,58,246,108,63,53,19,78,78,78,58,53,101,
|
||||
53,108,78,246,246,246,108,79,20,53,246,246,246,78,99,92,92,12,99,78,
|
||||
78,58,58,218,218,218,99,58,58,8,99,99,58,58,58,99,99,218,71,11,
|
||||
99,99,78,246,212,71,218,71,92,71,246,246,246,71,92,92,19,19,58,58,
|
||||
58,92,53,92,92,108,58,246,246,71,92,92,92,92,212,246,246,58,123,48,
|
||||
12,12,12,92,92,12,12,12,99,118,19,101,237,116,65,49,30,112,82,244,
|
||||
222,235,26,118,82,101,65,136,183,7,8,8,82,242,21,157,57,192,69,8,
|
||||
26,7,191,157,190,60,9,8,26,52,84,131,60,4,121,8,26,113,67,94,
|
||||
142,113,82,98,43,152,10,119,244,251,0,253,121,111,64,23,101,244,22,49,
|
||||
62,62,82,101,112,23,112,103,30,71,11,12,12,118,12,12,118,12,71,78,
|
||||
78,246,78,58,218,58,78,246,246,12,53,101,53,19,58,78,58,12,63,63,
|
||||
53,63,218,246,246,71,79,20,63,101,218,246,246,218,12,19,108,12,99,58,
|
||||
99,71,218,71,71,218,71,218,71,8,99,58,99,99,58,58,11,218,71,218,
|
||||
71,71,218,58,58,99,218,99,71,92,218,78,246,92,92,12,223,53,71,58,
|
||||
58,19,19,92,92,19,12,78,78,12,92,92,92,92,71,78,78,218,123,241,
|
||||
48,12,12,92,49,12,118,12,71,49,223,101,11,116,65,66,112,11,82,112,
|
||||
100,54,66,66,223,20,244,105,90,159,8,8,8,244,10,167,187,202,98,8,
|
||||
121,47,192,169,190,35,195,188,188,195,57,84,106,47,8,8,8,122,195,140,
|
||||
95,66,82,98,142,221,175,119,244,251,251,20,8,219,64,112,101,30,242,118,
|
||||
23,62,19,20,11,118,112,22,11,11,99,12,12,12,12,71,12,118,71,58,
|
||||
246,58,246,99,12,99,212,78,58,19,53,53,101,53,58,78,218,53,101,53,
|
||||
53,63,218,246,246,63,0,101,19,53,12,78,58,12,108,92,19,108,92,71,
|
||||
71,12,71,71,123,71,71,123,71,8,99,99,58,58,58,11,58,11,99,218,
|
||||
99,11,99,99,218,99,218,99,71,12,12,99,99,92,92,92,12,19,53,71,
|
||||
99,38,53,12,12,92,19,218,212,92,92,92,48,12,108,128,246,218,123,48,
|
||||
128,123,12,12,12,12,12,118,71,71,223,8,112,41,55,49,49,244,223,49,
|
||||
93,231,70,82,223,20,82,116,181,158,252,8,20,223,242,214,57,157,156,46,
|
||||
8,66,26,147,44,198,86,196,86,198,44,52,4,8,8,8,46,60,97,194,
|
||||
52,82,82,180,159,177,232,64,66,79,20,8,26,231,100,49,8,237,62,23,
|
||||
62,244,82,82,30,223,11,237,112,11,11,12,12,71,12,12,118,12,71,218,
|
||||
246,78,58,218,92,99,246,212,92,53,79,79,53,53,218,58,19,63,38,126,
|
||||
53,101,92,58,19,251,63,223,19,19,92,71,12,223,92,223,223,92,19,92,
|
||||
12,71,123,71,71,71,71,71,71,8,11,58,11,58,99,58,99,58,99,58,
|
||||
58,218,218,218,99,218,11,99,99,71,92,92,12,49,92,71,99,12,53,53,
|
||||
92,20,53,123,48,12,92,19,218,19,92,12,241,48,92,92,58,218,92,241,
|
||||
128,212,71,12,118,12,12,71,71,112,223,19,82,55,116,112,49,244,223,19,
|
||||
208,238,235,66,223,253,82,22,250,73,95,113,8,82,49,111,102,207,132,188,
|
||||
252,69,8,121,162,4,47,52,127,4,4,26,26,8,8,46,186,86,169,95,
|
||||
66,8,4,95,192,87,45,236,101,251,253,8,70,222,236,223,223,237,244,23,
|
||||
54,244,82,82,237,118,11,244,71,11,99,71,118,12,12,12,12,12,12,58,
|
||||
78,78,246,123,108,12,212,12,53,63,13,83,63,53,12,92,53,226,13,13,
|
||||
53,53,53,226,75,63,12,71,92,19,19,92,92,92,19,12,12,12,92,12,
|
||||
71,71,71,71,71,12,71,71,71,8,99,99,58,99,99,58,58,99,58,58,
|
||||
11,218,71,71,11,218,99,99,58,218,12,19,92,92,92,99,78,58,92,101,
|
||||
75,251,53,12,123,48,92,108,101,63,92,12,241,241,92,92,108,92,108,128,
|
||||
212,246,58,12,12,12,49,12,12,118,12,49,19,237,116,22,49,118,244,82,
|
||||
112,17,231,70,223,82,20,82,93,45,133,7,46,8,8,49,50,224,168,207,
|
||||
142,60,127,46,8,26,8,8,8,8,8,8,121,26,47,192,166,169,7,113,
|
||||
66,113,7,156,36,217,28,23,251,251,20,26,111,222,30,8,49,22,112,62,
|
||||
242,112,101,112,30,49,244,11,112,11,99,71,12,12,118,12,12,12,71,246,
|
||||
246,78,212,92,108,92,218,53,38,13,0,0,63,101,20,63,101,75,83,83,
|
||||
63,101,229,79,126,92,58,78,12,19,92,92,19,92,12,71,71,118,71,71,
|
||||
218,12,71,71,71,71,71,218,99,8,218,99,218,58,58,218,99,99,58,99,
|
||||
58,58,99,99,218,99,218,99,58,58,99,92,92,92,19,58,78,78,99,108,
|
||||
0,34,38,123,123,48,123,92,53,108,92,12,241,241,241,123,92,19,19,123,
|
||||
241,212,246,99,12,71,12,71,12,71,118,223,82,118,245,100,112,49,30,118,
|
||||
223,237,238,111,113,223,19,20,49,93,144,184,44,113,8,253,19,210,173,141,
|
||||
168,57,196,142,60,52,122,182,113,113,122,3,60,159,130,86,43,122,26,223,
|
||||
47,106,95,76,89,68,244,20,251,20,8,210,238,72,223,19,30,112,23,62,
|
||||
244,223,20,118,112,112,244,118,11,99,99,218,71,218,71,12,12,71,58,58,
|
||||
78,246,246,92,63,53,53,101,83,0,83,83,53,63,63,53,20,83,0,0,
|
||||
53,53,79,0,226,78,58,78,12,108,92,19,92,71,58,58,99,71,71,123,
|
||||
71,218,218,71,218,218,99,218,99,8,99,99,218,218,99,99,99,99,58,99,
|
||||
99,58,99,11,71,99,99,58,58,58,58,71,92,92,19,78,78,58,78,218,
|
||||
53,63,101,123,123,48,48,123,92,19,92,92,241,241,241,241,92,92,92,12,
|
||||
241,212,78,78,123,118,12,12,12,12,112,92,49,223,30,247,65,49,23,112,
|
||||
82,23,72,231,14,26,82,19,101,49,17,146,102,154,147,69,8,82,49,23,
|
||||
249,104,158,39,206,169,86,130,202,142,202,114,39,117,76,88,4,66,66,113,
|
||||
7,95,234,175,68,22,101,20,251,8,4,107,100,112,101,112,30,23,112,62,
|
||||
49,101,49,244,118,112,112,118,11,78,99,99,99,58,71,12,92,99,246,78,
|
||||
246,58,218,108,108,53,63,229,0,83,34,13,53,53,101,38,13,0,0,13,
|
||||
53,101,63,101,99,78,58,78,71,19,19,92,71,58,99,58,11,218,218,71,
|
||||
99,99,99,99,218,58,99,218,218,8,71,218,99,99,218,58,99,99,99,99,
|
||||
99,58,99,58,99,218,11,58,58,99,58,58,71,92,92,58,78,78,78,78,
|
||||
118,19,53,123,48,128,128,48,123,12,92,92,48,128,212,48,241,12,12,92,
|
||||
241,128,246,246,246,71,12,12,12,71,71,118,49,223,49,208,116,22,49,23,
|
||||
11,223,223,72,225,235,113,82,82,101,49,65,68,164,201,7,162,26,8,121,
|
||||
66,223,23,216,14,36,177,152,154,152,80,255,98,66,66,223,66,4,32,152,
|
||||
152,163,228,222,112,251,20,20,8,113,219,222,22,82,23,22,62,112,54,244,
|
||||
101,82,112,112,23,118,112,11,11,78,58,58,246,99,71,71,99,58,246,212,
|
||||
58,58,123,108,108,53,20,13,101,19,34,13,53,53,53,0,75,38,0,34,
|
||||
63,53,53,71,58,78,58,78,11,92,92,71,58,58,58,58,99,218,11,99,
|
||||
11,58,218,218,99,99,218,99,99,8,99,71,99,99,99,99,99,218,58,99,
|
||||
218,58,99,99,99,58,58,78,58,99,58,58,58,71,12,78,78,78,78,78,
|
||||
58,12,19,12,48,218,246,218,48,12,92,92,241,48,58,212,48,241,12,92,
|
||||
48,241,212,58,212,212,123,118,12,71,118,118,12,223,49,118,55,239,244,223,
|
||||
112,112,82,118,236,225,14,4,26,82,101,19,112,93,153,21,224,174,88,162,
|
||||
26,26,121,82,66,66,66,66,66,66,26,82,66,26,113,127,32,44,51,87,
|
||||
248,222,236,223,20,20,20,8,70,111,17,237,223,49,237,30,62,54,30,118,
|
||||
253,49,112,118,23,118,118,11,99,58,58,58,212,99,71,218,246,78,78,58,
|
||||
58,58,108,108,63,38,13,92,58,12,13,251,53,63,251,79,12,71,34,34,
|
||||
251,53,19,58,78,78,78,58,58,71,71,58,99,99,58,99,58,11,58,99,
|
||||
99,99,99,218,218,99,218,218,99,8,71,99,218,218,218,99,218,99,99,99,
|
||||
99,71,58,99,99,99,99,58,58,99,58,58,78,58,99,78,58,78,58,78,
|
||||
78,78,99,218,128,58,58,78,128,48,12,92,123,241,78,246,58,48,241,218,
|
||||
12,128,212,212,58,58,212,218,71,12,71,12,118,12,223,49,11,243,55,244,
|
||||
49,112,244,223,49,236,17,111,4,121,82,82,8,223,244,29,153,61,148,234,
|
||||
152,32,147,52,4,4,113,26,113,26,98,98,147,255,7,193,24,163,217,238,
|
||||
110,112,101,20,20,253,8,70,107,222,22,223,223,244,244,244,244,242,112,82,
|
||||
223,118,23,23,49,118,71,11,58,58,58,246,246,58,99,78,58,212,212,78,
|
||||
58,99,53,53,38,83,19,58,246,19,34,79,251,34,34,71,58,71,79,13,
|
||||
83,63,218,58,58,99,58,78,58,99,78,58,99,99,99,58,58,99,99,58,
|
||||
218,11,218,99,11,218,11,99,71,8,71,218,218,11,71,99,218,99,99,99,
|
||||
99,218,11,99,58,58,58,58,11,58,99,218,58,58,78,78,78,78,58,58,
|
||||
78,78,78,78,58,78,78,78,58,58,48,123,48,48,128,78,246,78,128,241,
|
||||
241,241,128,212,58,58,58,58,218,12,118,71,71,112,118,223,49,11,245,55,
|
||||
30,49,112,244,223,19,30,93,107,111,4,26,101,101,8,101,112,242,93,203,
|
||||
6,170,21,74,51,51,104,24,234,76,24,104,76,124,232,56,225,18,30,223,
|
||||
20,20,20,20,8,66,235,231,236,112,223,118,30,112,112,54,244,112,82,49,
|
||||
112,23,118,118,12,11,99,99,246,58,58,58,78,58,246,246,78,78,212,78,
|
||||
58,12,53,229,34,40,78,78,58,38,0,13,13,79,71,58,58,71,13,0,
|
||||
38,71,58,99,58,99,58,99,78,58,58,99,99,99,71,99,58,99,218,99,
|
||||
71,99,218,99,99,71,218,99,71,8,71,71,71,123,218,218,11,218,218,218,
|
||||
218,99,218,218,99,99,99,99,58,99,99,99,99,99,58,78,78,58,58,99,
|
||||
99,78,78,246,78,212,78,78,58,78,128,48,48,241,48,246,78,58,246,128,
|
||||
128,128,128,128,212,78,212,78,58,218,71,71,12,12,118,118,49,49,112,208,
|
||||
41,22,49,112,244,23,19,49,22,93,219,14,4,8,82,101,20,101,223,49,
|
||||
30,65,18,29,17,203,228,230,56,96,91,225,225,236,242,112,49,82,20,20,
|
||||
20,20,82,113,210,107,29,22,118,223,112,30,244,244,62,112,23,82,223,49,
|
||||
118,118,49,49,118,71,99,246,58,58,212,246,246,78,212,58,246,246,78,58,
|
||||
218,53,209,126,40,78,78,78,218,0,34,34,79,71,78,99,58,71,251,229,
|
||||
12,58,99,99,99,58,58,58,58,99,99,99,99,218,99,58,99,99,99,218,
|
||||
99,218,11,218,218,11,218,71,71,8,71,123,71,71,218,123,71,99,11,99,
|
||||
218,11,99,71,218,99,58,99,99,58,218,218,99,99,58,58,58,58,99,58,
|
||||
58,99,58,246,246,246,78,58,58,58,78,58,48,48,241,78,246,78,78,58,
|
||||
58,241,241,241,212,58,246,78,246,58,218,71,71,71,118,118,118,49,49,112,
|
||||
103,243,236,112,49,244,112,49,223,118,65,93,107,14,98,113,82,8,101,253,
|
||||
101,20,101,82,82,223,118,118,49,49,49,82,82,101,101,20,20,253,253,121,
|
||||
26,70,235,110,29,103,118,223,223,11,244,244,54,242,244,49,19,223,49,118,
|
||||
118,49,12,71,11,99,212,246,78,78,78,78,212,246,78,58,78,212,78,58,
|
||||
12,38,213,71,78,58,58,78,40,83,79,20,99,58,99,58,99,12,92,71,
|
||||
78,58,99,99,99,99,99,99,99,99,218,218,99,218,218,99,218,218,11,218,
|
||||
11,218,218,71,218,218,71,123,71,8,71,71,12,71,71,218,218,218,71,71,
|
||||
218,218,218,218,71,218,218,99,99,218,99,99,99,99,99,99,58,99,58,99,
|
||||
99,99,99,58,78,78,78,78,58,99,58,58,58,128,48,128,78,78,58,78,
|
||||
212,212,212,241,128,58,246,246,58,246,58,218,218,118,71,71,118,12,118,49,
|
||||
23,237,245,55,208,23,118,23,112,223,223,118,244,236,18,110,14,210,4,66,
|
||||
121,8,82,20,82,101,101,251,20,20,20,101,8,20,8,8,26,26,210,235,
|
||||
109,110,65,30,118,223,49,244,244,244,244,242,65,30,223,82,49,118,118,49,
|
||||
92,49,118,71,11,78,246,78,58,246,212,246,78,78,246,78,246,78,212,218,
|
||||
53,92,99,78,58,58,58,246,53,0,53,99,99,58,99,58,99,71,218,58,
|
||||
99,58,99,218,58,99,58,78,99,99,11,99,71,99,99,218,99,99,218,71,
|
||||
123,218,71,218,12,71,71,71,71,8,71,71,71,71,71,118,71,71,218,99,
|
||||
71,71,71,123,71,71,218,99,99,218,218,71,11,218,99,99,58,99,58,99,
|
||||
99,99,218,58,58,78,78,78,58,99,99,58,58,58,58,128,246,78,58,58,
|
||||
58,58,246,128,128,58,212,246,78,78,78,58,58,218,71,71,11,118,118,49,
|
||||
12,23,11,103,243,72,237,23,23,112,23,223,19,223,112,22,109,18,29,111,
|
||||
111,210,210,70,4,26,26,26,26,26,26,4,4,70,98,235,2,18,29,65,
|
||||
54,23,223,49,23,244,244,112,244,54,22,244,118,82,223,223,118,92,49,49,
|
||||
223,71,11,99,99,78,246,58,246,78,58,212,78,78,58,58,246,78,58,218,
|
||||
71,78,58,58,99,58,58,99,19,77,58,58,58,218,99,58,58,58,58,58,
|
||||
218,99,11,218,58,99,218,58,218,218,71,218,218,71,99,71,218,71,71,218,
|
||||
71,123,71,71,71,71,71,71,12,8,118,118,71,71,118,71,71,71,118,12,
|
||||
71,123,71,71,71,71,71,71,218,99,99,99,218,218,71,218,99,99,58,99,
|
||||
99,218,99,218,58,58,246,78,78,99,99,99,99,58,246,78,58,246,58,58,
|
||||
58,58,58,78,78,58,58,58,246,212,99,58,58,58,218,99,71,118,11,118,
|
||||
49,49,49,23,11,208,55,245,22,112,23,23,23,23,49,49,49,223,112,30,
|
||||
22,236,18,18,18,29,18,18,18,18,107,236,29,236,236,22,30,23,223,223,
|
||||
223,118,118,112,244,112,244,242,242,30,23,223,82,223,49,49,49,223,49,12,
|
||||
71,71,99,58,246,212,58,58,58,78,78,78,58,58,58,58,78,212,246,78,
|
||||
78,58,58,11,99,58,78,78,99,58,58,99,218,99,58,99,58,58,58,218,
|
||||
99,71,218,99,218,58,99,218,218,71,218,123,71,99,71,218,71,71,71,12,
|
||||
71,71,12,12,12,12,12,12,12,8,12,12,12,12,12,12,118,118,71,71,
|
||||
71,218,71,123,71,71,71,71,123,71,218,11,218,71,218,123,218,99,218,58,
|
||||
99,99,11,218,71,99,99,58,78,58,99,99,71,99,58,78,246,246,246,58,
|
||||
58,218,58,99,78,78,246,78,78,246,58,58,58,212,58,58,99,71,71,118,
|
||||
71,118,118,23,49,112,112,103,72,72,65,244,112,23,118,118,70,223,223,223,
|
||||
223,49,118,23,118,112,112,244,112,112,23,23,23,49,49,223,223,49,23,118,
|
||||
244,244,112,62,244,109,22,30,49,223,223,82,49,223,49,223,223,118,118,71,
|
||||
99,99,99,78,78,246,58,58,78,78,58,58,58,99,78,246,78,78,78,78,
|
||||
99,99,99,58,99,58,78,78,58,99,99,11,218,99,99,58,58,11,99,218,
|
||||
218,218,71,99,218,218,11,218,123,71,218,71,71,218,71,71,123,71,118,12,
|
||||
71,12,12,12,12,12,12,12,12,8,12,12,12,12,12,12,71,71,71,118,
|
||||
71,118,71,71,118,12,71,71,71,71,99,218,123,71,218,71,218,71,99,99,
|
||||
99,218,218,71,218,218,99,58,58,58,58,218,99,218,218,99,58,99,78,58,
|
||||
58,99,99,99,58,58,78,246,246,78,78,78,58,99,58,58,99,58,99,71,
|
||||
11,71,12,23,118,118,118,23,112,30,103,208,208,65,242,112,118,23,23,118,
|
||||
118,118,49,112,23,112,11,112,112,112,118,49,49,49,49,112,23,23,112,244,
|
||||
244,22,22,22,242,112,49,223,223,66,223,49,223,49,223,49,12,71,71,99,
|
||||
99,58,212,212,246,58,78,78,58,58,99,99,99,58,78,78,78,78,58,58,
|
||||
99,99,99,58,58,58,58,58,99,218,71,218,99,99,218,58,99,99,71,218,
|
||||
71,71,218,99,71,99,123,71,118,118,123,71,71,123,71,71,12,12,118,12,
|
||||
12,12,12,12,12,12,71,12,71,8,12,92,12,92,71,12,118,118,12,12,
|
||||
118,71,71,12,71,71,118,12,12,71,118,218,71,71,71,12,71,12,218,218,
|
||||
99,99,218,218,71,71,71,218,99,99,99,99,71,71,218,71,99,58,58,58,
|
||||
58,58,99,11,99,99,99,58,246,78,246,78,58,99,99,99,58,58,99,99,
|
||||
99,11,71,112,112,118,118,92,118,23,118,112,30,237,103,65,65,22,30,54,
|
||||
244,244,23,112,244,112,244,112,244,23,244,23,112,62,244,244,30,242,22,242,
|
||||
22,30,23,49,49,19,82,223,223,49,49,49,223,49,12,11,11,218,99,58,
|
||||
58,78,78,78,246,78,78,99,99,58,99,58,58,78,78,78,58,99,218,218,
|
||||
71,99,99,99,58,99,58,99,71,123,71,218,99,99,218,99,218,71,12,71,
|
||||
71,218,71,71,218,71,71,71,71,71,12,71,71,71,118,12,12,12,71,71,
|
||||
12,12,12,12,118,12,12,92,12,8,12,12,71,12,12,12,12,12,71,12,
|
||||
118,12,12,12,118,12,71,12,12,71,71,71,71,123,71,12,12,71,71,218,
|
||||
218,218,11,71,123,71,71,218,71,99,99,58,99,99,71,218,218,99,218,58,
|
||||
58,58,58,99,218,71,99,218,58,58,58,246,212,58,58,99,99,58,99,58,
|
||||
58,58,58,218,71,71,112,71,118,118,49,23,118,118,49,112,112,30,237,22,
|
||||
22,22,103,22,22,22,22,22,30,242,22,22,22,103,22,22,30,112,112,23,
|
||||
49,49,49,82,223,66,49,49,49,49,223,12,118,71,218,99,99,58,99,58,
|
||||
78,246,78,246,58,58,99,99,218,218,99,99,99,58,58,58,99,218,71,218,
|
||||
99,99,58,58,58,99,218,123,71,71,218,218,99,99,99,123,71,71,71,92,
|
||||
71,71,218,218,71,12,12,12,118,71,12,118,71,71,71,12,12,12,12,12,
|
||||
12,12,118,118,12,12,12,12,12,8,92,92,92,12,12,12,12,12,12,12,
|
||||
92,12,12,12,71,12,118,12,12,12,12,12,71,71,71,12,12,71,118,71,
|
||||
71,123,71,71,71,118,71,71,71,123,71,218,218,99,218,71,12,71,71,218,
|
||||
218,58,58,99,58,71,71,218,218,218,99,58,58,58,58,58,99,99,99,218,
|
||||
218,99,58,58,99,99,99,11,11,11,23,112,118,112,49,118,118,118,23,118,
|
||||
49,118,23,112,112,112,112,244,112,112,118,112,118,49,49,223,49,223,223,49,
|
||||
223,223,49,49,223,49,223,223,118,118,71,11,218,99,218,99,218,78,58,58,
|
||||
58,58,58,218,218,218,218,218,58,99,58,58,58,58,218,99,71,71,123,71,
|
||||
218,99,58,99,99,71,71,12,12,71,71,71,218,218,218,71,118,71,71,12,
|
||||
123,71,12,71,71,12,12,12,118,71,12,12,12,118,118,12,71,118,12,118,
|
||||
12,12,12,12,12,92,12,12,92,8,92,92,12,12,92,12,92,12,12,12,
|
||||
12,12,118,12,12,12,12,12,12,12,118,12,12,71,118,71,12,12,71,118,
|
||||
71,71,71,123,218,118,12,71,71,71,71,99,99,218,218,71,71,71,71,71,
|
||||
99,218,99,58,99,218,218,71,71,71,218,71,58,99,58,58,99,58,218,99,
|
||||
99,218,99,99,58,58,58,99,58,99,218,11,71,112,11,112,118,23,118,23,
|
||||
49,118,118,92,49,92,49,92,49,92,49,223,223,49,223,49,49,49,49,82,
|
||||
49,49,49,223,118,118,71,71,11,71,99,218,218,99,58,58,58,58,58,58,
|
||||
58,218,218,218,71,218,218,99,99,99,99,58,218,218,71,123,71,71,218,11,
|
||||
99,99,218,218,71,71,12,71,12,218,218,218,71,218,118,12,71,118,71,71,
|
||||
71,71,71,71,118,71,12,12,12,71,12,12,12,12,12,12,12,49,12,12,
|
||||
12,92,12,49,12,92,12,12,92,8,92,92,92,92,92,12,92,12,12,92,
|
||||
12,92,12,92,12,71,71,12,12,12,12,71,12,118,71,118,71,118,12,12,
|
||||
12,12,71,71,218,71,71,118,118,12,12,118,71,218,71,218,123,12,12,12,
|
||||
12,71,71,99,99,99,218,71,71,71,71,123,71,218,218,58,99,99,58,218,
|
||||
99,218,218,11,99,218,99,218,218,58,58,58,99,218,71,11,71,71,118,11,
|
||||
112,71,112,118,112,12,118,118,118,118,118,118,118,118,118,118,223,223,49,49,
|
||||
118,118,118,71,71,71,218,71,218,71,99,99,99,218,58,58,58,218,218,218,
|
||||
218,71,71,218,123,71,218,99,58,218,218,99,71,118,12,71,71,71,218,218,
|
||||
218,99,71,118,12,12,12,71,71,123,71,71,71,12,118,12,92,71,118,71,
|
||||
12,12,71,12,12,92,12,12,12,118,12,12,12,12,12,92,12,12,12,92,
|
||||
71,92,12,92,92,92,92,92,12,8,92,92,92,92,92,92,92,92,92,12,
|
||||
92,12,92,12,92,92,12,118,92,12,12,92,92,12,12,12,12,12,12,12,
|
||||
12,12,71,118,12,118,71,71,12,12,12,12,118,71,218,71,218,71,118,12,
|
||||
12,71,12,71,218,71,99,218,123,71,71,12,71,118,71,71,99,218,218,99,
|
||||
218,99,218,218,218,71,123,71,218,218,218,218,99,99,99,58,99,99,99,218,
|
||||
99,71,71,71,11,71,11,11,11,11,11,11,11,11,71,118,12,118,218,218,
|
||||
71,218,71,71,218,71,99,71,99,99,99,58,218,99,218,218,71,71,71,71,
|
||||
71,71,123,71,11,99,99,99,218,218,71,71,12,12,12,71,123,218,71,218,
|
||||
71,118,71,12,118,12,12,71,71,218,118,12,12,12,92,12,71,118,71,71,
|
||||
12,71,92,12,92,12,12,12,118,12,12,92,92,12,92,12,92,92,92,92,
|
||||
92,92,92,92,12,92,92,92,92,8,92,92,92,12,92,92,92,92,92,92,
|
||||
92,92,92,12,92,92,12,12,92,92,92,12,92,92,12,12,118,12,12,92,
|
||||
92,12,12,12,71,71,71,118,12,118,12,12,12,71,12,71,71,71,71,12,
|
||||
12,12,118,12,12,118,218,71,71,71,12,71,71,71,12,12,71,71,71,11,
|
||||
218,99,218,218,218,218,71,71,71,71,71,71,71,71,218,218,218,218,99,218,
|
||||
218,218,99,218,99,218,218,218,218,218,218,218,218,99,218,11,218,71,71,71,
|
||||
71,123,71,123,71,218,99,218,218,11,218,99,71,71,71,71,71,71,71,92,
|
||||
71,71,71,123,71,218,71,71,71,118,12,12,12,12,71,71,71,218,71,71,
|
||||
12,12,12,12,12,12,12,71,71,71,12,12,12,12,12,12,12,12,118,12,
|
||||
12,92,92,92,12,92,12,71,12,92,92,12,92,92,92,92,92,12,92,92,
|
||||
92,92,92,92,92,92,92,92,92,8,92,19,92,92,92,92,92,223,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,12,118,12,12,
|
||||
12,92,92,12,92,12,12,12,71,12,49,12,92,92,12,12,71,12,12,12,
|
||||
12,71,12,12,12,12,71,12,71,71,218,218,71,118,12,12,12,71,12,12,
|
||||
71,123,71,71,99,71,71,123,71,123,71,123,71,71,71,71,71,71,71,71,
|
||||
71,218,218,218,71,71,218,71,218,71,218,71,71,123,71,123,71,123,71,123,
|
||||
218,71,218,218,218,218,71,71,71,71,71,12,12,12,12,12,12,12,71,71,
|
||||
71,123,218,218,71,71,12,12,12,71,12,12,12,12,71,71,71,12,118,12,
|
||||
12,92,12,12,12,12,12,12,71,12,92,12,92,12,12,118,12,12,12,92,
|
||||
92,92,92,92,92,12,92,92,12,92,92,92,92,19,12,92,92,92,92,92,
|
||||
12,92,92,92,92,92,92,92,92,8,19,108,19,108,12,19,92,92,92,92,
|
||||
92,92,92,92,92,19,92,92,92,92,92,92,92,92,92,92,92,92,12,92,
|
||||
92,92,92,92,92,92,12,12,12,12,71,12,92,92,92,92,12,92,118,12,
|
||||
12,12,12,12,92,12,12,12,71,12,71,71,71,12,12,12,12,12,12,92,
|
||||
112,118,71,12,71,71,71,218,71,71,71,71,71,71,12,12,12,12,12,12,
|
||||
12,118,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,
|
||||
71,71,71,71,71,71,71,71,118,71,12,71,12,12,12,12,12,71,71,123,
|
||||
71,71,71,92,12,12,12,12,92,92,71,12,12,12,12,71,12,12,92,12,
|
||||
92,92,12,118,12,12,118,12,12,92,92,92,92,12,12,12,12,92,92,92,
|
||||
92,12,92,12,92,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,92,12,19,19,108,92,8,92,92,19,92,108,92,19,92,92,92,
|
||||
92,108,92,92,92,12,92,92,12,92,92,92,92,92,92,92,92,92,92,12,
|
||||
12,92,92,92,92,223,12,92,12,12,12,12,12,92,92,12,92,12,12,12,
|
||||
12,12,12,12,49,12,92,92,92,92,12,12,71,12,12,12,12,12,12,12,
|
||||
92,92,118,92,12,12,118,12,12,12,12,12,12,71,12,12,12,12,12,12,
|
||||
12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
|
||||
12,12,118,118,12,118,12,12,12,12,12,12,12,12,12,12,12,12,71,12,
|
||||
12,12,71,92,12,92,92,49,12,12,12,12,118,12,12,118,92,12,92,92,
|
||||
12,12,12,12,123,12,92,92,92,92,92,92,12,92,12,92,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,12,92,92,92,19,92,92,108,
|
||||
92,19,92,108,108,92,108,92,108,8,19,108,19,92,19,108,108,108,92,19,
|
||||
92,92,19,92,108,108,92,108,108,92,92,92,92,92,92,19,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,92,92,92,92,
|
||||
92,12,12,12,12,12,12,92,92,92,92,92,92,12,12,12,12,12,118,12,
|
||||
12,12,12,92,12,12,12,12,71,12,12,12,12,71,71,12,12,71,118,118,
|
||||
12,12,12,12,12,118,12,12,12,92,12,12,12,12,12,71,12,12,118,12,
|
||||
12,71,12,12,12,12,12,92,118,118,12,12,12,12,71,12,12,12,49,12,
|
||||
92,12,92,92,92,12,92,12,12,12,12,12,92,92,92,92,92,92,92,92,
|
||||
12,12,71,92,92,92,12,92,223,92,92,92,12,92,92,92,92,92,12,19,
|
||||
92,92,92,92,92,92,108,92,108,19,92,108,108,108,92,92,19,108,92,108,
|
||||
19,92,19,92,108,92,108,19,19,8,19,108,19,108,108,19,92,19,108,19,
|
||||
19,108,108,19,19,92,108,92,92,108,19,12,108,108,92,19,108,108,92,19,
|
||||
92,92,92,92,92,92,108,19,92,92,92,92,12,92,92,92,92,92,92,92,
|
||||
92,92,92,12,12,118,123,92,12,12,92,92,92,92,92,92,12,12,12,12,
|
||||
12,92,12,12,92,12,92,92,92,92,92,92,12,12,12,12,12,12,12,71,
|
||||
71,12,12,12,12,12,12,12,71,12,12,12,12,12,12,92,12,12,92,12,
|
||||
92,12,12,49,12,92,12,12,12,12,12,71,12,12,12,12,92,12,92,12,
|
||||
92,92,92,92,92,12,12,12,12,92,12,12,92,92,92,92,92,92,12,12,
|
||||
12,92,92,92,92,19,108,92,92,92,92,92,92,92,92,19,92,108,108,92,
|
||||
92,92,92,19,108,92,19,108,92,108,108,92,19,92,108,19,108,92,108,92,
|
||||
19,108,108,92,108,108,19,92,108,8,19,19,19,19,19,108,19,19,108,92,
|
||||
19,19,108,92,19,19,108,19,108,92,108,19,92,19,92,92,92,19,92,92,
|
||||
92,92,92,92,92,92,19,108,92,19,19,92,92,92,92,92,92,92,223,92,
|
||||
223,92,92,92,92,92,92,92,92,92,92,92,92,223,92,92,92,12,92,12,
|
||||
12,12,12,12,92,12,12,92,12,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,12,92,49,92,12,92,92,12,12,92,12,92,12,92,12,12,92,12,
|
||||
12,12,12,12,12,12,12,92,92,92,12,92,92,92,92,92,92,92,92,92,
|
||||
92,92,12,12,12,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,12,19,92,92,108,12,92,92,92,12,19,92,92,108,92,19,19,92,
|
||||
92,92,92,92,108,19,92,19,19,92,92,108,108,92,108,92,19,19,19,108,
|
||||
19,19,19,19,19,19,108,19,19,8,19,53,19,53,19,53,19,53,19,108,
|
||||
19,108,19,108,108,108,19,108,19,108,19,108,108,108,108,19,108,19,108,19,
|
||||
19,92,108,19,19,12,108,92,108,92,108,19,108,92,92,92,92,92,92,19,
|
||||
92,19,108,92,19,92,92,92,92,92,92,92,92,92,92,92,108,108,19,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,92,12,92,92,92,12,92,19,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,108,19,92,92,223,92,92,92,92,92,92,
|
||||
19,108,108,108,108,19,92,92,92,92,108,108,108,108,108,92,108,92,108,19,
|
||||
92,19,108,108,19,108,108,108,108,108,19,19,19,19,19,19,108,108,53,19,
|
||||
108,19,108,53,19,53,19,53,19,8,19,19,19,19,19,19,19,19,19,19,
|
||||
19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,108,19,108,19,
|
||||
19,19,19,19,108,19,108,19,108,19,108,19,19,19,19,108,19,92,92,92,
|
||||
19,19,108,19,108,19,19,92,92,92,92,92,92,92,92,19,19,108,19,108,
|
||||
19,92,19,92,92,92,92,92,92,92,92,92,92,92,92,19,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,19,19,19,92,19,19,92,19,19,108,92,92,92,19,92,92,92,
|
||||
92,92,92,92,92,19,19,19,19,108,19,108,92,92,92,92,92,92,19,19,
|
||||
92,19,223,19,108,19,108,92,19,19,19,19,19,19,108,19,108,19,108,19,
|
||||
19,19,19,19,19,19,19,19,19,108,19,108,19,108,19,19,19,19,19,19,
|
||||
19,19,19,19,19,19,19,19,19,8};
|
|
@ -1,6 +0,0 @@
|
|||
Makefile.in
|
||||
Makefile
|
||||
.deps
|
||||
_libs
|
||||
.libs
|
||||
CentralReflection
|
|
@ -1,680 +0,0 @@
|
|||
/**********************************************************************
|
||||
* CentralReflection Distortion Plug-In (Version 1.04)
|
||||
* Daniel Cotting (cotting@mygale.org)
|
||||
**********************************************************************
|
||||
* Official homepages: http://www.mygale.org/~cotting
|
||||
* http://cotting.citeweb.net
|
||||
* http://village.cyberbrain.com/cotting
|
||||
**********************************************************************
|
||||
*/
|
||||
|
||||
/* The GIMP -- an image manipulation program
|
||||
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <signal.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "libgimp/gimp.h"
|
||||
#include "gtk/gtk.h"
|
||||
#include "logo.h"
|
||||
|
||||
#define ENTRY_WIDTH 100
|
||||
|
||||
/* Declare local functions.
|
||||
*/
|
||||
static void query(void);
|
||||
static void run(char *name, int nparams,
|
||||
GParam *param,
|
||||
int *nreturn_vals,
|
||||
GParam **return_vals);
|
||||
|
||||
static void drawCentralReflection(GDrawable *drawable);
|
||||
static gint CentralReflection_dialog(GDrawable *drawable);
|
||||
|
||||
GPlugInInfo PLUG_IN_INFO =
|
||||
{
|
||||
NULL, /* init_proc */
|
||||
NULL, /* quit_proc */
|
||||
query, /* query_proc */
|
||||
run, /* run_proc */
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
gdouble cone_radius;
|
||||
gint keep_surr, use_bkgr, set_transparent, use_antialias,flip;
|
||||
} CentralReflectionValues;
|
||||
|
||||
static CentralReflectionValues lvals =
|
||||
{
|
||||
/* CentralReflection cone radius value */
|
||||
100,
|
||||
/* Surroundings options */
|
||||
TRUE, FALSE, FALSE, TRUE, TRUE
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
gint run;
|
||||
} CentralReflectionInterface;
|
||||
|
||||
static CentralReflectionInterface bint =
|
||||
{
|
||||
FALSE /* run */
|
||||
};
|
||||
|
||||
GtkWidget * CentralReflection_logo_dialog(void);
|
||||
|
||||
|
||||
GtkWidget *maindlg;
|
||||
GtkWidget *logodlg;
|
||||
GtkTooltips *tips;
|
||||
GdkColor tips_fg,tips_bg;
|
||||
|
||||
MAIN()
|
||||
|
||||
static void
|
||||
query(void)
|
||||
{
|
||||
static GParamDef args[] =
|
||||
{
|
||||
{ PARAM_INT32, "run_mode", "Interactive, non-interactive" },
|
||||
{ PARAM_IMAGE, "image", "Input image (unused)" },
|
||||
{ PARAM_DRAWABLE, "drawable", "Input drawable" },
|
||||
{ PARAM_FLOAT, "circle_radius", "Radius of the reflecting circle" },
|
||||
{ PARAM_INT32, "keep_surroundings", "Keep Central-Reflection surroundings" },
|
||||
{ PARAM_INT32, "set_background", "Set Central-Reflection surroundings to bkgr value" },
|
||||
{ PARAM_INT32, "set_transparent", "Set Central-Reflection surroundings transparent (Only on Image w/ Alpha-Layer)" },
|
||||
{ PARAM_INT32, "use_antialias", "Use antialias for better and smoother results" },
|
||||
{ PARAM_INT32, "flip", "Flip the image vertically" },
|
||||
};
|
||||
|
||||
static GParamDef *return_vals = NULL;
|
||||
static int nargs = sizeof(args)/ sizeof(args[0]);
|
||||
static int nreturn_vals = 0;
|
||||
|
||||
gimp_install_procedure("plug_in_CentralReflection",
|
||||
"Apply a Central-Reflection effect",
|
||||
"",
|
||||
"Daniel Cotting (cotting@mygale.org, http://www.mygale.org/~cotting)",
|
||||
"Daniel Cotting (cotting@mygale.org, http://www.mygale.org/~cotting)",
|
||||
"October, 1997",
|
||||
"<Image>/Filters/Glass Effects/Central Reflection",
|
||||
"RGB*, GRAY*, INDEXED*",
|
||||
PROC_PLUG_IN,
|
||||
nargs, nreturn_vals,
|
||||
args, return_vals);
|
||||
}
|
||||
|
||||
static void
|
||||
run(char *name,
|
||||
int nparams,
|
||||
GParam *param,
|
||||
int *nreturn_vals,
|
||||
GParam **return_vals)
|
||||
{
|
||||
static GParam values[1];
|
||||
GDrawable *drawable;
|
||||
GRunModeType run_mode;
|
||||
GStatusType status = STATUS_SUCCESS;
|
||||
|
||||
run_mode = param[0].data.d_int32;
|
||||
|
||||
values[0].type = PARAM_STATUS;
|
||||
values[0].data.d_status = status;
|
||||
|
||||
*nreturn_vals = 1;
|
||||
*return_vals = values;
|
||||
|
||||
drawable = gimp_drawable_get(param[2].data.d_drawable);
|
||||
|
||||
switch(run_mode) {
|
||||
case RUN_INTERACTIVE:
|
||||
gimp_get_data("plug_in_CentralReflection", &lvals);
|
||||
if(!CentralReflection_dialog(drawable)) return;
|
||||
break;
|
||||
|
||||
case RUN_NONINTERACTIVE:
|
||||
if(nparams != 9) status = STATUS_CALLING_ERROR;
|
||||
if(status == STATUS_SUCCESS) {
|
||||
lvals.cone_radius = param[3].data.d_float;
|
||||
lvals.keep_surr = param[4].data.d_int32;
|
||||
lvals.use_bkgr = param[5].data.d_int32;
|
||||
lvals.set_transparent = param[6].data.d_int32;
|
||||
lvals.use_antialias = param[7].data.d_int32;
|
||||
lvals.flip = param[8].data.d_int32;
|
||||
}
|
||||
|
||||
if(status == STATUS_SUCCESS && (lvals.cone_radius <= 0))
|
||||
status = STATUS_CALLING_ERROR;
|
||||
break;
|
||||
|
||||
case RUN_WITH_LAST_VALS:
|
||||
gimp_get_data ("plug_in_CentralReflection", &lvals);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
printf("creflect: waiting... (pid %d)\n", getpid());
|
||||
kill(getpid(), SIGSTOP);
|
||||
|
||||
gimp_tile_cache_ntiles(2 *(drawable->width / gimp_tile_width() + 1));
|
||||
gimp_progress_init("Applying Central-Reflection. Please wait...");
|
||||
drawCentralReflection(drawable);
|
||||
|
||||
if(run_mode != RUN_NONINTERACTIVE)
|
||||
gimp_displays_flush();
|
||||
if(run_mode == RUN_INTERACTIVE)
|
||||
gimp_set_data("plug_in_CentralReflection", &lvals, sizeof(CentralReflectionValues));
|
||||
|
||||
values[0].data.d_status = status;
|
||||
|
||||
gimp_drawable_detach(drawable);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
set_tooltip (GtkTooltips *tooltips, GtkWidget *widget, const char *desc)
|
||||
{
|
||||
if (desc && desc[0])
|
||||
gtk_tooltips_set_tips (tooltips, widget, (char *) desc);
|
||||
}
|
||||
|
||||
static void
|
||||
drawCentralReflection(GDrawable *drawable)
|
||||
{
|
||||
GPixelRgn srcPR, destPR;
|
||||
gint width, height;
|
||||
gint bytes;
|
||||
gdouble abstand;
|
||||
gdouble radius;
|
||||
gdouble verhaltniss, a1,a2,a3,a4,faktor,a_tot;
|
||||
gint row;
|
||||
gint x1, y1, x2, y2, ix, iy;
|
||||
guchar *src, *dest;
|
||||
gint i, col, succeeded;
|
||||
gfloat regionwidth, regionheight, dx, dy;
|
||||
gfloat a, b, x, y;
|
||||
glong pixelpos, pos;
|
||||
guchar bgr_red, bgr_blue, bgr_green, alphaval;
|
||||
GDrawableType drawtype = gimp_drawable_type(drawable->id);
|
||||
|
||||
gimp_palette_get_background(&bgr_red, &bgr_green, &bgr_blue);
|
||||
|
||||
gimp_drawable_mask_bounds(drawable->id, &x1, &y1, &x2, &y2);
|
||||
regionwidth = x2-x1;
|
||||
a = regionwidth/2;
|
||||
regionheight = y2-y1;
|
||||
b = regionheight/2;
|
||||
|
||||
radius=lvals.cone_radius;
|
||||
|
||||
width = drawable->width;
|
||||
height = drawable->height;
|
||||
bytes = drawable->bpp;
|
||||
|
||||
gimp_pixel_rgn_init(&srcPR, drawable, 0, 0, width, height, FALSE, FALSE);
|
||||
gimp_pixel_rgn_init(&destPR, drawable, 0, 0, width, height, TRUE, TRUE);
|
||||
|
||||
src = g_malloc((x2-x1)*(y2-y1)*bytes);
|
||||
dest = g_malloc((x2-x1)*(y2-y1)*bytes);
|
||||
gimp_pixel_rgn_get_rect(&srcPR, src, x1, y1, regionwidth, regionheight);
|
||||
|
||||
for(col = 0; col < regionwidth; col++) {
|
||||
dx = (gfloat)col - a;
|
||||
for(row = 0; row < regionheight; row++) {
|
||||
pixelpos = (col+row*regionwidth)*bytes;
|
||||
dy = -((gfloat)row - b);
|
||||
abstand=(sqrt(dx*dx+dy*dy));
|
||||
succeeded=1;
|
||||
verhaltniss=radius/abstand;
|
||||
if (lvals.flip) dy = -dy;
|
||||
x = dx/(abstand/(radius*verhaltniss))+a;
|
||||
y = dy/(abstand/(radius*verhaltniss))+b;
|
||||
if (x>regionwidth) succeeded=0;
|
||||
if (y>regionheight) succeeded=0;
|
||||
if (x<0) succeeded=0;
|
||||
if (y<0) succeeded=0;
|
||||
if (succeeded){
|
||||
ix=(int)x;
|
||||
iy=(int)y;
|
||||
if (lvals.use_antialias) {
|
||||
if ((ix - x)<0){
|
||||
if ((iy - y)<0){} else {iy-=1;}
|
||||
} else{
|
||||
if ((iy - y)<0){ix-=1;} else {iy-=1;ix-=1;}
|
||||
}
|
||||
a1=1/((ix-x)*(ix-x)+(iy-y)*(iy-y));
|
||||
a2=1/((ix+1-x)*(ix+1-x)+(iy-y)*(iy-y));
|
||||
a3=1/((ix-x)*(ix-x)+(iy+1-y)*(iy+1-y));
|
||||
a4=1/((ix+1-x)*(ix+1-x)+(iy+1-y)*(iy+1-y));
|
||||
a_tot=a1+a2+a3+a4;
|
||||
faktor=1/a_tot;
|
||||
a1*=faktor;
|
||||
a2*=faktor;
|
||||
a3*=faktor;
|
||||
a4*=faktor;
|
||||
|
||||
pos = ((gint)(iy)*regionwidth + (gint)(ix)) * bytes;
|
||||
|
||||
for (i = 0; i < bytes; i++) {
|
||||
dest[pixelpos+i] = (gint)((gdouble)(src[pos+i])*a1+(gdouble)(src[pos+i+bytes])*a2+(gdouble)(src[pos+i+(gint)(regionwidth*bytes)])*a3+(gdouble)(src[pos+i+(gint)(regionwidth*bytes)+bytes])*a4);
|
||||
}
|
||||
} else {
|
||||
pos = ((gint)(iy)*regionwidth + (gint)(ix)) * bytes;
|
||||
for(i = 0; i < bytes; i++) {
|
||||
dest[pixelpos+i] = src[pos+i];
|
||||
}
|
||||
}
|
||||
}
|
||||
if (succeeded==0){
|
||||
if(lvals.keep_surr) {
|
||||
for(i = 0; i < bytes; i++) {
|
||||
dest[pixelpos+i] = src[pixelpos+i];
|
||||
}
|
||||
} else {
|
||||
if(lvals.set_transparent) alphaval = 0;
|
||||
else alphaval = 255;
|
||||
|
||||
switch(drawtype) {
|
||||
case INDEXEDA_IMAGE:
|
||||
dest[pixelpos+1] = alphaval;
|
||||
case INDEXED_IMAGE:
|
||||
dest[pixelpos+0] = 0;
|
||||
break;
|
||||
|
||||
case RGBA_IMAGE:
|
||||
dest[pixelpos+3] = alphaval;
|
||||
case RGB_IMAGE:
|
||||
dest[pixelpos+0] = bgr_red;
|
||||
dest[pixelpos+1] = bgr_green;
|
||||
dest[pixelpos+2] = bgr_blue;
|
||||
break;
|
||||
|
||||
case GRAYA_IMAGE:
|
||||
dest[pixelpos+1] = alphaval;
|
||||
case GRAY_IMAGE:
|
||||
dest[pixelpos+0] = bgr_red;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(((gint)(regionwidth-col) % 5) == 0)
|
||||
gimp_progress_update((gdouble)col/(gdouble)regionwidth);
|
||||
}
|
||||
|
||||
gimp_pixel_rgn_set_rect(&destPR, dest, x1, y1, regionwidth, regionheight);
|
||||
g_free(src);
|
||||
g_free(dest);
|
||||
|
||||
gimp_drawable_flush(drawable);
|
||||
gimp_drawable_merge_shadow(drawable->id, TRUE);
|
||||
gimp_drawable_update(drawable->id, x1, y1,(x2 - x1),(y2 - y1));
|
||||
}
|
||||
|
||||
static void
|
||||
CentralReflection_close_callback(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
gtk_main_quit();
|
||||
}
|
||||
|
||||
static void
|
||||
CentralReflection_ok_callback(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
bint.run = TRUE;
|
||||
gtk_widget_destroy(GTK_WIDGET (data));
|
||||
}
|
||||
|
||||
static void
|
||||
CentralReflection_toggle_update(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
int *toggle_val;
|
||||
|
||||
toggle_val = (int *)data;
|
||||
|
||||
if(GTK_TOGGLE_BUTTON (widget)->active)
|
||||
*toggle_val = TRUE;
|
||||
else
|
||||
*toggle_val = FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
toggle_update (GtkWidget *widget,
|
||||
gpointer data)
|
||||
{
|
||||
int *toggle_val;
|
||||
|
||||
toggle_val = (int *) data;
|
||||
|
||||
if (GTK_TOGGLE_BUTTON (widget)->active)
|
||||
*toggle_val = TRUE;
|
||||
else
|
||||
*toggle_val = FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
CentralReflection_entry_callback(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
lvals.cone_radius = atof(gtk_entry_get_text(GTK_ENTRY(widget)));
|
||||
if(lvals.cone_radius <= 0) lvals.cone_radius = 10;
|
||||
}
|
||||
|
||||
static void
|
||||
CentralReflection_logo_ok_callback(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
gtk_widget_set_sensitive (maindlg, TRUE);
|
||||
gtk_widget_destroy(logodlg);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
CentralReflection_about_callback(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
gtk_widget_set_sensitive (maindlg, FALSE);
|
||||
CentralReflection_logo_dialog();
|
||||
}
|
||||
|
||||
|
||||
static gint
|
||||
CentralReflection_dialog(GDrawable *drawable)
|
||||
{
|
||||
GtkWidget *dlg;
|
||||
GtkWidget *label;
|
||||
GtkWidget *entry;
|
||||
GtkWidget *button;
|
||||
GtkWidget *toggle;
|
||||
GtkWidget *frame;
|
||||
GtkWidget *vbox;
|
||||
GtkWidget *hbox;
|
||||
gchar buffer[12];
|
||||
gchar **argv;
|
||||
gint argc;
|
||||
GSList *group = NULL;
|
||||
GDrawableType drawtype;
|
||||
|
||||
drawtype = gimp_drawable_type(drawable->id);
|
||||
|
||||
argc = 1;
|
||||
argv = g_new(gchar *, 1);
|
||||
argv[0] = g_strdup("apply_CentralReflection");
|
||||
|
||||
gtk_init(&argc, &argv);
|
||||
gtk_rc_parse(gimp_gtkrc());
|
||||
|
||||
dlg = maindlg = gtk_dialog_new();
|
||||
gtk_window_set_title(GTK_WINDOW(dlg), "Central-Reflection");
|
||||
gtk_window_position(GTK_WINDOW(dlg), GTK_WIN_POS_MOUSE);
|
||||
gtk_signal_connect(GTK_OBJECT(dlg), "destroy",
|
||||
(GtkSignalFunc)CentralReflection_close_callback,
|
||||
NULL);
|
||||
frame = gtk_frame_new("Parameter Settings");
|
||||
gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
|
||||
gtk_container_border_width(GTK_CONTAINER(frame), 10);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->vbox), frame, TRUE, TRUE, 0);
|
||||
vbox = gtk_vbox_new(FALSE, 5);
|
||||
gtk_container_border_width(GTK_CONTAINER(vbox), 10);
|
||||
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
||||
|
||||
/* use black as foreground: */
|
||||
tips = gtk_tooltips_new ();
|
||||
tips_fg.red = 0;
|
||||
tips_fg.green = 0;
|
||||
tips_fg.blue = 0;
|
||||
/* postit yellow (khaki) as background: */
|
||||
gdk_color_alloc (gtk_widget_get_colormap (frame), &tips_fg);
|
||||
tips_bg.red = 61669;
|
||||
tips_bg.green = 59113;
|
||||
tips_bg.blue = 35979;
|
||||
gdk_color_alloc (gtk_widget_get_colormap (frame), &tips_bg);
|
||||
gtk_tooltips_set_colors (tips,&tips_bg,&tips_fg);
|
||||
|
||||
toggle = gtk_radio_button_new_with_label(group,
|
||||
"Keep original surroundings");
|
||||
group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle));
|
||||
gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0);
|
||||
gtk_signal_connect(GTK_OBJECT(toggle), "toggled",
|
||||
(GtkSignalFunc) CentralReflection_toggle_update,
|
||||
&lvals.keep_surr);
|
||||
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), lvals.keep_surr);
|
||||
gtk_widget_show(toggle);
|
||||
|
||||
set_tooltip(tips,toggle,"In the center, where pixels of outside the image borders would be reflected to, the plug-in can't calculate a reasonable image. If this option is enabled, this area will be filled with the original image.");
|
||||
|
||||
toggle =
|
||||
gtk_radio_button_new_with_label(group,
|
||||
drawtype == INDEXEDA_IMAGE ||
|
||||
drawtype == INDEXED_IMAGE ?
|
||||
"Set surroundings to index 0" :
|
||||
"Set surroundings to background color");
|
||||
group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle));
|
||||
gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0);
|
||||
gtk_signal_connect(GTK_OBJECT(toggle), "toggled",
|
||||
(GtkSignalFunc) CentralReflection_toggle_update,
|
||||
&lvals.use_bkgr);
|
||||
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), lvals.use_bkgr);
|
||||
gtk_widget_show(toggle);
|
||||
set_tooltip(tips,toggle,"In the center, where pixels of outside the image borders would be reflected to, the plug-in can't calculate a reasonable image. If this option is enabled, this area will be filled with the active background color or the index-0-color, depending on the image type.");
|
||||
|
||||
if((drawtype == INDEXEDA_IMAGE) ||
|
||||
(drawtype == GRAYA_IMAGE) ||
|
||||
(drawtype == RGBA_IMAGE)) {
|
||||
toggle = gtk_radio_button_new_with_label(group,
|
||||
"Make surroundings transparent");
|
||||
group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle));
|
||||
gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0);
|
||||
gtk_signal_connect(GTK_OBJECT(toggle), "toggled",
|
||||
(GtkSignalFunc) CentralReflection_toggle_update,
|
||||
&lvals.set_transparent);
|
||||
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle),
|
||||
lvals.set_transparent);
|
||||
gtk_widget_show(toggle);
|
||||
set_tooltip(tips,toggle,"In the center, where pixels of outside the image borders would be reflected to, the plug-in can't calculate a reasonable image. If this option is enabled, this area will be kept transparent.");
|
||||
|
||||
}
|
||||
|
||||
if((drawtype != INDEXEDA_IMAGE) && (drawtype != INDEXED_IMAGE)){
|
||||
toggle = gtk_check_button_new_with_label ("Use antialias (recommended)");
|
||||
gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0);
|
||||
gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
|
||||
(GtkSignalFunc) toggle_update,
|
||||
&lvals.use_antialias);
|
||||
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), lvals.use_antialias);
|
||||
gtk_widget_show (toggle);
|
||||
set_tooltip(tips,toggle,"If this option is enabled, an antialias algorithm will be used to produce a better and smoother output.");
|
||||
|
||||
} else{ lvals.use_antialias=FALSE;}
|
||||
|
||||
toggle = gtk_check_button_new_with_label ("Flip image vertically");
|
||||
gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0);
|
||||
gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
|
||||
(GtkSignalFunc) toggle_update,
|
||||
&lvals.flip);
|
||||
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), lvals.flip);
|
||||
gtk_widget_show (toggle);
|
||||
set_tooltip(tips,toggle,"With this option you can flip the image vertically.");
|
||||
|
||||
|
||||
hbox = gtk_hbox_new(FALSE, 5);
|
||||
gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
|
||||
|
||||
label = gtk_label_new("Radius of reflection-circle: ");
|
||||
gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0);
|
||||
gtk_widget_show(label);
|
||||
|
||||
entry = gtk_entry_new();
|
||||
gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0);
|
||||
gtk_widget_set_usize(entry, ENTRY_WIDTH, 0);
|
||||
sprintf(buffer, "%.2f", lvals.cone_radius);
|
||||
gtk_entry_set_text(GTK_ENTRY(entry), buffer);
|
||||
gtk_signal_connect(GTK_OBJECT(entry), "changed",
|
||||
(GtkSignalFunc)CentralReflection_entry_callback,
|
||||
NULL);
|
||||
gtk_widget_show(entry);
|
||||
set_tooltip(tips,entry,"This specifies the radius of the circle, at which every pixel is mirrored. Pixels outside the circle will be reflected into its inner part and vice versa.");
|
||||
|
||||
|
||||
gtk_widget_show(hbox);
|
||||
|
||||
gtk_widget_show(vbox);
|
||||
gtk_widget_show(frame);
|
||||
|
||||
|
||||
button = gtk_button_new_with_label("OK");
|
||||
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect(GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc)CentralReflection_ok_callback,
|
||||
dlg);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area),
|
||||
button, TRUE, TRUE, 0);
|
||||
gtk_widget_grab_default(button);
|
||||
gtk_widget_show(button);
|
||||
set_tooltip(tips,button,"Close the dialog box and apply distortion.");
|
||||
|
||||
button = gtk_button_new_with_label("Cancel");
|
||||
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc)gtk_widget_destroy,
|
||||
GTK_OBJECT(dlg));
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area),
|
||||
button, TRUE, TRUE, 0);
|
||||
gtk_widget_show(button);
|
||||
set_tooltip(tips,button,"Close the dialog box without applying distortion.");
|
||||
|
||||
button = gtk_button_new_with_label("About...");
|
||||
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect(GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc)CentralReflection_about_callback,button);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area),
|
||||
button, TRUE, TRUE, 0);
|
||||
gtk_widget_show(button);
|
||||
set_tooltip(tips,button,"Show information about the author and the plug-in.");
|
||||
|
||||
|
||||
gtk_widget_show(dlg);
|
||||
|
||||
gtk_main();
|
||||
|
||||
gtk_object_unref(GTK_OBJECT(tips));
|
||||
|
||||
gdk_flush();
|
||||
|
||||
return bint.run;
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
CentralReflection_logo_dialog()
|
||||
{
|
||||
GtkWidget *xdlg;
|
||||
GtkWidget *xlabel;
|
||||
GtkWidget *xbutton;
|
||||
GtkWidget *xlogo_box;
|
||||
GtkWidget *xpreview;
|
||||
GtkWidget *xframe,*xframe2;
|
||||
GtkWidget *xvbox;
|
||||
GtkWidget *xhbox;
|
||||
char *text;
|
||||
guchar *temp,*temp2;
|
||||
guchar *datapointer;
|
||||
gint y,x;
|
||||
xdlg = logodlg = gtk_dialog_new();
|
||||
gtk_window_set_title(GTK_WINDOW(xdlg), "About");
|
||||
gtk_window_position(GTK_WINDOW(xdlg), GTK_WIN_POS_MOUSE);
|
||||
gtk_signal_connect(GTK_OBJECT(xdlg), "destroy",
|
||||
(GtkSignalFunc)CentralReflection_close_callback,
|
||||
NULL);
|
||||
|
||||
xbutton = gtk_button_new_with_label("OK");
|
||||
GTK_WIDGET_SET_FLAGS(xbutton, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect(GTK_OBJECT(xbutton), "clicked",
|
||||
(GtkSignalFunc)CentralReflection_logo_ok_callback,
|
||||
xdlg);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(xdlg)->action_area),
|
||||
xbutton, TRUE, TRUE, 0);
|
||||
gtk_widget_grab_default(xbutton);
|
||||
gtk_widget_show(xbutton);
|
||||
set_tooltip(tips,xbutton,"Close the information box.");
|
||||
|
||||
xframe = gtk_frame_new(NULL);
|
||||
gtk_frame_set_shadow_type(GTK_FRAME(xframe), GTK_SHADOW_ETCHED_IN);
|
||||
gtk_container_border_width(GTK_CONTAINER(xframe), 10);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(xdlg)->vbox), xframe, TRUE, TRUE, 0);
|
||||
xvbox = gtk_vbox_new(FALSE, 5);
|
||||
gtk_container_border_width(GTK_CONTAINER(xvbox), 10);
|
||||
gtk_container_add(GTK_CONTAINER(xframe), xvbox);
|
||||
|
||||
/* The logo frame & drawing area */
|
||||
xhbox = gtk_hbox_new (FALSE, 5);
|
||||
gtk_box_pack_start (GTK_BOX (xvbox), xhbox, FALSE, TRUE, 0);
|
||||
|
||||
xlogo_box = gtk_vbox_new (FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (xhbox), xlogo_box, FALSE, FALSE, 0);
|
||||
|
||||
xframe2 = gtk_frame_new (NULL);
|
||||
gtk_frame_set_shadow_type (GTK_FRAME (xframe2), GTK_SHADOW_IN);
|
||||
gtk_box_pack_start (GTK_BOX (xlogo_box), xframe2, FALSE, FALSE, 0);
|
||||
|
||||
xpreview = gtk_preview_new (GTK_PREVIEW_COLOR);
|
||||
gtk_preview_size (GTK_PREVIEW (xpreview), logo_width, logo_height);
|
||||
temp = g_malloc((logo_width+10)*3);
|
||||
datapointer=header_data+logo_width*logo_height-1;
|
||||
for (y = 0; y < logo_height; y++){
|
||||
temp2=temp;
|
||||
for (x = 0; x< logo_width; x++) {
|
||||
HEADER_PIXEL(datapointer,temp2); temp2+=3;}
|
||||
gtk_preview_draw_row (GTK_PREVIEW (xpreview),
|
||||
temp,
|
||||
0, y, logo_width);
|
||||
}
|
||||
g_free(temp);
|
||||
gtk_container_add (GTK_CONTAINER (xframe2), xpreview);
|
||||
gtk_widget_show (xpreview);
|
||||
gtk_widget_show (xframe2);
|
||||
gtk_widget_show (xlogo_box);
|
||||
gtk_widget_show (xhbox);
|
||||
|
||||
xhbox = gtk_hbox_new(FALSE, 5);
|
||||
gtk_box_pack_start(GTK_BOX(xvbox), xhbox, TRUE, TRUE, 0);
|
||||
text = "\nCotting Software Productions\n"
|
||||
"Bahnhofstrasse 31\n"
|
||||
"CH-3066 Stettlen (Switzerland)\n\n"
|
||||
"cotting@mygale.org\n"
|
||||
"http://www.mygale.org/~cotting\n\n"
|
||||
"Central-Reflection\n Plug-In for the GIMP\n"
|
||||
"Version 1.04\n";
|
||||
xlabel = gtk_label_new(text);
|
||||
gtk_box_pack_start(GTK_BOX(xhbox), xlabel, TRUE, FALSE, 0);
|
||||
gtk_widget_show(xlabel);
|
||||
|
||||
gtk_widget_show(xhbox);
|
||||
|
||||
gtk_widget_show(xvbox);
|
||||
gtk_widget_show(xframe);
|
||||
gtk_widget_show(xdlg);
|
||||
|
||||
gtk_main();
|
||||
gdk_flush();
|
||||
return xdlg;
|
||||
}
|
|
@ -1,73 +0,0 @@
|
|||
-------------------------------------------
|
||||
GIMP-Plug-In
|
||||
-------------------------------------------
|
||||
Written by Daniel Cotting
|
||||
Bahnhofstrasse 31
|
||||
CH-3066 Stettlen (Switzerland)
|
||||
|
||||
cotting@mygale.org
|
||||
www.mygale.org/~cotting
|
||||
-------------------------------------------
|
||||
Some code is taken out of other plug-ins
|
||||
written by other authors.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
INSTALLATION
|
||||
-------------------------------------------
|
||||
To install it, you have to edit the
|
||||
Makefile (change install-path).
|
||||
Afterwards run make. This will compile
|
||||
and install the plug-in in the right
|
||||
directory. Once the new code is installed,
|
||||
you can run the GIMP and enjoy the new
|
||||
functions and effects it provides.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
REDUCE CODE SIZE
|
||||
-------------------------------------------
|
||||
With this new release 1.04 the size of
|
||||
the logo in the about box has been reduced
|
||||
in order to make smaller binaries.
|
||||
If you find that the plug-in is still
|
||||
too big, you can compress the executables
|
||||
with the gzexe program (if it is avaiable
|
||||
on your system). To do so, change to the
|
||||
plug-in directory of the GIMP...
|
||||
|
||||
cd /usr/local/lib/gimp/VERSION/plug-ins
|
||||
|
||||
...and execute the command...
|
||||
|
||||
gzexe PLUGIN_NAME
|
||||
|
||||
...and remember to remove the uncompres-
|
||||
sed binary, which has been renamed to
|
||||
PLUGIN_NAME~, by running the command:
|
||||
|
||||
rm PLUGIN_NAME~
|
||||
|
||||
This will result in a code size of about
|
||||
20 kB, which isn't too much IMHO.
|
||||
------------------------------------------
|
||||
|
||||
|
||||
------------------------------------------
|
||||
FEEDBACK
|
||||
------------------------------------------
|
||||
I'm interested in any feedback, comments,
|
||||
bug-reports, suggestions etc. If you
|
||||
have anything you would like to tell
|
||||
me, you can write to cotting@mygale.org.
|
||||
Also have a look at the GIMP-section of
|
||||
my homepage at www.mygale.org/~cotting.
|
||||
------------------------------------------
|
||||
|
||||
Thank you and happy GIMPing!
|
||||
Daniel Cotting
|
||||
|
||||
------------------------------------------
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
pluginlibdir = $(gimpplugindir)/plug-ins
|
||||
|
||||
pluginlib_PROGRAMS = CentralReflection
|
||||
|
||||
CentralReflection_SOURCES = \
|
||||
CentralReflection.c logo.h
|
||||
|
||||
INCLUDES = \
|
||||
$(X_CFLAGS) \
|
||||
-I$(top_srcdir) \
|
||||
-I$(includedir)
|
||||
|
||||
LDADD = \
|
||||
$(top_builddir)/libgimp/libgimpui.la \
|
||||
$(top_builddir)/libgimp/libgimp.la \
|
||||
$(X_LIBS) \
|
||||
-lc
|
||||
|
||||
DEPS = \
|
||||
$(top_builddir)/libgimp/libgimpui.la \
|
||||
$(top_builddir)/libgimp/libgimp.la
|
||||
|
||||
CentralReflection_DEPENDENCIES = $(DEPS)
|
||||
|
||||
.PHONY: files
|
||||
|
||||
files:
|
||||
@files=`ls $(DISTFILES) 2> /dev/null`; for p in $$files; do \
|
||||
echo $$p; \
|
||||
done
|
||||
@for subdir in $(SUBDIRS); do \
|
||||
files=`cd $$subdir; $(MAKE) files | grep -v "make\[[1-9]\]"`; \
|
||||
for file in $$files; do \
|
||||
echo $$subdir/$$file; \
|
||||
done; \
|
||||
done
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,73 +0,0 @@
|
|||
-------------------------------------------
|
||||
GIMP-Plug-In
|
||||
-------------------------------------------
|
||||
Written by Daniel Cotting
|
||||
Bahnhofstrasse 31
|
||||
CH-3066 Stettlen (Switzerland)
|
||||
|
||||
cotting@mygale.org
|
||||
www.mygale.org/~cotting
|
||||
-------------------------------------------
|
||||
Some code is taken out of other plug-ins
|
||||
written by other authors.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
INSTALLATION
|
||||
-------------------------------------------
|
||||
To install it, you have to edit the
|
||||
Makefile (change install-path).
|
||||
Afterwards run make. This will compile
|
||||
and install the plug-in in the right
|
||||
directory. Once the new code is installed,
|
||||
you can run the GIMP and enjoy the new
|
||||
functions and effects it provides.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
REDUCE CODE SIZE
|
||||
-------------------------------------------
|
||||
With this new release 1.04 the size of
|
||||
the logo in the about box has been reduced
|
||||
in order to make smaller binaries.
|
||||
If you find that the plug-in is still
|
||||
too big, you can compress the executables
|
||||
with the gzexe program (if it is avaiable
|
||||
on your system). To do so, change to the
|
||||
plug-in directory of the GIMP...
|
||||
|
||||
cd /usr/local/lib/gimp/VERSION/plug-ins
|
||||
|
||||
...and execute the command...
|
||||
|
||||
gzexe PLUGIN_NAME
|
||||
|
||||
...and remember to remove the uncompres-
|
||||
sed binary, which has been renamed to
|
||||
PLUGIN_NAME~, by running the command:
|
||||
|
||||
rm PLUGIN_NAME~
|
||||
|
||||
This will result in a code size of about
|
||||
20 kB, which isn't too much IMHO.
|
||||
------------------------------------------
|
||||
|
||||
|
||||
------------------------------------------
|
||||
FEEDBACK
|
||||
------------------------------------------
|
||||
I'm interested in any feedback, comments,
|
||||
bug-reports, suggestions etc. If you
|
||||
have anything you would like to tell
|
||||
me, you can write to cotting@mygale.org.
|
||||
Also have a look at the GIMP-section of
|
||||
my homepage at www.mygale.org/~cotting.
|
||||
------------------------------------------
|
||||
|
||||
Thank you and happy GIMPing!
|
||||
Daniel Cotting
|
||||
|
||||
------------------------------------------
|
||||
|
|
@ -1,75 +0,0 @@
|
|||
-------------------------------------------
|
||||
GIMP-Plug-In
|
||||
-------------------------------------------
|
||||
Written by Daniel Cotting
|
||||
Bahnhofstrasse 31
|
||||
CH-3066 Stettlen (Switzerland)
|
||||
|
||||
cotting@mygale.org
|
||||
www.mygale.org/~cotting
|
||||
-------------------------------------------
|
||||
Some code is taken out of other plug-ins
|
||||
written by other authors.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
INSTALLATION
|
||||
-------------------------------------------
|
||||
To install it, you have to edit the
|
||||
Makefile (change install-path).
|
||||
Afterwards run make. This will compile
|
||||
and install the plug-in in the right
|
||||
directory. Once the new code is installed,
|
||||
you can run the GIMP and enjoy the new
|
||||
functions and effects it provides.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
REDUCE CODE SIZE
|
||||
-------------------------------------------
|
||||
With this new release 1.01 the size of
|
||||
the logo in the about box has been reduced
|
||||
in order to make smaller binaries. In
|
||||
general the compiled plug-in will be
|
||||
about 25-30% of the size of version 1.00.
|
||||
If you find that the plug-in is still
|
||||
too big, you can compress the executables
|
||||
with the gzexe program (if it is avaiable
|
||||
on your system). To do so, change to the
|
||||
plug-in directory of the GIMP...
|
||||
|
||||
cd /usr/local/lib/gimp/VERSION/plug-ins
|
||||
|
||||
...and execute the command...
|
||||
|
||||
gzexe PLUGIN_NAME
|
||||
|
||||
...and remember to remove the uncompres-
|
||||
sed binary, which has been renamed to
|
||||
PLUGIN_NAME~, by running the command:
|
||||
|
||||
rm PLUGIN_NAME~
|
||||
|
||||
This will result in a code size of about
|
||||
35 to 40 kB, which isn't too much IMHO.
|
||||
------------------------------------------
|
||||
|
||||
|
||||
------------------------------------------
|
||||
FEEDBACK
|
||||
------------------------------------------
|
||||
I'm interested in any feedback, comments,
|
||||
bug-reports, suggestions etc. If you
|
||||
have anything you would like to tell
|
||||
me, you can write to cotting@mygale.org.
|
||||
Also have a look at the GIMP-section of
|
||||
my homepage at www.mygale.org/~cotting.
|
||||
------------------------------------------
|
||||
|
||||
Thank you and happy GIMPing!
|
||||
Daniel Cotting
|
||||
|
||||
------------------------------------------
|
||||
|
|
@ -1,788 +0,0 @@
|
|||
/* GIMP header image file format (Indexed): //logo.h */
|
||||
|
||||
static unsigned int logo_width = 200;
|
||||
static unsigned int logo_height = 72;
|
||||
|
||||
/* Call this macro repeatedly. After each use, the pixel data can be extracted */
|
||||
|
||||
#define HEADER_PIXEL(data,pixel) \
|
||||
pixel[0] = palette_data[data[0]*3+2]; \
|
||||
pixel[1] = palette_data[data[0]*3+1]; \
|
||||
pixel[2] = palette_data[data[0]*3+0]; \
|
||||
data--;
|
||||
|
||||
static unsigned char
|
||||
palette_data[] = { 4,2,2,4,110,178,32,4,122,4,36,
|
||||
86,15,3,66,4,58,127,36,8,186,4,34,122,17,2,
|
||||
34,4,19,66,12,4,162,90,2,69,88,2,48,7,20,
|
||||
2,25,2,103,8,14,48,4,58,186,90,3,154,82,2,
|
||||
129,55,2,34,17,2,18,17,34,191,94,2,101,57,2,
|
||||
70,7,32,154,12,22,157,17,3,50,4,88,150,96,3,
|
||||
186,86,2,138,87,2,86,212,214,210,4,19,98,52,2,
|
||||
154,15,11,2,4,132,216,7,18,125,12,6,82,37,12,
|
||||
18,4,88,189,86,14,48,128,2,157,32,4,138,4,60,
|
||||
155,4,48,126,60,2,218,7,10,52,13,12,66,129,2,
|
||||
50,56,2,52,52,14,98,4,47,157,6,20,87,48,2,
|
||||
24,58,2,101,120,2,141,52,5,170,4,113,215,127,2,
|
||||
73,4,90,210,4,52,112,36,18,194,59,2,85,42,2,
|
||||
10,107,2,173,95,2,114,31,3,52,4,79,160,84,3,
|
||||
189,14,10,40,30,2,69,96,2,58,113,2,126,9,37,
|
||||
231,17,33,170,28,14,2,4,30,146,68,10,37,132,2,
|
||||
82,23,4,7,4,10,122,4,36,108,32,2,37,7,27,
|
||||
2,4,98,175,84,10,146,4,101,191,4,14,146,8,29,
|
||||
86,4,2,170,8,60,230,84,10,162,72,2,39,102,2,
|
||||
142,4,142,221,4,49,143,68,12,170,4,124,213,15,4,
|
||||
74,114,2,69,112,2,158,32,3,23,8,50,190,111,2,
|
||||
104,6,40,154,96,2,210,6,28,104,60,2,138,61,2,
|
||||
25,68,2,114,58,2,125,39,2,114,73,2,69,16,4,
|
||||
58,4,88,177,56,14,26,138,2,173,4,68,176,71,2,
|
||||
55,76,2,210,4,78,130,17,3,42,6,27,69,112,2,
|
||||
49,12,26,178,47,13,159,18,11,10,13,11,74,141,2,
|
||||
58,52,18,234,4,82,186,4,126,198,4,103,213,4,62,
|
||||
206,4,72,226,12,46,210,72,12,222,12,26,146,20,34,
|
||||
210,4,113,197,4,131,229,4,48,170,4,76,170,7,43,
|
||||
95,52,30,218,15,11,170,52,14,202,12,14,86,4,40,
|
||||
174,108,14,202,156,2,186,60,12,130,5,40,129,73,13,
|
||||
189,12,42,138,44,14,202,4,59,143,4,124,229,4,69,
|
||||
191,4,69,157,4,60,114,4,43,110,14,14,58,20,26,
|
||||
157,28,26,210,4,87,162,4,91,202,4,110,226,4,98,
|
||||
226,4,101,202,17,14,186,28,18,18,60,2,234,28,10,
|
||||
114,4,30,114,8,10,162,12,54,186,20,26,130,100,10,
|
||||
170,40,18,154,4,22,114,28,26,234,4,22,58,4,66,
|
||||
226,4,54,202,12,42,202,4,38,98,4,145,234,4,76,
|
||||
146,4,94,148,4,138,213,4,94,186,4,54,126,4,54,
|
||||
154,4,118,211,4,106,178,4,106,188,4,54,142,4,94,
|
||||
170,4,70,202,4,118,197,4,54,173,4,82,178,72,4,
|
||||
172,36,10,138,76,14,162,4,98,210,4,118,226,112,2,
|
||||
114,24,19,8,30,2,85,84,6,226,141,2,73,28,30,
|
||||
10,28,46,186,112,4,206,36,10,90,36,2,174,108,2,
|
||||
58,41,3,130,44,10,194,9,33,130,92,2,162,51,2,
|
||||
42,12,32,162,81,3,146,44,11,26,28,6,146,44,2,
|
||||
178,30,12,10,60,10,178,64,2,146,28,10,178,92,10,
|
||||
210,5,41,146,40,2,102,96,2,125,100,2,88,74,2,
|
||||
157,142,2,159,26,10,55,143,2,50,73,2,102,134,2,
|
||||
142,73,2,84,127,2,126,142,2,82,156,2,178,28,10,
|
||||
158,28,26,114,84,14,202,12,4,10,5,20,74,17,2,
|
||||
26,92,2,194,7,19,106};
|
||||
|
||||
static unsigned char header_data[] = { 71,99,218,218,99,11,71,218,71,71,
|
||||
218,99,99,99,71,99,218,99,99,99,99,218,71,218,99,218,218,99,99,218,
|
||||
218,99,99,218,99,218,99,58,218,99,99,99,58,218,99,99,99,58,99,58,
|
||||
99,58,11,58,99,58,58,11,99,58,99,58,99,99,99,218,99,218,99,58,
|
||||
99,71,99,218,71,12,12,12,12,12,12,12,12,12,92,19,19,19,92,92,
|
||||
92,92,19,108,19,19,19,19,19,19,53,53,53,53,101,19,19,53,53,19,
|
||||
19,19,12,92,92,12,12,12,71,71,218,99,218,218,71,71,12,12,218,99,
|
||||
58,58,58,99,99,99,58,99,99,99,11,58,11,58,58,99,58,99,99,99,
|
||||
58,99,99,99,99,58,99,99,99,99,99,218,99,99,11,99,99,99,11,99,
|
||||
99,218,218,218,99,218,99,99,218,218,99,99,218,99,218,218,99,99,218,11,
|
||||
218,71,99,218,99,218,218,99,71,8,218,99,218,218,99,99,99,99,99,99,
|
||||
218,218,99,99,218,99,218,99,218,71,99,99,99,218,99,99,218,99,99,99,
|
||||
218,218,99,99,99,99,58,99,58,30,99,99,99,99,99,99,58,99,99,58,
|
||||
99,58,99,58,99,99,58,58,58,99,58,58,99,218,218,71,99,99,71,71,
|
||||
71,123,12,118,71,71,12,71,123,12,12,19,19,19,53,19,19,53,53,19,
|
||||
19,53,101,63,20,63,20,63,53,53,53,101,53,53,53,19,53,53,53,19,
|
||||
92,12,12,12,71,12,12,12,12,12,92,71,218,218,71,218,71,71,71,71,
|
||||
99,218,58,58,58,99,99,99,99,58,58,58,99,58,99,58,58,99,58,58,
|
||||
99,99,58,99,99,99,99,58,99,58,30,99,99,99,218,99,58,99,99,58,
|
||||
11,99,99,218,99,218,218,99,99,218,71,99,218,99,99,218,99,99,218,99,
|
||||
11,218,99,218,99,11,218,99,99,8,71,71,71,99,218,71,218,99,71,218,
|
||||
11,99,218,218,99,218,99,218,99,99,99,99,218,99,99,99,99,99,218,99,
|
||||
99,99,99,99,99,11,99,99,99,99,99,99,58,99,58,99,58,99,58,58,
|
||||
99,11,58,58,99,58,99,99,58,58,218,99,123,71,71,71,123,71,71,218,
|
||||
99,99,218,71,12,12,12,12,92,19,19,53,19,53,53,53,53,19,53,53,
|
||||
53,53,19,53,19,53,53,53,53,53,63,63,101,63,63,20,53,19,53,53,
|
||||
53,19,92,92,12,12,12,71,71,71,71,12,12,71,71,12,12,12,12,12,
|
||||
12,218,218,99,58,58,99,58,99,58,99,58,99,99,58,218,58,99,58,99,
|
||||
99,99,99,11,58,99,99,58,99,99,58,58,99,99,99,99,99,99,99,99,
|
||||
99,58,218,99,218,99,99,99,218,99,99,218,99,11,218,99,218,218,99,99,
|
||||
218,99,218,11,99,71,99,218,71,8,99,99,218,99,99,99,218,99,99,218,
|
||||
218,99,11,99,99,218,99,218,99,218,218,99,58,99,99,99,58,11,99,99,
|
||||
58,99,99,58,58,58,58,99,99,99,99,218,58,99,99,99,58,58,99,99,
|
||||
58,58,99,58,99,58,99,99,58,58,99,218,71,71,218,218,218,58,58,58,
|
||||
218,99,71,123,12,12,12,19,19,108,108,108,92,92,92,12,71,12,12,92,
|
||||
19,53,53,53,101,53,53,19,53,101,53,20,53,79,79,0,34,79,20,63,
|
||||
53,53,53,19,19,19,12,12,12,71,71,71,71,71,71,123,71,12,12,12,
|
||||
12,12,71,71,218,58,99,58,218,58,218,99,58,99,58,99,99,218,58,58,
|
||||
58,99,58,58,99,99,58,99,58,99,99,218,58,58,99,99,99,99,99,99,
|
||||
58,11,99,99,218,218,218,99,218,99,99,218,218,99,218,99,99,218,218,99,
|
||||
218,99,71,218,99,218,99,99,99,8,218,218,99,218,99,218,99,218,218,99,
|
||||
11,218,218,218,218,99,71,99,218,99,99,99,218,58,99,99,99,99,218,30,
|
||||
58,99,58,99,58,11,58,99,58,99,58,58,58,99,58,58,99,99,58,58,
|
||||
58,99,58,99,58,58,99,58,218,99,99,218,58,99,58,58,58,58,58,218,
|
||||
71,12,12,71,71,12,12,12,12,71,71,118,71,71,118,71,71,12,223,19,
|
||||
19,53,53,53,53,63,229,20,79,20,34,0,20,101,101,63,20,101,101,53,
|
||||
108,53,53,53,53,53,101,19,92,12,12,12,12,71,71,218,218,218,71,71,
|
||||
118,12,71,71,218,218,58,58,58,58,58,58,218,58,58,58,99,99,218,99,
|
||||
58,58,99,99,58,99,58,99,58,58,58,99,99,99,58,99,99,99,58,58,
|
||||
99,58,58,99,99,99,99,99,99,99,218,99,99,218,99,218,218,99,99,218,
|
||||
99,58,99,99,218,99,218,218,218,8,99,218,99,218,99,218,11,99,218,99,
|
||||
99,99,99,99,218,99,58,99,99,99,58,99,218,99,99,99,99,99,58,99,
|
||||
58,218,99,99,99,58,218,58,58,58,99,99,58,99,218,58,99,99,58,218,
|
||||
58,99,58,99,99,99,58,99,58,58,58,58,99,58,58,58,58,218,218,12,
|
||||
71,71,71,12,12,71,71,12,71,12,71,71,71,71,12,92,19,53,53,53,
|
||||
101,63,79,34,251,0,0,63,20,53,19,53,53,53,53,19,19,53,19,19,
|
||||
19,108,19,19,19,19,19,19,53,53,108,12,12,12,71,71,218,58,58,58,
|
||||
99,218,71,71,71,12,218,99,99,58,58,58,58,218,58,58,58,58,58,99,
|
||||
99,58,58,99,58,218,58,99,99,99,99,58,99,128,99,58,99,99,11,99,
|
||||
99,58,11,58,99,99,99,218,58,11,99,58,99,218,99,99,218,99,99,99,
|
||||
218,71,99,99,218,99,11,99,218,8,218,99,218,99,218,99,99,218,99,218,
|
||||
58,218,58,218,99,99,218,99,58,99,99,99,99,78,11,58,99,58,99,99,
|
||||
99,58,58,99,58,11,58,58,218,99,99,58,58,58,99,58,58,58,99,99,
|
||||
58,58,58,58,58,58,99,58,99,99,99,58,58,58,58,58,218,71,118,12,
|
||||
71,71,71,71,71,12,71,71,71,71,71,12,92,19,19,53,53,63,20,251,
|
||||
0,79,79,0,79,34,34,79,0,63,229,20,63,101,53,101,19,53,19,92,
|
||||
12,71,12,92,12,12,12,12,12,92,19,92,92,71,12,118,71,218,99,58,
|
||||
58,58,58,58,218,123,71,218,58,58,58,99,58,58,58,218,58,218,58,58,
|
||||
218,58,99,58,58,58,99,99,58,99,58,99,218,99,99,99,58,58,58,11,
|
||||
58,58,99,58,99,99,30,99,99,99,58,218,218,30,99,218,99,99,99,218,
|
||||
99,99,218,218,99,99,218,71,99,8,99,99,71,99,218,218,99,218,99,218,
|
||||
99,218,99,58,11,58,99,99,11,58,99,58,99,99,99,99,58,58,99,99,
|
||||
58,99,99,99,99,58,99,78,58,58,99,99,218,78,58,218,58,99,212,58,
|
||||
99,58,58,58,218,58,58,58,58,58,58,58,58,58,218,71,12,12,71,71,
|
||||
123,218,218,58,99,71,123,71,71,12,19,19,19,53,53,19,19,53,63,53,
|
||||
101,101,101,63,101,101,20,20,79,0,0,79,79,34,251,79,79,251,101,53,
|
||||
19,92,12,71,71,71,218,12,218,12,71,71,71,71,71,12,71,71,123,71,
|
||||
58,58,58,58,58,58,58,99,99,58,58,58,99,58,58,58,99,58,99,58,
|
||||
99,58,58,99,58,58,58,58,99,58,99,58,99,58,99,58,99,99,58,58,
|
||||
99,99,99,58,99,58,58,58,99,99,99,30,128,58,99,99,99,99,99,58,
|
||||
218,99,99,218,218,99,99,218,71,8,71,218,99,99,99,99,218,99,99,99,
|
||||
99,30,58,11,58,58,99,58,58,58,58,30,58,58,99,99,99,58,99,58,
|
||||
99,58,99,58,58,58,218,99,58,99,58,58,58,218,99,58,58,58,58,58,
|
||||
58,99,99,99,58,99,99,58,58,212,99,58,58,218,71,71,218,218,99,58,
|
||||
58,58,58,218,123,71,71,12,108,19,19,108,19,19,223,92,19,92,12,12,
|
||||
19,19,19,19,53,53,63,63,229,0,34,34,79,0,79,0,75,34,0,34,
|
||||
79,20,53,19,92,12,71,71,71,218,71,123,71,123,71,71,71,71,71,71,
|
||||
71,218,58,58,58,58,58,58,58,99,58,58,58,58,58,58,58,58,99,58,
|
||||
58,99,99,58,99,58,58,58,58,58,58,99,58,99,58,99,58,58,99,99,
|
||||
58,58,99,99,58,58,218,58,58,99,58,99,11,58,58,99,58,218,99,99,
|
||||
99,99,218,99,99,218,99,99,99,8,99,218,99,218,99,99,99,99,58,58,
|
||||
11,58,99,58,58,30,58,11,58,11,58,99,99,58,99,58,58,58,99,58,
|
||||
58,99,58,99,99,58,58,99,58,99,58,99,58,99,212,58,58,58,58,58,
|
||||
58,58,58,58,58,58,58,58,58,58,212,58,218,218,218,99,58,58,58,58,
|
||||
58,99,71,71,71,12,71,71,12,12,12,71,71,123,71,218,71,71,71,92,
|
||||
19,108,63,79,229,126,0,79,0,0,34,34,34,126,34,251,79,0,126,34,
|
||||
79,0,79,20,63,19,19,12,71,71,71,218,71,99,71,71,71,71,71,71,
|
||||
71,71,218,58,58,58,212,58,58,58,58,58,58,58,58,58,58,58,58,58,
|
||||
58,58,99,58,58,99,58,58,99,99,128,218,58,58,99,58,99,58,58,99,
|
||||
218,58,58,218,99,99,99,99,99,99,58,99,99,58,30,218,99,99,99,99,
|
||||
99,99,218,99,99,99,218,218,99,8,218,99,99,99,58,99,99,99,99,99,
|
||||
58,58,218,99,99,99,58,99,58,58,58,99,58,99,58,99,99,99,58,58,
|
||||
99,99,58,58,58,58,58,58,99,99,58,99,99,58,58,58,58,99,58,58,
|
||||
99,58,99,58,78,212,99,212,99,58,58,99,58,58,78,78,246,99,212,58,
|
||||
99,71,123,71,71,71,71,71,218,218,71,123,218,218,218,118,12,19,63,63,
|
||||
0,0,0,34,34,0,34,79,79,79,0,34,79,79,20,101,53,101,53,19,
|
||||
53,53,101,101,53,53,19,19,19,92,218,218,218,218,218,212,78,58,218,218,
|
||||
71,71,71,11,58,246,58,78,246,58,58,58,99,99,58,58,99,58,212,58,
|
||||
99,58,99,58,58,99,58,58,58,58,58,212,218,58,58,99,58,58,99,58,
|
||||
99,99,99,58,58,99,99,99,58,99,58,58,99,99,99,58,58,99,99,99,
|
||||
99,99,99,11,58,99,99,99,218,8,99,99,218,99,99,218,99,218,58,58,
|
||||
11,78,58,99,58,99,58,99,58,11,58,99,58,99,58,58,58,99,99,58,
|
||||
99,99,99,58,58,58,58,58,58,58,58,58,58,58,58,212,99,58,212,99,
|
||||
58,58,78,58,78,58,58,58,58,58,58,58,58,58,246,58,246,58,58,71,
|
||||
218,71,71,71,218,71,71,71,71,218,218,71,71,92,92,53,63,126,79,0,
|
||||
0,79,0,79,34,79,0,126,79,79,79,79,79,229,229,101,53,108,92,71,
|
||||
71,71,71,71,71,12,12,19,108,19,92,71,71,71,71,218,212,246,78,58,
|
||||
58,218,218,71,71,58,58,212,212,78,212,78,78,58,58,58,58,58,99,58,
|
||||
78,58,58,99,58,58,58,58,58,58,58,58,99,58,99,58,58,212,99,58,
|
||||
58,99,58,99,58,99,99,58,58,99,99,58,58,58,58,11,78,99,99,99,
|
||||
99,58,99,58,71,99,99,99,99,8,99,99,99,218,99,58,99,30,58,11,
|
||||
58,11,58,58,99,58,58,99,58,99,58,99,99,58,99,58,99,58,58,99,
|
||||
58,58,58,58,58,78,58,99,58,99,58,58,58,58,99,58,212,99,58,58,
|
||||
58,78,78,78,58,58,58,58,58,212,58,78,58,78,78,78,58,99,218,218,
|
||||
71,218,218,71,58,99,58,99,71,71,71,12,19,20,79,251,0,251,79,251,
|
||||
79,63,126,79,79,79,79,229,79,79,79,126,126,79,79,63,20,53,53,92,
|
||||
12,12,218,71,71,218,218,218,71,218,71,71,71,218,71,218,218,58,246,246,
|
||||
78,212,78,58,218,218,58,58,58,246,78,212,78,212,58,58,58,58,58,212,
|
||||
78,78,78,58,58,99,58,58,58,58,58,58,58,58,58,218,99,99,58,99,
|
||||
58,58,218,99,58,58,99,58,99,99,58,99,99,99,58,99,99,58,58,58,
|
||||
218,99,11,58,99,99,99,218,99,8,99,30,218,58,11,99,99,58,99,58,
|
||||
99,58,58,99,218,99,218,58,99,99,58,58,58,58,99,58,99,99,58,99,
|
||||
58,58,58,78,78,58,58,58,58,58,99,246,78,78,58,58,58,58,58,78,
|
||||
78,212,78,246,246,58,58,58,212,58,212,246,78,246,58,212,218,218,218,218,
|
||||
218,58,246,58,246,58,218,218,123,12,19,19,53,53,101,53,63,101,63,63,
|
||||
63,63,63,63,63,101,63,53,63,53,53,53,53,108,19,19,19,19,108,19,
|
||||
92,92,12,12,71,71,218,99,99,218,218,218,218,218,71,71,71,218,218,246,
|
||||
78,78,246,78,78,78,58,58,58,78,78,78,78,246,58,58,58,58,58,78,
|
||||
212,78,78,58,58,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,
|
||||
58,99,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,99,99,99,
|
||||
58,99,58,99,99,58,99,99,99,8,99,99,30,58,58,58,58,58,58,99,
|
||||
58,11,99,58,99,58,58,58,58,58,58,99,58,58,58,58,58,58,99,58,
|
||||
99,58,78,58,58,58,99,58,58,78,246,78,58,78,58,58,58,58,78,212,
|
||||
246,78,246,78,78,99,212,246,78,246,58,246,246,78,246,218,218,218,58,58,
|
||||
246,78,78,246,58,218,218,71,12,12,108,92,108,19,108,53,63,63,63,53,
|
||||
53,53,19,223,92,92,49,118,118,118,118,118,118,118,71,118,118,12,12,12,
|
||||
92,71,71,123,218,99,11,58,58,58,58,78,58,99,99,123,71,218,218,218,
|
||||
246,246,78,212,78,212,78,246,78,78,58,78,246,78,246,78,58,58,58,58,
|
||||
99,78,246,78,246,99,58,58,58,58,58,78,78,78,78,99,58,99,58,99,
|
||||
78,58,58,99,58,218,218,58,58,99,58,58,58,218,99,58,58,58,58,11,
|
||||
58,99,99,99,58,99,99,218,58,8,99,99,58,99,58,11,58,11,58,58,
|
||||
99,58,99,58,99,58,99,58,58,218,58,58,58,99,58,99,58,58,58,99,
|
||||
78,58,58,58,99,58,58,78,78,58,246,78,246,99,58,58,58,212,78,78,
|
||||
246,58,246,58,78,78,78,58,246,78,78,58,246,58,58,58,212,58,246,78,
|
||||
212,246,58,58,71,71,71,71,12,92,92,92,108,53,53,53,19,19,223,223,
|
||||
49,223,92,49,49,223,92,49,118,118,118,71,118,112,118,11,11,112,71,112,
|
||||
71,71,11,11,11,99,99,58,58,78,78,78,246,78,246,58,99,71,218,71,
|
||||
218,78,78,246,78,246,58,246,78,246,212,58,246,58,246,78,212,78,246,58,
|
||||
58,58,78,246,246,78,78,99,58,58,58,212,78,58,78,58,58,58,58,58,
|
||||
78,58,78,99,58,58,99,58,58,58,58,99,58,58,99,218,58,99,58,58,
|
||||
58,58,99,58,99,99,58,99,99,8,99,99,58,58,58,99,58,99,99,58,
|
||||
99,58,58,58,58,58,58,218,99,58,99,58,58,58,58,58,99,58,58,78,
|
||||
58,78,78,78,78,58,78,58,78,78,78,212,78,58,78,58,78,212,78,246,
|
||||
78,246,78,78,212,246,246,78,246,212,246,246,78,246,58,246,78,246,58,246,
|
||||
246,58,99,218,218,218,71,12,92,19,19,19,19,19,223,223,49,223,49,118,
|
||||
49,112,30,30,237,103,208,208,245,208,245,208,245,245,245,103,208,103,22,237,
|
||||
30,30,11,11,11,11,71,71,11,99,58,78,78,246,58,246,246,246,58,99,
|
||||
99,218,212,78,246,78,246,78,246,58,78,58,246,78,58,246,78,212,78,246,
|
||||
58,212,58,78,78,212,78,78,58,58,99,78,78,78,78,78,58,58,99,58,
|
||||
58,78,78,78,58,58,99,58,99,58,58,99,58,218,58,58,99,58,58,218,
|
||||
99,58,99,99,58,99,30,99,99,8,58,99,58,99,58,58,58,99,58,99,
|
||||
58,218,218,58,99,58,99,58,58,58,78,99,78,58,99,58,58,78,58,78,
|
||||
78,58,78,78,58,78,78,246,246,212,78,78,78,58,78,246,78,246,58,246,
|
||||
212,78,58,78,78,58,246,78,78,78,58,246,78,246,78,58,246,78,78,78,
|
||||
58,218,99,11,71,12,92,92,92,223,223,223,223,223,49,118,112,22,237,208,
|
||||
72,245,55,243,245,72,72,72,65,208,236,208,208,245,72,55,243,55,55,243,
|
||||
245,245,245,103,237,237,30,11,11,112,71,11,99,58,78,246,246,246,246,78,
|
||||
58,218,58,58,246,78,212,78,246,78,246,78,212,78,78,212,78,246,78,78,
|
||||
58,78,78,78,78,78,246,246,246,58,58,78,58,246,78,212,78,78,99,58,
|
||||
58,78,58,58,58,58,58,99,58,58,58,58,78,58,58,99,99,58,58,58,
|
||||
99,218,58,99,99,99,58,99,58,8,99,99,99,58,11,58,58,58,99,58,
|
||||
58,58,58,58,58,58,58,99,99,78,78,58,58,78,58,58,99,78,78,78,
|
||||
78,78,78,78,78,78,212,246,246,246,246,78,78,246,246,58,246,78,246,78,
|
||||
78,78,212,246,246,246,78,78,212,246,246,246,58,246,246,78,246,246,78,58,
|
||||
218,99,71,12,12,92,92,82,223,49,223,118,112,22,208,72,72,208,65,22,
|
||||
22,112,11,112,112,112,112,112,118,118,118,112,112,112,30,244,244,30,237,65,
|
||||
236,72,55,55,243,243,208,208,237,237,11,71,11,11,71,11,99,58,246,246,
|
||||
246,78,78,246,58,246,78,246,58,246,58,246,58,246,246,78,78,78,212,78,
|
||||
212,246,212,78,246,246,58,78,78,246,99,246,246,58,246,58,78,78,78,58,
|
||||
78,78,78,78,78,78,58,58,58,99,58,58,78,99,58,58,58,218,99,99,
|
||||
58,58,99,58,99,58,58,99,99,8,58,58,99,58,99,218,99,58,99,99,
|
||||
99,58,99,58,99,58,58,58,58,78,58,58,58,58,58,58,58,78,212,78,
|
||||
78,58,246,78,58,246,246,246,246,246,246,246,78,58,246,78,246,58,246,58,
|
||||
246,78,78,78,58,246,212,78,78,78,58,246,78,212,246,58,78,212,58,99,
|
||||
218,71,12,92,19,223,49,49,118,62,30,22,208,208,103,30,244,112,244,118,
|
||||
112,23,49,49,49,49,49,49,49,49,82,82,223,82,49,118,23,118,118,112,
|
||||
11,30,237,22,65,245,55,243,245,245,103,237,237,11,71,11,71,71,218,58,
|
||||
246,246,78,246,78,212,78,246,246,78,246,246,78,78,212,78,212,78,246,78,
|
||||
78,58,246,78,58,246,78,212,78,246,78,78,78,78,78,212,246,246,246,78,
|
||||
58,78,78,78,58,78,78,58,58,58,58,58,99,58,58,58,58,58,99,58,
|
||||
58,58,58,58,58,99,99,58,58,8,99,99,58,58,58,99,99,99,99,58,
|
||||
58,99,78,58,78,99,58,58,99,78,78,78,58,78,58,58,78,246,78,212,
|
||||
78,78,58,78,246,246,246,246,246,246,58,78,78,246,58,246,78,246,78,246,
|
||||
78,212,78,212,212,246,78,78,246,246,78,212,58,99,212,246,246,58,99,218,
|
||||
118,12,92,223,223,49,49,11,237,208,208,103,244,23,118,112,118,112,49,49,
|
||||
19,82,82,82,223,49,66,49,49,82,223,223,101,19,223,82,223,82,223,82,
|
||||
82,49,23,112,11,244,30,65,72,55,55,245,208,22,237,112,11,118,71,218,
|
||||
218,58,58,78,246,78,212,78,78,212,99,78,212,246,78,246,78,246,78,212,
|
||||
246,246,78,246,246,78,246,78,246,58,246,78,58,78,246,246,246,246,212,246,
|
||||
78,78,78,78,78,58,78,78,99,58,78,78,78,99,58,58,99,58,99,99,
|
||||
58,99,99,99,99,58,99,58,99,8,99,99,99,58,58,99,58,58,99,58,
|
||||
58,58,78,78,58,58,58,58,58,58,78,78,78,78,78,58,246,246,246,246,
|
||||
246,78,78,212,246,246,246,246,246,246,78,212,78,246,78,212,78,246,58,246,
|
||||
78,246,78,58,58,212,246,58,78,246,246,58,58,58,58,246,58,218,71,12,
|
||||
223,223,49,49,49,30,65,72,72,30,112,118,118,112,118,49,223,223,223,49,
|
||||
244,244,244,244,23,23,23,23,70,66,49,70,49,70,70,118,23,23,23,23,
|
||||
49,223,19,82,223,223,23,11,244,237,208,72,55,55,208,103,30,11,11,49,
|
||||
71,71,99,58,246,78,246,246,58,246,58,58,246,212,78,246,58,246,78,58,
|
||||
58,212,78,78,212,78,212,78,78,78,212,78,78,78,246,212,246,246,246,212,
|
||||
246,58,78,78,78,78,58,78,78,99,58,58,78,58,58,58,99,58,58,58,
|
||||
58,58,58,58,99,58,99,58,99,8,99,58,58,218,58,58,58,99,58,58,
|
||||
58,99,58,58,99,58,78,78,78,78,78,78,78,58,246,246,246,212,246,246,
|
||||
212,246,78,246,246,246,246,246,212,246,246,78,246,58,212,246,78,78,78,246,
|
||||
58,246,212,99,58,246,78,246,246,58,58,58,58,78,246,58,99,118,12,92,
|
||||
223,223,223,11,22,72,208,244,49,112,112,118,49,82,223,49,244,244,242,62,
|
||||
23,62,23,23,244,244,244,244,244,244,62,30,244,244,244,244,23,112,210,23,
|
||||
62,244,244,23,223,82,53,82,49,112,30,30,65,72,55,245,208,237,30,112,
|
||||
71,49,118,71,99,78,78,78,246,246,58,99,58,246,212,78,246,58,246,212,
|
||||
99,58,212,246,78,246,78,246,212,246,78,246,246,212,246,246,246,212,246,246,
|
||||
246,246,78,78,246,246,78,78,78,78,58,58,78,58,58,58,58,58,99,99,
|
||||
99,78,99,58,99,99,58,99,58,8,58,99,58,99,99,58,58,99,58,58,
|
||||
58,58,58,58,78,58,78,78,58,78,58,246,78,78,78,212,246,246,212,246,
|
||||
246,246,246,246,246,246,246,246,246,246,246,58,246,58,99,212,246,212,78,78,
|
||||
78,99,58,58,78,246,58,78,246,58,58,58,58,212,58,218,71,12,49,49,
|
||||
49,112,22,72,65,112,49,112,112,112,223,19,118,62,244,62,62,23,23,244,
|
||||
244,244,244,112,23,49,49,223,19,223,82,223,223,49,223,23,118,112,244,30,
|
||||
62,62,62,62,23,62,23,223,82,8,82,71,30,244,22,72,55,245,103,237,
|
||||
11,71,12,12,71,99,78,78,78,58,212,58,58,58,58,212,78,58,246,78,
|
||||
58,58,58,212,78,246,58,78,78,212,212,246,246,246,212,246,246,246,246,246,
|
||||
246,246,58,78,78,58,246,212,78,78,58,78,58,78,78,78,58,78,58,58,
|
||||
218,58,58,99,58,99,99,99,58,8,218,99,58,58,58,99,58,58,99,78,
|
||||
78,58,99,58,58,78,58,78,246,78,78,58,78,212,246,246,246,246,246,246,
|
||||
246,246,246,212,246,212,246,246,246,212,78,246,58,58,58,246,78,78,212,246,
|
||||
58,58,58,58,212,78,246,212,58,58,58,58,58,58,71,12,49,223,223,49,
|
||||
30,208,72,30,49,49,112,49,223,223,23,22,244,62,23,23,62,22,112,118,
|
||||
49,49,223,118,23,244,30,242,22,242,242,62,242,244,244,112,23,49,49,223,
|
||||
23,112,30,244,62,112,210,23,23,49,82,8,223,244,237,30,208,55,243,245,
|
||||
22,30,71,118,12,71,99,78,78,246,212,58,58,58,58,246,246,246,78,246,
|
||||
58,58,58,78,212,78,246,246,246,58,58,212,246,246,246,246,246,246,246,246,
|
||||
246,78,246,58,246,246,246,78,212,78,78,78,58,78,58,78,58,58,99,58,
|
||||
58,58,99,58,58,58,58,58,58,8,58,99,58,58,58,58,99,58,78,78,
|
||||
58,58,78,58,58,78,78,58,78,78,78,78,78,246,212,246,246,246,246,246,
|
||||
246,246,246,246,246,246,212,246,246,246,78,58,58,58,58,246,78,78,246,99,
|
||||
212,58,212,58,212,78,78,58,58,218,58,212,58,99,71,49,223,49,49,30,
|
||||
55,72,112,49,244,11,49,82,112,242,242,62,23,62,244,112,118,223,82,118,
|
||||
30,236,29,225,231,33,248,42,42,42,219,2,42,219,110,107,231,29,65,244,
|
||||
112,223,223,49,112,30,30,23,23,23,23,49,82,101,49,30,30,242,72,243,
|
||||
208,103,30,71,118,12,71,99,78,78,78,58,58,58,58,58,78,58,246,78,
|
||||
58,58,99,58,246,58,246,58,246,58,99,58,212,246,246,212,246,246,246,246,
|
||||
246,246,246,246,212,246,246,246,246,78,58,78,78,78,78,78,58,78,78,78,
|
||||
58,78,99,99,99,58,58,99,99,8,99,58,99,99,58,58,58,58,78,78,
|
||||
78,78,58,58,58,78,78,78,78,78,246,246,58,246,246,246,246,246,246,246,
|
||||
246,246,212,246,99,58,246,246,246,246,212,58,58,58,99,212,78,212,212,58,
|
||||
78,58,58,58,246,246,78,58,71,218,58,58,11,71,118,223,49,23,103,243,
|
||||
22,49,118,30,118,82,49,30,242,62,70,62,244,118,223,82,112,65,93,205,
|
||||
217,42,80,147,98,4,26,8,8,8,8,121,8,8,26,4,98,210,111,219,
|
||||
29,29,65,112,223,82,23,30,244,62,62,62,62,49,82,82,112,30,30,65,
|
||||
243,245,103,30,71,118,12,71,218,212,246,58,58,212,212,58,58,246,212,78,
|
||||
58,58,212,58,58,246,78,246,58,58,58,58,246,212,246,246,246,246,246,246,
|
||||
246,212,246,246,246,246,212,246,246,212,78,246,212,78,58,78,78,78,58,78,
|
||||
78,78,58,58,58,58,99,58,58,8,58,58,58,58,58,58,58,58,237,78,
|
||||
58,78,78,58,78,78,212,78,246,78,78,246,246,246,246,246,246,246,246,246,
|
||||
246,246,246,58,58,58,246,246,246,246,58,58,99,58,58,246,246,78,99,78,
|
||||
246,78,58,58,58,58,58,218,12,99,58,99,71,92,49,223,118,22,41,65,
|
||||
223,23,30,118,19,23,22,242,23,23,30,112,223,19,112,29,222,232,87,80,
|
||||
98,26,121,8,20,253,20,20,20,20,101,20,20,20,253,253,20,8,121,26,
|
||||
4,14,2,231,29,30,49,82,112,30,244,62,23,210,118,82,101,223,30,244,
|
||||
65,55,243,103,237,71,118,71,71,99,58,58,58,58,218,58,58,58,246,212,
|
||||
58,58,212,78,99,58,246,246,78,58,58,58,58,246,246,246,246,246,246,246,
|
||||
246,246,246,212,246,246,246,246,246,246,246,78,78,78,78,78,58,78,58,78,
|
||||
78,58,58,58,78,99,58,58,99,8,99,58,58,99,99,58,58,58,58,237,
|
||||
78,78,58,78,78,246,78,246,78,246,78,246,246,246,246,246,246,246,246,246,
|
||||
246,246,58,58,58,58,246,246,246,58,99,78,246,212,99,246,212,58,78,246,
|
||||
58,246,58,58,58,212,218,12,118,58,58,71,12,49,19,49,237,41,65,49,
|
||||
118,112,223,82,244,236,62,66,62,30,82,8,112,93,68,6,137,88,162,253,
|
||||
253,20,253,19,223,23,244,244,54,242,54,242,244,62,112,49,223,20,20,20,
|
||||
20,253,26,98,14,33,29,244,82,101,112,22,62,62,62,23,49,53,82,30,
|
||||
112,22,243,243,208,11,71,118,12,218,99,58,58,58,12,71,58,58,58,58,
|
||||
99,58,58,246,246,58,58,246,246,58,58,58,99,58,246,246,246,246,78,58,
|
||||
246,212,246,246,246,246,246,212,246,246,78,78,78,78,58,78,78,78,78,58,
|
||||
78,58,78,237,78,58,99,99,78,8,58,99,58,58,78,78,78,78,78,78,
|
||||
58,78,78,58,78,246,78,212,246,246,246,246,246,246,246,246,246,103,246,246,
|
||||
246,246,58,58,58,99,212,246,246,58,212,78,246,58,58,58,58,58,212,78,
|
||||
78,78,58,58,58,58,123,49,218,99,11,118,223,223,82,237,41,208,23,118,
|
||||
237,223,82,244,18,210,23,23,112,19,223,103,64,6,148,147,26,253,20,8,
|
||||
66,23,54,111,219,219,137,24,76,24,163,25,137,42,204,42,151,109,244,223,
|
||||
20,20,20,20,8,4,111,231,236,23,82,12,237,62,62,23,62,223,253,223,
|
||||
237,244,22,41,245,103,11,112,118,71,218,58,58,99,92,92,128,58,58,58,
|
||||
58,58,58,212,78,58,58,212,58,58,58,78,78,58,212,246,246,246,58,58,
|
||||
212,246,212,246,246,246,246,246,246,212,246,78,246,246,78,78,78,78,78,58,
|
||||
78,58,58,78,99,58,58,58,99,8,99,58,58,58,58,78,78,58,78,78,
|
||||
78,78,78,78,78,58,246,246,246,246,246,246,246,246,103,246,246,246,246,246,
|
||||
246,78,58,58,58,58,58,212,58,58,78,212,78,78,99,58,58,212,78,246,
|
||||
212,212,58,58,58,218,92,12,218,99,71,12,223,82,118,243,55,23,223,30,
|
||||
223,19,244,93,54,49,23,112,82,82,245,153,138,234,162,8,253,101,49,30,
|
||||
111,125,24,201,142,16,159,142,43,95,197,156,193,193,51,141,224,25,248,231,
|
||||
65,118,20,20,20,20,121,210,231,55,244,82,49,30,244,62,62,244,223,20,
|
||||
118,237,112,208,243,245,237,71,118,49,71,58,58,218,92,92,12,58,58,99,
|
||||
58,58,212,78,212,212,58,58,58,58,58,212,78,58,58,246,246,246,99,58,
|
||||
99,246,246,246,246,246,246,246,246,246,212,246,58,78,78,78,78,78,58,78,
|
||||
78,58,78,78,58,78,58,99,58,8,99,99,58,58,58,78,78,58,78,58,
|
||||
78,78,78,246,78,78,78,246,246,246,246,246,246,246,246,103,246,246,246,246,
|
||||
246,58,58,58,58,58,58,58,58,58,78,78,246,78,58,58,58,212,78,58,
|
||||
58,78,58,58,58,12,92,12,99,218,118,19,82,223,22,116,237,49,112,112,
|
||||
101,112,93,109,70,112,118,82,223,55,136,185,44,26,253,253,82,62,107,163,
|
||||
117,16,114,159,161,106,98,46,26,26,26,26,26,4,32,81,44,142,43,234,
|
||||
10,56,236,23,20,20,20,8,4,219,225,237,19,82,11,244,62,54,62,223,
|
||||
20,112,30,244,72,239,103,237,71,12,12,71,58,71,92,92,12,128,58,58,
|
||||
58,58,246,78,246,58,58,58,99,58,58,246,78,78,58,246,246,58,58,58,
|
||||
58,212,246,212,246,246,246,246,246,246,78,78,246,58,246,58,78,246,78,58,
|
||||
78,58,78,78,58,58,58,58,58,8,58,58,58,58,78,237,58,78,78,78,
|
||||
78,78,78,58,246,246,212,246,246,246,246,246,246,246,246,246,246,246,246,246,
|
||||
78,58,58,58,58,58,99,58,58,246,246,246,58,246,58,58,58,78,246,218,
|
||||
11,58,58,58,58,12,92,71,218,11,49,223,101,23,239,93,23,118,244,223,
|
||||
223,65,29,70,70,112,82,82,72,233,135,152,121,253,20,49,242,179,176,39,
|
||||
198,156,32,47,26,26,69,113,26,47,9,47,162,113,26,121,113,252,152,159,
|
||||
43,234,217,238,30,253,20,251,8,4,107,17,30,82,223,22,62,62,54,244,
|
||||
82,19,237,112,244,41,245,30,112,71,92,71,99,71,12,92,92,71,78,58,
|
||||
58,246,246,58,78,212,58,58,58,58,58,78,246,58,99,58,212,58,58,58,
|
||||
58,78,246,246,246,246,246,246,246,246,246,246,78,78,78,78,246,58,78,78,
|
||||
58,58,58,99,58,99,58,58,58,8,58,99,99,58,58,78,78,58,78,58,
|
||||
78,58,78,78,78,78,78,246,246,246,246,246,246,246,246,246,78,246,246,246,
|
||||
58,58,78,58,78,58,58,99,58,78,58,246,246,58,58,58,212,58,58,12,
|
||||
71,58,58,58,99,92,92,71,218,71,223,8,19,22,150,30,49,11,23,101,
|
||||
30,93,54,49,112,49,20,30,254,181,95,26,253,253,49,65,163,166,206,202,
|
||||
52,26,8,121,4,161,43,114,139,131,57,200,195,188,192,88,26,26,121,98,
|
||||
197,67,234,145,230,22,82,20,20,8,98,107,100,112,253,112,103,244,54,62,
|
||||
49,20,49,237,118,208,243,103,11,11,12,92,92,92,92,12,49,12,58,58,
|
||||
78,58,246,78,246,78,212,99,58,58,78,246,58,78,58,58,58,99,58,58,
|
||||
58,99,246,246,246,246,246,246,246,246,246,246,246,78,246,78,246,78,58,78,
|
||||
78,58,78,78,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78,
|
||||
78,78,78,78,78,246,246,246,246,246,246,246,246,246,246,246,58,212,58,246,
|
||||
99,212,58,99,78,99,58,58,78,246,58,58,58,78,78,58,78,78,99,71,
|
||||
12,71,58,58,12,12,12,71,11,12,223,101,49,243,100,118,223,112,82,19,
|
||||
93,225,113,23,244,101,223,41,129,199,52,253,20,223,242,124,39,57,117,122,
|
||||
121,121,47,44,195,35,94,196,165,189,189,189,27,84,200,139,67,186,26,121,
|
||||
240,106,159,234,175,68,242,20,20,20,8,210,238,93,223,19,237,244,23,54,
|
||||
62,19,101,244,112,30,243,208,237,11,12,92,49,223,12,12,92,12,58,78,
|
||||
246,78,58,246,78,212,78,78,58,58,212,58,58,58,78,99,58,58,99,58,
|
||||
58,58,246,246,246,246,246,246,246,246,246,246,78,246,58,78,58,78,78,78,
|
||||
78,78,237,78,58,58,58,58,58,8,99,58,99,58,78,78,78,58,78,78,
|
||||
78,78,78,78,78,58,246,246,246,246,103,246,246,246,246,218,58,58,78,78,
|
||||
58,99,71,12,58,78,58,78,58,78,123,12,78,78,58,212,78,78,123,92,
|
||||
12,12,99,99,12,92,92,71,11,118,82,101,112,116,236,82,112,112,82,118,
|
||||
100,110,66,23,49,101,244,215,73,43,69,253,101,23,219,59,97,202,52,8,
|
||||
8,4,120,97,187,139,27,143,46,113,26,26,46,88,60,27,131,200,192,47,
|
||||
82,66,81,159,234,170,68,118,20,251,20,26,2,64,244,101,118,22,23,62,
|
||||
62,49,20,118,244,23,208,245,30,11,71,12,92,12,12,49,12,12,71,58,
|
||||
246,246,78,246,78,246,58,78,58,78,212,218,12,246,78,99,58,78,78,11,
|
||||
12,58,58,246,246,103,246,246,58,246,246,246,246,78,246,78,78,78,58,78,
|
||||
78,58,58,58,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78,
|
||||
78,212,78,246,246,78,99,58,246,246,246,246,246,246,71,12,99,58,58,99,
|
||||
58,58,53,251,71,78,78,78,78,246,19,19,71,246,246,78,212,246,12,92,
|
||||
12,12,12,12,92,12,12,71,218,118,19,101,244,239,65,223,244,11,53,112,
|
||||
222,235,66,112,223,20,72,45,90,221,8,253,19,242,214,97,57,152,26,8,
|
||||
26,188,57,187,139,186,8,8,8,8,121,121,8,8,26,4,44,131,94,67,
|
||||
162,82,113,44,159,76,220,29,82,0,20,8,98,238,245,82,82,237,23,62,
|
||||
54,112,20,223,237,49,22,245,237,11,71,49,12,92,12,12,12,12,71,78,
|
||||
246,58,246,58,246,78,246,58,246,212,58,19,101,218,78,78,99,58,58,53,
|
||||
101,71,58,246,246,246,78,71,92,58,246,246,212,246,78,58,58,78,78,58,
|
||||
78,78,78,78,58,58,58,58,58,8,99,99,58,99,58,78,78,58,99,58,
|
||||
78,78,58,246,78,58,71,92,218,246,246,246,103,246,12,92,92,58,58,58,
|
||||
58,218,63,53,19,246,246,78,78,212,53,92,92,212,246,78,78,58,92,218,
|
||||
12,12,92,92,92,12,12,71,11,118,101,101,22,116,242,223,237,11,8,30,
|
||||
17,62,70,112,8,53,72,172,134,143,8,20,223,109,102,57,97,81,121,82,
|
||||
252,114,35,157,165,26,253,8,8,46,182,4,26,26,8,8,113,160,190,35,
|
||||
186,66,121,106,117,152,232,68,49,79,20,8,26,42,17,223,53,22,112,244,
|
||||
54,244,8,82,30,118,30,245,30,11,99,12,12,92,123,12,12,12,71,78,
|
||||
246,78,246,78,58,246,246,58,246,58,12,53,53,12,78,78,78,99,12,63,
|
||||
63,92,78,78,246,246,78,229,229,12,246,246,246,212,78,71,71,58,78,78,
|
||||
58,78,78,58,58,58,212,58,58,8,99,58,58,58,58,78,78,58,99,218,
|
||||
99,58,246,78,78,58,12,92,12,78,246,246,246,218,92,92,19,71,58,58,
|
||||
58,12,38,92,53,71,246,58,246,218,108,92,92,218,246,212,78,58,12,218,
|
||||
12,12,12,92,12,92,12,71,71,118,82,8,103,116,242,82,244,11,82,30,
|
||||
222,210,223,23,8,101,55,172,183,186,8,253,223,110,102,157,97,161,8,8,
|
||||
127,67,190,140,189,26,8,8,69,127,120,5,52,26,26,8,121,9,84,187,
|
||||
43,113,82,98,142,152,89,119,244,20,0,253,121,219,64,23,101,30,30,23,
|
||||
54,244,82,101,30,112,112,72,237,71,30,12,12,92,118,12,12,12,71,58,
|
||||
246,246,58,246,58,212,78,246,58,246,108,63,53,19,78,78,78,58,53,101,
|
||||
53,108,78,246,246,246,108,79,20,53,246,246,246,78,99,92,92,12,99,78,
|
||||
78,58,58,218,218,218,99,58,58,8,99,99,58,58,58,99,99,218,71,11,
|
||||
99,99,78,246,212,71,218,71,92,71,246,246,246,71,92,92,19,19,58,58,
|
||||
58,92,53,92,92,108,58,246,246,71,92,92,92,92,212,246,246,58,123,48,
|
||||
12,12,12,92,92,12,12,12,99,118,19,101,237,116,65,49,30,112,82,244,
|
||||
222,235,26,118,82,101,65,136,183,7,8,8,82,242,21,157,57,192,69,8,
|
||||
26,7,191,157,190,60,9,8,26,52,84,131,60,4,121,8,26,113,67,94,
|
||||
142,113,82,98,43,152,10,119,244,251,0,253,121,111,64,23,101,244,22,49,
|
||||
62,62,82,101,112,23,112,103,30,71,11,12,12,118,12,12,118,12,71,78,
|
||||
78,246,78,58,218,58,78,246,246,12,53,101,53,19,58,78,58,12,63,63,
|
||||
53,63,218,246,246,71,79,20,63,101,218,246,246,218,12,19,108,12,99,58,
|
||||
99,71,218,71,71,218,71,218,71,8,99,58,99,99,58,58,11,218,71,218,
|
||||
71,71,218,58,58,99,218,99,71,92,218,78,246,92,92,12,223,53,71,58,
|
||||
58,19,19,92,92,19,12,78,78,12,92,92,92,92,71,78,78,218,123,241,
|
||||
48,12,12,92,49,12,118,12,71,49,223,101,11,116,65,66,112,11,82,112,
|
||||
100,54,66,66,223,20,244,105,90,159,8,8,8,244,10,167,187,202,98,8,
|
||||
121,47,192,169,190,35,195,188,188,195,57,84,106,47,8,8,8,122,195,140,
|
||||
95,66,82,98,142,221,175,119,244,251,251,20,8,219,64,112,101,30,242,118,
|
||||
23,62,19,20,11,118,112,22,11,11,99,12,12,12,12,71,12,118,71,58,
|
||||
246,58,246,99,12,99,212,78,58,19,53,53,101,53,58,78,218,53,101,53,
|
||||
53,63,218,246,246,63,0,101,19,53,12,78,58,12,108,92,19,108,92,71,
|
||||
71,12,71,71,123,71,71,123,71,8,99,99,58,58,58,11,58,11,99,218,
|
||||
99,11,99,99,218,99,218,99,71,12,12,99,99,92,92,92,12,19,53,71,
|
||||
99,38,53,12,12,92,19,218,212,92,92,92,48,12,108,128,246,218,123,48,
|
||||
128,123,12,12,12,12,12,118,71,71,223,8,112,41,55,49,49,244,223,49,
|
||||
93,231,70,82,223,20,82,116,181,158,252,8,20,223,242,214,57,157,156,46,
|
||||
8,66,26,147,44,198,86,196,86,198,44,52,4,8,8,8,46,60,97,194,
|
||||
52,82,82,180,159,177,232,64,66,79,20,8,26,231,100,49,8,237,62,23,
|
||||
62,244,82,82,30,223,11,237,112,11,11,12,12,71,12,12,118,12,71,218,
|
||||
246,78,58,218,92,99,246,212,92,53,79,79,53,53,218,58,19,63,38,126,
|
||||
53,101,92,58,19,251,63,223,19,19,92,71,12,223,92,223,223,92,19,92,
|
||||
12,71,123,71,71,71,71,71,71,8,11,58,11,58,99,58,99,58,99,58,
|
||||
58,218,218,218,99,218,11,99,99,71,92,92,12,49,92,71,99,12,53,53,
|
||||
92,20,53,123,48,12,92,19,218,19,92,12,241,48,92,92,58,218,92,241,
|
||||
128,212,71,12,118,12,12,71,71,112,223,19,82,55,116,112,49,244,223,19,
|
||||
208,238,235,66,223,253,82,22,250,73,95,113,8,82,49,111,102,207,132,188,
|
||||
252,69,8,121,162,4,47,52,127,4,4,26,26,8,8,46,186,86,169,95,
|
||||
66,8,4,95,192,87,45,236,101,251,253,8,70,222,236,223,223,237,244,23,
|
||||
54,244,82,82,237,118,11,244,71,11,99,71,118,12,12,12,12,12,12,58,
|
||||
78,78,246,123,108,12,212,12,53,63,13,83,63,53,12,92,53,226,13,13,
|
||||
53,53,53,226,75,63,12,71,92,19,19,92,92,92,19,12,12,12,92,12,
|
||||
71,71,71,71,71,12,71,71,71,8,99,99,58,99,99,58,58,99,58,58,
|
||||
11,218,71,71,11,218,99,99,58,218,12,19,92,92,92,99,78,58,92,101,
|
||||
75,251,53,12,123,48,92,108,101,63,92,12,241,241,92,92,108,92,108,128,
|
||||
212,246,58,12,12,12,49,12,12,118,12,49,19,237,116,22,49,118,244,82,
|
||||
112,17,231,70,223,82,20,82,93,45,133,7,46,8,8,49,50,224,168,207,
|
||||
142,60,127,46,8,26,8,8,8,8,8,8,121,26,47,192,166,169,7,113,
|
||||
66,113,7,156,36,217,28,23,251,251,20,26,111,222,30,8,49,22,112,62,
|
||||
242,112,101,112,30,49,244,11,112,11,99,71,12,12,118,12,12,12,71,246,
|
||||
246,78,212,92,108,92,218,53,38,13,0,0,63,101,20,63,101,75,83,83,
|
||||
63,101,229,79,126,92,58,78,12,19,92,92,19,92,12,71,71,118,71,71,
|
||||
218,12,71,71,71,71,71,218,99,8,218,99,218,58,58,218,99,99,58,99,
|
||||
58,58,99,99,218,99,218,99,58,58,99,92,92,92,19,58,78,78,99,108,
|
||||
0,34,38,123,123,48,123,92,53,108,92,12,241,241,241,123,92,19,19,123,
|
||||
241,212,246,99,12,71,12,71,12,71,118,223,82,118,245,100,112,49,30,118,
|
||||
223,237,238,111,113,223,19,20,49,93,144,184,44,113,8,253,19,210,173,141,
|
||||
168,57,196,142,60,52,122,182,113,113,122,3,60,159,130,86,43,122,26,223,
|
||||
47,106,95,76,89,68,244,20,251,20,8,210,238,72,223,19,30,112,23,62,
|
||||
244,223,20,118,112,112,244,118,11,99,99,218,71,218,71,12,12,71,58,58,
|
||||
78,246,246,92,63,53,53,101,83,0,83,83,53,63,63,53,20,83,0,0,
|
||||
53,53,79,0,226,78,58,78,12,108,92,19,92,71,58,58,99,71,71,123,
|
||||
71,218,218,71,218,218,99,218,99,8,99,99,218,218,99,99,99,99,58,99,
|
||||
99,58,99,11,71,99,99,58,58,58,58,71,92,92,19,78,78,58,78,218,
|
||||
53,63,101,123,123,48,48,123,92,19,92,92,241,241,241,241,92,92,92,12,
|
||||
241,212,78,78,123,118,12,12,12,12,112,92,49,223,30,247,65,49,23,112,
|
||||
82,23,72,231,14,26,82,19,101,49,17,146,102,154,147,69,8,82,49,23,
|
||||
249,104,158,39,206,169,86,130,202,142,202,114,39,117,76,88,4,66,66,113,
|
||||
7,95,234,175,68,22,101,20,251,8,4,107,100,112,101,112,30,23,112,62,
|
||||
49,101,49,244,118,112,112,118,11,78,99,99,99,58,71,12,92,99,246,78,
|
||||
246,58,218,108,108,53,63,229,0,83,34,13,53,53,101,38,13,0,0,13,
|
||||
53,101,63,101,99,78,58,78,71,19,19,92,71,58,99,58,11,218,218,71,
|
||||
99,99,99,99,218,58,99,218,218,8,71,218,99,99,218,58,99,99,99,99,
|
||||
99,58,99,58,99,218,11,58,58,99,58,58,71,92,92,58,78,78,78,78,
|
||||
118,19,53,123,48,128,128,48,123,12,92,92,48,128,212,48,241,12,12,92,
|
||||
241,128,246,246,246,71,12,12,12,71,71,118,49,223,49,208,116,22,49,23,
|
||||
11,223,223,72,225,235,113,82,82,101,49,65,68,164,201,7,162,26,8,121,
|
||||
66,223,23,216,14,36,177,152,154,152,80,255,98,66,66,223,66,4,32,152,
|
||||
152,163,228,222,112,251,20,20,8,113,219,222,22,82,23,22,62,112,54,244,
|
||||
101,82,112,112,23,118,112,11,11,78,58,58,246,99,71,71,99,58,246,212,
|
||||
58,58,123,108,108,53,20,13,101,19,34,13,53,53,53,0,75,38,0,34,
|
||||
63,53,53,71,58,78,58,78,11,92,92,71,58,58,58,58,99,218,11,99,
|
||||
11,58,218,218,99,99,218,99,99,8,99,71,99,99,99,99,99,218,58,99,
|
||||
218,58,99,99,99,58,58,78,58,99,58,58,58,71,12,78,78,78,78,78,
|
||||
58,12,19,12,48,218,246,218,48,12,92,92,241,48,58,212,48,241,12,92,
|
||||
48,241,212,58,212,212,123,118,12,71,118,118,12,223,49,118,55,239,244,223,
|
||||
112,112,82,118,236,225,14,4,26,82,101,19,112,93,153,21,224,174,88,162,
|
||||
26,26,121,82,66,66,66,66,66,66,26,82,66,26,113,127,32,44,51,87,
|
||||
248,222,236,223,20,20,20,8,70,111,17,237,223,49,237,30,62,54,30,118,
|
||||
253,49,112,118,23,118,118,11,99,58,58,58,212,99,71,218,246,78,78,58,
|
||||
58,58,108,108,63,38,13,92,58,12,13,251,53,63,251,79,12,71,34,34,
|
||||
251,53,19,58,78,78,78,58,58,71,71,58,99,99,58,99,58,11,58,99,
|
||||
99,99,99,218,218,99,218,218,99,8,71,99,218,218,218,99,218,99,99,99,
|
||||
99,71,58,99,99,99,99,58,58,99,58,58,78,58,99,78,58,78,58,78,
|
||||
78,78,99,218,128,58,58,78,128,48,12,92,123,241,78,246,58,48,241,218,
|
||||
12,128,212,212,58,58,212,218,71,12,71,12,118,12,223,49,11,243,55,244,
|
||||
49,112,244,223,49,236,17,111,4,121,82,82,8,223,244,29,153,61,148,234,
|
||||
152,32,147,52,4,4,113,26,113,26,98,98,147,255,7,193,24,163,217,238,
|
||||
110,112,101,20,20,253,8,70,107,222,22,223,223,244,244,244,244,242,112,82,
|
||||
223,118,23,23,49,118,71,11,58,58,58,246,246,58,99,78,58,212,212,78,
|
||||
58,99,53,53,38,83,19,58,246,19,34,79,251,34,34,71,58,71,79,13,
|
||||
83,63,218,58,58,99,58,78,58,99,78,58,99,99,99,58,58,99,99,58,
|
||||
218,11,218,99,11,218,11,99,71,8,71,218,218,11,71,99,218,99,99,99,
|
||||
99,218,11,99,58,58,58,58,11,58,99,218,58,58,78,78,78,78,58,58,
|
||||
78,78,78,78,58,78,78,78,58,58,48,123,48,48,128,78,246,78,128,241,
|
||||
241,241,128,212,58,58,58,58,218,12,118,71,71,112,118,223,49,11,245,55,
|
||||
30,49,112,244,223,19,30,93,107,111,4,26,101,101,8,101,112,242,93,203,
|
||||
6,170,21,74,51,51,104,24,234,76,24,104,76,124,232,56,225,18,30,223,
|
||||
20,20,20,20,8,66,235,231,236,112,223,118,30,112,112,54,244,112,82,49,
|
||||
112,23,118,118,12,11,99,99,246,58,58,58,78,58,246,246,78,78,212,78,
|
||||
58,12,53,229,34,40,78,78,58,38,0,13,13,79,71,58,58,71,13,0,
|
||||
38,71,58,99,58,99,58,99,78,58,58,99,99,99,71,99,58,99,218,99,
|
||||
71,99,218,99,99,71,218,99,71,8,71,71,71,123,218,218,11,218,218,218,
|
||||
218,99,218,218,99,99,99,99,58,99,99,99,99,99,58,78,78,58,58,99,
|
||||
99,78,78,246,78,212,78,78,58,78,128,48,48,241,48,246,78,58,246,128,
|
||||
128,128,128,128,212,78,212,78,58,218,71,71,12,12,118,118,49,49,112,208,
|
||||
41,22,49,112,244,23,19,49,22,93,219,14,4,8,82,101,20,101,223,49,
|
||||
30,65,18,29,17,203,228,230,56,96,91,225,225,236,242,112,49,82,20,20,
|
||||
20,20,82,113,210,107,29,22,118,223,112,30,244,244,62,112,23,82,223,49,
|
||||
118,118,49,49,118,71,99,246,58,58,212,246,246,78,212,58,246,246,78,58,
|
||||
218,53,209,126,40,78,78,78,218,0,34,34,79,71,78,99,58,71,251,229,
|
||||
12,58,99,99,99,58,58,58,58,99,99,99,99,218,99,58,99,99,99,218,
|
||||
99,218,11,218,218,11,218,71,71,8,71,123,71,71,218,123,71,99,11,99,
|
||||
218,11,99,71,218,99,58,99,99,58,218,218,99,99,58,58,58,58,99,58,
|
||||
58,99,58,246,246,246,78,58,58,58,78,58,48,48,241,78,246,78,78,58,
|
||||
58,241,241,241,212,58,246,78,246,58,218,71,71,71,118,118,118,49,49,112,
|
||||
103,243,236,112,49,244,112,49,223,118,65,93,107,14,98,113,82,8,101,253,
|
||||
101,20,101,82,82,223,118,118,49,49,49,82,82,101,101,20,20,253,253,121,
|
||||
26,70,235,110,29,103,118,223,223,11,244,244,54,242,244,49,19,223,49,118,
|
||||
118,49,12,71,11,99,212,246,78,78,78,78,212,246,78,58,78,212,78,58,
|
||||
12,38,213,71,78,58,58,78,40,83,79,20,99,58,99,58,99,12,92,71,
|
||||
78,58,99,99,99,99,99,99,99,99,218,218,99,218,218,99,218,218,11,218,
|
||||
11,218,218,71,218,218,71,123,71,8,71,71,12,71,71,218,218,218,71,71,
|
||||
218,218,218,218,71,218,218,99,99,218,99,99,99,99,99,99,58,99,58,99,
|
||||
99,99,99,58,78,78,78,78,58,99,58,58,58,128,48,128,78,78,58,78,
|
||||
212,212,212,241,128,58,246,246,58,246,58,218,218,118,71,71,118,12,118,49,
|
||||
23,237,245,55,208,23,118,23,112,223,223,118,244,236,18,110,14,210,4,66,
|
||||
121,8,82,20,82,101,101,251,20,20,20,101,8,20,8,8,26,26,210,235,
|
||||
109,110,65,30,118,223,49,244,244,244,244,242,65,30,223,82,49,118,118,49,
|
||||
92,49,118,71,11,78,246,78,58,246,212,246,78,78,246,78,246,78,212,218,
|
||||
53,92,99,78,58,58,58,246,53,0,53,99,99,58,99,58,99,71,218,58,
|
||||
99,58,99,218,58,99,58,78,99,99,11,99,71,99,99,218,99,99,218,71,
|
||||
123,218,71,218,12,71,71,71,71,8,71,71,71,71,71,118,71,71,218,99,
|
||||
71,71,71,123,71,71,218,99,99,218,218,71,11,218,99,99,58,99,58,99,
|
||||
99,99,218,58,58,78,78,78,58,99,99,58,58,58,58,128,246,78,58,58,
|
||||
58,58,246,128,128,58,212,246,78,78,78,58,58,218,71,71,11,118,118,49,
|
||||
12,23,11,103,243,72,237,23,23,112,23,223,19,223,112,22,109,18,29,111,
|
||||
111,210,210,70,4,26,26,26,26,26,26,4,4,70,98,235,2,18,29,65,
|
||||
54,23,223,49,23,244,244,112,244,54,22,244,118,82,223,223,118,92,49,49,
|
||||
223,71,11,99,99,78,246,58,246,78,58,212,78,78,58,58,246,78,58,218,
|
||||
71,78,58,58,99,58,58,99,19,77,58,58,58,218,99,58,58,58,58,58,
|
||||
218,99,11,218,58,99,218,58,218,218,71,218,218,71,99,71,218,71,71,218,
|
||||
71,123,71,71,71,71,71,71,12,8,118,118,71,71,118,71,71,71,118,12,
|
||||
71,123,71,71,71,71,71,71,218,99,99,99,218,218,71,218,99,99,58,99,
|
||||
99,218,99,218,58,58,246,78,78,99,99,99,99,58,246,78,58,246,58,58,
|
||||
58,58,58,78,78,58,58,58,246,212,99,58,58,58,218,99,71,118,11,118,
|
||||
49,49,49,23,11,208,55,245,22,112,23,23,23,23,49,49,49,223,112,30,
|
||||
22,236,18,18,18,29,18,18,18,18,107,236,29,236,236,22,30,23,223,223,
|
||||
223,118,118,112,244,112,244,242,242,30,23,223,82,223,49,49,49,223,49,12,
|
||||
71,71,99,58,246,212,58,58,58,78,78,78,58,58,58,58,78,212,246,78,
|
||||
78,58,58,11,99,58,78,78,99,58,58,99,218,99,58,99,58,58,58,218,
|
||||
99,71,218,99,218,58,99,218,218,71,218,123,71,99,71,218,71,71,71,12,
|
||||
71,71,12,12,12,12,12,12,12,8,12,12,12,12,12,12,118,118,71,71,
|
||||
71,218,71,123,71,71,71,71,123,71,218,11,218,71,218,123,218,99,218,58,
|
||||
99,99,11,218,71,99,99,58,78,58,99,99,71,99,58,78,246,246,246,58,
|
||||
58,218,58,99,78,78,246,78,78,246,58,58,58,212,58,58,99,71,71,118,
|
||||
71,118,118,23,49,112,112,103,72,72,65,244,112,23,118,118,70,223,223,223,
|
||||
223,49,118,23,118,112,112,244,112,112,23,23,23,49,49,223,223,49,23,118,
|
||||
244,244,112,62,244,109,22,30,49,223,223,82,49,223,49,223,223,118,118,71,
|
||||
99,99,99,78,78,246,58,58,78,78,58,58,58,99,78,246,78,78,78,78,
|
||||
99,99,99,58,99,58,78,78,58,99,99,11,218,99,99,58,58,11,99,218,
|
||||
218,218,71,99,218,218,11,218,123,71,218,71,71,218,71,71,123,71,118,12,
|
||||
71,12,12,12,12,12,12,12,12,8,12,12,12,12,12,12,71,71,71,118,
|
||||
71,118,71,71,118,12,71,71,71,71,99,218,123,71,218,71,218,71,99,99,
|
||||
99,218,218,71,218,218,99,58,58,58,58,218,99,218,218,99,58,99,78,58,
|
||||
58,99,99,99,58,58,78,246,246,78,78,78,58,99,58,58,99,58,99,71,
|
||||
11,71,12,23,118,118,118,23,112,30,103,208,208,65,242,112,118,23,23,118,
|
||||
118,118,49,112,23,112,11,112,112,112,118,49,49,49,49,112,23,23,112,244,
|
||||
244,22,22,22,242,112,49,223,223,66,223,49,223,49,223,49,12,71,71,99,
|
||||
99,58,212,212,246,58,78,78,58,58,99,99,99,58,78,78,78,78,58,58,
|
||||
99,99,99,58,58,58,58,58,99,218,71,218,99,99,218,58,99,99,71,218,
|
||||
71,71,218,99,71,99,123,71,118,118,123,71,71,123,71,71,12,12,118,12,
|
||||
12,12,12,12,12,12,71,12,71,8,12,92,12,92,71,12,118,118,12,12,
|
||||
118,71,71,12,71,71,118,12,12,71,118,218,71,71,71,12,71,12,218,218,
|
||||
99,99,218,218,71,71,71,218,99,99,99,99,71,71,218,71,99,58,58,58,
|
||||
58,58,99,11,99,99,99,58,246,78,246,78,58,99,99,99,58,58,99,99,
|
||||
99,11,71,112,112,118,118,92,118,23,118,112,30,237,103,65,65,22,30,54,
|
||||
244,244,23,112,244,112,244,112,244,23,244,23,112,62,244,244,30,242,22,242,
|
||||
22,30,23,49,49,19,82,223,223,49,49,49,223,49,12,11,11,218,99,58,
|
||||
58,78,78,78,246,78,78,99,99,58,99,58,58,78,78,78,58,99,218,218,
|
||||
71,99,99,99,58,99,58,99,71,123,71,218,99,99,218,99,218,71,12,71,
|
||||
71,218,71,71,218,71,71,71,71,71,12,71,71,71,118,12,12,12,71,71,
|
||||
12,12,12,12,118,12,12,92,12,8,12,12,71,12,12,12,12,12,71,12,
|
||||
118,12,12,12,118,12,71,12,12,71,71,71,71,123,71,12,12,71,71,218,
|
||||
218,218,11,71,123,71,71,218,71,99,99,58,99,99,71,218,218,99,218,58,
|
||||
58,58,58,99,218,71,99,218,58,58,58,246,212,58,58,99,99,58,99,58,
|
||||
58,58,58,218,71,71,112,71,118,118,49,23,118,118,49,112,112,30,237,22,
|
||||
22,22,103,22,22,22,22,22,30,242,22,22,22,103,22,22,30,112,112,23,
|
||||
49,49,49,82,223,66,49,49,49,49,223,12,118,71,218,99,99,58,99,58,
|
||||
78,246,78,246,58,58,99,99,218,218,99,99,99,58,58,58,99,218,71,218,
|
||||
99,99,58,58,58,99,218,123,71,71,218,218,99,99,99,123,71,71,71,92,
|
||||
71,71,218,218,71,12,12,12,118,71,12,118,71,71,71,12,12,12,12,12,
|
||||
12,12,118,118,12,12,12,12,12,8,92,92,92,12,12,12,12,12,12,12,
|
||||
92,12,12,12,71,12,118,12,12,12,12,12,71,71,71,12,12,71,118,71,
|
||||
71,123,71,71,71,118,71,71,71,123,71,218,218,99,218,71,12,71,71,218,
|
||||
218,58,58,99,58,71,71,218,218,218,99,58,58,58,58,58,99,99,99,218,
|
||||
218,99,58,58,99,99,99,11,11,11,23,112,118,112,49,118,118,118,23,118,
|
||||
49,118,23,112,112,112,112,244,112,112,118,112,118,49,49,223,49,223,223,49,
|
||||
223,223,49,49,223,49,223,223,118,118,71,11,218,99,218,99,218,78,58,58,
|
||||
58,58,58,218,218,218,218,218,58,99,58,58,58,58,218,99,71,71,123,71,
|
||||
218,99,58,99,99,71,71,12,12,71,71,71,218,218,218,71,118,71,71,12,
|
||||
123,71,12,71,71,12,12,12,118,71,12,12,12,118,118,12,71,118,12,118,
|
||||
12,12,12,12,12,92,12,12,92,8,92,92,12,12,92,12,92,12,12,12,
|
||||
12,12,118,12,12,12,12,12,12,12,118,12,12,71,118,71,12,12,71,118,
|
||||
71,71,71,123,218,118,12,71,71,71,71,99,99,218,218,71,71,71,71,71,
|
||||
99,218,99,58,99,218,218,71,71,71,218,71,58,99,58,58,99,58,218,99,
|
||||
99,218,99,99,58,58,58,99,58,99,218,11,71,112,11,112,118,23,118,23,
|
||||
49,118,118,92,49,92,49,92,49,92,49,223,223,49,223,49,49,49,49,82,
|
||||
49,49,49,223,118,118,71,71,11,71,99,218,218,99,58,58,58,58,58,58,
|
||||
58,218,218,218,71,218,218,99,99,99,99,58,218,218,71,123,71,71,218,11,
|
||||
99,99,218,218,71,71,12,71,12,218,218,218,71,218,118,12,71,118,71,71,
|
||||
71,71,71,71,118,71,12,12,12,71,12,12,12,12,12,12,12,49,12,12,
|
||||
12,92,12,49,12,92,12,12,92,8,92,92,92,92,92,12,92,12,12,92,
|
||||
12,92,12,92,12,71,71,12,12,12,12,71,12,118,71,118,71,118,12,12,
|
||||
12,12,71,71,218,71,71,118,118,12,12,118,71,218,71,218,123,12,12,12,
|
||||
12,71,71,99,99,99,218,71,71,71,71,123,71,218,218,58,99,99,58,218,
|
||||
99,218,218,11,99,218,99,218,218,58,58,58,99,218,71,11,71,71,118,11,
|
||||
112,71,112,118,112,12,118,118,118,118,118,118,118,118,118,118,223,223,49,49,
|
||||
118,118,118,71,71,71,218,71,218,71,99,99,99,218,58,58,58,218,218,218,
|
||||
218,71,71,218,123,71,218,99,58,218,218,99,71,118,12,71,71,71,218,218,
|
||||
218,99,71,118,12,12,12,71,71,123,71,71,71,12,118,12,92,71,118,71,
|
||||
12,12,71,12,12,92,12,12,12,118,12,12,12,12,12,92,12,12,12,92,
|
||||
71,92,12,92,92,92,92,92,12,8,92,92,92,92,92,92,92,92,92,12,
|
||||
92,12,92,12,92,92,12,118,92,12,12,92,92,12,12,12,12,12,12,12,
|
||||
12,12,71,118,12,118,71,71,12,12,12,12,118,71,218,71,218,71,118,12,
|
||||
12,71,12,71,218,71,99,218,123,71,71,12,71,118,71,71,99,218,218,99,
|
||||
218,99,218,218,218,71,123,71,218,218,218,218,99,99,99,58,99,99,99,218,
|
||||
99,71,71,71,11,71,11,11,11,11,11,11,11,11,71,118,12,118,218,218,
|
||||
71,218,71,71,218,71,99,71,99,99,99,58,218,99,218,218,71,71,71,71,
|
||||
71,71,123,71,11,99,99,99,218,218,71,71,12,12,12,71,123,218,71,218,
|
||||
71,118,71,12,118,12,12,71,71,218,118,12,12,12,92,12,71,118,71,71,
|
||||
12,71,92,12,92,12,12,12,118,12,12,92,92,12,92,12,92,92,92,92,
|
||||
92,92,92,92,12,92,92,92,92,8,92,92,92,12,92,92,92,92,92,92,
|
||||
92,92,92,12,92,92,12,12,92,92,92,12,92,92,12,12,118,12,12,92,
|
||||
92,12,12,12,71,71,71,118,12,118,12,12,12,71,12,71,71,71,71,12,
|
||||
12,12,118,12,12,118,218,71,71,71,12,71,71,71,12,12,71,71,71,11,
|
||||
218,99,218,218,218,218,71,71,71,71,71,71,71,71,218,218,218,218,99,218,
|
||||
218,218,99,218,99,218,218,218,218,218,218,218,218,99,218,11,218,71,71,71,
|
||||
71,123,71,123,71,218,99,218,218,11,218,99,71,71,71,71,71,71,71,92,
|
||||
71,71,71,123,71,218,71,71,71,118,12,12,12,12,71,71,71,218,71,71,
|
||||
12,12,12,12,12,12,12,71,71,71,12,12,12,12,12,12,12,12,118,12,
|
||||
12,92,92,92,12,92,12,71,12,92,92,12,92,92,92,92,92,12,92,92,
|
||||
92,92,92,92,92,92,92,92,92,8,92,19,92,92,92,92,92,223,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,12,118,12,12,
|
||||
12,92,92,12,92,12,12,12,71,12,49,12,92,92,12,12,71,12,12,12,
|
||||
12,71,12,12,12,12,71,12,71,71,218,218,71,118,12,12,12,71,12,12,
|
||||
71,123,71,71,99,71,71,123,71,123,71,123,71,71,71,71,71,71,71,71,
|
||||
71,218,218,218,71,71,218,71,218,71,218,71,71,123,71,123,71,123,71,123,
|
||||
218,71,218,218,218,218,71,71,71,71,71,12,12,12,12,12,12,12,71,71,
|
||||
71,123,218,218,71,71,12,12,12,71,12,12,12,12,71,71,71,12,118,12,
|
||||
12,92,12,12,12,12,12,12,71,12,92,12,92,12,12,118,12,12,12,92,
|
||||
92,92,92,92,92,12,92,92,12,92,92,92,92,19,12,92,92,92,92,92,
|
||||
12,92,92,92,92,92,92,92,92,8,19,108,19,108,12,19,92,92,92,92,
|
||||
92,92,92,92,92,19,92,92,92,92,92,92,92,92,92,92,92,92,12,92,
|
||||
92,92,92,92,92,92,12,12,12,12,71,12,92,92,92,92,12,92,118,12,
|
||||
12,12,12,12,92,12,12,12,71,12,71,71,71,12,12,12,12,12,12,92,
|
||||
112,118,71,12,71,71,71,218,71,71,71,71,71,71,12,12,12,12,12,12,
|
||||
12,118,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,
|
||||
71,71,71,71,71,71,71,71,118,71,12,71,12,12,12,12,12,71,71,123,
|
||||
71,71,71,92,12,12,12,12,92,92,71,12,12,12,12,71,12,12,92,12,
|
||||
92,92,12,118,12,12,118,12,12,92,92,92,92,12,12,12,12,92,92,92,
|
||||
92,12,92,12,92,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,92,12,19,19,108,92,8,92,92,19,92,108,92,19,92,92,92,
|
||||
92,108,92,92,92,12,92,92,12,92,92,92,92,92,92,92,92,92,92,12,
|
||||
12,92,92,92,92,223,12,92,12,12,12,12,12,92,92,12,92,12,12,12,
|
||||
12,12,12,12,49,12,92,92,92,92,12,12,71,12,12,12,12,12,12,12,
|
||||
92,92,118,92,12,12,118,12,12,12,12,12,12,71,12,12,12,12,12,12,
|
||||
12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
|
||||
12,12,118,118,12,118,12,12,12,12,12,12,12,12,12,12,12,12,71,12,
|
||||
12,12,71,92,12,92,92,49,12,12,12,12,118,12,12,118,92,12,92,92,
|
||||
12,12,12,12,123,12,92,92,92,92,92,92,12,92,12,92,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,12,92,92,92,19,92,92,108,
|
||||
92,19,92,108,108,92,108,92,108,8,19,108,19,92,19,108,108,108,92,19,
|
||||
92,92,19,92,108,108,92,108,108,92,92,92,92,92,92,19,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,92,92,92,92,
|
||||
92,12,12,12,12,12,12,92,92,92,92,92,92,12,12,12,12,12,118,12,
|
||||
12,12,12,92,12,12,12,12,71,12,12,12,12,71,71,12,12,71,118,118,
|
||||
12,12,12,12,12,118,12,12,12,92,12,12,12,12,12,71,12,12,118,12,
|
||||
12,71,12,12,12,12,12,92,118,118,12,12,12,12,71,12,12,12,49,12,
|
||||
92,12,92,92,92,12,92,12,12,12,12,12,92,92,92,92,92,92,92,92,
|
||||
12,12,71,92,92,92,12,92,223,92,92,92,12,92,92,92,92,92,12,19,
|
||||
92,92,92,92,92,92,108,92,108,19,92,108,108,108,92,92,19,108,92,108,
|
||||
19,92,19,92,108,92,108,19,19,8,19,108,19,108,108,19,92,19,108,19,
|
||||
19,108,108,19,19,92,108,92,92,108,19,12,108,108,92,19,108,108,92,19,
|
||||
92,92,92,92,92,92,108,19,92,92,92,92,12,92,92,92,92,92,92,92,
|
||||
92,92,92,12,12,118,123,92,12,12,92,92,92,92,92,92,12,12,12,12,
|
||||
12,92,12,12,92,12,92,92,92,92,92,92,12,12,12,12,12,12,12,71,
|
||||
71,12,12,12,12,12,12,12,71,12,12,12,12,12,12,92,12,12,92,12,
|
||||
92,12,12,49,12,92,12,12,12,12,12,71,12,12,12,12,92,12,92,12,
|
||||
92,92,92,92,92,12,12,12,12,92,12,12,92,92,92,92,92,92,12,12,
|
||||
12,92,92,92,92,19,108,92,92,92,92,92,92,92,92,19,92,108,108,92,
|
||||
92,92,92,19,108,92,19,108,92,108,108,92,19,92,108,19,108,92,108,92,
|
||||
19,108,108,92,108,108,19,92,108,8,19,19,19,19,19,108,19,19,108,92,
|
||||
19,19,108,92,19,19,108,19,108,92,108,19,92,19,92,92,92,19,92,92,
|
||||
92,92,92,92,92,92,19,108,92,19,19,92,92,92,92,92,92,92,223,92,
|
||||
223,92,92,92,92,92,92,92,92,92,92,92,92,223,92,92,92,12,92,12,
|
||||
12,12,12,12,92,12,12,92,12,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,12,92,49,92,12,92,92,12,12,92,12,92,12,92,12,12,92,12,
|
||||
12,12,12,12,12,12,12,92,92,92,12,92,92,92,92,92,92,92,92,92,
|
||||
92,92,12,12,12,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,12,19,92,92,108,12,92,92,92,12,19,92,92,108,92,19,19,92,
|
||||
92,92,92,92,108,19,92,19,19,92,92,108,108,92,108,92,19,19,19,108,
|
||||
19,19,19,19,19,19,108,19,19,8,19,53,19,53,19,53,19,53,19,108,
|
||||
19,108,19,108,108,108,19,108,19,108,19,108,108,108,108,19,108,19,108,19,
|
||||
19,92,108,19,19,12,108,92,108,92,108,19,108,92,92,92,92,92,92,19,
|
||||
92,19,108,92,19,92,92,92,92,92,92,92,92,92,92,92,108,108,19,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,92,12,92,92,92,12,92,19,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,108,19,92,92,223,92,92,92,92,92,92,
|
||||
19,108,108,108,108,19,92,92,92,92,108,108,108,108,108,92,108,92,108,19,
|
||||
92,19,108,108,19,108,108,108,108,108,19,19,19,19,19,19,108,108,53,19,
|
||||
108,19,108,53,19,53,19,53,19,8,19,19,19,19,19,19,19,19,19,19,
|
||||
19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,108,19,108,19,
|
||||
19,19,19,19,108,19,108,19,108,19,108,19,19,19,19,108,19,92,92,92,
|
||||
19,19,108,19,108,19,19,92,92,92,92,92,92,92,92,19,19,108,19,108,
|
||||
19,92,19,92,92,92,92,92,92,92,92,92,92,92,92,19,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,19,19,19,92,19,19,92,19,19,108,92,92,92,19,92,92,92,
|
||||
92,92,92,92,92,19,19,19,19,108,19,108,92,92,92,92,92,92,19,19,
|
||||
92,19,223,19,108,19,108,92,19,19,19,19,19,19,108,19,108,19,108,19,
|
||||
19,19,19,19,19,19,19,19,19,108,19,108,19,108,19,19,19,19,19,19,
|
||||
19,19,19,19,19,19,19,19,19,8};
|
|
@ -1,6 +0,0 @@
|
|||
Makefile.in
|
||||
Makefile
|
||||
.deps
|
||||
_libs
|
||||
.libs
|
||||
Curtain
|
|
@ -1,507 +0,0 @@
|
|||
/**********************************************************************
|
||||
* Curtain Plug-In (Version 1.03)
|
||||
* Daniel Cotting (cotting@mygale.org)
|
||||
**********************************************************************
|
||||
* Official homepages: http://www.mygale.org/~cotting
|
||||
* http://cotting.citeweb.net
|
||||
* http://village.cyberbrain.com/cotting
|
||||
**********************************************************************
|
||||
*/
|
||||
|
||||
/* The GIMP -- an image manipulation program
|
||||
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "libgimp/gimp.h"
|
||||
#include "gtk/gtk.h"
|
||||
#include "logo.h"
|
||||
|
||||
#define ENTRY_WIDTH 100
|
||||
|
||||
typedef struct {
|
||||
gint horiz;
|
||||
gint vert;
|
||||
} CurtainValues;
|
||||
|
||||
typedef struct {
|
||||
gint run;
|
||||
} CurtainInterface;
|
||||
|
||||
|
||||
|
||||
/* Declare local functions.
|
||||
*/
|
||||
static void query(void);
|
||||
static void run(char *name, int nparams,
|
||||
GParam *param,
|
||||
int *nreturn_vals,
|
||||
GParam **return_vals);
|
||||
static void drawCurtain(GDrawable *drawable);
|
||||
static gint curtain_dialog(void);
|
||||
|
||||
GtkWidget * curtain_logo_dialog(void);
|
||||
|
||||
GtkWidget *maindlg;
|
||||
GtkWidget *logodlg;
|
||||
GtkTooltips *tips;
|
||||
GdkColor tips_fg,tips_bg;
|
||||
|
||||
|
||||
|
||||
GPlugInInfo PLUG_IN_INFO =
|
||||
{
|
||||
NULL, /* init_proc */
|
||||
NULL, /* quit_proc */
|
||||
query, /* query_proc */
|
||||
run, /* run_proc */
|
||||
};
|
||||
|
||||
static CurtainValues wvals = {
|
||||
TRUE, FALSE
|
||||
}; /* wvals */
|
||||
|
||||
static CurtainInterface bint =
|
||||
{
|
||||
FALSE /* run */
|
||||
};
|
||||
|
||||
|
||||
MAIN()
|
||||
|
||||
static void
|
||||
query(void)
|
||||
{
|
||||
static GParamDef args[] =
|
||||
{
|
||||
{ PARAM_INT32, "run_mode", "Interactive, non-interactive" },
|
||||
{ PARAM_IMAGE, "image", "Input image (unused)" },
|
||||
{ PARAM_DRAWABLE, "drawable", "Input drawable" },
|
||||
{ PARAM_INT32, "horizontal", "horizontal curtain flag (TRUE/FALSE)" },
|
||||
{ PARAM_INT32, "vertical", "vertical curtain flag (TRUE/FALSE)" },
|
||||
};
|
||||
|
||||
static GParamDef *return_vals = NULL;
|
||||
static int nargs = sizeof(args)/ sizeof(args[0]);
|
||||
static int nreturn_vals = 0;
|
||||
|
||||
gimp_install_procedure("plug_in_curtain",
|
||||
"Apply a curtain effect",
|
||||
"",
|
||||
"Daniel Cotting (cotting@mygale.org, http://www.mygale.org/~cotting)",
|
||||
"Daniel Cotting (cotting@mygale.org, http://www.mygale.org/~cotting)",
|
||||
"October, 1997",
|
||||
"<Image>/Filters/Distorts/Curtain",
|
||||
"RGB*, GRAY*, INDEXED*",
|
||||
PROC_PLUG_IN,
|
||||
nargs, nreturn_vals,
|
||||
args, return_vals);
|
||||
}
|
||||
|
||||
static void
|
||||
run(char *name,
|
||||
int nparams,
|
||||
GParam *param,
|
||||
int *nreturn_vals,
|
||||
GParam **return_vals)
|
||||
{
|
||||
static GParam values[1];
|
||||
GDrawable *drawable;
|
||||
GRunModeType run_mode;
|
||||
GStatusType status = STATUS_SUCCESS;
|
||||
|
||||
run_mode = param[0].data.d_int32;
|
||||
|
||||
values[0].type = PARAM_STATUS;
|
||||
values[0].data.d_status = status;
|
||||
|
||||
*nreturn_vals = 1;
|
||||
*return_vals = values;
|
||||
|
||||
drawable = gimp_drawable_get(param[2].data.d_drawable);
|
||||
|
||||
switch(run_mode) {
|
||||
case RUN_INTERACTIVE:
|
||||
/* Possibly retrieve data */
|
||||
gimp_get_data("plug_in_curtain", &wvals);
|
||||
/* Get information from the dialog */
|
||||
if (!curtain_dialog())
|
||||
return;
|
||||
break;
|
||||
case RUN_NONINTERACTIVE:
|
||||
if (nparams != 5)
|
||||
status = STATUS_CALLING_ERROR;
|
||||
if (status == STATUS_SUCCESS) {
|
||||
wvals.horiz = param[3].data.d_int32;
|
||||
wvals.vert = param[4].data.d_int32; }
|
||||
break;
|
||||
case RUN_WITH_LAST_VALS:
|
||||
/* Possibly retrieve data */
|
||||
gimp_get_data("plug_in_curtain", &wvals);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
gimp_tile_cache_ntiles(2 *(drawable->width / gimp_tile_width() + 1));
|
||||
gimp_progress_init("Applying curtain. Please wait...");
|
||||
drawCurtain(drawable);
|
||||
|
||||
if(run_mode != RUN_NONINTERACTIVE)
|
||||
gimp_displays_flush();
|
||||
if(run_mode == RUN_INTERACTIVE)
|
||||
gimp_set_data("plug_in_curtain", &wvals, sizeof(CurtainValues));
|
||||
|
||||
values[0].data.d_status = status;
|
||||
|
||||
gimp_drawable_detach(drawable);
|
||||
}
|
||||
|
||||
static void
|
||||
set_tooltip (GtkTooltips *tooltips, GtkWidget *widget, const char *desc)
|
||||
{
|
||||
if (desc && desc[0])
|
||||
gtk_tooltips_set_tips (tooltips, widget, (char *) desc);
|
||||
}
|
||||
|
||||
static void
|
||||
drawCurtain(GDrawable *drawable)
|
||||
{
|
||||
GPixelRgn srcPR, destPR;
|
||||
gint width, height;
|
||||
gint bytes;
|
||||
gint row;
|
||||
gint x1, y1, x2, y2, ix, iy;
|
||||
guchar *src, *dest;
|
||||
gint i, col, position;
|
||||
gfloat regionwidth, regionheight, dx, dy;
|
||||
gfloat a, b, x, y;
|
||||
glong pixelpos, pos;
|
||||
guchar bgr_red, bgr_blue, bgr_green;
|
||||
|
||||
gimp_palette_get_background(&bgr_red, &bgr_green, &bgr_blue);
|
||||
|
||||
gimp_drawable_mask_bounds(drawable->id, &x1, &y1, &x2, &y2);
|
||||
regionwidth = x2-x1;
|
||||
a = regionwidth/2;
|
||||
regionheight = y2-y1;
|
||||
b = regionheight/2;
|
||||
|
||||
width = drawable->width;
|
||||
height = drawable->height;
|
||||
bytes = drawable->bpp;
|
||||
|
||||
gimp_pixel_rgn_init(&srcPR, drawable, 0, 0, width, height, FALSE, FALSE);
|
||||
gimp_pixel_rgn_init(&destPR, drawable, 0, 0, width, height, TRUE, TRUE);
|
||||
|
||||
src = g_malloc((x2-x1)*(y2-y1)*bytes);
|
||||
dest = g_malloc((x2-x1)*(y2-y1)*bytes);
|
||||
gimp_pixel_rgn_get_rect(&srcPR, src, x1, y1, regionwidth, regionheight);
|
||||
|
||||
for(col = 0; col < regionwidth; col++) {
|
||||
dx = (gfloat)col - a;
|
||||
for(row = 0; row < regionheight; row++) {
|
||||
pixelpos = (col+row*regionwidth)*bytes;
|
||||
dy = -((gfloat)row - b);
|
||||
x = dx+a;
|
||||
y = -dy+b;
|
||||
ix=(int)x;
|
||||
iy=(int)y;
|
||||
|
||||
/*
|
||||
Flags horiz and vert inversed by mistake!
|
||||
Corrected this with a small hack in the next lines.
|
||||
(one more inversion)
|
||||
*/
|
||||
|
||||
if ((((int)((float)ix/2.0))*2==ix) && (wvals.vert)) {
|
||||
pos = ((gint)(regionheight-1-iy)*regionwidth) * bytes;
|
||||
}else{
|
||||
pos = ((gint)(iy)*regionwidth) * bytes;
|
||||
}
|
||||
for(i = 0; i < bytes; i++) {
|
||||
if ((((int)((float)iy/2.0))*2==iy) && (wvals.horiz)) {
|
||||
position=pos+regionwidth*bytes-ix*bytes+i;}else{position=pos+ix*bytes+i;}
|
||||
dest[pixelpos+i] = src[position];
|
||||
}
|
||||
}
|
||||
if(((gint)(regionwidth-col) % 5) == 0)
|
||||
gimp_progress_update((gdouble)col/(gdouble)regionwidth);
|
||||
}
|
||||
|
||||
gimp_pixel_rgn_set_rect(&destPR, dest, x1, y1, regionwidth, regionheight);
|
||||
g_free(src);
|
||||
g_free(dest);
|
||||
|
||||
gimp_drawable_flush(drawable);
|
||||
gimp_drawable_merge_shadow(drawable->id, TRUE);
|
||||
gimp_drawable_update(drawable->id, x1, y1,(x2 - x1),(y2 - y1));
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
curtain_close_callback(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
gtk_main_quit();
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
curtain_ok_callback(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
bint.run = TRUE;
|
||||
gtk_widget_destroy(GTK_WIDGET (data));
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
toggle_update (GtkWidget *widget,
|
||||
gpointer data)
|
||||
{
|
||||
int *toggle_val;
|
||||
|
||||
toggle_val = (int *) data;
|
||||
|
||||
if (GTK_TOGGLE_BUTTON (widget)->active)
|
||||
*toggle_val = TRUE;
|
||||
else
|
||||
*toggle_val = FALSE;
|
||||
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
curtain_logo_ok_callback(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
gtk_widget_set_sensitive (maindlg, TRUE);
|
||||
gtk_widget_destroy(logodlg);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
curtain_about_callback(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
gtk_widget_set_sensitive (maindlg, FALSE);
|
||||
curtain_logo_dialog();
|
||||
}
|
||||
|
||||
|
||||
static gint
|
||||
curtain_dialog()
|
||||
{
|
||||
GtkWidget *dlg;
|
||||
GtkWidget *button;
|
||||
GtkWidget *toggle,*toggle2;
|
||||
GtkWidget *frame;
|
||||
GtkWidget *vbox;
|
||||
gchar **argv;
|
||||
gint argc;
|
||||
|
||||
argc = 1;
|
||||
argv = g_new(gchar *, 1);
|
||||
argv[0] = g_strdup("apply_curtain_filter");
|
||||
|
||||
gtk_init(&argc, &argv);
|
||||
gtk_rc_parse(gimp_gtkrc());
|
||||
bint.run=FALSE;
|
||||
dlg = maindlg = gtk_dialog_new();
|
||||
gtk_window_set_title(GTK_WINDOW(dlg), "Curtain");
|
||||
gtk_window_position(GTK_WINDOW(dlg), GTK_WIN_POS_MOUSE);
|
||||
gtk_signal_connect(GTK_OBJECT(dlg), "destroy",
|
||||
(GtkSignalFunc)curtain_close_callback,
|
||||
NULL);
|
||||
frame = gtk_frame_new("Parameter Settings");
|
||||
gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
|
||||
gtk_container_border_width(GTK_CONTAINER(frame), 10);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->vbox), frame, TRUE, TRUE, 0);
|
||||
vbox = gtk_vbox_new(FALSE, 5);
|
||||
gtk_container_border_width(GTK_CONTAINER(vbox), 10);
|
||||
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
||||
/* use black as foreground: */
|
||||
tips = gtk_tooltips_new ();
|
||||
tips_fg.red = 0;
|
||||
tips_fg.green = 0;
|
||||
tips_fg.blue = 0;
|
||||
/* postit yellow (khaki) as background: */
|
||||
gdk_color_alloc (gtk_widget_get_colormap (frame), &tips_fg);
|
||||
tips_bg.red = 61669;
|
||||
tips_bg.green = 59113;
|
||||
tips_bg.blue = 35979;
|
||||
gdk_color_alloc (gtk_widget_get_colormap (frame), &tips_bg);
|
||||
gtk_tooltips_set_colors (tips,&tips_bg,&tips_fg);
|
||||
|
||||
|
||||
toggle = gtk_check_button_new_with_label ("Apply horizontal curtain");
|
||||
gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0);
|
||||
gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
|
||||
(GtkSignalFunc) toggle_update,
|
||||
&wvals.horiz);
|
||||
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), wvals.horiz);
|
||||
gtk_widget_show (toggle);
|
||||
set_tooltip(tips,toggle,"If this option is enabled, a horizontal curtain effect will be applied.");
|
||||
|
||||
toggle2 = gtk_check_button_new_with_label ("Apply vertical curtain");
|
||||
gtk_box_pack_start(GTK_BOX(vbox), toggle2, FALSE, FALSE, 0);
|
||||
gtk_signal_connect (GTK_OBJECT (toggle2), "toggled",
|
||||
(GtkSignalFunc) toggle_update,
|
||||
&wvals.vert);
|
||||
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle2), wvals.vert);
|
||||
gtk_widget_show (toggle2);
|
||||
set_tooltip(tips,toggle2,"If this option is enabled, a vertical curtain effect will be applied.");
|
||||
|
||||
gtk_widget_show(vbox);
|
||||
gtk_widget_show(frame);
|
||||
|
||||
button = gtk_button_new_with_label("OK");
|
||||
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect(GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc)curtain_ok_callback,
|
||||
dlg);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area),
|
||||
button, TRUE, TRUE, 0);
|
||||
gtk_widget_grab_default(button);
|
||||
gtk_widget_show(button);
|
||||
set_tooltip(tips,button,"Click here to close this dialog box and apply the curtain effects.");
|
||||
|
||||
button = gtk_button_new_with_label("Cancel");
|
||||
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc)gtk_widget_destroy,
|
||||
GTK_OBJECT(dlg));
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area),
|
||||
button, TRUE, TRUE, 0);
|
||||
gtk_widget_show(button);
|
||||
set_tooltip(tips,button,"Click here to close this dialog box without altering the image.");
|
||||
|
||||
|
||||
button = gtk_button_new_with_label("About...");
|
||||
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect(GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc)curtain_about_callback,dlg);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area),
|
||||
button, TRUE, TRUE, 0);
|
||||
gtk_widget_show(button);
|
||||
set_tooltip(tips,button,"Click here for information about the author and the plug-in.");
|
||||
|
||||
|
||||
gtk_widget_show(dlg);
|
||||
|
||||
gtk_main();
|
||||
gtk_object_unref (GTK_OBJECT (tips));
|
||||
gdk_flush();
|
||||
|
||||
return bint.run;
|
||||
}
|
||||
|
||||
|
||||
|
||||
GtkWidget *
|
||||
curtain_logo_dialog()
|
||||
{
|
||||
GtkWidget *xdlg;
|
||||
GtkWidget *xlabel;
|
||||
GtkWidget *xbutton;
|
||||
GtkWidget *xlogo_box;
|
||||
GtkWidget *xpreview;
|
||||
GtkWidget *xframe,*xframe2;
|
||||
GtkWidget *xvbox;
|
||||
GtkWidget *xhbox;
|
||||
char *text;
|
||||
guchar *temp,*temp2;
|
||||
guchar *datapointer;
|
||||
gint y,x;
|
||||
xdlg = logodlg = gtk_dialog_new();
|
||||
gtk_window_set_title(GTK_WINDOW(xdlg), "About");
|
||||
gtk_window_position(GTK_WINDOW(xdlg), GTK_WIN_POS_MOUSE);
|
||||
gtk_signal_connect(GTK_OBJECT(xdlg), "destroy",
|
||||
(GtkSignalFunc)curtain_close_callback,
|
||||
NULL);
|
||||
|
||||
xbutton = gtk_button_new_with_label("OK");
|
||||
GTK_WIDGET_SET_FLAGS(xbutton, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect(GTK_OBJECT(xbutton), "clicked",
|
||||
(GtkSignalFunc)curtain_logo_ok_callback,
|
||||
xdlg);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(xdlg)->action_area),
|
||||
xbutton, TRUE, TRUE, 0);
|
||||
gtk_widget_grab_default(xbutton);
|
||||
gtk_widget_show(xbutton);
|
||||
set_tooltip(tips,xbutton,"Click here to close the information box.");
|
||||
|
||||
xframe = gtk_frame_new(NULL);
|
||||
gtk_frame_set_shadow_type(GTK_FRAME(xframe), GTK_SHADOW_ETCHED_IN);
|
||||
gtk_container_border_width(GTK_CONTAINER(xframe), 10);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(xdlg)->vbox), xframe, TRUE, TRUE, 0);
|
||||
xvbox = gtk_vbox_new(FALSE, 5);
|
||||
gtk_container_border_width(GTK_CONTAINER(xvbox), 10);
|
||||
gtk_container_add(GTK_CONTAINER(xframe), xvbox);
|
||||
|
||||
/* The logo frame & drawing area */
|
||||
xhbox = gtk_hbox_new (FALSE, 5);
|
||||
gtk_box_pack_start (GTK_BOX (xvbox), xhbox, FALSE, TRUE, 0);
|
||||
|
||||
xlogo_box = gtk_vbox_new (FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (xhbox), xlogo_box, FALSE, FALSE, 0);
|
||||
|
||||
xframe2 = gtk_frame_new (NULL);
|
||||
gtk_frame_set_shadow_type (GTK_FRAME (xframe2), GTK_SHADOW_IN);
|
||||
gtk_box_pack_start (GTK_BOX (xlogo_box), xframe2, FALSE, FALSE, 0);
|
||||
|
||||
xpreview = gtk_preview_new (GTK_PREVIEW_COLOR);
|
||||
gtk_preview_size (GTK_PREVIEW (xpreview), logo_width, logo_height);
|
||||
temp = g_malloc((logo_width+10)*3);
|
||||
datapointer=header_data+logo_height*logo_width-1;
|
||||
for (y = 0; y < logo_height; y++){
|
||||
temp2=temp;
|
||||
for (x = 0; x< logo_width; x++) {
|
||||
HEADER_PIXEL(datapointer,temp2); temp2+=3;}
|
||||
gtk_preview_draw_row (GTK_PREVIEW (xpreview),
|
||||
temp,
|
||||
0, y, logo_width);
|
||||
}
|
||||
g_free(temp);
|
||||
gtk_container_add (GTK_CONTAINER (xframe2), xpreview);
|
||||
gtk_widget_show (xpreview);
|
||||
gtk_widget_show (xframe2);
|
||||
gtk_widget_show (xlogo_box);
|
||||
gtk_widget_show (xhbox);
|
||||
|
||||
xhbox = gtk_hbox_new(FALSE, 5);
|
||||
gtk_box_pack_start(GTK_BOX(xvbox), xhbox, TRUE, TRUE, 0);
|
||||
text = "\nCotting Software Productions\n"
|
||||
"Bahnhofstrasse 31\n"
|
||||
"CH-3066 Stettlen (Switzerland)\n\n"
|
||||
"cotting@mygale.org\n"
|
||||
"http://www.mygale.org/~cotting\n\n"
|
||||
"Curtain Plug-In for the GIMP\n"
|
||||
"Version 1.03\n";
|
||||
xlabel = gtk_label_new(text);
|
||||
gtk_box_pack_start(GTK_BOX(xhbox), xlabel, TRUE, FALSE, 0);
|
||||
gtk_widget_show(xlabel);
|
||||
|
||||
gtk_widget_show(xhbox);
|
||||
|
||||
gtk_widget_show(xvbox);
|
||||
gtk_widget_show(xframe);
|
||||
gtk_widget_show(xdlg);
|
||||
|
||||
gtk_main();
|
||||
gdk_flush();
|
||||
return xdlg;
|
||||
}
|
|
@ -1,73 +0,0 @@
|
|||
-------------------------------------------
|
||||
GIMP-Plug-In
|
||||
-------------------------------------------
|
||||
Written by Daniel Cotting
|
||||
Bahnhofstrasse 31
|
||||
CH-3066 Stettlen (Switzerland)
|
||||
|
||||
cotting@mygale.org
|
||||
www.mygale.org/~cotting
|
||||
-------------------------------------------
|
||||
Some code is taken out of other plug-ins
|
||||
written by other authors.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
INSTALLATION
|
||||
-------------------------------------------
|
||||
To install it, you have to edit the
|
||||
Makefile (change install-path).
|
||||
Afterwards run make. This will compile
|
||||
and install the plug-in in the right
|
||||
directory. Once the new code is installed,
|
||||
you can run the GIMP and enjoy the new
|
||||
functions and effects it provides.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
REDUCE CODE SIZE
|
||||
-------------------------------------------
|
||||
With this new release 1.03 the size of
|
||||
the logo in the about box has been reduced
|
||||
in order to make smaller binaries.
|
||||
If you find that the plug-in is still
|
||||
too big, you can compress the executables
|
||||
with the gzexe program (if it is avaiable
|
||||
on your system). To do so, change to the
|
||||
plug-in directory of the GIMP...
|
||||
|
||||
cd /usr/local/lib/gimp/VERSION/plug-ins
|
||||
|
||||
...and execute the command...
|
||||
|
||||
gzexe PLUGIN_NAME
|
||||
|
||||
...and remember to remove the uncompres-
|
||||
sed binary, which has been renamed to
|
||||
PLUGIN_NAME~, by running the command:
|
||||
|
||||
rm PLUGIN_NAME~
|
||||
|
||||
This will result in a code size of about
|
||||
20 kB, which isn't too much IMHO.
|
||||
------------------------------------------
|
||||
|
||||
|
||||
------------------------------------------
|
||||
FEEDBACK
|
||||
------------------------------------------
|
||||
I'm interested in any feedback, comments,
|
||||
bug-reports, suggestions etc. If you
|
||||
have anything you would like to tell
|
||||
me, you can write to cotting@mygale.org.
|
||||
Also have a look at the GIMP-section of
|
||||
my homepage at www.mygale.org/~cotting.
|
||||
------------------------------------------
|
||||
|
||||
Thank you and happy GIMPing!
|
||||
Daniel Cotting
|
||||
|
||||
------------------------------------------
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
pluginlibdir = $(gimpplugindir)/plug-ins
|
||||
|
||||
pluginlib_PROGRAMS = Curtain
|
||||
|
||||
Curtain_SOURCES = \
|
||||
Curtain.c logo.h
|
||||
|
||||
INCLUDES = \
|
||||
$(X_CFLAGS) \
|
||||
-I$(top_srcdir) \
|
||||
-I$(includedir)
|
||||
|
||||
LDADD = \
|
||||
$(top_builddir)/libgimp/libgimpui.la \
|
||||
$(top_builddir)/libgimp/libgimp.la \
|
||||
$(X_LIBS) \
|
||||
-lc
|
||||
|
||||
DEPS = \
|
||||
$(top_builddir)/libgimp/libgimpui.la \
|
||||
$(top_builddir)/libgimp/libgimp.la
|
||||
|
||||
Curtain_DEPENDENCIES = $(DEPS)
|
||||
|
||||
.PHONY: files
|
||||
|
||||
files:
|
||||
@files=`ls $(DISTFILES) 2> /dev/null`; for p in $$files; do \
|
||||
echo $$p; \
|
||||
done
|
||||
@for subdir in $(SUBDIRS); do \
|
||||
files=`cd $$subdir; $(MAKE) files | grep -v "make\[[1-9]\]"`; \
|
||||
for file in $$files; do \
|
||||
echo $$subdir/$$file; \
|
||||
done; \
|
||||
done
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,73 +0,0 @@
|
|||
-------------------------------------------
|
||||
GIMP-Plug-In
|
||||
-------------------------------------------
|
||||
Written by Daniel Cotting
|
||||
Bahnhofstrasse 31
|
||||
CH-3066 Stettlen (Switzerland)
|
||||
|
||||
cotting@mygale.org
|
||||
www.mygale.org/~cotting
|
||||
-------------------------------------------
|
||||
Some code is taken out of other plug-ins
|
||||
written by other authors.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
INSTALLATION
|
||||
-------------------------------------------
|
||||
To install it, you have to edit the
|
||||
Makefile (change install-path).
|
||||
Afterwards run make. This will compile
|
||||
and install the plug-in in the right
|
||||
directory. Once the new code is installed,
|
||||
you can run the GIMP and enjoy the new
|
||||
functions and effects it provides.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
REDUCE CODE SIZE
|
||||
-------------------------------------------
|
||||
With this new release 1.03 the size of
|
||||
the logo in the about box has been reduced
|
||||
in order to make smaller binaries.
|
||||
If you find that the plug-in is still
|
||||
too big, you can compress the executables
|
||||
with the gzexe program (if it is avaiable
|
||||
on your system). To do so, change to the
|
||||
plug-in directory of the GIMP...
|
||||
|
||||
cd /usr/local/lib/gimp/VERSION/plug-ins
|
||||
|
||||
...and execute the command...
|
||||
|
||||
gzexe PLUGIN_NAME
|
||||
|
||||
...and remember to remove the uncompres-
|
||||
sed binary, which has been renamed to
|
||||
PLUGIN_NAME~, by running the command:
|
||||
|
||||
rm PLUGIN_NAME~
|
||||
|
||||
This will result in a code size of about
|
||||
20 kB, which isn't too much IMHO.
|
||||
------------------------------------------
|
||||
|
||||
|
||||
------------------------------------------
|
||||
FEEDBACK
|
||||
------------------------------------------
|
||||
I'm interested in any feedback, comments,
|
||||
bug-reports, suggestions etc. If you
|
||||
have anything you would like to tell
|
||||
me, you can write to cotting@mygale.org.
|
||||
Also have a look at the GIMP-section of
|
||||
my homepage at www.mygale.org/~cotting.
|
||||
------------------------------------------
|
||||
|
||||
Thank you and happy GIMPing!
|
||||
Daniel Cotting
|
||||
|
||||
------------------------------------------
|
||||
|
|
@ -1,75 +0,0 @@
|
|||
-------------------------------------------
|
||||
GIMP-Plug-In
|
||||
-------------------------------------------
|
||||
Written by Daniel Cotting
|
||||
Bahnhofstrasse 31
|
||||
CH-3066 Stettlen (Switzerland)
|
||||
|
||||
cotting@mygale.org
|
||||
www.mygale.org/~cotting
|
||||
-------------------------------------------
|
||||
Some code is taken out of other plug-ins
|
||||
written by other authors.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
INSTALLATION
|
||||
-------------------------------------------
|
||||
To install it, you have to edit the
|
||||
Makefile (change install-path).
|
||||
Afterwards run make. This will compile
|
||||
and install the plug-in in the right
|
||||
directory. Once the new code is installed,
|
||||
you can run the GIMP and enjoy the new
|
||||
functions and effects it provides.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
REDUCE CODE SIZE
|
||||
-------------------------------------------
|
||||
With this new release 1.01 the size of
|
||||
the logo in the about box has been reduced
|
||||
in order to make smaller binaries. In
|
||||
general the compiled plug-in will be
|
||||
about 25-30% of the size of version 1.00.
|
||||
If you find that the plug-in is still
|
||||
too big, you can compress the executables
|
||||
with the gzexe program (if it is avaiable
|
||||
on your system). To do so, change to the
|
||||
plug-in directory of the GIMP...
|
||||
|
||||
cd /usr/local/lib/gimp/VERSION/plug-ins
|
||||
|
||||
...and execute the command...
|
||||
|
||||
gzexe PLUGIN_NAME
|
||||
|
||||
...and remember to remove the uncompres-
|
||||
sed binary, which has been renamed to
|
||||
PLUGIN_NAME~, by running the command:
|
||||
|
||||
rm PLUGIN_NAME~
|
||||
|
||||
This will result in a code size of about
|
||||
35 to 40 kB, which isn't too much IMHO.
|
||||
------------------------------------------
|
||||
|
||||
|
||||
------------------------------------------
|
||||
FEEDBACK
|
||||
------------------------------------------
|
||||
I'm interested in any feedback, comments,
|
||||
bug-reports, suggestions etc. If you
|
||||
have anything you would like to tell
|
||||
me, you can write to cotting@mygale.org.
|
||||
Also have a look at the GIMP-section of
|
||||
my homepage at www.mygale.org/~cotting.
|
||||
------------------------------------------
|
||||
|
||||
Thank you and happy GIMPing!
|
||||
Daniel Cotting
|
||||
|
||||
------------------------------------------
|
||||
|
|
@ -1,788 +0,0 @@
|
|||
/* GIMP header image file format (Indexed): //logo.h */
|
||||
|
||||
static unsigned int logo_width = 200;
|
||||
static unsigned int logo_height = 72;
|
||||
|
||||
/* Call this macro repeatedly. After each use, the pixel data can be extracted */
|
||||
|
||||
#define HEADER_PIXEL(data,pixel) \
|
||||
pixel[0] = palette_data[data[0]*3+2]; \
|
||||
pixel[1] = palette_data[data[0]*3+1]; \
|
||||
pixel[2] = palette_data[data[0]*3+0]; \
|
||||
data--;
|
||||
|
||||
static unsigned char
|
||||
palette_data[] = { 4,2,2,4,110,178,32,4,122,4,36,
|
||||
86,15,3,66,4,58,127,36,8,186,4,34,122,17,2,
|
||||
34,4,19,66,12,4,162,90,2,69,88,2,48,7,20,
|
||||
2,25,2,103,8,14,48,4,58,186,90,3,154,82,2,
|
||||
129,55,2,34,17,2,18,17,34,191,94,2,101,57,2,
|
||||
70,7,32,154,12,22,157,17,3,50,4,88,150,96,3,
|
||||
186,86,2,138,87,2,86,212,214,210,4,19,98,52,2,
|
||||
154,15,11,2,4,132,216,7,18,125,12,6,82,37,12,
|
||||
18,4,88,189,86,14,48,128,2,157,32,4,138,4,60,
|
||||
155,4,48,126,60,2,218,7,10,52,13,12,66,129,2,
|
||||
50,56,2,52,52,14,98,4,47,157,6,20,87,48,2,
|
||||
24,58,2,101,120,2,141,52,5,170,4,113,215,127,2,
|
||||
73,4,90,210,4,52,112,36,18,194,59,2,85,42,2,
|
||||
10,107,2,173,95,2,114,31,3,52,4,79,160,84,3,
|
||||
189,14,10,40,30,2,69,96,2,58,113,2,126,9,37,
|
||||
231,17,33,170,28,14,2,4,30,146,68,10,37,132,2,
|
||||
82,23,4,7,4,10,122,4,36,108,32,2,37,7,27,
|
||||
2,4,98,175,84,10,146,4,101,191,4,14,146,8,29,
|
||||
86,4,2,170,8,60,230,84,10,162,72,2,39,102,2,
|
||||
142,4,142,221,4,49,143,68,12,170,4,124,213,15,4,
|
||||
74,114,2,69,112,2,158,32,3,23,8,50,190,111,2,
|
||||
104,6,40,154,96,2,210,6,28,104,60,2,138,61,2,
|
||||
25,68,2,114,58,2,125,39,2,114,73,2,69,16,4,
|
||||
58,4,88,177,56,14,26,138,2,173,4,68,176,71,2,
|
||||
55,76,2,210,4,78,130,17,3,42,6,27,69,112,2,
|
||||
49,12,26,178,47,13,159,18,11,10,13,11,74,141,2,
|
||||
58,52,18,234,4,82,186,4,126,198,4,103,213,4,62,
|
||||
206,4,72,226,12,46,210,72,12,222,12,26,146,20,34,
|
||||
210,4,113,197,4,131,229,4,48,170,4,76,170,7,43,
|
||||
95,52,30,218,15,11,170,52,14,202,12,14,86,4,40,
|
||||
174,108,14,202,156,2,186,60,12,130,5,40,129,73,13,
|
||||
189,12,42,138,44,14,202,4,59,143,4,124,229,4,69,
|
||||
191,4,69,157,4,60,114,4,43,110,14,14,58,20,26,
|
||||
157,28,26,210,4,87,162,4,91,202,4,110,226,4,98,
|
||||
226,4,101,202,17,14,186,28,18,18,60,2,234,28,10,
|
||||
114,4,30,114,8,10,162,12,54,186,20,26,130,100,10,
|
||||
170,40,18,154,4,22,114,28,26,234,4,22,58,4,66,
|
||||
226,4,54,202,12,42,202,4,38,98,4,145,234,4,76,
|
||||
146,4,94,148,4,138,213,4,94,186,4,54,126,4,54,
|
||||
154,4,118,211,4,106,178,4,106,188,4,54,142,4,94,
|
||||
170,4,70,202,4,118,197,4,54,173,4,82,178,72,4,
|
||||
172,36,10,138,76,14,162,4,98,210,4,118,226,112,2,
|
||||
114,24,19,8,30,2,85,84,6,226,141,2,73,28,30,
|
||||
10,28,46,186,112,4,206,36,10,90,36,2,174,108,2,
|
||||
58,41,3,130,44,10,194,9,33,130,92,2,162,51,2,
|
||||
42,12,32,162,81,3,146,44,11,26,28,6,146,44,2,
|
||||
178,30,12,10,60,10,178,64,2,146,28,10,178,92,10,
|
||||
210,5,41,146,40,2,102,96,2,125,100,2,88,74,2,
|
||||
157,142,2,159,26,10,55,143,2,50,73,2,102,134,2,
|
||||
142,73,2,84,127,2,126,142,2,82,156,2,178,28,10,
|
||||
158,28,26,114,84,14,202,12,4,10,5,20,74,17,2,
|
||||
26,92,2,194,7,19,106};
|
||||
|
||||
static unsigned char header_data[] = { 71,99,218,218,99,11,71,218,71,71,
|
||||
218,99,99,99,71,99,218,99,99,99,99,218,71,218,99,218,218,99,99,218,
|
||||
218,99,99,218,99,218,99,58,218,99,99,99,58,218,99,99,99,58,99,58,
|
||||
99,58,11,58,99,58,58,11,99,58,99,58,99,99,99,218,99,218,99,58,
|
||||
99,71,99,218,71,12,12,12,12,12,12,12,12,12,92,19,19,19,92,92,
|
||||
92,92,19,108,19,19,19,19,19,19,53,53,53,53,101,19,19,53,53,19,
|
||||
19,19,12,92,92,12,12,12,71,71,218,99,218,218,71,71,12,12,218,99,
|
||||
58,58,58,99,99,99,58,99,99,99,11,58,11,58,58,99,58,99,99,99,
|
||||
58,99,99,99,99,58,99,99,99,99,99,218,99,99,11,99,99,99,11,99,
|
||||
99,218,218,218,99,218,99,99,218,218,99,99,218,99,218,218,99,99,218,11,
|
||||
218,71,99,218,99,218,218,99,71,8,218,99,218,218,99,99,99,99,99,99,
|
||||
218,218,99,99,218,99,218,99,218,71,99,99,99,218,99,99,218,99,99,99,
|
||||
218,218,99,99,99,99,58,99,58,30,99,99,99,99,99,99,58,99,99,58,
|
||||
99,58,99,58,99,99,58,58,58,99,58,58,99,218,218,71,99,99,71,71,
|
||||
71,123,12,118,71,71,12,71,123,12,12,19,19,19,53,19,19,53,53,19,
|
||||
19,53,101,63,20,63,20,63,53,53,53,101,53,53,53,19,53,53,53,19,
|
||||
92,12,12,12,71,12,12,12,12,12,92,71,218,218,71,218,71,71,71,71,
|
||||
99,218,58,58,58,99,99,99,99,58,58,58,99,58,99,58,58,99,58,58,
|
||||
99,99,58,99,99,99,99,58,99,58,30,99,99,99,218,99,58,99,99,58,
|
||||
11,99,99,218,99,218,218,99,99,218,71,99,218,99,99,218,99,99,218,99,
|
||||
11,218,99,218,99,11,218,99,99,8,71,71,71,99,218,71,218,99,71,218,
|
||||
11,99,218,218,99,218,99,218,99,99,99,99,218,99,99,99,99,99,218,99,
|
||||
99,99,99,99,99,11,99,99,99,99,99,99,58,99,58,99,58,99,58,58,
|
||||
99,11,58,58,99,58,99,99,58,58,218,99,123,71,71,71,123,71,71,218,
|
||||
99,99,218,71,12,12,12,12,92,19,19,53,19,53,53,53,53,19,53,53,
|
||||
53,53,19,53,19,53,53,53,53,53,63,63,101,63,63,20,53,19,53,53,
|
||||
53,19,92,92,12,12,12,71,71,71,71,12,12,71,71,12,12,12,12,12,
|
||||
12,218,218,99,58,58,99,58,99,58,99,58,99,99,58,218,58,99,58,99,
|
||||
99,99,99,11,58,99,99,58,99,99,58,58,99,99,99,99,99,99,99,99,
|
||||
99,58,218,99,218,99,99,99,218,99,99,218,99,11,218,99,218,218,99,99,
|
||||
218,99,218,11,99,71,99,218,71,8,99,99,218,99,99,99,218,99,99,218,
|
||||
218,99,11,99,99,218,99,218,99,218,218,99,58,99,99,99,58,11,99,99,
|
||||
58,99,99,58,58,58,58,99,99,99,99,218,58,99,99,99,58,58,99,99,
|
||||
58,58,99,58,99,58,99,99,58,58,99,218,71,71,218,218,218,58,58,58,
|
||||
218,99,71,123,12,12,12,19,19,108,108,108,92,92,92,12,71,12,12,92,
|
||||
19,53,53,53,101,53,53,19,53,101,53,20,53,79,79,0,34,79,20,63,
|
||||
53,53,53,19,19,19,12,12,12,71,71,71,71,71,71,123,71,12,12,12,
|
||||
12,12,71,71,218,58,99,58,218,58,218,99,58,99,58,99,99,218,58,58,
|
||||
58,99,58,58,99,99,58,99,58,99,99,218,58,58,99,99,99,99,99,99,
|
||||
58,11,99,99,218,218,218,99,218,99,99,218,218,99,218,99,99,218,218,99,
|
||||
218,99,71,218,99,218,99,99,99,8,218,218,99,218,99,218,99,218,218,99,
|
||||
11,218,218,218,218,99,71,99,218,99,99,99,218,58,99,99,99,99,218,30,
|
||||
58,99,58,99,58,11,58,99,58,99,58,58,58,99,58,58,99,99,58,58,
|
||||
58,99,58,99,58,58,99,58,218,99,99,218,58,99,58,58,58,58,58,218,
|
||||
71,12,12,71,71,12,12,12,12,71,71,118,71,71,118,71,71,12,223,19,
|
||||
19,53,53,53,53,63,229,20,79,20,34,0,20,101,101,63,20,101,101,53,
|
||||
108,53,53,53,53,53,101,19,92,12,12,12,12,71,71,218,218,218,71,71,
|
||||
118,12,71,71,218,218,58,58,58,58,58,58,218,58,58,58,99,99,218,99,
|
||||
58,58,99,99,58,99,58,99,58,58,58,99,99,99,58,99,99,99,58,58,
|
||||
99,58,58,99,99,99,99,99,99,99,218,99,99,218,99,218,218,99,99,218,
|
||||
99,58,99,99,218,99,218,218,218,8,99,218,99,218,99,218,11,99,218,99,
|
||||
99,99,99,99,218,99,58,99,99,99,58,99,218,99,99,99,99,99,58,99,
|
||||
58,218,99,99,99,58,218,58,58,58,99,99,58,99,218,58,99,99,58,218,
|
||||
58,99,58,99,99,99,58,99,58,58,58,58,99,58,58,58,58,218,218,12,
|
||||
71,71,71,12,12,71,71,12,71,12,71,71,71,71,12,92,19,53,53,53,
|
||||
101,63,79,34,251,0,0,63,20,53,19,53,53,53,53,19,19,53,19,19,
|
||||
19,108,19,19,19,19,19,19,53,53,108,12,12,12,71,71,218,58,58,58,
|
||||
99,218,71,71,71,12,218,99,99,58,58,58,58,218,58,58,58,58,58,99,
|
||||
99,58,58,99,58,218,58,99,99,99,99,58,99,128,99,58,99,99,11,99,
|
||||
99,58,11,58,99,99,99,218,58,11,99,58,99,218,99,99,218,99,99,99,
|
||||
218,71,99,99,218,99,11,99,218,8,218,99,218,99,218,99,99,218,99,218,
|
||||
58,218,58,218,99,99,218,99,58,99,99,99,99,78,11,58,99,58,99,99,
|
||||
99,58,58,99,58,11,58,58,218,99,99,58,58,58,99,58,58,58,99,99,
|
||||
58,58,58,58,58,58,99,58,99,99,99,58,58,58,58,58,218,71,118,12,
|
||||
71,71,71,71,71,12,71,71,71,71,71,12,92,19,19,53,53,63,20,251,
|
||||
0,79,79,0,79,34,34,79,0,63,229,20,63,101,53,101,19,53,19,92,
|
||||
12,71,12,92,12,12,12,12,12,92,19,92,92,71,12,118,71,218,99,58,
|
||||
58,58,58,58,218,123,71,218,58,58,58,99,58,58,58,218,58,218,58,58,
|
||||
218,58,99,58,58,58,99,99,58,99,58,99,218,99,99,99,58,58,58,11,
|
||||
58,58,99,58,99,99,30,99,99,99,58,218,218,30,99,218,99,99,99,218,
|
||||
99,99,218,218,99,99,218,71,99,8,99,99,71,99,218,218,99,218,99,218,
|
||||
99,218,99,58,11,58,99,99,11,58,99,58,99,99,99,99,58,58,99,99,
|
||||
58,99,99,99,99,58,99,78,58,58,99,99,218,78,58,218,58,99,212,58,
|
||||
99,58,58,58,218,58,58,58,58,58,58,58,58,58,218,71,12,12,71,71,
|
||||
123,218,218,58,99,71,123,71,71,12,19,19,19,53,53,19,19,53,63,53,
|
||||
101,101,101,63,101,101,20,20,79,0,0,79,79,34,251,79,79,251,101,53,
|
||||
19,92,12,71,71,71,218,12,218,12,71,71,71,71,71,12,71,71,123,71,
|
||||
58,58,58,58,58,58,58,99,99,58,58,58,99,58,58,58,99,58,99,58,
|
||||
99,58,58,99,58,58,58,58,99,58,99,58,99,58,99,58,99,99,58,58,
|
||||
99,99,99,58,99,58,58,58,99,99,99,30,128,58,99,99,99,99,99,58,
|
||||
218,99,99,218,218,99,99,218,71,8,71,218,99,99,99,99,218,99,99,99,
|
||||
99,30,58,11,58,58,99,58,58,58,58,30,58,58,99,99,99,58,99,58,
|
||||
99,58,99,58,58,58,218,99,58,99,58,58,58,218,99,58,58,58,58,58,
|
||||
58,99,99,99,58,99,99,58,58,212,99,58,58,218,71,71,218,218,99,58,
|
||||
58,58,58,218,123,71,71,12,108,19,19,108,19,19,223,92,19,92,12,12,
|
||||
19,19,19,19,53,53,63,63,229,0,34,34,79,0,79,0,75,34,0,34,
|
||||
79,20,53,19,92,12,71,71,71,218,71,123,71,123,71,71,71,71,71,71,
|
||||
71,218,58,58,58,58,58,58,58,99,58,58,58,58,58,58,58,58,99,58,
|
||||
58,99,99,58,99,58,58,58,58,58,58,99,58,99,58,99,58,58,99,99,
|
||||
58,58,99,99,58,58,218,58,58,99,58,99,11,58,58,99,58,218,99,99,
|
||||
99,99,218,99,99,218,99,99,99,8,99,218,99,218,99,99,99,99,58,58,
|
||||
11,58,99,58,58,30,58,11,58,11,58,99,99,58,99,58,58,58,99,58,
|
||||
58,99,58,99,99,58,58,99,58,99,58,99,58,99,212,58,58,58,58,58,
|
||||
58,58,58,58,58,58,58,58,58,58,212,58,218,218,218,99,58,58,58,58,
|
||||
58,99,71,71,71,12,71,71,12,12,12,71,71,123,71,218,71,71,71,92,
|
||||
19,108,63,79,229,126,0,79,0,0,34,34,34,126,34,251,79,0,126,34,
|
||||
79,0,79,20,63,19,19,12,71,71,71,218,71,99,71,71,71,71,71,71,
|
||||
71,71,218,58,58,58,212,58,58,58,58,58,58,58,58,58,58,58,58,58,
|
||||
58,58,99,58,58,99,58,58,99,99,128,218,58,58,99,58,99,58,58,99,
|
||||
218,58,58,218,99,99,99,99,99,99,58,99,99,58,30,218,99,99,99,99,
|
||||
99,99,218,99,99,99,218,218,99,8,218,99,99,99,58,99,99,99,99,99,
|
||||
58,58,218,99,99,99,58,99,58,58,58,99,58,99,58,99,99,99,58,58,
|
||||
99,99,58,58,58,58,58,58,99,99,58,99,99,58,58,58,58,99,58,58,
|
||||
99,58,99,58,78,212,99,212,99,58,58,99,58,58,78,78,246,99,212,58,
|
||||
99,71,123,71,71,71,71,71,218,218,71,123,218,218,218,118,12,19,63,63,
|
||||
0,0,0,34,34,0,34,79,79,79,0,34,79,79,20,101,53,101,53,19,
|
||||
53,53,101,101,53,53,19,19,19,92,218,218,218,218,218,212,78,58,218,218,
|
||||
71,71,71,11,58,246,58,78,246,58,58,58,99,99,58,58,99,58,212,58,
|
||||
99,58,99,58,58,99,58,58,58,58,58,212,218,58,58,99,58,58,99,58,
|
||||
99,99,99,58,58,99,99,99,58,99,58,58,99,99,99,58,58,99,99,99,
|
||||
99,99,99,11,58,99,99,99,218,8,99,99,218,99,99,218,99,218,58,58,
|
||||
11,78,58,99,58,99,58,99,58,11,58,99,58,99,58,58,58,99,99,58,
|
||||
99,99,99,58,58,58,58,58,58,58,58,58,58,58,58,212,99,58,212,99,
|
||||
58,58,78,58,78,58,58,58,58,58,58,58,58,58,246,58,246,58,58,71,
|
||||
218,71,71,71,218,71,71,71,71,218,218,71,71,92,92,53,63,126,79,0,
|
||||
0,79,0,79,34,79,0,126,79,79,79,79,79,229,229,101,53,108,92,71,
|
||||
71,71,71,71,71,12,12,19,108,19,92,71,71,71,71,218,212,246,78,58,
|
||||
58,218,218,71,71,58,58,212,212,78,212,78,78,58,58,58,58,58,99,58,
|
||||
78,58,58,99,58,58,58,58,58,58,58,58,99,58,99,58,58,212,99,58,
|
||||
58,99,58,99,58,99,99,58,58,99,99,58,58,58,58,11,78,99,99,99,
|
||||
99,58,99,58,71,99,99,99,99,8,99,99,99,218,99,58,99,30,58,11,
|
||||
58,11,58,58,99,58,58,99,58,99,58,99,99,58,99,58,99,58,58,99,
|
||||
58,58,58,58,58,78,58,99,58,99,58,58,58,58,99,58,212,99,58,58,
|
||||
58,78,78,78,58,58,58,58,58,212,58,78,58,78,78,78,58,99,218,218,
|
||||
71,218,218,71,58,99,58,99,71,71,71,12,19,20,79,251,0,251,79,251,
|
||||
79,63,126,79,79,79,79,229,79,79,79,126,126,79,79,63,20,53,53,92,
|
||||
12,12,218,71,71,218,218,218,71,218,71,71,71,218,71,218,218,58,246,246,
|
||||
78,212,78,58,218,218,58,58,58,246,78,212,78,212,58,58,58,58,58,212,
|
||||
78,78,78,58,58,99,58,58,58,58,58,58,58,58,58,218,99,99,58,99,
|
||||
58,58,218,99,58,58,99,58,99,99,58,99,99,99,58,99,99,58,58,58,
|
||||
218,99,11,58,99,99,99,218,99,8,99,30,218,58,11,99,99,58,99,58,
|
||||
99,58,58,99,218,99,218,58,99,99,58,58,58,58,99,58,99,99,58,99,
|
||||
58,58,58,78,78,58,58,58,58,58,99,246,78,78,58,58,58,58,58,78,
|
||||
78,212,78,246,246,58,58,58,212,58,212,246,78,246,58,212,218,218,218,218,
|
||||
218,58,246,58,246,58,218,218,123,12,19,19,53,53,101,53,63,101,63,63,
|
||||
63,63,63,63,63,101,63,53,63,53,53,53,53,108,19,19,19,19,108,19,
|
||||
92,92,12,12,71,71,218,99,99,218,218,218,218,218,71,71,71,218,218,246,
|
||||
78,78,246,78,78,78,58,58,58,78,78,78,78,246,58,58,58,58,58,78,
|
||||
212,78,78,58,58,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,
|
||||
58,99,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,99,99,99,
|
||||
58,99,58,99,99,58,99,99,99,8,99,99,30,58,58,58,58,58,58,99,
|
||||
58,11,99,58,99,58,58,58,58,58,58,99,58,58,58,58,58,58,99,58,
|
||||
99,58,78,58,58,58,99,58,58,78,246,78,58,78,58,58,58,58,78,212,
|
||||
246,78,246,78,78,99,212,246,78,246,58,246,246,78,246,218,218,218,58,58,
|
||||
246,78,78,246,58,218,218,71,12,12,108,92,108,19,108,53,63,63,63,53,
|
||||
53,53,19,223,92,92,49,118,118,118,118,118,118,118,71,118,118,12,12,12,
|
||||
92,71,71,123,218,99,11,58,58,58,58,78,58,99,99,123,71,218,218,218,
|
||||
246,246,78,212,78,212,78,246,78,78,58,78,246,78,246,78,58,58,58,58,
|
||||
99,78,246,78,246,99,58,58,58,58,58,78,78,78,78,99,58,99,58,99,
|
||||
78,58,58,99,58,218,218,58,58,99,58,58,58,218,99,58,58,58,58,11,
|
||||
58,99,99,99,58,99,99,218,58,8,99,99,58,99,58,11,58,11,58,58,
|
||||
99,58,99,58,99,58,99,58,58,218,58,58,58,99,58,99,58,58,58,99,
|
||||
78,58,58,58,99,58,58,78,78,58,246,78,246,99,58,58,58,212,78,78,
|
||||
246,58,246,58,78,78,78,58,246,78,78,58,246,58,58,58,212,58,246,78,
|
||||
212,246,58,58,71,71,71,71,12,92,92,92,108,53,53,53,19,19,223,223,
|
||||
49,223,92,49,49,223,92,49,118,118,118,71,118,112,118,11,11,112,71,112,
|
||||
71,71,11,11,11,99,99,58,58,78,78,78,246,78,246,58,99,71,218,71,
|
||||
218,78,78,246,78,246,58,246,78,246,212,58,246,58,246,78,212,78,246,58,
|
||||
58,58,78,246,246,78,78,99,58,58,58,212,78,58,78,58,58,58,58,58,
|
||||
78,58,78,99,58,58,99,58,58,58,58,99,58,58,99,218,58,99,58,58,
|
||||
58,58,99,58,99,99,58,99,99,8,99,99,58,58,58,99,58,99,99,58,
|
||||
99,58,58,58,58,58,58,218,99,58,99,58,58,58,58,58,99,58,58,78,
|
||||
58,78,78,78,78,58,78,58,78,78,78,212,78,58,78,58,78,212,78,246,
|
||||
78,246,78,78,212,246,246,78,246,212,246,246,78,246,58,246,78,246,58,246,
|
||||
246,58,99,218,218,218,71,12,92,19,19,19,19,19,223,223,49,223,49,118,
|
||||
49,112,30,30,237,103,208,208,245,208,245,208,245,245,245,103,208,103,22,237,
|
||||
30,30,11,11,11,11,71,71,11,99,58,78,78,246,58,246,246,246,58,99,
|
||||
99,218,212,78,246,78,246,78,246,58,78,58,246,78,58,246,78,212,78,246,
|
||||
58,212,58,78,78,212,78,78,58,58,99,78,78,78,78,78,58,58,99,58,
|
||||
58,78,78,78,58,58,99,58,99,58,58,99,58,218,58,58,99,58,58,218,
|
||||
99,58,99,99,58,99,30,99,99,8,58,99,58,99,58,58,58,99,58,99,
|
||||
58,218,218,58,99,58,99,58,58,58,78,99,78,58,99,58,58,78,58,78,
|
||||
78,58,78,78,58,78,78,246,246,212,78,78,78,58,78,246,78,246,58,246,
|
||||
212,78,58,78,78,58,246,78,78,78,58,246,78,246,78,58,246,78,78,78,
|
||||
58,218,99,11,71,12,92,92,92,223,223,223,223,223,49,118,112,22,237,208,
|
||||
72,245,55,243,245,72,72,72,65,208,236,208,208,245,72,55,243,55,55,243,
|
||||
245,245,245,103,237,237,30,11,11,112,71,11,99,58,78,246,246,246,246,78,
|
||||
58,218,58,58,246,78,212,78,246,78,246,78,212,78,78,212,78,246,78,78,
|
||||
58,78,78,78,78,78,246,246,246,58,58,78,58,246,78,212,78,78,99,58,
|
||||
58,78,58,58,58,58,58,99,58,58,58,58,78,58,58,99,99,58,58,58,
|
||||
99,218,58,99,99,99,58,99,58,8,99,99,99,58,11,58,58,58,99,58,
|
||||
58,58,58,58,58,58,58,99,99,78,78,58,58,78,58,58,99,78,78,78,
|
||||
78,78,78,78,78,78,212,246,246,246,246,78,78,246,246,58,246,78,246,78,
|
||||
78,78,212,246,246,246,78,78,212,246,246,246,58,246,246,78,246,246,78,58,
|
||||
218,99,71,12,12,92,92,82,223,49,223,118,112,22,208,72,72,208,65,22,
|
||||
22,112,11,112,112,112,112,112,118,118,118,112,112,112,30,244,244,30,237,65,
|
||||
236,72,55,55,243,243,208,208,237,237,11,71,11,11,71,11,99,58,246,246,
|
||||
246,78,78,246,58,246,78,246,58,246,58,246,58,246,246,78,78,78,212,78,
|
||||
212,246,212,78,246,246,58,78,78,246,99,246,246,58,246,58,78,78,78,58,
|
||||
78,78,78,78,78,78,58,58,58,99,58,58,78,99,58,58,58,218,99,99,
|
||||
58,58,99,58,99,58,58,99,99,8,58,58,99,58,99,218,99,58,99,99,
|
||||
99,58,99,58,99,58,58,58,58,78,58,58,58,58,58,58,58,78,212,78,
|
||||
78,58,246,78,58,246,246,246,246,246,246,246,78,58,246,78,246,58,246,58,
|
||||
246,78,78,78,58,246,212,78,78,78,58,246,78,212,246,58,78,212,58,99,
|
||||
218,71,12,92,19,223,49,49,118,62,30,22,208,208,103,30,244,112,244,118,
|
||||
112,23,49,49,49,49,49,49,49,49,82,82,223,82,49,118,23,118,118,112,
|
||||
11,30,237,22,65,245,55,243,245,245,103,237,237,11,71,11,71,71,218,58,
|
||||
246,246,78,246,78,212,78,246,246,78,246,246,78,78,212,78,212,78,246,78,
|
||||
78,58,246,78,58,246,78,212,78,246,78,78,78,78,78,212,246,246,246,78,
|
||||
58,78,78,78,58,78,78,58,58,58,58,58,99,58,58,58,58,58,99,58,
|
||||
58,58,58,58,58,99,99,58,58,8,99,99,58,58,58,99,99,99,99,58,
|
||||
58,99,78,58,78,99,58,58,99,78,78,78,58,78,58,58,78,246,78,212,
|
||||
78,78,58,78,246,246,246,246,246,246,58,78,78,246,58,246,78,246,78,246,
|
||||
78,212,78,212,212,246,78,78,246,246,78,212,58,99,212,246,246,58,99,218,
|
||||
118,12,92,223,223,49,49,11,237,208,208,103,244,23,118,112,118,112,49,49,
|
||||
19,82,82,82,223,49,66,49,49,82,223,223,101,19,223,82,223,82,223,82,
|
||||
82,49,23,112,11,244,30,65,72,55,55,245,208,22,237,112,11,118,71,218,
|
||||
218,58,58,78,246,78,212,78,78,212,99,78,212,246,78,246,78,246,78,212,
|
||||
246,246,78,246,246,78,246,78,246,58,246,78,58,78,246,246,246,246,212,246,
|
||||
78,78,78,78,78,58,78,78,99,58,78,78,78,99,58,58,99,58,99,99,
|
||||
58,99,99,99,99,58,99,58,99,8,99,99,99,58,58,99,58,58,99,58,
|
||||
58,58,78,78,58,58,58,58,58,58,78,78,78,78,78,58,246,246,246,246,
|
||||
246,78,78,212,246,246,246,246,246,246,78,212,78,246,78,212,78,246,58,246,
|
||||
78,246,78,58,58,212,246,58,78,246,246,58,58,58,58,246,58,218,71,12,
|
||||
223,223,49,49,49,30,65,72,72,30,112,118,118,112,118,49,223,223,223,49,
|
||||
244,244,244,244,23,23,23,23,70,66,49,70,49,70,70,118,23,23,23,23,
|
||||
49,223,19,82,223,223,23,11,244,237,208,72,55,55,208,103,30,11,11,49,
|
||||
71,71,99,58,246,78,246,246,58,246,58,58,246,212,78,246,58,246,78,58,
|
||||
58,212,78,78,212,78,212,78,78,78,212,78,78,78,246,212,246,246,246,212,
|
||||
246,58,78,78,78,78,58,78,78,99,58,58,78,58,58,58,99,58,58,58,
|
||||
58,58,58,58,99,58,99,58,99,8,99,58,58,218,58,58,58,99,58,58,
|
||||
58,99,58,58,99,58,78,78,78,78,78,78,78,58,246,246,246,212,246,246,
|
||||
212,246,78,246,246,246,246,246,212,246,246,78,246,58,212,246,78,78,78,246,
|
||||
58,246,212,99,58,246,78,246,246,58,58,58,58,78,246,58,99,118,12,92,
|
||||
223,223,223,11,22,72,208,244,49,112,112,118,49,82,223,49,244,244,242,62,
|
||||
23,62,23,23,244,244,244,244,244,244,62,30,244,244,244,244,23,112,210,23,
|
||||
62,244,244,23,223,82,53,82,49,112,30,30,65,72,55,245,208,237,30,112,
|
||||
71,49,118,71,99,78,78,78,246,246,58,99,58,246,212,78,246,58,246,212,
|
||||
99,58,212,246,78,246,78,246,212,246,78,246,246,212,246,246,246,212,246,246,
|
||||
246,246,78,78,246,246,78,78,78,78,58,58,78,58,58,58,58,58,99,99,
|
||||
99,78,99,58,99,99,58,99,58,8,58,99,58,99,99,58,58,99,58,58,
|
||||
58,58,58,58,78,58,78,78,58,78,58,246,78,78,78,212,246,246,212,246,
|
||||
246,246,246,246,246,246,246,246,246,246,246,58,246,58,99,212,246,212,78,78,
|
||||
78,99,58,58,78,246,58,78,246,58,58,58,58,212,58,218,71,12,49,49,
|
||||
49,112,22,72,65,112,49,112,112,112,223,19,118,62,244,62,62,23,23,244,
|
||||
244,244,244,112,23,49,49,223,19,223,82,223,223,49,223,23,118,112,244,30,
|
||||
62,62,62,62,23,62,23,223,82,8,82,71,30,244,22,72,55,245,103,237,
|
||||
11,71,12,12,71,99,78,78,78,58,212,58,58,58,58,212,78,58,246,78,
|
||||
58,58,58,212,78,246,58,78,78,212,212,246,246,246,212,246,246,246,246,246,
|
||||
246,246,58,78,78,58,246,212,78,78,58,78,58,78,78,78,58,78,58,58,
|
||||
218,58,58,99,58,99,99,99,58,8,218,99,58,58,58,99,58,58,99,78,
|
||||
78,58,99,58,58,78,58,78,246,78,78,58,78,212,246,246,246,246,246,246,
|
||||
246,246,246,212,246,212,246,246,246,212,78,246,58,58,58,246,78,78,212,246,
|
||||
58,58,58,58,212,78,246,212,58,58,58,58,58,58,71,12,49,223,223,49,
|
||||
30,208,72,30,49,49,112,49,223,223,23,22,244,62,23,23,62,22,112,118,
|
||||
49,49,223,118,23,244,30,242,22,242,242,62,242,244,244,112,23,49,49,223,
|
||||
23,112,30,244,62,112,210,23,23,49,82,8,223,244,237,30,208,55,243,245,
|
||||
22,30,71,118,12,71,99,78,78,246,212,58,58,58,58,246,246,246,78,246,
|
||||
58,58,58,78,212,78,246,246,246,58,58,212,246,246,246,246,246,246,246,246,
|
||||
246,78,246,58,246,246,246,78,212,78,78,78,58,78,58,78,58,58,99,58,
|
||||
58,58,99,58,58,58,58,58,58,8,58,99,58,58,58,58,99,58,78,78,
|
||||
58,58,78,58,58,78,78,58,78,78,78,78,78,246,212,246,246,246,246,246,
|
||||
246,246,246,246,246,246,212,246,246,246,78,58,58,58,58,246,78,78,246,99,
|
||||
212,58,212,58,212,78,78,58,58,218,58,212,58,99,71,49,223,49,49,30,
|
||||
55,72,112,49,244,11,49,82,112,242,242,62,23,62,244,112,118,223,82,118,
|
||||
30,236,29,225,231,33,248,42,42,42,219,2,42,219,110,107,231,29,65,244,
|
||||
112,223,223,49,112,30,30,23,23,23,23,49,82,101,49,30,30,242,72,243,
|
||||
208,103,30,71,118,12,71,99,78,78,78,58,58,58,58,58,78,58,246,78,
|
||||
58,58,99,58,246,58,246,58,246,58,99,58,212,246,246,212,246,246,246,246,
|
||||
246,246,246,246,212,246,246,246,246,78,58,78,78,78,78,78,58,78,78,78,
|
||||
58,78,99,99,99,58,58,99,99,8,99,58,99,99,58,58,58,58,78,78,
|
||||
78,78,58,58,58,78,78,78,78,78,246,246,58,246,246,246,246,246,246,246,
|
||||
246,246,212,246,99,58,246,246,246,246,212,58,58,58,99,212,78,212,212,58,
|
||||
78,58,58,58,246,246,78,58,71,218,58,58,11,71,118,223,49,23,103,243,
|
||||
22,49,118,30,118,82,49,30,242,62,70,62,244,118,223,82,112,65,93,205,
|
||||
217,42,80,147,98,4,26,8,8,8,8,121,8,8,26,4,98,210,111,219,
|
||||
29,29,65,112,223,82,23,30,244,62,62,62,62,49,82,82,112,30,30,65,
|
||||
243,245,103,30,71,118,12,71,218,212,246,58,58,212,212,58,58,246,212,78,
|
||||
58,58,212,58,58,246,78,246,58,58,58,58,246,212,246,246,246,246,246,246,
|
||||
246,212,246,246,246,246,212,246,246,212,78,246,212,78,58,78,78,78,58,78,
|
||||
78,78,58,58,58,58,99,58,58,8,58,58,58,58,58,58,58,58,237,78,
|
||||
58,78,78,58,78,78,212,78,246,78,78,246,246,246,246,246,246,246,246,246,
|
||||
246,246,246,58,58,58,246,246,246,246,58,58,99,58,58,246,246,78,99,78,
|
||||
246,78,58,58,58,58,58,218,12,99,58,99,71,92,49,223,118,22,41,65,
|
||||
223,23,30,118,19,23,22,242,23,23,30,112,223,19,112,29,222,232,87,80,
|
||||
98,26,121,8,20,253,20,20,20,20,101,20,20,20,253,253,20,8,121,26,
|
||||
4,14,2,231,29,30,49,82,112,30,244,62,23,210,118,82,101,223,30,244,
|
||||
65,55,243,103,237,71,118,71,71,99,58,58,58,58,218,58,58,58,246,212,
|
||||
58,58,212,78,99,58,246,246,78,58,58,58,58,246,246,246,246,246,246,246,
|
||||
246,246,246,212,246,246,246,246,246,246,246,78,78,78,78,78,58,78,58,78,
|
||||
78,58,58,58,78,99,58,58,99,8,99,58,58,99,99,58,58,58,58,237,
|
||||
78,78,58,78,78,246,78,246,78,246,78,246,246,246,246,246,246,246,246,246,
|
||||
246,246,58,58,58,58,246,246,246,58,99,78,246,212,99,246,212,58,78,246,
|
||||
58,246,58,58,58,212,218,12,118,58,58,71,12,49,19,49,237,41,65,49,
|
||||
118,112,223,82,244,236,62,66,62,30,82,8,112,93,68,6,137,88,162,253,
|
||||
253,20,253,19,223,23,244,244,54,242,54,242,244,62,112,49,223,20,20,20,
|
||||
20,253,26,98,14,33,29,244,82,101,112,22,62,62,62,23,49,53,82,30,
|
||||
112,22,243,243,208,11,71,118,12,218,99,58,58,58,12,71,58,58,58,58,
|
||||
99,58,58,246,246,58,58,246,246,58,58,58,99,58,246,246,246,246,78,58,
|
||||
246,212,246,246,246,246,246,212,246,246,78,78,78,78,58,78,78,78,78,58,
|
||||
78,58,78,237,78,58,99,99,78,8,58,99,58,58,78,78,78,78,78,78,
|
||||
58,78,78,58,78,246,78,212,246,246,246,246,246,246,246,246,246,103,246,246,
|
||||
246,246,58,58,58,99,212,246,246,58,212,78,246,58,58,58,58,58,212,78,
|
||||
78,78,58,58,58,58,123,49,218,99,11,118,223,223,82,237,41,208,23,118,
|
||||
237,223,82,244,18,210,23,23,112,19,223,103,64,6,148,147,26,253,20,8,
|
||||
66,23,54,111,219,219,137,24,76,24,163,25,137,42,204,42,151,109,244,223,
|
||||
20,20,20,20,8,4,111,231,236,23,82,12,237,62,62,23,62,223,253,223,
|
||||
237,244,22,41,245,103,11,112,118,71,218,58,58,99,92,92,128,58,58,58,
|
||||
58,58,58,212,78,58,58,212,58,58,58,78,78,58,212,246,246,246,58,58,
|
||||
212,246,212,246,246,246,246,246,246,212,246,78,246,246,78,78,78,78,78,58,
|
||||
78,58,58,78,99,58,58,58,99,8,99,58,58,58,58,78,78,58,78,78,
|
||||
78,78,78,78,78,58,246,246,246,246,246,246,246,246,103,246,246,246,246,246,
|
||||
246,78,58,58,58,58,58,212,58,58,78,212,78,78,99,58,58,212,78,246,
|
||||
212,212,58,58,58,218,92,12,218,99,71,12,223,82,118,243,55,23,223,30,
|
||||
223,19,244,93,54,49,23,112,82,82,245,153,138,234,162,8,253,101,49,30,
|
||||
111,125,24,201,142,16,159,142,43,95,197,156,193,193,51,141,224,25,248,231,
|
||||
65,118,20,20,20,20,121,210,231,55,244,82,49,30,244,62,62,244,223,20,
|
||||
118,237,112,208,243,245,237,71,118,49,71,58,58,218,92,92,12,58,58,99,
|
||||
58,58,212,78,212,212,58,58,58,58,58,212,78,58,58,246,246,246,99,58,
|
||||
99,246,246,246,246,246,246,246,246,246,212,246,58,78,78,78,78,78,58,78,
|
||||
78,58,78,78,58,78,58,99,58,8,99,99,58,58,58,78,78,58,78,58,
|
||||
78,78,78,246,78,78,78,246,246,246,246,246,246,246,246,103,246,246,246,246,
|
||||
246,58,58,58,58,58,58,58,58,58,78,78,246,78,58,58,58,212,78,58,
|
||||
58,78,58,58,58,12,92,12,99,218,118,19,82,223,22,116,237,49,112,112,
|
||||
101,112,93,109,70,112,118,82,223,55,136,185,44,26,253,253,82,62,107,163,
|
||||
117,16,114,159,161,106,98,46,26,26,26,26,26,4,32,81,44,142,43,234,
|
||||
10,56,236,23,20,20,20,8,4,219,225,237,19,82,11,244,62,54,62,223,
|
||||
20,112,30,244,72,239,103,237,71,12,12,71,58,71,92,92,12,128,58,58,
|
||||
58,58,246,78,246,58,58,58,99,58,58,246,78,78,58,246,246,58,58,58,
|
||||
58,212,246,212,246,246,246,246,246,246,78,78,246,58,246,58,78,246,78,58,
|
||||
78,58,78,78,58,58,58,58,58,8,58,58,58,58,78,237,58,78,78,78,
|
||||
78,78,78,58,246,246,212,246,246,246,246,246,246,246,246,246,246,246,246,246,
|
||||
78,58,58,58,58,58,99,58,58,246,246,246,58,246,58,58,58,78,246,218,
|
||||
11,58,58,58,58,12,92,71,218,11,49,223,101,23,239,93,23,118,244,223,
|
||||
223,65,29,70,70,112,82,82,72,233,135,152,121,253,20,49,242,179,176,39,
|
||||
198,156,32,47,26,26,69,113,26,47,9,47,162,113,26,121,113,252,152,159,
|
||||
43,234,217,238,30,253,20,251,8,4,107,17,30,82,223,22,62,62,54,244,
|
||||
82,19,237,112,244,41,245,30,112,71,92,71,99,71,12,92,92,71,78,58,
|
||||
58,246,246,58,78,212,58,58,58,58,58,78,246,58,99,58,212,58,58,58,
|
||||
58,78,246,246,246,246,246,246,246,246,246,246,78,78,78,78,246,58,78,78,
|
||||
58,58,58,99,58,99,58,58,58,8,58,99,99,58,58,78,78,58,78,58,
|
||||
78,58,78,78,78,78,78,246,246,246,246,246,246,246,246,246,78,246,246,246,
|
||||
58,58,78,58,78,58,58,99,58,78,58,246,246,58,58,58,212,58,58,12,
|
||||
71,58,58,58,99,92,92,71,218,71,223,8,19,22,150,30,49,11,23,101,
|
||||
30,93,54,49,112,49,20,30,254,181,95,26,253,253,49,65,163,166,206,202,
|
||||
52,26,8,121,4,161,43,114,139,131,57,200,195,188,192,88,26,26,121,98,
|
||||
197,67,234,145,230,22,82,20,20,8,98,107,100,112,253,112,103,244,54,62,
|
||||
49,20,49,237,118,208,243,103,11,11,12,92,92,92,92,12,49,12,58,58,
|
||||
78,58,246,78,246,78,212,99,58,58,78,246,58,78,58,58,58,99,58,58,
|
||||
58,99,246,246,246,246,246,246,246,246,246,246,246,78,246,78,246,78,58,78,
|
||||
78,58,78,78,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78,
|
||||
78,78,78,78,78,246,246,246,246,246,246,246,246,246,246,246,58,212,58,246,
|
||||
99,212,58,99,78,99,58,58,78,246,58,58,58,78,78,58,78,78,99,71,
|
||||
12,71,58,58,12,12,12,71,11,12,223,101,49,243,100,118,223,112,82,19,
|
||||
93,225,113,23,244,101,223,41,129,199,52,253,20,223,242,124,39,57,117,122,
|
||||
121,121,47,44,195,35,94,196,165,189,189,189,27,84,200,139,67,186,26,121,
|
||||
240,106,159,234,175,68,242,20,20,20,8,210,238,93,223,19,237,244,23,54,
|
||||
62,19,101,244,112,30,243,208,237,11,12,92,49,223,12,12,92,12,58,78,
|
||||
246,78,58,246,78,212,78,78,58,58,212,58,58,58,78,99,58,58,99,58,
|
||||
58,58,246,246,246,246,246,246,246,246,246,246,78,246,58,78,58,78,78,78,
|
||||
78,78,237,78,58,58,58,58,58,8,99,58,99,58,78,78,78,58,78,78,
|
||||
78,78,78,78,78,58,246,246,246,246,103,246,246,246,246,218,58,58,78,78,
|
||||
58,99,71,12,58,78,58,78,58,78,123,12,78,78,58,212,78,78,123,92,
|
||||
12,12,99,99,12,92,92,71,11,118,82,101,112,116,236,82,112,112,82,118,
|
||||
100,110,66,23,49,101,244,215,73,43,69,253,101,23,219,59,97,202,52,8,
|
||||
8,4,120,97,187,139,27,143,46,113,26,26,46,88,60,27,131,200,192,47,
|
||||
82,66,81,159,234,170,68,118,20,251,20,26,2,64,244,101,118,22,23,62,
|
||||
62,49,20,118,244,23,208,245,30,11,71,12,92,12,12,49,12,12,71,58,
|
||||
246,246,78,246,78,246,58,78,58,78,212,218,12,246,78,99,58,78,78,11,
|
||||
12,58,58,246,246,103,246,246,58,246,246,246,246,78,246,78,78,78,58,78,
|
||||
78,58,58,58,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78,
|
||||
78,212,78,246,246,78,99,58,246,246,246,246,246,246,71,12,99,58,58,99,
|
||||
58,58,53,251,71,78,78,78,78,246,19,19,71,246,246,78,212,246,12,92,
|
||||
12,12,12,12,92,12,12,71,218,118,19,101,244,239,65,223,244,11,53,112,
|
||||
222,235,66,112,223,20,72,45,90,221,8,253,19,242,214,97,57,152,26,8,
|
||||
26,188,57,187,139,186,8,8,8,8,121,121,8,8,26,4,44,131,94,67,
|
||||
162,82,113,44,159,76,220,29,82,0,20,8,98,238,245,82,82,237,23,62,
|
||||
54,112,20,223,237,49,22,245,237,11,71,49,12,92,12,12,12,12,71,78,
|
||||
246,58,246,58,246,78,246,58,246,212,58,19,101,218,78,78,99,58,58,53,
|
||||
101,71,58,246,246,246,78,71,92,58,246,246,212,246,78,58,58,78,78,58,
|
||||
78,78,78,78,58,58,58,58,58,8,99,99,58,99,58,78,78,58,99,58,
|
||||
78,78,58,246,78,58,71,92,218,246,246,246,103,246,12,92,92,58,58,58,
|
||||
58,218,63,53,19,246,246,78,78,212,53,92,92,212,246,78,78,58,92,218,
|
||||
12,12,92,92,92,12,12,71,11,118,101,101,22,116,242,223,237,11,8,30,
|
||||
17,62,70,112,8,53,72,172,134,143,8,20,223,109,102,57,97,81,121,82,
|
||||
252,114,35,157,165,26,253,8,8,46,182,4,26,26,8,8,113,160,190,35,
|
||||
186,66,121,106,117,152,232,68,49,79,20,8,26,42,17,223,53,22,112,244,
|
||||
54,244,8,82,30,118,30,245,30,11,99,12,12,92,123,12,12,12,71,78,
|
||||
246,78,246,78,58,246,246,58,246,58,12,53,53,12,78,78,78,99,12,63,
|
||||
63,92,78,78,246,246,78,229,229,12,246,246,246,212,78,71,71,58,78,78,
|
||||
58,78,78,58,58,58,212,58,58,8,99,58,58,58,58,78,78,58,99,218,
|
||||
99,58,246,78,78,58,12,92,12,78,246,246,246,218,92,92,19,71,58,58,
|
||||
58,12,38,92,53,71,246,58,246,218,108,92,92,218,246,212,78,58,12,218,
|
||||
12,12,12,92,12,92,12,71,71,118,82,8,103,116,242,82,244,11,82,30,
|
||||
222,210,223,23,8,101,55,172,183,186,8,253,223,110,102,157,97,161,8,8,
|
||||
127,67,190,140,189,26,8,8,69,127,120,5,52,26,26,8,121,9,84,187,
|
||||
43,113,82,98,142,152,89,119,244,20,0,253,121,219,64,23,101,30,30,23,
|
||||
54,244,82,101,30,112,112,72,237,71,30,12,12,92,118,12,12,12,71,58,
|
||||
246,246,58,246,58,212,78,246,58,246,108,63,53,19,78,78,78,58,53,101,
|
||||
53,108,78,246,246,246,108,79,20,53,246,246,246,78,99,92,92,12,99,78,
|
||||
78,58,58,218,218,218,99,58,58,8,99,99,58,58,58,99,99,218,71,11,
|
||||
99,99,78,246,212,71,218,71,92,71,246,246,246,71,92,92,19,19,58,58,
|
||||
58,92,53,92,92,108,58,246,246,71,92,92,92,92,212,246,246,58,123,48,
|
||||
12,12,12,92,92,12,12,12,99,118,19,101,237,116,65,49,30,112,82,244,
|
||||
222,235,26,118,82,101,65,136,183,7,8,8,82,242,21,157,57,192,69,8,
|
||||
26,7,191,157,190,60,9,8,26,52,84,131,60,4,121,8,26,113,67,94,
|
||||
142,113,82,98,43,152,10,119,244,251,0,253,121,111,64,23,101,244,22,49,
|
||||
62,62,82,101,112,23,112,103,30,71,11,12,12,118,12,12,118,12,71,78,
|
||||
78,246,78,58,218,58,78,246,246,12,53,101,53,19,58,78,58,12,63,63,
|
||||
53,63,218,246,246,71,79,20,63,101,218,246,246,218,12,19,108,12,99,58,
|
||||
99,71,218,71,71,218,71,218,71,8,99,58,99,99,58,58,11,218,71,218,
|
||||
71,71,218,58,58,99,218,99,71,92,218,78,246,92,92,12,223,53,71,58,
|
||||
58,19,19,92,92,19,12,78,78,12,92,92,92,92,71,78,78,218,123,241,
|
||||
48,12,12,92,49,12,118,12,71,49,223,101,11,116,65,66,112,11,82,112,
|
||||
100,54,66,66,223,20,244,105,90,159,8,8,8,244,10,167,187,202,98,8,
|
||||
121,47,192,169,190,35,195,188,188,195,57,84,106,47,8,8,8,122,195,140,
|
||||
95,66,82,98,142,221,175,119,244,251,251,20,8,219,64,112,101,30,242,118,
|
||||
23,62,19,20,11,118,112,22,11,11,99,12,12,12,12,71,12,118,71,58,
|
||||
246,58,246,99,12,99,212,78,58,19,53,53,101,53,58,78,218,53,101,53,
|
||||
53,63,218,246,246,63,0,101,19,53,12,78,58,12,108,92,19,108,92,71,
|
||||
71,12,71,71,123,71,71,123,71,8,99,99,58,58,58,11,58,11,99,218,
|
||||
99,11,99,99,218,99,218,99,71,12,12,99,99,92,92,92,12,19,53,71,
|
||||
99,38,53,12,12,92,19,218,212,92,92,92,48,12,108,128,246,218,123,48,
|
||||
128,123,12,12,12,12,12,118,71,71,223,8,112,41,55,49,49,244,223,49,
|
||||
93,231,70,82,223,20,82,116,181,158,252,8,20,223,242,214,57,157,156,46,
|
||||
8,66,26,147,44,198,86,196,86,198,44,52,4,8,8,8,46,60,97,194,
|
||||
52,82,82,180,159,177,232,64,66,79,20,8,26,231,100,49,8,237,62,23,
|
||||
62,244,82,82,30,223,11,237,112,11,11,12,12,71,12,12,118,12,71,218,
|
||||
246,78,58,218,92,99,246,212,92,53,79,79,53,53,218,58,19,63,38,126,
|
||||
53,101,92,58,19,251,63,223,19,19,92,71,12,223,92,223,223,92,19,92,
|
||||
12,71,123,71,71,71,71,71,71,8,11,58,11,58,99,58,99,58,99,58,
|
||||
58,218,218,218,99,218,11,99,99,71,92,92,12,49,92,71,99,12,53,53,
|
||||
92,20,53,123,48,12,92,19,218,19,92,12,241,48,92,92,58,218,92,241,
|
||||
128,212,71,12,118,12,12,71,71,112,223,19,82,55,116,112,49,244,223,19,
|
||||
208,238,235,66,223,253,82,22,250,73,95,113,8,82,49,111,102,207,132,188,
|
||||
252,69,8,121,162,4,47,52,127,4,4,26,26,8,8,46,186,86,169,95,
|
||||
66,8,4,95,192,87,45,236,101,251,253,8,70,222,236,223,223,237,244,23,
|
||||
54,244,82,82,237,118,11,244,71,11,99,71,118,12,12,12,12,12,12,58,
|
||||
78,78,246,123,108,12,212,12,53,63,13,83,63,53,12,92,53,226,13,13,
|
||||
53,53,53,226,75,63,12,71,92,19,19,92,92,92,19,12,12,12,92,12,
|
||||
71,71,71,71,71,12,71,71,71,8,99,99,58,99,99,58,58,99,58,58,
|
||||
11,218,71,71,11,218,99,99,58,218,12,19,92,92,92,99,78,58,92,101,
|
||||
75,251,53,12,123,48,92,108,101,63,92,12,241,241,92,92,108,92,108,128,
|
||||
212,246,58,12,12,12,49,12,12,118,12,49,19,237,116,22,49,118,244,82,
|
||||
112,17,231,70,223,82,20,82,93,45,133,7,46,8,8,49,50,224,168,207,
|
||||
142,60,127,46,8,26,8,8,8,8,8,8,121,26,47,192,166,169,7,113,
|
||||
66,113,7,156,36,217,28,23,251,251,20,26,111,222,30,8,49,22,112,62,
|
||||
242,112,101,112,30,49,244,11,112,11,99,71,12,12,118,12,12,12,71,246,
|
||||
246,78,212,92,108,92,218,53,38,13,0,0,63,101,20,63,101,75,83,83,
|
||||
63,101,229,79,126,92,58,78,12,19,92,92,19,92,12,71,71,118,71,71,
|
||||
218,12,71,71,71,71,71,218,99,8,218,99,218,58,58,218,99,99,58,99,
|
||||
58,58,99,99,218,99,218,99,58,58,99,92,92,92,19,58,78,78,99,108,
|
||||
0,34,38,123,123,48,123,92,53,108,92,12,241,241,241,123,92,19,19,123,
|
||||
241,212,246,99,12,71,12,71,12,71,118,223,82,118,245,100,112,49,30,118,
|
||||
223,237,238,111,113,223,19,20,49,93,144,184,44,113,8,253,19,210,173,141,
|
||||
168,57,196,142,60,52,122,182,113,113,122,3,60,159,130,86,43,122,26,223,
|
||||
47,106,95,76,89,68,244,20,251,20,8,210,238,72,223,19,30,112,23,62,
|
||||
244,223,20,118,112,112,244,118,11,99,99,218,71,218,71,12,12,71,58,58,
|
||||
78,246,246,92,63,53,53,101,83,0,83,83,53,63,63,53,20,83,0,0,
|
||||
53,53,79,0,226,78,58,78,12,108,92,19,92,71,58,58,99,71,71,123,
|
||||
71,218,218,71,218,218,99,218,99,8,99,99,218,218,99,99,99,99,58,99,
|
||||
99,58,99,11,71,99,99,58,58,58,58,71,92,92,19,78,78,58,78,218,
|
||||
53,63,101,123,123,48,48,123,92,19,92,92,241,241,241,241,92,92,92,12,
|
||||
241,212,78,78,123,118,12,12,12,12,112,92,49,223,30,247,65,49,23,112,
|
||||
82,23,72,231,14,26,82,19,101,49,17,146,102,154,147,69,8,82,49,23,
|
||||
249,104,158,39,206,169,86,130,202,142,202,114,39,117,76,88,4,66,66,113,
|
||||
7,95,234,175,68,22,101,20,251,8,4,107,100,112,101,112,30,23,112,62,
|
||||
49,101,49,244,118,112,112,118,11,78,99,99,99,58,71,12,92,99,246,78,
|
||||
246,58,218,108,108,53,63,229,0,83,34,13,53,53,101,38,13,0,0,13,
|
||||
53,101,63,101,99,78,58,78,71,19,19,92,71,58,99,58,11,218,218,71,
|
||||
99,99,99,99,218,58,99,218,218,8,71,218,99,99,218,58,99,99,99,99,
|
||||
99,58,99,58,99,218,11,58,58,99,58,58,71,92,92,58,78,78,78,78,
|
||||
118,19,53,123,48,128,128,48,123,12,92,92,48,128,212,48,241,12,12,92,
|
||||
241,128,246,246,246,71,12,12,12,71,71,118,49,223,49,208,116,22,49,23,
|
||||
11,223,223,72,225,235,113,82,82,101,49,65,68,164,201,7,162,26,8,121,
|
||||
66,223,23,216,14,36,177,152,154,152,80,255,98,66,66,223,66,4,32,152,
|
||||
152,163,228,222,112,251,20,20,8,113,219,222,22,82,23,22,62,112,54,244,
|
||||
101,82,112,112,23,118,112,11,11,78,58,58,246,99,71,71,99,58,246,212,
|
||||
58,58,123,108,108,53,20,13,101,19,34,13,53,53,53,0,75,38,0,34,
|
||||
63,53,53,71,58,78,58,78,11,92,92,71,58,58,58,58,99,218,11,99,
|
||||
11,58,218,218,99,99,218,99,99,8,99,71,99,99,99,99,99,218,58,99,
|
||||
218,58,99,99,99,58,58,78,58,99,58,58,58,71,12,78,78,78,78,78,
|
||||
58,12,19,12,48,218,246,218,48,12,92,92,241,48,58,212,48,241,12,92,
|
||||
48,241,212,58,212,212,123,118,12,71,118,118,12,223,49,118,55,239,244,223,
|
||||
112,112,82,118,236,225,14,4,26,82,101,19,112,93,153,21,224,174,88,162,
|
||||
26,26,121,82,66,66,66,66,66,66,26,82,66,26,113,127,32,44,51,87,
|
||||
248,222,236,223,20,20,20,8,70,111,17,237,223,49,237,30,62,54,30,118,
|
||||
253,49,112,118,23,118,118,11,99,58,58,58,212,99,71,218,246,78,78,58,
|
||||
58,58,108,108,63,38,13,92,58,12,13,251,53,63,251,79,12,71,34,34,
|
||||
251,53,19,58,78,78,78,58,58,71,71,58,99,99,58,99,58,11,58,99,
|
||||
99,99,99,218,218,99,218,218,99,8,71,99,218,218,218,99,218,99,99,99,
|
||||
99,71,58,99,99,99,99,58,58,99,58,58,78,58,99,78,58,78,58,78,
|
||||
78,78,99,218,128,58,58,78,128,48,12,92,123,241,78,246,58,48,241,218,
|
||||
12,128,212,212,58,58,212,218,71,12,71,12,118,12,223,49,11,243,55,244,
|
||||
49,112,244,223,49,236,17,111,4,121,82,82,8,223,244,29,153,61,148,234,
|
||||
152,32,147,52,4,4,113,26,113,26,98,98,147,255,7,193,24,163,217,238,
|
||||
110,112,101,20,20,253,8,70,107,222,22,223,223,244,244,244,244,242,112,82,
|
||||
223,118,23,23,49,118,71,11,58,58,58,246,246,58,99,78,58,212,212,78,
|
||||
58,99,53,53,38,83,19,58,246,19,34,79,251,34,34,71,58,71,79,13,
|
||||
83,63,218,58,58,99,58,78,58,99,78,58,99,99,99,58,58,99,99,58,
|
||||
218,11,218,99,11,218,11,99,71,8,71,218,218,11,71,99,218,99,99,99,
|
||||
99,218,11,99,58,58,58,58,11,58,99,218,58,58,78,78,78,78,58,58,
|
||||
78,78,78,78,58,78,78,78,58,58,48,123,48,48,128,78,246,78,128,241,
|
||||
241,241,128,212,58,58,58,58,218,12,118,71,71,112,118,223,49,11,245,55,
|
||||
30,49,112,244,223,19,30,93,107,111,4,26,101,101,8,101,112,242,93,203,
|
||||
6,170,21,74,51,51,104,24,234,76,24,104,76,124,232,56,225,18,30,223,
|
||||
20,20,20,20,8,66,235,231,236,112,223,118,30,112,112,54,244,112,82,49,
|
||||
112,23,118,118,12,11,99,99,246,58,58,58,78,58,246,246,78,78,212,78,
|
||||
58,12,53,229,34,40,78,78,58,38,0,13,13,79,71,58,58,71,13,0,
|
||||
38,71,58,99,58,99,58,99,78,58,58,99,99,99,71,99,58,99,218,99,
|
||||
71,99,218,99,99,71,218,99,71,8,71,71,71,123,218,218,11,218,218,218,
|
||||
218,99,218,218,99,99,99,99,58,99,99,99,99,99,58,78,78,58,58,99,
|
||||
99,78,78,246,78,212,78,78,58,78,128,48,48,241,48,246,78,58,246,128,
|
||||
128,128,128,128,212,78,212,78,58,218,71,71,12,12,118,118,49,49,112,208,
|
||||
41,22,49,112,244,23,19,49,22,93,219,14,4,8,82,101,20,101,223,49,
|
||||
30,65,18,29,17,203,228,230,56,96,91,225,225,236,242,112,49,82,20,20,
|
||||
20,20,82,113,210,107,29,22,118,223,112,30,244,244,62,112,23,82,223,49,
|
||||
118,118,49,49,118,71,99,246,58,58,212,246,246,78,212,58,246,246,78,58,
|
||||
218,53,209,126,40,78,78,78,218,0,34,34,79,71,78,99,58,71,251,229,
|
||||
12,58,99,99,99,58,58,58,58,99,99,99,99,218,99,58,99,99,99,218,
|
||||
99,218,11,218,218,11,218,71,71,8,71,123,71,71,218,123,71,99,11,99,
|
||||
218,11,99,71,218,99,58,99,99,58,218,218,99,99,58,58,58,58,99,58,
|
||||
58,99,58,246,246,246,78,58,58,58,78,58,48,48,241,78,246,78,78,58,
|
||||
58,241,241,241,212,58,246,78,246,58,218,71,71,71,118,118,118,49,49,112,
|
||||
103,243,236,112,49,244,112,49,223,118,65,93,107,14,98,113,82,8,101,253,
|
||||
101,20,101,82,82,223,118,118,49,49,49,82,82,101,101,20,20,253,253,121,
|
||||
26,70,235,110,29,103,118,223,223,11,244,244,54,242,244,49,19,223,49,118,
|
||||
118,49,12,71,11,99,212,246,78,78,78,78,212,246,78,58,78,212,78,58,
|
||||
12,38,213,71,78,58,58,78,40,83,79,20,99,58,99,58,99,12,92,71,
|
||||
78,58,99,99,99,99,99,99,99,99,218,218,99,218,218,99,218,218,11,218,
|
||||
11,218,218,71,218,218,71,123,71,8,71,71,12,71,71,218,218,218,71,71,
|
||||
218,218,218,218,71,218,218,99,99,218,99,99,99,99,99,99,58,99,58,99,
|
||||
99,99,99,58,78,78,78,78,58,99,58,58,58,128,48,128,78,78,58,78,
|
||||
212,212,212,241,128,58,246,246,58,246,58,218,218,118,71,71,118,12,118,49,
|
||||
23,237,245,55,208,23,118,23,112,223,223,118,244,236,18,110,14,210,4,66,
|
||||
121,8,82,20,82,101,101,251,20,20,20,101,8,20,8,8,26,26,210,235,
|
||||
109,110,65,30,118,223,49,244,244,244,244,242,65,30,223,82,49,118,118,49,
|
||||
92,49,118,71,11,78,246,78,58,246,212,246,78,78,246,78,246,78,212,218,
|
||||
53,92,99,78,58,58,58,246,53,0,53,99,99,58,99,58,99,71,218,58,
|
||||
99,58,99,218,58,99,58,78,99,99,11,99,71,99,99,218,99,99,218,71,
|
||||
123,218,71,218,12,71,71,71,71,8,71,71,71,71,71,118,71,71,218,99,
|
||||
71,71,71,123,71,71,218,99,99,218,218,71,11,218,99,99,58,99,58,99,
|
||||
99,99,218,58,58,78,78,78,58,99,99,58,58,58,58,128,246,78,58,58,
|
||||
58,58,246,128,128,58,212,246,78,78,78,58,58,218,71,71,11,118,118,49,
|
||||
12,23,11,103,243,72,237,23,23,112,23,223,19,223,112,22,109,18,29,111,
|
||||
111,210,210,70,4,26,26,26,26,26,26,4,4,70,98,235,2,18,29,65,
|
||||
54,23,223,49,23,244,244,112,244,54,22,244,118,82,223,223,118,92,49,49,
|
||||
223,71,11,99,99,78,246,58,246,78,58,212,78,78,58,58,246,78,58,218,
|
||||
71,78,58,58,99,58,58,99,19,77,58,58,58,218,99,58,58,58,58,58,
|
||||
218,99,11,218,58,99,218,58,218,218,71,218,218,71,99,71,218,71,71,218,
|
||||
71,123,71,71,71,71,71,71,12,8,118,118,71,71,118,71,71,71,118,12,
|
||||
71,123,71,71,71,71,71,71,218,99,99,99,218,218,71,218,99,99,58,99,
|
||||
99,218,99,218,58,58,246,78,78,99,99,99,99,58,246,78,58,246,58,58,
|
||||
58,58,58,78,78,58,58,58,246,212,99,58,58,58,218,99,71,118,11,118,
|
||||
49,49,49,23,11,208,55,245,22,112,23,23,23,23,49,49,49,223,112,30,
|
||||
22,236,18,18,18,29,18,18,18,18,107,236,29,236,236,22,30,23,223,223,
|
||||
223,118,118,112,244,112,244,242,242,30,23,223,82,223,49,49,49,223,49,12,
|
||||
71,71,99,58,246,212,58,58,58,78,78,78,58,58,58,58,78,212,246,78,
|
||||
78,58,58,11,99,58,78,78,99,58,58,99,218,99,58,99,58,58,58,218,
|
||||
99,71,218,99,218,58,99,218,218,71,218,123,71,99,71,218,71,71,71,12,
|
||||
71,71,12,12,12,12,12,12,12,8,12,12,12,12,12,12,118,118,71,71,
|
||||
71,218,71,123,71,71,71,71,123,71,218,11,218,71,218,123,218,99,218,58,
|
||||
99,99,11,218,71,99,99,58,78,58,99,99,71,99,58,78,246,246,246,58,
|
||||
58,218,58,99,78,78,246,78,78,246,58,58,58,212,58,58,99,71,71,118,
|
||||
71,118,118,23,49,112,112,103,72,72,65,244,112,23,118,118,70,223,223,223,
|
||||
223,49,118,23,118,112,112,244,112,112,23,23,23,49,49,223,223,49,23,118,
|
||||
244,244,112,62,244,109,22,30,49,223,223,82,49,223,49,223,223,118,118,71,
|
||||
99,99,99,78,78,246,58,58,78,78,58,58,58,99,78,246,78,78,78,78,
|
||||
99,99,99,58,99,58,78,78,58,99,99,11,218,99,99,58,58,11,99,218,
|
||||
218,218,71,99,218,218,11,218,123,71,218,71,71,218,71,71,123,71,118,12,
|
||||
71,12,12,12,12,12,12,12,12,8,12,12,12,12,12,12,71,71,71,118,
|
||||
71,118,71,71,118,12,71,71,71,71,99,218,123,71,218,71,218,71,99,99,
|
||||
99,218,218,71,218,218,99,58,58,58,58,218,99,218,218,99,58,99,78,58,
|
||||
58,99,99,99,58,58,78,246,246,78,78,78,58,99,58,58,99,58,99,71,
|
||||
11,71,12,23,118,118,118,23,112,30,103,208,208,65,242,112,118,23,23,118,
|
||||
118,118,49,112,23,112,11,112,112,112,118,49,49,49,49,112,23,23,112,244,
|
||||
244,22,22,22,242,112,49,223,223,66,223,49,223,49,223,49,12,71,71,99,
|
||||
99,58,212,212,246,58,78,78,58,58,99,99,99,58,78,78,78,78,58,58,
|
||||
99,99,99,58,58,58,58,58,99,218,71,218,99,99,218,58,99,99,71,218,
|
||||
71,71,218,99,71,99,123,71,118,118,123,71,71,123,71,71,12,12,118,12,
|
||||
12,12,12,12,12,12,71,12,71,8,12,92,12,92,71,12,118,118,12,12,
|
||||
118,71,71,12,71,71,118,12,12,71,118,218,71,71,71,12,71,12,218,218,
|
||||
99,99,218,218,71,71,71,218,99,99,99,99,71,71,218,71,99,58,58,58,
|
||||
58,58,99,11,99,99,99,58,246,78,246,78,58,99,99,99,58,58,99,99,
|
||||
99,11,71,112,112,118,118,92,118,23,118,112,30,237,103,65,65,22,30,54,
|
||||
244,244,23,112,244,112,244,112,244,23,244,23,112,62,244,244,30,242,22,242,
|
||||
22,30,23,49,49,19,82,223,223,49,49,49,223,49,12,11,11,218,99,58,
|
||||
58,78,78,78,246,78,78,99,99,58,99,58,58,78,78,78,58,99,218,218,
|
||||
71,99,99,99,58,99,58,99,71,123,71,218,99,99,218,99,218,71,12,71,
|
||||
71,218,71,71,218,71,71,71,71,71,12,71,71,71,118,12,12,12,71,71,
|
||||
12,12,12,12,118,12,12,92,12,8,12,12,71,12,12,12,12,12,71,12,
|
||||
118,12,12,12,118,12,71,12,12,71,71,71,71,123,71,12,12,71,71,218,
|
||||
218,218,11,71,123,71,71,218,71,99,99,58,99,99,71,218,218,99,218,58,
|
||||
58,58,58,99,218,71,99,218,58,58,58,246,212,58,58,99,99,58,99,58,
|
||||
58,58,58,218,71,71,112,71,118,118,49,23,118,118,49,112,112,30,237,22,
|
||||
22,22,103,22,22,22,22,22,30,242,22,22,22,103,22,22,30,112,112,23,
|
||||
49,49,49,82,223,66,49,49,49,49,223,12,118,71,218,99,99,58,99,58,
|
||||
78,246,78,246,58,58,99,99,218,218,99,99,99,58,58,58,99,218,71,218,
|
||||
99,99,58,58,58,99,218,123,71,71,218,218,99,99,99,123,71,71,71,92,
|
||||
71,71,218,218,71,12,12,12,118,71,12,118,71,71,71,12,12,12,12,12,
|
||||
12,12,118,118,12,12,12,12,12,8,92,92,92,12,12,12,12,12,12,12,
|
||||
92,12,12,12,71,12,118,12,12,12,12,12,71,71,71,12,12,71,118,71,
|
||||
71,123,71,71,71,118,71,71,71,123,71,218,218,99,218,71,12,71,71,218,
|
||||
218,58,58,99,58,71,71,218,218,218,99,58,58,58,58,58,99,99,99,218,
|
||||
218,99,58,58,99,99,99,11,11,11,23,112,118,112,49,118,118,118,23,118,
|
||||
49,118,23,112,112,112,112,244,112,112,118,112,118,49,49,223,49,223,223,49,
|
||||
223,223,49,49,223,49,223,223,118,118,71,11,218,99,218,99,218,78,58,58,
|
||||
58,58,58,218,218,218,218,218,58,99,58,58,58,58,218,99,71,71,123,71,
|
||||
218,99,58,99,99,71,71,12,12,71,71,71,218,218,218,71,118,71,71,12,
|
||||
123,71,12,71,71,12,12,12,118,71,12,12,12,118,118,12,71,118,12,118,
|
||||
12,12,12,12,12,92,12,12,92,8,92,92,12,12,92,12,92,12,12,12,
|
||||
12,12,118,12,12,12,12,12,12,12,118,12,12,71,118,71,12,12,71,118,
|
||||
71,71,71,123,218,118,12,71,71,71,71,99,99,218,218,71,71,71,71,71,
|
||||
99,218,99,58,99,218,218,71,71,71,218,71,58,99,58,58,99,58,218,99,
|
||||
99,218,99,99,58,58,58,99,58,99,218,11,71,112,11,112,118,23,118,23,
|
||||
49,118,118,92,49,92,49,92,49,92,49,223,223,49,223,49,49,49,49,82,
|
||||
49,49,49,223,118,118,71,71,11,71,99,218,218,99,58,58,58,58,58,58,
|
||||
58,218,218,218,71,218,218,99,99,99,99,58,218,218,71,123,71,71,218,11,
|
||||
99,99,218,218,71,71,12,71,12,218,218,218,71,218,118,12,71,118,71,71,
|
||||
71,71,71,71,118,71,12,12,12,71,12,12,12,12,12,12,12,49,12,12,
|
||||
12,92,12,49,12,92,12,12,92,8,92,92,92,92,92,12,92,12,12,92,
|
||||
12,92,12,92,12,71,71,12,12,12,12,71,12,118,71,118,71,118,12,12,
|
||||
12,12,71,71,218,71,71,118,118,12,12,118,71,218,71,218,123,12,12,12,
|
||||
12,71,71,99,99,99,218,71,71,71,71,123,71,218,218,58,99,99,58,218,
|
||||
99,218,218,11,99,218,99,218,218,58,58,58,99,218,71,11,71,71,118,11,
|
||||
112,71,112,118,112,12,118,118,118,118,118,118,118,118,118,118,223,223,49,49,
|
||||
118,118,118,71,71,71,218,71,218,71,99,99,99,218,58,58,58,218,218,218,
|
||||
218,71,71,218,123,71,218,99,58,218,218,99,71,118,12,71,71,71,218,218,
|
||||
218,99,71,118,12,12,12,71,71,123,71,71,71,12,118,12,92,71,118,71,
|
||||
12,12,71,12,12,92,12,12,12,118,12,12,12,12,12,92,12,12,12,92,
|
||||
71,92,12,92,92,92,92,92,12,8,92,92,92,92,92,92,92,92,92,12,
|
||||
92,12,92,12,92,92,12,118,92,12,12,92,92,12,12,12,12,12,12,12,
|
||||
12,12,71,118,12,118,71,71,12,12,12,12,118,71,218,71,218,71,118,12,
|
||||
12,71,12,71,218,71,99,218,123,71,71,12,71,118,71,71,99,218,218,99,
|
||||
218,99,218,218,218,71,123,71,218,218,218,218,99,99,99,58,99,99,99,218,
|
||||
99,71,71,71,11,71,11,11,11,11,11,11,11,11,71,118,12,118,218,218,
|
||||
71,218,71,71,218,71,99,71,99,99,99,58,218,99,218,218,71,71,71,71,
|
||||
71,71,123,71,11,99,99,99,218,218,71,71,12,12,12,71,123,218,71,218,
|
||||
71,118,71,12,118,12,12,71,71,218,118,12,12,12,92,12,71,118,71,71,
|
||||
12,71,92,12,92,12,12,12,118,12,12,92,92,12,92,12,92,92,92,92,
|
||||
92,92,92,92,12,92,92,92,92,8,92,92,92,12,92,92,92,92,92,92,
|
||||
92,92,92,12,92,92,12,12,92,92,92,12,92,92,12,12,118,12,12,92,
|
||||
92,12,12,12,71,71,71,118,12,118,12,12,12,71,12,71,71,71,71,12,
|
||||
12,12,118,12,12,118,218,71,71,71,12,71,71,71,12,12,71,71,71,11,
|
||||
218,99,218,218,218,218,71,71,71,71,71,71,71,71,218,218,218,218,99,218,
|
||||
218,218,99,218,99,218,218,218,218,218,218,218,218,99,218,11,218,71,71,71,
|
||||
71,123,71,123,71,218,99,218,218,11,218,99,71,71,71,71,71,71,71,92,
|
||||
71,71,71,123,71,218,71,71,71,118,12,12,12,12,71,71,71,218,71,71,
|
||||
12,12,12,12,12,12,12,71,71,71,12,12,12,12,12,12,12,12,118,12,
|
||||
12,92,92,92,12,92,12,71,12,92,92,12,92,92,92,92,92,12,92,92,
|
||||
92,92,92,92,92,92,92,92,92,8,92,19,92,92,92,92,92,223,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,12,118,12,12,
|
||||
12,92,92,12,92,12,12,12,71,12,49,12,92,92,12,12,71,12,12,12,
|
||||
12,71,12,12,12,12,71,12,71,71,218,218,71,118,12,12,12,71,12,12,
|
||||
71,123,71,71,99,71,71,123,71,123,71,123,71,71,71,71,71,71,71,71,
|
||||
71,218,218,218,71,71,218,71,218,71,218,71,71,123,71,123,71,123,71,123,
|
||||
218,71,218,218,218,218,71,71,71,71,71,12,12,12,12,12,12,12,71,71,
|
||||
71,123,218,218,71,71,12,12,12,71,12,12,12,12,71,71,71,12,118,12,
|
||||
12,92,12,12,12,12,12,12,71,12,92,12,92,12,12,118,12,12,12,92,
|
||||
92,92,92,92,92,12,92,92,12,92,92,92,92,19,12,92,92,92,92,92,
|
||||
12,92,92,92,92,92,92,92,92,8,19,108,19,108,12,19,92,92,92,92,
|
||||
92,92,92,92,92,19,92,92,92,92,92,92,92,92,92,92,92,92,12,92,
|
||||
92,92,92,92,92,92,12,12,12,12,71,12,92,92,92,92,12,92,118,12,
|
||||
12,12,12,12,92,12,12,12,71,12,71,71,71,12,12,12,12,12,12,92,
|
||||
112,118,71,12,71,71,71,218,71,71,71,71,71,71,12,12,12,12,12,12,
|
||||
12,118,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,
|
||||
71,71,71,71,71,71,71,71,118,71,12,71,12,12,12,12,12,71,71,123,
|
||||
71,71,71,92,12,12,12,12,92,92,71,12,12,12,12,71,12,12,92,12,
|
||||
92,92,12,118,12,12,118,12,12,92,92,92,92,12,12,12,12,92,92,92,
|
||||
92,12,92,12,92,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,92,12,19,19,108,92,8,92,92,19,92,108,92,19,92,92,92,
|
||||
92,108,92,92,92,12,92,92,12,92,92,92,92,92,92,92,92,92,92,12,
|
||||
12,92,92,92,92,223,12,92,12,12,12,12,12,92,92,12,92,12,12,12,
|
||||
12,12,12,12,49,12,92,92,92,92,12,12,71,12,12,12,12,12,12,12,
|
||||
92,92,118,92,12,12,118,12,12,12,12,12,12,71,12,12,12,12,12,12,
|
||||
12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
|
||||
12,12,118,118,12,118,12,12,12,12,12,12,12,12,12,12,12,12,71,12,
|
||||
12,12,71,92,12,92,92,49,12,12,12,12,118,12,12,118,92,12,92,92,
|
||||
12,12,12,12,123,12,92,92,92,92,92,92,12,92,12,92,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,12,92,92,92,19,92,92,108,
|
||||
92,19,92,108,108,92,108,92,108,8,19,108,19,92,19,108,108,108,92,19,
|
||||
92,92,19,92,108,108,92,108,108,92,92,92,92,92,92,19,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,92,92,92,92,
|
||||
92,12,12,12,12,12,12,92,92,92,92,92,92,12,12,12,12,12,118,12,
|
||||
12,12,12,92,12,12,12,12,71,12,12,12,12,71,71,12,12,71,118,118,
|
||||
12,12,12,12,12,118,12,12,12,92,12,12,12,12,12,71,12,12,118,12,
|
||||
12,71,12,12,12,12,12,92,118,118,12,12,12,12,71,12,12,12,49,12,
|
||||
92,12,92,92,92,12,92,12,12,12,12,12,92,92,92,92,92,92,92,92,
|
||||
12,12,71,92,92,92,12,92,223,92,92,92,12,92,92,92,92,92,12,19,
|
||||
92,92,92,92,92,92,108,92,108,19,92,108,108,108,92,92,19,108,92,108,
|
||||
19,92,19,92,108,92,108,19,19,8,19,108,19,108,108,19,92,19,108,19,
|
||||
19,108,108,19,19,92,108,92,92,108,19,12,108,108,92,19,108,108,92,19,
|
||||
92,92,92,92,92,92,108,19,92,92,92,92,12,92,92,92,92,92,92,92,
|
||||
92,92,92,12,12,118,123,92,12,12,92,92,92,92,92,92,12,12,12,12,
|
||||
12,92,12,12,92,12,92,92,92,92,92,92,12,12,12,12,12,12,12,71,
|
||||
71,12,12,12,12,12,12,12,71,12,12,12,12,12,12,92,12,12,92,12,
|
||||
92,12,12,49,12,92,12,12,12,12,12,71,12,12,12,12,92,12,92,12,
|
||||
92,92,92,92,92,12,12,12,12,92,12,12,92,92,92,92,92,92,12,12,
|
||||
12,92,92,92,92,19,108,92,92,92,92,92,92,92,92,19,92,108,108,92,
|
||||
92,92,92,19,108,92,19,108,92,108,108,92,19,92,108,19,108,92,108,92,
|
||||
19,108,108,92,108,108,19,92,108,8,19,19,19,19,19,108,19,19,108,92,
|
||||
19,19,108,92,19,19,108,19,108,92,108,19,92,19,92,92,92,19,92,92,
|
||||
92,92,92,92,92,92,19,108,92,19,19,92,92,92,92,92,92,92,223,92,
|
||||
223,92,92,92,92,92,92,92,92,92,92,92,92,223,92,92,92,12,92,12,
|
||||
12,12,12,12,92,12,12,92,12,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,12,92,49,92,12,92,92,12,12,92,12,92,12,92,12,12,92,12,
|
||||
12,12,12,12,12,12,12,92,92,92,12,92,92,92,92,92,92,92,92,92,
|
||||
92,92,12,12,12,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,12,19,92,92,108,12,92,92,92,12,19,92,92,108,92,19,19,92,
|
||||
92,92,92,92,108,19,92,19,19,92,92,108,108,92,108,92,19,19,19,108,
|
||||
19,19,19,19,19,19,108,19,19,8,19,53,19,53,19,53,19,53,19,108,
|
||||
19,108,19,108,108,108,19,108,19,108,19,108,108,108,108,19,108,19,108,19,
|
||||
19,92,108,19,19,12,108,92,108,92,108,19,108,92,92,92,92,92,92,19,
|
||||
92,19,108,92,19,92,92,92,92,92,92,92,92,92,92,92,108,108,19,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,92,12,92,92,92,12,92,19,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,108,19,92,92,223,92,92,92,92,92,92,
|
||||
19,108,108,108,108,19,92,92,92,92,108,108,108,108,108,92,108,92,108,19,
|
||||
92,19,108,108,19,108,108,108,108,108,19,19,19,19,19,19,108,108,53,19,
|
||||
108,19,108,53,19,53,19,53,19,8,19,19,19,19,19,19,19,19,19,19,
|
||||
19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,108,19,108,19,
|
||||
19,19,19,19,108,19,108,19,108,19,108,19,19,19,19,108,19,92,92,92,
|
||||
19,19,108,19,108,19,19,92,92,92,92,92,92,92,92,19,19,108,19,108,
|
||||
19,92,19,92,92,92,92,92,92,92,92,92,92,92,92,19,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,19,19,19,92,19,19,92,19,19,108,92,92,92,19,92,92,92,
|
||||
92,92,92,92,92,19,19,19,19,108,19,108,92,92,92,92,92,92,19,19,
|
||||
92,19,223,19,108,19,108,92,19,19,19,19,19,19,108,19,108,19,108,19,
|
||||
19,19,19,19,19,19,19,19,19,108,19,108,19,108,19,19,19,19,19,19,
|
||||
19,19,19,19,19,19,19,19,19,8};
|
|
@ -1,6 +0,0 @@
|
|||
Makefile.in
|
||||
Makefile
|
||||
.deps
|
||||
_libs
|
||||
.libs
|
||||
DigitalSignature
|
File diff suppressed because it is too large
Load Diff
|
@ -1,70 +0,0 @@
|
|||
-------------------------------------------
|
||||
GIMP-Plug-In (Digital Signature)
|
||||
-------------------------------------------
|
||||
Written by Daniel Cotting
|
||||
Bahnhofstrasse 31
|
||||
CH-3066 Stettlen (Switzerland)
|
||||
|
||||
cotting@mygale.org
|
||||
www.mygale.org/~cotting
|
||||
-------------------------------------------
|
||||
Some code is taken out of other plug-ins
|
||||
written by other authors.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
INSTALLATION
|
||||
-------------------------------------------
|
||||
To install it, you have to edit the
|
||||
Makefile (change install-path).
|
||||
Afterwards run make. This will compile
|
||||
and install the plug-in in the right
|
||||
directory. Once the new code is installed,
|
||||
you can run the GIMP and enjoy the new
|
||||
functions and effects it provides.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
REDUCE CODE SIZE
|
||||
-------------------------------------------
|
||||
If you find that the plug-in is too big,
|
||||
you can compress the executables with the
|
||||
gzexe program (if it is avaiable on your
|
||||
system). To do so, change to the plug-in
|
||||
directory of the GIMP...
|
||||
|
||||
cd /usr/local/lib/gimp/VERSION/plug-ins
|
||||
|
||||
...and execute the command...
|
||||
|
||||
gzexe PLUGIN_NAME
|
||||
|
||||
...and remember to remove the uncompres-
|
||||
sed binary, which has been renamed to
|
||||
PLUGIN_NAME~, by running the command:
|
||||
|
||||
rm PLUGIN_NAME~
|
||||
|
||||
This will result in a code size of about
|
||||
20 kB, which isn't too much IMHO.
|
||||
------------------------------------------
|
||||
|
||||
|
||||
------------------------------------------
|
||||
FEEDBACK
|
||||
------------------------------------------
|
||||
I'm interested in any feedback, comments,
|
||||
bug-reports, suggestions etc. If you
|
||||
have anything you would like to tell
|
||||
me, you can write to cotting@mygale.org.
|
||||
Also have a look at the GIMP-section of
|
||||
my homepage at www.mygale.org/~cotting.
|
||||
------------------------------------------
|
||||
|
||||
Thank you and happy GIMPing!
|
||||
Daniel Cotting
|
||||
|
||||
------------------------------------------
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
pluginlibdir = $(gimpplugindir)/plug-ins
|
||||
|
||||
pluginlib_PROGRAMS = DigitalSignature
|
||||
|
||||
DigitalSignature_SOURCES = \
|
||||
DigitalSignature.c logo.h
|
||||
|
||||
INCLUDES = \
|
||||
$(X_CFLAGS) \
|
||||
-I$(top_srcdir) \
|
||||
-I$(includedir)
|
||||
|
||||
LDADD = \
|
||||
$(top_builddir)/libgimp/libgimpui.la \
|
||||
$(top_builddir)/libgimp/libgimp.la \
|
||||
$(X_LIBS) \
|
||||
-lc
|
||||
|
||||
DEPS = \
|
||||
$(top_builddir)/libgimp/libgimpui.la \
|
||||
$(top_builddir)/libgimp/libgimp.la
|
||||
|
||||
DigitalSignature_DEPENDENCIES = $(DEPS)
|
||||
|
||||
.PHONY: files
|
||||
|
||||
files:
|
||||
@files=`ls $(DISTFILES) 2> /dev/null`; for p in $$files; do \
|
||||
echo $$p; \
|
||||
done
|
||||
@for subdir in $(SUBDIRS); do \
|
||||
files=`cd $$subdir; $(MAKE) files | grep -v "make\[[1-9]\]"`; \
|
||||
for file in $$files; do \
|
||||
echo $$subdir/$$file; \
|
||||
done; \
|
||||
done
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,70 +0,0 @@
|
|||
-------------------------------------------
|
||||
GIMP-Plug-In (Digital Signature)
|
||||
-------------------------------------------
|
||||
Written by Daniel Cotting
|
||||
Bahnhofstrasse 31
|
||||
CH-3066 Stettlen (Switzerland)
|
||||
|
||||
cotting@mygale.org
|
||||
www.mygale.org/~cotting
|
||||
-------------------------------------------
|
||||
Some code is taken out of other plug-ins
|
||||
written by other authors.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
INSTALLATION
|
||||
-------------------------------------------
|
||||
To install it, you have to edit the
|
||||
Makefile (change install-path).
|
||||
Afterwards run make. This will compile
|
||||
and install the plug-in in the right
|
||||
directory. Once the new code is installed,
|
||||
you can run the GIMP and enjoy the new
|
||||
functions and effects it provides.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
REDUCE CODE SIZE
|
||||
-------------------------------------------
|
||||
If you find that the plug-in is too big,
|
||||
you can compress the executables with the
|
||||
gzexe program (if it is avaiable on your
|
||||
system). To do so, change to the plug-in
|
||||
directory of the GIMP...
|
||||
|
||||
cd /usr/local/lib/gimp/VERSION/plug-ins
|
||||
|
||||
...and execute the command...
|
||||
|
||||
gzexe PLUGIN_NAME
|
||||
|
||||
...and remember to remove the uncompres-
|
||||
sed binary, which has been renamed to
|
||||
PLUGIN_NAME~, by running the command:
|
||||
|
||||
rm PLUGIN_NAME~
|
||||
|
||||
This will result in a code size of about
|
||||
20 kB, which isn't too much IMHO.
|
||||
------------------------------------------
|
||||
|
||||
|
||||
------------------------------------------
|
||||
FEEDBACK
|
||||
------------------------------------------
|
||||
I'm interested in any feedback, comments,
|
||||
bug-reports, suggestions etc. If you
|
||||
have anything you would like to tell
|
||||
me, you can write to cotting@mygale.org.
|
||||
Also have a look at the GIMP-section of
|
||||
my homepage at www.mygale.org/~cotting.
|
||||
------------------------------------------
|
||||
|
||||
Thank you and happy GIMPing!
|
||||
Daniel Cotting
|
||||
|
||||
------------------------------------------
|
||||
|
|
@ -1,788 +0,0 @@
|
|||
/* GIMP header image file format (Indexed): //logo.h */
|
||||
|
||||
static unsigned int logo_width = 200;
|
||||
static unsigned int logo_height = 72;
|
||||
|
||||
/* Call this macro repeatedly. After each use, the pixel data can be extracted */
|
||||
|
||||
#define HEADER_PIXEL(data,pixel) \
|
||||
pixel[0] = palette_data[data[0]*3+2]; \
|
||||
pixel[1] = palette_data[data[0]*3+1]; \
|
||||
pixel[2] = palette_data[data[0]*3+0]; \
|
||||
data--;
|
||||
|
||||
static unsigned char
|
||||
palette_data[] = { 4,2,2,4,110,178,32,4,122,4,36,
|
||||
86,15,3,66,4,58,127,36,8,186,4,34,122,17,2,
|
||||
34,4,19,66,12,4,162,90,2,69,88,2,48,7,20,
|
||||
2,25,2,103,8,14,48,4,58,186,90,3,154,82,2,
|
||||
129,55,2,34,17,2,18,17,34,191,94,2,101,57,2,
|
||||
70,7,32,154,12,22,157,17,3,50,4,88,150,96,3,
|
||||
186,86,2,138,87,2,86,212,214,210,4,19,98,52,2,
|
||||
154,15,11,2,4,132,216,7,18,125,12,6,82,37,12,
|
||||
18,4,88,189,86,14,48,128,2,157,32,4,138,4,60,
|
||||
155,4,48,126,60,2,218,7,10,52,13,12,66,129,2,
|
||||
50,56,2,52,52,14,98,4,47,157,6,20,87,48,2,
|
||||
24,58,2,101,120,2,141,52,5,170,4,113,215,127,2,
|
||||
73,4,90,210,4,52,112,36,18,194,59,2,85,42,2,
|
||||
10,107,2,173,95,2,114,31,3,52,4,79,160,84,3,
|
||||
189,14,10,40,30,2,69,96,2,58,113,2,126,9,37,
|
||||
231,17,33,170,28,14,2,4,30,146,68,10,37,132,2,
|
||||
82,23,4,7,4,10,122,4,36,108,32,2,37,7,27,
|
||||
2,4,98,175,84,10,146,4,101,191,4,14,146,8,29,
|
||||
86,4,2,170,8,60,230,84,10,162,72,2,39,102,2,
|
||||
142,4,142,221,4,49,143,68,12,170,4,124,213,15,4,
|
||||
74,114,2,69,112,2,158,32,3,23,8,50,190,111,2,
|
||||
104,6,40,154,96,2,210,6,28,104,60,2,138,61,2,
|
||||
25,68,2,114,58,2,125,39,2,114,73,2,69,16,4,
|
||||
58,4,88,177,56,14,26,138,2,173,4,68,176,71,2,
|
||||
55,76,2,210,4,78,130,17,3,42,6,27,69,112,2,
|
||||
49,12,26,178,47,13,159,18,11,10,13,11,74,141,2,
|
||||
58,52,18,234,4,82,186,4,126,198,4,103,213,4,62,
|
||||
206,4,72,226,12,46,210,72,12,222,12,26,146,20,34,
|
||||
210,4,113,197,4,131,229,4,48,170,4,76,170,7,43,
|
||||
95,52,30,218,15,11,170,52,14,202,12,14,86,4,40,
|
||||
174,108,14,202,156,2,186,60,12,130,5,40,129,73,13,
|
||||
189,12,42,138,44,14,202,4,59,143,4,124,229,4,69,
|
||||
191,4,69,157,4,60,114,4,43,110,14,14,58,20,26,
|
||||
157,28,26,210,4,87,162,4,91,202,4,110,226,4,98,
|
||||
226,4,101,202,17,14,186,28,18,18,60,2,234,28,10,
|
||||
114,4,30,114,8,10,162,12,54,186,20,26,130,100,10,
|
||||
170,40,18,154,4,22,114,28,26,234,4,22,58,4,66,
|
||||
226,4,54,202,12,42,202,4,38,98,4,145,234,4,76,
|
||||
146,4,94,148,4,138,213,4,94,186,4,54,126,4,54,
|
||||
154,4,118,211,4,106,178,4,106,188,4,54,142,4,94,
|
||||
170,4,70,202,4,118,197,4,54,173,4,82,178,72,4,
|
||||
172,36,10,138,76,14,162,4,98,210,4,118,226,112,2,
|
||||
114,24,19,8,30,2,85,84,6,226,141,2,73,28,30,
|
||||
10,28,46,186,112,4,206,36,10,90,36,2,174,108,2,
|
||||
58,41,3,130,44,10,194,9,33,130,92,2,162,51,2,
|
||||
42,12,32,162,81,3,146,44,11,26,28,6,146,44,2,
|
||||
178,30,12,10,60,10,178,64,2,146,28,10,178,92,10,
|
||||
210,5,41,146,40,2,102,96,2,125,100,2,88,74,2,
|
||||
157,142,2,159,26,10,55,143,2,50,73,2,102,134,2,
|
||||
142,73,2,84,127,2,126,142,2,82,156,2,178,28,10,
|
||||
158,28,26,114,84,14,202,12,4,10,5,20,74,17,2,
|
||||
26,92,2,194,7,19,106};
|
||||
|
||||
static unsigned char header_data[] = { 71,99,218,218,99,11,71,218,71,71,
|
||||
218,99,99,99,71,99,218,99,99,99,99,218,71,218,99,218,218,99,99,218,
|
||||
218,99,99,218,99,218,99,58,218,99,99,99,58,218,99,99,99,58,99,58,
|
||||
99,58,11,58,99,58,58,11,99,58,99,58,99,99,99,218,99,218,99,58,
|
||||
99,71,99,218,71,12,12,12,12,12,12,12,12,12,92,19,19,19,92,92,
|
||||
92,92,19,108,19,19,19,19,19,19,53,53,53,53,101,19,19,53,53,19,
|
||||
19,19,12,92,92,12,12,12,71,71,218,99,218,218,71,71,12,12,218,99,
|
||||
58,58,58,99,99,99,58,99,99,99,11,58,11,58,58,99,58,99,99,99,
|
||||
58,99,99,99,99,58,99,99,99,99,99,218,99,99,11,99,99,99,11,99,
|
||||
99,218,218,218,99,218,99,99,218,218,99,99,218,99,218,218,99,99,218,11,
|
||||
218,71,99,218,99,218,218,99,71,8,218,99,218,218,99,99,99,99,99,99,
|
||||
218,218,99,99,218,99,218,99,218,71,99,99,99,218,99,99,218,99,99,99,
|
||||
218,218,99,99,99,99,58,99,58,30,99,99,99,99,99,99,58,99,99,58,
|
||||
99,58,99,58,99,99,58,58,58,99,58,58,99,218,218,71,99,99,71,71,
|
||||
71,123,12,118,71,71,12,71,123,12,12,19,19,19,53,19,19,53,53,19,
|
||||
19,53,101,63,20,63,20,63,53,53,53,101,53,53,53,19,53,53,53,19,
|
||||
92,12,12,12,71,12,12,12,12,12,92,71,218,218,71,218,71,71,71,71,
|
||||
99,218,58,58,58,99,99,99,99,58,58,58,99,58,99,58,58,99,58,58,
|
||||
99,99,58,99,99,99,99,58,99,58,30,99,99,99,218,99,58,99,99,58,
|
||||
11,99,99,218,99,218,218,99,99,218,71,99,218,99,99,218,99,99,218,99,
|
||||
11,218,99,218,99,11,218,99,99,8,71,71,71,99,218,71,218,99,71,218,
|
||||
11,99,218,218,99,218,99,218,99,99,99,99,218,99,99,99,99,99,218,99,
|
||||
99,99,99,99,99,11,99,99,99,99,99,99,58,99,58,99,58,99,58,58,
|
||||
99,11,58,58,99,58,99,99,58,58,218,99,123,71,71,71,123,71,71,218,
|
||||
99,99,218,71,12,12,12,12,92,19,19,53,19,53,53,53,53,19,53,53,
|
||||
53,53,19,53,19,53,53,53,53,53,63,63,101,63,63,20,53,19,53,53,
|
||||
53,19,92,92,12,12,12,71,71,71,71,12,12,71,71,12,12,12,12,12,
|
||||
12,218,218,99,58,58,99,58,99,58,99,58,99,99,58,218,58,99,58,99,
|
||||
99,99,99,11,58,99,99,58,99,99,58,58,99,99,99,99,99,99,99,99,
|
||||
99,58,218,99,218,99,99,99,218,99,99,218,99,11,218,99,218,218,99,99,
|
||||
218,99,218,11,99,71,99,218,71,8,99,99,218,99,99,99,218,99,99,218,
|
||||
218,99,11,99,99,218,99,218,99,218,218,99,58,99,99,99,58,11,99,99,
|
||||
58,99,99,58,58,58,58,99,99,99,99,218,58,99,99,99,58,58,99,99,
|
||||
58,58,99,58,99,58,99,99,58,58,99,218,71,71,218,218,218,58,58,58,
|
||||
218,99,71,123,12,12,12,19,19,108,108,108,92,92,92,12,71,12,12,92,
|
||||
19,53,53,53,101,53,53,19,53,101,53,20,53,79,79,0,34,79,20,63,
|
||||
53,53,53,19,19,19,12,12,12,71,71,71,71,71,71,123,71,12,12,12,
|
||||
12,12,71,71,218,58,99,58,218,58,218,99,58,99,58,99,99,218,58,58,
|
||||
58,99,58,58,99,99,58,99,58,99,99,218,58,58,99,99,99,99,99,99,
|
||||
58,11,99,99,218,218,218,99,218,99,99,218,218,99,218,99,99,218,218,99,
|
||||
218,99,71,218,99,218,99,99,99,8,218,218,99,218,99,218,99,218,218,99,
|
||||
11,218,218,218,218,99,71,99,218,99,99,99,218,58,99,99,99,99,218,30,
|
||||
58,99,58,99,58,11,58,99,58,99,58,58,58,99,58,58,99,99,58,58,
|
||||
58,99,58,99,58,58,99,58,218,99,99,218,58,99,58,58,58,58,58,218,
|
||||
71,12,12,71,71,12,12,12,12,71,71,118,71,71,118,71,71,12,223,19,
|
||||
19,53,53,53,53,63,229,20,79,20,34,0,20,101,101,63,20,101,101,53,
|
||||
108,53,53,53,53,53,101,19,92,12,12,12,12,71,71,218,218,218,71,71,
|
||||
118,12,71,71,218,218,58,58,58,58,58,58,218,58,58,58,99,99,218,99,
|
||||
58,58,99,99,58,99,58,99,58,58,58,99,99,99,58,99,99,99,58,58,
|
||||
99,58,58,99,99,99,99,99,99,99,218,99,99,218,99,218,218,99,99,218,
|
||||
99,58,99,99,218,99,218,218,218,8,99,218,99,218,99,218,11,99,218,99,
|
||||
99,99,99,99,218,99,58,99,99,99,58,99,218,99,99,99,99,99,58,99,
|
||||
58,218,99,99,99,58,218,58,58,58,99,99,58,99,218,58,99,99,58,218,
|
||||
58,99,58,99,99,99,58,99,58,58,58,58,99,58,58,58,58,218,218,12,
|
||||
71,71,71,12,12,71,71,12,71,12,71,71,71,71,12,92,19,53,53,53,
|
||||
101,63,79,34,251,0,0,63,20,53,19,53,53,53,53,19,19,53,19,19,
|
||||
19,108,19,19,19,19,19,19,53,53,108,12,12,12,71,71,218,58,58,58,
|
||||
99,218,71,71,71,12,218,99,99,58,58,58,58,218,58,58,58,58,58,99,
|
||||
99,58,58,99,58,218,58,99,99,99,99,58,99,128,99,58,99,99,11,99,
|
||||
99,58,11,58,99,99,99,218,58,11,99,58,99,218,99,99,218,99,99,99,
|
||||
218,71,99,99,218,99,11,99,218,8,218,99,218,99,218,99,99,218,99,218,
|
||||
58,218,58,218,99,99,218,99,58,99,99,99,99,78,11,58,99,58,99,99,
|
||||
99,58,58,99,58,11,58,58,218,99,99,58,58,58,99,58,58,58,99,99,
|
||||
58,58,58,58,58,58,99,58,99,99,99,58,58,58,58,58,218,71,118,12,
|
||||
71,71,71,71,71,12,71,71,71,71,71,12,92,19,19,53,53,63,20,251,
|
||||
0,79,79,0,79,34,34,79,0,63,229,20,63,101,53,101,19,53,19,92,
|
||||
12,71,12,92,12,12,12,12,12,92,19,92,92,71,12,118,71,218,99,58,
|
||||
58,58,58,58,218,123,71,218,58,58,58,99,58,58,58,218,58,218,58,58,
|
||||
218,58,99,58,58,58,99,99,58,99,58,99,218,99,99,99,58,58,58,11,
|
||||
58,58,99,58,99,99,30,99,99,99,58,218,218,30,99,218,99,99,99,218,
|
||||
99,99,218,218,99,99,218,71,99,8,99,99,71,99,218,218,99,218,99,218,
|
||||
99,218,99,58,11,58,99,99,11,58,99,58,99,99,99,99,58,58,99,99,
|
||||
58,99,99,99,99,58,99,78,58,58,99,99,218,78,58,218,58,99,212,58,
|
||||
99,58,58,58,218,58,58,58,58,58,58,58,58,58,218,71,12,12,71,71,
|
||||
123,218,218,58,99,71,123,71,71,12,19,19,19,53,53,19,19,53,63,53,
|
||||
101,101,101,63,101,101,20,20,79,0,0,79,79,34,251,79,79,251,101,53,
|
||||
19,92,12,71,71,71,218,12,218,12,71,71,71,71,71,12,71,71,123,71,
|
||||
58,58,58,58,58,58,58,99,99,58,58,58,99,58,58,58,99,58,99,58,
|
||||
99,58,58,99,58,58,58,58,99,58,99,58,99,58,99,58,99,99,58,58,
|
||||
99,99,99,58,99,58,58,58,99,99,99,30,128,58,99,99,99,99,99,58,
|
||||
218,99,99,218,218,99,99,218,71,8,71,218,99,99,99,99,218,99,99,99,
|
||||
99,30,58,11,58,58,99,58,58,58,58,30,58,58,99,99,99,58,99,58,
|
||||
99,58,99,58,58,58,218,99,58,99,58,58,58,218,99,58,58,58,58,58,
|
||||
58,99,99,99,58,99,99,58,58,212,99,58,58,218,71,71,218,218,99,58,
|
||||
58,58,58,218,123,71,71,12,108,19,19,108,19,19,223,92,19,92,12,12,
|
||||
19,19,19,19,53,53,63,63,229,0,34,34,79,0,79,0,75,34,0,34,
|
||||
79,20,53,19,92,12,71,71,71,218,71,123,71,123,71,71,71,71,71,71,
|
||||
71,218,58,58,58,58,58,58,58,99,58,58,58,58,58,58,58,58,99,58,
|
||||
58,99,99,58,99,58,58,58,58,58,58,99,58,99,58,99,58,58,99,99,
|
||||
58,58,99,99,58,58,218,58,58,99,58,99,11,58,58,99,58,218,99,99,
|
||||
99,99,218,99,99,218,99,99,99,8,99,218,99,218,99,99,99,99,58,58,
|
||||
11,58,99,58,58,30,58,11,58,11,58,99,99,58,99,58,58,58,99,58,
|
||||
58,99,58,99,99,58,58,99,58,99,58,99,58,99,212,58,58,58,58,58,
|
||||
58,58,58,58,58,58,58,58,58,58,212,58,218,218,218,99,58,58,58,58,
|
||||
58,99,71,71,71,12,71,71,12,12,12,71,71,123,71,218,71,71,71,92,
|
||||
19,108,63,79,229,126,0,79,0,0,34,34,34,126,34,251,79,0,126,34,
|
||||
79,0,79,20,63,19,19,12,71,71,71,218,71,99,71,71,71,71,71,71,
|
||||
71,71,218,58,58,58,212,58,58,58,58,58,58,58,58,58,58,58,58,58,
|
||||
58,58,99,58,58,99,58,58,99,99,128,218,58,58,99,58,99,58,58,99,
|
||||
218,58,58,218,99,99,99,99,99,99,58,99,99,58,30,218,99,99,99,99,
|
||||
99,99,218,99,99,99,218,218,99,8,218,99,99,99,58,99,99,99,99,99,
|
||||
58,58,218,99,99,99,58,99,58,58,58,99,58,99,58,99,99,99,58,58,
|
||||
99,99,58,58,58,58,58,58,99,99,58,99,99,58,58,58,58,99,58,58,
|
||||
99,58,99,58,78,212,99,212,99,58,58,99,58,58,78,78,246,99,212,58,
|
||||
99,71,123,71,71,71,71,71,218,218,71,123,218,218,218,118,12,19,63,63,
|
||||
0,0,0,34,34,0,34,79,79,79,0,34,79,79,20,101,53,101,53,19,
|
||||
53,53,101,101,53,53,19,19,19,92,218,218,218,218,218,212,78,58,218,218,
|
||||
71,71,71,11,58,246,58,78,246,58,58,58,99,99,58,58,99,58,212,58,
|
||||
99,58,99,58,58,99,58,58,58,58,58,212,218,58,58,99,58,58,99,58,
|
||||
99,99,99,58,58,99,99,99,58,99,58,58,99,99,99,58,58,99,99,99,
|
||||
99,99,99,11,58,99,99,99,218,8,99,99,218,99,99,218,99,218,58,58,
|
||||
11,78,58,99,58,99,58,99,58,11,58,99,58,99,58,58,58,99,99,58,
|
||||
99,99,99,58,58,58,58,58,58,58,58,58,58,58,58,212,99,58,212,99,
|
||||
58,58,78,58,78,58,58,58,58,58,58,58,58,58,246,58,246,58,58,71,
|
||||
218,71,71,71,218,71,71,71,71,218,218,71,71,92,92,53,63,126,79,0,
|
||||
0,79,0,79,34,79,0,126,79,79,79,79,79,229,229,101,53,108,92,71,
|
||||
71,71,71,71,71,12,12,19,108,19,92,71,71,71,71,218,212,246,78,58,
|
||||
58,218,218,71,71,58,58,212,212,78,212,78,78,58,58,58,58,58,99,58,
|
||||
78,58,58,99,58,58,58,58,58,58,58,58,99,58,99,58,58,212,99,58,
|
||||
58,99,58,99,58,99,99,58,58,99,99,58,58,58,58,11,78,99,99,99,
|
||||
99,58,99,58,71,99,99,99,99,8,99,99,99,218,99,58,99,30,58,11,
|
||||
58,11,58,58,99,58,58,99,58,99,58,99,99,58,99,58,99,58,58,99,
|
||||
58,58,58,58,58,78,58,99,58,99,58,58,58,58,99,58,212,99,58,58,
|
||||
58,78,78,78,58,58,58,58,58,212,58,78,58,78,78,78,58,99,218,218,
|
||||
71,218,218,71,58,99,58,99,71,71,71,12,19,20,79,251,0,251,79,251,
|
||||
79,63,126,79,79,79,79,229,79,79,79,126,126,79,79,63,20,53,53,92,
|
||||
12,12,218,71,71,218,218,218,71,218,71,71,71,218,71,218,218,58,246,246,
|
||||
78,212,78,58,218,218,58,58,58,246,78,212,78,212,58,58,58,58,58,212,
|
||||
78,78,78,58,58,99,58,58,58,58,58,58,58,58,58,218,99,99,58,99,
|
||||
58,58,218,99,58,58,99,58,99,99,58,99,99,99,58,99,99,58,58,58,
|
||||
218,99,11,58,99,99,99,218,99,8,99,30,218,58,11,99,99,58,99,58,
|
||||
99,58,58,99,218,99,218,58,99,99,58,58,58,58,99,58,99,99,58,99,
|
||||
58,58,58,78,78,58,58,58,58,58,99,246,78,78,58,58,58,58,58,78,
|
||||
78,212,78,246,246,58,58,58,212,58,212,246,78,246,58,212,218,218,218,218,
|
||||
218,58,246,58,246,58,218,218,123,12,19,19,53,53,101,53,63,101,63,63,
|
||||
63,63,63,63,63,101,63,53,63,53,53,53,53,108,19,19,19,19,108,19,
|
||||
92,92,12,12,71,71,218,99,99,218,218,218,218,218,71,71,71,218,218,246,
|
||||
78,78,246,78,78,78,58,58,58,78,78,78,78,246,58,58,58,58,58,78,
|
||||
212,78,78,58,58,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,
|
||||
58,99,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,99,99,99,
|
||||
58,99,58,99,99,58,99,99,99,8,99,99,30,58,58,58,58,58,58,99,
|
||||
58,11,99,58,99,58,58,58,58,58,58,99,58,58,58,58,58,58,99,58,
|
||||
99,58,78,58,58,58,99,58,58,78,246,78,58,78,58,58,58,58,78,212,
|
||||
246,78,246,78,78,99,212,246,78,246,58,246,246,78,246,218,218,218,58,58,
|
||||
246,78,78,246,58,218,218,71,12,12,108,92,108,19,108,53,63,63,63,53,
|
||||
53,53,19,223,92,92,49,118,118,118,118,118,118,118,71,118,118,12,12,12,
|
||||
92,71,71,123,218,99,11,58,58,58,58,78,58,99,99,123,71,218,218,218,
|
||||
246,246,78,212,78,212,78,246,78,78,58,78,246,78,246,78,58,58,58,58,
|
||||
99,78,246,78,246,99,58,58,58,58,58,78,78,78,78,99,58,99,58,99,
|
||||
78,58,58,99,58,218,218,58,58,99,58,58,58,218,99,58,58,58,58,11,
|
||||
58,99,99,99,58,99,99,218,58,8,99,99,58,99,58,11,58,11,58,58,
|
||||
99,58,99,58,99,58,99,58,58,218,58,58,58,99,58,99,58,58,58,99,
|
||||
78,58,58,58,99,58,58,78,78,58,246,78,246,99,58,58,58,212,78,78,
|
||||
246,58,246,58,78,78,78,58,246,78,78,58,246,58,58,58,212,58,246,78,
|
||||
212,246,58,58,71,71,71,71,12,92,92,92,108,53,53,53,19,19,223,223,
|
||||
49,223,92,49,49,223,92,49,118,118,118,71,118,112,118,11,11,112,71,112,
|
||||
71,71,11,11,11,99,99,58,58,78,78,78,246,78,246,58,99,71,218,71,
|
||||
218,78,78,246,78,246,58,246,78,246,212,58,246,58,246,78,212,78,246,58,
|
||||
58,58,78,246,246,78,78,99,58,58,58,212,78,58,78,58,58,58,58,58,
|
||||
78,58,78,99,58,58,99,58,58,58,58,99,58,58,99,218,58,99,58,58,
|
||||
58,58,99,58,99,99,58,99,99,8,99,99,58,58,58,99,58,99,99,58,
|
||||
99,58,58,58,58,58,58,218,99,58,99,58,58,58,58,58,99,58,58,78,
|
||||
58,78,78,78,78,58,78,58,78,78,78,212,78,58,78,58,78,212,78,246,
|
||||
78,246,78,78,212,246,246,78,246,212,246,246,78,246,58,246,78,246,58,246,
|
||||
246,58,99,218,218,218,71,12,92,19,19,19,19,19,223,223,49,223,49,118,
|
||||
49,112,30,30,237,103,208,208,245,208,245,208,245,245,245,103,208,103,22,237,
|
||||
30,30,11,11,11,11,71,71,11,99,58,78,78,246,58,246,246,246,58,99,
|
||||
99,218,212,78,246,78,246,78,246,58,78,58,246,78,58,246,78,212,78,246,
|
||||
58,212,58,78,78,212,78,78,58,58,99,78,78,78,78,78,58,58,99,58,
|
||||
58,78,78,78,58,58,99,58,99,58,58,99,58,218,58,58,99,58,58,218,
|
||||
99,58,99,99,58,99,30,99,99,8,58,99,58,99,58,58,58,99,58,99,
|
||||
58,218,218,58,99,58,99,58,58,58,78,99,78,58,99,58,58,78,58,78,
|
||||
78,58,78,78,58,78,78,246,246,212,78,78,78,58,78,246,78,246,58,246,
|
||||
212,78,58,78,78,58,246,78,78,78,58,246,78,246,78,58,246,78,78,78,
|
||||
58,218,99,11,71,12,92,92,92,223,223,223,223,223,49,118,112,22,237,208,
|
||||
72,245,55,243,245,72,72,72,65,208,236,208,208,245,72,55,243,55,55,243,
|
||||
245,245,245,103,237,237,30,11,11,112,71,11,99,58,78,246,246,246,246,78,
|
||||
58,218,58,58,246,78,212,78,246,78,246,78,212,78,78,212,78,246,78,78,
|
||||
58,78,78,78,78,78,246,246,246,58,58,78,58,246,78,212,78,78,99,58,
|
||||
58,78,58,58,58,58,58,99,58,58,58,58,78,58,58,99,99,58,58,58,
|
||||
99,218,58,99,99,99,58,99,58,8,99,99,99,58,11,58,58,58,99,58,
|
||||
58,58,58,58,58,58,58,99,99,78,78,58,58,78,58,58,99,78,78,78,
|
||||
78,78,78,78,78,78,212,246,246,246,246,78,78,246,246,58,246,78,246,78,
|
||||
78,78,212,246,246,246,78,78,212,246,246,246,58,246,246,78,246,246,78,58,
|
||||
218,99,71,12,12,92,92,82,223,49,223,118,112,22,208,72,72,208,65,22,
|
||||
22,112,11,112,112,112,112,112,118,118,118,112,112,112,30,244,244,30,237,65,
|
||||
236,72,55,55,243,243,208,208,237,237,11,71,11,11,71,11,99,58,246,246,
|
||||
246,78,78,246,58,246,78,246,58,246,58,246,58,246,246,78,78,78,212,78,
|
||||
212,246,212,78,246,246,58,78,78,246,99,246,246,58,246,58,78,78,78,58,
|
||||
78,78,78,78,78,78,58,58,58,99,58,58,78,99,58,58,58,218,99,99,
|
||||
58,58,99,58,99,58,58,99,99,8,58,58,99,58,99,218,99,58,99,99,
|
||||
99,58,99,58,99,58,58,58,58,78,58,58,58,58,58,58,58,78,212,78,
|
||||
78,58,246,78,58,246,246,246,246,246,246,246,78,58,246,78,246,58,246,58,
|
||||
246,78,78,78,58,246,212,78,78,78,58,246,78,212,246,58,78,212,58,99,
|
||||
218,71,12,92,19,223,49,49,118,62,30,22,208,208,103,30,244,112,244,118,
|
||||
112,23,49,49,49,49,49,49,49,49,82,82,223,82,49,118,23,118,118,112,
|
||||
11,30,237,22,65,245,55,243,245,245,103,237,237,11,71,11,71,71,218,58,
|
||||
246,246,78,246,78,212,78,246,246,78,246,246,78,78,212,78,212,78,246,78,
|
||||
78,58,246,78,58,246,78,212,78,246,78,78,78,78,78,212,246,246,246,78,
|
||||
58,78,78,78,58,78,78,58,58,58,58,58,99,58,58,58,58,58,99,58,
|
||||
58,58,58,58,58,99,99,58,58,8,99,99,58,58,58,99,99,99,99,58,
|
||||
58,99,78,58,78,99,58,58,99,78,78,78,58,78,58,58,78,246,78,212,
|
||||
78,78,58,78,246,246,246,246,246,246,58,78,78,246,58,246,78,246,78,246,
|
||||
78,212,78,212,212,246,78,78,246,246,78,212,58,99,212,246,246,58,99,218,
|
||||
118,12,92,223,223,49,49,11,237,208,208,103,244,23,118,112,118,112,49,49,
|
||||
19,82,82,82,223,49,66,49,49,82,223,223,101,19,223,82,223,82,223,82,
|
||||
82,49,23,112,11,244,30,65,72,55,55,245,208,22,237,112,11,118,71,218,
|
||||
218,58,58,78,246,78,212,78,78,212,99,78,212,246,78,246,78,246,78,212,
|
||||
246,246,78,246,246,78,246,78,246,58,246,78,58,78,246,246,246,246,212,246,
|
||||
78,78,78,78,78,58,78,78,99,58,78,78,78,99,58,58,99,58,99,99,
|
||||
58,99,99,99,99,58,99,58,99,8,99,99,99,58,58,99,58,58,99,58,
|
||||
58,58,78,78,58,58,58,58,58,58,78,78,78,78,78,58,246,246,246,246,
|
||||
246,78,78,212,246,246,246,246,246,246,78,212,78,246,78,212,78,246,58,246,
|
||||
78,246,78,58,58,212,246,58,78,246,246,58,58,58,58,246,58,218,71,12,
|
||||
223,223,49,49,49,30,65,72,72,30,112,118,118,112,118,49,223,223,223,49,
|
||||
244,244,244,244,23,23,23,23,70,66,49,70,49,70,70,118,23,23,23,23,
|
||||
49,223,19,82,223,223,23,11,244,237,208,72,55,55,208,103,30,11,11,49,
|
||||
71,71,99,58,246,78,246,246,58,246,58,58,246,212,78,246,58,246,78,58,
|
||||
58,212,78,78,212,78,212,78,78,78,212,78,78,78,246,212,246,246,246,212,
|
||||
246,58,78,78,78,78,58,78,78,99,58,58,78,58,58,58,99,58,58,58,
|
||||
58,58,58,58,99,58,99,58,99,8,99,58,58,218,58,58,58,99,58,58,
|
||||
58,99,58,58,99,58,78,78,78,78,78,78,78,58,246,246,246,212,246,246,
|
||||
212,246,78,246,246,246,246,246,212,246,246,78,246,58,212,246,78,78,78,246,
|
||||
58,246,212,99,58,246,78,246,246,58,58,58,58,78,246,58,99,118,12,92,
|
||||
223,223,223,11,22,72,208,244,49,112,112,118,49,82,223,49,244,244,242,62,
|
||||
23,62,23,23,244,244,244,244,244,244,62,30,244,244,244,244,23,112,210,23,
|
||||
62,244,244,23,223,82,53,82,49,112,30,30,65,72,55,245,208,237,30,112,
|
||||
71,49,118,71,99,78,78,78,246,246,58,99,58,246,212,78,246,58,246,212,
|
||||
99,58,212,246,78,246,78,246,212,246,78,246,246,212,246,246,246,212,246,246,
|
||||
246,246,78,78,246,246,78,78,78,78,58,58,78,58,58,58,58,58,99,99,
|
||||
99,78,99,58,99,99,58,99,58,8,58,99,58,99,99,58,58,99,58,58,
|
||||
58,58,58,58,78,58,78,78,58,78,58,246,78,78,78,212,246,246,212,246,
|
||||
246,246,246,246,246,246,246,246,246,246,246,58,246,58,99,212,246,212,78,78,
|
||||
78,99,58,58,78,246,58,78,246,58,58,58,58,212,58,218,71,12,49,49,
|
||||
49,112,22,72,65,112,49,112,112,112,223,19,118,62,244,62,62,23,23,244,
|
||||
244,244,244,112,23,49,49,223,19,223,82,223,223,49,223,23,118,112,244,30,
|
||||
62,62,62,62,23,62,23,223,82,8,82,71,30,244,22,72,55,245,103,237,
|
||||
11,71,12,12,71,99,78,78,78,58,212,58,58,58,58,212,78,58,246,78,
|
||||
58,58,58,212,78,246,58,78,78,212,212,246,246,246,212,246,246,246,246,246,
|
||||
246,246,58,78,78,58,246,212,78,78,58,78,58,78,78,78,58,78,58,58,
|
||||
218,58,58,99,58,99,99,99,58,8,218,99,58,58,58,99,58,58,99,78,
|
||||
78,58,99,58,58,78,58,78,246,78,78,58,78,212,246,246,246,246,246,246,
|
||||
246,246,246,212,246,212,246,246,246,212,78,246,58,58,58,246,78,78,212,246,
|
||||
58,58,58,58,212,78,246,212,58,58,58,58,58,58,71,12,49,223,223,49,
|
||||
30,208,72,30,49,49,112,49,223,223,23,22,244,62,23,23,62,22,112,118,
|
||||
49,49,223,118,23,244,30,242,22,242,242,62,242,244,244,112,23,49,49,223,
|
||||
23,112,30,244,62,112,210,23,23,49,82,8,223,244,237,30,208,55,243,245,
|
||||
22,30,71,118,12,71,99,78,78,246,212,58,58,58,58,246,246,246,78,246,
|
||||
58,58,58,78,212,78,246,246,246,58,58,212,246,246,246,246,246,246,246,246,
|
||||
246,78,246,58,246,246,246,78,212,78,78,78,58,78,58,78,58,58,99,58,
|
||||
58,58,99,58,58,58,58,58,58,8,58,99,58,58,58,58,99,58,78,78,
|
||||
58,58,78,58,58,78,78,58,78,78,78,78,78,246,212,246,246,246,246,246,
|
||||
246,246,246,246,246,246,212,246,246,246,78,58,58,58,58,246,78,78,246,99,
|
||||
212,58,212,58,212,78,78,58,58,218,58,212,58,99,71,49,223,49,49,30,
|
||||
55,72,112,49,244,11,49,82,112,242,242,62,23,62,244,112,118,223,82,118,
|
||||
30,236,29,225,231,33,248,42,42,42,219,2,42,219,110,107,231,29,65,244,
|
||||
112,223,223,49,112,30,30,23,23,23,23,49,82,101,49,30,30,242,72,243,
|
||||
208,103,30,71,118,12,71,99,78,78,78,58,58,58,58,58,78,58,246,78,
|
||||
58,58,99,58,246,58,246,58,246,58,99,58,212,246,246,212,246,246,246,246,
|
||||
246,246,246,246,212,246,246,246,246,78,58,78,78,78,78,78,58,78,78,78,
|
||||
58,78,99,99,99,58,58,99,99,8,99,58,99,99,58,58,58,58,78,78,
|
||||
78,78,58,58,58,78,78,78,78,78,246,246,58,246,246,246,246,246,246,246,
|
||||
246,246,212,246,99,58,246,246,246,246,212,58,58,58,99,212,78,212,212,58,
|
||||
78,58,58,58,246,246,78,58,71,218,58,58,11,71,118,223,49,23,103,243,
|
||||
22,49,118,30,118,82,49,30,242,62,70,62,244,118,223,82,112,65,93,205,
|
||||
217,42,80,147,98,4,26,8,8,8,8,121,8,8,26,4,98,210,111,219,
|
||||
29,29,65,112,223,82,23,30,244,62,62,62,62,49,82,82,112,30,30,65,
|
||||
243,245,103,30,71,118,12,71,218,212,246,58,58,212,212,58,58,246,212,78,
|
||||
58,58,212,58,58,246,78,246,58,58,58,58,246,212,246,246,246,246,246,246,
|
||||
246,212,246,246,246,246,212,246,246,212,78,246,212,78,58,78,78,78,58,78,
|
||||
78,78,58,58,58,58,99,58,58,8,58,58,58,58,58,58,58,58,237,78,
|
||||
58,78,78,58,78,78,212,78,246,78,78,246,246,246,246,246,246,246,246,246,
|
||||
246,246,246,58,58,58,246,246,246,246,58,58,99,58,58,246,246,78,99,78,
|
||||
246,78,58,58,58,58,58,218,12,99,58,99,71,92,49,223,118,22,41,65,
|
||||
223,23,30,118,19,23,22,242,23,23,30,112,223,19,112,29,222,232,87,80,
|
||||
98,26,121,8,20,253,20,20,20,20,101,20,20,20,253,253,20,8,121,26,
|
||||
4,14,2,231,29,30,49,82,112,30,244,62,23,210,118,82,101,223,30,244,
|
||||
65,55,243,103,237,71,118,71,71,99,58,58,58,58,218,58,58,58,246,212,
|
||||
58,58,212,78,99,58,246,246,78,58,58,58,58,246,246,246,246,246,246,246,
|
||||
246,246,246,212,246,246,246,246,246,246,246,78,78,78,78,78,58,78,58,78,
|
||||
78,58,58,58,78,99,58,58,99,8,99,58,58,99,99,58,58,58,58,237,
|
||||
78,78,58,78,78,246,78,246,78,246,78,246,246,246,246,246,246,246,246,246,
|
||||
246,246,58,58,58,58,246,246,246,58,99,78,246,212,99,246,212,58,78,246,
|
||||
58,246,58,58,58,212,218,12,118,58,58,71,12,49,19,49,237,41,65,49,
|
||||
118,112,223,82,244,236,62,66,62,30,82,8,112,93,68,6,137,88,162,253,
|
||||
253,20,253,19,223,23,244,244,54,242,54,242,244,62,112,49,223,20,20,20,
|
||||
20,253,26,98,14,33,29,244,82,101,112,22,62,62,62,23,49,53,82,30,
|
||||
112,22,243,243,208,11,71,118,12,218,99,58,58,58,12,71,58,58,58,58,
|
||||
99,58,58,246,246,58,58,246,246,58,58,58,99,58,246,246,246,246,78,58,
|
||||
246,212,246,246,246,246,246,212,246,246,78,78,78,78,58,78,78,78,78,58,
|
||||
78,58,78,237,78,58,99,99,78,8,58,99,58,58,78,78,78,78,78,78,
|
||||
58,78,78,58,78,246,78,212,246,246,246,246,246,246,246,246,246,103,246,246,
|
||||
246,246,58,58,58,99,212,246,246,58,212,78,246,58,58,58,58,58,212,78,
|
||||
78,78,58,58,58,58,123,49,218,99,11,118,223,223,82,237,41,208,23,118,
|
||||
237,223,82,244,18,210,23,23,112,19,223,103,64,6,148,147,26,253,20,8,
|
||||
66,23,54,111,219,219,137,24,76,24,163,25,137,42,204,42,151,109,244,223,
|
||||
20,20,20,20,8,4,111,231,236,23,82,12,237,62,62,23,62,223,253,223,
|
||||
237,244,22,41,245,103,11,112,118,71,218,58,58,99,92,92,128,58,58,58,
|
||||
58,58,58,212,78,58,58,212,58,58,58,78,78,58,212,246,246,246,58,58,
|
||||
212,246,212,246,246,246,246,246,246,212,246,78,246,246,78,78,78,78,78,58,
|
||||
78,58,58,78,99,58,58,58,99,8,99,58,58,58,58,78,78,58,78,78,
|
||||
78,78,78,78,78,58,246,246,246,246,246,246,246,246,103,246,246,246,246,246,
|
||||
246,78,58,58,58,58,58,212,58,58,78,212,78,78,99,58,58,212,78,246,
|
||||
212,212,58,58,58,218,92,12,218,99,71,12,223,82,118,243,55,23,223,30,
|
||||
223,19,244,93,54,49,23,112,82,82,245,153,138,234,162,8,253,101,49,30,
|
||||
111,125,24,201,142,16,159,142,43,95,197,156,193,193,51,141,224,25,248,231,
|
||||
65,118,20,20,20,20,121,210,231,55,244,82,49,30,244,62,62,244,223,20,
|
||||
118,237,112,208,243,245,237,71,118,49,71,58,58,218,92,92,12,58,58,99,
|
||||
58,58,212,78,212,212,58,58,58,58,58,212,78,58,58,246,246,246,99,58,
|
||||
99,246,246,246,246,246,246,246,246,246,212,246,58,78,78,78,78,78,58,78,
|
||||
78,58,78,78,58,78,58,99,58,8,99,99,58,58,58,78,78,58,78,58,
|
||||
78,78,78,246,78,78,78,246,246,246,246,246,246,246,246,103,246,246,246,246,
|
||||
246,58,58,58,58,58,58,58,58,58,78,78,246,78,58,58,58,212,78,58,
|
||||
58,78,58,58,58,12,92,12,99,218,118,19,82,223,22,116,237,49,112,112,
|
||||
101,112,93,109,70,112,118,82,223,55,136,185,44,26,253,253,82,62,107,163,
|
||||
117,16,114,159,161,106,98,46,26,26,26,26,26,4,32,81,44,142,43,234,
|
||||
10,56,236,23,20,20,20,8,4,219,225,237,19,82,11,244,62,54,62,223,
|
||||
20,112,30,244,72,239,103,237,71,12,12,71,58,71,92,92,12,128,58,58,
|
||||
58,58,246,78,246,58,58,58,99,58,58,246,78,78,58,246,246,58,58,58,
|
||||
58,212,246,212,246,246,246,246,246,246,78,78,246,58,246,58,78,246,78,58,
|
||||
78,58,78,78,58,58,58,58,58,8,58,58,58,58,78,237,58,78,78,78,
|
||||
78,78,78,58,246,246,212,246,246,246,246,246,246,246,246,246,246,246,246,246,
|
||||
78,58,58,58,58,58,99,58,58,246,246,246,58,246,58,58,58,78,246,218,
|
||||
11,58,58,58,58,12,92,71,218,11,49,223,101,23,239,93,23,118,244,223,
|
||||
223,65,29,70,70,112,82,82,72,233,135,152,121,253,20,49,242,179,176,39,
|
||||
198,156,32,47,26,26,69,113,26,47,9,47,162,113,26,121,113,252,152,159,
|
||||
43,234,217,238,30,253,20,251,8,4,107,17,30,82,223,22,62,62,54,244,
|
||||
82,19,237,112,244,41,245,30,112,71,92,71,99,71,12,92,92,71,78,58,
|
||||
58,246,246,58,78,212,58,58,58,58,58,78,246,58,99,58,212,58,58,58,
|
||||
58,78,246,246,246,246,246,246,246,246,246,246,78,78,78,78,246,58,78,78,
|
||||
58,58,58,99,58,99,58,58,58,8,58,99,99,58,58,78,78,58,78,58,
|
||||
78,58,78,78,78,78,78,246,246,246,246,246,246,246,246,246,78,246,246,246,
|
||||
58,58,78,58,78,58,58,99,58,78,58,246,246,58,58,58,212,58,58,12,
|
||||
71,58,58,58,99,92,92,71,218,71,223,8,19,22,150,30,49,11,23,101,
|
||||
30,93,54,49,112,49,20,30,254,181,95,26,253,253,49,65,163,166,206,202,
|
||||
52,26,8,121,4,161,43,114,139,131,57,200,195,188,192,88,26,26,121,98,
|
||||
197,67,234,145,230,22,82,20,20,8,98,107,100,112,253,112,103,244,54,62,
|
||||
49,20,49,237,118,208,243,103,11,11,12,92,92,92,92,12,49,12,58,58,
|
||||
78,58,246,78,246,78,212,99,58,58,78,246,58,78,58,58,58,99,58,58,
|
||||
58,99,246,246,246,246,246,246,246,246,246,246,246,78,246,78,246,78,58,78,
|
||||
78,58,78,78,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78,
|
||||
78,78,78,78,78,246,246,246,246,246,246,246,246,246,246,246,58,212,58,246,
|
||||
99,212,58,99,78,99,58,58,78,246,58,58,58,78,78,58,78,78,99,71,
|
||||
12,71,58,58,12,12,12,71,11,12,223,101,49,243,100,118,223,112,82,19,
|
||||
93,225,113,23,244,101,223,41,129,199,52,253,20,223,242,124,39,57,117,122,
|
||||
121,121,47,44,195,35,94,196,165,189,189,189,27,84,200,139,67,186,26,121,
|
||||
240,106,159,234,175,68,242,20,20,20,8,210,238,93,223,19,237,244,23,54,
|
||||
62,19,101,244,112,30,243,208,237,11,12,92,49,223,12,12,92,12,58,78,
|
||||
246,78,58,246,78,212,78,78,58,58,212,58,58,58,78,99,58,58,99,58,
|
||||
58,58,246,246,246,246,246,246,246,246,246,246,78,246,58,78,58,78,78,78,
|
||||
78,78,237,78,58,58,58,58,58,8,99,58,99,58,78,78,78,58,78,78,
|
||||
78,78,78,78,78,58,246,246,246,246,103,246,246,246,246,218,58,58,78,78,
|
||||
58,99,71,12,58,78,58,78,58,78,123,12,78,78,58,212,78,78,123,92,
|
||||
12,12,99,99,12,92,92,71,11,118,82,101,112,116,236,82,112,112,82,118,
|
||||
100,110,66,23,49,101,244,215,73,43,69,253,101,23,219,59,97,202,52,8,
|
||||
8,4,120,97,187,139,27,143,46,113,26,26,46,88,60,27,131,200,192,47,
|
||||
82,66,81,159,234,170,68,118,20,251,20,26,2,64,244,101,118,22,23,62,
|
||||
62,49,20,118,244,23,208,245,30,11,71,12,92,12,12,49,12,12,71,58,
|
||||
246,246,78,246,78,246,58,78,58,78,212,218,12,246,78,99,58,78,78,11,
|
||||
12,58,58,246,246,103,246,246,58,246,246,246,246,78,246,78,78,78,58,78,
|
||||
78,58,58,58,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78,
|
||||
78,212,78,246,246,78,99,58,246,246,246,246,246,246,71,12,99,58,58,99,
|
||||
58,58,53,251,71,78,78,78,78,246,19,19,71,246,246,78,212,246,12,92,
|
||||
12,12,12,12,92,12,12,71,218,118,19,101,244,239,65,223,244,11,53,112,
|
||||
222,235,66,112,223,20,72,45,90,221,8,253,19,242,214,97,57,152,26,8,
|
||||
26,188,57,187,139,186,8,8,8,8,121,121,8,8,26,4,44,131,94,67,
|
||||
162,82,113,44,159,76,220,29,82,0,20,8,98,238,245,82,82,237,23,62,
|
||||
54,112,20,223,237,49,22,245,237,11,71,49,12,92,12,12,12,12,71,78,
|
||||
246,58,246,58,246,78,246,58,246,212,58,19,101,218,78,78,99,58,58,53,
|
||||
101,71,58,246,246,246,78,71,92,58,246,246,212,246,78,58,58,78,78,58,
|
||||
78,78,78,78,58,58,58,58,58,8,99,99,58,99,58,78,78,58,99,58,
|
||||
78,78,58,246,78,58,71,92,218,246,246,246,103,246,12,92,92,58,58,58,
|
||||
58,218,63,53,19,246,246,78,78,212,53,92,92,212,246,78,78,58,92,218,
|
||||
12,12,92,92,92,12,12,71,11,118,101,101,22,116,242,223,237,11,8,30,
|
||||
17,62,70,112,8,53,72,172,134,143,8,20,223,109,102,57,97,81,121,82,
|
||||
252,114,35,157,165,26,253,8,8,46,182,4,26,26,8,8,113,160,190,35,
|
||||
186,66,121,106,117,152,232,68,49,79,20,8,26,42,17,223,53,22,112,244,
|
||||
54,244,8,82,30,118,30,245,30,11,99,12,12,92,123,12,12,12,71,78,
|
||||
246,78,246,78,58,246,246,58,246,58,12,53,53,12,78,78,78,99,12,63,
|
||||
63,92,78,78,246,246,78,229,229,12,246,246,246,212,78,71,71,58,78,78,
|
||||
58,78,78,58,58,58,212,58,58,8,99,58,58,58,58,78,78,58,99,218,
|
||||
99,58,246,78,78,58,12,92,12,78,246,246,246,218,92,92,19,71,58,58,
|
||||
58,12,38,92,53,71,246,58,246,218,108,92,92,218,246,212,78,58,12,218,
|
||||
12,12,12,92,12,92,12,71,71,118,82,8,103,116,242,82,244,11,82,30,
|
||||
222,210,223,23,8,101,55,172,183,186,8,253,223,110,102,157,97,161,8,8,
|
||||
127,67,190,140,189,26,8,8,69,127,120,5,52,26,26,8,121,9,84,187,
|
||||
43,113,82,98,142,152,89,119,244,20,0,253,121,219,64,23,101,30,30,23,
|
||||
54,244,82,101,30,112,112,72,237,71,30,12,12,92,118,12,12,12,71,58,
|
||||
246,246,58,246,58,212,78,246,58,246,108,63,53,19,78,78,78,58,53,101,
|
||||
53,108,78,246,246,246,108,79,20,53,246,246,246,78,99,92,92,12,99,78,
|
||||
78,58,58,218,218,218,99,58,58,8,99,99,58,58,58,99,99,218,71,11,
|
||||
99,99,78,246,212,71,218,71,92,71,246,246,246,71,92,92,19,19,58,58,
|
||||
58,92,53,92,92,108,58,246,246,71,92,92,92,92,212,246,246,58,123,48,
|
||||
12,12,12,92,92,12,12,12,99,118,19,101,237,116,65,49,30,112,82,244,
|
||||
222,235,26,118,82,101,65,136,183,7,8,8,82,242,21,157,57,192,69,8,
|
||||
26,7,191,157,190,60,9,8,26,52,84,131,60,4,121,8,26,113,67,94,
|
||||
142,113,82,98,43,152,10,119,244,251,0,253,121,111,64,23,101,244,22,49,
|
||||
62,62,82,101,112,23,112,103,30,71,11,12,12,118,12,12,118,12,71,78,
|
||||
78,246,78,58,218,58,78,246,246,12,53,101,53,19,58,78,58,12,63,63,
|
||||
53,63,218,246,246,71,79,20,63,101,218,246,246,218,12,19,108,12,99,58,
|
||||
99,71,218,71,71,218,71,218,71,8,99,58,99,99,58,58,11,218,71,218,
|
||||
71,71,218,58,58,99,218,99,71,92,218,78,246,92,92,12,223,53,71,58,
|
||||
58,19,19,92,92,19,12,78,78,12,92,92,92,92,71,78,78,218,123,241,
|
||||
48,12,12,92,49,12,118,12,71,49,223,101,11,116,65,66,112,11,82,112,
|
||||
100,54,66,66,223,20,244,105,90,159,8,8,8,244,10,167,187,202,98,8,
|
||||
121,47,192,169,190,35,195,188,188,195,57,84,106,47,8,8,8,122,195,140,
|
||||
95,66,82,98,142,221,175,119,244,251,251,20,8,219,64,112,101,30,242,118,
|
||||
23,62,19,20,11,118,112,22,11,11,99,12,12,12,12,71,12,118,71,58,
|
||||
246,58,246,99,12,99,212,78,58,19,53,53,101,53,58,78,218,53,101,53,
|
||||
53,63,218,246,246,63,0,101,19,53,12,78,58,12,108,92,19,108,92,71,
|
||||
71,12,71,71,123,71,71,123,71,8,99,99,58,58,58,11,58,11,99,218,
|
||||
99,11,99,99,218,99,218,99,71,12,12,99,99,92,92,92,12,19,53,71,
|
||||
99,38,53,12,12,92,19,218,212,92,92,92,48,12,108,128,246,218,123,48,
|
||||
128,123,12,12,12,12,12,118,71,71,223,8,112,41,55,49,49,244,223,49,
|
||||
93,231,70,82,223,20,82,116,181,158,252,8,20,223,242,214,57,157,156,46,
|
||||
8,66,26,147,44,198,86,196,86,198,44,52,4,8,8,8,46,60,97,194,
|
||||
52,82,82,180,159,177,232,64,66,79,20,8,26,231,100,49,8,237,62,23,
|
||||
62,244,82,82,30,223,11,237,112,11,11,12,12,71,12,12,118,12,71,218,
|
||||
246,78,58,218,92,99,246,212,92,53,79,79,53,53,218,58,19,63,38,126,
|
||||
53,101,92,58,19,251,63,223,19,19,92,71,12,223,92,223,223,92,19,92,
|
||||
12,71,123,71,71,71,71,71,71,8,11,58,11,58,99,58,99,58,99,58,
|
||||
58,218,218,218,99,218,11,99,99,71,92,92,12,49,92,71,99,12,53,53,
|
||||
92,20,53,123,48,12,92,19,218,19,92,12,241,48,92,92,58,218,92,241,
|
||||
128,212,71,12,118,12,12,71,71,112,223,19,82,55,116,112,49,244,223,19,
|
||||
208,238,235,66,223,253,82,22,250,73,95,113,8,82,49,111,102,207,132,188,
|
||||
252,69,8,121,162,4,47,52,127,4,4,26,26,8,8,46,186,86,169,95,
|
||||
66,8,4,95,192,87,45,236,101,251,253,8,70,222,236,223,223,237,244,23,
|
||||
54,244,82,82,237,118,11,244,71,11,99,71,118,12,12,12,12,12,12,58,
|
||||
78,78,246,123,108,12,212,12,53,63,13,83,63,53,12,92,53,226,13,13,
|
||||
53,53,53,226,75,63,12,71,92,19,19,92,92,92,19,12,12,12,92,12,
|
||||
71,71,71,71,71,12,71,71,71,8,99,99,58,99,99,58,58,99,58,58,
|
||||
11,218,71,71,11,218,99,99,58,218,12,19,92,92,92,99,78,58,92,101,
|
||||
75,251,53,12,123,48,92,108,101,63,92,12,241,241,92,92,108,92,108,128,
|
||||
212,246,58,12,12,12,49,12,12,118,12,49,19,237,116,22,49,118,244,82,
|
||||
112,17,231,70,223,82,20,82,93,45,133,7,46,8,8,49,50,224,168,207,
|
||||
142,60,127,46,8,26,8,8,8,8,8,8,121,26,47,192,166,169,7,113,
|
||||
66,113,7,156,36,217,28,23,251,251,20,26,111,222,30,8,49,22,112,62,
|
||||
242,112,101,112,30,49,244,11,112,11,99,71,12,12,118,12,12,12,71,246,
|
||||
246,78,212,92,108,92,218,53,38,13,0,0,63,101,20,63,101,75,83,83,
|
||||
63,101,229,79,126,92,58,78,12,19,92,92,19,92,12,71,71,118,71,71,
|
||||
218,12,71,71,71,71,71,218,99,8,218,99,218,58,58,218,99,99,58,99,
|
||||
58,58,99,99,218,99,218,99,58,58,99,92,92,92,19,58,78,78,99,108,
|
||||
0,34,38,123,123,48,123,92,53,108,92,12,241,241,241,123,92,19,19,123,
|
||||
241,212,246,99,12,71,12,71,12,71,118,223,82,118,245,100,112,49,30,118,
|
||||
223,237,238,111,113,223,19,20,49,93,144,184,44,113,8,253,19,210,173,141,
|
||||
168,57,196,142,60,52,122,182,113,113,122,3,60,159,130,86,43,122,26,223,
|
||||
47,106,95,76,89,68,244,20,251,20,8,210,238,72,223,19,30,112,23,62,
|
||||
244,223,20,118,112,112,244,118,11,99,99,218,71,218,71,12,12,71,58,58,
|
||||
78,246,246,92,63,53,53,101,83,0,83,83,53,63,63,53,20,83,0,0,
|
||||
53,53,79,0,226,78,58,78,12,108,92,19,92,71,58,58,99,71,71,123,
|
||||
71,218,218,71,218,218,99,218,99,8,99,99,218,218,99,99,99,99,58,99,
|
||||
99,58,99,11,71,99,99,58,58,58,58,71,92,92,19,78,78,58,78,218,
|
||||
53,63,101,123,123,48,48,123,92,19,92,92,241,241,241,241,92,92,92,12,
|
||||
241,212,78,78,123,118,12,12,12,12,112,92,49,223,30,247,65,49,23,112,
|
||||
82,23,72,231,14,26,82,19,101,49,17,146,102,154,147,69,8,82,49,23,
|
||||
249,104,158,39,206,169,86,130,202,142,202,114,39,117,76,88,4,66,66,113,
|
||||
7,95,234,175,68,22,101,20,251,8,4,107,100,112,101,112,30,23,112,62,
|
||||
49,101,49,244,118,112,112,118,11,78,99,99,99,58,71,12,92,99,246,78,
|
||||
246,58,218,108,108,53,63,229,0,83,34,13,53,53,101,38,13,0,0,13,
|
||||
53,101,63,101,99,78,58,78,71,19,19,92,71,58,99,58,11,218,218,71,
|
||||
99,99,99,99,218,58,99,218,218,8,71,218,99,99,218,58,99,99,99,99,
|
||||
99,58,99,58,99,218,11,58,58,99,58,58,71,92,92,58,78,78,78,78,
|
||||
118,19,53,123,48,128,128,48,123,12,92,92,48,128,212,48,241,12,12,92,
|
||||
241,128,246,246,246,71,12,12,12,71,71,118,49,223,49,208,116,22,49,23,
|
||||
11,223,223,72,225,235,113,82,82,101,49,65,68,164,201,7,162,26,8,121,
|
||||
66,223,23,216,14,36,177,152,154,152,80,255,98,66,66,223,66,4,32,152,
|
||||
152,163,228,222,112,251,20,20,8,113,219,222,22,82,23,22,62,112,54,244,
|
||||
101,82,112,112,23,118,112,11,11,78,58,58,246,99,71,71,99,58,246,212,
|
||||
58,58,123,108,108,53,20,13,101,19,34,13,53,53,53,0,75,38,0,34,
|
||||
63,53,53,71,58,78,58,78,11,92,92,71,58,58,58,58,99,218,11,99,
|
||||
11,58,218,218,99,99,218,99,99,8,99,71,99,99,99,99,99,218,58,99,
|
||||
218,58,99,99,99,58,58,78,58,99,58,58,58,71,12,78,78,78,78,78,
|
||||
58,12,19,12,48,218,246,218,48,12,92,92,241,48,58,212,48,241,12,92,
|
||||
48,241,212,58,212,212,123,118,12,71,118,118,12,223,49,118,55,239,244,223,
|
||||
112,112,82,118,236,225,14,4,26,82,101,19,112,93,153,21,224,174,88,162,
|
||||
26,26,121,82,66,66,66,66,66,66,26,82,66,26,113,127,32,44,51,87,
|
||||
248,222,236,223,20,20,20,8,70,111,17,237,223,49,237,30,62,54,30,118,
|
||||
253,49,112,118,23,118,118,11,99,58,58,58,212,99,71,218,246,78,78,58,
|
||||
58,58,108,108,63,38,13,92,58,12,13,251,53,63,251,79,12,71,34,34,
|
||||
251,53,19,58,78,78,78,58,58,71,71,58,99,99,58,99,58,11,58,99,
|
||||
99,99,99,218,218,99,218,218,99,8,71,99,218,218,218,99,218,99,99,99,
|
||||
99,71,58,99,99,99,99,58,58,99,58,58,78,58,99,78,58,78,58,78,
|
||||
78,78,99,218,128,58,58,78,128,48,12,92,123,241,78,246,58,48,241,218,
|
||||
12,128,212,212,58,58,212,218,71,12,71,12,118,12,223,49,11,243,55,244,
|
||||
49,112,244,223,49,236,17,111,4,121,82,82,8,223,244,29,153,61,148,234,
|
||||
152,32,147,52,4,4,113,26,113,26,98,98,147,255,7,193,24,163,217,238,
|
||||
110,112,101,20,20,253,8,70,107,222,22,223,223,244,244,244,244,242,112,82,
|
||||
223,118,23,23,49,118,71,11,58,58,58,246,246,58,99,78,58,212,212,78,
|
||||
58,99,53,53,38,83,19,58,246,19,34,79,251,34,34,71,58,71,79,13,
|
||||
83,63,218,58,58,99,58,78,58,99,78,58,99,99,99,58,58,99,99,58,
|
||||
218,11,218,99,11,218,11,99,71,8,71,218,218,11,71,99,218,99,99,99,
|
||||
99,218,11,99,58,58,58,58,11,58,99,218,58,58,78,78,78,78,58,58,
|
||||
78,78,78,78,58,78,78,78,58,58,48,123,48,48,128,78,246,78,128,241,
|
||||
241,241,128,212,58,58,58,58,218,12,118,71,71,112,118,223,49,11,245,55,
|
||||
30,49,112,244,223,19,30,93,107,111,4,26,101,101,8,101,112,242,93,203,
|
||||
6,170,21,74,51,51,104,24,234,76,24,104,76,124,232,56,225,18,30,223,
|
||||
20,20,20,20,8,66,235,231,236,112,223,118,30,112,112,54,244,112,82,49,
|
||||
112,23,118,118,12,11,99,99,246,58,58,58,78,58,246,246,78,78,212,78,
|
||||
58,12,53,229,34,40,78,78,58,38,0,13,13,79,71,58,58,71,13,0,
|
||||
38,71,58,99,58,99,58,99,78,58,58,99,99,99,71,99,58,99,218,99,
|
||||
71,99,218,99,99,71,218,99,71,8,71,71,71,123,218,218,11,218,218,218,
|
||||
218,99,218,218,99,99,99,99,58,99,99,99,99,99,58,78,78,58,58,99,
|
||||
99,78,78,246,78,212,78,78,58,78,128,48,48,241,48,246,78,58,246,128,
|
||||
128,128,128,128,212,78,212,78,58,218,71,71,12,12,118,118,49,49,112,208,
|
||||
41,22,49,112,244,23,19,49,22,93,219,14,4,8,82,101,20,101,223,49,
|
||||
30,65,18,29,17,203,228,230,56,96,91,225,225,236,242,112,49,82,20,20,
|
||||
20,20,82,113,210,107,29,22,118,223,112,30,244,244,62,112,23,82,223,49,
|
||||
118,118,49,49,118,71,99,246,58,58,212,246,246,78,212,58,246,246,78,58,
|
||||
218,53,209,126,40,78,78,78,218,0,34,34,79,71,78,99,58,71,251,229,
|
||||
12,58,99,99,99,58,58,58,58,99,99,99,99,218,99,58,99,99,99,218,
|
||||
99,218,11,218,218,11,218,71,71,8,71,123,71,71,218,123,71,99,11,99,
|
||||
218,11,99,71,218,99,58,99,99,58,218,218,99,99,58,58,58,58,99,58,
|
||||
58,99,58,246,246,246,78,58,58,58,78,58,48,48,241,78,246,78,78,58,
|
||||
58,241,241,241,212,58,246,78,246,58,218,71,71,71,118,118,118,49,49,112,
|
||||
103,243,236,112,49,244,112,49,223,118,65,93,107,14,98,113,82,8,101,253,
|
||||
101,20,101,82,82,223,118,118,49,49,49,82,82,101,101,20,20,253,253,121,
|
||||
26,70,235,110,29,103,118,223,223,11,244,244,54,242,244,49,19,223,49,118,
|
||||
118,49,12,71,11,99,212,246,78,78,78,78,212,246,78,58,78,212,78,58,
|
||||
12,38,213,71,78,58,58,78,40,83,79,20,99,58,99,58,99,12,92,71,
|
||||
78,58,99,99,99,99,99,99,99,99,218,218,99,218,218,99,218,218,11,218,
|
||||
11,218,218,71,218,218,71,123,71,8,71,71,12,71,71,218,218,218,71,71,
|
||||
218,218,218,218,71,218,218,99,99,218,99,99,99,99,99,99,58,99,58,99,
|
||||
99,99,99,58,78,78,78,78,58,99,58,58,58,128,48,128,78,78,58,78,
|
||||
212,212,212,241,128,58,246,246,58,246,58,218,218,118,71,71,118,12,118,49,
|
||||
23,237,245,55,208,23,118,23,112,223,223,118,244,236,18,110,14,210,4,66,
|
||||
121,8,82,20,82,101,101,251,20,20,20,101,8,20,8,8,26,26,210,235,
|
||||
109,110,65,30,118,223,49,244,244,244,244,242,65,30,223,82,49,118,118,49,
|
||||
92,49,118,71,11,78,246,78,58,246,212,246,78,78,246,78,246,78,212,218,
|
||||
53,92,99,78,58,58,58,246,53,0,53,99,99,58,99,58,99,71,218,58,
|
||||
99,58,99,218,58,99,58,78,99,99,11,99,71,99,99,218,99,99,218,71,
|
||||
123,218,71,218,12,71,71,71,71,8,71,71,71,71,71,118,71,71,218,99,
|
||||
71,71,71,123,71,71,218,99,99,218,218,71,11,218,99,99,58,99,58,99,
|
||||
99,99,218,58,58,78,78,78,58,99,99,58,58,58,58,128,246,78,58,58,
|
||||
58,58,246,128,128,58,212,246,78,78,78,58,58,218,71,71,11,118,118,49,
|
||||
12,23,11,103,243,72,237,23,23,112,23,223,19,223,112,22,109,18,29,111,
|
||||
111,210,210,70,4,26,26,26,26,26,26,4,4,70,98,235,2,18,29,65,
|
||||
54,23,223,49,23,244,244,112,244,54,22,244,118,82,223,223,118,92,49,49,
|
||||
223,71,11,99,99,78,246,58,246,78,58,212,78,78,58,58,246,78,58,218,
|
||||
71,78,58,58,99,58,58,99,19,77,58,58,58,218,99,58,58,58,58,58,
|
||||
218,99,11,218,58,99,218,58,218,218,71,218,218,71,99,71,218,71,71,218,
|
||||
71,123,71,71,71,71,71,71,12,8,118,118,71,71,118,71,71,71,118,12,
|
||||
71,123,71,71,71,71,71,71,218,99,99,99,218,218,71,218,99,99,58,99,
|
||||
99,218,99,218,58,58,246,78,78,99,99,99,99,58,246,78,58,246,58,58,
|
||||
58,58,58,78,78,58,58,58,246,212,99,58,58,58,218,99,71,118,11,118,
|
||||
49,49,49,23,11,208,55,245,22,112,23,23,23,23,49,49,49,223,112,30,
|
||||
22,236,18,18,18,29,18,18,18,18,107,236,29,236,236,22,30,23,223,223,
|
||||
223,118,118,112,244,112,244,242,242,30,23,223,82,223,49,49,49,223,49,12,
|
||||
71,71,99,58,246,212,58,58,58,78,78,78,58,58,58,58,78,212,246,78,
|
||||
78,58,58,11,99,58,78,78,99,58,58,99,218,99,58,99,58,58,58,218,
|
||||
99,71,218,99,218,58,99,218,218,71,218,123,71,99,71,218,71,71,71,12,
|
||||
71,71,12,12,12,12,12,12,12,8,12,12,12,12,12,12,118,118,71,71,
|
||||
71,218,71,123,71,71,71,71,123,71,218,11,218,71,218,123,218,99,218,58,
|
||||
99,99,11,218,71,99,99,58,78,58,99,99,71,99,58,78,246,246,246,58,
|
||||
58,218,58,99,78,78,246,78,78,246,58,58,58,212,58,58,99,71,71,118,
|
||||
71,118,118,23,49,112,112,103,72,72,65,244,112,23,118,118,70,223,223,223,
|
||||
223,49,118,23,118,112,112,244,112,112,23,23,23,49,49,223,223,49,23,118,
|
||||
244,244,112,62,244,109,22,30,49,223,223,82,49,223,49,223,223,118,118,71,
|
||||
99,99,99,78,78,246,58,58,78,78,58,58,58,99,78,246,78,78,78,78,
|
||||
99,99,99,58,99,58,78,78,58,99,99,11,218,99,99,58,58,11,99,218,
|
||||
218,218,71,99,218,218,11,218,123,71,218,71,71,218,71,71,123,71,118,12,
|
||||
71,12,12,12,12,12,12,12,12,8,12,12,12,12,12,12,71,71,71,118,
|
||||
71,118,71,71,118,12,71,71,71,71,99,218,123,71,218,71,218,71,99,99,
|
||||
99,218,218,71,218,218,99,58,58,58,58,218,99,218,218,99,58,99,78,58,
|
||||
58,99,99,99,58,58,78,246,246,78,78,78,58,99,58,58,99,58,99,71,
|
||||
11,71,12,23,118,118,118,23,112,30,103,208,208,65,242,112,118,23,23,118,
|
||||
118,118,49,112,23,112,11,112,112,112,118,49,49,49,49,112,23,23,112,244,
|
||||
244,22,22,22,242,112,49,223,223,66,223,49,223,49,223,49,12,71,71,99,
|
||||
99,58,212,212,246,58,78,78,58,58,99,99,99,58,78,78,78,78,58,58,
|
||||
99,99,99,58,58,58,58,58,99,218,71,218,99,99,218,58,99,99,71,218,
|
||||
71,71,218,99,71,99,123,71,118,118,123,71,71,123,71,71,12,12,118,12,
|
||||
12,12,12,12,12,12,71,12,71,8,12,92,12,92,71,12,118,118,12,12,
|
||||
118,71,71,12,71,71,118,12,12,71,118,218,71,71,71,12,71,12,218,218,
|
||||
99,99,218,218,71,71,71,218,99,99,99,99,71,71,218,71,99,58,58,58,
|
||||
58,58,99,11,99,99,99,58,246,78,246,78,58,99,99,99,58,58,99,99,
|
||||
99,11,71,112,112,118,118,92,118,23,118,112,30,237,103,65,65,22,30,54,
|
||||
244,244,23,112,244,112,244,112,244,23,244,23,112,62,244,244,30,242,22,242,
|
||||
22,30,23,49,49,19,82,223,223,49,49,49,223,49,12,11,11,218,99,58,
|
||||
58,78,78,78,246,78,78,99,99,58,99,58,58,78,78,78,58,99,218,218,
|
||||
71,99,99,99,58,99,58,99,71,123,71,218,99,99,218,99,218,71,12,71,
|
||||
71,218,71,71,218,71,71,71,71,71,12,71,71,71,118,12,12,12,71,71,
|
||||
12,12,12,12,118,12,12,92,12,8,12,12,71,12,12,12,12,12,71,12,
|
||||
118,12,12,12,118,12,71,12,12,71,71,71,71,123,71,12,12,71,71,218,
|
||||
218,218,11,71,123,71,71,218,71,99,99,58,99,99,71,218,218,99,218,58,
|
||||
58,58,58,99,218,71,99,218,58,58,58,246,212,58,58,99,99,58,99,58,
|
||||
58,58,58,218,71,71,112,71,118,118,49,23,118,118,49,112,112,30,237,22,
|
||||
22,22,103,22,22,22,22,22,30,242,22,22,22,103,22,22,30,112,112,23,
|
||||
49,49,49,82,223,66,49,49,49,49,223,12,118,71,218,99,99,58,99,58,
|
||||
78,246,78,246,58,58,99,99,218,218,99,99,99,58,58,58,99,218,71,218,
|
||||
99,99,58,58,58,99,218,123,71,71,218,218,99,99,99,123,71,71,71,92,
|
||||
71,71,218,218,71,12,12,12,118,71,12,118,71,71,71,12,12,12,12,12,
|
||||
12,12,118,118,12,12,12,12,12,8,92,92,92,12,12,12,12,12,12,12,
|
||||
92,12,12,12,71,12,118,12,12,12,12,12,71,71,71,12,12,71,118,71,
|
||||
71,123,71,71,71,118,71,71,71,123,71,218,218,99,218,71,12,71,71,218,
|
||||
218,58,58,99,58,71,71,218,218,218,99,58,58,58,58,58,99,99,99,218,
|
||||
218,99,58,58,99,99,99,11,11,11,23,112,118,112,49,118,118,118,23,118,
|
||||
49,118,23,112,112,112,112,244,112,112,118,112,118,49,49,223,49,223,223,49,
|
||||
223,223,49,49,223,49,223,223,118,118,71,11,218,99,218,99,218,78,58,58,
|
||||
58,58,58,218,218,218,218,218,58,99,58,58,58,58,218,99,71,71,123,71,
|
||||
218,99,58,99,99,71,71,12,12,71,71,71,218,218,218,71,118,71,71,12,
|
||||
123,71,12,71,71,12,12,12,118,71,12,12,12,118,118,12,71,118,12,118,
|
||||
12,12,12,12,12,92,12,12,92,8,92,92,12,12,92,12,92,12,12,12,
|
||||
12,12,118,12,12,12,12,12,12,12,118,12,12,71,118,71,12,12,71,118,
|
||||
71,71,71,123,218,118,12,71,71,71,71,99,99,218,218,71,71,71,71,71,
|
||||
99,218,99,58,99,218,218,71,71,71,218,71,58,99,58,58,99,58,218,99,
|
||||
99,218,99,99,58,58,58,99,58,99,218,11,71,112,11,112,118,23,118,23,
|
||||
49,118,118,92,49,92,49,92,49,92,49,223,223,49,223,49,49,49,49,82,
|
||||
49,49,49,223,118,118,71,71,11,71,99,218,218,99,58,58,58,58,58,58,
|
||||
58,218,218,218,71,218,218,99,99,99,99,58,218,218,71,123,71,71,218,11,
|
||||
99,99,218,218,71,71,12,71,12,218,218,218,71,218,118,12,71,118,71,71,
|
||||
71,71,71,71,118,71,12,12,12,71,12,12,12,12,12,12,12,49,12,12,
|
||||
12,92,12,49,12,92,12,12,92,8,92,92,92,92,92,12,92,12,12,92,
|
||||
12,92,12,92,12,71,71,12,12,12,12,71,12,118,71,118,71,118,12,12,
|
||||
12,12,71,71,218,71,71,118,118,12,12,118,71,218,71,218,123,12,12,12,
|
||||
12,71,71,99,99,99,218,71,71,71,71,123,71,218,218,58,99,99,58,218,
|
||||
99,218,218,11,99,218,99,218,218,58,58,58,99,218,71,11,71,71,118,11,
|
||||
112,71,112,118,112,12,118,118,118,118,118,118,118,118,118,118,223,223,49,49,
|
||||
118,118,118,71,71,71,218,71,218,71,99,99,99,218,58,58,58,218,218,218,
|
||||
218,71,71,218,123,71,218,99,58,218,218,99,71,118,12,71,71,71,218,218,
|
||||
218,99,71,118,12,12,12,71,71,123,71,71,71,12,118,12,92,71,118,71,
|
||||
12,12,71,12,12,92,12,12,12,118,12,12,12,12,12,92,12,12,12,92,
|
||||
71,92,12,92,92,92,92,92,12,8,92,92,92,92,92,92,92,92,92,12,
|
||||
92,12,92,12,92,92,12,118,92,12,12,92,92,12,12,12,12,12,12,12,
|
||||
12,12,71,118,12,118,71,71,12,12,12,12,118,71,218,71,218,71,118,12,
|
||||
12,71,12,71,218,71,99,218,123,71,71,12,71,118,71,71,99,218,218,99,
|
||||
218,99,218,218,218,71,123,71,218,218,218,218,99,99,99,58,99,99,99,218,
|
||||
99,71,71,71,11,71,11,11,11,11,11,11,11,11,71,118,12,118,218,218,
|
||||
71,218,71,71,218,71,99,71,99,99,99,58,218,99,218,218,71,71,71,71,
|
||||
71,71,123,71,11,99,99,99,218,218,71,71,12,12,12,71,123,218,71,218,
|
||||
71,118,71,12,118,12,12,71,71,218,118,12,12,12,92,12,71,118,71,71,
|
||||
12,71,92,12,92,12,12,12,118,12,12,92,92,12,92,12,92,92,92,92,
|
||||
92,92,92,92,12,92,92,92,92,8,92,92,92,12,92,92,92,92,92,92,
|
||||
92,92,92,12,92,92,12,12,92,92,92,12,92,92,12,12,118,12,12,92,
|
||||
92,12,12,12,71,71,71,118,12,118,12,12,12,71,12,71,71,71,71,12,
|
||||
12,12,118,12,12,118,218,71,71,71,12,71,71,71,12,12,71,71,71,11,
|
||||
218,99,218,218,218,218,71,71,71,71,71,71,71,71,218,218,218,218,99,218,
|
||||
218,218,99,218,99,218,218,218,218,218,218,218,218,99,218,11,218,71,71,71,
|
||||
71,123,71,123,71,218,99,218,218,11,218,99,71,71,71,71,71,71,71,92,
|
||||
71,71,71,123,71,218,71,71,71,118,12,12,12,12,71,71,71,218,71,71,
|
||||
12,12,12,12,12,12,12,71,71,71,12,12,12,12,12,12,12,12,118,12,
|
||||
12,92,92,92,12,92,12,71,12,92,92,12,92,92,92,92,92,12,92,92,
|
||||
92,92,92,92,92,92,92,92,92,8,92,19,92,92,92,92,92,223,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,12,118,12,12,
|
||||
12,92,92,12,92,12,12,12,71,12,49,12,92,92,12,12,71,12,12,12,
|
||||
12,71,12,12,12,12,71,12,71,71,218,218,71,118,12,12,12,71,12,12,
|
||||
71,123,71,71,99,71,71,123,71,123,71,123,71,71,71,71,71,71,71,71,
|
||||
71,218,218,218,71,71,218,71,218,71,218,71,71,123,71,123,71,123,71,123,
|
||||
218,71,218,218,218,218,71,71,71,71,71,12,12,12,12,12,12,12,71,71,
|
||||
71,123,218,218,71,71,12,12,12,71,12,12,12,12,71,71,71,12,118,12,
|
||||
12,92,12,12,12,12,12,12,71,12,92,12,92,12,12,118,12,12,12,92,
|
||||
92,92,92,92,92,12,92,92,12,92,92,92,92,19,12,92,92,92,92,92,
|
||||
12,92,92,92,92,92,92,92,92,8,19,108,19,108,12,19,92,92,92,92,
|
||||
92,92,92,92,92,19,92,92,92,92,92,92,92,92,92,92,92,92,12,92,
|
||||
92,92,92,92,92,92,12,12,12,12,71,12,92,92,92,92,12,92,118,12,
|
||||
12,12,12,12,92,12,12,12,71,12,71,71,71,12,12,12,12,12,12,92,
|
||||
112,118,71,12,71,71,71,218,71,71,71,71,71,71,12,12,12,12,12,12,
|
||||
12,118,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,
|
||||
71,71,71,71,71,71,71,71,118,71,12,71,12,12,12,12,12,71,71,123,
|
||||
71,71,71,92,12,12,12,12,92,92,71,12,12,12,12,71,12,12,92,12,
|
||||
92,92,12,118,12,12,118,12,12,92,92,92,92,12,12,12,12,92,92,92,
|
||||
92,12,92,12,92,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,92,12,19,19,108,92,8,92,92,19,92,108,92,19,92,92,92,
|
||||
92,108,92,92,92,12,92,92,12,92,92,92,92,92,92,92,92,92,92,12,
|
||||
12,92,92,92,92,223,12,92,12,12,12,12,12,92,92,12,92,12,12,12,
|
||||
12,12,12,12,49,12,92,92,92,92,12,12,71,12,12,12,12,12,12,12,
|
||||
92,92,118,92,12,12,118,12,12,12,12,12,12,71,12,12,12,12,12,12,
|
||||
12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
|
||||
12,12,118,118,12,118,12,12,12,12,12,12,12,12,12,12,12,12,71,12,
|
||||
12,12,71,92,12,92,92,49,12,12,12,12,118,12,12,118,92,12,92,92,
|
||||
12,12,12,12,123,12,92,92,92,92,92,92,12,92,12,92,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,12,92,92,92,19,92,92,108,
|
||||
92,19,92,108,108,92,108,92,108,8,19,108,19,92,19,108,108,108,92,19,
|
||||
92,92,19,92,108,108,92,108,108,92,92,92,92,92,92,19,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,92,92,92,92,
|
||||
92,12,12,12,12,12,12,92,92,92,92,92,92,12,12,12,12,12,118,12,
|
||||
12,12,12,92,12,12,12,12,71,12,12,12,12,71,71,12,12,71,118,118,
|
||||
12,12,12,12,12,118,12,12,12,92,12,12,12,12,12,71,12,12,118,12,
|
||||
12,71,12,12,12,12,12,92,118,118,12,12,12,12,71,12,12,12,49,12,
|
||||
92,12,92,92,92,12,92,12,12,12,12,12,92,92,92,92,92,92,92,92,
|
||||
12,12,71,92,92,92,12,92,223,92,92,92,12,92,92,92,92,92,12,19,
|
||||
92,92,92,92,92,92,108,92,108,19,92,108,108,108,92,92,19,108,92,108,
|
||||
19,92,19,92,108,92,108,19,19,8,19,108,19,108,108,19,92,19,108,19,
|
||||
19,108,108,19,19,92,108,92,92,108,19,12,108,108,92,19,108,108,92,19,
|
||||
92,92,92,92,92,92,108,19,92,92,92,92,12,92,92,92,92,92,92,92,
|
||||
92,92,92,12,12,118,123,92,12,12,92,92,92,92,92,92,12,12,12,12,
|
||||
12,92,12,12,92,12,92,92,92,92,92,92,12,12,12,12,12,12,12,71,
|
||||
71,12,12,12,12,12,12,12,71,12,12,12,12,12,12,92,12,12,92,12,
|
||||
92,12,12,49,12,92,12,12,12,12,12,71,12,12,12,12,92,12,92,12,
|
||||
92,92,92,92,92,12,12,12,12,92,12,12,92,92,92,92,92,92,12,12,
|
||||
12,92,92,92,92,19,108,92,92,92,92,92,92,92,92,19,92,108,108,92,
|
||||
92,92,92,19,108,92,19,108,92,108,108,92,19,92,108,19,108,92,108,92,
|
||||
19,108,108,92,108,108,19,92,108,8,19,19,19,19,19,108,19,19,108,92,
|
||||
19,19,108,92,19,19,108,19,108,92,108,19,92,19,92,92,92,19,92,92,
|
||||
92,92,92,92,92,92,19,108,92,19,19,92,92,92,92,92,92,92,223,92,
|
||||
223,92,92,92,92,92,92,92,92,92,92,92,92,223,92,92,92,12,92,12,
|
||||
12,12,12,12,92,12,12,92,12,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,12,92,49,92,12,92,92,12,12,92,12,92,12,92,12,12,92,12,
|
||||
12,12,12,12,12,12,12,92,92,92,12,92,92,92,92,92,92,92,92,92,
|
||||
92,92,12,12,12,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,12,19,92,92,108,12,92,92,92,12,19,92,92,108,92,19,19,92,
|
||||
92,92,92,92,108,19,92,19,19,92,92,108,108,92,108,92,19,19,19,108,
|
||||
19,19,19,19,19,19,108,19,19,8,19,53,19,53,19,53,19,53,19,108,
|
||||
19,108,19,108,108,108,19,108,19,108,19,108,108,108,108,19,108,19,108,19,
|
||||
19,92,108,19,19,12,108,92,108,92,108,19,108,92,92,92,92,92,92,19,
|
||||
92,19,108,92,19,92,92,92,92,92,92,92,92,92,92,92,108,108,19,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,92,12,92,92,92,12,92,19,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,108,19,92,92,223,92,92,92,92,92,92,
|
||||
19,108,108,108,108,19,92,92,92,92,108,108,108,108,108,92,108,92,108,19,
|
||||
92,19,108,108,19,108,108,108,108,108,19,19,19,19,19,19,108,108,53,19,
|
||||
108,19,108,53,19,53,19,53,19,8,19,19,19,19,19,19,19,19,19,19,
|
||||
19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,108,19,108,19,
|
||||
19,19,19,19,108,19,108,19,108,19,108,19,19,19,19,108,19,92,92,92,
|
||||
19,19,108,19,108,19,19,92,92,92,92,92,92,92,92,19,19,108,19,108,
|
||||
19,92,19,92,92,92,92,92,92,92,92,92,92,92,92,19,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,19,19,19,92,19,19,92,19,19,108,92,92,92,19,92,92,92,
|
||||
92,92,92,92,92,19,19,19,19,108,19,108,92,92,92,92,92,92,19,19,
|
||||
92,19,223,19,108,19,108,92,19,19,19,19,19,19,108,19,108,19,108,19,
|
||||
19,19,19,19,19,19,19,19,19,108,19,108,19,108,19,19,19,19,19,19,
|
||||
19,19,19,19,19,19,19,19,19,8};
|
|
@ -1,6 +0,0 @@
|
|||
Makefile.in
|
||||
Makefile
|
||||
.deps
|
||||
_libs
|
||||
.libs
|
||||
Encrypt_Decrypt
|
|
@ -1,986 +0,0 @@
|
|||
/**********************************************************************
|
||||
ATTENTION: Plug-In Arguments Have Been Changed!!!!!
|
||||
This version will not be fully backwards compatible
|
||||
with the version 1.0x. Nevertheless it can encrypt and
|
||||
decrypt version 1.0x images.
|
||||
**********************************************************************/
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* Encrypt_Decrypt Plug-In (Version 2.02)
|
||||
* Daniel Cotting (cotting@mygale.org)
|
||||
**********************************************************************
|
||||
* Official homepages: http://www.mygale.org/~cotting
|
||||
* http://cotting.citeweb.net
|
||||
* http://village.cyberbrain.com/cotting
|
||||
*********************************************************************/
|
||||
|
||||
|
||||
/* The GIMP -- an image manipulation program
|
||||
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* Include files
|
||||
*********************************************************************/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "libgimp/gimp.h"
|
||||
#include "gtk/gtk.h"
|
||||
#include "logo.h"
|
||||
|
||||
/**********************************************************************
|
||||
* Define constants
|
||||
*********************************************************************/
|
||||
|
||||
#define ENTRY_WIDTH 260
|
||||
/* Large Prime */
|
||||
#define MULT 1103515245l
|
||||
|
||||
/**********************************************************************
|
||||
* Declare some of the local functions
|
||||
*********************************************************************/
|
||||
|
||||
static void query(void);
|
||||
static void run(char *name, int nparams,
|
||||
GParam *param,
|
||||
int *nreturn_vals,
|
||||
GParam **return_vals);
|
||||
static void drawEncrypt(GDrawable *drawable);
|
||||
static gint encrypt_dialog(void);
|
||||
static gint encrypt_warning_dialog(void);
|
||||
static gint encrypt_enter_dialog(void);
|
||||
static gint encrypt_no_last_val_dialog(void);
|
||||
GtkWidget * encrypt_logo_dialog(void);
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* Define types of structures
|
||||
*********************************************************************/
|
||||
|
||||
typedef struct {
|
||||
char password[128];
|
||||
gint warningmessage;
|
||||
gint compatibility;
|
||||
gint remember;
|
||||
} EncryptValues;
|
||||
|
||||
typedef struct {
|
||||
gint run;
|
||||
} EncryptInterface;
|
||||
|
||||
/**********************************************************************
|
||||
* Define structure and set their values
|
||||
*********************************************************************/
|
||||
|
||||
GPlugInInfo PLUG_IN_INFO =
|
||||
{
|
||||
NULL, /* init_proc */
|
||||
NULL, /* quit_proc */
|
||||
query, /* query_proc */
|
||||
run, /* run_proc */
|
||||
};
|
||||
|
||||
static EncryptValues wvals = {
|
||||
"Enter password here.",1,0,0,
|
||||
}; /* wvals */
|
||||
|
||||
static EncryptInterface bint =
|
||||
{
|
||||
FALSE /* run */
|
||||
};
|
||||
|
||||
/**********************************************************************
|
||||
* Declare global variables
|
||||
*********************************************************************/
|
||||
|
||||
GtkWidget *maindlg;
|
||||
GtkWidget *logodlg;
|
||||
GtkTooltips *tips;
|
||||
GdkColor tips_fg,tips_bg;
|
||||
/* This is initialized with the password or a part of the password. It is
|
||||
used as the seed value in StandardRandom */
|
||||
long Seed;
|
||||
/* Table for R250 number generator */
|
||||
long Table[250];
|
||||
/* Increment table - speeds R250 up, but not really needed in this case */
|
||||
unsigned char IncrementTable[250];
|
||||
/* Two Index values into R250 table */
|
||||
unsigned char Index1, Index2;
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* call MAIN()
|
||||
*********************************************************************/
|
||||
|
||||
MAIN()
|
||||
|
||||
/**********************************************************************
|
||||
* FUNCTION query
|
||||
*********************************************************************/
|
||||
|
||||
static void
|
||||
query(void)
|
||||
{
|
||||
static GParamDef args[] =
|
||||
{
|
||||
{ PARAM_INT32, "run_mode", "Interactive, non-interactive" },
|
||||
{ PARAM_IMAGE, "image", "Input image (unused)" },
|
||||
{ PARAM_DRAWABLE, "drawable", "Input drawable" },
|
||||
{ PARAM_STRING, "password", "Password (used to encrypt and decrypt)" },
|
||||
{ PARAM_INT8, "warning", "Disable warning message toggle (only in RUN_INTERACTIVE)" },
|
||||
{ PARAM_INT8, "compatibility", "Use version 1.0x compatibility mode" },
|
||||
{ PARAM_INT8, "remember", "Remember the password after execution" },
|
||||
};
|
||||
|
||||
static GParamDef *return_vals = NULL;
|
||||
static int nargs = sizeof(args)/ sizeof(args[0]);
|
||||
static int nreturn_vals = 0;
|
||||
|
||||
gimp_install_procedure("plug_in_encrypt",
|
||||
"Encrypt the image using a code, second call with same code decrypts image.",
|
||||
"",
|
||||
"Daniel Cotting (cotting@mygale.org, http://www.mygale.org/~cotting)",
|
||||
"Daniel Cotting (cotting@mygale.org, http://www.mygale.org/~cotting)",
|
||||
"October, 1997",
|
||||
"<Image>/Filters/Crypt/Encrypt and Decrypt",
|
||||
"RGB*, GRAY*, INDEXED*",
|
||||
PROC_PLUG_IN,
|
||||
nargs, nreturn_vals,
|
||||
args, return_vals);
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
* FUNCTION run
|
||||
*********************************************************************/
|
||||
|
||||
static void
|
||||
run(char *name,
|
||||
int nparams,
|
||||
GParam *param,
|
||||
int *nreturn_vals,
|
||||
GParam **return_vals)
|
||||
{
|
||||
static GParam values[1];
|
||||
GDrawable *drawable;
|
||||
int succeeded=1;
|
||||
GRunModeType run_mode;
|
||||
GStatusType status = STATUS_SUCCESS;
|
||||
gchar **argv;
|
||||
gint argc;
|
||||
int iaa, expression;
|
||||
|
||||
run_mode = param[0].data.d_int32;
|
||||
|
||||
values[0].type = PARAM_STATUS;
|
||||
values[0].data.d_status = status;
|
||||
|
||||
*nreturn_vals = 1;
|
||||
*return_vals = values;
|
||||
|
||||
drawable = gimp_drawable_get(param[2].data.d_drawable);
|
||||
|
||||
switch(run_mode) {
|
||||
case RUN_INTERACTIVE:
|
||||
/* Possibly retrieve data */
|
||||
gimp_get_data("plug_in_encrypt", &wvals);
|
||||
/* Get information from the dialog */
|
||||
|
||||
argc = 1;
|
||||
argv = g_new(gchar *, 1);
|
||||
argv[0] = g_strdup("apply_encrypt");
|
||||
gtk_init(&argc, &argv);
|
||||
gtk_rc_parse(gimp_gtkrc());
|
||||
|
||||
do {
|
||||
if (!encrypt_dialog())
|
||||
return;
|
||||
expression=((!strcmp(wvals.password,"Enter password here.") ||
|
||||
(wvals.compatibility&&(atoi(wvals.password)==0)))
|
||||
&& (succeeded=encrypt_enter_dialog()));
|
||||
} while (expression);
|
||||
|
||||
if (!succeeded)
|
||||
return;
|
||||
if (wvals.warningmessage)
|
||||
if (!encrypt_warning_dialog())
|
||||
return;
|
||||
break;
|
||||
case RUN_NONINTERACTIVE:
|
||||
/* Make sure all the arguments are present */
|
||||
if (nparams != 7)
|
||||
status = STATUS_CALLING_ERROR;
|
||||
if (status == STATUS_SUCCESS) {
|
||||
strcpy(wvals.password,param[3].data.d_string);
|
||||
wvals.warningmessage = param[4].data.d_int8;
|
||||
wvals.compatibility = param[5].data.d_int8;
|
||||
wvals.remember = param[6].data.d_int8;
|
||||
}
|
||||
break;
|
||||
case RUN_WITH_LAST_VALS:
|
||||
/* Possibly retrieve data */
|
||||
gimp_get_data("plug_in_encrypt", &wvals);
|
||||
argc = 1;
|
||||
argv = g_new(gchar *, 1);
|
||||
argv[0] = g_strdup("apply_encrypt");
|
||||
gtk_init(&argc, &argv);
|
||||
gtk_rc_parse(gimp_gtkrc());
|
||||
if (!wvals.remember) {
|
||||
encrypt_no_last_val_dialog();
|
||||
return;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (status == STATUS_SUCCESS) {
|
||||
gimp_tile_cache_ntiles(2 *(drawable->width / gimp_tile_width() + 1));
|
||||
gimp_progress_init("Encrypting image. Please wait...");
|
||||
drawEncrypt(drawable);
|
||||
if (!wvals.remember){
|
||||
/* Delete active Password */
|
||||
for (iaa=0; iaa<128; iaa++) wvals.password[iaa] = 0;
|
||||
}
|
||||
if(run_mode != RUN_NONINTERACTIVE)
|
||||
gimp_displays_flush();
|
||||
if(run_mode == RUN_INTERACTIVE)
|
||||
gimp_set_data("plug_in_encrypt", &wvals, sizeof(EncryptValues));
|
||||
values[0].data.d_status = status;
|
||||
gimp_drawable_detach(drawable);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* FUNCTIONS for the random number generator
|
||||
*********************************************************************/
|
||||
|
||||
/* Code provided by Pascal Schuppli, Worb (Switzerland)
|
||||
Fast high security encryption based on two 'random' number generators
|
||||
Sets up the increment table and the two index pointers */
|
||||
void InitGenerator() {
|
||||
int i;
|
||||
for (i=0; i<249; i++) IncrementTable[i] = i+1;
|
||||
IncrementTable[249] = 0;
|
||||
Index1 = 0;
|
||||
Index2 = 103;
|
||||
}
|
||||
|
||||
/* StandardRandom is used to initialize the R250 random number table. It is
|
||||
neither fast nor very good. */
|
||||
long StandardRandom() {
|
||||
|
||||
unsigned long lo, hi, ll, lh, hh, hl;
|
||||
|
||||
lo = Seed & 0xFFFF;
|
||||
hi = Seed >> 16;
|
||||
Seed = Seed * MULT + 12345;
|
||||
ll = lo*(MULT & 0xFFFF);
|
||||
lh = lo*(MULT >> 16);
|
||||
hl = hi*(MULT & 0xFFFF);
|
||||
hh = hi*(MULT >> 16);
|
||||
return ((ll + 12345) >> 16) + lh + hl + (hh << 16);
|
||||
}
|
||||
|
||||
/* Fill R250 table. Use two seeds (64 bit encoding)
|
||||
This is where most of the processing power goes when trying to break an
|
||||
encrypted file. Because StandardRandom is not very fast, and because it is
|
||||
called 500 times, this takes the CPU a couple thousand cycles. The table
|
||||
needed to decrypt a file thus can't be constructed without serious delays,
|
||||
which is the whole point of high security encryption. */
|
||||
void FillTable(long FirstSeed, long SecondSeed) {
|
||||
int i;
|
||||
/* Construct table with first seed */
|
||||
Seed = FirstSeed;
|
||||
for (i=0; i<250; i++)
|
||||
Table[i] = StandardRandom();
|
||||
|
||||
/* Xor second seed into table. Not sure whether this makes the random numbers
|
||||
better or worse, but it takes time */
|
||||
Seed = SecondSeed;
|
||||
for (i=0; i<250; i++)
|
||||
Table[i] ^= StandardRandom();
|
||||
|
||||
}
|
||||
|
||||
/* Returns a four-byte random number generated by 'xoring' two table entries */
|
||||
unsigned long R250Random() {
|
||||
unsigned long ret;
|
||||
ret = (Table[Index1] ^= Table[Index2]);
|
||||
|
||||
Index1 = IncrementTable[Index1];
|
||||
Index2 = IncrementTable[Index2];
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
* FUNCTION drawEncrypt
|
||||
*********************************************************************/
|
||||
|
||||
static void
|
||||
drawEncrypt(GDrawable *drawable)
|
||||
{
|
||||
char Password[128];
|
||||
|
||||
/* Take some primes to start with */
|
||||
long s1 = 17, s2 = 23;
|
||||
|
||||
GPixelRgn srcPR, destPR;
|
||||
gint width, height;
|
||||
gint bytes;
|
||||
gint row;
|
||||
gint x1, y1, x2, y2, ix, iy;
|
||||
guchar *src, *dest;
|
||||
int password;
|
||||
gint i, col;
|
||||
gfloat regionwidth, regionheight, dx, dy;
|
||||
gfloat a, b, x, y;
|
||||
glong pixelpos, pos;
|
||||
guchar bgr_red, bgr_blue, bgr_green;
|
||||
|
||||
if (!wvals.compatibility){
|
||||
for (i=0; i<128; i++) Password[i] = 1;
|
||||
strcpy(Password, wvals.password);
|
||||
InitGenerator();
|
||||
|
||||
|
||||
/* The hash algorithm should make sure that the hash codes it generates
|
||||
differ so that code breakers cannot concentrate on a certain range of
|
||||
seeds to speed up the process of breaking the code.
|
||||
|
||||
Hash up keyword, -> create two four-byte seeds */
|
||||
|
||||
for (i=0; i<strlen(Password); i++) {
|
||||
s1 ^= *(long *)&Password[i];
|
||||
s1 <<= 1;
|
||||
}
|
||||
for (i=strlen(Password)-1; i>=0; i--) {
|
||||
s2 ^= *(long *)&Password[i];
|
||||
s2 <<= 3;
|
||||
}
|
||||
|
||||
/* Generate table with hash value */
|
||||
FillTable(s1, s2);
|
||||
}
|
||||
|
||||
|
||||
gimp_palette_get_background(&bgr_red, &bgr_green, &bgr_blue);
|
||||
|
||||
gimp_drawable_mask_bounds(drawable->id, &x1, &y1, &x2, &y2);
|
||||
regionwidth = x2-x1;
|
||||
a = regionwidth/2;
|
||||
regionheight = y2-y1;
|
||||
b = regionheight/2;
|
||||
|
||||
width = drawable->width;
|
||||
height = drawable->height;
|
||||
bytes = drawable->bpp;
|
||||
|
||||
gimp_pixel_rgn_init(&srcPR, drawable, 0, 0, width, height, FALSE, FALSE);
|
||||
gimp_pixel_rgn_init(&destPR, drawable, 0, 0, width, height, TRUE, TRUE);
|
||||
|
||||
src = g_malloc((x2-x1)*(y2-y1)*bytes);
|
||||
dest = g_malloc((x2-x1)*(y2-y1)*bytes);
|
||||
gimp_pixel_rgn_get_rect(&srcPR, src, x1, y1, regionwidth, regionheight);
|
||||
if (wvals.compatibility) {
|
||||
password=atoi(wvals.password);
|
||||
srand(password);
|
||||
}
|
||||
for(col = 0; col < regionwidth; col++) {
|
||||
dx = (gfloat)col - a;
|
||||
for(row = 0; row < regionheight; row++) {
|
||||
pixelpos = (col+row*regionwidth)*bytes;
|
||||
dy = -((gfloat)row - b);
|
||||
x = dx+a;
|
||||
y = -dy+b;
|
||||
ix=(int)x;
|
||||
iy=(int)y;
|
||||
pos = ((gint)(iy)*regionwidth + (gint)(ix)) * bytes;
|
||||
for(i = 0; i < bytes; i++) {
|
||||
if (!wvals.compatibility) {
|
||||
dest[pixelpos+i] = src[pos+i]^R250Random();
|
||||
} else {
|
||||
dest[pixelpos+i] = src[pos+i] ^(int)(rand()*255)^(int)(rand()*255);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(((gint)(regionwidth-col) % 5) == 0)
|
||||
gimp_progress_update((gdouble)col/(gdouble)regionwidth);
|
||||
}
|
||||
|
||||
gimp_pixel_rgn_set_rect(&destPR, dest, x1, y1, regionwidth, regionheight);
|
||||
g_free(src);
|
||||
g_free(dest);
|
||||
|
||||
gimp_drawable_flush(drawable);
|
||||
gimp_drawable_merge_shadow(drawable->id, TRUE);
|
||||
gimp_drawable_update(drawable->id, x1, y1,(x2 - x1),(y2 - y1));
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
* FUNCTIONS: callbacks
|
||||
*********************************************************************/
|
||||
|
||||
static void
|
||||
encrypt_close_callback(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
gtk_main_quit();
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
encrypt_ok_callback(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
bint.run = TRUE;
|
||||
gtk_widget_destroy(GTK_WIDGET (data));
|
||||
}
|
||||
|
||||
static void
|
||||
encrypt_logo_ok_callback(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
gtk_widget_set_sensitive (maindlg, TRUE);
|
||||
gtk_widget_destroy(logodlg);
|
||||
}
|
||||
|
||||
static void
|
||||
encrypt_about_callback(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
gtk_widget_set_sensitive (maindlg, FALSE);
|
||||
encrypt_logo_dialog();
|
||||
}
|
||||
|
||||
static void
|
||||
encrypt_entry_callback(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
strcpy(wvals.password,gtk_entry_get_text(GTK_ENTRY(widget)));
|
||||
}
|
||||
|
||||
static void
|
||||
toggle_update (GtkWidget *widget,
|
||||
gpointer data)
|
||||
{
|
||||
int *toggle_val;
|
||||
|
||||
toggle_val = (int *) data;
|
||||
|
||||
if (GTK_TOGGLE_BUTTON (widget)->active)
|
||||
*toggle_val = TRUE;
|
||||
else
|
||||
*toggle_val = FALSE;
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
* FUNCTION set_tooltip
|
||||
*********************************************************************/
|
||||
|
||||
static void
|
||||
set_tooltip (GtkTooltips *tooltips, GtkWidget *widget, const char *desc)
|
||||
{
|
||||
if (desc && desc[0])
|
||||
gtk_tooltips_set_tips (tooltips, widget, (char *) desc);
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
* FUNCTIONS: encrypt_dialog
|
||||
*********************************************************************/
|
||||
|
||||
static gint
|
||||
encrypt_dialog()
|
||||
{
|
||||
GtkWidget *dlg;
|
||||
GtkWidget *label;
|
||||
GtkWidget *entry;
|
||||
GtkWidget *button;
|
||||
GtkWidget *toggle;
|
||||
GtkWidget *frame;
|
||||
GtkWidget *vbox;
|
||||
GtkWidget *hbox;
|
||||
gchar buffer[128];
|
||||
bint.run=FALSE;
|
||||
|
||||
|
||||
dlg = maindlg = gtk_dialog_new();
|
||||
gtk_window_set_title(GTK_WINDOW(dlg), "Encrypt & Decrypt <cotting@mygale.org>");
|
||||
gtk_window_position(GTK_WINDOW(dlg), GTK_WIN_POS_MOUSE);
|
||||
gtk_signal_connect(GTK_OBJECT(dlg), "destroy",
|
||||
(GtkSignalFunc)encrypt_close_callback,
|
||||
NULL);
|
||||
|
||||
|
||||
frame = gtk_frame_new("Parameter Settings");
|
||||
gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
|
||||
gtk_container_border_width(GTK_CONTAINER(frame), 10);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->vbox), frame, TRUE, TRUE, 0);
|
||||
vbox = gtk_vbox_new(FALSE, 5);
|
||||
gtk_container_border_width(GTK_CONTAINER(vbox), 10);
|
||||
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
||||
|
||||
/* use black as foreground: */
|
||||
tips = gtk_tooltips_new ();
|
||||
tips_fg.red = 0;
|
||||
tips_fg.green = 0;
|
||||
tips_fg.blue = 0;
|
||||
/* postit yellow (khaki) as background: */
|
||||
gdk_color_alloc (gtk_widget_get_colormap (frame), &tips_fg);
|
||||
tips_bg.red = 61669;
|
||||
tips_bg.green = 59113;
|
||||
tips_bg.blue = 35979;
|
||||
gdk_color_alloc (gtk_widget_get_colormap (frame), &tips_bg);
|
||||
gtk_tooltips_set_colors (tips,&tips_bg,&tips_fg);
|
||||
|
||||
hbox = gtk_hbox_new(FALSE, 5);
|
||||
gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
|
||||
|
||||
label = gtk_label_new("Password: ");
|
||||
gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0);
|
||||
gtk_widget_show(label);
|
||||
|
||||
entry = gtk_entry_new();
|
||||
gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, FALSE, 0);
|
||||
gtk_widget_set_usize(entry, ENTRY_WIDTH, 0);
|
||||
sprintf(buffer, "%s", wvals.password);
|
||||
gtk_entry_set_text(GTK_ENTRY(entry), buffer);
|
||||
gtk_signal_connect(GTK_OBJECT(entry), "changed",
|
||||
(GtkSignalFunc)encrypt_entry_callback,
|
||||
NULL);
|
||||
gtk_widget_show(entry);
|
||||
set_tooltip(tips,entry,"Here, you can specify your password. To decrypt your image, just enter the value you used for the encryption. Unless you use version 1.0x compatibility (numeric passwords), the password can contain any characters.");
|
||||
|
||||
gtk_widget_show(hbox);
|
||||
|
||||
toggle = gtk_check_button_new_with_label ("Show warning message");
|
||||
gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0);
|
||||
gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
|
||||
(GtkSignalFunc) toggle_update,
|
||||
&wvals.warningmessage);
|
||||
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), wvals.warningmessage);
|
||||
gtk_widget_show (toggle);
|
||||
set_tooltip(tips,toggle,"If this option is enabled, a warning message will be displayed every time you encrypt/decrypt an image. Make sure to read these warnings at least once.");
|
||||
|
||||
toggle = gtk_check_button_new_with_label ("Enable version 1.0x compatibility");
|
||||
gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0);
|
||||
gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
|
||||
(GtkSignalFunc) toggle_update,
|
||||
&wvals.compatibility);
|
||||
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), wvals.compatibility);
|
||||
gtk_widget_show (toggle);
|
||||
set_tooltip(tips,toggle,"If this option is enabled, the encryption/decryption will be compatible with the version 1.0x plug-in.");
|
||||
|
||||
toggle = gtk_check_button_new_with_label ("Remember password");
|
||||
gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0);
|
||||
gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
|
||||
(GtkSignalFunc) toggle_update,
|
||||
&wvals.remember);
|
||||
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), wvals.remember);
|
||||
gtk_widget_show (toggle);
|
||||
set_tooltip(tips,toggle,"If this option is enabled, the password will be remembered for a further encryption/decryption.");
|
||||
|
||||
gtk_widget_show(vbox);
|
||||
gtk_widget_show(frame);
|
||||
|
||||
button = gtk_button_new_with_label("OK");
|
||||
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect(GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc)encrypt_ok_callback,
|
||||
dlg);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area),
|
||||
button, TRUE, TRUE, 0);
|
||||
gtk_widget_grab_default(button);
|
||||
gtk_widget_show(button);
|
||||
|
||||
set_tooltip(tips,button,"Close the dialog box and encrypt/decrypt your image with the specified password.");
|
||||
|
||||
button = gtk_button_new_with_label("Cancel");
|
||||
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc)gtk_widget_destroy,
|
||||
GTK_OBJECT(dlg));
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area),
|
||||
button, TRUE, TRUE, 0);
|
||||
gtk_widget_show(button);
|
||||
set_tooltip(tips,button,"Close the dialog box without altering your image.");
|
||||
|
||||
button = gtk_button_new_with_label("About...");
|
||||
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect(GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc)encrypt_about_callback,button);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area),
|
||||
button, TRUE, TRUE, 0);
|
||||
gtk_widget_show(button);
|
||||
set_tooltip(tips,button,"Show information about the author and the plug-in.");
|
||||
|
||||
gtk_widget_show(dlg);
|
||||
|
||||
gtk_main();
|
||||
gdk_flush();
|
||||
|
||||
return bint.run;
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
* FUNCTION encrypt_warning_dialog
|
||||
*********************************************************************/
|
||||
|
||||
static gint
|
||||
encrypt_warning_dialog()
|
||||
{
|
||||
GtkWidget *dlg;
|
||||
GtkWidget *label;
|
||||
GtkWidget *button;
|
||||
GtkWidget *toggle;
|
||||
GtkWidget *frame;
|
||||
GtkWidget *vbox;
|
||||
GtkWidget *hbox;
|
||||
bint.run=FALSE;
|
||||
|
||||
dlg = gtk_dialog_new();
|
||||
gtk_window_set_title(GTK_WINDOW(dlg), "Warning");
|
||||
gtk_window_position(GTK_WINDOW(dlg), GTK_WIN_POS_MOUSE);
|
||||
gtk_signal_connect(GTK_OBJECT(dlg), "destroy",
|
||||
(GtkSignalFunc)encrypt_close_callback,
|
||||
NULL);
|
||||
|
||||
button = gtk_button_new_with_label("OK");
|
||||
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect(GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc)encrypt_ok_callback,
|
||||
dlg);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area),
|
||||
button, TRUE, TRUE, 0);
|
||||
gtk_widget_grab_default(button);
|
||||
gtk_widget_show(button);
|
||||
set_tooltip(tips,button,"Proceed with the encryption/decryption.");
|
||||
|
||||
button = gtk_button_new_with_label("Cancel");
|
||||
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc)gtk_widget_destroy,
|
||||
GTK_OBJECT(dlg));
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area),
|
||||
button, TRUE, TRUE, 0);
|
||||
gtk_widget_show(button);
|
||||
set_tooltip(tips,button,"Cancel the encryption/decryption.");
|
||||
|
||||
frame = gtk_frame_new("Please note:");
|
||||
gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
|
||||
gtk_container_border_width(GTK_CONTAINER(frame), 10);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->vbox), frame, TRUE, TRUE, 0);
|
||||
vbox = gtk_vbox_new(FALSE, 5);
|
||||
gtk_container_border_width(GTK_CONTAINER(vbox), 10);
|
||||
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
||||
|
||||
|
||||
hbox = gtk_hbox_new(FALSE, 5);
|
||||
gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
|
||||
|
||||
if (wvals.compatibility) {
|
||||
label = gtk_label_new("Version 1.0x compatibility mode:\n\n"
|
||||
"This plug-in uses a numeric password to encrypt your image.\n\n"
|
||||
"Although it has been tested thoroughly, the author cannot be\n"
|
||||
"sure that it will work properly in all circumstances. Therefore\n"
|
||||
"the author doesn't want to take any responsibility in case of\n"
|
||||
"data loss or any other damage this plug-in could cause.\n\n"
|
||||
"*******USE IT AT YOUR OWN RISK (AND ENJOY IT)!*******\n\n"
|
||||
"The plug-in could fail in the following situations, because of\n"
|
||||
"a possibly different implementation of the random number\n"
|
||||
"generator: - Encrypt a picture and decrypt it on a different\n"
|
||||
"plattform. OR - Decrypt a picture that was encrypted on a\n"
|
||||
"computer with a different OS-version or a different math-lib.\n\n"
|
||||
"Remember to save your image in a non-destructive format!\n"
|
||||
"For indexed images GIF could be a good choice, for RGB\n"
|
||||
"use BMP/TIFF/TGA etc. Never use a JPEG-compression!\n");
|
||||
} else {
|
||||
label = gtk_label_new("This plug-in uses a password to encrypt your image.\n\n"
|
||||
"Although it has been tested thoroughly, the author cannot be\n"
|
||||
"sure that it will work properly in all circumstances. Therefore\n"
|
||||
"the author doesn't want to take any responsibility in case of\n"
|
||||
"data loss or any other damage this plug-in could cause.\n\n"
|
||||
"*******USE IT AT YOUR OWN RISK (AND ENJOY IT)!*******\n\n"
|
||||
"Remember to save your image in a non-destructive format!\n"
|
||||
"For indexed images GIF could be a good choice, for RGB\n"
|
||||
"use BMP/TIFF/TGA etc. Never use a JPEG-compression!\n");
|
||||
|
||||
}
|
||||
gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0);
|
||||
gtk_widget_show(label);
|
||||
|
||||
toggle = gtk_check_button_new_with_label ("Show warning message every time");
|
||||
gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0);
|
||||
gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
|
||||
(GtkSignalFunc) toggle_update,
|
||||
&wvals.warningmessage);
|
||||
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), wvals.warningmessage);
|
||||
gtk_widget_show (toggle);
|
||||
set_tooltip(tips,toggle,"If you want this message to be displayed every time you encrypt/decrypt an image, then check this box.");
|
||||
|
||||
gtk_widget_show(hbox);
|
||||
|
||||
gtk_widget_show(vbox);
|
||||
gtk_widget_show(frame);
|
||||
gtk_widget_show(dlg);
|
||||
|
||||
gtk_main();
|
||||
gdk_flush();
|
||||
|
||||
return bint.run;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* FUNCTION encrypt_enter_dialog
|
||||
*********************************************************************/
|
||||
|
||||
static gint
|
||||
encrypt_enter_dialog()
|
||||
{
|
||||
GtkWidget *dlg;
|
||||
GtkWidget *label;
|
||||
GtkWidget *button;
|
||||
GtkWidget *frame;
|
||||
GtkWidget *vbox;
|
||||
GtkWidget *hbox;
|
||||
bint.run=FALSE;
|
||||
dlg = gtk_dialog_new();
|
||||
gtk_window_set_title(GTK_WINDOW(dlg), "Warning");
|
||||
gtk_window_position(GTK_WINDOW(dlg), GTK_WIN_POS_MOUSE);
|
||||
gtk_signal_connect(GTK_OBJECT(dlg), "destroy",
|
||||
(GtkSignalFunc)encrypt_close_callback,
|
||||
NULL);
|
||||
|
||||
button = gtk_button_new_with_label("OK");
|
||||
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect(GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc)encrypt_ok_callback,
|
||||
dlg);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area),
|
||||
button, TRUE, TRUE, 0);
|
||||
gtk_widget_grab_default(button);
|
||||
gtk_widget_show(button);
|
||||
set_tooltip(tips,button,"Repeat password selection.");
|
||||
|
||||
button = gtk_button_new_with_label("Cancel");
|
||||
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc)gtk_widget_destroy,
|
||||
GTK_OBJECT(dlg));
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area),
|
||||
button, TRUE, TRUE, 0);
|
||||
gtk_widget_show(button);
|
||||
set_tooltip(tips,button,"Cancel process of encryption/decryption.");
|
||||
|
||||
frame = gtk_frame_new("Password needed:");
|
||||
gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
|
||||
gtk_container_border_width(GTK_CONTAINER(frame), 10);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->vbox), frame, TRUE, TRUE, 0);
|
||||
vbox = gtk_vbox_new(FALSE, 5);
|
||||
gtk_container_border_width(GTK_CONTAINER(vbox), 10);
|
||||
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
||||
|
||||
|
||||
hbox = gtk_hbox_new(FALSE, 5);
|
||||
gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
|
||||
|
||||
label = gtk_label_new("You have not entered a valid, personalized password.\n"
|
||||
"If you want to use the version 1.0x compatibility\n"
|
||||
"mode, make sure that the password consists only of\n"
|
||||
"numerical characters (0-9).\n\n"
|
||||
"Choose OK to repeat your password selection.\n"
|
||||
"Choose CANCEL to abort the encryption.\n");
|
||||
gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0);
|
||||
gtk_widget_show(label);
|
||||
|
||||
gtk_widget_show(hbox);
|
||||
|
||||
gtk_widget_show(vbox);
|
||||
gtk_widget_show(frame);
|
||||
gtk_widget_show(dlg);
|
||||
|
||||
gtk_main();
|
||||
gdk_flush();
|
||||
|
||||
return bint.run;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* FUNCTION encrypt_no_last_val_dialog
|
||||
*********************************************************************/
|
||||
|
||||
static gint
|
||||
encrypt_no_last_val_dialog()
|
||||
{
|
||||
GtkWidget *dlg;
|
||||
GtkWidget *label;
|
||||
GtkWidget *button;
|
||||
GtkWidget *frame;
|
||||
GtkWidget *vbox;
|
||||
GtkWidget *hbox;
|
||||
bint.run=FALSE;
|
||||
dlg = gtk_dialog_new();
|
||||
gtk_window_set_title(GTK_WINDOW(dlg), "Error");
|
||||
gtk_window_position(GTK_WINDOW(dlg), GTK_WIN_POS_MOUSE);
|
||||
gtk_signal_connect(GTK_OBJECT(dlg), "destroy",
|
||||
(GtkSignalFunc)encrypt_close_callback,
|
||||
NULL);
|
||||
|
||||
button = gtk_button_new_with_label("OK");
|
||||
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect(GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc)encrypt_ok_callback,
|
||||
dlg);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area),
|
||||
button, TRUE, TRUE, 0);
|
||||
gtk_widget_grab_default(button);
|
||||
gtk_widget_show(button);
|
||||
|
||||
frame = gtk_frame_new("Run with last values:");
|
||||
gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
|
||||
gtk_container_border_width(GTK_CONTAINER(frame), 10);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->vbox), frame, TRUE, TRUE, 0);
|
||||
vbox = gtk_vbox_new(FALSE, 5);
|
||||
gtk_container_border_width(GTK_CONTAINER(vbox), 10);
|
||||
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
||||
|
||||
|
||||
hbox = gtk_hbox_new(FALSE, 5);
|
||||
gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
|
||||
|
||||
label = gtk_label_new("For security reasons, the last password has not\n"
|
||||
"been saved for further use. Thus the plug-in cannot\n"
|
||||
"be executed in non-interactive mode. If you want to\n"
|
||||
"be able to do this, enable the option 'remember password'\n"
|
||||
"in the dialog box of the plug-in.\n");
|
||||
gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0);
|
||||
gtk_widget_show(label);
|
||||
|
||||
gtk_widget_show(hbox);
|
||||
|
||||
gtk_widget_show(vbox);
|
||||
gtk_widget_show(frame);
|
||||
gtk_widget_show(dlg);
|
||||
|
||||
gtk_main();
|
||||
gdk_flush();
|
||||
|
||||
return bint.run;
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
* FUNCTION encrypt_logo_dialog
|
||||
*********************************************************************/
|
||||
|
||||
GtkWidget *
|
||||
encrypt_logo_dialog()
|
||||
{
|
||||
GtkWidget *xdlg;
|
||||
GtkWidget *xlabel;
|
||||
GtkWidget *xbutton;
|
||||
GtkWidget *xlogo_box;
|
||||
GtkWidget *xpreview;
|
||||
GtkWidget *xframe,*xframe2;
|
||||
GtkWidget *xvbox;
|
||||
GtkWidget *xhbox;
|
||||
char *text;
|
||||
guchar *temp,*temp2;
|
||||
guchar *datapointer;
|
||||
gint y,x;
|
||||
xdlg = logodlg = gtk_dialog_new();
|
||||
gtk_window_set_title(GTK_WINDOW(xdlg), "About");
|
||||
gtk_window_position(GTK_WINDOW(xdlg), GTK_WIN_POS_MOUSE);
|
||||
gtk_signal_connect(GTK_OBJECT(xdlg), "destroy",
|
||||
(GtkSignalFunc)encrypt_close_callback,
|
||||
NULL);
|
||||
|
||||
xbutton = gtk_button_new_with_label("OK");
|
||||
GTK_WIDGET_SET_FLAGS(xbutton, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect(GTK_OBJECT(xbutton), "clicked",
|
||||
(GtkSignalFunc)encrypt_logo_ok_callback,
|
||||
xdlg);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(xdlg)->action_area),
|
||||
xbutton, TRUE, TRUE, 0);
|
||||
gtk_widget_grab_default(xbutton);
|
||||
gtk_widget_show(xbutton);
|
||||
set_tooltip(tips,xbutton,"Click here to close the information box.");
|
||||
|
||||
xframe = gtk_frame_new(NULL);
|
||||
gtk_frame_set_shadow_type(GTK_FRAME(xframe), GTK_SHADOW_ETCHED_IN);
|
||||
gtk_container_border_width(GTK_CONTAINER(xframe), 10);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(xdlg)->vbox), xframe, TRUE, TRUE, 0);
|
||||
xvbox = gtk_vbox_new(FALSE, 5);
|
||||
gtk_container_border_width(GTK_CONTAINER(xvbox), 10);
|
||||
gtk_container_add(GTK_CONTAINER(xframe), xvbox);
|
||||
|
||||
/* The logo frame & drawing area */
|
||||
xhbox = gtk_hbox_new (FALSE, 5);
|
||||
gtk_box_pack_start (GTK_BOX (xvbox), xhbox, FALSE, TRUE, 0);
|
||||
|
||||
xlogo_box = gtk_vbox_new (FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (xhbox), xlogo_box, FALSE, FALSE, 0);
|
||||
|
||||
xframe2 = gtk_frame_new (NULL);
|
||||
gtk_frame_set_shadow_type (GTK_FRAME (xframe2), GTK_SHADOW_IN);
|
||||
gtk_box_pack_start (GTK_BOX (xlogo_box), xframe2, FALSE, FALSE, 0);
|
||||
|
||||
xpreview = gtk_preview_new (GTK_PREVIEW_COLOR);
|
||||
gtk_preview_size (GTK_PREVIEW (xpreview), logo_width, logo_height);
|
||||
temp = g_malloc((logo_width+10)*3);
|
||||
datapointer=header_data+logo_width*logo_height-1;
|
||||
for (y = 0; y < logo_height; y++){
|
||||
temp2=temp;
|
||||
for (x = 0; x< logo_width; x++) {
|
||||
HEADER_PIXEL(datapointer,temp2); temp2+=3;}
|
||||
gtk_preview_draw_row (GTK_PREVIEW (xpreview),
|
||||
temp,
|
||||
0, y, logo_width);
|
||||
}
|
||||
g_free(temp);
|
||||
gtk_container_add (GTK_CONTAINER (xframe2), xpreview);
|
||||
gtk_widget_show (xpreview);
|
||||
gtk_widget_show (xframe2);
|
||||
gtk_widget_show (xlogo_box);
|
||||
gtk_widget_show (xhbox);
|
||||
|
||||
xhbox = gtk_hbox_new(FALSE, 5);
|
||||
gtk_box_pack_start(GTK_BOX(xvbox), xhbox, TRUE, TRUE, 0);
|
||||
text = "\nCotting Software Productions\n"
|
||||
"Bahnhofstrasse 31\n"
|
||||
"CH-3066 Stettlen (Switzerland)\n\n"
|
||||
"cotting@mygale.org\n"
|
||||
"http://www.mygale.org/~cotting\n\n"
|
||||
"Encrypt & Decrypt\n Plug-In for the GIMP\n"
|
||||
"Version 2.02\n";
|
||||
xlabel = gtk_label_new(text);
|
||||
gtk_box_pack_start(GTK_BOX(xhbox), xlabel, TRUE, FALSE, 0);
|
||||
gtk_widget_show(xlabel);
|
||||
|
||||
gtk_widget_show(xhbox);
|
||||
|
||||
gtk_widget_show(xvbox);
|
||||
gtk_widget_show(xframe);
|
||||
gtk_widget_show(xdlg);
|
||||
|
||||
gtk_main();
|
||||
gdk_flush();
|
||||
return xdlg;
|
||||
}
|
||||
|
||||
|
|
@ -1,73 +0,0 @@
|
|||
-------------------------------------------
|
||||
GIMP-Plug-In
|
||||
-------------------------------------------
|
||||
Written by Daniel Cotting
|
||||
Bahnhofstrasse 31
|
||||
CH-3066 Stettlen (Switzerland)
|
||||
|
||||
cotting@mygale.org
|
||||
www.mygale.org/~cotting
|
||||
-------------------------------------------
|
||||
Some code is taken out of other plug-ins
|
||||
written by other authors.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
INSTALLATION
|
||||
-------------------------------------------
|
||||
To install it, you have to edit the
|
||||
Makefile (change install-path).
|
||||
Afterwards run make. This will compile
|
||||
and install the plug-in in the right
|
||||
directory. Once the new code is installed,
|
||||
you can run the GIMP and enjoy the new
|
||||
functions and effects it provides.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
REDUCE CODE SIZE
|
||||
-------------------------------------------
|
||||
With this new release 2.02 the size of
|
||||
the logo in the about box has been reduced
|
||||
in order to make smaller binaries.
|
||||
If you find that the plug-in is still
|
||||
too big, you can compress the executables
|
||||
with the gzexe program (if it is available
|
||||
on your system). To do so, change to the
|
||||
plug-in directory of the GIMP...
|
||||
|
||||
cd /usr/local/lib/gimp/VERSION/plug-ins
|
||||
|
||||
...and execute the command...
|
||||
|
||||
gzexe PLUGIN_NAME
|
||||
|
||||
...and remember to remove the uncompres-
|
||||
sed binary, which has been renamed to
|
||||
PLUGIN_NAME~, by running the command:
|
||||
|
||||
rm PLUGIN_NAME~
|
||||
|
||||
This will result in a code size of about
|
||||
20 kB, which isn't too much IMHO.
|
||||
------------------------------------------
|
||||
|
||||
|
||||
------------------------------------------
|
||||
FEEDBACK
|
||||
------------------------------------------
|
||||
I'm interested in any feedback, comments,
|
||||
bug-reports, suggestions etc. If you
|
||||
have anything you would like to tell
|
||||
me, you can write to cotting@mygale.org.
|
||||
Also have a look at the GIMP-section of
|
||||
my homepage at www.mygale.org/~cotting.
|
||||
------------------------------------------
|
||||
|
||||
Thank you and happy GIMPing!
|
||||
Daniel Cotting
|
||||
|
||||
------------------------------------------
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
pluginlibdir = $(gimpplugindir)/plug-ins
|
||||
|
||||
pluginlib_PROGRAMS = Encrypt_Decrypt
|
||||
|
||||
Encrypt_Decrypt_SOURCES = \
|
||||
Encrypt_Decrypt.c logo.h
|
||||
|
||||
INCLUDES = \
|
||||
$(X_CFLAGS) \
|
||||
-I$(top_srcdir) \
|
||||
-I$(includedir)
|
||||
|
||||
LDADD = \
|
||||
$(top_builddir)/libgimp/libgimpui.la \
|
||||
$(top_builddir)/libgimp/libgimp.la \
|
||||
$(X_LIBS) \
|
||||
-lc
|
||||
|
||||
DEPS = \
|
||||
$(top_builddir)/libgimp/libgimpui.la \
|
||||
$(top_builddir)/libgimp/libgimp.la
|
||||
|
||||
Encrypt_Decrypt_DEPENDENCIES = $(DEPS)
|
||||
|
||||
.PHONY: files
|
||||
|
||||
files:
|
||||
@files=`ls $(DISTFILES) 2> /dev/null`; for p in $$files; do \
|
||||
echo $$p; \
|
||||
done
|
||||
@for subdir in $(SUBDIRS); do \
|
||||
files=`cd $$subdir; $(MAKE) files | grep -v "make\[[1-9]\]"`; \
|
||||
for file in $$files; do \
|
||||
echo $$subdir/$$file; \
|
||||
done; \
|
||||
done
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,73 +0,0 @@
|
|||
-------------------------------------------
|
||||
GIMP-Plug-In
|
||||
-------------------------------------------
|
||||
Written by Daniel Cotting
|
||||
Bahnhofstrasse 31
|
||||
CH-3066 Stettlen (Switzerland)
|
||||
|
||||
cotting@mygale.org
|
||||
www.mygale.org/~cotting
|
||||
-------------------------------------------
|
||||
Some code is taken out of other plug-ins
|
||||
written by other authors.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
INSTALLATION
|
||||
-------------------------------------------
|
||||
To install it, you have to edit the
|
||||
Makefile (change install-path).
|
||||
Afterwards run make. This will compile
|
||||
and install the plug-in in the right
|
||||
directory. Once the new code is installed,
|
||||
you can run the GIMP and enjoy the new
|
||||
functions and effects it provides.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
REDUCE CODE SIZE
|
||||
-------------------------------------------
|
||||
With this new release 2.02 the size of
|
||||
the logo in the about box has been reduced
|
||||
in order to make smaller binaries.
|
||||
If you find that the plug-in is still
|
||||
too big, you can compress the executables
|
||||
with the gzexe program (if it is available
|
||||
on your system). To do so, change to the
|
||||
plug-in directory of the GIMP...
|
||||
|
||||
cd /usr/local/lib/gimp/VERSION/plug-ins
|
||||
|
||||
...and execute the command...
|
||||
|
||||
gzexe PLUGIN_NAME
|
||||
|
||||
...and remember to remove the uncompres-
|
||||
sed binary, which has been renamed to
|
||||
PLUGIN_NAME~, by running the command:
|
||||
|
||||
rm PLUGIN_NAME~
|
||||
|
||||
This will result in a code size of about
|
||||
20 kB, which isn't too much IMHO.
|
||||
------------------------------------------
|
||||
|
||||
|
||||
------------------------------------------
|
||||
FEEDBACK
|
||||
------------------------------------------
|
||||
I'm interested in any feedback, comments,
|
||||
bug-reports, suggestions etc. If you
|
||||
have anything you would like to tell
|
||||
me, you can write to cotting@mygale.org.
|
||||
Also have a look at the GIMP-section of
|
||||
my homepage at www.mygale.org/~cotting.
|
||||
------------------------------------------
|
||||
|
||||
Thank you and happy GIMPing!
|
||||
Daniel Cotting
|
||||
|
||||
------------------------------------------
|
||||
|
|
@ -1,788 +0,0 @@
|
|||
/* GIMP header image file format (Indexed): //logo.h */
|
||||
|
||||
static unsigned int logo_width = 200;
|
||||
static unsigned int logo_height = 72;
|
||||
|
||||
/* Call this macro repeatedly. After each use, the pixel data can be extracted */
|
||||
|
||||
#define HEADER_PIXEL(data,pixel) \
|
||||
pixel[0] = palette_data[data[0]*3+2]; \
|
||||
pixel[1] = palette_data[data[0]*3+1]; \
|
||||
pixel[2] = palette_data[data[0]*3+0]; \
|
||||
data--;
|
||||
|
||||
static unsigned char
|
||||
palette_data[] = { 4,2,2,4,110,178,32,4,122,4,36,
|
||||
86,15,3,66,4,58,127,36,8,186,4,34,122,17,2,
|
||||
34,4,19,66,12,4,162,90,2,69,88,2,48,7,20,
|
||||
2,25,2,103,8,14,48,4,58,186,90,3,154,82,2,
|
||||
129,55,2,34,17,2,18,17,34,191,94,2,101,57,2,
|
||||
70,7,32,154,12,22,157,17,3,50,4,88,150,96,3,
|
||||
186,86,2,138,87,2,86,212,214,210,4,19,98,52,2,
|
||||
154,15,11,2,4,132,216,7,18,125,12,6,82,37,12,
|
||||
18,4,88,189,86,14,48,128,2,157,32,4,138,4,60,
|
||||
155,4,48,126,60,2,218,7,10,52,13,12,66,129,2,
|
||||
50,56,2,52,52,14,98,4,47,157,6,20,87,48,2,
|
||||
24,58,2,101,120,2,141,52,5,170,4,113,215,127,2,
|
||||
73,4,90,210,4,52,112,36,18,194,59,2,85,42,2,
|
||||
10,107,2,173,95,2,114,31,3,52,4,79,160,84,3,
|
||||
189,14,10,40,30,2,69,96,2,58,113,2,126,9,37,
|
||||
231,17,33,170,28,14,2,4,30,146,68,10,37,132,2,
|
||||
82,23,4,7,4,10,122,4,36,108,32,2,37,7,27,
|
||||
2,4,98,175,84,10,146,4,101,191,4,14,146,8,29,
|
||||
86,4,2,170,8,60,230,84,10,162,72,2,39,102,2,
|
||||
142,4,142,221,4,49,143,68,12,170,4,124,213,15,4,
|
||||
74,114,2,69,112,2,158,32,3,23,8,50,190,111,2,
|
||||
104,6,40,154,96,2,210,6,28,104,60,2,138,61,2,
|
||||
25,68,2,114,58,2,125,39,2,114,73,2,69,16,4,
|
||||
58,4,88,177,56,14,26,138,2,173,4,68,176,71,2,
|
||||
55,76,2,210,4,78,130,17,3,42,6,27,69,112,2,
|
||||
49,12,26,178,47,13,159,18,11,10,13,11,74,141,2,
|
||||
58,52,18,234,4,82,186,4,126,198,4,103,213,4,62,
|
||||
206,4,72,226,12,46,210,72,12,222,12,26,146,20,34,
|
||||
210,4,113,197,4,131,229,4,48,170,4,76,170,7,43,
|
||||
95,52,30,218,15,11,170,52,14,202,12,14,86,4,40,
|
||||
174,108,14,202,156,2,186,60,12,130,5,40,129,73,13,
|
||||
189,12,42,138,44,14,202,4,59,143,4,124,229,4,69,
|
||||
191,4,69,157,4,60,114,4,43,110,14,14,58,20,26,
|
||||
157,28,26,210,4,87,162,4,91,202,4,110,226,4,98,
|
||||
226,4,101,202,17,14,186,28,18,18,60,2,234,28,10,
|
||||
114,4,30,114,8,10,162,12,54,186,20,26,130,100,10,
|
||||
170,40,18,154,4,22,114,28,26,234,4,22,58,4,66,
|
||||
226,4,54,202,12,42,202,4,38,98,4,145,234,4,76,
|
||||
146,4,94,148,4,138,213,4,94,186,4,54,126,4,54,
|
||||
154,4,118,211,4,106,178,4,106,188,4,54,142,4,94,
|
||||
170,4,70,202,4,118,197,4,54,173,4,82,178,72,4,
|
||||
172,36,10,138,76,14,162,4,98,210,4,118,226,112,2,
|
||||
114,24,19,8,30,2,85,84,6,226,141,2,73,28,30,
|
||||
10,28,46,186,112,4,206,36,10,90,36,2,174,108,2,
|
||||
58,41,3,130,44,10,194,9,33,130,92,2,162,51,2,
|
||||
42,12,32,162,81,3,146,44,11,26,28,6,146,44,2,
|
||||
178,30,12,10,60,10,178,64,2,146,28,10,178,92,10,
|
||||
210,5,41,146,40,2,102,96,2,125,100,2,88,74,2,
|
||||
157,142,2,159,26,10,55,143,2,50,73,2,102,134,2,
|
||||
142,73,2,84,127,2,126,142,2,82,156,2,178,28,10,
|
||||
158,28,26,114,84,14,202,12,4,10,5,20,74,17,2,
|
||||
26,92,2,194,7,19,106};
|
||||
|
||||
static unsigned char header_data[] = { 71,99,218,218,99,11,71,218,71,71,
|
||||
218,99,99,99,71,99,218,99,99,99,99,218,71,218,99,218,218,99,99,218,
|
||||
218,99,99,218,99,218,99,58,218,99,99,99,58,218,99,99,99,58,99,58,
|
||||
99,58,11,58,99,58,58,11,99,58,99,58,99,99,99,218,99,218,99,58,
|
||||
99,71,99,218,71,12,12,12,12,12,12,12,12,12,92,19,19,19,92,92,
|
||||
92,92,19,108,19,19,19,19,19,19,53,53,53,53,101,19,19,53,53,19,
|
||||
19,19,12,92,92,12,12,12,71,71,218,99,218,218,71,71,12,12,218,99,
|
||||
58,58,58,99,99,99,58,99,99,99,11,58,11,58,58,99,58,99,99,99,
|
||||
58,99,99,99,99,58,99,99,99,99,99,218,99,99,11,99,99,99,11,99,
|
||||
99,218,218,218,99,218,99,99,218,218,99,99,218,99,218,218,99,99,218,11,
|
||||
218,71,99,218,99,218,218,99,71,8,218,99,218,218,99,99,99,99,99,99,
|
||||
218,218,99,99,218,99,218,99,218,71,99,99,99,218,99,99,218,99,99,99,
|
||||
218,218,99,99,99,99,58,99,58,30,99,99,99,99,99,99,58,99,99,58,
|
||||
99,58,99,58,99,99,58,58,58,99,58,58,99,218,218,71,99,99,71,71,
|
||||
71,123,12,118,71,71,12,71,123,12,12,19,19,19,53,19,19,53,53,19,
|
||||
19,53,101,63,20,63,20,63,53,53,53,101,53,53,53,19,53,53,53,19,
|
||||
92,12,12,12,71,12,12,12,12,12,92,71,218,218,71,218,71,71,71,71,
|
||||
99,218,58,58,58,99,99,99,99,58,58,58,99,58,99,58,58,99,58,58,
|
||||
99,99,58,99,99,99,99,58,99,58,30,99,99,99,218,99,58,99,99,58,
|
||||
11,99,99,218,99,218,218,99,99,218,71,99,218,99,99,218,99,99,218,99,
|
||||
11,218,99,218,99,11,218,99,99,8,71,71,71,99,218,71,218,99,71,218,
|
||||
11,99,218,218,99,218,99,218,99,99,99,99,218,99,99,99,99,99,218,99,
|
||||
99,99,99,99,99,11,99,99,99,99,99,99,58,99,58,99,58,99,58,58,
|
||||
99,11,58,58,99,58,99,99,58,58,218,99,123,71,71,71,123,71,71,218,
|
||||
99,99,218,71,12,12,12,12,92,19,19,53,19,53,53,53,53,19,53,53,
|
||||
53,53,19,53,19,53,53,53,53,53,63,63,101,63,63,20,53,19,53,53,
|
||||
53,19,92,92,12,12,12,71,71,71,71,12,12,71,71,12,12,12,12,12,
|
||||
12,218,218,99,58,58,99,58,99,58,99,58,99,99,58,218,58,99,58,99,
|
||||
99,99,99,11,58,99,99,58,99,99,58,58,99,99,99,99,99,99,99,99,
|
||||
99,58,218,99,218,99,99,99,218,99,99,218,99,11,218,99,218,218,99,99,
|
||||
218,99,218,11,99,71,99,218,71,8,99,99,218,99,99,99,218,99,99,218,
|
||||
218,99,11,99,99,218,99,218,99,218,218,99,58,99,99,99,58,11,99,99,
|
||||
58,99,99,58,58,58,58,99,99,99,99,218,58,99,99,99,58,58,99,99,
|
||||
58,58,99,58,99,58,99,99,58,58,99,218,71,71,218,218,218,58,58,58,
|
||||
218,99,71,123,12,12,12,19,19,108,108,108,92,92,92,12,71,12,12,92,
|
||||
19,53,53,53,101,53,53,19,53,101,53,20,53,79,79,0,34,79,20,63,
|
||||
53,53,53,19,19,19,12,12,12,71,71,71,71,71,71,123,71,12,12,12,
|
||||
12,12,71,71,218,58,99,58,218,58,218,99,58,99,58,99,99,218,58,58,
|
||||
58,99,58,58,99,99,58,99,58,99,99,218,58,58,99,99,99,99,99,99,
|
||||
58,11,99,99,218,218,218,99,218,99,99,218,218,99,218,99,99,218,218,99,
|
||||
218,99,71,218,99,218,99,99,99,8,218,218,99,218,99,218,99,218,218,99,
|
||||
11,218,218,218,218,99,71,99,218,99,99,99,218,58,99,99,99,99,218,30,
|
||||
58,99,58,99,58,11,58,99,58,99,58,58,58,99,58,58,99,99,58,58,
|
||||
58,99,58,99,58,58,99,58,218,99,99,218,58,99,58,58,58,58,58,218,
|
||||
71,12,12,71,71,12,12,12,12,71,71,118,71,71,118,71,71,12,223,19,
|
||||
19,53,53,53,53,63,229,20,79,20,34,0,20,101,101,63,20,101,101,53,
|
||||
108,53,53,53,53,53,101,19,92,12,12,12,12,71,71,218,218,218,71,71,
|
||||
118,12,71,71,218,218,58,58,58,58,58,58,218,58,58,58,99,99,218,99,
|
||||
58,58,99,99,58,99,58,99,58,58,58,99,99,99,58,99,99,99,58,58,
|
||||
99,58,58,99,99,99,99,99,99,99,218,99,99,218,99,218,218,99,99,218,
|
||||
99,58,99,99,218,99,218,218,218,8,99,218,99,218,99,218,11,99,218,99,
|
||||
99,99,99,99,218,99,58,99,99,99,58,99,218,99,99,99,99,99,58,99,
|
||||
58,218,99,99,99,58,218,58,58,58,99,99,58,99,218,58,99,99,58,218,
|
||||
58,99,58,99,99,99,58,99,58,58,58,58,99,58,58,58,58,218,218,12,
|
||||
71,71,71,12,12,71,71,12,71,12,71,71,71,71,12,92,19,53,53,53,
|
||||
101,63,79,34,251,0,0,63,20,53,19,53,53,53,53,19,19,53,19,19,
|
||||
19,108,19,19,19,19,19,19,53,53,108,12,12,12,71,71,218,58,58,58,
|
||||
99,218,71,71,71,12,218,99,99,58,58,58,58,218,58,58,58,58,58,99,
|
||||
99,58,58,99,58,218,58,99,99,99,99,58,99,128,99,58,99,99,11,99,
|
||||
99,58,11,58,99,99,99,218,58,11,99,58,99,218,99,99,218,99,99,99,
|
||||
218,71,99,99,218,99,11,99,218,8,218,99,218,99,218,99,99,218,99,218,
|
||||
58,218,58,218,99,99,218,99,58,99,99,99,99,78,11,58,99,58,99,99,
|
||||
99,58,58,99,58,11,58,58,218,99,99,58,58,58,99,58,58,58,99,99,
|
||||
58,58,58,58,58,58,99,58,99,99,99,58,58,58,58,58,218,71,118,12,
|
||||
71,71,71,71,71,12,71,71,71,71,71,12,92,19,19,53,53,63,20,251,
|
||||
0,79,79,0,79,34,34,79,0,63,229,20,63,101,53,101,19,53,19,92,
|
||||
12,71,12,92,12,12,12,12,12,92,19,92,92,71,12,118,71,218,99,58,
|
||||
58,58,58,58,218,123,71,218,58,58,58,99,58,58,58,218,58,218,58,58,
|
||||
218,58,99,58,58,58,99,99,58,99,58,99,218,99,99,99,58,58,58,11,
|
||||
58,58,99,58,99,99,30,99,99,99,58,218,218,30,99,218,99,99,99,218,
|
||||
99,99,218,218,99,99,218,71,99,8,99,99,71,99,218,218,99,218,99,218,
|
||||
99,218,99,58,11,58,99,99,11,58,99,58,99,99,99,99,58,58,99,99,
|
||||
58,99,99,99,99,58,99,78,58,58,99,99,218,78,58,218,58,99,212,58,
|
||||
99,58,58,58,218,58,58,58,58,58,58,58,58,58,218,71,12,12,71,71,
|
||||
123,218,218,58,99,71,123,71,71,12,19,19,19,53,53,19,19,53,63,53,
|
||||
101,101,101,63,101,101,20,20,79,0,0,79,79,34,251,79,79,251,101,53,
|
||||
19,92,12,71,71,71,218,12,218,12,71,71,71,71,71,12,71,71,123,71,
|
||||
58,58,58,58,58,58,58,99,99,58,58,58,99,58,58,58,99,58,99,58,
|
||||
99,58,58,99,58,58,58,58,99,58,99,58,99,58,99,58,99,99,58,58,
|
||||
99,99,99,58,99,58,58,58,99,99,99,30,128,58,99,99,99,99,99,58,
|
||||
218,99,99,218,218,99,99,218,71,8,71,218,99,99,99,99,218,99,99,99,
|
||||
99,30,58,11,58,58,99,58,58,58,58,30,58,58,99,99,99,58,99,58,
|
||||
99,58,99,58,58,58,218,99,58,99,58,58,58,218,99,58,58,58,58,58,
|
||||
58,99,99,99,58,99,99,58,58,212,99,58,58,218,71,71,218,218,99,58,
|
||||
58,58,58,218,123,71,71,12,108,19,19,108,19,19,223,92,19,92,12,12,
|
||||
19,19,19,19,53,53,63,63,229,0,34,34,79,0,79,0,75,34,0,34,
|
||||
79,20,53,19,92,12,71,71,71,218,71,123,71,123,71,71,71,71,71,71,
|
||||
71,218,58,58,58,58,58,58,58,99,58,58,58,58,58,58,58,58,99,58,
|
||||
58,99,99,58,99,58,58,58,58,58,58,99,58,99,58,99,58,58,99,99,
|
||||
58,58,99,99,58,58,218,58,58,99,58,99,11,58,58,99,58,218,99,99,
|
||||
99,99,218,99,99,218,99,99,99,8,99,218,99,218,99,99,99,99,58,58,
|
||||
11,58,99,58,58,30,58,11,58,11,58,99,99,58,99,58,58,58,99,58,
|
||||
58,99,58,99,99,58,58,99,58,99,58,99,58,99,212,58,58,58,58,58,
|
||||
58,58,58,58,58,58,58,58,58,58,212,58,218,218,218,99,58,58,58,58,
|
||||
58,99,71,71,71,12,71,71,12,12,12,71,71,123,71,218,71,71,71,92,
|
||||
19,108,63,79,229,126,0,79,0,0,34,34,34,126,34,251,79,0,126,34,
|
||||
79,0,79,20,63,19,19,12,71,71,71,218,71,99,71,71,71,71,71,71,
|
||||
71,71,218,58,58,58,212,58,58,58,58,58,58,58,58,58,58,58,58,58,
|
||||
58,58,99,58,58,99,58,58,99,99,128,218,58,58,99,58,99,58,58,99,
|
||||
218,58,58,218,99,99,99,99,99,99,58,99,99,58,30,218,99,99,99,99,
|
||||
99,99,218,99,99,99,218,218,99,8,218,99,99,99,58,99,99,99,99,99,
|
||||
58,58,218,99,99,99,58,99,58,58,58,99,58,99,58,99,99,99,58,58,
|
||||
99,99,58,58,58,58,58,58,99,99,58,99,99,58,58,58,58,99,58,58,
|
||||
99,58,99,58,78,212,99,212,99,58,58,99,58,58,78,78,246,99,212,58,
|
||||
99,71,123,71,71,71,71,71,218,218,71,123,218,218,218,118,12,19,63,63,
|
||||
0,0,0,34,34,0,34,79,79,79,0,34,79,79,20,101,53,101,53,19,
|
||||
53,53,101,101,53,53,19,19,19,92,218,218,218,218,218,212,78,58,218,218,
|
||||
71,71,71,11,58,246,58,78,246,58,58,58,99,99,58,58,99,58,212,58,
|
||||
99,58,99,58,58,99,58,58,58,58,58,212,218,58,58,99,58,58,99,58,
|
||||
99,99,99,58,58,99,99,99,58,99,58,58,99,99,99,58,58,99,99,99,
|
||||
99,99,99,11,58,99,99,99,218,8,99,99,218,99,99,218,99,218,58,58,
|
||||
11,78,58,99,58,99,58,99,58,11,58,99,58,99,58,58,58,99,99,58,
|
||||
99,99,99,58,58,58,58,58,58,58,58,58,58,58,58,212,99,58,212,99,
|
||||
58,58,78,58,78,58,58,58,58,58,58,58,58,58,246,58,246,58,58,71,
|
||||
218,71,71,71,218,71,71,71,71,218,218,71,71,92,92,53,63,126,79,0,
|
||||
0,79,0,79,34,79,0,126,79,79,79,79,79,229,229,101,53,108,92,71,
|
||||
71,71,71,71,71,12,12,19,108,19,92,71,71,71,71,218,212,246,78,58,
|
||||
58,218,218,71,71,58,58,212,212,78,212,78,78,58,58,58,58,58,99,58,
|
||||
78,58,58,99,58,58,58,58,58,58,58,58,99,58,99,58,58,212,99,58,
|
||||
58,99,58,99,58,99,99,58,58,99,99,58,58,58,58,11,78,99,99,99,
|
||||
99,58,99,58,71,99,99,99,99,8,99,99,99,218,99,58,99,30,58,11,
|
||||
58,11,58,58,99,58,58,99,58,99,58,99,99,58,99,58,99,58,58,99,
|
||||
58,58,58,58,58,78,58,99,58,99,58,58,58,58,99,58,212,99,58,58,
|
||||
58,78,78,78,58,58,58,58,58,212,58,78,58,78,78,78,58,99,218,218,
|
||||
71,218,218,71,58,99,58,99,71,71,71,12,19,20,79,251,0,251,79,251,
|
||||
79,63,126,79,79,79,79,229,79,79,79,126,126,79,79,63,20,53,53,92,
|
||||
12,12,218,71,71,218,218,218,71,218,71,71,71,218,71,218,218,58,246,246,
|
||||
78,212,78,58,218,218,58,58,58,246,78,212,78,212,58,58,58,58,58,212,
|
||||
78,78,78,58,58,99,58,58,58,58,58,58,58,58,58,218,99,99,58,99,
|
||||
58,58,218,99,58,58,99,58,99,99,58,99,99,99,58,99,99,58,58,58,
|
||||
218,99,11,58,99,99,99,218,99,8,99,30,218,58,11,99,99,58,99,58,
|
||||
99,58,58,99,218,99,218,58,99,99,58,58,58,58,99,58,99,99,58,99,
|
||||
58,58,58,78,78,58,58,58,58,58,99,246,78,78,58,58,58,58,58,78,
|
||||
78,212,78,246,246,58,58,58,212,58,212,246,78,246,58,212,218,218,218,218,
|
||||
218,58,246,58,246,58,218,218,123,12,19,19,53,53,101,53,63,101,63,63,
|
||||
63,63,63,63,63,101,63,53,63,53,53,53,53,108,19,19,19,19,108,19,
|
||||
92,92,12,12,71,71,218,99,99,218,218,218,218,218,71,71,71,218,218,246,
|
||||
78,78,246,78,78,78,58,58,58,78,78,78,78,246,58,58,58,58,58,78,
|
||||
212,78,78,58,58,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,
|
||||
58,99,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,99,99,99,
|
||||
58,99,58,99,99,58,99,99,99,8,99,99,30,58,58,58,58,58,58,99,
|
||||
58,11,99,58,99,58,58,58,58,58,58,99,58,58,58,58,58,58,99,58,
|
||||
99,58,78,58,58,58,99,58,58,78,246,78,58,78,58,58,58,58,78,212,
|
||||
246,78,246,78,78,99,212,246,78,246,58,246,246,78,246,218,218,218,58,58,
|
||||
246,78,78,246,58,218,218,71,12,12,108,92,108,19,108,53,63,63,63,53,
|
||||
53,53,19,223,92,92,49,118,118,118,118,118,118,118,71,118,118,12,12,12,
|
||||
92,71,71,123,218,99,11,58,58,58,58,78,58,99,99,123,71,218,218,218,
|
||||
246,246,78,212,78,212,78,246,78,78,58,78,246,78,246,78,58,58,58,58,
|
||||
99,78,246,78,246,99,58,58,58,58,58,78,78,78,78,99,58,99,58,99,
|
||||
78,58,58,99,58,218,218,58,58,99,58,58,58,218,99,58,58,58,58,11,
|
||||
58,99,99,99,58,99,99,218,58,8,99,99,58,99,58,11,58,11,58,58,
|
||||
99,58,99,58,99,58,99,58,58,218,58,58,58,99,58,99,58,58,58,99,
|
||||
78,58,58,58,99,58,58,78,78,58,246,78,246,99,58,58,58,212,78,78,
|
||||
246,58,246,58,78,78,78,58,246,78,78,58,246,58,58,58,212,58,246,78,
|
||||
212,246,58,58,71,71,71,71,12,92,92,92,108,53,53,53,19,19,223,223,
|
||||
49,223,92,49,49,223,92,49,118,118,118,71,118,112,118,11,11,112,71,112,
|
||||
71,71,11,11,11,99,99,58,58,78,78,78,246,78,246,58,99,71,218,71,
|
||||
218,78,78,246,78,246,58,246,78,246,212,58,246,58,246,78,212,78,246,58,
|
||||
58,58,78,246,246,78,78,99,58,58,58,212,78,58,78,58,58,58,58,58,
|
||||
78,58,78,99,58,58,99,58,58,58,58,99,58,58,99,218,58,99,58,58,
|
||||
58,58,99,58,99,99,58,99,99,8,99,99,58,58,58,99,58,99,99,58,
|
||||
99,58,58,58,58,58,58,218,99,58,99,58,58,58,58,58,99,58,58,78,
|
||||
58,78,78,78,78,58,78,58,78,78,78,212,78,58,78,58,78,212,78,246,
|
||||
78,246,78,78,212,246,246,78,246,212,246,246,78,246,58,246,78,246,58,246,
|
||||
246,58,99,218,218,218,71,12,92,19,19,19,19,19,223,223,49,223,49,118,
|
||||
49,112,30,30,237,103,208,208,245,208,245,208,245,245,245,103,208,103,22,237,
|
||||
30,30,11,11,11,11,71,71,11,99,58,78,78,246,58,246,246,246,58,99,
|
||||
99,218,212,78,246,78,246,78,246,58,78,58,246,78,58,246,78,212,78,246,
|
||||
58,212,58,78,78,212,78,78,58,58,99,78,78,78,78,78,58,58,99,58,
|
||||
58,78,78,78,58,58,99,58,99,58,58,99,58,218,58,58,99,58,58,218,
|
||||
99,58,99,99,58,99,30,99,99,8,58,99,58,99,58,58,58,99,58,99,
|
||||
58,218,218,58,99,58,99,58,58,58,78,99,78,58,99,58,58,78,58,78,
|
||||
78,58,78,78,58,78,78,246,246,212,78,78,78,58,78,246,78,246,58,246,
|
||||
212,78,58,78,78,58,246,78,78,78,58,246,78,246,78,58,246,78,78,78,
|
||||
58,218,99,11,71,12,92,92,92,223,223,223,223,223,49,118,112,22,237,208,
|
||||
72,245,55,243,245,72,72,72,65,208,236,208,208,245,72,55,243,55,55,243,
|
||||
245,245,245,103,237,237,30,11,11,112,71,11,99,58,78,246,246,246,246,78,
|
||||
58,218,58,58,246,78,212,78,246,78,246,78,212,78,78,212,78,246,78,78,
|
||||
58,78,78,78,78,78,246,246,246,58,58,78,58,246,78,212,78,78,99,58,
|
||||
58,78,58,58,58,58,58,99,58,58,58,58,78,58,58,99,99,58,58,58,
|
||||
99,218,58,99,99,99,58,99,58,8,99,99,99,58,11,58,58,58,99,58,
|
||||
58,58,58,58,58,58,58,99,99,78,78,58,58,78,58,58,99,78,78,78,
|
||||
78,78,78,78,78,78,212,246,246,246,246,78,78,246,246,58,246,78,246,78,
|
||||
78,78,212,246,246,246,78,78,212,246,246,246,58,246,246,78,246,246,78,58,
|
||||
218,99,71,12,12,92,92,82,223,49,223,118,112,22,208,72,72,208,65,22,
|
||||
22,112,11,112,112,112,112,112,118,118,118,112,112,112,30,244,244,30,237,65,
|
||||
236,72,55,55,243,243,208,208,237,237,11,71,11,11,71,11,99,58,246,246,
|
||||
246,78,78,246,58,246,78,246,58,246,58,246,58,246,246,78,78,78,212,78,
|
||||
212,246,212,78,246,246,58,78,78,246,99,246,246,58,246,58,78,78,78,58,
|
||||
78,78,78,78,78,78,58,58,58,99,58,58,78,99,58,58,58,218,99,99,
|
||||
58,58,99,58,99,58,58,99,99,8,58,58,99,58,99,218,99,58,99,99,
|
||||
99,58,99,58,99,58,58,58,58,78,58,58,58,58,58,58,58,78,212,78,
|
||||
78,58,246,78,58,246,246,246,246,246,246,246,78,58,246,78,246,58,246,58,
|
||||
246,78,78,78,58,246,212,78,78,78,58,246,78,212,246,58,78,212,58,99,
|
||||
218,71,12,92,19,223,49,49,118,62,30,22,208,208,103,30,244,112,244,118,
|
||||
112,23,49,49,49,49,49,49,49,49,82,82,223,82,49,118,23,118,118,112,
|
||||
11,30,237,22,65,245,55,243,245,245,103,237,237,11,71,11,71,71,218,58,
|
||||
246,246,78,246,78,212,78,246,246,78,246,246,78,78,212,78,212,78,246,78,
|
||||
78,58,246,78,58,246,78,212,78,246,78,78,78,78,78,212,246,246,246,78,
|
||||
58,78,78,78,58,78,78,58,58,58,58,58,99,58,58,58,58,58,99,58,
|
||||
58,58,58,58,58,99,99,58,58,8,99,99,58,58,58,99,99,99,99,58,
|
||||
58,99,78,58,78,99,58,58,99,78,78,78,58,78,58,58,78,246,78,212,
|
||||
78,78,58,78,246,246,246,246,246,246,58,78,78,246,58,246,78,246,78,246,
|
||||
78,212,78,212,212,246,78,78,246,246,78,212,58,99,212,246,246,58,99,218,
|
||||
118,12,92,223,223,49,49,11,237,208,208,103,244,23,118,112,118,112,49,49,
|
||||
19,82,82,82,223,49,66,49,49,82,223,223,101,19,223,82,223,82,223,82,
|
||||
82,49,23,112,11,244,30,65,72,55,55,245,208,22,237,112,11,118,71,218,
|
||||
218,58,58,78,246,78,212,78,78,212,99,78,212,246,78,246,78,246,78,212,
|
||||
246,246,78,246,246,78,246,78,246,58,246,78,58,78,246,246,246,246,212,246,
|
||||
78,78,78,78,78,58,78,78,99,58,78,78,78,99,58,58,99,58,99,99,
|
||||
58,99,99,99,99,58,99,58,99,8,99,99,99,58,58,99,58,58,99,58,
|
||||
58,58,78,78,58,58,58,58,58,58,78,78,78,78,78,58,246,246,246,246,
|
||||
246,78,78,212,246,246,246,246,246,246,78,212,78,246,78,212,78,246,58,246,
|
||||
78,246,78,58,58,212,246,58,78,246,246,58,58,58,58,246,58,218,71,12,
|
||||
223,223,49,49,49,30,65,72,72,30,112,118,118,112,118,49,223,223,223,49,
|
||||
244,244,244,244,23,23,23,23,70,66,49,70,49,70,70,118,23,23,23,23,
|
||||
49,223,19,82,223,223,23,11,244,237,208,72,55,55,208,103,30,11,11,49,
|
||||
71,71,99,58,246,78,246,246,58,246,58,58,246,212,78,246,58,246,78,58,
|
||||
58,212,78,78,212,78,212,78,78,78,212,78,78,78,246,212,246,246,246,212,
|
||||
246,58,78,78,78,78,58,78,78,99,58,58,78,58,58,58,99,58,58,58,
|
||||
58,58,58,58,99,58,99,58,99,8,99,58,58,218,58,58,58,99,58,58,
|
||||
58,99,58,58,99,58,78,78,78,78,78,78,78,58,246,246,246,212,246,246,
|
||||
212,246,78,246,246,246,246,246,212,246,246,78,246,58,212,246,78,78,78,246,
|
||||
58,246,212,99,58,246,78,246,246,58,58,58,58,78,246,58,99,118,12,92,
|
||||
223,223,223,11,22,72,208,244,49,112,112,118,49,82,223,49,244,244,242,62,
|
||||
23,62,23,23,244,244,244,244,244,244,62,30,244,244,244,244,23,112,210,23,
|
||||
62,244,244,23,223,82,53,82,49,112,30,30,65,72,55,245,208,237,30,112,
|
||||
71,49,118,71,99,78,78,78,246,246,58,99,58,246,212,78,246,58,246,212,
|
||||
99,58,212,246,78,246,78,246,212,246,78,246,246,212,246,246,246,212,246,246,
|
||||
246,246,78,78,246,246,78,78,78,78,58,58,78,58,58,58,58,58,99,99,
|
||||
99,78,99,58,99,99,58,99,58,8,58,99,58,99,99,58,58,99,58,58,
|
||||
58,58,58,58,78,58,78,78,58,78,58,246,78,78,78,212,246,246,212,246,
|
||||
246,246,246,246,246,246,246,246,246,246,246,58,246,58,99,212,246,212,78,78,
|
||||
78,99,58,58,78,246,58,78,246,58,58,58,58,212,58,218,71,12,49,49,
|
||||
49,112,22,72,65,112,49,112,112,112,223,19,118,62,244,62,62,23,23,244,
|
||||
244,244,244,112,23,49,49,223,19,223,82,223,223,49,223,23,118,112,244,30,
|
||||
62,62,62,62,23,62,23,223,82,8,82,71,30,244,22,72,55,245,103,237,
|
||||
11,71,12,12,71,99,78,78,78,58,212,58,58,58,58,212,78,58,246,78,
|
||||
58,58,58,212,78,246,58,78,78,212,212,246,246,246,212,246,246,246,246,246,
|
||||
246,246,58,78,78,58,246,212,78,78,58,78,58,78,78,78,58,78,58,58,
|
||||
218,58,58,99,58,99,99,99,58,8,218,99,58,58,58,99,58,58,99,78,
|
||||
78,58,99,58,58,78,58,78,246,78,78,58,78,212,246,246,246,246,246,246,
|
||||
246,246,246,212,246,212,246,246,246,212,78,246,58,58,58,246,78,78,212,246,
|
||||
58,58,58,58,212,78,246,212,58,58,58,58,58,58,71,12,49,223,223,49,
|
||||
30,208,72,30,49,49,112,49,223,223,23,22,244,62,23,23,62,22,112,118,
|
||||
49,49,223,118,23,244,30,242,22,242,242,62,242,244,244,112,23,49,49,223,
|
||||
23,112,30,244,62,112,210,23,23,49,82,8,223,244,237,30,208,55,243,245,
|
||||
22,30,71,118,12,71,99,78,78,246,212,58,58,58,58,246,246,246,78,246,
|
||||
58,58,58,78,212,78,246,246,246,58,58,212,246,246,246,246,246,246,246,246,
|
||||
246,78,246,58,246,246,246,78,212,78,78,78,58,78,58,78,58,58,99,58,
|
||||
58,58,99,58,58,58,58,58,58,8,58,99,58,58,58,58,99,58,78,78,
|
||||
58,58,78,58,58,78,78,58,78,78,78,78,78,246,212,246,246,246,246,246,
|
||||
246,246,246,246,246,246,212,246,246,246,78,58,58,58,58,246,78,78,246,99,
|
||||
212,58,212,58,212,78,78,58,58,218,58,212,58,99,71,49,223,49,49,30,
|
||||
55,72,112,49,244,11,49,82,112,242,242,62,23,62,244,112,118,223,82,118,
|
||||
30,236,29,225,231,33,248,42,42,42,219,2,42,219,110,107,231,29,65,244,
|
||||
112,223,223,49,112,30,30,23,23,23,23,49,82,101,49,30,30,242,72,243,
|
||||
208,103,30,71,118,12,71,99,78,78,78,58,58,58,58,58,78,58,246,78,
|
||||
58,58,99,58,246,58,246,58,246,58,99,58,212,246,246,212,246,246,246,246,
|
||||
246,246,246,246,212,246,246,246,246,78,58,78,78,78,78,78,58,78,78,78,
|
||||
58,78,99,99,99,58,58,99,99,8,99,58,99,99,58,58,58,58,78,78,
|
||||
78,78,58,58,58,78,78,78,78,78,246,246,58,246,246,246,246,246,246,246,
|
||||
246,246,212,246,99,58,246,246,246,246,212,58,58,58,99,212,78,212,212,58,
|
||||
78,58,58,58,246,246,78,58,71,218,58,58,11,71,118,223,49,23,103,243,
|
||||
22,49,118,30,118,82,49,30,242,62,70,62,244,118,223,82,112,65,93,205,
|
||||
217,42,80,147,98,4,26,8,8,8,8,121,8,8,26,4,98,210,111,219,
|
||||
29,29,65,112,223,82,23,30,244,62,62,62,62,49,82,82,112,30,30,65,
|
||||
243,245,103,30,71,118,12,71,218,212,246,58,58,212,212,58,58,246,212,78,
|
||||
58,58,212,58,58,246,78,246,58,58,58,58,246,212,246,246,246,246,246,246,
|
||||
246,212,246,246,246,246,212,246,246,212,78,246,212,78,58,78,78,78,58,78,
|
||||
78,78,58,58,58,58,99,58,58,8,58,58,58,58,58,58,58,58,237,78,
|
||||
58,78,78,58,78,78,212,78,246,78,78,246,246,246,246,246,246,246,246,246,
|
||||
246,246,246,58,58,58,246,246,246,246,58,58,99,58,58,246,246,78,99,78,
|
||||
246,78,58,58,58,58,58,218,12,99,58,99,71,92,49,223,118,22,41,65,
|
||||
223,23,30,118,19,23,22,242,23,23,30,112,223,19,112,29,222,232,87,80,
|
||||
98,26,121,8,20,253,20,20,20,20,101,20,20,20,253,253,20,8,121,26,
|
||||
4,14,2,231,29,30,49,82,112,30,244,62,23,210,118,82,101,223,30,244,
|
||||
65,55,243,103,237,71,118,71,71,99,58,58,58,58,218,58,58,58,246,212,
|
||||
58,58,212,78,99,58,246,246,78,58,58,58,58,246,246,246,246,246,246,246,
|
||||
246,246,246,212,246,246,246,246,246,246,246,78,78,78,78,78,58,78,58,78,
|
||||
78,58,58,58,78,99,58,58,99,8,99,58,58,99,99,58,58,58,58,237,
|
||||
78,78,58,78,78,246,78,246,78,246,78,246,246,246,246,246,246,246,246,246,
|
||||
246,246,58,58,58,58,246,246,246,58,99,78,246,212,99,246,212,58,78,246,
|
||||
58,246,58,58,58,212,218,12,118,58,58,71,12,49,19,49,237,41,65,49,
|
||||
118,112,223,82,244,236,62,66,62,30,82,8,112,93,68,6,137,88,162,253,
|
||||
253,20,253,19,223,23,244,244,54,242,54,242,244,62,112,49,223,20,20,20,
|
||||
20,253,26,98,14,33,29,244,82,101,112,22,62,62,62,23,49,53,82,30,
|
||||
112,22,243,243,208,11,71,118,12,218,99,58,58,58,12,71,58,58,58,58,
|
||||
99,58,58,246,246,58,58,246,246,58,58,58,99,58,246,246,246,246,78,58,
|
||||
246,212,246,246,246,246,246,212,246,246,78,78,78,78,58,78,78,78,78,58,
|
||||
78,58,78,237,78,58,99,99,78,8,58,99,58,58,78,78,78,78,78,78,
|
||||
58,78,78,58,78,246,78,212,246,246,246,246,246,246,246,246,246,103,246,246,
|
||||
246,246,58,58,58,99,212,246,246,58,212,78,246,58,58,58,58,58,212,78,
|
||||
78,78,58,58,58,58,123,49,218,99,11,118,223,223,82,237,41,208,23,118,
|
||||
237,223,82,244,18,210,23,23,112,19,223,103,64,6,148,147,26,253,20,8,
|
||||
66,23,54,111,219,219,137,24,76,24,163,25,137,42,204,42,151,109,244,223,
|
||||
20,20,20,20,8,4,111,231,236,23,82,12,237,62,62,23,62,223,253,223,
|
||||
237,244,22,41,245,103,11,112,118,71,218,58,58,99,92,92,128,58,58,58,
|
||||
58,58,58,212,78,58,58,212,58,58,58,78,78,58,212,246,246,246,58,58,
|
||||
212,246,212,246,246,246,246,246,246,212,246,78,246,246,78,78,78,78,78,58,
|
||||
78,58,58,78,99,58,58,58,99,8,99,58,58,58,58,78,78,58,78,78,
|
||||
78,78,78,78,78,58,246,246,246,246,246,246,246,246,103,246,246,246,246,246,
|
||||
246,78,58,58,58,58,58,212,58,58,78,212,78,78,99,58,58,212,78,246,
|
||||
212,212,58,58,58,218,92,12,218,99,71,12,223,82,118,243,55,23,223,30,
|
||||
223,19,244,93,54,49,23,112,82,82,245,153,138,234,162,8,253,101,49,30,
|
||||
111,125,24,201,142,16,159,142,43,95,197,156,193,193,51,141,224,25,248,231,
|
||||
65,118,20,20,20,20,121,210,231,55,244,82,49,30,244,62,62,244,223,20,
|
||||
118,237,112,208,243,245,237,71,118,49,71,58,58,218,92,92,12,58,58,99,
|
||||
58,58,212,78,212,212,58,58,58,58,58,212,78,58,58,246,246,246,99,58,
|
||||
99,246,246,246,246,246,246,246,246,246,212,246,58,78,78,78,78,78,58,78,
|
||||
78,58,78,78,58,78,58,99,58,8,99,99,58,58,58,78,78,58,78,58,
|
||||
78,78,78,246,78,78,78,246,246,246,246,246,246,246,246,103,246,246,246,246,
|
||||
246,58,58,58,58,58,58,58,58,58,78,78,246,78,58,58,58,212,78,58,
|
||||
58,78,58,58,58,12,92,12,99,218,118,19,82,223,22,116,237,49,112,112,
|
||||
101,112,93,109,70,112,118,82,223,55,136,185,44,26,253,253,82,62,107,163,
|
||||
117,16,114,159,161,106,98,46,26,26,26,26,26,4,32,81,44,142,43,234,
|
||||
10,56,236,23,20,20,20,8,4,219,225,237,19,82,11,244,62,54,62,223,
|
||||
20,112,30,244,72,239,103,237,71,12,12,71,58,71,92,92,12,128,58,58,
|
||||
58,58,246,78,246,58,58,58,99,58,58,246,78,78,58,246,246,58,58,58,
|
||||
58,212,246,212,246,246,246,246,246,246,78,78,246,58,246,58,78,246,78,58,
|
||||
78,58,78,78,58,58,58,58,58,8,58,58,58,58,78,237,58,78,78,78,
|
||||
78,78,78,58,246,246,212,246,246,246,246,246,246,246,246,246,246,246,246,246,
|
||||
78,58,58,58,58,58,99,58,58,246,246,246,58,246,58,58,58,78,246,218,
|
||||
11,58,58,58,58,12,92,71,218,11,49,223,101,23,239,93,23,118,244,223,
|
||||
223,65,29,70,70,112,82,82,72,233,135,152,121,253,20,49,242,179,176,39,
|
||||
198,156,32,47,26,26,69,113,26,47,9,47,162,113,26,121,113,252,152,159,
|
||||
43,234,217,238,30,253,20,251,8,4,107,17,30,82,223,22,62,62,54,244,
|
||||
82,19,237,112,244,41,245,30,112,71,92,71,99,71,12,92,92,71,78,58,
|
||||
58,246,246,58,78,212,58,58,58,58,58,78,246,58,99,58,212,58,58,58,
|
||||
58,78,246,246,246,246,246,246,246,246,246,246,78,78,78,78,246,58,78,78,
|
||||
58,58,58,99,58,99,58,58,58,8,58,99,99,58,58,78,78,58,78,58,
|
||||
78,58,78,78,78,78,78,246,246,246,246,246,246,246,246,246,78,246,246,246,
|
||||
58,58,78,58,78,58,58,99,58,78,58,246,246,58,58,58,212,58,58,12,
|
||||
71,58,58,58,99,92,92,71,218,71,223,8,19,22,150,30,49,11,23,101,
|
||||
30,93,54,49,112,49,20,30,254,181,95,26,253,253,49,65,163,166,206,202,
|
||||
52,26,8,121,4,161,43,114,139,131,57,200,195,188,192,88,26,26,121,98,
|
||||
197,67,234,145,230,22,82,20,20,8,98,107,100,112,253,112,103,244,54,62,
|
||||
49,20,49,237,118,208,243,103,11,11,12,92,92,92,92,12,49,12,58,58,
|
||||
78,58,246,78,246,78,212,99,58,58,78,246,58,78,58,58,58,99,58,58,
|
||||
58,99,246,246,246,246,246,246,246,246,246,246,246,78,246,78,246,78,58,78,
|
||||
78,58,78,78,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78,
|
||||
78,78,78,78,78,246,246,246,246,246,246,246,246,246,246,246,58,212,58,246,
|
||||
99,212,58,99,78,99,58,58,78,246,58,58,58,78,78,58,78,78,99,71,
|
||||
12,71,58,58,12,12,12,71,11,12,223,101,49,243,100,118,223,112,82,19,
|
||||
93,225,113,23,244,101,223,41,129,199,52,253,20,223,242,124,39,57,117,122,
|
||||
121,121,47,44,195,35,94,196,165,189,189,189,27,84,200,139,67,186,26,121,
|
||||
240,106,159,234,175,68,242,20,20,20,8,210,238,93,223,19,237,244,23,54,
|
||||
62,19,101,244,112,30,243,208,237,11,12,92,49,223,12,12,92,12,58,78,
|
||||
246,78,58,246,78,212,78,78,58,58,212,58,58,58,78,99,58,58,99,58,
|
||||
58,58,246,246,246,246,246,246,246,246,246,246,78,246,58,78,58,78,78,78,
|
||||
78,78,237,78,58,58,58,58,58,8,99,58,99,58,78,78,78,58,78,78,
|
||||
78,78,78,78,78,58,246,246,246,246,103,246,246,246,246,218,58,58,78,78,
|
||||
58,99,71,12,58,78,58,78,58,78,123,12,78,78,58,212,78,78,123,92,
|
||||
12,12,99,99,12,92,92,71,11,118,82,101,112,116,236,82,112,112,82,118,
|
||||
100,110,66,23,49,101,244,215,73,43,69,253,101,23,219,59,97,202,52,8,
|
||||
8,4,120,97,187,139,27,143,46,113,26,26,46,88,60,27,131,200,192,47,
|
||||
82,66,81,159,234,170,68,118,20,251,20,26,2,64,244,101,118,22,23,62,
|
||||
62,49,20,118,244,23,208,245,30,11,71,12,92,12,12,49,12,12,71,58,
|
||||
246,246,78,246,78,246,58,78,58,78,212,218,12,246,78,99,58,78,78,11,
|
||||
12,58,58,246,246,103,246,246,58,246,246,246,246,78,246,78,78,78,58,78,
|
||||
78,58,58,58,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78,
|
||||
78,212,78,246,246,78,99,58,246,246,246,246,246,246,71,12,99,58,58,99,
|
||||
58,58,53,251,71,78,78,78,78,246,19,19,71,246,246,78,212,246,12,92,
|
||||
12,12,12,12,92,12,12,71,218,118,19,101,244,239,65,223,244,11,53,112,
|
||||
222,235,66,112,223,20,72,45,90,221,8,253,19,242,214,97,57,152,26,8,
|
||||
26,188,57,187,139,186,8,8,8,8,121,121,8,8,26,4,44,131,94,67,
|
||||
162,82,113,44,159,76,220,29,82,0,20,8,98,238,245,82,82,237,23,62,
|
||||
54,112,20,223,237,49,22,245,237,11,71,49,12,92,12,12,12,12,71,78,
|
||||
246,58,246,58,246,78,246,58,246,212,58,19,101,218,78,78,99,58,58,53,
|
||||
101,71,58,246,246,246,78,71,92,58,246,246,212,246,78,58,58,78,78,58,
|
||||
78,78,78,78,58,58,58,58,58,8,99,99,58,99,58,78,78,58,99,58,
|
||||
78,78,58,246,78,58,71,92,218,246,246,246,103,246,12,92,92,58,58,58,
|
||||
58,218,63,53,19,246,246,78,78,212,53,92,92,212,246,78,78,58,92,218,
|
||||
12,12,92,92,92,12,12,71,11,118,101,101,22,116,242,223,237,11,8,30,
|
||||
17,62,70,112,8,53,72,172,134,143,8,20,223,109,102,57,97,81,121,82,
|
||||
252,114,35,157,165,26,253,8,8,46,182,4,26,26,8,8,113,160,190,35,
|
||||
186,66,121,106,117,152,232,68,49,79,20,8,26,42,17,223,53,22,112,244,
|
||||
54,244,8,82,30,118,30,245,30,11,99,12,12,92,123,12,12,12,71,78,
|
||||
246,78,246,78,58,246,246,58,246,58,12,53,53,12,78,78,78,99,12,63,
|
||||
63,92,78,78,246,246,78,229,229,12,246,246,246,212,78,71,71,58,78,78,
|
||||
58,78,78,58,58,58,212,58,58,8,99,58,58,58,58,78,78,58,99,218,
|
||||
99,58,246,78,78,58,12,92,12,78,246,246,246,218,92,92,19,71,58,58,
|
||||
58,12,38,92,53,71,246,58,246,218,108,92,92,218,246,212,78,58,12,218,
|
||||
12,12,12,92,12,92,12,71,71,118,82,8,103,116,242,82,244,11,82,30,
|
||||
222,210,223,23,8,101,55,172,183,186,8,253,223,110,102,157,97,161,8,8,
|
||||
127,67,190,140,189,26,8,8,69,127,120,5,52,26,26,8,121,9,84,187,
|
||||
43,113,82,98,142,152,89,119,244,20,0,253,121,219,64,23,101,30,30,23,
|
||||
54,244,82,101,30,112,112,72,237,71,30,12,12,92,118,12,12,12,71,58,
|
||||
246,246,58,246,58,212,78,246,58,246,108,63,53,19,78,78,78,58,53,101,
|
||||
53,108,78,246,246,246,108,79,20,53,246,246,246,78,99,92,92,12,99,78,
|
||||
78,58,58,218,218,218,99,58,58,8,99,99,58,58,58,99,99,218,71,11,
|
||||
99,99,78,246,212,71,218,71,92,71,246,246,246,71,92,92,19,19,58,58,
|
||||
58,92,53,92,92,108,58,246,246,71,92,92,92,92,212,246,246,58,123,48,
|
||||
12,12,12,92,92,12,12,12,99,118,19,101,237,116,65,49,30,112,82,244,
|
||||
222,235,26,118,82,101,65,136,183,7,8,8,82,242,21,157,57,192,69,8,
|
||||
26,7,191,157,190,60,9,8,26,52,84,131,60,4,121,8,26,113,67,94,
|
||||
142,113,82,98,43,152,10,119,244,251,0,253,121,111,64,23,101,244,22,49,
|
||||
62,62,82,101,112,23,112,103,30,71,11,12,12,118,12,12,118,12,71,78,
|
||||
78,246,78,58,218,58,78,246,246,12,53,101,53,19,58,78,58,12,63,63,
|
||||
53,63,218,246,246,71,79,20,63,101,218,246,246,218,12,19,108,12,99,58,
|
||||
99,71,218,71,71,218,71,218,71,8,99,58,99,99,58,58,11,218,71,218,
|
||||
71,71,218,58,58,99,218,99,71,92,218,78,246,92,92,12,223,53,71,58,
|
||||
58,19,19,92,92,19,12,78,78,12,92,92,92,92,71,78,78,218,123,241,
|
||||
48,12,12,92,49,12,118,12,71,49,223,101,11,116,65,66,112,11,82,112,
|
||||
100,54,66,66,223,20,244,105,90,159,8,8,8,244,10,167,187,202,98,8,
|
||||
121,47,192,169,190,35,195,188,188,195,57,84,106,47,8,8,8,122,195,140,
|
||||
95,66,82,98,142,221,175,119,244,251,251,20,8,219,64,112,101,30,242,118,
|
||||
23,62,19,20,11,118,112,22,11,11,99,12,12,12,12,71,12,118,71,58,
|
||||
246,58,246,99,12,99,212,78,58,19,53,53,101,53,58,78,218,53,101,53,
|
||||
53,63,218,246,246,63,0,101,19,53,12,78,58,12,108,92,19,108,92,71,
|
||||
71,12,71,71,123,71,71,123,71,8,99,99,58,58,58,11,58,11,99,218,
|
||||
99,11,99,99,218,99,218,99,71,12,12,99,99,92,92,92,12,19,53,71,
|
||||
99,38,53,12,12,92,19,218,212,92,92,92,48,12,108,128,246,218,123,48,
|
||||
128,123,12,12,12,12,12,118,71,71,223,8,112,41,55,49,49,244,223,49,
|
||||
93,231,70,82,223,20,82,116,181,158,252,8,20,223,242,214,57,157,156,46,
|
||||
8,66,26,147,44,198,86,196,86,198,44,52,4,8,8,8,46,60,97,194,
|
||||
52,82,82,180,159,177,232,64,66,79,20,8,26,231,100,49,8,237,62,23,
|
||||
62,244,82,82,30,223,11,237,112,11,11,12,12,71,12,12,118,12,71,218,
|
||||
246,78,58,218,92,99,246,212,92,53,79,79,53,53,218,58,19,63,38,126,
|
||||
53,101,92,58,19,251,63,223,19,19,92,71,12,223,92,223,223,92,19,92,
|
||||
12,71,123,71,71,71,71,71,71,8,11,58,11,58,99,58,99,58,99,58,
|
||||
58,218,218,218,99,218,11,99,99,71,92,92,12,49,92,71,99,12,53,53,
|
||||
92,20,53,123,48,12,92,19,218,19,92,12,241,48,92,92,58,218,92,241,
|
||||
128,212,71,12,118,12,12,71,71,112,223,19,82,55,116,112,49,244,223,19,
|
||||
208,238,235,66,223,253,82,22,250,73,95,113,8,82,49,111,102,207,132,188,
|
||||
252,69,8,121,162,4,47,52,127,4,4,26,26,8,8,46,186,86,169,95,
|
||||
66,8,4,95,192,87,45,236,101,251,253,8,70,222,236,223,223,237,244,23,
|
||||
54,244,82,82,237,118,11,244,71,11,99,71,118,12,12,12,12,12,12,58,
|
||||
78,78,246,123,108,12,212,12,53,63,13,83,63,53,12,92,53,226,13,13,
|
||||
53,53,53,226,75,63,12,71,92,19,19,92,92,92,19,12,12,12,92,12,
|
||||
71,71,71,71,71,12,71,71,71,8,99,99,58,99,99,58,58,99,58,58,
|
||||
11,218,71,71,11,218,99,99,58,218,12,19,92,92,92,99,78,58,92,101,
|
||||
75,251,53,12,123,48,92,108,101,63,92,12,241,241,92,92,108,92,108,128,
|
||||
212,246,58,12,12,12,49,12,12,118,12,49,19,237,116,22,49,118,244,82,
|
||||
112,17,231,70,223,82,20,82,93,45,133,7,46,8,8,49,50,224,168,207,
|
||||
142,60,127,46,8,26,8,8,8,8,8,8,121,26,47,192,166,169,7,113,
|
||||
66,113,7,156,36,217,28,23,251,251,20,26,111,222,30,8,49,22,112,62,
|
||||
242,112,101,112,30,49,244,11,112,11,99,71,12,12,118,12,12,12,71,246,
|
||||
246,78,212,92,108,92,218,53,38,13,0,0,63,101,20,63,101,75,83,83,
|
||||
63,101,229,79,126,92,58,78,12,19,92,92,19,92,12,71,71,118,71,71,
|
||||
218,12,71,71,71,71,71,218,99,8,218,99,218,58,58,218,99,99,58,99,
|
||||
58,58,99,99,218,99,218,99,58,58,99,92,92,92,19,58,78,78,99,108,
|
||||
0,34,38,123,123,48,123,92,53,108,92,12,241,241,241,123,92,19,19,123,
|
||||
241,212,246,99,12,71,12,71,12,71,118,223,82,118,245,100,112,49,30,118,
|
||||
223,237,238,111,113,223,19,20,49,93,144,184,44,113,8,253,19,210,173,141,
|
||||
168,57,196,142,60,52,122,182,113,113,122,3,60,159,130,86,43,122,26,223,
|
||||
47,106,95,76,89,68,244,20,251,20,8,210,238,72,223,19,30,112,23,62,
|
||||
244,223,20,118,112,112,244,118,11,99,99,218,71,218,71,12,12,71,58,58,
|
||||
78,246,246,92,63,53,53,101,83,0,83,83,53,63,63,53,20,83,0,0,
|
||||
53,53,79,0,226,78,58,78,12,108,92,19,92,71,58,58,99,71,71,123,
|
||||
71,218,218,71,218,218,99,218,99,8,99,99,218,218,99,99,99,99,58,99,
|
||||
99,58,99,11,71,99,99,58,58,58,58,71,92,92,19,78,78,58,78,218,
|
||||
53,63,101,123,123,48,48,123,92,19,92,92,241,241,241,241,92,92,92,12,
|
||||
241,212,78,78,123,118,12,12,12,12,112,92,49,223,30,247,65,49,23,112,
|
||||
82,23,72,231,14,26,82,19,101,49,17,146,102,154,147,69,8,82,49,23,
|
||||
249,104,158,39,206,169,86,130,202,142,202,114,39,117,76,88,4,66,66,113,
|
||||
7,95,234,175,68,22,101,20,251,8,4,107,100,112,101,112,30,23,112,62,
|
||||
49,101,49,244,118,112,112,118,11,78,99,99,99,58,71,12,92,99,246,78,
|
||||
246,58,218,108,108,53,63,229,0,83,34,13,53,53,101,38,13,0,0,13,
|
||||
53,101,63,101,99,78,58,78,71,19,19,92,71,58,99,58,11,218,218,71,
|
||||
99,99,99,99,218,58,99,218,218,8,71,218,99,99,218,58,99,99,99,99,
|
||||
99,58,99,58,99,218,11,58,58,99,58,58,71,92,92,58,78,78,78,78,
|
||||
118,19,53,123,48,128,128,48,123,12,92,92,48,128,212,48,241,12,12,92,
|
||||
241,128,246,246,246,71,12,12,12,71,71,118,49,223,49,208,116,22,49,23,
|
||||
11,223,223,72,225,235,113,82,82,101,49,65,68,164,201,7,162,26,8,121,
|
||||
66,223,23,216,14,36,177,152,154,152,80,255,98,66,66,223,66,4,32,152,
|
||||
152,163,228,222,112,251,20,20,8,113,219,222,22,82,23,22,62,112,54,244,
|
||||
101,82,112,112,23,118,112,11,11,78,58,58,246,99,71,71,99,58,246,212,
|
||||
58,58,123,108,108,53,20,13,101,19,34,13,53,53,53,0,75,38,0,34,
|
||||
63,53,53,71,58,78,58,78,11,92,92,71,58,58,58,58,99,218,11,99,
|
||||
11,58,218,218,99,99,218,99,99,8,99,71,99,99,99,99,99,218,58,99,
|
||||
218,58,99,99,99,58,58,78,58,99,58,58,58,71,12,78,78,78,78,78,
|
||||
58,12,19,12,48,218,246,218,48,12,92,92,241,48,58,212,48,241,12,92,
|
||||
48,241,212,58,212,212,123,118,12,71,118,118,12,223,49,118,55,239,244,223,
|
||||
112,112,82,118,236,225,14,4,26,82,101,19,112,93,153,21,224,174,88,162,
|
||||
26,26,121,82,66,66,66,66,66,66,26,82,66,26,113,127,32,44,51,87,
|
||||
248,222,236,223,20,20,20,8,70,111,17,237,223,49,237,30,62,54,30,118,
|
||||
253,49,112,118,23,118,118,11,99,58,58,58,212,99,71,218,246,78,78,58,
|
||||
58,58,108,108,63,38,13,92,58,12,13,251,53,63,251,79,12,71,34,34,
|
||||
251,53,19,58,78,78,78,58,58,71,71,58,99,99,58,99,58,11,58,99,
|
||||
99,99,99,218,218,99,218,218,99,8,71,99,218,218,218,99,218,99,99,99,
|
||||
99,71,58,99,99,99,99,58,58,99,58,58,78,58,99,78,58,78,58,78,
|
||||
78,78,99,218,128,58,58,78,128,48,12,92,123,241,78,246,58,48,241,218,
|
||||
12,128,212,212,58,58,212,218,71,12,71,12,118,12,223,49,11,243,55,244,
|
||||
49,112,244,223,49,236,17,111,4,121,82,82,8,223,244,29,153,61,148,234,
|
||||
152,32,147,52,4,4,113,26,113,26,98,98,147,255,7,193,24,163,217,238,
|
||||
110,112,101,20,20,253,8,70,107,222,22,223,223,244,244,244,244,242,112,82,
|
||||
223,118,23,23,49,118,71,11,58,58,58,246,246,58,99,78,58,212,212,78,
|
||||
58,99,53,53,38,83,19,58,246,19,34,79,251,34,34,71,58,71,79,13,
|
||||
83,63,218,58,58,99,58,78,58,99,78,58,99,99,99,58,58,99,99,58,
|
||||
218,11,218,99,11,218,11,99,71,8,71,218,218,11,71,99,218,99,99,99,
|
||||
99,218,11,99,58,58,58,58,11,58,99,218,58,58,78,78,78,78,58,58,
|
||||
78,78,78,78,58,78,78,78,58,58,48,123,48,48,128,78,246,78,128,241,
|
||||
241,241,128,212,58,58,58,58,218,12,118,71,71,112,118,223,49,11,245,55,
|
||||
30,49,112,244,223,19,30,93,107,111,4,26,101,101,8,101,112,242,93,203,
|
||||
6,170,21,74,51,51,104,24,234,76,24,104,76,124,232,56,225,18,30,223,
|
||||
20,20,20,20,8,66,235,231,236,112,223,118,30,112,112,54,244,112,82,49,
|
||||
112,23,118,118,12,11,99,99,246,58,58,58,78,58,246,246,78,78,212,78,
|
||||
58,12,53,229,34,40,78,78,58,38,0,13,13,79,71,58,58,71,13,0,
|
||||
38,71,58,99,58,99,58,99,78,58,58,99,99,99,71,99,58,99,218,99,
|
||||
71,99,218,99,99,71,218,99,71,8,71,71,71,123,218,218,11,218,218,218,
|
||||
218,99,218,218,99,99,99,99,58,99,99,99,99,99,58,78,78,58,58,99,
|
||||
99,78,78,246,78,212,78,78,58,78,128,48,48,241,48,246,78,58,246,128,
|
||||
128,128,128,128,212,78,212,78,58,218,71,71,12,12,118,118,49,49,112,208,
|
||||
41,22,49,112,244,23,19,49,22,93,219,14,4,8,82,101,20,101,223,49,
|
||||
30,65,18,29,17,203,228,230,56,96,91,225,225,236,242,112,49,82,20,20,
|
||||
20,20,82,113,210,107,29,22,118,223,112,30,244,244,62,112,23,82,223,49,
|
||||
118,118,49,49,118,71,99,246,58,58,212,246,246,78,212,58,246,246,78,58,
|
||||
218,53,209,126,40,78,78,78,218,0,34,34,79,71,78,99,58,71,251,229,
|
||||
12,58,99,99,99,58,58,58,58,99,99,99,99,218,99,58,99,99,99,218,
|
||||
99,218,11,218,218,11,218,71,71,8,71,123,71,71,218,123,71,99,11,99,
|
||||
218,11,99,71,218,99,58,99,99,58,218,218,99,99,58,58,58,58,99,58,
|
||||
58,99,58,246,246,246,78,58,58,58,78,58,48,48,241,78,246,78,78,58,
|
||||
58,241,241,241,212,58,246,78,246,58,218,71,71,71,118,118,118,49,49,112,
|
||||
103,243,236,112,49,244,112,49,223,118,65,93,107,14,98,113,82,8,101,253,
|
||||
101,20,101,82,82,223,118,118,49,49,49,82,82,101,101,20,20,253,253,121,
|
||||
26,70,235,110,29,103,118,223,223,11,244,244,54,242,244,49,19,223,49,118,
|
||||
118,49,12,71,11,99,212,246,78,78,78,78,212,246,78,58,78,212,78,58,
|
||||
12,38,213,71,78,58,58,78,40,83,79,20,99,58,99,58,99,12,92,71,
|
||||
78,58,99,99,99,99,99,99,99,99,218,218,99,218,218,99,218,218,11,218,
|
||||
11,218,218,71,218,218,71,123,71,8,71,71,12,71,71,218,218,218,71,71,
|
||||
218,218,218,218,71,218,218,99,99,218,99,99,99,99,99,99,58,99,58,99,
|
||||
99,99,99,58,78,78,78,78,58,99,58,58,58,128,48,128,78,78,58,78,
|
||||
212,212,212,241,128,58,246,246,58,246,58,218,218,118,71,71,118,12,118,49,
|
||||
23,237,245,55,208,23,118,23,112,223,223,118,244,236,18,110,14,210,4,66,
|
||||
121,8,82,20,82,101,101,251,20,20,20,101,8,20,8,8,26,26,210,235,
|
||||
109,110,65,30,118,223,49,244,244,244,244,242,65,30,223,82,49,118,118,49,
|
||||
92,49,118,71,11,78,246,78,58,246,212,246,78,78,246,78,246,78,212,218,
|
||||
53,92,99,78,58,58,58,246,53,0,53,99,99,58,99,58,99,71,218,58,
|
||||
99,58,99,218,58,99,58,78,99,99,11,99,71,99,99,218,99,99,218,71,
|
||||
123,218,71,218,12,71,71,71,71,8,71,71,71,71,71,118,71,71,218,99,
|
||||
71,71,71,123,71,71,218,99,99,218,218,71,11,218,99,99,58,99,58,99,
|
||||
99,99,218,58,58,78,78,78,58,99,99,58,58,58,58,128,246,78,58,58,
|
||||
58,58,246,128,128,58,212,246,78,78,78,58,58,218,71,71,11,118,118,49,
|
||||
12,23,11,103,243,72,237,23,23,112,23,223,19,223,112,22,109,18,29,111,
|
||||
111,210,210,70,4,26,26,26,26,26,26,4,4,70,98,235,2,18,29,65,
|
||||
54,23,223,49,23,244,244,112,244,54,22,244,118,82,223,223,118,92,49,49,
|
||||
223,71,11,99,99,78,246,58,246,78,58,212,78,78,58,58,246,78,58,218,
|
||||
71,78,58,58,99,58,58,99,19,77,58,58,58,218,99,58,58,58,58,58,
|
||||
218,99,11,218,58,99,218,58,218,218,71,218,218,71,99,71,218,71,71,218,
|
||||
71,123,71,71,71,71,71,71,12,8,118,118,71,71,118,71,71,71,118,12,
|
||||
71,123,71,71,71,71,71,71,218,99,99,99,218,218,71,218,99,99,58,99,
|
||||
99,218,99,218,58,58,246,78,78,99,99,99,99,58,246,78,58,246,58,58,
|
||||
58,58,58,78,78,58,58,58,246,212,99,58,58,58,218,99,71,118,11,118,
|
||||
49,49,49,23,11,208,55,245,22,112,23,23,23,23,49,49,49,223,112,30,
|
||||
22,236,18,18,18,29,18,18,18,18,107,236,29,236,236,22,30,23,223,223,
|
||||
223,118,118,112,244,112,244,242,242,30,23,223,82,223,49,49,49,223,49,12,
|
||||
71,71,99,58,246,212,58,58,58,78,78,78,58,58,58,58,78,212,246,78,
|
||||
78,58,58,11,99,58,78,78,99,58,58,99,218,99,58,99,58,58,58,218,
|
||||
99,71,218,99,218,58,99,218,218,71,218,123,71,99,71,218,71,71,71,12,
|
||||
71,71,12,12,12,12,12,12,12,8,12,12,12,12,12,12,118,118,71,71,
|
||||
71,218,71,123,71,71,71,71,123,71,218,11,218,71,218,123,218,99,218,58,
|
||||
99,99,11,218,71,99,99,58,78,58,99,99,71,99,58,78,246,246,246,58,
|
||||
58,218,58,99,78,78,246,78,78,246,58,58,58,212,58,58,99,71,71,118,
|
||||
71,118,118,23,49,112,112,103,72,72,65,244,112,23,118,118,70,223,223,223,
|
||||
223,49,118,23,118,112,112,244,112,112,23,23,23,49,49,223,223,49,23,118,
|
||||
244,244,112,62,244,109,22,30,49,223,223,82,49,223,49,223,223,118,118,71,
|
||||
99,99,99,78,78,246,58,58,78,78,58,58,58,99,78,246,78,78,78,78,
|
||||
99,99,99,58,99,58,78,78,58,99,99,11,218,99,99,58,58,11,99,218,
|
||||
218,218,71,99,218,218,11,218,123,71,218,71,71,218,71,71,123,71,118,12,
|
||||
71,12,12,12,12,12,12,12,12,8,12,12,12,12,12,12,71,71,71,118,
|
||||
71,118,71,71,118,12,71,71,71,71,99,218,123,71,218,71,218,71,99,99,
|
||||
99,218,218,71,218,218,99,58,58,58,58,218,99,218,218,99,58,99,78,58,
|
||||
58,99,99,99,58,58,78,246,246,78,78,78,58,99,58,58,99,58,99,71,
|
||||
11,71,12,23,118,118,118,23,112,30,103,208,208,65,242,112,118,23,23,118,
|
||||
118,118,49,112,23,112,11,112,112,112,118,49,49,49,49,112,23,23,112,244,
|
||||
244,22,22,22,242,112,49,223,223,66,223,49,223,49,223,49,12,71,71,99,
|
||||
99,58,212,212,246,58,78,78,58,58,99,99,99,58,78,78,78,78,58,58,
|
||||
99,99,99,58,58,58,58,58,99,218,71,218,99,99,218,58,99,99,71,218,
|
||||
71,71,218,99,71,99,123,71,118,118,123,71,71,123,71,71,12,12,118,12,
|
||||
12,12,12,12,12,12,71,12,71,8,12,92,12,92,71,12,118,118,12,12,
|
||||
118,71,71,12,71,71,118,12,12,71,118,218,71,71,71,12,71,12,218,218,
|
||||
99,99,218,218,71,71,71,218,99,99,99,99,71,71,218,71,99,58,58,58,
|
||||
58,58,99,11,99,99,99,58,246,78,246,78,58,99,99,99,58,58,99,99,
|
||||
99,11,71,112,112,118,118,92,118,23,118,112,30,237,103,65,65,22,30,54,
|
||||
244,244,23,112,244,112,244,112,244,23,244,23,112,62,244,244,30,242,22,242,
|
||||
22,30,23,49,49,19,82,223,223,49,49,49,223,49,12,11,11,218,99,58,
|
||||
58,78,78,78,246,78,78,99,99,58,99,58,58,78,78,78,58,99,218,218,
|
||||
71,99,99,99,58,99,58,99,71,123,71,218,99,99,218,99,218,71,12,71,
|
||||
71,218,71,71,218,71,71,71,71,71,12,71,71,71,118,12,12,12,71,71,
|
||||
12,12,12,12,118,12,12,92,12,8,12,12,71,12,12,12,12,12,71,12,
|
||||
118,12,12,12,118,12,71,12,12,71,71,71,71,123,71,12,12,71,71,218,
|
||||
218,218,11,71,123,71,71,218,71,99,99,58,99,99,71,218,218,99,218,58,
|
||||
58,58,58,99,218,71,99,218,58,58,58,246,212,58,58,99,99,58,99,58,
|
||||
58,58,58,218,71,71,112,71,118,118,49,23,118,118,49,112,112,30,237,22,
|
||||
22,22,103,22,22,22,22,22,30,242,22,22,22,103,22,22,30,112,112,23,
|
||||
49,49,49,82,223,66,49,49,49,49,223,12,118,71,218,99,99,58,99,58,
|
||||
78,246,78,246,58,58,99,99,218,218,99,99,99,58,58,58,99,218,71,218,
|
||||
99,99,58,58,58,99,218,123,71,71,218,218,99,99,99,123,71,71,71,92,
|
||||
71,71,218,218,71,12,12,12,118,71,12,118,71,71,71,12,12,12,12,12,
|
||||
12,12,118,118,12,12,12,12,12,8,92,92,92,12,12,12,12,12,12,12,
|
||||
92,12,12,12,71,12,118,12,12,12,12,12,71,71,71,12,12,71,118,71,
|
||||
71,123,71,71,71,118,71,71,71,123,71,218,218,99,218,71,12,71,71,218,
|
||||
218,58,58,99,58,71,71,218,218,218,99,58,58,58,58,58,99,99,99,218,
|
||||
218,99,58,58,99,99,99,11,11,11,23,112,118,112,49,118,118,118,23,118,
|
||||
49,118,23,112,112,112,112,244,112,112,118,112,118,49,49,223,49,223,223,49,
|
||||
223,223,49,49,223,49,223,223,118,118,71,11,218,99,218,99,218,78,58,58,
|
||||
58,58,58,218,218,218,218,218,58,99,58,58,58,58,218,99,71,71,123,71,
|
||||
218,99,58,99,99,71,71,12,12,71,71,71,218,218,218,71,118,71,71,12,
|
||||
123,71,12,71,71,12,12,12,118,71,12,12,12,118,118,12,71,118,12,118,
|
||||
12,12,12,12,12,92,12,12,92,8,92,92,12,12,92,12,92,12,12,12,
|
||||
12,12,118,12,12,12,12,12,12,12,118,12,12,71,118,71,12,12,71,118,
|
||||
71,71,71,123,218,118,12,71,71,71,71,99,99,218,218,71,71,71,71,71,
|
||||
99,218,99,58,99,218,218,71,71,71,218,71,58,99,58,58,99,58,218,99,
|
||||
99,218,99,99,58,58,58,99,58,99,218,11,71,112,11,112,118,23,118,23,
|
||||
49,118,118,92,49,92,49,92,49,92,49,223,223,49,223,49,49,49,49,82,
|
||||
49,49,49,223,118,118,71,71,11,71,99,218,218,99,58,58,58,58,58,58,
|
||||
58,218,218,218,71,218,218,99,99,99,99,58,218,218,71,123,71,71,218,11,
|
||||
99,99,218,218,71,71,12,71,12,218,218,218,71,218,118,12,71,118,71,71,
|
||||
71,71,71,71,118,71,12,12,12,71,12,12,12,12,12,12,12,49,12,12,
|
||||
12,92,12,49,12,92,12,12,92,8,92,92,92,92,92,12,92,12,12,92,
|
||||
12,92,12,92,12,71,71,12,12,12,12,71,12,118,71,118,71,118,12,12,
|
||||
12,12,71,71,218,71,71,118,118,12,12,118,71,218,71,218,123,12,12,12,
|
||||
12,71,71,99,99,99,218,71,71,71,71,123,71,218,218,58,99,99,58,218,
|
||||
99,218,218,11,99,218,99,218,218,58,58,58,99,218,71,11,71,71,118,11,
|
||||
112,71,112,118,112,12,118,118,118,118,118,118,118,118,118,118,223,223,49,49,
|
||||
118,118,118,71,71,71,218,71,218,71,99,99,99,218,58,58,58,218,218,218,
|
||||
218,71,71,218,123,71,218,99,58,218,218,99,71,118,12,71,71,71,218,218,
|
||||
218,99,71,118,12,12,12,71,71,123,71,71,71,12,118,12,92,71,118,71,
|
||||
12,12,71,12,12,92,12,12,12,118,12,12,12,12,12,92,12,12,12,92,
|
||||
71,92,12,92,92,92,92,92,12,8,92,92,92,92,92,92,92,92,92,12,
|
||||
92,12,92,12,92,92,12,118,92,12,12,92,92,12,12,12,12,12,12,12,
|
||||
12,12,71,118,12,118,71,71,12,12,12,12,118,71,218,71,218,71,118,12,
|
||||
12,71,12,71,218,71,99,218,123,71,71,12,71,118,71,71,99,218,218,99,
|
||||
218,99,218,218,218,71,123,71,218,218,218,218,99,99,99,58,99,99,99,218,
|
||||
99,71,71,71,11,71,11,11,11,11,11,11,11,11,71,118,12,118,218,218,
|
||||
71,218,71,71,218,71,99,71,99,99,99,58,218,99,218,218,71,71,71,71,
|
||||
71,71,123,71,11,99,99,99,218,218,71,71,12,12,12,71,123,218,71,218,
|
||||
71,118,71,12,118,12,12,71,71,218,118,12,12,12,92,12,71,118,71,71,
|
||||
12,71,92,12,92,12,12,12,118,12,12,92,92,12,92,12,92,92,92,92,
|
||||
92,92,92,92,12,92,92,92,92,8,92,92,92,12,92,92,92,92,92,92,
|
||||
92,92,92,12,92,92,12,12,92,92,92,12,92,92,12,12,118,12,12,92,
|
||||
92,12,12,12,71,71,71,118,12,118,12,12,12,71,12,71,71,71,71,12,
|
||||
12,12,118,12,12,118,218,71,71,71,12,71,71,71,12,12,71,71,71,11,
|
||||
218,99,218,218,218,218,71,71,71,71,71,71,71,71,218,218,218,218,99,218,
|
||||
218,218,99,218,99,218,218,218,218,218,218,218,218,99,218,11,218,71,71,71,
|
||||
71,123,71,123,71,218,99,218,218,11,218,99,71,71,71,71,71,71,71,92,
|
||||
71,71,71,123,71,218,71,71,71,118,12,12,12,12,71,71,71,218,71,71,
|
||||
12,12,12,12,12,12,12,71,71,71,12,12,12,12,12,12,12,12,118,12,
|
||||
12,92,92,92,12,92,12,71,12,92,92,12,92,92,92,92,92,12,92,92,
|
||||
92,92,92,92,92,92,92,92,92,8,92,19,92,92,92,92,92,223,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,12,118,12,12,
|
||||
12,92,92,12,92,12,12,12,71,12,49,12,92,92,12,12,71,12,12,12,
|
||||
12,71,12,12,12,12,71,12,71,71,218,218,71,118,12,12,12,71,12,12,
|
||||
71,123,71,71,99,71,71,123,71,123,71,123,71,71,71,71,71,71,71,71,
|
||||
71,218,218,218,71,71,218,71,218,71,218,71,71,123,71,123,71,123,71,123,
|
||||
218,71,218,218,218,218,71,71,71,71,71,12,12,12,12,12,12,12,71,71,
|
||||
71,123,218,218,71,71,12,12,12,71,12,12,12,12,71,71,71,12,118,12,
|
||||
12,92,12,12,12,12,12,12,71,12,92,12,92,12,12,118,12,12,12,92,
|
||||
92,92,92,92,92,12,92,92,12,92,92,92,92,19,12,92,92,92,92,92,
|
||||
12,92,92,92,92,92,92,92,92,8,19,108,19,108,12,19,92,92,92,92,
|
||||
92,92,92,92,92,19,92,92,92,92,92,92,92,92,92,92,92,92,12,92,
|
||||
92,92,92,92,92,92,12,12,12,12,71,12,92,92,92,92,12,92,118,12,
|
||||
12,12,12,12,92,12,12,12,71,12,71,71,71,12,12,12,12,12,12,92,
|
||||
112,118,71,12,71,71,71,218,71,71,71,71,71,71,12,12,12,12,12,12,
|
||||
12,118,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,
|
||||
71,71,71,71,71,71,71,71,118,71,12,71,12,12,12,12,12,71,71,123,
|
||||
71,71,71,92,12,12,12,12,92,92,71,12,12,12,12,71,12,12,92,12,
|
||||
92,92,12,118,12,12,118,12,12,92,92,92,92,12,12,12,12,92,92,92,
|
||||
92,12,92,12,92,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,92,12,19,19,108,92,8,92,92,19,92,108,92,19,92,92,92,
|
||||
92,108,92,92,92,12,92,92,12,92,92,92,92,92,92,92,92,92,92,12,
|
||||
12,92,92,92,92,223,12,92,12,12,12,12,12,92,92,12,92,12,12,12,
|
||||
12,12,12,12,49,12,92,92,92,92,12,12,71,12,12,12,12,12,12,12,
|
||||
92,92,118,92,12,12,118,12,12,12,12,12,12,71,12,12,12,12,12,12,
|
||||
12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
|
||||
12,12,118,118,12,118,12,12,12,12,12,12,12,12,12,12,12,12,71,12,
|
||||
12,12,71,92,12,92,92,49,12,12,12,12,118,12,12,118,92,12,92,92,
|
||||
12,12,12,12,123,12,92,92,92,92,92,92,12,92,12,92,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,12,92,92,92,19,92,92,108,
|
||||
92,19,92,108,108,92,108,92,108,8,19,108,19,92,19,108,108,108,92,19,
|
||||
92,92,19,92,108,108,92,108,108,92,92,92,92,92,92,19,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,92,92,92,92,
|
||||
92,12,12,12,12,12,12,92,92,92,92,92,92,12,12,12,12,12,118,12,
|
||||
12,12,12,92,12,12,12,12,71,12,12,12,12,71,71,12,12,71,118,118,
|
||||
12,12,12,12,12,118,12,12,12,92,12,12,12,12,12,71,12,12,118,12,
|
||||
12,71,12,12,12,12,12,92,118,118,12,12,12,12,71,12,12,12,49,12,
|
||||
92,12,92,92,92,12,92,12,12,12,12,12,92,92,92,92,92,92,92,92,
|
||||
12,12,71,92,92,92,12,92,223,92,92,92,12,92,92,92,92,92,12,19,
|
||||
92,92,92,92,92,92,108,92,108,19,92,108,108,108,92,92,19,108,92,108,
|
||||
19,92,19,92,108,92,108,19,19,8,19,108,19,108,108,19,92,19,108,19,
|
||||
19,108,108,19,19,92,108,92,92,108,19,12,108,108,92,19,108,108,92,19,
|
||||
92,92,92,92,92,92,108,19,92,92,92,92,12,92,92,92,92,92,92,92,
|
||||
92,92,92,12,12,118,123,92,12,12,92,92,92,92,92,92,12,12,12,12,
|
||||
12,92,12,12,92,12,92,92,92,92,92,92,12,12,12,12,12,12,12,71,
|
||||
71,12,12,12,12,12,12,12,71,12,12,12,12,12,12,92,12,12,92,12,
|
||||
92,12,12,49,12,92,12,12,12,12,12,71,12,12,12,12,92,12,92,12,
|
||||
92,92,92,92,92,12,12,12,12,92,12,12,92,92,92,92,92,92,12,12,
|
||||
12,92,92,92,92,19,108,92,92,92,92,92,92,92,92,19,92,108,108,92,
|
||||
92,92,92,19,108,92,19,108,92,108,108,92,19,92,108,19,108,92,108,92,
|
||||
19,108,108,92,108,108,19,92,108,8,19,19,19,19,19,108,19,19,108,92,
|
||||
19,19,108,92,19,19,108,19,108,92,108,19,92,19,92,92,92,19,92,92,
|
||||
92,92,92,92,92,92,19,108,92,19,19,92,92,92,92,92,92,92,223,92,
|
||||
223,92,92,92,92,92,92,92,92,92,92,92,92,223,92,92,92,12,92,12,
|
||||
12,12,12,12,92,12,12,92,12,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,12,92,49,92,12,92,92,12,12,92,12,92,12,92,12,12,92,12,
|
||||
12,12,12,12,12,12,12,92,92,92,12,92,92,92,92,92,92,92,92,92,
|
||||
92,92,12,12,12,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,12,19,92,92,108,12,92,92,92,12,19,92,92,108,92,19,19,92,
|
||||
92,92,92,92,108,19,92,19,19,92,92,108,108,92,108,92,19,19,19,108,
|
||||
19,19,19,19,19,19,108,19,19,8,19,53,19,53,19,53,19,53,19,108,
|
||||
19,108,19,108,108,108,19,108,19,108,19,108,108,108,108,19,108,19,108,19,
|
||||
19,92,108,19,19,12,108,92,108,92,108,19,108,92,92,92,92,92,92,19,
|
||||
92,19,108,92,19,92,92,92,92,92,92,92,92,92,92,92,108,108,19,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,92,12,92,92,92,12,92,19,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,108,19,92,92,223,92,92,92,92,92,92,
|
||||
19,108,108,108,108,19,92,92,92,92,108,108,108,108,108,92,108,92,108,19,
|
||||
92,19,108,108,19,108,108,108,108,108,19,19,19,19,19,19,108,108,53,19,
|
||||
108,19,108,53,19,53,19,53,19,8,19,19,19,19,19,19,19,19,19,19,
|
||||
19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,108,19,108,19,
|
||||
19,19,19,19,108,19,108,19,108,19,108,19,19,19,19,108,19,92,92,92,
|
||||
19,19,108,19,108,19,19,92,92,92,92,92,92,92,92,19,19,108,19,108,
|
||||
19,92,19,92,92,92,92,92,92,92,92,92,92,92,92,19,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,19,19,19,92,19,19,92,19,19,108,92,92,92,19,92,92,92,
|
||||
92,92,92,92,92,19,19,19,19,108,19,108,92,92,92,92,92,92,19,19,
|
||||
92,19,223,19,108,19,108,92,19,19,19,19,19,19,108,19,108,19,108,19,
|
||||
19,19,19,19,19,19,19,19,19,108,19,108,19,108,19,19,19,19,19,19,
|
||||
19,19,19,19,19,19,19,19,19,8};
|
|
@ -5,18 +5,12 @@ SUBDIRS = \
|
|||
libgck \
|
||||
MapObject \
|
||||
AlienMap \
|
||||
Anamorphose \
|
||||
CentralReflection \
|
||||
Curtain \
|
||||
Encrypt_Decrypt \
|
||||
DigitalSignature \
|
||||
dbbrowser \
|
||||
fuse \
|
||||
gflare \
|
||||
@GIMPTCL@ \
|
||||
script-fu \
|
||||
struc \
|
||||
twist \
|
||||
@TIFF@ \
|
||||
@JPEG@ \
|
||||
@PNG@ \
|
||||
|
@ -72,7 +66,6 @@ SUBDIRS = \
|
|||
grid \
|
||||
gz \
|
||||
header \
|
||||
holes \
|
||||
hot \
|
||||
hrz \
|
||||
ifscompose \
|
||||
|
@ -116,7 +109,6 @@ SUBDIRS = \
|
|||
sobel \
|
||||
sparkle \
|
||||
spread \
|
||||
stegano \
|
||||
stereogram \
|
||||
sunras \
|
||||
tga \
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
Makefile.in
|
||||
Makefile
|
||||
.deps
|
||||
_libs
|
||||
.libs
|
||||
aa
|
|
@ -1,38 +0,0 @@
|
|||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
pluginlibdir = $(gimpplugindir)/plug-ins
|
||||
|
||||
pluginlib_PROGRAMS = aa
|
||||
|
||||
aa_SOURCES = aa.c
|
||||
|
||||
INCLUDES = \
|
||||
$(X_CFLAGS) \
|
||||
-I$(top_srcdir) \
|
||||
-I$(includedir)
|
||||
|
||||
LDADD = \
|
||||
$(top_builddir)/libgimp/libgimpui.la \
|
||||
$(top_builddir)/libgimp/libgimp.la \
|
||||
$(X_LIBS) \
|
||||
-laa \
|
||||
-lc
|
||||
|
||||
DEPS = \
|
||||
$(top_builddir)/libgimp/libgimpui.la \
|
||||
$(top_builddir)/libgimp/libgimp.la
|
||||
|
||||
#STD#_DEPENDENCIES = $(DEPS)
|
||||
|
||||
.PHONY: files
|
||||
|
||||
files:
|
||||
@files=`ls $(DISTFILES) 2> /dev/null`; for p in $$files; do \
|
||||
echo $$p; \
|
||||
done
|
||||
@for subdir in $(SUBDIRS); do \
|
||||
files=`cd $$subdir; $(MAKE) files | grep -v "make\[[1-9]\]"`; \
|
||||
for file in $$files; do \
|
||||
echo $$subdir/$$file; \
|
||||
done; \
|
||||
done
|
|
@ -1,10 +0,0 @@
|
|||
This plugin isnt compliled by default with GIMP at the moment due to
|
||||
the moving target status of the lib it is based on. But we included it for
|
||||
now since it is easier than removing it. If you want to compile it, you
|
||||
probabaly need to get the latest version of aa-lib from:
|
||||
|
||||
So dont send us or Tim newsome bug reports about this yet.
|
||||
|
||||
ftp://ftp.ta.jcu.cz/pub/aa
|
||||
|
||||
NOTE: You need aalib version 1.1.6 for this plugin.
|
367
plug-ins/aa/aa.c
367
plug-ins/aa/aa.c
|
@ -1,367 +0,0 @@
|
|||
/**
|
||||
* aa.c version 1.0
|
||||
* A plugin that uses libaa (ftp://ftp.ta.jcu.cz/pub/aa) to * save images as
|
||||
* ASCII.
|
||||
* NOTE: This plugin *requires* aalib 1.1.5 or later. Earlier versions will
|
||||
* not work.
|
||||
* Code copied from all over the GIMP source.
|
||||
* Tim Newsome <nuisance@cmu.edu>
|
||||
*/
|
||||
|
||||
#include <aalib.h>
|
||||
#include <string.h>
|
||||
#include <libgimp/gimp.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/*
|
||||
* Declare some local functions.
|
||||
*/
|
||||
static void query(void);
|
||||
static void run(char *name, int nparams, GParam * param, int *nreturn_vals,
|
||||
GParam ** return_vals);
|
||||
static gint aa_savable(gint32 drawable_ID);
|
||||
static gint save_aa(int output_type, char *filename, gint32 image,
|
||||
gint32 drawable);
|
||||
static gint gimp2aa(gint32 image, gint32 drawable_ID, aa_context * context);
|
||||
static gint type_dialog(int selected);
|
||||
static void type_dialog_close_callback(GtkWidget *widget, gpointer data);
|
||||
static void type_dialog_ok_callback (GtkWidget *widget, gpointer data);
|
||||
static void type_dialog_toggle_update (GtkWidget *widget, gpointer data);
|
||||
static void type_dialog_cancel_callback (GtkWidget *widget, gpointer data);
|
||||
|
||||
/*
|
||||
* Some global variables.
|
||||
*/
|
||||
|
||||
GPlugInInfo PLUG_IN_INFO =
|
||||
{
|
||||
NULL, /* init_proc */
|
||||
NULL, /* quit_proc */
|
||||
query, /* query_proc */
|
||||
run, /* run_proc */
|
||||
};
|
||||
|
||||
/**
|
||||
* Type the user selected. (Global for easier UI coding.
|
||||
*/
|
||||
static int selected_type = 0;
|
||||
|
||||
|
||||
MAIN()
|
||||
/**
|
||||
* Called by the GIMP to figure out what this plugin does.
|
||||
*/
|
||||
static void query()
|
||||
{
|
||||
static GParamDef save_args[] =
|
||||
{
|
||||
{PARAM_INT32, "run_mode", "Interactive, non-interactive"},
|
||||
{PARAM_IMAGE, "image", "Input image"},
|
||||
{PARAM_DRAWABLE, "drawable", "Drawable to save"},
|
||||
{PARAM_STRING, "filename", "The name of the file to save the image in"},
|
||||
{PARAM_STRING, "raw_filename", "The name entered"},
|
||||
{PARAM_STRING, "file_type", "File type to use"}
|
||||
};
|
||||
static int nsave_args = sizeof(save_args) / sizeof(save_args[0]);
|
||||
|
||||
gimp_install_procedure("file_aa_save",
|
||||
"Saves files in various text formats",
|
||||
"Saves files in various text formats",
|
||||
"Tim Newsome <nuisance@cmu.edu>",
|
||||
"Tim Newsome <nuisance@cmu.edu>",
|
||||
"1997",
|
||||
"<Save>/AA",
|
||||
"GRAY*", /* support grayscales */
|
||||
PROC_PLUG_IN,
|
||||
nsave_args, 0,
|
||||
save_args, NULL);
|
||||
|
||||
gimp_register_save_handler("file_aa_save", "ansi,txt,text,html", "");
|
||||
}
|
||||
|
||||
/**
|
||||
* Searches aa_formats defined by aalib to find the index of the type
|
||||
* specified by string.
|
||||
* -1 means it wasn't found.
|
||||
*/
|
||||
static int get_type_from_string(char *string)
|
||||
{
|
||||
int type = 0;
|
||||
aa_format **p = aa_formats;
|
||||
|
||||
while (*p && strcmp((*p)->formatname, string)) {
|
||||
p++;
|
||||
type++;
|
||||
}
|
||||
|
||||
if (*p == NULL)
|
||||
return -1;
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by the GIMP to run the actual plugin.
|
||||
*/
|
||||
static void run(char *name, int nparams, GParam * param, int *nreturn_vals,
|
||||
GParam ** return_vals)
|
||||
{
|
||||
static GParam values[2];
|
||||
GStatusType status = STATUS_SUCCESS;
|
||||
GRunModeType run_mode;
|
||||
int output_type = 0;
|
||||
static int last_type = 0;
|
||||
|
||||
/* Set us up to return a status. */
|
||||
*nreturn_vals = 1;
|
||||
*return_vals = values;
|
||||
values[0].type = PARAM_STATUS;
|
||||
values[0].data.d_status = STATUS_CALLING_ERROR;
|
||||
|
||||
if (!aa_savable(param[2].data.d_int32)) {
|
||||
values[0].data.d_status = STATUS_CALLING_ERROR;
|
||||
return;
|
||||
}
|
||||
run_mode = param[0].data.d_int32;
|
||||
|
||||
switch (run_mode) {
|
||||
case RUN_INTERACTIVE:
|
||||
gimp_get_data("file_aa_save", &last_type);
|
||||
output_type = type_dialog(last_type);
|
||||
break;
|
||||
|
||||
case RUN_NONINTERACTIVE:
|
||||
/* Make sure all the arguments are there! */
|
||||
if (nparams != 6)
|
||||
status = STATUS_CALLING_ERROR;
|
||||
else
|
||||
output_type = get_type_from_string(param[5].data.d_string);
|
||||
break;
|
||||
|
||||
case RUN_WITH_LAST_VALS:
|
||||
gimp_get_data("file_aa_save", &last_type);
|
||||
output_type = last_type;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (output_type < 0) {
|
||||
status = STATUS_CALLING_ERROR;
|
||||
return;
|
||||
}
|
||||
|
||||
if (save_aa(output_type, param[3].data.d_string, param[1].data.d_int32,
|
||||
param[2].data.d_int32))
|
||||
values[0].data.d_status = STATUS_EXECUTION_ERROR;
|
||||
else
|
||||
values[0].data.d_status = STATUS_SUCCESS;
|
||||
|
||||
last_type = output_type;
|
||||
gimp_set_data("file_aa_save", &last_type, sizeof(last_type));
|
||||
}
|
||||
|
||||
/**
|
||||
* The actual save function. What it's all about.
|
||||
* The image type has to be GRAY.
|
||||
*/
|
||||
static gint save_aa(int output_type, char *filename, gint32 image,
|
||||
gint32 drawable_ID)
|
||||
{
|
||||
aa_savedata savedata =
|
||||
{NULL, NULL};
|
||||
aa_context *context = NULL;
|
||||
aa_format format;
|
||||
GDrawable *drawable = NULL;
|
||||
|
||||
/*fprintf(stderr, "save %s\n", filename); */
|
||||
|
||||
drawable = gimp_drawable_get(drawable_ID);
|
||||
memcpy(&format, aa_formats[output_type], sizeof(format));
|
||||
format.width = drawable->width / 2;
|
||||
format.height = drawable->height / 2;
|
||||
|
||||
/*fprintf(stderr, "save_aa %i x %i\n", format.width, format.height); */
|
||||
|
||||
/* Get a libaa context which will save its output to filename. */
|
||||
savedata.name = filename;
|
||||
savedata.format = &format;
|
||||
|
||||
context = aa_init(&save_d, &aa_defparams, &savedata);
|
||||
if (context == NULL)
|
||||
return 1;
|
||||
|
||||
gimp2aa(image, drawable_ID, context);
|
||||
aa_flush(context);
|
||||
aa_close(context);
|
||||
|
||||
/*fprintf(stderr, "Success!\n"); */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static gint gimp2aa(gint32 image, gint32 drawable_ID, aa_context * context)
|
||||
{
|
||||
int width, height, x, y;
|
||||
guchar *buffer;
|
||||
GDrawable *drawable = NULL;
|
||||
GPixelRgn pixel_rgn;
|
||||
aa_renderparams *renderparams = NULL;
|
||||
int bpp;
|
||||
|
||||
width = aa_imgwidth(context);
|
||||
height = aa_imgheight(context);
|
||||
/*fprintf(stderr, "gimp2aa %i x %i\n", width, height); */
|
||||
|
||||
drawable = gimp_drawable_get(drawable_ID);
|
||||
|
||||
bpp = drawable->bpp;
|
||||
buffer = g_new(guchar, width * bpp);
|
||||
if (buffer == NULL)
|
||||
return 1;
|
||||
|
||||
gimp_pixel_rgn_init(&pixel_rgn, drawable, 0, 0, drawable->width,
|
||||
drawable->height, FALSE, FALSE);
|
||||
|
||||
for (y = 0; y < height; y++) {
|
||||
gimp_pixel_rgn_get_row(&pixel_rgn, buffer, 0, y, width);
|
||||
for (x = 0; x < width; x++) {
|
||||
/* Just copy one byte. If it's indexed that's all we need. Otherwise
|
||||
* it'll be the most significant one. */
|
||||
aa_putpixel(context, x, y, buffer[x * bpp]);
|
||||
}
|
||||
}
|
||||
|
||||
renderparams = aa_getrenderparams();
|
||||
renderparams->dither = AA_FLOYD_S;
|
||||
aa_render(context, renderparams, 0, 0, aa_scrwidth(context),
|
||||
aa_scrheight(context));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static gint aa_savable(gint32 drawable_ID)
|
||||
{
|
||||
GDrawableType drawable_type;
|
||||
|
||||
drawable_type = gimp_drawable_type(drawable_ID);
|
||||
|
||||
if (drawable_type != GRAY_IMAGE && drawable_type != GRAYA_IMAGE)
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* User Interface dialog thingie.
|
||||
*/
|
||||
|
||||
static gint type_dialog(int selected) {
|
||||
GtkWidget *dlg;
|
||||
GtkWidget *button;
|
||||
GtkWidget *toggle;
|
||||
GtkWidget *frame;
|
||||
GtkWidget *toggle_vbox;
|
||||
GSList *group;
|
||||
gchar **argv;
|
||||
gint argc;
|
||||
|
||||
argc = 1;
|
||||
argv = g_new(gchar *, 1);
|
||||
argv[0] = g_strdup("save");
|
||||
|
||||
gtk_init(&argc, &argv);
|
||||
gtk_rc_parse(gimp_gtkrc());
|
||||
|
||||
/* Create the actual window. */
|
||||
dlg = gtk_dialog_new();
|
||||
gtk_window_set_title(GTK_WINDOW(dlg), "Save as text");
|
||||
gtk_window_position(GTK_WINDOW(dlg), GTK_WIN_POS_MOUSE);
|
||||
gtk_signal_connect(GTK_OBJECT(dlg), "destroy",
|
||||
(GtkSignalFunc) type_dialog_close_callback, NULL);
|
||||
|
||||
/* Action area */
|
||||
button = gtk_button_new_with_label("OK");
|
||||
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect(GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc) type_dialog_ok_callback, dlg);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), button,
|
||||
TRUE, TRUE, 0);
|
||||
gtk_widget_grab_default(button);
|
||||
gtk_widget_show(button);
|
||||
|
||||
button = gtk_button_new_with_label("Cancel");
|
||||
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc) type_dialog_cancel_callback,
|
||||
GTK_OBJECT(dlg));
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), button,
|
||||
TRUE, TRUE, 0);
|
||||
gtk_widget_show(button);
|
||||
|
||||
/* file save type */
|
||||
frame = gtk_frame_new("Data Formatting");
|
||||
gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
|
||||
gtk_container_border_width(GTK_CONTAINER(frame), 10);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->vbox), frame, FALSE, TRUE, 0);
|
||||
toggle_vbox = gtk_vbox_new(FALSE, 5);
|
||||
gtk_container_border_width(GTK_CONTAINER(toggle_vbox), 5);
|
||||
gtk_container_add(GTK_CONTAINER(frame), toggle_vbox);
|
||||
|
||||
group = NULL;
|
||||
{
|
||||
aa_format **p = aa_formats;
|
||||
int current = 0;
|
||||
|
||||
while (*p != NULL) {
|
||||
toggle = gtk_radio_button_new_with_label(group, (*p)->formatname);
|
||||
group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle));
|
||||
gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0);
|
||||
gtk_signal_connect(GTK_OBJECT(toggle), "toggled",
|
||||
(GtkSignalFunc) type_dialog_toggle_update,
|
||||
(*p)->formatname);
|
||||
if (current == selected)
|
||||
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), 1);
|
||||
else
|
||||
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), 0);
|
||||
|
||||
gtk_widget_show(toggle);
|
||||
p++;
|
||||
current++;
|
||||
}
|
||||
}
|
||||
|
||||
gtk_widget_show(toggle_vbox);
|
||||
gtk_widget_show(frame);
|
||||
|
||||
gtk_widget_show(dlg);
|
||||
|
||||
gtk_main();
|
||||
gdk_flush();
|
||||
|
||||
return selected_type;
|
||||
}
|
||||
|
||||
/*
|
||||
* Callbacks for the dialog.
|
||||
*/
|
||||
|
||||
static void type_dialog_close_callback(GtkWidget *widget, gpointer data) {
|
||||
gtk_main_quit();
|
||||
}
|
||||
|
||||
static void type_dialog_ok_callback (GtkWidget *widget, gpointer data) {
|
||||
gtk_widget_destroy (GTK_WIDGET (data));
|
||||
}
|
||||
|
||||
static void type_dialog_cancel_callback (GtkWidget *widget, gpointer data) {
|
||||
selected_type = -1;
|
||||
gtk_widget_destroy (GTK_WIDGET (data));
|
||||
}
|
||||
|
||||
static void type_dialog_toggle_update (GtkWidget *widget, gpointer data) {
|
||||
selected_type = get_type_from_string((char *)data);
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
This plugin isnt compliled by default with GIMP at the moment due to
|
||||
the moving target status of the lib it is based on. But we included it for
|
||||
now since it is easier than removing it. If you want to compile it, you
|
||||
probabaly need to get the latest version of aa-lib from:
|
||||
|
||||
So dont send us or Tim newsome bug reports about this yet.
|
||||
|
||||
ftp://ftp.ta.jcu.cz/pub/aa
|
||||
|
||||
|
||||
|
|
@ -1,367 +0,0 @@
|
|||
/**
|
||||
* aa.c version 1.0
|
||||
* A plugin that uses libaa (ftp://ftp.ta.jcu.cz/pub/aa) to * save images as
|
||||
* ASCII.
|
||||
* NOTE: This plugin *requires* aalib 1.1.5 or later. Earlier versions will
|
||||
* not work.
|
||||
* Code copied from all over the GIMP source.
|
||||
* Tim Newsome <nuisance@cmu.edu>
|
||||
*/
|
||||
|
||||
#include <aalib.h>
|
||||
#include <string.h>
|
||||
#include <libgimp/gimp.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/*
|
||||
* Declare some local functions.
|
||||
*/
|
||||
static void query(void);
|
||||
static void run(char *name, int nparams, GParam * param, int *nreturn_vals,
|
||||
GParam ** return_vals);
|
||||
static gint aa_savable(gint32 drawable_ID);
|
||||
static gint save_aa(int output_type, char *filename, gint32 image,
|
||||
gint32 drawable);
|
||||
static gint gimp2aa(gint32 image, gint32 drawable_ID, aa_context * context);
|
||||
static gint type_dialog(int selected);
|
||||
static void type_dialog_close_callback(GtkWidget *widget, gpointer data);
|
||||
static void type_dialog_ok_callback (GtkWidget *widget, gpointer data);
|
||||
static void type_dialog_toggle_update (GtkWidget *widget, gpointer data);
|
||||
static void type_dialog_cancel_callback (GtkWidget *widget, gpointer data);
|
||||
|
||||
/*
|
||||
* Some global variables.
|
||||
*/
|
||||
|
||||
GPlugInInfo PLUG_IN_INFO =
|
||||
{
|
||||
NULL, /* init_proc */
|
||||
NULL, /* quit_proc */
|
||||
query, /* query_proc */
|
||||
run, /* run_proc */
|
||||
};
|
||||
|
||||
/**
|
||||
* Type the user selected. (Global for easier UI coding.
|
||||
*/
|
||||
static int selected_type = 0;
|
||||
|
||||
|
||||
MAIN()
|
||||
/**
|
||||
* Called by the GIMP to figure out what this plugin does.
|
||||
*/
|
||||
static void query()
|
||||
{
|
||||
static GParamDef save_args[] =
|
||||
{
|
||||
{PARAM_INT32, "run_mode", "Interactive, non-interactive"},
|
||||
{PARAM_IMAGE, "image", "Input image"},
|
||||
{PARAM_DRAWABLE, "drawable", "Drawable to save"},
|
||||
{PARAM_STRING, "filename", "The name of the file to save the image in"},
|
||||
{PARAM_STRING, "raw_filename", "The name entered"},
|
||||
{PARAM_STRING, "file_type", "File type to use"}
|
||||
};
|
||||
static int nsave_args = sizeof(save_args) / sizeof(save_args[0]);
|
||||
|
||||
gimp_install_procedure("file_aa_save",
|
||||
"Saves files in various text formats",
|
||||
"Saves files in various text formats",
|
||||
"Tim Newsome <nuisance@cmu.edu>",
|
||||
"Tim Newsome <nuisance@cmu.edu>",
|
||||
"1997",
|
||||
"<Save>/AA",
|
||||
"GRAY*", /* support grayscales */
|
||||
PROC_PLUG_IN,
|
||||
nsave_args, 0,
|
||||
save_args, NULL);
|
||||
|
||||
gimp_register_save_handler("file_aa_save", "ansi,txt,text,html", "");
|
||||
}
|
||||
|
||||
/**
|
||||
* Searches aa_formats defined by aalib to find the index of the type
|
||||
* specified by string.
|
||||
* -1 means it wasn't found.
|
||||
*/
|
||||
static int get_type_from_string(char *string)
|
||||
{
|
||||
int type = 0;
|
||||
aa_format **p = aa_formats;
|
||||
|
||||
while (*p && strcmp((*p)->formatname, string)) {
|
||||
p++;
|
||||
type++;
|
||||
}
|
||||
|
||||
if (*p == NULL)
|
||||
return -1;
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by the GIMP to run the actual plugin.
|
||||
*/
|
||||
static void run(char *name, int nparams, GParam * param, int *nreturn_vals,
|
||||
GParam ** return_vals)
|
||||
{
|
||||
static GParam values[2];
|
||||
GStatusType status = STATUS_SUCCESS;
|
||||
GRunModeType run_mode;
|
||||
int output_type = 0;
|
||||
static int last_type = 0;
|
||||
|
||||
/* Set us up to return a status. */
|
||||
*nreturn_vals = 1;
|
||||
*return_vals = values;
|
||||
values[0].type = PARAM_STATUS;
|
||||
values[0].data.d_status = STATUS_CALLING_ERROR;
|
||||
|
||||
if (!aa_savable(param[2].data.d_int32)) {
|
||||
values[0].data.d_status = STATUS_CALLING_ERROR;
|
||||
return;
|
||||
}
|
||||
run_mode = param[0].data.d_int32;
|
||||
|
||||
switch (run_mode) {
|
||||
case RUN_INTERACTIVE:
|
||||
gimp_get_data("file_aa_save", &last_type);
|
||||
output_type = type_dialog(last_type);
|
||||
break;
|
||||
|
||||
case RUN_NONINTERACTIVE:
|
||||
/* Make sure all the arguments are there! */
|
||||
if (nparams != 6)
|
||||
status = STATUS_CALLING_ERROR;
|
||||
else
|
||||
output_type = get_type_from_string(param[5].data.d_string);
|
||||
break;
|
||||
|
||||
case RUN_WITH_LAST_VALS:
|
||||
gimp_get_data("file_aa_save", &last_type);
|
||||
output_type = last_type;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (output_type < 0) {
|
||||
status = STATUS_CALLING_ERROR;
|
||||
return;
|
||||
}
|
||||
|
||||
if (save_aa(output_type, param[3].data.d_string, param[1].data.d_int32,
|
||||
param[2].data.d_int32))
|
||||
values[0].data.d_status = STATUS_EXECUTION_ERROR;
|
||||
else
|
||||
values[0].data.d_status = STATUS_SUCCESS;
|
||||
|
||||
last_type = output_type;
|
||||
gimp_set_data("file_aa_save", &last_type, sizeof(last_type));
|
||||
}
|
||||
|
||||
/**
|
||||
* The actual save function. What it's all about.
|
||||
* The image type has to be GRAY.
|
||||
*/
|
||||
static gint save_aa(int output_type, char *filename, gint32 image,
|
||||
gint32 drawable_ID)
|
||||
{
|
||||
aa_savedata savedata =
|
||||
{NULL, NULL};
|
||||
aa_context *context = NULL;
|
||||
aa_format format;
|
||||
GDrawable *drawable = NULL;
|
||||
|
||||
/*fprintf(stderr, "save %s\n", filename); */
|
||||
|
||||
drawable = gimp_drawable_get(drawable_ID);
|
||||
memcpy(&format, aa_formats[output_type], sizeof(format));
|
||||
format.width = drawable->width / 2;
|
||||
format.height = drawable->height / 2;
|
||||
|
||||
/*fprintf(stderr, "save_aa %i x %i\n", format.width, format.height); */
|
||||
|
||||
/* Get a libaa context which will save its output to filename. */
|
||||
savedata.name = filename;
|
||||
savedata.format = &format;
|
||||
|
||||
context = aa_init(&save_d, &aa_defparams, &savedata);
|
||||
if (context == NULL)
|
||||
return 1;
|
||||
|
||||
gimp2aa(image, drawable_ID, context);
|
||||
aa_flush(context);
|
||||
aa_close(context);
|
||||
|
||||
/*fprintf(stderr, "Success!\n"); */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static gint gimp2aa(gint32 image, gint32 drawable_ID, aa_context * context)
|
||||
{
|
||||
int width, height, x, y;
|
||||
guchar *buffer;
|
||||
GDrawable *drawable = NULL;
|
||||
GPixelRgn pixel_rgn;
|
||||
aa_renderparams *renderparams = NULL;
|
||||
int bpp;
|
||||
|
||||
width = aa_imgwidth(context);
|
||||
height = aa_imgheight(context);
|
||||
/*fprintf(stderr, "gimp2aa %i x %i\n", width, height); */
|
||||
|
||||
drawable = gimp_drawable_get(drawable_ID);
|
||||
|
||||
bpp = drawable->bpp;
|
||||
buffer = g_new(guchar, width * bpp);
|
||||
if (buffer == NULL)
|
||||
return 1;
|
||||
|
||||
gimp_pixel_rgn_init(&pixel_rgn, drawable, 0, 0, drawable->width,
|
||||
drawable->height, FALSE, FALSE);
|
||||
|
||||
for (y = 0; y < height; y++) {
|
||||
gimp_pixel_rgn_get_row(&pixel_rgn, buffer, 0, y, width);
|
||||
for (x = 0; x < width; x++) {
|
||||
/* Just copy one byte. If it's indexed that's all we need. Otherwise
|
||||
* it'll be the most significant one. */
|
||||
aa_putpixel(context, x, y, buffer[x * bpp]);
|
||||
}
|
||||
}
|
||||
|
||||
renderparams = aa_getrenderparams();
|
||||
renderparams->dither = AA_FLOYD_S;
|
||||
aa_render(context, renderparams, 0, 0, aa_scrwidth(context),
|
||||
aa_scrheight(context));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static gint aa_savable(gint32 drawable_ID)
|
||||
{
|
||||
GDrawableType drawable_type;
|
||||
|
||||
drawable_type = gimp_drawable_type(drawable_ID);
|
||||
|
||||
if (drawable_type != GRAY_IMAGE && drawable_type != GRAYA_IMAGE)
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* User Interface dialog thingie.
|
||||
*/
|
||||
|
||||
static gint type_dialog(int selected) {
|
||||
GtkWidget *dlg;
|
||||
GtkWidget *button;
|
||||
GtkWidget *toggle;
|
||||
GtkWidget *frame;
|
||||
GtkWidget *toggle_vbox;
|
||||
GSList *group;
|
||||
gchar **argv;
|
||||
gint argc;
|
||||
|
||||
argc = 1;
|
||||
argv = g_new(gchar *, 1);
|
||||
argv[0] = g_strdup("save");
|
||||
|
||||
gtk_init(&argc, &argv);
|
||||
gtk_rc_parse(gimp_gtkrc());
|
||||
|
||||
/* Create the actual window. */
|
||||
dlg = gtk_dialog_new();
|
||||
gtk_window_set_title(GTK_WINDOW(dlg), "Save as text");
|
||||
gtk_window_position(GTK_WINDOW(dlg), GTK_WIN_POS_MOUSE);
|
||||
gtk_signal_connect(GTK_OBJECT(dlg), "destroy",
|
||||
(GtkSignalFunc) type_dialog_close_callback, NULL);
|
||||
|
||||
/* Action area */
|
||||
button = gtk_button_new_with_label("OK");
|
||||
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect(GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc) type_dialog_ok_callback, dlg);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), button,
|
||||
TRUE, TRUE, 0);
|
||||
gtk_widget_grab_default(button);
|
||||
gtk_widget_show(button);
|
||||
|
||||
button = gtk_button_new_with_label("Cancel");
|
||||
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc) type_dialog_cancel_callback,
|
||||
GTK_OBJECT(dlg));
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), button,
|
||||
TRUE, TRUE, 0);
|
||||
gtk_widget_show(button);
|
||||
|
||||
/* file save type */
|
||||
frame = gtk_frame_new("Data Formatting");
|
||||
gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
|
||||
gtk_container_border_width(GTK_CONTAINER(frame), 10);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->vbox), frame, FALSE, TRUE, 0);
|
||||
toggle_vbox = gtk_vbox_new(FALSE, 5);
|
||||
gtk_container_border_width(GTK_CONTAINER(toggle_vbox), 5);
|
||||
gtk_container_add(GTK_CONTAINER(frame), toggle_vbox);
|
||||
|
||||
group = NULL;
|
||||
{
|
||||
aa_format **p = aa_formats;
|
||||
int current = 0;
|
||||
|
||||
while (*p != NULL) {
|
||||
toggle = gtk_radio_button_new_with_label(group, (*p)->formatname);
|
||||
group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle));
|
||||
gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0);
|
||||
gtk_signal_connect(GTK_OBJECT(toggle), "toggled",
|
||||
(GtkSignalFunc) type_dialog_toggle_update,
|
||||
(*p)->formatname);
|
||||
if (current == selected)
|
||||
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), 1);
|
||||
else
|
||||
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), 0);
|
||||
|
||||
gtk_widget_show(toggle);
|
||||
p++;
|
||||
current++;
|
||||
}
|
||||
}
|
||||
|
||||
gtk_widget_show(toggle_vbox);
|
||||
gtk_widget_show(frame);
|
||||
|
||||
gtk_widget_show(dlg);
|
||||
|
||||
gtk_main();
|
||||
gdk_flush();
|
||||
|
||||
return selected_type;
|
||||
}
|
||||
|
||||
/*
|
||||
* Callbacks for the dialog.
|
||||
*/
|
||||
|
||||
static void type_dialog_close_callback(GtkWidget *widget, gpointer data) {
|
||||
gtk_main_quit();
|
||||
}
|
||||
|
||||
static void type_dialog_ok_callback (GtkWidget *widget, gpointer data) {
|
||||
gtk_widget_destroy (GTK_WIDGET (data));
|
||||
}
|
||||
|
||||
static void type_dialog_cancel_callback (GtkWidget *widget, gpointer data) {
|
||||
selected_type = -1;
|
||||
gtk_widget_destroy (GTK_WIDGET (data));
|
||||
}
|
||||
|
||||
static void type_dialog_toggle_update (GtkWidget *widget, gpointer data) {
|
||||
selected_type = get_type_from_string((char *)data);
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
Makefile.in
|
||||
Makefile
|
||||
.deps
|
||||
_libs
|
||||
.libs
|
||||
gag-0.3
|
|
@ -1,57 +0,0 @@
|
|||
GAG 0.3 (Wed Aug 20 1997)
|
||||
-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
|
||||
o new GAG library entries by Marcelo de Gomensoro Malheiros
|
||||
o now you can load/save libraries from file
|
||||
o several dialogs are now placed under mouse cursor (GTK_WIN_POS_MOUSE)
|
||||
o I reorganized Library popup menu so now "Delete" is not the
|
||||
first item
|
||||
o All scales are now initialy set to 0.0 - also Reset scales set all
|
||||
scales to 0.0
|
||||
o GAG is now GiMP plug-in! GAG now renders pictures to current drawable
|
||||
- now, there are two binaries: gag (stand-alone program) and gag-plugin
|
||||
o gag-plugin requires one more entry in gimprc - gag-library - for example:
|
||||
(gag-library "${gimp_dir}/gag-library")
|
||||
o repaired "/" bug (unfortunately expressions with "/" operator looks
|
||||
differently under gag-0.2 and gag-0.3)
|
||||
|
||||
|
||||
GAG 0.2 (Thu Aug 14 1997)
|
||||
-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
|
||||
o mosaic preview
|
||||
o output of (bw|color)-noise is now independent on time or platform (ie with
|
||||
one expression you obtain same picture any time you try do render it)
|
||||
o library is loaded from "gag-library" file on start, on exit whole library
|
||||
is saved to this file. Syntax of "gag-library" file is very similar to scheme
|
||||
- but be aware that this is just similarity (it is not real scheme - for more
|
||||
info see gag-lib.c :-)
|
||||
|
||||
GAG 0.2 pre1 (Tue Aug 12 1997)
|
||||
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
|
||||
o Library is now working (save to/load from)
|
||||
"left doubleckick" -=> preview
|
||||
"right mouse button" -=> more actions
|
||||
o small improvements in edit entry (it allows edit of current expression)
|
||||
|
||||
GAG 0.1 (Mon Aug 11 1997)
|
||||
-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
|
||||
o Improvements & bugfixes in user interface by Robert Saunders
|
||||
o I completly rewrote part of GAG which evaluates expressions
|
||||
o you can now use (color) vectors in expressions (rgb or rgba vectors) but rgba
|
||||
is not yet utilized
|
||||
o noise* functions renamed to bw-noise*
|
||||
o new functions color-noise, color-noise-xy
|
||||
o I temporarily disabled *-noise-xy functions - for more explanation see
|
||||
TODO list (if you want them back delete comments in expressions.tmpl
|
||||
file). Other *-noise functions are enabled (so GAG use noise functions in
|
||||
expressions but not enormously often)
|
||||
|
||||
GAG 0.0 (Fri Aug 8 1997)
|
||||
-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
|
||||
o No changes (sorry :) - initial release..
|
||||
|
||||
|
|
@ -1,38 +0,0 @@
|
|||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
pluginlibdir = $(gimpplugindir)/plug-ins
|
||||
|
||||
pluginlib_PROGRAMS = #STD#
|
||||
|
||||
#STD#_SOURCES = \
|
||||
#STD#.c
|
||||
|
||||
INCLUDES = \
|
||||
$(X_CFLAGS) \
|
||||
-I$(top_srcdir) \
|
||||
-I$(includedir)
|
||||
|
||||
LDADD = \
|
||||
$(top_builddir)/libgimp/libgimpui.la \
|
||||
$(top_builddir)/libgimp/libgimp.la \
|
||||
$(X_LIBS) \
|
||||
-lc
|
||||
|
||||
DEPS = \
|
||||
$(top_builddir)/libgimp/libgimpui.la \
|
||||
$(top_builddir)/libgimp/libgimp.la
|
||||
|
||||
#STD#_DEPENDENCIES = $(DEPS)
|
||||
|
||||
.PHONY: files
|
||||
|
||||
files:
|
||||
@files=`ls $(DISTFILES) 2> /dev/null`; for p in $$files; do \
|
||||
echo $$p; \
|
||||
done
|
||||
@for subdir in $(SUBDIRS); do \
|
||||
files=`cd $$subdir; $(MAKE) files | grep -v "make\[[1-9]\]"`; \
|
||||
for file in $$files; do \
|
||||
echo $$subdir/$$file; \
|
||||
done; \
|
||||
done
|
|
@ -1,107 +0,0 @@
|
|||
I really have to write here something... later :-)
|
||||
I am really sorry for my english... - anybody want to write tutorial and docs?
|
||||
|
||||
FAQs & FAAs:
|
||||
|
||||
Q) How to compile?
|
||||
A) I expect that you know (or find) the answer to this question - well, it's
|
||||
developers version.. Do not expect too much from me! For now you must have
|
||||
sizeof(double)==8 (for xor, or and and) - I fix this later.
|
||||
|
||||
Q) How to install GAG-plug-in for one user?
|
||||
A) Copy gag-plugin binary to your local plug-in directory (for example ~/.gimp/
|
||||
plug-ins/), gag-library to ~/.gimp/gag-library and then set gag-library in
|
||||
gimprc file (ie add following line
|
||||
|
||||
(gag-library "${gimp_dir}/gag-library"}
|
||||
|
||||
Q) How to install GAG-plug-in for all users?
|
||||
A) It is similar to installing GAG-plug-in for one user - also do not forget to
|
||||
change "user_install" script - so all users have own copy of gag-library
|
||||
|
||||
Q) Hey, I can not do anything in GAG!
|
||||
A) Feel adventurous! Do experiments! Click with mouse on one of nine
|
||||
pools. Right button of mouse!
|
||||
|
||||
Q) I expected much more from free software than "Feel adventurous"!
|
||||
A) Ok, ok. Generate one or more random individual (or specify them by hand with
|
||||
expression. Be careful, expressions have scheme-like syntax). Then set weight -
|
||||
weight means how much you like such picture (set higher value of weight for
|
||||
pictures which you prefere...) Finally press button `New generation'. That's
|
||||
all.
|
||||
|
||||
Q) Supported functions?
|
||||
A) See expressions.tmpl
|
||||
|
||||
Q) Why GAG?
|
||||
A) I really do not know...
|
||||
|
||||
Q) Algorithms?
|
||||
A) GAG uses genetic algorithms - for more info about them see
|
||||
|
||||
http://www.aracnet.com/~wwir/NovaGenetica/
|
||||
|
||||
Usage of genetic algorithms in task of generating nice pictures was firstly
|
||||
described in:
|
||||
|
||||
Karl Sims: Artificial Evolution for Computer Graphics, SIGGRAPH 1991
|
||||
(Computer Graphics, vol 25, num 4, pages 319-328)
|
||||
|
||||
Q) Some examples of evolved expressions?
|
||||
A) [simple but nice]
|
||||
(-
|
||||
(cos
|
||||
(x
|
||||
)
|
||||
)
|
||||
(abs
|
||||
(bw-noise-xy (x) (y)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
[for more examples see GAG library]
|
||||
|
||||
Q) Is GAG free?
|
||||
A) Of course - it is distributed under GNU General Public License (see
|
||||
http://www.gnu.org). All users are encouraged to enhance current code and send
|
||||
improvements to author. (Also please send me any your comment, nice picture,
|
||||
bug, constructive critique,...)
|
||||
|
||||
Short list of authors, contributors or active betatesters:
|
||||
|
||||
Daniel Skarda (0rfelyus@atrey.karlin.mff.cuni.cz)
|
||||
Robert Saunders (rob@arch.usyd.EDU.AU)
|
||||
Marcelo de Gomensoro Malheiros (malheiro@dca.fee.unicamp.br)
|
||||
|
||||
Thanks to:
|
||||
|
||||
Karl Sims for his beautiful idea.
|
||||
|
||||
Linus Torwalds for Linux
|
||||
|
||||
Richard Stallman & many ohers for GNU, gcc, EMACS,...
|
||||
|
||||
The XFree86 Project Inc for their X11 server
|
||||
|
||||
Peter Mattis & Spencer Kimball for GIMP & GTK
|
||||
|
||||
Adverts:
|
||||
|
||||
Have a look at homepage of XaoS - portable realtime fractal zoomer by Honza
|
||||
Hubicka!
|
||||
|
||||
http://www.paru.cas.cz/~hubicka/XaoS/
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
Daniel Skarda 0rfelyus@atrey.karlin.mff.cuni.cz
|
||||
Vesinova 16
|
||||
100 00 Prague 10
|
||||
Czech Republic
|
||||
|
||||
|
||||
ugly homepage:
|
||||
http://atrey.karlin.mff.cuni.cz/~0rfelyus
|
||||
ftp archive:
|
||||
ftp://atrey.karlin.mff.cuni.cz/pub/local/0rfelyus
|
||||
|
|
@ -1,104 +0,0 @@
|
|||
legend:
|
||||
-------
|
||||
* open bugs || requests - please contribute!
|
||||
o I want to concern myself on that feature in the next version
|
||||
. already smashed bugs || satisfied requests
|
||||
|
||||
|
||||
I am sorry about my Czenglish (mixture of Czech and English) - but following lines
|
||||
are intended mainly for me :-)
|
||||
|
||||
Possible bugs:
|
||||
-=-=-=-=-=-=-=-
|
||||
. progress bar does not work - I wonder why?
|
||||
* it seems that pop-up menu does not work properly - sometimes it is realy
|
||||
ignorant to all your efforts to activate entry. Maybe there are deep secrets
|
||||
in gtk which I have mised....
|
||||
. make sure that all functions do what I expect they do (min, max.... - they do
|
||||
what they want,.. not what I want... :(
|
||||
* make sure that random, mute or evolve does not return too big expressions...
|
||||
* problem with converting gray-=> color -=> gray (because first is g->(g,g,g),
|
||||
second is (r,g,b)->0.299*r + 0.587*g + b*0.114)
|
||||
* ugly problem: sin(x)= <-1,1>, but with current wrap func 1 means same color
|
||||
as 0 :-( - same for noise etc... - could be solved with pingpong wraper - but
|
||||
this is not satisfactory solution)
|
||||
. bug in "/" operator !!!
|
||||
|
||||
|
||||
There are some random thoughts I had about GAG:
|
||||
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
* another name for GAG? - GA Exploder? GA Dezorientator? GA Time waster? :-)
|
||||
* nice logo for GAG (of course do it with GAG :-)
|
||||
* GAG Homepage with nice pictures, screenshots and tutorials.... I hate homepages :( especialy those without any usefull
|
||||
information but with <censored> frames,java and tons of graphics...) (anyone want to volunteer nice humble lynx-friendly
|
||||
GAG homepage?)
|
||||
. colored pictures :-)
|
||||
* handle alpha channel
|
||||
. warp function
|
||||
. noise function (steal it from noise plug-in :-)
|
||||
. mutate
|
||||
. mate ...
|
||||
. and, or xor
|
||||
* better gas_random which could identify interesting patters (ie non zero etc,
|
||||
non constant..)
|
||||
. gimp version of GAG (ie gag should be real plug-in)
|
||||
* possibility of interupt computation
|
||||
* dialog for Render picture (current layer, create new layer, new image..)
|
||||
* it seems that function for setting weights of operators is highly needed -
|
||||
there are only few operators which could act as leaf (const, vector[34],
|
||||
x,y,(bw|color)-noise-xy) - so there are too many noise functions in
|
||||
expressions so it is hard to evolve picture without any noise-function
|
||||
(and I know that there are alse non-noisy nice pictures:)
|
||||
- another possibile solution - delete noisy-xy functions so there will be only
|
||||
two noise functions instead of four
|
||||
. noise functions must be independent on rand() (so anywhere & any time you can
|
||||
obtain same pictures..)
|
||||
* another mutate function - permutate vector?
|
||||
* copy?
|
||||
* arbitrary matrix of individuals in one generation (rather than 3x3 ??)
|
||||
* library of nice epressions (please contribute! :-)
|
||||
. load from/save to this library
|
||||
. on start load random expressions from library...
|
||||
. save library on exit
|
||||
* temporary library or some other mechanism for pushing/poping expressions (or
|
||||
all nine expressions) or some undo mechanism... (undo last mute&mate)
|
||||
* config file?
|
||||
* many many options for everything (and than another ga solver to find best values :)
|
||||
* options (buttons, switches and other ...) for:
|
||||
* to be or not to be
|
||||
* mutating? mating?
|
||||
* check for 'uninteresting' pictures when creating
|
||||
* them with random?
|
||||
* weights of operators
|
||||
* choosing leaf prob. func
|
||||
* mutating: function for choosing mutate function,.. weight of
|
||||
* functions..
|
||||
* type of mating ( 1:1 or according to the `beauty' of expression)
|
||||
* switch for various types of wrapping... (when ! 0<x<1.0 ...)
|
||||
. parser for expression & possibility of editing expression by hand
|
||||
. beautify "edit by hand" dialog & add clear button & init value should be set to
|
||||
current expression
|
||||
* parser for INfix expressions (as oposit to prefix of `scheme' like syntax) -
|
||||
cut'n'copy it from parser I wrote for my patch to pov-ray (implicit and
|
||||
parametric functions for pov-ray 2.2
|
||||
* history of typed expression...
|
||||
* more types of rand function (ie not only <0,1>, but also <-1,1>, gauss, <-infity,+infity>...)
|
||||
* mosaic preview for faster computation so users will not be bored :-)
|
||||
* anyway, speed all things up... well, what about buing new Hyper Super Pentium 7x+ BPro MMX QTWYUIT @#$^%
|
||||
. (maybe repleace this recursive eval_* calls by stack based computation
|
||||
* and what about PVM and distribution of calculation over network??
|
||||
* antialiasing for final rendering
|
||||
* algorithm for find expression which is the best aproximation of given picture
|
||||
* % operator
|
||||
* color-map function (something like gradient-map plug-in)
|
||||
* take some inspirations from SBART?
|
||||
* (x,y,0), (x,0,y), (0,x,y), (y,x,0), (y,0,x), (0,y,x) functions?
|
||||
* hypot func?
|
||||
* nice tree editor for expressions?
|
||||
* how to implement that ifs function from Karl Sims's article?
|
||||
* function for simplify expressions (for speed things up, mostly for final
|
||||
rendering - to eliminate abs(abs(..)), y+y+y,.... (btw it is not accident that
|
||||
this entry is last in my todo list :)
|
||||
|
||||
|
||||
|
|
@ -1,107 +0,0 @@
|
|||
I really have to write here something... later :-)
|
||||
I am really sorry for my english... - anybody want to write tutorial and docs?
|
||||
|
||||
FAQs & FAAs:
|
||||
|
||||
Q) How to compile?
|
||||
A) I expect that you know (or find) the answer to this question - well, it's
|
||||
developers version.. Do not expect too much from me! For now you must have
|
||||
sizeof(double)==8 (for xor, or and and) - I fix this later.
|
||||
|
||||
Q) How to install GAG-plug-in for one user?
|
||||
A) Copy gag-plugin binary to your local plug-in directory (for example ~/.gimp/
|
||||
plug-ins/), gag-library to ~/.gimp/gag-library and then set gag-library in
|
||||
gimprc file (ie add following line
|
||||
|
||||
(gag-library "${gimp_dir}/gag-library"}
|
||||
|
||||
Q) How to install GAG-plug-in for all users?
|
||||
A) It is similar to installing GAG-plug-in for one user - also do not forget to
|
||||
change "user_install" script - so all users have own copy of gag-library
|
||||
|
||||
Q) Hey, I can not do anything in GAG!
|
||||
A) Feel adventurous! Do experiments! Click with mouse on one of nine
|
||||
pools. Right button of mouse!
|
||||
|
||||
Q) I expected much more from free software than "Feel adventurous"!
|
||||
A) Ok, ok. Generate one or more random individual (or specify them by hand with
|
||||
expression. Be careful, expressions have scheme-like syntax). Then set weight -
|
||||
weight means how much you like such picture (set higher value of weight for
|
||||
pictures which you prefere...) Finally press button `New generation'. That's
|
||||
all.
|
||||
|
||||
Q) Supported functions?
|
||||
A) See expressions.tmpl
|
||||
|
||||
Q) Why GAG?
|
||||
A) I really do not know...
|
||||
|
||||
Q) Algorithms?
|
||||
A) GAG uses genetic algorithms - for more info about them see
|
||||
|
||||
http://www.aracnet.com/~wwir/NovaGenetica/
|
||||
|
||||
Usage of genetic algorithms in task of generating nice pictures was firstly
|
||||
described in:
|
||||
|
||||
Karl Sims: Artificial Evolution for Computer Graphics, SIGGRAPH 1991
|
||||
(Computer Graphics, vol 25, num 4, pages 319-328)
|
||||
|
||||
Q) Some examples of evolved expressions?
|
||||
A) [simple but nice]
|
||||
(-
|
||||
(cos
|
||||
(x
|
||||
)
|
||||
)
|
||||
(abs
|
||||
(bw-noise-xy (x) (y)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
[for more examples see GAG library]
|
||||
|
||||
Q) Is GAG free?
|
||||
A) Of course - it is distributed under GNU General Public License (see
|
||||
http://www.gnu.org). All users are encouraged to enhance current code and send
|
||||
improvements to author. (Also please send me any your comment, nice picture,
|
||||
bug, constructive critique,...)
|
||||
|
||||
Short list of authors, contributors or active betatesters:
|
||||
|
||||
Daniel Skarda (0rfelyus@atrey.karlin.mff.cuni.cz)
|
||||
Robert Saunders (rob@arch.usyd.EDU.AU)
|
||||
Marcelo de Gomensoro Malheiros (malheiro@dca.fee.unicamp.br)
|
||||
|
||||
Thanks to:
|
||||
|
||||
Karl Sims for his beautiful idea.
|
||||
|
||||
Linus Torwalds for Linux
|
||||
|
||||
Richard Stallman & many ohers for GNU, gcc, EMACS,...
|
||||
|
||||
The XFree86 Project Inc for their X11 server
|
||||
|
||||
Peter Mattis & Spencer Kimball for GIMP & GTK
|
||||
|
||||
Adverts:
|
||||
|
||||
Have a look at homepage of XaoS - portable realtime fractal zoomer by Honza
|
||||
Hubicka!
|
||||
|
||||
http://www.paru.cas.cz/~hubicka/XaoS/
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
Daniel Skarda 0rfelyus@atrey.karlin.mff.cuni.cz
|
||||
Vesinova 16
|
||||
100 00 Prague 10
|
||||
Czech Republic
|
||||
|
||||
|
||||
ugly homepage:
|
||||
http://atrey.karlin.mff.cuni.cz/~0rfelyus
|
||||
ftp archive:
|
||||
ftp://atrey.karlin.mff.cuni.cz/pub/local/0rfelyus
|
||||
|
|
@ -1,686 +0,0 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include <time.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "expressions.h"
|
||||
|
||||
DBL x_val, y_val;
|
||||
|
||||
static NODE *nodes[MAX_STACK_ENTRIES];
|
||||
static int num_of_nodes;
|
||||
static DBL r_values[MAX_STACK_ENTRIES],
|
||||
g_values[MAX_STACK_ENTRIES],
|
||||
b_values[MAX_STACK_ENTRIES],
|
||||
alfa_values[MAX_STACK_ENTRIES],
|
||||
data_values[MAX_STACK_ENTRIES];
|
||||
static func_type *func_st[MAX_STACK_ENTRIES];
|
||||
|
||||
NODE **n_top;
|
||||
|
||||
DBL *r_top, *g_top, *b_top,* alfa_top;
|
||||
DBL *data_top;
|
||||
|
||||
|
||||
|
||||
void conv_1_3(void);
|
||||
void conv_1_4(void);
|
||||
void conv_3_1(void);
|
||||
void conv_3_4(void);
|
||||
void conv_4_1(void);
|
||||
void conv_4_3(void);
|
||||
void insert_convert_func(int ifrom, int ito);
|
||||
|
||||
/**************************************************
|
||||
|
||||
EVALUATION & COMPILATION OF EXP
|
||||
|
||||
**************************************************/
|
||||
|
||||
void eval_xy( DBL *result,DBL x, DBL y)
|
||||
{
|
||||
func_type **func;
|
||||
int i;
|
||||
|
||||
x_val= x;
|
||||
y_val= y;
|
||||
|
||||
r_top= r_values - 1;
|
||||
g_top= g_values - 1;
|
||||
b_top= b_values - 1;
|
||||
alfa_top= alfa_values - 1;
|
||||
n_top= nodes;
|
||||
data_top= data_values;
|
||||
func= func_st;
|
||||
|
||||
for (i=num_of_nodes; i ; (*func)(), i--, n_top++, func++);
|
||||
|
||||
result[0]= *r_top;
|
||||
result[1]= *g_top;
|
||||
result[2]= *b_top;
|
||||
result[3]= *alfa_top;
|
||||
}
|
||||
|
||||
char find_tof( NODE *n)
|
||||
{
|
||||
int i;
|
||||
char tmp,ret=1;
|
||||
|
||||
for (i=0; i < n->noo; i++)
|
||||
{
|
||||
tmp = find_tof( (n->offsprings)[i] );
|
||||
if (tmp > ret) ret= tmp;
|
||||
}
|
||||
if (n->op->ret_type == -1)
|
||||
n-> tof= ret;
|
||||
else
|
||||
n-> tof= n->op->ret_type;
|
||||
|
||||
return n->tof;
|
||||
}
|
||||
|
||||
void st_insert( func_type *func, NODE *n )
|
||||
{
|
||||
nodes[num_of_nodes]=n;
|
||||
func_st[num_of_nodes]= func;
|
||||
num_of_nodes++;
|
||||
}
|
||||
|
||||
void compile(NODE *n)
|
||||
{
|
||||
int i;
|
||||
int ret, oret;
|
||||
int cret;
|
||||
|
||||
ret= n->tof;
|
||||
|
||||
cret= ret-1;
|
||||
if (cret > 0) cret--; /* 1,3,4 -=> 0,1,2 */
|
||||
|
||||
for (i=0; i < n -> noo; i++)
|
||||
{
|
||||
if ( n -> op-> funcs != NULL)
|
||||
if ( ((n->op->funcs)[i][cret]) != NULL)
|
||||
st_insert( ((n->op->funcs)[i][cret]), n );
|
||||
compile( (n->offsprings)[i] );
|
||||
oret= (n->offsprings)[i]->tof;
|
||||
if (ret != oret)
|
||||
insert_convert_func(oret, ret);
|
||||
}
|
||||
|
||||
if ( n ->op-> funcs != NULL)
|
||||
if ( ((n->op->funcs)[i][cret]) != NULL)
|
||||
st_insert( ((n->op->funcs)[i][cret]), n );
|
||||
|
||||
if ( (n->op->last_func)[cret] != NULL)
|
||||
st_insert( (n->op->last_func)[cret], n );
|
||||
|
||||
for (i=0; i < n->op->nofd; i++)
|
||||
{
|
||||
*data_top= n->data[i];
|
||||
data_top++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void prepare_node( NODE *n)
|
||||
{
|
||||
char lastret;
|
||||
|
||||
lastret= find_tof( n );
|
||||
|
||||
num_of_nodes=0;
|
||||
data_top=data_values;
|
||||
compile( n );
|
||||
|
||||
if (lastret==3) insert_convert_func(3,4);
|
||||
if (lastret==1) insert_convert_func(1,4);
|
||||
}
|
||||
|
||||
void conv_1_3(void)
|
||||
{
|
||||
g_top++; *g_top= *r_top;
|
||||
b_top++; *b_top= *r_top;
|
||||
}
|
||||
|
||||
void conv_1_4(void)
|
||||
{
|
||||
g_top++; *g_top= *r_top;
|
||||
b_top++; *b_top= *r_top;
|
||||
alfa_top++; *alfa_top= 1.0;
|
||||
}
|
||||
|
||||
void conv_3_1(void)
|
||||
{
|
||||
*r_top= *r_top * 0.299 + *g_top * 0.587 + *b_top * 0.114;
|
||||
g_top--;
|
||||
b_top--;
|
||||
}
|
||||
|
||||
void conv_3_4(void)
|
||||
{
|
||||
alfa_top++; *alfa_top= 1.0;
|
||||
}
|
||||
|
||||
void conv_4_1(void)
|
||||
{
|
||||
*r_top= *r_top * 0.299 + *g_top * 0.587 + *b_top * 0.114;
|
||||
g_top--;
|
||||
b_top--;
|
||||
alfa_top--;
|
||||
}
|
||||
|
||||
void conv_4_3(void)
|
||||
{
|
||||
--alfa_top;
|
||||
}
|
||||
|
||||
void insert_convert_func(int ifrom, int ito)
|
||||
{
|
||||
if (ifrom==ito) return;
|
||||
if (ifrom == 1)
|
||||
if (ito == 3)
|
||||
st_insert( conv_1_3, NULL );
|
||||
else
|
||||
st_insert( conv_1_4, NULL );
|
||||
else
|
||||
if (ifrom==3)
|
||||
if (ito==1)
|
||||
st_insert( conv_3_1, NULL );
|
||||
else
|
||||
st_insert( conv_3_4, NULL );
|
||||
else
|
||||
if (ito==1)
|
||||
st_insert( conv_4_1, NULL );
|
||||
else
|
||||
st_insert( conv_4_3, NULL );
|
||||
}
|
||||
|
||||
/************************************************/
|
||||
|
||||
void destroy_node(NODE *n)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (n==NULL) return;
|
||||
for (i=0; i < n->noo; i++)
|
||||
destroy_node( (n->offsprings)[i] );
|
||||
free( n );
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
DBL dblrand()
|
||||
{
|
||||
return ((DBL) rand()) / ((DBL) RAND_MAX);
|
||||
}
|
||||
|
||||
void init_random()
|
||||
{
|
||||
srand( time(NULL) );
|
||||
}
|
||||
|
||||
|
||||
NODE *node_copy(NODE *n)
|
||||
{
|
||||
NODE *nn;
|
||||
int i;
|
||||
|
||||
nn= (NODE *) malloc (sizeof(NODE));
|
||||
|
||||
*nn= *n;
|
||||
for (i=0; i<n->noo; i++)
|
||||
(nn->offsprings)[i]= node_copy( (n->offsprings)[i] );
|
||||
|
||||
return nn;
|
||||
}
|
||||
|
||||
void expr_fprint(FILE *f, int i, NODE *n)
|
||||
{
|
||||
char tmp[100];
|
||||
int j;
|
||||
|
||||
memset(tmp, ' ', 100);
|
||||
tmp[i%100]=0;
|
||||
|
||||
if (n->op->nofd == 1)
|
||||
{ /* float */
|
||||
fprintf(f,"%s%.8f\n", tmp, n->data[0]);
|
||||
return;
|
||||
}
|
||||
if (n->op->nofd >= 3)
|
||||
{
|
||||
fprintf(f, "%s#(", tmp);
|
||||
for (j=0; j < n->op->nofd - 1; j++)
|
||||
fprintf(f,"%.8f ",n->data[j]);
|
||||
fprintf(f,"%.8f",n->data[j]);
|
||||
fprintf(f, ")\n");
|
||||
return;
|
||||
}
|
||||
|
||||
fprintf (f, "%s(%s\n",tmp, n->op->name);
|
||||
for (j=0; j<n->noo; j++)
|
||||
expr_fprint(f, i+2, (n->offsprings)[j] );
|
||||
fprintf (f, "%s)\n",tmp);
|
||||
}
|
||||
|
||||
int expr_sprint(char *s, NODE *n)
|
||||
{
|
||||
int len=0,j,t;
|
||||
|
||||
if (n->op->nofd == 1)
|
||||
{ /* float */
|
||||
return sprintf(s,"%.8f\n", n->data[0]);
|
||||
}
|
||||
|
||||
if (n->op->nofd >= 3)
|
||||
{
|
||||
len= sprintf(s,"#(");
|
||||
s+=len;
|
||||
for (j=0; j < n->op->nofd - 1; j++)
|
||||
{
|
||||
t= sprintf(s,"%.8f ",n->data[j]);
|
||||
s+= t;
|
||||
len+=t;
|
||||
}
|
||||
t= sprintf(s,"%.8f)",n->data[j]);
|
||||
s+=t; len+=t;
|
||||
return len;
|
||||
}
|
||||
|
||||
len= sprintf (s,"(%s", n->op->name);
|
||||
s+=len;
|
||||
|
||||
for (j=0; j<n->noo; j++)
|
||||
{
|
||||
*s=' ';
|
||||
s++; len++;
|
||||
t= expr_sprint(s, (n->offsprings)[j] );
|
||||
s+= t; len+= t;
|
||||
}
|
||||
*s= ')';
|
||||
s++; len++;
|
||||
*s='\000';
|
||||
return len;
|
||||
}
|
||||
|
||||
/******************************
|
||||
|
||||
FUNCTIONS FOR PARSING EXPRESSIONS
|
||||
|
||||
******************************/
|
||||
|
||||
static int find_op(char *c)
|
||||
{
|
||||
int i;
|
||||
for (i=0; i< Number_of_Functions; i++)
|
||||
if (strcmp(c,FuncInfo[i].name)==0) return i;
|
||||
return -1;
|
||||
}
|
||||
|
||||
#define EAT_EMPTY_SPACE(PTR) \
|
||||
while (isspace(*PTR)) (PTR)++;
|
||||
|
||||
#define PERROR(S) \
|
||||
{ \
|
||||
int j; \
|
||||
if (S!=NULL) \
|
||||
printf("Error: %s\n",S); \
|
||||
for (j=0; j < params; j++) \
|
||||
destroy_node(offs[j]); \
|
||||
return NULL; \
|
||||
}
|
||||
|
||||
NODE *parse_prefix_expression(char **c)
|
||||
{
|
||||
int p, params;
|
||||
int i;
|
||||
NODE *n;
|
||||
DBL v;
|
||||
NODE *(offs[MAX_NUMBER_OF_PARAMETERS]);
|
||||
char buff[50];
|
||||
|
||||
|
||||
EAT_EMPTY_SPACE(*c);
|
||||
|
||||
params=0;
|
||||
if (**c=='(') /* operator */
|
||||
{
|
||||
char *tmp;
|
||||
char vtmp;
|
||||
(*c)++;
|
||||
EAT_EMPTY_SPACE(*c);
|
||||
tmp= *c;
|
||||
while ((!isspace(**c))&&(**c!=')')) (*c)++;
|
||||
vtmp= **c;
|
||||
**c= 0;
|
||||
if ((p= find_op(tmp))==-1)
|
||||
{sprintf(buff,"unknown operator: %s",tmp); PERROR(buff) };
|
||||
**c= vtmp;
|
||||
for (i=0;i<=MAX_NUMBER_OF_PARAMETERS;i++, params++)
|
||||
{
|
||||
EAT_EMPTY_SPACE(*c);
|
||||
if (**c == ')') break;
|
||||
offs[i]= parse_prefix_expression(c);
|
||||
if (offs[i]==NULL)
|
||||
PERROR((char *)NULL);
|
||||
}
|
||||
|
||||
if (**c != ')')
|
||||
PERROR("')' expected");
|
||||
|
||||
(*c)++;
|
||||
if (((FuncInfo[p].nofp == -1) && (i==0)) ||
|
||||
((FuncInfo[p].nofp != -1) && (i!= FuncInfo[p].nofp)))
|
||||
PERROR("wrong number of parameters");
|
||||
|
||||
n= (NODE *) malloc(sizeof(NODE));
|
||||
n->op= &(FuncInfo[p]);
|
||||
n->noo=i;
|
||||
memcpy((n->offsprings), offs, i * sizeof(NODE *));
|
||||
|
||||
return n;
|
||||
}
|
||||
if ((**c=='.')||(**c=='+')||(**c=='-')|| isdigit(**c))
|
||||
{
|
||||
v= strtod(*c, c);
|
||||
|
||||
if ((p= find_op("const"))==-1)
|
||||
PERROR("Warning: there is no const in expression.tmpl");
|
||||
|
||||
n= (NODE *) malloc(sizeof(NODE));
|
||||
n->op= &(FuncInfo[p]);
|
||||
n->noo=0;
|
||||
(n->data)[0]= v;
|
||||
return n;
|
||||
}
|
||||
if (**c=='#')
|
||||
{
|
||||
DBL tmp[10];
|
||||
int i;
|
||||
|
||||
(*c)++;
|
||||
EAT_EMPTY_SPACE(*c);
|
||||
if (**c != '(')
|
||||
PERROR("'(' expected");
|
||||
(*c)++;
|
||||
for ( i = 0; i < 5; i++)
|
||||
{
|
||||
tmp[i]= strtod(*c, c);
|
||||
EAT_EMPTY_SPACE(*c);
|
||||
if (**c==')') break;
|
||||
}
|
||||
if ((i != 2) && (i != 3)) PERROR("Wrong number of vector components");
|
||||
(*c)++;
|
||||
|
||||
n= (NODE *) malloc(sizeof(NODE));
|
||||
n->op= &(FuncInfo[ find_op( (i==2) ? "vector3" : "vector4" ) ]);
|
||||
n->noo=0;
|
||||
for (; i >=0; i--)
|
||||
(n->data)[i]=tmp[i];
|
||||
return n;
|
||||
}
|
||||
|
||||
sprintf(buff,"Unexpected character: %c",**c);
|
||||
PERROR(buff);
|
||||
}
|
||||
|
||||
|
||||
DBL double_xor (DBL p1, DBL p2)
|
||||
{
|
||||
#if DBL_SIZE==8
|
||||
|
||||
int *i1, *i2, *i3;
|
||||
DBL ret;
|
||||
|
||||
i1= (int *) &p1;
|
||||
i2= (int *) &p2;
|
||||
i3= (int *) &ret;
|
||||
|
||||
*i3= (*i1) ^ (*i2);
|
||||
i1++; i2++; i3++;
|
||||
*i3= (*i1) ^ (*i2);
|
||||
|
||||
return ret;
|
||||
#else
|
||||
# error "Please rewrite this function for your architecture... :-)"
|
||||
#endif
|
||||
}
|
||||
|
||||
DBL double_or (DBL p1, DBL p2)
|
||||
{
|
||||
#if DBL_SIZE==8
|
||||
|
||||
int *i1, *i2, *i3;
|
||||
DBL ret;
|
||||
|
||||
i1= (int *) &p1;
|
||||
i2= (int *) &p2;
|
||||
i3= (int *) &ret;
|
||||
|
||||
*i3= (*i1) | (*i2);
|
||||
i1++; i2++; i3++;
|
||||
*i3= (*i1) | (*i2);
|
||||
|
||||
return ret;
|
||||
#else
|
||||
# error "Please rewrite this function for your architecture... :-)"
|
||||
#endif
|
||||
}
|
||||
|
||||
DBL double_and (DBL p1, DBL p2)
|
||||
{
|
||||
#if DBL_SIZE==8
|
||||
|
||||
int *i1, *i2, *i3;
|
||||
DBL ret;
|
||||
|
||||
i1= (int *) &p1;
|
||||
i2= (int *) &p2;
|
||||
i3= (int *) &ret;
|
||||
|
||||
*i3= (*i1) & (*i2);
|
||||
i1++; i2++; i3++;
|
||||
*i3= (*i1) * (*i2);
|
||||
|
||||
return ret;
|
||||
#else
|
||||
# error "Please rewrite this function for your architecture... :-)"
|
||||
#endif
|
||||
}
|
||||
|
||||
unsigned char (*wrap_func)(DBL)= wrap_func_rep;
|
||||
|
||||
unsigned char wrap_func_cut(DBL n)
|
||||
{
|
||||
if (n < 0.0) return 0;
|
||||
if (n > 1.0) return 255;
|
||||
return (unsigned char) (n*255.0);
|
||||
}
|
||||
|
||||
unsigned char wrap_func_rep(DBL n)
|
||||
{
|
||||
return (unsigned char) (255.0 * (n - floor(n)));
|
||||
}
|
||||
|
||||
unsigned char wrap_func_pingpong(DBL n)
|
||||
{
|
||||
if ( ((int ) (n - floor(n))) & 1 )
|
||||
return (unsigned char) ((1.0 - n + floor(n)) * 255 );
|
||||
else
|
||||
return (unsigned char) (255.0 * (n - floor(n)));
|
||||
}
|
||||
|
||||
/******************************
|
||||
|
||||
NOISE
|
||||
|
||||
I was in hurry so I borrowed code from snoise plug-in
|
||||
by Marcelo de Gomensoro Malheiros
|
||||
|
||||
Thank you !
|
||||
|
||||
******************************/
|
||||
|
||||
#define TABLE_SIZE 256
|
||||
#define WEIGHT(T) ((2.0*fabs(T) - 3.0)*(T)*(T)+1.0)
|
||||
|
||||
typedef struct {
|
||||
DBL x, y;
|
||||
} Vector2d;
|
||||
|
||||
static int perm_tab[TABLE_SIZE]= {
|
||||
254, 20, 180, 81, 171, 17, 83, 7, 18, 72, 154, 11, 12, 134, 251, 15,
|
||||
173, 33, 252, 109, 21, 2, 101, 124, 24, 149, 136, 181, 112, 22, 220, 68,
|
||||
67, 164, 87, 125, 44, 244, 38, 55, 40, 248, 138, 226, 36, 139, 103, 88,
|
||||
75, 49, 74, 43, 16, 216, 210, 90, 203, 150, 58, 59, 29, 26, 159, 63,
|
||||
64, 167, 66, 253, 105, 69, 232, 250, 50, 147, 95, 225, 4, 175, 71, 132,
|
||||
80, 162, 200, 118, 247, 185, 45, 5, 91, 104, 97, 186, 187, 128, 41, 99,
|
||||
96, 39, 131, 196, 148, 184, 102, 78, 34, 77, 106, 133, 211, 212, 108, 143,
|
||||
137, 240, 51, 60, 215, 224, 152, 119, 120, 183, 6, 130, 158, 114, 229, 110,
|
||||
14, 61, 166, 156, 227, 84, 57, 231, 92, 31, 161, 1, 209, 178, 142, 73,
|
||||
129, 145, 3, 201, 98, 23, 177, 56, 25, 188, 127, 30, 202, 9, 219, 169,
|
||||
160, 28, 198, 163, 135, 165, 193, 197, 8, 123, 117, 207, 192, 93, 19, 82,
|
||||
126, 46, 214, 53, 155, 189, 208, 235, 113, 213, 0, 13, 27, 153, 190, 52,
|
||||
151, 100, 194, 86, 10, 206, 255, 245, 176, 35, 172, 146, 204, 205, 236, 111,
|
||||
42, 140, 54, 122, 233, 70, 94, 141, 121, 195, 218, 37, 191, 221, 170, 157,
|
||||
239, 241, 179, 182, 228, 249, 230, 168, 89, 174, 234, 79, 107, 237, 238, 65,
|
||||
85, 223, 242, 243, 222, 48, 116, 47, 62, 246, 199, 76, 32, 115, 144, 217
|
||||
};
|
||||
|
||||
static Vector2d grad_tab[TABLE_SIZE]= {
|
||||
{ -0.340904, 0.940098}, { -0.933457, -0.358689}, { -0.776360, -0.630290},
|
||||
{ 0.925639, -0.378408}, { 0.084779, -0.996400}, { 0.127247, -0.991871},
|
||||
{ -0.527260, 0.849704}, { -0.468794, -0.883308}, { 0.454024, 0.890989},
|
||||
{ 0.971369, 0.237577}, { -0.016268, 0.999868}, { 0.905447, 0.424459},
|
||||
{ -0.083460, -0.996511}, { 0.333623, 0.942707}, { -0.378842, -0.925461},
|
||||
{ -0.003822, 0.999993}, { -0.993272, -0.115804}, { 0.784827, -0.619715},
|
||||
{ 0.999963, -0.008588}, { 0.067801, -0.997699}, { -0.431667, -0.902033},
|
||||
{ 0.836585, -0.547838}, { 0.868525, -0.495645}, { -0.694388, 0.719601},
|
||||
{ 0.955062, -0.296405}, { 0.966409, -0.257010}, { 0.785965, -0.618271},
|
||||
{ 0.431877, -0.901932}, { 0.801459, -0.598050}, { -0.567396, -0.823445},
|
||||
{ -0.401807, 0.915724}, { 0.150691, 0.988581}, { -0.284235, -0.958755},
|
||||
{ -0.855926, 0.517098}, { -0.857330, -0.514767}, { 0.581591, 0.813482},
|
||||
{ 0.026909, -0.999638}, { -0.997178, 0.075076}, { 0.168251, -0.985744},
|
||||
{ -0.952632, 0.304125}, { 0.982900, -0.184139}, { 0.804087, -0.594511},
|
||||
{ -0.774009, -0.633175}, { -0.869432, 0.494052}, { -0.568740, -0.822518},
|
||||
{ -0.667502, 0.744608}, { -0.903558, -0.428467}, { 0.999705, -0.024288},
|
||||
{ 0.857228, 0.514937}, { 0.779031, -0.626985}, { -0.254156, -0.967163},
|
||||
{ 0.797137, 0.603798}, { 0.352136, 0.935949}, { 0.192778, -0.981242},
|
||||
{ 0.908687, 0.417477}, { -0.976788, 0.214207}, { -0.947997, -0.318280},
|
||||
{ 0.989617, -0.143730}, { -0.918658, -0.395053}, { 0.984556, -0.175068},
|
||||
{ 0.828093, 0.560591}, { 0.796336, 0.604854}, { -0.402179, -0.915561},
|
||||
{ -0.791991, 0.610532}, { -0.238364, 0.971176}, { 0.012233, 0.999925},
|
||||
{ -0.992889, -0.119040}, { -0.391251, 0.920284}, { 0.500683, 0.865631},
|
||||
{ -0.996647, -0.081818}, { 0.631211, 0.775611}, { 0.632632, 0.774453},
|
||||
{ 0.994086, 0.108596}, { -0.349918, 0.936780}, { 0.528357, -0.849022},
|
||||
{ 0.264896, -0.964277}, { 0.886484, 0.462760}, { -0.456045, 0.889957},
|
||||
{ 0.948901, 0.315574}, { -0.762707, 0.646744}, { 0.975860, 0.218399},
|
||||
{ 0.966273, 0.257521}, { -0.785780, -0.618506}, { -0.729822, 0.683638},
|
||||
{ 0.409543, 0.912291}, { -0.815786, 0.578354}, { -0.754687, -0.656085},
|
||||
{ -0.945713, 0.325003}, { -0.722036, -0.691855}, { 0.071182, -0.997463},
|
||||
{ -0.622102, -0.782936}, { 0.126728, 0.991937}, { 0.841445, 0.540343},
|
||||
{ -0.714751, 0.699379}, { 0.792850, -0.609417}, { 0.419202, -0.907893},
|
||||
{ 0.975360, 0.220620}, { -0.924087, 0.382183}, { 0.605739, -0.795663},
|
||||
{ -0.762163, 0.647385}, { -0.774114, 0.633046}, { 0.999734, 0.023045},
|
||||
{ -0.921373, -0.388681}, { -0.665487, 0.746410}, { -0.589795, -0.807553},
|
||||
{ -0.568207, 0.822886}, { 0.921615, 0.388105}, { -0.272729, -0.962091},
|
||||
{ 0.675038, -0.737783}, { 0.313405, 0.949620}, { 0.741975, 0.670428},
|
||||
{ -0.497474, -0.867479}, { -0.864656, 0.502364}, { 0.975093, 0.221797},
|
||||
{ -0.989268, -0.146109}, { 0.980503, -0.196505}, { -0.798513, -0.601978},
|
||||
{ 0.240607, -0.970623}, { -0.393014, 0.919533}, { 0.084637, -0.996412},
|
||||
{ -0.467677, -0.883899}, { 0.062876, 0.998021}, { -0.903742, -0.428078},
|
||||
{ 0.983263, -0.182191}, { 0.251135, 0.967952}, { -0.970324, 0.241807},
|
||||
{ 0.126711, -0.991940}, { 0.274262, 0.961655}, { 0.997314, -0.073242},
|
||||
{ -0.923689, 0.383144}, { 0.496499, -0.868037}, { -0.053434, -0.998571},
|
||||
{ -0.933781, -0.357845}, { -0.851126, 0.524961}, { 0.853828, 0.520555},
|
||||
{ 0.271485, -0.962443}, { 0.365644, -0.930755}, { 0.017294, -0.999850},
|
||||
{ -0.850236, 0.526402}, { 0.679557, 0.733622}, { -0.245285, 0.969451},
|
||||
{ 0.985317, -0.170734}, { 0.457752, -0.889080}, { 0.981181, 0.193092},
|
||||
{ 0.298175, -0.954511}, { 0.824137, 0.566390}, { 0.218332, -0.975875},
|
||||
{ -0.508714, -0.860935}, { 0.875234, -0.483699}, { 0.508538, -0.861039},
|
||||
{ -0.207871, -0.978156}, { 0.424732, 0.905319}, { -0.383099, 0.923707},
|
||||
{ 0.181913, -0.983315}, { 0.888078, 0.459693}, { -0.379999, -0.924987},
|
||||
{ -0.028810, -0.999585}, { 0.196453, -0.980513}, { 0.029305, -0.999571},
|
||||
{ 0.221861, -0.975078}, { 0.668131, -0.744044}, { 0.682511, -0.730875},
|
||||
{ 0.058054, -0.998313}, { -0.085181, -0.996365}, { 0.225010, -0.974357},
|
||||
{ 0.180953, -0.983492}, { -0.806028, -0.591877}, { 0.998739, 0.050204},
|
||||
{ -0.989319, 0.145767}, { 0.172447, 0.985019}, { -0.935325, 0.353790},
|
||||
{ -0.908229, 0.418473}, { 0.959731, 0.280919}, { 0.840561, 0.541718},
|
||||
{ 0.991777, -0.127978}, { 0.682358, -0.731018}, { 0.574395, -0.818578},
|
||||
{ -0.121657, -0.992572}, { -0.432900, -0.901442}, { -0.999856, 0.016945},
|
||||
{ -0.550735, -0.834680}, { -0.978364, 0.206890}, { 0.943332, 0.331851},
|
||||
{ 0.166796, 0.985991}, { 0.222451, 0.974944}, { 0.765695, 0.643204},
|
||||
{ -0.449596, -0.893232}, { -0.984817, -0.173596}, { 0.290036, 0.957016},
|
||||
{ -0.638124, 0.769934}, { 0.102617, 0.994721}, { -0.757623, -0.652692},
|
||||
{ -0.983166, 0.182717}, { 0.977482, -0.211021}, { 0.739869, 0.672751},
|
||||
{ -0.942317, 0.334721}, { -0.515641, 0.856805}, { 0.270002, 0.962860},
|
||||
{ -0.598114, -0.801411}, { 0.313478, 0.949596}, { 0.229444, 0.973322},
|
||||
{ -0.697821, -0.716272}, { 0.062743, -0.998030}, { -0.158614, 0.987341},
|
||||
{ -0.529376, -0.848387}, { 0.191143, -0.981562}, { 0.601182, -0.799112},
|
||||
{ 0.976461, 0.215694}, { -0.893194, -0.449672}, { -0.786058, 0.618153},
|
||||
{ -0.999201, 0.039958}, { -0.991278, 0.131790}, { 0.475348, -0.879798},
|
||||
{ 0.399412, -0.916772}, { 0.157454, -0.987526}, { 0.998391, 0.056713},
|
||||
{ -0.942481, 0.334260}, { -0.041131, -0.999154}, { 0.501194, 0.865335},
|
||||
{ -0.649762, -0.760137}, { 0.682994, 0.730424}, { 0.717300, 0.696765},
|
||||
{ -0.362297, 0.932063}, { 0.980846, 0.194787}, { 0.037116, -0.999311},
|
||||
{ -0.999897, -0.014356}, { -0.919892, -0.392171}, { -0.950399, 0.311032},
|
||||
{ 0.683221, 0.730212}, { 0.702763, -0.711424}, { 0.945516, 0.325574},
|
||||
{ -0.728458, -0.685091}, { -0.791297, 0.611433}, { -0.707706, 0.706507},
|
||||
{ -0.342698, 0.939446}, { 0.585173, -0.810908}, { 0.637824, -0.770182},
|
||||
{ 0.232521, 0.972591}, { 0.814065, 0.580774}, { -0.488897, -0.872342},
|
||||
{ -0.486172, -0.873863}, { 0.219057, -0.975712}, { 0.876775, -0.480900},
|
||||
{ 0.446701, -0.894683}, { 0.954116, 0.299437}, { -0.201992, 0.979387},
|
||||
{ 0.613498, 0.789696}, { -0.062938, -0.998017}, { -0.711028, 0.703164},
|
||||
{ -0.175823, 0.984422}, { 0.867027, 0.498261}, { 0.170418, -0.985372},
|
||||
{ -0.993594, 0.113005}, { -0.999964, 0.008470}, { -0.236945, 0.971523},
|
||||
{ 0.993534, 0.113539}
|
||||
};
|
||||
|
||||
|
||||
DBL
|
||||
solid_noise (DBL x, DBL y)
|
||||
{
|
||||
Vector2d v;
|
||||
int a, b, i, j, n;
|
||||
int ha, hb;
|
||||
DBL sum;
|
||||
|
||||
sum = 0.0;
|
||||
|
||||
x*= 5.; /* GAG operates on interval <0,1>,<0,1> so noise (x,y) would be */
|
||||
y*= 5.; /* so uninteresting when unscaled :-) */
|
||||
|
||||
a = (int) floor (x);
|
||||
b = (int) floor (y);
|
||||
|
||||
|
||||
ha= (a % TABLE_SIZE) + TABLE_SIZE; /* to avoid negative values of a or b */
|
||||
hb= (b % TABLE_SIZE) + TABLE_SIZE;
|
||||
|
||||
for (i = 0; i < 2; i++)
|
||||
for (j = 0; j < 2; j++) {
|
||||
n = perm_tab[(ha + i + perm_tab[(hb + j) % TABLE_SIZE]) % TABLE_SIZE];
|
||||
v.x = x - a - i;
|
||||
v.y = y - b - j;
|
||||
sum += WEIGHT(v.x) * WEIGHT(v.y) * (grad_tab[n].x * v.x + grad_tab[n].y * v.y);
|
||||
}
|
||||
|
||||
return sum;
|
||||
}
|
||||
|
||||
/******************************
|
||||
|
||||
expression library initialisation
|
||||
|
||||
******************************/
|
||||
|
||||
|
||||
void expr_init()
|
||||
{
|
||||
init_random();
|
||||
}
|
||||
|
||||
|
|
@ -1,100 +0,0 @@
|
|||
#ifndef _EXPRESSIONS_H_
|
||||
#define _EXPRESSIONS_H_
|
||||
|
||||
#ifdef DEBUG
|
||||
# define DPRINT(S) { printf("Debug: %s\n",S); }
|
||||
# define DMPRINT(S,I,J,K) { printf(S,I,J,K); }
|
||||
#else
|
||||
# define DPRINT(S)
|
||||
# define DMPRINT(SI,J,K)
|
||||
#endif
|
||||
|
||||
#define INFINITY 1e100
|
||||
|
||||
#define MAX_NUMBER_OF_PARAMETERS 10
|
||||
#define MAX_TREE_DEPTH 20
|
||||
|
||||
#define MAX_STACK_ENTRIES 1000 /* max number of operators in one expression
|
||||
I hope it is enough :-) */
|
||||
|
||||
typedef double DBL;
|
||||
typedef struct expr_node_struct NODE;
|
||||
typedef struct func_info_struct FUNC_INFO;
|
||||
|
||||
typedef void (func_type)(void);
|
||||
|
||||
typedef func_type (*expr_func[3]);
|
||||
|
||||
|
||||
struct func_info_struct {
|
||||
char *name;
|
||||
|
||||
|
||||
char nofp; /* number of parameters, nofp < 0 -=> arbitrary number of parameters */
|
||||
char nofd; /* number of data entries (doubles) - for vectors and doubles nofp==0 || nofd==0 */
|
||||
char ret_type; /* type of return: 1,3,4, -1 (whatever) */
|
||||
char *paramtypes;
|
||||
|
||||
expr_func *funcs;
|
||||
expr_func last_func; /* this function is inserted to the stack as last... */
|
||||
};
|
||||
|
||||
struct expr_node_struct {
|
||||
FUNC_INFO *op;
|
||||
|
||||
DBL data[4]; /* float values - such as constants and vectors ((rgb) or (rgbt) vectors) */
|
||||
NODE *offsprings[MAX_NUMBER_OF_PARAMETERS]; /* too lazy to mallocate.... */
|
||||
int noo; /* number of offsprings in expression tree */
|
||||
char tof; /* type of return,.. */
|
||||
};
|
||||
|
||||
struct expr_compiled_struct {
|
||||
func_type *funcs;
|
||||
DBL *data;
|
||||
NODE *nodes;
|
||||
};
|
||||
|
||||
extern FUNC_INFO FuncInfo[];
|
||||
extern int Number_of_Functions;
|
||||
|
||||
extern DBL x_val, y_val;
|
||||
|
||||
void eval_xy( DBL *, DBL, DBL);
|
||||
void prepare_node( NODE *n);
|
||||
NODE *node_copy(NODE *n);
|
||||
void destroy_node( NODE *n);
|
||||
void expr_fprint( FILE *, int, NODE *);
|
||||
int expr_sprint(char *s, NODE *n);
|
||||
|
||||
/*
|
||||
Some useful functions
|
||||
*/
|
||||
|
||||
NODE *parse_prefix_expression(char **string);
|
||||
|
||||
DBL dblrand();
|
||||
void init_random();
|
||||
void expr_init();
|
||||
DBL solid_noise (DBL, DBL);
|
||||
|
||||
DBL double_and (DBL p1, DBL p2);
|
||||
DBL double_xor (DBL p1, DBL p2);
|
||||
DBL double_or (DBL p1, DBL p2);
|
||||
|
||||
|
||||
/* this pointers are necessary for computation */
|
||||
|
||||
extern NODE **n_top;
|
||||
extern DBL *r_top, *g_top, *b_top,* alfa_top;
|
||||
extern DBL *data_top;
|
||||
|
||||
/* wrapping functions - serve to project interval <-infty,infty> into <0..255> */
|
||||
/* simple: real to color... */
|
||||
|
||||
extern unsigned char (*wrap_func)(DBL);
|
||||
|
||||
unsigned char wrap_func_cut(DBL);
|
||||
unsigned char wrap_func_rep(DBL);
|
||||
unsigned char wrap_func_pingpong(DBL);
|
||||
|
||||
#endif
|
|
@ -1,150 +0,0 @@
|
|||
PRINT < END
|
||||
/*
|
||||
WARNING: This file is generated automaticaly from expressions.tmpl
|
||||
- all changes you made into this file will be distarded in next
|
||||
recompilation!
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
#include "expressions.h"
|
||||
|
||||
void ex_push_const(void);
|
||||
void ex_push_vector3(void);
|
||||
void ex_push_vector4(void);
|
||||
void ex_push_color_noise(void);
|
||||
void ex_push_color_noise_xy(void);
|
||||
|
||||
void warp_abs_push_xy();
|
||||
void warp_rel_push_xy();
|
||||
void pop_xy();
|
||||
|
||||
END
|
||||
|
||||
|
||||
TABLE FuncInfo < END_TABLE
|
||||
// N - arbitrary number of parameters, 1<= N <= MAX_NUMBER_OF_PARAMETERS
|
||||
// or arbitrary (return|parameter) type
|
||||
// R - return value, P?, P0...PN parameters, NOP - not yet implemented
|
||||
// name nof[pd] altstring ret_types paramtypes func0 code
|
||||
|
||||
const 0 1 "" 1 - LAST( ex_push_const )
|
||||
|
||||
vector3 0 3 "" 3 - LAST( ex_push_vector3 )
|
||||
vector4 0 4 "" 4 - LAST( ex_push_vector4 )
|
||||
|
||||
|
||||
x 0 0 - 1 - RETURN{{ x_val }}
|
||||
y 0 0 - 1 - RETURN{{ y_val }}
|
||||
|
||||
|
||||
plus N 0 "+" N - INIT{{R=P0;}} BODY{{1..N-1, R+= P?; }}
|
||||
minus 2 0 "-" N - RETURN{{ P0-P1 }}
|
||||
mult N 0 "*" N - INIT{{R=P0;}} BODY{{1..N-1, R*= P?; }}
|
||||
div 2 0 "/" N - RETURN{{ (P1!=0.0)?P0/P1:INFINITY }}
|
||||
// mod 2 0 "%" N - RETURN{{ 0.0; /*HOW TO IMPLEMENT IT ?? */ }}
|
||||
|
||||
min N 0 - N - INIT{{R=P0;}} BODY{{1..N-1, if (R>P?) R=P?; }}
|
||||
max N 0 - N - INIT{{R=P0;}} BODY{{1..N-1, if (R<P?) R=P?; }}
|
||||
|
||||
|
||||
and N 0 "&" N - INIT{{R=P0;}} BODY{{1..N-1,R=double_and(R,P?);}}
|
||||
or N 0 "|" N - INIT{{R=P0;}} BODY{{1..N-1,R=double_or (R,P?);}}
|
||||
xor N 0 "^" N - INIT{{R=P0;}} BODY{{1..N-1,R=double_xor(R,P?);}}
|
||||
|
||||
// bw_noise_xy 0 0 "bw-noise-xy" 1 - RETURN{{ solid_noise(x_val,y_val) }}
|
||||
bw_noise 2 0 "bw-noise" 1 11 RETURN{{ solid_noise( P0, P1) }}
|
||||
|
||||
// color_noise_xy 0 0 "color-noise-xy" 3 - LAST ( ex_push_color_noise_xy )
|
||||
color_noise 2 0 "color-noise" 3 11 LAST ( ex_push_color_noise )
|
||||
|
||||
warp_abs 3 0 "warp-abs" N 11N PUSH2(warp_abs_push_xy) PUSH3(pop_xy)
|
||||
warp_rel 3 0 "warp-rel" N 11N PUSH2(warp_rel_push_xy) PUSH3(pop_xy)
|
||||
|
||||
// boring functions :-)
|
||||
floor 1 0 - N - RETURN{{ floor(P0) }}
|
||||
abs 1 0 - N - RETURN{{ fabs(P0) }}
|
||||
|
||||
exp 1 0 - N - RETURN{{ exp(P0) }}
|
||||
log 1 0 - N - RETURN{{ log(P0) }}
|
||||
pow 2 0 - N - RETURN{{ pow(P0,P1) }}
|
||||
|
||||
sin 1 0 - N - RETURN{{ sin(P0) }}
|
||||
cos 1 0 - N - RETURN{{ cos(P0) }}
|
||||
atan 1 0 - N - RETURN{{ atan(P0) }}
|
||||
END_TABLE
|
||||
|
||||
// flush all definition, tables etc to expr_pgen.c
|
||||
|
||||
FLUSH
|
||||
|
||||
// other functions...
|
||||
PRINT < END
|
||||
|
||||
void ex_push_const(void)
|
||||
{
|
||||
r_top++; *r_top= *data_top; data_top++;
|
||||
}
|
||||
|
||||
void ex_push_vector3(void)
|
||||
{
|
||||
r_top++; *r_top= *data_top; data_top++;
|
||||
g_top++; *g_top= *data_top; data_top++;
|
||||
b_top++; *b_top= *data_top; data_top++;
|
||||
}
|
||||
|
||||
void ex_push_vector4(void)
|
||||
{
|
||||
r_top++; *r_top= *data_top; data_top++;
|
||||
g_top++; *g_top= *data_top; data_top++;
|
||||
b_top++; *b_top= *data_top; data_top++;
|
||||
alfa_top++; *alfa_top= *data_top; data_top++;
|
||||
}
|
||||
|
||||
void ex_push_color_noise(void)
|
||||
{
|
||||
r_top--; *r_top= solid_noise(r_top[0]+128.,r_top[1]+199.);
|
||||
g_top--; *g_top= solid_noise(g_top[0]+232.,g_top[1]+ 74.);
|
||||
b_top--; *b_top= solid_noise(b_top[0]+312.,b_top[1]+ 32.);
|
||||
}
|
||||
|
||||
void ex_push_color_noise_xy(void)
|
||||
{
|
||||
r_top++; *r_top= solid_noise(x_val+128.,y_val+199.);
|
||||
g_top++; *g_top= solid_noise(x_val+232.,y_val+ 74.);
|
||||
b_top++; *b_top= solid_noise(x_val+312.,y_val+ 32.);
|
||||
}
|
||||
|
||||
static DBL x_stack[MAX_TREE_DEPTH];
|
||||
static DBL y_stack[MAX_TREE_DEPTH];
|
||||
|
||||
static DBL *xptr = x_stack,
|
||||
*yptr = y_stack;
|
||||
|
||||
void warp_abs_push_xy()
|
||||
{
|
||||
*xptr= x_val; xptr++;
|
||||
*yptr= y_val; yptr++;
|
||||
|
||||
x_val= *r_top; r_top--;
|
||||
y_val= *r_top; r_top--;
|
||||
}
|
||||
|
||||
void warp_rel_push_xy()
|
||||
{
|
||||
*xptr= x_val; xptr++;
|
||||
*yptr= y_val; yptr++;
|
||||
|
||||
x_val+= *r_top; r_top--;
|
||||
y_val+= *r_top; r_top--;
|
||||
}
|
||||
|
||||
void pop_xy()
|
||||
{
|
||||
xptr--; yptr--;
|
||||
x_val= *xptr; y_val= *yptr;
|
||||
}
|
||||
END
|
||||
|
||||
|
||||
END_OF_FILE
|
|
@ -1,728 +0,0 @@
|
|||
#include <strings.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "gag.h"
|
||||
|
||||
#define LIB_DATA "lib_data"
|
||||
|
||||
|
||||
typedef struct library_entry_struct LENTRY;
|
||||
struct library_entry_struct {
|
||||
NODE *expression;
|
||||
GtkWidget *list_item;
|
||||
GtkWidget *label;
|
||||
|
||||
char name [30];
|
||||
LENTRY *Next;
|
||||
};
|
||||
static LENTRY *Library= NULL;
|
||||
static LENTRY *CurrentLentry=NULL;
|
||||
|
||||
static ENTRY_DIALOG SaveWindow= {NULL, NULL, NULL};
|
||||
static ENTRY_DIALOG RenameWindow= {NULL, NULL, NULL};
|
||||
|
||||
static int save_counter=1;
|
||||
|
||||
static struct {
|
||||
GtkWidget *window;
|
||||
GtkWidget *list;
|
||||
GtkWidget *popup_menu;
|
||||
GtkWidget *preview;
|
||||
GtkWidget *progress;
|
||||
INDIVIDUAL *ind;
|
||||
} LibraryWin= {NULL, NULL, NULL, NULL, NULL, NULL};
|
||||
|
||||
void gag_destroy_window(GtkWidget *, gpointer);
|
||||
void gag_cancel_button(GtkWidget *, gpointer);
|
||||
void gag_hide_window(GtkWidget *widget, gpointer data);
|
||||
|
||||
void gag_add_lentry_2_list( LENTRY *n )
|
||||
{
|
||||
GtkWidget *label;
|
||||
GtkWidget *list_item;
|
||||
|
||||
if (LibraryWin.window == NULL) return;
|
||||
|
||||
label= gtk_label_new(n->name);
|
||||
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
|
||||
list_item= gtk_list_item_new( );
|
||||
gtk_container_add(GTK_CONTAINER(list_item),label);
|
||||
gtk_container_add(GTK_CONTAINER(LibraryWin.list),
|
||||
list_item);
|
||||
gtk_object_set_data( GTK_OBJECT(list_item), LIB_DATA, n);
|
||||
n->list_item= list_item;
|
||||
n->label= label;
|
||||
gtk_widget_show(label);
|
||||
gtk_widget_show(list_item);
|
||||
}
|
||||
|
||||
void SaveWindow_callback(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
LENTRY **ptr= &Library, *n;
|
||||
|
||||
if (SaveWindow.ind->expression == NULL)
|
||||
return;
|
||||
|
||||
if (GTK_WIDGET_VISIBLE( SaveWindow.dialog ))
|
||||
gtk_widget_hide( SaveWindow.dialog);
|
||||
|
||||
n= (LENTRY *) malloc(sizeof(LENTRY));
|
||||
n-> expression= node_copy( SaveWindow.ind->expression );
|
||||
strncpy(n->name,GTK_ENTRY( SaveWindow.entry )->text, 29);
|
||||
n-> Next= NULL;
|
||||
|
||||
while (*ptr != NULL) ptr= &( (*ptr)->Next );
|
||||
*ptr= n;
|
||||
|
||||
gag_add_lentry_2_list( n );
|
||||
}
|
||||
|
||||
void gag_show_save_dialog(GtkWidget *w, gpointer data)
|
||||
{
|
||||
if (SaveWindow.dialog == NULL)
|
||||
gag_create_entry(&SaveWindow, "Enter name of expression",
|
||||
GTK_SIGNAL_FUNC(SaveWindow_callback));
|
||||
|
||||
if (!(GTK_WIDGET_VISIBLE(SaveWindow.dialog)))
|
||||
{
|
||||
char buff[20];
|
||||
|
||||
sprintf(buff,"Noname%0d",save_counter++);
|
||||
gtk_entry_set_text(GTK_ENTRY(SaveWindow.entry),buff);
|
||||
SaveWindow.ind= ui.popup_individual;
|
||||
gtk_widget_show(SaveWindow.dialog);
|
||||
}
|
||||
}
|
||||
|
||||
/******************************
|
||||
|
||||
Main Library window
|
||||
|
||||
******************************/
|
||||
void gag_lib_Copy( GtkWidget *widget, gpointer data)
|
||||
{
|
||||
}
|
||||
|
||||
void gag_lib_Delete( GtkWidget *widget, gpointer data)
|
||||
{
|
||||
LENTRY **ptr= &Library, *n;
|
||||
|
||||
while (*ptr != NULL)
|
||||
{
|
||||
if (*ptr == CurrentLentry) break;
|
||||
ptr= &( (*ptr)->Next );
|
||||
}
|
||||
if (ptr != NULL)
|
||||
{
|
||||
GList *tmp;
|
||||
n= *ptr;
|
||||
|
||||
*ptr= n->Next;
|
||||
|
||||
tmp->data= n->list_item;
|
||||
tmp->prev= tmp->next= NULL;
|
||||
gtk_list_remove_items (GTK_LIST (LibraryWin.list),tmp);
|
||||
|
||||
gtk_widget_destroy(n->list_item);
|
||||
free( n );
|
||||
}
|
||||
}
|
||||
|
||||
static void RenameWindow_callback( GtkWidget *widget, gpointer *data)
|
||||
{
|
||||
LENTRY *lptr;
|
||||
|
||||
if (GTK_WIDGET_VISIBLE( RenameWindow.dialog ))
|
||||
gtk_widget_hide( RenameWindow.dialog);
|
||||
|
||||
lptr= (LENTRY *) (RenameWindow.ind);
|
||||
strncpy(lptr->name, GTK_ENTRY( RenameWindow.entry )->text, 29);
|
||||
gtk_label_set(GTK_LABEL(lptr->label), lptr->name);
|
||||
gtk_widget_draw(lptr->label, NULL);
|
||||
}
|
||||
|
||||
void gag_lib_Rename( GtkWidget *widget, gpointer data)
|
||||
{
|
||||
if (RenameWindow.dialog == NULL)
|
||||
gag_create_entry(&RenameWindow, "Enter name of expression",
|
||||
GTK_SIGNAL_FUNC(RenameWindow_callback));
|
||||
|
||||
if (!(GTK_WIDGET_VISIBLE(RenameWindow.dialog)))
|
||||
{
|
||||
gtk_entry_set_text(GTK_ENTRY(RenameWindow.entry),CurrentLentry->name);
|
||||
RenameWindow.ind= (INDIVIDUAL *) CurrentLentry;
|
||||
gtk_widget_show(RenameWindow.dialog);
|
||||
}
|
||||
}
|
||||
|
||||
void gag_lib_Evoke( GtkWidget *widget, gpointer data)
|
||||
{
|
||||
destroy_node(LibraryWin.ind->expression);
|
||||
LibraryWin.ind->expression= node_copy( CurrentLentry->expression );
|
||||
gag_repaint_ind( NULL, LibraryWin.ind, 0);
|
||||
|
||||
ui.repaint_preview = TRUE;
|
||||
}
|
||||
|
||||
void gag_lib_render_pic( GtkWidget *widget, gpointer data)
|
||||
{
|
||||
INDIVIDUAL tmp, *tmpptr;
|
||||
|
||||
tmpptr= &tmp;
|
||||
tmp.expression= CurrentLentry->expression;
|
||||
gag_render_picture_ptr(NULL, &tmpptr);
|
||||
}
|
||||
|
||||
static void gag_Create_FS(GtkWidget **window, char *label,
|
||||
void *ok_cb)
|
||||
{
|
||||
*window = gtk_file_selection_new ("file selection dialog");
|
||||
gtk_window_position (GTK_WINDOW (*window), GTK_WIN_POS_MOUSE);
|
||||
gtk_signal_connect (GTK_OBJECT (*window), "destroy",
|
||||
(GtkSignalFunc)gag_destroy_window,
|
||||
window);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (*window)->ok_button),
|
||||
"clicked", (GtkSignalFunc ) ok_cb,
|
||||
*window);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (*window)->ok_button),
|
||||
"clicked", (GtkSignalFunc ) gag_hide_window,
|
||||
*window);
|
||||
|
||||
gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (*window)->cancel_button),
|
||||
"clicked", (GtkSignalFunc) gtk_widget_destroy,
|
||||
GTK_OBJECT (*window));
|
||||
}
|
||||
|
||||
|
||||
static void gag_lib_load_cb(GtkWidget *widget, GtkWidget *fs)
|
||||
{
|
||||
DPRINT("Loading Library");
|
||||
gag_load_library(
|
||||
gtk_file_selection_get_filename(GTK_FILE_SELECTION (fs))
|
||||
);
|
||||
}
|
||||
|
||||
static void gag_lib_save_cb(GtkWidget *widget, GtkWidget *fs)
|
||||
{
|
||||
gag_save_library(
|
||||
gtk_file_selection_get_filename(GTK_FILE_SELECTION (fs))
|
||||
);
|
||||
}
|
||||
|
||||
static void gag_lib_Load( GtkWidget *widget, gpointer data)
|
||||
{
|
||||
static GtkWidget *LoadWin= NULL;
|
||||
|
||||
if (LoadWin==NULL)
|
||||
gag_Create_FS(&LoadWin, "Load Library", (void *)gag_lib_load_cb);
|
||||
|
||||
if (!(GTK_WIDGET_VISIBLE(LoadWin)))
|
||||
gtk_widget_show(LoadWin);
|
||||
}
|
||||
|
||||
void gag_lib_Save( GtkWidget *widget, gpointer data)
|
||||
{
|
||||
static GtkWidget *SaveWin= NULL;
|
||||
|
||||
if (SaveWin==NULL)
|
||||
gag_Create_FS(&SaveWin, "Save Library as", (void *)gag_lib_save_cb);
|
||||
|
||||
if (!(GTK_WIDGET_VISIBLE(SaveWin)))
|
||||
gtk_widget_show(SaveWin);
|
||||
}
|
||||
|
||||
|
||||
int gag_lib_popup (GtkWidget *widget, GdkEventButton *event,
|
||||
gpointer user_data)
|
||||
{
|
||||
GtkWidget *event_widget;
|
||||
GdkEventButton *bevent;
|
||||
|
||||
event_widget = gtk_get_event_widget ((GdkEvent*) event);
|
||||
|
||||
|
||||
|
||||
bevent= (GdkEventButton *)event;
|
||||
|
||||
switch (event->type)
|
||||
{
|
||||
case GDK_2BUTTON_PRESS:
|
||||
switch (bevent->button)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
INDIVIDUAL i;
|
||||
LENTRY *lptr;
|
||||
|
||||
lptr= gtk_object_get_data( GTK_OBJECT(event_widget),
|
||||
LIB_DATA);
|
||||
|
||||
i.preview= LibraryWin.preview;
|
||||
i.expression= lptr->expression;
|
||||
|
||||
gag_repaint_ind( LibraryWin.progress, &i,1);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case GDK_BUTTON_PRESS:
|
||||
if (bevent->button==3)
|
||||
{
|
||||
CurrentLentry=
|
||||
gtk_object_get_data( GTK_OBJECT(event_widget),
|
||||
LIB_DATA);
|
||||
gtk_menu_popup( GTK_MENU(LibraryWin.popup_menu),NULL, NULL,
|
||||
NULL,NULL, 3, bevent->time);
|
||||
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void gag_library_show(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
if (LibraryWin.popup_menu == NULL)
|
||||
{
|
||||
GtkMenu *menu;
|
||||
GtkWidget *menuitem;
|
||||
|
||||
menu= GTK_MENU( gtk_menu_new () );
|
||||
|
||||
/* for now this seems needless
|
||||
|
||||
menuitem= gtk_menu_item_new_with_label("Copy");
|
||||
gtk_signal_connect( GTK_OBJECT(menuitem), "activate",
|
||||
(GtkSignalFunc) gag_lib_Copy, NULL);
|
||||
gtk_menu_append(menu, menuitem);
|
||||
gtk_widget_show( menuitem );
|
||||
*/
|
||||
|
||||
menuitem= gtk_menu_item_new_with_label("Evoke");
|
||||
gtk_signal_connect( GTK_OBJECT(menuitem), "activate",
|
||||
(GtkSignalFunc) gag_lib_Evoke, NULL);
|
||||
gtk_menu_append(menu, menuitem);
|
||||
gtk_widget_show( menuitem );
|
||||
|
||||
if (gag_render_picture_ptr != NULL)
|
||||
{
|
||||
menuitem= gtk_menu_item_new_with_label("Render picture");
|
||||
gtk_signal_connect( GTK_OBJECT(menuitem), "activate",
|
||||
(GtkSignalFunc) gag_lib_render_pic,
|
||||
NULL);
|
||||
gtk_menu_append(menu, menuitem);
|
||||
gtk_widget_show( menuitem );
|
||||
}
|
||||
|
||||
menuitem= gtk_menu_item_new();
|
||||
gtk_menu_append( menu, menuitem);
|
||||
gtk_widget_show( menuitem );
|
||||
|
||||
menuitem= gtk_menu_item_new_with_label("Rename");
|
||||
gtk_signal_connect( GTK_OBJECT(menuitem), "activate",
|
||||
(GtkSignalFunc) gag_lib_Rename, NULL);
|
||||
gtk_menu_append(menu, menuitem);
|
||||
gtk_widget_show( menuitem );
|
||||
|
||||
menuitem= gtk_menu_item_new_with_label("Delete");
|
||||
gtk_signal_connect( GTK_OBJECT(menuitem), "activate",
|
||||
(GtkSignalFunc) gag_lib_Delete, NULL);
|
||||
gtk_menu_append(menu, menuitem);
|
||||
gtk_widget_show( menuitem );
|
||||
|
||||
menuitem= gtk_menu_item_new();
|
||||
gtk_menu_append( menu, menuitem);
|
||||
gtk_widget_show( menuitem );
|
||||
|
||||
menuitem= gtk_menu_item_new_with_label("Load from file");
|
||||
gtk_signal_connect( GTK_OBJECT(menuitem), "activate",
|
||||
(GtkSignalFunc) gag_lib_Load, NULL);
|
||||
gtk_menu_append(menu, menuitem);
|
||||
gtk_widget_show( menuitem );
|
||||
|
||||
menuitem= gtk_menu_item_new_with_label("Save to file");
|
||||
gtk_signal_connect( GTK_OBJECT(menuitem), "activate",
|
||||
(GtkSignalFunc) gag_lib_Save, NULL);
|
||||
gtk_menu_append(menu, menuitem);
|
||||
gtk_widget_show( menuitem );
|
||||
|
||||
LibraryWin.popup_menu= GTK_WIDGET(menu);
|
||||
}
|
||||
|
||||
if (LibraryWin.window == NULL)
|
||||
{
|
||||
GtkWidget *window;
|
||||
GtkWidget *hbox, *vbox;
|
||||
GtkWidget *list;
|
||||
GtkWidget *preview;
|
||||
GtkWidget *scwin;
|
||||
GtkWidget *frame;
|
||||
GtkWidget *button;
|
||||
GtkWidget *progress;
|
||||
|
||||
LENTRY *lptr;
|
||||
|
||||
gtk_widget_push_visual( gtk_preview_get_visual ());
|
||||
gtk_widget_push_colormap (gtk_preview_get_cmap());
|
||||
|
||||
window= gtk_window_new( GTK_WINDOW_TOPLEVEL );
|
||||
gtk_signal_connect( GTK_OBJECT(window), "destroy",
|
||||
(GtkSignalFunc) gag_destroy_window,
|
||||
&(LibraryWin.window));
|
||||
gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, TRUE);
|
||||
gtk_window_set_title( GTK_WINDOW(window),"GAG Library");
|
||||
LibraryWin.window= window;
|
||||
|
||||
hbox= gtk_hbox_new(FALSE, 10);
|
||||
gtk_container_border_width( GTK_CONTAINER(hbox),10);
|
||||
gtk_container_add(GTK_CONTAINER(window), hbox);
|
||||
|
||||
scwin= gtk_scrolled_window_new( NULL, NULL );
|
||||
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scwin),
|
||||
GTK_POLICY_AUTOMATIC,
|
||||
GTK_POLICY_AUTOMATIC);
|
||||
|
||||
gtk_widget_set_usize( scwin, 300, 150);
|
||||
gtk_box_pack_start( GTK_BOX(hbox), scwin, TRUE, TRUE, TRUE);
|
||||
|
||||
LibraryWin.list= list= gtk_list_new();
|
||||
gtk_list_set_selection_mode (GTK_LIST (list),
|
||||
GTK_SELECTION_BROWSE);
|
||||
gtk_container_add( GTK_CONTAINER(scwin), list);
|
||||
gtk_signal_connect(GTK_OBJECT( list ), "button_press_event",
|
||||
(GtkSignalFunc)gag_lib_popup, NULL);
|
||||
gtk_widget_show( list );
|
||||
gtk_widget_show(scwin);
|
||||
|
||||
|
||||
vbox= gtk_vbox_new(FALSE, 5);
|
||||
gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE,0);
|
||||
|
||||
frame= gtk_frame_new(NULL);
|
||||
gtk_frame_set_shadow_type(GTK_FRAME(frame),
|
||||
GTK_SHADOW_IN);
|
||||
gtk_box_pack_start( GTK_BOX(vbox), frame,
|
||||
FALSE, FALSE, FALSE);
|
||||
|
||||
LibraryWin.preview= preview= gtk_preview_new( PREVIEW_MODE );
|
||||
gtk_preview_size( GTK_PREVIEW(preview),
|
||||
PREVIEW_WIDTH, PREVIEW_HEIGHT);
|
||||
gtk_container_add( GTK_CONTAINER(frame), preview );
|
||||
gtk_widget_show( preview );
|
||||
gtk_widget_show( frame );
|
||||
|
||||
button= gtk_button_new_with_label("Close");
|
||||
gtk_box_pack_end(GTK_BOX(vbox), button, FALSE, FALSE, 0);
|
||||
gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc) gag_cancel_button,(gpointer)window);
|
||||
gtk_widget_show(button);
|
||||
|
||||
progress= gtk_progress_bar_new();
|
||||
gtk_widget_set_usize(progress, 80, 20);
|
||||
gtk_box_pack_end(GTK_BOX(vbox), progress,
|
||||
FALSE, FALSE, 0);
|
||||
LibraryWin.progress=progress;
|
||||
gtk_widget_show( progress );
|
||||
|
||||
gtk_widget_show( vbox );
|
||||
for (lptr=Library; lptr != NULL; lptr= lptr->Next)
|
||||
gag_add_lentry_2_list( lptr );
|
||||
|
||||
gtk_widget_show( hbox );
|
||||
}
|
||||
|
||||
if (!(GTK_WIDGET_VISIBLE(LibraryWin.window)))
|
||||
{
|
||||
gtk_widget_show(LibraryWin.window);
|
||||
}
|
||||
LibraryWin.ind= ui.popup_individual;
|
||||
}
|
||||
|
||||
/******************************
|
||||
|
||||
GAG LIB LOAD/SAVE functions
|
||||
|
||||
******************************/
|
||||
|
||||
void translate_name2esc(char *s, char *d)
|
||||
{
|
||||
while ( (*d=*s) != '\000')
|
||||
{
|
||||
if (*d == '\\'){ d++; *d='\\'; }
|
||||
if (*d == '"') { *d='\\'; d++; *d='"'; }
|
||||
d++;
|
||||
s++;
|
||||
}
|
||||
}
|
||||
|
||||
void gag_save_library(char *file)
|
||||
{
|
||||
FILE *f;
|
||||
LENTRY *lptr;
|
||||
char buff[100];
|
||||
|
||||
lptr= Library;
|
||||
|
||||
f= fopen( file, "wt");
|
||||
|
||||
fprintf(f,";;; GAG Library file\n\n");
|
||||
|
||||
while (lptr != NULL)
|
||||
{
|
||||
translate_name2esc(lptr->name, buff);
|
||||
fprintf(f, "(insert-to-library \"%s\" \n", buff);
|
||||
expr_fprint(f, 2, lptr->expression);
|
||||
fprintf(f, ") ;;; end of function\n\n");
|
||||
lptr= lptr->Next;
|
||||
}
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
static void string_convert(char *line, char *pline, char *name)
|
||||
{
|
||||
int state=0; /* 0 - ok, 1 - inside string */
|
||||
guchar prevchar=0;
|
||||
|
||||
while ((*pline= *line) != 0)
|
||||
{
|
||||
if ((state == 0)&&(*line==';'))
|
||||
{ *pline = '\000'; return; }
|
||||
|
||||
pline++;
|
||||
|
||||
if ((state==0)&&(*line=='"'))
|
||||
{ state=1; line++; continue; }
|
||||
|
||||
if ((state==1)&&(prevchar!='\\')&&(*line=='"'))
|
||||
{ state=0; *name= '\000'; line++; continue; }
|
||||
|
||||
if (state==1)
|
||||
{
|
||||
switch (prevchar)
|
||||
{
|
||||
case '\\':
|
||||
switch (*line)
|
||||
{
|
||||
case '"': case '\\':
|
||||
*(name-1)= *line;
|
||||
break;
|
||||
default:
|
||||
printf("Warning: Unknown prefix");
|
||||
break;
|
||||
}
|
||||
prevchar='\000';
|
||||
break;
|
||||
default:
|
||||
*name= *line; ++name; break;
|
||||
}
|
||||
}
|
||||
prevchar= *line;
|
||||
line++;
|
||||
}
|
||||
|
||||
if (state!=0)
|
||||
{
|
||||
printf("Error: Unterminated string constant: %s\n",line);
|
||||
}
|
||||
}
|
||||
|
||||
static void readln(FILE *f, guchar *str, int max)
|
||||
{
|
||||
int z;
|
||||
|
||||
do {
|
||||
if ((z= fgetc(f))==EOF) break;
|
||||
|
||||
if ((z == '\n') || (z=='\r') || (z=='\f') || (z=='\v'))
|
||||
break;
|
||||
else
|
||||
*str= (guchar) z;
|
||||
str++;
|
||||
max--;
|
||||
} while (max);
|
||||
*str='\000';
|
||||
}
|
||||
|
||||
void gag_load_library(char *file)
|
||||
{
|
||||
FILE *f;
|
||||
char *buff, *s;
|
||||
|
||||
char line[500];
|
||||
char smbuff[500];
|
||||
char name[30], tmp[100];
|
||||
int state=0; /* 0 - waiting, 1 - recieving */
|
||||
int ll;
|
||||
|
||||
NODE *n;
|
||||
LENTRY *v, **head;
|
||||
|
||||
DPRINT("Loading library...");
|
||||
|
||||
head= &Library;
|
||||
while (*head != NULL) head= &((*head)->Next);
|
||||
|
||||
if ((f= fopen(file, "rt"))==NULL) return;
|
||||
|
||||
buff= malloc(200*1000); /* oh - we are lazy programmers !!!) */
|
||||
|
||||
while (! (feof(f)))
|
||||
{
|
||||
readln(f, (guchar *) line, 499);
|
||||
|
||||
string_convert(line, smbuff, tmp);
|
||||
if (smbuff[0]=='\000') continue;
|
||||
|
||||
if (state == 0)
|
||||
{
|
||||
if (strncmp(smbuff,"(insert-to-library ",18 )==0)
|
||||
{
|
||||
strncpy(name, tmp, 30);
|
||||
state=1;
|
||||
|
||||
s= buff;
|
||||
memset(buff, ' ', 200*1000);
|
||||
|
||||
continue;
|
||||
}
|
||||
printf("Error: unexpected line %s\n", line);
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (strncmp(line, ") ;;; end of function",20)==0)
|
||||
{
|
||||
s= buff;
|
||||
n= parse_prefix_expression(&s);
|
||||
if (n==NULL) goto end_of_loading;
|
||||
v= (LENTRY *) malloc(sizeof(LENTRY));
|
||||
|
||||
v->expression= n;
|
||||
v->Next=NULL;
|
||||
v->list_item=NULL;
|
||||
|
||||
strncpy(v->name, name, 30);
|
||||
gag_add_lentry_2_list( v );
|
||||
|
||||
*head= v;
|
||||
head= & (v->Next);
|
||||
|
||||
state=0;
|
||||
continue;
|
||||
}
|
||||
*(s++)= ' ';
|
||||
ll= strlen (smbuff);
|
||||
strcpy(s, smbuff);
|
||||
s+= ll;
|
||||
}
|
||||
} /* end of while */
|
||||
|
||||
if (state == 1)
|
||||
{
|
||||
printf("Error: corrupted library\n");
|
||||
}
|
||||
|
||||
end_of_loading:
|
||||
if (f!= NULL) fclose( f);
|
||||
if (buff != NULL) free (buff);
|
||||
}
|
||||
|
||||
/******************************
|
||||
|
||||
MISC FUNCTIONS
|
||||
|
||||
******************************/
|
||||
|
||||
void gag_hide_window(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
GtkWidget *tmp;
|
||||
|
||||
tmp= (GtkWidget *) data;
|
||||
if (GTK_WIDGET_VISIBLE(tmp))
|
||||
gtk_widget_hide(tmp);
|
||||
}
|
||||
|
||||
void gag_destroy_window(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
GtkWidget **tmp;
|
||||
|
||||
tmp= (GtkWidget **) data;
|
||||
*tmp= NULL;
|
||||
}
|
||||
|
||||
void gag_cancel_button(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
if (GTK_WIDGET_VISIBLE (GTK_WIDGET(data)))
|
||||
gtk_widget_hide (GTK_WIDGET(data));
|
||||
}
|
||||
|
||||
void gag_clear_entry(GtkWidget *widget, GtkEntry *entry)
|
||||
{
|
||||
gtk_entry_set_text(entry, "");
|
||||
}
|
||||
|
||||
void gag_create_entry( ENTRY_DIALOG *ed, char *title, GtkSignalFunc OkFunc )
|
||||
{
|
||||
GtkWidget *dialog;
|
||||
GtkWidget *button;
|
||||
GtkWidget *entry;
|
||||
GtkWidget *vb;
|
||||
|
||||
dialog= gtk_dialog_new();
|
||||
ed->dialog= dialog;
|
||||
gtk_signal_connect( GTK_OBJECT(dialog), "destroy",
|
||||
(GtkSignalFunc)gag_destroy_window,
|
||||
&(ed->dialog));
|
||||
gtk_window_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE);
|
||||
gtk_container_border_width (GTK_CONTAINER (dialog), 0);
|
||||
gtk_window_set_title(GTK_WINDOW(dialog), title);
|
||||
|
||||
vb= gtk_vbox_new(TRUE, 0);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), vb,
|
||||
TRUE, TRUE,0);
|
||||
gtk_container_border_width( GTK_CONTAINER(vb), 10);
|
||||
|
||||
entry= gtk_entry_new();
|
||||
gtk_widget_set_usize( entry, 400, 0);
|
||||
gtk_box_pack_start( GTK_BOX(vb), entry, TRUE, TRUE,0);
|
||||
ed->entry=entry;
|
||||
gtk_widget_show(entry);
|
||||
|
||||
gtk_widget_show( vb );
|
||||
|
||||
button= gtk_button_new_with_label("OK");
|
||||
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
|
||||
gtk_box_pack_start( GTK_BOX(GTK_DIALOG(dialog)->action_area),
|
||||
button, TRUE, TRUE,0);
|
||||
gtk_signal_connect( GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc) OkFunc,
|
||||
NULL);
|
||||
gtk_widget_grab_default (button);
|
||||
gtk_widget_show(button);
|
||||
|
||||
button= gtk_button_new_with_label("Clear");
|
||||
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
|
||||
gtk_box_pack_start( GTK_BOX(GTK_DIALOG(dialog)->action_area),
|
||||
button, TRUE, TRUE,0);
|
||||
gtk_signal_connect( GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc) gag_clear_entry,
|
||||
entry);
|
||||
gtk_widget_show(button);
|
||||
|
||||
button= gtk_button_new_with_label("Cancel");
|
||||
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect( GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc) gag_cancel_button,
|
||||
GTK_OBJECT(dialog));
|
||||
gtk_box_pack_start( GTK_BOX(GTK_DIALOG(dialog)->action_area),
|
||||
button, TRUE, TRUE,0);
|
||||
gtk_widget_show(button);
|
||||
}
|
||||
|
|
@ -1,467 +0,0 @@
|
|||
;;; GAG Library file
|
||||
|
||||
(insert-to-library "Flying Squares"
|
||||
(warp-rel
|
||||
(-
|
||||
(x
|
||||
)
|
||||
#(0.44444681 0.97193527 0.42578522)
|
||||
)
|
||||
(*
|
||||
(^
|
||||
(min
|
||||
(&
|
||||
0.82485358
|
||||
#(0.83224947 0.17422043 0.66233956)
|
||||
)
|
||||
(-
|
||||
(x
|
||||
)
|
||||
0.25893793
|
||||
)
|
||||
0.12867575
|
||||
)
|
||||
(y
|
||||
)
|
||||
)
|
||||
(y
|
||||
)
|
||||
(sin
|
||||
(cos
|
||||
#(0.90425647 0.96978710 0.21997462 0.07494104)
|
||||
)
|
||||
)
|
||||
#(0.20500772 0.32187832 0.43460514)
|
||||
)
|
||||
(|
|
||||
(min
|
||||
(log
|
||||
(exp
|
||||
(pow
|
||||
(y
|
||||
)
|
||||
0.35515568
|
||||
)
|
||||
)
|
||||
)
|
||||
0.58370369
|
||||
(sin
|
||||
(y
|
||||
)
|
||||
)
|
||||
(warp-rel
|
||||
(bw-noise
|
||||
0.44122838
|
||||
(max
|
||||
#(0.89920081 0.49851355 0.78133999 0.95575322)
|
||||
(pow
|
||||
#(0.19685866 0.34161449 0.35425142 0.01396159)
|
||||
(y
|
||||
)
|
||||
)
|
||||
(&
|
||||
#(0.04591276 0.32702764 0.15522286)
|
||||
#(0.10592854 0.31207041 0.71185891 0.65909247)
|
||||
)
|
||||
(x
|
||||
)
|
||||
0.54248765
|
||||
)
|
||||
)
|
||||
(warp-rel
|
||||
#(0.06386282 0.31839952 0.90882038)
|
||||
(y
|
||||
)
|
||||
(x
|
||||
)
|
||||
)
|
||||
#(0.66559035 0.19648411 0.21890231)
|
||||
)
|
||||
(y
|
||||
)
|
||||
(x
|
||||
)
|
||||
#(0.84463173 0.83301204 0.64645189)
|
||||
(/
|
||||
(exp
|
||||
#(0.31365789 0.05391180 0.84437414)
|
||||
)
|
||||
(y
|
||||
)
|
||||
)
|
||||
)
|
||||
(y
|
||||
)
|
||||
(*
|
||||
(cos
|
||||
(x
|
||||
)
|
||||
)
|
||||
(x
|
||||
)
|
||||
)
|
||||
(floor
|
||||
#(0.59096615 0.75140411 0.21655562)
|
||||
)
|
||||
(floor
|
||||
#(0.04418634 0.82761218 0.15276587)
|
||||
)
|
||||
(x
|
||||
)
|
||||
)
|
||||
)
|
||||
) ;;; end of function
|
||||
|
||||
(insert-to-library "Psychedelic 1"
|
||||
(color-noise
|
||||
(abs
|
||||
(atan
|
||||
(color-noise
|
||||
(x
|
||||
)
|
||||
(y
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(atan
|
||||
(*
|
||||
#(0.61295671 0.13271869 0.87335081)
|
||||
(x
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
) ;;; end of function
|
||||
|
||||
(insert-to-library "Snakes"
|
||||
(-
|
||||
(cos
|
||||
(x
|
||||
)
|
||||
)
|
||||
(abs
|
||||
(bw-noise
|
||||
(x
|
||||
)
|
||||
(y
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
) ;;; end of function
|
||||
|
||||
(insert-to-library "Squares"
|
||||
(bw-noise
|
||||
(cos
|
||||
(min
|
||||
(y
|
||||
)
|
||||
(y
|
||||
)
|
||||
(*
|
||||
(exp
|
||||
#(0.05612199 0.24147436 0.50883352 0.75838913)
|
||||
)
|
||||
)
|
||||
(*
|
||||
(sin
|
||||
(y
|
||||
)
|
||||
)
|
||||
(^
|
||||
(color-noise
|
||||
0.50167595
|
||||
(cos
|
||||
#(0.81131558 0.37627794 0.60677281 0.77778070)
|
||||
)
|
||||
)
|
||||
0.66017742
|
||||
(warp-abs
|
||||
(y
|
||||
)
|
||||
(|
|
||||
(x
|
||||
)
|
||||
(x
|
||||
)
|
||||
)
|
||||
(max
|
||||
0.67116147
|
||||
(*
|
||||
#(0.48666294 0.00240638 0.61670145)
|
||||
(y
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(x
|
||||
)
|
||||
(x
|
||||
)
|
||||
)
|
||||
)
|
||||
0.54336364
|
||||
(*
|
||||
(max
|
||||
(&
|
||||
(y
|
||||
)
|
||||
0.48794530
|
||||
(y
|
||||
)
|
||||
#(0.23774273 0.03705954 0.45263552)
|
||||
(+
|
||||
0.03986225
|
||||
(x
|
||||
)
|
||||
)
|
||||
(x
|
||||
)
|
||||
#(0.67116070 0.77291162 0.45693066 0.79867740)
|
||||
)
|
||||
(y
|
||||
)
|
||||
)
|
||||
(pow
|
||||
(y
|
||||
)
|
||||
(y
|
||||
)
|
||||
)
|
||||
)
|
||||
(abs
|
||||
(^
|
||||
(bw-noise
|
||||
#(0.91504233 0.32937469 0.16329135)
|
||||
(y
|
||||
)
|
||||
)
|
||||
(y
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(abs
|
||||
0.26046528
|
||||
)
|
||||
)
|
||||
) ;;; end of function
|
||||
|
||||
(insert-to-library "Surreal body"
|
||||
(pow
|
||||
(bw-noise
|
||||
(sin
|
||||
(x
|
||||
)
|
||||
)
|
||||
(bw-noise
|
||||
(max
|
||||
(y
|
||||
)
|
||||
#(0.27959321 0.79388215 0.19771108 0.32369007)
|
||||
(y
|
||||
)
|
||||
(x
|
||||
)
|
||||
(atan
|
||||
(max
|
||||
(y
|
||||
)
|
||||
(bw-noise
|
||||
(x
|
||||
)
|
||||
(y
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(^
|
||||
(x
|
||||
)
|
||||
0.48846049
|
||||
(sin
|
||||
(y
|
||||
)
|
||||
)
|
||||
)
|
||||
(max
|
||||
(atan
|
||||
(x
|
||||
)
|
||||
)
|
||||
0.08679507
|
||||
(x
|
||||
)
|
||||
)
|
||||
)
|
||||
#(0.11996383 0.54226166 0.84077255)
|
||||
)
|
||||
)
|
||||
(bw-noise
|
||||
(y
|
||||
)
|
||||
0.86159264
|
||||
)
|
||||
)
|
||||
) ;;; end of function
|
||||
|
||||
(insert-to-library "Tribute to Vladimir Boudnik"
|
||||
(pow
|
||||
(bw-noise
|
||||
(sin
|
||||
(exp
|
||||
(*
|
||||
(x
|
||||
)
|
||||
(y
|
||||
)
|
||||
#(0.32735516 0.55692500 0.08359696 0.29403341)
|
||||
#(0.59566040 0.39755838 0.01307638 0.20336952)
|
||||
#(0.48779099 0.42339531 0.76725483 0.80217598)
|
||||
0.77643144
|
||||
(x
|
||||
)
|
||||
0.99693062
|
||||
(y
|
||||
)
|
||||
(y
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(bw-noise
|
||||
(max
|
||||
(y
|
||||
)
|
||||
#(0.27959321 0.79388215 0.19771108 0.32369007)
|
||||
(y
|
||||
)
|
||||
(x
|
||||
)
|
||||
(atan
|
||||
(max
|
||||
(y
|
||||
)
|
||||
(bw-noise
|
||||
(x
|
||||
)
|
||||
(y
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(^
|
||||
(x
|
||||
)
|
||||
0.48846049
|
||||
(sin
|
||||
(y
|
||||
)
|
||||
)
|
||||
)
|
||||
(max
|
||||
(atan
|
||||
(x
|
||||
)
|
||||
)
|
||||
0.08679507
|
||||
(x
|
||||
)
|
||||
)
|
||||
)
|
||||
#(0.11996383 0.54226166 0.84077255)
|
||||
)
|
||||
)
|
||||
(bw-noise
|
||||
(y
|
||||
)
|
||||
0.86159264
|
||||
)
|
||||
)
|
||||
) ;;; end of function
|
||||
|
||||
(insert-to-library "Red angel"
|
||||
(exp
|
||||
(abs
|
||||
(-
|
||||
(min
|
||||
(y
|
||||
)
|
||||
(y
|
||||
)
|
||||
(sin
|
||||
(exp
|
||||
#(0.09342696 0.98347104 0.97030872)
|
||||
)
|
||||
)
|
||||
(/
|
||||
(^
|
||||
(color-noise
|
||||
0.90006986
|
||||
#(0.16233873 0.15725501 0.42570787 0.19153153)
|
||||
)
|
||||
(warp-abs
|
||||
(floor
|
||||
(^
|
||||
(y
|
||||
)
|
||||
0.92446975
|
||||
)
|
||||
)
|
||||
(x
|
||||
)
|
||||
(x
|
||||
)
|
||||
)
|
||||
(warp-abs
|
||||
(y
|
||||
)
|
||||
0.50472484
|
||||
(x
|
||||
)
|
||||
)
|
||||
0.66017742
|
||||
(x
|
||||
)
|
||||
)
|
||||
(*
|
||||
#(1.00000000 1000.00000000 1000.00000000)
|
||||
(warp-abs
|
||||
(floor
|
||||
#(0.98139181 0.86394308 0.82495983 0.76227650)
|
||||
)
|
||||
(x
|
||||
)
|
||||
(x
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(y
|
||||
)
|
||||
(y
|
||||
)
|
||||
(y
|
||||
)
|
||||
)
|
||||
(color-noise
|
||||
(color-noise
|
||||
0.79742206
|
||||
(bw-noise
|
||||
(min
|
||||
0.16741483
|
||||
(x
|
||||
)
|
||||
)
|
||||
#(0.32625521 0.38315917 0.12498968)
|
||||
)
|
||||
)
|
||||
0.41713922
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
) ;;; end of function
|
||||
|
|
@ -1,346 +0,0 @@
|
|||
/* The GIMP -- an image manipulation program
|
||||
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
#include "libgimp/gimp.h"
|
||||
#include <unistd.h>
|
||||
|
||||
#include "gag.h"
|
||||
|
||||
char *gag_library_file;
|
||||
|
||||
static GParam *gag_params;
|
||||
|
||||
static void query (void);
|
||||
static void run (char *name, int nparams, GParam *param,
|
||||
int *nreturn_vals, GParam **return_vals);
|
||||
|
||||
static void gag_job(void);
|
||||
static void gag_render_picture(GtkWidget *, gpointer);
|
||||
static void gag_render( GDrawable *drawable, char *expr);
|
||||
|
||||
void (*gag_render_picture_ptr)(GtkWidget *, gpointer)= gag_render_picture;
|
||||
|
||||
|
||||
GPlugInInfo PLUG_IN_INFO =
|
||||
{
|
||||
NULL, /* init_proc */
|
||||
NULL, /* quit_proc */
|
||||
query, /* query_proc */
|
||||
run, /* run_proc */
|
||||
};
|
||||
|
||||
MAIN()
|
||||
|
||||
static void
|
||||
query (void)
|
||||
{
|
||||
static GParamDef interface_args[] =
|
||||
{
|
||||
{ PARAM_INT32, "run_mode", "Interactive, non-interactive" },
|
||||
{ PARAM_IMAGE, "image", "Input image" },
|
||||
{ PARAM_DRAWABLE, "drawable", "Input drawable" }
|
||||
};
|
||||
|
||||
static GParamDef render_args[] =
|
||||
{
|
||||
{ PARAM_INT32, "run_mode", "Interactive, non-interactive" },
|
||||
{ PARAM_IMAGE, "image", "Input image" },
|
||||
{ PARAM_DRAWABLE, "drawable", "Input drawable" },
|
||||
{ PARAM_STRING, "expression", "Expression to render" },
|
||||
};
|
||||
|
||||
static GParamDef *return_vals = NULL;
|
||||
static gint i_nargs = sizeof (interface_args) / sizeof (interface_args[0]);
|
||||
static gint r_nargs = sizeof (render_args) / sizeof (interface_args[0]);
|
||||
static gint nreturn_vals = 0;
|
||||
|
||||
gimp_install_procedure ("plug_in_gag_interface",
|
||||
"Creates nice patterns using genetic algorithm",
|
||||
"Interactively evolve expressions using crossing and mutating of population of expressions."
|
||||
"Then expressions are rendered into patterns.",
|
||||
"Daniel Skarda",
|
||||
"Daniel Skarda",
|
||||
"1997",
|
||||
"<Image>/Filters/Render/GAG",
|
||||
"RGB*, GRAY*",
|
||||
PROC_PLUG_IN,
|
||||
i_nargs,
|
||||
nreturn_vals,
|
||||
interface_args,
|
||||
return_vals);
|
||||
|
||||
gimp_install_procedure ("plug_in_gag_render",
|
||||
"Renders GAG-expression",
|
||||
"Renders GAG-expression",
|
||||
"Daniel Skarda",
|
||||
"Daniel Skarda",
|
||||
"1997",
|
||||
"<Image>/Filters/Render/GAG",
|
||||
"RGB*, GRAY*",
|
||||
PROC_PLUG_IN,
|
||||
r_nargs,
|
||||
nreturn_vals,
|
||||
render_args,
|
||||
return_vals);
|
||||
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
run (char *name, int nparams, GParam *param, int *nreturn_vals,
|
||||
GParam **return_vals)
|
||||
{
|
||||
static GParam values[1];
|
||||
GDrawable *drawable;
|
||||
GRunModeType run_mode;
|
||||
GStatusType status;
|
||||
|
||||
status = STATUS_SUCCESS;
|
||||
run_mode = param[0].data.d_int32;
|
||||
|
||||
values[0].type = PARAM_STATUS;
|
||||
values[0].data.d_status = status;
|
||||
|
||||
*nreturn_vals = 1;
|
||||
*return_vals = values;
|
||||
|
||||
/* Get the specified drawable */
|
||||
drawable = gimp_drawable_get (param[2].data.d_drawable);
|
||||
gag_params= param;
|
||||
|
||||
/* See how we will run */
|
||||
|
||||
#ifdef GIMP_DEBUG
|
||||
printf("GAG pid: attach %d\n", getpid());
|
||||
getchar();
|
||||
#endif
|
||||
|
||||
if (strcmp(name, "plug_in_gag_interface") == 0)
|
||||
{
|
||||
switch (run_mode) {
|
||||
case RUN_INTERACTIVE:
|
||||
/* Possibly retrieve data - for NOW NO DATA */
|
||||
/* gimp_get_data("plug_in_gag", &snvals); */
|
||||
|
||||
/* Get information from the dialog */
|
||||
gag_job ();
|
||||
break;
|
||||
|
||||
case RUN_NONINTERACTIVE:
|
||||
/* Make sure all the arguments are there! */
|
||||
status = STATUS_CALLING_ERROR;
|
||||
break;
|
||||
|
||||
case RUN_WITH_LAST_VALS:
|
||||
/* Possibly retrieve data */
|
||||
/* gimp_get_data("plug_in_solid_noise", &snvals); */
|
||||
status = STATUS_CALLING_ERROR;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (strcmp(name, "plug_in_gag_render")==0)
|
||||
{
|
||||
switch (run_mode) {
|
||||
case RUN_INTERACTIVE:
|
||||
status = STATUS_CALLING_ERROR;
|
||||
break;
|
||||
|
||||
case RUN_NONINTERACTIVE:
|
||||
if (nparams == 4)
|
||||
{
|
||||
gag_render(
|
||||
gimp_drawable_get (param[2].data.d_drawable),
|
||||
param[3].data.d_string
|
||||
);
|
||||
}
|
||||
else status = STATUS_CALLING_ERROR;
|
||||
break;
|
||||
|
||||
case RUN_WITH_LAST_VALS:
|
||||
/* Possibly retrieve data */
|
||||
/* gimp_get_data("plug_in_solid_noise", &snvals); */
|
||||
status = STATUS_CALLING_ERROR;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
values[0].data.d_status = status;
|
||||
gimp_drawable_detach(drawable);
|
||||
}
|
||||
|
||||
static void gag_render_picture(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
char temp[20000]="0.0";
|
||||
gint nreturn_vals;
|
||||
INDIVIDUAL *iptr;
|
||||
|
||||
iptr= *((INDIVIDUAL **) data);
|
||||
|
||||
if (iptr->expression != NULL)
|
||||
expr_sprint(temp, iptr->expression);
|
||||
|
||||
DPRINT("Launching new gag-plugin");
|
||||
gimp_run_procedure("plug_in_gag_render",
|
||||
&nreturn_vals,
|
||||
PARAM_INT32, RUN_NONINTERACTIVE,
|
||||
PARAM_IMAGE, gag_params[1].data.d_image,
|
||||
PARAM_DRAWABLE, gag_params[2].data.d_int32,
|
||||
PARAM_STRING, temp,
|
||||
PARAM_END);
|
||||
DPRINT("Launching was successful");
|
||||
gimp_displays_flush ();
|
||||
}
|
||||
|
||||
static void gag_job(void)
|
||||
{
|
||||
GParam *return_vals;
|
||||
gint nreturn_vals;
|
||||
|
||||
gchar **argv;
|
||||
gint argc;
|
||||
|
||||
argc = 1;
|
||||
argv = g_new (gchar *, 1);
|
||||
argv[0] = g_strdup ("gag");
|
||||
|
||||
return_vals = gimp_run_procedure ("gimp_gimprc_query",
|
||||
&nreturn_vals,
|
||||
PARAM_STRING, "gag-library",
|
||||
PARAM_END);
|
||||
|
||||
if (return_vals[0].data.d_status != STATUS_SUCCESS ||
|
||||
return_vals[1].data.d_string == NULL)
|
||||
{
|
||||
printf("No gag-library in gimprc: gag-library is set to /dev/null\n");
|
||||
gag_library_file= "/dev/null";
|
||||
}
|
||||
else
|
||||
gag_library_file = return_vals[1].data.d_string;
|
||||
|
||||
|
||||
gag_load_library(gag_library_file);
|
||||
|
||||
expr_init();
|
||||
|
||||
gtk_init (&argc, &argv);
|
||||
|
||||
gag_create_ui();
|
||||
|
||||
gtk_main();
|
||||
|
||||
g_free( argv[0] );
|
||||
g_free( argv );
|
||||
gimp_destroy_params (return_vals, nreturn_vals);
|
||||
}
|
||||
|
||||
static void gag_render( GDrawable *drawable, char *expr)
|
||||
{
|
||||
GPixelRgn dest_rgn;
|
||||
guchar *dest_row;
|
||||
guchar *dest;
|
||||
gint row, col;
|
||||
gint progress, max_progress;
|
||||
gint x1, y1, x2, y2, x, y;
|
||||
gpointer pr;
|
||||
|
||||
DBL result[4];
|
||||
DBL fy, fdy, fx, fdx;
|
||||
int imtype;
|
||||
|
||||
NODE *n;
|
||||
|
||||
n= parse_prefix_expression(&expr);
|
||||
if (n == NULL) return;
|
||||
prepare_node( n );
|
||||
|
||||
gimp_progress_init ("GAG Rendering...");
|
||||
|
||||
gimp_drawable_mask_bounds (drawable->id, &x1, &y1, &x2, &y2);
|
||||
gimp_pixel_rgn_init (&dest_rgn, drawable, x1, y1, (x2 - x1), (y2 - y1), TRUE, TRUE);
|
||||
|
||||
progress = 0;
|
||||
max_progress = (x2 - x1) * (y2 - y1);
|
||||
|
||||
/* Get the foreground and background colors */
|
||||
|
||||
fdy= 2.0 / ((DBL) drawable->height);
|
||||
fdx= 2.0 / ((DBL) drawable->width);
|
||||
|
||||
imtype= gimp_drawable_type( drawable->id);
|
||||
|
||||
for (pr = gimp_pixel_rgns_register (1, &dest_rgn); pr != NULL; pr = gimp_pixel_rgns_process (pr))
|
||||
{
|
||||
y = dest_rgn.y;
|
||||
|
||||
dest_row = dest_rgn.data;
|
||||
fy= drawable->height;
|
||||
fy= (- 2.0 * (DBL)y + fy) / fy;
|
||||
|
||||
for ( row = 0; row < dest_rgn.h; row++, y++, fy-= fdy)
|
||||
{
|
||||
dest = dest_row;
|
||||
x = dest_rgn.x;
|
||||
fx= drawable->width;
|
||||
fx= (2.0 * (DBL) x - fx) / fx;
|
||||
|
||||
for (col = 0; col < dest_rgn.w; col++, x++, fx+=fdx)
|
||||
{
|
||||
eval_xy(result,fx,fy);
|
||||
|
||||
if (imtype < GRAY_IMAGE)
|
||||
{ /* RGB* images */
|
||||
DBL *p= result;
|
||||
|
||||
*dest= wrap_func(*p); dest++; p++;
|
||||
*dest= wrap_func(*p); dest++; p++;
|
||||
*dest= wrap_func(*p); dest++;
|
||||
if (imtype==RGBA_IMAGE)
|
||||
{
|
||||
p++;
|
||||
*dest= 255; dest++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{ /* GRAY* images */
|
||||
*dest= wrap_func(result[0]) * 0.299 + wrap_func(result[1]) * 0.587 + wrap_func(result[2]) * 0.114;
|
||||
dest++;
|
||||
if (imtype==GRAYA_IMAGE)
|
||||
{
|
||||
*dest= 255; dest++;
|
||||
}
|
||||
}
|
||||
}
|
||||
dest_row += dest_rgn.rowstride;
|
||||
}
|
||||
progress += dest_rgn.w * dest_rgn.h;
|
||||
gimp_progress_update ((double) progress / (double) max_progress);
|
||||
}
|
||||
|
||||
destroy_node( n );
|
||||
|
||||
gimp_drawable_flush (drawable);
|
||||
gimp_drawable_merge_shadow (drawable->id, TRUE);
|
||||
gimp_drawable_update (drawable->id, x1, y1, (x2 - x1), (y2 - y1));
|
||||
}
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
#include <gtk/gtk.h>
|
||||
#include "gag.h"
|
||||
|
||||
char *gag_library_file= "./gag-library";
|
||||
void (*gag_render_picture_ptr)(GtkWidget *, gpointer)= NULL;
|
||||
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
gtk_init (&argc, &argv);
|
||||
|
||||
expr_init();
|
||||
|
||||
gag_load_library(gag_library_file);
|
||||
|
||||
gag_create_ui();
|
||||
|
||||
gtk_main ();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1,703 +0,0 @@
|
|||
#include <gtk/gtk.h>
|
||||
#include <strings.h>
|
||||
|
||||
#include "gas.h"
|
||||
#include "gag.h"
|
||||
|
||||
|
||||
#define MAX_ROW 3
|
||||
#define MAX_COL 3
|
||||
#define MAX_I MAX_ROW*MAX_COL
|
||||
|
||||
/*
|
||||
these are temporary constants - once it will be possible
|
||||
to specify size of preview widget :-)
|
||||
*/
|
||||
|
||||
|
||||
#define CLOSEUP_WIDTH PREVIEW_WIDTH * MAX_COL
|
||||
#define CLOSEUP_HEIGHT PREVIEW_HEIGHT * MAX_ROW
|
||||
|
||||
#define CLOSEUP_UPDATE (gint) (CLOSEUP_HEIGHT / 100)
|
||||
|
||||
#define REPAINT_PREVIEW 0
|
||||
#define REPAINT_CLOSEUP 1
|
||||
|
||||
#define REPAINT_SCANLINE 0
|
||||
#define REPAINT_MOSAIC 1
|
||||
#define REPAINT_ADAPTIVE_MOSAIC 2
|
||||
|
||||
INDIVIDUAL population[MAX_I];
|
||||
|
||||
ENTRY_DIALOG entry_data = { NULL, NULL, NULL };
|
||||
|
||||
GAG_UI ui = { NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, REPAINT_PREVIEW, REPAINT_SCANLINE, FALSE };
|
||||
|
||||
|
||||
int gag_mosaic_sequence[]= {16,8,4,1,0};
|
||||
|
||||
/* options */
|
||||
int gag_mate_one_to_one=0;
|
||||
int gag_do_mating=1;
|
||||
int gag_do_mutating=1;
|
||||
|
||||
void gag_destroy(GtkWidget *, gpointer *);
|
||||
void gag_mate(GtkWidget *widget, gpointer *data);
|
||||
void gag_reset_scales(GtkWidget *widget, gpointer *data);
|
||||
|
||||
void gag_random(GtkWidget *widget, gpointer *data);
|
||||
void gag_draw_picture(GtkWidget *widget, gpointer *data);
|
||||
void gag_magnify_picture(GtkWidget *widget, gpointer *data);
|
||||
|
||||
void gag_print(GtkWidget *widget, gpointer *data);
|
||||
void gag_mutate(GtkWidget *widget, gpointer *data);
|
||||
void gag_previews(GtkWidget *widget, gpointer *data);
|
||||
void gag_toggle_mosaic(GtkWidget *widget, gpointer *data);
|
||||
|
||||
void gag_edit_by_hand_button(GtkWidget *widget, gpointer data);
|
||||
void gag_edit_by_hand(GtkWidget *widget, gpointer data);
|
||||
|
||||
|
||||
/*
|
||||
INITIALISATION
|
||||
*/
|
||||
|
||||
void gag_create_menu (void)
|
||||
{
|
||||
GtkWidget *menu;
|
||||
GtkWidget *menuitem;
|
||||
|
||||
menu = gtk_menu_new ();
|
||||
|
||||
menuitem= gtk_menu_item_new_with_label("Random");
|
||||
gtk_menu_append(GTK_MENU(menu), menuitem);
|
||||
gtk_signal_connect( GTK_OBJECT(menuitem), "activate",
|
||||
(GtkSignalFunc) gag_random, NULL);
|
||||
gtk_widget_show( menuitem );
|
||||
|
||||
menuitem= gtk_menu_item_new_with_label("Mutate");
|
||||
gtk_menu_append(GTK_MENU(menu), menuitem);
|
||||
gtk_signal_connect( GTK_OBJECT(menuitem), "activate",
|
||||
(GtkSignalFunc) gag_mutate, NULL);
|
||||
gtk_widget_show( menuitem );
|
||||
|
||||
menuitem= gtk_menu_item_new();
|
||||
gtk_menu_append(GTK_MENU(menu), menuitem);
|
||||
gtk_widget_show( menuitem );
|
||||
|
||||
menuitem= gtk_menu_item_new_with_label("Print to stdout");
|
||||
gtk_menu_append(GTK_MENU(menu), menuitem);
|
||||
gtk_signal_connect( GTK_OBJECT(menuitem), "activate",
|
||||
(GtkSignalFunc) gag_print, NULL);
|
||||
gtk_widget_show( menuitem );
|
||||
|
||||
menuitem= gtk_menu_item_new_with_label("Edit by hand");
|
||||
gtk_menu_append(GTK_MENU(menu), menuitem);
|
||||
gtk_signal_connect( GTK_OBJECT(menuitem), "activate",
|
||||
(GtkSignalFunc) gag_edit_by_hand, NULL);
|
||||
gtk_widget_show( menuitem );
|
||||
|
||||
menuitem= gtk_menu_item_new_with_label("Save to library");
|
||||
gtk_menu_append(GTK_MENU(menu), menuitem);
|
||||
gtk_signal_connect( GTK_OBJECT(menuitem), "activate",
|
||||
(GtkSignalFunc) gag_show_save_dialog, NULL);
|
||||
gtk_widget_show( menuitem );
|
||||
|
||||
menuitem= gtk_menu_item_new_with_label("Load from library");
|
||||
gtk_menu_append(GTK_MENU(menu), menuitem);
|
||||
gtk_signal_connect( GTK_OBJECT(menuitem), "activate",
|
||||
(GtkSignalFunc) gag_library_show, NULL);
|
||||
gtk_widget_show( menuitem );
|
||||
|
||||
menuitem= gtk_menu_item_new();
|
||||
gtk_menu_append(GTK_MENU(menu), menuitem);
|
||||
gtk_widget_show( menuitem );
|
||||
|
||||
if (gag_render_picture_ptr != NULL)
|
||||
{
|
||||
menuitem= gtk_menu_item_new_with_label("Render picture");
|
||||
gtk_menu_append(GTK_MENU(menu), menuitem);
|
||||
gtk_signal_connect( GTK_OBJECT(menuitem), "activate",
|
||||
(GtkSignalFunc) gag_render_picture_ptr,
|
||||
&(ui.popup_individual));
|
||||
gtk_widget_show( menuitem );
|
||||
}
|
||||
|
||||
menuitem= gtk_menu_item_new_with_label("Magnify picture");
|
||||
gtk_menu_append(GTK_MENU(menu), menuitem);
|
||||
gtk_signal_connect( GTK_OBJECT(menuitem), "activate",
|
||||
(GtkSignalFunc) gag_magnify_picture, NULL);
|
||||
gtk_widget_show( menuitem );
|
||||
|
||||
ui.popup_menu= menu;
|
||||
}
|
||||
|
||||
int gag_show_menu(GtkWidget *preview, GdkEvent *event)
|
||||
{
|
||||
switch (event->type)
|
||||
{
|
||||
case GDK_BUTTON_PRESS:
|
||||
{
|
||||
GdkEventButton *bevent;
|
||||
|
||||
bevent= (GdkEventButton *)event;
|
||||
if (bevent->button==3)
|
||||
{
|
||||
ui.popup_individual= gtk_object_get_data(GTK_OBJECT(preview), "individual");
|
||||
gtk_menu_popup( GTK_MENU(ui.popup_menu),NULL, NULL,
|
||||
NULL,NULL, 3, bevent->time);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return (FALSE);
|
||||
}
|
||||
|
||||
void gag_create_ui(void)
|
||||
{
|
||||
GtkWidget *top_hbox;
|
||||
|
||||
GtkWidget *preview;
|
||||
GtkObject *adjustment;
|
||||
GtkWidget *scale;
|
||||
|
||||
GtkWidget *alignment;
|
||||
GtkWidget *vbox;
|
||||
GtkWidget *frame;
|
||||
GtkWidget *button;
|
||||
GtkWidget *label;
|
||||
GtkWidget *check;
|
||||
|
||||
int i,j;
|
||||
|
||||
gag_create_menu();
|
||||
|
||||
gtk_widget_push_visual( gtk_preview_get_visual ());
|
||||
gtk_widget_push_colormap (gtk_preview_get_cmap());
|
||||
|
||||
ui.window= gtk_window_new( GTK_WINDOW_TOPLEVEL );
|
||||
gtk_signal_connect (GTK_OBJECT (ui.window), "destroy",
|
||||
GTK_SIGNAL_FUNC (gag_destroy), NULL);
|
||||
gtk_window_set_policy(GTK_WINDOW(ui.window), FALSE, FALSE, TRUE);
|
||||
|
||||
gtk_window_set_title( GTK_WINDOW(ui.window), "GAG");
|
||||
|
||||
top_hbox = gtk_hbox_new(FALSE, 10);
|
||||
gtk_container_add(GTK_CONTAINER (ui.window), top_hbox);
|
||||
|
||||
ui.notebook = gtk_notebook_new();
|
||||
gtk_notebook_set_show_tabs( GTK_NOTEBOOK (ui.notebook), FALSE);
|
||||
gtk_box_pack_start(GTK_BOX (top_hbox), ui.notebook, FALSE, FALSE, 0);
|
||||
|
||||
/* Previews page */
|
||||
|
||||
ui.previews_table = gtk_table_new( MAX_ROW*2, MAX_COL, FALSE );
|
||||
label = gtk_label_new("Previews");
|
||||
gtk_notebook_append_page(GTK_NOTEBOOK (ui.notebook), ui.previews_table, label);
|
||||
|
||||
gtk_container_border_width (GTK_CONTAINER (top_hbox), 10);
|
||||
gtk_table_set_row_spacings (GTK_TABLE (ui.previews_table), 2);
|
||||
gtk_table_set_col_spacings (GTK_TABLE (ui.previews_table), 2);
|
||||
|
||||
for (i=0; i < MAX_COL; i++)
|
||||
for (j=0; j < MAX_ROW; j++)
|
||||
{
|
||||
frame= gtk_frame_new(NULL);
|
||||
gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
|
||||
|
||||
gtk_table_attach( GTK_TABLE(ui.previews_table), frame,
|
||||
j,j+1,
|
||||
2*i, 2*i+1,
|
||||
GTK_FILL, GTK_FILL,
|
||||
0,0);
|
||||
|
||||
preview = gtk_preview_new( PREVIEW_MODE );
|
||||
gtk_preview_size( GTK_PREVIEW(preview), PREVIEW_WIDTH, PREVIEW_HEIGHT );
|
||||
gtk_widget_set_events( preview, GDK_BUTTON_PRESS_MASK);
|
||||
|
||||
gtk_signal_connect( GTK_OBJECT(preview), "event",
|
||||
(GtkSignalFunc) gag_show_menu,NULL);
|
||||
|
||||
gtk_object_set_data( GTK_OBJECT(preview),"individual",
|
||||
&(population[i*MAX_ROW+j]));
|
||||
|
||||
gtk_container_add(GTK_CONTAINER(frame),preview);
|
||||
|
||||
adjustment= gtk_adjustment_new(0.0, 0.0, 10.0,
|
||||
0.1, 1.0, 1.0);
|
||||
scale= gtk_hscale_new( GTK_ADJUSTMENT(adjustment));
|
||||
|
||||
gtk_scale_set_digits(GTK_SCALE(scale),2);
|
||||
gtk_scale_set_draw_value(GTK_SCALE(scale), TRUE);
|
||||
gtk_range_set_update_policy(GTK_RANGE(scale),
|
||||
GTK_UPDATE_DELAYED);
|
||||
|
||||
gtk_table_attach( GTK_TABLE(ui.previews_table), scale,
|
||||
j, j+1,
|
||||
2*i+1, 2*i+2,
|
||||
GTK_FILL, GTK_FILL,
|
||||
0,0);
|
||||
|
||||
population[i*MAX_ROW+j].preview= preview;
|
||||
population[i*MAX_ROW+j].adjustment= GTK_ADJUSTMENT(adjustment);
|
||||
population[i*MAX_ROW+j].expression=NULL;
|
||||
|
||||
gtk_widget_show( preview );
|
||||
gtk_widget_show( scale );
|
||||
gtk_widget_show( frame );
|
||||
}
|
||||
|
||||
/* Close Up Page */
|
||||
|
||||
alignment = gtk_alignment_new(0.5, 0.5, 0.0, 0.0);
|
||||
gtk_widget_show( alignment );
|
||||
|
||||
label = gtk_label_new("Close Up");
|
||||
gtk_notebook_append_page(GTK_NOTEBOOK (ui.notebook), alignment, label);
|
||||
|
||||
vbox = gtk_vbox_new(FALSE, 5);
|
||||
gtk_widget_show( vbox );
|
||||
|
||||
gtk_container_add( GTK_CONTAINER (alignment), vbox);
|
||||
|
||||
alignment = gtk_alignment_new(0.5, 0.5, 0.0, 0.0);
|
||||
gtk_widget_show( alignment );
|
||||
|
||||
gtk_box_pack_start(GTK_BOX(vbox), alignment, FALSE, FALSE, 0);
|
||||
|
||||
frame = gtk_frame_new(NULL);
|
||||
gtk_frame_set_shadow_type(GTK_FRAME (frame), GTK_SHADOW_IN);
|
||||
gtk_widget_show( frame );
|
||||
|
||||
gtk_container_add( GTK_CONTAINER (alignment), frame);
|
||||
|
||||
ui.closeup_preview = gtk_preview_new( PREVIEW_MODE );
|
||||
gtk_preview_size( GTK_PREVIEW (ui.closeup_preview),
|
||||
CLOSEUP_WIDTH, CLOSEUP_HEIGHT);
|
||||
gtk_widget_set_events( ui.closeup_preview, GDK_BUTTON_PRESS_MASK);
|
||||
gtk_signal_connect( GTK_OBJECT(ui.closeup_preview), "event",
|
||||
(GtkSignalFunc) gag_show_menu, NULL);
|
||||
gtk_widget_show( ui.closeup_preview );
|
||||
|
||||
gtk_container_add( GTK_CONTAINER(frame), ui.closeup_preview);
|
||||
|
||||
alignment = gtk_alignment_new(0.5, 0.5, 0.0, 0.0);
|
||||
gtk_widget_show( alignment );
|
||||
|
||||
gtk_box_pack_start(GTK_BOX(vbox), alignment, FALSE, FALSE, 0);
|
||||
|
||||
button = gtk_button_new_with_label("Finished");
|
||||
gtk_signal_connect_object( GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc) gag_previews, NULL);
|
||||
gtk_widget_show( button );
|
||||
|
||||
gtk_container_add( GTK_CONTAINER(alignment), button);
|
||||
|
||||
/* Action buttons */
|
||||
|
||||
vbox= gtk_vbox_new(FALSE, 5);
|
||||
gtk_box_pack_start(GTK_BOX(top_hbox), vbox, FALSE, FALSE, 0);
|
||||
|
||||
button= gtk_button_new_with_label("New generation");
|
||||
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0);
|
||||
gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc) gag_mate,NULL);
|
||||
|
||||
gtk_widget_show(button);
|
||||
|
||||
button= gtk_button_new_with_label("Reset scales");
|
||||
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0);
|
||||
gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc) gag_reset_scales,NULL);
|
||||
|
||||
gtk_widget_show(button);
|
||||
|
||||
button= gtk_button_new_with_label("Options");
|
||||
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0);
|
||||
gtk_widget_show(button);
|
||||
|
||||
button= gtk_button_new_with_label("Help");
|
||||
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0);
|
||||
gtk_widget_show(button);
|
||||
|
||||
check = gtk_check_button_new_with_label("Mosaic");
|
||||
gtk_box_pack_start(GTK_BOX(vbox), check, FALSE, FALSE, 0);
|
||||
gtk_signal_connect_object(GTK_OBJECT(check), "toggled",
|
||||
(GtkSignalFunc) gag_toggle_mosaic, NULL);
|
||||
gtk_widget_show(check);
|
||||
|
||||
button= gtk_button_new_with_label("Close");
|
||||
gtk_box_pack_end(GTK_BOX(vbox), button, FALSE, FALSE, 0);
|
||||
gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
|
||||
(GtkSignalFunc) gag_destroy,NULL);
|
||||
|
||||
ui.progress_bar= gtk_progress_bar_new();
|
||||
gtk_widget_set_usize(ui.progress_bar, 80, 20);
|
||||
gtk_box_pack_end(GTK_BOX(vbox), ui.progress_bar,
|
||||
FALSE, FALSE, 0);
|
||||
|
||||
gtk_widget_show( ui.progress_bar );
|
||||
|
||||
gtk_widget_show(button);
|
||||
gtk_widget_show(vbox);
|
||||
|
||||
gtk_widget_show(ui.previews_table);
|
||||
gtk_widget_show(ui.notebook);
|
||||
gtk_widget_show(top_hbox);
|
||||
gtk_widget_show(ui.window);
|
||||
|
||||
ui.preview_buffer = g_new(guchar, (CLOSEUP_WIDTH + 20)* PREVIEW_BPP);
|
||||
/* I allocate space for another 20 pixels - because of mosaic preview...
|
||||
(closeup width is not multiple of 16) */
|
||||
}
|
||||
|
||||
/*
|
||||
USEFULL Functions
|
||||
*/
|
||||
|
||||
void gag_repaint_ind( GtkWidget *progress, INDIVIDUAL *i, int local)
|
||||
{
|
||||
NODE *n;
|
||||
GtkWidget *preview;
|
||||
|
||||
guchar *buffer;
|
||||
int xx,yy,pp;
|
||||
DBL x,y,dx,dy;
|
||||
int width, height, update;
|
||||
DBL result[4];
|
||||
int maxm, *mm;
|
||||
guchar c[PREVIEW_BPP];
|
||||
|
||||
buffer = ui.preview_buffer;
|
||||
|
||||
width = PREVIEW_WIDTH;
|
||||
height = PREVIEW_HEIGHT;
|
||||
update = PREVIEW_UPDATE;
|
||||
preview= i->preview;
|
||||
|
||||
if (!local)
|
||||
if (ui.repaint_mode == REPAINT_CLOSEUP)
|
||||
{
|
||||
width = CLOSEUP_WIDTH;
|
||||
height = CLOSEUP_HEIGHT;
|
||||
update = CLOSEUP_UPDATE;
|
||||
preview= ui.closeup_preview;
|
||||
}
|
||||
|
||||
if (progress==NULL)
|
||||
progress= ui.progress_bar;
|
||||
|
||||
if ((n= i->expression)== NULL)
|
||||
{
|
||||
memset(buffer,128,width*PREVIEW_BPP);
|
||||
for (yy=0; yy < height; yy++)
|
||||
gtk_preview_draw_row( GTK_PREVIEW(preview),
|
||||
&(buffer[0 + 0]),0,yy,width);
|
||||
return;
|
||||
}
|
||||
|
||||
prepare_node( n );
|
||||
|
||||
if (ui.repaint_quality == 0) /* the best quality */
|
||||
{
|
||||
|
||||
dx= 2.0 / (DBL) width;
|
||||
dy= 2.0 / (DBL) height;
|
||||
|
||||
y= 1.0;
|
||||
for ( yy=0; yy < height; yy++, y-=dy)
|
||||
{
|
||||
for (xx=0, x=-1.0; xx < width * PREVIEW_BPP; x+=dx)
|
||||
{
|
||||
eval_xy(result, x,y );
|
||||
|
||||
|
||||
for (pp = 0; pp < PREVIEW_BPP; pp++)
|
||||
{
|
||||
buffer[xx++] = wrap_func(result[pp]);
|
||||
}
|
||||
}
|
||||
gtk_preview_draw_row( GTK_PREVIEW(preview),
|
||||
buffer, 0, yy, width);
|
||||
|
||||
if ((yy & update) == 0)
|
||||
{
|
||||
if ((yy & update * 10) == 0)
|
||||
gtk_widget_draw( preview, NULL);
|
||||
|
||||
gtk_progress_bar_update(GTK_PROGRESS_BAR(progress),
|
||||
(1.0-y)/2.0);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (ui.repaint_quality == 1)
|
||||
{
|
||||
/* mosaic preview */
|
||||
|
||||
gtk_progress_bar_update(GTK_PROGRESS_BAR(progress), 0.0);
|
||||
|
||||
maxm = MAX(width, height);
|
||||
|
||||
for ( mm = gag_mosaic_sequence; *mm > 0; mm++ )
|
||||
{
|
||||
dx = (DBL) (*mm) * (2.0 / (DBL) width);
|
||||
dy = (DBL) (*mm) * (2.0 / (DBL) height);
|
||||
y = 1.0;
|
||||
|
||||
for ( yy = 0; yy < height; y -= dy)
|
||||
{
|
||||
for (xx = 0, x = -1.0; xx < width * PREVIEW_BPP; x += dx)
|
||||
{
|
||||
eval_xy(result, x,y );
|
||||
|
||||
for (pp = 0; pp < PREVIEW_BPP; pp++)
|
||||
c[pp] = wrap_func(result[pp]);
|
||||
|
||||
for (pp = 0; pp < PREVIEW_BPP * (*mm); pp++)
|
||||
buffer[xx++] = c[pp % PREVIEW_BPP];
|
||||
}
|
||||
|
||||
for (pp = 0; pp < (*mm); pp++)
|
||||
gtk_preview_draw_row( GTK_PREVIEW(preview),
|
||||
buffer, 0, yy++, width);
|
||||
|
||||
if ((yy & update) == 0)
|
||||
{
|
||||
if ((yy & update * 10) == 0)
|
||||
gtk_widget_draw( preview, NULL);
|
||||
|
||||
gtk_progress_bar_update(GTK_PROGRESS_BAR(progress),
|
||||
(1.0 - y) / 2.0);
|
||||
}
|
||||
}
|
||||
}
|
||||
gtk_widget_draw( preview, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Error: not supported quality...\n");
|
||||
}
|
||||
gtk_widget_draw( preview, NULL);
|
||||
gtk_progress_bar_update(GTK_PROGRESS_BAR(progress), 0.0);
|
||||
}
|
||||
|
||||
/*
|
||||
CALLBACKS
|
||||
*/
|
||||
|
||||
void gag_destroy (GtkWidget *widget, gpointer *data)
|
||||
{
|
||||
DPRINT("Saving expression library...");
|
||||
gag_save_library(gag_library_file);
|
||||
gtk_main_quit ();
|
||||
}
|
||||
|
||||
void gag_print(GtkWidget *widget, gpointer *data)
|
||||
{
|
||||
if (ui.popup_individual->expression != NULL)
|
||||
expr_fprint( stdout, 0, ui.popup_individual->expression );
|
||||
}
|
||||
|
||||
void gag_mutate(GtkWidget *widget, gpointer *data)
|
||||
{
|
||||
NODE *n;
|
||||
|
||||
if ((n= ui.popup_individual->expression)==NULL) return;
|
||||
|
||||
ui.popup_individual->expression= gas_mutate(n,n,1);
|
||||
gag_repaint_ind( ui.progress_bar, ui.popup_individual, 0);
|
||||
ui.repaint_preview = TRUE;
|
||||
}
|
||||
|
||||
void gag_random(GtkWidget *widget, gpointer *data)
|
||||
{
|
||||
destroy_node( ui.popup_individual->expression );
|
||||
init_random();
|
||||
ui.popup_individual->expression= gas_random( 1, expression_max_depth );
|
||||
|
||||
/* expr_print( 0, ui.popup_individual->expression ); */
|
||||
gag_repaint_ind( NULL, ui.popup_individual, 0);
|
||||
ui.repaint_preview = TRUE;
|
||||
}
|
||||
|
||||
int gag_choose_individual()
|
||||
{
|
||||
DBL m,p;
|
||||
int i;
|
||||
|
||||
m= 0.0;
|
||||
for (i=0; i < MAX_I; i++)
|
||||
if (population[i].expression != NULL)
|
||||
m+= population[i].adjustment->value;
|
||||
|
||||
if (m==0.0)
|
||||
return -1;
|
||||
|
||||
p= m * dblrand();
|
||||
m= 0.0;
|
||||
for (i=0; i < MAX_I; i++)
|
||||
{
|
||||
if (population[i].expression != NULL)
|
||||
m+= population[i].adjustment->value;
|
||||
if (p < m)
|
||||
break;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
/******************************
|
||||
|
||||
M A T E
|
||||
|
||||
******************************/
|
||||
void gag_mate(GtkWidget *widget, gpointer *data)
|
||||
{
|
||||
int i,j,k;
|
||||
NODE *(n[MAX_I]), *tmp;
|
||||
DBL w;
|
||||
|
||||
for (i=0; i < MAX_I; i++) n[i]=NULL;
|
||||
|
||||
if (gag_do_mating)
|
||||
for (i=0; i < MAX_I; i++)
|
||||
{
|
||||
|
||||
j= gag_choose_individual();
|
||||
k= gag_choose_individual();
|
||||
|
||||
if (j < 0) break;
|
||||
|
||||
if (gag_mate_one_to_one)
|
||||
w=0.5;
|
||||
else
|
||||
w= population[j].adjustment->value /
|
||||
( population[j].adjustment->value +
|
||||
population[k].adjustment->value);
|
||||
|
||||
DMPRINT("%d is child of daddy %d and mummy %d\n",i,j,k);
|
||||
n[i]= gas_mate(w, population[j].expression,
|
||||
population[k].expression);
|
||||
}
|
||||
|
||||
for (i=0; i < MAX_I; i++)
|
||||
{
|
||||
if (n[i]!=NULL)
|
||||
{
|
||||
destroy_node( population[i].expression );
|
||||
population[i].expression= n[i];
|
||||
}
|
||||
|
||||
tmp= population[i].expression;
|
||||
if ((tmp != NULL)&&(gag_do_mutating))
|
||||
population[i].expression= gas_mutate( tmp,tmp,0);
|
||||
}
|
||||
for (i=0; i < MAX_I; i++)
|
||||
gag_repaint_ind( NULL, &(population[i]), 0);
|
||||
}
|
||||
|
||||
/******************************
|
||||
|
||||
Edit by hand
|
||||
|
||||
******************************/
|
||||
|
||||
void gag_edit_by_hand_button(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
NODE *n;
|
||||
char tmp[20000];
|
||||
char *ptr;
|
||||
|
||||
if (GTK_WIDGET_VISIBLE (entry_data.dialog))
|
||||
gtk_widget_hide (entry_data.dialog);
|
||||
|
||||
strcpy(tmp, GTK_ENTRY(entry_data.entry)->text);
|
||||
|
||||
ptr= tmp;
|
||||
n= parse_prefix_expression(&ptr);
|
||||
if (n!=NULL)
|
||||
{
|
||||
destroy_node(entry_data.ind->expression);
|
||||
entry_data.ind->expression= n;
|
||||
gag_repaint_ind(NULL, entry_data.ind, 0);
|
||||
ui.repaint_preview = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
void gag_edit_by_hand(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
if (entry_data.dialog==NULL)
|
||||
gag_create_entry( &entry_data, "Enter expression",
|
||||
GTK_SIGNAL_FUNC(gag_edit_by_hand_button));
|
||||
|
||||
if (!(GTK_WIDGET_VISIBLE(entry_data.dialog)))
|
||||
{
|
||||
char temp[20000]="(x)";
|
||||
|
||||
if (ui.popup_individual->expression != NULL)
|
||||
expr_sprint(temp, ui.popup_individual->expression);
|
||||
gtk_entry_set_text(GTK_ENTRY(entry_data.entry), temp);
|
||||
|
||||
entry_data.ind= ui.popup_individual;
|
||||
gtk_widget_show(entry_data.dialog);
|
||||
}
|
||||
}
|
||||
|
||||
void gag_load_from_lib(GtkWidget *widget, gpointer *data)
|
||||
{
|
||||
printf("load: %d\n", ui.popup_individual - population);
|
||||
}
|
||||
|
||||
void gag_magnify_picture(GtkWidget *widget, gpointer *data)
|
||||
{
|
||||
NODE *n;
|
||||
|
||||
printf("magnify: %d\n", ui.popup_individual - population);
|
||||
|
||||
if ((n = ui.popup_individual->expression) == NULL) return;
|
||||
|
||||
gtk_notebook_set_page( GTK_NOTEBOOK (ui.notebook), 1);
|
||||
|
||||
ui.repaint_mode = REPAINT_CLOSEUP;
|
||||
ui.closeup_individual = ui.popup_individual;
|
||||
|
||||
gtk_object_set_data( GTK_OBJECT(ui.closeup_preview),
|
||||
"individual", ui.closeup_individual);
|
||||
|
||||
gag_repaint_ind(ui.progress_bar, ui.closeup_individual, 0);
|
||||
|
||||
ui.repaint_preview = FALSE;
|
||||
}
|
||||
|
||||
void gag_previews(GtkWidget *widget, gpointer *data)
|
||||
{
|
||||
gtk_notebook_set_page( GTK_NOTEBOOK (ui.notebook), 0);
|
||||
|
||||
ui.repaint_mode = REPAINT_PREVIEW;
|
||||
|
||||
if (ui.repaint_preview == TRUE)
|
||||
{
|
||||
gag_repaint_ind(NULL, ui.closeup_individual, 0);
|
||||
ui.repaint_preview = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
void gag_reset_scales(GtkWidget *widget, gpointer *data)
|
||||
{
|
||||
int i;
|
||||
for (i=0; i<MAX_I; i++)
|
||||
{
|
||||
population[i].adjustment->value= 0.0;
|
||||
gtk_signal_emit_by_name(
|
||||
GTK_OBJECT(population[i].adjustment), "value_changed");
|
||||
}
|
||||
}
|
||||
|
||||
void gag_toggle_mosaic(GtkWidget *widget, gpointer *data)
|
||||
{
|
||||
if (ui.repaint_quality == REPAINT_MOSAIC)
|
||||
ui.repaint_quality = REPAINT_SCANLINE;
|
||||
else ui.repaint_quality = REPAINT_MOSAIC;
|
||||
}
|
|
@ -1,78 +0,0 @@
|
|||
#ifndef _GAG_H_
|
||||
#define _GAG_H_
|
||||
|
||||
#include "expressions.h"
|
||||
#include "gtk/gtk.h"
|
||||
|
||||
typedef struct individual_struct INDIVIDUAL;
|
||||
|
||||
#define PREVIEW_WIDTH 100
|
||||
#define PREVIEW_HEIGHT 100
|
||||
|
||||
#define PREVIEW_UPDATE (gint) (PREVIEW_HEIGHT / 100)
|
||||
|
||||
/*
|
||||
#define PREVIEW_BPP 1
|
||||
#define PREVIEW_MODE GTK_PREVIEW_GRAYSCALE
|
||||
*/
|
||||
#define PREVIEW_BPP 3
|
||||
#define PREVIEW_MODE GTK_PREVIEW_COLOR
|
||||
|
||||
struct individual_struct {
|
||||
GtkAdjustment *adjustment;
|
||||
GtkWidget *preview;
|
||||
NODE *expression;
|
||||
};
|
||||
extern INDIVIDUAL *gag_popup_ind;
|
||||
|
||||
typedef struct entry_dialog_struct ENTRY_DIALOG;
|
||||
struct entry_dialog_struct {
|
||||
GtkWidget *dialog;
|
||||
GtkWidget *entry;
|
||||
INDIVIDUAL *ind;
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
GtkWidget *window;
|
||||
GtkWidget *notebook;
|
||||
GtkWidget *previews_table;
|
||||
GtkWidget *closeup_preview;
|
||||
GtkWidget *popup_menu;
|
||||
GtkWidget *progress_bar;
|
||||
|
||||
INDIVIDUAL *popup_individual;
|
||||
INDIVIDUAL *closeup_individual;
|
||||
|
||||
guchar *preview_buffer;
|
||||
gint repaint_mode;
|
||||
gint repaint_quality;
|
||||
gint repaint_preview;
|
||||
} GAG_UI;
|
||||
|
||||
extern GAG_UI ui;
|
||||
|
||||
void gag_show_save_dialog(GtkWidget *, gpointer );
|
||||
|
||||
void gag_create_entry( ENTRY_DIALOG *, char *, GtkSignalFunc );
|
||||
void gag_library_show(GtkWidget *, gpointer);
|
||||
void gag_repaint_ind( GtkWidget *, INDIVIDUAL *, int);
|
||||
|
||||
void gag_load_library(char *);
|
||||
void gag_save_library(char *);
|
||||
|
||||
/******************************
|
||||
|
||||
Common things for plug-in
|
||||
and standalone program
|
||||
|
||||
******************************/
|
||||
|
||||
extern char *gag_library_file;
|
||||
extern void (*gag_render_picture_ptr)(GtkWidget *, gpointer);
|
||||
|
||||
void gag_create_ui(void);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
|
@ -1,394 +0,0 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "gas.h"
|
||||
|
||||
int expression_max_depth=10;
|
||||
DBL gas_const_prob= 0.3;
|
||||
DBL gas_mutate_prob= 0.2;
|
||||
|
||||
DBL (*gas_leaf_probability)(int depth)= gas_leaf_prob_desc;
|
||||
DBL (*gas_operator_weights)(int index)= gas_operator_weight_const;
|
||||
DBL (*random_number)()= dblrand;
|
||||
|
||||
DBL gas_operator_weight_const(int i)
|
||||
{
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
DBL gas_leaf_prob_const(int depth)
|
||||
{
|
||||
return (depth==expression_max_depth) ? 1.0 : gas_const_prob;
|
||||
}
|
||||
|
||||
DBL gas_leaf_prob_desc(int depth)
|
||||
{
|
||||
return ((DBL) depth) / ((DBL) expression_max_depth);
|
||||
}
|
||||
|
||||
NODE *gas_random( int depth, int maxdepth)
|
||||
{
|
||||
int i,j, leafonly=0;
|
||||
DBL m,p;
|
||||
NODE *node;
|
||||
|
||||
if ( dblrand() < gas_leaf_probability(depth)) leafonly=1;
|
||||
if ( maxdepth <=0) leafonly= 1;
|
||||
|
||||
m=0.0;
|
||||
for (i=0; i < Number_of_Functions; i++)
|
||||
if ((leafonly != 1) || ( FuncInfo[i].nofp == 0))
|
||||
m+= gas_operator_weights( i );
|
||||
|
||||
p= dblrand();
|
||||
p*= m;
|
||||
|
||||
m= 0.0;
|
||||
for (i=0; i < Number_of_Functions; i++)
|
||||
{
|
||||
if ((leafonly != 1) || (FuncInfo[i].nofp == 0))
|
||||
m+= gas_operator_weights( i );
|
||||
if (p < m)
|
||||
break;
|
||||
}
|
||||
|
||||
node= malloc( sizeof(NODE) );
|
||||
|
||||
node->op= &(FuncInfo[i]);
|
||||
node->noo= FuncInfo[i].nofp;
|
||||
|
||||
if (node->noo == 0)
|
||||
{
|
||||
for (j=0; j<FuncInfo[i].nofd; j++)
|
||||
node->data[j]= random_number();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (node->noo == -1)
|
||||
node->noo= 2 + (rand() % (MAX_NUMBER_OF_PARAMETERS - 1));
|
||||
for (j=0; j < node->noo; j++)
|
||||
(node->offsprings)[j]= gas_random( depth + 1, maxdepth - 1);
|
||||
}
|
||||
return node;
|
||||
}
|
||||
|
||||
/*******************************
|
||||
|
||||
MUTATING
|
||||
|
||||
******************************/
|
||||
|
||||
NODE *gm_alter_vector (NODE *, NODE *, int);
|
||||
NODE *gm_alter_op (NODE *, NODE *, int);
|
||||
NODE *gm_alter_noo (NODE *, NODE *, int);
|
||||
NODE *gm_random (NODE *, NODE *, int);
|
||||
NODE *gm_insert (NODE *, NODE *, int);
|
||||
NODE *gm_degenerate (NODE *, NODE *, int);
|
||||
NODE *gm_copy (NODE *, NODE *, int);
|
||||
NODE *gm_mix_params (NODE *, NODE *, int);
|
||||
NODE *gm_no_mut (NODE *, NODE *, int);
|
||||
|
||||
int Number_of_MutFunc= 9;
|
||||
gas_mutate_methods_struct MutFuncs[9] = {
|
||||
{ gm_alter_vector, "Fixme: description", 3.0, -3},
|
||||
{ gm_alter_op, "Fixme: description", 3.0, -1},
|
||||
{ gm_alter_noo, "Fixme: description", 2.0, -4},
|
||||
{ gm_mix_params, "Fixme: description", 1.0, -2},
|
||||
{ gm_random, "Fixme: description", 0.4, -1},
|
||||
{ gm_insert, "Fixme: description", 1.0, -1},
|
||||
{ gm_degenerate, "Fixme: description", 1.0, -2},
|
||||
{ gm_copy, "Fixme: description", /*0.5,*/ 0.0, -1},
|
||||
{ gm_no_mut, "Fixme: description", 0.0, -1}
|
||||
};
|
||||
|
||||
|
||||
DBL gas_mfw_array( int i, NODE *n, int depth)
|
||||
{
|
||||
int t;
|
||||
|
||||
t= MutFuncs[i].noo;
|
||||
if ((t==-3) && (n->op->nofd != 0)) return 0.0;
|
||||
if ((t==-2) && (n->noo == 0)) return 0.0;
|
||||
if ((t==-4) && (n->op->nofd!=-1)) return 0.0;
|
||||
if ((t>= 0) && (n->noo != t)) return 0.0;
|
||||
return MutFuncs[i].weight;
|
||||
}
|
||||
|
||||
DBL gas_mfw_const( int i, NODE *n, int depth)
|
||||
{
|
||||
int t;
|
||||
|
||||
t= MutFuncs[i].noo;
|
||||
if ((t==-3) && (n->op->nofd != 0)) return 0.0;
|
||||
if ((t==-2) && (n->noo == 0)) return 0.0;
|
||||
if ((t==-4) && (n->op->nofd!=-1)) return 0.0;
|
||||
if ((t>= 0) && (n->noo != t)) return 0.0;
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
DBL (*gas_get_mf_weight)( int, NODE *, int)= gas_mfw_array;
|
||||
|
||||
NODE *gas_mutate( NODE *root, NODE *n, int depth)
|
||||
{
|
||||
DBL m,p;
|
||||
int i;
|
||||
|
||||
if (dblrand() < gas_mutate_prob)
|
||||
{
|
||||
m= 0.0;
|
||||
|
||||
for (i=0; i<Number_of_MutFunc; i++)
|
||||
{
|
||||
m+= gas_get_mf_weight( i, n, depth);
|
||||
}
|
||||
p= dblrand() * m;
|
||||
|
||||
m= 0.0;
|
||||
for (i=0; i < Number_of_MutFunc; i++)
|
||||
{
|
||||
m+= gas_get_mf_weight( i,n,depth );
|
||||
if (p < m) break;
|
||||
}
|
||||
|
||||
return MutFuncs[i].func(root, n, depth);
|
||||
}
|
||||
else
|
||||
return gm_no_mut(root, n, depth+1);
|
||||
}
|
||||
|
||||
NODE *gm_alter_vector (NODE *root, NODE *n, int depth)
|
||||
{
|
||||
int i;
|
||||
|
||||
DPRINT("mutate - alter scalar or scalar");
|
||||
for (i=0; i < n->op->nofd; i++)
|
||||
n->data[i]= dblrand();
|
||||
return n;
|
||||
}
|
||||
|
||||
NODE *gm_alter_op (NODE *root, NODE *n, int depth)
|
||||
{
|
||||
FUNC_INFO *newfi, *oldfi;
|
||||
int oo,nn,mm;
|
||||
|
||||
DPRINT("mutate - alter operator");
|
||||
|
||||
oldfi= n->op;
|
||||
newfi= &(FuncInfo[ rand() % Number_of_Functions]);
|
||||
n->op= newfi;
|
||||
|
||||
oo= n->noo;
|
||||
nn= newfi->nofp;
|
||||
if (nn==-1)
|
||||
if (oo == 0)
|
||||
nn= 2;
|
||||
else
|
||||
nn= oo;
|
||||
|
||||
n->noo=nn;
|
||||
|
||||
if (nn < oo)
|
||||
{ /* destroy offsprings of no use */
|
||||
mm= nn;
|
||||
for ( ; nn < oo; nn++)
|
||||
destroy_node( (n->offsprings)[nn]);
|
||||
}
|
||||
else
|
||||
{ /* create new random ones... */
|
||||
mm=oo;
|
||||
for ( ; oo < nn; oo ++)
|
||||
(n->offsprings)[oo]= gas_random(depth, 2);
|
||||
}
|
||||
|
||||
/* and now mutate old ones ...*/
|
||||
for( nn= 0; nn < mm; nn++)
|
||||
(n->offsprings)[nn]= gas_mutate(root, (n->offsprings)[nn],
|
||||
depth+1);
|
||||
|
||||
/* generate necessary random floats... */
|
||||
oo= oldfi->nofd;
|
||||
nn= newfi->nofd;
|
||||
for ( ; oo < nn; oo++)
|
||||
(n->data)[oo]= dblrand();
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
NODE *gm_alter_noo (NODE *root, NODE *n, int depth)
|
||||
{
|
||||
int oo,nn,mm;
|
||||
|
||||
DPRINT("mutate - alter number of parameters");
|
||||
|
||||
if (n->op->nofp != -1)
|
||||
{
|
||||
for( nn= 0; nn < n->noo; nn++)
|
||||
(n->offsprings)[nn]= gas_mutate(root, (n->offsprings)[nn],
|
||||
depth+1);
|
||||
}
|
||||
|
||||
oo= n->noo;
|
||||
nn= 2 + (rand() % (MAX_NUMBER_OF_PARAMETERS - 1));
|
||||
n->noo=nn;
|
||||
|
||||
if (nn < oo)
|
||||
{ /* destroy offsprings of no use */
|
||||
mm= nn;
|
||||
for ( ; nn < oo; nn++)
|
||||
destroy_node( (n->offsprings)[nn]);
|
||||
}
|
||||
else
|
||||
{ /* create new random ones... */
|
||||
mm=oo;
|
||||
for ( ; oo < nn; oo ++)
|
||||
(n->offsprings)[oo]= gas_random(depth,2);
|
||||
}
|
||||
|
||||
/* and now mutate old ones ...*/
|
||||
for( nn= 0; nn < mm; nn++)
|
||||
(n->offsprings)[nn]= gas_mutate(root, (n->offsprings)[nn],
|
||||
depth+1);
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
NODE *gm_random (NODE *root, NODE *n, int depth)
|
||||
{
|
||||
DPRINT("mutate - random");
|
||||
destroy_node( n );
|
||||
return gas_random(depth,2);
|
||||
}
|
||||
|
||||
|
||||
NODE *gm_insert (NODE *root, NODE *n, int depth)
|
||||
{
|
||||
NODE *nnode;
|
||||
int j;
|
||||
|
||||
DPRINT("mutate - insert");
|
||||
nnode= gas_random(depth,2); /*generate random operand */
|
||||
|
||||
if (nnode->noo == 0)
|
||||
{
|
||||
destroy_node(nnode);
|
||||
for (j=0; j < n->noo; j++)
|
||||
(n->offsprings)[j]=gas_mutate(root,(n->offsprings)[j],depth+1);
|
||||
return n;
|
||||
}
|
||||
|
||||
j= rand() % (nnode->noo);
|
||||
destroy_node((nnode->offsprings)[j]);
|
||||
(nnode->offsprings)[j]= n;
|
||||
|
||||
for (j=0; j < n->noo; j++)
|
||||
(n->offsprings)[j]= gas_mutate( root, (n->offsprings)[j], depth+2 );
|
||||
|
||||
return nnode;
|
||||
}
|
||||
|
||||
|
||||
NODE *gm_degenerate (NODE *root, NODE *n, int depth)
|
||||
{
|
||||
int i,j;
|
||||
NODE *nn;
|
||||
if (n->noo==0) return n;
|
||||
|
||||
DPRINT("mutate - degenerate");
|
||||
j= rand() % (n->noo);
|
||||
for (i=0; i < n->noo; i++)
|
||||
if (i!=j)
|
||||
destroy_node( (n-> offsprings)[i] );
|
||||
else
|
||||
nn= gas_mutate(root, (n->offsprings) [i], depth);
|
||||
free( n );
|
||||
return nn;
|
||||
}
|
||||
|
||||
NODE *gm_mix_params (NODE *root, NODE *n, int depth)
|
||||
{
|
||||
NODE *tmp;
|
||||
int k,i,j;
|
||||
|
||||
DPRINT("mutate - mix");
|
||||
|
||||
if (n->noo < 2)
|
||||
{
|
||||
for (k=0; k < n->noo; k++)
|
||||
(n->offsprings)[k]= gas_mutate(root, n->offsprings[k], depth+1);
|
||||
return n;
|
||||
}
|
||||
|
||||
for( k= (rand() % (n->noo)); k; k--)
|
||||
{
|
||||
i= rand() % (n->noo);
|
||||
j= rand() % (n->noo);
|
||||
if (i==j) i= (i+1) % (n->noo);
|
||||
|
||||
tmp= (n->offsprings)[i];
|
||||
(n->offsprings)[i]= (n->offsprings)[j];
|
||||
(n->offsprings)[j]= tmp;
|
||||
}
|
||||
|
||||
for (k=0; k < n->noo; k++)
|
||||
(n->offsprings)[k]= gas_mutate(root, n->offsprings[k], depth+1);
|
||||
return n;
|
||||
}
|
||||
|
||||
NODE *gm_copy (NODE *root, NODE *n, int depth)
|
||||
{
|
||||
DPRINT("mutate - copy");
|
||||
printf ("Attention - not yet implemented...\n");
|
||||
return n;
|
||||
}
|
||||
|
||||
NODE *gm_no_mut (NODE *root, NODE *n, int depth)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i=0; i < n->noo; i++)
|
||||
(n->offsprings)[i]= gas_mutate(root, n->offsprings[i], depth+1);
|
||||
return n;
|
||||
}
|
||||
|
||||
/******************************
|
||||
|
||||
MATING
|
||||
|
||||
disclaimer: please read following lines of code only if you are over
|
||||
18 years of age and you are not offensed by C source code
|
||||
|
||||
******************************/
|
||||
|
||||
NODE *gas_mate(DBL w, NODE *n1, NODE *n2)
|
||||
{
|
||||
NODE *nn;
|
||||
int i,j;
|
||||
|
||||
nn= (NODE *) malloc(sizeof(NODE));
|
||||
|
||||
if (dblrand() < w)
|
||||
*nn= *n1;
|
||||
else
|
||||
*nn= *n2;
|
||||
|
||||
for (i= 0; i < nn->noo; i++)
|
||||
{
|
||||
if ((i < n1->noo) && (i < n2->noo))
|
||||
(nn->offsprings)[i]=
|
||||
gas_mate(w, (n1->offsprings)[i],(n2->offsprings)[i]);
|
||||
|
||||
if ( i >= n1->noo)
|
||||
(nn->offsprings)[i]= node_copy( (n2->offsprings)[i] );
|
||||
|
||||
if ( i >= n2->noo)
|
||||
(nn->offsprings)[i]= node_copy( (n1->offsprings)[i] );
|
||||
}
|
||||
|
||||
j= n1->op->nofd;
|
||||
|
||||
if (j > (n2->op->nofd)) j= n2->op->nofd;
|
||||
|
||||
for ( i=0; i<j; i++)
|
||||
(nn->data)[i]=((n1->data)[i]+(n2->data)[i])/2.0;
|
||||
|
||||
return nn;
|
||||
}
|
|
@ -1,51 +0,0 @@
|
|||
#ifndef _GAS_H_
|
||||
#define _GAS_H_
|
||||
|
||||
#include "expressions.h"
|
||||
|
||||
extern int expression_max_depth;
|
||||
extern DBL gas_const_prob;
|
||||
|
||||
extern DBL (*gas_leaf_probability)(int depth); /* determines if end expression now or not */
|
||||
extern DBL (*gas_operator_weight)(int index); /* weight of operator */
|
||||
extern DBL (*random_number)();
|
||||
|
||||
DBL gas_leaf_prob_const(int);
|
||||
DBL gas_leaf_prob_desc(int);
|
||||
|
||||
DBL gas_operator_weight_const(int);
|
||||
|
||||
NODE *gas_random(int, int);
|
||||
NODE *gas_mate(DBL, NODE *, NODE *);
|
||||
|
||||
/*
|
||||
functions & variables for MUTATING
|
||||
*/
|
||||
|
||||
extern DBL gas_mutate_prob;
|
||||
|
||||
typedef NODE *(*gas_mutate_func)(NODE *, NODE *, int );
|
||||
|
||||
typedef struct {
|
||||
gas_mutate_func func;
|
||||
char *desc;
|
||||
DBL weight;
|
||||
char noo; /* how many arguments must have such node to aply this mutate function ? */
|
||||
} gas_mutate_methods_struct; /* -1 .. arbitrary,
|
||||
-2 - greater than zero (ie non constant),
|
||||
-3 nofd != 0
|
||||
-4 op->nofp == -1
|
||||
*/
|
||||
|
||||
NODE *gas_mutate( NODE *, NODE *, int );
|
||||
|
||||
extern int Number_of_MutFunc;
|
||||
extern gas_mutate_methods_struct MutFuncs[];
|
||||
|
||||
DBL gas_mfw_array( int, NODE *, int );
|
||||
DBL gas_mfw_const( int, NODE *, int );
|
||||
|
||||
extern DBL (*gas_get_mf_weight)( int, NODE *, int);
|
||||
|
||||
#endif
|
||||
|
|
@ -1,253 +0,0 @@
|
|||
$prefix= "ex_";
|
||||
|
||||
sub flush
|
||||
{
|
||||
print "$def_str\n\n\n$arr_str\n\nint Number_of_Functions=$table_num;\n\
|
||||
FUNC_INFO $table_name\[$table_num\] = {\n$table_str\n};\n\n\n$decl_str\n";
|
||||
}
|
||||
|
||||
sub begin_table
|
||||
{
|
||||
$ft= 0;
|
||||
$table_num=0;
|
||||
$table_name= $2;
|
||||
$table_str= "";
|
||||
$def_str= "";
|
||||
$decl_str= "";
|
||||
$arr_str= "";
|
||||
}
|
||||
|
||||
sub parse_ptypes
|
||||
{
|
||||
my ($s,$name)= @_;
|
||||
my ($c)= 0;
|
||||
my ($tmp);
|
||||
|
||||
$name= $prefix . $name . "_ptypes";
|
||||
$tmp= "static char $name\[\]= {";
|
||||
|
||||
while ($s ne "")
|
||||
{
|
||||
if ($c == 0) { $c=1; }
|
||||
else { $tmp .= ", "; }
|
||||
|
||||
$s =~ /([134N])(.*)/;
|
||||
if ($1 eq "N") { $tmp .= "-1"; }
|
||||
else { $tmp .= " $1"; }
|
||||
$s= $2;
|
||||
}
|
||||
|
||||
$arr_str.= $tmp."};\n";
|
||||
return $name;
|
||||
}
|
||||
|
||||
sub subst_var
|
||||
{
|
||||
my ($tmp, $var) = @_;
|
||||
$tmp =~ s/P\?/*ptr/g;
|
||||
$tmp =~ s/R/ret/g;
|
||||
$tmp =~ s/P(\d+)/$var\[$1\]/g;
|
||||
$tmp;
|
||||
}
|
||||
|
||||
sub parse_pushes # (name, code)
|
||||
{
|
||||
my ($name,$s)= @_;
|
||||
my $l=0;
|
||||
my %policko;
|
||||
my $i;
|
||||
my $tmp= "static expr_func $prefix${name}_funcs\[\]={\n";
|
||||
|
||||
while ($s ne "")
|
||||
{
|
||||
if ( ! ($s =~ /\s*PUSH(\d)\s*\(\s*(\w+)\s*\)\s*(.*)/) )
|
||||
{
|
||||
print STDERR "Wrong push code! :", $_;
|
||||
return "NULL";
|
||||
}
|
||||
$s= $3;
|
||||
$l= $1 if ($1 >= $l);
|
||||
$policko[$1]= $2;
|
||||
}
|
||||
|
||||
for ($i=0; $i <= $l; $i++)
|
||||
{
|
||||
$tmp .= ",\n" if ($i != 0) ;
|
||||
$policko[$i]= "NULL" if ( $policko[$i] eq "" );
|
||||
$tmp.= " {" . $policko[$i] . ", " . $policko[$i] . ", " . $policko[$i] . "}";
|
||||
}
|
||||
$tmp .= "\n};\n\n";
|
||||
$arr_str .= $tmp;
|
||||
sprintf "$prefix%s_funcs", $name;
|
||||
}
|
||||
|
||||
sub create_function # (name, nofp, init, body, return )
|
||||
{
|
||||
my $tmp= "";
|
||||
my ($name, $nofp, $init, $body, $return)= @_;
|
||||
|
||||
my $c, $i;
|
||||
@top_names= ("r_top", "g_top", "b_top", "alfa_top");
|
||||
my $tn;
|
||||
|
||||
foreach $c (1,3,4)
|
||||
{
|
||||
$def_str .= "static void $prefix$name$c(void);\n";
|
||||
$tmp .= "static void $prefix$name$c(void)\n{";
|
||||
|
||||
if (( $init ne "") || ($body ne ""))
|
||||
{ $tmp .= "\n register DBL ret;"; }
|
||||
if ( $body ne "")
|
||||
{ $tmp .= "\n register int i;\n register DBL *ptr;"; }
|
||||
if ( $nofp eq "-1")
|
||||
{ $tmp .= "\n register int num;\n\n num=(*n_top)->noo - 1;"; }
|
||||
$tmp .= "\n";
|
||||
|
||||
for ($i=0; $i < $c; $i++)
|
||||
{
|
||||
$tn= $top_names[$i];
|
||||
$tmp .= "\n";
|
||||
|
||||
if ($nofp eq "-1") { $tmp .= " $tn -= num;\n"; }
|
||||
elsif ($nofp ne "1") { $tmp .= " $tn -= $nofp - 1;\n"; }
|
||||
|
||||
if (($init eq "") && ($body eq ""))
|
||||
{
|
||||
$tmp .= " *$tn= ".subst_var($return,$tn).";\n";
|
||||
next;
|
||||
}
|
||||
|
||||
if ($init ne "")
|
||||
{ $tmp .= " ".subst_var($init,$tn)."\n" }
|
||||
|
||||
if ($body ne "")
|
||||
{ $tmp .= " for (i= num, ptr= ($tn+1); i; i--, ptr++)\n {\n ".subst_var($body,"")."\n }\n"; }
|
||||
|
||||
if ($return eq "") { $tmp .= " *$tn= ret;\n"; }
|
||||
else { $tmp .= " *$tn= ".subst_var($return,$tn).";\n"; }
|
||||
}
|
||||
|
||||
$tmp .= "}\n\n";
|
||||
}
|
||||
|
||||
$decl_str .= $tmp;
|
||||
return sprintf "{$prefix%s1, $prefix%s3, $prefix%s4}",$name, $name, $name;
|
||||
}
|
||||
|
||||
$pt_w= "Warning, bad table line: ";
|
||||
|
||||
sub parse_table
|
||||
{
|
||||
# name nofp nofd altstr rettype paramtype code
|
||||
if ( ! /^\s*(\w+)\s+(N|\d)\s+(\d)\s+(\S+)\s+([-134N])\s+(-|[134N]+)\s+(.*)$/ )
|
||||
{ print STDERR $pt_w, $_; return; }
|
||||
|
||||
my ($name,$nofp,$nofd,$altstr,$rettype,$paramtype,$code)= ($1,$2,$3,$4,$5,$6,$7);
|
||||
my $nstr= $name;
|
||||
my $fptrs= "NULL";
|
||||
my $lastfunc= "{NULL, NULL, NULL}";
|
||||
my $funcs= "NULL";
|
||||
my $c=0;
|
||||
|
||||
if ($altstr =~ /"(.+)"/) { $nstr=$1; }
|
||||
if ($nofp eq "N") { $nofp= "-1"; }
|
||||
if ($rettype eq "N") { $rettype= "-1" }
|
||||
|
||||
if ($paramtype eq "-") { $paramtype= "NULL"; }
|
||||
else { $paramtype= parse_ptypes($paramtype, $name); }
|
||||
|
||||
if ($code =~ /(INIT|BODY|RETURN)/ )
|
||||
{
|
||||
$f2= $prefix.$name;
|
||||
|
||||
my ($init, $fc, $body, $final) = ("","","","");;
|
||||
$c++;
|
||||
|
||||
|
||||
if ( $code =~ /^\s*INIT\{\{\s*(.*?)\s*\}\}(.*)$/ )
|
||||
{ $init= $1; $code= $2; }
|
||||
|
||||
if ( $code =~ /^\s*BODY\{\{\s*(.*?)\s*,\s*(.*?)\s*\}\}(.*)$/ )
|
||||
{
|
||||
$body= $2; $fc= $1; $code= $3;
|
||||
if ( $fc ne "1..N-1") {
|
||||
print STDERR "Function body: not yet implemented:",$_;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if ( $code =~ /^\s*RETURN\{\{(.*?)\}\}\s*(.*)$/ )
|
||||
{ $final= $1; $code= $2; }
|
||||
|
||||
if ($code ne "") { print "Warning: wrong code:",$_; return }
|
||||
|
||||
$lastfunc= create_function( $name,$nofp,$init, $body, $final );
|
||||
}
|
||||
elsif ($code =~ /\s*LAST\s*\(\s*(\w+)\s*\)\s*/ )
|
||||
{
|
||||
$lastfunc= "{$1,$1,$1}";
|
||||
}
|
||||
else
|
||||
{
|
||||
$funcs= parse_pushes($name, $code);
|
||||
}
|
||||
|
||||
$f1= $name if ($c==0);
|
||||
|
||||
if ($c > 1)
|
||||
{ print STDERR "Warning - you have to specify exacly one function: ", $_; return; }
|
||||
|
||||
$table_str .= ",\n" if ($ft != 0);
|
||||
$ft=1;
|
||||
|
||||
$table_str .= sprintf(" {\%16s\,\t%2d,\t$nofd,\t$rettype,\t$paramtype,\t$funcs,$lastfunc}", "\"$nstr\"", $nofp);
|
||||
$table_num++;
|
||||
}
|
||||
|
||||
##############################
|
||||
######
|
||||
##
|
||||
#
|
||||
|
||||
open IN, $ARGV[0];
|
||||
$operation= 0; # 0 - nothing, 1 - print, 2 - generate table
|
||||
$END="";
|
||||
|
||||
while (<IN>)
|
||||
{
|
||||
study;
|
||||
|
||||
if ($operation) {
|
||||
if ($END ne "")
|
||||
{ if (/^\s*$END\s*$/) { $operation=0; next; }}
|
||||
}
|
||||
|
||||
if ($operation==1) {print; next; }
|
||||
|
||||
if (/^\s*$/) { next; } # empty lines
|
||||
if (/^\s*\/\/.*$/) { next; } # c-- like comments
|
||||
|
||||
if ($operation == 0)
|
||||
{
|
||||
if ( ! /^\s*(\w+)\s*(\w*)\s*(<|)\s*(\w*)\s*$/ )
|
||||
{
|
||||
print STDERR "Wrong format of line: ", $_;
|
||||
next;
|
||||
}
|
||||
$command= $1;
|
||||
$comarg= $2;
|
||||
if ($3 ne "") {$END=$4; }
|
||||
|
||||
if ($command eq "PRINT") { $operation=1;}
|
||||
if ($command eq "TABLE") { begin_table; $operation=2; }
|
||||
if ($command eq "FLUSH") { flush; }
|
||||
|
||||
if ($command eq "END_OF_FILE") { break; }
|
||||
next;
|
||||
}
|
||||
|
||||
if ($operation == 2) { parse_table; }
|
||||
}
|
||||
|
||||
if ($operation != 0) { print STDERR "Warning: Unexpected end of file\n"; }
|
||||
|
|
@ -1,61 +0,0 @@
|
|||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
|
||||
#define DBL double
|
||||
|
||||
#define TABLE_SIZE 256
|
||||
|
||||
typedef struct {
|
||||
DBL x, y;
|
||||
} Vector2d;
|
||||
|
||||
static int perm_tab[TABLE_SIZE];
|
||||
static Vector2d grad_tab[TABLE_SIZE];
|
||||
|
||||
|
||||
void main(void)
|
||||
{
|
||||
int i, j, k, t;
|
||||
DBL m;
|
||||
|
||||
srand( time(NULL) );
|
||||
|
||||
for (i = 0; i < TABLE_SIZE; i++)
|
||||
perm_tab[i] = i;
|
||||
for (i = 0; i < TABLE_SIZE; i++) {
|
||||
j = rand () % TABLE_SIZE;
|
||||
k = rand () % TABLE_SIZE;
|
||||
t = perm_tab[j];
|
||||
perm_tab[j] = perm_tab[k];
|
||||
perm_tab[k] = t;
|
||||
}
|
||||
printf("static int perm_tab[TABLE_SIZE]= {\n ");
|
||||
for (i=0; i < TABLE_SIZE; i++)
|
||||
{
|
||||
if (i != 0) printf(",");
|
||||
if ((i!= 0) && ((i & 15) == 0)) printf("\n ");
|
||||
printf(" %3d", perm_tab[i]);
|
||||
}
|
||||
printf("\n};\n\n");
|
||||
|
||||
/* Initialize the gradient table */
|
||||
|
||||
printf("static Vector2d grad_tab[TABLE_SIZE]= {\n ");
|
||||
for (i = 0; i < TABLE_SIZE; i++) {
|
||||
do {
|
||||
grad_tab[i].x = (double)(rand () - (RAND_MAX >> 1)) / (RAND_MAX >> 1);
|
||||
grad_tab[i].y = (double)(rand () - (RAND_MAX >> 1)) / (RAND_MAX >> 1);
|
||||
m = grad_tab[i].x * grad_tab[i].x + grad_tab[i].y * grad_tab[i].y;
|
||||
} while (m == 0.0 || m > 1.0);
|
||||
m = 1.0 / sqrt(m);
|
||||
grad_tab[i].x *= m;
|
||||
grad_tab[i].y *= m;
|
||||
|
||||
if (i != 0) printf(",");
|
||||
if (i!= 0 && (i % 3 ==0)) printf("\n ");
|
||||
printf(" {%10f, %10f}", grad_tab[i].x, grad_tab[i].y);
|
||||
}
|
||||
printf("\n};\n");
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
Makefile.in
|
||||
Makefile
|
||||
.deps
|
||||
_libs
|
||||
.libs
|
||||
holes
|
|
@ -1,39 +0,0 @@
|
|||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
pluginlibdir = $(gimpplugindir)/plug-ins
|
||||
|
||||
pluginlib_PROGRAMS = holes
|
||||
|
||||
holes_SOURCES = \
|
||||
holes.c
|
||||
|
||||
INCLUDES = \
|
||||
$(X_CFLAGS) \
|
||||
-I$(top_srcdir) \
|
||||
-I$(includedir)
|
||||
|
||||
LDADD = \
|
||||
$(top_builddir)/libgimp/libgimpui.la \
|
||||
$(top_builddir)/libgimp/libgimp.la \
|
||||
$(X_LIBS) \
|
||||
\
|
||||
-lc
|
||||
|
||||
DEPS = \
|
||||
$(top_builddir)/libgimp/libgimpui.la \
|
||||
$(top_builddir)/libgimp/libgimp.la
|
||||
|
||||
holes_DEPENDENCIES = $(DEPS)
|
||||
|
||||
.PHONY: files
|
||||
|
||||
files:
|
||||
@files=`ls $(DISTFILES) 2> /dev/null`; for p in $$files; do \
|
||||
echo $$p; \
|
||||
done
|
||||
@for subdir in $(SUBDIRS); do \
|
||||
files=`cd $$subdir; $(MAKE) files | grep -v "make\[[1-9]\]"`; \
|
||||
for file in $$files; do \
|
||||
echo $$subdir/$$file; \
|
||||
done; \
|
||||
done
|
|
@ -1,904 +0,0 @@
|
|||
/* The GIMP -- an image manipulation program * Copyright (C) 1995 Spencer
|
||||
* Kimball and Peter Mattis * * This program is free software; you can
|
||||
* redistribute it and/or modify * it under the terms of the GNU General
|
||||
* Public License as published by * the Free Software Foundation; either
|
||||
* version 2 of the License, or * (at your option) any later version. * *
|
||||
* This program is distributed in the hope that it will be useful, * but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU
|
||||
* General Public License for more details. * * You should have received a
|
||||
* copy of the GNU General Public License * along with this program; if not,
|
||||
* write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA
|
||||
* 02139, USA. */
|
||||
/* Holes 0.5 */
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include "libgimp/gimp.h"
|
||||
#include "gtk/gtk.h"
|
||||
|
||||
/* Declare local functions. */
|
||||
static void query(void);
|
||||
static void run(char *name,
|
||||
int nparams,
|
||||
GParam * param,
|
||||
int *nreturn_vals,
|
||||
GParam ** return_vals);
|
||||
|
||||
static void doit(GDrawable * drawable);
|
||||
|
||||
/* UI funcs */
|
||||
#define ENTRY_WIDTH 50
|
||||
#define SCALE_WIDTH 150
|
||||
|
||||
static void UI_int_entryscale_new ( GtkTable *table, gint x, gint y,
|
||||
guchar *caption, gint *intvar,
|
||||
gint min, gint max, gint constraint);
|
||||
static void UI_paired_entry_destroy_callback (GtkWidget *widget,
|
||||
gpointer data);
|
||||
static void UI_paired_int_scale_update (GtkAdjustment *adjustment,
|
||||
gpointer data);
|
||||
static void UI_paired_int_entry_update (GtkWidget *widget,
|
||||
gpointer data);
|
||||
static void UI_float_entryscale_new ( GtkTable *table, gint x, gint y,
|
||||
guchar *caption, gfloat *var,
|
||||
gfloat min, gfloat max, gint constraint);
|
||||
static void UI_paired_float_scale_update (GtkAdjustment *adjustment,
|
||||
gpointer data);
|
||||
static void UI_paired_float_entry_update (GtkWidget *widget,
|
||||
gpointer data);
|
||||
static void UI_close_callback (GtkWidget *widget,
|
||||
gpointer data);
|
||||
static void UI_ok_callback (GtkWidget *widget,
|
||||
gpointer data);
|
||||
static gint dialog();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
GPlugInInfo PLUG_IN_INFO =
|
||||
{
|
||||
NULL, /* init_proc */
|
||||
NULL, /* quit_proc */
|
||||
query, /* query_proc */
|
||||
run, /* run_proc */
|
||||
};
|
||||
|
||||
|
||||
gint bytes;
|
||||
gint sx1, sy1, sx2, sy2;
|
||||
guchar *shape_data= NULL, *tmp= NULL;
|
||||
gint curve[256];
|
||||
|
||||
typedef struct {
|
||||
gint run;
|
||||
} HolesInterface;
|
||||
|
||||
typedef struct {
|
||||
GtkObject *adjustment;
|
||||
GtkWidget *entry;
|
||||
gint constraint;
|
||||
} EntryScaleData;
|
||||
|
||||
static HolesInterface pint =
|
||||
{
|
||||
FALSE /* run */
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
float density;
|
||||
gint shape, size, flag;
|
||||
} holes_parameters;
|
||||
|
||||
/* possible shapes */
|
||||
#define SQUARE_SHAPE 0
|
||||
#define CIRCLE_SHAPE 1
|
||||
#define DIAMOND_SHAPE 2
|
||||
static holes_parameters params = { -3.1, CIRCLE_SHAPE, 8, TRUE };
|
||||
|
||||
|
||||
MAIN()
|
||||
|
||||
static void query()
|
||||
{
|
||||
static GParamDef args[] =
|
||||
{
|
||||
{PARAM_INT32, "run_mode", "Interactive, non-interactive"},
|
||||
{PARAM_IMAGE, "image", "Input image (unused)"},
|
||||
{PARAM_DRAWABLE, "drawable", "Input drawable"},
|
||||
{PARAM_FLOAT, "density", "Density (actually the log of the density)"},
|
||||
{PARAM_INT32, "shape", "shape (0= square, 1= round, 2= diamond)"},
|
||||
{PARAM_INT32, "size", "size (in pixels)"},
|
||||
{PARAM_INT32, "flag", "Clear it if you want to make holes in your image, or set it if you want to keep the painted (I mean opaque) regions."},
|
||||
};
|
||||
static GParamDef *return_vals = NULL;
|
||||
static int nargs = sizeof(args) / sizeof(args[0]);
|
||||
static int nreturn_vals = 0;
|
||||
|
||||
gimp_install_procedure("plug_in_holes",
|
||||
"make bucks on a image.",
|
||||
"makes holes in the alpha channel of an image, with a density depending on the actual transparency of this image. (so the image must have an alpha channel...)",
|
||||
"Xavier Bouchoux",
|
||||
"Xavier Bouchoux",
|
||||
"1997",
|
||||
"<Image>/Image/Alpha/Holes",
|
||||
"RGBA, GRAYA, INDEXEDA",
|
||||
PROC_PLUG_IN,
|
||||
nargs, nreturn_vals,
|
||||
args, return_vals
|
||||
);
|
||||
}
|
||||
|
||||
static void run(char *name, int n_params, GParam * param, int *nreturn_vals,
|
||||
GParam ** return_vals)
|
||||
{
|
||||
static GParam values[1];
|
||||
GDrawable *drawable;
|
||||
GRunModeType run_mode;
|
||||
GStatusType status = STATUS_SUCCESS;
|
||||
|
||||
/* initialize */
|
||||
|
||||
drawable = NULL;
|
||||
|
||||
*nreturn_vals = 1;
|
||||
*return_vals = values;
|
||||
|
||||
run_mode = param[0].data.d_int32;
|
||||
|
||||
if (run_mode == RUN_NONINTERACTIVE) {
|
||||
if (n_params != 7) {
|
||||
status = STATUS_CALLING_ERROR;
|
||||
} else {
|
||||
params.density = param[3].data.d_float;
|
||||
params.shape = param[4].data.d_int32;
|
||||
params.size = param[5].data.d_int32;
|
||||
params.flag = param[6].data.d_int32;
|
||||
}
|
||||
} else {
|
||||
/* Possibly retrieve data */
|
||||
gimp_get_data("plug_in_holes", ¶ms);
|
||||
|
||||
if ((run_mode == RUN_INTERACTIVE) ) {
|
||||
/* Oh boy. We get to do a dialog box, because we can't really expect the
|
||||
* user to set us up with the right values using gdb.
|
||||
*/
|
||||
if (!dialog()) {
|
||||
/* The dialog was closed, or something similarly evil happened. */
|
||||
status = STATUS_EXECUTION_ERROR;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (status == STATUS_SUCCESS) {
|
||||
/* Get the specified drawable */
|
||||
drawable = gimp_drawable_get(param[2].data.d_drawable);
|
||||
|
||||
/* Make sure that the drawable is gray or RGB color */
|
||||
if (gimp_drawable_has_alpha (drawable->id) && (gimp_drawable_color(drawable->id) || gimp_drawable_gray(drawable->id) ||gimp_drawable_indexed (drawable->id))) {
|
||||
gimp_progress_init("holes");
|
||||
gimp_tile_cache_ntiles(4);
|
||||
|
||||
srand(time(NULL));
|
||||
doit(drawable);
|
||||
|
||||
if (run_mode != RUN_NONINTERACTIVE)
|
||||
gimp_displays_flush();
|
||||
|
||||
if (run_mode == RUN_INTERACTIVE)
|
||||
gimp_set_data("plug_in_holes", ¶ms, sizeof(params));
|
||||
} else {
|
||||
status = STATUS_EXECUTION_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
values[0].type = PARAM_STATUS;
|
||||
values[0].data.d_status = status;
|
||||
|
||||
gimp_drawable_detach(drawable);
|
||||
}
|
||||
|
||||
|
||||
static void make_curve (gdouble sigma)
|
||||
{
|
||||
gdouble sigma2;
|
||||
gint i;
|
||||
|
||||
sigma2 = 2 * sigma * sigma;
|
||||
|
||||
if (params.flag)
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
curve[i] = (gint) (exp (- (i/22.0 * i/22.0) / sigma2) * RAND_MAX);
|
||||
}
|
||||
else
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
curve[255-i] = (gint) (exp (- (i/22.0 * i/22.0) / sigma2) * RAND_MAX);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Prepare the shape data: makes a buffer with the shape calculated with
|
||||
* the goood size.
|
||||
*/
|
||||
static int prepare_shape()
|
||||
{
|
||||
int i,j, center;
|
||||
|
||||
shape_data = malloc(params.size*params.size);
|
||||
if (shape_data == NULL)
|
||||
return 0;
|
||||
|
||||
switch (params.shape) {
|
||||
case SQUARE_SHAPE:
|
||||
for (i=0;i<params.size; i++)
|
||||
for (j=0; j<params.size; j++)
|
||||
shape_data[i*params.size+j]=255;
|
||||
break;
|
||||
case CIRCLE_SHAPE:
|
||||
center= params.size/2;
|
||||
for (i=0;i<params.size; i++)
|
||||
for (j=0; j<params.size; j++)
|
||||
if (((i-center)*(i-center)+(j-center)*(j-center))<center*center)
|
||||
shape_data[i*params.size+j]=255;
|
||||
else
|
||||
shape_data[i*params.size+j]=0;
|
||||
break;
|
||||
case DIAMOND_SHAPE:
|
||||
center= params.size/2;
|
||||
for (i=0; i<params.size; i++)
|
||||
for (j=0; j<params.size; j++)
|
||||
if ((abs(i-center)+abs(j-center))<center)
|
||||
shape_data[i*params.size+j]=255;
|
||||
else
|
||||
shape_data[i*params.size+j]=0;
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Puts the shape (=the buck) in the alpha layer of the destination image,
|
||||
* at position x,y
|
||||
*/
|
||||
static void make_hole(GPixelRgn * region, int x, int y)
|
||||
{
|
||||
int j, k, startx=0, starty=0;
|
||||
int rx1, rx2, ry1, ry2;
|
||||
int new;
|
||||
|
||||
rx1 = x - params.size / 2;
|
||||
rx2 = rx1 + params.size;
|
||||
ry1 = y - params.size / 2;
|
||||
ry2 = ry1 + params.size;
|
||||
|
||||
/* clipping */
|
||||
if (rx1 < sx1) {
|
||||
startx=sx1-rx1;
|
||||
rx1= sx1;
|
||||
}
|
||||
if (ry1 < sy1) {
|
||||
starty=sy1-ry1;
|
||||
ry1= sy1;
|
||||
}
|
||||
rx2 = rx2 > sx2 ? sx2 : rx2;
|
||||
ry2 = ry2 > sy2 ? sy2 : ry2;
|
||||
|
||||
gimp_pixel_rgn_get_rect(region, tmp, rx1, ry1, rx2 - rx1, ry2 - ry1);
|
||||
for (k = 0; k < (ry2 - ry1); k++) {
|
||||
for (j = 0; j < (rx2 - rx1); j++) {
|
||||
new= tmp[((rx2-rx1)*k+j) * bytes + (bytes-1)]-
|
||||
shape_data[params.size*(k+starty)+j+startx];
|
||||
tmp[((rx2-rx1)*k+j) * bytes + (bytes-1)]= (new<=0? 0 : new);
|
||||
}
|
||||
}
|
||||
gimp_pixel_rgn_set_rect(region, tmp, rx1, ry1, rx2 - rx1, ry2 - ry1);
|
||||
}
|
||||
|
||||
static void make_hole_inv(GPixelRgn * region, int x, int y)
|
||||
{
|
||||
int j, k, startx=0, starty=0;
|
||||
int rx1, rx2, ry1, ry2;
|
||||
int new;
|
||||
|
||||
rx1 = x - params.size / 2;
|
||||
rx2 = rx1 + params.size;
|
||||
ry1 = y - params.size / 2;
|
||||
ry2 = ry1 + params.size;
|
||||
|
||||
/* clipping */
|
||||
if (rx1 < sx1) {
|
||||
startx=sx1-rx1;
|
||||
rx1= sx1;
|
||||
}
|
||||
if (ry1 < sy1) {
|
||||
starty=sy1-ry1;
|
||||
ry1= sy1;
|
||||
}
|
||||
rx2 = rx2 > sx2 ? sx2 : rx2;
|
||||
ry2 = ry2 > sy2 ? sy2 : ry2;
|
||||
|
||||
gimp_pixel_rgn_get_rect(region, tmp, rx1, ry1, rx2 - rx1, ry2 - ry1);
|
||||
for (k = 0; k < (ry2 - ry1); k++) {
|
||||
for (j = 0; j < (rx2 - rx1); j++) {
|
||||
new= tmp[((rx2-rx1)*k+j) * bytes + (bytes-1)]+
|
||||
shape_data[params.size*(k+starty)+j+startx];
|
||||
tmp[((rx2-rx1)*k+j) * bytes + (bytes-1)]= (new>255? 255 : new);
|
||||
}
|
||||
}
|
||||
gimp_pixel_rgn_set_rect(region, tmp, rx1, ry1, rx2 - rx1, ry2 - ry1);
|
||||
}
|
||||
|
||||
static void doit(GDrawable * drawable)
|
||||
{
|
||||
GPixelRgn srcPR, destPR;
|
||||
gint width, height;
|
||||
int x, y;
|
||||
int col, row, b;
|
||||
guchar *src_row, *dest_row;
|
||||
guchar *src, *dest;
|
||||
gint progress, max_progress;
|
||||
gpointer pr;
|
||||
guchar val_alpha;
|
||||
|
||||
/* Get the input area. This is the bounding box of the selection in
|
||||
* the image (or the entire image if there is no selection). Only
|
||||
* operating on the input area is simply an optimization. It doesn't
|
||||
* need to be done for correct operation. (It simply makes it go
|
||||
* faster, since fewer pixels need to be operated on).
|
||||
*/
|
||||
gimp_drawable_mask_bounds(drawable->id, &sx1, &sy1, &sx2, &sy2);
|
||||
|
||||
/* Get the size of the input image. (This will/must be the same
|
||||
* as the size of the output image.
|
||||
*/
|
||||
width = drawable->width;
|
||||
height = drawable->height;
|
||||
bytes = drawable->bpp;
|
||||
|
||||
/* initialize buffers and data */
|
||||
tmp = (guchar *) malloc(params.size * params.size * bytes);
|
||||
if (tmp == NULL) {
|
||||
return;
|
||||
}
|
||||
if (!prepare_shape())
|
||||
return;
|
||||
make_curve(exp(-params.density));
|
||||
|
||||
progress = 0;
|
||||
max_progress = (sx2 - sx1) * (sy2 - sy1) * 2;
|
||||
|
||||
|
||||
|
||||
/* initialize the pixel regions */
|
||||
gimp_pixel_rgn_init(&srcPR, drawable, sx1, sy1, sx2-sx1, sy2-sy1, FALSE, FALSE);
|
||||
gimp_pixel_rgn_init(&destPR, drawable, sx1, sy1, sx2-sx1, sy2-sy1, TRUE, TRUE);
|
||||
|
||||
/* First off, copy the old one to the new one. */
|
||||
if (params.flag)
|
||||
val_alpha=0;
|
||||
else
|
||||
val_alpha=255;
|
||||
|
||||
for (pr = gimp_pixel_rgns_register (2, &srcPR, &destPR);
|
||||
pr != NULL; pr = gimp_pixel_rgns_process (pr)) {
|
||||
src_row = srcPR.data;
|
||||
dest_row = destPR.data;
|
||||
for ( row = 0; row < srcPR.h; row++) {
|
||||
src = src_row;
|
||||
dest = dest_row;
|
||||
for ( col = 0; col < srcPR.w; col++) {
|
||||
for (b=0; b< bytes-1; b++)
|
||||
*dest++ = *src++;
|
||||
src++; /* set alpha to opaque */
|
||||
*dest++ = val_alpha;
|
||||
}
|
||||
src_row += srcPR.rowstride;
|
||||
dest_row += destPR.rowstride;
|
||||
}
|
||||
progress += srcPR.w * srcPR.h;
|
||||
gimp_progress_update ((double) progress / (double) max_progress);
|
||||
}
|
||||
|
||||
/* Do the effect */
|
||||
gimp_pixel_rgn_init(&srcPR, drawable, sx1, sy1, sx2-sx1, sy2-sy1, FALSE, FALSE);
|
||||
if (params.flag) {
|
||||
for (pr = gimp_pixel_rgns_register (1, &srcPR);
|
||||
pr != NULL; pr = gimp_pixel_rgns_process (pr)) {
|
||||
src_row = srcPR.data;
|
||||
for ( row = 0, y = srcPR.y; row < srcPR.h; row++, y++) {
|
||||
src = src_row;
|
||||
for ( col = 0, x = srcPR.x; col < srcPR.w; col++, x++) {
|
||||
if (curve[src[bytes-1]]<rand()) {
|
||||
make_hole_inv(&destPR, x, y);
|
||||
}
|
||||
src+= bytes;
|
||||
}
|
||||
src_row += srcPR.rowstride;
|
||||
}
|
||||
progress += srcPR.w * srcPR.h;
|
||||
gimp_progress_update ((double) progress / (double) max_progress);
|
||||
}
|
||||
} else {
|
||||
for (pr = gimp_pixel_rgns_register (1, &srcPR);
|
||||
pr != NULL; pr = gimp_pixel_rgns_process (pr)) {
|
||||
src_row = srcPR.data;
|
||||
for ( row = 0, y = srcPR.y; row < srcPR.h; row++, y++) {
|
||||
src = src_row;
|
||||
for ( col = 0, x = srcPR.x; col < srcPR.w; col++, x++) {
|
||||
if (curve[src[bytes-1]]<rand()) {
|
||||
make_hole(&destPR, x, y);
|
||||
}
|
||||
src+= bytes;
|
||||
}
|
||||
src_row += srcPR.rowstride;
|
||||
}
|
||||
progress += srcPR.w * srcPR.h;
|
||||
gimp_progress_update ((double) progress / (double) max_progress);
|
||||
}
|
||||
}
|
||||
/* free the mem */
|
||||
free(tmp);
|
||||
free(shape_data);
|
||||
|
||||
|
||||
/* update the region */
|
||||
gimp_drawable_flush(drawable);
|
||||
gimp_drawable_merge_shadow(drawable->id, TRUE);
|
||||
gimp_drawable_update(drawable->id, sx1, sy1, sx2 - sx1, sy2 - sy1);
|
||||
}
|
||||
|
||||
/***************************************************
|
||||
* GUI stuff
|
||||
*/
|
||||
/*===================================================================
|
||||
|
||||
Entry - Scale Pair
|
||||
|
||||
====================================================================*/
|
||||
|
||||
|
||||
/***********************************************************************/
|
||||
/* */
|
||||
/* Create new entry-scale pair with label. (int) */
|
||||
/* 1 row and 2 cols of table are needed. */
|
||||
/* */
|
||||
/* `x' and `y' means starting row and col in `table'. */
|
||||
/* */
|
||||
/* `caption' is label string. */
|
||||
/* */
|
||||
/* `min', `max' are boundary of scale. */
|
||||
/* */
|
||||
/* `constraint' means whether value of *intvar should be constraint */
|
||||
/* by scale adjustment, e.g. between `min' and `max'. */
|
||||
/* */
|
||||
/***********************************************************************/
|
||||
|
||||
static void
|
||||
UI_int_entryscale_new ( GtkTable *table, gint x, gint y,
|
||||
guchar *caption, gint *intvar,
|
||||
gint min, gint max, gint constraint)
|
||||
{
|
||||
GtkWidget *hbox;
|
||||
GtkWidget *label;
|
||||
GtkWidget *entry;
|
||||
GtkWidget *scale;
|
||||
GtkObject *adjustment;
|
||||
EntryScaleData *userdata;
|
||||
guchar buffer[256];
|
||||
|
||||
label = gtk_label_new (caption);
|
||||
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
|
||||
|
||||
adjustment = gtk_adjustment_new ( *intvar, min, max, 1.0, 1.0, 0.0);
|
||||
scale = gtk_hscale_new ( GTK_ADJUSTMENT(adjustment) );
|
||||
gtk_widget_set_usize (scale, SCALE_WIDTH, 0);
|
||||
gtk_scale_set_draw_value (GTK_SCALE (scale), FALSE);
|
||||
|
||||
entry = gtk_entry_new ();
|
||||
gtk_widget_set_usize (entry, ENTRY_WIDTH, 0);
|
||||
sprintf( buffer, "%d", *intvar );
|
||||
gtk_entry_set_text( GTK_ENTRY (entry), buffer );
|
||||
|
||||
|
||||
userdata = g_new ( EntryScaleData, 1 );
|
||||
userdata->entry = entry;
|
||||
userdata->adjustment = adjustment;
|
||||
userdata->constraint = constraint;
|
||||
gtk_object_set_user_data (GTK_OBJECT(entry), userdata);
|
||||
gtk_object_set_user_data (GTK_OBJECT(adjustment), userdata);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (entry), "changed",
|
||||
(GtkSignalFunc) UI_paired_int_entry_update,
|
||||
intvar);
|
||||
gtk_signal_connect ( adjustment, "value_changed",
|
||||
(GtkSignalFunc) UI_paired_int_scale_update,
|
||||
intvar);
|
||||
gtk_signal_connect ( GTK_OBJECT( entry ), "destroy",
|
||||
(GtkSignalFunc) UI_paired_entry_destroy_callback,
|
||||
userdata );
|
||||
|
||||
|
||||
hbox = gtk_hbox_new ( FALSE, 5 );
|
||||
gtk_box_pack_start (GTK_BOX (hbox), scale, TRUE, TRUE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), entry, FALSE, TRUE, 0);
|
||||
|
||||
gtk_table_attach (GTK_TABLE (table), label, x, x+1, y, y+1,
|
||||
GTK_FILL, GTK_FILL, 0, 0);
|
||||
gtk_table_attach (GTK_TABLE (table), hbox, x+1, x+2, y, y+1,
|
||||
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
|
||||
|
||||
gtk_widget_show (label);
|
||||
gtk_widget_show (entry);
|
||||
gtk_widget_show (scale);
|
||||
gtk_widget_show (hbox);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
when destroyed, userdata is destroyed too
|
||||
*/
|
||||
static void
|
||||
UI_paired_entry_destroy_callback (GtkWidget *widget,
|
||||
gpointer data)
|
||||
{
|
||||
EntryScaleData *userdata;
|
||||
userdata = data;
|
||||
g_free ( userdata );
|
||||
}
|
||||
|
||||
/* scale callback (int) */
|
||||
/* ==================== */
|
||||
|
||||
static void
|
||||
UI_paired_int_scale_update (GtkAdjustment *adjustment,
|
||||
gpointer data)
|
||||
{
|
||||
EntryScaleData *userdata;
|
||||
GtkEntry *entry;
|
||||
gchar buffer[256];
|
||||
gint *val, new_val;
|
||||
|
||||
val = data;
|
||||
new_val = (gint) adjustment->value;
|
||||
|
||||
*val = new_val;
|
||||
|
||||
userdata = gtk_object_get_user_data (GTK_OBJECT (adjustment));
|
||||
entry = GTK_ENTRY( userdata->entry );
|
||||
sprintf (buffer, "%d", (int) new_val );
|
||||
/* avoid infinite loop (scale, entry, scale, entry ...) */
|
||||
gtk_signal_handler_block_by_data ( GTK_OBJECT(entry), data );
|
||||
gtk_entry_set_text ( entry, buffer);
|
||||
gtk_signal_handler_unblock_by_data ( GTK_OBJECT(entry), data );
|
||||
}
|
||||
|
||||
/*
|
||||
entry callback (int)
|
||||
*/
|
||||
|
||||
static void
|
||||
UI_paired_int_entry_update (GtkWidget *widget,
|
||||
gpointer data)
|
||||
{
|
||||
EntryScaleData *userdata;
|
||||
GtkAdjustment *adjustment;
|
||||
int new_val, constraint_val;
|
||||
int *val;
|
||||
|
||||
val = data;
|
||||
new_val = atoi (gtk_entry_get_text (GTK_ENTRY (widget)));
|
||||
*val = new_val;
|
||||
|
||||
userdata = gtk_object_get_user_data (GTK_OBJECT (widget));
|
||||
adjustment = GTK_ADJUSTMENT( userdata->adjustment );
|
||||
|
||||
constraint_val = new_val;
|
||||
if ( constraint_val < adjustment->lower )
|
||||
constraint_val = adjustment->lower;
|
||||
if ( constraint_val > adjustment->upper )
|
||||
constraint_val = adjustment->upper;
|
||||
|
||||
if ( userdata->constraint )
|
||||
*val = constraint_val;
|
||||
else
|
||||
*val = new_val;
|
||||
|
||||
adjustment->value = constraint_val;
|
||||
gtk_signal_handler_block_by_data ( GTK_OBJECT(adjustment), data );
|
||||
gtk_signal_emit_by_name ( GTK_OBJECT(adjustment), "value_changed");
|
||||
gtk_signal_handler_unblock_by_data ( GTK_OBJECT(adjustment), data );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* The same thing, but with floats... */
|
||||
|
||||
static void
|
||||
UI_float_entryscale_new ( GtkTable *table, gint x, gint y,
|
||||
guchar *caption, gfloat *var,
|
||||
gfloat min, gfloat max, gint constraint)
|
||||
{
|
||||
GtkWidget *hbox;
|
||||
GtkWidget *label;
|
||||
GtkWidget *entry;
|
||||
GtkWidget *scale;
|
||||
GtkObject *adjustment;
|
||||
EntryScaleData *userdata;
|
||||
guchar buffer[256];
|
||||
|
||||
label = gtk_label_new (caption);
|
||||
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
|
||||
|
||||
adjustment = gtk_adjustment_new ( *var, min, max, 1.0, 1.0, 0.0);
|
||||
scale = gtk_hscale_new ( GTK_ADJUSTMENT(adjustment) );
|
||||
gtk_widget_set_usize (scale, SCALE_WIDTH, 0);
|
||||
gtk_scale_set_draw_value (GTK_SCALE (scale), FALSE);
|
||||
|
||||
entry = gtk_entry_new ();
|
||||
gtk_widget_set_usize (entry, ENTRY_WIDTH, 0);
|
||||
sprintf( buffer, "%1.2f", *var );
|
||||
gtk_entry_set_text( GTK_ENTRY (entry), buffer );
|
||||
|
||||
|
||||
userdata = g_new ( EntryScaleData, 1 );
|
||||
userdata->entry = entry;
|
||||
userdata->adjustment = adjustment;
|
||||
userdata->constraint = constraint;
|
||||
gtk_object_set_user_data (GTK_OBJECT(entry), userdata);
|
||||
gtk_object_set_user_data (GTK_OBJECT(adjustment), userdata);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (entry), "changed",
|
||||
(GtkSignalFunc) UI_paired_float_entry_update,
|
||||
var);
|
||||
gtk_signal_connect ( adjustment, "value_changed",
|
||||
(GtkSignalFunc) UI_paired_float_scale_update,
|
||||
var);
|
||||
gtk_signal_connect ( GTK_OBJECT( entry ), "destroy",
|
||||
(GtkSignalFunc) UI_paired_entry_destroy_callback,
|
||||
userdata );
|
||||
|
||||
|
||||
hbox = gtk_hbox_new ( FALSE, 5 );
|
||||
gtk_box_pack_start (GTK_BOX (hbox), scale, TRUE, TRUE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), entry, FALSE, TRUE, 0);
|
||||
|
||||
gtk_table_attach (GTK_TABLE (table), label, x, x+1, y, y+1,
|
||||
GTK_FILL, GTK_FILL, 0, 0);
|
||||
gtk_table_attach (GTK_TABLE (table), hbox, x+1, x+2, y, y+1,
|
||||
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
|
||||
|
||||
gtk_widget_show (label);
|
||||
gtk_widget_show (entry);
|
||||
gtk_widget_show (scale);
|
||||
gtk_widget_show (hbox);
|
||||
}
|
||||
|
||||
|
||||
/* scale callback (float) */
|
||||
/* ==================== */
|
||||
|
||||
static void
|
||||
UI_paired_float_scale_update (GtkAdjustment *adjustment,
|
||||
gpointer data)
|
||||
{
|
||||
EntryScaleData *userdata;
|
||||
GtkEntry *entry;
|
||||
gchar buffer[256];
|
||||
gfloat *val, new_val;
|
||||
|
||||
val = data;
|
||||
new_val = (gfloat) adjustment->value;
|
||||
|
||||
*val = new_val;
|
||||
|
||||
userdata = gtk_object_get_user_data (GTK_OBJECT (adjustment));
|
||||
entry = GTK_ENTRY( userdata->entry );
|
||||
sprintf (buffer, "%1.2f", (gfloat) new_val );
|
||||
/* avoid infinite loop (scale, entry, scale, entry ...) */
|
||||
gtk_signal_handler_block_by_data ( GTK_OBJECT(entry), data );
|
||||
gtk_entry_set_text ( entry, buffer);
|
||||
gtk_signal_handler_unblock_by_data ( GTK_OBJECT(entry), data );
|
||||
}
|
||||
|
||||
/*
|
||||
entry callback (float)
|
||||
*/
|
||||
|
||||
static void
|
||||
UI_paired_float_entry_update (GtkWidget *widget,
|
||||
gpointer data)
|
||||
{
|
||||
EntryScaleData *userdata;
|
||||
GtkAdjustment *adjustment;
|
||||
gfloat new_val, constraint_val;
|
||||
gfloat *val;
|
||||
|
||||
val = data;
|
||||
new_val = atof (gtk_entry_get_text (GTK_ENTRY (widget)));
|
||||
*val = new_val;
|
||||
|
||||
userdata = gtk_object_get_user_data (GTK_OBJECT (widget));
|
||||
adjustment = GTK_ADJUSTMENT( userdata->adjustment );
|
||||
|
||||
constraint_val = new_val;
|
||||
if ( constraint_val < adjustment->lower )
|
||||
constraint_val = adjustment->lower;
|
||||
if ( constraint_val > adjustment->upper )
|
||||
constraint_val = adjustment->upper;
|
||||
|
||||
if ( userdata->constraint )
|
||||
*val = constraint_val;
|
||||
else
|
||||
*val = new_val;
|
||||
|
||||
adjustment->value = constraint_val;
|
||||
gtk_signal_handler_block_by_data ( GTK_OBJECT(adjustment), data );
|
||||
gtk_signal_emit_by_name ( GTK_OBJECT(adjustment), "value_changed");
|
||||
gtk_signal_handler_unblock_by_data ( GTK_OBJECT(adjustment), data );
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
UI_toggle_update (GtkWidget *widget,
|
||||
gpointer data)
|
||||
{
|
||||
int *toggle_val;
|
||||
|
||||
toggle_val = (int *) data;
|
||||
|
||||
if (GTK_TOGGLE_BUTTON (widget)->active)
|
||||
*toggle_val = TRUE;
|
||||
else
|
||||
*toggle_val = FALSE;
|
||||
}
|
||||
|
||||
|
||||
void shape_radio_callback(GtkWidget *widget, GtkRadioButton *button)
|
||||
{
|
||||
gint id;
|
||||
/* Get radio button ID */
|
||||
id=(gint)gtk_object_get_data(GTK_OBJECT(button),"Radio_ID");
|
||||
|
||||
if (GTK_TOGGLE_BUTTON(button)->active==TRUE) {
|
||||
params.shape= id;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*** Dialog interface ***/
|
||||
|
||||
static void
|
||||
UI_close_callback (GtkWidget *widget,
|
||||
gpointer data)
|
||||
{
|
||||
gtk_main_quit ();
|
||||
}
|
||||
|
||||
static void
|
||||
UI_ok_callback (GtkWidget *widget,
|
||||
gpointer data)
|
||||
{
|
||||
pint.run = TRUE;
|
||||
gtk_widget_destroy (GTK_WIDGET (data));
|
||||
}
|
||||
|
||||
static gint
|
||||
dialog ()
|
||||
{
|
||||
GtkWidget *dlg;
|
||||
GtkWidget *frame;
|
||||
GtkWidget *table;
|
||||
GtkWidget *button;
|
||||
GtkWidget *toggle;
|
||||
GSList *group = NULL;
|
||||
|
||||
gchar **argv;
|
||||
gint argc;
|
||||
|
||||
argc = 1;
|
||||
argv = g_new (gchar *, 1);
|
||||
argv[0] = g_strdup ("holes");
|
||||
|
||||
gtk_init (&argc, &argv);
|
||||
gtk_rc_parse (gimp_gtkrc ());
|
||||
|
||||
dlg = gtk_dialog_new ();
|
||||
gtk_window_set_title (GTK_WINDOW (dlg), "Holes");
|
||||
gtk_window_position (GTK_WINDOW (dlg), GTK_WIN_POS_MOUSE);
|
||||
gtk_signal_connect (GTK_OBJECT (dlg), "destroy",
|
||||
(GtkSignalFunc) UI_close_callback,
|
||||
NULL);
|
||||
|
||||
/* Action area */
|
||||
button = gtk_button_new_with_label ("OK");
|
||||
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect (GTK_OBJECT (button), "clicked",
|
||||
(GtkSignalFunc) UI_ok_callback,
|
||||
dlg);
|
||||
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->action_area), button, TRUE, TRUE, 0);
|
||||
gtk_widget_grab_default (button);
|
||||
gtk_widget_show (button);
|
||||
|
||||
button = gtk_button_new_with_label ("Cancel");
|
||||
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
|
||||
(GtkSignalFunc) gtk_widget_destroy,
|
||||
GTK_OBJECT (dlg));
|
||||
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->action_area), button, TRUE, TRUE, 0);
|
||||
gtk_widget_show (button);
|
||||
|
||||
/* parameter settings */
|
||||
frame = gtk_frame_new ("Parameter Settings");
|
||||
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
|
||||
gtk_container_border_width (GTK_CONTAINER (frame), 10);
|
||||
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), frame, TRUE, TRUE, 0);
|
||||
table = gtk_table_new (6, 2, FALSE);
|
||||
gtk_container_border_width (GTK_CONTAINER (table), 10);
|
||||
gtk_container_add (GTK_CONTAINER (frame), table);
|
||||
gtk_table_set_row_spacings (GTK_TABLE (table), 3);
|
||||
gtk_table_set_col_spacings (GTK_TABLE (table), 10);
|
||||
|
||||
UI_int_entryscale_new( GTK_TABLE (table), 0, 1,
|
||||
"Size:", ¶ms.size,
|
||||
1, 100, TRUE );
|
||||
UI_float_entryscale_new( GTK_TABLE (table), 0, 2,
|
||||
"Density:", ¶ms.density,
|
||||
-5.0, 5.0, TRUE );
|
||||
toggle = gtk_check_button_new_with_label ("Keep opaque");
|
||||
gtk_table_attach (GTK_TABLE (table), toggle, 0, 1, 3, 4,
|
||||
GTK_FILL, GTK_FILL, 0, 0);
|
||||
gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
|
||||
(GtkSignalFunc) UI_toggle_update,
|
||||
¶ms.flag);
|
||||
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), params.flag);
|
||||
gtk_widget_show(toggle);
|
||||
|
||||
toggle = gtk_radio_button_new_with_label (group,"square shaped holes");
|
||||
group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle));
|
||||
gtk_table_attach (GTK_TABLE (table), toggle, 1, 2, 3, 4,
|
||||
GTK_FILL, GTK_FILL, 0, 0);
|
||||
gtk_signal_connect_object (GTK_OBJECT (toggle), "toggled",
|
||||
(GtkSignalFunc) shape_radio_callback,
|
||||
(gpointer)toggle);
|
||||
gtk_object_set_data(GTK_OBJECT(toggle),"Radio_ID",(gpointer)SQUARE_SHAPE);
|
||||
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), (params.shape == SQUARE_SHAPE));
|
||||
gtk_widget_show (toggle);
|
||||
|
||||
toggle = gtk_radio_button_new_with_label (group,"round shaped holes");
|
||||
group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle));
|
||||
gtk_table_attach (GTK_TABLE (table), toggle, 1, 2, 4, 5,
|
||||
GTK_FILL, GTK_FILL, 0, 0);
|
||||
gtk_signal_connect_object (GTK_OBJECT (toggle), "toggled",
|
||||
(GtkSignalFunc) shape_radio_callback,
|
||||
(gpointer)toggle);
|
||||
gtk_object_set_data(GTK_OBJECT(toggle),"Radio_ID",(gpointer)CIRCLE_SHAPE);
|
||||
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), (params.shape == CIRCLE_SHAPE));
|
||||
gtk_widget_show (toggle);
|
||||
|
||||
toggle = gtk_radio_button_new_with_label (group,"diamond shaped holes");
|
||||
group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle));
|
||||
gtk_table_attach (GTK_TABLE (table), toggle, 1, 2, 5, 6,
|
||||
GTK_FILL, GTK_FILL, 0, 0);
|
||||
gtk_signal_connect_object (GTK_OBJECT (toggle), "toggled",
|
||||
(GtkSignalFunc) shape_radio_callback,
|
||||
(gpointer)toggle);
|
||||
gtk_object_set_data(GTK_OBJECT(toggle),"Radio_ID",(gpointer)DIAMOND_SHAPE);
|
||||
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), (params.shape == DIAMOND_SHAPE));
|
||||
gtk_widget_show (toggle);
|
||||
|
||||
gtk_widget_show (frame);
|
||||
gtk_widget_show (table);
|
||||
gtk_widget_show (dlg);
|
||||
|
||||
gtk_main ();
|
||||
gdk_flush ();
|
||||
|
||||
return pint.run;
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
Makefile.in
|
||||
Makefile
|
||||
.deps
|
||||
_libs
|
||||
.libs
|
||||
rcm
|
|
@ -1,39 +0,0 @@
|
|||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
pluginlibdir = $(gimpplugindir)/plug-ins
|
||||
|
||||
pluginlib_PROGRAMS = rcm
|
||||
|
||||
rcm_SOURCES = \
|
||||
pmg_gtk_objects.c pmg_gtk_objects.h rcm.c rcm.h rcm_360.xpm rcm_a_b.xpm rcm_ccw.xpm rcm_cw.xpm rcm_gdk.c rcm_gtk.c rcm_hsv.c rcm_hsv.h rcm_misc.c
|
||||
|
||||
INCLUDES = \
|
||||
$(X_CFLAGS) \
|
||||
-I$(top_srcdir) \
|
||||
-I$(includedir)
|
||||
|
||||
LDADD = \
|
||||
$(top_builddir)/libgimp/libgimpui.la \
|
||||
$(top_builddir)/libgimp/libgimp.la \
|
||||
$(X_LIBS) \
|
||||
\
|
||||
-lc
|
||||
|
||||
DEPS = \
|
||||
$(top_builddir)/libgimp/libgimpui.la \
|
||||
$(top_builddir)/libgimp/libgimp.la
|
||||
|
||||
rcm_DEPENDENCIES = $(DEPS)
|
||||
|
||||
.PHONY: files
|
||||
|
||||
files:
|
||||
@files=`ls $(DISTFILES) 2> /dev/null`; for p in $$files; do \
|
||||
echo $$p; \
|
||||
done
|
||||
@for subdir in $(SUBDIRS); do \
|
||||
files=`cd $$subdir; $(MAKE) files | grep -v "make\[[1-9]\]"`; \
|
||||
for file in $$files; do \
|
||||
echo $$subdir/$$file; \
|
||||
done; \
|
||||
done
|
|
@ -1,27 +0,0 @@
|
|||
XPM_PATH = "/home/pavel/rcm/"
|
||||
|
||||
CC = gcc
|
||||
LIBS = -lXext -lm
|
||||
GIMPLIBS = -lgtk -lgdk -lglib -lgimp
|
||||
|
||||
CFLAGS = -Wall
|
||||
|
||||
HEADERS = rcm.h rcm_hsv.h \
|
||||
pmg_gtk_objects.h
|
||||
|
||||
SOURCES = rcm.c rcm_hsv.c rcm_gtk.c rcm_gdk.c rcm_misc.c \
|
||||
pmg_gtk_objects.c
|
||||
|
||||
OBJECTS = rcm.o rcm_hsv.o rcm_gtk.o rcm_gdk.o rcm_misc.o \
|
||||
pmg_gtk_objects.o
|
||||
|
||||
|
||||
|
||||
rcm: $(OBJECTS) $(HEADERS)
|
||||
$(CC) -o $@ $(OBJECTS) $(GIMPLIBS) $(LIBS)
|
||||
|
||||
clean:
|
||||
rm *.o *~ -f
|
||||
|
||||
tar:
|
||||
(cd ..; tar -cf - rcm | gzip -cv --best > rcm.tgz)
|
|
@ -1,20 +0,0 @@
|
|||
pavel@ml.com
|
||||
|
||||
Change rcm_change_me.h to the directory where you're gonna place the pixmaps!
|
||||
|
||||
|
||||
|
||||
Hi,
|
||||
|
||||
Thanks for using the Colormap Rotation Plug-In.
|
||||
|
||||
I have never written Makefiles before so the one I'm including is decidedly
|
||||
horrible. But it does the job for me. It should work for you, too!
|
||||
|
||||
Enjoy!
|
||||
|
||||
|
||||
Pavel
|
||||
|
||||
|
||||
Please send questions, comments, and suggestions to pavel@ml.com
|
|
@ -1,20 +0,0 @@
|
|||
pavel@ml.com
|
||||
|
||||
Change rcm_change_me.h to the directory where you're gonna place the pixmaps!
|
||||
|
||||
|
||||
|
||||
Hi,
|
||||
|
||||
Thanks for using the Colormap Rotation Plug-In.
|
||||
|
||||
I have never written Makefiles before so the one I'm including is decidedly
|
||||
horrible. But it does the job for me. It should work for you, too!
|
||||
|
||||
Enjoy!
|
||||
|
||||
|
||||
Pavel
|
||||
|
||||
|
||||
Please send questions, comments, and suggestions to pavel@ml.com
|
|
@ -1,95 +0,0 @@
|
|||
#include "pmg_gtk_objects.h"
|
||||
|
||||
PmgButtonLabel *pmg_button_with_label_new()
|
||||
{
|
||||
PmgButtonLabel *structure;
|
||||
|
||||
structure = g_new(PmgButtonLabel,1);
|
||||
|
||||
return structure;
|
||||
}
|
||||
|
||||
PmgButtonLabelXpm *
|
||||
pmg_button_label_xpm_new(GtkWidget *parent,
|
||||
gchar *xpm_filename,
|
||||
gchar *label_text,
|
||||
gchar *additional_label_text,
|
||||
gint v_or_h,
|
||||
GtkSignalFunc *click_function,
|
||||
gpointer *click_data)
|
||||
{
|
||||
PmgButtonLabelXpm *xpm_button;
|
||||
GtkWidget *label_box;
|
||||
|
||||
xpm_button = g_new(PmgButtonLabelXpm, 1);
|
||||
|
||||
switch (v_or_h) {
|
||||
case 'v':
|
||||
xpm_button->box = gtk_vbox_new (FALSE, 0);
|
||||
break;
|
||||
case 'h':
|
||||
xpm_button->box = gtk_hbox_new (FALSE, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
gtk_container_border_width(GTK_CONTAINER(xpm_button->box), 2);
|
||||
|
||||
gtk_widget_show(xpm_button->box);
|
||||
|
||||
xpm_button->parent = parent;
|
||||
|
||||
{
|
||||
label_box = gtk_vbox_new(FALSE,0);
|
||||
gtk_widget_show(label_box);
|
||||
|
||||
xpm_button->label = gtk_label_new (label_text);
|
||||
gtk_widget_show(xpm_button->label);
|
||||
gtk_box_pack_start (GTK_BOX (label_box), xpm_button->label,
|
||||
TRUE,FALSE,0);
|
||||
|
||||
if (strcmp("",additional_label_text)) {
|
||||
xpm_button->additional_label = gtk_label_new (additional_label_text);
|
||||
gtk_widget_show(xpm_button->additional_label);
|
||||
gtk_box_pack_start (GTK_BOX (label_box), xpm_button->additional_label,
|
||||
TRUE,FALSE,0);
|
||||
}
|
||||
}
|
||||
xpm_button->pixmap_id = NULL;
|
||||
pmg_set_xpm_in_button_label(xpm_button, xpm_filename);
|
||||
gtk_widget_show(xpm_button->pixmap_id);
|
||||
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (xpm_button->box), xpm_button->pixmap_id,
|
||||
FALSE, FALSE, 3);
|
||||
gtk_box_pack_start (GTK_BOX (xpm_button->box), label_box,
|
||||
FALSE, FALSE, 3);
|
||||
|
||||
xpm_button->button = gtk_button_new();
|
||||
gtk_widget_show(xpm_button->button);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (xpm_button->button), "clicked",
|
||||
(GtkSignalFunc) click_function,
|
||||
click_data);
|
||||
|
||||
gtk_container_add(GTK_CONTAINER(xpm_button->button),xpm_button->box);
|
||||
|
||||
return xpm_button;
|
||||
}
|
||||
|
||||
void
|
||||
pmg_set_xpm_in_button_label(PmgButtonLabelXpm *xpm_button,
|
||||
gchar *xpm_filename)
|
||||
{
|
||||
GdkPixmap *pixmap;
|
||||
GdkBitmap *mask;
|
||||
GtkStyle *style;
|
||||
|
||||
style = gtk_widget_get_style(xpm_button->parent);
|
||||
pixmap = gdk_pixmap_create_from_xpm (xpm_button->parent->window, &mask,
|
||||
&style->bg[GTK_STATE_NORMAL],
|
||||
xpm_filename);
|
||||
if (!xpm_button->pixmap_id)
|
||||
xpm_button->pixmap_id = gtk_pixmap_new (pixmap, mask);
|
||||
else
|
||||
gtk_pixmap_set(GTK_PIXMAP(xpm_button->pixmap_id), pixmap, mask);
|
||||
}
|
|
@ -1,42 +0,0 @@
|
|||
#ifndef __PMG_GTK_OBJECTS__
|
||||
#define __PMG_GTK_OBJECTS__
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "gtk/gtk.h"
|
||||
#include "libgimp/gimp.h"
|
||||
|
||||
typedef struct _PmgButtonLabel PmgButtonLabel;
|
||||
typedef struct _PmgButtonLabelXpm PmgButtonLabelXpm;
|
||||
|
||||
struct _PmgButtonLabel {
|
||||
GtkWidget *button;
|
||||
GtkWidget *label;
|
||||
};
|
||||
|
||||
struct _PmgButtonLabelXpm {
|
||||
GtkWidget *button;
|
||||
GtkWidget *label;
|
||||
GtkWidget *additional_label;
|
||||
GtkWidget *box;
|
||||
GtkWidget *parent;
|
||||
GtkWidget *pixmap_id;
|
||||
};
|
||||
|
||||
PmgButtonLabel *pmg_button_with_label_new();
|
||||
|
||||
PmgButtonLabelXpm *
|
||||
pmg_button_label_xpm_new(GtkWidget *parent,
|
||||
gchar *xpm_filename,
|
||||
gchar *label_text,
|
||||
gchar *additional_label_text,
|
||||
gint v_or_h,
|
||||
GtkSignalFunc *click_function,
|
||||
gpointer *click_data);
|
||||
|
||||
void
|
||||
pmg_set_xpm_in_button_label(PmgButtonLabelXpm *xpm_button,
|
||||
gchar *xpm_filename);
|
||||
|
||||
|
||||
#endif
|
|
@ -1,250 +0,0 @@
|
|||
#include "rcm.h"
|
||||
#include "rcm_hsv.h"
|
||||
|
||||
RcmParams Current=
|
||||
{
|
||||
SELECTION, /* SELECTION ONLY */
|
||||
TRUE, /* REAL TIME */
|
||||
FALSE, /* SUCCESS */
|
||||
RADIANS_OVER_PI, /* START IN RADIANS OVER PI */
|
||||
GRAY_TO
|
||||
};
|
||||
|
||||
void query (void);
|
||||
void run (char *name,
|
||||
int nparams,
|
||||
GParam *param,
|
||||
int *nreturn_vals,
|
||||
GParam **return_vals);
|
||||
|
||||
GPlugInInfo PLUG_IN_INFO =
|
||||
{
|
||||
NULL, /* init_proc */
|
||||
NULL, /* quit_proc */
|
||||
query, /* query_proc */
|
||||
run, /* run_proc */
|
||||
};
|
||||
|
||||
|
||||
|
||||
MAIN();
|
||||
|
||||
|
||||
void
|
||||
query ()
|
||||
{
|
||||
GParamDef args[] =
|
||||
{
|
||||
{ PARAM_INT32, "run_mode", "Interactive, non-interactive" },
|
||||
{ PARAM_IMAGE, "image", "Input image (used for indexed images)" },
|
||||
{ PARAM_DRAWABLE, "drawable", "Input drawable" },
|
||||
};
|
||||
GParamDef *return_vals = NULL;
|
||||
int nargs = sizeof (args) / sizeof (args[0]);
|
||||
int nreturn_vals = 0;
|
||||
|
||||
gimp_install_procedure ("plug_in_colormap_rotation",
|
||||
"Does that xv rotation thingy",
|
||||
"Then something else here",
|
||||
"Pavel Grinfeld (pavel@ml.com)",
|
||||
"Pavel Grinfeld (pavel@ml.com)",
|
||||
"27th March 1997",
|
||||
"<Image>/Filters/Colors/Colormap Rotation",
|
||||
"RGB*,INDEXED*,GRAY",
|
||||
PROC_PLUG_IN,
|
||||
nargs, nreturn_vals,
|
||||
args, return_vals);
|
||||
}
|
||||
|
||||
/********************************STANDARD RUN*************************/
|
||||
void
|
||||
run (char *name,
|
||||
int nparams,
|
||||
GParam *param,
|
||||
int *nreturn_vals,
|
||||
GParam **return_vals)
|
||||
{
|
||||
GParam values[1];
|
||||
GStatusType status = STATUS_SUCCESS;
|
||||
|
||||
*nreturn_vals = 1;
|
||||
*return_vals = values;
|
||||
|
||||
values[0].type = PARAM_STATUS;
|
||||
values[0].data.d_status = status;
|
||||
|
||||
Current.drawable = gimp_drawable_get (param[2].data.d_drawable);
|
||||
Current.mask = gimp_drawable_get(gimp_image_get_selection(param[1].data.d_image));
|
||||
|
||||
if (gimp_drawable_indexed (Current.drawable->id) ||
|
||||
gimp_drawable_gray (Current.drawable->id) ) {
|
||||
ErrorMessage("Convert the image to RGB first!");
|
||||
status = STATUS_EXECUTION_ERROR;
|
||||
}
|
||||
|
||||
else if (gimp_drawable_color (Current.drawable->id) && rcm_dialog())
|
||||
{
|
||||
gimp_progress_init ("Rotating the Colormap...");
|
||||
gimp_tile_cache_ntiles (2 * (Current.drawable->width /
|
||||
gimp_tile_width () + 1));
|
||||
rcm (Current.drawable);
|
||||
gimp_displays_flush ();
|
||||
}
|
||||
else status = STATUS_EXECUTION_ERROR;
|
||||
|
||||
|
||||
values[0].data.d_status = status;
|
||||
if (status==STATUS_SUCCESS)
|
||||
gimp_drawable_detach (Current.drawable);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
rcm_row (const guchar *src_row,
|
||||
guchar *dest_row,
|
||||
gint row,
|
||||
gint row_width,
|
||||
gint bytes)
|
||||
{
|
||||
gint col, bytenum, skip;
|
||||
hsv H,S,V,R,G,B;
|
||||
|
||||
for (col = 0; col < row_width ; col++)
|
||||
{
|
||||
skip=0;
|
||||
|
||||
R = (float)src_row[col*bytes + 0]/255.0;
|
||||
G = (float)src_row[col*bytes + 1]/255.0;
|
||||
B = (float)src_row[col*bytes + 2]/255.0;
|
||||
|
||||
rgb_to_hsv(R,G,B,&H,&S,&V);
|
||||
|
||||
if (rcm_is_gray(S))
|
||||
if (Current.Gray_to_from==GRAY_FROM)
|
||||
if (angle_inside_slice(Current.Gray->hue,Current.From->angle)<=1) {
|
||||
H = Current.Gray->hue/TP;
|
||||
S = Current.Gray->satur;
|
||||
}
|
||||
else
|
||||
skip=1;
|
||||
else {
|
||||
skip=1;
|
||||
hsv_to_rgb(Current.Gray->hue/TP,
|
||||
Current.Gray->satur,
|
||||
V,
|
||||
&R,&G,&B);
|
||||
}
|
||||
|
||||
|
||||
if (!skip) {
|
||||
H=rcm_linear(rcm_left_end(Current.From->angle),
|
||||
rcm_right_end(Current.From->angle),
|
||||
rcm_left_end(Current.To->angle),
|
||||
rcm_right_end(Current.To->angle),
|
||||
H*TP);
|
||||
H=angle_mod_2PI(H)/TP;
|
||||
hsv_to_rgb(H,S,V,&R,&G,&B);
|
||||
}
|
||||
|
||||
dest_row[col*bytes +0] = R*255;
|
||||
dest_row[col*bytes +1] = G*255;
|
||||
dest_row[col*bytes +2] = B*255;
|
||||
|
||||
if (bytes>3)
|
||||
for (bytenum = 3; bytenum<bytes; bytenum++)
|
||||
dest_row[col*bytes+bytenum] = src_row[col*bytes+bytenum];
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void rcm (GDrawable *drawable)
|
||||
{
|
||||
GPixelRgn srcPR, destPR;
|
||||
gint width, height;
|
||||
gint bytes;
|
||||
guchar *src_row, *dest_row;
|
||||
gint row;
|
||||
gint x1, y1, x2, y2;
|
||||
|
||||
gimp_drawable_mask_bounds (drawable->id, &x1, &y1, &x2, &y2);
|
||||
|
||||
width = drawable->width;
|
||||
height = drawable->height;
|
||||
bytes = drawable->bpp;
|
||||
|
||||
src_row = (guchar *) malloc ((x2 - x1) * bytes);
|
||||
dest_row = (guchar *) malloc ((x2 - x1) * bytes);
|
||||
|
||||
gimp_pixel_rgn_init (&srcPR, drawable, 0, 0, width, height, FALSE, FALSE);
|
||||
gimp_pixel_rgn_init (&destPR, drawable, 0, 0, width, height, TRUE, TRUE);
|
||||
|
||||
for (row = y1; row < y2; row++)
|
||||
{
|
||||
gimp_pixel_rgn_get_row (&srcPR, src_row, x1, row, (x2 - x1));
|
||||
|
||||
rcm_row (src_row,
|
||||
dest_row,
|
||||
row,
|
||||
(x2 - x1),
|
||||
bytes
|
||||
);
|
||||
|
||||
gimp_pixel_rgn_set_row (&destPR, dest_row, x1, row, (x2 - x1));
|
||||
|
||||
if ((row % 10) == 0)
|
||||
gimp_progress_update ((double) row / (double) (y2 - y1));
|
||||
}
|
||||
|
||||
|
||||
/* update the processed region */
|
||||
|
||||
gimp_drawable_flush (drawable);
|
||||
gimp_drawable_merge_shadow (drawable->id, TRUE);
|
||||
gimp_drawable_update (drawable->id, x1, y1, (x2 - x1), (y2 - y1));
|
||||
|
||||
free (src_row);
|
||||
free (dest_row);
|
||||
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ErrorMessage(guchar *message)
|
||||
{
|
||||
GtkWidget *window, *label, *button,*table;
|
||||
gchar **argv=g_new (gchar *, 1);
|
||||
gint argc=1;
|
||||
argv[0] = g_strdup ("rcm");
|
||||
gtk_init (&argc, &argv);
|
||||
|
||||
window=gtk_dialog_new();
|
||||
gtk_window_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
|
||||
gtk_window_set_title(GTK_WINDOW(window),"Filter Pack Simulation Message");
|
||||
gtk_signal_connect (GTK_OBJECT (window), "destroy",
|
||||
(GtkSignalFunc) rcm_close_callback,
|
||||
NULL);
|
||||
|
||||
button = gtk_button_new_with_label ("Got It!");
|
||||
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect (GTK_OBJECT (button), "clicked",
|
||||
(GtkSignalFunc) rcm_ok_callback,
|
||||
window);
|
||||
gtk_widget_grab_default (button);
|
||||
gtk_widget_show (button);
|
||||
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), button, TRUE, TRUE, 0);
|
||||
|
||||
table=gtk_table_new(2,2,FALSE);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox),table,TRUE,TRUE,0);
|
||||
gtk_widget_show(table);
|
||||
|
||||
label=gtk_label_new("");
|
||||
gtk_label_set(GTK_LABEL(label),message);
|
||||
gtk_widget_show(label);
|
||||
gtk_table_attach(GTK_TABLE(table),label,0,1,0,1,
|
||||
GTK_FILL|GTK_EXPAND,GTK_FILL|GTK_EXPAND,15,15);
|
||||
|
||||
gtk_widget_show(window);
|
||||
gtk_main ();
|
||||
|
||||
}
|
|
@ -1,330 +0,0 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "gtk/gtk.h"
|
||||
#include "libgimp/gimp.h"
|
||||
#include "rcm_hsv.h"
|
||||
#include "pmg_gtk_objects.h"
|
||||
|
||||
#define RCM_XPM_DIR "./"
|
||||
#define MAX_PREVIEW_SIZE 150
|
||||
#define ALL 255
|
||||
#define INITIAL_ALPHA 0
|
||||
#define INITIAL_BETA (PI/2.0)
|
||||
#define INITIAL_GRAY_SAT 0.0
|
||||
#define RADIUS 60
|
||||
#define MARGIN 4
|
||||
#define SUM (2*RADIUS+2*MARGIN)
|
||||
#define CENTER (SUM/2)
|
||||
#define TP (2*PI)
|
||||
|
||||
#define GRAY_RADIUS 60
|
||||
#define GRAY_MARGIN 3
|
||||
#define GRAY_SUM (2*GRAY_RADIUS+2*GRAY_MARGIN)
|
||||
#define GRAY_CENTER (GRAY_SUM/2)
|
||||
|
||||
#define LITTLE_RADIUS 3
|
||||
#define EACH_OR_BOTH .3
|
||||
|
||||
#define sqr(X) ((X)*(X))
|
||||
#define SWAP(X,Y) {float t=X; X=Y; Y=t;}
|
||||
|
||||
#define RANGE_ADJUST_MASK GDK_EXPOSURE_MASK | \
|
||||
GDK_ENTER_NOTIFY_MASK | \
|
||||
GDK_BUTTON_PRESS_MASK | \
|
||||
GDK_BUTTON_RELEASE_MASK | \
|
||||
GDK_BUTTON1_MOTION_MASK | \
|
||||
GDK_POINTER_MOTION_HINT_MASK
|
||||
|
||||
typedef struct {
|
||||
float alpha;
|
||||
float beta;
|
||||
int cw_ccw;
|
||||
} RcmAngle;
|
||||
|
||||
|
||||
typedef enum {
|
||||
VIRGIN,
|
||||
DRAG_START,
|
||||
DRAGING,
|
||||
DO_NOTHING
|
||||
} RcmOp;
|
||||
|
||||
typedef struct {
|
||||
GtkWidget *preview;
|
||||
GtkWidget *frame;
|
||||
GtkWidget *table;
|
||||
PmgButtonLabelXpm *cw_ccw_xpm_button;
|
||||
GtkWidget *alpha_entry;
|
||||
GtkWidget *alpha_units_label;
|
||||
GtkWidget *beta_entry;
|
||||
GtkWidget *beta_units_label;
|
||||
gfloat *target;
|
||||
gint mode;
|
||||
RcmAngle *angle;
|
||||
RcmOp action_flag;
|
||||
gfloat prev_clicked;
|
||||
} RcmCircle;
|
||||
|
||||
typedef struct {
|
||||
GtkWidget *dlg;
|
||||
GtkWidget *bna_frame;
|
||||
GtkWidget *before;
|
||||
GtkWidget *after;
|
||||
} RcmBna;
|
||||
|
||||
typedef struct {
|
||||
GtkWidget *preview;
|
||||
GtkWidget *frame;
|
||||
float gray_sat;
|
||||
float hue;
|
||||
float satur;
|
||||
GtkWidget *gray_sat_entry;
|
||||
GtkWidget *hue_entry;
|
||||
GtkWidget *hue_units_label;
|
||||
GtkWidget *satur_entry;
|
||||
RcmOp action_flag;
|
||||
} RcmGray;
|
||||
|
||||
typedef struct {
|
||||
gint width;
|
||||
gint height;
|
||||
guchar *rgb;
|
||||
hsv *hsv;
|
||||
guchar *mask;
|
||||
} ReducedImage;
|
||||
|
||||
typedef struct {
|
||||
gint Slctn;
|
||||
gint RealTime;
|
||||
gint Success;
|
||||
gint Units;
|
||||
gint Gray_to_from;
|
||||
GDrawable *drawable;
|
||||
GDrawable *mask;
|
||||
ReducedImage *reduced;
|
||||
RcmCircle *To;
|
||||
RcmCircle *From;
|
||||
RcmGray *Gray;
|
||||
RcmBna *Bna;
|
||||
} RcmParams;
|
||||
|
||||
|
||||
enum {
|
||||
ENTIRE_IMAGE,
|
||||
SELECTION,
|
||||
SELECTION_IN_CONTEXT,
|
||||
PREVIEW_OPTIONS
|
||||
};
|
||||
|
||||
enum {
|
||||
EACH,
|
||||
BOTH,
|
||||
DEGREES,
|
||||
RADIANS,
|
||||
RADIANS_OVER_PI,
|
||||
GRAY_FROM,
|
||||
GRAY_TO,
|
||||
CURRENT,
|
||||
ORIGINAL
|
||||
};
|
||||
|
||||
gint rcm_dialog();
|
||||
|
||||
GtkWidget *rcm_create_bna(void);
|
||||
GtkWidget *rcm_create_from_to(void);
|
||||
|
||||
float arctg(float y, float x);
|
||||
|
||||
float min_prox(float alpha,
|
||||
float beta,
|
||||
float angle);
|
||||
|
||||
float *closest(float *alpha,
|
||||
float *beta,
|
||||
float angle);
|
||||
|
||||
float beta_from_alpha_and_delta(float alpha,
|
||||
float delta);
|
||||
|
||||
float angle_mod_2PI(float angle);
|
||||
|
||||
float angle_inside_slice(float angle, RcmAngle *slice);
|
||||
|
||||
void rcm_draw_arrows(GdkWindow *window,
|
||||
GdkGC *color,
|
||||
RcmAngle *angle);
|
||||
|
||||
gint rcm_expose_event (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
RcmCircle *circle);
|
||||
|
||||
gint rcm_button_press_event (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
RcmCircle *circle);
|
||||
|
||||
gint rcm_release_event (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
RcmCircle *circle);
|
||||
|
||||
gint rcm_motion_notify_event (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
RcmCircle *circle);
|
||||
|
||||
/***************** GRAY ***********************/
|
||||
void rcm_draw_little_circle(GdkWindow *window,
|
||||
GdkGC *color,
|
||||
float hue,
|
||||
float satur);
|
||||
|
||||
void rcm_draw_large_circle(GdkWindow *window,
|
||||
GdkGC *color,
|
||||
float gray_sat);
|
||||
|
||||
gint rcm_gray_expose_event (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
RcmGray *circle);
|
||||
|
||||
gint rcm_gray_button_press_event (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
RcmGray *circle);
|
||||
|
||||
gint rcm_gray_release_event (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
RcmGray *circle);
|
||||
|
||||
gint rcm_gray_motion_notify_event (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
RcmGray *circle);
|
||||
|
||||
/***************** END GRAY ***********************/
|
||||
|
||||
float rcm_units_factor(gint units);
|
||||
gchar *rcm_units_string(gint units);
|
||||
void rcm_set_alpha(GtkWidget *entry,
|
||||
gpointer data);
|
||||
|
||||
void rcm_set_beta(GtkWidget *entry,
|
||||
gpointer data);
|
||||
|
||||
void rcm_set_hue(GtkWidget *entry,
|
||||
gpointer data);
|
||||
|
||||
void rcm_set_satur(GtkWidget *entry,
|
||||
gpointer data);
|
||||
|
||||
void rcm_set_gray_sat(GtkWidget *entry,
|
||||
gpointer data);
|
||||
|
||||
void rcm_show_hide_frame(GtkWidget *button,
|
||||
GtkWidget *frame);
|
||||
|
||||
RcmCircle *rcm_create_square_preview(gint, gchar *);
|
||||
|
||||
ReducedImage *Reduce_The_Image (GDrawable *,
|
||||
GDrawable *,
|
||||
gint,
|
||||
gint);
|
||||
|
||||
GtkWidget *rcm_widget_in_a_table(GtkWidget *table,
|
||||
guchar *string,
|
||||
gint x_spot,
|
||||
gint y_spot,
|
||||
GtkSignalFunc *function,
|
||||
gpointer *data);
|
||||
|
||||
GtkWidget *rcm_label_in_a_table(GtkWidget *table,
|
||||
guchar *string,
|
||||
int x_spot,
|
||||
int y_spot);
|
||||
|
||||
GtkWidget *rcm_entry_in_a_table(GtkWidget *table,
|
||||
float value,
|
||||
gint x_spot,
|
||||
gint y_spot,
|
||||
GtkSignalFunc func,
|
||||
gpointer data);
|
||||
|
||||
|
||||
void rcm_render_preview (GtkWidget *,
|
||||
gint);
|
||||
|
||||
void rcm_render_circle_preview (GtkWidget *preview,
|
||||
int sum,
|
||||
int margin);
|
||||
|
||||
void rcm_preview_what (GtkWidget *widget,
|
||||
gpointer data);
|
||||
|
||||
void rcm_cw_ccw (GtkWidget *,
|
||||
RcmCircle *);
|
||||
|
||||
void rcm_a_to_b (GtkWidget *,
|
||||
RcmCircle *);
|
||||
|
||||
void rcm_360_degrees (GtkWidget *,
|
||||
RcmCircle *);
|
||||
|
||||
void rcm_close_callback (GtkWidget *,
|
||||
gpointer );
|
||||
void rcm_ok_callback (GtkWidget *,
|
||||
gpointer );
|
||||
|
||||
void Create_A_Preview (GtkWidget **,
|
||||
GtkWidget **,
|
||||
int,
|
||||
int,
|
||||
int);
|
||||
|
||||
void Create_A_Table_Entry (GtkWidget **,
|
||||
GtkWidget *,
|
||||
char *);
|
||||
|
||||
GSList* Button_In_A_Box (GtkWidget *,
|
||||
GSList *,
|
||||
guchar *,
|
||||
GtkSignalFunc,
|
||||
gpointer,
|
||||
int );
|
||||
|
||||
void Check_Button_In_A_Box (GtkWidget *,
|
||||
guchar *label,
|
||||
GtkSignalFunc func,
|
||||
gpointer data,
|
||||
int clicked);
|
||||
|
||||
void rcm (GDrawable *drawable);
|
||||
void rcm_row (const guchar *src_row,
|
||||
guchar *dest_row,
|
||||
gint row,
|
||||
gint row_width,
|
||||
gint bytes);
|
||||
|
||||
void As_You_Drag (GtkWidget *button);
|
||||
|
||||
void preview_size_scale_update (GtkAdjustment *adjustment,
|
||||
float *scale_val);
|
||||
|
||||
void ErrorMessage (guchar *);
|
||||
|
||||
|
||||
void rcm_advanced_ok();
|
||||
gint rcm_fake_transparency(gint i, gint j);
|
||||
|
||||
void rcm_float_angle_in_an_entry(GtkWidget *entry,
|
||||
float value,
|
||||
gint units);
|
||||
|
||||
void rcm_float_in_an_entry(GtkWidget *entry,
|
||||
float value);
|
||||
|
||||
void rcm_update_entries(gint units);
|
||||
float rcm_unit_factor(gint units);
|
||||
gint rcm_is_gray(float s);
|
||||
float rcm_linear(float, float, float, float, float);
|
||||
float rcm_left_end(RcmAngle *angle);
|
||||
float rcm_right_end(RcmAngle *angle);
|
||||
GtkWidget *rcm_xpm_label_box (GtkWidget *parent,
|
||||
gchar *xpm_filename,
|
||||
gchar *label_text);
|
||||
|
||||
gint rcm_fake_transparency(gint i, gint j);
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,498 +0,0 @@
|
|||
#include "rcm.h"
|
||||
|
||||
extern RcmParams Current;
|
||||
GdkGC *xor_gc;
|
||||
|
||||
|
||||
void
|
||||
rcm_float_in_an_entry(GtkWidget *entry,
|
||||
float value)
|
||||
{
|
||||
gchar buffer[10];
|
||||
if (value<10)
|
||||
sprintf(buffer,"%.4f",value);
|
||||
else if (value<100)
|
||||
sprintf(buffer,"%.3f",value);
|
||||
else if (value<1000)
|
||||
sprintf(buffer,"%.2f",value);
|
||||
gtk_entry_set_text(GTK_ENTRY(entry),buffer);
|
||||
|
||||
}
|
||||
|
||||
gint
|
||||
rcm_expose_event (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
RcmCircle *circle)
|
||||
{
|
||||
switch (circle->action_flag) {
|
||||
case DO_NOTHING: return 0;
|
||||
case VIRGIN: rcm_draw_arrows(widget->window,
|
||||
widget->style->black_gc,
|
||||
circle->angle); break;
|
||||
default: if (Current.RealTime)
|
||||
rcm_render_preview(Current.Bna->after,CURRENT); break;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
gint
|
||||
rcm_button_press_event (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
RcmCircle *circle)
|
||||
{
|
||||
float clicked_angle;
|
||||
float *alpha = &(circle->angle->alpha);
|
||||
float *beta = &(circle->angle->beta);
|
||||
GdkEventButton *bevent=(GdkEventButton *) event;
|
||||
|
||||
circle->action_flag=DRAG_START;
|
||||
circle->prev_clicked=
|
||||
clicked_angle=angle_mod_2PI(arctg(CENTER-bevent->y,bevent->x-CENTER));
|
||||
|
||||
if (sqrt(sqr(bevent->y-CENTER)+sqr(bevent->x-CENTER))>RADIUS*EACH_OR_BOTH
|
||||
&& min_prox( *alpha, *beta, clicked_angle) <PI/12) {
|
||||
circle->mode=EACH;
|
||||
circle->target=closest(alpha,beta,clicked_angle);
|
||||
|
||||
if (*(circle->target) != clicked_angle) {
|
||||
*(circle->target) = clicked_angle;
|
||||
gtk_widget_draw(circle->preview,NULL);
|
||||
rcm_draw_arrows(widget->window,
|
||||
widget->style->black_gc,
|
||||
circle->angle);
|
||||
|
||||
rcm_float_in_an_entry(circle->alpha_entry,
|
||||
circle->angle->alpha*
|
||||
rcm_units_factor(Current.Units));
|
||||
rcm_float_in_an_entry(circle->beta_entry,
|
||||
circle->angle->beta*
|
||||
rcm_units_factor(Current.Units));
|
||||
if (Current.RealTime)
|
||||
rcm_render_preview(Current.Bna->after, CURRENT);
|
||||
}
|
||||
}
|
||||
else
|
||||
circle->mode = BOTH;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
gint
|
||||
rcm_release_event (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
RcmCircle *circle)
|
||||
{
|
||||
if (circle->action_flag==DRAGING)
|
||||
rcm_draw_arrows(widget->window,
|
||||
widget->style->black_gc,
|
||||
circle->angle);
|
||||
circle->action_flag = VIRGIN;
|
||||
|
||||
if (!(Current.RealTime))
|
||||
rcm_render_preview(Current.Bna->after,CURRENT);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
gint
|
||||
rcm_motion_notify_event (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
RcmCircle *circle)
|
||||
{
|
||||
gint x, y;
|
||||
float clicked_angle;
|
||||
float *alpha = &(circle->angle->alpha);
|
||||
float *beta = &(circle->angle->beta);
|
||||
int cw_ccw = circle->angle->cw_ccw;
|
||||
float delta=angle_mod_2PI(cw_ccw*(*beta-*alpha));
|
||||
GdkGCValues values;
|
||||
|
||||
values.foreground = Current.From->preview->style->white;
|
||||
values.function = GDK_XOR;
|
||||
xor_gc = gdk_gc_new_with_values (Current.From->preview->window,
|
||||
&values,
|
||||
GDK_GC_FOREGROUND |
|
||||
GDK_GC_FUNCTION);
|
||||
|
||||
|
||||
gdk_window_get_pointer(widget->window, &x,&y, NULL);
|
||||
clicked_angle=angle_mod_2PI(arctg(CENTER-y,x-CENTER));
|
||||
|
||||
delta=clicked_angle - circle->prev_clicked;
|
||||
circle->prev_clicked=clicked_angle;
|
||||
|
||||
if (delta) {
|
||||
if (circle->action_flag==DRAG_START) {
|
||||
gtk_widget_draw(circle->preview,NULL);
|
||||
circle->action_flag=DRAGING;
|
||||
}
|
||||
else
|
||||
rcm_draw_arrows(widget->window,
|
||||
xor_gc,
|
||||
circle->angle); /* erase! */
|
||||
|
||||
if (circle->mode==EACH)
|
||||
*(circle->target)=clicked_angle;
|
||||
else {
|
||||
circle->angle->alpha=angle_mod_2PI(circle->angle->alpha + delta);
|
||||
circle->angle->beta =angle_mod_2PI(circle->angle->beta + delta);
|
||||
}
|
||||
|
||||
rcm_draw_arrows(widget->window,
|
||||
xor_gc,
|
||||
circle->angle);
|
||||
|
||||
rcm_float_in_an_entry(circle->alpha_entry,
|
||||
circle->angle->alpha*
|
||||
rcm_units_factor(Current.Units));
|
||||
rcm_float_in_an_entry(circle->beta_entry,
|
||||
circle->angle->beta*
|
||||
rcm_units_factor(Current.Units));
|
||||
|
||||
if (Current.RealTime)
|
||||
rcm_render_preview(Current.Bna->after,CURRENT);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/******************* GRAY *******************/
|
||||
|
||||
gint
|
||||
rcm_gray_expose_event (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
RcmGray *circle)
|
||||
{
|
||||
if (circle->action_flag==VIRGIN) {
|
||||
rcm_draw_little_circle(widget->window,
|
||||
widget->style->black_gc,
|
||||
circle->hue,
|
||||
circle->satur);
|
||||
rcm_draw_large_circle(widget->window,
|
||||
widget->style->black_gc,
|
||||
circle->gray_sat);
|
||||
}
|
||||
else if (Current.RealTime)
|
||||
rcm_render_preview(Current.Bna->after,CURRENT);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
gint
|
||||
rcm_gray_button_press_event (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
RcmGray *circle)
|
||||
{
|
||||
GdkEventButton *bevent=(GdkEventButton *) event;
|
||||
int x = bevent->x-GRAY_CENTER-LITTLE_RADIUS;
|
||||
int y = GRAY_CENTER-bevent->y+LITTLE_RADIUS;
|
||||
|
||||
circle->action_flag=DRAG_START;
|
||||
circle->hue=angle_mod_2PI(arctg(y,x));
|
||||
circle->satur=sqrt(sqr(x)+sqr(y))/GRAY_RADIUS;
|
||||
if (circle->satur > 1.0) circle->satur=1;
|
||||
|
||||
gtk_widget_draw(circle->preview,NULL);
|
||||
rcm_draw_little_circle(widget->window,
|
||||
widget->style->black_gc,
|
||||
circle->hue,
|
||||
circle->satur);
|
||||
|
||||
rcm_draw_large_circle(circle->preview->window,
|
||||
circle->preview->style->black_gc,
|
||||
circle->gray_sat);
|
||||
rcm_float_in_an_entry(circle->hue_entry,
|
||||
circle->hue*
|
||||
rcm_units_factor(Current.Units));
|
||||
rcm_float_in_an_entry(circle->satur_entry,circle->satur);
|
||||
|
||||
if (Current.RealTime)
|
||||
rcm_render_preview(Current.Bna->after,CURRENT);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
gint
|
||||
rcm_gray_release_event (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
RcmGray *circle)
|
||||
{
|
||||
if (circle->action_flag==DRAGING)
|
||||
rcm_draw_little_circle(widget->window,
|
||||
widget->style->black_gc,
|
||||
circle->hue,
|
||||
circle->satur);
|
||||
circle->action_flag=VIRGIN;
|
||||
|
||||
if (!(Current.RealTime))
|
||||
rcm_render_preview(Current.Bna->after,CURRENT);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
gint
|
||||
rcm_gray_motion_notify_event (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
RcmGray *circle)
|
||||
{
|
||||
gint x, y;
|
||||
GdkGCValues values;
|
||||
|
||||
values.foreground = Current.From->preview->style->white;
|
||||
values.function = GDK_XOR;
|
||||
xor_gc = gdk_gc_new_with_values (Current.From->preview->window,
|
||||
&values,
|
||||
GDK_GC_FOREGROUND |
|
||||
GDK_GC_FUNCTION);
|
||||
|
||||
|
||||
if (circle->action_flag==DRAG_START) {
|
||||
gtk_widget_draw(circle->preview,NULL);
|
||||
rcm_draw_large_circle(circle->preview->window,
|
||||
circle->preview->style->black_gc,
|
||||
circle->gray_sat);
|
||||
circle->action_flag=DRAGING;
|
||||
}
|
||||
else
|
||||
rcm_draw_little_circle(widget->window,
|
||||
xor_gc,
|
||||
circle->hue,
|
||||
circle->satur); /* erase */
|
||||
|
||||
gdk_window_get_pointer(widget->window, &x,&y, NULL);
|
||||
x = x-GRAY_CENTER-LITTLE_RADIUS;
|
||||
y = GRAY_CENTER-y+LITTLE_RADIUS;
|
||||
|
||||
circle->hue=angle_mod_2PI(arctg(y,x));
|
||||
circle->satur=sqrt(sqr(x)+sqr(y))/GRAY_RADIUS;
|
||||
if (circle->satur > 1.0) circle->satur=1;
|
||||
|
||||
rcm_draw_little_circle(widget->window,
|
||||
xor_gc,
|
||||
circle->hue,
|
||||
circle->satur);
|
||||
|
||||
rcm_float_in_an_entry(circle->hue_entry,
|
||||
circle->hue*
|
||||
rcm_units_factor(Current.Units));
|
||||
rcm_float_in_an_entry(circle->satur_entry,circle->satur);
|
||||
if (Current.RealTime)
|
||||
rcm_render_preview(Current.Bna->after,CURRENT);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Entry Handlers */
|
||||
void
|
||||
rcm_set_alpha(GtkWidget *entry,
|
||||
gpointer data)
|
||||
{
|
||||
RcmCircle *circle=(RcmCircle *) data;
|
||||
if (circle->action_flag!=VIRGIN) return;
|
||||
|
||||
circle->angle->alpha=atof( gtk_entry_get_text(GTK_ENTRY(entry)))/
|
||||
rcm_units_factor(Current.Units);
|
||||
|
||||
gtk_widget_draw(circle->preview,NULL);
|
||||
rcm_draw_arrows(circle->preview->window,
|
||||
circle->preview->style->black_gc,
|
||||
circle->angle);
|
||||
rcm_render_preview(Current.Bna->after,CURRENT);
|
||||
}
|
||||
|
||||
void
|
||||
rcm_set_beta(GtkWidget *entry,
|
||||
gpointer data)
|
||||
{
|
||||
RcmCircle *circle=(RcmCircle *) data;
|
||||
if (circle->action_flag!=VIRGIN) return;
|
||||
|
||||
circle->angle->beta= atof( gtk_entry_get_text( GTK_ENTRY(entry)))/
|
||||
rcm_units_factor(Current.Units);
|
||||
gtk_widget_draw(circle->preview,NULL);
|
||||
rcm_draw_arrows(circle->preview->window,
|
||||
circle->preview->style->black_gc,
|
||||
circle->angle);
|
||||
rcm_render_preview(Current.Bna->after,CURRENT);
|
||||
}
|
||||
|
||||
void
|
||||
rcm_set_hue(GtkWidget *entry,
|
||||
gpointer data)
|
||||
{
|
||||
RcmGray *circle=(RcmGray *) data;
|
||||
if (circle->action_flag!=VIRGIN) return;
|
||||
|
||||
circle->hue = atof( gtk_entry_get_text( GTK_ENTRY(entry)))/
|
||||
rcm_units_factor(Current.Units);
|
||||
gtk_widget_draw(circle->preview,NULL);
|
||||
rcm_draw_little_circle(circle->preview->window,
|
||||
circle->preview->style->black_gc,
|
||||
circle->hue,
|
||||
circle->satur);
|
||||
rcm_draw_large_circle(circle->preview->window,
|
||||
circle->preview->style->black_gc,
|
||||
circle->gray_sat);
|
||||
rcm_render_preview(Current.Bna->after,CURRENT);
|
||||
}
|
||||
|
||||
void
|
||||
rcm_set_satur(GtkWidget *entry,
|
||||
gpointer data)
|
||||
{
|
||||
RcmGray *circle=(RcmGray *) data;
|
||||
if (circle->action_flag!=VIRGIN) return;
|
||||
|
||||
circle->satur = atof( gtk_entry_get_text( GTK_ENTRY(entry)));
|
||||
gtk_widget_draw(circle->preview,NULL);
|
||||
rcm_draw_little_circle(circle->preview->window,
|
||||
circle->preview->style->black_gc,
|
||||
circle->hue,
|
||||
circle->satur);
|
||||
rcm_draw_large_circle(circle->preview->window,
|
||||
circle->preview->style->black_gc,
|
||||
circle->gray_sat);
|
||||
rcm_render_preview(Current.Bna->after,CURRENT);
|
||||
}
|
||||
|
||||
void
|
||||
rcm_set_gray_sat(GtkWidget *entry,
|
||||
gpointer data)
|
||||
{
|
||||
RcmGray *circle=(RcmGray *) data;
|
||||
|
||||
circle->gray_sat = atof( gtk_entry_get_text( GTK_ENTRY(entry)));
|
||||
if (circle->gray_sat>1)
|
||||
circle->gray_sat = 1.0;
|
||||
gtk_widget_draw(circle->preview,NULL);
|
||||
rcm_draw_large_circle(circle->preview->window,
|
||||
circle->preview->style->black_gc,
|
||||
circle->gray_sat);
|
||||
rcm_render_preview(Current.Bna->after,CURRENT);
|
||||
}
|
||||
|
||||
void
|
||||
rcm_draw_little_circle(GdkWindow *window,
|
||||
GdkGC *color,
|
||||
float hue,
|
||||
float satur)
|
||||
{
|
||||
int x=GRAY_CENTER+GRAY_RADIUS*satur*cos(hue);
|
||||
int y=GRAY_CENTER-GRAY_RADIUS*satur*sin(hue);
|
||||
gdk_draw_arc (window,
|
||||
color,
|
||||
0,
|
||||
x-LITTLE_RADIUS,
|
||||
y-LITTLE_RADIUS,
|
||||
2*LITTLE_RADIUS,
|
||||
2*LITTLE_RADIUS,
|
||||
0,
|
||||
360*64);
|
||||
|
||||
}
|
||||
|
||||
int
|
||||
R(float X) {
|
||||
return X+.5;
|
||||
}
|
||||
|
||||
void
|
||||
rcm_draw_large_circle(GdkWindow *window,
|
||||
GdkGC *color,
|
||||
float gray_sat)
|
||||
{
|
||||
int x=GRAY_CENTER;
|
||||
int y=GRAY_CENTER;
|
||||
gdk_draw_arc (window,
|
||||
color,
|
||||
0,
|
||||
R(x-GRAY_RADIUS*gray_sat),
|
||||
R(y-GRAY_RADIUS*gray_sat),
|
||||
R(2*GRAY_RADIUS*gray_sat),
|
||||
R(2*GRAY_RADIUS*gray_sat),
|
||||
0,
|
||||
360*64);
|
||||
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
rcm_draw_arrows(GdkWindow *window,
|
||||
GdkGC *color,
|
||||
RcmAngle *angle)
|
||||
{
|
||||
#define REL .8
|
||||
#define DEL .1
|
||||
#define TICK 10
|
||||
|
||||
int dist;
|
||||
float alpha=angle->alpha;
|
||||
float beta=angle->beta;
|
||||
float cw_ccw=angle->cw_ccw;
|
||||
float delta=angle_mod_2PI(beta-alpha);
|
||||
if (cw_ccw==-1) delta = delta-TP;
|
||||
|
||||
gdk_draw_line(window,color,
|
||||
CENTER,
|
||||
CENTER,
|
||||
R(CENTER+RADIUS*cos(alpha)),
|
||||
R(CENTER-RADIUS*sin(alpha)));
|
||||
|
||||
gdk_draw_line(window,color,
|
||||
CENTER+RADIUS*cos(alpha),
|
||||
CENTER-RADIUS*sin(alpha),
|
||||
R(CENTER+RADIUS*REL*cos(alpha-DEL)),
|
||||
R(CENTER-RADIUS*REL*sin(alpha-DEL)));
|
||||
|
||||
gdk_draw_line(window,color,
|
||||
CENTER+RADIUS*cos(alpha),
|
||||
CENTER-RADIUS*sin(alpha),
|
||||
R(CENTER+RADIUS*REL*cos(alpha+DEL)),
|
||||
R(CENTER-RADIUS*REL*sin(alpha+DEL)));
|
||||
|
||||
gdk_draw_line(window,color,
|
||||
CENTER,
|
||||
CENTER,
|
||||
R(CENTER+RADIUS*cos(beta)),
|
||||
R(CENTER-RADIUS*sin(beta)));
|
||||
|
||||
|
||||
gdk_draw_line(window,color,
|
||||
CENTER+RADIUS*cos(beta),
|
||||
CENTER-RADIUS*sin(beta),
|
||||
R(CENTER+RADIUS*REL*cos(beta-DEL)),
|
||||
R(CENTER-RADIUS*REL*sin(beta-DEL)));
|
||||
|
||||
gdk_draw_line(window,color,
|
||||
CENTER+RADIUS*cos(beta),
|
||||
CENTER-RADIUS*sin(beta),
|
||||
R(CENTER+RADIUS*REL*cos(beta+DEL)),
|
||||
R(CENTER-RADIUS*REL*sin(beta+DEL)));
|
||||
|
||||
dist = RADIUS*EACH_OR_BOTH;
|
||||
|
||||
gdk_draw_line(window,color,
|
||||
CENTER + dist*cos(beta),
|
||||
CENTER - dist*sin(beta),
|
||||
R(CENTER + dist*cos(beta)+cw_ccw*TICK*sin(beta)),
|
||||
R(CENTER - dist*sin(beta)+cw_ccw*TICK*cos(beta)));
|
||||
|
||||
/* gdk_draw_line(window,color,
|
||||
CENTER + dist*cos(beta),
|
||||
CENTER - dist*sin(beta),
|
||||
R(CENTER + dist*cos(beta)+cw_ccw*TICK*sin(beta))+TICK,
|
||||
R(CENTER - dist*sin(beta)+cw_ccw*TICK*cos(beta))+TICK);
|
||||
*/
|
||||
alpha *= 180*64/PI;
|
||||
delta *= 180*64/PI;
|
||||
|
||||
gdk_draw_arc (window,
|
||||
color,
|
||||
0,
|
||||
CENTER-dist,
|
||||
CENTER-dist,
|
||||
2*dist,
|
||||
2*dist,
|
||||
alpha,
|
||||
delta);
|
||||
}
|
|
@ -1,998 +0,0 @@
|
|||
#include "rcm.h"
|
||||
|
||||
GtkWidget *gray_preview;
|
||||
extern RcmParams Current;
|
||||
|
||||
/********************************************************/
|
||||
/*********************** Callbacks **********************/
|
||||
/********************************************************/
|
||||
|
||||
void
|
||||
rcm_close_callback (GtkWidget *widget,
|
||||
gpointer data)
|
||||
{
|
||||
gtk_main_quit ();
|
||||
}
|
||||
|
||||
void
|
||||
rcm_ok_callback (GtkWidget *widget,
|
||||
gpointer data)
|
||||
{
|
||||
gtk_widget_destroy (GTK_WIDGET (data));
|
||||
Current.Success = 1;
|
||||
}
|
||||
|
||||
void
|
||||
rcm_preview_what(GtkWidget *button,
|
||||
gpointer data)
|
||||
{
|
||||
if (!GTK_TOGGLE_BUTTON(button)->active)
|
||||
return;
|
||||
if (!strcmp(data, "Entire Image"))
|
||||
Current.Slctn = ENTIRE_IMAGE;
|
||||
else if (!strcmp(data, "Selection Only"))
|
||||
Current.Slctn = SELECTION;
|
||||
else if (!strcmp(data, "Selection In Context"))
|
||||
Current.Slctn = SELECTION_IN_CONTEXT;
|
||||
}
|
||||
|
||||
void
|
||||
rcm_360_degrees (GtkWidget *button,
|
||||
RcmCircle *circle)
|
||||
{
|
||||
circle->action_flag = DO_NOTHING;
|
||||
gtk_widget_draw(circle->preview,NULL);
|
||||
circle->angle->beta=circle->angle->alpha-circle->angle->cw_ccw*0.001;
|
||||
rcm_draw_arrows(circle->preview->window,
|
||||
circle->preview->style->black_gc,
|
||||
circle->angle);
|
||||
circle->action_flag = VIRGIN;
|
||||
rcm_render_preview(Current.Bna->after,CURRENT);
|
||||
}
|
||||
|
||||
void
|
||||
rcm_cw_ccw (GtkWidget *button,
|
||||
RcmCircle *circle)
|
||||
{
|
||||
circle->angle->cw_ccw *= -1;
|
||||
pmg_set_xpm_in_button_label(circle->cw_ccw_xpm_button,
|
||||
(circle->angle->cw_ccw>0)?
|
||||
"/home/pavel/rcm/rcm_cw.xpm":
|
||||
"/home/pavel/rcm/rcm_ccw.xpm");
|
||||
gtk_label_set(GTK_LABEL(circle->cw_ccw_xpm_button->additional_label),
|
||||
(circle->angle->cw_ccw>0)?
|
||||
"Clockwise":
|
||||
"C/Clockwise");
|
||||
rcm_a_to_b (button, circle);
|
||||
}
|
||||
|
||||
void
|
||||
rcm_a_to_b (GtkWidget *button,
|
||||
RcmCircle *circle)
|
||||
{
|
||||
circle->action_flag = DO_NOTHING;
|
||||
gtk_widget_draw(circle->preview,NULL);
|
||||
SWAP(circle->angle->alpha, circle->angle->beta);
|
||||
rcm_draw_arrows(circle->preview->window,
|
||||
circle->preview->style->black_gc,
|
||||
circle->angle);
|
||||
circle->action_flag = VIRGIN;
|
||||
rcm_render_preview(Current.Bna->after, CURRENT);
|
||||
}
|
||||
|
||||
void
|
||||
rcm_preview_as_you_drag (GtkWidget *button,
|
||||
gpointer *value)
|
||||
{
|
||||
if (GTK_TOGGLE_BUTTON(button)->active)
|
||||
Current.RealTime = TRUE;
|
||||
else
|
||||
Current.RealTime = FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
rcm_switch_to_degrees (GtkWidget *button,
|
||||
gpointer *value)
|
||||
{
|
||||
if (GTK_TOGGLE_BUTTON(button)->active)
|
||||
rcm_update_entries(Current.Units = DEGREES);
|
||||
}
|
||||
|
||||
void
|
||||
rcm_switch_to_radians (GtkWidget *button,
|
||||
gpointer *value)
|
||||
{
|
||||
if (GTK_TOGGLE_BUTTON(button)->active)
|
||||
rcm_update_entries(Current.Units = RADIANS);
|
||||
}
|
||||
|
||||
void
|
||||
rcm_switch_to_radians_over_PI (GtkWidget *button,
|
||||
gpointer *value)
|
||||
{
|
||||
if (GTK_TOGGLE_BUTTON(button)->active)
|
||||
rcm_update_entries(Current.Units = RADIANS_OVER_PI);
|
||||
}
|
||||
|
||||
void rcm_switch_to_gray_to (GtkWidget *button,
|
||||
gpointer *value)
|
||||
{
|
||||
if (!GTK_TOGGLE_BUTTON(button)->active) return;
|
||||
|
||||
Current.Gray_to_from=GRAY_TO;
|
||||
rcm_render_preview(Current.Bna->after,CURRENT);
|
||||
}
|
||||
|
||||
void rcm_switch_to_gray_from (GtkWidget *button,
|
||||
gpointer *value)
|
||||
{
|
||||
if (!(GTK_TOGGLE_BUTTON(button)->active)) return;
|
||||
|
||||
Current.Gray_to_from=GRAY_FROM;
|
||||
rcm_render_preview(Current.Bna->after,CURRENT);
|
||||
}
|
||||
|
||||
void
|
||||
rcm_change_preview()
|
||||
{
|
||||
gtk_preview_size (GTK_PREVIEW (Current.Bna->before),
|
||||
Current.reduced->width,
|
||||
Current.reduced->height);
|
||||
gtk_preview_size (GTK_PREVIEW (Current.Bna->after),
|
||||
Current.reduced->width,
|
||||
Current.reduced->height);
|
||||
|
||||
rcm_render_preview(Current.Bna->before, ORIGINAL);
|
||||
rcm_render_preview(Current.Bna->after, CURRENT);
|
||||
/*
|
||||
gtk_container_check_resize(GTK_CONTAINER(Current.Bna->bna_frame), NULL);
|
||||
*/
|
||||
gtk_widget_draw(Current.Bna->before,NULL);
|
||||
gtk_widget_draw(Current.Bna->after,NULL);
|
||||
}
|
||||
|
||||
void rcm_selection_in_context (GtkWidget *button,
|
||||
gpointer *value)
|
||||
{
|
||||
Current.reduced = Reduce_The_Image(Current.drawable,
|
||||
Current.mask,
|
||||
MAX_PREVIEW_SIZE,
|
||||
SELECTION_IN_CONTEXT);
|
||||
rcm_change_preview();
|
||||
}
|
||||
|
||||
void rcm_selection (GtkWidget *button,
|
||||
gpointer *value)
|
||||
{
|
||||
Current.reduced = Reduce_The_Image(Current.drawable,Current.mask,
|
||||
MAX_PREVIEW_SIZE,
|
||||
SELECTION);
|
||||
rcm_change_preview();
|
||||
|
||||
}
|
||||
|
||||
void rcm_entire_image (GtkWidget *button,
|
||||
gpointer *value)
|
||||
{
|
||||
Current.reduced = Reduce_The_Image(Current.drawable,Current.mask,
|
||||
MAX_PREVIEW_SIZE,
|
||||
ENTIRE_IMAGE);
|
||||
rcm_change_preview();
|
||||
}
|
||||
|
||||
/********************************************************/
|
||||
/********************* Build Helpers ********************/
|
||||
/********************************************************/
|
||||
|
||||
GtkWidget *
|
||||
rcm_label_in_a_table(GtkWidget *table,
|
||||
guchar *string,
|
||||
gint x_spot,
|
||||
gint y_spot)
|
||||
{
|
||||
GtkWidget *label = gtk_label_new (string);
|
||||
gtk_widget_show(label);
|
||||
|
||||
gtk_table_attach(GTK_TABLE(table),label,x_spot,x_spot+1,y_spot,y_spot+1,
|
||||
GTK_EXPAND|GTK_FILL,
|
||||
GTK_EXPAND,
|
||||
0,0);
|
||||
return label;
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
rcm_button_in_a_table(GtkWidget *table,
|
||||
guchar *string,
|
||||
int x_spot,
|
||||
int y_spot,
|
||||
GtkSignalFunc *function,
|
||||
gpointer *data)
|
||||
{
|
||||
GtkWidget *button = gtk_button_new_with_label (string);
|
||||
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect (GTK_OBJECT (button), "clicked",
|
||||
(GtkSignalFunc)function,
|
||||
data);
|
||||
gtk_widget_show (button);
|
||||
|
||||
gtk_table_attach(GTK_TABLE(table), button,
|
||||
x_spot, x_spot+1, y_spot, y_spot+1,
|
||||
GTK_EXPAND|GTK_FILL,
|
||||
GTK_EXPAND,
|
||||
0,0);
|
||||
return button;
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
rcm_entry_in_a_table(GtkWidget *table,
|
||||
float value,
|
||||
gint x_spot,
|
||||
gint y_spot,
|
||||
GtkSignalFunc func,
|
||||
gpointer data)
|
||||
{
|
||||
GtkWidget *entry=gtk_entry_new();
|
||||
gtk_widget_show(entry);
|
||||
gtk_widget_set_usize(GTK_WIDGET(entry),42,20);
|
||||
rcm_float_in_an_entry(entry,value);
|
||||
gtk_table_attach(GTK_TABLE(table),entry,x_spot,x_spot+1,y_spot,y_spot+1,
|
||||
0,0,0,0);
|
||||
gtk_signal_connect(GTK_OBJECT(entry), "changed",
|
||||
func, data);
|
||||
return entry;
|
||||
}
|
||||
|
||||
void
|
||||
Check_Button_In_A_Box (GtkWidget *vbox,
|
||||
guchar *label,
|
||||
GtkSignalFunc function,
|
||||
gpointer data,
|
||||
gint clicked)
|
||||
{
|
||||
GtkWidget *button;
|
||||
|
||||
button = gtk_check_button_new_with_label(label);
|
||||
gtk_box_pack_start (GTK_BOX(vbox),button, TRUE, TRUE, 0);
|
||||
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (button), clicked);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (button), "clicked",
|
||||
(GtkSignalFunc) function,
|
||||
data);
|
||||
|
||||
gtk_widget_show(button);
|
||||
}
|
||||
|
||||
GSList *
|
||||
Button_In_A_Box (GtkWidget *vbox,
|
||||
GSList *group,
|
||||
guchar *label,
|
||||
GtkSignalFunc function,
|
||||
gpointer data,
|
||||
int clicked)
|
||||
{
|
||||
GtkWidget *button;
|
||||
|
||||
button=gtk_radio_button_new_with_label(group,label);
|
||||
gtk_widget_show(button);
|
||||
gtk_box_pack_start (GTK_BOX(vbox),button, TRUE, TRUE, 0);
|
||||
if (clicked)
|
||||
gtk_button_clicked(GTK_BUTTON(button));
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (button), "clicked",
|
||||
(GtkSignalFunc) function,
|
||||
data);
|
||||
|
||||
return gtk_radio_button_group(GTK_RADIO_BUTTON(button));
|
||||
}
|
||||
|
||||
/********************************************************/
|
||||
/********************* The 3 Frames *********************/
|
||||
/********************************************************/
|
||||
|
||||
GtkWidget *
|
||||
rcm_create_bna()
|
||||
{
|
||||
GtkWidget *frame, *blabel, *alabel, *bframe, *aframe, *table;
|
||||
|
||||
Create_A_Preview(&Current.Bna->before,
|
||||
&bframe,
|
||||
Current.reduced->width,
|
||||
Current.reduced->height,
|
||||
1);
|
||||
Create_A_Preview(&Current.Bna->after,
|
||||
&aframe,
|
||||
Current.reduced->width,
|
||||
Current.reduced->height,
|
||||
1);
|
||||
|
||||
frame = gtk_frame_new (NULL);
|
||||
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
|
||||
gtk_container_border_width (GTK_CONTAINER (frame), 5);
|
||||
|
||||
/* All the previews */
|
||||
alabel = gtk_label_new("Rotated:");
|
||||
gtk_widget_show(alabel);
|
||||
|
||||
blabel = gtk_label_new("Original:");
|
||||
gtk_widget_show(blabel);
|
||||
|
||||
table = gtk_table_new(4,1,FALSE);
|
||||
gtk_container_border_width(GTK_CONTAINER(table),10);
|
||||
gtk_table_set_row_spacings(GTK_TABLE(table),0);
|
||||
gtk_table_set_col_spacings(GTK_TABLE(table),20);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (frame), table);
|
||||
|
||||
gtk_table_attach(GTK_TABLE(table), blabel, 0, 1, 0, 1,
|
||||
0,
|
||||
GTK_EXPAND|GTK_FILL,
|
||||
0,0);
|
||||
gtk_table_attach(GTK_TABLE(table),bframe,0,1,1,2,
|
||||
GTK_EXPAND,
|
||||
GTK_EXPAND,
|
||||
0,0);
|
||||
gtk_table_attach(GTK_TABLE(table),alabel,0,1,2,3,
|
||||
0,
|
||||
GTK_EXPAND|GTK_FILL,
|
||||
0,0);
|
||||
gtk_table_attach(GTK_TABLE(table),aframe,0,1,3,4,
|
||||
GTK_EXPAND,
|
||||
GTK_EXPAND,
|
||||
0,0);
|
||||
|
||||
gtk_widget_show(table);
|
||||
gtk_widget_show (frame);
|
||||
return frame;
|
||||
}
|
||||
|
||||
|
||||
RcmGray *
|
||||
rcm_create_gray()
|
||||
{
|
||||
GtkWidget *frame, *preview, *as_or_to_frame;
|
||||
GtkWidget *table, *previewframe, *legend_table;
|
||||
GtkWidget *gray_sat_frame;
|
||||
GSList *group = NULL;
|
||||
|
||||
RcmGray *st = g_new(RcmGray,1);
|
||||
st->hue = 0;
|
||||
st->satur = 0;
|
||||
st->action_flag = VIRGIN;
|
||||
|
||||
st->frame = frame = gtk_frame_new("Gray");
|
||||
gtk_widget_show(frame);
|
||||
|
||||
|
||||
{
|
||||
GtkWidget *label, *table, *entry;
|
||||
gray_sat_frame = gtk_frame_new("What is Gray?");
|
||||
gtk_container_border_width (GTK_CONTAINER (gray_sat_frame), 10);
|
||||
gtk_widget_show(gray_sat_frame);
|
||||
|
||||
table = gtk_table_new(1, 3, FALSE);
|
||||
gtk_widget_show(table);
|
||||
|
||||
label = gtk_label_new("Sat <=");
|
||||
gtk_widget_show(label);
|
||||
|
||||
st->gray_sat_entry = entry = gtk_entry_new();
|
||||
gtk_widget_show(entry);
|
||||
gtk_widget_set_usize(GTK_WIDGET(entry),42,20);
|
||||
rcm_float_in_an_entry(entry,st->gray_sat = INITIAL_GRAY_SAT);
|
||||
gtk_signal_connect(GTK_OBJECT(entry), "changed",
|
||||
(GtkSignalFunc)rcm_set_gray_sat,
|
||||
st);
|
||||
|
||||
gtk_table_attach(GTK_TABLE(table), label,
|
||||
0, 1, 0, 1,
|
||||
GTK_EXPAND|GTK_FILL,
|
||||
GTK_EXPAND,
|
||||
0,0);
|
||||
|
||||
gtk_table_attach(GTK_TABLE(table), entry,
|
||||
1, 2, 0, 1,
|
||||
GTK_EXPAND|GTK_FILL,
|
||||
GTK_EXPAND,
|
||||
5,0);
|
||||
|
||||
gtk_container_add(GTK_CONTAINER(gray_sat_frame), table);
|
||||
}
|
||||
|
||||
{
|
||||
previewframe = gtk_frame_new(NULL);
|
||||
gtk_container_border_width (GTK_CONTAINER(previewframe),5);
|
||||
gtk_widget_show(previewframe);
|
||||
|
||||
st->preview = preview = gtk_preview_new (GTK_PREVIEW_COLOR);
|
||||
gtk_preview_size (GTK_PREVIEW (preview), GRAY_SUM, GRAY_SUM);
|
||||
gtk_widget_show(preview);
|
||||
gtk_container_add(GTK_CONTAINER(previewframe), preview);
|
||||
|
||||
gtk_widget_set_events(preview,RANGE_ADJUST_MASK);
|
||||
gtk_signal_connect_after(GTK_OBJECT(preview),"expose_event",
|
||||
(GtkSignalFunc) rcm_gray_expose_event ,
|
||||
st);
|
||||
|
||||
gtk_signal_connect(GTK_OBJECT(preview),"button_press_event",
|
||||
(GtkSignalFunc) rcm_gray_button_press_event,
|
||||
st);
|
||||
|
||||
gtk_signal_connect(GTK_OBJECT(preview),"button_release_event",
|
||||
(GtkSignalFunc) rcm_gray_release_event,
|
||||
st);
|
||||
|
||||
gtk_signal_connect(GTK_OBJECT(preview),"motion_notify_event",
|
||||
(GtkSignalFunc) rcm_gray_motion_notify_event,
|
||||
st);
|
||||
}
|
||||
|
||||
{
|
||||
legend_table = gtk_table_new(1,5,FALSE);
|
||||
|
||||
gtk_widget_show(legend_table);
|
||||
gtk_container_border_width (GTK_CONTAINER (legend_table), 5);
|
||||
rcm_label_in_a_table(legend_table,"H:",0,0);
|
||||
st->hue_entry = rcm_entry_in_a_table(legend_table,
|
||||
st->hue,1,0,
|
||||
(GtkSignalFunc) rcm_set_hue,
|
||||
st);
|
||||
st->hue_units_label=
|
||||
rcm_label_in_a_table(legend_table,
|
||||
rcm_units_string(Current.Units),2,0);
|
||||
rcm_label_in_a_table(legend_table," S:",3,0);
|
||||
st->satur_entry=rcm_entry_in_a_table(legend_table,
|
||||
st->satur,4,0,
|
||||
(GtkSignalFunc) rcm_set_satur,
|
||||
st);
|
||||
}
|
||||
|
||||
{
|
||||
GtkWidget *box;
|
||||
|
||||
as_or_to_frame = gtk_frame_new(NULL);
|
||||
gtk_container_border_width (GTK_CONTAINER (as_or_to_frame), 10);
|
||||
gtk_widget_show(as_or_to_frame);
|
||||
|
||||
box = gtk_vbox_new(FALSE, 3);
|
||||
gtk_container_add(GTK_CONTAINER(as_or_to_frame), box);
|
||||
gtk_container_border_width(GTK_CONTAINER(box),5);
|
||||
gtk_widget_show(box);
|
||||
|
||||
group = Button_In_A_Box (box, group,
|
||||
"Treat As This",
|
||||
(GtkSignalFunc) rcm_switch_to_gray_from,
|
||||
&(Current.Gray_to_from),
|
||||
Current.Gray_to_from == GRAY_FROM);
|
||||
|
||||
group = Button_In_A_Box (box, group,
|
||||
"Change To This",
|
||||
(GtkSignalFunc) rcm_switch_to_gray_to,
|
||||
&(Current.Gray_to_from),
|
||||
Current.Gray_to_from == GRAY_TO);
|
||||
}
|
||||
|
||||
{
|
||||
GtkWidget *mini_frame, *mini_table;
|
||||
|
||||
mini_frame = gtk_frame_new(NULL);
|
||||
gtk_container_border_width (GTK_CONTAINER (mini_frame), 10);
|
||||
gtk_widget_show(mini_frame);
|
||||
|
||||
mini_table = gtk_table_new(2,1,FALSE);
|
||||
gtk_widget_show(mini_table);
|
||||
gtk_container_add(GTK_CONTAINER(mini_frame), mini_table);
|
||||
|
||||
gtk_table_attach(GTK_TABLE(mini_table), previewframe, 0,1,0,1,
|
||||
GTK_EXPAND,
|
||||
GTK_EXPAND,
|
||||
0,0);
|
||||
|
||||
gtk_table_attach(GTK_TABLE(mini_table), legend_table, 0,1,1,2,
|
||||
GTK_EXPAND|GTK_FILL,
|
||||
GTK_EXPAND|GTK_FILL,
|
||||
0,0);
|
||||
|
||||
table = gtk_table_new(2, 2, FALSE);
|
||||
gtk_widget_show(table);
|
||||
gtk_table_attach(GTK_TABLE(table), mini_frame,
|
||||
0, 1, 0, 2,
|
||||
GTK_EXPAND|GTK_FILL,
|
||||
GTK_EXPAND|GTK_FILL,
|
||||
0,0);
|
||||
|
||||
gtk_table_attach(GTK_TABLE(table), as_or_to_frame,
|
||||
1, 2, 0, 1,
|
||||
GTK_EXPAND|GTK_FILL,
|
||||
GTK_EXPAND|GTK_FILL,
|
||||
0,0);
|
||||
|
||||
gtk_table_attach(GTK_TABLE(table), gray_sat_frame,
|
||||
1, 2, 1, 2,
|
||||
GTK_EXPAND|GTK_FILL,
|
||||
GTK_EXPAND|GTK_FILL,
|
||||
0, 0);
|
||||
}
|
||||
|
||||
gtk_container_add(GTK_CONTAINER(frame), table);
|
||||
|
||||
rcm_render_circle_preview(preview, GRAY_SUM, GRAY_MARGIN);
|
||||
|
||||
return st;
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
rcm_create_misc()
|
||||
{
|
||||
GtkWidget *frame, *label,*table;
|
||||
GtkWidget *units_frame, *units_vbox;
|
||||
GtkWidget *misc_frame, *misc_vbox;
|
||||
GSList *group = NULL;
|
||||
|
||||
Current.Gray = rcm_create_gray();
|
||||
|
||||
frame = gtk_frame_new (NULL);
|
||||
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
|
||||
gtk_container_border_width (GTK_CONTAINER (frame), 5);
|
||||
|
||||
/* All the previews */
|
||||
|
||||
units_frame = gtk_frame_new("Units");
|
||||
gtk_widget_show(units_frame);
|
||||
|
||||
units_vbox=gtk_vbox_new(3, FALSE);
|
||||
gtk_container_add(GTK_CONTAINER(units_frame), units_vbox);
|
||||
gtk_container_border_width(GTK_CONTAINER(units_vbox), 5);
|
||||
gtk_widget_show(units_vbox);
|
||||
|
||||
group = Button_In_A_Box (units_vbox,
|
||||
group,
|
||||
"Radians",
|
||||
(GtkSignalFunc) rcm_switch_to_radians,
|
||||
NULL,
|
||||
Current.Units==RADIANS);
|
||||
|
||||
group = Button_In_A_Box (units_vbox,
|
||||
group,
|
||||
"Radiand/PI",
|
||||
(GtkSignalFunc) rcm_switch_to_radians_over_PI,
|
||||
NULL,
|
||||
Current.Units==RADIANS_OVER_PI);
|
||||
|
||||
group = Button_In_A_Box (units_vbox,
|
||||
group,
|
||||
"Degrees",
|
||||
(GtkSignalFunc) rcm_switch_to_degrees,
|
||||
NULL,
|
||||
Current.Units==DEGREES);
|
||||
|
||||
misc_frame = gtk_frame_new("Very Misc");
|
||||
misc_vbox = gtk_vbox_new(FALSE, 5);
|
||||
gtk_container_add(GTK_CONTAINER(misc_frame), misc_vbox);
|
||||
gtk_widget_show(misc_frame);
|
||||
gtk_widget_show(misc_vbox);
|
||||
|
||||
Check_Button_In_A_Box (misc_vbox, "Preview as you Drag",
|
||||
(GtkSignalFunc) rcm_preview_as_you_drag,
|
||||
&(Current.RealTime),
|
||||
Current.RealTime);
|
||||
|
||||
{
|
||||
GSList *group = NULL;
|
||||
GtkWidget *item, *menu, *root, *hbox;
|
||||
|
||||
hbox = gtk_hbox_new(FALSE,3);
|
||||
gtk_widget_show(hbox);
|
||||
gtk_box_pack_start (GTK_BOX(misc_vbox),hbox, TRUE, TRUE, 5);
|
||||
|
||||
|
||||
label = gtk_label_new("Preview");
|
||||
gtk_widget_show(label);
|
||||
gtk_box_pack_start (GTK_BOX(hbox),label, FALSE, FALSE, 3);
|
||||
|
||||
menu = gtk_menu_new();
|
||||
item =gtk_radio_menu_item_new_with_label(group,"Entire Image");
|
||||
group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (item));
|
||||
gtk_menu_append(GTK_MENU (menu), item);
|
||||
gtk_widget_show(item);
|
||||
gtk_signal_connect (GTK_OBJECT (item), "activate",
|
||||
(GtkSignalFunc) rcm_entire_image,
|
||||
NULL);
|
||||
|
||||
item = gtk_radio_menu_item_new_with_label(group,"Selection");
|
||||
group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (item));
|
||||
gtk_menu_append(GTK_MENU (menu), item);
|
||||
gtk_widget_show(item);
|
||||
gtk_signal_connect (GTK_OBJECT (item), "activate",
|
||||
(GtkSignalFunc) rcm_selection,
|
||||
NULL);
|
||||
|
||||
item = gtk_radio_menu_item_new_with_label(group,"Context");
|
||||
group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (item));
|
||||
gtk_widget_show(item);
|
||||
gtk_menu_append(GTK_MENU (menu), item);
|
||||
gtk_signal_connect (GTK_OBJECT (item), "activate",
|
||||
(GtkSignalFunc) rcm_selection_in_context,
|
||||
NULL);
|
||||
|
||||
|
||||
root = gtk_option_menu_new ();
|
||||
gtk_option_menu_set_menu (GTK_OPTION_MENU (root), menu);
|
||||
gtk_option_menu_set_history (GTK_OPTION_MENU (root), 4);
|
||||
gtk_widget_show(root);
|
||||
gtk_box_pack_start (GTK_BOX(hbox), root, FALSE, FALSE, 0);
|
||||
}
|
||||
|
||||
table = gtk_table_new(2,2,FALSE);
|
||||
gtk_widget_show(table);
|
||||
gtk_container_border_width(GTK_CONTAINER(table),0);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (frame), table);
|
||||
|
||||
|
||||
gtk_table_attach(GTK_TABLE(table), Current.Gray->frame,
|
||||
0, 1, 0, 2,
|
||||
GTK_EXPAND|GTK_FILL,
|
||||
GTK_FILL,
|
||||
5, 3);
|
||||
|
||||
gtk_table_attach(GTK_TABLE(table), misc_frame,
|
||||
1, 2, 0, 1,
|
||||
GTK_EXPAND|GTK_FILL,
|
||||
GTK_FILL,
|
||||
5, 3);
|
||||
|
||||
gtk_table_attach(GTK_TABLE(table), units_frame,
|
||||
1, 2, 1, 2,
|
||||
GTK_EXPAND|GTK_FILL,
|
||||
GTK_FILL,
|
||||
5, 3);
|
||||
|
||||
|
||||
gtk_widget_show (frame);
|
||||
return frame;
|
||||
}
|
||||
|
||||
|
||||
GtkWidget *
|
||||
rcm_create_from_to()
|
||||
{
|
||||
GtkWidget *frame, *blabel, *alabel, *table;
|
||||
|
||||
Current.From = rcm_create_square_preview(SUM, "From:");
|
||||
Current.To = rcm_create_square_preview(SUM, "To:");
|
||||
|
||||
frame = gtk_frame_new (NULL);
|
||||
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
|
||||
gtk_container_border_width (GTK_CONTAINER (frame), 5);
|
||||
|
||||
/* All the previews */
|
||||
alabel = gtk_label_new("To:");
|
||||
gtk_widget_show(alabel);
|
||||
/* gtk_misc_set_alignment(GTK_MISC(alabel), 0.0, 0.5); */
|
||||
|
||||
blabel=gtk_label_new("From:");
|
||||
gtk_widget_show(blabel);
|
||||
/* gtk_misc_set_alignment(GTK_MISC(blabel), 0.0, 0.5); */
|
||||
|
||||
table = gtk_table_new(3,2,FALSE);
|
||||
gtk_container_border_width(GTK_CONTAINER(table),10);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (frame), table);
|
||||
|
||||
gtk_table_attach(GTK_TABLE(table),Current.From->table,0,1,0,1,
|
||||
GTK_EXPAND,
|
||||
GTK_EXPAND,
|
||||
0,0);
|
||||
gtk_table_attach(GTK_TABLE(table),Current.To->table,0,1,1,2,
|
||||
GTK_EXPAND,
|
||||
GTK_EXPAND,
|
||||
0,0);
|
||||
|
||||
gtk_widget_show(table);
|
||||
|
||||
gtk_widget_show (frame);
|
||||
return frame;
|
||||
}
|
||||
|
||||
void
|
||||
Create_A_Preview (GtkWidget **preview,
|
||||
GtkWidget **frame,
|
||||
int previewWidth,
|
||||
int previewHeight,
|
||||
int colorfulness)
|
||||
{
|
||||
*frame = gtk_frame_new(NULL);
|
||||
gtk_frame_set_shadow_type (GTK_FRAME (*frame), GTK_SHADOW_IN);
|
||||
gtk_container_border_width (GTK_CONTAINER(*frame),0);
|
||||
gtk_widget_show(*frame);
|
||||
|
||||
*preview = gtk_preview_new (colorfulness?GTK_PREVIEW_COLOR
|
||||
:GTK_PREVIEW_GRAYSCALE);
|
||||
gtk_preview_size (GTK_PREVIEW (*preview), previewWidth, previewHeight);
|
||||
gtk_widget_show(*preview);
|
||||
gtk_container_add(GTK_CONTAINER(*frame),*preview);
|
||||
}
|
||||
|
||||
RcmCircle *
|
||||
rcm_create_square_preview(gint height,
|
||||
gchar *label_content)
|
||||
{
|
||||
GtkWidget *label, *frame, *button_table, *legend_table;
|
||||
|
||||
RcmCircle *st = g_new(RcmCircle, 1);
|
||||
st->action_flag = VIRGIN;
|
||||
|
||||
st->angle = g_new(RcmAngle,1);
|
||||
st->angle->alpha = INITIAL_ALPHA;
|
||||
st->angle->beta = INITIAL_BETA;
|
||||
st->angle->cw_ccw = 1;
|
||||
|
||||
frame = gtk_frame_new(NULL);
|
||||
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
|
||||
gtk_container_border_width (GTK_CONTAINER(frame),0);
|
||||
gtk_widget_show(frame);
|
||||
|
||||
|
||||
st->preview = gtk_preview_new (GTK_PREVIEW_COLOR);
|
||||
gtk_preview_size (GTK_PREVIEW (st->preview),height,height);
|
||||
gtk_widget_show(st->preview);
|
||||
gtk_container_add(GTK_CONTAINER(frame),st->preview);
|
||||
|
||||
|
||||
gtk_widget_set_events(st->preview,RANGE_ADJUST_MASK);
|
||||
gtk_signal_connect_after(GTK_OBJECT(st->preview),"expose_event",
|
||||
(GtkSignalFunc) rcm_expose_event ,
|
||||
st);
|
||||
|
||||
gtk_signal_connect(GTK_OBJECT(st->preview),"button_press_event",
|
||||
(GtkSignalFunc) rcm_button_press_event,
|
||||
st);
|
||||
gtk_signal_connect(GTK_OBJECT(st->preview),"button_release_event",
|
||||
(GtkSignalFunc) rcm_release_event,
|
||||
st);
|
||||
|
||||
gtk_signal_connect(GTK_OBJECT(st->preview),"motion_notify_event",
|
||||
(GtkSignalFunc) rcm_motion_notify_event,
|
||||
st);
|
||||
|
||||
rcm_render_circle_preview(st->preview,SUM,MARGIN);
|
||||
|
||||
label = gtk_label_new(label_content);
|
||||
gtk_widget_show(label);
|
||||
|
||||
|
||||
|
||||
{
|
||||
PmgButtonLabelXpm *xpm_button;
|
||||
|
||||
button_table = gtk_table_new(3,1,FALSE);
|
||||
gtk_widget_show(button_table);
|
||||
st->cw_ccw_xpm_button =
|
||||
xpm_button = pmg_button_label_xpm_new(gtk_window_new(0),
|
||||
(st->angle->cw_ccw > 0)?
|
||||
RCM_XPM_DIR"rcm_cw.xpm":
|
||||
RCM_XPM_DIR"rcm_ccw.xpm",
|
||||
"Switch To",
|
||||
(st->angle->cw_ccw>0)?
|
||||
"Clockwise":
|
||||
"C/Clockwise",
|
||||
'h',
|
||||
(GtkSignalFunc *) rcm_cw_ccw,
|
||||
(gpointer) st);
|
||||
|
||||
gtk_table_attach(GTK_TABLE(button_table), xpm_button->button,
|
||||
0,1,0,1,
|
||||
GTK_EXPAND|GTK_FILL,
|
||||
GTK_FILL,
|
||||
5,2);
|
||||
|
||||
xpm_button = pmg_button_label_xpm_new(gtk_window_new(0),
|
||||
RCM_XPM_DIR"rcm_a_b.xpm",
|
||||
"Switch Order",
|
||||
"Of Arrows",
|
||||
'h',
|
||||
(GtkSignalFunc *) rcm_a_to_b,
|
||||
(gpointer) st);
|
||||
|
||||
gtk_table_attach(GTK_TABLE(button_table), xpm_button->button,
|
||||
0,1,1,2,
|
||||
GTK_EXPAND|GTK_FILL,
|
||||
GTK_FILL,
|
||||
5,2);
|
||||
|
||||
xpm_button = pmg_button_label_xpm_new(gtk_window_new(0),
|
||||
RCM_XPM_DIR"rcm_360.xpm",
|
||||
"Select The",
|
||||
"Entire Range",
|
||||
'h',
|
||||
(GtkSignalFunc *) rcm_360_degrees,
|
||||
(gpointer) st);
|
||||
|
||||
gtk_table_attach(GTK_TABLE(button_table), xpm_button->button,
|
||||
0,1,2,3,
|
||||
GTK_EXPAND|GTK_FILL,
|
||||
GTK_FILL,
|
||||
5,2);
|
||||
}
|
||||
|
||||
legend_table = gtk_table_new(1, 6, FALSE);
|
||||
gtk_widget_show(legend_table);
|
||||
|
||||
rcm_label_in_a_table(legend_table,"From ",0,0);
|
||||
|
||||
st->alpha_entry =
|
||||
rcm_entry_in_a_table(legend_table,
|
||||
st->angle->alpha*
|
||||
rcm_units_factor(Current.Units),
|
||||
1,0,
|
||||
(GtkSignalFunc) rcm_set_alpha,
|
||||
st)
|
||||
;
|
||||
st->alpha_units_label =
|
||||
rcm_label_in_a_table(legend_table,
|
||||
rcm_units_string(Current.Units),2,0);
|
||||
|
||||
rcm_label_in_a_table(legend_table," to ",3,0);
|
||||
st->beta_entry =
|
||||
rcm_entry_in_a_table(legend_table,
|
||||
st->angle->beta*
|
||||
rcm_units_factor(Current.Units),
|
||||
4,0,
|
||||
(GtkSignalFunc) rcm_set_beta,
|
||||
st);
|
||||
|
||||
st->beta_units_label=
|
||||
rcm_label_in_a_table(legend_table,
|
||||
rcm_units_string(Current.Units),5,0);
|
||||
|
||||
st->table= gtk_table_new(3,2,FALSE);
|
||||
gtk_widget_show(st->table);
|
||||
|
||||
gtk_table_attach(GTK_TABLE(st->table),label,0,1,0,1,
|
||||
0,
|
||||
GTK_EXPAND|GTK_FILL,
|
||||
0,0);
|
||||
|
||||
gtk_table_attach(GTK_TABLE(st->table),frame,0,1,1,2,
|
||||
0,
|
||||
GTK_EXPAND,
|
||||
0,0);
|
||||
|
||||
gtk_table_attach(GTK_TABLE(st->table),button_table,1,2,1,2,
|
||||
0,
|
||||
GTK_EXPAND,
|
||||
0,0);
|
||||
|
||||
gtk_table_attach(GTK_TABLE(st->table),legend_table,0,1,2,3,
|
||||
0,
|
||||
GTK_EXPAND|GTK_FILL,
|
||||
0,10);
|
||||
return st;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************/
|
||||
/******************** MAIN DIALOG ************************/
|
||||
/***********************************************************/
|
||||
gint
|
||||
rcm_dialog()
|
||||
{
|
||||
GtkWidget *table, *dlg, *circles, *bna, *misc;
|
||||
GtkWidget *OKbutton, *CANCELbutton;
|
||||
GtkWidget *buttonTable;
|
||||
|
||||
guchar *color_cube;
|
||||
gchar **argv;
|
||||
gint argc;
|
||||
|
||||
argc = 1;
|
||||
argv = g_new (gchar *, 1);
|
||||
argv[0] = g_strdup ("rcm");
|
||||
|
||||
gtk_init (&argc, &argv);
|
||||
gtk_rc_parse (gimp_gtkrc ());
|
||||
|
||||
|
||||
Current.Bna = g_new(RcmBna, 1);
|
||||
|
||||
gtk_preview_set_gamma (gimp_gamma ());
|
||||
gtk_preview_set_install_cmap (gimp_install_cmap ());
|
||||
color_cube = gimp_color_cube ();
|
||||
gtk_preview_set_color_cube (color_cube[0], color_cube[1],
|
||||
color_cube[2], color_cube[3]);
|
||||
|
||||
gtk_widget_set_default_visual(gtk_preview_get_visual());
|
||||
gtk_widget_set_default_colormap(gtk_preview_get_cmap());
|
||||
|
||||
Current.Bna->dlg = dlg = gtk_dialog_new ();
|
||||
gtk_window_set_title (GTK_WINDOW (dlg), "Colormap Rotation");
|
||||
gtk_signal_connect (GTK_OBJECT (dlg), "destroy",
|
||||
(GtkSignalFunc) rcm_close_callback,
|
||||
NULL);
|
||||
|
||||
OKbutton = gtk_button_new_with_label ("OK");
|
||||
GTK_WIDGET_SET_FLAGS (OKbutton, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect(GTK_OBJECT (OKbutton), "clicked",
|
||||
(GtkSignalFunc) rcm_ok_callback,
|
||||
dlg);
|
||||
gtk_widget_grab_default (OKbutton);
|
||||
gtk_widget_show (OKbutton);
|
||||
|
||||
CANCELbutton = gtk_button_new_with_label ("Cancel");
|
||||
GTK_WIDGET_SET_FLAGS (CANCELbutton, GTK_CAN_DEFAULT);
|
||||
gtk_signal_connect_object (GTK_OBJECT (CANCELbutton), "clicked",
|
||||
(GtkSignalFunc) gtk_widget_destroy,
|
||||
GTK_OBJECT (dlg));
|
||||
gtk_widget_show (CANCELbutton);
|
||||
|
||||
buttonTable = gtk_table_new(1,4,TRUE);
|
||||
gtk_container_border_width(GTK_CONTAINER(buttonTable),0);
|
||||
gtk_table_set_col_spacings(GTK_TABLE(buttonTable),3);
|
||||
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->action_area),
|
||||
buttonTable,
|
||||
TRUE, TRUE, 0);
|
||||
|
||||
gtk_table_attach( GTK_TABLE(buttonTable), OKbutton,1,2,0,1,
|
||||
GTK_FILL|GTK_EXPAND, 0,
|
||||
0, 0);
|
||||
|
||||
gtk_table_attach( GTK_TABLE(buttonTable), CANCELbutton,2,3,0,1,
|
||||
GTK_FILL|GTK_EXPAND, 0,
|
||||
0, 0);
|
||||
|
||||
gtk_widget_show (buttonTable);
|
||||
|
||||
/*************************************************************/
|
||||
|
||||
Current.reduced = Reduce_The_Image(Current.drawable,
|
||||
Current.mask,
|
||||
MAX_PREVIEW_SIZE,
|
||||
ENTIRE_IMAGE);
|
||||
|
||||
circles = rcm_create_from_to();
|
||||
Current.Bna->bna_frame = bna = rcm_create_bna();
|
||||
misc = rcm_create_misc();
|
||||
|
||||
rcm_render_preview(Current.Bna->before, ORIGINAL);
|
||||
rcm_render_preview(Current.Bna->after, CURRENT);
|
||||
|
||||
{
|
||||
GtkWidget *notebook;
|
||||
|
||||
notebook = gtk_notebook_new();
|
||||
gtk_container_border_width(GTK_CONTAINER(notebook), 10);
|
||||
gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook), GTK_POS_TOP);
|
||||
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox),
|
||||
notebook, TRUE, TRUE, 0);
|
||||
gtk_widget_show (notebook);
|
||||
|
||||
table = gtk_table_new(1, 2, FALSE);
|
||||
gtk_widget_show(table);
|
||||
|
||||
gtk_table_attach(GTK_TABLE(table),
|
||||
bna, 0, 1, 0, 1,
|
||||
GTK_EXPAND|GTK_FILL,
|
||||
GTK_EXPAND|GTK_FILL,
|
||||
5, 0);
|
||||
|
||||
gtk_table_attach(GTK_TABLE(table),
|
||||
circles, 1, 2, 0, 1,
|
||||
GTK_EXPAND|GTK_FILL,
|
||||
GTK_EXPAND|GTK_FILL,
|
||||
5, 0);
|
||||
|
||||
gtk_notebook_append_page (GTK_NOTEBOOK (notebook), table,
|
||||
gtk_label_new(" Main "));
|
||||
gtk_notebook_append_page (GTK_NOTEBOOK (notebook), misc,
|
||||
gtk_label_new(" Misc "));
|
||||
}
|
||||
|
||||
gtk_widget_show(dlg);
|
||||
|
||||
gdk_flush ();
|
||||
gtk_main ();
|
||||
|
||||
return Current.Success;
|
||||
}
|
|
@ -1,93 +0,0 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include "libgimp/gimp.h"
|
||||
#include "rcm_hsv.h"
|
||||
|
||||
void rgb_to_hsv (hsv r,
|
||||
hsv g,
|
||||
hsv b,
|
||||
hsv *h,
|
||||
hsv *s,
|
||||
hsv *l)
|
||||
{
|
||||
hsv v;
|
||||
hsv m;
|
||||
hsv vm;
|
||||
hsv r2, g2, b2;
|
||||
|
||||
v = MAX(r,g);
|
||||
v = MAX(v,b);
|
||||
m = MIN(r,g);
|
||||
m = MIN(m,b);
|
||||
|
||||
if ((*l = (m + v) / 2.0) <= 0.0)
|
||||
{
|
||||
*s=*h=0;
|
||||
return;
|
||||
}
|
||||
if ((*s = vm = v - m) > 0.0)
|
||||
{
|
||||
*s /= (*l <= 0.5) ? (v + m ) :
|
||||
(2.0 - v - m) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
*h=0;
|
||||
return;
|
||||
}
|
||||
|
||||
r2 = (v - r) / vm;
|
||||
g2 = (v - g) / vm;
|
||||
b2 = (v - b) / vm;
|
||||
|
||||
if (r == v)
|
||||
*h = (g == m ? 5.0 + b2 : 1.0 - g2);
|
||||
else if (g == v)
|
||||
*h = (b == m ? 1.0 + r2 : 3.0 - b2);
|
||||
else
|
||||
*h = (r == m ? 3.0 + g2 : 5.0 - r2);
|
||||
|
||||
*h /= 6;
|
||||
}
|
||||
|
||||
void hsv_to_rgb (hsv h,
|
||||
hsv sl,
|
||||
hsv l,
|
||||
hsv *r,
|
||||
hsv *g,
|
||||
hsv *b)
|
||||
{
|
||||
hsv v;
|
||||
|
||||
v = (l <= 0.5) ? (l * (1.0 + sl)) : (l + sl - l * sl);
|
||||
if (v <= 0)
|
||||
{
|
||||
*r = *g = *b = 0.0;
|
||||
}
|
||||
else
|
||||
{
|
||||
hsv m;
|
||||
hsv sv;
|
||||
gint sextant;
|
||||
hsv fract, vsf, mid1, mid2;
|
||||
|
||||
m = l + l - v;
|
||||
sv = (v - m ) / v;
|
||||
h *= 6.0;
|
||||
sextant = h;
|
||||
fract = h - sextant;
|
||||
vsf = v * sv * fract;
|
||||
mid1 = m + vsf;
|
||||
mid2 = v - vsf;
|
||||
switch (sextant)
|
||||
{
|
||||
case 0: *r = v; *g = mid1; *b = m; break;
|
||||
case 1: *r = mid2; *g = v; *b = m; break;
|
||||
case 2: *r = m; *g = v; *b = mid1; break;
|
||||
case 3: *r = m; *g = mid2; *b = v; break;
|
||||
case 4: *r = mid1; *g = m; *b = v; break;
|
||||
case 5: *r = v; *g = m; *b = mid2; break;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
#ifndef __RCM_HSV__
|
||||
#define __RCM_HSV__
|
||||
|
||||
typedef double hsv;
|
||||
void rgb_to_hsv (hsv r,
|
||||
hsv g,
|
||||
hsv b,
|
||||
hsv *h,
|
||||
hsv *s,
|
||||
hsv *l);
|
||||
|
||||
void hsv_to_rgb (hsv h,
|
||||
hsv sl,
|
||||
hsv l,
|
||||
hsv *r,
|
||||
hsv *g,
|
||||
hsv *b);
|
||||
|
||||
|
||||
#endif
|
|
@ -1,439 +0,0 @@
|
|||
#include "rcm.h"
|
||||
|
||||
extern RcmParams Current;
|
||||
|
||||
float arctg(float y, float x)
|
||||
{
|
||||
float temp=atan2(y,x);
|
||||
return (temp<0)?(temp+TP):temp;
|
||||
}
|
||||
|
||||
float sign(float x)
|
||||
{
|
||||
return (x<0)?(-1):(1);
|
||||
}
|
||||
|
||||
float rcm_linear(float A,
|
||||
float B,
|
||||
float C,
|
||||
float D,
|
||||
float x)
|
||||
{
|
||||
if (B > A)
|
||||
if (A<=x && x<=B)
|
||||
return C+(D-C)/(B-A)*(x-A);
|
||||
else if (A<=x+TP && x+TP<=B)
|
||||
return C+(D-C)/(B-A)*(x+TP-A);
|
||||
else
|
||||
return x;
|
||||
else
|
||||
if (B<=x && x<=A)
|
||||
return C+(D-C)/(B-A)*(x-A);
|
||||
else if (B<=x+TP && x+TP<=A)
|
||||
return C+(D-C)/(B-A)*(x+TP-A);
|
||||
else
|
||||
return x;
|
||||
}
|
||||
|
||||
float rcm_left_end(RcmAngle *angle)
|
||||
{
|
||||
gfloat alpha = angle->alpha;
|
||||
gfloat beta = angle->beta;
|
||||
gint cw_ccw = angle->cw_ccw;
|
||||
|
||||
switch (cw_ccw) {
|
||||
|
||||
case (-1): if (alpha < beta) return alpha + TP;
|
||||
|
||||
case 1: default: return alpha;
|
||||
}
|
||||
}
|
||||
|
||||
float rcm_right_end(RcmAngle *angle)
|
||||
{
|
||||
gfloat alpha = angle->alpha;
|
||||
gfloat beta = angle->beta;
|
||||
gint cw_ccw = angle->cw_ccw;
|
||||
|
||||
switch (cw_ccw) {
|
||||
|
||||
case 1: if (beta < alpha) return beta + TP;
|
||||
|
||||
case (-1): default: return beta;
|
||||
}
|
||||
}
|
||||
|
||||
float min_prox(float alpha,
|
||||
float beta,
|
||||
float angle)
|
||||
{
|
||||
gfloat temp1 = MIN(angle_mod_2PI(alpha - angle),
|
||||
TP-angle_mod_2PI(alpha - angle));
|
||||
gfloat temp2 = MIN(angle_mod_2PI(beta - angle),
|
||||
TP-angle_mod_2PI(beta - angle));
|
||||
return MIN(temp1,temp2);
|
||||
}
|
||||
|
||||
float *closest(float *alpha, float *beta, float angle)
|
||||
{
|
||||
float temp_alpha = MIN(angle_mod_2PI(*alpha-angle),
|
||||
TP-angle_mod_2PI(*alpha-angle));
|
||||
|
||||
float temp_beta = MIN(angle_mod_2PI(*beta -angle),
|
||||
TP-angle_mod_2PI(*beta -angle));
|
||||
|
||||
if (temp_alpha-temp_beta<0)
|
||||
return alpha;
|
||||
else
|
||||
return beta;
|
||||
}
|
||||
|
||||
float angle_mod_2PI(float angle)
|
||||
{
|
||||
if (angle < 0)
|
||||
return angle + TP;
|
||||
else if (angle > TP)
|
||||
return angle - TP;
|
||||
else
|
||||
return angle;
|
||||
}
|
||||
|
||||
float beta_from_0_to_2PI(float alpha, float delta)
|
||||
{
|
||||
float beta = alpha + delta;
|
||||
if (delta > 0)
|
||||
return (beta < 2*PI) ? beta : beta - 2*PI;
|
||||
else
|
||||
return (beta > 0) ? beta : beta + 2*PI;
|
||||
}
|
||||
|
||||
float
|
||||
angle_inside_slice(float angle,
|
||||
RcmAngle *slice)
|
||||
{
|
||||
return angle_mod_2PI(slice->cw_ccw*(slice->beta-angle))/
|
||||
angle_mod_2PI(slice->cw_ccw*(slice->beta-slice->alpha));
|
||||
}
|
||||
|
||||
float
|
||||
rcm_units_factor(gint units)
|
||||
{
|
||||
switch (units) {
|
||||
case DEGREES: return 180.0/PI;
|
||||
case RADIANS: return 1.0;
|
||||
case RADIANS_OVER_PI: return 1.0/PI;
|
||||
default: return -1;
|
||||
}
|
||||
}
|
||||
gchar *
|
||||
rcm_units_string(gint units)
|
||||
{
|
||||
switch (units) {
|
||||
case DEGREES: return " °";
|
||||
case RADIANS: return " Rad";
|
||||
case RADIANS_OVER_PI: return " \227";
|
||||
default: return "Error";
|
||||
}
|
||||
}
|
||||
|
||||
gint
|
||||
rcm_is_gray(float s)
|
||||
{
|
||||
if (s <= Current.Gray->gray_sat)
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
rcm_update_entries(gint units)
|
||||
{
|
||||
Current.From->action_flag = DO_NOTHING;
|
||||
Current.To->action_flag = DO_NOTHING;
|
||||
Current.Gray->action_flag = DO_NOTHING;
|
||||
|
||||
rcm_float_in_an_entry(Current.From->alpha_entry,
|
||||
Current.From->angle->alpha*
|
||||
rcm_units_factor(Current.Units));
|
||||
|
||||
rcm_float_in_an_entry(Current.From->beta_entry,
|
||||
Current.From->angle->beta*
|
||||
rcm_units_factor(Current.Units));
|
||||
|
||||
|
||||
rcm_float_in_an_entry(Current.To->alpha_entry,
|
||||
Current.To->angle->alpha*
|
||||
rcm_units_factor(Current.Units));
|
||||
|
||||
rcm_float_in_an_entry(Current.To->beta_entry,
|
||||
Current.To->angle->beta*
|
||||
rcm_units_factor(Current.Units));
|
||||
|
||||
rcm_float_in_an_entry(Current.Gray->hue_entry,
|
||||
Current.Gray->hue*
|
||||
rcm_units_factor(Current.Units));
|
||||
|
||||
gtk_label_set(GTK_LABEL(Current.From->alpha_units_label),
|
||||
rcm_units_string(Current.Units));
|
||||
gtk_label_set(GTK_LABEL(Current.From->beta_units_label),
|
||||
rcm_units_string(Current.Units));
|
||||
gtk_label_set(GTK_LABEL(Current.To->alpha_units_label),
|
||||
rcm_units_string(Current.Units));
|
||||
gtk_label_set(GTK_LABEL(Current.To->beta_units_label),
|
||||
rcm_units_string(Current.Units));
|
||||
gtk_label_set(GTK_LABEL(Current.Gray->hue_units_label),
|
||||
rcm_units_string(Current.Units));
|
||||
|
||||
Current.From->action_flag = VIRGIN;
|
||||
Current.To->action_flag = VIRGIN;
|
||||
Current.Gray->action_flag = VIRGIN;
|
||||
}
|
||||
|
||||
ReducedImage *
|
||||
Reduce_The_Image(GDrawable *drawable,
|
||||
GDrawable *mask,
|
||||
gint LongerSize,
|
||||
gint Slctn)
|
||||
{
|
||||
gint RH, RW, width, height, bytes=drawable->bpp;
|
||||
ReducedImage *temp = g_new(ReducedImage, 1);
|
||||
guchar *tempRGB, *src_row, *tempmask, *src_mask_row,R,G,B;
|
||||
gint i, j, whichcol, whichrow, x1, x2, y1, y2;
|
||||
GPixelRgn srcPR, srcMask;
|
||||
gint NoSelectionMade=TRUE;
|
||||
hsv *tempHSV, H, S, V;
|
||||
|
||||
gimp_drawable_mask_bounds (drawable->id, &x1, &y1, &x2, &y2);
|
||||
width = x2-x1;
|
||||
height = y2-y1;
|
||||
|
||||
if (width != drawable->width && height != drawable->height)
|
||||
NoSelectionMade=FALSE;
|
||||
|
||||
if (Slctn==ENTIRE_IMAGE) {
|
||||
x1=0;
|
||||
x2=drawable->width;
|
||||
y1=0;
|
||||
y2=drawable->height;
|
||||
}
|
||||
|
||||
if (Slctn==SELECTION_IN_CONTEXT) {
|
||||
x1=MAX(0, x1-width/2.0);
|
||||
x2=MIN(drawable->width, x2+width/2.0);
|
||||
y1=MAX(0, y1-height/2.0);
|
||||
y2=MIN(drawable->height, y2+height/2.0);
|
||||
}
|
||||
|
||||
width = x2-x1;
|
||||
height = y2-y1;
|
||||
|
||||
if (width>height) {
|
||||
RW=LongerSize;
|
||||
RH=(float) height * (float) LongerSize/ (float) width;
|
||||
}
|
||||
else {
|
||||
RH=LongerSize;
|
||||
RW=(float)width * (float) LongerSize/ (float) height;
|
||||
}
|
||||
|
||||
tempRGB = (guchar *) malloc(RW*RH*bytes);
|
||||
tempHSV = (hsv *) malloc(RW*RH*bytes*sizeof(hsv));
|
||||
tempmask = (guchar *) malloc(RW*RH);
|
||||
|
||||
gimp_pixel_rgn_init (&srcPR, drawable, x1, y1, width, height, FALSE, FALSE);
|
||||
gimp_pixel_rgn_init (&srcMask, mask, x1, y1, width, height, FALSE, FALSE);
|
||||
|
||||
src_row = (guchar *) malloc (width*bytes);
|
||||
src_mask_row = (guchar *) malloc (width*bytes);
|
||||
|
||||
for (i=0; i<RH; i++) {
|
||||
whichrow=(float)i*(float)height/(float)RH;
|
||||
gimp_pixel_rgn_get_row (&srcPR, src_row, x1, y1+whichrow, width);
|
||||
gimp_pixel_rgn_get_row (&srcMask, src_mask_row, x1, y1+whichrow, width);
|
||||
|
||||
for (j=0; j<RW; j++) {
|
||||
whichcol=(float)j*(float)width/(float)RW;
|
||||
|
||||
if (NoSelectionMade)
|
||||
tempmask[i*RW+j]=255;
|
||||
else
|
||||
tempmask[i*RW+j]=src_mask_row[whichcol];
|
||||
|
||||
R=src_row[whichcol*bytes+0];
|
||||
G=src_row[whichcol*bytes+1];
|
||||
B=src_row[whichcol*bytes+2];
|
||||
|
||||
rgb_to_hsv(R/255.0,G/255.0,B/255.0,&H,&S,&V);
|
||||
|
||||
tempRGB[i*RW*bytes+j*bytes+0]=R;
|
||||
tempRGB[i*RW*bytes+j*bytes+1]=G;
|
||||
tempRGB[i*RW*bytes+j*bytes+2]=B;
|
||||
|
||||
tempHSV[i*RW*bytes+j*bytes+0]=H;
|
||||
tempHSV[i*RW*bytes+j*bytes+1]=S;
|
||||
tempHSV[i*RW*bytes+j*bytes+2]=V;
|
||||
|
||||
if (bytes==4)
|
||||
tempRGB[i*RW*bytes+j*bytes+3]=src_row[whichcol*bytes+3];
|
||||
|
||||
}
|
||||
}
|
||||
temp->width=RW;
|
||||
temp->height=RH;
|
||||
temp->rgb=tempRGB;
|
||||
temp->hsv=tempHSV;
|
||||
temp->mask=tempmask;
|
||||
return temp;
|
||||
}
|
||||
|
||||
void
|
||||
rcm_render_circle_preview(GtkWidget *preview,
|
||||
int sum,
|
||||
int margin)
|
||||
{
|
||||
gint i, j;
|
||||
hsv h, s, v, r, g, b;
|
||||
guchar *a =(guchar *) malloc(3*sum);
|
||||
|
||||
if (preview==NULL) return;
|
||||
|
||||
for (j=0; j<sum; j++) {
|
||||
for (i=0; i<sum; i++) {
|
||||
if (( s=sqrt((sqr(i-sum/2.0) +
|
||||
sqr(j-sum/2.0))/
|
||||
(float)sqr(sum/2.0-margin)))>1) {
|
||||
a[i*3+0] = 255;
|
||||
a[i*3+1] = 255;
|
||||
a[i*3+2] = 255;
|
||||
}
|
||||
else {
|
||||
h=arctg(sum/2.0-j,i-sum/2.0)/(2*PI);
|
||||
v=1-sqrt(s)/2;
|
||||
hsv_to_rgb(h,s,v, &r, &g, &b);
|
||||
a[i*3+0] = r*255;
|
||||
a[i*3+1] = g*255;
|
||||
a[i*3+2] = b*255;
|
||||
}
|
||||
}
|
||||
gtk_preview_draw_row( GTK_PREVIEW(preview),a,0,j,sum);
|
||||
}
|
||||
|
||||
free(a);
|
||||
gtk_widget_draw(preview,NULL);
|
||||
gdk_flush();
|
||||
}
|
||||
|
||||
void
|
||||
rcm_render_preview(GtkWidget *preview,
|
||||
gint version)
|
||||
{
|
||||
guchar *a;
|
||||
ReducedImage *reduced = Current.reduced;
|
||||
gint RW = reduced->width;
|
||||
gint RH = reduced->height;
|
||||
gint bytes = Current.drawable->bpp;
|
||||
gint i, j, k, unchanged, skip;
|
||||
hsv H, S, V, R, G, B;
|
||||
hsv *hsv_array = reduced->hsv;
|
||||
guchar *rgb_array = reduced->rgb;
|
||||
float degree;
|
||||
|
||||
a =(guchar *) malloc(bytes*RW);
|
||||
|
||||
if (preview==NULL) {
|
||||
printf("Asked to preview a NULL! Shouldn't happen!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (version==CURRENT)
|
||||
for (i=0; i<RH; i++) {
|
||||
for (j=0; j<RW; j++) {
|
||||
|
||||
unchanged = 1; skip = 0;
|
||||
|
||||
H = hsv_array[i*RW*bytes + j*bytes + 0];
|
||||
S = hsv_array[i*RW*bytes + j*bytes + 1];
|
||||
V = hsv_array[i*RW*bytes + j*bytes + 2];
|
||||
|
||||
|
||||
if (rcm_is_gray(S)&&reduced->mask[i*RW+j]!=0)
|
||||
switch (Current.Gray_to_from) {
|
||||
case GRAY_FROM:
|
||||
if (angle_inside_slice(Current.Gray->hue,
|
||||
Current.From->angle)<=1)
|
||||
{
|
||||
H = Current.Gray->hue/TP;
|
||||
S = Current.Gray->satur;
|
||||
}
|
||||
else
|
||||
skip = 1;
|
||||
break;
|
||||
|
||||
case GRAY_TO:
|
||||
unchanged = 0; skip = 1;
|
||||
hsv_to_rgb(Current.Gray->hue/TP,
|
||||
Current.Gray->satur,
|
||||
V,
|
||||
&R,&G,&B);
|
||||
break;
|
||||
|
||||
default: break;
|
||||
}
|
||||
|
||||
|
||||
if (!skip) {
|
||||
unchanged = 0;
|
||||
H = rcm_linear(rcm_left_end(Current.From->angle),
|
||||
rcm_right_end(Current.From->angle),
|
||||
rcm_left_end(Current.To->angle),
|
||||
rcm_right_end(Current.To->angle),
|
||||
H*TP);
|
||||
H = angle_mod_2PI(H)/TP;
|
||||
hsv_to_rgb(H,S,V,&R,&G,&B);
|
||||
}
|
||||
|
||||
if (unchanged)
|
||||
degree=0;
|
||||
else
|
||||
degree=reduced->mask[i*RW+j]/255.0;
|
||||
|
||||
a[j*3+0]=(1-degree)*rgb_array[i*RW*bytes+j*bytes+0]+degree*R*255;
|
||||
a[j*3+1]=(1-degree)*rgb_array[i*RW*bytes+j*bytes+1]+degree*G*255;
|
||||
a[j*3+2]=(1-degree)*rgb_array[i*RW*bytes+j*bytes+2]+degree*B*255;
|
||||
|
||||
if (bytes==4)
|
||||
for (k=0; k<3; k++) {
|
||||
float transp=reduced->mask[i*RW*bytes+j*bytes+3]/255.0;
|
||||
a[3*j+k]=transp*a[3*j+k]+(1-transp)*rcm_fake_transparency(i,j);
|
||||
}
|
||||
}
|
||||
gtk_preview_draw_row( GTK_PREVIEW(preview),a,0,i,RW);
|
||||
}
|
||||
else
|
||||
for (i = 0; i < RH; i++) {
|
||||
for (j = 0; j < RW; j++) {
|
||||
a[j*3+0] = rgb_array[i*RW*bytes + j*bytes + 0];
|
||||
a[j*3+1] = rgb_array[i*RW*bytes + j*bytes + 1];
|
||||
a[j*3+2] = rgb_array[i*RW*bytes + j*bytes + 2];
|
||||
|
||||
if (bytes==4)
|
||||
for (k=0; k<3; k++) {
|
||||
float transp=rgb_array[i*RW*bytes+j*bytes+3]/255.0;
|
||||
a[3*j+k]=transp*a[3*j+k]+(1-transp)*rcm_fake_transparency(i,j);
|
||||
}
|
||||
}
|
||||
gtk_preview_draw_row( GTK_PREVIEW(preview),a,0,i,RW);
|
||||
}
|
||||
free(a);
|
||||
gtk_widget_draw(preview,NULL);
|
||||
gdk_flush();
|
||||
}
|
||||
|
||||
gint rcm_fake_transparency(gint i, gint j)
|
||||
{
|
||||
if ( ((i%20)- 10) * ((j%20)- 10)>0 )
|
||||
return 64;
|
||||
else
|
||||
return 196;
|
||||
}
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
Makefile.in
|
||||
Makefile
|
||||
.deps
|
||||
_libs
|
||||
.libs
|
||||
stegano
|
|
@ -1,70 +0,0 @@
|
|||
-------------------------------------------
|
||||
GIMP-Plug-In (Stegano)
|
||||
-------------------------------------------
|
||||
Written by Daniel Cotting
|
||||
Bahnhofstrasse 31
|
||||
CH-3066 Stettlen (Switzerland)
|
||||
|
||||
cotting@mygale.org
|
||||
www.mygale.org/~cotting
|
||||
-------------------------------------------
|
||||
Some code is taken out of other plug-ins
|
||||
written by other authors.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
INSTALLATION
|
||||
-------------------------------------------
|
||||
To install it, you have to edit the
|
||||
Makefile (change install-path).
|
||||
Afterwards run make. This will compile
|
||||
and install the plug-in in the right
|
||||
directory. Once the new code is installed,
|
||||
you can run the GIMP and enjoy the new
|
||||
functions and effects it provides.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
REDUCE CODE SIZE
|
||||
-------------------------------------------
|
||||
If you find that the plug-in is too big,
|
||||
you can compress the executables with the
|
||||
gzexe program (if it is avaiable on your
|
||||
system). To do so, change to the plug-in
|
||||
directory of the GIMP...
|
||||
|
||||
cd /usr/local/lib/gimp/VERSION/plug-ins
|
||||
|
||||
...and execute the command...
|
||||
|
||||
gzexe PLUGIN_NAME
|
||||
|
||||
...and remember to remove the uncompres-
|
||||
sed binary, which has been renamed to
|
||||
PLUGIN_NAME~, by running the command:
|
||||
|
||||
rm PLUGIN_NAME~
|
||||
|
||||
This will result in a code size of about
|
||||
20 kB, which isn't too much IMHO.
|
||||
------------------------------------------
|
||||
|
||||
|
||||
------------------------------------------
|
||||
FEEDBACK
|
||||
------------------------------------------
|
||||
I'm interested in any feedback, comments,
|
||||
bug-reports, suggestions etc. If you
|
||||
have anything you would like to tell
|
||||
me, you can write to cotting@mygale.org.
|
||||
Also have a look at the GIMP-section of
|
||||
my homepage at www.mygale.org/~cotting.
|
||||
------------------------------------------
|
||||
|
||||
Thank you and happy GIMPing!
|
||||
Daniel Cotting
|
||||
|
||||
------------------------------------------
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
pluginlibdir = $(gimpplugindir)/plug-ins
|
||||
|
||||
pluginlib_PROGRAMS = stegano
|
||||
|
||||
stegano_SOURCES = \
|
||||
stegano.c logo.h
|
||||
|
||||
INCLUDES = \
|
||||
$(X_CFLAGS) \
|
||||
-I$(top_srcdir) \
|
||||
-I$(includedir)
|
||||
|
||||
LDADD = \
|
||||
$(top_builddir)/libgimp/libgimpui.la \
|
||||
$(top_builddir)/libgimp/libgimp.la \
|
||||
$(X_LIBS) \
|
||||
-lc
|
||||
|
||||
DEPS = \
|
||||
$(top_builddir)/libgimp/libgimpui.la \
|
||||
$(top_builddir)/libgimp/libgimp.la
|
||||
|
||||
stegano_DEPENDENCIES = $(DEPS)
|
||||
|
||||
.PHONY: files
|
||||
|
||||
files:
|
||||
@files=`ls $(DISTFILES) 2> /dev/null`; for p in $$files; do \
|
||||
echo $$p; \
|
||||
done
|
||||
@for subdir in $(SUBDIRS); do \
|
||||
files=`cd $$subdir; $(MAKE) files | grep -v "make\[[1-9]\]"`; \
|
||||
for file in $$files; do \
|
||||
echo $$subdir/$$file; \
|
||||
done; \
|
||||
done
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,70 +0,0 @@
|
|||
-------------------------------------------
|
||||
GIMP-Plug-In (Stegano)
|
||||
-------------------------------------------
|
||||
Written by Daniel Cotting
|
||||
Bahnhofstrasse 31
|
||||
CH-3066 Stettlen (Switzerland)
|
||||
|
||||
cotting@mygale.org
|
||||
www.mygale.org/~cotting
|
||||
-------------------------------------------
|
||||
Some code is taken out of other plug-ins
|
||||
written by other authors.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
INSTALLATION
|
||||
-------------------------------------------
|
||||
To install it, you have to edit the
|
||||
Makefile (change install-path).
|
||||
Afterwards run make. This will compile
|
||||
and install the plug-in in the right
|
||||
directory. Once the new code is installed,
|
||||
you can run the GIMP and enjoy the new
|
||||
functions and effects it provides.
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
REDUCE CODE SIZE
|
||||
-------------------------------------------
|
||||
If you find that the plug-in is too big,
|
||||
you can compress the executables with the
|
||||
gzexe program (if it is avaiable on your
|
||||
system). To do so, change to the plug-in
|
||||
directory of the GIMP...
|
||||
|
||||
cd /usr/local/lib/gimp/VERSION/plug-ins
|
||||
|
||||
...and execute the command...
|
||||
|
||||
gzexe PLUGIN_NAME
|
||||
|
||||
...and remember to remove the uncompres-
|
||||
sed binary, which has been renamed to
|
||||
PLUGIN_NAME~, by running the command:
|
||||
|
||||
rm PLUGIN_NAME~
|
||||
|
||||
This will result in a code size of about
|
||||
20 kB, which isn't too much IMHO.
|
||||
------------------------------------------
|
||||
|
||||
|
||||
------------------------------------------
|
||||
FEEDBACK
|
||||
------------------------------------------
|
||||
I'm interested in any feedback, comments,
|
||||
bug-reports, suggestions etc. If you
|
||||
have anything you would like to tell
|
||||
me, you can write to cotting@mygale.org.
|
||||
Also have a look at the GIMP-section of
|
||||
my homepage at www.mygale.org/~cotting.
|
||||
------------------------------------------
|
||||
|
||||
Thank you and happy GIMPing!
|
||||
Daniel Cotting
|
||||
|
||||
------------------------------------------
|
||||
|
|
@ -1,788 +0,0 @@
|
|||
/* GIMP header image file format (Indexed): //logo.h */
|
||||
|
||||
static unsigned int logo_width = 200;
|
||||
static unsigned int logo_height = 72;
|
||||
|
||||
/* Call this macro repeatedly. After each use, the pixel data can be extracted */
|
||||
|
||||
#define HEADER_PIXEL(data,pixel) \
|
||||
pixel[0] = palette_data[data[0]*3+2]; \
|
||||
pixel[1] = palette_data[data[0]*3+1]; \
|
||||
pixel[2] = palette_data[data[0]*3+0]; \
|
||||
data--;
|
||||
|
||||
static unsigned char
|
||||
palette_data[] = { 4,2,2,4,110,178,32,4,122,4,36,
|
||||
86,15,3,66,4,58,127,36,8,186,4,34,122,17,2,
|
||||
34,4,19,66,12,4,162,90,2,69,88,2,48,7,20,
|
||||
2,25,2,103,8,14,48,4,58,186,90,3,154,82,2,
|
||||
129,55,2,34,17,2,18,17,34,191,94,2,101,57,2,
|
||||
70,7,32,154,12,22,157,17,3,50,4,88,150,96,3,
|
||||
186,86,2,138,87,2,86,212,214,210,4,19,98,52,2,
|
||||
154,15,11,2,4,132,216,7,18,125,12,6,82,37,12,
|
||||
18,4,88,189,86,14,48,128,2,157,32,4,138,4,60,
|
||||
155,4,48,126,60,2,218,7,10,52,13,12,66,129,2,
|
||||
50,56,2,52,52,14,98,4,47,157,6,20,87,48,2,
|
||||
24,58,2,101,120,2,141,52,5,170,4,113,215,127,2,
|
||||
73,4,90,210,4,52,112,36,18,194,59,2,85,42,2,
|
||||
10,107,2,173,95,2,114,31,3,52,4,79,160,84,3,
|
||||
189,14,10,40,30,2,69,96,2,58,113,2,126,9,37,
|
||||
231,17,33,170,28,14,2,4,30,146,68,10,37,132,2,
|
||||
82,23,4,7,4,10,122,4,36,108,32,2,37,7,27,
|
||||
2,4,98,175,84,10,146,4,101,191,4,14,146,8,29,
|
||||
86,4,2,170,8,60,230,84,10,162,72,2,39,102,2,
|
||||
142,4,142,221,4,49,143,68,12,170,4,124,213,15,4,
|
||||
74,114,2,69,112,2,158,32,3,23,8,50,190,111,2,
|
||||
104,6,40,154,96,2,210,6,28,104,60,2,138,61,2,
|
||||
25,68,2,114,58,2,125,39,2,114,73,2,69,16,4,
|
||||
58,4,88,177,56,14,26,138,2,173,4,68,176,71,2,
|
||||
55,76,2,210,4,78,130,17,3,42,6,27,69,112,2,
|
||||
49,12,26,178,47,13,159,18,11,10,13,11,74,141,2,
|
||||
58,52,18,234,4,82,186,4,126,198,4,103,213,4,62,
|
||||
206,4,72,226,12,46,210,72,12,222,12,26,146,20,34,
|
||||
210,4,113,197,4,131,229,4,48,170,4,76,170,7,43,
|
||||
95,52,30,218,15,11,170,52,14,202,12,14,86,4,40,
|
||||
174,108,14,202,156,2,186,60,12,130,5,40,129,73,13,
|
||||
189,12,42,138,44,14,202,4,59,143,4,124,229,4,69,
|
||||
191,4,69,157,4,60,114,4,43,110,14,14,58,20,26,
|
||||
157,28,26,210,4,87,162,4,91,202,4,110,226,4,98,
|
||||
226,4,101,202,17,14,186,28,18,18,60,2,234,28,10,
|
||||
114,4,30,114,8,10,162,12,54,186,20,26,130,100,10,
|
||||
170,40,18,154,4,22,114,28,26,234,4,22,58,4,66,
|
||||
226,4,54,202,12,42,202,4,38,98,4,145,234,4,76,
|
||||
146,4,94,148,4,138,213,4,94,186,4,54,126,4,54,
|
||||
154,4,118,211,4,106,178,4,106,188,4,54,142,4,94,
|
||||
170,4,70,202,4,118,197,4,54,173,4,82,178,72,4,
|
||||
172,36,10,138,76,14,162,4,98,210,4,118,226,112,2,
|
||||
114,24,19,8,30,2,85,84,6,226,141,2,73,28,30,
|
||||
10,28,46,186,112,4,206,36,10,90,36,2,174,108,2,
|
||||
58,41,3,130,44,10,194,9,33,130,92,2,162,51,2,
|
||||
42,12,32,162,81,3,146,44,11,26,28,6,146,44,2,
|
||||
178,30,12,10,60,10,178,64,2,146,28,10,178,92,10,
|
||||
210,5,41,146,40,2,102,96,2,125,100,2,88,74,2,
|
||||
157,142,2,159,26,10,55,143,2,50,73,2,102,134,2,
|
||||
142,73,2,84,127,2,126,142,2,82,156,2,178,28,10,
|
||||
158,28,26,114,84,14,202,12,4,10,5,20,74,17,2,
|
||||
26,92,2,194,7,19,106};
|
||||
|
||||
static unsigned char header_data[] = { 71,99,218,218,99,11,71,218,71,71,
|
||||
218,99,99,99,71,99,218,99,99,99,99,218,71,218,99,218,218,99,99,218,
|
||||
218,99,99,218,99,218,99,58,218,99,99,99,58,218,99,99,99,58,99,58,
|
||||
99,58,11,58,99,58,58,11,99,58,99,58,99,99,99,218,99,218,99,58,
|
||||
99,71,99,218,71,12,12,12,12,12,12,12,12,12,92,19,19,19,92,92,
|
||||
92,92,19,108,19,19,19,19,19,19,53,53,53,53,101,19,19,53,53,19,
|
||||
19,19,12,92,92,12,12,12,71,71,218,99,218,218,71,71,12,12,218,99,
|
||||
58,58,58,99,99,99,58,99,99,99,11,58,11,58,58,99,58,99,99,99,
|
||||
58,99,99,99,99,58,99,99,99,99,99,218,99,99,11,99,99,99,11,99,
|
||||
99,218,218,218,99,218,99,99,218,218,99,99,218,99,218,218,99,99,218,11,
|
||||
218,71,99,218,99,218,218,99,71,8,218,99,218,218,99,99,99,99,99,99,
|
||||
218,218,99,99,218,99,218,99,218,71,99,99,99,218,99,99,218,99,99,99,
|
||||
218,218,99,99,99,99,58,99,58,30,99,99,99,99,99,99,58,99,99,58,
|
||||
99,58,99,58,99,99,58,58,58,99,58,58,99,218,218,71,99,99,71,71,
|
||||
71,123,12,118,71,71,12,71,123,12,12,19,19,19,53,19,19,53,53,19,
|
||||
19,53,101,63,20,63,20,63,53,53,53,101,53,53,53,19,53,53,53,19,
|
||||
92,12,12,12,71,12,12,12,12,12,92,71,218,218,71,218,71,71,71,71,
|
||||
99,218,58,58,58,99,99,99,99,58,58,58,99,58,99,58,58,99,58,58,
|
||||
99,99,58,99,99,99,99,58,99,58,30,99,99,99,218,99,58,99,99,58,
|
||||
11,99,99,218,99,218,218,99,99,218,71,99,218,99,99,218,99,99,218,99,
|
||||
11,218,99,218,99,11,218,99,99,8,71,71,71,99,218,71,218,99,71,218,
|
||||
11,99,218,218,99,218,99,218,99,99,99,99,218,99,99,99,99,99,218,99,
|
||||
99,99,99,99,99,11,99,99,99,99,99,99,58,99,58,99,58,99,58,58,
|
||||
99,11,58,58,99,58,99,99,58,58,218,99,123,71,71,71,123,71,71,218,
|
||||
99,99,218,71,12,12,12,12,92,19,19,53,19,53,53,53,53,19,53,53,
|
||||
53,53,19,53,19,53,53,53,53,53,63,63,101,63,63,20,53,19,53,53,
|
||||
53,19,92,92,12,12,12,71,71,71,71,12,12,71,71,12,12,12,12,12,
|
||||
12,218,218,99,58,58,99,58,99,58,99,58,99,99,58,218,58,99,58,99,
|
||||
99,99,99,11,58,99,99,58,99,99,58,58,99,99,99,99,99,99,99,99,
|
||||
99,58,218,99,218,99,99,99,218,99,99,218,99,11,218,99,218,218,99,99,
|
||||
218,99,218,11,99,71,99,218,71,8,99,99,218,99,99,99,218,99,99,218,
|
||||
218,99,11,99,99,218,99,218,99,218,218,99,58,99,99,99,58,11,99,99,
|
||||
58,99,99,58,58,58,58,99,99,99,99,218,58,99,99,99,58,58,99,99,
|
||||
58,58,99,58,99,58,99,99,58,58,99,218,71,71,218,218,218,58,58,58,
|
||||
218,99,71,123,12,12,12,19,19,108,108,108,92,92,92,12,71,12,12,92,
|
||||
19,53,53,53,101,53,53,19,53,101,53,20,53,79,79,0,34,79,20,63,
|
||||
53,53,53,19,19,19,12,12,12,71,71,71,71,71,71,123,71,12,12,12,
|
||||
12,12,71,71,218,58,99,58,218,58,218,99,58,99,58,99,99,218,58,58,
|
||||
58,99,58,58,99,99,58,99,58,99,99,218,58,58,99,99,99,99,99,99,
|
||||
58,11,99,99,218,218,218,99,218,99,99,218,218,99,218,99,99,218,218,99,
|
||||
218,99,71,218,99,218,99,99,99,8,218,218,99,218,99,218,99,218,218,99,
|
||||
11,218,218,218,218,99,71,99,218,99,99,99,218,58,99,99,99,99,218,30,
|
||||
58,99,58,99,58,11,58,99,58,99,58,58,58,99,58,58,99,99,58,58,
|
||||
58,99,58,99,58,58,99,58,218,99,99,218,58,99,58,58,58,58,58,218,
|
||||
71,12,12,71,71,12,12,12,12,71,71,118,71,71,118,71,71,12,223,19,
|
||||
19,53,53,53,53,63,229,20,79,20,34,0,20,101,101,63,20,101,101,53,
|
||||
108,53,53,53,53,53,101,19,92,12,12,12,12,71,71,218,218,218,71,71,
|
||||
118,12,71,71,218,218,58,58,58,58,58,58,218,58,58,58,99,99,218,99,
|
||||
58,58,99,99,58,99,58,99,58,58,58,99,99,99,58,99,99,99,58,58,
|
||||
99,58,58,99,99,99,99,99,99,99,218,99,99,218,99,218,218,99,99,218,
|
||||
99,58,99,99,218,99,218,218,218,8,99,218,99,218,99,218,11,99,218,99,
|
||||
99,99,99,99,218,99,58,99,99,99,58,99,218,99,99,99,99,99,58,99,
|
||||
58,218,99,99,99,58,218,58,58,58,99,99,58,99,218,58,99,99,58,218,
|
||||
58,99,58,99,99,99,58,99,58,58,58,58,99,58,58,58,58,218,218,12,
|
||||
71,71,71,12,12,71,71,12,71,12,71,71,71,71,12,92,19,53,53,53,
|
||||
101,63,79,34,251,0,0,63,20,53,19,53,53,53,53,19,19,53,19,19,
|
||||
19,108,19,19,19,19,19,19,53,53,108,12,12,12,71,71,218,58,58,58,
|
||||
99,218,71,71,71,12,218,99,99,58,58,58,58,218,58,58,58,58,58,99,
|
||||
99,58,58,99,58,218,58,99,99,99,99,58,99,128,99,58,99,99,11,99,
|
||||
99,58,11,58,99,99,99,218,58,11,99,58,99,218,99,99,218,99,99,99,
|
||||
218,71,99,99,218,99,11,99,218,8,218,99,218,99,218,99,99,218,99,218,
|
||||
58,218,58,218,99,99,218,99,58,99,99,99,99,78,11,58,99,58,99,99,
|
||||
99,58,58,99,58,11,58,58,218,99,99,58,58,58,99,58,58,58,99,99,
|
||||
58,58,58,58,58,58,99,58,99,99,99,58,58,58,58,58,218,71,118,12,
|
||||
71,71,71,71,71,12,71,71,71,71,71,12,92,19,19,53,53,63,20,251,
|
||||
0,79,79,0,79,34,34,79,0,63,229,20,63,101,53,101,19,53,19,92,
|
||||
12,71,12,92,12,12,12,12,12,92,19,92,92,71,12,118,71,218,99,58,
|
||||
58,58,58,58,218,123,71,218,58,58,58,99,58,58,58,218,58,218,58,58,
|
||||
218,58,99,58,58,58,99,99,58,99,58,99,218,99,99,99,58,58,58,11,
|
||||
58,58,99,58,99,99,30,99,99,99,58,218,218,30,99,218,99,99,99,218,
|
||||
99,99,218,218,99,99,218,71,99,8,99,99,71,99,218,218,99,218,99,218,
|
||||
99,218,99,58,11,58,99,99,11,58,99,58,99,99,99,99,58,58,99,99,
|
||||
58,99,99,99,99,58,99,78,58,58,99,99,218,78,58,218,58,99,212,58,
|
||||
99,58,58,58,218,58,58,58,58,58,58,58,58,58,218,71,12,12,71,71,
|
||||
123,218,218,58,99,71,123,71,71,12,19,19,19,53,53,19,19,53,63,53,
|
||||
101,101,101,63,101,101,20,20,79,0,0,79,79,34,251,79,79,251,101,53,
|
||||
19,92,12,71,71,71,218,12,218,12,71,71,71,71,71,12,71,71,123,71,
|
||||
58,58,58,58,58,58,58,99,99,58,58,58,99,58,58,58,99,58,99,58,
|
||||
99,58,58,99,58,58,58,58,99,58,99,58,99,58,99,58,99,99,58,58,
|
||||
99,99,99,58,99,58,58,58,99,99,99,30,128,58,99,99,99,99,99,58,
|
||||
218,99,99,218,218,99,99,218,71,8,71,218,99,99,99,99,218,99,99,99,
|
||||
99,30,58,11,58,58,99,58,58,58,58,30,58,58,99,99,99,58,99,58,
|
||||
99,58,99,58,58,58,218,99,58,99,58,58,58,218,99,58,58,58,58,58,
|
||||
58,99,99,99,58,99,99,58,58,212,99,58,58,218,71,71,218,218,99,58,
|
||||
58,58,58,218,123,71,71,12,108,19,19,108,19,19,223,92,19,92,12,12,
|
||||
19,19,19,19,53,53,63,63,229,0,34,34,79,0,79,0,75,34,0,34,
|
||||
79,20,53,19,92,12,71,71,71,218,71,123,71,123,71,71,71,71,71,71,
|
||||
71,218,58,58,58,58,58,58,58,99,58,58,58,58,58,58,58,58,99,58,
|
||||
58,99,99,58,99,58,58,58,58,58,58,99,58,99,58,99,58,58,99,99,
|
||||
58,58,99,99,58,58,218,58,58,99,58,99,11,58,58,99,58,218,99,99,
|
||||
99,99,218,99,99,218,99,99,99,8,99,218,99,218,99,99,99,99,58,58,
|
||||
11,58,99,58,58,30,58,11,58,11,58,99,99,58,99,58,58,58,99,58,
|
||||
58,99,58,99,99,58,58,99,58,99,58,99,58,99,212,58,58,58,58,58,
|
||||
58,58,58,58,58,58,58,58,58,58,212,58,218,218,218,99,58,58,58,58,
|
||||
58,99,71,71,71,12,71,71,12,12,12,71,71,123,71,218,71,71,71,92,
|
||||
19,108,63,79,229,126,0,79,0,0,34,34,34,126,34,251,79,0,126,34,
|
||||
79,0,79,20,63,19,19,12,71,71,71,218,71,99,71,71,71,71,71,71,
|
||||
71,71,218,58,58,58,212,58,58,58,58,58,58,58,58,58,58,58,58,58,
|
||||
58,58,99,58,58,99,58,58,99,99,128,218,58,58,99,58,99,58,58,99,
|
||||
218,58,58,218,99,99,99,99,99,99,58,99,99,58,30,218,99,99,99,99,
|
||||
99,99,218,99,99,99,218,218,99,8,218,99,99,99,58,99,99,99,99,99,
|
||||
58,58,218,99,99,99,58,99,58,58,58,99,58,99,58,99,99,99,58,58,
|
||||
99,99,58,58,58,58,58,58,99,99,58,99,99,58,58,58,58,99,58,58,
|
||||
99,58,99,58,78,212,99,212,99,58,58,99,58,58,78,78,246,99,212,58,
|
||||
99,71,123,71,71,71,71,71,218,218,71,123,218,218,218,118,12,19,63,63,
|
||||
0,0,0,34,34,0,34,79,79,79,0,34,79,79,20,101,53,101,53,19,
|
||||
53,53,101,101,53,53,19,19,19,92,218,218,218,218,218,212,78,58,218,218,
|
||||
71,71,71,11,58,246,58,78,246,58,58,58,99,99,58,58,99,58,212,58,
|
||||
99,58,99,58,58,99,58,58,58,58,58,212,218,58,58,99,58,58,99,58,
|
||||
99,99,99,58,58,99,99,99,58,99,58,58,99,99,99,58,58,99,99,99,
|
||||
99,99,99,11,58,99,99,99,218,8,99,99,218,99,99,218,99,218,58,58,
|
||||
11,78,58,99,58,99,58,99,58,11,58,99,58,99,58,58,58,99,99,58,
|
||||
99,99,99,58,58,58,58,58,58,58,58,58,58,58,58,212,99,58,212,99,
|
||||
58,58,78,58,78,58,58,58,58,58,58,58,58,58,246,58,246,58,58,71,
|
||||
218,71,71,71,218,71,71,71,71,218,218,71,71,92,92,53,63,126,79,0,
|
||||
0,79,0,79,34,79,0,126,79,79,79,79,79,229,229,101,53,108,92,71,
|
||||
71,71,71,71,71,12,12,19,108,19,92,71,71,71,71,218,212,246,78,58,
|
||||
58,218,218,71,71,58,58,212,212,78,212,78,78,58,58,58,58,58,99,58,
|
||||
78,58,58,99,58,58,58,58,58,58,58,58,99,58,99,58,58,212,99,58,
|
||||
58,99,58,99,58,99,99,58,58,99,99,58,58,58,58,11,78,99,99,99,
|
||||
99,58,99,58,71,99,99,99,99,8,99,99,99,218,99,58,99,30,58,11,
|
||||
58,11,58,58,99,58,58,99,58,99,58,99,99,58,99,58,99,58,58,99,
|
||||
58,58,58,58,58,78,58,99,58,99,58,58,58,58,99,58,212,99,58,58,
|
||||
58,78,78,78,58,58,58,58,58,212,58,78,58,78,78,78,58,99,218,218,
|
||||
71,218,218,71,58,99,58,99,71,71,71,12,19,20,79,251,0,251,79,251,
|
||||
79,63,126,79,79,79,79,229,79,79,79,126,126,79,79,63,20,53,53,92,
|
||||
12,12,218,71,71,218,218,218,71,218,71,71,71,218,71,218,218,58,246,246,
|
||||
78,212,78,58,218,218,58,58,58,246,78,212,78,212,58,58,58,58,58,212,
|
||||
78,78,78,58,58,99,58,58,58,58,58,58,58,58,58,218,99,99,58,99,
|
||||
58,58,218,99,58,58,99,58,99,99,58,99,99,99,58,99,99,58,58,58,
|
||||
218,99,11,58,99,99,99,218,99,8,99,30,218,58,11,99,99,58,99,58,
|
||||
99,58,58,99,218,99,218,58,99,99,58,58,58,58,99,58,99,99,58,99,
|
||||
58,58,58,78,78,58,58,58,58,58,99,246,78,78,58,58,58,58,58,78,
|
||||
78,212,78,246,246,58,58,58,212,58,212,246,78,246,58,212,218,218,218,218,
|
||||
218,58,246,58,246,58,218,218,123,12,19,19,53,53,101,53,63,101,63,63,
|
||||
63,63,63,63,63,101,63,53,63,53,53,53,53,108,19,19,19,19,108,19,
|
||||
92,92,12,12,71,71,218,99,99,218,218,218,218,218,71,71,71,218,218,246,
|
||||
78,78,246,78,78,78,58,58,58,78,78,78,78,246,58,58,58,58,58,78,
|
||||
212,78,78,58,58,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,
|
||||
58,99,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,99,99,99,
|
||||
58,99,58,99,99,58,99,99,99,8,99,99,30,58,58,58,58,58,58,99,
|
||||
58,11,99,58,99,58,58,58,58,58,58,99,58,58,58,58,58,58,99,58,
|
||||
99,58,78,58,58,58,99,58,58,78,246,78,58,78,58,58,58,58,78,212,
|
||||
246,78,246,78,78,99,212,246,78,246,58,246,246,78,246,218,218,218,58,58,
|
||||
246,78,78,246,58,218,218,71,12,12,108,92,108,19,108,53,63,63,63,53,
|
||||
53,53,19,223,92,92,49,118,118,118,118,118,118,118,71,118,118,12,12,12,
|
||||
92,71,71,123,218,99,11,58,58,58,58,78,58,99,99,123,71,218,218,218,
|
||||
246,246,78,212,78,212,78,246,78,78,58,78,246,78,246,78,58,58,58,58,
|
||||
99,78,246,78,246,99,58,58,58,58,58,78,78,78,78,99,58,99,58,99,
|
||||
78,58,58,99,58,218,218,58,58,99,58,58,58,218,99,58,58,58,58,11,
|
||||
58,99,99,99,58,99,99,218,58,8,99,99,58,99,58,11,58,11,58,58,
|
||||
99,58,99,58,99,58,99,58,58,218,58,58,58,99,58,99,58,58,58,99,
|
||||
78,58,58,58,99,58,58,78,78,58,246,78,246,99,58,58,58,212,78,78,
|
||||
246,58,246,58,78,78,78,58,246,78,78,58,246,58,58,58,212,58,246,78,
|
||||
212,246,58,58,71,71,71,71,12,92,92,92,108,53,53,53,19,19,223,223,
|
||||
49,223,92,49,49,223,92,49,118,118,118,71,118,112,118,11,11,112,71,112,
|
||||
71,71,11,11,11,99,99,58,58,78,78,78,246,78,246,58,99,71,218,71,
|
||||
218,78,78,246,78,246,58,246,78,246,212,58,246,58,246,78,212,78,246,58,
|
||||
58,58,78,246,246,78,78,99,58,58,58,212,78,58,78,58,58,58,58,58,
|
||||
78,58,78,99,58,58,99,58,58,58,58,99,58,58,99,218,58,99,58,58,
|
||||
58,58,99,58,99,99,58,99,99,8,99,99,58,58,58,99,58,99,99,58,
|
||||
99,58,58,58,58,58,58,218,99,58,99,58,58,58,58,58,99,58,58,78,
|
||||
58,78,78,78,78,58,78,58,78,78,78,212,78,58,78,58,78,212,78,246,
|
||||
78,246,78,78,212,246,246,78,246,212,246,246,78,246,58,246,78,246,58,246,
|
||||
246,58,99,218,218,218,71,12,92,19,19,19,19,19,223,223,49,223,49,118,
|
||||
49,112,30,30,237,103,208,208,245,208,245,208,245,245,245,103,208,103,22,237,
|
||||
30,30,11,11,11,11,71,71,11,99,58,78,78,246,58,246,246,246,58,99,
|
||||
99,218,212,78,246,78,246,78,246,58,78,58,246,78,58,246,78,212,78,246,
|
||||
58,212,58,78,78,212,78,78,58,58,99,78,78,78,78,78,58,58,99,58,
|
||||
58,78,78,78,58,58,99,58,99,58,58,99,58,218,58,58,99,58,58,218,
|
||||
99,58,99,99,58,99,30,99,99,8,58,99,58,99,58,58,58,99,58,99,
|
||||
58,218,218,58,99,58,99,58,58,58,78,99,78,58,99,58,58,78,58,78,
|
||||
78,58,78,78,58,78,78,246,246,212,78,78,78,58,78,246,78,246,58,246,
|
||||
212,78,58,78,78,58,246,78,78,78,58,246,78,246,78,58,246,78,78,78,
|
||||
58,218,99,11,71,12,92,92,92,223,223,223,223,223,49,118,112,22,237,208,
|
||||
72,245,55,243,245,72,72,72,65,208,236,208,208,245,72,55,243,55,55,243,
|
||||
245,245,245,103,237,237,30,11,11,112,71,11,99,58,78,246,246,246,246,78,
|
||||
58,218,58,58,246,78,212,78,246,78,246,78,212,78,78,212,78,246,78,78,
|
||||
58,78,78,78,78,78,246,246,246,58,58,78,58,246,78,212,78,78,99,58,
|
||||
58,78,58,58,58,58,58,99,58,58,58,58,78,58,58,99,99,58,58,58,
|
||||
99,218,58,99,99,99,58,99,58,8,99,99,99,58,11,58,58,58,99,58,
|
||||
58,58,58,58,58,58,58,99,99,78,78,58,58,78,58,58,99,78,78,78,
|
||||
78,78,78,78,78,78,212,246,246,246,246,78,78,246,246,58,246,78,246,78,
|
||||
78,78,212,246,246,246,78,78,212,246,246,246,58,246,246,78,246,246,78,58,
|
||||
218,99,71,12,12,92,92,82,223,49,223,118,112,22,208,72,72,208,65,22,
|
||||
22,112,11,112,112,112,112,112,118,118,118,112,112,112,30,244,244,30,237,65,
|
||||
236,72,55,55,243,243,208,208,237,237,11,71,11,11,71,11,99,58,246,246,
|
||||
246,78,78,246,58,246,78,246,58,246,58,246,58,246,246,78,78,78,212,78,
|
||||
212,246,212,78,246,246,58,78,78,246,99,246,246,58,246,58,78,78,78,58,
|
||||
78,78,78,78,78,78,58,58,58,99,58,58,78,99,58,58,58,218,99,99,
|
||||
58,58,99,58,99,58,58,99,99,8,58,58,99,58,99,218,99,58,99,99,
|
||||
99,58,99,58,99,58,58,58,58,78,58,58,58,58,58,58,58,78,212,78,
|
||||
78,58,246,78,58,246,246,246,246,246,246,246,78,58,246,78,246,58,246,58,
|
||||
246,78,78,78,58,246,212,78,78,78,58,246,78,212,246,58,78,212,58,99,
|
||||
218,71,12,92,19,223,49,49,118,62,30,22,208,208,103,30,244,112,244,118,
|
||||
112,23,49,49,49,49,49,49,49,49,82,82,223,82,49,118,23,118,118,112,
|
||||
11,30,237,22,65,245,55,243,245,245,103,237,237,11,71,11,71,71,218,58,
|
||||
246,246,78,246,78,212,78,246,246,78,246,246,78,78,212,78,212,78,246,78,
|
||||
78,58,246,78,58,246,78,212,78,246,78,78,78,78,78,212,246,246,246,78,
|
||||
58,78,78,78,58,78,78,58,58,58,58,58,99,58,58,58,58,58,99,58,
|
||||
58,58,58,58,58,99,99,58,58,8,99,99,58,58,58,99,99,99,99,58,
|
||||
58,99,78,58,78,99,58,58,99,78,78,78,58,78,58,58,78,246,78,212,
|
||||
78,78,58,78,246,246,246,246,246,246,58,78,78,246,58,246,78,246,78,246,
|
||||
78,212,78,212,212,246,78,78,246,246,78,212,58,99,212,246,246,58,99,218,
|
||||
118,12,92,223,223,49,49,11,237,208,208,103,244,23,118,112,118,112,49,49,
|
||||
19,82,82,82,223,49,66,49,49,82,223,223,101,19,223,82,223,82,223,82,
|
||||
82,49,23,112,11,244,30,65,72,55,55,245,208,22,237,112,11,118,71,218,
|
||||
218,58,58,78,246,78,212,78,78,212,99,78,212,246,78,246,78,246,78,212,
|
||||
246,246,78,246,246,78,246,78,246,58,246,78,58,78,246,246,246,246,212,246,
|
||||
78,78,78,78,78,58,78,78,99,58,78,78,78,99,58,58,99,58,99,99,
|
||||
58,99,99,99,99,58,99,58,99,8,99,99,99,58,58,99,58,58,99,58,
|
||||
58,58,78,78,58,58,58,58,58,58,78,78,78,78,78,58,246,246,246,246,
|
||||
246,78,78,212,246,246,246,246,246,246,78,212,78,246,78,212,78,246,58,246,
|
||||
78,246,78,58,58,212,246,58,78,246,246,58,58,58,58,246,58,218,71,12,
|
||||
223,223,49,49,49,30,65,72,72,30,112,118,118,112,118,49,223,223,223,49,
|
||||
244,244,244,244,23,23,23,23,70,66,49,70,49,70,70,118,23,23,23,23,
|
||||
49,223,19,82,223,223,23,11,244,237,208,72,55,55,208,103,30,11,11,49,
|
||||
71,71,99,58,246,78,246,246,58,246,58,58,246,212,78,246,58,246,78,58,
|
||||
58,212,78,78,212,78,212,78,78,78,212,78,78,78,246,212,246,246,246,212,
|
||||
246,58,78,78,78,78,58,78,78,99,58,58,78,58,58,58,99,58,58,58,
|
||||
58,58,58,58,99,58,99,58,99,8,99,58,58,218,58,58,58,99,58,58,
|
||||
58,99,58,58,99,58,78,78,78,78,78,78,78,58,246,246,246,212,246,246,
|
||||
212,246,78,246,246,246,246,246,212,246,246,78,246,58,212,246,78,78,78,246,
|
||||
58,246,212,99,58,246,78,246,246,58,58,58,58,78,246,58,99,118,12,92,
|
||||
223,223,223,11,22,72,208,244,49,112,112,118,49,82,223,49,244,244,242,62,
|
||||
23,62,23,23,244,244,244,244,244,244,62,30,244,244,244,244,23,112,210,23,
|
||||
62,244,244,23,223,82,53,82,49,112,30,30,65,72,55,245,208,237,30,112,
|
||||
71,49,118,71,99,78,78,78,246,246,58,99,58,246,212,78,246,58,246,212,
|
||||
99,58,212,246,78,246,78,246,212,246,78,246,246,212,246,246,246,212,246,246,
|
||||
246,246,78,78,246,246,78,78,78,78,58,58,78,58,58,58,58,58,99,99,
|
||||
99,78,99,58,99,99,58,99,58,8,58,99,58,99,99,58,58,99,58,58,
|
||||
58,58,58,58,78,58,78,78,58,78,58,246,78,78,78,212,246,246,212,246,
|
||||
246,246,246,246,246,246,246,246,246,246,246,58,246,58,99,212,246,212,78,78,
|
||||
78,99,58,58,78,246,58,78,246,58,58,58,58,212,58,218,71,12,49,49,
|
||||
49,112,22,72,65,112,49,112,112,112,223,19,118,62,244,62,62,23,23,244,
|
||||
244,244,244,112,23,49,49,223,19,223,82,223,223,49,223,23,118,112,244,30,
|
||||
62,62,62,62,23,62,23,223,82,8,82,71,30,244,22,72,55,245,103,237,
|
||||
11,71,12,12,71,99,78,78,78,58,212,58,58,58,58,212,78,58,246,78,
|
||||
58,58,58,212,78,246,58,78,78,212,212,246,246,246,212,246,246,246,246,246,
|
||||
246,246,58,78,78,58,246,212,78,78,58,78,58,78,78,78,58,78,58,58,
|
||||
218,58,58,99,58,99,99,99,58,8,218,99,58,58,58,99,58,58,99,78,
|
||||
78,58,99,58,58,78,58,78,246,78,78,58,78,212,246,246,246,246,246,246,
|
||||
246,246,246,212,246,212,246,246,246,212,78,246,58,58,58,246,78,78,212,246,
|
||||
58,58,58,58,212,78,246,212,58,58,58,58,58,58,71,12,49,223,223,49,
|
||||
30,208,72,30,49,49,112,49,223,223,23,22,244,62,23,23,62,22,112,118,
|
||||
49,49,223,118,23,244,30,242,22,242,242,62,242,244,244,112,23,49,49,223,
|
||||
23,112,30,244,62,112,210,23,23,49,82,8,223,244,237,30,208,55,243,245,
|
||||
22,30,71,118,12,71,99,78,78,246,212,58,58,58,58,246,246,246,78,246,
|
||||
58,58,58,78,212,78,246,246,246,58,58,212,246,246,246,246,246,246,246,246,
|
||||
246,78,246,58,246,246,246,78,212,78,78,78,58,78,58,78,58,58,99,58,
|
||||
58,58,99,58,58,58,58,58,58,8,58,99,58,58,58,58,99,58,78,78,
|
||||
58,58,78,58,58,78,78,58,78,78,78,78,78,246,212,246,246,246,246,246,
|
||||
246,246,246,246,246,246,212,246,246,246,78,58,58,58,58,246,78,78,246,99,
|
||||
212,58,212,58,212,78,78,58,58,218,58,212,58,99,71,49,223,49,49,30,
|
||||
55,72,112,49,244,11,49,82,112,242,242,62,23,62,244,112,118,223,82,118,
|
||||
30,236,29,225,231,33,248,42,42,42,219,2,42,219,110,107,231,29,65,244,
|
||||
112,223,223,49,112,30,30,23,23,23,23,49,82,101,49,30,30,242,72,243,
|
||||
208,103,30,71,118,12,71,99,78,78,78,58,58,58,58,58,78,58,246,78,
|
||||
58,58,99,58,246,58,246,58,246,58,99,58,212,246,246,212,246,246,246,246,
|
||||
246,246,246,246,212,246,246,246,246,78,58,78,78,78,78,78,58,78,78,78,
|
||||
58,78,99,99,99,58,58,99,99,8,99,58,99,99,58,58,58,58,78,78,
|
||||
78,78,58,58,58,78,78,78,78,78,246,246,58,246,246,246,246,246,246,246,
|
||||
246,246,212,246,99,58,246,246,246,246,212,58,58,58,99,212,78,212,212,58,
|
||||
78,58,58,58,246,246,78,58,71,218,58,58,11,71,118,223,49,23,103,243,
|
||||
22,49,118,30,118,82,49,30,242,62,70,62,244,118,223,82,112,65,93,205,
|
||||
217,42,80,147,98,4,26,8,8,8,8,121,8,8,26,4,98,210,111,219,
|
||||
29,29,65,112,223,82,23,30,244,62,62,62,62,49,82,82,112,30,30,65,
|
||||
243,245,103,30,71,118,12,71,218,212,246,58,58,212,212,58,58,246,212,78,
|
||||
58,58,212,58,58,246,78,246,58,58,58,58,246,212,246,246,246,246,246,246,
|
||||
246,212,246,246,246,246,212,246,246,212,78,246,212,78,58,78,78,78,58,78,
|
||||
78,78,58,58,58,58,99,58,58,8,58,58,58,58,58,58,58,58,237,78,
|
||||
58,78,78,58,78,78,212,78,246,78,78,246,246,246,246,246,246,246,246,246,
|
||||
246,246,246,58,58,58,246,246,246,246,58,58,99,58,58,246,246,78,99,78,
|
||||
246,78,58,58,58,58,58,218,12,99,58,99,71,92,49,223,118,22,41,65,
|
||||
223,23,30,118,19,23,22,242,23,23,30,112,223,19,112,29,222,232,87,80,
|
||||
98,26,121,8,20,253,20,20,20,20,101,20,20,20,253,253,20,8,121,26,
|
||||
4,14,2,231,29,30,49,82,112,30,244,62,23,210,118,82,101,223,30,244,
|
||||
65,55,243,103,237,71,118,71,71,99,58,58,58,58,218,58,58,58,246,212,
|
||||
58,58,212,78,99,58,246,246,78,58,58,58,58,246,246,246,246,246,246,246,
|
||||
246,246,246,212,246,246,246,246,246,246,246,78,78,78,78,78,58,78,58,78,
|
||||
78,58,58,58,78,99,58,58,99,8,99,58,58,99,99,58,58,58,58,237,
|
||||
78,78,58,78,78,246,78,246,78,246,78,246,246,246,246,246,246,246,246,246,
|
||||
246,246,58,58,58,58,246,246,246,58,99,78,246,212,99,246,212,58,78,246,
|
||||
58,246,58,58,58,212,218,12,118,58,58,71,12,49,19,49,237,41,65,49,
|
||||
118,112,223,82,244,236,62,66,62,30,82,8,112,93,68,6,137,88,162,253,
|
||||
253,20,253,19,223,23,244,244,54,242,54,242,244,62,112,49,223,20,20,20,
|
||||
20,253,26,98,14,33,29,244,82,101,112,22,62,62,62,23,49,53,82,30,
|
||||
112,22,243,243,208,11,71,118,12,218,99,58,58,58,12,71,58,58,58,58,
|
||||
99,58,58,246,246,58,58,246,246,58,58,58,99,58,246,246,246,246,78,58,
|
||||
246,212,246,246,246,246,246,212,246,246,78,78,78,78,58,78,78,78,78,58,
|
||||
78,58,78,237,78,58,99,99,78,8,58,99,58,58,78,78,78,78,78,78,
|
||||
58,78,78,58,78,246,78,212,246,246,246,246,246,246,246,246,246,103,246,246,
|
||||
246,246,58,58,58,99,212,246,246,58,212,78,246,58,58,58,58,58,212,78,
|
||||
78,78,58,58,58,58,123,49,218,99,11,118,223,223,82,237,41,208,23,118,
|
||||
237,223,82,244,18,210,23,23,112,19,223,103,64,6,148,147,26,253,20,8,
|
||||
66,23,54,111,219,219,137,24,76,24,163,25,137,42,204,42,151,109,244,223,
|
||||
20,20,20,20,8,4,111,231,236,23,82,12,237,62,62,23,62,223,253,223,
|
||||
237,244,22,41,245,103,11,112,118,71,218,58,58,99,92,92,128,58,58,58,
|
||||
58,58,58,212,78,58,58,212,58,58,58,78,78,58,212,246,246,246,58,58,
|
||||
212,246,212,246,246,246,246,246,246,212,246,78,246,246,78,78,78,78,78,58,
|
||||
78,58,58,78,99,58,58,58,99,8,99,58,58,58,58,78,78,58,78,78,
|
||||
78,78,78,78,78,58,246,246,246,246,246,246,246,246,103,246,246,246,246,246,
|
||||
246,78,58,58,58,58,58,212,58,58,78,212,78,78,99,58,58,212,78,246,
|
||||
212,212,58,58,58,218,92,12,218,99,71,12,223,82,118,243,55,23,223,30,
|
||||
223,19,244,93,54,49,23,112,82,82,245,153,138,234,162,8,253,101,49,30,
|
||||
111,125,24,201,142,16,159,142,43,95,197,156,193,193,51,141,224,25,248,231,
|
||||
65,118,20,20,20,20,121,210,231,55,244,82,49,30,244,62,62,244,223,20,
|
||||
118,237,112,208,243,245,237,71,118,49,71,58,58,218,92,92,12,58,58,99,
|
||||
58,58,212,78,212,212,58,58,58,58,58,212,78,58,58,246,246,246,99,58,
|
||||
99,246,246,246,246,246,246,246,246,246,212,246,58,78,78,78,78,78,58,78,
|
||||
78,58,78,78,58,78,58,99,58,8,99,99,58,58,58,78,78,58,78,58,
|
||||
78,78,78,246,78,78,78,246,246,246,246,246,246,246,246,103,246,246,246,246,
|
||||
246,58,58,58,58,58,58,58,58,58,78,78,246,78,58,58,58,212,78,58,
|
||||
58,78,58,58,58,12,92,12,99,218,118,19,82,223,22,116,237,49,112,112,
|
||||
101,112,93,109,70,112,118,82,223,55,136,185,44,26,253,253,82,62,107,163,
|
||||
117,16,114,159,161,106,98,46,26,26,26,26,26,4,32,81,44,142,43,234,
|
||||
10,56,236,23,20,20,20,8,4,219,225,237,19,82,11,244,62,54,62,223,
|
||||
20,112,30,244,72,239,103,237,71,12,12,71,58,71,92,92,12,128,58,58,
|
||||
58,58,246,78,246,58,58,58,99,58,58,246,78,78,58,246,246,58,58,58,
|
||||
58,212,246,212,246,246,246,246,246,246,78,78,246,58,246,58,78,246,78,58,
|
||||
78,58,78,78,58,58,58,58,58,8,58,58,58,58,78,237,58,78,78,78,
|
||||
78,78,78,58,246,246,212,246,246,246,246,246,246,246,246,246,246,246,246,246,
|
||||
78,58,58,58,58,58,99,58,58,246,246,246,58,246,58,58,58,78,246,218,
|
||||
11,58,58,58,58,12,92,71,218,11,49,223,101,23,239,93,23,118,244,223,
|
||||
223,65,29,70,70,112,82,82,72,233,135,152,121,253,20,49,242,179,176,39,
|
||||
198,156,32,47,26,26,69,113,26,47,9,47,162,113,26,121,113,252,152,159,
|
||||
43,234,217,238,30,253,20,251,8,4,107,17,30,82,223,22,62,62,54,244,
|
||||
82,19,237,112,244,41,245,30,112,71,92,71,99,71,12,92,92,71,78,58,
|
||||
58,246,246,58,78,212,58,58,58,58,58,78,246,58,99,58,212,58,58,58,
|
||||
58,78,246,246,246,246,246,246,246,246,246,246,78,78,78,78,246,58,78,78,
|
||||
58,58,58,99,58,99,58,58,58,8,58,99,99,58,58,78,78,58,78,58,
|
||||
78,58,78,78,78,78,78,246,246,246,246,246,246,246,246,246,78,246,246,246,
|
||||
58,58,78,58,78,58,58,99,58,78,58,246,246,58,58,58,212,58,58,12,
|
||||
71,58,58,58,99,92,92,71,218,71,223,8,19,22,150,30,49,11,23,101,
|
||||
30,93,54,49,112,49,20,30,254,181,95,26,253,253,49,65,163,166,206,202,
|
||||
52,26,8,121,4,161,43,114,139,131,57,200,195,188,192,88,26,26,121,98,
|
||||
197,67,234,145,230,22,82,20,20,8,98,107,100,112,253,112,103,244,54,62,
|
||||
49,20,49,237,118,208,243,103,11,11,12,92,92,92,92,12,49,12,58,58,
|
||||
78,58,246,78,246,78,212,99,58,58,78,246,58,78,58,58,58,99,58,58,
|
||||
58,99,246,246,246,246,246,246,246,246,246,246,246,78,246,78,246,78,58,78,
|
||||
78,58,78,78,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78,
|
||||
78,78,78,78,78,246,246,246,246,246,246,246,246,246,246,246,58,212,58,246,
|
||||
99,212,58,99,78,99,58,58,78,246,58,58,58,78,78,58,78,78,99,71,
|
||||
12,71,58,58,12,12,12,71,11,12,223,101,49,243,100,118,223,112,82,19,
|
||||
93,225,113,23,244,101,223,41,129,199,52,253,20,223,242,124,39,57,117,122,
|
||||
121,121,47,44,195,35,94,196,165,189,189,189,27,84,200,139,67,186,26,121,
|
||||
240,106,159,234,175,68,242,20,20,20,8,210,238,93,223,19,237,244,23,54,
|
||||
62,19,101,244,112,30,243,208,237,11,12,92,49,223,12,12,92,12,58,78,
|
||||
246,78,58,246,78,212,78,78,58,58,212,58,58,58,78,99,58,58,99,58,
|
||||
58,58,246,246,246,246,246,246,246,246,246,246,78,246,58,78,58,78,78,78,
|
||||
78,78,237,78,58,58,58,58,58,8,99,58,99,58,78,78,78,58,78,78,
|
||||
78,78,78,78,78,58,246,246,246,246,103,246,246,246,246,218,58,58,78,78,
|
||||
58,99,71,12,58,78,58,78,58,78,123,12,78,78,58,212,78,78,123,92,
|
||||
12,12,99,99,12,92,92,71,11,118,82,101,112,116,236,82,112,112,82,118,
|
||||
100,110,66,23,49,101,244,215,73,43,69,253,101,23,219,59,97,202,52,8,
|
||||
8,4,120,97,187,139,27,143,46,113,26,26,46,88,60,27,131,200,192,47,
|
||||
82,66,81,159,234,170,68,118,20,251,20,26,2,64,244,101,118,22,23,62,
|
||||
62,49,20,118,244,23,208,245,30,11,71,12,92,12,12,49,12,12,71,58,
|
||||
246,246,78,246,78,246,58,78,58,78,212,218,12,246,78,99,58,78,78,11,
|
||||
12,58,58,246,246,103,246,246,58,246,246,246,246,78,246,78,78,78,58,78,
|
||||
78,58,58,58,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78,
|
||||
78,212,78,246,246,78,99,58,246,246,246,246,246,246,71,12,99,58,58,99,
|
||||
58,58,53,251,71,78,78,78,78,246,19,19,71,246,246,78,212,246,12,92,
|
||||
12,12,12,12,92,12,12,71,218,118,19,101,244,239,65,223,244,11,53,112,
|
||||
222,235,66,112,223,20,72,45,90,221,8,253,19,242,214,97,57,152,26,8,
|
||||
26,188,57,187,139,186,8,8,8,8,121,121,8,8,26,4,44,131,94,67,
|
||||
162,82,113,44,159,76,220,29,82,0,20,8,98,238,245,82,82,237,23,62,
|
||||
54,112,20,223,237,49,22,245,237,11,71,49,12,92,12,12,12,12,71,78,
|
||||
246,58,246,58,246,78,246,58,246,212,58,19,101,218,78,78,99,58,58,53,
|
||||
101,71,58,246,246,246,78,71,92,58,246,246,212,246,78,58,58,78,78,58,
|
||||
78,78,78,78,58,58,58,58,58,8,99,99,58,99,58,78,78,58,99,58,
|
||||
78,78,58,246,78,58,71,92,218,246,246,246,103,246,12,92,92,58,58,58,
|
||||
58,218,63,53,19,246,246,78,78,212,53,92,92,212,246,78,78,58,92,218,
|
||||
12,12,92,92,92,12,12,71,11,118,101,101,22,116,242,223,237,11,8,30,
|
||||
17,62,70,112,8,53,72,172,134,143,8,20,223,109,102,57,97,81,121,82,
|
||||
252,114,35,157,165,26,253,8,8,46,182,4,26,26,8,8,113,160,190,35,
|
||||
186,66,121,106,117,152,232,68,49,79,20,8,26,42,17,223,53,22,112,244,
|
||||
54,244,8,82,30,118,30,245,30,11,99,12,12,92,123,12,12,12,71,78,
|
||||
246,78,246,78,58,246,246,58,246,58,12,53,53,12,78,78,78,99,12,63,
|
||||
63,92,78,78,246,246,78,229,229,12,246,246,246,212,78,71,71,58,78,78,
|
||||
58,78,78,58,58,58,212,58,58,8,99,58,58,58,58,78,78,58,99,218,
|
||||
99,58,246,78,78,58,12,92,12,78,246,246,246,218,92,92,19,71,58,58,
|
||||
58,12,38,92,53,71,246,58,246,218,108,92,92,218,246,212,78,58,12,218,
|
||||
12,12,12,92,12,92,12,71,71,118,82,8,103,116,242,82,244,11,82,30,
|
||||
222,210,223,23,8,101,55,172,183,186,8,253,223,110,102,157,97,161,8,8,
|
||||
127,67,190,140,189,26,8,8,69,127,120,5,52,26,26,8,121,9,84,187,
|
||||
43,113,82,98,142,152,89,119,244,20,0,253,121,219,64,23,101,30,30,23,
|
||||
54,244,82,101,30,112,112,72,237,71,30,12,12,92,118,12,12,12,71,58,
|
||||
246,246,58,246,58,212,78,246,58,246,108,63,53,19,78,78,78,58,53,101,
|
||||
53,108,78,246,246,246,108,79,20,53,246,246,246,78,99,92,92,12,99,78,
|
||||
78,58,58,218,218,218,99,58,58,8,99,99,58,58,58,99,99,218,71,11,
|
||||
99,99,78,246,212,71,218,71,92,71,246,246,246,71,92,92,19,19,58,58,
|
||||
58,92,53,92,92,108,58,246,246,71,92,92,92,92,212,246,246,58,123,48,
|
||||
12,12,12,92,92,12,12,12,99,118,19,101,237,116,65,49,30,112,82,244,
|
||||
222,235,26,118,82,101,65,136,183,7,8,8,82,242,21,157,57,192,69,8,
|
||||
26,7,191,157,190,60,9,8,26,52,84,131,60,4,121,8,26,113,67,94,
|
||||
142,113,82,98,43,152,10,119,244,251,0,253,121,111,64,23,101,244,22,49,
|
||||
62,62,82,101,112,23,112,103,30,71,11,12,12,118,12,12,118,12,71,78,
|
||||
78,246,78,58,218,58,78,246,246,12,53,101,53,19,58,78,58,12,63,63,
|
||||
53,63,218,246,246,71,79,20,63,101,218,246,246,218,12,19,108,12,99,58,
|
||||
99,71,218,71,71,218,71,218,71,8,99,58,99,99,58,58,11,218,71,218,
|
||||
71,71,218,58,58,99,218,99,71,92,218,78,246,92,92,12,223,53,71,58,
|
||||
58,19,19,92,92,19,12,78,78,12,92,92,92,92,71,78,78,218,123,241,
|
||||
48,12,12,92,49,12,118,12,71,49,223,101,11,116,65,66,112,11,82,112,
|
||||
100,54,66,66,223,20,244,105,90,159,8,8,8,244,10,167,187,202,98,8,
|
||||
121,47,192,169,190,35,195,188,188,195,57,84,106,47,8,8,8,122,195,140,
|
||||
95,66,82,98,142,221,175,119,244,251,251,20,8,219,64,112,101,30,242,118,
|
||||
23,62,19,20,11,118,112,22,11,11,99,12,12,12,12,71,12,118,71,58,
|
||||
246,58,246,99,12,99,212,78,58,19,53,53,101,53,58,78,218,53,101,53,
|
||||
53,63,218,246,246,63,0,101,19,53,12,78,58,12,108,92,19,108,92,71,
|
||||
71,12,71,71,123,71,71,123,71,8,99,99,58,58,58,11,58,11,99,218,
|
||||
99,11,99,99,218,99,218,99,71,12,12,99,99,92,92,92,12,19,53,71,
|
||||
99,38,53,12,12,92,19,218,212,92,92,92,48,12,108,128,246,218,123,48,
|
||||
128,123,12,12,12,12,12,118,71,71,223,8,112,41,55,49,49,244,223,49,
|
||||
93,231,70,82,223,20,82,116,181,158,252,8,20,223,242,214,57,157,156,46,
|
||||
8,66,26,147,44,198,86,196,86,198,44,52,4,8,8,8,46,60,97,194,
|
||||
52,82,82,180,159,177,232,64,66,79,20,8,26,231,100,49,8,237,62,23,
|
||||
62,244,82,82,30,223,11,237,112,11,11,12,12,71,12,12,118,12,71,218,
|
||||
246,78,58,218,92,99,246,212,92,53,79,79,53,53,218,58,19,63,38,126,
|
||||
53,101,92,58,19,251,63,223,19,19,92,71,12,223,92,223,223,92,19,92,
|
||||
12,71,123,71,71,71,71,71,71,8,11,58,11,58,99,58,99,58,99,58,
|
||||
58,218,218,218,99,218,11,99,99,71,92,92,12,49,92,71,99,12,53,53,
|
||||
92,20,53,123,48,12,92,19,218,19,92,12,241,48,92,92,58,218,92,241,
|
||||
128,212,71,12,118,12,12,71,71,112,223,19,82,55,116,112,49,244,223,19,
|
||||
208,238,235,66,223,253,82,22,250,73,95,113,8,82,49,111,102,207,132,188,
|
||||
252,69,8,121,162,4,47,52,127,4,4,26,26,8,8,46,186,86,169,95,
|
||||
66,8,4,95,192,87,45,236,101,251,253,8,70,222,236,223,223,237,244,23,
|
||||
54,244,82,82,237,118,11,244,71,11,99,71,118,12,12,12,12,12,12,58,
|
||||
78,78,246,123,108,12,212,12,53,63,13,83,63,53,12,92,53,226,13,13,
|
||||
53,53,53,226,75,63,12,71,92,19,19,92,92,92,19,12,12,12,92,12,
|
||||
71,71,71,71,71,12,71,71,71,8,99,99,58,99,99,58,58,99,58,58,
|
||||
11,218,71,71,11,218,99,99,58,218,12,19,92,92,92,99,78,58,92,101,
|
||||
75,251,53,12,123,48,92,108,101,63,92,12,241,241,92,92,108,92,108,128,
|
||||
212,246,58,12,12,12,49,12,12,118,12,49,19,237,116,22,49,118,244,82,
|
||||
112,17,231,70,223,82,20,82,93,45,133,7,46,8,8,49,50,224,168,207,
|
||||
142,60,127,46,8,26,8,8,8,8,8,8,121,26,47,192,166,169,7,113,
|
||||
66,113,7,156,36,217,28,23,251,251,20,26,111,222,30,8,49,22,112,62,
|
||||
242,112,101,112,30,49,244,11,112,11,99,71,12,12,118,12,12,12,71,246,
|
||||
246,78,212,92,108,92,218,53,38,13,0,0,63,101,20,63,101,75,83,83,
|
||||
63,101,229,79,126,92,58,78,12,19,92,92,19,92,12,71,71,118,71,71,
|
||||
218,12,71,71,71,71,71,218,99,8,218,99,218,58,58,218,99,99,58,99,
|
||||
58,58,99,99,218,99,218,99,58,58,99,92,92,92,19,58,78,78,99,108,
|
||||
0,34,38,123,123,48,123,92,53,108,92,12,241,241,241,123,92,19,19,123,
|
||||
241,212,246,99,12,71,12,71,12,71,118,223,82,118,245,100,112,49,30,118,
|
||||
223,237,238,111,113,223,19,20,49,93,144,184,44,113,8,253,19,210,173,141,
|
||||
168,57,196,142,60,52,122,182,113,113,122,3,60,159,130,86,43,122,26,223,
|
||||
47,106,95,76,89,68,244,20,251,20,8,210,238,72,223,19,30,112,23,62,
|
||||
244,223,20,118,112,112,244,118,11,99,99,218,71,218,71,12,12,71,58,58,
|
||||
78,246,246,92,63,53,53,101,83,0,83,83,53,63,63,53,20,83,0,0,
|
||||
53,53,79,0,226,78,58,78,12,108,92,19,92,71,58,58,99,71,71,123,
|
||||
71,218,218,71,218,218,99,218,99,8,99,99,218,218,99,99,99,99,58,99,
|
||||
99,58,99,11,71,99,99,58,58,58,58,71,92,92,19,78,78,58,78,218,
|
||||
53,63,101,123,123,48,48,123,92,19,92,92,241,241,241,241,92,92,92,12,
|
||||
241,212,78,78,123,118,12,12,12,12,112,92,49,223,30,247,65,49,23,112,
|
||||
82,23,72,231,14,26,82,19,101,49,17,146,102,154,147,69,8,82,49,23,
|
||||
249,104,158,39,206,169,86,130,202,142,202,114,39,117,76,88,4,66,66,113,
|
||||
7,95,234,175,68,22,101,20,251,8,4,107,100,112,101,112,30,23,112,62,
|
||||
49,101,49,244,118,112,112,118,11,78,99,99,99,58,71,12,92,99,246,78,
|
||||
246,58,218,108,108,53,63,229,0,83,34,13,53,53,101,38,13,0,0,13,
|
||||
53,101,63,101,99,78,58,78,71,19,19,92,71,58,99,58,11,218,218,71,
|
||||
99,99,99,99,218,58,99,218,218,8,71,218,99,99,218,58,99,99,99,99,
|
||||
99,58,99,58,99,218,11,58,58,99,58,58,71,92,92,58,78,78,78,78,
|
||||
118,19,53,123,48,128,128,48,123,12,92,92,48,128,212,48,241,12,12,92,
|
||||
241,128,246,246,246,71,12,12,12,71,71,118,49,223,49,208,116,22,49,23,
|
||||
11,223,223,72,225,235,113,82,82,101,49,65,68,164,201,7,162,26,8,121,
|
||||
66,223,23,216,14,36,177,152,154,152,80,255,98,66,66,223,66,4,32,152,
|
||||
152,163,228,222,112,251,20,20,8,113,219,222,22,82,23,22,62,112,54,244,
|
||||
101,82,112,112,23,118,112,11,11,78,58,58,246,99,71,71,99,58,246,212,
|
||||
58,58,123,108,108,53,20,13,101,19,34,13,53,53,53,0,75,38,0,34,
|
||||
63,53,53,71,58,78,58,78,11,92,92,71,58,58,58,58,99,218,11,99,
|
||||
11,58,218,218,99,99,218,99,99,8,99,71,99,99,99,99,99,218,58,99,
|
||||
218,58,99,99,99,58,58,78,58,99,58,58,58,71,12,78,78,78,78,78,
|
||||
58,12,19,12,48,218,246,218,48,12,92,92,241,48,58,212,48,241,12,92,
|
||||
48,241,212,58,212,212,123,118,12,71,118,118,12,223,49,118,55,239,244,223,
|
||||
112,112,82,118,236,225,14,4,26,82,101,19,112,93,153,21,224,174,88,162,
|
||||
26,26,121,82,66,66,66,66,66,66,26,82,66,26,113,127,32,44,51,87,
|
||||
248,222,236,223,20,20,20,8,70,111,17,237,223,49,237,30,62,54,30,118,
|
||||
253,49,112,118,23,118,118,11,99,58,58,58,212,99,71,218,246,78,78,58,
|
||||
58,58,108,108,63,38,13,92,58,12,13,251,53,63,251,79,12,71,34,34,
|
||||
251,53,19,58,78,78,78,58,58,71,71,58,99,99,58,99,58,11,58,99,
|
||||
99,99,99,218,218,99,218,218,99,8,71,99,218,218,218,99,218,99,99,99,
|
||||
99,71,58,99,99,99,99,58,58,99,58,58,78,58,99,78,58,78,58,78,
|
||||
78,78,99,218,128,58,58,78,128,48,12,92,123,241,78,246,58,48,241,218,
|
||||
12,128,212,212,58,58,212,218,71,12,71,12,118,12,223,49,11,243,55,244,
|
||||
49,112,244,223,49,236,17,111,4,121,82,82,8,223,244,29,153,61,148,234,
|
||||
152,32,147,52,4,4,113,26,113,26,98,98,147,255,7,193,24,163,217,238,
|
||||
110,112,101,20,20,253,8,70,107,222,22,223,223,244,244,244,244,242,112,82,
|
||||
223,118,23,23,49,118,71,11,58,58,58,246,246,58,99,78,58,212,212,78,
|
||||
58,99,53,53,38,83,19,58,246,19,34,79,251,34,34,71,58,71,79,13,
|
||||
83,63,218,58,58,99,58,78,58,99,78,58,99,99,99,58,58,99,99,58,
|
||||
218,11,218,99,11,218,11,99,71,8,71,218,218,11,71,99,218,99,99,99,
|
||||
99,218,11,99,58,58,58,58,11,58,99,218,58,58,78,78,78,78,58,58,
|
||||
78,78,78,78,58,78,78,78,58,58,48,123,48,48,128,78,246,78,128,241,
|
||||
241,241,128,212,58,58,58,58,218,12,118,71,71,112,118,223,49,11,245,55,
|
||||
30,49,112,244,223,19,30,93,107,111,4,26,101,101,8,101,112,242,93,203,
|
||||
6,170,21,74,51,51,104,24,234,76,24,104,76,124,232,56,225,18,30,223,
|
||||
20,20,20,20,8,66,235,231,236,112,223,118,30,112,112,54,244,112,82,49,
|
||||
112,23,118,118,12,11,99,99,246,58,58,58,78,58,246,246,78,78,212,78,
|
||||
58,12,53,229,34,40,78,78,58,38,0,13,13,79,71,58,58,71,13,0,
|
||||
38,71,58,99,58,99,58,99,78,58,58,99,99,99,71,99,58,99,218,99,
|
||||
71,99,218,99,99,71,218,99,71,8,71,71,71,123,218,218,11,218,218,218,
|
||||
218,99,218,218,99,99,99,99,58,99,99,99,99,99,58,78,78,58,58,99,
|
||||
99,78,78,246,78,212,78,78,58,78,128,48,48,241,48,246,78,58,246,128,
|
||||
128,128,128,128,212,78,212,78,58,218,71,71,12,12,118,118,49,49,112,208,
|
||||
41,22,49,112,244,23,19,49,22,93,219,14,4,8,82,101,20,101,223,49,
|
||||
30,65,18,29,17,203,228,230,56,96,91,225,225,236,242,112,49,82,20,20,
|
||||
20,20,82,113,210,107,29,22,118,223,112,30,244,244,62,112,23,82,223,49,
|
||||
118,118,49,49,118,71,99,246,58,58,212,246,246,78,212,58,246,246,78,58,
|
||||
218,53,209,126,40,78,78,78,218,0,34,34,79,71,78,99,58,71,251,229,
|
||||
12,58,99,99,99,58,58,58,58,99,99,99,99,218,99,58,99,99,99,218,
|
||||
99,218,11,218,218,11,218,71,71,8,71,123,71,71,218,123,71,99,11,99,
|
||||
218,11,99,71,218,99,58,99,99,58,218,218,99,99,58,58,58,58,99,58,
|
||||
58,99,58,246,246,246,78,58,58,58,78,58,48,48,241,78,246,78,78,58,
|
||||
58,241,241,241,212,58,246,78,246,58,218,71,71,71,118,118,118,49,49,112,
|
||||
103,243,236,112,49,244,112,49,223,118,65,93,107,14,98,113,82,8,101,253,
|
||||
101,20,101,82,82,223,118,118,49,49,49,82,82,101,101,20,20,253,253,121,
|
||||
26,70,235,110,29,103,118,223,223,11,244,244,54,242,244,49,19,223,49,118,
|
||||
118,49,12,71,11,99,212,246,78,78,78,78,212,246,78,58,78,212,78,58,
|
||||
12,38,213,71,78,58,58,78,40,83,79,20,99,58,99,58,99,12,92,71,
|
||||
78,58,99,99,99,99,99,99,99,99,218,218,99,218,218,99,218,218,11,218,
|
||||
11,218,218,71,218,218,71,123,71,8,71,71,12,71,71,218,218,218,71,71,
|
||||
218,218,218,218,71,218,218,99,99,218,99,99,99,99,99,99,58,99,58,99,
|
||||
99,99,99,58,78,78,78,78,58,99,58,58,58,128,48,128,78,78,58,78,
|
||||
212,212,212,241,128,58,246,246,58,246,58,218,218,118,71,71,118,12,118,49,
|
||||
23,237,245,55,208,23,118,23,112,223,223,118,244,236,18,110,14,210,4,66,
|
||||
121,8,82,20,82,101,101,251,20,20,20,101,8,20,8,8,26,26,210,235,
|
||||
109,110,65,30,118,223,49,244,244,244,244,242,65,30,223,82,49,118,118,49,
|
||||
92,49,118,71,11,78,246,78,58,246,212,246,78,78,246,78,246,78,212,218,
|
||||
53,92,99,78,58,58,58,246,53,0,53,99,99,58,99,58,99,71,218,58,
|
||||
99,58,99,218,58,99,58,78,99,99,11,99,71,99,99,218,99,99,218,71,
|
||||
123,218,71,218,12,71,71,71,71,8,71,71,71,71,71,118,71,71,218,99,
|
||||
71,71,71,123,71,71,218,99,99,218,218,71,11,218,99,99,58,99,58,99,
|
||||
99,99,218,58,58,78,78,78,58,99,99,58,58,58,58,128,246,78,58,58,
|
||||
58,58,246,128,128,58,212,246,78,78,78,58,58,218,71,71,11,118,118,49,
|
||||
12,23,11,103,243,72,237,23,23,112,23,223,19,223,112,22,109,18,29,111,
|
||||
111,210,210,70,4,26,26,26,26,26,26,4,4,70,98,235,2,18,29,65,
|
||||
54,23,223,49,23,244,244,112,244,54,22,244,118,82,223,223,118,92,49,49,
|
||||
223,71,11,99,99,78,246,58,246,78,58,212,78,78,58,58,246,78,58,218,
|
||||
71,78,58,58,99,58,58,99,19,77,58,58,58,218,99,58,58,58,58,58,
|
||||
218,99,11,218,58,99,218,58,218,218,71,218,218,71,99,71,218,71,71,218,
|
||||
71,123,71,71,71,71,71,71,12,8,118,118,71,71,118,71,71,71,118,12,
|
||||
71,123,71,71,71,71,71,71,218,99,99,99,218,218,71,218,99,99,58,99,
|
||||
99,218,99,218,58,58,246,78,78,99,99,99,99,58,246,78,58,246,58,58,
|
||||
58,58,58,78,78,58,58,58,246,212,99,58,58,58,218,99,71,118,11,118,
|
||||
49,49,49,23,11,208,55,245,22,112,23,23,23,23,49,49,49,223,112,30,
|
||||
22,236,18,18,18,29,18,18,18,18,107,236,29,236,236,22,30,23,223,223,
|
||||
223,118,118,112,244,112,244,242,242,30,23,223,82,223,49,49,49,223,49,12,
|
||||
71,71,99,58,246,212,58,58,58,78,78,78,58,58,58,58,78,212,246,78,
|
||||
78,58,58,11,99,58,78,78,99,58,58,99,218,99,58,99,58,58,58,218,
|
||||
99,71,218,99,218,58,99,218,218,71,218,123,71,99,71,218,71,71,71,12,
|
||||
71,71,12,12,12,12,12,12,12,8,12,12,12,12,12,12,118,118,71,71,
|
||||
71,218,71,123,71,71,71,71,123,71,218,11,218,71,218,123,218,99,218,58,
|
||||
99,99,11,218,71,99,99,58,78,58,99,99,71,99,58,78,246,246,246,58,
|
||||
58,218,58,99,78,78,246,78,78,246,58,58,58,212,58,58,99,71,71,118,
|
||||
71,118,118,23,49,112,112,103,72,72,65,244,112,23,118,118,70,223,223,223,
|
||||
223,49,118,23,118,112,112,244,112,112,23,23,23,49,49,223,223,49,23,118,
|
||||
244,244,112,62,244,109,22,30,49,223,223,82,49,223,49,223,223,118,118,71,
|
||||
99,99,99,78,78,246,58,58,78,78,58,58,58,99,78,246,78,78,78,78,
|
||||
99,99,99,58,99,58,78,78,58,99,99,11,218,99,99,58,58,11,99,218,
|
||||
218,218,71,99,218,218,11,218,123,71,218,71,71,218,71,71,123,71,118,12,
|
||||
71,12,12,12,12,12,12,12,12,8,12,12,12,12,12,12,71,71,71,118,
|
||||
71,118,71,71,118,12,71,71,71,71,99,218,123,71,218,71,218,71,99,99,
|
||||
99,218,218,71,218,218,99,58,58,58,58,218,99,218,218,99,58,99,78,58,
|
||||
58,99,99,99,58,58,78,246,246,78,78,78,58,99,58,58,99,58,99,71,
|
||||
11,71,12,23,118,118,118,23,112,30,103,208,208,65,242,112,118,23,23,118,
|
||||
118,118,49,112,23,112,11,112,112,112,118,49,49,49,49,112,23,23,112,244,
|
||||
244,22,22,22,242,112,49,223,223,66,223,49,223,49,223,49,12,71,71,99,
|
||||
99,58,212,212,246,58,78,78,58,58,99,99,99,58,78,78,78,78,58,58,
|
||||
99,99,99,58,58,58,58,58,99,218,71,218,99,99,218,58,99,99,71,218,
|
||||
71,71,218,99,71,99,123,71,118,118,123,71,71,123,71,71,12,12,118,12,
|
||||
12,12,12,12,12,12,71,12,71,8,12,92,12,92,71,12,118,118,12,12,
|
||||
118,71,71,12,71,71,118,12,12,71,118,218,71,71,71,12,71,12,218,218,
|
||||
99,99,218,218,71,71,71,218,99,99,99,99,71,71,218,71,99,58,58,58,
|
||||
58,58,99,11,99,99,99,58,246,78,246,78,58,99,99,99,58,58,99,99,
|
||||
99,11,71,112,112,118,118,92,118,23,118,112,30,237,103,65,65,22,30,54,
|
||||
244,244,23,112,244,112,244,112,244,23,244,23,112,62,244,244,30,242,22,242,
|
||||
22,30,23,49,49,19,82,223,223,49,49,49,223,49,12,11,11,218,99,58,
|
||||
58,78,78,78,246,78,78,99,99,58,99,58,58,78,78,78,58,99,218,218,
|
||||
71,99,99,99,58,99,58,99,71,123,71,218,99,99,218,99,218,71,12,71,
|
||||
71,218,71,71,218,71,71,71,71,71,12,71,71,71,118,12,12,12,71,71,
|
||||
12,12,12,12,118,12,12,92,12,8,12,12,71,12,12,12,12,12,71,12,
|
||||
118,12,12,12,118,12,71,12,12,71,71,71,71,123,71,12,12,71,71,218,
|
||||
218,218,11,71,123,71,71,218,71,99,99,58,99,99,71,218,218,99,218,58,
|
||||
58,58,58,99,218,71,99,218,58,58,58,246,212,58,58,99,99,58,99,58,
|
||||
58,58,58,218,71,71,112,71,118,118,49,23,118,118,49,112,112,30,237,22,
|
||||
22,22,103,22,22,22,22,22,30,242,22,22,22,103,22,22,30,112,112,23,
|
||||
49,49,49,82,223,66,49,49,49,49,223,12,118,71,218,99,99,58,99,58,
|
||||
78,246,78,246,58,58,99,99,218,218,99,99,99,58,58,58,99,218,71,218,
|
||||
99,99,58,58,58,99,218,123,71,71,218,218,99,99,99,123,71,71,71,92,
|
||||
71,71,218,218,71,12,12,12,118,71,12,118,71,71,71,12,12,12,12,12,
|
||||
12,12,118,118,12,12,12,12,12,8,92,92,92,12,12,12,12,12,12,12,
|
||||
92,12,12,12,71,12,118,12,12,12,12,12,71,71,71,12,12,71,118,71,
|
||||
71,123,71,71,71,118,71,71,71,123,71,218,218,99,218,71,12,71,71,218,
|
||||
218,58,58,99,58,71,71,218,218,218,99,58,58,58,58,58,99,99,99,218,
|
||||
218,99,58,58,99,99,99,11,11,11,23,112,118,112,49,118,118,118,23,118,
|
||||
49,118,23,112,112,112,112,244,112,112,118,112,118,49,49,223,49,223,223,49,
|
||||
223,223,49,49,223,49,223,223,118,118,71,11,218,99,218,99,218,78,58,58,
|
||||
58,58,58,218,218,218,218,218,58,99,58,58,58,58,218,99,71,71,123,71,
|
||||
218,99,58,99,99,71,71,12,12,71,71,71,218,218,218,71,118,71,71,12,
|
||||
123,71,12,71,71,12,12,12,118,71,12,12,12,118,118,12,71,118,12,118,
|
||||
12,12,12,12,12,92,12,12,92,8,92,92,12,12,92,12,92,12,12,12,
|
||||
12,12,118,12,12,12,12,12,12,12,118,12,12,71,118,71,12,12,71,118,
|
||||
71,71,71,123,218,118,12,71,71,71,71,99,99,218,218,71,71,71,71,71,
|
||||
99,218,99,58,99,218,218,71,71,71,218,71,58,99,58,58,99,58,218,99,
|
||||
99,218,99,99,58,58,58,99,58,99,218,11,71,112,11,112,118,23,118,23,
|
||||
49,118,118,92,49,92,49,92,49,92,49,223,223,49,223,49,49,49,49,82,
|
||||
49,49,49,223,118,118,71,71,11,71,99,218,218,99,58,58,58,58,58,58,
|
||||
58,218,218,218,71,218,218,99,99,99,99,58,218,218,71,123,71,71,218,11,
|
||||
99,99,218,218,71,71,12,71,12,218,218,218,71,218,118,12,71,118,71,71,
|
||||
71,71,71,71,118,71,12,12,12,71,12,12,12,12,12,12,12,49,12,12,
|
||||
12,92,12,49,12,92,12,12,92,8,92,92,92,92,92,12,92,12,12,92,
|
||||
12,92,12,92,12,71,71,12,12,12,12,71,12,118,71,118,71,118,12,12,
|
||||
12,12,71,71,218,71,71,118,118,12,12,118,71,218,71,218,123,12,12,12,
|
||||
12,71,71,99,99,99,218,71,71,71,71,123,71,218,218,58,99,99,58,218,
|
||||
99,218,218,11,99,218,99,218,218,58,58,58,99,218,71,11,71,71,118,11,
|
||||
112,71,112,118,112,12,118,118,118,118,118,118,118,118,118,118,223,223,49,49,
|
||||
118,118,118,71,71,71,218,71,218,71,99,99,99,218,58,58,58,218,218,218,
|
||||
218,71,71,218,123,71,218,99,58,218,218,99,71,118,12,71,71,71,218,218,
|
||||
218,99,71,118,12,12,12,71,71,123,71,71,71,12,118,12,92,71,118,71,
|
||||
12,12,71,12,12,92,12,12,12,118,12,12,12,12,12,92,12,12,12,92,
|
||||
71,92,12,92,92,92,92,92,12,8,92,92,92,92,92,92,92,92,92,12,
|
||||
92,12,92,12,92,92,12,118,92,12,12,92,92,12,12,12,12,12,12,12,
|
||||
12,12,71,118,12,118,71,71,12,12,12,12,118,71,218,71,218,71,118,12,
|
||||
12,71,12,71,218,71,99,218,123,71,71,12,71,118,71,71,99,218,218,99,
|
||||
218,99,218,218,218,71,123,71,218,218,218,218,99,99,99,58,99,99,99,218,
|
||||
99,71,71,71,11,71,11,11,11,11,11,11,11,11,71,118,12,118,218,218,
|
||||
71,218,71,71,218,71,99,71,99,99,99,58,218,99,218,218,71,71,71,71,
|
||||
71,71,123,71,11,99,99,99,218,218,71,71,12,12,12,71,123,218,71,218,
|
||||
71,118,71,12,118,12,12,71,71,218,118,12,12,12,92,12,71,118,71,71,
|
||||
12,71,92,12,92,12,12,12,118,12,12,92,92,12,92,12,92,92,92,92,
|
||||
92,92,92,92,12,92,92,92,92,8,92,92,92,12,92,92,92,92,92,92,
|
||||
92,92,92,12,92,92,12,12,92,92,92,12,92,92,12,12,118,12,12,92,
|
||||
92,12,12,12,71,71,71,118,12,118,12,12,12,71,12,71,71,71,71,12,
|
||||
12,12,118,12,12,118,218,71,71,71,12,71,71,71,12,12,71,71,71,11,
|
||||
218,99,218,218,218,218,71,71,71,71,71,71,71,71,218,218,218,218,99,218,
|
||||
218,218,99,218,99,218,218,218,218,218,218,218,218,99,218,11,218,71,71,71,
|
||||
71,123,71,123,71,218,99,218,218,11,218,99,71,71,71,71,71,71,71,92,
|
||||
71,71,71,123,71,218,71,71,71,118,12,12,12,12,71,71,71,218,71,71,
|
||||
12,12,12,12,12,12,12,71,71,71,12,12,12,12,12,12,12,12,118,12,
|
||||
12,92,92,92,12,92,12,71,12,92,92,12,92,92,92,92,92,12,92,92,
|
||||
92,92,92,92,92,92,92,92,92,8,92,19,92,92,92,92,92,223,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,12,118,12,12,
|
||||
12,92,92,12,92,12,12,12,71,12,49,12,92,92,12,12,71,12,12,12,
|
||||
12,71,12,12,12,12,71,12,71,71,218,218,71,118,12,12,12,71,12,12,
|
||||
71,123,71,71,99,71,71,123,71,123,71,123,71,71,71,71,71,71,71,71,
|
||||
71,218,218,218,71,71,218,71,218,71,218,71,71,123,71,123,71,123,71,123,
|
||||
218,71,218,218,218,218,71,71,71,71,71,12,12,12,12,12,12,12,71,71,
|
||||
71,123,218,218,71,71,12,12,12,71,12,12,12,12,71,71,71,12,118,12,
|
||||
12,92,12,12,12,12,12,12,71,12,92,12,92,12,12,118,12,12,12,92,
|
||||
92,92,92,92,92,12,92,92,12,92,92,92,92,19,12,92,92,92,92,92,
|
||||
12,92,92,92,92,92,92,92,92,8,19,108,19,108,12,19,92,92,92,92,
|
||||
92,92,92,92,92,19,92,92,92,92,92,92,92,92,92,92,92,92,12,92,
|
||||
92,92,92,92,92,92,12,12,12,12,71,12,92,92,92,92,12,92,118,12,
|
||||
12,12,12,12,92,12,12,12,71,12,71,71,71,12,12,12,12,12,12,92,
|
||||
112,118,71,12,71,71,71,218,71,71,71,71,71,71,12,12,12,12,12,12,
|
||||
12,118,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,
|
||||
71,71,71,71,71,71,71,71,118,71,12,71,12,12,12,12,12,71,71,123,
|
||||
71,71,71,92,12,12,12,12,92,92,71,12,12,12,12,71,12,12,92,12,
|
||||
92,92,12,118,12,12,118,12,12,92,92,92,92,12,12,12,12,92,92,92,
|
||||
92,12,92,12,92,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,92,12,19,19,108,92,8,92,92,19,92,108,92,19,92,92,92,
|
||||
92,108,92,92,92,12,92,92,12,92,92,92,92,92,92,92,92,92,92,12,
|
||||
12,92,92,92,92,223,12,92,12,12,12,12,12,92,92,12,92,12,12,12,
|
||||
12,12,12,12,49,12,92,92,92,92,12,12,71,12,12,12,12,12,12,12,
|
||||
92,92,118,92,12,12,118,12,12,12,12,12,12,71,12,12,12,12,12,12,
|
||||
12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
|
||||
12,12,118,118,12,118,12,12,12,12,12,12,12,12,12,12,12,12,71,12,
|
||||
12,12,71,92,12,92,92,49,12,12,12,12,118,12,12,118,92,12,92,92,
|
||||
12,12,12,12,123,12,92,92,92,92,92,92,12,92,12,92,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,12,92,92,92,19,92,92,108,
|
||||
92,19,92,108,108,92,108,92,108,8,19,108,19,92,19,108,108,108,92,19,
|
||||
92,92,19,92,108,108,92,108,108,92,92,92,92,92,92,19,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,92,92,92,92,
|
||||
92,12,12,12,12,12,12,92,92,92,92,92,92,12,12,12,12,12,118,12,
|
||||
12,12,12,92,12,12,12,12,71,12,12,12,12,71,71,12,12,71,118,118,
|
||||
12,12,12,12,12,118,12,12,12,92,12,12,12,12,12,71,12,12,118,12,
|
||||
12,71,12,12,12,12,12,92,118,118,12,12,12,12,71,12,12,12,49,12,
|
||||
92,12,92,92,92,12,92,12,12,12,12,12,92,92,92,92,92,92,92,92,
|
||||
12,12,71,92,92,92,12,92,223,92,92,92,12,92,92,92,92,92,12,19,
|
||||
92,92,92,92,92,92,108,92,108,19,92,108,108,108,92,92,19,108,92,108,
|
||||
19,92,19,92,108,92,108,19,19,8,19,108,19,108,108,19,92,19,108,19,
|
||||
19,108,108,19,19,92,108,92,92,108,19,12,108,108,92,19,108,108,92,19,
|
||||
92,92,92,92,92,92,108,19,92,92,92,92,12,92,92,92,92,92,92,92,
|
||||
92,92,92,12,12,118,123,92,12,12,92,92,92,92,92,92,12,12,12,12,
|
||||
12,92,12,12,92,12,92,92,92,92,92,92,12,12,12,12,12,12,12,71,
|
||||
71,12,12,12,12,12,12,12,71,12,12,12,12,12,12,92,12,12,92,12,
|
||||
92,12,12,49,12,92,12,12,12,12,12,71,12,12,12,12,92,12,92,12,
|
||||
92,92,92,92,92,12,12,12,12,92,12,12,92,92,92,92,92,92,12,12,
|
||||
12,92,92,92,92,19,108,92,92,92,92,92,92,92,92,19,92,108,108,92,
|
||||
92,92,92,19,108,92,19,108,92,108,108,92,19,92,108,19,108,92,108,92,
|
||||
19,108,108,92,108,108,19,92,108,8,19,19,19,19,19,108,19,19,108,92,
|
||||
19,19,108,92,19,19,108,19,108,92,108,19,92,19,92,92,92,19,92,92,
|
||||
92,92,92,92,92,92,19,108,92,19,19,92,92,92,92,92,92,92,223,92,
|
||||
223,92,92,92,92,92,92,92,92,92,92,92,92,223,92,92,92,12,92,12,
|
||||
12,12,12,12,92,12,12,92,12,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,12,92,49,92,12,92,92,12,12,92,12,92,12,92,12,12,92,12,
|
||||
12,12,12,12,12,12,12,92,92,92,12,92,92,92,92,92,92,92,92,92,
|
||||
92,92,12,12,12,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,12,19,92,92,108,12,92,92,92,12,19,92,92,108,92,19,19,92,
|
||||
92,92,92,92,108,19,92,19,19,92,92,108,108,92,108,92,19,19,19,108,
|
||||
19,19,19,19,19,19,108,19,19,8,19,53,19,53,19,53,19,53,19,108,
|
||||
19,108,19,108,108,108,19,108,19,108,19,108,108,108,108,19,108,19,108,19,
|
||||
19,92,108,19,19,12,108,92,108,92,108,19,108,92,92,92,92,92,92,19,
|
||||
92,19,108,92,19,92,92,92,92,92,92,92,92,92,92,92,108,108,19,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,92,12,92,92,92,12,92,19,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,108,19,92,92,223,92,92,92,92,92,92,
|
||||
19,108,108,108,108,19,92,92,92,92,108,108,108,108,108,92,108,92,108,19,
|
||||
92,19,108,108,19,108,108,108,108,108,19,19,19,19,19,19,108,108,53,19,
|
||||
108,19,108,53,19,53,19,53,19,8,19,19,19,19,19,19,19,19,19,19,
|
||||
19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,108,19,108,19,
|
||||
19,19,19,19,108,19,108,19,108,19,108,19,19,19,19,108,19,92,92,92,
|
||||
19,19,108,19,108,19,19,92,92,92,92,92,92,92,92,19,19,108,19,108,
|
||||
19,92,19,92,92,92,92,92,92,92,92,92,92,92,92,19,92,92,92,92,
|
||||
92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
|
||||
92,92,92,19,19,19,92,19,19,92,19,19,108,92,92,92,19,92,92,92,
|
||||
92,92,92,92,92,19,19,19,19,108,19,108,92,92,92,92,92,92,19,19,
|
||||
92,19,223,19,108,19,108,92,19,19,19,19,19,19,108,19,108,19,108,19,
|
||||
19,19,19,19,19,19,19,19,19,108,19,108,19,108,19,19,19,19,19,19,
|
||||
19,19,19,19,19,19,19,19,19,8};
|
File diff suppressed because it is too large
Load Diff
|
@ -1,6 +0,0 @@
|
|||
Makefile.in
|
||||
Makefile
|
||||
.deps
|
||||
_libs
|
||||
.libs
|
||||
twist
|
|
@ -1,43 +0,0 @@
|
|||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
pluginlibdir = $(gimpplugindir)/plug-ins
|
||||
|
||||
pluginlib_PROGRAMS = twist
|
||||
|
||||
twist_SOURCES = \
|
||||
twist.c
|
||||
|
||||
INCLUDES = \
|
||||
$(X_CFLAGS) \
|
||||
-I$(top_srcdir) \
|
||||
-I$(includedir)
|
||||
|
||||
LDADD = \
|
||||
$(top_builddir)/libgimp/libgimpui.la \
|
||||
$(top_builddir)/libgimp/libgimp.la \
|
||||
$(X_LIBS) \
|
||||
-lc
|
||||
|
||||
DEPS = \
|
||||
$(top_builddir)/libgimp/libgimpui.la \
|
||||
$(top_builddir)/libgimp/libgimp.la
|
||||
|
||||
twist_DEPENDENCIES = $(DEPS)
|
||||
|
||||
.PHONY: files
|
||||
|
||||
files:
|
||||
@files=`ls $(DISTFILES) 2> /dev/null`; for p in $$files; do \
|
||||
echo $$p; \
|
||||
done
|
||||
@for subdir in $(SUBDIRS); do \
|
||||
files=`cd $$subdir; $(MAKE) files | grep -v "make\[[1-9]\]"`; \
|
||||
for file in $$files; do \
|
||||
echo $$subdir/$$file; \
|
||||
done; \
|
||||
done
|
||||
|
||||
|
||||
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue