all repos — openbox @ 1124d1036984f920dcd5b2caec9ff8fe2d788b8a

openbox fork - make it a bit more like ryudo

Merge branch 'backport' into work

Diffing against the old work branch where most of the changes
in backport were cherry-picked from indicates this should be
alright. (0de9097017d4d1991388a35e380a57dc1135b431)
Mikael Magnusson mikachu@comhem.se
commit

1124d1036984f920dcd5b2caec9ff8fe2d788b8a

parent

bbf0eed8d146602e81e64e9bc6d1c451c260b52f

M HACKINGHACKING

@@ -27,8 +27,7 @@ * functions should have the opening and closing braces on their own

lines * most other constructs should have braces on the same line as the statement + * else appears on a new line, just like an if * when in doubt look at the rest of the source * vim users can use "set expandtab tabstop=4 shiftwidth=4 softtabstop=4" for some of this - -
M data/autostart.shdata/autostart.sh

@@ -22,7 +22,9 @@ eval `dbus-launch --sh-syntax --exit-with-session`

fi # Make GTK apps look and behave how they were set up in the gnome config tools -if which gnome-settings-daemon >/dev/null; then +if which /usr/libexec/gnome-settings-daemon >/dev/null; then + /usr/libexec/gnome-settings-daemon & +elif which gnome-settings-daemon >/dev/null; then gnome-settings-daemon & fi

@@ -34,6 +36,6 @@

# Run XDG autostart things. By default don't run anything desktop-specific # See xdg-autostart --help more info DESKTOP_ENV="" -if which xdg-autostart; then +if which xdg-autostart >/dev/null; then xdg-autostart $DESKTOP_ENV fi
M data/rc.xmldata/rc.xml

@@ -652,7 +652,9 @@ # own rules, but without the comments of course.

<application name="first element of window's WM_CLASS property (see xprop)" class="second element of window's WM_CLASS property (see xprop)" - role="the window's WM_WINDOW_ROLE property (see xprop)"> + role="the window's WM_WINDOW_ROLE property (see xprop)" + type="the window's _NET_WM_WINDOW_TYPE (if unspecified, then + it is dialog for child windows)"> # the name or the class can be set, or both. this is used to match # windows when they appear. role can optionally be set as well, to # further restrict your matches.

@@ -660,6 +662,9 @@

# the name, class, and role use simple wildcard matching such as those # used by a shell. you can use * to match any characters and ? to match # any single character. + + # the type is one of: normal, dialog, splash, utility, menu, toolbar, dock, + # or desktop # when multiple rules match a window, they will all be applied, in the # order that they appear in this list
M data/rc.xsddata/rc.xsd

@@ -189,10 +189,11 @@ <xsd:element minOccurs="0" name="skip_pager" type="ob:bool"/>

<xsd:element minOccurs="0" name="skip_taskbar" type="ob:bool"/> <xsd:element minOccurs="0" name="fullscreen" type="ob:bool"/> <xsd:element minOccurs="0" name="maximized" type="ob:maximization"/> + <xsd:attribute name="role" type="xsd:string"/> + <xsd:attribute name="type" type="ob:clienttype"/> <!-- at least one of these must be present --> <xsd:attribute name="name" type="xsd:string"/> <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="role" type="xsd:string"/> </xsd:complexType> <xsd:complexType name="applications"> <xsd:element minOccurs="0" maxOccurs="unbounded" name="application" type="ob:application"/>

@@ -250,6 +251,18 @@ <xsd:enumeration value="Undecorate"/>

<xsd:enumeration value="Unfocus"/> <xsd:enumeration value="Unmaximize"/> <xsd:enumeration value="Unshade"/> + </xsd:restriction> + </xsd:simpleType> + <xsd:simpleType name="clienttype"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="desktop"/> + <xsd:enumeration value="dock"/> + <xsd:enumeration value="toolbar"/> + <xsd:enumeration value="menu"/> + <xsd:enumeration value="splash"/> + <xsd:enumeration value="utility"/> + <xsd:enumeration value="dialog"/> + <xsd:enumeration value="normal"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="bool">
M m4/openbox.m4m4/openbox.m4

@@ -10,14 +10,23 @@

AC_ARG_ENABLE([strict-ansi], AC_HELP_STRING([--enable-strict-ansi],[Enable strict ANSI compliance build [[default=no]]]), [STRICT=$enableval], [STRICT="no"]) - if test "$GCC" = "yes" && test "$STRICT" = "yes"; then - CFLAGS="$CFLAGS -ansi -pedantic -D_XOPEN_SOURCE" - fi AC_ARG_ENABLE([debug], AC_HELP_STRING([--enable-debug],[build a debug version [[default=no]]]), [DEBUG=$enableval], [DEBUG="no"]) + AC_ARG_ENABLE([gprof], + AC_HELP_STRING([--enable-gprof],[Enable gprof profiling output [[default=no]]]), + [PROF=$enableval], [PROF="no"]) + + AC_ARG_ENABLE([gprof-libc], + AC_HELP_STRING([--enable-gprof-libc],[Link against libc with profiling support [[default=no]]]), + [PROFLC=$enableval], [PROFLC="no"]) + + if test "$PROFLC" = "yes"; then + PROF="yes" # always enable profiling then + fi + TEST="" test "${PACKAGE_VERSION%*alpha*}" != "$PACKAGE_VERSION" && TEST="yes" test "${PACKAGE_VERSION%*beta*}" != "$PACKAGE_VERSION" && TEST="yes"

@@ -52,6 +61,7 @@ AC_REQUIRE([AC_PROG_CPP])

AC_REQUIRE([AC_PROG_CC]) FLAGS="" + L="" if test "$DEBUG" = "yes"; then FLAGS="-DDEBUG"

@@ -73,11 +83,18 @@ fi

if test "$STRICT" = "yes"; then FLAGS="$FLAGS -ansi -pedantic -D_XOPEN_SOURCE" fi + if test "$PROF" = "yes"; then + FLAGS="$FLAGS -pg -fno-inline" + fi + if test "$PROFLC" = "yes"; then + L="$L -lc_p -lm_p" + fi FLAGS="$FLAGS -fno-strict-aliasing" fi AC_MSG_CHECKING([for compiler specific flags]) AC_MSG_RESULT([$FLAGS]) CFLAGS="$CFLAGS $FLAGS" + LIBS="$LIBS $L" ]) AC_DEFUN([OB_NLS],
M openbox/actions.copenbox/actions.c

@@ -345,8 +345,14 @@ /* usually this is sorta redundant, but with a press action

that moves windows our from under the cursor, the enter event will come as a GrabNotify which is ignored, so this makes a fake enter event + + don't do this if there is a grab on the pointer. enter events + are ignored during a grab, so don't force fake ones when they + should be ignored */ - if ((c = client_under_pointer()) && c != data->client) { + if ((c = client_under_pointer()) && c != data->client && + !grab_on_pointer()) + { ob_debug_type(OB_DEBUG_FOCUS, "Generating fake enter because we did a " "mouse-event action");
M openbox/client.copenbox/client.c

@@ -779,12 +779,14 @@ if (app->name &&

!g_pattern_match(app->name, strlen(self->name), self->name, NULL)) match = FALSE; else if (app->class && - !g_pattern_match(app->class, - strlen(self->class), self->class, NULL)) + !g_pattern_match(app->class, + strlen(self->class), self->class, NULL)) match = FALSE; else if (app->role && !g_pattern_match(app->role, strlen(self->role), self->role, NULL)) + match = FALSE; + else if ((signed)app->type >= 0 && app->type != self->type) match = FALSE; if (match) {
M openbox/config.copenbox/config.c

@@ -100,6 +100,7 @@

ObAppSettings* config_create_app_settings(void) { ObAppSettings *settings = g_new0(ObAppSettings, 1); + settings->type = -1; settings->decor = -1; settings->shade = -1; settings->monitor = -1;

@@ -123,6 +124,7 @@ {

g_assert(src != NULL); g_assert(dst != NULL); + copy_if(type, -1); copy_if(decor, -1); copy_if(shade, -1); copy_if(focus, -1);

@@ -190,15 +192,16 @@ */

static void parse_per_app_settings(xmlNodePtr node, gpointer d) { xmlNodePtr app = obt_parse_find_node(node->children, "application"); - gchar *name = NULL, *class = NULL, *role = NULL; - gboolean name_set, class_set; + gchar *name = NULL, *class = NULL, *role = NULL, *type = NULL; + gboolean name_set, class_set, type_set; gboolean x_pos_given; while (app) { - name_set = class_set = x_pos_given = FALSE; + name_set = class_set = type_set = x_pos_given = FALSE; class_set = obt_parse_attr_string(app, "class", &class); name_set = obt_parse_attr_string(app, "name", &name); + type_set = obt_parse_attr_string(app, "type", &type); if (class_set || name_set) { xmlNodePtr n, c; ObAppSettings *settings = config_create_app_settings();;

@@ -208,6 +211,25 @@ settings->name = g_pattern_spec_new(name);

if (class_set) settings->class = g_pattern_spec_new(class); + + if (type_set) { + if (!g_ascii_strcasecmp(type, "normal")) + settings->type = OB_CLIENT_TYPE_NORMAL; + else if (!g_ascii_strcasecmp(type, "dialog")) + settings->type = OB_CLIENT_TYPE_DIALOG; + else if (!g_ascii_strcasecmp(type, "splash")) + settings->type = OB_CLIENT_TYPE_SPLASH; + else if (!g_ascii_strcasecmp(type, "utility")) + settings->type = OB_CLIENT_TYPE_UTILITY; + else if (!g_ascii_strcasecmp(type, "menu")) + settings->type = OB_CLIENT_TYPE_MENU; + else if (!g_ascii_strcasecmp(type, "toolbar")) + settings->type = OB_CLIENT_TYPE_TOOLBAR; + else if (!g_ascii_strcasecmp(type, "dock")) + settings->type = OB_CLIENT_TYPE_DOCK; + else if (!g_ascii_strcasecmp(type, "desktop")) + settings->type = OB_CLIENT_TYPE_DESKTOP; + } if (obt_parse_attr_string(app, "role", &role)) settings->role = g_pattern_spec_new(role);

@@ -662,6 +684,11 @@ &config_resize_popup_fixed.x);

if ((n2 = obt_parse_find_node(n->children, "y"))) config_parse_gravity_coord(n2, &config_resize_popup_fixed.y); + + config_resize_popup_fixed.x.pos = + MAX(config_resize_popup_fixed.x.pos, 0); + config_resize_popup_fixed.y.pos = + MAX(config_resize_popup_fixed.y.pos, 0); } } }
M openbox/config.hopenbox/config.h

@@ -23,6 +23,7 @@

#include "misc.h" #include "stacking.h" #include "place.h" +#include "client.h" #include "geom.h" #include "moveresize.h" #include "render/render.h"

@@ -37,6 +38,7 @@ {

GPatternSpec *class; GPatternSpec *name; GPatternSpec *role; + ObClientType type; GravityPoint position; gboolean pos_given;
M openbox/event.copenbox/event.c

@@ -1369,7 +1369,7 @@ } else

ob_debug_type(OB_DEBUG_APP_BUGS, "_NET_ACTIVE_WINDOW message for window %s is " "missing source indication"); - client_activate(client, FALSE, TRUE, TRUE, + client_activate(client, TRUE, TRUE, TRUE, (e->xclient.data.l[0] == 0 || e->xclient.data.l[0] == 2)); } else if (msgtype == OBT_PROP_ATOM(NET_WM_MOVERESIZE)) {
M openbox/geom.hopenbox/geom.h

@@ -23,7 +23,7 @@

#include <glib.h> typedef struct _GravityCoord { - int pos; + gint pos; gboolean center; gboolean opposite; } GravityCoord;
M openbox/menuframe.copenbox/menuframe.c

@@ -254,23 +254,24 @@ }

static void menu_frame_place_submenu(ObMenuFrame *self, gint *x, gint *y) { - gint overlap; + gint overlapx, overlapy; gint bwidth; - overlap = ob_rr_theme->menu_overlap; + overlapx = ob_rr_theme->menu_overlap_x; + overlapy = ob_rr_theme->menu_overlap_y; bwidth = ob_rr_theme->mbwidth; if (self->direction_right) *x = self->parent->area.x + self->parent->area.width - - overlap - bwidth; + overlapx - bwidth; else - *x = self->parent->area.x - self->area.width + overlap + bwidth; + *x = self->parent->area.x - self->area.width + overlapx + bwidth; *y = self->parent->area.y + self->parent_entry->area.y; if (config_menu_middle) *y -= (self->area.height - (bwidth * 2) - ITEM_HEIGHT) / 2; else - *y += overlap; + *y += overlapy; } void menu_frame_move_on_screen(ObMenuFrame *self, gint x, gint y,
M openbox/mouse.copenbox/mouse.c

@@ -45,7 +45,7 @@ co == OB_FRAME_CONTEXT_CLIENT)

/* Array of GSList*s of ObMouseBinding*s. */ static GSList *bound_contexts[OB_FRAME_NUM_CONTEXTS]; -/* TRUE when we have a grab on the pointer and need to reply the pointer event +/* TRUE when we have a grab on the pointer and need to replay the pointer event to send it to other applications */ static gboolean replay_pointer_needed;
M po/nl.popo/nl.po

@@ -3,14 +3,15 @@ # Copyright (C) 2007 Mark Pustjens

# This file is distributed under the same license as the openbox package. # Mark Pustjens <pustjens@dds.nl>, 2007. # Jochem Kossen <jkossen@xs4all.nl>, 2007. +# Marvin Vek, 2008 # msgid "" msgstr "" -"Project-Id-Version: Openbox 3.4.3\n" +"Project-Id-Version: Openbox 3.4.6.1\n" "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n" "POT-Creation-Date: 2008-02-02 11:51-0500\n" "PO-Revision-Date: 2007-07-12 13:01+0200\n" -"Last-Translator: Jochem Kossen <jkossen@xs4all.nl>\n" +"Last-Translator: Marvin Vek\n" "Language-Team: Dutch <nl@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n"

@@ -33,11 +34,11 @@ msgstr "Uitvoeren van '%s' mislukt: %s"

#: openbox/client.c:1988 openbox/client.c:2020 msgid "Killing..." -msgstr "" +msgstr "Termineren..." #: openbox/client.c:1990 openbox/client.c:2022 msgid "Not Responding" -msgstr "" +msgstr "Reageert Niet" #: openbox/client_list_combined_menu.c:91 openbox/client_list_menu.c:94 msgid "Go there..."

@@ -232,7 +233,7 @@ msgstr " --replace Vervang de huidig draaiende window manager\n"

#: openbox/openbox.c:502 msgid " --config-file FILE Specify the path to the config file to use\n" -msgstr "" +msgstr " --config-file FILE Specificeer het pad naar het te gebruiken configuratiebestand\n" #: openbox/openbox.c:503 msgid " --sm-disable Disable connection to the session manager\n"

@@ -256,7 +257,7 @@ msgstr " --restart Herstart Openbox\n"

#: openbox/openbox.c:507 msgid " --exit Exit Openbox\n" -msgstr "" +msgstr " --exit Openbox afsluiten\n" #: openbox/openbox.c:508 msgid ""

@@ -293,7 +294,7 @@ "Gelieve bugs te melden bij %s\n"

#: openbox/openbox.c:583 msgid "--config-file requires an argument\n" -msgstr "" +msgstr "--config-file vereist een argument\n" #: openbox/openbox.c:626 #, c-format

@@ -321,6 +322,8 @@ msgid ""

"Openbox is configured for %d desktops, but the current session has %d. " "Overriding the Openbox configuration." msgstr "" +"Openbox is geconfigureerd voor %d bureaubladen, maar de huidige sessie heeft %d. " +"Overnemen van de Openbox configuratie." #: openbox/screen.c:1169 #, c-format
M render/font.crender/font.c

@@ -285,9 +285,20 @@ break;

} if (t->shadow_offset_x || t->shadow_offset_y) { - c.color.red = t->shadow_color->r | t->shadow_color->r << 8; - c.color.green = t->shadow_color->g | t->shadow_color->g << 8; - c.color.blue = t->shadow_color->b | t->shadow_color->b << 8; + /* From nvidia's readme (chapter 23): + + When rendering to a 32-bit window, keep in mind that the X RENDER + extension, used by most composite managers, expects "premultiplied + alpha" colors. This means that if your color has components (r,g,b) + and alpha value a, then you must render (a*r, a*g, a*b, a) into the + target window. + */ + c.color.red = (t->shadow_color->r | t->shadow_color->r << 8) * + t->shadow_alpha / 255; + c.color.green = (t->shadow_color->g | t->shadow_color->g << 8) * + t->shadow_alpha / 255; + c.color.blue = (t->shadow_color->b | t->shadow_color->b << 8) * + t->shadow_alpha / 255; c.color.alpha = 0xffff * t->shadow_alpha / 255; c.pixel = t->shadow_color->pixel;
M render/gradient.crender/gradient.c

@@ -197,6 +197,74 @@ g_assert(!l->surface.bevel_dark);

l->surface.bevel_dark = RrColorNew(l->inst, r, g, b); } +/*! Repeat the first pixel over the entire block of memory + @param start The block of memory. start[0] will be copied + to the rest of the block. + @param w The width of the block of memory (including the already-set first + element +*/ +static inline void repeat_pixel(RrPixel32 *start, gint w) +{ + gint x; + RrPixel32 *dest; + + dest = start + 1; + + /* for really small things, just copy ourselves */ + if (w < 8) { + for (x = w-1; x > 0; --x) + *(dest++) = *start; + } + + /* for >= 8, then use O(log n) memcpy's... */ + else { + gchar *cdest; + gint lenbytes; + + /* copy the first 3 * 32 bits (3 words) ourselves - then we have + 3 + the original 1 = 4 words to make copies of at a time + + this is faster than doing memcpy for 1 or 2 words at a time + */ + for (x = 3; x > 0; --x) + *(dest++) = *start; + + /* cdest is a pointer to the pixel data that is typed char* so that + adding 1 to its position moves it only one byte + + lenbytes is the amount of bytes that we will be copying each + iteration. this doubles each time through the loop. + + x is the number of bytes left to copy into. lenbytes will alwaysa + be bounded by x + + this loop will run O(log n) times (n is the number of bytes we + need to copy into), since the size of the copy is doubled each + iteration. it seems that gcc does some nice optimizations to make + this memcpy very fast on hardware with support for vector operations + such as mmx or see. here is an idea of the kind of speed up we are + getting by doing this (splitvertical3 switches from doing + "*(data++) = color" n times to doing this memcpy thing log n times: + + % cumulative self self total + time seconds seconds calls ms/call ms/call name + 49.44 0.88 0.88 1063 0.83 0.83 splitvertical1 + 47.19 1.72 0.84 1063 0.79 0.79 splitvertical2 + 2.81 1.77 0.05 1063 0.05 0.05 splitvertical3 + */ + cdest = (gchar*)dest; + lenbytes = 4 * sizeof(RrPixel32); + for (x = (w - 4) * sizeof(RrPixel32); x > 0;) { + memcpy(cdest, start, lenbytes); + x -= lenbytes; + cdest += lenbytes; + lenbytes <<= 1; + if (lenbytes > x) + lenbytes = x; + } + } +} + static void gradient_parentrelative(RrAppearance *a, gint w, gint h) { RrPixel32 *source, *dest;

@@ -423,10 +491,9 @@ }

static void gradient_splitvertical(RrAppearance *a, gint w, gint h) { - gint x, y1, y2, y3; + gint y1, y2, y3; RrSurface *sf = &a->surface; - RrPixel32 *data = sf->pixel_data; - RrPixel32 current; + RrPixel32 *data; gint y1sz, y2sz, y3sz; VARS(y1);

@@ -455,39 +522,48 @@ NEXT(y2); /* skip the first one, its the same as the last of y1 */

} SETUP(y3, sf->secondary, sf->split_secondary, y3sz); - for (y1 = y1sz; y1 > 0; --y1) { - current = COLOR(y1); - for (x = w - 1; x >= 0; --x) - *(data++) = current; + /* find the color for the first pixel of each row first */ + data = sf->pixel_data; + for (y1 = y1sz-1; y1 > 0; --y1) { + *data = COLOR(y1); + data += w; NEXT(y1); } - - for (y2 = y2sz; y2 > 0; --y2) { - current = COLOR(y2); - for (x = w - 1; x >= 0; --x) - *(data++) = current; - + *data = COLOR(y1); + data += w; + for (y2 = y2sz-1; y2 > 0; --y2) { + *data = COLOR(y2); + data += w; NEXT(y2); } - - for (y3 = y3sz; y3 > 0; --y3) { - current = COLOR(y3); - for (x = w - 1; x >= 0; --x) - *(data++) = current; - + *data = COLOR(y2); + data += w; + for (y3 = y3sz-1; y3 > 0; --y3) { + *data = COLOR(y3); + data += w; NEXT(y3); } + *data = COLOR(y3); + + /* copy the first pixels into the whole rows */ + data = sf->pixel_data; + for (y1 = h; y1 > 0; --y1) { + repeat_pixel(data, w); + data += w; + } } static void gradient_horizontal(RrSurface *sf, gint w, gint h) { - gint x, y; + gint x, y, cpbytes; RrPixel32 *data = sf->pixel_data, *datav; + gchar *datac; VARS(x); SETUP(x, sf->primary, sf->secondary, w); + /* set the color values for the first row */ datav = data; for (x = w - 1; x > 0; --x) { /* 0 -> w - 1 */ *datav = COLOR(x);

@@ -497,21 +573,31 @@ }

*datav = COLOR(x); ++datav; - for (y = h - 1; y > 0; --y) { /* 1 -> h */ - memcpy(datav, data, w * sizeof(RrPixel32)); - datav += w; + /* copy the first row to the rest in O(logn) copies */ + datac = (gchar*)datav; + cpbytes = 1 * w * sizeof(RrPixel32); + for (y = (h - 1) * w * sizeof(RrPixel32); y > 0;) { + memcpy(datac, data, cpbytes); + y -= cpbytes; + datac += cpbytes; + cpbytes <<= 1; + if (cpbytes > y) + cpbytes = y; } } static void gradient_mirrorhorizontal(RrSurface *sf, gint w, gint h) { - gint x, y, half1, half2; + gint x, y, half1, half2, cpbytes; RrPixel32 *data = sf->pixel_data, *datav; + gchar *datac; VARS(x); half1 = (w + 1) / 2; half2 = w / 2; + + /* set the color values for the first row */ SETUP(x, sf->primary, sf->secondary, half1); datav = data;

@@ -534,31 +620,43 @@ *datav = COLOR(x);

++datav; } - for (y = h - 1; y > 0; --y) { /* 1 -> h */ - memcpy(datav, data, w * sizeof(RrPixel32)); - datav += w; + /* copy the first row to the rest in O(logn) copies */ + datac = (gchar*)datav; + cpbytes = 1 * w * sizeof(RrPixel32); + for (y = (h - 1) * w * sizeof(RrPixel32); y > 0;) { + memcpy(datac, data, cpbytes); + y -= cpbytes; + datac += cpbytes; + cpbytes <<= 1; + if (cpbytes > y) + cpbytes = y; } } static void gradient_vertical(RrSurface *sf, gint w, gint h) { - gint x, y; - RrPixel32 *data = sf->pixel_data; - RrPixel32 current; + gint y; + RrPixel32 *data; VARS(y); SETUP(y, sf->primary, sf->secondary, h); + /* find the color for the first pixel of each row first */ + data = sf->pixel_data; + for (y = h - 1; y > 0; --y) { /* 0 -> h-1 */ - current = COLOR(y); - for (x = w - 1; x >= 0; --x) /* 0 -> w */ - *(data++) = current; + *data = COLOR(y); + data += w; + NEXT(y); + } + *data = COLOR(y); - NEXT(y); + /* copy the first pixels into the whole rows */ + data = sf->pixel_data; + for (y = h; y > 0; --y) { + repeat_pixel(data, w); + data += w; } - current = COLOR(y); - for (x = w - 1; x >= 0; --x) /* 0 -> w */ - *(data++) = current; }

@@ -656,14 +754,13 @@ }

*data = COLOR(x); } -static void gradient_pyramid(RrSurface *sf, gint inw, gint inh) +static void gradient_pyramid(RrSurface *sf, gint w, gint h) { - gint x, y, w = (inw >> 1) + 1, h = (inh >> 1) + 1; - RrPixel32 *data = sf->pixel_data; - RrPixel32 *end = data + inw*inh - 1; - RrPixel32 current; + RrPixel32 *ldata, *rdata; + RrPixel32 *cp; RrColor left, right; RrColor extracorner; + gint x, y, halfw, halfh, midx, midy; VARS(lefty); VARS(righty);

@@ -673,54 +770,64 @@ extracorner.r = (sf->primary->r + sf->secondary->r) / 2;

extracorner.g = (sf->primary->g + sf->secondary->g) / 2; extracorner.b = (sf->primary->b + sf->secondary->b) / 2; - SETUP(lefty, (&extracorner), sf->secondary, h); - SETUP(righty, sf->primary, (&extracorner), h); + halfw = w >> 1; + halfh = h >> 1; + midx = w - halfw - halfw; /* 0 or 1, depending if w is even or odd */ + midy = h - halfh - halfh; /* 0 or 1, depending if h is even or odd */ + + SETUP(lefty, sf->primary, (&extracorner), halfh + midy); + SETUP(righty, (&extracorner), sf->secondary, halfh + midy); + + /* draw the top half + + it is faster to draw both top quarters together than to draw one and + then copy it over to the other side. + */ + + ldata = sf->pixel_data; + rdata = ldata + w - 1; + for (y = halfh + midy; y > 0; --y) { /* 0 -> (h+1)/2 */ + RrPixel32 c; - for (y = h - 1; y > 0; --y) { /* 0 -> h-1 */ COLOR_RR(lefty, (&left)); COLOR_RR(righty, (&right)); - SETUP(x, (&left), (&right), w); + SETUP(x, (&left), (&right), halfw + midx); - for (x = w - 1; x > 0; --x) { /* 0 -> w-1 */ - current = COLOR(x); - *(data+x) = current; - *(data+inw-x) = current; - *(end-x) = current; - *(end-(inw-x)) = current; + for (x = halfw + midx - 1; x > 0; --x) { /* 0 -> (w+1)/2 */ + c = COLOR(x); + *(ldata++) = *(rdata--) = c; NEXT(x); } - current = COLOR(x); - *(data+x) = current; - *(data+inw-x) = current; - *(end-x) = current; - *(end-(inw-x)) = current; - - data+=inw; - end-=inw; + c = COLOR(x); + *ldata = *rdata = c; + ldata += halfw + 1; + rdata += halfw - 1 + midx + w; NEXT(lefty); NEXT(righty); } - COLOR_RR(lefty, (&left)); - COLOR_RR(righty, (&right)); - SETUP(x, (&left), (&right), w); + /* copy the top half into the bottom half, mirroring it, so we can only + copy one row at a time - for (x = w - 1; x > 0; --x) { /* 0 -> w-1 */ - current = COLOR(x); - *(data+x) = current; - *(data+inw-x) = current; - *(end-x) = current; - *(end-(inw-x)) = current; + it is faster, to move the writing pointer forward, and the reading + pointer backward - NEXT(x); + this is the current code, moving the write pointer forward and read + pointer backward + 41.78 4.26 1.78 504 3.53 3.53 gradient_pyramid2 + this is the opposite, moving the read pointer forward and the write + pointer backward + 42.27 4.40 1.86 504 3.69 3.69 gradient_pyramid2 + + */ + ldata = sf->pixel_data + (halfh - 1) * w; + cp = ldata + (midy + 1) * w; + for (y = halfh; y > 0; --y) { + memcpy(cp, ldata, w * sizeof(RrPixel32)); + ldata -= w; + cp += w; } - current = COLOR(x); - *(data+x) = current; - *(data+inw-x) = current; - *(end-x) = current; - *(end-(inw-x)) = current; } -
M render/icon.hrender/icon.h

@@ -1,3 +1,5 @@

+/* GIMP RGBA C-Source image dump (icon.h) */ + /* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*- icon.h for the Openbox window manager

@@ -16,17 +18,14 @@

See the COPYING file for a copy of the GNU General Public License. */ -/* GIMP RGBA C-Source image dump (icon.h) */ - #define OB_DEFAULT_ICON_WIDTH (48) #define OB_DEFAULT_ICON_HEIGHT (48) #define OB_DEFAULT_ICON_BYTES_PER_PIXEL (4) /* 3:RGB, 4:RGBA */ #define OB_DEFAULT_ICON_COMMENT \ - "To recreate this file, save an image as \"C-Source\" in The Gimp. " \ - "Use \"ob_default_icon\" as the Prefixed Name. Enable Glib Types. " \ - "Enable Save Alpha Channel. Enable Use Macros instead of Struct." + "To recreate this file, save an image as \"C-Source\" in The Gimp. Use \"ob_default_icon\" as the Prefixed Name. Enable Glib Types. Enable Save Alpha Channel. Enable Use Macros instead of Struct." #define OB_DEFAULT_ICON_PIXEL_DATA ((guint8*) OB_DEFAULT_ICON_pixel_data) static const guint8 OB_DEFAULT_ICON_pixel_data[48 * 48 * 4 + 1] = +("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"

@@ -36,406 +35,388 @@ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"

"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\10" - "\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373" - "\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10" - "\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10" - "\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10" - "\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373" - "\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10" - "\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10" - "\10\373\10\10\10\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10" - "\373\10\10\10\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22" - "\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20" - "\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373" - "\20\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22\24" - "\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22" - "\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20" - "\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373" - "\20\22\24\373\23\26\32\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10" - "\10\10\373\20\22\24\373\277\324\347\373\277\325\347\373\277\324\347\373\277" - "\324\347\373\277\324\347\373\277\324\347\373\277\324\347\373\277\324\347\373" - "\277\324\347\373\277\324\347\373\277\324\347\373\277\324\347\373\277\324\347" - "\373\277\325\347\373\277\324\347\373\300\324\347\373\277\324\347\373\277\324" - "\347\373\277\324\347\373\277\324\347\373\300\324\347\373\277\324\347\373\277" - "\324\347\373\277\324\347\373\277\324\347\373\277\324\347\373\277\324\347\373" - "\277\324\347\373\277\324\347\373\277\324\347\373\277\324\347\373\300\324\347" - "\373\277\324\347\373\277\324\347\373\277\324\347\373\277\324\347\373\277\325" - "\347\373\277\324\347\373\277\324\347\373\277\324\347\373\20\22\24\373\10\10" - "\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\20\22\24\373\277\323" - "\347\373l\232\277\373n\232\277\373n\232\300\373n\232\300\373o\233\300\373" - "o\233\300\373o\233\301\373o\235\301\373q\235\303\373q\235\303\373q\235\303" - "\373r\236\304\373r\236\304\373t\236\304\373t\237\304\373t\237\305\373t\237" - "\305\373u\237\305\373u\237\306\373u\241\306\373u\241\306\373w\241\307\373" - "w\242\307\373y\242\307\373y\242\307\373y\242\310\373y\245\310\373z\245\311" - "\373z\244\311\373z\245\311\373|\245\311\373|\245\313\373|\245\313\373}\247" - "\313\373}\247\314\373}\247\314\373}\250\314\373\177\251\315\373t\232\277\373" - "\20\22\24\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\20" - "\22\24\373\277\323\346\373l\232\276\373l\230\277\373l\230\277\373n\232\277" - "\373n\232\300\373n\233\300\373o\233\300\373o\233\301\373o\233\301\373o\233" - "\301\373q\235\301\373q\235\303\373q\236\303\373r\236\303\373r\236\304\373" - "r\237\304\373t\236\304\373t\237\305\373t\237\305\373t\241\305\373u\241\306" - "\373u\241\306\373u\242\306\373w\241\306\373w\241\307\373w\242\307\373y\244" - "\307\373y\244\310\373y\244\310\373y\245\310\373z\245\311\373z\244\311\373" - "z\245\311\373|\247\313\373|\247\313\373|\245\313\373}\250\313\373}\250\314" - "\373q\230\276\373\20\22\24\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\10\10\10\373\20\22\24\373\275\322\345\373l\227\276\373k\230\276\373l\230" - "\276\373l\232\277\373l\230\277\373n\232\277\373n\233\300\373n\232\300\373" - "n\232\300\373o\233\300\373o\233\301\373o\233\301\373q\233\301\373q\235\303" - "\373q\235\303\373r\235\303\373r\236\304\373r\237\304\373r\237\304\373t\236" - "\304\373t\237\305\373t\237\305\373u\237\305\373u\241\306\373u\241\306\373" - "u\241\306\373w\242\307\373y\241\307\373w\244\307\373y\242\307\373y\244\310" - "\373z\244\310\373y\244\310\373z\244\311\373z\245\311\373z\245\311\373|\245" - "\313\373|\245\313\373o\230\275\373\20\22\24\373\10\10\10\373\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\10\10\10\373\17\22\24\373\273\322\344\373k\227\275\373" - "k\227\275\373k\230\276\373k\227\276\373l\230\276\373l\232\277\373l\232\277" - "\373n\232\277\373n\232\277\373n\232\300\373n\233\300\373o\232\300\373o\233" - "\301\373o\233\301\373o\233\301\373q\235\303\373r\236\303\373q\235\303\373" - "r\235\303\373r\236\304\373r\237\304\373r\237\304\373u\237\305\373t\237\305" - "\373t\241\305\373u\237\306\373u\237\306\373w\241\306\373w\241\306\373w\242" - "\307\373w\242\307\373w\242\307\373z\242\310\373y\244\310\373z\244\310\373" - "y\244\310\373|\244\311\373z\245\311\373n\225\273\373\17\22\24\373\10\10\10" - "\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\17\22\24\373\273\321\344" - "\373k\227\275\373i\227\275\373k\227\275\373k\230\276\373k\227\276\373l\230" - "\276\373l\230\276\373l\232\277\373l\232\277\373l\230\277\373n\232\277\373" - "n\232\300\373n\233\300\373o\233\300\373o\233\301\373o\235\301\373o\235\301" - "\373q\235\301\373r\235\303\373q\236\303\373r\235\303\373r\236\304\373r\236" - "\304\373r\236\304\373t\237\304\373t\236\305\373t\237\305\373t\237\305\373" - "w\241\306\373u\241\306\373u\241\306\373w\242\306\373w\242\307\373w\242\307" - "\373w\244\307\373y\244\310\373y\244\310\373z\244\310\373l\225\272\373\17\22" - "\24\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\17\22\24" - "\373\272\321\343\373i\225\273\373i\225\273\373i\227\275\373k\225\275\373i" - "\227\275\373k\227\275\373k\230\276\373l\230\276\373l\230\276\373l\230\276" - "\373n\232\277\373l\230\277\373n\232\277\373n\232\300\373o\233\300\373o\233" - "\300\373o\233\300\373o\233\301\373o\235\301\373o\233\301\373q\235\303\373" - "r\235\303\373q\236\303\373r\236\303\373t\236\304\373r\236\304\373r\237\304" - "\373t\237\304\373u\237\305\373t\237\305\373t\241\305\373u\241\306\373u\241" - "\306\373w\241\306\373u\242\306\373w\242\307\373w\242\307\373w\242\307\373" - "k\224\271\373\17\22\24\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10" - "\10\10\373\17\22\24\373\271\320\343\373h\224\272\373_\212\260\373_\212\260" - "\373`\212\261\373`\212\261\373`\212\261\373`\212\261\373`\212\261\373`\214" - "\261\373b\214\263\373b\214\263\373b\214\263\373b\214\263\373b\214\263\373" - "c\214\263\373c\216\264\373e\216\264\373e\216\264\373c\216\264\373e\216\264" - "\373e\216\264\373f\217\265\373f\217\265\373e\217\265\373f\217\265\373f\217" - "\265\373f\217\265\373f\221\265\373f\217\266\373f\221\266\373h\221\266\373" - "i\221\266\373h\221\266\373h\222\266\373h\222\270\373i\221\270\373i\222\270" - "\373i\222\270\373i\222\270\373\17\22\24\373\10\10\10\373\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\10\10\10\373\17\21\24\373T\201\250\373T\201\250\373T\201\250" - "\373T\201\250\373T\201\250\373T\201\250\373T\201\250\373T\201\250\373T\201" - "\250\373T\201\250\373T\201\250\373T\201\250\373T\201\250\373T\201\250\373" - "T\201\250\373T\201\250\373T\201\250\373T\201\250\373T\201\250\373T\201\250" - "\373T\201\250\373T\201\250\373T\201\250\373T\201\250\373T\201\250\373T\201" - "\250\373T\201\250\373T\201\250\373T\201\250\373T\201\250\373T\201\250\373" - "T\201\250\373T\201\250\373T\201\250\373T\201\250\373T\201\250\373T\201\250" - "\373T\201\250\373T\201\250\373T\201\250\373\17\21\24\373\10\10\10\373\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\17\21\24\373T\201\250\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373T\201" - "\250\373\17\21\24\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10" - "\373\17\21\24\373T\201\250\373\375\376\376\373\375\376\376\373\375\376\376" - "\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376" - "\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375" - "\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373" - "\375\376\376\373\375\376\376\373\375\375\376\373\375\375\376\373\375\375\376" - "\373\375\376\376\373\375\375\376\373\375\375\376\373\375\376\376\373\375\375" - "\376\373\375\375\376\373\375\376\376\373\375\375\376\373\375\375\376\373\375" - "\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373" - "\375\375\376\373\375\375\376\373T\201\250\373\17\21\24\373\10\10\10\373\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\17\21\24\373T\201\250\373\373" - "\375\376\373\373\375\376\373\373\375\376\373\373\375\376\373\373\375\376\373" - "\373\375\376\373\373\375\376\373\373\375\376\373\373\375\376\373\373\375\376" - "\373\373\375\376\373\373\375\376\373\373\375\376\373\373\375\376\373\373\375" - "\376\373\373\375\376\373\373\375\376\373\373\375\376\373\373\375\376\373\373" - "\375\376\373\373\375\376\373\373\375\376\373\373\375\376\373\373\375\376\373" - "\373\375\376\373\373\375\376\373\373\375\376\373\373\375\376\373\373\375\376" - "\373\373\375\376\373\373\375\376\373\373\375\376\373\373\375\376\373\373\375" - "\376\373\373\375\376\373\373\375\376\373\373\375\376\373\373\375\376\373T" - "\201\250\373\17\21\24\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10" - "\10\10\373\17\21\24\373T\201\250\373\375\376\376\373\375\376\376\373\375\376" - "\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375" - "\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373" - "\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376" - "\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376" - "\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375" - "\376\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373" - "\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373T\201\250\373\17\21\24\373\10\10\10\373" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\17\21\23\373T\201\250\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373T" - "\201\250\373\17\21\23\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10" - "\10\10\373\17\21\23\373T\201\250\373\375\376\376\373\375\376\376\373\375\376" - "\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375" - "\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373" - "\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376" - "\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376" - "\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\375\376\373\375" - "\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373" - "\375\375\376\373\375\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373T\201\250\373\17\21\23\373\10\10\10\373" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\17\21\23\373T\201\250\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373T" - "\201\250\373\17\21\23\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10" - "\10\10\373\17\21\23\373T\201\250\373\375\376\376\373\375\376\376\373\375\376" - "\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375" - "\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373" - "\375\376\376\373\375\376\376\373\375\375\376\373\375\375\376\373\375\376\376" - "\373\375\375\376\373\375\376\376\373\375\375\376\373\375\376\376\373\375\375" - "\376\373\375\376\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375" - "\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373T\201\250\373\17\21\23\373\10\10\10\373" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\17\20\23\373T\201\250\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373T" - "\201\250\373\17\20\23\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10" - "\10\10\373\17\20\23\373T\201\250\373\375\376\376\373\375\376\376\373\375\376" - "\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375" - "\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\375\376\373" - "\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376" - "\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375" - "\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375" - "\375\376\373\375\375\376\373\375\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373T\201\250\373\17\20\23\373\10\10\10\373" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\17\20\23\373T\201\250\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373T" - "\201\250\373\17\20\23\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10" - "\10\10\373\16\20\23\373T\201\250\373\375\376\376\373\375\376\376\373\375\376" - "\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375" - "\376\376\373\375\376\376\373\375\375\376\373\375\375\376\373\375\375\376\373" - "\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376" - "\373\375\375\376\373\375\375\376\373\375\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\375\375\376\373\374\375\376\373\375\375\376\373\375" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373T\201\250\373\17\20\23\373\10\10\10\373" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\16\20\22\373T\201\250\373\373" - "\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373" - "\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375" - "\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375" - "\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373" - "\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373" - "\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375" - "\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375" - "\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373T" - "\201\250\373\16\20\22\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10" - "\10\10\373\16\20\22\373T\201\250\373\375\376\376\373\375\376\376\373\375\376" - "\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375" - "\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373" - "\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373T\201\250\373\16\20\22\373\10\10\10\373" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\16\20\22\373T\201\250\373\373" - "\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373" - "\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375" - "\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375" - "\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373" - "\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373" - "\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375" - "\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375" - "\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373T" - "\201\250\373\16\20\22\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10" - "\10\10\373\16\20\22\373T\201\250\373\375\376\376\373\375\376\376\373\375\376" - "\376\373\375\376\376\373\375\376\376\373\375\375\376\373\375\375\376\373\375" - "\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373" - "\375\375\376\373\375\375\376\373\375\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373T\201\250\373\16\20\22\373\10\10\10\373" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\16\20\22\373T\201\250\373\373" - "\375\375\373\373\374\375\373\373\374\375\373\373\375\375\373\373\375\375\373" - "\373\374\375\373\373\375\375\373\373\374\375\373\373\374\375\373\373\374\375" - "\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374" - "\375\373\373\375\375\373\373\374\375\373\373\375\375\373\373\374\375\373\373" - "\375\375\373\373\374\375\373\373\374\375\373\373\375\375\373\373\375\375\373" - "\373\374\375\373\373\374\375\373\373\375\375\373\373\375\375\373\373\374\375" - "\373\373\374\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375" - "\375\373\373\375\375\373\373\375\375\373\373\374\375\373\373\374\375\373T" - "\201\250\373\16\20\22\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10" - "\10\10\373\16\20\22\373T\201\250\373\375\375\376\373\375\375\376\373\375\375" - "\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375" - "\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373" - "\375\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373T\201\250\373\16\20\22\373\10\10\10\373" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\16\20\22\373T\201\250\373\373" - "\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373" - "\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375" - "\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374" - "\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373" - "\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373" - "\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375" - "\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374" - "\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373]" - "\211\261\373\16\20\22\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10" - "\10\10\373\16\20\22\373T\201\250\373\375\375\376\373\375\375\376\373\375\375" - "\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375" - "\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\373\375\375\373\\\211\260\373\15\20\22\373\10\10\10\373" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\15\20\22\373T\201\250\373\373" - "\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373" - "\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375" - "\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374" - "\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373" - "\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373" - "\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375" - "\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374" - "\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373[" - "\207\257\373\15\20\22\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10" - "\10\10\373\15\20\22\373T\201\250\373\375\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\375\373\374\375\375\373\374\375\375\373\374\375\375\373\374" - "\375\375\373\374\375\375\373\374\375\375\373\374\375\375\373\374\375\375\373" - "\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375" - "\373\373\375\375\373\373\375\375\373Y\206\255\373\15\20\22\373\10\10\10\373" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\15\20\22\373T\201\250\373\373" - "\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373" - "\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375" - "\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374" - "\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373" - "\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373" - "\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375" - "\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374" - "\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373V" - "\204\254\373\15\20\22\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10" - "\10\10\373\15\20\22\373T\201\250\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\375\373\374\375" - "\375\373\374\375\375\373\374\375\375\373\374\375\375\373\374\375\375\373\374" - "\375\375\373\374\375\375\373\374\375\375\373\373\375\375\373\373\375\375\373" - "\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375" - "\373\373\375\375\373\373\374\375\373V\202\253\373\15\20\22\373\10\10\10\373" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\15\20\22\373T\201\250\373\373" - "\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373" - "\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375" - "\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374" - "\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373" - "\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373" - "\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375" - "\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374" - "\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373V" - "\202\253\373\15\20\22\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10" - "\10\10\373\15\17\22\373T\201\250\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\375\373\374\375\375\373\374\375\375\373\374\375" - "\375\373\374\375\375\373\374\375\375\373\374\375\375\373\374\375\375\373\374" - "\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373" - "\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\374\375" - "\373\373\374\375\373\373\374\375\373U\201\251\373\15\20\22\373\10\10\10\373" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\15\17\22\373T\201\250\373T\201" - "\250\373T\177\250\373T\177\250\373T\177\250\373T\177\250\373T\177\250\373" - "T\177\250\373T\177\250\373T\201\250\373T\177\250\373T\201\250\373T\177\250" - "\373R\177\250\373T\201\250\373R\177\250\373T\177\250\373T\201\250\373T\177" - "\250\373R\177\250\373T\201\250\373T\177\250\373T\177\250\373T\177\250\373" - "T\177\250\373T\201\250\373T\177\250\373T\177\250\373T\201\250\373T\177\250" - "\373T\177\250\373T\177\250\373T\177\250\373R\177\250\373R\177\250\373T\177" - "\250\373T\177\250\373T\177\250\373T\177\250\373T\177\250\373\15\17\22\373" - "\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\15\17\22\373\202" - "\247\300\373\201\244\300\373}\242\277\373\177\244\277\373\201\245\300\373" - "\202\247\301\373\204\247\303\373\206\250\303\373Ju\236\373\212\254\305\373" - "\214\255\306\373\216\257\307\373\217\260\307\373\221\261\310\373\222\261\311" - "\373\224\263\311\373\225\264\313\373\227\265\314\373\230\266\315\373\233\266" - "\315\373\235\270\316\373\236\272\317\373\237\273\320\373\237\272\320\373\237" - "\272\320\373\237\273\320\373\237\273\320\373\237\273\320\373\237\273\320\373" - "\237\273\320\373\237\273\320\373Ju\236\373\236\273\320\373\237\272\320\373" - "\237\272\320\373\237\272\320\373\237\273\320\373\236\272\320\373\237\273\320" - "\373\237\273\320\373\15\17\22\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\10\10\10\373\15\17\21\373\201\245\277\373My\241\373My\241\373Ly\241\373" - "My\241\373My\241\373My\241\373My\241\3733V\202\373Ny\242\373Nz\242\373Ny\242" - "\373Nz\242\373Mz\242\373Ny\242\373Nz\242\373Mz\242\373Nz\242\373Nz\242\373" - "Nz\242\373Nz\242\373Nz\242\373P|\244\373Pz\244\373N|\244\373Pz\244\373P|\244" - "\373Pz\244\373Pz\244\373P|\244\373P|\244\373-Nz\373Nz\244\373P|\244\373P|" - "\244\373P|\244\373P|\244\373P|\244\373P|\244\373P|\244\373\15\17\21\373\10" - "\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\10\10\10\373\15\17" - "\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15" - "\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373" - "\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21" - "\373\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15\17" - "\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15" - "\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373" - "\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373\10\10\10" - "\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\10\10\10\373" - "\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10" - "\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10" - "\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10" - "\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373" - "\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10" - "\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10" - "\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10" - "\10\10\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0"; + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\40J\207\15\40J\207\23\40J\207" + "\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J" + "\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23" + "\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207" + "\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J" + "\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23" + "\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207" + "\23\40J\207\15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0'P\213\267'Q\214\275'Q\214\275" + "'Q\214\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275'Q\214" + "\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275" + "'Q\214\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275(R\215\275'Q\214\275'Q\214" + "\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275" + "'Q\214\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275(R\215" + "\275(R\215\275(R\215\275&P\213\267\40J\207\20\0\0\0\0\0\0\0\0\40J\207+Y{\252" + "\377\216\253\320\377\204\243\314\377\204\243\314\377\204\243\314\377\204\243" + "\314\377\204\243\314\377\204\243\314\377\204\243\314\377\204\243\314\377\204" + "\243\314\377\204\243\314\377\204\243\314\377\204\243\314\377\204\243\314\377" + "\204\243\314\377\204\243\314\377\204\243\314\377\204\243\314\377\204\243\314" + "\377\204\243\314\377\204\243\314\377\204\243\314\377\204\243\314\377\204\243" + "\314\377\204\243\314\377\203\243\314\377\203\243\313\377\203\243\313\377\203" + "\243\313\377\203\242\313\377\202\242\313\377\202\242\313\377\202\241\313\377" + "\201\241\312\377\201\241\312\377\201\240\312\377\201\240\312\377\200\240\312" + "\377\200\240\312\377\200\240\312\377\200\240\312\377\211\247\316\377Jn\241" + "\377\40J\207+\0\0\0\0\0\0\0\0\40J\207+Wy\251\377]\207\275\377>o\260\377>o" + "\260\377>o\260\377>o\260\377>o\260\377>o\260\377>o\260\377>o\260\377>o\260" + "\377>o\260\377>o\260\377>o\260\377>o\260\377>o\260\377>o\260\377>o\260\377" + ">o\260\377>o\260\377>o\260\377>o\260\377>o\260\377>o\260\377>o\260\377>o\260" + "\377>o\260\377>o\260\377>o\260\377>o\260\377=o\260\377=o\260\377=o\260\377" + "=o\260\377=o\260\377=o\260\377=o\260\377=o\260\377=o\260\377=o\260\377=o\260" + "\377=o\260\377_\210\275\377Hm\241\377\40J\207+\0\0\0\0\0\0\0\0\40J\207+Tw" + "\251\377]\207\276\377?r\263\377?r\263\377?r\263\377?r\263\377?r\263\377?r" + "\263\377?r\263\377?r\263\377?r\263\377?r\263\377?r\263\377?r\263\377?r\263" + "\377?r\263\377?r\263\377?r\263\377?r\263\377?r\263\377?r\263\377?r\263\377" + "?r\263\377?r\263\377?r\263\377?r\263\377?r\263\377?r\263\377?r\263\377?r\263" + "\377?r\263\377?r\263\377?r\263\377?r\263\377?r\263\377?r\263\377?r\263\377" + "?r\263\377?r\263\377?r\263\377?r\263\377?r\263\377]\210\277\377Fl\241\377" + "\40J\207+\0\0\0\0\0\0\0\0\40J\207+Rv\250\377\\\210\300\377At\265\377At\265" + "\377At\265\377At\265\377At\265\377At\265\377At\265\377At\265\377At\265\377" + "At\265\377At\265\377At\265\377At\265\377At\265\377At\265\377At\265\377At\265" + "\377At\265\377At\265\377At\265\377At\265\377At\265\377At\265\377At\265\377" + "At\265\377At\265\377At\265\377At\265\377At\265\377At\265\377At\265\377At\265" + "\377At\265\377At\265\377At\265\377At\265\377At\265\377At\265\377At\265\377" + "At\265\377\\\210\300\377Dj\240\377\40J\207+\0\0\0\0\0\0\0\0\40J\207+Ot\247" + "\377\\\211\302\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271" + "\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377" + "Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271" + "\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377" + "Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271" + "\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377[\211\302\377Bi\240\377\40J\207" + "+\0\0\0\0\0\0\0\0\40J\207+Ls\247\377\\\211\303\377Fy\273\377Fy\273\377Fy\273" + "\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377" + "Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273" + "\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377" + "Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273" + "\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377" + "\\\211\303\377Ah\240\377\40J\207+\0\0\0\0\0\0\0\0\40J\207+Jq\246\377\\\212" + "\305\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277" + "\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377" + "I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277" + "\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377" + "I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277" + "\377I}\277\377I}\277\377I}\277\377[\212\305\377?g\237\377\40J\207+\0\0\0\0" + "\0\0\0\0\40J\207+Jq\246\377\\\212\305\377I}\277\377I}\277\377I}\277\377I}" + "\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277" + "\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377" + "I}\277\377I}\277\377I}\277\377J~\300\377K\177\301\377K\177\301\377K\177\301" + "\377K\177\301\377K\177\301\377K\177\301\377K\177\301\377K\177\301\377K\177" + "\301\377K\177\301\377K\177\301\377K\177\301\377K\177\301\377K\177\301\377" + "K\177\301\377K\177\301\377K\177\301\377K\177\301\377Z\212\307\377=f\237\377" + "\40J\207+\0\0\0\0\0\0\0\0\40J\207+Ip\247\377\\\213\307\377J\177\301\377J\177" + "\301\377J\177\301\377J\177\301\377J\177\301\377J\177\301\377J\177\301\377" + "J\177\301\377J\177\301\377J\177\301\377J\177\301\377J\177\301\377J\177\301" + "\377J\177\301\377J\177\301\377J\177\301\377J\177\301\377J\177\301\377J\177" + "\301\377J\177\301\377J\177\301\377K\200\302\377K\200\302\377K\200\302\377" + "K\200\302\377K\200\302\377K\200\302\377K\200\302\377K\200\302\377K\200\302" + "\377K\200\302\377K\200\302\377K\200\302\377K\200\302\377K\200\302\377K\200" + "\302\377K\200\302\377K\200\302\377K\200\302\377K\200\302\377Z\212\307\377" + "=f\237\377\40J\207+\0\0\0\0\0\0\0\0\40J\207+Ho\247\377e\223\314\377Z\213\310" + "\377Z\213\310\377Z\213\310\377Z\213\310\377Z\213\307\377Z\213\307\377Z\213" + "\307\377Z\213\307\377Z\213\307\377Y\212\307\377Y\212\307\377Y\212\307\377" + "Y\212\307\377Y\212\307\377X\212\307\377X\212\307\377X\212\307\377X\211\307" + "\377X\212\307\377X\212\307\377X\211\307\377X\211\307\377X\211\307\377X\211" + "\307\377X\211\307\377X\211\307\377X\211\307\377X\211\307\377X\211\307\377" + "X\211\307\377W\211\307\377W\211\307\377W\211\307\377W\211\307\377W\211\307" + "\377W\211\307\377V\211\307\377V\211\307\377V\210\307\377V\210\307\377`\217" + "\312\377<e\237\377\40J\207+\0\0\0\0\0\0\0\0\40J\207+<b\231\377i\212\267\377" + "i\211\266\377i\211\266\377i\211\266\377i\211\266\377i\211\266\377h\211\266" + "\377h\211\266\377h\211\266\377h\211\266\377h\211\266\377h\211\266\377h\211" + "\266\377g\211\266\377g\211\266\377g\211\266\377g\211\266\377g\210\266\377" + "g\210\266\377g\211\266\377g\211\266\377g\210\266\377g\210\266\377g\210\265" + "\377g\210\265\377g\210\265\377g\210\265\377g\210\265\377g\210\265\377g\210" + "\265\377g\210\265\377g\210\265\377f\210\265\377f\210\264\377f\210\264\377" + "f\210\264\377f\210\264\377f\210\264\377f\210\264\377f\210\264\377f\207\264" + "\377f\207\264\3778^\226\377\40J\207+\0\0\0\0\0\0\0\0\40J\207+b\177\251\377" + "\340\344\351\377\337\342\350\377\337\342\350\377\336\342\350\377\336\342\347" + "\377\336\342\347\377\336\342\347\377\336\342\347\377\335\341\347\377\335\341" + "\346\377\335\341\346\377\335\341\346\377\335\341\346\377\335\341\346\377\335" + "\341\346\377\335\341\346\377\335\341\346\377\334\340\346\377\334\340\346\377" + "\335\341\346\377\335\341\346\377\334\340\346\377\334\340\346\377\334\340\345" + "\377\334\340\345\377\334\340\345\377\333\337\345\377\333\337\345\377\333\337" + "\344\377\333\337\344\377\333\337\344\377\333\336\344\377\332\336\344\377\332" + "\336\344\377\332\336\344\377\332\336\343\377\332\336\343\377\332\336\343\377" + "\332\336\343\377\332\336\343\377\332\336\343\377\333\337\345\377a}\247\377" + "\40J\207+\0\0\0\0\0\0\0\0\40J\207+h\204\254\377\355\355\355\377\351\351\351" + "\377\351\351\352\377\351\351\351\377\351\351\351\377\351\351\351\377\351\351" + "\350\377\351\350\350\377\351\351\351\377\350\350\350\377\350\350\350\377\350" + "\350\350\377\350\350\350\377\350\350\350\377\350\350\350\377\350\350\350\377" + "\350\347\350\377\350\347\347\377\347\347\347\377\347\347\347\377\347\347\347" + "\377\347\347\347\377\347\347\347\377\347\347\347\377\346\347\347\377\347\346" + "\347\377\347\346\347\377\346\346\347\377\346\346\346\377\346\346\346\377\346" + "\346\346\377\346\346\346\377\346\346\346\377\346\346\346\377\346\346\346\377" + "\346\345\345\377\345\345\346\377\345\346\345\377\345\346\345\377\345\346\345" + "\377\345\345\345\377\351\351\351\377g\202\252\377\40J\207+\0\0\0\0\0\0\0\0" + "\40J\207+h\203\253\377\354\354\354\377\350\350\350\377\347\350\350\377\347" + "\347\350\377\347\347\350\377\347\347\347\377\347\347\347\377\347\347\347\377" + "\347\347\347\377\347\346\347\377\347\346\346\377\347\346\346\377\347\347\347" + "\377\346\346\346\377\346\346\346\377\346\346\346\377\346\346\346\377\346\346" + "\346\377\346\346\346\377\345\345\346\377\345\345\345\377\345\345\346\377\345" + "\346\346\377\345\345\345\377\345\345\345\377\345\345\345\377\345\345\345\377" + "\345\345\345\377\345\344\344\377\345\345\344\377\345\345\345\377\345\344\344" + "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\343\344" + "\344\377\343\344\344\377\344\344\344\377\344\344\343\377\344\343\343\377\350" + "\350\350\377g\202\252\377\40J\207+\0\0\0\0\0\0\0\0\40J\207+h\203\253\377\353" + "\352\352\377\346\346\346\377\346\345\345\377\345\346\346\377\345\346\345\377" + "\345\345\345\377\345\345\345\377\345\345\345\377\345\345\346\377\345\345\345" + "\377\345\345\345\377\345\345\345\377\345\345\345\377\345\345\345\377\345\345" + "\345\377\344\345\345\377\344\344\344\377\344\345\344\377\344\344\344\377\344" + "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\343\343\344\377" + "\343\343\343\377\344\343\343\377\343\343\343\377\343\343\343\377\343\343\343" + "\377\343\343\343\377\343\343\343\377\342\343\343\377\342\343\343\377\343\342" + "\343\377\343\342\342\377\342\342\342\377\342\342\342\377\342\342\342\377\342" + "\342\342\377\342\342\342\377\342\342\342\377\346\346\346\377g\202\252\377" + "\40J\207+\0\0\0\0\0\0\0\0\40J\207+h\203\253\377\351\351\351\377\345\344\344" + "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\343\344" + "\344\377\343\344\344\377\343\343\344\377\343\343\343\377\343\343\343\377\343" + "\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377" + "\343\343\343\377\343\343\343\377\343\342\342\377\342\342\342\377\342\342\342" + "\377\342\342\342\377\342\342\342\377\342\341\342\377\342\342\342\377\342\342" + "\341\377\342\341\342\377\341\341\342\377\341\341\341\377\341\341\341\377\341" + "\341\341\377\341\341\341\377\341\341\341\377\341\340\341\377\341\341\341\377" + "\340\341\341\377\341\341\341\377\340\340\340\377\340\340\340\377\340\340\340" + "\377\340\340\340\377\346\345\346\377g\202\252\377\40J\207+\0\0\0\0\0\0\0\0" + "\40J\207+h\203\253\377\350\350\350\377\342\342\343\377\342\342\342\377\342" + "\342\342\377\342\342\342\377\342\342\342\377\342\342\342\377\342\342\342\377" + "\342\342\342\377\342\342\341\377\342\341\342\377\341\341\341\377\341\341\341" + "\377\341\341\341\377\341\341\341\377\341\341\341\377\341\341\341\377\341\341" + "\341\377\340\341\341\377\341\340\340\377\341\340\340\377\340\340\340\377\340" + "\340\340\377\340\340\340\377\340\340\340\377\340\340\340\377\340\340\340\377" + "\340\340\337\377\340\340\340\377\337\337\337\377\340\340\337\377\337\337\337" + "\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337" + "\337\377\337\337\337\377\337\337\336\377\336\337\336\377\336\336\336\377\344" + "\344\344\377g\202\252\377\40J\207+\0\0\0\0\0\0\0\0\40J\207+h\203\253\377\347" + "\347\347\377\341\341\341\377\341\341\341\377\341\341\341\377\341\341\341\377" + "\341\341\341\377\340\341\340\377\340\340\340\377\340\340\340\377\340\340\337" + "\377\340\340\340\377\340\340\340\377\340\340\337\377\337\340\337\377\337\340" + "\337\377\337\337\340\377\337\337\337\377\337\337\337\377\337\337\337\377\337" + "\337\337\377\337\337\337\377\337\337\337\377\336\337\337\377\336\337\336\377" + "\337\336\336\377\336\336\336\377\336\336\336\377\336\336\336\377\336\336\336" + "\377\336\336\336\377\336\336\336\377\336\336\335\377\336\335\335\377\336\335" + "\335\377\336\335\335\377\335\335\335\377\335\335\335\377\335\335\335\377\335" + "\335\335\377\335\335\335\377\335\335\335\377\343\343\343\377g\202\252\377" + "\40J\207+\0\0\0\0\0\0\0\0\40J\207+h\203\253\377\345\346\346\377\337\337\340" + "\377\340\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337" + "\337\377\337\337\336\377\337\336\336\377\336\336\337\377\336\336\337\377\336" + "\336\336\377\336\336\336\377\336\336\336\377\336\336\335\377\336\336\336\377" + "\336\335\336\377\336\336\336\377\335\335\336\377\335\335\335\377\335\335\335" + "\377\335\335\335\377\335\335\335\377\335\335\335\377\335\335\335\377\335\335" + "\334\377\334\335\335\377\334\334\334\377\334\334\334\377\334\334\334\377\334" + "\334\334\377\334\334\334\377\334\334\334\377\334\334\334\377\334\334\334\377" + "\334\333\334\377\333\333\333\377\333\333\333\377\333\333\333\377\333\333\333" + "\377\333\333\333\377\341\341\342\377f\202\252\377\40J\207+\0\0\0\0\0\0\0\0" + "\40J\207+h\203\253\377\345\345\345\377\336\335\336\377\336\335\335\377\335" + "\335\335\377\336\335\335\377\335\335\335\377\335\335\335\377\335\335\335\377" + "\335\334\335\377\335\335\335\377\335\335\335\377\334\335\334\377\334\334\335" + "\377\334\335\334\377\334\334\334\377\334\334\334\377\334\334\334\377\334\334" + "\334\377\334\334\334\377\334\334\334\377\334\333\334\377\334\333\333\377\333" + "\333\333\377\333\333\333\377\333\333\333\377\333\333\333\377\333\333\333\377" + "\333\332\333\377\333\333\333\377\333\333\333\377\332\333\333\377\332\333\332" + "\377\332\332\332\377\332\332\332\377\332\332\332\377\332\332\332\377\332\332" + "\332\377\332\332\332\377\331\332\331\377\331\332\331\377\331\331\332\377\341" + "\341\341\377f\202\252\377\40J\207+\0\0\0\0\0\0\0\0\40J\207+g\203\253\377\343" + "\343\344\377\334\334\334\377\334\333\334\377\334\334\334\377\333\333\334\377" + "\333\333\333\377\333\334\333\377\333\333\333\377\333\333\333\377\333\333\333" + "\377\333\333\333\377\333\333\333\377\333\332\333\377\333\332\333\377\333\332" + "\332\377\332\332\333\377\332\332\333\377\332\332\332\377\333\332\332\377\332" + "\332\332\377\332\332\332\377\331\332\332\377\331\332\331\377\331\332\331\377" + "\331\332\331\377\331\331\331\377\331\331\331\377\332\331\331\377\331\331\331" + "\377\331\331\331\377\331\331\331\377\330\330\331\377\330\330\330\377\331\330" + "\330\377\330\330\330\377\330\330\330\377\331\330\330\377\330\330\330\377\330" + "\330\330\377\330\330\330\377\330\330\330\377\337\337\337\377f\202\252\377" + "\40J\207+\0\0\0\0\0\0\0\0\40J\207+g\203\253\377\342\342\343\377\332\332\332" + "\377\332\332\332\377\332\332\332\377\332\332\332\377\331\332\332\377\331\332" + "\332\377\332\332\331\377\332\331\331\377\331\331\331\377\331\331\331\377\331" + "\331\331\377\331\331\331\377\331\331\331\377\331\331\331\377\331\331\331\377" + "\331\331\331\377\330\330\330\377\331\330\331\377\330\331\330\377\330\330\330" + "\377\330\330\330\377\330\330\330\377\330\330\327\377\327\330\330\377\330\330" + "\327\377\327\330\330\377\330\330\327\377\327\327\327\377\327\327\327\377\327" + "\327\327\377\327\327\327\377\327\327\327\377\327\327\327\377\327\327\327\377" + "\326\327\327\377\327\326\326\377\326\327\326\377\326\326\326\377\326\326\326" + "\377\326\326\326\377\336\336\337\377f\202\252\377\40J\207+\0\0\0\0\0\0\0\0" + "\40J\207+g\203\253\377\341\341\341\377\331\331\331\377\330\331\331\377\330" + "\330\330\377\330\330\330\377\330\330\330\377\330\330\330\377\330\330\330\377" + "\327\330\330\377\330\330\327\377\330\330\330\377\330\327\330\377\327\327\327" + "\377\327\330\327\377\327\330\327\377\327\327\327\377\327\327\327\377\327\327" + "\327\377\327\327\327\377\326\327\326\377\326\327\326\377\326\326\326\377\326" + "\326\326\377\326\326\326\377\326\326\326\377\326\326\326\377\326\326\326\377" + "\326\326\326\377\325\325\326\377\325\326\326\377\326\325\325\377\325\325\325" + "\377\325\326\325\377\325\325\325\377\325\325\325\377\325\325\325\377\325\325" + "\325\377\325\325\325\377\325\324\325\377\324\324\324\377\324\324\324\377\335" + "\335\335\377f\202\252\377\40J\207+\0\0\0\0\0\0\0\0\40J\207+g\203\253\377\340" + "\340\340\377\327\327\327\377\327\327\327\377\326\327\327\377\327\326\327\377" + "\326\326\326\377\326\326\327\377\326\326\326\377\326\326\326\377\326\326\326" + "\377\326\326\326\377\326\326\326\377\326\326\325\377\325\326\325\377\325\326" + "\326\377\325\325\325\377\325\325\325\377\325\325\325\377\325\325\325\377\325" + "\325\325\377\325\325\325\377\324\325\325\377\325\325\325\377\324\325\325\377" + "\324\324\324\377\325\324\324\377\324\324\324\377\324\324\324\377\324\324\324" + "\377\323\324\324\377\324\323\324\377\323\324\324\377\323\324\324\377\323\324" + "\323\377\323\323\324\377\323\323\323\377\323\323\323\377\323\323\323\377\323" + "\323\323\377\323\323\323\377\323\323\323\377\334\334\334\377f\202\252\377" + "\40J\207+\0\0\0\0\0\0\0\0\40J\207+g\203\253\377\337\336\337\377\325\325\325" + "\377\325\325\325\377\325\325\325\377\325\325\325\377\325\325\325\377\325\325" + "\325\377\325\325\324\377\325\325\325\377\324\325\324\377\324\324\324\377\324" + "\324\324\377\324\324\324\377\324\324\324\377\324\324\324\377\324\324\324\377" + "\324\324\324\377\324\323\323\377\323\323\323\377\324\323\323\377\323\323\323" + "\377\323\323\323\377\324\323\323\377\323\323\323\377\323\323\323\377\323\322" + "\323\377\323\322\322\377\322\322\322\377\322\322\322\377\322\322\322\377\322" + "\322\322\377\322\322\322\377\322\322\322\377\322\322\322\377\321\322\321\377" + "\321\321\322\377\321\321\321\377\321\321\321\377\321\321\321\377\321\321\321" + "\377\321\321\321\377\334\333\334\377g\202\252\377\40J\207+\0\0\0\0\0\0\0\0" + "\40J\207+h\203\253\377\336\336\336\377\323\324\323\377\324\323\324\377\324" + "\323\323\377\323\324\323\377\323\323\323\377\323\323\323\377\323\323\323\377" + "\323\323\323\377\323\323\323\377\323\323\323\377\322\323\323\377\323\322\323" + "\377\322\322\323\377\322\322\322\377\322\322\322\377\322\322\322\377\322\322" + "\322\377\322\322\322\377\322\322\322\377\322\322\322\377\321\321\321\377\322" + "\321\321\377\321\321\321\377\321\321\321\377\321\321\321\377\321\321\321\377" + "\321\321\320\377\321\321\321\377\321\321\321\377\321\321\321\377\320\320\320" + "\377\320\320\320\377\320\320\320\377\320\320\320\377\320\317\320\377\317\320" + "\320\377\320\320\320\377\320\320\320\377\320\320\320\377\320\317\317\377\332" + "\332\332\377g\202\252\377\40J\207+\0\0\0\0\0\0\0\0\40J\207+h\203\253\377\335" + "\335\335\377\322\322\322\377\322\322\322\377\322\322\322\377\321\322\322\377" + "\321\321\321\377\321\321\321\377\322\321\321\377\321\321\321\377\321\321\321" + "\377\321\321\321\377\321\321\321\377\321\320\321\377\320\321\320\377\320\320" + "\320\377\320\320\320\377\320\320\320\377\320\320\320\377\320\320\320\377\320" + "\320\320\377\320\320\320\377\320\320\320\377\320\320\320\377\317\320\320\377" + "\317\320\317\377\317\317\317\377\317\317\317\377\317\317\317\377\317\317\317" + "\377\317\317\317\377\316\317\317\377\317\317\317\377\317\316\316\377\316\316" + "\316\377\317\316\316\377\316\316\316\377\316\316\316\377\316\316\316\377\316" + "\316\316\377\316\316\316\377\316\316\316\377\331\331\331\377f\202\252\377" + "\40J\207+\0\0\0\0\0\0\0\0\40J\207+h\203\253\377\334\334\334\377\320\320\320" + "\377\320\320\320\377\320\320\320\377\320\320\320\377\320\320\320\377\320\320" + "\320\377\320\320\317\377\317\317\320\377\320\317\317\377\317\317\317\377\317" + "\317\317\377\317\317\317\377\317\317\317\377\317\317\317\377\317\317\317\377" + "\317\316\317\377\317\317\316\377\316\317\317\377\316\316\316\377\316\316\316" + "\377\316\316\316\377\316\316\316\377\316\316\316\377\316\316\316\377\316\315" + "\315\377\316\316\315\377\315\316\315\377\315\316\316\377\315\315\315\377\315" + "\315\315\377\315\315\315\377\315\315\315\377\315\314\315\377\315\315\315\377" + "\315\315\314\377\314\314\314\377\314\314\314\377\314\314\314\377\314\314\314" + "\377\314\314\314\377\331\330\331\377f\202\252\377\40J\207+\0\0\0\0\0\0\0\0" + "\40J\207+h\203\253\377\333\333\333\377\317\317\316\377\316\317\316\377\317" + "\316\316\377\317\316\316\377\316\317\316\377\316\316\316\377\316\316\316\377" + "\316\316\316\377\316\316\316\377\316\315\316\377\315\315\315\377\315\315\316" + "\377\315\315\315\377\315\315\315\377\315\315\315\377\315\315\315\377\315\315" + "\315\377\315\315\315\377\315\315\314\377\315\314\314\377\314\314\314\377\314" + "\315\314\377\314\314\314\377\314\314\314\377\314\314\314\377\314\314\314\377" + "\314\314\314\377\314\314\313\377\313\313\313\377\314\314\313\377\313\313\313" + "\377\313\313\313\377\313\313\313\377\313\313\313\377\313\313\313\377\313\313" + "\313\377\312\313\313\377\312\312\313\377\312\312\313\377\312\312\313\377\327" + "\327\327\377g\203\253\377\40J\207+\0\0\0\0\0\0\0\0\40J\207+h\203\253\377\332" + "\332\332\377\315\315\315\377\314\315\315\377\315\315\315\377\315\315\315\377" + "\314\315\315\377\314\314\315\377\314\314\314\377\314\314\314\377\314\314\314" + "\377\314\314\314\377\314\314\314\377\314\314\314\377\313\314\314\377\313\314" + "\313\377\313\313\313\377\313\313\313\377\313\313\313\377\313\313\313\377\313" + "\313\313\377\313\313\313\377\313\312\313\377\313\313\313\377\312\313\313\377" + "\313\313\313\377\312\312\312\377\312\312\312\377\312\312\312\377\312\312\312" + "\377\312\312\312\377\312\312\312\377\312\312\311\377\312\311\311\377\312\312" + "\311\377\311\311\311\377\311\311\311\377\311\311\311\377\311\311\311\377\311" + "\311\311\377\311\311\311\377\311\311\311\377\327\326\327\377g\203\253\377" + "\40J\207+\0\0\0\0\0\0\0\0\40J\207+g\203\253\377\331\331\331\377\313\313\313" + "\377\313\313\313\377\313\313\313\377\313\313\313\377\313\313\313\377\313\313" + "\313\377\312\312\313\377\312\313\313\377\312\312\312\377\312\312\312\377\312" + "\312\312\377\312\312\312\377\312\312\312\377\312\312\312\377\311\311\311\377" + "\312\312\312\377\311\311\311\377\311\311\311\377\311\312\311\377\311\311\311" + "\377\311\311\311\377\311\311\311\377\311\311\311\377\311\311\311\377\311\310" + "\311\377\310\310\310\377\310\310\310\377\310\310\310\377\310\310\310\377\310" + "\310\310\377\310\310\310\377\310\310\310\377\310\310\310\377\310\310\310\377" + "\307\307\310\377\310\307\310\377\307\307\307\377\307\307\307\377\307\307\307" + "\377\307\307\307\377\325\325\325\377g\203\253\377\40J\207+\0\0\0\0\0\0\0\0" + "\40J\207+h\204\254\377\330\330\331\377\312\312\311\377\312\312\311\377\312" + "\311\311\377\311\311\311\377\311\311\311\377\311\311\311\377\310\311\311\377" + "\311\311\311\377\311\311\311\377\311\310\311\377\311\310\310\377\311\311\311" + "\377\310\310\311\377\310\310\310\377\310\310\310\377\310\310\310\377\310\310" + "\310\377\310\310\310\377\307\310\307\377\310\310\310\377\307\307\307\377\307" + "\307\310\377\307\307\307\377\307\307\307\377\307\307\307\377\307\307\307\377" + "\307\307\307\377\307\307\307\377\306\306\307\377\306\307\307\377\306\306\306" + "\377\306\306\306\377\306\306\306\377\306\306\306\377\306\306\306\377\306\306" + "\306\377\305\306\306\377\305\306\305\377\305\306\306\377\305\306\306\377\325" + "\325\325\377g\203\253\377\40J\207+\0\0\0\0\0\0\0\0\40J\207+h\204\254\377\327" + "\327\327\377\310\310\310\377\310\310\310\377\310\310\310\377\310\307\307\377" + "\307\307\310\377\307\307\307\377\307\307\307\377\307\307\307\377\307\307\307" + "\377\307\307\307\377\307\307\307\377\307\307\307\377\307\306\306\377\307\306" + "\306\377\306\307\306\377\307\306\306\377\306\306\306\377\306\306\306\377\306" + "\306\306\377\306\306\306\377\306\306\306\377\306\306\306\377\305\305\305\377" + "\305\305\306\377\306\305\305\377\305\305\305\377\305\305\306\377\305\305\305" + "\377\305\305\305\377\305\305\305\377\305\304\305\377\304\304\304\377\304\304" + "\305\377\304\304\305\377\304\304\304\377\304\304\304\377\304\304\304\377\304" + "\304\304\377\304\304\304\377\304\304\304\377\324\324\324\377g\203\253\377" + "\40J\207+\0\0\0\0\0\0\0\0\40J\207+h\204\254\377\326\326\326\377\307\306\306" + "\377\306\306\306\377\306\306\306\377\306\306\306\377\306\306\306\377\306\305" + "\306\377\306\306\305\377\305\305\306\377\305\306\306\377\305\305\305\377\305" + "\305\305\377\305\305\305\377\305\305\305\377\305\305\305\377\305\305\305\377" + "\305\304\305\377\305\305\305\377\304\304\305\377\304\304\304\377\304\304\304" + "\377\304\304\304\377\304\304\304\377\304\304\304\377\304\304\304\377\304\304" + "\303\377\304\303\304\377\303\303\304\377\303\303\304\377\303\303\303\377\303" + "\303\303\377\303\302\303\377\303\303\303\377\303\303\303\377\303\302\303\377" + "\303\302\303\377\303\302\303\377\302\302\302\377\302\302\302\377\302\302\302" + "\377\302\302\302\377\323\323\323\377h\204\254\377\40J\207+\0\0\0\0\0\0\0\0" + "\40J\206+h\204\254\377\325\325\325\377\304\305\305\377\305\305\305\377\305" + "\304\304\377\304\304\305\377\304\305\305\377\304\304\304\377\305\304\305\377" + "\304\305\304\377\304\304\304\377\304\304\304\377\304\304\303\377\304\304\304" + "\377\304\304\303\377\303\303\304\377\303\303\303\377\304\303\303\377\303\303" + "\303\377\303\303\303\377\303\303\303\377\303\302\303\377\303\302\303\377\302" + "\303\303\377\302\302\303\377\302\303\303\377\302\303\302\377\302\302\302\377" + "\302\302\302\377\301\301\301\377\301\301\301\377\301\301\301\377\301\301\301" + "\377\301\301\301\377\301\301\301\377\301\301\301\377\301\301\301\377\301\301" + "\301\377\301\301\301\377\301\301\301\377\301\301\301\377\301\301\301\377\322" + "\322\322\377g\203\253\377\37H\204,\0\0\0\0\0\0\0\1\35Cy0f\202\252\377\350" + "\350\350\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" + "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" + "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" + "\344\377\344\344\344\377\344\344\344\377\343\343\343\377\343\343\343\377\344" + "\344\344\377\344\343\344\377\343\343\343\377\343\343\343\377\343\343\343\377" + "\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377\342\342\342" + "\377\342\342\342\377\342\342\342\377\342\342\342\377\342\342\342\377\342\342" + "\342\377\342\342\342\377\342\342\342\377\342\342\342\377\342\342\342\377\342" + "\342\342\377\342\342\342\377\342\342\342\377\347\347\347\377f\202\252\377" + "\33=p3\0\0\0\5\0\0\0\14\27""5`<+T\216\377<d\233\377<d\233\377<d\233\377<d" + "\233\377<d\233\377<d\233\377<c\233\377:b\232\377-U\217\377<c\233\377;c\233" + "\377:c\233\377:c\233\377:c\233\377:c\233\377:c\233\377:c\232\377:c\232\377" + ":b\232\377:c\232\377:c\232\377:b\232\377:b\232\377:b\232\3779b\232\3779b\232" + "\3779b\232\3779b\232\3779b\232\3779b\232\3779b\232\3779b\232\3778b\232\377" + "+U\217\3778a\231\3778a\232\3778a\232\3778a\232\3778a\232\3778a\232\3778a\232" + "\3777`\231\377)R\216\377\25""1YA\0\0\0\23\0\0\0\25\24.UD4_\234\377R\202\277" + "\377R\202\277\377R\202\277\377R\202\277\377R\202\277\377R\202\277\377R\202" + "\277\377N\177\273\3771^\232\377R\202\277\377Q\202\277\377Q\202\277\377Q\202" + "\277\377Q\202\277\377Q\202\277\377Q\202\277\377Q\201\276\377Q\201\276\377" + "P\201\276\377Q\201\276\377Q\201\276\377P\201\276\377P\201\276\377P\201\276" + "\377P\201\276\377P\201\276\377P\201\276\377P\201\276\377P\201\276\377P\201" + "\276\377O\200\276\377O\200\276\377O\200\276\3770]\232\377N\177\274\377O\200" + "\276\377O\200\276\377O\200\276\377N\200\276\377N\200\276\377N\200\276\377" + "N\177\275\3771]\233\377\22+OI\0\0\0\34\0\0\0\33\20%C@*S\214\377<b\227\377" + "<a\227\377<a\227\377<a\227\377<a\227\377<a\227\377<a\227\377;_\226\377-T\216" + "\377;`\226\377<a\227\377<a\227\377<a\227\377<a\227\377<a\227\377<a\227\377" + "<a\227\377<a\227\377<a\227\377;`\226\377;`\226\377;`\226\377;`\226\377;`\226" + "\377;`\226\377;`\226\377;`\226\377;`\226\377;`\226\377;`\226\377;`\226\377" + ";`\226\377;`\226\377-T\215\377;`\226\377;`\226\377;`\226\377;`\226\377;a\226" + "\377;a\226\377;a\226\377<a\227\377*R\214\377\17!=G\0\0\0#\0\0\0\33\3\7\14" + ")\31""6bw\30""4\\}\26""0W\205\25.S\214\25.R\215\25.R\215\25.R\215\25.R\215" + "\25.R\215\25.R\215\25.R\215\25.R\215\25.R\215\25.R\215\25.R\215\25.R\215\25" + ".R\215\25.R\215\25.R\215\25.R\215\25.R\215\25.R\215\25.R\215\25.R\215\25." + "R\215\25.R\215\25.R\215\25.R\215\25.R\215\25.R\215\25.R\215\25.R\215\25.R" + "\215\25.R\215\25.R\215\25.R\215\25.R\215\25.R\215\25.R\215\25.R\215\25-Q\217" + "\26/T\212\27""2Y\202\30""4^{\2\5\12""1\0\0\0#\0\0\0\25\0\0\0\37\0\0\0+\0\0" + "\0""4\0\0\0=\0\0\0C\0\0\0D\0\0\0C\0\0\0C\0\0\0C\0\0\0C\0\0\0C\0\0\0C\0\0\0" + "C\0\0\0C\0\0\0C\0\0\0C\0\0\0C\0\0\0C\0\0\0C\0\0\0C\0\0\0C\0\0\0C\0\0\0C\0" + "\0\0C\0\0\0C\0\0\0C\0\0\0C\0\0\0C\0\0\0C\0\0\0C\0\0\0C\0\0\0C\0\0\0C\0\0\0" + "C\0\0\0C\0\0\0C\0\0\0C\0\0\0C\0\0\0C\0\0\0C\0\0\0D\0\0\0F\0\0\0B\0\0\0:\0" + "\0\0""2\0\0\0&\0\0\0\35\0\0\0\15\0\0\0\26\0\0\0\40\0\0\0'\0\0\0/\0\0\0""3" + "\0\0\0""3\0\0\0""2\0\0\0""2\0\0\0""2\0\0\0""2\0\0\0""2\0\0\0""2\0\0\0""2\0" + "\0\0""2\0\0\0""2\0\0\0""2\0\0\0""2\0\0\0""2\0\0\0""2\0\0\0""2\0\0\0""2\0\0" + "\0""2\0\0\0""2\0\0\0""2\0\0\0""2\0\0\0""2\0\0\0""2\0\0\0""2\0\0\0""2\0\0\0" + """2\0\0\0""2\0\0\0""2\0\0\0""2\0\0\0""2\0\0\0""2\0\0\0""2\0\0\0""2\0\0\0""2" + "\0\0\0""2\0\0\0""2\0\0\0""3\0\0\0""5\0\0\0""2\0\0\0,\0\0\0%\0\0\0\34\0\0\0" + "\23\0\0\0\1\0\0\0\7\0\0\0\16\0\0\0\25\0\0\0\32\0\0\0\35\0\0\0\35\0\0\0\34" + "\0\0\0\34\0\0\0\34\0\0\0\34\0\0\0\34\0\0\0\34\0\0\0\34\0\0\0\34\0\0\0\34\0" + "\0\0\34\0\0\0\34\0\0\0\34\0\0\0\34\0\0\0\34\0\0\0\34\0\0\0\34\0\0\0\34\0\0" + "\0\34\0\0\0\34\0\0\0\34\0\0\0\34\0\0\0\34\0\0\0\34\0\0\0\34\0\0\0\34\0\0\0" + "\34\0\0\0\34\0\0\0\34\0\0\0\34\0\0\0\34\0\0\0\34\0\0\0\34\0\0\0\34\0\0\0\34" + "\0\0\0\35\0\0\0\36\0\0\0\35\0\0\0\30\0\0\0\23\0\0\0\12\0\0\0\3\0\0\0\0\0\0" + "\0\0\0\0\0\2\0\0\0\5\0\0\0\10\0\0\0\13\0\0\0\14\0\0\0\13\0\0\0\13\0\0\0\13" + "\0\0\0\13\0\0\0\13\0\0\0\13\0\0\0\13\0\0\0\13\0\0\0\13\0\0\0\13\0\0\0\13\0" + "\0\0\13\0\0\0\13\0\0\0\13\0\0\0\13\0\0\0\13\0\0\0\13\0\0\0\13\0\0\0\13\0\0" + "\0\13\0\0\0\13\0\0\0\13\0\0\0\13\0\0\0\13\0\0\0\13\0\0\0\13\0\0\0\13\0\0\0" + "\13\0\0\0\13\0\0\0\13\0\0\0\13\0\0\0\13\0\0\0\13\0\0\0\13\0\0\0\14\0\0\0\14" + "\0\0\0\12\0\0\0\6\0\0\0\3\0\0\0\0\0\0\0\0");
M render/test.crender/test.c

@@ -44,6 +44,7 @@ {

Window win; RrInstance *inst; RrAppearance *look; + int done; Window root; XEvent report;

@@ -67,8 +68,10 @@ root = RootWindow (ob_display, DefaultScreen (ob_display));

inst = RrInstanceNew(ob_display, ob_screen); look = RrAppearanceNew(inst, 0); - look->surface.grad = RR_SURFACE_PYRAMID; + look->surface.grad = RR_SURFACE_MIRROR_HORIZONTAL; look->surface.secondary = RrColorParse(inst, "Yellow"); + look->surface.split_secondary = RrColorParse(inst, "Red"); + look->surface.split_primary = RrColorParse(inst, "Green"); look->surface.primary = RrColorParse(inst, "Blue"); look->surface.interlaced = FALSE; if (ob_display == NULL) {

@@ -76,8 +79,21 @@ fprintf(stderr, "couldn't connect to X server :0\n");

return 0; } +#if BIGTEST + int i; + look->surface.pixel_data = g_new(RrPixel32, w*h); + for (i = 0; i < 10000; ++i) { + printf("\r%d", i); + fflush(stdout); + RrRender(look, w, h); + } + exit (0); +#endif + + RrPaint(look, win, w, h); - while (1) { + done = 0; + while (!done) { XNextEvent(ob_display, &report); switch (report.type) { case Expose:

@@ -87,8 +103,10 @@ RrPaint(look, win,

report.xconfigure.width, report.xconfigure.height); break; + case UnmapNotify: + done = 1; + break; } - } RrAppearanceFree (look);
M render/theme.crender/theme.c

@@ -177,9 +177,14 @@ } else

theme->osd_font = RrFontOpenDefault(inst); /* load direct dimensions */ - if (!read_int(db, "menu.overlap", &theme->menu_overlap) || - theme->menu_overlap < -100 || theme->menu_overlap > 100) - theme->menu_overlap = 0; + if ((!read_int(db, "menu.overlap.x", &theme->menu_overlap_x) && + !read_int(db, "menu.overlap", &theme->menu_overlap_x)) || + theme->menu_overlap_x < -100 || theme->menu_overlap_x > 100) + theme->menu_overlap_x = 0; + if ((!read_int(db, "menu.overlap.y", &theme->menu_overlap_y) && + !read_int(db, "menu.overlap", &theme->menu_overlap_y)) || + theme->menu_overlap_y < -100 || theme->menu_overlap_y > 100) + theme->menu_overlap_y = 0; if (!read_int(db, "window.handle.width", &theme->handle_height) || theme->handle_height < 0 || theme->handle_height > 100) theme->handle_height = 6;
M render/theme.hrender/theme.h

@@ -45,7 +45,8 @@ gint mbwidth; /*!< menu border width */

gint obwidth; /*!< osd border width */ gint cbwidthx; gint cbwidthy; - gint menu_overlap; + gint menu_overlap_x; + gint menu_overlap_y; /* these ones are calculated, not set directly by the theme file */ gint win_font_height; gint menu_title_font_height;
M tools/xdg-autostart/xdg-autostarttools/xdg-autostart/xdg-autostart

@@ -67,7 +67,7 @@ for autofile in files:

if list: autofile.list(environments) else: autofile.run(environments) -class AutostartFile(): +class AutostartFile: def __init__(self, path): self.path = path self.filename = os.path.basename(path)

@@ -178,7 +178,7 @@ print " --help Show this help and exit"

print " --version Show version and copyright information" print print "ENVIRONMENT specifies a list of environments for which to run autostart" - print "applications for. If none are specified, only applications which do not " + print "applications. If none are specified, only applications which do not " print "limit themselves to certain environments will be run." print print "ENVIRONMENT can be one or more of:"