TARFILES = README README.VMS README.debugging INSTALL xscreensaver.lsm \
configure configure.in Makefile.in config.h.in \
config.h-vms install-sh setup.com config.guess aclocal.m4 \
- config.sub makevms.com screenblank.txt \
- install-sh \
+ config.sub install-sh makevms.com \
intltool-merge.in intltool-extract.in intltool-update.in \
xscreensaver.lsm.sh xscreensaver.spec \
@S=$(srcdir)/xscreensaver.spec ; \
U=$(srcdir)/utils/version.h ; \
V=`sed -n 's/.*\([0-9][0-9]*\.[0-9]*\).*/\1/p' < $$U` ; \
- echo -n "Updating version number in $$S to \"$$V\"... " ; \
+ echo -n "Updating $$S to \"$$V\"... " ; \
T=/tmp/xs.$$$$ ; \
sed "s/^\(%define.version[^0-9]*\)\(.*\)/\1$$V/" \
< $$S > $$T ; \
============
+Changes since 4.03: * Support for GTK 2.x / GNOME 2.x.
+ * The `configure' script will now use `pkg-config' if
+ you have it, in preference to `gtk-config', etc.
+ * New hacks, `lavalite', `queens', and `anemone'.
+ * Minor updates to `spheremonics', `gltext', `xmatrix'.
+ * You can use the mouse to manually spin most of the GL
+ hacks now (when they are displaying in a window.)
+ * Fixed a bug in `webcollage' (due to recent Alta Vista
+ url changes) that was causing it to try and load
+ incorrect image URLs.
+ * Made `xscreensaver-getimage' use gdk_pixbuf if it is
+ available: this means that those hacks that load images
+ will no longer rely on "xv", "xloadimage", etc. This
+ will close a race condition that could sometimes cause
+ your desktop background to be changed; and also makes
+ it possible for those programs to operate on image
+ files when running in non-root mode.
+ * `webcollage' can now be used in conjunction with
+ `driftnet' to display images snooped from your local
+ ethernet instead of obtained from search engines.
+ * Added man pages for all the hacks that didn't have
+ them.
Changes since 4.02: * New hack, `spheremonics'.
* Minor updates to `webcollage', `cage', `moebius',
`morph3d', `boxed', `circuit', and `helix'.
*/
#undef HAVE_XMCOMBOBOX
-/* Define this if you have Gtk.
+/* Define this if you have Gtk (any version.)
*/
#undef HAVE_GTK
+/* Define this if you have Gtk 2.x.
+ */
+#undef HAVE_GTK2
+
/* Define this if you have Gnome and want to build support for the
xscreensaver control panel in the Gnome Control Center (gnomecc).
+ (This is needed only with Gtk 1.x.)
*/
#undef HAVE_CRAPPLET
--enable-locking Compile in support for locking the display.
--disable-locking Do not allow locking at all.
-
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
User interface options:
- --with-motif Use the Motif toolkit for the user interface.
+ --with-motif Use the Motif toolkit for the user interface
+ (not recommended.)
--with-gtk Use the Gtk toolkit for the user interface.
- --with-gnome Include support for the Gnome Control Center.
+ --with-gnome Include support for the Gnome 1.x Control Center.
+ (This option is not needed with GTK 2.x / Gnome 2.x.)
+
--with-xml The XML toolkit is needed for some parts of
- the Gtk interface.
+ the Gtk interface. Without it, the configuration
+ interface will be much less featureful.
Graphics options:
--with-gle Build those demos which depend on GLE
(the OpenGL "extrusion" library.)
--with-xpm Include support for XPM files in some demos.
+ (Not needed if Pixbuf is used.)
--with-pixbuf Include support for the GDK-Pixbuf library in some
demos, which will make it possible for them to read
- GIF, JPEG, and PNG files as well.
- --with-jpeg Include support for the JPEG library in some demos,
- which will make it possible for them to read JPEG
- files as well.
+ GIF, JPEG, and PNG files as well. (The path here is
+ ignored if GTK 2.x is being used.)
+ --with-jpeg Include support for the JPEG library in some demos.
+ (If this library is available, webcollage will be a
+ . lot faster.)
--with-xshm-ext Include support for the Shared Memory extension.
--with-xdbe-ext Include support for the DOUBLE-BUFFER extension.
--with-readdisplay Include support for the XReadDisplay extension.
if test "${ac_cv_gcc_accepts_std+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if ( gcc -E -std=c89 - </dev/null >/dev/null 2>&1 | \
+ if ( ( gcc -E -std=c89 - </dev/null >/dev/null ) 2>&1 | \
grep unrecognized >/dev/null ); then
ac_cv_gcc_accepts_std=no
else
-ALL_LINGUAS="ca de et fr it ko pl pt sv da es fi hu ja no pt pt_BR ru wa"
+# #### no sign of en_GB
+#ALL_LINGUAS="ca de en_GB et fr it ko pl sv da es fi hu ja no pt pt_BR ru wa"
+ALL_LINGUAS="ca de et fr it ko pl sv da es fi hu ja no pt pt_BR ru wa"
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ac_tool_prefix}ranlib; ac_word=$2
#fi
-
###############################################################################
#
# Check for PAM.
###############################################################################
have_gtk=no
+have_gtk2=no
with_gtk_req=unspecified
# Check whether --with-gtk or --without-gtk was given.
exit 1
fi
+parse_gtk_version_string() {
+ # M4 sucks!!
+
+ maj=`echo $ac_gtk_version_string | sed -n 's/\..*//p'`
+ min=`echo $ac_gtk_version_string | sed -n 's/[^.]*\.\([^.]*\).*/\1/p'`
+
+ ac_gtk_version=`echo "$maj * 1000 + $min" | bc`
+ if test -z "$ac_gtk_version"; then
+ ac_gtk_version=unknown
+ ac_gtk_version_string=unknown
+ fi
+}
+
jurassic_gtk=no
if test "$with_gtk" = yes; then
gtk_path="$foo:$gtk_path"
fi
- for ac_prog in glib12-config glib-config
+ for ac_prog in pkg-config
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_pkg_config+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $pkg_config in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_pkg_config="$pkg_config" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $gtk_path
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_pkg_config="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ ;;
+esac
+fi
+pkg_config=$ac_cv_path_pkg_config
+
+if test -n "$pkg_config"; then
+ echo "$as_me:$LINENO: result: $pkg_config" >&5
+echo "${ECHO_T}$pkg_config" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$pkg_config" && break
+done
+
+
+ if test -n "$pkg_config" ; then
+ #
+ # the new way...
+ # run pkg-config based tests.
+ #
+
+ pkgs=''
+ pkg_check_version() {
+ if test "$ok" = yes ; then
+ req="$1"
+ min="$2"
+ echo "$as_me:$LINENO: checking for $req" >&5
+echo $ECHO_N "checking for $req... $ECHO_C" >&6
+ if $pkg_config --exists "$req" ; then
+ vers=`$pkg_config --modversion "$req"`
+ if $pkg_config --exists "$req >= $min" ; then
+ echo "$as_me:$LINENO: result: $vers" >&5
+echo "${ECHO_T}$vers" >&6
+ pkgs="$pkgs $req"
+ return 1
+ else
+ echo "$as_me:$LINENO: result: $vers (wanted >= $min)" >&5
+echo "${ECHO_T}$vers (wanted >= $min)" >&6
+ ok=no
+ return 0
+ fi
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ ok=no
+ return 0
+ fi
+ fi
+ }
+
+ ok="yes"
+ pkg_check_version gtk+-2.0 2.0.1 ; ac_gtk_version_string="$vers"
+ pkg_check_version gmodule-2.0 2.0.0
+ pkg_check_version libxml-2.0 2.4.6
+ pkg_check_version libglade-2.0 1.99.0
+ have_gtk="$ok"
+
+ if test "$have_gtk" = yes; then
+ have_gtk2=yes
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_GTK2 1
+_ACEOF
+
+ fi
+
+ if test "$have_gtk" = no; then
+ #
+ # we don't have GTK 2. Let's look for GTK 1.
+ #
+ pkgs=''
+ ok="yes"
+ pkg_check_version gtk+ 1.2 ; ac_gtk_version_string="$vers"
+ pkg_check_version glib 1.0
+ have_gtk="$ok"
+
+ # Now check for Gnome...
+ #
+ if test "$have_gtk" = yes; then
+ old_pkgs="$pkgs"
+ ok=yes
+ pkg_check_version capplet 1.0
+ pkg_check_version gnomeui 1.0
+ pkg_check_version gdk_pixbuf 0.1
+ have_gnome="$ok"
+
+ if test "$have_gnome" = no; then
+ pkgs="$old_pkgs"
+ else
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_CRAPPLET 1
+_ACEOF
+
+ fi
+ fi
+ fi
+
+ if test "$have_gtk" = yes; then
+ parse_gtk_version_string
+ jurassic_gtk=no
+ else
+ have_gnome=no
+ fi
+
+ if test "$have_gtk" = yes; then
+ echo "$as_me:$LINENO: checking for Gtk includes" >&5
+echo $ECHO_N "checking for Gtk includes... $ECHO_C" >&6
+if test "${ac_cv_gtk_config_cflags+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_gtk_config_cflags=`$pkg_config --cflags $pkgs`
+fi
+echo "$as_me:$LINENO: result: $ac_cv_gtk_config_cflags" >&5
+echo "${ECHO_T}$ac_cv_gtk_config_cflags" >&6
+ echo "$as_me:$LINENO: checking for Gtk libs" >&5
+echo $ECHO_N "checking for Gtk libs... $ECHO_C" >&6
+if test "${ac_cv_gtk_config_libs+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_gtk_config_libs=`$pkg_config --libs $pkgs`
+fi
+echo "$as_me:$LINENO: result: $ac_cv_gtk_config_libs" >&5
+echo "${ECHO_T}$ac_cv_gtk_config_libs" >&6
+ fi
+ ac_gtk_config_cflags=$ac_cv_gtk_config_cflags
+ ac_gtk_config_libs=$ac_cv_gtk_config_libs
+
+ ac_gnome_config_cflags=$ac_gtk_config_cflags
+ ac_gnome_config_libs=$ac_gtk_config_libs
+
+ else
+ #
+ # the old way...
+ # run {gnome,gtk}-config based tests.
+ #
+
+ for ac_prog in glib12-config glib-config
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
test -n "$glib_config" && break
done
- for ac_prog in gtk12-config gtk-config
+ for ac_prog in gtk12-config gtk-config
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
done
- if test "$with_gnome" = yes; then
- for ac_prog in gnome-config
+ if test "$with_gnome" = yes; then
+ for ac_prog in gnome-config
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
test -n "$gnome_config" && break
done
- fi
+ fi
- if test -n "$glib_config" -a -n "$gtk_config" ; then
- have_gtk=yes
- if test "$with_gnome" = yes -a -n "$gnome_config" ; then
- have_gnome=yes
+ if test -n "$glib_config" -a -n "$gtk_config" ; then
+ have_gtk=yes
+ if test "$with_gnome" = yes -a -n "$gnome_config" ; then
+ have_gnome=yes
+ fi
fi
- fi
- if test "$have_gtk" = yes; then
- echo "$as_me:$LINENO: checking Gtk version number" >&5
+ if test "$have_gtk" = yes; then
+ echo "$as_me:$LINENO: checking Gtk version number" >&5
echo $ECHO_N "checking Gtk version number... $ECHO_C" >&6
if test "${ac_cv_gtk_version_string+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
fi
echo "$as_me:$LINENO: result: $ac_cv_gtk_version_string" >&5
echo "${ECHO_T}$ac_cv_gtk_version_string" >&6
- ac_gtk_version_string=$ac_cv_gtk_version_string
- # M4 sucks!!
+ ac_gtk_version_string=$ac_cv_gtk_version_string
+ fi
- maj=`echo $ac_gtk_version_string | sed -n 's/\..*//p'`
- min=`echo $ac_gtk_version_string | sed -n 's/[^.]*\.\([^.]*\).*/\1/p'`
+ parse_gtk_version_string
- ac_gtk_version=`echo "$maj * 1000 + $min" | bc`
- if test -z "$ac_gtk_version"; then
- ac_gtk_version=unknown
- ac_gtk_version_string=unknown
- fi
if test "$ac_gtk_version" = "unknown" || test "$ac_gtk_version" -lt 1002
then
have_gtk=no
have_gnome=no
jurassic_gtk=yes
fi
- fi
- if test "$have_gtk" = yes; then
- echo "$as_me:$LINENO: checking for Gtk includes" >&5
+ if test "$have_gtk" = yes; then
+ echo "$as_me:$LINENO: checking for Gtk includes" >&5
echo $ECHO_N "checking for Gtk includes... $ECHO_C" >&6
if test "${ac_cv_gtk_config_cflags+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
fi
echo "$as_me:$LINENO: result: $ac_cv_gtk_config_cflags" >&5
echo "${ECHO_T}$ac_cv_gtk_config_cflags" >&6
- echo "$as_me:$LINENO: checking for Gtk libs" >&5
+ echo "$as_me:$LINENO: checking for Gtk libs" >&5
echo $ECHO_N "checking for Gtk libs... $ECHO_C" >&6
if test "${ac_cv_gtk_config_libs+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
fi
echo "$as_me:$LINENO: result: $ac_cv_gtk_config_libs" >&5
echo "${ECHO_T}$ac_cv_gtk_config_libs" >&6
- fi
- ac_gtk_config_cflags=$ac_cv_gtk_config_cflags
- ac_gtk_config_libs=$ac_cv_gtk_config_libs
+ fi
+ ac_gtk_config_cflags=$ac_cv_gtk_config_cflags
+ ac_gtk_config_libs=$ac_cv_gtk_config_libs
- # Check for Gnome Capplet support.
- #
- if test "$have_gnome" = yes -a "$have_gtk" = yes; then
- gnome_config_libs="gtk capplet gnomeui gdk_pixbuf"
- echo "$as_me:$LINENO: checking for Gnome capplet includes" >&5
+ # Check for Gnome Capplet support.
+ #
+ if test "$have_gnome" = yes -a "$have_gtk" = yes; then
+ gnome_config_libs="gtk capplet gnomeui gdk_pixbuf"
+ echo "$as_me:$LINENO: checking for Gnome capplet includes" >&5
echo $ECHO_N "checking for Gnome capplet includes... $ECHO_C" >&6
- if test "${ac_cv_gnome_config_cflags+set}" = set; then
+ if test "${ac_cv_gnome_config_cflags+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if ( $gnome_config --cflags $gnome_config_libs >/dev/null 2>&1 | \
- grep Unknown >/dev/null ) ; then
- ac_cv_gnome_config_cflags=''
- else
- ac_cv_gnome_config_cflags=`$gnome_config --cflags $gnome_config_libs`
- fi
+ grep Unknown >/dev/null ) ; then
+ ac_cv_gnome_config_cflags=''
+ else
+ ac_cv_gnome_config_cflags=`$gnome_config --cflags $gnome_config_libs`
+ fi
fi
- ac_gnome_config_cflags=$ac_cv_gnome_config_cflags
- if test "$ac_gnome_config_cflags" = "" ; then
- have_gnome=no
- echo "$as_me:$LINENO: result: no" >&5
+ ac_gnome_config_cflags=$ac_cv_gnome_config_cflags
+ if test "$ac_gnome_config_cflags" = "" ; then
+ have_gnome=no
+ echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
- else
- echo "$as_me:$LINENO: result: $ac_gnome_config_cflags" >&5
+ else
+ echo "$as_me:$LINENO: result: $ac_gnome_config_cflags" >&5
echo "${ECHO_T}$ac_gnome_config_cflags" >&6
+ fi
fi
- fi
- if test "$have_gnome" = yes -a "$have_gtk" = yes; then
- echo "$as_me:$LINENO: checking for Gnome capplet libs" >&5
+ if test "$have_gnome" = yes -a "$have_gtk" = yes; then
+ echo "$as_me:$LINENO: checking for Gnome capplet libs" >&5
echo $ECHO_N "checking for Gnome capplet libs... $ECHO_C" >&6
- if test "${ac_cv_gnome_config_libs+set}" = set; then
+ if test "${ac_cv_gnome_config_libs+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if ( $gnome_config --libs $gnome_config_libs >/dev/null 2>&1 |
- grep Unknown >/dev/null ) ; then
- ac_cv_gnome_config_libs=''
- else
- ac_cv_gnome_config_libs=`$gnome_config --libs $gnome_config_libs`
- fi
+ grep Unknown >/dev/null ) ; then
+ ac_cv_gnome_config_libs=''
+ else
+ ac_cv_gnome_config_libs=`$gnome_config --libs $gnome_config_libs`
+ fi
fi
- ac_gnome_config_libs=$ac_cv_gnome_config_libs
- if test "$ac_gnome_config_libs" = "" ; then
- have_gnome=no
- echo "$as_me:$LINENO: result: no" >&5
+ ac_gnome_config_libs=$ac_cv_gnome_config_libs
+ if test "$ac_gnome_config_libs" = "" ; then
+ have_gnome=no
+ echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
- else
- echo "$as_me:$LINENO: result: $ac_gnome_config_libs" >&5
+ else
+ echo "$as_me:$LINENO: result: $ac_gnome_config_libs" >&5
echo "${ECHO_T}$ac_gnome_config_libs" >&6
+ fi
fi
- fi
- GNOME_DATADIR=""
- if test "$have_gnome" = yes -a "$have_gtk" = yes; then
- GNOME_DATADIR=`$gnome_config --datadir`
- fi
-
-
- # If we have Gnome, then override the gtk-config values with
- # the gnome-config values.
- #
- if test "$have_gnome" = yes -a "$have_gtk" = yes; then
- ac_gtk_config_cflags=$ac_gnome_config_cflags
- ac_gtk_config_libs=$ac_gnome_config_libs
- cat >>confdefs.h <<\_ACEOF
+ # If we have Gnome, then override the gtk-config values with
+ # the gnome-config values.
+ #
+ if test "$have_gnome" = yes -a "$have_gtk" = yes; then
+ ac_gtk_config_cflags=$ac_gnome_config_cflags
+ ac_gtk_config_libs=$ac_gnome_config_libs
+ cat >>confdefs.h <<\_ACEOF
#define HAVE_CRAPPLET 1
_ACEOF
+ fi
+
+ fi # end of {gnome,gtk}-config based tests
+ if test "$have_gtk" = yes -a "$have_gtk2" = no; then
# check for this function that was not in libcapplet 1.2.
ac_save_CPPFLAGS="$CPPFLAGS"
fi
+ GNOME_DATADIR=""
+ if test "$have_gnome" = yes -a "$have_gtk" = yes; then
+ if test -n "$gnome_config"; then
+ GNOME_DATADIR=`$gnome_config --datadir`
+ else
+ #### is this right?
+ GNOME_DATADIR=`$pkg_config --variable=prefix gtk+`
+ GNOME_DATADIR="$GNOME_DATADIR/share"
+ fi
+ fi
+
+ # .desktop files go in different places in Gnome 1.x and Gnome 2.x...
+ if test "$have_gtk2" = yes; then
+ GNOME_PANELDIR='$(GNOME_PANELDIR2)'
+ else
+ GNOME_PANELDIR='$(GNOME_PANELDIR1)'
+ fi
+
+
if test "$have_gtk" = yes; then
INCLUDES="$INCLUDES $ac_gtk_config_cflags"
GTK_LIBS="$GTK_LIBS $ac_gtk_config_libs"
#define HAVE_GTK 1
_ACEOF
+
+ if test "$have_gtk2" = yes; then
+ GTK_EXTRA_OBJS=""
+ else
+ GTK_EXTRA_OBJS="\$(GTK_EXTRA_OBJS)"
+ fi
fi
fi
xml_path="$foo:$xml_path"
fi
- for ac_prog in xml2-config xml-config
+ if test -n "$pkg_config" ; then
+ #
+ # the new way...
+ # run pkg-config based tests.
+ #
+ pkgs=""
+ ok="yes"
+ pkg_check_version xml2 1.0
+
+ if test "$ok" = no; then
+ ok=yes
+ pkg_check_version xml 1.0
+ fi
+
+ have_xml="$ok"
+
+ if test "$have_xml" = yes; then
+ echo "$as_me:$LINENO: checking for XML includes" >&5
+echo $ECHO_N "checking for XML includes... $ECHO_C" >&6
+if test "${ac_cv_xml_config_cflags+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_xml_config_cflags=`$pkg_config --cflags $pkgs`
+fi
+echo "$as_me:$LINENO: result: $ac_cv_xml_config_cflags" >&5
+echo "${ECHO_T}$ac_cv_xml_config_cflags" >&6
+ echo "$as_me:$LINENO: checking for XML libs" >&5
+echo $ECHO_N "checking for XML libs... $ECHO_C" >&6
+if test "${ac_cv_xml_config_libs+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_xml_config_libs=`$pkg_config --libs $pkgs`
+fi
+echo "$as_me:$LINENO: result: $ac_cv_xml_config_libs" >&5
+echo "${ECHO_T}$ac_cv_xml_config_libs" >&6
+ ac_xml_config_cflags=$ac_cv_xml_config_cflags
+ ac_xml_config_libs=$ac_cv_xml_config_libs
+ fi
+
+ else
+ #
+ # the old way...
+ # run {gnome,gtk}-config based tests.
+ #
+
+ for ac_prog in xml2-config xml-config
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
done
- # If we found the xml-config program, run it to get flags.
- #
- if test -n "$xml_config" ; then
- echo "$as_me:$LINENO: checking for XML includes" >&5
+ # If we found the xml-config program, run it to get flags.
+ #
+ if test -n "$xml_config" ; then
+ echo "$as_me:$LINENO: checking for XML includes" >&5
echo $ECHO_N "checking for XML includes... $ECHO_C" >&6
if test "${ac_cv_xml_config_cflags+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
fi
echo "$as_me:$LINENO: result: $ac_cv_xml_config_cflags" >&5
echo "${ECHO_T}$ac_cv_xml_config_cflags" >&6
- echo "$as_me:$LINENO: checking for XML libs" >&5
+ echo "$as_me:$LINENO: checking for XML libs" >&5
echo $ECHO_N "checking for XML libs... $ECHO_C" >&6
if test "${ac_cv_xml_config_libs+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
fi
echo "$as_me:$LINENO: result: $ac_cv_xml_config_libs" >&5
echo "${ECHO_T}$ac_cv_xml_config_libs" >&6
- ac_xml_config_cflags=$ac_cv_xml_config_cflags
- ac_xml_config_libs=$ac_cv_xml_config_libs
- fi
+ ac_xml_config_cflags=$ac_cv_xml_config_cflags
+ ac_xml_config_libs=$ac_cv_xml_config_libs
+ fi
- ac_save_xml_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS $ac_xml_config_cflags"
+ ac_save_xml_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $ac_xml_config_cflags"
- # first try <libxml/parser.h> which is the new way...
- #
+ # first try <libxml/parser.h> which is the new way...
+ #
ac_save_CPPFLAGS="$CPPFLAGS"
if test \! -z "$includedir" ; then
CPPFLAGS="$ac_save_CPPFLAGS"
- # if that didn't work, then try just <parser.h> which is the old way...
- #
- if test "$have_xml" = no; then
+ # if that didn't work, then try just <parser.h> which is the old way...
+ #
+ if test "$have_xml" = no; then
ac_save_CPPFLAGS="$CPPFLAGS"
if test \! -z "$includedir" ; then
CPPFLAGS="$ac_save_CPPFLAGS"
+ fi
+
+ CPPFLAGS="$ac_save_xml_CPPFLAGS"
fi
- CPPFLAGS="$ac_save_xml_CPPFLAGS"
have_zlib=no
if test "$have_xml" = yes; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat > conftest.$ac_ext <<EOF
-#line 14252 "configure"
+#line 14500 "configure"
#include "confdefs.h"
#include <GL/gl.h>
#ifndef MESA_MAJOR_VERSION
fi
CPPFLAGS="$CPPFLAGS $X_CFLAGS"
-# With autoconf 2.13 we could do this:
-#
-# changequote(X,Y)
-# mglv=`(eval "$ac_cpp conftest.$ac_ext") 2>&AC_FD_CC | sed -n \
-# 's/^configure:.*\([0-9][0-9]*\).*\([0-9][0-9]*\).*$/\1.\2/p'`
-# changequote([,])
-#
-# but with autoconf 2.52+ (m4 1.4) that causes an error:
-# m4: ERROR: Recursion limit of 1024 exceeded, use -L<N> to change it
-#
-# So, we need to use the autoconf line-noise macros [ for [ and ] for ]
-#
- mglv=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | sed -n \
- 's/^configure:.*\([0-9][0-9]*\).*\([0-9][0-9]*\).*$/\1.\2/p'`
+ mglv=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | grep configure:`
+
+ # M4 sucks!!
+
+ mglv=`echo "$mglv" | sed -n \
+ 's/^configure:.*\([0-9][0-9]*\).*\([0-9][0-9]*\).*$/\1.\2/p'`
rm -f conftest.$ac_ext
if test "$with_gdk_pixbuf" = yes; then
have_gdk_pixbuf=no
+ have_gdk_pixbuf2=no
- # if the user specified --with-gtk=/foo/ or --with-gnome=/foo/ then
- # look in /foo/bin/ for for gdk-pixbuf-config.
- #
- gdk_pixbuf_path="$PATH"
+ if test -n "$pkg_config" ; then
+ #
+ # the new way...
+ # run pkg-config based tests.
+ #
+ pkgs=''
+ ok="yes"
+ pkg_check_version gdk-pixbuf-2.0 2.0.0
+ pkg_check_version gdk-pixbuf-xlib-2.0 2.0.0
+ have_gdk_pixbuf="$ok"
+ have_gdk_pixbuf2="$ok"
+
+ if test "$have_gdk_pixbuf2" = no; then
+ #
+ # We don't have pixbuf 2.x; check for 1.x.
+ #
+ pkgs=''
+ ok="yes"
+ pkg_check_version gdk-pixbuf 0.0
+ pkg_check_version gdk-pixbuf-xlib 0.0
+ have_gdk_pixbuf="$ok"
+ fi
- if test ! -z "$gtk_dir"; then
- # canonicalize slashes.
- foo=`echo "${gtk_dir}/bin" | sed 's@//*@/@g'`
- gdk_pixbuf_path="$foo:$gdk_pixbuf_path"
+ if test "$have_gdk_pixbuf" = yes; then
+ echo "$as_me:$LINENO: checking for gdk-pixbuf includes" >&5
+echo $ECHO_N "checking for gdk-pixbuf includes... $ECHO_C" >&6
+if test "${ac_cv_gdk_pixbuf_config_cflags+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_gdk_pixbuf_config_cflags=`$pkg_config --cflags $pkgs`
+fi
+echo "$as_me:$LINENO: result: $ac_cv_gdk_pixbuf_config_cflags" >&5
+echo "${ECHO_T}$ac_cv_gdk_pixbuf_config_cflags" >&6
+ echo "$as_me:$LINENO: checking for gdk-pixbuf libs" >&5
+echo $ECHO_N "checking for gdk-pixbuf libs... $ECHO_C" >&6
+if test "${ac_cv_gdk_pixbuf_config_libs+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_gdk_pixbuf_config_libs=`$pkg_config --libs $pkgs`
+fi
+echo "$as_me:$LINENO: result: $ac_cv_gdk_pixbuf_config_libs" >&5
+echo "${ECHO_T}$ac_cv_gdk_pixbuf_config_libs" >&6
+ fi
+ ac_gdk_pixbuf_config_cflags=$ac_cv_gdk_pixbuf_config_cflags
+ ac_gdk_pixbuf_config_libs=$ac_cv_gdk_pixbuf_config_libs
fi
- if test ! -z "$gnome_dir"; then
- # canonicalize slashes.
- foo=`echo "${gnome_dir}/bin" | sed 's@//*@/@g'`
- gdk_pixbuf_path="$foo:$gdk_pixbuf_path"
- fi
+ if test "$have_gdk_pixbuf" = no; then
+ #
+ # the old way...
+ # run gdk-pixbuf-config based tests.
+ # note that we can't assume that the existence of "pkg-config" means
+ # that we don't have to look for gdk-pixbuf-config -- in Gnome 1.4,
+ # pkg-config exists, but doesn't know about pixbuf.
+ #
- for ac_prog in gdk-pixbuf-config
+ # if the user specified --with-gtk=/foo/ or --with-gnome=/foo/ then
+ # look in /foo/bin/ for for gdk-pixbuf-config.
+ #
+ gdk_pixbuf_path="$PATH"
+
+ if test ! -z "$gtk_dir"; then
+ # canonicalize slashes.
+ foo=`echo "${gtk_dir}/bin" | sed 's@//*@/@g'`
+ gdk_pixbuf_path="$foo:$gdk_pixbuf_path"
+ fi
+
+ if test ! -z "$gnome_dir"; then
+ # canonicalize slashes.
+ foo=`echo "${gnome_dir}/bin" | sed 's@//*@/@g'`
+ gdk_pixbuf_path="$foo:$gdk_pixbuf_path"
+ fi
+
+ for ac_prog in gdk-pixbuf-config
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
done
- # If we found the gdk-pixbuf-config program, run it to get flags.
- #
- if test -n "$gdk_pixbuf_config" ; then
- echo "$as_me:$LINENO: checking for gdk-pixbuf includes" >&5
+ # If we found the gdk-pixbuf-config program, run it to get flags.
+ #
+ if test -n "$gdk_pixbuf_config" ; then
+ echo "$as_me:$LINENO: checking for gdk-pixbuf includes" >&5
echo $ECHO_N "checking for gdk-pixbuf includes... $ECHO_C" >&6
if test "${ac_cv_gdk_pixbuf_config_cflags+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
fi
echo "$as_me:$LINENO: result: $ac_cv_gdk_pixbuf_config_cflags" >&5
echo "${ECHO_T}$ac_cv_gdk_pixbuf_config_cflags" >&6
- echo "$as_me:$LINENO: checking for gdk-pixbuf libs" >&5
+ echo "$as_me:$LINENO: checking for gdk-pixbuf libs" >&5
echo $ECHO_N "checking for gdk-pixbuf libs... $ECHO_C" >&6
if test "${ac_cv_gdk_pixbuf_config_libs+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
fi
echo "$as_me:$LINENO: result: $ac_cv_gdk_pixbuf_config_libs" >&5
echo "${ECHO_T}$ac_cv_gdk_pixbuf_config_libs" >&6
- ac_gdk_pixbuf_config_cflags=$ac_cv_gdk_pixbuf_config_cflags
- ac_gdk_pixbuf_config_libs=$ac_cv_gdk_pixbuf_config_libs
+
+ # note that "gdk-pixbuf-config --libs" produces a link line including
+ # -lgdk_pixbuf, but there's no way to get it to produce one that also
+ # includes -lgdk_pixbuf_xlib. Since we don't know *exactly* what the
+ # name of the library will be, construct it with sed...
+ # M4 sucks!!
+
+ ac_cv_gdk_pixbuf_config_libs=`echo $ac_cv_gdk_pixbuf_config_libs | \
+ sed 's@ \(-lgdk_pixbuf\([-_a-zA-Z0-9.]*\)\) @ \1 -lgdk_pixbuf_xlib\2 @'`
+
+
+ ac_gdk_pixbuf_config_cflags=$ac_cv_gdk_pixbuf_config_cflags
+ ac_gdk_pixbuf_config_libs=$ac_cv_gdk_pixbuf_config_libs
+ fi
fi
ac_save_gdk_pixbuf_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $ac_gdk_pixbuf_config_cflags"
- # check for header 1...
+ if test "$have_gdk_pixbuf" = no; then
+ #
+ # we appear to have pixbuf; check for headers/libs to be sure.
+ #
+
+ have_gdk_pixbuf=no
+
+ # check for header 1...
ac_save_CPPFLAGS="$CPPFLAGS"
if test \! -z "$includedir" ; then
CPPFLAGS="$ac_save_CPPFLAGS"
- # if that worked, check for header 2...
- if test "$have_gdk_pixbuf" = yes; then
- have_gdk_pixbuf=no
+ # if that worked, check for header 2...
+ if test "$have_gdk_pixbuf" = yes; then
+ have_gdk_pixbuf=no
+ gdk_pixbuf_halfassed=yes
ac_save_CPPFLAGS="$CPPFLAGS"
if test \! -z "$includedir" ; then
fi
if test $ac_cv_header_gdk_pixbuf_gdk_pixbuf_xlib_h = yes; then
have_gdk_pixbuf=yes
+ gdk_pixbuf_halfassed=no
+fi
+
+
+ CPPFLAGS="$ac_save_CPPFLAGS"
+
+ # yay, it has a new name in GTK2...
+ if test "$have_gdk_pixbuf" = no; then
+ have_gdk_pixbuf=no
+ gdk_pixbuf_halfassed=yes
+
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ if test \! -z "$includedir" ; then
+ CPPFLAGS="$CPPFLAGS -I$includedir"
+ fi
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+ if test "${ac_cv_header_gdk_pixbuf_xlib_gdk_pixbuf_xlib_h+set}" = set; then
+ echo "$as_me:$LINENO: checking for gdk-pixbuf-xlib/gdk-pixbuf-xlib.h" >&5
+echo $ECHO_N "checking for gdk-pixbuf-xlib/gdk-pixbuf-xlib.h... $ECHO_C" >&6
+if test "${ac_cv_header_gdk_pixbuf_xlib_gdk_pixbuf_xlib_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_gdk_pixbuf_xlib_gdk_pixbuf_xlib_h" >&5
+echo "${ECHO_T}$ac_cv_header_gdk_pixbuf_xlib_gdk_pixbuf_xlib_h" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking gdk-pixbuf-xlib/gdk-pixbuf-xlib.h usability" >&5
+echo $ECHO_N "checking gdk-pixbuf-xlib/gdk-pixbuf-xlib.h usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+$ac_includes_default
+#include <gdk-pixbuf-xlib/gdk-pixbuf-xlib.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_header_compiler=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking gdk-pixbuf-xlib/gdk-pixbuf-xlib.h presence" >&5
+echo $ECHO_N "checking gdk-pixbuf-xlib/gdk-pixbuf-xlib.h presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <gdk-pixbuf-xlib/gdk-pixbuf-xlib.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc in
+ yes:no )
+ { echo "$as_me:$LINENO: WARNING: gdk-pixbuf-xlib/gdk-pixbuf-xlib.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: gdk-pixbuf-xlib/gdk-pixbuf-xlib.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: gdk-pixbuf-xlib/gdk-pixbuf-xlib.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: gdk-pixbuf-xlib/gdk-pixbuf-xlib.h: proceeding with the preprocessor's result" >&2;};;
+ no:yes )
+ { echo "$as_me:$LINENO: WARNING: gdk-pixbuf-xlib/gdk-pixbuf-xlib.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: gdk-pixbuf-xlib/gdk-pixbuf-xlib.h: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: gdk-pixbuf-xlib/gdk-pixbuf-xlib.h: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: gdk-pixbuf-xlib/gdk-pixbuf-xlib.h: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: gdk-pixbuf-xlib/gdk-pixbuf-xlib.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: gdk-pixbuf-xlib/gdk-pixbuf-xlib.h: proceeding with the preprocessor's result" >&2;};;
+esac
+echo "$as_me:$LINENO: checking for gdk-pixbuf-xlib/gdk-pixbuf-xlib.h" >&5
+echo $ECHO_N "checking for gdk-pixbuf-xlib/gdk-pixbuf-xlib.h... $ECHO_C" >&6
+if test "${ac_cv_header_gdk_pixbuf_xlib_gdk_pixbuf_xlib_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_header_gdk_pixbuf_xlib_gdk_pixbuf_xlib_h=$ac_header_preproc
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_gdk_pixbuf_xlib_gdk_pixbuf_xlib_h" >&5
+echo "${ECHO_T}$ac_cv_header_gdk_pixbuf_xlib_gdk_pixbuf_xlib_h" >&6
+
+fi
+if test $ac_cv_header_gdk_pixbuf_xlib_gdk_pixbuf_xlib_h = yes; then
+ have_gdk_pixbuf=yes
+ gdk_pixbuf_halfassed=no
fi
CPPFLAGS="$ac_save_CPPFLAGS"
+ fi
+ fi
fi
CPPFLAGS="$ac_save_gdk_pixbuf_CPPFLAGS"
# we have the headers, now check for the libraries
have_gdk_pixbuf=no
gdk_pixbuf_halfassed=yes
+
# library 1...
ac_save_CPPFLAGS="$CPPFLAGS"
# note: $X_LIBS includes $x_libraries
LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
- echo "$as_me:$LINENO: checking for gdk_pixbuf_new_from_file in -lgdk_pixbuf" >&5
-echo $ECHO_N "checking for gdk_pixbuf_new_from_file in -lgdk_pixbuf... $ECHO_C" >&6
-if test "${ac_cv_lib_gdk_pixbuf_gdk_pixbuf_new_from_file+set}" = set; then
+ echo "$as_me:$LINENO: checking for gdk_pixbuf_new_from_file in -lc" >&5
+echo $ECHO_N "checking for gdk_pixbuf_new_from_file in -lc... $ECHO_C" >&6
+if test "${ac_cv_lib_c_gdk_pixbuf_new_from_file+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
-LIBS="-lgdk_pixbuf $ac_gdk_pixbuf_config_libs $LIBS"
+LIBS="-lc $ac_gdk_pixbuf_config_libs -lX11 -lXext -lm $LIBS"
cat >conftest.$ac_ext <<_ACEOF
#line $LINENO "configure"
#include "confdefs.h"
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_lib_gdk_pixbuf_gdk_pixbuf_new_from_file=yes
+ ac_cv_lib_c_gdk_pixbuf_new_from_file=yes
else
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
-ac_cv_lib_gdk_pixbuf_gdk_pixbuf_new_from_file=no
+ac_cv_lib_c_gdk_pixbuf_new_from_file=no
fi
rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_gdk_pixbuf_gdk_pixbuf_new_from_file" >&5
-echo "${ECHO_T}$ac_cv_lib_gdk_pixbuf_gdk_pixbuf_new_from_file" >&6
-if test $ac_cv_lib_gdk_pixbuf_gdk_pixbuf_new_from_file = yes; then
+echo "$as_me:$LINENO: result: $ac_cv_lib_c_gdk_pixbuf_new_from_file" >&5
+echo "${ECHO_T}$ac_cv_lib_c_gdk_pixbuf_new_from_file" >&6
+if test $ac_cv_lib_c_gdk_pixbuf_new_from_file = yes; then
have_gdk_pixbuf=yes
-else
- true
fi
CPPFLAGS="$ac_save_CPPFLAGS"
# library 2...
if test "$have_gdk_pixbuf" = yes; then
+ have_gdk_pixbuf=no
ac_save_CPPFLAGS="$CPPFLAGS"
ac_save_LDFLAGS="$LDFLAGS"
# note: $X_LIBS includes $x_libraries
LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
- echo "$as_me:$LINENO: checking for gdk_pixbuf_xlib_init in -lgdk_pixbuf_xlib" >&5
-echo $ECHO_N "checking for gdk_pixbuf_xlib_init in -lgdk_pixbuf_xlib... $ECHO_C" >&6
-if test "${ac_cv_lib_gdk_pixbuf_xlib_gdk_pixbuf_xlib_init+set}" = set; then
+ echo "$as_me:$LINENO: checking for gdk_pixbuf_xlib_init in -lc" >&5
+echo $ECHO_N "checking for gdk_pixbuf_xlib_init in -lc... $ECHO_C" >&6
+if test "${ac_cv_lib_c_gdk_pixbuf_xlib_init+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
-LIBS="-lgdk_pixbuf_xlib $ac_gdk_pixbuf_config_libs $LIBS"
+LIBS="-lc $ac_gdk_pixbuf_config_libs -lX11 -lXext -lm $LIBS"
cat >conftest.$ac_ext <<_ACEOF
#line $LINENO "configure"
#include "confdefs.h"
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_lib_gdk_pixbuf_xlib_gdk_pixbuf_xlib_init=yes
+ ac_cv_lib_c_gdk_pixbuf_xlib_init=yes
else
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
-ac_cv_lib_gdk_pixbuf_xlib_gdk_pixbuf_xlib_init=no
+ac_cv_lib_c_gdk_pixbuf_xlib_init=no
fi
rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_gdk_pixbuf_xlib_gdk_pixbuf_xlib_init" >&5
-echo "${ECHO_T}$ac_cv_lib_gdk_pixbuf_xlib_gdk_pixbuf_xlib_init" >&6
-if test $ac_cv_lib_gdk_pixbuf_xlib_gdk_pixbuf_xlib_init = yes; then
+echo "$as_me:$LINENO: result: $ac_cv_lib_c_gdk_pixbuf_xlib_init" >&5
+echo "${ECHO_T}$ac_cv_lib_c_gdk_pixbuf_xlib_init" >&6
+if test $ac_cv_lib_c_gdk_pixbuf_xlib_init = yes; then
have_gdk_pixbuf=yes
gdk_pixbuf_halfassed=no
-else
- true
fi
CPPFLAGS="$ac_save_CPPFLAGS"
if test "$have_gdk_pixbuf" = yes; then
INCLUDES="$INCLUDES $ac_gdk_pixbuf_config_cflags"
- XPM_LIBS="$ac_gdk_pixbuf_config_libs -lgdk_pixbuf -lgdk_pixbuf_xlib"
+ XPM_LIBS="$ac_gdk_pixbuf_config_libs"
cat >>confdefs.h <<\_ACEOF
#define HAVE_GDK_PIXBUF 1
_ACEOF
+ else
+ have_gdk_pixbuf2=no
fi
fi
-# After computing $HACK_CONF_DIR, make sure $GTK_ICONDIR has a value
+# After computing $HACK_CONF_DIR, make sure $GLADE_DATADIR has a value
# so that we know where to install the Gtk pixmaps.
#
if test -n "$GNOME_DATADIR" ; then
- GTK_ICONDIR='$(GNOME_DATADIR)/pixmaps'
+ GLADE_DATADIR='$(GNOME_DATADIR)/xscreensaver'
elif test "$have_gtk" = yes; then
# should this be "$(prefix)/share/pixmaps"? But /usr/X11R6/share/ is wrong...
- GTK_ICONDIR='/usr/share/pixmaps'
+ GLADE_DATADIR='/usr/share/xscreensaver'
else
- GTK_ICONDIR=''
+ GLADE_DATADIR=''
fi
+
+
s,@POFILES@,$POFILES,;t t
s,@POSUB@,$POSUB,;t t
s,@MKINSTALLDIRS@,$MKINSTALLDIRS,;t t
+s,@pkg_config@,$pkg_config,;t t
s,@glib_config@,$glib_config,;t t
s,@gtk_config@,$gtk_config,;t t
s,@gnome_config@,$gnome_config,;t t
s,@GNOMEHELP_N@,$GNOMEHELP_N,;t t
s,@HACKDIR@,$HACKDIR,;t t
s,@GNOME_DATADIR@,$GNOME_DATADIR,;t t
-s,@GTK_ICONDIR@,$GTK_ICONDIR,;t t
+s,@GLADE_DATADIR@,$GLADE_DATADIR,;t t
+s,@GNOME_PANELDIR@,$GNOME_PANELDIR,;t t
s,@HACK_CONF_DIR@,$HACK_CONF_DIR,;t t
+s,@GTK_EXTRA_OBJS@,$GTK_EXTRA_OBJS,;t t
s,@APPDEFAULTS@,$APPDEFAULTS,;t t
s,@DEPEND@,$DEPEND,;t t
s,@DEPEND_FLAGS@,$DEPEND_FLAGS,;t t
elif test "$with_gtk_req" = yes -a "$have_gtk" = no ; then
warnL "Use of Gtk was requested, but it wasn't found;"
warn2 "Motif will be used instead."
-
fi
warnL 'Use of GDK-Pixbuf was requested, but it was not found.'
fi
-if test "$have_xpm" = no -a "$have_gdk_pixbuf" = no; then
+if test "$have_xpm" = no -a "$have_gdk_pixbuf" = no || \
+ test "$gdk_pixbuf_halfassed" = yes; then
- if test "$with_xpm_req" = yes ; then
+ if test "$with_xpm_req" = yes -o "$have_xpm" = yes ; then
true
elif test "$with_xpm_req" = no ; then
warnL 'The XPM library is not being used.'
# configure.in --- xscreensaver, Copyright (c) 1997-2000 Jamie Zawinski.
#
-AC_PREREQ(2.53)
+AC_PREREQ(2.52)
AC_INIT(driver/subprocs.c)
AC_CONFIG_HEADER(config.h)
[if test -n "$GCC"; then
AC_CACHE_CHECK([whether gcc accepts -std],
ac_cv_gcc_accepts_std,
- [if ( gcc -E -std=c89 - </dev/null >/dev/null 2>&1 | \
+ [if ( ( gcc -E -std=c89 - </dev/null >/dev/null ) 2>&1 | \
grep unrecognized >/dev/null ); then
ac_cv_gcc_accepts_std=no
else
AC_DEFINE_UNQUOTED(PACKAGE, "$GETTEXT_PACKAGE")
AC_SUBST(GETTEXT_PACKAGE)
-ALL_LINGUAS="ca de et fr it ko pl pt sv da es fi hu ja no pt pt_BR ru wa"
+# #### no sign of en_GB
+#ALL_LINGUAS="ca de en_GB et fr it ko pl sv da es fi hu ja no pt pt_BR ru wa"
+ALL_LINGUAS="ca de et fr it ko pl sv da es fi hu ja no pt pt_BR ru wa"
AM_GLIB_GNU_GETTEXT
Screen locking options:
--enable-locking Compile in support for locking the display.
- --disable-locking Do not allow locking at all.
-],
+ --disable-locking Do not allow locking at all.],
[enable_locking="$enableval"],[enable_locking=yes])
if test "$enable_locking" = yes; then
true
#fi
-
###############################################################################
#
# Check for PAM.
AC_ARG_WITH(motif,[
User interface options:
- --with-motif Use the Motif toolkit for the user interface.],
+ --with-motif Use the Motif toolkit for the user interface
+ (not recommended.)],
[with_motif="$withval"; with_motif_req="$withval"],[with_motif=yes])
HANDLE_X_PATH_ARG(with_motif, --with-motif, Motif)
###############################################################################
have_gtk=no
+have_gtk2=no
with_gtk_req=unspecified
AC_ARG_WITH(gtk,
[ --with-gtk Use the Gtk toolkit for the user interface.],
have_gnome=no
with_gnome_req=unspecified
AC_ARG_WITH(gnome,
-[ --with-gnome Include support for the Gnome Control Center.],
+[ --with-gnome Include support for the Gnome 1.x Control Center.
+ (This option is not needed with GTK 2.x / Gnome 2.x.)
+],
[with_gnome="$withval"; with_gnome_req="$withval"],[with_gnome=yes])
# if --with-gnome=/directory/ was specified, remember that directory so that
exit 1
fi
+parse_gtk_version_string() {
+ # M4 sucks!!
+ changequote(X,Y)
+ maj=`echo $ac_gtk_version_string | sed -n 's/\..*//p'`
+ min=`echo $ac_gtk_version_string | sed -n 's/[^.]*\.\([^.]*\).*/\1/p'`
+ changequote([,])
+ ac_gtk_version=`echo "$maj * 1000 + $min" | bc`
+ if test -z "$ac_gtk_version"; then
+ ac_gtk_version=unknown
+ ac_gtk_version_string=unknown
+ fi
+}
+
jurassic_gtk=no
if test "$with_gtk" = yes; then
gtk_path="$foo:$gtk_path"
fi
- AC_PATH_PROGS(glib_config, glib12-config glib-config,, $gtk_path)
- AC_PATH_PROGS(gtk_config, gtk12-config gtk-config,, $gtk_path)
+ AC_PATH_PROGS(pkg_config, pkg-config,, $gtk_path)
- if test "$with_gnome" = yes; then
- AC_PATH_PROGS(gnome_config, gnome-config,, $gtk_path)
- fi
+ if test -n "$pkg_config" ; then
+ #
+ # the new way...
+ # run pkg-config based tests.
+ #
- if test -n "$glib_config" -a -n "$gtk_config" ; then
- have_gtk=yes
- if test "$with_gnome" = yes -a -n "$gnome_config" ; then
- have_gnome=yes
+ pkgs=''
+ pkg_check_version() {
+ if test "$ok" = yes ; then
+ req="$1"
+ min="$2"
+ AC_MSG_CHECKING(for $req)
+ if $pkg_config --exists "$req" ; then
+ vers=`$pkg_config --modversion "$req"`
+ if $pkg_config --exists "$req >= $min" ; then
+ AC_MSG_RESULT($vers)
+ pkgs="$pkgs $req"
+ return 1
+ else
+ AC_MSG_RESULT($vers (wanted >= $min))
+ ok=no
+ return 0
+ fi
+ else
+ AC_MSG_RESULT(no)
+ ok=no
+ return 0
+ fi
+ fi
+ }
+
+ ok="yes"
+ pkg_check_version gtk+-2.0 2.0.1 ; ac_gtk_version_string="$vers"
+ pkg_check_version gmodule-2.0 2.0.0
+ pkg_check_version libxml-2.0 2.4.6
+ pkg_check_version libglade-2.0 1.99.0
+ have_gtk="$ok"
+
+ if test "$have_gtk" = yes; then
+ have_gtk2=yes
+ AC_DEFINE(HAVE_GTK2)
fi
- fi
- if test "$have_gtk" = yes; then
- AC_CACHE_CHECK([Gtk version number], ac_cv_gtk_version_string,
- [ac_cv_gtk_version_string=`$gtk_config --version`])
- ac_gtk_version_string=$ac_cv_gtk_version_string
- # M4 sucks!!
- changequote(X,Y)
- maj=`echo $ac_gtk_version_string | sed -n 's/\..*//p'`
- min=`echo $ac_gtk_version_string | sed -n 's/[^.]*\.\([^.]*\).*/\1/p'`
- changequote([,])
- ac_gtk_version=`echo "$maj * 1000 + $min" | bc`
- if test -z "$ac_gtk_version"; then
- ac_gtk_version=unknown
- ac_gtk_version_string=unknown
+ if test "$have_gtk" = no; then
+ #
+ # we don't have GTK 2. Let's look for GTK 1.
+ #
+ pkgs=''
+ ok="yes"
+ pkg_check_version gtk+ 1.2 ; ac_gtk_version_string="$vers"
+ pkg_check_version glib 1.0
+ have_gtk="$ok"
+
+ # Now check for Gnome...
+ #
+ if test "$have_gtk" = yes; then
+ old_pkgs="$pkgs"
+ ok=yes
+ pkg_check_version capplet 1.0
+ pkg_check_version gnomeui 1.0
+ pkg_check_version gdk_pixbuf 0.1
+ have_gnome="$ok"
+
+ if test "$have_gnome" = no; then
+ pkgs="$old_pkgs"
+ else
+ AC_DEFINE(HAVE_CRAPPLET)
+ fi
+ fi
+ fi
+
+ if test "$have_gtk" = yes; then
+ parse_gtk_version_string
+ jurassic_gtk=no
+ else
+ have_gnome=no
+ fi
+
+ if test "$have_gtk" = yes; then
+ AC_CACHE_CHECK([for Gtk includes], ac_cv_gtk_config_cflags,
+ [ac_cv_gtk_config_cflags=`$pkg_config --cflags $pkgs`])
+ AC_CACHE_CHECK([for Gtk libs], ac_cv_gtk_config_libs,
+ [ac_cv_gtk_config_libs=`$pkg_config --libs $pkgs`])
+ fi
+ ac_gtk_config_cflags=$ac_cv_gtk_config_cflags
+ ac_gtk_config_libs=$ac_cv_gtk_config_libs
+
+ ac_gnome_config_cflags=$ac_gtk_config_cflags
+ ac_gnome_config_libs=$ac_gtk_config_libs
+
+ else
+ #
+ # the old way...
+ # run {gnome,gtk}-config based tests.
+ #
+
+ AC_PATH_PROGS(glib_config, glib12-config glib-config,, $gtk_path)
+ AC_PATH_PROGS(gtk_config, gtk12-config gtk-config,, $gtk_path)
+
+ if test "$with_gnome" = yes; then
+ AC_PATH_PROGS(gnome_config, gnome-config,, $gtk_path)
+ fi
+
+ if test -n "$glib_config" -a -n "$gtk_config" ; then
+ have_gtk=yes
+ if test "$with_gnome" = yes -a -n "$gnome_config" ; then
+ have_gnome=yes
+ fi
+ fi
+
+ if test "$have_gtk" = yes; then
+ AC_CACHE_CHECK([Gtk version number], ac_cv_gtk_version_string,
+ [ac_cv_gtk_version_string=`$gtk_config --version`])
+ ac_gtk_version_string=$ac_cv_gtk_version_string
fi
+
+ parse_gtk_version_string
+
if test "$ac_gtk_version" = "unknown" || test "$ac_gtk_version" -lt 1002
then
have_gtk=no
have_gnome=no
jurassic_gtk=yes
fi
- fi
-
- if test "$have_gtk" = yes; then
- AC_CACHE_CHECK([for Gtk includes], ac_cv_gtk_config_cflags,
- [ac_cv_gtk_config_cflags=`$gtk_config --cflags`])
- AC_CACHE_CHECK([for Gtk libs], ac_cv_gtk_config_libs,
- [ac_cv_gtk_config_libs=`$gtk_config --libs`])
- fi
- ac_gtk_config_cflags=$ac_cv_gtk_config_cflags
- ac_gtk_config_libs=$ac_cv_gtk_config_libs
- # Check for Gnome Capplet support.
- #
- if test "$have_gnome" = yes -a "$have_gtk" = yes; then
- gnome_config_libs="gtk capplet gnomeui gdk_pixbuf"
- AC_MSG_CHECKING(for Gnome capplet includes)
- AC_CACHE_VAL(ac_cv_gnome_config_cflags,
- [if ( $gnome_config --cflags $gnome_config_libs >/dev/null 2>&1 | \
- grep Unknown >/dev/null ) ; then
- ac_cv_gnome_config_cflags=''
- else
- ac_cv_gnome_config_cflags=`$gnome_config --cflags $gnome_config_libs`
- fi])
- ac_gnome_config_cflags=$ac_cv_gnome_config_cflags
- if test "$ac_gnome_config_cflags" = "" ; then
- have_gnome=no
- AC_MSG_RESULT(no)
- else
- AC_MSG_RESULT($ac_gnome_config_cflags)
+ if test "$have_gtk" = yes; then
+ AC_CACHE_CHECK([for Gtk includes], ac_cv_gtk_config_cflags,
+ [ac_cv_gtk_config_cflags=`$gtk_config --cflags`])
+ AC_CACHE_CHECK([for Gtk libs], ac_cv_gtk_config_libs,
+ [ac_cv_gtk_config_libs=`$gtk_config --libs`])
fi
- fi
+ ac_gtk_config_cflags=$ac_cv_gtk_config_cflags
+ ac_gtk_config_libs=$ac_cv_gtk_config_libs
- if test "$have_gnome" = yes -a "$have_gtk" = yes; then
- AC_MSG_CHECKING(for Gnome capplet libs)
- AC_CACHE_VAL(ac_cv_gnome_config_libs,
- [if ( $gnome_config --libs $gnome_config_libs >/dev/null 2>&1 |
- grep Unknown >/dev/null ) ; then
- ac_cv_gnome_config_libs=''
- else
- ac_cv_gnome_config_libs=`$gnome_config --libs $gnome_config_libs`
- fi])
- ac_gnome_config_libs=$ac_cv_gnome_config_libs
- if test "$ac_gnome_config_libs" = "" ; then
- have_gnome=no
- AC_MSG_RESULT(no)
- else
- AC_MSG_RESULT($ac_gnome_config_libs)
+ # Check for Gnome Capplet support.
+ #
+ if test "$have_gnome" = yes -a "$have_gtk" = yes; then
+ gnome_config_libs="gtk capplet gnomeui gdk_pixbuf"
+ AC_MSG_CHECKING(for Gnome capplet includes)
+ AC_CACHE_VAL(ac_cv_gnome_config_cflags,
+ [if ( $gnome_config --cflags $gnome_config_libs >/dev/null 2>&1 | \
+ grep Unknown >/dev/null ) ; then
+ ac_cv_gnome_config_cflags=''
+ else
+ ac_cv_gnome_config_cflags=`$gnome_config --cflags $gnome_config_libs`
+ fi])
+ ac_gnome_config_cflags=$ac_cv_gnome_config_cflags
+ if test "$ac_gnome_config_cflags" = "" ; then
+ have_gnome=no
+ AC_MSG_RESULT(no)
+ else
+ AC_MSG_RESULT($ac_gnome_config_cflags)
+ fi
fi
- fi
- GNOME_DATADIR=""
- if test "$have_gnome" = yes -a "$have_gtk" = yes; then
- GNOME_DATADIR=`$gnome_config --datadir`
- fi
+ if test "$have_gnome" = yes -a "$have_gtk" = yes; then
+ AC_MSG_CHECKING(for Gnome capplet libs)
+ AC_CACHE_VAL(ac_cv_gnome_config_libs,
+ [if ( $gnome_config --libs $gnome_config_libs >/dev/null 2>&1 |
+ grep Unknown >/dev/null ) ; then
+ ac_cv_gnome_config_libs=''
+ else
+ ac_cv_gnome_config_libs=`$gnome_config --libs $gnome_config_libs`
+ fi])
+ ac_gnome_config_libs=$ac_cv_gnome_config_libs
+ if test "$ac_gnome_config_libs" = "" ; then
+ have_gnome=no
+ AC_MSG_RESULT(no)
+ else
+ AC_MSG_RESULT($ac_gnome_config_libs)
+ fi
+ fi
+ # If we have Gnome, then override the gtk-config values with
+ # the gnome-config values.
+ #
+ if test "$have_gnome" = yes -a "$have_gtk" = yes; then
+ ac_gtk_config_cflags=$ac_gnome_config_cflags
+ ac_gtk_config_libs=$ac_gnome_config_libs
+ AC_DEFINE(HAVE_CRAPPLET)
+ fi
- # If we have Gnome, then override the gtk-config values with
- # the gnome-config values.
- #
- if test "$have_gnome" = yes -a "$have_gtk" = yes; then
- ac_gtk_config_cflags=$ac_gnome_config_cflags
- ac_gtk_config_libs=$ac_gnome_config_libs
- AC_DEFINE(HAVE_CRAPPLET)
+ fi # end of {gnome,gtk}-config based tests
+ if test "$have_gtk" = yes -a "$have_gtk2" = no; then
# check for this function that was not in libcapplet 1.2.
AC_CHECK_X_LIB(capplet, capplet_widget_changes_are_immediate,
[AC_DEFINE(HAVE_CRAPPLET_IMMEDIATE)], [true],
fi
+ GNOME_DATADIR=""
+ if test "$have_gnome" = yes -a "$have_gtk" = yes; then
+ if test -n "$gnome_config"; then
+ GNOME_DATADIR=`$gnome_config --datadir`
+ else
+ #### is this right?
+ GNOME_DATADIR=`$pkg_config --variable=prefix gtk+`
+ GNOME_DATADIR="$GNOME_DATADIR/share"
+ fi
+ fi
+
+ # .desktop files go in different places in Gnome 1.x and Gnome 2.x...
+ if test "$have_gtk2" = yes; then
+ GNOME_PANELDIR='$(GNOME_PANELDIR2)'
+ else
+ GNOME_PANELDIR='$(GNOME_PANELDIR1)'
+ fi
+
+
if test "$have_gtk" = yes; then
INCLUDES="$INCLUDES $ac_gtk_config_cflags"
GTK_LIBS="$GTK_LIBS $ac_gtk_config_libs"
AC_DEFINE(HAVE_GTK)
+
+ if test "$have_gtk2" = yes; then
+ GTK_EXTRA_OBJS=""
+ else
+ GTK_EXTRA_OBJS="\$(GTK_EXTRA_OBJS)"
+ fi
fi
fi
xml_halfassed=no
AC_ARG_WITH(xml,
[ --with-xml The XML toolkit is needed for some parts of
- the Gtk interface.],
+ the Gtk interface. Without it, the configuration
+ interface will be much less featureful.],
[with_xml="$withval"; with_xml_req="$withval"],[with_xml=yes])
# if --with-xml=/directory/ was specified, remember that directory so that
xml_path="$foo:$xml_path"
fi
- AC_PATH_PROGS(xml_config, xml2-config xml-config,, $xml_path)
+ if test -n "$pkg_config" ; then
+ #
+ # the new way...
+ # run pkg-config based tests.
+ #
+ pkgs=""
+ ok="yes"
+ pkg_check_version xml2 1.0
- # If we found the xml-config program, run it to get flags.
- #
- if test -n "$xml_config" ; then
- AC_CACHE_CHECK([for XML includes], ac_cv_xml_config_cflags,
- [ac_cv_xml_config_cflags=`$xml_config --cflags`])
- AC_CACHE_CHECK([for XML libs], ac_cv_xml_config_libs,
- [ac_cv_xml_config_libs=`$xml_config --libs`])
- ac_xml_config_cflags=$ac_cv_xml_config_cflags
- ac_xml_config_libs=$ac_cv_xml_config_libs
- fi
+ if test "$ok" = no; then
+ ok=yes
+ pkg_check_version xml 1.0
+ fi
- ac_save_xml_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS $ac_xml_config_cflags"
+ have_xml="$ok"
- # first try <libxml/parser.h> which is the new way...
- #
- AC_CHECK_X_HEADER(libxml/xmlIO.h, [have_xml=yes],,
- [#include <libxml/parser.h>])
+ if test "$have_xml" = yes; then
+ AC_CACHE_CHECK([for XML includes], ac_cv_xml_config_cflags,
+ [ac_cv_xml_config_cflags=`$pkg_config --cflags $pkgs`])
+ AC_CACHE_CHECK([for XML libs], ac_cv_xml_config_libs,
+ [ac_cv_xml_config_libs=`$pkg_config --libs $pkgs`])
+ ac_xml_config_cflags=$ac_cv_xml_config_cflags
+ ac_xml_config_libs=$ac_cv_xml_config_libs
+ fi
- # if that didn't work, then try just <parser.h> which is the old way...
- #
- if test "$have_xml" = no; then
- AC_CHECK_X_HEADER(xmlIO.h, [have_xml=yes; have_old_xml=yes],,
- [#include <parser.h>])
+ else
+ #
+ # the old way...
+ # run {gnome,gtk}-config based tests.
+ #
+
+ AC_PATH_PROGS(xml_config, xml2-config xml-config,, $xml_path)
+
+ # If we found the xml-config program, run it to get flags.
+ #
+ if test -n "$xml_config" ; then
+ AC_CACHE_CHECK([for XML includes], ac_cv_xml_config_cflags,
+ [ac_cv_xml_config_cflags=`$xml_config --cflags`])
+ AC_CACHE_CHECK([for XML libs], ac_cv_xml_config_libs,
+ [ac_cv_xml_config_libs=`$xml_config --libs`])
+ ac_xml_config_cflags=$ac_cv_xml_config_cflags
+ ac_xml_config_libs=$ac_cv_xml_config_libs
+ fi
+
+ ac_save_xml_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $ac_xml_config_cflags"
+
+ # first try <libxml/parser.h> which is the new way...
+ #
+ AC_CHECK_X_HEADER(libxml/xmlIO.h, [have_xml=yes],,
+ [#include <libxml/parser.h>])
+
+ # if that didn't work, then try just <parser.h> which is the old way...
+ #
+ if test "$have_xml" = no; then
+ AC_CHECK_X_HEADER(xmlIO.h, [have_xml=yes; have_old_xml=yes],,
+ [#include <parser.h>])
+ fi
+
+ CPPFLAGS="$ac_save_xml_CPPFLAGS"
fi
- CPPFLAGS="$ac_save_xml_CPPFLAGS"
have_zlib=no
if test "$have_xml" = yes; then
fi
CPPFLAGS="$CPPFLAGS $X_CFLAGS"
-# With autoconf 2.13 we could do this:
-#
-# changequote(X,Y)
-# mglv=`(eval "$ac_cpp conftest.$ac_ext") 2>&AC_FD_CC | sed -n \
-# 's/^configure:.*\([0-9][0-9]*\).*\([0-9][0-9]*\).*$/\1.\2/p'`
-# changequote([,])
-#
-# but with autoconf 2.52+ (m4 1.4) that causes an error:
-# m4: ERROR: Recursion limit of 1024 exceeded, use -L<N> to change it
-#
-# So, we need to use the autoconf line-noise macros @<:@ for [ and @:>@ for ]
-#
- mglv=`(eval "$ac_cpp conftest.$ac_ext") 2>&AC_FD_CC | sed -n \
- 's/^configure:.*\(@<:@0-9@:>@@<:@0-9@:>@*\).*\(@<:@0-9@:>@@<:@0-9@:>@*\).*$/\1.\2/p'`
+ mglv=`(eval "$ac_cpp conftest.$ac_ext") 2>&AC_FD_CC | grep configure:`
+ # M4 sucks!!
+ changequote(X,Y)
+ mglv=`echo "$mglv" | sed -n \
+ 's/^configure:.*\([0-9][0-9]*\).*\([0-9][0-9]*\).*$/\1.\2/p'`
+ changequote([,])
rm -f conftest.$ac_ext
have_xpm=no
with_xpm_req=unspecified
AC_ARG_WITH(xpm,
-[ --with-xpm Include support for XPM files in some demos.],
+[ --with-xpm Include support for XPM files in some demos.
+ (Not needed if Pixbuf is used.)],
[with_xpm="$withval"; with_xpm_req="$withval"],[with_xpm=yes])
HANDLE_X_PATH_ARG(with_xpm, --with-xpm, XPM)
AC_ARG_WITH(pixbuf,
[ --with-pixbuf Include support for the GDK-Pixbuf library in some
demos, which will make it possible for them to read
- GIF, JPEG, and PNG files as well.],
+ GIF, JPEG, and PNG files as well. (The path here is
+ ignored if GTK 2.x is being used.)],
[with_gdk_pixbuf="$withval"; with_gdk_pixbuf_req="$withval"],
[with_gdk_pixbuf=yes])
if test "$with_gdk_pixbuf" = yes; then
have_gdk_pixbuf=no
+ have_gdk_pixbuf2=no
- # if the user specified --with-gtk=/foo/ or --with-gnome=/foo/ then
- # look in /foo/bin/ for for gdk-pixbuf-config.
- #
- gdk_pixbuf_path="$PATH"
+ if test -n "$pkg_config" ; then
+ #
+ # the new way...
+ # run pkg-config based tests.
+ #
+ pkgs=''
+ ok="yes"
+ pkg_check_version gdk-pixbuf-2.0 2.0.0
+ pkg_check_version gdk-pixbuf-xlib-2.0 2.0.0
+ have_gdk_pixbuf="$ok"
+ have_gdk_pixbuf2="$ok"
+
+ if test "$have_gdk_pixbuf2" = no; then
+ #
+ # We don't have pixbuf 2.x; check for 1.x.
+ #
+ pkgs=''
+ ok="yes"
+ pkg_check_version gdk-pixbuf 0.0
+ pkg_check_version gdk-pixbuf-xlib 0.0
+ have_gdk_pixbuf="$ok"
+ fi
- if test ! -z "$gtk_dir"; then
- # canonicalize slashes.
- foo=`echo "${gtk_dir}/bin" | sed 's@//*@/@g'`
- gdk_pixbuf_path="$foo:$gdk_pixbuf_path"
+ if test "$have_gdk_pixbuf" = yes; then
+ AC_CACHE_CHECK([for gdk-pixbuf includes], ac_cv_gdk_pixbuf_config_cflags,
+ [ac_cv_gdk_pixbuf_config_cflags=`$pkg_config --cflags $pkgs`])
+ AC_CACHE_CHECK([for gdk-pixbuf libs], ac_cv_gdk_pixbuf_config_libs,
+ [ac_cv_gdk_pixbuf_config_libs=`$pkg_config --libs $pkgs`])
+ fi
+ ac_gdk_pixbuf_config_cflags=$ac_cv_gdk_pixbuf_config_cflags
+ ac_gdk_pixbuf_config_libs=$ac_cv_gdk_pixbuf_config_libs
fi
- if test ! -z "$gnome_dir"; then
- # canonicalize slashes.
- foo=`echo "${gnome_dir}/bin" | sed 's@//*@/@g'`
- gdk_pixbuf_path="$foo:$gdk_pixbuf_path"
- fi
+ if test "$have_gdk_pixbuf" = no; then
+ #
+ # the old way...
+ # run gdk-pixbuf-config based tests.
+ # note that we can't assume that the existence of "pkg-config" means
+ # that we don't have to look for gdk-pixbuf-config -- in Gnome 1.4,
+ # pkg-config exists, but doesn't know about pixbuf.
+ #
- AC_PATH_PROGS(gdk_pixbuf_config, gdk-pixbuf-config,, $gdk_pixbuf_path)
+ # if the user specified --with-gtk=/foo/ or --with-gnome=/foo/ then
+ # look in /foo/bin/ for for gdk-pixbuf-config.
+ #
+ gdk_pixbuf_path="$PATH"
- # If we found the gdk-pixbuf-config program, run it to get flags.
- #
- if test -n "$gdk_pixbuf_config" ; then
- AC_CACHE_CHECK([for gdk-pixbuf includes], ac_cv_gdk_pixbuf_config_cflags,
- [ac_cv_gdk_pixbuf_config_cflags=`$gdk_pixbuf_config --cflags`])
- AC_CACHE_CHECK([for gdk-pixbuf libs], ac_cv_gdk_pixbuf_config_libs,
- [ac_cv_gdk_pixbuf_config_libs=`$gdk_pixbuf_config --libs`])
- ac_gdk_pixbuf_config_cflags=$ac_cv_gdk_pixbuf_config_cflags
- ac_gdk_pixbuf_config_libs=$ac_cv_gdk_pixbuf_config_libs
+ if test ! -z "$gtk_dir"; then
+ # canonicalize slashes.
+ foo=`echo "${gtk_dir}/bin" | sed 's@//*@/@g'`
+ gdk_pixbuf_path="$foo:$gdk_pixbuf_path"
+ fi
+
+ if test ! -z "$gnome_dir"; then
+ # canonicalize slashes.
+ foo=`echo "${gnome_dir}/bin" | sed 's@//*@/@g'`
+ gdk_pixbuf_path="$foo:$gdk_pixbuf_path"
+ fi
+
+ AC_PATH_PROGS(gdk_pixbuf_config, gdk-pixbuf-config,, $gdk_pixbuf_path)
+
+ # If we found the gdk-pixbuf-config program, run it to get flags.
+ #
+ if test -n "$gdk_pixbuf_config" ; then
+ AC_CACHE_CHECK([for gdk-pixbuf includes], ac_cv_gdk_pixbuf_config_cflags,
+ [ac_cv_gdk_pixbuf_config_cflags=`$gdk_pixbuf_config --cflags`])
+ AC_CACHE_CHECK([for gdk-pixbuf libs], ac_cv_gdk_pixbuf_config_libs,
+ [ac_cv_gdk_pixbuf_config_libs=`$gdk_pixbuf_config --libs`])
+
+ # note that "gdk-pixbuf-config --libs" produces a link line including
+ # -lgdk_pixbuf, but there's no way to get it to produce one that also
+ # includes -lgdk_pixbuf_xlib. Since we don't know *exactly* what the
+ # name of the library will be, construct it with sed...
+ # M4 sucks!!
+ changequote(X,Y)
+ ac_cv_gdk_pixbuf_config_libs=`echo $ac_cv_gdk_pixbuf_config_libs | \
+ sed 's@ \(-lgdk_pixbuf\([-_a-zA-Z0-9.]*\)\) @ \1 -lgdk_pixbuf_xlib\2 @'`
+ changequote([,])
+
+ ac_gdk_pixbuf_config_cflags=$ac_cv_gdk_pixbuf_config_cflags
+ ac_gdk_pixbuf_config_libs=$ac_cv_gdk_pixbuf_config_libs
+ fi
fi
ac_save_gdk_pixbuf_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $ac_gdk_pixbuf_config_cflags"
- # check for header 1...
- AC_CHECK_X_HEADER(gdk-pixbuf/gdk-pixbuf.h, [have_gdk_pixbuf=yes])
+ if test "$have_gdk_pixbuf" = no; then
+ #
+ # we appear to have pixbuf; check for headers/libs to be sure.
+ #
- # if that worked, check for header 2...
- if test "$have_gdk_pixbuf" = yes; then
have_gdk_pixbuf=no
- AC_CHECK_X_HEADER(gdk-pixbuf/gdk-pixbuf-xlib.h, [have_gdk_pixbuf=yes])
+
+ # check for header 1...
+ AC_CHECK_X_HEADER(gdk-pixbuf/gdk-pixbuf.h, [have_gdk_pixbuf=yes])
+
+ # if that worked, check for header 2...
+ if test "$have_gdk_pixbuf" = yes; then
+ have_gdk_pixbuf=no
+ gdk_pixbuf_halfassed=yes
+ AC_CHECK_X_HEADER(gdk-pixbuf/gdk-pixbuf-xlib.h,
+ [have_gdk_pixbuf=yes
+ gdk_pixbuf_halfassed=no])
+
+ # yay, it has a new name in GTK2...
+ if test "$have_gdk_pixbuf" = no; then
+ have_gdk_pixbuf=no
+ gdk_pixbuf_halfassed=yes
+ AC_CHECK_X_HEADER(gdk-pixbuf-xlib/gdk-pixbuf-xlib.h,
+ [have_gdk_pixbuf=yes
+ gdk_pixbuf_halfassed=no])
+ fi
+ fi
fi
CPPFLAGS="$ac_save_gdk_pixbuf_CPPFLAGS"
# we have the headers, now check for the libraries
have_gdk_pixbuf=no
gdk_pixbuf_halfassed=yes
+
# library 1...
- AC_CHECK_X_LIB(gdk_pixbuf, gdk_pixbuf_new_from_file,
- [have_gdk_pixbuf=yes], [true],
- $ac_gdk_pixbuf_config_libs)
+ AC_CHECK_X_LIB(c, gdk_pixbuf_new_from_file, [have_gdk_pixbuf=yes],,
+ $ac_gdk_pixbuf_config_libs -lX11 -lXext -lm)
# library 2...
if test "$have_gdk_pixbuf" = yes; then
- AC_CHECK_X_LIB(gdk_pixbuf_xlib, gdk_pixbuf_xlib_init,
+ have_gdk_pixbuf=no
+ AC_CHECK_X_LIB(c, gdk_pixbuf_xlib_init,
[have_gdk_pixbuf=yes
- gdk_pixbuf_halfassed=no],
- [true],
- $ac_gdk_pixbuf_config_libs)
+ gdk_pixbuf_halfassed=no],,
+ $ac_gdk_pixbuf_config_libs -lX11 -lXext -lm)
fi
fi
if test "$have_gdk_pixbuf" = yes; then
INCLUDES="$INCLUDES $ac_gdk_pixbuf_config_cflags"
- XPM_LIBS="$ac_gdk_pixbuf_config_libs -lgdk_pixbuf -lgdk_pixbuf_xlib"
+ XPM_LIBS="$ac_gdk_pixbuf_config_libs"
AC_DEFINE(HAVE_GDK_PIXBUF)
+ else
+ have_gdk_pixbuf2=no
fi
fi
with_jpeg_req=unspecified
jpeg_halfassed=no
AC_ARG_WITH(jpeg,
-[ --with-jpeg Include support for the JPEG library in some demos,
- which will make it possible for them to read JPEG
- files as well.],
+[ --with-jpeg Include support for the JPEG library in some demos.
+ (If this library is available, webcollage will be a
+ . lot faster.)],
[with_jpeg="$withval"; with_jpeg_req="$withval"],
[with_jpeg=yes])
-# After computing $HACK_CONF_DIR, make sure $GTK_ICONDIR has a value
+# After computing $HACK_CONF_DIR, make sure $GLADE_DATADIR has a value
# so that we know where to install the Gtk pixmaps.
#
if test -n "$GNOME_DATADIR" ; then
- GTK_ICONDIR='$(GNOME_DATADIR)/pixmaps'
+ GLADE_DATADIR='$(GNOME_DATADIR)/xscreensaver'
elif test "$have_gtk" = yes; then
# should this be "$(prefix)/share/pixmaps"? But /usr/X11R6/share/ is wrong...
- GTK_ICONDIR='/usr/share/pixmaps'
+ GLADE_DATADIR='/usr/share/xscreensaver'
else
- GTK_ICONDIR=''
+ GLADE_DATADIR=''
fi
AC_SUBST(GNOMEHELP_N)
AC_SUBST(HACKDIR)
AC_SUBST(GNOME_DATADIR)
-AC_SUBST(GTK_ICONDIR)
+AC_SUBST(GLADE_DATADIR)
+AC_SUBST(GNOME_PANELDIR)
AC_SUBST(HACK_CONF_DIR)
+AC_SUBST(GTK_EXTRA_OBJS)
APPDEFAULTS=$ac_x_app_defaults
AC_SUBST(APPDEFAULTS)
elif test "$with_gtk_req" = yes -a "$have_gtk" = no ; then
warnL "Use of Gtk was requested, but it wasn't found;"
warn2 "Motif will be used instead."
-
fi
warnL 'Use of GDK-Pixbuf was requested, but it was not found.'
fi
-if test "$have_xpm" = no -a "$have_gdk_pixbuf" = no; then
+if test "$have_xpm" = no -a "$have_gdk_pixbuf" = no || \
+ test "$gdk_pixbuf_halfassed" = yes; then
- if test "$with_xpm_req" = yes ; then
+ if test "$with_xpm_req" = yes -o "$have_xpm" = yes ; then
true
elif test "$with_xpm_req" = no ; then
warnL 'The XPM library is not being used.'
GNOME_DATADIR = @GNOME_DATADIR@
GNOME_CCDIR = $(GNOME_DATADIR)/control-center/Desktop
-GNOME_PANELDIR = $(GNOME_DATADIR)/gnome/apps/Settings/Desktop
+GNOME_PANELDIR1 = $(GNOME_DATADIR)/gnome/apps/Settings/Desktop
+GNOME_PANELDIR2 = $(GNOME_DATADIR)/applications
+GNOME_PANELDIR = @GNOME_PANELDIR@
+GLADE_DATADIR = @GLADE_DATADIR@
GNOME_BINDIR = $(bindir)
HACK_CONF_DIR = @HACK_CONF_DIR@
-GTK_ICONDIR = @GTK_ICONDIR@
CC = @CC@
CFLAGS = @CFLAGS@
DEFS = @DEFS@
INTL_DEFS = -DLOCALEDIR=\"$(localedir)\"
SUBP_DEFS = $(DEFS) -DDEFAULT_PATH_PREFIX='"@HACKDIR@"'
-GTK_DEFS = $(DEFS) -DDEFAULT_ICONDIR='"$(GTK_ICONDIR)"'
+GTK_DEFS = $(DEFS) -DDEFAULT_ICONDIR='"$(GLADE_DATADIR)"'
CONF_DEFS = -DHACK_CONFIGURATION_PATH='"$(HACK_CONF_DIR)"'
LIBS = @LIBS@
X_PRE_LIBS = @X_PRE_LIBS@
X_EXTRA_LIBS = @X_EXTRA_LIBS@
XMU_LIBS = @XMU_LIBS@
+XPM_LIBS = @XPM_LIBS@
# Note:
#
GTK_SRCS = demo-Gtk.c demo-Gtk-conf.c \
demo-Gtk-widgets.c demo-Gtk-support.c
-GTK_OBJS = demo-Gtk.o demo-Gtk-conf.o \
- demo-Gtk-widgets.o demo-Gtk-support.o
+GTK_EXTRA_OBJS = demo-Gtk-widgets.o demo-Gtk-support.o
+GTK_OBJS = demo-Gtk.o demo-Gtk-conf.o @GTK_EXTRA_OBJS@
PWENT_SRCS = passwd-pwent.c
PWENT_OBJS = passwd-pwent.o
CMD_LIBS = $(LIBS) $(X_LIBS) \
$(X_PRE_LIBS) -lX11 -lXext $(X_EXTRA_LIBS)
-GETIMG_LIBS = $(LIBS) $(X_LIBS) \
+GETIMG_LIBS = $(LIBS) $(X_LIBS) $(XPM_LIBS) \
$(X_PRE_LIBS) -lXt -lX11 $(XMU_LIBS) -lXext $(X_EXTRA_LIBS)
EXES = xscreensaver xscreensaver-command xscreensaver-demo \
xscreensaver-getimage-file.man \
xscreensaver-getimage-video.man
EXTRAS = README Makefile.in XScreenSaver.ad.in xscreensaver.pam \
- xscreensaver.kss xscreensaver-demo.glade \
+ xscreensaver.kss xscreensaver-demo.glade xscreensaver-demo.glade2 \
screensaver-properties.desktop.in \
screensaver-properties-capplet \
.gdbinit
# xscreensaver.xpm
install-gnome:: $(LOGO)
- @if [ "$(GTK_ICONDIR)" != "" ]; then \
- if [ ! -d "$(install_prefix)$(GTK_ICONDIR)" ]; then \
- echo $(INSTALL_DIRS) "$(install_prefix)$(GTK_ICONDIR)" ;\
- $(INSTALL_DIRS) "$(install_prefix)$(GTK_ICONDIR)" ;\
+ @if [ "$(GLADE_DATADIR)" != "" ]; then \
+ if [ ! -d "$(install_prefix)$(GLADE_DATADIR)" ]; then \
+ echo $(INSTALL_DIRS) "$(install_prefix)$(GLADE_DATADIR)" ;\
+ $(INSTALL_DIRS) "$(install_prefix)$(GLADE_DATADIR)" ;\
fi ;\
target=xscreensaver.xpm ;\
echo $(INSTALL_DATA) $(LOGO) \
- $(install_prefix)$(GTK_ICONDIR)/$$target ;\
+ $(install_prefix)$(GLADE_DATADIR)/$$target ;\
$(INSTALL_DATA) $(LOGO) \
- $(install_prefix)$(GTK_ICONDIR)/$$target ;\
+ $(install_prefix)$(GLADE_DATADIR)/$$target ;\
fi
# ../utils/images/screensaver-*.xpm
install-gnome::
- @if [ "$(GTK_ICONDIR)" != "" ]; then \
- if [ ! -d "$(install_prefix)$(GTK_ICONDIR)" ]; then \
- echo $(INSTALL_DIRS) "$(install_prefix)$(GTK_ICONDIR)" ;\
- $(INSTALL_DIRS) "$(install_prefix)$(GTK_ICONDIR)" ;\
+ @if [ "$(GLADE_DATADIR)" != "" ]; then \
+ if [ ! -d "$(install_prefix)$(GLADE_DATADIR)" ]; then \
+ echo $(INSTALL_DIRS) "$(install_prefix)$(GLADE_DATADIR)" ;\
+ $(INSTALL_DIRS) "$(install_prefix)$(GLADE_DATADIR)" ;\
fi ;\
for target in $(GTK_ICONS) ; do \
dest=`echo $$target | sed 's@^.*/@@'` ;\
echo $(INSTALL_DATA) $$target \
- $(install_prefix)$(GTK_ICONDIR)/$$dest ;\
+ $(install_prefix)$(GLADE_DATADIR)/$$dest ;\
$(INSTALL_DATA) $$target \
- $(install_prefix)$(GTK_ICONDIR)/$$dest ;\
+ $(install_prefix)$(GLADE_DATADIR)/$$dest ;\
done ;\
fi
+# xscreensaver-demo.glade2
+install-gnome:: xscreensaver-demo.glade2
+ @if [ "$(GLADE_DATADIR)" != "" ]; then \
+ if [ ! -d "$(install_prefix)$(GLADE_DATADIR)" ]; then \
+ echo $(INSTALL_DIRS) "$(install_prefix)$(GLADE_DATADIR)" ;\
+ $(INSTALL_DIRS) "$(install_prefix)$(GLADE_DATADIR)" ;\
+ fi ;\
+ target=xscreensaver-demo.glade2 ;\
+ echo $(INSTALL_DATA) $(srcdir)/$$target \
+ $(install_prefix)$(GLADE_DATADIR)/$$target ;\
+ if $(INSTALL_DATA) $(srcdir)/$$target \
+ $(install_prefix)$(GLADE_DATADIR)/$$target ;\
+ then true ;\
+ else \
+ e=echo ; \
+ $$e "" ;\
+ $$e " ####################################################################";\
+ $$e " Warning: unable to install $$target into" ;\
+ $$e " $(install_prefix)$(GLADE_DATADIR)/." ;\
+ $$e " Without this file, xscreensaver-demo will not" ;\
+ $$e " be able to run properly." ;\
+ $$e " ####################################################################";\
+ $$e "" ;\
+ exit 1 ; \
+ fi ; \
+ fi
+
+
# screensaver-properties.desktop
uninstall-gnome::
@if [ "$(GNOME_DATADIR)" != "" ]; then \
# xscreensaver.xpm
uninstall-gnome::
- @if [ "$(GTK_ICONDIR)" != "" ]; then \
+ @if [ "$(GLADE_DATADIR)" != "" ]; then \
target=xscreensaver.xpm ;\
- echo rm -f $(install_prefix)$(GTK_ICONDIR)/$$target ;\
- rm -f $(install_prefix)$(GTK_ICONDIR)/$$target ;\
+ echo rm -f $(install_prefix)$(GLADE_DATADIR)/$$target ;\
+ rm -f $(install_prefix)$(GLADE_DATADIR)/$$target ;\
fi
# xscreensaver.xpm
uninstall-gnome::
- @if [ "$(GTK_ICONDIR)" != "" ]; then \
+ @if [ "$(GLADE_DATADIR)" != "" ]; then \
for target in $(GTK_ICONS) ; do \
dest=`echo $$target | sed 's@^.*/@@'` ;\
- echo rm -f $(install_prefix)$(GTK_ICONDIR)/$$dest ;\
- rm -f $(install_prefix)$(GTK_ICONDIR)/$$dest ;\
+ echo rm -f $(install_prefix)$(GLADE_DATADIR)/$$dest ;\
+ rm -f $(install_prefix)$(GLADE_DATADIR)/$$dest ;\
done ;\
fi
# close. This excludes dependencies on files in /usr/include, etc. It tries
# to include only dependencies on files which are themselves a part of this
# package.
-distdepend: update_ad_version update_man_version XScreenSaver_ad.h
+distdepend: check_men update_ad_version update_man_version XScreenSaver_ad.h
@echo updating dependencies in `pwd`/Makefile.in... ; \
$(DEPEND) -w 0 -f - \
-s '# DO NOT DELETE: updated by make distdepend' $(DEPEND_FLAGS) -- \
V=`sed -n 's/.*\([0-9][0-9]*\.[0-9]*\).*/\1/p' < $$U` ; \
D=`date '+%d-%b-%Y'` ; \
for S in $$files ; do \
- echo -n "Updating version number in $$S to $$V $$D... " ; \
+ echo -n "Updating $$S to $$V $$D... " ; \
T=/tmp/xs.$$$$ ; \
sed -e "s/\(.*version \)[0-9][0-9]*\.[0-9]*\(.*\)/\1$$V\2/" \
-e "s/\([0-9][0-9]-[A-Z][a-z][a-z]-[0-9][0-9][0-9]*\)/$$D/" \
U=$(UTILS_SRC)/version.h ; \
V=`sed -n 's/.*\([0-9][0-9]*\.[0-9]*\).*/\1/p' < $$U` ; \
V="`date '+%d-%b-%Y'` ($$V)" ; \
- echo -n "Updating footer in $$S to \"$$V\"... " ; \
+ echo -n "Updating $$S to \"$$V\"... " ; \
T=/tmp/xs.$$$$ ; \
sed "s/^\(\.TH[^\"]*\)\"[^\"]*\"\(.*\)/\1\"$$V\"\2/" \
< $$S > $$T ; \
@$(MAKE) XScreenSaver_ad.h 2>&1 >&- /dev/null
@echo $(TARFILES)
+check_men:
+ @badmen="" ; \
+ for exe in $(EXES); do \
+ if ! [ -f $(srcdir)/$$exe.man ]; then \
+ badmen="$$badmen $$exe" ; \
+ fi ; \
+ done ; \
+ if [ -n "$$badmen" ]; then \
+ echo "" ; \
+ echo "Warning: The following programs have no manuals:" ; \
+ echo "" ; \
+ for m in $$badmen ; do \
+ echo " $$m" ; \
+ done ; \
+ echo "" ; \
+ fi
+
# Rules for noticing when the objects from the utils directory are out of
# date with respect to their sources, and going and building them according
! a screen saver and locker for the X window system
! by Jamie Zawinski
!
-! version 4.03
-! 11-May-2002
+! version 4.04
+! 31-May-2002
!
! See "man xscreensaver" for more info. The latest version is always
! available at http://www.jwz.org/xscreensaver/
polyominoes -root \n\
- thornbird -root \n\
fluidballs -root \n\
+ anemone -root \n\
color: bubbles -root \n\
- default-n: webcollage -root \n\
- default-n: "WebCollage (whacked)" \
@GL_KLUDGE@ GL: sballs -root \n\
@GL_KLUDGE@ GL: cubenetic -root \n\
@GL_KLUDGE@ GL: spheremonics -root \n\
+@GL_KLUDGE@ GL: lavalite -root \n\
+@GL_KLUDGE@ GL: queens -root \n\
\
- xdaliclock -root -builtin3 -cycle \n\
- default-n: xearth -nofork -nostars -ncolors 50 \
polyominoes -root \\n\
- thornbird -root \\n\
fluidballs -root \\n\
+ anemone -root \\n\
color: bubbles -root \\n\
- default-n: webcollage -root \\n\
- default-n: \"WebCollage (whacked)\" \
GL: sballs -root \\n\
GL: cubenetic -root \\n\
GL: spheremonics -root \\n\
+ GL: lavalite -root \\n\
+ GL: queens -root \\n\
\
- xdaliclock -root -builtin3 -cycle \\n\
- default-n: xearth -nofork -nostars -ncolors 50 \
* workaround.
*/
#ifdef HAVE_OLD_XML_HEADERS
-#include <parser.h>
+# include <parser.h>
#else /* ! HAVE_OLD_XML_HEADERS */
-#include <libxml/parser.h>
+# include <libxml/parser.h>
#endif /* HAVE_OLD_XML_HEADERS */
/*
#ifdef HAVE_GTK /* whole file */
+#include <xscreensaver-intl.h>
+
#include <stdlib.h>
#ifdef HAVE_UNISTD_H
#include <gdk/gdkx.h>
+#ifdef HAVE_GTK2
+#include <glade/glade-xml.h>
+#endif /* HAVE_GTK2 */
+
+#if defined(DEFAULT_ICONDIR) && !defined(GLADE_DIR)
+# define GLADE_DIR DEFAULT_ICONDIR
+#endif
+#if !defined(DEFAULT_ICONDIR) && defined(GLADE_DIR)
+# define DEFAULT_ICONDIR GLADE_DIR
+#endif
+
+
#include "version.h"
#include "prefs.h"
#include "resources.h" /* for parse_time() */
#include <string.h>
#include <ctype.h>
+#ifdef HAVE_GTK2
+enum {
+ COL_ENABLED,
+ COL_NAME,
+ COL_LAST
+};
+#endif /* HAVE_GTK2 */
/* from exec.c */
extern void exec_command (const char *shell, const char *command, int nice);
GtkWidget *popup_widget; /* the "Settings" dialog */
conf_data *cdata; /* private data for per-hack configuration */
+#ifdef HAVE_GTK2
+ GladeXML *glade_ui; /* Glade UI file */
+#endif /* HAVE_GTK2 */
+
Bool debug_p; /* whether to print diagnostics */
Bool initializing_p; /* flag for breaking recursion loops */
Bool saving_p; /* flag for breaking recursion loops */
if (!name) abort();
if (!*name) abort();
+#ifdef HAVE_GTK2
+ if (!s->glade_ui)
+ {
+ s->glade_ui = glade_xml_new (GLADE_DIR "/xscreensaver-demo.glade2",
+ NULL, NULL);
+ if (!s->glade_ui)
+ {
+ fprintf (stderr,
+ "%s: could not load glade file"
+ " \"%s/xscreensaver-demo.glade2\"\n",
+ blurb(), GLADE_DIR);
+ exit (-1);
+ }
+ glade_xml_signal_autoconnect (s->glade_ui);
+ }
+
+ w = glade_xml_get_widget (s->glade_ui, name);
+
+#else /* !HAVE_GTK2 */
+
w = (GtkWidget *) gtk_object_get_data (GTK_OBJECT (s->base_widget),
name);
if (w) return w;
w = (GtkWidget *) gtk_object_get_data (GTK_OBJECT (s->popup_widget),
name);
+#endif /* HAVE_GTK2 */
if (w) return w;
fprintf (stderr, "%s: no widget \"%s\"\n", blurb(), name);
static void
ensure_selected_item_visible (GtkWidget *widget)
{
+#ifdef HAVE_GTK2
+
+#else /* !HAVE_GTK2 */
+
GtkScrolledWindow *scroller = 0;
GtkViewport *vp = 0;
GtkList *list_widget = 0;
gtk_adjustment_set_value (adj, target);
}
+#endif /* !HAVE_GTK2 */
}
static void
{
label = gtk_label_new (head);
+#ifdef HAVE_GTK2
+ gtk_label_set_selectable (GTK_LABEL (label), TRUE);
+#endif /* HAVE_GTK2 */
+#ifndef HAVE_GTK2
if (i == 1)
{
GTK_WIDGET (label)->style =
gtk_widget_set_style (GTK_WIDGET (label),
GTK_WIDGET (label)->style);
}
-
+#endif /* !HAVE_GTK2 */
if (center <= 0)
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox),
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
label, TRUE, TRUE, 0);
+#ifdef HAVE_GTK2
+ if (restart_button_p)
+ {
+ cancel = gtk_button_new_from_stock (GTK_STOCK_CANCEL);
+ gtk_container_add (GTK_CONTAINER (label), cancel);
+ }
+
+ ok = gtk_button_new_from_stock (GTK_STOCK_OK);
+ gtk_container_add (GTK_CONTAINER (label), ok);
+
+#else /* !HAVE_GTK2 */
+
ok = gtk_button_new_with_label ("OK");
gtk_container_add (GTK_CONTAINER (label), ok);
gtk_container_add (GTK_CONTAINER (label), cancel);
}
+#endif /* !HAVE_GTK2 */
+
gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);
gtk_container_set_border_width (GTK_CONTAINER (dialog), 10);
gtk_window_set_title (GTK_WINDOW (dialog), progclass);
+ GTK_WIDGET_SET_FLAGS (ok, GTK_CAN_DEFAULT);
gtk_widget_show (ok);
+ gtk_widget_grab_focus (ok);
+
if (cancel)
- gtk_widget_show (cancel);
+ {
+ GTK_WIDGET_SET_FLAGS (cancel, GTK_CAN_DEFAULT);
+ gtk_widget_show (cancel);
+ }
gtk_widget_show (label);
gtk_widget_show (dialog);
-/* gtk_window_set_default (GTK_WINDOW (dialog), ok);*/
if (restart_button_p)
{
gdk_window_set_transient_for (GTK_WIDGET (dialog)->window,
GTK_WIDGET (parent)->window);
+#ifdef HAVE_GTK2
+ gtk_window_present (GTK_WINDOW (dialog));
+#else /* !HAVE_GTK2 */
gdk_window_show (GTK_WIDGET (dialog)->window);
gdk_window_raise (GTK_WIDGET (dialog)->window);
+#endif /* !HAVE_GTK2 */
free (msg);
}
*s = 0;
s += 2;
+#ifdef HAVE_GTK2
+ sprintf(copy, _("Copyright \xC2\xA9 1991-2002 %s"), s);
+#else /* !HAVE_GTK2 */
sprintf(copy, _("Copyright \251 1991-2002 %s"), s);
+#endif /* !HAVE_GTK2 */
sprintf (msg, "%s\n\n%s", copy, desc);
gtk_label_set_justify (GTK_LABEL (label1), GTK_JUSTIFY_LEFT);
gtk_misc_set_alignment (GTK_MISC (label1), 0.0, 0.75);
+#ifndef HAVE_GTK2
GTK_WIDGET (label1)->style = gtk_style_copy (GTK_WIDGET (label1)->style);
GTK_WIDGET (label1)->style->font =
gdk_font_load (get_string_resource ("about.headingFont","Dialog.Font"));
gtk_widget_set_style (GTK_WIDGET (label1), GTK_WIDGET (label1)->style);
+#endif /* HAVE_GTK2 */
label2 = gtk_label_new (msg);
gtk_box_pack_start (GTK_BOX (vbox), label2, TRUE, TRUE, 0);
gtk_label_set_justify (GTK_LABEL (label2), GTK_JUSTIFY_LEFT);
gtk_misc_set_alignment (GTK_MISC (label2), 0.0, 0.25);
+#ifndef HAVE_GTK2
GTK_WIDGET (label2)->style = gtk_style_copy (GTK_WIDGET (label2)->style);
GTK_WIDGET (label2)->style->font =
gdk_font_load (get_string_resource ("about.bodyFont","Dialog.Font"));
gtk_widget_set_style (GTK_WIDGET (label2), GTK_WIDGET (label2)->style);
+#endif /* HAVE_GTK2 */
hb = gtk_hbutton_box_new ();
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
hb, TRUE, TRUE, 0);
+#ifdef HAVE_GTK2
+ ok = gtk_button_new_from_stock (GTK_STOCK_OK);
+#else /* !HAVE_GTK2 */
ok = gtk_button_new_with_label (_("OK"));
+#endif /* !HAVE_GTK2 */
gtk_container_add (GTK_CONTAINER (hb), ok);
gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);
static void
-force_list_select_item (state *s, GtkList *list, int list_elt, Bool scroll_p)
+force_list_select_item (state *s, GtkWidget *list, int list_elt, Bool scroll_p)
{
GtkWidget *parent = name_to_widget (s, "scroller");
Bool was = GTK_WIDGET_IS_SENSITIVE (parent);
+#ifdef HAVE_GTK2
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ GtkTreeSelection *selection;
+#endif /* HAVE_GTK2 */
if (!was) gtk_widget_set_sensitive (parent, True);
+#ifdef HAVE_GTK2
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (list));
+ g_assert (model);
+ gtk_tree_model_iter_nth_child (model, &iter, NULL, list_elt);
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list));
+ gtk_tree_selection_select_iter (selection, &iter);
+#else /* !HAVE_GTK2 */
gtk_list_select_item (GTK_LIST (list), list_elt);
+#endif /* !HAVE_GTK2 */
if (scroll_p) ensure_selected_item_visible (GTK_WIDGET (list));
if (!was) gtk_widget_set_sensitive (parent, False);
}
saver_preferences *p = &s->prefs;
Bool ops = s->preview_suppressed_p;
- GtkList *list_widget =
- GTK_LIST (name_to_widget (s, "list"));
+ GtkWidget *list_widget = name_to_widget (s, "list");
int list_elt = selected_list_element (s);
if (list_elt < 0)
s->preview_suppressed_p = True;
flush_dialog_changes_and_save (s);
- force_list_select_item (s, GTK_LIST (list_widget), list_elt, True);
+ force_list_select_item (s, list_widget, list_elt, True);
populate_demo_window (s, list_elt);
run_hack (s, list_elt, False);
saver_preferences *p = &s->prefs;
Bool ops = s->preview_suppressed_p;
- GtkList *list_widget =
- GTK_LIST (name_to_widget (s, "list"));
+ GtkWidget *list_widget = name_to_widget (s, "list");
int list_elt = selected_list_element (s);
if (list_elt < 0)
s->preview_suppressed_p = True;
flush_dialog_changes_and_save (s);
- force_list_select_item (s, GTK_LIST (list_widget), list_elt, True);
+ force_list_select_item (s, list_widget, list_elt, True);
populate_demo_window (s, list_elt);
run_hack (s, list_elt, False);
}
+#ifdef HAVE_GTK2
+
+typedef struct {
+ state *s;
+ int i;
+ Bool *changed;
+} FlushForeachClosure;
+
+static gboolean
+flush_checkbox (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ FlushForeachClosure *closure = data;
+ gboolean checked;
+
+ gtk_tree_model_get (model, iter,
+ COL_ENABLED, &checked,
+ -1);
+
+ if (flush_changes (closure->s, closure->i,
+ checked, 0, 0))
+ *closure->changed = True;
+
+ closure->i++;
+
+ /* don't remove row */
+ return FALSE;
+}
+
+#endif /* HAVE_GTK2 */
+
/* Flush out any changes made in the main dialog window (where changes
take place immediately: clicking on a checkbox causes the init file
to be written right away.)
{
saver_preferences *p = &s->prefs;
saver_preferences P2, *p2 = &P2;
+#ifdef HAVE_GTK2
+ GtkTreeView *list_widget = GTK_TREE_VIEW (name_to_widget (s, "list"));
+ GtkTreeModel *model = gtk_tree_view_get_model (list_widget);
+ FlushForeachClosure closure;
+#else /* !HAVE_GTK2 */
GtkList *list_widget = GTK_LIST (name_to_widget (s, "list"));
GList *kids = gtk_container_children (GTK_CONTAINER (list_widget));
+ int i;
+#endif /* !HAVE_GTK2 */
+
Bool changed = False;
GtkWidget *w;
- int i;
if (s->saving_p) return False;
s->saving_p = True;
/* Flush any checkbox changes in the list down into the prefs struct.
*/
+#ifdef HAVE_GTK2
+ closure.s = s;
+ closure.changed = &changed;
+ closure.i = 0;
+ gtk_tree_model_foreach (model, flush_checkbox, &closure);
+
+#else /* !HAVE_GTK2 */
+
for (i = 0; kids; kids = kids->next, i++)
{
GtkWidget *line = GTK_WIDGET (kids->data);
if (flush_changes (s, i, (checked ? 1 : 0), 0, 0))
changed = True;
}
-
+#endif /* ~HAVE_GTK2 */
/* Flush the non-hack-specific settings down into the prefs struct.
*/
}
-
-
void
pref_changed_cb (GtkWidget *widget, gpointer user_data)
{
}
}
+gboolean
+pref_changed_event_cb (GtkWidget *widget, GdkEvent *event, gpointer user_data)
+{
+ pref_changed_cb (widget, user_data);
+ return FALSE;
+}
/* Callback on menu items in the "mode" options menu.
*/
{
state *s = (state *) user_data;
saver_preferences *p = &s->prefs;
- GtkList *list = GTK_LIST (name_to_widget (s, "list"));
+ GtkWidget *list = name_to_widget (s, "list");
int list_elt;
GList *menu_items = gtk_container_children (GTK_CONTAINER (widget->parent));
schedule_preview (s, 0);
}
+#ifdef HAVE_GTK2
+static void
+list_activated_cb (GtkTreeView *list,
+ GtkTreePath *path,
+ GtkTreeViewColumn *column,
+ gpointer data)
+{
+ state *s = data;
+ char *str;
+ int list_elt;
+
+ g_return_if_fail (!gdk_pointer_is_grabbed ());
+
+ str = gtk_tree_path_to_string (path);
+ list_elt = strtol (str, NULL, 10);
+ g_free (str);
+
+ if (list_elt >= 0)
+ run_hack (s, list_elt, True);
+}
+
+static void
+list_select_changed_cb (GtkTreeSelection *selection, gpointer data)
+{
+ state *s = (state *)data;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ GtkTreePath *path;
+ char *str;
+ int list_elt;
+
+ if (!gtk_tree_selection_get_selected (selection, &model, &iter))
+ return;
+
+ path = gtk_tree_model_get_path (model, &iter);
+ str = gtk_tree_path_to_string (path);
+ list_elt = strtol (str, NULL, 10);
+
+ gtk_tree_path_free (path);
+ g_free (str);
+
+ populate_demo_window (s, list_elt);
+ flush_dialog_changes_and_save (s);
+}
+
+#else /* !HAVE_GTK2 */
static time_t last_doubleclick_time = 0; /* FMH! This is to suppress the
list_select_cb that comes in
flush_dialog_changes_and_save (s);
}
+#endif /* !HAVE_GTK2 */
+
/* Called when the checkboxes that are in the left column of the
scrolling list are clicked. This both populates the right pane
also syncs this checkbox with the right pane Enabled checkbox.
*/
static void
-list_checkbox_cb (GtkWidget *cb, gpointer data)
+list_checkbox_cb (
+#ifdef HAVE_GTK2
+ GtkCellRendererToggle *toggle,
+ gchar *path_string,
+#else /* !HAVE_GTK2 */
+ GtkWidget *cb,
+#endif /* !HAVE_GTK2 */
+ gpointer data)
{
state *s = (state *) data;
+#ifdef HAVE_GTK2
+ GtkScrolledWindow *scroller =
+ GTK_SCROLLED_WINDOW (name_to_widget (s, "scroller"));
+ GtkTreeView *list = GTK_TREE_VIEW (name_to_widget (s, "list"));
+ GtkTreeModel *model = gtk_tree_view_get_model (list);
+ GtkTreePath *path = gtk_tree_path_new_from_string (path_string);
+ GtkTreeIter iter;
+ gboolean active;
+#else /* !HAVE_GTK2 */
GtkWidget *line_hbox = GTK_WIDGET (cb)->parent;
GtkWidget *line = GTK_WIDGET (line_hbox)->parent;
GtkList *list = GTK_LIST (GTK_WIDGET (line)->parent);
GtkViewport *vp = GTK_VIEWPORT (GTK_WIDGET (list)->parent);
GtkScrolledWindow *scroller = GTK_SCROLLED_WINDOW (GTK_WIDGET (vp)->parent);
+#endif /* ~HAVE_GTK2 */
GtkAdjustment *adj;
double scroll_top;
- int list_elt = gtk_list_child_position (list, line);
+ int list_elt;
+
+#ifdef HAVE_GTK2
+ if (!gtk_tree_model_get_iter (model, &iter, path))
+ {
+ g_warning ("bad path: %s", path_string);
+ return;
+ }
+ gtk_tree_path_free (path);
+
+ gtk_tree_model_get (model, &iter,
+ COL_ENABLED, &active,
+ -1);
+
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+ COL_ENABLED, !active,
+ -1);
+
+ list_elt = strtol (path_string, NULL, 10);
+#else /* !HAVE_GTK2 */
+ list_elt = gtk_list_child_position (list, line);
+#endif /* !HAVE_GTK2 */
/* remember previous scroll position of the top of the list */
adj = gtk_scrolled_window_get_vadjustment (scroller);
scroll_top = adj->value;
flush_dialog_changes_and_save (s);
- force_list_select_item (s, list, list_elt, False);
+ force_list_select_item (s, GTK_WIDGET (list), list_elt, False);
populate_demo_window (s, list_elt);
/* restore the previous scroll position of the top of the list.
GtkFileSelection *selector = fsd->widget;
GtkWidget *top = s->toplevel_widget;
saver_preferences *p = &s->prefs;
- char *path = gtk_file_selection_get_filename (selector);
+ const char *path = gtk_file_selection_get_filename (selector);
if (p->image_directory && !strcmp(p->image_directory, path))
return; /* no change */
if (hack_number >= 0 && hack_number < p->screenhacks_count)
{
int list_elt = s->hack_number_to_list_elt[hack_number];
- GtkList *list = GTK_LIST (name_to_widget (s, "list"));
+ GtkWidget *list = name_to_widget (s, "list");
force_list_select_item (s, list, list_elt, True);
populate_demo_window (s, list_elt);
}
static void
populate_hack_list (state *s)
{
+#ifdef HAVE_GTK2
+ saver_preferences *p = &s->prefs;
+ GtkTreeView *list = GTK_TREE_VIEW (name_to_widget (s, "list"));
+ GtkListStore *model;
+ GtkTreeSelection *selection;
+ GtkCellRenderer *ren;
+ GtkTreeIter iter;
+ int i;
+
+ g_object_get (G_OBJECT (list),
+ "model", &model,
+ NULL);
+ if (!model)
+ {
+ model = gtk_list_store_new (COL_LAST, G_TYPE_BOOLEAN, G_TYPE_STRING);
+ g_object_set (G_OBJECT (list), "model", model, NULL);
+ g_object_unref (model);
+
+ ren = gtk_cell_renderer_toggle_new ();
+ gtk_tree_view_insert_column_with_attributes (list, COL_ENABLED,
+ _("Use"), ren,
+ "active", COL_ENABLED,
+ NULL);
+
+ g_signal_connect (ren, "toggled",
+ G_CALLBACK (list_checkbox_cb),
+ s);
+
+ ren = gtk_cell_renderer_text_new ();
+ gtk_tree_view_insert_column_with_attributes (list, COL_NAME,
+ _("Screen Saver"), ren,
+ "text", COL_NAME,
+ NULL);
+
+ g_signal_connect_after (list, "row_activated",
+ G_CALLBACK (list_activated_cb),
+ s);
+
+ selection = gtk_tree_view_get_selection (list);
+ g_signal_connect (selection, "changed",
+ G_CALLBACK (list_select_changed_cb),
+ s);
+
+ }
+
+ for (i = 0; i < p->screenhacks_count; i++)
+ {
+ screenhack *hack = p->screenhacks[s->list_elt_to_hack_number[i]];
+
+ char *pretty_name = (hack->name
+ ? strdup (hack->name)
+ : make_hack_name (hack->command));
+
+ gtk_list_store_append (model, &iter);
+ gtk_list_store_set (model, &iter,
+ COL_ENABLED, hack->enabled_p,
+ COL_NAME, pretty_name,
+ -1);
+
+ free (pretty_name);
+ }
+
+#else /* !HAVE_GTK2 */
+
saver_preferences *p = &s->prefs;
GtkList *list = GTK_LIST (name_to_widget (s, "list"));
int i;
gtk_signal_connect (GTK_OBJECT (list), "unselect_child",
GTK_SIGNAL_FUNC (list_unselect_cb),
(gpointer) s);
+#endif /* !HAVE_GTK2 */
}
-
static void
update_list_sensitivity (state *s)
{
Bool checkable = (p->mode == RANDOM_HACKS);
Bool blankable = (p->mode != DONT_BLANK);
+#ifndef HAVE_GTK2
GtkWidget *head = name_to_widget (s, "col_head_hbox");
GtkWidget *use = name_to_widget (s, "use_col_frame");
+#endif /* HAVE_GTK2 */
GtkWidget *scroller = name_to_widget (s, "scroller");
GtkWidget *buttons = name_to_widget (s, "next_prev_hbox");
GtkWidget *blanker = name_to_widget (s, "blanking_table");
+#ifdef HAVE_GTK2
+ GtkTreeView *list = GTK_TREE_VIEW (name_to_widget (s, "list"));
+ GtkTreeViewColumn *use = gtk_tree_view_get_column (list, COL_ENABLED);
+#else /* !HAVE_GTK2 */
GtkList *list = GTK_LIST (name_to_widget (s, "list"));
GList *kids = gtk_container_children (GTK_CONTAINER (list));
gtk_widget_set_sensitive (GTK_WIDGET (head), sensitive);
+#endif /* !HAVE_GTK2 */
gtk_widget_set_sensitive (GTK_WIDGET (scroller), sensitive);
gtk_widget_set_sensitive (GTK_WIDGET (buttons), sensitive);
gtk_widget_set_sensitive (GTK_WIDGET (blanker), blankable);
+#ifdef HAVE_GTK2
+ gtk_tree_view_column_set_visible (use, checkable);
+#else /* !HAVE_GTK2 */
if (checkable)
gtk_widget_show (use); /* the "Use" column header */
else
kids = kids->next;
}
+#endif /* !HAVE_GTK2 */
}
populate_prefs_page (state *s)
{
saver_preferences *p = &s->prefs;
- char str[100];
/* The file supports timeouts of less than a minute, but the GUI does
not, so throttle the values to be at least one minute (since "0" is
# undef THROTTLE
# define FMT_MINUTES(NAME,N) \
- sprintf (str, "%d", (((N / 1000) + 59) / 60)); \
- gtk_entry_set_text (GTK_ENTRY (name_to_widget (s, (NAME))), str)
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (name_to_widget (s, (NAME))), (double)((N) + 59) / (60 * 1000))
# define FMT_SECONDS(NAME,N) \
- sprintf (str, "%d", ((N) / 1000)); \
- gtk_entry_set_text (GTK_ENTRY (name_to_widget (s, (NAME))), str)
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (name_to_widget (s, (NAME))), (double)((N) / 1000))
FMT_MINUTES ("timeout_spinbutton", p->timeout);
FMT_MINUTES ("cycle_spinbutton", p->cycle);
static void
fix_text_entry_sizes (state *s)
{
+#ifdef FIXME
const char * const spinbuttons[] = {
"timeout_spinbutton", "cycle_spinbutton", "lock_spinbutton",
"dpms_standby_spinbutton", "dpms_suspend_spinbutton",
w = GTK_WIDGET (name_to_widget (s, "scroller"));
gtk_widget_set_usize (w, -2, height);
}
+#endif
}
-
+#ifndef HAVE_GTK2
\f
/* Pixmaps for the up and down arrow buttons (yeah, this is sleazy...)
*/
state *s = (state *) user_data;
pixmapify_button (s, 0);
}
-
+#endif /* !HAVE_GTK2 */
\f
/* Work around a Gtk bug that causes label widgets to wrap text too early.
gtk_object_set_data (GTK_OBJECT (label), "gtk-aux-info", aux_info);
gtk_signal_connect (GTK_OBJECT (label), "size_allocate",
- you_are_not_a_unique_or_beautiful_snowflake,
+ GTK_SIGNAL_FUNC (you_are_not_a_unique_or_beautiful_snowflake),
0);
gtk_widget_set_usize (GTK_WIDGET (label), -2, -2);
const char *f = init_file_name();
char *b;
int list_elt;
- GtkList *list;
+ GtkWidget *list;
if (!f || !*f) return 0;
b = (char *) malloc (strlen(f) + 1024);
initialize_sort_map (s);
list_elt = selected_list_element (s);
- list = GTK_LIST (name_to_widget (s, "list"));
+ list = name_to_widget (s, "list");
gtk_container_foreach (GTK_CONTAINER (list), widget_deleter, NULL);
populate_hack_list (s);
force_list_select_item (s, list, list_elt, True);
populate_prefs_page (s);
populate_demo_window (s, list_elt);
- ensure_selected_item_visible (GTK_WIDGET (list));
+ ensure_selected_item_visible (list);
status = 1;
}
gdk_window_set_background (window, &p->style->bg[GTK_STATE_NORMAL]);
gdk_window_clear (window);
+#ifdef HAVE_GTK2
+ {
+ GtkWidget *notebook;
+
+ notebook = name_to_widget (s, "preview_notebook");
+ gtk_notebook_set_page (GTK_NOTEBOOK (notebook),
+ s->running_preview_error_p
+ ? 1 : 0);
+ }
+#else /* !HAVE_GTK2 */
if (s->running_preview_error_p)
{
const char * const lines[] = { N_("No Preview"), N_("Available") };
y += lh;
}
}
+#endif /* !HAVE_GTK2 */
gdk_flush ();
-
- /* Is there a GDK way of doing this? */
- XSync (GDK_DISPLAY(), False);
}
return FALSE; /* do not re-execute timer */
}
+#ifdef HAVE_GTK2
+
+GtkWidget *
+create_xscreensaver_demo (void)
+{
+ GtkWidget *nb;
+
+ nb = name_to_widget (global_state_kludge, "preview_notebook");
+ gtk_notebook_set_show_tabs (GTK_NOTEBOOK (nb), FALSE);
+
+ return name_to_widget (global_state_kludge, "xscreensaver_demo");
+}
+
+GtkWidget *
+create_xscreensaver_settings_dialog (void)
+{
+ GtkWidget *w, *box;
+
+ box = name_to_widget (global_state_kludge, "dialog_action_area");
+
+ w = name_to_widget (global_state_kludge, "adv_button");
+ gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (box), w, TRUE);
+
+ w = name_to_widget (global_state_kludge, "std_button");
+ gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (box), w, TRUE);
+
+ return name_to_widget (global_state_kludge, "xscreensaver_settings_dialog");
+}
+
+#endif /* HAVE_GTK2 */
int
main (int argc, char **argv)
textdomain (GETTEXT_PACKAGE);
# ifdef HAVE_GTK2
- bindtextdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-# else /* ! HAVE_GTK2 */
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+# else /* !HAVE_GTK2 */
if (!setlocale (LC_ALL, ""))
fprintf (stderr, "%s: locale not supported by C library\n", real_progname);
-# endif /* ! HAVE_GTK2 */
+# endif /* !HAVE_GTK2 */
#endif /* ENABLE_NLS */
}
#ifdef DEFAULT_ICONDIR /* from -D on compile line */
+# ifndef HAVE_GTK2
{
const char *dir = DEFAULT_ICONDIR;
if (*dir) add_pixmap_directory (dir);
}
-#endif
+# endif /* !HAVE_GTK2 */
+#endif /* DEFAULT_ICONDIR */
/* This is gross, but Gtk understands --display and not -display...
*/
(!strcmp(argv[i], "--crapplet") ||
!strcmp(argv[i], "--capplet")))
{
-# ifdef HAVE_CRAPPLET
+# if defined(HAVE_CRAPPLET) || defined(HAVE_GTK2)
int j;
crapplet_p = True;
for (j = i; j < argc; j++) /* remove it from the list */
argv[j] = argv[j+1];
argc--;
-
-# else /* !HAVE_CRAPPLET */
+# else /* !HAVE_CRAPPLET && !HAVE_GTK2 */
fprintf (stderr, "%s: not compiled with --crapplet support\n",
real_progname);
fprintf (stderr, "%s: %s\n", real_progname, usage);
exit (1);
-# endif /* !HAVE_CRAPPLET */
+# endif /* !HAVE_CRAPPLET && !HAVE_GTK2 */
}
else if (argv[i] &&
(!strcmp(argv[i], "--debug") ||
"map", GTK_SIGNAL_FUNC(map_popup_window_cb),
(gpointer) s);
+#ifndef HAVE_GTK2
gtk_signal_connect (GTK_OBJECT (name_to_widget (s, "prev")),
"map", GTK_SIGNAL_FUNC(map_prev_button_cb),
(gpointer) s);
gtk_signal_connect (GTK_OBJECT (name_to_widget (s, "next")),
"map", GTK_SIGNAL_FUNC(map_next_button_cb),
(gpointer) s);
-
+#endif /* !HAVE_GTK2 */
/* Hook up callbacks to the items on the mode menu. */
{
[Desktop Entry]
Exec=xscreensaver-demo --crapplet
+TryExec=xscreensaver-demo
Icon=xscreensaver.xpm
Terminal=0
_Name=Screensaver
_Comment=Configure the settings of the screensaver.
Type=Application
+Categories=Applications;Settings;
&root_x, &root_y, &win_x, &win_y, &mask))
{
if (p->verbose_p)
- fprintf (stderr, "%s: mouse is on screen %d\n",
+ fprintf (stderr, "%s: mouse is on screen %d of %d\n",
blurb(), i, si->nscreens);
return i;
}
.if n .sp 1
.if t .sp .5
..
-.TH XScreenSaver 1 "11-May-2002 (4.03)" "X Version 11"
+.TH XScreenSaver 1 "31-May-2002 (4.04)" "X Version 11"
.SH NAME
xscreensaver-command - control a running xscreensaver process
.SH SYNOPSIS
<widget>
<class>GtkWindow</class>
<name>xscreensaver_demo</name>
+ <visible>False</visible>
<title>XScreenSaver</title>
<type>GTK_WINDOW_TOPLEVEL</type>
<position>GTK_WIN_POS_NONE</position>
<widget>
<class>GtkDialog</class>
<name>xscreensaver_settings_dialog</name>
+ <visible>False</visible>
<title>XScreenSaver: Mode-Specific Settings</title>
<type>GTK_WINDOW_DIALOG</type>
<position>GTK_WIN_POS_NONE</position>
--- /dev/null
+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
+<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
+
+<glade-interface>
+
+<widget class="GtkWindow" id="xscreensaver_demo">
+ <property name="title" translatable="yes">XScreenSaver</property>
+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
+ <property name="window_position">GTK_WIN_POS_NONE</property>
+ <property name="modal">False</property>
+ <property name="wmclass_name">xscreensaver</property>
+ <property name="wmclass_class">XScreenSaver</property>
+ <property name="resizable">True</property>
+ <property name="destroy_with_parent">False</property>
+
+ <child>
+ <widget class="GtkVBox" id="outer_vbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">5</property>
+
+ <child>
+ <widget class="GtkMenuBar" id="menubar">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkMenuItem" id="file">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_File</property>
+ <property name="use_underline">True</property>
+
+ <child>
+ <widget class="GtkMenu" id="file_menu">
+
+ <child>
+ <widget class="GtkMenuItem" id="activate_menu">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Blank Screen Now</property>
+ <property name="use_underline">True</property>
+ <signal name="activate" handler="activate_menu_cb"/>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="lock_menu">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Lock Screen Now</property>
+ <property name="use_underline">True</property>
+ <signal name="activate" handler="lock_menu_cb"/>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="kill_menu">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Kill Daemon</property>
+ <property name="use_underline">True</property>
+ <signal name="activate" handler="kill_menu_cb"/>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="restart">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Restart Daemon</property>
+ <property name="use_underline">True</property>
+ <signal name="activate" handler="restart_menu_cb"/>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="separator1">
+ <property name="visible">True</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="exit_menu">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Quit</property>
+ <property name="use_underline">True</property>
+ <signal name="activate" handler="exit_menu_cb"/>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="help">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Help</property>
+ <property name="use_underline">True</property>
+
+ <child>
+ <widget class="GtkMenu" id="help_menu">
+
+ <child>
+ <widget class="GtkMenuItem" id="about_menu">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_About...</property>
+ <property name="use_underline">True</property>
+ <signal name="activate" handler="about_menu_cb"/>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="doc_menu">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Documentation...</property>
+ <property name="use_underline">True</property>
+ <signal name="activate" handler="doc_menu_cb"/>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkNotebook" id="notebook">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="show_tabs">True</property>
+ <property name="show_border">True</property>
+ <property name="tab_pos">GTK_POS_TOP</property>
+ <property name="scrollable">False</property>
+ <property name="tab_hborder">2</property>
+ <property name="tab_vborder">2</property>
+ <property name="enable_popup">False</property>
+ <signal name="switch_page" handler="switch_page_cb"/>
+
+ <child>
+ <widget class="GtkTable" id="demos_table">
+ <property name="border_width">10</property>
+ <property name="visible">True</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">0</property>
+ <property name="column_spacing">0</property>
+
+ <child>
+ <widget class="GtkTable" id="blanking_table">
+ <property name="visible">True</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">4</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">2</property>
+ <property name="column_spacing">0</property>
+
+ <child>
+ <widget class="GtkLabel" id="cycle_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Cycle After</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_RIGHT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">8</property>
+ <property name="ypad">0</property>
+ <property name="mnemonic_widget">cycle_spinbutton</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEventBox" id="lock_button_eventbox">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">Whether a password should be required to un-blank the screen.</property>
+
+ <child>
+ <widget class="GtkCheckButton" id="lock_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Lock Screen After</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="pref_changed_cb"/>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="timeout_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Blank After</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_RIGHT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">8</property>
+ <property name="ypad">0</property>
+ <property name="mnemonic_widget">timeout_spinbutton</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkSpinButton" id="timeout_spinbutton">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">How long before the monitor goes completely black.</property>
+ <property name="can_focus">True</property>
+ <property name="climb_rate">15</property>
+ <property name="digits">0</property>
+ <property name="numeric">True</property>
+ <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+ <property name="snap_to_ticks">True</property>
+ <property name="wrap">False</property>
+ <property name="adjustment">1 1 720 1 15 15</property>
+ <signal name="activate" handler="pref_changed_cb"/>
+ <signal name="focus_out_event" handler="pref_changed_event_cb"/>
+ <signal name="value_changed" handler="pref_changed_cb"/>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="timeout_mlabel">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">minutes</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="cycle_mlabel">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">minutes</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="lock_mlabel">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">minutes</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkSpinButton" id="lock_spinbutton">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">How long before the monitor goes completely black.</property>
+ <property name="can_focus">True</property>
+ <property name="climb_rate">15</property>
+ <property name="digits">0</property>
+ <property name="numeric">True</property>
+ <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+ <property name="snap_to_ticks">True</property>
+ <property name="wrap">False</property>
+ <property name="adjustment">0 0 720 1 15 15</property>
+ <signal name="activate" handler="pref_changed_cb"/>
+ <signal name="focus_out_event" handler="pref_changed_event_cb"/>
+ <signal name="value_changed" handler="pref_changed_cb"/>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_padding">10</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkSpinButton" id="cycle_spinbutton">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">How long before the monitor goes completely black.</property>
+ <property name="can_focus">True</property>
+ <property name="climb_rate">15</property>
+ <property name="digits">0</property>
+ <property name="numeric">True</property>
+ <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+ <property name="snap_to_ticks">True</property>
+ <property name="wrap">False</property>
+ <property name="adjustment">1 1 720 1 15 15</property>
+ <signal name="activate" handler="pref_changed_cb"/>
+ <signal name="focus_out_event" handler="pref_changed_event_cb"/>
+ <signal name="value_changed" handler="pref_changed_cb"/>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options">fill</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHButtonBox" id="demo_manual_hbbox">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_SPREAD</property>
+ <property name="spacing">30</property>
+
+ <child>
+ <widget class="GtkButton" id="demo">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Preview</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <signal name="clicked" handler="run_this_cb"/>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="settings">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Settings...</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <signal name="clicked" handler="settings_cb"/>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options">fill</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkVBox" id="list_vbox">
+ <property name="border_width">10</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkHBox" id="mode_hbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkLabel" id="mode_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Mode:</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="mnemonic_widget">mode_menu</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkOptionMenu" id="mode_menu">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="history">0</property>
+
+ <child internal-child="menu">
+ <widget class="GtkMenu" id="convertwidget1">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkMenuItem" id="convertwidget2">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Disable Screen Saver</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="convertwidget3">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Blank Screen Only</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="convertwidget4">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Only One Screen Saver</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="convertwidget5">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Random Screen Saver</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">4</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">10</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkScrolledWindow" id="scroller">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+ <child>
+ <widget class="GtkTreeView" id="list">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">False</property>
+ <property name="rules_hint">True</property>
+ <property name="reorderable">False</property>
+ <property name="enable_search">True</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="centering_hbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">True</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkHBox" id="next_prev_hbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkButton" id="next">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <signal name="clicked" handler="run_next_cb"/>
+
+ <child>
+ <widget class="GtkArrow" id="arrow1">
+ <property name="visible">True</property>
+ <property name="arrow_type">GTK_ARROW_DOWN</property>
+ <property name="shadow_type">GTK_SHADOW_OUT</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="prev">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <signal name="clicked" handler="run_prev_cb"/>
+
+ <child>
+ <widget class="GtkArrow" id="arrow2">
+ <property name="visible">True</property>
+ <property name="arrow_type">GTK_ARROW_UP</property>
+ <property name="shadow_type">GTK_SHADOW_OUT</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkFrame" id="preview_frame">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Description</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+
+ <child>
+ <widget class="GtkNotebook" id="preview_notebook">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="show_tabs">True</property>
+ <property name="show_border">False</property>
+ <property name="tab_pos">GTK_POS_BOTTOM</property>
+ <property name="scrollable">False</property>
+ <property name="tab_hborder">2</property>
+ <property name="tab_vborder">2</property>
+ <property name="enable_popup">False</property>
+
+ <child>
+ <widget class="GtkAspectFrame" id="preview_aspectframe">
+ <property name="border_width">8</property>
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="ratio">1.33</property>
+ <property name="obey_child">False</property>
+
+ <child>
+ <widget class="GtkDrawingArea" id="preview">
+ <property name="visible">True</property>
+ <accessibility>
+ <atkproperty name="AtkObject::accessible_description" translatable="yes">Preview of screen saver</atkproperty>
+ </accessibility>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="preview_tab">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">preview</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="no_preview_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">No Preview
+Available</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="no_preview_tab">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">no preview</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="y_padding">6</property>
+ <property name="x_options">expand|shrink|fill</property>
+ <property name="y_options">expand|shrink|fill</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="demo_tab">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Display Modes</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkTable" id="options_table">
+ <property name="visible">True</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <property name="homogeneous">True</property>
+ <property name="row_spacing">0</property>
+ <property name="column_spacing">0</property>
+
+ <child>
+ <widget class="GtkFrame" id="grab_frame">
+ <property name="border_width">10</property>
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Image Manipulation</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+
+ <child>
+ <widget class="GtkHBox" id="grab_hbox">
+ <property name="border_width">8</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+
+ <child>
+ <widget class="GtkImage" id="image2">
+ <property name="visible">True</property>
+ <property name="pixbuf">screensaver-snap.xpm</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">4</property>
+ <property name="ypad">8</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkVBox" id="grab_vbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkCheckButton" id="grab_desk_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Grab Desktop _Images</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="pref_changed_cb"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkCheckButton" id="grab_video_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Grab _Video Frames</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="pref_changed_cb"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkCheckButton" id="grab_image_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Choose _Random Image:</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="pref_changed_cb"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="image_hbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkLabel" id="grab_dummy">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">8</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="image_text">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char" translatable="yes">*</property>
+ <property name="activates_default">False</property>
+ <signal name="activate" handler="pref_changed_cb"/>
+ <signal name="focus_out_event" handler="pref_changed_event_cb"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="image_browse_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Browse</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <signal name="clicked" handler="browse_image_dir_cb"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkFrame" id="diag_frame">
+ <property name="border_width">10</property>
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Diagnostics</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+
+ <child>
+ <widget class="GtkHBox" id="diag_hbox">
+ <property name="border_width">8</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+
+ <child>
+ <widget class="GtkImage" id="diag_logo">
+ <property name="visible">True</property>
+ <property name="pixbuf">screensaver-diagnostic.xpm</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkVBox" id="diag_vbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkCheckButton" id="verbose_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Verbose Dialognostics</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="pref_changed_cb"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkCheckButton" id="capture_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Display Subprocess _Errors</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="pref_changed_cb"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkCheckButton" id="splash_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Display _Splash Screen at Startup</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkFrame" id="dpms_frame">
+ <property name="border_width">10</property>
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Display Power Management</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+
+ <child>
+ <widget class="GtkHBox" id="dpms_hbox">
+ <property name="border_width">8</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+
+ <child>
+ <widget class="GtkImage" id="dpms_logo">
+ <property name="visible">True</property>
+ <property name="pixbuf">screensaver-power.xpm</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkVBox" id="vbox6">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkCheckButton" id="dpms_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Power Management Enabled</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="active">True</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="pref_changed_cb"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkTable" id="dpms_table">
+ <property name="visible">True</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">3</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">2</property>
+ <property name="column_spacing">4</property>
+
+ <child>
+ <widget class="GtkLabel" id="dpms_standby_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Stand_by After</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">10</property>
+ <property name="ypad">0</property>
+ <property name="mnemonic_widget">dpms_standby_spinbutton</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="dpms_suspend_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Sus_pend After</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">10</property>
+ <property name="ypad">0</property>
+ <property name="mnemonic_widget">dpms_suspend_spinbutton</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="dpms_off_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Off After</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">10</property>
+ <property name="ypad">0</property>
+ <property name="mnemonic_widget">dpms_off_spinbutton</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="dpms_standby_mlabel">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">minutes</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="dpms_suspend_mlabel">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">minutes</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="dpms_off_mlabel">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">minutes</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkSpinButton" id="dpms_off_spinbutton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="climb_rate">15</property>
+ <property name="digits">0</property>
+ <property name="numeric">True</property>
+ <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+ <property name="snap_to_ticks">True</property>
+ <property name="wrap">False</property>
+ <property name="adjustment">0 0 1440 1 15 15</property>
+ <signal name="activate" handler="pref_changed_cb"/>
+ <signal name="focus_out_event" handler="pref_changed_event_cb"/>
+ <signal name="value_changed" handler="pref_changed_cb"/>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options"></property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkSpinButton" id="dpms_suspend_spinbutton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="climb_rate">15</property>
+ <property name="digits">0</property>
+ <property name="numeric">True</property>
+ <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+ <property name="snap_to_ticks">True</property>
+ <property name="wrap">False</property>
+ <property name="adjustment">0 0 1440 1 15 15</property>
+ <signal name="activate" handler="pref_changed_cb"/>
+ <signal name="focus_out_event" handler="pref_changed_event_cb"/>
+ <signal name="value_changed" handler="pref_changed_cb"/>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options"></property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkSpinButton" id="dpms_standby_spinbutton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="climb_rate">15</property>
+ <property name="digits">0</property>
+ <property name="numeric">True</property>
+ <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+ <property name="snap_to_ticks">True</property>
+ <property name="wrap">False</property>
+ <property name="adjustment">0 0 1440 1 15 15</property>
+ <signal name="activate" handler="pref_changed_cb"/>
+ <signal name="focus_out_event" handler="pref_changed_event_cb"/>
+ <signal name="value_changed" handler="pref_changed_cb"/>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options"></property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="y_options">fill</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkFrame" id="cmap_frame">
+ <property name="border_width">10</property>
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Colormaps</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+
+ <child>
+ <widget class="GtkHBox" id="cmap_hbox">
+ <property name="border_width">8</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+
+ <child>
+ <widget class="GtkImage" id="image5">
+ <property name="visible">True</property>
+ <property name="pixbuf">screensaver-colorselector.xpm</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkVBox" id="vbox7">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkCheckButton" id="install_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Install _Colormap</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="pref_changed_cb"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHSeparator" id="cmap_hr">
+ <property name="visible">True</property>
+ </widget>
+ <packing>
+ <property name="padding">4</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkCheckButton" id="fade_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Fade to Black when _Blanking</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="pref_changed_cb"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkCheckButton" id="unfade_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Fade from Black When _Unblanking</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="pref_changed_cb"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="fade_hbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkLabel" id="fade_dummy">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">3</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="fade_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">F_ade Duration</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="mnemonic_widget">fade_spinbutton</property>
+ </widget>
+ <packing>
+ <property name="padding">10</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkSpinButton" id="fade_spinbutton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="climb_rate">1</property>
+ <property name="digits">0</property>
+ <property name="numeric">True</property>
+ <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+ <property name="snap_to_ticks">True</property>
+ <property name="wrap">False</property>
+ <property name="adjustment">0 0 10 1 1 1</property>
+ <signal name="activate" handler="pref_changed_cb"/>
+ <signal name="focus_out_event" handler="pref_changed_event_cb"/>
+ <signal name="value_changed" handler="pref_changed_cb"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="fade_sec_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">seconds</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options">fill</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="options_tab">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Advanced</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+</widget>
+
+<widget class="GtkDialog" id="xscreensaver_settings_dialog">
+ <property name="title" translatable="yes">dialog1</property>
+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
+ <property name="window_position">GTK_WIN_POS_NONE</property>
+ <property name="modal">False</property>
+ <property name="resizable">True</property>
+ <property name="destroy_with_parent">False</property>
+ <property name="has_separator">False</property>
+
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog_vbox">
+ <property name="border_width">2</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog_action_area">
+ <property name="border_width">5</property>
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <property name="spacing">10</property>
+
+ <child>
+ <widget class="GtkButton" id="adv_button">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Advanced >></property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="settings_adv_cb"/>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="std_button">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Standard <<</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="settings_std_cb"/>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="cancel_button">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="response_id">-6</property>
+ <signal name="clicked" handler="settings_cancel_cb"/>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="ok_button">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-ok</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="response_id">-5</property>
+ <signal name="clicked" handler="settings_ok_cb"/>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="hbox1">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+
+ <child>
+ <widget class="GtkFrame" id="opt_frame">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Settings</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+
+ <child>
+ <widget class="GtkNotebook" id="opt_notebook">
+ <property name="border_width">12</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="show_tabs">True</property>
+ <property name="show_border">False</property>
+ <property name="tab_pos">GTK_POS_BOTTOM</property>
+ <property name="scrollable">False</property>
+ <property name="tab_hborder">2</property>
+ <property name="tab_vborder">2</property>
+ <property name="enable_popup">False</property>
+ <signal name="switch_page" handler="settings_switch_page_cb"/>
+
+ <child>
+ <widget class="GtkVBox" id="settings_vbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="std_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Standard</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkTable" id="adv_table">
+ <property name="visible">True</property>
+ <property name="n_rows">4</property>
+ <property name="n_columns">2</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">0</property>
+ <property name="column_spacing">0</property>
+
+ <child>
+ <widget class="GtkImage" id="cmd_logo">
+ <property name="visible">True</property>
+ <property name="pixbuf">screensaver-cmndln.xpm</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">4</property>
+ <property name="ypad">8</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options">fill</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="cmd_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Command Line:</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="mnemonic_widget">cmd_text</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="cmd_text">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char" translatable="yes">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="visual_hbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkLabel" id="visual">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Visual:</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">3</property>
+ <property name="ypad">0</property>
+ <property name="mnemonic_widget">visual_entry</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkCombo" id="visual_combo">
+ <property name="visible">True</property>
+ <property name="value_in_list">False</property>
+ <property name="allow_empty">True</property>
+ <property name="case_sensitive">False</property>
+ <property name="enable_arrow_keys">True</property>
+ <property name="enable_arrows_always">False</property>
+
+ <child internal-child="entry">
+ <widget class="GtkEntry" id="visual_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char" translatable="yes">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ </child>
+
+ <child internal-child="list">
+ <widget class="GtkList" id="combo-list1">
+ <property name="visible">True</property>
+ <property name="selection_mode">GTK_SELECTION_BROWSE</property>
+
+ <child>
+ <widget class="GtkListItem" id="listitem25">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Any</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="listitem26">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Best</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="listitem27">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Default</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="listitem28">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Default-N</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="listitem29">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">GL</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="listitem30">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">TrueColor</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="listitem31">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">PseudoColor</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="listitem32">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">StaticGray</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="listitem33">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">GrayScale</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="listitem34">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">DirectColor</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="listitem35">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Color</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="listitem36">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Gray</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="listitem37">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Mono</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">fill</property>
+ <property name="y_options">fill</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="adv_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Advanced</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkFrame" id="doc_frame">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Description</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+
+ <child>
+ <widget class="GtkVBox" id="doc_vbox">
+ <property name="border_width">5</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">5</property>
+
+ <child>
+ <widget class="GtkLabel" id="doc">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">True</property>
+ <property name="selectable">True</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="manual">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Documentation...</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <signal name="clicked" handler="manual_cb"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+</widget>
+
+</glade-interface>
.if n .sp 1
.if t .sp .5
..
-.TH XScreenSaver 1 "11-May-2002 (4.03)" "X Version 11"
+.TH XScreenSaver 1 "31-May-2002 (4.04)" "X Version 11"
.SH NAME
xscreensaver-demo - interactively control the background xscreensaver daemon
.SH SYNOPSIS
-.TH XScreenSaver 1 "11-May-2002 (4.03)" "X Version 11"
+.TH XScreenSaver 1 "31-May-2002 (4.04)" "X Version 11"
.SH NAME
xscreensaver-getimage-file - put a randomly-selected image on the root window
.SH SYNOPSIS
-.TH XScreenSaver 1 "11-May-2002 (4.03)" "X Version 11"
+.TH XScreenSaver 1 "31-May-2002 (4.04)" "X Version 11"
.SH NAME
xscreensaver-getimage-video - put a video frame on the root window
.SH SYNOPSIS
#include <ctype.h>
#include <errno.h>
+#ifdef HAVE_SYS_WAIT_H
+# include <sys/wait.h> /* for waitpid() and associated macros */
+#endif
+
#ifdef HAVE_XMU
# ifndef VMS
# include <X11/Xmu/Error.h>
#include "prefs.h"
#include "vroot.h"
+#ifdef HAVE_GDK_PIXBUF
+
+# ifdef HAVE_GTK2
+# include <gdk-pixbuf-xlib/gdk-pixbuf-xlib.h>
+# else /* !HAVE_GTK2 */
+# include <gdk-pixbuf/gdk-pixbuf-xlib.h>
+# endif /* !HAVE_GTK2 */
+
+# define HAVE_BUILTIN_IMAGE_LOADER
+#endif /* HAVE_GDK_PIXBUF */
+
static char *defaults[] = {
#include "../driver/XScreenSaver_ad.h"
fprintf (stderr, "\n");
}
- exit (1);
+ exit (-1);
}
static int
+#ifdef HAVE_BUILTIN_IMAGE_LOADER
+static void load_image_internal (Screen *screen, Window window,
+ int win_width, int win_height,
+ Bool verbose_p,
+ int ac, char **av);
+#endif /* HAVE_BUILTIN_IMAGE_LOADER */
+
+
static void
get_image (Screen *screen, Window window, Bool verbose_p)
{
if ((desk_p || video_p || image_p) &&
!top_level_window_p (screen, window))
{
- desk_p = False;
- video_p = False;
- image_p = False;
- if (verbose_p)
+ Bool changed_p = False;
+ if (desk_p) desk_p = False, changed_p = True;
+ if (video_p) video_p = False, changed_p = True;
+# ifndef HAVE_BUILTIN_IMAGE_LOADER
+ if (image_p) image_p = False, changed_p = True;
+ if (changed_p && verbose_p)
fprintf (stderr, "%s: not a top-level window: using colorbars.\n",
progname);
+# endif /* !HAVE_BUILTIN_IMAGE_LOADER */
}
else if (window != VirtualRootWindowOfScreen (screen))
{
Bool changed_p = False;
- if (!desk_p) desk_p = True, changed_p = True;
if (video_p) video_p = False, changed_p = True;
+# ifndef HAVE_BUILTIN_IMAGE_LOADER
+ if (!desk_p) desk_p = True, changed_p = True;
if (image_p) image_p = False, changed_p = True;
if (changed_p && verbose_p)
fprintf (stderr,
"%s: not running on root window: grabbing desktop.\n",
progname);
+# endif /* !HAVE_BUILTIN_IMAGE_LOADER */
}
count = 0;
else
{
char *av[10];
+ int ac = 0;
memset (av, 0, sizeof(av));
switch (which)
{
case do_video:
if (verbose_p)
fprintf (stderr, "%s: grabbing video\n", progname);
- av[0] = GETIMAGE_VIDEO_PROGRAM;
+ av[ac++] = GETIMAGE_VIDEO_PROGRAM;
break;
case do_image:
if (verbose_p)
fprintf (stderr, "%s: loading random image file\n", progname);
- av[0] = GETIMAGE_FILE_PROGRAM;
- av[1] = dir;
+ av[ac++] = GETIMAGE_FILE_PROGRAM;
+
+# ifdef HAVE_BUILTIN_IMAGE_LOADER
+ av[ac++] = "--name";
+# endif /* !HAVE_BUILTIN_IMAGE_LOADER */
+ av[ac++] = dir;
break;
default:
abort();
if (verbose_p)
{
int i;
- for (i = (sizeof(av)/sizeof(*av))-1; i > 1; i--)
+ for (i = ac; i > 1; i--)
av[i] = av[i-1];
av[1] = strdup ("--verbose");
+ ac++;
}
if (verbose_p)
}
# endif /* HAVE_PUTENV */
+# ifdef HAVE_BUILTIN_IMAGE_LOADER
+ if (which == do_image)
+ {
+ load_image_internal (screen, window, xgwa.width, xgwa.height,
+ verbose_p, ac, av);
+ return;
+ }
+# endif /* HAVE_BUILTIN_IMAGE_LOADER */
+
+
close (ConnectionNumber (dpy)); /* close display fd */
execvp (av[0], av); /* shouldn't return */
}
+#ifdef HAVE_BUILTIN_IMAGE_LOADER
+
+/* Reads a filename from "GETIMAGE_FILE_PROGRAM --name /DIR"
+ */
+static char *
+get_filename (Display *dpy, int ac, char **av)
+{
+ pid_t forked;
+ int fds [2];
+ int in, out;
+ char buf[1024];
+
+ if (pipe (fds))
+ {
+ sprintf (buf, "%s: error creating pipe", progname);
+ perror (buf);
+ return 0;
+ }
+
+ in = fds [0];
+ out = fds [1];
+
+ switch ((int) (forked = fork ()))
+ {
+ case -1:
+ {
+ sprintf (buf, "%s: couldn't fork", progname);
+ perror (buf);
+ return 0;
+ }
+ case 0:
+ {
+ int stdout_fd = 1;
+
+ close (in); /* don't need this one */
+ close (ConnectionNumber (dpy)); /* close display fd */
+
+ if (dup2 (out, stdout_fd) < 0) /* pipe stdout */
+ {
+ sprintf (buf, "%s: could not dup() a new stdout", progname);
+ exit (-1); /* exits fork */
+ }
+
+ execvp (av[0], av); /* shouldn't return. */
+ exit (-1); /* exits fork */
+ break;
+ }
+ default:
+ {
+ int wait_status = 0;
+ FILE *f = fdopen (in, "r");
+ int L;
+
+ close (out); /* don't need this one */
+ *buf = 0;
+ fgets (buf, sizeof(buf)-1, f);
+ fclose (f);
+
+ /* Wait for the child to die. */
+ waitpid (-1, &wait_status, 0);
+
+ L = strlen (buf);
+ while (L && buf[L-1] == '\n')
+ buf[--L] = 0;
+
+ return strdup (buf);
+ }
+ }
+
+ abort();
+}
+
+
+
+static void
+load_image_internal (Screen *screen, Window window,
+ int win_width, int win_height,
+ Bool verbose_p,
+ int ac, char **av)
+{
+ GdkPixbuf *pb;
+ Display *dpy = DisplayOfScreen (screen);
+ char *filename = get_filename (dpy, ac, av);
+
+ if (!filename)
+ {
+ fprintf (stderr, "%s: no file name returned by %s\n",
+ progname, av[0]);
+ goto FAIL;
+ }
+ else if (verbose_p)
+ fprintf (stderr, "%s: loading \"%s\"\n", progname, filename);
+
+ gdk_pixbuf_xlib_init (dpy, screen_number (screen));
+ xlib_rgb_init (dpy, screen);
+
+ pb = gdk_pixbuf_new_from_file (filename
+#ifdef HAVE_GTK2
+ , NULL
+#endif /* HAVE_GTK2 */
+ );
+
+ if (pb)
+ {
+ int w = gdk_pixbuf_get_width (pb);
+ int h = gdk_pixbuf_get_height (pb);
+ int srcx, srcy, destx, desty;
+
+ Bool exact_fit_p = ((w == win_width && h <= win_height) ||
+ (h == win_height && w <= win_width));
+
+ if (!exact_fit_p) /* scale the image up or down */
+ {
+ float rw = (float) win_width / w;
+ float rh = (float) win_height / h;
+ float r = (rw < rh ? rw : rh);
+ int tw = w * r;
+ int th = h * r;
+ int pct = (r * 100);
+
+ if (pct < 95 || pct > 105) /* don't scale if it's close */
+ {
+ GdkPixbuf *pb2;
+ if (verbose_p)
+ fprintf (stderr,
+ "%s: scaling image by %d%% (%dx%d -> %dx%d)\n",
+ progname, pct, w, h, tw, th);
+
+ pb2 = gdk_pixbuf_scale_simple (pb, tw, th, GDK_INTERP_BILINEAR);
+ if (pb2)
+ {
+ gdk_pixbuf_unref (pb);
+ pb = pb2;
+ w = tw;
+ h = th;
+ }
+ else
+ fprintf (stderr, "%s: out of memory when scaling?\n",
+ progname);
+ }
+ }
+
+ /* Center the image on the window. */
+ srcx = 0;
+ srcy = 0;
+ destx = (win_width - w) / 2;
+ desty = (win_height - h) / 2;
+ if (destx < 0) srcx = -destx, destx = 0;
+ if (desty < 0) srcy = -desty, desty = 0;
+
+ if (win_width < w) w = win_width;
+ if (win_height < h) h = win_height;
+
+ /* #### Note that this always uses the default colormap! Morons!
+ Owen says that in Gnome 2.0, I should try using
+ gdk_pixbuf_render_pixmap_and_mask_for_colormap() instead.
+ But I don't have Gnome 2.0 yet.
+ */
+ XClearWindow (dpy, window);
+ gdk_pixbuf_xlib_render_to_drawable_alpha (pb, window,
+ srcx, srcy, destx, desty, w, h,
+ GDK_PIXBUF_ALPHA_FULL, 127,
+ XLIB_RGB_DITHER_NORMAL, 0, 0);
+ XSync (dpy, False);
+
+ if (verbose_p)
+ fprintf (stderr, "%s: displayed %dx%d image at %d,%d.\n",
+ progname, w, h, destx, desty);
+ }
+ else if (filename)
+ {
+ fprintf (stderr, "%s: unable to load %s\n", progname, filename);
+ goto FAIL;
+ }
+ else
+ {
+ fprintf (stderr, "%s: unable to initialize built-in images\n", progname);
+ goto FAIL;
+ }
+
+ return;
+
+ FAIL:
+ if (verbose_p)
+ fprintf (stderr, "%s: drawing colorbars\n", progname);
+ draw_colorbars (dpy, window, 0, 0, win_width, win_height);
+ XSync (dpy, False);
+}
+
+#endif /* HAVE_BUILTIN_IMAGE_LOADER */
+
+
+
#if 0
static Bool
mapper (XrmDatabase *db, XrmBindingList bindings, XrmQuarkList quarks,
-.TH XScreenSaver 1 "11-May-2002 (4.03)" "X Version 11"
+.TH XScreenSaver 1 "31-May-2002 (4.04)" "X Version 11"
.SH NAME
xscreensaver-getimage - put some randomly-selected image on the root window
.SH SYNOPSIS
.if n .sp 1
.if t .sp .5
..
-.TH XScreenSaver 1 "11-May-2002 (4.03)" "X Version 11"
+.TH XScreenSaver 1 "31-May-2002 (4.04)" "X Version 11"
.SH NAME
xscreensaver - extensible screen saver framework, plus locking
.SH SYNOPSIS
select the ``\fILook and Feel / Screensaver\fP'' page.
Turn off the ``\fIEnable Screensaver\fP'' checkbox.
.TP 3
-\fB2: Add xscreensaver to your startup programs.\fP
-Create a file in your \fI~/.kde2/Autostart/\fP directory
+\fB2: Find your Autostart directory.\fP
+Open the ``\fILook and Feel / Desktop / Paths\fP'' page,
+and see what your ``Autostart'' directory is set to: it will
+probably be \fI~/.kde3/Autostart/\fP or something similar.
+.TP 3
+\fB3: Add xscreensaver to your startup programs.\fP
+Create a file in your autostart directory
called \fIlaunch-xscreensaver\fP. Make that file be executable,
and contain a single line: \fI``xscreensaver\fP''.
.RE
In all these years, I've not heard of even a single case of this happening,
but it is theoretically possible, so I'm mentioning it for completeness...
-.TP 8
-.B Red Hot Lava
-There need to be a lot more graphics hacks. In particular, there should be
-a simulation of a Lavalite (tm).
.SH ENVIRONMENT
.PP
.TP 8
nerverot.c xrayswarm.c hyperball.c zoom.c whirlwindwarp.c \
rotzoomer.c whirlygig.c speedmine.c vermiculate.c \
xpm-pixmap.c webcollage-helper.c twang.c apollonian.c \
- euler2d.c juggle.c polyominoes.c thornbird.c fluidballs.c
+ euler2d.c juggle.c polyominoes.c thornbird.c fluidballs.c \
+ anemone.c
SCRIPTS = vidwhacker webcollage
OBJS = attraction.o blitspin.o bouboule.o braid.o bubbles.o \
nerverot.o xrayswarm.o hyperball.o zoom.o whirlwindwarp.o \
rotzoomer.o whirlygig.o speedmine.o vermiculate.o \
xpm-pixmap.o webcollage-helper.o twang.o apollonian.o \
- euler2d.o juggle.o polyominoes.o thornbird.o fluidballs.o
+ euler2d.o juggle.o polyominoes.o thornbird.o fluidballs.o \
+ anemone.o
NEXES = attraction blitspin bouboule braid bubbles decayscreen deco \
drift flag flame forest vines galaxy grav greynetic halo \
xsublim ccurve blaster bumps ripples xteevee xspirograph \
nerverot xrayswarm hyperball zoom whirlwindwarp rotzoomer \
whirlygig speedmine vermiculate twang apollonian euler2d \
- juggle polyominoes thornbird fluidballs \
+ juggle polyominoes thornbird fluidballs anemone \
@JPEG_EXES@
SEXES = sonar
JPEG_EXES = webcollage-helper
HDRS = bubbles.h screenhack.h xlockmore.h xlockmoreI.h automata.h \
bumps.h xpm-pixmap.h
-MEN = attraction.man blitspin.man bouboule.man braid.man \
- bubbles.man decayscreen.man deco.man drift.man flag.man \
- flame.man forest.man vines.man galaxy.man grav.man \
- greynetic.man halo.man helix.man hopalong.man hypercube.man \
- ifs.man imsmap.man julia.man kaleidescope.man laser.man \
- lightning.man lisa.man lmorph.man maze.man moire.man \
- noseguy.man pedal.man penrose.man pyro.man qix.man \
- rocks.man rorschach.man sierpinski.man slidescreen.man \
- slip.man sphere.man spiral.man strange.man swirl.man \
- goop.man starfish.man munch.man rd-bomb.man bumps.man \
- xjack.man xlyap.man jigsaw.man epicycle.man bsod.man \
- sonar.man t3d.man squiral.man spotlight.man critical.man \
- vidwhacker.man webcollage.man xsublim.man distort.man \
- phosphor.man xmatrix.man xteevee.man xflame.man petri.man \
- nerverot.man zoom.man whirlwindwarp.man hyperball.man \
- rotzoomer.man whirlygig.man speedmine.man penetrate.man \
- xspirograph.man twang.man
+MEN = anemone.man ant.man apollonian.man attraction.man \
+ blaster.man blitspin.man bouboule.man braid.man bsod.man \
+ bubbles.man bumps.man ccurve.man compass.man coral.man \
+ critical.man crystal.man cynosure.man decayscreen.man \
+ deco.man deluxe.man demon.man discrete.man distort.man \
+ drift.man epicycle.man euler2d.man fadeplot.man flag.man \
+ flame.man flow.man fluidballs.man forest.man galaxy.man \
+ goop.man grav.man greynetic.man halo.man helix.man \
+ hopalong.man hyperball.man hypercube.man ifs.man imsmap.man \
+ interference.man jigsaw.man juggle.man julia.man \
+ kaleidescope.man kumppa.man laser.man lightning.man \
+ lisa.man lissie.man lmorph.man loop.man maze.man moire.man \
+ moire2.man mountain.man munch.man nerverot.man noseguy.man \
+ pedal.man penetrate.man penrose.man petri.man phosphor.man \
+ polyominoes.man pyro.man qix.man rd-bomb.man ripples.man \
+ rocks.man rorschach.man rotor.man rotzoomer.man \
+ shadebobs.man sierpinski.man slidescreen.man slip.man \
+ sonar.man speedmine.man sphere.man spiral.man \
+ spotlight.man squiral.man starfish.man strange.man \
+ swirl.man t3d.man thornbird.man triangle.man truchet.man \
+ twang.man vermiculate.man vidwhacker.man vines.man \
+ wander.man webcollage.man whirlwindwarp.man whirlygig.man \
+ worm.man xflame.man xjack.man xlyap.man xmatrix.man \
+ xrayswarm.man xspirograph.man xsublim.man xteevee.man \
+ zoom.man
STAR = *
-EXTRAS = README Makefile.in xlock_23.h .gdbinit \
+EXTRAS = README Makefile.in xlock_23.h xml2man.pl .gdbinit \
config/README \
config/$(STAR).xml \
images/$(STAR).xbm \
echo_tarfiles:
@echo $(TARFILES)
+check_men:
+ @badmen="" ; \
+ for exe in $(EXES) $(SCRIPTS); do \
+ if ! [ -f $(srcdir)/$$exe.man \
+ -o "$$exe" = webcollage-helper ]; then \
+ badmen="$$badmen $$exe" ; \
+ fi ; \
+ done ; \
+ if [ -n "$$badmen" ]; then \
+ echo "" ; \
+ echo "Warning: The following programs have no manuals:" ; \
+ echo "" ; \
+ for m in $$badmen ; do \
+ echo " $$m" ; \
+ done ; \
+ fi
+
+check_xml:
+ @badxml="" ; \
+ for exe in $(EXES) $(SCRIPTS); do \
+ if ! [ -f $(srcdir)/config/$$exe.xml \
+ -o "$$exe" = webcollage-helper \
+ -o "$$exe" = xsublim ]; then \
+ badxml="$$badxml $$exe" ; \
+ fi ; \
+ done ; \
+ if [ -n "$$badxml" ]; then \
+ echo "" ; \
+ echo "Warning: The following programs have no configurators:" ; \
+ echo "" ; \
+ for m in $$badxml ; do \
+ echo " $$m" ; \
+ done ; \
+ echo "" ; \
+ fi
+
+
+
# Rules for generating the VMS makefiles on Unix, so that it doesn't have to
# be done by hand...
distdepend:: compile_axp.com compile_decc.com
distdepend:: link_axp.com link_decc.com
distdepend:: $(srcdir)/../setup.com
+distdepend:: check_men check_xml
# Rules for noticing when the objects from the utils directory are out of
fluidballs: fluidballs.o $(HACK_OBJS)
$(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS)
+anemone: anemone.o $(HACK_OBJS) $(DBE)
+ $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(DBE) $(HACK_LIBS)
+
# The rules for those hacks which follow the `xlockmore' API.
#
#
# DO NOT DELETE: updated by make distdepend
+anemone.o: ../config.h
+anemone.o: $(srcdir)/screenhack.h
ant.o: $(srcdir)/automata.h
ant.o: ../config.h
ant.o: $(srcdir)/screenhack.h
--- /dev/null
+/* anemon, Copyright (c) 2001 Gabriel Finch
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation. No representations are made about the suitability of this
+ * software for any purpose. It is provided "as is" without express or
+ * implied warranty.
+ */
+
+/*------------------------------------------------------------------------
+ |
+ | FILE anemone.c
+ | MODULE OF xscreensaver
+ |
+ | DESCRIPTION Anemone.
+ |
+ | WRITTEN BY Gabriel Finch
+ |
+ |
+ |
+ | MODIFICATIONS june 2001 started
+ |
+ +----------------------------------------------------------------------*/
+
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include "screenhack.h"
+
+
+#ifdef HAVE_DOUBLE_BUFFER_EXTENSION
+#include "xdbe.h"
+#endif /* HAVE_DOUBLE_BUFFER_EXTENSION */
+
+
+/*-----------------------------------------------------------------------+
+ | PRIVATE DATA |
+ +-----------------------------------------------------------------------*/
+
+
+#define TWO_PI (2.0 * M_PI)
+#define RND(x) (random() % (x))
+#define MAXPEND 2000
+#define MAXPTS 200
+#define TRUE 1
+#define FALSE 0
+
+static Display *dpy;
+static Window window;
+
+static Pixmap b,ba,bb;
+
+#ifdef HAVE_DOUBLE_BUFFER_EXTENSION
+static XdbeBackBuffer backb;
+#endif /* HAVE_DOUBLE_BUFFER_EXTENSION */
+
+static int
+arms, /* number of arms */
+ finpoints; /* final number of points in each array. */
+static long delay; /* usecs to wait between updates. */
+
+static int scrWidth, scrHeight;
+static GC gcDraw, gcClear;
+
+typedef struct {
+ double x,y,z;
+ int sx,sy,sz;
+} vPend;
+
+typedef unsigned short bool;
+
+static bool dbuf;
+static int width;
+
+typedef struct {
+ long col;
+ int numpt;
+ int growth;
+ unsigned short rate;
+} appDef;
+
+static vPend *vPendage; /* 3D representation of appendages */
+static appDef *appD; /* defaults */
+static vPend *vCurr, *vNext;
+static appDef *aCurr;
+
+static double turn, turndelta;
+
+static int mx, my; /* max screen coordinates. */
+static int withdraw;
+
+static XGCValues gcv;
+static Colormap cmap;
+
+
+
+/*-----------------------------------------------------------------------+
+ | PUBLIC DATA |
+ +-----------------------------------------------------------------------*/
+
+char *progclass = "Anemone";
+
+char *defaults [] = {
+ ".background: black",
+ "*arms: 128",
+ "*width: 2",
+ "*finpoints: 64",
+ "*delay: 40000",
+ "*withdraw: 1200",
+ "*turnspeed: 50",
+#ifdef HAVE_DOUBLE_BUFFER_EXTENSION
+ "*useDBE: True",
+#endif /* HAVE_DOUBLE_BUFFER_EXTENSION */
+ 0
+};
+
+
+XrmOptionDescRec options [] = {
+ { "-arms", ".arms", XrmoptionSepArg, 0 },
+ { "-finpoints", ".finpoints", XrmoptionSepArg, 0 },
+ { "-delay", ".delay", XrmoptionSepArg, 0 },
+ { "-width", ".width", XrmoptionSepArg, 0 },
+ { "-withdraw", ".withdraw", XrmoptionSepArg, 0 },
+ { "-turnspeed", ".turnspeed", XrmoptionSepArg, 0 },
+ { 0, 0, 0, 0 }
+};
+int options_size = (sizeof (options) / sizeof (options[0]));
+
+/*-----------------------------------------------------------------------+
+ | PRIVATE FUNCTIONS |
+ +-----------------------------------------------------------------------*/
+
+static void *
+xmalloc(size_t size)
+{
+ void *ret;
+
+ if ((ret = malloc(size)) == NULL) {
+ fprintf(stderr, "anemone: out of memory\n");
+ exit(1);
+ }
+ return ret;
+}
+
+
+static void
+initAppendages(void)
+{
+ int i;
+ /*int marginx, marginy; */
+
+ /*double scalex, scaley;*/
+
+ double x,y,z,dist;
+
+ mx = scrWidth - 1;
+ my = scrHeight - 1;
+
+ /* each appendage will have: colour,
+ number of points, and a grow or shrink indicator */
+
+ /* added: growth rate 1-10 (smaller==faster growth) */
+ /* each appendage needs virtual coords (x,y,z) with y and z combining to
+ give the screen y */
+
+ vPendage = (vPend *) xmalloc((finpoints + 1) * sizeof(vPend) * arms);
+ appD = (appDef *) xmalloc(sizeof(appDef) * arms);
+
+
+ for (i = 0; i < arms; i++) {
+ aCurr = appD + i;
+ vCurr = vPendage + (finpoints + 1) * i;
+ vNext = vCurr + 1;
+
+ aCurr->col = (long)RND(256)*RND(256)+32768;
+ aCurr->numpt = 1;
+ aCurr->growth=finpoints/2+RND(finpoints/2);
+ aCurr->rate=RND(11)*RND(11);
+
+ dist=1.;
+
+ do {
+ x=(1-RND(1001)/500);
+ y=(1-RND(1001)/500);
+ z=(1-RND(1001)/500);
+ dist=x*x+y*y+z*z;
+ } while (dist>=1.);
+
+ vCurr->x=x*200;
+ vCurr->y=my/2+y*200;
+ vCurr->z=0+z*200;
+
+ /* start the arm going outwards */
+ vCurr->sx=vCurr->x/5;
+ vCurr->sy=(vCurr->y-my/2)/5;
+ vCurr->sz=(vCurr->z)/5;
+
+
+ vNext->x=vCurr->x+vCurr->sx;
+ vNext->y=vCurr->y+vCurr->sy;
+ vNext->z=vCurr->z+vCurr->sz;
+ }
+}
+
+static void
+initAnemone(void)
+{
+ XWindowAttributes wa;
+
+ turn = 0.;
+
+ width = get_integer_resource("width", "Integer");
+ arms = get_integer_resource("arms", "Integer");
+ finpoints = get_integer_resource("finpoints", "Integer");
+ delay = get_integer_resource("delay", "Integer");
+ withdraw = get_integer_resource("withdraw", "Integer");
+ turndelta = get_float_resource("turnspeed", "float")/100000;
+
+ dbuf=TRUE;
+
+
+ b=ba=bb=0; /* double-buffer to reduce flicker */
+#ifdef HAVE_DOUBLE_BUFFER_EXTENSION
+ b = backb = xdbe_get_backbuffer (dpy, window, XdbeUndefined);
+#endif /* HAVE_DOUBLE_BUFFER_EXTENSION */
+
+
+ XGetWindowAttributes(dpy, window, &wa);
+ scrWidth = wa.width;
+ scrHeight = wa.height;
+ cmap = wa.colormap;
+ gcDraw = XCreateGC(dpy, window, GCForeground, &gcv);
+ gcv.foreground = get_pixel_resource("background", "Background", dpy, cmap);
+ gcClear = XCreateGC(dpy, window, GCForeground, &gcv);
+
+ if (dbuf) {
+ if (!b)
+ {
+ ba = XCreatePixmap (dpy, window, scrWidth, scrHeight, wa.depth);
+ bb = XCreatePixmap (dpy, window, scrWidth, scrHeight, wa.depth);
+ b = ba;
+ }
+ }
+ else
+ {
+ b = window;
+ }
+
+ if (ba) XFillRectangle (dpy, ba, gcClear, 0, 0, scrWidth, scrHeight);
+ if (bb) XFillRectangle (dpy, bb, gcClear, 0, 0, scrWidth, scrHeight);
+
+ XClearWindow(dpy, window);
+ XSetLineAttributes(dpy, gcDraw, width, LineSolid, CapRound, JoinBevel);
+
+ initAppendages();
+}
+
+
+static void
+createPoints(void)
+{
+ int i;
+ int withdrawall=RND(withdraw);
+
+ for (i = 0; i< arms; i++) {
+ aCurr = appD + i;
+ if (!withdrawall) {
+ aCurr->growth=-finpoints;
+ turndelta=-turndelta;
+ }
+
+ else if (withdrawall<11) aCurr->growth=-aCurr->numpt;
+
+ else if (RND(100)<aCurr->rate) {
+ if (aCurr->growth>0) {
+ if (!(--aCurr->growth)) aCurr->growth=-RND(finpoints)-1;
+ vCurr = vPendage + (finpoints + 1) * i + aCurr->numpt-1;
+ if (aCurr->numpt<finpoints - 1) {
+ /* add a piece */
+ vNext=vCurr + 1;
+ aCurr->numpt++;
+ vNext->sx=vCurr->sx+RND(3)-1;
+ vNext->sy=vCurr->sy+RND(3)-1;
+ vNext->sz=vCurr->sz+RND(3)-1;
+ vCurr=vNext+1;
+ vCurr->x=vNext->x+vNext->sx;
+ vCurr->y=vNext->y+vNext->sy;
+ vCurr->z=vNext->z+vNext->sz;
+ }
+ }
+ }
+ }
+}
+
+
+static void
+drawImage(Drawable curr_window, double sint, double cost)
+{
+ int q,numpt,mx2=mx/2;
+ double cx,cy,cz,nx,ny,nz;
+
+ if ((numpt=aCurr->numpt)==1) return;
+ XSetForeground(dpy, gcDraw, aCurr->col);
+
+ vNext=vCurr+1;
+
+ cx=vCurr->x;
+ cy=vCurr->y;
+ cz=vCurr->z;
+
+
+ for (q = 0; q < numpt-1; q++) {
+ nx=vNext->x+2-RND(5);
+ ny=vNext->y+2-RND(5);
+ nz=vNext->z+2-RND(5);
+
+ XDrawLine(dpy, curr_window, gcDraw,mx2+cx*cost-cz*sint, cy, mx2+nx*cost-nz*sint, ny);
+ vCurr++;
+ vNext++;
+
+ cx=nx;
+ cy=ny;
+ cz=nz;
+ }
+ XSetLineAttributes(dpy, gcDraw, width*3, LineSolid, CapRound, JoinBevel);
+ XDrawLine(dpy, curr_window, gcDraw,mx/2+cx*cost-cz*sint, cy, mx/2+nx*cost-nz*sint, ny);
+ XSetLineAttributes(dpy, gcDraw, width, LineSolid, CapRound, JoinBevel);
+
+}
+
+static void
+animateAnemone(Drawable curr_window)
+{
+ int i;
+ double sint=sin(turn),cost=cos(turn);
+
+ aCurr = appD;
+ for (i = 0; i< arms; i++) {
+ vCurr=vPendage + (finpoints + 1) * i;
+ if (RND(25)<aCurr->rate) {
+ if (aCurr->growth<0) {
+ aCurr->numpt-=aCurr->numpt>1;
+ if (!(++aCurr->growth)) aCurr->growth=RND(finpoints-aCurr->numpt)+1;
+ }
+ }
+ drawImage(curr_window, sint, cost);
+ turn+=turndelta;
+ aCurr++;
+ }
+ createPoints();
+ usleep(delay);
+
+ if (turn>=TWO_PI) turn-=TWO_PI;
+}
+
+/*-----------------------------------------------------------------------+
+ | PUBLIC FUNCTIONS |
+ +-----------------------------------------------------------------------*/
+
+void
+screenhack(Display *disp, Window win)
+{
+
+ dpy=disp;
+ window=win;
+
+ initAnemone();
+ for (;;) {
+
+ XFillRectangle (dpy, b, gcClear, 0, 0, scrWidth, scrHeight);
+
+ animateAnemone(b);
+
+#ifdef HAVE_DOUBLE_BUFFER_EXTENSION
+ if (backb)
+ {
+ XdbeSwapInfo info[1];
+ info[0].swap_window = window;
+ info[0].swap_action = XdbeUndefined;
+ XdbeSwapBuffers (dpy, info, 1);
+ }
+ else
+#endif /* HAVE_DOUBLE_BUFFER_EXTENSION */
+ if (dbuf)
+ {
+ XCopyArea (dpy, b, window, gcClear, 0, 0,
+ scrWidth, scrHeight, 0, 0);
+ b = (b == ba ? bb : ba);
+ }
+
+ screenhack_handle_events (dpy);
+ }
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+anemone - wiggling tentacles.
+.SH SYNOPSIS
+.B anemone
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+[\-cycles \fInumber\fP]
+[\-finpoints \fInumber\fP]
+[\-width \fInumber\fP]
+.SH DESCRIPTION
+Wiggling tentacles.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 40000 (0.04 seconds.).
+.TP 8
+.B \-cycles \fInumber\fP
+Arms. 2 - 500. Default: 128.
+.TP 8
+.B \-finpoints \fInumber\fP
+Tentacles. 3 - 200. Default: 64.
+.TP 8
+.B \-width \fInumber\fP
+Thickness. 1 - 10. Default: 2.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Gabriel Finch. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Gabriel Finch.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+ant - cellular automaton.
+.SH SYNOPSIS
+.B ant
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-sharpturns]
+[\-truchet]
+[\-delay \fInumber\fP]
+[\-cycles \fInumber\fP]
+[\-count \fInumber\fP]
+[\-size \fInumber\fP]
+[\-neighbors 3]
+[\-neighbors 4]
+[\-neighbors 6]
+[\-neighbors 9]
+[\-neighbors 12]
+[\-ncolors \fInumber\fP]
+.SH DESCRIPTION
+A cellular automaton that is really a two-dimensional Turing machine: as
+the heads ("ants") walk along the screen, they change pixel values in
+their path. Then, as they pass over changed pixels, their behavior is
+influenced.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-sharpturns | \-no-sharpturns
+Whether to do sharp turns.
+.TP 8
+.B \-truchet | \-no-truchet
+Whether to use truchet lines.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 1000 (0.00 seconds.).
+.TP 8
+.B \-cycles \fInumber\fP
+How long to wait until resetting. 0 - 800000. Default: 40000.
+.TP 8
+.B \-count \fInumber\fP
+Ants Count. -20 - 20. Default: -3.
+.TP 8
+.B \-size \fInumber\fP
+Ant Size. -18 - 18. Default: -12.
+.TP 8
+.B \-neighbors \fIN\fP
+How many neighbors each cell has. Legal values are 3, 4, 6, 9, and 12.
+.TP 8
+.B \-ncolors \fInumber\fP
+Number of colors. Default: 64.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by David Bagley. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+David Bagley.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+apollonian - Descartes Circle Theorem.
+.SH SYNOPSIS
+.B apollonian
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-no-label]
+[\-no-altgeom]
+[\-cycles \fInumber\fP]
+[\-ncolors \fInumber\fP]
+[\-delay \fInumber\fP]
+.SH DESCRIPTION
+Packs a large circle with smaller circles, demonstrating the Descartes
+Circle Theorem.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-label | \-no-label
+Draw Labels. Boolean.
+.TP 8
+.B \-altgeom | \-no-altgeom
+Include Alternate Geometries. Boolean.
+.TP 8
+.B \-cycles \fInumber\fP
+Depth. 1 - 20. Default: 20.
+.TP 8
+.B \-ncolors \fInumber\fP
+Number of Colors. Default: 64.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 1000000 (1.00 seconds.).
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Allan R. Wilks and David Bagley. Permission to
+use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided
+that the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation. No representations are made about the suitability of
+this software for any purpose. It is provided "as is" without express
+or implied warranty.
+.SH AUTHOR
+Allan R. Wilks and David Bagley.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+blaster - simulation of space combat
+.SH SYNOPSIS
+.B blaster
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-num_robots \fInumber\fP]
+[\-num_lasers \fInumber\fP]
+[\-num_stars \fInumber\fP]
+[\-delay \fInumber\fP]
+.SH DESCRIPTION
+Draws a simulation of flying space-combat robots (cleverly disguised as
+colored circles) doing battle in front of a moving star field.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-num_robots \fInumber\fP
+Robots. 2 - 50. Default: 5.
+.TP 8
+.B \-num_lasers \fInumber\fP
+Lasers. 1 - 100. Default: 3.
+.TP 8
+.B \-num_stars \fInumber\fP
+Stars. 5 - 200. Default: 50.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.).
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Jonathan Lin. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Jonathan Lin.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+ccurve - self-similar linear fractals.
+.SH SYNOPSIS
+.B ccurve
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+[\-pause \fInumber\fP]
+[\-limit \fInumber\fP]
+.SH DESCRIPTION
+Generates self-similar linear fractals, including the classic ``C Curve.''
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Delay. 0 - 60. Default: 1.
+.TP 8
+.B \-pause \fInumber\fP
+Duration. 1 - 60. Default: 3.
+.TP 8
+.B \-limit \fInumber\fP
+Density. 3 - 300000. Default: 200000.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Rick Campbell. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Rick Campbell.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+compass - draws a spinning compass.
+.SH SYNOPSIS
+.B compass
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+[\-no-db]
+.SH DESCRIPTION
+This draws a compass, with all elements spinning about randomly, for that
+``lost and nauseous'' feeling.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 20000 (0.02 seconds.).
+.TP 8
+.B \-db | \-no-db
+Double Buffer. Boolean.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Jamie Zawinski. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Jamie Zawinski.
+$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ANEMONE.C
$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ANT.C
$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) APOLLONIAN.C
$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ATTRACTION.C
+$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ANEMONE.C
$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ANT.C
$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) APOLLONIAN.C
$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ATTRACTION.C
a screen saver and locker for the X window system
by Jamie Zawinski
- version 4.03
- 11-May-2002
+ version 4.04
+ 31-May-2002
http://www.jwz.org/xscreensaver/
--- /dev/null
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="anemone" _label="Anemone">
+
+ <command arg="-root"/>
+
+<!--
+ -withdraw 1200
+ -turnspeed 50
+-->
+
+ <number id="speed" type="slider" arg="-delay %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0" high="80000" default="40000"
+ convert="invert"/>
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Arms" _low-label="Few" _high-label="Many"
+ low="2" high="500" default="128"/>
+
+ <number id="finpoints" type="slider" arg="-finpoints %"
+ _label="Tentacles" _low-label="Few" _high-label="Many"
+ low="3" high="200" default="64"/>
+
+ <number id="width" type="slider" arg="-width %"
+ _label="Thickness" _low-label="Thin" _high-label="Thick"
+ low="1" high="10" default="2"/>
+
+<!--
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of Colors" _low-label="Two" _high-label="Many"
+ low="2" high="255" default="64"/>
+-->
+
+ <_description>
+Wiggling tentacles. By Gabriel Finch.
+ </_description>
+</screensaver>
convert="invert"/>
<number id="delay2" type="slider" arg="-delay2 %"
- _label="90° Rotation Speed" _low-label="Slow" _high-label="Fast"
+ _label="90 deg Rotation Speed" _low-label="Slow" _high-label="Fast"
low="1" high="800000" default="500000"
convert="invert"/>
low="1" high="100" default="25"/>
<_description>
-Simulates coral growth, albeit somewhat slowly. This image doesn't
-really do it justice. Written by Frederick Roeber.
+Simulates coral growth, albeit somewhat slowly. Written by Frederick Roeber.
</_description>
</screensaver>
fluid, depending on the settings. If "Shake Box" is selected, then
every now and then, the box will be rotated, changing which direction
is down (in order to keep the settled balls in motion.)
+By Peter Birtles and Jamie Zawinski.
</_description>
</screensaver>
--- /dev/null
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="lavalite" _label="LavaLite">
+
+ <command arg="-root"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0" high="50000" default="10000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Activity" _low-label="Sparse" _high-label="Dense"
+ low="0.001" high="0.01" default="0.003"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Max Blobs" _low-label="1" _high-label="10"
+ low="1" high="10" default="3"/>
+
+ <number id="resolution" type="slider" arg="-resolution %"
+ _label="Resolution" _low-label="Low" _high-label="High"
+ low="10" high="120" default="40"/>
+
+ <boolean id="wander" _label="Wander" arg-set="-wander"/>
+
+ <select id="style">
+ <option id="classic" _label="Classic Lavalite" arg-set="-style classic"/>
+ <option id="giant" _label="Giant Lavalite" arg-set="-style giant"/>
+ <option id="cone" _label="Cone Lavalite" arg-set="-style cone"/>
+ <option id="rocket" _label="Rocket Lavalite" arg-set="-style rocket"/>
+ <option id="random" _label="Random Lamp Style"/>
+ </select>
+
+ <select id="rotation">
+ <option id="no" _label="Don't Rotate" arg-set="-no-spin"/>
+ <option id="x" _label="Rotate around X axis"/>
+ <option id="y" _label="Rotate around Y axis" arg-set="-spin Y"/>
+ <option id="z" _label="Rotate around Z axis" arg-set="-spin Z"/>
+ <option id="xy" _label="Rotate around X and Y axes" arg-set="-spin XY"/>
+ <option id="xz" _label="Rotate around X and Z axes" arg-set="-spin XZ"/>
+ <option id="yz" _label="Rotate around Y and Z axes" arg-set="-spin YZ"/>
+ <option id="xyz" _label="Rotate around all three axes" arg-set="-spin XYZ"/>
+ </select>
+
+ <select id="render">
+ <option id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <option id="solid" _label="Smooth"/>
+ <option id="solid" _label="Faceted" arg-set="-no-smooth"/>
+ </select>
+
+ <_description>
+Draws a 3D Simulation a Lava Lite(r): odd-shaped blobs of a mysterious
+substance are heated, slowly rise to the top of the bottle, and then
+drop back down as they cool. This program requires OpenGL and a fairly
+fast machine (both CPU and 3D performance.) Written by Jamie Zawinski.
+
+"LAVA LITE(r) and the configuration of the LAVA(r) brand motion lamp are
+registered trademarks of Haggerty Enterprises, Inc. The configuration
+of the globe and base of the motion lamp are registered trademarks of
+Haggerty Enterprises, Inc. in the U.S.A. and in other countries around
+the world."
+ </_description>
+</screensaver>
--- /dev/null
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="queens" _label="Queens">
+
+ <command arg="-root"/>
+
+ <number id="speed" type="slider" arg="-delay %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0" high="50000" default="20000"
+ convert="invert"/>
+
+ <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+ <_description>
+Solves the N-Queens problem (where, in this program, N is between 5 and
+10 queens.) The problem is: how may one place N queens on an NxN
+chessboard such that no queen can attack a sister?
+Written by Blair Tennessy.
+ </_description>
+</screensaver>
<_description>
Another ancient xlock demo, this one by Tom Lawrence. It draws a
-line segment moving along a complex spiraling curve. I tweaked this
-to generate curvier lines, but still frames of it don't look like
-much.
+line segment moving along a complex spiraling curve.
</_description>
</screensaver>
convert="invert"/>
<number id="move" type="slider" arg="-move %"
- _label="Turn Side-to-Side" _low-label="0°" _high-label="90°"
+ _label="Turn Side-to-Side" _low-label="0 deg" _high-label="90 deg"
low="0.0" high="3.0" default="2.0"/>
<number id="wobble" type="slider" arg="-wobble %"
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+coral - simulates coral growth, albeit somewhat slowly.
+.SH SYNOPSIS
+.B coral
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay2 \fInumber\fP]
+[\-delay \fInumber\fP]
+[\-density \fInumber\fP]
+[\-seeds \fInumber\fP]
+.SH DESCRIPTION
+Simulates coral growth, albeit somewhat slowly.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay2 \fInumber\fP
+Per-frame delay, in microseconds. Default: 1000 (0.001 seconds.).
+.TP 8
+.B \-delay \fInumber\fP
+Duration. 1 - 60. Default: 5.
+.TP 8
+.B \-density \fInumber\fP
+Density. 1 - 90. Default: 25.
+.TP 8
+.B \-seeds \fInumber\fP
+Seeds. 1 - 100. Default: 25.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Frederick Roeber. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Frederick Roeber.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+crystal - kaleidescope.
+.SH SYNOPSIS
+.B crystal
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-grid]
+[\-no-cell]
+[\-centre]
+[\-nx \fInumber\fP]
+[\-ny \fInumber\fP]
+[\-count \fInumber\fP]
+[\-delay \fInumber\fP]
+[\-ncolors \fInumber\fP]
+.SH DESCRIPTION
+Moving polygons, similar to a kaleidescope (more like a kaleidescope than
+the hack called `kaleid,' actually.)
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-grid | \-no-grid
+Whether to draw grid.
+.TP 8
+.B \-cell | \-no-cell
+Whether to draw the cell.
+.TP 8
+.B \-centre | \-no-centre
+Whether to center on screen
+.TP 8
+.B \-nx \fInumber\fP
+Horizontal Symmetries. -10 - 10. Default: -3.
+.TP 8
+.B \-ny \fInumber\fP
+Vertical Symmetries. -10 - 10. Default: -2.
+.TP 8
+.B \-count \fInumber\fP
+Count. -5000 - 5000. Default: -500.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 60000 (0.06 seconds.).
+.TP 8
+.B \-ncolors \fInumber\fP
+Number of Colors. Default: 100.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Jouk Jansen. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Jouk Jansen.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+cynosure - gentle overlapping squares screen saver.
+.SH SYNOPSIS
+.B cynosure
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+[\-ncolors \fInumber\fP]
+[\-iterations \fInumber\fP]
+.SH DESCRIPTION
+A hack similar to `greynetic', but less frenetic. The first implementation
+was by Stephen Linhart; then Ozymandias G. Desiderata wrote a Java applet
+clone. That clone was discovered by Jamie Zawinski, and ported to C for
+inclusion here.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 500000 (0.50 seconds.).
+.TP 8
+.B \-ncolors \fInumber\fP
+Number of Colors. Default: 128.
+.TP 8
+.B \-iterations \fInumber\fP
+Duration. 2 - 200. Default: 100.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Stephen Linhart, Ozymandias G. Desiderata, and
+Jamie Zawinski. Permission to use, copy, modify, distribute, and sell
+this software and its documentation for any purpose is hereby granted
+without fee, provided that the above copyright notice appear in all
+copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about
+the suitability of this software for any purpose. It is provided "as
+is" without express or implied warranty.
+.SH AUTHOR
+Stephen Linhart, Ozymandias G. Desiderata, and Jamie Zawinski.
-/* xscreensaver, Copyright (c) 1999, 2001 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1999, 2001, 2002 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
while (1)
{
- if (!backb || !dbeclear_p)
+ if (!dbeclear_p ||
+#ifdef HAVE_DOUBLE_BUFFER_EXTENSION
+ !backb
+#endif /* HAVE_DOUBLE_BUFFER_EXTENSION */
+ )
XFillRectangle (dpy, b, erase_gc, 0, 0, xgwa.width, xgwa.height);
for (i = 0; i < count; i++)
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+deluxe - pulsing sequence of stars, circles, and lines.
+.SH SYNOPSIS
+.B deluxe
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+[\-thickness \fInumber\fP]
+[\-count \fInumber\fP]
+[\-ncolors \fInumber\fP]
+[\-transparent]
+[\-no-db]
+.SH DESCRIPTION
+This draws a pulsing sequence of stars, circles, and lines.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 5000 (0.01 seconds.).
+.TP 8
+.B \-thickness \fInumber\fP
+Thickness of lines. Default: 50.
+.TP 8
+.B \-count \fInumber\fP
+Number of objects. Default: 5.
+.TP 8
+.B \-ncolors \fInumber\fP
+Number of colors. Default: 20.
+.TP 8
+.B \-transparent | \-no-transparent
+Whether to use transparency.
+.TP 8
+.B \-db | \-no-db
+Whether to double buffer.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Jamie Zawinski. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Jamie Zawinski.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+demon - celular automaton.
+.SH SYNOPSIS
+.B demon
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-count \fInumber\fP]
+[\-cycles \fInumber\fP]
+[\-delay \fInumber\fP]
+[\-ncolors \fInumber\fP]
+[\-size \fInumber\fP]
+.SH DESCRIPTION
+A cellular automaton that starts with a random field, and organizes it into
+stripes and spirals.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-count \fInumber\fP
+States. 0 - 20. Default: 0.
+.TP 8
+.B \-cycles \fInumber\fP
+Timeout. 0 - 800000. Default: 1000.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 50000 (0.05 seconds.).
+.TP 8
+.B \-ncolors \fInumber\fP
+Number of Colors. Default: 64.
+.TP 8
+.B \-size \fInumber\fP
+Cell Size. -20 - 20. Default: -7.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by David Bagley. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+David Bagley.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+discrete - discrete map iterative function fractal systems.
+.SH SYNOPSIS
+.B discrete
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-cycles \fInumber\fP]
+[\-delay \fInumber\fP]
+[\-ncolors \fInumber\fP]
+.SH DESCRIPTION
+More ``discrete map'' systems, including new variants of Hopalong and
+Julia, and a few others.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-cycles \fInumber\fP
+Timeout. 100 - 10000. Default: 2500.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 1000 (0.001 seconds.).
+.TP 8
+.B \-ncolors \fInumber\fP
+Number of Colors. Default: 100.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Tim Auckland. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Tim Auckland.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+euler2d - two dimensional incompressible inviscid fluid flow.
+.SH SYNOPSIS
+.B euler2d
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-count \fInumber\fP]
+[\-eulertail \fInumber\fP]
+[\-cycles \fInumber\fP]
+[\-ncolors \fInumber\fP]
+[\-delay \fInumber\fP]
+.SH DESCRIPTION
+Simulates two dimensional incompressible inviscid fluid flow.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-count \fInumber\fP
+Particles. 2 - 5000. Default: 1024.
+.TP 8
+.B \-eulertail \fInumber\fP
+Trail Length. 2 - 500. Default: 10.
+.TP 8
+.B \-cycles \fInumber\fP
+Duration. 100 - 5000. Default: 3000.
+.TP 8
+.B \-ncolors \fInumber\fP
+Number of Colors. Default: 64.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.).
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Stephen Montgomery-Smith. Permission to use,
+copy, modify, distribute, and sell this software and its documentation
+for any purpose is hereby granted without fee, provided that the above
+copyright notice appear in all copies and that both that copyright
+notice and this permission notice appear in supporting documentation.
+No representations are made about the suitability of this software for
+any purpose. It is provided "as is" without express or implied
+warranty.
+.SH AUTHOR
+Stephen Montgomery-Smith.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+fadeplot - draws a waving ribbon following a sinusoidal path.
+.SH SYNOPSIS
+.B fadeplot
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-count \fInumber\fP]
+[\-cycles \fInumber\fP]
+[\-delay \fInumber\fP]
+[\-ncolors \fInumber\fP]
+.SH DESCRIPTION
+Draws what looks like a waving ribbon following a sinusoidal path.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-count \fInumber\fP
+Count. 0 - 20. Default: 10.
+.TP 8
+.B \-cycles \fInumber\fP
+How many frames until the shape changes. Default: 1500.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 30000 (0.03 seconds.).
+.TP 8
+.B \-ncolors \fInumber\fP
+Number of colors. Default: 64.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Bas van Gaalen and Charles Vidal. Permission to
+use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided
+that the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation. No representations are made about the suitability of
+this software for any purpose. It is provided "as is" without express
+or implied warranty.
+.SH AUTHOR
+Bas van Gaalen and Charles Vidal.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+flow - strange attractors.
+.SH SYNOPSIS
+.B flow
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-count \fInumber\fP]
+[\-cycles \fInumber\fP]
+[\-delay \fInumber\fP]
+[\-ncolors \fInumber\fP]
+[\-rotate \fIbool\fP]
+[\-ride \fIbool\fP]
+[\-zoom \fIbool\fP]
+[\-box \fIbool\fP]
+[\-freeze \fIbool\fP]
+[\-allow2d \fIbool\fP]
+[\-slow \fIbool\fP]
+.SH DESCRIPTION
+Another series of strange attractors: a flowing series of points, making
+strange rotational shapes.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-count \fInumber\fP
+Number of pixels. Default: 500.
+.TP 8
+.B \-cycles \fInumber\fP
+Timeout before changing objects. 0 - 800000. Default: 3000.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 1000 (0.001 seconds.).
+.TP 8
+.B \-ncolors \fInumber\fP
+Number of Colors. Default: 200.
+.TP 8
+.B \-rotate
+Rotate Around Attractor.
+.TP 8
+.B \-ride
+Ride a Trained Bee.
+.TP 8
+.B \-zoom
+Zoom In and Out.
+.TP 8
+.B \-box
+Show Bounding Box.
+.TP 8
+.B \-freeze
+Freeze Some Bees.
+.TP 8
+.B \-allow2d
+Allow 2D Attractors.
+.TP 8
+.B \-slow
+Slow Bees with Antifreeze.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Jeff Butterworth. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Jeff Butterworth.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+fluidballs - the physics of bouncing balls.
+.SH SYNOPSIS
+.B fluidballs
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-count \fInumber\fP]
+[\-size \fInumber\fP]
+[\-gravity \fInumber\fP]
+[\-wind \fInumber\fP]
+[\-friction \fInumber\fP]
+[\-delay \fInumber\fP]
+[\-nonrandom]
+[\-no-shake]
+[\-fps]
+.SH DESCRIPTION
+Models the physics of bouncing balls, or of particles in a gas or fluid,
+depending on the settings. If "Shake Box" is selected, then every now and
+then, the box will be rotated, changing which direction is down (in order
+to keep the settled balls in motion.)
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-count \fInumber\fP
+How many balls to display. Default: 300.
+.TP 8
+.B \-size \fInumber\fP
+Maximum size of each ball. Default: 25.
+.TP 8
+.B \-gravity \fInumber\fP
+Coefficient of gravity. Useful values are < 0.1. Default: 0.01.
+.TP 8
+.B \-wind \fInumber\fP
+Wind. Useful values are < 0.1. Default: 0.00.
+.TP 8
+.B \-friction \fInumber\fP
+Coefficient of friction (or viscosity.) Useful values are < 4. Default: 0.8.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.).
+.TP 8
+.B \-nonrandom
+Make all balls be the same size.
+.TP 8
+.B \-no-nonrandom
+Make the balls be random sizes. Default.
+.TP 8
+.B \-shake | \-no-shake
+Whether to shake the box if the system seems to have settled down.
+"Shake" means "change the direction of Down."
+.TP 8
+.B \-fps | \-no-fps
+Whether to show a frames-per-second display at the bottom of the screen.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Peter Birtles and Jamie Zawinski. Permission to
+use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided
+that the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation. No representations are made about the suitability of
+this software for any purpose. It is provided "as is" without express
+or implied warranty.
+.SH AUTHOR
+Peter Birtles and Jamie Zawinski.
+
gltext.c molecule.c dangerball.c sphere.c tube.c circuit.c \
menger.c engine.c flipscreen3d.c font-ximage.c \
grab-ximage.c glsnake.c boxed.c glforestfire.c sballs.c \
- cubenetic.c spheremonics.c
+ cubenetic.c spheremonics.c marching.c lavalite.c rotator.c \
+ trackball.c gltrackball.c queens.c
OBJS = xscreensaver-gl-helper.o \
atlantis.o b_draw.o b_lockglue.o b_sphere.o bubble3d.o \
gltext.o molecule.o dangerball.o sphere.o tube.o circuit.o \
menger.o engine.o flipscreen3d.o font-ximage.o \
grab-ximage.o glsnake.o boxed.o glforestfire.o sballs.o \
- cubenetic.o spheremonics.o
+ cubenetic.o spheremonics.o marching.o lavalite.o rotator.o \
+ trackball.o gltrackball.o queens.o
GL_EXES = cage gears moebius pipes sproingies stairs superquadrics \
morph3d rubik atlantis lament bubble3d glplanet pulsar \
sierpinski3d gflux stonerview starwars gltext molecule \
dangerball circuit menger engine flipscreen3d glsnake boxed \
- glforestfire sballs cubenetic spheremonics
+ glforestfire sballs cubenetic spheremonics lavalite queens
GLE_EXES = extrusion
GL_UTIL_EXES = xscreensaver-gl-helper
HACK_EXES = @GL_EXES@ @GLE_EXES@
HDRS = atlantis.h bubble3d.h buildlwo.h e_textures.h xpm-ximage.h \
grab-ximage.h font-ximage.h tube.h sphere.h boxed.h \
- stonerview-move.h stonerview-osc.h glutstroke.h glut_roman.h
-GL_MEN = gflux.man lament.man starwars.man gltext.man \
- molecule.man xscreensaver-gl-helper.man glsnake.man \
- glforestfire.man sballs.man
+ stonerview-move.h stonerview-osc.h glutstroke.h \
+ glut_roman.h marching.h rotator.h trackball.h gltrackball.h
+GL_MEN = atlantis.man boxed.man bubble3d.man cage.man circuit.man \
+ cubenetic.man dangerball.man engine.man extrusion.man \
+ flipscreen3d.man gears.man gflux.man glforestfire.man \
+ glplanet.man glsnake.man gltext.man lament.man lavalite.man \
+ menger.man moebius.man molecule.man morph3d.man pipes.man \
+ pulsar.man queens.man rubik.man sballs.man sierpinski3d.man \
+ spheremonics.man sproingies.man stairs.man starwars.man \
+ stonerview.man superquadrics.man xscreensaver-gl-helper.man
MEN = @GL_MEN@
EXTRAS = README Makefile.in
mv Makefile.in Makefile.in.bak && \
mv /tmp/distdepend.$$$$ Makefile.in
+
TAGS: tags
tags:
find $(srcdir) -name '*.[chly]' -print | xargs etags -a
echo_tarfiles:
@echo $(TARFILES)
+check_men:
+ @badmen="" ; \
+ for exe in $(EXES); do \
+ if ! [ -f $(srcdir)/$$exe.man ]; then \
+ badmen="$$badmen $$exe" ; \
+ fi ; \
+ done ; \
+ if [ -n "$$badmen" ]; then \
+ echo "" ; \
+ echo "Warning: The following programs have no manuals:" ; \
+ echo "" ; \
+ for m in $$badmen ; do \
+ echo " $$m" ; \
+ done ; \
+ fi
+
+check_xml:
+ @badxml="" ; \
+ for exe in $(EXES); do \
+ if ! [ -f $(srcdir)/../config/$$exe.xml -o \
+ "$$exe" = xscreensaver-gl-helper ]; then \
+ badxml="$$badxml $$exe" ; \
+ fi ; \
+ done ; \
+ if [ -n "$$badxml" ]; then \
+ echo "" ; \
+ echo "Warning: The following programs have no configurators:" ; \
+ echo "" ; \
+ for m in $$badxml ; do \
+ echo " $$m" ; \
+ done ; \
+ echo "" ; \
+ fi
+
+distdepend:: check_men check_xml
+
+
+
# Rules for noticing when the objects from the utils directory are out of
# date with respect to their sources, and going and building them according
CC_HACK = $(CC) $(LDFLAGS)
+TRACK_OBJS=rotator.o trackball.o gltrackball.o
+
ATLANTIS_OBJS = $(HACK_OBJS) dolphin.o shark.o swim.o whale.o xpm-ximage.o
atlantis: atlantis.o $(ATLANTIS_OBJS)
$(CC_HACK) -o $@ $@.o $(ATLANTIS_OBJS) $(HACK_LIBS) $(XPM_LIBS)
cage: cage.o $(HACK_OBJS)
$(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS)
-gears: gears.o $(HACK_OBJS)
- $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS)
+gears: gears.o $(HACK_OBJS) $(TRACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(TRACK_OBJS) $(HACK_LIBS)
-moebius: moebius.o $(HACK_OBJS)
- $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS)
+moebius: moebius.o $(TRACK_OBJS) $(HACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(TRACK_OBJS) $(HACK_OBJS) $(HACK_LIBS)
pipes: pipes.o $(HACK_OBJS) pipeobjs.o buildlwo.o
$(CC_HACK) -o $@ $@.o $(HACK_OBJS) pipeobjs.o buildlwo.o \
sproingies: sproingies.o $(HACK_OBJS) $(SPROINGIES)
$(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(SPROINGIES) $(HACK_LIBS)
-lament: lament.o $(HACK_OBJS) xpm-ximage.o
- $(CC_HACK) -o $@ $@.o $(HACK_OBJS) xpm-ximage.o $(XPM_LIBS)
+lament: lament.o $(TRACK_OBJS) xpm-ximage.o $(HACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(TRACK_OBJS) xpm-ximage.o $(HACK_OBJS) $(XPM_LIBS)
B3D = b_sphere.o b_draw.o b_lockglue.o
bubble3d: bubble3d.o $(HACK_OBJS) $(B3D)
$(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(B3D) $(HACK_LIBS)
-glplanet: glplanet.o sphere.o xpm-ximage.o $(HACK_OBJS)
- $(CC_HACK) -o $@ $@.o sphere.o xpm-ximage.o $(HACK_OBJS) $(XPM_LIBS)
+PLANETHACKS=sphere.o xpm-ximage.o $(TRACK_OBJS)
+glplanet: glplanet.o $(PLANETHACKS) $(HACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(PLANETHACKS) $(HACK_OBJS) $(XPM_LIBS)
pulsar: pulsar.o $(HACK_OBJS) xpm-ximage.o
$(CC_HACK) -o $@ $@.o $(HACK_OBJS) xpm-ximage.o $(HACK_LIBS) $(XPM_LIBS)
EXTRUSION_OBJS=extrusion.o extrusion-helix2.o extrusion-helix3.o \
extrusion-helix4.o extrusion-joinoffset.o extrusion-screw.o \
- extrusion-taper.o extrusion-twistoid.o xpm-ximage.o
+ extrusion-taper.o extrusion-twistoid.o xpm-ximage.o $(TRACK_OBJS)
extrusion: $(EXTRUSION_OBJS) $(HACK_OBJS)
$(CC_HACK) -o $@ $(EXTRUSION_OBJS) $(HACK_OBJS) $(XPM_LIBS) $(GLE_LIBS)
-sierpinski3d: sierpinski3d.o $(HACK_OBJS)
- $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS)
+sierpinski3d: sierpinski3d.o $(HACK_OBJS) $(TRACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(TRACK_OBJS) $(HACK_LIBS)
gflux: gflux.o $(HACK_OBJS) $(GRAB_OBJS)
$(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(GRAB_OBJS) $(HACK_LIBS)
starwars: $(SW_OBJS) $(HACK_OBJS)
$(CC_HACK) -o $@ $(SW_OBJS) $(HACK_OBJS) $(HACK_LIBS)
-GLT_OBJS=gltext.o glut_stroke.o glut_swidth.o tube.o
+GLT_OBJS=gltext.o glut_stroke.o glut_swidth.o tube.o $(TRACK_OBJS)
gltext: $(GLT_OBJS) $(HACK_OBJS)
$(CC_HACK) -o $@ $(GLT_OBJS) $(HACK_OBJS) $(HACK_LIBS)
-dangerball: dangerball.o sphere.o tube.o $(HACK_OBJS)
- $(CC_HACK) -o $@ $@.o sphere.o tube.o $(HACK_OBJS) $(HACK_LIBS)
+DB_OBJS=sphere.o tube.o $(TRACK_OBJS)
+dangerball: dangerball.o $(DB_OBJS) $(HACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(DB_OBJS) $(HACK_OBJS) $(HACK_LIBS)
circuit: circuit.o $(HACK_OBJS) font-ximage.o
$(CC_HACK) -o $@ $@.o $(HACK_OBJS) font-ximage.o $(HACK_LIBS)
-menger: menger.o $(HACK_OBJS)
- $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS)
+menger: menger.o $(HACK_OBJS) $(TRACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(TRACK_OBJS) $(HACK_LIBS)
engine: engine.o $(HACK_OBJS)
$(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS)
sballs: sballs.o $(HACK_OBJS) xpm-ximage.o
$(CC_HACK) -o $@ $@.o $(HACK_OBJS) xpm-ximage.o $(XPM_LIBS)
-cubenetic: cubenetic.o $(HACK_OBJS)
- $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS)
+cubenetic: cubenetic.o $(HACK_OBJS) $(TRACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(TRACK_OBJS) $(HACK_LIBS)
-spheremonics: spheremonics.o $(HACK_OBJS)
- $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS)
+spheremonics: spheremonics.o $(HACK_OBJS) $(TRACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(TRACK_OBJS) $(HACK_LIBS)
+
+LLOBJS=marching.o xpm-ximage.o $(TRACK_OBJS) $(HACK_OBJS)
+lavalite: lavalite.o $(LLOBJS)
+ $(CC_HACK) -o $@ $@.o $(LLOBJS) $(XPM_LIBS)
+queens: queens.o $(TRACK_OBJS) $(HACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(TRACK_OBJS) $(HACK_OBJS) $(HACK_LIBS)
# This one works differently (it's not xlock-like.)
#
done ; \
mv $$tmp molecules.h
-molecule: molecule.o sphere.o tube.o $(HACK_OBJS)
- $(CC_HACK) -o $@ $@.o sphere.o tube.o $(HACK_OBJS) $(HACK_LIBS)
+MOLECULEOBJS=sphere.o tube.o $(TRACK_OBJS)
+molecule: molecule.o $(MOLECULEOBJS) $(HACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(MOLECULEOBJS) $(HACK_OBJS) $(HACK_LIBS)
dnalogo: dnalogo.o tube.o $(HACK_OBJS)
$(CC_HACK) -o $@ $@.o tube.o $(HACK_OBJS) $(HACK_LIBS)
circuit.o: ../../config.h
circuit.o: $(srcdir)/font-ximage.h
cubenetic.o: ../../config.h
+cubenetic.o: $(srcdir)/gltrackball.h
+cubenetic.o: $(srcdir)/rotator.h
dangerball.o: ../../config.h
+dangerball.o: $(srcdir)/gltrackball.h
+dangerball.o: $(srcdir)/rotator.h
dangerball.o: $(srcdir)/sphere.h
dangerball.o: $(srcdir)/tube.h
dolphin.o: $(srcdir)/atlantis.h
extrusion-helix4.o: ../../config.h
extrusion-joinoffset.o: ../../config.h
extrusion.o: ../../config.h
+extrusion.o: $(srcdir)/rotator.h
extrusion.o: $(srcdir)/xpm-ximage.h
extrusion-screw.o: ../../config.h
extrusion-taper.o: ../../config.h
font-ximage.o: ../../config.h
fps.o: ../../config.h
gears.o: ../../config.h
+gears.o: $(srcdir)/gltrackball.h
+gears.o: $(srcdir)/rotator.h
gflux.o: ../../config.h
gflux.o: $(srcdir)/grab-ximage.h
glforestfire.o: ../../config.h
glforestfire.o: $(HACK_SRC)/images/tree.xpm
glforestfire.o: $(srcdir)/xpm-ximage.h
glplanet.o: ../../config.h
+glplanet.o: $(srcdir)/gltrackball.h
glplanet.o: $(HACK_SRC)/images/earth.xpm
+glplanet.o: $(srcdir)/rotator.h
glplanet.o: $(srcdir)/sphere.h
glplanet.o: $(srcdir)/xpm-ximage.h
glsnake.o: ../../config.h
gltext.o: ../../config.h
+gltext.o: $(srcdir)/gltrackball.h
gltext.o: $(srcdir)/glut_roman.h
gltext.o: $(srcdir)/glutstroke.h
+gltext.o: $(srcdir)/rotator.h
gltext.o: $(srcdir)/tube.h
+gltrackball.o: ../../config.h
+gltrackball.o: $(srcdir)/gltrackball.h
+gltrackball.o: $(srcdir)/trackball.h
glut_stroke.o: ../../config.h
glut_stroke.o: $(srcdir)/glutstroke.h
glut_swidth.o: ../../config.h
glut_swidth.o: $(srcdir)/glutstroke.h
grab-ximage.o: ../../config.h
lament.o: ../../config.h
+lament.o: $(srcdir)/gltrackball.h
lament.o: $(HACK_SRC)/images/lament.xpm
+lament.o: $(srcdir)/rotator.h
lament.o: $(srcdir)/xpm-ximage.h
+lavalite.o: ../../config.h
+lavalite.o: $(srcdir)/gltrackball.h
+lavalite.o: $(srcdir)/marching.h
+lavalite.o: $(srcdir)/rotator.h
+lavalite.o: $(srcdir)/xpm-ximage.h
+marching.o: ../../config.h
+marching.o: $(srcdir)/marching.h
menger.o: ../../config.h
+menger.o: $(srcdir)/gltrackball.h
+menger.o: $(srcdir)/rotator.h
moebius.o: ../../config.h
moebius.o: $(srcdir)/e_textures.h
+moebius.o: $(srcdir)/gltrackball.h
+moebius.o: $(srcdir)/rotator.h
molecule.o: ../../config.h
+molecule.o: $(srcdir)/gltrackball.h
molecule.o: molecules.h
+molecule.o: $(srcdir)/rotator.h
molecule.o: $(srcdir)/sphere.h
molecule.o: $(srcdir)/tube.h
morph3d.o: ../../config.h
pipes.o: ../../config.h
pulsar.o: ../../config.h
pulsar.o: $(srcdir)/xpm-ximage.h
+queens.o: ../../config.h
+queens.o: $(srcdir)/gltrackball.h
+rotator.o: ../../config.h
+rotator.o: $(srcdir)/rotator.h
rubik.o: ../../config.h
s1_1.o: $(srcdir)/buildlwo.h
s1_2.o: $(srcdir)/buildlwo.h
sballs.o: $(srcdir)/xpm-ximage.h
shark.o: $(srcdir)/atlantis.h
sierpinski3d.o: ../../config.h
+sierpinski3d.o: $(srcdir)/gltrackball.h
+sierpinski3d.o: $(srcdir)/rotator.h
spheremonics.o: ../../config.h
+spheremonics.o: $(srcdir)/gltrackball.h
+spheremonics.o: $(srcdir)/rotator.h
sphere.o: ../../config.h
sproingies.o: $(srcdir)/buildlwo.h
sproingies.o: ../../config.h
superquadrics.o: ../../config.h
swim.o: $(srcdir)/atlantis.h
swim.o: ../../config.h
+trackball.o: ../../config.h
+trackball.o: $(srcdir)/trackball.h
tube.o: ../../config.h
tube.o: $(srcdir)/tube.h
whale.o: $(srcdir)/atlantis.h
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+atlantis - draw swimming sharks, whales, and dolphins.
+.SH SYNOPSIS
+.B atlantis
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-whalespeed \fInumber\fP]
+[\-delay \fInumber\fP]
+[\-size \fInumber\fP]
+[\-count \fInumber\fP]
+[\-no-texture]
+[\-gradient]
+[\-wireframe]
+[\-fps]
+.SH DESCRIPTION
+This is xfishtank writ large: a GL animation of a number of sharks,
+dolphins, and whales. The swimming motions are great.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-whalespeed \fInumber\fP
+Whale Speed. 0 - 1000. Default: 250.
+.TP 8
+.B \-delay \fInumber\fP
+Shark Speed. 0 - 500. Default: 100.
+.TP 8
+.B \-size \fInumber\fP
+Shark Proximity. 100 - 10000. Default: 6000.
+.TP 8
+.B \-count \fInumber\fP
+Number of Sharks. 0 - 20. Default: 4.
+.TP 8
+.B \-texture | \-no-texture
+Whether to show shimmering water.
+.TP 8
+.B \-gradient
+Whether to draw a gradient on the background, making it darker at the bottom.
+.TP 8
+.B \-wireframe
+Render in wireframe instead of solid.
+.TP 8
+.B \-fps | \-no-fps
+Whether to show a frames-per-second display at the bottom of the screen.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Mark Kilgard. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Mark Kilgard.
+
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+boxed - draws a box full of 3D bouncing balls that explode.
+.SH SYNOPSIS
+.B boxed
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+[\-wireframe]
+[\-fps]
+.SH DESCRIPTION
+Draws a box full of 3D bouncing balls that explode.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 20000 (0.02 seconds.).
+.TP 8
+.B \-wireframe
+Render in wireframe instead of solid.
+.TP 8
+.B \-fps | \-no-fps
+Whether to show a frames-per-second display at the bottom of the screen.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Sander van Grieken. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Sander van Grieken.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+bubble3d - 3d rising bubbles.
+.SH SYNOPSIS
+.B bubble3d
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+[\-fps]
+.SH DESCRIPTION
+Draws a stream of rising, undulating 3D bubbles, rising toward the top of
+the screen, with nice specular reflections.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.).
+.TP 8
+.B \-fps | \-no-fps
+Whether to show a frames-per-second display at the bottom of the screen.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Richard Jones. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Richard Jones.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+cage - Escher's impossible cage, for xscreensaver.
+.SH SYNOPSIS
+.B cage
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[-delay \fInumber\fP]
+[-fps]
+.SH DESCRIPTION
+This draws Escher's "Impossible Cage", a 3d analog of a moebius strip,
+and rotates it in three dimensions.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 25000 (0.03 seconds.).
+.TP 8
+.B \-fps | \-no-fps
+Whether to show a frames-per-second display at the bottom of the screen.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Marcelo Vianna. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Marcelo Vianna.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+circuit - animates a number of 3D electronic components.
+.SH SYNOPSIS
+.B circuit
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+[\-parts \fInumber\fP]
+[\-no-spin]
+[\-rotate]
+[\-delay \fInumber\fP]
+[\-no-light]
+[\-fps]
+.SH DESCRIPTION
+Animates a number of 3D electronic components.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 30000 (0.03 seconds.).
+.TP 8
+.B \-parts \fInumber\fP
+Number of parts. Default: 10.
+.TP 8
+.B \-spin | \-no-spin
+Whether the objects should spin.
+.TP 8
+.B \-rotate | \-no-rotate
+Whether the scene should spin.
+.TP 8
+.B \-delay \fInumber\fP
+Rotation speed, 0 - 100. Default: 1.
+.TP 8
+.B \-light | \-no-light
+Whether to us lighting, or flat coloring.
+.TP 8
+.B \-fps | \-no-fps
+Whether to show a frames-per-second display at the bottom of the screen.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Ben Buxton. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Ben Buxton.
#define HACK_INIT init_cube
#define HACK_DRAW draw_cube
#define HACK_RESHAPE reshape_cube
+#define HACK_HANDLE_EVENT cube_handle_event
+#define EVENT_MASK PointerMotionMask
#define ccs_opts xlockmore_opts
#define DEF_SPIN "XYZ"
#include "xlockmore.h"
#include "colors.h"
+#include "rotator.h"
+#include "gltrackball.h"
#include <ctype.h>
#ifdef USE_GL /* whole file */
typedef struct {
GLXContext *glx_context;
-
- GLfloat rotx, roty, rotz; /* current object rotation */
- GLfloat dx, dy, dz; /* current rotational velocity */
- GLfloat ddx, ddy, ddz; /* current rotational acceleration */
- GLfloat d_max; /* max velocity */
- Bool spin_x, spin_y, spin_z;
+ rotator *rot;
+ trackball_state *trackball;
+ Bool button_down_p;
GLuint cube_list;
GLuint texture_id;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
- gluPerspective( 30.0, 1/h, 1.0, 100.0 );
- gluLookAt( 0.0, 0.0, 15.0,
- 0.0, 0.0, 0.0,
- 0.0, 1.0, 0.0);
+ gluPerspective (30.0, 1/h, 1.0, 100.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
- glTranslatef(0.0, 0.0, -15.0);
+ gluLookAt( 0.0, 0.0, 30.0,
+ 0.0, 0.0, 0.0,
+ 0.0, 1.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
}
-/* lifted from lament.c */
-#define RAND(n) ((long) ((random() & 0x7fffffff) % ((long) (n))))
-#define RANDSIGN() ((random() & 1) ? 1 : -1)
-
-static void
-rotate(GLfloat *pos, GLfloat *v, GLfloat *dv, GLfloat max_v)
-{
- double ppos = *pos;
-
- /* tick position */
- if (ppos < 0)
- ppos = -(ppos + *v);
- else
- ppos += *v;
-
- if (ppos > 1.0)
- ppos -= 1.0;
- else if (ppos < 0)
- ppos += 1.0;
-
- if (ppos < 0) abort();
- if (ppos > 1.0) abort();
- *pos = (*pos > 0 ? ppos : -ppos);
-
- /* accelerate */
- *v += *dv;
-
- /* clamp velocity */
- if (*v > max_v || *v < -max_v)
- {
- *dv = -*dv;
- }
- /* If it stops, start it going in the other direction. */
- else if (*v < 0)
- {
- if (random() % 4)
- {
- *v = 0;
-
- /* keep going in the same direction */
- if (random() % 2)
- *dv = 0;
- else if (*dv < 0)
- *dv = -*dv;
- }
- else
- {
- /* reverse gears */
- *v = -*v;
- *dv = -*dv;
- *pos = -*pos;
- }
- }
-
- /* Alter direction of rotational acceleration randomly. */
- if (! (random() % 120))
- *dv = -*dv;
-
- /* Change acceleration very occasionally. */
- if (! (random() % 200))
- {
- if (*dv == 0)
- *dv = 0.00001;
- else if (random() & 1)
- *dv *= 1.2;
- else
- *dv *= 0.8;
- }
-}
-
-
\f
/* Waves.
Adapted from ../hacks/interference.c by Hannu Mallat.
}
+Bool
+cube_handle_event (ModeInfo *mi, XEvent *event)
+{
+ cube_configuration *cc = &ccs[MI_SCREEN(mi)];
+
+ if (event->xany.type == ButtonPress &&
+ event->xbutton.button & Button1)
+ {
+ cc->button_down_p = True;
+ gltrackball_start (cc->trackball,
+ event->xbutton.x, event->xbutton.y,
+ MI_WIDTH (mi), MI_HEIGHT (mi));
+ return True;
+ }
+ else if (event->xany.type == ButtonRelease &&
+ event->xbutton.button & Button1)
+ {
+ cc->button_down_p = False;
+ return True;
+ }
+ else if (event->xany.type == MotionNotify &&
+ cc->button_down_p)
+ {
+ gltrackball_track (cc->trackball,
+ event->xmotion.x, event->xmotion.y,
+ MI_WIDTH (mi), MI_HEIGHT (mi));
+ return True;
+ }
+
+ return False;
+}
+
+
void
init_cube (ModeInfo *mi)
{
{
+ Bool spinx=False, spiny=False, spinz=False;
+ double spin_speed = 1.0;
+ double wander_speed = 0.05;
+
char *s = do_spin;
while (*s)
{
- if (*s == 'x' || *s == 'X') cc->spin_x = 1;
- else if (*s == 'y' || *s == 'Y') cc->spin_y = 1;
- else if (*s == 'z' || *s == 'Z') cc->spin_z = 1;
+ if (*s == 'x' || *s == 'X') spinx = True;
+ else if (*s == 'y' || *s == 'Y') spiny = True;
+ else if (*s == 'z' || *s == 'Z') spinz = True;
else
{
fprintf (stderr,
}
s++;
}
- }
- cc->rotx = frand(1.0) * RANDSIGN();
- cc->roty = frand(1.0) * RANDSIGN();
- cc->rotz = frand(1.0) * RANDSIGN();
-
- /* bell curve from 0-6 degrees, avg 3 */
- cc->dx = (frand(0.7) + frand(0.7) + frand(0.7)) / (360/2);
- cc->dy = (frand(0.7) + frand(0.7) + frand(0.7)) / (360/2);
- cc->dz = (frand(0.7) + frand(0.7) + frand(0.7)) / (360/2);
-
- cc->d_max = cc->dx * 2;
-
- cc->ddx = 0.00006 + frand(0.00003);
- cc->ddy = 0.00006 + frand(0.00003);
- cc->ddz = 0.00006 + frand(0.00003);
+ cc->rot = make_rotator (spinx ? spin_speed : 0,
+ spiny ? spin_speed : 0,
+ spinz ? spin_speed : 0,
+ 1.0,
+ do_wander ? wander_speed : 0,
+ True);
+ cc->trackball = gltrackball_init ();
+ }
cc->ncolors = 256;
cc->texture_colors = (XColor *) calloc(cc->ncolors, sizeof(XColor));
glScalef(1.1, 1.1, 1.1);
{
- GLfloat x, y, z;
-
- if (do_wander)
- {
- static int frame = 0;
-
-# define SINOID(SCALE,SIZE) \
- ((((1 + sin((frame * (SCALE)) / 2 * M_PI)) / 2.0) * (SIZE)) - (SIZE)/2)
-
- x = SINOID(0.0071, 8.0);
- y = SINOID(0.0053, 6.0);
- z = SINOID(0.0037, 15.0);
- frame++;
- glTranslatef(x, y, z);
- }
-
- if (cc->spin_x || cc->spin_y || cc->spin_z)
- {
- x = cc->rotx;
- y = cc->roty;
- z = cc->rotz;
- if (x < 0) x = 1 - (x + 1);
- if (y < 0) y = 1 - (y + 1);
- if (z < 0) z = 1 - (z + 1);
-
- if (cc->spin_x) glRotatef(x * 360, 1.0, 0.0, 0.0);
- if (cc->spin_y) glRotatef(y * 360, 0.0, 1.0, 0.0);
- if (cc->spin_z) glRotatef(z * 360, 0.0, 0.0, 1.0);
-
- rotate(&cc->rotx, &cc->dx, &cc->ddx, cc->d_max);
- rotate(&cc->roty, &cc->dy, &cc->ddy, cc->d_max);
- rotate(&cc->rotz, &cc->dz, &cc->ddz, cc->d_max);
- }
+ double x, y, z;
+ get_position (cc->rot, &x, &y, &z, !cc->button_down_p);
+ glTranslatef((x - 0.5) * 8,
+ (y - 0.5) * 6,
+ (z - 0.5) * 15);
+
+ gltrackball_rotate (cc->trackball);
+
+ get_rotation (cc->rot, &x, &y, &z, !cc->button_down_p);
+ glRotatef (x * 360, 1.0, 0.0, 0.0);
+ glRotatef (y * 360, 0.0, 1.0, 0.0);
+ glRotatef (z * 360, 0.0, 0.0, 1.0);
}
glScalef (2.5, 2.5, 2.5);
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+cubenetic - cubist 3D undulating blob.
+.SH SYNOPSIS
+.B cubenetic
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+[\-count \fInumber\fP]
+[\-no-wander]
+[\-no-spin]
+[\-spin \fI[XYZ]\fP]
+[\-wireframe]
+[\-no-texture]
+[\-wave-speed \fInumber\fP]
+[\-wave-radius \fInumber\fP]
+[\-waves \fInumber\fP]
+[\-fps]
+.SH DESCRIPTION
+Draws a pulsating set of overlapping boxes with ever-chaning blobby
+patterns undulating across their surfaces.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 30000 (0.03 seconds.).
+.TP 8
+.B \-count \fInumber\fP
+How many boxes make up the object. Default: 5.
+.TP 8
+.B \-wander | \-no-wander
+Whether the object should wander around the screen.
+.TP 8
+.B \-spin \fI[XYZ]\fP
+Around which axes should the object spin?
+.TP 8
+.B \-no-spin
+Don't spin.
+.TP 8
+.B \-wireframe
+Render in wireframe instead of solid.
+.TP 8
+.B \-texture | \-no-texture
+Display Solid Colors.
+.TP 8
+.B \-wave-speed \fInumber\fP
+Surface Pattern Speed. 5 - 150. Default: 80.
+.TP 8
+.B \-wave-radius \fInumber\fP
+Surface Pattern Overlap. 5 - 600. Default: 512.
+.TP 8
+.B \-waves \fInumber\fP
+Surface Pattern Complexity. 1 - 20. Default: 3.
+.TP 8
+.B \-fps | \-no-fps
+Whether to show a frames-per-second display at the bottom of the screen.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Jamie Zawinski. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Jamie Zawinski.
#define HACK_INIT init_ball
#define HACK_DRAW draw_ball
#define HACK_RESHAPE reshape_ball
+#define HACK_HANDLE_EVENT ball_handle_event
+#define EVENT_MASK PointerMotionMask
#define sws_opts xlockmore_opts
#define DEF_SPIN "True"
#include "colors.h"
#include "sphere.h"
#include "tube.h"
+#include "rotator.h"
+#include "gltrackball.h"
#include <ctype.h>
#ifdef USE_GL /* whole file */
typedef struct {
GLXContext *glx_context;
-
- GLfloat rotx, roty, rotz; /* current object rotation */
- GLfloat dx, dy, dz; /* current rotational velocity */
- GLfloat ddx, ddy, ddz; /* current rotational acceleration */
- GLfloat d_max; /* max velocity */
+ rotator *rot;
+ trackball_state *trackball;
+ Bool button_down_p;
GLuint ball_list;
GLuint spike_list;
static ball_configuration *bps = NULL;
-static char *do_spin;
+static Bool do_spin;
static GLfloat speed;
static Bool do_wander;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
+ gluPerspective (30.0, 1/h, 1.0, 100.0);
- gluPerspective( 30.0, 1/h, 1.0, 100.0 );
- gluLookAt( 0.0, 0.0, 15.0,
- 0.0, 0.0, 0.0,
- 0.0, 1.0, 0.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
- glTranslatef(0.0, 0.0, -15.0);
+ gluLookAt( 0.0, 0.0, 30.0,
+ 0.0, 0.0, 0.0,
+ 0.0, 1.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
}
-/* lifted from lament.c */
-#define RAND(n) ((long) ((random() & 0x7fffffff) % ((long) (n))))
-#define RANDSIGN() ((random() & 1) ? 1 : -1)
-
-static void
-rotate(GLfloat *pos, GLfloat *v, GLfloat *dv, GLfloat max_v)
-{
- double ppos = *pos;
-
- /* tick position */
- if (ppos < 0)
- ppos = -(ppos + *v);
- else
- ppos += *v;
-
- if (ppos > 1.0)
- ppos -= 1.0;
- else if (ppos < 0)
- ppos += 1.0;
-
- if (ppos < 0) abort();
- if (ppos > 1.0) abort();
- *pos = (*pos > 0 ? ppos : -ppos);
-
- /* accelerate */
- *v += *dv;
-
- /* clamp velocity */
- if (*v > max_v || *v < -max_v)
- {
- *dv = -*dv;
- }
- /* If it stops, start it going in the other direction. */
- else if (*v < 0)
- {
- if (random() % 4)
- {
- *v = 0;
-
- /* keep going in the same direction */
- if (random() % 2)
- *dv = 0;
- else if (*dv < 0)
- *dv = -*dv;
- }
- else
- {
- /* reverse gears */
- *v = -*v;
- *dv = -*dv;
- *pos = -*pos;
- }
- }
-
- /* Alter direction of rotational acceleration randomly. */
- if (! (random() % 120))
- *dv = -*dv;
-
- /* Change acceleration very occasionally. */
- if (! (random() % 200))
- {
- if (*dv == 0)
- *dv = 0.00001;
- else if (random() & 1)
- *dv *= 1.2;
- else
- *dv *= 0.8;
- }
-}
-
-
static void
randomize_spikes (ModeInfo *mi)
{
glScalef (diam, pos, diam);
glCallList (bp->spike_list);
glPopMatrix();
+
+ mi->polygon_count += (SPIKE_FACES + 1);
}
}
}
+Bool
+ball_handle_event (ModeInfo *mi, XEvent *event)
+{
+ ball_configuration *bp = &bps[MI_SCREEN(mi)];
+
+ if (event->xany.type == ButtonPress &&
+ event->xbutton.button & Button1)
+ {
+ bp->button_down_p = True;
+ gltrackball_start (bp->trackball,
+ event->xbutton.x, event->xbutton.y,
+ MI_WIDTH (mi), MI_HEIGHT (mi));
+ return True;
+ }
+ else if (event->xany.type == ButtonRelease &&
+ event->xbutton.button & Button1)
+ {
+ bp->button_down_p = False;
+ return True;
+ }
+ else if (event->xany.type == MotionNotify &&
+ bp->button_down_p)
+ {
+ gltrackball_track (bp->trackball,
+ event->xmotion.x, event->xmotion.y,
+ MI_WIDTH (mi), MI_HEIGHT (mi));
+ return True;
+ }
+
+ return False;
+}
+
+
void
init_ball (ModeInfo *mi)
{
glLightfv(GL_LIGHT0, GL_SPECULAR, spc);
}
- bp->rotx = frand(1.0) * RANDSIGN();
- bp->roty = frand(1.0) * RANDSIGN();
- bp->rotz = frand(1.0) * RANDSIGN();
-
- /* bell curve from 0-6 degrees, avg 3 */
- bp->dx = (frand(2) + frand(2) + frand(2)) / (360/2);
- bp->dy = (frand(2) + frand(2) + frand(2)) / (360/2);
- bp->dz = (frand(2) + frand(2) + frand(2)) / (360/2);
-
- bp->d_max = bp->dx * 2;
-
- bp->ddx = 0.00006 + frand(0.00003);
- bp->ddy = 0.00006 + frand(0.00003);
- bp->ddz = 0.00006 + frand(0.00003);
+ {
+ double spin_speed = 10.0;
+ double wander_speed = 0.15;
+ double spin_accel = 2.0;
+
+ bp->rot = make_rotator (do_spin ? spin_speed : 0,
+ do_spin ? spin_speed : 0,
+ do_spin ? spin_speed : 0,
+ spin_accel,
+ do_wander ? wander_speed : 0,
+ True);
+ bp->trackball = gltrackball_init ();
+ }
bp->ncolors = 128;
bp->colors = (XColor *) calloc(bp->ncolors, sizeof(XColor));
Window window = MI_WINDOW(mi);
int c2;
- /* #### I'm not getting specular reflections on the ball,
- and I can't figure out why.
- */
-
static GLfloat bcolor[4] = {0.0, 0.0, 0.0, 1.0};
static GLfloat scolor[4] = {0.0, 0.0, 0.0, 1.0};
static GLfloat bspec[4] = {1.0, 1.0, 1.0, 1.0};
glScalef(1.1, 1.1, 1.1);
{
- GLfloat x, y, z;
-
- if (do_wander)
- {
- static int frame = 0;
-
-# define SINOID(SCALE,SIZE) \
- ((((1 + sin((frame * (SCALE)) / 2 * M_PI)) / 2.0) * (SIZE)) - (SIZE)/2)
-
- x = SINOID(0.051, 8.0);
- y = SINOID(0.037, 8.0);
- z = SINOID(0.131, 13.0);
- frame++;
- glTranslatef(x, y, z);
- }
-
- if (do_spin)
- {
- x = bp->rotx;
- y = bp->roty;
- z = bp->rotz;
- if (x < 0) x = 1 - (x + 1);
- if (y < 0) y = 1 - (y + 1);
- if (z < 0) z = 1 - (z + 1);
-
- glRotatef(x * 360, 1.0, 0.0, 0.0);
- glRotatef(y * 360, 0.0, 1.0, 0.0);
- glRotatef(z * 360, 0.0, 0.0, 1.0);
-
- rotate(&bp->rotx, &bp->dx, &bp->ddx, bp->d_max);
- rotate(&bp->roty, &bp->dy, &bp->ddy, bp->d_max);
- rotate(&bp->rotz, &bp->dz, &bp->ddz, bp->d_max);
- }
+ double x, y, z;
+ get_position (bp->rot, &x, &y, &z, !bp->button_down_p);
+ glTranslatef((x - 0.5) * 8,
+ (y - 0.5) * 8,
+ (z - 0.5) * 15);
+
+ gltrackball_rotate (bp->trackball);
+
+ get_rotation (bp->rot, &x, &y, &z, !bp->button_down_p);
+ glRotatef (x * 360, 1.0, 0.0, 0.0);
+ glRotatef (y * 360, 0.0, 1.0, 0.0);
+ glRotatef (z * 360, 0.0, 0.0, 1.0);
}
bcolor[0] = bp->colors[bp->ccolor].red / 65536.0;
bp->ccolor++;
if (bp->ccolor >= bp->ncolors) bp->ccolor = 0;
+ mi->polygon_count = 0;
+
glScalef (2.0, 2.0, 2.0);
move_spikes (mi);
glMateriali (GL_FRONT, GL_SHININESS, bshiny);
glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, bcolor);
glCallList (bp->ball_list);
+ mi->polygon_count += (SPHERE_SLICES * SPHERE_STACKS);
glMaterialfv (GL_FRONT, GL_SPECULAR, sspec);
glMaterialf (GL_FRONT, GL_SHININESS, sshiny);
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+dangerball - a 3D ball that periodically extrudes spikes. Ouch!
+.SH SYNOPSIS
+.B dangerball
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+[\-speed \fInumber\fP]
+[\-count \fInumber\fP]
+[\-no-wander]
+[\-no-spin]
+[\-wireframe]
+[\-fps]
+.SH DESCRIPTION
+Draws a ball that periodically extrudes many random spikes. Ouch!
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 30000 (0.03 seconds.).
+.TP 8
+.B \-speed \fInumber\fP
+Spike growth frequency. 0.0 - 0.25. Default: 0.05.
+.TP 8
+.B \-count \fInumber\fP
+Number o spikes. Default: 30.
+.TP 8
+.B \-wander | \-no-wander
+Whether the object should wander around the screen.
+.TP 8
+.B \-spin | \-no-spin
+Whether the object should spin.
+.TP 8
+.B \-wireframe | \-no-wireframe
+Render in wireframe instead of solid.
+.TP 8
+.B \-fps | \-no-fps
+Whether to show a frames-per-second display at the bottom of the screen.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Jamie Zawinski. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Jamie Zawinski.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+engine - draws a 3D four-stroke engine.
+.SH SYNOPSIS
+.B engine
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+[\-no-move]
+[\-no-spin]
+[\-fps]
+.SH DESCRIPTION
+Draws a simple four-stroke engine that floats around the screen.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.).
+.TP 8
+.B \-move | \-no-move
+Whether the object should wander around the screen.
+.TP 8
+.B \-spin | \-no-spin
+Whether the object should spin.
+.TP 8
+.B \-fps | \-no-fps
+Whether to show a frames-per-second display at the bottom of the screen.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Ben Buxton. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Ben Buxton.
# define HACK_INIT init_screensaver
# define HACK_DRAW draw_screensaver
# define HACK_RESHAPE reshape_screensaver
+# define HACK_HANDLE_EVENT screensaver_handle_event
+# define EVENT_MASK PointerMotionMask
# define screensaver_opts xlockmore_opts
#define DEFAULTS "*delay: 10000 \n" \
"*showFPS: False \n" \
#define countof(x) (sizeof((x))/sizeof((*x)))
#include "xpm-ximage.h"
+#include "rotator.h"
#define checkImageWidth 64
#define checkImageHeight 64
typedef struct {
int screen_width, screen_height;
GLXContext *glx_context;
+ rotator *rot;
+ Bool button_down_p;
+ int mouse_x, mouse_y;
Window window;
XColor fg, bg;
} screensaverstruct;
static GLfloat lightTwoColor[] = {0.99, 0.99, 0.99, 1.0};
float rot_x=0, rot_y=0, rot_z=0;
-static float dx=0, dy=0, dz=0;
-static float ddx=0, ddy=0, ddz=0;
-static float d_max = 0;
-static int screensaver_number;
+float lastx=0, lasty=0;
static float max_lastx=300, max_lasty=400;
static float min_lastx=-400, min_lasty=-400;
-static float d_lastx=0, d_lasty=0;
-static float dd_lastx=0, dd_lasty=0;
-static float max_dlastx=0, max_dlasty=0;
-float lastx=0, lasty=0;
+
+static int screensaver_number;
struct functions {
void (*InitStuff)(void);
}
-/* mostly lifted from lament.c */
-static void
-rotate (float *pos, float *v, float *dv, float max_v)
-{
- double ppos = *pos;
-
- /* tick position */
- if (ppos < 0)
- ppos = -(ppos + *v);
- else
- ppos += *v;
-
- if (ppos > 360)
- ppos -= 360;
- else if (ppos < 0)
- ppos += 360;
-
- if (ppos < 0) abort();
- if (ppos > 360) abort();
- *pos = (*pos > 0 ? ppos : -ppos);
-
- /* accelerate */
- *v += *dv;
-
- /* clamp velocity */
- if (*v > max_v || *v < -max_v)
- {
- *dv = -*dv;
- }
- /* If it stops, start it going in the other direction. */
- else if (*v < 0)
- {
- if (random() % 4)
- {
- *v = 0;
-
- /* keep going in the same direction */
- if (random() % 2)
- *dv = 0;
- else if (*dv < 0)
- *dv = -*dv;
- }
- else
- {
- /* reverse gears */
- *v = -*v;
- *dv = -*dv;
- *pos = -*pos;
- }
- }
-
- /* Alter direction of rotational acceleration randomly. */
- if (! (random() % 120))
- *dv = -*dv;
-
- /* Change acceleration very occasionally. */
- if (! (random() % 200))
- {
- if (*dv == 0)
- *dv = 0.00001;
- else if (random() & 1)
- *dv *= 1.2;
- else
- *dv *= 0.8;
- }
-}
-
-
-static void
-bounce (float *pos, float *v, float *dv, float max_v)
-{
- *pos += *v;
-
- if (*pos > 1.0)
- *pos = 1.0, *v = -*v, *dv = -*dv;
- else if (*pos < 0)
- *pos = 0, *v = -*v, *dv = -*dv;
-
- if (*pos < 0.0) abort();
- if (*pos > 1.0) abort();
-
- /* accelerate */
- *v += *dv;
-
- /* clamp velocity */
- if (*v > max_v || *v < -max_v)
- {
- *dv = -*dv;
- }
-
- /* Alter direction of rotational acceleration randomly. */
- if (! (random() % 120))
- *dv = -*dv;
-
- /* Change acceleration very occasionally. */
- if (! (random() % 200))
- {
- if (*dv == 0)
- *dv = 0.00001;
- else if (random() & 1)
- *dv *= 1.2;
- else
- *dv *= 0.8;
- }
-}
-
-
static void
-init_rotation (void)
+init_rotation (ModeInfo *mi)
{
- rot_x = (float) (random() % (360 * 2)) - 360; /* -360 - 360 */
- rot_y = (float) (random() % (360 * 2)) - 360;
- rot_z = (float) (random() % (360 * 2)) - 360;
-
- /* bell curve from 0-1.5 degrees, avg 0.75 */
- dx = (frand(1) + frand(1) + frand(1)) / 2.0;
- dy = (frand(1) + frand(1) + frand(1)) / 2.0;
- dz = (frand(1) + frand(1) + frand(1)) / 2.0;
-
- d_max = dx * 2;
-
- ddx = 0.004;
- ddy = 0.004;
- ddz = 0.004;
+ screensaverstruct *gp = &Screensaver[MI_SCREEN(mi)];
+ double spin_speed = 1.0;
+ gp->rot = make_rotator (spin_speed, spin_speed, spin_speed, 1.0, 0.0, True);
lastx = (random() % (int) (max_lastx - min_lastx)) + min_lastx;
lasty = (random() % (int) (max_lasty - min_lasty)) + min_lasty;
- d_lastx = (frand(1) + frand(1) + frand(1));
- d_lasty = (frand(1) + frand(1) + frand(1));
- max_dlastx = d_lastx * 2;
- max_dlasty = d_lasty * 2;
- dd_lastx = 0.004;
- dd_lasty = 0.004;
}
Display *display = MI_DISPLAY(mi);
Window window = MI_WINDOW(mi);
- Window root, child;
- int rootx, rooty, winx, winy;
- unsigned int mask;
- XEvent event;
-
if (!gp->glx_context)
return;
funcs_ptr[screensaver_number].DrawStuff();
- rotate(&rot_x, &dx, &ddx, d_max);
- rotate(&rot_y, &dy, &ddy, d_max);
- rotate(&rot_z, &dz, &ddz, d_max);
-
- /* swallow any ButtonPress events */
- while (XCheckMaskEvent (MI_DISPLAY(mi), ButtonPressMask, &event))
- ;
- /* check the pointer position and button state. */
- XQueryPointer (MI_DISPLAY(mi), MI_WINDOW(mi),
- &root, &child, &rootx, &rooty, &winx, &winy, &mask);
-
/* track the mouse only if a button is down. */
- if (mask & (Button1Mask|Button2Mask|Button3Mask|Button4Mask|Button5Mask))
+ if (gp->button_down_p)
{
- lastx = winx;
- lasty = winy;
+ lastx = gp->mouse_x;
+ lasty = gp->mouse_y;
}
else
{
float scale = (max_lastx - min_lastx);
- lastx -= min_lastx;
- lasty -= min_lasty;
- lastx /= scale;
- lasty /= scale;
- d_lastx /= scale;
- d_lasty /= scale;
- dd_lastx /= scale;
- dd_lasty /= scale;
- bounce(&lastx, &d_lastx, &dd_lastx, max_dlastx);
- bounce(&lasty, &d_lasty, &dd_lasty, max_dlasty);
- lastx *= scale;
- lasty *= scale;
- lastx += min_lastx;
- lasty += min_lasty;
- d_lastx *= scale;
- d_lasty *= scale;
- dd_lastx *= scale;
- dd_lasty *= scale;
+ double x, y, z;
+ get_rotation (gp->rot, &x, &y, &z, True);
+ rot_x = x * 360;
+ rot_y = y * 360;
+ rot_z = z * 360;
+ lastx = x * scale + min_lastx;
+ lasty = y * scale + min_lasty;
}
if (mi->fps_p) do_fps (mi);
/* decide which screensaver example to run */
-static void chooseScreensaverExample(void) {
+static void chooseScreensaverExample(ModeInfo *mi)
+{
int i;
/* call the extrusion init routine */
fprintf(stderr,"\t%s\n", funcs_ptr[i].name);
exit(1);
}
- init_rotation();
+ init_rotation(mi);
funcs_ptr[screensaver_number].InitStuff();
}
glClearColor(0,0,0,0);
/* glCullFace(GL_BACK); */
/* glEnable(GL_CULL_FACE); */
+ glLightModeli (GL_LIGHT_MODEL_TWO_SIDE, TRUE);
glShadeModel(GL_SMOOTH);
if (do_light)
}
+Bool
+screensaver_handle_event (ModeInfo *mi, XEvent *event)
+{
+ screensaverstruct *gp = &Screensaver[MI_SCREEN(mi)];
+
+ if (event->xany.type == ButtonPress &&
+ event->xbutton.button & Button1)
+ {
+ gp->button_down_p = True;
+ gp->mouse_x = event->xbutton.x;
+ gp->mouse_y = event->xbutton.y;
+ return True;
+ }
+ else if (event->xany.type == ButtonRelease &&
+ event->xbutton.button & Button1)
+ {
+ gp->button_down_p = False;
+ return True;
+ }
+ else if (event->xany.type == MotionNotify)
+ {
+ gp->mouse_x = event->xmotion.x;
+ gp->mouse_y = event->xmotion.y;
+ return True;
+ }
+
+ return False;
+}
+
+
+
/* xscreensaver initialization routine */
void init_screensaver(ModeInfo * mi)
{
if ((gp->glx_context = init_GL(mi)) != NULL) {
reshape_screensaver(mi, MI_WIDTH(mi), MI_HEIGHT(mi));
initializeGL(mi, MI_WIDTH(mi), MI_HEIGHT(mi));
- chooseScreensaverExample();
+ chooseScreensaverExample(mi);
} else {
MI_CLEARWINDOW(mi);
}
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+extrusion - various rotating extruded shapes.
+.SH SYNOPSIS
+.B extrusion
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+[\-name \fIwhich\fP]
+[\-no-light]
+[\-wire]
+[\-fps]
+.SH DESCRIPTION
+Draws various rotating extruded shapes that twist around, lengthen, and
+turn inside out.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.).
+.TP 8
+.B \-name \fIwhich\fP
+Which object to draw. Choices are: helix2, helix3, helix4, joinoffset,
+screw, taper, and twistoid.
+.TP 8
+.B \-light | \-no-light
+Whether to light the scene, or use flat coloring.
+.TP 8
+.B \-bitmap \fIfile\fP
+The texture map to use.
+.TP 8
+.B \-wire
+Render in wireframe instead of solid.
+.TP 8
+.B \-fps | \-no-fps
+Whether to show a frames-per-second display at the bottom of the screen.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Linas Vepstas and David Konerding. Permission
+to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided
+that the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation. No representations are made about the suitability of
+this software for any purpose. It is provided "as is" without express
+or implied warranty.
+.SH AUTHOR
+This screensaver was created by David Konerding from the samples that
+come with the GL Extrusion library by Linas Vepstas.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+flipscreen3d - rotates an image of the screen through 3 dimensions.
+.SH SYNOPSIS
+.B flipscreen3d
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+[\-no-rotate]
+[\-fps]
+.SH DESCRIPTION
+Grabs an image of the desktop, turns it into a GL texture map, and spins it
+around and deforms it in various ways.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 20000 (0.02 seconds.).
+.TP 8
+.B \-rotate | \-no-rotate
+Whether to rotate.
+.TP 8
+.B \-fps | \-no-fps
+Whether to show a frames-per-second display at the bottom of the screen.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Ben Buxton. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Ben Buxton.
L2++;
glCallLists (strlen(L2), GL_UNSIGNED_BYTE, L2);
glRasterPos2f (x, y + (fps_ascent + fps_descent));
- glCallLists (L2 - string, GL_UNSIGNED_BYTE, string);
+ glCallLists (L2 - string - 1, GL_UNSIGNED_BYTE, string);
}
else
{
strcat (msg, "\nPolys: ");
if (p >= 1000000)
- sprintf (msg + strlen(msg), "%d,%03d,%03d%s",
+ sprintf (msg + strlen(msg), "%lu,%03lu,%03lu%s",
(p / 1000000), ((p / 1000) % 1000), (p % 1000), s);
else if (p >= 1000)
- sprintf (msg + strlen(msg), "%d,%03d%s",
+ sprintf (msg + strlen(msg), "%lu,%03lu%s",
(p / 1000), (p % 1000), s);
else
- sprintf (msg + strlen(msg), "%d%s", p, s);
+ sprintf (msg + strlen(msg), "%lu%s", p, s);
}
}
# define HACK_INIT init_gears
# define HACK_DRAW draw_gears
# define HACK_RESHAPE reshape_gears
+# define HACK_HANDLE_EVENT gears_handle_event
+# define EVENT_MASK PointerMotionMask
# define gears_opts xlockmore_opts
# define DEFAULTS "*count: 1 \n" \
"*cycles: 2 \n" \
#ifdef USE_GL
+#include "rotator.h"
+#include "gltrackball.h"
+
#undef countof
#define countof(x) (sizeof((x))/sizeof((*x)))
typedef struct {
-
- GLfloat rotx, roty, rotz; /* current object rotation */
- GLfloat dx, dy, dz; /* current rotational velocity */
- GLfloat ddx, ddy, ddz; /* current rotational acceleration */
- GLfloat d_max; /* max velocity */
-
GLuint gear1, gear2, gear3;
GLuint gear_inner, gear_outer;
GLuint armature;
GLfloat angle;
GLXContext *glx_context;
Window window;
+ rotator *rot;
+ trackball_state *trackball;
+ Bool button_down_p;
} gearsstruct;
static gearsstruct *gears = NULL;
glPushMatrix();
+ gltrackball_rotate (gp->trackball);
+
{
- GLfloat x = gp->rotx;
- GLfloat y = gp->roty;
- GLfloat z = gp->rotz;
- if (x < 0) x = 1 - (x + 1);
- if (y < 0) y = 1 - (y + 1);
- if (z < 0) z = 1 - (z + 1);
- glRotatef(x * 360, 1.0, 0.0, 0.0);
- glRotatef(y * 360, 0.0, 1.0, 0.0);
- glRotatef(z * 360, 0.0, 0.0, 1.0);
+ double x, y, z;
+ get_rotation (gp->rot, &x, &y, &z, !gp->button_down_p);
+ glRotatef (x * 360, 1.0, 0.0, 0.0);
+ glRotatef (y * 360, 0.0, 1.0, 0.0);
+ glRotatef (z * 360, 0.0, 0.0, 1.0);
}
if (!planetary) {
}
-/* lifted from lament.c */
-#define RAND(n) ((long) ((random() & 0x7fffffff) % ((long) (n))))
-#define RANDSIGN() ((random() & 1) ? 1 : -1)
-
-static void
-rotate(GLfloat *pos, GLfloat *v, GLfloat *dv, GLfloat max_v)
+Bool
+gears_handle_event (ModeInfo *mi, XEvent *event)
{
- double ppos = *pos;
-
- /* tick position */
- if (ppos < 0)
- ppos = -(ppos + *v);
- else
- ppos += *v;
-
- if (ppos > 1.0)
- ppos -= 1.0;
- else if (ppos < 0)
- ppos += 1.0;
-
- if (ppos < 0) abort();
- if (ppos > 1.0) abort();
- *pos = (*pos > 0 ? ppos : -ppos);
+ gearsstruct *gp = &gears[MI_SCREEN(mi)];
- /* accelerate */
- *v += *dv;
-
- /* clamp velocity */
- if (*v > max_v || *v < -max_v)
+ if (event->xany.type == ButtonPress &&
+ event->xbutton.button & Button1)
{
- *dv = -*dv;
+ gp->button_down_p = True;
+ gltrackball_start (gp->trackball,
+ event->xbutton.x, event->xbutton.y,
+ MI_WIDTH (mi), MI_HEIGHT (mi));
+ return True;
}
- /* If it stops, start it going in the other direction. */
- else if (*v < 0)
+ else if (event->xany.type == ButtonRelease &&
+ event->xbutton.button & Button1)
{
- if (random() % 4)
- {
- *v = 0;
-
- /* keep going in the same direction */
- if (random() % 2)
- *dv = 0;
- else if (*dv < 0)
- *dv = -*dv;
- }
- else
- {
- /* reverse gears */
- *v = -*v;
- *dv = -*dv;
- *pos = -*pos;
- }
+ gp->button_down_p = False;
+ return True;
}
-
- /* Alter direction of rotational acceleration randomly. */
- if (! (random() % 120))
- *dv = -*dv;
-
- /* Change acceleration very occasionally. */
- if (! (random() % 200))
+ else if (event->xany.type == MotionNotify &&
+ gp->button_down_p)
{
- if (*dv == 0)
- *dv = 0.00001;
- else if (random() & 1)
- *dv *= 1.2;
- else
- *dv *= 0.8;
+ gltrackball_track (gp->trackball,
+ event->xmotion.x, event->xmotion.y,
+ MI_WIDTH (mi), MI_HEIGHT (mi));
+ return True;
}
+
+ return False;
}
gp->window = MI_WINDOW(mi);
- gp->rotx = frand(1.0) * RANDSIGN();
- gp->roty = frand(1.0) * RANDSIGN();
- gp->rotz = frand(1.0) * RANDSIGN();
-
- /* bell curve from 0-1.5 degrees, avg 0.75 */
- gp->dx = (frand(1) + frand(1) + frand(1)) / (360*2);
- gp->dy = (frand(1) + frand(1) + frand(1)) / (360*2);
- gp->dz = (frand(1) + frand(1) + frand(1)) / (360*2);
-
- gp->d_max = gp->dx * 2;
-
- gp->ddx = 0.00006 + frand(0.00003);
- gp->ddy = 0.00006 + frand(0.00003);
- gp->ddz = 0.00006 + frand(0.00003);
+ gp->rot = make_rotator (1, 1, 1, 1, 0, True);
+ gp->trackball = gltrackball_init ();
if ((gp->glx_context = init_GL(mi)) != NULL) {
reshape_gears(mi, MI_WIDTH(mi), MI_HEIGHT(mi));
/* let's do something so we don't get bored */
gp->angle = (int) (gp->angle + angle_incr) % 360;
- rotate(&gp->rotx, &gp->dx, &gp->ddx, gp->d_max);
- rotate(&gp->roty, &gp->dy, &gp->ddy, gp->d_max);
- rotate(&gp->rotz, &gp->dz, &gp->ddz, gp->d_max);
-
if (mi->fps_p) do_fps (mi);
glFinish();
glXSwapBuffers(display, window);
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+gears - draw interlocking gears, for xscreensaver.
+.SH SYNOPSIS
+.B gears
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[-delay \fInumber\fP]
+[-cycles \fInumber\fP]
+[-planetary]
+[-wireframe]
+[-fps]
+.SH DESCRIPTION
+This draws sets of turning, interlocking gears, rotating in three
+dimensions.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 20000 (0.02 seconds.).
+.TP 8
+.B \-cycles \fInumber\fP
+Rotational Speed. 1 - 30. Default: 2.
+.TP 8
+.B \-planetary
+Draw a planetary gear system, instead of three simple gears.
+.TP 8
+.B \-wireframe
+Render in wireframe instead of solid.
+.TP 8
+.B \-fps | \-no-fps
+Whether to show a frames-per-second display at the bottom of the screen.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Jamie Zawinski. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+By Danny Sung, Brian Paul, Ed Mackey, and Jamie Zawinski.
* 21 July 2000 : cleaned up code from bug hunts, manpage written
* 24 November 2000 : fixed x co-ord calculation in solid - textured
* 05 March 2001 : put back non pnmlib code with #ifdefs
+ * 11 May 2002 : fixed image problems with large images
*/
int real_height = gflux->modeinfo->xgwa.height;
XImage *ximage = screen_to_ximage (gflux->modeinfo->xgwa.screen,
gflux->window);
+ Bool bigimage = False;
+ int size = 0;
if (ximage->width > 1280 || /* that's too damned big... */
ximage->height > 1280)
{
Display *dpy = gflux->modeinfo->dpy;
Visual *v = gflux->modeinfo->xgwa.visual;
- int size = (ximage->width < ximage->height ?
- ximage->width : ximage->height);
int real_size = (ximage->width < ximage->height ?
real_width : real_height);
XImage *x2;
int x, y, xoff, yoff;
+ size = (ximage->width < ximage->height ?
+ ximage->width : ximage->height);
+ bigimage = True;
if (size > 1024) size = 1024;
/* Add a border. */
{
unsigned long gray = 0xAAAAAAAAL; /* so shoot me */
+ int width = (bigimage ? size : real_width);
+ int height = (bigimage ? size : real_height);
int i;
for (i = 0; i < real_height; i++)
{
XPutPixel (ximage, 0, i, gray);
- XPutPixel (ximage, real_width-1, i, gray);
+ XPutPixel (ximage, width-1, i, gray);
}
for (i = 0; i < real_width; i++)
{
XPutPixel (ximage, i, 0, gray);
- XPutPixel (ximage, i, real_height-1, gray);
+ XPutPixel (ximage, i, height-1, gray);
}
}
gflux->imageHeight = ximage->height;
gflux->image = ximage->data;
- gflux->tex_xscale = ((GLfloat) real_width / (GLfloat) ximage->width);
- gflux->tex_yscale = ((GLfloat) real_height / (GLfloat) ximage->height);
+ if (bigimage) /* don't scale really large images */
+ {
+ gflux->tex_xscale = 1;
+ gflux->tex_yscale = 1;
+ }
+ else
+ {
+ gflux->tex_xscale = ((GLfloat) real_width / (GLfloat) ximage->width);
+ gflux->tex_yscale = ((GLfloat) real_height / (GLfloat) ximage->height);
+ }
ximage->data = 0;
XDestroyImage (ximage);
# define HACK_INIT init_planet
# define HACK_DRAW draw_planet
# define HACK_RESHAPE reshape_planet
+# define HACK_HANDLE_EVENT planet_handle_event
+# define EVENT_MASK PointerMotionMask
# define planet_opts xlockmore_opts
#define DEFAULTS "*delay: 15000 \n" \
"*showFPS: False \n" \
#define DEF_TEXTURE "True"
#define DEF_STARS "True"
#define DEF_LIGHT "True"
+#define DEF_RESOLUTION "64"
#define DEF_IMAGE "BUILTIN"
#undef countof
static int do_stars;
static int do_light;
static char *which_image;
+static int resolution;
+
static XrmOptionDescRec opts[] = {
{"-rotate", ".glplanet.rotate", XrmoptionNoArg, (caddr_t) "true" },
{"+rotate", ".glplanet.rotate", XrmoptionNoArg, (caddr_t) "false" },
{"-light", ".glplanet.light", XrmoptionNoArg, (caddr_t) "true" },
{"+light", ".glplanet.light", XrmoptionNoArg, (caddr_t) "false" },
{"-image", ".glplanet.image", XrmoptionSepArg, (caddr_t) 0 },
+ {"-resolution", ".glplanet.resolution", XrmoptionSepArg, (caddr_t) 0 },
};
static argtype vars[] = {
{(caddr_t *) &do_stars, "stars", "Stars", DEF_STARS, t_Bool},
{(caddr_t *) &do_light, "light", "Light", DEF_LIGHT, t_Bool},
{(caddr_t *) &which_image, "image", "Image", DEF_IMAGE, t_String},
+ {(caddr_t *) &resolution, "resolution","Resolution", DEF_RESOLUTION, t_Int},
};
ModeSpecOpt planet_opts = {countof(opts), opts, countof(vars), vars, NULL};
#include "../images/earth.xpm"
#include "xpm-ximage.h"
+#include "rotator.h"
+#include "gltrackball.h"
/*-
*/
#define NUM_STARS 1000
-#define SLICES 32
-#define STACKS 32
/* radius of the sphere- fairly arbitrary */
#define RADIUS 4
int screen_width, screen_height;
GLXContext *glx_context;
Window window;
-
XColor fg, bg;
-
- GLfloat tx, ty, tz;
- GLfloat dtx, dty, dtz;
- GLfloat xpos, ypos, zpos;
- GLfloat dx, dy, dz;
- GLfloat box_width, box_height, box_depth;
-
GLfloat sunpos[4];
-
+ double z;
+ rotator *rot;
+ trackball_state *trackball;
+ Bool button_down_p;
} planetstruct;
{
XImage *image = xpm_to_ximage (MI_DISPLAY (mi), MI_VISUAL (mi),
MI_COLORMAP (mi), xpm_data);
+ char buf[1024];
clear_gl_error();
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
image->width, image->height, 0,
GL_RGBA, GL_UNSIGNED_BYTE, image->data);
- check_gl_error("texture");
+ sprintf (buf, "builtin texture (%dx%d)", image->width, image->height);
+ check_gl_error(buf);
/* setup parameters for texturing */
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
{
Display *dpy = mi->dpy;
Visual *visual = mi->xgwa.visual;
+ char buf[1024];
Colormap cmap = mi->xgwa.colormap;
XImage *image = xpm_file_to_ximage (dpy, visual, cmap, filename);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
image->width, image->height, 0,
GL_RGBA, GL_UNSIGNED_BYTE, image->data);
- check_gl_error("texture");
+ sprintf (buf, "texture: %.100s (%dx%d)",
+ filename, image->width, image->height);
+ check_gl_error(buf);
/* setup parameters for texturing */
glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
setup_file_texture (mi, which_image);
check_gl_error("texture initialization");
+
+ /* Need to flip the texture top for bottom for some reason. */
+ glMatrixMode (GL_TEXTURE);
+ glScalef (1, -1, 1);
+ glMatrixMode (GL_MODELVIEW);
}
{
planetstruct *gp = &planets[MI_SCREEN(mi)];
- GLfloat lamb[4] = { 0.0, 0.0, 0.0, 1.0 };
+ GLfloat lamb[4] = { 0.1, 0.1, 0.1, 1.0 };
GLfloat ldif[4] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat spec[4] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat mpec[4] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat shiny = .4;
- gp->sunpos[0] = 1.00 - frand(2.00);
- gp->sunpos[1] = 0.25 - frand(0.50);
- gp->sunpos[2] = -1.00;
- gp->sunpos[3] = 0.00;
+ {
+ double h = 0.1 + frand(0.8); /* east-west position - screen-side. */
+ double v = -0.3 + frand(0.6); /* north-south position */
+
+ if (h > 0.3 && h < 0.8) /* avoid having the sun at the camera */
+ h += (h > 0.5 ? 0.2 : -0.2);
+
+ gp->sunpos[0] = cos(h * M_PI);
+ gp->sunpos[1] = sin(h * M_PI);
+ gp->sunpos[2] = sin(v * M_PI);
+ gp->sunpos[3] = 0.00;
+ }
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
static void
pick_velocity (ModeInfo * mi)
{
+#if 0
planetstruct *gp = &planets[MI_SCREEN(mi)];
gp->box_width = 15.0;
gp->dx = (frand(0.2) + frand(0.2)) * RANDSIGN();
gp->dy = (frand(0.2) + frand(0.2)) * RANDSIGN();
gp->dz = (frand(0.2) + frand(0.2)) * RANDSIGN();
-}
-
-
-static void
-rotate_and_move (ModeInfo * mi)
-{
- planetstruct *gp = &planets[MI_SCREEN(mi)];
-
- if (do_roll)
- {
- gp->tx += gp->dtx;
- while (gp->tx < 0) gp->tx += 360;
- while (gp->tx > 360) gp->tx -= 360;
-
- gp->ty += gp->dty;
- while (gp->ty < 0) gp->ty += 360;
- while (gp->ty > 360) gp->ty -= 360;
- }
-
- if (do_rotate)
- {
- gp->tz += gp->dtz;
- while (gp->tz < 0) gp->tz += 360;
- while (gp->tz > 360) gp->tz -= 360;
- }
-
- if (do_wander)
- {
- static int frame = 0;
-# define SINOID(SCALE,SIZE) \
- ((((1 + sin((frame * (SCALE)) / 2 * M_PI)) / 2.0) * (SIZE)) - (SIZE)/2)
- gp->xpos = SINOID(0.031, gp->box_width);
- gp->ypos = SINOID(0.023, gp->box_height);
- gp->zpos = SINOID(0.017, gp->box_depth);
- frame++;
- }
+#endif
}
}
+Bool
+planet_handle_event (ModeInfo *mi, XEvent *event)
+{
+ planetstruct *gp = &planets[MI_SCREEN(mi)];
+
+ if (event->xany.type == ButtonPress &&
+ event->xbutton.button & Button1)
+ {
+ gp->button_down_p = True;
+ gltrackball_start (gp->trackball,
+ event->xbutton.x, event->xbutton.y,
+ MI_WIDTH (mi), MI_HEIGHT (mi));
+ return True;
+ }
+ else if (event->xany.type == ButtonRelease &&
+ event->xbutton.button & Button1)
+ {
+ gp->button_down_p = False;
+ return True;
+ }
+ else if (event->xany.type == MotionNotify &&
+ gp->button_down_p)
+ {
+ gltrackball_track (gp->trackball,
+ event->xmotion.x, event->xmotion.y,
+ MI_WIDTH (mi), MI_HEIGHT (mi));
+ return True;
+ }
+
+ return False;
+}
+
+
void
init_planet (ModeInfo * mi)
{
free (b);
}
+ {
+ double spin_speed = 1.0;
+ double wander_speed = 0.05;
+ gp->rot = make_rotator (do_roll ? spin_speed : 0,
+ do_roll ? spin_speed : 0,
+ 0, 1,
+ do_wander ? wander_speed : 0,
+ True);
+ gp->z = frand (1.0);
+ gp->trackball = gltrackball_init ();
+ }
+
if (wire)
{
do_texture = False;
glColor3f (1,1,1);
glPushMatrix ();
glScalef (RADIUS, RADIUS, RADIUS);
- unit_sphere (STACKS, SLICES, wire);
+ glRotatef (90, 1, 0, 0);
+ unit_sphere (resolution, resolution, wire);
+ mi->polygon_count += resolution*resolution;
+#if 0
+ if (!wire)
+ {
+ glDisable(GL_LIGHTING);
+ glScalef(1.01,1.01,1.01);
+ unit_sphere (12, 24, 1);
+ glEnable(GL_LIGHTING);
+ }
+#endif
glPopMatrix ();
glEndList();
}
planetstruct *gp = &planets[MI_SCREEN(mi)];
Display *display = MI_DISPLAY(mi);
Window window = MI_WINDOW(mi);
+ double x, y, z;
if (!gp->glx_context)
return;
draw_stars (mi);
glPushMatrix();
+
+ get_position (gp->rot, &x, &y, &z, !gp->button_down_p);
+ glTranslatef((x - 0.5) * 15,
+ (y - 0.5) * 15,
+ (z - 0.5) * 8);
+
+ gltrackball_rotate (gp->trackball);
+
glRotatef (90,1,0,0);
- glTranslatef (gp->xpos, gp->ypos, gp->zpos);
- glRotatef (gp->tx, 1, 0, 0);
- glRotatef (gp->ty, 0, 1, 0);
- glRotatef (gp->tz, 0, 0, 1);
+ if (do_roll)
+ {
+ get_rotation (gp->rot, &x, &y, 0, !gp->button_down_p);
+ glRotatef (x * 360, 1.0, 0.0, 0.0);
+ glRotatef (y * 360, 0.0, 1.0, 0.0);
+ }
glLightfv (GL_LIGHT0, GL_POSITION, gp->sunpos);
+ glRotatef (gp->z * 360, 0.0, 0.0, 1.0);
+ if (do_rotate && !gp->button_down_p)
+ {
+ gp->z += 0.01;
+ if (gp->z > 1) gp->z -= 1;
+ }
+
glCallList (gp->platelist);
glPopMatrix();
if (mi->fps_p) do_fps (mi);
glFinish();
glXSwapBuffers(display, window);
-
- rotate_and_move (mi);
}
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+glplanet - rotating 3d texture-mapped planet.
+.SH SYNOPSIS
+.B glplanet
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-no-light]
+[\-delay \fInumber\fP]
+[\-bitmap \fIfile\fP]
+[\-wireframe]
+[\-fps]
+.SH DESCRIPTION
+Draws a planet bouncing around in space. The built-in image is a map
+of the earth, but you can wrap any texture around the sphere, e.g., the
+planetary textures that come with `ssystem'.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-light | \-no-light
+Use Flat Coloring.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 15000 (0.01 seconds.).
+.TP 8
+.B \-bitmap \fIfile\fP
+The texture map to wrap around the planet's surface.
+.TP 8
+.B \-wireframe
+Render in wireframe instead of solid.
+.TP 8
+.B \-fps | \-no-fps
+Whether to show a frames-per-second display at the bottom of the screen.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by David Konerding. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+David Konerding.
-/* gltext, Copyright (c) 2001 Jamie Zawinski <jwz@jwz.org>
+/* gltext, Copyright (c) 2001, 2002 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
#define HACK_INIT init_text
#define HACK_DRAW draw_text
#define HACK_RESHAPE reshape_text
+#define HACK_HANDLE_EVENT text_handle_event
+#define EVENT_MASK PointerMotionMask
#define sws_opts xlockmore_opts
#define DEF_TEXT "(default)"
#include "xlockmore.h"
#include "colors.h"
#include "tube.h"
+#include "rotator.h"
+#include "gltrackball.h"
+#include <time.h>
+#include <sys/time.h>
#include <ctype.h>
#ifdef USE_GL /* whole file */
typedef struct {
GLXContext *glx_context;
-
- GLfloat rotx, roty, rotz; /* current object rotation */
- GLfloat dx, dy, dz; /* current rotational velocity */
- GLfloat ddx, ddy, ddz; /* current rotational acceleration */
- GLfloat d_max; /* max velocity */
+ rotator *rot;
+ trackball_state *trackball;
+ Bool button_down_p;
GLuint text_list;
XColor *colors;
int ccolor;
- Bool spin_x, spin_y, spin_z;
char *text;
} text_configuration;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
+ gluPerspective (30.0, 1/h, 1.0, 100.0);
- gluPerspective( 30.0, 1/h, 1.0, 100.0 );
- gluLookAt( 0.0, 0.0, 15.0,
- 0.0, 0.0, 0.0,
- 0.0, 1.0, 0.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
- glTranslatef(0.0, 0.0, -15.0);
+ gluLookAt( 0.0, 0.0, 30.0,
+ 0.0, 0.0, 0.0,
+ 0.0, 1.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
}
}
-/* lifted from lament.c */
-#define RAND(n) ((long) ((random() & 0x7fffffff) % ((long) (n))))
-#define RANDSIGN() ((random() & 1) ? 1 : -1)
-
-static void
-rotate(GLfloat *pos, GLfloat *v, GLfloat *dv, GLfloat max_v)
-{
- double ppos = *pos;
-
- /* tick position */
- if (ppos < 0)
- ppos = -(ppos + *v);
- else
- ppos += *v;
-
- if (ppos > 1.0)
- ppos -= 1.0;
- else if (ppos < 0)
- ppos += 1.0;
-
- if (ppos < 0) abort();
- if (ppos > 1.0) abort();
- *pos = (*pos > 0 ? ppos : -ppos);
-
- /* accelerate */
- *v += *dv;
-
- /* clamp velocity */
- if (*v > max_v || *v < -max_v)
- {
- *dv = -*dv;
- }
- /* If it stops, start it going in the other direction. */
- else if (*v < 0)
- {
- if (random() % 4)
- {
- *v = 0;
-
- /* keep going in the same direction */
- if (random() % 2)
- *dv = 0;
- else if (*dv < 0)
- *dv = -*dv;
- }
- else
- {
- /* reverse gears */
- *v = -*v;
- *dv = -*dv;
- *pos = -*pos;
- }
- }
-
- /* Alter direction of rotational acceleration randomly. */
- if (! (random() % 120))
- *dv = -*dv;
-
- /* Change acceleration very occasionally. */
- if (! (random() % 200))
- {
- if (*dv == 0)
- *dv = 0.00001;
- else if (random() & 1)
- *dv *= 1.2;
- else
- *dv *= 0.8;
- }
-}
-
-
static void
parse_text (ModeInfo *mi)
{
}
+Bool
+text_handle_event (ModeInfo *mi, XEvent *event)
+{
+ text_configuration *tp = &tps[MI_SCREEN(mi)];
+
+ if (event->xany.type == ButtonPress &&
+ event->xbutton.button & Button1)
+ {
+ tp->button_down_p = True;
+ gltrackball_start (tp->trackball,
+ event->xbutton.x, event->xbutton.y,
+ MI_WIDTH (mi), MI_HEIGHT (mi));
+ return True;
+ }
+ else if (event->xany.type == ButtonRelease &&
+ event->xbutton.button & Button1)
+ {
+ tp->button_down_p = False;
+ return True;
+ }
+ else if (event->xany.type == MotionNotify &&
+ tp->button_down_p)
+ {
+ gltrackball_track (tp->trackball,
+ event->xmotion.x, event->xmotion.y,
+ MI_WIDTH (mi), MI_HEIGHT (mi));
+ return True;
+ }
+
+ return False;
+}
+
+
void
init_text (ModeInfo *mi)
{
text_configuration *tp;
+ int i;
if (!tps) {
tps = (text_configuration *)
reshape_text (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
}
- tp->rotx = frand(1.0) * RANDSIGN();
- tp->roty = frand(1.0) * RANDSIGN();
- tp->rotz = frand(1.0) * RANDSIGN();
-
- /* bell curve from 0-6 degrees, avg 3 */
- tp->dx = (frand(1) + frand(1) + frand(1)) / (360/2);
- tp->dy = (frand(1) + frand(1) + frand(1)) / (360/2);
- tp->dz = (frand(1) + frand(1) + frand(1)) / (360/2);
-
- tp->d_max = tp->dx * 2;
-
- tp->ddx = 0.00006 + frand(0.00003);
- tp->ddy = 0.00006 + frand(0.00003);
- tp->ddz = 0.00006 + frand(0.00003);
-
+ {
+ double spin_speed = 1.0;
+ double wander_speed = 0.05;
+ double spin_accel = 1.0;
+
+ tp->rot = make_rotator (do_spin ? spin_speed : 0,
+ do_spin ? spin_speed : 0,
+ do_spin ? spin_speed : 0,
+ spin_accel,
+ do_wander ? wander_speed : 0,
+ True);
+ tp->trackball = gltrackball_init ();
+ }
tp->ncolors = 255;
tp->colors = (XColor *) calloc(tp->ncolors, sizeof(XColor));
tp->colors, &tp->ncolors,
False, 0, False);
- parse_text (mi);
+ /* brighter colors, please... */
+ for (i = 0; i < tp->ncolors; i++)
+ {
+ tp->colors[i].red = (tp->colors[i].red / 2) + 32767;
+ tp->colors[i].green = (tp->colors[i].green / 2) + 32767;
+ tp->colors[i].blue = (tp->colors[i].blue / 2) + 32767;
+ }
- {
- char *s = do_spin;
- while (*s)
- {
- if (*s == 'x' || *s == 'X') tp->spin_x = 1;
- else if (*s == 'y' || *s == 'Y') tp->spin_y = 1;
- else if (*s == 'z' || *s == 'Z') tp->spin_z = 1;
- else
- {
- fprintf (stderr,
- "%s: spin must contain only the characters X, Y, or Z (not \"%s\")\n",
- progname, do_spin);
- exit (1);
- }
- s++;
- }
- }
+ parse_text (mi);
}
glScalef(1.1, 1.1, 1.1);
{
- GLfloat x, y, z;
-
- if (do_wander)
- {
- static int frame = 0;
-
-# define SINOID(SCALE,SIZE) \
- ((((1 + sin((frame * (SCALE)) / 2 * M_PI)) / 2.0) * (SIZE)) - (SIZE)/2)
-
- x = SINOID(0.031, 9.0);
- y = SINOID(0.023, 9.0);
- z = SINOID(0.017, 9.0);
- frame++;
- glTranslatef(x, y, z);
- }
-
- if (tp->spin_x || tp->spin_y || tp->spin_z)
- {
- x = tp->rotx;
- y = tp->roty;
- z = tp->rotz;
- if (x < 0) x = 1 - (x + 1);
- if (y < 0) y = 1 - (y + 1);
- if (z < 0) z = 1 - (z + 1);
-
- if (tp->spin_x) glRotatef(x * 360, 1.0, 0.0, 0.0);
- if (tp->spin_y) glRotatef(y * 360, 0.0, 1.0, 0.0);
- if (tp->spin_z) glRotatef(z * 360, 0.0, 0.0, 1.0);
-
- rotate(&tp->rotx, &tp->dx, &tp->ddx, tp->d_max);
- rotate(&tp->roty, &tp->dy, &tp->ddy, tp->d_max);
- rotate(&tp->rotz, &tp->dz, &tp->ddz, tp->d_max);
- }
+ double x, y, z;
+ get_position (tp->rot, &x, &y, &z, !tp->button_down_p);
+ glTranslatef((x - 0.5) * 8,
+ (y - 0.5) * 8,
+ (z - 0.5) * 8);
+
+ gltrackball_rotate (tp->trackball);
+
+ get_rotation (tp->rot, &x, &y, &z, !tp->button_down_p);
+ glRotatef (x * 360, 1.0, 0.0, 0.0);
+ glRotatef (y * 360, 0.0, 1.0, 0.0);
+ glRotatef (z * 360, 0.0, 0.0, 1.0);
}
+
glColor4fv (white);
color[0] = tp->colors[tp->ccolor].red / 65536.0;
--- /dev/null
+/* gltrackball, Copyright (c) 2002 Jamie Zawinski <jwz@jwz.org>
+ * GL-flavored wrapper for trackball.c
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation. No representations are made about the suitability of this
+ * software for any purpose. It is provided "as is" without express or
+ * implied warranty.
+ */
+
+#include "config.h"
+#include <stdlib.h>
+#include <math.h>
+#include <GL/gl.h>
+#include "trackball.h"
+#include "gltrackball.h"
+
+struct trackball_state {
+ int x, y;
+ GLfloat q[4];
+};
+
+/* Returns a trackball_state object, which encapsulates the stuff necessary
+ to make dragging the mouse on the window of a GL program do the right thing.
+ */
+trackball_state *
+gltrackball_init (void)
+{
+ trackball_state *ts = (trackball_state *) calloc (1, sizeof (*ts));
+ if (!ts) return 0;
+ trackball (ts->q, 0, 0, 0, 0);
+ return ts;
+}
+
+/* Begin tracking the mouse: Call this when the mouse button goes down.
+ x and y are the mouse position relative to the window.
+ w and h are the size of the window.
+ */
+void
+gltrackball_start (trackball_state *ts, int x, int y, int w, int h)
+{
+ ts->x = x;
+ ts->y = y;
+}
+
+/* Track the mouse: Call this each time the mouse moves with the button down.
+ x and y are the new mouse position relative to the window.
+ w and h are the size of the window.
+ */
+void
+gltrackball_track (trackball_state *ts, int x, int y, int w, int h)
+{
+ float q2[4];
+ trackball (q2,
+ (2.0 * ts->x - w) / w,
+ (h - 2.0 * ts->y) / h,
+ (2.0 * x - w) / w,
+ (h - 2.0 * y) / h);
+ ts->x = x;
+ ts->y = y;
+ add_quats (q2, ts->q, ts->q);
+}
+
+/* Execute the rotations current encapsulated in the trackball_state:
+ this does something analagous to glRotatef().
+ */
+void
+gltrackball_rotate (trackball_state *ts)
+{
+ GLfloat m[4][4];
+ build_rotmatrix (m, ts->q);
+ glMultMatrixf (&m[0][0]);
+}
--- /dev/null
+/* gltrackball, Copyright (c) 2002 Jamie Zawinski <jwz@jwz.org>
+ * GL-flavored wrapper for trackball.c
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation. No representations are made about the suitability of this
+ * software for any purpose. It is provided "as is" without express or
+ * implied warranty.
+ */
+
+#ifndef __GLTRACKBALL_H__
+#define __GLTRACKBALL_H__
+
+typedef struct trackball_state trackball_state;
+
+/* Returns a trackball_state object, which encapsulates the stuff necessary
+ to make dragging the mouse on the window of a GL program do the right thing.
+ */
+extern trackball_state *gltrackball_init (void);
+
+/* Begin tracking the mouse: Call this when the mouse button goes down.
+ x and y are the mouse position relative to the window.
+ w and h are the size of the window.
+ */
+extern void gltrackball_start (trackball_state *, int x, int y, int w, int h);
+
+/* Track the mouse: Call this each time the mouse moves with the button down.
+ x and y are the new mouse position relative to the window.
+ w and h are the size of the window.
+ */
+extern void gltrackball_track (trackball_state *, int x, int y, int w, int h);
+
+/* Execute the rotations current encapsulated in the trackball_state:
+ this does something analagous to glRotatef().
+ */
+extern void gltrackball_rotate (trackball_state *);
+
+#endif /* __GLTRACKBALL_H__ */
+
* Needs music. ("Hellraiser Themes" by Coil: TORSO CD161; also
duplicated on the "Unnatural History 2" compilation, WORLN M04699.)
-
- * I'm not totally happy with the spinning motion; I like the
- acceleration and deceleration, but it often feels like it's going too
- fast, or not naturally enough, or something.
-
- * However, the motion is better than that used by gears, superquadrics,
- etc.; so maybe I should make them all share the same motion code.
*/
#include <X11/Intrinsic.h>
#define HACK_INIT init_lament
#define HACK_DRAW draw_lament
#define HACK_RESHAPE reshape_lament
+#define HACK_HANDLE_EVENT lament_handle_event
+#define EVENT_MASK PointerMotionMask
#define lament_opts xlockmore_opts
#define DEFAULTS "*delay: 10000 \n" \
"*showFPS: False \n" \
ModeSpecOpt lament_opts = {countof(opts), opts, countof(vars), vars, NULL};
#include "xpm-ximage.h"
-
+#include "rotator.h"
+#include "gltrackball.h"
#include "../images/lament.xpm"
#define RAND(n) ((long) ((random() & 0x7fffffff) % ((long) (n))))
typedef struct {
GLXContext *glx_context;
+ rotator *rot;
+ double rotx, roty, rotz;
+ trackball_state *trackball;
+ Bool button_down_p;
GLuint box; /* display list IDs */
GLuint star1, star2;
GLuint lid_0, lid_1, lid_2, lid_3, lid_4;
GLuint taser_base, taser_lifter, taser_slider;
- GLfloat rotx, roty, rotz; /* current object rotation */
- GLfloat dx, dy, dz; /* current rotational velocity */
- GLfloat ddx, ddy, ddz; /* current rotational acceleration */
- GLfloat d_max; /* max velocity */
XImage *texture; /* image bits */
GLuint texids[6]; /* texture map IDs */
lament_type type; /* which mode of the object is current */
/* Rendering and animating object models
*/
+Bool
+lament_handle_event (ModeInfo *mi, XEvent *event)
+{
+ lament_configuration *lc = &lcs[MI_SCREEN(mi)];
+
+ if (event->xany.type == ButtonPress &&
+ event->xbutton.button & Button1)
+ {
+ lc->button_down_p = True;
+ gltrackball_start (lc->trackball,
+ event->xbutton.x, event->xbutton.y,
+ MI_WIDTH (mi), MI_HEIGHT (mi));
+ return True;
+ }
+ else if (event->xany.type == ButtonRelease &&
+ event->xbutton.button & Button1)
+ {
+ lc->button_down_p = False;
+ return True;
+ }
+ else if (event->xany.type == MotionNotify &&
+ lc->button_down_p)
+ {
+ gltrackball_track (lc->trackball,
+ event->xmotion.x, event->xmotion.y,
+ MI_WIDTH (mi), MI_HEIGHT (mi));
+ return True;
+ }
+
+ return False;
+}
+
+
static void
draw(ModeInfo *mi)
{
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
- {
- GLfloat x = lc->rotx;
- GLfloat y = lc->roty;
- GLfloat z = lc->rotz;
-
-#if 0
- x=0.75; y=0; z=0;
-#endif
- if (x < 0) x = 1 - (x + 1);
- if (y < 0) y = 1 - (y + 1);
- if (z < 0) z = 1 - (z + 1);
+ gltrackball_rotate (lc->trackball);
- /* Make into the screen be +Y right be +X, and up be +Z. */
- glRotatef(-90.0, 1.0, 0.0, 0.0);
+ /* Make into the screen be +Y right be +X, and up be +Z. */
+ glRotatef(-90.0, 1.0, 0.0, 0.0);
- /* Scale it up. */
- glScalef(4.0, 4.0, 4.0);
+ /* Scale it up. */
+ glScalef(4.0, 4.0, 4.0);
#ifdef DEBUG
glPushMatrix();
glPushMatrix();
{
/* Apply rotation to the object. */
- glRotatef(x * 360, 1.0, 0.0, 0.0);
- glRotatef(y * 360, 0.0, 1.0, 0.0);
- glRotatef(z * 360, 0.0, 0.0, 1.0);
+ if (lc->type != LAMENT_LID_ZOOM)
+ get_rotation (lc->rot, &lc->rotx, &lc->roty, &lc->rotz,
+ !lc->button_down_p);
+ glRotatef (lc->rotx * 360, 1.0, 0.0, 0.0);
+ glRotatef (lc->roty * 360, 0.0, 1.0, 0.0);
+ glRotatef (lc->rotz * 360, 0.0, 0.0, 1.0);
switch (lc->type)
{
}
glPopMatrix();
- }
glPopMatrix();
}
{
lc->anim_r = 0.0;
lc->anim_z = 0.0;
- lc->rotx = frand(1.0) * RANDSIGN();
- lc->roty = frand(1.0) * RANDSIGN();
- lc->rotz = frand(1.0) * RANDSIGN();
lc->type = LAMENT_BOX;
}
break;
}
-static void
-rotate(GLfloat *pos, GLfloat *v, GLfloat *dv, GLfloat max_v)
-{
- double ppos = *pos;
-
- /* tick position */
- if (ppos < 0)
- ppos = -(ppos + *v);
- else
- ppos += *v;
-
- if (ppos > 1.0)
- ppos -= 1.0;
- else if (ppos < 0)
- ppos += 1.0;
-
- if (ppos < 0) abort();
- if (ppos > 1.0) abort();
- *pos = (*pos > 0 ? ppos : -ppos);
-
- /* accelerate */
- *v += *dv;
-
- /* clamp velocity */
- if (*v > max_v || *v < -max_v)
- {
- *dv = -*dv;
- }
- /* If it stops, start it going in the other direction. */
- else if (*v < 0)
- {
- if (random() % 4)
- {
- *v = 0;
-
- /* keep going in the same direction */
- if (random() % 2)
- *dv = 0;
- else if (*dv < 0)
- *dv = -*dv;
- }
- else
- {
- /* reverse gears */
- *v = -*v;
- *dv = -*dv;
- *pos = -*pos;
- }
- }
-
- /* Alter direction of rotational acceleration randomly. */
- if (! (random() % 120))
- *dv = -*dv;
-
- /* Change acceleration very occasionally. */
- if (! (random() % 200))
- {
- if (*dv == 0)
- *dv = 0.00001;
- else if (random() & 1)
- *dv *= 1.2;
- else
- *dv *= 0.8;
- }
-}
-
-
\f
/* Window management, etc
*/
lc = &lcs[MI_SCREEN(mi)];
- lc->rotx = frand(1.0) * RANDSIGN();
- lc->roty = frand(1.0) * RANDSIGN();
- lc->rotz = frand(1.0) * RANDSIGN();
-
- /* bell curve from 0-1.5 degrees, avg 0.75 */
- lc->dx = (frand(1) + frand(1) + frand(1)) / (360*2);
- lc->dy = (frand(1) + frand(1) + frand(1)) / (360*2);
- lc->dz = (frand(1) + frand(1) + frand(1)) / (360*2);
-
- lc->d_max = lc->dx * 2;
-
- lc->ddx = 0.00006 + frand(0.00003);
- lc->ddy = 0.00006 + frand(0.00003);
- lc->ddz = 0.00006 + frand(0.00003);
+ {
+ double rot_speed = 0.5;
+ lc->rot = make_rotator (rot_speed, rot_speed, rot_speed, 1, 0, True);
+ lc->trackball = gltrackball_init ();
+ }
lc->type = LAMENT_BOX;
lc->anim_pause = 300 + (random() % 100);
glFinish();
glXSwapBuffers(dpy, window);
- if (lc->type != LAMENT_LID_ZOOM)
- {
- rotate(&lc->rotx, &lc->dx, &lc->ddx, lc->d_max);
- rotate(&lc->roty, &lc->dy, &lc->ddy, lc->d_max);
- rotate(&lc->rotz, &lc->dz, &lc->ddz, lc->d_max);
- }
-
if (lc->anim_pause)
lc->anim_pause--;
else
--- /dev/null
+/* lavalite --- 3D Simulation a Lava Lite, written by jwz.
+ *
+ * This software Copyright (c) 2002 Jamie Zawinski <jwz@jwz.org>
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation. No representations are made about the suitability of this
+ * software for any purpose. It is provided "as is" without express or
+ * implied warranty.
+ *
+ * LAVA®, LAVA LITE®, LAVA WORLD INTERNATIONAL® and the configuration of the
+ * LAVA® brand motion lamp are registered trademarks of Haggerty Enterprises,
+ * Inc. The configuration of the globe and base of the motion lamp are
+ * registered trademarks of Haggerty Enterprises, Inc. in the U.S.A. and in
+ * other countries around the world.
+ *
+ * Official Lava Lite web site: http://www.lavaworld.com/
+ *
+ * Implementation details:
+ *
+ * The blobs are generated using metaballs. For an explanation of what
+ * those are, see http://astronomy.swin.edu.au/~pbourke/modelling/implicitsurf/
+ * or http://www.fifi.org/doc/povray-manual/pov30005.htm
+ *
+ * Basically, each bubble of lava is a few (4) overlapping spherical metaballs
+ * of various sizes following similar but slightly different steep, slow
+ * parabolic arcs from the bottom to the top and back.
+ *
+ * We then polygonize the surface of the lava using the marching squares
+ * algorithm implemented in marching.c.
+ *
+ * Like real lavalites, this program is very slow.
+ *
+ * Surprisingly, it's loading the CPU and not the graphics engine: the speed
+ * bottleneck is in *computing* the scene rather than *rendering* it. We
+ * actually don't use a huge number of polygons, but computing the mesh for
+ * the surface takes a lot of cycles.
+ *
+ * I eliminated all the square roots, but there is still a lot of
+ * floating-point multiplication in here. I tried optimizing away the
+ * fp divisions, but that didn't seem to make a difference.
+ *
+ * -style lamp shape: classic, giant, cone, rocket, or random.
+ * -speed frequency at which new blobs launch.
+ * -resolution density of the polygon mesh.
+ * -count max number of blobs allowed at once.
+ * -wander, -spin whether to roll the scene around the screen.
+ * -lava-color color of the blobbies
+ * -fluid-color color of the stuff the blobbies float in
+ * -base-color color of the base of the lamp
+ * -table-color color of the table under the lamp
+ * -impatient at startup, skip forward in the animation so
+ * that at least one blob is fully exposed.
+ *
+ * TODO:
+ *
+ * - make the table look better, somehow.
+ * - should the lava be emissive? should the one at the bottom be
+ * more brightly colored than the ones at the top? light distance?
+ * - is there some way to put a specular reflection on the front glass
+ * itself? Maybe render it twice with FRONT/BACK tweaked, or alpha
+ * with depth buffering turned off?
+ */
+
+#include <X11/Intrinsic.h>
+
+extern XtAppContext app;
+
+#define PROGCLASS "LavaLite"
+#define HACK_INIT init_lavalite
+#define HACK_DRAW draw_lavalite
+#define HACK_RESHAPE reshape_lavalite
+#define HACK_HANDLE_EVENT lavalite_handle_event
+#define EVENT_MASK PointerMotionMask
+#define sws_opts xlockmore_opts
+
+#define DEF_SPIN "Z"
+#define DEF_WANDER "False"
+#define DEF_SPEED "0.003"
+#define DEF_RESOLUTION "40"
+#define DEF_SMOOTH "True"
+#define DEF_COUNT "3"
+#define DEF_STYLE "random"
+#define DEF_IMPATIENT "False"
+#define DEF_LCOLOR "#FF0000" /* lava */
+#define DEF_FCOLOR "#00AAFF" /* fluid */
+#define DEF_BCOLOR "#666666" /* base */
+#define DEF_TCOLOR "#000000" /*"#00FF00"*/ /* table */
+
+#define DEF_FTEX "(none)"
+#define DEF_BTEX "(none)"
+#define DEF_TTEX "(none)"
+
+#define DEFAULTS "*delay: 10000 \n" \
+ "*showFPS: False \n" \
+ "*wireframe: False \n" \
+ "*count: " DEF_COUNT " \n" \
+ "*style: " DEF_STYLE " \n" \
+ "*speed: " DEF_SPEED " \n" \
+ "*spin: " DEF_SPIN "\n" \
+ "*wander: " DEF_WANDER "\n" \
+ "*resolution: " DEF_RESOLUTION "\n" \
+ "*smooth: " DEF_SMOOTH "\n" \
+ "*impatient: " DEF_IMPATIENT " \n" \
+ "*geometry: 600x900\n" \
+ "*lavaColor: " DEF_LCOLOR "\n" \
+ "*fluidColor: " DEF_FCOLOR "\n" \
+ "*baseColor: " DEF_BCOLOR "\n" \
+ "*tableColor: " DEF_TCOLOR "\n" \
+ "*fluidTexture: " DEF_FTEX "\n" \
+ "*baseTexture: " DEF_BTEX "\n" \
+ "*tableTexture: " DEF_TTEX "\n" \
+
+
+#define BLOBS_PER_GROUP 4
+
+#define GRAVITY 0.000013 /* odwnward acceleration */
+#define CONVECTION 0.005 /* initial upward velocity (bell curve) */
+#define TILT 0.00166666 /* horizontal velocity (bell curve) */
+
+#undef countof
+#define countof(x) (sizeof((x))/sizeof((*x)))
+
+#undef ABS
+#define ABS(n) ((n)<0?-(n):(n))
+#undef SIGNOF
+#define SIGNOF(n) ((n)<0?-1:1)
+
+#include "xlockmore.h"
+#include "marching.h"
+#include "rotator.h"
+#include "gltrackball.h"
+#include "xpm-ximage.h"
+#include <ctype.h>
+
+#ifdef USE_GL /* whole file */
+
+#include <GL/glu.h>
+
+
+typedef struct metaball metaball;
+
+struct metaball {
+
+ Bool alive_p;
+ Bool static_p;
+
+ double r; /* hard radius */
+ double R; /* radius of field of influence */
+
+ double z; /* vertical position */
+ double pos_r; /* position on horizontal circle */
+ double pos_th; /* position on horizontal circle */
+ double dr, dz; /* current velocity */
+
+ double x, y; /* h planar position - compused from the above */
+
+ metaball *leader; /* stay close to this other ball */
+};
+
+
+typedef enum { CLASSIC = 0, GIANT, CONE, ROCKET } lamp_style;
+typedef enum { CAP = 100, BOTTLE, BASE } lamp_part;
+
+typedef struct {
+ lamp_part part;
+ GLfloat elevation;
+ GLfloat radius;
+ GLfloat texture_elevation;
+} lamp_geometry;
+
+static lamp_geometry classic_lamp[] = {
+ { CAP, 1.16, 0.089, 0.00 },
+ { BOTTLE, 0.97, 0.120, 0.40 },
+ { BOTTLE, 0.13, 0.300, 0.87 },
+ { BOTTLE, 0.07, 0.300, 0.93 },
+ { BASE, 0.00, 0.280, 0.00 },
+ { BASE, -0.40, 0.120, 0.50 },
+ { BASE, -0.80, 0.280, 1.00 },
+ { 0, 0, 0, 0 },
+};
+
+static lamp_geometry giant_lamp[] = {
+ { CAP, 1.12, 0.105, 0.00 },
+ { BOTTLE, 0.97, 0.130, 0.30 },
+ { BOTTLE, 0.20, 0.300, 0.87 },
+ { BOTTLE, 0.15, 0.300, 0.93 },
+ { BASE, 0.00, 0.230, 0.00 },
+ { BASE, -0.18, 0.140, 0.20 },
+ { BASE, -0.80, 0.280, 1.00 },
+ { 0, 0, 0, 0 },
+};
+
+static lamp_geometry cone_lamp[] = {
+ { CAP, 1.35, 0.001, 0.00 },
+ { CAP, 1.35, 0.020, 0.00 },
+ { CAP, 1.30, 0.055, 0.05 },
+ { BOTTLE, 0.97, 0.120, 0.40 },
+ { BOTTLE, 0.13, 0.300, 0.87 },
+ { BASE, 0.00, 0.300, 0.00 },
+ { BASE, -0.04, 0.320, 0.04 },
+ { BASE, -0.60, 0.420, 0.50 },
+ { 0, 0, 0, 0 },
+};
+
+static lamp_geometry rocket_lamp[] = {
+ { CAP, 1.35, 0.001, 0.00 },
+ { CAP, 1.34, 0.020, 0.00 },
+ { CAP, 1.30, 0.055, 0.05 },
+ { BOTTLE, 0.97, 0.120, 0.40 },
+ { BOTTLE, 0.13, 0.300, 0.87 },
+ { BOTTLE, 0.07, 0.300, 0.93 },
+ { BASE, 0.00, 0.280, 0.00 },
+ { BASE, -0.50, 0.180, 0.50 },
+ { BASE, -0.75, 0.080, 0.75 },
+ { BASE, -0.80, 0.035, 0.80 },
+ { BASE, -0.90, 0.035, 1.00 },
+ { 0, 0, 0, 0 },
+};
+
+
+
+typedef struct {
+ GLXContext *glx_context;
+ lamp_style style;
+ lamp_geometry *model;
+ rotator *rot;
+ rotator *rot2;
+ trackball_state *trackball;
+ Bool button_down_p;
+
+ GLfloat max_bottle_radius; /* radius of widest part of the bottle */
+
+ GLfloat launch_chance; /* how often to percolate */
+ int blobs_per_group; /* how many metaballs we launch at once */
+ Bool just_started_p; /* so we launch some goo right away */
+
+ int grid_size; /* resolution for marching-cubes */
+ int nballs;
+ metaball *balls;
+
+ GLuint bottle_list;
+ GLuint ball_list;
+
+ Bool spin_x, spin_y, spin_z; /* spin of the scene overall */
+
+ int bottle_poly_count; /* polygons in the bottle only */
+
+} lavalite_configuration;
+
+static lavalite_configuration *bps = NULL;
+
+static char *do_spin;
+static char *do_style;
+static GLfloat speed;
+static Bool do_wander;
+static int resolution;
+static Bool do_smooth;
+static Bool do_impatient;
+
+static char *lava_color_str, *fluid_color_str, *base_color_str,
+ *table_color_str;
+static char *fluid_tex, *base_tex, *table_tex;
+
+static GLfloat lava_color[4], fluid_color[4], base_color[4], table_color[4];
+static GLfloat lava_spec[4] = {1.0, 1.0, 1.0, 1.0};
+static GLfloat lava_shininess = 128.0;
+static GLfloat foot_color[4] = {0.2, 0.2, 0.2, 1.0};
+
+static GLfloat light0_pos[4] = {-0.6, 0.0, 1.0, 0.0};
+static GLfloat light1_pos[4] = { 1.0, 0.0, 0.2, 0.0};
+static GLfloat light2_pos[4] = { 0.6, 0.0, 1.0, 0.0};
+
+
+
+static XrmOptionDescRec opts[] = {
+ { "-style", ".style", XrmoptionSepArg, 0 },
+ { "-spin", ".spin", XrmoptionSepArg, 0 },
+ { "+spin", ".spin", XrmoptionNoArg, "" },
+ { "-speed", ".speed", XrmoptionSepArg, 0 },
+ { "-wander", ".wander", XrmoptionNoArg, "True" },
+ { "+wander", ".wander", XrmoptionNoArg, "False" },
+ { "-resolution", ".resolution", XrmoptionSepArg, 0 },
+ { "-smooth", ".smooth", XrmoptionNoArg, "True" },
+ { "+smooth", ".smooth", XrmoptionNoArg, "False" },
+ { "-impatient", ".impatient", XrmoptionNoArg, "True" },
+ { "+impatient", ".impatient", XrmoptionNoArg, "False" },
+
+ { "-lava-color", ".lavaColor", XrmoptionSepArg, 0 },
+ { "-fluid-color", ".fluidColor", XrmoptionSepArg, 0 },
+ { "-base-color", ".baseColor", XrmoptionSepArg, 0 },
+ { "-table-color", ".tableColor", XrmoptionSepArg, 0 },
+
+ { "-fluid-texture",".fluidTexture", XrmoptionSepArg, 0 },
+ { "-base-texture", ".baseTexture", XrmoptionSepArg, 0 },
+ { "-table-texture",".tableTexture", XrmoptionSepArg, 0 },
+};
+
+static argtype vars[] = {
+ {(caddr_t *) &do_style, "style", "Style", DEF_STYLE, t_String},
+ {(caddr_t *) &do_spin, "spin", "Spin", DEF_SPIN, t_String},
+ {(caddr_t *) &do_wander, "wander", "Wander", DEF_WANDER, t_Bool},
+ {(caddr_t *) &speed, "speed", "Speed", DEF_SPEED, t_Float},
+ {(caddr_t *) &resolution, "resolution", "Resolution", DEF_RESOLUTION, t_Int},
+ {(caddr_t *) &do_smooth, "smooth", "Smooth", DEF_SMOOTH, t_Bool},
+ {(caddr_t *) &do_impatient, "impatient", "Impatient", DEF_IMPATIENT, t_Bool},
+
+ {(caddr_t *) &lava_color_str, "lavaColor", "LavaColor", DEF_LCOLOR,t_String},
+ {(caddr_t *) &fluid_color_str,"fluidColor","FluidColor",DEF_FCOLOR,t_String},
+ {(caddr_t *) &base_color_str, "baseColor", "BaseColor", DEF_BCOLOR,t_String},
+ {(caddr_t *) &table_color_str,"tableColor","TableColor",DEF_TCOLOR,t_String},
+
+ {(caddr_t *) &fluid_tex, "fluidTexture", "FluidTexture", DEF_FTEX, t_String},
+ {(caddr_t *) &base_tex, "baseTexture", "BaseTexture", DEF_BTEX, t_String},
+ {(caddr_t *) &table_tex, "tableTexture", "BaseTexture", DEF_TTEX, t_String},
+};
+
+ModeSpecOpt sws_opts = {countof(opts), opts, countof(vars), vars, NULL};
+
+
+/* Window management, etc
+ */
+void
+reshape_lavalite (ModeInfo *mi, int width, int height)
+{
+ GLfloat h = (GLfloat) height / (GLfloat) width;
+
+ glViewport (0, 0, (GLint) width, (GLint) height);
+
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ gluPerspective (30.0, 1/h, 1.0, 100.0);
+
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+ gluLookAt( 0.0, 0.0, 30.0,
+ 0.0, 0.0, 0.0,
+ 0.0, 1.0, 0.0);
+
+ glClear(GL_COLOR_BUFFER_BIT);
+}
+
+
+\f
+/* Textures
+ */
+
+static Bool
+load_texture (ModeInfo *mi, const char *filename)
+{
+ Display *dpy = mi->dpy;
+ Visual *visual = mi->xgwa.visual;
+ Colormap cmap = mi->xgwa.colormap;
+ char buf[1024];
+ XImage *image;
+
+ if (!filename ||
+ !*filename ||
+ !strcasecmp (filename, "(none)"))
+ {
+ glDisable (GL_TEXTURE_2D);
+ return False;
+ }
+
+ image = xpm_file_to_ximage (dpy, visual, cmap, filename);
+
+ clear_gl_error();
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
+ image->width, image->height, 0,
+ GL_RGBA, GL_UNSIGNED_BYTE, image->data);
+ sprintf (buf, "texture: %.100s (%dx%d)",
+ filename, image->width, image->height);
+ check_gl_error(buf);
+
+ glPixelStorei (GL_UNPACK_ALIGNMENT, 4);
+ glPixelStorei (GL_UNPACK_ROW_LENGTH, image->width);
+ glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+ glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+ glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+
+ glEnable (GL_TEXTURE_2D);
+ return True;
+}
+
+
+\f
+/* Generating the lamp's bottle, caps, and base.
+ */
+
+static int
+draw_disc (GLfloat r, GLfloat z, int faces, Bool up_p, Bool wire)
+{
+ int j;
+ GLfloat th;
+ GLfloat step = M_PI * 2 / faces;
+ int polys = 0;
+ GLfloat x, y;
+
+ glFrontFace (up_p ? GL_CW : GL_CCW);
+ glNormal3f (0, (up_p ? 1 : -1), 0);
+ glBegin (wire ? GL_LINE_LOOP : GL_TRIANGLES);
+
+ x = r;
+ y = 0;
+
+ for (j = 0, th = 0; j <= faces; j++)
+ {
+ glTexCoord2f (-j / (GLfloat) faces, 1);
+ glVertex3f (0, z, 0);
+
+ glTexCoord2f (-j / (GLfloat) faces, 0);
+ glVertex3f (x, z, y);
+
+ th += step;
+ x = r * cos (th);
+ y = r * sin (th);
+
+ glTexCoord2f (-j / (GLfloat) faces, 0);
+ glVertex3f (x, z, y);
+
+ polys++;
+ }
+ glEnd();
+
+ return polys;
+}
+
+
+static int
+draw_tube (GLfloat r0, GLfloat r1,
+ GLfloat z0, GLfloat z1,
+ GLfloat t0, GLfloat t1,
+ int faces, Bool inside_out_p, Bool smooth_p, Bool wire)
+{
+ int polys = 0;
+ GLfloat th;
+ GLfloat x, y, x0=0, y0=0;
+ GLfloat step = M_PI * 2 / faces;
+ GLfloat s2 = step/2;
+ int i;
+
+ glFrontFace (inside_out_p ? GL_CW : GL_CCW);
+ glBegin (wire ? GL_LINES : (smooth_p ? GL_QUAD_STRIP : GL_QUADS));
+
+ th = 0;
+ x = 1;
+ y = 0;
+
+ if (!smooth_p)
+ {
+ x0 = cos (s2);
+ y0 = sin (s2);
+ }
+
+ if (smooth_p) faces++;
+
+ for (i = 0; i < faces; i++)
+ {
+ int nsign = (inside_out_p ? -1 : 1);
+
+ if (smooth_p)
+ glNormal3f (x * nsign, z1, y * nsign);
+ else
+ glNormal3f (x0 * nsign, z1, y0 * nsign);
+
+ glTexCoord2f (nsign * -i / (GLfloat) faces, 1-t1);
+ glVertex3f (x * r1, z1, y * r1);
+
+ glTexCoord2f (nsign * -i / (GLfloat) faces, 1-t0);
+ glVertex3f (x * r0, z0, y * r0);
+
+ th += step;
+ x = cos (th);
+ y = sin (th);
+
+ if (!smooth_p)
+ {
+ x0 = cos (th + s2);
+ y0 = sin (th + s2);
+
+ glTexCoord2f (nsign * -(i+1) / (double) faces, 1-t0);
+ glVertex3f (x * r0, z0, y * r0);
+
+ glTexCoord2f (nsign * -(i+1) / (double) faces, 1-t1);
+ glVertex3f (x * r1, z1, y * r1);
+ }
+
+ polys++;
+ }
+ glEnd();
+
+ return polys;
+}
+
+
+static int
+draw_table (GLfloat z, Bool wire)
+{
+ GLfloat faces = 6;
+ GLfloat step = M_PI * 2 / faces;
+ GLfloat s = 8;
+ GLfloat th;
+ int j;
+ int polys = 0;
+
+ glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, table_color);
+
+ glFrontFace(GL_CW);
+ glNormal3f(0, 1, 0);
+ glBegin(wire ? GL_LINE_LOOP : GL_TRIANGLE_FAN);
+
+ if (! wire)
+ {
+ glTexCoord2f (-0.5, 0.5);
+ glVertex3f(0, z, 0);
+ }
+
+ for (j = 0, th = 0; j <= faces; j++)
+ {
+ GLfloat x = cos (th);
+ GLfloat y = sin (th);
+ glTexCoord2f (-(x+1)/2.0, (y+1)/2.0);
+ glVertex3f(x*s, z, y*s);
+ th += step;
+ polys++;
+ }
+ glEnd();
+ return polys;
+}
+
+
+static int
+draw_wing (GLfloat w, GLfloat h, GLfloat d, Bool wire)
+{
+ static int coords[2][8][2] = {
+ { { 0, 0 },
+ { 10, 10 },
+ { 20, 23 },
+ { 30, 41 },
+ { 40, 64 },
+ { 45, 81 },
+ { 50, 103 },
+ { 53, 134 } },
+ { { 0, 54 },
+ { 10, 57 },
+ { 20, 64 },
+ { 30, 75 },
+ { 40, 92 },
+ { 45, 104 },
+ { 50, 127 },
+ { 51, 134 }
+ }
+ };
+
+ int polys = 0;
+ int maxx = coords[0][countof(coords[0])-1][0];
+ int maxy = coords[0][countof(coords[0])-1][1];
+ int x;
+
+ for (x = 1; x < countof(coords[0]); x++)
+ {
+ GLfloat px0 = (GLfloat) coords[0][x-1][0] / maxx * w;
+ GLfloat py0 = (GLfloat) coords[0][x-1][1] / maxy * h;
+ GLfloat px1 = (GLfloat) coords[1][x-1][0] / maxx * w;
+ GLfloat py1 = (GLfloat) coords[1][x-1][1] / maxy * h;
+ GLfloat px2 = (GLfloat) coords[0][x ][0] / maxx * w;
+ GLfloat py2 = (GLfloat) coords[0][x ][1] / maxy * h;
+ GLfloat px3 = (GLfloat) coords[1][x ][0] / maxx * w;
+ GLfloat py3 = (GLfloat) coords[1][x ][1] / maxy * h;
+ GLfloat zz = d/2;
+
+ /* Left side
+ */
+ glFrontFace (GL_CW);
+ glNormal3f (0, 0, -1);
+ glBegin (wire ? GL_LINE_LOOP : GL_QUADS);
+
+ glTexCoord2f (px0, py0); glVertex3f (px0, -py0, -zz);
+ glTexCoord2f (px1, py1); glVertex3f (px1, -py1, -zz);
+ glTexCoord2f (px3, py3); glVertex3f (px3, -py3, -zz);
+ glTexCoord2f (px2, py2); glVertex3f (px2, -py2, -zz);
+ polys++;
+ glEnd();
+
+ /* Right side
+ */
+ glFrontFace (GL_CCW);
+ glNormal3f (0, 0, -1);
+ glBegin (wire ? GL_LINE_LOOP : GL_QUADS);
+ glTexCoord2f(px0, py0); glVertex3f (px0, -py0, zz);
+ glTexCoord2f(px1, py1); glVertex3f (px1, -py1, zz);
+ glTexCoord2f(px3, py3); glVertex3f (px3, -py3, zz);
+ glTexCoord2f(px2, py2); glVertex3f (px2, -py2, zz);
+ polys++;
+ glEnd();
+
+ /* Top edge
+ */
+ glFrontFace (GL_CCW);
+ glNormal3f (1, -1, 0); /* #### wrong */
+ glBegin (wire ? GL_LINE_LOOP : GL_QUADS);
+ glTexCoord2f(px0, py0); glVertex3f (px0, -py0, -zz);
+ glTexCoord2f(px0, py0); glVertex3f (px0, -py0, zz);
+ glTexCoord2f(px2, py2); glVertex3f (px2, -py2, zz);
+ glTexCoord2f(px2, py2); glVertex3f (px2, -py2, -zz);
+ polys++;
+ glEnd();
+
+ /* Bottom edge
+ */
+ glFrontFace (GL_CW);
+ glNormal3f (-1, 1, 0); /* #### wrong */
+ glBegin (wire ? GL_LINE_LOOP : GL_QUADS);
+ glTexCoord2f(px1, py1); glVertex3f (px1, -py1, -zz);
+ glTexCoord2f(px1, py1); glVertex3f (px1, -py1, zz);
+ glTexCoord2f(px3, py3); glVertex3f (px3, -py3, zz);
+ glTexCoord2f(px3, py3); glVertex3f (px3, -py3, -zz);
+ polys++;
+ glEnd();
+
+
+ }
+
+ return polys;
+
+}
+
+
+static void
+generate_bottle (ModeInfo *mi)
+{
+ lavalite_configuration *bp = &bps[MI_SCREEN(mi)];
+ int wire = MI_IS_WIREFRAME(mi);
+ int faces = resolution * 1.5;
+ Bool smooth = do_smooth;
+ Bool have_texture = False;
+
+ lamp_geometry *top_slice = bp->model;
+ const char *current_texture = 0;
+ lamp_part last_part = 0;
+
+ if (faces < 3) faces = 3;
+ else if (wire && faces > 20) faces = 20;
+ else if (faces > 60) faces = 60;
+
+ bp->bottle_poly_count = 0;
+
+ glNewList (bp->bottle_list, GL_COMPILE);
+ glPushMatrix();
+
+ glRotatef (90, 1, 0, 0);
+ glTranslatef (0, -0.5, 0);
+
+ /* All parts of the lamp use the same specularity and shininess. */
+ glMaterialfv (GL_FRONT, GL_SPECULAR, lava_spec);
+ glMateriali (GL_FRONT, GL_SHININESS, lava_shininess);
+
+ while (1)
+ {
+ lamp_geometry *bot_slice = top_slice + 1;
+
+ const char *texture = 0;
+ GLfloat *color = 0;
+ GLfloat t0, t1;
+
+ glDisable (GL_LIGHT2);
+
+ switch (top_slice->part)
+ {
+ case CAP:
+ case BASE:
+ texture = base_tex;
+ color = base_color;
+ break;
+ case BOTTLE:
+ texture = fluid_tex;
+ color = fluid_color;
+ if (!wire) glEnable (GL_LIGHT2); /* light2 affects only fluid */
+ break;
+ default:
+ abort();
+ break;
+ }
+
+ have_texture = False;
+ if (!wire && texture && texture != current_texture)
+ {
+ current_texture = texture;
+ have_texture = load_texture (mi, current_texture);
+ }
+
+ /* Color the discs darker than the tube walls. */
+ glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, foot_color);
+
+ /* Do a top disc if this is the first slice of the CAP or BASE.
+ */
+ if ((top_slice->part == CAP && last_part == 0) ||
+ (top_slice->part == BASE && last_part == BOTTLE))
+ bp->bottle_poly_count +=
+ draw_disc (top_slice->radius, top_slice->elevation, faces,
+ True, wire);
+
+ /* Do a bottom disc if this is the last slice of the CAP or BASE.
+ */
+ if ((top_slice->part == CAP && bot_slice->part == BOTTLE) ||
+ (top_slice->part == BASE && bot_slice->part == 0))
+ {
+ lamp_geometry *sl = (bot_slice->part == 0 ? top_slice : bot_slice);
+ bp->bottle_poly_count +=
+ draw_disc (sl->radius, sl->elevation, faces, False, wire);
+ }
+
+ if (bot_slice->part == 0) /* done! */
+ break;
+
+ /* Do a tube or cone
+ */
+ glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color);
+
+ t0 = top_slice->texture_elevation;
+ t1 = bot_slice->texture_elevation;
+
+ /* Restart the texture coordinates for the glass.
+ */
+ if (top_slice->part == BOTTLE)
+ {
+ Bool first_p = (top_slice[-1].part != BOTTLE);
+ Bool last_p = (bot_slice->part != BOTTLE);
+ if (first_p) t0 = 0;
+ if (last_p) t1 = 1;
+ }
+
+ bp->bottle_poly_count +=
+ draw_tube (top_slice->radius, bot_slice->radius,
+ top_slice->elevation, bot_slice->elevation,
+ t0, t1,
+ faces,
+ (top_slice->part == BOTTLE),
+ smooth, wire);
+
+ last_part = top_slice->part;
+ top_slice++;
+ }
+
+ if (bp->style == ROCKET)
+ {
+ int i;
+ for (i = 0; i < 3; i++)
+ {
+ glPushMatrix();
+ glRotatef (120 * i, 0, 1, 0);
+ glTranslatef (0.14, -0.05, 0);
+ bp->bottle_poly_count += draw_wing (0.4, 0.95, 0.02, wire);
+ glPopMatrix();
+ }
+ glTranslatef (0, -0.1, 0); /* move floor down a little */
+ }
+
+
+ have_texture = !wire && load_texture (mi, table_tex);
+ glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, table_color);
+ bp->bottle_poly_count += draw_table (top_slice->elevation, wire);
+
+
+ glPopMatrix ();
+ glDisable (GL_TEXTURE_2D); /* done with textured objects */
+ glEndList ();
+}
+
+
+
+\f
+/* Generating blobbies
+ */
+
+static double
+bellrand (double extent) /* like frand(), but a bell curve. */
+{
+ return (((frand(extent) + frand(extent) + frand(extent)) / 3)
+ - (extent/2));
+}
+
+
+static void move_ball (ModeInfo *mi, metaball *b);
+
+/* Bring a ball into play, and re-randomize its values.
+ */
+static void
+reset_ball (ModeInfo *mi, metaball *b)
+{
+/* lavalite_configuration *bp = &bps[MI_SCREEN(mi)]; */
+
+ b->r = 0.00001;
+ b->R = 0.12 + bellrand(0.10);
+
+ b->pos_r = bellrand (0.9);
+ b->pos_th = frand(M_PI*2);
+ b->z = 0;
+
+ b->dr = bellrand(TILT);
+ b->dz = CONVECTION;
+
+ b->leader = 0;
+
+ if (!b->alive_p)
+ b->alive_p = True;
+
+ move_ball (mi, b);
+}
+
+
+/* returns the first metaball that is not in use, or 0.
+ */
+static metaball *
+get_ball (ModeInfo *mi)
+{
+ lavalite_configuration *bp = &bps[MI_SCREEN(mi)];
+ int i;
+ for (i = 0; i < bp->nballs; i++)
+ {
+ metaball *b = &bp->balls[i];
+ if (!b->alive_p)
+ return b;
+ }
+ return 0;
+}
+
+
+/* Generate the blobs that don't move: the ones at teh top and bottom
+ that are part of the scenery.
+ */
+static void
+generate_static_blobs (ModeInfo *mi)
+{
+ lavalite_configuration *bp = &bps[MI_SCREEN(mi)];
+ metaball *b0, *b1;
+ int i;
+
+ b0 = get_ball (mi);
+ if (!b0) abort();
+ b0->static_p = True;
+ b0->alive_p = True;
+ b0->R = 0.6;
+ b0->r = 0.3;
+
+ /* the giant blob at the bottom of the bottle.
+ */
+ b0->pos_r = 0;
+ b0->pos_th = 0;
+ b0->dr = 0;
+ b0->dz = 0;
+ b0->x = 0;
+ b0->y = 0;
+ b0->z = -0.43;
+
+ /* the small blob at the top of the bottle.
+ */
+ b1 = get_ball (mi);
+ if (!b1) abort();
+
+ *b1 = *b0;
+ b1->R = 0.16;
+ b1->r = 0.135;
+ b1->z = 1.078;
+
+ /* Some extra blobs at the bottom of the bottle, to jumble the surface.
+ */
+ for (i = 0; i < bp->blobs_per_group; i++)
+ {
+ b1 = get_ball (mi);
+ if (!b1) abort();
+ reset_ball (mi, b1);
+ b1->static_p = True;
+ b1->z = frand(0.04);
+ b1->dr = 0;
+ b1->dz = 0;
+ }
+}
+
+
+static GLfloat
+max_bottle_radius (lavalite_configuration *bp)
+{
+ GLfloat r = 0;
+ lamp_geometry *slice;
+ for (slice = bp->model; slice->part != 0; slice++)
+ {
+ if (slice->part == BOTTLE && slice->radius > r)
+ r = slice->radius; /* top */
+ if (slice[1].radius > r)
+ r = slice[1].radius; /* bottom */
+ }
+ return r;
+}
+
+
+static GLfloat
+bottle_radius_at (lavalite_configuration *bp, GLfloat z)
+{
+ GLfloat topz = -999, botz = -999, topr, botr;
+ lamp_geometry *slice;
+ GLfloat ratio;
+
+ for (slice = bp->model; slice->part != 0; slice++)
+ if (z > slice->elevation)
+ {
+ slice--;
+ topz = slice->elevation;
+ topr = slice->radius;
+ break;
+ }
+ if (topz == -999) return 0;
+
+ for (; slice->part != 0; slice++)
+ if (z > slice->elevation)
+ {
+ botz = slice->elevation;
+ botr = slice->radius;
+ break;
+ }
+ if (botz == -999) return 0;
+
+ ratio = (z - botz) / (topz - botz);
+
+ return (botr + ((topr - botr) * ratio));
+}
+
+
+static void
+move_ball (ModeInfo *mi, metaball *b)
+{
+ lavalite_configuration *bp = &bps[MI_SCREEN(mi)];
+ double gravity = GRAVITY;
+ double real_r;
+
+ if (b->static_p) return;
+
+ b->pos_r += b->dr;
+ b->z += b->dz;
+
+ b->dz -= gravity;
+
+ if (b->pos_r > 0.9)
+ {
+ b->pos_r = 0.9;
+ b->dr = -b->dr;
+ }
+ else if (b->pos_r < 0)
+ {
+ b->pos_r = -b->pos_r;
+ b->dr = -b->dr;
+ }
+
+ real_r = b->pos_r * bottle_radius_at (bp, b->z);
+
+ b->x = cos (b->pos_th) * real_r;
+ b->y = sin (b->pos_th) * real_r;
+
+ if (b->z < -b->R) /* dropped below bottom of glass - turn it off */
+ b->alive_p = False;
+}
+
+
+/* This function makes sure that balls that are part of a group always stay
+ relatively close to each other.
+ */
+static void
+clamp_balls (ModeInfo *mi)
+{
+ lavalite_configuration *bp = &bps[MI_SCREEN(mi)];
+ int i;
+ for (i = 0; i < bp->nballs; i++)
+ {
+ metaball *b = &bp->balls[i];
+ if (b->alive_p && b->leader)
+ {
+ double zslack = 0.1;
+ double minz = b->leader->z - zslack;
+ double maxz = b->leader->z + zslack;
+
+ /* Try to keep the Z values near those of the leader.
+ Don't let it go out of range (above or below) and clamp it
+ if it does. If we've clamped it, make sure dz will be
+ moving it in the right direction (back toward the leader.)
+
+ We aren't currently clamping r, only z -- doesn't seem to
+ be needed.
+
+ This is kind of flaky, I think. Sometimes you can see
+ the blobbies "twitch". That's no good.
+ */
+
+ if (b->z < minz)
+ {
+ if (b->dz < 0) b->dz = -b->dz;
+ b->z = minz - b->dz;
+ }
+
+ if (b->z > maxz)
+ {
+ if (b->dz > 0) b->dz = -b->dz;
+ b->z = maxz + b->dz;
+ }
+ }
+ }
+}
+
+
+static void
+move_balls (ModeInfo *mi) /* for great justice */
+{
+ lavalite_configuration *bp = &bps[MI_SCREEN(mi)];
+ int i;
+ for (i = 0; i < bp->nballs; i++)
+ {
+ metaball *b = &bp->balls[i];
+ if (b->alive_p)
+ move_ball (mi, b);
+ }
+
+ clamp_balls (mi);
+}
+
+
+\f
+/* Rendering blobbies using marching cubes.
+ */
+
+static double
+compute_metaball_influence (lavalite_configuration *bp,
+ double x, double y, double z,
+ int nballs, metaball *balls)
+{
+ double vv = 0;
+ int i;
+
+ for (i = 0; i < nballs; i++)
+ {
+ metaball *b = &balls[i];
+ double dx, dy, dz;
+ double d2, r, R, r2, R2;
+
+ if (!b->alive_p) continue;
+
+ dx = x - b->x;
+ dy = y - b->y;
+ dz = z - b->z;
+ R = b->R;
+
+ if (dx > R || dx < -R || /* quick check before multiplying */
+ dy > R || dy < -R ||
+ dz > R || dz < -R)
+ continue;
+
+ d2 = (dx*dx + dy*dy + dz*dz);
+ r = b->r;
+
+ r2 = r*r;
+ R2 = R*R;
+
+ if (d2 <= r2) /* (d <= r) inside the hard radius */
+ vv += 1;
+ else if (d2 > R2) /* (d > R) outside the radius of influence */
+ ;
+ else /* somewhere in between: linear drop-off from r=1 to R=0 */
+ {
+ /* was: vv += 1 - ((d-r) / (R-r)); */
+ vv += 1 - ((d2-r2) / (R2-r2));
+ }
+ }
+
+ return vv;
+}
+
+
+/* callback for marching_cubes() */
+static void *
+obj_init (double grid_size, void *closure)
+{
+ lavalite_configuration *bp = (lavalite_configuration *) closure;
+ bp->grid_size = grid_size;
+
+ return closure;
+}
+
+
+/* Returns True if the given point is outside of the glass tube.
+ */
+static double
+clipped_by_glass_p (double x, double y, double z,
+ lavalite_configuration *bp)
+{
+ double d2, or, or2, ir2;
+
+ or = bp->max_bottle_radius;
+
+ if (x > or || x < -or || /* quick check before multiplying */
+ y > or || y < -or)
+ return 0;
+
+ d2 = (x*x + y*y);
+ or = bottle_radius_at (bp, z);
+
+ or2 = or*or;
+
+ if (d2 > or2) /* (sqrt(d) > or) */
+ return 0;
+
+ ir2 = or2 * 0.7;
+
+ if (d2 > ir2) /* (sqrt(d) > ir) */
+ {
+ double dr1 = or2;
+ double dr2 = ir2;
+ /* was: (1 - (d-ratio2) / (ratio1-ratio2)) */
+ return (1 - (d2-dr2) / (dr1-dr2));
+ }
+
+ return 1;
+}
+
+
+
+/* callback for marching_cubes() */
+static double
+obj_compute (double x, double y, double z, void *closure)
+{
+ lavalite_configuration *bp = (lavalite_configuration *) closure;
+ double clip;
+
+ x /= bp->grid_size; /* convert from 0-N to 0-1. */
+ y /= bp->grid_size;
+ z /= bp->grid_size;
+
+ x -= 0.5; /* X and Y range from -.5 to +.5; z ranges from 0-1. */
+ y -= 0.5;
+
+ clip = clipped_by_glass_p (x, y, z, bp);
+ if (clip == 0) return 0;
+
+ return (clip *
+ compute_metaball_influence (bp, x, y, z, bp->nballs, bp->balls));
+}
+
+
+/* callback for marching_cubes() */
+static void
+obj_free (void *closure)
+{
+}
+
+
+/* Send a new blob travelling upward.
+ This blob will actually be composed of N metaballs that are near
+ each other.
+ */
+static void
+launch_balls (ModeInfo *mi)
+{
+ lavalite_configuration *bp = &bps[MI_SCREEN(mi)];
+ metaball *b0 = get_ball (mi);
+ int i;
+
+ if (!b0) return;
+ reset_ball (mi, b0);
+
+ for (i = 0; i < bp->blobs_per_group; i++)
+ {
+ metaball *b1 = get_ball (mi);
+ if (!b1) break;
+ *b1 = *b0;
+
+ reset_ball (mi, b1);
+ b1->leader = b0;
+
+# define FROB(FIELD,AMT) \
+ b1->FIELD += (bellrand(AMT) * b0->FIELD)
+
+ /* FROB (pos_r, 0.7); */
+ /* FROB (pos_th, 0.7); */
+ FROB (dr, 0.8);
+ FROB (dz, 0.6);
+# undef FROB
+ }
+
+}
+
+
+static void
+animate_lava (ModeInfo *mi)
+{
+ lavalite_configuration *bp = &bps[MI_SCREEN(mi)];
+ int wire = MI_IS_WIREFRAME(mi);
+ Bool just_started_p = bp->just_started_p;
+
+ double isolevel = 0.3;
+
+ /* Maybe bubble a new blobby to the surface.
+ */
+ if (just_started_p ||
+ frand(1.0) < bp->launch_chance)
+ {
+ bp->just_started_p = False;
+ launch_balls (mi);
+
+ if (do_impatient && just_started_p)
+ while (1)
+ {
+ int i;
+ move_balls (mi);
+ for (i = 0; i < bp->nballs; i++)
+ {
+ metaball *b = &bp->balls[i];
+ if (b->alive_p && !b->static_p && !b->leader &&
+ b->z > 0.5)
+ goto DONE;
+ }
+ }
+ DONE: ;
+ }
+
+ move_balls (mi);
+
+ glNewList (bp->ball_list, GL_COMPILE);
+ glPushMatrix();
+
+ glMaterialfv (GL_FRONT, GL_SPECULAR, lava_spec);
+ glMateriali (GL_FRONT, GL_SHININESS, lava_shininess);
+ glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, lava_color);
+
+ /* For the blobbies, the origin is on the axis at the bottom of the
+ glass bottle; and the top of the bottle is +1 on Z.
+ */
+ glTranslatef (0, 0, -0.5);
+
+ mi->polygon_count = 0;
+ {
+ double s = 1.0/bp->grid_size;
+ glPushMatrix();
+ glTranslatef (-0.5, -0.5, 0);
+ glScalef (s, s, s);
+ marching_cubes (resolution, isolevel, wire, do_smooth,
+ obj_init, obj_compute, obj_free, bp,
+ &mi->polygon_count);
+ glPopMatrix();
+ }
+
+ mi->polygon_count += bp->bottle_poly_count;
+
+ glPopMatrix();
+ glEndList ();
+}
+
+
+\f
+/* Startup initialization
+ */
+
+Bool
+lavalite_handle_event (ModeInfo *mi, XEvent *event)
+{
+ lavalite_configuration *bp = &bps[MI_SCREEN(mi)];
+
+ if (event->xany.type == ButtonPress &&
+ event->xbutton.button & Button1)
+ {
+ bp->button_down_p = True;
+ gltrackball_start (bp->trackball,
+ event->xbutton.x, event->xbutton.y,
+ MI_WIDTH (mi), MI_HEIGHT (mi));
+ return True;
+ }
+ else if (event->xany.type == ButtonRelease &&
+ event->xbutton.button & Button1)
+ {
+ bp->button_down_p = False;
+ return True;
+ }
+ else if (event->xany.type == MotionNotify &&
+ bp->button_down_p)
+ {
+ gltrackball_track (bp->trackball,
+ event->xmotion.x, event->xmotion.y,
+ MI_WIDTH (mi), MI_HEIGHT (mi));
+ return True;
+ }
+
+ return False;
+}
+
+
+static void
+parse_color (ModeInfo *mi, const char *name, const char *s, GLfloat *a)
+{
+ XColor c;
+ a[4] = 1.0; /* alpha */
+
+ if (! XParseColor (MI_DISPLAY(mi), MI_COLORMAP(mi), s, &c))
+ {
+ fprintf (stderr, "%s: can't parse %s color %s", progname, name, s);
+ exit (1);
+ }
+ a[0] = c.red / 65536.0;
+ a[1] = c.green / 65536.0;
+ a[2] = c.blue / 65536.0;
+}
+
+
+void
+init_lavalite (ModeInfo *mi)
+{
+ lavalite_configuration *bp;
+ int wire = MI_IS_WIREFRAME(mi);
+
+ if (!bps) {
+ bps = (lavalite_configuration *)
+ calloc (MI_NUM_SCREENS(mi), sizeof (lavalite_configuration));
+ if (!bps) {
+ fprintf(stderr, "%s: out of memory\n", progname);
+ exit(1);
+ }
+
+ bp = &bps[MI_SCREEN(mi)];
+ }
+
+ bp = &bps[MI_SCREEN(mi)];
+
+ bp->glx_context = init_GL(mi);
+
+ reshape_lavalite (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+
+ {
+ char *s = do_spin;
+ while (*s)
+ {
+ if (*s == ' ' || *s == '\t') ;
+ else if (*s == 'x' || *s == 'X') bp->spin_x = 1;
+ else if (*s == 'y' || *s == 'Y') bp->spin_y = 1;
+ else if (*s == 'z' || *s == 'Z') bp->spin_z = 1;
+ else
+ {
+ fprintf (stderr,
+ "%s: spin must contain only the characters X, Y, or Z (not \"%s\")\n",
+ progname, do_spin);
+ exit (1);
+ }
+ s++;
+ }
+
+ s = do_style;
+ if (!s || !*s || !strcasecmp (s, "classic")) bp->style = CLASSIC;
+ else if (!strcasecmp (s, "giant")) bp->style = GIANT;
+ else if (!strcasecmp (s, "cone")) bp->style = CONE;
+ else if (!strcasecmp (s, "rocket")) bp->style = ROCKET;
+ else if (!strcasecmp (s, "random"))
+ {
+ if (random() & 1) bp->style = CLASSIC; /* half the time */
+ else bp->style = (random() % ((int) ROCKET+1));
+ }
+ else
+ {
+ fprintf (stderr,
+ "%s: style must be Classic, Giant, Cone, or Rocket (not \"%s\")\n",
+ progname, s);
+ exit (1);
+ }
+ }
+
+ parse_color (mi, "lava", lava_color_str, lava_color);
+ parse_color (mi, "fluid", fluid_color_str, fluid_color);
+ parse_color (mi, "base", base_color_str, base_color);
+ parse_color (mi, "table", table_color_str, table_color);
+
+ if (!wire)
+ {
+ GLfloat amb[4] = {0.0, 0.0, 0.0, 1.0};
+ GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0};
+ GLfloat spc0[4] = {0.0, 1.0, 1.0, 1.0};
+ GLfloat spc1[4] = {1.0, 0.0, 1.0, 1.0};
+
+ glEnable(GL_LIGHTING);
+ glEnable(GL_LIGHT0);
+ glEnable(GL_LIGHT1);
+ glEnable(GL_DEPTH_TEST);
+ glEnable(GL_CULL_FACE);
+ glEnable(GL_NORMALIZE);
+ glShadeModel(GL_SMOOTH);
+
+ glLightfv(GL_LIGHT0, GL_AMBIENT, amb);
+ glLightfv(GL_LIGHT0, GL_DIFFUSE, dif);
+ glLightfv(GL_LIGHT0, GL_SPECULAR, spc0);
+
+ glLightfv(GL_LIGHT1, GL_AMBIENT, amb);
+ glLightfv(GL_LIGHT1, GL_DIFFUSE, dif);
+ glLightfv(GL_LIGHT1, GL_SPECULAR, spc1);
+
+ glLightfv(GL_LIGHT2, GL_AMBIENT, amb);
+ glLightfv(GL_LIGHT2, GL_DIFFUSE, dif);
+ glLightfv(GL_LIGHT2, GL_SPECULAR, spc0);
+ }
+
+ {
+ Bool spinx=False, spiny=False, spinz=False;
+ double spin_speed = 0.4;
+ double wander_speed = 0.03;
+
+ char *s = do_spin;
+ while (*s)
+ {
+ if (*s == 'x' || *s == 'X') spinx = True;
+ else if (*s == 'y' || *s == 'Y') spiny = True;
+ else if (*s == 'z' || *s == 'Z') spinz = True;
+ else
+ {
+ fprintf (stderr,
+ "%s: spin must contain only the characters X, Y, or Z (not \"%s\")\n",
+ progname, do_spin);
+ exit (1);
+ }
+ s++;
+ }
+
+ bp->rot = make_rotator (spinx ? spin_speed : 0,
+ spiny ? spin_speed : 0,
+ spinz ? spin_speed : 0,
+ 1.0,
+ do_wander ? wander_speed : 0,
+ False);
+ bp->rot2 = make_rotator (spin_speed, 0, 0,
+ 1, 0.1,
+ False);
+ bp->trackball = gltrackball_init ();
+
+ /* move initial camera position up by around 15 degrees:
+ in other words, tilt the scene toward the viewer. */
+ gltrackball_start (bp->trackball, 50, 50, 100, 100);
+ gltrackball_track (bp->trackball, 50, 5, 100, 100);
+
+ /* Oh, but if it's the "Giant" model, tilt the scene away: make it
+ look like we're looking up at it instead of odwn at it! */
+ if (bp->style == GIANT)
+ gltrackball_track (bp->trackball, 50, -12, 100, 100);
+ else if (bp->style == ROCKET) /* same for rocket, but not as much */
+ gltrackball_track (bp->trackball, 50, -4, 100, 100);
+ }
+
+ switch (bp->style)
+ {
+ case CLASSIC: bp->model = classic_lamp; break;
+ case GIANT: bp->model = giant_lamp; break;
+ case CONE: bp->model = cone_lamp; break;
+ case ROCKET: bp->model = rocket_lamp; break;
+ default: abort(); break;
+ }
+
+ bp->max_bottle_radius = max_bottle_radius (bp);
+
+ bp->launch_chance = speed;
+ bp->blobs_per_group = BLOBS_PER_GROUP;
+ bp->just_started_p = True;
+
+ bp->nballs = (((MI_COUNT (mi) + 1) * bp->blobs_per_group)
+ + 2);
+ bp->balls = (metaball *) calloc (sizeof(*bp->balls), bp->nballs+1);
+
+ bp->bottle_list = glGenLists (1);
+ bp->ball_list = glGenLists (1);
+
+ generate_bottle (mi);
+ generate_static_blobs (mi);
+}
+
+
+/* Render one frame
+ */
+
+void
+draw_lavalite (ModeInfo *mi)
+{
+ lavalite_configuration *bp = &bps[MI_SCREEN(mi)];
+ Display *dpy = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+
+ if (!bp->glx_context)
+ return;
+
+ glMatrixMode (GL_MODELVIEW);
+ glPushMatrix ();
+
+ {
+ double cx, cy, cz; /* camera position, 0-1. */
+ double px, py, pz; /* object position, 0-1. */
+ double rx, ry, rz; /* object rotation, 0-1. */
+
+ get_position (bp->rot2, 0, &cy, &cz, !bp->button_down_p);
+ get_rotation (bp->rot2, &cx, 0, 0, !bp->button_down_p);
+
+ get_position (bp->rot, &px, &py, &pz, !bp->button_down_p);
+ get_rotation (bp->rot, &rx, &ry, &rz, !bp->button_down_p);
+
+#if 1
+ cx = 0.5;
+ cy = 0.5;
+ cz = 1.0;
+
+#else /* #### this crud doesn't really work yet */
+
+
+ /* We have c[xyz] parameters describing a camera position, but we don't
+ want to just map those to points in space: the lamp doesn't look very
+ good from the inside, or from underneath...
+
+ Good observation points form a ring around the lamp: basically, a
+ torus ringing the lamp, parallel to the lamp's floor.
+
+ We interpret cz as distance from the origin.
+ cy as elevation.
+ cx is then used as position in the torus (theta).
+ */
+
+ {
+ double cx2, cy2, cz2;
+ double d;
+
+ cx2 = 0.5;
+ cy2 = 0.5;
+ cz2 = 1.0;
+
+ cy2 = (cy * 0.4); /* cam elevation: 0.0 (table) - 0.4 up. */
+ d = 0.9 + cz; /* cam distance: 0.9 - 1.9. */
+
+ cz2 = 0.5 + (d * cos (cx * M_PI * 2));
+ cx2 = 0.5 + (d * sin (cx * M_PI * 2));
+
+
+ cx = cx2;
+ cy = cy2;
+ cz = cz2;
+ }
+#endif /* 0 */
+
+ glLoadIdentity();
+
+ gluLookAt ((cx - 0.5) * 8, /* Position the camera */
+ (cy - 0.5) * 8,
+ (cz - 0.5) * 8,
+ 0, 0, 0,
+ 0, 1, 0);
+
+ gltrackball_rotate (bp->trackball); /* Apply mouse-based camera position */
+
+
+ /* Place the lights relative to the object, before the object has
+ been rotated or wandered within the scene. */
+ glLightfv(GL_LIGHT0, GL_POSITION, light0_pos);
+ glLightfv(GL_LIGHT1, GL_POSITION, light1_pos);
+ glLightfv(GL_LIGHT2, GL_POSITION, light2_pos);
+
+
+ /* Position the lamp in the scene according to the "wander" settings */
+ glTranslatef ((px - 0.5), (py - 0.5), (pz - 0.5));
+
+ /* Rotate the object according to the "spin" settings */
+ glRotatef (rx * 360, 1.0, 0.0, 0.0);
+ glRotatef (ry * 360, 0.0, 1.0, 0.0);
+ glRotatef (rz * 360, 0.0, 0.0, 1.0);
+
+ /* Move the lamp up slightly: make 0,0 be at its vertical center. */
+ switch (bp->style)
+ {
+ case CLASSIC: glTranslatef (0, 0, 0.33); break;
+ case GIANT: glTranslatef (0, 0, 0.33); break;
+ case CONE: glTranslatef (0, 0, 0.16); break;
+ case ROCKET: glTranslatef (0, 0, 0.30);
+ glScalef (0.85,0.85,0.85); break;
+ default: abort(); break;
+ }
+ }
+
+ animate_lava (mi);
+
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+ glCallList (bp->bottle_list);
+ glCallList (bp->ball_list);
+ glPopMatrix ();
+
+ if (mi->fps_p) do_fps (mi);
+ glFinish();
+
+ glXSwapBuffers(dpy, window);
+}
+
+#endif /* USE_GL */
--- /dev/null
+.de EX \"Begin example
+.ne 5
+.if n .sp 1
+.if t .sp .5
+.nf
+.in +.5i
+..
+.de EE
+.fi
+.in -.5i
+.if n .sp 1
+.if t .sp .5
+..
+.TH XScreenSaver 1 "18-May-2002" "X Version 11"
+.SH NAME
+lavaite - 3D OpenGL simulation of a Lavalite.
+.SH SYNOPSIS
+.B starwars
+[\-display \fIhost:display.screen\fP] [\-window] [\-root]
+[\-visual \fIvisual\fP] [\-delay \fImicroseconds\fP] [\-fps]
+[\-style \fIstyle\fP ]
+[\-spin \fIxyz\fP ] [\-no-spin ]
+[\-speed \fIfloat\fP ]
+[\-resolution \fIinteger\fP ]
+[\-count \fIinteger\fP ]
+[\-no-smooth ]
+[\-wireframe ]
+[\-impatient ]
+[\-lava-color \fIcolor\fP ]
+[\-fluid-color \fIcolor\fP ]
+[\-base-color \fIcolor\fP ]
+[\-table-color \fIcolor\fP ]
+[\-fluid-texture \fIfilename\fP ]
+[\-base-texture \fIfilename\fP ]
+[\-table-texture \fIfilename\fP ]
+.SH DESCRIPTION
+The \fIlavalite\fP program displays a 3D simulation of the famous lamp
+of the same name. It requires a fast computer with fast OpenGL support.
+.SH OPTIONS
+.I lavalite
+accepts the following options:
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-visual \fIvisual\fP\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-style \fIstyle\fP\fP
+Specify which model of lamp to draw. Available models
+are: \fBClassic\fP, \fBGiant\fP, \fBCone\fP, and \fBRocket\fP.
+Default: random.
+.TP 8
+.B \-spin \fIxyz\fP
+Around which axes the model should auto-spin. Defaults to "Z", meaning
+it rotates horizontally, but otherwise pitch or roll.
+.TP 8
+.B \-no-spin
+Same as \fB\-spin ''\fP.
+.TP 8
+.B \-speed \fIfloat\fP
+A number controlling the frequency at which new blobs launch: you can
+think of this as being related to the the heat of the lightbulb in
+the base. Default: 0.003.
+.TP 8
+.B \-delay \fIusecs\fP
+The delay between steps of the animation; default is 40000 (1/25th second.)
+.TP 8
+.B \-resolution \fIinteger\fP
+The size of the grid from which the mesh is created that is used
+to polygonize the blobs. higher values will give very smooth looking
+blobs, at the expense of speed. Default: 40.
+
+The options "-resolution 10 -no-smooth" look kind of interesting.
+.TP 8
+.B \-fps
+Display a running tally of how many frames per second are being rendered.
+In conjunction with \fB\-delay 0\fP, this can be a useful benchmark of
+your GL performance.
+.TP 8
+.B \-count \fIinteger\fP
+The maximum number of blobs that can be in motion at once.
+Default: 3.
+.TP 8
+.B \-no-smooth
+Turn off smoothing: the objects in the scene will be facetted.
+.TP 8
+.B \-wireframe
+Render all objects in wireframe instead of as solids.
+.TP 8
+.B \-impatient
+Provide this option if you are. This will pre-warm the lamp, so when it
+starts up, the first frame will show a blob already halfway up the lamp.
+.TP 8
+.B \-lava-color \fIcolor\fP
+Specifies the color of the blobbies. Default: red.
+.TP 8
+.B \-fluid-color \fIcolor\fP
+Specifies the color of the fluid that the blobbies float in.
+Default: light blue.
+.TP 8
+.B \-base-color \fIcolor\fP
+Specifies the color of the lamp base, and the cap on top of the bottle.
+Default: very dark gray.
+.TP 8
+.B \-table-color \fIcolor\fP
+Specifies the color of the table that the lamp is sitting on.
+Default: black (meaning it is invisible.)
+.TP 8
+.B \-fluid-texture \fIfilename\fP
+An image file to wrap around the glass.
+
+Note that on most systems, GL textures must have dimensions that are a
+power of two.
+
+Note also that colors and textures are both applied: so, if you apply a
+texture and it isn't showing up, try specifying the corresponding color
+as "white". Otherwise, the combination of the two might be too dark to
+see.
+.TP 8
+.B \-base-texture \fIfilename\fP
+An image file to wrap around the base of the lamp, and the cap on top
+of the bottle.
+.TP 8
+.B \-table-texture \fItexture\fP
+An image file to spread across the table that the lamp is sitting on.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1),
+ http://www.lavaworld.com/
+ http://www.lavarnd.org/
+.SH COPYRIGHT
+Copyright \(co 2002 by Jamie Zawinski.
+Permission to use, copy, modify, distribute, and sell this software and
+its documentation for any purpose is hereby granted without fee,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is"
+without express or implied warranty.
+
+LAVA LITE\(rg and the configuration of the LAVA\(rg brand motion lamp
+are registered trademarks of Haggerty Enterprises, Inc. The
+configuration of the globe and base of the motion lamp are registered
+trademarks of Haggerty Enterprises, Inc. in the U.S.A. and in other
+countries around the world.
+
+.SH AUTHOR
+Jamie Zawinski <jwz@jwz.org>
--- /dev/null
+/* xscreensaver, Copyright (c) 2002 Jamie Zawinski <jwz@jwz.org>
+ * Utility functions to create "marching cubes" meshes from 3d fields.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation. No representations are made about the suitability of this
+ * software for any purpose. It is provided "as is" without express or
+ * implied warranty.
+ *
+ * Marching cubes implementation by Paul Bourke <pbourke@swin.edu.au>
+ * http://astronomy.swin.edu.au/~pbourke/modelling/polygonise/
+ */
+
+#include "config.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include <math.h>
+#include "marching.h"
+
+extern char *progname;
+
+#undef ABS
+#define ABS(x) ((x)<0?(-(x)):(x))
+
+typedef struct {
+ double x,y,z;
+} XYZ;
+
+typedef struct {
+ XYZ p[3];
+} TRIANGLE;
+
+typedef struct {
+ XYZ p[8];
+ double val[8];
+} GRIDCELL;
+
+
+/* Indexing convention:
+
+ Vertices: Edges:
+
+ 4 ______________ 5 ______________
+ /| /| /| 4 /|
+ / | 6 / | 7 / |8 5 / |
+ 7 /_____________/ | /______________/ | 9
+ | | | | | | 6 | |
+ | 0 |_________|___| 1 | |_________|10_|
+ | / | / 11 | 3/ 0 | /
+ | / | / | / | / 1
+ 3 |/____________|/ 2 |/____________|/
+ 2
+ */
+
+static const int edgeTable[256] = {
+ 0x0 , 0x109, 0x203, 0x30a, 0x406, 0x50f, 0x605, 0x70c,
+ 0x80c, 0x905, 0xa0f, 0xb06, 0xc0a, 0xd03, 0xe09, 0xf00,
+ 0x190, 0x99 , 0x393, 0x29a, 0x596, 0x49f, 0x795, 0x69c,
+ 0x99c, 0x895, 0xb9f, 0xa96, 0xd9a, 0xc93, 0xf99, 0xe90,
+ 0x230, 0x339, 0x33 , 0x13a, 0x636, 0x73f, 0x435, 0x53c,
+ 0xa3c, 0xb35, 0x83f, 0x936, 0xe3a, 0xf33, 0xc39, 0xd30,
+ 0x3a0, 0x2a9, 0x1a3, 0xaa , 0x7a6, 0x6af, 0x5a5, 0x4ac,
+ 0xbac, 0xaa5, 0x9af, 0x8a6, 0xfaa, 0xea3, 0xda9, 0xca0,
+ 0x460, 0x569, 0x663, 0x76a, 0x66 , 0x16f, 0x265, 0x36c,
+ 0xc6c, 0xd65, 0xe6f, 0xf66, 0x86a, 0x963, 0xa69, 0xb60,
+ 0x5f0, 0x4f9, 0x7f3, 0x6fa, 0x1f6, 0xff , 0x3f5, 0x2fc,
+ 0xdfc, 0xcf5, 0xfff, 0xef6, 0x9fa, 0x8f3, 0xbf9, 0xaf0,
+ 0x650, 0x759, 0x453, 0x55a, 0x256, 0x35f, 0x55 , 0x15c,
+ 0xe5c, 0xf55, 0xc5f, 0xd56, 0xa5a, 0xb53, 0x859, 0x950,
+ 0x7c0, 0x6c9, 0x5c3, 0x4ca, 0x3c6, 0x2cf, 0x1c5, 0xcc ,
+ 0xfcc, 0xec5, 0xdcf, 0xcc6, 0xbca, 0xac3, 0x9c9, 0x8c0,
+ 0x8c0, 0x9c9, 0xac3, 0xbca, 0xcc6, 0xdcf, 0xec5, 0xfcc,
+ 0xcc , 0x1c5, 0x2cf, 0x3c6, 0x4ca, 0x5c3, 0x6c9, 0x7c0,
+ 0x950, 0x859, 0xb53, 0xa5a, 0xd56, 0xc5f, 0xf55, 0xe5c,
+ 0x15c, 0x55 , 0x35f, 0x256, 0x55a, 0x453, 0x759, 0x650,
+ 0xaf0, 0xbf9, 0x8f3, 0x9fa, 0xef6, 0xfff, 0xcf5, 0xdfc,
+ 0x2fc, 0x3f5, 0xff , 0x1f6, 0x6fa, 0x7f3, 0x4f9, 0x5f0,
+ 0xb60, 0xa69, 0x963, 0x86a, 0xf66, 0xe6f, 0xd65, 0xc6c,
+ 0x36c, 0x265, 0x16f, 0x66 , 0x76a, 0x663, 0x569, 0x460,
+ 0xca0, 0xda9, 0xea3, 0xfaa, 0x8a6, 0x9af, 0xaa5, 0xbac,
+ 0x4ac, 0x5a5, 0x6af, 0x7a6, 0xaa , 0x1a3, 0x2a9, 0x3a0,
+ 0xd30, 0xc39, 0xf33, 0xe3a, 0x936, 0x83f, 0xb35, 0xa3c,
+ 0x53c, 0x435, 0x73f, 0x636, 0x13a, 0x33 , 0x339, 0x230,
+ 0xe90, 0xf99, 0xc93, 0xd9a, 0xa96, 0xb9f, 0x895, 0x99c,
+ 0x69c, 0x795, 0x49f, 0x596, 0x29a, 0x393, 0x99 , 0x190,
+ 0xf00, 0xe09, 0xd03, 0xc0a, 0xb06, 0xa0f, 0x905, 0x80c,
+ 0x70c, 0x605, 0x50f, 0x406, 0x30a, 0x203, 0x109, 0x0
+};
+
+static const int triTable[256][16] = {
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 1, 8, 3, 9, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 0, 8, 3, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 9, 2, 10, 0, 2, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 2, 8, 3, 2, 10, 8, 10, 9, 8, -1, -1, -1, -1, -1, -1, -1},
+ { 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 0, 11, 2, 8, 11, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 1, 9, 0, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 1, 11, 2, 1, 9, 11, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1},
+ { 3, 10, 1, 11, 10, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 0, 10, 1, 0, 8, 10, 8, 11, 10, -1, -1, -1, -1, -1, -1, -1},
+ { 3, 9, 0, 3, 11, 9, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1},
+ { 9, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 4, 3, 0, 7, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 0, 1, 9, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 4, 1, 9, 4, 7, 1, 7, 3, 1, -1, -1, -1, -1, -1, -1, -1},
+ { 1, 2, 10, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 3, 4, 7, 3, 0, 4, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1},
+ { 9, 2, 10, 9, 0, 2, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1},
+ { 2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, -1, -1, -1, -1},
+ { 8, 4, 7, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ {11, 4, 7, 11, 2, 4, 2, 0, 4, -1, -1, -1, -1, -1, -1, -1},
+ { 9, 0, 1, 8, 4, 7, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1},
+ { 4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, -1, -1, -1, -1},
+ { 3, 10, 1, 3, 11, 10, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1},
+ { 1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, -1, -1, -1, -1},
+ { 4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, -1, -1, -1, -1},
+ { 4, 7, 11, 4, 11, 9, 9, 11, 10, -1, -1, -1, -1, -1, -1, -1},
+ { 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 9, 5, 4, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 0, 5, 4, 1, 5, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 8, 5, 4, 8, 3, 5, 3, 1, 5, -1, -1, -1, -1, -1, -1, -1},
+ { 1, 2, 10, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 3, 0, 8, 1, 2, 10, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1},
+ { 5, 2, 10, 5, 4, 2, 4, 0, 2, -1, -1, -1, -1, -1, -1, -1},
+ { 2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, -1, -1, -1, -1},
+ { 9, 5, 4, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 0, 11, 2, 0, 8, 11, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1},
+ { 0, 5, 4, 0, 1, 5, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1},
+ { 2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, -1, -1, -1, -1},
+ {10, 3, 11, 10, 1, 3, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1},
+ { 4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, -1, -1, -1, -1},
+ { 5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, -1, -1, -1, -1},
+ { 5, 4, 8, 5, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1},
+ { 9, 7, 8, 5, 7, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 9, 3, 0, 9, 5, 3, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1},
+ { 0, 7, 8, 0, 1, 7, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1},
+ { 1, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 9, 7, 8, 9, 5, 7, 10, 1, 2, -1, -1, -1, -1, -1, -1, -1},
+ {10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, -1, -1, -1, -1},
+ { 8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, -1, -1, -1, -1},
+ { 2, 10, 5, 2, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1},
+ { 7, 9, 5, 7, 8, 9, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1},
+ { 9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, -1, -1, -1, -1},
+ { 2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, -1, -1, -1, -1},
+ {11, 2, 1, 11, 1, 7, 7, 1, 5, -1, -1, -1, -1, -1, -1, -1},
+ { 9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, -1, -1, -1, -1},
+ { 5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, -1},
+ {11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, -1},
+ {11, 10, 5, 7, 11, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ {10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 0, 8, 3, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 9, 0, 1, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 1, 8, 3, 1, 9, 8, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1},
+ { 1, 6, 5, 2, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 1, 6, 5, 1, 2, 6, 3, 0, 8, -1, -1, -1, -1, -1, -1, -1},
+ { 9, 6, 5, 9, 0, 6, 0, 2, 6, -1, -1, -1, -1, -1, -1, -1},
+ { 5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, -1, -1, -1, -1},
+ { 2, 3, 11, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ {11, 0, 8, 11, 2, 0, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1},
+ { 0, 1, 9, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1},
+ { 5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, -1, -1, -1, -1},
+ { 6, 3, 11, 6, 5, 3, 5, 1, 3, -1, -1, -1, -1, -1, -1, -1},
+ { 0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, -1, -1, -1, -1},
+ { 3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, -1, -1, -1, -1},
+ { 6, 5, 9, 6, 9, 11, 11, 9, 8, -1, -1, -1, -1, -1, -1, -1},
+ { 5, 10, 6, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 4, 3, 0, 4, 7, 3, 6, 5, 10, -1, -1, -1, -1, -1, -1, -1},
+ { 1, 9, 0, 5, 10, 6, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1},
+ {10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, -1, -1, -1, -1},
+ { 6, 1, 2, 6, 5, 1, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1},
+ { 1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, -1, -1, -1, -1},
+ { 8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, -1, -1, -1, -1},
+ { 7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, -1},
+ { 3, 11, 2, 7, 8, 4, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1},
+ { 5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, -1, -1, -1, -1},
+ { 0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1},
+ { 9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, -1},
+ { 8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, -1, -1, -1, -1},
+ { 5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, -1},
+ { 0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, -1},
+ { 6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, -1, -1, -1, -1},
+ {10, 4, 9, 6, 4, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 4, 10, 6, 4, 9, 10, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1},
+ {10, 0, 1, 10, 6, 0, 6, 4, 0, -1, -1, -1, -1, -1, -1, -1},
+ { 8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, -1, -1, -1, -1},
+ { 1, 4, 9, 1, 2, 4, 2, 6, 4, -1, -1, -1, -1, -1, -1, -1},
+ { 3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, -1, -1, -1, -1},
+ { 0, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 8, 3, 2, 8, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1},
+ {10, 4, 9, 10, 6, 4, 11, 2, 3, -1, -1, -1, -1, -1, -1, -1},
+ { 0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, -1, -1, -1, -1},
+ { 3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, -1, -1, -1, -1},
+ { 6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, -1},
+ { 9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, -1, -1, -1, -1},
+ { 8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, -1},
+ { 3, 11, 6, 3, 6, 0, 0, 6, 4, -1, -1, -1, -1, -1, -1, -1},
+ { 6, 4, 8, 11, 6, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 7, 10, 6, 7, 8, 10, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1},
+ { 0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, -1, -1, -1, -1},
+ {10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, -1, -1, -1, -1},
+ {10, 6, 7, 10, 7, 1, 1, 7, 3, -1, -1, -1, -1, -1, -1, -1},
+ { 1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, -1, -1, -1, -1},
+ { 2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, -1},
+ { 7, 8, 0, 7, 0, 6, 6, 0, 2, -1, -1, -1, -1, -1, -1, -1},
+ { 7, 3, 2, 6, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, -1, -1, -1, -1},
+ { 2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, -1},
+ { 1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, -1},
+ {11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, -1, -1, -1, -1},
+ { 8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, -1},
+ { 0, 9, 1, 11, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, -1, -1, -1, -1},
+ { 7, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 3, 0, 8, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 0, 1, 9, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 8, 1, 9, 8, 3, 1, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1},
+ {10, 1, 2, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 1, 2, 10, 3, 0, 8, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1},
+ { 2, 9, 0, 2, 10, 9, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1},
+ { 6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, -1, -1, -1, -1},
+ { 7, 2, 3, 6, 2, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 7, 0, 8, 7, 6, 0, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1},
+ { 2, 7, 6, 2, 3, 7, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1},
+ { 1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, -1, -1, -1, -1},
+ {10, 7, 6, 10, 1, 7, 1, 3, 7, -1, -1, -1, -1, -1, -1, -1},
+ {10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, -1, -1, -1, -1},
+ { 0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, -1, -1, -1, -1},
+ { 7, 6, 10, 7, 10, 8, 8, 10, 9, -1, -1, -1, -1, -1, -1, -1},
+ { 6, 8, 4, 11, 8, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 3, 6, 11, 3, 0, 6, 0, 4, 6, -1, -1, -1, -1, -1, -1, -1},
+ { 8, 6, 11, 8, 4, 6, 9, 0, 1, -1, -1, -1, -1, -1, -1, -1},
+ { 9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, -1, -1, -1, -1},
+ { 6, 8, 4, 6, 11, 8, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1},
+ { 1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, -1, -1, -1, -1},
+ { 4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, -1, -1, -1, -1},
+ {10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, -1},
+ { 8, 2, 3, 8, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1},
+ { 0, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, -1, -1, -1, -1},
+ { 1, 9, 4, 1, 4, 2, 2, 4, 6, -1, -1, -1, -1, -1, -1, -1},
+ { 8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, -1, -1, -1, -1},
+ {10, 1, 0, 10, 0, 6, 6, 0, 4, -1, -1, -1, -1, -1, -1, -1},
+ { 4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, -1},
+ {10, 9, 4, 6, 10, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 4, 9, 5, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 0, 8, 3, 4, 9, 5, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1},
+ { 5, 0, 1, 5, 4, 0, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1},
+ {11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, -1, -1, -1, -1},
+ { 9, 5, 4, 10, 1, 2, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1},
+ { 6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, -1, -1, -1, -1},
+ { 7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, -1, -1, -1, -1},
+ { 3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, -1},
+ { 7, 2, 3, 7, 6, 2, 5, 4, 9, -1, -1, -1, -1, -1, -1, -1},
+ { 9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, -1, -1, -1, -1},
+ { 3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, -1, -1, -1, -1},
+ { 6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, -1},
+ { 9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, -1, -1, -1, -1},
+ { 1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, -1},
+ { 4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, -1},
+ { 7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, -1, -1, -1, -1},
+ { 6, 9, 5, 6, 11, 9, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1},
+ { 3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, -1, -1, -1, -1},
+ { 0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, -1, -1, -1, -1},
+ { 6, 11, 3, 6, 3, 5, 5, 3, 1, -1, -1, -1, -1, -1, -1, -1},
+ { 1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, -1, -1, -1, -1},
+ { 0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, -1},
+ {11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, -1},
+ { 6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, -1, -1, -1, -1},
+ { 5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, -1, -1, -1, -1},
+ { 9, 5, 6, 9, 6, 0, 0, 6, 2, -1, -1, -1, -1, -1, -1, -1},
+ { 1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, -1},
+ { 1, 5, 6, 2, 1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, -1},
+ {10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, -1, -1, -1, -1},
+ { 0, 3, 8, 5, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ {10, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ {11, 5, 10, 7, 5, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ {11, 5, 10, 11, 7, 5, 8, 3, 0, -1, -1, -1, -1, -1, -1, -1},
+ { 5, 11, 7, 5, 10, 11, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1},
+ {10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, -1, -1, -1, -1},
+ {11, 1, 2, 11, 7, 1, 7, 5, 1, -1, -1, -1, -1, -1, -1, -1},
+ { 0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, -1, -1, -1, -1},
+ { 9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, -1, -1, -1, -1},
+ { 7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, -1},
+ { 2, 5, 10, 2, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1},
+ { 8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, -1, -1, -1, -1},
+ { 9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, -1, -1, -1, -1},
+ { 9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, -1},
+ { 1, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 0, 8, 7, 0, 7, 1, 1, 7, 5, -1, -1, -1, -1, -1, -1, -1},
+ { 9, 0, 3, 9, 3, 5, 5, 3, 7, -1, -1, -1, -1, -1, -1, -1},
+ { 9, 8, 7, 5, 9, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 5, 8, 4, 5, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1},
+ { 5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, -1, -1, -1, -1},
+ { 0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, -1, -1, -1, -1},
+ {10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, -1},
+ { 2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, -1, -1, -1, -1},
+ { 0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, -1},
+ { 0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, -1},
+ { 9, 4, 5, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, -1, -1, -1, -1},
+ { 5, 10, 2, 5, 2, 4, 4, 2, 0, -1, -1, -1, -1, -1, -1, -1},
+ { 3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, -1},
+ { 5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, -1, -1, -1, -1},
+ { 8, 4, 5, 8, 5, 3, 3, 5, 1, -1, -1, -1, -1, -1, -1, -1},
+ { 0, 4, 5, 1, 0, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, -1, -1, -1, -1},
+ { 9, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 4, 11, 7, 4, 9, 11, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1},
+ { 0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, -1, -1, -1, -1},
+ { 1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, -1, -1, -1, -1},
+ { 3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, -1},
+ { 4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, -1, -1, -1, -1},
+ { 9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, -1},
+ {11, 7, 4, 11, 4, 2, 2, 4, 0, -1, -1, -1, -1, -1, -1, -1},
+ {11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, -1, -1, -1, -1},
+ { 2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, -1, -1, -1, -1},
+ { 9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, -1},
+ { 3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, -1},
+ { 1, 10, 2, 8, 7, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 4, 9, 1, 4, 1, 7, 7, 1, 3, -1, -1, -1, -1, -1, -1, -1},
+ { 4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, -1, -1, -1, -1},
+ { 4, 0, 3, 7, 4, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 4, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 9, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 3, 0, 9, 3, 9, 11, 11, 9, 10, -1, -1, -1, -1, -1, -1, -1},
+ { 0, 1, 10, 0, 10, 8, 8, 10, 11, -1, -1, -1, -1, -1, -1, -1},
+ { 3, 1, 10, 11, 3, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 1, 2, 11, 1, 11, 9, 9, 11, 8, -1, -1, -1, -1, -1, -1, -1},
+ { 3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, -1, -1, -1, -1},
+ { 0, 2, 11, 8, 0, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 3, 2, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 2, 3, 8, 2, 8, 10, 10, 8, 9, -1, -1, -1, -1, -1, -1, -1},
+ { 9, 10, 2, 0, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, -1, -1, -1, -1},
+ { 1, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 1, 3, 8, 9, 1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 0, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ { 0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}
+};
+
+
+
+/* Linearly interpolate the position where an isosurface cuts
+ an edge between two vertices, each with their own scalar value
+*/
+static XYZ
+interp_vertex (double isolevel, XYZ p1, XYZ p2, double valp1, double valp2)
+{
+ double mu;
+ XYZ p;
+
+ if (ABS(isolevel-valp1) < 0.00001)
+ return(p1);
+ if (ABS(isolevel-valp2) < 0.00001)
+ return(p2);
+ if (ABS(valp1-valp2) < 0.00001)
+ return(p1);
+ mu = (isolevel - valp1) / (valp2 - valp1);
+ p.x = p1.x + mu * (p2.x - p1.x);
+ p.y = p1.y + mu * (p2.y - p1.y);
+ p.z = p1.z + mu * (p2.z - p1.z);
+
+ return(p);
+}
+
+
+/* Given a grid cell and an isolevel, calculate the triangular
+ facets required to represent the isosurface through the cell.
+ Return the number of triangular facets.
+ `triangles' will be loaded up with the vertices at most 5 triangular facets.
+ 0 will be returned if the grid cell is either totally above
+ of totally below the isolevel.
+
+ By Paul Bourke <pbourke@swin.edu.au>
+*/
+static int
+march_one_cube (GRIDCELL grid, double isolevel, TRIANGLE *triangles)
+{
+ int i, ntriang;
+ int cubeindex;
+ XYZ vertlist[12];
+
+ /*
+ Determine the index into the edge table which
+ tells us which vertices are inside of the surface
+ */
+ cubeindex = 0;
+ if (grid.val[0] < isolevel) cubeindex |= 1;
+ if (grid.val[1] < isolevel) cubeindex |= 2;
+ if (grid.val[2] < isolevel) cubeindex |= 4;
+ if (grid.val[3] < isolevel) cubeindex |= 8;
+ if (grid.val[4] < isolevel) cubeindex |= 16;
+ if (grid.val[5] < isolevel) cubeindex |= 32;
+ if (grid.val[6] < isolevel) cubeindex |= 64;
+ if (grid.val[7] < isolevel) cubeindex |= 128;
+
+ /* Cube is entirely in/out of the surface */
+ if (edgeTable[cubeindex] == 0)
+ return(0);
+
+ /* Find the vertices where the surface intersects the cube */
+ if (edgeTable[cubeindex] & 1)
+ vertlist[0] =
+ interp_vertex (isolevel,grid.p[0],grid.p[1],grid.val[0],grid.val[1]);
+ if (edgeTable[cubeindex] & 2)
+ vertlist[1] =
+ interp_vertex (isolevel,grid.p[1],grid.p[2],grid.val[1],grid.val[2]);
+ if (edgeTable[cubeindex] & 4)
+ vertlist[2] =
+ interp_vertex (isolevel,grid.p[2],grid.p[3],grid.val[2],grid.val[3]);
+ if (edgeTable[cubeindex] & 8)
+ vertlist[3] =
+ interp_vertex (isolevel,grid.p[3],grid.p[0],grid.val[3],grid.val[0]);
+ if (edgeTable[cubeindex] & 16)
+ vertlist[4] =
+ interp_vertex (isolevel,grid.p[4],grid.p[5],grid.val[4],grid.val[5]);
+ if (edgeTable[cubeindex] & 32)
+ vertlist[5] =
+ interp_vertex (isolevel,grid.p[5],grid.p[6],grid.val[5],grid.val[6]);
+ if (edgeTable[cubeindex] & 64)
+ vertlist[6] =
+ interp_vertex (isolevel,grid.p[6],grid.p[7],grid.val[6],grid.val[7]);
+ if (edgeTable[cubeindex] & 128)
+ vertlist[7] =
+ interp_vertex (isolevel,grid.p[7],grid.p[4],grid.val[7],grid.val[4]);
+ if (edgeTable[cubeindex] & 256)
+ vertlist[8] =
+ interp_vertex (isolevel,grid.p[0],grid.p[4],grid.val[0],grid.val[4]);
+ if (edgeTable[cubeindex] & 512)
+ vertlist[9] =
+ interp_vertex (isolevel,grid.p[1],grid.p[5],grid.val[1],grid.val[5]);
+ if (edgeTable[cubeindex] & 1024)
+ vertlist[10] =
+ interp_vertex (isolevel,grid.p[2],grid.p[6],grid.val[2],grid.val[6]);
+ if (edgeTable[cubeindex] & 2048)
+ vertlist[11] =
+ interp_vertex (isolevel,grid.p[3],grid.p[7],grid.val[3],grid.val[7]);
+
+ /* Create the triangle */
+ ntriang = 0;
+ for (i=0; triTable[cubeindex][i] != -1; i+=3)
+ {
+ triangles[ntriang].p[0] = vertlist[triTable[cubeindex][i ]];
+ triangles[ntriang].p[1] = vertlist[triTable[cubeindex][i+1]];
+ triangles[ntriang].p[2] = vertlist[triTable[cubeindex][i+2]];
+ ntriang++;
+ }
+
+ return(ntriang);
+}
+
+
+/* Walking the grid. By jwz.
+ */
+
+#include <GL/gl.h>
+
+/* Normalise a vector */
+static void
+normalize (XYZ *p)
+{
+ double length;
+ length = sqrt(p->x * p->x + p->y * p->y + p->z * p->z);
+ if (length != 0) {
+ p->x /= length;
+ p->y /= length;
+ p->z /= length;
+ } else {
+ p->x = 0;
+ p->y = 0;
+ p->z = 0;
+ }
+}
+
+
+/* Calculate the unit normal at p given two other points
+ p1,p2 on the surface. The normal points in the direction
+ of p1 crossproduct p2
+ */
+static void
+do_plane_normal (XYZ p, XYZ p1, XYZ p2)
+{
+ XYZ n, pa, pb;
+ pa.x = p1.x - p.x;
+ pa.y = p1.y - p.y;
+ pa.z = p1.z - p.z;
+ pb.x = p2.x - p.x;
+ pb.y = p2.y - p.y;
+ pb.z = p2.z - p.z;
+ n.x = pa.y * pb.z - pa.z * pb.y;
+ n.y = pa.z * pb.x - pa.x * pb.z;
+ n.z = pa.x * pb.y - pa.y * pb.x;
+ normalize (&n);
+ glNormal3f (n.x, n.y, n.z);
+}
+
+
+/* Computes the normal of the scalar field at the given point,
+ for vertex normals (as opposed to face normals.)
+ */
+static void
+do_function_normal (double x, double y, double z,
+ double (*compute_fn) (double x, double y, double z,
+ void *closure),
+ void *c)
+{
+ XYZ n;
+ double off = 0.5;
+ n.x = compute_fn (x-off, y, z, c) - compute_fn (x+off, y, z, c);
+ n.y = compute_fn (x, y-off, z, c) - compute_fn (x, y+off, z, c);
+ n.z = compute_fn (x, y, z-off, c) - compute_fn (x, y, z+off, c);
+ normalize (&n);
+ glNormal3f (n.x, n.y, n.z);
+}
+
+
+/* Given a function capable of generating a value at any XYZ position,
+ creates OpenGL faces for the solids defined.
+
+ init_fn is called at the beginning for initial, and returns an object.
+ free_fn is called at the end.
+
+ compute_fn is called for each XYZ in the specified grid, and returns
+ the double value of that coordinate. If smoothing is on, then
+ compute_fn will also be called twice more for each emitted vertex,
+ in order to calculate vertex normals (so don't assume it will only
+ be called with values falling on the grid boundaries.)
+
+ Points are inside an object if the are less than `isolevel', and
+ outside otherwise.
+*/
+void
+marching_cubes (int grid_size, /* density of the mesh */
+ double isolevel, /* cutoff point for "in" versus "out" */
+ int wireframe_p, /* wireframe, or solid */
+ int smooth_p, /* smooth, or faceted */
+
+ void * (*init_fn) (double grid_size, void *closure1),
+ double (*compute_fn) (double x, double y, double z,
+ void *closure2),
+ void (*free_fn) (void *closure2),
+ void *closure1,
+
+ unsigned long *polygon_count)
+{
+ int planesize = grid_size * grid_size;
+ int x, y, z;
+ void *closure2 = 0;
+ unsigned long polys = 0;
+ double *layers;
+
+ layers = (double *) calloc (sizeof (*layers), planesize * 2);
+ if (!layers)
+ {
+ fprintf (stderr, "%s: out of memory for %dx%dx%d grid\n",
+ progname, grid_size, grid_size, 2);
+ exit (1);
+ }
+
+ if (init_fn)
+ closure2 = init_fn (grid_size, closure1);
+
+ glFrontFace(GL_CCW);
+ if (!wireframe_p)
+ glBegin (GL_TRIANGLES);
+
+ for (z = 0; z < grid_size; z++)
+ {
+ double *layer0 = (z & 1 ? layers+planesize : layers);
+ double *layer1 = (z & 1 ? layers : layers+planesize);
+ double *row;
+
+ /* Fill in the XY grid on the currently-bottommost layer. */
+ row = layer1;
+ for (y = 0; y < grid_size; y++, row += grid_size)
+ {
+ double *cell = row;
+ for (x = 0; x < grid_size; x++, cell++)
+ *cell = compute_fn (x, y, z, closure2);
+ }
+
+ /* Now we've completed one layer (an XY slice of Z.) Now we can
+ generate the polygons that fill the space between this layer
+ and the previous one (unless this is the first layer.)
+ */
+ if (z == 0) continue;
+
+ for (y = 1; y < grid_size; y += 1)
+ for (x = 1; x < grid_size; x += 1)
+ {
+ TRIANGLE tri[6];
+ int i, ntri;
+ GRIDCELL cell;
+
+ /* This is kinda hokey, there ought to be a more efficient
+ way to do this... */
+ cell.p[0].x = x-1; cell.p[0].y = y-1; cell.p[0].z = z-1;
+ cell.p[1].x = x ; cell.p[1].y = y-1; cell.p[1].z = z-1;
+ cell.p[2].x = x ; cell.p[2].y = y ; cell.p[2].z = z-1;
+ cell.p[3].x = x-1; cell.p[3].y = y ; cell.p[3].z = z-1;
+ cell.p[4].x = x-1; cell.p[4].y = y-1; cell.p[4].z = z ;
+ cell.p[5].x = x ; cell.p[5].y = y-1; cell.p[5].z = z ;
+ cell.p[6].x = x ; cell.p[6].y = y ; cell.p[6].z = z ;
+ cell.p[7].x = x-1; cell.p[7].y = y ; cell.p[7].z = z ;
+
+# define GRID(X,Y,WHICH) ((WHICH) \
+ ? layer1[((Y)*grid_size) + ((X))] \
+ : layer0[((Y)*grid_size) + ((X))])
+
+ cell.val[0] = GRID (x-1, y-1, 0);
+ cell.val[1] = GRID (x , y-1, 0);
+ cell.val[2] = GRID (x , y , 0);
+ cell.val[3] = GRID (x-1, y , 0);
+ cell.val[4] = GRID (x-1, y-1, 1);
+ cell.val[5] = GRID (x , y-1, 1);
+ cell.val[6] = GRID (x , y , 1);
+ cell.val[7] = GRID (x-1, y , 1);
+# undef GRID
+
+ /* Now generate the triangles for this cubic segment,
+ and emit the GL faces.
+ */
+ ntri = march_one_cube (cell, isolevel, tri);
+ polys += ntri;
+ for (i = 0; i < ntri; i++)
+ {
+ if (wireframe_p) glBegin (GL_LINE_LOOP);
+
+ /* If we're smoothing, we need to call the field function
+ again for each vertex (via function_normal().) If we're
+ not smoothing, then we can just compute the normal from
+ this triangle.
+ */
+ if (!smooth_p)
+ do_plane_normal (tri[i].p[0], tri[i].p[1], tri[i].p[2]);
+
+# define VERT(X,Y,Z) \
+ if (smooth_p) \
+ do_function_normal ((X), (Y), (Z), compute_fn, closure2); \
+ glVertex3f ((X), (Y), (Z))
+
+ VERT (tri[i].p[0].x, tri[i].p[0].y, tri[i].p[0].z);
+ VERT (tri[i].p[1].x, tri[i].p[1].y, tri[i].p[1].z);
+ VERT (tri[i].p[2].x, tri[i].p[2].y, tri[i].p[2].z);
+# undef VERT
+ if (wireframe_p) glEnd ();
+ }
+ }
+ }
+
+ if (!wireframe_p)
+ glEnd ();
+
+ free (layers);
+
+ if (free_fn)
+ free_fn (closure2);
+
+ if (polygon_count)
+ *polygon_count = polys;
+}
--- /dev/null
+/* xscreensaver, Copyright (c) 2002 Jamie Zawinski <jwz@jwz.org>
+ * Utility functions to create "marching cubes" meshes from 3d fields.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation. No representations are made about the suitability of this
+ * software for any purpose. It is provided "as is" without express or
+ * implied warranty.
+ */
+
+#ifndef __MARCHING_H__
+#define __MARCHING_H__
+
+/* Given a function capable of generating a value at any XYZ position,
+ creates OpenGL faces for the solids defined.
+
+ init_fn is called at the beginning for initial, and returns an object.
+ free_fn is called at the end.
+
+ compute_fn is called for each XYZ in the specified grid, and returns
+ the double value of that coordinate. If smoothing is on, then
+ compute_fn will also be called twice more for each emitted vertex,
+ in order to calculate vertex normals (so don't assume it will only
+ be called with values falling on the grid boundaries.)
+
+ Points are inside an object if the are less than `isolevel', and
+ outside otherwise.
+
+ If polygon_count is specified, the number of faces generated will be
+ returned there.
+*/
+extern void
+marching_cubes (int grid_size, /* density of the mesh */
+ double isolevel, /* cutoff point for "in" versus "out" */
+ int wireframe_p, /* wireframe, or solid */
+ int smooth_p, /* smooth, or faceted */
+
+ void * (*init_fn) (double grid_size, void *closure1),
+ double (*compute_fn) (double x, double y, double z,
+ void *closure2),
+ void (*free_fn) (void *closure2),
+ void *closure1,
+
+ unsigned long *polygon_count);
+
+#endif /* __MARCHING_H__ */
#define HACK_INIT init_sponge
#define HACK_DRAW draw_sponge
#define HACK_RESHAPE reshape_sponge
+#define HACK_HANDLE_EVENT sponge_handle_event
+#define EVENT_MASK PointerMotionMask
#define sws_opts xlockmore_opts
#define DEF_SPIN "True"
#include "xlockmore.h"
#include "colors.h"
+#include "rotator.h"
+#include "gltrackball.h"
#include <ctype.h>
#ifdef USE_GL /* whole file */
typedef struct {
GLXContext *glx_context;
-
- GLfloat rotx, roty, rotz; /* current object rotation */
- GLfloat dx, dy, dz; /* current rotational velocity */
- GLfloat ddx, ddy, ddz; /* current rotational acceleration */
- GLfloat d_max; /* max velocity */
-
+ rotator *rot;
+ trackball_state *trackball;
+ Bool button_down_p;
GLuint sponge_list0; /* we store X, Y, and Z-facing surfaces */
GLuint sponge_list1; /* in their own lists, to make it easy */
GLuint sponge_list2; /* to color them differently. */
static sponge_configuration *sps = NULL;
-static char *do_spin;
+static Bool do_spin;
static Bool do_wander;
static int speed;
static Bool do_optimize;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
+ gluPerspective (30.0, 1/h, 1.0, 100.0);
- gluPerspective( 30.0, 1/h, 1.0, 100.0 );
- gluLookAt( 0.0, 0.0, 15.0,
- 0.0, 0.0, 0.0,
- 0.0, 1.0, 0.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
- glTranslatef(0.0, 0.0, -15.0);
+ gluLookAt( 0.0, 0.0, 30.0,
+ 0.0, 0.0, 0.0,
+ 0.0, 1.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
}
-/* lifted from lament.c */
-#define RAND(n) ((long) ((random() & 0x7fffffff) % ((long) (n))))
-#define RANDSIGN() ((random() & 1) ? 1 : -1)
-
-static void
-rotate(GLfloat *pos, GLfloat *v, GLfloat *dv, GLfloat max_v)
-{
- double ppos = *pos;
-
- /* tick position */
- if (ppos < 0)
- ppos = -(ppos + *v);
- else
- ppos += *v;
-
- if (ppos > 1.0)
- ppos -= 1.0;
- else if (ppos < 0)
- ppos += 1.0;
-
- if (ppos < 0) abort();
- if (ppos > 1.0) abort();
- *pos = (*pos > 0 ? ppos : -ppos);
-
- /* accelerate */
- *v += *dv;
-
- /* clamp velocity */
- if (*v > max_v || *v < -max_v)
- {
- *dv = -*dv;
- }
- /* If it stops, start it going in the other direction. */
- else if (*v < 0)
- {
- if (random() % 4)
- {
- *v = 0;
-
- /* keep going in the same direction */
- if (random() % 2)
- *dv = 0;
- else if (*dv < 0)
- *dv = -*dv;
- }
- else
- {
- /* reverse gears */
- *v = -*v;
- *dv = -*dv;
- *pos = -*pos;
- }
- }
-
- /* Alter direction of rotational acceleration randomly. */
- if (! (random() % 120))
- *dv = -*dv;
-
- /* Change acceleration very occasionally. */
- if (! (random() % 200))
- {
- if (*dv == 0)
- *dv = 0.00001;
- else if (random() & 1)
- *dv *= 1.2;
- else
- *dv *= 0.8;
- }
-}
-
-
/* Pushes a 1x1x1 cube at XYZ into the sp->squares list.
*/
static void
}
+Bool
+sponge_handle_event (ModeInfo *mi, XEvent *event)
+{
+ sponge_configuration *sp = &sps[MI_SCREEN(mi)];
+
+ if (event->xany.type == ButtonPress &&
+ event->xbutton.button & Button1)
+ {
+ sp->button_down_p = True;
+ gltrackball_start (sp->trackball,
+ event->xbutton.x, event->xbutton.y,
+ MI_WIDTH (mi), MI_HEIGHT (mi));
+ return True;
+ }
+ else if (event->xany.type == ButtonRelease &&
+ event->xbutton.button & Button1)
+ {
+ sp->button_down_p = False;
+ return True;
+ }
+ else if (event->xany.type == MotionNotify &&
+ sp->button_down_p)
+ {
+ gltrackball_track (sp->trackball,
+ event->xmotion.x, event->xmotion.y,
+ MI_WIDTH (mi), MI_HEIGHT (mi));
+ return True;
+ }
+
+ return False;
+}
+
+
+
void
init_sponge (ModeInfo *mi)
{
glEnable(GL_CULL_FACE);
}
- sp->rotx = frand(1.0) * RANDSIGN();
- sp->roty = frand(1.0) * RANDSIGN();
- sp->rotz = frand(1.0) * RANDSIGN();
-
- /* bell curve from 0-3 degrees, avg 1.5 */
- sp->dx = (frand(1) + frand(1) + frand(1)) / (360/2);
- sp->dy = (frand(1) + frand(1) + frand(1)) / (360/2);
- sp->dz = (frand(1) + frand(1) + frand(1)) / (360/2);
-
- sp->d_max = sp->dx * 2;
-
- sp->ddx = 0.00006 + frand(0.00003);
- sp->ddy = 0.00006 + frand(0.00003);
- sp->ddz = 0.00006 + frand(0.00003);
+ {
+ double spin_speed = 1.0;
+ double wander_speed = 0.03;
+ sp->rot = make_rotator (do_spin ? spin_speed : 0,
+ do_spin ? spin_speed : 0,
+ do_spin ? spin_speed : 0,
+ 1.0,
+ do_wander ? wander_speed : 0,
+ True);
+ sp->trackball = gltrackball_init ();
+ }
sp->ncolors = 128;
sp->colors = (XColor *) calloc(sp->ncolors, sizeof(XColor));
glScalef(1.1, 1.1, 1.1);
{
- GLfloat x, y, z;
-
- if (do_wander)
- {
- static int frame = 0;
-
-# define SINOID(SCALE,SIZE) \
- ((((1 + sin((frame * (SCALE)) / 2 * M_PI)) / 2.0) * (SIZE)) - (SIZE)/2)
-
- x = SINOID(0.0071, 8.0);
- y = SINOID(0.0053, 6.0);
- z = SINOID(0.0037, 15.0);
- frame++;
- glTranslatef(x, y, z);
- }
-
- if (do_spin)
- {
- x = sp->rotx;
- y = sp->roty;
- z = sp->rotz;
- if (x < 0) x = 1 - (x + 1);
- if (y < 0) y = 1 - (y + 1);
- if (z < 0) z = 1 - (z + 1);
-
- glRotatef(x * 360, 1.0, 0.0, 0.0);
- glRotatef(y * 360, 0.0, 1.0, 0.0);
- glRotatef(z * 360, 0.0, 0.0, 1.0);
-
- rotate(&sp->rotx, &sp->dx, &sp->ddx, sp->d_max);
- rotate(&sp->roty, &sp->dy, &sp->ddy, sp->d_max);
- rotate(&sp->rotz, &sp->dz, &sp->ddz, sp->d_max);
- }
+ double x, y, z;
+ get_position (sp->rot, &x, &y, &z, !sp->button_down_p);
+ glTranslatef((x - 0.5) * 8,
+ (y - 0.5) * 6,
+ (z - 0.5) * 15);
+
+ gltrackball_rotate (sp->trackball);
+
+ get_rotation (sp->rot, &x, &y, &z, !sp->button_down_p);
+ glRotatef (x * 360, 1.0, 0.0, 0.0);
+ glRotatef (y * 360, 0.0, 1.0, 0.0);
+ glRotatef (z * 360, 0.0, 0.0, 1.0);
}
color0[0] = sp->colors[sp->ccolor0].red / 65536.0;
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+menger - 3D menger gasket fractal.
+.SH SYNOPSIS
+.B menger
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+[\-speed \fInumber\fP]
+[\-depth \fInumber\fP]
+[\-no-wander]
+[\-no-spin]
+[\-spin \fI[XYZ]\fP]
+[\-wireframe]
+[\-fps]
+.SH DESCRIPTION
+This draws the three-dimensional variant of the recursive Menger Gasket, a
+cube-based fractal object analagous to the Sierpinski Tetrahedron.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 30000 (0.03 seconds.).
+.TP 8
+.B \-speed \fInumber\fP
+Number of frames before changing shape. Default: 150.
+.TP 8
+.B \-depth \fInumber\fP
+Max depth to descend. Default: 3. You probably don't have enough
+memory for 6.
+.TP 8
+.B \-wander | \-no-wander
+Whether the object should wander around the screen.
+.TP 8
+.B \-spin [XYZ]
+Around which axes should the object spin?
+.TP 8
+.B \-no-spin
+None.
+.TP 8
+.B \-wireframe
+Render in wireframe instead of solid.
+.TP 8
+.B \-fps | \-no-fps
+Whether to show a frames-per-second display at the bottom of the screen.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Jamie Zawinski. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Jamie Zawinski.
# define HACK_INIT init_moebius
# define HACK_DRAW draw_moebius
# define HACK_RESHAPE reshape_moebius
+# define HACK_HANDLE_EVENT moebius_handle_event
+# define EVENT_MASK PointerMotionMask
# define moebius_opts xlockmore_opts
# define DEFAULTS "*delay: 20000 \n" \
"*showFPS: False \n" \
#include <GL/glu.h>
#include "e_textures.h"
+#include "rotator.h"
+#include "gltrackball.h"
#define DEF_SOLIDMOEBIUS "False"
#define DEF_NOANTS "False"
GLfloat step;
GLfloat ant_position;
GLXContext *glx_context;
-
- GLfloat rotx, roty, rotz; /* current object rotation */
- GLfloat dx, dy, dz; /* current rotational velocity */
- GLfloat ddx, ddy, ddz; /* current rotational acceleration */
- GLfloat d_max; /* max velocity */
-
+ rotator *rot;
+ trackball_state *trackball;
+ Bool button_down_p;
} moebiusstruct;
static float front_shininess[] =
-/* lifted from lament.c */
-#define RANDSIGN() ((LRAND() & 1) ? 1 : -1)
-#define FLOATRAND(a) (((double)LRAND() / (double)MAXRAND) * a)
-
-static void
-rotate(GLfloat *pos, GLfloat *v, GLfloat *dv, GLfloat max_v, Bool verbose)
+void
+release_moebius(ModeInfo * mi)
{
- double ppos = *pos;
-
- /* tick position */
- if (ppos < 0)
- ppos = -(ppos + *v);
- else
- ppos += *v;
-
- if (ppos > 1.0)
- ppos -= 1.0;
- else if (ppos < 0)
- ppos += 1.0;
-
- if ((ppos < 0.0) || (ppos > 1.0)) {
- if (verbose) {
- (void) fprintf(stderr, "Weirdness in rotate()\n");
- (void) fprintf(stderr, "ppos = %g\n", ppos);
- }
- return;
- }
-
- *pos = (*pos > 0 ? ppos : -ppos);
+ if (moebius != NULL) {
+ (void) free((void *) moebius);
+ moebius = (moebiusstruct *) NULL;
+ }
+ FreeAllGL(mi);
+}
- /* accelerate */
- *v += *dv;
+Bool
+moebius_handle_event (ModeInfo *mi, XEvent *event)
+{
+ moebiusstruct *mp = &moebius[MI_SCREEN(mi)];
- /* clamp velocity */
- if (*v > max_v || *v < -max_v)
+ if (event->xany.type == ButtonPress &&
+ event->xbutton.button & Button1)
{
- *dv = -*dv;
+ mp->button_down_p = True;
+ gltrackball_start (mp->trackball,
+ event->xbutton.x, event->xbutton.y,
+ MI_WIDTH (mi), MI_HEIGHT (mi));
+ return True;
}
- /* If it stops, start it going in the other direction. */
- else if (*v < 0)
+ else if (event->xany.type == ButtonRelease &&
+ event->xbutton.button & Button1)
{
- if (random() % 4)
- {
- *v = 0;
-
- /* keep going in the same direction */
- if (random() % 2)
- *dv = 0;
- else if (*dv < 0)
- *dv = -*dv;
- }
- else
- {
- /* reverse gears */
- *v = -*v;
- *dv = -*dv;
- *pos = -*pos;
- }
+ mp->button_down_p = False;
+ return True;
}
-
- /* Alter direction of rotational acceleration randomly. */
- if (! (random() % 120))
- *dv = -*dv;
-
- /* Change acceleration very occasionally. */
- if (! (random() % 200))
+ else if (event->xany.type == MotionNotify &&
+ mp->button_down_p)
{
- if (*dv == 0)
- *dv = 0.00001;
- else if (random() & 1)
- *dv *= 1.2;
- else
- *dv *= 0.8;
+ gltrackball_track (mp->trackball,
+ event->xmotion.x, event->xmotion.y,
+ MI_WIDTH (mi), MI_HEIGHT (mi));
+ return True;
}
-}
-void
-release_moebius(ModeInfo * mi)
-{
- if (moebius != NULL) {
- (void) free((void *) moebius);
- moebius = (moebiusstruct *) NULL;
- }
- FreeAllGL(mi);
+ return False;
}
+
void
init_moebius(ModeInfo * mi)
{
mp->step = NRAND(90);
mp->ant_position = NRAND(90);
- mp->rotx = FLOATRAND(1.0) * RANDSIGN();
- mp->roty = FLOATRAND(1.0) * RANDSIGN();
- mp->rotz = FLOATRAND(1.0) * RANDSIGN();
-
- /* bell curve from 0-1.5 degrees, avg 0.75 */
- mp->dx = (FLOATRAND(1) + FLOATRAND(1) + FLOATRAND(1)) / (360*2);
- mp->dy = (FLOATRAND(1) + FLOATRAND(1) + FLOATRAND(1)) / (360*2);
- mp->dz = (FLOATRAND(1) + FLOATRAND(1) + FLOATRAND(1)) / (360*2);
-
- mp->d_max = mp->dx * 2;
-
- mp->ddx = 0.00006 + FLOATRAND(0.00003);
- mp->ddy = 0.00006 + FLOATRAND(0.00003);
- mp->ddz = 0.00006 + FLOATRAND(0.00003);
-
- mp->ddx = 0.00001;
- mp->ddy = 0.00001;
- mp->ddz = 0.00001;
+ {
+ double rot_speed = 0.3;
+ mp->rot = make_rotator (rot_speed, rot_speed, rot_speed, 1, 0, True);
+ mp->trackball = gltrackball_init ();
+ }
if ((mp->glx_context = init_GL(mi)) != NULL) {
glTranslatef(0.0, 0.0, -10.0);
+ gltrackball_rotate (mp->trackball);
+
if (!MI_IS_ICONIC(mi)) {
glScalef(Scale4Window * mp->WindH / mp->WindW, Scale4Window, Scale4Window);
} else {
}
{
- GLfloat x = mp->rotx;
- GLfloat y = mp->roty;
- GLfloat z = mp->rotz;
- if (x < 0) x = 1 - (x + 1);
- if (y < 0) y = 1 - (y + 1);
- if (z < 0) z = 1 - (z + 1);
- glRotatef(x * 360, 1.0, 0.0, 0.0);
- glRotatef(y * 360, 0.0, 1.0, 0.0);
- glRotatef(z * 360, 0.0, 0.0, 1.0);
+ double x, y, z;
+ get_rotation (mp->rot, &x, &y, &z, !mp->button_down_p);
+ glRotatef (x * 360, 1.0, 0.0, 0.0);
+ glRotatef (y * 360, 0.0, 1.0, 0.0);
+ glRotatef (z * 360, 0.0, 0.0, 1.0);
}
/* moebius */
glPopMatrix();
- rotate(&mp->rotx, &mp->dx, &mp->ddx, mp->d_max, MI_IS_VERBOSE(mi));
- rotate(&mp->roty, &mp->dy, &mp->ddy, mp->d_max, MI_IS_VERBOSE(mi));
- rotate(&mp->rotz, &mp->dz, &mp->ddz, mp->d_max, MI_IS_VERBOSE(mi));
-
if (MI_IS_FPS(mi)) do_fps (mi);
glFlush();
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+moebius - Escher's Moebuis Strip II, with ants.
+.SH SYNOPSIS
+.B moebius
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[-delay \fInumber\fP]
+[-solidmoebius]
+[-wireframe]
+[-noants]
+[-fps]
+.SH DESCRIPTION
+Another M. C. Escher hack by Marcelo Vianna, this one draws ``Moebius Strip
+II,'' a GL image of ants walking along the surface of a moebius strip.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 20000 (0.02 seconds.).
+.TP 8
+.B \-solidmoebius
+Solid Floor.
+.TP 8
+.B \-wireframe
+Render in wireframe instead of solid.
+.TP 8
+.B \-noants | \-no-noants
+Draw Ants. Boolean.
+.TP 8
+.B \-fps | \-no-fps
+Whether to show a frames-per-second display at the bottom of the screen.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Marcelo Vianna. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Marcelo Vianna.
#define HACK_INIT init_molecule
#define HACK_DRAW draw_molecule
#define HACK_RESHAPE reshape_molecule
+#define HACK_HANDLE_EVENT molecule_handle_event
+#define EVENT_MASK PointerMotionMask
#define molecule_opts xlockmore_opts
#define DEF_TIMEOUT "20"
#include "colors.h"
#include "sphere.h"
#include "tube.h"
+#include "rotator.h"
+#include "gltrackball.h"
#ifdef USE_GL /* whole file */
#include <stdlib.h>
#include <ctype.h>
+#include <time.h>
+#include <sys/time.h>
#include <GL/glu.h>
#define SPHERE_SLICES 16 /* how densely to render spheres */
typedef struct {
GLXContext *glx_context;
-
- GLfloat rotx, roty, rotz; /* current object rotation */
- GLfloat dx, dy, dz; /* current rotational velocity */
- GLfloat ddx, ddy, ddz; /* current rotational acceleration */
- GLfloat d_max; /* max velocity */
-
- Bool spin_x, spin_y, spin_z;
+ rotator *rot;
+ trackball_state *trackball;
+ Bool button_down_p;
GLfloat molecule_size; /* max dimension of molecule bounding box */
{ "-molecule", ".molecule", XrmoptionSepArg, 0 },
{ "-timeout",".timeout",XrmoptionSepArg, 0 },
{ "-spin", ".spin", XrmoptionSepArg, 0 },
- { "+spin", ".spin", XrmoptionNoArg, "False" },
+ { "+spin", ".spin", XrmoptionNoArg, "" },
{ "-wander", ".wander", XrmoptionNoArg, "True" },
{ "+wander", ".wander", XrmoptionNoArg, "False" },
{ "-labels", ".labels", XrmoptionNoArg, "True" },
else if (!strncmp (s, "CONECT ", 7))
{
int atoms[11];
- int i = sscanf (s + 8, " %d %d %d %d %d %d %d %d %d %d %d ",
+ int i = sscanf (s + 8, " %d %d %d %d %d %d %d %d %d %d %d %d ",
&atoms[0], &atoms[1], &atoms[2], &atoms[3],
&atoms[4], &atoms[5], &atoms[6], &atoms[7],
&atoms[8], &atoms[9], &atoms[10], &atoms[11]);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
-
- gluPerspective( 30.0, 1/h, 20.0, 40.0 );
- gluLookAt( 0.0, 0.0, 15.0,
- 0.0, 0.0, 0.0,
- 0.0, 1.0, 0.0);
+ gluPerspective (30.0, 1/h, 20.0, 40.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
- glTranslatef(0.0, 0.0, -15.0);
+ gluLookAt( 0.0, 0.0, 30.0,
+ 0.0, 0.0, 0.0,
+ 0.0, 1.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
}
}
-/* lifted from lament.c */
-#define RAND(n) ((long) ((random() & 0x7fffffff) % ((long) (n))))
-#define RANDSIGN() ((random() & 1) ? 1 : -1)
-
-static void
-rotate(GLfloat *pos, GLfloat *v, GLfloat *dv, GLfloat max_v)
-{
- double ppos = *pos;
-
- /* tick position */
- if (ppos < 0)
- ppos = -(ppos + *v);
- else
- ppos += *v;
-
- if (ppos > 1.0)
- ppos -= 1.0;
- else if (ppos < 0)
- ppos += 1.0;
-
- if (ppos < 0) abort();
- if (ppos > 1.0) abort();
- *pos = (*pos > 0 ? ppos : -ppos);
-
- /* accelerate */
- *v += *dv;
-
- /* clamp velocity */
- if (*v > max_v || *v < -max_v)
- {
- *dv = -*dv;
- }
- /* If it stops, start it going in the other direction. */
- else if (*v < 0)
- {
- if (random() % 4)
- {
- *v = 0;
-
- /* keep going in the same direction */
- if (random() % 2)
- *dv = 0;
- else if (*dv < 0)
- *dv = -*dv;
- }
- else
- {
- /* reverse gears */
- *v = -*v;
- *dv = -*dv;
- *pos = -*pos;
- }
- }
-
- /* Alter direction of rotational acceleration randomly. */
- if (! (random() % 120))
- *dv = -*dv;
-
- /* Change acceleration very occasionally. */
- if (! (random() % 200))
- {
- if (*dv == 0)
- *dv = 0.00001;
- else if (random() & 1)
- *dv *= 1.2;
- else
- *dv *= 0.8;
- }
-}
-
-
static void
startup_blurb (ModeInfo *mi)
{
glXSwapBuffers(MI_DISPLAY(mi), MI_WINDOW(mi));
}
+Bool
+molecule_handle_event (ModeInfo *mi, XEvent *event)
+{
+ molecule_configuration *mc = &mcs[MI_SCREEN(mi)];
+
+ if (event->xany.type == ButtonPress &&
+ event->xbutton.button & Button1)
+ {
+ mc->button_down_p = True;
+ gltrackball_start (mc->trackball,
+ event->xbutton.x, event->xbutton.y,
+ MI_WIDTH (mi), MI_HEIGHT (mi));
+ return True;
+ }
+ else if (event->xany.type == ButtonRelease &&
+ event->xbutton.button & Button1)
+ {
+ mc->button_down_p = False;
+ return True;
+ }
+ else if (event->xany.type == MotionNotify &&
+ mc->button_down_p)
+ {
+ gltrackball_track (mc->trackball,
+ event->xmotion.x, event->xmotion.y,
+ MI_WIDTH (mi), MI_HEIGHT (mi));
+ return True;
+ }
+
+ return False;
+}
+
+
void
init_molecule (ModeInfo *mi)
{
wire = MI_IS_WIREFRAME(mi);
- mc->rotx = frand(1.0) * RANDSIGN();
- mc->roty = frand(1.0) * RANDSIGN();
- mc->rotz = frand(1.0) * RANDSIGN();
-
- /* bell curve from 0-6 degrees, avg 3 */
- mc->dx = (frand(1) + frand(1) + frand(1)) / (360/2);
- mc->dy = (frand(1) + frand(1) + frand(1)) / (360/2);
- mc->dz = (frand(1) + frand(1) + frand(1)) / (360/2);
-
- mc->d_max = mc->dx * 2;
-
- mc->ddx = 0.00006 + frand(0.00003);
- mc->ddy = 0.00006 + frand(0.00003);
- mc->ddz = 0.00006 + frand(0.00003);
-
{
+ Bool spinx=False, spiny=False, spinz=False;
+ double spin_speed = 2.0;
+ double wander_speed = 0.03;
+
char *s = do_spin;
while (*s)
{
- if (*s == 'x' || *s == 'X') mc->spin_x = 1;
- else if (*s == 'y' || *s == 'Y') mc->spin_y = 1;
- else if (*s == 'z' || *s == 'Z') mc->spin_z = 1;
+ if (*s == 'x' || *s == 'X') spinx = True;
+ else if (*s == 'y' || *s == 'Y') spiny = True;
+ else if (*s == 'z' || *s == 'Z') spinz = True;
else
{
fprintf (stderr,
}
s++;
}
+
+ mc->rot = make_rotator (spinx ? spin_speed : 0,
+ spiny ? spin_speed : 0,
+ spinz ? spin_speed : 0,
+ 1.0,
+ do_wander ? wander_speed : 0,
+ True);
+ mc->trackball = gltrackball_init ();
}
mc->molecule_dlist = glGenLists(1);
if (!mc->glx_context)
return;
- if (last + timeout <= now) /* randomize molecules every -timeout seconds */
+ if (last + timeout <= now && /* randomize molecules every -timeout seconds */
+ !mc->button_down_p)
{
if (mc->nmolecules == 1)
{
glScalef(1.1, 1.1, 1.1);
{
- GLfloat x, y, z;
-
- if (do_wander)
- {
- static int frame = 0;
-
-# define SINOID(SCALE,SIZE) \
- ((((1 + sin((frame * (SCALE)) / 2 * M_PI)) / 2.0) * (SIZE)) - (SIZE)/2)
-
- x = SINOID(0.031, 9.0);
- y = SINOID(0.023, 9.0);
- z = SINOID(0.017, 9.0);
- frame++;
- glTranslatef(x, y, z);
- }
-
- if (mc->spin_x || mc->spin_y || mc->spin_z)
- {
- x = mc->rotx;
- y = mc->roty;
- z = mc->rotz;
- if (x < 0) x = 1 - (x + 1);
- if (y < 0) y = 1 - (y + 1);
- if (z < 0) z = 1 - (z + 1);
-
- if (mc->spin_x) glRotatef(x * 360, 1.0, 0.0, 0.0);
- if (mc->spin_y) glRotatef(y * 360, 0.0, 1.0, 0.0);
- if (mc->spin_z) glRotatef(z * 360, 0.0, 0.0, 1.0);
-
- rotate(&mc->rotx, &mc->dx, &mc->ddx, mc->d_max);
- rotate(&mc->roty, &mc->dy, &mc->ddy, mc->d_max);
- rotate(&mc->rotz, &mc->dz, &mc->ddz, mc->d_max);
- }
+ double x, y, z;
+ get_position (mc->rot, &x, &y, &z, !mc->button_down_p);
+ glTranslatef((x - 0.5) * 9,
+ (y - 0.5) * 9,
+ (z - 0.5) * 9);
+
+ gltrackball_rotate (mc->trackball);
+
+ get_rotation (mc->rot, &x, &y, &z, !mc->button_down_p);
+ glRotatef (x * 360, 1.0, 0.0, 0.0);
+ glRotatef (y * 360, 0.0, 1.0, 0.0);
+ glRotatef (z * 360, 0.0, 0.0, 1.0);
}
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+morph3d - 3d morphing objects.
+.SH SYNOPSIS
+.B morph3d
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-count \fInumber\fP]
+[\-delay \fInumber\fP]
+[\-fps]
+.SH DESCRIPTION
+Another 3d shape-changing GL hack. It has the same shiny-plastic feel
+as Superquadrics, as many computer-generated objects do...
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-count \fInumber\fP
+0 - 20. Default: 0.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 40000 (0.04 seconds.).
+.TP 8
+.B \-fps | \-no-fps
+Whether to show a frames-per-second display at the bottom of the screen.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Marcelo Vianna. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Marcelo Vianna.
\ No newline at end of file
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+pipes - fill the screen with a plumbing system.
+.SH SYNOPSIS
+.B pipes
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[-count 0]
+[-count 1]
+[-cycles \fInumber\fP]
+[-size \fInumber\fP]
+[-factory \fInumber\fP]
+[-delay \fInumber\fP]
+[-no-fisheye]
+[-tightturns]
+[-db]
+[-fps]
+.SH DESCRIPTION
+If you've ever been in the same room with a Windows NT machine, you've
+probably seen this GL hack. It fills the screen with a plumbing system.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-count 0
+Curved Pipes.
+.TP 8
+.B \-count 1
+Ball Joints.
+.TP 8
+.B \-cycles \fInumber\fP
+Number of pipe systems to draw at once. Default: 5.
+.TP 8
+.B \-size \fInumber\fP
+Length of each pipe system. Default: 500.
+.TP 8
+.B \-factory \fInumber\fP
+How much gadgetry to create; Useful range is 0-10. Default: 2.
+.TP 8
+.B \-delay \fInumber\fP
+How long (in microseconds) to sleep between frames. Default: 100.
+.TP 8
+.B \-fisheye | \-no-fisheye
+Whether to use a fisheye lens.
+.TP 8
+.B \-tightturns | \-no-tightturns
+Whether to allow tight turns.
+.TP 8
+.B \-db | \-no-db
+Whether to double-buffer.
+.TP 8
+.B \-fps | \-no-fps
+Whether to show a frames-per-second display at the bottom of the screen.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Marcelo Vianna. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Marcelo Vianna.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+pulsar - intersecting planes, alpha blending, fog, and textures.
+.SH SYNOPSIS
+.B pulsar
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-no-light]
+[\-wire]
+[\-delay \fInumber\fP]
+[\-quads \fInumber\fP]
+[\-bitmap \fIfile\fP]
+[\-light]
+[\-fog]
+[\-texture]
+[\-mipmap]
+[\-no-blend]
+[\-antialias]
+[\-texture_quality]
+[\-do_depth]
+[\-fps]
+.SH DESCRIPTION
+Draws some intersecting planes, making use of alpha blending, fog,
+textures, and mipmaps, plus a ``frames per second'' meter so that you can
+tell how fast your graphics card is... Requires OpenGL.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-light | \-no-light
+Use Flat Coloring.
+.TP 8
+.B \-wire
+Render in wireframe instead of solid.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.).
+.TP 8
+.B \-bitmap \fIfile\fP
+The texture map to use.
+.TP 8
+.B \-quads \fInumber\fP
+Quad Count. 1 - 50. Default: 5.
+.TP 8
+.B \-light | \-no-light
+Whether to enable lighting.
+.TP 8
+.B \-fog | \-no-fog
+Whether to enable fog.
+.TP 8
+.B \-texture | \-no-texture
+Whether to enable texturing.
+.TP 8
+.B \-mipmap | \-no-mipmap
+Whether to enable texture mipmaps.
+.TP 8
+.B \-blend | \-no-blend
+Whether to enable blending.
+.TP 8
+.B \-antialias | \-no-antialias
+Whether to anti-alias lines.
+.TP 8
+.B \-texture_quality | \-no-texture_quality
+Whether to enable texture filtering.
+.TP 8
+.B \-do_depth | \-no-do_depth
+Whether to enable depth buffer.
+.TP 8
+.B \-fps | \-no-fps
+Whether to show a frames-per-second display at the bottom of the screen.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by David Konerding. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+David Konerding.
--- /dev/null
+/*
+ * queens - solves n queens problem, displays
+ * i make no claims that this is an optimal solution to the problem,
+ * good enough for xss
+ * hacked from glchess
+ *
+ * version 1.0 - May 10, 2002
+ *
+ * Copyright (C) 2002 Blair Tennessy (tennessb@unbc.ca)
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation. No representations are made about the suitability of this
+ * software for any purpose. It is provided "as is" without express or
+ * implied warranty.
+ */
+
+#include <X11/Intrinsic.h>
+
+#ifdef STANDALONE
+# define PROGCLASS "Queens"
+# define HACK_INIT init_queens
+# define HACK_DRAW draw_queens
+# define HACK_RESHAPE reshape_queens
+# define HACK_HANDLE_EVENT queens_handle_event
+# define EVENT_MASK PointerMotionMask
+# define queens_opts xlockmore_opts
+
+#define DEFAULTS "*delay: 20000 \n" \
+ "*showFPS: False \n" \
+ "*wireframe: False \n" \
+
+# include "xlockmore.h"
+
+#else
+# include "xlock.h"
+#endif
+
+#ifdef USE_GL
+
+#include <GL/glu.h>
+#include "gltrackball.h"
+
+#undef countof
+#define countof(x) (sizeof((x))/sizeof((*x)))
+
+static XrmOptionDescRec opts[] = {
+ {"+rotate", ".queens.rotate", XrmoptionNoArg, (caddr_t) "false" },
+ {"-rotate", ".queens.rotate", XrmoptionNoArg, (caddr_t) "true" },
+};
+
+int rotate;
+
+static argtype vars[] = {
+ {(caddr_t *) &rotate, "rotate", "Rotate", "True", t_Bool},
+};
+
+ModeSpecOpt queens_opts = {countof(opts), opts, countof(vars), vars, NULL};
+
+#ifdef USE_MODULES
+ModStruct queens_description =
+{"queens", "init_queens", "draw_queens", "release_queens",
+ "draw_queens", "init_queens", NULL, &queens_opts,
+ 1000, 1, 2, 1, 4, 1.0, "",
+ "Queens", 0, NULL};
+
+#endif
+
+typedef struct {
+ GLXContext *glx_context;
+ Window window;
+ trackball_state *trackball;
+ Bool button_down_p;
+} Queenscreen;
+
+static Queenscreen *qs = NULL;
+
+#include <math.h>
+#include <sys/time.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifndef M_PI
+#define M_PI 3.14159265
+#endif
+
+#define NONE 0
+#define QUEEN 1
+#define MINBOARD 5
+#define MAXBOARD 10
+
+/* definition of white/black colors */
+GLfloat colors[2][3] = { {0.5, 0.7, 0.9},
+ {0.2, 0.3, 0.6} };
+
+int board[MAXBOARD][MAXBOARD];
+int work = 0, vb = 0, steps = 0, BOARDSIZE = 8; /* 8 cuz its classic */
+
+Bool
+queens_handle_event (ModeInfo *mi, XEvent *event)
+{
+ Queenscreen *c = &qs[MI_SCREEN(mi)];
+
+ if (event->xany.type == ButtonPress &&
+ event->xbutton.button & Button1)
+ {
+ c->button_down_p = True;
+ gltrackball_start (c->trackball,
+ event->xbutton.x, event->xbutton.y,
+ MI_WIDTH (mi), MI_HEIGHT (mi));
+ return True;
+ }
+ else if (event->xany.type == ButtonRelease &&
+ event->xbutton.button & Button1)
+ {
+ c->button_down_p = False;
+ return True;
+ }
+ else if (event->xany.type == MotionNotify &&
+ c->button_down_p)
+ {
+ gltrackball_track (c->trackball,
+ event->xmotion.x, event->xmotion.y,
+ MI_WIDTH (mi), MI_HEIGHT (mi));
+ return True;
+ }
+
+ return False;
+}
+
+
+
+/* returns true if placing a queen on column c causes a conflict */
+int conflictsCols(int c) {
+ int i;
+
+ for(i = 0; i < BOARDSIZE; ++i)
+ if(board[i][c])
+ return 1;
+
+ return 0;
+}
+
+/* returns true if placing a queen on (r,c) causes a diagonal conflict */
+int conflictsDiag(int r, int c) {
+ int i;
+
+ /* positive slope */
+ int n = r < c ? r : c;
+ for(i = 0; i < BOARDSIZE-abs(r-c); ++i)
+ if(board[r-n+i][c-n+i])
+ return 1;
+
+ /* negative slope */
+ n = r < BOARDSIZE - (c+1) ? r : BOARDSIZE - (c+1);
+ for(i = 0; i < BOARDSIZE-abs(BOARDSIZE - (1+r+c)); ++i)
+ if(board[r-n+i][c+n-i])
+ return 1;
+
+ return 0;
+}
+
+/* returns true if placing a queen at (r,c) causes a conflict */
+int conflicts(int r, int c) {
+ return !conflictsCols(c) ? conflictsDiag(r, c) : 1;
+}
+
+/* clear board */
+void blank(void) {
+ int i, j;
+
+ for(i = 0; i < MAXBOARD; ++i)
+ for(j = 0; j < MAXBOARD; ++j)
+ board[i][j] = NONE;
+}
+
+/* recursively determine solution */
+int findSolution(int row) {
+ int col = 0;
+
+ if(row == BOARDSIZE)
+ return 1;
+
+ while(col < BOARDSIZE) {
+ if(!conflicts(row, col)) {
+ board[row][col] = QUEEN;
+
+ if(findSolution(row+1))
+ return 1;
+
+ board[row][col] = NONE;
+ }
+
+ ++col;
+ }
+
+ return 0;
+}
+
+/* driver for finding solution */
+void go(void) { findSolution(0); }
+
+/* configure lighting */
+void setup_lights(void) {
+ GLfloat position[] = { 4.0, 8.0, 4.0, 1.0 };
+
+ glEnable(GL_LIGHTING);
+ glLightfv(GL_LIGHT0, GL_POSITION, position);
+ glEnable(GL_LIGHT0);
+}
+
+/* return alpha value for fading */
+GLfloat findAlpha(void) {
+ return steps < 128 ? steps/128.0 : steps < 512-128 ? 1.0 : (512-steps)/128.0;
+}
+
+/* draw pieces */
+void drawPieces(void) {
+ int i, j;
+
+ for(i = 0; i < BOARDSIZE; ++i) {
+ for(j = 0; j < BOARDSIZE; ++j) {
+ if(board[i][j]) {
+ glColor4f(colors[i%2][0], colors[i%2][1], colors[i%2][2], findAlpha());
+ glCallList(QUEEN);
+ }
+
+ glTranslatef(1.0, 0.0, 0.0);
+ }
+
+ glTranslatef(-1.0*BOARDSIZE, 0.0, 1.0);
+ }
+}
+
+/* draw board */
+void drawBoard(int wire) {
+ int i, j;
+
+ if (!wire) glBegin(GL_QUADS);
+
+ for(i = 0; i < BOARDSIZE; ++i)
+ for(j = 0; j < BOARDSIZE; ++j) {
+ int par = (i-j+BOARDSIZE)%2;
+ glColor4f(colors[par][0], colors[par][1], colors[par][2], findAlpha());
+ glNormal3f(0.0, 1.0, 0.0);
+ if (wire) glBegin(GL_LINE_LOOP);
+ glVertex3f(j - 0.5, -0.01, i - 0.5);
+ glVertex3f(j + 0.5, -0.01, i - 0.5);
+ glVertex3f(j + 0.5, -0.01, i + 0.5);
+ glVertex3f(j - 0.5, -0.01, i + 0.5);
+ if (wire) glEnd();
+ }
+
+ if (!wire) glEnd();
+}
+
+double theta = 0.0;
+
+void display(Queenscreen *c, int wire) {
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+ gluLookAt(0.0, 1.0+(0.8*fabs(sin(theta)))*10.0, -1.2*BOARDSIZE,
+ 0.0, 1.0, 0.0,
+ 0.0, 0.0, 1.0);
+
+ glScalef(1, -1, 1);
+ gltrackball_rotate (c->trackball); /* Apply mouse-based camera position */
+ glScalef(1, -1, 1);
+
+ glRotatef(theta*100, 0.0, 1.0, 0.0);
+ glTranslatef(-0.5 * (BOARDSIZE-1), 0.0, -0.5 * (BOARDSIZE-1));
+
+ if (!wire) {
+ glEnable(GL_LIGHTING);
+ glEnable(GL_COLOR_MATERIAL);
+ glEnable(GL_BLEND);
+ }
+
+ drawBoard(wire);
+ glTranslatef(0.0, 0.01, 0.0);
+ drawPieces();
+
+ glDisable(GL_COLOR_MATERIAL);
+ glDisable(GL_BLEND);
+ glDisable(GL_LIGHTING);
+
+ theta += .002;
+
+ /* zero out board, find new solution of size MINBOARD <= i <= MAXBOARD */
+ if(++steps == 512) {
+ steps = 0;
+ blank();
+ BOARDSIZE = MINBOARD + (random() % (MAXBOARD - MINBOARD + 1));
+ go();
+ }
+}
+
+#define piece_size 0.1
+#define EPSILON 0.001
+
+/* Make a revolved piece */
+void revolve_line(double *trace_r, double *trace_h, double max_iheight,
+ int rot, int wire) {
+ double theta, norm_theta, sin_theta, cos_theta;
+ double norm_ptheta = 0.0, sin_ptheta = 0.0, cos_ptheta = 1.0;
+ double radius, pradius;
+ double max_height = max_iheight, height, pheight;
+ double dx, dy, len;
+ int npoints, p;
+ double dtheta = (2.0*M_PI) / rot;
+
+ /* Get the number of points */
+ for(npoints = 0;
+ fabs(trace_r[npoints]) > EPSILON || fabs(trace_h[npoints]) > EPSILON;
+ ++npoints);
+
+ /* If less than two points, can not revolve */
+ if(npoints < 2)
+ return;
+
+ /* If the max_height hasn't been defined, find it */
+ if(max_height < EPSILON)
+ for(p = 0; p < npoints; ++p)
+ if(max_height < trace_h[p])
+ max_height = trace_h[p];
+
+ /* Draw the revolution */
+ for(theta = dtheta; rot > 0; --rot) {
+ sin_theta = sin(theta);
+ cos_theta = cos(theta);
+ norm_theta = theta / (2.0 * M_PI);
+ pradius = trace_r[0] * piece_size;
+ pheight = trace_h[0] * piece_size;
+
+ for(p = 0; p < npoints; ++p) {
+ radius = trace_r[p] * piece_size;
+ height = trace_h[p] * piece_size;
+
+ /* Get the normalized lengths of the normal vector */
+ dx = radius - pradius;
+ dy = height - pheight;
+ len = sqrt(dx*dx + dy*dy);
+ dx /= len;
+ dy /= len;
+
+ /* If only triangles required */
+ if (fabs(radius) < EPSILON) {
+ glBegin(wire ? GL_LINE_LOOP : GL_TRIANGLES);
+
+ glNormal3f(dy * sin_ptheta, -dx, dy * cos_ptheta);
+ glTexCoord2f(norm_ptheta, pheight / max_height);
+ glVertex3f(pradius * sin_ptheta, pheight, pradius * cos_ptheta);
+
+ glNormal3f(dy * sin_theta, -dx, dy * cos_theta);
+ glTexCoord2f(norm_theta, pheight / max_height);
+ glVertex3f(pradius * sin_theta, pheight, pradius * cos_theta);
+
+ glTexCoord2f(0.5 * (norm_theta + norm_ptheta),
+ height / max_height);
+ glVertex3f(0.0, height, 0.0);
+
+ glEnd();
+ }
+
+ else {
+ glBegin(wire ? GL_LINE_LOOP : GL_QUADS);
+
+ glNormal3f(dy * sin_ptheta, -dx, dy * cos_ptheta);
+ glTexCoord2f(norm_ptheta, pheight / max_height);
+ glVertex3f(pradius * sin_ptheta, pheight, pradius * cos_ptheta);
+
+ glNormal3f(dy * sin_theta, -dx, dy * cos_theta);
+ glTexCoord2f(norm_theta, pheight / max_height);
+ glVertex3f(pradius * sin_theta, pheight, pradius * cos_theta);
+
+ glTexCoord2f(norm_theta, height / max_height);
+ glVertex3f(radius * sin_theta, height, radius * cos_theta);
+
+ glNormal3f(dy * sin_ptheta, -dx, dy * cos_ptheta);
+ glTexCoord2f(norm_ptheta, height / max_height);
+ glVertex3f(radius * sin_ptheta, height, radius * cos_ptheta);
+
+ glEnd();
+ }
+
+ pradius = radius;
+ pheight = height;
+ }
+
+ sin_ptheta = sin_theta;
+ cos_ptheta = cos_theta;
+ norm_ptheta = norm_theta;
+ theta += dtheta;
+ }
+}
+
+void draw_queen(int wire) {
+ double trace_r[] =
+ { 4.8, 4.8, 3.4, 3.4, 1.8, 1.4, 2.9, 1.8, 1.8, 2.0,
+ 2.7, 2.4, 1.7, 0.95, 0.7, 0.0, 0.0 }; /*, 0.9, 0.7, 0.0, 0.0};*/
+ double trace_h[] =
+ { 0.0, 2.2, 4.0, 5.0, 8.0, 11.8, 11.8, 13.6, 15.2, 17.8,
+ 19.2, 20.0, 20.0, 20.8, 20.8, 22.0, 0.0 };/*,21.4, 22.0, 22.0, 0.0 };*/
+
+ revolve_line(trace_r, trace_h, 0.0, 8, wire);
+}
+
+void reshape_queens(ModeInfo *mi, int width, int height) {
+ GLfloat h = (GLfloat) height / (GLfloat) width;
+ glViewport(0,0, width, height);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ gluPerspective(45, 1/h, 2.0, 30.0);
+ glMatrixMode(GL_MODELVIEW);
+}
+
+void init_queens(ModeInfo *mi) {
+ GLfloat mat_shininess[] = { 90.0 };
+ GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
+
+ int screen = MI_SCREEN(mi);
+ int wire = MI_IS_WIREFRAME(mi);
+ Queenscreen *c;
+
+ if(!qs &&
+ !(qs = (Queenscreen *) calloc(MI_NUM_SCREENS(mi), sizeof(Queenscreen))))
+ return;
+
+ c = &qs[screen];
+ c->window = MI_WINDOW(mi);
+ c->trackball = gltrackball_init ();
+
+ if((c->glx_context = init_GL(mi)))
+ reshape_queens(mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+ else
+ MI_CLEARWINDOW(mi);
+
+ glClearColor(0.0, 0.0, 0.0, 0.0);
+
+ setup_lights();
+ glNewList(1, GL_COMPILE);
+ draw_queen(wire);
+ glEndList();
+
+ if (!wire) {
+ glColorMaterial(GL_FRONT, GL_DIFFUSE);
+
+ glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat_shininess);
+
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glShadeModel(GL_SMOOTH);
+ glEnable(GL_DEPTH_TEST);
+ }
+
+ /* find a solution */
+ go();
+}
+
+void draw_queens(ModeInfo *mi) {
+ Queenscreen *c = &qs[MI_SCREEN(mi)];
+ Window w = MI_WINDOW(mi);
+ Display *disp = MI_DISPLAY(mi);
+
+ if(!c->glx_context)
+ return;
+
+ glXMakeCurrent(disp, w, *(c->glx_context));
+
+ display(c, MI_IS_WIREFRAME(mi));
+
+ if(mi->fps_p) do_fps(mi);
+ glFinish();
+ glXSwapBuffers(disp, w);
+}
+
+void release_queens(ModeInfo *mi) {
+ if(qs)
+ free((void *) qs);
+
+ FreeAllGL(MI);
+}
+
+#endif
--- /dev/null
+.TH XScreenSaver 1 "May 2002"
+.SH NAME
+queens \- n queens screensaver
+.SH SYNOPSIS
+.B queens
+[\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-install]
+[\-visual \fIvisual\fP] [\-delay \fImicroseconds\fP] [\-fps]
+.SH DESCRIPTION
+The \fIqueens\fP program solves the n-queens problem (where, in this
+program, N is between 5 and 10 queens) using a straightforward
+backtracking algorithm. The problem is: how may one place N queens
+on an NxN chessboard such that no queen can attack a sister?
+.SH OPTIONS
+.I queens
+accepts the following options:
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-install
+Install a private colormap for the window.
+.TP 8
+.B \-visual \fIvisual\fP\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.B \-fps
+Display a running tally of how many frames per second are being rendered.
+In conjunction with \fB\-delay 0\fP, this can be a useful benchmark of
+your GL performance.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH BUGS
+It's not unknown for this and other OpenGL hacks to fail under hardware accelaration (UtahGLX) and take the X server with them. Texture images must be 16x16 or 32x32 or 64x64 etc.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.BR xscreensaver\-demo (1),
+.BR xscreensaver\-getimage (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Blair Tennessy. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Blair Tennessy <tennessb@unbc.ca>, 20-April-2002.
+
--- /dev/null
+/* xscreensaver, Copyright (c) 1998-2002 Jamie Zawinski <jwz@jwz.org>
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation. No representations are made about the suitability of this
+ * software for any purpose. It is provided "as is" without express or
+ * implied warranty.
+ */
+
+#include "config.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include <math.h>
+#include "rotator.h"
+#include "yarandom.h"
+
+struct rotator {
+
+ double spin_x_speed, spin_y_speed, spin_z_speed;
+ double wander_speed;
+
+ double rotx, roty, rotz; /* current object rotation */
+ double dx, dy, dz; /* current rotational velocity */
+ double ddx, ddy, ddz; /* current rotational acceleration */
+ double d_max; /* max rotational velocity */
+
+ int wander_frame; /* position in the wander cycle */
+
+};
+
+
+#undef ABS
+#define ABS(x) ((x)<0?-(x):(x))
+
+#define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3)
+#define RANDSIGN() ((random() & 1) ? 1 : -1)
+
+static void
+rotate_1 (double *pos, double *v, double *dv, double speed, double max_v)
+{
+ double ppos = *pos;
+
+ if (speed == 0) return;
+
+ /* tick position */
+ if (ppos < 0)
+ ppos = -(ppos + *v);
+ else
+ ppos += *v;
+
+ if (ppos > 1.0)
+ ppos -= 1.0;
+ else if (ppos < 0)
+ ppos += 1.0;
+
+ if (ppos < 0) abort();
+ if (ppos > 1.0) abort();
+ *pos = (*pos > 0 ? ppos : -ppos);
+
+ /* accelerate */
+ *v += *dv;
+
+ /* clamp velocity */
+ if (*v > max_v || *v < -max_v)
+ {
+ *dv = -*dv;
+ }
+ /* If it stops, start it going in the other direction. */
+ else if (*v < 0)
+ {
+ if (random() % 4)
+ {
+ *v = 0;
+
+ /* keep going in the same direction */
+ if (random() % 2)
+ *dv = 0;
+ else if (*dv < 0)
+ *dv = -*dv;
+ }
+ else
+ {
+ /* reverse gears */
+ *v = -*v;
+ *dv = -*dv;
+ *pos = -*pos;
+ }
+ }
+
+ /* Alter direction of rotational acceleration randomly. */
+ if (! (random() % 120))
+ *dv = -*dv;
+
+ /* Change acceleration very occasionally. */
+ if (! (random() % 200))
+ {
+ if (*dv == 0)
+ *dv = 0.00001;
+ else if (random() & 1)
+ *dv *= 1.2;
+ else
+ *dv *= 0.8;
+ }
+}
+
+
+/* Returns a rotator object, which encapsulates rotation and motion state.
+
+ spin_[xyz]_speed indicates the relative speed of rotation.
+ Specify 0 if you don't want any rotation around that axis.
+
+ spin_accel specifies a scaling factor for the acceleration that is
+ randomly applied to spin: if you want the speed to change faster,
+ make this > 1.
+
+ wander_speed indicates the relative speed through space.
+
+ If randomize_initial_state_p is true, then the initial position and
+ rotation will be randomized (even if the spin speeds are 0.) If it
+ is false, then all values will be initially zeroed.
+ */
+rotator *
+make_rotator (double spin_x_speed,
+ double spin_y_speed,
+ double spin_z_speed,
+ double spin_accel,
+ double wander_speed,
+ int randomize_initial_state_p)
+{
+ rotator *r = (rotator *) calloc (1, sizeof(*r));
+ double d, dd;
+
+ if (!r) return 0;
+
+ if (spin_x_speed < 0 || spin_y_speed < 0 || spin_z_speed < 0 ||
+ wander_speed < 0)
+ abort();
+
+ r->spin_x_speed = spin_x_speed;
+ r->spin_y_speed = spin_y_speed;
+ r->spin_z_speed = spin_z_speed;
+ r->wander_speed = wander_speed;
+
+ if (randomize_initial_state_p)
+ {
+ r->rotx = frand(1.0) * RANDSIGN();
+ r->roty = frand(1.0) * RANDSIGN();
+ r->rotz = frand(1.0) * RANDSIGN();
+
+ r->wander_frame = random() % 0xFFFF;
+ }
+ else
+ {
+ r->rotx = r->roty = r->rotz = 0;
+ r->wander_frame = 0;
+ }
+
+ d = 0.006;
+ dd = 0.00006;
+
+ r->dx = BELLRAND(d * r->spin_x_speed);
+ r->dy = BELLRAND(d * r->spin_y_speed);
+ r->dz = BELLRAND(d * r->spin_z_speed);
+
+ r->d_max = r->dx * 2;
+
+ r->ddx = (dd + frand(dd+dd)) * r->spin_x_speed * spin_accel;
+ r->ddy = (dd + frand(dd+dd)) * r->spin_y_speed * spin_accel;
+ r->ddz = (dd + frand(dd+dd)) * r->spin_z_speed * spin_accel;
+
+# if 0
+ fprintf (stderr, "rotator:\n");
+ fprintf (stderr, " wander: %3d %6.2f\n", r->wander_frame, r->wander_speed);
+ fprintf (stderr, " speed: %6.2f %6.2f %6.2f\n",
+ r->spin_x_speed, r->spin_y_speed, r->spin_z_speed);
+ fprintf (stderr, " rot: %6.2f %6.2f %6.2f\n",
+ r->rotx, r->roty, r->rotz);
+ fprintf (stderr, " d: %6.2f %6.2f %6.2f, %6.2f\n",
+ r->dx, r->dy, r->dz,
+ r->d_max);
+ fprintf (stderr, " dd: %6.2f %6.2f %6.2f\n",
+ r->ddx, r->ddy, r->ddz);
+# endif
+
+ return r;
+}
+
+
+void
+free_rotator (rotator *r)
+{
+ free (r);
+}
+
+void
+get_rotation (rotator *rot, double *x_ret, double *y_ret, double *z_ret,
+ int update_p)
+{
+ double x, y, z;
+
+ if (update_p) {
+ rotate_1 (&rot->rotx, &rot->dx, &rot->ddx, rot->spin_x_speed, rot->d_max);
+ rotate_1 (&rot->roty, &rot->dy, &rot->ddy, rot->spin_y_speed, rot->d_max);
+ rotate_1 (&rot->rotz, &rot->dz, &rot->ddz, rot->spin_z_speed, rot->d_max);
+ }
+
+ x = rot->rotx;
+ y = rot->roty;
+ z = rot->rotz;
+ if (x < 0) x = 1 - (x + 1);
+ if (y < 0) y = 1 - (y + 1);
+ if (z < 0) z = 1 - (z + 1);
+
+ if (x_ret) *x_ret = x;
+ if (y_ret) *y_ret = y;
+ if (z_ret) *z_ret = z;
+}
+
+
+void
+get_position (rotator *rot, double *x_ret, double *y_ret, double *z_ret,
+ int update_p)
+{
+ double x = 0.5, y = 0.5, z = 0.5;
+
+ if (rot->wander_speed != 0)
+ {
+ if (update_p)
+ rot->wander_frame++;
+
+# define SINOID(F) ((1 + sin((rot->wander_frame * (F)) / 2 * M_PI)) / 2.0)
+ x = SINOID (0.71 * rot->wander_speed);
+ y = SINOID (0.53 * rot->wander_speed);
+ z = SINOID (0.37 * rot->wander_speed);
+# undef SINOID
+ }
+
+ if (x_ret) *x_ret = x;
+ if (y_ret) *y_ret = y;
+ if (z_ret) *z_ret = z;
+}
--- /dev/null
+/* xscreensaver, Copyright (c) 1998-2002 Jamie Zawinski <jwz@jwz.org>
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation. No representations are made about the suitability of this
+ * software for any purpose. It is provided "as is" without express or
+ * implied warranty.
+ */
+
+#ifndef __ROTATOR_H__
+#define __ROTATOR_H__
+
+typedef struct rotator rotator;
+
+/* Returns a rotator object, which encapsulates rotation and motion state.
+
+ spin_[xyz]_speed indicates the relative speed of rotation.
+ Specify 0 if you don't want any rotation around that axis.
+
+ spin_accel specifies a scaling factor for the acceleration that is
+ randomly applied to spin: if you want the speed to change faster,
+ make this > 1.
+
+ wander_speed indicates the relative speed through space.
+
+ If randomize_initial_state_p is true, then the initial position and
+ rotation will be randomized (even if the spin speeds are 0.) If it
+ is false, then all values will be initially zeroed.
+ */
+extern rotator *make_rotator (double spin_x_speed,
+ double spin_y_speed,
+ double spin_z_speed,
+ double spin_accel,
+ double wander_speed,
+ int randomize_initial_state_p);
+
+/* Rotates one step, and returns the new rotation values.
+ x, y, and z range from 0.0-1.0, the fraction through the circle
+ (*not* radians or degrees!)
+ If `update_p' is non-zero, then (maybe) rotate first.
+ */
+extern void get_rotation (rotator *rot,
+ double *x_ret, double *y_ret, double *z_ret,
+ int update_p);
+
+/* Moves one step, and returns the new position values.
+ x, y, and z range from 0.0-1.0, the fraction through space:
+ scale those values as needed.
+ If `update_p' is non-zero, then (maybe) move first.
+ */
+extern void get_position (rotator *rot,
+ double *x_ret, double *y_ret, double *z_ret,
+ int update_p);
+
+/* Destroys and frees a `rotator' object. */
+extern void free_rotator (rotator *r);
+
+#endif /* __ROTATOR_H__ */
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+rubik - screen saver that solves Rubik's Cube.
+.SH SYNOPSIS
+.B rubik
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-count \fInumber\fP]
+[\-cycles \fInumber\fP]
+[\-delay \fInumber\fP]
+[\-size \fInumber\fP]
+[\-hideshuffling]
+[\-fps]
+.SH DESCRIPTION
+Draws a Rubik's Cube that rotates in three dimensions and repeatedly
+shuffles and solves itself.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-count \fInumber\fP
+Count. -100 - 100. Default: -30.
+.TP 8
+.B \-cycles \fInumber\fP
+Timeout. 0 - 60. Default: 5.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 40000 (0.04 seconds.).
+.TP 8
+.B \-size \fInumber\fP
+Size. -20 - 20. Default: -6.
+.TP 8
+.B \-hideshuffling | \-no-hideshuffling
+Show Shuffling. Boolean.
+.TP 8
+.B \-fps | \-no-fps
+Whether to show a frames-per-second display at the bottom of the screen.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Marcelo Vianna. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Marcelo Vianna.
# define HACK_INIT init_gasket
# define HACK_DRAW draw_gasket
# define HACK_RESHAPE reshape_gasket
+# define HACK_HANDLE_EVENT gasket_handle_event
+# define EVENT_MASK PointerMotionMask
# define gasket_opts xlockmore_opts
+
+
+#define DEF_SPIN "True"
+#define DEF_WANDER "True"
+#define DEF_SPEED "150"
+#define DEF_MAXDEPTH "5"
+
# define DEFAULTS "*delay: 20000 \n" \
- "*maxDepth: 5 \n" \
- "*speed: 150 \n" \
"*showFPS: False \n" \
- "*wireframe: False \n"
+ "*wireframe: False \n" \
+ "*maxDepth: " DEF_MAXDEPTH "\n" \
+ "*speed: " DEF_SPEED "\n" \
+ "*spin: " DEF_SPIN "\n" \
+ "*wander: " DEF_WANDER "\n" \
+
# include "xlockmore.h" /* from the xscreensaver distribution */
#else /* !STANDALONE */
# include "xlock.h" /* from the xlockmore distribution */
#ifdef USE_GL
+#include <GL/glu.h>
+#include "rotator.h"
+#include "gltrackball.h"
+
#undef countof
#define countof(x) (sizeof((x))/sizeof((*x)))
static int max_depth;
static int speed;
+static Bool do_spin;
+static Bool do_wander;
+
static XrmOptionDescRec opts[] = {
{"-depth", ".sierpinski3d.maxDepth", XrmoptionSepArg, (caddr_t) 0 },
- {"-speed", ".sierpinski3d.speed", XrmoptionSepArg, (caddr_t) 0 }
+ {"-speed", ".sierpinski3d.speed", XrmoptionSepArg, (caddr_t) 0 },
+ { "-spin", ".spin", XrmoptionNoArg, "True" },
+ { "+spin", ".spin", XrmoptionNoArg, "False" },
+ { "-wander", ".wander", XrmoptionNoArg, "True" },
+ { "+wander", ".wander", XrmoptionNoArg, "False" },
};
static argtype vars[] = {
- {(caddr_t *) &max_depth, "maxDepth", "MaxDepth", "5", t_Int},
- {(caddr_t *) &speed, "speed", "Speed", "150", t_Int},
+ {(caddr_t *) &do_spin, "spin", "Spin", DEF_SPIN, t_Bool},
+ {(caddr_t *) &do_wander, "wander", "Wander", DEF_WANDER, t_Bool},
+ {(caddr_t *) &speed, "speed", "Speed", DEF_SPEED, t_Int},
+ {(caddr_t *) &max_depth, "maxDepth", "MaxDepth", DEF_MAXDEPTH, t_Int},
};
} GL_VECTOR;
typedef struct {
- GLfloat rotx, roty, rotz; /* current object rotation */
- GLfloat dx, dy, dz; /* current rotational velocity */
- GLfloat ddx, ddy, ddz; /* current rotational acceleration */
- GLfloat d_max; /* max velocity */
-
- GLfloat angle;
GLuint gasket0, gasket1, gasket2, gasket3;
GLXContext *glx_context;
Window window;
+ rotator *rot;
+ trackball_state *trackball;
+ Bool button_down_p;
int current_depth;
static gasketstruct *gasket = NULL;
-#include <GL/glu.h>
-
static GLfloat normals[4][3];
\f
glPushMatrix();
{
- static int frame = 0;
- GLfloat x, y, z;
-
-# define SINOID(SCALE,SIZE) \
- ((((1 + sin((frame * (SCALE)) / 2 * M_PI)) / 2.0) * (SIZE)) - (SIZE)/2)
- x = SINOID(0.0071, 8.0);
- y = SINOID(0.0053, 6.0);
- z = SINOID(0.0037, 15.0);
- frame++;
- glTranslatef(x, y, z);
-
- x = gp->rotx;
- y = gp->roty;
- z = gp->rotz;
- if (x < 0) x = 1 - (x + 1);
- if (y < 0) y = 1 - (y + 1);
- if (z < 0) z = 1 - (z + 1);
- glRotatef(x * 360, 1.0, 0.0, 0.0);
- glRotatef(y * 360, 0.0, 1.0, 0.0);
- glRotatef(z * 360, 0.0, 0.0, 1.0);
+ double x, y, z;
+ get_position (gp->rot, &x, &y, &z, !gp->button_down_p);
+ glTranslatef((x - 0.5) * 10,
+ (y - 0.5) * 10,
+ (z - 0.5) * 20);
+
+ gltrackball_rotate (gp->trackball);
+
+ get_rotation (gp->rot, &x, &y, &z, !gp->button_down_p);
+ glRotatef (x * 360, 1.0, 0.0, 0.0);
+ glRotatef (y * 360, 0.0, 1.0, 0.0);
+ glRotatef (z * 360, 0.0, 0.0, 1.0);
}
glScalef( 8.0, 8.0, 8.0 );
glViewport(0, 0, (GLint) width, (GLint) height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
+ gluPerspective (30.0, 1/h, 1.0, 100.0);
- gluPerspective( 30.0, 1/h, 1.0, 100.0 );
- gluLookAt( 0.0, 0.0, 15.0,
- 0.0, 0.0, 0.0,
- 0.0, 1.0, 0.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
- glTranslatef(0.0, 0.0, -15.0);
+ gluLookAt( 0.0, 0.0, 30.0,
+ 0.0, 0.0, 0.0,
+ 0.0, 1.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
}
}
-
-/* lifted from lament.c */
-#define RAND(n) ((long) ((random() & 0x7fffffff) % ((long) (n))))
-#define RANDSIGN() ((random() & 1) ? 1 : -1)
-
-static void
-rotate(GLfloat *pos, GLfloat *v, GLfloat *dv, GLfloat max_v)
+Bool
+gasket_handle_event (ModeInfo *mi, XEvent *event)
{
- double ppos = *pos;
-
- /* tick position */
- if (ppos < 0)
- ppos = -(ppos + *v);
- else
- ppos += *v;
-
- if (ppos > 1.0)
- ppos -= 1.0;
- else if (ppos < 0)
- ppos += 1.0;
-
- if (ppos < 0) abort();
- if (ppos > 1.0) abort();
- *pos = (*pos > 0 ? ppos : -ppos);
-
- /* accelerate */
- *v += *dv;
+ gasketstruct *gp = &gasket[MI_SCREEN(mi)];
- /* clamp velocity */
- if (*v > max_v || *v < -max_v)
+ if (event->xany.type == ButtonPress &&
+ event->xbutton.button & Button1)
{
- *dv = -*dv;
+ gp->button_down_p = True;
+ gltrackball_start (gp->trackball,
+ event->xbutton.x, event->xbutton.y,
+ MI_WIDTH (mi), MI_HEIGHT (mi));
+ return True;
}
- /* If it stops, start it going in the other direction. */
- else if (*v < 0)
+ else if (event->xany.type == ButtonRelease &&
+ event->xbutton.button & Button1)
{
- if (random() % 4)
- {
- *v = 0;
-
- /* keep going in the same direction */
- if (random() % 2)
- *dv = 0;
- else if (*dv < 0)
- *dv = -*dv;
- }
- else
- {
- /* reverse gears */
- *v = -*v;
- *dv = -*dv;
- *pos = -*pos;
- }
+ gp->button_down_p = False;
+ return True;
}
-
- /* Alter direction of rotational acceleration randomly. */
- if (! (random() % 120))
- *dv = -*dv;
-
- /* Change acceleration very occasionally. */
- if (! (random() % 200))
+ else if (event->xany.type == MotionNotify &&
+ gp->button_down_p)
{
- if (*dv == 0)
- *dv = 0.00001;
- else if (random() & 1)
- *dv *= 1.2;
- else
- *dv *= 0.8;
+ gltrackball_track (gp->trackball,
+ event->xmotion.x, event->xmotion.y,
+ MI_WIDTH (mi), MI_HEIGHT (mi));
+ return True;
}
+
+ return False;
}
gp->window = MI_WINDOW(mi);
- gp->rotx = frand(1.0) * RANDSIGN();
- gp->roty = frand(1.0) * RANDSIGN();
- gp->rotz = frand(1.0) * RANDSIGN();
-
- /* bell curve from 0-1.5 degrees, avg 0.75 */
- gp->dx = (frand(1) + frand(1) + frand(1)) / (360*2);
- gp->dy = (frand(1) + frand(1) + frand(1)) / (360*2);
- gp->dz = (frand(1) + frand(1) + frand(1)) / (360*2);
-
- gp->d_max = gp->dx * 2;
-
- gp->ddx = 0.00006 + frand(0.00003);
- gp->ddy = 0.00006 + frand(0.00003);
- gp->ddz = 0.00006 + frand(0.00003);
+ {
+ double spin_speed = 1.0;
+ double wander_speed = 0.03;
+ gp->rot = make_rotator (do_spin ? spin_speed : 0,
+ do_spin ? spin_speed : 0,
+ do_spin ? spin_speed : 0,
+ 1.0,
+ do_wander ? wander_speed : 0,
+ True);
+ gp->trackball = gltrackball_init ();
+ }
gp->ncolors = 255;
gp->colors = (XColor *) calloc(gp->ncolors, sizeof(XColor));
gasketstruct *gp = &gasket[MI_SCREEN(mi)];
Display *display = MI_DISPLAY(mi);
Window window = MI_WINDOW(mi);
- int angle_incr = 1;
if (!gp->glx_context) return;
glXMakeCurrent(display, window, *(gp->glx_context));
draw(mi);
-
- /* rotate */
- gp->angle = (int) (gp->angle + angle_incr) % 360;
-
- rotate(&gp->rotx, &gp->dx, &gp->ddx, gp->d_max);
- rotate(&gp->roty, &gp->dy, &gp->ddy, gp->d_max);
- rotate(&gp->rotz, &gp->dz, &gp->ddz, gp->d_max);
-
if (mi->fps_p) do_fps (mi);
glFinish();
glXSwapBuffers(display, window);
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+sierpinski3d - 3D Sierpinski triangle fractal.
+.SH SYNOPSIS
+.B sierpinski3d
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+[\-speed \fInumber\fP]
+[\-depth \fInumber\fP]
+[\-wireframe]
+[\-fps]
+.SH DESCRIPTION
+This draws the three-dimensional variant of the recursive Sierpinski
+triangle fractal, using GL.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 20000 (0.02 seconds.).
+.TP 8
+.B \-speed \fInumber\fP
+Number of frames before changing shape. Default: 150.
+.TP 8
+.B \-depth \fInumber\fP
+Max depth to descend. Default: 3. You probably don't have enough
+memory for 6.
+.TP 8
+.B \-wireframe
+Render in wireframe instead of solid.
+.TP 8
+.B \-fps | \-no-fps
+Whether to show a frames-per-second display at the bottom of the screen.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Tim Robinson and Jamie Zawinski. Permission to
+use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided
+that the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation. No representations are made about the suitability of
+this software for any purpose. It is provided "as is" without express
+or implied warranty.
+.SH AUTHOR
+Tim Robinson and Jamie Zawinski.
* There tends to be a dark stripe in the colormaps. I don't know why.
* Perhaps utils/colors.c is at fault?
*
- * With the hairier objects, some of the faces are inside out. E.g.,
+ * Note that this equation sometimes generates faces that are inside out:
* -parameters 01210111
- * If we turn off GL_CULL_FACE, that object renders more solidly
- * (indicating wrong winding) and the altered surfaces are too dark
- * (indicating wrong normals.)
+ * To make this work, we need to render back-faces with two-sided lighting:
+ * figuring out how to correct the winding and normals on those inside out
+ * surfaces would be too hard.
*/
#include <X11/Intrinsic.h>
#define HACK_INIT init_spheremonics
#define HACK_DRAW draw_spheremonics
#define HACK_RESHAPE reshape_spheremonics
+#define HACK_HANDLE_EVENT spheremonics_handle_event
+#define EVENT_MASK PointerMotionMask
#define ccs_opts xlockmore_opts
#define DEF_DURATION "100"
#include "xlockmore.h"
#include "colors.h"
+#include "rotator.h"
+#include "gltrackball.h"
#include <ctype.h>
#ifdef USE_GL /* whole file */
typedef struct {
GLXContext *glx_context;
-
- GLfloat rotx, roty, rotz; /* current object rotation */
- GLfloat dx, dy, dz; /* current rotational velocity */
- GLfloat ddx, ddy, ddz; /* current rotational acceleration */
- GLfloat d_max; /* max velocity */
- Bool spin_x, spin_y, spin_z;
+ rotator *rot;
+ trackball_state *trackball;
+ Bool button_down_p;
GLuint dlist, dlist2;
GLfloat scale;
int tracer;
int mesher;
+ int polys1, polys2; /* polygon counts */
XFontStruct *font;
GLuint font_list;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
+ gluPerspective (30.0, 1/h, 1.0, 100.0);
- gluPerspective( 30.0, 1/h, 1.0, 100.0 );
- gluLookAt( 0.0, 0.0, 15.0,
- 0.0, 0.0, 0.0,
- 0.0, 1.0, 0.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
- glTranslatef(0.0, 0.0, -15.0);
+ gluLookAt( 0.0, 0.0, 30.0,
+ 0.0, 0.0, 0.0,
+ 0.0, 1.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
}
if (!wire)
{
glLightfv(GL_LIGHT0, GL_POSITION, pos);
- glEnable(GL_CULL_FACE);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
- }
-}
-
-
-/* lifted from lament.c */
-#define RAND(n) ((long) ((random() & 0x7fffffff) % ((long) (n))))
-#define RANDSIGN() ((random() & 1) ? 1 : -1)
-
-static void
-rotate(GLfloat *pos, GLfloat *v, GLfloat *dv, GLfloat max_v)
-{
- double ppos = *pos;
-
- /* tick position */
- if (ppos < 0)
- ppos = -(ppos + *v);
- else
- ppos += *v;
- if (ppos > 1.0)
- ppos -= 1.0;
- else if (ppos < 0)
- ppos += 1.0;
-
- if (ppos < 0) abort();
- if (ppos > 1.0) abort();
- *pos = (*pos > 0 ? ppos : -ppos);
-
- /* accelerate */
- *v += *dv;
-
- /* clamp velocity */
- if (*v > max_v || *v < -max_v)
- {
- *dv = -*dv;
- }
- /* If it stops, start it going in the other direction. */
- else if (*v < 0)
- {
- if (random() % 4)
- {
- *v = 0;
-
- /* keep going in the same direction */
- if (random() % 2)
- *dv = 0;
- else if (*dv < 0)
- *dv = -*dv;
- }
- else
- {
- /* reverse gears */
- *v = -*v;
- *dv = -*dv;
- *pos = -*pos;
- }
- }
-
- /* Alter direction of rotational acceleration randomly. */
- if (! (random() % 120))
- *dv = -*dv;
-
- /* Change acceleration very occasionally. */
- if (! (random() % 200))
- {
- if (*dv == 0)
- *dv = 0.00001;
- else if (random() & 1)
- *dv *= 1.2;
- else
- *dv *= 0.8;
+ /* With objects that have proper winding and normals set up on all
+ their faces, one can cull back-faces; however, these equations
+ generate objects that are sometimes "inside out", and determining
+ whether a facet has been inverted like that is really hard.
+ So we render both front and back faces, at a probable performance
+ penalty on non-accelerated systems.
+
+ When rendering back faces, we also need to do two-sided lighting,
+ or the fact that the normals are flipped gives us too-dark surfaces
+ on the inside-out surfaces.
+
+ This isn't generally something you'd want, because you end up
+ with half the lighting dynamic range (kind of.) So if you had
+ a sphere with correctly pointing normals, and a single light
+ source, it would be illuminated from two sides. In this case,
+ though, it saves us from a difficult and time consuming
+ inside/outside test. And we don't really care about a precise
+ lighting effect.
+ */
+ glDisable(GL_CULL_FACE);
+ glLightModeli (GL_LIGHT_MODEL_TWO_SIDE, TRUE);
}
}
+
\f
/* generate the object */
}
-static void
+static int
unit_spheremonics (ModeInfo *mi,
int resolution, Bool wire, int *m, XColor *colors)
{
spheremonics_configuration *cc = &ccs[MI_SCREEN(mi)];
-
+ int polys = 0;
int i, j;
double du, dv;
XYZ q[4];
if (wire)
glColor3f (1, 1, 1);
-/* mi->polygon_count = 0; */
-
glBegin (wire ? GL_LINE_LOOP : GL_QUADS);
for (i = 0; i < res; i++) {
if (!wire) do_color (i, colors);
glVertex3f(q[3].x,q[3].y,q[3].z);
-/* mi->polygon_count++; */
+ polys++;
# define CHECK_BBOX(N) \
if (q[(N)].x < cc->bbox[0].x) cc->bbox[0].x = q[(N)].x; \
glPopMatrix();
}
}
+ return polys;
}
{
glNewList(cc->dlist, GL_COMPILE);
- unit_spheremonics (mi, cc->resolution, wire, cc->m, cc->colors);
+ cc->polys1 = unit_spheremonics (mi, cc->resolution, wire,cc->m,cc->colors);
glEndList();
glNewList(cc->dlist2, GL_COMPILE);
glDisable (GL_LIGHTING);
glPushMatrix();
glScalef (1.05, 1.05, 1.05);
- unit_spheremonics (mi, cc->resolution, 2, cc->m, cc->colors);
+ cc->polys2 = unit_spheremonics (mi, cc->resolution, 2, cc->m, cc->colors);
glPopMatrix();
glPopAttrib();
glEndList();
}
{
+ Bool spinx=False, spiny=False, spinz=False;
+ double spin_speed = 1.0;
+ double wander_speed = 0.03;
+
char *s = do_spin;
while (*s)
{
- if (*s == 'x' || *s == 'X') cc->spin_x = 1;
- else if (*s == 'y' || *s == 'Y') cc->spin_y = 1;
- else if (*s == 'z' || *s == 'Z') cc->spin_z = 1;
+ if (*s == 'x' || *s == 'X') spinx = True;
+ else if (*s == 'y' || *s == 'Y') spiny = True;
+ else if (*s == 'z' || *s == 'Z') spinz = True;
else
{
fprintf (stderr,
}
s++;
}
- }
- cc->rotx = frand(1.0) * RANDSIGN();
- cc->roty = frand(1.0) * RANDSIGN();
- cc->rotz = frand(1.0) * RANDSIGN();
-
- /* bell curve from 0-6 degrees, avg 3 */
- cc->dx = (frand(0.4) + frand(0.4) + frand(0.4)) / (360/2);
- cc->dy = (frand(0.4) + frand(0.4) + frand(0.4)) / (360/2);
- cc->dz = (frand(0.4) + frand(0.4) + frand(0.4)) / (360/2);
-
- cc->d_max = cc->dx * 2;
+ cc->rot = make_rotator (spinx ? spin_speed : 0,
+ spiny ? spin_speed : 0,
+ spinz ? spin_speed : 0,
+ 1.0,
+ do_wander ? wander_speed : 0,
+ True);
+ cc->trackball = gltrackball_init ();
+ }
- cc->ddx = 0.00006 + frand(0.00003);
- cc->ddy = 0.00006 + frand(0.00003);
- cc->ddz = 0.00006 + frand(0.00003);
cc->tracer = -1;
cc->mesher = -1;
}
-static Bool
-mouse_down_p (ModeInfo *mi)
+Bool
+spheremonics_handle_event (ModeInfo *mi, XEvent *event)
{
- Window root, child;
- int rx, ry, wx, wy;
- unsigned int mask;
- if (!XQueryPointer (MI_DISPLAY(mi), MI_WINDOW(mi),
- &root, &child, &rx, &ry, &wx, &wy, &mask))
- return False;
- if (! (mask & Button1Mask))
- return False;
- return True;
+ spheremonics_configuration *cc = &ccs[MI_SCREEN(mi)];
+
+ if (event->xany.type == ButtonPress &&
+ event->xbutton.button & Button1)
+ {
+ cc->button_down_p = True;
+ gltrackball_start (cc->trackball,
+ event->xbutton.x, event->xbutton.y,
+ MI_WIDTH (mi), MI_HEIGHT (mi));
+ return True;
+ }
+ else if (event->xany.type == ButtonRelease &&
+ event->xbutton.button & Button1)
+ {
+ cc->button_down_p = False;
+ return True;
+ }
+ else if (event->xany.type == MotionNotify &&
+ cc->button_down_p)
+ {
+ gltrackball_track (cc->trackball,
+ event->xmotion.x, event->xmotion.y,
+ MI_WIDTH (mi), MI_HEIGHT (mi));
+ return True;
+ }
+
+ return False;
}
spheremonics_configuration *cc = &ccs[MI_SCREEN(mi)];
Display *dpy = MI_DISPLAY(mi);
Window window = MI_WINDOW(mi);
- Bool mouse_p;
if (!cc->glx_context)
return;
- mouse_p = mouse_down_p (mi);
-
glShadeModel(GL_SMOOTH);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glScalef(1.1, 1.1, 1.1);
{
- GLfloat x, y, z;
-
- if (do_wander)
- {
- static int frame = 0;
-
-# define SINOID(SCALE,SIZE) \
- ((((1 + sin((frame * (SCALE)) / 2 * M_PI)) / 2.0) * (SIZE)) - (SIZE)/2)
-
- x = SINOID(0.0071, 8.0);
- y = SINOID(0.0053, 6.0);
- z = SINOID(0.0037, 15.0);
- frame++;
- glTranslatef(x, y, z);
- }
-
- if (cc->spin_x || cc->spin_y || cc->spin_z)
- {
- x = cc->rotx;
- y = cc->roty;
- z = cc->rotz;
- if (x < 0) x = 1 - (x + 1);
- if (y < 0) y = 1 - (y + 1);
- if (z < 0) z = 1 - (z + 1);
-
- if (cc->spin_x) glRotatef(x * 360, 1.0, 0.0, 0.0);
- if (cc->spin_y) glRotatef(y * 360, 0.0, 1.0, 0.0);
- if (cc->spin_z) glRotatef(z * 360, 0.0, 0.0, 1.0);
-
- rotate(&cc->rotx, &cc->dx, &cc->ddx, cc->d_max);
- rotate(&cc->roty, &cc->dy, &cc->ddy, cc->d_max);
- rotate(&cc->rotz, &cc->dz, &cc->ddz, cc->d_max);
- }
+ double x, y, z;
+ get_position (cc->rot, &x, &y, &z, !cc->button_down_p);
+ glTranslatef((x - 0.5) * 8,
+ (y - 0.5) * 6,
+ (z - 0.5) * 8);
+
+ gltrackball_rotate (cc->trackball);
+
+ get_rotation (cc->rot, &x, &y, &z, !cc->button_down_p);
+ glRotatef (x * 360, 1.0, 0.0, 0.0);
+ glRotatef (y * 360, 0.0, 1.0, 0.0);
+ glRotatef (z * 360, 0.0, 0.0, 1.0);
}
glScalef(7,7,7);
+ mi->polygon_count = 0;
+
glScalef (cc->scale, cc->scale, cc->scale);
glCallList (cc->dlist);
+ mi->polygon_count += cc->polys1;
+
if (cc->mesher >= 0 /* || mouse_p */)
{
glCallList (cc->dlist2);
+ mi->polygon_count += cc->polys2;
if (cc->mesher >= 0)
cc->mesher--;
}
do_tracer(mi);
- if (mouse_p)
+ if (cc->button_down_p)
{
char buf[200];
- sprintf (buf, "%d %d %d %d %d %d %d %d",
+ sprintf (buf,
+ ((cc->m[0]<10 && cc->m[1]<10 && cc->m[2]<10 && cc->m[3]<10 &&
+ cc->m[4]<10 && cc->m[5]<10 && cc->m[6]<10 && cc->m[7]<10)
+ ? "%d%d%d%d%d%d%d%d"
+ : "%d %d %d %d %d %d %d %d"),
cc->m[0], cc->m[1], cc->m[2], cc->m[3],
cc->m[4], cc->m[5], cc->m[6], cc->m[7]);
draw_label (mi, buf);
if (!static_parms)
{
static int tick = 0;
- if (tick++ == duration)
+ if (tick++ >= duration && !cc->button_down_p)
{
generate_spheremonics(mi);
tick = 0;
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+spheremonics - 3d spherical harmonic shapes.
+.SH SYNOPSIS
+.B spheremonics
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+[\-duration \fInumber\fP]
+[\-resolution \fInumber\fP]
+[\-wander]
+[\-no-spin]
+[\-spin \fI[XYZ]\fP]
+[\-wireframe]
+[\-no-smooth]
+[\-no-grid]
+[\-bbox]
+[\-fps]
+.SH DESCRIPTION
+These closed objects are commonly called spherical harmonics, although they
+are only remotely related to the mathematical definition found in the
+solution to certain wave functions, most notable the eigenfunctions of
+angular momentum operators.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 30000 (0.03 seconds.).
+.TP 8
+.B \-duration \fInumber\fP
+Duration. 5 - 1000. Default: 500.
+.TP 8
+.B \-resolution \fInumber\fP
+Resolution. 5 - 100. Default: 64.
+.TP 8
+.B \-wander | \-no-wander
+Whether the object should wander around the screen.
+.TP 8
+.B \-spin \fI[XYZ]\fP
+Around which axes should the object spin?
+.TP 8
+.B \-no-spin
+Don't spin.
+.TP 8
+.B \-wireframe
+Render in wireframe instead of solid.
+.TP 8
+.B \-smooth | \-no-smooth
+Smoothed Lines. Boolean.
+.TP 8
+.B \-grid | \-no-grid
+Draw Grid. Boolean.
+.TP 8
+.B \-bbox | \-no-bbox
+Draw Bounding Box. Boolean.
+.TP 8
+.B \-fps | \-no-fps
+Whether to show a frames-per-second display at the bottom of the screen.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Paul Bourke and Jamie Zawinski. Permission to
+use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided
+that the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation. No representations are made about the suitability of
+this software for any purpose. It is provided "as is" without express
+or implied warranty.
+.SH AUTHOR
+Paul Bourke and Jamie Zawinski.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+sproingies - Q-Bert meets Marble Madness!
+.SH SYNOPSIS
+.B sproingies
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-count \fInumber\fP]
+[\-delay \fInumber\fP]
+[\-size \fInumber\fP]
+[\-wireframe]
+[\-fps]
+.SH DESCRIPTION
+Q-Bert meets Marble Madness!
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-count \fInumber\fP
+How many sproingies to draw at once. Default: 5.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 25000 (0.03 seconds.).
+.TP 8
+.B \-size \fInumber\fP
+How much to scale the image down. Default 0 (full screen.)
+.TP 8
+.B \-wireframe
+Render in wireframe instead of solid.
+.TP 8
+.B \-fps | \-no-fps
+Whether to show a frames-per-second display at the bottom of the screen.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Ed Mackey. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Ed Mackey.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+stairs - Escher's infinite staircase.
+.SH SYNOPSIS
+.B stairs
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+[\-wireframe]
+[\-fps]
+.SH DESCRIPTION
+This draws an "infinite" staircase.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 20000 (0.02 seconds.).
+.TP 8
+.B \-wireframe
+Render in wireframe instead of solid.
+.TP 8
+.B \-fps | \-no-fps
+Whether to show a frames-per-second display at the bottom of the screen.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Marcelo Vianna. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Marcelo Vianna.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+stonerview - 3D undulating ribbons of squares.
+.SH SYNOPSIS
+.B stonerview
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-wireframe]
+.SH DESCRIPTION
+Chains of colorful squares dance around each other in complex spiral
+patterns. This is a clone of the SGI "electropaint" screen saver.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-wireframe
+Render in wireframe instead of solid.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Andrew Plotkin. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Andrew Plotkin.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+superquadrics - morphing 3d shapes.
+.SH SYNOPSIS
+.B superquadrics
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+[\-spinspeed \fInumber\fP]
+[\-count \fInumber\fP]
+[\-cycles \fInumber\fP]
+[\-wireframe]
+[\-fps]
+.SH DESCRIPTION
+Ed Mackey reports that he wrote the first version of this program in BASIC
+on a Commodore 64 in 1987, as a 320x200 black and white wireframe. Now it
+is GL and has specular reflections.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 40000 (0.04 seconds.).
+.TP 8
+.B \-spinspeed \fInumber\fP
+0.1 - 15.0. Default: 5.0.
+.TP 8
+.B \-count \fInumber\fP
+0 - 100. Default: 25.
+.TP 8
+.B \-cycles \fInumber\fP
+0 - 100. Default: 40.
+.TP 8
+.B \-wireframe
+Render in wireframe instead of solid.
+.TP 8
+.B \-fps | \-no-fps
+Whether to show a frames-per-second display at the bottom of the screen.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Ed Mackey. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Ed Mackey.
--- /dev/null
+/*
+ * (c) Copyright 1993, 1994, Silicon Graphics, Inc.
+ * ALL RIGHTS RESERVED
+ * Permission to use, copy, modify, and distribute this software for
+ * any purpose and without fee is hereby granted, provided that the above
+ * copyright notice appear in all copies and that both the copyright notice
+ * and this permission notice appear in supporting documentation, and that
+ * the name of Silicon Graphics, Inc. not be used in advertising
+ * or publicity pertaining to distribution of the software without specific,
+ * written prior permission.
+ *
+ * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
+ * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
+ * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
+ * GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
+ * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
+ * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
+ * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
+ * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN
+ * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
+ * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * US Government Users Restricted Rights
+ * Use, duplication, or disclosure by the Government is subject to
+ * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
+ * (c)(1)(ii) of the Rights in Technical Data and Computer Software
+ * clause at DFARS 252.227-7013 and/or in similar or successor
+ * clauses in the FAR or the DOD or NASA FAR Supplement.
+ * Unpublished-- rights reserved under the copyright laws of the
+ * United States. Contractor/manufacturer is Silicon Graphics,
+ * Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311.
+ *
+ * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
+ */
+/*
+ * Trackball code:
+ *
+ * Implementation of a virtual trackball.
+ * Implemented by Gavin Bell, lots of ideas from Thant Tessman and
+ * the August '88 issue of Siggraph's "Computer Graphics," pp. 121-129.
+ *
+ * Vector manip code:
+ *
+ * Original code from:
+ * David M. Ciemiewicz, Mark Grossman, Henry Moreton, and Paul Haeberli
+ *
+ * Much mucking with by:
+ * Gavin Bell
+ */
+#include "config.h"
+#include <math.h>
+#include "trackball.h"
+
+/*
+ * This size should really be based on the distance from the center of
+ * rotation to the point on the object underneath the mouse. That
+ * point would then track the mouse as closely as possible. This is a
+ * simple example, though, so that is left as an Exercise for the
+ * Programmer.
+ */
+#define TRACKBALLSIZE (0.8)
+
+/*
+ * Local function prototypes (not defined in trackball.h)
+ */
+static float tb_project_to_sphere(float, float, float);
+static void normalize_quat(float [4]);
+
+void
+vzero(float *v)
+{
+ v[0] = 0.0;
+ v[1] = 0.0;
+ v[2] = 0.0;
+}
+
+void
+vset(float *v, float x, float y, float z)
+{
+ v[0] = x;
+ v[1] = y;
+ v[2] = z;
+}
+
+void
+vsub(const float *src1, const float *src2, float *dst)
+{
+ dst[0] = src1[0] - src2[0];
+ dst[1] = src1[1] - src2[1];
+ dst[2] = src1[2] - src2[2];
+}
+
+void
+vcopy(const float *v1, float *v2)
+{
+ register int i;
+ for (i = 0 ; i < 3 ; i++)
+ v2[i] = v1[i];
+}
+
+void
+vcross(const float *v1, const float *v2, float *cross)
+{
+ float temp[3];
+
+ temp[0] = (v1[1] * v2[2]) - (v1[2] * v2[1]);
+ temp[1] = (v1[2] * v2[0]) - (v1[0] * v2[2]);
+ temp[2] = (v1[0] * v2[1]) - (v1[1] * v2[0]);
+ vcopy(temp, cross);
+}
+
+float
+vlength(const float *v)
+{
+ return sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
+}
+
+void
+vscale(float *v, float div)
+{
+ v[0] *= div;
+ v[1] *= div;
+ v[2] *= div;
+}
+
+void
+vnormal(float *v)
+{
+ vscale(v,1.0/vlength(v));
+}
+
+float
+vdot(const float *v1, const float *v2)
+{
+ return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2];
+}
+
+void
+vadd(const float *src1, const float *src2, float *dst)
+{
+ dst[0] = src1[0] + src2[0];
+ dst[1] = src1[1] + src2[1];
+ dst[2] = src1[2] + src2[2];
+}
+
+/*
+ * Ok, simulate a track-ball. Project the points onto the virtual
+ * trackball, then figure out the axis of rotation, which is the cross
+ * product of P1 P2 and O P1 (O is the center of the ball, 0,0,0)
+ * Note: This is a deformed trackball-- is a trackball in the center,
+ * but is deformed into a hyperbolic sheet of rotation away from the
+ * center. This particular function was chosen after trying out
+ * several variations.
+ *
+ * It is assumed that the arguments to this routine are in the range
+ * (-1.0 ... 1.0)
+ */
+void
+trackball(float q[4], float p1x, float p1y, float p2x, float p2y)
+{
+ float a[3]; /* Axis of rotation */
+ float phi; /* how much to rotate about axis */
+ float p1[3], p2[3], d[3];
+ float t;
+
+ if (p1x == p2x && p1y == p2y) {
+ /* Zero rotation */
+ vzero(q);
+ q[3] = 1.0;
+ return;
+ }
+
+ /*
+ * First, figure out z-coordinates for projection of P1 and P2 to
+ * deformed sphere
+ */
+ vset(p1,p1x,p1y,tb_project_to_sphere(TRACKBALLSIZE,p1x,p1y));
+ vset(p2,p2x,p2y,tb_project_to_sphere(TRACKBALLSIZE,p2x,p2y));
+
+ /*
+ * Now, we want the cross product of P1 and P2
+ */
+ vcross(p2,p1,a);
+
+ /*
+ * Figure out how much to rotate around that axis.
+ */
+ vsub(p1,p2,d);
+ t = vlength(d) / (2.0*TRACKBALLSIZE);
+
+ /*
+ * Avoid problems with out-of-control values...
+ */
+ if (t > 1.0) t = 1.0;
+ if (t < -1.0) t = -1.0;
+ phi = 2.0 * asin(t);
+
+ axis_to_quat(a,phi,q);
+}
+
+/*
+ * Given an axis and angle, compute quaternion.
+ */
+void
+axis_to_quat(float a[3], float phi, float q[4])
+{
+ vnormal(a);
+ vcopy(a,q);
+ vscale(q,sin(phi/2.0));
+ q[3] = cos(phi/2.0);
+}
+
+/*
+ * Project an x,y pair onto a sphere of radius r OR a hyperbolic sheet
+ * if we are away from the center of the sphere.
+ */
+static float
+tb_project_to_sphere(float r, float x, float y)
+{
+ float d, t, z;
+
+ d = sqrt(x*x + y*y);
+ if (d < r * 0.70710678118654752440) { /* Inside sphere */
+ z = sqrt(r*r - d*d);
+ } else { /* On hyperbola */
+ t = r / 1.41421356237309504880;
+ z = t*t / d;
+ }
+ return z;
+}
+
+/*
+ * Given two rotations, e1 and e2, expressed as quaternion rotations,
+ * figure out the equivalent single rotation and stuff it into dest.
+ *
+ * This routine also normalizes the result every RENORMCOUNT times it is
+ * called, to keep error from creeping in.
+ *
+ * NOTE: This routine is written so that q1 or q2 may be the same
+ * as dest (or each other).
+ */
+
+#define RENORMCOUNT 97
+
+void
+add_quats(float q1[4], float q2[4], float dest[4])
+{
+ static int count=0;
+ float t1[4], t2[4], t3[4];
+ float tf[4];
+
+ vcopy(q1,t1);
+ vscale(t1,q2[3]);
+
+ vcopy(q2,t2);
+ vscale(t2,q1[3]);
+
+ vcross(q2,q1,t3);
+ vadd(t1,t2,tf);
+ vadd(t3,tf,tf);
+ tf[3] = q1[3] * q2[3] - vdot(q1,q2);
+
+ dest[0] = tf[0];
+ dest[1] = tf[1];
+ dest[2] = tf[2];
+ dest[3] = tf[3];
+
+ if (++count > RENORMCOUNT) {
+ count = 0;
+ normalize_quat(dest);
+ }
+}
+
+/*
+ * Quaternions always obey: a^2 + b^2 + c^2 + d^2 = 1.0
+ * If they don't add up to 1.0, dividing by their magnitued will
+ * renormalize them.
+ *
+ * Note: See the following for more information on quaternions:
+ *
+ * - Shoemake, K., Animating rotation with quaternion curves, Computer
+ * Graphics 19, No 3 (Proc. SIGGRAPH'85), 245-254, 1985.
+ * - Pletinckx, D., Quaternion calculus as a basic tool in computer
+ * graphics, The Visual Computer 5, 2-13, 1989.
+ */
+static void
+normalize_quat(float q[4])
+{
+ int i;
+ float mag;
+
+ mag = (q[0]*q[0] + q[1]*q[1] + q[2]*q[2] + q[3]*q[3]);
+ for (i = 0; i < 4; i++) q[i] /= mag;
+}
+
+/*
+ * Build a rotation matrix, given a quaternion rotation.
+ *
+ */
+void
+build_rotmatrix(float m[4][4], float q[4])
+{
+ m[0][0] = 1.0 - 2.0 * (q[1] * q[1] + q[2] * q[2]);
+ m[0][1] = 2.0 * (q[0] * q[1] - q[2] * q[3]);
+ m[0][2] = 2.0 * (q[2] * q[0] + q[1] * q[3]);
+ m[0][3] = 0.0;
+
+ m[1][0] = 2.0 * (q[0] * q[1] + q[2] * q[3]);
+ m[1][1]= 1.0 - 2.0 * (q[2] * q[2] + q[0] * q[0]);
+ m[1][2] = 2.0 * (q[1] * q[2] - q[0] * q[3]);
+ m[1][3] = 0.0;
+
+ m[2][0] = 2.0 * (q[2] * q[0] - q[1] * q[3]);
+ m[2][1] = 2.0 * (q[1] * q[2] + q[0] * q[3]);
+ m[2][2] = 1.0 - 2.0 * (q[1] * q[1] + q[0] * q[0]);
+ m[2][3] = 0.0;
+
+ m[3][0] = 0.0;
+ m[3][1] = 0.0;
+ m[3][2] = 0.0;
+ m[3][3] = 1.0;
+}
+
--- /dev/null
+/*
+ * (c) Copyright 1993, 1994, Silicon Graphics, Inc.
+ * ALL RIGHTS RESERVED
+ * Permission to use, copy, modify, and distribute this software for
+ * any purpose and without fee is hereby granted, provided that the above
+ * copyright notice appear in all copies and that both the copyright notice
+ * and this permission notice appear in supporting documentation, and that
+ * the name of Silicon Graphics, Inc. not be used in advertising
+ * or publicity pertaining to distribution of the software without specific,
+ * written prior permission.
+ *
+ * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
+ * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
+ * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
+ * GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
+ * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
+ * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
+ * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
+ * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN
+ * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
+ * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * US Government Users Restricted Rights
+ * Use, duplication, or disclosure by the Government is subject to
+ * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
+ * (c)(1)(ii) of the Rights in Technical Data and Computer Software
+ * clause at DFARS 252.227-7013 and/or in similar or successor
+ * clauses in the FAR or the DOD or NASA FAR Supplement.
+ * Unpublished-- rights reserved under the copyright laws of the
+ * United States. Contractor/manufacturer is Silicon Graphics,
+ * Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311.
+ *
+ * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
+ */
+/*
+ * trackball.h
+ * A virtual trackball implementation
+ * Written by Gavin Bell for Silicon Graphics, November 1988.
+ */
+
+#ifndef __TRACKBALL_H__
+#define __TRACKBALL_H__
+
+/*
+ * Pass the x and y coordinates of the last and current positions of
+ * the mouse, scaled so they are from (-1.0 ... 1.0).
+ *
+ * The resulting rotation is returned as a quaternion rotation in the
+ * first paramater.
+ */
+void
+trackball(float q[4], float p1x, float p1y, float p2x, float p2y);
+
+/*
+ * Given two quaternions, add them together to get a third quaternion.
+ * Adding quaternions to get a compound rotation is analagous to adding
+ * translations to get a compound translation. When incrementally
+ * adding rotations, the first argument here should be the new
+ * rotation, the second and third the total rotation (which will be
+ * over-written with the resulting new total rotation).
+ */
+void
+add_quats(float *q1, float *q2, float *dest);
+
+/*
+ * A useful function, builds a rotation matrix in Matrix based on
+ * given quaternion.
+ */
+void
+build_rotmatrix(float m[4][4], float q[4]);
+
+/*
+ * This function computes a quaternion based on an axis (defined by
+ * the given vector) and an angle about which to rotate. The angle is
+ * expressed in radians. The result is put into the third argument.
+ */
+void
+axis_to_quat(float a[3], float phi, float q[4]);
+
+#endif /* __TRACKBALL_H__ */
#if defined(HAVE_GDK_PIXBUF)
# include <gdk-pixbuf/gdk-pixbuf.h>
-# include <gdk-pixbuf/gdk-pixbuf-xlib.h>
+
+# ifdef HAVE_GTK2
+# include <gdk-pixbuf-xlib/gdk-pixbuf-xlib.h>
+# else /* !HAVE_GTK2 */
+# include <gdk-pixbuf/gdk-pixbuf-xlib.h>
+# endif /* !HAVE_GTK2 */
/* Returns an XImage structure containing the bits of the given XPM image.
{
GdkPixbuf *pb;
static int initted = 0;
+#ifdef HAVE_GTK2
+ GError *gerr = NULL;
+#endif
if (!initted)
{
+#ifdef HAVE_GTK2
+ g_type_init ();
+#endif
gdk_pixbuf_xlib_init (dpy, DefaultScreen (dpy));
xlib_rgb_init (dpy, DefaultScreenOfDisplay (dpy));
initted = 1;
}
pb = (filename
+#ifdef HAVE_GTK2
+ ? gdk_pixbuf_new_from_file (filename, &gerr)
+#else
? gdk_pixbuf_new_from_file (filename)
+#endif /* HAVE_GTK2 */
: gdk_pixbuf_new_from_xpm_data ((const char **) xpm_data));
if (pb)
{
}
row += stride;
}
- /* gdk_pixbuf_unref (pb); -- #### does doing this free colors? */
+ gdk_pixbuf_unref (pb); /* #### does doing this free colors? */
return image;
}
else if (filename)
{
+#ifdef HAVE_GTK2
+ fprintf (stderr, "%s: %s\n", progname, gerr->message);
+ g_error_free (gerr);
+#else
fprintf (stderr, "%s: unable to load %s\n", progname, filename);
+#endif /* HAVE_GTK2 */
exit (1);
}
else
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfe,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xef, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfb, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xfd, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xef, 0xff, 0xff, 0xff,
+ 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xef, 0xff, 0xff, 0xff,
0xff, 0xf6, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb,
0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff,
0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xef, 0xf7, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xdb,
+ 0xef, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xdb,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfb, 0xff, 0xff, 0xff, 0xff,
0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xee, 0xff,
0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfb, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf7, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf7, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff,
0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff,
0xff, 0xff, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xfe, 0xff,
0xff, 0xff, 0xff, 0x76, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xbf,
0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xef, 0xff, 0xbf, 0xfb, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xef, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xf7,
0xff, 0xff, 0xff, 0xbf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfe, 0xff, 0xff, 0x7f, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x76, 0xff, 0xff, 0xfe, 0xff, 0xef, 0xff, 0xff,
0xff, 0xff, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfd, 0xff, 0xff, 0xf7, 0xff, 0x6d, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfb, 0xfd, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfe, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xef, 0xff, 0xff, 0xff, 0xfb,
0xdf, 0xff, 0xdf, 0xff, 0xfb, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xfb,
0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x77, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xfd, 0xff,
0xfb, 0xff, 0xdf, 0xfe, 0xff, 0xff, 0xbf, 0xef, 0xff, 0xff, 0xfb, 0xff,
0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xef, 0xff,
+ 0xdf, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xef, 0xff,
0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
0xfe, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xef, 0xff, 0xff, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xf7, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef,
+ 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xef,
0xfe, 0xbf, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff,
0xfd, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff,
0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff,
0xef, 0xff, 0xff, 0x7f, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xdf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xdf, 0xfd, 0xff, 0xff, 0xff, 0xfb, 0xef, 0xff, 0xff,
0xfe, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff,
0xff, 0xff, 0xee, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff,
/* XPM */
-static char *matrix0_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"320 377 6 1",
-/* colors */
-" c #1B641B",
-". c #165016",
-"X c #0B2A0B",
-"o c #081E08",
-"O c #030E03",
-"+ c #000000",
-/* pixels */
-"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOOO++++++++++++++OOOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOO+++",
-"++++++++++++++++++++++++++++OOOO+++++++++++++++++++++++++++++++++OOOoooooOOO+++++++++++OOoooOO++++++++++++++O++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O++++++++++++++++O++++++++++++++++++++OO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOoooO++",
-"+++++++++++++++++++++++++++OOOOOOO+++++++++++++OOOOOOOO++++++++++OOoooooooOO++++++++++OOOXoooOO+++++++++++OOOOO+++++++++++++++++++++++++++++++++++++OOOOO++++++++++++++++OOOOO++++++++++++OOOOO+++++++++++++++++OOOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOoooOO+",
-"++++++++++++++++++++++++++OOo...oOO+++++++++OOOooOOOooOOO++++++++OoooXXXXooOO++++++++OOoo...oooOO+++++++OOoooooO++++++++++++++++++++++++++++++++++++OooooO++++++++++++++OO..ooO++++++++++Ooo.XOO++++++++++++++OOO...OO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOo...OO+",
-"++++++++++++++++++++++++++Ooo...ooO+++++++++OoooXoooXooOO+++++++OOoXoXoXXoooO+++++++OOooX...oooOO+++++++OOoXXXXOO++++++++++++++OOOOOOO+++++++++++++OOoXooOO++++++++++++OOO.XooOO+++++++++oOo..oOO+++++++++++++OOo...oOO+++++++++++++++O++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOo.X.OO+",
-"++++++++++++++++++++++++++Ooo...ooO+++++++++OoooXoooXooOO+++++++OooXXXoXXoooO++++++OOOooX...XooOO++++++OOoooooXOOO++++++++++++OOooOoOO++++++++++++OOooXXoOO++++++++++++OoO..ooO++++++++++OooX.oOO+++++++++++OOOOo...ooOO+++++++++++OOOoOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Ooo...OO+",
-"+++++++++++++++++++++++++OOoX...ooOO+++++++Oooo..ooo..oooO+++++OOOXooXXXXoooOO++++OOooXXXXXX..oooO+++++OOoXXoXoooO+++++++++++OOoo...XoOO+++++++++OOoo...ooO++++++++++OOooooXOOO+++++++++OOOoXXoooO+++++++++OOoooo...oooooO+++++++++OO...OO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOoooooOO+",
-"+++++++++++++++++++++++++OOoX...XoOO+++++++OOoo..Xoo..ooo++++++OoOoXXXXXXoooO+++++OOXoXXXXXX..ooO+++++OooooXoXoooO++++++++++OOoXX...XoO+++++++++++Ooo...oOO+++++++++++OooXXXOOO+++++++++++OOoXoooO+++++++++Oooooo...ooooo++++++++++OO...OO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OooXXXooO+",
-"++++++++++++++++++++++++++ooo. .ooo++++++++Oooo..ooX..ooOO+++++ooXXXX....XXooO++++OoXXXooooooXoOoO+++++OoooXoXoXoOO++++++++OOooXXoooooOO+++++++++OOoXoooOO+++++++++++OOXoXoooO+++++++++++OOoXoXXoOO++++++++Oooo.......oooO++++++++OOoX..oOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOO..oooO++",
-"+++++++++++++++++++++++++OOoX...XoOO+++++++OooX..ooo..ooO++++O+oooXX.....XXXOO++++OOXXXXooooooooO+++++OoooXoXoXoooO+++++++++OooXXoooXoOO+++++++++OOoXoXoOO+++++++++++OOXoXXoOO+++++++++++++OoXoXXOO++++++++Oooo.......oooO++++++++OOo...oOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOoX.ooOO++",
-"++++++++++++++++++++++++++ooo...ooO++++++++OOoo..ooo..oOO+++++OoooXXX....XXooOO+++OOXXXoooooXoooOO+++++OoooXoXoXoOOO+++++++OoooXXoooooO++++++++++OOXooooOO+++++++++++OOXoXooO+++++++++++++OOooXoooO++++++++OoooX......oooO+++++++OOOo.X.ooOO+++++++++++++++++++++++++++++++O+O+O+O+++++++++++++++++++++++++++++++++++OoO..oOO+++",
-"+++++++++++++++++++++++++OOoX. .Xoo++++++++OOoooooooooOOO+++++OooX..XXo..XXoo+++++OOoXX..XXXoooOO++++++OOooXXXXoXooO++++++++Ooo..oooOoOO++++++++++OooOOO+++++++++++++Oo...ooO+++++++++++++OOoo...OO+++++++++Ooooo...ooooOO+++++OOOooo...OoOOO++++++++++++++++++++++++++OOOOOOOOOOOOOO++++++++++++++++++++++++++++++OOoooXooOO+++",
-"++++++++++++++++++++++++++ooo...ooOO++++++++OOOooOOOooO++++++OOooo..XXX..oXXOO++++OOooo..XoXooooOO++++++OOXooXoXooooO++++++OOooX.ooOoOOOO++++++++++OOOO+++++++++++++OOO...oOO++++++++++++++OOo...oOO+++++++OOOooo...oooOO+++++OOOoOoo...ooooOOO+++++++++++++++++++++++OOOoooooooooooOOO+++++++++++++++++++++++++++++OooXoXOO++++",
-"++++++++++++++++++++++++++Ooo...ooO+++++++++OO+OOOOOOOO+++++++Oooo..ooo..ooOO++++++OoooooXXX..oooO+++++OOOoXXXXXooOO+++++++OOoo..XXXooooOO+++++++++O++++++++++++++++OOo..XoOO+++++++++++++++Oo...oO+++++++++Ooo..ooX..ooO+++++Oo.............oO+++++++++++++++++++++++Oo.............oO+++++++++++++++++++++++++++OOOXXXooOO++++",
-"++++++++++++++++++++++++++OOo...oOO++++++++++++++++O+++++++++OOOoo..Xoo..oooOO+++++OOOoooXXX..XXoOO++++OOoXoXXXXooOO+++++++OOoo..XXXoooooO+++++++++++++++++++++++++++OO...oO+++++++++++++++OOO..XoOO+++++++OOOo..ooo..ooOO++++Oo.............oO+++++++++++++++++++++++Oo.............oO++++++++++++++++++++++++++++OoXXXooO+++++",
-"++++++++++++++++++++++++++OOo...OOO++++++++++++++++++++++++++OOooo..ooo..oOOO++++++OOOooXoXX.XXooo+++++OOOoXXXXXoooOO++++++Oooo..XXXoooooO++++++++++++++++++++++++++OOo...OOO++++++++++++++OOo...OOO+++++++OOOo..ooo.XooO+++++Oo.. ... .. ...oO+++++++++++++++++++++++OO.............oO+++++++++++++++++++++++++++OOOXXXooO+++++",
-"+++++++++++++++++++++++++++OOX..oO+++++++++++++++++++++++++++OO...... ...XXoO+++++OOooooooooXoXXXOO++++OooooXXXXXXooO+++++OOoooXo.....XXoOO+++++++++++++++++++++++++OOO...OoO+++++++++++++OOOO...OOO++++++++OOooooooooOOO++++++OoOooo...ooooOOO+++++++++++++++++++++++OOooooooooooooOOO+++++++++++++++++++++++++++OooXXXoOO+++++",
-"+++++++++++++++++++++++++++Oo...OO+++++++++++++++++++++++++++Oo..........XXXO++++++OooXooooooXXXXOO++++OooooXXXXXXXoo+++++OooXXXo.....XooOO+++++++++++++++++++++++++OOOoXXooO++++++++++++++OooXoXOO+++++++++OOOooOOOooOOO++++++OOOooo...ooOoO+++++++++++OOOO++++++++++O+OOOOOOOoOOOOO++++++++++++OOO+++++++++++++OOooXXXOOO+++++",
-"+++++++++++++++++++++++++++OOOoOOO+++++++++++++++++++++++++++OOooXXXXXXXXoOOOO++++OoXXX..XXX..oXooO++++OOOooXXoooXooOO++++OOXXXXoooo..oooO+++++++++++++++++++++++++++OooXXooOO++++++++++++OoooXXooO++++++++++OO+O++OOOO+++++++++++OOo...oOOO++++++++++++OooooO++++++++++++OOOOO++OOO++++++++++++OOoooO+++++++++++OOoXoooOO++++++",
-"++++++++++++++++++++++++++++OOoOOO+++++++++++++++++++++++++++OOoooXXXoXoooOO++++++OOXXX..oXo..XooOO+++++OOOOoXXoooXoOO++++OOXXXoXoXX..oooOO++++++++++++++++++++++++++OOoooXXOO++++++++++++OOXXoooOO+++++++++++++++++++++++++++++++OOo..XoOOO+++++++++++OOooooOO++++++++++++++++O+++++++++++++++OoooooOO++++++++++OooXoooOO++++++",
-"+++++++++++++++++++++++++++OOOOoO+++++++++++++++++++++++++++++OoooXXXXoXXOOO++++++OOoXX..XXX..XXoO+++++++OOoXoXoooXoO+++++OooXXXoXoo..oooOO+++++++++++++++++++++++++++OoXoXooOO++++++++++OOooXXooO++++++++++++++++++++++++++++++++OOO...oO++++++++++++OOooXooo+++++++++++++++++++++++++++++++++OOooXoOO+++++++++OOoXXXooO+++++++",
-"+++++++++++++++++++++++++++OO...OO+++++++++++++++++++++++++++OOoooXXXXXoooO+++++++OOooooo...oooOOO++++++++OOXXXXXXoXOO+++++OoXo.... XX...oO++++++++++++++++++++++++++OOoooXXOOO++++++++++OOoXXoooO+++++++++++++++++++++++++++++++++OO...OOO+++++++++++Ooo...oo+++++++++++++++++++++++++++++++++Ooo...OO+++++++++OooX.oOOO+++++++",
-"++++++++++++++++++++++++++++O...O+++++++++++++++++++++++++++++OoooXXXXXooOO++++++++++OOOo...oOO++++++++++++OooXoXoooO+++++OOooX.....XX...OO++++++++++++++++++++++++++++Ooo..ooO++++++++++Ooo..ooOO++++++++++++++++++++++++++++++++OOoX..OO++++++++++++Ooo...ooO+++++++++++++++++++++++++++++++OOoo...OO++++++++OOoo.XoOO++++++++",
-"++++++++++++++++++++++++++++OOOOO+++++++++++++++++++++++++++++OoooXXoXXXoOO++++++++++OOOO...oOO++++++++++++OOoOOoOOOO++++++OOOooooOoooooOOO+++++++++++++++++++++++++++++OO..ooo+++++++++OOooX.OO+O++++++++++++++++++++++++++++++++++OOOOO++++++++++++OOoXoooOO+++++++++++++++++++++++++++++++++OOooOoO+++++++++OoooXooO+++++++++",
-"+++++++++++++++++++++++++++++O++++++++++++++++++++++++++++++++OOooXXXoXooO+++++++++++++OooooOO++++++++++++++OOOOOOO+++++++++OOOOOOOOOOOOO++++++++++++++++++++++++++++++OOO..ooO++++++++++OOo..oOO++++++++++++++++++++++++++++++++++++OOO+++++++++++++OOXoXooOO++++++++++++++++++++++++++++++++++++OOO+++++++++OOoXoXoOO+++++++++",
-"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOoooXoooooO+++++++++++++OOoXoOO++++++++++++++++++++++++++++++++++OO+O++++O+++++++++++++++++++++++++++++++OOOO+OO++++++++++OOOOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++OoXoooOO+++++++++++++++++++++++++++++++++++++++++++++++++OooXooOO+++++++++",
-"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOoOoooOOO+++++++++++++OOoooO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O+O+++++++++++++++O+O++++++++++++++++++++++++++++++++++++++++++++++++++++++OOoooOO++++++++++++++++++++++++++++++++++++++++++++++++++OOoooooO++++++++++",
-"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOO+OO+++++++++++++++++OOOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOO+++++++++++++++++++++++++++++++++++++++++++++++++++OOoooOOO++++++++++",
-"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"++++++++++O++++++++++++++++++++++++++++++++++++++O+O++++++++++++++++O+O++++++++++++++++++++++++++++++++++++O+OO+O++++++++++++++++++++O++++++++++++O+OOOOOO++++++++++++++++O+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"+++++++OOOOOOO++++++++++++OOOOOO++++++++++++++OOOOOOOO+++++++++++OOOOOOOO++++++++++++++++OOOO+++++++++++OOOOOOOOOOO++++++++++++++OOOOOOO++++++++OOOOOOOOOOOOO+++++++++OOOOOOOO+++++++++++++OOOOOOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"+++++OOoooXooOOO++++++++OOOoooooO++++++++++++OOooXoXooOO++++++++OOooXoXooOO+++++++++++++OoooooO++++++++OOOoXoXoXooooO++++++++++OOOooXoooOO+++++OooooXooooXoooO+++++++OOoooXoOoOO+++++++++OOOoooooOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOOOOOO++++++",
-"++++OOOoooXoooOO+++++++OOOoooXoooO+++++++++OOOoooXoXoooOOO++++OOOoooXoXoooOOO+++++++++OOOoooooOO+++++++OoooXoXoXXoooO+++++++++OOOoooXoXooO++++OOooXoXXXXoXoooOO++++OOOOoooXXooOoO++++++++OOoXXooooOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOooooOOOO+++++",
-"+++OOoo..XXX..oooO++++OOoXX.....OO+++++++++Oooo..XXX..oooO++++Oooo..XXX..oooO+++++++++OOo.....OO++++++Oooo..XXXXXXooO++++++++OOo.....XoXOO++++OOXXXXXXXXXXXXXOO++++Oooo..XoX..oooO++++++OO.XXXXXXXXXOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOo.......oOO++++",
-"+++Oooo..XXX..ooo+++++OOXXX.....oO++++++++OOoXo..XXX..XooOO+++OoXo..XXX..XooOO++++++++Ooo.....OO++++++OOoo..XXoXXoooO++++++++Ooo.....XXooO+++++OoXXXXoXXXXXXXOO+++OOoXo..XXX..XooOO++++OOo..XXXXXXXXOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOO++++++++++++++++++++++++++OOOO++++++++++++++++OOo.......ooOO+++",
-"++OOooo..oXo..oooOO++++OoXX.....oOO++++++++oooX..oXX..XXoOO++OOooX..oXX..XXoOO+++++++OOoo.....oOO+++++Oooo..XXXXXXooOO+++++OOOoo.....XXoOO++++OOXXoXXXXXXXXXXOO+++OoooX..XXo..XXoOO++++OOoX.XXXXXXXXOO+++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOOOOO+++++++++++++++++++++++OOOOOOOOO+++++++++++OOoO.......oooO+++",
-"++OOXXXoooooooXXXOO+++OOOOooo...OOO+++++++OOXXXoooooooXXXOO++OOooooooooooXXXOO+++++++OOXXXXo.XoO++++++OoooXXoooooooOO++++++OOo..oooooOooO++++++OOOoOoOoOoXoXoOO+++OOXXXoooooooXXXOO++++oooXXOoooo...oOO++++++++++OOO+++++++++++++++++OOO++++++++++++++++OOOooo...oO++++++O+OOOOOOO+O++++++O...oXOOOO++++++++++OOooXXooooXXoXOO++",
-"++OOXXXoooooooXXXOO+++++OOOoo...oO+++++++++OooXooOooooXXXoO+++OoooooOooXoXXXoO++++++OOOXoXoX..oOO+++++OoooXXoooooooOO++++++OOoX.XXooooOO+O+++++++OOOOOoooXXoXOO+++OoXXXoooooooXXXoO++++oooXXooOooX.Xoo++++++++++OOOOOO++++++++++++++OOOOOO+++++++++++++OOOOoooX.Xoo+++++OOOOOOOOOOOOO++++O+.X.XXooOOOO+++++++++ooooXoooXXXXXoO++",
-"++OOXXXooOOoooXXXOO+++++OOOOo...Oo++++++++OOOOOoOOOoXoXXXOO+++OOOOOoOoo..XooOO++++++Ooo..ooo.XoO++++++Oooo.......oooO++++++Ooo..ooXooooOO++++++++++OOOooXXoooOO+++OOoXXXooooXoXooOO++O+oooXXooOoo...oOO+++++++O+oo...OO+++++++++++O+oo...OO++++++++++OOooXXXXXoooOO+++OOooXooXoXooXooO++++OOoOoX...ooOO++++++++OoooooOoooXXoOO++",
-"+OOOXXXoooOOooXXXoO+++++++OOoX..oOO+++++++++OOOOOOOooXXXXOO+++++OOOOoOo..XXXOO+++++OOOO..ooo..oOO++++++ooo.......XooOO++++Oooo..oXoXXooOO++++++++++++OOOXXoooO++++OOXoXoXooooXXXXOO+++OoooXXoOoOo..XooO++++++++Ooo...OO++++++++++++Ooo...OO+++++++++OOOOoXXXXXoooOO+++OOoXoXXoXoXXoXoOO++++OOoXo...oooOOO+++++OOOoooOooooXXXoO++",
-"+OOoXXXooOOoooXXXOO+++++++OOo...OOO++++++++++++OOOoooXXXXOO++++++OOOoooX.oXoOO+++++Oooo..ooo.XoOO+++++Oooo.......oXoOO++++Oooo..oXoXooooOO+++++++++++OooXXooo+++++OOoXXXooooXoXoooO+++OoooXXooooo...oOO++++++++Ooo...OO++++++++++++Ooo...OO++++++++OOooooXXXXXoOOO++++OOXoXoXXXXoXoXXOO++++OOOoo...XooOOOO+++++OOooooOoooXXXOO++",
-"++OOXXXoooOOooXXXoO+++++++OOoX..oO++++++++++++OOOooo..oooOO+++++O+oo.....oooOO++++OOooooXooo..oOO++++++OOooXoooXX...oO+++++ooo.....XX...OO+++++++++++OOO..oOOO+++++oooo.......oooO+++++ooo..ooooo...oOO++++++++OoooXooO++++++++++++OoooXooO+++++++OOooX..ooooOOOO++++OOOXXXXXoXXXXXXooO++++++OoooooXX...oOO++++++OOoooo..XooOO++",
-"++OOXXXooOOOooXXooO+++++++OOo...OOO++++++++++++OOooo..oOOO+++++++Ooo.....oooOO++++OOXXXXXooo..oOOO++++OOOoooooooX..XoOO++OOooo.....XX.X.OO++++++++++OOoo.XoO++++++OOooo.......oooo+++++ooo.XoooXX...oo++++++++++oooXoOO+++++++++++++oooXoOO+++++++OOXoX..XXoooO++++++OOooXXXXXXoXXXXooO+++++++OOoooXX...ooO+++++++OOooX..oXoOO++",
-"++oOXXXooOOoooXXXOO++++++++OO...oO++++++++++++Ooo...oooOO+++++++++OOoooXXXXXoO++++OO...XXXXX..oooO++++++OOOoOOOoO...oO++++Oooo..ooooo...oOO+++++++++OoooXXOOO+++++OOXXXXXoooXXXXXOO++++OOOXX...oX...oOO+++++++++OOOOOO++++++++++++++OOOOOO++++++++OoXXX..oooOOO+++++++OoooXooXXXXooXXOO+++++++OOOooXo...ooO++++++OOo...oooOOO+++",
-"++OooXXooOOOooXXXoO+++++++OOoX..oOO++++++++++OOoo...ooOOO++++++++OOOooooXXXXOO++++OO...oXXXo..XooO+++++OOOOOOOOoo.X.ooO+++Oooo..ooooo...oOO+++++++++OoooXXOO++++++OOXXXXXoooXXXXXOO++++OOOoX...XX...ooO++++++++++O+O+++++++++++++++++O+O++++++++++OOXXX..oXooOO++++++OOoXoXXoXXXoXXoXOO+++++++OOOooXX...ooO+++++++OO...oooOO++++",
-"+OOoXXXooOoOooXXXOO++++++++Oo...Oo++++++++++OOOoo...ooO++++++++OOOOOOoooXXXXOO+++OOO...XXXXX..oooOO+++O+OOOOOOOOo...oOO+++Oooo..oooOo.X.ooO++++++++OoooXoXOO+++++OOOXXXoXoooXoXXXoO+++++OooX ..Xo..XoO++++++++++++O+O+++++++++++++++++O+O++++++++OOOXoX..oooooOO++++++OooXoXoXoXXXXoXOO++++++OOOoooXo...ooO++++++OOO...ooOO+++++",
-"++OOXXXoooOOooXXXOO++++++OOOo...oOO+++++++++Ooo..XoXoOOO++++++OOooOOOOoooXXXOO+++OOooXXoXXXX..XooOO+++OOooOOOOOoo...oOO+++Oooo..Ooooo...OOO++++++++OOoXXoooO++++++OooXXoooooooXXooO+++++OOOoooooo...oOO+++++++++++++O+++++++++++++++++++O+++++++++OOOoOoo...oXoOO+++++OooXXXXXXXoXXXXOO++++OOOoo...XooOOOO+++++++OOOoXXOOO++++++",
-"++OOXXXoooooooXXXoO++++++OOOoX..ooOO+++++++OOoo..oooooOO+++++OOoooOoOooooXXXoOO+++OOXoXXXXXX..XXoO++++OoooOoOoOoo...oo+++++ooo..oooOo...oOO++++++++OoXoXXoO+++++++OoXXXXooooXoXXXOO+++++OOOoooooo...OO+++++++++++OOOO++++++++++++++++OOOO+++++++++++OOooo...XXooOO+++OOOXXXXXoXXXXoXooO++++OOOoo...XoooOO+++++++++OooXooOO++++++",
-"++OOXXXoooooooXXoOO+++++OOooo...OoOOO+++++OOooo..XXoooOOO++++OOooooooOoooXXXOO++++OOXoXXoXXX..oXoo++++OoooooooOoo..XoOO++++ooo..oooooX..oO+++++++++OOoXoXoO+++++++OOXXXoooooooXXXOO+++++OOOoooooo.X.OO+++++++++OOOOOOO+++++++++++++OOOOOOO+++++++++++OOoo..XXXoooOO+++OOoooXXoXoXXoXoOO+++OOoooX...ooOOO++++++++++OOoXooO+++++++",
-"++OOooo..oXo..oooOO++++OOoooo...Xoooo++++++oX....oXXoooooO+++Oo...oXoXX..XooOO++++OOOOoooXXX..XooOO+++OoXo..ooXX.XXXOO+++++OOoX.XXXXX...oOO++++++++Oo...OoOO+++++++oooX..ooo..XoooO++++OOOXoXXX..XXoOOO+++++++++oo...OO++++++++++++Ooo...OO++++++++++++OOOooXo...oo++++OOoOOOoOOOOoOOO++++O.X.XXooooOOO+++++++++++OoXooOOO++++++",
-"+++Oooo..oXX..oooO+++++OoooXX...XooooO+++OOO.....XoXXoooo++++OO...XXooX..XoXO++++++OOOOooXoX..oXoOO+++OooX..XoX..XXXOO+++++OOO..XXXoX..XoO+++++++++OO...oO+++++++++OoXo..XXX..XXoOO++++OoooXoXo..ooXOO+++++++++Ooo...OO+++++++++++OOoo...O++++++++++++++OOOOoo..Xoo++++O+OOOOOOOOOOOO+++++O.X.oXOoOOO+++++++++++++OOoXoOO+++++++",
-"++++OOoooXoXoooOO+++++OOooXoXXXXXXXooO++++OoooXXXXXXXXXooO+++OOoooXXXXoXooOOO++++++++OOooXXXXXXooO++++OOOoooXXXXoOoOOO++++++OOoOXoXXXoooOOO++++++++OooooOOO+++++++OOOOoXoXXXXooOO++++++OOooXXXXoooOO+++++++++++OoooXoOO++++++++++OOO..oooOO+++++++++++++++OOOOOoOOO+++++++O++++O++++++++++OOOooOOO+O++++++++++++++OOoXoO++++++++",
-"+++++OOooXXXooOOO++++++OooXXoXoXXXoXoO++++OoXXoXXXXoXXoooO++++OooooXXXXXooOO+++++++++OOoooXoXoXooo++++OOOooXXoXoXOOO+++++++++OOooXoXooooO+++++++++++OXXoOO+++++++++OOOOoXXoXoooOO++++++OooXoXXXoooOO+++++++++++OooXXXOO+++++++++++OO..oooOO++++++++++++++++OOOOOO+++++++++++++++++++++++++OOOOOO+O++++++++++++++++OOooXOO+++++++",
-"++++++OoooXoooO+++++++OOooooXXXooXoooOO+++OOooXooXoXXoXooOO++++OoooXoXoooOO++++++++++++OoXoXXXoooO+++++++OooXXoXoOO+++++++++O+OoooXoXoOO+++++++++++OOoooO++++++++++++OooooXoXoOO+++++++OOooXooooOOO+++++++++++++OooooOO++++++++++OOO..oooO+++++++++++++++++++++++++++++++++++++++++++++++++OOO+++++++++++++++++++++OoooO++++++++",
-"++++++++OOOOOOO++++++++OOOoOOOooOOOOO+++++OOoOooOoOOoOOOO+++++++OOOOoOoOOO+++++++++++++O+OOOOOoOO+++++++OOOOOoOOOOO++++++++++++OOOoOOOOO+++++++++++++OOOO+++++++++++++OOoOoOOOOO++++++++OOOoOoOOO+++++++++++++++OOOOOO+++++++++++OoooooOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOO+O++++++++",
-"+++++++O+OOOO++++++++++++OOOOO+OOOOO+++++++++OOOOOOOOOOO+++++++++OOOOOOOO+++++++++++++++OOOOOO+O++++++++++O+OOOOO+++++++++++++++OO+OO++++++++++++++++++++++++++++++++++++OOOO++++++++++++++OOOOO++++++++++++++++++OO+++++++++++++OOoooOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O+++++++++",
-"+++++++++++++++++++++++++++++O+O+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O+OOOOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"+++++++OOOOO++++++++++++++++O++++++++++++++++O+O+O+O+++++++++++++++++O+O+++++++++++++O+O+O+O+++++++++++++O+O+OO+O++++++++++++O+O+OO+O+O++++++++++++++O+O+++++++++++++O++++++++O++++++++++++O+O+O+O++++++++++++++O+O+O+O++++++++++O++++++++O++++++++++O+O+O++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"+++++OOOOOoOOO+++++++++++OOOOOOO+++++++++++OOOOOOOOOOO+++++++++++++OOOOOOOOOO++++++OOOOOOOOOOO+++++++++OOOOOOOOOOOOO+++++++OOOOOOOOOOOOOO++++++++++OOOOOOOOOO++++++OOOOOOOOOOOOOOO+++++++OOOOOOOOOOOO++++++++++OOOOOOOOOO++++++OOOOOOOOOOOOOO++++++OOOOOOOOO+++++++++++OOOOO+++++OOOOO+++++OOOOO++++OOOOO++++++++++OOOOOO+++++++",
-"++++OOooX...ooO++++++++OOooooXooOO++++++++OoooXooXoooOOO++++++++OOOoooooXooOoO+++OOoooXooXooooOO++++++OoooXoXooXooooO+++++OoooXoXooXoooooOO+++++OOOoooooXooOoO+++OOoooXooOOOoooXooO++++OooooXoXoooooo++++++++OooooXooooooO+++OOoooXooOOooooooO++++OooooXoooOO++++++++OOooooOO+++OOooooO++OOooooOOOOOoooooO++++++OOOooooooOO+++++",
-"++++OOoXX...ooOO+++++++OOoooXoooOO+++++++OOooXoXoXoXooOOO+++++++OOoooXXoooooooO+++oooXoXoXoXooOOO++++OOooXoXoXoXXoXoOO+++OOooXoXoXXoXXXoooO+++++OOoooXXoooooooO+++ooXooXooooXoXoooo+++O+oooooXoXXooooO++++++O+oooXoXXXXoooO+++ooXooXooooXoXooOO++OOoXXoXoXooOO+++++++OooooooOOOOOooXooo+++OoooooOOOoooXoooO+++++OOooXoXooOOO++++",
-"++OOooooX...oooO+++++++OoooXoXXooOO++++++OooXoXXoXoXoooOOO++++OOOOooXoXXooooooO+OOoooXoXXoXoXooOoO+++OooXoXXoXXoXXoXOO+++OooXoXoXoXXooXoooO+++OOOOooXoXXooooooO+OOoooXoXoooooXoXooo+++OOooXXoXoXXXoooO++++++OOooXoXoXoXooo++OOoooXXoXooooXXooOO++OOooXoXoXooOO+++++++OooXXoooOOOoooXooo+OOooXooooOOooXoXooO+++OOOOooXoXoXoOOOO++",
-"+++OoooXXooo..oOO++++++Oooo.....ooO++++++OOXXX..XXXXX...OO++++OoXo..XXXXX...XoO++Ooo...XXXXXXX..XOO++OOXXX..XXXXX...oOO++OOXXX..XXXXX...XoO+++OoXo..XXXXX...XoO++Ooo...XXoooXX...oo++++OoooXX...oXXooO+++++++OooXXX..XXXooO++Ooo...XXooo..XXXoO++OooXX..XXXoo++++++++Ooo...oooOooo...oo++Oo.....ooooX...ooO+++OooXX.XXXXo...OO++",
-"++OOoXoXXooo..oOO++++++OoXo.... ooOO+++++OOXXX..XXXXX.X.OO+++OOooX..oXoXX...XXO++Ooo...XXXXXXX...oO++OOXXX..XXoXX...oOO++OOXXX..XXoXX...XXO++OOooX..oXXXX...XXO++Ooo...XXoooXX...oo++++OooXXX...XoXooO++++++OOooXoX..XXXoo+++Ooo...XXooo..XXoOO++OOXoX..XoooO++++++++Ooo...XoooooX.. oo++Oo.....oooXo...ooO++OOoXo..oXXXX.X.OOO+",
-"++OoXXXooXXo..oooO+++++OOooXXXXXXXOO++++OOOoooXXooooo...oOO+OOO...oooooooXooXoO++OOoXXXooOoOooX..oo+OOOoooXXooooo...oo++OOOoooXXoooooooooXO+OOO...oooOoOoXooXoO++OOoXXXoooooooXXXoO+++++OOOOo...ooOOO++++++++OOOoooXXoooOOO++OOoXXXooXXXXXoOoO++++OOoo..oooOOO++++++OOoo. .XXoooXX...oo+OOOXXX..ooooo...ooO+OOo...oooOooo...ooO+",
-"+OOoXXXooXoo..oooOO+++++OOoXXXXXXXOO+++++OOoooXXooooo...oOO++OoX..ooOOOOOoXoXXO++OOoXXXooooOOo...oo++OOoooXXooooo.X.OOO++OOoooXXoooooXoXXoO++OoX..oooOoOooXoXXO++OOoXXXooooooXXXXoO+++++OOOoo...oOOOO+++++++++OOOOoXXoooOO+++OOoXXXoXXXXXXoOOO++++OOOo..ooOO++++++++OOoo...XXoooXX...oo+OOoXXX..ooooo...oOO++OO...oooOOOo...ooO+",
-"++OOXXXXo.....ooo+++++++OOooXXXXXooOO+++++OoooXXooooo...ooO+OOo...oooOOOooooooO+++OOXXXooOOOooX..oo+++OoooXXooooo..XoO++++OoooXXoooooXooXoO+OOo...ooOOOOOoXoXoO+++OoXXXXooooooXXXoO+++++++OOO...ooO+++++++++++++OOoXXXooOO++++OOXXXooXXXXXOO+++++++OOoX.ooOO+++++++++Ooo...XXoooXX...oO++OooXX..XXooo..XooO+OOO...ooOOoOoX..XoO+",
-"++OoXXXoX.....oooO++++++OOo..ooo..oOO++++OOooX..oXoXX..XoOO+OOoX..ooOO++OOOoOOO++OOoXXXXoOOOOooXXXo+++OoooXXooo..oooOO+++OOooXXXoooX.ooOOOO+OOoX..ooOOOOoOoooOO+++OOXXXXoXoXXXXXXOO+++++++Ooo.X.OOO+++++++++++++OOoXXoooO+++++OoXXX.....ooOO+++++++OOo..OoOO+++++++++Ooo.....ooo.....oo++OoXXXoXXXXoo...oOO+OooX..ooOOOOooXoXoo+",
-"++OOXXXXXXXXXXoooO+++++OOoo..ooo..ooOO++++Oooo..oXXoX...ooO++oo...oOO+++++OOO+++++OOXXXooOOO+ooooXo++OOoooXXooo..ooOO+++++OoooXXooo.XoOOOO+++oo...oOOOOOOooOoOO++OOoXXXXXXXoXXXXXoO++++++++OO...oOO++++++++++++++OOXXoooO++++OOOXXX.....ooOO+++++++OOoX.oOO++++++++++OOo.....ooo.....oo+OOOXXXXoXXXoo...oOO+OOo...oOO++OOoXoXoO+",
-"++OOXXXXXXXXXXoooO+++++OoooXXoooXXooo+++++Oooo..XXXXX...ooO+OOo..XoOO++++++++++++OOOXXXooO+OOOoXoXX+++OooX......XooOO+++++Oooo.......oOO++++OOo...oOOOOooooooo++++OOXXXXXoXXXXXXXOO+++++++OOo...oO++++++++++++++OOOXXoooO++++OOoXXX....XooOO++++++++Oo..oOO++++++++++OOo.X.oX...Xo...Oo++OOXXXoo...oo.X.oOO+OOo..XoOOO+OoooXXXO+",
-"++OOXXXXo.....XXoOO+++OOoooXXoooXXoooO++++Oooo..oXXoX...ooO+OoO...oOO++++++++++++OOOXXXooOO+OooooXX++OOooo.......oOOO+++++Oooo......XoOO++++OOo.X.ooOOOXoXXXooO++OOOXXXXXXXXXXXXXoO++++++++OO..XoOO+++++++++O+O+OOoXXoooO+++++OOXXX.....ooOO++++++++OoX.ooOO++++++++OOOo...oX...Xo...oO+OOoXXXoo...oo...ooO+OOo...oOO++OOoXooXO+",
-"+OOooXXoX.....oooOO++++OooXXXoooXXoooOO+++Oooo..XXXXX...ooO+OOo...oOO++++++++++++OOooXXooOO+OOoXoXo+++Oooo.......oOOOO++++OooX.......oO+++++Ooo...OOOOOoXooXooO++OOooXXXXXXoXXXXooO+++++++OOo...oO+++++++OOOOOOOOOOXXoooO++++OOOXXX.....ooOOO++++++OOo.XooOOOOO++++++OooX..Xo...XX.X.oO++OOXXXoo...oo..XoOO+OOo...oOOO+OOooXXXO+",
-"++OoXXXXooXoXXXXoO++++OoXXX.......XXXOO+++OoooXXooooooXoXXO+OOo.X.ooOO++++OOO+++++OoXXXooOOOOooXoXX+++OooXXXooo..ooooO++++OoooXXXoo.XOOO+++++Oo...ooOooXX...XoO+++OoXXXoooooooXXXoO++++++O+OO...oOO++++++OooXXOOOOoXXoooO+++++OoXXXooXoX..oOO+++++++OO..ooOOOoooO++++OOo...ooXXXoo...oo+OOoXXXoXoooXX...ooO+OooX..oOO+OOoXXoXoO+",
-"++OOXXXoXoXoXXoXoo+++OOOXXX.......XXXOO+++OooXXXoOoOoXoXXoO+OOo...OoOO+OOOOOOO++++OoXXXooOOOOoooXoX+++OoooXXooo..oooooO+++OoooXXooo..OO+++++OOoX..ooOOOXX..XXoo+++OoXXXoooooooXXXOO+++++++OoO..XoOO++++++OoXXXOoOOoXXoooO+++++OOXXXXoXXo..ooOO+++++OOo.XooOOOoooOO+++OOo...ooXoXoo..XoO++OOXXXXoXXoXX.X.OOO++Oo...ooOOOOOoXXXXO+",
-"+OOOXXXXoXXXoXXooOO+++Oo...XoXooXo...oO++OOoooXXoooooXXoXXO+OOOXXXXoOOOOOoooooO++OOOXXXooOOOOo...oo++OOooXXXooooooXoXoO++OOoooXXoooooO+++++++OoXXXooooooooXXXXO++OOOXXXXoOooXoXXXoO++++++OOOo...oOOO++++OOoX..oOooo..oooO++++OOoXXXoooooXXXooOO++++OoO..ooooo.X.oO+++OooX..ooOooOo...oo++OoXXXooooo.....ooO+OOOXXXoooOOoo...ooO+",
-"++OOooXoXoooooooo+++OOOo...oXoooXo...oo++OOoooXXooOoooXXXoO+OOOXXXoXooOoooXXooO++OoOXXXooooooo...oo+++OoooXXoooooXooXXO++OOooXXXooooOO+++++++OOXXXXoooOooXoXoXO++OooXXXooooOooXXXoO+++++OOOoo...oOOO++++OOo...oooOo..ooOO++++OOoXXXXooooXXoXoo+++OOOoo..ooooo..Xoo+++OOo...ooOOoOo.X.oo++OoXXXooooo.....oOO+OOOXXXXoooOoo...ooO+",
-"++OOXoXXooooXoooOO+++Ooo...Xoooooo...oo++OOoXoXXoooooXXoXXO++OooXXXooooooXoXXoO++OOoXXXXooOoooX.Xoo++OoooXXXooooooXoXoO++OooooXXooOooOO+++++O+ooXXXoooooooXXXoO++OOOXXXXoOooXoXXXoO+++++OOOoO...oooOO++++oO...ooooo..ooo+++++OoOXXXoooooXXXXooO+++OOOO..ooooo...oOO+OOooX.XoooOOoo...oo+OOOXXXXooooX....ooO+++ooXXXoooooo...oOO+",
-"++OOooo.......ooOO+++Ooo.....ooX.....oo++Oo.............oOO+++OoooXX.....XXXoOO++Ooo..........XXoOO++Oo....... .....XXO++Oo........oo+++++++++Oooo.......XXoooO++OoX.....ooo.....oo++++OoXo.......XooO+++OOoXo.....XXOOO+++++Ooo.....oOooo...oo++Oo.............oO+++OoX...XoOoOoX...oo+OOo.....oOooX...oO++++Oooo.......oooOOO+",
-"+++OOoo.....X.ooO+++OOoX.....ooo.....Xo+OOO.............oOO++O+OOoXo.....XXooOO+OOoX..........XoXOO++OO.............XoO++OO........oOO+++++++OOOOo.X.....XXXoOO+OOoo.....ooo.....Xo+++OOooX.......XXoO+++OOXoX.....XooO++++++Ooo ....ooOoo...Xo++OO.............oOO+OOoo ..oXOOOXo...Xo++Oo.....OoOXo...oOO+++OOOo.X.X...XooOO++",
-"+++OOOoX.....XoOO++++OOoooooooOOooooooO++OOoooooooooOoOOOO++++OOOOoOooOooOoOO++++OOoooooooooooOoOO+++OOoooooooooooooOoO++OOooooooooOO++++++++++OOOOOoooooOOOO+O++OooooooOOOOooooooO++++OoOooooooooOoOO+++OOOOooooooOoOO++++++OooooooOOOOOooooOO++OOoooooooooooooOO++OOoOooooOOOOOoooooO++OOoooooOOOOooooOO++++OOOOOooooOoOoOO+++",
-"+++++OOOOooooOOOO++++OOOOoOoOOOOOOooOOO+++OOOoOoOOOOoOoOO+++++++++OOOOoOOOOOO++++++OOoOoooOoOOOOO+++++OOOooooOooooOOOOO+++OOOooooOOO+++++++++++++OOOOOoOoOOOO+++++OOOooOoOOOOOoOOOO+++++OOOOoooOooOOO++++++OOOOOoOoOO+++++++++OOoOOoOOOOOOOOOOO+++OOoOoOoOoOooOOO+++++OoOOoOOOOOOOOOOOO+++OOooOOOOOOOOOOO+++++++++OOOOoOOOO+++++",
-"+++++OOOOOOOOOO+++++++OOOOOOOOOOOOOOOOO+++OOOOOOOOoOOOOO++++++++++OOOOOOOO+++++++++OOOOOOOOOOOO+++++++OOOOOOoOOOOOOOOO++++OOOOOOOOOO++++++++++++++OOOOOOOO++++++++OOOOOOOOOOOOOOOOO+++++OOOOOOOOOOOOO++++++++OOOOOO+O++++++++++OOOOOO++++OOOOOO++++OOOOOOOOOOOOO++++++OOOOOOO++OOOOOOOO++++OOOOO++++OOOO++++++++++OOOOOOO+O+++++",
-"+++++++++OOO+++++++++++++O+O++++O+++O++++++++O+OO+++++++++++++++++++++OOO+++++++++++++O++O++O++++++++++++++O++++++O+++++++++++++OO++++++++++++++++++++O+O+++++++++++++++++++++OOO+++++++++O+++OOOO++++++++++++O+OOO++++++++++++++O+O+++++++O+++++++++OO+OOOOO+O++++++++++O+++++++++O++++++++++O++++++++++++++++++++++++O++++++++",
-"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOO+++++++++OOOOO++++++++++++++++++++OOOOOO+++++++++++++++++++++++++++++++++++++++++++++++",
-"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OoooooOO+++++++OoXoOoO++++++++++++++++OOOoooooO++++++++++++++++++++++++++++++++++++++++++++++",
-"++++++++O+++++++++++++++++++++++++++++++++++++++O++++++++++++++++++++++++++++++++++++++++O++O++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O+++++++++++++++OOOooXoooOO++++++OoXXoOO++++++++++++++++OOooXoooOO++++++++++++++OO+++++++++++++++++++++++++++++",
-"+++OOOOOOOOOOOO+++++++++++OOOOOOOO+++++++++OOOOOOOOOOO+++++++++++++OOOOOOOOOO+++++++OOOOOOOOOOOOO++++++OOOOO+O+OOOOOOO+++++OOOOOO+++OOOOOOO++++OOOOOO+++OOOOOOO++++OOOOOOOOOOOOOOOO++++OOOOOOOOOOOOOOOO+++++OOOOOOOOOOOO++++++++++Oo...XXoOO+++++OOoooXoOO+++++++++++++++OooXX...OO+++++++++++++OoooO+++++++++++++++++++++++++++",
-"+OOOooooooooOOOOO+++++++OOOoooOoOOO++++++OOOoooooooOOOO++++++++++OOOooooooOOOO++++OOOoooooooooOOoO+++OOOoOoOOOOOOoOOOO+++OOOoOOOOOOOOOoOOOO++OOOoOoOOOOOOOoOOOO++OOOoooOOOOOoooOOOO++OOOoooOOOOOoooOOOO++OOOOooooooooOoOOO++++++++OO...XXoOO+++++OOoooXXOO+++++++++++++++OOoXX...oO+++++++++++OOOoooOO++++++++++++++++++++++++++",
-"+OO.X..X.....XooO++++++OOoooX....oooO+++OOoo.X..X...XooOO+++++++OOO.X...X....OO+++OO.X..X..X.....oO++OO.....oooXX...ooO+OOoo...XXOOOXo...oo+OOoo...XooOOXo...oo++OoXX....oooX....oo++OoXX....oooX....oo+++OoXo.X........OO+++++++OOo...XooOO++++++OoooXooOO++++++++++++++OoOXX...oOO++++++++++OOo...oOO+++++++++++++++++++++++++",
-"+Oo......X...XXooO++++OOOoXX...X.oooO++++OoX........XXoOOO+++++OOoo...X....X.oO++OOo............XoO++Oo.....oOooo...XoO++OoX...oXOOOXX...Xo++OoX...XXoooXX...Xo++OoX.....ooo.....Xo++OoX.....ooo.....Xo++OOXXX....X.....oOO++++++OOo...ooOO+++++++OOoo..oOO+++++++++++++++OOoO..XoO+++++++++++Ooo...ooO+++++++++++++++++++++++++",
-"OOO..........oXooOO+++OOooXX.....oooOO+++ooo........oXoooO++++OOOooX.........Oo++OOo.............oo+OOoX..X.oooXX...oXO+Oooo...XooOooo...Xo+OOXoX..XoooooX...oX+OOoo.....ooo.....Xo+OOoo.....ooo.....Xo++OoooX..........oO++++++++OO...oOO++++++++++OoX.ooOO++++++++++++++OOOo...oOO+++++++++OOoo...ooOO++++++++++++++++++++++++",
-"OOOoooXXoooooXXXXoO+OOOXXXoXooooo...oOO++Ooo...oooooXXXXoOO++++OoXXXXooooo...oO++OooX..oo...oo...Oo+OOo...oooOOoo...ooO++Ooo...oooOooo...oo+OOoo...ooooXoo...oo+OOoo...oXoooXo...oo+OOoo...oXoooXo...oo++OOXXXoooooXo..XoOO++++++OOo...oOO++++++++++OOooXooO+++++++++++++++OOo..XoO++++++++++OOoXXXXXoOO++++++++++++++++++++++++",
-"+OoooXXXoooooXXXXoO++OooXXXoooooo...ooO+OOOoX..XoXooXoXXXOO+++OoXoXXXXooXo...oo++OOo...oo...ooX..oO++OoX..oooOoOo...ooO+OOoo.X.ooOOOooX..oo++Ooo...oooXooo...oo++OOO...XXoooXX...oO++OOO...XXoooXX...oO++OoXXXXoXooXX...oO++++++++OO.X.oOO+++++++++OOooXoXooO++++++++++++++OOO...oOO++++++++OOoXoXXXXXoO++++++++++++++++++++++++",
-"++OoooXXooooooooXXO+OOo...oooooooXXXooO++OOoXXXoooooooXXXOO+++OOXXXoooooooXoXOO++OOo...oo...oo...oO++OoXXXooOOOOoX..ooO++OOoXXXooOOOooXXXOO++Ooo...oX...oo...oo++OOOooo..XXX..oooOO++OOOoooXXooo..oooOO++OOooXooooo..oooOO+++++++OOo...OOO+++++++++++OoXoXoOO++++++++++++++OOo...OOO++++++++OOo..oooX.Oo++++++++++++++++++++++++",
-"+OOoooXXooOoooXoXXO+OOo...ooOOOOOXXXXXO++OOOXXXXooooXoXXXoO+++OOXXXXooooooXXooO+++OoX..oo...oo..Xoo+OOOXXXooOOOOo..XooO+++OOXXXoooOOooXXXoO++OOoX..oo...oo..Xoo+++OOooo..XoX..oooO++++OOoooXXooo..oooO+++OOoXoooooo..oooOO+++++++OOO...oO+++++++++++OOoo...oOO++++++++++++++OoX..oO+++++++++OOO..ooo..oOO+++++++++++++++++++++++",
-"++OooXXXooOoooXoXoO+OOo...ooOOOOooXXooO++OOoXXXoooooooXXoOO+++OOXoXoXoooOooXooO++OOoX..oo...oo...OO++OoXXXoooOOOO...oOO++OOoXXXooOoOooXXXoO++Ooo...oX...Xo...oO++++Oooo..XXX..oooO+++++OoooXXooo..oooO++++Ooooooooo..oooO++++++++OOoX..oOO+++++++++++OOo...OOO+++++++++++++OOo..XoOO++++++++OooX.oooX.oOO+++++++++++++++++++++++",
-"+OOoooXXooOoooXXXXo+OOoX..oOOOOOOXooXXo+++OOXXXXXXoo..XXooO+++OOooo.....XooooOO++++OoOooo...oOooOOO+OOOXXXooOOOOo.X.oOO+++OOooXoooOooooXoOO++OOo...XX...XX..XoO+++++Ooooo...oooOO+++++++OOoXX...XXoOO++++++OooooXXXXXooO++++++++++Oo.X.oO+++++++++++++OOoXXooO++++++++++++++OO...oO++++++++OOOoooOOoooOoO+++++++++++++++++++++++",
-"++OoooXXoooooXoXooO+Ooo..XoOO++OOoXoXoO++OOOXXXoXoXo..oXoOO+++OOooo.....oXooooO+++++OOooo...ooOOOO+++OoXXXooOOOOO...oOO+++OOXoXXooOooXXXooO++OOoX..oX...Xo...oo++++++OooX...XooOOO++++++OOOXX...XooOO+++++++OOooXXXXXOOO+++++++++OOo.X.oOO+++++++++++++Oooo..OO++++++++++++OOo...OOO++++++++OOooooOOooOOO+++++++++++++++++++++++",
-"++Oooo.......XXXooO++oo..XoOOOOOoooXoXO+++OoXXX.....XXoooO+++++OOooooooX.....OO+++++OOOOo...ooOOO+++OOOXXXooOOOOoX..ooO++++OoooXXoooXXoooO+++Ooo.....oXo.....oO+++++OOooXXXXXooO+++++++++OOoo...ooO+++++++++OOoo..XooOO+O++++++++OOO...oO+++++++++++++++OOoX.oOO+++++++++++OOO...oO++++++++++++OOO+OOOOO++++++++++++++++++++++++",
-"++Oooo.......XXXoOO+OOo...ooOOOOoXXXooo++OOOXXX.....XXoOOO+++++OOOoooXoX..X..OO+++++++OOo..XoOO++++++OOXXXooOOOOo..XoOO+++OOoooXXoooXXoooO+++OOo.....oXo...X.oO+++++OOooXXXXXXoOO++++++++OOoo...OoOO++++++++OOoo...ooOOO+++++++++OOo...oOO+++++++++++++OOOoXXooOO++++++++++OOo...oOO++++++++++++++++++++++++++++++++++++++++++++",
-"++Oooo.......XXooOO++OO...oooooooXXXXoO++OOoXXX.....XXooOO++++OOOoooooXo...X.oO++++++OOOO...oOOO++++OOoXXXooOOoOoX..ooO+++++oooXXoooXXoooO++++OoX....Xoo....Xoo+++OOOoooXXXXXoooOO++++++++OoO...oOO+++++++OOOoXo...ooooOO+++++++++OoX..oO+++++++++++++++OOOXXoooO++++++++++OOO.X.oO+++++++++++++++++++++++++++++++++++++++++++++",
-"++OooXXXoooooooOO+++OOOoXX..ooooX...ooO+++OOXXXooooo..oooOO+++OOXoXooooooo...oO+++++++OoO...oOO++++++OOXXXooOOoOo...OOO+++++OoO..ooo..oOO++++OOoXXX..ooo..XXXOO+++OOooX..ooo..oooOO+++++++Ooo...OOO++++++++OoO..ooooooXooO+++++++OOo..XoOO+++++++++++++++OOXXoooO++++++++++OOo...Oo+++++++++++++++++++++++++++++++++++++++++++++",
-"+OOoooXXoooooOOOO++++OOXoo..oXoXX...ooO++OOoXXXooooo..oooOO++OOoXXXooooooo..Xoo++++++OOOo...ooO+++++O+ooXXooooooo.X.oo+++++++OoX.ooo..oOO+++++OOXXX..Xoo..XXXoO+++Ooooo..ooo..oXoOO++++++OOOoX..ooOO++++++OOoo..oXoooXXXoOO++++++OOO...ooO+++++++++++++++OOooXoXOO+++++++++OoO...oOO++++++++++++++++++++++++++++++++++++++++++++",
-"+OoXXX..XXoooOO++++++OOoXX..oXoXo...oOO++Ooo...XXooooX...oO++OOo...XooXoXo...oO++++++Oooo...oooO++++++OooXXXoooXoXXXOOO++++++OooX...oooO+++++OOoXXXXXoooXXXXXOO++Ooo. .XXoooXX...oo++++++OOoX...ooOOO++++OOoXX..XXoXo...OOO++++++OOo...OOOO++++++++++++++OOooXXXOO++++++++OOoo..XoO+++++++++++++++++++++++++++++++++++++++++++++",
-"+OOXoX..XoXooO+++++++OOOOoXX...XXoooooO+OOoo...XoOooXX..Xoo++OOo...XXXooXX...oO+++++OOooX...ooOOO+++++ooooXXXXXoXXXXoO+++++++OOXo...XoOOO+++++OOoXXXXoooXXXXXoO+O+oo...XXoooXX...oo+++++OOoXo...XooO+++++OOXoX..oXXoX...oo++++++++OoX..XoOO+++++++++++++++OOo...oOO++++++OOOoo...oOO++++++++++++++++++++++++++++++++++++++++++++",
-"+OOXXXX.XoooOOO+++++++OoooXX...XXoooooO++OooX..oXoOOoo...oO++OOo...XoXoXoX..XoO+++++OOooo...XooOO+++++OooXXXoXoXoXXoOO+++++++OOoo...XoOO++++++OoXXXXXoooXXXXooO+OOoo...XXoooXX...oo+++++OOooX...oooOO++++OOoXX..XoXoo...oO++++++++Oo...oXoOO++++++++++++++OOO.X.OO+++++++OOooX...OOO++++++++++++++++++++++++++++++++++++++++++++",
-"+OOoXXXXXXXooO+++++++++Ooo..XXX.....ooO+++ooXXXXXOooooXXXoo+++OoXoXXXXXXXXoooOO+++++OOoXXXXXXXoOO++++++OOooXXXXXXoooOO++++++++OooXXXooO+++++++OOoooooOOOoooooOO++OooXXXXXoooXXXXXoo+++++OOoXXXXXXXOoO+++++ooooXXXXXXXXXooOO++++++OOoX..XooOO++++++++++++++++oX.XoO+++++++OOooo...oO++++++++++++++++++++++++++++++++O+O+O+O+O++++",
-"+OooXXoXXXooO+++++++++OOoo..XXX.....ooO++OoooXXoXOOOOooXooo++OOOoooXoXXXXXoooO+++++++OOXXXXXoXoOO++++++OOOoXoXXXXoooO+++++++++OoooXXooO++++++++OooXoooOOoXoXoO+++OooXXXoXoOooXXXooo+++++OOooXXXXXXOOO+++++OoooXXXXXXXXXooO++++++++OOXXoXXooO+++++++++++++++OOooOOO+++++++OooXXXXooO++++++++++++++++++++++++++++OOOOOOOOOOOOOOO++",
-"++OOOOOOOoOOO++++++++++ooo..XXX...X.ooO+++OOOOOoOO++OOOOOOO++++OOoOoOoOOOOOOO++++++++OOOOOOoOOOO+++++++++OOoOoOOOOO++++++++++++OOOOOOO+++++++++OOOOOOOOOOOOOO+++++OOOOOoOOOOoOOoOOO++++++OOOOOOOOOOO++++++OOoOOOoOOOOOoOO++++++++++ooXXXXoOO+++++++++++++++++OOOO++++++++OOoXXXXXOOO++++++++++++++++++++++++++OOooooooooooooooo+",
-"++OOOOOOOO++O+++++++++++OoooooOoooooOO++++OOOOOO+O+++OOOO++++++O+OOOOOOOOOO+O++++++++++OOOOOO+++++++++++++OOOOOOOO+++++++++++++OOOO+O+++++++++++O+OO++O+OO++O++++++OOOOOOOO+OOOOO+O+++++++OOOOOOOO++++++++++OOOOOOOOOOO+O+++++++++OOoXoXooOO+++++++++++++++++OOO+++++++++OOooXoXoOO++++++++++++++++++++++++++OoOooXoXoXooXXXooo+",
-"+++++O++++++++++++++++++OOOOOOOoooOOO+++++++O++++++++++++++++++++++++++O++++++++++++++++++O++O++++++++++++++++O+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O+OO+++++++++++++++++OOOO++++++++++++++OOOOOOOOO++++++++++++++++++++++++++++O+OOOoOoOO++++++++++++++++++++++++++++oooXoXoXoXooXoXoo+",
-"+++++++++++++++++++++++++OOOOOOOOOOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOO++++++++++++++++++++++++++++++++++O+OOOO+++++++++++++++++++++++++++OOooXXXXXXXXXXXXXXX+",
-"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"+++++++++++++++++++++++++++++++++++++++++++OOOO+++++++++++++++++++++++++++++++++++++++++++++OOOO+++++++++++++++++++++++++++++++++OOOOOOOO++++++++++++++++++++++++++OOOO+++++++++++++++++++++OOO+++++++++++++++++++OOO++++++++++OOOO+++++++++++++++++++OOOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"++++++++OOO+++++++++++++++++++++++++++++++OOOOOOO++++++++++++++++++++++++++++++++++++++++++OOOOOOO++++++++++++++++++++++++++++++OOOOoooOOO++++++++++++++++++++++++OOOOOOO++++++++++++++++++OOOOOO++++++++++++++++OOOOOO+++++++OOOOOOO++++++++++++++++OOOOoOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"+++++OOOoooO++++++++++++++++++++++++++++OOoo...oOO+++++++++++++++++++++++++++++++++++++++OOO..XooOO++++++++++++++++++++++++++++OOXoXX....OO+++++++++++++++++++++OOoo...oOO++++++++++++++++OOo...OO++++++++++++++OO...oo++++++OO...ooO+++++++++++++++OOo.....OO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"+++++OOooooOO++++++++++++++++++++++++++++OXo...ooO++++++++++++++++++++++++++++++++++++++++Oo..XXXOO+++++++++++++++++++++++++++OOooXX.....oO++++++++++++++++++++++OXo...ooO++++++++++++++++OooX.XOO++++++++++++++OO.X.ooO+++++Oo...XooO++++++++++++++Ooo.X.X.OO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"+++++Ooo...oOO+++++++++++++++++++++++++++OooXXXooO++++++++++++++++++++++++++++++++++++++O+OOooXXXOO++++++++++++++++++++++++++OOoo...ooooOO+++++++++++++++++++++++OooXXXooO++++++++++++++++OooXXXOO+++++++++++++OOOXXXooO+++++OOoooXXOO+++++++++++++++OOoo...OO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"+++++OOo...ooO+++++++++++++++++++++++++++OOOXXXooOOO++++++++++++++++++O+O+++++++++++++++OOOoXoXXXoO++++++++++++++++++++++++++OOoo...oooooOO+++++++++++O+O++++++++OOOXXXooOOO+++++++++++++OoooXXXoOO+++++++++++OOOoXXXooOO++++OOooXXXoOOO+++++++++++++OOoo...oOO++++++++++++O+O+O++++++++++++++++++++++++++++++++++++++++++++++++",
-"+++++Ooo...oOO+++++++++++OOOOOOOO++++++++OooXXXoooOOOO++++++++++++OOOOOOOOOOO+++++++++OOOOoOoXXXXOO+++++++OOOOOOOO+++++++++OOOooo...oooooO+++++++OOOOOOOOOOOO++++OooXXXoooOOOO+++++++++++OOooXXXOO++++++++++++OOooXXXooO+++++OOoooXXoOOOOOO++++++++++OOoo...oO++++++++OOOOOOOOOOOOOO+++++++OOOOOOOOOOO++++++++++++OOOOOOOO++++++",
-"++++++OOoXoXoOO+++++++++OOOoooooOoO+++++++OOXXXoXoooooOOO+++++++OOOooooooooooO+++++++OOooooXooXXXoO+++++OOOoooooooOOO++++++OOooXXXXXXXoooO+++++OOOoooooooooooO++++OOXXXoXoooooOO++++++++OOoXoXooOO++++++++++OOooooXooooOO+++++ooooXXooooooOo++++++++++OOo.X.oOO++++++OOoooooooooooooOO++++OoooooooooooOO++++++++OOOoooooooOOO+++",
-"++++++OOoXoXoOO+++++++OOOoooXooooOOO++++++OoXXXXoXXooooOOO+++++OOOooooXoXooooOO++++OOOoooXoXoXXXooO++++OOOoooXoooooOOO+++++OoooXXXXXooXooO++++OOOooooXoooXoooo++++OoXXXXoXXoooOOO+++++++OOOooXoXOOO+++++++++OoooooXoXooOO+++++OoooXXOoooooooO+++++++++OOo...OOO+++++OoooooXoXoXooooooOO+OOOoooooooooooOOO++++++OOOoooXoooooOOO++",
-"++++++OOOOoooO+++++++++OoXo.......oOO++++OOOXXX.......oXoO++++OOoXo..XXX.....oO+++OOoXo.......XXXOO+++OOooX..XXX..XXoO+++++OoXo.....XXXooOO++OOooX..XXX.....ooO++OOOXXX.......oooO++++++OooXX...oO++++++++++OooXXX.....OO++++OOoooXXooo..XooO++++++++++OO...oO++++++Ooo.............ooO++Ooo...XXXXX..oooO++++OOooX..XXX..XXoO++",
-"+++++++OOOOooO++++++++OOXXX......XoOO++++OOoXXX.......XXooO+++OooXX..XXX.....oO+++OooXX.......XXXoO+++OoXXo..XXX..oXXOO+++OOoXo.....XXXooO+++OoXXo..XXX.....XoO++OOoXXX.......XooO++++++OooXX...oOO+++++++++OoXoXX.....OO+++++OoooXXXoo..Xooo+++++++++OOoX..Oo++++++Ooo.............Xoo+OOoX...XXXXX..oooO++++OoXXo..XXX..oXXOO+",
-"+++++++++OOooO++++++++OOooXX..X...ooOO++++OOXXX.......XXXOO+++OOXXX..XXX.....oo+++OOXoX..X....XXXoO+++OOoXX..XXX..XoXoO++++OoXo.....XXXXoOO++OOoXX..XXX.....ooO+++OOXXX.......oooOO+++++OOoXX...oO+++++++++OOooXXXX.X..oOO++++OoooXXXoX..oXoO++++++++O+Oo...oOO+++++ooX.............XoO++ooo...XXXXX..XooOO+++OOoXX..XXX..XXooO+",
-"++++++++++++++++++++++OOoooXoXoo..ooo+++++OoXXXXXOoooo...oO++OOoX..ooooooo...oO++Ooo...oooooXXXXooO++OOo...oXooooX...OO++++OOOoooXXXoOOOOO++OOo...oooooXXXXXoOO+++OoXXXXoooooXXXXOO++++++OOoo...OOO+++++++++OOOOooooo.XoO+++++OooX.....oXoOOO+++++++++OOO..XoO++++++OOoXXXooXXXXXoooXXO++OooXXXXXoooooXXXOO++OOo...ooooooo...oO+",
-"++++++++++++++++++++++OoooooXoXo..oooO+++OOOXXXoXoOooo...oo+++oo...ooOOooo...oO+++OO...oooOooXXXXOO++OOo...XooooXo...oo+++++OOoXoXXoooOO++++OOo...oooooXXXXXoOO++OOOXXXXXoOoXoXXXoO+++++O+OOO...oO++++++++++++OOOOooo..oOO+++OOooo.....oooOO++++++++++OOo...oOO+++++OOoXXXoXoXoXoXXoXoo+++OoXXXXXoooXXXXXoO++OOo...oooOooo...oO+",
-"++++++++++++++++++++++OOXXX..XXX..ooOO++++OOXXXooooooo.X.Oo++OOo...oooOOoooooOO++Ooo...oooOoooXXXoO++Ooo.............oO+++++OOOoXoXXOOOO++++OooX..ooOOOooXXXoOO+++OOXXXooooOooXXXOO+++++++OoO...oOO+++++++++++++OOOoo.XoO+++++Oooo.....ooOO++++++++++++OoX..OOO+++++OOOXXXoXXXXXXooXXoo++OOOXXXoooOoooXXXOO++OooX..oooOOoo.X.oO+",
-"++++++++++++++++++++++OoXXX..XXX..oooO+++OOoXXXXoOOOOo...oo+++oO...oOOOOOOoooOO++OOO...ooOooooXXXoO++OOo.............oO++++++OOXoXXooOO+++++OOo...ooOooooXXXoO+++OOOXXXooOOoooXXXoO+++++++OOo.X.oO++++++++++++++++OOo..oO+++++Oooo.....oooOO++++++++++OOo...oO+++++++OoXXXooXoXoXoXoXXO+++OoXXXooOoOooXXXoO++OOo...oOOOoOo...oo+",
-"+++++++++++++++++++++OOOXXX..XXX..oooO++++OOXXXoooooOo...Oo++OooX..oOOOOOOoOoOO++OooX..OoOOoooXXXOO++OOo.............oO++++++OOoXoXooO++++++Ooo...ooOOoooXXXOO+++OOooXXoooOoooXXooO+++++++OOo...oOO++++++++++++++OOoo.XoOO++++Oooo.....ooOO+++++++++++OOo...oOO+++++OOoXXXXoXXXoXoXoXoO+++OooXXooOoOooXXooO++Ooo...ooOOOooX.XoO+",
-"+++++++++++++++++++++OOo...ooooo..oooOO++OOoXXXXXoOooo...oO+++Oo...ooOOOOOoooOO++OOo...oooooXXXXXoO++Ooo...XXoooooXXXoO+++++OOoXoXXooOO++++++OO...oooooXXXXXoOO+++OoXXXooOOOooXXXoO++++++OOoO...oOOO+++++++++++++OOoo..OO++++OOoooXXXXX..oOOO++++++++OOOoX..ooOO+++++OoXXXooXXXXXoXoXXo++OOoXXXoooOoooXXXoO+++OO...oooOooo...oo+",
-"+++++++++++++++++++++OOoX..ooooo..XooO+++OOoXXXXXooooX..XoO++OOo...oXoOOoOooooO++OOo...XooooXXXXXoO+++Oo...XXoXoXoXoooO+++++OOooXoXXoOOOO+++OooX..oXoooXXXXXOO+++OOoXXXoooooooXXXOO+++++OOOoo...oOOO++++++++++++OOoOo..oOO++++OooXXXXoX..ooOO++++++++OOoo...OOOO++++OOoXXXXoXXoXooXoXoo++OOoXXXoooOoooXXXOO++OooX..ooooooX...OO+",
-"+++++++++++++++++++++OOo...ooooo..oooOO++OOoXXXXXooooo...oo+++OO...oooooooooooo+++OO...XooooXXXXXoO++OoO...oXoooooXXXOO++++OOoooXXXooooOO++++Oo...oooooXXXXXoOO++OOoXXXoooOoooXXXoO+++++OOOooX..oooOOO+++++++OOOOOooo.XoO++++OooooXXXXo..oooOO++++++OOooo...oooOOO++OOoXXXooXXXoXXoXXXo++OOoXXXXoOooXoXXXoO+++Oo...Xoooooo...oo+",
-"+++++++++++++++++++++OOoX............oO++Ooo..........oXoOO++OOOoXX..........oo++OOOooX..........oo+++OOooX..........oO++++OooX.......oooO+++OOoXX.......XXooO+++Ooo.....ooo.....oo+++OOoXo.......oXoO+++++++OooooXoXXXOO++++Oo...Xoooo.....ooO+++OOooXX......oXoO++Ooo...XXoXX..XoX..o++Ooo.....ooo.....oo+++OOoXo.......oooOO+",
-"++++++++++++++++++++++OO.............OO++Ooo..........oXoOO++++oooo...X......oo+++OOXoo..........oo++++ooXo.........XOO++++OoXo.......XXoO++++oooo.......XXXOO++OOoo.....ooo.....oo++++OooX.......XooO+++++OOoooooXXXXXOO++++OO...XXooo.....ooO++++OooX.......XooO++Ooo...XXXXo..XXo..o++Ooo.....oOo.....oo++++oooX.......XXoOO+",
-"++++++++++++++++++++++OOoOoooooooooooOO++OoooooooooooooOOO+++++OOooooooooooooOO++++OOoOoooooooooooo++++OOooooooooooooO+++++OooooooooooooOO++++OooooooooooXXXoO+++OoooooooOOOooooooO++++OooooooooooooOO++++++OooXXXXXoooOO++++OOooooOoOoooooooOO+++OOooooooooooooOO++Ooooooooooooooooooo++OooooooooOOooooooO++++OOoOoooooooOoOO++",
-"+++++++++++++++++++++++OOoOoooooooooOO++++OOoooOooooooOOO+++++++OOOOoooooooOOOO+++++OOOoOoooOooooOO++++++OOoooooooOOO+O++++OOOooooooooOOO++++++OOOooXoXoXXXXOOO+++OOoooOoOOOooooooO+++++OOOoooooooOOO+++++++OoXoXXXXXoOO++++++OOooOoOOOoooooOO++++++OOOoooooooOOO++++OOooooOoOoooOooooO+++OOoooooOOOooooooO+++++OOOoOoooooOOO+++",
-"+++++++++++++++++++++++OOOOOOOOoOOOOOO++++OOOOoOOOOOOOO+++++++++++OOOOOOOOOOO++++++++O+OOOOOOOOOoOO+++++++OOOOoOOOOOO++++++OOOOoooooOOOOO++++++OOOoooooXoXXXOO++++OOoooOOOOOOOOOOOO+++++OOOOOoOOOOoOO++++++OOooXXXXXoOO+++++++OOOoOOO++OOoOoOO++++++OOOOOOoOOOoOO++++OOooOOOOOOOoOOOoOO+++OOOOOOOOOOOoOOOOO++++++O+OOOOOOO++++++",
-"++++++++++++++++++++++++++OOOOO+OOO+O++++++++O+OOOOOO+++++++++++++++OOOO+OOO+++++++++++OOOOOOOOO++++++++++++OO+OOOO+++++++++++O++O+OOOOO+++++++OOoooXXoXXXoXOO+++++O+O+OOO++OOOOOO+++++++++OOOOOOO++++++++++OOOOOOOoOOO++++++++O++++++O+OOO++++++++++O+OOO+OOO++++++++++OOO+OO+OOO+O+O++++++OOOOOO++O+OOOO+++++++++OOOOO+O++++++",
-"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O+++++++++++++OOooXooXXXXXoOO++++++++++++++++++++++++++++++++++++++++++++++++OOOOOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOo+++++++++++++++OOOO+++++++++++++OOOo+++++++++++++++++++++++++++++++++++++++++++++++++++",
-"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOooOO+++++++++++++OoooO+++++++++++++OooOOO++++++++++++++++++++++++++++++++++++++++++++++++",
-"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOooOO++++++++++++OOoooOO++++++++++OOOoooOOO+++++++++++++++++++++++++++++++++++++++++++++++",
-"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOooO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOoXXooOO++++++++++++OO...OO+++++++++++OOoooXoOO++++++++++++++++++++++++++++++++++++++++++++++",
-"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OooooXOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OooXXooOO++++++++++++OO...OO++++++++++++OoXXXoo+++++++++++++++++++++++++++++++++++++++++++++++",
-"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++oooXXoOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OO...ooO++++++++++++OOoX..oOO+++++++++++OOO...OOO+++++++++++++++++++++++++++++++++++++++++++++",
-"+++OOOOOOOOOOO+++++++++++OOOOOOOOOOOO++++++++OOOOOOOOOOO++++++++++OOOOOOOOO+++++++OOoooXXoOOOO+++++++++OOOO+++++OOOO+++++++OOOOOOO+OOOOOOO+++++OOOOO++++OOOOO+++++++OOOOOO+OOOOOO++++++OOOOO++++OOOOO+++++++OOOOOOOOOOOO+++++++++OOo...OOO++++++++++++OOo...OO++++++++++++Ooo...oO++++++++++++++++++++++++++++++++++++++++++++++",
-"++OOOoooooooOOOOO++++++OOOOOoooooooOOO+++++OOOOOoOOOoOOOOO++++++OOOOooooOOOOO++++OOOoooXXooooOOO++++++OOOOOOO+OOOOOOOO++++OOOoOoOOOOOOooOOO+++OOOOOOOOOOOOOOOOO++++OOOoOOOoOOoOOOO++++OOOOOOOOOOOOOOOOO++++OOOOoooooooOOOO++++++++OoX..oO+++++++++++++OOO...oOO++++++++++++OO...oOO+++++++++++++++++++++++++++++++++++++++++++++",
-"OOoo.X.oo.X.XXooO+++++OOooXXX.XXo..XooO++++OoXXX.ooo..XXoOO++++OOoXo.X.XoXooO+++++Oo.......X..OoO+++OOoo...ooOOO..oXoOO+OOoo.....ooo..X..oo+OOoo...oXOOooX...oo++OOO.....ooo....XoO+OOoo...ooOOOoX...oo++++OoXo.X.X.X.XooO+++++++OOo...oOO++++++++++++OOoX..oO++++++++++++OOoX..OO++++++++++++++++++++++++++++++++++++++++++++++",
-"+Ooo...XX...XXoooO++++OoooXX...XX...XoO+++OOXoX..XoXX.XXXOO++++OOoXX...XXXXXOO+++OOo..........oOO++++Ooo.X.OoOOoX.XoXOO++Ooo..X..ooo.....oo++Ooo...XoooOXo...Xo+++OO.X.X.ooo.X...OO++Ooo...Xoooooo...Xo+++OooXX.......XXXOO++++++OOO.X.oO++++++++++++++Oo.X.oOO++++++++++++Oo...oOO+++++++++++OOOOOOOOO+O+++++++++++++++++++++++",
-"OOoo...XX...XXoooOO++OOoooXX..XXX...ooO++++OoXX..oXo..XXXOO++OOOooXX...oXXoXOO++++Oo........X.oOO+++OOoX...ooOOo..XXoOO+OOoo.....ooo...X.Xo+OOoX.X.XooooXo..XXo++OOO.....ooo...X.oO+OOoXX..XooOoXo..Xoo+++OOoXX.......oXoOO++++++OOo...Oo+++++++++++++OOo...OOO+++++++++++OOO...oOO++++++++OOOOOOOOOOOOOOO++++++++++++++++++++++",
-"+OooX....oooXX...oO++OO...XXooo..X..ooO+++OOooo.....ooXXooO+++OoXo..oooXXXXXOO++++OOoXoXXoooooOOO++++OooX..oooOoooXXXoO++OooX..ooooooo...oo+OOoo...ooXXXoo...oo+++OOooo..ooo..XooOO++Ooo...XooooXo...oo+++OoXXXooXoo..oooO+++++++Ooo...oOO++++++++++++OOO...oO++++++++++++OOo.X.ooO++++++++Oooo..oXoooXXoOO+++++++++++++++++++++",
-"OOoo..X..oooXX..XOO++OO...XXoXo....Xoo+++++OOoo.....oooXoOO++OOoXX..oXoXXXXXOO++++OOoXoXXoooooO++++++OOo..XoooOooXXXXOO++OOo...XooooXX..XoO++Ooo...ooXXXoo...oo+++OOooo..ooo.XoooOO+++OoX..oXooOXo...oO++++OoXXXXoXX..oooO++++++OOoo...OOO++++++++++++OOo...oOO+++++++++++OOo...ooO+++++++OOooo..XXoooXXXOO+++++++++++++++++++++",
-"++OOXXXoXooooO...oO+OOo.X.oooooXoXXXoOO+++++OOo..ooooooOOO+++OOooo.....oooooOO++++OOoooXXoooOO+++++++OOoXXXooOOoooXXXoO++OOOoooXXooooXoXoOO+OOOoXXXoX...XoXXXoO++++OOoooo...oXooO++++OOoooo..ooo..oooOO+++OOooooo...XooOO++++++++OOo...oO++++++++++++++OO.X.oO++++++++++++OOO...oOOO+++++OOo...oo.....XXooO+++++++++++++++++++++",
-"+OOoXXXXooOooo...oo++OO...ooOooXoXXXOOO+++++OOo..oooOOOOOO+++OOooo.....XooooO+++++OOooXXXoOO+OO++++++OOOXXXooOOOooXXooO+++OOooXXXoooXXoooOO++OOoXXXXo...oXXXXOO+++++OOooX...oooOO+++++OOoXo..ooo..XooOO++++OOoooo...oooOOO+++++++OOo.X.oOO++++++++++++OOo...Oo+++++++++++++OoX..oOO+++++++Oo...Xo.....oXooO+++++++++++++++++++++",
-"++OOXXXooooooo...oO+OOoX..XXooo..XXXoO++++++OOO..oooOOO+++++++OoooX....oXoooOO+++++OoooXXoOOO+++++++++OoXXXoooOoooXXXoO+++OOooooXoooXXXooO++++OOXXXoX...ooXXXoO+++++OOooo...XoOOO+++++++OOo..oXo..ooOO+++++OOooXo...XooOO++++++++OOO...OO+++++++++++++OOO...oOO+++++++++++OOo...oO++++++++OO...Xo.....XXoOO+++++++++++++++++++++",
-"+OOoXXX..oooXX...oO++Oo.X.XXXoX..XXooO++++++OoO..oooOO+++++++OOooXooXoX..XXXOO++++OOoooXXooOOOOO++++++OOXXXoooOOooXXXoO++++Oooo..ooo.XoOOO++++OoXXXXX.....XXXOO+++++OOoXo...oXoOO+++++++OOOoX...oooO+++++++OOoo..XXoooooOO+++++++OOo...oOO++++++++++++OOo.X.OOO+++++++++++OOO...Oo++++++++OOoOoOooOoooooOO++++++++++++++++++++++",
-"+OOOXXX..oXoXX..XOO++OO...XXoXo..XXXoO+++++OOOo..oooOOO++++++OOoooooXXX..XXooO++++++oooXXoooooOOO++++OOOXXXoooooXoXXXoO+++++OOoX.ooo..OoO++++OOOXXXXX.....XXXOO++++OOOOXo...XooOOO+++++++OoXX...XXOOO+++++OOOoo..XXXoooooO+++++++OOO...oO+++++++++++++OOO...oO++++++++++++OOoX..oOO+++++++++OOoOOOoOoOOOO+++++++++++++++++++++++",
-"++OoXXXXX...XXoooOO+O+OOooXXXXXXXXXooOO++++Oooo..oooooOO+++++OOXXXXXoooXo...oO+++++Oooo..ooooXoooO++++OOoXXXXoooXX..Xoo+++++OOooX...XooO++++++OOooX..ooo..oooOO++++OooX..ooo..oooO+++++++Oooo...ooO+++++++OOoXo..ooXXoXXoo+++++++OOo.X.oOO++++++++++++OOo...OOO+++++++++++OOo...OOO++++++++OO+O+O+OOOOO+O+++++++++++++++++++++++",
-"++OOXXXXX...ooooOO++++OOooXXXXXXXXXXoO++++OOooo..XoXooOOO++++OOXXXXXXoXoX...oOO+++++OOo..XoXXXXXoOO+++OooXXXXXooXX...oo++++++OooX...XoOOO+++++OOooo..ooo..oXoO++++OOoXo..ooo..XXoOO+++++OOOXXXXXoOO++++++++ooXX..oXooXXXXOO+++++++OO...ooO+++++++++++++OooXXoO++++++++++++OOo.X.oO++++++++++++++++++++++++++++++++++++++++++++++",
-"+OOoXXXoooOoooOOO+++++++OOOOoooooXXXOOO+++OOoXo..oXooooOO++++OOXXXXXXoXoX...oO+++++OOoo..ooXXXoXoO++++OOoXoXXoXoXX..Xoo++++++OOoo...XoOO++++++OOooo..ooo..oooO++++OoooX..ooo..oXoOO++++OOoOoXXXooOO+++++++OOXoX..oXXoXXXXOO+++++++OO..XoOO+++++++++++++OOXXooO++++++++++++Ooo..XoO++++++++++++++++++++++++++++++++++++++++++++++",
-"+OOoXXXooooOOO+++++++++++OOOooooXXXXoO++++OO.....XXX..oOO+++++oooXXo.....oooOOO+++++OOOoo..XXXooOO+++++OOOoXX...Xo...oo+++++++OooXoXooO++++++++OoooXoooooXoooO++++OO..XXXoooX....OO+++OOOooXoXXXOO++++++++OOoXo.......XooOO++++++OOoX..ooOO++++++++++++OOoXoOO+++++++++++OOOo...OO++++++++++++++++++++++++++++++++++++++++++++++",
-"+OOoXXXXooOoO+O+++++++++O+OOOooooXXXoOO+++OOX.X..XXXX.OOO+++++OoooXo.X.X.oooO++++++++OOoo...ooooOO+++++OOOOXo.X.oXX.Xoo+++++++OOOXXooOO+++++++++OOoooOOooooOO+++++OOX..XXooo.X.X.OO+++OO........OO++++++++OOooXX.X.X.XXooO+++++++++OoooooOO+++++++++++++OOOOO++++++++++++OooooooOO++++++++++++++++++++++++++++++++++++++++++++++",
-"+Ooo.....XooO++++++++++++++OooX.....ooO+++OOOOoOoOoOoOOO++++++OOOoOoOoooOOOO++++++++++OOOOOOoOOO+++++++++OOOoOoOoOoOOO+++++++++OOOOOO++++++++++++OOOOOOOOOOO++++++OOOOOOOOOOOOOoOO++++OO.X......oOO++++++++OOOOoOoooOoOoOO+++++++++OOOoXoOOO++++++++++++O+OO+++++++++++++OOXoOoO++++++++++++++++++++++++++++++++++++++++++++++++",
-"OOoo.....ooo+O+++++++++++++Oooo.....XoO++++OOOOOOOOOOO+++++++++O+OOOOOOOOO+++++++++++++OOOOOOO+O+++++++++++OOOOOOOOOOO++++++++++OOO+O+++++++++++++O+O++++++++++++++OOOOOOOOOOOOOOO+++++OooooooooO+++++++++++OOOOOOOOOOO++++++++++++OOOOOOO+++++++++++++++++++++++++++++++++OOOOO++++++++++++++++++++++++++++++++++++++++++++++++",
-"+OoooooooooOO++++++++++++++OOooooooooOO+++++++O+++O+++++++++++++++++++++++++++++++++++++++O+++++++++++++++++++O+O+O+O+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOoooooooOOO++++++++++++++O++O++++++++++++++++++++++++++++++++++++++++++++++++++++++++O+++++++++++++++++++++++++++++++++++++++++++++++++++",
-"++OOooooooOO++++++++++++++++OOOoooooOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++oooooooO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"++++++++++++++++++++++++++++++++++++++++++++++++++O+O+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O+++++++++++++++++OOOOOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"+++++++++++++++++++++++++++++++++++++++++++++++++OOOOO++++++++++++++OOOOOO++++++++++++++++++++++++++++++OOOOO+O+OOOOO+++++++++++OOOOO+++++++++++++OOOOooOoOOO+++++++++++++++++++++++++++++++OOOO+O+++++++++++++++O+O++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOO+O++++++++++++++++++++++++++",
-"++++++++++++++++++++++++++++++++++++++++++++++++OOXoXOO+++++++++++OOOooooOO+++++++++++++++++++++++++++OOoooooOOOooooOO+++++++++OOXoXOO+++++++++++OOoo.X...oXoO+++++++++++++++++++++++++++OOOOoooOOO++++++++++++OOoOoOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOoooOOO+++++++++++OOOOOOO+++++++",
-"+++++++++++++++++++++++++++++++++++++++++++++++OOOXXXOOO+++++++++OOoooooooOO++++++++++++++++++++++++++OOoooooOoOoooooOO++++++++OooXXOO++++++++++OOoXo..X..oXoOO++++++++OO+OOOO++++++++++OOOoooooooOOO+++++++++OOOooooOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOoooooooOOO++++++++OOOOooOOOO+++++",
-"++++++++++++++++++++++++++++++++++++++++++++++OOoo...ooOO+++++++OOOX..X...ooO+++++++OOOO+O+O+OOOO+++++Oo.....ooo.....oO++++++++Oo...OO++++++++++Ooo..oXoXXXXXOO+++++OOOooOOOoXO+++++++OOooo....X..oooO+++++++OOooooo..OO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOooo....X..oooO+++++++OoXX.X..oOO++++",
-"+++++++++++++++++++++++++++++++++++++++++++++OOOoo...oooOO++++++OOo.......oOO++++++OOOoOOOOOOOOoOO+++OOo.....ooo.....oO+++++++OOoX..oOO++++++++OOoo..XooXoXXXOO+++++OOoooOOOXoOO+++++++Oooo.X.....XooOO++++++OOXXXoXX.OO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Oooo.X.....XooOO+++++OOXo....XooO++++",
-"+++++++++++++++++++++++++++++++++++++++++++++OOooo...oooOO++++++OooX...X..ooO++++++OooooooooooooOO++++Oo.....ooo.....oO++++++++Oo...OO+++++++++Oooo..oXoXoXXXOO+++++OOOooOOOXoO++++++OOOoXo....X..oooOO++++++OOoXoXo..OO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOoXo....X..oooOO+++++OOoX.X..XoOO++++",
-"++++++++++++++++++++++++++++O+OO++++++++++++Oooo.......ooO+++++Oooo..oooooOOO+++++OOoXo..X.X..XoXOO++OOOooX..ooo..oooOO+++++++OOO...oOO+++++++OOooo..oXooooooOO+++++OOOoOOOOOoO+++++++Oo...Xo...XX...oO+++++OooXXXXX..oOO++++++++++O+O+O+OOO++++++++OOOOOOOOOOOOO+++++++++++++++++++++++++Oo....X...XX...oO++++++OoooooooOOO++++",
-"+++++++++++++++++++++++++++OoooooO+++++++++OOooX...X...ooo+++++OOoo.XooOoOOOO+++++OooXX.......XoXOO+++OOooX..ooo..XooOO++++++++OoX..OOO+++++++OOoXX..XoXoooooO+++++++OOOOOOOOOO+++++OOOoX..XX...oX..XoO+++++OOooXXXo.XoOO++++++++OOOOOOOOOOOOO++++OOOoooooooooOOOO++++++++++++++++++++++OOOoX.......oX..XoO++++++OOooooooOOO++++",
-"+++++++++++++++++++++++++++OOooooO+++++++++OOXXXoooooXXooOO+++OOoooXXoOoOOO+++++++OOXoXXXoooXXXXoOO++++Oooo..oXo..oooO++++++++OOo...oO+++++++OOoX..oX...XXoooO++++++++++++++O++++++++OXoXXX..oooXXoXoXo+++++oooXXooo..oOO++++++++OoooXXooXXXooO++++oXX.X..X.X....OO++++++++++++++++++++++OoXoXo..ooo..oXoXo++++++++OOOOOOO++++++",
-"++++++++++++++++++++++++++O+oOoooOO++++++++OOXXXXoooooXooO+++++OooXXXooOOO++++++++OOXXXoXXooXXXXXOO+++++OOo..oXo..oOOO+++++++++OO...OO+++++++OOo...Xo...XXoooOO+++++++++++++++++++++OOooXXo..XXoXXXXoXo++++OOooXXoXo..oOO++++++OOooXXoXooXXooo+++OOo...........X.oO+++++OOOOOOOOOOO+++++OOoXoXo..XXo..XXoXo+++++++++++++++++++++",
-"++++++++++++++++++++++++++OOooXooO++++++++OOOXXXXooOoXoOoOO+++OooooXXoooOOO++++++OOooXXXXoXoXXXXooO++++OOOo..XoXX.ooO+++++++++OOoX..oOO++++++OOoX..oX...XXoooOO+++++++++++++++++++++OOXoXXX..oXoXXoXoXo+++++oooXXooo..ooOO++++OOOoXoXXXooXXXooO+++OO.X.X....X....oO++++OOOOoooooooOOO++++oooXoX..oXo..oXoXo+++++++++++++++++++++",
-"+++++++++++++++++++++++++++OXooXXOO++++++++OooXXooooOooOO+++++Oo......X.oo++++++++OOXXXoXoooooXXXOO+++++OOOXX...XXOoO++++++++++OOoooOO+++++++OOo...XXoXoXX...oO+++++++++++++++++++++OOXXXXX..oooooXoXXo++++OOooXXXXXXXooO+++++Oooo..oooXXXXXOOO++++Ooooooooooo..Xoo+++OooXX.X.X.X...OO++OOXXXoo..XXXXXoXoXX+++++++++++++++++++++",
-"++++++++++++++++++++++++++OOoXXoooO+++++++OOoXXXXooOooOoOO++++OO.......XooO+++++++OOXXXoooooXoXXXoO+++++OOooX...XXoOO++++++++++OoooooO++++++++OO...XXoXoXX...oO+++++++++++++++++++++OOoXXoX..oooXoXooXX+++++OOoXXXXXoXooOO+++OOooo..oooXXXXXoO++++OOOooooooooo...oO+++Oooo........X.OO+++oooXoX..XXXXXoXoXo+++++++++++++++++++++",
-"+++++++++++++++++++++++++OOOXoXXXOO++++++++OOoXXXXoooXooOO++++OOooo..oXooOO+++++++OOoXXXXXooXXXXoOO+++++OOoXX...oXooO++++++++++OoXXXOO+++++++OOOoooXX...XX..XoO+++++++++++++++++++++OOoo..........XXXoo++++OoooX......ooO++++Oo...XXoXo..oooOO++++++O+OOOOoooo..XoO+++OoooooooooooooO+++OOooXXX..ooXXXXXXoo+++++++++++++++++++++",
-"++++++++++++++++++++++++++OOXoXXXOO++++++++OOXXoXXXooXXooOO+++Ooooo..XoooOO++++++OOoXXXXXooXXXoXXoO+++++OOooX...XXOoO++++++++++OOXXXoOO++++++++OOooXX...XX..XoO++++++++++++++++++++++OooX..X......XXXoo+++++Ooo.X...X.ooOO+++OO...oXoXo..ooooO+++++++O++O+OOOO...oo++++OOoooooooooooOO+++OooXXX..XooXXXXXoo+++++++++++++++++++++",
-"+++++++++++++++++++++++++OOo.....oOO+++++++OOoXXXXoooXoooO++++OOooX..oXooOOOO+++++OOoXXXXXoXXXXXoOO++++OOOoXX...oXoOO++++++++++OOXXooO++++++++O+OOoooooo..XXXOO+++++++++++++++++++++OOoo......X...XXXoo+++++OOo...X..XooO++++OO...XoXoX..oooOO+++++++++++++OOOX.XoO+++OOOOooooooooOO++++OOooXXX..oXoXXXXXoo+++++++++++++++++++++",
-"++++++++++++++++++++++++++OO.....oO+++++++++OOoOXX ..XXoOO++++OooXo..oooooooOO+++OOOXoXX......XoXOO+++++OOooo...ooooOO++++++++OOo...OO+++++++++OOOoOooXo..XXXOO+++++++++++++++++++++++OooXXXXXXoXXXXoOO+++++OOOoooXoooOOO++++OOooo..oooXXXXXoOO+++++++++++++OOoooOO+++++OO+OOOO+O+OO+++++OOooXo..XoX..XXXOO+++++++++++++++++++++",
-"+++++++++++++++++++++++++OOoX....oOO++++++++OOOoXX...XXOOO++++OOooX..oooooooOOO+++OOoXX..X.X..XoXOO++++OOOooX...oooOO+++++++++OOO...oOO+++++++OOooXooooo..oooOO+++++++++++++++++++++++OOoXoXXXXXXXXXXOO+++++OOOoooooooOO+++++OOooo..XoXXXXXXOO++++++++++++++O+oOoOO+++++++++++O+O+++++++++OOXXX..ooo..XoXOO+++++++++++++++++++++",
-"++++++++++++++++++++++++++Oo.....OOO+++++++++OOOOo...ooOO+++++Oo.........X...oO++++OooooooooOoooOO+++++OOoo... ...ooO+++++++++OOo...oO++++++++OOXoXooooo..oooOO+++++++++++++++++++++++OOooooo.X.XooOoO+++++++O+OOOOOOOO+++++++OOooXoXXXooXXXooO++++++++++++++++O+++++++++++++++++++++++++++OOOooX...XoooOO++++++++++++++++++++++",
-"++++++++++++++++++++++++++Oo.....oOO+++++++++++OOo...OOO+++++OOo......X......OO++++OOOOOOOOOOOooOO+++++OOooX......ooO++++++++++OO.X.oOO++++++++ooXXooooo..oooO+++++++++++++++++++++++++OOOoXo...oXoOOO+++++++++++OO++++++++++++OOOoXoXoooXXXooO++++++++++++++++++++++++++++++++++++++++++++OOoooo...oXooOO++++++++++++++++++++++",
-"+++++++++++++++++++++++++OOO.....oO++++++++++++OOoX..oOO++++++Oo..........X..oO+++++OOOOOO+O+OOOO+++++++OOo......XooOO++++++++OOo...OO++++++++OOXXX.......oOO+++++++++++++++++++++++++++OOOoo.X.ooOOO+++++++++++++++++++++++++++OOooXoXoOXoXoOO+++++++++++++++++++++++++++++++++++++++++++++OOOXoX..ooOOO+++++++++++++++++++++++",
-"++++++++++++++++++++++++++OO.....OOO++++++++++++OOooOOO+++++++OOooooooooooooOO+++++++OO+++++++++++++++++OOOoooooooOOO++++++++++OO...oO++++++++OOoXX...X.X.OoO++++++++++++++++++++++++++++OOOOoOoOoO++++++++++++++++++++++++++++++OOOOoOOOoOOOO+++++++++++++++++++++++++++++++++++++++++++++++O+OoOOooOO+++++++++++++++++++++++++",
-"+++++++++++++++++++++++++OOOoXoXooO++++++++++++++OOooO+++++++++OoooooooooooOoOO+++++++++++++++++++++++++OOOoooooooOO++++++++++OOO...OOO+++++++OOooooooooooOO+++++++++++++++++++++++++++++++OOOOOOO++++++++++++++++++++++++++++++++OOO+OOOOOOO++++++++++++++++++++++++++++++++++++++++++++++++++OOOO+OO++++++++++++++++++++++++++",
-"++++++++++++++++++++++++++OOooXooOO++++++++++++++++++++++++++++++OOOOOOOoOOO++++++++++++++++++++++++++++++OOOOOOOOO++++++++++++OOoooO++++++++++OOoooXoooOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O+++++++++++++++++++++++++++++",
-"++++++++++++++++++++++++++OOoooXoO++++++++++++++++O++++++++++++++++OOOOO+++++++++++++++++++++++++++++++++++++OO+++++++++++++++++OOoOOO++++++++++OOooooooOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"+++++++++++++++++++++++++++OOoOOOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOoO+++++++++++++++OOOO+O+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O+O+++++++++++++++++O+O++++++++++++++++OOOO+++++++++++++++++++++++++++++++++",
-"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O+OOOOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOO+++++++++++++++OOOOO++++++++++++++OOOOOOOO++++++++++++++++++++++++++++++",
-"+++++++OOoOOOO++++++++++++++++++++++++++++++++OOoOoOO+++++++++++++OOoOoOO+++++++++++++++++++++++++++++++++++++++++++++++++++++OOoOoooOooOO++++++++++++++++++++++++++++++++++++++++++++++++++OOOO+++++++++++++++++++++++++++++++++++++++++++++++++OOoooooO++++++++++++OOoooooO++++++++++++OooXXoXOOO+++++++++++++++++++++++++++++",
-"+++++++OOoooOO++++++++++++++++++++++++++++++++OOooooOO++++++++++++OOooooOO++++++++++++++++++++++++++++++++++++++++++++++++++OOOooooooooooO+++++++++++++++++++++++++++++++++++++++++++++++++OOOoOO++++++++++++++++O+O++++++++++++++++++++++++++++++ooXXXooO++++++++++++ooXXXooO++++++++++OOoXoXXXooOO++++++++++++++++++++++++++++",
-"+++++OOOoooooOOO+++++++++++++++++++++++++++++OOooooooOO++++++++++OOooooooOO+++++++++++++++OOO++++++++++++++++++++++++++++++OOOoooooooooooO++++++++++++++++++++++++++++++++++++++++++++++++OOooooOO++++++++++++OOOOOOOO++++++++++++++++++++++++++OOooXoXoOO++++++++++OOooXoXoOO+++++OOO++OooXXoXXoooO+++OOO++++++++++++++++++++++",
-"+++++OOXXoooXXOO++++++++++++OOoOO+++++++++++OOoXoooXXoOO++++++++OOoXoooXXoOO++++++++++++OOOoooO+++++++++++++++++++++++++++OOoXo... ......oO++++++++++++++++++++++++++++++++++++++++++++++OOoo...OO++++++++++++OooXoXooO+++++++++++++++++++++++++++oo...ooO++++++OOO+++oo...ooOO+++OOOoo+OooooXoXoooOOOOOooo++++++++++OOOO+++++++",
-"+++O+OOXXXoXXXOOO++++++++++OOooOO+++++++++++OOXXoXoXXooO++++++++OOXXoXoXXooO+++++++++++OOoooooO+++++++++++++++++++++++++++OooXX.........XoO++++++++++++++++++++++++++++++++++++++++++++++OooX...OO++++++++++OOOooXoXoooO++++++++++++++++++++++++OOOo.X.ooO+++OOOOOO+OOOo.X.ooOO+OOooooo+OooXoXoXXooOOOOOooO++++++++++OoXXO++++++",
-"++++oooXXoooXXooO+++++++++OOO...OOO++++++++++OoooooXooOO+++++++++OoooXo..OoO+++++++++++OOXoXoOO++++++++++++++++++++++++++Ooo...oo...XXoooOO+++++++++++++++++++++++++++++++++++++++++++++++OOo...oOO+++++++++OOoXXoooXXoOO++++++++++++++++++++++++OOoXXXooOO+++oooXo++OOoXXXooOOOOOooXoo+OOoooX..oooOooooXoo+++++++++OOXooOO+++++",
-"++++OooXXoooXXooo+++++++++OOo...oOO+++++++++OOoooXoXXoOO++++++++OOooXoo..oOO+++++++++++OOXXXoOO++++++++OOO++++++OOO++++++OOo...oo...XXoooOO+++++++++++++++++++++++++++++++++++++++++++++++OOo...oO+++++++++OOooXXoooXXooO++++++++++++++++++++++++OOoXXXooOOOOOoooXo++OOoXXXooOOOooXXXoo+OOooXo..ooooooooXXO+++++++++OOoooO++++++",
-"+++OOooXXoooXXooO+++++++OOOoO...ooOOO++++++++OoooooXXoOO+++++++++OoooXo.XooOO+++++++++OOooXoOO++++++++OOOOOOO+OOOOOOO+++++oo...Xo...XXXooO+++++++++++++++++++++++++++++++++++++++++++++++OOOO..XoOO++++++++OOooXXoooXXoooO+++++++O+O++O+++++++++++OoXXXoooOOOooooXo+++OOXXXoooOOoooXXoo+OOoooX..XoooooXoXoO+++++++++OOoooOO+++++",
-"++++OOoXXoooXXoOO++++++Oooooo...ooooo++++++++OooXXXoooOO++++++++OOoooXoXXooO+++++++++++OOoooOO+++++++OooXXXOoOOO..oXoO+++OOo. .oX...XXoooO+++++++++++O+O++++++++++++++++++++++++++++++++++OOo...oOO++++++++OOooXXoooXXooO+++++OoOoOOOOoOOOO++++++OOoXXXoooOOooXXXoO++OooXXXooooooXooooO+OoooooXoXXXooXXXoOO+++++++++OooooOO+++++",
-"++++OOooXoXoXooOO+++++OOooooo...oooooOO+++++OOooXXXooOO+++++++++OOooXoXXXooOO+++++++++O+OOOOO++++++++OooXoXooOOOX.oXoOO+++oo...Xo...XXoooOO++++++++OOOOOO+++++++++++++++++++++++++++++++++OoO...oOO+++++++++oooXXoooXXoooO++++OoooOooooooOOO+++++OOOXXXoooooooXXooO++OOOXXXoooooXXXXooO+OooXoXoXXoXooXXooOO++++++++OOOXXXoO+++++",
-"++++++OoooooooOOO+++++OO.............OO+++++OOXXXXoXXoOO++++++++OO..ooXXXooO+++++++++++++OO++++++++++Ooo...ooOoooXXXXOO++OOoXXX.....XXoooO++++++++OOoXoXO+++++++++++++++++++++++++++++++++Ooo...ooO+++++++++OooXXXooXXoOO++++OOoXXXoooo..ooOO++++OoXXXXXXooXXXoXooO++OoXXXXXXXXXXXXXXXo+OooXXXXXoXoXXoXooOO++++++++OoOXXXOO+++++",
-"+++++OOOoooooOO+++++++OoX...........XoO+++++OOoXooXXoooO++++++++OoX.XooXXooOO++++++++++++++++++++++++OooX..ooOOOXoXXXoO+++OOoXo.....XXoooO++++++++OooXXXOO++++++++++++++++++++++++++++++++Ooo...ooO++++++++OOOoXXoXoXXooO++++OOXXXXXooo..oooO+++OOooXXXXXXXoXXXoXOo+OOooXXXXoXXXXXoXXoX+OOoXXXXXXoXXXXXooo++++++++OOoo...oOO++++",
-"+++++++OOoooOO++++++++OO.X........X..OO+++++OOXXXXoXooOO+++++++++OX.oooXXOoO+++++++++++++++++++++++++Ooo..XoooOooXXXXOO+++OOoXX.....XXXooO++++++++OooXoXOO++++++++++++++++++++++++++++++++Ooo...ooO+++++++++OOoXXoXoXXoOO++++OOoXXXXoXo..ooooO++OOooXXXXoXXXXXXoXOo+OOoXXXXXXXXXXXXXXoX+OOooXXXoXoXXXoXooO++++++OOOooX.X.OO+++++",
-"+++++++++O+++++++++++++OOoOoo...oooOOOO++++++OoooooooOO+++++++++OOoooooooOO+++++++++++++++++++++++++++OOXXXooOOOooXXXoO++++OOOooo...XXoooO+++++++++oo..XoO+++++++++++++++++++++++++++++++OOoooooooOO++++++++OoOXoXXXoooOO+++++Oooo..XXXoo...oOO++OOoOooooXXXoo...oO++OOOoooXoXoXoXooo..++OOoOooo...Xo...ooO+++++OOooXo...OOO++++",
-"+++++++++++++++++++++++OOOOoo...ooOoO++++++++OOooooooOO++++++++++OOoooooOOO++++++++++++++++++++++++++OOoXXXoooOoooXXooO++++O+OOoo...XXoooO++++++++OOoX..OO++++++++++++++++++++++++++++++++OooooooOO+++++++++OOooXoXXoXoOO+++++OOoo..oXXXX...oo+++O+OOooooXXXXo...oO+++OOOooXoXXoXoooo..+++OOOooo..XXo...OOO+++++OooXXXoooOO+++++",
-"+++++++++++++++++++++++++OOOoXXXoOOO++++++++++OOOOOOO+++++++++++++++OOOOO+++++++++++++++++++++++++++++OoXXXooOoOooXXXoO+++++OOOoo...XXoooO+++++++++OOoOOO+++++++++++++++++++++++++++++++++++OO+OOO+++++++++OOoo.......ooOO+++O+oOoXXXoXoo...ooO+++OOoOoXXoooXo...oo++OOOoooXXoooooXXXoo++++OOoXXXooXo...ooO++++OOXXXXXoooOOO++++",
-"++++++++++++++++++++++++OOOOoXXXoOOO++++++++++++OO++++++++++++++++++++++++++++++++++++++++++++++++++++OOXXXXXoooXX..XoO++++++OOOo...XXoooO+++++++++++O+O++++++++++++++++OOOOO++++++++++++++++O+++++++++++++OOoo......XooO+++++OoooXXXXXoo...ooO+++++oOoXXXXoXo...Oo+++OooooXooooooXXXoo+++OOOoXXoXoXo...oOO++++OOoXXXXoooOOO++++",
-"+++++++++++++++++++++++O+OoOoXXXooOOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOoXXXXXoXoXo...oO+++++++OoO...XXoooOO++++++++++++++++++++++++++++OOoXoOO++++++++++++++++++++++++++++++OoO.X.....oOo+++++OOooXXXXXXo...ooO++++OOooXXoooXo...oO+++OooXoXXOOOooXXXoo++OOOOoXXXooXo...ooO+++OOoXXXoooooXoOoO++",
-"+++++++++++++++++++++++OOooooooooooOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOXXXXXooXXX...oO++++++OOOo...XXXooO++++++++++++++++++++++++++++OOooXooO+++++++++++++++++++++++++++++++OOOoOOOOOoO+++++OOoXXXXooo..oooOO++++OOoXXoXXXoXX...oo+++OoXXXooOoOoXoXooo+++OXoXooXXoXX...ooO++++OOXXXooooOXoooO++",
-"++++++++++++++++++++++++ooooooXooooooO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOXXX.....XXX..oo+++++OOOoo...XXoXoOO+++++++++++++++++++++++++++Ooo...ooO+++++++++++++++++++++++++++++++OOOOoOOO+++++++OOXXXXXooo..XooOOO+++OOXoXXooXoXo...oo++OOoXXXOoOOoXXoXooo++OOooXXooooXo...ooO++++OOoXXXXoooXXoooO+",
-"++++++++++++++++++++++OOooooXooXooooOOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOooXX....XXX.X.oo+++++OOooo...XXXoXOO+++++++++++++++++++++++++++Ooo...ooO+++++++++++++++++++++++++++++++++O+OO+O+++++++OOoXXXXooo..oooO+++++OOoXoooXoXoX...oo++OOooXXOoOOOXXoXooo++OOXoXooXooXo...ooO++++OooXXXXoooXXooO++",
-"+++++++++++++++++++++O+oX.........X..OO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OoXXXooooooOooOOO+++++Ooo..........oO++++++++++++++++++++++++++OOoo...ooO++++++++++++++++++++++++++++++++++++++++++++++OOoooooooooooOO+++++++OooooOoOooo...oo+++OOoOOOOOOoX.XoX..+++OooooOOOoooX..ooO++++OOoXoXXoXoXXoooO+",
-"++++++++++++++++++++++OO...X..X....X.OO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOoXXXoooOOO++OOOO++++OOoo........X.Oo++++++++++++++++++++++++++OOoo...ooO++++++++++++++++++++++++++++++++++++++++++++++OOoooOOoOoOoOOO+++++++OOoOOOOOOOoX..oo+++OOOOOO+OOoX.oXoX.+++OOOOOOOOOoo.X.ooO+++++OOoo......XoOO++",
-"+++++++++++++++++++++++OOOooOoooOoOoOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOXXXooO++++++O+++++++OOo.X..X.X...OO+++++++++++++++++++++++++++OXo...ooOO+++++++++++++++++++++++++++++++++++++++++++++++++OOO+O+OO+++++++++++++O+++++OOOOOOO++++O+O++O++OoOOOoOO+++++OOOO+++OOOOOOO++++++OOOO.X..X..OOO++",
-"++++++++++++++++++++++++OOOOOOOOOOOO+O+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ooXXoOOO+++++++++++++OOOOoOooooOOOOO+++++++++++++++++++++++++++OoooooOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOO++++++++++++++OOOOOO++++++++++++++OOOO+O+++++++OOOOOOoOOOOO+++",
-"+++++++++++++++++++++++++++O+++O+O++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOoooOO+++++++++++++++++OOOOOOOOOOO++++++++++++++++++++++++++++++OooooOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O++++++++++++++++++++++++++++++++OOOOOOOOO++++",
-"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OoOoOO++++++++++++++++++++++++O+++++++++++++++++++++++++++++++++OOoooO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O+OOO+++++++",
-"++++++++O+++++++++++++++++++++++O++++++++++++++++OOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOO++++++++++++++++++++++++++++++++++++++++++++++++++++OooOOO++++++++++++++++++OOooOO+++++++++++OOoooOO+++++++++++++++++++++++++++++++++++O++++++++++++++++++++++++O++++++++++++++OOOOO+++++++++++++++++++++++++++",
-"++++OOOooO+++++++++++++++++++OOOooO+++++++++++OOOoooO++++++++++++++OOOOOOO++++++++++++++++++++++++++++++++OOooooOO+++++++++++++++++++++++++++++++++++++++++++++++++++OooooOO++++++++++++++++OOoooOOO++++++++++OOoooOOO++++++++++++++++++++++++++++++OOOooO++++++++++++++++++++OOooOO++++++++++OOOXoooO++++++++++++++++++++++++++",
-"++++OOoooOOO++++++++++++++++OOooooO+++++++++++OOooooOO+++++++++++OOooOoOOO+++++++++++++++++++++++++++++++++ooXoXOO++++++++++++++O+O+O+O+++++++++++++++O+O+++++++++++OOooooOOO++++++++++++++OOOooXoOO+++++++++OOooXooOOO++++++++++OOOOOOOO+++++++++++OOoooOOO+++++++++++++++++OOoooOOO+++++++++OOoXXooOO+++++++++++++++++++++++++",
-"++++OOooXOOO+++++++++++++++OOoooooO+++++++++++OOooXoOO++++++++++OOOoooooooO+++++++++++OOO+O+O++++++++++++OOoooXooOO+++++++++++OOOoOoOoOoOO++++++++OOOoOoOOOOO+++++++OOooXXXoOO++++++++++++OOooXooOO+++++++++OOooXXXXXOO+++++++++OOooOOOooOoO++++++++OOooXoOOO+++++++++++++++OOOooXoOO++++++++OOoOXXXooO+++++++++++O+O+O+O+O+++++",
-"+++++OoooXooO+++++++++++++OOooXXooO++++++++++OOXXXXXooO++++++++OOoo.X...XoOO++++++++OOOooOOOooO++++++++++OOoXooooo+++++++++++OooooooooooooO+++++OOOoOooooooOoO++++++OOooXXooOOO+++++++++OOOOoXoXXOOO+++++++OOOooXXXXXoOO+++++++OOOXXoooooooOO++++++++OooooooOO+++++++++++++OOooXooOO+++++++++OOXXooXoXOO++++++++OoOooOOOooOOO+++",
-"++++OOooXoXoOO+++++++++++OOOoXXXoOO++++++++OOOoXXXXXooO++++++++Oooo....XXXOO++++++++OoooooOoooO+++++++++OOOoXoXooo++++++++++OOOoooooooooooO++++OOOoooooooooooOO+++OOooooooXooooO+++++++OOooooXXooooOO+++++OOoooXoooXooooO+++++OOoooooooXooooO+++++++OOooXXoooO++++++++++++OOOooXoXOOO+++++++OOOXXXXoXXoOO+++++++OoOoooOoooooO+++",
-"+++OOooooXoXOO++++++++++OOoooooooO+++++++++OOoooooooooO++++++++OooooooXXooOO+++++++OoOoXooooooOO+++++++OOooooXXooOO+++++++++OO.X..........O+++OoooX........XXoO+++OOoooXoXoXooooO++++OOoOoooXXoooooo++++++OoooXXoXoXooooO+++++OoooXXoXoXooooOO+++++OOooooXXooOoOO+++++++OOOooXXXoooOO++++++OOoooooooXoooOO+++++OoooXooooXooooO++",
-"++++OooooXXooO++++++++++OOooXoXooOO++++++++OoooXXoXoooO++++++++OooXoXXoXooOO+++++++OOooXooooooO+++++++++OooXoXoXoO++++++++++OO............o++OOooo..X.......oXO++OOoooooXooXooooOO++++OoooXoXXXooooooO+++OOoooXoXooXXoooOO++++OoooXoXooXXoooOO++++++OooooXXooooOO+++++++OoOooXoXooooO++++++OoooXXoooXoooo++++++OOooXooooXooooO++",
-"+++OoooXooXooOO++++++++OOooXoXoooOO++++++++OoooXoXooooOO++++++OOoXoXoXXoooO++++++++OoooXXXooooO++++++++OoooXoXXooOO+++++++++OOoX...XooooXXO++OO...ooooOoOoXXXXO++OO.............oO+++OO.............oO+++Oo.............oO++OOO.............oOO++++OoooooXXXooooOO+++++OOooooXXXooooOO+++++OooooXoXoXXoooOO+++OOooXoXXooXXoooO++",
-"+++OooX.....ooO++++++++OooX.....ooO++++++++OoXX.....ooO+++++++OOoXX.....ooOO+++++++OooX.....ooOO+++++++OooX.....ooO++++++++OOooX...oXoooXXo++OoX..XooOOoooXoXoO++Oo.............oOO+OOo.............oOO+OOO.......... ..ooO++OO.............oO+++++OoXX.......oXoO+++++OoXX.......oXoO+++++OoXX.......XooO+++++OoXX.......XooO++",
-"+++OXoX.. ..ooOO++++++OOXoX.. ..ooOO++++++OOooX.... ooOO++++++OOooX... .ooO+++++++OOoXo.....ooO+++++++OOXoX.....ooOO++++++++OooX...XooooXoO+OOo.X.oooOOOooXoXoO++OOoooXXooooo...oOO+++OoooXXooooo...oOO++OOoooXXooooo...oO++OOOoooXXooooo...oo++++OOooo.......XooO++++OOooo.......XooO++++OOXoo.......XXoO++++OOooo.......XXoOO+",
-"++++OoooX...XoOO++++++++OoooX...XoOO+++++++OoOooX...oXOO+++++++OooooX...XooO+++++++OOooXX...XooO++++++++OoooX...XoOO+++++++OOO..XXXXXXXXooO++Oo...ooOO+OOOooooO++OOooXXXooooo...Oo+++OOoooXXooooo..XoO+++OOoooXXooooo..XoOO++OOoooXXooooo..XoOO++++OOoooo...oooOOO+++++OOoooo...ooooOO++++++Ooooo...oOOoOO+++++OOoooo...oOOoOO++",
-"+++OOOoXX...oXOO+++++++OOOOXo...oXOO++++++++OOoXo...XoOO++++++++OOoXo...oXOO++++++++OOooX...oXOO+++++++OOOoXX...oXOO+++++++OOoX.XXXoXXoXooO+OOo...oOOO++OOOOOOO++OOoooXXoooXoXoooOO+++OoooXXoooXXoooOOO+++OoooXXoooXXoooOO++++OoooXXoooXXoooOOO++++++OOoo...OoOOO+++++++OOOOo...oOO+O++++++O+OOoo...ooOOO++++++++OOOo...ooOO++++",
-"++++OOOoX...XXOO++++++++OoooX...XooO++++++++OOooX...XXOO++++++++OOooX...XooO+++++++OOOooX...XooO++++++++OOooX...XooO+++++++OOo..oXXXXXXooOO+OOo...ooO++++OOOOO++++OooXXXoooXXoooO+++++OoooXXooooXoXoOO+++OOoooXXoooXXoooOO++++OoooXXooooXoooO+++++++++OOo...oOOO+++++++++OOOo...oOOO++++++++++OOo...OoO++++++++++OOOo...OoOO++++",
-"+++++oo..ooo..oOO++++++++Oo..ooo..oOO+++++++OOo..ooo..oOO++++++++Oo..ooo..oOO+++++++Ooo..Xoo..oOO+++++++OOo..ooo..OOO+++++OoooXXXXX.....oO++OOoX.XoOO++++++O++++++OoooXXoooXXXooOO+++OOoooXXoooXXoooO+++++OoooXXoooXXoooO+++++OoooXXoooXXoooOO+++++++OOOO...oOO+++++++++++OOO...ooO++++++++++OOOO...oOOO++++++++++OOO...oOO+++++",
-"+++Oooo..ooo..oooOO+++OOooo..ooo..oooOO+++OOooo..ooo..oooOO++++Oooo..ooo..oooOO+++OOooo..ooo..oooOO++++Oooo..ooo..oooOO++++oooXXXoX.....oOO+Ooo...oOO+++++++++++++Oooo..XXX..ooOO+++++Oooo..XXX..ooOO+++++Oooo..XXX..oOOO+++++Oooo..XXX..oOO+++++++++O+OO.X.oO+++++++++++++Oo...oO++++++++++++OOO...oOO++++++++++++OoX..oO++++++",
-"+OOOXXX..XXX..XXoOO+++OOXXX..XXX..XoXOO+++OOXXX..XXX..XXoOO+++OOXXX..XXX..XoXOO+++OOXXX..XXX..XoXOO+++OOXXX..XXX..XXoOO++OOoXo.....oXooooOO++ooX..oOOOOOOOOO+O++++Oooo..oXX..oOOOO++++OooX..oXo..oOOOO++++Oooo..oXo..oOOO+++++Oooo..oXo..ooOOO++++++++OOo...OOO+++++++++++OOO...oOO+++++++++++OOo...OOO+++++++++++OOo...oOO+++++",
-"++OOooX..XXX..XXXOO+++OOXoX..XXX..XXoOO+++OOooX..XXX..XXXOO+++OOoXX..XXX..XXoOO++O+oooX..XXX..XXoOO++OOOoXX..XXX..XXXOO+OOOXoX.....XoXooOO++OOO...oooOOOOooooo++++Oooo..Xoo..oooOO++++Oooo..XoX..oooOO++++Oooo..oXo..oooOO++++Oooo..XXo..ooOOO+++++++++oO...oOO+++++++++++OOo.X.oOO+++++++++++OOoX..oOO+++++++++++OOo.X.oOO+++++",
-"+OOoXXX..XXX..XoXoO++OOOXXX..XXX..XXXoO++OOoXXX..XXX..XoXoO++OOoXoX..XXX..XXXoO++OOoXXX..XXX..XXXoO+++OoXoX..XXX..XoXoO++OOXXX.....XXoXooOO++OO.X.XoooooooooooO+++Oooo..oXX..ooooOO+++Oooo..XoX..ooooOO+++Oooo..XXo..ooooOO+++Oooo..oXo..oooOOO++++++OOOo...oOO+++++++++++OOo...oOO+++++++++++OOo...oOO+++++++++++OOo...oOO+++++",
-"+OOo...XXoXoXX...oO++OOo...XXoooXX...oO++OOo...XXooXoX...oO++OOo...XXXooXX...oO++OOo...XXoooXX...oO++OOo...XXXoooX...oO+OooX..ooXXoXoooooXO+OOOoXo..XXXXX...ooO++OOoooXXooooooooooO++OOoooXXooooooooXoO++OOoooXXooooooooXoO++OOoooXXooooooooXoO++++++OOooX..ooOO++++++++OOOoo...ooOO+++++++++OOoO...ooOO+++++++++OOoO...ooOO++++",
-"+Ooo...XXoXoXX...oo++Ooo...XXXXoXo...oO++Ooo...oXXoXXX...oO++Ooo...XoXooXo...oO++OoO...oXXXoXo...oO+OOoo...XoXXXXX...oO+OOo...ooXXXXooooXoO++OOooo..XXXXX..XooO++OooooXXoooXoXXoXXO++OOoooXXoooXoXooXoO++OoooXXXoooXoXooXoO++OooooXXoooXXXXoXXO++++OOOOoo...OoOOO+++++++OOOooX..OoOOO++++++OOOOoo...OoOOO++++++OOOOoo...OoOOO+++",
-"OOoo...XXoooXX...oo+OOoo...XXoooXX...oo+OOoo...XXoooXX...Xo+OOoo...XXoXoXX...oo+OOoo...XXoooXX...oo++Ooo...XXoooXX...Xo+Ooo...XX.....XXX..o+++Oooo..XXXXX...oOO++OO.....XXXXX...XoO+OOo.....XXXXX...XXO+OOO.....XXXXX...XXO+OOO.....XXXXX...XoO+++++oooXX...XXXooO+++++OoooXX...XXXooO+++++OoooXX...XXXooO+++++OoooXX...XXXooO++",
-"OOoo...XXoooXX...Xo++Ooo...XXoooXX...Xo+OOoo...XXoooXX...oo++Ooo...XXoooXX...Xo+OOoX...XXoooXX...Xo+OOoX...XXoooXX...oo+OoX...oo.....XXX..O++++OOooo...ooooOOO++OOo.....XXXXX...XXO++Oo.....XXXXX...oXO++OoX.X..XXXXX...oXO++Oo.....XXXXX...Xoo+++OOooXXX...XXoooO+++++OooXXX...XXoooO+++++OooXXX...XXoooO+++++OooXXX...XXoooO++",
-"+OXo...XXoooXX...oo+OOXo...XXoooXX...oo++OXo...XXoooXX...Xo+OOXo...XXoooXX...oo+OOoo...XXoooXX...oo+OOoo...XXoooXX...Xo+Ooo...XX.....XXX..o++++++OooXXXXoOO++++++OO.X...XXXXX...ooO++OO.X...XXXXX...XoO+OOO.....XXXXX...XoO+OOO.X...XXXXX.X.XoO++++OoooXX...XXXooOO++++OoooXX...XXXooOO++++OoooXX...XXXooOO++++OoooXX...XXXooOO+",
-"+OooooooXooOooooooo++OoooooooooooooXooo++OoooXoooooOooooooo+OOoooooooooooooXooo++OoooooooooooooXooo++OoooooooooOooooooo+OoooooooooooXoXoooO++++++OooXXXoXOO++++++OOooooXooooooooooO+++OooooXooXoooooooO++OOoooXoXoXoooooooO++OOoooXoooooooooooO++++OoooooXoXoooooO++++OOooooXoXooooooO++++OOoooooXoooooooO+++++OoooooXoooooooO++",
-"++OooooooOOoooooooO+++OoooooooOOooooooO+++OooooooOOooooooOO+++OooooooOOOooooooO++OOoooooooOOooooooO+O+OooooooOOooooooOO+OOoooooooooooXooooO+++++OOoXX..oOO++++++++OoooXooXoXoooooOO++OOooooooooooooooOO+++OooooooooXoooooOO+++OooooXoXooXooooOO++++OOoooooooooooO+++++++OoooooooooooO+++++++OooooooXooooO++++++OOooooooXooooO+++",
-"+++OOoOOOOOOOOoOOOO++++OOOoOOOOOOOOOOOO++++OOOOOOOOOOOoOOOO++++OOoOOOOOOOOOOOOO++++OOoOOOOOOOOOOOOO++++OOOoOOOOOOOoOOOO+++OOOOOOOoOOOOoOOOO++++++Ooo.X.oOO++++++++OOOOOOOOOOOoOOO+O+++OOOoOoOoOoOoOOO++++++OOOoOoOOOOoOOO+++++OOOOOOOOOOOOOOO++++++++OOOoOOOoOOO+++++++++OOOOoOoOOOOO++++++++OOOoOOOOOOOO++++++++OOOoOOOOOOOO+++",
-"+++++++++++++O+O+++++++++O+++++++OOO+++++++++OOOO++++O+OO+++++++O+OOO++++OOO++++++++O+OO+++++OOO+++++++++O+++++++O+OO+++++++OO+OOOOOOO+OO+++++++++OOoOOOO++++++++++++OOOOOOOO+O++++++++++OO+OOO+OO++++++++++OOOO+O+OOO++++++++++OOOOOOOOOOO++++++++++++O+OOO+++++++++++++++OO+OOOO+++++++++++++O+OOOOO+++++++++++++O+OOOOO++++++",
-"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O+OOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"++++++++++++++++++++++++OOooXXXoooooO+++++++++OOO++++++++++++++++++++++OO+++++++++++++++OOOO++++++++++++++++O+O+O+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOO++++++++++++++++++++++OO+++++++++++++++OOOO+++++++++++++++++++++++++++++++++++++OOOOO++++++++++++++++++++++++++++++++++++++++++++++",
-"+++++++++++++++++++++++OOOXoXoXXoXooO++++++++OOOOOO++++++++++++++++++OOOOO++++++++++++OOOoOOO+++++++++++++OOOOOOOOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOOO++++++++++++++++++OOOOO++++++++++++OOOoOOO+++++++++++++++++++++++++++++++++++OOOXoOO+++++++++++++++++++++++++++++++++++++++++++++",
-"+++++++++++++++++++++++OooXXXXX..oooO++++++++OoooooO++++++++++++++++OOOXoOO+++++++++++OOXoXooO+++++++++++OoooXXooooo+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OoooooO++++++++++++++++OOOXoOO+++++++++++OOXoXooO+++++++++++++++++++++++++++++++++OOooXXOOO+++++++++++++++++++++++++++++++OOOOOO+++++++",
-"++++OOOOOOOOOO++++++++OooooXXXX..oooOO+++++++OoXXooOO++++++++++++++OOooXXOOO+++++++++OOoXXXooOO+++++++++OOooXXXoooooO++++++++OOOOOOOO++++++++++++++++++++++++++++++++++++++++++++++++++++OoXXooOO++++++++++++++OOooXXOOO++++++++OOOoXXXooOO++++++++++OOO+OOOO+++++++++++++OOoooXXoOO++++++++OOOOO++++++++++++++++++OOoooOO++++++",
-"+OOOOooooOoOOOOO+++++OOoooXXXXX..oooOO++++++OOooXoXOO+++++++++++++OOoooXooO+++++++++OOOoXXXXoOO+++++++++OoooXoXXoXooO++++++++OOOOOOoOOO+++++++++++++++++++++++++++++++++++++++++++++++++OooooXooOO++++++++++++OOooooXoOO+++++++++OooXXXXoOOO+++++++++OOOOOOoOOOO++++++++OOOOXoXooOOO+++++OOOOOOOOOO++++++++++++++OOoooooOOOO++++",
-"++ooXoXoXXXXXooOOO+++OOoXXXooooXoXXXooO+++++OOoOXXXoo+++++++++++++OOXoXoooO+++++++++OOoXoooXXooO+++++++OOoXXXXX..ooOO+++++++OOXoooOoXooO+++++++++++++++++++++++++++++++++++O+OOO++++++++OOooXXXoOO+++++++++++OOOoXXoooOO+++++++OOOoXoooXXooOO++++++OOOXXOoOoXooO+++++++OOOOoXXXooooOO++++OOoXXXXoooO++++++++++++OOOXo...XXOO++++",
-"+OooXXXXXXXXXXoooOO++OoXXXXXooooXXXXooO++++++OOoXXoooOO++++++++++OOOXXXooOOO++++++++OooXoXoXoooO++++++OOoooXXXX..ooOO+++++++OOXXoooXoooOO++++++++O+++++++++O++++++++++++OOOOOOOO+++++++OOOooXoXooOOOO++++++OOOOoXXXoooOOO++++++OOoXXoXoXooooO++++++OOoXXoooXooooOO+++OOOOoooXXXoooOOOO+++OOXXXXXoooOO+++++++++++OOoXX...XXOOO+++",
-"O+oo...oXoooXo...oO+OOO.....ooooo...ooO+++++OOOooXXooOOO+++++++++OooXXXoooOO+++++++OOOXXoooXXooo+++++++OooXXXXX..ooOO++++++OOooXoooXXooo++++++++oooOO+++O+ooOO+++++++OOOOoOoooooO++++OOOooooXXXoooOOOO++++OOOoooXXXooooOOO++++OOoooXoooXXoooOO+++OOOoOXXoooXXoooOO++OoooXoXXoooXXXXXooO+++oooX..XoooOOO+++++++++Ooo..ooo..ooo+++",
-"+Ooo...XXoXoXX.X.oO++OO.X...oooXo...ooO++++OOoooXXXXXooOO++++++OOOooXXXXXOoOO++++++OOooXXXXXXooOOO++++OOOoooXXXXooooOO+++++OOoXoXXXXXoooOO++++OOoooOOO+OOOoooO+++++OOOooXXXXX.X.OO++++OXoXoXooooXXXXooO++OOXXXXXoooXoXXXooO++OOoXXXXoooXoXXXooO+++OoXXXXoooooXXXooO+OooXXXXXoooXXXXXoo+++OOXoX..oXoooOOO+++++++Oooo..ooo..ooo+++",
-"+OOo...oXXoXoX...oo+OOo.....oooXo...ooO+++OOOooXXXXXoooOOO++++OOooooXXXXXooOOO++++OOOoooXXXXXoooOO++++OoooXoXXXXXooOOO+++OOOOoooXXXXXoooOO+++++OooooOOOOOooooOO+++OOooooXXXXX..XoO++OOOXXXXXooooXXXXoo+++OOXXXXXooooXXXXoo+++OoXXXXXooooXXXXooO+OOoXXXXXOooXXXXXooO+Ooo...oXoooXX...ooO+O+OXoX..XoXoooOOOO++++O+oooX.ooo..oooO++",
-"+OOoXXXoooooooXXXoo++OooXXXXXXXoo...oOO+++OoXo..oooXX...oO++++OooX..XooXo...oO+++OOoXXXXoXoXo...oO+++OOooXXXXooXo...oO++++OoXXXXXooXo...oOO+++OO...XXooooX..XOO+++Oooo..oooX....oOO++OO...XooOooo...ooO++OoX.XXoOoooo...ooO+OOO...oXOoooo...ooO++OO.X.XooOOoo...ooO+Ooo...XXooooX...ooO++OOooo.......XXXOOO++++OOooXXooo..oooO++",
-"OOOOXXXXooooOoXXXXo++OoXXXXXXXXoo...ooO+OOOoXX..XXoXo...oOO+OOOXoo..oXoXX...oOO++OooXXXXXooXX...oOO++OoXXoXXoXoXX...oOO+OOOXoXXXoXoXX...OOO+++OOX.XXooooXXX..O++OOOXXo..XXX.....oOO+OOO..XXooOooo...ooO++Oo...XXOOooo...ooO++OO...XXOOooo...ooO++OO...oXooOoo...ooO+Ooo ..XooooXX...ooO+++Oooo.......XXXooO++++OoooXXXoo..oooO++",
-"+Ooo.....ooooooooXX++OoXXXoo...oo..XooO++OoXoo..oooXo...ooO++OooXX..XooXo.X.ooO++OooXXXXoXoXo.X.ooO++OOoXXXXoooXo.X.ooO++OooXXXXXoooo...ooO+++OOooo..XXX..oooO+++OOoXX..ooo.....ooO++OO...XXOoOoo...ooO++OoX..XooOOoo...ooO+OOoX..ooooOoo...ooO+OOo...XoOOooo...ooO++OOXXXXoooooXXXXOOO+++OoooXXooooooXoXoO++++OooXXX.....oooO++",
-"OOoo.....XooOoXoXXo+OOOXXXoXX..oo...oOO+OOo...oooooooXXXooO++Oo...ooooOooXXXooO+OOo...ooooOooXXXooO+OOo...oooooooXXXooO+OOo...oooooooXXXooO++++OOoo..XXX..ooOOO+OOo...oooXoXoXXXooO+OOooXXooOOOOoX..ooO++OoXXXoooOOOo.X.oOO++OoXXXooOOOOo...oOO++OOXXXoooOOoo...oOO+OOOoXoXXoooXoXXooO+++OOoooXXooOooXoXXXO+++OOoooXX.....XooOO+",
-"OOoo.....ooooOoooXX++OOXXXXo...oo...oOO++Oo...ooOOOOooXXoXO+OoO...ooOOOOoXXXoXO+OOo...ooOOOOoXXXoXO+OOo...XoOOOOoXXXoXO+OOo...ooOOOOooXXoXO++++OOOo..XXX..oOO++++oO...oXoooXXXXXXoO++OoXXXoooOOOo...oOO+OOOXXXooOOOoO...ooO+OOOXXXooOOOOoX..ooO+OOooXXooOOOOO...ooO++OOooo..ooo..oooOO++++OooXXXoooOoXXoXoO++++OoooXX.....oooOO+",
-"+Ooo...oXoooOoXoXXo+OOoXXXooXXXoo.X.oOO+OOo..XoOO++OOoXoXXo+OoO...oOOO+OooXoXoO++oO...oOO++OooXoXXo+OOo...oOOO+OooXoXoO+Ooo...oOO+OOOoXoXXo+++++OoOXo...ooooOO++OooX..oooXXoooXooXO+OOOXXXooOOOOO.X.oOO+OOoXXXooOOOOoX..ooO+OOOXXXooOOOOo.X.oOO+OOOXXXooOOOoO..XooO+++OOOo..oXo..ooOO++++OOoooXXoooooXoXXXO++++OoooXXooooo...oO+",
-"OOoo...XooooOOoooXX++OOXXXXoXXXoo...oOO+Ooo...oOOO+OoooXXoO+Ooo.X.oOO++OOooXXXO+OooX..oOOO+OOooXoXO+OOo.X.oOO++OOooXXXO+OOo..XoOO++OoooXoXO++++OOoooX...XXOOO+++OOo...ooXXXoooXoXXO+OOooXXooOOOOo..XoOO++OOXXXooOOOOo...oOO++OOXXXooOOOOo...oOO++OOXXXooOO+Oo...oOO+++OOooX.oXo..OOO++++++OoooXXoOooooXoXoO++++OoooXXoooXX...oO+",
-"+OOOXXXoooOOoooXXXo+OOoXXXoXooXXX..XooO+OOo...ooOOOOooXoXoo++Oo...ooOOOOOXXXXoo++Oo...ooOOOOooXXXoO+OOo...ooOOOOOXXXXoo+OOo...ooOOOOooXXXoO++++OOoo..XXX..oooO++OOo...XXoooooXXXXoo++OoXXXooOOOOO...oo++OOoXXXooOOOOoX.Xoo++OOoXXXooOOOOoX..ooO+OOoXXXooOOoOO.X.oO+++++OOOXX...oooOO++++++Oooo..XXXXX...ooO++++OoooXXooooo..XoO+",
-"+OooXXXoooOOOooXoXo++OOXXXooXooXX...oOO++OoX..oOOOOOoXXXXoO+OOo...ooOOOoOXoXooO+OOo..XooOOOOoXXoXXO+OOo...oOOOOoOXoXooO+OOo...ooOOOOoXXoXXO++++Oooo..XoX..oooO++OOo...XXXoXooXXXooO++OOXXXooOOooO...oO+++OOXXXooOOoOo...oO+++OOXXXooOOoOo..XoOO++OOXXXooOOOoo...oOO+++++OOoX.. XooO+++++++Oooo..XXXoX...ooO++++OoooXXoOoOo...oO+",
-"++OOXXXXoooooooXoXo+OOoXXXoooXoXX...oOO+OOo...oooOOOoXoXoXO+OOoX..oooOoOoXXXXXO+OOO...oooOOoOXXXooO+OOO...oooOoOoXXXXXO+OOoX..oooOOoooXXooO+++OOooo..oXo..oooOO+OOoX..XXooooooXXXXO+OOOXXXooooOoo.X.OoO++OOXXXooooOoo...OoO++OOXXXooooOoO...oo+++OOXXXooooOoO..Xoo++++++OOoo...ooOO++++++OOooo..XXXXX...ooO+++OOoooXXoooooX..oo+",
-"+Ooo...ooooOoo...oo+OOO...XooooXX...oOO+OOOoXXXXooooo...ooO++OoXXXoXooooo...oOO+OOOoXXoXooooo...ooO+OOOoXXXXooooo...oOO+OOOXXoXXooooo...ooO+++Oo...oXooooX...O++OOoXXX..oXooX...oOO++OOooXXXooooo...OOO++OOooXXoooooo.X.oO+++OOooXXXooooo..XoO+++OOooXXXooooo...OO++++++OOoo...ooOO++++++OOoXo..oXoXooooOOO+++OooXoXXooooX..XoO+",
-"+OOoX..XooooXo...oO+OOo...oXoooXX...ooO++OOXoXoXooooo...oOO++OOoXXXXooooo...OoO++OOXoXXXooooo...oOO++OOXoXoXooooo..XooO++OOoXXXXooooo...oOO+++OO.X.ooOOooo.X.OO++OOXXX..ooooo...OoO+++ooXoXoooooo..XoO+++OOoXoXXooooo..XOOO++OOoXooXooooo...OOO+++ooooXoooooo.X.oOO++++OOooo...oooOO+++++OoooX..XXXoooOOO+++++OOooXXXXXoXo...oo+",
-"+OoX..........oooOO++OoX....ooooo...oOO++OOOooXX.....oooOO+++OOoooXX.....oooOOO++OOoooXX.....ooooO+++OOOooXX.....oooOOO++OOOoooX.....ooooO++++OOoooOOOOOOOooOO+++OOoXXXX.....oooOO++++OOoo.......oXooO++++OOoo.......XoXOO++++OOoo.......ooXOO++++Oooo.......Xooo++++++Ooo.......oOO+++++Oo.....ooXoOOO+++++++oo.....oXo....XoO+",
-"OOoo..........XooOO+OOo.....oooXo.X.oO+++++oOooX.....oooOO+++++OOooX.....XooO++++++OOooX.....oooOO+++++oOooX.....oooO+++++OOOoXX.....XooOO++++++OoOOOO++OOOOo+O+OOoooXXX.....XooOO+++++OOo.......XooOO++++OOOoX......oXoOO++++OOOo.......XooOO+++++OOo.......oXoOO+++++OOoX......ooOO+++OOo.....XooOOO+++++++OOO.....Xoo.....OO+",
-"+Ooo..........oooO+++OO.....OOOoo...OO+++++OOooX.....ooo+++++++OOooX...X.oooO++++++OOooX.....ooO+O+++++OOooX.....oooO+++++OOOOoX...X.oooO+++++++OOOO++++OOOOO+++++OXoXXX....XoooO++++++OOOX..X...oXoO++++++OOo.X.....oooO++++++OOOX......oXoO++++++OOOX......oooOO++++OOoo...X...ooO++++OOO.....oXoOO+++++++++Oo..X..ooo..XX.OO+",
-"+OoOOOOOOOoOoOoOO++++OOOOOOOoOOOoOOOOO++++++OOOOOOOOOOO+O+++++++OOOOOOoOoOOOO+++++++OOOOOOOOOOOO++++++++OOOOOOOOOOO+++++++++OOOOOOooOOOO+++++++++++++++++++++++++OOoooOooOoOooOO+++++++O+oOOOooOoOOO++++++++OOOoOoOOooOO+++++++OOOOOOOOOoOOO++++++++OoOOOoOoOooO+++++++OOOOOooOOOOOO++++++OOOOOoOOOO+++++++++O+OOOoOOoooOooOOO++",
-"++OOOOoOOOOOOOOO+O++++OOOOOOO+O+OOOO+++++++++OOOOOOoO+O++++++++++O+OOOOOOOO+++++++++++OOOOOOO++++++++++++OOOOOOOOOO++++++++++OOOOOOOOOO+++++++++++++++++++++++++++OoooOOOOOOOOO+O++++++++OOOOOOOOOOO+++++++++OOOOOOOOOOO++++++++OOOOOoOOOOOO+++++++++OOOOOOOOO+++++++++++OOOOOOOO+++++++++OOOOOOOO+++++++++++++OOOOOOO+OOOOOO+++",
-"+++++O+OOOO+O+++++++++++OO++++++++O++++++++++++OOO++++++++++++++++O+O+O+++++++++++++++++OOOO++++++++++++++++OOOO++++++++++++++++O++O+++++++++++++++++++++++++++++++O+OOOO+O++++++++++++++++OO+O+O++++++++++++++++OO+++++++++++++++++O+O+O++++++++++++++++O+O+++++++++++++++O++OO+++++++++++++O+O++++++++++++++++++OO++++++++++++",
-"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"+++++++O++++++++++++++++++++++++++++++++++++++++++O++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++O+++++++++++++++++++++++++O++++++++++++++++O++++++++++++++++++++++++++++++++++++O+++++++++++++++++++++++++O+++++++++++++++O++++++++++++++++++++++++++++++",
-"+++++OOooO+++++++++++++++++++OOOoo++++++++++++++OoOoO+++++++++++++++OO+O+++++++++++++++++++++++++++++++++++OooooO++++++++++++++++++++++++++++++++++++++++++++++++++++OOooO+++++++++++++++++++++OooOO+++++++++++++oooO++++++++++++++++++++++++++++++++OOooO+++++++++++++++++++++OooOO+++++++++++OoOoO++++++++++++++++++++++++++++",
-"++++OOOooOOO++++++++++++++++OOoOooO+++++++++++OOOoooO++++++++++++OOOOOOOOOO+++++++++++++++++++++++++++++++OoooXoOO++++++++++++++++++++++++++++++++++++++++++++++++++OOOooOOO+++++++++++++++++OOOooOOO++++++++++OOoooOO++++++++++++++++++++++++++++++OOOooOOO+++++++++++++++++OOOooOOO++++++++OOOoooO++++++++++++++++++++++++++++",
-"+++++OOoooOO+++++++++++++++OOOooooO+++++++++++OOooooOO+++++++++++OOooooooOO++++++++++++O+O++O+++++++++++++OooXoXOO+++++++++++++++++++++++++++++++++++++++++++++++++++OOoooOO+++++++++++++++++OOooooO++++++++++OOOoooOOO+++++++++++++O+++O++++++++++++OOoooOO+++++++++++++++++OOOoooO+++++++++OOooooOO+++++++++++++O+O++O++++++++",
-"++++OOooooooO++++++++++++++OOXoXooO++++++++++OOoXXXXooO++++++++OOoo..X.XXooO++++++++OOOooOOOooO+++++++++++Oooooooo++++++++++++++++++++++++++++++++++++++++++++++++++OOOoXoooO+++++++++++++++OoooXoOO++++++++++OooXXXXoOO++++++++OOoooOOOooOO++++++++OOOoXoooO++++++++++++++OOoooXoOO++++++++OOoXXXXoo++++++++++OOOooOOOoo+++++++",
-"+++++OOXXoXoOO++++++++++++OOoXXXoOO++++++++++OoXXXXXooO+++++++++ooo.....XXOOO+++++++OOoooOoOooO++++++++++OOoXoooooO++++++++++++++++++++++++++++++++++++++++++++++++++OooXoXoOO+++++++++++++OOoooXooO+++++++++OOooXXXoXOO++++++++OOOooOOOooOOO++++++++OOXoXooOO+++++++++++++OOoooXoOO++++++++OoXXXXXooO+++++++++OOooooOOooO++++++",
-"+++++OOooXoXOO+++++++++++OOooooooOO++++++++OOOooooooooOO++++++OOoooooXXoooOO+++++++OOOooooooooOO+++++++++OoooXXooO+++++++++OOOOOO+OOOOOO+++++++++++OOOOOOOOOO++++++++OOooXoXoOO++++++++++OOOooXXooOO+++++++++OOoXooXoooOO+++++++OoOooooooooOO++++++++OOooXooOO++++++++++++OOooXXoOOO+++++++OOooooooooO++++++++OOOooooooooO++++++",
-"++++OOOooXXooOO+++++++++OOOoooXooOOO++++++++OOoXXoooXoOO+++++++OooXoooXXoooO+++++++OOooXooooooO++++++++OOOOXoXoXoOOO+++++++OOOoOOoOOOOoOOO+++++++OOOOooooOoOOO++++++OOOooXXoooOO+++++++++OOooXXooooOO+++++++OOoXoXooXoooOO+++++OOOoXooooooooOO++++++OOOoooXXOO+++++++++++OOooXoooOO+++++++OOOooXXooooO+++++++++OOooooooooOO+++++",
-"+++OOoooooXXoOOO+++++++OOoooXoXoooO++++++++OooooooXoXooO++++++OOooXoXXXXooOO+++++++OoOooXooooooO+++++++OOoOoXXXooOO++++++OOoooooooooooooOO+++++OOOooooooooooOOO+++O+OooooXXXoooOOO+++++OOOOoooXXoooOOO+++++OOOooXoooXoooOO+++++OooooXoooXoooOO+++++++OOooXoooO+++++++++++OOooXXooO+++++++++OOooooXoooO++++++++OOoooXooooo+++++++",
-"+++Oooo.....XXOO+++++++Oooo.....XXOO+++++++OooX.....XXOOO+++++OOXoX.....XXoOO+++++OOooX.....XXOOO++++++OooX.....XXoO+++++OO.....oXX.....ooO+++OOoooX.........oO++++Oooo.......oooO++++OOoXo.......oooO++++OOoXo.......oXoOO+++OOooo.......oXoOO+++++Ooo.....OO++++++++++OOo.....oOO++++++++ooo.....oOO+++++++++Ooo.....oOO++++++",
-"+++OoXX.....XXoOO++++++OoXX.....XXoOO+++++OOoXX.....XXoOO+++++OOoXo.....XXoOO++++++OXoX.....XXoOO++++++OoXo.....XXOo+++++OO.....XXXX....XoO+++OooXX..........oO++OOOoXo.......XoooO+++OOooX.......XXooO+++OOooX.......XoXOO+++OooXX.......oXooO+++++Ooo.....oOO+++++++++OooX....oOO++++++++Ooo.....oOO++++++++OOoo.....oOO++++++",
-"++OOoooooooo..ooo+++++Oooooooooo..ooo+++++OOoooooooo..ooOO++++OOooXooooo..ooo+++++OOoooXoXoo..ooOO++++OoooXooooo..oooO++OOOooooo...ooooo..o+++Oo...oooOooo...oo+++Oo...oooooXo...oO+++Oo...ooooooo...oO++OOo...XXooooX...oO+++Oo...oXoooXX...oO++++++OOoo...oO+++++++++++OOoo...oO++++++++O+Oooo...oO+++++++++++OOoo...oOO++++++",
-"++OOoXXoXooo..ooo++++++OoXXoXooo.Xooo+++++OOoXXoXooo..ooo+++++OOooooXooo..ooo+++++OOoXoooooo..ooo++++++OooXoXooo..ooO++++OooXXXX...oXooo..o++OOO...ooOOooo...Oo++OOO...XXoooXo...oO++OOo...XooooXo..XoO+++Oo...oXoooXo...OO++OOo...oXooooX..XoO++++++OOOo...oOO++++++++++OOOo..XoOO++++++++++Ooo...oOO++++++++++OOoo...OO+++++++",
-"++OoooXooooo..oooO++++Oooooooooo..oooO++++OoooXooooo..oooO++++OOooXooooo..oooO++++OoooXooXoo..oooO++++OoooXooooo..oooO++OOoooooo...ooooo..o++Ooo.X.ooOOOoooXoOO++OOo...XooooXX...oo++OOo...oXoooXo...oo++OOO...oXooooX...oo++OOO...XXoooXo...oo+++++++OoO...OO++++++++++++OoO...oO+++++++++++OOO..XoO++++++++++++OOO...oOO++++++",
-"++OOoXo.......oooO++++OOXXX.......oooO++++OOoXo.......oooO++++OooXo.......oooO++++OOXoX.......oooO++++OOXoX.......oooO++OOoXXX.....XXXXX..O++OOo...oOoOOOOoooOO++OOo...XXXXXoX...OO++OOo...XXXXXXX...oO++Ooo...XXXXXXX...oO++Ooo...XXXXXXX...oO+++++++OOo...oOO+++++++++++OOo...oOO++++++++++OOo...oOO+++++++++++OoO...oOO++++++",
-"+OOooXX.......oooO++++OoooX..... .oooO++++OooXX.......oooO++++OOoXX.......oooO++++OoXoX..... .oooO+++OOoXoX.......oooOO+OooXXX.....XXXXX..o++OOo...ooOOOOooooOO++OOo...XXoXXXX...oo++OOo...XXXXXXX...oo+++Oo...XXXXXXX...oo++OOo...oXXXXXX...oO+++++++OOoX..oOO+++++++++++OOO.X.oOO++++++++++OoO...oOO+++++++++++OOo.X.oOO++++++",
-"+OOo...oooooXXoooO+++OOo...oooooXXoooO+++OOo...oXoooXXXooO+++OOo...oooooXXoooO+++OOo...oooooXXoooO++++Oo...oooooXXXooO++OoXXXXoo...XXoXoXoo+++Oo...oooOOoOooOoO++OOo...XXXooXoXoXoO++Ooo...XXoXooXXoXOO++OOo...XXoXoooXXooO++OOo...XXoooXoXXooO+++++++OOo...oOO+++++++++++Ooo...OOO++++++++++OOo..XoOO+++++++++++OOo...OOO++++++",
-"+OOo...XooooXXoooOO++OOo...oXoooXXoooOO++OOo...oooooXXoooOO++OOo...oXoooXXoooOO+++Oo...oooooXXXooOO++OOo...oXoooXXoooO++OXXoXXoo...XXXXoXXO+++OOXXX..XXXXX...oo++OOo...XXoXXoXXXooo++OOo...XXoXXXoXXooo+++oo...oXXoXXoXoXoO++OOo...XXXXXoXXoXoo++++++OOoO...oOOO+++++++++OOOo...ooOO+++++++OOOoO...ooOO++++++++OOOOo...ooOO+++++",
-"+OOo...oooooXXXooOO++OOo...oooooXXXooOO++OOo...oooooXXoooOO++OOo...oooooXXXooOO++OOo...oXoooXXoooOO++OOo...oooooXXoooo++OoXXXXoo...XooXXoXO+++OOooX..oXoXX.X.Xo++OOo...XXXoXXoXXooO++OOo...XXXooXoXXooO+++Oo.. XXoXXXoXXooO++OOo...XXoXoXoXXooO++++OOOOoo...ooOOO++++++OOOoOo...ooOOO++++++OOOoo...oOoOO+++++++OOooO...ooOOO++++",
-"+OOO...XXXXX..XXXoO++OOo...XXXXX..XXXoO+++oO...XXXXX .XXXoO++OOo...XXXXX..XXXoO+++oO...XXXXX..XXXoO+++oO...XXXXX..XXXoO+OXo..........XXX..O++++OoOooX...oXoXoOO+++OoXXX..XXXXX...oO+++OoXXX..XXXXX...oO++OOOXXX..XoX.....oO+++OOXXX..XXXXX...oO+++++oooXo...XoXooO++++++oooXo...XXoooO++++OoooXo...XXoooO+++++OooooX...XXoooO+++",
-"+OOo...XXXXX..XXXOO++OOo...XXXXX..XXXOO+++Oo...XXXXX..XXXOO++OOo...XXXXX .XXXOO++OOo...XXXXX..XXXOO+++Oo...XXXXX .XXXOO+OoXX.........XoX..O++++++OOoo...XoXooO++++OOoXX..XXoXX...oO+++OOXXX..XXXXX...oO+++OOooX..XXX.....oO++OOOXXX..XXXXX...oO+++OOooXXX...XXoooO++++OOooXXX...oXXooO++++OooXXX...XXoooO+++++OooXXX...oXXooO+++",
-"++OOoooXoXXXXoXooOO+++OOoooXoXXXooXooOO++OOOoooXoXXoXoXoooO+++OOoooXoXXoooXoooO+++OOooooXoXXXoXoooO++OOOoooXoXXoooXoooO+OooXoXoXooooXoXooOO++++++OOooXXXoXoOOO+++++OoOoooooXXooooOO++++OOOooooXoXooooOO++++OOooooXooXoooOOO++++OOOooooooXooooOO++++OooooXoXoXoXooOO++++OoooXoXoXoXoooOO+++OooooXoXooXoooOO++++OoooXoXoXoXoooOO++",
-"++OOoooXoXooooXoXOO+++OOooooXooXooXooOO+++OOoooXooXoooXooOO++++OoooXoXoXoooXoOO+++OOoooXoXooooXooOO+++OOoooXoXoXooXooOO++OOooXoXooooXoXooOO++++++OOOoXXXXoOOO+++++++OOOoXXooXooOOO+++++OOOooXooXoXoOOO+++++OOOOooXooXoooOO++++++OOOoXXXoXooOOO++++++oooXoXoXooooo+++++++oooXoXoXoXooo++++++oooXoXXXoXooo+++++++ooooXXoXoXooo++++",
-"+++OoooooooXoooooO+++++OooooooXooooooO+++++OooooXooooooooO++++OOooooooXooooooO+++++OooooooXooooooO+++++OooooooXooooooO+++OoooooooOooooooOO++++++++Ooo...ooO++++++++++OOooooooooOO++++++++OOooXooooOoO++++++++OOoooXoooOOO++++++O+OOoooooooOoO++++++OOoooXoooXooooO++++++OOooXoXooooooO++++OOooooooooooooO++++++OoooooXooooooO+++",
-"++++OOOoOoOOoOoO+O++++++OOOoOOOoOOOoOO++++++OOOOOoOoOOOOO+++++++OOOoOOOOoOOOO+++++++OOOoOOOOoOOOO+++++++OOOOoOOOOOOOO+++++OOOoOOOOOOOOOO+++++++++OOoo...oOO++++++++++++OOOoOoOOOO+++++++++OOOOoOOOOO++++++++++OOOOOOoOOO+++++++++++OOOOoOOOO+++++++++OOOOooOOoOO++++++++OOOOOOOoOOOO++++++++OOoOoOoOoOO+++++++++OOoOOOoOOOO+++++",
-"++++++O+O+OO+O++O++++++++O+OOOO+OOO+++++++++++OOO+OOOOOO++++++++++O+OOOOOO++++++++++++O+OOOO+OO+++++++++++OO+OOOOOOO++++++++O+O++++OOOO+++++++++++OoOOOOOO++++++++++++++OOO+O++++++++++++++O+O+OOO+++++++++++++++OOOO++++++++++++++++OOOOO+++++++++++++OO++OOO+++++++++++++OOOOOOO+++++++++++++OOO+OO++++++++++++++OOOOOO+++++++",
-"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"+++++++O+O++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"+++OOOOOOOOOoOO++++++++++++++O+O++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOO++++++++++++++++O+O+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OO++++++++++++++++O+O+++++++++++++++++++++++++++++++++++++++++++++++++OOooOOOO+++++++++++++++++++++++++++++++",
-"++OOOoooooooOoOOO++++++++++OOOOOOOO+++++++++++OOOOO+++++++++++++++++++OOOOO++++++++++++OOooOOO++++++++++++++OOOOOOOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOO++++++++++++++++++OOOOOO++++++++++++OOOOOO+++++++++++++++++++++++++++++++++++++OOOOO++++++OO...XoOO++++++++++++++++++++++++++++++",
-"+Ooo.X...oXX..oooO++++++OOOoooooooOO++++++++OOOXoOOO+++++++++++++++++OOoX.OO+++++++++OOoo...oo+++++++++++OOOoXoXooooO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOXoOOO++++++++++++++++OoooooO+++++++++++OooXoXOO+++++++++++++++++++++++++++++++++++OOoX.OOO+++OOo...XXOO++++++++++++++++++++++++++++++",
-"+Ooo.....XXo..XooO+++++++OooXoXoooOOO+++++++OOooXooOO+++++++++++++++OOOo.XoOO+++++++++OOo...ooOO++++++++++OooXXooooooO+++++++++++++++++++++++++++++++O++++++++++++++++++++++++++++++++++OOoXXooOO+++++++++++++++OoooXXOO+++++++++O+ooXXXOOO+++++++++++++++++++++++++++++++++OOOo.XoOO++++Oo...XXoOO+++++++++++++++++++++++++++++",
-"+Ooo.....XXX..oXoO+++++OOOooXoXoXXOOO+++++++OOoXXoOOOO+++++++++++++OOooo.XoO+++++++++OOoo..XooOO++++++++OOOooXXXooooOO+++++++OOOOOOOOOO++++++++++++OOOOOO+++++++++++++++++++++++++++++++OOooXoOoOO+++++++++++OOOOooXooOO++++++++OOOooXXXoOOO++++++++OOOOOOOOOOO+++++++++++OOOooo..OOO++++OOoooXXooOOO++++++++++++OOOOOOOOOOO++++",
-"OOoooooXX...XXooOOO+++OOoXoXX...XooO+++++++++OOooXXXOO++++++++++++OOOoXXooOOO+++++++OOoXXoooXXoOO+++++++OOooXXXX..oOo+++++++OOoXooOoooOoO++++++++++OooXoO++++++++++++++++OOOOOOOO++++++OOOoooXXoOOOO+++++++++OOooXXXoooOO++++++OOooXXooooXOO+++++++OOooooOoO..OOO++++++++OOOOXoXooooOO+++OOoooXXoOOOOOO++++++++OOOO..oOOXooooO++",
-"+OooXoXXX...XXooOO++++OOoXoXX...XXOO+++++++++OOooXXXoOO+++++++++++OooXXXooOO++++++++OOoXXoooXXoOO+++++++OOoXXXXX..ooO++++++OOoOXooooXXooO+++++++++OoooXooO++++++++++++OOOOOOoOOOOOO++OOOoOoooXXXoOOOO++++OOOOOOooXXXooOOOO+++OOOoooXXXXXXXOoO++++OOooooXXOooX.oOOO++++OOOOOoOXXXooooOOO++OOoXoXXXXXXXoOo++++++OOOoO.XooooXoooOO+",
-"+OooXXXooooo..oXoOO++OooXXXooXXoXooOO+++++++OOoXoXXXXoOO+++++++++OOoXoXXXXoOO+++++++oOooXXXXXooOO+++++++OoOXoXXXXooOOO++++++OoooXXoXoooOOO++++++++Ooo...OO+++++++++++OOoXoXXooXXooo+++oooXXoooooXXoooO++++ooXoXooOoooXXooO++++ooooXoooooXXoooO++++ooXoXoooooXXoooO+++OooXoXoooooXoXoXoo++OOoooXXoXoXoooo+O++++ooXoXXooOoXoXoXoo+",
-"+OOoXXXooooo..XXoo+++OooXXXooXXXXooOO+++++++OOooXXoXoXoOO++++++OOOooXXXoXooOO+++++OOOooXXXXXXooOOO+++++OOOoXoXoXXooOO+++++OOOooXoXXXXXoOO++++++++OOoo...oOO++++++++OOOooXXoXXXoXXoo++OooXXooooOooXXooOO++OooXXooooOoXXoooOO++OooXXXooooooXXooo+++OooXXXooOoOXXXooOO++OooXXXoooOoooXXooo+++OoooXXXoXXXoooOO++OOooXXoXoooOXoXXXoo+",
-"++oOXXXoXooo..XoXOO+OOooXXXooXXoXXooOO++++OOOooXoXXXXoooOO+++++OOooXoXXXoXooOO+++++OoooXoXoXXXooOO+++++OOooXXXXXXXoooO+++++OoooXXXXXXoooOOO+++++OOOoo...OOO++++++++OOoooXXXXoXXoXoo+OOooXXXooOooXXoXoOO+OOooXXXooOoooXXXoOO+OOooXoXooOooXXXXoOO++OoooXooooooXXoXoOO++OoooXXXoOooXoXXXoo+++Oooo..XXXXX...oOO++OooXXXoXOoooXXXXoo+",
-"++OOXoX..........oO++Ooo.....XXX.XXooO++++OOoXX..XoX..XXXOO+++OOoXX..oXX..XXoOO+++OOoXX..XXo..XXoOO+++OOXoX..oXo..XXoo+++OOOoXX..oXo..XXXOO+++++OOoooooooOOOO+++++OOXoX..oXX..XXXoO++Ooo...ooOoOXXXXXOO++Ooo...oooOoXXXXXOO++Ooo...oooOooXXXXOO++Ooo...ooOOOXXXXXOO++Ooo...oXoOooX...oo+++OooX..XXXXX...ooO++Ooo...oXOoooo...oo+",
-"+OOooXX..........oO++Ooo.....oXo..XXoOO+++OoXXX..oXo..XXXOO+++OoXXX..Xoo..XXXOO+++OoXXX..XoX..XXXoO+++OOXXX..oXo..XXXOO+++OoXXXX.XXX..XXXOO+++OOOooooooooooOOO++++OOXXX..oXo..XXXoO++Ooo...ooOOooXXXXoO+++oo...ooOOooXXXXoO++Ooo...oooOoXXXXXoO+OOoo...ooooooXXXXoO+OOoo...XoOooXo...oo+++Oooo. XXXoX...ooO+++oo...XooooXo...oo+",
-"+OOoooX..........oO++Ooo...X.XXX..oXXOO++OOOXXX..oXo..XXXOO++OOOXXX.XXXo..XXXoO++OOOXXXX.oXo..XXXOO++OOOXXX..XoX..XXXoO+++OOXXX..ooX.XXXXOO+++OOoooooooooOooOO+++OOOXXX..XoX..XXXoO++Ooo.X.oooOooXXXXOO+OOooX..oooOooXXXXOO++Ooo...ooOOOoXXXXOO++Ooo...ooOOooXXXXOO++Ooo...XXooOXo...oo+++Oooo..oooooXXXXoO++OooX..oXoOoXo..Xoo+",
-"++Oo...oXooooo...oO++OOOXXXXooooooXXXOO+++Oo...ooooooo...oO+++Oo...ooooooo...oO+++Oo...ooooooo...oO++OOo...ooooOoo...oO++OOo...ooooooo...oO++Ooo.............OO++OOo...oooXoXX...oO++OOoXXXooOOoooXXXoO+++OoXXXooOOoooXXXoO++OOOXXXooOooooXXXoO++OOoXXXoooOoooXXXoO+++OooooXXoooXXoXoOO+++Oooo.XoooooXXXXoo+++OoooXXXoooXXoXooO+",
-"+OOo...ooooooo...oO++OOoXXXXooOoooXXXOO++OOo...oooOooo.X.oo++OOo...ooOOOoo.X.oO++OOo...oooOOoo...oo++OOo...ooOoOoo.X.oO++OOo...oooOooo...oo++Ooo.............OO++OOo...ooXoXXX...oO+++OoXXXoooOoooXXXOO++OOoXXXoooOOooXXooO++OOoXXXooOOOooXXooO++OOoXXXooOOoooXXXOO+++OOoXoXXoooXXXoXOO+++OoooXXooOOooooXXO+++OOXooXXoooXXXooOO+",
-"++oo...oooOoOo.X.oO+++OOXXXooOooooXXXoO+++ooX..oOOOOOo...oo+++ooX..oOoOoOo...oo++OooX..oOOoOOo.X.oO++OOo.X.oOoOoOo...oo++OooX..oOOOOOo.X.oO+++OOoOooooooooOooO+++Ooo...XoXXXoo...oo++OOoXXXooOoOooXXXoO+++OOXXXooOOoooXXXoO++OOOXXXoooOoooXXXoO+++OOXXXoooOOooXXXoO+++OOooo..ooo..ooOO++++Oooo..oXooo...ooO++++Oooo..ooo..oooO++",
-"+OOo...oOoOoOo...oO++OOoXXXoooOoooXXXOO++OOo...ooOOooo..XoO++OOo..XooOOoOo..XoO++OOo...ooOOoOo...oO++OOo...oOOOoOo..XoO++OOo...ooOoOoo...oO+++O+OOOooooooOOOOO+++OOoX..oXXXXoo.X.oO+++OOXXXoooOoooXXooO+++OoXXXoooOoooXXXOO++OOOXXXoooOOooXXXOO+++OoXXXooOoOooXXooO++++OOOo..ooo..ooO+++++Oooo..XoXoo...ooO++++OOOo..oXo..ooO+++",
-"++oO.X.oooOooo...oo+O+OOXXXXoOOoooXXXoO++OOo.X.oooOoOO...oo+++oO...oOooOoo...oo++OOo..XoooOooo..Xoo++OOoX..oooOooO...oo++OOo.X.oOoOoOo..Xoo++++OOOoOoooOoOO+++++++oo...ooXXXoo...oO+++OoXXXXoOooXoXXXoO++OOOXXXXoOooooXXXoO+++OOXXXoooooooXXXoO++OOOXXXoooooooXXXoO+++++OOooX...XooOO+++++Oooo.......XoXOO++++++OOoXX...XXOOO+++",
-"++Oo...oXooooXX.XoO++OooXXXoooooooXXXoO++OOo...oooooXo..XoO++OOo...XoooooXX..OO++OOoX..oXooooo...OO++OOo..XXoooooX..XoO++OOo...XoooooXX..OO++++++OOoo...OOO+++++++Oo.....oooXX..XoO+++OOXXXoXooooXXXXoO+++OOXXXXooooXoXXXoO++OOOXXXXooooXoXXXoO+++OOXXXXooooXoXXXoO+++++OOooo...ooOO+++++OOoooXXoooooOoOO++++++++OOoX...XooO++++",
-"+OOoX..XooooXX...oO++OOoXXXoooooXoXXXoO+++OoX..XXoooXX...OO+++OO.X.XXoooXX...OO+++Oo...XooooXX...oO++OOO...XXoooXo...OO+++OO.X.XXoooXX...oO+++++++Ooo...oO+++++++OoO.....oooXo...OO+++OOXXXXooooXoXXXoO+++OooXXoXoooXXXXXoO++++ooXXXXoooXXXXXoO+++OOoXXXXoooXXXXXoO++++++OooX...ooO++++++OooooXXooooOOOO+O++++++OOooo...ooO+++++",
-"++OOooo.......oooo++OOoX.....ooo.....Xo+++OOooo.......oooOO++OOOooo.......oooOO+++OOooo.......oooOO+++OOooo.......oooOO+++OOooo.......oooOO++++++OOoooXoOO++++++++OoXXX.......oooOO++++OOoo..........oo++++Oooo..........Xo++++Oooo..........Xo+++OOooo..........oo+++++OOOXoXXXoOO++++++OOXXX..XXooOO+++++++++OOOooXXXXoOO+++++",
-"++OOoXo.......XooOO+OOoX.....ooo.....Xo+++OOoXo.......oooOO+++OOoXo.......oooOO+++OOoXo.......oooOO+++OOoXo.......XooOO+++Ooooo.......XooOO+++++++OOooooOO+++++++OOOXXX.......XooOO+++OOOoo..........Xo++++OOoo..........Xo+++++OOO..........Xo+++++OOO..........Xo++++OXoX.....oOO+++++OOoXXX..Xooo+O+++++++++OoXX.....OO++++++",
-"+++Oooo......XoooO+++OoX... .ooo.....oo+++OOooo.......oooO++++OOooo.......oooO+++++Oooo.......oooO++++OOooo.......oooO+++++Oooo......XoooO++++++++OOooooOO+++++++OOoXXX.......oooO+++++OOOo..........Xo+++++OOo.....X....oo+++++OoO.....X....oo++++OOoO.....X....Xo+++OOoXX....XoO+++++++OOXXX..XXoOO+++++++++OOoXX....XoO++++++",
-"++O+OOOOOOoOoOoOO+++OOOOOoOoOOOOOoooooO+++++OOOOOoOoOOoOO+++++++OOOOOOoOoOoOO+++++++OOoOoOoOoOoOO+++++++OOOOOoooOOOOO+++++++OOOOoOoooOoOO+++++++++++OOOO++++++++++ooXoXoooooOOoOO++++++++OOOoOoOOooooOO++++++OOOOoOooOooooO++++++OOOOoOooOooooO++++++OOOOoOooooooOO+++OOXoX..X..OO++++++OOOoXoXooXoOO+++++++++OOXoX.....OOO+++++",
-"+++++OOOOOOOOOO+O++++OOOOOOOOOOOOOOOOO+++++++OOOOOOOOOO+O++++++++OOOOOOOOOO+O+++++++++OOOOOOOOO+O++++++++OOOOOOOOOOO++++++++OOOOOOOOOOO+O++++++++++++O++++++++++++OooXooOOOOOOO+O+++++++++OOOOOOOOOOOOO+++++++OOOOOOOOOOOO++++++++OOOOOOOOOOOO++++++++OOOOOOOOOOOOO+++OOoXoXoXooOO+++++++OOooXoXoooO++++++++++OOoXoXooooOO++++++",
-"+++++++OOOOOO++++++++++O+OOO+O+O+++++++++++++++O+OOOO++++++++++++++OOOO+O++++++++++++++++OOO+++++++++++++++O++O+OO++++++++++++++O+O+O++++++++++++++++++++++++++++OOOOOOOOO+OO++++++++++++++++OOOO+OO+++++++++++++OO+OOO++++++++++++++OOOOOO++++++++++++++OO+O+OO+++++++OoooXooooOO++++++++OOOOOoOOO++++++++++++OooXooXooO+++++++",
-"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOO++O+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOoOOooOOO++++++++++++++++++++++++++++++OOOOoOOoOO+++++++",
-"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOOOOOOOOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOO+++++++++++++++++++++++++++++++++",
-"+++++++++++++++++++++++O+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOoOOOoOOOOOO+++++++++++++++++++++++++++OOOOOOOOO++++++++++++++OOOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOOOOO++++++++++++++++++++++++++++++++",
-"++++++++++++++++++++++oOooO++++++++++++++++++++++++++++++++++++++O++O+O+O+++++++++++++++++++++++++++++OOX..oXXoXoX...OO+++++++++++++OOOO+++++++++OoooooooooO++++++++++++OoooO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOO++++OO+++++OoX...ooOOOOOO++++++++++++++++++++++++++",
-"++++++++++++++++++++OOoooooO+++++++++++++++++++++++++++++++++OOOOOOOOOOOOOOOO++++++++++++++++++++++++OOo.X.XXoXXXXX..oO++++++++++OOOooOO+++++++OOooooooooooOO++++++++++OOooooO+++++++++++++++++OOOOOOO++++++++++OOO+++++++++++++++++++++++++++++++++OOOOO+++++++++++++++OOOOOOOOOOOO++++OoX.X.ooOOOOoOOO++++++++++++++++++++++++",
-"+++++++++OO+++++++++OOoooooOO++++++++++++++++++++++++++++++++OOOOoooooooooooOOO++++++OOOOO++++++++++++OO...XXXXoXX..XoO+++++++++++OOooOOO+++++++OooooXoooXoOO+++++++++OOoXXoOOO++++++++++++++++OOOooOOO++++++++OOOOOO+++++++++++++O+O+O+O+O++++++++OOOOOOOOOOO+O++++++++OOoooooOOooOO+++OXo...oooooooOoOOOO+++++++OOO+++++OO++++",
-"++++++OOoOoOO+++++++oo.....oOO++++++++++++++OOOOOOOOO+++++++Ooo..............XO++++++oooooO++++++++++OOo...oXoXoXo...oo+++++++++OOoo..ooO+++++++OooXXXXoo..OO+++++++OOOOo...oOOOO+++++++++++++OO.....oo++++++OOoo...OO++++++++OOOOOOOOOOOOoOOO++++OOoXXoXoooOOOOOOO++++OOooXooooo..OOO++OoX...Xoooo..XoXooo++++OOOooO+OOOooo+O++",
-"++++++OOoooooO++++++OO.X...ooO+++++++O+++++OOOOoooooOOOO++++Ooo....X......X...O+++++OoooXoOO+++++++++OOoX..XXXoXXX...oO++++++O+OOooo..ooOO+++++OOoooXXoXo..oOO++++OOOOooo...oooOOO+++++++++++OOo.....Xo++++OOOOoo.X.oOO++++++OOOOooooooooOoooO+++OOooXXoXooooooooOO+++OOOXXXXXooo..ooO++oooX..XXXXo..XXoXoo++++OooooOOOOOooooO++",
-"++++++Oo...ooO++++++OOoo...ooOO+++OOOoo++OOooo.....XXooO++++OOoooOooXXXooooOOOO+++++OooXoXOO+++++++++OOoXXX.....oX...oo++OOoOoOOOooo..ooOO+++++OoooXXXooo..OOO+++OOooXooX...oXoXooO++++++++++OOoXoXoXoO++OOoOooooXXooOoOO++++OoX...........X.OO+OOoX..............X+++OoooooXXooo..oOOO+Oooooo..oooXo...Xoo++++OOo..oOOOoX.XooO+",
-"++++++oO...ooOO+++++OOoo...XoOOO+OOoOoo++OOooo.....XXoooOO++OOOOooooXXXoOoOoOOO++++++oooXoOO++++++++OOOoXXXX....XX...oo++OooooooOooo..oooO+++OOOooooXXooo..ooOO++OooXXXXo...XXXoXoo++++++++++OOooXXXooo+++ooooooXoXXooOOOO++OOoo.............oO++OoX...............+++OooXXXoXooo..oooO++OOooo..oXooX...XXo++++OOo..ooooo...ooO+",
-"+++++OOo...oooO++++++OOo...oXOOO+Oooooo+OOooXo.....XXoooOOO+OOOOOoooXXXooOOOO++++++O+ooXXoo+++++++++OoOoXXX...X.XX...oO+OOoooooooooo..oooOO++OOOooXoXXooo..ooOo+OOooXXXXX...oXXoXoo+++++++++OOooXoXXooO+OOooooXoXoXooooooOO+OOXX.............OO+OOoo.....X.......X.+OOOoooXoXXooo..oooO+OOoooo..oooXo...oXO++++OOo..oooOo...ooO+",
-"++++++OOooo..OO++++++OOooXXooOOOOoXX.oo+Ooo...ooXXXoXXXXooO+OoooooOoXXXoooOOOOO+++++OoooXoOO++++++++OO.....XXoXXXX...oX+O+............XXXOO+oOoXXXXX..XXX..oXoo+OOoo...XX...XXXXXoo++++++++OOooX.....oO+OO...............oo++Ooo...ooooooo...oO++OOoooo..XXo..ooooO+OOo..............Xo+++ooXX..ooooo...ooO++++OOoX.oooooXXX..O+",
-"++++++OOoXo..Oo+++++++OoXXXoooOOOo...oo+Ooo...ooXXXXoXXXooO+OoooooooXXXooooOOOO+++++OOoXXooO++++++++ooX....XXoXoXX...Xo+OO.X..........XXXOO+OoooXXXX..XXo..XXXo+OOXo...oX...XoXXXXo++++++++OOXXo.....oo+OO........ .....Xoo++OOo...oOoOooo..XoO++O+OoooX.XXX..oOOOO+Ooo...............o+OOoooo..oooOoX..ooO+++++OoX.oXoooXXXX.O+",
-"+++++OOOooo..oOO++++++OOooX..ooOooX..oO+O..ooooooooXXooo..O+OXoXoXXo...XXoXoXoo+++++OooXoXOO+++++++++oooXoXoXXoX..XXXoo++OOoooo..oooooXXXoO+oooXoXXX..XXX..ooXX+Oooo...oo...ooXooXo+++++++++ooXXXXooooO+OooXXoXoo...oooooOO++OooX.XooOOooo...oO++++O+OOooXXXooOoOO++++OOoXoXoXooo..oooO+OOo.....oOOooXoXooO++++OOOXo...XXooooOO+",
-"++++++OOooo..ooO++++++OooXo.XooOoo..XoO+O..XooooooXXXooo..O+OooXXoXX...XXoXoXoo+++++OOoXoXOO++++++++OOoXoXoXoXXo..XXXoo++OOOooo..oooooXXXoO+oooXXXoX.XXXX..XXoo+OOXo...oo...oooXoXo++++++++OOoXXXXXXooO+OOXoXoXoo...XXoooO+++OOo...oOOOOoo...oO++++++OOOOXXXXooO++++++OOooXoXXooo..oooO+Ooo.....ooOOOXoXooo+++++OOoo...XXoXoOO++",
-"+++OOOOOoOo..ooOO++++++Oooo..ooooo.X.OO+O..oXoOooooXXooo..o+OooooXoX...XXXXoXoo+++++OoooXooOO++++++++oooXoXXoXoX..XXXoo++++OOoo..oooooXXXoO+oooooXXX..oXX..oXoX++ooXX..oo...oooXoXo++++++++OOXoXXXoXooo+OooXoXooo...oooooOO++OooX..OoOOOoo...oO+++++++OOoXXXooOOO+++++OOOXoXXXooo..oooO+Ooo.....oOOOooXXXoO++++++ooo...XXoooOO++",
-"++OOoooXoOoXXoooO++++++OOoo..oooooOoOO++o..oXooOooo..oooXXo+OOooOoooXXXoOOoOOOO+++++OOo...OO+++++++++Ooo..........XXXoO+++++OOOXXXXXooooOXo+OOOoooooXXooo..oooO+OOoX...Xo...XXXXXoX++++++++OOooo..XXXoX+OOoXXXXooXXXXooOO++++OOo...OoOOOoo..Xoo+++++++OOOoXXXoOO+++++++OOoXoXXooo..ooOO+OooXoX.XoooOooooXoO++++OOOoo...XXoOO+O++",
-"+OOoooXoooOXXoooOO++++++OOO..oXooOOOO+++o..XoooOOOo..oooXXo++++OOOOoXXXooOOOOOO++++++ooX..oOO++++++++OOo..........XoXOO++++++OooXoXooOoOooo+++OOOoXoXXooo..ooOO++ooo...XX...XXXXXoo+++++++++OOoo..XXXXo++oooXXXooXXXXooOO+++++oo.X.oOOOOoo...oO++++++++OOooXoXOOO+++++OOooXoXXoXo..ooOO+OXooXo..oooOooXoXXO+++++OOoo...XXooOO+++",
-"OOoX..oooooooXXoOO++++++OOOoo...oOOOO+++OXXXXooOoOoXXXXoXXo+++++OOOoXXXOoOOO++++++++OOo..XoO++++++++++OOXXXoXoooooXXXOO+++++++Ooo...oooOOOO++++OOoooXXooo..oooO++OooXXXoo...oooXooo++++++++OOOoOXXX..XX++Ooo...ooXXoXXoOO++++OOo..XooOoOoo...oO++++++++OOoooXXOO+++++++OOoXoXoooo..ooO+++OoOoooXooooooXoXoo+++OOoooX.....OoO++++",
-"OOo...XooooooXXXoOO++++++OOoo...ooOO++++OXXoXXOoOOooXoXXXXo+++++++OooXXoOOO+++++++++OOO...oOO++++++++OOoXXXXooooXooXoOO++++++OOoo...ooOOOO++++++OoooXXooo..oooO+OOooXXXoo...ooXoooo+++++OOOOOOooXX...XX+OOOo...ooXXXXXoOOO++++oO...oOoOooo...oO+++++++++OOooXXoOO++++++OOXoXXXXoo..ooOO+++OOOoXXoXoooXooXoO++OOOooXX.....ooOO+++",
-"OoO..XoooooooXXoooO+++++++OooX..OoOOO+++OoXXoXooOooXXoXoXXo+++++++OoXXXoOOO++++++++++Oo...ooOO++++++++OOXXXoXoooooXXoOO++++++++Oo...ooOO+O++++++OooXXXoooX.oXoO++OOooXXoo...oOooooO++OOOOOooooooXX..XXX++OOoX..ooXoXXXoOOO+++OooX..ooooooo..XoO+++++++++OOooXXooOO+++++OOoXoooooo..ooO+++++OOOoXoXooooXoXoO+OOooooXX.....oooOO++",
-"OXX.....XXXXX...Xoo++++++++OOXooXXooOO++Ooo...XooOooo.....o++++++OOOXXXXooOO++++++++OOOoXXXoOO+++++++++oooX..XoXooOOOO++++++++OOOoooXooOO++++++O+oooXXoOoXo...o+++OOOOOoo...oooOOO+++OooXoo.X...XXXXXoo+++OoXXX..oooooXXXOO+++Oo...XoXXXXX...oo++++++++++OOOoXoooOO+++++oooXXXXXo..ooOO++++++OooXXXXX...ooO+Ooo.....ooooo..XoOO+",
-"OXX. ...XXXXX...Xoo++++++++OOoXXXXooOOO+OOO.X.XXooooo...X.O+++++++OOXXXoXoOO+++++++++OOXXoXXoOO+++++++OOoXo..XXoooOOO+++++++++++OoooXXOOO+++++++OoooXXoOOoo.X.o+++OOOOOOo.X.OOO++++++OooXXo.....XXXXXoo+++OOXXX. ooXXoXoXOO++OOo...XXXXXXX...OO+++++++++++OooXXooo+++++OOoXXXXoXo..oOO+++++++OOoXXXoX..XoOO+OoX....XoOoXo...oOO+",
-"O..XoooooooXoXoX..o+++++++++OOOOoo...oO++OOOoooo.X.ooooooOO+++++++OooXXXooOO++++++++++OOoo.XXooO+++++++Oooo..XXXoOOO+++++++++++++OOOoooooO+++++++OooooOoOOooooX++++++OOoO...oOOO++++OOoooXXXoooooooooXo++++OOoooooOoOooXoXo+++OooooOoOOoOoXXXoO+++++++++++OOooXXXoo++++OOoooXXXXX..ooO++++++++OOoooXooooOO++OooXooOoOOOOOooo..o+",
-"O.XoXooooXoXoXXo..o+++++++++OOOooo.X.oo+++OOOooX..XoOoOoOOO+++++++OOoXXXXoOO+++++++++++OOO..oooO+++++++OOoo..XXXOO+++++++++++++++OOOooXoo+++++++OOoooXOOOOOoXoX++++++++OO...OO+++++++OoooXoXoooOOOooooX++++OOOooXOOOOooooXo+++OOoXooOOOOoOXoXOO++++++++++++OOOooXoO+++++OoooXXoXo..ooO++++++++OOoooXoooOO+++OOoooooOOOOOOoooX.o+",
-"O..oooOoooXoXoXo..O+++++++++++OOoo..Xoo+++++OOooX..OOOOOO++++++++++ooooXoOO+++++++++++O+OoX.XooOO+++++++OOoX.oXoOO++++++++++++++++OOoooooO+++++++OOOooOO+OOoooo++++++++OO...OOO++++++OOooooXooOoOOOOooo+++++OOOooOOOOOooXoo+++OOoooOOOOOOoXXoOO+++++++++++++OooXooo+++++OoooXXXoX..OOO++++++++++OoooooOO++++OOooooOO++++OOOo.Xo+",
-"OOOOOOOOOOOOOOoOOoO++++++++++++OOOOoooo+++++OOOOOOOOOO+++++++++++++OOoOOOOO+++++++++++++OOOOoooO+++++++++OOOoOoOOO++++++++++++++++++OOOO+O+++++++OOOO++O+++OOOO++++++++OOOooO+++++++++OOoOoOOOOOOOOOOOO++++++OO+O+++OOOOOoO+++OOOOOO++++O+OOOO+++++++++++++++OOOOOO++++++OOOOooOooooOO+++++++++++OOOOOOO++++++OOO++++++++OOOOOO+",
-"+OOOOO++OOOOOOOOOO+++++++++++++++OOOOOO+++++++OOOOOOO++++++++++++++++OOOO+++++++++++++++++OOooOO++++++++++OOOOOO++++++++++++++++++++++++++++++++++++++++++++OOO+++++++++OOOO+O+++++++++++O+OOO+++++++O++++++++++++++++O+O+++++++++++++++++OOO++++++++++++++++O+OO+++++++++OOOOOOOooO+++++++++++++++O+O+++++++++++++++++++++++OO+",
-"+++++++++++++++++O++++++++++++++++++OO++++++++++++++++++++++++++++++++O+++++++++++++++++++OO+O+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOO+O++++++++++++++++++++++++++++++++++++++++++++"
-};
+static char * matrix0_xpm[] = {
+"320 377 7 1",
+" c None",
+". c #000000",
+"+ c #030E03",
+"@ c #081E08",
+"# c #0B2A0B",
+"$ c #165016",
+"% c #1B641B",
+"................................................................................................................................................................................................................................................................................................................................",
+"....................................................................++++++..............+++++.............................................................................................................................................................................................................................+++...",
+"............................++++.................................+++@@@@@+++...........++@@@++..............+..............................................................+................+....................++.....................................................................................................++@@@+..",
+"...........................+++++++.............++++++++..........++@@@@@@@++..........+++#@@@++...........+++++.....................................+++++................+++++............+++++.................+++++...................................................................................................++@@@++.",
+"..........................++@$$$@++.........+++@@+++@@+++........+@@@####@@++........++@@$$$@@@++.......++@@@@@+....................................+@@@@+..............++$$@@+..........+@@$#++..............+++$$$++.................................................................................................++@$$$++.",
+"..........................+@@$$$@@+.........+@@@#@@@#@@++.......++@#@#@##@@@+.......++@@#$$$@@@++.......++@####++..............+++++++.............++@#@@++............+++$#@@++.........@+@$$@++.............++@$$$@++...............+................................................................................++@$#$++.",
+"..........................+@@$$$@@+.........+@@@#@@@#@@++.......+@@###@##@@@+......+++@@#$$$#@@++......++@@@@@#+++............++@@+@++............++@@##@++............+@+$$@@+..........+@@#$@++...........++++@$$$@@++...........+++@++..............................................................................+@@$$$++.",
+".........................++@#$$$@@++.......+@@@$$@@@$$@@@+.....+++#@@####@@@++....++@@######$$@@@+.....++@##@#@@@+...........++@@$$$#@++.........++@@$$$@@+..........++@@@@#+++.........+++@##@@@+.........++@@@@$$$@@@@@+.........++$$$++............................................................................++@@@@@++.",
+".........................++@#$$$#@++.......++@@$$#@@$$@@@......+@+@######@@@+.....++#@######$$@@+.....+@@@@#@#@@@+..........++@##$$$#@+...........+@@$$$@++...........+@@###+++...........++@#@@@+.........+@@@@@$$$@@@@@..........++$$$++............................................................................+@@###@@+.",
+"..........................@@@$%$@@@........+@@@$$@@#$$@@++.....@@####$$$$##@@+....+@###@@@@@@#@+@+.....+@@@#@#@#@++........++@@##@@@@@++.........++@#@@@++...........++#@#@@@+...........++@#@##@++........+@@@$$$$$$$@@@+........++@#$$@++..........................................................................+++$$@@@+..",
+".........................++@#$$$#@++.......+@@#$$@@@$$@@+....+.@@@##$$$$$###++....++####@@@@@@@@+.....+@@@#@#@#@@@+.........+@@##@@@#@++.........++@#@#@++...........++#@##@++.............+@#@##++........+@@@$$$$$$$@@@+........++@$$$@++..........................................................................++@#$@@++..",
+"..........................@@@$$$@@+........++@@$$@@@$$@++.....+@@@###$$$$##@@++...++###@@@@@#@@@++.....+@@@#@#@#@+++.......+@@@##@@@@@+..........++#@@@@++...........++#@#@@+.............++@@#@@@+........+@@@#$$$$$$@@@+.......+++@$#$@@++...............................+.+.+.+...................................+@+$$@++...",
+".........................++@#$%$#@@........++@@@@@@@@@+++.....+@@#$$##@$$##@@.....++@##$$###@@@++......++@@####@#@@+........+@@$$@@@+@++..........+@@+++.............+@$$$@@+.............++@@$$$++.........+@@@@$$$@@@@++.....+++@@@$$$+@+++..........................++++++++++++++..............................++@@@#@@++...",
+"..........................@@@$$$@@++........+++@@+++@@+......++@@@$$###$$@##++....++@@@$$#@#@@@@++......++#@@#@#@@@@+......++@@#$@@+@++++..........++++.............+++$$$@++..............++@$$$@++.......+++@@@$$$@@@++.....+++@+@@$$$@@@@+++.......................+++@@@@@@@@@@@+++.............................+@@#@#++....",
+"..........................+@@$$$@@+.........++.++++++++.......+@@@$$@@@$$@@++......+@@@@@###$$@@@+.....+++@#####@@++.......++@@$$###@@@@++.........+................++@$$#@++...............+@$$$@+.........+@@$$@@#$$@@+.....+@$$$$$$$$$$$$$@+.......................+@$$$$$$$$$$$$$@+...........................+++###@@++....",
+"..........................++@$$$@++................+.........+++@@$$#@@$$@@@++.....+++@@@###$$##@++....++@#@####@@++.......++@@$$###@@@@@+...........................++$$$@+...............+++$$#@++.......+++@$$@@@$$@@++....+@$$$$$$$$$$$$$@+.......................+@$$$$$$$$$$$$$@+............................+@###@@+.....",
+"..........................++@$$$+++..........................++@@@$$@@@$$@+++......+++@@#@##$##@@@.....+++@#####@@@++......+@@@$$###@@@@@+..........................++@$$$+++..............++@$$$+++.......+++@$$@@@$#@@+.....+@$$%$$$%$$%$$$@+.......................++$$$$$$$$$$$$$@+...........................+++###@@+.....",
+"...........................++#$$@+...........................++$$$$$$%$$$##@+.....++@@@@@@@@#@###++....+@@@@######@@+.....++@@@#@$$$$$##@++.........................+++$$$+@+.............++++$$$+++........++@@@@@@@@+++......+@+@@@$$$@@@@+++.......................++@@@@@@@@@@@@+++...........................+@@###@++.....",
+"...........................+@$$$++...........................+@$$$$$$$$$$###+......+@@#@@@@@@####++....+@@@@#######@@.....+@@###@$$$$$#@@++.........................+++@##@@+..............+@@#@#++.........+++@@+++@@+++......+++@@@$$$@@+@+...........++++..........+.+++++++@+++++............+++.............++@@###+++.....",
+"...........................+++@+++...........................++@@########@++++....+@###$$###$$@#@@+....+++@@##@@@#@@++....++####@@@@$$@@@+...........................+@@##@@++............+@@@##@@+..........++.+..++++...........++@$$$@+++............+@@@@+............+++++..+++............++@@@+...........++@#@@@++......",
+"............................++@+++...........................++@@@###@#@@@++......++###$$@#@$$#@@++.....++++@##@@@#@++....++###@#@##$$@@@++..........................++@@@##++............++##@@@++...............................++@$$#@+++...........++@@@@++................+...............+@@@@@++..........+@@#@@@++......",
+"...........................++++@+.............................+@@@####@##+++......++@##$$###$$##@+.......++@#@#@@@#@+.....+@@###@#@@$$@@@++...........................+@#@#@@++..........++@@##@@+................................+++$$$@+............++@@#@@@.................................++@@#@++.........++@###@@+.......",
+"...........................++$$$++...........................++@@@#####@@@+.......++@@@@@$$$@@@+++........++######@#++.....+@#@$$$$%##$$$@+..........................++@@@##+++..........++@##@@@+.................................++$$$+++...........+@@$$$@@.................................+@@$$$++.........+@@#$@+++.......",
+"............................+$$$+.............................+@@@#####@@++..........+++@$$$@++............+@@#@#@@@+.....++@@#$$$$$##$$$++............................+@@$$@@+..........+@@$$@@++................................++@#$$++............+@@$$$@@+...............................++@@$$$++........++@@$#@++........",
+"............................+++++.............................+@@@##@###@++..........++++$$$@++............++@++@++++......+++@@@@+@@@@@+++.............................++$$@@@.........++@@#$++.+..................................+++++............++@#@@@++.................................++@@+@+.........+@@@#@@+.........",
+".............................+................................++@@###@#@@+.............+@@@@++..............+++++++.........+++++++++++++..............................+++$$@@+..........++@$$@++....................................+++.............++#@#@@++....................................+++.........++@#@#@++.........",
+"..............................................................++@@@#@@@@@+.............++@#@++..................................++.+....+...............................++++.++..........+++++........................................................+@#@@@++.................................................+@@#@@++.........",
+"................................................................++@+@@@+++.............++@@@+.............................................................................+.+...............+.+......................................................++@@@++..................................................++@@@@@+..........",
+".................................................................+++.++.................+++++.........................................................................................................................................................+++++...................................................++@@@+++..........",
+"................................................................................................................................................................................................................................................................................................................................",
+"..........+......................................+.+................+.+....................................+.++.+....................+............+.++++++................+.....................................................................................................................................................",
+".......+++++++............++++++..............++++++++...........++++++++................++++...........+++++++++++..............+++++++........+++++++++++++.........++++++++.............+++++++..............................................................................................................................",
+".....++@@@#@@+++........+++@@@@@+............++@@#@#@@++........++@@#@#@@++.............+@@@@@+........+++@#@#@#@@@@+..........+++@@#@@@++.....+@@@@#@@@@#@@@+.......++@@@#@+@++.........+++@@@@@+++.............................................................................................................+++++++++......",
+"....+++@@@#@@@++.......+++@@@#@@@+.........+++@@@#@#@@@+++....+++@@@#@#@@@+++.........+++@@@@@++.......+@@@#@#@##@@@+.........+++@@@#@#@@+....++@@#@####@#@@@++....++++@@@##@@+@+........++@##@@@@+++...........................................................................................................+++@@@@++++.....",
+"...++@@$$###$$@@@+....++@##$$$$$++.........+@@@$$###$$@@@+....+@@@$$###$$@@@+.........++@$$$$$++......+@@@$$######@@+........++@$$$$$#@#++....++#############++....+@@@$$#@#$$@@@+......++$#########++.........................................................................................................++@$$$$$$$@++....",
+"...+@@@$$###$$@@@.....++###$$$$$@+........++@#@$$###$$#@@++...+@#@$$###$$#@@++........+@@$$$$$++......++@@$$##@##@@@+........+@@$$$$$##@@+.....+@####@#######++...++@#@$$###$$#@@++....++@$$########++.......................................................++++..........................++++................++@$$$$$$$@@++...",
+"..++@@@$$@#@$$@@@++....+@##$$$$$@++........@@@#$$@##$$##@++..++@@#$$@##$$##@++.......++@@$$$$$@++.....+@@@$$######@@++.....+++@@$$$$$##@++....++##@##########++...+@@@#$$##@$$##@++....++@#$########++.....................................................++++++++.......................+++++++++...........++@+$$$$$$$@@@+...",
+"..++###@@@@@@@###++...++++@@@$$$+++.......++###@@@@@@@###++..++@@@@@@@@@@###++.......++####@$#@+......+@@@##@@@@@@@++......++@$$@@@@@+@@+......+++@+@+@+@#@#@++...++###@@@@@@@###++....@@@##+@@@@$$$@++..........+++.................+++................+++@@@$$$@+......+.+++++++.+......+$$$@#++++..........++@@##@@@@##@#++..",
+"..++###@@@@@@@###++.....+++@@$$$@+.........+@@#@@+@@@@###@+...+@@@@@+@@#@###@+......+++#@#@#$$@++.....+@@@##@@@@@@@++......++@#$##@@@@++.+.......+++++@@@##@#++...+@###@@@@@@@###@+....@@@##@@+@@#$#@@..........++++++..............++++++.............++++@@@#$#@@.....+++++++++++++....+.$#$##@@++++.........@@@@#@@@#####@+..",
+"..++###@@++@@@###++.....++++@$$$+@........+++++@+++@#@###++...+++++@+@@$$#@@++......+@@$$@@@$#@+......+@@@$$$$$$$@@@+......+@@$$@@#@@@@++..........+++@@##@@@++...++@###@@@@#@#@@++..+.@@@##@@+@@$$$@++.......+.@@$$$++...........+.@@$$$++..........++@@#####@@@++...++@@#@@#@#@@#@@+....++@+@#$$$@@++........+@@@@@+@@@##@++..",
+".+++###@@@++@@###@+.......++@#$$@++.........+++++++@@####++.....++++@+@$$###++.....++++$$@@@$$@++......@@@$$$$$$$#@@++....+@@@$$@#@##@@++............+++##@@@+....++#@#@#@@@@####++...+@@@##@+@+@$$#@@+........+@@$$$++............+@@$$$++.........++++@#####@@@++...++@#@##@#@##@#@++....++@#@$$$@@@+++.....+++@@@+@@@@###@+..",
+".++@###@@++@@@###++.......++@$$$+++............+++@@@####++......+++@@@#$@#@++.....+@@@$$@@@$#@++.....+@@@$$$$$$$@#@++....+@@@$$@#@#@@@@++...........+@@##@@@.....++@###@@@@#@#@@@+...+@@@##@@@@@$$$@++........+@@$$$++............+@@$$$++........++@@@@#####@+++....++#@#@####@#@##++....+++@@$$$#@@++++.....++@@@@+@@@###++..",
+"..++###@@@++@@###@+.......++@#$$@+............+++@@@$$@@@++.....+.@@$$$$$@@@++....++@@@@#@@@$$@++......++@@#@@@##$$$@+.....@@@$$$$$##$$$++...........+++$$@+++.....@@@@$$$$$$$@@@+.....@@@$$@@@@@$$$@++........+@@@#@@+............+@@@#@@+.......++@@#$$@@@@++++....+++#####@######@@+......+@@@@@##$$$@++......++@@@@$$#@@++..",
+"..++###@@+++@@##@@+.......++@$$$+++............++@@@$$@+++.......+@@$$$$$@@@++....++#####@@@$$@+++....+++@@@@@@@#$$#@++..++@@@$$$$$##$#$++..........++@@$#@+......++@@@$$$$$$$@@@@.....@@@$#@@@##$$$@@..........@@@#@++.............@@@#@++.......++#@#$$##@@@+......++@@######@####@@+.......++@@@##$$$@@+.......++@@#$$@#@++..",
+"..@+###@@++@@@###++........++$$$@+............+@@$$$@@@++.........++@@@#####@+....++$$$#####$$@@@+......+++@+++@+$$$@+....+@@@$$@@@@@$$$@++.........+@@@##+++.....++#####@@@#####++....+++##$$$@#$$$@++.........++++++..............++++++........+@###$$@@@+++.......+@@@#@@####@@##++.......+++@@#@$$$@@+......++@$$$@@@+++...",
+"..+@@##@@+++@@###@+.......++@#$$@++..........++@@$$$@@+++........+++@@@@####++....++$$$@###@$$#@@+.....++++++++@@$#$@@+...+@@@$$@@@@@$$$@++.........+@@@##++......++#####@@@#####++....+++@#$$$##$$$@@+..........+.+.................+.+..........++###$$@#@@++......++@#@##@###@##@#++.......+++@@##$$$@@+.......++$$$@@@++....",
+".++@###@@+@+@@###++........+@$$$+@..........+++@@$$$@@+........++++++@@@####++...+++$$$#####$$@@@++...+.++++++++@$$$@++...+@@@$$@@@+@$#$@@+........+@@@#@#++.....+++###@#@@@#@###@+.....+@@#%$$#@$$#@+............+.+.................+.+........+++#@#$$@@@@@++......+@@#@#@#@####@#++......+++@@@#@$$$@@+......+++$$$@@++.....",
+"..++###@@@++@@###++......+++@$$$@++.........+@@$$#@#@+++......++@@++++@@@###++...++@@##@####$$#@@++...++@@+++++@@$$$@++...+@@@$$+@@@@$$$+++........++@##@@@+......+@@##@@@@@@@##@@+.....+++@@@@@@$$$@++.............+...................+.........+++@+@@$$$@#@++.....+@@#######@####++....+++@@$$$#@@++++.......+++@##+++......",
+"..++###@@@@@@@###@+......+++@#$$@@++.......++@@$$@@@@@++.....++@@@+@+@@@@###@++...++#@######$$##@+....+@@@+@+@+@@$$$@@.....@@@$$@@@+@$$$@++........+@#@##@+.......+@####@@@@#@###++.....+++@@@@@@$$$++...........++++................++++...........++@@@$$$##@@++...+++#####@####@#@@+....+++@@$$$#@@@++.........+@@#@@++......",
+"..++###@@@@@@@##@++.....++@@@$$$+@+++.....++@@@$$##@@@+++....++@@@@@@+@@@###++....++#@##@###$$@#@@....+@@@@@@@+@@$$#@++....@@@$$@@@@@#$$@+.........++@#@#@+.......++###@@@@@@@###++.....+++@@@@@@$#$++.........+++++++.............+++++++...........++@@$$###@@@++...++@@@##@#@##@#@++...++@@@#$$$@@+++..........++@#@@+.......",
+"..++@@@$$@#@$$@@@++....++@@@@$$$#@@@@......@#$$$$@##@@@@@+...+@$$$@#@##$$#@@++....++++@@@###$$#@@++...+@#@$$@@##$###++.....++@#$#####$$$@++........+@$$$+@++.......@@@#$$@@@$$#@@@+....+++#@###$$##@+++.........@@$$$++............+@@$$$++............+++@@#@$$$@@....++@+++@++++@+++....+$#$##@@@@+++...........+@#@@+++......",
+"...+@@@$$@##$$@@@+.....+@@@##$$$#@@@@+...+++$$$$$#@##@@@@....++$$$##@@#$$#@#+......++++@@#@#$$@#@++...+@@#$$#@#$$###++.....+++$$###@#$$#@+.........++$$$@+.........+@#@$$###$$##@++....+@@@#@#@$$@@#++.........+@@$$$++...........++@@$$$+..............++++@@$$#@@....+.++++++++++++.....+$#$@#+@+++.............++@#@++.......",
+"....++@@@#@#@@@++.....++@@#@#######@@+....+@@@#########@@+...++@@@####@#@@+++........++@@######@@+....+++@@@####@+@+++......++@+#@###@@@+++........+@@@@+++.......++++@#@####@@++......++@@####@@@++...........+@@@#@++..........+++$$@@@++...............+++++@+++.......+....+..........+++@@+++.+..............++@#@+........",
+".....++@@###@@+++......+@@##@#@###@#@+....+@##@####@##@@@+....+@@@@#####@@++.........++@@@#@#@#@@@....+++@@##@#@#+++.........++@@#@#@@@@+...........+##@++.........++++@##@#@@@++......+@@#@###@@@++...........+@@###++...........++$$@@@++................++++++.........................++++++.+................++@@#++.......",
+"......+@@@#@@@+.......++@@@@###@@#@@@++...++@@#@@#@##@#@@++....+@@@#@#@@@++............+@#@###@@@+.......+@@##@#@++.........+.+@@@#@#@++...........++@@@+............+@@@@#@#@++.......++@@#@@@@+++.............+@@@@++..........+++$$@@@+.................................................+++.....................+@@@+........",
+"........+++++++........+++@+++@@+++++.....++@+@@+@++@++++.......++++@+@+++.............+.+++++@++.......+++++@+++++............+++@+++++.............++++.............++@+@+++++........+++@+@+++...............++++++...........+@@@@@+++.........................................................................+++.+........",
+".......+.++++............+++++.+++++.........+++++++++++.........++++++++...............++++++.+..........+.+++++...............++.++....................................++++..............+++++..................++.............++@@@++..............................................................................+.........",
+".............................+.+.............................................................+...................................................................................................................................+.+++++........................................................................................",
+"................................................................................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................................................................................",
+".......+++++................+................+.+.+.+.................+.+.............+.+.+.+.............+.+.++.+............+.+.++.+.+..............+.+.............+........+............+.+.+.+..............+.+.+.+..........+........+..........+.+.+......................................................................",
+".....+++++@+++...........+++++++...........+++++++++++.............++++++++++......+++++++++++.........+++++++++++++.......++++++++++++++..........++++++++++......+++++++++++++++.......++++++++++++..........++++++++++......++++++++++++++......+++++++++...........+++++.....+++++.....+++++....+++++..........++++++.......",
+"....++@@#$$$@@+........++@@@@#@@++........+@@@#@@#@@@+++........+++@@@@@#@@+@+...++@@@#@@#@@@@++......+@@@#@#@@#@@@@+.....+@@@#@#@@#@@@@@++.....+++@@@@@#@@+@+...++@@@#@@+++@@@#@@+....+@@@@#@#@@@@@@........+@@@@#@@@@@@+...++@@@#@@++@@@@@@+....+@@@@#@@@++........++@@@@++...++@@@@+..++@@@@+++++@@@@@+......+++@@@@@@++.....",
+"....++@##$$$@@++.......++@@@#@@@++.......++@@#@#@#@#@@+++.......++@@@##@@@@@@@+...@@@#@#@#@#@@+++....++@@#@#@#@##@#@++...++@@#@#@##@###@@@+.....++@@@##@@@@@@@+...@@#@@#@@@@#@#@@@@...+.@@@@@#@##@@@@+......+.@@@#@####@@@+...@@#@@#@@@@#@#@@++..++@##@#@#@@++.......+@@@@@@+++++@@#@@@...+@@@@@+++@@@#@@@+.....++@@#@#@@+++....",
+"..++@@@@#$$$@@@+.......+@@@#@##@@++......+@@#@##@#@#@@@+++....++++@@#@##@@@@@@+.++@@@#@##@#@#@@+@+...+@@#@##@##@##@#++...+@@#@#@#@##@@#@@@+...++++@@#@##@@@@@@+.++@@@#@#@@@@@#@#@@@...++@@##@#@###@@@+......++@@#@#@#@#@@@..++@@@##@#@@@@##@@++..++@@#@#@#@@++.......+@@##@@@+++@@@#@@@.++@@#@@@@++@@#@#@@+...++++@@#@#@#@++++..",
+"...+@@@##@@@$$@++......+@@@$$$$$@@+......++###$$#####$$$++....+@#@$$#####$$$#@+..+@@$$$#######$$#++..++###$$#####$$$@++..++###$$#####$$$#@+...+@#@$$#####$$$#@+..+@@$$$##@@@##$$$@@....+@@@##$$$@##@@+.......+@@###$$###@@+..+@@$$$##@@@$$###@+..+@@##$$###@@........+@@$$$@@@+@@@$$$@@..+@$$$$$@@@@#$$$@@+...+@@##$####@$$$++..",
+"..++@#@##@@@$$@++......+@#@$$$$%@@++.....++###$$#####$#$++...++@@#$$@#@##$$$##+..+@@$$$#######$$$@+..++###$$##@##$$$@++..++###$$##@##$$$##+..++@@#$$@####$$$##+..+@@$$$##@@@##$$$@@....+@@###$$$#@#@@+......++@@#@#$$###@@...+@@$$$##@@@$$##@++..++#@#$$#@@@+........+@@$$$#@@@@@#$$%@@..+@$$$$$@@@#@$$$@@+..++@#@$$@####$#$+++.",
+"..+@###@@##@$$@@@+.....++@@#######++....+++@@@##@@@@@$$$@++.+++$$$@@@@@@@#@@#@+..++@###@@+@+@@#$$@@.+++@@@##@@@@@$$$@@..+++@@@##@@@@@@@@@#+.+++$$$@@@+@+@#@@#@+..++@###@@@@@@@###@+.....++++@$$$@@+++........+++@@@##@@@+++..++@###@@#####@+@+....++@@$$@@@+++......++@@$%$##@@@##$$$@@.+++###$$@@@@@$$$@@+.++@$$$@@@+@@@$$$@@+.",
+".++@###@@#@@$$@@@++.....++@#######++.....++@@@##@@@@@$$$@++..+@#$$@@+++++@#@##+..++@###@@@@++@$$$@@..++@@@##@@@@@$#$+++..++@@@##@@@@@#@##@+..+@#$$@@@+@+@@#@##+..++@###@@@@@@####@+.....+++@@$$$@++++.........++++@##@@@++...++@###@######@+++....+++@$$@@++........++@@$$$##@@@##$$$@@.++@###$$@@@@@$$$@++..++$$$@@@+++@$$$@@+.",
+"..++####@$$$$$@@@.......++@@#####@@++.....+@@@##@@@@@$$$@@+.++@$$$@@@+++@@@@@@+...++###@@+++@@#$$@@...+@@@##@@@@@$$#@+....+@@@##@@@@@#@@#@+.++@$$$@@+++++@#@#@+...+@####@@@@@@###@+.......+++$$$@@+.............++@###@@++....++###@@#####++.......++@#$@@++.........+@@$$$##@@@##$$$@+..+@@##$$##@@@$$#@@+.+++$$$@@++@+@#$$#@+.",
+"..+@###@#$$$$$@@@+......++@$$@@@$$@++....++@@#$$@#@##$$#@++.++@#$$@@++..+++@+++..++@####@++++@@###@...+@@@##@@@$$@@@++...++@@###@@@#$@@++++.++@#$$@@++++@+@@@++...++####@#@######++.......+@@$#$+++.............++@##@@@+.....+@###$$$$$@@++.......++@$$+@++.........+@@$$$$$@@@$$$$$@@..+@###@####@@$$$@++.+@@#$$@@++++@@#@#@@.",
+"..++##########@@@+.....++@@$$@@@$$@@++....+@@@$$@##@#$$$@@+..@@$$$@++.....+++.....++###@@+++.@@@@#@..++@@@##@@@$$@@++.....+@@@##@@@$#@++++...@@$$$@++++++@@+@++..++@#######@#####@+........++$$$@++..............++##@@@+....+++###$$$$$@@++.......++@#$@++..........++@$$$$$@@@$$$$$@@.+++####@###@@$$$@++.++@$$$@++..++@#@#@+.",
+"..++##########@@@+.....+@@@##@@@##@@@.....+@@@$$#####$$$@@+.++@$$#@++............+++###@@+.+++@#@##...+@@#$$$$$$#@@++.....+@@@$$$$$$$@++....++@$$$@++++@@@@@@@....++#####@#######++.......++@$$$@+..............+++##@@@+....++@###$$$$#@@++........+@$$@++..........++@$#$@#$$$#@$$$+@..++###@@$$$@@$#$@++.++@$$#@+++.+@@@###+.",
+"..++####@$$$$$##@++...++@@@##@@@##@@@+....+@@@$$@##@#$$$@@+.+@+$$$@++............+++###@@++.+@@@@##..++@@@$$$$$$$@+++.....+@@@$$$$$$#@++....++@$#$@@+++#@###@@+..+++#############@+........++$$#@++.........+.+.++@##@@@+.....++###$$$$$@@++........+@#$@@++........+++@$$$@#$$$#@$$$@+.++@###@@$$$@@$$$@@+.++@$$$@++..++@#@@#+.",
+".++@@##@#$$$$$@@@++....+@@###@@@##@@@++...+@@@$$#####$$$@@+.++@$$$@++............++@@##@@++.++@#@#@...+@@@$$$$$$$@++++....+@@#$$$$$$$@+.....+@@$$$+++++@#@@#@@+..++@@######@####@@+.......++@$$$@+.......++++++++++##@@@+....+++###$$$$$@@+++......++@$#@@+++++......+@@#$$#@$$$##$#$@+..++###@@$$$@@$$#@++.++@$$$@+++.++@@###+.",
+"..+@####@@#@####@+....+@###$$$$$$$###++...+@@@##@@@@@@#@##+.++@$#$@@++....+++.....+@###@@++++@@#@##...+@@###@@@$$@@@@+....+@@@###@@$#+++.....+@$$$@@+@@##$$$#@+...+@###@@@@@@@###@+......+.++$$$@++......+@@##++++@##@@@+.....+@###@@#@#$$@++.......++$$@@+++@@@+....++@$$$@@###@@$$$@@.++@###@#@@@##$$$@@+.+@@#$$@++.++@##@#@+.",
+"..++###@#@#@##@#@@...+++###$$$$$$$###++...+@@###@+@+@#@##@+.++@$$$+@++.+++++++....+@###@@++++@@@#@#...+@@@##@@@$$@@@@@+...+@@@##@@@$$++.....++@#$$@@+++##$$##@@...+@###@@@@@@@###++.......+@+$$#@++......+@###+@++@##@@@+.....++####@##@$$@@++.....++@$#@@+++@@@++...++@$$$@@#@#@@$$#@+..++####@##@##$#$+++..+@$$$@@+++++@####+.",
+".+++####@###@##@@++...+@$$$#@#@@#@$$$@+..++@@@##@@@@@##@##+.+++####@+++++@@@@@+..+++###@@++++@$$$@@..++@@###@@@@@@#@#@+..++@@@##@@@@@+.......+@###@@@@@@@@####+..+++####@+@@#@###@+......+++@$$$@+++....++@#$$@+@@@$$@@@+....++@###@@@@@###@@++....+@+$$@@@@@$#$@+...+@@#$$@@+@@+@$$$@@..+@###@@@@@$$$$$@@+.+++###@@@++@@$$$@@+.",
+"..++@@#@#@@@@@@@@...+++@$$$@#@@@#@$$$@@..++@@@##@@+@@@###@+.+++###@#@@+@@@##@@+..+@+###@@@@@@@$$$@@...+@@@##@@@@@#@@##+..++@@###@@@@++.......++####@@@+@@#@#@#+..+@@###@@@@+@@###@+.....+++@@$$$@+++....++@$$$@@@+@$$@@++....++@####@@@@##@#@@...+++@@$$@@@@@$$#@@...++@$$$@@++@+@$#$@@..+@###@@@@@$$$$$@++.+++####@@@+@@$$$@@+.",
+"..++#@##@@@@#@@@++...+@@$$$#@@@@@@$$$@@..++@#@##@@@@@##@##+..+@@###@@@@@@#@##@+..++@####@@+@@@#$#@@..+@@@###@@@@@@#@#@+..+@@@@##@@+@@++.....+.@@###@@@@@@@###@+..+++####@+@@#@###@+.....+++@+$$$@@@++....@+$$$@@@@@$$@@@.....+@+###@@@@@####@@+...++++$$@@@@@$$$@++.++@@#$#@@@++@@$$$@@.+++####@@@@#$$$$@@+...@@###@@@@@@$$$@++.",
+"..++@@@$$$$$$$@@++...+@@$$$$$@@#$$$$$@@..+@$$$$$$$$$$$$$@++...+@@@##$$$$$###@++..+@@$$$$$$$$$$##@++..+@$$$$$$$%$$$$$##+..+@$$$$$$$$@@.........+@@@$$$$$$$##@@@+..+@#$$$$$@@@$$$$$@@....+@#@$$$$$$$#@@+...++@#@$$$$$##+++.....+@@$$$$$@+@@@$$$@@..+@$$$$$$$$$$$$$@+...+@#$$$#@+@+@#$$$@@.++@$$$$$@+@@#$$$@+....+@@@$$$$$$$@@@+++.",
+"...++@@$$$$$#$@@+...++@#$$$$$@@@$$$$$#@.+++$$$$$$$$$$$$$@++..+.++@#@$$$$$##@@++.++@#$$$$$$$$$$#@#++..++$$$$$$$$$$$$$#@+..++$$$$$$$$@++.......++++@$#$$$$$###@++.++@@$$$$$@@@$$$$$#@...++@@#$$$$$$$##@+...++#@#$$$$$#@@+......+@@%$$$$@@+@@$$$#@..++$$$$$$$$$$$$$@++.++@@%$$@#+++#@$$$#@..+@$$$$$+@+#@$$$@++...+++@$#$#$$$#@@++..",
+"...+++@#$$$$$#@++....++@@@@@@@++@@@@@@+..++@@@@@@@@@+@++++....++++@+@@+@@+@++....++@@@@@@@@@@@+@++...++@@@@@@@@@@@@@+@+..++@@@@@@@@++..........+++++@@@@@++++.+..+@@@@@@++++@@@@@@+....+@+@@@@@@@@+@++...++++@@@@@@+@++......+@@@@@@+++++@@@@++..++@@@@@@@@@@@@@++..++@+@@@@+++++@@@@@+..++@@@@@++++@@@@++....+++++@@@@+@+@++...",
+".....++++@@@@++++....++++@+@++++++@@+++...+++@+@++++@+@++.........++++@++++++......++@+@@@+@+++++.....+++@@@@+@@@@+++++...+++@@@@+++.............+++++@+@++++.....+++@@+@+++++@++++.....++++@@@+@@+++......+++++@+@++.........++@++@+++++++++++...++@+@+@+@+@@+++.....+@++@++++++++++++...++@@+++++++++++.........++++@++++.....",
+".....++++++++++.......+++++++++++++++++...++++++++@+++++..........++++++++.........++++++++++++.......++++++@+++++++++....++++++++++..............++++++++........+++++++++++++++++.....+++++++++++++........++++++.+..........++++++....++++++....+++++++++++++......+++++++..++++++++....+++++....++++..........+++++++.+.....",
+".........+++.............+.+....+...+........+.++.....................+++.............+..+..+..............+......+.............++....................+.+.....................+++.........+...++++............+.+++..............+.+.......+.........++.+++++.+..........+.........+..........+........................+........",
+"................................................................................................................................................................................................................................................................................................................................",
+"....................................................................................................................................................................................................................................+++++.........+++++....................++++++...............................................",
+"...................................................................................................................................................................................................................................+@@@@@++.......+@#@+@+................+++@@@@@+..............................................",
+"........+.......................................+........................................+..+....................................................................................................................+...............+++@@#@@@++......+@##@++................++@@#@@@++..............++.............................",
+"...++++++++++++...........++++++++.........+++++++++++.............++++++++++.......+++++++++++++......+++++.+.+++++++.....++++++...+++++++....++++++...+++++++....++++++++++++++++....++++++++++++++++.....++++++++++++..........+@$$$##@++.....++@@@#@++...............+@@##$$$++.............+@@@+...........................",
+".+++@@@@@@@@+++++.......+++@@@+@+++......+++@@@@@@@++++..........+++@@@@@@++++....+++@@@@@@@@@++@+...+++@+@++++++@++++...+++@+++++++++@++++..+++@+@+++++++@++++..+++@@@+++++@@@++++..+++@@@+++++@@@++++..++++@@@@@@@@+@+++........++$$$##@++.....++@@@##++...............++@##$$$@+...........+++@@@++..........................",
+".++$#$$#$$$$$#@@+......++@@@#$$$$@@@+...++@@$#$$#$$$#@@++.......+++$#$$$#$$$$++...++$#$$#$$#$$$$$@+..++$$$$$@@@##$$$@@+.++@@$$$##+++#@$$$@@.++@@$$$#@@++#@$$$@@..+@##$$$$@@@#$$$$@@..+@##$$$$@@@#$$$$@@...+@#@$#$$$$$$$$++.......++@$$$#@@++......+@@@#@@++..............+@+##$$$@++..........++@$$$@++.........................",
+".+@$$$$$$#$$$##@@+....+++@##$$$#$@@@+....+@#$$$$$$$$##@+++.....++@@$$$#$$$$#$@+..++@$$$$$$$$$$$$#@+..+@$$$$$@+@@@$$$#@+..+@#$$$@#+++##$$$#@..+@#$$$##@@@##$$$#@..+@#$$$$$@@@$$$$$#@..+@#$$$$$@@@$$$$$#@..++###$$$$#$$$$$@++......++@$$$@@++.......++@@$$@++...............++@+$$#@+...........+@@$$$@@+.........................",
+"+++$$$$$$$$$$@#@@++...++@@##$$$$$@@@++...@@@$$$$$$$$@#@@@+....+++@@#$$$$$$$$$+@..++@$$$$$$$$$$$$$@@.++@#$$#$@@@##$$$@#+.+@@@$$$#@@+@@@$$$#@.++#@#$$#@@@@@#$$$@#.++@@$$$$$@@@$$$$$#@.++@@$$$$$@@@$$$$$#@..+@@@#$$$$$$$$$$@+........++$$$@++..........+@#$@@++..............+++@$$$@++.........++@@$$$@@++........................",
+"+++@@@##@@@@@####@+.+++###@#@@@@@$$$@++..+@@$$$@@@@@####@++....+@####@@@@@$$$@+..+@@#$$@@$$$@@$$$+@.++@$$$@@@++@@$$$@@+..+@@$$$@@@+@@@$$$@@.++@@$$$@@@@#@@$$$@@.++@@$$$@#@@@#@$$$@@.++@@$$$@#@@@#@$$$@@..++###@@@@@#@$$#@++......++@$$$@++..........++@@#@@+...............++@$$#@+..........++@#####@++........................",
+".+@@@###@@@@@####@+..+@@###@@@@@@$$$@@+.+++@#$$#@#@@#@###++...+@#@####@@#@$$$@@..++@$$$@@$$$@@#$$@+..+@#$$@@@+@+@$$$@@+.++@@$#$@@+++@@#$$@@..+@@$$$@@@#@@@$$$@@..+++$$$##@@@##$$$@+..+++$$$##@@@##$$$@+..+@####@#@@##$$$@+........++$#$@++.........++@@#@#@@+..............+++$$$@++........++@#@#####@+........................",
+"..+@@@##@@@@@@@@##+.++@$$$@@@@@@@###@@+..++@###@@@@@@@###++...++###@@@@@@@#@#++..++@$$$@@$$$@@$$$@+..+@###@@++++@#$$@@+..++@###@@+++@@###++..+@@$$$@#$$$@@$$$@@..+++@@@$$###$$@@@++..+++@@@##@@@$$@@@++..++@@#@@@@@$$@@@++.......++@$$$+++...........+@#@#@++..............++@$$$+++........++@$$@@@#$+@........................",
+".++@@@##@@+@@@#@##+.++@$$$@@+++++#####+..+++####@@@@#@###@+...++####@@@@@@##@@+...+@#$$@@$$$@@$$#@@.+++###@@++++@$$#@@+...++###@@@++@@###@+..++@#$$@@$$$@@$$#@@...++@@@$$#@#$$@@@+....++@@@##@@@$$@@@+...++@#@@@@@@$$@@@++.......+++$$$@+...........++@@$$$@++..............+@#$$@+.........+++$$@@@$$@++.......................",
+"..+@@###@@+@@@#@#@+.++@$$$@@++++@@##@@+..++@###@@@@@@@##@++...++#@#@#@@@+@@#@@+..++@#$$@@$$$@@$$$++..+@###@@@++++$$$@++..++@###@@+@+@@###@+..+@@$$$@#$$$#@$$$@+....+@@@$$###$$@@@+.....+@@@##@@@$$@@@+....+@@@@@@@@$$@@@+........++@#$$@++...........++@$$$+++.............++@$$#@++........+@@#$@@@#$@++.......................",
+".++@@@##@@+@@@####@.++@#$$@++++++#@@##@...++######@@$$##@@+...++@@@$$$$$#@@@@++....+@+@@@$$$@+@@+++.+++###@@++++@$#$@++...++@@#@@@+@@@@#@++..++@$$$##$$$##$$#@+.....+@@@@$$$@@@++.......++@##$$$##@++......+@@@@#####@@+..........+@$#$@+.............++@##@@+..............++$$$@+........+++@@@++@@@+@+.......................",
+"..+@@@##@@@@@#@#@@+.+@@$$#@++..++@#@#@+..+++###@#@#@$$@#@++...++@@@$$$$$@#@@@@+.....++@@@$$$@@++++...+@###@@+++++$$$@++...++#@##@@+@@###@@+..++@#$$@#$$$#@$$$@@......+@@#$$$#@@+++......+++##$$$#@@++.......++@@#####+++.........++@$#$@++.............+@@@$$++............++@$$$+++........++@@@@++@@+++.......................",
+"..+@@@$$$$$$$###@@+..@@$$#@+++++@@@#@#+...+@###$$$$$##@@@+.....++@@@@@@#$$$$$++.....++++@$$$@@+++...+++###@@++++@#$$@@+....+@@@##@@@##@@@+...+@@$$$$$@#@$$$$$@+.....++@@#####@@+.........++@@$$$@@+.........++@@$$#@@++.+........+++$$$@+...............++@#$@++...........+++$$$@+............+++.+++++........................",
+"..+@@@$$$$$$$###@++.++@$$$@@++++@###@@@..+++###$$$$$##@+++.....+++@@@#@#$$#$$++.......++@$$#@++......++###@@++++@$$#@++...++@@@##@@@##@@@+...++@$$$$$@#@$$$#$@+.....++@@######@++........++@@$$$+@++........++@@$$$@@+++.........++@$$$@++.............+++@##@@++..........++@$$$@++............................................",
+"..+@@@$$$$$$$##@@++..++$$$@@@@@@@####@+..++@###$$$$$##@@++....+++@@@@@#@$$$#$@+......++++$$$@+++....++@###@@++@+@#$$@@+.....@@@##@@@##@@@+....+@#$$$$#@@$$$$#@@...+++@@@#####@@@++........+@+$$$@++.......+++@#@$$$@@@@++.........+@#$$@+...............+++##@@@+..........+++$#$@+.............................................",
+"..+@@###@@@@@@@++...+++@##$$@@@@#$$$@@+...++###@@@@@$$@@@++...++#@#@@@@@@@$$$@+.......+@+$$$@++......++###@@++@+@$$$+++.....+@+$$@@@$$@++....++@###$$@@@$$###++...++@@#$$@@@$$@@@++.......+@@$$$+++........+@+$$@@@@@@#@@+.......++@$$#@++...............++##@@@+..........++@$$$+@.............................................",
+".++@@@##@@@@@++++....++#@@$$@#@##$$$@@+..++@###@@@@@$$@@@++..++@###@@@@@@@$$#@@......+++@$$$@@+.....+.@@##@@@@@@@$#$@@.......+@#$@@@$$@++.....++###$$#@@$$###@+...+@@@@$$@@@$$@#@++......+++@#$$@@++......++@@$$@#@@@###@++......+++$$$@@+...............++@@#@#++.........+@+$$$@++............................................",
+".+@###$$##@@@++......++@##$$@#@#@$$$@++..+@@$$$##@@@@#$$$@+..++@$$$#@@#@#@$$$@+......+@@@$$$@@@+......+@@###@@@#@###+++......+@@#$$$@@@+.....++@#####@@@#####++..+@@$%$##@@@##$$$@@......++@#$$$@@+++....++@##$$##@#@$$$+++......++@$$$++++..............++@@###++........++@@$$#@+.............................................",
+".++#@#$$#@#@@+.......++++@##$$$##@@@@@+.++@@$$$#@+@@##$$#@@..++@$$$###@@##$$$@+.....++@@#$$$@@+++.....@@@@#####@####@+.......++#@$$$#@+++.....++@####@@@#####@+.+.@@$$$##@@@##$$$@@.....++@#@$$$#@@+.....++#@#$$@##@#$$$@@........+@#$$#@++...............++@$$$@++......+++@@$$$@++............................................",
+".++####$#@@@+++.......+@@@##$$$##@@@@@+..+@@#$$@#@++@@$$$@+..++@$$$#@#@#@#$$#@+.....++@@@$$$#@@++.....+@@###@#@#@##@++.......++@@$$$#@++......+@#####@@@####@@+.++@@$$$##@@@##$$$@@.....++@@#$$$@@@++....++@##$$#@#@@$$$@+........+@$$$@#@++..............+++$#$++.......++@@#$$$+++............................................",
+".++@#######@@+.........+@@$$###$$$$$@@+...@@#####+@@@@###@@...+@#@########@@@++.....++@#######@++......++@@######@@@++........+@@###@@+.......++@@@@@+++@@@@@++..+@@#####@@@#####@@.....++@#######+@+.....@@@@#########@@++......++@#$$#@@++................@#$#@+.......++@@@$$$@+................................+.+.+.+.+....",
+".+@@##@###@@+.........++@@$$###$$$$$@@+..+@@@##@#++++@@#@@@..+++@@@#@#####@@@+.......++#####@#@++......+++@#@####@@@+.........+@@@##@@+........+@@#@@@++@#@#@+...+@@###@#@+@@###@@@.....++@@######+++.....+@@@#########@@+........++##@##@@+...............++@@+++.......+@@####@@+............................+++++++++++++++..",
+"..+++++++@+++..........@@@$$###$$$#$@@+...+++++@++..+++++++....++@+@+@+++++++........++++++@++++.........++@+@+++++............+++++++.........++++++++++++++.....+++++@++++@++@+++......+++++++++++......++@+++@+++++@++..........@@####@++.................++++........++@#####+++..........................++@@@@@@@@@@@@@@@.",
+"..++++++++..+...........+@@@@@+@@@@@++....++++++.+...++++......+.++++++++++.+..........++++++.............++++++++.............++++.+...........+.++..+.++..+......++++++++.+++++.+.......++++++++..........+++++++++++.+.........++@#@#@@++.................+++.........++@@#@#@++..........................+@+@@#@#@#@@###@@@.",
+".....+..................+++++++@@@+++.......+..........................+..................+..+................+.............................................................................+.++.................++++..............+++++++++............................+.+++@+@++............................@@@#@#@#@#@@#@#@@.",
+".........................++++++++++++...............................................................................................................................................................................................+++++..................................+.++++...........................++@@###############.",
+"................................................................................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................................................................................",
+"...........................................++++.............................................++++.................................++++++++..........................++++.....................+++...................+++..........++++...................+++++.....................................................................",
+"........+++...............................+++++++..........................................+++++++..............................++++@@@+++........................+++++++..................++++++................++++++.......+++++++................++++@+++...................................................................",
+".....+++@@@+............................++@@$$$@++.......................................+++$$#@@++............................++#@##$$$$++.....................++@@$$$@++................++@$$$++..............++$$$@@......++$$$@@+...............++@$$$$$++..................................................................",
+".....++@@@@++............................+#@$$$@@+........................................+@$$###++...........................++@@##$$$$$@+......................+#@$$$@@+................+@@#$#++..............++$#$@@+.....+@$$$#@@+..............+@@$#$#$++..................................................................",
+".....+@@$$$@++...........................+@@###@@+......................................+.++@@###++..........................++@@$$$@@@@++.......................+@@###@@+................+@@###++.............+++###@@+.....++@@@##++...............++@@$$$++..................................................................",
+".....++@$$$@@+...........................+++###@@+++..................+.+...............+++@#@###@+..........................++@@$$$@@@@@++...........+.+........+++###@@+++.............+@@@###@++...........+++@###@@++....++@@###@+++.............++@@$$$@++............+.+.+................................................",
+".....+@@$$$@++...........++++++++........+@@###@@@++++............+++++++++++.........++++@+@####++.......++++++++.........+++@@@$$$@@@@@+.......++++++++++++....+@@###@@@++++...........++@@###++............++@@###@@+.....++@@@##@++++++..........++@@$$$@+........++++++++++++++.......+++++++++++............++++++++......",
+"......++@#@#@++.........+++@@@@@+@+.......++###@#@@@@@+++.......+++@@@@@@@@@@+.......++@@@@#@@###@+.....+++@@@@@@@+++......++@@#######@@@+.....+++@@@@@@@@@@@+....++###@#@@@@@++........++@#@#@@++..........++@@@@#@@@@++.....@@@@##@@@@@@+@..........++@$#$@++......++@@@@@@@@@@@@@++....+@@@@@@@@@@@++........+++@@@@@@@+++...",
+"......++@#@#@++.......+++@@@#@@@@+++......+@####@##@@@@+++.....+++@@@@#@#@@@@++....+++@@@#@#@###@@+....+++@@@#@@@@@+++.....+@@@#####@@#@@+....+++@@@@#@@@#@@@@....+@####@##@@@+++.......+++@@#@#+++.........+@@@@@#@#@@++.....+@@@##+@@@@@@@+.........++@$$$+++.....+@@@@@#@#@#@@@@@@++.+++@@@@@@@@@@@+++......+++@@@#@@@@@+++..",
+"......++++@@@+.........+@#@$$$$$$$@++....+++###$$$$$$$@#@+....++@#@$$###$$$$$@+...++@#@$$$$$$$###++...++@@#$$###$$##@+.....+@#@$$$$$###@@++..++@@#$$###$$$$$@@+..+++###$$$$$$$@@@+......+@@##$$$@+..........+@@###$$$$$++....++@@@##@@@$$#@@+..........++$$$@+......+@@$$$$$$$$$$$$$@@+..+@@$$$#####$$@@@+....++@@#$$###$$##@+..",
+".......++++@@+........++###$$$$$$#@++....++@###$$$$$$$##@@+...+@@##$$###$$$$$@+...+@@##$$$$$$$###@+...+@##@$$###$$@##++...++@#@$$$$$###@@+...+@##@$$###$$$$$#@+..++@###$$$$$$$#@@+......+@@##$$$@++.........+@#@##$$$$$++.....+@@@###@@$$#@@@.........++@#$$+@......+@@$$$$$$$$$$$$$#@@.++@#$$$#####$$@@@+....+@##@$$###$$@##++.",
+".........++@@+........++@@##$$#$$$@@++....++###$$$$$$$###++...++###$$###$$$$$@@...++#@#$$#$$$$###@+...++@##$$###$$#@#@+....+@#@$$$$$####@++..++@##$$###$$$$$@@+...++###$$$$$$$@@@++.....++@##$$$@+.........++@@####$#$$@++....+@@@###@#$$@#@+........+.+@$$$@++.....@@#$$$$$$$$$$$$$#@+..@@@$$$#####$$#@@++...++@##$$###$$##@@+.",
+"......................++@@@#@#@@$$@@@.....+@#####+@@@@$$$@+..++@#$$@@@@@@@$$$@+..+@@$$$@@@@@####@@+..++@$$$@#@@@@#$$$++....+++@@@###@+++++..++@$$$@@@@@#####@++...+@####@@@@@####++......++@@$$$+++.........++++@@@@@$#@+.....+@@#$$$$$@#@+++.........+++$$#@+......++@###@@#####@@@##+..+@@#####@@@@@###++..++@$$$@@@@@@@$$$@+.",
+"......................+@@@@@#@#@$$@@@+...+++###@#@+@@@$$$@@...@@$$$@@++@@@$$$@+...++$$$@@@+@@####++..++@$$$#@@@@#@$$$@@.....++@#@##@@@++....++@$$$@@@@@#####@++..+++#####@+@#@###@+.....+.+++$$$@+............++++@@@$$@++...++@@@$$$$$@@@++..........++@$$$@++.....++@###@#@#@#@##@#@@...+@#####@@@#####@+..++@$$$@@@+@@@$$$@+.",
+"......................++###$$###$$@@++....++###@@@@@@@$#$+@..++@$$$@@@++@@@@@++..+@@$$$@@@+@@@###@+..+@@$$$$$$$$$$$$$@+.....+++@#@##++++....+@@#$$@@+++@@###@++...++###@@@@+@@###++.......+@+$$$@++.............+++@@$#@+.....+@@@$$$$$@@++............+@#$$+++.....+++###@######@@##@@..+++###@@@+@@@###++..+@@#$$@@@++@@$#$@+.",
+"......................+@###$$###$$@@@+...++@####@++++@$$$@@...@+$$$@++++++@@@++..+++$$$@@+@@@@###@+..++@$$$$$$$$$$$$$@+......++#@##@@++.....++@$$$@@+@@@@###@+...+++###@@++@@@###@+.......++@$#$@+................++@$$@+.....+@@@$$$$$@@@++..........++@$$$@+.......+@###@@#@#@#@#@##+...+@###@@+@+@@###@+..++@$$$@+++@+@$$$@@.",
+".....................+++###$$###$$@@@+....++###@@@@@+@$$$+@..+@@#$$@++++++@+@++..+@@#$$+@++@@@###++..++@$$$$$$$$$$$$$@+......++@#@#@@+......+@@$$$@@++@@@###++...++@@##@@@+@@@##@@+.......++@$$$@++..............++@@$#@++....+@@@$$$$$@@++...........++@$$$@++.....++@####@###@#@#@#@+...+@@##@@+@+@@##@@+..+@@$$$@@+++@@#$#@+.",
+".....................++@$$$@@@@@$$@@@++..++@#####@+@@@$$$@+...+@$$$@@+++++@@@++..++@$$$@@@@@#####@+..+@@$$$##@@@@@###@+.....++@#@##@@++......++$$$@@@@@#####@++...+@###@@+++@@###@+......++@+$$$@+++.............++@@$$++....++@@@#####$$@+++........+++@#$$@@++.....+@###@@#####@#@##@..++@###@@@+@@@###@+...++$$$@@@+@@@$$$@@.",
+".....................++@#$$@@@@@$$#@@+...++@#####@@@@#$$#@+..++@$$$@#@++@+@@@@+..++@$$$#@@@@#####@+...+@$$$##@#@#@#@@@+.....++@@#@##@++++...+@@#$$@#@@@#####++...++@###@@@@@@@###++.....+++@@$$$@+++............++@+@$$@++....+@@####@#$$@@++........++@@$$$++++....++@####@##@#@@#@#@@..++@###@@@+@@@###++..+@@#$$@@@@@@#$$$++.",
+".....................++@$$$@@@@@$$@@@++..++@#####@@@@@$$$@@...++$$$@@@@@@@@@@@@...++$$$#@@@@#####@+..+@+$$$@#@@@@@###++....++@@@###@@@@++....+@$$$@@@@@#####@++..++@###@@@+@@@###@+.....+++@@#$$@@@+++.......+++++@@@$#@+....+@@@@####@$$@@@++......++@@@$$$@@@+++..++@###@@###@##@###@..++@####@+@@#@###@+...+@$$$#@@@@@@$$$@@.",
+".....................++@#$$$$$$$$$$$$@+..+@@$$$$$$$$$$@#@++..+++@##$$$$$$$$$$@@..+++@@#$$$$$$$$$$@@...++@@#$$$$$$$$$$@+....+@@#$$$$$$$@@@+...++@##$$$$$$$##@@+...+@@$$$$$@@@$$$$$@@...++@#@$$$$$$$@#@+.......+@@@@#@###++....+@$$$#@@@@$$$$$@@+...++@@##$$$$$$@#@+..+@@$$$##@##$$#@#$$@..+@@$$$$$@@@$$$$$@@...++@#@$$$$$$$@@@++.",
+"......................++$$$$$$$$$$$$$++..+@@$$$$$$$$$$@#@++....@@@@$$$#$$$$$$@@...++#@@$$$$$$$$$$@@....@@#@$$$$$$$$$#++....+@#@$$$$$$$##@+....@@@@$$$$$$$###++..++@@$$$$$@@@$$$$$@@....+@@#$$$$$$$#@@+.....++@@@@@#####++....++$$$##@@@$$$$$@@+....+@@#$$$$$$$#@@+..+@@$$$####@$$##@$$@..+@@$$$$$@+@$$$$$@@....@@@#$$$$$$$##@++.",
+"......................++@+@@@@@@@@@@@++..+@@@@@@@@@@@@@+++.....++@@@@@@@@@@@@++....++@+@@@@@@@@@@@@....++@@@@@@@@@@@@+.....+@@@@@@@@@@@@++....+@@@@@@@@@@###@+...+@@@@@@@+++@@@@@@+....+@@@@@@@@@@@@++......+@@#####@@@++....++@@@@+@+@@@@@@@++...++@@@@@@@@@@@@++..+@@@@@@@@@@@@@@@@@@..+@@@@@@@@++@@@@@@+....++@+@@@@@@@+@++..",
+".......................++@+@@@@@@@@@++....++@@@+@@@@@@+++.......++++@@@@@@@++++.....+++@+@@@+@@@@++......++@@@@@@@+++.+....+++@@@@@@@@+++......+++@@#@#@####+++...++@@@+@+++@@@@@@+.....+++@@@@@@@+++.......+@#@#####@++......++@@+@+++@@@@@++......+++@@@@@@@+++....++@@@@+@+@@@+@@@@+...++@@@@@+++@@@@@@+.....+++@+@@@@@+++...",
+".......................++++++++@++++++....++++@++++++++...........+++++++++++........+.+++++++++@++.......++++@++++++......++++@@@@@+++++......+++@@@@@#@###++....++@@@++++++++++++.....+++++@++++@++......++@@#####@++.......+++@+++..++@+@++......++++++@+++@++....++@@+++++++@+++@++...+++++++++++@+++++......+.+++++++......",
+"..........................+++++.+++.+........+.++++++...............++++.+++...........+++++++++............++.++++...........+..+.+++++.......++@@@##@###@#++.....+.+.+++..++++++.........+++++++..........+++++++@+++........+......+.+++..........+.+++.+++..........+++.++.+++.+.+......++++++..+.++++.........+++++.+......",
+".................................................................................................................................+.............++@@#@@#####@++................................................+++++++...........................................................................................................",
+"................................................................................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................................................................................",
+".....................................................................................................................................................................................................................................+++@...............++++.............+++@...................................................",
+".....................................................................................................................................................................................................................................++@@++.............+@@@+.............+@@+++................................................",
+".....................................................................................+++...........................................................................................................................................++++@@++............++@@@++..........+++@@@+++...............................................",
+"....................................................................................+++@@+........................................................................................................................................++@##@@++............++$$$++...........++@@@#@++..............................................",
+"...................................................................................+@@@@#++.......................................................................................................................................+@@##@@++............++$$$++............+@###@@...............................................",
+"....................................................................................@@@##@+++.....................................................................................................................................++$$$@@+............++@#$$@++...........+++$$$+++.............................................",
+"...+++++++++++...........++++++++++++........+++++++++++..........+++++++++.......++@@@##@++++.........++++.....++++.......+++++++.+++++++.....+++++....+++++.......++++++.++++++......+++++....+++++.......++++++++++++.........++@$$$+++............++@$$$++............+@@$$$@+..............................................",
+"..+++@@@@@@@+++++......+++++@@@@@@@+++.....+++++@+++@+++++......++++@@@@+++++....+++@@@##@@@@+++......+++++++.++++++++....+++@+@++++++@@+++...+++++++++++++++++....+++@+++@++@++++....+++++++++++++++++....++++@@@@@@@++++........+@#$$@+.............+++$$$@++............++$$$@++.............................................",
+"++@@$#$@@$#$##@@+.....++@@###$##@$$#@@+....+@###$@@@$$##@++....++@#@$#$#@#@@+.....+@$$$$$$$#$$+@+...++@@$$$@@+++$$@#@++.++@@$$$$$@@@$$#$$@@.++@@$$$@#++@@#$$$@@..+++$$$$$@@@$$$$#@+.++@@$$$@@+++@#$$$@@....+@#@$#$#$#$#@@+.......++@$$$@++............++@#$$@+............++@#$$++..............................................",
+".+@@$$$##$$$##@@@+....+@@@##$$$##$$$#@+...++#@#$$#@##$###++....++@##$$$#####++...++@$$$$$$$$$$@++....+@@$#$+@++@#$#@#++..+@@$$#$$@@@$$$$$@@..+@@$$$#@@@+#@$$$#@...++$#$#$@@@$#$$$++..+@@$$$#@@@@@@$$$#@...+@@##$$$$$$$###++......+++$#$@+..............+@$#$@++............+@$$$@++...........+++++++++.+.......................",
+"++@@$$$##$$$##@@@++..++@@@##$$###$$$@@+....+@##$$@#@$$###++..+++@@##$$$@##@#++....+@$$$$$$$$#$@++...++@#$$$@@++@$$##@++.++@@$$$$$@@@$$$#$#@.++@#$#$#@@@@#@$$##@..+++$$$$$@@@$$$#$@+.++@##$$#@@+@#@$$#@@...++@##$$$$$$$@#@++......++@$$$+@.............++@$$$+++...........+++$$$@++........+++++++++++++++......................",
+".+@@#$$$$@@@##$$$@+..++$$$##@@@$$#$$@@+...++@@@$$$$$@@##@@+...+@#@$$@@@#####++....++@#@##@@@@@+++....+@@#$$@@@+@@@###@+..+@@#$$@@@@@@@$$$@@.++@@$$$@@###@@$$$@@...++@@@$$@@@$$#@@++..+@@$$$#@@@@#@$$$@@...+@###@@#@@$$@@@+.......+@@$$$@++............+++$$$@+............++@$#$@@+........+@@@$$@#@@@##@++.....................",
+"++@@$$#$$@@@##$$#++..++$$$##@#@$$$$#@@.....++@@$$$$$@@@#@++..++@##$$@#@#####++....++@#@##@@@@@+......++@$$#@@@+@@####++..++@$$$#@@@@##$$#@+..+@@$$$@@###@@$$$@@...++@@@$$@@@$#@@@++...+@#$$@#@@+#@$$$@+....+@####@##$$@@@+......++@@$$$+++............++@$$$@++...........++@$$$@@+.......++@@@$$##@@@###++.....................",
+"..++###@#@@@@+$$$@+.++@$#$@@@@@#@###@++.....++@$$@@@@@@+++...++@@@$$$$$@@@@@++....++@@@##@@@++.......++@###@@++@@@###@+..+++@@@##@@@@#@#@++.+++@###@#$$$#@###@+....++@@@@$$$@#@@+....++@@@@$$@@@$$@@@++...++@@@@@$$$#@@++........++@$$$@+..............++$#$@+............+++$$$@+++.....++@$$$@@$$$$$##@@+.....................",
+".++@####@@+@@@$$$@@..++$$$@@+@@#@###+++.....++@$$@@@++++++...++@@@$$$$$#@@@@+.....++@@###@++.++......+++###@@+++@@##@@+...++@@###@@@##@@@++..++@####@$$$@####++.....++@@#$$$@@@++.....++@#@$$@@@$$#@@++....++@@@@$$$@@@+++.......++@$#$@++............++@$$$+@.............+@#$$@++.......+@$$$#@$$$$$@#@@+.....................",
+"..++###@@@@@@@$$$@+.++@#$$##@@@$$###@+......+++$$@@@+++.......+@@@#$$$$@#@@@++.....+@@@##@+++.........+@###@@@+@@@###@+...++@@@@#@@@###@@+....++###@#$$$@@###@+.....++@@@$$$#@+++.......++@$$@#@$$@@++.....++@@#@$$$#@@++........+++$$$++.............+++$$$@++...........++@$$$@+........++$$$#@$$$$$##@++.....................",
+".++@###$$@@@##$$$@+..+@$#$###@#$$##@@+......+@+$$@@@++.......++@@#@@#@#$$###++....++@@@##@@+++++......++###@@@++@@###@+....+@@@$$@@@$#@+++....+@#####$$$$$###++.....++@#@$$$@#@++.......+++@#$$$@@@+.......++@@$$##@@@@@++.......++@$$$@++............++@$#$+++...........+++$$$+@........++@+@+@@+@@@@@++......................",
+".+++###$$@#@##$$#++..++$$$##@#@$$###@+.....+++@$$@@@+++......++@@@@@###$$##@@+......@@@##@@@@@+++....+++###@@@@@#@###@+.....++@#$@@@$$+@+....+++#####$$$$$###++....++++#@$$$#@@+++.......+@##$$$##+++.....+++@@$$###@@@@@+.......+++$$$@+.............+++$$$@+............++@#$$@++.........++@+++@+@++++.......................",
+"..+@#####$$$##@@@++.+.++@@#########@@++....+@@@$$@@@@@++.....++#####@@@#@$$$@+.....+@@@$$@@@@#@@@+....++@####@@@##$$#@@.....++@@#$$$#@@+......++@@#$$@@@$$@@@++....+@@#$$@@@$$@@@+.......+@@@$$$@@+.......++@#@$$@@##@##@@.......++@$#$@++............++@$$$+++...........++@$$$+++........++.+.+.+++++.+.......................",
+"..++#####$$$@@@@++....++@@##########@+....++@@@$$#@#@@+++....++######@#@#$$$@++.....++@$$#@#####@++...+@@#####@@##$$$@@......+@@#$$$#@+++.....++@@@$$@@@$$@#@+....++@#@$$@@@$$##@++.....+++#####@++........@@##$$@#@@####++.......++$$$@@+.............+@@##@+............++@$#$@+..............................................",
+".++@###@@@+@@@+++.......++++@@@@@###+++...++@#@$$@#@@@@++....++######@#@#$$$@+.....++@@$$@@###@#@+....++@#@##@#@##$$#@@......++@@$$$#@++......++@@@$$@@@$$@@@+....+@@@#$$@@@$$@#@++....++@+@###@@++.......++#@#$$@##@####++.......++$$#@++.............++##@@+............+@@$$#@+..............................................",
+".++@###@@@@+++...........+++@@@@####@+....++$$$$$###$$@++.....@@@##@$$$$$@@@+++.....+++@@$$###@@++.....+++@##$$$#@$$$@@.......+@@#@#@@+........+@@@#@@@@@#@@@+....++$$###@@@#$$$$++...+++@@#@###++........++@#@$$$$$$$#@@++......++@#$$@@++............++@#@++...........+++@$$$++..............................................",
+".++@####@@+@+.+.........+.+++@@@@###@++...++#$#$$####$+++.....+@@@#@$#$#$@@@+........++@@$$$@@@@++.....++++#@$#$@##$#@@.......+++##@@++.........++@@@++@@@@++.....++#$$##@@@$#$#$++...++$$$$$$$$++........++@@##$#$#$##@@+.........+@@@@@++.............+++++............+@@@@@@++..............................................",
+".+@@$$$$$#@@+..............+@@#$$$$$@@+...++++@+@+@+@+++......+++@+@+@@@++++..........++++++@+++.........+++@+@+@+@+++.........++++++............+++++++++++......+++++++++++++@++....++$#$$$$$$@++........++++@+@@@+@+@++.........+++@#@+++............+.++.............++#@+@+................................................",
+"++@@$$$$$@@@.+.............+@@@$$$$$#@+....+++++++++++.........+.+++++++++.............+++++++.+...........+++++++++++..........+++.+.............+.+..............+++++++++++++++.....+@@@@@@@@+...........+++++++++++............+++++++.................................+++++................................................",
+".+@@@@@@@@@++..............++@@@@@@@@++.......+...+.......................................+...................+.+.+.+.................................................................++@@@@@@@+++..............+..+........................................................+...................................................",
+"..++@@@@@@++................+++@@@@@+++.................................................................................................................................................@@@@@@@+................................................................................................................................",
+"................................................................................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................................................................................",
+"..................................................+.+.............................................................................+.................+++++++.....................................................................................................................................................................",
+".................................................+++++..............++++++..............................+++++.+.+++++...........+++++.............++++@@+@+++...............................++++.+...............+.+............................................................................++++.+..........................",
+"................................................++#@#++...........+++@@@@++...........................++@@@@@+++@@@@++.........++#@#++...........++@@$#$$$@#@+...........................++++@@@+++............++@+@++.......................................................................++++@@@+++...........+++++++.......",
+"...#############...............................+++###+++.........++@@@@@@@++..........................++@@@@@+@+@@@@@++........+@@##++..........++@#@$$#$$@#@++........++.++++..........+++@@@@@@@+++.........+++@@@@++.....................................................................+++@@@@@@@+++........++++@@++++.....",
+"..##$$$$$#$$$$$##.............................++@@$$$@@++.......+++#$$#$$$@@+.......++++.+.+.++++.....+@$$$$$@@@$$$$$@+........+@$$$++..........+@@$$@#@#####++.....+++@@+++@#+.......++@@@$$$$#$$@@@+.......++@@@@@$$++..................................................................++@@@$$$$#$$@@@+.......+@##$#$$@++....",
+"..##$$$$$$$$$$$$#............................+++@@$$$@@@++......++@$$$$$$$@++......+++@++++++++@++...++@$$$$$@@@$$$$$@+.......++@#$$@++........++@@$$#@@#@###++.....++@@@+++#@++.......+@@@$#$$$$$#@@++......++###@##$++...................................................................+@@@$#$$$$$#@@++.....++#@$$$$#@@+....",
+"..##$$$$$$$$$$$##............................++@@@$$$@@@++......+@@#$$$#$$@@+......+@@@@@@@@@@@@++....+@$$$$$@@@$$$$$@+........+@$$$++.........+@@@$$@#@#@###++.....+++@@+++#@+......+++@#@$$$$#$$@@@++......++@#@#@$$++.................................................................+++@#@$$$$#$$@@@++.....++@#$#$$#@++....",
+"..#$$$%%%$$$$$$$#...........+.++............+@@@$$$$$$$@@+.....+@@@$$@@@@@+++.....++@#@$$#$#$$#@#++..+++@@#$$@@@$$@@@++.......+++$$$@++.......++@@@$$@#@@@@@@++.....+++@+++++@+.......+@$$$#@$$$##$$$@+.....+@@#####$$@++..........+.+.+.+++........+++++++++++++.........................+@$$$$#$$$##$$$@+......+@@@@@@@+++....",
+"..##$$$$$$$$$$$##..........+@@@@@+.........++@@#$$$#$$$@@@.....++@@$#@@+@++++.....+@@##$$$$$$$#@#++...++@@#$$@@@$$#@@++........+@#$$+++.......++@##$$#@#@@@@@+.......++++++++++.....+++@#$$##$$$@#$$#@+.....++@@###@$#@++........+++++++++++++....+++@@@@@@@@@++++......................+++@#$$$$$$$@#$$#@+......++@@@@@@+++....",
+"..#$$$%%%$$$$$$$#..........++@@@@+.........++###@@@@@##@@++...++@@@##@+@+++.......++#@###@@@####@++....+@@@$$@#@$$@@@+........++@$$$@+.......++@#$$@#$$$##@@@+..............+........+#@###$$@@@##@#@#@.....@@@##@@@$$@++........+@@@##@@###@@+....@##$#$$#$#$$$$++......................+@#@#@$$@@@$$@#@#@........+++++++......",
+"..#$$$%%%$$$$$$$#.........+.@+@@@++........++####@@@@@#@@+.....+@@###@@+++........++###@##@@#####++.....++@$$@#@$$@+++.........++$$$++.......++@$$$#@$$$##@@@++.....................++@@##@$$##@####@#@....++@@##@#@$$@++......++@@##@#@@##@@@...++@$$$$$$$$$$$#$@+.....+++++++++++.....++@#@#@$$##@$$##@#@.....................",
+"..##$$$$$$$$$$$$#.........++@@#@@+........+++####@@+@#@+@++...+@@@@##@@@+++......++@@####@#@####@@+....+++@$$#@##$@@+.........++@#$$@++......++@#$$@#$$$##@@@++.....................++#@###$$@#@##@#@#@.....@@@##@@@$$@@++....+++@#@###@@###@@+...++$#$#$$$$#$$$$@+....++++@@@@@@@+++....@@@#@#$$@#@$$@#@#@.....................",
+"..#$$$$$$$$$$$$$#..........+#@@##++........+@@##@@@@+@@++.....+@$$$$$$#$@@........++###@#@@@@@###++.....+++##$$$##+@+..........++@@@++.......++@$$$##@#@##$$$@+.....................++#####$$@@@@@#@##@....++@@#######@@+.....+@@@$$@@@#####+++....+@@@@@@@@@@$$#@@...+@@##$#$#$#$$$++..++###@@$$#####@#@##.....................",
+"..##$$$$$%$$$$$##.........++@##@@@+.......++@####@@+@@+@++....++$$$$$$$#@@+.......++###@@@@@#@###@+.....++@@#$$$##@++..........+@@@@@+........++$$$##@#@##$$$@+.....................++@##@#$$@@@#@#@@##.....++@#####@#@@++...++@@@$$@@@#####@+....+++@@@@@@@@@$$$@+...+@@@$$$$$$$$#$++...@@@#@#$$#####@#@#@.....................",
+"..#$$$$$$$$$$$$##........+++#@###++........++@####@@@#@@++....++@@@$$@#@@++.......++@#####@@####@++.....++@##$$$@#@@+..........+@###++.......+++@@@##$$$##$$#@+.....................++@@$$$$$$$$$$###@@....+@@@#$$$$$$@@+....+@$$$##@#@$$@@@++......+.++++@@@@$$#@+...+@@@@@@@@@@@@@+...++@@###$$@@######@@.....................",
+"..#$$$$$$$$$$$$##.........++#@###++........++##@###@@##@@++...+@@@@$$#@@@++......++@#####@@###@##@+.....++@@#$$$##+@+..........++###@++........++@@##$$$##$$#@+......................+@@#$$#$$$$$$###@@.....+@@$#$$$#$@@++...++$$$@#@#@$$@@@@+.......+..+.++++$$$@@....++@@@@@@@@@@@++...+@@###$$#@@#####@@.....................",
+"..#$$$$$$$$$$$$##........++@$$$$$@++.......++@####@@@#@@@+....++@@#$$@#@@++++.....++@#####@#####@++....+++@##$$$@#@++..........++##@@+........+.++@@@@@@$$###++.....................++@@$$$$$$#$$$###@@.....++@$$$#$$#@@+....++$$$#@#@#$$@@@++.............+++#$#@+...++++@@@@@@@@++....++@@###$$@#@#####@@.....................",
+"..#$$$$$$$$$$$$##.........++$$$$$@+.........++@+##%$$##@++....+@@#@$$@@@@@@@++...+++#@##$$$$$$#@#++.....++@@@$$$@@@@++........++@$$$++.........+++@+@@#@$$###++.......................+@@######@####@++.....+++@@@#@@@+++....++@@@$$@@@#####@++.............++@@@++.....++.++++.+.++.....++@@#@$$#@#$$###++.....................",
+"..##$$$$$$$$$$$$#........++@#$$$$@++........+++@##$$$##+++....++@@#$$@@@@@@@+++...++@##$$#$#$$#@#++....+++@@#$$$@@@++.........+++$$$@++.......++@@#@@@@@$$@@@++.......................++@#@##########++.....+++@@@@@@@++.....++@@@$$#@######++..............+.@+@++...........+.+.........++###$$@@@$$#@#++.....................",
+"..#$$$$$$%%%%%$##.........+@$$$$$+++.........++++@$$$@@++.....+@$$$$$$$$$#$$$@+....+@@@@@@@@+@@@++.....++@@$$$%$$$@@+.........++@$$$@+........++#@#@@@@@$$@@@++.......................++@@@@@$#$#@@+@+.......+.++++++++.......++@@#@###@@###@@+................+...........................+++@@#$$$#@@@++......................",
+"+.##$$$$$$$$$$$$#.........+@$$$$$@++...........++@$$$+++.....++@$$$$$$#$$$$$$++....+++++++++++@@++.....++@@#$$$$$$@@+..........++$#$@++........@@##@@@@@$$@@@+.........................+++@#@$$$@#@+++...........++............+++@#@#@@@###@@+............................................++@@@@$$$@#@@++......................",
+"+.#$$$$$$$$$$$$##........+++$$$$$@+............++@#$$@++......+@$$$$$$$$$$#$$@+.....++++++.+.++++.......++@$$$$$$#@@++........++@$$$++........++###$$$$$$$@++...........................+++@@$#$@@+++...........................++@@#@#@+#@#@++.............................................+++#@#$$@@+++.......................",
+"..##$$$$$$$$$$$#..........++$$$$$+++............++@@+++.......++@@@@@@@@@@@@++.......++.................+++@@@@@@@+++..........++$$$@+........++@##$$$#$#$+@+............................++++@+@+@+..............................++++@+++@++++...............................................+.+@++@@++.........................",
+"...############..........+++@#@#@@+..............++@@+.........+@@@@@@@@@@@+@++.........................+++@@@@@@@++..........+++$$$+++.......++@@@@@@@@@@++...............................+++++++................................+++.+++++++..................................................++++.++..........................",
+"..........................++@@#@@++..............................+++++++@+++..............................+++++++++............++@@@+..........++@@@#@@@+++.......................................................................................................................................+.............................",
+"..........................++@@@#@+................+................+++++.....................................++.................++@+++..........++@@@@@@++......................................................................................................................................................................",
+"...........................++@++++..............................................................................................++@+...............++++.+.......................................................................................................................................................................",
+"....................................................................................................................................................................................................................................................+.+.................+.+................++++.................................",
+"................................................................................................................................+.++++++...........................................................................................................+++++...............+++++..............++++++++..............................",
+".......++@++++................................++@+@++.............++@+@++.....................................................++@+@@@+@@++..................................................++++.................................................++@@@@@+............++@@@@@+............+@@##@#+++.............................",
+".......++@@@++................................++@@@@++............++@@@@++..................................................+++@@@@@@@@@@+.................................................+++@++................+.+..............................@@###@@+............@@###@@+..........++@#@###@@++............................",
+".....+++@@@@@+++.............................++@@@@@@++..........++@@@@@@++...............+++..............................+++@@@@@@@@@@@+................................................++@@@@++............++++++++..........................++@@#@#@++..........++@@#@#@++.....+++..+@@##@##@@@+...+++......................",
+".....++##@@@##++............++@++...........++@#@@@##@++........++@#@@@##@++............+++@@@+...........................++@#@$$$%$$$$$$@+..............................................++@@$$$++............+@@#@#@@+...........................@@$$$@@+......+++...@@$$$@@++...+++@@.+@@@@#@#@@@+++++@@@..........++++.......",
+"...+.++###@###+++..........++@@++...........++##@#@##@@+........++##@#@##@@+...........++@@@@@+...........................+@@##$$$$$$$$$#@+..............................................+@@#$$$++..........+++@@#@#@@@+........................+++@$#$@@+...++++++.+++@$#$@@++.++@@@@@.+@@#@#@##@@+++++@@+..........+@##+......",
+"....@@@##@@@##@@+.........+++$$$+++..........+@@@@@#@@++.........+@@@#@$$+@+...........++#@#@++..........................+@@$$$@@$$$##@@@++...............................................++@$$$@++.........++@##@@@##@++........................++@###@@++...@@@#@..++@###@@+++++@@#@@.++@@@#$$@@@+@@@@#@@.........++#@@++.....",
+"....+@@##@@@##@@@.........++@$$$@++.........++@@@#@##@++........++@@#@@$$@++...........++###@++........+++......+++......++@$$$@@$$$##@@@++...............................................++@$$$@+.........++@@##@@@##@@+........................++@###@@+++++@@@#@..++@###@@+++@@###@@.++@@#@$$@@@@@@@@##+.........++@@@+......",
+"...++@@##@@@##@@+.......+++@+$$$@@+++........+@@@@@##@++.........+@@@#@$#@@++.........++@@#@++........+++++++.+++++++.....@@$$$#@$$$###@@+...............................................++++$$#@++........++@@##@@@##@@@+.......+.+..+...........+@###@@@+++@@@@#@...++###@@@++@@@##@@.++@@@#$$#@@@@@#@#@+.........++@@@++.....",
+"....++@##@@@##@++......+@@@@@$$$@@@@@........+@@###@@@++........++@@@#@##@@+...........++@@@++.......+@@###+@+++$$@#@+...++@$%$@#$$$##@@@+...........+.+..................................++@$$$@++........++@@##@@@##@@+.....+@+@++++@++++......++@###@@@++@@###@+..+@@###@@@@@@#@@@@+.+@@@@@#@###@@###@++.........+@@@@++.....",
+"....++@@#@#@#@@++.....++@@@@@$$$@@@@@++.....++@@###@@++.........++@@#@###@@++.........+.+++++........+@@#@#@@+++#$@#@++...@@$$$#@$$$##@@@++........++++++.................................+@+$$$@++.........@@@##@@@##@@@+....+@@@+@@@@@@+++.....+++###@@@@@@@##@@+..+++###@@@@@####@@+.+@@#@#@##@#@@##@@++........+++###@+.....",
+"......+@@@@@@@+++.....++$$$$$$$$$$$$$++.....++####@##@++........++$$@@###@@+.............++..........+@@$$$@@+@@@####++..++@###$$$$$##@@@+........++@#@#+.................................+@@$$$@@+.........+@@###@@##@++....++@###@@@@$$@@++....+@######@@###@#@@+..+@###############@.+@@#####@#@##@#@@++........+@+###++.....",
+".....+++@@@@@++.......+@#$$$$$$$$$$$#@+.....++@#@@##@@@+........+@#$#@@##@@++........................+@@#$$@@+++#@###@+...++@#@$$$$$##@@@+........+@@###++................................+@@$$$@@+........+++@##@#@##@@+....++#####@@@$$@@@+...++@@#######@###@#+@.++@@####@#####@##@#.++@######@#####@@@........++@@$$$@++....",
+".......++@@@++........++$#$$$$$$$$#$$++.....++####@#@@++.........+#$@@@##+@+.........................+@@$$#@@@+@@####++...++@##$$$$$###@@+........+@@#@#++................................+@@$$$@@+.........++@##@#@##@++....++@####@#@$$@@@@+..++@@####@######@#+@.++@##############@#.++@@###@#@###@#@@+......+++@@#$#$++.....",
+".........+.............++@+@@$$$@@@++++......+@@@@@@@++.........++@@@@@@@++...........................++###@@+++@@###@+....+++@@@$$$##@@@+.........@@$$#@+...............................++@@@@@@@++........+@+#@###@@@++.....+@@@$$###@@$$$@++..++@+@@@@###@@$$$@+..+++@@@#@#@#@#@@@$$..++@+@@@$$$#@$$$@@+.....++@@#@$$$+++....",
+".......................++++@@$$$@@+@+........++@@@@@@++..........++@@@@@+++..........................++@###@@@+@@@##@@+....+.++@@$$$##@@@+........++@#$$++................................+@@@@@@++.........++@@#@##@#@++.....++@@$$@####$$$@@...+.++@@@@####@$$$@+...+++@@#@##@#@@@@$$...+++@@@$$##@$$$+++.....+@@###@@@++.....",
+".........................+++@###@+++..........+++++++...............+++++.............................+@###@@+@+@@###@+.....+++@@$$$##@@@+.........++@+++...................................++.+++.........++@@$$$$$$$@@++...+.@+@###@#@@$$$@@+...++@+@##@@@#@$$$@@..+++@@@##@@@@@###@@....++@###@@#@$$$@@+....++#####@@@+++....",
+"........................++++@###@+++............++....................................................++#####@@@##$$#@+......+++@$$$##@@@+...........+.+................+++++................+.............++@@$$$$$$#@@+.....+@@@#####@@$$$@@+.....@+@####@#@$$$+@...+@@@@#@@@@@@###@@...+++@##@#@#@$$$@++....++@####@@@+++....",
+".......................+.+@+@###@@+++................................................................++@#####@#@#@$$$@+.......+@+$$$##@@@++............................++@#@++..............................+@+$#$$$$$@+@.....++@@######@$$$@@+....++@@##@@@#@$$$@+...+@@#@##+++@@###@@..++++@###@@#@$$$@@+...++@###@@@@@#@+@+..",
+".......................++@@@@@@@@@@++.................................................................++#####@@###$$$@+......+++@$$$###@@+............................++@@#@@+...............................+++@+++++@+.....++@####@@@$$@@@++....++@##@###@##$$$@@...+@###@@+@+@#@#@@@...+#@#@@##@##$$$@@+....++###@@@@+#@@@+..",
+"........................@@@@@@#@@@@@@+...............................................................+++###$$$$$###$$@@.....+++@@$$$##@#@++...........................+@@$$$@@+...............................++++@+++.......++#####@@@$$#@@+++...++#@##@@#@#@$$$@@..++@###+@++@##@#@@@..++@@##@@@@#@$$$@@+....++@####@@@##@@@+.",
+"......................++@@@@#@@#@@@@+++..............................................................++@@##$$$$###$#$@@.....++@@@$$$###@#++...........................+@@$$$@@+.................................+.++.+.......++@####@@@$$@@@+.....++@#@@@#@#@#$$$@@..++@@##+@+++##@#@@@..++#@#@@#@@#@$$$@@+....+@@####@@@##@@+..",
+".....................+.@#$$$$$$$$$#$$++...............................................................+@###@@@@@@+@@+++.....+@@$$$$$$$$$$@+..........................++@@$$$@@+..............................................++@@@@@@@@@@@++.......+@@@@+@+@@@$$$@@...++@++++++@#$#@#$$...+@@@@+++@@@#$$@@+....++@#@##@#@##@@@+.",
+"......................++$$$#$$#$$$$#$++..............................................................++@###@@@+++..++++....++@@$$$$$$$$#$+@..........................++@@$$$@@+..............................................++@@@++@+@+@+++.......++@+++++++@#$$@@...++++++.++@#$@#@#$...+++++++++@@$#$@@+.....++@@$$$$$$#@++..",
+".......................+++@@+@@@+@+@++................................................................++###@@+......+.......++@$#$$#$#$$$++...........................+#@$$$@@++.................................................+++.+.++.............+.....+++++++....+.+..+..+@+++@++.....++++...+++++++......++++$#$$#$$+++..",
+"........................++++++++++++.+.................................................................@@##@+++.............++++@+@@@@+++++...........................+@@@@@++...............................................................................+++++..............++++++..............++++.+.......++++++@+++++...",
+"...........................+...+.+....................................................................++@@@++.................+++++++++++..............................+@@@@+++...................................................................................................+................................+++++++++....",
+".......................................................................................................+@+@++........................+.................................++@@@+.......................................................................................................................................+.+++.......",
+"........+.......................+................+++........................................................+++++....................................................+@@+++..................++@@++...........++@@@++...................................+........................+..............+++++...........................",
+"....+++@@+...................+++@@+...........+++@@@+..............+++++++................................++@@@@++...................................................+@@@@++................++@@@+++..........++@@@+++..............................+++@@+....................++@@++..........+++#@@@+..........................",
+"....++@@@+++................++@@@@+...........++@@@@++...........++@@+@+++.................................@@#@#++..............+.+.+.+...............+.+...........++@@@@+++..............+++@@#@++.........++@@#@@+++..........++++++++...........++@@@+++.................++@@@+++.........++@##@@++.........................",
+"....++@@#+++...............++@@@@@+...........++@@#@++..........+++@@@@@@@+...........+++.+.+............++@@@#@@++...........+++@+@+@+@++........+++@+@+++++.......++@@###@++............++@@#@@++.........++@@#####++.........++@@+++@@+@+........++@@#@+++...............+++@@#@++........++@+###@@+...........+.+.+.+.+.....",
+".....+@@@#@@+.............++@@##@@+..........++#####@@+........++@@$#$$$#@++........+++@@+++@@+..........++@#@@@@@...........+@@@@@@@@@@@@+.....+++@+@@@@@@+@+......++@@##@@+++.........++++@#@##+++.......+++@@#####@++.......+++##@@@@@@@++........+@@@@@@++.............++@@#@@++.........++##@@#@#++........+@+@@+++@@+++...",
+"....++@@#@#@++...........+++@###@++........+++@#####@@+........+@@@$$$$###++........+@@@@@+@@@+.........+++@#@#@@@..........+++@@@@@@@@@@@+....+++@@@@@@@@@@@++...++@@@@@@#@@@@+.......++@@@@##@@@@++.....++@@@#@@@#@@@@+.....++@@@@@@@#@@@@+.......++@@##@@@+............+++@@#@#+++.......+++####@##@++.......+@+@@@+@@@@@+...",
+"...++@@@@#@#++..........++@@@@@@@+.........++@@@@@@@@@+........+@@@@@@##@@++.......+@+@#@@@@@@++.......++@@@@##@@++.........++$#$$$$$$$$$$+...+@@@#$$$$$$$$##@+...++@@@#@#@#@@@@+....++@+@@@##@@@@@@......+@@@##@#@#@@@@+.....+@@@##@#@#@@@@++.....++@@@@##@@+@++.......+++@@###@@@++......++@@@@@@@#@@@++.....+@@@#@@@@#@@@@+..",
+"....+@@@@##@@+..........++@@#@#@@++........+@@@##@#@@@+........+@@#@##@#@@++.......++@@#@@@@@@+.........+@@#@#@#@+..........++$$$$$$$$$$$$@..++@@@$$#$$$$$$$@#+..++@@@@@#@@#@@@@++....+@@@#@###@@@@@@+...++@@@#@#@@##@@@++....+@@@#@#@@##@@@++......+@@@@##@@@@++.......+@+@@#@#@@@@+......+@@@##@@@#@@@@......++@@#@@@@#@@@@+..",
+"...+@@@#@@#@@++........++@@#@#@@@++........+@@@#@#@@@@++......++@#@#@##@@@+........+@@@###@@@@+........+@@@#@##@@++.........++@#$$$#@@@@##+..++$$$@@@@+@+@####+..++$$$$$$$$$$$$$@+...++$$$$$$$$$$$$$@+...+@$$$$$$$$$$$$$@+..+++$$$$$$$$$$$$$@++....+@@@@@###@@@@++.....++@@@@###@@@@++.....+@@@@#@#@##@@@++...++@@#@##@@##@@@+..",
+"...+@@#$$$$$@@+........+@@#$$$$$@@+........+@##$$$$$@@+.......++@##$$$$$@@++.......+@@#$$$$$@@++.......+@@#$$$$$@@+........++@@#$$$@#@@@##@..+@#$$#@@++@@@#@#@+..+@$$$$$$$$$$$$$@++.++@$$$$$$$$$$$$$@++.+++$$$$$$$$$$%$$@@+..++$$$$$$$$$$$$$@+.....+@##$$$$$$$@#@+.....+@##$$$$$$$@#@+.....+@##$$$$$$$#@@+.....+@##$$$$$$$#@@+..",
+"...+#@#$$%$$@@++......++#@#$$%$$@@++......++@@#$$$$%@@++......++@@#$$$%$@@+.......++@#@$$$$$@@+.......++#@#$$$$$@@++........+@@#$$$#@@@@#@+.++@$#$@@@+++@@#@#@+..++@@@##@@@@@$$$@++...+@@@##@@@@@$$$@++..++@@@##@@@@@$$$@+..+++@@@##@@@@@$$$@@....++@@@$$$$$$$#@@+....++@@@$$$$$$$#@@+....++#@@$$$$$$$##@+....++@@@$$$$$$$##@++.",
+"....+@@@#$$$#@++........+@@@#$$$#@++.......+@+@@#$$$@#++.......+@@@@#$$$#@@+.......++@@##$$$#@@+........+@@@#$$$#@++.......+++$$########@@+..+@$$$@@++.+++@@@@+..++@@###@@@@@$$$+@...++@@@##@@@@@$$#@+...++@@@##@@@@@$$#@++..++@@@##@@@@@$$#@++....++@@@@$$$@@@+++.....++@@@@$$$@@@@++......+@@@@$$$@++@++.....++@@@@$$$@++@++..",
+"...+++@##$$$@#++.......++++#@$$$@#++........++@#@$$$#@++........++@#@$$$@#++........++@@#$$$@#++.......+++@##$$$@#++.......++@#$###@##@#@@+.++@$$$@+++..+++++++..++@@@##@@@#@#@@@++...+@@@##@@@##@@@+++...+@@@##@@@##@@@++....+@@@##@@@##@@@+++......++@@$$$+@+++.......++++@$$$@++.+......+.++@@$$$@@+++........+++@$$$@@++....",
+"....+++@#$$$##++........+@@@#$$$#@@+........++@@#$$$##++........++@@#$$$#@@+.......+++@@#$$$#@@+........++@@#$$$#@@+.......++@$$@######@@++.++@$$$@@+....+++++....+@@###@@@##@@@+.....+@@@##@@@@#@#@++...++@@@##@@@##@@@++....+@@@##@@@@#@@@+.........++@$$$@+++.........+++@$$$@+++..........++@$$$+@+..........+++@$$$+@++....",
+".....@@$$@@@$$@++........+@$$@@@$$@++.......++@$$@@@$$@++........+@$$@@@$$@++.......+@@$$#@@$$@++.......++@$$@@@$$+++.....+@@@#####$$$$$@+..++@#$#@++......+......+@@@##@@@###@@++...++@@@##@@@##@@@+.....+@@@##@@@##@@@+.....+@@@##@@@##@@@++.......++++$$$@++...........+++$$$@@+..........++++$$$@+++..........+++$$$@++.....",
+"...+@@@$$@@@$$@@@++...++@@@$$@@@$$@@@++...++@@@$$@@@$$@@@++....+@@@$$@@@$$@@@++...++@@@$$@@@$$@@@++....+@@@$$@@@$$@@@++....@@@###@#$$$$$@++.+@@$$$@++.............+@@@$$###$$@@++.....+@@@$$###$$@@++.....+@@@$$###$$@+++.....+@@@$$###$$@++.........+.++$#$@+.............+@$$$@+............+++$$$@++............+@#$$@+......",
+".+++###$$###$$##@++...++###$$###$$#@#++...++###$$###$$##@++...++###$$###$$#@#++...++###$$###$$#@#++...++###$$###$$##@++..++@#@$$$$$@#@@@@++..@@#$$@+++++++++.+....+@@@$$@##$$@++++....+@@#$$@#@$$@++++....+@@@$$@#@$$@+++.....+@@@$$@#@$$@@+++........++@$$$+++...........+++$$$@++...........++@$$$+++...........++@$$$@++.....",
+"..++@@#$$###$$###++...++#@#$$###$$##@++...++@@#$$###$$###++...++@##$$###$$##@++..+.@@@#$$###$$##@++..+++@##$$###$$###++.+++#@#$$$$$#@#@@++..+++$$$@@@++++@@@@@....+@@@$$#@@$$@@@++....+@@@$$#@#$$@@@++....+@@@$$@#@$$@@@++....+@@@$$##@$$@@+++.........@+$$$@++...........++@$#$@++...........++@#$$@++...........++@$#$@++.....",
+".++@###$$###$$#@#@+..+++###$$###$$###@+..++@###$$###$$#@#@+..++@#@#$$###$$###@+..++@###$$###$$###@+...+@#@#$$###$$#@#@+..++###$$$$$##@#@@++..++$#$#@@@@@@@@@@@+...+@@@$$@##$$@@@@++...+@@@$$#@#$$@@@@++...+@@@$$##@$$@@@@++...+@@@$$@#@$$@@@+++......+++@$$$@++...........++@$$$@++...........++@$$$@++...........++@$$$@++.....",
+".++@$$$##@#@##$$$@+..++@$$$##@@@##$$$@+..++@$$$##@@#@#$$$@+..++@$$$###@@##$$$@+..++@$$$##@@@##$$$@+..++@$$$###@@@#$$$@+.+@@#$$@@##@#@@@@@#+.+++@#@$$#####$$$@@+..++@@@##@@@@@@@@@@+..++@@@##@@@@@@@@#@+..++@@@##@@@@@@@@#@+..++@@@##@@@@@@@@#@+......++@@#$$@@++........+++@@$$$@@++.........++@+$$$@@++.........++@+$$$@@++....",
+".+@@$$$##@#@##$$$@@..+@@$$$####@#@$$$@+..+@@$$$@##@###$$$@+..+@@$$$#@#@@#@$$$@+..+@+$$$@###@#@$$$@+.++@@$$$#@#####$$$@+.++@$$$@@####@@@@#@+..++@@@$$#####$$#@@+..+@@@@##@@@#@##@##+..++@@@##@@@#@#@@#@+..+@@@###@@@#@#@@#@+..+@@@@##@@@####@##+....++++@@$$$+@+++.......+++@@#$$+@+++......++++@@$$$+@+++......++++@@$$$+@+++...",
+"++@@$$$##@@@##$$$@@.++@@$$$##@@@##$$$@@.++@@$$$##@@@##$$$#@.++@@$$$##@#@##$$$@@.++@@$$$##@@@##$$$@@..+@@$$$##@@@##$$$#@.+@@$$$##$$$$$###$$@...+@@@$$#####$$$@++..++$$$$$#####$$$#@+.++@$$$$$#####$$$##+.+++$$$$$#####$$$##+.+++$$$$$#####$$$#@+.....@@@##$$$###@@+.....+@@@##$$$###@@+.....+@@@##$$$###@@+.....+@@@##$$$###@@+..",
+"++@@$$$##@@@##$$$#@..+@@$$$##@@@##$$$#@.++@@$$$##@@@##$$$@@..+@@$$$##@@@##$$$#@.++@#$$$##@@@##$$$#@.++@#$$$##@@@##$$$@@.+@#$$$@@$$$$$###$$+....++@@@$$$@@@@+++..++@$$$$$#####$$$##+..+@$$$$$#####$$$@#+..+@#$#$$#####$$$@#+..+@$$$$$#####$$$#@@...++@@###$$$##@@@+.....+@@###$$$##@@@+.....+@@###$$$##@@@+.....+@@###$$$##@@@+..",
+".+#@$$$##@@@##$$$@@.++#@$$$##@@@##$$$@@..+#@$$$##@@@##$$$#@.++#@$$$##@@@##$$$@@.++@@$$$##@@@##$$$@@.++@@$$$##@@@##$$$#@.+@@$$$##$$$$$###$$@......+@@####@++......++$#$$$#####$$$@@+..++$#$$$#####$$$#@+.+++$$$$$#####$$$#@+.+++$#$$$#####$#$#@+....+@@@##$$$###@@++....+@@@##$$$###@@++....+@@@##$$$###@@++....+@@@##$$$###@@++.",
+".+@@@@@@#@@+@@@@@@@..+@@@@@@@@@@@@@#@@@..+@@@#@@@@@+@@@@@@@.++@@@@@@@@@@@@@#@@@..+@@@@@@@@@@@@@#@@@..+@@@@@@@@@+@@@@@@@.+@@@@@@@@@@@#@#@@@+......+@@###@#++......++@@@@#@@@@@@@@@@+...+@@@@#@@#@@@@@@@+..++@@@#@#@#@@@@@@@+..++@@@#@@@@@@@@@@@+....+@@@@@#@#@@@@@+....++@@@@#@#@@@@@@+....++@@@@@#@@@@@@@+.....+@@@@@#@@@@@@@+..",
+"..+@@@@@@++@@@@@@@+...+@@@@@@@++@@@@@@+...+@@@@@@++@@@@@@++...+@@@@@@+++@@@@@@+..++@@@@@@@++@@@@@@+.+.+@@@@@@++@@@@@@++.++@@@@@@@@@@@#@@@@+.....++@##$$@++........+@@@#@@#@#@@@@@++..++@@@@@@@@@@@@@@++...+@@@@@@@@#@@@@@++...+@@@@#@#@@#@@@@++....++@@@@@@@@@@@+.......+@@@@@@@@@@@+.......+@@@@@@#@@@@+......++@@@@@@#@@@@+...",
+"...++@++++++++@++++....+++@++++++++++++....+++++++++++@++++....++@+++++++++++++....++@+++++++++++++....+++@+++++++@++++...+++++++@++++@++++......+@@$#$@++........+++++++++++@+++.+...+++@+@+@+@+@+++......+++@+@++++@+++.....+++++++++++++++........+++@+++@+++.........++++@+@+++++........+++@++++++++........+++@++++++++...",
+".............+.+.........+.......+++.........++++....+.++.......+.+++....+++........+.++.....+++.........+.......+.++.......++.+++++++.++.........++@++++............++++++++.+..........++.+++.++..........++++.+.+++..........+++++++++++............+.+++...............++.++++.............+.+++++.............+.+++++......",
+"..................................................................................................................................................+.+++.........................................................................................................................................................................",
+"........................++@@###@@@@@+.........+++......................++...............++++................+.+.+.........................................................................+++......................++...............++++.....................................+++++..............................................",
+".......................+++#@#@##@#@@+........++++++..................+++++............+++@+++.............++++++++++.....................................................................++++++..................+++++............+++@+++...................................+++#@++.............................................",
+".......................+@@#####$$@@@+........+@@@@@+................+++#@++...........++#@#@@+...........+@@@##@@@@@.....................................................................+@@@@@+................+++#@++...........++#@#@@+.................................++@@##+++...............................++++++.......",
+"....++++++++++........+@@@@####$$@@@++.......+@##@@++..............++@@##+++.........++@###@@++.........++@@###@@@@@+........++++++++....................................................+@##@@++..............++@@##+++........+++@###@@++..........+++.++++.............++@@@##@++........+++++..................++@@@++......",
+".++++@@@@+@+++++.....++@@@#####$$@@@++......++@@#@#++.............++@@@#@@+.........+++@####@++.........+@@@#@##@#@@+........++++++@+++.................................................+@@@@#@@++............++@@@@#@++.........+@@####@+++.........++++++@++++........++++#@#@@+++.....++++++++++..............++@@@@@++++....",
+"..@@#@#@#####@@+++...++@###@@@@#@###@@+.....++@+###@@.............++#@#@@@+.........++@#@@@##@@+.......++@#####$$@@++.......++#@@@+@#@@+...................................+.+++........++@@###@++...........+++@##@@@++.......+++@#@@@##@@++......+++##+@+@#@@+.......++++@###@@@@++....++@####@@@+............+++#@$$$##++....",
+".+@@##########@@@++..+@#####@@@@####@@+......++@##@@@++..........+++###@@+++........+@@#@#@#@@@+......++@@@####$$@@++.......++##@@@#@@@++........+.........+............++++++++.......+++@@#@#@@++++......++++@###@@@+++......++@##@#@#@@@@+......++@##@@@#@@@@++...++++@@@###@@@++++...++#####@@@++...........++@##$$$##+++...",
+"+.@@$$$@#@@@#@$$$@+.+++$$$$$@@@@@$$$@@+.....+++@@##@@+++.........+@@###@@@++.......+++##@@@##@@@.......+@@#####$$@@++......++@@#@@@##@@@........@@@++...+.@@++.......++++@+@@@@@+....+++@@@@###@@@++++....+++@@@###@@@@+++....++@@@#@@@##@@@++...+++@+##@@@##@@@++..+@@@#@##@@@#####@@+...@@@#$$#@@@+++.........+@@$$@@@$$@@@...",
+".+@@$$$##@#@##$#$@+..++$#$$$@@@#@$$$@@+....++@@@#####@@++......+++@@#####+@++......++@@######@@+++....+++@@@####@@@@++.....++@#@#####@@@++....++@@@+++.+++@@@+.....+++@@#####$#$++....+#@#@#@@@@####@@+..++#####@@@#@###@@+..++@####@@@#@###@@+...+@####@@@@@###@@+.+@@#####@@@#####@@...++#@#$$@#@@@+++.......+@@@$$@@@$$@@@...",
+".++@$$$@##@#@#$$$@@.++@$$$$$@@@#@$$$@@+...+++@@#####@@@+++....++@@@@#####@@+++....+++@@@#####@@@++....+@@@#@#####@@+++...++++@@@#####@@@++.....+@@@@+++++@@@@++...++@@@@#####$$#@+..+++#####@@@@####@@...++#####@@@@####@@...+@#####@@@@####@@+.++@#####+@@#####@@+.+@@$$$@#@@@##$$$@@+.+.+#@#$$#@#@@@++++....+.@@@#$@@@$$@@@+..",
+".++@###@@@@@@@###@@..+@@#######@@$$$@++...+@#@$$@@@##$$$@+....+@@#$$#@@#@$$$@+...++@####@#@#@$$$@+...++@@####@@#@$$$@+....+@#####@@#@$$$@++...++$$$##@@@@#$$#++...+@@@$$@@@#$$$$@++..++$$$#@@+@@@$$$@@+..+@#$##@+@@@@$$$@@+.+++$$$@#+@@@@$$$@@+..++$#$#@@++@@$$$@@+.+@@$$$##@@@@#$$$@@+..++@@@$$$$$$$###+++....++@@##@@@$$@@@+..",
+"++++####@@@@+@####@..+@########@@$$$@@+.+++@##$$##@#@$$$@++.+++#@@$$@#@##$$$@++..+@@#####@@##$$$@++..+@##@##@#@##$$$@++.+++#@###@#@##$$$+++...++#$##@@@@###$$+..+++##@$$###$$$$$@++.+++$$##@@+@@@$$$@@+..+@$$$##++@@@$$$@@+..++$$$##++@@@$$$@@+..++$$$@#@@+@@$$$@@+.+@@%$$#@@@@##$$$@@+...+@@@$$$$$$$###@@+....+@@@###@@$$@@@+..",
+".+@@$$$$$@@@@@@@@##..+@###@@$$$@@$$#@@+..+@#@@$$@@@#@$$$@@+..+@@##$$#@@#@$#$@@+..+@@####@#@#@$#$@@+..++@####@@@#@$#$@@+..+@@#####@@@@$$$@@+...++@@@$$###$$@@@+...++@##$$@@@$$$$$@@+..++$$$##+@+@@$$$@@+..+@#$$#@@++@@$$$@@+.++@#$$@@@@+@@$$$@@+.++@$$$#@++@@@$$$@@+..++####@@@@@####+++...+@@@##@@@@@@#@#@+....+@@###$$$$$@@@+..",
+"++@@$$$$$#@@+@#@##@.+++###@##$$@@$$$@++.++@$$$@@@@@@@###@@+..+@$$$@@@@+@@###@@+.++@$$$@@@@+@@###@@+.++@$$$@@@@@@@###@@+.++@$$$@@@@@@@###@@+....++@@$$###$$@@+++.++@$$$@@@#@#@###@@+.++@@##@@++++@#$$@@+..+@###@@@+++@$#$@++..+@###@@++++@$$$@++..++###@@@++@@$$$@++.+++@#@##@@@#@##@@+...++@@@##@@+@@#@###+...++@@@##$$$$$#@@++.",
+"++@@$$$$$@@@@+@@@##..++####@$$$@@$$$@++..+@$$$@@++++@@##@#+.+@+$$$@@++++@###@#+.++@$$$@@++++@###@#+.++@$$$#@++++@###@#+.++@$$$@@++++@@##@#+....+++@$$###$$@++....@+$$$@#@@@######@+..+@###@@@+++@$$$@++.+++###@@+++@+$$$@@+.+++###@@++++@#$$@@+.++@@##@@+++++$$$@@+..++@@@$$@@@$$@@@++....+@@###@@@+@##@#@+....+@@@##$$$$$@@@++.",
+".+@@$$$@#@@@+@#@##@.++@###@@###@@$#$@++.++@$$#@++..++@#@##@.+@+$$$@+++.+@@#@#@+..@+$$$@++..+@@#@##@.++@$$$@+++.+@@#@#@+.+@@$$$@++.+++@#@##@.....+@+#@$$$@@@@++..+@@#$$@@@##@@@#@@#+.+++###@@+++++$#$@++.++@###@@++++@#$$@@+.+++###@@++++@$#$@++.+++###@@+++@+$$#@@+...+++@$$@#@$$@@++....++@@@##@@@@@#@###+....+@@@##@@@@@$$$@+.",
+"++@@$$$#@@@@++@@@##..++####@###@@$$$@++.+@@$$$@+++.+@@@##@+.+@@$#$@++..++@@###+.+@@#$$@+++.++@@#@#+.++@$#$@++..++@@###+.++@$$#@++..+@@@#@#+....++@@@#$$$##+++...++@$$$@@###@@@#@##+.++@@##@@++++@$$#@++..++###@@++++@$$$@++..++###@@++++@$$$@++..++###@@++.+@$$$@++...++@@#$@#@$$+++......+@@@##@+@@@@#@#@+....+@@@##@@@##$$$@+.",
+".+++###@@@++@@@###@.++@###@#@@###$$#@@+.++@$$$@@++++@@#@#@@..+@$$$@@+++++####@@..+@$$$@@++++@@###@+.++@$$$@@+++++####@@.++@$$$@@++++@@###@+....++@@$$###$$@@@+..++@$$$##@@@@@####@@..+@###@@+++++$$$@@..++@###@@++++@#$#@@..++@###@@++++@#$$@@+.++@###@@++@++$#$@+.....+++##$$$@@@++......+@@@$$#####$$$@@+....+@@@##@@@@@$$#@+.",
+".+@@###@@@+++@@#@#@..++###@@#@@##$$$@++..+@#$$@+++++@####@+.++@$$$@@+++@+#@#@@+.++@$$#@@++++@##@##+.++@$$$@++++@+#@#@@+.++@$$$@@++++@##@##+....+@@@$$#@#$$@@@+..++@$$$###@#@@###@@+..++###@@++@@+$$$@+...++###@@++@+@$$$@+...++###@@++@+@$$#@++..++###@@+++@@$$$@++.....++@#$$%#@@+.......+@@@$$###@#$$$@@+....+@@@##@+@+@$$$@+.",
+"..++####@@@@@@@#@#@.++@###@@@#@##$$$@++.++@$$$@@@+++@#@#@#+.++@#$$@@@+@+@#####+.+++$$$@@@++@+###@@+.+++$$$@@@+@+@#####+.++@#$$@@@++@@@##@@+...++@@@$$@#@$$@@@++.++@#$$##@@@@@@####+.+++###@@@@+@@$#$+@+..++###@@@@+@@$$$+@+..++###@@@@+@+$$$@@...++###@@@@+@+$$#@@......++@@$$$@@++......++@@@$$#####$$$@@+...++@@@##@@@@@#$$@@.",
+".+@@$$$@@@@+@@$$$@@.+++$$$#@@@@##$$$@++.+++@####@@@@@$$$@@+..+@###@#@@@@@$$$@++.+++@##@#@@@@@$$$@@+.+++@####@@@@@$$$@++.+++##@##@@@@@$$$@@+...+@$$$@#@@@@#$$$+..++@###$$@#@@#$$$@++..++@@###@@@@@$$$+++..++@@##@@@@@@$#$@+...++@@###@@@@@$$#@+...++@@###@@@@@$$$++......++@@$$$@@++......++@#@$$@#@#@@@@+++...+@@#@##@@@@#$$#@+.",
+".++@#$$#@@@@#@$$$@+.++@$$$@#@@@##$$$@@+..++#@#@#@@@@@$$$@++..++@####@@@@@$$$+@+..++#@###@@@@@$$$@++..++#@#@#@@@@@$$#@@+..++@####@@@@@$$$@++...++$#$@@++@@@$#$++..++###$$@@@@@$$$+@+...@@#@#@@@@@@$$#@+...++@#@##@@@@@$$#+++..++@#@@#@@@@@$$$+++...@@@@#@@@@@@$#$@++....++@@@$$$@@@++.....+@@@#$$###@@@+++.....++@@#####@#@$$$@@.",
+".+@#$$$$$$$$$$@@@++..+@#$$$$@@@@@$$$@++..+++@@##$$$$$@@@++...++@@@##$$$$$@@@+++..++@@@##$$$$$@@@@+...+++@@##$$$$$@@@+++..+++@@@#$$$$$@@@@+....++@@@+++++++@@++...++@####$$$$$@@@++....++@@$$$$$$$@#@@+....++@@$$$$$$$#@#++....++@@$$$$$$$@@#++....+@@@$$$$$$$#@@@......+@@$$$$$$$@++.....+@$$$$$@@#@+++.......@@$$$$$@#@$$$$#@+.",
+"++@@$$$$$$$$$$#@@++.++@$$$$$@@@#@$#$@+.....@+@@#$$$$$@@@++.....++@@#$$$$$#@@+......++@@#$$$$$@@@++.....@+@@#$$$$$@@@+.....+++@##$$$$$#@@++......+@++++..++++@.+.++@@@###$$$$$#@@++.....++@$$$$$$$#@@++....+++@#$$$$$$@#@++....+++@$$$$$$$#@@++.....++@$$$$$$$@#@++.....++@#$$$$$$@@++...++@$$$$$#@@+++.......+++$$$$$#@@$$$$$++.",
+".+@@$$$$$$$$$$@@@+...++$$$$$+++@@$$$++.....++@@#$$$$$@@@.......++@@#$$$#$@@@+......++@@#$$$$$@@+.+.....++@@#$$$$$@@@+.....++++@#$$$#$@@@+.......++++....+++++.....+#@###$$$$#@@@+......+++#$$#$$$@#@+......++@$#$$$$$@@@+......+++#$$$$$$@#@+......+++#$$$$$$@@@++....++@@$$$#$$$@@+....+++$$$$$@#@++.........+@$$#$$@@@$$##$++.",
+".+@+++++++@+@+@++....+++++++@+++@+++++......+++++++++++.+.......++++++@+@++++.......++++++++++++........+++++++++++.........++++++@@++++.........................++@@@+@@+@+@@++.......+.@+++@@+@+++........+++@+@++@@++.......+++++++++@+++........+@+++@+@+@@+.......+++++@@++++++......+++++@++++.........+.+++@++@@@+@@+++..",
+"..++++@+++++++++.+....+++++++.+.++++.........++++++@+.+..........+.++++++++...........+++++++............++++++++++..........++++++++++...........................+@@@+++++++++.+........+++++++++++.........+++++++++++........+++++@++++++.........+++++++++...........++++++++.........++++++++.............+++++++.++++++...",
+".....+.++++.+...........++........+............+++................+.+.+.................++++................++++................+..+...............................+.++++.+................++.+.+................++.................+.+.+................+.+...............+..++.............+.+..................++............",
+"................................................................................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................................................................................",
+".......+..........................................+........................................................+++++.......................................................+.........................+................+....................................+.........................+...............+..............................",
+".....++@@+...................+++@@..............+@+@+...............++.+...................................+@@@@+....................................................++@@+.....................+@@++.............@@@+................................++@@+.....................+@@++...........+@+@+............................",
+"....+++@@+++................++@+@@+...........+++@@@+............++++++++++...............................+@@@#@++..................................................+++@@+++.................+++@@+++..........++@@@++..............................+++@@+++.................+++@@+++........+++@@@+............................",
+".....++@@@++...............+++@@@@+...........++@@@@++...........++@@@@@@++............+.+..+.............+@@#@#++...................................................++@@@++.................++@@@@+..........+++@@@+++.............+...+............++@@@++.................+++@@@+.........++@@@@++.............+.+..+........",
+"....++@@@@@@+..............++#@#@@+..........++@####@@+........++@@$$#$##@@+........+++@@+++@@+...........+@@@@@@@..................................................+++@#@@@+...............+@@@#@++..........+@@####@++........++@@@+++@@++........+++@#@@@+..............++@@@#@++........++@####@@..........+++@@+++@@.......",
+".....++##@#@++............++@###@++..........+@#####@@+.........@@@$$$$$##+++.......++@@@+@+@@+..........++@#@@@@@+..................................................+@@#@#@++.............++@@@#@@+.........++@@###@#++........+++@@+++@@+++........++#@#@@++.............++@@@#@++........+@#####@@+.........++@@@@++@@+......",
+".....++@@#@#++...........++@@@@@@++........+++@@@@@@@@++......++@@@@@##@@@++.......+++@@@@@@@@++.........+@@@##@@+.........++++++.++++++...........++++++++++........++@@#@#@++..........+++@@##@@++.........++@#@@#@@@++.......+@+@@@@@@@@++........++@@#@@++............++@@##@+++.......++@@@@@@@@+........+++@@@@@@@@+......",
+"....+++@@##@@++.........+++@@@#@@+++........++@##@@@#@++.......+@@#@@@##@@@+.......++@@#@@@@@@+........++++#@#@#@+++.......+++@++@++++@+++.......++++@@@@+@+++......+++@@##@@@++.........++@@##@@@@++.......++@#@#@@#@@@++.....+++@#@@@@@@@@++......+++@@@##++...........++@@#@@@++.......+++@@##@@@@+.........++@@@@@@@@++.....",
+"...++@@@@@##@+++.......++@@@#@#@@@+........+@@@@@@#@#@@+......++@@#@####@@++.......+@+@@#@@@@@@+.......++@+@###@@++......++@@@@@@@@@@@@@++.....+++@@@@@@@@@@+++...+.+@@@@###@@@+++.....++++@@@##@@@+++.....+++@@#@@@#@@@++.....+@@@@#@@@#@@@++.......++@@#@@@+...........++@@##@@+.........++@@@@#@@@+........++@@@#@@@@@.......",
+"...+@@@$$$$$##++.......+@@@$$$$$##++.......+@@#$$$$$##+++.....++#@#$$$$$##@++.....++@@#$$$$$##+++......+@@#$$$$$##@+.....++$$$$$@##$$$$$@@+...++@@@#$$$$$$$$$@+....+@@@$$$$$$$@@@+....++@#@$$$$$$$@@@+....++@#@$$$$$$$@#@++...++@@@$$$$$$$@#@++.....+@@$$$$$++..........++@$$$$$@++........@@@$$$$$@++.........+@@$$$$$@++......",
+"...+@##$$$$$##@++......+@##$$$$$##@++.....++@##$$$$$##@++.....++@#@$$$$$##@++......+#@#$$$$$##@++......+@#@$$$$$##+@.....++$$$$$####$$$$#@+...+@@##$$$$$$$$$$@+..+++@#@$$$$$$$#@@@+...++@@#$$$$$$$##@@+...++@@#$$$$$$$#@#++...+@@##$$$$$$$@#@@+.....+@@$$$$$@++.........+@@#$$$$@++........+@@$$$$$@++........++@@$$$$$@++......",
+"..++@@@@@@@@$$@@@.....+@@@@@@@@@$$@@@.....++@@@@@@@@$$@@++....++@@#@@@@@$$@@@.....++@@@#@#@@$$@@++....+@@@#@@@@@$$@@@+..+++@@@@@$$$@@@@@$$@...+@$$$@@@+@@@$$$@@...+@$$$@@@@@#@$$$@+...+@$$$@@@@@@@$$$@+..++@$$$##@@@@#$$$@+...+@$$$@#@@@##$$$@+......++@@$$$@+...........++@@$$$@+........+.+@@@$$$@+...........++@@$$$@++......",
+"..++@##@#@@@$$@@@......+@##@#@@@$#@@@.....++@##@#@@@$$@@@.....++@@@@#@@@$$@@@.....++@#@@@@@@$$@@@......+@@#@#@@@$$@@+....+@@####$$$@#@@@$$@..+++$$$@@++@@@$$$+@..+++$$$##@@@#@$$$@+..++@$$$#@@@@#@$$#@+...+@$$$@#@@@#@$$$++..++@$$$@#@@@@#$$#@+......+++@$$$@++..........+++@$$#@++..........+@@$$$@++..........++@@$$$++.......",
+"..+@@@#@@@@@$$@@@+....+@@@@@@@@@$$@@@+....+@@@#@@@@@$$@@@+....++@@#@@@@@$$@@@+....+@@@#@@#@@$$@@@+....+@@@#@@@@@$$@@@+..++@@@@@@$$$@@@@@$$@..+@@$#$@@+++@@@#@++..++@$$$#@@@@##$$$@@..++@$$$@#@@@#@$$$@@..+++$$$@#@@@@#$$$@@..+++$$$##@@@#@$$$@@.......+@+$$$++............+@+$$$@+...........+++$$#@+............+++$$$@++......",
+"..++@#@$$$$$$$@@@+....++###$$$$$$$@@@+....++@#@$$$$$$$@@@+....+@@#@$$$$$$$@@@+....++#@#$$$$$$$@@@+....++#@#$$$$$$$@@@+..++@###$$$$$#####$$+..++@$$$@+@++++@@@++..++@$$$#####@#$$$++..++@$$$#######$$$@+..+@@$$$#######$$$@+..+@@$$$#######$$$@+.......++@$$$@++...........++@$$$@++..........++@$$$@++...........+@+$$$@++......",
+".++@@##$$$$$$$@@@+....+@@@#$$$$$%$@@@+....+@@##$$$$$$$@@@+....++@##$$$$$$$@@@+....+@#@#$$$$$%$@@@+...++@#@#$$$$$$$@@@++.+@@###$$$$$#####$$@..++@$$$@@++++@@@@++..++@$$$##@####$$$@@..++@$$$#######$$$@@...+@$$$#######$$$@@..++@$$$@######$$$@+.......++@#$$@++...........+++$#$@++..........+@+$$$@++...........++@$#$@++......",
+".++@$$$@@@@@##@@@+...++@$$$@@@@@##@@@+...++@$$$@#@@@###@@+...++@$$$@@@@@##@@@+...++@$$$@@@@@##@@@+....+@$$$@@@@@###@@+..+@####@@$$$##@#@#@@...+@$$$@@@++@+@@+@+..++@$$$###@@#@#@#@+..+@@$$$##@#@@##@#++..++@$$$##@#@@@##@@+..++@$$$##@@@#@##@@+.......++@$$$@++...........+@@$$$+++..........++@$$#@++...........++@$$$+++......",
+".++@$$$#@@@@##@@@++..++@$$$@#@@@##@@@++..++@$$$@@@@@##@@@++..++@$$$@#@@@##@@@++...+@$$$@@@@@###@@++..++@$$$@#@@@##@@@+..+##@##@@$$$####@##+...++###$$#####$$$@@..++@$$$##@##@###@@@..++@$$$##@###@##@@@...@@$$$@##@##@#@#@+..++@$$$#####@##@#@@......++@+$$$@+++.........+++@$$$@@++.......+++@+$$$@@++........++++@$$$@@++.....",
+".++@$$$@@@@@###@@++..++@$$$@@@@@###@@++..++@$$$@@@@@##@@@++..++@$$$@@@@@###@@++..++@$$$@#@@@##@@@++..++@$$$@@@@@##@@@@..+@####@@$$$#@@##@#+...++@@#$$@#@##$#$#@..++@$$$###@##@##@@+..++@$$$###@@#@##@@+...+@$$%##@###@##@@+..++@$$$##@#@#@##@@+....++++@@$$$@@+++......+++@+@$$$@@+++......+++@@$$$@+@++.......++@@+$$$@@+++....",
+".+++$$$#####$$###@+..++@$$$#####$$###@+...@+$$$#####%$###@+..++@$$$#####$$###@+...@+$$$#####$$###@+...@+$$$#####$$###@+.+#@$$$$$$$$$$###$$+....+@+@@#$$$@#@#@++...+@###$$#####$$$@+...+@###$$#####$$$@+..+++###$$#@#$$$$$@+...++###$$#####$$$@+.....@@@#@$$$#@#@@+......@@@#@$$$##@@@+....+@@@#@$$$##@@@+.....+@@@@#$$$##@@@+...",
+".++@$$$#####$$###++..++@$$$#####$$###++...+@$$$#####$$###++..++@$$$#####%$###++..++@$$$#####$$###++...+@$$$#####%$###++.+@##$$$$$$$$$#@#$$+......++@@$$$#@#@@+....++@##$$##@##$$$@+...++###$$#####$$$@+...++@@#$$###$$$$$@+..+++###$$#####$$$@+...++@@###$$$##@@@+....++@@###$$$@##@@+....+@@###$$$##@@@+.....+@@###$$$@##@@+...",
+"..++@@@#@####@#@@++...++@@@#@###@@#@@++..+++@@@#@##@#@#@@@+...++@@@#@##@@@#@@@+...++@@@@#@###@#@@@+..+++@@@#@##@@@#@@@+.+@@#@#@#@@@@#@#@@++......++@@###@#@+++.....+@+@@@@@##@@@@++....+++@@@@#@#@@@@++....++@@@@#@@#@@@+++....+++@@@@@@#@@@@++....+@@@@#@#@#@#@@++....+@@@#@#@#@#@@@++...+@@@@#@#@@#@@@++....+@@@#@#@#@#@@@++..",
+"..++@@@#@#@@@@#@#++...++@@@@#@@#@@#@@++...++@@@#@@#@@@#@@++....+@@@#@#@#@@@#@++...++@@@#@#@@@@#@@++...++@@@#@#@#@@#@@++..++@@#@#@@@@#@#@@++......+++@####@+++.......+++@##@@#@@+++.....+++@@#@@#@#@+++.....++++@@#@@#@@@++......+++@###@#@@+++......@@@#@#@#@@@@@.......@@@#@#@#@#@@@......@@@#@###@#@@@.......@@@@##@#@#@@@....",
+"...+@@@@@@@#@@@@@+.....+@@@@@@#@@@@@@+.....+@@@@#@@@@@@@@+....++@@@@@@#@@@@@@+.....+@@@@@@#@@@@@@+.....+@@@@@@#@@@@@@+...+@@@@@@@+@@@@@@++........+@@$$$@@+..........++@@@@@@@@++........++@@#@@@@+@+........++@@@#@@@+++......+.++@@@@@@@+@+......++@@@#@@@#@@@@+......++@@#@#@@@@@@+....++@@@@@@@@@@@@+......+@@@@@#@@@@@@+...",
+"....+++@+@++@+@+.+......+++@+++@+++@++......+++++@+@+++++.......+++@++++@++++.......+++@++++@++++.......++++@++++++++.....+++@++++++++++.........++@@$$$@++............+++@+@++++.........++++@+++++..........++++++@+++...........++++@++++.........++++@@++@++........+++++++@++++........++@+@+@+@++.........++@+++@++++.....",
+"......+.+.++.+..+........+.++++.+++...........+++.++++++..........+.++++++............+.++++.++...........++.+++++++........+.+....++++...........+@++++++..............+++.+..............+.+.+++...............++++................+++++.............++..+++.............+++++++.............+++.++..............++++++.......",
+"...................................................................................................................................................++++++.......................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................................................................................",
+".......+.+......................................................................................................................................................................................................................................................................................................................",
+"...+++++++++@++..............+.+........................................................+++++................+.+...................................................................................................++................+.+.................................................++@@++++...............................",
+"..+++@@@@@@@+@+++..........++++++++...........+++++...................+++++............++@@+++..............++++++++......................................................................+++++..................++++++............++++++.....................................+++++......++$$$#@++..............................",
+".+@@$#$$$@##$$@@@+......+++@@@@@@@++........+++#@+++.................++@#$++.........++@@$$$@@...........+++@#@#@@@@+...................................................................+++#@+++................+@@@@@+...........+@@#@#++...................................++@#$+++...++@$$$##++..............................",
+".+@@$$$$$##@$$#@@+.......+@@#@#@@@+++.......++@@#@@++...............+++@$#@++.........++@$$$@@++..........+@@##@@@@@@+...............................+..................................++@##@@++...............+@@@##++.........+.@@###+++.................................+++@$#@++....+@$$$##@++.............................",
+".+@@$$$$$###$$@#@+.....+++@@#@#@##+++.......++@##@++++.............++@@@$#@+.........++@@$$#@@++........+++@@###@@@@++.......++++++++++............++++++...............................++@@#@+@++...........++++@@#@@++........+++@@###@+++........+++++++++++...........+++@@@$$+++....++@@@##@@+++............+++++++++++....",
+"++@@@@@##$$$##@@+++...++@#@##$$$#@@+.........++@@###++............+++@##@@+++.......++@##@@@##@++.......++@@####$$@+@.......++@#@@+@@@+@+..........+@@#@+................++++++++......+++@@@##@++++.........++@@###@@@++......++@@##@@@@#++.......++@@@@+@+$$+++........++++#@#@@@@++...++@@@##@++++++........++++$$@++#@@@@+..",
+".+@@#@###$$$##@@++....++@#@##$$$##++.........++@@###@++...........+@@###@@++........++@##@@@##@++.......++@#####$$@@+......++@+#@@@@##@@+.........+@@@#@@+............++++++@++++++..+++@+@@@###@++++....++++++@@###@@++++...+++@@@#######+@+....++@@@@##+@@#$@+++....+++++@+###@@@@+++..++@#@#######@+@......+++@+$#@@@@#@@@++.",
+".+@@###@@@@@$$@#@++..+@@###@@##@#@@++.......++@#@####@++.........++@#@####@++.......@+@@#####@@++.......+@+#@####@@+++......+@@@##@#@@@+++........+@@$$$++...........++@#@##@@##@@@...@@@##@@@@@##@@@+....@@#@#@@+@@@##@@+....@@@@#@@@@@##@@@+....@@#@#@@@@@##@@@+...+@@#@#@@@@@#@#@#@@..++@@@##@#@#@@@@.+....@@#@##@@+@#@#@#@@.",
+".++@###@@@@@$$##@@...+@@###@@####@@++.......++@@##@#@#@++......+++@@###@#@@++.....+++@@######@@+++.....+++@#@#@##@@++.....+++@@#@#####@++........++@@$$$@++........+++@@##@###@##@@..+@@##@@@@+@@##@@++..+@@##@@@@+@##@@@++..+@@###@@@@@@##@@@...+@@###@@+@+###@@++..+@@###@@@+@@@##@@@...+@@@###@###@@@++..++@@##@#@@@+#@###@@.",
+"..@+###@#@@@$$#@#++.++@@###@@##@##@@++....+++@@#@####@@@++.....++@@#@###@#@@++.....+@@@#@#@###@@++.....++@@#######@@@+.....+@@@######@@@+++.....+++@@$$$+++........++@@@####@##@#@@.++@@###@@+@@##@#@++.++@@###@@+@@@###@++.++@@#@#@@+@@####@++..+@@@#@@@@@@##@#@++..+@@@###@+@@#@###@@...+@@@$$#####$$$@++..+@@###@#+@@@####@@.",
+"..++#@#$$$$$$$$$$@+..+@@$$$$$###$##@@+....++@##$$#@#$$###++...++@##$$@##$$##@++...++@##$$##@$$##@++...++#@#$$@#@$$##@@...+++@##$$@#@$$###++.....++@@@@@@@++++.....++#@#$$@##$$###@+..+@@$$$@@+@+#####++..+@@$$$@@@+@#####++..+@@$$$@@@+@@####++..+@@$$$@@+++#####++..+@@$$$@#@+@@#$$$@@...+@@#$$#####$$$@@+..+@@$$$@#+@@@@$$$@@.",
+".++@@##$$$$$$$$$$@+..+@@$$$$$@#@$$##@++...+@###$$@#@$$###++...+@###$$#@@$$###++...+@###$$#@#$$###@+...++###$$@#@$$###++...+@####$###$$###++...+++@@@@@@@@@@+++....++###$$@#@$$###@+..+@@$$$@@++@@####@+...@@$$$@@++@@####@+..+@@$$$@@@+@#####@+.++@@$$$@@@@@@####@+.++@@$$$#@+@@#@$$$@@...+@@@$%###@#$$$@@+...@@$$$#@@@@#@$$$@@.",
+".++@@@#$$$$$$$$$$@+..+@@$$$#$###$$@##++..+++###$$@#@$$###++..+++###$###@$$###@+..+++####$@#@$$###++..+++###$$#@#$$###@+...++###$$@@#$####++...++@@@@@@@@@+@@++...+++###$$#@#$$###@+..+@@$#$@@@+@@####++.++@@#$$@@@+@@####++..+@@$$$@@+++@####++..+@@$$$@@++@@####++..+@@$$$##@@+#@$$$@@...+@@@$$@@@@@####@+..+@@#$$@#@+@#@$$#@@.",
+"..+@$$$@#@@@@@$$$@+..+++####@@@@@@###++...+@$$$@@@@@@@$$$@+...+@$$$@@@@@@@$$$@+...+@$$$@@@@@@@$$$@+..++@$$$@@@@+@@$$$@+..++@$$$@@@@@@@$$$@+..+@@$$$$$$$$$$$$$++..++@$$$@@@#@##$$$@+..++@###@@++@@@###@+...+@###@@++@@@###@+..+++###@@+@@@@###@+..++@###@@@+@@@###@+...+@@@@##@@@##@#@++...+@@@$#@@@@@####@@...+@@@###@@@##@#@@+.",
+".++@$$$@@@@@@@$$$@+..++@####@@+@@@###++..++@$$$@@@+@@@$#$@@..++@$$$@@+++@@$#$@+..++@$$$@@@++@@$$$@@..++@$$$@@+@+@@$#$@+..++@$$$@@@+@@@$$$@@..+@@$$$$$$$$$$$$$++..++@$$$@@#@###$$$@+...+@###@@@+@@@###++..++@###@@@++@@##@@+..++@###@@+++@@##@@+..++@###@@++@@@###++...++@#@##@@@###@#++...+@@@##@@++@@@@##+...++#@@##@@@###@@++.",
+"..@@$$$@@@+@+@$#$@+...++###@@+@@@@###@+...@@#$$@+++++@$$$@@...@@#$$@+@+@+@$$$@@..+@@#$$@++@++@$#$@+..++@$#$@+@+@+@$$$@@..+@@#$$@+++++@$#$@+...++@+@@@@@@@@+@@+...+@@$$$#@###@@$$$@@..++@###@@+@+@@###@+...++###@@++@@@###@+..+++###@@@+@@@###@+...++###@@@++@@###@+...++@@@$$@@@$$@@++....+@@@$$@#@@@$$$@@+....+@@@$$@@@$$@@@+..",
+".++@$$$@+@+@+@$$$@+..++@###@@@+@@@###++..++@$$$@@++@@@$$#@+..++@$$#@@++@+@$$#@+..++@$$$@@++@+@$$$@+..++@$$$@+++@+@$$#@+..++@$$$@@+@+@@$$$@+...+.+++@@@@@@+++++...++@#$$@####@@$#$@+...++###@@@+@@@##@@+...+@###@@@+@@@###++..+++###@@@++@@###++...+@###@@+@+@@##@@+....+++@$$@@@$$@@+.....+@@@$$#@#@@$$$@@+....+++@$$@#@$$@@+...",
+"..@+$#$@@@+@@@$$$@@.+.++####@++@@@###@+..++@$#$@@@+@++$$$@@...@+$$$@+@@+@@$$$@@..++@$$#@@@+@@@$$#@@..++@#$$@@@+@@+$$$@@..++@$#$@+@+@+@$$#@@....+++@+@@@+@++.......@@$$$@@###@@$$$@+...+@####@+@@#@###@+..+++####@+@@@@###@+...++###@@@@@@@###@+..+++###@@@@@@@###@+.....++@@#$$$#@@++.....+@@@$$$$$$$#@#++......++@##$$$##+++...",
+"..+@$$$@#@@@@##$#@+..+@@###@@@@@@@###@+..++@$$$@@@@@#@$$#@+..++@$$$#@@@@@##$$++..++@#$$@#@@@@@$$$++..++@$$##@@@@@#$$#@+..++@$$$#@@@@@##$$++......++@@$$$+++.......+@$$$$$@@@##$$#@+...++###@#@@@@####@+...++####@@@@#@###@+..+++####@@@@#@###@+...++####@@@@#@###@+.....++@@@$$$@@++.....++@@@##@@@@@+@++........++@#$$$#@@+....",
+".++@#$$#@@@@##$$$@+..++@###@@@@@#@###@+...+@#$$##@@@##$$$++...++$#$##@@@##$$$++...+@$$$#@@@@##$$$@+..+++$$$##@@@#@$$$++...++$#$##@@@##$$$@+.......+@@$$$@+.......+@+$$$$$@@@#@$$$++...++####@@@@#@###@+...+@@##@#@@@#####@+....@@####@@@#####@+...++@####@@@#####@+......+@@#$$$@@+......+@@@@##@@@@++++.+......++@@@$$$@@+.....",
+"..++@@@$$$$$$$@@@@..++@#$$$$$@@@$$$$$#@...++@@@$$$$$$$@@@++..+++@@@$$$$$$$@@@++...++@@@$$$$$$$@@@++...++@@@$$$$$$$@@@++...++@@@$$$$$$$@@@++......++@@@#@++........+@###$$$$$$$@@@++....++@@$$$$$$$$$$@@....+@@@$$$$$$$$$$#@....+@@@$$$$$$$$$$#@...++@@@$$$$$$$$$$@@.....+++#@###@++......++###$$##@@++.........+++@@####@++.....",
+"..++@#@$$$$$$$#@@++.++@#$$$$$@@@$$$$$#@...++@#@$$$$$$$@@@++...++@#@$$$$$$$@@@++...++@#@$$$$$$$@@@++...++@#@$$$$$$$#@@++...+@@@@$$$$$$$#@@++.......++@@@@++.......+++###$$$$$$$#@@++...+++@@$$$$$$$$$$#@....++@@$$$$$$$$$$#@.....+++$$$$$$$$$$#@.....+++$$$$$$$$$$#@....+#@#$$$$$@++.....++@###$$#@@@.+.........+@##$$$$$++......",
+"...+@@@$$$$$$#@@@+...+@#$$$%$@@@$$$$$@@...++@@@$$$$$$$@@@+....++@@@$$$$$$$@@@+.....+@@@$$$$$$$@@@+....++@@@$$$$$$$@@@+.....+@@@$$$$$$#@@@+........++@@@@++.......++@###$$$$$$$@@@+.....+++@$$$$$$$$$$#@.....++@$$$$$#$$$$@@.....+@+$$$$$#$$$$@@....++@+$$$$$#$$$$#@...++@##$$$$#@+.......++###$$##@++.........++@##$$$$#@+......",
+"..+.++++++@+@+@++...+++++@+@+++++@@@@@+.....+++++@+@++@++.......++++++@+@+@++.......++@+@+@+@+@++.......+++++@@@+++++.......++++@+@@@+@++...........++++..........@@#@#@@@@@++@++........+++@+@++@@@@++......++++@+@@+@@@@+......++++@+@@+@@@@+......++++@+@@@@@@++...++#@#$$#$$++......+++@#@#@@#@++.........++#@#$$$$$+++.....",
+".....++++++++++.+....+++++++++++++++++.......++++++++++.+........++++++++++.+.........+++++++++.+........+++++++++++........+++++++++++.+............+............+@@#@@+++++++.+.........+++++++++++++.......++++++++++++........++++++++++++........+++++++++++++...++@#@#@#@@++.......++@@#@#@@@+..........++@#@#@@@@++......",
+".......++++++..........+.+++.+.+...............+.++++..............++++.+................+++...............+..+.++..............+.+.+............................+++++++++.++................++++.++.............++.+++..............++++++..............++.+.++.......+@@@#@@@@++........+++++@+++............+@@#@@#@@+.......",
+"...................................................................................................................................................................++++..+.............................................................................................++@++@@+++..............................++++@++@++.......",
+"................................................................................................................................................................................................................................................................................................................................",
+"........................................................................................................+++++++++++++.....................................................................................................................................................................+++++.................................",
+".......................+...............................................................................++++@+++@++++++...........................+++++++++..............++++............................................................................................................++++++++................................",
+"......................@+@@+......................................+..+.+.+.............................++#$$@##@#@#$$$++.............++++.........+@@@@@@@@@+............+@@@+.............................................................................................+++....++.....+@#$$$@@++++++..........................",
+"....................++@@@@@+.................................++++++++++++++++........................++@$#$##@#####$$@+..........+++@@++.......++@@@@@@@@@@++..........++@@@@+.................+++++++..........+++.................................+++++...............++++++++++++....+@#$#$@@++++@+++........................",
+".........++.........++@@@@@++................................++++@@@@@@@@@@@+++......+++++............++$$$####@##$$#@+...........++@@+++.......+@@@@#@@@#@++.........++@##@+++................+++@@+++........++++++.............+.+.+.+.+........+++++++++++.+........++@@@@@++@@++...+#@$$$@@@@@@@+@++++.......+++.....++....",
+"......++@+@++.......@@$$$$$@++..............+++++++++.......+@@$$$$$$$$$$$$$$#+......@@@@@+..........++@$$$@#@#@#@$$$@@.........++@@$$@@+.......+@@####@@$$++.......++++@$$$@++++.............++$$$$$@@......++@@$$$++........++++++++++++@+++....++@##@#@@@+++++++....++@@#@@@@@$$+++..+@#$$$#@@@@$$#@#@@@....+++@@+.+++@@@.+..",
+"......++@@@@@+......++$#$$$@@+.......+.....++++@@@@@++++....+@@$$$$#$$$$$$#$$$+.....+@@@#@++.........++@#$$###@###$$$@+......+.++@@@$$@@++.....++@@@##@#@$$@++....++++@@@$$$@@@+++...........++@$$$$$#@....++++@@$#$@++......++++@@@@@@@@+@@@+...++@@##@#@@@@@@@@++...+++#####@@@$$@@+..@@@#$$####@$$##@#@@....+@@@@+++++@@@@+..",
+"......+@$$$@@+......++@@$$$@@++...+++@@..++@@@$$$$$##@@+....++@@@+@@###@@@@++++.....+@@#@#++.........++@###$$$$$@#$$$@@..++@+@+++@@@$$@@++.....+@@@###@@@$$+++...++@@#@@#$$$@#@#@@+..........++@#@#@#@+..++@+@@@@##@@+@++....+@#$$$$$$$$$$$#$++.++@#$$$$$$$$$$$$$$#...+@@@@@##@@@$$@+++.+@@@@@$$@@@#@$$$#@@....++@$$@+++@#$#@@+.",
+"......@+$$$@@++.....++@@$$$#@+++.++@+@@..++@@@$$$$$##@@@++..++++@@@@###@+@+@+++......@@@#@++........+++@####$$$$##$$$@@..+@@@@@@+@@@$$@@@+...+++@@@@##@@@$$@@++..+@@####@$$$###@#@@..........++@@###@@@...@@@@@@#@##@@++++..++@@$$$$$$$$$$$$$@+..+@#$$$$$$$$$$$$$$$...+@@###@#@@@$$@@@+..++@@@$$@#@@#$$$##@....++@$$@@@@@$$$@@+.",
+".....++@$$$@@@+......++@$$$@#+++.+@@@@@.++@@#@$$$$$##@@@+++.+++++@@@###@@++++......+.@@##@@.........+@+@###$$$#$##$$$@+.++@@@@@@@@@@$$@@@++..+++@@#@##@@@$$@@+@.++@@#####$$$@##@#@@.........++@@#@##@@+.++@@@@#@#@#@@@@@@++.++##$$$$$$$$$$$$$++.++@@$$$$$#$$$$$$$#$.+++@@@#@##@@@$$@@@+.++@@@@$$@@@#@$$$@#+....++@$$@@@+@$$$@@+.",
+"......++@@@$$++......++@@##@@++++@##$@@.+@@$$$@@###@####@@+.+@@@@@+@###@@@+++++.....+@@@#@++........++$$$$$##@####$$$@#.+.$$$$$$$$$$$$###++.@+@#####$$###$$@#@@.++@@$$$##$$$#####@@........++@@#$$$$$@+.++$$$$$$$$$$$$$$$@@..+@@$$$@@@@@@@$$$@+..++@@@@$$##@$$@@@@+.++@$$$$$$$$$$$$$$#@...@@##$$@@@@@$$$@@+....++@#$@@@@@###$$+.",
+"......++@#@$$+@.......+@###@@@+++@$$$@@.+@@$$$@@####@###@@+.+@@@@@@@###@@@@++++.....++@##@@+........@@#$$$$##@#@##$$$#@.++$#$$$$$$$$$$###++.+@@@####$$##@$$###@.++#@$$$@#$$$#@####@........++##@$$$$$@@.++$$$$$$$$%$$$$$#@@..++@$$$@+@+@@@$$#@+..+.+@@@#$###$$@++++.+@@$$$$$$$$$$$$$$$@.++@@@@$$@@@+@#$$@@+.....+@#$@#@@@####$+.",
+".....+++@@@$$@++......++@@#$$@@+@@#$$@+.+$$@@@@@@@@##@@@$$+.+#@#@##@$$$##@#@#@@.....+@@#@#++.........@@@#@#@##@#$$###@@..++@@@@$$@@@@@###@+.@@@#@###$$###$$@@##.+@@@$$$@@$$$@@#@@#@.........@@####@@@@+.+@@##@#@@$$$@@@@@++..+@@#$#@@++@@@$$$@+....+.++@@###@@+@++....++@#@#@#@@@$$@@@+.++@$$$$$@++@@#@#@@+....+++#@$$$##@@@@++.",
+"......++@@@$$@@+......+@@#@$#@@+@@$$#@+.+$$#@@@@@@###@@@$$+.+@@##@##$$$##@#@#@@.....++@#@#++........++@#@#@#@##@$$###@@..+++@@@$$@@@@@###@+.@@@###@#$####$$##@@.++#@$$$@@$$$@@@#@#@........++@######@@+.++#@#@#@@$$$##@@@+...++@$$$@++++@@$$$@+......++++####@@+......++@@#@##@@@$$@@@+.+@@$$$$$@@+++#@#@@@.....++@@$$$##@#@++..",
+"...+++++@+@$$@@++......+@@@$$@@@@@$#$++.+$$@#@+@@@@##@@@$$@.+@@@@#@#$$$####@#@@.....+@@@#@@++........@@@#@##@#@#$$###@@....++@@$$@@@@@###@+.@@@@@###$$@##$$@#@#..@@##$$@@$$$@@@#@#@........++#@###@#@@@.+@@#@#@@@$$$@@@@@++..+@@#$$+@+++@@$$$@+.......++@###@@+++.....+++#@###@@@$$@@@+.+@@$$$$$@+++@@###@+......@@@$$$##@@@++..",
+"..++@@@#@+@##@@@+......++@@$$@@@@@+@++..@$$@#@@+@@@$$@@@##@.++@@+@@@###@++@++++.....++@$$$++.........+@@$$$$$$$$$$###@+.....+++#####@@@@+#@.+++@@@@@##@@@$$@@@+.++@#$$$#@$$$#####@#........++@@@$$###@#.++@####@@####@@++....++@$$$+@+++@@$$#@@.......+++@###@++.......++@#@##@@@$$@@++.+@@#@#$#@@@+@@@@#@+....+++@@$$$##@++.+..",
+".++@@@#@@@+##@@@++......+++$$@#@@++++...@$$#@@@+++@$$@@@##@....++++@###@@++++++......@@#$$@++........++@$$$$$$$$$$#@#++......+@@#@#@@+@+@@@...+++@#@##@@@$$@@++..@@@$$$##$$$#####@@.........++@@$$####@..@@@###@@####@@++.....@@$#$@++++@@$$$@+........++@@#@#+++.....++@@#@##@#@$$@@++.+#@@#@$$@@@+@@#@##+.....++@@$$$##@@++...",
+"++@#$$@@@@@@@##@++......+++@@$$$@++++...+####@@+@+@####@##@.....+++@###+@+++........++@$$#@+..........++###@#@@@@@###++.......+@@$$$@@@++++....++@@@##@@@$$@@@+..+@@###@@$$$@@@#@@@........+++@+###$$##..+@@$$$@@##@##@++....++@$$#@@+@+@@$$$@+........++@@@##++.......++@#@#@@@@$$@@+...+@+@@@#@@@@@@#@#@@...++@@@#$$$$$+@+....",
+"++@$$$#@@@@@@###@++......++@@$$$@@++....+##@##+@++@@#@####@.......+@@##@+++.........+++$$$@++........++@####@@@@#@@#@++......++@@$$$@@++++......+@@@##@@@$$@@@+.++@@###@@$$$@@#@@@@.....++++++@@##$$$##.+++@$$$@@#####@+++....@+$$$@+@+@@@$$$@+.........++@@##@++......++#@####@@$$@@++...+++@##@#@@@#@@#@+..+++@@##$$$$$@@++...",
+"+@+$$#@@@@@@@##@@@+.......+@@#$$+@+++...+@##@#@@+@@##@#@##@.......+@###@+++..........+@$$$@@++........++###@#@@@@@##@++........+@$$$@@++.+......+@@###@@@#$@#@+..++@@##@@$$$@+@@@@+..+++++@@@@@@##$$###..++@#$$@@#@###@+++...+@@#$$@@@@@@@$$#@+.........++@@##@@++.....++@#@@@@@@$$@@+.....+++@#@#@@@@#@#@+.++@@@@##$$$$$@@@++..",
+"+##$$$$$#####$$$#@@........++#@@##@@++..+@@$$$#@@+@@@$$$$$@......+++####@@++........+++@###@++.........@@@#$$#@#@@++++........+++@@@#@@++......+.@@@##@+@#@$$$@...+++++@@$$$@@@+++...+@@#@@$#$$$#####@@...+@###$$@@@@@###++...+@$$$#@#####$$$@@..........+++@#@@@++.....@@@#####@$$@@++......+@@#####$$$@@+.+@@$$$$$@@@@@$$#@++.",
+"+##$%$$$#####$$$#@@........++@####@@+++.+++$#$##@@@@@$$$#$+.......++###@#@++.........++##@##@++.......++@#@$$##@@@+++...........+@@@##+++.......+@@@##@++@@$#$@...++++++@$#$+++......+@@##@$$$$$#####@@...++###$%@@##@#@#++..++@$$$#######$$$++...........+@@##@@@.....++@####@#@$$@++.......++@###@#$$#@++.+@#$$$$#@+@#@$$$@++.",
+"+$$#@@@@@@@#@#@#$$@.........++++@@$$$@+..+++@@@@$#$@@@@@@++.......+@@###@@++..........++@@$##@@+.......+@@@$$###@+++.............+++@@@@@+.......+@@@@+@++@@@@#......++@+$$$@+++....++@@@###@@@@@@@@@#@....++@@@@@+@+@@#@#@...+@@@@+@++@+@###@+...........++@@###@@....++@@@#####$$@@+........++@@@#@@@@++..+@@#@@+@+++++@@@$$@.",
+"+$#@#@@@@#@#@##@$$@.........+++@@@$#$@@...+++@@#$$#@+@+@+++.......++@####@++...........+++$$@@@+.......++@@$$###++...............+++@@#@@.......++@@@#+++++@#@#........++$$$++.......+@@@#@#@@@+++@@@@#....+++@@#++++@@@@#@...++@#@@++++@+#@#++............+++@@#@+.....+@@@##@#@$$@@+........++@@@#@@@++...++@@@@@++++++@@@#$@.",
+"+$$@@@+@@@#@#@#@$$+...........++@@$$#@@.....++@@#$$++++++..........@@@@#@++...........+.+@#$#@@++.......++@#$@#@++................++@@@@@+.......+++@@++.++@@@@........++$$$+++......++@@@@#@@+@++++@@@.....+++@@+++++@@#@@...++@@@++++++@##@++.............+@@#@@@.....+@@@###@#$$+++..........+@@@@@++....++@@@@++....+++@$#@.",
+"++++++++++++++@++@+............++++@@@@.....++++++++++.............++@+++++.............++++@@@+.........+++@+@+++..................++++.+.......++++..+...++++........+++@@+.........++@+@++++++++++++......++.+...+++++@+...++++++....+.++++...............++++++......++++@@+@@@@++...........+++++++......+++........++++++.",
+".+++++..++++++++++...............++++++.......+++++++................++++.................++@@++..........++++++............................................+++.........++++.+...........+.+++.......+................+.+.................+++................+.++.........+++++++@@+...............+.+.......................++.",
+".................+..................++................................+...................++.+...........................................................................+++..................................................................................................++++.+............................................"};
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xdd, 0xdf, 0xdf,
- 0xfe, 0xfb, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfe, 0xfb, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xdb, 0xff, 0xff, 0xff,
0xfd, 0xff, 0xdf, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xef, 0xff, 0xff,
+ 0xff, 0xff, 0xfb, 0xff, 0xef, 0xff, 0xff, 0xfb, 0xff, 0xef, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x7f,
- 0xf7, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff,
+ 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x7f,
+ 0xf7, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0x7f, 0xff, 0xff,
0xfb, 0xbf, 0x7f, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x7f, 0xfb, 0xff, 0xff,
- 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xbf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xfe, 0xff, 0xbf, 0xff, 0xfd, 0xff,
- 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
- 0xff, 0xff, 0xef, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff,
+ 0xf7, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
+ 0xff, 0xff, 0xef, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x7f, 0xff, 0xff,
0xfd, 0xff, 0xbf, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0x7f, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xef, 0xff, 0x7f, 0xff,
0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
/* XPM */
static char * matrix0b_xpm[] = {
-"160 182 7 1",
+"160 182 16 1",
+" c None",
". c #000000",
"+ c #030E03",
"@ c #061406",
-"# c #0B2A0B",
-"$ c #081E08",
+"# c #081E08",
+"$ c #0B2A0B",
"% c #0F390F",
"& c #165016",
+"* c #000100",
+"= c #051205",
+"- c #051405",
+"; c #061706",
+"> c #061806",
+", c #061606",
+"' c #020802",
+") c #030B03",
"...............+.................++@+......++++.............................................................................................................++..",
-".............+@@@+....+++@+++...+@@$$@+...++$$@++...+++++.......+.+......++++.......+@@+....+@@++......+@@++...............................................++@@+",
-".+..+..+..+..@##$++...@@$@@@+.+.+$$$$@++.++$##$@+.+.+@@++..+..+.@+++.+...+@@@+.+..++@$@++...+@$@+..+.++@##$+.+..+++@+.+..+..+..+..+..+..+..+..+..+..+..+...+$#$@",
-"...........+.$%%$@.+.+@#$##$+..+@$###$@..+@$###$@..+@$$$++....+@$$@+.....+$$@+.....+$$$+.+..+$$$++....+$%%#@+....+@$++..................................+..@$#$+",
-"..+..+...+..+@%%$@...+$####$@+.+$#%%#$@+.@$####$++.+$$$$@+....@$##$++..++@$$@+..+.+$$$@+.....@$$@+..++@#%%%$@+...@##$+..+..+..+..+..+..+..+..+..+...+.....+@$$@+",
-"...+...+.....$%%#++..+@####$+.+@$#%%%$@.+@$##$$$++.+@###@++.+.$$#$@++....+$@++....+$#$+...+..@$#$++..+$#%&%$@..++$%%#@++.+..+..+...+++++++++..+...+...+...+$$$+.",
-".....+...+..+$#%#+.+.++@@@@+...@#%%%#$@..@$####$+..+@$##$+...+$###$@+....+++...+..@##$++.....@$##@....$#%%%$@+.+$#%%%$@...........++$$#$#$@+....+...+..+.+@$$@+.",
-".+...........@#%$+......+++.+.+$#%%%%$++.+@$####@+.+@$#$$@+..+@#%#$$++.......+...+@#%$+.....+.$%#@+...+####$+.+@#%%&%%$@.+..+..+...@#%%%%#$++............+@$$+..",
-"...+.+..+.+.+@##@+............+$%%%%#$+.+@$$####@+.@@$##$@++.+$#%%%#@.+........+..@$#$+.+.+..+$$$+.+.++$$$$@+..+$#%%%#@+....+.+....+$$$$#$@+..+.++.+..+..$$$@+..",
-".............+@$$...+....+....+$##%##@+..+$##%%#$++.+@$$$$+.++$##%%#@+.+.+.+......+$$$++....++$#$@.....++++...+.+$%%$++..+.+@@++..+.++@@+++....++@@+...++@$$++..",
-".+....+...+..+@$@+....+....+...@$##$$++..+$#%##$+...+@$$$$+..@$##%##$+.......+.+..+@$$@+.....@$$++..........+....@##$+.....+$$@+............+..+@$@++..++$$@+...",
-"...+..........@@+..+.........+.@$$#$$+...++$#%$@.+...+$$@+++.+@$###$@+.+.+.........+@#@++.+.+$$@+..+......+...+..+$$@.+...+@$#@+..+..+.+.......+@$@+...+$$$@.+..",
-"......+.+.+.+.+.+...+.+.+.+....+$$$@@+.....+$$@+......+++.....++@@@@++.....+..+.+...@$@+....++$++...+...+......+..+++......@$@@..........+..+..++@+...+.$$@+....",
+".............+@@@+....+++@+++...+@@##@+...++##@++...+++++.......+.+......++++.......+@@+....+@@++......+@@++...............................................++@@+",
+".+..+..+..+..@$$#++...@@#@@@+.+.+####@++.++#$$#@+.+.+@@++..+..+.@+++.+...+@@@+.+..++@#@++...+@#@+..+.++@$$#+.+..+++@+.+..+..+..+..+..+..+..+..+..+..+..+...+#$#@",
+"...........+.#%%#@.+.+@$#$$#+..+@#$$$#@..+@#$$$#@..+@###++....+@##@+.....+##@+.....+###+.+..+###++....+#%%$@+....+@#++..................................+..@#$#+",
+"..+..+...+..+@%%#@...+#$$$$#@+.+#$%%$#@+.@#$$$$#++.+####@+....@#$$#++..++@##@+..+.+###@+.....@##@+..++@$%%%#@+...@$$#+..+..+..+..+..+..+..+..+..+...+.....+@##@+",
+"...+...+.....#%%$++..+@$$$$#+.+@#$%%%#@.+@#$$###++.+@$$$@++.+.##$#@++....+#@++....+#$#+...+..@#$#++..+#$%&%#@..++#%%$@++.+..+..+...+++++++++..+...+...+...+###+.",
+".....+...+..+#$%$+.+.++@@@@+...@$%%%$#@..@#$$$$#+..+@#$$#+...+#$$$#@+....+++...+..@$$#++.....@#$$@....#$%%%#@+.+#$%%%#@...........++##$#$#@+....+...+..+.+@##@+.",
+".+...........@$%#+......+++.+.+#$%%%%#++.+@#$$$$@+.+@#$##@+..+@$%$##++.......+...+@$%#+.....+.#%$@+...+$$$$#+.+@$%%&%%#@.+..+..+...@$%%%%$#++............+@##+..",
+"...+.+..+.+.+@$$@+............+#%%%%$#+.+@##$$$$@+.@@#$$#@++.+#$%%%$@.+........+..@#$#+.+.+..+###+.+.++####@+..+#$%%%$@+....+.+....+####$#@+..+.++.+..+..###@+..",
+".............+@##...+....+....+#$$%$$@+..+#$$%%$#++.+@####+.++#$$%%$@+.+.+.+......+###++....++#$#@.....++++...+.+#%%#++..+.+@@++..+.++@@+++....++@@+...++@##++..",
+".+....+...+..+@#@+....+....+...@#$$##++..+#$%$$#+...+@####+..@#$$%$$#+.......+.+..+@##@+.....@##++..........+....@$$#+.....+##@+............+..+@#@++..++##@+...",
+"...+..........@@+..+.........+.@##$##+...++#$%#@.+...+##@+++.+@#$$$#@+.+.+.........+@$@++.+.+##@+..+......+...+..+##@.+...+@#$@+..+..+.+.......+@#@+...+###@.+..",
+"......+.+.+.+.+.+...+.+.+.+....+###@@+.....+##@+......+++.....++@@@@++.....+..+.+...@#@+....++#++...+...+......+..+++......@#@@..........+..+..++@+...+.##@+....",
".+.+...........+.+..............++@++.+....++@+...+.....+..+...+..+.......+......+...++..+....+..+....+...+.+....+....+.+.+++@.+...+................+..+@@++.+..",
"...++++.....+.+.......+.+++..+..+++++...+....++.....++++.+...+..+.+.+.+.+.@+@+....+++.+...+.+.++.+..+..............+........+........+...+.......+.......++.....",
-"...+@@@+++.++@@@++.+..+@@@@@+..++@$@+++....+@@@++..++@$@@++....+@$@@++.+@@@@@@++..++@@@@+....++@+++.....+....+.+...............+.+....+.....+.+.......+.+@@$@+..",
-".@@$$##@+..+@###@...++@$###$++.+$$##$@+....+$##+..++$##$$@+..+.$#%#$+..+$$$#$$@++++$##$$++.+@$$$$@++.+....+......+.+.+.+....+..+..+......+....+.+.+.+..+@###$@+.",
-".+@####$@+++@#%%$+...+@####$@+++$#%##$@.+.+$#%%$+..+$###$$++..@$%##$@+.+$$$$##@+++$###%$@+++@$###$@+.....+.+.......+.....+..++@@@+...+.++.+.++@@++.....+$#%%#$@.",
-".@$#$$#$@+.++$%#$+...@@$$###@+++$$###$@...+$#%#$+.+@$%%##$+.++$#%#$@+..++@$$$$@++@$#$##$@+.@$$$##%@+.+.+@@@+.+...++@@+....++@@$$@++++@@@@++.+@$$$@@+.+.+$####$@+",
-"+@$#$$$$@@..+@#%$+..+.++@$$$$+..+@$###@+.+@###%$+..@$#%%#$++.@$%###$++...++$$$+..@$##$##$+++$#$$%%$+...+@#@+...+.+@#@@.+..@@$#$@@+.+@$$$$@@+.@@$##$@+..+@$$##$@.",
-".@$#@@$$$++.++##$+....++@##$++.++$#%#$++.@$###%$++.+$$#%%#@+.@#%%###@+....+$$$++.+$####$@+++$###%%$+...+@$@@.....+@$@@..++$###$@+..@$#####@+.+@@####$+..+@$##$@.",
-"+@$$$$$#@@..+@#%$+...+.@##$@+...+@$##$@.+@##%#%$@.+.@@$$#%$++@##%#%%@+.+.++$$++.+@$#####@+.+@###%%$++...+@++.+....@@++...@$###@++.+@$#####@++.+@$#%#$+..+@###@+.",
-".@$#$$$$$++.+@#%$+...++$##$@+.+.@@$$#$@.+@###%%#@..+@@@$#%$.++#%###%$+...+@$$+...@$##$##$+.++$%%%%$...+.++.+...+..+.+..+.+$###$@+..@$$#$##@+.++@####@+..+@$#@+..",
-"+@$#$$$$@+..+@#%$@++.+$#%#$++.+@$@$$#$@+.@$###%#$+++$@$$%#$+.@$%##%%$+..++$$$++.+@#$#$#$@++.@$##%#@+....+@++......@@++....@$###@@+++$$$#$$@+++$$##$@+....@$$@...",
-".+$####$@+.+@$#%$@+..@#%##$@+.+$#$###$+..+@$##%#@.++$$#$##@+.+$#####@+...@$#@+...+$#####@++.+$####@.+..+@$@@..+.++$#@+.+...@@$#$@+.+@@@@@@++.@$$$$++.+..+@$@+.+.",
-"+.+$$#$@+..+@$###@+++@$###$$@.+@$#$$$++.+.+@$$#$@+.+@#$#$@+..++$$$#$@....+$$@+.+..+$$#$$+..+@$$$$++....+@#@++...+@##@+...+..++@@++...+..+...+@@@++.......+@++...",
-"...@@$@++..+@@$$$@+..+@$$$$@+...@$$@+......+@$$@+...+@@$@+.+..++$@@@+.....+++...+.++@$@+.+.++@$@@.+.+..++@+.....+@$@@.........+..............++.+...+.+..++.+...",
+"...+@@@+++.++@@@++.+..+@@@@@+..++@#@+++....+@@@++..++@#@@++....+@#@@++.+@@@@@@++..++@@@@+....++@+++.....+....+.+...............+.+....+.....+.+.......+.+@@#@+..",
+".@@##$$@+..+@$$$@...++@#$$$#++.+##$$#@+....+#$$+..++#$$##@+..+.#$%$#+..+###$##@++++#$$##++.+@####@++.+....+......+.+.+.+....+..+..+......+....+.+.+.+..+@$$$#@+.",
+".+@$$$$#@+++@$%%#+...+@$$$$#@+++#$%$$#@.+.+#$%%#+..+#$$$##++..@#%$$#@+.+####$$@+++#$$$%#@+++@#$$$#@+.....+.+.......+.....+..++@@@+...+.++.+.++@@++.....+#$%%$#@.",
+".@#$##$#@+.++#%$#+...@@##$$$@+++##$$$#@...+#$%$#+.+@#%%$$#+.++#$%$#@+..++@####@++@#$#$$#@+.@###$$%@+.+.+@@@+.+...++@@+....++@@##@++++@@@@++.+@###@@+.+.+#$$$$#@+",
+"+@#$####@@..+@$%#+..+.++@####+..+@#$$$@+.+@$$$%#+..@#$%%$#++.@#%$$$#++...++###+..@#$$#$$#+++#$##%%#+...+@$@+...+.+@$@@.+..@@#$#@@+.+@####@@+.@@#$$#@+..+@##$$#@.",
+".@#$@@###++.++$$#+....++@$$#++.++#$%$#++.@#$$$%#++.+##$%%$@+.@$%%$$$@+....+###++.+#$$$$#@+++#$$$%%#+...+@#@@.....+@#@@..++#$$$#@+..@#$$$$$@+.+@@$$$$#+..+@#$$#@.",
+"+@#####$@@..+@$%#+...+.@$$#@+...+@#$$#@.+@$$%$%#@.+.@@##$%#++@$$%$%%@+.+.++##++.+@#$$$$$@+.+@$$$%%#++...+@++.+....@@++...@#$$$@++.+@#$$$$$@++.+@#$%$#+..+@$$$@+.",
+".@#$#####++.+@$%#+...++#$$#@+.+.@@##$#@.+@$$$%%$@..+@@@#$%#.++$%$$$%#+...+@##+...@#$$#$$#+.++#%%%%#...+.++.+...+..+.+..+.+#$$$#@+..@##$#$$@+.++@$$$$@+..+@#$@+..",
+"+@#$####@+..+@$%#@++.+#$%$#++.+@#@##$#@+.@#$$$%$#+++#@##%$#+.@#%$$%%#+..++###++.+@$#$#$#@++.@#$$%$@+....+@++......@@++....@#$$$@@+++###$##@+++##$$#@+....@##@...",
+".+#$$$$#@+.+@#$%#@+..@$%$$#@+.+#$#$$$#+..+@#$$%$@.++##$#$$@+.+#$$$$$@+...@#$@+...+#$$$$$@++.+#$$$$@.+..+@#@@..+.++#$@+.+...@@#$#@+.+@@@@@@++.@####++.+..+@#@+.+.",
+"+.+##$#@+..+@#$$$@+++@#$$$##@.+@#$###++.+.+@##$#@+.+@$#$#@+..++###$#@....+##@+.+..+##$##+..+@####++....+@$@++...+@$$@+...+..++@@++...+..+...+@@@++.......+@++...",
+"...@@#@++..+@@###@+..+@####@+...@##@+......+@##@+...+@@#@+.+..++#@@@+.....+++...+.++@#@+.+.++@#@@.+.+..++@+.....+@#@@.........+..............++.+...+.+..++.+...",
"+.+.+++..+..+++++++...++++++.+...+++++...+..+++++.+..+++.+......+++..+.+.+.+........++.+.....++++........+.+...+.+@+++.+..+.....+..+.+..+.+.....................",
".....+........+....+....+.+....+..+....+....+.........++.+..+.+...+........+.+..+.+..+.+..+..+..+......+.+.+....+.+........+.+...............+.+.+.+..+..+.+..+.",
"+.++@@@+.+..++@@+....+@@@@+++....++@@@+..+@@@@++.+.+@++++++...+@@@+@+.+..+++@++..++@@+@+++..++@@+++.+..++@@+++.++@@@@@.+.++@+++..+.++@+.++@.+.+++.@+.+...++++...",
-".++$$#$@..+++@$@@+.+.+@$$$@@+.+++@$$$@@++@$$$$@@++.+$$$$$@@+++@$$$$$@+.+@@@$$@@+++$$$@$$@@++@@$$$@@..+++@$$@@.+@@$$@@$++.@$$$@+...+@$@@@@@$++@@$@@@$@+.+@@@$$@+.",
-".+@$###@+..+@###@++.+@#####$++.@$#$$##$++$###$##@++@$#####@++@###$##@@+@$$#$##$++$##$$$#$@.+@####@++..+@####@++$#####$@++@###@++.++$##$@$#$@@$##$$##$++@$##$##@+",
-".@$###%$@+.+@#%#$++.+@$###%%$++$##$$$#$++$##$$###@@@$###%#@++@$###$#$@@$##$$$#$@+$##$$$#$@.++#%%#@+...+@@##$@++$#####$@.+@$##@+...+$%####%#@@#%%##%%$@@$##$$##$+",
-"+@$#%%%#++..$$###@+..@$###%%$@@#%#$@@@@++@$#$@$##@+@$#####@.+@$#$##$@@@#%$$@$$@++@#$#$##$++.+@#%$+.+...+@$#@+.+@##%##@+..@$##++..++#%%##%%%$+$#%##%%#@@#%$$$#%$@",
-".@$##%%$@+.+@####$++.$$%##%%$$@#%$+++++.+@$$$@$$$@+@$#%%##++.@$%###@++@#%$@@@$@+++$###$$$+..+@#%$+...+.++$$$@.+@##&%$@+..+$#$@....+$%%%%%%%$@$$##%%%$@@#%$@@$#$@",
-"+@##%%%$@.++$#%%%$@.+@$%###%#@$#%$@..+.+.@$#@@@$$@+@$%%%%@@.+@$%%%#@.+$#%#@@$$@.+@$#$##$$++..$#%@@...+++@@#@++.@$%%%#@+..+@#$@++.++#%%%%%%#@@$###%%%$@$#%$@@$#$@",
-".@$###%$@+.@##%%%#$+.@$#####$@$#%$@+.++.+@$#@@$##@+@$#%%#$@+.@$%##$@..@###$$##$++@$#$$#$$++.+@#%$+.++@@@$$#@@.+@$##%#$+..@$##@@$+.@#%%##%%%$+$$##%%%#+$#%$@@$#$@",
-"++$####$@++$%%#%%%#$+$$##$##$@@$#$@@@@@++$##$$$##@@@######@@+@$###@+.++$##$###$++@####$#@@..+$%%$@+.@$##$##$+.+@#####$@++@$%####@++#%%#$#%#$@$##$%%%$++$#$$$#%$@",
-".@$#%##$@.+$%%##%%#@+$######$++@$##$#$@++@#%####$+@$###%##$@@$###$@+..+@$###$#$+@$##$###$@+.@$#%#@++@$####$@+.@@###$##$++@#%##%#$++$##$$#%#$@$####%%$++@$#####$+",
-".+@$#%#@+++@##$$##$@@$######@+.+@$$#$@+.+$$###$$+++$######$+@$###$++...+$$$#$$+++@##$$$#$+++@$###@+.+@$$##@@..+$##$@@#@+@@#####$@++$#$@@@#$@@$#$$$##$..+$$#$#$@.",
-"..+@$$@@..++@@@+@$@+.@@$@@@@+..+.@@@@++..@@$@$@+...+$@$$@@++++$@@++..+..++@@@+..++@$@@@@@+..@@@$@@+..+@@@@++..++@@@@@@+++@@@$@$@+..@@@+++@++++@@+++++....@@@@+..",
+".++##$#@..+++@#@@+.+.+@###@@+.+++@###@@++@####@@++.+#####@@+++@#####@+.+@@@##@@+++###@##@@++@@###@@..+++@##@@.+@@##@@#++.@###@+...+@#@@@@@#++@@#@@@#@+.+@@@##@+.",
+".+@#$$$@+..+@$$$@++.+@$$$$$#++.@#$##$$#++#$$$#$$@++@#$$$$$@++@$$$#$$@@+@##$#$$#++#$$###$#@.+@$$$$@++..+@$$$$@++#$$$$$#@++@$$$@++.++#$$#@#$#@@#$$##$$#++@#$$#$$@+",
+".@#$$$%#@+.+@$%$#++.+@#$$$%%#++#$$###$#++#$$##$$$@@@#$$$%$@++@#$$$#$#@@#$$###$#@+#$$###$#@.++$%%$@+...+@@$$#@++#$$$$$#@.+@#$$@+...+#%$$$$%$@@$%%$$%%#@@#$$##$$#+",
+"+@#$%%%$++..##$$$@+..@#$$$%%#@@$%$#@@@@++@#$#@#$$@+@#$$$$$@.+@#$#$$#@@@$%##@##@++@$#$#$$#++.+@$%#+.+...+@#$@+.+@$$%$$@+..@#$$++..++$%%$$%%%#+#$%$$%%$@@$%###$%#@",
+".@#$$%%#@+.+@$$$$#++.##%$$%%##@$%#+++++.+@###@###@+@#$%%$$++.@#%$$$@++@$%#@@@#@+++#$$$###+..+@$%#+...+.++###@.+@$$&%#@+..+#$#@....+#%%%%%%%#@##$$%%%#@@$%#@@#$#@",
+"+@$$%%%#@.++#$%%%#@.+@#%$$$%$@#$%#@..+.+.@#$@@@##@+@#%%%%@@.+@#%%%$@.+#$%$@@##@.+@#$#$$##++..#$%@@...+++@@$@++.@#%%%$@+..+@$#@++.++$%%%%%%$@@#$$$%%%#@#$%#@@#$#@",
+".@#$$$%#@+.@$$%%%$#+.@#$$$$$#@#$%#@+.++.+@#$@@#$$@+@#$%%$#@+.@#%$$#@..@$$$##$$#++@#$##$##++.+@$%#+.++@@@##$@@.+@#$$%$#+..@#$$@@#+.@$%%$$%%%#+##$$%%%$+#$%#@@#$#@",
+"++#$$$$#@++#%%$%%%$#+##$$#$$#@@#$#@@@@@++#$$###$$@@@$$$$$$@@+@#$$$@+.++#$$#$$$#++@$$$$#$@@..+#%%#@+.@#$$#$$#+.+@$$$$$#@++@#%$$$$@++$%%$#$%$#@#$$#%%%#++#$###$%#@",
+".@#$%$$#@.+#%%$$%%$@+#$$$$$$#++@#$$#$#@++@$%$$$$#+@#$$$%$$#@@#$$$#@+..+@#$$$#$#+@#$$#$$$#@+.@#$%$@++@#$$$$#@+.@@$$$#$$#++@$%$$%$#++#$$##$%$#@#$$$$%%#++@#$$$$$#+",
+".+@#$%$@+++@$$##$$#@@#$$$$$$@+.+@##$#@+.+##$$$##+++#$$$$$$#+@#$$$#++...+###$##+++@$$###$#+++@#$$$@+.+@##$$@@..+#$$#@@$@+@@$$$$$#@++#$#@@@$#@@#$###$$#..+##$#$#@.",
+"..+@##@@..++@@@+@#@+.@@#@@@@+..+.@@@@++..@@#@#@+...+#@##@@++++#@@++..+..++@@@+..++@#@@@@@+..@@@#@@+..+@@@@++..++@@@@@@+++@@@#@#@+..@@@+++@++++@@+++++....@@@@+..",
"..+.++++........+.....+..++........++.....+..+..+...+..+.+...+.+++.....+...+.+....+.+.+++.....++++.....++.......+.++.+...++@+++...+.++.++......+..+...+...+.....",
"..+.......+.+.+..+..+..+...+....+...+.+....+.++..+..++.+.+........+.+...+.+..++...+.+....+.+.+..+.+...+.+++.+...+.@@++...+++.........+@@@+...+..+...........+...",
-"++@@$@@++....@@@++...+@@$$++.+...@@$@@.+.+@@@@@@+.++++++++++++@@+++@+++++++++++++++@@@@@@+.+@@@@@@@+.++@@@@@.+..+@##@++.+@@@@.+.+..++@$#$++....++@++...+.....+..",
-"+@####$@++.++$##$@++.$####$@+..++$##%#$+.@##%#%#$++@#$@$$$@++@$$@@@$$++@$$@@$#$++@##$$##$@+@###$##$@++$#####@+..+@##$+...@@$@+......+$#%#@+..+.+$$@+.....+......",
-"@$%%%%#$++++$##%##@+@$%%%%$$@+.+@$#%%%#@+$%%&%%%#@@#%#$$#%$++$%#$$$%#@@$%%$$#%#$@$%%%#%%#@@$%%##%%#@@@#%%%%#@+..+$%%@+...+@$$++.+..+.+$%#@.+...$#%$++...........",
-"@$$###$#$++$$#$###$+@$%%###$@++@$####%#@@$%%%&%%#@@$%#$$#%$@+$##$$$##@@$%%###%#$@$#%%#%%#@@$#%##%%#@+@$##%%#@+..+$%#@+...+@$$@+......+$##@...++$###@+..+...+.+..",
-".@$#$$$$$@@#%$$$$#$++@$##$#$$@.@$#####$@+$#%%%%%#@@$#$@$#%#@+$$#$@$#$@@#%%%%%%#@++##%###@.+@$#####@++@$$###$@...+$%#@.+...+@##@.+..+.+$%#@+...+$$##@++...+......",
-".@$###$#$@$#%$@@$$$@+@$#%###@+.@$#####$+.@$#%%#$$+@$$$@$#%$++@$$$$$$$@+$%%%%%%#@++@#%%#$@..+@$#%#$+..+@$###@++..+@%#@+....+@$$$+.....+$##@+.+.+@$$$++..+...+....",
-"+@$#%###@@@##$@@$#$++$$%%%%$@+++$##%#%$@+.+$#%#@+.+$$$@@#%$+.+@#$$$$@++#%&%%&%#@.+@$###@++..+$#%#@+..+@###$@+...+$%#@..+...+@$@@++...+$%#@.....+++++.........+..",
-"+@##%##$@+@$%#$$##$++@##%#%$@..@$$$##%#@.++$#%$@.++$$$$$#%$+++@####$+.+$#%%%%%#@++@#####+.+.+$#%$@...@@###$@@...+$%#@+......@$#@+..+.+$%#$+.+......+.+.+..+.....",
-"+@$###$@..+$######$++$######$@+@###$#%#@...@#%#@..+@$$$$##@+..@$###@+..@#%####$++@######$@..+$#%$++.+@$%%###@+..+$%#@+.+..+.+@$$@+..++#%#@...+..+............+..",
-"@$###$++...@#%%%%%$++$%#$$##$@+$######$@+.@$#%$@+.+@$$$#$$@+..@$###+.++@$#$#$$$+@$%######@+.+$#%$@+.+@######@+..+@%%$+......+@$#@...++$%#@+............+.+.+.+..",
-"+@$#$@+..+.+$#%#%#$++@$$$$$$$+.@$#$$$$@+..+@#$$@...+@$$$$@++...@$$$+...+@$$@$$+++$$#$$$#$+..+@$#$++..@$##$##@+...@##$@.+.....+@@@+..+@##$++...+...+.+...++++++++",
-"+++@@++....+$$####@.++@@++++++.@+@@@@@+...++@@@++...+@@@@+...+.+@+++....++++++.+.++@@@@@+++.++@@++.+.++@@@@++..+.@$$@@...+...+++.+..+@$$$+.+..........++@@@@@@@+",
-"....+.....+.+@@@$@@...............+..................................+.......+...+.++.........+.+......+.+.......++@+++............+.+@@++......+....+.@@@$$$$@+",
+"++@@#@@++....@@@++...+@@##++.+...@@#@@.+.+@@@@@@+.++++++++++++@@+++@+++++++++++++++@@@@@@+.+@@@@@@@+.++@@@@@.+..+@$$@++.+@@@@.+.+..++@#$#++....++@++...+.....+..",
+"+@$$$$#@++.++#$$#@++.#$$$$#@+..++#$$%$#+.@$$%$%$#++@$#@###@++@##@@@##++@##@@#$#++@$$##$$#@+@$$$#$$#@++#$$$$$@+..+@$$#+...@@#@+......+#$%$@+..+.+##@+.....+......",
+"@#%%%%$#++++#$$%$$@+@#%%%%##@+.+@#$%%%$@+#%%&%%%$@@$%$##$%#++#%$###%$@@#%%##$%$#@#%%%$%%$@@#%%$$%%$@@@$%%%%$@+..+#%%@+...+@##++.+..+.+#%$@.+...#$%#++...........",
+"@##$$$#$#++##$#$$$#+@#%%$$$#@++@#$$$$%$@@#%%%&%%$@@#%$##$%#@+#$$###$$@@#%%$$$%$#@#$%%$%%$@@#$%$$%%$@+@#$$%%$@+..+#%$@+...+@##@+......+#$$@...++#$$$@+..+...+.+..",
+".@#$#####@@$%####$#++@#$$#$##@.@#$$$$$#@+#$%%%%%$@@#$#@#$%$@+##$#@#$#@@$%%%%%%$@++$$%$$$@.+@#$$$$$@++@##$$$#@...+#%$@.+...+@$$@.+..+.+#%$@+...+##$$@++...+......",
+".@#$$$#$#@#$%#@@###@+@#$%$$$@+.@#$$$$$#+.@#$%%$##+@###@#$%#++@#######@+#%%%%%%$@++@$%%$#@..+@#$%$#+..+@#$$$@++..+@%$@+....+@###+.....+#$$@+.+.+@###++..+...+....",
+"+@#$%$$$@@@$$#@@#$#++##%%%%#@+++#$$%$%#@+.+#$%$@+.+###@@$%#+.+@$####@++$%&%%&%$@.+@#$$$@++..+#$%$@+..+@$$$#@+...+#%$@..+...+@#@@++...+#%$@.....+++++.........+..",
+"+@$$%$$#@+@#%$##$$#++@$$%$%#@..@###$$%$@.++#$%#@.++#####$%#+++@$$$$#+.+#$%%%%%$@++@$$$$$+.+.+#$%#@...@@$$$#@@...+#%$@+......@#$@+..+.+#%$#+.+......+.+.+..+.....",
+"+@#$$$#@..+#$$$$$$#++#$$$$$$#@+@$$$#$%$@...@$%$@..+@####$$@+..@#$$$@+..@$%$$$$#++@$$$$$$#@..+#$%#++.+@#%%$$$@+..+#%$@+.+..+.+@##@+..++$%$@...+..+............+..",
+"@#$$$#++...@$%%%%%#++#%$##$$#@+#$$$$$$#@+.@#$%#@+.+@###$##@+..@#$$$+.++@#$#$###+@#%$$$$$$@+.+#$%#@+.+@$$$$$$@+..+@%%#+......+@#$@...++#%$@+............+.+.+.+..",
+"+@#$#@+..+.+#$%$%$#++@#######+.@#$####@+..+@$##@...+@####@++...@###+...+@##@##+++##$###$#+..+@#$#++..@#$$#$$@+...@$$#@.+.....+@@@+..+@$$#++...+...+.+...++++++++",
+"+++@@++....+##$$$$@.++@@++++++.@+@@@@@+...++@@@++...+@@@@+...+.+@+++....++++++.+.++@@@@@+++.++@@++.+.++@@@@++..+.@##@@...+...+++.+..+@###+.+..........++@@@@@@@+",
+"....+.....+.+@@@#@@...............+..................................+.......+...+.++.........+.+......+.+.......++@+++............+.+@@++......+....+.@@@####@+",
".....+.......+.....+.++...+.....+...+..+....+.+.+..+..+.+.+..+.+.+++..+...+......+....+.......+..........++.+..+.........+.++.+........+...+.+....+....+++++.++.",
-".+.++++...+.....+....+@$+....+...........+...+@@++..+..........++@@@++..+......+.@@@+....+.+.++@++.+.+..++@+..+@@@+.+.+...+@@@++.+.+............................",
-"..+@$@++......+....++$$$@+.......+...+.+...+.@$$@+....+....+..++@###@++...+.+...+$$#@+.......@@$+......++$$@..@@#@@.......@$##@......+.+....+.+.+.+.+......+....",
-"..+$##@...+.+.+.++...$##$++.+.+...++++....+.@$##$+++.+.+++....+$###$@+..+.+.++.++@##@@++....+@#$@+...+.+@#$@@.+@$#@@@.+.+.+$%#$+..+.++.++++....+.+....+.+++..+..",
-"...@#$@+....@@$$@+..+@$##$$++..+@@@@@@@++.+@$$$$$+.++@@@@@+.+++$%%#$@+.+@@@@@$+.+@##$$@@+..++$#$@+...++@$#$@+.@@$$$@@@....+@#%$+..+@@$$@@@@++@@@@@@@+..++@@$@@+.",
-".+.+@$++.+.+@####@+..@#####$++.+$#####$+++$###%#$+++$###$$@+.+$#%%#$++.@$###%#@++@##%##@@+..+$##@+....+@##%$++.@$####@@+...@##@+.+@$###%##@++$#####@++.+$####$@+",
-"....+++....@$#%%%$++.@#%#%##$@+@#%##%%#++@#%%#%#$++@#%#%%#$@++$#%%#$+++$###%%#$+.@$###%$@+..@$#%@+....@@$###+.+@$#%##@+..+.@#%$+..@#%%%%%##@@$#####$@++@$%####$@",
-"+.+..+.+.+.@$##%%#@.+@$####%#@+$#%#$$#$@+$#####$$++@%%%%%%#++.+###$@.+@#%##$##$++@####$#@++.+@%%$+..+..@@##$@+.@#%%%#@+...+@##$+.+@$###%##$@@@##$$$#@+@$#%#$#%#@",
-"..........+@#%##%#@.+@$$$$#%#@+$%#$@@$$++$%%$$#$$@@$%%%%%%#@+.+$#$@+.+@#%#$$#$@+.@$#$$$$$+..+@#%$@.....++@##+.+@$%%%$@+...+@%%$+.+@$######$@+@##$$$$$@+$%##$#%#@",
-"...+.....+.$#%#%%#$.+@#####%#@+$%%#$$$$@+$#%####$++$%%%%%%#@.++$##$@.+@#%#####@++@##$$$#$++.+$#%$@+.+...@$#$@.+@##%%#@++..+@#%$++.@$$#####$@+@$#$$$#$++$%%#$#%#@",
-".....+...+.$#%#%%#$++$######$++@####$#$@+$####%#$@+$#%%%##$@+.@$##$@+.@$#%###$@++@######$@.+@$%%#@@...@@@$#$@.+$######++.++$#%#@++@$##$####@@$######$@+@##%###$@",
-".+....+...+@##%###$++@###%#$@+.+@#####$+.+$#####$+++$$####@+.+@####@+++$$##%##+++$##$$##$@.+@$###@@+..+@$$#@+++@$$$##$@+.+@$###$++@$##$$$$$@@@##$$##$@.+@####$@+",
-"...+.......+@@$$$@++++@$$$@@...++@@$@@@+..+@$$$$++..+@$$$@++..@@$$$++..+@$###$@..@@@@@@@@+..+@$$@@+..+@@$$@@..+@@@@@$@@...@@$$@@.++@@$@@@@@+++@@@@@$@+.++@$$$+..",
-".......+....++++.+....+.++.+......++++.....+.+.++..+.+.+++...+.++++++.++@@@$@@+..+.+.+++++.+..++@.....++@@++....+...++.+.+..+++.+..++++++++...+++++.++.....+.+..",
+".+.++++...+.....+....+@#+....+...........+...+@@++..+..........++@@@++..+......+.@@@+....+.+.++@++.+.+..++@+..+@@@+.+.+...+@@@++.+.+............................",
+"..+@#@++......+....++###@+.......+...+.+...+.@##@+....+....+..++@$$$@++...+.+...+##$@+.......@@#+......++##@..@@$@@.......@#$$@......+.+....+.+.+.+.+......+....",
+"..+#$$@...+.+.+.++...#$$#++.+.+...++++....+.@#$$#+++.+.+++....+#$$$#@+..+.+.++.++@$$@@++....+@$#@+...+.+@$#@@.+@#$@@@.+.+.+#%$#+..+.++.++++....+.+....+.+++..+..",
+"...@$#@+....@@##@+..+@#$$##++..+@@@@@@@++.+@#####+.++@@@@@+.+++#%%$#@+.+@@@@@#+.+@$$##@@+..++#$#@+...++@#$#@+.@@###@@@....+@$%#+..+@@##@@@@++@@@@@@@+..++@@#@@+.",
+".+.+@#++.+.+@$$$$@+..@$$$$$#++.+#$$$$$#+++#$$$%$#+++#$$$##@+.+#$%%$#++.@#$$$%$@++@$$%$$@@+..+#$$@+....+@$$%#++.@#$$$$@@+...@$$@+.+@#$$$%$$@++#$$$$$@++.+#$$$$#@+",
+"....+++....@#$%%%#++.@$%$%$$#@+@$%$$%%$++@$%%$%$#++@$%$%%$#@++#$%%$#+++#$$$%%$#+.@#$$$%#@+..@#$%@+....@@#$$$+.+@#$%$$@+..+.@$%#+..@$%%%%%$$@@#$$$$$#@++@#%$$$$#@",
+"+.+..+.+.+.@#$$%%$@.+@#$$$$%$@+#$%$##$#@+#$$$$$##++@%%%%%%$++.+$$$#@.+@$%$$#$$#++@$$$$#$@++.+@%%#+..+..@@$$#@+.@$%%%$@+...+@$$#+.+@#$$$%$$#@@@$$###$@+@#$%$#$%$@",
+"..........+@$%$$%$@.+@####$%$@+#%$#@@##++#%%##$##@@#%%%%%%$@+.+#$#@+.+@$%$##$#@+.@#$#####+..+@$%#@.....++@$$+.+@#%%%#@+...+@%%#+.+@#$$$$$$#@+@$$#####@+#%$$#$%$@",
+"...+.....+.#$%$%%$#.+@$$$$$%$@+#%%$####@+#$%$$$$#++#%%%%%%$@.++#$$#@.+@$%$$$$$@++@$$###$#++.+#$%#@+.+...@#$#@.+@$$%%$@++..+@$%#++.@##$$$$$#@+@#$###$#++#%%$#$%$@",
+".....+...+.#$%$%%$#++#$$$$$$#++@$$$$#$#@+#$$$$%$#@+#$%%%$$#@+.@#$$#@+.@#$%$$$#@++@$$$$$$#@.+@#%%$@@...@@@#$#@.+#$$$$$$++.++#$%$@++@#$$#$$$$@@#$$$$$$#@+@$$%$$$#@",
+".+....+...+@$$%$$$#++@$$$%$#@+.+@$$$$$#+.+#$$$$$#+++##$$$$@+.+@$$$$@+++##$$%$$+++#$$##$$#@.+@#$$$@@+..+@##$@+++@###$$#@+.+@#$$$#++@#$$#####@@@$$##$$#@.+@$$$$#@+",
+"...+.......+@@###@++++@###@@...++@@#@@@+..+@####++..+@###@++..@@###++..+@#$$$#@..@@@@@@@@+..+@##@@+..+@@##@@..+@@@@@#@@...@@##@@.++@@#@@@@@+++@@@@@#@+.++@###+..",
+".......+....++++.+....+.++.+......++++.....+.+.++..+.+.+++...+.++++++.++@@@#@@+..+.+.+++++.+..++@.....++@@++....+...++.+.+..+++.+..++++++++...+++++.++.....+.+..",
".+.+....+....................+...............+..........................++.@++.+..................+.....+........+.+........+.........+............+..+....+....",
".....+...........+........+.+........+..+.+.+..+.+....+....+.+.....................+........+.+.....+......+..+...@+++.....+@@++....++@++...+...........+....+..",
-".......+.+....+....+..+.......++.+....+...++++.....+....+......+.+.+.....+....+.+....+.+.+......+.......+.......++@@@+.+...@@$@.+...++@@@+....+..+..+.+.........",
-".++++++...+.+.++++.+..+.+++.+...+.++++..++@$@@+.+...+++.+.+.+.+.+.++.++.++.++.+...++@.++....++.+.+@.+.+++++++...+@##@+....+@##@+....+@$#@+..............+....+..",
-".@@$$@@@+.+.@@$$$$++.++@@@$@++..+@$@+++..@$##$$@.+++@@@@@@+.+@$$@@$$@+++@@@+@$@@.+@$@@$$@@+@$@@@@$@+.+@@$$$@@...+@%#@+.+...@#%$+.+...@##@+.+..+.+.+.+.....+.....",
-"@$%%#%$$+++@$###%#$+++$#%##$@+++$###$$+.+@#%%%#@+.+$##@$#$@@+$#%###%#@@$##$$###@+@#%##%#$+@$##$$$##@.@$#%%%$@+..+$%%@.....+@#%@+....+@#%$+....+@+@@++.+.+....+..",
-"+$%%%###$+@$###%%#$+.+$#%%#$@+++$%%%#$@.+@#%##$@+.@$%#$$$$$+@$%%###%$@@#%####%#@+@$%%%%#@@+$%##$#%#@+@@#%%##@..+@$%#@+.+..+@#%$+.+...@#%$++.++@$#$$@@+....+.....",
-"+$#####%#$@#%#####@.+.@#%#$$+.+@#%%##$+.++$##$@+..+$##$$$#@++@$##$##$@+$#%#%%#$@.+@##%%$@+.@##%#%#@@.@$$#%#@@+..+$%%@+.....@%%@+....+@#%$+..+@##%%##@++......+..",
-".@#####%#$@#%##%##@+.+@###@++.++$%%%#$@+.+@$#@@+..+@#$$$$#$@+@@$#$#$@++@$%%%%#$@++@#%%#@@..@@#%%##@.++$#%%#@@...@$%#@...+.+@#%$+.+...@##$+..+@##$##$@...+.+.....",
-"+@$%####$+@$####%$@.+.$#%$+++.+@$###%#@+.+$##$@@++.@$#$$##$@.+@####@+..@###%%#@+..@##%#$@@..@$#%$@+..@$#%#$$@@..+$%#@@....+@##@+....+@#%@+....@@@$@@++.......+..",
-"+@$###$@+.++@$$###@+.+$#%$$++.+@$###%#@+..@$%#$$++.@$####%$@+.+$###@...+@#####@+++$##%##@@.+@$##@@...@$%%%#$@+..+@%#@+.....@$#@..+...@##@+.....+.+.+......+.....",
-"+$###$+++...+@$###@+++####$++++@$$###$+..++$$#$@+.+++$$$##$+..+@$$@+.+.+@$$$#@+..@$$#$##@@.@$#%#@+...+@##%#$@+...@$$@++.+..++@++....+@$$@+.+.+.........+.....+..",
-"+$#%$$+.....++$###$+.+@$@@@+..+++@@@@++....@@@@++...++$@$$++...+@@++....++@+@+..+.@@@@@@@..@$##$@+.+.++@@@@@+....@@@+........+...+..++@@.......+..+.+.....+.....",
-".@$$$+.+.+....+$$$++....+.+.......++.+.+.....+.........++.+.+.................+..+.......+.+@$@@@.....+.++....+...+.+.+.................+..............+.....+..",
+".......+.+....+....+..+.......++.+....+...++++.....+....+......+.+.+.....+....+.+....+.+.+......+.......+.......++@@@+.+...@@#@.+...++@@@+....+..+..+.+.........",
+".++++++...+.+.++++.+..+.+++.+...+.++++..++@#@@+.+...+++.+.+.+.+.+.++.++.++.++.+...++@.++....++.+.+@.+.+++++++...+@$$@+....+@$$@+....+@#$@+..............+....+..",
+".@@##@@@+.+.@@####++.++@@@#@++..+@#@+++..@#$$##@.+++@@@@@@+.+@##@@##@+++@@@+@#@@.+@#@@##@@+@#@@@@#@+.+@@###@@...+@%$@+.+...@$%#+.+...@$$@+.+..+.+.+.+.....+.....",
+"@#%%$%##+++@#$$$%$#+++#$%$$#@+++#$$$##+.+@$%%%$@+.+#$$@#$#@@+#$%$$$%$@@#$$##$$$@+@$%$$%$#+@#$$###$$@.@#$%%%#@+..+#%%@.....+@$%@+....+@$%#+....+@+@@++.+.+....+..",
+"+#%%%$$$#+@#$$$%%$#+.+#$%%$#@+++#%%%$#@.+@$%$$#@+.@#%$#####+@#%%$$$%#@@$%$$$$%$@+@#%%%%$@@+#%$$#$%$@+@@$%%$$@..+@#%$@+.+..+@$%#+.+...@$%#++.++@#$##@@+....+.....",
+"+#$$$$$%$#@$%$$$$$@.+.@$%$##+.+@$%%$$#+.++#$$#@+..+#$$###$@++@#$$#$$#@+#$%$%%$#@.+@$$%%#@+.@$$%$%$@@.@##$%$@@+..+#%%@+.....@%%@+....+@$%#+..+@$$%%$$@++......+..",
+".@$$$$$%$#@$%$$%$$@+.+@$$$@++.++#%%%$#@+.+@#$@@+..+@$####$#@+@@#$#$#@++@#%%%%$#@++@$%%$@@..@@$%%$$@.++#$%%$@@...@#%$@...+.+@$%#+.+...@$$#+..+@$$#$$#@...+.+.....",
+"+@#%$$$$#+@#$$$$%#@.+.#$%#+++.+@#$$$%$@+.+#$$#@@++.@#$##$$#@.+@$$$$@+..@$$$%%$@+..@$$%$#@@..@#$%#@+..@#$%$##@@..+#%$@@....+@$$@+....+@$%@+....@@@#@@++.......+..",
+"+@#$$$#@+.++@##$$$@+.+#$%##++.+@#$$$%$@+..@#%$##++.@#$$$$%#@+.+#$$$@...+@$$$$$@+++#$$%$$@@.+@#$$@@...@#%%%$#@+..+@%$@+.....@#$@..+...@$$@+.....+.+.+......+.....",
+"+#$$$#+++...+@#$$$@+++$$$$#++++@##$$$#+..++##$#@+.+++###$$#+..+@##@+.+.+@###$@+..@##$#$$@@.@#$%$@+...+@$$%$#@+...@##@++.+..++@++....+@##@+.+.+.........+.....+..",
+"+#$%##+.....++#$$$#+.+@#@@@+..+++@@@@++....@@@@++...++#@##++...+@@++....++@+@+..+.@@@@@@@..@#$$#@+.+.++@@@@@+....@@@+........+...+..++@@.......+..+.+.....+.....",
+".@###+.+.+....+###++....+.+.......++.+.+.....+.........++.+.+.................+..+.......+.+@#@@@.....+.++....+...+.+.+.................+..............+.....+..",
"..+.++....+....+++.+.+..+.+...+.+..+.....+.+....+.+.++.........+.+.+....+.+++......+.+......++@...........+.............+..+.+.....+.+....+.+...+...+.....+.....",
-".......+...+.+...........++++....+++++.......+......+@++@@+.+...+++..+..+@@@@@@.+......+......@@@++.+..+.++.+.+.+.+.+...........+..............++@++...+.+.+.+..",
-".+...............+.+.+.+@$$+....++$$$@+...+.+.+.+.+@$$$$$$@+..++@$@.....+$###$@...+++@+.+.++@@$$@@....++@@@@..........+.+....+.......+.+....++@@$$$@+....@@$++..",
-"...+.+...+.+.+.+......+@$%#$@+.+@##%#@++.++@@@@@+.+@#%##%%#++..@##@+.+.+@#####@@+..@.@@@...@$#%%%#@@..+@$$#@+.......+.....+.+.+.+.+......+...+$%%%%$@+.+@$##$++.",
-".............+.++....++$#%%$@..+@####@+..+@####$@.+@#%#%%#$+..++##$+...@$%%##@@...@+++@.+.+@#%%%%#$@..@@##%$+.+.+++++++..+@@@@@@@...........+@#%&%%#$@..+$$$$+..",
-".+...+.+.....+@@+.+..+@$###$@+++$###@@.+.@$####$@@.+$#%#%#@.+..@##@+.++@#%%###@@.......+..+@#%%%%#$@.+@$###$@...@@@@$@@+.@$#####$@+.++@+@+.++@#%%%%##@+..+@@++..",
-".........+...+@$@+..++$$#$#$+..@$###@+...@$##$##$+.+@$%##$@+..++$#@+..+@#%%%##$@....+....+@$#%####$@+.@$#%%$@.+@@#$#$$@@.@$#%#%%#@.@@@@@@@+.@$#%%%%#$@+...+.....",
-"..+.+.......+@$$$++..+$$#$$@+++@#%%#@+..+@$#$##$@++.@$%%#@+....@$$@+..+@#%##%%$@++........@$%%%%%##@.@@##%%$@+.$$%###$@+.@@@$$#%#@+@@$###$@++@######$@+.........",
-"......+..+...$#%$@...+@$###$+..@#%%#@@+..@$#####$+.+@$%%%@@+..++$$@+..++@###%##+....+.....@$%%%%%#$@..@#%%#@@.@$%##%#$@...+.@@@#$@.@@@$$$@+.@@#%%###$@...+.+..+.",
-"+...........+$%%#@+..++$###$+++@$%%#$$@++@$$####@+..@$%%#$+....@##@+...+@$##%%@@.+.....+..+@$%#%#$@+@.@@#$$@+.+$#%####@@......@@@+..+@@++++.+@$##%%#@++.........",
-"..+.+.+..+..+@%&#@+...++$%#@+.+$#%%%%#$+.+@$$$$$++.+@#%%%$@+..+@#%$+...@$###%$@+....+......@@$###@@....+@@+....@@$$$$$@@....+..+............++@####$@.+...+.+...",
-"............+$%%#@+....+@$$@...@##%###@++.++++++..+.@$#%#@+....@##@+..++$##%#@@..+.....+....+@$$@@.+............@@@$@@@+.+........+.....+.....@@$#$++...........",
-"+......+.....@$#$++.....+@++.+.+@$@$$@@.............+@@@@++.+..@$#@+...+@$#$$@......+....+..++@@++........+..+..+++@@+.......+.+....+..........++@+...+.+..+.+..",
-"..+.+.....+..+$@@...+.+..........++.++.+..+.+..+...+..+++.....+.+@++....+@@+@.+..+.................+.+.+.................+.+......+...+...+.+.+.+..+............",
+"*======*...+.+...........++++....+++++.......+......+@++@@+.+...+++..+..+@@@@@@.+......+......@@@++.+..+.++.+.+.+.+.+...........+..............++@++...+.+.+.+..",
+"-=%%%%=-.........+.+.+.+@##+....++###@+...+.+.+.+.+@######@+..++@#@.....+#$$$#@...+++@+.+.++@@##@@....++@@@@..........+.+....+.......+.+....++@@###@+....@@#++..",
+";%%%%%%;.+.+.+.+......+@#%$#@+.+@$$%$@++.++@@@@@+.+@$%$$%%$++..@$$@+.+.+@$$$$$@@+..@.@@@...@#$%%%$@@..+@##$@+.......+.....+.+.+.+.+......+...+#%%%%#@+.+@#$$#++.",
+";%%%%%%;.....+.++....++#$%%#@..+@$$$$@+..+@$$$$#@.+@$%$%%$#+..++$$#+...@#%%$$@@...@+++@.+.+@$%%%%$#@..@@$$%#+.+.+++++++..+@@@@@@@...........+@$%&%%$#@..+####+..",
+">%%%%%%>.....+@@+.+..+@#$$$#@+++#$$$@@.+.@#$$$$#@@.+#$%$%$@.+..@$$@+.++@$%%$$$@@.......+..+@$%%%%$#@.+@#$$$#@...@@@@#@@+.@#$$$$$#@+.++@+@+.++@$%%%%$$@+..+@@++..",
+";%%%%%%>.+...+@#@+..++##$#$#+..@#$$$@+...@#$$#$$#+.+@#%$$#@+..++#$@+..+@$%%%$$#@....+....+@#$%$$$$#@+.@#$%%#@.+@@$#$##@@.@#$%$%%$@.@@@@@@@+.@#$%%%%$#@+...+.....",
+";%%%%%%;....+@###++..+##$##@+++@$%%$@+..+@#$#$$#@++.@#%%$@+....@##@+..+@$%$$%%#@++........@#%%%%%$$@.@@$$%%#@+.##%$$$#@+.@@@##$%$@+@@#$$$#@++@$$$$$$#@+.........",
+">%%%%%%,.+...#$%#@...+@#$$$#+..@$%%$@@+..@#$$$$$#+.+@#%%%@@+..++##@+..++@$$$%$$+....+.....@#%%%%%$#@..@$%%$@@.@#%$$%$#@...+.@@@$#@.@@@###@+.@@$%%$$$#@...+.+..+.",
+">%%%%%%,....+#%%$@+..++#$$$#+++@#%%$##@++@##$$$$@+..@#%%$#+....@$$@+...+@#$$%%@@.+.....+..+@#%$%$#@+@.@@$##@+.+#$%$$$$@@......@@@+..+@@++++.+@#$$%%$@++.........",
+";%%%%%%;.+..+@%&$@+...++#%$@+.+#$%%%%$#+.+@#####++.+@$%%%#@+..+@$%#+...@#$$$%#@+....+......@@#$$$@@....+@@+....@@#####@@....+..+............++@$$$$#@.+...+.+...",
+";%%%%%%;....+#%%$@+....+@##@...@$$%$$$@++.++++++..+.@#$%$@+....@$$@+..++#$$%$@@..+.....+....+@##@@.+............@@@#@@@+.+........+.....+.....@@#$#++...........",
+"-=%%%%='.....@#$#++.....+@++.+.+@#@##@@.............+@@@@++.+..@#$@+...+@#$##@......+....+..++@@++........+..+..+++@@+.......+.+....+..........++@+...+.+..+.+..",
+"*=====)...+..+#@@...+.+..........++.++.+..+.+..+...+..+++.....+.+@++....+@@+@.+..+.................+.+.+.................+.+......+...+...+.+.+.+..+............",
"....+.+.......+.+......+++.+.+.+..+...........................+.@++++.+....+........+.+..+...+.+..........+.........+.+..@+@...+...@@++.....++@+++......+....+..",
-"+..++@+++..+.+.+..+....+@@@.....+@@@@+.+.....++.+.+..+.....+.++@$$$@@+..+.....+..+.........+..@@++.....++@.+.+.+.+......+@@$@+....+@@@@.+.+.+@$@@++.++....+.+...",
-".++@@@@+.....++@+...+.+@@$@@....+@$$@+...+.++++........+.....@@###%#@+.....+..........+.....+@$$@..+..+@@@@.............@@#$@.+++.@@#$@+++++@@##@@@+++....+.+.+.",
-"..@@#$$@++...@$$@++..++@$$@@.+..@@$#$@+....+@@@++...+.+.+++.+$#%%%%#$++.+......+.+.+.....+...@##$@....@@$$$@@....+.+.+..+@#$@@.@@@+$$#@+@@@@@$###@@@@+.+..+@+...",
-".+@@#$$@++.+@$#%$@+...@@$#$@...++$$#$@+....+@@@..+++@@++@++.+$%%%%#$@....+.+...+.+....+....+.$%%$+.+.+@$$$$$@.++.@.@.+..+@$#$@@@@@+@$#@@@$$@@@$##$$@@@...++@@+..",
-"..+@$$$@+..@$#%%%#@@..@$#$@++...@$##$@+.+.+.++++..+@$$@@$@@++@%%&%%$@@...+@@@.+.++.@........+@#%$@....$$##$@@..+$@$@$@@.+$$$$$$#@@@@$##$##$@@$######@++..+@$$++.",
-"..++@@@++.++#%%&%#$@.++@#$$@..+.@$$$$+............@$##$$#$@++@##&%#$@...+@@$@..+.++..+.+.....$##$@..+.@$#$$$@.@@$$###$@.@@#$#$##$@@@#$##$#$$@$$#####@+..++$#$+..",
-"....+++....+$#%%#$@+..+@$@@++...+@$@@++...+..+....+$##$@$#@@.+@#%%%$@@...@$@@++.++.+......+..@$#@++..+@##%$$++.@$###%#$++@$$###%#@@@$$#$##$$@@$##%%#$+.++@$#$@+.",
-"..+........++@###@+...+++++...+..+@+...........+...@###$###@.++$%%#$@....+@@..++.+++.@.+.....+@@+.....@#%%#@@.+@$###%%@+.@@$#$%%#@+@$#$$$#$@@@@###%%$@.+@$$$$++.",
-"........+..++$$#@@.+.................+..+.+.......+@$######@..+@%%%$@@+......+.++..@@$@+..+.....+....+@$##$@+.+@$###%#@+.@$$$##%%@+@$$$$$$$@+@$$##%%#+++@##$$@++",
-".+.+.+.....+@$##$$@+..+..+.+...+..+.........+..+..+@#######@+.@$%%%#$.....+.++.++.@@$#$@..........+....@$$@+..+@$$$##$@..@@$$##%%@+@@$@$$$$@+@$$$#%%$+.@@$#$#$@.",
-"........+.++$#####@+.................+.............@$##$@@@+..@#%%%#$@++..++.++.+..$#%$@+...+.+................@@@$$@@+..+@@@@$##+++@++@$$$@+@@@@@##$+.+@$###$@+",
-".....+.....++@$@$@@+...+...+.+..+.+....+.+..+..+.+.@$$@@+..+.++@###$$+...+.++.++.++@$#@+........+.+.+....+..+..+.@..+....+.++++@@+....++@@@+.+.++++@++..+@$#$@+.",
-".+.+..........++++..+....+..........+..............+@@@+.+.....@@@@@+..+.++.++.++..@$$@+..@...@.+......+.+..........................+...++....+..+.+......@@@+..",
+"+..++@+++..+.+.+..+....+@@@.....+@@@@+.+.....++.+.+..+.....+.++@###@@+..+.....+..+.........+..@@++.....++@.+.+.+.+......+@@#@+....+@@@@.+.+.+@#@@++.++....+.+...",
+".++@@@@+.....++@+...+.+@@#@@....+@##@+...+.++++........+.....@@$$$%$@+.....+..........+.....+@##@..+..+@@@@.............@@$#@.+++.@@$#@+++++@@$$@@@+++....+.+.+.",
+"..@@$##@++...@##@++..++@##@@.+..@@#$#@+....+@@@++...+.+.+++.+#$%%%%$#++.+......+.+.+.....+...@$$#@....@@###@@....+.+.+..+@$#@@.@@@+##$@+@@@@@#$$$@@@@+.+..+@+...",
+".+@@$##@++.+@#$%#@+...@@#$#@...++##$#@+....+@@@..+++@@++@++.+#%%%%$#@....+.+...+.+....+....+.#%%#+.+.+@#####@.++.@.@.+..+@#$#@@@@@+@#$@@@##@@@#$$##@@@...++@@+..",
+"..+@###@+..@#$%%%$@@..@#$#@++...@#$$#@+.+.+.++++..+@##@@#@@++@%%&%%#@@...+@@@.+.++.@........+@$%#@....##$$#@@..+#@#@#@@.+######$@@@@#$$#$$#@@#$$$$$$@++..+@##++.",
+"..++@@@++.++$%%&%$#@.++@$##@..+.@####+............@#$$##$#@++@$$&%$#@...+@@#@..+.++..+.+.....#$$#@..+.@#$###@.@@##$$$#@.@@$#$#$$#@@@$#$$#$##@##$$$$$@+..++#$#+..",
+"....+++....+#$%%$#@+..+@#@@++...+@#@@++...+..+....+#$$#@#$@@.+@$%%%#@@...@#@@++.++.+......+..@#$@++..+@$$%##++.@#$$$%$#++@##$$$%$@@@##$#$$##@@#$$%%$#+.++@#$#@+.",
+"..+........++@$$$@+...+++++...+..+@+...........+...@$$$#$$$@.++#%%$#@....+@@..++.+++.@.+.....+@@+.....@$%%$@@.+@#$$$%%@+.@@#$#%%$@+@#$###$#@@@@$$$%%#@.+@####++.",
+"........+..++##$@@.+.................+..+.+.......+@#$$$$$$@..+@%%%#@@+......+.++..@@#@+..+.....+....+@#$$#@+.+@#$$$%$@+.@###$$%%@+@#######@+@##$$%%$+++@$$##@++",
+".+.+.+.....+@#$$##@+..+..+.+...+..+.........+..+..+@$$$$$$$@+.@#%%%$#.....+.++.++.@@#$#@..........+....@##@+..+@###$$#@..@@##$$%%@+@@#@####@+@###$%%#+.@@#$#$#@.",
+"........+.++#$$$$$@+.................+.............@#$$#@@@+..@$%%%$#@++..++.++.+..#$%#@+...+.+................@@@##@@+..+@@@@#$$+++@++@###@+@@@@@$$#+.+@#$$$#@+",
+".....+.....++@#@#@@+...+...+.+..+.+....+.+..+..+.+.@##@@+..+.++@$$$##+...+.++.++.++@#$@+........+.+.+....+..+..+.@..+....+.++++@@+....++@@@+.+.++++@++..+@#$#@+.",
+".+.+..........++++..+....+..........+..............+@@@+.+.....@@@@@+..+.++.++.++..@##@+..@...@.+......+.+..........................+...++....+..+.+......@@@+..",
".+.@++.+...+..+++.....+++@.+..+.++@@+....+..+....+..++@++.......+...+..+.++.++.+.++@@@...+.+.++@@.@.+.+@@@@.+..+.@.++.+..+++++...+....++++.+..++@@++.+.+....+...",
-"..+@@@+.......+@@++....@@@++....+@@@@@+....+++@+.....@@@@+..+.++@@@@@+.++.@@@@++..@$$@@++.++.+@@@@....@@$$@@....+@@@+@+...+@@+++....+.+@@++....@$@@+.....++++++.",
-".++@$@++...+++@$@+..+++@$$@@..++@###$+..++@@@@@+.+.++@$$@+....@@####$@.@@$$$$$@.@+@$#$$@.+.@@@$$$$+.+@@$##$@@.+@@$$$$@@..+@@$$@+.+..++@$@@+..++@$$$@+.++++@@@++.",
-".+@$#$@.+...@@#$@+...+@$##@++..@@###$@+..+@$$$@@...+@$##@@...+@#%%%%#@@$$##%##$+@@##%##$@@.@###%#$@+.$###%#$@++@#####$@+..@$##$@+..++$$#$@@.++@$###@++..$$$$$$++",
-".+@#%##+...+@###$@...@$###$@...@$#%#$@...@$#%#$@...+@###$++...@#%%###@@$%#$$#$$@@$#%%%%%@+@@#%%%%#$++$#%%%%%@++$#%%%%%@+.@@####@@+.+@##%#$@..+$$#%#$+.++$#%%#$+.",
-".+@#%%#@.+.+@#%%$@++.+@#%%$@+.++@#%%$@+..@@$%%$@+..+@#%%$@+..@$#%#%$$@$#%#@@@$@+@@####%%@.+$####%#@.+@####%#$.@$####%#@+.+@$%%#@+..+@$%%#@++.+@$%%#@++..@$#%#@@.",
-".+@##%#@+..+@##%#@.+.+@##%#@+..+@#%##$+..+@#%%#@+..+@##%#@+..@@%#%##@+@#%$@++++..@$####$@.@+$####$@+.@$####$@.+@$####$@...@@%%#++...@@#%#@....+$#%#@..+.+$#%#+.+",
-"++$##%##@+.@$##%##@.++$#%#%#@+.+$#%%#$@@.@$#%#%$@+++$#%#%$@++@$%%%##@@@#%$@.+.@.@@$#%##$@..@##%##$@.+@##%##$@+.@##%##@@+..+@#%$+....+$#%$++...+@#%$++....@#%$+..",
-".@#%#%%#$@+@#%#%##$@+@##%#%#$@+@#%##%#$@.@##%#%#$++@##%#%#$@@@%%%%#$@+@#%#$@$$@.+@#%#%#$@+.@##%##$@.+@$%#%#$@.+@##%#%$@+..+@#%$@+...+@#%$+....+@#%$@..+.+$#%$+..",
-"@##%##%%#@@$#%##%%#@@$%%##%%#@@$#%##%%#@@$%%##%%#@@$#%%#%%#@@##%%%#$$@+$#%##$#@+@@#%####@@@@#%####$@+$######@@@@#%####@++.@$#%#++..+@$#%#@++.++$%%$@+...+$%%#@+.",
-"+$%%###%#@@$%%#$#%#@@$%%###%#@@#%%#$#%#@@$%##$#%#@@#%##$#%#@$#%#%%%##@+@$####$@+@$%###%#$@@$%%##%#$@@$#%##%#$@@$%####%$@++@##%#@@.+.@#%%$@+..+@$#%#@@++.$$%%#$+.",
-"@$##$$##$@@@##$$###@@@##$$###@@@$#$@###@@@##$$$##@+@##$$###@@$######$@..@$##$@+.@$#%####$@@$###$##$+@$###$##@@@$#%####@+.+@$###@++.@@$###$++.+@$#%$$+..+@$##$$++",
-".+@@@@@@@+++@@@@@@@+++@@@@@@@++@@@@@@@@+++@@@@@@+++@@@@@@@@@@@@@$$$$@@+.@$$$@....@@$@@$@@.+@$$$$@@@..@@$$$@$@.+@@@@@@@@...@@@@$+....+@$$@@+..+@@@$@+++..+@$$@+..",
+"..+@@@+.......+@@++....@@@++....+@@@@@+....+++@+.....@@@@+..+.++@@@@@+.++.@@@@++..@##@@++.++.+@@@@....@@##@@....+@@@+@+...+@@+++....+.+@@++....@#@@+.....++++++.",
+".++@#@++...+++@#@+..+++@##@@..++@$$$#+..++@@@@@+.+.++@##@+....@@$$$$#@.@@#####@.@+@#$##@.+.@@@####+.+@@#$$#@@.+@@####@@..+@@##@+.+..++@#@@+..++@###@+.++++@@@++.",
+".+@#$#@.+...@@$#@+...+@#$$@++..@@$$$#@+..+@###@@...+@#$$@@...+@$%%%%$@@##$$%$$#+@@$$%$$#@@.@$$$%$#@+.#$$$%$#@++@$$$$$#@+..@#$$#@+..++##$#@@.++@#$$$@++..######++",
+".+@$%$$+...+@$$$#@...@#$$$#@...@#$%$#@...@#$%$#@...+@$$$#++...@$%%$$$@@#%$##$##@@#$%%%%%@+@@$%%%%$#++#$%%%%%@++#$%%%%%@+.@@$$$$@@+.+@$$%$#@..+##$%$#+.++#$%%$#+.",
+".+@$%%$@.+.+@$%%#@++.+@$%%#@+.++@$%%#@+..@@#%%#@+..+@$%%#@+..@#$%$%##@#$%$@@@#@+@@$$$$%%@.+#$$$$%$@.+@$$$$%$#.@#$$$$%$@+.+@#%%$@+..+@#%%$@++.+@#%%$@++..@#$%$@@.",
+".+@$$%$@+..+@$$%$@.+.+@$$%$@+..+@$%$$#+..+@$%%$@+..+@$$%$@+..@@%$%$$@+@$%#@++++..@#$$$$#@.@+#$$$$#@+.@#$$$$#@.+@#$$$$#@...@@%%$++...@@$%$@....+#$%$@..+.+#$%$+.+",
+"++#$$%$$@+.@#$$%$$@.++#$%$%$@+.+#$%%$#@@.@#$%$%#@+++#$%$%#@++@#%%%$$@@@$%#@.+.@.@@#$%$$#@..@$$%$$#@.+@$$%$$#@+.@$$%$$@@+..+@$%#+....+#$%#++...+@$%#++....@$%#+..",
+".@$%$%%$#@+@$%$%$$#@+@$$%$%$#@+@$%$$%$#@.@$$%$%$#++@$$%$%$#@@@%%%%$#@+@$%$#@##@.+@$%$%$#@+.@$$%$$#@.+@#%$%$#@.+@$$%$%#@+..+@$%#@+...+@$%#+....+@$%#@..+.+#$%#+..",
+"@$$%$$%%$@@#$%$$%%$@@#%%$$%%$@@#$%$$%%$@@#%%$$%%$@@#$%%$%%$@@$$%%%$##@+#$%$$#$@+@@$%$$$$@@@@$%$$$$#@+#$$$$$$@@@@$%$$$$@++.@#$%$++..+@#$%$@++.++#%%#@+...+#%%$@+.",
+"+#%%$$$%$@@#%%$#$%$@@#%%$$$%$@@$%%$#$%$@@#%$$#$%$@@$%$$#$%$@#$%$%%%$$@+@#$$$$#@+@#%$$$%$#@@#%%$$%$#@@#$%$$%$#@@#%$$$$%#@++@$$%$@@.+.@$%%#@+..+@#$%$@@++.##%%$#+.",
+"@#$$##$$#@@@$$##$$$@@@$$##$$$@@@#$#@$$$@@@$$###$$@+@$$##$$$@@#$$$$$$#@..@#$$#@+.@#$%$$$$#@@#$$$#$$#+@#$$$#$$@@@#$%$$$$@+.+@#$$$@++.@@#$$$#++.+@#$%##+..+@#$$##++",
+".+@@@@@@@+++@@@@@@@+++@@@@@@@++@@@@@@@@+++@@@@@@+++@@@@@@@@@@@@@####@@+.@###@....@@#@@#@@.+@####@@@..@@###@#@.+@@@@@@@@...@@@@#+....+@##@@+..+@@@#@+++..+@##@+..",
".++.+.++....++@+@++....+.+.+....+.+.+.....++++.+....+++++++..+.+++.+.....@@@+.....+.+.+.....+++@++.....+++@+....+@@@++.+....+++.+..+..++@.+.....++.+......+.++..",
-"..+.+..+..+.@@$$@@@.+.++++........++@+.....++@.+.....++@+.+......+............+.........+...+++.....+...+++......+@@.....+..........+.@@@+...+.+.....+..+.+.....",
-"..+@++++.+.@$$###$++..+@@+++..+..++@@++.+.+@$@@+.+.+@@$$$@+..+.+@++@.+.+........+...+.......+@@@++......@@@@+.+.@@$$@+....+++++.+....@@$@++.+.++++.......+@@@+..",
-"+@@$@$@@@++@######@+..@@$@+.....++@$@+....+@#$$@....@$###@@..++@@@@@....+.+.+.+...+.++@++..+@$$@@+.+.++@@@@@...++@#$$@+.+.+@@@@@+.++@@$$$@+.++@@@++..+.++$$#$@+.",
-"+$###$##$@@$######@@.+@$$#@@++..@@$#$@@..+@$$#$@+.+@@$#%#$@+..@$$$$@@..+@@.+.@@.++.@@@$@++.+$$$$$@@+.@@@$#$@@.+@@#$#$$+++@@$$$$@++@@$$$#$$+++@##$@@++...@$###@+.",
-"@$%%##$##@@$#%##%%#@++$##$#$@.@@@####$@.++$#$###@.+@$#####@.@@$$$##$@+.@@$@@$$@.++@$$###@@+$$#$$##@@+@##$$##$@+$##$$##@++$#$$$##$@@$##$###$++@#%##$+++++$##%%$@+",
-"@$#%##$$$@@$###%%%$+@@######@++$######@++@$#####@+@@#$$###$.@@##$###$++@$##$##@++$####%%@@@###$$#%$@@$##$##%$@@$##$####@@$##$$#%$@@#%#####@++@$%###$@+.+$$%#%#@.",
-"@#%%#$$$#@@$##%%%%#@@###$$##$@@#%#$$##$@@###@$##$@@###$$##$@@###$$##$@.@$#%#%$@+@$%###%#$@@$#$$$#%$@@$#$@$%%$@@$#$@$%%$@@##$@$#%#@@$######@+.@$##$##$@++$#%%%#$+",
-"@$%%#$$$$$@$$###%%$@@#%#@@$#$@@#%#@@$$$@@#%#@@$#$@@#%#@@$$$@$#%$$@$#$@.+$$%%%$@+@#%%#$##$@@$$$@@##$@@$#$@@#%$@@$#$@$#%#@@@#$@$%%$++@$#%##@+.+@$#$$##$@.+$$###%$@",
-"+$##$$$$$$@$$###%%#@@###@@$#$@$#%$@@##$@@###@@$#$@$#%$@@##@@@#%$@@$#$@++$#%##$@.@#%#$$$#$@@$$$$$#%$@+@$$@$#%$@+@#@@$#%$@@@$$@$#%$+.+$#%%$@+..@$%####$@.@$####%#@",
-"+$###$$#$@@#####%##@@###$$##$@@###$$##$@@###$$##$@@$##$$##$@@###$$##$@.@$#####@@@##%###$$@@@#$$#%%@++$$#$#%#$++$$###%#$+@$#$##%#$+.+@#%%$++.+$#%%###@++@$####%#@",
-"+$%%%%%#$@@#%#$#%%$@+@$#####@++@$##%##@@+@$#####@+@@$##%##@@@@$##%##@+.@$$$@$$@@+$#%#%%#@.@@$#%%##@+.@$##%%#@+.@$##%%#@+.@$#%%%#@+.+@%%%$@+.@$%%##$@+..@####%%#@",
-"@$#%#%##$+@$%#$$##@+.+@##%#$@..@@$%##$@+.+@##%#$@.++@$#%#$@..@$$%##$@...@@@.@+@.@$$##%#$@..@@#%%#$@.++@#%##$++.+$#%##$@.+@$##%#$@..+$#%%#++.+$###@+...+@#%####$@",
-"+@@$$$@@+.+@$@@@@@++..+@@$@@.+.++@@$@@....+@@@@++..++@@@@++...+@@$@+..+..........@@$$@@@...++@@$@@...++@$@@+....@@$$@@...++$$@@@.+.++@$@@+..+@$@@+..+..+@@@@$@++",
+"..+.+..+..+.@@##@@@.+.++++........++@+.....++@.+.....++@+.+......+............+.........+...+++.....+...+++......+@@.....+..........+.@@@+...+.+.....+..+.+.....",
+"..+@++++.+.@##$$$#++..+@@+++..+..++@@++.+.+@#@@+.+.+@@###@+..+.+@++@.+.+........+...+.......+@@@++......@@@@+.+.@@##@+....+++++.+....@@#@++.+.++++.......+@@@+..",
+"+@@#@#@@@++@$$$$$$@+..@@#@+.....++@#@+....+@$##@....@#$$$@@..++@@@@@....+.+.+.+...+.++@++..+@##@@+.+.++@@@@@...++@$##@+.+.+@@@@@+.++@@###@+.++@@@++..+.++##$#@+.",
+"+#$$$#$$#@@#$$$$$$@@.+@##$@@++..@@#$#@@..+@##$#@+.+@@#$%$#@+..@####@@..+@@.+.@@.++.@@@#@++.+#####@@+.@@@#$#@@.+@@$#$##+++@@####@++@@###$##+++@$$#@@++...@#$$$@+.",
+"@#%%$$#$$@@#$%$$%%$@++#$$#$#@.@@@$$$$#@.++#$#$$$@.+@#$$$$$@.@@###$$#@+.@@#@@##@.++@##$$$@@+##$##$$@@+@$$##$$#@+#$$##$$@++#$###$$#@@#$$#$$$#++@$%$$#+++++#$$%%#@+",
+"@#$%$$###@@#$$$%%%#+@@$$$$$$@++#$$$$$$@++@#$$$$$@+@@$##$$$#.@@$$#$$$#++@#$$#$$@++#$$$$%%@@@$$$##$%#@@#$$#$$%#@@#$$#$$$$@@#$$##$%#@@$%$$$$$@++@#%$$$#@+.+##%$%$@.",
+"@$%%$###$@@#$$%%%%$@@$$$##$$#@@$%$##$$#@@$$$@#$$#@@$$$##$$#@@$$$##$$#@.@#$%$%#@+@#%$$$%$#@@#$###$%#@@#$#@#%%#@@#$#@#%%#@@$$#@#$%$@@#$$$$$$@+.@#$$#$$#@++#$%%%$#+",
+"@#%%$#####@##$$$%%#@@$%$@@#$#@@$%$@@###@@$%$@@#$#@@$%$@@###@#$%##@#$#@.+##%%%#@+@$%%$#$$#@@###@@$$#@@#$#@@$%#@@#$#@#$%$@@@$#@#%%#++@#$%$$@+.+@#$##$$#@.+##$$$%#@",
+"+#$$######@##$$$%%$@@$$$@@#$#@#$%#@@$$#@@$$$@@#$#@#$%#@@$$@@@$%#@@#$#@++#$%$$#@.@$%$###$#@@#####$%#@+@##@#$%#@+@$@@#$%#@@@##@#$%#+.+#$%%#@+..@#%$$$$#@.@#$$$$%$@",
+"+#$$$##$#@@$$$$$%$$@@$$$##$$#@@$$$##$$#@@$$$##$$#@@#$$##$$#@@$$$##$$#@.@#$$$$$@@@$$%$$$##@@@$##$%%@++##$#$%$#++##$$$%$#+@#$#$$%$#+.+@$%%#++.+#$%%$$$@++@#$$$$%$@",
+"+#%%%%%$#@@$%$#$%%#@+@#$$$$$@++@#$$%$$@@+@#$$$$$@+@@#$$%$$@@@@#$$%$$@+.@###@##@@+#$%$%%$@.@@#$%%$$@+.@#$$%%$@+.@#$$%%$@+.@#$%%%$@+.+@%%%#@+.@#%%$$#@+..@$$$$%%$@",
+"@#$%$%$$#+@#%$##$$@+.+@$$%$#@..@@#%$$#@+.+@$$%$#@.++@#$%$#@..@##%$$#@...@@@.@+@.@##$$%$#@..@@$%%$#@.++@$%$$#++.+#$%$$#@.+@#$$%$#@..+#$%%$++.+#$$$@+...+@$%$$$$#@",
+"+@@###@@+.+@#@@@@@++..+@@#@@.+.++@@#@@....+@@@@++..++@@@@++...+@@#@+..+..........@@##@@@...++@@#@@...++@#@@+....@@##@@...++##@@@.+.++@#@@+..+@#@@+..+..+@@@@#@++",
"..+++++..+...+.+.+......++........++.+.+.....++.......++.........+.+...............+.+..+.....+.+.+....+.++.+.....+.+......+.++......+.+..+.+..+.+.......++.+...",
"...........+...+...+.+.....+....+........+.........+...+..+...+.......+.+.+.+...+..+.......+............+.....+.+.....+....+...........+.....+....+...+.......+.",
"+.++++.+.......+++.....++++..+...+++.+.....+.+..+....+@@+..+.......+..............+.@++.+....+.+@@+..+..+++........+.....+.+++.+.+.+...++++....+++.+.......+....",
-"..++@+...+.+.++@@@....++@@@....++@@$@+.+..+++++....+.+@@@.....+.+...++.+.++.@.....@@@+........@@@+....++@@@+....+++++.+...++@+......+.++@+...+++@@+.+..+++++....",
-"..+@$@@+.....@@$@@.+..+@$$@++..+@###$++...+@@@@++...+@@$@++..+.+.+.+.++.++..+.++..+@$$@+.+.+.+@@@@++...@$$@+++..+++@@++...+@$@++.....+@@@++..+@$$@+.....++@@++..",
-".++$$$@+..+++@$$$@..+.@$##$@...+@###$@+.++@$$$@@..+.@$##@@..+@@@@@@@@.+++@@$$@@.+.@$##$@...++@$#$@..++@$##$@+.+.@$$$$@@.+.+@#@@+..+.+@$$@+...+@$#$@+.+.+$$$$+.+.",
-"++@##%#@+..+@###$@+..@@####@+.++$#%%#@+..+@####@@..@@$%##@++.$$####$$@.@@#$###$@+@$##%#$$@.@@##%##@+.+$#####@++@$#####@+.+@$##@+....+$##@++..+@##$++...+@###@...",
-".+$##%#$@.++$####$@.++$###%$@..@$##%##+.+@$###%$@.++$##%#$@+@$#%%%###@@@#%#$###@+@#%##%%$@@@#%#%#%$@+@#%###%#++@%%##%%#+..+$#%@+..+.+$#%$....+@#%#@+.+.+@#%#@+..",
-"+@$###%#++.@$##%%$@+.@$###%$@.+@$#%#%$++.@$##%%$@+.@$##%%$@.@$$%%%###@@$%##$$#$@@$%%###%#@@$#%##%%#@+$#%##%##@@$%%###%#@+.+$#%$+....+$#%$+.+.+@$%#@.....+$%%$...",
-"+@#%%##$@++@###%##@.+@#%#%#$@+.@###%##++.@#%##%$@+.@#%###$$+@$#%%%###$+@%##$$$$@@$%%###%#@@#%%#####@+$%%#####@@$%%#####@..+@#%$@....+@%%$@....@$%#$.+.+.@$%#$+..",
-"+$#%###$@.+@%%###$@++$#%####@+@$%%###$@+@$#%#%##@.@$#%###$@@@##%%%%##@.@####$#$@@$#%####$@+$#%####$@@$#%%####@+$#%%###$@+.@$#%#@++.++$#%$@+..++#%#$+...+@$%#$++.",
-"+$#%##%#$+@@#%##%#@++$#%####@++@#%####@+.$######@@.@%%##%$$@@#%%%%%##@+.$$%%#$$..@#####%$@+@#######++@####%#$@+@#######+++@$%##@+..+@#%%#@@+.+@#%#$$++.+$#%%$@+.",
-"++$#$##$@++@$#$#$$@+.@$#$##$@++@$#$##$@++@$#$##$@++@$$#$#$@@+$###$#$$@..@@###@+@.+@$#$$$@+.+@$$##$@+.+@$####@+..@$$#$$@+.+@$###@++.+@$$#$$+.++$$##$@+..+@$##$$+.",
-".++$@@$@@..++@@@@@++.++@@@@@+.++@@@@@@+..++@@@@@@...@@$@@@+..@@@@@@@+....@##$@....++@@@@+...+@@@@@....++@@@+.....@@@@@....+@@@@@+...@@@$@@+.+.@@@$@++..++@@$@++.",
+"..++@+...+.+.++@@@....++@@@....++@@#@+.+..+++++....+.+@@@.....+.+...++.+.++.@.....@@@+........@@@+....++@@@+....+++++.+...++@+......+.++@+...+++@@+.+..+++++....",
+"..+@#@@+.....@@#@@.+..+@##@++..+@$$$#++...+@@@@++...+@@#@++..+.+.+.+.++.++..+.++..+@##@+.+.+.+@@@@++...@##@+++..+++@@++...+@#@++.....+@@@++..+@##@+.....++@@++..",
+".++###@+..+++@###@..+.@#$$#@...+@$$$#@+.++@###@@..+.@#$$@@..+@@@@@@@@.+++@@##@@.+.@#$$#@...++@#$#@..++@#$$#@+.+.@####@@.+.+@$@@+..+.+@##@+...+@#$#@+.+.+####+.+.",
+"++@$$%$@+..+@$$$#@+..@@$$$$@+.++#$%%$@+..+@$$$$@@..@@#%$$@++.##$$$$##@.@@$#$$$#@+@#$$%$##@.@@$$%$$@+.+#$$$$$@++@#$$$$$@+.+@#$$@+....+#$$@++..+@$$#++...+@$$$@...",
+".+#$$%$#@.++#$$$$#@.++#$$$%#@..@#$$%$$+.+@#$$$%#@.++#$$%$#@+@#$%%%$$$@@@$%$#$$$@+@$%$$%%#@@@$%$%$%#@+@$%$$$%$++@%%$$%%$+..+#$%@+..+.+#$%#....+@$%$@+.+.+@$%$@+..",
+"+@#$$$%$++.@#$$%%#@+.@#$$$%#@.+@#$%$%#++.@#$$%%#@+.@#$$%%#@.@##%%%$$$@@#%$$##$#@@#%%$$$%$@@#$%$$%%$@+#$%$$%$$@@#%%$$$%$@+.+#$%#+....+#$%#+.+.+@#%$@.....+#%%#...",
+"+@$%%$$#@++@$$$%$$@.+@$%$%$#@+.@$$$%$$++.@$%$$%#@+.@$%$$$##+@#$%%%$$$#+@%$$####@@#%%$$$%$@@$%%$$$$$@+#%%$$$$$@@#%%$$$$$@..+@$%#@....+@%%#@....@#%$#.+.+.@#%$#+..",
+"+#$%$$$#@.+@%%$$$#@++#$%$$$$@+@#%%$$$#@+@#$%$%$$@.@#$%$$$#@@@$$%%%%$$@.@$$$$#$#@@#$%$$$$#@+#$%$$$$#@@#$%%$$$$@+#$%%$$$#@+.@#$%$@++.++#$%#@+..++$%$#+...+@#%$#++.",
+"+#$%$$%$#+@@$%$$%$@++#$%$$$$@++@$%$$$$@+.#$$$$$$@@.@%%$$%##@@$%%%%%$$@+.##%%$##..@$$$$$%#@+@$$$$$$$++@$$$$%$#@+@$$$$$$$+++@#%$$@+..+@$%%$@@+.+@$%$##++.+#$%%#@+.",
+"++#$#$$#@++@#$#$##@+.@#$#$$#@++@#$#$$#@++@#$#$$#@++@##$#$#@@+#$$$#$##@..@@$$$@+@.+@#$###@+.+@##$$#@+.+@#$$$$@+..@##$##@+.+@#$$$@++.+@##$##+.++##$$#@+..+@#$$##+.",
+".++#@@#@@..++@@@@@++.++@@@@@+.++@@@@@@+..++@@@@@@...@@#@@@+..@@@@@@@+....@$$#@....++@@@@+...+@@@@@....++@@@+.....@@@@@....+@@@@@+...@@@#@@+.+.@@@#@++..++@@#@++.",
"...++++.+....+++++......++++....+.+++.+...+.++++...+...+..+...+.+....+.+.+@@@+......+.++......+.+..+......+.+..+..+++..+....++++.....++++....+.+++.+.....++.+...",
".+.+.++..............+..............+................+.+..........+............+.........+....+......+.+..+.........+............+......+..+.+++.+...+..........",
-"+@$$$@@@+.+.+++@+++...++@+..+.+.+.+++++.+.++@@@@.+....@@@@@.+.+....+...+.+........+.+.......++++.+......++++.+.+.+@++...+.+........+.+.++++.+$$$+...........+...",
-"+@#%#%#$@..++@@$@+....+@@@+......++@@@.....@##@@...++@@$$@+...++++.@......@+.+.+.....+.+.+..+@@@.+....+++@@+....+@@@@+....++++++.....++@@@+++###@+++..++.+++.++.",
-"+$#%%##$@+.+@$##$@++..@@$@++.....+@$$@+..+@@###@++..@@#$#$@+...@@@@@++...+@@@.......++@@+..+@@$@@+++.++@@$@@+..+@$$#@+++.+@@@@@+++..+@@$$@+++@#$$@+++...@@@@@+++",
-"+$$##%##@+.@#####@..+.@$#$$@+.+.+@##$@+..+@$##$@+..+@$###$@.++@$$$$@+..+.@$$$+.+.+@@@$@@@@+@@$$$@@+.++@$$#$@@+++@#$#$@@.+@@$$$$$++++@@$$$$@++@$##$$@+.++$$$$$$@+",
-"+@##%%%#@@@$##%##$@+.@@####@@+.+@####$@+.@@###%$@+.+@####$@+.+$$###$@@..@$##@@+..+@$####$@+$##$$#$@++$##$$#$@+@@##$$$#@+@$##$@#$@+@$$#$$###++@$%####@++$##$$###@",
-".@#%%%%&#@@$%%####@.+@####%#@@+@######$++@####%#$@+@##%#%#$++@####%#$@+@$$###$@.+@###%%##@@$##$@$#@@+$##$$$#@@@$##$$$$$@+$###@$#@@+$###$###++@$%###%$++$%##$###@",
-"+$##%#%%#@@$######@++$#%#####@+$#######@+@%%###%#@@$%#####$@+$%%#$#%#@+@#%%%#$$++$%%##%%#@+@##$$$#@++@##$$$$@@@$##$$$#@@@$##$$$$@@+@######$@.@######$++@######$@",
-"+$%%#$#%#@@@###$$#@@+$%##$#%#@+$%#$$#%#@@#%##$#%#@@$%#$$#%#@@$%%#$#%#@.@$####$@.@$%%##%%#@@@$#$@$#@@+@$#$$$#$@+@$#$@$#@@+@##$$$#$+++$####$@+++#####%$+.+$####$@+",
-"+$%%###%#@@$###$##$+@$%%#####@+$#%###%#@+@%##$#%#@+$%%#$#%#@@$#%###%#@+.@$##$@+.+$%%%##%#@+@$#####$++@$#$##$$++@$###$#$++@$$###$$+.+@$%%#@+.+@$%###$++.+@$%%#$..",
-".@#%#%%#$@+$#######@+@#%%#%#$++@#%#%###@+@#%%%%#$@.@#%%%%#$@.$#%%#%#$@...@$$@...+@%%%%%#$@.@@###%##@.+@##%%#$@++@##%%##+.+$###%%$@+.@#%%$+..+@###$@@....$$%%$@..",
-"++$#%%##@+@$%####%$@.@@#%%##@+.@$#%%##@+.@$###%$@+++$##%#$@+.@@#%%%$@@...@@@@+..+@##%%##@.++@#%%%#$@++@#%#%%$+.+@$#%%#$@+.@##%%##+++$#%%$++.+$$%$$++..++$#%%$+..",
-".++@@$@@+.++$$@@@$@+.++@@$@@+...+@@$@@+...@@$$@@+...@@$$@@....@@@$@@+.....++....+@$$$$@@@...++@$$$@+..+@@$$$@+..+@@$$$@+..+@@$$$@+++$###@...+@$$$+..+..+$###@+..",
-"....+.+.....+.+.++......+++..+.+..+.+..+...++.+......++++++.....+.+....+...+.....++@+++.......+.++.+....++.+......++.+......++.+...+@$$@+.+..+@@+.+....+@$$@+...",
+"+@###@@@+.+.+++@+++...++@+..+.+.+.+++++.+.++@@@@.+....@@@@@.+.+....+...+.+........+.+.......++++.+......++++.+.+.+@++...+.+........+.+.++++.+###+...........+...",
+"+@$%$%$#@..++@@#@+....+@@@+......++@@@.....@$$@@...++@@##@+...++++.@......@+.+.+.....+.+.+..+@@@.+....+++@@+....+@@@@+....++++++.....++@@@+++$$$@+++..++.+++.++.",
+"+#$%%$$#@+.+@#$$#@++..@@#@++.....+@##@+..+@@$$$@++..@@$#$#@+...@@@@@++...+@@@.......++@@+..+@@#@@+++.++@@#@@+..+@##$@+++.+@@@@@+++..+@@##@+++@$##@+++...@@@@@+++",
+"+##$$%$$@+.@$$$$$@..+.@#$##@+.+.+@$$#@+..+@#$$#@+..+@#$$$#@.++@####@+..+.@###+.+.+@@@#@@@@+@@###@@+.++@##$#@@+++@$#$#@@.+@@#####++++@@####@++@#$$##@+.++######@+",
+"+@$$%%%$@@@#$$%$$#@+.@@$$$$@@+.+@$$$$#@+.@@$$$%#@+.+@$$$$#@+.+##$$$#@@..@#$$@@+..+@#$$$$#@+#$$##$#@++#$$##$#@+@@$$###$@+@#$$#@$#@+@##$##$$$++@#%$$$$@++#$$##$$$@",
+".@$%%%%&$@@#%%$$$$@.+@$$$$%$@@+@$$$$$$#++@$$$$%$#@+@$$%$%$#++@$$$$%$#@+@##$$$#@.+@$$$%%$$@@#$$#@#$@@+#$$###$@@@#$$#####@+#$$$@#$@@+#$$$#$$$++@#%$$$%#++#%$$#$$$@",
+"+#$$%$%%$@@#$$$$$$@++#$%$$$$$@+#$$$$$$$@+@%%$$$%$@@#%$$$$$#@+#%%$#$%$@+@$%%%$##++#%%$$%%$@+@$$###$@++@$$####@@@#$$###$@@@#$$####@@+@$$$$$$#@.@$$$$$$#++@$$$$$$#@",
+"+#%%$#$%$@@@$$$##$@@+#%$$#$%$@+#%$##$%$@@$%$$#$%$@@#%$##$%$@@#%%$#$%$@.@#$$$$#@.@#%%$$%%$@@@#$#@#$@@+@#$###$#@+@#$#@#$@@+@$$###$#+++#$$$$#@+++$$$$$%#+.+#$$$$#@+",
+"+#%%$$$%$@@#$$$#$$#+@#%%$$$$$@+#$%$$$%$@+@%$$#$%$@+#%%$#$%$@@#$%$$$%$@+.@#$$#@+.+#%%%$$%$@+@#$$$$$#++@#$#$$##++@#$$$#$#++@##$$$##+.+@#%%$@+.+@#%$$$#++.+@#%%$#..",
+".@$%$%%$#@+#$$$$$$$@+@$%%$%$#++@$%$%$$$@+@$%%%%$#@.@$%%%%$#@.#$%%$%$#@...@##@...+@%%%%%$#@.@@$$$%$$@.+@$$%%$#@++@$$%%$$+.+#$$$%%#@+.@$%%#+..+@$$$#@@....##%%#@..",
+"++#$%%$$@+@#%$$$$%#@.@@$%%$$@+.@#$%%$$@+.@#$$$%#@+++#$$%$#@+.@@$%%%#@@...@@@@+..+@$$%%$$@.++@$%%%$#@++@$%$%%#+.+@#$%%$#@+.@$$%%$$+++#$%%#++.+##%##++..++#$%%#+..",
+".++@@#@@+.++##@@@#@+.++@@#@@+...+@@#@@+...@@##@@+...@@##@@....@@@#@@+.....++....+@####@@@...++@###@+..+@@###@+..+@@###@+..+@@###@+++#$$$@...+@###+..+..+#$$$@+..",
+"....+.+.....+.+.++......+++..+.+..+.+..+...++.+......++++++.....+.+....+...+.....++@+++.......+.++.+....++.+......++.+......++.+...+@##@+.+..+@@+.+....+@##@+...",
".+......+..+..........+.........................+.++@@+@+++.......+.+...+.+.+.......+...+.+.........................................+++.+..+++@+..+.+.....+.+...",
-"...+.+....+@@++....+......+....++++++++..+..+......+$$$$$#@@+.+..+.@...+.@@@@@@.+..++@+.....+.+.++.+..+.++..+.+.+..+.+.+.+.+.+.+.+....++.+..+$$$@++.+...+....+..",
-"...++++...@@#@++.....+++++.+.++@@$$$$$@+..@+++....@@#%$##%#@....+@$@+..+@@$$$$@..+.@@$@++.....++@$@+..+++@+.....++++++...++@@@+++.+++@@@@@++@#%$$$$@++..++++.@+.",
-"+..@$@@+.+@###@+.++++.@$$@@++.@$%#%%##@@..+@@@.+..+$#%%#%%#@++@@@$#$@+..@$$$#$@+++@$#%#@+++...+@##$+++@@#$@++.+@$$$$$#@++@$###$$@@.+$$$$#$@+@#%#$###$+++@$@@$$@+",
-"..+@##@+..@#%#@@++@++@$#%#$@@+@@$##%#$@+.+@@$@...+@$#%%%%%%$@@@$$#%$@.@@$$##%#@@+@##%%#$@+....@@#%#@+@$####@@++$#%%%%%#@+$#%%%%%#$+@$#%#%%$@@$#%###%$+.+@#$$##$@",
-"...@###@+.+@##$@@$$@@###%###@@@$$###$@@+..@$$@+...@#%%#%%%#$@$####%#@@@$$#%%#%$@@#%%%%%#$@.+.+@####@@###%%##@@@#%%##%%#@@@##%%%%$@+$#%#%%%#$@$#%#$#%$@+.$####%$@",
-".+.@$##@..+@###$###$####$###$@@@$###$@@+.+@$$@+..+@$#%#%%%#@@$$%%###$@@$$%%#%#$@@#%%%%##$@+..+@###$@@$##%%##$+@#%#$$#%#@++@$###$+++@$###%%$@$#%%#$$#$+.++#%###@+",
-"++@@$##@@..+$###$#$@##$$@#$##@@$@$%##@@@..@##@+...@$#%#%%#$@.+@####$@@@@$###%##@@#%%&%##$@+...@####@@####%#$@++$%#$@#%%@..+@$$$@...+$####%$@@##%#$$$$++.@$%%#$@.",
-"+$$$$##$@..++$##$@@@$##$$##$#@++@@#$@@+..+@##$+...+@#%#%##$@..+$##$$@+.@@$###%$@@$#%%%##@@.+++@$###@@$#%###@+.@$%#$@#%#@+..+@$$@++.@$#####$++$$#$$$$$@+.$#%%#$+.",
-"$#%#$###@+..+$###@++@##$@$##$@+.+@$$@@.+..@$%$@+..+@$####$@++.+@##$@@.+.@$$$##$@@@##%%#$@++.@@$##%#$@$#%#$#@+++$%%#$#%#@+..++@$@.+.+@$##%#$.++$$#$#$$@@$$#%%#$++",
-"$#%%###%#@+..+$#$$@@@$##$####+..+@$$@@....@$$$@+...@$##$$@+....@$$$@@..+@@$$$#$@++@$%%#@+++@$#####$@@@$##$$$@++$##$$#%#@....+@$$@+.+@$##%#$...@@$##$$+@#######@+",
-"####$$###@+.+.+@$#$@+@@$$#$$@++..@$#@@+..+.@$#@@+..+$##$@++.....@@@@@+..+$@@@$$++.+@##$+..+@$$#$$$@++@$$$$@@@++@#$$@$$@@.+...+@$@+..@$$###@+...+$$$$+++$#$$@$$$@",
-"$@@@@@@$$@....++@$$+.++@@@@@+....+@@@.......@$@@...++$$$+...+....+@+....++++++++...+@$@+..++@@@@+@++..+++@+@@+.+@+@+@@@+......+@+++.++@$$$@.+..+++++..+++++.+@@@",
+"...+.+....+@@++....+......+....++++++++..+..+......+#####$@@+.+..+.@...+.@@@@@@.+..++@+.....+.+.++.+..+.++..+.+.+..+.+.+.+.+.+.+.+....++.+..+###@++.+...+....+..",
+"...++++...@@$@++.....+++++.+.++@@#####@+..@+++....@@$%#$$%$@....+@#@+..+@@####@..+.@@#@++.....++@#@+..+++@+.....++++++...++@@@+++.+++@@@@@++@$%####@++..++++.@+.",
+"+..@#@@+.+@$$$@+.++++.@##@@++.@#%$%%$$@@..+@@@.+..+#$%%$%%$@++@@@#$#@+..@###$#@+++@#$%$@+++...+@$$#+++@@$#@++.+@#####$@++@#$$$##@@.+####$#@+@$%$#$$$#+++@#@@##@+",
+"..+@$$@+..@$%$@@++@++@#$%$#@@+@@#$$%$#@+.+@@#@...+@#$%%%%%%#@@@##$%#@.@@##$$%$@@+@$$%%$#@+....@@$%$@+@#$$$$@@++#$%%%%%$@+#$%%%%%$#+@#$%$%%#@@#$%$$$%#+.+@$##$$#@",
+"...@$$$@+.+@$$#@@##@@$$$%$$$@@@##$$$#@@+..@##@+...@$%%$%%%$#@#$$$$%$@@@##$%%$%#@@$%%%%%$#@.+.+@$$$$@@$$$%%$$@@@$%%$$%%$@@@$$%%%%#@+#$%$%%%$#@#$%$#$%#@+.#$$$$%#@",
+".+.@#$$@..+@$$$#$$$#$$$$#$$$#@@@#$$$#@@+.+@##@+..+@#$%$%%%$@@##%%$$$#@@##%%$%$#@@$%%%%$$#@+..+@$$$#@@#$$%%$$#+@$%$##$%$@++@#$$$#+++@#$$$%%#@#$%%$##$#+.++$%$$$@+",
+"++@@#$$@@..+#$$$#$#@$$##@$#$$@@#@#%$$@@@..@$$@+...@#$%$%%$#@.+@$$$$#@@@@#$$$%$$@@$%%&%$$#@+...@$$$$@@$$$$%$#@++#%$#@$%%@..+@###@...+#$$$$%#@@$$%$####++.@#%%$#@.",
+"+####$$#@..++#$$#@@@#$$##$$#$@++@@$#@@+..+@$$#+...+@$%$%$$#@..+#$$##@+.@@#$$$%#@@#$%%%$$@@.+++@#$$$@@#$%$$$@+.@#%$#@$%$@+..+@##@++.@#$$$$$#++##$#####@+.#$%%$#+.",
+"#$%$#$$$@+..+#$$$@++@$$#@#$$#@+.+@##@@.+..@#%#@+..+@#$$$$#@++.+@$$#@@.+.@###$$#@@@$$%%$#@++.@@#$$%$#@#$%$#$@+++#%%$#$%$@+..++@#@.+.+@#$$%$#.++##$#$##@@##$%%$#++",
+"#$%%$$$%$@+..+#$##@@@#$$#$$$$+..+@##@@....@###@+...@#$$##@+....@###@@..+@@###$#@++@#%%$@+++@#$$$$$#@@@#$$###@++#$$##$%$@....+@##@+.+@#$$%$#...@@#$$##+@$$$$$$$@+",
+"$$$$##$$$@+.+.+@#$#@+@@##$##@++..@#$@@+..+.@#$@@+..+#$$#@++.....@@@@@+..+#@@@##++.+@$$#+..+@##$###@++@####@@@++@$##@##@@.+...+@#@+..@##$$$@+...+####+++#$##@###@",
+"#@@@@@@##@....++@##+.++@@@@@+....+@@@.......@#@@...++###+...+....+@+....++++++++...+@#@+..++@@@@+@++..+++@+@@+.+@+@+@@@+......+@+++.++@###@.+..+++++..+++++.+@@@",
"+++.++++++......++++...+++......+..@.++......@@.+....+.+.+....+.....+..............+@@+.....++.+................+....+.....+.+..+.....++@++.......+.+......+..+."};
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfb, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x5f, 0x55, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff,
0xd7, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xf5, 0xff, 0xf4, 0xff, 0x8b, 0xf6,
0xff, 0xff, 0xff, 0x57, 0xff, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x7f, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x7f, 0xed, 0xff, 0xff, 0xff, 0xff, 0x52, 0xfe, 0xff,
0xff, 0xff, 0xd7, 0xff, 0x7f, 0xfd, 0xff, 0xff, 0xff, 0xfa, 0xef, 0xff,
0xfd, 0xff, 0x2f, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xd7, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf1, 0xff, 0x87, 0xfc, 0xff, 0xff,
+ 0x5f, 0xef, 0xff, 0xff, 0xff, 0x7f, 0xf1, 0xff, 0x87, 0xfc, 0xff, 0xff,
0xff, 0xa4, 0xb0, 0xff, 0xf8, 0x7f, 0xb3, 0xfd, 0x7f, 0xad, 0xff, 0x06,
0xfe, 0x7f, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f,
- 0x42, 0xff, 0x0b, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb5, 0xff,
+ 0x42, 0xff, 0x0b, 0xfe, 0x3f, 0xb1, 0xfe, 0xff, 0xff, 0xff, 0xb5, 0xff,
0x97, 0xf4, 0x6f, 0xbb, 0xfe, 0xe0, 0xe2, 0xff, 0xfa, 0xff, 0xe6, 0xf2,
0xff, 0xbf, 0xff, 0x55, 0xe8, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xdf, 0x48, 0xff, 0x4b, 0xfe, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xdf, 0x48, 0xff, 0x4b, 0xfe, 0xbf, 0x82, 0xfe, 0xff,
0xff, 0x7f, 0xf1, 0xff, 0x26, 0xfe, 0xff, 0xef, 0xff, 0xaa, 0xf0, 0xff,
0xf8, 0xff, 0xb3, 0xfd, 0xff, 0xde, 0xff, 0x87, 0xf6, 0x7f, 0xcd, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xe5, 0xfe, 0x2f, 0xfd,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0x82, 0xfe, 0xe7, 0xfd, 0x2f, 0x88,
+ 0x5f, 0x48, 0xff, 0xff, 0xff, 0x6f, 0x82, 0xfe, 0xe7, 0xfd, 0x2f, 0x88,
0xfe, 0xe6, 0xed, 0xff, 0xf2, 0xff, 0xa6, 0xeb, 0xff, 0xfd, 0xbf, 0x38,
0xa5, 0x7f, 0x4b, 0xff, 0xef, 0xfd, 0xef, 0xf6, 0xff, 0xff, 0xff, 0x4f,
- 0x24, 0xfe, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xca, 0xff,
+ 0x24, 0xfe, 0xfb, 0xff, 0xdf, 0xc0, 0xfc, 0xff, 0xff, 0x5f, 0xca, 0xff,
0x75, 0xff, 0x5f, 0xd1, 0xff, 0xab, 0xf4, 0xff, 0xfc, 0x7f, 0xb1, 0xfd,
0xff, 0xbf, 0xff, 0x8a, 0xf2, 0xdf, 0xea, 0xff, 0x7f, 0xef, 0xbf, 0xdf,
- 0xff, 0xff, 0xff, 0x2b, 0x59, 0xfd, 0xaf, 0xff, 0xff, 0xff, 0xff, 0x5f,
+ 0xff, 0xff, 0xff, 0x2b, 0x59, 0xfd, 0xaf, 0xff, 0xaf, 0x54, 0xff, 0x5f,
0xff, 0xdf, 0x7e, 0xff, 0xe7, 0xff, 0x7f, 0x37, 0xfd, 0xa7, 0xfd, 0xff,
0xf0, 0xff, 0x96, 0xfe, 0xff, 0xff, 0x7f, 0xd5, 0xaa, 0xff, 0x8e, 0xff,
0xd7, 0xdb, 0x27, 0x10, 0xfe, 0xff, 0xff, 0x6f, 0x8a, 0xfd, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xeb, 0xff, 0xde, 0xff, 0x57, 0x6f,
+ 0x5f, 0x22, 0xfe, 0xff, 0xff, 0x6f, 0xeb, 0xff, 0xde, 0xff, 0x57, 0x6f,
0xff, 0x75, 0xfc, 0xff, 0xfa, 0x3f, 0x8c, 0xf5, 0xff, 0xff, 0xff, 0x62,
0xf7, 0x5f, 0xeb, 0xff, 0xad, 0xfa, 0x47, 0x45, 0xff, 0xbf, 0xff, 0x5b,
- 0xd7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xfe, 0x5f, 0x5f, 0xff,
+ 0xd7, 0xfe, 0xff, 0xff, 0x3f, 0x00, 0xfe, 0xaf, 0xfe, 0x5f, 0x5f, 0xff,
0x75, 0xfd, 0xaf, 0xaa, 0xfe, 0xc7, 0xe9, 0xff, 0xf8, 0x7f, 0x99, 0xfe,
0xff, 0xff, 0xbf, 0x67, 0xad, 0xff, 0x4e, 0xff, 0xdb, 0xd5, 0x4f, 0x90,
- 0xfe, 0x77, 0xfb, 0x5b, 0xcc, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfe, 0x77, 0xfb, 0x5b, 0xcc, 0xfa, 0xff, 0xff, 0xaf, 0x92, 0xfe, 0xff,
0xff, 0xef, 0xf6, 0xff, 0x80, 0xff, 0xdf, 0xde, 0xfe, 0x1f, 0xfd, 0xff,
0xff, 0x7f, 0x74, 0xf1, 0xff, 0xff, 0x7f, 0xd5, 0xd5, 0x5f, 0xf5, 0x7f,
0x73, 0xfb, 0xff, 0x5f, 0x7f, 0x89, 0xf0, 0x77, 0x5a, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xdf, 0xfe, 0xaf, 0xfe, 0xff, 0x15, 0xfd, 0xbf, 0xbb,
+ 0x1f, 0x40, 0xff, 0xdf, 0xfe, 0xaf, 0xfe, 0xff, 0x15, 0xfd, 0xbf, 0xbb,
0xfe, 0x2f, 0xfd, 0xff, 0xf5, 0x7f, 0xd5, 0xd1, 0xff, 0xff, 0x7f, 0xa5,
0xbd, 0xff, 0xa5, 0xfe, 0x53, 0xf5, 0xaf, 0x1b, 0xfd, 0x93, 0xf2, 0xd7,
- 0xd2, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xdf, 0xd5, 0xff,
+ 0xd2, 0xfa, 0xff, 0xff, 0x2f, 0xc2, 0xfe, 0xbf, 0xff, 0xdf, 0xd5, 0xff,
0xe6, 0xff, 0x57, 0xad, 0xff, 0x15, 0xff, 0xff, 0xfe, 0xff, 0x8b, 0xf4,
0xff, 0xff, 0xff, 0x54, 0xd2, 0x5f, 0xd4, 0x7f, 0x7c, 0xfe, 0xff, 0x5f,
- 0xff, 0x7e, 0xff, 0x2f, 0x5e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f,
+ 0xff, 0x7e, 0xff, 0x2f, 0x5e, 0xff, 0xff, 0xff, 0x5f, 0x05, 0xff, 0x6f,
0xfd, 0xbf, 0x5e, 0xff, 0xa7, 0xfe, 0x5f, 0x55, 0xfd, 0x37, 0xf5, 0xff,
0xf5, 0xff, 0x7f, 0xf5, 0xff, 0xff, 0xff, 0x41, 0xf4, 0x7f, 0x41, 0xff,
0x54, 0xea, 0xff, 0x1f, 0xff, 0xed, 0xf6, 0xef, 0x54, 0xfd, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x0f, 0xfe, 0x57, 0xd5, 0xff, 0xea, 0xff, 0xef, 0xae,
+ 0x7f, 0x80, 0xff, 0x0f, 0xfe, 0x57, 0xd5, 0xff, 0xea, 0xff, 0xef, 0xae,
0xfe, 0x4f, 0xfd, 0x7f, 0xfd, 0xff, 0x2d, 0xf6, 0xff, 0xff, 0x5f, 0x8a,
0xaa, 0x7f, 0xea, 0x3f, 0x75, 0xfd, 0xff, 0x5f, 0xff, 0xff, 0xff, 0x1b,
- 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xfd, 0xff, 0x71, 0xff,
+ 0x5b, 0xff, 0xff, 0xff, 0x5f, 0x15, 0xff, 0x5f, 0xfd, 0xff, 0x71, 0xff,
0xa7, 0xea, 0xaf, 0xa0, 0xff, 0x1f, 0xff, 0xff, 0xf1, 0xff, 0xfd, 0xfc,
0xff, 0xff, 0xff, 0xbb, 0xf6, 0xff, 0x6f, 0x7f, 0x63, 0xf5, 0xff, 0xff,
- 0xfe, 0xdf, 0xff, 0x7f, 0x4e, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07,
+ 0xfe, 0xdf, 0xff, 0x7f, 0x4e, 0xfd, 0xff, 0xff, 0x7f, 0xc2, 0xfe, 0x07,
0xfe, 0xbf, 0xe4, 0x7f, 0xe5, 0xff, 0x5f, 0x55, 0xff, 0x95, 0xfa, 0x7f,
0xfa, 0xbf, 0x36, 0xf7, 0xff, 0xff, 0xff, 0x6a, 0xed, 0x7f, 0xfd, 0xff,
0xb5, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xaa, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x5f, 0xfd, 0xff, 0xd5, 0xff, 0x08, 0xc0, 0xff, 0xff,
+ 0xdf, 0xa4, 0xff, 0x5f, 0xfd, 0xff, 0xd5, 0xff, 0x08, 0xc0, 0xff, 0xff,
0xfe, 0x17, 0xec, 0xff, 0xf8, 0xff, 0x75, 0xfe, 0xff, 0xff, 0xff, 0x1f,
0xfd, 0xff, 0xff, 0xff, 0xaf, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x62, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xfe, 0xff, 0xf1, 0xff,
+ 0x62, 0xff, 0xff, 0xff, 0xbf, 0xda, 0xfe, 0x0f, 0xfe, 0xff, 0xf1, 0xff,
0xa2, 0xea, 0xdf, 0xde, 0xff, 0x47, 0xfd, 0xff, 0xfa, 0x7f, 0x8b, 0xf6,
0xff, 0xff, 0xff, 0xab, 0xfe, 0xff, 0xff, 0xff, 0xdb, 0xfa, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x7f, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f,
+ 0xff, 0xff, 0xff, 0x7f, 0xf5, 0xff, 0xff, 0xff, 0x5f, 0xad, 0xff, 0x5f,
0xfe, 0xff, 0xf5, 0xff, 0x88, 0xe4, 0xff, 0xff, 0xff, 0x17, 0xf9, 0xff,
0xf0, 0xff, 0x22, 0xfe, 0xff, 0xff, 0xff, 0x9f, 0xfa, 0xff, 0xff, 0xff,
0xb7, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xaf, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
+ 0xbf, 0x52, 0xff, 0xaf, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xff, 0xfe, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0xff,
/* XPM */
-static char *matrix1_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"320 377 11 1",
-/* colors */
-" c #81DD81",
-". c #5AD25A",
-"X c #2BA02B",
-"o c #279027",
-"O c #217A21",
-"+ c #1B641B",
-"@ c #165016",
-"# c #0B2A0B",
-"$ c #081E08",
-"% c #030E03",
-"& c #000000",
-/* pixels */
-"&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%%%%&&&&&&&&&&&&%&%&%&%&%&&&&&&&&&&%%%%$$$$$%%%%&&&&&&&&%%$$$$$%%&&&&&&&&&&%&%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%&&&&&&&&&&&&&&%%%$$$$$%%%&&&&&&&&%%$$$$$%%&&&&&&&&&&&&&%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$$%%%&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%$$%%%%&&&&&&&&&%%%%%%%%%%&%&&&&&&&&%%$$#$###$$%%&&&&&&&%%$$###$$%%%&&&&&&&&%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%&&&&&&&&&&&%%$##@##$%%&&&&&%&%%$#####$%%%&&&&&&&&&&&%%%$%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$$#$$%%&",
-"&&&&&&&&&&&&&&&&&&&&&&&&%&%$$###$$%%&&&&&&%%%%$$$$$$$$$%%%&&&&&%&$$#@+++++@##%%&&&&%&%$##OO+##$%%%&&&&&%%%$$$$$%%%&&&&&&&&&&&&&&%&%&&&&&&&&&&&&&&&&%%$$$$%%%&&&&&&&&&&%$##..+@@$%%&&&&&&%$@@+..##$%%&&&&&&&&&%%%$$#$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$#+O+#$%&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&%$###@@#$$%%&&&&&&%%$$#$#$#$#$$%%%&&&&&%%#@+++OOO@@#$%&&&&%%$##@Ooo@@#$%%%&&&%%%$#####$$%&&&&&&&&&&&%&%%%%%%%&%&&&&&&&&%&%$$####$%%&&&&&&&&%%$$#@..++@$%%&&&&&%%$@+O..@#$$%&&&&&&&&%&$$##@##$$%&&&&&&&&&&&&%%%%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$#@OOO@$$&",
-"&&&&&&&&&&&&&&&&&&&&&&&%%$$@+.. +@$$%&&&&%%%$#@OO@@@OO@#$%%&&&&%%$#OOoXoXXO+@$%&&%&%$$@Oo...O+@##%%&&&%%$#+OoOO#$$%&&&&&&&&&&%%%$$$$$$%%&&&&&&&&%&%$#OOO@@$%%&&&&&&&%%$#@+..++@$%&&&&&&%%$@++..+@#$%%&&&&&%&%%$#@...@#$%%%&&&&&&&&%%%%$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$@@...@#$&",
-"&&&&&&&&&&&&&&&&&&&&&&&&%$#+O ..++#$%%&&&&%$#@+Oo+++oO+@#$%&&&&%$$#OoXoXXXO++#$&&&%$##@oo. oO+@#$%&%%%$##OoooO@$$%%&&&&&&&&%%$$#####$$%%&&&&&&&&%$#@Ooo+@$%%&&&&&&%%$#+OOXo+#$$%%&&&&&&%%$@@XXOO+#$%%&&&&%%$$#@@...+##$$%%&&&&&&&%%$#$$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$#@+...@#$&",
-"&&&&&&&&&&&&&&&&&&&&&&&&%$#++. .O+#$%%&&%%%$@@+oo+++oo+@#$$&&%&%$#@oooXXXXo++#$&%%$$#@+oo ..oo+@#$%&&%$$#@oooXo@#$%%&&&&&&%%%$##@@@@@#$$%%&&&&&%%%$#@ooo+@#$%%&&&&&&$$#+OoXo@#$%&%&&&&&&%$$#@oXOO+#$%%&&&&%$$##@+...+@@#$$%&&&&&&%%$##@##$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$#@+...@#$&",
-"&&&&&&&&&&&&&&&&&&&&&&&&$$#Oo oO#$%%&&&%$$++O. oOO O++$%&&&%$$#@ooXoXXXOO+#$&&%$#OooXXXXX .O+@$$&%%$@++ooooOO+#$%%&&&&%&%$#@oo . oO#$%&&&&&&&%$#+O. .++$%%&&&&&&&$$@ooooo@#$%%&&&&&&&&%$#@OoXoo@$$%%&%%%$++O+O. .O+O+@$%&&&&%&%$$@...@$$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$$#OoooO@$%&",
-"&&&&&&&&&&&&&&&&&&&&&&&%%$@oo. .oo@$%%&&&%$$++O .OOO. O+@$$&&%%$#@@ooXoXXXoO+@$&%$#@OoXXXXXX .O+@$$&%%$@+OoooooO+#$%%&&&&%%$$#@oX .Xo#$$%&&&&&&%$#++. .O+$$%&&&&&%%$#@ooXoO@$$%&&&&&&&&&%$$@OooXo@#$&&&&%$$++OOO...O+OO+#$&&&&&&%$#@...@#$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$#@ooXoo##%&",
-"&&&&&&&&&&&&&&&&&&&&&&&&$##OO . oO##%%&&&%$#+OO..OOO .++@$%&&%$$++oXX.....XXo@#&%$$@XXXOo+++oo++@$%&%$$@+OooooooO@$$%%&&&&%$@+OXX+++oO@$%%&&&&&%$$#oXooO@#$%%&&&&&&&$#@oXooO#$%&&&&&&&&&&&$$#Ooooo@#$%%&%%$#+Oo.. ..OO+#$&&&&&%$$#+...@@$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%&%%&%%&%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$#@..++@#$%&",
-"&&&&&&&&&&&&&&&&&&&&&&&%%$@Oo . OO@$$&&&&%%$++O..OOO. +@@$%&&%$#+OoXX. ...XXX@#&%$#@XXXoOO+OOo++@$%&%%$@+Oooooooo@#$%%&&&%%$@+OXXO++OO#$$%&&&&&&$$@ooOO+@$$%&&&&&&%%$#@...+@#$%%&&&&&&&&&&%$#@+...@#$%%&&%$$+OO.... ..oO+$$&&&%%%$#@+. .+@#$%%%&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$#@@..O+@$$%&",
-"&&&&&&&&&&&&&&&&&&&&&&&&$$#OO .oO@$%%&&%%$$++O..O+O..+@#$%&&%$#+OoXX.. ..XXo@#&%$$@XXXOo+O+oO+@@$$&%$$@++ooooooo@#$$%%&&%%#@+OXX+++O+#$%%%&&&&%%$#OoO++#$%&%&&&&&&%$#+...+@$$%&&&&&&&&&&%&$#@@ ..+#$%&&&%$$++o... ...OO+$$&&%%%$$#@+...+@##$$%&&&&&&&&&&&&&&&&&&&&&&%%%$$#$$#$#$#$$$%%&&&&&&&&&&&&&&&&&&&&&&&&&%%%$#@+..+@#$%&&",
-"&&&&&&&&&&&&&&&&&&&&&&&%%$@Oo. oO##%%&&&%$$@++O++++OO@#$%%&&%$#+Oo XXX .XXo@#&%$$@ooX..XoXOO+@#$%&&%$$@@oooXooOO+@$%%&&%%$@+O..+++@@#$$%%&&&&%%$#@+###$$%&&&&&&&%%$#+...@@$%%&&&&&&&&&&&&%$@@...@@$%%&&%%$#@+OO . OO+@#$%&&%$$#@@++. .++@##$$&&&&&&&&&&&&&&&&&&&&&&%$$###@@#@#@#@##$$&&&&&&&&&&&&&&&&&&&&&&&&&%%$#+OOXo@@$$%&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&$$#Oo. .oO#$%&&&&&%$@@@++#@@O+#$$%&&%&$#+Oo..XXX. oXo@$&%%$#Ooo..oXoOO+@##$&&%%$#@oooXoooO+@$%%&%&$$@++..+++@@@#$$%&&&&&%%$@@#$$%%&&&&&&&&&$$#@. .+@$$&&&&&&&&&&&&%%##+. .+#$%&&&&$$#@+OO. .OO+@#$%&%$$#@@+++. .++++@#$&&&&&&&&&&&&&&&&&&&&&%$$#@@@+@+@+@+@@@#$&&&&&&&&&&&&&&&&&&&&&&&&&%%##OOOXo@#$%&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&%$#@+...+@#$%%&&&&%%$$$#$#$$#$$$%%&&%%$#@++..OoO..++@#$&%%$#@@+ooXXX..oo+#$&&%$$#@ooXXXoo+@#$%%&%%%$@++ .XXX+++++$$&&&&&&%%%$$%%%&&&&&&&&&&%##+...@#$$&&&&&&&&&&&&%%$@@...+##%%&&&%$#@+. OOO..++@$%&%$#@ . . . . @#&&&&&&&&&&&&&&&&&&&&&%$#@ . . . . .@#&&&&&&&&&&&&&&&&&&&&&&&&&%$#@XXXOO#$$%%&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&%$##+. .+@#$%&&&&&&%%$$$$$$$$$%%&&&&&%$#@+O..OOO .++@#$&&%$$#@+OOXXX..ooO#$&%&$$#@oXX.Xoo+@#$%%&&%$#@+O XXXO+OO+$$&&&&&%&%%%%%&&%&&&&&&&&%%##@...+##%%&&&&&&&&&&&%$$#+...+#$%&&&%%$#@+..OOO .+@@$%&%$@@. . . . .+#&&&&&&&&&%%%%%%&&&&&&%$@@. . . . +#&&&&&&&&&&%&%&%&&&&&&&&&%$#@OXXX@@$%%%&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&%$@@...@#$%%&&&&&&&&%&&%&%&%%%&&%&&%$$#@++. OOO..++@#$&&%$$#@+OOXXX..ooo@#&%&$$#@ooXXXXo+@@#$&&&%$#@+O..X.XOOoO+#$&&&&&&&&&&&%&&&&&&&&&&&%%$@@. .+##$%&&&&&&&&&&&%$#@+...+#$$&&&&%$#@+..OO+..++#$%&%$#@ . . . .. @#&&&&&&&%%%$$$$%%%&&&&%$#@ . . .. . @#&&&&&&&&&%%%%%%&&&&&&&%&$$#+OXXX@#$%&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&%$$#@...+#$%&&&&&&&&&&&%&%&%&&&&&&&&%$#@. . . XXo#$&%%$#+Oo+O+O+ooXXX@#&&%$@+OOO.XXXXooO#$%&%%$#OOoXX... .ooo#$&&&&&&&&%&&&&&&&&&&&&&&%%$#@...+@$$%%&&&&&&&&&%&$##+ ..@#$%%&&%%$#@@OO@@+OO@@#$%&%$$#@+@++.. +++@@#$&&&&&&&%%$$#$$$%%%&&&&$$#@@@@+@@++@+@@#$&&&&&&&%%%%$$$%%%&&&&&&%$#@oXoOO@#$%%&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&%$#@...@#$%%&&&&&&&&&&&&&&&&&&&&&&&%$#+ . . . . XXo#$&%%$#OOOOO+O+OoXXX##&%%%@@+OOXXXXXooO##%&%$#@Ooooo... Xoo##&&&&&&&&&&&&&&&&&&&&&&&%%$#@oXXOO#$%%&&&&&&&&&%%$#OOXXo+#$%%&&&%%#@@++###++##$%%&&%$$##@++ ..++@@##$&&&&&%%%$#+OO@#$%&&&&&%$$##@#@@#@#####$$&&&&&&&%%$$#$$$%%&&&&&&%$#@oXOOO#$%%&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&%%##@+@#$$%&&&&&&&&&&&&&&&&&&&&&&&&%$##OOoXXXXXoo+@##$&%$#@oXX..oXX..Xoo@$&&%%$#@@+XXXOOooO@$%&%%#@XXXooooo..O++#$&&&&&&&&&&&&&&&&&&&&&&&&%$#@ooXoO##%%&&&&&&&&&&$$#OOXXo@#$%&&&&&%$$$$$##$#$$$$%&&&%%$$##@+. .+@##$%%&&&&&&%$##OOO+@$$&%&&&%%$$$$$$#$$###$$$%&&&&&&%%$@@OO+#$%%&&&%%$$#@oXOO+#$%&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&%%$#@@@#$$&&&&&&&&&&&&&&&&&&&&&&&&&&%$#OOOXXXoXoo+@#$%&%$##XXX. oXX..ooO#$&&%%%$##@ooX+Oooo##%&%$#@XXXoOOOo. O++@$&&&&&&&&&&&&&&&&&&&&&&&%%%#@OoOoo@#$%%&&&&&&&%%$#@oXOo+@$%%&&&&&&%%$$$%%%$$%%%&&&&&&%%$#@@...+@#$%%&&&&&&%$$#@ooo+@$$%&&&&&&%%$%$%$%$%%%%%&%&&&&&&%$$@+OOO#$$%&&&%%$@@O..@@#$%%%&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&&$$#@@@#$%%&&&&&&&&&&&&&&&&&&&&&&&&%$$#+OO.XoXXoo@#$%%&&%$#OOooo. .oo+@#$$&&&&%$$@@oXo+OooO@$%&%$$@XXXOoOoO .OO+@$&&&&&&&&&&&&&&&&&&&&&&&&&%$#+OoXX@#$%%&&&&&%&%%$#@oXoO+#$%%&&&&&%&%&%%%%&%%%&&&&&&&&&%$$@@ ..@#$%%&&&&&&&%$#++...O+$$%&&&&&&&&&%&%&%&&&%%&&&&&&&&&%$#@+ooO@#%%&&&%$#@++..@@$$%&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&%%##...##%%&&&&&&&&&&&&&&&&&&&&&&&&&%$#+OOXXXXXOO@#$%%&%%$#++OOo. oO@##$%&&&&&%$##XXXXXooO##%&%$$@OXo . .XX. .@#&&&&&&&&&&&&&&&&&&&&&&&&%%$#+OOXo+@#%%%&&&&&&%$#@+oXOO+#$%%&&&&&&&&&&&&%&&&%&&%&&&&&&&%$#@...@#$%%&&&&&&%%$#+O .++$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&%$#OO.. ##$%%&&%$$OOooo@#$%%&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&&%$#...#$%%&&&&&&&&&&&&&&&&&&&&&&&&%%$#@OOXXXXXOO@$$%&&&&%$$$$#@...+#$%%&%&&&&&%%$#ooXooooO#$%&&%$#Ooo . Xo. @#&&&&&&&&&&&&&&&&&&&&&&&&&&%$#@+..++@$%&&&&&&%%$#+O..+@#$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$$@...@#$%&&&&&&&%%$#oooOO@#$%%&&&&&&&&&&&&&&&&&&&&&&&&&&%&&$$+O ..@$%%&&&%$#Ooooo@#$%&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&%%$##@#$$%%&&&&&&&&&&&&&&&&&&&&&&&&&%$#@OOXXXoXoO#$%%&&%%%&%$$#@ooo@#$%%&&&&&&&%%$##@@@@###$%%&%%$$#@@@@+@@@+@@##$&&&&&&&&&&&&&&&&&&&&&&&&&%%$$#@..++@$%%&&&&&%%$@++..@@$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$##@##$%%&%&&&&&%%##oooOO##$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$#@@@##$%%&&&%$#OoooO#$%%&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$$$$%%&&&&&&&&&&&&&&&&&&&&&&&&&%&$$@+OXXXooOO#$%&&&&&&%&%$##oOO@#$%&&&&&&&&&%%$$#$###$$%%%&&&%$$$#####@#####$$&&&&&&&&&&&&&&&&&&&&&&&&&&&%$#@..+@@$%&&&&&&&%$@@+..@#$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$$$#$$%%&&&&&&&&%%$#ooO++#$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$$$###$$%&&&&$$#+OO+@#$%&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$@@+oXoooO+#$%%&&&&&&&&%$#OO+#$%%%&&&&&&&&&%%%$$$%$%$%&&&&&&%$$$$#$$$#$$$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&%%%$##@##$%%%&&&&&&%%$#####$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$%$%&&&&&&&&&&$$#@+@##$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$$%%%&&&&&%$#@++@#$$%%&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$###@@@###$%%&&&&&&&&%%%$##$$$&&&&&&&&&&&&&&%%&%%%%&&&&&&&&&&%%%%%$%%$%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$$$$$$%%%&&&&&&&&%%$$#$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%&&%&&&&&&&&&%$$@@#$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&%&%%%%&&&&&&%%#@@+##$%&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$#$##$$$$%&&&&&&&&&&&%%$$$%%%&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&%%%&%&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$%%%&&&&&&&&&%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$##$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$$#$$%%&&&&&&&&&&",
-"&&&&&%%%%%%%%%%&&&&&&&&&&&%%%%%%%&&&&&&&&&&&&%%%%%%$%%%%&&&&&&&&%&%%%%$%%%%%%&&&&&&&&&&&%%%%%%%%%&&&&&&&%%%%%$$%%%%%%&&&&&&&&&&%%%%%%%%%%%&&&&%%%%%$%$%$%$%%%&&&&&&&&&%%%%%%%%%%&&&&&&&&&%%%%%%%%%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%&%&%&&&&&&&&&",
-"&&&%&%%$$#$$$$%%%%&&&&&%%%%$$$$$%%%%&&&&&&&%%%$$$$#$$$$%%%&&&&&&%%$$$$$#$$%%%&&&&&&&&&&%&%$$$$$%%%&&&&%%%$$$#$#$#$$$%%%&&&&&&&&&%$$$$#$$%%%&%%%$$$$#$#$#$$$$%%%&&&&&%%%$$$$$$$%%%%&&&&&&%&%$$$$$$$%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%&%&&&&",
-"&&&%%%$$##@##$$$%%&&&&%%$$$#####$$&%&&&&&&&%%$$##@@###$$%%%&&%%%%$$#@@@###$$$%%&&&&&&&&%%$$###$$%%&&%&%$$##@@#@#@##$$%&&&&&&%%%$$$###@##$$%&%%$##@#@@@#@@###$%%&&&%%%$$##@@###$$%%%&&&&&%%$$##@##$$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%$$$$$$$$%%&&&&",
-"&&%%$$#@+oOo+@#$$%%&&%%$$#@++OOO#$%%&&&&&%%$$##O+oooO+##$$%&&&&$$##+OOooOO##$$%&&&&&&%%$$#+++++#$%%&&%$#@@OOoOooOO++$$%&&&&&%%$$#@@ooOO+@$%&%$$++OooOoOooO++#$%&&%%%$##@+OOo+@##$%%&&&%%$$#@OOOO+@#$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%&&&&&&&&&&&&&&%&%$$###@###$$%%%&&",
-"&&%$$#@++ooo++@#$$%&&%$##@@OOooO@#%%%&&&&%%$#@@OoooooO@@#$%&%%%$#@@OOoooOO@@#$$&&&&&&&%$#@++OO+@$$%&%%$#@+oooooooOO+#$%&&&&&%$##@++ooooO@#$&%$#OOOoooooooOO+#$%&&%%$#@@+Oooo++@@#$$&&&&%$#@@oooOO+@##$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%%%&%&&&&&&&&&&&&&&&&&&&&&&%%&%%%%%&&&&&&&&&&&&%%$$#@@+@+@@##$%%&&",
-"%%$$@+O..XXX..++@$%&%$$#oXX. ...@#$%&&&&%%$#+Oo..XXX..oOO#$&&%$#OOo..XXX..oO+#$&&&&&&%$#@+ . ..@#$%&%%$@+O..XXXXXoOO#$%&&&%%$$@+.....XXo@#$&$$@oXXXXXXXXXXXX@#$&%%$#+Oo..XXX..oO+#$&&%%$#@..oXXXXXXX#$%&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&%%%%$%$%%%&&&&&&&&&&&&&&&&&&&&&%&%%$%$%%%&%&&&&&&&&&%%#@+.......+@#$%%&",
-"&%$#++O..XXX..OO+#$&&%$@oXX . .+#$%%&&&%%$#oOo..XXX..ooO#$&&%$#Ooo. XXX .ooO#$&&&&&&%$#++ ...@#$%&%$#++O. XXXXXoo+#$%&&&%%$#++ ...Xoo@#$&$$@oXXXXXXXXXXXX##$&%%$@Ooo..XXX..ooO#$&&%%$#@..XXXXXXXX@#$&&&&&&&&%&%%%%&%&&&&&&&&&&&&&&%&%%%%&&&&&&&&&&%&%%%$$$###$$%&&&&%%%%%%%%%%%%%%&&&%%$$###$$$%%%&&&&&&&&%$#@+. . ..++@$$%&",
-"%$$#+OO..XXX..OO+#$&%$$#ooX . .@@$%&&&&%$$@Ooo .XXX. ooo@$&%%$#Ooo..XXX..ooo@#&&&%&%$$#+O. ..+#$%&%$$+OO..XXXXXoOO#$%&&&%$#@+O. ..XXo@#%&%$#oXXXXXXXX.XXX@$$&%$$@Ooo..XXX..ooO@#&%%$#@+..XXXXXXXX@#$&&&&&&%%%$$%$%%&&&&&&&&&&&&%&%%$$%$%%%&&&&&&&%&%%$$##@@#@#$$&&&&%%%$%$%$$%$%%%%&&%$###@@@##$$%%%%&&&&%$$#++.. . ..+++#$%&",
-"%$#@XXXoO+++oOXXX@#&&%$##@+++...@@$$%&&&&$$#XXXOO+++OoXXX@#&%%$#+oo+++++ooXXX##&&&&&%$#@oXooo..@#$$&%$#+OOXXO+++O++##$%&%&%$#@..ooo+++@##$%&%$##@@@@+++ooXoo@#%&%$#@XXXoO++OooXXX@$&%%$@+OXX++++O...+@$&&&&&&%%$$##$$$%%&&&&&&&&&&%&%$$##$$%%%&&&&&&%%$$##@+O...+@$&&%%%$$$#$#$#$#$$$$%&%$#...oo@@##$$%%&%&&&$$@+OXX+++XXXXo@$$&",
-"&$#@XXXOO+@+OoXXX@#&&%%$##@@+. .+#$%&&&&&$$#ooX++@@+OoXXX@#&&%$$++O++@++OoXXX@#&&&%%%$#@oXXoX..+#$%&%$#@OoXX+O+O++@@#$%&&%$#@+..ooo+++@@$$%&%%$$####@@+ooXoo#$$&%$$@XXXoo+++OoXXX@#&%$$++OXX+++++...+@#&&&&&%%$##@@##$%%&&&&&&&&&&&$$###@@#$%%&&%&%%$$$#@@+OO...++$&%&$$#@#@@@@@@@@##$%&%$#...Xo++@@#$$%%&&&%%#@+OXX+++oXXXX@#$&",
-"%$#@XXXOO@@@+OXXX@#&&&%%$$#@+...+##%%&&&&%$$#@#@@@@+ooXXX@#&&%%$###@@@++..Xoo@#&&&&%$#@+..OOO..+#$%&%%#++O. . ...oO+#$%&%%$@+O..ooooo+@@$$%&%&%%$$$##@+XXOO+#$$&%$#@oXooo+++ooXoo@#&%$$++OXX++@++...+@$&&&&&%$$++...##%%%&&&&&&&&%%$$+O...##$%&&%&%$$#++oXXXXO++@$$&%%$#OOoOOoooOOoOO#$&%$$#@@oo...O+##$$%%&%%$@@+Oo+++OOXXX@#$&",
-"%$#@XXXO+@@@+OXXX@#&&&&&%$#@@ ..+#$$&&&&%%%$$$####@@oXXXX@#&&&%%$$##@@++..Xoo@$&&&%$$#++..OOO..@@$$&%$#@Oo.. . .oOO#$%&&$#@+O..oooXo++@#$%&&%%%%%%$#@@XXOO+#$%&%%##ooXoX+O+XoXoo@$&%$$+OoXX++@++...+@#&&&&&%$#+O...@#$%&&&&&&&&&&%$#+O...@$$%%&%%$$##+OXXXXXO++#$%&%$$#Ooooooooooooo#$&&$$#@+oo .oO@@#$$%&%%$#@++O+@+OoXXX@#$&",
-"%$#+XXXo+##@+OXXX@#&&&&%%%$@+...@@$%%&&&&%%%$$$$#@@+ooXXo#$&&%%%%$$#@+++..Xoo##&&&%$#@++..OOO..+##%&%%$@+O... ...ooO@#$&%%#++O..oooooO++##%&&&&&%%%$$@+XXO+@$$&&%%$@ooXooO++ooXoo##&%$#@+OXX+++++...+@#&&&&&%$#+O...@#$%&&&&&&&&&&%$#+O...@#$&%&%$$@@@OOXXXXX+@@$$%&%$#@ooXoXoXXoXooo@#&&%%$##oo.. oO+@@##$&%%$#@@+++@+OOXXX@#%&",
-"%$#+XXXO+@#@+OXXX+#&&&&&&$$#@. .+#$$&&&&&&&%%%$##+OO..OO+#$&&&&&%$$++. .OO+@$&&%%$#OooooOOO..+@#$&%%$@@+oXO+OoX...@#$&%$$+OO.....XX...@#$&&&&&&&%$#@+..+@#$%%&&$##++O . . .OO+@$&&$$++o..+++oo . +@$&&&&%%$#+OoXo@$$%%&&&&&&&&%&$#+OoXo@#$%&&$$#ooX..ooo+@##$$%&&%$#+oXXXXXXXXXXXo@#&&&%%$##@++OXX...+@$&&&%$$##@+OO..XoO@$$&",
-"%$#@XXXO+@#@+OXXX@#&&&&&&%$@@...+#$$&&&&&&&&%%$#@+OO..++@#$&&&&%%$$++ ...O++@#&%%$#@OooXoO+O..+@#$&%%$##+oo+++oo...@#$&%$#+OO. ...XX...@#$&&&&&%%$$@@+..@@$$%&&%%#@+OO.. ....O++@$&&%$@+O..++Ooo +@#&&&&&%%$@+ooO##%&%&&&&&&&&%%%$@+ooO#$%%&&$#@oXX. ooO@@#$$%%&&%$#@XXXXXXXXXXXXX@#&&&%%%$#@+++XX...O+#&&&%%$$@@OOO..ooO#$%&",
-"%$#+XXXO+##@+oXXX+#&&&&&%$$#+. .@@$%%&&&&&&%%$#++ . OO+#$$%&&&%&%$$#@++OoXXXo@#&&%$#@. .XXXXo .OO+#&&%%$###@#@@++...+@#&%$$+OO..OOOOO...+@$&&&&&&%$#+OoXX@#$%%&&%$$@XXXoXOOOXXXXX@#&%%$#@@XX . XX...+@$&&&&&%%$$####$$%%&&&&&&&&&&&%$$#####$%&&&$#@XXX..oOO@##$%%&&&%$#+OooooXoXooXoo@#&&&&%%$$#@+OXX ..O+#&&&&%%$#@...oO+@#$$%&",
-"%$#@XXXOO@#@+OXXX@#&&&&&&$$@@...+#$$%&&&&&&%$$#++. .OO##$%%&&&%%$$$##@++oXXXX@#&&%$#@...XXoXX..oO+#&&%%$$#####@@+...+@#&%$#++o. ++O++...+@#&&&&&&%$#+OOXo@#$%%&&%$#@XXXXoO+OoXXXX@#&%&%$#@oX .XX...+@#&&&&&%%%$$##$$%&&&&&&&&&&&&%&%$$#$$$%%%&&$#@XXX..oOO+@#$%%&%&%$@@oooXoXoXooXoo@#&&&&%%$##@++XX. .O+#&&&&%%$#@. .O+@##$%%&",
-"%$#+XXXO+@@@+oXXX@#&&&&&%%##+...+@$%%%&&&&%%$#@OO. .O+@$$%%&&%%$$$###@@+oXXXX@#&%%$@@. .XXoXo .oOO#&%%$$#$##$#@@+...+@$&%$$+OO..O++++...+@$&&&&&%%$@OoOXo@#$%&&&%$#@XXXXoO++oXXXX@#&&%%$#@oo. XX...+@$&&&&&&&%%$$$$%%%&&&&&&&&&&&&%%%$$$$%%&&&&$#@oXX..oOO@@#$$%%&&%$#+ooooXoXXXoXXo@#&&&%%$$#@@++XX...O+$&&&&&$$#@...O+#$$%&&&",
-"%$#@XXXo+@@@+OXXX+#&&&%%%$#@+. .+@#$%%&&%%%$@@+..ooo+@#$$%&&&%$$+++##@@+OoXXX@#&%%$@+oXXXXXXX .ooO@&%$$@++####@++ . +@#&%$#@OO..+++++. .+@#&&&&&%$$@OoXoo##%%%&&%$#@XXXoO+++OoXXX@#&&%%%$#@++OOOO...+@$&&&&&&%%%$$$$%%%&&&&&&&&&&&&%%%$$$$$%&&&&%$#@@+OO...XX+@#$$%&%$#@oXXXXXXXXXXoX@#&%%%$##OO. .Xo++@@#$&&&&&%$#@ooo+@#$%%&&&",
-"%$#@XXXOO+@+OOXXX@#&&%&%$$#@+...+@#$$%%&&%$#@++ .ooO+@#$$%%&%%$#++O@@@@+OoXXX@#&&%$#@ooXXX.XX. ooO@&%$#+O++@@@@+O...+@$&&$$++O .+++++...+@$&&&&&%$#@ooooO@$%%&&&%$#@XXXoO+++OoXXX@#&&&%$$#@+++OOO...@#$&&&&&%&$$$$##$%%%&&&&&&&&&&&%$$$##$$%%%&&%%$##@+O...XX+@@#$%&%$#@oXoXXXoXoXXoo@#&&%$##@Oo.. oo+@#$$$&&&&&%$#@ooo@#$%&&&&&",
-"%$#@XXXoO+++OOXXX##&&%%$$#@++ . ++@#$$%&%%$#++O. ooo++@##$%&%$##OOO+@+@+OoXXX@#&&%$#@ooXXXXX...XoO@&%$#+OO++@+++O. .+@$&%%$@+O..++++O...+@$&&&&&%$#@oXooO#$%&&&&%$#@XXXoOO++ooXXX@#&&&%$##@++OOOO...@#$&&&&&%%$#@@###$%%&&&&&&&&&%%%$##@@##$%%&&&%%$$#++...XXO+@@#$&%$#@OooooooXooooo@#&%$$@@+Oo. .oo##$$%%&&&&&%$#@ooo@#$%%&&&&",
-"&%$#+OO..ooo..OO+#$&&%$$++Ooo ..ooO++$$&%$$@.....XooooO+@$$&%$#@...XXooo..Xoo@$&&&%$##@@OOXXo .ooO@&%$#Ooo..ooo..XXX@#$&&%$##+. XXXXX ..+@$&&&&&%$#@...+@#$%%&&&%$$@ooX..ooo..Xoo@$&&%%$#@ooooo..Xoo@#$&&&&&&$$++...#$%%%&&&&&&&&&%$#+O...#$%%&&&&%%$$#@@@+oo...+@$&%%$##@@@@@@@@@@@#$$&%$#...XX+++@##$$%%&&&&&%%$$@ooO@#$%&&&&&",
-"%%$$++O..oXo..O++#$&&%$#+OOoo. oooO+#$&%$#@... .XXoooOO+#$&%$#@...XXooX..ooO#$&&&%%$##@+OoXX..oOO#&%$#Ooo..ooo .XXX##$&%%%$#@..X.XXX...@#$&&&&&%$#@...@##%%&&&&&$$#Ooo..Xoo..ooO#$&%%$#@@oooXo..ooO#$%&&&&%%$#+O...@#$%&&&&&&&&%%$##OO...@$$%&&&&%&%$$$#@@Oo...+@$&&%%$$##########$$$%&%$#...XX+@@##$%%&&&&&&&&%$$@OoO@$$%%&&&&",
-"&%%$##@OOXXXoO@@$$%&%%$#OOoXXXXXXXoOO#$&%$#@oXXXXXXXXXooO#$&%%##+O+XXXXXXo+@#$$&&&&%%$##+OoXXXXooO#&%%$#@+ooXXXoX+@@#$%&&&%$##++oXoXXOO+@#$&&&&&%$#@ooo@#$%&&&&&&%$##@+ooXXXXo+@#$$&&%$@@+XXXXXOO+@#$$%&&&&&%$$+OXXo@#$%%&&&&&&&&%$#@..oOO@$%%&&&&&&&&%$$$##@@@@##$&&&%%%%$$$$$$$$$$$%%&%$##@@@@##$$$%%&&&&&&&&&%%##Ooo#$$&&&&&&",
-"&%&%$##+OoXoOO@#$$%&&%$#OOooXXoXXooOO$$&%$#+ooXoXXXXXooO+#$&%%$#@++XoXoXoo@##$%&&&&%&%$#++XoXoXooO#&&%$$#@ooXXXoo@@$$$&&&%&%$#@+oooXo++@#$%&&&&&%%$#ooO@$$%%&&&&&&%$##@ooXXooo@##$%&&%$#@+ooXoXO+###$%%&&&&&%$$++ooo@$$&&&&&&&&&%%$#@..oO+##%%&&&&&&&%&%%$$$$###$$%&&&&%%%&%%%%%%%&%%&%&%%$#@###$$$%%&%&&&&&&&&&%%$#OoO#$$&&&&&&",
-"&&%%$$#@+ooo++#$%%&&&%$$+OOoooXooooO+#$&%$##ooooooooooOO+$$&&&$$@@+oooooOO##$%&&&&&&%%%$@+oooooOO+#&&%%$##OoooooO##$$&%&&&&%%$#@Ooooo+@@$%%&&&&&&$$#+OO#$%%&&&&&&%&%$##OoooooO##$%%&&%%#@@ooooo++#$%%%&&&&&&&$$@+ooO#$%%%&&&&&&&%$$@@..OO+#$%&&&&&&&&&&&&%%$$$$%$%%&&&&&&&%&&&&&&&&&&&&&&%%$#$$$$%%&&&&&&&&&&&&&&$$#+O+#$%%&&&&&",
-"&&&&%%$$##@###$%%&&&&&%$##@@@@@@@@###$%&%%$##@@@@@@@@@@##$%&&&%%$###@@@@@#$$%%&&&&&&&%%$$##@@@@###$&&&%%$###@@#@#$$%%&&&&&&%%%$$##@####$%%%&&&&&&%$$#$#$$%&&&&&&&&&&%$###@@@##$$%%&&&%%$$##@@###$$$%&%&&&&&&&%$$####$$%&&&&&&&&&%$#++oo@##$%%%&&&&&&&&&&&&&&%&%%&&%&&&&&&&&&%&&&&%&&&&&&&%%%%%%%&&&&&&&&&&&&&&&&&%%$$#$$%%&%&&&&",
-"&&&&&%%$$$#$$$%%&&&&&%%%$$#$#####$#$$%%&&%%$$$########$$$$%&&%&%%$$$####$$$%%&&&&&&&&&%%$$#$####$$%&&&&&%$$$$##$$$%%&&&&&&&&&%%$$$##$$$%%%&&&&&&&&%%$$$%%&&&&&&&&&&&%%%$#$#$#$$%%&&&&&&%$$#$###$$%%&&&&&&&&&%&%$$$$$$%%&&&&&&&&&%%#@@OO##$%%&&&&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%&%&&&&&&&&&&&&&&&&&%$$$$$%&&&&&&&",
-"&&&&&%&%%$$%%%%&%&&&&&%%%%$$$%$$$$%%%%&&&&%%$$$$$$$$$$$%%&&&&&&%&%%$%$%$$%%&%&&&&&&&&&&&%%$%$%$%%%%&&&&&&%%$$%$%%%&&&&&&&&&&&%%%$%%$%%%&&&&&&&&&&&%%%%%%%&&&&&&&&&&&&%%%%$$$%%%&&%&&&&%&%%%$$%%%%%&&&&&&&&&&&&&%%$$%%&%&&&&&&&&&%%$$$##$$$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%&&&&&&&&",
-"&&&&&&%%%%%%%%&&&&&&&&&&%&%%&&&%&&&&&&&&&%&%&%%%%%%&%&&&&&&&&&&&&&%%&%%&%&%&%&&&&%&%%%%&%%&&%&&%&&&&&&%&%%%%%%%%%%%&%&&&&%&%%%%%%%%&%%&%&&&&&&&&&&&&%&%&%&&%&&&&&&&&%&%%%&&%&%%%&&%&&&&%&%&%%%%%%&%&&&&&&&&&%&%%%%%%%%%&&&&&&%&%%&%%&%&%&%&%&%&&&&&&%&%%%&%&%&&%&&&&&&%&%&&&&&&&&%&%&&%&&&&%&%&%&&&%%&&%&&&&&&&&&&%&%&%%&&&&&&&&",
-"&&%&%%%%$$$%$%%%&&&&&&%&%%%%%$%%%%&&&&&&&&%%$%%%%%%%%%%%&&&&&&&&&%&%%%%%%%%%%%&&&%%%%%%$%%%%%&%&&&&&&&%%%%%%%$%%%%%%&%&&&&%%%%%$%%%$$%%%%%%&&&&&&%%%%%%$%%%%%%&&&%%%%$%%%%%%%%%%%%%&&&%%%%%%%%%%%%%%%%&&&&&&&&%%%%%%%%%%%%%&%&%%%$%%%%%%%%$%%&%&%&&%%%%%%$%%%%%&&&&&&&%%%%%%&&%&%%%%%%%&&&%%%%%%%%&%%%%%%%%&&&&&&%&%%%%%%%%&&&&&",
-"&&%&%%$$####$$%%%&&&&&%%%$$$$$$$%%%&&&&&%%%$$$#$#$#$$$%%%&&&&&&&%%%$$$#$$$$$%%%&%$$$$#$$#$#$$%%&%&&&%%%$$$#$#$#$#$$$%%%&%%%$$$$#$#$$#$$$$%%&&&&%&%%$$$$$$$$$%%%&&%%$$$$$$$$$$$$#$$%&%&%%$$#$#$#$#$$%%%%&&&&%%%$$$#$#$#$$$%%&%%%$$$$$$$$$$$$$$%%&&%%%$$$#$$$$$%%&&&&&%%%$$$$$%%%%%%$$$$%&%%%$$$$%%%%%$$$$$%%&&&&%&%%$$$$$$%%%&&&&",
-"&&&%$###@@@@@#$%%%&&&&%%$$##@###$$%&&&&&%%$##@#@@@###$$%%%%&&&%%%$$####@####$$%&%$##@#@@#@##$$$%%&&&%%$##@#@#@@@#@##$%%&%%$###@#@@@@#@@##$$&&&%%%$$###@#@###$$%&%$$###@###$#######$&%%$$####@@#@###$$%%&&&&&%$$##@#@@#@##$$&&$$###@###$######$%&&%%$##@#@@##$$%%&&&&%$$$###$$%%%$$###$$&%%$$###$$$$$#####$$&&&%%%$$$#####$$%%%&&",
-"&%%%##+oo...++#$%%&&%&%$@@+OOOOO#$$%&&&&%$$+OOOOOoOOO@##$%&&&&%%$$@@OOOoO+++@@$&$@@OOOOoOOOO+#$$%%&&%$#+OOoOoOOoOOOO#$%&%$#+OOoOOOOoOOOO+@$&&&%%$$@@OOoOO+++@@$&%$@+OOOOO@@@OOoOO+@&%%$++OOoOoOoO+++$%%&&&%%%$++OOOOoOOO+@$&%$@+OOOOO@@@OOOO+#$&&%$#+OOOOoOO@#$%%&&&%$@+OOO##$$$##OOO+@&%$#+O++@#$#@+OOO@@$&&&%%$#@+OOO++#$$%%%&",
-"&&$$#@+oX ..OO#$$%&&&%$#@+OooooO@#$%%&&&%##OooooooooO+@#$$%&%%$$##++oooooOO+++$&$++ooooooooOO@##$$%&$$#OOoooooooooOO@$$&%$#Ooooooooooooo++#&%%$$##++oooooOO++@#&$$@+OoooO+@+OoooO++&%$#+OOoooooooO++#$%&&&&%$#+OoooooooO+@$&$$@+ooooO+++OoooO#$&%%$#OooooooO+@$%%&&&$$++OOo@@#$#@+OoO+@&$##OOo++@##++oOo++$&%%$$##++OooOO@##$$%&",
-"%%$#@++XX.. Oo@#$%%&&%$$++Oooooo@##%%%&&$$@OoooXooooo+++#$$&%$$#@@OOoooooOOOO+#&#++oooXoooooO+@@#$%&$#@OooooXooXoooo@#$&$#@OoooXoXooXoooO+#&%$$#@@O+oooooOOOO+#&$#+Oooooo+++ooooo++&%$#+OOooooooooO+#$%&&&%%$#+OooooooooO+#&$#++ooooo+++ooooO@#&%$$#Oooooooo+@$$%&&&$#+Oooo+@@##@+oooO+&$#@oooOO@@@OOooo++#&%$$#@@+OooooO+@@#$$&",
-"%%$#OooXooOO..+@#$%&&%$#OOo.. . O+#$%&&&$#@XXX..XXXXX...@#$&%$#OOo..XXXXX...oo@&#+O...XXXXXXX...@#$&$#@XXX .XXXXX ..+@$&$#@XXX..XXXXX...Xo@&%$#OOo..XXXXX ..oo@&$#+O...XX++OXX...O+&%$#+OoXX . XXoo+#$%&&&&%$#OoXXX. XXXO+#&$#+O.. XXOOO XXo@#&%$#@ooX .XXo+@$%%%&&$#+O. .oo@@+Oo . O+&$@@.....++@Oo ..o+#&%$#OOo..XXXXX...@#$&",
-"%$##OooXooOO..+@#$%&&%%$OOo.. . oO@$$%&&$#@XXX .XXXXX...@#$&$##ooo..XoXXX. .Xo@&#+o. .XXXXXXX...@@$&$#@XXX..XXXXX. .+@$&%#@XXX .XXXXX...Xo@&$##ooo..XoXXX.. Xo@&$#+O. .XXO++XX . O+&%%#+OooX. .XooO+$$%&&&%%$#OOoXX..XXXO+$&$#+O...XXOOO. XXo@#&&$$@ooX. Xoo+@$%%&&&$#Oo .oo@+@oo . OO&$@+.. ..+++oo. .O+#&$$@Ooo..XoXXX...@##&",
-"&$#@XXXOoOoo..O++$%&&%$$#@+XXXXXXo@#$%&&$$@+ooXXOOOOO...+@$&$#@...OO++@++oooXo@&$@+XXXoO+++++...O+#&%##+ooXX+++++...+@$&$##OOoXX+++++ooooo#&$#@...oO++@++oooXo@&%#@+XXXoO+++ooXXX+@&%%$##@++...++@##$%&&&&&%%$#@@+OXXoOO@#$&%#@+XXXooXXXXX++@#$&%%$#@++..O++##$%&&&&$#@+. XX+++XX. ++&$#@XXX..OOO+O...++#&$#@...OO+++++...O+#&",
-"%$#@XXXooOoO..O++#$&&&%$#@+XXXXXXo@#$%%&%$#+OoXXO+++O...+@#&$#@...OO@@@#@ooooo#&$@@XX.OO@@@++...oO#&%$@+OOX.+O+OO...+@$&%$#+OoXXO++++oOooo#&$#@...OO@@@@@ooooo@&%$@+XXXoo+++OoXXX@@&%%%$##++. .+@@$$$%&&&&&%%%$##@+XXoO+@#$&%$@+XX.OOX.XXX+##$%&&%%$#@+..++@#$%%&&&&$#++ . XXO++XX . ++&$@+XXX .ooo+O...+@#&$#+...OO@@@++...oO#&",
-"%$#@XXXOOoOo..OO+$$&&%%$#@@XX.XXXX@@$%%&$$#+OoXX+OOO+...+@$&##+...O+@####+OOoo#&$#+XXXOO@@#@+...OO#&%$#+OoXXO++++...+#$&%$#+OoXX+++++OoOoo#&$#+...O+@###@Ooooo#&$$#+XXXoO+++oO.XX+#&&&%$$#@+...+@#$%%&&&&&&&&%$$#@+XXOO+#$%&$$#+XXXOoXXXXX@#$$%&&&%$##+..+@@$$%&&&&&$#++. XX+OoXX .+@&$#+XXX .OOOO+ ..++$&$#@...O+@##@+...OO@&",
-"%$#+XXXXo.. . O++#$&&%%$#@+..OoO..+@#$%&%$#+OO. oooXX ..+@#&$@+...+@#$$$######$&$#+XXXO+@###@oooXo@&%$#+OOXXOOO..++@#$$&%$#+OOXXOO+..++@##$&$@+...++####@@++@@#&%$#+XXXXXoooXXXXX@@&&&&%%$@@. .@@#$&%&&&&&&%&&%$$#+XXoO+#$%&%$#+XXX.....O@@#$%%&&&%%$@@..++#$%%%&&&&$$++.....OOO.....O@&$#@XX.oXXXXO+...+@#&#@+...+@##$#@ooooo@&",
-"%$#+XXXoo . ..OO+#$&&%%$@@O..OOO .+@@$%&%$$+Oo..oXoXX . +@#&#@+...+@#$$%$$$#$$$&$#@XXXO+##$#@ooooo@&%$#@OoXXOOO..O+@#$%&%$$+OoXXO+O..+@##$$&#@+...+@####@+@+@##&%$#+XXXoXoXoXXXXX+#&&&&%$$#+...+#$%%&&&&&&%&%%&$$#@XXO++#$%&$$#@XX......++#$%%&&&&&$$#+..+@#$%%&&&&&$#@+.. ..OOO.. ..+@&$#+XXXXo.XX+O ..+@$&#@+...+@#$$#@ooXoo#&",
-"%$#@XXXXXXXXXXo++#$&&%$$++OXXOO+XXo++#$&%$#++O. XXXXX...O+#&#@+. .+##%%%%%%$$%%&$@@XXXO+##$##OooXo@&%$#+OO .. ..+@##%%&%$#+OO . ...@@#$%%&#@+. .+@###OOooo++$&%$#@XX.XXXXXXX.XX@#&&&&&%##+...+#$$&&&&&%%%%%$%$$@@XXOO+#$%&%$@@XXX. . .O+#$$&%&&&&%$#+..+@#$$%%%%&&%#@+...Xo. .Xo...+@&$#+XXXOO...oO...+@#&$++...@##$$##OOoXo@&",
-"%$#+XX.XXXXXX.OO+#$&%%$#+OoXXOOOXXOO+#$&%$#+Oo..XXXXX. .O+@&#@+...@@$$%&%%%%%%%&$#+XXXO+##$$@OOOXo@&%$#@OO . ....+@#$$%&%$$+OO . . ..+#$%%&&#@+...+@##@OooooO+#&%$@+XXXXXXXXXXXXX@#&&&&&$$#@ ..@@$%%&&&&%%$$$$$$$@@XXO++$$%&%$#+XX.. ...O+@$$%&&&&%$$#@..++#$$$$$%%&$#@O...oX . oX ..+@&$#@XXXOo...OO...+@$&#@+...+@$$$#@OOoXo@&",
-"%$#@XXXoo. ...ooO#$&%$#@+OoXXO+OXXoO+##&%$#++O .XXXXX. .o+@&#@+...+@$$%%%%%$%%%&$#@XXXO+#$###OooXo@&%$#+OO. . ...++@#$$&%$#+OO . . ..@##%%&&$++...+@##@OooooO+#&%$#@XX.XXXXXX.XXX+#&&&&&%$@@. .+#$$&&&&&$$##@#####+XXOO+#$%&%$#@XXX.. . O+@#$$%&&&&%$@@..+@@#$$$$$%&%#@+...oo . oo...+@&$#+XX.OO...oO...++$&#@+. .+##$$#@OooXo@&",
-"$$#+XXXXX.. ..ooo##&%%#@XXX. . . XXo@$&%%#+OOXX+++++XooXo@&#@+. .+@#$%%$$$$$$%&$@+XXXO+##$#@OOoXo#&%$#+OoXXoOO..O+++@$&%$#++oXXOOO..@#$%&&&$@+...++@@@XX...oo@&%$#+XXXoo+O+OoXXX+#&&&%%$##+...+@$%%%&&&$#@ooo####+XXO++#$%&%$@+XXXoooXo..+@#$%&&&%%##+..+@@##+++#$&$#@+. .O+XXX+O...++&$#+XXXoooooXX ..+@#&$@+...+@#$$#@oooXo@&",
-"%$#@XXXOooXoXXooO#$&$$#@XXX . . . XXo+#&%$#+OOXX+++++oooXo@&$@+...++##$$##@###$&$#@XXXO+@###@Ooooo@&%$#++OXXoOo..OO+++#&%$#+OOXXoOO..@$$%&%&$@+. .++@@@XX...oo@&%$@@XXXoO+++OoXXX@@&&&&%%##+...@@#$&%&%&$@@XXX+@@@+XXoO@#$%&%$#@XX.OoooX..O+@#$&&&%$$@+..O+@@@OO+@#&%#@+...O+oXX++. .+@&$#@XXXoooooXX...+@#&#@+. .++@##@@oXoXo#&",
-"$$#@XXXooooXXXooO@$&%#@+. .ooOOOOO...+@&$$#+OoXX++@++XXoXo#&##+XXXoo@@###OooOO#&$@+XXXOO@@@++...O+#&%$#+OoXX+O+O+ooooo#&%$#+OoXXO++++#$%%&&&$@@XXXoO+@+++XXXXo@&$$@+XXXOO+@+OoXXX@@&&&%$$#@+. .+@#$$%%&&$@+...++@@+..O++$%%&$$@+XXXOo++OXXooO#$&&%%$##+..++++@...@#&$#++...+++@++O...+@&$#+XXXOO+++... .+@#&$@@XXXoO@@#++...O+@&",
-"%$#+XXXoOXooXXooO#$&$#@+...oOOOOoo. .+@&%$@+OoXXO++++oXXoo@&$#@XXXoo+@@++ooooO#&$@+XXXoO@@@++...O+#&%##OOoX.+O+OOooooo@&%$@+OoXXO+++@#$%%&&&$#@XXXXo+++++XooXo@&$$@+XXXoO+@+OoXXX+@&%%$$#@@+. .+@@#$%%&&$@+...+++++..O++#$&&$$@+XXXoOO++XXooo@#&&%$$@@+..O++++...+@&$#++...++@@@++...O@&$@@XX.Oo+++... .+@#&$#@XXXXo++@++. .++#&",
-"%$#@oXXooOO+oOO+@#$&$#@O. .oOOOOOo...++&$#@OOoXX+++++XoXXo@&$$@XXXoo+++++ooooO#&#@+XXXOo++++O...+@#&$$@OOOXXO+OO+oooXo@&$$@OOoXXO+++@#$%&&&&$$@XXXoo+++++oXooo#&$#@+XXXOO+++OO.XX+@&%%$#@@++...++@@#$$%&$@+. .OO++O..O+@$%%&$#@+XXXOO+++XXooo+#&%%$#@++..OOOO+...+@&$#+O...++@@@++...++&$#+XXXOO+++.. ..+@$&$$@XXXoo+++OO...+@$&",
-"%$$#OooXo+O+oO++@$$&$#Oo ...OOO.. oO&$#@. . . . ....+@#&%$#++OXX. ...XXX+@#&#Oo .. . . Xoo@#$&$#@.. . . . ... Xo@&$#@.. . ..++$$%&&&&%$#++O..... XXX+@#&$#Oo ...+++.... oO&%$$Ooo ..ooO$$%&$#@oXX. ...XX@@$$%%&$#Oo ..+++Oo . oO&%$#@. . .... . @@&$#Oo .oo@#@oX oO&$@+. . .+++oo +@#&%$#++O...... ooo@#$&",
-"&%$#@+O... ...+@@$%&$#Oo. ..O+O.. .oO&$#@ ... . .. ...@@$&%$$@++XX.. ..XXX@@$&#Oo . ... . .Xoo##$&$#+. . . . .. ..oo#&$#@. ... . ++$%%%&&&%$$@++.. ....XXX+@$&$#Oo. ..++O . ..OO&%$#Ooo... . .ooo$$%&$$#ooo .. .Xo@#$%%&&$#Oo . ..+@@++. .oO&%%#@ . . .... . .+#&$#Oo. oo#@#oo . oO&$#+. . @@@oo.. @@$&%$$@++... ...oOO#$$&",
-"%%%$#@+.......+@#$%&$#@@+++++@@@++++++#&$$@@+O+O+++++++@@$$&&%$$##@@+++++@@##$$&$#@++O+O+++++@@##$%&$$#++++++++O++++@@#&%$#+++O++++@#$%&&&&&&%$$##@@++O+++@##$$&%#@@O++++@@@++++++#&%$$@@++++O+O++@#$$&&%$##@@++O+O@@#$$%&&&%$@@+O+++###@@+@+@@&%%$#@+++++O++O+++##&$$@+++++@###@@+++@@&$$#+++++@#@@@+++##$&&%$$##@@+++++@###$%&",
-"&%%$$##@@+++@@##$%&&%$#@@@+@@###@@+@@@#&%$#@@+@+@+@@@@@##$%&&%%%$###@+@+@@##$$%&$$#@@+@++@+@@##$$%%&%$$@@@+++++@+@@@@#$&$$$@@+@++@##$%%%&&&&&%%$$$#@@@+@@###$$%&%$#@@+@@@###@+@+@@#&&%$#@@@++@+++@@#$%%&%%$$#@@@+++##$%%&&&&$$#@@@@@@##$$##@@##&&%$$@@@+++@++@+@@#$&%$##@@@@##$###@@@##&%$#@@@@@#$$##@@@#$%&&%%%$###@@@@@##$$%%&",
-"&&&%%$$##@@@##$$%%&&%%$###@##$#$######$&&%$####@###@###$$%%&&%%%%$$$#####$$$%%%&%$$###@#@####$$$%&%&%%$###@###@######$%&%%$###@##@#$$%&&&&&&&&&%%$$$######$$%%&&%%$###@##$$$######$&%%%$$###@#@@###$%%&&%%%$$$#@#@#$$$%%&&&&%$$##@###$$%$$###$$&%%%$#####@#@#@###$%&%%$#####$$%$$#####$&%%$#####$$$$$##$$%%&&&%%%$$$#####$$%%&&&",
-"&&&&%%$$$$#$$$%%%%&&&%%$$$$$$$%%$$$$$$%&&%%%$$$$$$$$$$$%%%&&&&&&&%%$$$$$$$%%%&&&%%$$$$$$$$$$$$%%&%&&&%%$$$$$$$$$$$$%$%%&&%%%$$$$$$$%%&&&&&&&&&&&&%%$$$$$$%%%%&&&&%%$$$$$$%$%$$$$$%%&&&%%$$$$$$$$$$$%%&&&&&%%%$$$$$$$%%&&&&&&&%%$$$$$%%%%%%%%$$%&&&%%$$$$$$$$$$$$%%%&&%%$$$$$%%%%%$%$$%%&&%%$$$$%%%%%%%%$%%&&&&&&&%%$$$$$%%%%&&&&",
-"&&&&%&%%$%%$%%%&&&&&&%&%%%%%&%%%%%%%%%&&&&%%%%%%%%%%&%%&&%&&&&&&&%&&%%%%%&&&&&&&&&&%%%%%$%%%%&&&&&&&&&&%%%%$%%%$%%%%%&%&&&%%%%%%%%&&%&&&&&&&&&&&&&&&%%%%%%&&&&&&&&%&%%%%%%%&%%%%%%%&&&%&%%%%%%$%%%%%&&&&&&&&&&%%%%%%&&&&&&&&&%&%%%%%%&&&&%%&%&&&&&&&%%%$%%%%%%%%%&%&&%&%%%%%%%&%&%%%%%&&&&&%%%%%&&&%%%%&&%&&&&&&&&%&%%&%&&&&&&&&",
-"&&&%&%&%%%%&%%&&&&&&&&&&&&&%&%&%&%&&&&&&&&&%&%&%&&%&%&&&&&&&&&&&&&&%&%%%&&%&&&&&&&&%%&%%%&%&&%&%&&&&&&&&&&%&&&&&&%&%&&&&&&%&&%&%&&%&&%&&&%&&&&&&%&%&%&&%&%&%&&&&&%&&&%&&&%&&&%%&%&&&&&&%&%&%&&&%&%&%%&%&&&&&&%&%&%&%&%%&&&&&&&&&&%%$$$$$$%%&%&&&%&%%%%%%%&&&&&&&&&&&&&&&&%%%$$$$$%%&%&&&&&&&&&&%&%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&",
-"&&%%%%%%%%%%%%%%%&&&&&&&&%%%%%%%%&%&&&&&&%&%%%%%%%%%%%%&&&&&&&&&&%%%%%%%%%%%%&&&&&%%%%%%%%%%%%%%%%&&&%%%%%%%%%%%%%%%%%%&&&%%%%%%%%&%&%%%%%&&&&%%%%%%%&%&%%%%%%%&&&%%%%%%%%%%%%%%%%%&&&&%%%%%%%%%%%%%%%&&&&&&%%%%%%%%%%%%%%%&&&&%%%$#####$$%%&&&&&%%$$$$%%%%&&&&&&&&&&&%&%%$$#####$$&%&&&&&&&&&%%%$%$%%%&&&&&&&&&&&&&&&&&&&&&&&&&",
-"%%%$$$$$$$$$$$%%%%&&&&&%%%%$$$$$$%%%%&&&&%%$$$$$#$$$$%%%&&&&&&&%%%$$$$$$$$$$%%%&%%%$$$$$$$$$$$$$%%%&&%%$$$$$%%$%$$$$$%%&%%%$$$$$%%%%$$$$$$%&%%%$$$$$%%%%%$$$$$%&&%%$$$$$$%$$$$$$$$%&&%%$$$$$$$%$$$$$$$%&&%%%%$$$$$$$$$$$$%%&&&&&%$#++OO+@#$%%%&&%$$####$$%%&&&&&&&&&&&&%%$#@OOO++#$%&&&&&&&&&&%$$$#$$%%%&&&&&&&&&&&&&&&&&&&&&&&&",
-"&$$###@#@#@####$$%%&&&%%%$$#######$$%%%&%$$$#@#@######$$%%&&&%%%$$$##@#@###$$%%&&$$$###@@#@@####$%%&%$$######$$######$$&%$$$####$$$$$#####$&%$$$#####$$$$#####$&%$$#######$$######$&%$$######$#$######$&&&%$$###@#@#@####$$&&&&%$$@OOooO@#$$&&&&%$#Ooo+@$%%%&&&&&&&&&&&%$##@OoOOO##$%&&&&&&&&%%$#+++#$%%%&&&&&&&&&&&&&&&&&&&&&&&",
-"%$##@@+@+@@@@@@#$$%&%&%$$#@@@+@@@##$$%%&$$#@@@@+@+@@@##$$%%&&&%$$#@@@+@+@@@@#$$&%$#@@+@@+@+@+@@@#$%&%$##@@@@###@@@@@##$&%$#@@@@@@####@@@@@#&%$#@@@@@####@@@@@##&$$#@@+@@@@@@@@@@@@#&$$#@@@@@@@@@@@@@@@#&%%%$##@@+@+@+@@@@#$&&&%%$#@...XX+@#%%%&&%$#ooo++#$%%&&&&&&&&&&%%$#@+XX...@#$%&&&&&&&%%$#@+OO@#$%%&&&&&&&&&&&&&&&&&&&&&&&",
-"$#@..........ooO#$$&&%$#@@oo.....++@$$%&$#Oo........oo@##$%&%%$#@@..........@#$&$#@.............@#$&$#@.....+++oo...oO#&$#Oo...oo@#@oo...oO&$#Oo...oo@@@oo...oO&$#Oo.....+++.....OO&$#Oo.....+++.....oO&&$$#ooo..........@#&&&&%$#@ .XX+##%%&&&%$#+OOoo@$$%&&&&&&&&&&&%$#++XX...@#$%%&&&&&&%$#@+ ..+@$%%%&&&&&&&&&&&&&&&&&&&&&&",
-"$#+... . . ..ooo@#$&%$$#@+XX.....OO+#$%&$#Oo.. . .. Xo+@#$$&%%$#++..........@@$&$@+.. .. ... ...+@$&$@+.....++@Xo...oO#&$#Oo...oo@@@oX...oO&$#Oo...XX@+@XX...oO&$#Oo.. ..OOO.. ..oO&$#Oo.. ..O+O. ...oO&%$##oXX.. . .....+@&&&%%$@@.. XX@@#$&%&&%$#+Oooo@#$%&&&&&&&&&&%&$#@+XX ..+#$%&&&&&&&%$#++. .++#$%%&&&&&&&&&&&&&&&&&&&&&&",
-"$@@. ....... oXo@@#&%$#@++XX . ..OO+@#$&$#oo .... ..XX++@#$&%$#@++.. . .....+@$&$@+... . . ... .+@$&$#+.. ..+++XX. .oo@&##oo. .Xo@@@oo ..oo&##oo. .XX+++XX. .oo&$#oo... .+OO .. .oo&$#oo .. .OOO... .oo&&$#@oXX. .. . ..+@&&&&%$@+...++#$$%&&&&%$#+OOXX@#$$%&&&&&&&&&%&%$##++...@@$$&&&&%&%$$#+O. .++#$%%&&&&&&&&&&&&&&&&&&&&&&",
-"$#@OooXXoOOOOXXXoO#&$#@oXXooOOOoO...+@$&$#@+...ooOOOXoXXX#$&%$#oXXXXOOOoo. .+@#&$@+...OO . Oo...+@#&$#+...oO@@@++...O+#&$#+O...++@@@++...O+&$#+O...OOooOOO...O+&$#@+ ..XX+++XX...++&$#@+...Xo+O+XX...++&%$#@XXXooOOOXo...+#&&&%$$#@. .+@#$%&%&&&%%$#@+..+@#$$&&&&&&&&&&%%%$#@+. .+#$%%&&&&&%$#@ooXXXXo@#$%&&&&&&&&&&&&&&&&&&&&&&",
-"$$#OooXXOOOOoXXXoo@&$#@XXXXoOO+Oo. .+@#&$#@+...ooOOOXXXXX@#&$#@ooXXXOOOOO. .+@$&#@+ ..oO.. OO...+@$&##@...Oo@@@++...++#&$#++...++@#@+O...++&$#+O...O+ooo+O ..++&%#@+. .oXOOOoX. .+@&$#@+.. oXO+OoX. .+@&&$$@XXXoooOOXX ..@@&&&&%$@+...+@#$%&&&&&&%$$#@..++@$$%%&&&&&&&&&%%$#@+...+#$%%&&&&%%$#@oo.XXXX@#$%%&&&&&&&&&&&&&&&&&&&&&",
-"%$#+OoXX++@@+oooXo@&$@+...O+@@@++XXXoo#&%#@+XXXoO+++OoXXX@#&$#@XXXoo++++OoXo+@$&$@+...+O ..O+ ..+@#&$@@XXXOO@##@+...++#&%$@+XXXO+@#@++XXX+#&$#@+...OO. .OO...++&%$#@+Oo..oXo. OOO@#&%$#@OOoXXOOO..OO+@#&%$$@OooOO+OO..OOO@$&&&&$$#@...@@$%%%&&&&&&$$#@ooooO#$%%&&&&&&&&&&%%$#+...@@$$&&&&&%$#@+..OOO..@@#%%&&&&&&&&&&&&&&&&&&&&&",
-"$$#+OoXX++@+@oooXo@&$@+. .O+@##@+XXXoo@&%$#+XXXOo+++OoXXX@#&$$@XXXoo+++++Xoo@#$&$@+...O+ . +O...+@$&$#+XXXO+###@+...++$&$$#+XXX++@##+OXXX@@&$#++. .oO. .oO ..+@&%$$#+OO. oXX..OO+#$&%$$#++oXXOOO..OO+#$&&$$#OOoOOO+O. OO+#$&&&%%$@+. .+#$$&&&&&&&&%$#@OoooO@#$%&&&&&&&&&&%%$@@ ..+#$$&&&&%&$#@+..+O+..+@#$%&&&&&&&&&&&&&&&&&&&&&",
-"%$#++oXX++@@+OooXo@&$@+...O+####@XXXXo#&%$#@XX.Oo+++oOXXX@#&$$@oXXooO++++Xoo@@$&$#@...++.. ++...@@$&$#@XXXo+@###+...+@#&%$#@XXXO+@@@+OXXX@#&$$@+...Oo . OO...+@&&%$#@+O..XoX .O++#$&&%$#++OXXOOO..O++#$&&%$#+OO+O+OO..O++#$&&&&%$@+. .+##%%&&&&&&&&%$#Ooooo@#$%%&&&&&&&&&&%$#+.. @@$%%&&&%%$#@+..+++..@@$$%&&&&&&&&&&&&&&&&&&&&&",
-"%$#+OoXX++@++XooXo@&#@+...+@#$$#@oooXo@&$$#+XXXXoooo..XoO@$&$$#+OO... .ooOO+@#$&$##@++++ ..++++@#$$&$#+XXXO+#$#@@...+@#&%$#@oXXoo@@@OoXXX@#&$#@+...Xo .XX...+@&%%%$#@+oo. .oo@@#$%&&%%$#@+XX.. XX@@#$%&%%$$##@@+XXXXX@@#$%&&&&$$#@...+#$$&&&&&&&&&%%$#@oXXOO##%%%&&&&&&&%$$#@...+#$$&&&&&&$#@@Oo@+@OO+@#%%&&&&&&&&&&&&&&&&&&&&&",
-"%$$++OXXO++++oXoXo#&#@+...+##$$#@OoOXo@&%$#+XXXXXooo..Xoo#$&%$#+OO. .. oo+++@$$&%$$#@+++.. ++@@@$$%&$#+XXXO+@#$@+...+@#&%%$@ooooo+@+OoXoo@$&$#@+...Xo XX...+@&&%%$$#@Oo . Oo@@$$%&&&%%$#@XX ..XX@#$%%&&&%$$#@@+XXXXX@#$$%&&&%$$#+...+#$%&&&&&&&&&&%$$@ooXoO@#$%&&&&&&&&&$$@+...+#$$&&&&%%%#@@++#@#O+@##%%&&&&&&&&&&&&&&&&&&&&&",
-"%$#+Oo. .....XXX++#&$@+...+@####@OooXo@&$$#+XXX.....XX++@#$&%$##@+O+Xoo.....@#$&%%$$$#@+...+@##$$%%&$#+XXXO+###@@...+@$&&$$#+OOXX+++XXOO+#$&%#@+.....OOo.. ..++&&&%$##+oXXXXXo+#$$%&&&&%$$@++.. +@@$$%&&&&&%$##OO...++@@$$%&&&%$$#+...+##$&&&&&&&&&&%%$#@++..@#$%%%&&&&&&&%$@+.. @@$%%&&&&&%%$$###$$##$$$%&&&&&&&&&&&&&&&&&&&&&&",
-"%$#+OO . . ..XXX+@#&#@+. .O+@@#@+XXXoO@&%$#@XXX... .XX+@##$&%$##@@O+ooX.....@#$&&%%$$#@+. .+@#$%%&&&$#@XXXO+####+...++$&&%$#+OOXX+++XXOO+#$&%#@+. ...ooO ....+@&&%%$#@@oXXXXXo+@#$%&&&&&$$#++ ..+@#$%%&&&%%%$#@Oo...++@##$$&&&&$$@@. .@@$%%&&&&&&&&&&%$$@++..+##$%&&&&&&&%$$#@...+#$$&&&&&%%%$%$%$$$%$$%%%&&&&%%&%%%%%&%%%%%&%&&",
-"%$#+OO. .. . XXX@#$&$@+...O++@@++XXXoO@&%##+X.X.... XX++@$$&%$#@@+OOooo.....@@$&&&&%$##+...@@#$%&%&&$#+XXXO+@##@+...+@#&%%%$@+OXXO+OXXO++$$&$$@+... .OOo.....+@&%%$$#@+Xo.XXoo+@#$$&&&&%%$#@+. .+@#$%&&&&&%$##@Oo. .+++@##$&&&&%$#+...+##%%%&&&&&&&&&&%$$@@XX++@$$%&&&&&&%$#@+...+#$$&&&&&&&&%%%%&%%%%%%&&&&%&%%%%%%%%%%%%%%%%%&",
-"%$#+OoXXoOOOO+@@#$$&$#@oXo..oOooo. .++#&%$@@XXXooOOO..o++#$&$#@XXX++++OOO...+@#&&&%%$#@+. .+@#$%&%&&$#@XXXOO@@@@+...+@$&&%%$#@+..OOO..+@#$%&%$#+XXX .OOO. XXX+#&%$$@+OO..OOO..oOO#$&&&&&%$#@+...+@#$%%&&%%%$#@+..ooo++XXo@#&&&&%##@. .+@#$%&&&&&&&&&&&%$$#@XXO+@#$%&&&&%&%$#@+ ..@@$%%&&&&&&&&&&%&&&&&&%&&&&%%%$$$$$$$#$$$#$$$%&",
-"$$#+OoXXOOOO+@##$$%&$$#ooX..ooOXo . +@#&$$@+XXXOO+OO .OOO@#&$@@XXX++O+++O...+@$&&%%%$#@+...+@#$$%&&&$#@XXXOO+++++ ..+@#&&&%%##@..OOO..@#$%%&$$#+XXX..OOO. XXX+#&%$#@Ooo .OOO .oOO@#&&&&%$$@@+. .+@#$$%&&&%$#@++ .ooo+OXXX+@&&&%%$@@...+@#$$%%&&&&&&&&&&%$#@oXO++#$%&&&&%&%$#@+.. @@$%%&&&&&&&&&&&&&&&&&&&&&&%$$###@@###@#@###$$&",
-"$#@oXX..XooO+##$%%%&%$##++XX . XXOOOO+#&$#+O.. Xo+++Xo...+@&$@+ . XooooXo ..+@$&&&%$#@Oo .OO@#$%%&&%$#OooXXoooooXXX@#$&&&%%$#@oo. .Xo@@$%%&%$#@XX.XXO+OXX.XX@#&$#++ . XXOOOXX. .O+&&&%%$#@oo . OO@#$%%&%%$#oXX..oXooo...+@&&&%%$#+. .oo@#$%&&&&&&&&&&%&$$@+OXXX@#$&&&&&$$#@Oo...+#$%&&&&&&&&&&&&&&&&&&&&&&&$#@++OOOOOOOOOoO++$&",
-"$#@oXX..Xoo++#$%%&&&%$#@@+XX . XXOOOO+#&$#+O...oX+@+oX...++&#@+. oXooooX ..+@$&&%$$@@oo.. oO@#$%%%&$$#+OoXXooooXXXX@#$&&&&%$#@oo. .oo@#$%&&%$#+XXXXX++OXXXXX@#&%#+O .XX+O+XX. .O+&&%%%##+Oo ..oO@#$%%&%$$@ooX. oXooo ..+@&&&&%$#+...oo@@$$%%&&&&&&&&&&%$#+OXXX@#$&&&&%%#@@oo ..+##%%&&&&&&&&&&&&&&&&&&&&&&$@+OOOooOOOOOoooO+#&",
-"%#@oXX..ooo+@#$%%&&&%%$++o. XXX.....O+#&$#+O...Xo+@+oo...++&$@+ . XooooXo...@#$&&%$$@@oo . Oo+@#%%&&%$#+OOXXXooooXXX@#$&&&&%%$#Oo.. oo#$$%%&%$#@XXXXX+++XXXXX@#&$#+O. XX+OOXX ..O+&&&%$#@@oo. oO+@#%%&&$$#oXX. ooXoo...+@&&&%$$#@. .oo+@#$%&&&&&&&&&&%%$$@+...+#$&&&&%$#@+oo...@#$%&&&&&&&&&&&&&&&&&&&&&&&#@+OooooooooooooOO@&",
-"$#@oXXXXXXX++$%%&&&&%%$@+O. XX.. ...O+#&%#+OXXXXX@@@++XXXO+&$#@oooXXXXXXXOO+@#$&&&%#@@XXXXXXo+@#$%%&%$$##+XXXXXXXOO+#$%&&&&%%$#+OXXXO+#$%&&&%%$#Ooooo@@@ooooO@$&$#+OXXXXX+++XXXXXO+&&&&$#@+XXXXXXX+@#$%&%%##OOoXXXXXXXXXX@@&&&&%$#@oXXXX+@#$%%&&&&&&&&&&%%$#@...@#$&&&&%$#@+XXXXX@#$%%&&&&&&&&&&&&&&&&&&&&&&#+OXXXXXXXXXXXXXXX#&",
-"$#@oXXoXXXo+@$%%&&&&&$$@+O. XXX.....O+$&$$++XXXoo@##@@oXo++&$#@OooooXXXXX+++#$%&%%%$#@oXXXXXo@@#%%&&&&$$##ooXXXXX++@#$%&&&&%%$$@+oXo++#$%&&&%%$#OOOOO@#@OOOO+#$&%$++XXXXX@+@XXXXo++&&%%%#@@oXXXXXo@@#%%&%%$#OOoXXXXXXXXXo@#&&&&%$#@ooXXX++#$%&&&&&&&&&&&%%$##...@#$&&&%%$#@+XXXXX@#$%&&&&&&&&&&&&&&&&&&&&&&&#+OXX.XXXXXXXXXXXo@&",
-"%$##@@@@@@@#$$%&&&&&&%$$#@+++++OO+++##$&%$###@@@##$$##@#@#$&$$###@@@@@@@@@#$$%%&&&%$$##@@@@@@#$$%&%&&%&$$##@@@@@@@#$$%&&&&&&%%$##@#@#$$%%%&&&%$$##@##$#$#####$%&%$###@@@@####@@@@#$&&&&%$$#@@@@@@##$$%%&&%%$##@@@@@@@@@@@#$&&&&%%$#ooooo+@#$%%&&&&&&&&&&%&%$#@@@#$$&&&&%$#@+oXXXo##%%%&&&&&&&&&&&&&&&&&&&&&&$++XXXXXXXXXXXXXXo#&",
-"%%$$$####$$$$%%&%&&&&&%$$#@@#@#+@+@@#$%&%%$#####$$$$$$$#$$$&%%$$#########$$$%%%&&&&%$$$#####$$$%%&&&&&&%%$$######$$$%%&&&&&&%%%$$##$$$%%&&&&&&%%$$$$$$$$$$#$$$%&%%$$###$#$#$#$####$&&&&&%$$$#####$$$%&%&&&%%$$$####@####$$$&&&&&%$$#@@@##$$%&&&&&&&&&&&&&%%$$#@@$$%&&&&&%$$#@@@@##$%%&&&&&&&&&&&&&&&&&&&&&&&$$##@@@+++++++@@@#$&",
-"&%%$$$$$$$$%%%&&&&&&&&%%$$#@###@#@##$$%&&%%%$%$$$%&%%%%$$$%&&%%$%$$$$$$$$$%%%&&&&&%&%%$$$$$$$%%&&&&&&&&&%%%$$$$$%$%%%&&&&&&&&&&%%%$$$%%&&&&&&&%%%$%$%%%%%$%%%%&&&%%$%$$$%$%%$$$$$%%&&&&%%%%$$$$$$$%%&%&&&&&%%$$$$$$$$$$$$%%&&&&&%%$$$##$$$%%%&&&&&&&&&&&&&%%$$#$$%&&&&&%%%$$$#$#$$%%&&&&&&&&&&&&&&&&&&&&&&&&$$$###############$&",
-"&&&&%%%%%%%%&&&&&&&&&&&%%%$%%%$$$$$$%%&&&&&%%%&%&%&&%%&%&%&&&&&%&%%%%%&%&%&&&&&&&&&&%&&%%%%&%%&&&&&&&&&&&%&%%%%%%%&&&&&&&&&&&&&%%&%&&&%&&&&&&&&&&%&%&&&&&%&&&&&&&&&%%%%%%%%%%%%&%&&&&&&&&%&%&%%%%%&%&&&&&&&&&&%%%%%%%%%&%&&&&&&&&%%%$$$$%%%&&&&&&&&&&&&&&&&%%%%%%&%&&&&&&%%%$$$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&%%%$$$$$$$$$$$$$$%%&",
-"&&&&&&&&%&%&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%&&&&&&&&&&&&&&&&&&&%&%%%&%&&&&&&&&&&&&%&%&%%%%&&&&&&&&&%%%%%%&&&&&&&&&&&&&&&%%%%%%%%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&%&%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%$$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&$%$%$%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%$$$$$$$%%%&&&&&&&&&&&&&&&&&&&&&%%%$$$$%%%&&&&&&&&&&&&&&&&%%$%$%%%&&&&&&&&&&&&&%%%$$%%%&&&&&&%%%%$$$%%%%&&&&&&&&&&&&%%%$$$$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&%%%$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&%$$#$##$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$##$$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$#######$%%&&&&&&&&&&&&&&&&&&&&&%$$$##$$$%%%&&&&&&&&&&&&%%%$$#$#$%%&&&&&&&&&&%%%$$#$$$$%%&&&&%%$$##$$$%&&&&&&&&&&&%%%$$###$$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&%%$$$##$%%%&&&&&&&&&&&&&&&&&&&&&&&&%$##@@@#$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$$##@@@#$$%&&&&&&&&&&&&&&&&&&&&&&&&&%%$##@@@+@@##$%&&&&&&&&&&&&&&&&&&&&&%$##@@@#$$%&&&&&&&&&&&&&&%$###@##$%%&&&&&&&&&&%$##@@#$$%%&&&%%$##@@@#$$%%&&&&&&&&%&%$$#@@@@@#$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&%$#@+++#$%%&&&&&&&&&&&&&&&&&&&&&&&&$#OO...+@$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$#@..ooo#$%&&&&&&&&&&&&&%&&&&&&&&&%&%$##ooX.....@#%&&&&&&&&&&&&&&&&&&&&&$#OO...+@$$%%&&&&&&&&&&%%$$+O...#$$%&&&&&&&&%%$$@...O+$$%%&&%$#@...oO#$%%%&&&&&&&%%%#@+.....##$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&&&&&&&&",
-"&&%&%$$@@OO+@#$%%&&&&&&&&&&&&%%%%&&&&&&&$#Oo...+@#$%%&&&&&&&&&&&&&&%%&%&%%&%&&&&&&&&&%%$$@@..oXo##$&&&&&&&%&%%&%&%&&&&&&&&&%$$#+ooX.....@#$&&&&&&&&%&%&%%%&%&&&&$#Oo...+@#$%%&&&&&&&&&&&%$#+O...@#$%%&&&&&&&&%$#@...O+#$%&&&%$#@...oo@#$%%&%&&&&&&%$@@+.....@#$%&&&&&&&%&%&%&%%%&%&&%&&&&&&&%%&%&%&%&%&&&&&&&&&&&&&%&%&%&%&&&&&&",
-"&&&&%$$++. .+@$%%%&&&&%&%%%%%%%%%%&&&&&&$#@+XXXO+#$$%%%%&&&&&&&&%%%%%%%%%%%%%&&&&&&%&%%$$#+OoXXX@#$&&&&%&%%%%%%%%%&%&&&&&%%%$#+O...OOOO+#$$&&&%&%%%%%%%%%%%%%%%&$#@+XXXO+#$$%%%&&&&&&&&&%$#+OXXX@#$&&&&&&&%%%$$#@XXXO+#$%%&&%%#@OOoXX##$%%%%%%&&&&&%$#@+O...@#$%%&&&&&&%%%%%%%%%%%%%%%&&&%%%%%%%%%%%%%%&&%&&&&&%&%%%%%%%%%%&&&&&",
-"&&&&&$$+O. .+@#$%&&&&&&%%%$$$$$$$%%%%&&&%#@+XXXOO@##$$%%%%&&&&&%%%$$$$#$$$$$%%%&&&&%%%$$#@@ooXXX@#$&&%&%%%$$$$$$$$%%&&&&&%%$#@Oo. .oOO++#$%&&%&%%%$$$$$$$$$$$%%&%#@OXXXOO@#$$$%%%%&&&&&%$$#+OXXX@#$%%&&&&&&%%$#@+XXXO+#$%&&&%$$#OOoXX+##$$$$%%&&&&%%$$@+O...@@$%&&&&&%$%$$$$#$$$#$$$%%&&&%%$$$$$$$$$$$%%%&&&&&%%%%$$$$$$$$%%%%&&",
-"&&&%%$$++ . ++#$%%&&&%%%$$#######$$%%&&&%#@+XXXoO+@###$$$%%&%%%$$$####@#@##$$%%&%%%$$$##@@+OoXXX@#$&&%%$$$###@###$$$%%&&&%$##@Oo...OOO++#$%&&%%$$$###@@#@###$$$&$$@+XXXoO+@@##$$%%&&&%&%$#@+OXXX@#$%&&&&&%%$$#@@+XXXO+#$$&&&&$$#OOoXX+@####$$$%&&&&%%$#+O. .+#$$&&&&%%$$####@#@##@##$$%&%%$$##########$$%%%&%&%$$$###@###$$$%&&&",
-"&&&&%%$#@oXooo#$%&&&%&%$#@@+OOO+@@$$%%&&$$#+XXXooOOO++##$$%&&%$$##++OOOOO+++#$%&&%$$##++OOooXXXX+#$&%%$$##++OO+O+@#$$%%&%$$@+OXXXXXooOO+#$%&%%$$##++O+OO+OO+@@$&%$#+XXXooOOO++#$$%%&&&&$$#@OoooO@#$%%&&&%&$$@++OooooOO@$%%&&%%$#+OOXX++@O+++@$%&&&&&%$##+...@@$%%&&&%$@@+++OOOOOO+O+##$&%$@@+O+++OO+++#$$%%&%%$$##+++OOO+@#$$%%&",
-"&&&&%%$$#OoooO@$$&&&%%$$@@+OOOoO++#$$%%&%$@+XXXoooooOO@@#$$&%$$#@++OOOOoOOO+@#$&%$$@@+OOoOoooXXX@#$&%$$@@@OOOoOoO@@##$%&%$#++OXXX.XooOO+#$$&%$$@@@OOOoOOOoOo+@#&%$@@XXXooooOO+@@#$%&&%%$#@+OoooO@#$%%&&&%%$#++OOooooO+@#$%&&%%$#+OOXX+++OO+++#$&&&&&%%##+...+#$$&&&&$$@+OOOOoOoOOOOO@#$&$#@+OOO++OOo++@@#$%&%$$@@@OOOoOOO@@##$%&",
-"&&&&&%%$##@@OO#$%%&&&%$#ooo.......+##%%&%$#+XXX ......Xoo#$&$$#ooX..XXX.. . @@$&%$#ooo...... XXX+#$&$$#ooo..XXX..Xoo#$$&%$#ooo.... XXooO#$%&%$#ooX..XXX ....oO#&$$#+XXX ......O++$$&&&%$#@+XX ..+#$%&&&&&%$#OooXX.....@#$%&&&%$#+OoXXOoO. ooO#$&&&&&&%##+. .@@$%%&&&$#Oo............oo#&$#Oo...XXXXX..O++$$&$$#ooX..XXX..Xoo#$%&",
-"&&&&&%%%$##@++#$%%&&%$$#oXX.......+@#$%&%$#+XXX .... .XXo@#&$#@oXX. XXX . . +@$&$#@oXX. ... .X.X@#$&$#@oXX. XXX .XXo@#$&%$#OoX.. ..XXXoo#$%&$#@oXX..XXX . ..oO#&%$@@XX.. ... .oOO#$&&&%$#@+XX. .+#$$&&&&&%$#OooXX.....@#$%&&%%$#++OX.OOo. ooO#$&&&&&%%$#+...+#$%%&&&$#Oo. . ... . ..oo#&$#Oo. .XXXXX .oOO#$&$#@oXX. XXX .XXo@#$&",
-"&&&&&&&%%$$$++$$%&&&&$$@ooX.......+@@$%&%$#+XXX. .....XXX@#&$#@oXX. XXX.. .+@$&$#@oXX...... XXX+#$&$#@oXX...XX..XXo@#$&%$#Ooo... XXoOO#$%&$#@ooX ..XX . ..oO#&%$#+XXX.......oOO@$&&&%$#@+XX . @@$%%&&&%%$#OooXX.....@#$%%&&%%#+OOXXooO .ooO#$&&&&%&%##@...@@$$&&&&$#Oo... . ... ..oo@&$#Oo. ..X.XX..oOO@$&$#@oXX..XXX..XXo@#$&",
-"&&&&&&&&%%$$$$$%%&&&%%#@+OOooooo..O++$$&%$#@XX.XX+++OO...+@&$@+...oOO++OO. .+@#&$@+...Oo++OXXXXX@#$&$@+.. Oo+OOoO...+@$&%%$#@+ooXXX++@@#$$%&$@+...oO++OXXXXX+@#&%$#+XXXXX+O+ooXXX@#&&&&$$#@@+...+#$%%&&&&%%$##@+++OO..+#$%%&%%$#+OO.....oo+@#$$&&&&&%%$@+. .+#$$&&&&$#@+XXXooXXXoXooXo@&$#@+XXXXXO+OooXXX@#&$@+...oo++OOO...+@$&",
-"&&&&&&&&&&%%%%%%&&&&&$$@++Oooooo..O++#%&%$#+XXXXX+++OO ..+@&$@+...OO@+@OO. .+#$&$@+.. OO+++XXXXX+#$&$@+...oOO+OOo. .+@$&%%$#@@OoXXX+@##$$%&&$@+...oO+@+XX.XX@#$&%$#+XXXXX+++ooXXX@#&&&&%%$#@+ ..+##%&&&&&&%%$$##@+++..@@$%&&&%$#@Oo... .oO@@#$%&&&&&&$$#@...@@$%&&&&$$#+XXXoooXoXXooXo@&$$#+XXXXX+++ooXXX@#&$@+. .OO+@+OO ..+@#&",
-"&&&&&&&&&&&%%&&&&%&&%$#@XXX..XXX OO+$$&%$#+XXXOO+@+++...+@&$@+. .+@@##@@+O+@#$&$@+...++@@+OoXXX@@$&#@+ .... .. .+@#&%&%$#@oooXo@@#$%%%&&#@+...oo+++XXXXX+#$&%$#@XX.OO@@++OXXX@#&&&&%%$#@+...+#$$&&&&&&%%%$$$#@++..+#$$&&&%$#+OO. . O+@#$%%&&&&&&%$@+. .+#$$&&&&%$@@X.XoooXXooooXo@&$$@@XXXoO@@++oXXX@#&$@+...+@@@@++...+@$&",
-"&&&&&&&&&&&&&%&&&&&&%$#@XXX. X.X..OO+#$&$$#@XXXOO@@@@+...+@&#@+...+@@###@+++@$$&#@+...++@@@OoXXX@#$&#@+ . .. . ... +@$&&%%$#@oooXo@#$%%&&&&$#+. .oo++OX.XXX@#$&%$#+XXXOO@@@OoXXX@#&&&&&%$##+...+@$%%%&&&&&&&&%%$#++..@#$%&&%%$#++o.. ..O+@#$%%&&&&&%$##@...+@$%%%&&$$#+XXXOooXoXoooXo@&%$#+XXXOO@@@OOXXX@#&#@+...+@@##@+...+@#&",
-"&&&&&&&&&&&&&&&&&&&&%$#+XX...XXX OO+#$&%$@@XX.OO+@@++...+@&$@+...+@@####+@+##$&#@+...+@@@+OOX.X+#$&#@+ . ..... . . +@#&&%%$#@ooXoo+#$$%%&%&$#@ooo.......X.X@#$&%$#+XXXOO@@@+OXXX+#&&&&&%$#@@. .@@#$%&%&&&&&&%&$$#@+..@@$%%&&%$#+OO.. . O+@##%%&&&%&%$$@+...@@#$%&%&%$#+XXXooXoXooooXo@&%$@@XXXOO@@@OOXXX+#&$@+...+@@@@@+...+@#&",
-"&&&&&&&&&&&&&&&&&&&&$$@+...OOOOO..OO+#$&$$@+XXXXX+@+Oo. .+@&#@+. .oO@###@+++@#$&$@+. .oo+++XXXXX+##&$@+...XXoOOOooXo+#$&&%%$#@oooXo@@#$%%%&&$$#Ooo. . . .XXX+#$&$$#+XXXO+@@@+oXXX+#&%&%%%$#@+...+@#$$%&&&&&%&%%$#@@+..@#$%%&%%$#+OoXXoXo..+@#$%&&%&%$$#@+. .+@#$$%&&$$#+XXXOOXoXXoooXX@&$$@+XXXOO@@@OoXXX+#&$@+. .oO@@@Oo ..+@$&",
-"&&&&&&&&&&&&&&&&&&&&$$@+...+O+O+..OO+@$&$$@@XXXXX+++oo...+@&$@+...oO+@@@@OO++@$&$@+.. OO+++XXXXX@@$&#@+. .ooOoOoOXoo@@$&&%$##+ooXoX+@##$$%&&%$##++OOOOOooXXX@#$&$$@@XXXOO@@@OOXXX+@&&&%$$#@@+ ..+@@#$$%&&%&%$$$$#@+O..@@$%&&%$$#+OoX.oXX..++@#$&&&%$$#@@+. .+@@#$$%&$##+XX.OoXXoooooXo+&%$@@XX.OO@@@OOXXX+@&$@+.. oo+++Oo...+@$&",
-"&&&&&&&&&&&&&&&&&&&&$$@+...+O+OO..oOO##&$#@+XX.XXO++oo. .@@&$#+...oo+++++OOO++$&$@@...oo++OX.XXX+@#&$#+.. XXOOOoOXXo@#$&%$$#@+oooXo++@@#$%%&%%$$#@OOOOOooXXX@#$&$#@+XXXO+++++oXXX@@&%%$$#@@++. .++@@#$%&&%%%$##@@++O..@#$%%&&$#@OOoXXXoX..O++@#&&%%$#@@++...++@@#$%&%#@+XXXoOoXXXoooXX@&$#@+XXXOO+@+OoXXX@@&$#+...oo+++oo. .@@$&",
-"&&&&&&&&&&&&&&&&&&&&%$@+. ...... ....@#&$$Oo... . .. .ooo@#&$#@ooo..........OO#&$#@ooX........ .o+#&$#@ooo. . ......+#$&%$#OoX. . ...ooO#$%&&%%#@@OOoooXXXXo@$$&$#Oo . .+++.. . OO&&%$$Ooo. . ..ooO#$&&&$$@++OOoXXXX@#$%&&%$#@...XX+O+ ...O+&&%$$Ooo . ..ooO#$&$#+o. .XXXoo .Xo. O&$#OO. ...+++.. .oO&$#@ooo.......ooo@#$&",
-"&&&&&&&&&&&&&&&&&&&&%$#@.. . . .. ...@#&$#+o . .......ooO#$&$$#Ooo ...... ..O+$&$$#Ooo. . . .. .OO#&%$#Ooo..... ....@#$&%$#OoX.. . ..ooO$$%&&%$$@+OooooXXXoo#$$&$$OO. ...+++... .OO&&%$#OoX.. . ..ooO$$&%%$#++OOoXXXXX@$$%%&%$#@...oX+++ . ..OO&%%$#OoX.. . ..ooO$$&$#Oo. .XXoXo..oX..O&$#Oo.. ..+++... .OO&$$#Ooo.. . . ooO#$%&",
-"&&&&&&&&&&&&&&&&&&&&%$$#+++OOOOO+OO++##&$$@++OOO+OOOO++@##$&%$##@@++O+OO+O++@#$&%$##@@O+OOOOOOO++#$&%$##@@O+OOOO+++@#$$&%$#@++OOOOOOO++@$$%&%$#@+XXXXXXXX+@##$%&$#@+OOOO+@@@OOOO++@&&%$$@@++OOOOOO++@$$&&%$#OooXXXXX++#$%%&&%$##O+O++@@@O+OOO@@&&%$$@@+O+OOOOO++@$$&%$@+OOO++++OOO++OO+&$$@+OOOOO@@+OOOO++@&%$##@@+O+O+O++@##$%&",
-"&&&&&&&&&&&&&&&&&&&&&$$$@@+@++++++++@#$&%$#@@++++++@++##$$%&%%$$##+++++++@@@#$$&%%$$#@@+++++@+++@#$&%%$$##+++++++@@@$$%&%%$@@+++OO+++@@#$%&&%$#@+XXXXX.oX@@#$%&&%$#@+O+++@#@+++++@#&&%%$#@@+++++++@@#$%&&%$#OooXXXXX+@#$%&&&&%$#+++@@@##+++++@#&%&$$#@@+++++++@@#$%&$$#@++++++@+++++++@&%$#@@++++@##+++++@#&%%%###+++++++##$$%%&",
-"&&&&&&&&&&&&&&&&&&&&&%%$##@@@@@@@@@@#$%&%$##@@@#@@@@@##$$%%&&%%$$$#@@@@@@@##$$%&&%%$$$@@@@@@@@@@##$&&%%$$$#@@@@@@##$$%%&%%$##@@@+++@@###$%&&%%#@+oXXXXXoO@#$%%%&%$##@@+@##$$@@@@@##&&%%$###@@@@@@@###$%&%%$$OooXXXXo@#$%%&&&%%%$@@@##$$##@+@@##&&&%$$##@@@@@@@###$%&%$$#@+@@#@#@@@##@@#&%%##@@@@@#$#@@@@###&&%%$$##@@@@@##$$%%&&",
-"&&&&&&&&&&&&&&&&&&&&&&%%%$$$$$#$#$$$$%%&&%%$$$$#$$$$$$%%%&&&&&&%$$$$$$$$$$$$%%&&&&&%%%$$$$$$$$$$$%%&&&&%$$$$$$$$$$$$%&&&&%%$$$$$$$#$$$$%%&%&%%$$#@@@@@@@#$$%%&&&&%%$#$$$$$$$$$$$$$%&&&&%%$$$$$#$$$$$%%&&&%$$##@@@@@##$$&%&&&&&%%$$$$$%$$$$$#$$%&&&&%$$$$$$#$$$$$%%&&%%$$$$$$$$$$$#$$$$$&&%%$$$$$$$$$$$$$$$%&&&&%&$$$$$$$$$%%&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&%%%%$%$$%$$%%%%&&&&%%%%%$%$$%%%%&%&&&&&&&&%%%$%$$%%%%&%&&&&&%&%%%$%$$%$%%%%%&&&&&&%%%$%$%%%%&%&%&&%%%%$$$$$$$$%%%&&&&&%%$$$######$$%%&&&&&%%%%$$%%%%%$$%%%%%&&&&%&%%$%$%$%%%%%&&&&&%%$$#####$$%%%&&&&&%%%%$%%%%&%$%$%%%%&&&&&%%%$$%$$%%%%%&&&%&%%$$$%%%%$%%$$%%%&&%%%%$$%%%%%%$%$%%%&&&&%&%%%$%%%%&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%&&&&&&&&&&%&%%%%%%%&&&&&&&&%&%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%$$$$%%&%&&&&&&&&&%%$$$%%&&&&&&&&%&%%$$$$%%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$$$@@#$$%&&&&&&&&%%%$#@@$$%%&&&&&&%&$$$@@$$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%$$$%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$##++#$$%%&&&&&&&&%$#@+@#$%&&&&&&&&%$##++##$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%$$$#$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$##@@++##$&%&&&&&&%%$$@+++#$$%&&&&&&&%$$#+O@@##$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&%&%&&&%&&&&&&&&&&&&&&&&%&%%&%&%&%&&&&&&%&%&&%&&&&&&&&&&&&&&&&&&&%&%&&%&&&&&&&%$#@@OO#$%%&%&&&&&&&&&%%&&&&&&%&&&&&&&&&&&%&&%&&%&&&%&&&%&&&&&&&%&&&%&&&&&%&&&&&&&%&%%&&&%&%&%&&&&&&&%&&%&&&&&%&&&&%&&&&&&&%&%&%%&%&%&%&&&&&&&%$$#ooooO#$%%&&&&&&&&%$#@...@#$%&&&&&&&%$$#Ooooo#$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
-"&&%%%%%%%%%%%%%%&&&&&&&&%%%%%%%%%%%%%%&&&&&%%%%%%%%%%%%%%&&&&&&&&%%%%%%%%%%%%&%&%%$$@++Oo##$$%%%&&&&&&%%%%%%&&%&%%%%&&&&&&%%%%%%%%%%%%%%%%%&&%%%%%%%%&%&%%%%%%&&%&%%%%%%%%%%%%%%&&&&%&%%%%%%%%&%%%%%%%&&&&&%&%%%%%%%%%%%%&&&&&&&%$#@oXXOO#$%%&%&&&&&&%$#@...@#$%%&&&&&&&%$#OOXXo@#$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
-"%%%$$$$$$$$$$$%%%%%&&&%%%%$$$$$$$$$%$%%&&&%%%$$$$$$$$$$%%%&&&&&%&%%%$$$$$$%$%%&&&%$#++OXX@@#$$%%%&%&%%$%$$%%%%%$$$$%%%%&%%%$$$$$$%$%$$$$$$%&&%%%$$$$%%%%%$$$$$%&&%%%$$$$%$%$$$$$%%%&%%%$$$$%%%%%$$$$$%%&&&%%%$$$$$$$$$$$%%%&&&&%%$#@...+@#$%&&&&&&&&%%$#+...+#$%&&&&&&&%%$#@+...@#$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
-"%%$$####@#####$$%%%&%&%%$$##########$$%&%%$$$##$#$#####$$%%&&&&%%$$$#######$$$%&%%$#+OOXX+@@##$$%%&&$$$#$#$$$%$$$#$$$%%&%%$$#####$#$#####$$&%$$$###$$$$$$$##$#$&%$$#####$#$####$$%%&$$$##$#$$$$$$##$$$$&&&%$$$####@####$$$%&&&&&%$#+...+##$%&&&&&&&&%%$#+. .@@$$&&&&&&&%%%##+...+#$%%&&&&&&&&&&%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
-"%$#@@@+@@@+@@@##$$%&&%$$##@@@+@+@+@@@#$&%$$#@@@@@@@@@@@##$%&&&&%$$#@@@+@@@@@#$$&%$#@OOoXX+++@@#$$%%&$##@@@##$###@@@#$$%&%$#@@@@@@@#@@@@@@@#&%$##@@@@#####@@@@##&%$##@@@@@#@@@@@@#$%&$##@@@@##$##@@@@@#$&%%$$#@@@+@+@+@@@#$$&&&&%%##@...+@$%%&&&&&&&&%%##@...+#$%%&&&&&&&&$$#+...+#$%&&&&&&&&&%%&%%%%%%%&%&%&&&&&&&&&&&&&&&&&&&&&",
-"$#+O...XX...XX++@$$&%$$@++XX...Xo...OO#&%$#Ooo..OOO..XXo#$%&&%%%#@@oX...Xoooo#$&%$#@... ......+@#%%&#OO...@@##@..ooo#$%&$#+O.....+++.....O+&$#OO...oo@@@oO...OO&$#@.....+++.....@#$&#OO...oO@#@Oo...O+#&%%$#ooX.......ooo#$&&&%&$#@+. .+##%%&&&&&&&&%%$@+...+#$$&&&&&&&&&%$@@ . @@#%%&&&&&%%%%$$$$%$%%$%%%%&&&&&&&&&&&&&&&&&&&&&",
-"$#Oo...XX...XXO++#$&%$#++OXX...XX...OO#&$$#ooX..ooO..XXo@#$&&&$$#@+XX...XXXoo@$&%$@+.. . .....+@#$%&#OO...++@@@..Xoo@$$&$#Oo.....+O+.....oO&$#Oo...oo+@+oo...oO&$#@.....+O+.....@#$&#OO...oo@@@oo...oO#&&$##ooX.......Xoo#$&&&&%$#@+...+#$%&&&&&&&&&&$$#@...@@$%%&&&&&&&&$$#+...+@#$%%&&&&%%$$$#$##$##$#$$%&&&&&&&&&&&&&&&&&&&&&",
-"$#Oo...XX...XXoO+@$&$#@+OOXX...XX...oO#&%$#ooX..ooo..XXX@#$&%%$#@++XX...XXXXo@#&%$#+... ......+@#$&&#Oo...++@@@..XXo@#$&$#Oo.....OOO.....oO&$#Oo...Xo+++XX...oO&$#@.....OOO.....@#$&#Oo...oo+++oo...oO#&%%#@oXX.......Xoo#$&&&&%$#++ ..+##%%&&&&&&&&&$$@+. .+#$$&&&&&&&&&%$#+. .O+#$%%&&%%$$##@@@@@@#@@###$&&&&&&&&&&&&&&&&&&&&&",
-"$#@+... .oOoXX...@#&$#@...XXoOo. ...+@#&$$#++O.....oOXoo@#$&&%$#ooX..ooOXXXXX@$&%$#@ooXXXoOOO+##$%%&#++...O+@@@OoXXX@#$&$#@+...oo+O+Xo...+@&$#+O. .OOXXXOO...O+&$$@OOo..OOO..oOO@$$&#@+...oo+++oX...+@$&%$##XXXooXoX. OO+#$&&&%%$#oX...+#$%&&&&&&&&&%%$#@...@@$%%&&&&&&&%$$@@...Xo##%%&&&%$#+OO..ooo++XXo##&&&&&&&&&&&&&&&&&&&&&",
-"%$@+XXXoo+++++...+@&#@+...O++++ooXXX+@$&%$$@+O. . .OOooo##%&&%$#oXX..OoOXXXXo@#&%$$@OooXXoO+++#$$%&&#@+...O+@@@ooXXX@#$&%#@+...ooO+Ooo ..+@&$#+O...OOXXXoO ..++&$$#+Oo..O+O..oO+#$%&$#@Ooo..+++..ooO@#$&&%$@oXXXoooX. O++#$&&&%$$@oo...@@$%%&&&&&&&&%%$@+. .+#$%%&&&&&&&&%$#+...Xo##%%&&%$$@+OO..ooo++XXX@#&&&&&&&&&&&&&&&&&&&&&",
-"%$#@XXXoo@+@+O. .+@&$@+ . +++@+OoXXX+#$&%%$#@+..OO++@@@##$%&%%$#+OO.....OoOO+#$&%%$#+OoXX++@##$$%&%&$#+XXXO+@@@OOXXX@#$&%$#@OooXX+++XXooO@#&$##+XXXoo .OoXXX+@&&$$#@@oo...oO+@#$$%&%$@OOo..O++..oOO##%&%$$#++OOO .oo+@#$%&&&&$$#oX...+#$%&&&&&&&&&&$$#@...@@$$&&&&&&&&%%##@...Xo#$%%&&%$#@...oo.. ..Xoo@#&&&&&&&&&&&&&&&&&&&&&",
-"%$#+XXXoo++++O...+@&#@+...+++++oXXXX@#$&%%$#@+..OO+@##$$$%%&%%$#+Oo.. ..oOOO+@$&%%$#+OoXX+@##$$%%&%&$@@XXXO+##@+OXXX+#$&%%$@+OoXX+++XXOO+@$&%$@@XX.oo. .ooXXX@#&&%$#@@Oo. .oO+##$%%&%$$@++. oOo..O+@$$%&&%$$@++OO...oO@@#$%&&&&%$#++...+##%&%&&&&&&&&$$@+. .+#$$&&&&&&&&%%$@@...++#$%%&&%$@+...oo... .XXo@$&&&&&&&&&&&&&&&&&&&&&",
-"%$#+XXX .oOoXX...@@&$@@...XXoOo. XXX+#$&&%$$#+..O++##$$$%%&&%%$#+OO.....ooOO+##&%%$#+OOXX+@##$$$%%&&$#+XXXO+@@@OOXXX@@$&&$$#+OOXX+O+XXoO+#$&%$#+XXXoo . oO.XX@@&%%$$#+Oo...oO@@$$%&&&&%$#@oo. oo@#$%&&&&%$#@++OO .oO+##$%&&&&&%$#+ ..+#$%%&&&&&&&&&$$#@...@@$%&&&&&&&&&$$#+. .@@$%%&&&%$#@ ..oo ....ooo#$&&&&&&&&&&&&&&&&&&&&&",
-"%$#+XXX .oooX....@#&$#@...XXooo .XXX+#$&&%$#@+..O++##$$%%%&&%%$#++OOoXoX..XXo@#&%%$$+OOXX+@@###$$$%&$#@XXXOO@@@OOXXX+#$&&%$$@++..OO+..+@#$$&%$#@XXXXX.....XXX@#&&%$#@@oo...oo+##$%%&&%%$#@oo . oo##$%%&&&%$$@++..XoXO+O+@$$&&&&%%##+...+##%%&&&&&&&&&%$@@. .+##%%&&&&&&&&%##+...+#$%%&&&%$$#+++@@+++OO+@@#$&&&&&&&&&&&&&&&&&&&&&",
-"%$#+XXXXX...XoO++#$&%$#++OXXXXXXXXXX@@$&%$$#@+..O++@#$$%%&&&&$##+OOOOXoX..XXX@#&&%$$++oXX++@@@@##$%&$#+XXXOO+++OO.XX+@$&&&%$#@+..OOO..@@$$%&%$#@XXX.X.....XXX@#&%$$#@+oo ..oo+@#$$%&&&%$$@OO. .++#$%&&&&%%$#@+O..oXoO+O++#$&&&&%%$#@. .@@$%%&&&&&&&&%$$#+...+#$%&&&&&&&&%$$@@ ..@@$$&&&&&%$$@@@@@@@@@+@@#$%&&&&&&&&&&&&&&&&&&&&&",
-"%$#+XX.XX...Xo+@@$$&%$$@++XXXXXXXXXX+#$&%$#+OO .ooOO+##$%%&&&$$@XXXXXooooo...+#&&%$$@+O. ooOXXoOO#$&$#@XXXXXOOOXX...++$&&%%%$#@oo.. oo@#$%%&%$#@Ooo. OOO ooO@$&%$#OOo..OOO..ooO#$%&&%$$#@ooXXX@@$%%%&&&&%$@ooX..oooooXXo@$&&&&%%$@@...+##$%&&&&&&&&&%$#+...@#$$%&&&&&&&&%$@@.. @@$%%&&&&%%$$$$$$#$##$$$$%%&&&&&&&&&&&&&&&&&&&&&",
-"%##+XXXOo+++@@@#$$%&&%$$#@@+++Ooo.XX@@$&%$#OOo..ooOOO@#$%%%&%$#@XXX.XoooXo .+@&&%%$@+O..oooXXooO#$&$$#oXXXXOooXX...++#&&&&%$#@oo ..Xo@#$%&&&%$#OOo .OOO..oOO#$&%##Ooo..OOO..ooO#$$&%%$#@+oXXXo+##%&&&&&%$##oXX .ooooXXXX@#&&&&&$$#@...++$$%%&&&&&&&%%$#@XXX+#$%&&&&&&&%%$#@+...@#$%&&&&&&%%%$$%$%$$$$$%%%&&&&&&&&&&&&&&&&&&&&&&",
-"%$@+XXXoo++@@#$$$%%&%%%$$$#@@++OOXXX+##&$$@OOo. oooOO@@#%%&&%%$@XXXXXooooo. .@#&&%%$#@+..oooXXooO#$&%$#ooXX.OoOXX...O@#&&&%%$$@oo...oo#$$%&&%%$#+OO..++O .OO+#$&$$@ooo .O+O..ooo@$$&%$#@++XoXXX@#$%%&&&&%%$@ooX..ooooXXXo@#&&&&&%$#+...+@#$%%&&&&&&&%%$#@oXo@#$%&&&&&&&%%$#++...@#$%%&&&&&&&&&%&%&%&%&%&&%&&&&&&&&&&&&&&&&&&&&&&",
-"$$@+XXXoO+@@#$$%%%&&&&&%%$$#@@+ooXXX+@$&$#@.....XXX..+@#$%%&%$$#ooXoX.....OO+@#&&&%$$#@OO...XXO+@$$&%$##@+XX...XX...O+$&&&&&%$#@+XXX+@#$%&&&&%$$@++oo++@oo++@$$&$#@...XXO+O.....@#$&$##... ....@#$%%&&&&%$$#ooo.......ooo#$&&&&%%$$@...++#$%%&&&&&&&&%%$#ooo#$%%%&&&&&%&$$#++...@#$%&&&&&&&%&&&&&&&%&%&&&&&&&&&&&&&&&&&&&&&&&&&&",
-"$#Oo ...oOO#$%%&&&&&&&%&%$#+oO.. . OO#&%##.....XXX..@@#%%&&&%$#OOooo.....+++#$&&&&%$$#+O...oo+@@$%&%%$##@oX...oo...++$&&&&&%%$#@Xoo@@$$%%&&&%%$#@+OO@#@OO+@@$%&%##...Xo+++.....##%&$#@... ..@#$%&&&&&&%$#Ooo.......ooO#$&&&&&%$$#+++oo@#$%%&&&&&&&%%$##@##$%&&&&&&&%%$##ooO++#$$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
-"$$OO.. ..oO+$$%&&&&&&&&&%%$#+Oo.. ..o+#&%$##@@@@@@@@##$$%&%&%%$$##@@@@@@@@@#$$%&&&%%%$$##@@@@###$$%&&%%$##@@@+@@@@@@##$&&&&&%%$$##@##$$%&&&&&&%$$$#########$$%%&%$##@@@@@##@@@@##$%&%$#+OOOOOO+@$$%&&&&&%%$$##@@+@+@@@@##$$&&&&&&%$$@@+OO##$%&&&&&&&&&%%$$$$$%%%&&&&&&&%$##OO+@@$$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
-"$#@+OOOOO+@@$%%&&&&&&&&&&%%$@@+OOOOO+@$&%%$$##@#@####$$%%&&&&&%$$$$########$$$&&&&&&%%$$$####$$$%%&&&&%%%$$####@####$$%&&&&&&%%$$$#$$$%&&&&&&&&%%$$$$%$$$$$%%%%&%%$$###$#$#$###$$$%&%$#@+++O+++#$%&&&&&&&&%$$$######@###$$%&&&&&&&%$$####$$%%%&&&&&&&&%&%$%%%%&&&&&&&&&%%$$####$$%%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
-"%$#@++OO+@@#$%%%&&&&&&&&&%%$#@@O+OO+@#$&&%%$$$$$$$$$$%%&&&&&&&%%%$$$$$$$$$$%%&%&&&&&&%%%$%$$$$%%%&&&&&&&%%$$$$$$$$$$$%%&&&&&&&%%%$%$%%&%&&&&&&&&%&%%%%%&%%%%%&&&%%%$$$$$$%$$$$$$%%&&%$$@+++++@@$$%%&&&&&&&&%%$$$$$$$$$$%%%%&&&&&&%%%%$$$$$%%&&&&&&&&&&&%&&%%&&&&&&&&&&&&%%$$$$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
-"%$##+@+@+##$$%&&&&&&&&&&&%%%$##@+@@@@#$&&%&%%%%%%%%%%&%&&&&&&&&%&&%%%%$%%&%&%&&&&&&&&&%&%%%%%%&&%&&&&&&&%&&%%%%%%%%&&&&&&&&&&&&%&%&%&&&&&&&&&&&&&&&&&&%&&&%&&&&&&%&&%&%%&%&%%&%%&%&&&&$$$$#$#$$$%&&&&&&&&&&%&&%%%%%%%%%%&&&&&&&&&&%%&%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%&%&%&&&&&&&&&&&&&&&%&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%&&&&%&%&&&&&&&&&&&%%&%%&&&&&&&&&&&&&&%&%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%&%&&&&&&&&&&&&&&&&%&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%$%%%&&&&&&&&&&&&&&%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%&%&%%%%%&%&&&&&&&&%$%%%%%&&&&&&&&&&&%%$$$$$$$%%%&%&&&&&&&&&&&&&&&%&&&&&&&&&%&%%%%%%%%&%&&&&&&&&&&&%%&%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%&&&&&&&&&&&&&&%&&%&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%$$$$$%%%&&&&&&&&%%%%$$$$$%%%%&&&&&&&&&&&&&&&&&&&&&&&%%%%$$$$$%$%$%$$$%%&&&&&%%%$$$$$%%&&&&&&&&%%%$$$######$$$%%&&&&&&&&%&%%&%&%&&&&&&&&&%&%%$%$$%%%%&&&&&&&&%&%%%%$%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%$$$%%%%%&&&&&&&&%%%%%%%%%%&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%$##@##$%%&&&&&&&%&%$$$$###$$%%&&&&&&&&%&%&&&&%&%&%&&&&%%$#####$$$$###$$%&&&&&&%$##@#$$%%&&&&&&%&%$$#@@@@@@@@#$$%&&&&&&%%%%%%%%%%%&%&&&&&%%$$$$##$#$$%%%%&&&&&&%%$$$$$$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%$$#$#$#$$%%%&&&&&&%%%$$$$$$%%%%&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$##ooo@#$%%&&&&&&%%$$@@+++++#$$%%&&&%%%%%%%%&&%%%%%%&&%%$#+++++@#@++++@#$&&&&%%%$#ooo@$$%&&&&&&%%$$#OO.....ooO#$%&&&&%&%%$%$%$$$$%%%&&&%%%$$#@@+++@@#$$%%&&&&%&%$#@@++##$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%$$#@@+++@@#$$%%&&&%&%$$$#####$$%%&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&&&&&&&&&&&&%$$@@XXX@##$%%%&&&%%%##@++OO++##$%&&&&&%%$%$%%%$%$%$%%%&%$##OoOO++@@++OO+@$&&&&&%$#@XXo@#$%&&&&&&&$$#@oo.....ooo#$$&&&%&%%$$#$$$$$#$$%&&%&%$##@+++O++@@@$$%&&&&&%$$@@++++@#$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$##@+++O++@@##$%&&&&%$$#@@@@@@#$$%%%&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&%&&&&&&&&&&&%%%$#+O...O+##$%%&&&%$$@@.......+@#$%&%%%$####$$$$$####$%&%$#+... .+OO. ...@@&&&&&%$#@...@#$%%&&&&%%$@++..ooooXXXX@#%&&&%%$##@+O##@oo#$%%&%%$$++O.......O++#$&&&%%%$#OooOo..@$$%%&&&&&&&&&%&&&%&&&&&&&&&&%&%&&%&%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$++O.......O++#$&&&&%$#oo.....@@#$&%&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%%%&%&&&&&&%&$$#@OO ..O+@##%%&&&%$#@+.......++#$%&&%$$@@@@@#@#@#+@@$%&%$@@ . . O+O . .+#&&&&%$$#+...+#$%&&&&&%$$@+O..oooooXXX##$&&&&%%##@OO#@#oo#$%%&%$$#OOo.......oOO#$&&&&%$#@ooOoO..@#$%&&&&&&&%&%&%&%%%%%%%%&&&%%%%%%%%%%%%%%&%&&&&&&&&&&&&&&&&&&&&&&%$$#OOo.......oO+#$&&&%$$#oo.....+@#$%&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%$%%%%&&&&&&%%$#@@OO. .OO+@#$%&%&%$#@+..... .+@#$%&&%$#@+++@+@+@+++@#$&%$#+. .. OOO. . .+#&&&&&%$@@. .@@$$&&&&&%$#@+O .oooXoXXX#$$&&&&%%#@@+O##@oo#$%%&%$#@OOo.......oOO@#&&%%%$#@ooooo..@#$%%&&&&&&%%$%$%%$%$%%%%&%%%%$$$$$$$$$$$$%%%&&&&&&&&&&&&%&&&&&&&&%$#@OOo.......ooO@#&&&&$$#oX.....+@#$%&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&&%$$$##$%%%&&&&%%$#+Oo..... .O+@$%&&%$$++O..O++++@##%%&%%##ooX.......Xoo##&%$#@OOo..+O+..oOO@#&&&&%%$#+...+#$%%&&&&$$#OOo. ooo+OO++@$%&&&%%$$##@@###@@#$%&&$$@+...XX...XX...@@&&&%$#@@XXXXX..@@$%%&&&&%%%$$#$#$$#$#$$%&%%$####@#@#@###$$%%&&&&&&&&&%&%&&%&&%&&&%##+..... ..XX...+@&&&%%$#+++OOOO@##%%%&",
-"&&&&&&&&&&&&&&&&&&&&&&&&%&%$###@#$%%%&&&%%$#OOo. .... ++@$$&&%$#+OO..++++@@#$%%&%$#@oXX.......XXo@#&%%$#OOo..O+O..oOO#$&&&&%%$#+...+#$%%&&&&$#@Ooo. oooO+OO+#$%&&&&&%$$$##$$#@#$$%%&$#@+...XX. .XX...+@&&&%$#@+oXXXX..+##%%&&&&%$$##@#@@#@@###$&%$##@@+@+@+@+@@@#$%&&&%%%%%%%%%%%%%%%&&&$#@+........XX...+@&&&&%$$@++++@+##$%%&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&%%$@+++@$%%&&&&%$#@oXXoo+++XXO+@$%&%%$#++oXX+@@##$$%%&&%%#@oXXXXoooXXXXo@#&&%$#@++..ooo..++@#$&&&&%%##@ ..@@$%&&&&&$#@...oo...XXO++#$%&&&&&%%$$$$$%$$$%%&&&$#OoXXX .oooXXXoooO&&%%$@+OXXOOO..+@#$%&&%%$$#+Oooo++XoX++$&$#@.............@#$&&&%%%$$$$$$$$$$$%%&&$#OoooX..ooo..ooooO&&&&&%$$$#####$$%%&%&",
-"&&&&&&&&&&&&&&&&&&&&&&&&%%$$+++O+#%%%&&&%$#@XXXoo+++oo++@$%&&%$#OOOXXO+@##$$%&&&%$#@oXXXXOOoXXXXo@#&%&%$#++..ooo..++#$$&&&&%%$#@...@#$$%&&&&$@+...Xo . XXOO+##%&&&&&&&&%%&%%%%%%&&%&$#OoXXX..oooXXoXooO&&%$$++OXXoOo..+@#$%&&%$$#@ooXoX++XXXO+#&$#@.............@@$&%%%$$#####@####$$$%&$#Ooooo .ooo. oXooO&&&&&%%$$$$$$%%%%&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&%$$+OO++#$%&&&&%$#@XXXoO+++oo+@#$%&%$##OOoXX+++@#$%%%&&%$#@XoXXXoooXXXXX@#&&%%$#@+..ooo..+@@$%&&&&&%$#@. .+#$%&&&&&$@+...oX.. XXOO+@$$&&&&&&&&&&&%&&&%&&&&&#@OoXXX .oooXXooooO&%&$$@+OXXOOO .+@#$%&%$$#@@ooXXXOOXXXO+$&$#@.............+@$&&%$##@@@+@@+@@@##$%&#@oooXo..ooo..ooooO&&&&&&&&&%%%%%%%&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&%$#@@+++#$%%&&&%$#@XXXoO+@++@@#$$%&%$#@... ....++$%%&&&%$#@XXXOO+O+ooXXX@#&&%%$#@+oX XX+@#$%&&&&%%$#@OOO@#$%%&&&&$#+.. XXoooXX...+#$&&&&&&&&%&&&&&&&&&&&&$@oXoXX..+++oooooXo&&&%$@++XXXXXXXO+@$%&%$#+OO..OOOXXXXX@@$&%$#++OOOOOOoO...+@#&%$$OOo..........##%&$#oXooo .XXXXXoooXo&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&%%$#@++++#$%%&&&%$#+XXXOO+++@+@#$$%&%$#@. . ....O+$$%%&&%$#@XXXoo+O+ooXXX@#&&&&$$#@XX. .XX+@#$%&&&&&%$#@OOO@#$%&&&&&$#@...XXOoOXX ..+@$&&&&&&&&&&&&&&&&&&&&&##oXXXX..OO+OooooXo&%%$$@@+XXXXXXX++@$%&$$@Ooo .OoOXXXXX@#$&$$#@++++++OOo...+@$&%$$OOo..........@#$&#@ooooo. X.XXXoooXo&&&&&&&&&&&&%&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&%$#Ooooo##%%&&&%$#@oXXXXOOOoo+@#$%&%$#@OOO. ooO@@#$%%&&%$#@XXXXXOoOXXXXo@#&&%&$#@+oo . oo+@#$%&&&&&%$#@XXX@#$%%&&&&%$$@+OXX ..Xo ..+@$&&&&&&&&&&&&&&&&&&&&&$#+O..........XXXO+&&%%$@+O.......++@$%&$#@...oXooo. OO+@#$&%%$$####@#@@+...+@#&%$$@++OOOOOOOOO+#$%&$#OOXXX .oooXXXXXO+&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&%$$@Ooooo@$$%%&&%%#@oXXXXOOOXX++#$%&&$$@+oo..OoO+@#$$%%&%$#@oXXXXoooXXXXX@#&&&%$#@+oX. .Xo+@#$%&&&&%%$#@XXX@#$%&&&&&%$##@+++oOo. XXX@#$&&&&&&&&&&&&&&&&&&&&&$#+O.. .. . ..XXXO+&&%%$#++.......++@$%&%#@...ooooo..OO+@$$&&%%%$$$$$##@+...+@$&&$$@@+++OOOOO++@#$%&$#+OXXX..oooX.XXXO+&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&%$#@.. . @@$%&&&%%$#ooXXXooOXo+@#$%&%$$@+Oo. ooO+@##$$%&%$#@oXXXXOooXXXXo@#&&&%$#@+oo . oX+@#$%&&&&%%$#@XXX@#$%%&&&&%$##@+++OOo. XXX@#$&&&&&&&&&&&&&&&&&&&&&$#++......... XXXO+&&%%$#@+.......+@@$%&$#@.. oXooo .oO+@#$&&%%%%%%%%$$#@...@@$&&%$##@++@+@++@@@$$%&$#+OXX...oooXXX.XO+&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&%$#+... .+#$$&&&&%$#@++XX . XX+@#$%&&$#@Ooo..++++@+@@$$&&$$@ooX..... .Xoo@$&&&%$#@+oO . OO+@#$%&&&&&%$@@...+#$%&&&&&%$#OooOO+O+..oOO##%&&&&&&&&&&&&&&&&&&&&&%$#+oXXXXXXo.XXXo@#&&&%$#@@+OOoOOO@@$$%&$$#OOo..oOoXXXXX@#$&&&&&&%%%%%$$#+++@$$&&%%$$$$$######$$$%&&%$#@oXX..ooo..XXo@#&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&%$@@... .+##%&&&%%%$#@+XX . XX@#$$%&%$#@Ooo .O+++++++#$&%%$@ooo.......Xoo#$&&&%$#@+OO. .oO+@#$%&&&&%%$#+...@@$$&%&&&%$@OooOO++O..OO+#$%&&&&&&&&&&&&&&&&&&&&&%$##oXXXXXXXXXXXo@#&&%&%$##++O+O+@##$%%&%$#+OO..oOoXXXXX@#$&&&&&&&&&&%%$$@@@#$%&&%&%%$$$$$$%$$$%%&&&%$#@ooX..ooo..Xoo@#&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&%%$#+. . .+#$$&&&&&%$$##++...+@@$$%&&%$@@. .. ........+#&%%$#++++++@+@++++#$&&%%$#++.. . ..++@$%&&&&&%##@...+#$%%&&&&$$@ooXOO+O+..O+@#$%&&&&&&&&&&&&&&&&&&&&&%%$#@+Ooo...XX++@#$&&&%%%$$$######$$%%&&%$$#@+ooXXXOOXXXO+#&&&&&&&&&&&%$$$$$$%%&&&%%%&%&%&%%%%%&&&&&%%$#@++oo...oX++@#$&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&$$#@... .@@$%%&&&&&%%$#@+. .+@#$%%&&%$#+. . ...... ..@#&%%$$@@+@@@#@#@@@@$$&&%%$@@O.. ...+@@$%&&&&&%$@+. .@@$%&&&&&$##XXX.......+@@$%%&&&&&&&&&&&&&&&&&&&&&%%%$#@+Oo...oo+@#$$&&&&%&%$$$$$$$$%%%&%&&%$$#@OooXoO+XXXO+#&&&&&&&&&&&&%%$$%%%&&&&&&&&%&%&&&&&&%&&&&%%$$#@+oo...Xo+@#$$&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&%$#@. . .@#$%%&&&&&&%$$#@...@#$%%&&&%$#@.. . ........@#&&&%$#####$#$#$@##$%&&&%$#@+... ..+@#$%&&&&%%$#@...+#$%%&&&&%$@oXX. .....@@$$%&&&&&&&&&&&&&&&&&&&&&&&%%$##@OO...oO@##$%&&&&&%%&%%%$%%%%%&&&&&%%$$#OOooo++XXX+@$&&&&&&&&&&&&&%&%&%&&&&&&&&&&&&&&&&&&&&&&&&&%$##@Oo...oO@@#$%&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&%$#@ooXoo@#$%&&&&&&&&%$$#+++##$%&&&&%$#@+OOOOOOOoOO++@$&&&%%$$$$$%$%%$$$%%%&&%%$##@+OOOOO+@@#%%&&&&%%$#@...@#$%&&&&&%$#++OooOOO++##$%%&&&&&&&&&&&&&&&&&&&&&&&&&%%$##@@@@@##$$%&&&&&&&&&%%&%&&&&&&&&&&&&%$$##@@#@#@#@##$&&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$$$#@@@@@##$%%%&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&%%%$#OOooo@$$%%&&&&&&&%%$#@+@#$%&%&&&%%$#@++++O+O+O++@#$&&&&&%%%%%%&%%&%%%&&&&&%%$##+++++++##$%%&&&&&%$#@...@#$%%&&&&%$$@++OOOO+@##$%%&&&&&&&&&&&&&&&&&&&&&&&&%&&%%$$$####$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&%$$$$$#$#$#$$$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$$####$$%%&&&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&$$#OOoOO#$%%&&&&&&&&%&%$$$$$%%&&&&&&%%$$##########$$$%&&&%&&&&&&%&&&&&&%&&&&&&%%$$$######$$%%&&&&&%%$$@+++@$$%&&&&&%%$#@@++++@@#$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%$$$$$$%$&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$$$%$%$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%$$$%$$%%%%&&&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&&%%$#####$$%&&&&&&&&&&&%%%$%%%&&&&&&&&%%$$$$#$#$$$$$%%%&&&&&&%&&&&&&&&&&&&&&&&%&%%$$$$$$$$%%%&%&&&&&&%$#++@#$%&&&&&&&%%$$$$#$#$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&%%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&&&%%%%&%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%&%%&&&&&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&&%&%%$$#$$$%&&&&&&&&&&&&&%&%%&&%&&&&&&&%&%%%%%%%%$%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%&&&&&&&&&%%%$#@@$%%%&&&&&&%&%$$$$$$%%%%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%&&&&&&&&&&%%%%%%%%&&&&&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%$%$$$%$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$$$$$$%&&&&&&&&&&%$$$$$$%%&&&&&&&&&&&%%$$#$#$$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
-"&&&&%%%$$$$$%%%&&&&&&&&&&&&&&&%&&&&&&&&&&&&&%%%$$$$$$%%&&&&&&&&%%%$$$$$$%%%&&&&&&&&&&&&&&&%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$$$$#$#$#$$$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%$%$%%&&&&&&&&&&&&&%%%%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&%$$##@##$%%%&&&&&&&&$$##@##$%%%&&&&&%&&&%$#@#@@##$$%%%&%%&&&&&&&&&&&&&&&&&&&&&&&",
-"&&&&%$$#@@@#$$%%&&&&&&&&&&&%&&%&%&&&&&&&&&&&%$$#@@@@#$$%%&&&&&&%$$#@@@@#$%%%&&&&&&&&&&%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%$$$@@++++++@@$$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$###$$%%&&&&&&&&&%&%%%$%%%%&&&&&&&&&&&&&&&&&&&&&&&&&%$@+ooo@@$%%&&&&%&&&$@+ooo@@$%%&&%%%%%%&$@@ooooo+@#$%%%&%%%&&&&&&&&&&%&%%&&&&&&&",
-"&&%%$$#@+++@#$$%&&&&&&&&&&&%%%%%%&%&&&&&&&%%$$#@++++@$$%%&&&&%%%$#@+++@@#$%%%&&&&&&&&&&%%%$$$%%%&&&&&&&&&&&&&&&&&&&&&&&&%&%$$##++++O+O+++#$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%$$@@+@$$%&&&&&&&&&%%$$$$$#$$%%%&&&&&&&&&&&&&&&&&&&&&&&$$++ooo+@$$%%%&%%%%&$++ooo+@$$%%%%%%$$%&$@+oXXXo++@$$%%%$$$&&&&&&&&&%%%%%%%%&&&&",
-"&&%%$#@@+O++@#$$%%&&&&&&&%&%$$$$$%%&&&&&&&&%$#@++OO++##$%%&&&&%$#@++OO++@#$%%&&&&&&&%%%$$$#$$$%%&%&&&&&&&&&&&&&&&&&&&&&&%%$##@++OOOOOOOO+#$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$##@+++#$$%&&&&&&&&%%$##@#@##$$%%&&&&&&&&&&&&&&&&&&&&&&$#+OXXX++$$%&%%%$%$&#+OXXX++#$%%%$$#$$$&$++oXXXX++@#$$$$$$$&&&&&&&%&%$$$$$%%&&&&",
-"%%%$#@XXOoOXo@#$%&%&&&&&&&%$$@@@$$%%&&&&&&%%$#oXOOoXX+@#$%%&&&$$#oXOooXo+@#%%%&&&&&&&%$$@@@O+$$&%&&&&&%&&&%&&&&&&&&&&&&&%$$@ooX.. . ...@#&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%$#@Oo. .@#$%%&&&&&%%$$#+Oooo++#$%%%&&&&&&&&&&&&&&&&&&&&&$$++...O+#$%%%$$$##&$++...O+#$$$$#@@oO$&$OoOoooXooO##$#@+O@&&&&&&&&%$$###$$%&&&&",
-"&%$$#@XXoooXX@##$%&&&&&&%%$$#+@+#$$%%&&&&&&%$#oXoooXX+@#$&&&&%%$#oXoooXX+@@$%&&&&&&&%%$#+++OO$$%&&&&&&%%%%%&%&&%%%%%&&&&%$#@oXX... . ....@#&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$##Oo. .@#$%&&&&&&%%$##OOXoXOO@#$%%&&&&&&&&&&&%&&&&&&&&&$#++...O+#$$$$$#@@@&#+O...O+#$$$#@@+oO#&#+OoooXoooO@##@@OO+&&&&&&&&%$#ooo#$%%&&&",
-"%%$@+OXX++OXX++@$%%&&&&%&$$#@...@#$%%%%&&&&$$#+OOOOXX+@#$%%&&&$$#+OOoo..+@#$%%&&&&&%%$#@oXX+@#$%&&&&&%%%%$%%%%%%%%$%%%&&$$@+ . OO.. XXoOO@$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$#@+...@@$%%&&&&%%$#@+XX+OOXX+@#$%&&&%&%%%%&%&%%&%&&&&&%##+XXXO+#$$$#++OoO&##@XXXO+###@@ooo++#&$@@OOo..OO+@@+OOoo@&&&&&&&%%$#ooo#$%%&&&",
-"%%$@+OXXO+OXXO+@$%%&&%&%$$#@@...+@#$$%%&&&%%$#+O+OOXX+##$&%&&&%$@+Oooo..+@#$%%&&&&&&%$#@XXo+@$%%%&&&%%$$#$#$$$$$$#$#$$%&$$@+ . Oo ..XXoO+##&&&&&&&&&%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$#@+. .+#$%%&&&&%%$@++XXOOOXX++@$%&%&%%%%%$%%%%%%%%&&&&%$@@XXXO+@#$##OOOoo&$@+XXXOO@##@+oXXO+#&$#+Ooo..OOO+@OOooo@&&&&&&&%$$@+O+##%%&&&",
-"&$$@+OXXO+OXXO+@$%&&%&$$$#@++ ..+@@#$$%&&&&%$#+OOOOXX+@#%%&&&%$$#+OOoo..++#$%%&&&&&%%$#@oXo@#$%%&&&&%$##@@##$$$##@@##$%&$#@+. OO. ..XOO+#$&&&&&&&&%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$#@+...@@#%%&&&&&$$@+OXX+OOXX++@$$&%%$$$#$$$$$$$$%%%&&&$$@+XXXOO@###@OOooo&$#+XXXOO@@@++XoX++#&##@Ooo .OOO++Ooooo#&&&&&&&%$$@+O+@$%%&&&",
-"&%$#@+XXoOoXX+@#$%&&%%$#@++OO. .OOO+@#$&&&%%$#@+XXXO+@#$$%&&&&%$#++oooXXO+@$%%&&&&&&%$#@@++##$%&&&&&$$+OoXo+@##@..OoO#$&%#@+ . Oo.. XXoO+#$&&&&&&%&%$$$#$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$$@+. .+##%%&&&%&$$@+OXXO+OXXO+@$$&%$$@+@@#@@@@@#$$%%&&$$@+XXXO++@@OOXoX+@&#@+XXXOO@+@Xoooo@@#&#+oOOoooXoooOXXX+@#&&&&&&&%$#@+OO@#$%&&&",
-"%%$$#@XXOOOXX@##$%%&%$$#+OOOO ..oOOO+#$&&&&$$#+OXXXOO@#$%%%&&%%##+OoooXX++@$$&%&&&&&%%$#@@#$$%&&&&&&$#OoXXX++@#@..ooo##&$$@+ .oo ..XXOO+#$&&&&&&&%$$#@##$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&$##+...+@$$%&&&&%%$@+OXX+OOXXO+@$%&%$#++O@@+@+++@#$$%%&$#@@.XXOO+++OOXXo@@&$@+XXXOO+++XXooo+@#&#OOOOooXoXXOooXo+##&&&&&%%$$#@XXX@$$%%&&",
-"&&%$##@+OoO+@##$%&&&%$#@..... .....@@&&&%%##XXXXoXo+@#$%&&&%$$@..OooXXO+@$%%&&&&&&%%%$$$$$%%&&&&&&$#@+...O+@@@OoXXX@#&%$#@oXX... .XXo++#$&&&&&%%%$@+oXo#$$%&&&&&&&&&&&&&&&&&&&&&&&&&&%%$#+O . O+#$%&&&&%%$@@+XXoOoXXO@@$%&%$#oXXXoOOO..++@$$%&$#OoXXXXXoooXXooo+@&#ooXX.XXXXXXXXXXoO#&$++XXXXXoooXXXoo+#$&&&&&&%$#@+XXX@#$%&&&",
-"&&%%$#@@O+O@@$$%%&&&%$#@....... .....@#&&&%$$@oXoooXX+@#%%%&&%$##..OOoXX++#$%%&&&&&&&&%%%%%%&&&&&&&&$#+O...O+@@@ooXXX@#&%$#@ooX.. . XXOO+#$&&&&&&%$#++XXX@#%%%&&&&&&&&&&&&&&&&&&&&&&&&&&%$#+O. .O+#$%%&&&%%$#@OXXoooXX+@#$%&$##XXXXXOOO..OO+#$$&$#OXXXXXXoooXXXoo+@&#OXXXXXXXXXXXXXXoo@&$@+XXXXXoooXXooo+@$&&&%%%$#@Oo...@#$%%&&",
-"&&&%%$##+++##$%%&&&&%$#@..... .....@#&&&&$$@oXooooo+@#$&%&&&%$#..OOOXX+@#$%%&&&&&&&&&%&%&%&&&&&&&&%#@+...O+@@@ooXXX@#&%$$@ooX... ..XOO+$$&&&&&&%$#++XXo@#$%&&&&&&&&&%&%%&%&&&&&&&&&&%&%$#++. .++#$%%&&&%%$#@+XXoOoXX+@#$%&%##oXXXXooO .OOO@#$&$#OOXXXXXXoXXXXoo@@&#OoXXXXXX.X.XXXXoo@&$@+XXXXXoooX.ooo+@$&&&&%$##@oo...@#$%%&&",
-"&&&&%%$$$$$$$%%&%&&&%%$#@@+++...+++@@#$&&&%%$#++OoOOO##$%%&&&%$$#@+OOO++##$%&&&&&&&&&&&&&&&&&&&&&&&&$$@+XXXO+@@@OoXXX@#&&%$##@+Oo...XXO++#$&&&&%&%%#+O...@$$%%&&&&&&&&%%%%%%&&&&&&&&&&&%$$#+O+OOO+#$$&%&&&%$#@@ooXXXoO+@$$%&%$#@+O..XoXoo ..+@$&$$#@+++OOXXXoo...+@&$#@++OoXoXoooOOO..@&$$#@++OO...oo...+@$&&&%$##@+oo ..@#$%&&&",
-"&&&&&%%%$$$%%%&&&&&&%%$$##@++. .++@##$$&&&%%$$@++O+++#$%%%&&&&%$$#@++O+@#$$%%&&&&&&&&&&&&&&&&&&&&&&&%$#+XXXo+@@@+OXXX+#&&%%$$#@+O . XXoO+#$&&&&&&%$$++...##%%&&&&&&&%%%$$$$$%%&&&&&&&&&%$$#+++++++#$$%&&&&%$$@+OooXooo@@#$%&%$#@++..XoXoo...++#&%$$#@@+OOX.Xoo ..+@&$#@@++oXoXoooOOO..#&%$$#@++O...oo ..+@#&&%%$#oooXXOO+@#$$%&&",
-"&&&&&&&%%&%%&&&&&&&&&&%$$#@@+XXX+@##$%%&&&&%%$$#####$$%%&&&&&&&%$$$##$#$$%%&&&&&&&&&&&&&&&&&&&&&&&&&$$#+XXXOO+++OoXXX+#&&&&%$##++.. XXO++#$&&&&&&%%$##@###$%&&&&&&&&&%$$####$%%%&&&&&&&&%%$$$###$$$%%&&&&%%$@+O.......O+@$%&%$#@+OXXXXXOo. .O+#&%%$#@@+XXooooo...+@&$$@OooXX++++OXXXO+@&%$$##+XXooooo...+@#&&%$$@oXXXX+++@#$$%%&",
-"&&&&&&&&%&&&&&&&&&&&&&%$$$#@+XXX+@#$$%%&&&&%%%%$$$$$$%%%&&&&&&&&%$$$$$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&%$#+XXXXXOOOXX...+@&&&&%%$#@+....Xo++$$&&&&&&&%%$$##$$%%%&&&&&&&%$##ooO##$%&&&&&&&&&%%%$$$$$$$%%%&&&&&%$@@O.. . ..++@$%&%$#@++XXXXXoO. .++$&%%$#@++XXooooo. .O@&$##OOOXo++@++XXXOO#&%%$#@+XXooooo. .++$&&%$#@oXXXXO++@##$$%&",
-"&&&&&&&&&&&&&&&&&&&&%&%$$##++XXX++##$%%&&&&&&%%%%%%%%%&&&&&&&&&&&&&%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&$$#@X.XXXOoOXX...+@&&%&%$$#@+. .XXoO+@$&&&&&&&&%%%$%$%%&&&&&&&%&%$#@oXo@#$$&&&&&&&&&&&%%%%%%%%%&&&&&&%%$#++.......+@@$%&%$#@+OXXXXXOo...++#&&%$#@+OXXooooo...++&$#@OooXo@@@++.XXO+#&%$##++XXooooo...++#&&%$#@XXXoo++@Oo@@#$&",
-"&&&&&&&&&&&&&&&&&&&&%&%$@++OOooOO++@@$%&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$#+XXXXXOoOXX...+@&&&%%$#@+O. ..XooO@$&&&&&&&&&%&%%&%&&&&&&&&&%$#+O...++#$%%&&&&&&&&&&&&%%&&&&&%&&&&%%$$##@@+@@@@##$%%&%$@oXXXXoOO. ooO@#$&&%$#OXXooXooXX. .O+&$@+XXX++@@@oXoooO+#&%$#ooXoooooXX. .OO#&&%$#@XXXoO+++oo+@@$&",
-"&&&&&&&&&&&&&&&&&&&&&$$#++OOOoOoOO++@$$&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$$#@XXX.....XX...oO&&%%$#@+OO. .XXXoo@#&&&&&&&&&&&&&&&&&&&&&&&%%$#+O. .O+#$%&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$###@###$$%%%&$$@XXXXXOOO..oOO@$$&%$$#ooXOoooooX...oO&$@@XXX+@@@+ooooOO+#&$$#ooXOoOoOoX. .OO#&&&$#@oXXXXOOOXXO+@$&",
-"&&&&&&&&&&&&&&&&&&&&%%$#+OOOoOoOOOO++#$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$#+XX.. ...XX...O+&&%%$@++..........@#&&&&&&&&&&&&&&&&&&&&&&&&%$#+O...O+#$%%&&&&&&&&&&&&&&&&&&&&&&&&&&%%%$$$$$$$$$%%&&&$$@oXXXXOOO..O++#$%&&$$#oooOOooooo ..OO&$@+ooo@@#@@oXooo++#&%$#oooOOOOOoo...o+#&%%%#@oXXXXOOOXXO+@$&",
-"&&&&&&&&&&&&&&&&&&&&%$#@.............@#&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$$#@XXXoO+++@@@@@##&&%%$@+O... ......+#&&&&&&&&&&&&&&&&&&&&&&&%$$@Oo ..O+#$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%$%%%&%&&&&$$#+oO+++++O+@##$%%&%%$#@++@@@@@++...O+&$@@@+@###@@..ooo..#&%$#+++@@#@@++...OO#&&%%$#ooXXXOOoXXO++$&",
-"&&&&&&&&&&&&&&&&&&&&%%##.............##&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$#@XXXOO@@@#@###$$&&&%$#@+..........@#&&&&&&&&&&&&&&&&&&&&&&&&%$#oo. .O+$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&%&%&&&&&&&%$#+++##@@@+@##$%%%&%%$$@@@##$##++...O+&%#####$$##@..ooo..#&%%$@@@#####@+...++$&&%%$#@@+.......+@#$&",
-"&&&&&&&&&&&&&&&&&&&&&%$##@@@@++@+@@@##$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$$@XXX++$$%%%&%%%&&&&%$$##@@+++@+@@##$&&&&&&&&&&&&&&&&&&&&&&&&%$#@+OOO@##%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$$##$#$$#$$$%%%&&&&%$$$$$$$$$###@@#$&%$$$$$$%$$##@@@@@#$&&%$$$$$%$$$###@@##$&&&%%$#@@.......@##$&",
-"&&&&&&&&&&&&&&&&&&&&%%%$$##@####@###$$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$#+++##$%%&&&&&&&&&&&&$$###########$$&&&&&&&&&&&&&&&&&&&&&&&%%%$@@OO+@$$%%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%$$$$%$%$$%%%&&&&&&&%%$$%%%%%%$$#$#$$&&%%$%%%%%$$$###$#$$&%&%%$%%%%%$$$#$#$$$&&&%%$$##@@@+@@@#$$%&",
-"&&&&&&&&&&&&&&&&&&&&&&%%$$$$$$$$$$$$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$#@@+#$$%&&&&&&&&&&&%&%%%$$$$$#$$$$%%&&&&&&&&&&&&&&&&&&&&&&&&%%$##+++$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%%%%&%%&%&&&&&&&&&&%%%%%%%%$$$$%&&&%&%%&&&%%$%%$$$$%&&%&&%%%&&&%%%$$%$%%&&&&&%%$$#######$$%&&",
-"&&&&&&&&&&&&&&&&&&&&&&%&%%%%$%$%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%$@@@$$&%&&&&&&&&&&&&&&&%%%$%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$$$$$$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&&&&&%&&&&&&&&&&&&&&&&&&&&&%%&&%&&&&&&&&&&&&&&%%%&&&%&&&&&&&&&&&&&%&%%%&&&&&&&&%&%%$$$$$$$%%%&&",
-"&&&%%$$$$$$%&%&&&&&&&&&&&&&%%$$$$$$%%&&&&&&&&%%$$$#$$%%&&&&&&&&%%%%%$$$$$%%%&&&&&&&&%&%&&%&%&&%&&&&&&&&%&$$####$$%%%&&&&&&&&&&&%&%%&%&%%%&%&&&&&&&%&%&%&%&%%&&&&&&&%%$$$$$$%%&&&&&&&&&&&&&&&%$$$#$$%%&&&&&&&&&$$$##$$%%&&&&&&&&%%%%%%%%%%%%&&&&&&&&%%$$$$$%%%&&&&&&&&&&&&&%&%%$$$$$$%%%&&&&&&%%$####$$%%%&&&&&&&&&%&&%&&%&%%&&&&",
-"&&&%$#@+O#$$%%&&&&&&&&&&&&%%$##@O+#%%&%&&&&%&%$#@+O+#$%%&&&&&&&&%$$######$$%%&%&&&&&%&%%%%%%%%%&&&&&&&&%%$@+OOO##%%&&&&&&&&&&%%%$%%$%$%%%%%&&&&&%&%%%$%$%%%%%%&&&&&%$$+O@##$%%&&&&&&&&&&&%%%$$#++##$%%&&&&&%%%$#++O##$%%&&&&&&%&%%$$$$$$$$%%%&&&&&&%$##OO#$$%%%&&&&&&&&&&&%&%$$#O+##$%%&&&&%&%$#@ooo@#$%%%&&&&&&%&%%%%%%%%%%%&&&",
-"%&%$$#@OO@#$%%&&&&&&&&&&%%%$$@@+OO#$%%&&&&&&%$$@@OOO##$%%&&&&&%%$$#@+@@@@#$$%%&&&&%%%%$$$%$%$%%%%&&&&&%%$#@+ooO@#$%%&&&&&&&%%%$$$$$#$$$$$$%&&&&&%%%$$$$$$$$$%%%&&&%%$#OO@@@$$%%&%&&&&&&&%&%$$##oO@##%%&&&&&%%$$@OOO@@$$%%&&&&&%%$$$##$$#$$$$%%&&&%%%##@OO##$$%&%&&&&&&&&&&%%$$#@OO@#$%&&&&&&%$#@@ooo+@#$%&&&&&&%%$%$$%%$%$%%%%%&",
-"&&%%##@oo@@#$$%%&&&&&&&&&%$$#+++OO$$%&&&&&%%%$#@+ooo@#$%%%&&&&%$$#@++++++@#$%&%&&&&%$$$$#$#$$$$%%&&&&&%%$#+Oooo+#$%%&&&&&&%&%$#@@@@@@+@@@#$&&%%%%$##@@@@@@###$%&&&%%$#Oo++@#$$%%&&&&&%&&%%$$#@@oo@##%%%&&%&%$##@ooo+@#$$%&&&&%%$$#OO@@@+O@@#$%%&&&%%##@oo@@#$$%%&&&&&&&&&%%$$#@@oo@@#%%&&&%%%$#@+XXo+@#$$%&&&%&%$$$$#$$$$#$$$%%&",
-"&&&$$#@OooOO#$%&&&&&&&&%%$$@@oXX+@#$%%&&&%&$$#@XXXXoO+$$%&&&%%%$@+O.....Xo@#$%&&&%%$#@@OO##@OO$$%%&&&%%$$@OoOOOO+$$%%&&&&&%%$#@++++O+++++@#&&%%$$##@++++++@@@#$&&&%$##++XXX@@$$%%&%&&&%%%$##Ooooo@#$$%&&&%%$$#OOoXXXX@#$%%%&&%%$#@oo+++Oo+@@$%%&&&%%$#@OoooO#$$%%%&&&%&%%%$$#OOooO@#$%%&&&%%$#@XXoooXX@#$%%&&&%$#@@++##@++@@#$%&",
-"&%%$$#@ooooO#$$%&&&&&%&%$$#@+XXX+@$$&%&&&%%$$@@XXXXXO+#$%&%&&%$#@+O... .Xo@#$%&&&&%$#@+Oo@@@oO#$%&&&&%%$#@oooOO++$%%&&&&&&%%$#++OOOOOOOO++#&%%$##@++O+O+O+++@@#&%%%$#@++XXX+@##$$%&&%%$$$##@OoooO@@$$%%&&%$$#@OoXXXXX@@#$%%&%$$@++ooOOOooO++#$%&&&%$##@ooooO@#$$%%%&&%&%%$##@ooooO@#$$&&&&%$$#@XXXooXX@##$%&%%%$#++OO+@@OO+@#$%&",
-"%&%$@+++Oooo@#$%%&&&&&%%#@@OOOoO@#$%%&&&&%%$@+OooOOOO+#$%%&&%%$#+OoOooXoO+#$%%%&&%$$@++oo+++++#$%%&&%%$@@+OooXo@@$%%%&&&&&%$$@... ...... @&%$$+++..........oo#&%%$@@+OOooooO+@@$%%&%%$#@++OoooOO++@$$%&%$$@++ooOOOooO++$$%&%$#@+OoooOOooOO+#$$&%%%$#+++OXoo++@##%%&&&%%##@+OooXO++@#$%&%%$$@+OOoOOoooO+@$%&&%$$@++oo+O+ooO++$$&",
-"%%$$@++OOXoo@#$%%&&&%%$$#@+OoooO+##%%%&&&%$#++OoooOOO+#$%&&&%%$#OOoOoXoX++##%&%&&%$$@+OooOO+O@#$%%&&%$$@+OOoXoX@@$$%&&&&&&%$##... ... .@&$$#+OO.... . ...Xo@&$$#++OoOoooooOO+@#$&$$#++OOOXoXOOOO+##$&$$@+OOXoOoOXooOO@#$&$##+OOooooOXoOOO@#$&&%$$@++OOXoXO++@#$%&%%%$#@++OXoXOO+@#$$&&%$#++OooOOOooO++#$&&%$#+OOooOOOooO++#$&",
-"&%$#@+OOOoXo@@$$%&&&&&$$@++ooooO+@$$%&&&%%$#+OOXoooOO+#$%%&&&$$#OOooOXoX++#$%%&&%%$#++OooOOOO+#$%&&&%$#@+OoooXo+@#%%%&&&&&%$#@oo ..oo+O+XX@&$#@...oo+++++XXoXo@&$#@.... ..... . @@$&$#@... ...... . +#$&$#@.... ..... . @@$&$#@... ...... . +#$&%%$#++OOOXXoOO++@$$&&%$$@++OOXoXOO++@$$&%%$#+OOooOoOXoOO+#$&%%$#+OOooOOOooOO+#$&",
-"&%$#ooX.. O+#$%&&&%%$#OoX.. . ++#$%%&&&%$#OoX.. . O+#$%%&&&$$#ooX. . O+@$%%&&&%$#OoX. . .O+@$$&%&%$#ooX.. . O+#$%%&&&&&&$#@oo. .XoO+OXX@&$#@...oO+@@@+ooooo@&$#@. . . . .. .+@$&$#@.... ... . .+@$&$#@. .. ..... . +@$&$@@.... ..... .+@$&&%$$Ooo... ...ooO#$&&%$#Ooo.. . ..XoO#$&&%$#OoX.. . ..XoO#$&%%$#OoX.. . ..Xoo#$&",
-"%%$#OoX .. .O+#$%%&&&%$#Ooo . . OO#$%%&&%%$#ooX.. .O+@#%%&&%%$#ooX. . .O+@$%%&&%%$#ooX.. O+@$%%&&%$#Ooo.. .O+#$%&&&&&%%$#@oo . ooO+OXX#&$@@...OO@###@oooXo#&$#@+OOXX+++++...+@$&$#@+oOXXO++O+...+@#&$##OOoXXO+O++...+@$&%#@OOoXXO+O+O...+@#&%%$#Ooo . .ooO$$&%%$$OoX... ..ooO$$&%%$#Ooo.. . ..ooO#$&&%$#ooX.. ..ooO#$&",
-"&&$$#@+oX. .oo@#$%%&&%%$#@+oo.. oo@#$%&&&&$$#@+oo. .oo@#$%%&&&$$#@+oo ..oo@#$%%&&%%##@+oX. .oo@#$%%&%%$#@+oX . oO@#$%%&&&&%$#@..XXXXXXXX++#&$@+...++###$#@+@+@#&%$#+OoXXO++++...@@$&%$#+OOXXO++O+...@#$&%$#+OOX.++++O...@#$&%$#+OOX.++++O...+#$&&%%$#@+++...+++@#$%&&%$$#@@++...++@@#$%&&%%$#@+++. .+++@#$$&%%%$##+++...O+@@#$$&",
-"&&%$##+oX. .oo@#$%%&&%%$$@@oX ..Xo@#$%%&&&%$$@+oX.. Xo@#$%%&&&%$##+oo. .oo@#$%&&&%%$#@+oX. .oo@#$%%&%%%$@+oo. .oo@#$%&%&%%$$@@..XXXoXXXo+@#&$@+. .+@#$$$$#@@@@$&%$#+OoXX+++XXoOO@#$&%$#+OoXX+++XXooO@#$&%$#+OoXXO++XXOO+@#$&$$#+OOXXO++XXOO+@#$&&&$$$#@@+. .+@@#$$%&&&%$$##++. .++@#$$%&&%%$$##++...+@@#$$%&&&%$$##++. .++@#$$%&",
-"&&%$#@+..OOO .+@#$%&&%%$#@+ .OoO .+@#$%&&%%$#@+..OoO .+@#$%&%%%$#@+..OOO..+@#$%&%%$$@+O..OOO .+@#$%&%%$#@+..OoO .+@#$%%&&%$#@+..XXXXoXXX+@#&#@+...+@$%%%$$####$&%$#++OXXO++XXoOO#$%&%$#+OOXXO++XXOOO#$$&%$#++OXXO++XXOO+#$$&%$#+OOXXO++XXOO+#$$&&&&%$$#@+...+@#$$%%&&&&%$$#@+. .+@#$$%%&&%&%$$#@+ . +@#$$%%&&%&%$$#@+...+@#$$%%&",
-"%%$#++O..+O+..O++#$&&%$#++O..+O+..O++#$&&%$$++O..+O+..O++#$&&%$#++O..OOO..OO+#$&&%$#++O..OO+..O++#$&%$#++O..O+O..OO+#$%&%%$@++XXXXX. .. +@$&$@+...+@#$$%$$$$$$%&%$#+OoXXOO+XXOO+#$%&%$$+OoXX+O+XXoO+#$%&%$#+OoXX+O+XXO++#$%&%$#+OoXX+O+XXO++#$%&&&&&%$##+. .@@#$%%&&&&&&%$##+...@@#$%%&&&&%%%$##+...@@$$%&&&&&&%%$#@@ ..@@$$%&&&",
-"%%$#+OO..O+O..OO+#$&%%$#+OO..O+O..OO+#$&%$$#+OO..O+O..OO+#$&%%$#+OO..+++..OO+#$&%%$#+OO .++O..OO+#$&%$#+Oo..+O+..OO+#$%&%$#++OXXXXX . ..+@$&$@+...+@@##$#####$$&%$$+OO .XXX..++##$%&%$#+OO XXX..+@@#$%&%$$++o. XXX .+@#$$%&%$$++o. XXX..+@#$$%&&&&&%%$@@. .@@$%%&&&&&&&%%$@@...@@$%%&&&&&&&%%##@. .+#$$&&&&&&&&%%$@@...+#$$&&&&",
-"%$$@oXX .XXX .XXo@#&%$$@oXX. XXX .Xoo@#&%$#@oXX .XXX .XXo@$&%$$@oXX .X.X .Xoo@#&%$#@oXX. XXX .XXo@#&$#@oXX. XXX .Xoo@#$&$$#ooX. ...oooOO@#$&$@@...OO@@#@@++++@$&%$#@OO..XoX..++@#$$&%$#+OO..XoX..++@#$%&%$#+OO..oXX..++@#$$&%$#+OO..oXX..++@#$$&&&&&%$$@@...+#$$%&&&&&&&%$$#+. .+#$$%&&&&&&&%%$@+...+#$$&&&&&&&&%$$#+. .+#$$%&&&",
-"%$#@ooX ..XX .XXo@#&%$#@oXX. XXX .XXo@#&&$#@oXX...XX .XXo@#&%$#@oXX. XXX..XXo@#&%$#@oXX...XX .XXo@#&$#@oXX...XX..XXo@#$&$#@ooX... .XooOO@@$&$#@...oo++@++OoOO+#&%$#+Oo..ooo..++@@#$&%$#+Oo..oXo .++@@#$&%$#+Oo..ooo..++@@#$&%$#++o..ooo..++@@#$&&&&&%%##+ ..+@#%%&%&&&&&%%#@@...+@#%%%&&&&&&%$$#+...+@$$%%&&&&&&&$##+...+@$%%%&&",
-"%$#+XXX..XXX. XXo@#&%$#+oXX. X.X..XXX@@&%$#@XoX .XXX. XXX@#&%$#+oXX..X.X .XXX@@&%$#+oXX. XX...XXo+#&$#@oXX .XX.. XXo+#$&$#@oXo . . oooOO@@#&%#@Ooo..XXXXX...++$&%$#+OO..XoX. O++@@$&%$#+OO..ooo..O++@@#&%$#+OO..XXo. +++@@$&%$#+OO..XoX. O++@@$&&&&%%$#@+...+##$$&%&&%&%%$#@+. .@@#$%%&&&&%%%$#@+ ..+@#$%%%&&&%%%$#@+. .+@#$%%%&",
-"$#@+...XXoXooX...+@&$#@+...XXoooXX...+@&$#@+...XXoXoXo...+@&$#@+.. XXoooXX...+@&$#@+...XXooooX...+@&#@+...XXooooX...+@#&#@+...OOoXoXo+O+oo#&%$#+OO..XXXXX...O+$&$$@+OoXX+O+oOooooo#&$$#+OoXXOOOooooOoo#&$$#+OoXX+O+ooooOoo#&$$@+OoXXO+OOOooOoo#&&%%%$##@+. .++##$%%&&&%%$##@+...+@##$%%&&%%%$#@@+. .+@##$%%&&&%%$##@+...+@@#$%%&",
-"$#@+. .XooooXX. .+@&$#@+ . oXooooX ..++&$#@+ . oXoooXo ..++&$#@+...XoooooX. .+@&$#@+ . oXoooXo ..+@&#++. .XooooXX. .+@#&#@+...OOXoXoX+O+Xo@&%$#+OO..XX.XX...++$&$$@+OoX.+O+oOooOXo@&$#@+OoXXO++OOooooo@&$#@+OoX.+O+oOooooo@&$$@OOoXXO+OoOooooo@&&%%$#@@++. .++@@#$%&%%%$#@@++ . ++@@#$$&&&%$##@++...++@@#$%&%&$$#@@++ . ++@@#$%&",
-"$#Oo . XXOOOXX . oO&$#Oo. .XXOOOXX. .oO&$#Oo. .XX+OOXX .oO&$#Oo . XXOOOXX. .oO&$#Oo. .XXOOOXX. oO&#Oo . XXOOOXX. .oO#&#Oo. oo.. ..XXX .@&&%$##++O...XoO+@##$&$@@.....XXXXX...oo@&$#@... .X.XXX...Xo@&$#@.....XXXXX...Xo#&$#@... XXXXX...Xo#&%%$$+OoXX . XXoO+$$&&%$$+OoXX . XXoO+$%&%%$#+OoXX XXoO+$$&&%$$+OoXX . XXOO+$$&",
-"$#Oo. .XXO+OXX. .oO&$#Oo. .XXO+OXX .oO&$@Oo. .XXOOOXX. .oO&$#Oo . XXO+OXX . oO&$@Oo. .XXO+OXX ..oO&#Oo. .XXO+OXX . oO#&#Oo ..Xo ... X.X. @&&&%%$#+OXXXoO@#$%%&&$#+... .X.X.X...Xo@&$@@.... XXX.X...Xo@&$#+... ..XX.X...Xo@&$@@.....X.X.X...Xo@&&%$#OOoXX XXoOO#$&&%$#OOoXX .XXoOO#$&&%$#+OoXX . XXooO#$&&%$#+OoXX .XXooO#$&",
-"$#OO . XX++OXX . oO&$#Oo . XX++OXX. .oO&$#Oo. XX++OXX. .oO&$#Oo.. XX++OXX. .oO&$#Oo . XX++OXX . oO&#Oo.. XX++OXX. .oO#&#Oo . oo. ...XXX..@&&&%%$#+OXX.oO#$$%&&&$#@... .XXXXX ..oo#&$@@.....XXXXX ..oo@&$#@.....XXXXX...oo#&$#@... .XXXXX ..oo#&%%$#+ooXX.. XXoo+#$&%%$#+ooXX. XXoOO#$&%%$#OooXX. XXoO+#$&%%$#OooXX. XXoO+#$&",
-"$#@+OoOoO+++OOoOO++&$#@+OoOoO+++OOoOO++&$$@+OoOoO+++OoOoO+@&$#@+OoOoO+++OoOoO+@&$$@+OoOoO+++OOoOO++&#@+OooOo+++OoOoO++#&#@+OOOOOOooooooooO#&&&&$$#Oo...+@#$%&&&&$$@OOOoooooooOoO++#&%$@OOooXooooooOO++#&$##OOooooooooooO++#&$$@OOooooooooOoO++#&&%$$++OOooOooO+++$$&%%%#@+OooOooooO+@#$&&%$$@+OooOoOoOO++$$&&%$$@+OOoOoooOO++$$&",
-"%$@@O+OO+@@@++OO+@#&%$@@O+OO+@@@++OO+@#&$$@@O+OO+#@@+O+O+@@&%$@@+O+O+@@@+O+O+@@&$$@@+O+O+@@@+O+OO@#&$@@+O+O+#@@+++O+@@$&$@@+OO+++O+OOoOo++#&&&&%$#Oo...@@$$%%&&&%$#++OoOOOOOOO+O@@$&$$#++OOOOOO+OOO+@@$&%$#++OOoOOOOO+OO@@$&%$#++OoOOOOOOOOO@@$&&%%$@@+O+OO+OO++@$%&&&$$@@++OOO+O++@@$%&&&$$@@++OOOOO++@@$%&&&$$@@++OO+OO+++@$%&",
-"%$$######$$#######$&%$$$#####$$#######$&%$$#######$#######$&%$$######$$$######$&%$$######$$#######$&$$#######$######$$$&%$######@#@##@####$&&&%%%$##@@@#$$%&&&&&%%$###@#@####@###$$&%%$###@#@#@######$$&%%$######@#######$$&%%$####@#########$$&&%%%$$####@####$$$%&&&%$$$####@#####$$%&&&%$$$######@###$$%&&&%$$####@#####$$$%&",
-"&%%$$$$$$$$$$$$$$$$&&%%$$$$$$$$$$$$$$$$&&%%$$$$$$$$%$$#$$$%&&%%$$$$$$$$$$$$$$$%&&%%$$$$$$$$$$$$$$$%&%%$$$$$$%$$$$#$$$%%&%%$$$$$$$$$$#$#$$$%&&&&%%%$$#$#$$%%&&&&&&%%$$$$$$#$#$$$$$%%&&%%$$$$#$#$#$#$$$%%&&%%$$$##$$#$#$$$$%%&&%%$$$$#$##$#$$$$%%&&&&%$$$$#$$#$$$$%%&&&%&%%$$$$$$#$$$$%%&&%&&%%$$$#$#$$$$$%%&&&%&%%$$$$$$#$$$$%%&&",
-"&&%%%%%%%%%%%%$%%%&&&%%%%$%%%%%&%$%%%%&&&%&%%%$%%&%%%%%%%%%&&%&%%$%%%%%%%$%%%%%&&%&%%$%%%%&%%%$%%%%&%&%%$%%%%%%%%%%%%%&&&%&%%$%$%$$%$%$$%%&&&&&&&%$$$$$%%&&&&&&&&&%%%$$$%$%%$%%%%&%&&&%%%$%%%$%%$%%%%&%&&&%%%$%$$%$%$%%%%%&&&&%%%$%$%%%%%$%%%%%&&&%&&%%%%$%%$%%%%&&&&&&%%%%$$%%$%%%%&%%&&&%%&%%%%%$%$%%%&%&&&&&&%%%$$$%$$%%%%&%&",
-"&&&&%&&%&&&%%&&%&&&&&&&&%%$$$#$$$$$$%%&&&&&%%%###$$%%&&&&&&&&&&&&&&%%$$#$$%%%&&&&&&&%%%$####$%%%&&&&&&&%%%$$#$$#$$$$%%&&&&&&&%&&%&%&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%&%%&%&%&&&&&%%$$##$$%%%&&&&&&&&&&&&&%%$$#$$%%%&&&&&&&%&$$####$%%%&&&&&&&&&%&%%&%&%&%&&&&&&&&&&&&&%%$$##$%%%&&&&&&%&&&&&&&&&&&&&&&&&&&&&&%%%%%%%&&&&&&",
-"&&%%%%%%%%%%%%%&&&&&&&%%%$##@@@@###$$%%&&&&%$$#@###$$%&&&&&&&&&&&&%%$$#@##$%%%&&&&&&%$$#@@@##$%%&&&&&&&%%$###@@#@##$$%%&&&&&&%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%%%%%$%%%&&&&&%$$#@###$%%&&&&&&&&&&&%&%$$##@$$%%&&&&&&&%%$#@@@##$%%%&&&&&&%&%%%%%%%%%%&&&&&&&&&&&%&%$$####$%%&&&&&&%%%%%&%%&&&&&&&&&&&&&%%%$$$$%%%%&&&&",
-"%&%%$$$$$$$$%%%%%%&&&%&%$$++oooO+OO+$$%&&&%%$#OOOO+#$%%&&&&&&&&&&%%$#@@oo@#$%&&&&&&%%$#@oXoO+#$%%&&&&&%%$#++oooO+OO+$$%&&&&%%%$$%$$$$%%%%&&&&&&&&&&&&&&&&&&%&&&&&&&&&%%%$$$$$##$$%%&&%&%$#OOOO+#$%%%&&&&&&&&&%%$#@@oo@#$%%&&&&&%$$#@XoXO+#$%&%&&&&&&%%$$$%$$$%%%&%&&&&&&&&%%$#@@oo@#$%%&%%%%$$$$$%%%&&&&&&&&&&&&&%$$##@#$$%%%&&&",
-"&$$$$#########$$%%%&&%%$##OOoXoOOoO+#$%&&&&%$#OoooO##%%&&&&&&&&&&%$$@@+Xo@#$$&&&&&&%$$@+XXXO+@$$%%&&&&%$$#OOXoXOOOO+#$%&&&&%$$##$$###$$%%&&&&&&&&&%&&&&&&&%&&%&&&&%%%$$#$##@#@@#$$%&&&&%$#OoooO##%%%&&&&&&%&%%$$@++Xo@#$%%&&&&&%$#@@XXXO+@$$%%%&&%%%$$##$$###$$$%%&&&&&&%&%$$@++Xo@#$%%&&%$#$#$#$$$%%%&&&&&&&&&%%$$#@@++##$%%&&&",
-"%$##@@@@@@@@@###$$%&&%$$#@OOXXXoOoOO#$%&&&%%$#Ooooo@#$%%%&&&&&%&%%$#@++XX@#$%%&&&&%%$#@+XXXoO@#$%&%&%%%$#@OOXXXOOoOO$$%&&&%%$$@@@##@@##$$%&&&&%%%&%%&&&&%&%%&%&&%&%$$$##@@@@+++@#$%&&%%$##Ooooo@#$$%%%%&&%&%%$$#@++XX+@#$%%&&%%%$#++XXXoO@#$$%&&&&&$$$@@@##@@##$$%%&&%&%%%$$#@++XX+@#$%&%$$#@@@@##$$%%%&&&&&&&&%%$@@++++@@#$$%%&",
-"%$+OoXXXXXXXoo@@@$$&%%$@@+XXXXX..O+@#$$&&&%%$#@+oXo+@#$%%&%&&&&&%$#@XXXO+@#$%%&&&&%%$@ooooOXo+@#$%%&&%$#@+XXXXX..O+@$$%&&&%%$#oo+++oo+@@$%%&&%&%%$%%%%&%%%%%%%%&&%$$#@+OXXXXX...@#$&&%%$#@@+XXo++#$$%%%&&%%$$##@XXXO+@#$$%%&&%$$#@oXOoOXX++@$$%&%%%$#@oo+@+oo++@$$%&&%%%$$##@XXXO+@##$%&%$#ooXXXO++#$%%&%&&&&%%%$#@XX...Xo@#$%%&",
-"$$+OXXXXXXXXXX++@#$&%$#@+OXo.XX..O++#$$&&&%%$#@+XXXO+#$$%%&&&&%%$$#@XXXOO@#$%%&&&%%$$@oXOOoXX++@$%%&&%$@@+oXX.X..+@@#%%&&%%$##XX+++oX++@$$%&&%%$$$$$%%%%%$$$$$%&%%$#@@OoXXXXX...@#$&%%$$#@++oXXO+@##$$%&%%$$##@+XXXOO+@@$$%&%%$#@@oXOoOXXO++#$$&%%$#@@XX+++ooO++#$%&%%$$$##@+XXXOO+@#$$&$#@XXXXXoO+@$$$%%&&&&&%$$@@XX. .XX@@$$%&",
-"$#@+...XXooooX...@@&%$#++OXXXX...O++@#$&&%%$$#@+oXX+O@#$$%%&%&%$$#@+XXXOO@@#$%%&&%%$#@oXoOOXXO+@$$%&&%$@++XXXXX..O+@$$%&&%$$#@XXOOOXXO++$$%&%&$$@++#$$$$$#++@$$&$$#Ooo..ooo.....+@$&%$#@@+++XXoO++@@##$&%$##@@++XXXOO+@@##$&%$##++XXOOOXX+O+@#$&%$#@@+XX+++XXOOO@#$&%$##@@+@+XXXoO++@##&$$#ooX..ooO+@#$$%%&&&%$$@+O..OOO..O+@$%&",
-"$#+O...XooooXo. .+@&$#@XXXXXO+OooXXXO+#&%%$##@OoXXXXo+@@$$%&&%$$#@OoXXXoX+@@$$%&%%$#@+ooXXXXX++@#$%&%$$#@+ooX.XXX++@#$%&%%$#@+OoXXXXX+++#$%&%%$#+++@#$$###+++#$&$#@ooo..ooo.. ..+@#&$$#ooXXX+++ooXXX++$&$$#oXXXX+O+ooXXXO+$&%##oXXXXO++ooXXXO+$&$##oXXXX+++ooXXXO+#&$$++ooXXXOOOXXXXXO+&$##ooX..ooOO+@##$$%&&%$$++O..OOO..O++$$&",
-"$$++...oXooooX...+@&$#@XXXoX+O+XoXXXO+#&%%$#@+OoXXXXXO+@##%&%$$@@@OoX.XXX+++##%&%$##@+OoX.XXXO++@$$&%$#@++ooXXXXXO++##$&%$##@+ooXXXXXO++@#$&&$##OOO@@@#@@+OOO#$&$#@oXX..ooo... .++#&$#@XXXXX+++ooXXXO+#&$#@XXXXX+++ooXXXO+#&$#@XXXXX+++ooXXXO+#&$#@XXXXX+++ooXXXO+#&$#+OXXXXXOOOXXXXXO+&%##ooo .oooO++@@#$$&&&$#@OO..OOO..O++#$&",
-"$#@+XXXoO+++++XXXoO&$#@.....OOOoo ..O+#&%$#Ooo..oooXo...+#$&%$#Ooo..ooooX...+#$&$$#ooXXXooooX...@@$&$$#ooXXXXoooX...+#$&$$#ooXXXooooX...@#$&%%#@...Xo+@+oX...@$&$#+...OOoOOXXXXXoO#&$#@...Xo+++Oo...O+#&$#@...Xo+@+Oo...O+#&$#@...Xo+@+Oo ..O+#&$#@...Xo+@@Oo ..O+#&$#+O.. XX+++XX ..O+&%$#+Oo. .....XXo+#$&%%$#++OXXOOO .oO+$$&",
-"$#@+X.XOo+++++.XXoo&$#@... .OOOOo. .O+#&$#@OoX..ooooX...+@#&$$@ooX..oooXo...+@#&$#@oXXXXooooX. .+@#&$#@oXXXXoooXo ..+@#&$#@oXXXXoooXo ..+@#&%$#@...XX+++oX...#$&$@+.. OOOoOXo.XXoo@&$#+...Xo@@@+O ..O+#&$#@...Xo+@@+O. .O+#&$#+...Xo+@@+O...O+#&$#+...Xo@@@OO.. O+#&$$++. oX+++Xo . ++&$$#+OO . .. .XXX+@#&&%%#+OoXXOoO .OO+#$&",
-"$#+o.....oOO++OooXo&$#+... .OOOOo...O+#&$#@oXo..oOOXo. .+@#&$#@oXo..OOOoX. .+@#&$#@oXXXXOOooo...+@#&$#@oXXXXOOOXo...+@#&$#@oXXXXOoOoX. .+@#&&%$#@++..XXX..++@#$&$@+...OOXXXOOoooXo@&$#@...oo@@@+O. .O+#&$#+...oo@@@OO...O+#&$#@...oo@@@OO. .O+#&$#@...oo@@@+O...O+#&%$#+oXXXoO++XoXXX@#&%$#+OOXX++++OXoXoo#&&%$$+OOX......OO+#$&",
-"$#OO . ..oOO@+OooXo&$#+XXXXXXoX+O. .++$&$@+...OO@@@++XXXoO#&$@@...OO+@+@+XXXoO#&$@+...oO+@+++XXXoO#&$@+...oO+@@++XXXoO#&$@+...oo+@@++XXXoO#&%%$#@+O. XXX .O+@#$&#@+...++XXXoOoooXo@&$@+XXXoO@#@@+...++#&$#+XXXo+@##@+...+@#&$#+XXXOO@##@+...O+#&$#+XXXoO@#@@+...++#&%$#@ooXXoO++XXXXX@#&%$#++oXX+++++XoXXo@&&%$#+OoXX... .oO+@$&",
-"$#OO.. ..oOO@@OoOXo&$#+XXXXXoXXO+...+@#&$#+. .O+@@@@+XXXoo@&$@+...O+@#@@+XXXoo@&$@+. .OO@@#@+XXXoo@&$@+. .OO@@@@+XXXoo@&$@+. .O+@@#@+XXXoo@&&%%$#@+...XX .+@@$%&#@+...O+XXXOOoooXo@&$#+XXXO+@##@+...+@#&$#@XXXOO@##@+...+@#&$#+XXXO+@##@+...+@#&$#+XXXO+@##@+...+@#&&%$#+++..ooO..O+@##&%$#+OOXXO++++oXoXo@&&%$$++OXX.... OOO@#&",
-"$#+O...Xo+++@@OOoXo&$#@XXXoo...+O...+@#&#@+...+@##$#@oooXo@&$@+...+@####@oooXo@&$@+...+@####@oooXo@&$@+...+@##$#@oooXo@&$@+...+@####@OooXo@&&&$$#@+oX. .Xo+@#$$&#@+...O+XXX+OoooXo@&$#+XXXO+##$#+...+@$&$#+XXXO+####+...+@$&$#+XXXO+##$@+...+@#&$#+XXXO+#$##+...+@$&%%$#@++..oOo..++@$$&%$$+OoXX++@++oooXo@&&%$#+OoXXO++oo...+#&",
-"$#+O...XoO+@@@oooXo&$#+XXXoO.XXOo...+@$&#@+...+##$$#@OoOXo@&$@+...+@$$$#@OoOXo@&#@+...+@#$$#@OooXo@&#@+...@@#$$#@OoOXo@&#@+...+##$$#@OOoXo@&%&$$#@+oo .oo+@#$%&#@+. .+OXXX++oooXo@&$#@XXXO+###@@...+@#&$#@XXXo+###@@...+@#&$#@XXXOO####+...+@$&$#@XXXo+@###+...+@#&&%%$#@+..OoO..+@#$%&%$#++oXXO++++XooXo@&&%$#+OOXXO++oo...+@&",
-"%##+XXXOO@@@@@Ooooo&$#+XXXooXX.Oo...++$&#@+...++#$##@oXXoo@&#@+. .++##$#@oXXoo@&$@+. .+@#$##@ooXoo@&$@+ ..+@#$##@oXXoo@&$@+...++#$##@oXXoo@&&%$#+OO..XXX..O++#$&$@+. .XXOOOO+XXXoo@&$#+XXXO+@##@+...+@$&$#+XXXO+@##@+...+@$&$#+XXXO+@##@+...++$&$#+XXXO+###@+...+@$&&&%%##@oo. oo@#$%%&%$#+Oo. XXXXX...O+#&&%$$+OoXX+++++...+@&",
-"%##+XXXoO+@#@+ooooo&$#+XX.OOoOoX....++$&#@+ . ++@##@+oXXoo@&$@+...++#@#@+oXXoo#&$@+...O+@##@+XXXoo#&$@+.. O+@##@+oXXoo@&#@+...++@##@+oXXoo@&%%$#++O. ooX .OO+#$&#@+...XXooO++XXXoo@&$#@XXXO+@@#@+. .+@$&$#@XXXO+@#@@+...+@$&$#@XXXO+@#@@+...+@$&$#@XXXO+@@#@+...+@$&&&%%$#@oX . oo@#$%%&%$#++o..XXXXX ..O+#&&%$#+OOXX+++++...+@&",
-"$$@+XXXOO+@@@+oXooO&$#+XXXOOOooXX...+@#&$@+...O+@@@@+XXXoo#&$@+. .O+@@@@+XXXoo@&$@+ ..O+@@@@+oXXoo@&$#+...O+@@@@+XXXoo#&$@+. .O+@@@@@XXXoo#&&$$#+Oo..oXo..OO+#$&$@+. .XXOoOO+XXXoo#&$#@XXXOO@@@++...+@$&$#@XXXO++@@@+...+@$&$#@XXXOO@@@@+...+@$&$#@XXXOO@@@++...+@$&&&&%%##@+. .+@@$%%%&%$#+OO ..XXXX...++#&%$$#+OoXX+++++...+@&",
-"$##+. .oo+O+OO...++&$#+...oo+++XX .+@#&$#@oXXXXO+OOO...+@#&$#@XXXXXO+OOO...+@#&$#@oXXXXO+OOO...+@#&$#@oXXXXO+OOO...++#&$#@oXXXXO+OOO...+@#&%$#@...oo+++oo...@$&$#@XXX. OOOOO...+@#&%#@OooXX+++OO...@@$&%#@OooXX++OOO. .@@$&%#@OooXX+O+OO...+#$&%#@OooXX+++OO...@@$&&&&%$#@+O...O+@#$%%&$#@Ooo..XXooo+++##$&%$#@OooXXooooo...+@&",
-"$#@+...ooOOOOO ..+@&##@...oo+OOXX . +@$&$#@oooXXOOOOO...+@#&$#@oXXXXOOOOO...+@$&$$#ooXoXOOOOO ..+@$&$#@oooXXOOOOO...+@$&$$@ooXXXOOOOo...+@#&&$#@...O+@@@OO...#$&$#+XXX..OoOoo ..+@#&%$#OooXXOOOOo...@#$&%$#OooXXO+OOo...@#$&%$#OooXX+OOOo...@#$&%$#OooXXOOOOo...@#$&%&%$$#@OO . O+@#$$%&$$@OOo .ooooo+@##$%&%$$@OOXXXooooo ..+@&",
-"$#Oo. ...... .ooO@#&$@+.. ..O++oo...+@#&%$#@++XX.....oO+@#$&%$#@++XX.... oOO@#$&%$#@++XX.....OOO@#$&%$#@++XX.....OO+@#$&%$#@++oX.....oOO@#$&&%$#@++@@####@++@##&$#@oXXXX.....oOO@#$&%$#@++.... ..ooo@#$&%$#@++... .. ooo@#$&%$#@++.... ..ooo@#$&%$#@++.... . ooo@#$&&&%$@@O.... ..++@%%&$@+.... oXo@@##$$%%&%$@+.. . ooO.....@@&",
-"$#oo... .... .OOO#$&$#+.....+++Oo...+@$&&$$@@+oo . ..OO+#$%&%$$@@+oX. ...oOO#$$&%$##@+oX.. ..O++#$$&%%$@@+oX. . .OO+#$$&%$$#@+oX.. ..oOO#$$&%%$#@@@#$$$$##@@@$$&$$@ooo.X. ...oOO#$%&%%$#@+..... .ooO#$$&%%$#@+.......oOO#$%&%%$#@+.. ... ooO#$$&%%$#@+.. ....ooO#$%&%&%$@++.. .. .++@$%&$#+.. ..ooO@#$$$%%&&%$#+.....Ooo ....@#&",
-"$#Oo..... ... O++#$&$#@... .+@@OO...@#$&%%$##@oo.....++@#$%&&%$##@oo.....O++#$%&&%$##@oo.....O+@#$%&%%$##@oo.....++@#$%&&%$#@@oo.....O++#$%&%%%$###$$%%%$$###$%&$$#oooXX.....O++#$%&%%$##@.......oOO#$%&%%$##+... ...oOO#$%&%%$##@.......oOO#$%&%%$##@..... .oOO#$%&&&%$#++.......+@@$%&$#@.....oOO#$$%&&&&&%$#@.....OOO.....##&",
-"$$#@@+@+@+@+@@@##$%&$##@@@@@@###@@@@#$$&&&%$$#@@@@@@@@#$$%%&&%%$$##@@+@@@@#$$%%&&&%$$##@@@+@@##$$%&&&&%$$##@@+@@@@#$$%&&&%%$$##@@+@@@@#$$%&&&&%%$$$%%%%%%%$$$%%&%$#+OO+++@+@@@#$$%%&&&%$##@@+@+@@@##$%%&&&%$$#@@@+@+@@##$$%&&&%$##@@@@+@@@##$%%&&&%$##@@@+@@@@##$$%&&&%%$##@@+@+@@@#$%%&$$#@@+@@@##$$%&%&&&&%$$#@@@+@@@@@@@@##$&",
-"%$$######@#####$$%%&%$$#####$$$$$##$$$%&&&&%$$$##@###$$$%&%&&&%%$$########$$$&&&&&&%$$#######$$$%%&&&&&%%$#######$$$%%&&&&&%$$########$$$%&&&&&%&%%%&&&&%%%%%&%&%$$+++########$$$%&&&&%%$$$#######$$$%&&&&%%$$########$$%%&&&&%%$$####@###$$$%&&&&%%%$####@###$$%%&&&&%%%$$#######$$$%%&%$$$#####$$$%%&&&&&&&%$$############$$%&",
-"&%%$$$$#$$$#$$$$%%&&&%%$$$$$$%$%$$$$%%&&&&&&%%$$$$$$$$%%&%&&&&&&%%%$$$$$$$%%&%&&&&&&%%$$$$$$$$%%&&&&&&&%%%%$$$$$$$%%&&&&&&&&%%%$$$$$$$%%&&&&&&&&%&&&&&&&&&&&&%&&%%$$$$###$$$$$%%%&&&&&&&%$$$$$$$$$$%%&&&&&&&%%$$$$$$$$$%%&&&&&&&%%$$$$$$$$$%%&&&&&&&%%$$$$$$$$$%%&&&&&&&%%$$$#$$$$$%%&&&&%$$$$$$$$%%&&&&&&&&&%%%$$$$$$$$$$$$$%%&",
-"&&&%%%%%%$%%%%&&&%&&&%&%%%%%%&%&%&%%%&&&&&&&&&%%%%%%%%&&&&&&&&&&&%&%%%%%%%%&&&&&&&&&&&&%%$%%%%&&&&&&&&&&&%&%%%%%%%&&&&&&&&&&&%&%%%%%%%%%&&%&&&&&&&&&&&&&&&&&&&&&&&%$$$%%%$%%%%%&&&&&&&&&&&%%$%$%%%&&%&&&&&&&&%%%%$%%%%%&%&&&&&&&&%%%%%%%%%&&%&&&&&&&%&%%%%%%%%%&%&&&&&&%&%%%%%%$%%&&%&&&&&&%%%%%%%&&&&&&&&&&&&%&%%%%%%%%%%%%%&&&",
-"&&&&%%%%%%&&&&&&&&&&&&&&&&&&%&%%%%&%&&&&&&&&&&&&%%%&%&&&&&&&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%%%&&&&&&&&&&&&&&&&&&&%%%%%&%&&&&&&&&&&%%&%%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%&&&&&&&&&&&&&&&&&&&&%%%%%&%&&&&&&&&&&%%&%%%&%&&&&&&&&&&&&&&&&&&&&&&&&&",
-"&&&&%%%%%%%%&&&&&&&&&&&&&&&&%%%%%%%&&&&&&&&&&%%%%%%%&%&&&&&&&&&&&&%%&&%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%&%&&&&&&&&&&&&&&&%&%%%%%%%&%&&&&&&&%&%$%%%%%&&&&&&&&&&&%&&&&&&&&&&&&&&&&%%%$%%%%%%&&&&&&&&&&&&&&&%&%%%%%%%&&&&&&&&&&%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&",
-"&&%&%$$$$$%%%&&&&&&&&&&&&%%%%$$$$$%%%&&&&&&&&%$$$$$$%%%&&&&&&&&%%&%%$%$%%%%&&&&&&&&&&&%&%%&&%&&&&&&&&&&&&%$$####$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$$$$$$%&&&&&&&&&&&&&&&&%%%$$$$$%%&&&&&&&&%%$$$$$%%%&&&&&&&&&&%&&%%&%&&&&&&&&&&&%%$$$$%%&&&&&&&&&&&&&&&&%%%$$$$$%%&&&&&&%%%%$$$$$%%&&&&&&&&&&%&%&%&%%&&&&&&&",
-"&&&%$##++#$$%%&&&&&&&&&&&&%%###++$%%&&&&&&&%%$$$+++$$%&&&&&&&&&&%%$$$$$$#$%%%&&&&&&%%%%%%%%%%%%&&&&&&&&%%%$@+OOO#$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$##++$$$%&&&&&&&&&&&&%&&%%$#++##$%%&&&&&&%%$#@++$$%%&&&&&&&%%%%%%%&%%%%&%&&&&&%%$##++$$$%&&&&&&&&&&&&%&&%%$#++##$%%&&&&&&&$$#+@+$$%%&&&&&&&&%&%%%%%%%%&%&&&&",
-"&%%%$#@+O##$%%%&&&&&&&&%%%$$#@@++$$%%&&&&&&%%$#@+++#$$%&&&&&&%%%$$#@@#@#@#$$%%&&&%&%%%$%%%%%%%%%&&&&&&&&%$$@+ooO##$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$#@+O##$$%%&&&&&&&&&&&&%$$##O+@#$%%&&&&&&%$$#+++@#$%%%&&&%&%%%$%%%%%%%%%%&&&&&%%$#@OO##$$%&&&&&&&&&&&&&%$$##O+@#$%%&&&&%%%$##O++#$$%%&&&&&%&%%%$%%%%%$%%&&&&",
-"&&&$$#@OO@@#$%%&&&&&&&&&&$$#@++OO#$%&&&&&&%%$#@@OOO@#$%%%&&&&&%$$##@+@+@@@#$%%%&%&%%$$$#$$#$$$%&%&&&&&&&%$#++ooo@#$%&&&&&&&&%&%&%&&&%&%&%&&&&&&&&&&&&%&%&%&%&&&&&&%%##@OO@@#$%%%&&&&&&&&&%%%$$@@OO@##%&&&&&%%%$#@OOO@##$%&&&&&%%$$$$$$$$$$$%%&&&&&&$$#@OO@@#$%%&&&&&&&&&&%%%$##@OO@#$%%&&&&&%$#@@OOO@#$%%&&&&&&%%$$$#$$$$$$%%%&&",
-"&&&%$#@oooOO#$%%&&&&&&%%%$#@oXX+@$$%%&&&&&%$$#oXXXX++$$%&&&&&%%$@+O.....Xo@#$%&&%%%##@++###++$$%&&&&&&&%%$#OoOO+++$%%&%&&%&%%%%%%%%%%%%%&&&&&&&&%%%%%%%%%%%%&%&&&&%%$##oooOO#$%%%&&&&&&&&&%$#+OOoo@$$%&&&&&&%$#+OXXXXo#$$%&&%%%##@++###++##$%%&&&&&%$##oooOO#$%&&&&&&&&&&%%$#+OOoo@#$%%&&&%%$$#oXXXX+@$$%%&&&%%$$@@++###++$$&%&&",
-"&&%%$$#ooooO#$$%&&&&&%&%$#@+XXX++#$%&&&&%%%$#@XXXXXO+#$%%&&&&%$$++O.....XX@@$%%&&%$#@@OO@@@OO#$%%&&&&&%%$$@OoOOO++$$%%&&%&%%$%$%$%%$%$%$%%%&&&&%%%%$$$$$$%$%%%&&&&&%$##ooooO@#$%%%&&&&&&%%$##OOOXo@#$%%&&&&%$$#+oXXXoo@#$%%&&%$#@@OO@@@O+@##$%%&&&%%$$@OooOO#$$%&&&&&&&&%%$##+Oooo#$%%&&&&&%$#@XXXXXO+#$%&&&&&%$##@OO@@@OO$$%&&&",
-"&&%%$#@++ooo@#$%%&&&&%%$$#++oOO+#$$%%&&&&%$#@+OoOOOoO#$%%&&&&%$#+OoOOXXoOO@#$%%&&%$#@++O+++O+#$%%&&&&&&%$#@OOoXo@@$$&&&&%%$$#####$$#####$$%&%%%%$$#########$$%%&&&%%$#@++ooo@@#$%%&&&&%%$$$@@ooX++##$%&&&%%%$#@ooOoOoO+@#$%&%%$#@@OO+++OO+@#$%%&&&&%$$@++ooO@$$%&&&&&&&&%$$@+ooo+@#$%%&&&%%$#@+OoOOOO+$$%%&&&&%$#@++O+++++#$%%&&",
-"&%%$$#@++XXo@@$$%%&&&&$$#@+OooO+@#$%&&&&%%$@@+OoOOOoO@#$%&&&%%$#+OoOOoXXO+@#$%&&%$$@++OoOOOOO@$$%&&&&%%$##@OooXo+@#$%%&&%$$#@@@@@@@@@@@@#$$&&%$$$#@@+@++@@@@$$%&&%%$$#@++XXo++##$$%&&&%$$##++ooX++@##$%&&&%$##@ooOOOoO+@@$%&&$$#@+OO+++OO+@@$%%&&&%%$#@+OooO@#$%&&&&&&%%$$#@+oXo@@$$%&&&&&%%#@+ooOOOO+#$%&&&&%%$#@+OoOOOO+#$%&&&",
-"&%%$#@++OoXo+@#$$%&&%%$#@+OOooo+@#$$%%&&%$$@+OooOOOoo@#$%%&&%%$@OOoOooXooO@#$%%&%$#@++ooOOOOO@#$%%&&&%$$#@+ooXoX+@##%%%&%$#@++++@+@+++++@#$&%$$#@@+++++++++@##%&&%$$#@++OoXoO+@@#$$&%%$$#@@+OXoXO++@#$$&&%$$#@+oooOOoo++@#$&%$#@++ooOOOoO++@#$%&&&%%$#@+Oooo@#$%&&&&&&&%$#@++oXo@#$%%&&&&&%$#@+OoOOOO+#$%&&&&%%$#@+oOOO+O+#$%&&&",
-"%%$#Ooo .. .XX@#$%%&%$#OOo. ...XX@#$%&%&%$#Ooo. ...XX@#$%%%&%$$#ooo. . .XX@#$%%&%$#Ooo.. ..XX@#$%%&&%%$#Ooo.. ..XX@#$%%&$#@... .XXX.. ..oO#&%$#OOO.... ... .+#$&%%$#OOo.......oOO#$&&%$#OOo... ...ooO#$&%%$#Ooo.... ..ooO#$&$$#Ooo... ...ooO#$$&&%&$@@+ .. .@#$%%&&&&%%$#@+.. ..+@$$&&&&&%%$@+O. . .+@$%%%&&&%%$@++ .. .+@$$%%&&",
-"%%$#Ooo. . .XX@@$$%&%$#OoX. . .XX+##$%&&$$#ooo . .XX+@#$%&&&$$#ooX. . .XX+@#$%&%$#ooX . . XX+@#$%&&&%$#Ooo . . XX@@#$%&$#@... .XXX... .oo@&$#@Ooo. . .. ..+@$&%$#@Ooo. . ..ooo@#&%$#@Ooo. . . .ooO@#&%$#@Ooo . . . ooo@#&$#@Ooo . . .ooo@#$&&%%%#@+. . .+#$%%&&&&&%%@@+.. . @#$$&&&&&&%$#@+. . .@@#%%&&&&%%$@++. . .@@$$&%&&",
-"&$$#OOoOOOOO..O+@$%&%##OOoOOOOO..O+@$%%&$$#OOoOOOOO..O+@$%%&%%##+OOOOOOO..O+@$%&%##OOoOOOOO..O+@$%%&%%$#OooOOOOO..O+@$%&$#@Ooooo .oOOOO..@&$#+...oo+++oo +@#&%$#@.. ooO+OoX...+#&%$#+...oo+O+oo...+#&%$#@...oX+O+Xo...+@&$#+...oo+O+Xo ..+@$&&&&$$#@++...@@$%&&&&&&%%$#@++...+@$%%&&&&&%$$#@++...+#$%%&&&&&%%$#@++...@@$%%&&&",
-"%%##OooOoOOO..O++$$&%$@OOoOOOOO..O++$$&&%##OooOOOOO..O++$$%&%%$@+OoOOOOO..O++$$&%$@OOoOOOOO .O++$$%&%$$@OOoOOOOO..O++$$&$#@OooOo.. OOOOO .@&$@+...oO@@@OO. +@$&%$#+...XoO+Ooo ..+@&$$@+. .oo+O+oo ..+@&%$#+.. ooO+OoX. .+@&$@+. .XoO+Ooo...+##&&&%%$$#@+. .+#$$&&&&&&%%%$#@+. .@#$%%&&&&&&%$$#@+. .+##%&&&&&&%%$$#++. .+#$$&&&&",
-"%$$@OOoOOOOO..OO+#$&$##OoooOOOO..O++#$%&$##OOoOOOOO..OO+#$%&%%##OOOoOOOO..OO+#$&$##OOooOOOO..OO+#$%&%%##OOooOOOO..O++#$&$#+OOooO .oOOOO. @&$@+...++###@@OOO@#$&%##+. .oo+O+Xo...+@&$#@+.. ooO+Ooo ..+@&%##+...XoO+Ooo...+@&#@+.. ooO+OoX ..+@$&&&&&%$#@+...@@$%%&&&&&&%%$#@+...+@$$&&&&&&%%%$#@+...@@$%%&&&&&&&%$$@+...@@$%&&&&",
-"%$#@ooo.. . O++$$&$#@Ooo.. . OO+$$%&$#@OoX.. . O++$$%&%$#@Ooo. . O++$$&$#@ooo. .. O++$$%&%$#@ooo.. . OO+$$&#@+XXX. .. XXXXX .+&#@+...+@@##@@OO+@#$&$$@+. .XXXXXXX .+@&$$@+ ..XXXXXXX. .+@&%$@+ .XXXXXXX ..+@&$@+ . XXXXXXX. .+@$&&&&%%$##+. .+##%%&&&&&&%%$$@+...@@$%%&%&&&&%%$##+. .+##%%&&&&&&%%$##+. .+##%%&&&",
-"%$#@ooX. . .. OO+#$&$#@ooo. . .. OO+#$%&$#@ooo. . .. OO+#$%&%$#@oXo.. ... OO+#$&$#@ooo.. ... OO+#$%&%$#@ooo . .. .OO+#$&#@OXXX . .XXXXX .+&$@+. .OO++@+@++++@#&$#@+ . XXXXXXX. .+@&$#@+. XX.XXXX. .+@&$#@+.. XXXXXXX .+@&#@+. .XXXXXXX. .+@$&&&&&%$$@+...@@$$%%&&&&&&%$$#+. .+##$%%&&&&&&%$$@+...@@$$%%&&&&&&%$$@+...+@$$%%&&",
-"%$@+.. OO+OOXXoO+#$&$@+. .OO+O+XXo++#$%&$@+.. OO+O+XXOO+#$%&%$@+.. OO+OOXXoO+#$&$@+.. OO+OOXXoO+#$%&%$@+.. OO+O+XXo++#$&@oXXXX+O. oXooooo@&$#@ooX..oXoXX...OO$&$$@+ . XXoooooXoo+@&%#@+ . XXoXoXoXoo+@&$#@+ .XXoooooXoo+@&#@+ . XXooooXoXo+@#&&&%%%$#@+. .+@#$%%%&&&&%%$#@@...+@#$%%&&&&%%%$#@+. .+@#$%%&&&%%%%$#@+. .@@#$%%%&",
-"$$@+...OOO+OXXOO+#$&$@+. .OO+OOXXoO+@$%&$@+...OOO+O.XOO+#$%&$$@+...OOO+OXXOO+#$&$@+...OOO+OXXOO+#$%&$$@+...OO+OOXXoO+#$&#ooXoXO+. .XXoXoXo@&%$#oXo .XXXXX...oO#&%#@+. XXXXoXoXXo+@&%#@+. .XXXooooXXo+@&$$@+ . XXoXXoXoXo+@&$@+ .XXXoXoXoXo+@$&&&%%$##@+...+@##$%%&&&%%$#@@+ ..+@##$%%&&&%%$##@+...+@##$%%&&&%%$##@+...+@##$%%&",
-"%$@+.. +O+OOXXoOO@#&#@+...OO+O+XXoO+@#$&$@+. .OO+O+XXoOO@#%&$$@+. .O+O+OXXoOO@#&$@+. .O+O+OXXoOO@#%&%$@+.. +O+OOXXoOO@#&#oXoXoO+ . oXoooXo@&$$##@+oo...XoooO@#$&%$@+ . XXoooXooXo+@&%$@+ . XXoXoXoXoo+@&%$@@ .XXoooooXXo+@&$@@. XXooXooXoo+@$&%&%$$@@++ ..++@##$%&%%%$$#@++. .++@##$%&&%%$$@@++. .++@##$%&&%%$$@@++ . ++@##$$&",
-"$$@+...XXXXX .XXX@#&$@+.. XXX.X XXX@#$&#@+...XXXXX XXX@#$&$$@+...XXXXX XXX@#&#@+...XXXXX XXX@#$&$#@+...XXXXX XXX@#&@oo...... ...XXX..@&%%$##@Oo...XooOO@#$&$$#@XXX..XXXXX. .@@&%$#@XXX..XXXXX . @@&%$#@oXX. XXX... .@@&$#@XXX..XXXXX . @@$&&%$$+OooX. XXoO+$$&&%$$+OooX . XooO+$$&&%$$+OooX . XXoO+$$&&%$$+OooX. .XXoO+$%&",
-"$$@+. .XXX.X .XXX@#&$@+...XXXXX .XXX@#$&$@+.. XXX.X. XXX@#$&%$@+. .XXX.X .XXX@#&$@+. .XXX.X. XXX@#$&%$@+. .XXX.X. XXX@#&#oo..... . ..XXX..#&&%$$#@OO...XoOO+#$%&%$$@oXX .XXXXX . @#&%$$@oXX..XXXXX ..@@&%$$#ooX..XXX.. . @#&$##oXX. XXXXX . @#$&&%$#+OoXX. .XoooO#$&&%$#+OoXX. .XXoOO#$&&%$#+OoXX. .XoooO#$&&%$#+OoXX. .XoooO#$&",
-"%$$@OoOXoooXooooO@$&$#@OOooXoXoooooO@$$&$#@OOoooooXOoooO@$$&%$$@OOooXoooooooO@$&$#@OOooXooXOoooO@$$&%$$@OoooXooXOoooO@$&#@+oooooO+Oooooo+@#&&&%%$#++XXXoo+##$$%&%%$#@@+OooooXoO++@$&&%$#@@+ooooXooO++#$&%%$##@+Ooooooo++@@$&%$#@@+OooooXo+O@@$$&&%$$++OoooooooOO+#$&&%$#++OooooooooO+#$&&%$$++OoooooooOO+#$&&%$$++OoXoooooOO+#$&",
-"%$$#+OOoooooooooO#$&%$#+OOoooooOOooO#$$&%$#+OOoooooOOoOO#$%&%$$#+OOoooooOOoOO#$&%$#OOOoooooOOoOO#$$&%$$#+OOoooooOOoOO#$&$@@ooooo+++ooooO@#$&&&&%$#@+X.XoO@#$%&&&&%%$##@OOooooo+@@#$&%%%$##@ooooooo+@@#$&%%%$##@OOooooo+@@$$&%$$##@OOooooo+@@#$%&&%$$++OoXoooooO++#$&&%%$@+OoXoooooO++$$&&%$$++OoXoooooOO+$$&&%$$@+OoooooooOO+$$&",
-"&%$#++OOOoOOO+OO+#$&%$#++OOOOOO++OO+#$%&%$#++OOOoOO++OO+#$%&&%$#++OOOOoO++OO+#$&%$$++OOOoOO++OO+#$%&%%$#++OOOoOO++OO+#$&$##OOOOO@@@OOOOO##$&&&%%$#oo...++#$%&%&&&&%%$##+OOOOOO@@#$%&&&%%$##+OOOOOO@@#$%&&&%%$$#+OOoOOO@##$%&&%%$##++OoOOO@@#$%%&&%%$@@+OoOoOoOO+@$%&%&$$@@+OoOooOOO++$$&&%%$@@+OoOoOoO+++$%&&&$$@@+OoOoooO+++$%&",
-"&%%$$###@@@#@####$$&&%$$##@@@@#@###$$%%&&%$$##@@#@@#@###$$%&%&%$$##@@#@#@####$%&%%$$###@#@@#@###$%%&&%%$$###@#@#@####$$&%$$#############$$%&&&%%$#oo...+@$$%&&&&&&&%%%$$##@###$$$%%&&&%%%$$##@@####$$%%&&&%&%$$$#######$$%%&&&%%$$########$$%%&&&&%%$$##@#@@####$$%&&&%$$###@#@#@###$$%&&&%%$$##@#@@#@##$$%&&&%%$###@@##@###$$%&",
-"&&%%$$#$$$$#$#$$$%%&%%%$$$$$$#$$$$$$%%%&%%%$$$$$#$$$$$$$%%&&&%%%$$$$$#$#$$$$$%%&&%%$$$$$#$$$$$$$%%&&&&%%$$$$$#$#$$$$$%%&%%$$$#$$$$$$$$$$%%&&&&&%$$#@@@@##$%%&&&&&&&&&%$$$$$#$$$%%%&&&&&&%%$$$$$#$$$$%%&&&&&&%%%$$#$#$$$%%&&&&&&&%%$$#$#$$$$%%&&&&%&%%$$$$#$#$#$$$%&&&%&%%$$$$#$#$$$$$%&&&%&%$$$$$#$$$$$$$%%&&%&%%$$$$#$#$$$$$%%&",
-"&&&%&%%$%$%$%%%%%&&&&&%&%%$%%$%$%$%%%&&&&%&%%$%$%$$$%%%%&%&&&&%&%%%$%%%$%$%%%&&&&%&%%$$%$%$$%%%%%%&&&&&%%%$$%%%$%$%%%&&&&&%%%%$%%%%$%%%%%&%&&&&&%$$####$$%%&&&&&&&&&&&%%%$%%$%%%&&&&&&&&&&%%%$%$%%%&&&&&&&&&&%&%%%%$%%%&%&&&&&&&&%%%%$%$%%&&&%&&&&%%%%$$%$%$%$%%%%&&&&&%&%%$%$%$%$%%%&%&&&&&%%$$%$$$$%%%&&%&&&&%&%%$%$%$$$%%%&%&",
-"&&%%%%%%%%%%%%%%%%&&&&&&&&&%&%&%&%&&%&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&%&%%&%&&%&&&&&&&&&%%%%%%%&&&&&&&&&&&&&%&%%%%&%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&%&%&&&&&&&&&&&&&&&&&%&%%%%&%&&&&&&&&&%&%%%%&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
-"%%%%$$$#$$$$$$$%%%&&&&&&&%%%%%%%%%%%&&&&&&&%%%%%%%%&&&&&&&&&&&&&&&&%&%%%%%%%&&&&&&&&%%%$$$$$%%&&&&&&&&&&&%%%%%%%%%%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%&&&&&&&&&&&&&&&&&%%%%%%%&%&&&&&&&&%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&%%%%%%%&&&%%$$$$$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
-"%%$$###@@@#@@##$$$&&&&&%&%%$$$$#$$%%%%&&&%&%%$$$$%%%&&&&&&&&&&&&&&&%%%$$$$%%%&&&&&&&%%$$###$$$%%&&&&&&&&%%$$$#$$$$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%$$$$%%%&&&&&&&&&&&&&&%%$$$##$%%&&&&&&%&%$$$#$$%%%&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&%&%$$$$$%%&&&%$$#@@##$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
-"%$##@+@++@+@@+@##$%&&&&%%$$##@####$$%%&&&&%%$$###$$%%&&&&&&&&&&&&&%%$$###$$%%%&&&&&%%$##+@+##$%%&&&&&&&%%$$#@#@###$$%%%&&&&%&&%&&%&%%%&%&&&&&&&&&&&&%&%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%$$###$$%%%&&&&&&&&&&&%%$$####$%%%&&&&&%%$$#@###$%%&&&&&&&&&%&&%&&%%&%&%&&&&&&&&&&&%%$$####$%%%&$##@+@@##$%&&&&&&&&&&&&&&&%%%%%&%%%&%&&&",
-"$$+O.....XoX..oO+$$&&&%%$$#OOOO+OO##$%%&&%%##@oo@##$%%&&&&&&&&&&%&%$##@..@#$%%&&&&&%$$++...++$$%%&&&&&&%$$@+ooo++++@$%%&&&&%%%%%%%%%%%%%&&&&&&&&&%&%%%%%%%&&&&&&&&&&&&&&&&%&%%&&&&&&&&&%##@oo@##$%%&&&&&&&&&%&%$#++OoO#$%%&&&&%%$#@+oXo##$%&&&&&&&&&%%%%%%%%%%%%&&&&&&&&&&%%$##@..@#$%%&$#@. .Xo@$$%%&&&&&&&&&&%%%%%%%%%%%%%%%&&",
-"$#+O... .XXX..oOO#$&&%%$##@ooOoOoO@##%%&&%%$@@oX+@#$$%&&&&&&&&&&&%$$@@+..@#$%&&&&%%$$#+O...O+#$%%%&&&%%%$#+OoXoO++++$%%&&%%%$$$$$$$$$$$%%%&&&&&&&&%$$$$$$%%%&&&&&&&&&&&%%%%%%%%%&%&&&%%$#@@oX+@#$$%%&%&&&&&%%%$$#+OOoo@$$%&&%%%$$#+OXXX@#$$%%&&&&%%%$$$$$$$$$$$%%%%&&%&%%%%$$#@+..@##$%&$@@ ..XX@#$%%%&&&&&&&&&%%%$$$$$$$$$$$%%&",
-"$#+O... .XXX..oo+#$&&%$$#@+oXOoooo@##%%&&%%##+oX+++#$$%%&&&&&&&%%$$#+++..@@$$&&&&&%$#@+O. .OO@#$%&&&&&%$#@+OXXXOOO++$$%&&%%$$########$$$%%&&&&&&%%%$##@#$$%&&&&&&&&&&%%%%$%$$%$$%$%&&%%$#@+XX+++##$$%%&&%%%%$$$#@Ooooo@#$%%&%%$$#@OOXXX+@#$$%%&&&%$$$##########$$%&&&%%%%$$##+@+..+@#$%&$#+. .XX@@#$$%%%&&&&%%%$$$##########$$%&",
-"$#OOoooXX . XX++@#$&%$$#OOoXX...oX@#$%&&&%%$#@+OXXX@#$%%%&&&&&%%%$#@oXXOO@#$%%%&&%%##+XXOOOXX@@$%%%&&%%##@XXXXX..++@$%%&%%$#@@oo@@@Oo+@#%%%&&&&%&$$@+ooo#$%%%&&&&&&&%%$$$##$####$$$&%%$##@@+OXXo@##$$%%&%%$$###++XXX++@#$$%&%$#@@+XXoooXo@#$$%%&%%$#@++oO@@@..@#$$%&%%$$$###@XXXOO+@#$$&$#@OOoXX+@##$$$%%%&&%%$$##@..@@@oo++@#$&",
-"$#+OoooXX . XXO+@#$&%$#@oooXX. .Xo@#$$&&&%%$#@OOXXX+@#$%%&&&&&%%$#@+XXXO+@#$%&%&&%$#@+XXO+OXX+@#%%&&&%$#@+XXXX...+@@$%&&%%$@++oo+++oo++@$%&&&&&&%$$@+ooo@#$%&&&&&&%%%$$##@@@@@@@##$&%$$#@++OOXXX+@@##$%&%$$#@@@++XXX++@@#$$&$##+++XXooOXX@@#$%%&%$#@++Ooo+++..@@#$%&%$$#@#@@@XXXOO+@@@#&%$#+OoXX++@@@##$%%&&%$##@@+..@+@ooOO+@#&",
-"%#@+XXXoOOOO .ooo@$&$#+OoXXOOXoXXo+@$$%&&%$##@ooXXXoO@#$%%&&&%%$#@OoXXXXo@#$$%&&%%$#@+oXXXXXo@@#$%%&%%$##+oXXXXXX+@#$%%&%%##++oXoXXXo@@#$%%&&&&%%$#+O...@#$%%&&&&&%%$$@Oooooooooo++&$$+OooX+++++XooO+#$&$$++ooo+++++XXoO+#$&$+OoXXOO+O+XXoOO#$%&$$+OoXX++@++oXoOO#$&$$++ooXOO+++oOXXo++&$##+OoXXoXooo+@@$$%&$$@OoXooo+@+oooXoO+&",
-"$$@+XXXoOOOO. Xoo@#&$#+OXXXOOXXooo+##$%&&%$#@+oXXXXoo@@#$$%&%%$##+ooXXXoo+@#$$%&%$#@++XoXXXoX+@#$$%&%%$#@+oXXXXoo+@@$$%&%$#@++XoXXXoX+@#$$%&&&&%$$@OO. .@#$%%%&&%%%$#@@ooXXXooXXoO+&$#+OXXX+++@+XoooO#$&$#+OXXo++@++oXooO#$&#+OoXoO++++XXooO#$$&$#+OXoXO++++XXooO##&$#+OXoXOO+++OoXXoO+&%$#+OOX.oXoXo+++#$%&$#+OoXXoo+@+ooXXoO+&",
-"%$@+XXXOOOOO..oXo@#&$#OOoXXOOoXXXo+@#$$&%$#@@+ooXXXoX+@##$%&%$#@@+XoXXXXX+@@#$%&%$#@++XoXXXXo++@#$%&%$#@++XoXXXXX++@#$%&%$#@+OoXXXXXo++@#$%&%&%%$##Oo...@@#$%%%&&%$#@@+ooXXXXXXXXO+&$#+OoXXO+@+@XXooo@#&$#+OoXXO+@@+XXooo@#&#+OXXXO++++XXooo@$$&$#+OXXX++@++oXooo@$&$#+OXXXoo@@+oOXXXO+&%$#+OoXXoXXXXO++@#$&$#+OXXXoo+@+ooXXXOO&",
-"%$#@oXX.... . ..+#&$#+O.....XoX..XoO#$&$$#XXX..ooX..XXo@$$&$$#XXX..ooo..XXo#$$&$$@oXX..Xoo..XXo##$&$$@oXX..ooo..XXo@$$&$$@oXX..oXo..XXX##%&%%$$#@@++OO++@###%%&%$$#oXX..ooo..XXX+@&$#+O...O+@@+oXXXX@#&$#+O...OO@@@oXXXX@#&#+O...OO@+@XXXXX@#$&$#+O...OO@@+XXXXX@#&$$++...oo+++oo. .++&%$#+OO XXXXX. ++#&$$++...oo+++oo ..O@&",
-"$$#@ooo. . .. ...+@&$#+O.. ..XoX..ooo@$&$#@XXX..Xoo..XXX@#$&$#@XXX..oXo..XXX@#$&$#@XXX..XXX..XXX@#$&$#@XXX..oXo..XXX@#$&$#@XXX..XoX..XXX@#$&%$$#@@+++OO+++@@#$$&%$#@XXX..oXo. XXX@@&$#+O...OO@@@XXXXX@#&$#+O...OO@@@XXXXX@#&#+O...OO@@+oXXXX@#$&$#+O. .OO@@@oXXXX@#&%$#@ooXXX+++XXooo@#&%$$+OO..OO+++XXXXo@&%$#@ooXXX++OXXooo@#&",
-"%$@@ooX. . . . ..+@&$#+O.....XoX..Xoo@#&$#@XXX .ooo. XXX@#$&$#@XXX..ooo..XXX@#$&$@@XXX..ooo. XXX@#$&$#@XXX .ooo..XXX@#$&$@@XXX..ooX..XXX@#$&%$##+++OO+OO++++@#$&%$@@XXX .XoX..XXX+#&$#++...O+@@@oXXXX@#&$#+O...O+@@+oXXXX@#&#++...O+@@@oXXXX@#$&$#+O...OO@@@XXXXX@#&%$##oooXXOO+XXXoO@#&%$#+OO..++@++XXXoo@&%$$@OooXXO++XXXoO@#&",
-"$$@+. .oo++++O. .+@&$$#+XXXoo+++OoXXX@#&#@+...OO+++OO...+@$&#@+...OO+++OO ..+@$&$@+. .O+++++O...+@#&#@+...OO+++OO ..+@#&$@+. .OO+++OO ..+@#&$$OO .. . . ... .@#&$$@+. .OOooo.X ..+@&$$@+XXXOO@@@OoXXX@#&$$#+XXXOO@@@+oXXX@#&$@+XXXOO@@@OoXXX+#$&$$#+XXXO+@@@+oXXX+#&&%%$#++..OOO .+@#$%&%$#@OoXX+++++OoOXo@&&&%$#@+..OoO..++#$%&",
-"%$@+...oO++++O...+@&%$@+XX.oo+++OOXXX@#&#@+. .++@@@+O. .+@#&$@+. .O+@@@+O.. +@#&#@+...O+@@++O. .+@$&$@+. .++@@@+O...+@$&$@+.. ++@@@++...+@$&$$OO. . . . . .@#&%#@+...OOoooXX ..+@&%$#+XXXOO@@@+OXXX+#&%$@@XXXO+@@@OOXXX+#&$#+XXXO+@@@+OXXX@#$&%$@@XXXOO@@@OOXXX@#&&%%$$#+XX. .XX@@$$%&%$#+OO oOoOO. .O+#&&&%$$@@XX...XX@#$$%&",
-"$#@+...++@@@++...+@&$$#+XXXoO@@@OoXXX@#&#@+...++@@@++...+@$&#@+...+@@@@++...+@$&#@+ ..++@@@@+...+@$&#@+...++@@@@+ ..+@$&#++...++@@@++ ..+@$&%$#@@@+++++++++@@$$&$$++. .OoXXXOO...+@&$$#+XXXO+@@@OoXXX@#&$$#+XXXO+@@@+OXXX@@&$#+XXXO+@@@+oXXX@@$&$$#+XXXO+@@@+OXXX+#&&&&%$#@oX...Xo@#$%&&%$#+OO..oooOO. .O+#&&&&%$#@oX. .Xo@#$%&&",
-"$$@+...++@@@++. .+@&%$#+XXXOO@@@OOXXX+#&#@+...++@@@@+...+@#&#@+...++@@@@+...+@#&#@+...+@@@@++...+@#&#@+...++@@@++...+@#&$@+...+@@#@++...++$&%$$##@@++++++@###$%&$$@+...ooXXXOO...++&%$#@XXXoO@@@OOXXX+@&%$#+XXXoO@@@OOXXX+#&$#@XXXO+@@@+OXXX+#$&%$#+XXXO+@@@OOXXX+#&&&%%$#@OO .O+@$$%&&%$$+OO.. .. .XXX+@#&&&%%$#@OO. .O+@#$%%&",
-"$#@+. .+++@@++...+@&$##+XXXOO+@@OoXXX@@&$@+...++@@@++...+@$&#@+...++@@+++...+@$&$@+...++@@@++...+@$&#@+ ..++@@@++...+@$&#@+...++@@@++...+@$&&%%$$#@@++++@@#$$$%&$#@+...OoX.X++ ..+@&%$#+XXXOO+++OoXXX@@&%$#@XXXOO@+@OoXXX@@&$#+XXXOO+@+OoXXX@@#&%$#@XXXOO+@++oXXX@@&&%%%$#@OO. .++#$%&&&%$#+OO. . . .ooo@#$&&%%%$#@OO . ++#$%&&&",
-"%$@+...oo+++oX...+@&%#@+XXXoO+@+OOXXX+@&#@+...ooO++XX. .+##&$@+...oo+++oX...+#$&#@+.. ooO++oX. .+##&$@+...oo+++oX. .+#$&$@+.. oo+++oX...@@$&&%&%$$#Oo. .@#$$%&%&%$@+. .. OOOXX...+#&%$#@XXXoo+++oXXXX+@&%$#@XXXXo+O+oXXXX+@&$#@XXXXo+++oXXXX+##&%$#@XXXXo++OoXXXX+@&&&%$#@@oXXXX+@$$%%&&$$#+OoXXO+++++@##$%&&&%$#@@ooXXX@@$%%%&&",
-"$$#@...XXOOOoX...+#&$#@+XXXOO+++OO.XX+@&$#+. .XoO+Ooo...@#$&$#+...XXOOOoX...@#$&$#+...XoO+OXo...@#$&$#+...XXOOOXo...@#$&$#+...XX+++oX...@#$&&&%%%$#Oo. .@#$%&%&&$#@+.....OOOoX...@#&%%##XXXXoOOOXo.XX+@&%$$@XXXoX+OOXo.XX+@&$$#XXXoXOOOXo.XX+@#&%$$@XXXoXOO+Xo.XX+@&%%$$#@+ooXXX@@$%&&&&$#@+OoXXO+++@##$$%%&%%$$#@+oXXXX+##%%&&&",
-"%$#@Ooo.. . . oOO@#&$#oX . ++O. . .oO&$#@OOo.. . . oOO@$$&$#@Ooo... . .ooO@#%&$#@Ooo.. . . oOO@$$&$##Ooo... .. oOO@#$&$#@OOo.. ..ooO@$$&&&&%%$#@+ooO@#$%&&&&%$@+XXX ... ..oOO@#&%%$#++O........ .oO&&%$#++O........ .oO&%$#@+O........ oO#&&%$#@+O... .... .oO&&%$#ooX ...+#$%%&&&$#@XXX .Xoo@##$$%%&&&%$#ooX. ...+#$%&&&&",
-"&$$#+OO.. . ..oO+#$&$#OX. . .OOO. . oo&%$#OOO . . ..oOO#$%&%$#+OO.. . ..OO+#$$&%$#+OO .. ...OOO#$%&$$#+OO.. . ..oO+#$%&%$#OOO.. . . OO+#$%&&&&&%$$@+OOO#$%&%&&&$$#+XXX. . . Oo+#$&&%$$@++.. ... oo&%%$$@++.. . .. oo&%$##++. . .. . oo#&%%$$@@+.... .. oo&%$$@ooX.. ..@#$%%&&&$#+XXX .Xoo@#$%%&%&&%$$@ooX ....@#$$&&&&",
-"&%$#+OO... ...OO+#$&$#oo.. .+++. . .oO&%$$+OO.... ..O++#$%&%$#++O... ...OO+$$%&%$#++O.. . ..O++#$%&%$#+OO.. ....OO+#$%&%$$+OO.. . ..OO+#$%&&&&&%%$#@OO+#$$&&&&&%##+XXX ... ..O++#$&&%%$#@+....... . oO&&%%$#@+.. . ... .oO&&%$##+.... ... .oO#&&&%$#@@.. . ... .oO&&$$@ooX ....@#$%&&&&$#@XXX..Xoo#$$%&&&&&&$$@ooX. ...@#$%&&&&",
-"%%%$$#@@@@+@@@@#$$%&$##@@+@@@@@@@@+@@@#&%%$$#@@+@+@@@@#$$%%&%%$##@@@@@+@@@##$%%&%%$##@@@@+@@@@#$$%%&%%$$#@@@@@+@@@#$$%&&%%$$#@@@@+@@@@#$$%%&&&&&&%$$#$##$%%&&&&&$$++XXX+++@+@@@#$$%&&&%%$$#@@+@++@+@@@#&&&%%$$#@@@+@+@+@@@#&&%%$$#@@+@@+++@@@#$&&&%%$##@@@+@@++@@@#&%%$#oooooooO@#$%%&&&$#@OoXoooOO#$%%&&&&&%%$#oooooooO@$$%&&&&",
-"&&%%$$#####@###$$$%&%$$###@###########$&%%%$$####@####$$$&&&&%%$$###@#####$$%%&&&%%$$####@#@##$$$%&&%%%$$###@#####$$$%&&%%%$$####@####$$$&%&&&&&&&%%$$$%$&%&&&&&%$++ooo@@@#@###$$$&&&&%%%$$#######@###$&&&%%$$$######@####$&&&%%$$###@####@##$$&&&&%%$$###@#@##@##$&&$$#OOooOoO+#$%&&&&&%$#OOoooOOO#$%%&&&&&&$$#OOoooOOO#$%%&&&&",
-"&&&%%%$$$$$$$$$%%%&&&%$$$$$$$%$$$#$$$$%&&&%%%$$$$$$$$$%%&%&&&&%%%$$$$#$$$$%%%&&&&&%%%$$$$$$$$$%%%&&&&&%%%$$$$#$$$$%%%&&&&&%%%$$$$$$$$$%%&%&&&&&&&&&%%%%%&%&&&&&&%$$#######$$$$$%%&%&&&&&%$%$$$#$#$$$$$%&&&&&&%$$$#$#$$#$$$%&&&&%%%$$$$$$#$$$$%%&&&&&%%$$$$$$$$$$$$%&&%%$##@@#@##$$%&&&&&%$$#@#@@###$$&%&&&&&&%%$##@#@###$$%&&&&&",
-"&&&&%&%%$%$%%%%%&&&&&&%%%$%%%%%%%%$%%%%&&&&%&%%%$%$%%%%%&&&&&&&%&%%%%%$%%%%&%&&&&&&%&%%%$%%%%%%&%&&&&&&%&%%%%%%%%%%&&&&&&&%%&%%$%$$%%%%%&&&&&&&&&&&&&&&%&&&&&&&&&%$$$#$$$$%$%%%%%&&&&&&&&%&%%%%%%$%%%%%&&&&&&&&%%%%%$%%$%%%&&&&&%&%%$%$%%$%%%%&&&&&&&&%%%$%$$$%%%%%&&&%$$$$$#$$$$%&&&&&&%%$$$$#$#$$%%%&&&&&&&&%$$$$#$#$$%%&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&&&%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%$$$$$$$$$$$$%%&&&&&&&&&&&&&%%&%&&&&&&&%&%%%%%%%%%%%&&&&&&&&&&&%%%%%%%&&&&&&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%&&&&%&&&&&&%%$$$%%%%%&&%&&%&&&&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%&%&%%&%&%&&&&&&&&&&&&&&&&&&&&&&&&%%$#$#####$####$$%&&&&&&&&&&&%%%%%%%%&&&&&%%%$$$$$$$$%%%&&&&&&&&&%%%$$$%%&&&&&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&%%&%&%%&%&%&&&$$$###$$%%%%%&%&&&&&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&%$$#$$$%%%&&&&&&&&&&&&&&&&&&&&%&&&&&&&&%%%%%%%%%%%%%%%%%%%&&&&&&%&%%%&&&&&&&&&&&%$##@@@@@@@@@@@@#$&&&&&&&&&%&%%$$%%%%&&&%&%$$$#####$$$%%&&&&&&&&&%$$$##$$%%&&&&&&&&&&&&&%%%%%%%%%&&&&&&&%&%%%%%&%&&&&&&&&&&&&&&&%&&&&&&&&&&&%&%%%%%%&&%&&&&&&&&&&&%%%%$%%%%%%%%%&&&$#@@@@##$$$%$%%%%%&&&&&&&%&%&%&&&%&&&&&&",
-"&&&&&&&%&%%%&&&&&&&&%$$++@@#$%%&%&&&&&&&&&&&&&&&&%&&&&%&&&&&%%$$$$$$$#$#$$$$$$%&&&&&%%%%%%%&&&&&&&&&%$##...ooooooo...@#&&&&&&&&&%%$$#@#$$%&&&&%%$+++++++O+$$%%&&&&&&%%%$#OO+#$%%&&&&&&&&&&&&&%%$$$$$$%%&&&&&&&%%%%$%%%&&&&&&%&&%%&%&%&&&%%%%&%&&&%%%$%$%%%%%&%%&%&&&&&%%%$##$#$$$##$%%&&#oo...++##$##$$$$%%&&&&&%%%%%&%&%%%%%%&&",
-"&&&&&&&%%$%$%%%&&&&&$$#+O+++#$$%&&&&&%&&&&&%%%%%%%%%%&%&&&&&%$###@#@###@#@###$$&&&%&%$$$$$$%%&&&&&&&%$#@...XXoXoXX...+#&&&&%&%&%%$$#+@@#$$&&&&%$$++OOOO+OO#$$&&&&&%&%%$##Ooo##$%%&&&&&&&&&&%%%$######$$&&&&%%%%$$#$#$%%&%&&&&&%%%%%%%$%%%%%%%%%&%%$$#$##$$$$%%%%%%&&&&%%$##@#@###@##$%%&@oo...O+@@@@+###$$$&&%&%%$%$%%%%%$%$%%%&",
-"&&&&&%%%$$#$$%%%&&&&$#@OOO++@#$%%&&%%&%&&&%&%%$$$$$$$$%&%&&&$##@@@+@+++@+@+@@#$&&&&%$$###$$%%&&&&&&&%$#@...XXoXXXX...+@&&&%&%%%%$$#@++@##$%&&%%$#+OoooOOoo@$$%%&&&%%$$#@@ooo@##$$%%&&&&&&&&%%$#@@+@@##$&&&%%%$$#@#@##$%%&&&&%%%$$$$$$$#$#$#$$$%&%$##@@@#@###$#$$$$%&&%%$#@++@@@@@++#$$%&@oX...OO@+@+++@@@#$&&&%%$$#$$$%$$$#$$$%&",
-"&&&&&%%$#++@#$%%&&&&#@+.....+@#$%%&%%%%&&&%%$$##@####$$%%%&&$Oo. ..... .......#&&%%%$@+OOO#$%%&&&&&&%$@+...XXoooXo...+@&%%%%%%$$$@++ .+@#$%&&%%$#OOOXXoo..@#$%&&%%$$$##@+...+@##$$%&&&&&&&&%$## ....oO#&%%%%$$#+O...@#$$%&%&%$$##@@@@#@#@#@@#$$&$#@ooooo+++@@#@###$&&%$$#ooooo+OO..+##$&#oo...XooOo..oooOO@&%%%##@OO##$$#+++#$$&",
-"&&&&%%$##+++@$$%%&&&##+.. ..++#$%%%%$$$&&%%$$#@@@+@@@##%%%&&#+O .. . . . .....#&&&%$$+OooO#$%%&&&&&&$$@+. .XoXooXX . +@&%%$$$$$$#++O. ++@$$&&%$$#OOoXXoo..+#$%%&%$$#@@@++. .++@@##$&&&&&&&%%$#@. ..oO#&%%$$##@+O...+@$$%%%&$$#@@@@+@+@+@+++@#$&$@@oXoXoOOO++@+@@##&%$$#@oXXXoOOO..+@#$&#Oo...Xoooo oXooo+&&%$$@@oO@####+O+@#$&",
-"&&&&&%$@+..OO#$%&&&&$#@++. .oO#$$$$#@++&%%$#+OO.. .XX++#$%%&$@@+++++XXX++++@@#$&&&%$#@+ooo@#$%&&&&&&$#@@XXX.....XX .+@&$$@@@@@@#++O..O+@$$&&%$#@+OoXXOO..+@#$$&%$@+ooXoX. .oXooo+@&&&&&&&%$$@+ooXXo+@#&$$@@+++oOooo@@@##$%&$#Oo. . .. ......@#&#Oo . ....... . ..#&%$#@+oooXoOOO..++@$&#@@OOO..OOOoo...Xo+&&%$#@+..+@@@+...O+#&",
-"&&&&%$$@+..OO##%%%&&%$#++...oO@$$$$#@O+&%$##OOo. . XXO+#$$%&$##@@++OXXX+++@@##$&&&%$$+Oooo##%%&&&&&&$#@+XXX. ...XX. ++&$#+++++@+++O..O++#$&$$##@OOoXX+O..+@##$&$#+OoXXXo . XoXoo++&&&&&&%%$#@+oXoXo+@$&$#++++OooXXX+++@##$&$#Oo . . . ...@#&#oo. ....... ...@&$$#+OoooXXO+O .O++#&$#@+OO..OOOoX...Xo+&&%$#@+..+++@@...OO#&",
-"&&&&&%$@+ .oO@#$%&&&%$#@+ . oo@####@+OO&$$@@OOo ..XXoO@#$%&$#@@@+++X.X++@###$$&&&%$#@+Xoo@#%%%&&&&&#@++X.X... .XX . ++&$#+OOOO+++OO. OO+#$&$##@+OOOXXOO..++@@#&$#+OXXXoX. .XoXoX++&&&&&&%$$@@+oXoXo@@$&$#+OOOOoooXo++++@@#&$@oo. . .... . .@#&#Oo . .. . .. . ..#&$#@+OoooXoOOO..O++@&$#@OOO .OOOoo. .Xo@&&%$#@+..+++++...oO#&",
-"&&&&%%$#@oo..@#$%%&&%%$#+XXXOO@###@..O+&$#+O...+XXXXoXXO+#$&#+O++++OXXXOO@@@##$&%&&$$++ooo@#$%&&&&&&@@... .XXXooXX...oo&##..... . . ..XXX@#&@++oXXXX..oX .XooOO&##oo...Xo ..XXXXXoO&&&&&%%$#ooX... .+@$&#@... ... . .....+@&$#++...+++++OO...+@&$#@++O..XXX..++@@##&#@+... ...... ...+&$#@ooo. O++++...O+@&&%%$#@..oOoOoXXX..@&",
-"&&&&%%$##Oo..@#$$%&&%%$#@XXXOO@@#@@..O+&$@OO...+XX.ooXXOO@$&#OOOO++OXXXOO+@@@@#&&&%$$++Xoo@$$%&&&&&&@+.... XXoXXX.. .oo&$#.. . . ....XXX@#&@+OoXX.X .Xo. oXooO&##oo. .XX.. oXXXXXO&&&&&%$$@oXX.. ..+@$&#@.. . . . ...O+&$#@+...+++++OO...+@&$$#@++..XXX..++@##$&@@+... ...... ....O&$#@ooX..+++++...++#&&%%$#+..oOOoOXXX..#&",
-"&&&&%%$##++..+#%%%&&&%$#@ooo..+@@+O..+@&#@..ooo+OOoXXO+..@#&#OoooXoX .XXooooO+&&%&$#@+ooo@#$%%&&&&&#@ooXooXoooo..XXXOO&$#@@++O..OOOOOXXX+@&+OOXoXXX..Xo..XoooO&$@oo...++...O+XoooO&&&&&%%##oXXXXooo+@$&#@oXooo+O...oooO+@#&$#++...+@#@@+o. .@@&%$$##@++XXXoO@@#$$$&$##++oooXXOOO. OO+#&#@+... .+@@@@oXooO#&&&%$#@Oo...XXoOO@@#&",
-"&%%%%$$#@+O..+#$%&&&&%%$#Ooo..+@@OO..@#&#@..ooo+OOOXXOO..@#&@OoooXoX.. XXooooo+&&%&$$++Xoo@#$&&&&&&&$@OooXooXoXo..XXXOO&%$#@+++ .OOOOOXXX+@&++OoXXXX..Xo. ooooO&$@Oo.. O+ ..O+ooooO&&&&&%$$@ooXXXooO+@#&#@Xoooo+O. .ooOO+#$&%$@+...+@##@OO...+#&&%%$$#@+XXXoo@#$$%&&%$#@+ooXooO+O..OO+#&#++.... +@@@@ooXOO@&&%%%$@OO...X.OOO##$&",
-"&&%$$###@++ .+@$$%%&&&$$#Ooo..++++O..##&#@..oOO++OoXXOO..+@&#OoooooX. .XXooooo+&&&%$$++oXo@#$%%&&&&&$#OoooXoXooX..XXXO+&%%$$@++..OOOOOXXX+@&@+OooXXX..Xo..oooO+&$@oo...+O. .+Oooooo&&&&&&$$#oXX.Xooo+@#&#@oXoooO+. .oOO+@#$&$#@+...@@###+O. .@@&&%%%$$#+XXXoO@#$%&%&%$$#@oooXXOOO .O++#&#+O.....+@@#+ooooO#&&&%$##Oo...XXO++#$%&",
-"%%$$@@+oo@+XXO+#$%%&&&%$$#@+..oOO+@@@#$&@@. oOO@@++..OOXXO+&$##@@+++XXX+++@@###&&&%$$@+...@#$%%&&&&&$#@+... . . XXo+@&%%%$$@@XXoXo+++++oO&$##@@OOoXXOO. +++@#&$@Oo . Xo. .XXXXXoO&&%&%&%$#@++..XXXXo@&$@ooXXXO+XXXoo@@#$%&$#@+...+@##@+O...+@&&&&%%$#@oXooO@#$%&&&&%$#@oooXoOO+. ++@$&#OooXX..++@@@Ooooo@&&&%%##++ . XX+@@$$%&",
-"%$$@@++XX++XXo+#$%%&&&&%$$@@..ooO@@@$$%&#+..ooo@@++..OOXXO+&%$$###@+XXX+@@####$&&&%%#@+...+#$%&&&&&&$##+.. . .. ..XXX@#&&&%%$#@oXXoX++++@OO&$$##@OOoXXOO..++@#$&$@Oo...XX . XXXXXoo&%&%%%$$#@++..XXXXo@&$#OoXXX+O.XXoO+#$$%&$$++...@@##@+O. .+@&&&&&%$$#ooXoO@#$%&&&%%$$#oooXoOOO. +@@$&#Ooooo..+++@+OooXo@&&%$$#@++ ..XX+@#$%%&",
-"%$@@...OO@+oOXo@#$$&&&%%%$#@+O...+@#$$%&#@XXXoo@@@+XXooXXoO&%%%$$#@+XXX+@#$$$$%&&&%%$@@...+@$$%&&&&&%$#+XXXoO+O+OOXoo@#&&&%%%$#++.. ++@####&%%$$#+OOXXO+..OO+##&$#+OXXX++. .O+ooo++&%%%$$$$#@++XX...XX#&$#++. .oOoXXXX+##$%&$$@+...+@@#@OO...+#&&&&&&%$#++OXX@#$$%&&&%$#@OoooXOOO..O+@$&$##@++oXoOO@+OoOoo@&%$$#@+XX. ...++@$$%&",
-"$#@+...OO++OOXo+@#$&&&&&%$$#+O...+@@$%%&#@XXoXo+@@@oXoXXXOO&&&%%$##+XXX+@#$$%%%&&&&$$#+...+@#$%%&&&&%$#@XXXOoO+OOOXXo@$&&&&&$$#@+...O+@##$$&&%$$#+OoXX++..OOO#$&$#+OXXX+O...++OOO+@&%$$$###@@+OXX...XX@&$#@O...OOXoXXX+@#$$&$#++...++@@@OO. .+@&&&&&%%$$@+OXX+@#$%%&&&$$#ooXoo+OO .++#$&$$###+ooOoO++ooooo#&%##@++XX.. ..++@#$%&",
-"$#++...oO++ooXX+@##&&&&&&%$#@+...+@@#$%&##XXXoX@@++XXooXXOO&&&&%%$#@XXX++##%%&%&&&&%$#@. .+@#$$%%&&&%$#@XXXoOO++O+ooO#$&&&&&%%$@+. .O+@#$$%&&&%$#+OOXXO+..oOO@#&$$@+XXX++ .++O+++#&$##@@@+@+++X....XX@&%#@+...OOXoXXX+@@#$&%$@+...+++++Oo...@@&&&&&%&$$@@+XX+@#$$%&&%$$@OooXoOOO..++@$&%%$$#@ooooo++ooooO#&$#@++OXX .. .O+@##$&",
-"#@XX .XXXX..oo+@&&&&&&&$$#@oXoXX+##$&$#@+...X+@++O....+#&&&&&%$#+XXXoo@##%%&&&&%%$#@XXXoo@#$$%%&&%$#@oXX..XoXO+@@##$&&&&&%%$#@+OOoX@#$$%&&%%$$++oXX+@OO...+@&%$$#@@+++...+@@##$$&$OOooo... .XXXXX++@&%$#@XXX .oOoooXoo@#&$#@+. .XXXXXXX. .+@&&&&&&&%$$@@ooooO#$%&&&$$@OoXXXooo .++#$&%%%$$#+OXXXXX...+@#&#Oo. ..+++oo...@##&",
-"#@XX. ...XXXX..XoO+&&&&&&&%$$#OooXX++##&$$@@...X+++OO....@#&&&&%%$#@XXXXo+##%%&&&&%%$$@oXXXo+@#$%%&&&%$#ooo..Xoo++##$$%&&&&&%%%$#++OXo+@#$$&&%%$$++OXX+@OO...+@&%%$$$##@+...+@#$$$%&#Ooooo.... XXXXXO+#&%$#@oXX OOOooXXo@@&%$@+...XoXXXXX...+@&&&&&&&&%$#@oXooo@#$&&%%$@OooXXooo. ++#$&&%&%$$@+XXXXX...+@$&#Oo . ..+++Oo...+@#&",
-"#@..oooO+ooooXX..++&&&&&&&%%$##@+Oo..+@&%$##@@+o...+++O@@#$&&&&&%$#@XXXXX@@#%%%&&&&&%$#@@+..oO+#$%%&%%$#@+O. XXX@@#$$%%&&&&&&&%%$##@OOOO+#%&&&%%$@++oo@@#+OOOXX&&%%$$$#@+ ..+##$%%%&$+OoXXoXOOO++OOOoo#&%%$#@++Oo+@@@@ooooo&%$@@ooo++@+@+OXXX@#&&&&&&&%%%$#@+XooO+$&&&$$#OOoXXXoX..++#$&&&%%%$#@+OOooO++##$&#+OOoO+@@#@@@+OO..+&",
-"$@..OOO++ooXoXo .+@&&&&&&&%%%$$#@OO..++&&%$$#@@o...+@++##$$&&&&&%$##ooXXX@##%&%&&&&%%%$#@@..ooO#$%&&%%%$@@+..XXX@#$%%&&&&&&&&&%%%$##OOOO+$$&&&%%$#++OO###@OOOXo&&&&&%$$#@...@#$$%&%&#@+ooooo+++@@+++oo#&&%$$@@+OO@#@@@Ooooo&%$#@OOO@@#@@@+XXX@#&&&&&&&&%%$$@@oXoO+$&&&%$#+OoXXXoX..+@#$&&&&%%%$#++OooO+@#$%&$++OOO@##$$##+++..@&",
-"##..OO+@@OOoooo..+@&&&&&&&&&%%$$#+O..++&%&%$$##O...@#@@$$%%&&&&&&%$#oooXo@#$%%&&&&&&&%$$#@..oO+#$%%&&%%$#@+..XXo#$$%&&&&&&&&&&&&%%$#@+O++$%&&&&%$##@OO#$$$++Ooo&&&&%&%$#@...@#$%&&&&$@+Ooooo++@##@@+OO#&&%%$$#@++##$$#+OOOO&%%#@+OO##$$#@@ooo#$&&&&&&&&&%%$#@Ooo++$&&%&$$++OXXooo..+@#$&&&&&&%$$@++OO@@@$%%&$@@+++##$$$$$@@+..@&",
-"$##@######@#@@@@@##&&&&&&&&&%%%$$##@@++&&&&%%$$#@#@##$$$%%&&&&&&%%$$##@#@#$$%&&&&&&&&&%$$##@O++#$%&&&%%%$$#@@@@##$%%&&&&&&&&&&&%&%%$$####$%&&&&%%$$$#$$$$$#####&&&&&&%%$#++@#$%%&&&&$$###@###$#$$$###$$&&&&%%$$$$$$$$$#####&%%%$##$$$$$$$##@##$&&&&&&&&&%%%$#####$$&&&&%$$##@+@++OO@#$%&&&&&&%%$$$####$$$%%&%$$#$$$%%%%%$$###@#&",
-"$$$$#$$$$$$#$####$$&&&&&&&&&&&%%$$###+@&&&&&%%$$##$$$%%%%&&&&&&&&%%$$$##$$%%&&&&&&&&&&&%$$##++@$%%%&&&&%%$$####$$%%&&&&&&&&&&&&&&&%%$$$$$%%&&&&&%%%$$$%%%%$$#$$&&&&&%&%$$#@@#$%&&&&&%$$$#$#$$$%$$%$$$$%&&&&%%%$$$%%%%$$$#$$&&%%%%$$$%%&%$$$$$$%&&&&&&&&&&&%%$$$$$$%&&&%%%$$######O+#$%%&&&&&&&&%$$$$$$$%%&&&%$$$$$%%%&&%%%$$$$$&",
-"%%$$$%%%%$%$$$%$$$%&&&&&&&&&&&&&%%$$$$$&&&&&%&%$$$%%%%%&&&&&&&&&&&%%$$%$%%%%&&&&&&&&&&&&%%$$$#$$%&%&&&&%%%%$$$$$%%&&&&&&&&&&&&&&&&&%&%%%%&&&&&&&&%%%&%%&&%&%%%$&&&&&&%%%$$$$%%%%&&&&&%%%%$$%%%&&%&%%%%%&&&&&%&&&%&&%&%%%%%%&&&%%%%&%&%&&%%$%%%%&&&&&&&&&&&%&%$$%%%%&&&&%%%%$$$$#$#$$$%%&&&&&&&&&%%%$%%%&&&&&&&%&%%&&&&&&%%%$$%%&"
-};
+static char * matrix1_xpm[] = {
+"320 377 12 1",
+" c None",
+". c #000000",
+"+ c #030E03",
+"@ c #081E08",
+"# c #0B2A0B",
+"$ c #165016",
+"% c #1B641B",
+"& c #217A21",
+"* c #5AD25A",
+"= c #279027",
+"- c #81DD81",
+"; c #2BA02B",
+"..........................+.++++++............+.+.+.+.+..........++++@@@@@++++........++@@@@@++..........+.++++.....................................+.++..............+++@@@@@+++........++@@@@@++.............++++++..................................................................................................++@@@+++.",
+"..........................++++@@++++.........++++++++++.+........++@@#@###@@++.......++@@###@@+++........++++++++..................................++++++++...........++@##$##@++.....+.++@#####@+++...........+++@++++..............................................................................................++@@@#@@++.",
+"........................+.+@@###@@++......++++@@@@@@@@@+++.....+.@@#$%%%%%$##++....+.+@##&&%##@+++.....+++@@@@@+++..............+.+................++@@@@+++..........+@##**%$$@++......+@$$%**##@++.........+++@@#@@+++..............................................................................................+@#%&%#@+.",
+".........................+@###$$#@@++......++@@#@#@#@#@@+++.....++#$%%%&&&$$#@+....++@##$&==$$#@+++...+++@#####@@+...........+.+++++++.+........+.+@@####@++........++@@#$**%%$@++.....++@$%&**$#@@+........+.@@##$##@@+............++++.+..........................................................................++@#$&&&$@@.",
+".......................++@@$%**-%$@@+....+++@#$&&$$$&&$#@++....++@#&&=;=;;&%$@+..+.+@@$&=***&%$##++...++@#%&=&&#@@+..........+++@@@@@@++........+.+@#&&&$$@++.......++@#$%**%%$@+......++@$%%**%$#@++.....+.++@#$***$#@+++........++++@@++..........................................................................++@$$***$#@.",
+"........................+@#%&-**%%#@++....+@#$%&=%%%=&%$#@+....+@@#&=;=;;;&%%#@...+@##$==*--=&%$#@+.+++@##&===&$@@++........++@@#####@@++........+@#$&==%$@++......++@#%&&;=%#@@++......++@$$;;&&%#@++....++@@#$$***%##@@++.......++@#@@@+++........................................................................+@#$%***$#@.",
+"........................+@#%%*-*&%#@++..+++@$$%==%%%==%$#@@..+.+@#$===;;;;=%%#@.++@@#$%==-**==%$#@+..+@@#$===;=$#@++......+++@##$$$$$#@@++.....+++@#$===%$#@++......@@#%&=;=$#@+.+......+@@#$=;&&%#@++....+@@##$%***%$$#@@+......++@##$##@++........................................................................+@#$%***$#@.",
+"........................@@#&=---=&#@++...+@@%%&*-=&&--&%%@+...+@@#$==;=;;;&&%#@..+@#&==;;;;;-*&%$@@.++@$%%====&&%#@++....+.+@#$==-*-=&#@+.......+@#%&*-*%%@++.......@@$=====$#@++........+@#$&=;==$@@++.+++@%%&%&*-*&%&%$@+....+.+@@$***$@@+.......................................................................+@@#&===&$@+.",
+".......................++@$==*-*==$@++...+@@%%&-*&&&*-&%$@@..++@#$$==;=;;;=&%$@.+@#$&=;;;;;;-*&%$@@.++@$%&=====&%#@++....++@@#$=;--*;=#@@+......+@#%%*-*&%@@+.....++@#$==;=&$@@+.........+@@$&==;=$#@....+@@%%&&&***&%&&%#@......+@#$***$#@++......................................................................+@#$==;==##+.",
+"........................@##&&-*-=&##++...+@#%&&**&&&-*%%$@+..+@@%%=;;*****;;=$#.+@@$;;;&=%%%==%%$@+.+@@$%&======&$@@++....+@$%&;;%%%=&$@++.....+@@#=;==&$#@++.......@#$=;==&#@+...........@@#&====$#@++.++@#%&=**---**&&%#@.....+@@#%***$$@++...........................+.+.++.++.+.+.............................++@#$**%%$#@+.",
+".......................++@$&=-*-&&$@@....++@%%&**&&&*-%$$@+..+@#%&=;;*-***;;;$#.+@#$;;;=&&%&&=%%$@+.++@$%&=======$#@++...++@$%&;;&%%&&#@@+......@@$==&&%$@@+......++@#$***%$#@++..........+@#$%***$#@++..+@@%&&****-**=&%@@...+++@#$%*-*%$#@+++........................+++++++++++++++............................+@#$$**&%$@@+.",
+"........................@@#&&--*=&$@++..++@@%%&**&%&**%$#@+..+@#%&=;;**-**;;=$#.+@@$;;;&=%&%=&%$$@@.+@@$%%=======$#@@++..++#$%&;;%%%&%#@+++....++@#&=&%%#@+.+......+@#%***%$@@+..........+.@#$$-**%#@+...+@@%%=***-***&&%@@..+++@@#$%***%$##@@+......................+++@@#@@#@#@#@@@++.........................+++@#$%**%$#@+..",
+".......................++@$&=*--=&##++...+@@$%%&%%%%&&$#@++..+@#%&=--;;;-*;;=$#.+@@$==;**;=;&&%$#@+..+@@$$===;==&&%$@++..++@$%&**%%%$$#@@++....++@#$%###@@+.......++@#%***$$@++............+@$$***$$@++..++@#$%&&-*-&&%$#@+..+@@#$$%%*-*%%$##@@......................+@@###$$#$#$#$##@@.........................++@#%&&;=$$@@+..",
+"........................@@#&=*-*=&#@+.....+@$$$%%#$$&%#@@+..+.@#%&=**;;;*-=;=$@.++@#&==**=;=&&%$##@..++@#$===;===&%$@++.+.@@$%%**%%%$$$#@@+.....++@$$#@@++.........@@#$*-*%$@@............++##%*-*%#@+....@@#$%&&*-*&&%$#@+.+@@#$$%%%*-*%%%%$#@.....................+@@#$$$%$%$%$%$$$#@.........................++##&&&;=$#@+...",
+"........................+@#$%***%$#@++....++@@@#@#@@#@@@++..++@#$%%**&=&**%%$#@.++@#$$%==;;;**==%#@..+@@#$==;;;==%$#@++.+++@$%%-*;;;%%%%%@@......+++@@+++..........+##%***$#@@............++@$$***%##++...+@#$%*-&&&**%%$@+.+@#$--*---*--*-*-$#.....................+@#$--*-*--*-*--*$#.........................+@#$;;;&&#@@++..",
+"........................+@##%*-*%$#@+......++@@@@@@@@@++.....+@#$%&**&&&-*%%$#@..+@@#$%&&;;;**==&#@.+.@@#$=;;*;==%$#@++..+@#$%&--;;;&%&&%@@.....+.+++++..+........++##$***%##++...........+@@#%***%#@+...++@#$%**&&&-*%$$@+.+@$$*--*-*--*---*%#.........++++++......+@$$*--*--*---*--%#..........+.+.+.........+@#$&;;;$$@+++...",
+".........................+@$$***$#@++........+..+.+.+++..+..+@@#$%%*-&&&**%%$#@..+@@#$%&&;;;**===$#.+.@@#$==;;;;=%$$#@...+@#$%&**;*;&&=&%#@...........+...........++@$$*-*%##@+...........+@#$%***%#@@....+@#$%**&&%**%%#@+.+@#$-*---*-*-**--$#.......+++@@@@+++....+@#$-*--*--**--*-$#.........++++++.......+.@@#%&;;;$#@+.....",
+"........................+@@#$***%#@+...........+.+.+........+@#$*---*-*---;;=#@.++@#%&=%&%&%==;;;$#..+@$%&&&*;;;;==&#@+.++@#&&=;;***-*===#@........+..............++@#$***%$@@++.........+.@##%-**$#@++..++@#$$&&$$%&&$$#@+.+@@#$%$%%**-%%%$$#@.......++@@#@@@+++....@@#$$$$%$$%%$%$$#@.......++++@@@+++......+@#$=;=&&$#@++....",
+".........................+@#$***$#@++.......................+@#%-*-*--*-*-;;=#@.++@#&&&&&%&%&=;;;##.+++$$%&&;;;;;==&##+.+@#$&====***--;==##.......................++@#$=;;&&#@++.........++@#&&;;=%#@++...++#$$%%###%%##@++..+@@##$%%-**%%$$##@.....+++@#%&&$#@+.....+@@##$#$$#$#####@@.......++@@#@@@++......+@#$=;&&&#@++.....",
+".........................++##$%$#@@+........................+@##&&=;;;;;==%$##@.+@#$=;;**=;;**;==$@..++@#$$%;;;&&==&$@+.++#$;;;=====**&%%#@........................+@#$==;=&##++..........@@#&&;;=$#@+.....+@@@@@##@#@@@@+...++@@##$%*-*%$##@++......+@##&&&%$@@.+...++@@@@@@#@@###@@@+......++@$$&&%#@++...++@@#$=;&&%#@+......",
+".........................++@#$$$#@@..........................+@#&&&;;;=;==%$#@+.+@##;;;*-=;;**==&#@..+++@##$==;%&===##+.+@#$;;;=&&&=*-&%%$@.......................+++#$&=&==$#@++.......++@#$=;&=%$@++......++@@@+++@@+++......++@#$$***%$#@++......+@@#$===%$@@+......++@+@+@+@+++++.+......+@@$%&&&#@@+...++@$$&**$$#@+++.....",
+"..........................@@#$$$#@++........................+@@#%&&*;=;;==$#@++..+@#&&===*-*==%$#@@....+@@$$=;=%&==&$@+.+@@$;;;&=&=&-*&&%$@.........................+@#%&=;;$#@++.....+.++@#$=;=&%#@++.....+.+.++++.+++.........+@@$$-**$#@++.......+@#%%***&%@@+.........+.+.+...++.........+@#$%==&$#++...+@#$%%**$$@@+.......",
+".........................++##***##++.........................+@#%&&;;;;;&&$#@++.++@#%%&&=*--=&$##@+.....+@##;;;;;==&##+.+@@$&;=-*--*;;*-*$#........................++@#%&&;=%$#+++......+@#$%=;&&%#@++............+...+..+.......+@#$***$#@++......++@#%&--*%%@+++...........................+@#&&**-##@++..+@@&&===$#@++.......",
+"..........................+@#***#@++........................++@#$&&;;;;;&&$@@+....+@@@@#$***%#@++.+.....++@#==;====&#@+..+@#&==--*--;=*--$#..........................+@#$%**%%$@+......++@#%&**%$#@+.............................+@@$***$#@+.......++@#===&&$#@++..........................+..@@%&-**$@++...+@#&====$#@+........",
+".........................++@##$#@@++.........................+@#$&&;;;=;=&#@++..+++.+@@#$===$#@++.......++@##$$$$###@++.++@@#$$$$%$$$%$$##@.........................++@@#$**%%$@++.....++@$%%**$$@@++............................++@##$##@++.+.....++##===&&##@+.............................++@#$$$##@++...+@#&===&#@++........",
+"..........................++@@@@@++.........................+.@@$%&;;;==&&#@+......+.+@##=&&$#@+.........++@@#@###@@+++...+@@@#####$#####@@...........................+@#$**%$$@+.......+@$$%**$#@++..............................+@@@#@@++........++@#==&%%#@++..............................+@@@###@@+....@@#%&&%$#@+.........",
+"...........................++@@@++............................+@$$%=;===&%#@++........+@#&&%#@+++.........+++@@@+@+@+......+@@@@#@@@#@@@@++..........................+++@##$##@+++......++@#####@++................................++@@+@+..........@@#$%$##@++................................++@@@+++.....+@#$%%$#@@++........",
+"............................+.+.+............................++@@###$$$###@++........+++@##@@@..............++.++++..........+++++@++@++++.............................+@@@@@@+++........++@@#@@++..................................+.++..+.........+@@$$#@@+++..............................+..+.++++......++#$$%##@+..........",
+"..............................+................................++@@#@##@@@@+...........++@@@+++..............+................+++.+..+..................................++@@+++.........++++++++++..................................................++@##@@++...............................................++@@@#@@++..........",
+".....++++++++++...........+++++++............++++++@++++........+.++++@++++++...........+++++++++.......+++++@@++++++..........+++++++++++....+++++@+@+@+@+++.........++++++++++.........+++++++++.+............................................................................................................+.+.+.+.........",
+"...+.++@@#@@@@++++.....++++@@@@@++++.......+++@@@@#@@@@+++......++@@@@@#@@+++..........+.+@@@@@+++....+++@@@#@#@#@@@+++.........+@@@@#@@+++.+++@@@@#@#@#@@@@+++.....+++@@@@@@@++++......+.+@@@@@@@++++...........................................................................................................+++++++++.+....",
+"...+++@@##$##@@@++....++@@@#####@@.+.......++@@##$$###@@+++..++++@@#$$$###@@@++........++@@###@@++..+.+@@##$$#$#$##@@+......+++@@@###$##@@+.++@##$#$$$#$$###@++...+++@@##$$###@@+++.....++@@##$##@@@++........................................................................................................++++@@@@@@@@++....",
+"..++@@#$%=&=%$#@@++..++@@#$%%&&&#@++.....++@@##&%===&%##@@+....@@##%&&==&&##@@+......++@@#%%%%%#@++..+@#$$&&=&==&&%%@@+.....++@@#$$==&&%$@+.+@@%%&==&=&==&%%#@+..+++@##$%&&=%$##@++...++@@#$&&&&%$#@@++......................................................+..............................+.+..............+.+@@###$###@@+++..",
+"..+@@#$%%===%%$#@@+..+@##$$&&==&$#+++....++@#$$&=====&$$#@+.+++@#$$&&===&&$$#@@.......+@#$%%&&%$@@+.++@#$%=======&&%#@+.....+@##$%%====&$#@.+@#&&&=======&&%#@+..++@#$$%&===%%$$#@@....+@#$$===&&%$##@+...................................................+.+++++.+......................++.+++++............++@@#$$%$%$$##@++..",
+"++@@$%&**;;;**%%$@+.+@@#=;;*-***$#@+....++@#%&=**;;;**=&&#@..+@#&&=**;;;**=&%#@......+@#$%-*-**$#@+.++@$%&**;;;;;=&&#@+...++@@$%*****;;=$#@.@@$=;;;;;;;;;;;;$#@.++@#%&=**;;;**=&%#@..++@#$**=;;;;;;;#@+..........+.....................+.................++++@+@+++.....................+.++@+@+++.+.........++#$%*******%$#@++.",
+".+@#%%&**;;;**&&%#@..+@$=;;-*--*%#@++...++@#=&=**;;;**==&#@..+@#&==*-;;;-*==&#@......+@#%%--***$#@+.+@#%%&*-;;;;;==%#@+...++@#%%--***;==$#@.@@$=;;;;;;;;;;;;##@.++@$&==**;;;**==&#@..++@#$**;;;;;;;;$#@........+.++++.+..............+.++++..........+.+++@@@###@@+....++++++++++++++...++@@###@@@+++........+@#$%*--*-**%%$@@+.",
+"+@@#%&&**;;;**&&%#@.+@@#==;--*-*$$@+....+@@$&==-*;;;*-===$@.++@#&==**;;;**===$#...+.+@@#%&*--**%#@+.+@@%&&**;;;;;=&&#@+...+@#$%&*--**;;=$#+.+@#=;;;;;;;;*;;;$@@.+@@$&==**;;;**==&$#.++@#$%**;;;;;;;;$#@......+++@@+@++............+.++@@+@+++.......+.++@@##$$#$#@@....+++@+@+@@+@++++..+@###$$$##@@++++....+@@#%%**-*-**%%%#@+.",
+"+@#$;;;=&%%%=&;;;$#..+@##$%%%***$$@@+....@@#;;;&&%%%&=;;;$#.++@#%==%%%%%==;;;##.....+@#$=;===**$#@@.+@#%&&;;&%%%&%%##@+.+.+@#$**===%%%$##@+.+@##$$$$%%%==;==$#+.+@#$;;;=&%%&==;;;$@.++@$%&;;%%%%&***%$@......++@@##@@@++..........+.+@@##@@+++......++@@##$%&***%$@..+++@@@#@#@#@#@@@@+.+@#***==$$##@@++.+...@@$%&;;%%%;;;;=$@@.",
+".@#$;;;&&%$%&=;;;$#..++@##$$%*-*%#@+.....@@#==;%%$$%&=;;;$#..+@@%%&%%$%%&=;;;$#...+++@#$=;;=;**%#@+.+@#$&=;;%&%&%%$$#@+..+@#$%**===%%%$$@@+.++@@####$$%==;==#@@.+@@$;;;==%%%&=;;;$#.+@@%%&;;%%%%%***%$#.....++@##$$##@++...........@@###$$#@++..+.++@@@#$$%&&***%%@.+.@@#$#$$$$$$$$##@+.+@#***;=%%$$#@@++...++#$%&;;%%%=;;;;$#@.",
+"+@#$;;;&&$$$%&;;;$#...++@@#$%***%##++....+@@#$#$$$$%==;;;$#..++@###$$$%%**;==$#....+@#$%**&&&**%#@+.++#%%&*-*-***=&%#@+.++@$%&**=====%$$@@+.+.++@@@##$%;;&&%#@@.+@#$=;===%%%==;==$#.+@@%%&;;%%$%%***%$@.....+@@%%***##+++........++@@%&***##@+..+.+@@#%%=;;;;&%%$@@.++@#&&=&&===&&=&&#@.+@@#$$==***&%##@@++.++@$$%&=%%%&&;;;$#@.",
+"+@#$;;;&%$$$%&;;;$#.....+@#$$-**%#@@....+++@@@####$$=;;;;$#...++@@##$$%%**;==$@...+@@#%%**&&&**$$@@.+@#$&=**-*--*=&&#@+..@#$%&**===;=%%$#@+..++++++@#$$;;&&%#@+.++##==;=;%&%;=;==$@.+@@%&=;;%%$%%***%$#.....+@#%&***$#@+..........+@#%&***$@@++.++@@##%&;;;;;&%%#@+.+@@#&============#@..@@#$%==--*=&$$#@@+.++@#$%%&%$%&=;;;$#@.",
+"+@#%;;;=%##$%&;;;$#....+++@$%***$$@++....+++@@@@#$$%==;;=#@..++++@@#$%%%**;==##...+@#$%%**&&&**%##+.++@$%&***-***==&$#@.++#%%&**=====&%%##+.....+++@@$%;;&%$@@..++@$==;==&%%==;==##.+@#$%&;;%%%%%***%$#.....+@#%&***$#@+..........+@#%&***$#@.+.+@@$$$&&;;;;;%$$@@+.+@#$==;=;=;;=;===$#..++@##==**-=&%$$##@.++@#$$%%%$%&&;;;$#+.",
+"+@#%;;;&%$#$%&;;;%#......@@#$*-*%#@@.......+++@##%&&**&&%#@.....+@@%%*---*&&%$@..++@#&====&&&**%$#@.++@$$%=;&%&=;***$#@.+@@%&&*****;;***$#@.......+@#$%**%$#@++..@##%%&-*-*--*&&%$@..@@%%=**%%%==-*-%$@....++@#%&=;=$@@++........+.@#%&=;=$#@+..@@#==;**===%$##@@+..+@#%=;;;;;;;;;;;=$#...++@##$%%&;;***%$@...+@@##$%&&**;=&$@@.",
+"+@#$;;;&%$#$%&;;;$#......+@$$***%#@@........++@#$%&&**%%$#@....++@@%%--***&%%$#.++@#$&==;=&%&**%$#@.++@##%==%%%==***$#@.+@#%&&*-***;;***$#@.....++@@$$%**$$@@+..++#$%&&**-****&%%$@..+@$%&**%%&==---%$#.....++@$%==&##+.+........+++@$%==&#@++..@#$=;;*-==&$$#@@++..+@#$;;;;;;;;;;;;;$#...+++@#$%%%;;***&%#...++@@$$&&&**==&#@+.",
+"+@#%;;;&%##$%=;;;%#.....+@@#%*-*$$@++......++@#%%-*-&&%#@@+...+.+@@#$%%&=;;;=$#..+@#$*-*;;;;=-*&&%#..++@###$#$$%%***%$#.+@@%&&**&&&&&***%$@......+@#%&=;;$#@++..+@@$;;;=;&&&;;;;;$#.++@#$$;;-*-;;***%$@.....++@@####@@++...........+@@#####@+...@#$;;;**=&&$##@++...+@#%&====;=;==;==$#....++@@#$%&;;-**&%#....++@#$***=&%$#@@+.",
+"+@#$;;;&&$#$%&;;;$#......@@$$***%#@@+......+@@#%%*-*&&##@++...++@@@##$%%=;;;;$#..+@#$***;;=;;**=&%#..++@@#####$$%***%$#.+@#%%=*-%%&%%***%$#......+@#%&&;=$#@++..+@#$;;;;=&%&=;;;;$#.+.+@#$=;--*;;***%$#.....+++@@##@@+............+.+@@#@@@+++..@#$;;;**=&&%$#@++.+.+@$$===;=;=;==;==$#....++@##$%%;;*-*&%#....++@#$*-*&%$##@++.",
+"+@#%;;;&%$$$%=;;;$#.....++##%***%$@+++....++@#$&&*-*&%$@@++..++@@@###$$%=;;;;$#.++@$$*-*;;=;=-*=&&#.++@@#@##@#$$%***%$@.+@@%&&**&%%%%***%$@.....++@$&=&;=$#@+...+@#$;;;;=&%%=;;;;$#..++@#$==*--;;***%$@.......++@@@@+++............+++@@@@++....@#$=;;**=&&$$#@@++..+@#%====;=;;;=;;=$#...++@@#$$%%;;***&%@.....@@#$***&%#@@+...",
+"+@#$;;;=%$$$%&;;;%#...+++@#$%*-*%$#@++..+++@$$%**===%$#@@+...+@@%%%##$$%&=;;;$#.++@$%=;;;;;;;-*==&$.+@@$%%####$%%-*-%$#.+@#$&&**%%%%%*-*%$#.....+@@$&=;==##+++..+@#$;;;=&%%%&=;;;$#..+++@#$%%&&&&***%$@......+++@@@@+++............+++@@@@@+....+@#$$%&&***;;%$#@@+.+@#$=;;;;;;;;;;=;$#.+++@##&&*-*;=%%$$#@.....+@#$===%$#@++...",
+"+@#$;;;&&%$%&&;;;$#..+.+@@#$%***%$#@@++..+@#$%%-*==&%$#@@++.++@#%%&$$$$%&=;;;$#..+@#$==;;;*;;*-==&$.+@#%&%%$$$$%&***%$@..@@%%&-*%%%%%***%$@.....+@#$====&$@++...+@#$;;;=&%%%&=;;;$#...+@@#$%%%&&&***$#@.....+.@@@@##@+++...........+@@@##@@+++..++@##$%&***;;%$$#@+.+@#$=;=;;;=;=;;==$#..+@##$&=**-==%$#@@@.....+@#$===$#@+.....",
+"+@#$;;;=&%%%&&;;;##..++@@#$%%-*-%%$#@@+.++@#%%&*-===%%$##@+.+@##&&&%$%$%&=;;;$#..+@#$==;;;;;***;=&$.+@#%&&%%$%%%&*-*%$@.++@$%&**%%%%&***%$@.....+@#$=;==&#@+....+@#$;;;=&&%%==;;;$#...+@##$%%&&&&***$#@.....++@#$$###@++.........+++@##$$##@++...++@@#%%***;;&%$$#@.+@#$&======;=====$#.+@@$$%&=*-*==##@@++.....+@#$===$#@++....",
+".+@#%&&**===**&&%#@..+@@%%&==-**==&%%@@.+@@$*****;====&%$@@.+@#$***;;===**;==$@...+@##$$&&;;=-*==&$.+@#&==**===**;;;$#@..+@##%*-;;;;;-**%$@.....+@#$***%$#@++...+@@$==;**===**;==$@..++@#$=====**;==$#@......@@%%***#@+++.........+@#%&***#@++....++@@#$$$%==***%$@.++@##$$$$$$$$$$$#@@.+@#***;;%%%$##@@++.....++@@$==&$#@+.....",
+"++@@%%&**=;=**&%%#@..+@#%&&==*--===&%#@.+@#$***-*;;===&&%#@.+@#$***;;==;**==&#@...++@##$%&=;;**=&&#.+@#&==**===-*;;;##@.+++@#$**;*;;;***$#@.....+@#$***$##++.....@@#&==**;==**==&#@.++@#$$===;=**==&#@+....++@#%&***$#@+........++@##&&***$@@+....+.+@@@#$$&=***%$@..++@@##########@@@+.+@#***;;%$$##@++........+@@$&=&$@@++....",
+".++@##$&&;;;=&$$@@+.++@#&&=;;;;;;;=&&#@.+@#$=;;;;;;;;;==&#@.++##%&%;;;;;;=%$#@@....++@##%&=;;;;==&#.++@#$%==;;;=;%$$#@+...+@##%%=;=;;&&%$#@.....+@#$===$#@+......+@##$%==;;;;=%$#@@..+@$$%;;;;;&&%$#@@+.....+@@%&;;=$#@++........+@#$**=&&$@++........+@@@##$$$$##@...++++@@@@@@@@@@@++.+@##$$$$##@@@++.........++##&==#@@......",
+".+.+@##%&=;=&&$#@@+..+@#&&==;;=;;==&&@@.+@#%==;=;;;;;==&%#@.++@#$%%;=;=;==$##@+....+.+@#%%;=;=;==&#..+@@#$==;;;==$$@@@...+.+@#$%===;=%%$#@+.....++@#==&$@@++......+@##$==;;===$##@+..+@#$%==;=;&%###@++.....+@@%%===$@@.........++@#$**=&%##++.......+.++@@@@###@@+....+++.+++++++.++.+.++@#$###@@@++.+.........++@#&=&#@@......",
+"..++@@#$%===%%#@++...+@@%&&===;====&%#@.+@##==========&&%@@...@@$$%=====&&##@+......+++@$%=====&&%#..++@##&=====&##@@.+....++@#$&====%$$@++......@@#%&&#@++......+.+@##&=====&##@++..++#$$=====%%#@+++.......@@$%==&#@+++.......+@@$$**&&%#@+............++@@@@+@++.......+..............++@#@@@@++..............@@#%&%#@++.....",
+"....++@@##$###@++.....+@##$$$$$$$$###@+.++@##$$$$$$$$$$##@+...++@###$$$$$#@@++.......++@@##$$$$###@...++@###$$#$#@@++......+++@@##$####@+++......+@@#@#@@+..........+@###$$$##@@++...++@@##$$###@@@+.+.......+@@####@@+.........+@#%%==$##@+++..............+.++..+.........+....+.......+++++++.................++@@#@@++.+....",
+".....++@@@#@@@++.....+++@@#@#####@#@@++..++@@@########@@@@+..+.++@@@####@@@++.........++@@#@####@@+.....+@@@@##@@@++.........++@@@##@@@+++........++@@@++...........+++@#@#@#@@++......+@@#@###@@++.........+.+@@@@@@++.........++#$$&&##@++.................+..............................+++.+.................+@@@@@+.......",
+".....+.++@@++++.+.....++++@@@+@@@@++++....++@@@@@@@@@@@++......+.++@+@+@@++.+...........++@+@+@++++......++@@+@+++...........+++@++@+++...........+++++++............++++@@@+++..+....+.+++@@+++++.............++@@++.+.........++@@@##@@@+........................................................................+++++........",
+"......++++++++..........+.++...+.........+.+.++++++.+.............++.++.+.+.+....+.++++.++..+..+......+.+++++++++++.+....+.++++++++.++.+............+.+.+..+........+.+++..+.+++..+....+.+.++++++.+.........+.+++++++++......+.++.++.+.+.+.+.+......+.+++.+.+..+......+.+........+.+..+....+.+.+...++..+..........+.+.++........",
+"..+.++++@@@+@+++......+.+++++@++++........++@+++++++++++.........+.+++++++++++...++++++@+++++.+.......+++++++@++++++.+....+++++@+++@@++++++......++++++@++++++...++++@+++++++++++++...++++++++++++++++........+++++++++++++.+.+++@++++++++@++.+.+..++++++@+++++.......++++++..+.+++++++...++++++++.++++++++......+.++++++++.....",
+"..+.++@@####@@+++.....+++@@@@@@@+++.....+++@@@#@#@#@@@+++.......+++@@@#@@@@@+++.+@@@@#@@#@#@@++.+...+++@@@#@#@#@#@@@+++.+++@@@@#@#@@#@@@@++....+.++@@@@@@@@@+++..++@@@@@@@@@@@@#@@+.+.++@@#@#@#@#@@++++....+++@@@#@#@#@@@++.+++@@@@@@@@@@@@@@++..+++@@@#@@@@@++.....+++@@@@@++++++@@@@+.+++@@@@+++++@@@@@++....+.++@@@@@@+++....",
+"...+@###$$$$$#@+++....++@@##$###@@+.....++@##$#$$$###@@++++...+++@@####$####@@+.+@##$#$$#$##@@@++...++@##$#$#$$$#$##@++.++@###$#$$$$#$$##@@...+++@@###$#$###@@+.+@@###$###@#######@.++@@####$$#$###@@++.....+@@##$#$$#$##@@..@@###$###@######@+..++@##$#$$##@@++....+@@@###@@+++@@###@@.++@@###@@@@@#####@@...+++@@@#####@@+++..",
+".+++##%==***%%#@++..+.+@$$%&&&&&#@@+....+@@%&&&&&=&&&$##@+....++@@$$&&&=&%%%$$@.@$$&&&&=&&&&%#@@++..+@#%&&=&=&&=&&&&#@+.+@#%&&=&&&&=&&&&%$@...++@@$$&&=&&%%%$$@.+@$%&&&&&$$$&&=&&%$.++@%%&&=&=&=&%%%@++...+++@%%&&&&=&&&%$@.+@$%&&&&&$$$&&&&%#@..+@#%&&&&=&&$#@++...+@$%&&&##@@@##&&&%$.+@#%&%%$#@#$%&&&$$@...++@#$%&&&%%#@@+++.",
+"..@@#$%=;-**&&#@@+...+@#$%&====&$#@++...+##&========&%$#@@+.++@@##%%=====&&%%%@.@%%========&&$##@@+.@@#&&=========&&$@@.+@#&============%%#.++@@##%%=====&&%%$#.@@$%&===&%$%&===&%%.+@#%&&=======&%%#@+....+@#%&=======&%$@.@@$%====&%%%&===&#@.++@#&======&%$@++...@@%%&&=$$#@#$%&=&%$.@##&&=%%$##%%=&=%%@.++@@##%%&==&&$##@@+.",
+"++@#$%%;;**-&=$#@++..+@@%%&=====$##+++..@@$&===;=====%%%#@@.+@@#$$&&=====&&&&%#.#%%===;=====&%$$#@+.@#$&====;==;====$#@.@#$&===;=;==;===&%#.+@@#$$&%=====&&&&%#.@#%&=====%%%=====%%.+@#%&&========&%#@+...++@#%&========&%#.@#%%=====%%%====&$#.+@@#&=======%$@@+...@#%&===%$$##$%===&%.@#$===&&$$$&&===%%#.+@@#$$%&====&%$$#@@.",
+"++@#&==;==&&**%$#@+..+@#&&=**-*-&%#@+...@#$;;;**;;;;;***$#@.+@#&&=**;;;;;***==$.#%&***;;;;;;;***$#@.@#$;;;-*;;;;;-**%$@.@#$;;;**;;;;;***;=$.+@#&&=**;;;;;-**==$.@#%&***;;%%&;;***&%.+@#%&=;;-*-;;==%#@+....+@#&=;;;*-;;;&%#.@#%&**-;;&&&--;;=$#.+@#$==;-*;;=%$@+++..@#%&*-*==$$%&=-*-&%.@$$*****%%$&=-**=%#.+@#&&=**;;;;;***$#@.",
+"+@##&==;==&&**%$#@+..++@&&=**-*-=&$@@+..@#$;;;-*;;;;;***$#@.@##===**;=;;;*-*;=$.#%=*-*;;;;;;;***$$@.@#$;;;**;;;;;*-*%$@.+#$;;;-*;;;;;***;=$.@##===**;=;;;**-;=$.@#%&*-*;;&%%;;-*-&%.++#%&==;*-*;==&%@@+...++@#&&=;;**;;;&%@.@#%&***;;&&&*-;;=$#..@@$==;*-;==%$@++...@#&=--*==$%$==-*-&&.@$%**-**%%%==*-*&%#.@@$&==**;=;;;***$##.",
+".@#$;;;&=&==**&%%@+..+@@#$%;;;;;;=$#@+..@@$%==;;&&&&&***%$@.@#$***&&%%$%%===;=$.@$%;;;=&%%%%%***&%#.+##%==;;%%%%%***%$@.@##&&=;;%%%%%=====#.@#$***=&%%$%%===;=$.+#$%;;;=&%%%==;;;%$.++@##$%%***%%$##@+.....++@#$$%&;;=&&$#@.+#$%;;;==;;;;;%%$#@.++@#$%%**&%%##@+....@#$%*--;;%%%;;*--%%.@#$;;;**&&&%&***%%#.@#$***&&%%%%%***&%#.",
+"+@#$;;;==&=&**&%%#@...+@#$%;;;;;;=$#@++.+@#%&=;;&%%%&***%$#.@#$***&&$$$#$=====#.@$$;;*&&$$$%%***=&#.+@$%&&;*%&%&&***%$@.+@#%&=;;&%%%%=&===#.@#$***&&$$$$$=====$.+@$%;;;==%%%&=;;;$$.+++@##%%*-*%$$@@@+.....+++@##$%;;=&%$#@.+@$%;;*&&;*;;;%##@+..++@#$%**%%$#@++....@#%%-*-;;&%%;;-*-%%.@$%;;;-*===%&***%$#.@#%***&&$$$%%***=&#.",
+"+@#$;;;&&=&=**&&%@@..++@#$$;;*;;;;$$@++.@@#%&=;;%&&&%***%$@.##%***&%$####%&&==#.@#%;;;&&$$#$%***&&#.+@#%&=;;&%%%%***%#@.+@#%&=;;%%%%%&=&==#.@#%***&%$###$&====#.@@#%;;;=&%%%=&*;;%#...+@@#$%***%$#@++........+@@#$%;;&&%#@+.@@#%;;;&=;;;;;$#@@+...+@##%**%$$@@+.....@#%%*--;;%&=;;--*%$.@#%;;;-*&&&&%-**%%@.@#$***&%$##$%***&&$.",
+"+@#%;;;;=**-*-&%%#@..++@#$%**&=&**%$#@+.+@#%&&*-===;;-**%$#.@$%***%$#@@@######@.@#%;;;&%$###$===;=$.+@#%&&;;&&&**%%$#@@.+@#%&&;;&&%**%%$##@.@$%***%%####$$%%$$#.+@#%;;;;;===;;;;;$$....++@$$*-*$$#@.+......+..+@@#%;;=&%#@+.+@#%;;;*****&$$#@++...++@$$**%%#@+++....@@%%*****&&&*****&$.@#$;;*=;;;;&%***%$#.#$%***%$##@#$=====$.",
+"+@#%;;;==-*-**&&%#@..++@$$&**&&&-*%$$@+.+@@%&=**=;=;;-*-%$#.#$%***%$#@@+@@@#@@@.@#$;;;&%##@#$=====$.+@#$&=;;&&&**&%$#@+.+@@%&=;;&%&**%$##@@.#$%***%$####$%$%$##.+@#%;;;=;=;=;;;;;%#....+@@#%***%#@++......+.++.@@#$;;&%%#@+.@@#$;;******%%#@++.....@@#%**%$#@++.....@#$%**-**&&&**-**%$.@#%;;;;=*;;%&-**%$@.#$%***%$#@@#$==;==#.",
+"+@#$;;;;;;;;;;=%%#@..+@@%%&;;&&%;;=%%#@.+@#%%&*-;;;;;***&%#.#$%*-*%##++++++@@++.@$$;;;&%##@##&==;=$.+@#%&&--**-**%$##++.+@#%&&--*-***$$#@++.#$%*-*%$###&&===%%@.+@#$;;*;;;;;;;*;;$#.....+##%***%#@@.....+++++@+@@$$;;&&%#@+.+@$$;;;*-*-*&%#@@.+....+@#%**%$#@@++++..+#$%***;=*-*;=***%$.@#%;;;&&***=&***%$#.@%%***$##@@##&&=;=$.",
+"+@#%;;*;;;;;;*&&%#@.++@#%&=;;&&&;;&&%#@.+@#%&=**;;;;;*-*&%$.#$%***$$@@+.+++++++.@#%;;;&%##@@$&&&;=$.+@#$&&-*-****%$#@@+.+@@%&&-*-*-**%#@++..#$%***%$##$&====&%#.+@$%;;;;;;;;;;;;;$#.....@@#$-**$$@++....++@@@@@@@$$;;&%%@@+.+@#%;;**-***&%$@@+....+@@#$**%%#@@@@@++.@#$&***=;-*-=;-**%$.@#$;;;&=***&&***%$@.#$%***%$@@@#$&&=;=$.",
+"+@#$;;;==*-***==&#@.+@#$%&=;;&%&;;=&%##.+@#%%&-*;;;;;*-*=%$.#$%***%$@@+++++@+++.@#$;;;&%#@###&==;=$.+@#%&&*-*-***%%$#@@.+@#%&&-*-*-**$##++..@%%***%$##$&====&%#.+@#$;;*;;;;;;*;;;%#.....+@$$*-*%#@@.....@@##$#####%;;&&%#@+.+@#$;;;**-*-&%$#@@+....+@$$**%$$#@@@@@+.+#$%***==-*-==***%$.@#%;;*&&***=&***%%@.#$%*-*%##@@#$&==;=$.",
+"@@#%;;;;;**-**===##.++#$;;;*-*-*--;;=$@.++#%&&;;%%%%%;==;=$.#$%*-*%$#@++@@@@@@+.@$%;;;&%##@#$&&=;=#.+@#%&=;;=&&**&%%%$@.+@#%%=;;&&&**$#@+...@$%***%%$$$;;***==$.+@#%;;;==%&%&=;;;%#...++@##%***%$@+++...@#$===####%;;&%%#@+.+@$%;;;===;=**%$#@+...++##%**%$$##%%%#@.@#$%*-*&%;;;%&***%%.@#%;;;=====;;-**%$#.@$%***%$#@@#$===;=$.",
+"+@#$;;;&==;=;;==&#@.@@#$;;;-*-*-*-;;=%#.+@#%&&;;%%%%%===;=$.@$%***%%##@@##$###@.@#$;;;&%$###$&====$.+@#%%&;;=&=**&&%%%#.+@#%&&;;=&&**$@@+.+.@$%*-*%%$$$;;***==$.+@$$;;;=&%%%&=;;;$$....++##%***$$#@.+.+.@$$;;;%$$$%;;=&$#@+.+@#$;;*&===;**&%$#@...+@@$%**&%$$$&&%$#.+#$%***&%=;;%%*-*%$.@#$;;;=====;;***%$#.#$%*-*%%$##$$=;=;=#.",
+"@@#$;;;====;;;==&$@.+#$%*-*==&&&&&***%$.@@#%&=;;%%$%%;;=;=#.##%;;;==$$###&==&&#.@$%;;;&&$$$%%***&%#.+@#%&=;;%&%&%=====#.+@#%&=;;&%%%%#@++...@$$;;;=&%$%%%;;;;=$.@@$%;;;&&%$%&=;;;$$...+@@#$%*-*%$#@@++..@$%***%%$$%**&%%@++.@@$%;;;&=%%&;;==&#@..++@##%**%%%%$***$#.@#%%***%%%$%%&***%$.@#%;;;&&%%%***-*%$#.@$$;;;=&$$#%%***&%$.",
+"+@#%;;;=&;==;;==&#@.@#$%***=&&&&==*-*%$.+@$%&=;;&%%%%=;;==$.@#$;;;==%$$%%====&#.@$%;;;=&$$$%%***&%#.+##&&=;*%&%&&=====$.+@$%&=;;&%%%$#@++...@#$;;;;=%%%%%;==;=$.@@$%;;;=&%$%&=;;;%$.++@@#$$%*-*%$$#@++..@$%***%%%%%**&%%#@..@@$%;;;=&&%%;;===$#..+@@$$%**&%%%%***%$.@#%%***%%$$$%%***&$.@$$;;*&=%%%***-*%$#.@#$;;;;=%%$%%*-*%%#.",
+"+@#$=;;==&&%=&&%$#@.@#$&*-*=&&&&&=***%%.@#$&&=;;%%%%%;=;;=$.@@$;;;==%%%%%====&#.#$%;;;&=%%%%&***%$#.@@$&&&;;&%&&%===;=$.@@$&&=;;&%%%$#@+....@@$;;;==%%%%%=;===#.@#$%;;;&&%%%&&*;;%$.++@#$$%%***%%$$#@@+.@$%*-*&&%%&**&%$@++.@#$%;;;&&%%%;;===%#.++@#$%%**&&&&%***%$.@#%&***%%$$$%%***%%.@#%;;;&&%%%**-**%$@.@@$;;;==%%%&&***%$@.",
+"+@@#&==;=%&%=&%%$@@.@#&=--***&&&**---=&.@#$*-*--*-*-****%$#.+@#%%&;;*-***;;;%$#.#&=---**-*-*-;==$#@.@#$**-*-*-*-***-;=$.@#$**--*-**%%@@+....+@#%%&*****--;;;%$#.@#&=--***%%%****-=&.+@@&==-----**==&@@+.@#$=;;*-***;;$$@@++.@#&=---**%%%&=-*-=&.+@#$*-*--****-*--$$.@#&=--*==$#$=;---=&.@$%*-*-*%%%==---%$#.+@#%%&******-===$#@.",
+".+@#$%&***-***%$$@+.@#&=*--**&%&**--*=&.@#$-***-*-**-***$$@.+@@$%%;;**-**;;;$$@.#&=-*-***-*-*;==##@.@#%*-*-*-*-**-**==#.@#$*-***-*-%%@+++...+@@$%%**-****;;;%$@.@#&=*--**%%&-*-**&&.+@#&==***-*-*===@@+.@@#===-**-*;=$#@++..@#&=-*-**%$$%%*-*=&.++#$-*-*-****-*-*%#.@#&=*--==#$#==-*-=&.@#%*--*-$$$==**-$$@.+@@$%%***-***=&&#@@.",
+"+++@#$%*******%$#@+.@#$$%%%%%$$$%%%%%%#.@@$$%&%&%%%%%%%$$@@..+@@##$$%%%%%$$##@@.@#$%%&%&%%%%%$$##@+.@@#%%%%%%%%&%%%%$$#.+@#%%%&%%%%$#@+......+@@##$$%%&%%%$##@@.+#$$&%%%%$$$%%%%%%#.+@@$$%%%%&%&%%$#@@..+@##$$%%&%&$$#@@+...+@$$%&%%%###$$%$%$$.++@#$%%%%%&%%&%%%##.@@$%%%%%$###$$%%%$$.@@#%%%%%$#$$$%%%##@..+@@##$$%%%%%$###@+.",
+".++@@##$$%%%$$##@+..+@#$$$%$$###$$%$$$#.+@#$$%$%$%$$$$$##@+..+++@###$%$%$$##@@+.@@#$$%$%%$%$$##@@++.+@@$$$%%%%%$%$$$$#@.@@@$$%$%%$##@+++.....++@@@#$$$%$$###@@+.+@#$$%$$$###$%$%$$#..+@#$$$%%$%%%$$#@++.++@@#$$$%%%##@++....@@#$$$$$$##@@##$$##..+@@$$$%%%$%%$%$$#@.+@##$$$$##@###$$$##.+@#$$$$$#@@##$$$#@+..+++@###$$$$$##@@++.",
+"...++@@##$$$##@@++..++@###$##@#@######@..+@####$###$###@@++..++++@@@#####@@@+++.+@@###$#$####@@@+.+.++@###$###$######@+.++@###$##$#@@+.........++@@@######@@++..++@###$##@@@######@.+++@@###$#$$###@++..+++@@@#$#$#@@@++....+@@##$###@@+@@###@@.+++@#####$#$#$###@+.++@#####@@+@@#####@.++@#####@@@@@##@@++...+++@@@#####@@++...",
+"....++@@@@#@@@++++...++@@@@@@@++@@@@@@+..+++@@@@@@@@@@@+++.......++@@@@@@@+++...++@@@@@@@@@@@@++.+...++@@@@@@@@@@@@+@++..+++@@@@@@@++............++@@@@@@++++....++@@@@@@+@+@@@@@++...++@@@@@@@@@@@++.....+++@@@@@@@++.......++@@@@@++++++++@@+...++@@@@@@@@@@@@+++..++@@@@@+++++@+@@++..++@@@@++++++++@++.......++@@@@@++++....",
+"....+.++@++@+++......+.+++++.+++++++++....++++++++++.++..+.......+..+++++..........+++++@++++..........++++@+++@+++++.+...++++++++..+...............++++++........+.+++++++.+++++++...+.++++++@+++++..........++++++.........+.++++++....++.+.......+++@+++++++++.+..+.+++++++.+.+++++.....+++++...++++..+........+.++.+........",
+"...+.+.++++.++.............+.+.+.+.........+.+.+..+.+..............+.+++..+........++.+++.+..+.+..........+......+.+......+..+.+..+..+...+......+.+.+..+.+.+.....+...+...+...++.+......+.+.+...+.+.++.+......+.+.+.+.++..........++@@@@@@++.+...+.+++++++................+++@@@@@++.+..........+.+++++..........................",
+"..+++++++++++++++........++++++++.+......+.++++++++++++..........++++++++++++.....++++++++++++++++...++++++++++++++++++...++++++++.+.+++++....+++++++.+.+++++++...+++++++++++++++++....+++++++++++++++......+++++++++++++++....+++@#####@@++.....++@@@@++++...........+.++@@#####@@.+.........+++@+@+++.........................",
+"+++@@@@@@@@@@@++++.....++++@@@@@@++++....++@@@@@#@@@@+++.......+++@@@@@@@@@@+++.+++@@@@@@@@@@@@@+++..++@@@@@++@+@@@@@++.+++@@@@@++++@@@@@@+.+++@@@@@+++++@@@@@+..++@@@@@@+@@@@@@@@+..++@@@@@@@+@@@@@@@+..++++@@@@@@@@@@@@++.....+@#%%&&%$#@+++..+@@####@@++............++@#$&&&%%#@+..........+@@@#@@+++........................",
+".@@###$#$#$####@@++...+++@@#######@@+++.+@@@#$#$######@@++...+++@@@##$#$###@@++..@@@###$$#$$####@++.+@@######@@######@@.+@@@####@@@@@#####@.+@@@#####@@@@#####@.+@@#######@@######@.+@@######@#@######@...+@@###$#$#$####@@....+@@$&&==&$#@@....+@#&==%$@+++...........+@##$&=&&&##@+........++@#%%%#@+++.......................",
+"+@##$$%$%$$$$$$#@@+.+.+@@#$$$%$$$##@@++.@@#$$$$%$%$$$##@@++...+@@#$$$%$%$$$$#@@.+@#$$%$$%$%$%$$$#@+.+@##$$$$###$$$$$##@.+@#$$$$$$####$$$$$#.+@#$$$$$####$$$$$##.@@#$$%$$$$$$$$$$$$#.@@#$$$$$$$$$$$$$$$#.+++@##$$%$%$%$$$$#@...++@#$***;;%$#+++..+@#===%%#@++..........++@#$%;;***$#@+.......++@#$%&&$#@++.......................",
+"@#$**********==&#@@..+@#$$==*****%%$@@+.@#&=********==$##@+.++@#$$**********$#@.@#$*************$#@.@#$*****%%%==***=&#.@#&=***==$#$==***=&.@#&=***==$$$==***=&.@#&=*****%%%*****&&.@#&=*****%%%*****=&..@@#===**********$#....+@#$--*;;%##++...+@#%&&==$@@+...........+@#%%;;***$#@++......+@#$%-**%$@+++......................",
+"@#%***-*-*-**===$#@.+@@#$%;;*****&&%#@+.@#&=**-*-**-;=%$#@@.++@#%%**********$$@.@$%**-**-***-***%$@.@$%*****%%$;=***=&#.@#&=***==$$$=;***=&.@#&=***;;$%$;;***=&.@#&=**-**&&&**-**=&.@#&=**-**&%&*-***=&.+@##=;;**-*-*****%$...++@$$**-;;$$#@.+..+@#%&===$#@+..........+.@#$%;;-**%#@+.......+@#%%*-*%%#@++......................",
+"@$$*-*******-=;=$$#.+@#$%%;;-*-**&&%$#@.@#==-****-**;;%%$#@.+@#$%%**-*-*****%$@.@$%***-*-*-***-*%$@.@#%**-**%%%;;*-*==$.##==*-*;=$$$==-**==.##==*-*;;%%%;;*-*==.@#==***-*%&&-**-*==.@#==-**-*&&&***-*==..@#$=;;*-**-*--**%$....+@$%***%%#@@+....+@#%&&;;$#@@+.........+.+@##%%***$$@@....+.+@@#%&*-*%%#@++......................",
+"@#$&==;;=&&&&;;;=&#.@#$=;;==&&&=&***%$@.@#$%***==&&&;=;;;#@.+@#=;;;;&&&==*-*%$#.@$%***&&-*-&=***%$#.@#%***=&$$$%%***&%#.@#%&***%%$$$%%***&%.@#%&***&&==&&&***&%.@#$%-**;;%%%;;***%%.@#$%***;=%&%;;***%%.+@#$;;;==&&&;=***%#...+@@#$*-*%$#@+.+...++@#$%**%$#@@..........+++@#$%*-*%#@++.....+@#$==;;;;=$#@+......................",
+"@@#&==;;&&&&=;;;==$.@#$;;;;=&&%&=*-*%$#.@#$%***==&&&;;;;;$#.@#$==;;;&&&&&*-*%$@.#$%-**=&**-&&***%$@.##$***&=$$$%%***%%#.@#%%***%%$#$%&***%%.@#%&***&%===%&-**%%.+#$%*-*=;&&&=;*-*%$.@#$%**-=;&%&=;*-*%$..@@$;;;===&&;;-**$$....+@$%***%$#@+......+@@#$**%%$@@++.........++@#$%***%#@++....++@#$==*;;;;$#@++.....................",
+"+@#%&=;;%%$$%===;=$.@$%***&%$$$%%;;;==#.+#$%;;;=&%%%&=;;;$#.@#$;;;==%%%%&=;=%$@.@$%***%&-**&%-**%$#.@$$;;;&&$##$%***%%#.+@$%;;;&%$#$%%;;;%#.@#$%***&&*-*&&***%%.+@#$%&=**=;=*-&&&$#.+@#$&&=;;&&&**&&%$#.+@@$&==&&%&&**&&&$@....@@#$***$$@+++......@@#$====&#@++..........++@#%***$$@@.....+@#$%**&&&**$$#++.....................",
+"@@#%&=;;%%$%$===;=$.@$%*-*&%$##$%;;;==$.+@#%;;;&=%%%&=;;;$#.@@$;;;==%%%%%;==$#@.@$%***&%-*-%&***%$@.@#%;;;&%###$%***%%@.@@#%;;;%%$##%&;;;$$.@#%%*-*=&*-*=&-**%$.+@@#%&&*-=;;**&&%#@.+@@#%%=;;&&&**&&%#@..@@#&&=&&&%&*-&&%#@...++@$%*-*%#@@........+@#$&===&$#@+..........++@$$-**%#@@....+.@#$%**%&%**%$#@+.....................",
+"+@#%%=;;%%$$%&==;=$.@$%***&%####$;;;;=#.+@#$;;*&=%%%=&;;;$#.@@$=;;==&%%%%;==$$@.@#$***%%**-%%***$$@.@#$;;;=%$###%***%$#.+@#$;;;&%$$$%&;;;$#.@@$%***&=-*-&&***%$..+@#$%&**;=;-*&%%#@..+@#%%&;;&&&**&%%#@..+@#%&&%&%&&**&%%#@....+@$%*-*%##++........+@#&====$#@++..........+@#%**-$$@++...++@#$%**%%%**$$@@+.....................",
+"+@#%&=;;%%$%%;==;=$.#$%***%$#@@#$===;=$.@@#%;;;;====**;=&$@.@@#%&&***-*==&&%$#@.@##$%%%%-**%%%%$#@@.@#%;;;&%#@#$$***%$#.+@#$=;;==$$$&=;;;$#.@#$%***;=--*;;***%$.+++@#$%==*-*==$$#@+..++@#$%;;**-;;$$#@+.++@@##$$%;;;;;$$#@+....@@#$***%#@@.........++@#$=;;&&##+++.......+@@#$***%#@@......@#$$&=$%$&&%$#++.....................",
+"+@@%%&;;&%%%%=;=;=#.#$%***%##@@#$&=&;=$.+@#%;;;;;===**;==#@.+@#%&&*-**-==%%%$@@.+@@#$%%%**-%%$$$@@+.@#%;;;&%$#@$%***%$#.++@$=====%$%&=;==$@.@#$%***;=---;;***%$..++@@#$&=-*-&=$$@@+...++@#$;;-**;;$#@++...+@@#$$%;;;;;$#@@+...+@@#%***%#@+..........+@@$==;=&$#@+.........@@$%***%#@@....+++#$$%%#$#&%$##++.....................",
+"+@#%&=*-*****;;;%%#.@$%***%$####$&==;=$.@@#%;;;*****;;%%$#@.+@##$%&%;==*****$#@.++@@@#$%***%$##@@++.@#%;;;&%###$$***%$@..@@#%&&;;%%%;;&&%#@.+#$%*****&&=**-**%%...+@##%=;;;;;=%#@@+....+@@$%%**-%$$@@+.....+@##&&***%%$$@@+...+@@#%***%##@..........++@#$%%**$#@+++.......+@$%**-$$@++.....++@@###@@##@@@+......................",
+"+@#%&&-*-*-**;;;%$#.#$%*-*&%$$#$%;;;=&$.+@#$;;;***-*;;%$##@.+@##$$&%==;*****$#@..++@@#$%*-*%$#@++...@#$;;;&%####%***%%@..+@#%&&;;%%%;;&&%#@.+#$%*-***==&-****%$..++@#$$=;;;;;=%$#@+.....@@#%%-**%$#@++...+++@#$&=***%%$##@@....@@$$*-*$$@++..........+@@$%%**%##@+.......+@@#$***%#@@.....+++@+@+@@@+@@+++....++.+++++.+++++.+..",
+"+@#%&&*-**-*-;;;$#@.@$%***&%%$$%%;;;=&$.+##%;*;****-;;%%$@@.+@#$$%&&===*****$$@....+@##%***$$#@+.+..@#%;;;&%$##$%***%$#.+++@$%&;;&%&;;&%%@@.@@$%***-*&&=*****%$.++@@#$%;=*;;==%$#@@....++@#$%*-*%$#@+.....+@##$&=*-*%%%$##@....+@#%***%##+++..........+@@$$;;%%$@@+......+@#$%***%#@@........++++.++++++....+.+++++++++++++++++.",
+"+@#%&=;;=&&&&%$$#@@.@#$=;=**=&===*-*%%#.+@$$;;;==&&&**=%%#@.@#$;;;%%%%&&&***%$#...++@#$%*-*%$#@+.+..@#$;;;&&$$$$%***%$@..++@#$%**&&&**%$#@+.+@#%;;;-*&&&*-;;;%#.+@@$%&&**&&&**=&&#@.....+@#$%***%$#@++..+++@#$%**===%%;;=$#....+##$*-*%$#@+...........+@@#$;;&%$#@+....+.+@#$%-**$$@++..........+......+....+++@@@@@@@#@@@#@@@+.",
+"@@#%&=;;&&&&%$##@@+.@@#==;**==&;=-*-%$#.@@$%;;;&&%&&-*&&&$#.@$$;;;%%&%%%&***%$@..+++@#$%***%$#@@+...@#$;;;&&%%%%%-**%$#...++##$**&&&**$#@++.@@#%;;;**&&&*-;;;%#.+@#$&==-*&&&-*=&&$#....+@@$$%*-*%$#@@+...+@#$%%-*===%&;;;%$...++@$$***%$#@@++..........+@#$=;&%%#@+....+.+@#$%**-$$@++......................+@@###$$###$#$###@@.",
+"@#$=;;**;==&%##@+++.+@##%%;;-*-;;&&&&%#.@#%&**-;=%%%;=***%$.@$%-*-;====;=-**%$@...+@#$&=--*&&$#@++..+@#&==;;=====;;;$#@...++@#$==*-*;=$$@++.+@#$;;*;;&%&;;*;;$#.@#%%-*-;;&&&;;*-*&%...++@#$==-*-&&$#@++.++@#=;;**=;===***%$...++@#%*-*==$#@+..........+.@@$%&;;;$#@.....@@#$&=***%#@+.......................@#$%%&&&&&&&&&=&%%@.",
+"@#$=;;**;==%%#@++...+@#$$%;;-*-;;&&&&%#.@#%&***=;%$%=;***%%.#$%*--=;====;-**%$@..+@@$$==**-=&$#@+++.@@#%&=;;====;;;;$#@....+@#$==*-*==$#@+..+@#%;;;;;%%&;;;;;$#.+#%&--*;;%&%;;*-*&%..+++##%&=-**=&$#@++.+@@$==;*-=;===-**%$....+@#%***==$$@@++..........+@#%&;;;$#@....++#$$==-**%##++......................@$%&&&==&&&&&===&%#.",
+"+#$=;;**===%$#@++...++@%%=*-;;;*****&%#.@#%&***;=%$%==***%%.@$%-*-;====;=***$#@..+@@$$==-*-&=%$#++..+@#%&&;;;====;;;$#@....++@#&=**-==#@@++.+@#$;;;;;%%%;;;;;$#.@#%&*--;;%&&;;-**&%...+@#$$==*--=&%$#++..@@#=;;*-==;==***%$...+@@#$*-*==%$#@+..........++@@$%***%#@....+@#$%==***$#@+.......................#$%&============&&$.",
+"@#$=;;;;;;;%%@++....++@$%&*-;;**-***&%#.+#%&;;;;;$$$%%;;;&%.@#$===;;;;;;;&&%$#@...+#$$;;;;;;=%$#@++.+@@##%;;;;;;;&&%#@+....++@#%&;;;&%#@+...++@#&====$$$====&$@.@#%&;;;;;%%%;;;;;&%....@#$%;;;;;;;%$#@+.++##&&=;;;;;;;;;;$$....+@#$=;;;;%$#@++..........++@#$***$#@....+@#$%;;;;;$#@++......................#%&;;;;;;;;;;;;;;;#.",
+"@#$=;;=;;;=%$@++.....@@$%&*-;;;*****&%@.@@%%;;;==$##$$=;=%%.@#$&====;;;;;%%%#@+.+++@#$=;;;;;=$$#++....@@##==;;;;;%%$#@+....++@@$%=;=%%#@+...++@#&&&&&$#$&&&&%#@.+@%%;;;;;$%$;;;;=%%..+++#$$=;;;;;=$$#++.++@#&&=;;;;;;;;;=$#....+@#$==;;;%%#@+...........++@##***$#@...++@#$%;;;;;$#@+.......................#%&;;*;;;;;;;;;;;=$.",
+"+@##$$$$$$$#@@+......+@@#$%%%%%&&%%%##@.+@###$$$##@@##$#$#@.@@###$$$$$$$$$#@@++...+@@##$$$$$$#@@+.+..+.@@##$$$$$$$#@@+......++@##$#$#@@+++...+@@##$##@#@#####@+.+@###$$$$####$$$$#@....+@@#$$$$$$##@@++..++@##$$$$$$$$$$$#@....++@#=====%$#@++..........+.+@#$$$#@@....+@#$%=;;;=##+++......................@%%;;;;;;;;;;;;;;=#.",
+"++@@@####@@@@++.+.....+@@#$$#$#%$%$$#@+.++@#####@@@@@@@#@@@.++@@#########@@@+++....+@@@#####@@@++......++@@######@@@++......+++@@##@@@++......++@@@@@@@@@@#@@@+.++@@###@#@#@#@####@.....+@@@#####@@@+.+...++@@@####$####@@@.....+@@#$$$##@@+.............++@@#$$@@+.....+@@#$$$$##@++.......................@@##$$$%%%%%%%$$$#@.",
+".++@@@@@@@@+++........++@@#$###$#$##@@+..+++@+@@@+.++++@@@+..++@+@@@@@@@@@+++.....+.++@@@@@@@++.........+++@@@@@+@+++..........+++@@@++.......+++@+@+++++@++++...++@+@@@+@++@@@@@++....++++@@@@@@@++.+.....++@@@@@@@@@@@@++.....++@@@##@@@+++.............++@@#@@+.....+++@@@#@#@@++........................@@@###############@.",
+"....++++++++...........+++@+++@@@@@@++.....+++.+.+..++.+.+.....+.+++++.+.+..........+..++++.++...........+.+++++++.............++.+...+..........+.+.....+.........++++++++++++.+........+.+.+++++.+..........+++++++++.+........+++@@@@+++................++++++.+......+++@@@@+++.........................+++@@@@@@@@@@@@@@++.",
+"........+.+...+..........................+++++++.+.......................................+.+++++................................+.+++++++.........................++++++...................+.+++.+............+.+.++++.........++++++...............++++++++.+..................................................................",
+"......+.++++++..........................++++@@@+++......................................+.@+@+@++++..........................++++@@@@@@@+++.....................+++@@@@+++................++@+@+++.............+++@@+++......++++@@@++++............+++@@@@@++..................................................................",
+"......+++@@+++..........................+@@#@##@@++.....................................++@@##@@@++..........................++@@#######@++.....................+@@@##@@@+++............+++@@#@#@++..........+++@@#@@@@++....++@@##@@@+...........+++@@###@@@++.................................................................",
+".....++@@@##@+++........................+@##$$$#@@++...................................+@@##$$$#@@+.........................++@##$$$%$$##@+.....................+@##$$$#@@+..............+@###$##@++..........+@##$$#@@++...++@##$$$#@@++........+.+@@#$$$$$#@++................................................................",
+".....+@#$%%%#@++........................@#&&***%$@+++..................................+@#$**===#@+.............+.........+.+@##==;*****$#+.....................@#&&***%$@@++..........++@@%&***#@@+........++@@$***&%@@++..+@#$***=&#@+++.......+++#$%*****##@+......................................................+.........",
+"..+.+@@$$&&%$#@++............++++.......@#&=***%$#@++..............++.+.++.+.........++@@$$**=;=##@.......+.++.+.+.........+@@#%==;*****$#@........+.+.+++.+....@#&=***%$#@++...........+@#%&***$#@++........+@#$***&%#@+...+@#$***==$#@++.+......+@$$%*****$#@+.......+.+.+.+++.+..+.......++.+.+.+.+.............+.+.+.+......",
+"....+@@%%*-*%$@+++....+.++++++++++......@#$%;;;&%#@@++++........+++++++++++++......+.++@@#%&=;;;$#@....+.+++++++++.+.....+++@#%&***&&&&%#@@...+.+++++++++++++++.@#$%;;;&%#@@+++.........+@#%&;;;$#@.......+++@@#$;;;&%#@++..++#$&&=;;##@++++++.....+@#$%&***$#@++......+++++++++++++++...++++++++++++++..+.....+.++++++++++.....",
+".....@@%&*-*%$#@+......+++@@@@@@@++++...+#$%;;;&&$##@@++++.....+++@@@@#@@@@@+++....+++@@#$$==;;;$#@..+.+++@@@@@@@@++.....++@#$&=*-*=&&%%#@+..+.+++@@@@@@@@@@@++.+#$&;;;&&$#@@@++++.....+@@#%&;;;$#@++......++@#$%;;;&%#@+...+@@#&&=;;%##@@@@++....++@@$%&***$$@+.....+@+@@@@#@@@#@@@++...++@@@@@@@@@@@+++.....++++@@@@@@@@++++..",
+"...++@@%%-*-%%#@++...+++@@#######@@++...+#$%;;;=&%$###@@@++.+++@@@####$#$##@@++.+++@@@##$$%&=;;;$#@..++@@@###$###@@@++...+@##$&=***&&&%%#@+..++@@@###$$#$###@@@.@@$%;;;=&%$$##@@++...+.+@#$%&;;;$#@+.....++@@#$$%;;;&%#@@....@@#&&=;;%$####@@@+....++@#%&*-*%#@@....++@@####$#$##$##@@+.++@@##########@@+++.+.+@@@###$###@@@+...",
+"....++@#$=;===#@+...+.+@#$$%&&&%$$@@++..@@#%;;;==&&&%%##@@+..+@@##%%&&&&&%%%#@+..+@@##%%&&==;;;;%#@.++@@##%%&&%&%$#@@++.+@@$%&;;;;;==&&%#@+.++@@##%%&%&&%&&%$$@.+@#%;;;==&&&%%#@@++....@@#$&===&$#@++...+.@@$%%&====&&$@++..++@#%&&;;%%$&%%%$@+.....+@##%***$$@++...+@$$%%%&&&&&&%&%##@.+@$$%&%%%&&%%%#@@++.++@@##%%%&&&%$#@@++.",
+"....++@@#&===&$@@...++@@$$%&&&=&%%#@@++.+@$%;;;=====&&$$#@@.+@@#$%%&&&&=&&&%$#@.+@@$$%&&=&===;;;$#@.+@@$$$&&&=&=&$$##@+.+@#%%&;;;*;==&&%#@@.+@@$$$&&&=&&&=&=%$#.+@$$;;;====&&%$$#@+..++@#$%&===&$#@++...++@#%%&&====&%$#@+..++@#%&&;;%%%&&%%%#@.....++##%***%#@@....@@$%&&&&=&=&&&&&$#@.@#$%&&&%%&&=%%$$#@+.+@@$$$&&&=&&&$$##@+.",
+".....++@##$$&&#@++...+@#===*******%##++.+@#%;;;-******;==#@.@@#==;**;;;**-*-$$@.+@#===******-;;;%#@.@@#===**;;;**;==#@@.+@#===****-;;==&#@+.+@#==;**;;;-****=&#.@@#%;;;-******&%%@@...+@#$%;;-**%#@+.....+@#&==;;*****$#@+...+@#%&=;;&=&*-==&#@......+##%*-*$$@++...@#&=************==#.@#&=***;;;;;**&%%@@.@@#==;**;;;**;==#@+.",
+".....+++@##$%%#@++..+@@#=;;*******%$#@+.+@#%;;;-****-*;;=$#.@#$=;;*-;;;-*-*-%$@.@#$=;;*-***-*;*;$#@.@#$=;;*-;;;-*;;=$#@.+@#&=;**-**;;;==#@+.@#$=;;**;;;-*-**=&#.+@$$;;**-***-*=&&#@...+@#$%;;*-*%#@@.....+@#&==;;*****$#@+..++@#%%&;*&&=*-==&#@.....++@#%***%#@++...@#&=*-*-***-*-**==#.@#&=*-*;;;;;-*=&&#@.@#$=;;*-;;;-*;;=$#@.",
+".......++@@@%%@@+....@@$==;*******%$$@+.+@#%;;;*-*****;;;$#.@#$=;;*-;;;**--*%$@.@#$=;;******-;;;%#@.@#$=;;***;;**;;=$#@.+@#&==***--;;=&&#@+.@#$==;-**;;-*-**=&#.+@#%;;;*******=&&$@...+@#$%;;-*-$$@++...++@#&==;;*****$#@++..++#%&&;;==&-*==&#@....+.+##$***$$@@....@#&=***-*-***-**==$.@#&=*-**;*;;**=&&$@.@#$=;;**;;;**;;=$#@.",
+"........++@@@@@++...++#$%&&=====**&%%@@.+@#$;;*;;%%%&&***%$.@$%***=&&%%&&*-*%$#.@$%***&=%%&;;;;;$#@.@$%**-&=%&&=&***%$@.++@#$%==;;;%%$$#@@+.@$%***=&%%&;;;;;%$#.+@#%;;;;;%&%==;;;$#....@@#$$%***%#@++....++@##$%%%&&**%#@++.++@#%&&*****==%$#@@.....++@$%*-*%#@@....@#$%;;;==;;;=;==;=$.@#$%;;;;;&%&==;;;$#.@$%***==%%&&&***%$@.",
+"..........++++++.....@@$%%&=====**&%%#+.+@#%;;;;;%%%&&-**%$.@$%***&&$%$&&*-*%#@.@$%**-&&%%%;;;;;%#@.@$%***=&&%&&=*-*%$@.++@#$$&=;;;%$##@@+..@$%***=&%$%;;*;;$#@.+@#%;;;;;%%%==;;;$#....++@#$%-**%##+......++@@##$%%%**$$@+...+@#$&=***-*=&$$#@+......@@#$***$$@+....@@#%;;;===;=;;==;=$.@@#%;;;;;%%%==;;;$#.@$%*-*&&%$%&&-**%$#.",
+"...........++....+..+@#$;;;**;;;--&&%@@.+@#%;;;&&%$%%%***%$.@$%*-*%$$##$$%&%$#@.@$%***%%$$%&=;;;$$@.#$%---****-**--*%$#.+.+@#$===;=$$#@+++..#$%***==%%%;;;;;%#@.+@#$;;*&&$$%%&;;;$#....++@#$%***%#@@......+++@@@#$%%**%#@@...+@#%&&*--*-&%$#@++......+@$%*-*%#@@....+@$$;*;===;;====;=$.@@$$;;;=&$$%%=;;;$#.@$%***%$$$$%%***%$@.",
+".............+......+@#$;;;*-;*;**&&%#@.@@#$;;;&&$$$$%***%$.#$%***%$$###$%%%$@@.#$%***%%$$$&=;;;$#@.#$%-*-**-*-***--%$@..++@#$===;=$#@++....@#%*-*==%%&;*;;;$#@.+@#%;;;&&$$$&=;;;$#.....+@##%***%$@+++........++@#%%**$#@+..++@#%%=**-**&%$#@++.....+@##$***%$@+++..@@#%;;;&==;=;===;=$.+@#%;;;&&$$$&&;;;$#.#$%***%$$##$%***%$#.",
+"....................+@#%;;***;;;--&&%#@.+@$$;;*&&%$$%%***%$.@$%***%$$####%$%##@.#$%***%$$$%&&;*;%#@.#$%-*-*****-*-*-%$#..++@#$==;==%#@@++.+.@#$===*******;*;$#@.+@#%;;;&&$$$%&;;;%#.....+@#$$*-*$$#@+.+......+.@@#$%**$$@++..+@#%&&**-*-&%$##++...+.+@@$%***$$#@+.+.+@#%;;;==;=;====;=$.+@$$;;;&&$$$&&;;;%#.@$%***%$$$$$%***%$#.",
+"....................@@$%***&&&&&**&&%#@.@@$%;;;;;%$%&=*-*%$.#$%*-*=&$###$%%%$#@.@$%*-*==%%%;;;;;%##.@$%***;;=&&&==;=%#@..++@#$===;=$$#@+++..@@#&==*-*-*-*;;;%#@.@@#%;;;&%$$$%=;;;%#.+.+++@#$%***%$#@@+.....+.++@#$$%**$#@++.++@#%&=;;=;=**%$#@+..+.+@@#$%*-*%$#@@+..@@#%;;;&&;=;;===;;$.@@$%;;;&&$$$&=;;;%#.@$%*-*=&$$$&=-**%$@.",
+"....................@@$%***%&%&%**&&%$@.@@$$;;;;;%%%==***%$.@$%***=&%$$$$&&%%$@.@$%**-&&%%%;;;;;$$@.#$%*-*==&=&=&;==$$@..+@##%==;=;%$##@@+..+@##%%&&&&&==;;;$#@.@@$$;;;&&$$$&&;;;%$...+@@#$$%-**%$$#@@+..+.+@@@@#$%&**$$@+..+@@#%&=;*=;;**%%$#@...+@@#$$%*-*%$$#@@+.@##%;;*&=;;=====;=%.+@$$;;*&&$$$&&;;;%$.@$%**-==%%%&=***%$@.",
+"....................@@$%***%&%&&**=&&##.@#$%;;*;;&%%==*-*$$.@#%***==%%%%%&&&%%@.@$$***==%%&;*;;;%$#.@#%**-;;&&&=&;;=$#@.+@@#$%===;=%%$$#@++.++@@#$&&&&&==;;;$#@.@#$%;;;&%%%%%=;;;$$.++@@#$$%%*-*%%$$#@+..+++@##$$%%&**$#@++..@#$&&=;;;=;**&%%$#..++@#$$%%***%%$$#@+.+#$%;;;=&=;;;===;;$.@#$%;;;&&%$%&=;;;$$.@#%***==%%%==*-*$$@.",
+"....................+@$%*-******-****$#.@@&=***-*-**-*===$#.@#$===**********&&#.@#$==;********-*=%#.@#$===*-*-******%#@.+@#&=;*-*-***==&#@+..++#$$&&===;;;;=$@@.@#&=--*-*%%%**-*-&&..+@@&==*-*--**==&#@...@@$%%&&=;;;;$#@+..+@#$***;;%&%--***&%..+@@&==-*---**==&#@.@#%=*-*;;;==-*;=*-&.@#&&*-***%%%**--*=&.@#$===*******===$#@.",
+"....................+@#$**-*-*-**-***$#.@#%=-*-*******==&#@.@@#&==-******-**&%@.@@#&==*-*-*-**-*&&#.+@#&==*****-****$#@.+@#&=;**-*-**==&@@+..+@@$%&====;;;==#@@.@@&&*-***%%%***-*&&..+@#&=;**-*-**==&@@.++@#%%&&=;;;;;$@@++.+@#$***=;%%%-*-**&&.++@#&=;**-*-**==&@@.@#&=*-*;;=;=**=;**&.@#&=**-**%%%***-*&&.@@#&==**-*-*-==&#@+.",
+"....................+@@#%%%&&&&&%&&%%##.@@$%%&&&%&&&&%%$##@.+@##$$%%&%&&%&%%$#@.+@##$$&%&&&&&&&%%#@.+@##$$&%&&&&%%%$#@@.+@#$%%&&&&&&&%%$@@+.+@#$%;;;;;;;;%$##@+.@#$%&&&&%$$$&&&&%%$..+@@$$%%&&&&&&%%$@@..+@#&==;;;;;%%#@++..+@##&%&%%$$$&%&&&$$..+@@$$%&%&&&&&%%$@@.+@$%&&&%%%%&&&%%&&%.@@$%&&&&&$$%&&&&%%$.+@##$$%&%&%&%%$##@+.",
+".....................@@@$$%$%%%%%%%%$#@.+@#$$%%%%%%$%%##@@+.++@@##%%%%%%%$$$#@@.++@@#$$%%%%%$%%%$#@.++@@##%%%%%%%$$$@@+.++@$$%%%&&%%%$$#@+..+@#$%;;;;;*=;$$#@+..+@#$%&%%%$#$%%%%%$#..++@#$$%%%%%%%$$#@+..+@#&==;;;;;%$#@+....+@#%%%$$$##%%%%%$#.+.@@#$$%%%%%%%$$#@+.@@#$%%%%%%$%%%%%%%$.+@#$$%%%%$##%%%%%$#.+++###%%%%%%%##@@++.",
+".....................++@##$$$$$$$$$$#@+.+@##$$$#$$$$$##@@++..++@@@#$$$$$$$##@@+..++@@@$$$$$$$$$$##@..++@@@#$$$$$$##@@++.++@##$$$%%%$$###@+..++#$%=;;;;;=&$#@+++.+@##$$%$##@@$$$$$##..++@###$$$$$$$###@+.++@@&==;;;;=$#@++...+++@$$$##@@##$%$$##...+@@##$$$$$$$###@+.+@@#$%$$#$#$$$##$$#.++##$$$$$#@#$$$$###..++@@##$$$$$##@@++..",
+"......................+++@@@@@#@#@@@@++..++@@@@#@@@@@@+++......+@@@@@@@@@@@@++.....+++@@@@@@@@@@@++....+@@@@@@@@@@@@+....++@@@@@@@#@@@@++.+.++@@#$$$$$$$#@@++....++@#@@@@@@@@@@@@@+....++@@@@@#@@@@@++...+@@##$$$$$##@@.+.....++@@@@@+@@@@@#@@+....+@@@@@@#@@@@@++..++@@@@@@@@@@@#@@@@@..++@@@@@@@@@@@@@@@+....+.@@@@@@@@@++....",
+".......................++++@+@@+@@++++....+++++@+@@++++.+........+++@+@@++++.+.....+.+++@+@@+@+++++......+++@+@++++.+.+..++++@@@@@@@@+++.....++@@@######@@++.....++++@@+++++@@+++++....+.++@+@+@+++++.....++@@#####@@+++.....++++@++++.+@+@++++.....+++@@+@@+++++...+.++@@@++++@++@@+++..++++@@++++++@+@+++....+.+++@++++.......",
+"......................................................................................................................................................................................................................................++++++..........+.+++++++........+.++++++.................................................",
+"....................................................................................+.+..+........................................................................................................................................++++@@@@++.+.........++@@@++........+.++@@@@++.+..............................................",
+"....................................................................................+.++++.........................................................................................................................................+@@@$$#@@+........+++@#$$@@++......+.@@@$$@@@++..............................................",
+".................................................................................+.+++@@@++++....................................................................................................................................++@@##%%#@@++........+@#$%$#@+........+@##%%##@@++.............................................",
+"..................................................+..............................+.+@@@#@@+++....................................................................................................................................+@##$$%%##@.+......++@@$%%%#@@+.......+@@#%&$$##@++............................................",
+".....+.+...+................+.++.+.+.+......+.+..+...................+.+..+.......+@#$$&&#@++.+.........++......+...........+..+..+...+...+.......+...+.....+.......+.++...+.+.+.......+..+.....+....+.......+.+.++.+.+.+.......+@@#====&#@++........+@#$***$#@+.......+@@#&====#@++............................................",
+"..++++++++++++++........++++++++++++++.....++++++++++++++........++++++++++++.+.++@@$%%&=##@@+++......++++++..+.++++......+++++++++++++++++..++++++++.+.++++++..+.++++++++++++++....+.++++++++.+++++++.....+.++++++++++++.......+@#$=;;&&#@++.+......+@#$***$#@++.......+@#&&;;=$#@++...........................................",
+"+++@@@@@@@@@@@+++++...++++@@@@@@@@@+@++...+++@@@@@@@@@@+++.....+.+++@@@@@@+@++...+@#%%&;;$$#@@+++.+.++@+@@+++++@@@@++++.+++@@@@@@+@+@@@@@@+..+++@@@@+++++@@@@@+..+++@@@@+@+@@@@@+++.+++@@@@+++++@@@@@++...+++@@@@@@@@@@@+++....++@#$***%$#@+........++@#%***%#@+.......++@#$%***$#@+............................................",
+"++@@####$#####@@+++.+.++@@##########@@+.++@@@##@#@#####@@++....++@@@#######@@@+.++@#%&&;;%$$##@@++..@@@#@#@@@+@@@#@@@++.++@@#####@#@#####@@.+@@@###@@@@@@@##@#@.+@@#####@#@####@@++.@@@##@#@@@@@@##@@@@...+@@@####$####@@@+.....+@#%***%##@+........++@#%*-*$$@@.......+++##%***%#@++..........+.+..............................",
+"+@#$$$%$$$%$$$##@@+..+@@##$$$%$%$%$$$#@.+@@#$$$$$$$$$$$##@+....+@@#$$$%$$$$$#@@.+@#$&&=;;%%%$$#@@++.@##$$$##@###$$$#@@+.+@#$$$$$$$#$$$$$$$#.+@##$$$$#####$$$$##.+@##$$$$$#$$$$$$#@+.@##$$$$##@##$$$$$#@.++@@#$$$%$%$%$$$#@@....++##$***%$@++........++##$***%#@++........@@#%***%#@+.........++.+++++++.+.+.....................",
+"@#%&***;;***;;%%$@@.+@@$%%;;***;=***&&#.+@#&==**&&&**;;=#@+..+++#$$=;***;====#@.+@#$***-******%$#++.#&&***$$##$**===#@+.@#%&*****%%%*****&%.@#&&***==$$$=&***&&.@#$*****%%%*****$#@.#&&***=&$#$&=***&%#.++@#==;*******===#@...+.@#$%*-*%##++........++@$%***%#@@.........+@$$-*-$$#++.....++++@@@@+@++@++++.....................",
+"@#&=***;;***;;&%%#@.+@#%%&;;***;;***&&#.@@#==;**==&**;;=$#@...@@#$%;;***;;;==$@.+@$%**-*-*****%$#@+.#&&***%%$$$**;==$@@.@#&=*****%&%*****=&.@#&=***==%$%==***=&.@#$*****%&%*****$#@.#&&***==$$$==***=&#..@##==;*******;==#@....+@#$%***%#@+..........@@#$***$$@++........@@#%***%$#@++....++@@@#@##@##@#@@+.....................",
+"@#&=***;;***;;=&%$@.@#$%&&;;***;;***=&#.+@#==;**===**;;;$#@.++@#$%%;;***;;;;=$#.+@#%***-******%$#@..#&=***%%$$$**;;=$#@.@#&=*****&&&*****=&.@#&=***;=%%%;;***=&.@#$*****&&&*****$#@.#&=***==%%%==***=&#.++#$=;;*******;==#@....+@#%%-**%##++.........@@$%*-*%#@@.........+@#%*-*&%#@++..++@@##$$$$$$#$$###@.....................",
+"@#$%***-*=&=;;***$#.@#$***;;=&=*-***%$#.@@#%%&*****=&;==$#@..+@#==;**==&;;;;;$@.+@#$==;;;=&&&%##@++.#%%***&%$$$&=;;;$#@.@#$%***==%&%;=***%$.@#%&*-*&&;;;&&***&%.@@$&&=**&&&**=&&$@@.#$%***==%%%=;***%$@.+@##;;;==;=;*-&&%#@...++@#=;***%#@+.........++@#$***$$@++.......+@@$$***;=##++...+@#%&&**===%%;;=##.....................",
+"+@$%;;;==%%%%%***%$.#$%***&%%%%==;;;%$@.+@@$%&*-*-*&&===##+..+@#=;;**&=&;;;;=$#.+@@$&==;;=&%%%#@@+..#$%***&%$$$==;;;$#@.+#$%***==&%&==-**%$.@#%&***&&;;;=&-**%%.@@#%&=**&%&**=&%#@+.@#$&==**%%%**==&$#@..+@$=;;;===;*-&%%#@...+@@$==***$$@++........++@$%*-*%#@++........+@#%***;=##++..+@@$%&&**===%%;;;$#.....................",
+"+@#$;;;==$%$%&*-*%$.@$%-*-%%%$%&=;;;%#@.++@#$%**&&%%$$$##@+.++@#%&&*****&=&&%#@.++@#%&=;;%%$##@@+.+.@#%;;;&%$$$&&;;;$#@.+@#$&==;;%%%;;==&$#.@##%;;;==--*&=;;;%$..@@#$$==***=&%$#@@+.+@$&&=**&%%**=&&##+.+@@#%%&&&--*==%$#@+....@@#=;***%#@+..........@@#$***$$@@........++##$***;=#@++..+@#$***==**-**;==$#.....................",
+"+@#%;;;==%%%%&***%$.#$%***%%%%%=;;;;$#@.++@#$%**&&%$##@@@++.++@#%&=**-**=&&&%$@.++@#%&=;;%$##@@++.+.@$$;;;&%##$%&;;;%#@.++@$%&=;;%%%;;&&%$@.+@$$;;*==*-*==;;;$#..+@#$$&=*-*=&%##@++.+@@$%%*-=&=**&%$@@+..+@@$%%&&***=&$$#@+....+@#%%***%##+.+........@@$%*-*%#@@........++@$$***%%#@++..+@$%***==***-*;;=$@.....................",
+"+@#%;;;-*=&=;;***$$.@$$***;;=&=*-;;;%#@..+@@#%**&%%##@@@++..++@#%&&*****==&&%##.++@#%&&;;%$##@@@++..@#%;;;&%$$$&&;;;$$@..@@#%&&;;%&%;;=&%#@.+@#%;;;==-*-=&*;;$$.++@@#%&=***=&$$@@+....+@#$==*--==$#@+....+@#$%%&&--*=&%##@+.....+@#%-**%#@++.........@@#$***$$@+.........@@#%*-*$$@++...+@#$-**==-****===#@.....................",
+"+@#%;;;-*===;****$#.@#$***;;===-*;;;%#@..+@#$%**&%%##@@+++..++@#%%&&=;=;**;;=$#.++@@%&&;;%$$###@@@+.@#$;;;&&$$$&&;;;%#@..+@@$%%**&&%**%$#@@.+@#$;;;;;*****;;;$#..+@#$$==***==%##@++..++@#$==-*-==##@++...+@@$%%**;=;&%&%$@@....++##%***%##++.........+@$$*-*%##++........+##%***%#@++...+@@#%%%$$%%%&&%$$#@.....................",
+"+@#%;;;;;***;=&%%#@.+@#%%&;;;;;;;;;;$$@.+@@#$%**&%%$#@@++....@##%&&&&;=;**;;;$#..+@@%%=;;%%$$$$##@+.@#%;;;&&%%%&&*;;%$@...+@#$%**&&&**$$@@+.+@#$;;;*;*****;;;$#.+@@#$%==-**==%$#@@+...+@@$&&*-*%%#@+....++@#$%&**=;=&%&%%#@....++@#$*-*$$@++........+@@#%***%#@+........+@@$$-**$$@@.....+@@$$$$$$$$$%$$#@+.....................",
+"+@#%;;*;;***;=%$$@@.+@@$%%;;;;;;;;;;%#@.+@#%&&-*==&&%##@++...@@$;;;;;=====***%#..+@@$%&*-==&;;=&&#@.@#$;;;;;&&&;;***%%@..+++@#$==**-==$#@++.+@#$&==*-&&&--==&$@.+@#&&=**&&&**==&#@+..+@@#$==;;;$$@+++....+@$==;**=====;;=$@....++@$$***%##@+.........+@#%***$#@@+........+@$$**-$$@++....++@@@@@@#@##@@@@++.....................",
+"+##%;;;&=%%%$$$#@@+..+@@#$$%%%&==*;;$$@.+@#&&=**==&&&$#@+++.+@#$;;;*;===;=--*%$..++@$%&**===;;==&#@.@@#=;;;;&==;;***%%#....+@#$==-**;=$#@+...+@#&&=-*&&&**=&&#@.+##&==**&&&**==&#@@.++@#$%=;;;=%##+.....+@##=;;-*====;;;;$#.....@@#$***%%@@++.......++@#$;;;%#@+.......++@#$%***$#@+......+++@@+@+@@@@@+++......................",
+"+@$%;;;==%%$$#@@@++.+++@@@#$$%%&&;;;%##.@@$&&=*-===&&$$#++..++@$;;;;;=====*-*$#..++@#$%**===;;==&#@.+@#==;;*&=&;;***&$#...++@@$==***==#@@+..++@#%&&**%%&-*&&%#@.@@$===-*&%&**===$@@.+@#$%%;=;;;$#@++....++@$==;**====;;;=$#.....+@#%***%$#@++.......++@#$=;=$#@+.......++@#%%***$#@++.........+.+.+.+.+..+......................",
+"@@$%;;;=&%$$#@@+++.....++@@#$$%==;;;%$@.@#$*****;;;**%$#@++.+@@#==;=;*****&&%$#...+@@#$&&***;;&%$@@.+@##$%;;***;;***&%@.....+@#$%;;;%$#@+....+@@$%%==%%$==%%$@@.@#$***;;&%&*****$#@.@##***-****$#@++....+@@#===*******===#@....++@@$***%%#@++........++@#===#@+++.....+.@@#%%***$#@+.......+.......+.+..........................",
+"@#&=--***=&&#@++.......+.+@#%=&**-*-&&#.+##*****;;;**$$#++...+@#&&===*****%%%#@....+@@#%&***==%$$@+.++@##$=;***==***%%@.....++@#$;==$$@@++...++@#$%&&$#$&&%$$@+.+##***;=%%%*****##+.@#$***---**$#@+......+@#&==*******==&#@.....+@@#%%%==$#@++.......++@##$##@+.......++@##==&%%#@@+............................................",
+"@@&&**-**=&%@@+.........++@#%&=**-**=%#.+@##$$$$$$$$##@@+.+.++@@##$$$$$$$$$#@@+...+++@@##$$$$###@@+..++@##$$$%$$$$$$##@.....++@@##$##@@+......+@@@#########@@++.+@##$$$$$##$$$$##@+.+@#%&&&&&&%$@@+.....++@@##$$%$%$$$$##@@......+@@$$%&&##@+.........++@@@@@+++.......+@##&&%$$@@+.............................................",
+"@#$%&&&&&%$$@++..........++@$$%&&&&&%$@.++@@##$#$####@@++.....+@@@@########@@@......++@@@####@@@++....+++@@####$####@@+......++@@@#@@@+........++@@@@+@@@@@++++.++@@###@#@#@###@@@+.+@#$%%%&%%%#@+........+@@@######$###@@+.......+@@####@@+++........+.+@++++.........++@@####@@++.+...........................................",
+"+@#$%%&&%$$#@+++.........++@#$$&%&&%$#@..++@@@@@@@@@@++.......+++@@@@@@@@@@++.+......+++@+@@@@+++.......++@@@@@@@@@@@++.......+++@+@++.+........+.+++++.+++++...+++@@@@@@+@@@@@@++..+@@$%%%%%$$@@++........++@@@@@@@@@@++++......++++@@@@@++...........+..++............++@@@@@+++..............................................",
+"+@##%$%$%##@@+...........+++@##$%$$$$#@..+.++++++++++.+........+..++++@++.+.+.........+.++++++..+.......+..++++++++............+.+.+..................+...+......+..+.++.+.++.++.+....@@@@#@#@@@+..........+..++++++++++..........++.+++++...............................+++++++................................................",
+"+++++++++++++++...............................+.++.+.+...............+..+................................+.+....+.+...........++.++..............+.+++++++++................................+.+.+................+..+...........................................................................+.+.............................",
+"+++++++++++++++................................+++@+++..............++++++++...........................++++++.+.+++++.+........+@+++++...........++@@@@@@@+++.+...............+.........+.++++++++.+...........++.+++.........................................................................++++++++..............+..+........",
+"+++++++$$+$$$@@+.............................+++@@@@@+++........++++@@@@@++++.......................++++@@@@@+@+@+@@@++.....+++@@@@@++........+++@@@######@@@++........+.++.+.+.........+.++@+@@++++........+.++++@+++++....................................................................+++++@@@+++++........++++++++++.....",
+"@++++$$%%%%$$%$$+...........................+.+@##$##@++.......+.+@@@@###@@++........+.+....+.+.+....++@#####@@@@###@@+......+@##$#@@++......+.+@@#$$$$$$$$#@@+......+++++++++++.+.....++@@@@##@#@@++++......++@@@@@@@+++..................................................................+++@@#@#@#@@+++......+++@@@@@@++++...",
+"@++$%%%===%$$%%%%...........................++@##===$#@++......++@@$$%%%%%#@@++...++++++++..++++++..++@#%%%%%$#$%%%%$#@....+++@#===$@@+......++@@#&&*****==&#@+....+.++@+@+@@@@+++...+++@@#$$%%%$$#@@++....+.+@#$$%%##@++................................................................+++@@#$$%%%$$#@@++...+.+@@@#####@@++...",
+"@++%%=********=%%+............+.............+@@$$;;;$##@+++...+++##$%%&&%%##@+.....++@+@+++@+@+@+++.+@##&=&&%%$$%%&&%$@.....+@#$;;=$#@+.......@@#$==*****===#@@...+.++@@#@@@@@#@@+..+.+@##$%%%&%%$$$@@+.....+@@$$%%%%$#@++................................................................+@##$%%%&%%$$##@+....+@@#$$$$$$#@@+++.",
+"##$%=**********=%$.........+..+...........+++@#%&***&%##@++...+@@$$*******%$#@+.+++@####@@@@@####@+.+@#%***-*%&&*-***$$.....+@#$***$#@++....++@$%%**====;;;;$#+...++@##$%&##$==#@++.++@@%%&*******&%%#@...+++@#&==&=**$@@++.........+...+..........+.+..+.++............................++@@%%&*******&%%#@....+@#==*****$$#@.+.",
+"@##%=******-*-*=%$+.......+.+++++.+......+.@@#$&&-**&%$##++...+@#$%*******%%#@+..+@@$$$$$#$#$#%$$@+.+@$$-*-*-&%&-*--*%#....+@@#%***%#@+.....+@@$%&**=====;;;##@....++##$&&#$#==#@++.+@@#&&=*******=&&#@....+@#$==&=&**$#@+.......+.+.+.++++++++...++++++++++++++.+......................+@@#&&=*******=&%#@...+@@#==*****%$#@+..",
+"@@$$**---*******%%+.......+.++@++++......++@#$$&&*-*&&%$#@+.+.+@#$%*****-*%$#@+..+@#$%%%$%$%$%%%$#@.+@#%*-**-&&&*-*-*%#.....+@$$*-*$$@@.....+@#$%&-*===;=;;;#@@....++#$$%&##$==#@++.+@#$&&=*******=&&$#..+++@#$=====**$#@++......++@+@++@+@++++.++++@@@@@@@@@@@@+++............+........+@#$&&=*******==&$#....@@#=;*****%$#@+..",
+"+@#%*****-----**%$........+@@@##@+++....++@#%&=*****-*&%$@+..+@@%%&**&%%%%$##++.++##==;*******;==##.+@#$&&=**%&%**=&&$#....++@#%***%#@++....@@#&&=*-===%&&%%$@+...++@@##$$###$$#@+..@@$%***;;***;;***$$...+@#$$;;;;;**$$@++....+++@@#@#@@#@#@@+.++@####$#$#$###@@++.........+.+..+..+...+##%*****-**;;***%$...++@#%%%&&&&$##+++.",
+"+@$$******----**%%+.....+.+@###$#@+++...++@#&&=*-****-%%$@@..+@#%&&**%%%%$$#@++.+@#$=;;*******;;=$#.++@#&&=**&%&**=&&#@....++@#%***%#@++....@#$&==*-===&%&&%#@+.....+@@@##@@#$#@@++.@#$%***;;*-*;;***%$...+@#$%=;;;;**%##++....+@@##$#$$#$$###@.+@##$$%$%$%$%$$$#@+...+++++++++++++++...@#$%********;;***%$....+@@$%%%%$%##@++..",
+"+@#%***-**-*-***%$.......++@$%%%$@++....+@#$=;;==%%%;;&%$@+.++@#%%=;;%$$##@@++..++#$=;;;;===;;;;=$#..+@#$%%**===**%%$#@....++##$-**$$@+.....@#$***==***;;&%%#@+.....++@@@@@+@@@++...@#&=;;;-*===;;;===&..++@$%&;;&&&**%$#@+..++@@#%&===%%;=;%%@.@#$*************$#@...+++@@@@@@@@@@@++..@#&===;**===**====&.....+@@@#####@@++.+.",
+".@#%************%+......++@@%%%&%#+++...+@#$;;;==%%%==%%$@+..+@#&&&;;&%$##@@+...+@#$=;;;;&&=;;;;=$#.+.+@#%%**===**%%#@@....++@#$***$#@@+....@$%***;=-*-;;&&%##+........++.++++++..+.@#&=;;;**===;;=;==&..+@@%%&;;=&=**%$#@+..+@@#$==;=;%%;;;&%#.@#$*************$$@.+++@@#####$####@@@+.@#&====-*===*-=;==&.....++@@@@@@++++....",
+".@#%***-**-*-*-*%+.......+@@%&&%%#@+....+@#$;;;=&%%%==%$#@+.+@##&&=;;%%%$#@+++..+@#$;=;;;===;;;;;$#..++@#$%**===**%$$@+.....+@#$*-*%#@+.....@$%***=;**-;;&&%$@@...........+...+.....#$&=;;;-*===;;====&.+.@@$%&;;&&&-*%$#@+.+@@#$$==;;;&&;;;&%@.@#$*************%$@..+@##$$$%$$%$$$##@+.#$===;=**===**====&.........+++++++.....",
+"+@#%*****----***%$.......+@#$$%%%#@++...+@#$;;;=&%$%%$$#@@+.+@#$***-****%%@++...+@#$;;;&&%&%==;;;$#..++@#$%=;---;;%$#@+....++@#$&&&$#@++....@#%**-;;===;;***%#@........+............@$=;=;;**%%%=====;=...+@$%%;;;;;;;&%$@+.+@#%&&**&&&;;;;;$$@.+@#%%&&&&&&=&***%$#.+@@&&=**********##+.@#=;===-*;;;;;===;=.....................",
+".@$$****-*******%$......++@#$%%%%#@++...+@#%;;;&&%%%$%$#@@+.+@#$*-*-****&%@@++..+@#$;;;==%&%==;;;$#....@@#$;;*-*;;%$#@+.....+@#$&&&$#@+.....@#$***;;&=&;;-**%$@.....................##=;;;;**&&%&====;=.++@@$$%;;;;;;;%%$@+.@@$&==-*&=&;;;;;$#@.@@#$%%%%%%&&=***%$@.+@@&&=**********$#@.#$=====*-;*;;;===;=............+........",
+"+##%*-*****--***%@.......+@#&====##++...+@#$=;;;;&&&==%$#@+.+@#$&&&*-==&$$#@++..+@#$;;;;;&=&;;;;=$#..+.@#$%==-*-==%$#@+.....+@#$;;;$#@++....+@@$%&;;-**;=-**%$@.....................@#%&**********;;;&%..++@$%&*******%%$@+.@#$***=;===*-&&%$#@.++@@####$#$$%***%$#.+@@$%%&&&&&&&&&%#@+.@#&&;;;-*===;;;;;&%.....................",
+"+##%***---******%@......+@@$&====$@@++..++#$=;;;;&&&;;%%#@+..@@$%==**&=&%$#@@++.+@#$=;;;;===;;;;;$#...+@#$%=;*-*;=%$#@+....++@#$;;;$#@+.....+@##$%%%=&=*-;;;$#@.....................@#%&**-**-*-**;;;&%..++@#%%*******%%$@+.+#$***=====**&&%$@@..+++@@@@@##$%***%$@..@@$$%%%&&&&&%%$#@+.@#%&;;;**===;*;;;&%.....................",
+"+##%*----***--**$#......+@#$**-*-$$@+...++@#==;;;==&;=%$#@+.+@@$%&=*-==&%$##@@+.+@#$=;;;;&==;;;;=$#...+@#$%==-*-=;%$#@+....++@#$;;;$#@++....+@##$%%%&&=*-;;;$#@.....................@#%%*********-;;;&%..++@#$%*******%$$@+.@#$**-=;===-*=&%$#@..++++++++@@#$***$$@..+@##$%%$%$%%$$$@@+.@#%&;;***===;;;*;&%.....................",
+"@+$%**-*****-***%$......+@#%***-*%#@@....+@#$%%;;-*-;;%$#@+..@#$&==**%%%%$%$$@@..@@$==;*****-*;==$@...+@#$%=&-*-&&%$#@+.....+@$$***%#@+.....+@#&==&&%&%**=&&##+.....................+@#%=;;;;;;=*;;;=$#...+@#$$%&&=&&&$$@@+.@@#&&=**=&=;;;;;$#@......+++++@@#%%%$@@..++@@@@@######@@@+..+@#$=;;**===**;;=$#.....................",
+"@+%%******-*****%$......+@$$***-*%##+...+++@#$%;;-*-;;$#@@+.+@#$&==-*&%%%%%%%#@.++@$===*******;==#@...+@#$%&&*-*=&%$#@+....++@#%***$$@@.+...+@$&==&&%%&**&&%#@+.....................+@##=;;;;;;;;;;;=$#..+.+@##%%&%&%$##@++.+@#%&&**=&=;;;;;$#@..........++@@$$$#@+..+.++@@@@@@+@@@++...+@#$==;**===**;==$#.....................",
+"#+$%=**********=$$.....++@#%*-*-*%#@@.....+@@##%%***%$$@@+..+@$$*-**-********%#.++@#%%%%%%$%$%%%%#@..++@#%%**-*-**%%$@+.....+##$***%#@++....@@$==;&&%&%**&%$#@+.....................++@#$%&==***;;%%$#@...+++@@@######@@++..+@@#$%==;;;&&;;;&%#...........+@@@@@@++...+++.+.+.+++++.....++@#$%%==***=;%%$#@.....................",
+"#+%%==********=%%#......@@#$***-*$$@++.....++@#$%*-*%$#@++..+@#%*-*-******-**$#.++@@$$%$$$#$#$$$$@@..++@$$&**--***%$$@+.....+@$%*-*$$@+.....@##;;;*******%$$@++.....................+++@#$%&=***==%$#@@....+.+@@@@@@@@+++.+..+@@#$&==;=&%;;;&%#............++@@+++........+.+......+....++@@#$%==***;=%$#@@.....................",
+"@+$%%%%&&%%&&%%%##......+@#$*-*-*$#@++......+@@#$***$#@++...+@#$**-*-********$#...+@#####@#@#@$##@+...+@#$%***--**%$#@+....++@#$***%#@++....+@$=;;*-*****$$@@+.......................++@##$&&***=&$##@+.....++.+++@+++++.....++@@#&&===%%;;;%$@.............+.+.+.........................+@##$&=***=&$$#@+.....................",
+"@++$$%%$$%%$$%$+#@......+@#$==;==$#@+........+@@#%%%##@+....+@#$%&&&&&&&=&&%%$@...++@@@@@+@++@@@+++..++@##$%&&&&&%$$#++....++@#$***$#@+.....+@#%%&==&&&%%##@++.........................++@##$$$$$##@@+.........++.+............+@@##$$#$#$#$##@...............+............................+@@@#$$$$$##@+++.....................",
+"+#####$##$#$$###@+.....+++@#&&===$@@++.......++@#$%$#@+.+...++@#$%%%%&%&%&%%$#@.....++++++.++.+++.....++@##%%%%%%%##@++.....+@#$***$#@++....+@@$%%&&&&%$##@++........................+..++@@@####@@++...........................+@@@@@#@#@#@@@+.............................................++@@@####@@++.......................",
+"+@@@@@@@@@@@@@@+++.......@@#&&=&&#@++........+.+@@@@@++......++@@##########@@@+...+......+......+......++@@@######@@++.....++@@$%%%$@@+.....++@#$$%%%%$$#@++............................+.+@@@@@@+@.+............................++@@@@+@+@@+++.............................................+++@@@+@@++++.......................",
+".........................++@#####@@+...........+++@+++........++@@@@#@#@@@@@+++......+................+.++@@@@@@@@+++.+......+@#%%$#@+.......++@@@@#@#@@++...................................+..++.+..............................+....++++.++...................................................+++.++.........................",
+"........................+.++@@#@@@+.............+.++..+.......+.++++++++@++++..............................++++++++.........+++@#$$@+++......+.+@@@@@@++++.+.................................+......................................+.....+........................................................+............................",
+"......++++++++................................+++++++++..........++++++++..................+................................+++++@+@@@+@++.................................................+.++++...............................................++@@@@@@@+..........+@@@@@@++...........++@@#@#@@@++............................",
+"....+++@@@@@+++...............+.............+++@@@@@@++........+++@@@@@@+++...............+.+................................+@@@@#@#@#@@@+..............................................++++@+@++.............++++.+...........................+@@##$##@+++........@@##$##@+++.....+...+@#$#$$##@@+++.++.......................",
+"....+@@#$$$#@@++...........+..+.+...........+@@#$$$$#@@++......+@@#$$$$#@+++..........++++++++...........................+++@@@$$%%%%%%$$@@..............................................++@@###@@++.........+.+++@++++.........................+@$%===$$@++....+...@$%===$$@++..++++++.@$$=====%$#@+++.+++..........+.++.......",
+"..++@@#$%%%$#@@+...........++++++.+.......++@@#$%%%%$@@++....+++@#$%%%$$#@+++..........+++@@@+++........................+.+@@##%%%%&%&%%%#@............................................+++@@$$%$@@+.........++@@@@@#@@+++.......................@@%%===%$@@+++.++++.@%%===%$@@++++++@@+.@$%=;;;=%%$@@+++@@@.........++++++++....",
+"..++@#$$%&%%$#@@++.......+.+@@@@@++........+@#$%%&&%%##@++....+@#$%%&&%%$#@++.......+++@@@#@@@++.+......................++@##$%%&&&&&&&&%#@............................................++@##$%%%#@@+........++@##$#$##@@++......................@#%&;;;%%@@+.+++@+@.#%&;;;%%#@+++@@#@@@.@%%=;;;;%%$#@@@@@@@.......+.+@@@@@++....",
+"+++@#$;;&=&;=$#@+.+.......+@@$$$@@++......++@#=;&&=;;%$#@++...@@#=;&==;=%$#+++.......+@@$$$&%@@.+.....+...+.............+@@$==;**---*-***$#..........................................+.+@#$&=*-*$#@++.....++@@#%&===%%#@+++.....................@@%%***&%#@+++@@@##.@%%***&%#@@@@#$$=&@.@&=&===;==&##@#$%&$........+@@###@@+....",
+".+@@#$;;===;;$##@+......++@@#%$%#@@++......+@#=;===;;%$#@....++@#=;===;;%$$@+.......++@#%%%&&@@+......+++++.+..+++++....+@#$=;;***-*-****$#............................................+@##&=*-*$#@+......++@##&&;=;&&$#@++...........+.........@#%%***&%#@@@@@#$$$.#%&***&%#@@@#$$%=&#.#%&===;===&$##$$&&%........+@#===#@++...",
+"++@$%&;;%%&;;%%$@++....+.@@#$***$#@++++....@@#%&&&&;;%$#@++...@@#%&&==**%$#@++.....++@#$=;;%$#@+.....++++@++++++++@+++..@@$%-*-&&**-;;=&&$@............................................++@#$%***$$@++....++@#$%;;%&&;;%$#@+...+.++++.+.++.+.....+##%;;;&%#@@@#%%&=&.##$;;;&%###$$===%%#.@$$&&=**&&%$$%&&==$.......++@#===#@++...",
+"++@$%&;;&%&;;&%$@++..+.+@@#$$***%$#@@++...++@#%&%&&;;%##@.+...+@$%&===**%$#@++......+@#$;;=%$@+++...++@@#@#@@@@@@#@#@@+.@@$%-*-&=-**;;=&%##.........+++++..............................++@#$%*-*%#@++....++@$%%;;&&&;;%%$@+.+.+++++@++++++++....+@$$;;;&%$#@##&&&==.@$%;;;&&$##$%=;;&%#.@#%&==**&&&%$&&===$.......+@@$%&%##++...",
+".@@$%&;;&%&;;&%$@+..+.@@@#$%%-**%$$#@@+....+@#%&&&&;;%$#++...+@@#%&&==**%%#@++.....++@#$=;=$#@++....+@##$$##@@@##$$##@+.@#$%*--&&*-**;&&%#@........+++++++++............................+@#$%***$$#++.....@@$%&;;%&&;;%%$@@.++@@@#@@@@@@@@+++...@@$%;;;&&$###$&&===.@#%;;;&&$$$%%;=;%%#.##$&==-*&&&%%&====#.......+@@$%&%$@++...",
+".+@#$%;;=&=;;%$#@+..++@#$%%&&*-*&&&%$#@...++@#$%;;;&%$#@@+....+@#%%===;;&%$@++......+@#$$%%##@+.....@@%&=;=%$##$**&=&#@.+#$%-*-&=**-;;=&%#@......+.+@@@#@@++............................+@@$%*-*%##++...+.@@$%&;;&%&;;&%$@@.+@@$%$$#$$$$$#@@++..@@$%;;;&%%$$&&;=;%$.#$%;;;&&$%$;====$$#.#%=&&===;===&;;;%$#.......+@#$%&&$#@+...",
+"++@@#$;;&&&;;$##@++.+@@#%&&&&-**=&&&%#@....@@#%&;;;&&$#@+++..++##%&===;;%%$@@.+.....++@#$$#@@+......@#&=;;;%%$#$**===##.@@$%--*==-**;;&&%#@.......+@@#$##@@++............................@##%***%$@@+....++@$%&;;%&&;;&%$@+.+@#%%&$$%$%%%$#@@++.@#$$*;;&&%%%&&;;=$$.@$%;;;&&%%%;;===%$#.#&&&&==;=;;&==;=%##.....++@@#$;;;$@@++..",
+"..+@##$%&=&%$##@+...+@#$*****---*****$$...++##;;;;=;=%$#@+...+@@$**&==;;&%$@++......+++@@@@@++......@#$%***&%$$$&=;;;$#.+@#$=;;***-*;;=%%#@.....+++@$%=;=#@@+..........................++@#%&-*-&%#@+....++@$$%;;=&=;;&$$@+.+@#=;;;=&&&**%%$@@+.@#&=;;;;;===;;===%$.#==;;*;;;;;;;;;;=&#.@%%;;;;;===;;;==%#@......+@#$%;;;$#@+...",
+"..++@#$$&%&$$@@++...+@#$*******-*****$#...+@@$=;===;;%$#+++..+@##**&&=;;%%#@++........++++++........@#%&***&%$$$==;;;$#.+@#$==;**-*-;;&&%#@......+@#%%;;;$#+++..........................+@#%&*-*&%#@++...++@#$&;;===;;%$#@+.@##;;;;;&&&**&&%#@@.@#&;;;;;;===;;;==%$.#&;;;;;;;;;;;;;;==$.@$%;;;;;===;;===%$@...+++@#$&=***$#@++..",
+"...++@##%%%##@++....+@#$*****---*****$#....@@$=;=====%$#@.+...+@#**&&&;;%$#@++.........+.+.+........+#$%***&%$$$==;;;$#.+@@$==;***-**;&&%@@......+@#%%;;=$#@+.........+.++.+..........+.+@#%%*-*%%#@++...++@#$%;;=&=;;%$#@+.+##=;;;;==&-*&&&$#@.@#&&;;;;;;=;;;;==$$.#&=;;;;;;*;*;;;;==$.@$%;;;;;===;*===%$@....+@##$==***$#@++..",
+"....++@@@@@@@++.+...++@#$$%%%***%%%$$#@...++@#%%&=&&&##@++...+@@#$%&&&%%##@+........................@@$%;;;&%$$$&=;;;$#..+@##$%&=***;;&%%#@....+.++#%&***$@@++........++++++...........+@@#%&%&&&%#@@.+...+@#$$==;;;=&%$@@+.+@#$%&**;=;==-**%$@.@@#$%%%&&;;;==***%$.@#$%%&=;=;===&&&**$.@@#$%%&&***==***%$@...+@##$%==-**$#@+...",
+".....+++@@@+++......++@@##$%%*-*%%$##@@...++@@$%%&%%%#@+++....+@@#$%%&%$#@@++.......................+@#%;;;=%$$$%&;;;%#..++@@#$%&-*-;;=&%#@......+@@%%***##++.......+++@@@@@++.........+@@#%%%%%%%#@@+....+@@$%&==;===$$#@+.+@#$%%**;=;==***%%#.+@@#$$%&&;*;==-**%$.@#$$%%=;=;===&&&**#.+@@#$%%&***==-**%$#..++@#===;;&&%$#@@+..",
+".......++.++..........+@@#$$%;;;%$##@++....++@@#####@@++.......+@@@##@#@@++.........................@@#%;;;&&%%%&=;;;%#....+@##%%**-;;&%%#@......++@##$###@+.........+@@####@+++........++@@@###@@@++....++@$%&*******&%$@+.+@#$%&;;;;;&=*-*&%#.++@#$$%;;=====***%$.@@$&==;;%%%%&;;;&%$.+@@##%;;=====***%$#..+@@$=;;;;%%%$#@@++.",
+"........+.............+@@@#$%;;;%$#@@++....++++@@@@@@+++........+@@@@@@+++..........................+@#%;;;;;&&&;;***%$....++@#$%****;=%%@@.......++@@##@@+++.......+@##==&##@+.........+++@@@@@@@+++.....+@$$&**-*-**%%$@+.+@#$%%;;;;;=&*-*%%@.++@#$%%;;=====*-*&$.@##&&&;=%%$%%;;;&&#.++@#$%;;=====*-*%%@..+@#$=;;;;&%%$##@@+.",
+"....................+.+@@##%%;;;%%##@++......+++++++++.............++++++...........................@@#$;*;;;&=&;;***%$..+.+@@#$%*-*;;=&%$@........+++@+@++.......+.+@#$=;=$#@@...........+++++++++......++@#%%*******%$$@+.+@#$%&;;;;;&=***%%#..+@#$%&;;=====***%%.@#$&==;=$$$%%*;;&%#.+@##%%;;=====***%%#..+@#$;;;==%%$&=$$#@.",
+"....................+.+@$%%&&==&&%%$$@+.........+...................................................+@#%;;;;;&=&;;***%$...++@#$%&*-**;==&$@.........+.++.+.........+@#%&***%%#@++............++.....+....++@@##$$%$$$$##@++.+@$=;;;;=&&*-==&$#@..+@#&;;==;==;;*-*&%.@$%;;;%%$$$=;===&%#.+@#==;=====;;*-*&&#..+@#$;;;=&%%%==%$$@.",
+".....................@@#%%&&&=&=&&%%$@@..........+..................................................@@#$;;;*****;;***=&..++@#$%&&*-*;;;==$#.......................++@#%&*-*&%#@+...........................++@@###$###@@+++.@@$;;;;;&&&**=&&$@@.+@@#==;&=====;***=&.@$$;;;%$$$%====&&%#.@@#==;&=&=&=;*-*&&#...@#$=;;;;&&&;;&%$@.",
+"....................++@#%&&&=&=&&&&%%#@.............................................................+@#%;;**-***;;***&%..++@$%%**********$#........................+@#%&***&%#@++..........................+++@@@@@@@@@++...@@$=;;;;&&&**&%%#@+..@@#===&&=====-**&&.@$%===$$#$$=;===%%#.+@#===&&&&&==***=%#.+++#$=;;;;&&&;;&%$@.",
+"....................+@#$*************$#.............................................................@@#$;;;=&%%%$$$$$##..++@$%&***-******%#.......................+@@$&=-**&%#@+.............................+.+++@+++.+....@@#%=&%%%%%&%$##@++.++@#$%%$$$$$%%***&%.@$$$%$###$$**===**#.+@#%%%$$#$$%%***&&#..++@#==;;;&&=;;&%%@.",
+"....................++##*************##.............................................................+@#$;;;&&$$$#$###@@...+@#$%**********$#........................+@#==*-*&%@@++..............................+..+.+.......+@#%%%##$$$%$##@+++.++@@$$$##@##%%***&%.+#####@@##$**===**#.++@$$$#####$%***%%@..++@#$$%*******%$#@.",
+".....................+@##$$$$%%$%$$$##@.............................................................+@@$;;;%%@@+++.+++....+@@##$$%%%$%$$##@........................+@#$%&&&$##+.+...........................................++@@@##@#@@#@@@+++....+@@@@@@@@@###$$#@.+@@@@@@+@@##$$$$$#@..+@@@@@+@@@###$$##@...++@#$$*******$##@.",
+"....................+++@@##$####$###@@+.............................................................++@#%%%##@++............@@###########@@.......................+++@$$&&%$@@++.+..........................................+++@@@@+@+@@+++.......++@@++++++@@#@#@@..++@+++++@@@###@#@@.+.++@+++++@@@#@#@@@...++@@##$$$%$$$#@@+.",
+"......................++@@@@@@@@@@@@@++.............................................................++@#$$%#@@+...........+.+++@@@@@#@@@@++........................++@##%%%@@++................................................+.++++++.++.+..........++++++++@@@@+...+.++...++@++@@@@+..+..+++...+++@@+@++.....++@@#######@@+..",
+"......................+.++++@+@+++++++..............................................................+++@$$$@@.+...............+++@+++++++...........................++@@@@@@@+.................................................+......+.....................++..+..............+++...+.............+.+++........+.++@@@@@@@+++..",
+"...++@@@@@@+.+.............++@@@@@@++........++@@@#@@++........+++++@@@@@+++........+.+..+.+..+........+.@@####@@+++...........+.++.+.+++.+.......+.+.+.+.++.......++@@@@@@++...............+@@@#@@++.........@@@##@@++........++++++++++++........++@@@@@+++.............+.++@@@@@@+++......++@####@@+++.........+..+..+.++....",
+"...+@#$%&#@@++............++@##$&%#++.+....+.+@#$%&%#@++........+@@######@@++.+.....+.+++++++++........++@$%&&&##++..........+++@++@+@+++++.....+.+++@+@++++++.....+@@%&$##@++...........+++@@#%%##@++.....+++@#%%&##@++......+.++@@@@@@@@+++......+@##&&#@@+++...........+.+@@#&%##@++....+.+@#$===$#@+++......+.+++++++++++...",
+"+.+@@#$&&$#@++..........+++@@$$%&&#@++......+@@$$&&&##@++.....++@@#$%$$$$#@@++....++++@@@+@+@++++.....++@#$%==&$#@++.......+++@@@@@#@@@@@@+.....+++@@@@@@@@@+++...++@#&&$$$@@++.+.......+.+@@##=&$##++.....++@@$&&&$$@@++.....++@@@##@@#@@@@++...+++##$&&##@@+.+..........++@@#$&&$#@+......+@#$$===%$#@+......++@+@@++@+@+++++.",
+"..++##$==$$#@@++.........+@@#%%%&&@@+.....+++@#$%===$#@+++....+@@#$%%%%%%$#@+.+....+@@@@#@#@@@@++.....++@#%&===%#@++......+.+@#$$$$$$%$$$#@..++++@##$$$$$$###@+...++@#&=%%$#@@++.....+..++@@#$$==$##+++..+.+@##$===%$#@@+....++@@#&&$$$%&$$#@++...++##$==$$#@@++.........++@@#$$==$$#++...+++@#$%;;=%$#@@+...+.+@@@@#@@@@#@@@++.",
+"...@@#$&==&&#@+........++@@$$=;;%$#@++...+.@@#$;;;;=&%@@+...+++@$%&*****;=$#@+...++@#$$&&##$&&@@++...++@@$&=&&&&%@@++.....++@#$%%%%&%%%%%$#..++@@##$%%%%%%$$$#@...+@##%%;;;$$@@++.+...+++@##&====$#@@+...++@@#&&=;;;;$#@+++..++@#$==%%%&=%$$@++...++@#$&===&#@@+++...+.+++@@#&&==&$#@++...++@#$;;===;;$#@++...+@#$$%%##$%%$$#@+.",
+".++@@#$====&#@@+.....+.+@@#$%;;;%$@@.+...++@@$$;;;;;&%#@+.+..+@#$%&***-*;=$#@+....+@#$%&=$$$=&#@+....++@#$===&&%%@++......++@#%%&&&&&&&&%%#.++@##$%%&%&%&%%%$$#.+++@#$%%;;;%$##@@+..++@@@##$&===&$$@@++..+@@#$&=;;;;;$$#@++.+@@$%%==&&&==&%%#@+...+@##$====&$#@@+++..+.++@##$====&$#@@....+@@#$;;;==;;$##@+.+++@#%%&&%$$&&%$#@+.",
+"+.+@$%%%&===$#@++.....++#$$&&&=&$#@++....++@$%&==&&&&%#@++..++@#%&=&==;=&%#@+++..+@@$%%==%%%%%#@++..++@$$%&==;=$$@+++.....+@@$***-******--$.+@@%%%**********==#.++@$$%&&====&%$$@++.++@#$%%&===&&%%$@@+.+@@$%%==&&&==&%%@@+.+@#$%&===&&==&&%#@@.+++@#%%%&;==%%$##++...++##$%&==;&%%$#@+.++@@$%&&=&&===&%$@+..+@@$%%==%&%==&%%@@.",
+"++@@$%%&&;==$#@++...++@@#$%&===&%##+++...+@#%%&===&&&%#@+...++@#&&=&=;=;%%##+.+..+@@$%&==&&%&$#@++..+@@$%&&=;=;$$@@+......+@##***----***-*$.@@#%&&****-*-***;=$.@@#%%&=&=====&&%$#@.@@#%%&&&;=;&&&&%##@.@@$%&&;=&=&;==&&$#@.@##%&&====&;=&&&$#@..+@@$%%&&;=;&%%$#@+.+++@#$%%&;=;&&%$#@@..+@#%%&==&&&==&%%#@..+@#%&&==&&&==&%%#@.",
+".+@#$%&&&=;=$$@@+.....@@$%%====&%$@@+...++@#%&&;===&&%#@++...@@#&&==&;=;%%#@++..++@#%%&==&&&&%#@+...+@#$%&===;=%$#+++.....+@#$==-**==%&%;;$.@#$***==%%%%%;;=;=$.@#$****-*****-*-$$@.@#$***-******-*-%#@.@#$****-*****-*-$$@.@#$***-******-*-%#@.++@#%%&&&;;=&&%%$@@..+@@$%%&&;=;&&%%$@@.++@#%&&==&=&;=&&%#@.++@#%&&==&&&==&&%#@.",
+".+@#==;**---&%#@+...++@#&=;**-*-%%#@++...+@#&=;**-*-&%#@++...@@#==;*-*--&%$@++...+@#&=;*-*-*&%$@@.+.+@#==;**-*-&%#@++......@#$==*-*;=&%&;;$.@#$***=&%$$$%=====$.@#$*-*-*-*-**--*%$@.@#$****-***-*--*%$@.@#$*-**-*****-*-%$@.@$$****-*****--*%$@..+@@&==***-***==&#@..+@#&==**-*-**;=&#@..+@#&=;**-*-**;=&#@.++@#&=;**-*-**;==#@.",
+"++@#&=;-**-*&%#@++...+@#&==-*-*-&&#@++..++@#==;**--*&%$#++..++@#==;*-*-*&%$@++..++@#==;**---&%$@++..+@#&==**--*&%#@+.....++@#$==-*-==&%&;;#.@$$***&&$###$===;=#.@#$%&&;;%%%%%***%$@.@#$%=&;;&%%&%***%$#.@##&&=;;&%&%%***%$@.+#$&&=;;&%&%&***%$#.++@#&==-*----*==&@@.++@@&=;***--**==&@@.++@#&==**-*-**==&#@..+@#==;**---**==&#@.",
+"..@@#$%=;*-*==$#@++..++@#$%==**-==$#@+....@@#$%==*-*==$#@++...@@#$%==-**==$#@++..++##$%=;*-*==$#@++.++@#$%=;-*-=&$#@++....+@#$**;;;;;;;;%%#.@$%***%%###@#$%$%$#.+@#%&=;;&%%%%***$$@.+@#%&&;;&%%&%***$#@.+@#%&&;*%%%%&***$#@.+@#%&&;*%%%%&***%#@..++@#$%%%***%%%$#@+..+@@#$$%%***%%$$#@+..++@#$%%%*-*%%%$#@@.+++@##%%%***&%$$#@@.",
+"..+@##%=;*-*==$#@++..++@@$$=;-**;=$#@++...+@@$%=;**-;=$#@++...+@##%==*-*==$#@+...++@#$%=;*-*==$#@++.+++@$%==*-*==$#@+.+.++@@$$**;;;=;;;=%$#.@$%*-*%$#@@@@#$$$$@.+@#%&=;;%%%;;=&&$#@.+@#%&=;;%%%;;==&$#@.+@#%&=;;&%%;;&&%$#@.@@#%&&;;&%%;;&&%$#@...@@@#$$%*-*%$$#@@+...+@@##%%*-*%%$#@@+..++@@##%%***%$$#@@+...+@@##%%*-*%%$#@@+.",
+"..+@#$%**&&&-*%$#@+..++@#$%-*&=&-*%$#@+..++@#$%**&=&-*%$#@+.+++@#$%**&&&**%$#@+.++@@$%&**&&&-*%$#@+.++@#$%**&=&-*%$#@++..+@#$%**;;;;=;;;%$#.#$%***%$@+++@@####@.+@#%%&;;&%%;;=&&#@+.+@#%&&;;&%%;;&&&#@@.+@#%%&;;&%%;;&&%#@@.+@#%&&;;&%%;;&&%#@@....+@@#$%***%$#@@++....+@@#$%*-*%$#@@++..+.+@@#$%-*-%$#@@++..+.+@@#$%***%$#@@++.",
+"++@#%%&**%&%**&%%#@..+@#%%&**%&%**&%%#@..+@@%%&**%&%**&%%#@..+@#%%&**&&&**&&%#@..+@#%%&**&&%**&%%#@.+@#%%&**&%&**&&%#@+.++@$%%;;;;;*-**-%$@.@$%***%$#@@+@@@@@@+.+@#%&=;;&&%;;&&%#@+.+@@%&=;;%&%;;=&%#@+.+@#%&=;;%&%;;&%%#@+.+@#%&=;;%&%;;&%%#@+.....+@##%*-*$$#@++......+@##%***$$#@++....+++@##%***$$@@+......++@#$$-**$$@@+...",
+"++@#%&&**&%&**&&%#@.++@#%&&**&%&**&&%#@.+@@#%&&**&%&**&&%#@.++@#%&&**%%%**&&%#@.++@#%&&-*%%&**&&%#@.+@#%&=**%&%**&&%#@+.+@#%%&;;;;;-*-**%$@.@$%***%$$##@#####@@.+@@%&&-*;;;**%%##@+.+@#%&&--;;;**%$$#@+.+@@%%=*-;;;-*%$#@@+.+@@%%=*-;;;**%$#@@+.....++@$$*-*$$@++.......++@$$***$$@++.......++##$*-*%#@@........++@$$***%#@@....",
+"+@@$=;;-*;;;-*;;=$#.+@@$=;;*-;;;-*;==$#.+@#$=;;-*;;;-*;;=$@.+@@$=;;-*;*;-*;==$#.+@#$=;;*-;;;-*;;=$#.@#$=;;*-;;;-*;==$#@.@@#==;*-***===&&$#@.@$$***&&$$#$$%%%%$@.+@#$&&**;=;**%%$#@@.+@#%&&**;=;**%%$#@+.+@#%&&**=;;**%%$#@@.+@#%&&**=;;**%%$#@@.....+@@$$***%#@@+.......+@@#%*-*%#@@+.......++@$%***%#@@........+@@#%*-*%#@@+...",
+"+@#$==;-**;;-*;;=$#.+@#$=;;*-;;;-*;;=$#..@#$=;;***;;-*;;=$#.+@#$=;;*-;;;**;;=$#.+@#$=;;***;;-*;;=$#.@#$=;;***;;**;;=$#@.@#$==;***-*;==&&$$@.@#$***==%%$%%&=&&%#.+@#%&=**===**%%$$#@.+@#%&=**=;=-*%%$$#@.+@#%&=**===**%%$$#@.+@#%%=**===**%%$$#@.....++##%-**%$#++.+.....++#$$***%$#+++......+@@#%***%$@@++.......@##%***%$@+++..",
+"+@#%;;;**;;;*-;;=$#.+@#%=;;*-;*;**;;;$$.+@#$;=;-*;;;*-;;;$#.+@#%=;;**;*;-*;;;$$.+@#%=;;*-;;***;;=%#.@#$=;;-*;;**-;;=%#@.@#$=;=-*-*-===&&$$#.+#$&==**;;;;;***%%@.+@#%&&**;=;*-&%%$$@.+@#%&&**===**&%%$$#.+@#%&&**;;=*-%%%$$@.+@#%&&**;=;*-&%%$$@....++@#$%***%##@@.+..+.++@#$%*-*$$#@++....+++@#$%-**%$#@+++...+++@#$%*-*%$#@+++.",
+"@#$%***;;=;==;***%$.@#$%***;;===;;***%$.@#$%***;;=;=;=***%$.@#$%**-;;===;;***%$.@#$%***;;====;***%$.#$%***;;====;***%$#.#$%***&&=;=;=%&%==#.+@#%&&**;;;;;***&%@.@@$%&=;;%&%=&=====#.@@#%&=;;&&&====&==#.@@#%&=;;%&%====&==#.@@$%&=;;&%&&&==&==#..+++@##$%*-*%%##@++...++@##$%***%$##@++..+++@#$$%*-*%$##@++...++@##$%***%$$#@++.",
+"@#$%*-*;====;;*-*%$.@#$%-*-=;====;-**%%.@#$%-*-=;===;=-**%%.@#$%***;=====;*-*%$.@#$%-*-=;===;=-**%$.#%%*-*;====;;*-*%$#.#$%***&&;=;=;%&%;=$.+@#%&&**;;*;;***%%@.@@$%&=;*%&%=&==&;=$.@#$%&=;;&%%&&=====$.@#$%&=;*%&%=&=====$.@@$&&=;;&%&=&=====$..++@#$$%%*-*%%$$#@+.+++@#$$%%-*-%%$$#@@...+@##$%%***%%$$#@+.+.@@#$$%%-*-%%$$#@+.",
+"@#&=-*-;;&&&;;-*-=&.@#&=*-*;;&&&;;*-*=&.@#&=*-*;;%&&;;--*=&.@#&=-*-;;&&&;;*-*=&.@#&=*-*;;&&&;;*--=&.#&=-*-;;&&&;;*-*=&#.#&=*--==**-**;;;-*$..+@##%%&***;=&%$##@.@$$*****;;;;;***==$.@#$***-*;*;;;***;=$.@#$*****;;;;;***;=#.@#$***--;;;;;***;=#.++@@%&=;;-*-;;=&%@@..+@@%&=;;-*-;;=&%@+.++@#%&=;;---;;=&%@@..+@@%&=;;-*-;;&&%@@.",
+"@#&=*-*;;&%&;;*-*=&.@#&=*-*;;&%&;;--*=&.@$&=*-*;;&&&;;*-*=&.@#&=-*-;;&%&;;-*-=&.@$&=*-*;;&%&;;-**=&.#&=*-*;;&%&;;-*-=&#.#&=-**;=-***-;*;*-$...++@#%&;;;=&$#@++..@#%***-*;*;*;***;=$.@$$****-;;;*;***;=$.@#%***-**;;*;***;=$.@$$*****;*;*;***;=$..+@#&&=;;---;;=&&#@..+@#&&=;;--*;;=&&#@..+@#%&=;;-*-;;==&#@..+@#%&=;;--*;;==&#@.",
+"@#&&-*-;;%%&;;-*-=&.@#&=-*-;;%%&;;*-*=&.@#&=*--;;%%&;;*-*=&.@#&=**-;;%%&;;*-*=&.@#&=-*-;;%%&;;-*-=&.#&=**-;;%%&;;*-*=&#.#&=-*-==*-***;;;**$...++@#%&;;*=&#@@+...@#$***-*;;;;;-**==#.@$$*****;;;;;-**==$.@#$*****;;;;;***==#.@#$***-*;;;;;-**==#.++@#%==;;**-;;==%#@.++@#%==;;*--;;=&&#@.++@#&==;;*--;;=&%#@.++@#&==;;*--;;=&%#@.",
+"@#$%&=&=&%%%&&=&&%%.@#$%&=&=&%%%&&=&&%%.@@$%&=&=&%%%&=&=&%$.@#$%&=&=&%%%&=&=&%$.@@$%&=&=&%%%&&=&&%%.#$%&==&=%%%&=&=&%%#.#$%&&&&&&========&#....@@#&=***%$#@+....@@$&&&=======&=&%%#.+@$&&==;======&&%%#.@##&&==========&%%#.@@$&&========&=&%%#..+@@%%&&==&==&%%%@@.+++#$%&==&====&%$#@..+@@$%&==&=&=&&%%@@..+@@$%&&=&===&&%%@@.",
+"+@$$&%&&%$$$%%&&%$#.+@$$&%&&%$$$%%&&%$#.@@$$&%&&%#$$%&%&%$$.+@$$%&%&%$$$%&%&%$$.@@$$%&%&%$$$%&%&&$#.@$$%&%&%#$$%%%&%$$@.@$$%&&%%%&%&&=&=%%#....+@#&=***$$@@++...+@#%%&=&&&&&&&%&$$@.@@#%%&&&&&&%&&&%$$@.+@#%%&&=&&&&&%&&$$@.+@#%%&=&&&&&&&&&$$@..++@$$%&%&&%&&%%$@+...@@$$%%&&&%&%%$$@+...@@$$%%&&&&&%%$$@+...@@$$%%&&%&&%%%$@+.",
+"+@@######@@#######@.+@@@#####@@#######@.+@@#######@#######@.+@@######@@@######@.+@@######@@#######@.@@#######@######@@@.+@######$#$##$####@...+++@##$$$#@@+.....++@###$#$####$###@@.++@###$#$#$######@@.++@######$#######@@.++@####$#########@@..+++@@####$####@@@+...+@@@####$#####@@+...+@@@######$###@@+...+@@####$#####@@@+.",
+".++@@@@@@@@@@@@@@@@..++@@@@@@@@@@@@@@@@..++@@@@@@@@+@@#@@@+..++@@@@@@@@@@@@@@@+..++@@@@@@@@@@@@@@@+.++@@@@@@+@@@@#@@@++.++@@@@@@@@@@#@#@@@+....+++@@#@#@@++......++@@@@@@#@#@@@@@++..++@@@@#@#@#@#@@@++..++@@@##@@#@#@@@@++..++@@@@#@##@#@@@@++....+@@@@#@@#@@@@++...+.++@@@@@@#@@@@++..+..++@@@#@#@@@@@++...+.++@@@@@@#@@@@++..",
+"..++++++++++++@+++...++++@+++++.+@++++...+.+++@++.+++++++++..+.++@+++++++@+++++..+.++@++++.+++@++++.+.++@+++++++++++++...+.++@+@+@@+@+@@++.......+@@@@@++.........+++@@@+@++@++++.+...+++@+++@++@++++.+...+++@+@@+@+@+++++....+++@+@+++++@+++++...+..++++@++@++++......++++@@++@++++.++...++.+++++@+@+++.+......+++@@@+@@++++.+.",
+"....+..+...++..+........++@@@#@@@@@@++.....+++###@@++..............++@@#@@+++.......+++@####@+++.......+++@@#@@#@@@@++.......+..+.+..+...................................++.++.+.+.....++@@##@@+++.............++@@#@@+++.......+.@@####@+++.........+.++.+.+.+.............++@@##@+++......+......................+++++++......",
+"..+++++++++++++.......+++@##$$$$###@@++....+@@#$###@@+............++@@#$##@+++......+@@#$$$##@++.......++@###$$#$##@@++......++++++++++..............................+.+++++++@+++.....+@@#$###@++...........+.+@@##$@@++.......++@#$$$##@+++......+.++++++++++...........+.+@@####@++......+++++.++.............+++@@@@++++....",
+"+.++@@@@@@@@++++++...+.+@@%%===&%&&%@@+...++@#&&&&%#@++..........++@#$$==$#@+......++@#$=;=&%#@++.....++@#%%===&%&&%@@+....+++@@+@@@@++++..................+.........+++@@@@@##@@++..+.+@#&&&&%#@+++.........++@#$$==$#@++.....+@@#$;=;&%#@+.+......++@@@+@@@+++.+........++@#$$==$#@++.++++@@@@@+++.............+@@##$#@@+++...",
+".@@@@#########@@+++..++@##&&=;=&&=&%#@+....+@#&===&##++..........+@@$$%;=$#@@......+@@$%;;;&%$@@++....+@@#&&;=;&&&&%#@+....+@@##@@###@@++.........+.......+..+....+++@@#@##$#$$#@@+....+@#&===&##+++......+.++@@$%%;=$#@++.....+@#$$;;;&%$@@+++..+++@@##@@###@@@++......+.+@@$%%;=$#@++..+@#@#@#@@@+++.........++@@#$$%%##@++...",
+"+@##$$$$$$$$$###@@+..+@@#$&&;;;=&=&&#@+...++@#&====$#@+++.....+.++@#$%%;;$#@++....++@#$%;;;=&$#@+.+.+++@#$&&;;;&&=&&@@+...++@@$$$##$$##@@+....+++.++....+.++.+..+.+@@@##$$$$%%%$#@+..++@##&====$#@@++++..+.++@@#$%%;;%$#@++..+++@#%%;;;=&$#@@+.....@@@$$$##$$##@@++..+.+++@@#$%%;;%$#@+.+@@#$$$$##@@+++........++@$$%%%%$$#@@++.",
+"+@%&=;;;;;;;==$$$@@.++@$$%;;;;;**&%$#@@...++@#$%=;=%$#@++.+.....+@#$;;;&%$#@++....++@$====&;=%$#@++..+@#$%;;;;;**&%$@@+...++@#==%%%==%$$@++..+.++@++++.++++++++..+@@#$%&;;;;;***$#@..++@#$$%;;=%%#@@+++..++@@##$;;;&%$#@@++..+@@#$=;&=&;;%%$@@+.+++@#$==%$%==%%$@@+..+++@@##$;;;&%$##@+.+@#==;;;&%%#@++.+....+++@#$;;***;=$#@++.",
+"@@%&;;;;;;;;;;%%$#@.+@#$%&;=*;;**&%%#@@...++@#$%;;;&%#@@++....++@@#$;;;&&$#@++...++@@$=;&&=;;%%$@++..+@$$%=;;*;**%$$#++..++@##;;%%%=;%%$@@+..++@@@@@+++++@@@@@+.++@#$$&=;;;;;***$#@.++@@#$%%=;;&%$##@@+.++@@##$%;;;&&%$$@@+.++@#$$=;&=&;;&%%#@@.++@#$$;;%%%==&%%#@+.++@@@##$%;;;&&%$#@@.@#$;;;;;=&%$@@@++.....+@@$$;;*-*;;$$@@+.",
+"@#$%***;;====;***$$.+@#%%&;;;;***&%%$#@..++@@#$%=;;%&$#@@++.+.+@@#$%;;;&&$$#@++..++@#$=;=&&;;&%$@@+..+@$%%;;;;;**&%$@@+..+@@#$;;&&&;;&%%@@+.+.@@$%%#@@@@@#%%$@@.@@#&==**===*****%$@.+@#$$%%%;;=&%%$$##@.+@##$$%%;;;&&%$$##@.+@##%%;;&&&;;%&%$#@.+@#$$%;;%%%;;&&&$#@.+@##$$%$%;;;=&%%$##.@@#==;**==&%$#@@++...+@@$%&**&&&**&%$@+.",
+"@#%&***;====;=*-*%$.@#$;;;;;&%&==;;;&%#.++@##$&=;;;;=%$$@@+..+@@#$&=;;;=;%$$@@+.++@#$%==;;;;;%%$#@+.+@@#$%==;*;;;%%$#@+.++@#$%&=;;;;;%%%#@+.++@#%%%$#@@###%%%#@.@#$===**===**-**%$#.@@#==;;;%%%==;;;%%@.@@#=;;;;%&%==;;;&%@.+##=;;;;&%%==;;;&%@.@##=;;;;%%%==;;;&%#.@@%%==;;;&&&;;;;;&%.@##==;**==&&%$##@@+..+@@%%&**&&&**&%%@@.",
+"@@%%***=;====;***%$.@#$;;;=;%&%;=;;;&%#.++@#$%&=;;;;;&%$##+.+@@$$$&=;*;;;%%%##+.+@##$%&=;*;;;&%%$@@.+@#$%%==;;;;;&%%##@.+@##$%==;;;;;&%%$#@..@##&&&$$$#$$%&&&#@.@#$=;;**===***-*%%#.@#$;;;;;%%%==;;;&%#.@#$;;;;;%%%==;;;&%#.@#$;;;;;%%%==;;;&%#.@#$;;;;;%%%==;;;&%#.@#%&;;;;;&&&;;;;;&%.+##===-*===&%%$$#@@...@#$&&**&&&**&%%#@.",
+"@#$%;;;=&%%%%%;;;=&.@#$*****&&&==-**&%#.+@#&==**===;=***%#@.+@#&==**====;***%#@.@@#==;;;====;***$$@.@@#==;;;;===;***%#@.@@#==;;;====;***$#@.++#$***;=%$%=;***$@.@#%***&&=&&;;;;;=&#.@#$***;=%%%&=***&%#.@#$***;=%$%&=***&%#.@#$***;=%$%&=-**&%#.@#$***;=%$$&=-**&%#.@#%&**-;;%%%;;-**&%.+@#%&=*-*****;;=%#@.++@#%%&;;&&&-*=&%@@.",
+"@#$%;*;&=%%%%%*;;==.@#$***-*&&&&=*-*&%#.@#$&=;**====;***%$#.@@$==;**===;=***%$#.@#$=;;;;====;*-*%$#.@#$=;;;;===;=-**%$#.@#$=;;;;===;=-**%$#.+@#$***;;%%%=;***#@.@$%**-&&&=&;=*;;==$.@#%***;=$$$%&-**&%#.@#$***;=%$$%&*-*&%#.@#%***;=%$$%&***&%#.@#%***;=$$$&&**-&%#.@@%%*--=;%%%;=-*-%%.@@#%&&-*-**-*;;;%$#..++#%&=;;&=&-*&&%#@.",
+"@#%=*****=&&%%&==;=.@#%***-*&&&&=***&%#.@#$=;=**=&&;=*-*%$#.@#$=;=**&&&=;*-*%$#.@#$=;;;;&&===***%$#.@#$=;;;;&&&;=***%$#.@#$=;;;;&=&=;*-*%$#..+@#$%%**;;;**%%$#@.@$%***&&;;;&&===;=$.@#$***==$$$%&*-*&%#.@#%***==$$$&&***&%#.@#$***==$$$&&*-*&%#.@#$***==$$$%&***&%#.+@#%=;;;=&%%;=;;;$#.+@#%&&;;%%%%&;=;==#..+@@%&&;******&&%#@.",
+"@#&&-*-**=&&$%&==;=.@#%;;;;;;=;%&*-*%%@.@$%***&&$$$%%;;;=&#.@$$***&&%$%$%;;;=&#.@$%***=&%$%%%;;;=&#.@$%***=&%$$%%;;;=&#.@$%***==%$$%%;;;=&#.++@#$%&*-;;;-*&%$#@.#$%***%%;;;=&===;=$.@$%;;;=&$#$$%***%%#.@#%;;;=%$##$%***%$#.@#%;;;&&$##$%***&%#.@#%;;;=&$#$$%***%%#.+@#$==;;=&%%;;;;;$#.+@#%%=;;%%%%%;=;;=$..+@#%&=;;***-*=&%$@.",
+"@#&&**-**=&&$$&=&;=.@#%;;;;;=;;&%***%$#.@#%*-*&%$$$$%;;;==$.@$%***&%$#$$%;;;==$.@$%*-*&&$$#$%;;;==$.@$%*-*&&$$$$%;;;==$.@$%*-*&%$$#$%;;;==$..++@#$%***;;-*%$$@+.#$%***&%;;;&&===;=$.@#%;;;&%$##$%***%$#.@#$;;;&&$##$%***%$#.@#%;;;&%$##$%***%$#.@#%;;;&%$##$%***%$#..+@#%%%**==&**&%$##.+@#%&&;;&%%%%=;=;=$..+@@%%&;;****-&&&$#.",
+"@#%&***;=%%%$$&&=;=.@#$;;;==***%&***%$#.#$%***%$##@#$===;=$.@$%***%$####$===;=$.@$%***%$####$===;=$.@$%***%$##@#$===;=$.@$%***%$####$&==;=$...@@#$%=;*-*;=%$#@@.#$%***&%;;;%&===;=$.@#%;;;&%##@#%***%$@.@#%;;;&%####%***%$@.@#%;;;&%##@$%***%$#.@#%;;;&%#@##%***%$@.++@#$%%**=&=**%%$@@.+@@%&=;;%%$%%===;=$..+@#%&=;;&%%==***%#.",
+"@#%&***;=&%$$$===;=.@#%;;;=&*;;&=***%$@.#$%***%##@@#$&=&;=$.@$%***%$@@@#$&=&;=$.#$%***%$#@@#$&==;=$.#$%***$$#@@#$&=&;=$.#$%***%##@@#$&&=;=$.+.@@#$%==--*==%$#@+.#$%*-*%&;;;%%===;=$.@#$;;;&%###$$***%$#.@#$;;;=%###$$***%$#.@#$;;;&&####%***%$@.@#$;;;=%$###%***%$#..++@#$%**&=&**%$#@+.+@#%%=;;&%%%%;==;=$..+@#%&&;;&%%==***%$.",
+"+##%;;;&&$$$$$&====.@#%;;;==;;*&=***%%@.#$%***%%#@##$=;;==$.#$%*-*%%##@#$=;;==$.@$%*-*%$#@##$==;==$.@$%-**%$#@##$=;;==$.@$%***%%#@##$=;;==$..+@#%&&**;;;**&%%#@.@$%*-*;;&&&&%;;;==$.@#%;;;&%$##$%***%$@.@#%;;;&%$##$%***%$@.@#%;;;&%$##$%***%%@.@#%;;;&%###$%***%$@...++##$==*--==$#@++.+@#%&=*-;;;;;***&%#..+@@%&=;;%%%%%***%$.",
+"+##%;;;=&%$#$%=====.@#%;;*&&=&=;****%%@.#$%-*-%%$##$%=;;==$.@$%***%%#$#$%=;;==#.@$%***&%$##$%;;;==#.@$%**-&%$##$%=;;==$.#$%***%%$##$%=;;==$.++@#%%&*-==;-*&&%#@.#$%***;;==&%%;;;==$.@#$;;;&%$$#$%*-*%$@.@#$;;;&%$#$$%***%$@.@#$;;;&%$#$$%***%$@.@#$;;;&%$$#$%***%$@...++@#$=;-*-==$#@++.+@#%%=**;;;;;-**&%#..+@#%&&;;%%%%%***%$.",
+"@@$%;;;&&%$$$%=;==&.@#%;;;&&&==;;***%$#.@$%***&%$$$$%;;;==#.@$%*-*&%$$$$%;;;==$.@$%-**&%$$$$%=;;==$.@#%***&%$$$$%;;;==#.@$%*-*&%$$$$$;;;==#..@@#%&=**=;=**&&%#@.@$%*-*;;&=&&%;;;==#.@#$;;;&&$$$%%***%$@.@#$;;;&%%$$$%***%$@.@#$;;;&&$$$$%***%$@.@#$;;;&&$$$%%***%$@....++##$%*-*%$$@+++.+@#%&&-**;;;;***%%#.+@@#%&=;;%%%%%***%$.",
+"@##%*-*==%&%&&***%%.@#%***==%%%;;--*%$#.@#$=;;;;&%&&&***%$#.@#$;;;;;&%&&&***%$#.@#$=;;;;&%&&&***%$#.@#$=;;;;&%&&&***%%#.@#$=;;;;&%&&&***%$#.+@#$***==%%%==***$@.@#$;;;*-&&&&&***%$#.+#$&==;;%%%&&***$$@.+#$&==;;%%&&&*-*$$@.+#$&==;;%&%&&***%#@.+#$&==;;%%%&&***$$@....+@#$%&***&%$#@++.@#$&==**;;===%%%##@.+@#$&==;;=====***%$.",
+"@#$%***==&&&&&-**%$.##$***==%&&;;-*-%$@.@#$===;;&&&&&***%$#.@#$=;;;;&&&&&***%$@.@@#==;=;&&&&&-**%$@.@#$===;;&&&&&***%$@.@@$==;;;&&&&=***%$#..@#$***&%$$$&&***#@.@#%;;;**&=&==-**%$#.+@#&==;;&&&&=***$#@.+@#&==;;&%&&=***$#@.+@#&==;;%&&&=***$#@.+@#&==;;&&&&=***$#@.+.+@@#$&&-*-&%$#@@+.@@$&&=-*=====%$##@+.+@@$&&;;;=====-**%$.",
+"@#&=*-******-*==&$#.@$%**-**&%%==***%$#.+@#$%%;;*****=&%$#@.+@#$%%;;****-=&&$#@.+@#$%%;;*****&&&$#@.+@#$%%;;*****&&%$#@.+@#$%%=;*****=&&$#@..+@#$%%$$####$%%$##.@#$=;;;;*****=&&$#@.+@#$%%****-**===$#@.+@#$%%***-**-===$#@.+@#$%%****-**===$#@.+@#$%%****-*-===$#@...+@$$&****-**%%$++.@$%****-=;=$$##@@++.+@$%**-*-==&*****$$.",
+"@#==***-****-*&&&#@.@#%*****%%%&=***%$@..@@$$%==-*-**&&%#@+.+@@$$%=;*-***=&&#@@.+@##$%=;**-**&%%#@@.++@$$%=;*-*-*&&%#@@.+@@#$%=;**-**=&&#@@.++@#$$$#@@@@##$$$@@.@@$===*;*-***=&&#@+.++@#$%*****-*==&#@@.++@#$%*******=&&#@+.++@#$%**-***-==&#@@.++@#$%**-****==&#@+.+.+@$%%**-**-*%%$@+.@#%**-**==&$#@@@++..+@#%*****&==-****$#.",
+"@#&=*****-***-&%%#@.@#$***-*%$$&&***$#@.++@##$==*****%%$#@+..+@##$==*****&%%#@+..+@##$==*****&%$#@+.++@##$==*****%%$#@+..+@#$$==*****&%%#@+.+++@###@@+++@@###@+.@@#===;;*****&%%#@+.++@##$*******=&&#@+.++@##%***-***=&&#@+.++@##$*******=&&#@+.++@##$*****-*=&&#@+...+@#%%*******%$$@+.@#$*****=&&#@@+.....+@#$*****&&&*****##.",
+"@@#$$%$%$%$%$$$##@+.@##$$$$$$###$$$$#@@...+@@#$$$$$$$$#@@++..++@@##$$%$$$$#@@++...+@@##$$$%$$##@@+....+@@##$$%$$$$#@@+...++@@##$$%$$$$#@@+....++@@@+++++++@@@++.+@#%&&%%%$%$$$#@@++...+@##$$%$%$$$##@++...+@@#$$$%$%$$##@@+...+@##$$$$%$$$##@++...+@##$$$%$$$$##@@+...++@##$$%$%$$$#@++.@@#$$%$$$##@@+.+....+@@#$$$%$$$$$$$$##@.",
+"+@@######$#####@@++.+@@#####@@@@@##@@@+....+@@@##$###@@@+.+...++@@########@@@......+@@#######@@@++.....++@#######@@@++.....+@@########@@@+.....+.+++....+++++.+.+@@%%%########@@@+....++@@@#######@@@+....++@@########@@++....++@@####$###@@@+....+++@####$###@@++....+++@@#######@@@++.+@@@#####@@@++.......+@@############@@+.",
+".++@@@@#@@@#@@@@++...++@@@@@@+@+@@@@++......++@@@@@@@@++.+......+++@@@@@@@++.+......++@@@@@@@@++.......++++@@@@@@@++........+++@@@@@@@++........+............+..++@@@@###@@@@@+++.......+@@@@@@@@@@++.......++@@@@@@@@@++.......++@@@@@@@@@++.......++@@@@@@@@@++.......++@@@#@@@@@++....+@@@@@@@@++.........+++@@@@@@@@@@@@@++.",
+"...++++++@++++...+...+.++++++.+.+.+++.........++++++++...........+.++++++++............++@++++...........+.+++++++...........+.+++++++++..+.......................+@@@+++@+++++...........++@+@+++..+........++++@+++++.+........+++++++++..+.......+.+++++++++.+......+.++++++@++..+......+++++++............+.+++++++++++++...",
+"....++++++..................+.++++.+............+++.+....................+...............................+++++++++..................................................+.+++++...................+++++.+..........++.++.+...............................+.+++....................+++++.+..........++.+++.+.........................",
+"....++++++++................+++++++..........+++++++.+............++..+.+.................................++@@@@+++................................................++++++++.+...............+.+++++++.+.......+.+@+++++...........+................+++@++++++...............+.+++++++..........+++++++..........................",
+"..+.+@@@@@+++............++++@@@@@+++........+@@@@@@+++........++.++@+@++++...........+.++..+............+@@####@++.................................................+@@@@@@+................+++@@@@@++........++@@@@@+++..........+..++.+...........++@@@@++................+++@@@@@++......++++@@@@@++..........+.+.+.++.......",
+"...+@##%%#@@++............++###%%@++.......++@@@%%%@@+..........++@@@@@@#@+++......++++++++++++........+++@$%&&&#@++..............................................++@##%%@@@+............+..++@#%%##@++......++@#$%%@@++.......+++++++.++++.+.....++@##%%@@@+............+..++@#%%##@++.......@@#%$%@@++........+.++++++++.+....",
+".+++@#$%&##@+++........+++@@#$$%%@@++......++@#$%%%#@@+......+++@@#$$#$#$#@@++...+.+++@+++++++++........+@@$%==&##@++.............................................++@#$%&##@@++............+@@##&%$#@++......+@@#%%%$#@+++...+.+++@++++++++++.....++@#$&&##@@+.............+@@##&%$#@++....+++@##&%%#@@++.....+.+++@+++++@++....",
+"...@@#$&&$$#@++..........@@#$%%&&#@+......++@#$$&&&$#@+++.....+@@##$%$%$$$#@+++.+.++@@@#@@#@@@+.+.......+@#%%===$#@+........+.+.+...+.+.+............+.+.+.+......++##$&&$$#@+++.........+++@@$$&&$##+.....+++@#$&&&$##@+.....++@@@@@@@@@@@++......@@#$&&$$#@++..........+++@##$&&$#@++.....+@#$$&&&$#@++......++@@@#@@@@@@+++..",
+"...+@#$===&&#@++......+++@#$=;;%$@@++.....+@@#=;;;;%%@@+.....++@$%&*****;=$#@+..+++##$%%###%%@@+.......++@#&=&&%%%@++.+..+.+++++++++++++........++++++++++++.+....++@##===&&#@+++.........+@#%&&==$@@+......+@#%&;;;;=#@@+..+++##$%%###%%##@++.....+@##===&&#@+..........++@#%&&==$#@++...++@@#=;;;;%$@@++...++@@$$%%###%%@@.+..",
+"..++@@#====&#@@+.....+.+@#$%;;;%%#@+....+++@#$;;;;;&%#@++....+@@%%&*****;;$$@++..+@#$$&&$$$&&#@++.....++@@$&=&&&%%@@++..+.++@+@+@++@+@+@+++....++++@@@@@@+@+++.....+@##====&$#@+++......++@##&&&;=$#@++....+@@#%=;;;==$#@++..+@#$$&&$$$&%$##@++...++@@$&==&&#@@+........++@##%&===#@++.....+@#$;;;;;&%#@+.....+@##$&&$$$&&@@+...",
+"..++@#$%%===$#@++....++@@#%%=&&%#@@++....+@#$%&=&&&=&#@++....+@#%&=&&;;=&&$#@++..+@#$%%&%%%&%#@++......+@#$&&=;=$$@@....++@@#####@@#####@@+.++++@@#########@@++...++@#$%%===$$#@++....++@@@$$==;%%##@+...+++@#$==&=&=&%$#@+.++@#$$&&%%%&&%$#@++....+@@$%%==&$@@+........+@@$%===%$#@++...++@#$%&=&&&&%@@++....+@#$%%&%%%%%#@++..",
+".++@@#$%%;;=$$@@++....@@#$%&==&%$#@+....++@$$%&=&&&=&$#@+...++@#%&=&&=;;&%$#@+..+@@$%%&=&&&&&$@@+....++@##$&==;=%$#@++..+@@#$$$$$$$$$$$$#@@..+@@@#$$%$%%$$$$@@+..++@@#$%%;;=%%##@@+...+@@##%%==;%%$##@+...+@##$==&&&=&%$$@+..@@#$%&&%%%&&%$$@++...++@#$%&==&$#@+......++@@#$%=;=$$@@+.....++#$%==&&&&%#@+....++@#$%&=&&&&%#@+...",
+".++@#$%%&=;=%$#@@+..++@#$%&&===%$#@@++..+@@$%&==&&&==$#@++..++@$&&=&==;==&$#@++.+@#$%%==&&&&&$#@++...+@@#$%==;=;%$##+++.+@#$%%%%$%$%%%%%$#@.+@@#$$%%%%%%%%%$##+..+@@#$%%&=;=&%$$#@@.++@@#$$%&;=;&%%$#@@..+@@#$%===&&==%%$#@.+@#$%%==&&&=&%%$#@+...++@#$%&===$#@+.......+@#$%%=;=$#@++.....+@#$%&=&&&&%#@+....++@#$%=&&&%&%#@+...",
+"++@#&==-**-*;;$#@++.+@#&&=*-***;;$#@+.+.+@#&==*-***;;$#@+++.+@@#===*-*-*;;$#@++.+@#&==**-**;;$#@++..++@#&==**-**;;$#@++.@#$***-*;;;**-**=&#.+@#&&&****-***-*%#@.++@#&&=*******=&&#@..+@#&&=***-***==&#@.++@#&==****-**==&#@.@@#&==***-***==&#@@..+.@$$%-**-*$#@++....++@#$%**-**%$@@.....++@$%&*-*-*%$@+++...++@$%%-**-*%$@@++..",
+"++@#&==*-*-*;;$$@@+.+@#&=;*-*-*;;%##@+..@@#===-*--*;;%$#@+...@@#==;*-*-*;;%$#@+.+@#==;-*-*-;;%$#@+...+@#&==-*-*-;;$$#@+.@#$***-*;;;***-*==$.@#$&==*--*-**-**%$@.+@#$&==*--*-**===$#.+@#$&==*-*-*-*==&$#.+@#$&==-*-*-*-===$#.@#$&==-*-*--*===$#@..+++#$%*-*-*%#@++.....++$$%**-*-$#@@......+@#$%*-*-*$$#++....++@$%%*-*-*$$@@.+..",
+".@@#&&=&&&&&**&%$@+.+##&&=&&&&&**&%$@++.@@#&&=&&&&&**&%$@++.++##%&&&&&&&**&%$@+.+##&&=&&&&&**&%$@++.++@#&==&&&&&**&%$@+.@#$&====--*=&&&&**$.@#%***==%%%==---%$#.+@#$**-==&%&=;***%#.+@#%***==%&%==***%#.+@#$***=;%&%;=***%$.@#%***==%&%;=-**%$@....@@#$%%***$$@+......++@#$%%***%$@++.....+@@#$%%***%#@++.....++@#$%%***$$@++...",
+"++##&==&=&&&**&%%@@.+@$&&=&&&&&**&%%@@..+##&==&&&&&**&%%@@+.++@$%&=&&&&&**&%%@@.+@$&&=&&&&&-*&%%@@+.+@@$&&=&&&&&**&%%@@.@#$&==&=**-&&&&&-*$.@$%***=&$$$&&*--%$@.+@#%***;=&%&==-**%$.@@$%*-*==%&%==-**%$.+@#%**-==&%&=;*-*%$.@$%*-*;=&%&==***%##...++@@#$%*-*%#@@......+++@#$%*-*$#@++......+@@#$%*-*%##+......++@@#%%*-*%#@@....",
+"+@@$&&=&&&&&**&&%#@.@##&===&&&&**&%%#@+.@##&&=&&&&&**&&%#@+.++##&&&=&&&&**&&%#@.@##&&==&&&&**&&%#@+.++##&&==&&&&**&%%#@.@#%&&==&--*=&&&&*-$.@$%***%%###$$&&&$#@.+##%*-*==%&%;=***%$.@#$%**-==&%&==-**%$.+##%***;=&%&==***%$.#$%**-==&%&=;-**%$@.....+@#$%***$$@++......++@#$%***%$@@......+++@#$%***$$@++.......+@@$%***$$@+....",
+"+@#$===**-*---&%%@@.@#$&==**-*---&&%@@+.@#$&=;**-*---&%%@@+.+@#$&==*-*----&%%@@.@#$===*-**---&%%@@+.+@#$===**-*---&&%@@.#$%;;;*-**-;;;;;-*%.#$%***%$$##$$&&%$#@.@@$%*-*;;;;;;;--*%$.@@$%-**;;;;;;;*-*%$.+@$%--*;;;;;;;-**%$.@$%-*-;;;;;;;*-*%$@....++@##%*-*%##++......++@@$%***$$@++.+....++@##%*-*%##++......++@##%*-*%##++...",
+"+@#$==;*-*-**-&&%#@.@#$===*-*-**-&&%#@+.@#$===*-*-**-&&%#@+.+@#$=;=**-***-&&%#@.@#$===**-***-&&%#@+.+@#$===-*-**-*&&%#@.#$&;;;-*--*;;;;;-*%.@$%*-*&&%%$%$%%%%$#.@#$%-*-;;;;;;;*-*%$.@#$%*--;;*;;;;*-*%$.@#$%**-;;;;;;;--*%$.#$%*-*;;;;;;;*-*%$@.....+@@$%***$$@@++......+@@#%*-*%##@++......+@@$%***$$@@++......+@@$%***%$@@++..",
+"+@$%**-&&%&&;;=&%#@.@$%*-*&&%&%;;=%%#@+.@$%**-&&%&%;;&&%#@+.+@$%**-&&%&&;;=&%#@.@$%**-&&%&&;;=&%#@+.+@$%**-&&%&%;;=%%#@.$=;;;;%&*--=;=====$.@#$==;**=;=;;***&&@.@@$%-*-;;=====;==%$.+#$%-*-;;=;=;=;==%$.@#$%--*;;=====;==%$.#$%-*-;;====;=;=%$#...+++@#$%*-*%$#@+++....++@#$$***%$#@++....+++@#$%*-*%$#@++...++++@#$%*-*$$#@+++.",
+"@@$%***&&&%&;;&&%#@.@$%*-*&&%&&;;=&%$@+.@$%***&&&%&*;&&%#@+.@@$%***&&&%&;;&&%#@.@$%***&&&%&;;&&%#@+.@@$%***&&%&&;;=&%#@.#==;=;&%*-*;;=;=;=$.+@#=;=-*;;;;;***=&#.+#$%*--;;;;=;=;;=%$.+#$%*-*;;;====;;=%$.@@$%-*-;;=;;=;=;=%$.@$%--*;;;=;=;=;=%$@...++@##$%***%$##@++...++@#$$%-**%$##@++...++@##$%***%$##@++...++@##$%***%$##@++.",
+"+@$%**-%&%&&;;=&&$#.#$%***&&%&%;;=&%$#@.@$%*-*&&%&%;;=&&$#+.@@$%*-*&%&%&;;=&&$#.@$%*-*&%&%&;;=&&$#+.+@$%**-%&%&&;;=&&$#.#=;=;=&%-*-=;===;=$.@@##$%==***;===&$#@.+@$%-*-;;===;==;=%$.+@$%-*-;;=;=;=;==%$.+@$$--*;;=====;;=%$.@$$*--;;==;==;==%$@.+.+@@$$%%-**%%$##@+.+++@@#$%%*-*%%$##@+..++@@$$%%*-*%%$##@+..++@@$$%%-*-%%$##@@.",
+"@@$%***;;;;;-*;;;$#.@$%**-;;;*;--;;;$#@.#$%***;;;;;--;;;$#@.@@$%***;;;;;--;;;$#.#$%***;;;;;--;;;$#@.@#$%***;;;;;--;;;$#.$==******-***;;;**$.++@##$&=***;==&&$#@.@@#$;;;**;;;;;*-*$$.+@#$;;;**;;;;;-*-$$.+@#$=;;*-;;;***-*$$.@#$;;;**;;;;;-*-$$@..+@@%&==;*--;;=&%@@..+@@%&==;-*-;==&%@@..+@@%&==;-*-;;=&%@@..+@@%&==;*-*;;=&%@+.",
+"@@$%*-*;;;*;-*;;;$#.@$%***;;;;;-*;;;$#@.@$%**-;;;*;*-;;;$#@.+@$%*-*;;;*;-*;;;$#.@$%*-*;;;*;*-;;;$#@.+@$%*-*;;;*;*-;;;$#.#==*****-*-**;;;**#..+@@#$&&***;=&&%#@+.+@@$=;;-*;;;;;-*-$#.+@@$=;;**;;;;;-**$$.+@@#==;**;;;**-*-$#.@##=;;*-;;;;;-*-$#@..+@#%&=;;*-*;===&#@..+@#%&=;;*-*;;=&&#@..+@#%&=;;*-*;===&#@..+@#%&=;;*-*;===&#@.",
+"+@@$&=&;===;====&$@.@#$&&==;=;=====&$@@.@#$&&=====;&===&$@@.+@@$&&==;=======&$@.@#$&&==;==;&===&$@@.+@@$&===;==;&===&$@.#$%=====&%&=====%$#...++@#%%;;;==%##@@+.++@#$$%&====;=&%%$@..+@#$$%====;==&%%#@.++@##$%&======%%$$@.+@#$$%&====;=%&$$@@..+@@%%&=======&&%#@..+@#%%&========&%#@..+@@%%&=======&&%#@..+@@%%&=;=====&&%#@.",
+"+@@#%&&=========&#@.+@#%&&=====&&==&#@@.+@#%&&=====&&=&&#@+.+@@#%&&=====&&=&&#@.+@#&&&=====&&=&&#@@.+@@#%&&=====&&=&&#@.@$$=====%%%====&$#@....+@#$%;*;=&$#@+....++@##$&&=====%$$#@.+++@##$=======%$$#@.+++@##$&&=====%$$@@.+@@##$&&=====%$$#@+..+@@%%&=;=====&%%#@..++@$%&=;=====&%%@@..+@@%%&=;=====&&%@@..+@@$%&=======&&%@@.",
+".+@#%%&&&=&&&%&&%#@.+@#%%&&&&&&%%&&%#@+.+@#%%&&&=&&%%&&%#@+..+@#%%&&&&=&%%&&%#@.+@@%%&&&=&&%%&&%#@+.++@#%%&&&=&&%%&&%#@.@##&&&&&$$$&&&&&##@...++@#==***%%#@+.+....++@##%&&&&&&$$#@+...++@##%&&&&&&$$#@+...++@@#%&&=&&&$##@+..++@##%%&=&&&$$#@++..++@$$%&=&=&=&&%$@+.+.@@$$%&=&==&&&%%@@..++@$$%&=&=&=&%%%@+...@@$$%&=&===&%%%@+.",
+".++@@###$$$#$####@@..+@@##$$$$#$###@@++..+@@##$$#$$#$###@@+.+.+@@##$$#$#$####@+.++@@###$#$$#$###@++..++@@###$#$#$####@@.+@@#############@@+...++@#==***%$@@+.......+++@@##$###@@@++...+++@@##$$####@@++...+.+@@@#######@@++...++@@########@@++....++@@##$#$$####@@+...+@@###$#$#$###@@+...++@@##$#$$#$##@@+...++@###$$##$###@@+.",
+"..++@@#@@@@#@#@@@++.+++@@@@@@#@@@@@@+++.+++@@@@@#@@@@@@@++...+++@@@@@#@#@@@@@++..++@@@@@#@@@@@@@++....++@@@@@#@#@@@@@++.++@@@#@@@@@@@@@@++.....+@@#$$$$##@++.........+@@@@@#@@@+++......++@@@@@#@@@@++......+++@@#@#@@@++.......++@@#@#@@@@++....+.++@@@@#@#@#@@@+...+.++@@@@#@#@@@@@+...+.+@@@@@#@@@@@@@++..+.++@@@@#@#@@@@@++.",
+"...+.++@+@+@+++++.....+.++@++@+@+@+++....+.++@+@+@@@++++.+....+.+++@+++@+@+++....+.++@@+@+@@++++++.....+++@@+++@+@+++.....++++@++++@+++++.+.....+@@####@@++...........+++@++@+++..........+++@+@+++..........+.++++@+++.+........++++@+@++...+....++++@@+@+@+@++++.....+.++@+@+@+@+++.+.....++@@+@@@@+++..+....+.++@+@+@@@+++.+.",
+"..++++++++++++++++.........+.+.+.+..+.........+.....................+.++.+..+.........+++++++.............+.++++.+.+.....................................................................+..+.+.................+.++++.+.........+.++++..+......................................................................................",
+"++++@@@#@@@@@@@+++.......+++++++++++.......++++++++................+.+++++++........+++@@@@@++...........++++++++++.+....................................................................++++++.................+++++++.+........++++++++..................................+..+++++++...++@@@@@@++..............................",
+"++@@###$$$#$$##@@@.....+.++@@@@#@@++++...+.++@@@@+++...............+++@@@@+++.......++@@###@@@++........++@@@#@@@@@+++..................................+..............................+++@@@@+++..............++@@@##@++......+.+@@@#@@+++.............+..................+.+@@@@@++...+@@#$$##@+++............................",
+"+@##$%$%%$%$$%$##@+....++@@##$####@@++....++@@###@@++.............++@@###@@+++.....++@##%$%##@++.......++@@#$#$###@@+++....+..+..+.+++.+............+.++..............................+++@@###@@+++...........++@@####@+++.....++@@#$###@++.........+..+..++.+.+...........++@@####@+++.@##$%$$##@+...............+++++.+++.+...",
+"@@%&*****;=;**=&%@@...++@@#&&&&%&&##@++..++##$==$##@++..........+.+@##$**$#@++.....+@@%%***%%@@++......+@@$%===%%%%$@++....+++++++++++++.........+.+++++++................+.++.........+##$==$##@++.........+.+@#%%&=&#@++....++@#$%=;=##@+.........++++++++++++..........++@##$**$#@++.@#$*-*;=$@@++..........+++++++++++++++..",
+"@#%&***-*;;;**=&&#@..++@##$==&=&=&$##++..++@$$=;%$#@@+...........+@@$$%**$#@+....++@@#%&***&%#@+++...+++@#%&=;=&%%%%@++..+++@@@@@@@@@@@+++........+@@@@@@+++...........+++++++++.+...++@#$$=;%$#@@++.+.....+++@@#%&&==$@@+..+++@@#%&;;;$#@@++....+++@@@@@@@@@@@++++..+.++++@@#$%**$##@+.@$$-**;;$#@+++.........+++@@@@@@@@@@@++.",
+"@#%&***-*;;;**==%#@..+@@#$%=;&====$##++..++##%=;%%%#@@++.......++@@#%%%**$$@@.....+@#$%&*-*&&$#@+.....+@#$%&;;;&&&%%@@+..++@@########@@@++......+++@##$#@@+..........++++@+@@+@@+@+..++@#$%;;%%%##@@++..++++@@@#$&====$#@++.++@@#$&&;;;%$#@@++...+@@@##########@@+...++++@@##%$%**%$#@+.@#%*-*;;$$#@@+++....+++@@@##########@@+.",
+"@#&&===;;-*-;;%%$#@.+@@#&&=;;***=;$#@+...++@#$%&;;;$#@+++.....+++@#$=;;&&$#@+++..++##%;;&&&;;$$@+++..++##$;;;;;**%%$@++.++@#$$==$$$&=%$#+++....+.@@$%===#@+++.......++@@@##@####@@@.++@##$$%&;;=$##@@++.++@@###%%;;;%%$#@@+.+@#$$%;;===;=$#@@++.++@#$%%=&$$$**$#@@+.++@@@###$;;;&&%$#@@.@#$&&=;;%$##@@@+++..++@@##$**$$$==%%$#@.",
+"@#%&===;;-*-;;&%$#@.+@#$===;;*-*;=$#@@...++@#$&&;;;%$#@++.....++@#$%;;;&%$#@+.+..+@#$%;;&%&;;%$#++...+@#$%;;;;***%$$@+..++@$%%==%%%==%%$@+......+@@$%===$#@+......+++@@##$$$$$$$##@.+@@#$%%&&;;;%$$##@+.+@@#$$$%%;;;%%$$#@@.@##%%%;;==&;;$$#@++.+@#$%%&==%%%**$$#@+.+@@#$#$$$;;;&&%$$$#.+@#%&=;;%%$$$##@++..+@##$$%**$%$==&&%$#.",
+"+#$%;;;=&&&&-*===$@.@#%&=;;&&;=;;=%$@@+..+@##$==;;;=&$#@++...++@#$&=;;;;=$#@@+..++@#$%=;;;;;=$$#@++.++@##%=;;;;;;%$#@++.++##%%=;=;;;=$$#@++....++@#%&***$#@++.....++@@$&=========%%.@@%&==;%%%%%;==&%#@.@@%%===%%%%%;;=&%#@.@%&=;;&&%&%;;=&&#@+.@@%&=;;%%$%%=;=&&#@.@@%%==;&&%%%=&;;=%%.@##%&=;;=;===%$$@@+.@@$&=;===%$%===;=&%.",
+"@@$%;;;=&&&&*-;==$#.@#%&;;;&&;;===%##@+..+@#$%=;;;;==$$#@@+.++@##%==;;;==%$#@@+.+@#$%%;=;;;=;%$#@@+.++@#$%=;;;;==%$$@@+.+@#$%%;=;;;=;%$#@@+....+@@$&&*-*$#@+++..+++@#$$==;;;==;;=&%.@#%&;;;%%%$%;===&#@.@#%&;;=%%$%%=;==&#@.#%&=;=&%%%%;;==&#@@.@#%&;=;&%%%%;;==&##.@#%&;=;&&%%%&=;;=&%.+@#%&&;*=;=;=%%%#@+.@#%&=;;==%$%==;;=&%.",
+"+@$%;;;&&&&&**=;=$#.@#&&=;;&&=;;;=%$#@@.+@#$$%==;;;=;%$##@+.+@#$$%;=;;;;;%$$#@+.+@#$%%;=;;;;=%%$#@+.+@#$%%;=;;;;;%%$#@+.+@#$%&=;;;;;=%%$#@+.+.++@##&=***$$#@+++..+@#$$%==;;;;;;;;&%.@#%&=;;&%$%$;;===$#.@#%&=;;&%$$%;;===$#.#%&;;;&%%%%;;===$@@.@#%&;;;%%$%%=;===$@.@#%&;;;==$$%=&;;;&%.+@#%&=;;=;;;;&%%$#@.@#%&;;;==%$%==;;;&&.",
+"+@#$=;;****--*-**%#.@#%&*****;=;**;=&#@.@@#;;;**==;**;;=$@@.@@#;;;**===**;;=#@@.@@$=;;**;==**;;=##@.@@$=;;**===**;;=$@@.@@$=;;**=;=**;;;##+.++@@#$$%%&&%%$###++.+@@#=;;**===**;;;%$.@#%&***&%$$%=;;;;$#.@#%&***&&$$$=;;;;$#.#%&***&&$%$;;;;;$#@.@#%&***&&$$%;;;;;$#.@@%%***==%%%==*-*%%.+@#%&&--;;;;;*--%%#.@@%%***==%%%==-**&$.",
+"@@#$===*-*-**-***%$.@#%&**-**;=;**===$@.@#$;;;**;==**;;;$#@.@#$;;;**=;=**;;;$#@.@#$;;;**;;;**;;;$#@.@#$;;;**=;=**;;;$#@.@#$;;;**;=;**;;;$#@.+@@#$$%%%&&%%%$$#@@.+@#$;;;**=;=*-;;;$$.@#%&***&&$$$;;;;;$#.@#%&***&&$$$;;;;;$#.#%&***&&$$%=;;;;$#@.@#%&*-*&&$$$=;;;;$#.+@#$==;;;%%%;;===$#.+@@%&&**&&%%%;;;;=$.+@#$==;;;%%&;;===$#.",
+"+@$$==;*-*-*-*-**%$.@#%&*****;=;**;==$#.@#$;;;-*===*-;;;$#@.@#$;;;**===**;;;$#@.@$$;;;**===*-;;;$#@.@#$;;;-*===**;;;$#@.@$$;;;**==;**;;;$#@.+@##%%%&&%&&%%%%$#@.+@$$;;;-*;=;**;;;%#.@#%%***&%$$$=;;;;$#.@#%&***&%$$%=;;;;$#.#%%***&%$$$=;;;;$#@.@#%&***&&$$$;;;;;$#.+@##===;;&&%;;;=&$#.+@#%&&**%%$%%;;;==$.+@@$&==;;&%%;;;=&$#.",
+"@@$%*-*==%%%%&*-*%$.@@#%;;;==%%%&=;;;$#.#$%***&&%%%&&***%$@.#$%***&&%%%&&-**%$@.@$%*-*&%%%%%&***%$#.#$%***&&%%%&&-**%$#.@$%*-*&&%%%&&-**%$#.@@&&-**-*-*-***-*$#.@@$%*-*&&===*;-**%$.@@$%;;;&&$$$&=;;;$#.@@#%;;;&&$$$%=;;;$#.@$%;;;&&$$$&=;;;%#@.@@#%;;;&%$$$%=;;;%#..++@#%%**&&&-*%$#@+.+@#$&=;;%%%%%&=&;=$...+@#$%**&=&**%%#@+.",
+"+@$%***=&%%%%&***%$.+@$%;;*==%%%&&;;;$#.#$%*-*%%$$$%&*-*%$#.@$%*-*&%$$$%&**-%$#.#$%***&%$$%%&*-*%$@.@$%*-*%%$$$%&***%$@.@$%**-%%$$$%%***%$@.@@&&*-*-*---*-*-*$#.+#$%***&&===;;-**%$.+@#%;;;&&$$$%&;;;%#.+@$$;;;&%$$$&&;;;%#.@#%;;;&%$$$%&;;;$#@.+@$$;;;&&$$$&&;;;$#..++@@#%;;*-*;;$$@@+.+@#%&&--=&=&&*-*&%#...+@@$$;;***;;$#@@+.",
+"@#$%***%%$$$%%***%$.@@#%;;;=&$$$&=;;;$#.#$%***%%$$$%%***%$@.#$%***%$$$$%%***%$@.#$%-**%%$$$$%***%$@.#$%***%%$$$$%-**%$@.#%%***%%$$$%%-**%$@.+@#$$$%%%%%%%%%$$@@.@@%%*-*&=;;;&&***%$.@@#%;;;&%$$$&=;;;$#.@@#%;;;&%$$$%&;;;$$.@#%;;;&%$$$%=;;;$$@.@@#%;;;&%$$$%&;;;%#....+@#$=;***;=$#@+..+@#%&&**===&&*-*&%#....+@#$=;*-*;=$#@+..",
+"@@$%***%%$$$%%*-*%$.+@#%;;;&&$$$&&;;;%#.#$%***%%$$$$%***%$#.#$%***%%$$$$%***%$#.#$%***%$$$$%%***%$#.#$%***%%$$$%%***%$#.@$%***%$$#$%%***%%@.+@@##$$%%%%%%$###@+.@@$%***==;;;&&***%%.+@#$;;;=&$$$&&;;;%$.+@#%;;;=&$$$&&;;;%#.@#$;;;&%$$$%&;;;%#@.+@#%;;;&%$$$&&;;;%#...++@#$&&--*&%$@@+..+@@%&&**-**-*;;;%$#...++@#$&&*-*&%$#@++.",
+"@#$%*-*%%%$$%%***%$.@##%;;;&&%$$&=;;;$$.@$%***%%$$$%%***%$@.#$%***%%$$%%%***%$@.@$%***%%$$$%%***%$@.#$%-**%%$$$%%***%$@.#$%***%%$$$%%***%$@..++@@#$$%%%%$$#@@@+.@#$%***&=;*;%%-**%$.+@#%;;;&&%%%&=;;;$$.+@#$;;;&&$%$&=;;;$$.@#%;;;&&%$%&=;;;$$#.+@#$;;;&&%$%%=;;;$$..+++@#$&&*-*%%#@+...+@#%&&*-*-*-*===$#@..+++@#$&&-*-%%#@+...",
+"+@$%***==%%%=;***%$.+#$%;;;=&%$%&&;;;%$.#$%***==&%%;;*-*%##.@$%***==%%%=;***%#@.#$%**-==&%%=;*-*%##.@$%***==%%%=;*-*%#@.@$%**-==%%%=;***$$@..+.+@@#&=*-*$#@@+.+.+@$%*-**-&&&;;***%#.+@#$;;;==%%%=;;;;%$.+@#$;;;;=%&%=;;;;%$.@#$;;;;=%%%=;;;;%##.+@#$;;;;=%%&=;;;;%$...+@#$$=;;;;%$@@++..@@#%&=;;&%%%%%$##@+...+@#$$==;;;$$@+++..",
+"@@#$***;;&&&=;***%#.@#$%;;;&&%%%&&*;;%$.@#%*-*;=&%&==***$#@.@#%***;;&&&=;***$#@.@#%***;=&%&;=***$#@.@#%***;;&&&;=***$#@.@#%***;;%%%=;***$#@...+++@#&=*-*$#@+.+..@#$%*****&&&=;***$#.++##;;;;=&&&;=*;;%$.+@@$;;;=;%&&;=*;;%$.@@#;;;=;&&&;=*;;%$#.+@@$;;;=;&&%;=*;;%$.++@@#$%==;;;$$@+....@#$%&=;;&%%%$##@@++.++@@#$%=;;;;%##++...",
+"+@#$&==**-*-*-=&&$#.@#=;---*-%%&*-*-*=&.@#$&&=**-*-*-=&&$@@.@#$&==***-*-*==&$#+.@#$&==**-*-*-=&&$@@.@##&==***-**-=&&$#@.@#$&&=**---**==&$@@....++@#$%==&$#@+....+@$%;;;-***-**=&&$#.++@#%%&********-*=&..+@#%%&********-*=&.+@#$%&********--=&#..+@#$%&***-****-*=&..+@#==;--***%#@++...@#$;;;-*;==$##@@++...+@#==;*-***%#@+....",
+".@@#%&&**-*-**=&%#@.@#&;*-*-*&&&*-*--==.+@#&&&-*-*-**=&&#@+.+@#%&&**-*-**&&%#@@.+@#%&&-**-***&&&#@+.@@#%&&**-*-**=&%#@+.+@#&&&**-*-*-&&%#@+.....+@@$%&&&#@+.+...@@#%;;;*--*-*-&=%#@..+@@$%%**---***--==.++@@$%%**-*-**---==.+@##%%*-*--**-*-==#.++@@$$%****-**---==.+@@$==;**-**$#@++...@#%;;;-*;==$#@++.+..+@@$==;-****$#@@....",
+".+@#%&&***-***&&%#@.@#==**--*%%%*-*-*=&.+@@%&&****-**&%%#@+.+@#%%&***-***&&%@@+.+@#%%&**-*-**&%%#@+.+@#%&&**-****&&%#@+.+@@%&&**-*-**&&%#@+.....++@#$&&%#@@.....+##%;;;-***-**&%%#@..++@#$%*******-*-=&..++@#$%**-*-***-*=&..+@##%****-***-*=&#...+@#$$**-*-***-*=&..@@$==;-****$#@+....@#$;;;**;==#@@+......@@$==;*-***$#@+....",
+"+++@@#$$$$%$$$$#@@+.@##$$%$$$$$$$$%$$$#.++@@#$$%$%$$$$#@@++.++@##$$$$$%$$$##@++.++@##$$$$%$$$$#@@++.++@@#$$$$$%$$$#@@+..++@@#$$$$%$$$$#@@++......+@@#@##@++.....@@%%;;;%%%$%$$$#@@+...++@@#$$%$%%$%$$$#...++@@#$$$%$%$%$$$#..++@@#$$%$$%%%$$$#@...++@##$$$%$$%%$$$#.++@#=======&$#@++...@#$&=;===&&#@++.....++@#=======&$@@+....",
+"..++@@#####$###@@@+.+@@###$###########@.+++@@####$####@@@....++@@###$#####@@++...++@@####$#$##@@@+..+++@@###$#####@@@+..+++@@####$####@@@.+.......++@@@+@.+.....+@%%===$$$#$###@@@....+++@@#######$###@...++@@@######$####@...++@@###$####$##@@....++@@###$#$##$##@..@@#&&==&=&%#@+.....+@#&&===&&&#@++......@@#&&===&&&#@++....",
+"...+++@@@@@@@@@+++...+@@@@@@@+@@@#@@@@+...+++@@@@@@@@@++.+....+++@@@@#@@@@+++.....+++@@@@@@@@@+++.....+++@@@@#@@@@+++.....+++@@@@@@@@@++.+.........+++++.+......+@@#######@@@@@++.+.....+@+@@@#@#@@@@@+......+@@@#@#@@#@@@+....+++@@@@@@#@@@@++.....++@@@@@@@@@@@@+..++@##$$#$##@@+.....+@@#$#$$###@@.+......++@##$#$###@@+.....",
+"....+.++@+@+++++......+++@++++++++@++++....+.+++@+@+++++.......+.+++++@++++.+......+.+++@++++++.+......+.++++++++++.......++.++@+@@+++++...............+.........+@@@#@@@@+@+++++........+.++++++@+++++........+++++@++@+++.....+.++@+@++@++++........+++@+@@@+++++...+@@@@@#@@@@+......++@@@@#@#@@+++........+@@@@#@#@@++......",
+".......................+++++.........................................................................++++@@@@@@@@@@@@++.............++.+.......+.+++++++++++...........+++++++...................+........................................................................+.+....+......++@@@+++++..+..+........................",
+".....................+++++++++.................................+.+++.+.++.+.+........................++@#@#####@####@@+...........++++++++.....+++@@@@@@@@+++.........+++@@@++..................+......................................................................+..++.+.++.+.+...@@@###@@+++++.+.........................",
+".....................+@@#@@@+++....................+........+++++++++++++++++++......+.+++...........+@##$$$$$$$$$$$$#@.........+.++@@++++...+.+@@@#####@@@++.........+@@@##@@++.............+++++++++.......+.+++++.+...............+...........+.++++++..+...........++++@+++++++++...@#$$$$##@@@+@+++++.......+.+.+...+......",
+".......+.+++........+@@%%$$#@++.+................+....+.....++@@@@@@@#@#@@@@@@+.....+++++++.........+@##***=======***$#.........++@@#$#@@+....++@%%%%%%%&%@@++......+++@#&&%#@++.............++@@@@@@++.......++++@+++......+..++.+.+...++++.+...+++@+@+++++.++.+.....+++@##@#@@@##@++..#==***%%##@##@@@@++.....+++++.+.++++++..",
+".......++@+@+++.....@@#%&%%%#@@+.....+.....++++++++++.+.....+@###$#$###$#$###@@...+.+@@@@@@++.......+@#$***;;=;=;;***%#....+.+.++@@#%$$#@@....+@@%%&&&&%&&#@@.....+.++@##&==##@++..........+++@######@@....++++@@#@#@++.+.....+++++++@+++++++++.++@@#@##@@@@++++++....++@##$#$###$##@++.$==***&%$$$$%###@@@..+.++@+@+++++@+@+++.",
+".....+++@@#@@+++....@#$&&&%%$#@++..++.+...+.++@@@@@@@@+.+...@##$$$%$%%%$%$%$$#@....+@@###@@++.......+@#$***;;=;;;;***%$...+.++++@@#$%%$##@+..++@#%&===&&==$@@++...++@@#$$===$##@@++........++@#$$%$$##@...+++@@#$#$##@++....+++@@@@@@@#@#@#@@@+.+@##$$$#$###@#@@@@+..++@#$%%$$$$$%%#@@+.$=;***&&$%$%%%$$$#@...++@@#@@@+@@@#@@@+.",
+".....++@#%%$#@++....#$%*****%$#@++.++++...++@@##$####@@+++..@&=*-*****-*******#..+++@$%&&&#@++......+@$%***;;===;=***%$.++++++@@@$%%-*%$#@+..++@#&&&;;==**$#@+..++@@@##$%***%$##@@+........+@##-****=&#.++++@@#%&***$#@@+.+.+@@##$$$$#$#$#$$#@@.@#$=====%%%$$#$###@..+@@#=====%&&**%##@.#==***;==&=**===&&$.+++##$&&##@@#%%%#@@.",
+"....++@##%%%$@@++...##%**-**%%#@++++@@@..++@@#$$$%$$$##+++..#%&-**-*-*-*-*****#...+@@%&==&#@++......@@$%*-*;=;==;;-*-%$.++@@@@@@#%%&*-%%$@@..+@@#&&=;;==**%#@++.+@@#$$$%%*-*%%$$##@.......++@#$*--**=&#.++@@##$%&***%$@@+++.@@#$$$$%$%$%$%%%$#@.@$$=;=;=&&&%%$%$$##.+@@#$=;;;=&&&**%$#@.#&=***;====--=;===%..+@@$$=&$####%&%$#@.",
+".....+@$%**&&#@+....@#$%%*-*=&#@@@@#$%%.++@#%&&**-*;;%%#@++.@$$%%%%%;;;%%%%$$#@...+@#$%===$#@+......@#$$;;;*****;;--*%$.@@$$$$$$#%%&**&%$@@..+@#$%&=;;&&**%$#@@.+@$%==;=;*-*=;===%$.......+@@$%==;;=%$#.@@$$%%%=&===$$$##@+.@#&=*-*-**-******$#.#&=-*-*******-*-**#.+@#$%===;=&&&**%%$@.#$$&&&**&&&==***;=%..+@#$%**%$$$%***&%#.",
+"....+@@$%**&&##+++..+@#%%***=&$@@@@#$&%.+@##&&=*-*-;;&%#@@+.@##$$%%&;;;%%%$$##@...+@@%&===##++......@#$%;;;*-***;;*--%%.@#%%%%%$%%%&**&%%#@.@@##$&&=;;%&**%$##@.@#%&=;;;=-*-;=;==%%......++@#$%=;=;=%$@.@#%%%%&==;;;%%%$##@.@#&=--*-*-*---***$#.#==*--*******--***$.@@#%&===;;&%&-*&%%#.@#$%&&**&&&=;***;=%..+@#$%**%%%$$***&&#.",
+".....+@$%-*=&$#@+...+@#$%-*-==$####$%&&.@@$$&&=--**;;=&$#@+.@#$$$%%%;*;%%$###@@...+@#$%;==$#+++.....#$%%;*;***-*;;-*-%%.@#%&&&&%%%&&*-&&%#@.@##$%&&&;;&&**%%$$#.@#%&;;;=;*-*;=;=;%%......+@@$$%=;=;=$$@.@#%&&&&===;=%%%%$$#.@$==*--*-****-*-*$#.#&=-*-**-*-**-*-**#.@#$%&===;=&&&**&%%$.@#$&&&-*&&&==*-*;=$..+@#$%**%%%%%***=&#.",
+"....++@#$==**$#@++..++@#%;;;&&$###$**&%.@#%&***%;;;;=;;&%#@.#%&%%%%&;;;&&$$$##@.+..@@%%===$#@+......$$***-*;;;==;;***==.##*****-*-*-**;;;$#.$%%=;;;;**=;-*;==&&.##==***;=-**;;;;;=&.....++@#==;***-*%$@.#$***-***-*-*****%$.@#%%***%%%%%&&***%$.@#$%%&**;;;**%%$$##.#$%***-******--***%.@#$===*-&%%%%***&%$..++@#$**=&=&=;;;**$.",
+"....++@##&=**$#@@+..++@#$;;;&&$$#$$**&%.@$&&***%;;*==;;&&$@.#&&&&%%&;;;&&%$$$$#...+@@%%;==$@@+......$%****-;;=;;;**-*==.@#**-*--*-****;;;$#.$%&=;;*;-*;=*-=;==&.##==*-*;;**-=;;;;;&.....+@@$=;;**-**%$@.#$**-*--*---*-***&%.@#$%***%%%%%&&***%$.@@#$%%**;;;**%%$##@.$$%***-******-****&.@#$==;**%%%%%***%%#..++@#%**=&&=&;;;**#.",
+"....++@##%%**%#+++...+@#$===**%$$%&**%$.#$**===%&&=;;&%**$#.#&===;=;--*;;====&%..+.@#$%===$#@++.....#$==;==;====**;;;&&.@#$$%%&**&&&&&;;;%$.%&&;=;;;**;=**;===&.@$==***%%***&%;===&.....++##=;;;;===%$@.#$=;===%&***===&%$#.@#%%***%$#$$%=*-*$$.+@@##$%%;;;=&$$#@@@.@##%%===;;&&&*-&&%#.#$%***-*%$$$$=;==&#...+@#$&=***;;=&&$$#.",
+".++++@@#$%&**%#@+....++@#&==**%$$&&**$#.#$**===%&&&;;&&**$#.$&===;=;**-;;=====%..+.@@%%;==$#@.......@$&==;==;=;=**;;;&&.+@#$%%%-*&&&&&;;;%$.%%&=;;;;**;=*-====&.@$&=**-&%-**&%====&.....+@@$==;;;==&%$#.#$;====%&*-*==&&%#@.+@$%***%$##$&&***%#..++@@#$%;;;==$#@@+..+@#$%==;==&%&**&&%#.#%%****-%$$$$==;&&$..+++@$&&***;*&&&##@.",
+"..+@@###$%%-*%$@@++...@@#&==**%%%%&**##.#$**=&&%%&=;;&&**%$.#&=====;*-*;;=====%...+@@%%=;=$#@++.....@#&===;=;==;**;;;&%.++@@$%%**&&&&&;;;%$.$%&==;;;**;=**===&%.@$==***%&*-*%&=====......@@#=;;*;===%$#.#$=;===&%*-*=&&%$#@.@#$%***$$###%&*-*$$..+++@@#%;;;=&$#@+.+.+@@#$===;;&&&-*&%%#.#%&*****%$$#%====&#...+@##&=***;;&%%#@+.",
+"++@@$$%==$%;;&%#@++...+@@#$%**=&&%$$$#@.$$*-=&&$$%%**&&;;&%.@##$$%%%;;;%%%$$###...+@@$%***$#@++.....@#$%***-*--*--;;=%$.+++@@$$;;=;=%%%%%=&.@##$$&&=;;&&*-%%%$#.@$&=-*-;=*-*;;;;;=&..+.+.+@#$%%**;;;;=$.@$==;;;&%;;;==$$#@+.@#$%***%$##$%&***%$....++@#$=;==&$#@+....+@#$===;=&&%*-%%$@.#&==;;**%%$$$&====$...++##%%-*-;;%$$@@+.",
+"+@@$$%%;;%%;;=%#@++....+@@$$**==&$$$@@+.#%**===$$%%**&&;;&%.+@@###$%;;;%$$####@...++#$%***%#@+......@##%**-*-**-**;;;$#...++@#$=;;=;%%%%$&&.@@##$&&=;;&&**%%$#@.@$&=***;;-*-;;;;;==.+.+++@@#$%%**;;;;=$.@#&=;;;%&*;;=&%#@@+.@@%%***$$##$%&*-*%$.....+@@#==;=&$#@+...++@@#===;=&&&*-%$$@.#&====**%%%$%&==;=$..+@@#$%%-**;;%$#@++.",
+"+@$$***&&$%=&;=$#@@...+++@#$%&***%$#@@+.#$;;;==$$$%;;==;;=&.+++@@#$%;;;%$#@@@@+...++@$$***%$@@+.....+@#%;;;=&%&%&&;==$#...+++@#%%**-%%$####.++@@#%&&;;&%**&&%##.@#%&;;;%%*-*&%===%%.+++@@@@#$%%;;***;;#.@#%%*-*=&=;;;;%##@+.@@$%***%$$#$&&***%#......+@#%%&;;$#@@+...+@#$&===;&&&**&%$@.@##$%%=;=&&$%&=&==$.+@@#$%;;*-***%%$@@+.",
+"@#$%***&&%%&&;=%$#@.....+@@#%&***%$$@++.#$;;=;=%$$$=;=;;;&&...++@##%;;;%$#@@+++....@@#%***%$#@++....+@#$;;;&=&%&&&;;=$@.....@@#$%***&%$##@@..+@@#%&=;;%%**&&&#@.@#%&;;;%&***%%&&&%$.+@@@###$$%&;;***;;$.@#$&***&&;=;;;%$#@@.@#%%***%%$$$&&*-*%$.....++@@$%&;;%$#@++...@@#==;==%&&-*%%#@.@@###%==&=&%%=====#.+##$%%;;**-**%%$#@+.",
+"@#%%***=&%%==;;%$##......+@#$%***%$$#@+.##;;;=;$$%%;;==;;&&....++@#$;;;%%##++.+....+@#$*-*%$#@@++...+@#$;;;=&&%%&%==&#@.....++@$%*-*&%$#@@+...+@#%&&;;&%**=&&$#.@@$%;;;%%--*%%&%%%#.@##$$$%$%%%;****;;$.+#$%***&&;=;;;%$$#@.+@$%***%%%%%&=***$$.....+.@@$$%;;%$#@@+..+@@$&==;=&&&**%%$@.++@@#$=====%%====&#.@#$%%&;;-**-*&%$##@.",
+"#$;;----*;;;;**==%$.......@@#$=;=;;%##@.@#$%***;%$%%&****%#.....+@#%;;;==$##++....++@#$;;;==$#@@++..+@#$=;;**;=;&%$$##@.....++@#$%&&=;$#@@+..++@@%%=;;%$&&***%$.+@@#$$%%%***%$$##@@.@&&===***-*;;;;;%%$.+@#$;;;-*=&===;==$#.@#$%*-*;;;;;;;*-*%$.......+@@$$====&#@+...@@$&=;;;===-*%%#@.+++@@#%&;;;;;***%$#.#&=*--**%%%==***$##.",
+"#$;;*-***;;;;**;=&%.......+@@#&==;;%%##.@@$$***;%%%&&****$#....++@#$;;;;=%##++....++@@$=;;;=%$#@++...+@#===**;==%%##@@+.....+++@#%%&;=%$#@@..++@@%%&;;%$&&***%$.++@@@##$%***%$#@@@+.#&====****-;;;;;&%#.+@#$=;;--&&&==;;=$$.+@$%***;=;;;;;***%$........+@#$=;===$#@..++@$&==;;===*-%%#@..+.+@@$%;;;;;***%$@.#&=-*-**%%%&=***%$#.",
+"#$**===&%====;;**%%.......++@##$%&=**%$.+@##$$%=***%%%&$$#@.....+@#$;;;;;$$#+++.....+@#$$%**=&%#@++.++@#$%&*-;;;$$#@@++.......++@##$&&&&%#+...++@$%%==$$#%&&&;;..++@@@#$%-**%##@+++.@%&=;;=;&&&%%&&&==#.++@#$%%&=%$$$$=====.+@$$===%%$%$%&;;;$#.......+++@#$%;==&%@...@@#&&=;;;=;**%%#@...+++@#$%&&==&%%##@.#%&&=&%$$#$$$%&&**%.",
+"@$**&&&%%==;=;=-*%$.......+++@@#$&&**%%..+@@#$$=***%$%%##@@.....+@##==;;;$##+.+....+++@#$$**==&#@+..+++@$$%**;;;$#@++.........+++@##&&&&%@@...++@#%%&&###$&&&;=.....+@@#$***$#@@+.+.#$%=====%%%$$%%%==#..+@@$$%&&$#$$$&====.+@#$&&&$$#$$$%;;;$#........++@@$$=;=&%@...+@#%&=;;;=;**%$#@....+++@#%%&==&%$#@+.@%%&&&$##@@##%%%**$.",
+"##**&&%$$&&====**%$.........++@@#%&**%%.+.+@@##&***$#$$@@++......+@#===;=$#@++.......+@@#$**=&%#@++..++@#$%**;;=#@@+............++@#$%&%%@+....+@##$&&#@@@%%&==....+.+@#$***$#@+....@$%&====%%$##$$%&&#..++@@#$%%##@@#%&&&&.++#$%&&##@@#$$===#@.........++@#$&==%%@..+.@@%%&;;===**%$#@......+@@$%%&&$$$@++.@$$%%%##@@@@@$$%**$.",
+"@##$######$#$$$$$##.........+++@@##$$%%....++@@#$#$##@@@++......++@@##$#$#@@+.........+@@##$&%%#@+...+++@@#$$$$##@++...........+.++@@####@+....++@@@#@@@@@#####......++@#%%$#@++....@@###$###@#@@@###@@....++@@@@@@@@@#####.+++@##@@@@@@@##$##@.........+++@#####@@....+@@##$%$%%&&$#@+......++@@@####@@@++.+@@#@@@+++++@@###$#.",
+"@@@@#@@@@@@#@####@@...........++@@###%$.....++@@##@@@++++........++@@@##@@++...........+@@##%%$@+++....++@@####@@++...............++@@@@@++.....+++@@@++++@@#@@.....+.+@@#$$#@+.....+@@@#@#@@@+@@+@@@@+....+++@@@++++@@@#@@..++++@@@++.+@@@@@@+...........++@@@@@@+...+++@@######&%#@++........+@@@@@@@++...+@@@@@+++..+++@@@@@.",
+"++@@@++++@+@@@+@@@+.............++@@@@@.....+.+@@@+++++...........++@@+@++++............++@@@#@@+.+....++++@@@@@++.................+.++++........+++.++..+.+++@......+++@@@@++++.....++++@@+++..+.+++++.....+...+..+.++++++...++++.+.+..++@++++...........+.+@@++++....++++@@@@#@#@@@++.........+++@+++.......+.++......+++@@++."};
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf7, 0xff, 0xff, 0xfd,
+ 0xff, 0xff, 0xff, 0xff, 0x8b, 0xff, 0xff, 0xfd, 0xf7, 0xff, 0xff, 0xfd,
0xfe, 0xe9, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff,
- 0xff, 0xff, 0xff, 0xfd, 0xe7, 0xff, 0x4f, 0xfd, 0xfd, 0xeb, 0xff, 0x5f,
- 0xfe, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf7, 0xff, 0xff, 0x7f, 0xfa,
+ 0x01, 0xff, 0xff, 0xfd, 0xe7, 0xff, 0x4f, 0xfd, 0xfd, 0xeb, 0xff, 0x5f,
+ 0xfe, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf7, 0x83, 0xff, 0x7f, 0xfa,
0xfd, 0x57, 0xdf, 0xfe, 0xfe, 0xfd, 0xff, 0x8f, 0xfa, 0xfb, 0xff, 0xff,
- 0xff, 0x3f, 0xea, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xfb, 0xb7, 0xbf, 0xfc,
+ 0xff, 0x3f, 0xea, 0xfb, 0x01, 0xff, 0xff, 0xfb, 0xfb, 0xb7, 0xbf, 0xfc,
0xfd, 0xe9, 0xff, 0xbf, 0xfe, 0xfa, 0xf7, 0x4b, 0xff, 0x7f, 0xfa, 0xff,
- 0xff, 0xff, 0xbf, 0xfe, 0xfe, 0x6f, 0x9f, 0xfe, 0x7e, 0xea, 0xff, 0xcf,
- 0x7d, 0xfb, 0xdd, 0x97, 0xff, 0xff, 0xea, 0xff, 0xff, 0x7f, 0xff, 0xff,
+ 0x83, 0xff, 0xbf, 0xfe, 0xfe, 0x6f, 0x9f, 0xfe, 0x7e, 0xea, 0xff, 0xcf,
+ 0x7d, 0xfb, 0xdd, 0x97, 0xff, 0xff, 0xea, 0xff, 0x03, 0x7f, 0xff, 0xff,
0xf1, 0x6f, 0x3f, 0xff, 0xff, 0xca, 0xff, 0x1f, 0xfb, 0xfa, 0xeb, 0x7f,
- 0x2f, 0xbd, 0xfc, 0xff, 0xff, 0xff, 0x7f, 0xfd, 0xfd, 0xbb, 0x3f, 0xff,
+ 0x2f, 0xbd, 0xfc, 0xff, 0x81, 0xff, 0x7f, 0xfd, 0xfd, 0xbb, 0x3f, 0xff,
0xfe, 0xf7, 0xff, 0x4f, 0xfe, 0x7c, 0xea, 0xbf, 0xff, 0x7f, 0xeb, 0xff,
- 0xff, 0x3f, 0xfe, 0xf9, 0xea, 0x57, 0x7f, 0xfe, 0xfd, 0xcf, 0xff, 0xdf,
- 0xfd, 0xfb, 0xdd, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xff, 0x3f, 0xff, 0xfe,
+ 0x03, 0x3f, 0xfe, 0xf9, 0xea, 0x57, 0x7f, 0xfe, 0xfd, 0xcf, 0xff, 0xdf,
+ 0xfd, 0xfb, 0xdd, 0xff, 0xff, 0xff, 0xfa, 0xff, 0x81, 0x3f, 0xff, 0xfe,
0xa8, 0xff, 0x3f, 0xff, 0xfe, 0xf2, 0xff, 0x3f, 0xff, 0xff, 0xeb, 0xff,
- 0xff, 0x7f, 0xfd, 0xff, 0xff, 0x7f, 0xff, 0xfd, 0xeb, 0xff, 0x7f, 0xfe,
+ 0xff, 0x7f, 0xfd, 0xff, 0x01, 0x7f, 0xff, 0xfd, 0xeb, 0xff, 0x7f, 0xfe,
0xfe, 0xfd, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
/* XPM */
static char * matrix1b_xpm[] = {
-"160 182 15 1",
+"160 182 42 1",
+" c None",
". c #000000",
-"+ c #061406",
-"@ c #279027",
-"# c #0F390F",
-"$ c #081E08",
-"% c #217A21",
-"& c #2BA02B",
+"+ c #030E03",
+"@ c #061406",
+"# c #081E08",
+"$ c #0B2A0B",
+"% c #0F390F",
+"& c #165016",
"* c #1B641B",
-"= c #165016",
-"- c #0B2A0B",
-"; c #030E03",
-"> c #34BB34",
+"= c #217A21",
+"- c #279027",
+"; c #34BB34",
+"> c #2BA02B",
", c #5AD25A",
"' c #81DD81",
") c #A7E7A7",
-".............;+$+;.....++++;....;$--#$+....+-#$+....;++;..................;+;......+-##$;...;-##$;.....;+++................................................+--$;",
-"............+$#=-+...+$----$$...+#=**=$+.++#*%=$$..++---$.......;++......+--$$....+$=@*-+...$#%*#+....+$##-$......++......................................+$**-+",
-".;..;..;..;.$#@>*-+..+#***%=$+.+$=%@@*#+.$-*&>%=$+;$#*%=-+.;..$$##-+.;..+$*%=$+.;.+#*@*-+...+=%@=-+.;;$#@&=-+.;..;$-$+.;..;..;..;..;..;..;..;..;..;..;..;.$#@&=+",
-"...........;$*&,%-;.+-=@@@&*#+++#*&&&%=$+-*@&>&*-+;-=%@%#$...+$=%@*-+...+#%&*$;..;$*@%#$.;..+-*@%#+;;+=*&>%*-+..;-*%#+...................................;$*@@#+",
-"..;..;......$*>,%#+.;-*&&@>*#+;-=@>,>@*$+#%@@@&*#++#*@@%*-+..$=%@@%-+..+$=@@=$...;-%@%#;.....$=@@#$.;$*@,'&%#$..$#@&*$+..;..;..;..;..++.;..;..;..;...;...;#%@*-+",
-"...;..;;....$*>'%#+;.-*@@@&*-;;-*@>>,&*$$#%&@@%*#++#*@@@*#+.+$=%@%=#$+..$=*=#+...;#@&*$+.....$#@>=$.;-=@>'>%#+++$=&>*#$$..;..;..;..+$-----$;;..;...;....+$=@@=-.",
-"........;..+$=&,%-;..$#====-+;+#*&>&,%*$+#*&&&@*#+;$=%@@%#$;;-*&&%*#$+..;-#-+..;.;#@>*$+.;...+#@>=$..$=%>,&*#++#*@>'&%=$..........+#*%%%%%=$.....;...;..+#*%*-+.",
-".;.;........+=@>*-+..;$$-$$+..;#%&>&>%#++$=%@@>@=$+$=@&&%=$.;-*&>&@*#;+..;;;.....+#@>*$...;..+#@>*$..$#%@@&*#++=&>,',>%$..;.;+;..;+=>&,,>>%$.;..;;;....;-*@%#$+.",
-".....;.;.;..+-@&=+.........;..+#&,>,,%=$+-*%@@&@*$+-=%&&@*#.+-%&>>>@=+...........;#%&%-+.....$=@&=++.+#***%=$++-*%>,%%=$...+-#-+..;-**%***=$...++$$+.;.+#%%*-;..",
-"............;-=*#+.;..........+#@&&&&*-++#%&&&>@=$;+#*@@@%#++=%@&&>@=$.....;.;...;-*@%#+..;..-=@@#+..;$----$+..$$=%,*#$;;.+$**=$;;.+$----$$;...+==#+..;-*&*#+...",
-".;......;.;..-=%-+...;...;....;-%&&&%=+;;-*@>>@=-+.;$=%@@%-++#@&>>>&*$+.;.....;...$=%@=$;...;#%%*#;....+;+;;....+#@&=++...+#@&*$;....++.+..;.;;$*@*-;.+#%@*-+...",
-"...;.;.......+=%-+....;...;...+-*@&@%#+.;$-#%@*-+...;-***=-;+-=%&&@@*$...;.;......;-*@*#+..+$#@%=$..............+$*%#+...+-=@%#+....;.;........-=%*$;.$=%%#+.;..",
-"..........;..+$-+...;.......;..$=%@%*-+...;$=*#+.....$---$+.;+-#####-+.......;.;...+#%=$+...+#*=$+..;........;...+$-+;;...$=*=-+;........;.....+-#$;;.$#*=-+....",
-".;...;.;.......;;.;....;.;......$###-$.....+--$;;....+++++.....+++++;;.;..+.;...;...$$$+....++$$+;;...;..;.;..;..;.;......+$#$+...;...;....;.;...;;...;-#-+..;..",
-"..++$$$++..;+++++;..;.+$$$$++...+$--$++.....+$$++.;++$$$$$+.....+$$$+.;$$$-$-+;..;++$$$++;..;$$$++.....;...........;..;.;..;;..................;....;...++++;...",
-".+$#=*#-+..+-#*=$;...+$#**=#$+++-#**=#$+...+-==#+;;$#=**==$.;.+-#=*=-++#=****=$;.+-#**=#$;.+$#=*#-$.;....;.;...;..............;.;...;..;.;.......;.....+$-=#-$+.",
-";$=%@@@*-++-*&>&#$..+-*%@@&*#+;$*%@&&*#+.;.$=&&%$;+-*&&@@*#;.+$=@&@%#$$=%@@@@%#+;-*%@@&*#+.+#%@%%*#;.........;......;....;..++$++.;.....;..;++$$++..;.+$=%&&*#$.",
-"+#%@&&&%=$+-%&,>*$..;-%&&&>@*$+-*&&&>@*$..+#%>>@#++#%>&@@*-;.$#%>,&%#+$*%@@&&@#++#%>&&>@*$+$*&&@&@=+..;++$+....;.;++$+;...;+$#==-+.+++$$$+;;+#==#$+;..;-*>>>&*-+",
-"+#@@%%%@*$;$#*&>=$+.+-*%%%@@*$+-=**%&@*$;+$=@&>@#+$#%>&@%*-+;-*&&@%=-++$##*%@%#;+#@@%%@@*$$#%@%%&&*$..+-==-+.....+-==-+..+$-=%@@=++$#====#-+$*@%%=#$+.+#*@%@@@#+",
-"$#@@**%@*-..+#@>*$..;$-##*@@*$.+-#*%>&*$.+-*&@&@#++#%>,>&%#++-%,&@%*-+.+$-#%%*-;$#%@@%@@*$+#%@%*&,*$;.+=@@=+.;...+=@&#+++$#%%@@*-++-*%@%@%=$+-*@&&*#-+;$=%*%@@#+",
-"$=@%==%@%$;.+#@,=-;..++-=%>%=$..$#%>>@*$;$=%&@>@=++#*%@&>>#$+#%>>>&&#$..+$=@@#$.+#@&>,>@*$+#%&@%>>*$..+#%%#+...;.+#%@#+.$=%>@%=#+++=%&&@&@*$+;-=@&&&=$;+-=%&&%#$",
-"$#@@*#%@%$;.+#@>*$+...$#@>@=$;;;+#=@@@*$+#@>&@>&*$;$#==*&>*$$#%>&@>>*+..;-=@*#;+$#%&@&&@*$+-*&>>>,*$+..-##$+.....+$##-++-*@,@*=$+.+=@@&&@&%$.+$#*@>>*$.+$=&&%=-;",
-"$#@@*=%@%$;.+#@>=-...+#%&>*#+..$##=*@@*$+#%>&&,&%-$-###*&>*+$#%,*%&>*$;.+#*@*-;.+=@@%%@@%$++#%>&>>*+.;.+--+;...;.++$$+.;$=%&&%=-+++=%@&&&@*-.;-=@@&&*$..$=>&=-;.",
-"$#%@%%%@*$;+-*@,%#$;+-*&>&*#$++-**=%@@%-+-*&@>,>%#+=**=%&>*$+#*>%%&>*$..+=%@=$.;+#@&@%@@*-;+#*%@>&=$..+$##$+.....;-##$+.+-=%&&@*-+$#%%@@@@*$+#=%&&%#-;..+#%%#+..",
-"+#*@@&&%=++$=%&>@*#++=&,&&@*#;+#&&@@>%=$;+#=%&>>*#+=%&@&&@#++$*&&@,&=$..+=&@#$..+#%&&&>@=$+$#@@&&@#+..+#%@#+;...+$=@@#+..;$#*%&@=++$#=====-+$*@@%*#$;...+#%*$+..",
-";$#*%@@=-++-*@@&@%=++#@&&@@%#$+-%@@@@*-+.;$-*@&@*$+-*@&@%=-..+-*@@@%#+;.+#@*-;...$#%@@@*-++$=@@@*#$+.;+#%@#+....;#%&%#+....+$#==-+.+++$+$++++#==#$+;.;..+#*=$;..",
-".;+#=*=$;.;$==%%**-++-=%%%**#+.$#=*%=#+...++#=%*=+.+-=%*#-+;.++#=*=#$;..+$=#$;.;.;$#**=#+.;$#=*=#$+...+-==-+;...+#%%=$+;.....++$++..........;+$$+.....;.;-##+...",
-"..++$$$+...;$$---$$..+----#$$...+$---++....+$$-$++.++$--++..;.++$-$++....+++;;....++--$++..;+-$-+......+$-++..;.;-=#-+...;....................+..;;;.....+$+;;..",
-"..;;$$++....+++++.;;.++$$+++;.;..++++++.+++;++++...++++++++..++++++++....+++++;;.;+++++++;.++++++++;...++++++.+;;+$++++..++++++..;.+++.+++++.+++;;;+;.;..;++;...",
-";;$#==#++;.+--##++..+$####-++..++-##--$+$-####$++.+$##=##-+.+$##=###-++++$###-$++$-##--#-++$-###--++.;+-####$++$##--#-$+++-##-$+..+---$;$--++$-$$$#-$;;;+----$+.",
-".+#%&&%#+.+$=%%%#+..$=%@%%*=$;++#*%%%*=-#%%@%%*#$.-=%%@%@%#++=%@%@@%*$;$#*%%%*=$-=%%*=%%*-$=*@@@*=-+.+-=%@%%=$-=%@**%%=++#*@%%#$+;-=%*#-=%*#-=%*#=%%=$;$#**%=#$;",
-";#*@&&&=-+;$*@,>*-++-*&>&&@&#+$#%@&@&&%#=@&&@@@@#+-*@>&&&&=+-*@>&@&&%-$#%&&&&&%#-%&&%*@&@#+=*@>>@*-+.;#*@>&@*--*&&@@&@*$+#%&>@=-;.-%>@*=%>@##%&&%*&&%$$#%&&@&@#$",
-"+#%@@&,*-+.$=@&>%=+.-*@&&@&>=--%&&%*@&%##@&@%%&>*--*@&@@>>*$-*@&@%@&%-#%&@%%@&%#-*&&%%@&@#+-=%'&*#$..+$=*@&@=$-*&&@&&%=++-*&&%#++.-*',%%&,&=#%>>%%>>*$-%&@%%&>*$",
-"+=@@@@,%#+;+=%&&@=$+$=%&@@>,*-#@>%##=%*-#%&%*=@>%-+=%&%%&&=++=%&%@%%*-#@>%==%%%-$*@&%%&&%-++$*>@=$+...+$=%%%#+-=&&&>@#-+;-=@&=-+.++*>,&%&'&##%&>&@&,*-#@>%==@>%-",
-"$=@&>,>%=++$=@&@>*#+$#%,@&,>*-=@>*-+$-$+-%@%##*@%#$#%&&>@*#++#%&&&@*-+#&>*##**=$$=@&&@&&*-.;-*,@-+...++$#%%*-+$=@',,*#+..+#@@=++..-*,,&>>,@##%@&&&>>*-#@>*-#*@%#",
-"$#@&&,>%=++-*@@@&%=$$=%>&&&>%##@>*-+++++-%@%#-*%@#$#%,,'&=-+$#%,,,@#++#@>%#*@@*-$=@>@&&@%-..;=>@#+;.+$-$#%%*-;$=@>,'@#$..+#@@=-$++-=>>,,&,@##*&@>>>,*$=@>*-#*%@#",
-"$=@&&>>@=$$#@>>,>@*-$=%&%%@&%#=@&*#$$#$$#*@%##*@%--=%&&&@*=+$=%&&&%-;;#@>%=%&>%#$=@&%%@&*-;;$*>@#++;-*%=#%@*-+$=@@&@&*#+.+#@@*=*=+-*,&@@@>@##%@@&&>>*-#@&*-#%@%#",
-"$#@&@@&@=$$*&,@@&,@#-=%&%%@&%##%&@===**$#%&%=*@>%-$=%@@@@@%--=%&@%=$+;-%@@*%@&%#-*@@%%@&%#.$-*,&=-;;#@&%*@@*$;$*@&%@&@=$.$=@&*%&%#$*,&%%*,&##%@%%@,,*-#%&%**@>%-",
-"$#%&@@@%#$-%'>@%&,@#-%&,&@&&*--=%@@@%@*-#@>&@&&&=$-*&>&&&&@--%&>&%#$..-=@&&@&@*--*>&%%@&@#+#*@,&%=$;-%>&@&@=+.-*>&@*@&%#+#%>'@&,%##%&&*=%>&=#%>@%@>>*$-=@&@@&&=$",
-";-=@&>&*-+-*&&@*@>%#-*&&&&&@=$+-=%&@@*#$#@&&&&@*#+-*@&&&&&*--*&&&%#+..+-=@@&@%#$-*&&%*&&%#$#*@&>%=-.-=%&&@*-+.-*&&*=*@%#+#@@&&&&%$-*@@==*&%##%&@=*%@=++#=%&&%*-+",
-".;$#**=#+.+##=##==#$+#=*===#-+++$-==##$+$#*===#-+.$#==*===#++-===#$+...+-##=##+;+#==##==#$+-#==*=#+.+$#==#-+..$#==#--##$+$==*===#+$###-$###$+#==-###$;.+-##=#-;.",
-"..++$-+++.++$$+++++;.+$$$$++;...;+$$$;..++$$-$++.;.++$$-$++;.+$$++;.;....+$$++..;+$$$+$$++.++-$$$+....+$$$+.;.++$+++$++..++-$$$$++.+$$$++$$...++++++;....++++;..",
-".;+++$++.....++++....++++++.....++++++...$+++++++..;+++;++;..++++;+++..+++;+++;..++++;+++..++++++++...+++++++...+----+..++$++.......+$---+;....++++.............",
-"+$#=###-+..+$--#-$+.+-#=##-+$..;+####-$++-#=#=##+;+--#--#--++--#$$-#-$+$-#$$-#-+$$-#--##-++--#--##-+++$##=##-+..-=%*#$+;+#=#++...;.+$#*%=-..;..+#=-+;.......;...",
-"-*@&&&%*#++$#%@@*=-+-=@&&@%#$+;$#@@&@@#+-*&@&&&@#+-=@@=*%@=--*@%*#%@%#-*@%=#*@%#-*@@%*@@%#-*@@%*@@%#+-*%&&&@*-+;#@>@=$+.+=*%-+;....+-=@>%#+...$#%@=$+.;.;.....;.",
-"-%&,,,&%=$$#*@&,&%#+-%>,,>&*#+$#*>>>,>*$#@,,',,,*$#%,>*%&,%--%>&*=%>&##%>>%%@>&=-*>,@%>,&#-%@'&%>'&#$#%>>,>,@#.+#@,%#$..+#*@=-+..;.++=*,@#+..;-=@>*-+....;......",
-"-*@@%%@@%##*&@%%&&*--*>&@%@@*-$*@&@%&&*$=@&@,&>&*-#%>%=*&>*--*>&*=%>@##*,&&&@,@=-=&>@@&>%#-=>&@@&>%#$#@@@@&>%-.+#@>=-+;.+-*@*#+.....+$*,%#+..+#%@&@=+.;...;.;...",
-"$=%@**%@@##@,%==%&%-$=@@%%&&*--*@@%%%@=$#@&%>,&,=$#%@%=#@,*$-=@@*=*@%--*>,>,@>@#+#%&>&>@=$+#*@@@&@=$+#*%%@&%=+.+#@>*$....+#%@*-+.....$=>&#+;.+#@@@&=$;..........",
-"$=%&%%%@%#=@&%##*@@#-=@&@@>@*$-=%>>@@%#+-=%%,@%*-+-%@%#=@>*$$=@@*=%@*--*,>,,@'@#+$#%>,@*-+.$#%&'&=-++$#=%&&*#+.+#@'=-.;..+-=%%=-+.;..$*>@#+..+#***%=$+;...;.;...",
-"+=%>,,>@*-#@,*=#*@%#$=&&,,&%#++#*@&&,&=++$#=,@=#$+#*@%##@,*$;-*@%%@%=$$*&,>&>,@#+$#*&&@=-+.+-*&,%#$..+#=@,%=-+.+$@>*$+....+-*@%#+....+='@#+..+$-#-#-+.....;.;...",
-"$=%,>>&%#$#%>@%*@&%-$=&>>>>%#$-=%%@&,&*$.+-*>@=+;.#*@%==@,=$+$=%@@@*#+-=,,&@'>@-+-*@&&&*#+..+=&>*#+..+#%&>%*#-.+#@>=-;.....$#%%=-.;.+$*&@#+;..;;;;;.;.++++$$$$$.",
-"$=@&&%*#-+-=@&,&&,*--*&&@%>&*##%&@%%>,*$.+-*,&=-+.-*@@%%@>=$.+#@&&&=$+$#@>@%>&%-$=@'&@>&%-.+$=@'*#+;+-*&,@@&%#.+#@>%#+..;...-*%%#+..+#*,@#+..;....;..+$##=#===#+",
-"-*&,@%#$..$#%,>,,@*-#%,&%%@>@#=@'@@&,@=$;$=@,&*-+.$=%@@@&@#+.+-*&'@#+.+#@@%%@@*--*,&@%&)@#++#%>,%=+++-%>>@&>@#.+#@,%=-......+=%&#+..$=@>%#+..........;#*%%%%%%*-",
-"#*%@@*#+.;+#*&&&,>*$$=@@*#*@%#-*@@@%@%#++$#%@@*#+.+$=%@@%*-+..+#%@*-+.;#*%*=%%=$$=@@%*%@%#..#*%@%=$;+-*@@@@@*-;.-*@@=-+...;.+#%@=+;+-=@@%#+;..;.;..;.;#%&&@@@&%#",
-"+-#=##$+...$#*****#++-###$-##$$-###=#-$..+-#=##$+..+$#####+..+;$###++..+###-##$++-#####=#$..$#=##-+..+-#==###+..$#**#-+;....;+#=$+..$#**=$...........+#**%%%%*=$",
-".+++$++....++-$---+..++$+.+++..++$++++.....+$$++;...++$+++.....+++++;..+.++;.++..++$+++++;.;.++$++....+++$$+++..++$-+;.......+$$+....$--++.;....;.....+$-----#-+",
-"..;.+++;.;.;...;..;+.+$++...;.;.;...;.;.;..;+++++........;.;...;+$+++..;........++$++........++++.;....++$+..;.++$++...;.;+++++..;...........;....;....;.;;;....",
-"...+$-$+............$#=#$+..................+#=#$+;.;........;;-#===-+.......;.;+#=#$+......+-##-+..;..+#=#++.+$==-+.....+$===-+...;.....;..........;...........",
-"..+-**#+...;.+.+....-*&@#$+.....;..+.+.....+#%@%#;...++;+....;$=@&>@#+.;.;+.+...-*&@#$+;.;..+=@@#$....+-%@*-+.+#@&*-+....+#%>&=+.....;+.+..;.;++......;..;.++.;.",
-".;+#%,*-+..++$-$$+.;$*&@*#-++;.++$-$-$+.;++$#%&@#+.++$$-$+.;;$#*>>@*#+.;+$$--$$+-*@@*#$++...$=@@=+;..+$#%&%-+.+#%@*#--+;.+$*&'*$.;.$$$--$-+.;$$$$--++..;+$-$$+;.",
-"..+-%@*#;.++#=**=-++$=@&%*=#$++$#=***=#++$#**@&@=++$#=**=#+.+#*@,@%*-++$#=****#$$*@&%*=#++.+-*@@#++.+$=*@@%#+.+#*@%=*=#+..+#@>=$..$#******#++#*==*=-$+;$#=**=#+.",
-"...$#**#+.+-*@&>@=$+$=@&,,,%=$$=%,@&>'=+$=%&>,>@=+$=%&&&@*#+$=%>,>@*#+$=%&&&,&*-$=&&,>>*#+;+#%&>=$..;-*@&'&=+.+-*@@@&%=+..+#%,*$+.$%&'&,'&*--%&&@@&*#$$=%&&&@*#+",
-"...++##$+.+#@&',&*#+$=&>>&>&%-#%&,%&'&*$#%&'&>&@#+#%>,&>>@=++=@,>&@*$+#*&,@>,>*-$=@,&>,%*$.+#*>>=$..+-=%&,&=+.+-*@&>&%=+..+#@>=$;.-%,,,>,>%##%>>@@>@=-#%&>&&>@=$",
-".;...+++;.+#%@&&'%#+$=@&%%%,@##@>@**@&*$#@>@%@&@=$#%,>&&,,*$+$=@&%=#++#@&&%%,@*$$#@&%*@@*$.;$=@'*$...+-#=%>=$.+-*&,)@=-+;.+#%'*-..$=@@@&&&@#-=@&%%@@*-#@>@*%&>*$",
-"..........$=@,>>,%=+$=@@%=%,%#=@,*##**#$#@,*=*@@=$=&'>'',&*$++#@@%-+..#%,&&&>@#+$=@@**%&*-..+#@>=-+...++#*,=$.+-*>,&%=++..+#@@=-+.$=@@@&@@@#-=@@**%@%-=@>%**&>*$",
-".;.;.....;$*&>@%,@=$$*@&%*%,@##%,@*=**=-#%,@%@&@=$#%,&@&&&=$+$=@@%=-+.$=%&,>>@=+-=@@**%&%-++-=@,*#+;..+$#*&=+.+#*&@'&*#+.+-=@'*#++$*@&@&@@@#-=&@**%@%-=@>@**>>*$",
-".....;....$*,&&&,@*--*&'&&&,*##%&&@@@@*$#%&&@&,&*-#%>&&&>&=++#*&>@%=$.+-*%@@@@#+-*,&%*&&%#+$=%,'%*#+.+#=*%&=$.+#@&@@,@*-+$=%,>%*-+$*&&@&&&@=-*&>%%@>%##%&&&&&>=$",
-".......;..+#@>&&&&*$-=@>&&&%=$-#%&&&&@=$$=%&&&>&=$$#%&&&&%#++=%&&&@*$++-*%@@@*-+$=>&%*@>%#+$*%@'&*#++#*@@&%#+.+=@@%*&&%#+$*%&,&*#$-*&@%@&@@=-*&&@*&>@#$=%&&&@*#;",
-".;.;.....;+$#=****#+$#==**=-$++$#=**=#-+++#=**=*#++$#***==$++-=*%*=#+.+#*@@@*#$.$#**##**=$;+#=**=#-;;-*@@%=-+.+$==##=*=+.$#=***#-+$#**==*==-$#=*=#**=$+$-=**#-+.",
-".....;.....+$-$--$+..+$$$$$+.;..+$$-$++...+$$-$$++..++-$$++..+$$-$$-...$-###-+..++$-$+$+++.+;$$$-++..+####$+...+$$$$$$++..+$$-$++.+$$-$$$$++++$$$+$$++.++$-$$;..",
-".......;...;....;.;.;........................+.......................;...+.+..;........+...............++.;......+++$+.;..;+$++....+++++;.......................",
-".;.;..................;....;..;.......;.;.+$++....;........;............;......................;...;.........;...+-##$+....+#=-+;..;$##-++...........;.;....;...",
-".....;.;.;.;..;+........;.+.....;.;......+#=#$+;....+;.;.....;+;.;.+.;.....;..;.;.;+.;.;.;.;.........;...+;....;+#**=$+...+-*@#$...;$=**#+.;.;.;.;......;.;...;.",
-"++$---$++..++-$--$-.;+$--$$-+...+$$--$+.+-=%*#-+..+$$++$$++.++$-$$$-$++$$-++$$-.++$-$$--+.++--++--+..++--$-$+...+=&@#+.;.;+#@,=$.;..+=@@=+.........;............",
-"$#****=#$++$-=****#++-=*=*==$+.+$#=*==#++#@&@%*#+.-=*#-#=#-+$#**==**=-$#*=##=*=-$=**#=*=#+-=*###=*#++$#=***=#+..$*&@#$....+#@&*$....+#@>=-....++++++....;.;.;...",
-"-%&>&>@%=+-=*@>&>>*-$=%&&&&%#+;$#%&>@@=$+=&','&*-+=&&*=@&%#+-*>>@%&'@##*>&%*%>&##%&>%@'&#$=&&@=%&>*$+#%@'>'%=+;+-*)@#+.....#@>*-.;..;#@'*-+;.+--#-#-$+..........",
-"-*',@@@'*##%>@@&'>*$$=%)>&&%#$+#*&'&&@*-+=@&&%%=++=@'**%&@#$-*'&@%&,@##%'&@@@'@=-*&'@@&@#+#@,@%@>'=$+#@@&@,*=+.+-%,%#+;.;.+#@'=$....+#@>%#+.+-*%@%%%=+;....;....",
-";=@&@%*,@#=%'%%%&&=$+$=,&%*=-.+-%&,,&%=++#%@@*#-+.#%&%=*@@=++-%@%%@@%-$=&&&,@&@#$$*@,>%=-+$=@&@&@%#++-*@&,&*#+.+$%,&#+....+#%>*$.;..;#@,@-+.+=&>>>>@*$..;....;..",
-"$=&,&@@>%##@&@@&&&=++-*&%*-$+.+-*&,&&@*++-*@%=#$$.#%@%**@@=++#*@@%&%#+$=&&,>&>%-+-=@,&%#+.+-=&)&%#+.+-*%>&@=#+.;-*&@#+....+#@,=$....+#@&*$+.+=@@@&&%=+.....;....",
-"+=@>&,@%=$$=%@@&&@=$+#*,%*#$+.+#*@&&&>%-+-*@@**=#+#*&@*@&&*$.$#%&&&*-+$#@&>&,&*$$#*&,>@=-+.$#%,&=$..+-*&,@@*=+..$=,@#+;.;..#%&=$.;..+#@'=-.;.$==#==#$+;.;...;...",
-"$=@&@*=#$++$#=%%&@*$$=@,%%*-+.+#@&&&&)%-.$=@>@@%#$-=@&@@'>*+.+-%&,%#+.+#*&&@&%=$-*@>@&&@#++#*&&%#+;.+#%,&&@@*$..$=&@#$+...+#%%=+...++=@@=+...++++++++........;..",
-"-*>>@*#$+..+$-*@>&*$-*@,&&%#+.+#%@&&&%=$.+-*&&@*#++#=@&&&&*$..$#%%*-+.+$=%**%*#+$%&@%@>&#+-*,&,%#+..+-%&&,>%=$;.+#@%=$+.;..+==-+....$=%@#+.......;......;.;.....",
-"$*&&%*$+....+$=%&&*$+#====#$+.++##**=#$+..+-==#-$..+-#*=*=-+..+$-#-+...+$---#$+++#=###==$+$=%%*=$.;.+$#=*==#-+...$#=#++....+$$++;..++#=#-+;.;.......;........;..",
-"+#=*=-++.;...+#=*=#+.+$+$+++....++$$$++.....+$+++...+$;$$$+.;..++++.;....+++++...+$++$+++.+$###-+.....++$$$++.....++++..;.........;.;++++......;......;.........",
-".;++...........+++.....++++;......+++.;.;.......;...+.+.++.....++++.....++$+$+..............+++++.......++.+.;.;.............;..............;..++++.....;.;..;..",
-".......;...;.......;...+-#$+..;.+$---++...;.......;$---$-#$+;.+$#-+.;.;+$#=*=#$+...+++++;...+$---++;.;.$$-++..........;.;.;.....;........;....+$--$$+...;+$$+;..",
-"...;.....;...;..;....;$#*@=-+..+$=%%%#+.+++$+++++++#*%**%%=$..+#%*#....$=%,&&%#+;++$-$--+.++#=%%*#-+.++#=*=-...;.;.;.........;....;.;.;.....++#=%%*#-+.+$#=*#-+.",
-";....;........++.....+-*&,%#$+.$#@&,&*-++$#=====-+$=&,&@&)%-..$*>@#+..+#*&&@&%#+..$#=#==$++#%&>)>%=+.+-=@@&=-.....+.+++..+++++++..........;.+-%&>'>%=$.;#%&&%#+.",
-".......;.;.;.+$--+;.+-*@,>&*-++$=&&@%=$++-*@&&@%=++#@>&&'@*-;.$=,%#+;.-=@'&@%%-+.+$#####+.$=&,,>>&%-.+#%@&'=$+..$--#---++-#=#=##-.....++....-=&',,>&%-+;-*@@*#+.",
-".;.;........+$#=#+..+#%@&&&*#++-*&@*=-+.+#@&&&>&*-+-*&&@,%#$..+#>@#+..#%&>)&@*-+;.+$$+-++;#*&>,&&&@#+$=%@@>*$+.--=%***=+-*@&>&&@=+;+-$---$++-%@,>@'&%#..+###-$;.",
-".....;......+-=*#$..+#@@%%%=-++#@&&%#$+.$#@@@@&@*-++=@,&>*-+;.$=&%#+;.#@'&,&&@#+.....+...+#%&,&&&&%#+$=@@&&*-++#=@@@@@=$-*&'>',>=$+-=*%***-+#%@&>&>&%=...+++;;..",
-".......;.;.;.#*%=$+.+=@@%**=-++=@,,&=-+.+=@&@%@&%$.+#*,)&*-+..+#@*#+.+$*&&&&,'=$...;......#%>,,&&@@#+$*%>>'*#+-*@>@&&%=++#==*%@'*$$#*@&&&@#+#%&>,&&@%#+.........",
-";.;.........$#@&%-+.+#%&@@@*$++#%>&@*-+.+#@&&@&&*$.$#%,,%*#+;.$=@%-+..$#%%@>>%#+;....;....-*>,>,>&%#+$=@,>@*#+-%'@&&>%#+++$--=@&=$+-=*%%*=-+-*&>>&>&@#+...;.;...",
-".....;......$=,)@#+.+$=@&'@=$+$#@&,%%==++#%&&,>@*$.+#%&)@*-+..+=&@#+;.$=%%%@>%#+........;.$#%&&&>&*#.+#=%%%#$++=%'@&&@=+....+-=*#+++------+;+=@&>&>@*-..........",
-"..;....;.;..$=,,%#+..+-=&>*#+.$=,,,&,&%-+-=*****#++$=@,'&*#+;.$*'%#+..$*@&&>@=$+;.;..;....+-=%&,@*#+.++-##-$+;+$=%@@@@=+.....+$-+...++++;...+-=%&>&*#$;.;..;..;.",
-"............+#@,@#+...+#*@#$..+-@&&&>&*$;$-#-$--$+.+#*@'&=-.+.+#&@#+..$*%,&&*#+............+-=%@*#$+..+.++++...+#=*=**=$;.;....;.............+-=%@*#$;..........",
-"..;.;....;..+#%%=$+;...+-#-+;.+$==*===#+..+.+..+...+$#===-+.;.$#@*-+..+-**%=#+.....;.;.;....+$-#-++;............+$--$-+;........;.......;.;...+$#--$;....;.;....",
-"......;......+-#$+......+++.....+$$--++..;.....;.;..;++$$+....+$=#++;..+$-$$+...;........;....+.+.....;.;..;.;......;+....+;.;.....+.;.......;;;;+....;.....;...",
-";.++$$+..;.........;.;+$$$$.;...+$$$+.......;+..............;.+$----+........;...............++++..;....+..............;+-##++..;++##-+...;.+-##-$+..........;..",
-".+$#==#+...;.++++....+$#==#$+.;+-===-+.;.;.++$++.;.......;...$-=****#$...........;.;.;.;...;+-#=$+.....$$-$+..;.;.;.....-=%*#++.;+#*%=$+++$+#*@%*-++$+;.;.++;;..",
-";$#*%*=-+....+-#-+...+-*%%*#+..$=%%%=-+...+$#=-+...;.;......$#%@&)>&*$;.;..;.;.............++=%@=+.;.+$#**=-+.......;...-*&@=$+$-$=%&*-$-#=-=%@@%=-##-...;$#-+..",
-"+-*@%@*=$;..$#*@=-+;.+#*%@*#$..$=%@>*-+...+#**#+...+++++$-+;$=&,&,,&*$.........;.......;.;.+$=@>=$...-#*%@%=$+..++..+.;.$*&&=-$=*#=@&%##***$#%@&%*=*%-+.;;#*=$+.",
-"+-*@%@%=+.++#=&'==$+.+-*%@*#+;.$=%@'=#+;..+#%*-+;.+#=#--=#-+$*',>,&%=$...;+$+....;.;........+=@'=$+..$=@@%@*#++$----$+..-=@@*#=*%##%@%=*%@*-#%@>@%%%%-...+#*=$+.",
-"+$#%@%=#+.+-%@>'&%=$.+#*@@*#+..-=@@@*#+...+-#-+...-*@@==@@*$$=&>,'&%=$;..+-=#-.......;...;..$#%,*-+;+$=%@@@*#++=*****#$.-*&@%*%@%#=%@@%%@@*-#%@&@@@@=$+.+$=@*-+.",
-".+-=**#+;.+#&'',>>%-.+#%@@*#+..-%@@@=-+;...+++..;.-*>&**@@*$$#@&,,&%=$..+$=@*-$.............$=&,=-+..+=%@@@*-+$=@@@&@*#+#*@&@@@@%#=@@&&&&@%##%%&@&&@=++;$#%&@#+.",
-"...$--++..+-=%@'@%=$.+#***=-+;.$=%**#$............$=&@**%@%-+-=%>,&%=$;.+$*@%-+.;.;+$+.;..;+$=*%=-+..+#%&&@=-++=%&&&>&=$$=*%@@&>@##*%@@@@@&#-=%%>>>>*$.+#*@>%#+.",
-";...++..;..$-=@@*#$+..+-##$+...+$#-#++.;.;.;.;..;.-=&@%%@&%-.+-*@'@%=+...+#=#+....+-=#$+....+$-#-$+;.$=@',>*#++#%&@&,,=$+-=%@&@'@#-*%@%%@@@-$-=@&@>>*$+$*@@%*#$;",
-"..;........;#*%@*#$+...;+++......;++..............$=&&@@@'@#++-=@,>@*$....+$+.....$=@%#+..;...+.+....+#*@&@=-+$=%@@@>&=$+#*@@@%'&##*@%**@&*-$#%@@@>,*$;#*@@**=#+",
-"........;.+-*%@&@*#-.......;.;.......;........;.;.$#@',&&&@#++=%>,>&%$;......;.;.+-%'@=+...........;.++##=#$+.-*@@@&&%#++-%%%@@>&=#*%*=%@@*--=%%%@&'%$;-*@&@@%=+",
-";.;..;....+#@&,&'&*$.;.........;.......;.;.;......$#%@%*=*#$.+=%&@'>%-..;........+-*'&=$;...;.;.;.......+++..++=**=*=-+;+-====*&&#-#=##%@@@-+#=##=@&*$;$=%&&&%=+",
-"........;.+$======#$...;.........;................$#**#-$++..+$=*===#+....;......+$=**#+.................;....+$----$+;..+$$+$##=$+$++$-=##$++-$+-###+.;$=%@@*-+",
-"..+.+;.....++$-$-$+......+.;.;....;;.;......;.;.;..$##-+.......+$$$$+.;......;.;..+##-+...;.....+.;.;.;.;.;;...+.;;++.....+++++++......+$$$...+.+;+$;...;+###-+.",
-".+$##$+.;....+$##$+;.;+$#=$+...;+$-#$+.;.;++++++..;+-#=#$+;...++++++++..;+$++++..+$=#$++....;+##-$;...+$=#$+...+++$+$+;..++-#++..;..;++-#-++..+$==-$;;..;;+++++.",
-".+-=*#$+....+$#**-+..++=*%=++..+#=**=-$..+$--$-++..+-*%*-+..;++######+.++-###-$+.+-**#$+;...+$#*=-+..+$#%%#$+;.+-=#==#+..+-===$+.....+-=%=$..+$#%%*-+;.;$-$--$+;",
-".+#*%*#+;.;+$#%%=-+.++#*@@*-+.+-=@>&%#+..+#====-+.+$#%%%#+...+-%%%%%%-+$#*%%%*=-+$#*@%=-$+++#=%%*=+++-=*@@%#$++-=%%%**-+.+#*%%#-+.++$#*%%#-..+#*@@%=$;;$#===*=-+",
-"+-=%@@#$+..$#*@@=$+.;-*@@@*-+.;-%@&&*#+.+$*%%%*-+.+#*@&%#+;..+#&')&'&#-=%'&>>,%--=%@&&@%#+$=*@&&@%#+$=%&&&&%#+-=@&&&@@#++-=%@@%=-+.+#*@&%*-++-=%@@&*#+;-*@%@@*=+",
-";-*&',*$+.+$*@'&%-+.+-*&',%#+.+#%&),*#+.+-*&'&%#+.$=%',@=+...$=@'&@@%##@>%**%@*##%>'@'>&=$#%,,&'>&=$#%&'@',&=$-%>'&,>&=$+-*@>,&%#$+$*@'>&%=++-%@>,>%=+;-*&>,>%=+",
-".-=@@)@#$;+-=%,'@#+..-=@>)@=+..-=@>'@=+.+-=@,)@#+.+$*@'&*-+;.+=&,&&@*##%)%#-#*=$$=%@%%@'=+$#%@%@&>=+$=@&%%&&=+-=%&%%&>=+;+=%&'@*-+;-#%&,@*-;;$=%&,@*-;+$=%&>@*-+",
-".-=&>@>=-++$*@&@&*#+.-=&@&&*-++$=@>@&*#++-=&@&&*#++#*>&>@=+++-*,@&,&*-#@>*-$-#-$$=%&%@@*#+$=%@%%@%#+$=%@%@@%#++=%&%@@*#+.+$=&>*#+..+-=&>*#+..+$=&>*#+..+-=&,*#+.",
-";#*&>@'%=++#%&,@'%=$+-%&,@'%=++#*@,@'%=+;#%&,@'%=$$=%,@>&%-+$=*>>,'>*$=*'%#####++#*,&&@*-++=%,&&@*#+$#%,&&@=-++=*,&&@=-+..+#@>=-+...;#@>*-+...+-@>*$;...+#@>*$;.",
-"+=@,,@,@%$$#@>>&,@*-$=@,>&'@%$+=@'&>,@*-$#@>>&>@%-#%&,&,&@#$-*&,>@@%=+#%&@%%%@=-$=%>@&&*#$$=%&&&&*#$$=%&@&&*#++=%&@>@*#+..$=@,=-+;..+=@,=-+;..$#@>=-+..;+#&>*$+.",
-"$*&>&@&,@#-=,>&@&'@#-=>,&@@'@#-*&,&@&'@#-*&,&@&,@#=%,&@&,>*$#%,&&&@@%-$=%&&&&&*$-=%,@@&@%--=@&@@@@%--=%,@@@@%--*@&@&@@%-++-=@'%#-+.+#=@,%#$+.+-*@,%#-+.+#=&>%#$+",
-"#*',@%&'@=#%,&@%&'&=#%'&@%&'@=#%,,@%&'&=-%'&@%&'@==&'@@@,,*-=&,@',&&&#+-=%'&%*-+-%,>@&>,%##%'&&&'@%##%,&&&&,%-#%,'@&>>%-+$*@,,@*=++$=@,,@%#$+-=@,,@*=+;$*%,,@%#$",
-"-*&&%*%>@#-*>&%*%&@#-=,&%*@&@#-*@&%*@&@#-=,&%*%&@==@&@**@&%-=%&@&>&&@#.+$*&&*-+.$*@,&@&&*$-*&>@@&&%--*&&&@@&*$$*@,@@&&*$+-=%&&@*=++$=%@&@*=+;-=%@>@%#$.-*%@>@*=+",
-"+#==##===$$#===#=*#-$#==##===-+#==##=*=-$#===#=*=$-=*=#===#$-===*=**=+.+-*%*-+..+#=*==*=#$+#=**=*=#$$#***===#$+#=*==*=#+;+#=*===-;.$#==*==-+.$#=====-+.$#=*===-;",
-"++$$$$$$+++$$$$+$-$.++$-$$$$+++;-$+$$$++++$$$$$$+++$$$$---$.+$$$$$-$$...+$-$+....++--$-$++.+---$$$+..+$----$$..;$----$++..++$-$++..;+$---++..;++$$$+;...+$--$++.",
-".;++++++...+$####-$...$##$+......+-##++...+-##-+...+$-###-$...++$++.;.;......;...;.++++++..+$##-+......+$#-$+...+-##-+....+++++;......+-#$+;..++;;;......++-+;+.",
-"+$--#--$+..+-*@%%*-+.+-=%=-+..;.+$=**-+..+$=%%=-+..+#*%@%*-+.++---$$+........+...++$####$+.+-*%=$++;..+$=**-+;.+-=%%=-+.;++----$+;...$-**#+++---$+;;;...+-#=#$;.",
-"+=*%*%*=-$+-=@&&@*-+.+#*%*#$+...+#%@*-+;.+#*@@*#$.+$=@&&@*$+.+-*=**#+.;+-++.+++.+$#**%&@=++$#*@*=$+.++-#%@*#$+++#%@@*=-.;+#*====-+++$#=%%=-++=*%=#$+.;.$-*@@%#$;",
-"-=,&&@@&*-$=%@&>@%#+.+#*@@*#+..+#=@@*#$.++=%@@@*-++#*@&>@*$+.$=%%%%*-++$=#---#-+$=%&&&,'*+$#**@%*=-$+#=*@@%*#++#*@%@@*=++=*%%%%%#++-=*%@@*=$-*@>@*#$+;.$=@&&&*-;",
-"-*>>@@@,%##*&&%@&@*-+#*@&@@%#+$#*@@&@%#++#*@@&@%#+$#*@&&@%#+$#*@&@@%#++#%**#*%*$#*&>@>,&*$-*&@%%@@*$-*@@*%&@*--*@@%%&@*--*&@*%&&*--=@&@%&&%#-=@,&@%=-+.$*@&&>%#+",
-"-%&&@%*&@=#@>,@%&,%$-=@>@@&&=$-=@>@@&&=$-*@@@@&&*$-*@&@@>&=$-*@@@@>&*++#@&@%@@*-#%,@@@&&%##@>@**&'*-#%,@**&,%-#@>@**&,%-#@>@**&>%$-*>&%%&>@#$=*,>>&@*$+-*@&&,%=$",
-"#%,,&%*@@=#@&&@@>>*-#%,%**&&%-#@&@**&&%-#@,%**@&%-#@,%**@&%-#@,%**@&%-+-*&,&'*#$=@,*@@@@@##%&%==&>*$#@&%==&&*$#%&%==&>*$#%&%==&,=-+#@&@%&@*$$=%@%%%&%-+-*@>,>%=$",
-"-%&,@**%@=#%&&&@&,*-#%,%##%@%#=@'%##%@%##%,%#=%@%##%,%##%@%##%,%##*@%-+$#%,,&*#$#%,@@@%@@##%@%#=@,*--%@%#=@,*-#%@%##@,*$#%&%#=%'*$+-=@&&>*#++#%@%%%&%#+-*%@@&>%#",
-"-=&@%=*%@=#%&@&&,>*$=@>*##%&%##@&%##%&%#=@&%##%&%#=@>*##%&%#=@>*##%@%#+-*@>&,%#$#@,@@%%&%##%@%#=@,=$#*@%#=@,=$#*&%==@>*$-%@%==@>*+.+#%>,@=$+$=%>@@&>%-+$%%%%%,@#",
-"-*&&%*%&@##@&@%@>'*$-%,%**@&*##%,%**@&%-#%&%**@&%--%,%**@&%-#%>%**@&%-+#%&@@&@*$#%,&@@@&%--*@@**@>*$-*@%**&&*$-*@%*%@>*+-*@@**@,=$.+-*&,%#$+-=%,&&&@=$+#%@@%%>@#",
-"-%,,&@&,*##@,&%@,&*$-=%@&&>&=$-=%@&&>&=$-=%@&&&&=$-=%@&&&&=$-=%@&&>&=$+#%%*=*@=$#*&>&&>&=$$=%&&&,@#+$=%&&&,@=+$=%&&&>@=++=%&&&>@=+.+#%,,@=-+-%>,@%*=$++=@>&&>,@#",
-"#*@'&'&%=$#%&>**&>=$+-=%>&@*#++#=%>&&*#++-=%&,&*#++-=%&'@*#++-=%,&&%-++-##$$-##+$*@&>>&%-++-=&,&@%#++-*&,&&%-++-*&&,&*-++-*&>>&%-+.+#%&,&*#+#%&>%*-+;.+=@>@@&&%-",
-"$#======$+$#==#-=#$+.+$#==#-+..+-#===-+..+-#==##+..+-#=##-+..+$#==##+..+++++++++$#*====-+..$-====-+..+$#===-+..+-===##+..+$===##+.++-#===-+;$#==##+...+$===#==-+",
-"++$$-$+++.+++++++++...+$+$$+....++++++....+++$++.....$$$$+.....+++++............+$--$$++.....+$-+++...+$$$+++....++$+++...++$$+;;...+$$$+++..+$++$.....++++$+++.",
-"..++++.......;++++.;.;.++++.;....+.+.+;...;.....;....+$$+.;.........;.............++++..;......++++;...++++.;.........;...++++.........++++...+.+++.;...........",
-".+$#-$+.;....+$#-+....+-##$...;.+$$-$+.....++++....;+$=#-+...;........;.;.;.;.;..+$##$.....;..+-#-+....+##-+...;++.++...;.$-#$..;.;...+-#-+.;.;$##$+....++++++..",
-".+-=*#$...;.+-=*#$...+$=**-+...+#=**=-+;++$-$$$+;...$#%%#+;....;..;..............+-=*#$+;....+-=*#+;..+#**=-+..+$--$$$...+-==#$.....;+-#*#++..+#**#$+..++$-$-++.",
-".+$*%*#$...+-=%%#$.;+$#@@%=$;.+$=@>>%=$.+$=*=*#$...+-=%%=-+.++$$$$$$+...+$-$$++.;+-*%%#$+...+$=*%#$..;$=%@%#$;+$=*===--..+-*%*#+....+$=%*#+..+-*%@*-+..+#====-;.",
-".+#*@@=-;..$#%@%#$..+#*@@@*-..+#%@&&%#+.+#*%%%*-+;.+#%@@*-+.+#==#===#++$#=*=*#-..$#*%@*#-+++#=%&%=-.++#%@@@*#++#=%%%%=-..+-*@@#+;..+$=%@=-.;.+#%&@*$+..$#*@%*-+.",
-"+-*@&,%=$+$#%&,&*-+.+=@&'&%#+;+-%&&)@=$++=@&'&%#+.+$*@>'@#$+-*@>@@'&%--=%@,&)&=$+-*@>'&%=$+-*@&)&%=$+-%@,>'@=$$=%,&'&%#+.+#%>>=$...+-%>>*$+..+=@>>*-+.;+=@>>*-+.",
-";-%@&&>*-+$=@@@>@=-.$=%&&>@=$.+#%@@&>*#+$=@@&>@=+.+#*@@@>*#+-%&&)&@&&##%'@%@,&*+$=&,@@&,%-$*>>@@&,%-$=&>@@@,%##%'@@&>&=$.+-*&'=$.;.+-*&,=$...+-*&,=$+..+-*>>=$+.",
-"+#%@&@)%#$$*@&&)&*$+$*@&&'&*-.+#%@&&,%#$$*@&&'&*-++#%&&@)%#$-%@@,,@@)=#%'%=*%@=+$=>,@@@,@#$=,,&@@)@#$=,,@@@'@##%'&@@,)*-..$#@>*$...+$#@>*-..;;$#@,=-....+#@>*-..",
-"$=&>,,&%=$#%>,>,&*-+#%&'>,&*-+$=&,,>>%=+#%&>>,&*-+$=&'>&>%=$=%&,'>&&&##%&@%%%@=$-*',@@&>%#-*'&&&&&@--*'&&@&>%#=@'@@&&@*$..$=@,=-+;..$#@,=$+..;$=@>*$+..+$=@,=$+.",
-"-*>&@@&%=$#%>@@&&*#+#@>@@&@%#+$*>&@@&%=$#%,@%&&*#+$*&,@@&%=-*&@@''&&@#-=@&>&&&*$$=>'&&@&%#$=,'>@&&%#$#,'>&&&%##%'&@&&@*$.+-=@,*#$+.+-=@,%#$;.+-=@,%#$+.+-=@>%#$+",
-"$*&,@&,@*-#@'@@,&@#$#@>@@>>%#+-*&,@&)@*-#@>@&&,%#+-*&&&&'@*-*&,>'&>&@#+-=%'&@%#+$=@,&&&,%-$#@&&&&>%#$#@&&&'&@##*&>&&,&=$+$=@&'%*=++$=@&,%*=+;$=@&,%*=+;$=@>,%*#$",
-"$#%%@%@%*$$=%@%@@%#+$*%@@%@%-++#*@%%@%*--=@@%@@*#+$#%@%%%@=$#*%%%@@%*$.+-*>&*#$..$#%@%%%=$+$=%@@%%=$+$=*@%%%=$+#=%@%%*-++$=%@@@*=+.-=%@&%%#++$*%@@@*=+;-=%%&@%=+",
-";$==*=*=#++#=*===#$++#=*====$++$=*=*==#++#=**===$.+$==**==#+$#======-+.+-%&%=+...+-#=*=#$+.+$#=*=#$+.+$#=*=#$..$#====-+..$#==*==-+.$#==**=-;.+#=**==-;.$#=*=*#-+",
-".+$$--$$+..++--$-$+..+$--$+$....+$--$++..+$$-$$++...$$$-$$+.+$$$+$+++...+-=#$+.;...++$$++...+;-$$++...++$$$$.+..+$-$$+;...+$---++;..+$-$$++.;.+$$--++;..+$--$$+;",
-";++--$-++....+++++....+++.........++++....++$$+.;....+++++...........;...+...............;..++++...;....++++....+.+++.................++++..++$++...............",
-"+-***=*=-;.++-##-$+;.+$--++.;.;..+$#-$+;..+#=#-+..;.$-##-$+.......+......+..+;...;.........++--$+......+$-#$+.;++##-$+;.;.....+..;...++-#-+++===$+;......;++++..",
-"-*&,&&>%#$.+#=%%*#$++$=*=#+.....+$#%%-+..+#*&@=-+..+-*%%*=$;.+$$$$$++;.;.+$-++.....+;+++.;.+#**#-+.;.;+$=**#+.++#*%*#+...$+--$-++..;++#*@=++#%&@#$+;.;.$+$$$$$+.",
-"#%&&,,,%=++#=@&>@#$..$#%%*#+...+$=%@*#+.;$=%&&*#+..$=%&&@*$++$#====#+...+-**-+;.;.+$-#-#-$+$=*%%=-$.+--=*@%=$+$#=%@@*#+++-====%=$++--#=%@*#+-%@&=#-++.+$#**===#$",
-"$*@&@&&@*$-=@@&&@=-++$=%@@*--.;$#%@&*#+++-*@@&%#$++-=@&&@=$.+#*%@%%=$...-=@&=$...+-=*%***-$=*%%%%*#+$=*%*%%*#$#*@%%%%*$+$=@%**@%#+$=*%%%%@*#-=%&@**=-.$=%%%*%@*#",
-"-=@&&&'&*-#*&&&&&*-+$#*&&@@=-+$#*@&&@*$+$=%&&&@*-+$#%&&&@*-+$=%&&&@*-+++-*&&*-+.+-=@@&&@%##*&@%*@@*$#*@@*%@@=-=@&%*%&%#+-%&@%*@@=$-=&@%%@&%#$=%&&@@%#$$=&&%%@&%#",
-"$=@>,',,%##%,,&&>@=$-*&>@&>@#$-*&,@&>@#$-%&,@&>@#+-*&,@&>@#$-%&>@&>@#++#=%@@%=#++=@>&&'&%##*>&**@@*-#%>&**@@*-=@,%*%@@=+#%>&**@@*-+=@@@%@&*-$#%,%%@&%#$=@@%%@&*-",
-"$*&&%%@,@#$=&>@%@&*-=%'@%%&,=-#@&@%%&>*$#%>@%%&>*-#@>@*@&,*$#%'@%%&'*$-=&@'&)&%$$=&,@@&,@#-=&@**%@*$$*&@%=%@%-#%&%=*@%=+$*&@**%@%$+$=@&&>*#++#%>@%&&%-;$=@&&&*#+",
-"-*,@%*%,%#-=@@%*%@%-#@,***&,=-#&'*=*&,=-=@,***&'=-#@,%=*&'=-#@>***&>=$+#*%%%%=#$-*'&&&@,%#-=@@**%&%--=@@**%@%-#%&%**@@=+$=@@**%@*-.+#%&,%=+++=%,&&>&*$;+#*>>@#$.",
-"$=,&%=%,@#-*@@**%@%#=%,@*%@,=-#%,@*%@,*$#%,@%%&,=-#%,@*%&>*$=%,@*%&,*++$#=%@=#++$*>,&@%,@#$#@@%*@&%#$#@@*%@&%##*@@*@&&=$+=@@%%@&%#++#*@,%-+.$=%,,&@%#+.+-%&>*-+.",
-"$=@>&&>&%--%,&@%&,@##%,&&,&&#$#%&>&>>@#$#%&&&&,@#$#%&&&,&&#$#%&>&&,%=+.+$=@&=+..-*&,>>&&*-+#%&&&,>@#$#%&&&>,@#-=@&&>>'*$+-*&>&>'@#+-*&>&=$;.-*@&@*=#+;;-*@>&*$..",
-"+#*&&'>%=$-%&'@%@'@#$=%&&,&*#+$=*,&,&%-+$=%&'>&*#+$=%,&,&%-+$=*'&'@%-+..+-**#+..$=@,>,,%=++$=@&>&'&#+$=@&,&'@#$-*&&,&,%$+-=%&'&,@#+#%&'&=;.;-*@>@*-+..;#%>,&=$+.",
-";+##==##$+$#==#===#$+$#*==##+.+$##==#-+.+$#====-+.+$##===-+;+$##==#-++...+-$+;..$=%**=##$..+$#=*===$.+$#====#$.+-=====#+.+-#=====$+#%@%*#+..-=%@*=++..;-%%%%-;..",
-"..++$$$+...$$$+++$$+.++$$$$+...++$$$+++...++$++++..+$$$$$$....++$$++..;...++.+..+-#--$$++.;.++$$$+++..;++$$$$+...$$$$$+....+$$$+++.+-##-$.;.+-##-$+....+-#--+;..",
-".........;.+$++.............;....+.+..;.........;.++-##-##-+....+.$+...++$+$$+.....++$+........+.+.;.........;.........;....+.....;.+++++...$##-++++.....+......",
-";...;+;...+###$+...;..........+$-$-$-$++;.+++.....+#%%%*%@*$;...+$#$-..+-====$+...+$#=$++...;.++$$+....++$+.....;++.+++.++$+++.+....+-$$$-++#%@=--$$++..+;+++$+.",
-"...+$-$+..-*%%#$;.+..++--$$+;.-=**%***=$.+$-#$..;.+=,&&&&,%#.+++$#*#$+.$=*%%%#+;.+$#*%=$+;...++#==#$;++-#=-+.;++-$--$-$++#=###-$$.++#===*=$$*&>%***=#+.$$-$+$-$+",
-".;+$=*#$;+-%&'*-++$$;+#=**#$++=%&&)&,&@-.+#**#+...+=&,&&@'@#+$$-=*&*-+;$=%@@&*$++#=*@>%=#$...+#%&>*$+$#=@@*-++$#*%**%*=$#%@@%%*%=$+#*@@%&%=$=@,&@&&@%#+$=%##**#+",
-"..+#%@*$..$*&,%#-#=#$#%&)&@=$+#=%%@%**#+.+#*%#+.;.#*&,,>&'@#-***%@'%#$$#*%&@,*#$-*@&,)@%*#;..$#@&&*$-**%&&%=#$#%)'&),>%#=@',','&@#-=%@&@>&*-#*@>@@>,%#$-*&%=@>%-",
-"..+#%&%#+.+-%&%=#*%##*&&>>@%=$#**%&&**#$.$#%%#+..+=@>&>>&'&=#@&,,&'@*-#*@@,@,@*##%>&&'&&%#+.+-%&'&*$#@>,,,'&%--=,&@%@'@##*@&&'&@*$#%&,,&,,@##*@,%%@>%#+-=>@%@>@#",
-"..+-*@@#+.+-*@>=*@@#=&&%@@@@%-=%%@'&@%*-++#%@#$...#@&&&&,&@##*@,@@@@*#*%@&'@,@%#=%'>>>@@@#;.+#%&&&*$=@&&&,@@*--*,@**%,%#$-=%&@%=$+-*@&&@>>%##@,&%*%&%-.+=@>>@%*$",
-";+-=*@@#+..$#*,%*%*-#,@%%@&@@#=*%%>>%%*-.+#%&=$.;+-%&>>>,>%#+$=@&@%@*#=%%@,@,@*##%>,>,@@@#+.+-%&&@*-#%@@@,@*#$$=,@==*,@#.+-=@%*#+.+#*@@@&>*-=%>,%**@%-;+#%,>@*-+",
-"$#%%%%@=-+.+$=@@%*#$=&@**@&@%#$-#*@%=#-+.-#@,=$...$*&'&,&&%-.+-*@&%==-$#*%@@&%=-#%>&,,%@%#++$#*&,&@##%&&&&@=-;-*,%==%,%#..+#%%*-+.+-*@@@&&=$#*%&%*%%%#+$#@,,@=-+",
-"-*,>%%@%#$..+#*,@=-+=@&%*%&&@#++-=@%=$++.+#@&%-+..$#@&@%@%*$..+=@&%#-++$=%@%&@=$-=@%&'%**-$-#*%@>,@#-*,>&@@*#+$=,&*=%'@#+..$=%%=$..-=@@@&&=$-#=%@%@@%--=*@>,&*#+",
-"#@,>&&&&%-...$#%@%=$$*&&%%@>%-..$=@@%-+..+$*@@=-+.+#%&&@*=-+..+$=%%=-+.$#%@*@&@#$-=*@>*#-$=*@&,@&@%-+#@&&@%%*--*&&@@@>@-;..$#*%*#+.-*@@&>@=+++#*@@&&*-=&,&%%&&*$",
-"=&@%%@&>%#+..+$=*@%#$-*%&@**=$..+#%@*#+;..$#%&%=$.+$*@,@=-+.;..+-#**#+.+-=%==%%#++$#@>=-++#*@@%**%*-+$*%**=%%#-=@%=**@*-...+$#%%=$;+=%@&&@=+.++#*%@*#$#%%*=#*%@#",
-"#**#=**%*-;...+$#%*#++$=%=#-+;..+-=*=$+....$#%%#+.++#*%*-+......+$##-+.+$##-$==#..+-*%#+..-=**=####$.+$##--==-+-##--#*#$;..;+-==#$.+-=*%%%#+..+$#==#++-##$+$-=*-",
-"$--$$-#--+......+-#$..+$--$+.....+-$-+.;..;.$-#-++..$$--$.;.;....+$$+...++++++$+..+$-#$+;..$$-$+++$+..+++.++$+.+$$+.+-$+.....+$-$+.;+--#=#$+....$$$+..+$+;..+$-+"};
+"! c #124412",
+"~ c #144A14",
+"{ c #175517",
+"] c #144814",
+"^ c #0E330E",
+"/ c #010401",
+"( c #0E340E",
+"_ c #1E6F1E",
+": c #3EA63E",
+"< c #40B140",
+"[ c #399639",
+"} c #0E360E",
+"| c #64D564",
+"1 c #185A18",
+"2 c #144C14",
+"3 c #6ED86E",
+"4 c #1A5F1A",
+"5 c #77DA77",
+"6 c #134713",
+"7 c #124112",
+"8 c #4DC24D",
+"9 c #3CA03C",
+"0 c #0F380F",
+"a c #0C2C0C",
+"b c #124212",
+"c c #081D08",
+".............+@#@+.....@@@@+....+#$$%#@....@$%#@....+@@+..................+@+......@$%%#+...+$%%#+.....+@@@................................................@$$#+",
+"............@#%&$@...@#$$$$##...@%&**&#@.@@%*=&##..@@$$$#.......+@@......@$$##....@#&-*$@...#%=*%@....@#%%$#......@@......................................@#**$@",
+".+..+..+..+.#%-;*$@..@%***=&#@.@#&=--*%@.#$*>;=&#@+#%*=&$@.+..##%%$@.+..@#*=&#@.+.@%*-*$@...@&=-&$@.++#%->&$@.+..+#$#@.+..+..+..+..+..+..+..+..+..+..+..+.#%->&@",
+"...........+#*>,=$+.@$&--->*%@@@%*>>>=&#@$*->;>*$@+$&=-=%#...@#&=-*$@...@%=>*#+..+#*-=%#.+..@$*-=%@++@&*>;=*$@..+$*=%@...................................+#*--%@",
+"..+..+......#*;,=%@.+$*>>-;*%@+$&-;,;-*#@%=--->*%@@%*--=*$@..#&=--=$@..@#&--&#...+$=-=%+.....#&--%#.+#*-,'>=%#..#%->*#@..+..+..+..+..@@.+..+..+..+...+...+%=-*$@",
+"...+..++....#*;'=%@+.$*--->*$++$*-;;,>*##%=>--=*%@@%*---*%@.@#&=-=&%#@..#&*&%@...+%->*#@.....#%-;&#.+$&-;';=%@@@#&>;*%##..+..+..+..@#$$$$$#++..+...+....@#&--&$.",
+"........+..@#&>,=$+..#%&&&&$@+@%*>;>,=*#@%*>>>-*%@+#&=--=%#++$*>>=*%#@..+$%$@..+.+%-;*#@.+...@%-;&#..#&=;,>*%@@%*-;'>=&#..........@%*=====&#.....+...+..@%*=*$@.",
+".+.+........@&-;*$@..+##$##@..+%=>;>;=%@@#&=--;-&#@#&->>=&#.+$*>;>-*%+@..+++.....@%-;*#...+..@%-;*#..#%=-->*%@@&>;,',;=#..+.+@+..+@&;>,,;;=#.+..+++....+$*-=%#@.",
+".....+.+.+..@$->&@.........+..@%>,;,,=&#@$*=-->-*#@$&=>>-*%.@$=>;;;-&@...........+%=>=$@.....#&->&@@.@%***=&#@@$*=;,==&#...@$%$@..+$**=***&#...@@##@.+.@%==*$+..",
+"............+$&*%@.+..........@%->>>>*$@@%=>>>;-&#+@%*---=%@@&=->>;-&#.....+.+...+$*-=%@..+..$&--%@..+#$$$$#@..##&=,*%#++.@#**&#++.@#$$$$##+...@&&%@..+$*>*%@...",
+".+......+.+..$&=$@...+...+....+$=>>>=&@++$*-;;-&$@.+#&=--=$@@%->;;;>*#@.+.....+...#&=-&#+...+%==*%+....@+@++....@%->&@@...@%->*#+....@@.@..+.++#*-*$+.@%=-*$@...",
+"...+.+.......@&=$@....+...+...@$*->-=%@.+#$%=-*$@...+$***&$+@$&=>>--*#...+.+......+$*-*%@..@#%-=&#..............@#*=%@...@$&-=%@....+.+........$&=*#+.#&==%@.+..",
+"..........+..@#$@...+.......+..#&=-=*$@...+#&*%@.....#$$$#@.+@$%%%%%$@.......+.+...@%=&#@...@%*&#@..+........+...@#$@++...#&*&$@+........+.....@$%#++.#%*&$@....",
+".+...+.+.......++.+....+.+......#%%%$#.....@$$#++....@@@@@.....@@@@@++.+..@.+...+...###@....@@##@++...+..+.+..+..+.+......@#%#@...+...+....+.+...++...+$%$@..+..",
+"..@@###@@..+@@@@@+..+.@####@@...@#$$#@@.....@##@@.+@@#####@.....@###@.+###$#$@+..+@@###@@+..+###@@.....+...........+..+.+..++..................+....+...@@@@+...",
+".@#%&*%$@..@$%*&#+...@#%**&%#@@@$%**&%#@...@$&&%@++#%&**&&#.+.@$%&*&$@@%&****&#+.@$%**&%#+.@#%&*%$#.+....+.+...+..............+.+...+..+.+.......+.....@#$&%$#@.",
+"+#&=---*$@@$*>;>%#..@$*=-->*%@+#*=->>*%@.+.#&>>=#+@$*>>--*%+.@#&->-=%##&=----=%@+$*=-->*%@.@%=-==*%+.........+......+....+..@@#@@.+.....+..+@@##@@..+.@#&=>>*%#.",
+"@%=->>>=&#@$=>,;*#..+$=>>>;-*#@$*>>>;-*#..@%=;;-%@@%=;>--*$+.#%=;,>=%@#*=-->>-%@@%=;>>;-*#@#*>>->-&@..+@@#@....+.+@@#@+...+@#%&&$@.@@@###@++@%&&%#@+..+$*;;;>*$@",
+"@%--===-*#+#%*>;&#@.@$*===--*#@$&**=>-*#+@#&->;-%@#%=;>-=*$@+$*>>-=&$@@#%%*=-=%+@%--==--*##%=-==>>*#..@$&&$@.....@$&&$@..@#$&=--&@@#%&&&&%$@#*-==&%#@.@%*-=---%@",
+"#%--**=-*$..@%-;*#..+#$%%*--*#.@$%*=;>*#.@$*>->-%@@%=;,;>=%@@$=,>-=*$@.@#$%==*$+#%=--=--*#@%=-=*>,*#+.@&--&@.+...@&->%@@@#%==--*$@@$*=-=-=&#@$*->>*%$@+#&=*=--%@",
+"#&-=&&=-=#+.@%-,&$+..@@$&=;=&#..#%=;;-*#+#&=>-;-&@@%*=->;;%#@%=;;;>>%#..@#&--%#.@%->;,;-*#@%=>-=;;*#..@%==%@...+.@%=-%@.#&=;-=&%@@@&=>>->-*#@+$&->>>&#+@$&=>>=%#",
+"#%--*%=-=#+.@%-;*#@...#%-;-&#+++@%&---*#@%-;>-;>*#+#%&&*>;*##%=;>-;;*@..+$&-*%+@#%=>->>-*#@$*>;;;,*#@..$%%#@.....@#%%$@@$*-,-*&#@.@&-->>->=#.@#%*-;;*#.@#&>>=&$+",
+"#%--*&=-=#+.@%-;&$...@%=>;*%@..#%%&*--*#@%=;>>,>=$#$%%%*>;*@#%=,*=>;*#+.@%*-*$+.@&--==--=#@@%=;>;;*@.+.@$$@+...+.@@##@.+#&=>>=&$@@@&=->>>-*$.+$&-->>*#..#&;>&$+.",
+"#%=-===-*#+@$*-,=%#+@$*>;>*%#@@$**&=--=$@$*>-;,;=%@&**&=>;*#@%*;==>;*#..@&=-&#.+@%->-=--*$+@%*=-;>&#..@#%%#@.....+$%%#@.@$&=>>-*$@#%==----*#@%&=>>=%$+..@%==%@..",
+"@%*-->>=&@@#&=>;-*%@@&>,>>-*%+@%>>--;=&#+@%&=>;;*%@&=>->>-%@@#*>>-,>&#..@&>-%#..@%=>>>;-&#@#%-->>-%@..@%=-%@+...@#&--%@..+#%*=>-&@@#%&&&&&$@#*--=*%#+...@%=*#@..",
+"+#%*=--&$@@$*-->-=&@@%->>--=%#@$=----*$@.+#$*->-*#@$*->-=&$..@$*---=%@+.@%-*$+...#%=---*$@@#&---*%#@.+@%=-%@....+%=>=%@....@#%&&$@.@@@#@#@@@@%&&%#@+.+..@%*&#+..",
+".+@%&*&#+.+#&&==**$@@$&===**%@.#%&*=&%@...@@%&=*&@.@$&=*%$@+.@@%&*&%#+..@#&%#+.+.+#%**&%@.+#%&*&%#@...@$&&$@+...@%==&#@+.....@@#@@..........+@##@.....+.+$%%@...",
+"..@@###@...+##$$$##..@$$$$%##...@#$$$@@....@##$#@@.@@#$$@@..+.@@#$#@@....@@@++....@@$$#@@..+@$#$@......@#$@@..+.+$&%$@...+....................@..+++.....@#@++..",
+"..++##@@....@@@@@.++.@@##@@@+.+..@@@@@@.@@@+@@@@...@@@@@@@@..@@@@@@@@....@@@@@++.+@@@@@@@+.@@@@@@@@+...@@@@@@.@++@#@@@@..@@@@@@..+.@@@.@@@@@.@@@+++@+.+..+@@+...",
+"++#%&&%@@+.@$$%%@@..@#%%%%$@@..@@$%%$$#@#$%%%%#@@.@#%%&%%$@.@#%%&%%%$@@@@#%%%$#@@#$%%$$%$@@#$%%%$$@@.+@$%%%%#@@#%%$$%$#@@@$%%$#@..@$$$#+#$$@@#$###%$#+++@$$$$#@.",
+".@%=>>=%@.@#&===%@..#&=-==*&#+@@%*===*&$%==-==*%#.$&==-=-=%@@&=-=--=*#+#%*===*&#$&==*&==*$#&*---*&$@.@$&=-==&#$&=-**==&@@%*-==%#@+$&=*%$&=*%$&=*%&==&#+#%**=&%#+",
+"+%*->>>&$@+#*-,;*$@@$*>;>>->%@#%=->->>=%&->>----%@$*-;>>>>&@$*-;>->>=$#%=>>>>>=%$=>>=*->-%@&*-;;-*$@.+%*-;>-*$$*>>-->-*#@%=>;-&$+.$=;-*&=;-%%=>>=*>>=##%=>>->-%#",
+"@%=-->,*$@.#&->;=&@.$*->>->;&$$=>>=*->=%%->-==>;*$$*->--;;*#$*->-=->=$%=>-==->=%$*>>==->-%@$&='>*%#..@#&*->-&#$*>>->>=&@@$*>>=%@@.$*',==>,>&%=;;==;;*#$=>-==>;*#",
+"@&----,=%@+@&=>>-&#@#&=>--;,*$%-;=%%&=*$%=>=*&-;=$@&=>==>>&@@&=>=-==*$%-;=&&===$#*->==>>=$@@#*;-&#@...@#&===%@$&>>>;-%$@+$&->&$@.@@*;,>=>'>%%=>;>->,*$%-;=&&-;=$",
+"#&->;,;=&@@#&->-;*%@#%=,->,;*$&-;*$@#$#@$=-=%%*-=%#%=>>;-*%@@%=>>>-*$@%>;*%%**&##&->>->>*$.+$*,-$@...@@#%==*$@#&-',,*%@..@%--&@@..$*,,>;;,-%%=->>>;;*$%-;*$%*-=%",
+"#%->>,;=&@@$*--->=&##&=;>>>;=%%-;*$@@@@@$=-=%$*=-%#%=,,'>&$@#%=,,,-%@@%-;=%*--*$#&-;->>-=$..+&;-%@+.@#$#%==*$+#&-;,'-%#..@%--&$#@@$&;;,,>,-%%*>-;;;,*#&-;*$%*=-%",
+"#&->>;;-&##%-;;,;-*$#&=>==->=%&->*%##%##%*-=%%*-=$$&=>>>-*&@#&=>>>=$++%-;=&=>;=%#&->==->*$++#*;-%@@+$*=&%=-*$@#&-->->*%@.@%--*&*&@$*,>---;-%%=-->>;;*$%->*$%=-=%",
+"#%->-->-&##*>,-->,-%$&=>==->=%%=>-&&&**#%=>=&*-;=$#&=-----=$$&=>-=&#@+$=--*=->=%$*--==->=%.#$*,>&$++%->=*--*#+#*->=->-&#.#&->*=>=%#*,>==*,>%%=-==-,,*$%=>=**-;=$",
+"#%=>---=%#$=';-=>,-%$=>,>->>*$$&=---=-*$%-;>->>>&#$*>;>>>>-$$=>;>=%#..$&->>->-*$$*;>==->-%@%*-,>=&#+$=;>->-&@.$*;>-*->=%@%=;'->,=%%=>>*&=;>&%=;-=-;;*#$&->-->>&#",
+"+$&->;>*$@$*>>-*-;=%$*>>>>>-&#@$&=>--*%#%->>>>-*%@$*->>>>>*$$*>>>=%@..@$&-->-=%#$*>>=*>>=%#%*->;=&$.$&=>>-*$@.$*>>*&*-=%@%-->>>>=#$*--&&*>=%%=>-&*=-&@@%&=>>=*$@",
+".+#%**&%@.@%%&%%&&%#@%&*&&&%$@@@#$&&%%#@#%*&&&%$@.#%&&*&&&%@@$&&&%#@...@$%%&%%@+@%&&%%&&%#@$%&&*&%@.@#%&&%$@..#%&&%$$%%#@#&&*&&&%@#%%%$#%%%#@%&&$%%%#+.@$%%&%$+.",
+"..@@#$@@@.@@##@@@@@+.@####@@+...+@###+..@@##$#@@.+.@@##$#@@+.@##@@+.+....@##@@..+@###@##@@.@@$###@....@###@.+.@@#@@@#@@..@@$####@@.@###@@##...@@@@@@+....@@@@+..",
+".+@@@#@@.....@@@@....@@@@@@.....@@@@@@...#@@@@@@@..+@@@+@@+..@@@@+@@@..@@@+@@@+..@@@@+@@@..@@@@@@@@...@@@@@@@...@$$$$@..@@#@@.......@#$$$@+....@@@@.............",
+"@#%&%%%$@..@#$$%$#@.@$%&%%$@#..+@%%%%$#@@$%&%&%%@+@$$%$$%$$@@$$%##$%$#@#$%##$%$@##$%$$%%$@@$$%$$%%$@@@#%%&%%$@..$&=*%#@+@%&%@@...+.@#%*=&$..+..@%&$@+.......+...",
+"$*->>>=*%@@#%=--*&$@$&->>-=%#@+#%-->--%@$*>->>>-%@$&--&*=-&$$*-=*%=-=%$*-=&%*-=%$*--=*--=%$*--=*--=%@$*=>>>-*$@+%-;-&#@.@&*=$@+....@$&-;=%@...#%=-&#@.+.+.....+.",
+"$=>,,,>=&##%*->,>=%@$=;,,;>*%@#%*;;;,;*#%-,,',,,*#%=,;*=>,=$$=;>*&=;>%%=;;==-;>&$*;,-=;,>%$=-'>=;'>%#%=;;,;,-%.@%-,=%#..@%*-&$@..+.@@&*,-%@..+$&-;*$@....+......",
+"$*--==--=%%*>-==>>*$$*;>-=--*$#*->-=>>*#&->-,>;>*$%=;=&*>;*$$*;>*&=;-%%*,>>>-,-&$&>;-->;=%$&;>-->;=%#%---->;=$.@%-;&$@+.@$*-*%@.....@#*,=%@..@%=->-&@.+...+.+...",
+"#&=-**=--%%-,=&&=>=$#&--==>>*$$*--===-&#%->=;,>,&#%=-=&%-,*#$&--*&*-=$$*;,;,-;-%@%=>;>;-&#@%*--->-&#@%*==->=&@.@%-;*#....@%=-*$@.....#&;>%@+.@%--->&#+..........",
+"#&=>===-=%&->=%%*--%$&->--;-*#$&=;;--=%@$&==,-=*$@$=-=%&-;*##&--*&=-*$$*,;,,-'-%@#%=;,-*$@.#%=>'>&$@@#%&=>>*%@.@%-'&$.+..@$&==&$@.+..#*;-%@..@%***=&#@+...+.+...",
+"@&=;,,;-*$%-,*&%*-=%#&>>,,>=%@@%*->>,>&@@#%&,-&%#@%*-=%%-,*#+$*-==-=&##*>,;>;,-%@#%*>>-&$@.@$*>,=%#..@%&-,=&$@.@#-;*#@....@$*-=%@....@&'-%@..@#$%$%$@.....+.+...",
+"#&=,;;>=%#%=;-=*->=$#&>;;;;=%#$&==->,>*#.@$*;-&@+.%*-=&&-,&#@#&=---*%@$&,,>-';-$@$*->>>*%@..@&>;*%@..@%=>;=*%$.@%-;&$+.....#%==&$.+.@#*>-%@+..+++++.+.@@@@#####.",
+"#&->>=*%$@$&->,>>,*$$*>>-=;>*%%=>-==;,*#.@$*,>&$@.$*--==-;&#.@%->>>&#@#%-;-=;>=$#&-'>-;>=$.@#&-'*%@+@$*>,-->=%.@%-;=%@..+...$*==%@..@%*,-%@..+....+..@#%%&%&&&%@",
+"$*>,-=%#..#%=,;,,-*$%=,>==-;-%&-'-->,-&#+#&-,>*$@.#&=--->-%@.@$*>'-%@.@%--==--*$$*,>-=>)-%@@%=;,=&@@@$=;;->;-%.@%-,=&$......@&=>%@..#&-;=%@..........+%*======*$",
+"%*=--*%@.+@%*>>>,;*##&--*%*-=%$*---=-=%@@#%=--*%@.@#&=--=*$@..@%=-*$@.+%*=*&==&##&--=*=-=%..%*=-=&#+@$*-----*$+.$*--&$@...+.@%=-&@+@$&--=%@+..+.+..+.+%=>>--->=%",
+"@$%&%%#@...#%*****%@@$%%%#$%%##$%%%&%$#..@$%&%%#@..@#%%%%%@..@+#%%%@@..@%%%$%%#@@$%%%%%&%#..#%&%%$@..@$%&&%%%@..#%**%$@+....+@%&#@..#%**&#...........@%**====*&#",
+".@@@#@@....@@$#$$$@..@@#@.@@@..@@#@@@@.....@##@@+...@@#@@@.....@@@@@+..@.@@+.@@..@@#@@@@@+.+.@@#@@....@@@##@@@..@@#$@+.......@##@....#$$@@.+....+.....@#$$$$$%$@",
+"..+.@@@+.+.+...+..+@.@#@@...+.+.+...+.+.+..+@@@@@........+.+...+@#@@@..+........@@#@@........@@@@.+....@@#@..+.@@#@@...+.+@@@@@..+...........+....+....+.+++....",
+"...@#$#@............#%&%#@..................@%&%#@+.+........++$%&&&$@.......+.+@%&%#@......@$%%$@..+..@%&%@@.@#&&$@.....@#&&&$@...+.....+..........+...........",
+"..@$**%@...+.@.@....$*>-%#@.....+..@.@.....@%=-=%+...@@+@....+#&->;-%@.+.+@.@...$*>-%#@+.+..@&--%#....@$=-*$@.@%->*$@....@%=;>&@.....+@.@..+.+@@......+..+.@@.+.",
+".+@%=,*$@..@@#$##@.+#*>-*%$@@+.@@#$#$#@.+@@#%=>-%@.@@##$#@.++#%*;;-*%@.+@##$$##@$*--*%#@@...#&--&@+..@#%=>=$@.@%=-*%$$@+.@#*>'*#.+.###$$#$@.+####$$@@..+@#$##@+.",
+"..@$=-*%+.@@%&**&$@@#&->=*&%#@@#%&***&%@@#%**->-&@@#%&**&%@.@%*-,-=*$@@#%&****%##*->=*&%@@.@$*--%@@.@#&*--=%@.@%*-=&*&%@..@%-;&#..#%******%@@%*&&*&$#@+#%&**&%@.",
+"...#%**%@.@$*->;-&#@#&->,,,=&##&=,->;'&@#&=>;,;-&@#&=>>>-*%@#&=;,;-*%@#&=>>>,>*$#&>>,;;*%@+@%=>;&#..+$*->'>&@.@$*--->=&@..@%=,*#@.#=>'>,'>*$$=>>-->*%##&=>>>-*%@",
+"...@@%%#@.@%->',>*%@#&>;;>;>=$%=>,=>'>*#%=>'>;>-%@%=;,>;;-&@@&-,;>-*#@%*>,-;,;*$#&-,>;,=*#.@%*;;&#..@$&=>,>&@.@$*->;>=&@..@%-;&#+.$=,,,;,;=%%=;;--;-&$%=>;>>;-&#",
+".+...@@@+.@%=->>'=%@#&->===,-%%-;-**->*#%-;-=->-&#%=,;>>,,*#@#&->=&%@@%->>==,-*##%->=*--*#.+#&-'*#...@$%&=;&#.@$*>,)-&$@+.@%='*$..#&--->>>-%$&->==--*$%-;-*=>;*#",
+"..........#&-,;;,=&@#&--=&=,=%&-,*%%**%#%-,*&*--&#&>';'',>*#@@%--=$@..%=,>>>;-%@#&--**=>*$..@%-;&$@...@@%*,&#.@$*;,>=&@@..@%--&$@.#&--->---%$&--**=-=$&-;=**>;*#",
+".+.+.....+#*>;-=,-&##*->=*=,-%%=,-*&**&$%=,-=->-&#%=,>->>>&#@#&--=&$@.#&=>,;;-&@$&--**=>=$@@$&-,*%@+..@#%*>&@.@%*>-'>*%@.@$&-'*%@@#*->->---%$&>-**=-=$&-;-**;;*#",
+".....+....#*,>>>,-*$$*>'>>>,*%%=>>----*#%=>>->,>*$%=;>>>;>&@@%*>;-=&#.@$*=----%@$*,>=*>>=%@#&=,'=*%@.@%&*=>&#.@%->--,-*$@#&=,;=*$@#*>>->>>-&$*>;==-;=%%=>>>>>;&#",
+".......+..@%-;>>>>*#$&-;>>>=&#$%=>>>>-&##&=>>>;>&##%=>>>>=%@@&=>>>-*#@@$*=---*$@#&;>=*-;=%@#*=-'>*%@@%*-->=%@.@&--=*>>=%@#*=>,>*%#$*>-=->--&$*>>-*>;-%#&=>>>-*%+",
+".+.+.....+@#%&****%@#%&&**&$#@@#%&**&%$@@@%&**&*%@@#%***&&#@@$&*=*&%@.@%*---*%#.#%**%%**&#+@%&**&%$++$*--=&$@.@#&&%%&*&@.#%&***%$@#%**&&*&&$#%&*&%**&#@#$&**%$@.",
+".....+.....@#$#$$#@..@#####@.+..@##$#@@...@##$##@@..@@$##@@..@##$##$...#$%%%$@..@@#$#@#@@@.@+###$@@..@%%%%#@...@######@@..@##$#@@.@##$####@@@@###@##@@.@@#$##+..",
+".......+...+....+.+.+........................@.......................+...@.@..+........@...............@@.+......@@@#@.+..+@#@@....@@@@@+.......................",
+".+.+..................+....+..+.......+.+.@#@@....+........+............+......................+...+.........+...@$%%#@....@%&$@+..+#%%$@@...........+.+....+...",
+".....+.+.+.+..+@........+.@.....+.+......@%&%#@+....@+.+.....+@+.+.@.+.....+..+.+.+@.+.+.+.+.........+...@+....+@%**&#@...@$*-%#...+#&**%@.+.+.+.+......+.+...+.",
+"@@#$$$#@@..@@$#$$#$.+@#$$##$@...@##$$#@.@$&=*%$@..@##@@##@@.@@#$###$#@@##$@@##$.@@#$##$$@.@@$$@@$$@..@@$$#$#@...@&>-%@.+.+@%-,&#.+..@&--&@.........+............",
+"#%****&%#@@#$&****%@@$&*&*&&#@.@#%&*&&%@@%->-=*%@.$&*%$%&%$@#%**&&**&$#%*&%%&*&$#&**%&*&%@$&*%%%&*%@@#%&***&%@..#*>-%#....@%->*#....@%-;&$....@@@@@@....+.+.+...",
+"$=>;>;-=&@$&*-;>;;*$#&=>>>>=%@+#%=>;--&#@&>','>*$@&>>*&->=%@$*;;-=>'-%%*;>=*=;>%%=>;=-'>%#&>>-&=>;*#@%=-';'=&@+@$*)-%@.....%-;*$.+..+%-'*$@+.@$$%$%$#@..........",
+"$*',---'*%%=;-->';*##&=);>>=%#@%*>'>>-*$@&->>==&@@&-'**=>-%#$*'>-=>,-%%='>---'-&$*>'-->-%@%-,-=-;'&#@%-->-,*&@.@$=,=%@+.+.@%-'&#....@%-;=%@.@$*=-===&@+....+....",
+"+&->-=*,-%&='===>>&#@#&,>=*&$.@$=>,,>=&@@%=--*%$@.%=>=&*--&@@$=-==--=$#&>>>,->-%##*-,;=&$@#&->->-=%@@$*->,>*%@.@#=,>%@....@%=;*#.+..+%-,-$@.@&>;;;;-*#..+....+..",
+"#&>,>--;=%%->-->>>&@@$*>=*$#@.@$*>,>>-*@@$*-=&%##.%=-=**--&@@%*--=>=%@#&>>,;>;=$@$&-,>=%@.@$&>)>=%@.@$*=;>-&%@.+$*>-%@....@%-,&#....@%->*#@.@&--->>=&@.....+....",
+"@&-;>,-=&##&=-->>-&#@%*,=*%#@.@%*->>>;=$@$*--**&%@%*>-*->>*#.#%=>>>*$@#%->;>,>*##%*>,;-&$@.#%=,>&#..@$*>,--*&@..#&,-%@+.+..%=>&#.+..@%-'&$.+.#&&%&&%#@+.+...+...",
+"#&->-*&%#@@#%&==>-*##&-,==*$@.@%->>>>)=$.#&-;--=%#$&->--';*@.@$=>,=%@.@%*>>->=&#$*-;->>-%@@%*>>=%@+.@%=,>>--*#..#&>-%#@...@%==&@...@@&--&@...@@@@@@@@........+..",
+"$*;;-*%#@..@#$*-;>*#$*-,>>=%@.@%=->>>=&#.@$*>>-*%@@%&->>>>*#..#%==*$@.@#&=**=*%@#=>-=-;>%@$*,>,=%@..@$=>>,;=&#+.@%-=&#@.+..@&&$@....#&=-%@.......+......+.+.....",
+"#*>>=*#@....@#&=>>*#@%&&&&%#@.@@%%**&%#@..@$&&%$#..@$%*&*&$@..@#$%$@...@#$$$%#@@@%&%%%&&#@#&==*&#.+.@#%&*&&%$@...#%&%@@....@##@@+..@@%&%$@+.+.......+........+..",
+"@%&*&$@@.+...@%&*&%@.@#@#@@@....@@###@@.....@#@@@...@#+###@.+..@@@@.+....@@@@@...@#@@#@@@.@#%%%$@.....@@###@@.....@@@@..+.........+.+@@@@......+......+.........",
+".+@@...........@@@.....@@@@+......@@@.+.+.......+...@.@.@@.....@@@@.....@@#@#@..............@@@@@.......@@.@.+.+.............+..............+..@@@@.....+.+..+..",
+".+#!~{]^/..+.......+...@$%#@..+.@#$$$@@...+.......+#$$$#$%#@+.@#%$@.+.+@#%&*&%#@...@@@@@+...@#$$$@@+.+.##$@@..........+.+.+.....+........+....@#$$##@...+@##@+..",
+".(_:<[[_}+...+..+....+#%*-&$@..@#&===%@.@@@#@@@@@@@%*=**==&#..@%=*%....#&=,>>=%@+@@#$#$$@.@@%&==*%$@.@@%&*&$...+.+.+.........+....+.+.+.....@@%&==*%$@.@#%&*%$@.",
+"+&<,,||<1.....@@.....@$*>,=%#@.#%->,>*$@@#%&&&&&$@#&>,>->)=$..#*;-%@..@%*>>->=%@..#%&%&&#@@%=>;);=&@.@$&-->&$.....@.@@@..@@@@@@@..........+.@$=>;';=&#.+%=>>=%@.",
+".2,3333,4+.+.@#$$@+.@$*-,;>*$@@#&>>-=&#@@$*->>-=&@@%-;>>'-*$+.#&,=%@+.$&-'>-==$@.@#%%%%%@.#&>,,;;>=$.@%=->'&#@..#$$%$$$@@$%&%&%%$.....@@....$&>',,;>=$@+$*--*%@.",
+".2,|,55,4...@#%&%@..@%=->>>*%@@$*>-*&$@.@%->>>;>*$@$*>>-,=%#..@%;-%@..%=>;)>-*$@+.@##@$@@+%*>;,>>>-%@#&=--;*#@.$$&=***&@$*->;>>-&@+@$#$$$#@@$=-,;-'>=%..@%%%$#+.",
+".6,|,|||%...@$&*%#..@%--===&$@@%->>=%#@.#%---->-*$@@&-,>;*$@+.#&>=%@+.%-'>,>>-%@.....@...@%=>,>>>>=%@#&-->>*$@@%&-----&#$*>';',;&#@$&*=***$@%=->;>;>=&...@@@++..",
+".2,,33|,1+.+.%*=&#@.@&--=**&$@@&-,,>&$@.@&->-=->=#.@%*,)>*$@..@%-*%@.@#*>>>>,'&#...+......%=;,,>>--%@#*=;;'*%@$*-;->>=&@@%&&*=-'*##%*->>>-%@%=>;,>>-=%@.........",
+"+6||3||,7...#%->=$@.@%=>---*#@@%=;>-*$@.@%->>->>*#.#%=,,=*%@+.#&-=$@..#%==-;;=%@+....+....$*;,;,;>=%@#&-,;-*%@$='->>;=%@@@#$$&->&#@$&*==*&$@$*>;;>;>-%@...+.+...",
+".&|5|,5,2...#&,)-%@.@#&->'-&#@#%->,==&&@@%=>>,;-*#.@%=>)-*$@..@&>-%@+.#&===-;=%@........+.#%=>>>;>*%.@%&===%#@@&='->>-&@....@$&*%@@@$$$$$$@+@&->;>;-*$..........",
+".48,,|,8{+..#&,,=%@..@$&>;*%@.#&,,,>,>=$@$&*****%@@#&-,'>*%@+.#*'=%@..#*->>;-&#@+.+..+....@$&=>,-*%@.@@$%%$#@+@#&=----&@.....@#$@...@@@@+...@$&=>;>*%#+.+..+..+.",
+".4=9999_0...@%-,-%@...@%*-%#..@$->>>;>*#+#$%$#$$#@.@%*-'>&$.@.@%>-%@..#*=,>>*%@............@$&=-*%#@..@.@@@@...@%&*&**&#+.+....+.............@$&=-*%#+..........",
+".ab2222ac+..@%==&#@+...@$%$@+.@#&&*&&&%@..@.@..@...@#%&&&$@.+.#%-*$@..@$**=&%@.....+.+.+....@#$%$@@+............@#$$#$@+........+.......+.+...@#%$$#+....+.+....",
+"......+......@$%#@......@@@.....@##$$@@..+.....+.+..+@@##@....@#&%@@+..@#$##@...+........+....@.@.....+.+..+.+......+@....@+.+.....@.+.......++++@....+.....+...",
+"+.@@##@..+.........+.+@####.+...@###@.......+@..............+.@#$$$$@........+...............@@@@..+....@..............+@$%%@@..+@@%%$@...+.@$%%$#@..........+..",
+".@#%&&%@...+.@@@@....@#%&&%#@.+@$&&&$@.+.+.@@#@@.+.......+...#$&****%#...........+.+.+.+...+@$%&#@.....##$#@..+.+.+.....$&=*%@@.+@%*=&#@@@#@%*-=*$@@#@+.+.@@++..",
+"+#%*=*&$@....@$%$@...@$*==*%@..#&===&$@...@#%&$@...+.+......#%=->);>*#+.+..+.+.............@@&=-&@.+.@#%**&$@.......+...$*>-&#@#$#&=>*$#$%&$&=--=&$%%$...+#%$@..",
+"@$*-=-*&#+..#%*-&$@+.@%*=-*%#..#&=-;*$@...@%**%@...@@@@@#$@+#&>,>,,>*#.........+.......+.+.@#&-;&#...$%*=-=&#@..@@..@.+.#*>>&$#&*%&->=%%***#%=->=*&*=$@.++%*&#@.",
+"@$*-=-=&@.@@%&>'&&#@.@$*=-*%@+.#&=-'&%@+..@%=*$@+.@%&%$$&%$@#*',;,>=&#...+@#@....+.+........@&-'&#@..#&--=-*%@@#$$$$#@..$&--*%&*=%%=-=&*=-*$%=-;-====$...@%*&#@.",
+"@#%=-=&%@.@$=-;'>=&#.@%*--*%@..$&---*%@...@$%$@...$*--&&--*##&>;,'>=&#+..@$&%$.......+...+..#%=,*$@+@#&=---*%@@&*****%#.$*>-=*=-=%&=--==--*$%=->----&#@.@#&-*$@.",
+".@$&**%@+.@%>'',;;=$.@%=--*%@..$=---&$@+...@@@..+.$*;>**--*##%->,,>=&#..@#&-*$#.............#&>,&$@..@&=---*$@#&--->-*%@%*->----=%&-->>>>-=%%==>->>-&@@+#%=>-%@.",
+"...#$$@@..@$&=-'-=&#.@%***&$@+.#&=**%#............#&>-**=-=$@$&=;,>=&#+.@#*-=$@.+.+@#@.+..+@#&*=&$@..@%=>>-&$@@&=>>>;>&##&*=-->;-%%*=----->%$&==;;;;*#.@%*-;=%@.",
+"+...@@..+..#$&--*%#@..@$%%#@...@#%$%@@.+.+.+.+..+.$&>-==->=$.@$*-'-=&@...@%&%@....@$&%#@....@#$%$#@+.#&-',;*%@@%=>->,,&#@$&=->-'-%$*=-==---$#$&->-;;*#@#*--=*%#+",
+"..+........+%*=-*%#@...+@@@......+@@..............#&>>---'-%@@$&-,;-*#....@#@.....#&-=%@..+...@.@....@%*->-&$@#&=---;>&#@%*---='>%%*-=**->*$#%=---;,*#+%*--**&%@",
+"........+.@$*=->-*%$.......+.+.......+........+.+.#%-',>>>-%@@&=;,;>=#+......+.+.@$='-&@...........+.@@%%&%#@.$*--->>=%@@$===--;>&%*=*&=--*$$&===->'=#+$*->--=&@",
+"+.+..+....@%->,>'>*#.+.........+.......+.+.+......#%=-=*&*%#.@&=>-';=$..+........@$*'>&#+...+.+.+.......@@@..@@&**&*&$@+@$&&&&*>>%$%&%%=---$@%&%%&->*#+#&=>>>=&@",
+"........+.@#&&&&&&%#...+.........+................#%**%$#@@..@#&*&&&%@....+......@#&**%@.................+....@#$$$$#@+..@##@#%%&#@#@@#$&%%#@@$#@$%%%@.+#&=--*$@",
+"..@.@+.....@@#$#$#@......@.+.+....++.+......+.+.+..#%%$@.......@####@.+......+.+..@%%$@...+.....@.+.+.+.+.++...@.++@@.....@@@@@@@......@###...@.@+@#+...+@%%%$@.",
+".@#%%#@.+....@#%%#@+.+@#%&#@...+@#$%#@.+.+@@@@@@..+@$%&%#@+...@@@@@@@@..+@#@@@@..@#&%#@@....+@%%$#+...@#&%#@...@@@#@#@+..@@$%@@..+..+@@$%$@@..@#&&$#++..++@@@@@.",
+".@$&*%#@....@#%**$@..@@&*=&@@..@%&**&$#..@#$$#$@@..@$*=*$@..+@@%%%%%%@.@@$%%%$#@.@$**%#@+...@#%*&$@..@#%==%#@+.@$&%&&%@..@$&&&#@.....@$&=&#..@#%==*$@+.+#$#$$#@+",
+".@%*=*%@+.+@#%==&$@.@@%*--*$@.@$&-;>=%@..@%&&&&$@.@#%===%@...@$======$@#%*===*&$@#%*-=&$#@@@%&==*&@@@$&*--=%#@@$&===**$@.@%*==%$@.@@#%*==%$..@%*--=&#++#%&&&*&$@",
+"@$&=--%#@..#%*--&#@.+$*---*$@.+$=->>*%@.@#*===*$@.@%*->=%@+..@%>')>'>%$&='>;;,=$$&=->>-=%@#&*->>-=%@#&=>>>>=%@$&->>>--%@@$&=--=&$@.@%*->=*$@@$&=-->*%@+$*-=--*&@",
+"+$*>',*#@.@#*-'>=$@.@$*>',=%@.@%=>),*%@.@$*>'>=%@.#&=',-&@...#&-'>--=%%-;=**=-*%%=;'-';>&#%=,,>';>&#%=>'-',>&#$=;'>,;>&#@$*-;,>=%#@#*-';>=&@@$=-;,;=&@+$*>;,;=&@",
+".$&--)-%#+@$&=,'-%@..$&-;)-&@..$&-;'-&@.@$&-,)-%@.@#*-'>*$@+.@&>,>>-*%%=)=%$%*&##&=-==-'&@#%=-=->;&@#&->==>>&@$&=>==>;&@+@&=>'-*$@+$%=>,-*$++#&=>,-*$+@#&=>;-*$@",
+".$&>;-;&$@@#*->->*%@.$&>->>*$@@#&-;->*%@@$&>->>*%@@%*;>;-&@@@$*,->,>*$%-;*$#$%$##&=>=--*%@#&=-==-=%@#&=-=--=%@@&=>=--*%@.@#&>;*%@..@$&>;*%@..@#&>;*%@..@$&>,*%@.",
+"+%*>;-'=&@@%=>,-'=&#@$=>,-'=&@@%*-,-'=&@+%=>,-'=&##&=,-;>=$@#&*;;,';*#&*'=%%%%%@@%*,>>-*$@@&=,>>-*%@#%=,>>-&$@@&*,>>-&$@..@%-;&$@...+%-;*$@...@$-;*#+...@%-;*#+.",
+"@&-,,-,-=##%-;;>,-*$#&-,;>'-=#@&-'>;,-*$#%-;;>;-=$%=>,>,>-%#$*>,;--=&@%=>-===-&$#&=;->>*%##&=>>>>*%##&=>->>*%@@&=>-;-*%@..#&-,&$@+..@&-,&$@+..#%-;&$@..+@%>;*#@.",
+"#*>;>->,-%$&,;>->'-%$&;,>--'-%$*>,>->'-%$*>,>->,-%&=,>->,;*#%=,>>>--=$#&=>>>>>*#$&=,-->-=$$&->----=$$&=,----=$$*->->--=$@@$&-'=%$@.@%&-,=%#@.@$*-,=%$@.@%&>;=%#@",
+"%*',-=>'-&%=,>-=>'>&%='>-=>'-&%=,,-=>'>&$='>-=>'-&&>'---,,*$&>,-',>>>%@$&='>=*$@$=,;->;,=%%='>>>'-=%%=,>>>>,=$%=,'->;;=$@#*-,,-*&@@#&-,,-=%#@$&-,,-*&@+#*=,,-=%#",
+"$*>>=*=;-%$*;>=*=>-%$&,>=*->-%$*->=*->-%$&,>=*=>-&&->-**->=$&=>->;>>-%.@#*>>*$@.#*-,>->>*#$*>;-->>=$$*>>>-->*##*-,-->>*#@$&=>>-*&@@#&=->-*&@+$&=-;-=%#.$*=-;-*&@",
+"@%&&%%&&&##%&&&%&*%$#%&&%%&&&$@%&&%%&*&$#%&&&%&*&#$&*&%&&&%#$&&&*&**&@.@$*=*$@..@%&*&&*&%#@%&**&*&%##%***&&&%#@%&*&&*&%@+@%&*&&&$+.#%&&*&&$@.#%&&&&&$@.#%&*&&&$+",
+"@@######@@@####@#$#.@@#$####@@@+$#@###@@@@######@@@####$$$#.@#####$##...@#$#@....@@$$#$#@@.@$$$###@..@#$$$$##..+#$$$$#@@..@@#$#@@..+@#$$$@@..+@@###@+...@#$$#@@.",
+".+@@@@@@...@#%%%%$#...#%%#@......@$%%@@...@$%%$@...@#$%%%$#...@@#@@.+.+......+...+.@@@@@@..@#%%$@......@#%$#@...@$%%$@....@@@@@+......@$%#@+..@@+++......@@$@+@.",
+"@#$$%$$#@..@$*-==*$@.@$&=&$@..+.@#&**$@..@#&==&$@..@%*=-=*$@.@@$$$##@........@...@@#%%%%#@.@$*=&#@@+..@#&**$@+.@$&==&$@.+@@$$$$#@+...#$**%@@@$$$#@+++...@$%&%#+.",
+"@&*=*=*&$#@$&->>-*$@.@%*=*%#@...@%=-*$@+.@%*--*%#.@#&->>-*#@.@$*&**%@.+@$@@.@@@.@#%**=>-&@@#%*-*&#@.@@$%=-*%#@@@%=--*&$.+@%*&&&&$@@@#%&==&$@@&*=&%#@.+.#$*--=%#+",
+"$&,>>-->*$#&=->;-=%@.@%*--*%@..@%&--*%#.@@&=---*$@@%*->;-*#@.#&====*$@@#&%$$$%$@#&=>>>,'*@#%**-=*&$#@%&*--=*%@@%*-=--*&@@&*=====%@@$&*=--*&#$*-;-*%#@+.#&->>>*$+",
+"$*;;---,=%%*>>=->-*$@%*->--=%@#%*-->-=%@@%*-->-=%@#%*->>-=%@#%*->--=%@@%=**%*=*#%*>;-;,>*#$*>-==--*#$*--*=>-*$$*--==>-*$$*>-*=>>*$$&->-=>>=%$&-,>-=&$@.#*->>;=%@",
+"$=>>-=*>-&%-;,-=>,=#$&-;-->>&#$&-;-->>&#$*---->>*#$*->--;>&#$*----;>*@@%->-=--*$%=,--->>=%%-;-**>'*$%=,-**>,=$%-;-**>,=$%-;-**>;=#$*;>==>;-%#&*,;;>-*#@$*->>,=&#",
+"%=,,>=*--&%->>--;;*$%=,=**>>=$%->-**>>=$%-,=**->=$%-,=**->=$%-,=**->=$@$*>,>'*%#&-,*-----%%=>=&&>;*#%->=&&>>*#%=>=&&>;*#%=>=&&>,&$@%->-=>-*##&=-===>=$@$*-;,;=&#",
+"$=>,-**=-&%=>>>->,*$%=,=%%=-=%&-'=%%=-=%%=,=%&=-=%%=,=%%=-=%%=,=%%*-=$@#%=,,>*%#%=,---=--%%=-=%&-,*$$=-=%&-,*$%=-=%%-,*#%=>=%&='*#@$&->>;*%@@%=-===>=%@$*=-->;=%",
+"$&>-=&*=-&%=>->>,;*#&-;*%%=>=%%->=%%=>=%&->=%%=>=%&-;*%%=>=%&-;*%%=-=%@$*-;>,=%#%-,--==>=%%=-=%&-,&#%*-=%&-,&#%*>=&&-;*#$=-=&&-;*@.@%=;,-&#@#&=;-->;=$@#=====,-%",
+"$*>>=*=>-%%->-=-;'*#$=,=**->*%%=,=**->=$%=>=**->=$$=,=**->=$%=;=**->=$@%=>-->-*#%=,>--->=$$*--**-;*#$*-=**>>*#$*-=*=-;*@$*--**-,&#.@$*>,=%#@$&=,>>>-&#@%=--==;-%",
+"$=,,>->,*%%-,>=-,>*#$&=->>;>&#$&=->>;>&#$&=->>>>&#$&=->>>>&#$&=->>;>&#@%==*&*-&#%*>;>>;>&##&=>>>,-%@#&=>>>,-&@#&=>>>;-&@@&=>>>;-&@.@%=,,-&$@$=;,-=*&#@@&-;>>;,-%",
+"%*-'>'>=&#%=>;**>;&#@$&=;>-*%@@%&=;>>*%@@$&=>,>*%@@$&=>'-*%@@$&=,>>=$@@$%%##$%%@#*->;;>=$@@$&>,>-=%@@$*>,>>=$@@$*>>,>*$@@$*>;;>=$@.@%=>,>*%@%=>;=*$@+.@&-;-->>=$",
+"#%&&&&&&#@#%&&%$&%#@.@#%&&%$@..@$%&&&$@..@$%&&%%@..@$%&%%$@..@#%&&%%@..@@@@@@@@@#%*&&&&$@..#$&&&&$@..@#%&&&$@..@$&&&%%@..@#&&&%%@.@@$%&&&$@+#%&&%%@...@#&&&%&&$@",
+"@@##$#@@@.@@@@@@@@@...@#@##@....@@@@@@....@@@#@@.....####@.....@@@@@............@#$$##@@.....@#$@@@...@###@@@....@@#@@@...@@##@++...@###@@@..@#@@#.....@@@@#@@@.",
+"..@@@@.......+@@@@.+.+.@@@@.+....@.@.@+...+.....+....@##@.+.........+.............@@@@..+......@@@@+...@@@@.+.........+...@@@@.........@@@@...@.@@@.+...........",
+".@#%$#@.+....@#%$@....@$%%#...+.@##$#@.....@@@@....+@#&%$@...+........+.+.+.+.+..@#%%#.....+..@$%$@....@%%$@...+@@.@@...+.#$%#..+.+...@$%$@.+.+#%%#@....@@@@@@..",
+".@$&*%#...+.@$&*%#...@#&**$@...@%&**&$@+@@#$###@+...#%==%@+....+..+..............@$&*%#@+....@$&*%@+..@%**&$@..@#$$###...@$&&%#.....+@$%*%@@..@%**%#@..@@#$#$@@.",
+".@#*=*%#...@$&==%#.+@#%--=&#+.@#&-;;=&#.@#&*&*%#...@$&==&$@.@@######@...@#$##@@.+@$*==%#@...@#&*=%#..+#&=-=%#+@#&*&&&$$..@$*=*%@....@#&=*%@..@$*=-*$@..@%&&&&$+.",
+".@%*--&$+..#%=-=%#..@%*---*$..@%=->>=%@.@%*===*$@+.@%=--*$@.@%&&%&&&%@@#%&*&*%$..#%*=-*%$@@@%&=>=&$.@@%=---*%@@%&====&$..@$*--%@+..@#&=-&$.+.@%=>-*#@..#%*-=*$@.",
+"@$*->,=&#@#%=>,>*$@.@&->'>=%@+@$=>>)-&#@@&->'>=%@.@#*-;'-%#@$*-;--'>=$$&=-,>)>&#@$*-;'>=&#@$*->)>=&#@$=-,;'-&##&=,>'>=%@.@%=;;&#...@$=;;*#@..@&-;;*$@.+@&-;;*$@.",
+"+$=->>;*$@#&---;-&$.#&=>>;-&#.@%=-->;*%@#&-->;-&@.@%*---;*%@$=>>)>->>%%='-=-,>*@#&>,-->,=$#*;;-->,=$#&>;---,=%%='-->;>&#.@$*>'&#.+.@$*>,&#...@$*>,&#@..@$*;;&#@.",
+"@%=->-)=%##*->>)>*#@#*->>'>*$.@%=->>,=%##*->>'>*$@@%=>>-)=%#$=--,,--)&%='=&*=-&@#&;,---,-%#&,,>--)-%#&,,---'-%%='>--,)*$..#%-;*#...@#%-;*$..++#%-,&$....@%-;*$..",
+"#&>;,,>=&#%=;,;,>*$@%=>';,>*$@#&>,,;;=&@%=>;;,>*$@#&>';>;=&#&=>,';>>>%%=>-===-&#$*',-->;=%$*'>>>>>-$$*'>>->;=%&-'-->>-*#..#&-,&$@+..#%-,&#@..+#&-;*#@..@#&-,&#@.",
+"$*;>-->=&#%=;-->>*%@%-;-->-=%@#*;>-->=&#%=,-=>>*%@#*>,-->=&$*>--''>>-%$&->;>>>*##&;'>>->=%#&,';->>=%#%,';>>>=%%='>->>-*#.@$&-,*%#@.@$&-,=%#+.@$&-,=%#@.@$&-;=%#@",
+"#*>,->,-*$%-'--,>-%#%-;--;;=%@$*>,->)-*$%-;->>,=%@$*>>>>'-*$*>,;'>;>-%@$&='>-=%@#&-,>>>,=$#%->>>>;=%#%->>>'>-%%*>;>>,>&#@#&->'=*&@@#&->,=*&@+#&->,=*&@+#&-;,=*%#",
+"#%==-=-=*##&=-=--=%@#*=--=-=$@@%*-==-=*$$&--=--*%@#%=-===-&#%*===--=*#.@$*;>*%#..#%=-===&#@#&=--==&#@#&*-===&#@%&=-==*$@@#&=---*&@.$&=->==%@@#*=---*&@+$&==>-=&@",
+"+#&&*&*&%@@%&*&&&%#@@%&*&&&&#@@#&*&*&&%@@%&**&&&#.@#&&**&&%@#%&&&&&&$@.@$=>=&@...@$%&*&%#@.@#%&*&%#@.@#%&*&%#..#%&&&&$@..#%&&*&&$@.#%&&**&$+.@%&**&&$+.#%&*&*%$@",
+".@##$$##@..@@$$#$#@..@#$$#@#....@#$$#@@..@##$##@@...###$##@.@###@#@@@...@$&%#@.+...@@##@@...@+$##@@...@@####.@..@#$##@+...@#$$$@@+..@#$##@@.+.@##$$@@+..@#$$##@+",
+"+@@$$#$@@....@@@@@....@@@.........@@@@....@@##@.+....@@@@@...........+...@...............+..@@@@...+....@@@@....@.@@@.................@@@@..@@#@@...............",
+"@$***&*&$+.@@$%%$#@+.@#$$@@.+.+..@#%$#@+..@%&%$@..+.#$%%$#@.......@......@..@+...+.........@@$$#@......@#$%#@.+@@%%$#@+.+.....@..+...@@$%$@@@&&&#@+......+@@@@..",
+"$*>,>>;=%#.@%&==*%#@@#&*&%@.....@#%==$@..@%*>-&$@..@$*==*&#+.@#####@@+.+.@#$@@.....@+@@@.+.@%**%$@.+.+@#&**%@.@@%*=*%@...#@$$#$@@..+@@%*-&@@%=>-%#@+.+.#@#####@.",
+"%=>>,,,=&@@%&->;-%#..#%==*%@...@#&=-*%@.+#&=>>*%@..#&=>>-*#@@#%&&&&%@...@$**$@+.+.@#$%$%$#@#&*==&$#.@$$&*-=&#@#%&=--*%@@@$&&&&=&#@@$$%&=-*%@$=->&%$@@.@#%**&&&%#",
+"#*->->>-*#$&-->>-&$@@#&=--*$$.+#%=->*%@@@$*-->=%#@@$&->>-&#.@%*=-==&#...$&->&#...@$&*=***$#&*====*%@#&*=*==*%#%*-====*#@#&-=**-=%@#&*====-*%$&=>-**&$.#&===*=-*%",
+"$&->>>'>*$%*>>>>>*$@#%*>>--&$@#%*->>-*#@#&=>>>-*$@#%=>>>-*$@#&=>>>-*$@@@$*>>*$@.@$&-->>-=%%*>-=*--*#%*--*=--&$&->=*=>=%@$=>-=*--&#$&>-==->=%#&=>>--=%##&>>==->=%",
+"#&-;,',,=%%=,,>>;-&#$*>;->;-%#$*>,->;-%#$=>,->;-%@$*>,->;-%#$=>;->;-%@@%&=--=&%@@&-;>>'>=%%*;>**--*$%=;>**--*$&-,=*=--&@%=;>**--*$@&---=->*$#%=,==->=%#&--==->*$",
+"#*>>==-,-%#&>;-=->*$&='-==>,&$%->-==>;*#%=;-==>;*$%-;-*->,*#%='-==>'*#$&>-'>)>=##&>,-->,-%$&>-**=-*##*>-=&=-=$%=>=&*-=&@#*>-**=-=#@#&->>;*%@@%=;-=>>=$+#&->>>*%@",
+"$*,-=*=,=%$&--=*=-=$%-,***>,&$%>'*&*>,&$&-,***>'&$%-,=&*>'&$%-;***>;&#@%*====&%#$*'>>>-,=%$&--**=>=$$&--**=-=$%=>=**--&@#&--**=-*$.@%=>,=&@@@&=,>>;>*#+@%*;;-%#.",
+"#&,>=&=,-%$*--**=-=%&=,-*=-,&$%=,-*=-,*#%=,-==>,&$%=,-*=>;*#&=,-*=>,*@@#%&=-&%@@#*;,>-=,-%#%--=*->=%#%--*=->=%%*--*->>&#@&--==->=%@@%*-,=$@.#&=,,>-=%@.@$=>;*$@.",
+"#&-;>>;>=$$=,>-=>,-%%=,>>,>>%#%=>;>;;-%#%=>>>>,-%#%=>>>,>>%#%=>;>>,=&@.@#&->&@..$*>,;;>>*$@%=>>>,;-%#%=>>>;,-%$&->>;;'*#@$*>;>;'-%@$*>;>&#+.$*->-*&%@++$*-;>*#..",
+"@%*>>';=&#$=>'-=-'-%#&=>>,>*%@#&*,>,>=$@#&=>';>*%@#&=,>,>=$@#&*'>'-=$@..@$**%@..#&-,;,,=&@@#&->;>'>%@#&->,>'-%#$*>>,>,=#@$&=>'>,-%@%=>'>&+.+$*-;-*$@..+%=;,>&#@.",
+"+@%%&&%%#@#%&&%&&&%#@#%*&&%%@.@#%%&&%$@.@#%&&&&$@.@#%%&&&$@+@#%%&&%$@@...@$#@+..#&=**&%%#..@#%&*&&&#.@#%&&&&%#.@$&&&&&%@.@$%&&&&&#@%=-=*%@..$&=-*&@@..+$====$+..",
+"..@@###@...###@@@##@.@@####@...@@###@@@...@@#@@@@..@######....@@##@@..+...@@.@..@$%$$##@@.+.@@###@@@..+@@####@...#####@....@###@@@.@$%%$#.+.@$%%$#@....@$%$$@+..",
+".........+.@#@@.............+....@.@..+.........+.@@$%%$%%$@....@.#@...@@#@##@.....@@#@........@.@.+.........+.........+....@.....+.@@@@@...#%%$@@@@.....@......",
+"+...+@+...@%%%#@...+..........@#$#$#$#@@+.@@@.....@%===*=-*#+...@#%#$..@$&&&&#@...@#%&#@@...+.@@##@....@@#@.....+@@.@@@.@@#@@@.@....@$###$@@%=-&$$##@@..@+@@@#@.",
+"...@#$#@..$*==%#+.@..@@$$##@+.$&**=***&#.@#$%#..+.@&,>>>>,=%.@@@#%*%#@.#&*===%@+.@#%*=&#@+...@@%&&%#+@@$%&$@.+@@$#$$#$#@@%&%%%$##.@@%&&&*&##*>;=***&%@.##$#@#$#@",
+".+@#&*%#+@$=>'*$@@##+@%&**%#@@&=>>)>,>-$.@%**%@...@&>,>>-'-%@##$&*>*$@+#&=-->*#@@%&*-;=&%#...@%=>;*#@#%&--*$@@#%*=**=*&#%=--==*=&#@%*--=>=&#&-,>->>-=%@#&=%%**%@",
+"..@%=-*#..#*>,=%$%&%#%=>)>-&#@%&==-=**%@.@%*=%@.+.%*>,,;>'-%$***=-'=%##%*=>-,*%#$*->,)-=*%+..#%->>*#$**=>>=&%#%=)'>),;=%&-',','>-%$&=->-;>*$%*-;--;,=%#$*>=&-;=$",
+"..@%=>=%@.@$=>=&%*=%%*>>;;-=&#%**=>>**%#.#%==%@..@&-;>;;>'>&%->,,>'-*$%*--,-,-*%%=;>>'>>=%@.@$=>'>*#%-;,,,'>=$$&,>-=-'-%%*->>'>-*#%=>,,>,,-%%*-,==-;=%@$&;-=-;-%",
+"..@$*--%@.@$*-;&*--%&>>=----=$&==-'>-=*$@@%=-%#...%->>>>,>-%%*-,----*%*=->'-,-=%&=';;;---%+.@%=>>>*#&->>>,--*$$*,-**=,=%#$&=>-=&#@$*->>-;;=%%-,>=*=>=$.@&-;;-=*#",
+"+@$&*--%@..#%*,=*=*$%,-==->--%&*==;;==*$.@%=>&#.+@$=>;;;,;=%@#&->-=-*%&==-,-,-*%%=;,;,---%@.@$=>>-*$%=---,-*%##&,-&&*,-%.@$&-=*%@.@%*--->;*$&=;,=**-=$+@%=,;-*$@",
+"#%====-&$@.@#&--=*%#&>-**->-=%#$%*-=&%$@.$%-,&#...#*>'>,>>=$.@$*->=&&$#%*=-->=&$%=;>,,=-=%@@#%*>,>-%%=>>>>-&$+$*,=&&=,=%..@%==*$@.@$*--->>&#%*=>=*===%@#%-,,-&$@",
+"$*,;==-=%#..@%*,-&$@&->=*=>>-%@@$&-=&#@@.@%->=$@..#%->-=-=*#..@&->=%$@@#&=-=>-&#$&-=>'=**$#$%*=-;,-%$*,;>--*%@#&,>*&='-%@..#&==&#..$&--->>&#$%&=-=--=$$&*-;,>*%@",
+"%-,;>>>>=$...#%=-=&##*>>==-;=$..#&--=$@..@#*--&$@.@%=>>-*&$@..@#&==&$@.#%=-*->-%#$&*-;*%$#&*->,->-=$@%->>-==*$$*>>---;-$+..#%*=*%@.$*-->;-&@@@%*-->>*$&>,>==>>*#",
+"&>-==->;=%@..@#&*-=%#$*=>-**&#..@%=-*%@+..#%=>=&#.@#*-,-&$@.+..@$%**%@.@$&=&&==%@@#%-;&$@@%*--=**=*$@#*=**&==%$&-=&**-*$...@#%==&#+@&=->>-&@.@@%*=-*%#%==*&%*=-%",
+"%**%&**=*$+...@#%=*%@@#&=&%$@+..@$&*&#@....#%==%@.@@%*=*$@......@#%%$@.@#%%$#&&%..@$*=%@..$&**&%%%%#.@#%%$$&&$@$%%$$%*%#+..+@$&&%#.@$&*===%@..@#%&&%@@$%%#@#$&*$",
+"#$$##$%$$@......@$%#..@#$$#@.....@$#$@.+..+.#$%$@@..##$$#.+.+....@##@...@@@@@@#@..@#$%#@+..##$#@@@#@..@@@.@@#@.@##@.@$#@.....@#$#@.+@$$%&%#@....###@..@#@+..@#$@"};
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xaf, 0xea, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xeb,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x5e, 0xff, 0xff,
0xff, 0xff, 0xfb, 0xff, 0x5f, 0xff, 0xff, 0xff, 0x7f, 0x6f, 0xed, 0xff,
0xf7, 0xff, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xed, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xab, 0xff, 0xfb, 0xfa, 0xff, 0xff,
+ 0xa7, 0xd2, 0xfe, 0xff, 0xff, 0xff, 0xab, 0xff, 0xfb, 0xfa, 0xff, 0xff,
0xff, 0xed, 0xdb, 0xff, 0xee, 0xff, 0xab, 0xd4, 0xff, 0xff, 0xff, 0xab,
0xfa, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xdd, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x61, 0xff,
+ 0xdd, 0xff, 0xbf, 0xff, 0x05, 0x00, 0xfd, 0xff, 0xff, 0x7f, 0x61, 0xff,
0x17, 0xfd, 0xef, 0xff, 0xbf, 0xa8, 0xf4, 0xff, 0xf5, 0xff, 0x06, 0xe0,
0xff, 0xd6, 0xff, 0xad, 0xff, 0x5f, 0x75, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x57, 0x69, 0xff, 0x6b, 0xfb, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x57, 0x69, 0xff, 0x6b, 0xfb, 0x03, 0x40, 0xff, 0xff,
0xff, 0xff, 0xc3, 0xfe, 0xab, 0xd4, 0xbf, 0x6d, 0xff, 0xa9, 0xa1, 0xbf,
0xd1, 0xff, 0x0b, 0xa0, 0xdf, 0x5e, 0xff, 0x0b, 0xe9, 0xff, 0xd2, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xd5, 0xfe, 0xaf, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xa0, 0x7f, 0x05, 0xf8, 0x6f, 0xdf,
+ 0x0b, 0x00, 0xfa, 0xff, 0xff, 0xbf, 0xa0, 0x7f, 0x05, 0xf8, 0x6f, 0xdf,
0x5e, 0x40, 0xa0, 0xff, 0xe4, 0xff, 0xa2, 0xe2, 0xbf, 0x94, 0xbf, 0x00,
0xf4, 0x3f, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07,
- 0x40, 0x7f, 0x01, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x02, 0xfd,
+ 0x40, 0x7f, 0x01, 0xfa, 0x05, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x02, 0xfd,
0x03, 0xe0, 0x5e, 0x55, 0xbd, 0x40, 0xc0, 0xff, 0xa1, 0x7f, 0x05, 0xa0,
0xbf, 0x9d, 0xbe, 0x05, 0xd0, 0xff, 0x80, 0xfe, 0xff, 0xff, 0xff, 0xef,
- 0xff, 0xff, 0xff, 0x5f, 0x00, 0xfd, 0x03, 0xf0, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x5f, 0x00, 0xfd, 0x03, 0xf0, 0x0d, 0x00, 0xf9, 0xff,
0xff, 0x57, 0xa0, 0x7e, 0x05, 0xfc, 0xab, 0x54, 0x7f, 0x80, 0xa0, 0xbf,
0xf0, 0xff, 0x40, 0xe2, 0x7f, 0x94, 0x7f, 0x10, 0xb2, 0x57, 0xc2, 0xff,
0xb7, 0xfd, 0x57, 0xbd, 0xff, 0xff, 0xff, 0x05, 0x20, 0xff, 0x05, 0xfe,
- 0xff, 0xff, 0xff, 0xaf, 0xfe, 0x5f, 0x01, 0xfa, 0x41, 0xe9, 0x0f, 0x00,
+ 0x0b, 0x00, 0xfe, 0xaf, 0xfe, 0x5f, 0x01, 0xfa, 0x41, 0xe9, 0x0f, 0x00,
0xfa, 0xa2, 0xe4, 0xff, 0xa1, 0xef, 0x02, 0xc8, 0xdf, 0xb6, 0xee, 0x00,
0xe0, 0x3f, 0x82, 0xfe, 0xbf, 0xd5, 0x7f, 0x6b, 0xfd, 0xff, 0xff, 0x0f,
- 0x00, 0xfa, 0xad, 0xf4, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x17, 0x80, 0x7e,
+ 0x00, 0xfa, 0xad, 0xf4, 0x0b, 0x00, 0xf9, 0xdf, 0xff, 0x17, 0x80, 0x7e,
0xaa, 0xf6, 0x0b, 0x00, 0x5e, 0x01, 0xd0, 0xbf, 0xd0, 0xbf, 0xa4, 0xb2,
0xff, 0xdd, 0x3f, 0x00, 0xa0, 0x2f, 0x40, 0xff, 0x6a, 0xfb, 0x57, 0x95,
- 0xfe, 0xff, 0xff, 0x85, 0x00, 0xfe, 0x53, 0xfb, 0xff, 0xff, 0xff, 0x1b,
+ 0xfe, 0xff, 0xff, 0x85, 0x00, 0xfe, 0x53, 0xfb, 0x0b, 0x00, 0xfe, 0x1b,
0xfc, 0x2f, 0x14, 0xfa, 0xa1, 0xfe, 0x2f, 0x0a, 0xfa, 0x45, 0xd4, 0xbf,
0xb1, 0xff, 0x00, 0xe4, 0xff, 0xdf, 0x6f, 0x41, 0xc4, 0x5f, 0x8a, 0xfe,
0x03, 0x80, 0x0d, 0x00, 0xfa, 0xb7, 0xea, 0x15, 0x44, 0xf8, 0x5f, 0xff,
- 0xff, 0xff, 0xff, 0xaf, 0xfe, 0x0f, 0x49, 0xbd, 0x44, 0xfb, 0x05, 0x80,
+ 0x0b, 0x00, 0xf8, 0xaf, 0xfe, 0x0f, 0x49, 0xbd, 0x44, 0xfb, 0x05, 0x80,
0x7c, 0x23, 0xe8, 0xff, 0xe0, 0x5f, 0x00, 0xa8, 0xdf, 0xff, 0x3f, 0x08,
0xd0, 0x2b, 0x40, 0xdf, 0x4a, 0xd1, 0x07, 0x00, 0xfa, 0xee, 0xff, 0x41,
- 0x00, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xfa, 0x1d, 0x14, 0xbd,
+ 0x00, 0xfd, 0xff, 0xff, 0x07, 0x00, 0xfe, 0x9f, 0xfa, 0x1d, 0x14, 0xbd,
0x81, 0xf6, 0x0f, 0x0a, 0xfd, 0x85, 0xd8, 0xff, 0xd1, 0xbf, 0x10, 0xe0,
0xff, 0xff, 0x5f, 0x40, 0x82, 0x5f, 0x44, 0xfd, 0x02, 0xd1, 0x0f, 0x00,
- 0xfa, 0x15, 0xd1, 0x0b, 0x24, 0xf8, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0x55,
+ 0xfa, 0x15, 0xd1, 0x0b, 0x24, 0xf8, 0xf7, 0xfe, 0x0f, 0x00, 0xfc, 0x55,
0xfd, 0x17, 0xd9, 0x7f, 0x00, 0xfe, 0x85, 0x08, 0xfa, 0x02, 0xf4, 0xbf,
0xb2, 0x7f, 0x44, 0xa2, 0xff, 0xff, 0x1f, 0x20, 0xc8, 0x17, 0x81, 0x3e,
0x51, 0xd0, 0x55, 0x15, 0x7c, 0x00, 0xa0, 0x21, 0x80, 0xfe, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x9f, 0xfa, 0x17, 0x92, 0xfa, 0x08, 0xf8, 0x0f, 0x2a,
+ 0x05, 0x00, 0xfe, 0x9f, 0xfa, 0x17, 0x92, 0xfa, 0x08, 0xf8, 0x0f, 0x2a,
0xfe, 0x0f, 0xd4, 0xff, 0xe5, 0xef, 0x40, 0xa0, 0xff, 0xff, 0xbf, 0x40,
0x81, 0x3f, 0x80, 0x7e, 0x00, 0xd0, 0x3f, 0x29, 0xf8, 0x05, 0xe0, 0x43,
- 0x10, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0b, 0xfe, 0x0f, 0x08, 0x5f,
+ 0x10, 0xf8, 0xff, 0xff, 0x0f, 0x00, 0xfc, 0x0b, 0xfe, 0x0f, 0x08, 0x5f,
0xa1, 0xfe, 0x0b, 0x00, 0xfc, 0x00, 0xf9, 0xbf, 0xd0, 0xbf, 0x02, 0xc0,
0xff, 0xff, 0x5f, 0x00, 0xd0, 0x57, 0x40, 0x5b, 0x24, 0xf2, 0xd7, 0x17,
- 0xfe, 0x54, 0xa5, 0x0b, 0x02, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5b,
+ 0xfe, 0x54, 0xa5, 0x0b, 0x02, 0xfe, 0xff, 0xff, 0x0b, 0x00, 0xfe, 0x5b,
0xfa, 0x5f, 0x20, 0xfd, 0x82, 0xea, 0x1b, 0x04, 0xfa, 0x17, 0xd0, 0xff,
0xb1, 0x7f, 0x05, 0xa2, 0xff, 0xff, 0x5f, 0x02, 0xd0, 0x2f, 0x44, 0x7e,
0x00, 0xd2, 0xbf, 0x36, 0xf8, 0x4a, 0xea, 0x06, 0x04, 0xf8, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x07, 0xfe, 0x17, 0x94, 0xbe, 0x00, 0xfd, 0x87, 0x48,
+ 0x0b, 0x00, 0xfc, 0x07, 0xfe, 0x17, 0x94, 0xbe, 0x00, 0xfd, 0x87, 0x48,
0xfe, 0x02, 0xf5, 0xbf, 0xe0, 0xff, 0x02, 0xc1, 0xff, 0xff, 0xbf, 0x00,
0xa0, 0x5f, 0x80, 0x5f, 0x24, 0xf4, 0xff, 0x2f, 0xfe, 0x95, 0xea, 0x0b,
- 0x40, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, 0xf4, 0xbf, 0x00, 0xbd,
+ 0x40, 0xfd, 0xff, 0xff, 0x07, 0x00, 0xfe, 0x2f, 0xf4, 0xbf, 0x00, 0xbd,
0x25, 0xa5, 0x1f, 0x00, 0xfa, 0x15, 0xd4, 0xff, 0xd1, 0xff, 0x2d, 0xc0,
0xff, 0xff, 0xbf, 0x48, 0xe1, 0x5f, 0xa9, 0xbe, 0x40, 0xa0, 0xff, 0xbf,
- 0xfa, 0xff, 0xfe, 0x2b, 0x04, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x85,
+ 0xfa, 0xff, 0xfe, 0x2b, 0x04, 0xfe, 0xff, 0xff, 0x0d, 0x00, 0xff, 0x85,
0xfa, 0x6f, 0x80, 0x7f, 0xa0, 0xe8, 0x0b, 0x80, 0x7e, 0x03, 0xfa, 0xbf,
0xd0, 0xbf, 0x4a, 0xe0, 0xff, 0xff, 0x7f, 0x02, 0xb4, 0x7f, 0x52, 0x7f,
0x11, 0xd0, 0xff, 0x6f, 0xff, 0xdb, 0xf7, 0x07, 0x40, 0xfb, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x0f, 0xf6, 0xff, 0x43, 0xfd, 0x00, 0xa0, 0x5f, 0x3d,
+ 0x03, 0x00, 0xfc, 0x0f, 0xf6, 0xff, 0x43, 0xfd, 0x00, 0xa0, 0x5f, 0x3d,
0xfa, 0x06, 0xd0, 0xff, 0xa1, 0xff, 0x90, 0xd4, 0xff, 0xff, 0xff, 0x12,
0xf4, 0xf7, 0xf7, 0x7f, 0x03, 0xc1, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x5f,
- 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x05, 0xfc, 0x5f, 0xa2, 0x5f,
+ 0x09, 0xff, 0xff, 0xff, 0x0b, 0x00, 0xff, 0x05, 0xfc, 0x5f, 0xa2, 0x5f,
0x00, 0xa0, 0xb7, 0xe5, 0xfd, 0x02, 0xf4, 0xbf, 0xf0, 0xbf, 0x00, 0xe8,
0xff, 0xff, 0xff, 0x85, 0xea, 0xff, 0xde, 0xff, 0x92, 0xd0, 0xff, 0xbf,
- 0xff, 0xff, 0xff, 0x6f, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
+ 0xff, 0xff, 0xff, 0x6f, 0xe0, 0xff, 0xff, 0xff, 0x03, 0x00, 0xfc, 0x0f,
0xf4, 0xff, 0x62, 0xff, 0x00, 0xc0, 0x6f, 0x5f, 0xff, 0x25, 0xd4, 0xff,
0xa1, 0x7f, 0x01, 0xf8, 0xff, 0xff, 0xff, 0x0b, 0xfc, 0xff, 0xff, 0xff,
0x87, 0xc2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xa0, 0xfe, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x05, 0xfe, 0xff, 0xab, 0xbf, 0xaa, 0xea, 0xff, 0xff,
+ 0x07, 0x00, 0xff, 0x05, 0xfe, 0xff, 0xab, 0xbf, 0xaa, 0xea, 0xff, 0xff,
0xff, 0x8a, 0xf4, 0x7f, 0xf5, 0xff, 0x54, 0xf7, 0xff, 0xff, 0xbf, 0xf7,
0xff, 0xff, 0xfd, 0xff, 0xbd, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
- 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xf4, 0xff, 0xeb, 0xff,
+ 0xdf, 0xff, 0xff, 0xff, 0x45, 0x2a, 0xfd, 0x5f, 0xf4, 0xff, 0xeb, 0xff,
0xa5, 0xaa, 0xff, 0xfb, 0xff, 0x5b, 0xfd, 0xff, 0xd5, 0xff, 0x23, 0xed,
0xff, 0xff, 0xff, 0x5f, 0xf5, 0xff, 0xff, 0xff, 0xf7, 0xea, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0b,
+ 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xff, 0xff, 0x57, 0xaa, 0xfe, 0x0b,
0xff, 0xff, 0xfd, 0x7f, 0x5b, 0xfd, 0xdf, 0xff, 0xff, 0x6f, 0xf7, 0xff,
0xf5, 0xdf, 0x56, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x7f, 0xfd, 0xff, 0xbf, 0xff, 0xff, 0xfb, 0xff, 0xff,
+ 0xbf, 0xbb, 0xff, 0x7f, 0xfd, 0xff, 0xbf, 0xff, 0xff, 0xfb, 0xff, 0xff,
0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xee, 0xfe, 0xff, 0xff, 0xff, 0xef,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xef, 0xff,
/* XPM */
-static char *matrix2_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"320 377 12 1",
-/* colors */
-" c #81DD81",
-". c #5AD25A",
-"X c #2BA02B",
-"o c #279027",
-"O c #217A21",
-"+ c #E0F7E0",
-"@ c #1B641B",
-"# c #165016",
-"$ c #0B2A0B",
-"% c #081E08",
-"& c #A7E7A7",
-"* c #000000",
-/* pixels */
-"***************************%%%%%%****************%**%************%%%$$###$$%%%*******%%%$###$%%************%*%%**************************************%*%*%*************%$#####$%********%$##@##$%***************%%%%%*************************************************************************************************%%$$#$$%**",
-"**************************%%$$#$$%%**********%%%%%%%%%%%*********%$##@@@O@@#$%%******%%#@@O@@#%%%*********%%$%$%%%**********************************%%%%%%************%%#@OoO@#$%******%$#@OOO@#%%************%%%$$$%%%***********************************************************************************************%$#@@@#$%*",
-"************************%*$$@@O@@$$%*******%%$$#$#$#$#$$%%*****%*%#oXX....oO@$%*****%%#@o. .o@#$%*******%%$$##@#$%********************************%%$###$$%**********%%#@o++.Xo#%%****%%#oX.++o@#%%***********%$#@@@#$%*********************************************************************************************%%%#O...@#$*",
-"************************%%$@OXoXO@$%%*****%%$#@@O@@@O@##$%%****%%$@X.... .XXO#%****%%#@oX & XoO#$%%****%%$#@OOO@#$%%***********%%$%%%%%**********%%$#@OO@#$%********%%$@oX++..X#%%****%%#o..++Xo@$%*********%%$#@Ooo@#$%%**********%*%%%*****************************************************************************%#@o o@$*",
-"************************%$@X.+++.X@$%*****%%@Oo. XXX .oO@%%****%%#O. &&&++..X#$***%%#@o &+++ .XO@%%****%%#O. O#$%*********%%$$###$$%%*********%$@O. Xo#%%*******%$#Oo.++.XX#%%****%%#XX.++XXO#$%*******%%$#Oo+++oO#$%%*********%%$$$%%**************************************************************************%%@oX++&o@$*",
-"***********************%%#@X.+++.X@#%****%%#OXX& .X.&&XXO#%****%$@o &&&&++ .X@$**%%$@OX &+++& XXO$%***%%#@o && o@$%%*******%%#@OOOOO##%%*******%%#@o & .o@$%******%%$@.. &&Xo@$%******%$@XX&+ ..@$%%*****%%$#OoX+++Xo@#$%%*******%$#@@@#$%************************************************************************%%$@X.+++XO#*",
-"***********************%%#o..+++..O#$****%%#oX.&&...&&.Xo#%***%%#@o &&&&++ ..O#**%$@OX.&&+++& .Xo#$***%$@OX &&&&XO@$%*****%%$#@OXXXXoO@$%*******%$#oX&&&.X@$%******%$#O. &&&XO@$%*****%%$#OX&&& .O#$%****%%$@@oX.+++.XoO#$%******%%#@ooo@#$%***********************************************************************%%#OX.+++X@#*",
-"***********************%$#O &+++& o@%%***%$@X. ++ ++..X#$***%$#oX&&&&&++ ..O#*%$#O &&+++++++..X#$**%%#XX.&&&& ..@$%*****%%#@o&&+++& O#%%******%$OX.+++..@$%%******$@o &&& X@#%********%#OX &&&&o@$%****%$#X....+++....X#$******%#@o+++o@$%***********************************************************************%$@o &&&X@$*",
-"************************$@o &+++& o@$%**%%$@.. ++ ++ .X@$**%%#OoX&&&&&++ .o@*%$@o &&+++++++ .X@$**%$#X..&&&&& .O#$%****%$@OX&&+++&&o@$******%%#O..+++.X@$%******%$OX&&&& o@$%*******%%$#o &&&&o@#%****%#@.. . +++ . ..@$*****%%#OX+++XO#%%**********************************************************************%$@o &&& O@$*",
-"***********************%$@o &+++ o@$***%%$OX. ++ . ++..o#%*%%$#. ++++++++&&XO*%#@o+++ &...& ..X#$*%%$#X. &&&& & o@$%***%%#o..++... O#$%*****%$@o&&& XO#%%*****%%#@X&&&& O#%%*********$#O &&&&XO#%***%%$@. +++++++ ..@#******$#oX+++Xo#$%***************************%*%*%*%**%%*******************************%$#oX++..XO#%*",
-"***********************%%@o. +++&.o#$%***%#@.. ++. .++.Xo#%**%#@.. ++++++++&&Xo*%#@X&++ &...& .Xo#%**%$#X..&&&&&& oO#$%**%$#X..++... O#$%*****%$#o&& .o@$%%******%#OX+++.oO#%%*********%#@XX+++XO#%%**%%#@.. +++++++& .@#***%%%#@o.+++.o@#%%*************************%%%$%$%$$%%$%%%****************************%#@oX++..o@$%*",
-"***********************%$@o &+++ o@$***%%$@X..++...++.XO$%*%%#@. &++++++++&&XO*%$Oo+++ &... .Xo#$**%$#o..&&&&&&&XO@$%**%$#X..++..X .O#$%%*****$#O &...@#$%******%$#oX+++.o@$%*********%%$@o.+++Xo#$****%$#. +++++++ ..@$**%%$#@OX.+++.Xo@#$%**********************%%$$##@#@#@@@##$$%**************************%$#OX.++.XO#%%*",
-"************************%#o &+++& O@%%***%$#X........ oO#$%*%%#O.. ++++++++&&X@*%$@o&&&++&&& ..XO#$***%$@OX&&&&&& ..X$%**%$@o..++..XXoO@$$%*****%#@X.oO@#$%********%#oX+++Xo@$%**********%$@oX+++Xo#%%**%%$#OX.. +++ .XO#$**%#@OoXX.+++.XXoO@$**********************%$@@OoooooooooOO@$*************************%$#o. &&X@#%%**",
-"***********************%$#O &+++& O#$****%%#oXX.XooX..O#$%***%$@. &++++++++&&o@*%$#O &&++&&& ..Xo@$**%%$#OX&&&&&&&..X#%**%$#XX.++...XXOO@$%****%%$#oo@#$%%%*******%$#oX+++Xo@%***********%%@oX+++Xo@%****%%#@XX +++ .XXO#$*%$#OXX...+++...XXO@*********************%$@OXXXX.XX.XXXXoO@*************************%#@X&++ .o@$%***",
-"************************%#@X.+++.XO$%*****%%$#@@@@@@@##$$%**%%#Oo..++ ++..XO#**%#@oX. +++++ .O#***%$#OX &+++&&XXO#%**%$#X..+++++....X@$******%$$#$$$%**********%@oX+++Xo#$***********%%@oX+++Xo#$%***%%#OX.++ ++.XX#%*%#OX+++++++++++++XO*********************%#OX+++++++++++++XO************************%%#OX+++..O#$%***",
-"************************%$@XX+++.o@#%%****%%$$$#$$$$#$$%****%$#OXX.++ ++.XXO#*%%$@oXX &+++++&& O@***%$#OX&&+++&&.XO@$*%%$@X..+++++.. ..@#******%%%%%%***********%%#oX+++Xo@%%**********%%@oX+++Xo#%*****$$oX.++ ++.Xo#%*%#oX+++++++++++++XO************%********%#oX+++++++++++++Xo************************%$@oX+++..@$%****",
-"************************%$#oX+++Xo@$********%%%%%%%%%%%%****%$#oX..++ ++..XO#**%$@OX.. +++++&& o@**%%$#OX &+++&&.Xo@$*%%#@X..+++++.. .O#*******%%%*%***********%%#oX+++Xo@$%**********%$@o.+++Xo#%*****%#OX.++...++.Xo#%*%#OX+++++++++++++XO********%%%%%%%******%$OX+++++++++++++XO********%%%%%%*********%%#@..+++Xo@$%%***",
-"************************%%#oX+++XO#%%***********%*%*%*******%$OX+++++++++++&&O#*%%#O.. . ...& +++X@**%%$X.. ++++&&& O#*%$#o.&&&&+++++&& o#***********************%%#oX+++.o@$%**********%$@oX+++Xo#$%***%%$OXX. XXX .XoO$%*%$@OXX...+++...XXO@*******%%$$##$%%%****%$@OXXX.X.X.X.XXXO#******%%%$###%%%*******%$@o&&& o@$%*****",
-"*************************%#@X+++X@#%************************%#OX+++++++++++&&@#*%$#O. &. ... +++oO**%%$oX.. +++++&& O@*%$@o &&&&+++++&& O#***********************%%#oX+++.oO$%**********%$@X.+++XO#%****%%$@oX..ooo..oO@$%**%$@OoXX.+++.XXoO@$*******%$#@@@@#%%****%%$@@ooooooooooOO#$******%$#@@@@#$%******%%#OX&& .O@$%*****",
-"************************%%$@oXXXO@$%************************%$@X. ++&&&&&.Xo@$*%$@o&+++++&+++&&&X@***%$#@OX.&&&..&& o#*%$@X+++ & &++...o@************************%#OX&&& .O#$%********%%#O. &+&XO#%*****%%$###@#@#@@##%%%**%%$#@oX.+++.Xo@#$%******%%#@...oo#%%****%%$####@#@@#@@##$%*****%%#oX...@#%*****%%$@oX&+ ..@$%******",
-"*************************%$#OXXXO#$%************************%$@O. ++&&&&&XX@#$*%$Oo&++++&&&++&& o@**%*%$#@oX&&&..&& o@*%#@X&++& & ++ ..O#***********************%%$@o&&+ .o@$%*******%%$@o. +&&X@#%%*****%%$$$$$$$$$$%%*%****%$#@o.+++XX@#$%*******%#@o .o#$%******%%%$$$$$$$%%%%%******%$@o. O@$%****%$#oX.++.oO#$%******",
-"*************************%%#OXXXO@%%*************************$#O. ++&&&&&XO#$%*%$@o&++++&&&++&& O#***%%%$@OX&&&..&& o#*%#@o&++ & &++...o@************************%$@o. &&&oO$%%******%%#@X&& o@$%********%%%%%*%%%%*%*******%$#oX+++Xo@$%*******%$@OX&& .X@$%********%******%%%%*******%%#@X.&& o@$%****%$@o..++Xo@$%%******",
-"*************************%$#O+++O#$*************************%%#O.. ++&++ oO$%%*%$#o. &&+++&&XXO#$*****%%$@o&++++&& O#*%$@o&&&++++++++++XO*************************$#O. &&&Xo#$%******%$#OX&&& .O#$**********%*%*****%*********%%#OX+++XO#%%*******%$OX.+++.X@$%***********%***************%$O. +++o@$%****%#O. &&XO#$%*******",
-"*************************%%#O+++O#$%*************************%$@.. +++++ o@$%***%#@.. &+++&&XO@#%******%$@O&&&&&& @#**$#O &&+++++&&+++oO*************************%#@.. &&Xo@$%%*****%$@oX&& ..@$%%****************************%$@o+++o@$%*******%$#O..+++ X@$%%*************************%%$@. +++o@$%%***%#O.&&& X@$%********",
-"**************************%#@OOO@$%%************************%%$@X. ++&&&& O@$%**%%%%#@OX.+++XX@#%%********%#@OoXoXoOO#$**%$#OoXXX.XXXXXXoO#***********************%*%%#OX.++..X#%*****%%#X..++XXO#$%*****************************%$#Oooo@#$%********$#o&&& XO#$%***************************%$#@ooXo@#$*****%#O && O@$%********",
-"**************************%%##@#$$%**************************%$@X. ++&&& .O#%******%%#@oX+++Xo#$%********%%%$#@@@@@##$%**%%$#@OoOooooooO@#$*************************%%$@OX++..X#%%****%%#X..++Xo@$%*******************************%$##@@#$%********%$@O&& .o@$%*****************************%$#@O@@#$%%****$#O. ..X@#%*********",
-"***************************%%$$$%%***************************%%#oX.&&&&& .@#%%*******%$#O. .@#$%***********%$$$##$$$%%***%%%$$$###@######$%**************************%%#Oo++.Xo#%*****%%$oX.++o@#%%********************************%%$$$%%%********%%#o &...@#%%*****************************%%%$$#$%%******%$@...XO#$%*********",
-"****************************%%%%%****************************%%$#@OooXooO@#%%*********%$#@@@#$%**************%%%%%%%%%******%%%%$%$%$%$%%%****************************%$#@OOO@#$%%*****%$#@OoOO#$%**********************************%%%*%**********%%#OX.oO@#$%%*******************************%%%%%%%******%$#XXXOO$%%*********",
-"**************************************************************%%$##@@@@@##$%%**********%$$##$%%****************%*%************%*%*%*%*%********************************%$##@##$%%******%%$##@#$$%*************************************%************%%$#XXO@#%%**********************************%*%*********%%$#@##$$%**********",
-"******%%%$$%%%%*********%*%%%$%%%%**********%%%$%$$%$%%%*********%%%%$$$%%%*************%%%$%%%********%%%$$$$$$$%%%%************%%%%$$%%*****%%$%$$$$$$$$%%%*********%%%$%$%%%***********%%%$$%$%******************************************************************************************************************%*%*********",
-"*****%$$##@##$%%%*******%%$$####$%**********%%$###@@##$%%*******%%$#@#@@@#$%%**********%$$$##$%%%*****%%$###@@@@@##$%%*********%$$##@###$$%**%$$#@@@@@@@@##$$%******%%$$##@###%%%*******%%%$#####$%%%************************************************************************************************************%%%%%$%%%%*****",
-"**%%%$#@OOoOO@#$%%****%$$#@OOOO@#$%%******%%$#@OOoooOO@#$%%***%%$#@@OoooOO@#$%%******%%$#@O@O@#$%***%*%$#@Oooooooo@@$$******%%%$#@OOooO@@$%*%%#@OOooooooooO@#$****%%%##@OOoOO@@$$%******%$#@OOOOO@#$$%*********************************************************************************************************%%$######$$%%****",
-"**%%$@@X. & .XO@$%%**%%#@OoX. O#%%*****%%$#@o..&&&..o@#$%***%$#@o..&&&..OO#$%******%$#OX....@#%****%$OoX & & &&..X@$%*****%%#@OoX & .O@$*%#@.. &&& &&&...@#%***%$#@oX. & .XO@#$%****%$#@o ..oO@#%%*******************************************************************************************************%%$@@OoooOO##%%***",
-"**$$@Oo..&&&..oO@$%*%%#@oXX..& oO$%*****%$#OoX &&& XoO#$**%$#OoX &&& XoO#$*****%%#Oo... .O@$%**%$#OX.&&&&&&& .@#%*****$$@oXX.&&&& X@$*%#O. &&&&&&& .O@$**%$#@oX..&&&..XoO#$**%%$#OoX&&& XXo@#%****************************************************%%%%%%*************************%%%%%%*************%%#@OoXXXXXXO@#$%**",
-"*%$@X..+++++++..X@$*%%#O&+++++++XO#%****%%#@. &+++++++& .O#*%$$@. &+++++++& .O#*****%$@X.+++++X@#%%*%%@X..++++++&& .O#%***%%$@X.+++++&&&XO#*$@o&&+++++&++++&o@$*%$$O. +++++++& .@#***%#@X++&&&++++&o@$**************************************************%%%$#$$$%%**********************%%$$#$$$%%**********%$@XX+++++++.XO#%%*",
-"*%#@...++++&++ ..@#*%$#o&+++++++Xo#$%***%%@O &&+++++++&& O@**%#O &+++++++&& O@****%$#O..+++++XO#%**%$@X. +++++++&& O#%***%$#OX.++++++&&XO#*$@o&&+++++++++++oO$**$@O &&+++++++&& o@**%$@OX++++++++++oO$*********%%%%*****************%%%%%%***********%%%$$#@@@@##$*****%%%%%%%%%%%%****%$$@@@@@#$$%%*******%%#OX.+++++++.XX@$%*",
-"%$#O. +++++++ ..O@**$#O&&++++++Xo#%*****$@o &&+++++++&& o@*%$#O &&+++++++&& o@****%$#O..+++++Xo#%%*%#@.. +++++++& .O#%**%%$Oo. +++++&&&o@$*%#O&&+++&&++++++XO$*%$@o &&+++++++&& o@*%%$@XX++++++++++XO@*******%$$$$$$%%*************%%$#$$$%**********%$$@@OooXoO#$****%%%$$$$$$$$$%$%**%$@OoXooO@#$$%%*****%$#oX.+++++++..XO#$*",
-"%$Oo&++ ... ++&o@**%$@oXX..+++Xo@$****%%@O&&+ ... +++XO**$#O. ..... &++&o@****%#@X&+&&&++Xo#$**%#@.. ++......Xo@#%**%$#OX++&&&...XoO#$*%$@OoXXXX..&&&&&o@$*%$OX&++ ... &+++X@*%$#X..++.....+++.o@*****%%$#@@O@#$%************%$##@@@#$%*******%$$#@Oo +++.X@**%%$##@@@@@@@@@##$%*$#@+++&&Xoo@#$%%****%$#X..++...&&++&o@$*",
-"%$OX+++ XXX +++XO*%%$$@oXX.+++XO@%%***%$#O&&&..XX. +++XO*%%$#. ..XX.. &+++XO***%$#OX&+&&&++Xo#%%*%$@.. ++ .....XX@#%*%%$@XX++&& ...Xo@$%*%$$@@OOooX.&&&&&o@$*%$@o+++& ... ++&X@*%$@X. ++.X.X.+++XX@*****%%#@oooo@#$%**********%$#@OXoo@#$%****%%$#@OXXX +++.X#**%$#OOooooXooooOO#$*%#O+++&&.XXoO@$$%***%$@X. ++...&&++&XO$*",
-"$#OX+++ .XXX..+++XO***%%##oX.+++.O@%%****%$@OoooooXX&&+++X@**%$#@OOoXXX.++&&&o@**%%$OX.++ . ++Xo#$**%#@X. +++++++& .O#$*%$#X..++&&&&&.Xo@$%**%%$$##@OXX++ ..O#$*%#@X&&&&&...&&&&&oO*%$@.. ++.X.X.+++.X@*****%$@..+++o@$%**********%$@..+++o@$%***%%$#OX.&++++...oO#**$#@ &&&&&&& & O#*%$@oX.&&+++ .O@#$$**%%#XX. .X.. +++X@#*",
-"%#OX+++ .XoX..+++XO****%%#@XX+++Xo#$*****%$$#@@@OoX.&&++&X@***%%##OOoX..++&&&oO**%$#oX.++ ++Xo@%%*%#@.. +++++++ .O@%*%$@X. ++&&&& ..X@#%***%%%%$#@oX++ ..@#%*%$@o&&&&&...&&&&&o@*%$@.. +&.X.X.+++.X@****%%#@. +++X@#%*********%%#@. +++X@#%**%%#@Oo..+++++..XO#$*%$@o &&&&&&&&&&& O@*%$#@oX&&+++ XoO@#$*%%#OX....X.. +++XO#*",
-"%#OX+++ .ooo..+++XO*****%$#o.+++Xo@%%*****%%$##@OoXX&&++&o@***%%$$@OXX..++&&&o@**%#@X..++. .++Xo@$%*%$#X..+++++++& o@$*%#@.. ++&&&&&...O@$*****%%%$@o.++ .X@$%*%$@o &&&&...&&&&&o@*%$@X. ++..X..+++.X@****%%$O. +++X@#%*********%%#@. +++X@#%**$$@OXX. +++++.XX#$%*%$@o&&&&&&&&&&&&&o@**%$#@o &+++& .XXO@$*%%$OoX..XX.. +++oO$*",
-"%#oX+++..oOo..+++XO******$#oX+++Xo#$*******%%$#@O.. ++...O#****%%$@..+++++ ..o@*%$@O &&& . ++.X@$%*%$#oX.&&...&&+++XO#*%$@.. ++++++++++X@#******%$#OX.++XX@#%%*%$@o.. +++++++...o@*%$@X..++...&&+++.XO*****%#@X.&&&oO$%%*********%#@..&&&X@$$**$@O&&&++&& .XoO#$%%*$#oX&&++++++++++&XO***%$#@oX...+++++.X@**%%$#@oX.. ++&&&o@$*",
-"%#OX+++..oOo..+++Xo******$#oX+++Xo@%%*******%$#OX. ++..o@$****%%$#X.+++++...o@*%$@o &&&&. .++.XO@$**%$OoX&&...&&+++Xo#*%#@.. ++++++++++XO#******%$@oX.++Xo@$%**%$@o...+++++++ ..o@*%$#X..++... &+++.X@****%%$@X.&& O@$***********%$#X. & O@$***$@o&&+++& XoO#$$***$#oX&&+++++++++&&Xo****%$#@oX..+++++..@**%%%$@OX. ++&& O#$*",
-"%#oX+++..ooo. +++XO*****%$#oX+++Xo#$********%#@X.+++ .Xo@$$****%%#@Oo...&&++&oO*%#OX+++++&&&++ ..@$*%%$#@OOoooX..+++.X@*%$@.. ++ ....+++.X@******%$@. &&XO#$%**%$@o&++&&. .&&++&oO*%%#@XX&&++++++++.X@******%##OOOO@$%%**********%%$@@oOO@$%%**#oX+++++ Xo@#%%%**%#oX&&&&&&&&&&&&&XO****%%$@OX..+++++ .O****%$#OX+++ XXO@$%*",
-"%#OX+++..ooo. +++Xo******$@oX+++Xo@$******%%$@O..+++ .oO#%%***%%$#@@oX..&&+++XO*%#OX+++++&&&++& .O#*%%$#@OOO@OoX.+++.X#*%#@.. ++.....+++.o@*****%%#O. +&XO#%%**%#OX+++&&...&&+++XO**%$#OX&+++++++++.X@*****%%%$#@@#$$%************%%##@###$*%**#OX+++++ Xo@#$%***%#oX&&&&&&&&&&&&&X@****%%#@oXX.&++++ .O*****$#OX+++ .XO##%%*",
-"%#oX&++ .XoX..+++XO*****%$@XX+++.o@$%*****%$#OX. +++ .O@$%%**%%##@@@OoX.&&+++XO*$#oX+++++&&&++& .O#*%%##@@@@@@oX.+++.X@*%$@.. ++.....+++.X@*****%$#o. &&&X@$%***%$OX+++&&...&&+++XO***%#Oo&&++++++++.X@******%%$#$#$$%*************%%%$##$%%%***$OX&++++& ..Xo@#$%%*$#oX&&&&&&&&&&&&&XO***%$$@OXX..+++++..@****%%#OX+++..O@$%%**",
-"%#OX+++ .XoX..+++XO****%%#@o.+++XX@#%%**%%%#oX.++&& .oO#$%%*%%$@X..oooXX +++XO*%#oX+&++++++++&& o#*%$#X..ooOOoX.+++.X@*%#@X. ++..XX.+++.X@*****%$@o&&&& o@$%%**$#OX+++ ... +++XO**%%%@OX... +++Xo#*******%$$###$%%************%%$$###$%****%#@oX. ++++&XoO#$%*%#oX&&+++++++++&&XO*%%%#@O..+++&&.XXo@#*****%#OX&&&Xo@#%%***",
-"%#@X+++ ..XX..+++X@***%%$@OX.+++.Xo@$$%**%#@X..++&& .Xo@#$%*%$#O...XoXX. +++XO*%#oX&&++++++++&& o@*%#@...XXoXX..+++.X@*%$@.. ++.....+++XX@****%%#@X&&&& o@$%***%$OX+++ ... +++XO***%$#OXX. .. +++XO#******%$#@O@@#$%***********%%$#@@@@#$%***%$#@OX..+++++..o@#$*%#OX&&++&++&&&&&&XO**$#@oX +++&&XXo@#$****%%#@X&&&XO#$%****",
-"%$@o&++ ... ++&o@**%%#@OXX.+++.XXO@$%*%$#OX..++&& .XXO#$$*%$@o.. .XX.X ++&X@*%$Oo&&&+++++++&& o#*%#O.. ..XX...+++.o@*%%#X..++.....+++.X#*****%#@X&&&& O#%%***%#@X&++ .X. +++o@**%%$@OX... .+++XO#*****%%#@Oooo@#%%**********%$#OoXoO@#$***%%$#@O..+++++..Xo@#*%$@o&&&&&&&&&&&& o@*%$@oX. &+++& oO##%%*****%$@X&&&XO#%%****",
-"%%@O.. ++&&&++ .O@*%%$@X..&&+++&& ..@$*%#@X+++++&&&&&..X@$*%#OX+++&&&&&++&&&o@*%%#@oXX. &&&++& o@*$#@ &++& &++++&XO#*%%#@XX+++++&&+++XX#*****%#OX+++XX@#%****%$@o &&++&&&++&&&o@**%$@OX &&&&++&&&o@$****%%$#..+++o@$%*********%$#O..+++o#$%****%%$#@oXXX&&+++.X#*%%#@OoooXoXXoXooO@#*$#@&++++...Xo@#$%%*****%%$@o & o@$%*****",
-"%%$@X..++&&&++..X@$*%%#@..&&&+++&& ..@#*%#OX+++++&&&&& .@#*%#OX+++++&&&++&& O#*%%$#@oX..&&&++& O@*%#@.&&++&&&++++&o@$**%$#OX++++++++++Xo#*****%#OX+++Xo@%%****%%#O &&++&&&++&& O#**%$OoX&&&&&++&& O@$*****%#@..+++o@$%*********%$@o. +++o@$%******%$#@OoX +++.X#*%%%$#@O@O@O@OO@@##%*%#O&++&&.XoO@#$%%*******%$@o & o@$%*****",
-"*%$#@oX. &+&& XoO#$*%%#O. &+++++++& .O#*%#OX&+++++++++& .O#*%$@O...+++++&&XXO@#***%%$@O..&++++&& O@*%$#OX.&&+++&&.Xo@#$***%$@O..&&&++ ..o@$****%%$@o&&&XO#%%****%%$@OX.&&+++&&XXO@$*%%#oX.&&++& XXO@$%****%%#@..&&&XO#%%*******%%#@X++ &.o@$%********%$#@@ooXXoO@#***%%$$$#$###$#$$$%%*%#@XXXXoOO@#$%%*********%$@o & o@$%*****",
-"**%$#@o..&&& .oO#$%*%%#O.&&&++++&&& @#*%#OX&&++&+++&&& O#**%#@X..&&&&&&&Xo@$%****%%#@..&&&&&& O#*%%#@OX &&&&&&XoO#$%***%%#@XX&&&&&..XO#$*****%$@o o@$%%*****%%$@OX &&&&&&Xo@#%*%%$OX.&&&&&..oO##%%*****%$@X.&&&o@$%********%%#OX++ .O#$%********%%%$##@@O@@$$***%*%%%%%%%%%%%%%***%$#OooO@##$%%%**********%%#O O#$%*****",
-"***%$#@X.&&&..@#$%***%$@.. &&&&&&& ..@$*%$Oo&&&&&&&&&& ..@$*%%$@oX.&&&&& O@#$%****%%$#XX&&&&& ..@$**%%$@O &&&& o@#$%*****%$#OX && .Xo#$%*****%%#@. @#$%*******%%#@O &&& O@#%%*%%$OoX&&&&&.XO#$%%*****%%$#X.&& O#$%********%$@oX++ ..@$%***********%%%$$#$$$%**********%**%*%*******%$##@##$%%%*************$#@...@#%******",
-"****%$#@OOooO@#$%***%%$#@OooXoXoXooO@#$*%%#@OooXXoXXoXoO@#$**%%$#@OoXoXooO#$%%*******%#@OooooooO@#$***%%##OooXooO@#%%%******%$#@OooooO@#$%%*****%%$#@@@#$%********%%%#@OoooooO@$%%%**%$$@OoooooO@#$%%*******%%##@OO@@$%*********%$oX. &XoO#$%************%%%%%%%%%************************%%$$%%%%***************%$#@@@#$%******",
-"*****%%$##@@##%%%*****%%##@@@O@O@@@@$$%**%%##@@@OO@O@@@##%%***%%$$##@O@@@##%%******%*%%$#@@@O@@##%%****%%$##@@@##$%%*********%$$##@@##$$%%*******%%$###$%%**********%%$#@@O@##$%%*****%%$$@@@@@#$%%%*********%%$#@##$%%********%%$OXX .o@#$%*****************%*%**************************%%*%%******************%%$$#$$%%******",
-"******%%$$$%$%%*******%%%$$#$#$#$$$%%%%**%%%$$#$#$#$#$$%%%%*****%%$$$$$$$%%%***********%%$$$#$$%$%*****%%%$$$#$$$%%%**********%%$$$$$$%***********%%%%%%**************%%$$$$$$%%*******%%$$$$$$%$%***********%%%%$%$%%**********%%$@@@@@#%%%***********************************************************************%%%%%********",
-"*************************%*%*%*%***********%*%%%%*%*%****************%%%%*%*******%%%*%%%*%************%*%%%*%%%%*%*********%%*%%%*%%%*%************%%%%*%*********%*%%*%****%*%%*%******%*%%*%%%%*%**********%*%%%*%%%*%******%*%%%***%*%%**%******%%%*%*%************%***********%%*%*****%********%%************%**%*********",
-"******%%%%%%%***********%%%%$%$%%%********%%%$%$$$$$%%%***********%%$%%%$%%%%%**%%%%%$%$$$$$%%********%%$%$$$$$$$$%%%%***%%%%$$$$$$$$$$%$%********%%%$%$$%$%%%%**%%%%$%$%%%%%$%$%%%*****%%$%$$$%$%$%%*********%$%$$$$$%$%%****%%$%$%$%%%$%%$%%****%%%%$$$$%%%*********%%$%$%**%**%%%%%%***%%%%%%%*%%%%%$%%%*******%%%%$%%%******",
-"*****%%$####$$%%******%%$$##@###$%******%%$$#@@#@@###$%%%*******%%$$#@@####$$%%*%$##@@@@#@##$$%%****%%%$#@#@@@@@@#@$$%***%$$##@@#@@@#@###$%*****%%$$#######$$%%**%$###@###$###@###$**%%%$##@#@@@@###$$*****%%%$##@#@#@###$%*%%$###@###$######$%*%%$##@#@####%%******%%$$###$%%%%$$####$*%%$$###$%%$$#####$%*****%%$$####$$%*****",
-"**%%%$#@@OO@@#$%*****%%$#@OOOoO@#$%*****%$#@OOoooooOO@#$%%****%%%$#@OOoooOO@@#$*$#@OOoooooOO@#$%%***%$#@OoooooooooO@#$%*%$#@OooooooooooO@#$***%%$$#@OooooOO@@#$*%$#@OoOOO@@@@OOoO@#**%%##@OOooooooO@#$$****%%#@@OooooooO@#$*%$#@OOOOO@@@OOOO@#$*%%#@Oooooo@@#$%*****%$#@@OO##$%$##@OO@#*%$#@@O@@#$##@OOO@#$***%%%$#@OOOO@##%%***",
-"**%%$#OOXXXoo@#$%****%%#oX. .O#$%****%#@. & .XO@$%%***%$#@XX ..XXX#*#XX & ..O@#$%%*%#@. & .O#$*%#@. & & & & .X#***%$#@XX ..XXX#*$#XX XXX XX**%$#X.. & ..X@$****%$#X. & & XX#*%#XX XXX ..@#*%#@. oO#%%****$#XX .oO###Oo . XX*%#@.. .X@@@X.. .XX#***%$#@XX ..O@#$%**",
-"**%$OoX&&+++ .@#%%***%$@X..&&& &oO#$%***$@O &&&&&&& .Xo@$%*%%$@@oX. &&&&. ..X@*@X. &&&&&&& .Xo@#$%*$@O &&&&&&&&& o@$*$@O &&&&&&&&&& ..@*%%$#@oX. &&&&. ..X@*$@X. && X.X && .X*%%$O.. &&&&&&& ..@$***%%#O..&&&&&&&&.X@*$@X.&&&& .X. && O#*$#O. &&&&& .o#$%****$@.. &Xo@@@oX &.X*$@o ..oOO.. &&.X@**$$#OoX. & .oo@#$%*",
-"*%$#oX.&++++ .o@$%%**%$@...&&&&&Xo@$%***$@o &&&&&&&&&..XO#$*%$@OoX. &&&&& ..O*@..&&&&&&&&& .XXO#$*$@o &&&&&&&&&&&&XO#*$@o &&&&&&&&&&&&..O*%$@OoX. &&&&& ..O*#@..&&&&&...&&&&&..*%%#@..&&&&&&&&& .@#***%%#O. &&&&&&&&..@*#@..&&&&&...&&&& o@*$@o &&&&&& .X#$%****#@..&&&.XoOoX.&&&..*#@X &&..XXX..&&&..O*%$@OoX. &&&& .XXO#$*",
-"%%#@X..&++++& XO#%%*%%#@. &+++++ .O#%%**#OX+++++++++++++X@#*$#O &++++++++++&&o*O. +++++++++++++oO#*#OX+++++++++++++.o@*$OX+++++++++++++&&o*$#O &++++++++++&&o*$O. +++++...+++++ .*%%#@. &+&++++&& .O#***%%#O &&+++++++..@*#O. +++++. .++++&XO*$@o&&+++++&.X@$%****#O. +++&&XXX &+++ .*#oX+++++.XX&&+++ .O*%#O &++++&+++++oO#*",
-"*$#O. &&& ++.oO$%**%$@. &+++++&.o@$%**$OX&++++++++++++XO#*$@o &&++&&&&&+++&&o*@. +++++&&++++++Xo@*$OX&++++++++++++.X@*$OX&+++++++++++++&o*$@o &&+++&&&++++&&o*#@. +++++...+++++ .*%%$@.. &+++++& .#$***%%$@. &&++++++ .@*$@. +++++. .++++&o@*$@o&&&+++&&.X#%%****#O. +++&&X.X&&+++ .*#o.+++++...&&+++ .O*$@o &&+++&&+++++Xo@*",
-"%$@o &&&& ++.Xo#%*%%$@OX.+++++&&X@$%**$@o. ++.....+++.X@*#OX+++ .X.X.&&&&&o*@o.+++ ..X..+++ .O*$#o. ++.....+++XX@*$@o. ++.....&&&&&X*#OX+++ .X.X.&&&&&o*$@oX+++ .... +++.o**%$#@oXX.+++..Xo@#$****%$#@oXX.++ .oO#*$@XX+++ +++++.Xo@#*%#@oX.++..XO@$$*****#O..+++++...+++++..*#oX+++++. ..+++.XO*#OX+++ ..X..+++ .O*",
-"$$OX+++ & ++ ..@#***%#Oo.&++++&&XO#%%*%#O. ++.....+++.X@*#OX+++ .XXoXX &&&&o*#oX+++ .XXXX.+++ .O*$#O. ++.....+++.o@*%#O.. ++..... &&O*#OX+++ .XXXXX&&&&&o*$@oX+++ .X. +++Xo***%$#@oX.+++.XO@#$%****%%$#OoX.++ .o@$*$@oX+++ +++++XXO#$*%$@OX.++..XO#%%*****#@X.+++++...+++++.X*#oX+++++ ..+++.XO*#OX+++ .XXXX.+++ .O*",
-"%#OX+++&&+++++ ..@$**%%#@XX&&++++&Xo@$%*$#O.. ++.....+++.X@*@oX+++ .oO@Oo. & O*#oX&++ .XooXX+++& o*$#@.. ++.....+++Xo#*$#O. ++.X...& & O*@oX+++ .oOOoX &&&O*%#XX+++ ... +++Xo****%$#Oo.+++XXO#%%%*****%%$#@XX++ ..o#$*%#oX+++ +++++XO@$%**%$@XX++.Xo#$%%*****#OX.+++++...+++++.X*#oX+++++& &..+++.X@*@oX+++ .oOoXX+++& o*",
-"%#OX+++&&+++++ ..O#**%%#OX.++ ++.XO$%*%#@.. ++&&&+++++.XO*@X.+++.XO@###@OoOO#*#oX+++ .oO@oX&&&&&o*%#O.. ++.. ++..Xo@$*%#@.. ++...++.XXo@@*@X.+++.XoO@OoX.XXX@*%#OX+++&&&&&+++++Xo*****%$@oX+++XX@$%*******%%%$@oX++ ..O#%*$#oX++++++++.XX@$%%**%$@oX++.Xo#$*%*****$OX.+++++ . +++++.X*#OX+++&&+++..+++.X@*@X.+++.XO@@OX&&&&&o*",
-"%#oX++++++++++ ..@#**%$#XX.++ ++.Xo#%*%#@.. ++&&&+++++.XO*@X.+++.X@#%$$###@#$*#oX+++..O@@OX &&&&o*%#@.. ++. .++..X@#$*%#@.. ++...++XXo@#$*@X.+++.XO@OoXX..Xo@*%@oX+++&&&&&+&+++XO*****%$@oX+++Xo#$%*****%%%%%$#oX++ ..@#%*%#oX++++++++.XO@$%***%%#oX++.XO#$%******$OX.+++++ . +++++.X*#oX+++&&+++..+++.X@*@X.+++Xo@##OX &&&&o*",
-"%#OX++++++++++ ..O#**%$@X. ++...++ ..@$*%#@.. ++++++++++..O*@X.+++Xo@$%%%$$$$$%*#OX+++..O@#@o &&&X*%#@.. +++++++.XO@$%*%#@.. +++++++XX@#$%*@X.+++XXO@O. ..@*%#OX+++++&+++++++Xo******%@oX+++Xo@%%***%%%%$$%$#oX++ ..@#%*%#OX++++++++..o#$%***%%@oX++.XO#$%$%%***$@X.+++&&+++&&+++.X*#oX+++ +++ +++.X@*@X.+++XX@##@o &&&X*",
-"%#oX++++++++++ ..O#*%$#O.. ++...++ ..O#*%#@.. ++++++++++ .o*@X.+++Xo@$%%%%%%%%%*#oX+++..O##@o &&&X*%#@.. +++++++.XO@$%*%#@.. +++++++XO@$%%*@X.+++.XOOo &&& ..O*%#oX+++++++++++++Xo*****%$#oX+++Xo#$****%$##@###@oX++ ..@#%*%#oX++++++++..o@$%%**%%#oX++.Xo#$#$$$%%*$OX.+++&&+++&&+++.X*#oX+++ +++ +++.X@*@X.+++Xo@$#@o &&&o*",
-"%#OX+++&&+++++&& o@*%$@o. ++...++ .o@*%#O.. ++++++++++ .o*@X.+++.o@$%%%$$$$%%*#OX+++..O@#@o. &&&X*%#@.. +++++++.XoO##*%#@.. +++++++Xo#%%**@X.+++XXooX &&&&..O*%#oX+++++++&+++++Xo******$@oX+++Xo@%%***%#@OoOO@@oX++ ..@#%*%#oX++++++++ .XO#$%**%%#oX++.Xo@@@@##$%*$@X.+++&&+++&&+++.X*#OX+++ +++ +++.X@*@X.+++.o@##@X &&&X*",
-"%#OX+++&&+++++&& O#*%#OX&++++++++++&&o@*%$@.. ++.....&&&&&o*@X.+++.XO#$$$##@@#$*#oX+++..O@@Oo &&&o*%#@.. ++ ++...XX#*%#@. ++ ++XO#%***@X.+++..ooX+++++& o*%#oX+++ ... +++XO*****%%@o.+++Xo@$%***#OX&&&oOOXX++...@#%*%#oX+++& &&&++.XO#$***$@oX++.XXOO...@#$*#@X.+++..+++..+++.X*#oX+++ &&&+++++.X@*@X.+++.XO@@OX&&&&&o*",
-"$#OX+++ &&&++&& o@*%#OX++++++++++++&Xo*%#O.. ++..X..&&&&&o*#X.+++.Xo@#@@OoOO@#*#oX+++..oOOoX & &&o*%#O.. ++ ++ ....O*%#O.. ++ ++o@$%***#X.+++.XXXX+++++&&o*%#oX+++ .X.. +++Xo*****%$@oX+++.o@$%***#oX++&XooX.++ ..@$%*%#oX+++ &&&++..o@$*%%$@oX++..XXo...O@$*$OX.+++..&&&..+++.X*#OX+++& &&&+++++.XO*#X.+++.XoOOoX&&&&&o*",
-"%#OX+++ &&&&++&& O#*$@X.+++& &+++.X*$#O. +&...X.&&&&&X*#OX+++& XoOOo @*@oX+++ .XooX.+++..O*%#O. ++... .&& & o*$#O.. ++....XO@$%***#OX&++& .XX..&&&&&X*$@O.+++ ..X. +++Xo***%$$#OX.+++.XO#$$%*@X.+++..XX.++ .X@#%*%@oX+++& ...++& o@**%#OX.++...X.+++.o#*$OX.+++..X.X..+++.X*#oX+++ ...+++++.X@*#OX+++& XoXX.+++..o*",
-"%$@o&&&&&...& ..X@#*$@X.+++ . +++.X*$#o.. ++..X..&&&&&o*#OX+++&&XXXXX&&&& O*@o.+++ .XX..+++..@*$#o.. ++.... &&&&&o*$#o. ++....XO#%%***#OX&++&&.....&&&&&o*$@oX+++ ..X.. +++.o***%$@OoX.+++.XXO#$%*@o.+++.....++...#$%*$@o.+++ ...++&& oO*%$@OX.++.....+++.o@*#OX.+++..XXX..+++..*#oX+++ ...+++++.XO*#OX+++&&.XX..+++.XO*",
-"%$#o &&&&... ..X@$*#OX.+++& . &+++..*$@o. +&.....&&&&&o*#@o&++&&.....&&&& O*@o.+++ ......+++.X@*#@o. ++.....&&&+&X*$@o. ++..X.o@#%****$@X&++& .....&&&&&o*$Oo.+++ ..X. +++XX**%$#@XX..+++..XoO#$*#o.+++.....++..X#$%*#@o.+++ X..++&&&Xo*$#OXX.++.....+++.X#*#oX.+++.XXXXX.+++.X*#oX+++ ....+++++.X@*#@o&++& .....+++.X@*",
-"%%#OX. +++++++.XX#$*#O &+++++ +++++& *#oX+++++++++++++.XO*%#O...+++++++++&.X@*O +++++++++++&&Xo#*#OX+++++++++++++&&o*#OX++++++++..#$%****$#OX. ++++++++++.X@*#O +++++...+++++& *%%$@ &+++++++&& @$*#Oo&&++++++++Xo@#%%*#O &+++++..X. +++& *$Oo+++++++++++++XX#*#O &+++&&XoX &+++& *#o.+++++XX.&&+++.X@*%#O...+++++++&& XO#*",
-"%%$@X..+++++++.Xo#%*#O &+++++...+++++& *$oX+++++++++++++Xo@*%##XX.++++++++&&Xo@*@.&++++++++++&&&O@$*#oX+++++++++++++&&O*$OX++++++++..@$%%***%$@XX.++++++++&&Xo@*#@ &+++++...+++++& **%#@ &&+++++++&& @#*$@o&&&++++++&oO#%%**#@.&+++++.XX..+++ *$@X+++++++++++++Xo#*#O &+++& ooo&&+++& *#OX+++++XXX &+++Xo#*%##XX.+++++++& .O@$*",
-"*%$#oX.&++++++.XO$%*$@oX.....XXX.....XX*$@OX...........Xo@#**%##OoXX.....XXoO#$*@Oo..........XXO@#%*$@OX............XX@*$#OX......Xo@#%%****%%##OoXX.....XXoO@$*$@oX.....oXX.....Xo*%%$#oX.........Xo#$*%#@OXX.....XoO#$%***$@oX....XooOoXX.XXo*$#OX............O@$*$@oX...XXOOOXX..XXX*$@oX...XXOooX..Xo@#*%%$@OoXX....XXoO@$%*",
-"**%$#@OoX...XXO@#$%*$#OoXXXXXOOOXXXXXoO*%#@XXXXXXXXXXXoo@#%*%%%$#@OOXXXXXoO@#$%*$@OXXXXX.XXXoo@@#$%*%#OoXX.X.X.XXXXXoO#*%#@oXXX.XXXO#$%******%%$#@OoXXXXXoO@#$%*$#OoXXXXXOOOoXXXXoO**%$#@ooXX.X..XXoO#$*%%##OoXX.X.OO#$%%***$#OoXXXXX@##@OoXXoO*%#@oXXX.X.XX.XXo@#%*$#OoXXXoo##@OoXXXoO*%#OoXXXX@@@@OoXX@#%**%%$#@OOXXXXXO@#$%%*",
-"***%$#@OOoXoOO#$$%**%$@@OoOOO###OOoOO@@*%$$OOooXoOoOOO@@$%%***%%%$#@OOoOO##$$%%*%$#OooXooooOO##$%*%**%#OOooooooooOOO@@$*%$#OOooooO@#$%%******%%%%$##OooOO@##$%%*%$#OOoOOO###OoooO@#***%$#@OoooooooO@#%%**%%$##oooXo##$%%****%$#OOooO@#$$$#@@@@#*%%#OOoooooooooOO#$%*%$@@OoO@@$$$@@OO@@#*%$#OOoO@#$$##O@@#$%**%*%%$#@OOOO@##$%%**",
-"****%%$###@###$%%****%$$####$$$$$####$%**%%$######$##$$$%%******%%%$$###$$$%%%**%%$$#######$$%%%%***%%%$$#########$$$%%***%$######$%%%**********%%%$$#$#$$%%%***%%%$####$$$$$$$##$$****%%$#$###@##$$$%****%%%$$####$$%******%%%$#$##$$%%%%$$$$%**%%$###########$%%**%%$$#$#$$$%%%$$$$$%**%%$$$$$$%%%$$$$%%%*****%%%$$$#$$%%%****",
-"******%%$$$$%%%%******%%%%%%%%%%%%%%%%%***%%%%%%%%%%%%%%*%********%%%%%%%%%*******%%%%$%%%%%%%%*******%%%%%$%$%%%%$%%*****%%%%%%%%%%*************%*%%%%%%%%******%%%%%%%%%%%%%%%%%%****%*%%%%$%$$%%%%******%%%%%%%%%%********%%%%%%%%%**%*%%%%****%%%%$%$$%$%%%%%*****%%%%%%%*%%%%%%%%%***%%%$%%%*%*%%%%**********%%%%%%%%******",
-"****%***%*%**********************************%**%***%*****************%**************%**%*%*%************%*********%***************************%**********%**********%*%********%*********%**********************%*%*%***********%%%%%$%%********%%%%$%%******************%%%%%%%%**************%%%%%***************************",
-"**%%%%%$%$%%%%%%**********%%$%%%%%%*******%%%%%$%$%%%%***********%%%%$%$%$%%%******%%%%$%%$%%$%%%%****%%%%%%%*%%%%%%%%****%%%%%%%*%*%%%%%%%****%%$%%%%%*%%%%%%%***%%%%%%%%%%%$%%%%%***%%%%%%%%%%%$%$%%%*****%%%$%%$%%$%%%%*******%%#####$$%*****%%$####$%%**************%%%$#@###%%***********%%$$$$%%%*************************",
-"%%$$#####@####$$%******%%%$$####$$%%****%%$$########$$$%*******%%$$########$%%%**%%%$###@##@##@#$$%**%$$###$$$$$####$$%*%%$$###$$$%$$####$%*%%$$###$$%%$$$###$%*%%$$#####$$#$####$$*%%$$#####$$#$####$$***%%$$#####@####$$%****%%$#@OOOO##$*****%$#@OO@@$%%*************%$#@@OOO@#$%*********%%$#@@@#$%*************************",
-"%$#@OOooOoOoO@@#$%%***%%$#@OOOoOO@#$%%**%$#@OOoooooOO@#$%%****%%$#@OOOooOOO@#$%*%%$#@OoOooOooOOO@#$*%$#@OOO@@@#@@OOO@#$*%$#@OOO@@###@@OO@O#*%$#@@OO@@###@@OO@O#*%$#@OOOOO@@@OOOOO@#*%$#@OOOOO@@@OOOOO@#**%%$#@OOooOooOoO@#$****%%#@... o@#%%***%$O &&Xo@$%************%%#@o. ...O#%%********%$#@...O#$%************************",
-"$#OoXXXXX.XXXXoO@$%*%%%$#OOXXXXXXoO@$$%*$@OoXXXXXXXXoo@#$%%*%*%#@OoXXXXXXXXoO#$*%$@OoXXXXX.XX.XXoO#*$@OoXXXXoOooXXXXoO@*$@OoXXXXOO@@ooXXXoO*$@OoXXXXoOOOoXXXXoO*$@OoXXXXXoooXXXXXoO*$@OoXXXXXoooXXXXXoO**%#@OoXXXXXXX.XXoO#****%$@o. Xo@$****$#O &&.XO#$************%$OoX & .o@$%*******%%#Oo...o@#$************************",
-"$OX++++++++++&& O@$**%#@oX&&+++++..X@$%*#@ &++++++++&&XoO$%**$$@oX++++++++++XO#*%#OX+++++++++++++Xo*$OX+++++.XX&&+++& O*#@ &+++&&ooo&&+++ *#@ &+++&&Xoo&&+++ *#@ &+++++...+++++& *#@ &+++++...+++++& *%%#O&&&++++++++++XO***%%#OX++++&.o@$%%**%#O. &&o@$%**********%%$oX.+++++X@#%******%%$@X.+++.X@$%***********************",
-"#oX++++++++++&&&oO#*%$@oX.&&+++++ ..O@$*@O &++++++++&&.Xo@$*%$@oX.++++++++++Xo#*%#oX+++++++++++++.o*#oX+++++...&&+++& O*#O &+++&&XXX&&+++& *#o &+++&&X.X&&+++& *#O &+++++...+++++& *#O &+++++...+++++& *%$@o&&+++++++++++.o***%%#OX++++&XX@$%***%#O. &&X@#$**********%%$oX.+++++XO#%%*****%%#O..+++.XO#%%**********************",
-"#oX++++++++++&&&.o@*$#OX..&++++++ .oO#*#O &+++++++++&..XO#*%#@X..++++++++++.X@*$@X.+++++++++++++XX*@o.+++++...&++++&&O*@O&&+++&&XXX&&+++&&*#O &++++&...+++++& *@O &+++++ . +++++& *@O &+++++ . +++++&&*%#@o&&+++++++++++.o***%%@oX+++++Xo@$%%**%$@.. &&Xo@$%%*********%$OX.+++++Xo@%******%$@O..+++..o#$%**********************",
-"$OX &&++ +++& O*$@o&&+&& +++.o@*#OX.+++&& &&+&&o@*$@o&&&++ +++.o@*$@X.+++ +++ +++.X*#oX+++& XXX..+++..O*#O..+++..ooX..+++..*#o..+++ .& &. +++..*#OX.+++&&...&&+++.X*#OX.+++&&...&&+++.X*%#OX&++&& &&+++XX***%%#o.+++.XX@$%****%$#OXX++.XO#$*********%%%#@oX.+++Xo#$*****%%$@o&&+++&&o@$%%*********************",
-"$@o. ++ ....+++&&o*#OX+++&&... +++.XO*#@X.+++&& . &&++&X@*$@o&&+++ +++.X#*$@X.+++ +++ +++.X*#oX+++ XoXX.+++..O*#OX.+++..ooXX.+++.X*#O..+++ .&&& .+++..*$@X.+++&&...&&+++.X*$@X.+++&&...&&+++.X*%$@o&++&& &&+++Xo****$#oX+++.XO#$%%****%$@oX++..X@$%%*********%$#OX.+++Xo#%%*****$#OX&&+++&&XO#%**********************",
-"%#O. ++..X.X&&&&&o*#o.+++ .XXXX.+++& O*$@oX+++ ... +++XO*#@X+++&&.....&&&XX#*$#X.+++..+++..+++.o*#oX+++ .XOoX.+++.XO*$@o.+++..oOo..+++XX*#@X.+++ +++ +++.X*%#OX. ++++&++ .X@*%#OX. ++. .++ .XO*%$@o && .. .++ .X@****$#oX+++XX@$%******%%#OX && .O#$***********%#@o.+++Xo#$****%%$OX.++...++.oO$%*********************",
-"$#O.. ++.XXX. &&&X*@o.+++..oooXX+++&&o*$#oX+++ .... ++&XO*$Oo&++& .....&&&Xo#*$#XX+++..+++..+++.o*#oX+++..oOOoX+++.XO*$#OX+++..ooo..+++Xo*#OX.+++ +++ +++.X*%$#O.. ++&&&++ ..O@*%$#O.. ++ . ++ ..O@*%$@O &. .. ++ ..O#***%%#oX+++Xo@$%*******%$#o &&&&XO#%%*********%$@oX+++Xo@%%****%$Oo.++ ..++XX@$%*********************",
-"%#@.. ++.XXX. &&&&o*@X.+++..O@@oX+++&&o*%#oX+++ ... +++o@*$@o&++ &.....&&&Xo#*$#oX+++..+++..+++Xo*#OX+++ .O@OoX+++.X@*%#OX&++..ooo..+++XO*$@X.+++ +++ +++.X*%%#@X. ++&&&++ .X@#*%%#@X. ++. .++ .X@$**%#@.. . .. ++ .XO$***%$#oX+++Xo@%%*******%%#@X.+++XO@%%**********$#oX+++Xo@%%***%%#OXX++...++.oO$%*********************",
-"%#@. ++...X.&&&+&X*@X.+++.oO##@X &&&X*$#oX+++&& &++&&&o@*$#O.. +++++ &...o@$*%$#oX....+++....XO@*#oX+++..o@@XX+++.X@*%#@X&&&& XXX &+&XO*$OX.+++&&++++++++.X**%$#Oo. &+++&&XXO#$**%%#OoX+++++++Xo@#$*%%$#@oXX.&+&++XXO#$***%%@oX+++Xo#$*********%$@X.+++.o@$%**********$@oX+++Xo#$****%%$OX. XXX XXO$%*********************",
-"%#@.. ++.....&&&&&o*@X.+++Xo@##@o &&&X*%#OX+++&&&&&++&& O@*%#OX. +++++&&...X@#*%%##ooXX.+++.XXXo@$*#OX+++ .O@OoX+++.XO*%$@o &&&&.X. +&&o@*$@X.+++&&++++++++.X***%$@oX &+++& Xo@$%**%%$#OX+++++++XO#$%***%$#@oX.&++++Xo#$%***%%@oX+++Xo@%%********%$#OX&&& .O#%%********%%#o.+++Xo@%%****%$OOX..ooo..XoO$%*********************",
-"%#@.. ++++++++++.XO*#X.+++.Xo@OOX &&&&o*$#oX++++++++++..oO#*%#@oX...&&&+++++XO#**%%$#@oX.+++.Xo@#$%*#oX+++..o@@XX+++.X@*%%#O.. +&.X.++ .O#*$@X.+++++& &+++++.X**%%$@oX&&+++&&Xo@$%****%$@o..+++.Xo@$%****%$#Oo. +++..XO@#%****$@oX+++.O@$**********%#@X&&& o@$*********%$#oX+++Xo#$*****%%$#@@@@#@@@@#$%%*********************",
-"%#@.. ++++++++++.X@*@o.+++..oooXX+++& o*%#oX++++++++++.Xo@$*%#@oXX..&&&+++++XO#**%%%$#Oo.+++XX@#$%%*#OX+++..OOOoX+++.X@*%%#@.. ++...++ ..O#*$@X.+++++ & +++++.X**%$#@o.&&+++&&XX@#$****%$#OX.+++.XO#$%****%%#OX +++.XXo@#$***%%#oX+++Xo#$**********%$@o&&+ o@$%%********$#oX+++Xo@%%*****%%%$$$$$$$$$%%%*******%*%%*%*%%%*%***",
-"%#O.. +++++++++&Xo#*#XX+++...XX..+++& o*$#oX++++++++++.Xo@#*$#OXX...&&&+++++Xo#****%%#@o.+++.o@#%%**#OX+++..oOoX.+++.X@**%$#X..++...++..X@$*$@o.+++++ &+++++.X*%%$@oX.&&+++&&.Xo@$****%%#OX.+++XXO#%****%%$@OX &+++..XXoO#****$@oX+++Xo@%%**********%$@XX.++Xo@#%%******%%@oX+++Xo#$*******%%%$%%%%%%%%%****%%%$$%$%$%$%%$%%%%*",
-"%#O. ++ ..XoO#$*#OX&&&++ &&+++.XO*%@oX+++ . ++ .O@*#OX&&+.......+++.X@****%%#Oo.+++.X@#%%**#OX+++ .XXXX.+++.X@**%%#OXX++.. ++.oO#%*%#oX+++++ .+++++XO*%$@O.. ++...++ .O@****%$#OX.+++.X@#%%***%$#oX.++&&&..+&&XO****%#oX+++.o@$%***********%$@oX++..o#$%*****%%$@o.+++Xo@%%**********%%*%%*******%%$$####@###@@#@#$%*",
-"$@o. ++ ..XOO#$%*$@X&&&++ &&&&+++.XO*$@o.+++ ...++ .o@*#oX+++.......+++.X@****%$@OX.+++.XO#$%**#@X+++ ..XX..+++.X@***%$#oX++ ++XO@$%*$#oX+++++. +++++Xo*$#OX &++. ++& XO****%$@oX.+++.XO#$%**%%#@X..++&&&..++&Xo***%%@oX+++XX@#%%*********%%$@oX++..X@#%*****%%#Oo.+++Xo#$***********************$$@@OooOoOoOooOo@@#*",
-"$@o&&+++&&&..O@#$%%*$#O &&++&&&&&+++.XO*$O..+++&&...&&+++.X*@X.+++&& &&&&+++.o@***%%#OX +++ .XO#%%*$@o.&&++&& &&+++XO#***%%#OX &+++&&XO#%%*%#OX+++++...+++++Xo*$@X.+++++ ..+++++..****%#OX &+++ .XO#%%*%%#o &&++&&&& +++.X***%%#o.+++.Xo#$%***********%$@X&+ ..O@$*****%$#OX.+++Xo#$***********************$oo... . . . .X@*",
-"$@X&&+++&&&.XO#$%%**%#Oo..+++++++ ..@*#@..+++&&.X.&&+++.X*#X.+++&&& &&&+++XX#****$@OX&&+++ XO@$%*%#O. ++&&&&&++&XO#***%%#@X &+++&&XO#%**$#OX+++++...+++++XO*#O. +++++ . +++++..**%%$@oX&&+++ XO@$%*%$@o&&+++&&&&&+++.X****$#oX+++& XO#%%**********%$@O. ++&o@$****%%#OX &+++Xo#%%**********************#XX && &&&& .O*",
-"#@X&&+++&&&.XO$%%***%$@oX.+++++++ ..O*#@..+++&&.XX&&+++.X*@o.+++&&&&&&&+++Xo#**%%$@oX &+++& Xo@$%*%#@.. ++&&&&&++&o@#****%$#o &+++& o@$%**%#@X&++++.X.++++&X@*#O..+++++...+++++..***%$@oX&&+++& XX@$%*%$@o&&+++&&&&&+++.o***%%#oX+++&&Xo@$%**********%%#O..+++XO#****%$@oX &+++Xo@%***********************@X. &&&&&& &&&& .o*",
-"$OX&+++&+++.X@$%****%$@X. ++++++++++ .@*#@. ++++&XXXX.+++..*#oX&&&&++++++ .o@#***%%@XX&+++++&.XO$%*%%#@XX&&+++++ ..O#$****%%#O..+++..O#%%**%$@o && XXX&&& o@*#@. +++++...+++++..**%%#OX.+++++++XXO$%*%%#O &+++++++++&Xo***%%#OX+++&&.XO$%%**********%$@XX+++.o#***%%$Oo.&&+++XO#%%**********************@..++++++++++++++&o*",
-"$@o&&&&&&&&.X#$%****%$#X..++++++++++..O*$#..&&&&&oOOXX&&&..*#Oo &&&+++&&..XO#%***%$#OX&&+++&&XoO$%**%$#@X&&++++&..X@$%*****%$@X.&&&.X@$%%***%#@. . ooo. .@#*$@X.++++&X.X&&++&..***%$OoX&&++++&XX@$%*%%#@. ++++++++&&XO****%#OX&++++.Xo$%***********%$#OX+++Xo#***%%#oX.&++++Xo#%%**********************@. &+++++++++++++&o*",
-"$#@ooXXXXooO@$%******$#X..++++++++++..@*$#@OoXXoO@@@@OoooO@*%#@OooXXXXXXXoO@#$%***%%$#OooXXXXoO@$%%**%%$#@ooXXXXooO@#%%*****%%#@OoooO@#%%***%%$#@OoOO@@@OOOO@#$*$#@ooXXXooOoooXXoO@***%%$@OoXXXXXoO##%%**%$#@ooXXXXXXXXooO#***%%#@o&&&+&.XO#%%***********%#Oo+++XO#***%%$oX.&+++&X@#%***********************@X.&&+++++++++++&&O*",
-"%$$@@@OOO@@#$%%******%$#Oo...X.....Xo@#*%%#@@@O@@#$$##@@@#$*%$$@@@@@OO@O@@#$%%%****%%$#@@OOO@@#$$*****%%%##@@OOO@##$$%******%%%##@@@##$%*****%%$#####$$$##@##$%*%$##@@O@@##@@@O@@@#****%%$#@@OOOO@#$%%***%%$##@@OOOoOOO@@#$****%$#o &&&&XXO$%%***********%$#OXXXO#$***%%$OoX&&&&&O@$%***********************#@OoXXXXXXXXXXXXoO@*",
-"*%%$#$#$#$$$%%*******%%##OXXooXX.XXXO#$**%%$$$#$$%%%%%$$$$%**%%%$$##$##$$$$%%*******%%%$$##$#$%%*%******%%$$$#$#$$$%**********%%$$$$$%%*******%%%$$$%%$%%$%$%%%**%%$$#$#$$$$$$##$$%***%*%%$$$##$$$$%%*****%%%$#$######$#$%%*****%$@OooooO##%%*************%##ooo##%****%$#@OoXXoO@#%%***********************$##@@OOOoOoOOoOOO##*",
-"*%*%%%%%%%%%*********%%%$#Oo@@OoooOO#$%***%%%%%%%%%*%*%%%%****%%%%%%%%%%%%**%*********%%%%%%%%%%********%*%%%%%%%%*%************%%%%***************%%**%%%*%*****%%%%%%%%%%%%%%%%%********%%%%%%%%%*********%*%%%%%%$%%%%*******%%$#@@O@#$$%**************%%$@@@$%%******$$#@@@O##%%************************%%$$##########$#$$%*",
-"******************************************%%%%%%******************************************%%%%%%********************************%%%%%%%%%%***********************%%%%%%%*******************%%%%%%****************%*%%%********%%%%%%*****************%%%%%%%%*******************************************************************",
-"*******%%%%%%****************************%$$$#$$%%***************************************%%$#$$$%%*****************************%%$$#####$%%**********************%$$##$$%%****************%%$$$%$%**************%%$$$$%%****%%%$#$$$%**************%%%$$###$%%******************************************************************",
-"******%%$##$$%**************************%$#@O@@#$$%************************************%%$#@@@@#$%%**************************%%$$@@OOoOO@#$*********************%$#@@@@@$%%**************%%#@@@@#$%************%$#@@@@$$%***%$#@@O@#$%%************%$$@@OO@@#$%*****************************************************************",
-"*****%$$@@@@#$%*************************$#OooXXO@$%%***********************************%$#@ooXoO@$%**************************%%#@OXXXXXXoO#*********************$#OoXXoO@$%%************%%#@OooO@#%%**********%%#@oooo@#%%**$#@ooXoO@$%**********%%%#@OoXXXo@#%%****************************************************************",
-"****%%$Oo...@#$%************************$@.&+++.o@$%**********************************%%#OX++&&&O@$*************************%%#@o&&&+++++oO*********************$@. +++.X#$%************%$@..+++o@$%**********%$@O+++..@$%**$Oo+++& O#$%**********%$OX.++++&o@$%****************************************************************",
-"*****$@oX. .oO#%%*********%**%%*********#O &+++.X@#%%****************%%*%%************%$@oX++&&&o@$********%***%*%*********%%$@oX&&++++++oO*********%*%*%*%*****#@ &+++.X@#%%**********%%#@..+++o@#%%********%%#@X+++..@#%%*$OX+++&&o@$%%%********%$oX.+++++XO#%%*****%***%*%***%**********%*%%*%*%%**************%***%*********",
-"***%%$@X.+++.o@$%*******%%%%%%$%%%******#@X.+++..o@$$%%*********%%%%%$%$%%%%%*******%%%$@OX &+++XO$******%*%%$%%%%%%*******%$#O. +++ ..o@******%%%$%$%$%$%%%**#@X.+++ .o@$$%%********%%#O..+++XO#%*********%#@oX+++ .O#%%*$@o &+&XO#$%%%%*%***%*$#@X..+++XO#%%****%%%%$%$%$$%$%%%******%%%%%%%%%%$%%*********%*%$$%%$%%%*****",
-"****%$@..+++.X@$%******%%$$#####$$%%****$@X.+++ .oO@#$$$%%****%%%$####@#@##$%%%***%%%$##OXX &+++XO#*****%%$###@###$%%%****%$#@o +++ ...O#***%%%$$##@######$$%*#@X.+++ .XO@#$%%%******%$@O. +++XO#%*******%%$#@XX+++..O#$**$@o.& ++Xo@@###%%*****%%$@o. +++Xo@%****%%$#####@######$%%***%$$#########$$%%*****%%%$$##@###$%%%***",
-"****%$@X.+++.Xo#%%****%%##@OOoOO@#$$%***$@o.+++ XXoO@@#$%%*%*%$#@@OOoOoOOO@#$%**%%$#@@ooX. &+++XO#**%%%$#@@OOoOOO@#$%%***%$@oX &+++ .XO#**%%$#@@OOOooooOO@#$*$@o.&++ XXoO@@$%%****%%$@o. +++XO#%******%%$#OoX.+++ .O#$**%@O. &++XXoO@@@#$%%****%$#O..+++Xo#$%***$#@@OoooOoooOO@@$$**%$#@@OOOOOOO@@#$$%***%%$#@@OOOOO@@#$%%**",
-"****%$#oX&&&&&O#$****%%#OoX.....Xo@#%%**$#oX+++&& ..OO##%*%$$@@o... . ....@#%*%$$@OO.. &&+++Xo#***$$@OO.... ..oO@#%*%%$@X..&&+++&& ..O#*%$$@Oo... ... ..Xo#*$#oX+++&& ...O@#$%***%$@oX && XO#$******%$#X.. &&& .o@$%*%#O.. ++.XX....X#$%*****%$@o.+++Xo#%****#oX.... ... ..O@#%*$#oX....X.....O@#$%*%$$@OO... ..oO@#%%*",
-"*****%$@o &&& o#$%**%%#@oX. & .Xo@$$**%#oX+++&& & ..XXO@$*%$@OXX.. & ..oO$*%$@OXX.. & &&+++Xo#*%%#@OXX..& XXO@$*%%#O.. +++++& ..O#*%$@OoX.. & .X@*%#oX+++ && &..Xo@#$***%$@oX && XO$%*****%%#@X..& && .o@$%*%#O.. ++... ..XO#%*****%$@oX+++Xo@$****@X... & Xo@$*#@X. .. & ..XO@#$*%$@OXX.. XXO@$$*",
-"*****%%#@OXX O#%%**%%#O&&&+++++++Xo@$%*$#oX++++++++++&&&O@*$@O&&&++++++++++Xo#*$@O&&&++++++++++XO#**$#O&&&+++++++&&&O@**$$O &&+++++++&& O#*$@O&&&++++++++++ O*$#oX++++++++++ ..@$**%%$oX.+++++XO#$%*****$#O &&+++++++XO#%*%$@.. ++ ++&& O#%*****%%@oX+++Xo#%%***O. ++++++++++++& O#*#O ++++++++++ ..@#*$@O&&&+++++++&&&o#$*",
-"*****%%%#@Oo..O#%%**%$#o&&&+++++++.XO$$*%#OX+++++++++++&&o@*$@o&&+++++++++++.X@*$@o&&+++++++++++Xo#*%#@o&&+++++++++&&X@*%%#O &&+++++++&& O#*$@o&&+++++++++++& O*%#OX++++++++++ .O#**%%#oX.+++++Xo#$*****%%#O &&+++++++XO#%*%#@.. ++ ++&& O#$******$#oX+++Xo@%%***O &++++++++++++&&o@*#O &++++++++++ .O#*$@o&&+++++++++&&o@$*",
-"*******%%$#@.X#$%***%$@o&&++++++++.Xo#%*%#oX+++++++++++&&XO*#OX&&+++++++++++.X@*#OX&++++++++++++XO#*%#oX&++++++++++&&XO*%%#@ &+++++++& @#*#OX&++++++++++++ O*%#oX++++++++++& .o@***%$OX.+++++Xo#%*****%%#@. &+++++++XO#%*%#@.. ++ &++&& @#%*****%$@oX+++Xo#$****O.&++++++++++++&&o@*#O.&++++++++++& o@*#OX&+++++++++++&Xo#*",
-"*******%%%$$###%%****$@o.. &&&&&++ .X@$*%#oX+++++... +++.o*@o.+++ .... +++.o@*@o.+++ ...+++++Xo#*%@o.+++ ...& +++.o**%$#oX. &+++.XXoO#$*@XX+++ ...&++++.oO*%#oX+++++...&&+++o@***%%$@oX.+++Xo@$******%$#@ooXX...++Xo#$*%#@.. +++++& .oO@$%******%@oX+++Xo@%%***@X.+++&&&&&&&&&&&X@*#@X.++++&... &++&o@*#XX+++ ... +++.o@*",
-"*********%%%$$%%****%$@o...&&&&&++ ..@$*%#oX++++&.X. +++.X*@o.+++ .XXX. +++Xo#*@o.+++ ..X.&&+++XO#*$@o.+++ &... &+++.X***$$@oX &++&.XoO#$%*#X.+++ ..X.++++&.o@*%#oX++++&... &+++XO****%$@OX.+++Xo#$%*****%%$#@Ooo...++Xo#%*%#@.. +++++ Xo@#%%*****%$#oX+++.O@$****@oX+++&&&&&&&&&&&oO*$@oX++++&.X. &+++XO*@X.+++ .XXX +++.o@*",
-"**********%*%%*%****%$Oo&+++++++++ ..@#*%#OX+++ XXX..+++.X*@X.+++.XXoooX...XO#*@X.+++..XX.. +++Xo#*$@X.+++++++++++++.X***%%#OX&&&&&Xo@#$%%*@X.+++.XXX.. +++Xo@*%#OX+++ XXX. +++XO****%%$Oo.+++Xo@%*******%%%$##OXX.++Xo#%*%#@.. +++++ .XO#$%*******$@oX+++Xo#$****@oX+++ &&&&&&&&&XO*$#oX+++ ..XX +++XO*@X.+++.XXXXX.+++.X@*",
-"********************%#OX&+++++++++ ..@#*$#oX+++ ..XXX.+++.X*@X.+++.Xo@OOo...o@$*@X.+++.XXXX +++XO#*$@X.+++++++++++++.X***%%#Oo &&&&XO@$%%**@X.+++.XXXX +++Xo#*%#oX+++ .XXX. +++XO*****%$@oX+++Xo@$%********%%$$#XX.++Xo#$*%#@. +++++..oO#%%%*****%%@o.+++Xo@$%***#oX+++& &&&&&&&&&XO*%#oX+++ .XXX. +++XO*@X.+++.XoooX.+++.X@*",
-"********************%#oX++++++++++ ..O#*%#oX+++ XXX..+++.X*@X.+++.XoO@OOX.XO@#*@X.+++..XXX +++Xo#*$OX.+++++++++++++.o***%%$OX&&&&&Xo#$%%**#XX+++& ...+++++XO#*%#oX+++ .XXX. +++Xo***%%%#@X.+++.o@$%%*********%%#OX.++Xo#%*%#O.. +++++..XO@$%*****%%$@oX+++.o@$%%**#oX+++ &&&&&&&&&X@*%#oX+++ .XXX. +++Xo*@X.+++.XXoXX.+++.X@*",
-"********************$#X.+++.....++ ..O#*%@oX++++&..X +++.X*@o.+++ .XoOoo...Xo#*@o.+++ X..+++++Xo@*$@X.+++&& & &&&Xo***%$#OX&&&&&Xo@#$%%*#@X&&&++++++++++Xo#*%@oX+++ .XoX..+++Xo****%$#Oo.+++XXO#$%%*******%%$#oX.++XO#$*$#O. ++&&&++.Xo#$%****%$#OX.+++XXO@$%%*@O.+++& &&&&&&&&&Xo*$@oX+++ .XXX. +++Xo*@o.+++ XXX +++.X@*",
-"********************$@X.+++.....++ .O@*$@oX+++++.X. &+++XX*#XX+++& XXXXX....X#*#XX+++& ...+++++Xo@*$#X.+++&& &&&&Xo**%%#@oX&&&&&.Xo@@$%*$@O &&++++++++++XO#*$@o.+++ .XXX. +++Xo**%%$#OoX.+++.XXO#$$*****%%%$$@oX.++Xo#%*$#o.. ++&&&++.XXO#$**%%$@OoX.+++.XoO#$%*@oX+++ &&&&&&&+&Xo*$@o.+++ XXX +++XX*#XX+++ .X. &+++XX#*",
-"********************$#o.+++.....++ .o@*$Oo.+++++... &+++Xo*#XX+++& ..X.. ...X@*#XX+++& ...+++++.o@*$#oX+++&& &&&XO**%$@OX.&&&&&..XoO#$*%#@oX.. &&+++Xo#*$@o.+++...X...+++.o*%%$#OXX..+++..XoO#$****%%%##@oX..++Xo#%*$@o. ++&&&++...oO#**%$#OoX..+++..XoO#$*@o.+++& &&&&&&&+&.o*$@XX+++ ..X.. +++.o*#XX+++& ...&&+++Xo#*",
-"********************$#oX+++++++++++++XO*$O. ++++++++++&&&XO*#@X&&&++++++++++ .@*#@X&&&++++++++++ O*%#OX&&&++++++++++Xo*%%#@ &&+++++++&& @$*%%#@oX.. & +++XO#*#@. +++++...+++++ **%#@.&&+++++++&& @$****%$#@OoX...++XO#$*#oX++++&.. +++++ .@**%$@ &&+++++++&& @$*O. +++++&&++&&&++ .*$@. +++++...+++++ *$OX&&&+++++++&&&XO$*",
-"********************%#oX+++++++++++++XO*#@. ++++++++++&& O@*$@O &&++++++++++ .@*$@O &&++++++++++ .@*%$#O &&++++++++++XO*%%#O &&+++++++&& @#**%$@oX &&&++&&&o@$*#@ +++++...+++++ .*%$$@ &&+++++++&& @$**%%$#XX...&&&+&XO#%*$oX+++&&...+++++ .@*%%#@ &&+++++++&& @#*@ ++++&&&++&&&++ .*#@ +++++X..+++++ .*$#O &&+++++++&& O@$*",
-"********************%$@oX... . . . ..O@*$@X....... ...XXO@$*%#@OXX..........oO#*%#@OXX... ... ...o@**%#@OXX.. . ....XO#*%%$@X... ...XX@$*%%$@oX & &&++&&&O@$*$@X.. ..XXX. ....o**%#@oX... ....XX@$**%%#O... &++++&o@$%*$@o....XXXX.. .Xo@**%$@oX... ....XX@$*@X.. ..... ......o*$@XX.. ..XXX. ....o*%#@OXX.......XXO@$%*",
-"********************%%#@XXX........XX@#*%#OXX........XOO##%*%%$#OoX......XXoO#$*%%$#OoX.....X..XXO#*%%%$#OoX......XXO@#*%%$#XX........XoO#$*%%#oX.++++++&.Xo@$%*%#OX....XoOo....XXO***$#OXX.......XXO#$**%%#O.&&+++++.XO#$%*%#OX..XXOOoX....oO#*%%$#oXX.......XXO#$*#OX....XXX..X.X..XO*$#OX.....ooo....XXO*%%$#OoX.....XOO##%%*",
-"********************%%%$OOoXXXXXXXXoo#%*%$@OoXoooXXoXo@#$%%**%$$#@ooXXXXXooO#$%**%$$#@ooXoXXXXXoO@$***%$$#@ooXXXoXO@@$%**%$$OooXX.X.XXoO@$%*%%$OX.&++++&&XoO#$%*%$@OXXXXo@@@oXXXoO@**%%$@OOoXXXXXoOO@$%**%%#O &&+++++.X@#%**%$#XXXoO@#@oXXXXO@$***%$@OOXoXXXXoOO@$%*$@OXXXoooXXXoooXX@@*%$@OooXXX@#@oXXXXO@*%%%$#@ooXXXoX@#$%%**",
-"**********************%%$####@#@#@##$$%*%%$###@#@#@###$%%%*****%%$####@####$$%%****%%$####@######$%*****%%$####@####%%%***%$$#@#@@@@###$%%***%$OXX&&+++& o@#%%**%$$#@@@##$$###@###$***%%%#####@#@##$%%***%%#@. &+++&&XO#$*%*%%$####$$$$##@@##$%***%%$$##@@#@@##$%%**%$###@####@#@#####$*%%$###@##$#######$$***%%%$######$$%%%***",
-"**********************%*%%$$$$$$$$$$%%****%%$%$$$$$%$%%%*******%%%%$$$$$$%%%%******%%%%$$$$$$$$%%%******%%%%$$$$$%%%%%*****%%%$$$$#$$$$%%%**%%%$@OoXXXXoo@#$%%***%%%$$$$%%%%$$$$%%%***%%%%$$$$$$$$%%%%%***%$#OooXXXooO#$%*****%%$%$%%%%$$$$%%%%*****%%$%$$$$$$%$%%**%%%$$$$$%$$$$$$%%%%**%%%$$$$$%%%$$$$%%%****%%%%$$$$$%%%*****",
-"********************************************************************************************************************************************************************************************************************************************************************************************************************************",
-"*************************************************************************************%*%********************************************************************************************************************************************%%%%%$%************%%%%%%*%*********%%%%%%%*************************************************",
-"*************************************************************************************%%%%%%****************************************************************************************************************************************%%$$##$$%%*********%%$###$%*********%%%###$$%%***********************************************",
-"***********************************************************************************%%$$#$%%***************************************************************************************************************************************%%$#@XX@#$%*********%$#ooo#$%********%$#@XX@#$%%**********************************************",
-"*********************************************************************************%%%##@@@#$%%************************************************************************************************************************************%%#@@oX.O@#%%*******%%#@X.X@#%%******%%#@OX.OO@#%%*********************************************",
-"*****%****%*******************%******************%*%******************************%#OXX .O#$%**********************************%***************************************%****%*************%******************%**%****************%#@OXX..O@#%********%$@o...o@$%*******%#@o..Xoo@$%%********************************************",
-"**%%%%$%$%%%$%%*********%%%%%%%$%%%%%%******%%%%%%%%%%%%%*********%%%%%$%%%%%***%%$@oX. o@#$%%%*******%%%%%***%%%%%%*****%%%%%%%%%%%%%$%%%***%%%%%%%%*%%%%%%%*****%%%%%%%%%%%%%%%****%%%%%%%**%%%%$%%%****%%%%%%$$%$%%%********%$@O&&& O#$%********%#@X+++X@#%*******%$#O. &&&O@$%********************************************",
-"*%%$$########$$$%******%%$$#########$%%***%%%$##$#$$###$$%%*****%%%$#######$%%%**%#@.. ++XoO##$%%****%$$$#$$%%%%$$#$%%%**%%$####$$$$#####$%**%%$$##$$%%%$#$##$$***%%$###$$$$$###$%%**%%$#$#$$$%%$#$#$$$**%%%$#########$$%*******%$@X&&& O#$%*******%%#OX+++XO#%%******%%#O &&&X@$%********************************************",
-"%$#@@OOOoOOOO@@#$%%*%%%$#@@OOoOoOOOO@#$**%%##@@O@O@O@OO@@#$****%%$#@@OOOOO@@#$%*%$#O.. ++.XXO@@$%%**%$#@@@@##$##@@@@#$%*%$#@OOOO@@@@@OOO@@#*%$#@O@O@@####@O@@@#*%%$#@OOO@@@@@OOO@#$*%$#@@O@@#####@@O@@#**%##@OOoOoOOO@@##%%****%%#OX+++.oO$%********%%#oX+++Xo#%*******%%#Oo.+++XO#$********************************************",
-"$#OoXXXXXXXXXoo@@$%*%%$@@OXXXXXXXXXXo@#**%$#OoXXXoXXXXXoO@#***%%$@OoXXXXXXXoO@$*%#@X. ++...XoO@#%%*$#@oXXoO@@@@ooXoO@$*$#@oXXXXXoooXXXXXoO*$#OoXXXoOO@@ooXXXo@*%$#OOXXXXoooXXXXoO#*$#@oXXXoO@@@ooXXXo@*%$@OoXXXXXXXXXoO@$%****%%#OX+++XX@$%%*******%%#oX+++Xo#$********%$@oX+++Xo#%%********%%%%%%%%*%%%***********************",
-"#@. +++&+++++&..X@$*%$@X..&+++++&+++ .@*%%#O &&++ +++&&O@***%$OoX&++++&&&&&O#*%#OX++++++++++XXO$%*#@. +++.XOOo++&&&O@*#@. +++++...+++++ .*#@. +++& XoX &+++ .*%$OX+++++...+++++XO*#@. +++& ooo &+++ .*$#O&&&+++++++&& O#%****%%@oX+++Xo@$%********%%@oX+++Xo@%%*******%$@XX+++Xo#%******%%%$$$#$$$$$$$$%%*********************",
-"#O ++++++++++..XO#*%#@...++++++++++& O*%$#O&&&++& &++++&o@**%$#oX.+++++++&&&o@*$#XX++++++++++.Xo$%*#O.&+++.XooX++&&&o@*#O &+++++...+++++ *#O +++&&X.X&&+++ *%#OX+++++...+++++XO*#O +++&&XXX&&+++ *$@o&&&+++++++&&&O@%*****$#oX+++Xo#%%********%%#oX+++Xo#%%********%#oX+++Xo@$******%$##@O@O@@@@@@##%*********************",
-"#O.&++++++++++ .o@*$@o.. ++++++++++&.O**$#O&&&++&& ++++&X@**%$@XX.++++++++&&o@*%#o.++++++++++.oO$%*#O &+++..XXX+++&&X@*#O. +++++.. +++++&.*#O &+++&&...&&+++& *%#OX+++++ . +++++XO*#O +++&&.XX&&+++&.*$@o&&+++++++++&&O#$***%%#OX.+++Xo#$**********$@oX+++Xo#$********%%#oX+++.X@#$***%%$#@OoXXXooooooO@#*********************",
-"$OX.+++++& &++++XO*#@X+++++ & +++++.XO*%%#OX. +++++ &&&XO*%$#O&&+++ & +++++XO*%#@X&&&++ ..oO#$%*$OX.+++ .oXX&&+++XO*$OX.+++&&...&&+++.X*#O. +++ .+++ +++..*%$@o. &++. .++& .o@*#@X.+++& ...&&+++.X*#@o&++&&&&&++ ..O#%****%#O..+++Xo#%%********%%#o.+++Xo@%%*******%%@oX+++..O#%%**%%#O.. ++&&&..&&&oO*********************",
-"$OX.+++++ &++++XO*#oX+++++ +++++.XO**%$@X..+++++ && o@**$#O &+++& &++++&o@*%$@o &&++ ..XO#$%%*$@X.+++..XoX &+++XO*$@X.+++&&...&&+++.X*#@..+++ +++ +++.X*%%#O.. ++ . ++ .O#*$@X.+++&&.X.&&+++.X*$@o&++&&&&&++ .X@#%***%$@O&&+++Xo#$**********$#oX+++.O@$*********$#oX+++&&o@$%**%$@o. &++&&&..++&XO*********************",
-"$@oX+++& .X...+++.X*@o.+++.....&&+++Xo@**%%#OX.++ .XXXoO@#*%%#O. +++++ ..o@*%$#o. ++.XXo@#$%%**$@oX+++..ooX. +++XO*%#@X &++...++& .oO*$@XX+++&&+++& +++.o**%$#OX. &+++&&XXO@$*%#@X &++...++& .XO*%#OX.. +++& .XO#$%***%%@o&&+++Xo#$*********%%#oX+++Xo#$********%%@oX+++&&o#$%**%#oX+++&&++++++&&X@*********************",
-"$@oX+++& .XX..+++.X*@X.+++..XX. +++.O@***%$@oX++ ..XoO@##%*%%#O.. +++++& ..o#*%%#O.. ++.XO@##%%%**$#oX+++..ooo..+++Xo*%$@o. &&+...&+ .o@*$#oX+++ &+++ +++Xo**%%#@oX &+++& Xo@#%*%$@o. &++...++& o@*%#@X.. +++& XoO#%%***%$#o&&+++Xo#%%*********$@oX+++XO@%%*******%%#oX+++&&o@%%**%#oX+++&&++++++&&o@*********************",
-"%#oX+++&......+++XX*#X.+++..X..&&+++XO#***$$Oo.++ ..o@##$%%*%$#O. +++++ & ..o@*%%#@. ++XXo@@#$$%%*%#oX+++..XXX. +++Xo*%%#@. &&...++ .@#*$#oX+++&&+++& +++XO**%%$@oX &+++&&Xo@$%**%$#o..++ &++.Xo@$*%$@XX. +++ &Xo@#%%****%#OX.+++Xo@%*********%%#oX+++Xo@%%*******%%@oX+++.XO#%%**%#OX+++ +++++&&&O@*********************",
-"%#OX+++++ . +++++Xo*#oX+++++ +++++Xo#**%%#Oo.++..Xo@#$$%%**$#O.. &&&+++&&oO**%#@X. ++.XooO@@#$%*$#OX+++ .XXX. +++Xo**%$@oX.++...++.XO#$*%#OX+++++++++++++XO**%%#@oX&&+++&&XX@#%**%$#OX.++& ++.XO#%*%#@X..++&&& ...X@$%****%$#oX+++Xo#$*********%%@oX+++Xo@%%*******%%@oX+++Xo@$%***%$@O...X.......XX@$*********************",
-"%#oX+++++&&&+++++X@*#@X+++++& &+++++Xo#**%$#OX.++...oO@#%%**%$#O.. &&&+++&&XO*%%$@.. ++..XXXoo@#$*%#OX+++ .... +++Xo**%%#OX.++. ++Xo@$%*%$OX&+++++++++++&XO**%$#oX.&&+++&&.XO@$***%$#oX&&+++&&Xo@$%*%#@X..++&&&....XO#$****%$#oX+++Xo@%%********%%#oX+++Xo#%%*******%%@oX+++Xo@%%***%%$#oXXOOoXXX.ooO#$*********************",
-"%#oX++++++++&&...O#*$#O...++++++&+++XO#*%%#O.. ++& ..O@#%%*%$@o&++++&&&&&+++.o**%$@X..++ &&& @#*%#OX&&+++ . +++++.X***%$#oX&&+++&&XO#$%*%$@o &++ . ++& o@*%%#O. &++ . ++& .O#****$#OX&&+++&&XO#%%*$#o &&++&&&&&++&o@$****%%@oX+++.o@$%********%%@oX+++Xo#$********%%@o.+++Xo#$*****%$$##@@@@@@O@@#$$%*********************",
-"%#oX++++++++&&.XX#$*%$@o..&+++++++++.O@**$#O. &++&& .XO@$%*%#@X&++++&&&&&+++Xo**%$#o..++&&&++& O#*%$@o&&&++ +++++.X***%%$Oo&&+++&&X@#%**%$#o. &++. .++ .o#*%$#o &&++. .++&& O@****%$Oo&&+++& o@$%%*$@o&&+++&&&&&++&o@$****%%@oX+++Xo@$%********%%#oX+++Xo#%%*******%$@oX+++Xo#%%*****%%$$$%$$$$$$$%%%**********************",
-"$@oX+++& ...XooO##%*%$$@@oXX... +++Xo#*%$@o. &++&& Xo@$%*%$@o&++++ &&&&+++Xo***%#oX.++& &++&& @#*%%#O&&&++ +++++..***%%$@O &+++& o@$%***%#O.. ++...++ .O#*%$@o &&++.. ++&& o@**%%$@OX&&+++Xo@$%%**$@o&&+++&&&&&++&X@$*****%#oX+++.X@$%********%%#OX&++XO#%*******%%$@X.+++XO#$*********%%%*%%%%%%%************************",
-"$@o.&++& .XXoO@#$%%**%%$#@OoXX. +++XX@*%$@X++++++++++.oO$%*%$@o &&&&+++++ .o@**%%$#OX ++++&..X@$*%%#@OX.+++++&&+++..****%%#OX.+++.X@#%***%%$#X..&&.X.&&.XX@$*$$OX&++++...+++++XO*%$#@XX.&&++&XO#%%***$#o &&+++++++&& o@$****%%#OX+++.XO#$%********%#@X&&&X@#%%******%%#OX.+++XO#%***************%****************************",
-"$@o.+++ .XXO@$%%%****%%$$#OXX. &+++.o@*%$Oo&+++++++++XoO$%*%%#O &&&+++++...@#***%%$@O..+++&&.Xo#$**%%#@Oo&++++&&+++..*****%$#oX&&&Xo#$%****%%#OXX ooo XXo$$*%$@o++++&...&++++o@*%$Oo++++++++XO#%****%#O &+++++++&& O#$*****%$@o+++.XO#$%%*******%$@O&&&O@$%*******%$#oX.+++oO$%%*******************************************",
-"$O. +++++& .@#$%********%$#@. &+++++ .O*%%#@OXXXXXXXXoO@$%**%%$#@oooXXXXXXoO@#$****%%$#OooXXooO@#$%***%$$@OoXXXXXXXXXO@*****%%$#OOoO@@$%%****%%%##O@O@O@OO@@#%%*%$#@ooXXooOooXXoo@#*%$@X++++++++XO#%%***%$#@oXXXXXXXXooO#$%*****%$@O...&&oO#%*********%#@OOO@$%%******%%#Oo &...O@$%********************************************",
-"$@ +++++ .@$%%*********%#@. &+++++ @**%$#@@OooOOO@@#$$%***%%$#@@@OOOOO@@##$%*****%%$#@@OO@@##$%%****%%$#@@OOOOOO@@@$******%%$#@@@#$%%******%%$$###$#$##$$%%%**%$#@@O@@@@@@OO@@#$*%%#OX.......@#$*****%%$#@@OooooOOO@#$%%******%$#XXX o@#%%*******%%%$#@#$$%********%#@o ..Xo@$%*********************************************",
-"#@XX ..Xo#$%**********%$#oX.. XX@**%%%$########$$%%*****%%%$$#$#####$$%%*****%*%%%$$#$#$$%%*******%%%$$#######$$%*******%%%%$$%%%**********%%%%%%%%%%%%****%%%$$##$$$$$$##$%%**%$#XX.X.XXX#$%%*****%%$$$#######$$%%%*******%%##OOO@#$%%**********%%$%$%%********%%%##@OO@##%%*********************************************",
-"%$@OXX.XXoO@%%***********%%$@OoX.XXXo@$***%%%%%%%$%%%%%********%*%%%%%%%%%%***********%*%%%%%%************%%%%%%%%%%%%%********%%%%%%*************%%%*%*%%%********%%%%%%%%%%%%%%****%%$#@@@O@@#$%*********%%%%%%%%%%%%%********%*%%$$###$$%%************%%*%**********%%%#$###$%%**********************************************",
-"************************************************%*%%%*%*****************%********************************%******%**%*******************************%%%%$%%%%********************************************************************************************************************************************************************",
-"************************************************%%%$$%%************%%%%%%%%****************************%%%$%%%*%%%%%%%**********%*%%*************%%%$######$$%%***************************%%%%%%%***************%%%%%************************************************************************%*%%%%%%***************%***********",
-"***********************************************%$#####%%*********%%$$###$$%%**************************%$$###$$$$$##$$%%********%%%$$%%**********%%##@@OOOO@@#$%************%*%*********%*%%$$$$$$%%%**********%%%$$$$%%**********************************************************************%%$$##$$%%***********%%%%%%%%******",
-"***********************************************$#@OoO@#$%*******%%$#@@@O@@#$%%*******%**********%****%$#@@OO@@#@@@O@@#$******%*$#####$%********%%$@OoXXXXXoo@@$*******%%%%%%%%$%%******%%$##@@@@##$%%********%$$#@#@##$%%******************************************************************%%$##@@@@##$$%*******%%$$####$$%%****",
-"*********************************************%%#@o&&&o@#$*****%*$$@oX....XO#$%****%*%%%%%*%*%%%%%***%$#O....XoOoX...X@#*******$$@OoO@$%%*******%#@O +++++&& O#****%%%$$#$$#$#$$%%****%$$@@XX..oo@@$$%*****%%%#OoXXXoO#$%*****************************************************************%$$@@oX..oo@##$%*****%%$@@OOOO@##%%***",
-"********************************************%%$@oX+++Xo@#$%***%%$@OX......oO#$%***%%$$$$$%$$$$$$$%%*%$@o. . XXX.....o@******%$@O&&&o@$%*****%%$#OX &+++++&& o@*****%$##@@#@@@@#$%***%%#@OXX....XXO@#%%****%%$@oX...XXO#%%***************************************************************%$#@oo.....XXO@#$%***%%$@OoXXXXoO@#$%**",
-"********************************%***********%$#O..+++..o@#%***%$@oX+++++++.XO$%**%%#Ooo@@#@#@@oOO$$*%#oX+++++...+++++Xo******%#Oo&&&X@#%*****%%#oX.++& &&&++&o@***%%$@oo..OOO&&@#$**%%#@.. ++++++ ..@$$****%$#O & &++o@$%******************************%**%*%*%************************%%$@.. ++++++ ..@$%***%%#O &+++++XXO$%%*",
-"***************************%%%%%%*********%%$#OX. +++..Xo@$**%%#@X.+++++++.Xo#%*%%$#oXXoooOoooXXo@$*$#o.+++++ . +++++Xo*****%%#OX+++XO#%%****%$@X..++&&&&&+++o@****%$OoX. Ooo&&O#$%*%$#O. ++++++ .O@$***%%$@o & &&++XO#%*********%%%%*%%%%%******%%%$%%$$%$%%%%***********************%$@O. ++++++ .O@$***%%@O&&+++++.Xo$%**",
-"***************************%%$$$%%%*******%$#OoX +++ ..oO#**%%#oX.+++++++.XO$%*%%#OX..XX.XX.X..XO#*%#oX+++++ . +++++Xo*****%%#oX+++Xo#%****%%#OX. ++&&&&&++&o@****%$@oX..Ooo&&O#%%*%#OX.& ++++++& oO#***%$#OX&&&&&++XO#%%*****%%%%$$$$$$$$$%%**%%$$###########$$%*********************%#@X.&&++++++& oO#***%$#O&&+++++.XO$$**",
-"*************************%%$#@@@@$%******%%#@. +++++++..X#**%$@X. ++.....Xo@$%*%$@o&&&+++++++&&&O@*%$Oo &++...++&& X@*****%%#oX+++Xo#$****%$#o. &++&&&.. ..o#***%%$@@OooO@OXX@#$**$#XX++++++++++++.o@***%$Oo.&&&+&++XO@$******%$#@#@@@@@@@#$$**%$#@@OOoOoOoOOO@#$*********************$#XX++++++++++++.o#****%#OX......Xo@$%%*",
-"*************************%%#@Ooo@#%%*****%$@O. +++++++ .X@**%#@...++..XXXOO#$%*%$@o&&+++++++++&&o@*%$#o. &++...++ .o@*****%%#oX+++Xo#%%***%#@X &++&&&.....O#****%%##@OO##@oo#$%**#OX.++++++++++++.X@**%%#OX.&++++++.o@$%***%%$#@oooooooooO@#*%%#@oXXXXXXX.XXXo@#****%*%%%$%$%$%$%%%**#@X.++++++++++++.X@***%%$@X.....XO@#$***",
-"************************%%$#X...X#$%*****%$@X&++&&...&&.XX#*%%#O.. ++X.XoO##%%**%#@X&++++& +++&&XO**%#@X..++&&&++..X@#*****%%@oX+++XO@%****%#oX+++&&+++++...O#*****%%$$$$$$$#$$%%**#O &++++&&++&&& O**%$#X..++ ++.XO$%**%%$@O. &&&..&&&..#*%#@X+++++++++++++XO****%$$$########$$$%*#O.&&&&++&&++&&&& O****%%$#@@O@O@##%%%**",
-"*************************%$@.....@$%%****%#@X+++ &...&&..o#*%$#O.. ++..Xo@#$%%**%#OX&++++ & +++&&X@*%*$#oX.++&&&++.Xo@$*****%%#OX+++Xo#%%***%#o.+++&&+++++...O#******%%%%$%%%%%%****@O &+++++&&++&&&& o**%$#X..++ ++.oO$%*%%$@Oo &&&&..+++..@*%#OX+++++++++++++Xo**%%$$@@@OOOoOOOO@$$*@o &&&&++&&++&&&& o*****%%$$###$$$%%****",
-"************************%%$@X....O#%*****%#OX+++& X.X& .Xo$*%$@o. ++..XoO#$%***%#@X&++++& +++&&XO**%%#OX.++&&&++.XO#%******$#OX+++XO#%****$@o.+++&&+++++ ..o@*******%*%*%*%%%*****@o &+++++&&++&&&& o***$@X..++ ++.Xo#$*%$#OXX&&+++..+++..@*%$OX+++++++++++++.X***$#@OXXXXXXXXXoo@#*@o &&&&++&&++&&&& o*******%%%%%%%*%*****",
-"*************************$$OXX..XO#$****%%#OX+++ .XX.XoO@$*%#OX++++++++.X@$%***%#OX+++ ... ++&XO***%$@oX&+++++&.XO#%******%#OX .XO#%%***%#oX+++++ +&+++XX*********************@o&&+++++..& &&&&&o*%%$#oX.+&++++&..o#$*%#O. ++ +++++Xo@*%$@O... +++.X*%%$@. &++++++++++o@*#o&+&&&++++&&&&&&&o*********%*%%********",
-"************************%%#@X....O#$%****%$OX+++ ...X.XXO@#*%$oX++++++++..@$%%**%#OX+++ &...& +++XO**%%$@oX&++++&&.XO#%******%#@X. X@#%****$#oX+++++& &+++++.o*********************@o&++++++..& &&&&&o**%%#XX.++++++&..X#%*$@o. &++ +++++XO#*%%#@XX...... +++.X**%$@ &++++++++++o@*@o&&&&&++++&&&&&&&o*********************",
-"************************%%#O. && O@%%***%%#@X&++++.. &&.XO$*%$@X. ++& .o@#%%**%$OX&++++& ++&+&XO***%$OX.&&+++&&.XO#%*****%%#@X+++XO#%****%$@X.. +++++&&+++.o*********************#o. ++++++++++++ .o**%$#o..+++++++.XX#$*$Oo+++&&&&&++ ..o@$**%$#@O@OOOoXX.+++.o*%%$@X... . ..o#*#o. +++++&&+++++ .O*********************",
-"************************%$@o &&&&o@$%%***%$@o&&+++ &&.Xo#*%$@o. ++& XX@#$%%*%#Oo&++++ & ++++&X@**%%$@X.&&+++&&.XO#%******%#OX+++XO#%****%$#OX..+++++&&+++.X*********************#O. ++++++++++++..O**%%#XX.+++++++..o#$*#OX+++&&&&&++ .X@$***%%$$####@OXX+++.X**%$#oX..........X@#*#@..+++++& +++++..O*********************",
-"************************%$@o &&&&XO$%****%$@o&&&++& +&.Xo$*%$@o. &++&& .XoO@$$*%$OX&++++& ++&&&X@**%%#OX.&&+++&&.XO$$*****%%#OX+++XO#%%****%#@X..+++++&&+++.o*********************$@..++++++++++++..@**%%$oX.+++++++.Xo#%*$@X+++&&&&&++ ..X@#*****%%%%$%$@OX+++Xo**%%$OooX.....X.XX#$*#@X.+++++&&+++++..@*********************",
-"***********************%%#@X&&+&&XO#$*****%#@o..+++++++XX@$*%$@X &++....XXXX@#*%$@o&&+++++++++&&o@**%%$Oo. +++ ..XO#%******$#oX+++Xo#$****%%$@oXX.. & ++++&XO*********************$#OX&++++&&++++&XO#**%%$@oX.. ..Xo@$%*$@o &++ & +++++XO#******%*%%%%$#O...o@***%$$#@#@@@@@@@@#$%*%@oX&&+++&&++&&&XO#*********************",
-"************************%#OX&&+&&XO#%*****%$#OX.&+++++&Xo@$*%#Oo &&++........O@*%$@O&&&+++++++&&&o@**%%#OX..&+++& XXO#%******$#oX+++Xo#$****%%#@oX.X. +++++XO*********************%#@o&&&++&&++&&&o@#***%$#@o... ..XoO#$%*%#@.. ++ &+++++Xo@***********%$#@XXX@#****%%%$$$#$##$$$%%%*%$@o&&&++&&+++&&o@#*********************",
-"************************%#OX+++++XO#$%*****%$#@XX.+++.Xo@$%*%#oX+++++++++++++XO**%#OX....XXXXX..XO#**%%#oX.+++++++.Xo#%*****%%#oX+++Xo#%%***%$@o&&& ...++ .X@$*********************%$#OX..&&++&&..XO#%****%$$##OOoOO@#$%%**%$@OXX&&++& .+++ .@************%%$###$%*****%%%%%%%%%%%%%%**%$#OX..&&++&&..XO#$*********************",
-"***********************%$#oX+++++.o#$%*****%%$#OXX+++.oO#%%*%@o.+++++++++++++XO*%%$@oXXXXoooooXXo@$**%%#oX.+++++++..o#%******%#OX+++XO#%%***%$@o&+++++++++.Xo#$**********************%$#OXX&&++&&XXO@$%*****%%$$#####$$$%***%%$#OX &&&&..+++..@*************%$$$$%%********%*%*%*%*******%$#OXX&&++&&XXO#$%*********************",
-"***********************%$#oX+++++Xo#$%*******%$#oX+++XO#$%**%#OX+++++++++++++XO***$$OOoOO@@@@@ooO$%**%%#oX.++++++&.Xo#%*****%%#OX+++XO#%****%$@o&+++++++++Xo@$%**********************%%$@OX ++& Xo@$%%******%%%%%%$%%%%******%##O. &&&..&&&..#***************%%%%***********************%%$@OX ++& XoO$%%*********************",
-"************************%#OX+++++XO#%********%%$@o...O@#%%**%$@o.. ...O@***%$$$#$$$$$$$$$$%%***%$@oX.. . .XO@$%******%$@O...O@$%****%%#O...& .Xo@#%%***********************%%$#@OoXXoo@#$%%*********%%%%%%**********%$#@OoooOooooO##*******************************************%%$#@OooXoo@#$%%**********************",
-"***********************%%#@X&&&&&XO#%%********%$$@XXX@#%%***%$#OX..........XX@#****%%%%%%*%*%%%%%%%**%%$#@oX.....Xo@@%%******%%#OX.X@#%%****%%$@XX. ...Xo@#$%*************************%%$$#@@O@##$%%*************************%%%$#@#@@@@@@@#$$********************************************%%$$#@OO@##$%%***********************",
-"*************************%#O. .O#$%**********%%##@#$$%*****%$#@@OOOOOoOOO@@$$*****%%%%******%********%$##@OOOOO@#$$%********%$#ooX#$%%*****%$#OXX...XXo@#%%****************************%%$$##$$%%%****************************%%%$$$$$$$$$$%%**********************************************%%$$$$#$%%*************************",
-"************************%%$#@OoOO#$%************%%%$$%%*******%%$##########$$%%*************************%%$$####$#$%%**********%$##$$%********%%##@@@O@@#$%%*******************************%%%%%%%********************************%%*%*%*%%%%%*************************************************%%%%%*%**************************",
-"**************************%$#####$%%*************%%%%*********%%%%%$$$%$$%%%%****************************%%%%%%$%%%*%*********%*%%%%%%*********%%$$#$#$$%%%**********************************%*%*************************************************************************************************%*%****************************",
-"*****%%%$%$%%%******************************%%%%%$%$%%***********%%%%%$%%%***************************************************%%%$$$#$#$$%%%************************************************%%%%%%************************************************%$%$$%%************%%%$%$%*************%%$$$$$$%%******************************",
-"****%%$$###$$%%******************************%$#####$$%*********%%$#####$$%%****************%******************************%%%$#@@@@@@@@#$%***********************************************%%$$$$%%%***********%*%%*%****************************%$#####$%%**********$#@###$%************$#@@@@##$$%******************%*%********",
-"***%%$@OXXX@@$%%*************%*************%%$@@XXXoO#$%*******%%$@OXXXoo$$%************%%%%%%****************************%%$#@oX.....XXX#$*********************************************%%$$@ooO#$%*********%%%$$$$$%%**************************$@@ooO@#$%**********#OOoO@#$%***********#@OooooO##$%*****%*********%%%$%%%******",
-"***%$#Oo.X.XO@$%%**********%%%$$%%*********%$#Oo...XX@#$%******%$#Oo...XX@#$%*********%%$$#$$%%**************************%%#@Oo.X........O#********************************************%%%#@OXXX@#%%*******%%$$##@###$$*************************#X. &&Xo#%%%*****%**X.&&&Xo#$%**%%%%$*%*oX&&&&&XXO#%%%%%%%%*******%%$###$%%*****",
-"**%$#OXX...XXO#$%*********%%####$%%********%#@XX.. ..o@#%%*****%#@XX.. ..o@#%%*******%%$#@@@@$$%************************%%#@ooX.. ..O@********************************************%%#@OX...O@$%*******%$#@OoooO@#$%************************@X.&&&.X@$%***%%%%%*X.&&&.X@$%%%%$#$$$%*X.&&&&&..o@$$$$$#$$*******$$#OO@@$%*****",
-"*%$#Oo&+& &+&oO#%%*******%%##ooo@#%*******%%#O&& & +&.XO$%****%%#O&& +&.XO$%******%%##XXX .#$%************************%$@o&&&++++++++++XO********************************************%#@o &+++X@#%*****%%$#O..&&&..O#$%%**********************@..&&&.XO$$%%%$$$$$*..&&&.XO$$%$##@@@#$*X.&&++&..XO####@@##*******%#O&&&@#%%****",
-"*%$@oX++&&&++Xo@$%%******%$@O..XO@$%%*****%$#O&& &&++.XO$%%***%$#O&+&&&++.Xo$$******%$#OX.. .@$%******%%%%%****%*%%%****%#OX&&&++++++++++XO********************************************%#@o &+++XO#%%****%$#@o &&& .oO#$%**********************@..+++..@#%$%##@OO#*..+++..O#$##Ooo @$*. &&&&& O@@@O..Xo******%$#O&&&O@%%****",
-"%%#o..++...++..X#%%****%%$#Oo+++XO#$%%*****$#O.. +&.XO#%%***%%@O. &&++.XO#%%*****%$OX&&&.X@#%%****%%$$$$$%%%$$$$$$%**$@o.+++ +++++ .o@********************************************%$#OX.+++Xo@%****%%$oX.++...++.XO#%%****%%%%%*%*%%*******@..+++..O#$$#@@oXo@*..+++ .O@##OXX. @#*. &&&&&& oOooX .X******%$@O...o#$%****",
-"%$#X..++...++ .X#$****%$$#OoX+++XXO#$$*****$#O.. ++XX@$%****%%#O..&&&++.Xo#%%****%%#OX&+&XX#$%****%$##@@@##$$##@@##$$*$@X.+++ +++++ .o@*********%%%%*%******************************%#@XX+++Xo#$****%$#o..++ .++..o#%%*%%%$$$$$%$$%$%%*****@oX+++ .O@##@...&&@*oX+++..o@@OX&&&..O#*oX &++ ..XX.. &&X@******%$@o...o@$%****",
-"*$#X..++...+&..X#%%**%%#@OXX.+++.XoO@#$***%%#O... .+&.o@$%%****$#O. &++.Xo#%%****%%#OX&&&Xo#%%****%#@OoooO@#@OOoooO@$*$@X.+++ +++++ ..O#*******%%%$$%$******************************%%$Oo.+++.o@$%***%$#o..++ ..++..X#$%*%%$##@########$%%***#o.&++ .o@@@o. & O*oX+++ .oooX.&&&..@#*OX& &++ .XX &&o@******%#Oo. .o@$%****",
-"%%#OX.&+ ++XXO#%***$$@X.. +++ ..X@$***%%#OX.+++..XO@$%****%$#O..&&&++..o#$******%$OoX.XO@$%*****$@. &&&XXO@o++& @#*$@X.+++& +++++ .@#******%$$##@##%%*****************************%$@o.+++Xo@$%***%$@X..++...++ .X@%%*%$@XXXoooooXo@##%%**@oX+++ .XOOoX &&O*o.+++ .XoXX.&&&..@#*oX &&++ .. & &&o@****%%$#oX&+&X@#%****",
-"*%$@OX&+ ++Xo@$%%*%$@o.. +++ ..o@***%$#O..+++..XO#$%*****$@O.. &&++..X#$%*****%%@OoXo##%%*****#@ +++..ooX++&&&o@*$#X.+++ &+++++ ..O#*****%%$@OooO@#$****************************%%#@XX+++.X@$%***%%#X..++...++..X#$%*$#@...XX.X...oO@#%%*@o.+++ .XXX..&&&XXO*oX+++ ..X.&&&& XXO#*. &&&&& ++&XX@#****%%#Oo.+++XO#%****",
-"**%#@OX. .Xo@$%%**%$OX+++++++++++++XO****$@o&+&&&+&.XO$%%**%%$@o&+ ++.XX#%%*****%%%####$%%******#O..+++..ooX&&++&oO*%#OX&+++++++++ ..@#*****%$#X.&&&O#$*****************************%#@..+++..@#%%**%%#OX.++ & ++.Xo#%%*$@O&++&& . ++..X@$$*OXX+++ ...X &++Xo@*X.+++ ....+&&& .XO#*. & &&&&& &++Xo@$***%%#@o &+++XO#%%***",
-"**%%#@XX...Xo@#%%***%#OX+++++++++++++XO***%$@o&+&&&&&.Xo$%****%$@o++ & ++.Xo#%%******%%%$%%%%*******$@X.+++ .XXX&&+++XO*%#OX&&++++++++ ..@#****%%$@X.+++o@#%%***************************$#O. +++..O#%***%$#OX.++ ++.XO$$**$@o&+++& ++ ..O#$*O &++++&&&&++&&&.o@* &+++&+++++++++& O@*X.+++++&&&++&&&.X@$**%$#@oX &+++XO#%%***",
-"**%%%#@o..XoO$$%****%$OX+++++++++++++XO***%$#o&+&&&&&XXO$%%***%$@O++ +&.Xo$%**********%%%*********#@X.+++..ooX &+++XO*%$#O &&+++++++ ..@#*****%#O..+++X@#%**************************%*$#O..+++..O#$%***%$OX.&+ & ++.XO$%**$@O&++++ ++ .X@#*O &+++++&&&++&& .o#* &+++++++++++++&&o@*X.&++++&&&++&&&Xo#$**%$@oX.&&+++XO#%****",
-"****%$$##@@#$$%*****%%#OoXX..+++...XoO#****$#@.. .o@#%%*****%#@X.. ..o@#$%%*********************$@XX+++ .XoX. +++XO*%%#@oXX +++++...@#****%%$@..+++o@#%**************%%***********%$#O. . ...O@$%**%%$@oX &&&&& Xo@#%%*%#OX..++&&&&&+++.X@*@. +++&+&&&++&&&.o@* &+++++++++++++&&oO*oX&++++&&&++&&&.X@%*%$#O &&++...o@#$%***",
-"*****%%$$$$$%%******%%$#OoX..+++.XXo@#$****%$@XX.....@#$%%****%%$#Oo...XXO#$%***********************%#OX+++ .XXX +++Xo**%%#@OX +++++ ..@#*****%$@X.&&+o#$%***********%%$%%%%*********%$#@X.....X@#$%%*%%#@o. &&&&& .o@#%%*%#OX..++&&&&&+++.XO*@OoX.. .+++&&+++.X@*oXX..&&&&&&& . ++X@*@OXX.. +++&&+++.X@$*%$@o&&&++...XO##%%**",
-"*******%%%%*%********%%$#OOX.+++.Xo@#$%***%%$$@@OOO@@#$%*******%%$#@@@O@@$$%%***********************$#oX+++ ... +++Xo***%%$@OX.+++++ ..@#*****%$#@OooO@#$%**********%$$####%%********%%$#@@@@O@@#$%***%%#o..+++++++..X#$**%$@o..+++++ +++..@*$@OoX...+++&&+++.X@*@o...&&&&&&& .++o@*#@OXX. +++&&+++.X@$*%$Oo&&+++..XXoO##%%*",
-"*********%***********%%$#@OX.&++.oO@#$%*****%%$$###$$%%%********%%%$#$#$$%%*************************%#oX++++& . &++++.o****%%#Oo.+++++ ..@#******%$##@@@#%%**********%%#@OOO@#%%********%%%$####$$%%%***%$#XX.+++++++..o#%%*%#@X..+++++&&+++..@*%#@XX.++&&&&&+++.X@*@o. +&.X...+++ .o@*$#OX.++&&&&&+++.X@#*%#OX+++ ..X XXO#%*",
-"*********************%%$#@oX.++&.Xo@#$%******%%%%%$%%%***********%%%%%%%%%**************************%#oX+++++ +++++.X*****%$@o.+++++ ..@#********$$$$$%%***********%$@o &&O@#%%*********%%%%$%%%%%****%%$XX.+++++++.Xo$$**$#OX..+++++ +++.X@*%#@XX.++ &&&&+++.XO*@o. &&&.XX..+++ .o#*$#OXX++&&&&&+++.XO#*%#@X+++ ...&&.Xo#%*",
-"*********************%$#XX... ..XXo$$********%%*%*%**************%*%%*****************************%#OX+++&+& +++++.X****%$@OX.+++++ ..o#*********%%%%%***********%$@OX&&&XO#$%**********%*%*%*********%$#OooXXXXXXOO#$%**$@o&&+++ ++&& XO@*%#OX..++&&&&&+++.XO*Oo & &&XXXX.+++..O#*$@oX.++&&&&&+++.XO#*%$Oo&+++&.. ++..X#$*",
-"********************%$#@... & ..X@#*************************************************************%#oX+++++++++++++ .**%%$@OX..+++++&& o@************************%%$@..+++..@$%************************%%$$@OOoooO@@#$%%**$@o&++++ ++ .o@$*%#O &&&&&&&&&+++ .O*X.&++..XXX&&&& ..O#*#O &&&& & &&+++ .O#*%$@o&&+++ ++ .X@$*",
-"*********************$@O.. & & ..XO#*************************************************************%#OX++++++++&&+++ .***%$@oX. +++++&& XO*************************$#O..+++..O#%%*************************%%$$#####$$%%%***$@o&++++.. ++ ..@#$*$@O&&& &&&&&+++ O*o.++&.XoXX&&&&&..O#*@O&&&& & &&&+++ o#*%$@O&&&++ ++..X#$*",
-"********************%$@X+++++++++++++X@*************************************************************%#oX+++ ..XXXXXoo@**%$#X..++++++++++Xo*************************%#O. +++..O#%**************************%%%%%%%$%%%%*****%#O. XX.....Xo@#$%*%#O && &&&&+++ .O*oX&&&XXOoX&& & ..O@*#O && . . &&+++ .O#**%#@XX.+++++++.XO#%*",
-"********************%$@o+++++++++++++o@*************************************************************%#OX+++ .XO@####$$%**%%#o..++++++++++Xo************************%%#o &+++ .@#%%****************************%*%**%********%#@X..ooXXXXXO@#$%%*$#OX..XXooX..+++ .O*oXXXXO@OXX++&&&+&O@*#OX..XoooX..+++ .O#*%%$#OXX++++++&Xo@$%*",
-"********************%%#OOXXXXXXXXXXXo@#*************************************************************%#OX+++..O##$%%$%%***%%#oX.++++++++++XO*************************$#O &+++..@#%*******************************************%%#@@@@@#@@@@#$%%***%$#XXX@O@OOX.&++..@*OoOOO@#@OX&&&&&&+O#*$#XXX@@@@OXX+++..@$***%$#@ooXXXXXoO@$$**",
-"*********************%$#@@OoooooooO@@#$*************************************************************%$#O...oO#$%**********%$#@ooXXXXXXXXoO#************************%%#@X. XO@$%*******************************************%%%$$#$$$$$$$%%%%***%%$########@OoXoO@#*$$###$$$#@oooXooO@$*%$######$@@ooooO@#$***%%$##@OOOOO@#$%*%*",
-"*********************%%%$###########$%%*************************************************************%%#@XXXO#$%***********%%$##OOoooooOO@#$*************************%$@oX...o@$%**********************************************%%%%%%%%%%%%*******%%%$%%%%%$##@@@@$$*%%%%%%%$$#@@@@@@#$$*%%%$$%%%%$$@@@@@$$%******%$$#####$$%%***",
-"***********************%%%%%$%$%%%%%%%***************************************************************%$#oXo#$%%************%%$$########$$$%**************************%$Oo..X@#$%**********************************************%*******************%%%%%%%%%%$$$$$%%*%%%%%%**%%$$##$$$%%**%*%*%%*%%%%$#$$%%********%%%%%%%%%%****",
-"***%%%$$$$%%***************%%%$$$$%%**********%%$$#$$%***********%*%%$%%%%******************************%%%$####$%%************%%%%%%%%*%*********%%%$%$%$%%%%%****%%%$$$$%%****************%%$$$$$%**********%%$#$$$***********%%%%%%%%%%%********%%%$$$%%******************%%$$$$%%********%%$$####$%*********%%%%%%%%%%%%****",
-"***%%##@##$%%**************%%$##@##$%********%%##@@@#$%**********%$$$###$$%%***************%*************%$#@OO@@$%%*********%%%$%$$$$$$$%%***%%%%$$########$%%****%%##@@#$%%**************%%$##@#$$%%*******%$#@@@#$$%********%%$##$##$#$$%%******%$$#@@#$%%***************%%$##@#$$%*******%%#@OOO@#$%*******%%%$#$$$$$$$$%%**",
-"**%%#@o..@#$$*************%%#@oo..#$%%*****%%%#Oo...@#$%*******%%$#ooOO@O@$$********%%%$%%%%%%%********%%$#XX o@$%*******%%$$##@#@#####$$****%$#@OoXXXXooO@@$***%%$@..oOO$$************%%%$#O..O@#%%*****%%%#@...oO#%%******%%$#@@O@@@@@#$$%*****%#OO..@@$%%*************%%$#O..o@#%%****%%%#OX & oO#$*****%%%##@@@@#@@@@#$$%*",
-"**%$@OX oO#$%%**********%$$@oXX @#$*******%$@oX o@$%******%%##OXXXXXXo#$%%*****%%$$$#$$$$$$%*******%%$OX.&& XO#%%*******$$ooXXXXXXXXoo#**%$$#OoX.....XXXoO#***%%#@. XXo@$$%***********$$@Oo XO@%%*****%%#@o & Xo@#%%****%%$@O XXX..XoO$%****%%@OX oO@$%%***********%%$@Oo XO@$%****%%$@XX&&&.o@#%%****%$Ooo..OOO..XoO$%*",
-"**%%@oX&&XXO#$%*********%%$@O... @#%******%$@OX.&& XO#$%****%%$@Oo.....XXO#$%****%%$#@@@@@@##$$%******%$#O..&&&Xo@%%*****%%#@XX........XX@*%$#@OXX..... ...XX@**%%$@O..++&Xo@#$%%****%%$#@O &&&XO@$%%**%%$@O. &&&+&oO#$%***%$@Oo&&.X. .XX#$%**%%$@OX &XXO@$%%*********%$$@OoX& XO@%%****%$@OX.&&&.XO#$%***%$#oX.. XXX XXo#$*",
-"**%$#OX && .@#%%******%%%$#oX&&&.X@$%%****%%#Oo&+&&&..@$%%**%*$#X..++++++&o@#%***%%$OoX. OOO @$%%****%%$@o & ..@$%******$#O.... . .....o*%$@...++++++++++&&O**%$#Oo..+++.XO@#$%**%%$$@@oX &&& Xo@$$***$$@OX. +++++Xo@#$**%$#XX. & &&...O#%***%$#OX && .O@#%%%*****%%%#@O && XO#$%***%%#Oo&+&&&++oO#$%*%%$@X..&&... & .X@$*",
-"*%%$@OX &&& o@$*%*****%%$@OX.+++.X@$%****%%#@oX++++& .@$%****%$@X. ++++++&X@#%***%$#OX. XXX @$%%****%$#OX & .X@%%****%%$@o&+++++++++++o*$#O.. ++++++++++&&o*%$#oX.. & .Xo#$%*%%#oXX..&&& .XX@$%*%$@X..&& && .X@#%*%#@X..&& && ..O@$***%$@OX &&& XO@#$%%***%%$#@OX &&& XO#$%***%$@oX++&&&++Xo@$%*%%#O...&& && ..O#*",
-"*%%#oX.. &&&o@#%*****%%$@oX. & Xo#$%%***%$#X. && ..O#%%**%%#O. &&&..o@$%%**%$#XX.&&.....O#%****%%#oX. &&&&Xo@$%%****%#@X++++++++++++X*#@X+++ &.....&&&&&o*$#o.. &&&&&...o@$*$@O... &&& ..o@$*$@O. && & && .oO#*$@o.. &&& &&& .X@#**%$@X... &&&..XXO#%**%%#oXX. &&& ..Xo#$**%#@X. & && ..@$*%%#@.. &&. && ..O#*",
-"*%$@X... &&&XO#$*****%$#oX. && Xo#$*****%#@X. && & ..@#%%**%$#O. & &&&&.XO#$****%#@X..&& ...XO#$****%$@X.. &&&&Xo@$%*****%$OX &+++&&...++X*#OX+++ XXXXX&&&&&o*#Oo+++++++++++++.o#*$OX+++++++++++++.o#*$OX+++++++++++++.o#*#OX+++++++++++++.o#*%%#@X.. &&& ..XX@$**%$@o.. &&& ...X@$*%%#O.. && && ..O#*%%#O &&+++++++&& O#*",
-"%%#@X.. &&&Xo@$%****%$@XX. & &&Xo@$%%**%%#O.. && ..O#$***%%#o. & &&&..O#$%**%%#OX..&& ..O#%%**%%#@X.. &&&&.o@$%****%%#@X&&+++&&...++X*#OX+++&.XOOoX &&&&o*#OX+++++++++++++.X@*$OX+++++++++++++.X#*#OX+++++++++++++.X@*$oX+++++++++++++.X@*%%#@ &&+++++++&& @#*%%#@ &&+++++++&& @#*%%#O &&+++++++&& O#*%%#@ &&+++++++&& @#*",
-"%%#O &&+++++ .O#%%**%%#@ &&+++++ .O#%%**%%#O &&+++++ .O#$%**%$#O&&++++++ .o#$***%%#O &++++++ .o#$%**%%#O &&+++++..O#%%****%#OX&&+++&&. .+&o*@X.+++.Xo@#@OXXX.X@*$@o. ++.....+++XX#*$@o. ++.....+++XX@*$@o. ++.....+++XX#*$Oo. ++.....+++.o@**%#@ &&+++++++&& @#**%$@ &&+++++++&& @#*%%#@ &&+++++++&& @#**%$@OoX..+++..XXO#$*",
-"*%#@ &&+++++..o#$%***%#@ &&+++++..o#%%**%%#@ &&+++++ .o@$%**%%#O &&+++++ .o#$%**%%$O &&+++++ .o@%%**%%#@ &&+++++ .o#$****%$#OX+++++&&+++.Xo*#X.+++.XO#$$#ooXXo@*$@o. ++.....+++.o@*$#o. ++.....+++.o#*$@o. ++.....+++.o@*$@o. ++.....++&.X#**%$#OoX..+++..XXO#$*%%$#OoX..+++..XoO#$**%$#OoX..+++..XoO#$***%$@OXX.+++.XoO##%*",
-"%%$@OX.&&+++&&o@$%**%%$@oX.&&+++&&o@$%***%$@oX.&&+++&&o@$%***%$@oX.&&+++&&o@$%***%$@oX.&&+++&&o@$%***%$@oX.&&+++& o@$%***%$@oX+++++&&+++.XO*@o.+++.X@$$$$@O@OO$*%#O.. ++.....+++Xo#*%#O.. ++.....+++Xo@*%#O.. ++.....+++Xo#*%#O.. ++.....+++Xo#**%%$#OXX.+++.XoO#$%**%%$#OoX.+++.XoO@$%**%%$@OXX.+++.XXO##%**%*%$#OX.+++.XO#$%%*",
-"**%$@oX&&+++&&XO#$***%%$@oX&&+++&&XO#%%***%$@o.&&+++&&XO#$***%%$@oX&&+++&&XO#$****%#@oX&&+++&&XO#%%***%$@oX&&+++&&XO#%**%%$Oo.+++++&&++&.X@*@X.+++Xo@$%%%%$$$$%*%#@.. ++...&+& oO$*%#@.. ++...&+& X@#*%#@.. ++...&+ .o@$*%#@. +&...&& .o@#***%%$#OX.+++.XO#$$****%%$#OX.+++.XO#$%%***%%$#OX.+++.XO#$%%***%%%$@oX+++Xo@#%%**",
-"*%%$@XX++ ++XO@%%***%$@XX++ ++XO@%%**%%$@oX++ ++Xo@%%***%$@XX++ ++XO#$%**%%#oX.++ ++XO@%%**%%$@XX++ ++XO#$%*%$@X..++++++++++.X@*@X.+++Xo@$%%%%$$$%%*%$@.. ++...++ .@#%*%$@.. ++...+& .@#%*%#@.. ++...++...@$%*%#@.. ++...+& ..@$%****%%$@oX+++Xo@#%%*****%%#@oX+++Xo@#%%*****%%$@oX+++Xo@#%%******%$@oX+++.o#$%***",
-"*%%#@X.++. .++.o@$%**%%$@o.++ ++.o@$%**%%$@XX++ ++.o@$%**%%$@o.++ ++.o@$%**%%#oX.++ ++.o@$%**%%#@o.++ ++.o@$%*%#OX..++++++++++.o#*#X.+++.XO##$$####$$*%#@.. +++++++.Xo@$$*%#@.. +++++++.Xo@$%*%#@.. +++++++.XO@$$*%#@.. +++++++.XO@$%****%%$@o.+++.o#$%*******%$#o.+++.o#$%*******%$@o.+++Xo@$%*******%%@oX+++Xo@%%***",
-"%%$@...++...++ ..@$**%$OX. ++...++ ..@$**%#@.. ++...++...@$**%#@...++...++ ..@$**%#@.. ++...++ ..@$*%%$@...++...++...@$*$@O &&+++++&& .Xo#*@o.+++.XoO@@@OO@@#$*%#@.. +++++++.XO@$%*%#@.. +++++++.Xo@#%*%#@.. +++++++.XO@$%*%#@.. +++++++.XO@#%*****%%#o.+++.o#$%*******%$#oX+++Xo@%%*******%%@oX+++XX#$%*******%%#o.+++Xo@%%***",
-"%$#O. ++...++ ..O@*%$#O.. ++ ..++ ..O@*%%#O.. ++...++ ..O@*%$#O. ++...++ ..O#*%$#O. ++ ..++ ..O@*%$#O.. ++...++ ..O@*$@X&&&+++++&&& XO@*#oX+++ .XXooo....X#*%#@.. ++&&&++.XXO@$*%#@.. ++&&&++.XXO@$*%#@.. ++&&&++.XXO@%*%#@.. ++&&&++.XXO@$****%%$@oX+++Xo@$%%******%$@o.+++Xo@$%*******%$@o.+++Xo@$%*******%$@XX+++Xo@$%***",
-"%$@o&&+++++++++&&o@*%$@o&&+++++++++&&o@*%$@o&&+++++++++&&o@*%$@o &+++++++++&&o@*%$@o&&++++++++&&&o@*%$@o&&+++++++++&&o@*#oX&&&+++++&& XX@*#OX+++& .X.X. ..@*%#O.. ++&&&++...Xo@*$#O.. ++&&&++...Xo@*$#O.. ++&&&++...Xo@*%#O.. ++&&&++..XXo@***%%$#OX.+++.oO#$%****%%$#Oo.+++.XO#$%****%%$#@XX+++.X@#$%*****%$#OX.+++.XO#$%**",
-"%#OX&+++++++++++&Xo*$@OX&+++++++++++&Xo*%#OX&+++++++++++&Xo*%#oX&+++++++++++&Xo*$@OX&+++++++++++&Xo*%#OX&+++++++++++&Xo*@o.+++. &&&&&...&&o*$@o &++++++++++..O*$@o. ++...& & &&O*$@o. ++...& &&O*$@o. ++... &&O*$@O. ++... & &&O***%$#@oX.+++.Xo@#$%***%$#@oX.+++.Xo@#$%***%$#OoX.+++.Xo@#$%**%%$#@oX.+++.Xo@#$%*",
-"#@X.+++&&&&&&&+++.X*$@X.+++&&&&&&&+++.X*#@X.+++&&&&&&&+++.X*$@X.+++&&&&&&&+++.X*$@X.+++&&&&&&&+++.X*#@X.+++&&&&&&&+++.X*OX.+++ .&&&&&...&&X*$#O. ++++++++++.X@*$@o. ++... &&&&&o*$@o. ++... &&&&&&o*$@o. ++...&&&& &&o*$@o. ++...&&&& &&o**%%#@oX..+++..Xo@#$*%*$#@oX..+++..Xo@#%**%%#@oX..+++..XoO#$**%%#@oX..+++..Xo@#%*",
-"#OX.+++&&&&&&&+++.X*#OX.+++&&&&&&&+++.X*#OX.+++&&&&&&&+++.X*#OX.+++&&&&&&&+++.X*#OX.+++&&&&&&&+++.X*#OX.+++&&&&&&&+++.X*O &+++&&++++++++++X*%#@.. ++++++++++.X@*#oX+++++++++++++&&o*#oX+++++++++++++&&o*#oX+++++++++++++&&o*#oX+++++++++++++&&X*%%$@.. +++++++ .@$**%$@.. +++++++& .@$*%%$@.. +++++++ .@$**%$@.. +++++++ .@$*",
-"#O &+++++...+++++& *#O &+++++...+++++& *#O &+++++. .+++++& *#O &+++++. .+++++& *#O &+++++...+++++& *#O &+++++. .+++++& *O &+++&&++++++++++X*%%#@oX..+++&&..XX@#*#oX+++++++++++++&&o*#OX+++++++++++++&&o*#OX+++++++++++++&&o*#oX+++++++++++++&&o*%%#@. &+++++++& .O#*%%#@. &+++++++& .O#**%#@. &+++++++& .@#*%%#@. &+++++++& .O#*",
-"#O &+++++ . +++++& *#O +++++ . +++++& *#O &+++++...+++++& *#O &+++++...+++++& *#o +++++ . +++++& *#O &+++++...+++++& *O +++&&++++++++++o**%%$#o..+++&&XoO#$%*#OX+++++++++++++&&o*#oX+++++++++++++&&o*#oX+++++++++++++&&o*$oX+++++++++++++&&o*%%#O. &+++++++&&.@#*%%#O. &+++++++& @#*%%#O. &+++++++&&.O#*%%#O. &+++++++&&.@#*",
-"#O +++++...+++++ *#O &+++++...+++++ *#O +++++...+++++ *#O. +++++...+++++ *#O.&+++++...+++++&.*#O +++++...+++++ *@X. . & &&& o****$#O..+++& o#$%***$@o. && & .XO*$@o. && & .XO*$@o. && & & .XO*$@o. &&& & .XO**%$@X.. & & ..X@#**%$@X.. & & ..X@#*%%$@X.. & & ..X@$**%$@X.. & & ..X@#*",
-"#@X. .X. & .X*#@X. .X. & .X*#@X. X... .X*#@X. X... .X*$@X. .X. .X*#@X. X... .X*#oX...... . ..@***%%#O &+++.XO#%%***%#@... . ..Xo#*%#@.. . . ..XX#*%#@.. . . ..Xo@*%#@.. . . ..Xo#*%%$#XX... . ...XX#$*%%$#XX.... . ..XX#$**%$#XX... . ...XX#$*%%$#XX... . ...XX#$*",
-"$#oX. ...XoX.....Xo*$#oX. ...XoX.....Xo*$#oX. ...ooX.. ..Xo*$@oX. ...ooX.. ..Xo*$@oX. ...XoX.. ..XX*$#oX. ...ooX.. ..Xo*$#@OOOOOoOooooooO@#****%#@. +++Xo#$%****%$#@OoooooooOooO@@$*%$#@OOooooooOooO@#$*%$#@OOooooooOoOOO#$*%$#@OOooooooOooO@@$**%%$#@OOooooOOO@#$%**%%$#@OOoooOoOO@#$%**%%$#@OOoOooOOO@#$%**%%$#@OOoooooOO@#$%*",
-"%$#@OOOO@@@@@OOoO@@*%$#@OOOO@@@@@OOoO@@*%$#@OOoOO@@@@OOoO@@*%$#@OOoOO@@@@OOoO@@*%$#@OOOO@@@@@OOOO@#*%$#@OOoOO@@@@OOoO@@*%$$######@##@#@###$****%$#OoXXoO@#%%****%%$$###@#@#@####$$%*%%%$##@#@#@#@###$$%*%%%$##@#@#@#@###$$%**%%$##@#@#@#@###$$%***%%$$####@#@##$$%%***%%$$#####@###$$%%***%%$$###@#@###$$%****%%$$$########$$%%*",
-"%%$$#####$$$#####$%*%%$$#####$$$#####$%*%%$$#####$$$#####$%*%%$$#####$$$#####$$*%%$$#####$$$#####$$*%%$$#####$$$#####$%*%%%%$$%$%$$$$$$$%%%*****%$#@@@@#$%%*******%%%$$$$$$%$$%%%%***%%%$%$$$$$%$%%$%%***%%%$%$$$$$%$$%$%%***%%%$%$$$$$%$%%$%%*****%%%%%$%$%$%%%%******%%%%$$$%$$%%%%%*****%%%%$%$%$%$%%%%*****%%%$%$$$$$%%%%***",
-"************************%%%%$$$%$%%%%*******%%%$$$%%%***************%%%$$%%%*********%%$$#$$$%**********%%%%$$$$%$%%%*****************************************************%*%%%%*%******%%$$$$%%%***************%%%$%$%*%********%%$$##$$%***********************************%%%$%$%*********%********************%%%%%%%*******",
-"**%%%%%%%%%%%%**********%%###@@@@###%%*****%%#@@@##$%**************%$$#@@#$%********%%$#OOO@#$%%********%%##@#@@@###%%%*********%**%%**********************************%%%%$$$$%%******%%$@@@##$%%************%%%$#@@#$%********%%$#OOO@#$%%************%*%*%***************%%$#@@$$%%*****%%%%%%%****************%$$###$%%*****",
-"%%$$#######$$%%%*******%$#@OooooOO@@#%%****%$#oooO@#$%************%%$@@oo@#$%*******%$#OoXXO@#$%******%%$#@OooooOO@@$$******%%%%%%%%%%%*****************************%%%$$####O@@$$%****%$@oooO@#$%************%%#@@oo@#$%*******%$#OoXXO@#$%********%%%%%%%%%%%************%%#@@oo@#$%***%%$$#$$$%%%************%%$@Oooo@$$%****",
-"$$@@OOOOOOO@@##%%%***%%%#@..&&&.. ..@$%***%%#@. .@#%%**********%%#OoX&&oO#%%*****%%#OX&&&..@#%%*****%%#@..&&&.. ..@$%****%%%#@$$###$$%%*************************%%$$#@@OOOoXoo@$%***%%#@. .@#%%**********%%#OoX&&oO#%%*****%$#OX&&&..@#%%******%%$#@$$$@#$%%%*********%%#OoX&&oO#%%*%%##@O@O@#$$%**********%%$@OXX.XOO#$%%**",
-"#@OoXXXXXXXooO@@$%%***%##O. &&& .@#%***%%#O & o@$%**********%$@o..&&XO@%******%$@XX+++ .o@$%%****%$#O. &&& .@$%****%$#@O@@@OO##$%%*****%%%%******%%%%*%***%$#@OooXXXX..XO#$***%%#O & o@$%%********%%##o..&&XO@%%*****%$@XX+++ .o@$$%*****%$#@O@@#OO@#$%%******%%%#@o..&&XO@%%*%#@ooXXooO@#$%*********%$@OXX...XoO#$%**",
-"#..&+++++++&&XXo@#%*%%$@OX +++ & .O#%****$#O &&& XO#$%********%$#OX..+&XO@%%****%$#OX.+++ XO#%%***%$#Oo +++ & .@#%***%%#@ooOoOXXO@#$%****%%$%$%%%**%%%$%%%*%%$@@o. ++++&+++o@$***%$@O &&& XO@$%%%****%%%$@OX..++Xo@$%%**%%$#oX.+++ XO@$%%**%%$#@ooOOooXO@@$%%***%*%%##OX..++Xo@$%*$#O&&&+& ..@#$%*%*****%$#@X&+++++&oO#$%*",
-"@..++++++++&&..XO@$*%$#oX.&++++++..XO#$***%%#@X.&+&.X@$%%******%%#@o&&+ .oO#%%*****$#o&& &&.Xo$%%**%$oX.&++++++..o@$%***%$@O&&.X.&&.Xo#$**%*%$####$%%%$##@#$%*%$@OXX ++++++++Xo#*%%$#@oX.&+&.XO@$$%%**%%$#@OX&++ .Xo@#%%**%$#OX&& +&.XX#$%**%$#Oo&&X.X&&..X@$%**%%$$#@OX&&+ .Xo@#%*$@o&++++ .O@#$%%****%%$@oX+++++++Xo@$%*",
-"OX.+++&&&&&&&+++Xo#*%$OX..&&+++++...o@$**%*$#Oo.&&&..o@$%%****%%$@oX+++ .XO#$%***%%#@o&& & +&.XX#%%*%%#oX.&&+++++.XX@$%**%%#@o&&...&&..X#$%**$$@X.X@##$##@.XX@$*$#O &&++&&&+++++.X@*%%#@oXX.&+&..XOO@#%*%%#@OoXX+++ XXO@#$*%$#OoX&+ & +&...O@$*%$#OXX+&...&&...O@$*%%##@OoXX+++ ..Xo@#*$@o&&&++& .X@@$$%%*%*$#X..++. ++..X@%*",
-"OX.+++&&& &&&+++.X@*$#O...+++++++...oO#**%%$@OX.&+&..oO@$$%**%%$@Oo.+++..Xo@$$***%$#OX&& &++..X@$%*%%#o..&&+++++..o@#%**%$@OX&+...+& ..@#%*%%#O...oO@@@Oo...O#*$@o &&++&&&+++++.X@*%#@oX...&+&..XXXO@#*%#@OXX..+++ ..XXo@#*%#@oX.&+ ++ ..oO#*%#@oX.++...&& ..XO#*$$@OoXX..+++ .XXo@*$@o&&&++& ..oo@#$%**%$@X. ++ ..++ .X@$*",
-"O..+++&&&&&&&+++.XO*$@o&++&&...&&+++..@*$#O &&++&&&&&+++Xo#*$#O &&++&&&&&+++Xo#*$#o &&++&&&&&+++Xo#*$#o&&+++ &&&&+++Xo#*$#o&&&++&&&&&+++Xo@*%$@O. XXoooXX .o#*#OX&&&++&&&+++++.XO*$@O&&&++...&&++&..@*$@o&&+++...&&++&..@*$@o&++++...&&+++..@*$@o&&++&.X.&&+++..@*$#..&&&++ ..++++&..*$#o&&&++&&& .XXoO@#*%%#@.. ++ . ++ ..@$*",
-"@X.+++ .....+++& O*#OX&++&&...&&+++ .@*$@o &&++&& &&+++.X@*$@o &&++& &&&+++.X@*#@o&&+++& &&&+++.X@*#@X&&+++& &&&+++.X@*#@o&&+++& &&&+++.X@*%$OX+++&&XX.&&++&o@*#oX+++ &&+++& o*$OX&++++..X&&+++ .@*$@X&++++... &+++ .@*$OX&++++.X.&&+++ .@*$OX&++++.X. &+++ .O*#@..&&+++.. +++++ .*%@O. +++++++++&Xo@**%$@.. ++ ++ ..@#*",
-"@o.+++ .X.X.+++& o*#OX+++++ . &+++ .O*#OX&&&++ &&+++.XO*#OX&&&++ &&+++.XO*#OX&&+++ &&+++.XO*#OX&+&++ &&+++.XO*#OX&++++ &&+++.XO*%$@X&+++&...&&+++o#*@X.+++ &&+++& o*#OX+++&&.X.. +++..O*#OX+++& .XX +++..O*#OX+++&&..X. +++..O*#OX+++&&.XX. +++..O*#O. +++&&...&&+++..*%#O. ++++++++++.X@**%#@.. ++ ++ ..O#*",
-"O. +++++ .X &&&&o*#oX+++++ . +++..O*#o.+++ .XXX..+++& o*#oX+++ .XXX..+++& O*#o.+++ XXX..+++& o*#o.+++ ..XX..+++& o*@o.+++ XXX..+++& o*%$#OX..+++++++..XO#*@X.+++..+++ &&&&&o*#OX+++ .XOoX.+++.XO*#oX+++ .XOoX.+++.XO*#oX+++ .XooX.+++.XO*#oX+++ .XooX.+++.XO*$#OX&&+&&...&&+++Xo*%#@.. ++.....&&&&&o**%$@.. +++++++ ..O#*",
-"O. +++++ .X. &&&X*#OX+++++&&&..+++.XO*@o.+++ .XooXX+++& o*@X.+++..XooXX+++& o*@o.+++ .XooXX+++& o*@o.+++ .XooXX+++& o*#o.+++ .XooXX+++& o**%#Oo..+++++++.XX@$*@X.+++..+++ &&&&&X*#oX+++ .oOOXX+++.X@*#oX+++ .oOOoX+++.X@*#oX+++ .oOOoX+++.X@*#oX+++ .oOOoX+++.X@*%#OX&&&&&...&&++&XO*%#@.. ++.....&&&&&o*%%#@.. +++++++ .o@*",
-"O. +++++ .XX &&&&X*@oX+++++&&+..+++.X@*@X.+++XoO##Oo &&&X*#X.+++XoO##Oo &&&X*@X.+++.oO##Oo &+&X*#X.+++.oO##Oo &&&X*@o.+++XoO##Oo &&&X*%%$#oX.+++++++.XX#$*@X.+++..+++ &&&&&o*#oX+++..o@OoX+++.X@*#OX+++ .oOOo.+++.XO*#OX+++..o@OXX+++.XO*#OX+++ .oOOo.+++.XO*%$#OX..++ ++..XO#*%#@.. ++.X.X.&&&&&o*%%#@.. +++++++ .o@*",
-"O. +++&&...XX &&&X*#OX+++&&+++..+++.X@*@X.+++.o@##@o &&&X*@XX+++.o@#$@o. &&&X*@o.+++Xo@##@o &&&X*@XX+++Xo@##@o &&&X*@X.+++.o@##@o &&&X***$#OX.&&+++&&.XO#%*@X.+++. +++.. &&+&X*#oX+++..o@OXX+++.X@*#oX+++..o@OoX+++.X@*#oX+++..o@@XX+++.X@*#oX+++..O@OoX+++.X@**%$@X..++& &++.XX@$*%#@.. ++..X..&&&+&X**%$@.. ++...&&+++Xo*",
-"O..+++&&..XXX &&&o*#oX+++ +++ &+++.X@*@X.+++Xo@#$@o &&&o*@X.+++Xo@##@o.& &&o*@X.+++.o@$#@o &&&o*@X.+++Xo@$#@o &&&X*@X.+++Xo@$#@o &&&o*%*$#OXX&&+++&&.oO@$*@X.+++..+++..&& +&o*#oX+++..O@@XX+++.X@*#OX+++..O@@XX+++.X@*#OX+++..O@OXX+++.X@*#oX+++..O@OXX+++.X@**%%$#OX&&+++& XO#$%*%#@.. ++.....&&&&&o*%%#@.. ++... &+++.X*",
-"@o.+++ .XXooX&&&&&X*#oX+++ &+++ +++.X@*@X.+++.o@##@o &&&X*@X.+++XX@##Oo &&&X*@X.+++XoO##@o &&&X*@X.+++.o@##@o &&&o*@X.+++.o@##@o &&&X**%$@.. ++&&&++ .X@$*@o.+++++& ..+++&&X*#OX+++ .oOOoX+++.X@*#OX+++ .o@OoX+++.X@*#oX+++ .o@OoX+++.X@*#OX+++ .o@OoX+++.X@***%%#@o&&+++&&oO$%%*%#@.. +++&+&&+++ .o*%%#@.. ++.X...+++.o*",
-"@oX+++ XXXXX&&&&&o*#oX+++ +++++.X@*@X.+++..oOooX&+&&&o*#o.+++..oOooX&++&&o*#X.+++..oOooX&&+&&o*@o.+++..ooOXX&+&&&o*@X.+++..oOooX&++&&o*%$#O.. ++&&&++ ..O#*@o.+++++& ..+++&&o*#oX+++..OOOo.+++.X@*#OX&++..oOoo.+++.X@*#OX+++..oOOXX+++.X@*#oX+++..oOOX.+++.X@****%$@oX.+++.XO#$%**%#O.. ++++++++++..@*%%#O.. ++...X.+++.o*",
-"#XX+++ ..XXX.&&&& O*#OX+++ & +++++.XO*#o.+++..XXXX.&++& O*@o.+++..XXXX.&+&& o*#oX+++..XXXX.++&& O*#oX+++..XXXX.+++& O*#o.+++..XXXX.+&+& O*%$#O.. ++&&&++ .o#*@o.++++&& ..+++& O*$@X+++..XXXX.+++XX#*#@X&++..XXX..+++.o@*$@X+++ .XXXX.+++.X@*$@X&++ .XXXX.+++XX#****%$@OX.+++.XO@$%**$#O. ++++++++++.X@*%$#O.. +&.....+++.X*",
-"@X.+++& .... +++.XO*#oX+++ & +++++.X@*#OX&&&+&... +++.XO*#OX&++&&... +++.XO*#OX&&+&&... .+++.XO*#OX&&&+&.... +++.XO*#OX&&&+&... .+++.XO*%$OX+++& .X. ++&o@*#oX+++++ +++.XO*$@o &&++.... +++Xo#*$@o &&++.....+++Xo#*$@o &&&&.... +++XO#*$@o &&+&.... +++Xo#****%$@o..+++..o@#%%*$@o. &++&&&&&..XoO#*%$@o. &++ &+++.o*",
-"Oo.+++&&... +++XX@*#oX+++ &...+++++.X@*$@o&&+++ . +++.X@*$@o&+++& . +++.X@*$@o&&&++ . +++.X@*$@o&&++& . +++.X@*$@o&&+++ . +++.X@*%$OX+++ .XXX. +++O@*#OX+++++ &+++.X@*$#O &&&+.. +++XO#*$#O &&+&... +++XO#*$#O &&++... +++XO#*$#O.&&++.. +++XO#**%%$@OX. +++ .XO@$%*#OX &++&&&& XXo@#$*%#@X &++& &&&+++.X*",
-"O &++++++++++& XO#*#XX+++++... &+++.X@*$#OX..&&+++++ .oO#*$#OX..&++++++& oO#*%#OX..&++++++ .oO#*$#OX..&++++++ .oO#*$#OX..&++++++& oO#*%$#OX..XoOOOoX..XO#*#OX&&&+++++++& oO#*%#@X..+++++++&& X@#*%#@X..+++++++&& X@#*%#@XX.+++++++&& X@#*%#@X..+++++++&& X@#**%%#o..+++++++.XX#%*#oX+++++&&&XXoO##%%*%#o.+++++&&&+++++XO*",
-"O &++++++++++ .O@$*#XX+++++... +++Xo@*%$#OX.&&+++++ ..O@$*%##oX.&&+++++ .O@$*%$#OX.&&+++++ ..O@$*%$#OX.&&+++++ ..O@$*%$#OX.&&+++++ .O@$**%#@oXXO@###@OXXX@$*$@o&&&+++++++ .O@$*%%#OX.+++++++& o@$*%%#OX.+++++++& O@$*%%#oX.+++++++&& o@$*%$#OX.+++++++&& O@$**%%#o..+++++++..o#%*#o.+++++&& XO@#$%%**$#oX+++++ &+++++XO*",
-"@.&++++++++++ ..@#%*#OX+++++XXX. +++XO#*%%#@oX&&+++++..X@$%**%#@oX&&+++++...@#%*%%#@oX&&+++++..X@$%*%%#@oX &+++++..X@$%*%%#@oX&&+++++...@#%*%*$#OOO#$$%$$#OOO$$*$@o &&+++++++...@#%*%%$@oX+++++++& .@#%*%%$OoX+++++++& .O$%*%%$OoX+++++++ .@#%**%$OoX+++++++ .O$%**%%#oX.+++++++.Xo#%*#OX+++++ .O#$%%****%#oX+++++ +++++o@*",
-"@OoXXX.XX.XXXoo@#%%*$#OoXXXXoOOOoXXoO@$**%%$#@oXXXXXXoO##%%*%%%##@oXXXXXXoO@#%%**%%$#OOXXXXXXoO##%%**%%$#@oXXXXXXo@@$$%**%%$#@oXXXXXXoO@#%%***%%$$$%%%*%%%$$$%%*%#@....X.XXXXoO@#$%**%$$@OoXXXXXXoo@#$%**%%$#OoXXXXXXXOO#$%**%%$@OoXX.XXXoo@#$%**%%$#OoXXXXXXXOO#$%***%$#@oXXXXXXXoO#$%*$#OoXXXXXoO#$%%*****%$#OoXXXXXXXXXXXo@#*",
-"$#OOoOoooOooO@@$$%%*%$@@OOO@@##@@@@@#$%***%%$##OOoOO@##$%%****%%$#@@OooOO@##%%%***%%$#@@OoOO@##$%%****%%$#@@OoOO@@#$%%****%%$##OOooOO@##$%%****%%%%%%***%%%%%%%*%#@X..ooOooOO@#$$%****%%$#OOooooO@@#$%****%$##OOooooO@@#$%%**%%%$#@OOOooO@@#$%%***%$##OOooooO@@#$%%****%$#@@ooooO@@#$%%*%$@@OoOO@##$%%*******%$@@OoOOO@OOOOO@#$*",
-"%$$#####@####$$%%***%%$$####$$%%$$#$$%%****%%%$$#####$$%%******%%%$$#####$$%%******%%%$######$$%%******%%%$######$%%%******%%%$$#####$%%%*******%*%*******%%****%%$##@@@#####$$%*******%%$$#######$%%%******%%$######$$%%%*****%%$$#######$%%%******%%$######$$%%%****%%%%$$#####$$%%%**%%$$#####$%%%********%%$$######$####$%%*",
-"*%%%%$%%$%$%%%%%******%%%%%%*%%%%%%%%*******%%%%%%%%%%%*********%%%%%%%%%%%*%********%%%%%%%%%%*********%*%%%%%%%%%*********%%%%%%%%%%%*************************%%%$$$$$$%%%%%%%*********%%%%$%%%%%*********%%%%%%%%%%%%********%%%%$%$%%%%*********%%%%%%%%$%%%********%%%%%$%$%%%%******%%%%%%%%%************%%%%%%%%%%%%%%%**",
-"*****%%%%%********************%%*%**************%%%%******************************************************%%%%%$%***************************************************%%%%%%********************%%%%%************%%%%%*********************************%%%%%********************%%%%%%************%%%%****************************",
-"****%%%$$%%%****************%%%%$$%%***********%%%$$%%***********%**%*%**%*******************************%%$###$$%%*************************************************%%%$$%%%*****************%%%$$$%%**********%%%$$%%******************************%%%$$%%%*****************%%%$$%%%%********%%%%$$%%**************************",
-"**%%%$####$%****************%$####$%%********%%$####$$***********%%%$%$$%%%***************%*************%%$#@OO@#$%***********************************************%*$$####$%*****************%$####$$%********%%#####$%***********%****%**%*******%%%$####$%*****************%$####$%%********%$####$$%***********%****%*%******",
-"***%@@O..@#$%%***********%%%$@OO..#$%%******%%$#@X.X@#%%*******%%%#@@@##@#$%%********%%%%%%%%%***********$#XX .O#$%***********************************************%#@O..@#$%%*************%%$#@..O@#%%******%%#@X.X@#$%*********%%%%%%%%%%********%@@O..@#$%%*************%%$#@..o@#%%*****%%$#@X.X@$%%*********%%%%%%%%%%*****",
-"*%%%#Oo..oO#$%***********%%##ooX..##%*******%$#Oo...O#$%******%%$#@ooooooO@$%%*****%%%$$$$$$$$%%*******%%$@X.&& O@$%%********************************************%%%@Oo..oO#$%*************%$#@o..oO@%%*****%%$@O...o@#$*******%%%$$$$%$$$%$%%***%%%#Oo..o@@$%*************%$#@o..oO@%%*****%$#Oo...O@$%*******%%%$$$$$$$%%%****",
-"**%%@OX XoO#$%**********%$#OXX...@#%%*****%%#OoX .XO#$%****%%$@OoX.XXXXoO#$%****%%$##@@######%%******%%#O..&&&o@#$*********%******%****************%***%********%%@OX XoO@$%***********%$#@oX XO@%%*****%$#OX. Xo@#%%****%%$##@#######$%%%***%%@OX XoO#$%***********%$#@oX XO@%%****%%#OoX oO#%%*****%%$##@@######%%***",
-"**%%#@o && .O#%%********%%#OX&&&.X@#%%*****%$@O&++++.X@$%****%$#XX.++++++&XO#%%***%%@oo..OOO..#$%******%%#O.&. ...#%%*****%%%%%%%%%%%%%%%********%%%%%$%%%%%******%%$@o && .@#$%*********%%#@.. &&o@#%%****%%#@..+++&&O@$%****%%@Oo..O@O..OO#%%***%%#@o & .@#%%*********%%#@...&&o@$%%****%$@O&++++.X@$%*****%%@Oo..OOO..#$%***",
-"**%%$@o && o@$%*******%%#@XX+++.X@$%****%%$#OX&++++..O#%%***%$@X. ++++++&XO@%***%%#OoX..oXo .@#%%*****%$@o & ..X@$%%****%%$$#$$$$$$#$$%%%****%%%$#$#$##$$$%%****%%#@o &&& o@#$%*******%%#@o. &&o@#%*****%$@O. +++&&o@#$%**%%$OoX..ooo..oo@$%***%%$@o&&&& O#%%********%%#@o. & O@$%****%%#@X+++++..@$%%***%%$OoX..oXo .@#%%**",
-"**%$#Oo..&&&oO#%%*****%%$@O..& XX@$%*****%$Oo. ..& O#$%**%%#O. &&& .X@#%%**%$#oX.. .....O@$%****%$#@X. &&&Xo@$%***%%$@OOOO@@@OOOOO#$%*%*%$$#@OooOOOO@@$$****%%#@o..&&&.o@#$%****%%$#@oX&&&..X@#$%**%%%#@X & .oO$%**%%#OoX .... XXO#%****%$@o..&& o@$%*******%%$@oX&&&XX@#%%****%$OoX & .@#%%***%%#OXX .....@#%%**",
-"*%%$@OX..&&&Xo@#%%***%%##OX. && .oO#%%***%$#oX. .& o@$%***$#O. & &&& .XO#%***%$#oX. .. .o@$%***%%$@oX &&&&XXO#%%**%$@OoXXXoooXXXXXO@#*%%$#@OoXXX.XXXXo@#%**%%$@OX..&&&.XoO#$%**%%$#@oX.&&&..Xo@$%***%$@oX&& & .Xo#$**%$@oX. .... .Xo@$***%%#@o..&& X@#%******%%$#oX.&&&Xo@$%****%%$OX. & . .@#%****%%#OX. .....O#%***",
-"*%$#OXX..&&&.XO#$%***%$#OoX & .Xo@$%***%#@X..&&. &&XO#%%*%%@O. & &&& oO#$**%%#@X..&& & o@#%%**%$#OX. &&&&.Xo@$%%*$#OX....XX.X...XXO@*%#@OoX........XXo@$**%#@OXX..&&&..XXO@$**%#@OXX..&&&..XXO@$*%%#@OXX&& & ..XO#*%%#@X.. &...& ..XO#***%$#OX..&&&XO#%%*****%$#Oo..&&&Xo@$%****%%#oX. & . .@#%****%%#oX. & . ..@$%%**",
-"%%#@. &++++++&XO#%%*%%$O.&&++++++&oO#$%*%%#O.&&+++++++Xo#$%*%%@o &&+++++++Xo#$%*%%#O &&+++++++Xo#$%*%%#@ &++++++&XO#%%*$OX+++++++++++++ O*$#O ++++++++++Xo#*%$#O. &+++++++& O#*%$#O. &+++++++& O#**$#O &&+++++++&& O@*%$@o. &+++++++&& O@**%%$oX.+++++XO#%******%$oX.+++++Xo#%*****%%#o..+++++Xo@$%****%%#o..+++++Xo@$%***",
-"%%#O &&+++++++Xo@#%*%%#O &&+++++++Xo@$%*%%#o &&+++++++.o@#%*%$#o&&&+++++++Xo@#%*%$#O &&+++++++XX@#%*%%#O &&++++++&Xo@#%*#OX+++++++++++++& X*$@o &&++++++++++.o@*%$@o &&+++++++&& oO*%#@o&&&+++++++&& X@*%$@o &&+++++++&& X@*%#@o&&&+++++++&& X@***%$oX.+++++Xo#$%*****%$OX.+++++Xo#$%****%%#oX.+++++.o@$%****%%#oX.+++++.o@$%***",
-"%$#o. & . ++..X#%*%$@o. & . ++..X#%*%$@O & ++..X#%*%%#O. . ++ .X#%**$@o. & ++ .X#%*%$#o. & ++..X#%*#@X && +++ ++X*#XX+++&&...&&+++.X@*%#OX+++&&...&&+++Xo*%#XX+++&&...&&+++Xo*%#OX+++&&...&&+++.o*%#XX+++&&...&&+++.o***%%#@XX.+++Xo#%******%%#@XX.+++Xo#$******%$#OXX.+++Xo@$%*****%$#Oo..+++Xo@$%***",
-"%$@o & .++ .X@$**$#o & .++ .X@$*%$@O. & . .++ .X@$*%$@O..& .++ .X@$*%$#o & . .++ .X@$*%$@O & .. ++ .X@$*#OX & +++ .. ++X*@o.+++ .XXX +++.o@*%@OX+++&&. .&&+++.X*$@o.+++&&. .&&+++.X*%@OX+++&&. .&&+++.o*$@o.+++&&. .&&+++.o***%%$@oX.+++Xo@%%*****%%$#oX.+++Xo@%%*****%%$@oX.+++Xo#%%*****%%#@OX.+++Xo#$****",
-"%$@o & . ++ ..@#*%$@o & . ++ ..@#*%$@o & . ++ ..@#*%$@o. . ++ ..@#*%$@o & . ++ ..@#*%$@o & ++ ..@#*#OX && &+++ . ++X*@X.+++.XXOooX .XO#*$@XX+++&&...&&+++.X*$@X.+++&&...&&+++.o*$@XX+++&&...&&+++.X*$@X.+++&&...&&+++.X****%%$Oo.+++Xo#$*******%$#@o.+++Xo#$*******%%#Oo.+++Xo@$*******%%#Oo.+++Xo@%%***",
-"%$@o &&+++++++ ..@#*%$@X &&+++++++ ..@#*%$Oo&&&+++++++ ..@#*%$@o &&+++++++ ..@#*%#@o &&+++++++ ..@#*%$@X &&+++++++ ..@#*@X.+++++++++++++++X*@X.+++.XoOOoX. .o@#*$#X.+++++++++++++.o*$@X.+++++++++++++.o*$#X.+++++++++++++XX*$@X.+++++++++++++.o*****%$@oX+++XX#$%*******%$@oX+++Xo@$%******%%$@oX+++Xo@%%*******%$@oX+++Xo@%%***",
-"$#OX&&&+++++++ ..O#*$#OX&&&+++++++ ..O#*%#OX&&&+++++++ ..O#*%#OX&&&+++++++ ..O#*%#OX&&&+++++++ ..O#*$#OX&&&+++++++ ..O#*OX.+++++++++++++++X*#X.+++..ooOoo.X.XO#*$@X.+++++++++++++.o*$@X.+++++++++++++.X*$@X.+++++++++++++.X*$@o.+++++++++++++.o****%%$Oo.+++Xo@$%******%%$Oo.+++.o@$%******%%$Oo.+++Xo@$%%*****%%#@o.+++Xo@$%***",
-"%@X.+++ ....++ ..@#*%@o.+++ ....++ ..O#*$#X.+++ ....++ ..O#*$#o.+++ ....++ ..O#*$@X.+++ ....++ ..O#*%@o.+++ ....++ ..@#*o&&&&&..+++&&&&&&&X*#oX+++ .XX.X...XX@*$@X.+++++&&&&&&&&.o*$@X.+++++&&&&&&&&.o*$@X.+++++&&&&&&&&XX*$@X.+++++&&&&&&&&.o***%%$#Oo.+++.X@#$%*****%$#Oo.+++XX@#$%*****%$#Oo.+++.XO#%%*****%$#OXX+++.XO#$%**",
-"$#o.+++. ..++ ..O@*$@o.+++. ..++ ..O#*$@o.+++. ..++ ..o#*$#X.+++. ..++ ..O#*$#o.+++. ..++ ..o#*$#X.+++. ..++ ..o@*o&&&&+..+++&&&&&&&X*#OX&&&+++&&&&+++&.@*$@o.+++++&&&&&&&&.X*$@X.+++++&&&&&&&&.X*$@o.+++++&&&&&&&&.o*$@X.+++++&&&&&&&&.o***%%#@oX.+++.Xo@#$%**%%%#@oX.+++.Xo@#$%**%%%#@oX.+++.Xo@#$%**%%%#@oX.+++.Xo@#$%*",
-"$@X.+++ ....++ .o@*$@X.+++ ....++ .o@*%@X.+++ ....++ .o@*$@X.+++ ....++ .o@*$@X.+++ ....++ .o@*$@X.+++ ....++ .o@*o&&&&&..+++&&&&&&&X*$@O&&&++++++++++ @*$@o.+++++&&&&&&&&XX*$#o.+++++&&&&&&&&Xo*$#o.+++++&&&&&&&&.o*$#o.+++++&&&&&&&&.o*%%%#@OXX.+++..Xo@#$**%%#@OXX.+++..Xo@#$**%%#@OXX.+++.XXo@#%**%%#@OX..+++.XXo@#%*",
-"$@o.++++++++++++&XO*%@o.++++++++++++&XO*$#o.++++++++++++&XO*$#o.++++++++++++&XO*$@o.++++++++++++&XO*$#o.++++++++++++&XO*o&&+++++++++++++++X*%#@oX. &+++&&& XO@*%#OX+++++++++++++Xo*$#OX+++++++&+++++.o*$#OX&++++++++++++Xo*%#OX+++++++++++++.o**%$#. &&+++&& .@$*%%$#. &&+++&& .@$*%%$#. &&++++& .@$*%%$#.. &&++++& .@$*",
-"%#o.+++++++++++++XO*%#o.+++++++++++++XO*$#o.++++++++++++&XO*$#o.+++++++++++++XO*%#o.++++++++++++&XO*$#o.+++++++++++++XO*O &+++++++++++++++o**%$#@X.&+++&& ..O#$*%$@o&++++++++++++Xo*%$@o&++++++++++++Xo*%$#o &&++++++++++Xo*%$@o&++++++++++++Xo*%%#@. &&+++++&& .@#**%#@. &&++++++& .@#**%#@. &&++++++& .@#**%#@. &&+++++&& .@#*",
-"$#@o &&&&&&&&&& o@*$#@o &&&&&& && o@*%#@o &&&&&& && o@*%#@o &&&&&& && o@*$#@o &&&&&& && o@*%#@o &&&&&& && o@*OX.&&&&& ..&&&&&.oO***%%#O..+++& XO@$%%*%$#OoX. &&&&&&...o@*%%#OoX.&&&&&&&..Xo@*%$#@oX. &&&&&&..XO@*%$#@oX. &&&&&&..XO@**%$@.. &&&&&&& .O#*%%$@.. &&&&&&& .O#*%%$@.. &&&&&&& .O#*%%$@...&&&&&&& .O#*",
-"%$@O. &&&&& && o@*%$@O.. &&&&& & o@*%$@O. &&&&& & O@*%$@O. &&&&& & o@*%$@O. &&&&& & o@*%$@O. &&&&& & O@*#oX &&& ...&&& oO@***%%#OX.+++& o@$%%***%$#@oX. &&&&&.Xo@#*%%$#OoX &&&&&&.XX@#***$#@Oo. &&&& .XX@#**%$#@oX. &&&&.XXO#**%$@X..&&&&&&& ..@$**%$@X..&&&&&&& ..@$**%$@X..&&&&&&& ..@#**%$@X..&&&&&&& ..@#*",
-"%%$OX.. . ..@#**$$@... .. ..@#*%$$OX.. .. ..@#*%$$OX.. .. ..@#*%%#@X.. .. ..@#*%$$OX.. .. ..@#*#@o.. XXX. .O@$***%$#O &+++..O#$%*****%$$@@.. .XoO#$***%$#@O. .XoO#%***%%$@O.. .oo@#%***%$$@@.. .XoO#%*%%$#oX. & ..X#$*%%$#oX. & ..X#$*%%$#oX. & ..X#$*%%$#oX. & ..X#$*",
-"*%$#@@OoooooooOO@#$**%%##OOooooOoOOO@#$**%%#@OOooooOoOOO@#$**%%#@OOooooOoOOO@#$**%%#@OOooooOoOO@@#$**%%#@OOooooOOOOO@#$*%#@@OOOOOO@OOOO@#$$****%#O &+++.o@$%*******%%$#@@OoOoO@##%%****%%##@OOoooO@@$$%***%%%$#@OOooOO@#$%%****%%$#@OOOoOOO#$$%***%$#@OOoooooOO@@#%***%$#@OOoooooOO@@#%***%$#@OOooooooO@@$$***%$#@OOooooooO@@$%*",
-"**%%$##@#@@@#@##$%%***%$$$##@#@#@###$%%***%%$$##@#@#@###$$%***%%$$##@#@#@###$%%**%%%$$##@#@#@###$%%***%%$$#@#@#@@###$%%*%%$#@###$#######$%****%%$#OoXXoO@#%%********%%$$##@####$%%******%%$###@###$$%%******%%%$###@###$%%******%%$$###@##$$%%****%%%###@@@@@@##$%%***%%%###@@@#@@##$%%***%%%###@@@@@###$%%***%%%###@@@#@###$%%*",
-"**%%%%%$$%$$$$%$%%*****%%%$%$$$%$%$%%%****%%%%$%$$$%$$%$%%****%%%%$%$$$%$%$%%%****%%%%$%$$$%$$$%$%****%%%%%$$$$%$$%$%%%**%%%%$$$%%%$$$%%%%*****%%##@OO@@$$%***********%%$%$$$%%%*%*******%%%$$$$$%%%%********%%%%$$$%%%%**********%%$$$$$%$%*%*****%%%%$%$$%$$%%%******%%%%$%$$$$$%%%%*****%%%$%$$$$$$%%%%*****%%%%$$$$$$$%$%%**",
-"**%%%%$$%$%%$%$%*%*********%*%*%*%************%*%**********************%**%************%%%%$%%*************%*%%%%%************************************************************************%***********************%%*%***************%%%*%**************************************%*%******%%%$%%%%*******************************",
-"*%%$##########$$%%********%%%$%$%%%%*********%%%%%%%******************%%$%%%%*********%%$##$$%%************%%$%$%$%%%%*****************************************************************%%%%%%%%*****************%%%$$$%%**********%%$%$$%%***********************************%%%%$%%%***%%$####$%%******************************",
-"%$#@@OooXooOoo@@#$%****%%%$###@###$%%%*****%%$$##$$%%***************%%$####$%********%$#@Ooo@#$%*********%%$#@#@###$%%%****************************************************************%$####$%***************%%%###@@$$*********%%$#@##$$%********************************%*%$###$$%***%#@OooO@#$%*****************************",
-"%#@oXXX..XXX.XXO@#%*****%##@OOoOOO##%%****%%$#@OO@#$%%*************%%$@@OO@#$%%*****%$#@oXXXo@#$%*******%$$@OOooOO@@#$%******%*%**%*%%*************%*%%******************************%%$#@@O@#$%%**************$$@OOoO@$%%******%%#@OooO@#%%*********%*%*%**%*%************%$$@@OO@#$%%*$@OX.XXo@#%%***************%*%*%*%*%****",
-"$@..+++++&+&++ .@$**%%%$@O . . .oO#%%****%@Oo&&Xo@$$***********%*$#@oX++oO#%%*****%$@X.+++.X@$%%******%$@X.&&&...XX#%****%*%%$%%%%%$%%%**********%%%$%%%***************************%%@OX&&Xo@#%%**********%%%#@...& O#%%****%%%#@X.&&&o@#%%*****%*%%%$%%$%$%%%%*******%*%%$OoX++oO#%%*#OX++++&o@$%%***********%%%%%$%%%$%%%***",
-"#@. +++++&+&++& .@#**%%$@Oo&& XO@%%***%%@oX&&.Xo@$%%*********%%$@oX.++XO@%****%%$#o. +++ .o#$%****%%$#O..&&&....X#$****%$$#########$%%%******%%$#@##$%%**********%*%%%%%%%%%****%%$@oX&&.Xo@#%%********%%%$@O.. &&O@$%****%%$@O..++&XO@$%%****%$$#########$$%*******%%$$@oX.++XoO$%*#oX++++&XO#$%**********%%$##########$$%*",
-"#O. ++++++++++&&.O#**%#@OXX&&&&&& Xo@$%***%%@oX&+..XO@$%*********%$@OX..++Xo@%%***%%#@o. +++ .o@#%%***%%#@o..++& . ..@$**%%%##OOOOOOO@@@$%%******%$#OOOO@$$*********%%%$$#$#$#$$$%%*%$#OX.&+..XO@#$$%****%%$$#@Oo &&o@#%%**%$$@OX. +++.XO@$%%*%%$##@OOO@OOOO@#$$**%%%%$$#@OX..++.oO#%*#oX+++++Xo@#$$%%****%%%$#@OOOO@OOOOO##$*",
-"#O. &&&+++++++..XO#*%$@O &&&++++&XO#%%***%%#OX..++&XO#$%*******%$#OX&++ .X@#$****%$@XX&+. .++Xo@%%****$@oX&++++++.Xo#$**%%$oXX &XoX&&XXo$%****%%$#XX&& o#$%%******%%$#@@@@O@@@@#$%*$#@OXX..+&&XOO@$$%%*%%$#@@oX.&++..XO@$%*%%#@oX.++&& &&oO#$%*%$#OX..& XXX++oO@$%*%%##@@Ooo&&+ ..Xo@#*$@o. ++..XXoO@#$%%*%$$@@oo++XXX& ..X@#*",
-"#@. &&+++++++..oO#*$#OX &&+++++&&XO#$%**%%$#Oo. +++XX@@$%*****%$#OoX+++ .XO#%%***%$OX.&+. .++.X@$%**%%$OX.&++++++.XX#%**%%#X..&&.X.&&.Xo#%*****%$@X.&&&o@#%*****%%$#@OooXXoXXooO@$*#@oXX.. +++.Xoo@#$%*$#@OoXX..&++..XoO@$*$#@oX..++ &&&&.oO@$*%#@o...&&X..++XXO#$*%#@OooXXX+++. .XXO@*$#O. ++&&&&&.Xo#$%*%#@OXXX++.XX&&...oO*",
-"$@X.+++ .++&& o@*$@. &&+ &&&&&Xo@$%***%$#oX&&+++&&o@#$%***%$#Oo&&&++&&XO@$%**%$#OX.&&+++&&XoO#%***%$@oX&&+++&&.XO#$*%%$#oX.&&+&&&&XXO#%****%$#O. +++XO#%%****%$#@O &&&&&&&&&.X#*@X.&&&.....&& .@#%*$@X.&&&..X..&&& .@#*$#..&&+.....&&& .@#*$@..&&&...X.&&& .O#*$#..&&& ... &&&..*%#@.. ++&&&&&..Xo#$*$#..&&&& .X.&&&&&..*",
-"$@o.&++ . ++&&&o@*#@..+++ &&&&&.o@#%*%%$#OXX&&+++&&XoO#$*%%%#@oX&&+++&&XXO#$**%$@XX.&&+++&&.XO@$**%$@OX.&&+++&&.Xo@$**%#@X..&&+++&&.XO@$****%$@O. +++XO@%%***%%#@oX&&&&&&&&&& .@*@. &&&..XX.&+&& o#$*#@..&&&..X.X&+&& O@*#O..&&+.....&+&& o#*#@..&&&..X..&+&& O@*#@..&&+ .X. &&+&..*%#@.. ++&&&+& ..o@#*#@..&&+&&X.X&&++& .*",
-"$#o.+++ . ++&&&XO*#O. +++ &&&&&.Xo@$**%#OoX.&&+++&&.Xo@#*%%#OoX.&&+++&&.Xo@#*%$#OX..&&+++&&.XoO#*%%#OXX.&&+++&&.XoO#*%$#OX..&&+++&&.XXO#**%%$#@o +++Xo@#$%%*%#OoX.&&+++&&+&&..@*O. ++&..XX.&&&& o@$*#O. &+&..XX.&+&& o@*#O. +++.....&+&& o@*#O. ++&..X..&+&&&o@*#O. &+&&..X. &++& .*%#@.. ++++++++++.X@*#O. ++&& .X.&&+&& .*",
-"$#OX &&++++++++++.o*#O..+++++&&&++&& O#*%$@o&++++&&&++++&o@*%$@o&++++&&&++++&o@*%$@o&++++&&&++++&o@*%$@o&++++&&&++++&o@*%$@o&++++&&&++++&o@**%$#OoX... .XXoO@$%*$@o&&+++&&&+++++XX@*O..+++..XXX&++++XO#*#O..+++..XX.&++++XO*#O..+++ .XX.&&+++XO*#O..+++ .XXX&++++XO*$@X.+++&&... &+++.X*%#@.. +++++&++++..O*$@. +++& .X.&&+++..*",
-"%#OX&&&++++++++++.o*#@. +++++&&&++&& o@*%#@X+++++&&&++++&XO*%#@X+++++&&&+++++XO*%#OX+++++&&&++++&XO*%#@X+++++&&&++++&XO*%#OX+++++&&&++++&XO*%$@@XX... ...XXXo@$*#@X+++++&&&+++++Xo@*@. +++ .XXX&&+++XO#*#@. +++ .XXX&&+++XO*#@. +++ .XXX&&+++XO*#@. +++ .XXX&++++XO*$@OX&&&+&...++&&&Xo*%#@.. ++.....+++&&o*$@X.+++&&... &+++.X*",
-"%@OX&&&++++++++++.X*#@..+++++&&&++&&&o@*%@OX+++++&&&+++++XO*%@OX+++++&&&+++++XO*%@OX+++++&&&+++++XO*%@OX+++++&&&+++++XO*%#OX+++++&&&+++++XO*$#OoX..... ....XXO#*@OX+++++&&&+++++.o@*@..+++ .XXX&&+++XO#*$@..+++ .XXX&&+++XO*$@..+++ .XXX&&+++XO*#@..+++ .XXX&++++XO*%#@o &&++...++&& o@*%#@.. ++.XX..&++&&o*$#OX&&&+&...++&&&XO*",
-"$#X.+++&&.... +++.X*$@oX+++&&... +++XO*$#X.+++ ..X...+++.X*$@X.+++...X...+++.X*$@X.+++...X...+++.X*$@X.+++ ..X.. +++.X*$@X.+++ .X....+++.X*$@. +++++++++++++oO*@X.+++. &&&+++++.X@*@oX+++ .XXX +++XO#*$@oX+++..XoX. +++XO*$@oX+++..XoX. +++XO*$@o.+++ .XXX. +++XO*%$#OX..++. ++..XO#*%#@.. ++..XX.& &&&X*%#@o &&++...++&& o@*",
-"$@X.+++ .X...+++.X*%@o.+++&&.X.. ++&XO*$@X.+++..XXX..+++.X*$#X.+++..XXX..+++.X*$@X.+++..XXX..+++.X*$@X.+++..XXX..+++.X*$@X.+++..XXX..+++.X*$@. +++++++++++++o@*#X.+++ .&&&+++++.o@*@o.+++ .XoX. +++Xo#*$#oX+++ .XoX. +++Xo*$#o.&++..XoX. +++Xo*$#oX+++ .ooX. +++Xo**%%#OX.++ ++.Xo#%*%#@.. +&...X. &&&o*%$#OX..++. ++..XO#*",
-"$#X.+++..XXXX.+++.X*$#oX+++ .XXX +++XO*$#X.+++.XXXXX.+++.X*$@X.+++.XXoXX.+++.X*$@X.+++.XXXXX.+++.X*$#X.+++.XXXXX.+++.X*$#X.+++.XXoXX.+++.X*%#OoXX.......X.XoO#*@X.+++& +++..+++.X@*#OX+++ .XXX. +++XO#*%@oX+++ .XoX. +++XO*$#oX+++..XoX. +++Xo*$#oX+++..XoX. +++XO**%%$@OX&+++++&Xo#$%*%#@.. ++ ..+++ .o**%%#OX.++ ++.XO#%*",
-"$@X.+++.XXXX..+++.X*%#oX+++ XXX. +++Xo*$@X.+++.XXoXX.+++.o*$@X.+++.XXXXX.+++.X*$@X.+++.XXoXX.+++.X*$@X.+++.XXoXX.+++.X*$@X.+++.XXoXX.+++.X*%$#@ooXX....XXXO@#$*@X.+++ +++..+++.X@*#OX+++ .XXX +++Xo@*%#OX+++ .XXX..+++Xo*%#OX+++ .XXX..+++Xo*%#OX+++ .XXX..+++Xo****%#OX. +++ .o@$%**%#O.. +++++++++&.X@***%$@OX&+++++&Xo@$%*",
-"$#X.+++...XX..+++.X*$@oX+++ XXX +++Xo*$@X.+++..XXX..+++.X*$@o.+++..XXX..+++.X*$@o.+++..XXX..+++.X*$#X.+++..XXX..+++.o*$#X.+++..XXX..+++.X*%%$##OXX....Xo@@#$%*#X.+++& +++..+++.X#*#OX+++ X.X +++Xo#*$#OX+++ ..X.. +++XO*%#OX+++...XX. +++Xo*$#OX+++...XX. +++Xo***%$#oX. +++.XO#%***%#@. ++++++++&&Xo#***%%#@X. +++ .o@$%**",
-"$#o.+++&&... &+++XX*$@X.+++ ..X.. +++.o*$#oX+++&&...&&+++Xo*%@o.+++&&...&&+++Xo*$#o.+++&&...&&+++XO*$#o.+++&&...&&+++Xo*$#o.+++&&..X&&+++XO**%%%$@O. +++XO@$%%**@XX+++++ . &++++XO#*#OX&++&&...&&+++.o@*%#OX&++&&...&&+++.o*%#@X+++&&...&&+++.o*%#OX&++&&...&&+++.o**%$#@oX&&+++.o@$%***%#O.. +++++++&&&XO$****%#Oo +++..O#$%**",
-"$#oX+++&&...&&+++Xo*#Oo.+++ ..X. +++.X*%#o.+++&&...&&+++XO*$#oX+++&&...&&+++XO*$#oX+++&&...&&+++XO*$#oX+++&&...&&+++XO*$#oX+++&&...&&+++XO****%$#O. +++XO#%%***#X.+++++ ..&&+++XO#*$@o&++&&...&&+++.XO*%$@o&++&&...&&+++.X*%$@o&++&&...&&+++XX*%$@o&++&&...&&++&.X**%$@oX.&&+++Xo@$%***$#O. ++.....XXO@#$**%%#OoX&&+++.o@$%%**",
-"%#@X. &+++++++& X@*#o &+++++...+++++& *%#@o &+++++++& o@*%#@X.&&+++++++& o@*%#Oo &+++++++& o@*%#@o &+++++++& o@*%#@X. &+++++++& .o@*****%#@..&& o@$%%***@oX++++++++++& .o@#*%#OX..++++++++++& O**$#OX..++++++++++& *%%#OX..++++++++++& **%#OX..++++++++++& *%$#O &&+++++Xo#%****$@o. ++...XXoO##%%**%$@oX.&&+++Xo@$%***",
-"%$#o. +++++++ .o#*#O&&+++++...+++++& *%$@O. +++++++ .O#*%$@O. +++++++ .O#*%%@O. +++++++ .O@*%$@o. +++++++ .O@*%$#o. +++++++ .O@****%%$@o. O@$%****@oX++++++++++ .O#$*%$@o..++++++++++& O**%$@XX.++++++++++& **%$@oX.++++++++++& *%%$@oX.++++++++++& *%$@o&&++++++XO#$****#oX&++++&&&XO@#$%%**%$#O &&+++++Xo#%****",
-"%%#@.. +++++++ ..@$*#O &+++++...+++++& **%#@.. +++++++ ..@#**%$@.. +++++++ ..@#*%%#@.. +++++++ ..@$**%$@.. +++++++ ..@$*%%#@.. +++++++ ..@$*****%%#oX...@#%%****#oX++++++++++ ..@$%*%$#Oo.++++++++++& O**%%#OX.++++++++++& **%%$OoX++++++++++& **%%#OoX++++++++++& **$@o&&++++++XO#%****#oX+++++&& o@$%%*****$@o&&++++++XO#%%***",
-"*%%#@OoXXX.XXXoO@#$*$@OXXXXXXXoXXXXXXoO*%%%#@OoXXX.XXXoO@#%**%$#@OoXXX.XXXoO@#%**%%#@OoXXX.XXXoO@#$*%%$#@OoXXX.XXXoO@#$**%%#@OoXXX.XXXoO@#$******%$$@@@@#$%*****@..&&&..X.XXXoO@#$%**%$#@OXXXX.XX.XXoO@**%%%#@OXXXX.XX.XXoO***%%#@OXXXX.XX.XXoO***%%#@OXXXX.XXXXXoO*%%@O &&&&&& o@$%****$@o&&&&&& O#%%*****%%#o &&&&&& o@$%****",
-"**%%##@OooOooO@#$$%*%#@@ooooO@O@OoooO@@***%%##OOooOooO@#$$%***%%##@OooOooO@##%%***%%##OOooOooO@#$$%***%%##@OooOooO@#$$%***%%##OOoOoooO@@$%%*******%$$##$%%%*****#X. &&XXooooO@@$$%****%%##@OooOooOoO@@$***%%%##@OooOooOoO@@***%%%##OOooOooOoO@@****%%#@@Ooooooooo@#*%%#O & .@#$%****$#O & & ..@#%******%$#@ & .@#%%****",
-"***%%$$#######$$%%**%%$$######$######$$****%%$$$#######$%%*****%%$$#######$$%%****%%%$$$######$$%%*****%%$$#######$$%%***%*%%$$#######$$%%%*****%**%%%%%%%******##OooOO@@@###$%%%******%%$####@#@###$$%*****%%$####@#@###$$*****%%$$###@#@###$$*****%%$####@#@####$**%$#@oooooOO#$%*****%$#OOooooOO#$%%******%$#OOooooOO#$%*****",
-"***%*%%%%$%$%%%%*%***%%%%$%%%%%%%%$%$%%*****%%%%%$%$%%%%*%*****%*%%%%$%$%%%%%********%%%%$$%%%%%%*******%%%%%$%$%%%%*******%*%%%$$%$%%%%%***********%%%*********%$##@###$$%%%%%%********%%%%$%$%$$$%%%%******%%%%$%$%$$$%%%*******%%%$%$%$$$%%%********%%%%$%$%$%%%***%$##@@@@##$%%*****%$$#@@@@@##$%%********%$#@@@@@##$%%*****",
-"*********************%%%%%***************************************************************************%%%$$####$###$$%%***************%*********%%%%%%%%$%%%************%%%$%%***********************************************************************************************************%$$#$$$%%%******************************",
-"********************%%%$$$%%%**************************************%*%*%**%**************************%$#@O@O@@O@OOO@#$%***********%%%%%********%%$$#####$$$%%*********%%$#$#$%%******************%***********************************************************************%%%%*%%%%******$@@OO@@#$%%%%***************************",
-"********************%##@###$%********************************%%%$%%$%$%$%%$%%*********%*%************%#@ooXXXXXXXXooO#$**********%$$#$$%%******%$#@O@O@@@@$$%*********%$#@@@#$%**************%%%%%%%%**********%%%%%*******************************%*%%%%%*%**********%%%%$$$$%%$%$%****@OoXXoO@##$$$$%%%*********%******%******",
-"*********%%%********$@X.XXo#$%%*****************************%$$##@##@#@#@###$$%*****%%%$%%%*********%$@o&++&&&&&&+++XO#*********%%#ooO##%*****%$#X........@#%%*******%$#O. .O#$%*************%$$###$$%%*******%%$$$$$%************%**%%*%%*%******%%$$$$$$$%%**%*******%$@@@@###O@#%%***O &+++..O@@oO@#$$%%*****%%%%%**%%%%%****",
-"******%%%$$$$%******@O...XXO#$%*************%%%%%%%$%*******$#@OOoOooOooOoo@@$$****%%$####$%%*******%#OX++++&&&&&+++Xo#*******%*$$OX.o@@%%***%%#@... .. O#$******%%%#@o & o@$%************%$#@OoO@#$%*****%%$##@@##$%%*****%%%%$%$%$$$%$%%%***%%%##@@@@##$$$%$%%***%%$#OoooO@OXo@#$%**o&&+++..XooXXO@@#$$**%*%$$$$$%%%$$$$%%**",
-"******%$#@@##$%%****Oo. ..oO#%%*%*%%%%****%%$$#####$$%%****#OoXXXXXX.XX.XXXO@$***%%$@@OO@#$%*******$#OX+++++&&+++++.X@****%%%%%$@o..XoO$%%**%%#@. & & o@$****%%%$#@oX&&&Xo#$$%%********%$#OoXXXoO#$***%%%$#@oooo@#$%%****%$###@#@##@@@@#$%%*%$#@ooXoooO@@#@##$$**%%#@XX.XoXo.XO@$%**o&&+++ ..XX..XXoO@#***%$#@@@#$$#@@@#$%%*",
-"*****%%#@XXXO#%*****X.+++++.X@$%%*%%$%%***%$$#OOOoOOO@$%%***#. ++++++++++++++O#***%$#X. @#%%******%@o.+++&&&&&&+++.o@*%%%%$$$##X.++.XO#%***%%#O. ++&&++XO#%**%%$#@OoX.+++.X@@#$%********%$@o++++& @#*%%%$#@O..+++XO#%%***%$@@OOoooooooooo@$%*%#Oo&&&&&..ooooOO@#**%$@o&&&&. .++XoO$%*o &+++&& &++&& Xo*%%%@Oo. O#@@.X.O#$%*",
-"****%%#@o...X@%*****o.+++++..O#$%%#####**%$#@OoXX.XXoo@$%%**@. ++++++++++++++O#**%%$@.. & o#$%******$@o.+++&&&&&&+++.X@*%$###@#@OX.++.Xo#$%**%$@O. ++&&++Xo@%**%$@OoXXX.+++..XO@#$*******%$#OX++++&&@#*%$#@@Oo. +++Xo@#$%%*$#OXXXX.XXX.X..XO#$*$@oX&&&&& .X.XXXo@*%$#@X&&&& ++.XO#%*O &+++&&& &++&&& .X**%$OoX XOOo...XO#$*",
-"****%%#X.++ .O$*****@o..+++& O@$$#Oo.X@*%%#@.. ++++++.X@$%%*@OXX....+++...XXO@$***%$@X.&&&o@$%******$OoX++++++++++++.XO*$#oXXXXooX.++ .X@$%*%$#@o. +&..++XX@$%*$@X.&&&&&+++&&& .X#*******%$@oX&&&&.o@#*$#oX... &&&&.XoO@#$*#O ++++++++++++oO$*@O &++++++++++++++O*%#@X.&&&&. .++.XX@$*@oX ++ &&++&&XX**%$OX.++.XoX+++..O#*",
-"****%$#o.++ .o$%****#oX.+++& o@##@XX..@*%#@o. ++++++..O@$%*#OXXXX..+++...XOO#$***$$OX.&&&o@$%******#OX.++++++++++++.XO*#OX....XX..++...O#%*$#@oX ++ ++.Xo#$*#@..&&+&&+++&&&&..@******%%#OX.&&&&.o@$*#OX.... &&&&.X.Xo@#*#O &++++++++++++XO#*#O &++++++++++++++o*$@O..&&&& . ++..XO#*#OX. ++ &&+++&.o*%%$OX.++..X.+++ .O#*",
-"****%$#X.++& o$%****#@X.+++& oO@@O.. .O*$@oX &++++++ .XO@$*@OoXX.X.+++.XXoO@#$***%$OX.&&&oO$%******@oX.++++++++++++..O*#o........ ++ ..O@$*#@oXX ++..++..XO#*#O..+++&&+++&&&&..O******%#@oX.&&&&Xo@$*@o... &&&&&....Xo@*@O&&++++++++++++Xo#*#O &++++++++++++++O*#Oo..&&&&. .++ ..o@*#Oo.. ++ . &&+++&Xo*%%$OX.++....+++ o@*",
-"****%%#@X &++X#$%***$@oX+++ XOOOX++ .O*#O. +++..++&&&&..O#*@.......+++..XXO@@#**%%$OX.&&&X@$%%*****o.&++++++&&+++++& o*@O+++++++++++++&X@$*XX.&&++++++&++&&& @*@o &+++&&+++&&++ o*****%$#O &&++++.o@$*@o+++++++++++++++.X*#oX.+++.... +++.o@*$#OX...++++++...XoO*oX.++++++++++++++..*#@X&&&++.....++..XO**%$#OX++ . ++++&o@*",
-"****%%#@o. ++X#$%***%#OX+++ XoooX++ .O*@o. +++..++&&+& o@*O. .....+++ ..XXoO@***%$@X.&&&oO$%******o.&++++++&&+++++& o*@O++++++++++++++XO#*X..&++++++&&++&&& O*@o&&+++&&+++&&++& o*****%$@o&&+++++.o@$*OX+++++++++++++++..*#@X.+++.XX.. +++.o@*%#@OX..++++++.XoO@#*OX.++++++++++++++.X*#OX &&++..XX.++..O@**%%#OX++ +++++O#*",
-"****%%#@oX.++.O$%***%#@X&&&++XXX..++Xo@*@X++&& .. ++..++XO*o &&&&&&++++&&&& ..**%%$OX.&&&X@#%******OX &&&&&&&&+++++ O*#OoX.. ++ .+++.o@*.. &&&++++&&++&&& o*@o &+++..+++..&&& o*****%$@o&&+++& .o@$*OX&+&&&..+++&& .oO*#OX.+++.XXX. +++Xo@*%%$#@OXX.++ XoO@$$*#@oX.&&&& . ++ ..X@*@X.+++++.XXXX&& .o#**%%#@X ++++ Xo@#*",
-"**%%$##OoX.++.o#%%**%$@O &&++.XX. ++Xo#*OX++&& .X. ++..++Xo*O &&&&&&++++&&&&&..***%$@X.&&&XO#%******@o &&&&&&&&+++++ .O*$#Oo...++.. .+++.X@*X. &&+++++&&++&&& O*@o&&+++..+++..&&& o*****%$@o&&+++& .X@$*@X&&&&&..+++&& ..O@*$@X.+++.XOX. +++Xo@**%%$$@OX.&+& XO#$%%*$#OoX&&&&. .++ ..O@*OX.+++++.XXoX&& .o@***%$@o ++++ ..XO#$*",
-"*%%##@OoXX.++.o@$%***%#O. &++.....++o@$*OX++ &..X. ++ ++.o*O. &&&&&++++&&&&...**%%$OX.&&&XO#%******@O &&&&&&&&+++++ .O*%$$@XX.++ . ++&.X@*X..&&+++++&&++&&&.@*@o &+++..+++..&&& o*****%$#o&&&++& .XO@*Oo&&&&&..+++& ..X@$*#@X.+++XoOo. +++Xo@****%%$@OX++ X@#%%**%$#oX&&&& . ++..X@#*O..+++++.XoXX&& o@**%%$@o.&++++ ..O#$%*",
-"%%$@oXX&&X.&+ .@#$***%$@OX.++ X.XoO#$*oX++& XXX.++..++..*#OooXX..+++..XXooO@***%$@X.+++XO#%%*****#@XX+++++++++++&Xo@**%$$@oX&+&&..... @*@OOXX &++..++..XO#*@o&&++++++++++++& o*****%$#OX..++++&&o@*@o &+++..+++ &XXO#$*$@X.+++XXOo..+++.X#****%%%#OX&&& X@#%***%%#Oo&&&&. .++..X@$*O &&&&++.XXXX &&&o@**%%$@oX.+++&.XO##%%*",
-"%$@oX..+&X.++ .O@$%**%%$@oX++ & XXO@#$%*oX++&& XoX.++..++ .*$##@OoX.++&.XXO@###***%$@X.+++Xo#$******$@o.+++++++++++&Xo#***%$#OX&&&&.X.XX @*$#@OX. ++ ++..X@#*@o &+++&&++++&++& O**%%%%$#@X..++++&&o@*#o &+++..+++& Xo@$%*$@X.+++XoOo. +++.o@******%$#o && X@#%%**%%$@o &&& . ++.XX#$*@ &&&&++..XXX &&&o@**%$#OX..+++&.XO#$%**",
-"$#oX+++ .X +&XO#$***%$#@X. +++.o@#$%%*OX++&&&XXoX&+&&&+ *%%$##OoX+++.XO@#$$%***%$#oX+++XX@$%*****%@OX+++ &.. +&&XO$****%$#O..++..XoO@@$*%$#@O.. ++..++ ..@$*#O. +++..+++..& ..O*%%$$$#@OoX.++++++X@*#OX.+++ .&&&++Xo@$%*$@X.+++.XoX. +++Xo@******%%#O..+&Xo#$%***%$@o&&&& . ++..o#$*#OoXX.&& .. &&o@*%##oXX++++++.Xo@$%**",
-"#OX.+++ ... +&Xo@#****%$#O..+++.X@#$%**OX++&&&XXXX&&&&++ .**%%%##XX++&.XO#$%%*****$#oX+++XX@#%%****%#oX+++ &.. &&&o@$****%%#@X.++..oO@#$$**%$#O. ++..++ ..@$*#@..+++..+++.. ..X@*$##@OOOXX..+++++&XO*$OX.+++ &&&++.XO@$*#@X.+++.XXX. +++Xo@******%%$#X.++Xo@#%%**%$@o &&&. .++.Xo#%*$#@OXX&&& X. && o@*$@OX..++++++..X@#$%*",
-"#OX.+++ .. ++.Xo@****%%#@X.+++.XO@$$%*@o&+&&&.XX.&+&&++ .***%*%#OX+++.Xo@#%%****%%#OX+++.Xo@$%****%#@X+++ &... && O#$*****%$@o.++..XO##$%***%#@...++..++ .O#*$@X.&++..+++.X..Xo#*#@OoXXXX...+++++&o@*$@X.+++. &&&++.XoO#*$@X.+++.... +++Xo@*******%$#oX++.Xo@$$**%$@o &&&. .++..o#%*%%##OX & & .. & O#*@OX...++++++..Xo@#$*",
-"OX&++++++&+++++&&.X*****%$#OX&&&++Xo@#$*#OX.+++&&....++++Xo****%$#OX+++& XO@%%%***%%#OX+++&&XO@$%%**%#@o&&&++&&..XoO@$%*****%%#@o. &&Xo@$%%**%%$@X. +&.. +++o@*%$@OoXX..+++.XO@@#$*@. &&+++++++++..o@*%#OX&++++ &&&&&o@*$@X.+++&&&++++++.o@*******%%$@o&&& O@$**%$@o &&+&&&++.Xo#%**%%$#O..+++++++.X@#*@. +++++..&&+++Xo@#*",
-"@X+++++++++++++&&..******%##o &&++.Xo@$*$@oX+++&&... ++++XO*****%#OX+++&&Xo@$%*****%$@o&++&&XXO#$%**%$@O &&++&&..o@#$$%*****%%%#OX.&&XoO#$%***%$@X. +&XX. +++XO*%%$#@OoX.+++.o@#$$%*O &&&&+++++++++..o@*%$@o&&+++ .&&&&&Xo*$#X.++++&++&++++.o#********%%#@&&&& oO#**%%@O &&+&&&++.XX#%**%%%#@X.+++&+++Xo@$*O &+++++XX& +++.XO@*",
-"OX++&& ..&&&&&&++.X******%%#@OXX ++.X@*%#@OXX.&&++....XoO@****%%#OX&&&+&.o@$%%****%%#@XX.++& .@$%%**%#OX..+++&Xo@#$%%********%$#OX ..@$%**%%$#X..&&XoXX &O**%%$$#OoX+++Xo$$%*%*@..&&&&&. .....&&o#*%$#OX..&&XXXX.&&&&&*%#oX & ..XX..++&XO#*********%$@X.&&&..@***$#O. +&&&++.Xo#%****%%#@X.. &&..o@#%*@.. .XXoXX...++.o*",
-"@X++ .. &&&&&++..*******%%#@OX ++.X@*%%##OoX &++XX.XoO#$*****%$@o&&&+&Xo@$*******%$#OoX++& O#%%**%$#oX.+++&XO#$%%*********%%$#o.. .@$%***%$#oX. o@Oo. &o**%*%%$#oX+++XO$%%***@X.&&&&&...oX..& O#**%$@OXX Xoooo && *%#OX XoooX.&+&XO#**********%$oX&&&.X@**%%#@. +&&&++.XO#%****%%$#O...&&.XO#$%*@X. ..XoO@OO...++.X*",
-"@o++ ..oX. &&&++XX********%%##O..++..@**%%$#Oo. ++XoXo##$%*****%%#O &&&&XO@%%******%%$#OX&+& .O#%***%%#OXX++&&O@$%%************%$@.....#$%****%$OoX..@#@@...&O*****%%#Oo+++X@%*****#X. & .XXOOXX @#**%%$@Oo..@@@@O.. & *%$@o...O@@OoX&&&O@$**********%$OX &&.X#***%$@X. &&&&++.XO$%*****%%$#XX. Xo#$%**#XX...O##$##oX.++Xo*",
-"#@OoooOOOOoooXXXoo@*********%%$#OoXX.X@***%%%#@OoXoO@##$%%*******%$@OooXO@#$%%*******%%$#OoX...@#%%***%$#@oXXoo@#%%**************%##@O@##%%****%%$#@@@#$$##OOO#*****%%$#O.X.O#%*****$#@OoooOO@####O@@#$**%%%$##@##$$##OOOo@*%%$#@O@##$##OOoO@$%***********%#@OoOO@#***%%#@OoXXX. o@#%%******%%##@OOOO#$%%**$#@@@##$%%$$#@OoOO@*",
-"$##@@##$##@@@@@O@##**********%%$#@OoXX#****%%%$#@@@##$%%%%******%%%$#@@@@#$%**********%%$#@O..X#$%*****%%$#@@@@#%%****************%$####%%******%%$$#$$%%$$#@#$******%%##Xoo##%*****$$##@@@@#$$$%$$##$%****%%$$$$$%%%$##@##**%%$$#$$%%%$####$$%************$$##@#$%****%%$#@ooOo..O#$%********%%$$####%%****%%$#$$%%%*%%$$##@#$*",
-"%$$$$$%%%%$$#$$#$$%***********%%%$####$******%%%$#$$%%************%%$$$$$%%%***********%%$$##@##%%******%%$$#$$%%*****************%%%%%%%%******%*%%%%%*%%%%$$%*******%%$###$%%*****%%%$$$$%$%%%%%%%%%%******%%%%%%*%%%%$%$**%%%%%%%%%%%%$$$%%*************%%$$$%%%****%%%%$$#@@@##$%%*********%%%%%%%%%****%%%%%%%****%%%$$$%%*"
-};
+static char * matrix2_xpm[] = {
+"320 377 13 1",
+" c None",
+". c #000000",
+"+ c #081E08",
+"@ c #0B2A0B",
+"# c #165016",
+"$ c #1B641B",
+"% c #217A21",
+"& c #279027",
+"* c #2BA02B",
+"= c #5AD25A",
+"- c #81DD81",
+"; c #E0F7E0",
+"> c #A7E7A7",
+"...........................++++++................+..+............+++@@###@@+++.......+++@###@++............+.++......................................+.+.+.............+@#####@+........+@##$##@+...............+++++.................................................................................................++@@#@@+..",
+"..........................++@@#@@++..........+++++++++++.........+@##$$$%$$#@++......++#$$%$$#+++.........++@+@+++..................................++++++............++#$%&%$#@+......+@#$%%%$#++............+++@@@+++...............................................................................................+@#$$$#@+.",
+"........................+.@@$$%$$@@+.......++@@#@#@#@#@@++.....+.+#&**====&%$@+.....++#$&=-=&$#@+.......++@@##$#@+................................++@###@@+..........++#$&;;=*&#++....++#&*=;;&$#++...........+@#$$$#@+.............................................................................................+++#%===$#@.",
+"........................++@$%*&*%$@++.....++@#$$%$$$%$##@++....++@$*====-=**%#+....++#$&*->-*&%#@++....++@#$%%%$#@++...........++@+++++..........++@#$%%$#@+........++@$&*;;==*#++....++#&==;;*&$@+.........++@#$%&&$#@++..........+.+++.............................................................................+#$&---&$@.",
+"........................+@$*=;;;=*$@+.....++$%&=-***-=&%$++....++#%=->>>;;==*#@...++#$&->;;;-=*%$++....++#%=----%#@+.........++@@###@@++.........+@$%=--*&#++.......+@#%&=;;=**#++....++#**=;;**%#@+.......++@#%&;;;&%#@++.........++@@@++..........................................................................++$&*;;>&$@.",
+".......................++#$*=;;;=*$#+....++#%**>-=*=>>**%#+....+@$&->>>>;;-=*$@..++@$%*->;;;>-**%@+...++#$&-->>-&$@++.......++#$%%%%%##++.......++#$&->-=&$@+......++@$==->>*&$@+......+@$**>;-==$@++.....++@#%&*;;;*&$#@++.......+@#$$$#@+........................................................................++@$*=;;;*%#.",
+".......................++#&==;;;==%#@....++#&*=>>===>>=*&#+...++#$&->>>>;;-==%#..+@$%*=>>;;;>-=*&#@...+@$%*->>>>*%$@+.....++@#$%****&%$@+.......+@#&*>>>=*$@+......+@#%=->>>*%$@+.....++@#%*>>>-=%#@+....++@$$&*=;;;=*&%#@+......++#$&&&$#@+.......................................................................++#%*=;;;*$#.",
+".......................+@#%->;;;>-&$++...+@$*=-;;---;;==*#@...+@#&*>>>>>;;-==%#.+@#%->>;;;;;;;==*#@..++#**=>>>>-==$@+.....++#$&>>;;;>-%#++......+@%*=;;;==$@++......@$&->>>-*$#+........+#%*->>>>&$@+....+@#*====;;;====*#@......+#$&;;;&$@+.......................................................................+@$&-->>>*$@.",
+"........................@$&->;;;>-&$@+..++@$==-;;---;;-=*$@..++#%&*>>>>>;;--=&$.+@$&->>;;;;;;;-=*$@..+@#*==>>>>>-=%#@+....+@$%*>>;;;>>&$@......++#%==;;;=*$@+......+@%*>>>>-&$@+.......++@#&->>>>&$#+....+#$==-=-;;;-=-==$@.....++#%*;;;*%#++......................................................................+@$&->>>-%$@.",
+".......................+@$&->;;;--&$@...++@%*=-;;-=-;;==&#+.++@#=--;;;;;;;;>>*%.+#$&;;;->===>-==*#@.++@#*=->>>>->-&$@+...++#&==;;===--%#@+.....+@$&>>>--*%#++.....++#$*>>>>-%#++.........@#%->>>>*%#+...++@$=--;;;;;;;-==$#......@#&*;;;*&#@+...........................+.+.+.+..++...............................+@#&*;;==*%#+.",
+".......................++$&=-;;;>=&#@+...+#$==-;;=-=;;=*&#+..+#$==-;;;;;;;;>>*&.+#$*>;;->===>-=*&#+..+@#*==>>>>>>-&%#@+..+@#*==;;===--%#@+.....+@#&>>--=&$@++......+#%*;;;=&%#++.........+#$**;;;*%#++..++#$==-;;;;;;;>-=$#...+++#$&=;;;=&$#++.........................+++@+@+@@++@+++............................+#$&*;;==&$@+.",
+".......................+@$&->;;;--&$@...++@$*==;;===;;=*%@+.++#$=->;;;;;;;;>>*%.+@%&;;;->===--=*&#@..+@#&==>>>>>>>*%$@+..+@#*==;;==*-=%#@++.....@#%->===$#@+......+@#&*;;;=&$@+.........++@$&=;;;*&#@....+@#=--;;;;;;;-==$@..++@#$%*=;;;=*&$#@+......................++@@##$#$#$$$##@@+..........................+@#%*=;;=*%#++.",
+"........................+#&->;;;>-%$++...+@#*========-&%#@+.++#%==-;;;;;;;;>>*$.+@$&>>>;;>>>-==*%#@...+@$%*>>>>>>-==*@+..+@$&==;;==**&%$@@+.....+#$*=&%$#@+........+#&*;;;*&$@+..........+@$&*;;;*&#++..++@#%*==-;;;--=*%#@..+#$%&**=;;;=**&%$@......................+@$$%&&&&&&&&&%%$@.........................+@#&=-->>*$#++..",
+".......................+@#%->;;;>-%#@....++#&**=*&&*==%#@+...+@$=->;;;;;;;;>>&$.+@#%->>;;>>>-==*&$@..++@#%*>>>>>>>==*#+..+@#**=;;===**%%$@+....++@#&&$#@+++.......+@#&*;;;*&$+...........++$&*;;;*&$+....++#$**--;;;-=**%#@.+@#%**===;;;===**%$.....................+@$%****=**=****&%$.........................+#$*>;;-=&$@+...",
+"........................+#$*=;;;=*%@+.....++@#$$$$$$$##@@+..++#%&==;;---;;==*%#..+#$&*=--;;;;;--=%#...+@#%*->;;;>>**%#+..+@#*==;;;;;====*$@......+@@#@@@+..........+$&*;;;*&#@...........++$&*;;;*&#@+...++#%*=;;---;;=**#+.+#%*;;;;;;;;;;;;;*%.....................+#%*;;;;;;;;;;;;;*%........................++#%*;;;==%#@+...",
+"........................+@$**;;;=&$#++....++@@@#@@@@#@@+....+@#%**=;;---;;=**%#.++@$&**->;;;;;>>-%$...+@#%*>>;;;>>=*%$@.++@$*==;;;;;==-==$#......++++++...........++#&*;;;*&$++..........++$&*;;;*&#+.....@@&*=;;---;;=*&#+.+#&*;;;;;;;;;;;;;*%............+........+#&*;;;;;;;;;;;;;*&........................+@$&*;;;==$@+....",
+"........................+@#&*;;;*&$@........++++++++++++....+@#&*==;;---;;==*%#..+@$%*==-;;;;;>>-&$..++@#%*->;;;>>=*&$@.++#$*==;;;;;==--=%#.......+++.+...........++#&*;;;*&$@+..........+@$&=;;;*&#+.....+#%*=;;===;;=*&#+.+#%*;;;;;;;;;;;;;*%........+++++++......+@%*;;;;;;;;;;;;;*%........++++++.........++#$==;;;*&$@++...",
+"........................++#&*;;;*%#++...........+.+.+.......+@%*;;;;;;;;;;;>>%#.++#%==-=-===>-;;;*$..++@*==--;;;;>>>-%#.+@#&=>>>>;;;;;>>-&#.......................++#&*;;;=&$@+..........+@$&*;;;*&#@+...++@%**=-***-=*&%@+.+@$%**===;;;===**%$.......++@@##@+++....+@$%***=*=*=*=***%#......+++@###+++.......+@$&>>>--&$@+.....",
+".........................+#$*;;;*$#+........................+#%*;;;;;;;;;;;>>$#.+@#%=->=-===--;;;&%..++@&*==-;;;;;>>-%$.+@$&->>>>;;;;;>>-%#.......................++#&*;;;=&%@+..........+@$*=;;;*%#+....++@$&*==&&&==&%$@+..+@$%&**=;;;=**&%$@.......+@#$$$$#++....++@$$&&&&&&&&&&%%#@......+@#$$$$#@+......++#%*>>--=%$@+.....",
+"........................++@$&***%$@+........................+@$*=--;;>>>>>=*&$@.+@$&>;;;;;>;;;>>>*$...+@#$%*=>>>==>>-&#.+@$*;;;-->->;;===&$........................+#%*>>>-=%#@+........++#%=->;>*%#+.....++@###$#$#$$##+++..++@#$&*=;;;=*&$#@+......++#$===&&#++....++@####$#$$#$$##@+.....++#&*===$#+.....++@$&*>;-==$@+......",
+".........................+@#%***%#@+........................+@$%=--;;>>>>>**$#@.+@%&>;;;;>>>;;>>-&$..+.+@#$&*>>>==>>-&$.+#$*>;;>-->-;;-==%#.......................++@$&>>;-=&$@+.......++@$&=-;>>*$#++.....++@@@@@@@@@@++.+....+@#$&=;;;**$#@+.......+#$&---=&#@+......+++@@@@@@@+++++......+@$&=---%$@+....+@#&*=;;=&%#@+......",
+".........................++#%***%$++.........................@#%=--;;>>>>>*%#@+.+@$&>;;;;>>>;;>>-%#...+++@$%*>>>==>>-&#.+#$&>;;->-->;;===&$........................+@$&=->>>&%@++......++#$*>>---&$@+........+++++.++++.+.......+@#&*;;;*&$@+.......+@$%*>>-=*$@+........+......++++.......++#$*=>>-&$@+....+@$&==;;*&$@++......",
+".........................+@#%;;;%#@.........................++#%==-;;>;;--&%@++.+@#&=-->>;;;>>**%#@.....++@$&>;;;;>>-%#.+@$&>>>;;;;;;;;;;*%.........................@#%=->>>*&#@+......+@#%*>>>-=%#@..........+.+.....+.........++#%*;;;*%#++.......+@%*=;;;=*$@+...........+...............+@%=-;;;&$@+....+#%=-->>*%#@+.......",
+".........................++#%;;;%#@+.........................+@$==-;;;;;--&$@+...+#$==-->;;;>>*%$#+......+@$%>>>>>>--$#..@#%->>;;;;;>>;;;&%.........................+#$==->>*&$@++.....+@$&*>>-==$@++............................+@$&;;;&$@+.......+@#%==;;;-*$@++.........................++@$=-;;;&$@++...+#%=>>>-*$@+........",
+"..........................+#$%%%$@++........................++@$*=-;;>>>>-%$@+..++++#$%*=;;;**$#++........+#$%&*&*&%%#@..+@#%&***=******&%#.......................+.++#%*=;;==*#+.....++#*==;;**%#@+.............................+@#%&&&$#@+........@#&>>>--*%#@+...........................+@#$&&*&$#@.....+#%-->>-%$@+........",
+"..........................++##$#@@+..........................+@$*=-;;>>>-=%#+......++#$&*;;;*&#@+........+++@#$$$$$##@+..++@#$%&%&&&&&&%$#@.........................++@$%*;;==*#++....++#*==;;*&$@+...............................+@##$$#@+........+@$%>>--=&$@+.............................+@#$%$$#@++....@#%=-==*$#+.........",
+"...........................++@@@++...........................++#&*=>>>>>-=$#++.......+@#%=-=$#@+...........+@@@##@@@++...+++@@@###$######@+..........................++#%&;;=*&#+.....++@&*=;;&$#++................................++@@@+++........++#&->===$#++.............................+++@@#@++......+@$===*%#@+.........",
+"............................+++++............................++@#$%&&*&&%$#++.........+@#$$$#@+..............+++++++++......++++@+@+@+@+++............................+@#$%%%$#@++.....+@#$%&%%#@+..................................+++.+..........++#%*=&%$#@++...............................+++++++......+@#***%%@++.........",
+"..............................................................++@##$$$$$##@++..........+@@##@++................+.+............+.+.+.+.+................................+@##$##@++......++@##$#@@+.....................................+............++@#**%$#++..................................+.+.........++@#$##@@+..........",
+"......+++@@++++.........+.+++@++++..........+++@+@@+@+++.........++++@@@+++.............+++@+++........+++@@@@@@@++++............++++@@++.....++@+@@@@@@@@+++.........+++@+@+++...........+++@@+@+..................................................................................................................+.+.........",
+".....+@@##$##@+++.......++@@####@+..........++@###$$##@++.......++@#$#$$$#@++..........+@@@##@+++.....++@###$$$$$##@++.........+@@##$###@@+..+@@#$$$$$$$$##@@+......++@@##$###+++.......+++@#####@+++............................................................................................................+++++@++++.....",
+"..+++@#$%%&%%$#@++....+@@#$%%%%$#@++......++@#$%%&&&%%$#@++...++@#$$%&&&%%$#@++......++@#$%$%$#@+...+.+@#$%&&&&&&&$$@@......+++@#$%%&&%$$@+.++#$%%&&&&&&&&%$#@....+++##$%%&%%$$@@+......+@#$%%%%%$#@@+.........................................................................................................++@######@@++....",
+"..++@$$*=->-=*%$@++..++#$%&*=---%#++.....++@#$&==>>>==&$#@+...+@#$&==>>>==%%#@+......+@#%*====$#+....+@%&*->->->>==*$@+.....++#$%&*->--=%$@.+#$==->>>->>>===$#+...+@#$&*=->-=*%$#@+....+@#$&---==&%$#++.......................................................................................................++@$$%&&&%%##++...",
+"..@@$%&==>>>==&%$@+.++#$&**==>--&%@+.....+@#%&*-->>>--*&%#@..+@#%&*-->>>--*&%#@.....++#%&===-=%$@+..+@#%*=>>>>>>>--=$#+.....@@$&**=>>>>-*$@.+#%=-->>>>>>>--=%$@..+@#$&*==>>>==*&%#@..++@#%&*>>>--**&$#+....................................................++++++.........................++++++.............++#$%&******%$#@+..",
+".+@$*==;;;;;;;==*$@.++#%>;;;;;;;*%#+....++#$=->;;;;;;;>-=%#.+@@$=->;;;;;;;>-=%#.....+@$*=;;;;;*$#++.++$*==;;;;;;>>-=%#+...++@$*=;;;;;>>>*%#.@$&>>;;;;;>;;;;>&$@.+@@%=--;;;;;;;>-=$#...+#$*;;>>>;;;;>&$@..................................................+++@#@@@++......................++@@#@@@++..........+@$**;;;;;;;=*%#++.",
+".+#$===;;;;>;;-==$#.+@#&>;;;;;;;*&#@+...++$%->>;;;;;;;>>-%$..+#%-->;;;;;;;>>-%$....+@#%==;;;;;*%#+..+@$*=-;;;;;;;>>-%#+...+@#%*=;;;;;;>>*%#.@$&>>;;;;;;;;;;;&%@..@$%->>;;;;;;;>>-&$..+@$%*;;;;;;;;;;&%@.........++++.................++++++...........+++@@#$$$$##@.....++++++++++++....+@@$$$$$#@@++.......++#%*=;;;;;;;=**$@+.",
+"+@#%=--;;;;;;;-==%$..@#%>>;;;;;;*&#+.....@$&->>;;;;;;;>>-&$.+@#%->>;;;;;;;>>-&$....+@#%==;;;;;*&#++.+#$==-;;;;;;;>-=%#+..++@%&=-;;;;;>>>&$@.+#%>>;;;>>;;;;;;*%@.+@$&->>;;;;;;;>>-&$.++@$**;;;;;;;;;;*%$.......+@@@@@@++.............++@#@@@+..........+@@$$%&&*&%#@....+++@@@@@@@@@+@+..+@$%&*&&%$#@@++.....+@#&*=;;;;;;;==*%#@.",
+"+@%&>;;--===--;;>&$..+@$&**==;;;*&$@....++$%>>;--===--;;;*%..@#%=--=====->;;>&$....+#$*>;>>>;;*&#@..+#$==-;;======*&$#+..+@#%*;;>>>===*&%#@.+@$%&****==>>>>>&$@.+@%*>;;--===->;;;*$.+@#*==;;=====;;;=&$.....++@#$$%$#@+............+@##$$$#@+.......+@@#$%&--;;;=*$..++@##$$$$$$$$$##@+.@#$;;;>>*&&$#@++....+@#*==;;===>>;;>&$@.",
+"+@%*;;;--***--;;;*%.++@@$&**=;;;*%$++...+@#%>>>==**=--;;;*%.++@#=-==**==->;;;*%...+@#%*>;>>>;;*&#++.+@$==-;;-=====**$#+.++@$**;;>>-===*&$@+.+@@$$%%&&*=>>>>>&$@.+@$&;;;>-===--;;>*$.+@$*=-;;=*=*=;;;**$.....++#$&&&&$#@+..........+@#$%*&&$#@+....++@#$%***--;;;=*#..+@#%%&&&&*&&&&%%#@.+#%;;;>>=**&%$@@+...+@$*=-;;===>>;;>*%@.",
+"@#%*;;;-=***==;;;*%...++##&*=;;;=%$++....+@$%&&&&&**>>;;;*$..+@#$%%&***=;;>>>&$..++@%*=;;-=-;;*&#@..+#$*=-;;;;;;;>-=%#@.+@#*==;;>>>>>=*&$@+..++@@##$%**;;-==%#@.+#$*>>>>>===>>>>>&%.+@$==-;;=*=*=;;;=*$.....+@$==;;;&$@+..........+@$==;;;&$@+...++@#%*=>;;;;===&%#..@#$-->>>>>>>->--%#.+@$&*=>>;;;-=%$#@@..++#**=--=*==-;;;*$#.",
+"+#%*;;;-=*&*==;;;*%....++#$**;;;*&#@.....+@@#$$$%&*=>>;;>*$...++##%%&*==;;>>>&%..+@#&*=;;---;;*&$++.+#$==-;;;;;;;--=%$+.+@$*=-;;>>>>-==*$#+...++++@#$&*;;-==$#+.+@$&>>>>>===>>>>>&$.+@$==-;>=*=*=;;;=*$....++#$=-;;;*$#+.........++#$=-;;;*$#+..++#$%&==;;;;;==*%#@.+@$&->>>>>>>>>>>-%$.+@#$&*>>;;;--*&%$#@.++#%*====*==-;;;*%#.",
+"+#%*;;;-=&&&==;;;*%.....+@#&=;;;*&$++.....++@##$%&**>>;;>&$...++@@$%**==;;>>>&$..+#$*==;;=-=;;*&$@+.+@#*==;;;;;;;>--&$@.+#$==-;;>>>>>===%$@.....+++@$&=;;-=*$@+.+@$&->>>>===>>>>>&$.+@$*=-;;==*==;;;=*$....++@%=-;;;*$#+.........++#$=-;;;*$#+..@@$%**=-;;;;;=**#@+.+@$&>>>>>>>>>>>>>&$..+@#$&->;;;>-=**%$@.++@%&*==**==-;;;&%@.",
+"+#&*;;;==&%&==;;;*%......@#&*;;;*&#@.......++@#$%==-;;===%#....++@$==;;;;;-==&$.+@$%-->>>-=-;;=*$@+.+@#&*=>>===>>;;;*%#.+@$==-;;;;;;;;;;*$#......+@#%*=;;**$#++.+@$&==-;;;;;;;===&$.+@$*==;;===>>;;;=*%.....+#$*=>>>&%@++.........+#$==>>>*$@@..@$%>>>;;>>-=*&%#@++.@#&*>>;;;;;;;;;;>*%...+@#$&*===;;;;;=*$..++@#$&*==-;;>>>&$@.",
+"+#%*;;;==&%&==;;;*&......@#&*;;;*&$++.......+@#%*=--;;==&$@....++@#*=;;;;;===&$.+@$&->>>>=-=;;=*%$@..+@%&*>>===>>;;;*&#.+#$==-;;;;;;;;;;*%#......+@$&*=;;*&$@+..+@$&===;;;;;;;-==&$.+@#*==;;===->;;;=*$....++@$*=>>-%$@...........+@#*=->-%$@...@$&>>;;;>--*&%#@@...@#&*>>;;;;;;;;;>>*&....+@#$&*==;;;;;==$..+++@$%*=--;;>>-%#@.",
+"+#&*;;;==&&&=-;;;*%.....+@#&*;;;*&#@........+#$*=;;;-=*&$@@....++#$%&===>>;;>&%.+#%*;;;;;>>>;;-==$@.++@#$%%&&&*==;;;=*$.+@$==-;;-====;;;=*$......+@$=-->>*%#@+..+@$&>;;>>=-=>>;;>&%.++#$**>>;;;;;;;;=*$......+##%%%%$@++..........++@$$&%%$@++..#&*;;;;;---*&$#+++..+#&*>>>>>>>>>>>>>*%....++@$%*==;;;;;-=%....+@#%*;;;--**%$@+.",
+"+#%*;;;==&&&=-;;;*&......@$&*;;;*&$@......++@$%==;;;-=&%#++...++@#$$&*==>>;;;*%.+#%*;;;;;>>>;;>-=%#.++@#$%%%$%&*=;;;=*#.+#$==-;;=====;;;=&$.....++#%=--;>*%#++..+#%*;;;>>===>>;;;*%..+@#%*>;;;;;;;;;=*$.....+++@#$$#@@+............++##$###@.+..#%*;;;;;---*&$#@+...+#&*>>>>>>>>>>>>>*$....++#$&**=>;;;;-=%.....@#%*;;;-=*%##++.",
+"+#&*>;;-=*&*==;;;*%.....+@$**;;;=&$@+.....+@#%*=-;;;-=%$@++..++##$$$%&*=>>;;;*%.@#&*;;;;;>>>;;>-=%#.++##$$$$$$&*=;;;=*$.+@$==-;;=====;;;=*$.....+@#&=->>>*$@+...+@%*;;;>>===>>;;;*%...+#%&>>;;;;;;;;=*$......++@#@#@@+.............+++@##@+++...@%*>;;;;>-==*&$#@++.@#&*>>>>>>>>>>>>>*%...+@@$%**==;;;;;==$....++#%*;;;==%$@++..",
+"+#%*;;;-=*&*==;;;*%....++#$&=;;;**$#++..+++#&*=;;>>-=&%#@++.++@$*==&&&**--;;;*%.+#&*;>;;;;;;;;>>-&#.+@#*==&&%%&*=;;;=*$.+#$*=-;;==**=;;;=*$.....+@$&>>>>-&$@++..@#%*;;;--===--;;;*%..+++$%*===---;;;*&#.......+@@###@++............++@@###@+....+#$&*=--;;;;>*&%#@+.+#&*>>;;;;;;;;;>>*%.+++#$%==;;;>>=**&$#.....+#%*>>>*&$#++...",
+"+#$*;;;-==**==;;;*$...++@$%*=;;;=*&$@@+..+#$*==;;>>-=*&$#@+.+@#%===*&**=--;;;*%.+#&*>>;;;;;;;;>>-&$.+#$===**&**==;;;=*$.+@$==-;;=====;;;**$....++#$*>>>>-&$@+...+@%*;;;--===--;;;*%...+@#%**=-==-;;;*%#......+@#$%$$#@+...........++@#$$$$#@+...+@#$%*==;;;;;==&$#@.+#%*>>;;>;;>>>>>>*%..@#$&*--;;;>>**&$#@....++#$*>>>*%#@+....",
+"+@$&>;;--===--;;>&$..++#$%**=;;;=**%$@+.+@#%*==;;>>-=**%#@@.+@$&==-=**=*--;;>*$.+@%&>>>;;;;;;;>>-&#.+#%==-==**===;;;=&$.++#*==;;=====;;;=*#.....+#$*>>>>-%#++...+#$*>;;--=*=--;;;&$..++@$%*===--=;;;*%#.....++#$%&&&$#++..........+@#%&*&%$#@...++@#$%==;;;;;==*&$#.+@$&>>>>>>>>>>>>-&$.+@$&*=->;;;>-&%##++.....+@$*>>>*%#++....",
+"++$%==-;;>>>;;--=%$.++@$*==>>;;;>>-==$@.+#$*;;;;;>>>>>==*$@.+#%*;;;>>>>>;;>>>&$.++#$&**=->>>;;>--&$.@#$-->;;>->;;;;>*%#.++#$**;;;;;>>;;;**#.....+#%*;;;**$#+....+@$&->>;;>>>;;>>>&$..+@$%*->>>>;;>>>&$@....++@#==;;;&$@+.........+@#%==;;;&#@+....++@#$&***>>;;;=*#.++#$%&&&*&**&*&&%$#.@#$>;;;;===*&$#@++.....++@$&->-&$@+.....",
+"++@$*==;;>>>;;==*$@.++#$==>>>;;;>>-==$#.+#%*;;;;;>>>>>--=$#.+#%*;;;;;>>>;;>>-%#.++@#$&*==>>>;;>--%$.+#$=>>;;>>>;;;;>&$@..+@#%*;;;;;;;;;;*&#.....+#%*;;;*&$++....++#%->>;;>>>;;>>-%#..+@%&*>>>>>;;>>-%$@.....+#$==;;;&$@+.........+@$&=-;;;&$@+......+@#$%&*--;;;=*#.+++@#$%$%$%$%%$$##+.+#%>;;>>=*&%$#@++.......+@$&->-&$@+.....",
+".+@#$&*=->;>>-*&%#@.++#%=->;;;;;;;>-=%#.+#%*>;;;;;;;;;>-=%#.+@$%===;;;;;>>**%$#...++@$%==>;;;;>>-%$.+@#%*=>>;;;>>=*&$#@...+@$%==>>>;;-==&$@....++@$&>>>*%#++....++@$%*=>>;;;>>**%$@.++#&*=>>;;>--**%$@+....++#$==>>>*%#++.......++#$*;;->=&$@+........+@#$$&&**&%$#...++@@@#@###@#@@@++.+#$****&%%$#@++.........+@$&->-&$@+.....",
+"..+@#$&==>>>-=&%#@+.++#%=>>>;;;;>>>--$#.+#%*>>;;>;;;>>>--%#..+#$*==>>>>>>>*&$@+....++#$==>>>>>>--%#.++#$%*->>>>>>*&%#@+...++#$**>>>>>==*%#@.....+@$&---&$@++.....++@$%*->>>>>>*&$#+.++@%*=>>>>>==&%##++.....+@$*=>>>&$@+........++#%*;;--=%#@+........+++@##$$%$$@@...+.+++++++++++++...+@#%&&%$##@+++..........++#%---%#@+.....",
+"...+@#$*=>>>==$#@+...+@$==->>>>>>>-==$@.+@%&>>>>>>>>>>-==$@.++@$&*=>>>>>--%$#@+....++@#**>>>>>-==$@..++@$%-->>>>-&$#@+.....+@#%*-->>-=*&#@+.....++#$=--$#@+.......++#$%-->>>--%$#++.++@%&*>>>>>=*%#@++.....++@#*=>>-%#@+........+@$&*;;-==$@+...........+++@@#@@@+..........+..+.+.......+@##$##@+++.............@#$===$#+......",
+"....+@#$%%&&%$#@+...++@#$%&&*&*&*&&%$#@.++#$%&&**&**&*&%$#@..++@#$%&*&*&&%#@++.......+#$%&&&&&&%$#@...++##%&&*&&%$#+++......+@#$%&&&&%$#@++.....++@#$$$#@+........+++#$%&&&&&%$@+++..+@@$%&&&&&%$#@++.......++##$%%$$@+.........+@&*=->*&%#@+............+++++++++........................++@@++++...............+@#$$$#@+......",
+".....++@##$$##+++.....++##$$$%$%$$$$@@+..++##$$$%%$%$$$##++...++@@##$%$$$##++......+.++@#$$$%$$##++....++@##$$$##@++.........+@@##$$##@@++.......++@###@++..........++@#$$%$##@++.....++@@$$$$$#@+++.........++@#$##@++........++@%**-=&$#@+.................+.+..........................++.++..................++@@#@@++......",
+"......++@@@+@++.......+++@@#@#@#@@@++++..+++@@#@#@#@#@@++++.....++@@@@@@@+++...........++@@@#@@+@+.....+++@@@#@@@+++..........++@@@@@@+...........++++++..............++@@@@@@++.......++@@@@@@+@+...........++++@+@++..........++@$$$$$#+++.......................................................................+++++........",
+".........................+.+.+.+...........+.++++.+.+................++++.+.......+++.+++.+............+.+++.++++.+.........++.+++.+++.+............++++.+.........+.++.+....+.++.+......+.++.++++.+..........+.+++.+++.+......+.+++...+.++..+......+++.+.+............+...........++.+.....+........++............+..+.........",
+"......+++++++...........++++@+@+++........+++@+@@@@@+++...........++@+++@+++++..+++++@+@@@@@++........++@+@@@@@@@@++++...++++@@@@@@@@@@+@+........+++@+@@+@++++..++++@+@+++++@+@+++.....++@+@@@+@+@++.........+@+@@@@@+@++....++@+@+@+++@++@++....++++@@@@+++.........++@+@+..+..++++++...+++++++.+++++@+++.......++++@+++......",
+".....++@####@@++......++@@##$###@+......++@@#$$#$$###@+++.......++@@#$$####@@++.+@##$$$$#$##@@++....+++@#$#$$$$$$#$@@+...+@@##$$#$$$#$###@+.....++@@#######@@++..+@###$###@###$###@..+++@##$#$$$$###@@.....+++@##$#$#$###@+.++@###$###@######@+.++@##$#$####++......++@@###@++++@@####@.++@@###@++@@#####@+.....++@@####@@+.....",
+"..+++@#$$%%$$#@+.....++@#$%%%&%$#@+.....+@#$%%&&&&&%%$#@++....+++@#$%%&&&%%$$#@.@#$%%&&&&&%%$#@++...+@#$%&&&&&&&&&%$#@+.+@#$%&&&&&&&&&&%$#@...++@@#$%&&&&%%$$#@.+@#$%&%%%$$$$%%&%$#..++##$%%&&&&&&%$#@@....++#$$%&&&&&&%$#@.+@#$%%%%%$$$%%%%$#@.++#$%&&&&&$$#@+.....+@#$$%%##@+@##$%%$#.+@#$$%$$#@##$%%%$#@...+++@#$%%%%$##++...",
+"..++@#%%***&&$#@+....++#&*=----=%#@+....+#$=----->--=*%$@++...+@#$**-----==***#.#**---->---==%$#@++.+#$=----->-----=%#@.+#$=--->->->->--=*#...+@#$**-----==***#.@#**-----***-----**..+@#*==---->--==*$@....+@#*=-->->---**#.+#**-----***---==$#.+#$=-------&%#++....@#**--=&%###%&-=-**.+#$==-=*$$$*==-=**#...+@#$**---==%$#@+..",
+"..+@%&*>>;;;-=$#++...+@$*==>>>->&%#@+...@$%-->>>>>>>-=*&$@+.++@$$&*=->>>>=-==*$.$*=->>>>>>>-=*&$#@+.@$%-->>>>>>>>>--&$@.@$%-->>>>>>>>>>-==$.++@#$&*=->>>>=-==*$.@$*=->>--*=*-->>-=*.++@%==->>>>>>>-==$@...++#%==>>>>>>>>=*$.@$*=>>>>-=*=->>--%#.@#%=->>>>>-=&#@+....@$==-->*&$$$&*-->=*.@$&---==&%%==->>=*$..@@#%&*=->--=&&$#@+.",
+".+@#&*=>;;;;-=&$@++..+@$===>>>>>*&$@+...@$&->>>>>>>>>==*%#@.+@$%&*=->>>>>---==%.$==>>>>>>>>>-=**%#@.@$&->>>>>>>>>>>>*%#.@$&->>>>>>>>>>>>==%.+@$%&*=->>>>>---==%.#$==>>>>>===>>>>>==.++#$==>>>>>>>>>-=$#...++#%=->>>>>>>>==$.#$==>>>>>===>>>>-&$.@$&->>>>>>-=*#@+....#$==>>>=*&%&*=>>>==.#$*->>==***==>>>==%.+@$%&*=->>>>-=**%#@.",
+"++#$*==>;;;;>-*%#++.++#$=->;;;;;-=%#++..#%*;;;;;;;;;;;;;*$#.@#%-->;;;;;;;;;;>>&.%=-;;;;;;;;;;;;;&%#.#%*;;;;;;;;;;;;;=&$.@%*;;;;;;;;;;;;;>>&.@#%-->;;;;;;;;;;>>&.@%=-;;;;;===;;;;;-=.++#$=->;>;;;;>>-=%#...++#%->>;;;;;;;==$.#%=-;;;;;=-=;;;;>*%.@$&>>;;;;;>=*$@+....#%=-;;;>>***->;;;-=.#&*;;;;;=**>>;;;-=%.+#%-->;;;;>;;;;;&%#.",
+".@#%=->>>---;;=&%@+..+@$=->;;;;;>=&$@+..@%*>;;;;;;;;;;;;*%#.@$&->>;;>>>>>;;;>>&.$=-;;;;;>>;;;;;;*&$.@%*>;;;;;;;;;;;;=*$.@%*>;;;;;;;;;;;;;>&.@$&->>;;;>>>;;;;>>&.#$=-;;;;;===;;;;;-=.++@$==->;;;;;>--=#@...++@$=->>;;;;;;-=$.@$=-;;;;;=-=;;;;>&$.@$&>>>;;;>>=*#++....#%=-;;;>>*=*>>;;;-=.#&=;;;;;===>>;;;-=%.@$&->>;;;>>;;;;;*&$.",
+"+@$&->>>>---;;=*&#+.++@$%*=;;;;;>>*$@+..@$&=--;;=====;;;=*$.#%*;;;--=*=*=>>>>>&.$&=;;;--==*==;;;-=%.@#&=--;;=====;;;**$.@$&=--;;=====>>>>>*.#%*;;;--=*=*=>>>>>&.@$&*;;;-====--;;;=&..+@#$&**=;;;==*&$#@....+@#$&**=;;--=&%#.@$**;;;--;;;;;=*&$#.+#$&*=;;==*%$@@.....#%==;;;;;===;;;;;==.#&*;;;;;=--==;;;=*%.#%*;;;--==*==;;;-=%.",
+"@@%*;;;--->-;;-==$#...+#%&=>;;;;>>*%#++.+#%=--;;=====;;;=*$.#%*;;;-=**&**->>>>&.#&*;;;-=****=;;;-=%.@#%=--;;=====;;;=&$.+#%==-;;=====--->>%.#%*;;;-=*****>>>>>&.@$&*;;;--=*=--;;;*&...+@#$&*=;;;=*%$#@+....++@#%&*=;;--=&$@.@$&*;;;--;;;;;**%#@.+@$%*=;;==*%#++.....#$*=;;;;;===;;;;;=*.#&*;;;;;---==;;;=*%.#%*;;;-=****=;;;-=%.",
+"+#%*;;;>>;;;;;-==$@..++#$**>>;;;;>*&$@+.@#%==-;;=====;;;=*$.$&*;;;-=&%$%&=-->-%.#&*>;;-=*&&**;;;>-&.@#$==-;;=====;;;*&#.@#%=--;;=*===>-->-%.$&*;;;-=&%%&*-->>>%.+#**;;;--===--;;;*&....+@#%&=;;;**%#+++.....++@#$**;;-==&#@.+#&*;;;--;;;;;*%$@+..+@$**;;=*&#@++.....#%*=;;;;;===;;;;;=*.#&*;;;;;>->==;;;=*$.$&*;;;-=&%&**;;;>-&.",
+"+#%*;;;>>;;;;;-==%#..++#%*=;;---;;=*%@+.+#$==-;;>>>;;;;;=*%.$*=;;;=*%$###$%&%%#.#&*;;;-=&%$&*>>>>>&.+#%==-;;==-;;==*&$@.+#$==-;;===;;=**&$$.$*=;;;=*&%$%&*=***$.+#%*;;;>>>>>;;;;;*&.....+@$&*;;;**$@+.......+++@$&*;;-==%#+.@#&*;;;;;;;;=**$@++..+@$&*;;=*&#@.+.....@%*=;;;;;-=-;;;;;=*.#%*;;;>>;;;==;;;=*$.$*=;;;=*%$$%*>>>>>&.",
+"+#&*;;;;;;;;;;-==$#..+@#**=;;---;;=*&#+.+#$==-;;>>>;;;;;=*%.$*=;;;=*$#+@@###$#@.#&*;;;==%$$%*->>>>&.+#$==-;;=-=;;==*$#@.+#$==-;;===;;**&$#@.$*=;;;=*%$%&**==*&$.+$&*;;;>>>>>;>;;;*%.....+@$&*;;;*&#@+.....+++++@#&*;;-==$#+.+#&*;;;;;;;;=*%$@+...++#&*;;=*%#@+......@%*=;;;;;-=-;;;;;=*.#&*;;;>>;;;==;;;=*$.$*=;;;*&$##%*->>>>&.",
+"+#%*;;;;;;;;;;-==%#..+@$*=-;;===;;-==$@.+#$==-;;;;;;;;;;==%.$*=;;;*&$@+++@@@@@+.#%*;;;==%$#$&-->>>*.+#$==-;;;;;;;=*%$@+.+#$==-;;;;;;;**$#@+.$*=;;;**%$%=----==$.+#%*;;;;;>;;;;;;;*&......+$&*;;;*&$++...++++@@+@#&*;;-==$#+.+#%*;;;;;;;;==&#@+...++$&*;;=*%#@+@++...@$*=;;;>>;;;>>;;;=*.#&*;;;--;;;--;;;=*$.$*=;;;**$##$&-->>>*.",
+"+#&*;;;;;;;;;;-==%#.+@#%==-;;===;;-==%#.+#$==-;;;;;;;;;;-=&.$*=;;;*&$@+++++++++.#&*;;;==%##$&-->>>*.+#$==-;;;;;;;=*%$@+.+#$==-;;;;;;;*%$@++.$*=;;;=*%%&->>>-==%.+#&*;;;;;;;;;;;;;*&.....+@#&*;;;*&#@....+@##$###$&*;;-==$#+.+#&*;;;;;;;;==&$@++..++#&*;;=*&#@#@@@++.@%*=;;;>>;;;>>;;;=*.#&*;;;--;;;--;;;=*$.$*=;;;*&$@#$&-->>>&.",
+"+#%*;;;>>;;;;;>>-&$.+@$&=--;;===;;--=&$.+#%==-;;;;;;;;;;-=&.$*=;;;=&$@+++@@@@++.#%*;;;==%$#$&=->>>*.+#$==-;;;;;;;=*&%##.+#$==-;;;;;;;*&#++..$*=;;;**&&*->>>>==%.+#&*;;;;;;;>;;;;;*&......@$&*;;;*&$++...+#$%&%%$$&*;;-==$#+.+#&*;;;;;;;;-=*%#@+..++#&*;;=*&$$$$##@+.@$*=;;;>>;;;>>;;;=*.#%*;;;--;;;--;;;=*$.$*=;;;=&$##$*-->>>*.",
+"+#%*;;;>>;;;;;>>-%#.+#%*>;;;;;;;;;;>>&$.+@$==-;;=====>>>>>&.$*=;;;=*%#@@@##$$#@.#&*;;;==%$$%&-->>>&.+#$==-;;---;;===**#.+#$=--;;---;;*%#+...$*=;;;==&&*;;;;;>-&.+#&*;;;--===--;;;*%.....++$&=;;;*&$@+...#%*>>>&%%**;;===$#+.+#&*;;;>->>>;;=*%#@...@$&*;;=**%%===$#@.#$*=;;;==;;;==;;;=*.#&*;;;-->>>;;;;;=*$.$*=;;;=*%$$%*>>>>>&.",
+"@#%*;;;-->>>;;>>-&$.+#%*;;;;;;;;;;;;>*&.+#%==-;;==*==>>>>>&.#*=;;;=*&$#$$%&%%$#.#&*;;;==&%%&*->->>&.+#%==-;;---;;-====%.+#%==-;;---;;&$@+...#*=;;;=****;;;;;>>&.+#&*;;;--=*==-;;;*&.....+@$&*;;;=&$@+...#&*;;>*&&*=;;-==$@+.+#&*;;;-->>>;;==&$@.++@$&*;;==**&===%$@.@%*=;;;==>>>==;;;=*.#%*;;;>->>>;;;;;=*%.#*=;;;=*&%%&*>>>>>&.",
+"+#%*;;;->>>>;;>>-%#.@$*=;;;>----->;;;=*.@#%=--;>===*=>>>>>*.#%*;;;>-*&%%&-----$.$&*;;;-=*&&*=;;;==%.+#%=--;;===-=>>->-&.@#%==-;;====*%$@+...#%*>;;>-=**==>>>>>*.@$%=;;;-==*=--;;;*&...+@@#%*=;;;=*%#@@+.$*=;;;==**=;;-=*$#+.+$&*;;;>-===;;>--&$..+#%*=;;===*=;;;=&#.@%*=;;;==*=*==;;;=*.#&*;;;--===;;;;;=*$.#%*;;;>-*&**=;;;==&.",
+"+@$&>>>>>===>-==*$#.@$*=;;;---=---;;;=*.@#&==-;;==*==>>>>>&.#%*;;;>>*****>>>>-%.$&=;;;--=**==;;;==$.@#&==-;;====->>>>>&.@#&=--;;====*%#++...#%*>;;>>=====>>>>>&.@$&*;;;-==*==-;;;=&...+@$%&*=;;;=**%#@+.$&=;;;=====;;===#@+.@$&=;;;--===;;>>-&%.+@$%*=;;=====;;;=&$.#%*=;;;==***==;;;==.#&*;;;--===;;;;;=*%.#%*;;;>>=**==;;;=*%.",
+"+@#&->>>>===--==*$@.#%*=;;;>--=-->;;;==.@$&=--;>=====>>>>>&.#$&>;;>>=====>>>>-%.$&=;;;-======;;;=*$.#$&=--;;=====>>>;>*.@$&=--;;==*=&$#+....@$*>;;>-=====>>>>>&.@%&=;;;-==*=--;;;**..+@#$**==;;;==*&%#@.#&=;;;=====;;==*#@+.#$&=;;;--*==;;>>>*&.@#%**=;;=====;;;=*#.#&*=;;;=*****=;;;=*.#&*;;;-====;;;;;=*$.#$&>;;>-=====;;;=*$.",
+"++#%*=-;;;;;;;=**#@.#%->;;;;;---;;;;;>-.#&*;;;;;;;;;;;;;=*%.+#%===;;;;;;;;;>=*$.%--;;;;;;;;;;;>>*&#.#%*;;;;;;;;;;;;;>>&.#%*;;;;;;;;==#@+....@#%*=-;;;;;;;;;;=*$.#%--;;;;;===;;;;;>-.++@$-->;;;;;;;>>-$@.#%&>>;;;;;;;;*&$#++.#%->;;;;;==*=-;;;>-.@%&;;;;;;;;;;;;;**#.#%->;;;>>*&*->;;;>-.#&=;;;;;**=>>;;;=*$.+#%===;;;;;;;>>-*%#.",
+"++@$*==;;;;;;;=*&#+.#%->;;;;;===;;;;;>-.@&*;;;;;;;;;;;;;*&$.+##**=;;;;;;;;>>*&$.$=>;;;;;;;;;;>>>%$@.#&*;;;;;;;;;;;;;>>%.@%*;;;;;;;;==$@++...+@$**=;;;;;;;;>>*&$.#$->;;;;;===;;;;;>-..+#$->>;;;;;;;>>-$#.@$&>>>;;;;;;>&%#++..#$=>;;;;;=**==;;;--.@$*;;;;;;;;;;;;;*&#.#%->;;;>-&&&>>;;;>-.#%*;;;;;***->;;;*&#.+##**=;;;;;;;>-=%$@.",
+".+@#&*=>;;;;;;=*%@+.@$&*=====***=====**.@$%*===========*&$#..+##%&**=====**&%#@.$%&==========**%$#+.@$%*============**$.@#%*======*&$#++....++##%&**=====**&%$@.@$&*=====&**=====*&.++@#&*=========*&#@.+#$%**=====*&%#@+...@$&*====*&&%&**=**&.@#%*============%$@.@$&*===**%%%**==***.@$&*===**%&&*==*&$#.++@$%&**====**&%$@+.",
+"..+@#$%&*===**%$#@+.@#%&*****%%%*****&%.+#$***********&&$#+.+++@#$%%*****&%$#@+.@$%*****=***&&$$#@+.+#%&**=*=*=*****&%#.+#$&***=***%#@+......++@#$%&*****&%$#@+.@#%&*****%%%&****&%..+@#$&&**=*==**&%#@.++##%&**=*=%%#@++...@#%&*****$##$%&**&%.+#$&***=*=**=**&$#+.@#%&***&&##$%&***&%.+#%&****$$$$%&**$#+..++@#$%%*****%$#@++.",
+"...+@#$%%&*&%%#@@+..+@$$%&%%%###%%&%%$$.+@@%%&&*&%&%%%$$@++...+++@#$%%&%%##@@++.+@#%&&*&&&&%%##@+.+..+#%%&&&&&&&&%%%$$@.+@#%%&&&&%$#@++......++++@##%&&%%$##@++.+@#%%&%%%###%&&&%$#...+@#$%&&&&&&&%$#++..++@##&&&*&##@++....+@#%%&&%$#@@@#$$$$#.++#%%&&&&&&&&&%%#@+.+@$$%&%$$@@@$$%%$$#.+@#%%&%$#@@##%$$#@+..+.++@#$%%%%$##@++..",
+"....++@###$###@++....+@@####@@@@@####@+..++@######@##@@@++......+++@@###@@@+++..++@@#######@@++++...+++@@#########@@@++...+@######@+++..........+++@@#@#@@+++...+++@####@@@@@@@##@@....++@#@###$##@@@+....+++@@####@@+......+++@#@##@@++++@@@@+..++@###########@++..++@@#@#@@@+++@@@@@+..++@@@@@@+++@@@@+++.....+++@@@#@@+++....",
+"......++@@@@++++......+++++++++++++++++...++++++++++++++.+........+++++++++.......++++@++++++++.......+++++@+@++++@++.....++++++++++.............+.++++++++......++++++++++++++++++....+.++++@+@@++++......++++++++++........+++++++++..+.++++....++++@+@@+@+++++.....+++++++.+++++++++...+++@+++.+.++++..........++++++++......",
+"....+...+.+..................................+..+...+.................+..............+..+.+.+............+.........+...........................+..........+..........+.+........+.........+......................+.+.+...........+++++@++........++++@++..................++++++++..............+++++...........................",
+"..+++++@+@++++++..........++@++++++.......+++++@+@++++...........++++@+@+@+++......++++@++@++@++++....+++++++.++++++++....+++++++.+.+++++++....++@+++++.+++++++...+++++++++++@+++++...+++++++++++@+@+++.....+++@++@++@++++.......++#####@@+.....++@####@++..............+++@#$###++...........++@@@@+++.........................",
+"++@@#####$####@@+......+++@@####@@++....++@@########@@@+.......++@@########@+++..+++@###$##$##$#@@+..+@@###@@@@@####@@+.++@@###@@@+@@####@+.++@@###@@++@@@###@+.++@@#####@@#@####@@.++@@#####@@#@####@@...++@@#####$####@@+....++@#$%%%%##@.....+@#$%%$$@++.............+@#$$%%%$#@+.........++@#$$$#@+.........................",
+"+@#$%%&&%&%&%$$#@++...++@#$%%%&%%$#@++..+@#$%%&&&&&%%$#@++....++@#$%%%&&%%%$#@+.++@#$%&%&&%&&%%%$#@.+@#$%%%$$$#$$%%%$#@.+@#$%%%$$###$$%%$%#.+@#$$%%$$###$$%%$%#.+@#$%%%%%$$$%%%%%$#.+@#$%%%%%$$$%%%%%$#..++@#$%%&&%&&%&%$#@....++#$===--&$#++...+@%->>*&$@+............++#$&=-===%#++........+@#$===%#@+........................",
+"@#%&*****=****&%$@+.+++@#%%******&%$@@+.@$%&********&&$#@++.+.+#$%&********&%#@.+@$%&*****=**=**&%#.@$%&****&%&&****&%$.@$%&****%%$$&&***&%.@$%&****&%%%&****&%.@$%&*****&&&*****&%.@$%&*****&&&*****&%..+#$%&*******=**&%#....+@$&=----*&$@....@#%->>=*%#@............+@%&*->--=&$@+.......++#%&===&$#@........................",
+"@%*;;;;;;;;;;>>-%$@..+#$&*>>;;;;;==*$@+.#$->;;;;;;;;>>*&%@+..@@$&*;;;;;;;;;;*%#.+#%*;;;;;;;;;;;;;*&.@%*;;;;;=**>>;;;>-%.#$->;;;>>&&&>>;;;--.#$->;;;>>*&&>>;;;--.#$->;;;;;===;;;;;>-.#$->;;;;;===;;;;;>-.++#%>>>;;;;;;;;;;*%...++#%*;;;;>=&$@++..+#%=-->>&$@+..........++@&*=;;;;;*$#+......++@$*=;;;=*$@+.......................",
+"#&*;;;;;;;;;;>>>&%#.+@$&*=>>;;;;;-==%$@.$%->;;;;;;;;>>=*&$@.+@$&*=;;;;;;;;;;*&#.+#&*;;;;;;;;;;;;;=&.#&*;;;;;===>>;;;>-%.#%->;;;>>***>>;;;>-.#&->;;;>>*=*>>;;;>-.#%->;;;;;===;;;;;>-.#%->;;;;;===;;;;;>-.+@$&>>;;;;;;;;;;;=&...++#%*;;;;>**$@+...+#%=-->>*$#@..........++@&*=;;;;;*%#++.....++#%==;;;=*%#++......................",
+"#&*;;;;;;;;;;>>>=&$.@#%*==>;;;;;;--=&%#.#%->;;;;;;;;;>==*%#.+#$*==;;;;;;;;;;=*$.@$*=;;;;;;;;;;;;;**.$&=;;;;;===>;;;;>>%.$%>>;;;>>***>>;;;>>.#%->;;;;>===;;;;;>-.$%->;;;;;-=-;;;;;>-.$%->;;;;;-=-;;;;;>>.+#$&>>;;;;;;;;;;;=&...++$&*;;;;;*&$@++..+@$==->>*&$@++.........+@%*=;;;;;*&$+......+@$%==;;;==&#@+......................",
+"@%*->>;;-----;;;>-%.@$&>>;>>-----;;;=&$.#%*=;;;>>--->>;>>&$.@$&>>>;;-----;;;=&$.@$*=;;;--;;;--;;;=*.#&*;;;>-***==;;;==%.#%==;;;==&&*==;;;==.#&==;;;-=>->=-;;;==.#%*=;;;>>===>>;;;=*.#%*=;;;>>===>>;;;=*.+#%*>;;>>--->>;;;**...++#&=;;;=**$@+....+@#%**;;=*%#@.........+++#$&*=;;;*&#@.....++@$&>>;;;>>&$@++.....................",
+"@$&=--;;-====;;;>>&.#%*;;;>>===--;;;=*%.#$*=;;;>>-=->>;;>*$.@$&>>;;;-----;;;=*#.@$*=;;;--;;;--;;;=*.#&*;;;--*&**=;;;==%.#%*=;;;==&&**=;;;=*.#%==;;;-=>>>-=;;;==.@$*=;;;>>===>>;;;=*.@$*=;;;>>===>>;;;=*.+@$&>;;>>--->>;;;*&....@#&*;;;=*%#@++....+@$&*;;==*$@++.........+@#%*=;;;*&#++.....@#%*>>;;;>>*%#+......................",
+"+#%=--;;==*=*>>>>>&.#&=;;;-=****=;;;>-%.@$&*;;;--===--;;;*%.#$*;;;>>=====>>>**#.@#*=;;;==;;;==;;;=&.#&*;;;-=*%&*=;;;=*%.@$&=;;;==&%&==;;;**.#$*=;;;--;;;--;;;=*.+#%*=--;;;;>;;--=*$.+#%*=--;;=-=;;--=*%.+@$&->>-==-=;;--=*$....@#&*;;;**$@+......++#%*->>-=%#@...........+#$&=;;;*&#@....++@%*=;;===;;=&%@+.....................",
+"@#%==-;;=***=-->>>*.$&=;;;==&&&**;;;>>&.@#&*;;;-====--;;>*%.@%&>;;>-=====>>>*&#.@#**;;;==;;;==;;;=&.#&*;;;==&%%&*;;;=*%.@#%*;;;==&&&==;;;*&.#%*=;;;--;;;--;;;=*.+@#%==-;;>>>;;-==%$.+@#%==-;;-=-;;-==%$.+@$%-->=-==-;;-==%#...++#&*;;;*&$@+.......+@#&->>>>*%#++.........+@$&*;;;*&$++....+@%&=;;-==;;**$@+.....................",
+"+#$==-;;=***=->>>>&.$*=;;;==%$$&*;;;>>&.+#&*;;;--===--;;;&$.@$&>;;->=====>>>*&#.@#&*;;;==;;;==;;;*&.#%*;;;-=%$%&*;;;=*$.+#%*>;;==&&&==;;;*%.@$*=;;;--;;;--;;;=*.++#$*=-;;>>>;;-=*$#.++#$*=-;;=-=;;-=*$@..+#$==-=-==-;;-=*%@...+@#&*;;;*&$++.......++#$*=;;;*%$++..........@#&*;;;*&$++...++#%**;;===;;=&%@+.....................",
+"+#$=--;;===*=>>>;>*.$*=;;;=&%##$*-->>>*.@#&*;;;>>-->;;>>>&$.@#%==-;;;;;->===&$@.+@#&*====;;;====*%$.#&*;;;==&$$**;;;=*$.+#$*>>>>-***-->;>*%.@%*=;;;>>;;;;;;;;=*..+@#%&=->;;;>>**%#@..++#%&*;;;;;;;*&$#@.++@#$&**=>;>;;**%#@...++$&*;;;*&#@.........+@$*=;;;=&$@+..........@$&*;;;*&#@....++@%*=--***--**%@+.....................",
+"+#$==-;;=====>>>>>&.$*=;;;*&$##$&-->>>*.+#%*;;;>>>>>;;>>-%$.+#%*=-;;;;;>>===*$#.++##&&**=;;;=***&$@.#%*;;;-=%$%&*;;;=*%.+@$&->>>>=*=--;>>&$.@$*=;;;>>;;;;;;;;=*...+@$&*->;;;>-*&$@+..++@#%*;;;;;;;*%#@+...+@#$&*=>;;;;*&#@+...++$&*;;;*&$++........+@#%*>>>-=%#++........++#&=;;;*&$++....+@%%*==&&&==*&%@+.....................",
+"+#$==-;;;;;;;;;;=*%.#*=;;;=*&$%%*->>>>&.@#&*;;;;;;;;;;==&%#.+#$&*===>>>;;;;;*%#..++@#$&*=;;;=*&$#@+.#&*;;;==&$$**;;;=*$.++#%==-;>=*=;;--=%#.@$*=;;;;;>->;;;;;=*..++@$&*>>;;;>>*&$@+....+@$&==;;;=*&$@+....+@#%&=-;;;==*%$#+....@$&*;;;=%$@..........+#$*>>>--&$@.........+@#&*;;;*&#@.....++@#$$$$#$$$$#@++.....................",
+"+#$==-;;;;;;;;;;=*$.$&=;;;==&&&**;;;>-&.+#&*;;;;;;;;;;=*&$@.+#$&**==>>>;;;;;*%#..+++@#%&=;;;**$#@++.#%*;;;==%%%&*;;;=*$.++#$==-;;===;;-==%#.@$*=;;;;;->-;;;;;=*..+@#$&=>>;;;>>**$#@....+@#%*=;;;=*%#@+....++#%*--;;;=**&$#@...++#&*;;;*&#@..........+@$&>>;--&$@++........@#&*;;;*&$++.....+++@@@@@@@@@+++.......+.++.+.+++.+...",
+"+#%==-;;;;;;;;;>*&#.#**;;;===**==;;;>-&.@#&*;;;;;;;;;;=*&$#.@#%**===>>>;;;;;*&#....++#$&=;;;=&$#++..#%*;;;==&%&*=;;;=*$..+@#*==;;===;;==*$@.@$&=;;;;;-->;;;;;=*.++@$&*=>>;;;>>=*&$@....++#%*=;;;**%#+....++@$%*->;;;==**&%#....@$&*;;;*&$++..........+@$**=;;*&$#++......++$&*;;;*&#@.......+++@+++++++++....+++@@+@+@+@++@++++.",
+"+#%=--;;----==*&%#@.#%*>>>;;--->>;;;=*%.+$&*;;;---=-;;--=%$.#%*>>;=======;;;=*$....++#%&=;;;=*$#++..#%*;;;-=****=;;;=*$..++#%**;;==-;;=&%#+.+#&*;;;;;--=;;;;;*%.+@$%==-;;===;;--=%$....+@#%*=;;;=*$#++...+@#&*=;;>>>==;>>*%....+#&*;;;=&$@+...........+@$&*;;==&#@+.....++@$&=;;;*&$++..........++.++.......++@@####$###$$#$#@+.",
+"@$&=--;;---==*%%#@+.@$*>>>;;->>>>;;;=*%.@$&=;;;--===;;--=&$.#&*;;;=======;;;=*$....+@$%*=;;;=*%#@+..#$*;;;-==**==;;;=*$...+@#&*;;---;;*%$@+.@#&*;;;;;=--;;;;;*&.@#%*-->;;=--;;>--*%....+@$&*=;;;=*%#@+..++#$*==;;>>>==;;>*&...++$&*;;;**$#++.........++@$&*;;==*$#+.....++#%&=;;;*&#@.......................@@$$%&&%&%&%&&%&$$#.",
+"@$&>>;;;>>>==%$#@++.@#%->>;;>>>>>;;;=*%.@%==;;;>>===>>;;;=*.$*=;;;>>->>>>;;;=&$...++#%*--;;;-=*%#++.@$&=>>;;>>->>;;;*%#...++#%*->;;;>>*%#++.+#%*;;;;;===;;;;;*&.@$*=;;;;;-==;;;;;==....+#%*->;;;-=*%#++.++#&->>;;>>>>-;;;=*...++#&=;;;=*&#@+...........+@$*>;-==%$@.....+@#%*=;;;*&#@.......................@&&===--=-=-=---=*$.",
+"@$*>>;;;>>>=*%#@++..+#%&==;;;;;;;---==$.#$==;;;>>=*=>>;;;=*.#*=;;;>>>->>>;;;**#....@$%*>>;;;--*%$@+.+#%=--;;>>>>>;;>*%#...++#$*->;;;>>*%#+..@#%*;;;;;===;;;;;*%.#%=-;;;;;-=-;;;;;==..++@$&*>>;;;--*%$@+.+@$&>>;;;>>>>>;;;=*....@#&*;;;>-*%#++..........+@$%=-;;>&$@....++#%*->;;;*&#++......................#**--->>---->>>>-=%.",
+"#$*>>;;;>>>=*%@++...+@$&*=;;;;;;;---==%.#$==;;;>>=**>>;;;=*.$&=;;;>>>>>>>;;;*&#..++@$&*->;;;>-*&$@+.+#$==-;;>>>>>;;>&$#....+@#&->;;;>-&$@+..+#$*>;;;;=*=;;;;>*$.#%==;;;;;===;;;;;==...+@$&*>>;;;>-**$@+.+@$&>>;;;>>>>>;;;=&...++#&*;;;>>*&$@+..........++#%==;;;*%#....+@$&*->;;;*&$+.......................$*=-->>>>>>->>>>-=&.",
+"@%*>;;;>;;;=*$@+....+@$*=-;;;;;;;;;;-=$.#$=-;;;;>****=;;;==.#&*>>>>;;;;;;--=&$#...++$**>;;;;;>=*%@+.++#$**>>;;;;;-==%#@....++#%==;;;==%#++..+@$&-->>-***>>>--&$.#$=-;;;;;===;;;;;==..++#%*=;;;;;;;**%@+.++#%-->;;;;;;;;;>*&...++#%*;;;>>=*%@++..........+@$**;;;=&#...++@%&=>>;;;*%#++......................$==;;;;;;;;;;;;;;>&.",
+"@$&>>>>>>>>=*#@+....+@#*==;;;;;;;;;;==%.@#==>>>>>&%%**>>>==.#%&-->>>;;;>>==*%#+...+@#%*>>;;;>>*&%@+..+@#$*>>;;;;>==*$@+.....+@$*=>>>=*$@++...+#$=--=-&&&=---=$#.@$*=;;;;>*=*>>;;>==...+@%&*>>;;;;>**$@+.++#$=--;;;;;;;;>>*%....+#%*>;;;;=*&@+...........+@#%*;;;*&#...++#&*=>;;;;*&#++......................$=->;;;;;;;;;;;;;>&.",
+"@#$&&****&&%$@+......@#*==;;;;;;;;;;==$.@#$%&**&%$$$$%&&&%$.+#$%&&*******&%$#@+...++@#%&&****&%$@++..++@#$&&****&&%$#++.....++#$%&&&%$#++...++@#$%&%%$$$%%%%$#@.@#$&&***&&%&&&**&%$...++@$%&*****&%##++..+@#$&&********&&%#...++#$&>>>;>=*%#++...........+#%&;;;*%#...++@&*=>;;;>*$#+.......................$*=>>;;;;;;;;;;;>>%.",
+"+@@$$$%%%$$#@++......+@#%&===*=====*&$#.++#$$$%$$#@@##$$$#@.+@@$$$$$%%$%$$#@+++....++@#$$%%%$$#@@.....+++##$$%%%$##@@+......+++##$$$##@+.....++@#####@@@##$##@+.+@##$$%$$##$$$%$$$#....++@#$$%%%%$#@++...++@##$$%%%&%%%$$#@....+@#&->>>>**%@++...........+@#%***%#@...++@%&*>>>>>%$@+.......................#$%&************&%$.",
+".++@#@#@#@@@++.......++##%**&&**=***%#@..++@@@#@@+++++@@@@+..+++@@##@##@@@@++.......+++@@##@#@++.+......++@@@#@#@@@+..........++@@@@@++.......+++@@@++@++@+@+++..++@@#@#@@@@@@##@@+...+.++@@@##@@@@++.....+++@#@######@#@++.....+@$%&&&&%##++.............+##&&&##+....+@#$%&**&%$#++.......................@##$$%%%&%&%%&%%%##.",
+".+.+++++++++.........+++@#%&$$%&&&%%#@+...+++++++++.+.++++....++++++++++++..+.........++++++++++........+.++++++++.+............++++...............++..+++.+.....+++++++++++++++++........+++++++++.........+.++++++@++++.......++@#$$%$#@@+..............++@$$$@++......@@#$$$%##++........................++@@##########@#@@+.",
+"..........................................++++++..........................................++++++................................++++++++++.......................+++++++...................++++++................+.+++........++++++.................++++++++...................................................................",
+".......++++++............................+@@@#@@++.......................................++@#@@@++.............................++@@#####@++......................+@@##@@++................++@@@+@+..............++@@@@++....+++@#@@@+..............+++@@###@++..................................................................",
+"......++@##@@+..........................+@#$%$$#@@+....................................++@#$$$$#@++..........................++@@$$%%&%%$#@.....................+@#$$$$$@++..............++#$$$$#@+............+@#$$$$@@+...+@#$$%$#@++............+@@$$%%$$#@+.................................................................",
+".....+@@$$$$#@+.........................@#%&&**%$@++...................................+@#$&&*&%$@+..........................++#$%******&%#.....................@#%&**&%$@++............++#$%&&%$#++..........++#$&&&&$#++..@#$&&*&%$@+..........+++#$%&***&$#++................................................................",
+"....++@%&===$#@+........................@$=>;;;=&$@+..................................++#%*;;>>>%$@.........................++#$&>>>;;;;;&%.....................@$=-;;;=*#@+............+@$==;;;&$@+..........+@$%;;;==$@+..@%&;;;>-%#@+..........+@%*=;;;;>&$@+................................................................",
+".....@$&*=-=&%#++.........+..++.........#%->;;;=*$#++................++.++............+@$&*;;>>>&$@........+...+.+.........++@$&*>>;;;;;;&%.........+.+.+.+.....#$->;;;=*$#++..........++#$==;;;&$#++........++#$*;;;==$#++.@%*;;;>>&$@+++........+@&*=;;;;;*%#++.....+...+.+...+..........+.++.+.++..............+...+.........",
+"...++@$*=;;;=&$@+.......++++++@+++......#$*=;;;==&$@@++.........+++++@+@+++++.......+++@$%*->;;;*%@......+.++@++++++.......+@#%=-;;;---==&$......+++@+@+@+@+++..#$*=;;;-=&$@@++........++#%==;;;*%#+.........+#$&*;;;-=%#++.@$&-->;>*%#@++++.+...+.@#$*==;;;*%#++....++++@+@+@@+@+++......++++++++++@++.........+.+@@++@+++.....",
+"....+@$==;;;=*$@+......++@@#####@@++....@$*=;;;-=&%$#@@@++....+++@####$#$##@+++...+++@##%**->;;;*%#.....++@###$###@+++....+@#$&--;;;--===%#...+++@@##$######@@+.#$*=;;;-=*%$#@+++......+@$%=-;;;*%#+.......++@#$**;;;==%#@..@$&=>-;;*&$$###++.....++@$&=-;;;*&$+....++@#####$######@++...+@@#########@@++.....+++@@##$###@+++...",
+"....+@$*=;;;=*&#++....++##$%%&%%$#@@+...@$&=;;;--**&%$$#@++.+.+@#$$%%&%&%%%$#@+..++@#$$&&*=->;;;*%#..+++@#$$%%&%%%$#@++...+@$&*->;;;---=*%#..++@#$$%%%&&&&%%$#@.@$&=>;;--**&%$$@++....++@$&=-;;;*%#+......++@#%&*=;;;-=%#@..+$%=->;;**&%$$$#@++....+@#%==;;;*&#@+...@#$$%&&&%&&&%%$$@@..+@#$$%%%%%%%$$#@@+...++@#$$%%%%%$$#@++..",
+"....+@#&*>>>>>%#@....++#%&*=====*&$#++..@#&*;;;>>---==%%##+.+@@$$&===-=-====$#+.+@@$%%==--->>;;;*&#...@@$%%====-==&%$#+.++@$*==>>;;;>>-==%#.+@@$%&===-===-==*&#.@#&*;;;>>--===%$#@+...+@$&*-->>-*%#@......+@#*==-->>>-=&$@+.+#%==-;;=**====*#@+.....+@$&=;;;*&#+....#&*====--===-==%$#+.@#&*====*=====%$#@+.+@@$%%===--==&%$#++.",
+".....+@$&->>>-&#@+..++#$&*=-->--=*&$@@..+#&*;;;>>->-==**%$@.+@$%**==->----==&%@.+@$%**==->->>;;;*&#.++#$%**==>----**%$@.++#%==-;;;;;>--==%#.+@$%&*==-->-----=*$.+#&*;;;->>->==*&$#@...+@$&*->>--*%@+.....++#$*==>->>--=&$@+.+#%==-;;===--==*%#+.....+@$&*;;;*&$@....$*===---->-----*&$@.#$*=---==->-==*%$#@.+@$%**==-----**%$@@.",
+".....++#$%**--%#++..++#%>>>;;;;;;;*&$@+.@#&*;;;;;;;;;;>>>%$.@$%>>>;;;;;;;;;;*&#.@$%>>>;;;;;;;;;;*%#..@#%>>>;;;;;;;>>>%$..@@%->>;;;;;;;>>-%#.@$%>>>;;;;;;;;;;--%.@#&*;;;;;;;;;;-==$@..++@&*=;;;;;*%#@+.....@#%->>;;;;;;;*%#+.+@$==-;;---;;>>-%#+.....++$&*;;;*&#++...%=-;;;;;;;;;;;;>-%#.#%--;;;;;;;;;;-==$#.@$%>>>;;;;;;;>>>&#@.",
+".....+++#$%&==%#++..+@#&>>>;;;;;;;=*%@@.+#%*;;;;;;;;;;;>>&$.@$&>>;;;;;;;;;;;=*$.@$&>>;;;;;;;;;;;*&#.+#$&>>;;;;;;;;;>>*$.++#%->>;;;;;;;>>-%#.@$&>>;;;;;;;;;;;>-%.+#%*;;;;;;;;;;--=%#..++#&*=;;;;;*&#@.....++#%->>;;;;;;;*%#+.+#$==-;;---;;>>-%#@......@#&*;;;*&$++...%->;;;;;;;;;;;;>>&$.#%->;;;;;;;;;;--=%#.@$&>>;;;;;;;;;>>&$@.",
+".......++@#$=*#@+...+@$&>>;;;;;;;;=*&#+.+#&*;;;;;;;;;;;>>*%.#%*>>;;;;;;;;;;;=*$.#%*>;;;;;;;;;;;;*%#.+#&*>;;;;;;;;;;>>*%.++#$-->;;;;;;;>--$#.#%*>;;;;;;;;;;;;--%.+#&*;;;;;;;;;;>-=&$...+@%*=;;;;;*&#+.....++#$=->;;;;;;;*%#+.+#$==-;;-->;;>>-$#+.....+@$&*;;;*&#@....%=>;;;;;;;;;;;;>>&$.#%=>;;;;;;;;;;>--&$.#%*>;;;;;;;;;;;>*&#.",
+".......+++@@###++....@$&==->>>>>;;-=*$@.+#&*;;;;;===--;;;=&.$&=;;;--====-;;;=&$.$&=;;;--===;;;;;*&#.+$&=;;;--===>-;;;=&..+@#&*=->;;;=**&%#@.$**;;;--===>;;;;=&%.+#&*;;;;;===>>;;;&$...++@$&*=;;;*&$@......+@#$&&**===;;*&#@.+#$==-;;;;;>-=&%$@+......+$&*;;;*&$++...$*=;;;>>>>>>>>>>>*$.#$*=;;;;>===->;;>&$.#**;;;--===--;;;=&$.",
+".........+++@@++....+@$&===>>>>>;;-==$@.+#&*;;;;>=*=--;;;=*.$&=;;;-=***=-;;;*&#.$&=;;;-==*=>>;;;*%#.@$&=;;;->===->;;;=*...@@$&*->;;>=*&%#@+.#*=;;;-==*=;;;;>=&$.+#&*;;;;>===->;;;*%....+@$%*=;;;*&#@+.....++@#$%&&===;;*&#+.+#$==-;;;;;--*&$#++.....+@#&*;;;=%$@....$&*;;;>>>>>>>>>>>&%.@$&*;;;;>=*=->;;;*%.$*=;;;-=***--;;;=&$.",
+"..........+.++.+....+@%&>;;;;;;;;;-==$#.+#%*;;;--***==;;;=*.$*=;;;=**&&&*===*%#.$*=;;;==**==-;;;*&#.@$*=;;;;;;;;;;;;;=*...++#%*>>>>>*&$#@++.$*=;;;=***==-;;;*&$.+#%*;;;--***=-;;;*%....++@%&=;;;*&$+.......+++@##%**=;;*&#+.+#$==-;;;;;-=*%#@+.......@$&*;;;*&#@....$&*;;;-->>>>>>>>>*%.@#&*;;;-==**--;;;*%.$*=;;;=*****=;;;=*$.",
+"....................+#%*>;;;;;;;;;-==$#.@#&*;;;-==***=;;;=*.$*=;;;=*&$%%&===&$@.$*=;;;=****--;;;*%#.@$*=;;;;;;;;;;;;;=*...++#%&->>>>*%$@++..$*=;;;=****--;;;*&#.+#&*;;;-=***=-;;;*%.....+@$&*;;;*&$@+........++@@#**=;;*&#@.+#$=--;;;;;==&%#+++.....++$&=;;;*&$@+...#&*;;;>->>>>>>>>>*%.+#&*;;;-=***=-;;;*%.$*=;;;=*&&&*=;;;=*$.",
+"....................+#&*;;;;;;;;;;-==%#.+#&*;;;--***==;;;=*.$*=;;;=*&%$%%*=*%$#.$*=;;;==***--;;;*&#.@%*=;;;;;;;;;;;;;=&...++@%*>>>>>*&#@++..#**;;;>-===;;;;;*%#.+#&*;;;-=***=-;;;*&...+++#$*=;;;=&$@++.........++#%*=;;*&#+.+#%==-;;;;;==*%$@+.....++@$&*;;;=&$@++..#&*;;;-->>>>>>>>>*$.+#&*;;;-=***=-;;;*&.$*=;;;=**&**=;;;=*$.",
+"....................@#*=;;;=====;;-==%#.+$&*;;;;>==*--;;;=*.$&=;;;-=*&%&&===*&#.$&=;;;--*==;;;;;*&$.@$*=;;;>>--->->>>*&...+@#%*>>>>>*&$#@++.#$*>>>;;;;;;;;;;*&#.+$&*;;;-=*&*==;;;*&....+@#%&=;;;**%#@++.......++@#&*=;;*%#@.@#%=--;;>>>;;=*&#@+....+@#%*=;;;**%$@++.$%=;;;>->>>>>>>>>*&.@$&*;;;-=***=-;;;*&.$&=;;;--***--;;;=*$.",
+"....................@$*=;;;=====;;--=%$.@$&*;;;;;=*=->;;;**.#**;;;>-*****====*#.#**;;;>-===;;;;;*&$.@#*=;;;>>---->>>>*&..++#$&*>>>>>=*&$$@+.@$%->>;;;;;;;;;;*%#.@$&=;;;-=***=-;;;*&..++@#%&*=;;;=**%#@@.....+++@@$&*=;;*&#+.@#&==-;;>>>;;=**%#@..++@$%&*=;;;=*&%#@+.$&*;;;-->>>>>>>;>*&.@$&=;;;--***--;;;**.#**;;;--=*=->;;;**#.",
+"....................@#&=;;;=====;;--=&$.@%&=;;;;;===->;;;*&.#**;;;>-==*==-===*$.#**;;;>-===;;;;;=&$.@#&*;;;>>----->>>*%..+@$%*=>>>>>==*&%#@.+#$&*==---->>;;;*&#.@$&=;;;===*===;;;=&.++@#%**==;;;==*&%#@....+++##$&*==;;*&#+.@$&=--;;>>>;;===&%#..+@#%&*==;;;==*&%#@.$&=;;;>->>>>>>>;>=&.@$**;;;-==*==-;;;=&.#**;;;>-===>>;;;*&#.",
+"....................@#&*;;;;;;;;;;;;;*%.@%=-;;;;;;;;;;>>>*%.#$*>>>;;;;;;;;;;-=$.#$*>>>;;;;;;;;;;--%.+#%*>>>;;;;;;;;;;*&.++#$->>;;;;;;;>>-$@.++#$&*==--->-;;;*%#.#$=-;;;;;===;;;;;--..+#$=>>;;;;;;;>>-$@....+@#$%&*===;;*%#@.#&*;;;;>==-;;;;;-=$..+@$->>;;;;;;;>>-$@.%=-;;;;;>>;;>>>;;-=.@$=-;;;;;===;;;;;--.@%*>>>;;;;;;;>>>*%@.",
+"....................+#&*;;;;;;;;;;;;;*%.#$=-;;;;;;;;;;>>-%$.@$%->>;;;;;;;;;;-=$.@$%->>;;;;;;;;;;-=$.+@#%->>;;;;;;;;;;*%.++#%->>;;;;;;;>>-$#..+@$&*-->>>;;>>>&$@.#$--;;;;;===;;;;;-=.+@@$->>;;;;;;;>>-$@..++@#**===>>>;>*%#+.@&*;;;>>===;;;;;-=$.++#$->>;;;;;;;>>-$#.$--;;;;>>>;;>>>;;-=.#$--;;;;;*==;;;;;-=.@#%->>;;;;;;;>>-%$@.",
+"....................+@$&*===-=-=-=-==%$.@$*=======-===**%$@.+#$%**==========&%#.+#$%**===-===-===&$..+#$%**==-=-====*%#.++@$*===----===**$@.++@$&*->->>;;>>>%$@.@$*==--==***=-====&..+#$&*===--====**$@..++#%===->;;;;>&$@+.@$&====****==--=*&$..+@$&*===--====**$@.$*==--=====-======&.@$**==-==***=-====&.+#$%**=======**%$@+.",
+"....................++#$***========**$#.+#%**========*%%##+.++@#%&*======**&%#@.++@#%&*=====*==**%#.+++@#%&*======**%$#.++@#**========*&%#@.++#&*=;;;;;;>=*&$@+.+#%*====*&%&====**%...@#%**=======**%#@..++#%=>>;;;;;=*%#@+.+#%*==**%%&*====&%#.++@#&**=======**%#@.#%*====***==*=*==*%.@#%*=====&&&====**%.++@#%&*=====*%%##++.",
+"....................+++@%%&********&&#+.+@$%&*&&&**&*&$#@++..+@@#$&&*****&&%#@+..+@@#$&&*&*****&%$@...+@@#$&&***&*%$$@+..+@@%&&**=*=**&%$@+.++@%*=>;;;;>>*&%#@+.+@$%****&$$$&***&%$..++@$%%&*****&%%$@+..++#%->>;;;;;=*$#+..+@#***&%$#$&****%$@...+@$%%*&****&%%$@+.@$%***&&&***&&&**$$.+@$%&&***$#$&****%$.+++@#$&&***&*$#@++..",
+"......................++@####$#$#$##@@+.++@###$#$#$###@+++.....++@####$####@@++....++@####$######@+.....++@####$####+++...+@@#$#$$$$###@++...+@%**>>;;;>-&$#++..+@@#$$$##@@###$###@...+++#####$#$##@++...++#$=->;;;>>*%#@.+.++@####@@@@##$$##@+...++@@##$$#$$##@++..+@###$####$#$#####@.++@###$##@#######@@...+++@######@@+++...",
+"......................+.++@@@@@@@@@@++....++@+@@@@@+@+++.......++++@@@@@@++++......++++@@@@@@@@+++......++++@@@@@+++++.....+++@@@@#@@@@+++..+++@$%&****&&$#@++...+++@@@@++++@@@@+++...++++@@@@@@@@+++++...+@#%&&***&&%#@+.....++@+@++++@@@@++++.....++@+@@@@@@+@++..+++@@@@@+@@@@@@++++..+++@@@@@+++@@@@+++....++++@@@@@+++.....",
+"................................................................................................................................................................................................................................................................................................................................",
+".....................................................................................+.+............................................................................................................................................+++++@+............++++++.+.........+++++++.................................................",
+".....................................................................................++++++........................................................................................................................................++@@##@@++.........++@###@+.........+++###@@++...............................................",
+"...................................................................................++@@#@++.......................................................................................................................................++@#$**$#@+.........+@#&&&#@+........+@#$**$#@++..............................................",
+".................................................................................+++##$$$#@++....................................................................................................................................++#$$&*=%$#++.......++#$*=*$#++......++#$%*=%%$#++.............................................",
+".....+....+...................+..................+.+..............................+#%**-=%#@+..................................+.......................................+....+.............+..................+..+................+#$%**==%$#+........+@$&===&$@+.......+#$&==*&&$@++............................................",
+"..++++@+@+++@++.........+++++++@++++++......+++++++++++++.........+++++@+++++...++@$&*=--&$#@+++.......+++++...++++++.....+++++++++++++@+++...++++++++.+++++++.....+++++++++++++++....+++++++..++++@+++....++++++@@+@+++........+@$%>>>--%#@+........+#$*;;;*$#+.......+@#%=->>>%$@+............................................",
+".++@@########@@@+......++@@#########@++...+++@##@#@@###@@++.....+++@#######@+++..+#$==-;;*&%##@++....+@@@#@@++++@@#@+++..++@####@@@@#####@+..++@@##@@+++@#@##@@...++@###@@@@@###@++..++@#@#@@@++@#@#@@@..+++@#########@@+.......+@$*>>>--%#@+.......++#%*;;;*%#++......++#%-->>>*$@+............................................",
+"+@#$$%%%&%%%%$$#@++.+++@#$$%%&%&%%%%$#@..++##$$%$%$%$%%$$#@....++@#$$%%%%%$$#@+.+@#%==-;;=**%$$@++..+@#$$$$##@##$$$$#@+.+@#$%%%%$$$$$%%%$$#.+@#$%$%$$####$%$$$#.++@#$%%%$$$$$%%%$#@.+@#$$%$$#####$$%$$#..+##$%%&%&%%%$$##++....++#%*;;;=&%@+........++#&*;;;*&#+.......++#%&=;;;*%#@............................................",
+"@#%&*********&&$$@+.++@$$%**********&$#..+@#%&***&*****&%$#...++@$%&*******&%$@.+#$*=--;;===*&%$#++.@#$&**&%$$$$&&*&%$@.@#$&*****&&&*****&%.@#%&***&%%$$&&***&$.+@#%%****&&&****&%#.@#$&***&%$$$&&***&$.+@$%&*********&%$@+....++#%*;;;**$@++.......++#&*;;;*&#@........+@$&*;;;*&#++........++++++++.+++.......................",
+"#$=-;;;>;;;;;>==*$@.+@$*==>;;;;;>;;;-=$.++#%->>;;---;;;>>%$...+@%&*>;;;;>>>>>%#.+#%*;;;;;;;;;;**%@+.#$=-;;;=*%%&;;>>>%$.#$=-;;;;;===;;;;;-=.#$=-;;;>-*&*->;;;-=.+@%*;;;;;===;;;;;*%.#$=-;;;>-&&&->;;;-=.@#%>>>;;;;;;;>>-%#+....++$&*;;;*&$@+........++$&*;;;*&$++.......+@$**;;;*&#+......+++@@@#@@@@@@@@++.....................",
+"#%--;;;;;;;;;;==*%#.+#$===;;;;;;;;;;>-%.+@#%>>>;;>->;;;;>&$..+@#&*=;;;;;;;>>>&$.@#**;;;;;;;;;;=*&@+.#%=>;;;=*&&*;;>>>&$.#%->;;;;;===;;;;;--.#%--;;;>>*=*>>;;;--.+#%*;;;;;===;;;;;*%.#%--;;;>>***>>;;;--.@$&>>>;;;;;;;>>>%$+.....@#&*;;;*&#++........++#&*;;;*&#++........+#&*;;;*&$@......+@##$%$%$$$$$$##+.....................",
+"#%=>;;;;;;;;;;--=&$.@$&==-;;;;;;;;;;>=%..@#%>>>;;>>-;;;;>*$..+@$**=;;;;;;;;>>&$.+#&=;;;;;;;;;;=&%@+.#%->;;;==***;;;>>*$.#%=-;;;;;==-;;;;;>=.#%->;;;>>===>>;;;>-.+#%*;;;;;-=-;;;;;*%.#%--;;;>>=**>>;;;>=.@$&>>;;;;;;;;;>>%#@...++#%*=;;;*&#@..........@$&*;;;*&#@........++#&*;;;=*$#@...++@#$%&***&&&&&&%$#.....................",
+"@%*=;;;;;>-->;;;;*%.#$*;;;;;->-;;;;;=*%.++#%*=-;;;;;-->>>*%.+@#%>>;;;->-;;;;;*%.+#$*>>>;;---==&%#@+.@%*=;;;-=&**>>;;;*%.@%*=;;;>>===>>;;;=*.#%=-;;;-=;;;--;;;==.+@$&=->;;=-=;;>-=&$.#$*=;;;>-===>>;;;=*.#$&>;;>>>>>;;-==%#+....+#%==;;;*&#++........++#&=;;;*&$++.......++$&*;;;==%#++..++#%==-;;>>>==>>>&%.....................",
+"@%*=;;;;;--->;;;;*%.#&*;;;;;---;;;;;=*%..+@$*==;;;;;-->>-&$..@#%->;;;>->;;;;>&$.+@$&->>;;--==*%#@++.@$*=;;;==*&*->;;;*%.@$*=;;;>>===>>;;;=*.#$==;;;--;;;--;;;=*.++#%==-;;-=-;;--=%#.@$*=;;;>>=*=>>;;;=*.@$&>;;>>>>>;;-=*$#+...+@$%>>;;;*&#@..........@#&*;;;=%$@.........@#&*;;;>>&$@+..+@$&=->;;>>>==;;>*%.....................",
+"@$&*;;;>-=*===;;;=*.$&=;;;=====>>;;;*&$..++#%*=;;--=***&%$#.++#%=--;;;;;---==&$.+@#&=--;;=**&$#@++..@$&*;;;==&&*=-;;;*%.+#$*-->;;===;;>-=&%.@$**;;;>>;;;>-;;;=&..+@#%*=->;;;>>**%$@.+#$*-->;;===;;>-=*%.+#%*==--;;;>-=*%#@+...++$&>>;;;*&#@.........++#&*;;;*&#@........++$&*;;;>>&#@+..+#&*;;;>>;;;;;;>>*$.....................",
+"@$&*;;;>-=**==;;;=*.$*=;;;==**=--;;;=%$...+@$&*;;-==*&%$##+.++#%==-;;;;;>--==&#.++#%==-;;=*%$##+++..@#&*;;;==&&&==;;;*&.+@$&=->>;===>;--=&$.@#&*;;;->;;;--;;;*&..++#$&*->;;;>-*&$#+.+@$&=->;;===;;>--&$.+#$*==--;;;>-*&%#++...+@#&>>;;;*&#++.........@$&*;;;*%$++.......++#&*;;;>>&$++..+#&*;;;>>;;;;;;>>&$.....................",
+"+#&*;;;>======;;;**.#*=;;;==*==>>;;;*%#...@@%&=;;-==&$##@++.+@#%=--;;;;;->-==&$.++#$=--;;**&$$#@@++.+#&*;;;==***=-;;;*&.++#$=-->>===;;--=$#.@#&*;;;>>;;;>-;;;*%..++@$&*->;;;>>*&$@+..+@#&==;;-->;;=*&$@.+@$**=--;;;->*&$#++....+#%*=;;;*&$+.........++#&*;;;*&$++.......++$&*;;;=*%#++..+#%*;;;--;;;;;>>>%$.....................",
+"+#%*;;;;;-=-;;;;;*&.#&*;;;;;---;;;;;*&#..++#%&=;;==*&$#@@++..@#%==--->>>;;;>>&%..+#$*=-;;=*&&%$$#@+.@#%*;;;-=***=-;;;*&..+@$&*=;;===;;=*%#@.+#%*;;;;;;;;;;;;;*%..++#$&*>>;;;>>**$#+..+@#%*=;;>--;;=*%#+.+#$*==;;>>>-===*$@+....+@#&*;;;*&#@.........++$&*;;;*&$++.......++$&*;;;*&$@+...+@$%===*=======**$@.....................",
+"+#&*;;;;;>>>;;;;;*$.#$*;;;;;>->;;;;;*&#..+@#%*=;;===&%$#++..+@#%==--->>>;;;>>*%.++@$==-;;==***&&$#@.+#%*;;;-====--;;;*&..++#%*=;;=--;;*&$@+.+@%*>;;;;;;;;;;;>*%..+@#&*=>>;;;>>=*%$@...+@#&*>>;;;>>*&$@+.+#$*==;;>>>====*%#@....+@#&*;;;*&$++........++#&*;;;*&#++.......++$&*;;;*&$++...++@#&**%%&***=&&%#@.....................",
+"+#&*;;;;;;;;>>===%#.@#%===;;;;;;>;;;*%#.++#%==-;;>--==%$#++.+@$&>;;;;>>>>>;;;=&..+@$*==;;--->>>--$#.+#%*>>;;;-=-;;;;;=*...+@#&*>>;;;>>*%#@+.+@$&-->;;-=-;;>--&$.++#%=->;;-=-;;>-=%#....@#%*>>;;;>>*%#++.@#&->>;;>>>>>;;>&$@....++$&*;;;=&$@+........++$&*;;;*&#@........++$&=;;;*&#@.....+@@##$$$$$$%$$#@@+.....................",
+"+#&*;;;;;;;;>>=**#@.+@$&==>;;;;;;;;;=%$..@#%=->;;>>--=*%$@+.+#$*>;;;;>>>>>;;;*&..+@#&==;;>>>;;>--%#.+@$&>>>;;---;;;;;=*...++@%&>>;;;>>*$#+..+@#&=->;;=-=;;--=&#.+@#&->>;;=-=;;>>-%$....+@%&>>;;;>-&$@++.@$&>>;;;>>>>>;;>&$@....++$&*;;;*&$@+........++#&*;;;*&#++.......+@$&*;;;*&#++.....++@@@+@@@@@@@+++......................",
+"@$&*;;;>-===*&&%##+.+@@$$&**===--;;;*&#.+@$&=->;;>>---*&$@+.+@$&>;;;;->>>>;;;*&...+#&*=;;>->;;>>-$#.++#%>>>;;---;;;;;==...++@$%->;;;>-&$@+...+#%==-;;===;;--=%#.+@$&->>;;==-;;>>-&$..++@$%*>>;;;*&$@++..@$&>>;;;>>>>>;;>*$@.....+#&*;;;=*$@+........++#%*>;;*%#+.......++@$*=;;;*%#@.........+++.+++++++........................",
+"@$&=>;;>-=**&%$#@++..++@#$%&**=--;;;**$.+@$*;;;;;;;;;;=&%@+.+@$&->>>>;;;;;--=&$..++@#%*--;;;;>==*$@.++#$%*=;;;;;>>;;;==....++#%*=;;;=*$#+...++@#*==>>=*=>>=**$@.@@%*>;;;;===;;;;;*%.+@#$**=>>;;>*%#++...@#&->>;;;;;;;>>-&$@....++#%*;;;=*%#@+........+#$*>>>*$#++......++#%*=;;;*%#+...............+............................",
+"@$&=;;;--=**%$@+++....++@@#%**=->;;;=&$.+@%&>;;;;;;;;;*&%@+.++#%-->>>;;;;;===$#...++@$%==;;;>>=*&#@..++#$%&>;;;;>>;;;==.....+@#&*>>>*&#@+....++#%**--&&&--**&@@.+@$&;;;;>===>;;;;&$.+@%&;;;;;;;;*%#+....+#%-->;;;;;;;>>-%#@.....+@$&;;;=*%#@++.......+@$%>>>%$@+.......+@#&*=;;;&%@++...........................................",
+"@%=-;;;;;>-=$#@+........+@#$=->;;;;;-=%.++#$%********&%$@+..++@#$&&&******&%$#@....++@#%&&**&&%$#@+...+@@$%&*********%$.....++@#%%&%$$@++....+++##%$%$%$%%$$#++.+@#$&&**&&%&&**&&$#.+@$*;;;;;;;;*%#++...+@#$&********&&%#@+.....+@$%===>>&%#+.........+#$%%%$@++......++#%&->===%$@+............................................",
+"@$--;;;;;--=$@++.........+#$=->;;;;;--$..+@#$$%&&%%%$$#@@+...++@#$$$%%%%%$$##@+.....++@#$$%%$$##@++....++@#$$%%%%%%$$$@......++@#$$$#@++......++@@###@#@##@@+++..+@#$$%$$$$$$%%$$#@.++#%*=======$#@.....++@#$$%&&&&%%%$#@++......+@#***--&$#++.......+++@#$#@@+........+#$&-==*&$@+.............................................",
+"#$**----==*&#@+..........+@#&*==----**$..+++@########@@++.....+++@@#@#####@@++.....+.+++@@#@#@@++.......+++@@#######@@+.......++++@@+++..........++++++++++++....+++@@##@@@@@@##@++..+@#**=*=***#@++.....++@@@#######@@+++.......++##%%%$#@++..........++@+@++........+++##$%%$##++.............................................",
+"+@$%**=**&%$++...........++@$%&*=***&$@...+++++++@+++++........+.++++++++++...........+.++++++............+++++++++++++........++++++.............+++.+.+++........++++++++++++++....++@#$$$%$$#@+.........+++++++++++++........+.++@@###@@++............++.+..........+++#@###@++..............................................",
+"................................................+.+++.+.................+................................+......+..+...............................++++@++++....................................................................................................................................................................",
+"................................................+++@@++............++++++++............................+++@+++.+++++++..........+.++.............+++@######@@++...........................+++++++...............+++++........................................................................+.++++++...............+...........",
+".......@@@@@...................................+@#####++.........++@@###@@++..........................+@@###@@@@@##@@++........+++@@++..........++##$$%%%%$$#@+............+.+.........+.++@@@@@@+++..........+++@@@@++......................................................................++@@##@@++...........++++++++......",
+"......@@$$$$@@.................................@#$%&%$#@+.......++@#$$$%$$#@++.......+..........+....+@#$$%%$$#$$$%$$#@......+.@#####@+........++@$%&*****&&$$@.......++++++++@++......++@##$$$$##@++........+@@#$#$##@++..................................................................++@##$$$$##@@+.......++@@####@@++....",
+"...++$$$$$$%$$++.............................++#$&>>>&$#@.....+.@@$&*====*%#@+....+.+++++.+.+++++...+@#%====*&%&*===*$#.......@@$%&%$@++.......+#$%--;;;;;>>-%#....+++@@#@@#@#@@++....+@@$$**==&&$$@@+.....+++#%&***&%#@+.................................................................+@@$$&*==&&$##@+.....++@$$%%%%$##++...",
+"..@$%%=====-=%%$..+.........................++@$&*;;;*&$#@+...++@$%*======&%#@+...++@@@@@+@@@@@@@++.+@$&=--=-***=====&$......+@$%>>>&$@+.....++@#%*->;;;;;>>-&$.....+@##$$#$$$$#@+...++#$%**====**%$#++....++@$&*===**%#++...............................................................+@#$&&=====**%$#@+...++@$%&****&%$#@+..",
+".@%&&==>>>>>>=&&%@@.............+...........+@#%==;;;==&$#+...+@$&*;;;;;;;=*%@+..++#%&&$$#$#$$&%%@@.+#&*;;;;;===;;;;;*&......+#%&>>>*$#+.....++#&*=;;>->>>;;>&$...++@$&&==%%%>>$#@..++#$==-;;;;;;-==$@@....+@#%->-->;;&$@+..............................+..+.+.+........................++@$==-;;;;;;-==$@+...++#%->;;;;;**%@++.",
+".@%*=>;;;;;;;;=*%@.........++++++.........++@#%*=-;;;==*&$@..++#$*=;;;;;;;=*&#+.++@#&**&&&%&&&**&$@.@#&=;;;;;-=-;;;;;*&.....++#%*;;;*%#++....+@$*==;;>>>>>;;;&$....+@%&*=-%&&>>%#@+.+@#%=--;;;;;;--=%$@...++@$&->->>;;*%#+.........++++.+++++......+++@++@@+@++++.......................+@$%=--;;;;;;--=%$@...++$%>>;;;;;=*&@+..",
+".#&*>;;;;;;;;;>*&#.........++@@@+++.......+@#%&*--;;;-==&%#..++#&*=;;;;;;;=*%@+.++#%*==**=**=*==*%#.+#&*;;;;;-=-;;;;;*&.....++#&*;;;*&#+....++#%*=-;;>>>>>;;>&$....+@$&*==%&&>>%#++.+#%*=>-;;;;;;>--&%#...+@#%*>>>>>;;*%#++.....++++@@@@@@@@@++..++@@###########@@+.....................+#$*=>>;;;;;;>--&%#...+@#%>>;;;;;=*%@@..",
+".$&=>;;;;;;;;;>=&$.......++@#$$$$@+......++#$=--;;;;;;;==*#..+@$*=-;;=====*&$@+.+@$&>>>;;;;;;;>>>%$.+@%&-->;;===;;>>-*$.....++#&*;;;*&#@....+@#&=->;;>>>==-==&#...++@$$%&&%$%**$#@..@#**;;;;;;;;;;;;=&$...+@%&=>>>;>;;*%$@......+@#$#$$$$$$$#@@..+@#$$%%&%&%&%%%$#@.....................@#**;;;;;;;;;;;;=&#....+#%*======*&$@++.",
+".$*=>;;;;;;;;;>=*$.......++#$%&&$#++.....+@$%=--;;;;;;;-=*$..+#$===;;==***%%#@+.+@$&>>;;;;;;;;;>>&$.+@#&=->;;===;;--=&$.....++#&*;;;*&#++...+#$*-->;;>>>=====%#....++##$%%##$&&#@+..#%*=;;;;;;;;;;;;=*$..++#%*=>;;;;;;=&$@+...++@#$&&&&&&&&&%$#.++#$&*******=***&$#....+.+++@+@+@+@+++..#$*=;;;;;;;;;;;;=*$...++@$*=====*%$#@...",
+".$&=>;;;;;;;;;;=&$......++@#*===*#@+.....+@$*>;;>>===>>=**#.++#%==-;;*=*&%##++..+#$*>;;;;>--;;;>>*%..+#$*==;;>>>;;==*$#.....++$&*;;;*%$+....+#&*;;;>>;;;;;===%#.....++@@@@@@@#@@++..#%-->;;;;>>;;>>>--%..+@#*==;;---;;=*%@+..++@$%=->>>==>>>==#.+#$*;;;;;;;;;;;;;*%....+@@@########@@@+.#%=>>>>;;>>;;>>>>-%....++@#$$%$%$##+++..",
+".$*=;;;;;;;;;;;=*$.......+@$=====$@++....+#$*;;;->===>>==&#.+@#%==-;;==*&$#@++..+#%*>;;;;->-;;;>>*$.+.@#&*=;;>>>;;=*&$@.....++#%*;;;*&#++...+#&=;;;>>;;;;;===%#......++++@++++++....$%->;;;;;>>;;>>>>-&..+@#*==;;---;;=&%@+.++@$%&->>>>==;;;==$.+#%*;;;;;;;;;;;;;*&..++@@$$$%%%&%%%%$@@.$&->>>>;;>>;;>>>>-&.....++@@###@@@++....",
+".%*=;;;;;;;;;;;=*%......++@$*====%#+.....+#%*;;;>-*=*>-=*&@.+@$&=--;;==*&%#@+...+#$*>;;;;>--;;;>>*%..++#%*=;;>>>;;=*%#+......@#%*;;;*%#+....@$&=;;;>>;;;;;-==&$.......+.+.+.+++.....$&->;;;;;>>;;>>>>-&...@$*==;;---;;=*&#@.+@#%**>>;;;==;;;==$.+@%*;;;;;;;;;;;;;=*...@#$%*********&&$#.$&->>>>;;>>;;>>>>-&.......+++++++.+.....",
+".%*=;;;;;;;;;;;=*%.......@@%**==*%#@....++#%*;;;--=**=*&%$@.+#%*;;;;;;;;=*$@+...+#%*;;;--===--;;>*%...+@$&*>;;;;;>=*%#+......+#%*--=*%#++...+#&*;;;;;---;>;;;**.....................$&>>;;;;;==>->>>>>&.++@#&*=;>;;;;>==&#@.+#%=--;;---;;;;;*&$.+@$%===-------;;;=*.++@$=->;;;;;;;;;;&$.#&>;>>>;;;;>>>>>>>&.........+.++........",
+".%*=;;;;;;;;;;;=*%......++#$*====%#@+....+@%*;;;-===*=**%$#.+@&*;;;;;;;;==$@++..+#%*;;;->===>-;;;*%..++@$&*>;;;;>>=*%#+......+#$*=--*$#+....@#&*;;;;;>->;;;;;=&.....................$&>;;;;;;==>->>>>>&..++#**=;;;;;;>==*#+.@$&=->;;---;;;;;*%#.++#$**======--;;;=*..+@$-->;;;;;;;;;;&$.$&>>>>>;;;;>>>>>>>&.....................",
+".$*=;;;;;;;;;;;=*$......++#%=->>-%$++...++#$*>;;;;==->>=*%@.+@$*=--;;>--=&$#++..+@%*>;;;;>--;;>;>*%...+@%*=>>;;;>>=*%#+.....++#$*;;;*%#+....+@$*==-;;;;;>>;;;=&.....................#&=-;;;;;;;;;;;;-=&..+@#&==;;;;;;;=**#@.@%&;;;>>>>>;;-==&$@..+@#$%$%%%&**=;;;=&.++@$*===-----=-==&#.#&=-;;;;;>>;;;;;-=%.....................",
+".%*=;;;;;;;;;;>=*%......+@$&->>>>&$@++...+@$&>>;;;--->>=*&#.+@$&=--;;>--**$#@++.+#%&>;;;;->-;;;;>*$..++@$*=>>;;;>>=*%#+......+#%*;;;*%#+....+@#%*==;;;;;>>;;;=*.....................#%=-;;;;;;;;;;;;==%..++#**=;;;;;;;==&#@.#%*;;;>>>>>;;--=*$@...++@@####$%**;;;=*..+@#&*==========*$#.#$==;;;;;>-;;;;;==%.....................",
+".$*=;;;;;;;;;;>=*$......+@$&->>>>*%@+....+@$&>>>;;>--;>=*&@.+@$&=->;;>>-=*&%$@@.+@%*>;;;;>--;;>>>*$..++#%*=>>;;;>>=*%@@.....++#%*;;;*%#++....+#$*==;;;;;>>;;;=&.....................@$==;;;;;;;;;;;;==$..++@&*=;;;;;;;=*&#+.@$*;;;>>>>>;;-==*$#.....++++@+@$%*;;;*&..++@%&&*=====*=**#@.#$*=;;;;;>>;;;;;==$.....................",
+".$&=;;;;;;;;;;>=&$.....++#$*>>;>>*%#@.....+#$&==;;;;;;;**$@.+@$*-->;;====****$#.+@$&>>;;;;;;;;;>>&$..++@%&=--;;;-==*%#+......@#&*;;;*&#@....++@$&**==->-;;;;>*%.....................@#%*>;;;;>>;;;;>*%#..++@$&*==---==*&$@+.@$&-->;;->-;;;;;*%#......+.++++@#%===&$...+@@#$#$$$$$$$$#@+.+$&*>>;;;>>;;>>>*%#.....................",
+".$*=>;;;;;;;;;>=*$......+#%*>>;>>*%#+.....+@#%*=>;;;;;>*&$@.+#%&->>;;========%$.+@$%>>>;;;;;;;>>>&$..++#%*==>;;;>-**%#+......@#&*;;;*&#@....++#$&*=*=---;;;;;*%.....................+#$&>>>;;>>;;>>>&$#...+@#$&===-==*&%#@+.+#$==-;;-->;;;;;*&$...........+@#$***$#....+++@@@#@##@@@+++.+@$&>>>;;>>;;;>>&$#.....................",
+".#&*>;;;;;;;;;>*&#......+#%*;;;;;*%#@+.....+@#$**=;;;=*&$@+.+#&*;;;;;;;;;;;;;*%..+#%*====*****==*%#..++#&*=;;;;;;;=*&#+.....++#&*;;;*&#++...+@$&>>>--===;;-=*$@.....................+@#%*==>>;;>>==*%#+....+@@##%%&%%$#@++..+@$%**>>;;>-=;;;-=$............++@###@+.....++++++++++++++..+@#%*==>>;;>>==*%#@.....................",
+".@%*=>;;;;;;;;=*%@.....+@#&*;;;;;=&#@+.....++@#%**;;;=&%#++.+$&=;;;;;;;;;;;;;*%.++@$&****&&&&&**&$@..++#&*=;;;;;;;==&#+......+#%*;;;*%#++...+@$&>;;;;;;;;;=*&#@......................+@#%**>>;;>>**%$@+.....++@@#####@@@+...++@#%*->>>>==;;;==$.............+@@@@++........+.+.+.+.......+@#%**>>;;>>**%#@+.....................",
+".@%&&==>>>>>>=&&%......+@#&*;;;;;*&#@+.......+@#&*;;;*%#@+..+#%*;;;;;;;;;;;;;*%...@@%%&%%$$$$$&&%@+..++#&*=;;;;;;>=*&#+.....++#%*;;;*%#+....+@$&>;;;;;;;;;*&$@+......................++@$%*--;;>-*&$@++......++++++@++++......+##%=->>>==>>>==#...............++++.......................++@$%*--;;>-*&%@++.....................",
+"..@$%========$%$@.+.....+#%*;;;;;*%#+........++@$&===%$#++..+@$&==--------===%$...+@@@#@@@@@@@@@@++...+@$&*==--=-=*%$@+......+@$%===%$@+....++#%===>----=*&$#++.......................++@#$%&**&&$#@++.........++++++..........+@#$%&&&%&&&&%##...........................................++@#$%&&*&&$#@++......................",
+"...++$$$$$$$$$++.......++#$*>>>>>*%#++........+@@$***$#++...+@#%*==========**$#....++++++.+.+++++++..++@#$&*=====*&$$++......++#%*=*$#++....++@$**=--===*&$#@+.........................++@@#$$%$##@++.........................+++@#$#$$$$$$$#@@............................................++@@#$%%$##@++.......................",
+".......@$$$@@............+#%=---=%#@+..........++##$#@@+.....+@#$$%%%%%&%%%$$@@.....++++......+........+@##$%%%%%$#@@+........+@#&&*#@++.....+@#%**===**&$#++............................++@@##@@+++............................+++@@@@@@@@@@++..............................................++@@@@#@++.........................",
+"........................++@#$%&%%#@+............+++@@++.......++@##########@@++.........................++@@####@#@++..........+@##@@+........++##$$$%$$#@++...............................+++++++................................++.+.+.+++++.................................................+++++.+..........................",
+"..........................+@#####@++.............++++.........+++++@@@+@@++++............................++++++@+++.+.........+.++++++.........++@@#@#@@+++..................................+.+.................................................................................................+.+............................",
+".....+++@+@+++..............................+++++@+@++...........+++++@+++...................................................+++@@@#@#@@+++................................................++++++................................................+@+@@++............+++@+@+.............++@@@@@@++..............................",
+"....++@@###@@++..............................+@#####@@+.........++@#####@@++................+..............................+++@#$$$$$$$$#@+...............................................++@@@@+++...........+.++.+............................+@#####@++..........@#$###@+............@#$$$$##@@+..................+.+........",
+"...++@$%***$$@++.............+.............++@$$***&%#@+.......++@$%***&&@@+............++++++............................++@#$&*=====***#@.............................................++@@$&&%#@+.........+++@@@@@++..........................@$$&&%$#@+..........#%%&%$#@+...........#$%&&&&%##@+.....+.........+++@+++......",
+"...+@#%&=*=*%$@++..........+++@@++.........+@#%&===**$#@+......+@#%&===**$#@+.........++@@#@@++..........................++#$%&=*========%#............................................+++#$%***$#++.......++@@##$###@@.........................#*=->>*&#+++.....+..*=>>>*&#@+..++++@.+.&*>>>>>**%#++++++++.......++@###@++.....",
+"..+@#%**===**%#@+.........++####@++........+#$**==-==&$#++.....+#$**==-==&$#++.......++@#$$$$@@+........................++#$&&*==------==%$............................................++#$%*===%$@+.......+@#$%&&&%$#@+........................$*=>>>=*$@+...+++++.*=>>>=*$@++++@#@@@+.*=>>>>>==&$@@@@@#@@.......@@#%%$$@+.....",
+".+@#%&>;>->;>&%#++.......++##&&&$#+.......++#%>>->-;>=*%@+....++#%>>---;>=*%@+......++##***-=#@+........................+@$&>>>;;;;;;;;;;*%............................................+#$&->;;;*$#+.....++@#%==>>>==%#@++......................$==>>>=*%@@+++@@@@@.==>>>=*%@@+@##$$$#@.*=>>;;>==*%####$$##.......+#%>>>$#++....",
+".+@$&*;;>>>;;*&$@++......+@$%==*%$@++.....+@#%>>->>;;=*%@++...+@#%>;>>>;;=*&@@......+@#%*==-=$@+......+++++....+.+++....+#%*>>>;;;;;;;;;;*%............................................+#$&->;;;*%#++....+@#$&-->>>-=&%#@+......................$==;;;==$#+@+##$%%#.==;;;==%#@##%&&--$@.=-->>>>>--%$$$%==*&......+@#%>>>%$++....",
+"++#&==;;===;;==*#++....++@#%&;;;*%#@++.....@#%==---;>=*%#++...++$%=-->>;;=*%#++.....+@%*>>>=*$#++....++@@@@@+++@@@@@@+..@$&=;;;--;;;;;--=&$............................................+@#%*=;;;*&$+....++@&*=;;===;;=*%#++....+++++.+.++.......$==;;;==%#@@#$$&*&$.==;;;-=%$##%**=--$#.=-->>>>>>-&%&&*--=*......+@$%===&#@+....",
+"+@#*==;;===;;-=*#@....+@@#%&*;;;**%#@@.....@#%==---;;**$@+....++#%==>>>;;=*&#++....++#%*>;>**#@+....+@##$$$##@@##$$##@@.@$*=;;;--;;;;;--=&$.........++++.+..............................+#$**;;;*&#@....+@#&==;;--=;;==&#++.+++@@@@@+@@+@++.....$&*;;;-=%$##$===>>$.&*;;;==&$$%*>>>==%#.&*-->;;-==**==->>*$......+@$&===&$@+....",
+".@#*==;;===;>==*#++..++#$%**=;;;=*&%$#@...++#%===-=;>=&$@++....@#%=--->;;=*&#++....++#%*>>>*&#++....+#$%&&&%$#$%%&&&%$@.@$*=;;;--;;;;;-==%#.......+++@@+@..............................++@%&=;;;=&$@+...+@#&==;;-==;;==*#@+.++@##$########@++...#&=>;;-=&$$$&=-->-%.&*;;;-=&&&*=>>>==$#.%*>->;;--=**--->>&$......+#%&=-=&$@+....",
+"++#%*=>;---;;**%#+...@@$*==--;;;--==*$@...++#%*=;;;==*%$@+....+@#%==>>>;;==&#@......+@%&*=*%$@+.....@$=->>>**%$&;;>--$#.@$*=;;;>-;;;;;--=$#......+@@##$##++.............................+@$&=;;;*&$@+...+@$*==;;===;;-=*$++.+@$***&&&&&*&$##++..$&*;;;-=*%%&*--->>%.&=;;;-=*&**=>>>==$#.&*->>;;---==->->>&$....++@#&*>;>*$#+....",
+".+@$%*>;---;;*&$@++.+@$&==---;;;---==&$...+@#%==;;;==*%#@+.....@$%==->>;;==*#@+.....++$%&*&##++.....#$--;;;==&&*;;>>>&$.@#*=;;;->;;;;;-==%#.....++@$%&&%$#@............................++#$**;;;=*$@+...++#*==;;===;;==*#@+.@#$===**=*===&%$#++.$&=;;;-=***==>>>**%.&*;;;-==*=>>>>-**%#.=---->>>>>--;;>**$#....++#%&=;;;*%#+....",
+"..+#$%*=---=*&$@++..+@%*;;;;;;;;;;;;;*%....@$&>;>>>;>=*%@++..++@$&>;---;;=**#++.....+++####@++......#%==;;;==&&*>>;;>&%.+#%*>;;;;;;;;;-==$#.....+@#*=>>>%#@.............................+#$==;;;==$#++..++#%*=;;->-;;=*&#++.@$%>;;>>-=-;;==*$@@.%**;;;-===*-->;;*&$.*=;;;-====;>>>-=*%#.=-->->>>>>-->;;*&$@...++#$&->;;;*%#++...",
+"..++#$**===*&$#++...+#%*;;;;;;;;;;;;;*%...+@$&>;>>>>>=*&@+....+@$&;;->-;;=*&#++......+++@++++.......@$*=;;;-=***>>;;;*%.+#%*>>;;;;;;;;-==$#....++@$*=;;;&$#++...........................@#%=-;;;==%#+...+@#%*=;;---;;=*%@@..@$&>;;;>---;;-==%#@.%->;;;;>>>>;;>>>=&$.->;;;>;;;;;;;;;>-%$.*=;;;;;>>>;;>>>=*$@..+@#$&*->;;;*%#++...",
+"..+++#$&==*&%@@+....+@%*;;;;;;;;;;;;;*%...+@#&>;>>>>>**%@++...+@$%;;---;>=*&@+..........+++.........#$*=;;;==&&*->;;;*%.+@#%->>;;;;;;;-==$#.....+#%==;;;*$#+..........................+.@#%==;;;==%#@+...+@%*=>;->-;;=*%@+..@$%>;;;;---;;--=*$#.%->;;;;;>>>;;>>-=&#.->;;;;;;;;;;;;;>>&$.*=>;;;;>>>;;>>>*&#@..+@$&*=>>;;;*%#+....",
+"....+@@##$$#@@+.....++#%&**==;;;===*&%#....@#$==----=&$#++.....+#$*==--==&$#@++.....................@$**;;;-=*&*=-;;;*%.++#$&**--;;;;;===$#....++@$==;;;&$#+..............++...........+@#%=-=-===%$@+..++@$&*->>>>>-*&$#++.+#%*==;;>>>>>;;;=*$.$=-;;;>;>>>;;>>>=&$.->;;;;;;;;;;;;;>>&%.&*>;;;;>>>;;>>>=*$+.+@#%->>;;===&$#@+...",
+".....++@@@@@++......++@#%&*==;;;=**&$#@....+@$**=====$#@++....++@#%&===**%#@+.......................+#%*;;;-=***--;;;*&..++#$%*--;;;;;-==$#.....+@$*=>>;&#@+...........++@++++.........+@#$*=====*$#@++.++#$&=->>>>>-=&$#++.+#%*==;;>>>>>;;;=*%.$%&*==-=;;;>>;;;=*$.&**==>>>>>>>-=-;;*$.$%**==-;;;>>;;;=*$@.+@$&>>>;;===*%##++..",
+".......++++.+........++@#%%*=;;;=*&$#@+...++@@$$%%%$$#@+.......++@#$$$%$$@@++.......................@#&*;;;--===--;;;*&...++@$%*=;;;;;-==$#.....+@#$%&&%$#@+..........+@@####++........++@#$$$$%$$#@+...++#&==;;;;;;;==*#@..+@$&==;;;;;--;;;==$.@$%&*===;;;>>;;;=*$.$&===>>>>>>>--=;;&$.#$%**=-;;;>>;;;=*$@.+@%&>>;;;==**&%##++.",
+".........+...........++@#$%*=>;;=&%$#@+.....++@@###@@+++........+++@#@#@@++.........................+#&*;;;;>-=->;;;;=&....++#%&=;;;;;-==$#......+@##$$$#++..........++#$%%%$#++........+++@####@@+++...+@#**=;;;;;;;==&#++.+#$*==;;;;;>>;;;==$.+#$**=;;>>>>>;;;=*$.$&=--;>=*===;;;-=&$.@#%*=;;>>>>>;;;=*$#.+#%*;;;--==*--**%#+.",
+".....................++@#$&*=;;>=*&$#@+......+++++@+++...........+++++++++..........................+#&*;;;;;---;;;;;=*.....+@$&=;;;;;-==$#........@@@@@++...........+@$&->>%$#++.........++++@+++++....++@**=;;;;;;;=*&@@..@#%*==;;;;;--;;;=*$.+#$**=;;->>>>;;;=*%.$&=->>>=**==;;;-=&#.@#%**;;>>>>>;;;=*%#.+#$*;;;--===>>=*&#+.",
+".....................+@#**===---==**&@@........++.+.+..............+.++.............................+#%*;;;>;>--;;;;;=*....+@$%*=;;;;;-==&#.........+++++...........+@$%*>>>*%#@+..........+.+.+.........+@#%&&******%%#@+..@$&>>;;;---;;>>-*%$.+#%*==;;>>>>>;;;=*%.%&->->>****=;;;==%#.@$&*=;;>>>>>;;;=*%#.+@%&>;;;>==-;;==*#@.",
+"....................+@#$===--->---==*$#.............................................................+#&*;;;;;;;;;;;;;-=..++@$%*==;;;;;>>-&$........................++@$==;;;==$@+........................++@@$%%&&&%$$#@++..@$&>;;;;---;;--=&$@.+#%->>>>>>>>>;;;-=%.*=>;;==***>>>>-==%#.#%->>>>->->>;;;-=%#.+@$&>>;;;---;;-=*$@.",
+".....................@$%==-->-->--==*%#.............................................................+#%*;;;;;;;;>>;;;-=...+@$&*=-;;;;;>>-*%.........................@#%==;;;==%#++.........................++@@#####@@+++...@$&>;;;;==-;;-==$#@.@$%>>>-->>>>>;;;--%.&=;;>=*&**>>>>>==%#.$%>>>>->->>>;;;--&#.+@$%>>>;;---;;==*#@.",
+"....................+@$*;;;;;;;;;;;;;*$.............................................................+#&*;;;--==*****&&$..+@#*==;;;;;;;;;;*&.........................+#%=-;;;==%#+..........................+++++++@++++.....+#%=--**=====*&$#@+.+#%->>--->>>>;;;-=%.&*>>>**%&*>>->-==%$.#%->>-=-=->>;;;-=%#..+#$**=;;;;;;;=*%#+.",
+"....................+@$&;;;;;;;;;;;;;&$.............................................................+#%*;;;-=*%$####@@+..++#&==;;;;;;;;;;*&........................++#&->;;;-=$#++............................+.+..+........+#$*==&&*****%$#@++.@#%*==**&&*==;;;-=%.&****%$%**;;>>>;>%$.#%*==*&&&*==;;;-=%#.++@#%**;;;;;;>*&$@+.",
+"....................++#%%***********&$#.............................................................+#%*;;;==%##@++@++...++#&*=;;;;;;;;;;*%.........................@#%->;;;==$#+...........................................++#$$$$$#$$$$#@++...+@#***$%$%%*=>;;==$.%&%%%$#$%*>>>>>>;%#.@#***$$$$%**;;;==$@...+@#$&&*****&%$@@..",
+".....................+@#$$%&&&&&&&%$$#@.............................................................+@#%===&%#@+..........+@#$&&********&%#........................++#$*=---*%$@+...........................................+++@@#@@@@@@@++++...++@########$%&*&%$#.@@###@@@#$&&&*&&%$@.+@######@$$&&&&%$#@...++@##$%%%%%$#@+.+.",
+".....................+++@###########@++.............................................................++#$***%#@+...........++@##%%&&&&&%%$#@.........................+@$&*===&$@+..............................................++++++++++++.......+++@+++++@##$$$$@@.+++++++@@#$$$$$$#@@.+++@@++++@@$$$$$@@+......+@@#####@@++...",
+".......................+++++@+@+++++++...............................................................+@#&*&#@++............++@@########@@@+..........................+@%&==*$#@+..............................................+...................++++++++++@@@@@++.++++++..++@@##@@@++..+.+.++.++++@#@@++........++++++++++....",
+"...+++@@@@++...............+++@@@@++..........++@@#@@+...........+.++@++++..............................+++@####@++............++++++++.+.........+++@+@+@+++++....+++@@@@++................++@@@@@+..........++@#@@@...........+++++++++++........+++@@@++..................++@@@@++........++@@####@+.........++++++++++++....",
+"...++##$##@++..............++@##$##@+........++##$$$#@+..........+@@@###@@++...............+.............+@#$%%$$@++.........+++@+@@@@@@@++...++++@@########@++....++##$$#@++..............++@##$#@@++.......+@#$$$#@@+........++@##@##@#@@++......+@@#$$#@++...............++@##$#@@+.......++#$%%%$#@+.......+++@#@@@@@@@@++..",
+"..++#$&==$#@@.............++#$&&==#@++.....+++#%&===$#@+.......++@#&&%%$%$@@........+++@+++++++........++@#**---&$@+.......++@@##$#$#####@@....+@#$%&****&&%$$@...++@$==&%%@@............+++@#%==%$#++.....+++#$===&%#++......++@#$$%$$$$$#@@+.....+#%%==$$@++.............++@#%==&$#++....+++#%*->-&%#@.....+++##$$$$#$$$$#@@+.",
+"..+@$%*--&%#@++..........+@@$&**--$#@.......+@$&*---&$@+......++##%******&#@++.....++@@@#@@@@@@+.......++@%*=>>-*%#++.......@@&&********&&#..+@@#%&*=====***&%#...++#$=-**&$@@+...........@@$%&--*%$++.....++#$&->-*&$#++....++@$%--***==*&%@+....++$%*--&%$@++...........++@$%&--*%$@+....++@$**>>>=&$#++....+@%&&==%%%==*&%@+.",
+"..++$&*>>**%#@+.........++@$%===--$#+......+@$%*=>>-*%#@+....++@$%&=====**%#@+....++@#$$$$$$##@@+......+@#%==>>>*&$++.....++#$**========**$.+@#$%**=====-===**$..++@$%==;;>*&$#@++....++@#$%-->>>*%$@++..++@$%=->>>;>&%#@+...+@$%&>>=*=--=**#@+..++@$%*->**%$@++.........+@@$%&*>-*%$++....+@$%*=>>>=*%#@+...+@#&*==-***--**&#@.",
+"..+@#%*->>-=$#++......+++@#&*>>>=*$@++....++#%&>;>>>==$@++..+.@#*==;;;;;;>&$#+...++@%&*=-%%%--$@++....++@$&->---==$@+......@#%====-=-=====&.+@$===;;;;;;;;;;>>%..+@#%&==;;;=*%$#@+..++@@$$&*->>>-*&$@@...@@$%*=-;;;;;*&$#@..+@#**=->--->>===%#+...+@#%*->>-=%$#+++.....+++#$%-->>-*%#@+...++#%&>;>>>;;&%#@+.++@$*==>>===->-=*$@.",
+".++@$%*->>>-&$@.+.....++@$%*=;;;=*$@+....++#$&*;;;;>-=$@+....+@$*=-;;;;;;>*$#+...+@#%*=--***--$@++....+@#%*->---=*$++....++@$&>;;;;;;;;;;;&.@#%==-;;;;;;;;;;>>&.+@#&*==-->---=*&#@+.++#&**==>>>--=**$@+.+@$*==>>--->>-=*$#+.+#$*==>>--->>-==%$@...+@$%*->>>-*%$#@++...++@#$%*->>>-*%#@+...+@$&*;;>>>;;*&$@+.++#%===>>--->>-==%#.",
+".++#&*==->>>&$#+.....++@$&*=->--*&#@++...+@#*=->>---==%#++..++#%=---->>>==&$@++..+@#**=>>=====%#+....++#&*=->>>>*&$@++....+#$*;;;;;;;;;;;;*.#$*;;;->=====>>>>>&.@#&==--->>>>>===&$@.@$%===-->>>---==&$@.@$%=-->>->->>--=&%#.@$&==->>>->>>--=*$#..+@$*===->>>==**%#+..++#&**=->>>-==*&#@..+#$*=-->--->>-==$@.++#$==->>=-->>-==%#.",
+".+@$*===->>>*%#@.....+@#&*=-->>-*&#@.....+#$*=->>->-==$#++..+@#%=->->>>>=*%#@....+#$*==>>-===*%#@....+@$*==->>>>*&$@+.....+@%*->;;;>>===;;*.#%*;;;--*****>>>>>&.#%&;;;;;;;;;;;;;=&#.@%*;;;;;;;;;;;;;=&#.@%*;;;;;;;;;;;;;=&#.#%*;;;;;;;;;;;;;=&#.++#$*==-->>>-==**$@..+@$&==-->>>-===*$@.++#%==->>--->>-==%#.++#%->>;;;;;;;>>-%#.",
+"++#$*==-->>>*&$@+....+@$**=->->>*&$@++..++#%==->>---==%#@...++#&=->-->>>==%#@+..++#%*==>>---==%#++..++#$*==->>>>=&$@+....++#$*>>;;;>>===;;*.#%*;;;>=*%%&*->>>>&.#%*;;;;;;;;;;;;;=*$.@%*;;;;;;;;;;;;;=*#.#%*;;;;;;;;;;;;;=*$.@&*;;;;;;;;;;;;;=*$.++#$->>;;;;;;;>>-$#.++#$->>;;;;;;;>>-$#.++#%->>;;;;;;;>>-%#.++#$->>;;;;;;;>>-$#.",
+"++#%->>;;;;;-=%#++..++#$->>;;;;;-=%#++..++#%->>;;;;;-=%#@+..+@#%>>;;;;;;-=&#@...++#%->;;;;;;-=&#@+..++#%->>;;;;;==%#++....+#%*>>;;;>>=-=;>&.$*=;;;=*&$#$%***=*$.@$&=--;;=====;;;**#.@$&=--;;=====;;;**$.@$&=--;;=====;;;**#.@%&=--;;=====;;;=&$..+#$->>;;;;;;;>>-$#..+@$->>;;;;;;;>>-$#.++#$->>;;;;;;;>>-$#..+@$%&*==;;;==**%#@.",
+".+#$->>;;;;;==&#@+...+#$->>;;;;;==&#++..++#$->>;;;;;-=&$@+..++#%->>;;;;;-=&#@+..++@%->>;;;;;-=&$++..++#$->>;;;;;-=&#@....+@#%*;;;;;>>;;;=*&.#*=;;;=*%#@@#&&**&$.@$&=--;;=====;;;=&$.@#&=--;;=====;;;=&#.@$&=--;;=====;;;=&$.@$&=--;;=====;;>=*#..+@#%&*==;;;==**%#@.++@#%&*==;;;==*&%#@..+@#%&*==;;;==*&%#@...+@$%**=;;;=*&%##+.",
+"++@$%*=>>;;;>>&$@+..++@$&*=>>;;;>>&$@+...+@$&*=>>;;;>>&$@+...+@$&*=>>;;;>>&$@+...+@$&*=>>;;;>>&$@+...+@$&*=>>;;;>-&$@+...+@$&*;;;;;>>;;;=*%.$&=;;;=*$@@@@$%$%%@.+#%==-;;=====;;;*&#.+#%==-;;=====;;;*&$.+#%==-;;=====;;;*&#.+#%==-;;=====;;;*&#..++@#%**=;;;=*&%#@+..++@#%&*=;;;=*&%$@+..++@$%**=;;;=**%##+..+.+@#%*=;;;=*%#@++.",
+"..+@$&*>>;;;>>*%#@...++@$&*>>;;;>>*%#++...+@$&=>>;;;>>*%#@...++@$&*>>;;;>>*%#@....+#$&*>>;;;>>*%#++...+@$&*>>;;;>>*%#+..++@%&=;;;;;>>;;>=*$.$*=;;;*&$@++++@@@@+.+#$==-;;===>;>--&%@.+#$==-;;===>;>--*$#.+#$==-;;===>;--=&$@.+#$=--;>===>>--=&$#...++@#%*=;;;=*%#@@....++@#%*=;;;=*%#@++...++@#%*=;;;=*%#@++...+++@$&*;;;*&$#++..",
+".++@$**;;---;;*%$++...+@$**;;---;;*%$++..++@$&*;;---;;*&$++...+@$**;;---;;*%#@+..++#&*=;;---;;*%$++..++@$**;;---;;*%#@+.+@$*==;;;;;;;;;;=*$.$*=;;;*&$@++++@@@++.+@$==-;;===;;--=$#+.+@$==-;;===;>--=$#+.+#$==-;;===;;===$@+.+#$==-;;===;>-==$@+....++@$&*;;;*&$#++.....++#$&*;;;*&$#++.....++@$&*;;;*&$#++......+@$&*;;;=&#@+...",
+".++#$*=;;=-=;;=&$@+..++@$&=;;---;;=&$@+..++@$**;;---;;=&$@+..++@$&=;;---;;=&$@+..++#&*=;;---;;=&$@+..++#$&=;;---;;=&$@+.+#%*==;;;;;;;;;;=&#.#*=;;;=*%##@@####@@.+#$==-;;;;;;;=*&$@@.+#$==-;;;;;;;=*&$@+.+#$==-;;;;;;;=*%$@@.+#$==-;;;;;;;=*%$@+....++@$&=;;;=&#@+.......+@#&=;;;=&#@+.......+@$&=;;;*&$@+.......++$&*;;;*&$++...",
+"++@$===;;===;;-==$@..+@%*=-;;===;;-==$@..+#$==-;;===;;===$@..+#$===;;===;;-==$@..+#$==-;;===;;-==$@.++@$===;;===;;===$@.@$%->>;;;;;>>--=*&#.$&=;;;=*&%$$$%%$$#@.+#$==-;;;;;;;=*%$@+.+#$==-;;;;;;;=*&$#+.+#$==-;;;;;;;=*%$@+.+#$==-;;;;;;;=*%$#+.....++#&=;;;=&#@+.......+@#&*;;;*&$++.......++$&*;;;**#@+.......++#&=;;;*&$++...",
+"+@#%=--;;===;;-==%$.+@#%==-;;-==;;-==%$.++#%==-;;===;;-==%$.+@#%=--;;===;;-==%#.+@#%=--;;-==;;-==%$.+@#%==-;;===;;-==%$.@$*>>>;;;;;>>>--*%$.#&*;;;-=**&&&====*#.+#$==-;;>>>;;=**%$@.+#$==-;;>>>;;=**%$@.+#$==-;;>>>;;=**%$+.+#$==-;;>>>;;=**%$@....++@$&*;;;*&$@++......+@$&=;;;*&$@+.......+@$&=;;;*&$@+.......+@$**;;;*&$@+...",
+"+@$&>>;;;;;;;;;>>&$.+@$&>>;;;;;;;;;>>&$.+@$&>>;;;;;;;;;>>&$.+@$&->;;;;;;;;;>>&$.+@$&>>;;;;;;;;>>>&$.+@$&>>;;;;;;;;;>>&$.#&*>>>;;;;;>>---**$.#%*;;;>-=*=*=---==$.+#%==-;;>>>;;===*&$.@#%==-;;>>>;;===*&$.@#%==-;;>>>;;===*&$.+#%==-;;>>>;;==**&$...++@#%*=;;;=&%#@+....++@#%&=;;;=*%#@+....++@#$**;;;=*$#@+.....+@#%*=;;;=*%#@+..",
+"+#%*>;;;;;;;;;;;>*&.@$%*>;;;;;;;;;;;>*&.+#%*>;;;;;;;;;;;>*&.+#&*>;;;;;;;;;;;>*&.@$%*>;;;;;;;;;;;>*&.+#%*>;;;;;;;;;;;>*&.$&=;;;=->>>>>===>>&.@$&-->;;;;;;;;;;==%.@$&=--;;===>->-->>%.@$&=--;;===>---->>%.@$&=--;;===----->>%.@$%=--;;===--->->>%...+@#$&*=;;;=*&$#@+...+@#$&*=;;;=*&$#@+...+@#%&*=;;;=*&$#@+..++@#$&*=;;;=*&$#@+.",
+"#$*=;;;>>>>>>>;;;=*.@$*=;;;>>>>>>>;;;=*.#$*=;;;>>>>>>>;;;=*.@$*=;;;>>>>>>>;;;=*.@$*=;;;>>>>>>>;;;=*.#$*=;;;>>>>>>>;;;=*.%*=;;;-=>>>>>===>>*.@#%=--;;;;;;;;;;=*$.@$&=--;;===-->>>>>&.@$&=--;;===->>>>>>&.@$&=--;;===>>>>->>&.@$&=--;;===>>>>->>&..++#$&*==;;;==*&$#@.+.@#$&*==;;;==*&$#+..++#$&*==;;;==*&%#@..++#$&*==;;;==*&$#+.",
+"#%*=;;;>>>>>>>;;;=*.#%*=;;;>>>>>>>;;;=*.#%*=;;;>>>>>>>;;;=*.#%*=;;;>>>>>>>;;;=*.#%*=;;;>>>>>>>;;;=*.#%*=;;;>>>>>>>;;;=*.%->;;;>>;;;;;;;;;;*.+#$==-;;;;;;;;;;=*$.#&*;;;;;;;;;;;;;>>&.#&*;;;;;;;;;;;;;>>&.#&*;;;;;;;;;;;;;>>&.#&*;;;;;;;;;;;;;>>*.++@$==-;;;;;;;--=$@..+@$==-;;;;;;;>-=$@.++@$==-;;;;;;;--=$@..+@$==-;;;;;;;--=$@.",
+"#%->;;;;;===;;;;;>-.#%->;;;;;===;;;;;>-.#%->;;;;;=-=;;;;;>-.#%->;;;;;=-=;;;;;>-.#%->;;;;;===;;;;;>-.#%->;;;;;=-=;;;;;>-.%->;;;>>;;;;;;;;;;*.++#$&*==;;;>>==**$#.#&*;;;;;;;;;;;;;>>&.#%*;;;;;;;;;;;;;>>&.#%*;;;;;;;;;;;;;>>&.#&*;;;;;;;;;;;;;>>&.++#$=->;;;;;;;>-=%#.++#$=->;;;;;;;>-=%#..+#$=->;;;;;;;>-=$#.++#$=->;;;;;;;>-=%#.",
+"#%->;;;;;-=-;;;;;>-.#%--;;;;;-=-;;;;;>-.#%->;;;;;===;;;;;>-.#%->;;;;;===;;;;;>-.#&--;;;;;-=-;;;;;>-.#%->;;;;;===;;;;;>-.%--;;;>>;;;;;;;;;;&..++@#&==;;;>>*&%#@+.#%*;;;;;;;;;;;;;>>&.#&*;;;;;;;;;;;;;>>&.#&*;;;;;;;;;;;;;>>&.@&*;;;;;;;;;;;;;>>&.++#%=->;;;;;;;>>=$#.++#%=->;;;;;;;>--$#.++#%=->;;;;;;;>>=%#.++#%=->;;;;;;;>>=$#.",
+"#%--;;;;;===;;;;;--.#%->;;;;;===;;;;;--.#%--;;;;;===;;;;;--.#%=-;;;;;===;;;;;--.#%=>;;;;;===;;;;;>=.#%--;;;;;===;;;;;--.$*=---=--->-->>>--&....@#%==;;;>-&#@+...@$&=-->>-->-----=*%.@$&=-->>-->-----=*%.@$&=-->>->->----=*%.@$&=-->>>--->---=*%..+@$*==->->---==*$#..+@$*==->->---==*$#.++@$*==--->->-==*$@..+@$*==->->---==*$#.",
+"#$*=-----=*=--->-=*.#$*=-----=*=--->-=*.#$*=-----*===----=*.#$*=-----*===----=*.@$*=-----=*=-----=*.#$*=-----*===----=*.#&*======-=-----==$...++#%->;;;=*%#++...+#$===----=---==*&#.+#$==----=-=--==**#.+#$==----=-=--==*&$.+#$==-----=-=-==*&#.++@#**===-=-===**#@.++@#**====-=-==**#@..+@#**===-=-===**#@.++@#**===-=-===**#@.",
+"@#&*=-===*&*=====*&.@#&*=-===*&*=====*&.@#&*=-===&&*==-==*&.@$&*=-===&&*==-==*&.@$&*=-===*&*==-==**.@#&*=-===&&*==-==*&.@#$%%%%%&%&&&&&&%$#....+#$=-;;;*&#@+....+@#$%&&&&&&&%&&%$$@.+@#$%%&&&&&&%&&%$#@.+@#$%%&&&&&&%&%%%#@.+@#$%%&&&&&&%&&%$$@..++@#$%%&&&&%%%$#@+..++@#$%%&&&%&%%$#@+..++@#$%%&%&&%%%$#@+..++@#$%%&&&&&%%$#@+.",
+"+@#$%%%%$$$$$%%&%$$.+@#$%%%%$$$$$%%&%$$.+@#$%%&%%$$$$%%&%$$.+@#$%%&%%$$$$%%&%$$.+@#$%%%%$$$$$%%%%$#.+@#$%%&%%$$$$%%&%$$.+@@######$##$#$###@....+@#%&**&%$#++....++@@###$#$#$####@@+.+++@##$#$#$#$###@@+.+++@##$#$#$#$###@@+..++@##$#$#$#$###@@+...++@@####$#$##@@++...++@@#####$###@@++...++@@###$#$###@@+....++@@@########@@++.",
+"++@@#####@@@#####@+.++@@#####@@@#####@+.++@@#####@@@#####@+.++@@#####@@@#####@@.++@@#####@@@#####@@.++@@#####@@@#####@+.++++@@+@+@@@@@@@+++.....+@#$$$$#@++.......+++@@@@@@+@@++++...+++@+@@@@@+@++@++...+++@+@@@@@+@@+@++...+++@+@@@@@+@++@++.....+++++@+@+@++++......++++@@@+@@+++++.....++++@+@+@+@++++.....+++@+@@@@@++++...",
+"........................++++@@@+@++++.......+++@@@+++...............+++@@+++.........++@@#@@@+..........++++@@@@+@+++.....................................................+.++++.+......++@@@@+++...............+++@+@+.+........++@@##@@+...................................+++@+@+.........+....................+++++++.......",
+"..++++++++++++..........++###$$$$###++.....++#$$$##@+..............+@@#$$#@+........++@#%%%$#@++........++##$#$$$###+++.........+..++..................................++++@@@@++......++@$$$##@++............+++@#$$#@+........++@#%%%$#@++............+.+.+...............++@#$$@@++.....+++++++................+@@###@++.....",
+"++@@#######@@+++.......+@#$%&&&&%%$$#++....+@#&&&%$#@+............++@$$&&$#@+.......+@#%&**%$#@+......++@#$%&&&&%%$$@@......+++++++++++.............................+++@@####%$$@@+....+@$&&&%$#@+............++#$$&&$#@+.......+@#%&**%$#@+........+++++++++++............++#$$&&$#@+...++@@#@@@+++............++@$%&&&$@@+....",
+"@@$$%%%%%%%$$##+++...+++#$==>>>==-==$@+...++#$=---=$#++..........++#%&*>>&%#++.....++#%*>>>==$#++.....++#$==>>>==-==$@+....+++#$@@###@@++.........................++@@#$$%%%&*&&$@+...++#$=---=$#++..........++#%&*>>&%#++.....+@#%*>>>==$#++......++@#$@@@$#@+++.........++#%&*>>&%#++.++##$%$%$#@@+..........++@$%**=*%%#@++..",
+"#$%&*******&&%$$@++...+##%=->>>----=$#+...++#%->---&$@+..........+@$&==>>*%$+......+@$**;;;-=&$@++....+@#%=->>>----=$@+....+@#$%$$$%%##@++.....++++......++++.+...+@#$%&&****==*%#@...++#%->---&$@++........++##&==>>*%$++.....+@$**;;;-=&$@@+.....+@#$%$$#%%$#@++......+++#$&==>>*%$++.+#$&&**&&%$#@+.........+@$%**===*&%#@+..",
+"#==>;;;;;;;>>**&$#+.++@$%*--;;;-->-=%#+....@#%->>>-*%#@+........+@#%*==;>*%$++....+@#%*=;;;--*%#++...+@#%&--;;;-->-=$#+...++#$&&%&%**%$#@+....++@+@+++..+++@+++.++@$$&=-;;;;>;;;&$@...+@$%->>>-*%$@+++....+++@$%*==;;*&$@++..++@#&*=;;;--*%$@++..++@#$&&%%&&*%$$@++...+.++##%*==;;*&$@+.@#%>>>;>-==$#@+.+.....+@#$*>;;;;;>&%#@+.",
+"$==;;;;;;;;>>==*%$@.+@#&*=>;;;;;;==*%#@...++#$*=>;>=*$@++......++#$&>>;-=&%#++.....@#&>>--->>=*&@++..+@&*=>;;;;;;==&$@+...+@$%>>=*=>>=*&#@..+.+@####@+++@##$#@+.+@$%**--;;;;;;;;*&#.++@#$&*=>;>=*%$@@++..++@#$%*>;;-=*&$#++..+@#%*>>---;>=**#@+..+@#%&>>*=*>>==*$@+..++@@#$%*>>;-=*&$#+.@$&>;;;;--=%$#@++....++@$&*;;;;;;;*&$@+.",
+"%*=;;;>>>>>>>;;;*&#.+@%*==>>;;;;;===&$@..+.@#%&=>>>==&$@++....++@$&*;;;-=*%#@+...++#$&>>->-;>=**#++.++#&*=>>;;;;;=**$@+..++#$&>>===>>==*#@+..@@$*=*$##@##$=**$@.@#%->>;;>>>;;;;;=*$.++#$&**=>;>==*%%$#+.++#$%&**;;;--**%$#@.+@#%&*>;->-;>===%$@.+@#%**;>===>>===%$@.++##$%&**;;;-==*&$#.@$&>>>;;>--=*$$@@++.+.@#*==;;=--;;==*$+.",
+"%*=;;;>>>->>>;;;=*$.@#%===;;;;;;;===&%#..++@$%*=>;>==&%$@@+..++@$%&=;;;==*&$@@...+@#%*>>-->;;==*$@+.++#&==>>;;;;;==&$#+..+@$%*>;===;>-==$#+.++#%===&%$$$%&===%#.@$&->>;;>>>;;;;;=*$.+#$&*===>;>==***%$#.+#$%**==;;;-==**&$#.+#$&*=>;---;;-==&%#.+#$&*=;;===>>-==*%#.@@$%&**==;;;--=**&$.@$&>>>;;>--==&&$#@+..+@$*=-;;-==;;-=*$@.",
+"%==;;;>>>>>>>;;;=*%.@$&>;;>>===>>;;;==$.@#%->>;;>>>>>;;;*&#.@#%->>;;>>>>>;;;*&#.@#&->>;;>>>>>;;;*&#.@#&>>;;;->>>>;;;*&#.@#&>>>;;>>>>>;;;*&$.+@$%=--**&&&**--=&#.#%*>>>;;>>>;;;;;=*%.@$%>>>;;===>>;;>==$.@$&>>;;;===>>;;>==$.@$&>;;;;===>>;;;==$.@$&>>;;>=*=>>;;;==$.@#==>>>;;-==;;;;>==.@#&>>>;;>>>-=**&%$#.++#$==-;;-=-;;-==$@.",
+"$*=;;;--=====;;;>-%.#%*>;;>>===>>;;;-=$.@$&->>;;>>->>;;;=*$.@$&->>;;>->>>;;;=*$.#$&>>;;;>->>>;;;=*$.#$*>>;;;>->>>;;;=*$.#$&>>;;;>->>>;;;=*$.+@%*;;;>>**=>>;;>&$.#&*;;;----->>;;;>-&.@%*>;;;;==*>>;;;-=$.@$*>;;;;===->;;;-=$.@%*>;;;;=*=>>;;;-=$.@%*>;;;;=*=->;;;-=%.#$==>>;;;==-;;;;;-=.+$%=--;;;;;;;;;>*&$..+@$==-;;---;;-==$#.",
+"$&=;;;--=*=*=;;;>-&.#%*;;;;;-=-->;;;-=%.#%*>>>;;--->>;;;=*%.#%*>>>;;--->>;;;=*%.#%*>>;;;--->>;;;=*%.#%*>;>;;--->>;;;=*%.#%*>;;;;--->>;;;=*%.+@$*>;;;>===>>;;;&#.$*=;;;----->>;;;>-&.#%*;;;>>=*==-;;;==%.#%*;;;>-=**--;;;==%.#%*;;;>>==*=-;;;==%.#%*;;;>>=**=-;;;==%.#%=-;;;>>===>>;;;==.+#%=--;;;;;;;;;;=*$..+#$==-;;---;;-==%#.",
+"%=-;;;;;---=*->>>>&.#&*;;;;;-=---;;;==%.#&=;;;-=***==;;;>-&.#&*;;;-=***==;;;>-%.#&=;;;--***==;;;>-&.#&=;;;-==**==;;;>-&.$&=;;;--***==;;;>-&.+@#%*==;;;;;;;==*%#.$*=;;;==;;;-->>>>>&.#%*;;;-=*%&*=;;;=*%.#&*;;;-=*%&*=;;;=*%.#&*;;;-=*&&*=;;;=*%.#&*;;;-=*&&*=;;;=*%.@#%*>>;>>===>>;;;*&.+#$==-;;=====>>>>>&..+@$==-;;;;;;;-==%#.",
+"%=-;;;;;--=*=-->>>*.#%*;;;;;>>>==;;;=*%.$&=;;;-=*&&**;;;>-&.$*=;;;==*&&**;;;>-&.$&=;;;-=*&&**;;;>-&.$&=;;;-=*&&**;;;>-&.#&=;;;-=*&&**;;;>-&..+#%&==;;;;;;;=**$@.$*=;;;==;;;-->>>>>*.#&*;;;-=&%%**;;;=*$.#&*;;;-=&%%&*;;;=*$.#&*;;;-=&%%&*;;;=*$.#&*;;;-=&%%&*;;;=*$.+#%*>>>>>===>>;;>*%.+#$==-;;=====>>>>>&.++#$==-;;;;;;;--=&$.",
+"%=-;;;;;--=**->>>>*.$&*;;;;;>>;==;;;=*$.$*=;;;*&%##%&-->>>*.#*=;;;*&%##%&-->>>*.$*=;;;=&%##%&-->;>*.#*=;;;=&%##%&-->>>*.$&=;;;*&%##%&-->>>*.++@#&*=;;;;;;;=**#@.$*=;;;==;;;-->>>>>&.#&*;;;==&$%&*;;;=*$.#%*;;;-=&%%&=;;;=*%.#%*;;;==&$%**;;;=*%.#%*;;;-=&%%&=;;;=*%.+@#%*==;;---;;==*%#.+#$==-;;=*=*=>>>>>&.++#$==-;;;;;;;--=&$.",
+"%=-;;;>>===**-->>>*.#%*;;;>>;;;==;;;=*$.$*=;;;=&$##$&-->>>*.$**;;;=&$#@$&=->>>*.$&=;;;*&$##$&-->>>*.$**;;;*&$##$&-->>>*.$*=;;;=&$##$&-->>>*...@#%*=>>;;;>>=*%#+.$*=;;;=-;;;==->>;>*.#&*;;;==&$%**;;;=*$.#&*;;;==&$%&*;;;=*$.#&*;;;==&$$**;;;=*$.#&*;;;==%$%&*;;;=*$..+@$*==;;>->;;=**$@.+#$==-;;==*==>>>;>*..+@$==-;;===>>;;;*&.",
+"%==;;;>>==***-->>>&.#&*;;;--;;;->;;;=*$.$*=;;;*&$#@$&-->>>&.$*=;;;*&$##$&=>->>&.$*=;;;=&$@#$&-->>>&.$*=;;;*&$@#$&-->>>*.$*=;;;*&$@#$&-->>>&.+.@#%**>>;;;>>=&%$@.$*=;;;==;;;==>>-;>&.#&*;;;==%$$**;;;=*$.#%*;;;==%$$**;;;=*$.#%*;;;==%$%**;;;=*$.#&*;;;==%$%**;;;=*$..++@#%*>>;;;>-*%#@+.+#$==-;;=====>>>>>&.++#$==-;;===->;;;=*.",
+"$&=;;;-=**&&*>>>>>*.#&*;;;->;;;--;;;=*$.$*=;;;=&$##$&-->>>*.$*=;;;**$##%&-->>>*.$*=;;;*&%##$&-->>>*.$*=;;;=&$##$&-->>>&.$*=;;;=&$##$&-->>>*..+@$==-;;>>>;;-=*$@.$&=;;;;;>--==;;;>>*.#%*;;;-=&%%&*;;;=*$.#%*;;;-=&$%&*;;;=*$.#&*;;;-=&$%&*;;;=*$.#%*;;;-=&$%&*;;;=*$...++#$&>>;;;>>&%@++.+#$==-;;;>;>>;;;-=&.++#$==-;;=*===;;;=&.",
+"$&*;;;--*****>>>>>&.#&*;;;-----;;;;;=*$.$*=;;;==&%&&*>;>>>&.#&=;;;==&%&&*>;;>>&.#*=;;;==&%&&*>>;>>&.$&=;;;==&&%**>;>>>&.$*=;;;==&%&&*>;;>>&.+@#%==-;;>>>;;-==%#.$&=;;;;;>--==;;;>>&.#&*;;;==%%%&=;;;=*$.#%*>;;==&%&&=;;;=*$.#%*;;;==&%%**;;;=*$.#&*;;;==&%%*=;;;=*$....+@$&*=;;;=*%#@+..+#%==-;;;;;;;;;;==$.++#%==-;;===*=;;;=&.",
+"#**;;;-==***=>>>>-%.#%*;;;--->-;;;;;=*%.#&=;;;==****=>;;>-%.$&=;;;==****=>;>>-&.#&*;;;==****=;;>>-%.#&*;;;==****=;;;>-%.#&=;;;==****=;>;>-%.+@#%==-;;>>>;;--=&#.$&=;;;;>>--==;;;>-%.@$*;;;==****=;;;**#.#$*>;;==***==;;;=&$.@$*;;;-=****=;;;=*$.@$*>;;-=****=;;;**#....+@$%*=;;;=*%$@+..@#%=--;;;;;;;;;;=*$.+@#%==-;>=====;;;=*.",
+"$*=;;;>-====-;;;=*%.#&*;;;-->--;;;;;=*$.#%*>>>;>===--;;;=*%.#%*>;;>>===--;;;=*%.#%*>>;>>===-=;;;=*%.#%*>>>;>====-;;;=*%.#%*>>>;>===-=;;;=*%.+@%*;;;>-=*=--;;>&$.#&*;;;;;-----;;;=*%.@$&->>;;====-;;;*&#.@$&->>;;=====;;;*&#.@$&->>>>====-;;;*%#.@$&->>;>====-;;;*&#....+@$&==;;;==&$#++.@$&=->;;>>>>>==*&%#.+@$&=->;;---->;;;=&.",
+"%&=;;;>>===--;;;**$.#&*;;;->===;;;;;=*$.@$&>>;;;--=--;;;=*$.@$&>;;;>--=--;;;=*$.@$&>>>;;-=---;;;=*$.@$&>>;;>-=---;;;=*$.@$&>>;;;-=---;;;=*$.+@%*;;;-=***=-;;;%$.#%*;;;;;---->;;;=*$.@#%->>>;==---;;;*%#.@#%->>;>===--;;;*%#.@#%->>;;===--;;;*%#.@#%=>>;;==---;;;*%#..++@$%*=-;;;-=*%$@+.#%*-->;;>>>>-**&$#@.+#$*-->;;>->>>;;;=*.",
+"%->;;;;;;;;;;>--*%#.#**;;;;;===->;;;=*$.@#%*==>>;;;;;--=&%#.@#%*==>;;;;;;>--&%#.+#%*==>;;;;;;--=&%#.@#%*==>;;;;;;--=&%#.@#%*==>;;;;;;>--&%#.+@#%*==*&%%%&*==*%#.#%*>>>;;;;;;;>--&%#.+#$*==;;;;;;;>>-*$#.+#$*==;;;;;;;>>-*$#.+#$**=;;;;;;;>>-*$#.+#$*==;;;;;;;>>-*$#..++#&==;;;;;;;=**#+.#&*;;;;;>>>**&%##++.+#&=;;;;;>>>;;;;;*%.",
+"%->;;;;;;;;;;--=%$@.#**;;;;;===--;;;*&$.+@#%*=>>;;;;;-==%$@.+##&*=>>;;;;;--=%$@.+@#%*=>>;;;;;-==%$@.+@#%*=>>;;;;;-==%$@.+@#%*=>>;;;;;--=%$@..+#$&**%$###$%***$@.@$&>>>;;;;;;;--=%$@.++#%*=;;;;;;;>--&$@.++#%*=;;;;;;;>--%$@.++#&*=;;;;;;;>>-&$@.+@#%*=;;;;;;;>>-%$@..++#&==;;;;;;;==&#+.#&=;;;;;>>-*%$#@++..@#&*;;;;;-->;;;;;*%.",
+"$=>;;;;;;;;;;-==$#+.#%*;;;;;***=-;;;*%#.++#$&*>>;;;;;==*$@+..+#$&*>>;;;;;===$#+.++#$&*>>;;;;;==*$@+.++#$&*->;;;;;==*$@+.++#$&*>>;;;;;===$#+.+.@#%%%#@@+@@#%%%@@.@$&->>;;;;;;;===$#+.++@$&*;;;;;;;>-=$#+.++@%&*;;;;;;;>-=%@+.++@%&*;;;;;;;--=$#+..+@%&*;;;;;;;--=%@+..++#&*=;;;;;;;=*&#+.#%*;;;;;--=%#@++....+#&*;;;;;---;;;;;&$.",
+"$%&***=**=***&&$#++.@#%&****&%%%&**&%$@..++@#$&******&%##++.+++##$&******&%$#++..++@#%%******&%##++..++@#$&******&$$@@+..++@#$&******&%$#++...++@@@+++.+++@@@++.+#$====*=****&%$#@+..+@@$%&******&&$#@+..++@#%&*******%%#@+..++@$%&**=***&&$#@+..++@#%&*******%%#@+...+@#$&*******&%#@+.@#%&*****&%#@++.....+@#%&***********&$#.",
+"@#%%&%&&&%&&%$$@@++.+@$$%%%$$##$$$$$#@+...++@##%%&%%$##@++....++@#$$%&&%%$##+++...++@#$$%&%%$##@++....++@#$$%&%%$$#@++....++@##%%&&%%$##@++....++++++...+++++++.+#$*==&&%&&%%$#@@+....++@#%%&&&&%$$#@+....+@##%%&&&&%$$#@++..+++@#$%%%&&%$$#@++...+@##%%&&&&%$$#@++....+@#$$&&&&%$$#@++.+@$$%&%%$##@++.......+@$$%&%%%$%%%%%$#@.",
+"+@@#####$####@@++...++@@####@@++@@#@@++....+++@@#####@@++......+++@@#####@@++......+++@######@@++......+++@######@+++......+++@@#####@+++.......+.+.......++....++@##$$$#####@@+.......++@@#######@+++......++@######@@+++.....++@@#######@+++......++@######@@+++....++++@@#####@@+++..++@@#####@+++........++@@######@####@++.",
+".++++@++@+@+++++......++++++.++++++++.......+++++++++++.........+++++++++++.+........++++++++++.........+.+++++++++.........+++++++++++.........................+++@@@@@@+++++++.........++++@+++++.........++++++++++++........++++@+@++++.........++++++++@+++........+++++@+@++++......+++++++++............+++++++++++++++..",
+".....+++++....................++.+..............++++......................................................+++++@+...................................................++++++....................+++++............+++++.................................+++++....................++++++............++++............................",
+"....+++@@+++................++++@@++...........+++@@++...........+..+.+..+...............................++@###@@++.................................................+++@@+++.................+++@@@++..........+++@@++..............................+++@@+++.................+++@@++++........++++@@++..........................",
+"..+++@####@+................+@####@++........++@####@@...........+++@+@@+++...............+.............++@#$%%$#@+...............................................+.@@####@+.................+@####@@+........++#####@+...........+....+..+.......+++@####@+.................+@####@++........+@####@@+...........+....+.+......",
+"...+$$%==$#@++...........+++@$%%==#@++......++@#$*=*$#++.......+++#$$$##$#@++........+++++++++...........@#**--=%#@+...............................................+#$%==$#@++.............++@#$==%$#++......++#$*=*$#@+.........++++++++++........+$$%==$#@++.............++@#$==&$#++.....++@#$*=*$@++.........++++++++++.....",
+".+++#%&==&%#@+...........++##&&*==##+.......+@#%&===%#@+......++@#$&&&&&&%$@++.....+++@@@@@@@@++.......++@$*=>>-%$@++............................................+++$%&==&%#@+.............+@#$&==&%$++.....++@$%===&$#@.......+++@@@@+@@@+@++...+++#%&==&$$@+.............+@#$&==&%$++.....+@#%&===%$@+.......+++@@@@@@@+++....",
+"..++$%*--*&%#@+..........+@#%**===$#++.....++#%&*--=*%#@+....++@$%&*=****&%#@+....++@##$$######++......++#%==>>>&$#@.........+......+................+...+........++$%*--*&%$@+...........+@#$&*--*%$++.....+@#%*=--*&$#++....++@##$#######@+++...++$%*--*&%#@+...........+@#$&*--*%$++....++#%&*---&%#++.....++@##$$######++...",
+"..++#$&->>-=%#++........++#%*>>>=*$#++.....+@$%>;;;;=*$@+....+@#**=;;;;;;>*%#++...++$&&==%%%==#@+......++#%=>=-===#++.....+++++++++++++++........+++++@+++++......++@$&->>-=$#@+.........++#$==->>&$#++....++#$==;;;>>%$@+....++$%&==%$%==%%#++...++#$&->--=$#++.........++#$===>>&$@++....+@$%>;;;;=*$@+.....++$%&==%%%==#@+...",
+"..++@$&->>--&$@+.......++#$**;;;=*$@+....++@#%*>;;;;==%#++...+@$*=-;;;;;;>*%$+...++#%&*==&*&-=$#++.....+@$&->--==*$@++....++@@#@@@@@@#@@+++....+++@#@#@##@@@++....++#$&->>>-&$#@+.......++#$&=-->>&$#+.....+@$%=-;;;>>&$#@+..++@%&*==&&&==&&$@+...++@$&>>>>-%#++........++#$&=-->-%$@+....++#$*;;;;;==$@++...++@%&*==&*&-=$#++..",
+"..+@#%&==>>>&%#++.....++@$%==>--**$@+.....+@%&=---==>-%#@+..++#%=---->>>-=*$#++..+@#&*==-=====%$@+....+@#$*=->>>*&$@+...++@$%%%%$$$%%%%%#@+.+.+@@#$%&&%%%%$$@@....++#$&==>>>=&$#@+....++@#$&*>>>==*$#@+..+++#$*->-----=&%@+..++#%&*--====-**%#+....+@$&==>>-&$@+.......++@$&*>>>**$#++....+@%&*->----=$#++...++#%**--=====$#++..",
+".++@$%*==>>>*&$#++...++##%*=->>-=&%#++...+@#&*=----=>-&$@+...@#%=->-->>>-=*%#+...+@#&*=---==-=&$@+...++@$&*->>>>**%#++..+@$%&***&&&*****%$#.++@#$%&***=****&$#+..++@$%*==>>>=*&%#@+..++@#$&*=>>>==*&$@+...+@$&*>>--->-=*&#@..+@$&*=-====--=*&$@...++#$&==>>-*$#+......++@#&*=>>>*&$@+....++@%*=->--=-=$#+....++#%*=--=====%#+...",
+".+@#%**==>>>=*%#@+...+@#%&*--->-=*&$@+...+#$*==>>=-->>*%#++.++$%=->-->>>--&%#@..++#$*==>>--->-&$#++..+@#%*=->>>>=*&$@++.@#%*====**=*===**%$.+#$%&*========**&$@..+#$%**==>>>==**%$@..+#$%**==>>>==**%$@.++#$%**>>--->-==*%#.++#$*==->===>-==*%#...+@#%*==>>>*%#++.....+@#%&==>>>*&$@+....++#&*=->--=-=$#+....++#&*=->-=-==$@++..",
+"++#$=->;;;;;;>*%#++.++@%=>>;;;;;;>&%#@+.++#%=>>;;;;;;;*&#@+.++$&->>;;;;;;;*&#@+.++#%->>;;;;;;;*&#@+.++#$-->;;;;;;>*%#++.@%*;;;;;;;;;;;;;--%.@#%---;;;;;;;;;;*&#.+@#%=->;;;;;;;>--%#.+@#%=->;;;;;;;>--%#..@#%->>;;;;;;;>>-%$.+@$&=->;;;;;;;>>-%$..++@&*=;;;;;*%#+......+@&*=;;;;;*&#+.....++#&==;;;;;*&$@+....++#&==;;;;;*&$@+...",
+"++#%->>;;;;;;;*&$#+.++#%->>;;;;;;;*&$@+.++#&->>;;;;;;;=&$#+.+@#&>>>;;;;;;;*&$#+.+@#%->>;;;;;;;**$#+.++#%->>;;;;;;>*&$#+.#%*;;;;;;;;;;;;;>-*.@$&->>;;;;;;;;;;=&$.+@$&->>;;;;;;;>>-&%.+#$&>>>;;;;;;;>>-*$.+@$&->>;;;;;;;>>-*$.+#$&>>>;;;;;;;>>-*$...+@&*=;;;;;*&#@+.....+@%*=;;;;;*&#@+....++#&*=;;;;;=&$@+....++#&*=;;;;;=&$@+...",
+"+@#&=->---=-;;==*#+.+@$&=->---=-;;==*#+.+@$%-->-----;;==*#+.++#%=-----=-;;-=*#+..@$&=->-----;;-=*#+.+@#&=->-----;;==*#+.#$*-->>-;;;-----;;*.#**;;;>>===>>;;;=*$.+#%*;;;>>===>>;;;*&.+#**;;;>>===>>;;;*&.+#%*;;;>>===>>;;;=&.+#**;;;>>===>>;;;=&...++#$**=;;;*&#+......++#$**=;;;*&#@......+@#%**=;;;*&$@+.....+@#%&==;;;*&$@+...",
+"+@$&-->----=;;-=*$@..@#&-->----=;;-=*$@.+@$%=->--=-=;;-=*$@.+@$%==>----=;;-=*$@.+@#&-->--=-=;;-=*$@.+@$%-->--==-;;-=*$@.#%*-->--;;;--==-;;*.$&=;;;-=***--;;;=&$.+$%*;;;>>=-=>>;;;=*.@$&=;;;>>=-=>>;;;=*.+$%*;;;>>=-=>>;;;=&.@$&=;;;>>=-=>>;;;=&...++@$&*=;;;*&$++.....++@#&*=;;;*&$++.....++@$&*=;;;*&#++.....++#$%*=;;;*&#@....",
+"+@$&-->--=--;;-==$#.+@$&-->--=--;;-==$#.+@$&-->--=--;;-==$#.+@$&=----=--;;-==$#.+@$&-->--=--;;-==$#.+@$&-->-----;;-==$#.#%*->>->;;;---=-;;*.$*=;;;=**%&&*--=*%#.@$**;;;>>===>>;;;=*.@$*=;;;>>===>>;;;=&.@$**;;;>>===>>;;;=*.@$*=;;;>>===>>;;;=*....++@%&=;;;*&#@.......+@#$&=;;;*&#@.......++#%&=;;;*&$@.......++#%&=;;;*&$++...",
+"+@$&->>;;;;;;;-==$#.+@$*->>;;;;;;;-==$#.+@%&>>>;;;;;;;-==$#.+@$&->>;;;;;;;-==$#.+#$&->>;;;;;;;-==$#.+@$*->>;;;;;;;-==$#.$*=;;;;;;;;;;;;;;;*.$*=;;;=*&%%&*=-=&$#.@#*=;;;;;;;;;;;;;=&.@$*=;;;;;;;;;;;;;=&.@#*=;;;;;;;;;;;;;**.@$*=;;;;;;;;;;;;;=&.....+@$&*;;;**#@+.......+@$&*;;;*&$@+......++@$&*;;;*&$++.......+@$&*;;;*&$++...",
+"@#%*>>>;;;;;;;-==%#.@#%*>>>;;;;;;;-==%#.+#%*>>>;;;;;;;-==%#.+#%*>>>;;;;;;;-==%#.+#%*>>>;;;;;;;-==%#.@#%*>>>;;;;;;;-==%#.%*=;;;;;;;;;;;;;;;*.#*=;;;==&&%&&=*=*%#.@$*=;;;;;;;;;;;;;=&.@$*=;;;;;;;;;;;;;=*.@$*=;;;;;;;;;;;;;=*.@$&=;;;;;;;;;;;;;=&....++@%&=;;;*&$@+......++@%&=;;;=&$@+......++@%&=;;;*&$@++.....++#$&=;;;*&$@+...",
+"+$*=;;;-====;;-==$#.+$&=;;;-====;;-==%#.@#*=;;;-====;;-==%#.@#&=;;;-====;;-==%#.@$*=;;;-====;;-==%#.+$&=;;;-====;;-==$#.&>>>>>==;;;>>>>>>>*.#&*;;;--=**=*===**$.@$*=;;;;;>>>>>>>>=&.@$*=;;;;;>>>>>>>>=&.@$*=;;;;;>>>>>>>>**.@$*=;;;;;>>>>>>>>=&...++@#%&=;;;=*$#@+.....+@#%&=;;;**$#@+.....+@#%&=;;;=*%#++.....+@#%**;;;=*%#@+..",
+"@#&=;;;=--==;;-==%$.@$&=;;;=--==;;-==%#.@$&=;;;=--==;;-==&#.@#*=;;;=--==;;-==%#.@#&=;;;=--==;;-==&#.@#*=;;;=--==;;-==&$.&>>>>;==;;;>>>>>>>*.#%*>>>;;;>>>>;;;>=$.@$&=;;;;;>>>>>>>>=*.@$*=;;;;;>>>>>>>>=*.@$&=;;;;;>>>>>>>>=&.@$*=;;;;;>>>>>>>>=&...++#$&*=;;;=*&$#@+..+++#$&*=;;;=*&$#@+..+++#$&*=;;;=*&$#@+..+++#$&*=;;;=*&$#@+.",
+"@$*=;;;-====;;--=&$.@$*=;;;-====;;--=&$.+$*=;;;-====;;--=&$.@$*=;;;-====;;--=&$.@$*=;;;-====;;--=&$.@$*=;;;-====;;--=&$.&>>>>>==;;;>>>>>>>*.@$%>>>;;;;;;;;;;--$.@$&=;;;;;>>>>>>>>**.@#&=;;;;;>>>>>>>>*&.@#&=;;;;;>>>>>>>>=&.@#&=;;;;;>>>>>>>>=&.+++#$%**=;;;==*&$#@..++#$%**=;;;==*&$#@..++#$%**=;;;=**&$#+..++#$%*==;;;=**&$#+.",
+"@$&=;;;;;;;;;;;;>*%.+$&=;;;;;;;;;;;;>*%.@#&=;;;;;;;;;;;;>*%.@#&=;;;;;;;;;;;;>*%.@$&=;;;;;;;;;;;;>*%.@#&=;;;;;;;;;;;;>*%.&>>;;;;;;;;;;;;;;;*.+#$&*=->;;;>>>--*%$.+#%*;;;;;;;;;;;;;*&.@#%*;;;;;;;>;;;;;=&.@#%*>;;;;;;;;;;;;*&.+#%*;;;;;;;;;;;;;=&..+@#=-->>;;;>>--=$@.++@#=-->>;;;>>--=$@.++@#=-->>;;;;>--=$@.++@#==->>;;;;>--=$@.",
+"+#&=;;;;;;;;;;;;;*%.+#&=;;;;;;;;;;;;;*%.@#&=;;;;;;;;;;;;>*%.@#&=;;;;;;;;;;;;;*%.+#&=;;;;;;;;;;;;>*%.@#&=;;;;;;;;;;;;;*%.%->;;;;;;;;;;;;;;;&..+@#$*=>;;;>>-==%#@.+@$&>;;;;;;;;;;;;*&.+@$&>;;;;;;;;;;;;*&.+@#&->>;;;;;;;;;;*&.+@$&>;;;;;;;;;;;;*&.++#$=->>;;;;;>>-=$#..+#$=->>;;;;;;>-=$#..+#$=->>;;;;;;>-=$#..+#$=->>;;;;;>>-=$#.",
+"@#$&-->>>>>>>>>>-&$.@#$&-->>>>>>-->>-&$.+#$&-->>>>>>-->>-&$.+#$&-->>>>>>-->>-&$.@#$&-->>>>>>-->>-&$.+#$&-->>>>>>-->>-&$.%*=>>>>>-==>>>>>=&%...++#%==;;;>-*%$@++.+@#%&*=->>>>>>===&$.++#%&*=>>>>>>>==*&$.+@#$&*=->>>>>>==*%$.+@#$&*=->>>>>>==*%$..+@$==->>>>>>>--=%#.++@$==->>>>>>>--=%#.++@$==->>>>>>>--=%#.++@$===>>>>>>>--=%#.",
+"+@$%=-->>>>>-->>-&$.+@$%==->>>>>-->--&$.+@$%=-->>>>>-->--%$.+@$%=-->>>>>-->--&$.+@$%=-->>>>>-->--&$.+@$%=-->>>>>-->--%$.#&*->>>-===>>>--&%$...++#%*=;;;>-&$@++...+@#$&*=->>>>>=*&$#.++@#%&*->>>>>>=**$#...@#$%&=->>>>-=**$#..+@#$&*=-->>>>=**%#..+@$*==>>>>>>>-==$@..+@$*==>>>>>>>-==$@..+@$*==>>>>>>>-==$#..+@$*==>>>>>>>-==$#.",
+"++@%*==------=-==$#..@@$===-----==-==$#.+@@%*==-----==-==$#.+@@%*==-----==-==$#.++#$*==-----==-==$#.+@@%*==-----==-==$#.#$&==---***=---=%$@...+@#%->;;;==%#@+.....+@@$$==----=*&%#@...+@#$%=-----=*&%#+...++@$%==----=&&$#+...+@@$$==----=*&%#+.++@#&*=->-----==*#@.++@#&*=->-----==*#@.++@#&*=->-----==*#@.++@#&*=->-----==*#@.",
+".+@#$$%&&&&&&&%%$#@..++##%%&&&&%&%%%$#@..++#$%%&&&&%&%%%$#@..++#$%%&&&&%&%%%$#@..++#$%%&&&&%&%%$$#@..++#$%%&&&&%%%%%$#@.+#$$%%%%%%$%%%%$#@@....+#%->;;;=&$@+.......++@#$$%&%&%$##++....++##$%%&&&%$$@@+...+++@#$%%&&%%$#@++....++@#$%%%&%%%#@@+...+@#$%%&&&&&%%$$#+...+@#$%%&&&&&%%$$#+...+@#$%%&&&&&&%$$@@...+@#$%%&&&&&&%$$@+.",
+"..++@##$#$$$#$##@++...+@@@##$#$#$###@++...++@@##$#$#$###@@+...++@@##$#$#$###@++..+++@@##$#$#$###@++...++@@#$#$#$$###@++.++@#$###@#######@+....++@#%&**&%$#++........++@@##$####@++......++@###$###@@++......+++@###$###@++......++@@###$##@@++....+++###$$$$$$##@++...+++###$$$#$$##@++...+++###$$$$$###@++...+++###$$$#$###@++.",
+"..+++++@@+@@@@+@++.....+++@+@@@+@+@+++....++++@+@@@+@@+@++....++++@+@@@+@+@+++....++++@+@@@+@@@+@+....+++++@@@@+@@+@+++..++++@@@+++@@@++++.....++##$%%$$@@+...........++@+@@@+++.+.......+++@@@@@++++........++++@@@++++..........++@@@@@+@+.+.....++++@+@@+@@+++......++++@+@@@@@++++.....+++@+@@@@@@++++.....++++@@@@@@@+@++..",
+"..++++@@+@++@+@+.+.........+.+.+.+............+.+......................+..+............++++@++.............+.+++++........................................................................+.......................++.+...............+++.+......................................+.+......+++@++++...............................",
+".++@##########@@++........+++@+@++++.........+++++++..................++@++++.........++@##@@++............++@+@+@++++.................................................................++++++++.................+++@@@++..........++@+@@++...................................++++@+++...++@####@++..............................",
+"+@#$$%&&*&&%&&$$#@+....+++@###$###@+++.....++@@##@@++...............++@####@+........+@#$%&&$#@+.........++@#$#$###@+++................................................................+@####@+...............+++###$$@@.........++@#$##@@+................................+.+@###@@+...+#$%&&%$#@+.............................",
+"+#$&***==***=**%$#+.....+##$%%&%%%##++....++@#$%%$#@++.............++@$$%%$#@++.....+@#$&***&$#@+.......+@@$%%&&%%$$#@+......+.+..+.++.............+.++..............................++@#$$%$#@++..............@@$%%&%$@++......++#$%&&%$#++.........+.+.+..+.+............+@@$$%%$#@++.@$%*=**&$#++...............+.+.+.+.+....",
+"@$==;;;;;>;>;;--=$@..+++@$%--=-=-=&%#++....+$%&>>*&$@@...........+.@#$&*;;&%#++.....+@$*=;;;=*$@++......+@$*=>>>===**#+....+.++@+++++@+++..........+++@+++...........................++$%*>>*&$#++..........+++#$===>-%#++....+++#$*=>>>&$#++.....+.+++@++@+@++++.......+.++@%&*;;&%#++.#%*;;;;>&$@++...........+++++@+++@+++...",
+"#$=-;;;;;>;>;;>-=$#..++@$%&>>-----*%$++...++$&*>>=*&$@++.........++@$&*=;;*%$+....++@#&=-;;;-=&#@+....++@#%==>>>====*#@....+@@#########@+++......++@#$##@++..........+.+++++++++....++@$&*>>=*&$#++........+++@$%==->>%$@+....++@$%==;;>*%$@++....+@@#########@@+.......++@@$&*=;;*&%@+.#&*;;;;>*%#@+..........++@##########@@+.",
+"#%=-;;;;;;;;;;>>=%#..+#$%**>>>>>>-*&$@+...++$&*>;==*%$@+.........+@$%*==;;*&$++...++#$&=-;;;-=&$#++...++#$&==;;>-=-==$@..+++##%%%%%%%$$$@++......+@#%%%%$@@.........+++@@#@#@#@@@++.+@#%*=>;==*%$#@@+....++@@#$%&--->>&$#++..+@@$%*=-;;;=*%$@++.++@##$%%%$%%%%$#@@..++++@@#$%*==;;=&%#+.#&*;;;;;*&$#@@++....+++@#$%%%%$%%%%%##@.",
+"#%=->>>;;;;;;;==*%#.+@$%-->>>;;;;>*%#++...++#%*==;;>*%#@+.......+@#%*>;;-=*$#@....+@$**>;=-=;;*&$++....@$&*>;;;;;;=*&#@..++@&**->*&*>>**&@+....++@#**>>-&#@++......++@#$$$$%$$$$#@+.@#$%**==;>>*%%$@@++.++@#$$&*=>;;==*%$@+.++#$&*=;;>>->>&%#@+.+@#%*==>-***;;&%$@+.++##$$%&&>>;-==*&$#.@$&=--;;==**&%$#@++.+@@$$&&;;***>-==*$#.",
+"#$=-->>;;;;;;;==&%#.@#%*->>;;;;;>>*%#@+..++@#%&=-;;;**$$@+.....+@#%&*;;;-=*%#++...+@%*=>;=-=;;=*$@+..++@%*=>;;;;;;=**#+..++#*==>>=*=>>=*&#+.....+@$*=>>>&$#+.....++@#$%&&**&**&&%$@.#$&**==-;;;=*&&$#@+.@#$%&**==>;;==*&%$@.@#$&*==;;->>>>=&%$@.+#$&===>>*==;;**%#@.+#$%&&***;;;=-=**%$.@#%=--;;>>>>>=*&#@+.+#$%***;;=**>>===&%.",
+"@$*=;;;----=;;>>-&$.@$=->>;-->>>>>*&$@+...+@#&*>>;;;>>&$#@+...+@#%&>>>;;>>*%$@+..+@#%*=>>;;;>>*&%#+...+@$&*>>;;;>>=*%#@.++@#&*=>>;>>>>**%#+....+@#%=-;;;*%#++....+@#$%->>>>>>>>>=*#.$*=>>>=====>>--=$#+.@$*=>>>==*==>>>-=$#.@#==>>;=====>>>-=$#.@$==>>>===*=>>>-=%#.@#==>>>--===-->>>==.+#$==-;;>>>>>==*&#@.@#==>>>>-=*=>>>>>==.",
+"@$&=>;;--=--;;>>>&$.#$==;;;-->>>>>=&$#+.++@#%**>>;;;>>*&%#@.+++#$&*>>;;;>>**%#@..+@$**=>>;;;>>=*%$@..+@$%*=>>;;;>>=*&$@..+#$*==>>;;;>>=*%$@....+@$%=-;;;*%$++...++#$&*>>>>>>>>>>-=$.$=->>>==**=>;>>-&#@.#$==>>>==*=*>;>>-%$.#%==>>;=====>;>>-&#.#$==>>>==*==>;>>-%$.#$==>>;--=*=->>;>==.+#$==-;;>>>;>-==&$#.#$==>>;>>*=*>>;;>-=.",
+"@#&=;;;---=-;;>>>*%.#%=-;;;-->>>>>=*&$@..+#%&*=>>;;;>>=*&$#.++#%&*=>>;;;>>=*&$#.+@#%*==>>;;;>>=*&%#.++#%**=>>;;;>>=*&%#.+@#%*==>>;;;>>=**%#..++@#$&--;;;*&$#@++.+#%&*=>>;;;>>;>>==$.%=-;;>==**=>>>>-&$@.#%=->;>==**=>;>>-&$.#%=-;;;=====>;>>-&$.#%=-;;>==*==>;>>>&$.#%=->;>>==*=->;;>-=.+#$==-;;;;;;;;;;=*$.#%=-;;>>-=*=>>;>>-=.",
+"@#%*->>;;;;;;;;;;=&.#%==;;;;;>>>;;>>-%#.+@$&>;;;;>>>;;;;>&$.+@$&>;;;;>>>;;;;>&$.+@$&>;;;;>>>;;;;>&$.+@$&>;;;;>>>;;;;>&$.+@$&>;;;;>>>;;;;>&$..+@#%&*===-=**&%$@+.@$&>>;;;>>>;;;;;**$.%==;;;==***>;;;;*%#.#%==;;;==**=>;;;;*%.#%==;;;-=**=>>;;;*%.#%==;;;-=***>;;;;*%.@$*=;;;>>===->;;;=*.+#$==-;;;;;>;;;;==%.@$=-;;;>-=*=>>;;;==.",
+"+#%*>>>;;;;;;;;;;=&.#$=-;;;;;>>>;;>>-&$.+#$*;;;;;>>>;;;;>*%.+#$*;;;;;>>>;;;;;*%.+#%*;;;;;>>>;;;;>*%.+#$*;;;;;>>>;;;;>*%.+#%*;;;;;>>>;;;;>*%.+@$$**===-===***&$@.#$*;;;;;>>>;;;;;*&$.$=-;;;-=***>>;;;*%#.#$=-;;;-=***>>;;;*%.#$=-;;;-=***>>;;;*%.#$=-;;;-=***>;;;;*%.@$%*>>>;>===;;>>>*&.+#$==-;;=====;;;>>&.@$*=;;;>>===->;;;=*.",
+"+$%*>>>;;;;;;;;;;=*.#$==;;;;;>>>;;>>>&$.+$%*;;;;;>>>;;;;;*%.+$%*;;;;;>>>;;;;;*%.+$%*;;;;;>>>;;;;;*%.+$%*;;;;;>>>;;;;;*%.+#%*;;;;;>>>;;;;;*%.@#%&*=====-====**%#.$%*;;;;;>>>;;;;;=&$.$==;;;-=***>>;;;*%#.@$==;;;-=***>>;;;*%.@$==;;;-=***>>;;;*%.#$==;;;-=***>;;;;*%.+#$&->>;;===;;>>-&$.+#$==-;;=**==>;;>>&.@#%*>>>;>===;;>>>*%.",
+"@#*=;;;>>====-;;;=*.@$&*;;;>>===--;;;*%.@#*=;;;-==*===;;;=*.@$*=;;;===*===;;;=*.@$*=;;;===*===;;;=*.@$*=;;;-==*==-;;;=*.@$*=;;;-=*====;;;=*.@$=-;;;;;;;;;;;;;&%.$*=;;;=->>>;;;;;=*$.$&*;;;-=***--;;;*%#.@$&*;;;==*&*=-;;;*%.@$&*;;;==*&*=-;;;*%.@$&=;;;-=***=-;;;*%.+@#%*==;;=--;;==*%#.+#$==-;;==**=>->>>*.+#$&->>;;===;;>>-&$.",
+"@$*=;;;--=*===;;;=*.+$&=;;;>>=*==-;;>*%.@$*=;;;==***==;;;=*.@#*=;;;==***==;;;=*.@$*=;;;==***==;;;=*.@$*=;;;==***==;;;=*.@$*=;;;==***==;;;=*.@$=-;;;;;;;;;;;;;&$.#*=;;;-=>>>;;;;;=&$.$&=;;;-=*&*=-;;;*&#.@#&*;;;-=*&*=-;;;*&.@#&=>;;==*&*=-;;;*&.@#&*;;;-=&&*=-;;;*&..++#%*=;;---;;=*&#+.+#$==-;>===*=-->>>&.+@#%*==;;=--;;==*%#.",
+"@#*=;;;==****=;;;=*.@#&*;;;-=***--;;;*%.@#*=;;;=*****=;;;=*.@$*=;;;=**&**=;;;=*.@$*=;;;=*****=;;;=*.@#*=;;;=*****=;;;=*.@#*=;;;=**&**=;;;=*.+#%&**=======*=*&%#.$*=;;;>-;;;==;;;=*$.#%*;;;-=***=-;;;*%#.+$&*;;;-=*&*=-;;;*%.@#&*;;;==*&*=-;;;*&.@#&*;;;==*&*=-;;;*%..++@$%*>;;;;;>*&#@+.+#$==-;;---==;;;-=&..++#%*=;;---;;=*%#+.",
+"@$*=;;;=****==;;;=*.+#&*;;;--***=-;;;*&.@$*=;;;=**&**=;;;=&.@$*=;;;=*****=;;;=*.@$*=;;;=**&**=;;;=*.@$*=;;;=**&**=;;;=*.@$*=;;;=**&**=;;;=*.+@#$&&**====***%$#@.$*=;;;--;;;==;;;=*$.#%*;;;-=***--;;;*&$.+#%*;;;-=***==;;;*&.+#%*;;;-=***==;;;*&.+#%*;;;-=***==;;;*&....+#%*=-;;;-=&$@+..+#%==-;;;;;;;;;>=*$...+@$%*>;;;;;>*&$@+.",
+"@#*=;;;===**==;;;=*.@$&*;;;--***--;;;*&.@$*=;;;==***==;;;=*.@$&=;;;==***==;;;=*.@$&=;;;==***==;;;=*.@#*=;;;==***==;;;=&.@#*=;;;==***==;;;=*.++@##%**====*&$$#@+.#*=;;;>-;;;==;;;=*#.#%*;;;--*=*--;;;*&#.@#%*;;;-==*==-;;;*%.+#%*;;;===**=-;;;*&.@#%*;;;===**=-;;;*&...+@#&*=-;;;=*%#+...+#$=--;;;;;;;;>>*&#...++#$*=-;;;-=&$@+..",
+"@#&=;;;>>===->;;;**.@$*=;;;-==*==-;;;=&.@#&*;;;>>===>>;;;*&.+$&=;;;>>===>>;;;*&.@#&=;;;>>===>>;;;*%.@#&=;;;>>===>>;;;*&.@#&=;;;>>==*>>;;;*%..+++@$%=-;;;*%$@++..$**;;;;;-=->;;;;*%#.#%*>;;>>===>>;;;=&$.+#%*>;;>>===>>;;;=&.+#$*;;;>>===>>;;;=&.+#%*>;;>>===>>;;;=&..+@#$&*>>;;;=&$@+...+#%==-;;;;;;;>>>*%@....+#%&--;;;==%#@+..",
+"@#&*;;;>>===>>;;;*&.#%&=;;;-==*=--;;;=*.+#&=;;;>>===>>;;;*%.@#&*;;;>>===>>;;;*%.@#&*;;;>>===>>;;;*%.@#&*;;;>>===>>;;;*%.@#&*;;;>>===>>;;;*%....+@#%=-;;;*%#++...#*=;;;;;-==>>;;;*%#.@$&>;;>>===>>;;;=*%.+@$&>;;>>===>>;;;=*.+@$&>;;>>===>>;;;**.+@$&>;;>>===>>;;>=*..+@$&*=>>;;;*&$@+...@#%=--;;=====**%$#@..++#%&*>>;;;=&$@++..",
+"+#$*=->;;;;;;;>--*$.#&->;;;;;===;;;;;>-.+#$&-->;;;;;;;>--&$.+#$*=>>;;;;;;;>--&$.+#%&-->;;;;;;;>--&$.+#$&-->;;;;;;;>--&$.+#$*=->;;;;;;;>-=&$.....+#$==>>-&$@++...$&*;;;;;;;;;;>-=&$#.+#%*==;;;;;;;;;;>-%..@#%*==;;;;;;;;;;>-.++#%*==;;;;;;;;;;>-..+#%*==;;;;;;;;;;>-.+@#%->>;;;;;*&#+....@$&=--;;===**&%##++..+@$&*=>>;;;*&$@+...",
+"+@#&=--;;;;;;;--=&#.#%>>;;;;;===;;;;;>-.+@$%=--;;;;;;;--=%#.+@$%=--;;;;;;;--=%#.++$%=--;;;;;;;--=%$.+@$&=--;;;;;;;--=%$.+@#&=--;;;;;;;--=%$....++@$&=---%$@+....$&*;;;;;;;;;;--=%#@.+@$&==;;;;;;;;;;>-%..+@$**=;;;;;;;;;;>-..+@$&*=;;;;;;;;;;>-.++@$&*=;;;;;;;;;;>-.+@$&>>;;;;;;*%#@....#&*>;;;;>>>*%$#@++..+@#%->>;;;;;*&#+....",
+"++#$==-;;;;;;;-==$@.#%->;;;;;===;;;;;>-..+#$==-;;;;;;;-==$#..+@$==-;;;;;;;-==$#.++#$==-;;;;;;;-==$@..+@$==-;;;;;;;-==$@.++#$==-;;;;;;;-==$@.....++#&*===$#++....#&*;;;;;;;;;;-==$@+.+@#%&=;;;;;;;;;;>-%..++#%*=;;;;;;;;;;>-..++@%&*;;;;;;;;;;>-..++#%&*;;;;;;;;;;>-..@$&>>;;;;;;*%#+....#&*;;;;;>>-&$@++.....@$&>>;;;;;;*%#++...",
+".++#$%&***=***&%$#@.@$%*******&******&%.+++#$%&***=***&%$#+..+@#$%&***=***&%$#+..++#$%&***=***&%$#@.++@#$%&***=***&%$#@..++#$%&***=***&%$#@......+@@$$$$#@+.....$==>>>==*=***&%$#@+..+@#$%****=**=**&%$..+++#$%****=**=**&%...++#$%****=**=**&%...++#$%****=*****&%.++$%->>>>>>-&$@+....@$&>>>>>>--%#++.....++#&->>>>>>-&$@+....",
+"..++##$%&&%&&%$#@@+.+#$$&&&&%$%$%&&&%$$...++##%%&&%&&%$#@@+...++##$%&&%&&%$##++...++##%%&&%&&%$#@@+...++##$%&&%&&%$#@@+...++##%%&%&&&%$$@++.......+@@##@+++.....#*=->>**&&&&%$$@@+....++##$%&&%&&%&%$$@...+++##$%&&%&&%&%$$...+++##%%&&%&&%&%$$....++#$$%&&&&&&&&$#.++#%--->---=$#@+....@#%-->->-==$#+......+@#$--->---=$#++....",
+"...++@@#######@@++..++@@######@######@@....++@@@#######@++.....++@@#######@@++....+++@@@######@@++.....++@@#######@@++...+.++@@#######@@+++.....+..+++++++......##%&&%%$$$###@+++......++@####$#$###@@+.....++@####$#$###@@.....++@@###$#$###@@.....++@####$#$####@..+@#$&&&&&%%#@+.....+@#%%&&&&%%#@++......+@#%%&&&&%%#@+.....",
+"...+.++++@+@++++.+...++++@++++++++@+@++.....+++++@+@++++.+.....+.++++@+@+++++........++++@@++++++.......+++++@+@++++.......+.+++@@+@+++++...........+++.........+@##$###@@++++++........++++@+@+@@@++++......++++@+@+@@@+++.......+++@+@+@@@+++........++++@+@+@+++...+@##$$$$##@++.....+@@#$$$$$##@++........+@#$$$$$##@++.....",
+".....................+++++...........................................................................+++@@####@###@@++...............+.........++++++++@+++............+++@++...........................................................................................................+@@#@@@+++..............................",
+"....................+++@@@+++......................................+.+.+..+..........................+@#$%$%$$%$%%%$#@+...........+++++........++@@#####@@@++.........++@#@#@++..................+.......................................................................++++.++++......@$$%%$$#@++++...........................",
+"....................+##$###@+................................+++@++@+@+@++@++.........+.+............+#$&&********&&%#@..........+@@#@@++......+@#$%$%$$$$@@+.........+@#$$$#@+..............++++++++..........+++++...............................+.+++++.+..........++++@@@@++@+@+....$%&**&%$##@@@@+++.........+......+......",
+".........+++........@$*=**&#@++.............................+@@##$##$#$#$###@@+.....+++@+++.........+@$&>;;>>>>>>;;;*%#.........++#&&%##+.....+@#*========$#++.......+@#%=-=%#@+.............+@@###@@++.......++@@@@@+............+..++.++.+......++@@@@@@@++..+.......+@$$$$###%$#++...%->;;;==%$$&%$#@@++.....+++++..+++++....",
+"......+++@@@@+......$%===**%#@+.............+++++++@+.......@#$%%&%&&%&&%&&$$@@....++@####@++.......+#%*;;;;>>>>>;;;*&#.......+.@@%*=&$$++...++#$===--==--%#@......+++#$&->-&$@+............+@#$%&%$#@+.....++@##$$##@++.....++++@+@+@@@+@+++...+++##$$$$##@@@+@++...++@#%&&&%$%*&$#@+..&>>;;;==*&&**%$$#@@..+.+@@@@@+++@@@@++..",
+"......+@#$$##@++....%&=--==&%#++.+.++++....++@@#####@@++....#%&******=**=***%$@...++@$$%%$#@+.......@#%*;;;;;>>;;;;;=*$....+++++@$&==*&%@++..++#$=--->-->-&$@....+++@#$&*>>>*&#@@++........+@#%&***&%#@...+++@#$&&&&$#@++....+@###$#$##$$$$#@++.+@#$&&*&&&%$$#$##@@..++#$**=*&*&=*%$@+..&>>;;;-==**==**&%$#...+@#$$$#@@#$$$#@++.",
+".....++#$***%#+.....*=;;;;;=*$@++.++@++...+@@#%%%&%%%$@++...#=-;;;;;;;;;;;;;;%#...+@#*=---$#++......+$&=;;;>>>>>>;;;=&$.++++@@@##*=;;=*%#+...++#%=--;;>>;;*%#+..++@#$%&*=;;;=*$$#@+........+@$&;;;;>-$#.+++@#$%==;;;*%#++...+@$$%%&&&&&&&&&&$@+.+#%&>>>>>==&&&&%%$#..+@$&>>>>=-=;;*&%@+.&->;;;>>-->;;>>--*&.+++$%&=-%#$$=*=%#@+.",
+"....++#$&===*$+.....&=;;;;;==%#@++#####..+@#$%&**=**&&$@++..$=-;;;;;;;;;;;;;;%#..++@$==->-&#@+......@$&=;;;>>>>>>;;;=*$.+@###$#$%*=;;=*&#@+..+@$%=--;;>>;;*&$+..+@$%&***=;;;==*%$#@.......+@#%*;;;;>>$#.+@#$$%&=-;;;*&$#@++.@#%****=***=*==*%#@.@$&*>>>>>--=*=***&$.+@#$*>>>>---;;=*%#+.%->;;;>>>->;;>>>-=*..+@%&*--*%%&===*%#@.",
+"....++#*=;;-=%@.....$&==;;;>-%$@@#%&=*$.++#$==-;;;;;;=*$@++.$%**====;;;===**%$@...+@$*=>>>&$@+......@%&*;;;;;;;;;;;;=*%.@#&****&&*=;;-=*$@+.+@#$&=--;>==;;**$@+.@$*=>>>>>;;;>>>-=*#.......+@$&*>>>>=&$#.@#&*===->>>>=*&%$#@.#%--;;;;;;;;;;;;&%@.$%->;;;;;;;;;;;;;;%.+#$*=>>>>=-=;;=**$@.$&*---;;--->>;;>>**..+@%*=;;=*&*;;;==%#.",
+"....+@#&=;;-=&@+....#&*=;;;>-&$##$**==$.+#$&=--;;;;;;==%$@+.#%****==;;;===*%%#@...@@%*=>>>&$@+......#%*=;;;;;;;;;;;;=*%.#%*====**==;;===%#+.@#$&*---;;--;;=*&#@.#$==>>;>>;;;>>>>==$......++#%*=>>>>=&$@.#%*====->>>>=*=*&$#.#%->;;;;;;;;;;;;*%#.#%->;;;;;;;;;;;;;;&.@$%==>>>>-=-;;==*%#.#%*=--;;--->>;;;>=&.++@%*=;;==*=;;;-=%#.",
+"....+@#*=;;>-&@+....#$*=;;;>-&%$$%==-=%.@$&*-->;;;;;;-=*%$@.$%&**=*=;;;=**&%$#@...+@%*=>>>&%@+......$&*=;;;;;;;;;;;;==%.#&========-;;-==%$@.#$&**---;;==;;==*%#.#%==;;;>>;;;>>>>==%......+#$&*=>>>>*&$@.$&===-->>>>>====*&$.$%>>;;;;;;;;;;;;*&#.#%->;;;;;;;;;;;;;;%.#%&==>>>>=-=;;-==&$.#%&==-;;-=->>;;;>*&.++@%*=;;====;;;--&$.",
+"....++#$*->;;*#@+...@$&*;;;--*%%%*;;-=%.#%=-;;;==;;>>>>==%#.$=======;;;==**%$$#..++@%*=>>>*$@++.....&=>;;;;;;>>;;;;;>-&.$%;;;;;;;;;;;;;>*$@.**=>>;;;;;;>;;>>>-$.$&->;;;>>;;;>>;;--&.....+@#%->>;;;;=&$@.$&;;;;;;;;;;;;;;;=*.#&*=;;;====--;;;=&$.@#%*===;;;;;;===*&%.&*=;;;;;;;;;;;;;;==.#$*>>>;;=====;;==*%..+@#%*;;-=--;;;;>&$.",
+"....++#$&=-;;*#@+...+#%*;;;--*&&&*;;-=%.$&=-;;;==;;>>;>--&$.%=-=====;;;-==**&%$...+@$*=>>>&%@+......&=>;;;;;;>>;;;;;>-&.$%;;;;;;;;;;;;;;*%#.*==>;;;;;;>>;;>>>-%.$&>>;;;>>;;;>>;;>-&.....+@$&>>;;;;;=&$@.%*;;;;;;;;;;;;;;;==.#$*=;;;=**==-;;;=&$.+#$%*==;;;;;;=*&%$#.%*=;;;;;;;;;;;;;;=*.#%*->>;;==**=;;==%$..++#%*;;----;;;;;%#.",
+"....++#$&*=;;=%@+...+#$*>>>;;***==;;*&$.$*;;>>-==--;;==;;*%.&->>>>>>;;;;>>>>-==..++@%*=>>>*$#+......%*->>>>>>>>;;;;;--%.#%&*==-;;---=;;;=&$.==->>>;;;;>>;;>>>-&.$&->;;;==;;;==>>>-&.....+@$&>>;;;>-=&$@.%*>;>>>==;;;>>--=&%.#%*=;;;=***=-;;;*&$.++@#$%**=;;--*&%$@@.#$&*=>>>>-=-;;-==*$.$*=;;;;;=****>>-=&#..++#$*--;;;;---*&$#.",
+"..++@##%&*=;;=&#++..+@$%->>;;=**=-;;*&#.%*;;>>-=*=-;;==;;*&.%->>>>>>;;;;>>>>>==...+@$*=>>>*%#+......$&->>>>>>>>;;;;;-=%.@#%&===;;==-=;;;=*$.*=->>;;;;;>>;;>>>-%.$&>>;;;==;;;==>>>-&.....+@$&>>;;;>-=*$@.$*>>>>>==;;;>>-==%$.@$*=;;;=*%*=-;;;*&$..++@@$%*=>;>-*%#@++.@#%&*>>>>=-=;;-==%$.%*=;;;;;=**&*>>-=&$...+@$&--;;;;-==*%#@.",
+".++##$%&**=;;=&$@+...+#%=->;;=====;;&$@.%*;;->==*=-;;--;;=&.%=->>>>>;;;;>>>>===..++@%*=>>>*%#+......$%->>>>>>>>;;;;;-=%.+@@$**=;;--=-;;>=*$.*==>>;;;;;>>;;>>>=$.$&->;;;==;;;==>>>-&.....+@#&>>>;;>-=*%$.%&>>>>>==;;;>-==*$@.#$*=;;;*&%&=-;;;*&$....++@$%*;;--*$#++..+@#&*>>>>-=-;;==*$#.%==;;;;;=*&**>>--&$..++@$&=>;;;;-==%#@+.",
+"++@$&**>>*=>;-=$#@...+@$%*=;;---*=*&%#@.&*;;>--***=;;==;;==.#%&&**==;;;==**&&%$...+@$*=;;;*%#++.....#$**;;;;;;;;;;;>*&$..+@@$&*>;>>=====--$.$%%**-->;;==;;==*%#.$&>>;;;;;;;;;;;;>-&.....+@#%*==;;;;>>&$.$&->;;;==;;;->**%#@.@$*=;;;**%&==;;;=*#....+++#%*>>>-*$#+...++#%&>>>>=-=;;==*$@.%->>>>;;=****->>>&$..++@$&*=;;;>=*%##++.",
+"+@$&*==;>*=;;-=%$@+..++@$&*;;->-**%$#@+.&*;;>>-*&*=;;==;;-=.@##$%&*=;;>=**%$###...+@$*=;;;*&#@......@$&=;;;;;;;;;;;>*&#...+@#%*>>>>=*=**--$.@#$%*=--;;--;;==*$#.$&->;;;>>;;;;>;;>-%..++++@#$*==;;;;>>&$.#&->;;;==;;;>-*&$@+.@$*=;;;*&%&=-;;;=&$......+@#&->>-*$#++..++@$&->>>-=-;;=**#@.$->>>>;;==***->>>&$..+@#%*==;;;>=*%#@+..",
+"@#&*;;;--=*--;>*%#@...+@#$*=-;;;=&$#@++.%*;;>>>**&*>;>>>;--.++@##%&*;;;=*%$#@@+...+@#&*;;;**$@+.....+$%*;;;->==--;>>*%@....+@#%==;;==*&%$$@.+@#$%==-;;==;;-==$@.#%=-;;;==;;;==>-==%.++@@@#$%&*=;;;;;;*$.#%*=;;;-=>>>;;*&$@+.@$*=;;;=*&*=-;;;*&$......++#%==;>*&#@+...+@$&>>>>-=-;;==&#@.#%&**=>>---==-->>&$.+##&**;;;;;;=*&$@+..",
+"#%*=;;;-===--;>*&$#....+@#%==;;;=*$#@+..%*;;>>>****>>>>;;-=..+++##**;;>=*%#@++.....@#&*;;;**$#++....+#&*;;;->==-->>>&$@....++#$*=;;==&%$#@@..+@#%=--;;==;;-==$@.#$==;;;==;;;==-==*$.@##$%%%**==;;;;;>*%.@%*=;;;-->>>;;=*%$@.#$*=;;;=***=-;;;*&$......++@#*=;;*&$#++..+@$&->>>=-=;;=*&#+.@#$%**>>>--*=->>-&$.@$%*==;;;;;;==*$#@+.",
+"#%*=;;;--==--;;=*&$....++#$*=;;;=*%$@@+.$&>;>>>=**=>;>>;;-=...+.+#%*;;;=*&$#++....++#%*;;;=*&$@+....+#$*;;;->===->>-%#@.....+@$&=;;==*%##@+...+#$===;;==;;--=%#.@$*=>;;==;;;=*==*&#.#$%&****===;;;;;>&$.@$*=;;;=->>>;;=*&%#.@$*=;;;====--;;;*&$.......+@#&*;;=*&$@@..+@$&->>>=-=;;==&#+.++##%*->->-==-->-%#.$%*===;;;;;;==*&$#@.",
+"%*>;;;;;;>;;;;;>>=*.....+@#%*>>>;;*&$#@.#%*=;;;>>====;;;;*&....+@#%*;;;>-*%$+++...++#%*;;;>>*%$@++..+#$&>>>;;>>==*&%$@+.....++#$&=->>*&$@++..++@$*=-;>==--;;;&$.+@$%&**==;;;=*%$$#@.$=-->>;;;;;;;;;==&$.+#%*>;;;;--->>>>>&$.@$*=;;;>>>;;;;;;=&$.......++@$&>>>--%$@..+@$&->>;>>>;;=*&#+..++@#%==;;;;;;;=*$#.$=-;;;;;==>>;;;*&$#.",
+"$*;;;;;;;;;;;;;>>==......+##&->>;;=*&$@.@$&*;;;>>===-;;;;*%.....+#%*;;;>>*&$@+.....+@$&>;;>>**%#@+..+@$%->>;;>>==&$#@@+.....+++#%*=>>*&%#@+...+@$*=-;>**=-;;;*%.++@#$%&*=;;;=&$#@@+.%->>>>;;;;;;;;;==&$.+@$&>>;;;--=>>>>>*&.@#*=;;;;>;;>;;;;=&#........++#$>>>>-&%#..++$%->>;>>>;;=**#+..+++#$*=;;;>;;;*&$@.%->;;;;;**>-;;;=*%$.",
+"%*;;>>-==>>>>>>;;=*......++#$%**--;;=*$.+#$%**=>>;;====*&%$....++#%*>>>;>=&$@++....++#$**=;;>-=$@++..+#%*==;;;>*&$#@++........+@#%*---==$@+..++@#*==>>*&**--->%..++@@#%&*;;;*&@@+.+.$==>>>>>=-=====>>&#.+@#%*==>>****=>>>>>.+#&*->-==**==;;>*%#.........+@$*=>>>==$...@#%=--;>>>;;=*&#+....++#$*==->>==&$#+.$==---=**&**===;;=&.",
+"$*;;---==->>>>>;;==.......++#$%*--;;=*$.++##%&*->;;**=*&%#@.....+@$&>>>;>*&$@.......+@#%&*;;>--%#++..+@#&*=;;;>*%#@++.........++@#&==--=$@+...+@#&*=--&$%&=-->&..+.++@#&*;;;*%@++...$*=>>>>>===&*==>-%#..+@$%**--*&&&&-->>-.+#%*---*&&&*=>;>*%#..........+@&*>>>=*$..++#$=--;>>>;;=*%#+....++@#%===>>=*%#@+.$*=-==*&%$%%===;;=*.",
+"$&;;-==&*=-->>>;;**........++##%==;;==$..++@#%&=-;;*&*&##@+.....++#%->>>>*%$++......++@#%*>;>-=%#+...++#%**;;>>%$@++............+@$=====#@+....+@%&*==$#$$===>%.....++#%&;;;*$+.....#*=-->--=**%%**--$#..++@$%&==$$$$%==->-.+@$&===%$$%&*>>>%$@..........+@%*->>=*#...+@$*=->>>>;;=*%@+.....++@#**=--*&#@+..#**===%##@##&*=;;*&.",
+"#$%&&&%%%%&&&***&&$.........++@#%&**=*$...+++#$%&*&%$##@++.......+@$%&&*%$#@++.......++@#%&*===$#++...+@#$&**&&$#++..............+##$%$##++....++@#$$$#@@##%%%#.....++@#%=*=%#+.....@#$%&&&%%$####%$$#@..+++@##$##@@##%%%&$.++@#$%$##@##%%&%$@+...........+#$%&%%$#...++#$%&***=--&$#++......++##$%%%%#@++..@#$$$##@++@@#$%&%%$.",
+"@##$$##@##$$$$$%$##..........++@#$%&**#....+++@#$$$##@++++......+++@#$$$$#@+..........++@#$%==*#@+.....++@#$$$$#++................+@####++......++@@#@@++@@#$#@......++##*&&##+.....@@##$$$$#@@@+@@##@+....++@@@@@+++@##$##..++@@#@@+++@####@@+............@@##$#@+....++@#$&&%&==%#@+........++@@####++....++@#@@+++.++@@##$#@.",
+"+@@@@@++++@@#@@#@@+...........+++@####@......+++@#@@++............++@@@@@+++...........++@@##$##++......++@@#@@++.................++++++++......+.+++++.++++@@+.......++@###@++.....+++@@@@+@++++++++++......++++++.++++@+@..++++++++++++@@@++.............++@@@+++....++++@@#$$$##@++.........+++++++++....+++++++....+++@@@++."};
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa,
0xeb, 0xff, 0x57, 0xfd, 0xff, 0xab, 0xff, 0x7f, 0xff, 0xfd, 0xff, 0xff,
- 0xff, 0xbf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xe9, 0xaa, 0xff, 0x4f, 0xf5,
+ 0xff, 0xbf, 0xfd, 0xff, 0x0b, 0xfe, 0xff, 0xe9, 0xaa, 0xff, 0x4f, 0xf5,
0xf4, 0xc0, 0x57, 0xaf, 0x7e, 0xf5, 0xff, 0xff, 0xff, 0x7f, 0xf4, 0xe9,
- 0xff, 0xff, 0x7f, 0xf1, 0xc1, 0x53, 0x0e, 0xf8, 0xfc, 0x83, 0x6f, 0x0f,
- 0xf8, 0xf0, 0xff, 0xef, 0xff, 0xbf, 0xe0, 0xc1, 0xff, 0x7f, 0xbf, 0xe8,
+ 0x01, 0xfc, 0x7f, 0xf1, 0xc1, 0x53, 0x0e, 0xf8, 0xfc, 0x83, 0x6f, 0x0f,
+ 0xf8, 0xf0, 0xff, 0xef, 0xff, 0xbf, 0xe0, 0xc1, 0x03, 0x7e, 0xbf, 0xe8,
0xe8, 0x01, 0x47, 0x7c, 0x79, 0xc8, 0x57, 0x07, 0x3c, 0xfa, 0xd5, 0x5d,
- 0xff, 0x1f, 0xf8, 0xf5, 0xff, 0x7f, 0x3e, 0xe0, 0xd1, 0x07, 0x9e, 0xf8,
+ 0xff, 0x1f, 0xf8, 0xf5, 0x01, 0x7c, 0x3e, 0xe0, 0xd1, 0x07, 0x9e, 0xf8,
0xf8, 0x80, 0xff, 0x0f, 0x78, 0xe8, 0x93, 0x03, 0x6e, 0x3d, 0xc0, 0xeb,
- 0xff, 0x5f, 0x3f, 0x75, 0xf4, 0x11, 0x0e, 0xfe, 0x7e, 0xa0, 0xff, 0x43,
- 0x38, 0x70, 0xc0, 0x01, 0x9e, 0x0a, 0xe0, 0xff, 0xff, 0x7f, 0x3e, 0xea,
+ 0x01, 0x5c, 0x3f, 0x75, 0xf4, 0x11, 0x0e, 0xfe, 0x7e, 0xa0, 0xff, 0x43,
+ 0x38, 0x70, 0xc0, 0x01, 0x9e, 0x0a, 0xe0, 0xff, 0x03, 0x7e, 0x3e, 0xea,
0xe0, 0x53, 0x3e, 0xfa, 0xf8, 0x81, 0xff, 0x0f, 0x79, 0xe1, 0x84, 0x5f,
- 0x16, 0x58, 0xe4, 0xff, 0xff, 0x1f, 0x3f, 0xf0, 0xd0, 0x01, 0x0f, 0x7e,
+ 0x16, 0x58, 0xe4, 0xff, 0x03, 0x1c, 0x3f, 0xf0, 0xd0, 0x01, 0x0f, 0x7e,
0x7c, 0x82, 0xff, 0x07, 0x38, 0x78, 0xe0, 0x37, 0xae, 0x1e, 0xf0, 0xff,
- 0xff, 0x3f, 0xfc, 0xe0, 0xa9, 0x03, 0x3e, 0xf8, 0xf8, 0x8a, 0xff, 0x17,
- 0xfa, 0x72, 0x85, 0xff, 0xfe, 0x7d, 0xe0, 0xff, 0xff, 0x1f, 0x7f, 0x7d,
+ 0x01, 0x3e, 0xfc, 0xe0, 0xa9, 0x03, 0x3e, 0xf8, 0xf8, 0x8a, 0xff, 0x17,
+ 0xfa, 0x72, 0x85, 0xff, 0xfe, 0x7d, 0xe0, 0xff, 0x03, 0x1c, 0x7f, 0x7d,
0x80, 0xb7, 0x0e, 0xfe, 0xfc, 0xa0, 0xff, 0x2f, 0x7e, 0xff, 0xc0, 0x7f,
- 0xbf, 0x9f, 0xf8, 0xff, 0xff, 0x3f, 0xfc, 0xf1, 0x80, 0xef, 0x5f, 0xfc,
+ 0xbf, 0x9f, 0xf8, 0xff, 0x01, 0x3e, 0xfc, 0xf1, 0x80, 0xef, 0x5f, 0xfc,
0xf9, 0xe2, 0xff, 0xaf, 0xfc, 0xff, 0x8d, 0xff, 0xff, 0x7f, 0xf5, 0xff,
- 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xfe, 0xf4, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0x7f,
+ 0x01, 0x3c, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xfe, 0xf4, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x13, 0x7e, 0xff, 0x7f,
0xeb, 0xff, 0xbf, 0xfd, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff,
/* XPM */
static char * matrix2b_xpm[] = {
-"160 182 16 1",
+"160 182 48 1",
+" c None",
". c #000000",
-"+ c #A7E7A7",
-"@ c #E0F7E0",
-"# c #0F390F",
-"$ c #81DD81",
-"% c #061406",
-"& c #5AD25A",
-"* c #030E03",
-"= c #081E08",
-"- c #0B2A0B",
-"; c #165016",
-"> c #217A21",
-", c #34BB34",
-"' c #1B641B",
-") c #2BA02B",
-"! c #279027",
-".............%--=*....*%=%%%....*-;''#=*..%-;'#=*....%==%.................==%......%;>'#*..*#'>;%......%=-=*...............................................=;;#*",
-"............%#>!'-%..%#;';'#-%.%=>,&&);%.%->&$!;=%.%=;>>#=.....%%%%%....%-;>;=....%#!@&>=..=>&@!#=....%#'!;=%....%*=......................................%;&$'%",
-".*..*..*..**-!+@,;%.%->&&,$);%.%#,++@&>%*-'&@@$);%.=;,$$>-%.*.=;'';-%.*.=;,$)#%.**-!&+)'%..%')@&!-%.*=#>$@!;-%.*.=;;#%.*..*..*..*..*..*..*..*..*..*..*..**->$@>=",
-"...........*#,+@$>=.%#,++$@&>%.-'&++@$,-='&+@@+&>%*-!$++,;%..=;,$+&'%...-!$@&;%..*;&++!#%..%#!++&;*.*#)&+@&,'%..%;&+>-...................................*#,++>=",
-"..*..*.....%;&+@$>=.=;&++$@&>%%#&+@@@+&#->+++$+&>%%#,$++$>-.%#)$+$$'=..%#&++)#%..%;&+$'=....='$+&'%.=;&+@@+$)=..='$@)#%.*..*..*..*..%%%%%*.*..*..*...*...='$+&'%",
-"...*..**...*#&+@$>=.%;&+$&@,;%='&+@@@@&#->@+$&$,'%*#)$+++);%*#,++&&'-%..#,$&'=...='$@,;=....%;)@$'=.%;&+@@@$!=%-;!+@,>#*.*..*..*..%-#;;;;;#**..*...*....%;)$$!#*",
-"........*..*#,+@$'%.*#!,))&'-.%;&+@@@+&#='$+++$&>=*-'&+++&>**#,++$,!;%.*-'>;-*...=>$@)#..*..*#)@$>=.%#!&+@$,'%='&&+@$&)-..........='&&&&&&)-.....*...*..#>++,;%.",
-".*.*........->$@,;=..%-####-*.=',++$@&!-%;!&+@@+,#.-'&@@+,>%=;,+@@&$)-..*==%..*..=>$@)#%....*#)@$>=..-!++$@,>*#!@@@@@@$#.*..%%**..#!@@@@@@$#.*..**.....%;)@+)-*.",
-".....*..*...='$@!#*...******..-!+@@@@+&-='&$$$+@$#*-)&+@@$,-=>$+@@@+&-...%......*=>$@,;%...**;)@$'=.*-!&&)$);*=',&+@$&)-...=#;#%.*=',&&&&,!-..*-#;-%.*.->++&;%..",
-"............%;),>-............->$+@++&>=->+@++@+&#*='!$+$+&-->@+++@$,#......*....%'&+&'=*...='&@&'=..=#;';';=**=;!+@,>#%..%#)&!#*.*=;;;;;;#%..=',&'%..=;)@&!-...",
-".*...*.*.*..%#,&'=.*..........='&+@++!#%->++@+@$)=.%-'&+$+&-->++++@$&#.*.....*...*#,++!-*..*#!+$&;*...*==*%%*...-'$@!#%.*.=>$+,;*...*.*.%%..*%-!$+>-..-!&@);=.*.",
-"..*.........*#&$;=...*..*..*..%;&+@@$>-.%#)&+@$>#*..*#)$$&!=%;&$+$$$&#..*.*......*-!&+,'%..%',+&!-%.............%;&$>-...*#,++,#%............*-!$$'=%.#,++>-....",
-"........*.*..=#;-%............=#,+++$'%..*-'&+>#*...*=#;;;#%*=;'>>>>;%......*.*...%#!@&>%..='&@!#%..*........*...=#;-%*..%#&$&'=*.*.*.*...*...%-;;-%*.#)&,;%....",
-"*..*.*........%%*.*.*.*.*..*..*=;>>>'-=....=;'#=......*=%%*...%%====%.*.*..........=;>'#=..%#'>;=.....*.*..*..*...%%*....*->)'-*...............*%=*...='>'-**...",
-"..%-##-=%.*.%-##=.....=##;#=%...=-#;#=*....%-#-=%.*%-#;;#-%....%=###=**-#;;;;-=*.**-###=*...%=###%%......*.....*.*.....*..............*...*.*.......*...%%==%%..",
-".=#>,&)'-**#'!,&;=..*=;)&&,'#%.=;!&&,'#=..%#>,,;%.%#>&&&&)#%..=#>,&,'%->,&&&&,;*.=;>,&)'#%.%#'&,)'#**.*....*........*..........*.*.*...*......*.*......=#'>>;-%.",
-"*#)$+@+,'%='$+++!-*.=;&++@+&!==;&++@+&!=..->$++>-*=>&@@@+$'%.=#)++++!=#&+@@+++>%=;&$+@+&!=*->$+++$'%.........*.*.*.....*.*.*%=#-=*..........%-#-=%..*.%#!$++&>-*",
-"='$+@+@$,-='+@@@)#*.=>++@@@+&#='$+@@@+&#.*#,+@@!#*-!$@@@+$'**->&@@++>=#&+@+@@@!%=>++@@@+&#=;)@@@@@!-...=--=%......=#-=.....-#'!)'=.%-------.-')!'#=*..=',@@@+&'%",
-"-!@+&,$@$#%#>)+@!#%.='$$&,$@$#=;&&,&+@$#.='$++@)#*-)$@$$&)'%=;)@+$&);%=;>!)$++>%->@+$&$@$#->&@&&+@,#*.='!);=.....='!);=..%#')&+@,-%#>)))!!'%#&@+&)'-%.=>&@&$+@!=",
-"#!@+,)&@$#.%#!$@)#*.*-'>!,+@$#.-;>)&@+&#%#)++$@)#*#!&@@@+$>%-!&@++$,;%.=-#>$+&'%->++$&++&#-)$@,,+@,#.%-)+@>#*.*.%#)+@>#.-;>&@@+,'==>++++++$-=')+@+&>;%=',&,&+@!-",
-"#!@+,!&@$#*.=>$@)#%..%-')&@$,-.%-!$+@$,#='$+$$@,;%=',+$+@@!--)$@@@@+>-.*%#!+$!#*->&+@+@$,#->&@&&+@,#.%-!$+>-*....#)++>-.#,$++$,'-%#!+@@@@@&#.-',$+++,-%-')&+++>%",
-"#!@+,!&@$#..=>$@)#...*#!$@$);=.%#'&$++&##!@@++@&)==#>)),+@,--)$@$$+@,#..%;&+$'=.->+++$+@&#=;)++@@@,#..=;!!;=..*..=;!!;%.'$@@$&>#=.#)++++++&#.*->,+@@&#.*#!@+&);%",
-"#!@+,!&@$#*.->$@);%**->&+@&>-*%#>>!,+@$##!@@@+@+,-=;!>')+@,#-)$@&&+@,#..=>$+&;%.-!@+$&+@$#*->$++@@,-..%-#;-%.....%-#;-%.;&+++$)'-%#)++++++&#%-;)$+++&#.*#!@$);=.",
-"->@+&,&@$#.-;!+@,>#*=;,+@$,>#%='&&),$@$#-!+@@@@+&-#)&,!,+@,#-!&@&&+@,-**#>++&#%.-!@+$&$@$#*=',&$+@!-*.%#>>#%..*..=;>'#%.-;!&@@$,'=-!+@++++&#=')$@@&!;%.*->+&'-..",
-"='&+++@$)-=;,$+@+&!=#>@@@++&!=#!@+++@+&-=;)&++@+&##)+@$+@@!==;)@@+@@)-..#!@$!-*.->++++@+&-*;!$++++>=.*-!$@>=....%#)+@>=..%#>)$+@,-=;!!)))!>=#&@+&,>#=..%->+&;%..",
-"*#>&$+$!;%='$+@@+$,-#!+@@@+$,-='&+@++)'=.=;)$+@+&--',+++$);%.-'&+++&>%.*->+&'=..%#!$+++)'%=',++$&!;%.*-!++>-%...='$+$>-....-;>!)'=.=-####-=*->)!>;-%....=>$&#%..",
-".*#>&&,;=.%#,&$$&&>%=>&$&$&&>%%#>&&&&'-*.*=',&&&>%*-'&&&);=..*#>&&&>#%..=;,!#**..=;)&&&'-*%#!&&&>#=..*='&&;=.*..-!$$,#%*....%-#--.....***...*#;#-%..*...%;)>-...",
-"..*=#;#%**.=#;;;;;-*%-#;';;#-*.%-#;;#-*..**=#;;#-*.%=#;##=.*..*-#;#=%*.**=#-%.....%-;;#=*..%-;;#-%.*..%%##=*...%=')!;=...*....*%.............***........*=--%*..",
-"...%%%*.....%===%....%=-===*.....%====%.%==-==%....%=-=-==%.*%==-=-=%....%===%%%*====%===%..===--=%...*=-=-==..==-%====..%====*..*.%%%.%%==%.%=%*%==%%...%%=%...",
-"*%=;'';=..*=;>>'#**.=;>>!>'#=..%-;>>>';%#'>!>>;-*.=;>>!>>'#*=;>!>!>>;%.%-;>>>';%=;>>';'>'-%-;>>!>'#%.*-;>>>>;%=;>>';>>;%=;>>>'#%..=;';#-#''-=;';##'>;%.%-;>>;-%.",
-".-',$$&;=.%#,$+$>#**#,$+++&!#%%#>,$+$&,->&+++$,>#%#,$++++$>%#,$++++$&-%#>,$+$&,-;,$$&,$+&;=;&$+++&!%.=;&++++,-#,++&,+$,-#)+++&'=..;,+&>'!$$;#,$&>)&$,-%#>,$$,>#*",
-"%;,$@@$!#*%;&+@@&'=.;&@@@@++>=#)&+++++$;)+@@+@++>-;&@@@@@@)-;&@@@@@@+;#)&+@+@+$;;&@@$&@@+>=;&++@+$)-.='$+@@@$#'&@@$&@@$#;&+@@$>=.*'&@+&)$@+>'$@+,&+@&##)&+@+++>-",
-"=>++$$@,>%%#,+@@+>-.;&+@$$+@,-'$@+&&$++;!+@+&$+@&##&+@$$+@,#;&+@$$+++;'$@+&&+++;;,@+$&+@+;%#!&+@$,'%.%#)&+++)-;,@+++@$!=#!&@$,;%..'&@@$&@@+'>$@@&$+@&#'$@+$&+@&#",
-"#!@++@@$)=*#!$@@+);*#)$@&$+@,#>$@&!>)$$#>$@$!!$@$;#)$@&&++)-#)$@&&$$$#>$@&!!&$$##)@+$&+@$;.%#!+@)'-%..=#!$+&>%#)@++@+!;%%;)@&>-%..',@@+&@@+;'$@@+$+@,#>$@&!!$@$;",
-"#!@@@@@$)-*#)++$@&>%#)$@+@@@,#>+@,'-#;;='$@&>'&++;#)$@$++,'%#)$@$+$!'=>+@,>!,&)##!@@++@@$#..=>$@)#*.%%=->$+&'*#!@@@@,>-.*#)@,'=%..;,@@+$@@+;'$@+@++@,#>+@)''&++;",
-"#!@@@@@$,-='&++&@$,-#)$@@@@@&;>+@);==-=%'$@&''&$+;#)$@@@+!;%#)$@@@$>-*>+@,>&++&##!@@@@@@$;..=>$@)#*.-;';>$+&'*#!@@@@&>-**#)@,>##-*;,@@@@+@+;'$@$@++@,#>+@);'&$+;",
-"#!@++@@+&-#!+@@@@+&#-)$@$&$++;>+@,'#;';='$@&>>&$+;#)$@$++&)-#)$@$+$'%.>+@&!$@@$;#)@+$&$@$#..=>$@);%.'&+!!$+&;*#)@+++@,'%*#)@&!)&'%;,@++@&@+;'$@$++@@,#>+@,>>&++;",
-"#!@++$@$)-;,@+$$+@+;#,$@&,$++;'$@$!>&$$#>$@$))$@&##,$@&$$$$;#,$@&&)#**'$@$,&$++;;)@+&,$@$;*=;!+@,>-%>+@&,++&;*#)@+$&@$,#=',@&,$@,-;,@+&,&@+''$@$&+@@,#'$@$))+@&;",
-"='$++$+&>='&@@$$+@+>;&+@$$++$;;&++$$++$#!+@+$$+@,-'&+@$$+++;;&+@$&!-..;&++$$++$#;&@+$&+@+'%#,$+@$&>%'$@$$+$)#*'&@+$&++$'#,$@$$+@,-'&@+,)&@+'>$@+,$@@,#;&++$$++,#",
-"%;,$@@@,'%;&++$&++$';&++++++!--')$+++$!-!$++++$$'%'&++++++$#;&+++&>=*.-')$+++$!-;&++$,++$'%;&++++$!=#)$+++,;=.;&++&),+$'#&++++++!=;&+$,!$+$';&++),$+!--')$++$&'%",
-".=;>,&)'#*#>)!>'!)!#-'))))!>#%%-#'!)>'#%#>)),)>;-*->),,,)!>=->),)>#%*.%-#>))!'#%#>)!>'!)!#*#'!,,,!;%=#>),!;=*.#>))>#'>>#->),,),!;%#>)!';>!>#->)!;;>!;%%=#'!!>;-*",
-"..%-###=*.*-##---#-%*=###---%...%=-#-=%.%-###-=%*.*=-####-=*.=###=%.....%=---=*.%=##-----%.%=-###-=..%=-#-=...%=-#-%%--**=#####-%.%---===--%%=--=%--%*..%=--=%..",
-".%=%==%%.....%%%%*...%=%=%%...*.%%%=%%%..*=%===%%..%=%*%%=%..%%%**%%%%.%%%%*%=%*.%==%%%%=%.%%=%%%%%%..%%===%%...%-##=*..%-#-%.......%-##-*...*.%--=%............",
-"-;'>>>';=*.=#;'>;#%.-;'>>>;#%..=#''>''#%=#'>>>>>;%=;'';;'';%-;'';#;''=-;'';#;''=-;''';'''=-;''';'''=%-;'>>>>;%.*-!,&'-%.-!&>#%..*..%->,,!-%...%#!);=...*....*...",
-";&++++$&'%%;!$++$)#%;&++++$>#%%;!$+++$>=->$+++++&#;&++)&$+&#;&+$,>$+$';&+$,!$+$';&++&,++$';&++&,++$'='$$++++&#.=;&++);%.#,$$>=.....=;,++&;%*.*->$+);%....*....*.",
-"'$@@@@++,##!&+@@+$!-'$@@@@+&!-#!&@@@@@,-#,@@@@@@$;>$@@&$@@+#'+@+&)+@+>'$@@$&+@+>'$@@+&@@+>'$@@+&@@+>->+@@@@@+;*=>$@+)#%.-)&+!;%..*.%;,@@$>%..%#,+@&'=*.*........",
-";,$@$&+@+;'$@+&&+@&#',@+$$+@&#;&+@$$+@,-;,@++@$@+;>$@$))+@&#'&@+,!&@+''&@+$+$@+';,@+$&+@$;;,@+$&+@$;->++$$+@$;.=>$@,'=%.%;)@$>-%...%-',@$>=*.='$+@+!#*..*.*.*...",
-"#)$@&)&++;>+@&!!$@+;#)@+&&$@$#;&@+&&$+)-#)@++@&@+;'$@&>!$@,##)@+,!&@$;',@++@$@+;->&+@+@$)#->&++$@$)-='$$&$@$)-.=>$@);%...->$+&'%....*;)@$>=.*-!++&@);*..........",
-"#)$@&,$++;>+@,''&++;#!@+$$@+&##,$@++$$>=->&&+@&$)#'$@&>>$@,##>++&)$@&#;,@++@@@+;*#!$@@+,'=%#!$@+@,'%%#!,$+@,'%.=>$@)#*...%;,@+!-*....#)@$>=.%-!&&,$);*....*.*...",
-"#)$@++@@&#>+@,>>&++;#!@@@@@&!-#>,$+@@+!-%-'!+@,>#%'$@&>>$@,#='&+$&@$,-;,@@++@@+;*->&@@+);%.%;,+@&>-..=',+@$!;%.=>$@)#..*..#>++&#%.*.*#)@$>=..=#'';>;-%.*....*...",
-"#)$@++++!->$@$&&+@$;#)@@++@&!-;)&&$+@@)-.%#>+@,'=.'$@&!!+@,#%#,++&@&>%#,@@+$@@+;=;)$+++&>=.%#!+@,'%.%->&+@&&)-.%>$@)#%....*;)+$>#*..%#)@$>=...%====%*.%=#-#-##-%",
-";&+@$$,>#%;&+@++@@,#;,@+$&@+&#>$@$$$+@,#.%;)+@&>-.;&@+&&+@,-.->$++@!;*#!@@+$@@$;#)+@+&@+&;.*;)+@&>-.='&+@+$@$;.=>$@,'=..*.*='$+&'%..=',@$>%*.*........#>))))))>-",
-";&@@+$!#=.-!&@@@+$&#;&@@$,+@+;>+@+++@@)-*=>&+@$!;*#)$@++@@!-.=;&@@+!-*#!@@+&@@$#'&@@+&@@+>%=>&@@$!;%=>+@@++@+;.=>$@$!#%....%#,++>=**#!$@$>%....*....*.>&$+$$++&#",
-";&@++$>-..->&@@@@@&#;&@@&!,@$>'&++@@+&>=.=>&@@+);*=;)+@@+&'%.*-)+@&'=.='$$&)$$,-;&@@$&@@$>*-!$@@@);*='$+@@@@&;.%'$@+,;%.....->$@)-.=',+@$'=......*....)+@@@@@@+;",
-"#'!!!>#%*.%',+++++,--'!!';'>>-#'>!)!!'#%.%#>!)!'=**=;>!)>'-%..=;>>'-*.%#'>';'>;%#'!!>>>!>#.%#>!)!;-*%#'!)))!>=.%;&++,'=*....%;&$>=.=;,+@&;%*........*.>&$$$$$$&#",
-"%=----*...%-;!>!)!;%%=--=%%--**=-#---%%...*=---=*...%----=...*.%--%*...*%=%===%*%=-----#-%.**----=*..%=-###-=%..=;>>;-%...*..-'>#%.*-;>!'-%..*.*.*....-#'''''';=",
-"...%%%*........*....*-#-%.............*.*..**---%...*..........%=-##-%..........%-#-%........=--=.......==-%..%-#-%......%%-#-=.....................*...*.......",
-"*.%-;'#%.*.*.*..*...#>!>#=......*.*.*......%#>!>#%.......*.*.*%#'!))>=.*..*.....#>!>#=......=;>!;=.*...=;!!;=*#>!>#%....%=;>)!;=.*...............*........*.....",
-"..='&$>-*....***.*.*;$@+!-%.*.....**%......=>$@+>%..*%.%*....*->$+@@$#....%%%%..;$@+>-%.*.**-)+@>-*..**#>@+)-*;$@+>-%*...=!+@@!-*..%.%%.%.*.*%%**%..*....*.%.*..",
-"..-!+@,;%..%-#;;-%..;,@+,'#-%.*%-#;;;#=%*%-;>&@@!=..=#;;#-%..=;,+@$&,-.%-#;;;;-%;,@+,'#=*..%#,+@!#...*=')@+,#.;,$@!'##%..%;,+@!#%.-#;;;;;#%.*-#####=*.*%-#;;#=%.",
-"..=>$+$'=.*#>,&&!;=.#)@+$&,>;%=#>,&&&,;%=#>,&$@@!-%-')&&&>;%%#,$@@+$)-=#>,&&&&!-#)@++&,'#%.='&++!#*..-',+++,#%#,$@,,,)#%..-!+@)#..')$&&&$);*#!$,,$,'#%=#>,&&)'#*",
-"*.*#>&$'=*='$+@@+!#*#!@@@@+$,-#,$+@@@+)-#,$+@@@@!-='$+@@@+,-='$+@@@+,-#,$+@@@@$##!@@@@+&!=%-!$@@!#%.%#)$@@@$'*-)$@++++'%*.=>$@)#%.)++@@@@+,-'$@++@+&!-#,$+@@+$'%",
-"...%-;,;%.=>$@@@@&'%#!@@@+@@$#'$@@++@@,#'$@@+@@@!-#)+@++@@$#=;$+@@+$)-'&@@+@@@$##!@@@+@+&#.->$@@)#..*#!$++@$'%#)$@+++$;*..=>$@)#%.)+@@@@@+&#'$@@@+@+&#'&@@++@+)-",
-"*...*=-=..=>$+++@$)=#!@@$,$@+;>+@&),$+)->+@&,$@@!-;,@++$+@+;.->&++,>#%>+@&,$@@,##!@@$&$@+#.%#!+@)#%..=#'!&+$>%#)$@@+&>#%..=>$@)#..>$@+++++&#;!@@$,$@$#>+@&,&+@,#",
-"..*.....*.#!@@@@@$)-#!@+&)&@+;>+@,>>)&>=>+@&)&+@!-;,@@@@@@+;.='&++!;=.>+@&,&+@!-#!@+,)$@$#.%->$@);%...*=#)+$>%#)$@@+,'=*..=>$@);%.>$@$++++&##)@+,)$@$#>+@,!)+@,#",
-"....*.....#,@+$$@$,-#)@@$,$@+;>+@$)!,&)->+@$,$@@)#;,@@+$++$;.-'&++)'-%;&+@@@@@!-#)@+,)&@$;.=;!+@,>-%..*=#!+$'%#,$@++$!;**%;!+@,>-*>$@$++++&;;)@+,)$@$;>+@$)&+@,-",
-"........*.#,@+$$@+&#;&@@+$+@$;'$@+$$+$&#'$@+$+@@&##)@@++++$#%;&+++$&>%->,$$++@!-;&@+$&$@+'%;,$+@$&>%.%-;>,+$'%;&+@$++$)-*#,$+@$&>%!+@++++@$;;,@+$&+@+''$@+$+@@!=",
-"*.*..*....-!++++++&#;&+++++$)-#)$+++++&-#)$+++++&#='&$++++&#=;$++++$)=%;)$++++>*;&++$,++$'=;&++++$)%*-!&$+@&;%;&+$,$++&#%;&++++$)=)$++$+$+$';&++&,++$'#)$+++$&'%",
-"........*.=#!,,,,,>=->,,,,,'#%=#>),,,!;%=#>),,,,>=%-;!,,,!'=%#!,&&,!;%=',@@@$!;%->,,!>,,!#*#>),,,!;%*#,+@@+!#*-!,!'!,,>=%#!),,,!;%;),)),),)##>,,)>,,)#=#>),,!;-*",
-"..*..*.....%-#####-*%-#####=*..%=####-=*.%=#####-*..=-####=%.=-#;;##=.%#!&$$);=.=-;#--###%.=-####-=**->&$$,;%**-##-###-*.*-#;###=.=########%%-######-%.%=###-%*.",
-"........*.....*.*...........*..........*.*%*......................................................................%%%*.....%%%**....%%%*..............*.........",
-"*.*..*.............*...*.......*.........*=#-%....*......*...*..*...*.........*..........*.......................=#''#%*...='>#*...%#''#=................*......",
-"..%..%..*.*....%........%%..*....*.*....%->)!#%*....*.*........%......*.*.*.....*.*%.*%....*.%.*.*.*.*%.%.*.*.*.%;!,,;%...%#)&'-*..%;),!;=*.*.*.*.*...*.....*.*.",
-"%-#;;##-*..%-#;;##-**%-##-##-%..%-#;##=*%;,++>;-%.%-#-==-#=%%-##--#;#%*-##-=###%.=##--##-*%-##-=##-%*=#;;;;-%...->++,#%...='$@!#%..*#,++>-...............*......",
-"#!,,,,)>;%=;>),,,,!-%#!))),)>-*=;!,,))>%->$++&)'#*#!)!''))>=#!,,)!,,)##!,)>'!,)#='),)!,,!-#!,)>'!,)#=>),,,)!;%.%#!@$>-%...=>$@)#....->$@!#%...%%=%%%%.*...*.*...",
-"'+@@@@@$!-#)&@@@@@$#='+@++@@&#*#!+@@@+&-#)@@@@@,;*'$@+)!@+$#'$@@+$@@+>'$@@$,+@+>#!@@+&@@+#'+@@&)+@+>#&+@@@@+'%.*;)@$>=..*.=>$@)#%*..=>+@);..%-;''''';%..........",
-";&@@@+@@$#'++@++@@&#='&+@@++&#='$@++@@$##!+@++$!#*;&@+,)+@$#;&@@$&+@+''+@+++$@+'->$@+$@+&#;&@@+,+@+';&@++@+&'%.='&@$>=....=>$@)#*...=>$@&'=.='$$+$&$&#*.*..*....",
-";)@@$,$@+;>+@$&+@@)#*#!++$,)>-%'$+@@+$,-=>$++)>;=.#)@+,!$@$##!$++&@+&#;)@++@+@+;%;)$+@+,>%#!$@+&@+&##)$$@@$!#%.=>+@$>=*...=>$@)#..*.=>$@+>=.#!@@@@+@&#.......*..",
-"#!@@$&$@$;>+@$&$@@!-.->++&>;-%='&+@@+$&#='&+$!';-%#!@+,)&@$;=;&+$&@&!-#!@@@@+@$#*->&@@+);*%;,++$@&>=->&+@+&!#%.%'&@$>%..*.=>$@!#%...=>$@&'=.-!+$+++$,-...*.*....",
-"#!@@@+@+&#;&+@+@@@!-%;)++&)'-*='$+++@@$#%;&++&&,>=#!@+$&+@$;*#>$++@);*-!+@@+@@&#%;,++++&>=.%>$@@+);*#)$@+$$$'%.*#)@+>=....=>$@)#%...=>$@)#%.=#!!!!)>;%*.....*...",
-"#)@@++$,>%-',$++@@)-='&+@$$!;*->@@+++@$;*#)+++@+,-->+@+$@@+'.=;&@@+>-.='&++&@$,-->$@+$@+&#%='&@@&'-*;&+@++@@>%.*#)@$>-....='$@!#%..%->$@!#%..%------%........*..",
-";,@+$)>;-**-;>)$+@)#->@@@@@);*=>$++@@$,#*='&+@+&>%%;!$@@+@+>.*->$@,;%.*#,$$,+,>%->@@$&@@$#='$+@@!#*.#&+@@@@+>%.*=!@+!#%.*.%;&+>=%..*#!+@!-*....*.%....*.*.*.....",
-";$@@+&;=....='&+@@$#%;>))!!;-.%#>>!!!>;%.*=;>!>'#%.=#>!!!!>-..%#>>;=%.*=#'';';-%=;>!>>!!>==>++++>-%.=;!)))!>#%.*=;&&&'%...*-'>#%...%'&$,'=.*.................*..",
-"#!&&,>-*....*->,&&!-*=-###-=*..%=--##=%..**%---%*...%=-###-%...%=-%*....*=%%=%*.*%-#---#=**#>!!>-*..*=-###-=%...*-;';-%....*==%..*.%-;';-*...*......*...........",
-".......*.*..............=-=%.....%%%=*...........*.%=%%*==%.*...*%..*...*=-##-%*.............%%%*.......%%*..........*.*......*..........*....%%%%%...*.*.%.*.*.",
-".......................%;>'#%*..=#'';#%*..%.....%.*#'>;;'';%..%%##-*..**-'!))!'%...%%==%**.%=#;;#-%...%-;;#=%.*..........*.................*.%=#''#=%...%-##-%..",
-".*.*.....*.*.*.*.*.*.*=;!@$>#*.=#!&&&>#%.=------=*->$$&)&&)#..%#)$'-..*='&+@@+&-*%-;';';-.%#')&&)'-%.%->,&);=...*..*.......*..*.*.*.*.......%#>,$&)>#%.=#!))>;=.",
-"......*......*%%%....%#>&@+,>%%->+@@@,'%=#)!>>!)>=#)@@+&@@$;..='$@!#%.%;,+@++@$#.%;!&>&&#*-'&+@@+$'=.=;&++@!-....%%%%%%*.%==---=*......*.*..-'&+@@+$'%.='+@@+!-.",
-"...*........%=;;#%..%#!&+@@$,-*;,++$$);*=>+++++$,--!+@+&@+&#..=>$@)#..->&+@+$$&-.%#>)>)!#.#)+@@@@+)-.->$++@!#%..-;;;;;#%%#'>>>>>;%..*.%***..#)+@@@@+)-.='&$$&>-*",
-"*......*.*..%#,$>=..*;&@+$+$,-='&+$,!;-.#>+@@+@@&#%',++$@&!-*.=>$@!#*.#)@@@@+&,-..=###;#=.'$@@@@@+$#%#,+++@,;*%-'&+&&+,-->++++++$#.%-#;;;#-%'$+@@@@++#.%-'!!'#%.",
-"...*........=;,&)#..%'$@$&&&!=->$++&!#%.#!@@+$@@&#*#!$@+@,'%..%'$+!#*.#,@@+@@$&#...%%*%*..>+@@+++++;*#,+++@,'%->,++++@&#-!++@@@@+;%#!,$&&&!->++@@@+++;..%=--%%..",
-"*....*...*..='&$)#%.%;$@$&&,>=-!+@@@&;=.#!@+$&+@$#*->$@@+,'%..%'&+!#..#!+@@+@@+;*.......*.>+@@+++++;%#)+@@@$>%;&+@$+@+!-=;)&&&$@+;%;&+@@++&=>++@@@+++;.....%....",
-"............=>$+&;%.%;&+@$+$!=->$+@$,'-*-!@@+$@@&#*-!$@@+,'%..%'$@!#..=',+@@+@+;..........'&@@@@@@&#*#)+@@@&>%;$@++@+&>=.=#;;')@+;%#)&&&&&!='&@@@+@@&#..........",
-".*.*...*.*.*#!++&'%..#>&@@@$>%->$@+&&,!-->+@@@@+&#*-!&+@$,'%*.%>$@!#*.=;)&$+@@+#..*.*.*...#!+@@@@+!-*->&$$&!;*#&$@$+@@!-..**%-'&,#.%#;''''#%#!+@@@@+!-*.*.*..*..",
-"...........%#!@@$'=..%#>,@+);%#)@@@@@@$#%',&,,,&!=*#!+@@@&>*..%'$@!#%.->+++$@&!=........*.=;,$@@$,'%.%-;>>'#=.-')++$+@&#.....*-;#%*.%====%%.=;,$@@$,;%.....*....",
-"....*.*....*#!@@$'=*..%#!+&'=.-!++++++&#.-;';;;'#%*-!$+++,'%..%;&+>-..=>+++++!#%*.........*-')$$,'-*..*==-=%...=;,&&&+)-*......%%...........*-')$$,'-%..........",
-"*.......*..*->$+&;%....=#>'-*.=;!,,,,)'=.%==**%=%**=;>,,)'#%..%->,;=..%#)&&,!;=...*.*...*..%=#;;#=*...........*%=#;;;;#%..*.............*....*=#;;#=*..*..*.*...",
-"..*.........%-'';=.*....%==%...=-####-=%............%-##-=*....%--=.*..%#;;;-%...............*%%%...*......*.....******......*...*.*.*....*....*%%*..........*..",
-"..%-##-*.*...........*%-##-*....%###-%........%.............**=#;;;;#%........*.*...*...*....=--=%....*%%%..............-##-%.....-##=......-;;#-*...*..*.%*....",
-"*%#>,)'-%....%==%*...*#>,,>#%*.%#>,,>#%...*%-#-**.*.........*-'),&&,!=...............*.....%=;!);=...*-#;##%*.*.*.......'&$>-%*.%.)$,'=*%%%%>&&,>-%%=*...=##-%..",
-"*#>+$+&;=.*.%-'>;%.*.='$$+&>=..='$$+&>=*..=#!)>-....*.*.*...->$$++++&#*.*.*.*...*.*.....*..%;)$+>-*.%=;,$&!#%.....*.*...!$+,;=%--%&+$!--;';%,++$,'#;'-...#)&;=..",
-"=',@$++)-%.*='$+!#=..='$$+$!-%.='$+@+!#%..->$+!-%.%---==---.#)@++@@+$#...............*.....*;)+@!#..=;,+$++!-%.%%%**%.*.)+@$'-;>)=&@+,;')&,=&$++$>!&$;*.%#,$>-..",
-"=>&@&+$,#**#')+@,!;%.='&$+$>-%.='&+@+)#%.%#!+&'=..#>)!'')!'=;,@++@@$,-...%---.*...*.....*..*->+@)#%.->&@$++,#*=#;;;;;-*.>$@$>',++#)@+,>,+$)-!$@+&)$$&#..%',$>-..",
-"*;!+$++>-*=>$$+@++,-.='&@+&>-..=>$+++,#*..='!'#%..;$@+)!@+$##,@+@@@$)-..-;!);%.......*.....*#!+@,;%.=>&@&++,#*#)&,,$,>#*>$@$),$+&#)@+$,$+&!-&$+++$+$!-.%#!+@!#..",
-".-;)&,'#*.-!@@@@@@$#.=>@++$!-%.->@$++)#%..%%-=*...;&@+,)+@$##>+@@@@$)-.%-!+@>-%.*.*.....*...#)+@&'=.=',@$++!-.;$@@$++&'=,+@+$+++,#$@@++@@+,#&@@++@+$>%%#>&@@!#%.",
-".*%#''-%..%',&+@$&!-.%'&$$,'=..=;&&$,'%%....*.....;)@+,)$@$#=;)&+@@&)-.*-)+@>#......%%%....*#)$$&'-.=;)+++&>#*-)$@+++@,#)$+++@@+,#$+@@@@++&#!++++@+$>%='$++$>#%.",
-"...*=%*..*%-'!$@,>#%.%-'>>;-...%-;'';=%...*...*...#!@+$&+@$;.=;!+@@$)-..=;!);=.....-;;#%*..%-;>>'#%.=>&@@@$,#%->&@@++@&#;!,$@+@@,#>&$+$$++&#;!&+@+@+>=-!+@$,,>#*",
-".*........*=>,$+&!;%..*====.*...*===%...........*.#!@@+$@@+;.*#>+@@$)-...%--=..*.*%;&+>#%....==-%%..=;)+++$!-.#)$@+++@,##!&@++@@,#>$+$)&@+,-#!$@++@+!--!@+$&+,>%",
-"....*.*...='&$$$$&>-..................*...*.*.....#!@@@@@@+'%=>,+@@+$#*.....*....%-)+@&;%........*..*=#'>>;#=.;&@@$++&>=#&++++@@$#,@$,)++$,-'$++++@+,-->+@+$@&>%",
-".*......*.=>@@@@@@+#*.....*...*...............*...#!@+&)!!>-*#,+@@@@$;...........*#,+@$'%..*.........*%===%*..#)$),&,>#*#)$&&$+@$#)$,>)+++,#'$$&&$@+,-%;)+@@@,;%",
-"..........%;>))))!>%..*.....*...*.*..*.*..........->+$!#%%%.*->&$$$$&#.*....*....%#)++,;%....*...*............=#;;;;#-%.='>''>&$,-'';;>&&&)=#>'''!$&>%.=;>!!!;=*",
-"..*.*.*.*.*%-#####=%....*.................*.*...*.%;)>#%.....%-;'>>'#%...*....*...%',&'-.*.........*.......*.*.**%%%%...*====-#;#*===%-;;;#%%==%=#;;-*..*-##-=*.",
-".%-;#=*......%-#;-*.*.%-;;#%.*..%=##-%.*.....%......%#''#%*...%=---==%.%%-####-%.%-;;=*....*.%=;;-%..*%-;;-*...%=####=*..*-;;=*.......%#;#=...%#'>;=.*.*=#----%.",
-".='$,;=**...*->)$;=..%->&+'-...-#!)!!#%..%--#--=...*-!$$!-%..*-'!!>>'=%=;!&,&)>=*=;&)>-%....%-'&$'=..%#>+&>-%.*-'&!))'-..=',,'-**....=#>$!#%.*->&+);%.*->)!>,>#%",
-".=>&$&;%..*%-'&$&;%..='$++,#%.%#)++++>-.%-'))>$#=*.=;,$$,#%..='&&$$&$#-!,++++++-%#>&@$!;-*%-'!++&>-%%#!$+@$>#.=',+&$$,;%*-'&$&'#%.*%=;)&$!#%.='&+++>#*=;,$$&$&>=",
-"*#!&++>-..*-',++)#%.*#!$++$;=.='&++++>-%*#)+$&&'%.%#!&++);%..->@@@@@@;;$++$$+++;#)$$++$$'%#)&$++$&>%#)$++++$>=;,$++++$>=*#)&++&!;%*->)$+$,'%*;,$+$+&>%='&++$+$,-",
-"=;&$++);%.%;,$++);%.='&+++&'=.='$+++&'=.='&$+$&'=.=;&$++,;%.%-!+@@$&@;'$@$>!&$$;'+@@@@@@,-;+@@@@@@,-;$@@@@@@,-'$@@@@@@,-='$+@@+$)=%;$+@@+$)=='$+@+@+,-='$+@@@$)-",
-"*;$+@@$>=.%;$+@@$>-.=;$+@@$>-.='$+@@$>=.=;$+@@$>=.=;$+@@$>=.*#!@@@++&#>+@,'#>!)=#,$@&&+@)--,$@&&+@)-#,$@&&+@)-;,$@&&+@,-*#)&+@$,>=%#)&+@$,>=%#)&+@$,>=*-')+@&!;%",
-"*->$+@+!#.%->$+@+!#*%->$+@+!#.%=>$+@+!#.%#!$+@+!#%*->$+@+!#.=',@@@@@,#>+@);=-##%#)$@&$++>=#)$@&$++>-#)$@&$+$>=#)$@&$+$>=.=#!+@,'-..=;!+@,'-%.=#!+@,'-*.%->$@);=.",
-"%#)++$@,'%*#!++$@,'%*#)$+$@,'%%#)++$@,'%*#,++$@,'%%#)++$@,'%#)$@@@@+,->+@,'#;;#%#)$@+@+);%#)$@+@+);*#)$@+@+);%#)$@+@+);*.*=>+@,#%...->$@);%...=>$@);%...=>$@)#*.",
-"='$++$@$,-='$++$@$,-='$++$@$,-='$++$@+,-%'$++$@$,-='$++$@+,-;&+@@@+$!#>$@+!),&,-#)$@+@+,>=#)$@+@+,>=#)$@+@+,>=#)$@+@+)>=.%->$@);=*.%->+@);%*.%->$@);%*..->$@);%.",
-"#)@@@@@@$;#)@@@@@@$;#)@@@@@@$;#)@@@@@@$;#)@@@@@@$;#)@@@@@@$;>+@$++$&+;;&+@@@@@&#;,$@&$+$+#;,$@&$$$+#;,$@&$$$+#;,$@&$$$+#.-')+@&>#*.-')+@&>#*.-')+@&>;*%-')+@&>#%",
-"'&@@+$+@+''&@@+$+@+''&@@+$+@+''&@@+$+@+''&@@+$+@+''&@@+$+@+',+@+@@@@@;-!&+@@++)-'$@@@@@@+;'$@@@@@@+;'$@@@@@@+;'$@@@@@@+;=;&+@@@$)=%;&+@@@$)=%;&+@@@$)=%;&+@@@$)=",
-"'$@@+&@@+>'$@@+&@@+>'$@@+&@@+>'$@@+&@@+>'$@@+&@@@>'$@@+&@@+>)++$+++@+;*=>&@@&'-*;&+@++++$#'&+@++++$#'&+@++++$#;&+@++++$#%;&++++$!-%;&++++$)-=;&++++$)=%;&++++$!-",
-";,$$&,$$&;;,$$&,$$&;;,$$&,&$&;;,$$&,&$&;;,$$&,$$&;;,$$&,&$&;;),,,&&&,-.%'$@$>-*.->,&&&&,>=->,&&&&,>=->,&&&&,>-->,&&&,,>=%#>,&&,)'%%#>,,,,)'%%#>,,&,)'%%#>,&&,)'%",
-"=#'';;'';==#'';;'';==#'';;'';=%#'';;'';-=#'';;'';==#'';;'';==-#######%.*-'>'#%..*-######-*%=######-*%=######-**=######-%.%-####-=%.%-####-=*.%-####-=..%--###-=*",
-".%*%%%%.....=#;;##=..*-;;-%..*...*-##=....%#';#%....=#;;##=*....***..*.............*%=--%..*-;;-%......%-##=*...%#''#%......%**.......=#;-%..*=%%........-##=*..",
-"-;'''';#%.%=;,$&&,#%.%;&&!-%....*->,,;%..%->$&!-%..=;,$&&,#%.%=#-##=*....*....*..%-;''!>#%.%;&&!-%....*->,,;%..%#>$&!-%..%-#-##=%....=;!$>-*=#';;-**.*.%-'),'#%.",
-">&+++$&!;%%;!$@+$&'%.='$+&'=.*..='&+&'=..=',@+&'=.%#>$@+$&;*.=;!>!!;-*.=-=%*=-=%%#>&++++>=.-'$+&'-%*.%-'&+$>-%*=',@+&'-%*=;!>!!'-%.%=;!&+!;%#,$$&!#**..=;&++$>#*",
-"!+@+++++!--!&+@@+&>=%=',+$)#=..=;!@+,'=.%->+$+$)#*=',+@@+);*%#>+&$$,#%%#)>;#;)>%#)$++@@@,-=;!,@$,';%=;>)@+&!;%=')+$+$&'%=')+&$$&'%=;'!$@$,>=;&+@$&>#=%*#)+++@&'%",
-")+@+$++@&#;&++$+++&-#!$+++++>=#!$+++++>=#)$@++++!=#,+@++++!=#)$@$+++!-=>$&)!,$,-'&+@++@@&##,$+$$++,-#,++$$++&-#&+@&$++&-#&+@&$++&##,$++$++&'#&+@++&,'=%;&++&@$)=",
-"!+@+&&+@+;'$@@&$+@&#'&+@$$+@&#'&+@$$+@&#'$@@$$+@&#'$@@$$+@&#'$@@$$+@&#->+@$$++&->+@$+++@+;'$@+,&+@&#'$@+,&+@&#'$@+,&+@&#'$@+,,+@&#;&+@$&+@+'#)$@++@@&#%;&+++@$)-",
-",+@@$&&++;'$@@+$+@&#>+@&!!$@+;>+@&!!+@+;>+@&!!$@+;>+@&!!$@+;>+@&!!$@+;=',+@@@&>=>+@&@+$++;'$@&>!$@,#'$@$!!$@,#'$@&!!$@,#'$@$!!$@,##>$+$&++&##)$@&&$++;=;&+@@@$,#",
-",+@+&,&++;'$@+@++@,#>+@)';&$+;>$@)';,$+;>+@);'&$+;>$@);'&$+;>+@);'&$+;*#!$@@+,'%>+@&@+$++;>$@&>!$@,#'$@&>>$@,#'$@&>!$@,#'$@&>!$@,#%#)$++@,>=#)$@&&$++;%;&++$+@$;",
-">+@$))&++;>$@$++@@,#>+@,''&++;>+@,'>&++;>+@,''&++;>+@,''&++;>+@,''&++;%;&+@+@&!=>+@@+$+@+;'$@&>!$@,#'$@&>!$@,#'$@&>!$@,#'$@&>!$@,#.=;&+@$>-*#)$@+++@$#='&++&&@+;",
-">$@$,,$+$#'$@$$+@@,#>$@$,,$@$#>$@$,,$@$;'$@$,,+@$#'$@$,,+@$#>$@$,,+@$#->$++$++&->+@@$$+@$#;$@$,,+@)-;&@$,,+@,-;$@$,,+@,-;&@$,,+@)-.*;)+@&>-.#,$@@@++,-='&++&&@+;",
-")+@+$+++)->$@+&$@@,#;,+@++++)-;,++++++)-#,$@++++)-;,+@++++)-;,+@++++)-->+$,!&+&-'$@@++++)-#)$@$+++!-#)$@$+++!-#)$@$+++!-#)$@$+++!-%-!&+@+);*'&+@+$,!;%#!+@+++@$;",
-",@@@@@+&'%>$@@,&+@!--',+@@+&'%-',+@@+&'%=',+@@+&'%-',+@@+&'%-',+@@+&'%%;!>;#'!'%;&+@@@+&'%=',@@@@$'%=',@@@@$'%=',@@@+$'%=',@@@+$'%*#)+@@@&>*'$@@+&'#%.#)@@+$@@$#",
-";!),))!'-*#>!!>'!!;%*-;!)!>;-*%-;!))!'-**-;>)!>;-**-;>)!>;-**-;!))!'-*.=--%*=--%#!&,))!'#**-;!))!>#**-'!))!>#*%-;!))!>#%*-'!))!>#%.=;>))!>#*#>)!>;=%..=;!)!!!!>=",
-"=-####-=*.*=##==--=%.%==##-=*..*==##-=%..*%-##-=*..*%-##-%%..*==##-%%...*%...*..=-#;##-=...*=-###=%...=-##-=%..*=-###=*...=-##-=*..*==##-=*.*=##-%*...*=-##-##=*",
-"..%--%........%==%.....%=-%.....*.***...............*=##=*........................=--%........%=-=*....%=-%...............%--%...*....%=-=%....%=-%.............",
-".%;!>#%.*...%%#')#%...=#>!;%.*.*=#;;;=%...%%%=%..*..=')&;=............*....*..*..%;!>#%*.*...*=;)'-**.%->!;=....%=%=%%..*%;!>#%......*=;)'-*..%#>!#=..*.%=%==%..",
-"*='&&!#%....%#!,&;=*.%#>&$!#%.%-'),,)'-*.=#;;;;-%..%-)$+>#%.*.%.*.%.*...*.%.%...%='&&!#*.....=;)$!#*..-'&$);%*.=#;;#;#=%*='&&!#%.*...=;!$!#%.*#>&$>#%..=#;;;;-%.",
-".=;&+$>-.*.%->$+,;%.*='&@@&'=.%;,+@@+!#*%-!,,)&;=..%;,$$,#%..-##-###=%.%=####-%..=;&+$>#%..*=;,$+>#%.%;,+@+>#*%->,,!$!;*.=;&++'=...*=;,$$>=.*='$@@&;=.%->,,)&;=.",
-"*->,$+);=.*-',$$,'=.%#)$$&+>-.='$$$+$!#.%#)&+&$>-.%->&++)'=.-'))!!))'==#')),)!;%*->,$+,>#%*-'!$+&!;%%->&$+$,'%%;)&&&$,>%.=;,$+>#...=#!$+);%.*-!&$$$'%.*#!&$&&'%.",
-"=;&+@@+>#%=;&+@@+!#*='$+@@@)#*=>$+@@@!#%='$+@@@!#%=;&+@@+!#%;$++++++&##)$+++++)-='&+@@+$)-='&+@@+$)-='$+@@@$,-->$+@+@$,-%-!$@@!#%*.-!$@@)#*.*#)$@+,;%.*#)$@+,;%.",
-"=>$++$@&>%=>$++$@&>%=>$+$$@&>%='$++$@&>%=>$+$$@&>%='$+$$@$>*'&++@++$@;'$@+$+@@,##!@@+$+@$;#)@@+$+@$;#!@@+$+@$##)@@+$+@$#.=',+@)#*..=',+@)#%..-',+@)#*..->&+@);%.",
-"->$+++@$)-=>$+++@$)-->$+$+@$)-->$+++@$)-->$+$+@$)-->$+++@$)-'&++@++$@;>+@&!)&$!-#)@@+$+@+;;,@@+$+@+;#)@@+$+@+;;,@@+$+@+;.*-!+@)#%..%#>+@)#*..%#!+@)#%..%#>+@)#*.",
-"#)++++@$)-#)++++@$)-#)++++@$)-#)++++@$)-#)++++@$)-#)++++@$)-)+@+@@@@@;>+@&)),&!-;,@@@@@@$;;,@@@@@@$;;,@@@@@@$;;,@@@@@@$;.%->+@);%..*->+@);%*.*->+@);=..*#>$@);%.",
-"#,@+&&@$,#;,@+&&@$,-#,@+&&@$,-#,@+&&@$,-#,@+&&@$,-#,@+&&@$,#&++&@@+++;'&+@+++@$#;,@@@+++$;#,@@@+++$;#,@@@+++$;#,@@@+++$;*-')+@&>#*%-')+@,>#**-')+@,>#*%-')+@,>#%",
-"#,@@@@@@$##,@@@@@@$##,@@@@@@&##,@@@@@@$##,@@@@@@&##,@@@@@@$#&+@@@@@@@;-',$@@+$!--!@@@@@@$;#!@@@@@@$;#!+@@@@@$;-!@@@@@@$;%;&$@@+$)=%;&$@@+$)=%;&$@@+$)=%;&$@@+$)=",
-"#>$+++++&##>$+++$+&#->$+++$+&#->$+++$+&##>$+++$+&#->$+++$+&#>$++$$++,#.='&@@&'-*=;!&+++&)-=;)$+++&!-%;!&+++&!-=;!&+++&!-%;&$+++$)=%;&$+++$)=%;&$+++$)-%;&$+++$)-",
-"%;!,&&&,>=%#),&&,,>==;),&&,,>==;),&&,,>=%;),&&,,>==;),&&,,>=;!,&!)&,;%.='$@+!#*..=#>,&,>;%.=;!&&,>;%.=#!,&,>#%.=#>,&,>;%%#>,&&&)'%%#>,&&&)'%%#>,&&&)'%%#>,&&&)'%",
-".=-##;##=%.==#####=%.==#####=%.==#####=**==#####=*.==#####=*%=##-###=..%#'!>#%....*=###-%...%-###=%...%=###-%...*=###-%..%-###;#=*.%-###;#=*.%-#;;##=*.%-#;###=*",
-"*-#####-=....====%....%==%.........=%=*....=##-*.....%=--%%.*.................*..........*.%%=%*...*....%-=%.....%=-=.................*%==**=###=...............",
-"->),,),!;%.%-;>>>#=..%#''#=......%-;>;=%..=;!)>#**..=#>!>'#*..%%.%%..*...*%%....*.........*=;>;=%......=;>!#%.*.=;>>;=.*..*%%.%%.*..*%=;>;=*#!,!;=...*...%*%*%..",
-";&@@@@@$)=%-'&$$$!#%.=>&$!#%*.*.%->,@!#*.%#)+@&'-..%#)$+&&>%.%-;####=%..%=;;-%....%%%%%%..=;)+,>#%.*.%=;,&+'-..=;)++!;=..=#;#;;-%...=-',@!;*'$@@!#=....%-#;#;#-%",
-"'$+@@@@$!-='&++@+!#%.='&++!#*...='&++!#**=>&+++!#**=>&@@+&>%%-!,&!+!;%.%='&&'=%..%-;''';#%#>,$+&>;=%=#'!$+$!;%=;!$+++!#%-')&,)+>#%=#;>&++,>=;&+@&)>;=%-#>&&!&,>-",
-";&++++@$,-;&+++++);%*->&+@$>#%%='&+@+!;%*#!$+++)'%*->$@@+,>%%#)$+$+,'%.*#)+@!#%.%#>+$+$$,->&$&$$$&;%;,$&&$++!-;,$+$$+$)=;,$$&&+$)-#,$$$$$$&'#)$@++$,'%#,$+$,++$'",
-"#,@+$$@+$#'&@++++&>==',$@@+&!-=',$@@+&!-='&+@@+&!-=',+@@+&!-='&+@@+&!-%-',+@!'-%#!&+++++$#)++&)$++>='&+$,,@+&#'&@+&&++$#'&@$,&@+&#'&++&,$@$'#)$@@@@+,#'&@+&,+@+>",
-"#!+@@@@@+;'&@@@+@+&##>@@@+@@$##>@@@+@@$##!@@@+@@$##>@@@+@@$##!@@@+@@$#-')&&&,)>='$@@+@@@)#)+@&)&@@!-;&@+,)+@$#;&@+,)+@$#'&@+,)@@$##!+@$&@+$;#)$@$&+@$;;,@@$&+@$;",
-"#,@+$$$@+;;,@@$&$@$##,@+&&$@+;#,@+&&$@+;;,@+&&$@+;;,@+&&$@+;#,@+&&$@+;;&+@@@@+&#>+@$+@@@,#>$@$)&+@!-#)@+,)$@$##,@+,)$@$#;,@+,)$@$#=',++$@&!-#)$@&,$++;#>$++&@$,#",
-"#,@+,)&@+;#)@+&)$@$##,@+)),@+;;,@+)),@+;;,@+)),@+;#,@+)),@+;#,@+)),@+;#!,&$$&&!->+@$@++@,#'$@$),+@!-#!@+,)&@$##)@+,)&@$;#!@+,)&@$#*=>&@@+!#*#)$@+$+@&#*#!$++@,'%",
-"#,@+&,$@$;;)@+&)$@$;#,@+&,$@$;;,@+&,$@$;#,@+&,$@$;#,@+&,$@$;#,@+&)$@$;=#')$$!'#*>$@++++@,-'$@$,&+@)-#!@+&,$@$##!@+&,$@$;#!@+&,$@$;*->&+@,'%.#)$@@@@+)-.='&+@$>-.",
-"#!+@+$++$#'&@@$&+@+'#)+@+$++$##!+@+$++$##!+@+$++$##!+@+$++$##!+@+$++&#.*#)++!-%.>$@@++@+!-#,++$+@@&#=>$++$+@+'->$++$+@+'=>$++$+@+'=;&+@@)#*.#,$@&&,!;%*#!$+@,;=.",
-"='&+@@@$,='+@@+&@@@>='&+@@@$)-='&+@@@$)-='&+@@@$)-='&+@@@$)-='&+@@@$)-.*=>&$'=..>$@@@@+&;%->&@@@@@$#%#)+@@@@@>%#!$@@@@@>%#!$@@@@@>=>+@@@!#..'$@@+&'#%.='+@@@!#%.",
-"*-'!)))>;%#>))!!))!#%-'!)))>;%*-'!)))>;%*-'!)))>;%%-'!)))>;%*-'!),)>#%..*-;;-%..!$+,,)!'#**-'!))))>-*=;>))))!#.=;>))))!#.=;>),))!#='$++$'-*.#&++$,#*..='$++$'=..",
-".*=-###=%.%=###-##-%.*==###-%..*=-###=%..*==###=%..*=-###-%.**=-###=%%..**=%%.*.#''';#-=*..*=#####=*..%-####-%..*=####-%..%-#####%*-'>>'-*..-;>>';=%..*-'>>'-*..",
-"..........=--%*..................***.*............%-;'''';#*.....%=*...%=###-=*....%-#=*........*............*.........*............*%*%%.*.#';#-%*.............",
-"....%%..*.;)>'=%...*.........*=#;#;;;#=%..%==%....=>$$$$$$>=....=;'#%..=',,,,;%...*#!,;=.*....%-##=%*..=--=......**%%%...=---=%%...%#;;#;#*.)$$,'';#=%..%=*%==..",
-".*.-;;#%..!$&,;=%%%*.%-#;;-%..'),,,,,)>=*=#>>#%*..#!@@++@@,-*%%=#,&>-%*#)$+$+>=**=#>&+!#=%.*.%#>,)'%.%-'!!;-**%#;;;;;;=%-;!!!';;#%*#>,)!&'-.&@@$,,,!'-%=;'##';-%",
-"..=;,$>%..,@@+)#=;;=%#>)$,);=.!+@@@@@+&-*-!$$'=...;,@@++@@,#-;;'!++)#*%;,$@+@!#.-'),+@&!'%...='$@+,--;>,+@);-*#!,&,&&&'%;)+++$&,)#='&+$$@,'%,+@+$+@+&;%;)$!>&&'%",
-"..=>++,=..>&@@&;;)&##>&+@@+)#%'),&@+&!'%.-!$+>-*..',@@@@@@,#',&,,++&'%#>&$@&@,'%;&++@@++&#..%#!$+$>=',&$++,,>-'$@@@@@@!='+@@@@@@@#;)$+$$@&!-',$@$$@@$;=;,@&,@+,-",
-"*.='&+$#%.;)@+&>!+$#'&@++@++)-!&&&@+,!'-%-!$+>-%..)+@@@@@@$;>++++@@+>=!&+@@+@$$#>$@@@@+@+;..='$+@$>%>++@@@++$;'&@+$$+@,-;)$+@@+$&#!$@@@+@+$;'&+@&&++&#%#)@&$@@&#",
-".*-')++;%.#>++$)&@,#>@+$&+++$#&+$+@@$$&'*-!$+!#...!++++@@@$#'&$++++@,#&$+@@+@+$#>+@++@&+$;..->+@@$>%!++++@+$&;',@+),+@)#=#>,++&>;=',$++$@$&#>$@@,)$+,-%#>+@@$$!-",
-"%#'),$+>-.%'&++&&+>=!@+&,++++;)$$$@@$$&'*-!$+!#.*.'$+++@@@&#=;)$+$$+&#)&+@@$@$&#>+@++@$+$;*.->$+@$)->++$+@+&>=;,@$!,+@)-.%->$+&'=.->&+$$@&!-)+@@,)&+&#*->&@@&)#%",
-"->$+&$+,;%*->$++,>#%!@+&)$+++>#;>,@$)>;=.->+@)#%..;)@@++@+!-.='&+$,)&-#',$@&@&!=>$@++@+@$#%=-',+@@$#'$@+$@+);%;,@$!,+@,#..%#&+&'=.=;&+$$@&>%)$$@&,&+&#=;!$@@,'-.",
-"',@+&&++>-.%#)+@,'-*!@+$)$+++>*=;)@$!;=..='$@)'=..#!@+$&++>%.*-!++,'#%*#)$@&@$)=;&@++@&&,##'>!,+@@&#;,@+$+@,>=;,@+,&+@)#..*->$$>#%*;&+$$@&>%#')+$&$+&-;)&@@@&!;%",
-"!+@@@@@+$'..='$+@)'%',@+$&+@$;.*#!@+&>=%.%;$@+!;=.->+++$,>#%..=;,$&>#**-!&@,$@$#-'!,+@,>;%)$+@@@@+,#-!+@+$++&##,@@+@@@,-*..=;&+$>=*;&+++@,>%%-'&@@@$>=)+@@&+@$>-",
-"!@+$$++@+'..*=')$@,#-')$+$&,>-.*-!+@$>=%.*->,@+)-%%;,+@&>#=....=;&$&;**->&+!)$$#%=#>$@!-%%!$++&&&$&-=;,$&),++>#!$&,,+@!-....=>$+&#*#)$@+@,'*.%->&$$);%!$$,!!&++;",
-"'$&))&&$&;..**-;,$&#*=;!&&>;-*..%;&&);=...%#>$$)#**->&$)#%.*....=>))#*.%#>);;)&#..=;&$>%..',&&)>>)!=%=;!>;',&'=')!;',&'%*...%;)&)-.=>,&$+);*..=#>,);=.'!);-#>&&#",
-"-##-#;;;#=....*=#'>=.*%-;#-**...*=#;#=.....%-;)'=..%=#;#%....*...=##=...%=-==-#%..*-;>#%..=#;#-==--*.*===%=##=*=-===##=*..*..%-#-*.*=#'>);=....%=##=..=-=%*%=##%"};
+"+ c #061406",
+"@ c #0B2A0B",
+"# c #081E08",
+"$ c #030E03",
+"% c #165016",
+"& c #1B641B",
+"* c #0F390F",
+"= c #217A21",
+"- c #279027",
+"; c #34BB34",
+"> c #5AD25A",
+", c #2BA02B",
+"' c #81DD81",
+") c #E0F7E0",
+"! c #A7E7A7",
+"~ c #040E04",
+"{ c #0E350E",
+"] c #155015",
+"^ c #1B651B",
+"/ c #114011",
+"( c #0D320D",
+"_ c #227C22",
+": c #45B245",
+"< c #7ADB7A",
+"[ c #80DC80",
+"} c #8BDF8B",
+"| c #52B552",
+"1 c #217B21",
+"2 c #0B280B",
+"3 c #1A5F1A",
+"4 c #4EB74E",
+"5 c #C6F0C6",
+"6 c #D5F4D5",
+"7 c #77D777",
+"8 c #D9F5D9",
+"9 c #83DB83",
+"0 c #DDF6DD",
+"a c #8EDE8E",
+"b c #268C26",
+"c c #248624",
+"d c #77D877",
+"e c #54C954",
+"f c #51B051",
+"g c #0A270A",
+"h c #0C2E0C",
+"i c #144C14",
+".............+@@#$....$+#+++....$@%&&*#$..+@%&*#$....+##+.................##+......+%=&*$..$*&=%+......+#@#$...............................................#%%*$",
+"............+*=-&@+..+*%&%&*@+.+#=;>>,%+.+@=>'-%#+.+#%==*#.....+++++....+@%=%#....+*-)>=#..#=>)-*#....+*&-%#+....+$#......................................+%>'&+",
+".$..$..$..$$@-!);%+.+@=>>;',%+.+*;!!)>=+$@&>))',%+.#%;''=@+.$.#%&&%@+.$.#%;',*+.$$@->!,&+..+&,)>-@+.$#*=')-%@+.$.#%%*+.$..$..$..$..$..$..$..$..$..$..$..$$@=')=#",
+"...........$*;!)'=#.+*;!!')>=+.@&>!!)';@#&>!))!>=+$@-'!!;%+..#%;'!>&+...@-')>%+..$%>!!-*+..+*-!!>%$.$*,>!)>;&+..+%>!=@...................................$*;!!=#",
+"..$..$.....+%>!)'=#.#%>!!')>=++*>!)))!>*@=!!!'!>=++*;'!!'=@.+*,'!''&#..+*>!!,*+..+%>!'&#....#&'!>&+.#%>!))!',#..#&'),*+.$..$..$..$..+++++$.$..$..$...$...#&'!>&+",
+"...$..$$...$*>!)'=#.+%>!'>);%+#&>!))))>*@=)!'>';&+$*,'!!!,%+$*;!!>>&@+..*;'>&#...#&');%#....+%,)'&#.+%>!)))'-#+@%-!);=*$.$..$..$..+@*%%%%%*$$..$...$....+%,''-*$",
+"........$..$*;!)'&+.$*-;,,>&@.+%>!)))!>*#&'!!!'>=#$@&>!!!>=$$*;!!';-%+.$@&=%@$...#='),*..$..$*,)'=#.+*->!)';&+#&>>!)'>,@..........#&>>>>>>,@.....$...$..*=!!;%+.",
+".$.$........@=');%#..+@****@$.#&;!!')>-@+%->!))!;*.@&>))!;=+#%;!))>',@..$##+..$..#='),*+....$*,)'=#..@-!!');=$*-))))))'*.$..++$$..*-))))))'*.$..$$.....+%,)!,@$.",
+".....$..$...#&')-*$...$$$$$$..@-!))))!>@#&>'''!)'*$@,>!))';@#='!)))!>@...+......$#=');%+...$$%,)'&#.$@->>,',%$#&;>!)'>,@...#*%*+.$#&;>>>>;-@..$@*%@+.$.@=!!>%+..",
+"............+%,;=@............@='!)!!>=#@=!)!!)!>*$#&-'!'!>@@=)!!!)';*......$....+&>!>&#$...#&>)>&#..#*%&%&%#$$#%-!);=*+..+*,>-*$.$#%%%%%%*+..#&;>&+..#%,)>-@...",
+".$...$.$.$..+*;>&#.$..........#&>!)!!-*+@=!!)!)',#.+@&>!'!>@@=!!!!)'>*.$.....$...$*;!!-@$..$*-!'>%$...$##$++$...@&')-*+.$.#='!;%$...$.$.++..$+@-'!=@..@->),%#.$.",
+"..$.........$*>'%#...$..$..$..+%>!))'=@.+*,>!)'=*$..$*,''>-#+%>'!'''>*..$.$......$@->!;&+..+&;!>-@+.............+%>'=@...$*;!!;*+............$@-''&#+.*;!!=@....",
+"........$.$..#*%@+............#*;!!!'&+..$@&>!=*$...$#*%%%*+$#%&====%+......$.$...+*-)>=+..#&>)-*+..$........$...#*%@+$..+*>'>&#$.$.$.$...$...+@%%@+$.*,>;%+....",
+"$..$.$........++$.$.$.$.$..$..$#%===&@#....#%&*#......$#++$...++####+.$.$..........#%=&*#..+*&=%#.....$.$..$..$...++$....$@=,&@$...............$+#$...#&=&@$$...",
+"..+@**@#+.$.+@**#.....#**%*#+...#@*%*#$....+@*@#+.$+@*%%*@+....+#***#$$@*%%%%@#$.$$@***#$...+#***++......$.....$.$.....$..............$...$.$.......$...++##++..",
+".#*=;>,&@$$*&-;>%#..$#%,>>;&*+.#%->>;&*#..+*=;;%+.+*=>>>>,*+..#*=;>;&+@=;>>>>;%$.#%=;>,&*+.+*&>;,&*$$.$....$........$..........$.$.$...$......$.$......#*&==%@+.",
+"$*,'!)!;&+#&'!!!-@$.#%>!!)!>-##%>!!)!>-#..@='!!=@$#=>)))!'&+.#*,!!!!-#*>!))!!!=+#%>'!)!>-#$@='!!!'&+.........$.$.$.....$.$.$+#*@#$..........+@*@#+..$.+*-'!!>=@$",
+"#&'!)!)';@#&!))),*$.#=!!)))!>*#&'!)))!>*.$*;!))-*$@-')))!'&$$@=>))!!=#*>!)!)))-+#=!!)))!>*#%,)))))-@...#@@#+......#*@#.....@*&-,&#.+@@@@@@@.@&,-&*#$..#&;)))!>&+",
+"@-)!>;')'*+*=,!)-*+.#&''>;')'*#%>>;>!)'*.#&'!!),*$@,')''>,&+#%,)!'>,%+#%=-,'!!=+@=)!'>')'*@=>)>>!);*$.#&-,%#.....#&-,%#..+*&,>!);@+*=,,,--&+*>)!>,&@+.#=>)>'!)-#",
+"*-)!;,>)'*.+*-'),*$.$@&=-;!)'*.@%=,>)!>*+*,!!'),*$*->)))!'=+@->)!!';%+.#@*='!>&+@=!!'>!!>*@,');;!);*.+@,!)=*$.$.+*,!)=*.@%=>))!;&##=!!!!!!'@#&,!)!>=%+#&;>;>!)-@",
+"*-)!;->)'*$.#='),*+..+@&,>)';@.+@-'!)';*#&'!'');%+#&;!'!))-@@,'))))!=@.$+*-!'-*$@=>!)!)';*@=>)>>!);*.+@-'!=@$....*,!!=@.*;'!!';&@+*-!)))))>*.@&;'!!!;@+@&,>!!!=+",
+"*-)!;->)'*..#='),*...$*-')',%#.+*&>'!!>**-))!!)>,##*=,,;!);@@,')''!);*..+%>!'&#.@=!!!'!)>*#%,!!)));*..#%--%#..$..#%--%+.&'))'>=*#.*,!!!!!!>*.$@=;!))>*.$*-)!>,%+",
+"*-)!;->)'*$.@='),%+$$@=>!)>=@$+*==-;!)'**-)))!)!;@#%-=&,!);*@,')>>!);*..#='!>%+.@-)!'>!)'*$@='!!));@..+@*%@+.....+@*%@+.%>!!!',&@+*,!!!!!!>*+@%,'!!!>*.$*-)',%#.",
+"@=)!>;>)'*.@%-!);=*$#%;!)';=*+#&>>,;')'*@-!))))!>@*,>;-;!);*@->)>>!);@$$*=!!>*+.@-)!'>')'*$#&;>'!)-@$.+*==*+..$..#%=&*+.@%->))';&#@-!)!!!!>*#&,'))>-%+.$@=!>&@..",
+"#&>!!!)',@#%;'!)!>-#*=)))!!>-#*-)!!!)!>@#%,>!!)!>**,!)'!))-##%,))!)),@..*-)'-@$.@=!!!!)!>@$%-'!!!!=#.$@-')=#....+*,!)=#..+*=,'!);@#%--,,,-=#*>)!>;=*#..+@=!>%+..",
+"$*=>'!'-%+#&'!))!';@*-!)))!';@#&>!)!!,&#.#%,'!)!>@@&;!!!',%+.@&>!!!>=+.$@=!>&#..+*-'!!!,&+#&;!!'>-%+.$@-!!=@+...#&'!'=@....@%=-,&#.#@****@#$@=,-=%@+....#='>*+..",
+".$*=>>;%#.+*;>''>>=+#=>'>'>>=++*=>>>>&@$.$#&;>>>=+$@&>>>,%#..$*=>>>=*+..#%;-*$$..#%,>>>&@$+*->>>=*#..$#&>>%#.$..@-'';*+$....+@*@@.....$$$...$*%*@+..$...+%,=@...",
+"..$#*%*+$$.#*%%%%%@$+@*%&%%*@$.+@*%%*@$..$$#*%%*@$.+#*%**#.$..$@*%*#+$.$$#*@+.....+@%%*#$..+@%%*@+.$..++**#$...+#&,-%#...$....$+.............$$$........$#@@+$..",
+"...+++$.....+###+....+#@###$.....+####+.+##@##+....+#@#@##+.$+##@#@#+....+###+++$####+###+..###@@#+...$#@#@##..##@+####..+####$..$.+++.++##+.+#+$+##++...++#+...",
+"$+#%&&%#..$#%==&*$$.#%==-=&*#..+@%===&%+*&=-==%@$.#%==-==&*$#%=-=-==%+.+@%===&%+#%==&%&=&@+@%==-=&*+.$@%====%+#%==&%==%+#%===&*+..#%&%*@*&&@#%&%**&=%+.+@%==%@+.",
+".@&;''>%#.+*;'!'=*$$*;'!!!>-*++*=;'!'>;@=>!!!';=*+*;'!!!!'=+*;'!!!!'>@+*=;'!'>;@%;''>;'!>%#%>'!!!>-+.#%>!!!!;@*;!!>;!';@*,!!!>&#..%;!>=&-''%*;'>=,>';@+*=;'';=*$",
+"+%;'))'-*$+%>!))>&#.%>))))!!=#*,>!!!!!'%,!))!)!!=@%>)))))),@%>))))))!%*,>!)!)!'%%>))'>))!=#%>!!)!',@.#&'!)))'*&>))'>))'*%>!))'=#.$&>)!>,')!=&')!;>!)>**,>!)!!!=@",
+"#=!!'');=++*;!))!=@.%>!)''!);@&')!>>'!!%-!)!>'!)>**>!)''!);*%>!)''!!!%&')!>>!!!%%;)!'>!)!%+*->!)';&+.+*,>!!!,@%;)!!!)'-#*->)';%+..&>))'>))!&='))>'!)>*&')!'>!)>*",
+"*-)!!))',#$*-'))!,%$*,')>'!);*=')>-=,''*=')'--')'%*,')>>!!,@*,')>>'''*=')>-->''**,)!'>!)'%.+*-!),&@+..#*-'!>=+*,)!!)!-%++%,)>=@+..&;))!>))!%&'))!'!);*=')>--')'%",
+"*-)))))',@$*,!!')>=+*,')!)));*=!);&@*%%#&')>=&>!!%*,')'!!;&+*,')'!'-&#=!);=-;>,**-))!!))'*..#='),*$.++#@='!>&$*-))));=@.$*,);&#+..%;))!'))!%&')!)!!);*=!),&&>!!%",
+"*-)))))';@#&>!!>)';@*,')))))>%=!),%##@#+&')>&&>'!%*,')))!-%+*,')))'=@$=!);=>!!>**-))))))'%..#='),*$.@%&%='!>&$*-))))>=@$$*,);=**@$%;))))!)!%&')')!!);*=!),%&>'!%",
+"*-)!!))!>@*-!))))!>*@,')'>'!!%=!);&*%&%#&')>==>'!%*,')'!!>,@*,')'!'&+.=!)>-'))'%*,)!'>')'*..#='),%+.&>!--'!>%$*,)!!!);&+$*,)>-,>&+%;)!!)>)!%&')'!!));*=!);==>!!%",
+"*-)!!')',@%;)!''!)!%*;')>;'!!%&')'-=>''*=')',,')>**;')>''''%*;')>>,*$$&')';>'!!%%,)!>;')'%$#%-!);=@+=!)>;!!>%$*,)!'>)';*#&;)>;');@%;)!>;>)!&&')'>!));*&')',,!)>%",
+"#&'!!'!>=#&>))''!)!=%>!)''!!'%%>!!''!!'*-!)!''!);@&>!)''!!!%%>!)'>-@..%>!!''!!'*%>)!'>!)!&+*;'!)'>=+&')''!',*$&>)!'>!!'&*;')''!);@&>)!;,>)!&=')!;'));*%>!!''!!;*",
+"+%;')));&+%>!!'>!!'&%>!!!!!!-@@&,'!!!'-@-'!!!!''&+&>!!!!!!'*%>!!!>=#$.@&,'!!!'-@%>!!';!!'&+%>!!!!'-#*,'!!!;%#.%>!!>,;!'&*>!!!!!!-#%>!';-'!'&%>!!,;'!-@@&,'!!'>&+",
+".#%=;>,&*$*=,-=&-,-*@&,,,,-=*++@*&-,=&*+*=,,;,=%@$@=,;;;,-=#@=,;,=*+$.+@*=,,-&*+*=,-=&-,-*$*&-;;;-%+#*=,;-%#$.*=,,=*&==*@=,;;,;-%+*=,-&%=-=*@=,-%%=-%++#*&--=%@$",
+"..+@***#$.$@**@@@*@+$#***@@@+...+#@*@#+.+@***@#+$.$#@****@#$.#***#+.....+#@@@#$.+#**@@@@@+.+#@***@#..+#@*@#...+#@*@++@@$$#*****@+.+@@@###@@++#@@#+@@+$..+#@@#+..",
+".+#+##++.....++++$...+#+#++...$.+++#+++..$#+###++..+#+$++#+..+++$$++++.++++$+#+$.+##++++#+.++#++++++..++###++...+@**#$..+@*@+.......+@**@$...$.+@@#+............",
+"@%&===&%#$.#*%&=%*+.@%&===%*+..#*&&=&&*+#*&=====%+#%&&%%&&%+@%&&%*%&&#@%&&%*%&&#@%&&&%&&&#@%&&&%&&&#+@%&====%+.$@-;>&@+.@->=*+..$..+@=;;-@+...+*-,%#...$....$...",
+"%>!!!!'>&++%-'!!',*+%>!!!!'=*++%-'!!!'=#@='!!!!!>*%>!!,>'!>*%>!';='!'&%>!';-'!'&%>!!>;!!'&%>!!>;!!'&#&''!!!!>*.#%>!!,%+.*;''=#.....#%;!!>%+$.$@='!,%+....$....$.",
+"&'))))!!;**->!))!'-@&'))))!>-@*->)))));@*;))))))'%='))>'))!*&!)!>,!)!=&'))'>!)!=&'))!>))!=&'))!>))!=@=!)))))!%$#=')!,*+.@,>!-%+..$.+%;))'=+..+*;!)>&#$.$........",
+"%;')'>!)!%&')!>>!)>*&;)!''!)>*%>!)''!);@%;)!!)')!%=')',,!)>*&>)!;->)!&&>)!'!')!&%;)!'>!)'%%;)!'>!)'%@=!!''!)'%.#=');&#+.+%,)'=@+...+@&;)'=#$.#&'!)!-*$..$.$.$...",
+"*,')>,>!!%=!)>--')!%*,)!>>')'*%>)!>>'!,@*,)!!)>)!%&')>=-');**,)!;->)'%&;)!!)')!%@=>!)!)',*@=>!!')',@#&''>')',@.#='),%+...@='!>&+....$%,)'=#.$@-!!>),%$..........",
+"*,')>;'!!%=!);&&>!!%*-)!'')!>**;')!!''=#@=>>!)>',*&')>==');**=!!>,')>*%;)!!)))!%$*-'))!;&#+*-')!);&++*-;'!);&+.#='),*$...+%;)!-@$....*,)'=#.+@->>;',%$....$.$...",
+"*,')!!))>*=!);==>!!%*-)))))>-@*=;'!))!-@+@&-!);=*+&')>==');*#&>!'>)';@%;))!!))!%$@=>))!,%+.+%;!)>=@..#&;!)'-%+.#='),*..$..*=!!>*+.$.$*,)'=#..#*&&%=%@+.$....$...",
+"*,')!!!!-@=')'>>!)'%*,))!!)>-@%,>>'!)),@.+*=!);&#.&')>--!);*+*;!!>)>=+*;))!'))!%#%,'!!!>=#.+*-!);&+.+@=>!)>>,@.+='),*+....$%,!'=*$..+*,)'=#...+####+$.+#*@*@**@+",
+"%>!)'';=*+%>!)!!));*%;)!'>)!>*=')'''!);*.+%,!)>=@.%>)!>>!);@.@='!!)-%$*-))!'))'%*,!)!>)!>%.$%,!)>=@.#&>!)!')'%.#=');&#..$.$#&'!>&+..#&;)'=+$.$........*=,,,,,,=@",
+"%>))!'-*#.@->)))!'>*%>))';!)!%=!)!!!)),@$#=>!)'-%$*,')!!))-@.#%>))!-@$*-))!>))'*&>))!>))!=+#=>))'-%+#=!))!!)!%.#=')'-*+....+*;!!=#$$*-')'=+....$....$.=>'!''!!>*",
+"%>)!!'=@..@=>)))))>*%>))>-;)'=&>!!))!>=#.#=>))!,%$#%,!))!>&+.$@,!)>&#.#&''>,'';@%>))'>))'=$@-'))),%$#&'!))))>%.+&')!;%+.....@='),@.#&;!)'&#......$....,!))))))!%",
+"*&---=*+$.+&;!!!!!;@@&--&%&==@*&=-,--&*+.+*=-,-&#$$#%=-,=&@+..#%==&@$.+*&=&%&=%+*&--===-=*.+*=-,-%@$+*&-,,,-=#.+%>!!;&#$....+%>'=#.#%;!)>%+$........$.=>''''''>*",
+"+#@@@@$...+@%-=-,-%++#@@#++@@$$#@*@@@++...$#@@@#$...+@@@@#...$.+@@+$...$+#+###+$+#@@@@@*@+.$$@@@@#$..+#@***@#+..#%==%@+...$..@&=*+.$@%=-&@+..$.$.$....@*&&&&&&%#",
+"...+++$........$....$@*@+.............$.$..$$@@@+...$..........+#@**@+..........+@*@+........#@@#.......##@+..+@*@+......++@*@#.....................$...$.......",
+"$.+@%&*+.$.$.$..$...*=-=*#......$.$.$......+*=-=*+.......$.$.$+*&-,,=#.$..$.....*=-=*#......#%=-%#.$...#%--%#$*=-=*+....+#%=,-%#.$...............$........$.....",
+"..#&>'=@$....$$$.$.$%')!-@+.$.....$$+......#=')!=+..$+.+$....$@='!))'*....++++..%')!=@+.$.$$@,!)=@$..$$*=)!,@$%')!=@+$...#-!))-@$..+.++.+.$.$++$$+..$....$.+.$..",
+"..@-!);%+..+@*%%@+..%;)!;&*@+.$+@*%%%*#+$+@%=>))-#..#*%%*@+..#%;!)'>;@.+@*%%%%@+%;)!;&*#$..+*;!)-*...$#&,)!;*.%;')-&**+..+%;!)-*+.@*%%%%%*+.$@*****#$.$+@*%%*#+.",
+"..#='!'&#.$*=;>>-%#.*,)!'>;=%+#*=;>>>;%+#*=;>'))-@+@&,>>>=%++*;'))!',@#*=;>>>>-@*,)!!>;&*+.#&>!!-*$..@&;!!!;*+*;');;;,*+..@-!),*..&,'>>>',%$*-';;';&*+#*=;>>,&*$",
+"$.$*=>'&#$#&'!))!-*$*-))))!';@*;'!)))!,@*;'!))))-@#&'!)))!;@#&'!)))!;@*;'!))))'**-))))!>-#+@-'))-*+.+*,')))'&$@,')!!!!&+$.#='),*+.,!!))))!;@&')!!)!>-@*;'!))!'&+",
+"...+@%;%+.#='))))>&+*-)))!))'*&'))!!));*&'))!)))-@*,!)!!))'*#%'!))!',@&>))!)))'**-)))!)!>*.@=')),*..$*-'!!)'&+*,')!!!'%$..#='),*+.,!)))))!>*&')))!)!>*&>))!!)!,@",
+"$...$#@#..#='!!!)',#*-))';')!%=!)>,;'!,@=!)>;'))-@%;)!!'!)!%.@=>!!;=*+=!)>;'));**-))'>')!*.+*-!),*+..#*&->!'=+*,'))!>=*+..#='),*..=')!!!!!>*%-))';')'*=!)>;>!);*",
+"..$.....$.*-)))))',@*-)!>,>)!%=!);==,>=#=!)>,>!)-@%;))))))!%.#&>!!-%#.=!)>;>!)-@*-)!;,')'*.+@='),%+...$#*,!'=+*,'))!;&#$..#='),%+.=')'!!!!>**,)!;,')'*=!);-,!);*",
+"....$.....*;)!'')';@*,))';')!%=!)',-;>,@=!)';')),*%;))!'!!'%.@&>!!,&@+%>!)))))-@*,)!;,>)'%.#%-!);=@+..$#*-!'&+*;')!!'-%$$+%-!);=@$=')'!!!!>%%,)!;,')'%=!)',>!);@",
+"........$.*;)!'')!>*%>))!'!)'%&')!''!'>*&')!'!))>**,))!!!!'*+%>!!!'>=+@=;''!!)-@%>)!'>')!&+%;'!)'>=+.+@%=;!'&+%>!)'!!',@$*;'!)'>=+-!)!!!!)'%%;)!'>!)!&&')!'!))-#",
+"$.$..$....@-!!!!!!>*%>!!!!!',@*,'!!!!!>@*,'!!!!!>*#&>'!!!!>*#%'!!!!',#+%,'!!!!=$%>!!';!!'&#%>!!!!',+$@->'!)>%+%>!';'!!>*+%>!!!!',#,'!!'!'!'&%>!!>;!!'&*,'!!!'>&+",
+"........$.#*-;;;;;=#@=;;;;;&*+#*=,;;;-%+#*=,;;;;=#+@%-;;;-&#+*-;>>;-%+#&;)))'-%+@=;;-=;;-*$*=,;;;-%+$*;!))!-*$@-;-&-;;=#+*-,;;;-%+%,;,,;,;,**=;;,=;;,*#*=,;;-%@$",
+"..$..$.....+@*****@$+@*****#$..+#****@#$.+#*****@$..#@****#+.#@*%%**#.+*->'',%#.#@%*@@***+.#@****@#$$@=>'';%+$$@**@***@$.$@*%***#.#********++@******@+.+#***@+$.",
+"........$.....$.$...........$..........$.$+$......................................................................+++$.....+++$$....+++$..............$.........",
+"$.$..$.............$...$.......$.........$#*@+....$......$...$..$...$.........$..........$.......................#*&&*+$...#&=*$...+*&&*#................$......",
+"..+..+..$.$....+........++..$....$.$....+@=,-*+$....$.$........+......$.$.$.....$.$+.$+....$.+.$.$.$.$+.+.$.$.$.+%-;;%+...+*,>&@$..+%,;-%#$.$.$.$.$...$.....$.$.",
+"+@*%%**@$..+@*%%**@$$+@**@**@+..+@*%**#$+%;!!=%@+.+@*@##@*#++@**@@*%*+$@**@#***+.#**@@**@$+@**@#**@+$#*%%%%@+...@=!!;*+...#&')-*+..$*;!!=@...............$......",
+"*-;;;;,=%+#%=,;;;;-@+*-,,,;,=@$#%-;;,,=+@='!!>,&*$*-,-&&,,=#*-;;,-;;,**-;,=&-;,*#&,;,-;;-@*-;,=&-;,*#=,;;;,-%+.+*-)'=@+...#='),*....@=')-*+...++#++++.$...$.$...",
+"&!)))))'-@*,>)))))'*#&!)!!))>*$*-!)))!>@*,)))));%$&')!,-)!'*&'))!'))!=&'))';!)!=*-))!>))!*&!))>,!)!=*>!))))!&+.$%,)'=#..$.#='),*+$..#=!),%..+@%&&&&&%+..........",
+"%>)))!))'*&!!)!!))>*#&>!))!!>*#&')!!))'**-!)!!'-*$%>)!;,!)'*%>))'>!)!&&!)!!!')!&@=')!')!>*%>))!;!)!&%>)!!)!>&+.#&>)'=#....#='),*$...#=')>&#.#&''!'>'>*$.$..$....",
+"%,))';')!%=!)'>!)),*$*-!!';,=@+&'!))!';@#='!!,=%#.*,)!;-')'**-'!!>)!>*%,)!!)!)!%+%,'!)!;=+*-')!>)!>**,''))'-*+.#=!)'=#$...#='),*..$.#=')!=#.*-))))!)>*.......$..",
+"*-))'>')'%=!)'>'))-@.@=!!>=%@+#&>!))!'>*#&>!'-&%@+*-)!;,>)'%#%>!'>)>-@*-))))!)'*$@=>))!,%$+%;!!')>=#@=>!)!>-*+.+&>)'=+..$.#=')-*+...#=')>&#.@-!'!!!';@...$.$....",
+"*-)))!)!>*%>!)!)))-@+%,!!>,&@$#&'!!!))'*+%>!!>>;=#*-)!'>!)'%$*='!!),%$@-!))!))>*+%;!!!!>=#.+='))!,%$*,')!'''&+.$*,)!=#....#='),*+...#='),*+.#*----,=%+$.....$...",
+"*,))!!';=+@&;'!!)),@#&>!)''-%$@=))!!!)'%$*,!!!)!;@@=!)!'))!&.#%>))!=@.#&>!!>)';@@=')!')!>*+#&>))>&@$%>!)!!))=+.$*,)'=@....#&')-*+..+@=')-*+..+@@@@@@+........$..",
+"%;)!',=%@$$@%=,'!),*@=))))),%$#='!!))';*$#&>!)!>=++%-'))!)!=.$@=');%+.$*;'';!;=+@=))'>))'*#&'!))-*$.*>!))))!=+.$#-)!-*+.$.+%>!=#+..$*-!)-@$....$.+....$.$.$.....",
+"%'))!>%#....#&>!))'*+%=,,--%@.+*==---=%+.$#%=-=&*+.#*=----=@..+*==%#+.$#*&&%&%@+#%=-==--=##=!!!!=@+.#%-,,,-=*+.$#%>>>&+...$@&=*+...+&>';&#.$.................$..",
+"*->>;=@$....$@=;>>-@$#@***@#$..+#@@**#+..$$+@@@+$...+#@***@+...+#@+$....$#++#+$.$+@*@@@*#$$*=--=@$..$#@***@#+...$@%&%@+....$##+..$.+@%&%@$...$......$...........",
+".......$.$..............#@#+.....+++#$...........$.+#++$##+.$...$+..$...$#@**@+$.............+++$.......++$..........$.$......$..........$....+++++...$.$.+.$.$.",
+".~{]&^/~...............+%=&*+$..#*&&%*+$..+.....+.$*&=%%&&%+..++**@$..$$@&-,,-&+...++##+$$.+#*%%*@+...+@%%*#+.$..........$.................$.+#*&&*#+...+@**@+..",
+"(_:<[}|12$.$.$.$.$.$.$#%-)'=*$.#*->>>=*+.#@@@@@@#$@=''>,>>,*..+*,'&@..$#&>!))!>@$+@%&%&%@.+*&,>>,&@+.+@=;>,%#...$..$.......$..$.$.$.$.......+*=;'>,=*+.#*-,,=%#.",
+"345)))643....$+++....+*=>)!;=++@=!)));&+#*,-==-,=#*,))!>))'%..#&')-*+.+%;!)!!)'*.+%->=>>*$@&>!))!'&#.#%>!!)-@....++++++$.+##@@@#$......$.$..@&>!))!'&+.#&!))!-@.",
+"_78)))87_...+#%%*+..+*->!))';@$%;!!'',%$#=!!!!!';@@-!)!>)!>*..#='),*..@=>!)!''>@.+*=,=,-*.*,!))))!,@.@='!!)-*+..@%%%%%*++*&=====%+..$.+$$$..*,!))))!,@.#&>''>=@$",
+"_90))))a_$..+*;'=#..$%>)!'!';@#&>!';-%@.*=!))!))>*+&;!!')>-@$.#=')-*$.*,))))!>;@..#***%*#.&')))))!'*+*;!!!);%$+@&>!>>!;@@=!!!!!!'*.+@*%%%*@+&'!))))!!*.+@&--&*+.",
+"ba)))))ab...#%;>,*..+&')'>>>-#@='!!>-*+.*-))!'))>*$*-')!);&+..+&'!-*$.*;))!))'>*...++$+$..=!))!!!!!%$*;!!!);&+@=;!!!!)>*@-!!))))!%+*-;'>>>-@=!!)))!!!%..+#@@++..",
+"ca)))))ac$..#&>',*+.+%')'>>;=#@-!)))>%#.*-)!'>!)'*$@='))!;&+..+&>!-*..*-!))!))!%$.......$.=!))!!!!!%+*,!)))'=+%>!)'!)!-@#%,>>>')!%+%>!))!!>#=!!)))!!!%.....+....",
+"ca)))))ac$..#='!>%+.+%>!)'!'-#@='!)';&@$@-))!'))>*$@-'))!;&+..+&')-*..#&;!))!)!%..........&>))))))>*$*,!)))>=+%')!!)!>=#.#*%%&,)!%+*,>>>>>-#&>)))!))>*..........",
+"ca))))8dc..$*-!!>&+..*=>)))'=+@=')!>>;-@@=!))))!>*$@->!)';&+$.+=')-*$.#%,>'!))!*..$.$.$...*-!))))!-@$@=>''>-%$*>')'!))-@..$$+@&>;*.+*%&&&&*+*-!))))!-@$.$.$..$..",
+"_90)))87_$.+*-))'&#..+*=;)!,%+*,))))))'*+&;>;;;>-#$*-!)))>=$..+&')-*+.@=!!!')>-#........$.#%;'))';&+.+@%==&*#.@&,!!'!)>*.....$@%*+$.+####++.#%;'))';%+.....$....",
+"345)))643..$*-))'&#$..+*-!>&#.@-!!!!!!>*.@%&%%%&*+$@-'!!!;&+..+%>!=@..#=!!!!!-*+$.........$@&,'';&@$..$##@#+...#%;>>>!,@$......++...........$@&,'';&@+..........",
+"(_e<[[f_g..$@='!>%+....#*=&@$.#%-;;;;,&#.+##$$+#+$$#%=;;,&*+..+@=;%#..+*,>>;-%#...$.$...$..+#*%%*#$...........$+#*%%%%*+..$.............$....$#*%%*#$..$..$.$...",
+".~hi&]{~....+@&&%#.$....+##+...#@****@#+............+@**@#$....+@@#.$..+*%%%@+...............$+++...$......$.....$$$$$$......$...$.$.$....$....$++$..........$..",
+"..+@**@$.$...........$+@**@$....+***@+........+.............$$#*%%%%*+........$.$...$...$....#@@#+....$+++..............@**@+.....@**#......@%%*@$...$..$.+$....",
+"$+*=;,&@+....+##+$...$*=;;=*+$.+*=;;=*+...$+@*@$$.$.........$@&,;>>;-#...............$.....+#%-,%#...$@*%**+$.$.$.......&>'=@+$.+.,';&#$++++=>>;=@++#$...#**@+..",
+"$*=!'!>%#.$.+@&=%+.$.#&''!>=#..#&''!>=#$..#*-,=@....$.$.$...@=''!!!!>*$.$.$.$...$.$.....$..+%,'!=@$.+#%;'>-*+.....$.$...-'!;%#+@@+>!'-@@%&%+;!!';&*%&@...*,>%#..",
+"#&;)'!!,@+.$#&'!-*#..#&''!'-@+.#&'!)!-*+..@='!-@+.+@@@##@@@.*,)!!))!'*...............$.....$%,!)-*..#%;!'!!-@+.+++$$+.$.,!)'&@%=,#>)!;%&,>;#>'!!'=->'%$.+*;'=@..",
+"#=>)>!';*$$*&,!);-%+.#&>'!'=@+.#&>!)!,*+.+*-!>&#..*=,-&&,-&#%;)!!))';@...+@@@.$...$.....$..$@=!),*+.@=>)'!!;*$#*%%%%%@$.=')'=&;!!*,)!;=;!',@-')!>,''>*..+&;'=@..",
+"$%-!'!!=@$#=''!)!!;@.#&>)!>=@..#='!!!;*$..#&-&*+..%')!,-)!'**;)!)))',@..@%-,%+.......$.....$*-!);%+.#=>)>!!;*$*,>;;';=*$=')',;'!>*,)!';'!>-@>'!!!'!'-@.+*-!)-*..",
+".@%,>;&*$.@-))))))'*.#=)!!'-@+.@=)'!!,*+..++@#$...%>)!;,!)'**=!))))',@.+@-!)=@+.$.$.....$...*,!)>&#.#&;)'!!-@.%'))'!!>&#;!)!'!!!;*'))!!))!;*>))!!)!'=++*=>))-*+.",
+".$+*&&@+..+&;>!)'>-@.+&>'';&#..#%>>';&++....$.....%,)!;,')'*#%,>!))>,@.$@,!)=*......+++....$*,''>&@.#%,!!!>=*$@,')!!!);*,'!!!))!;*'!))))!!>*-!!!!)!'=+#&'!!'=*+.",
+"...$#+$..$+@&-');=*+.+@&==%@...+@%&&%#+...$...$...*-)!'>!)'%.#%-!))',@..#%-,%#.....@%%*+$..+@%==&*+.#=>)))';*+@=>))!!)>*%-;')!));*=>'!''!!>*%->!)!)!=#@-!)';;=*$",
+".$........$#=;'!>-%+..$####.$...$###+...........$.*-))!'))!%.$*=!))',@...+@@#..$.$+%>!=*+....##@++..#%,!!!'-@.*,')!!!);**->)!!));*='!',>)!;@*-')!!)!-@@-)!'>!;=+",
+"....$.$...#&>''''>=@..................$...$.$.....*-))))))!&+#=;!))!'*$.....$....+@,!)>%+........$..$#*&==%*#.%>))'!!>=#*>!!!!))'*;)';,!!';@&'!!!!)!;@@=!)!')>=+",
+".$......$.#=))))))!*$.....$...$...............$...*-)!>,--=@$*;!))))'%...........$*;!)'&+..$.........$+###+$..*,',;>;=*$*,'>>'!)'*,';=,!!!;*&''>>')!;@+%,!)));%+",
+"..........+%=,,,,-=+..$.....$...$.$..$.$..........@=!'-*+++.$@=>''''>*.$....$....+*,!!;%+....$...$............#*%%%%*@+.#&=&&=>';@&&%%=>>>,#*=&&&-'>=+.#%=---%#$",
+"..$.$.$.$.$+@*****#+....$.................$.$...$.+%,=*+.....+@%&==&*+...$....$...+&;>&@.$.........$.......$.$.$$++++...$####@*%*$###+@%%%*++##+#*%%@$..$@**@#$.",
+".+@%*#$......+@*%@$.$.+@%%*+.$..+#**@+.$.....+......+*&&*+$...+#@@@##+.++@****@+.+@%%#$....$.+#%%@+..$+@%%@$...+#****#$..$@%%#$.......+*%*#...+*&=%#.$.$#*@@@@+.",
+".#&';%#$$...$@=,'%#..+@=>!&@...@*-,--*+..+@@*@@#...$@-''-@+..$@&--==&#+#%->;>,=#$#%>,=@+....+@&>'&#..+*=!>=@+.$@&>-,,&@..#&;;&@$$....#*='-*+.$@=>!,%+.$@=,-=;=*+",
+".#=>'>%+..$+@&>'>%+..#&'!!;*+.+*,!!!!=@.+@&,,='*#$.#%;'';*+..#&>>''>'*@-;!!!!!!@+*=>)'-%@$+@&-!!>=@++*-'!)'=*.#&;!>'';%+$@&>'>&*+.$+#%,>'-*+.#&>!!!=*$#%;''>'>=#",
+"$*->!!=@..$@&;!!,*+.$*-'!!'%#.#&>!!!!=@+$*,!'>>&+.+*->!!,%+..@=))))))%%'!!''!!!%*,''!!''&+*,>'!!'>=+*,'!!!!'=#%;'!!!!'=#$*,>!!>-%+$@=,'!';&+$%;'!'!>=+#&>!!'!';@",
+"#%>'!!,%+.+%;'!!,%+.#&>!!!>&#.#&'!!!>&#.#&>'!'>&#.#%>'!!;%+.+@-!))'>)%&')'=->''%&!))))));@%!))))));@%'))))));@&'))))));@#&'!))!',#+%'!))!',##&'!)!)!;@#&'!)))',@",
+"$%'!))'=#.+%'!))'=@.#%'!))'=@.#&'!))'=#.#%'!))'=#.#%'!))'=#.$*-)))!!>*=!);&*=-,#*;')>>!),@@;')>>!),@*;')>>!),@%;')>>!);@$*,>!)';=#+*,>!)';=#+*,>!)';=#$@&,!)>-%+",
+"$@='!)!-*.+@='!)!-*$+@='!)!-*.+#='!)!-*.+*-'!)!-*+$@='!)!-*.#&;)))));*=!),%#@**+*,')>'!!=#*,')>'!!=@*,')>'!'=#*,')>'!'=#.#*-!);&@..#%-!);&@+.#*-!);&@$.+@='),%#.",
+"+*,!!');&+$*-!!');&+$*,'!');&++*,!!');&+$*;!!');&++*,!!');&+*,'))))!;@=!);&*%%*+*,')!)!,%+*,')!)!,%$*,')!)!,%+*,')!)!,%$.$#=!);*+...@='),%+...#='),%+...#='),*$.",
+"#&'!!')';@#&'!!')';@#&'!!')';@#&'!!')!;@+&'!!')';@#&'!!')!;@%>!)))!'-*=')!-,;>;@*,')!)!;=#*,')!)!;=#*,')!)!;=#*,')!)!,=#.+@='),%#$.+@=!),%+$.+@='),%+$..@='),%+.",
+"*,))))))'%*,))))))'%*,))))))'%*,))))))'%*,))))))'%*,))))))'%=!)'!!'>!%%>!)))))>*%;')>'!'!*%;')>'''!*%;')>'''!*%;')>'''!*.@&,!)>=*$.@&,!)>=*$.@&,!)>=%$+@&,!)>=*+",
+"&>))!'!)!&&>))!'!)!&&>))!'!)!&&>))!'!)!&&>))!'!)!&&>))!'!)!&;!)!)))))%@->!))!!,@&'))))))!%&'))))))!%&'))))))!%&'))))))!%#%>!)))',#+%>!)))',#+%>!)))',#+%>!)))',#",
+"&'))!>))!=&'))!>))!=&'))!>))!=&'))!>))!=&'))!>)))=&'))!>))!=,!!'!!!)!%$#=>))>&@$%>!)!!!!'*&>!)!!!!'*&>!)!!!!'*%>!)!!!!'*+%>!!!!'-@+%>!!!!',@#%>!!!!',#+%>!!!!'-@",
+"%;''>;''>%%;''>;''>%%;''>;>'>%%;''>;>'>%%;''>;''>%%;''>;>'>%%,;;;>>>;@.+&')'=@$.@=;>>>>;=#@=;>>>>;=#@=;>>>>;=@@=;>>>;;=#+*=;>>;,&++*=;;;;,&++*=;;>;,&++*=;>>;,&+",
+"#*&&%%&&%##*&&%%&&%##*&&%%&&%#+*&&%%&&%@#*&&%%&&%##*&&%%&&%##@*******+.$@&=&*+..$@******@$+#******@$+#******@$$#******@+.+@****@#+.+@****@#$.+@****@#..+@@***@#$",
+".+$++++.....#*%%**#..$@%%@+..$...$@**#....+*&%*+....#*%%**#$....$$$..$.............$+#@@+..$@%%@+......+@**#$...+*&&*+......+$$.......#*%@+..$#++........@**#$..",
+"@%&&&&%*+.+#%;'>>;*+.+%>>-@+....$@=;;%+..+@='>-@+..#%;'>>;*+.+#*@**#$....$....$..+@%&&-=*+.+%>>-@+....$@=;;%+..+*='>-@+..+@*@**#+....#%-'=@$#*&%%@$$.$.+@&,;&*+.",
+"=>!!!'>-%++%-')!'>&+.#&'!>&#.$..#&>!>&#..#&;)!>&#.+*=')!'>%$.#%-=--%@$.#@#+$#@#++*=>!!!!=#.@&'!>&@+$.+@&>!'=@+$#&;)!>&@+$#%-=--&@+.+#%->!-%+*;''>-*$$..#%>!!'=*$",
+"-!)!!!!!-@@->!))!>=#+#&;!',*#..#%-)!;&#.+@=!'!',*$#&;!))!,%$+*=!>'';*++*,=%*%,=+*,'!!)));@#%-;)';&%+#%=,)!>-%+#&,!'!'>&+#&,!>''>&+#%&-')';=#%>!)'>=*#+$*,!!!)>&+",
+",!)!'!!)>*%>!!'!!!>@*-'!!!!!=#*-'!!!!!=#*,')!!!!-#*;!)!!!!-#*,')'!!!-@#='>,-;';@&>!)!!))>**;'!''!!;@*;!!''!!>@*>!)>'!!>@*>!)>'!!>**;'!!'!!>&*>!)!!>;&#+%>!!>)',#",
+"-!)!>>!)!%&'))>'!)>*&>!)''!)>*&>!)''!)>*&'))''!)>*&'))''!)>*&'))''!)>*@=!)''!!>@=!)'!!!)!%&')!;>!)>*&')!;>!)>*&')!;>!)>*&')!;;!)>*%>!)'>!)!&*,')!!))>*+%>!!!)',@",
+";!))'>>!!%&'))!'!)>*=!)>--')!%=!)>--!)!%=!)>--')!%=!)>--')!%=!)>--')!%#&;!)))>=#=!)>)!'!!%&')>=-');*&')'--');*&')>--');*&')'--');**='!'>!!>**,')>>'!!%#%>!)))';*",
+";!)!>;>!!%&')!)!!);*=!),&%>'!%='),&%;'!%=!),%&>'!%='),%&>'!%=!),%&>'!%$*-'))!;&+=!)>)!'!!%=')>=-');*&')>==');*&')>=-');*&')>=-');*+*,'!!);=#*,')>>'!!%+%>!!'!)'%",
+"=!)',,>!!%=')'!!));*=!);&&>!!%=!);&=>!!%=!);&&>!!%=!);&&>!!%=!);&&>!!%+%>!)!)>-#=!))!'!)!%&')>=-');*&')>=-');*&')>=-');*&')>=-');*.#%>!)'=@$*,')!!!)'*#&>!!>>)!%",
+"=')';;'!'*&')''!));*=')';;')'*=')';;')'%&')';;!)'*&')';;!)'*=')';;!)'*@='!!'!!>@=!))''!)'*%')';;!),@%>)';;!);@%')';;!);@%>)';;!),@.$%,!)>=@.*;')))!!;@#&>!!>>)!%",
+",!)!'!!!,@=')!>'));*%;!)!!!!,@%;!!!!!!,@*;')!!!!,@%;!)!!!!,@%;!)!!!!,@@=!';->!>@&'))!!!!,@*,')'!!!-@*,')'!!!-@*,')'!!!-@*,')'!!!-@+@->!)!,%$&>!)!';-%+*-!)!!!)'%",
+";)))))!>&+='));>!)-@@&;!))!>&+@&;!))!>&+#&;!))!>&+@&;!))!>&+@&;!))!>&++%-=%*&-&+%>!)))!>&+#&;))))'&+#&;))))'&+#&;)))!'&+#&;)))!'&+$*,!)))>=$&'))!>&*+.*,))!'))'*",
+"%-,;,,-&@$*=--=&--%+$@%-,-=%@$+@%-,,-&@$$@%=,-=%@$$@%=,-=%@$$@%-,,-&@$.#@@+$#@@+*->;,,-&*$$@%-,,-=*$$@&-,,-=*$+@%-,,-=*+$@&-,,-=*+.#%=,,-=*$*=,-=%#+..#%-,----=#",
+"#@****@#$.$#**##@@#+.+##**@#$..$##**@#+..$+@**@#$..$+@**@++..$##**@++...$+...$..#@*%**@#...$#@***#+...#@**@#+..$#@***#$...#@**@#$..$##**@#$.$#**@+$...$#@**@**#$",
+"..+@@+........+##+.....+#@+.....$.$$$...............$#**#$........................#@@+........+#@#$....+#@+...............+@@+...$....+#@#+....+#@+.............",
+".+%-=*+.$...++*&,*+...#*=-%+.$.$#*%%%#+...+++#+..$..#&,>%#............$....$..$..+%-=*+$.$...$#%,&@$$.+@=-%#....+#+#++..$+%-=*+......$#%,&@$..+*=-*#..$.+#+##+..",
+"$#&>>-*+....+*-;>%#$.+*=>'-*+.+@&,;;,&@$.#*%%%%@+..+@,'!=*+.$.+.$.+.$...$.+.+...+#&>>-*$.....#%,'-*$..@&>',%+$.#*%%*%*#+$#&>>-*+.$...#%-'-*+.$*=>'=*+..#*%%%%@+.",
+".#%>!'=@.$.+@='!;%+.$#&>))>&#.+%;!))!-*$+@-;;,>%#..+%;'';*+..@**@***#+.+#****@+..#%>!'=*+..$#%;'!=*+.+%;!)!=*$+@=;;-'-%$.#%>!!&#...$#%;''=#.$#&'))>%#.+@=;;,>%#.",
+"$@=;'!,%#.$@&;'';&#.+*,''>!=@.#&'''!'-*.+*,>!>'=@.+@=>!!,&#.@&,,--,,&##*&,,;,-%+$@=;'!;=*+$@&-'!>-%++@=>'!';&++%,>>>';=+.#%;'!=*...#*-'!,%+.$@->'''&+.$*->'>>&+.",
+"#%>!))!=*+#%>!))!-*$#&'!))),*$#='!)))-*+#&'!)))-*+#%>!))!-*+%'!!!!!!>**,'!!!!!,@#&>!))!',@#&>!))!',@#&'!)))';@@='!)!)';@+@-'))-*+$.@-')),*$.$*,')!;%+.$*,')!;%+.",
+"#='!!')>=+#='!!')>=+#='!'')>=+#&'!!')>=+#='!'')>=+#&'!'')'=$&>!!)!!')%&')!'!));**-))!'!)'%*,))!'!)'%*-))!'!)'**,))!'!)'*.#&;!),*$..#&;!),*+..@&;!),*$..@=>!),%+.",
+"@='!!!)',@#='!!!)',@@='!'!)',@@='!!!)',@@='!'!)',@@='!!!)',@&>!!)!!')%=!)>-,>'-@*,))!'!)!%%;))!'!)!%*,))!'!)!%%;))!'!)!%.$@-!),*+..+*=!),*$..+*-!),*+..+*=!),*$.",
+"*,!!!!)',@*,!!!!)',@*,!!!!)',@*,!!!!)',@*,!!!!)',@*,!!!!)',@,!)!)))))%=!)>,,;>-@%;))))))'%%;))))))'%%;))))))'%%;))))))'%.+@=!),%+..$@=!),%+$.$@=!),%#..$*='),%+.",
+"*;)!>>)';*%;)!>>)';@*;)!>>)';@*;)!>>)';@*;)!>>)';@*;)!>>)';*>!!>))!!!%&>!)!!!)'*%;)))!!!'%*;)))!!!'%*;)))!!!'%*;)))!!!'%$@&,!)>=*$+@&,!);=*$$@&,!);=*$+@&,!);=*+",
+"*;))))))'**;))))))'**;))))))>**;))))))'**;))))))>**;))))))'*>!)))))))%@&;'))!'-@@-))))))'%*-))))))'%*-!)))))'%@-))))))'%+%>'))!',#+%>'))!',#+%>'))!',#+%>'))!',#",
+"*='!!!!!>**='!!!'!>*@='!!!'!>*@='!!!'!>**='!!!'!>*@='!!!'!>*='!!''!!;*.#&>))>&@$#%->!!!>,@#%,'!!!>-@+%->!!!>-@#%->!!!>-@+%>'!!!',#+%>'!!!',#+%>'!!!',@+%>'!!!',@",
+"+%-;>>>;=#+*,;>>;;=##%,;>>;;=##%,;>>;;=#+%,;>>;;=##%,;>>;;=#%-;>-,>;%+.#&')!-*$..#*=;>;=%+.#%->>;=%+.#*-;>;=*+.#*=;>;=%++*=;>>>,&++*=;>>>,&++*=;>>>,&++*=;>>>,&+",
+".#@**%**#+.##*****#+.##*****#+.##*****#$$##*****#$.##*****#$+#**@***#..+*&-=*+....$#***@+...+@***#+...+#***@+...$#***@+..+@***%*#$.+@***%*#$.+@*%%**#$.+@*%***#$",
+"$@*****@#....####+....+##+.........#+#$....#**@$.....+#@@++.$.................$..........$.++#+$...$....+@#+.....+#@#.................$+##$$#***#...............",
+"@=,;;,;-%+.+@%===*#..+*&&*#......+@%=%#+..#%-,=*$$..#*=-=&*$..++.++..$...$++....$.........$#%=%#+......#%=-*+.$.#%==%#.$..$++.++.$..$+#%=%#$*-;-%#...$...+$+$+..",
+"%>)))))',#+@&>'''-*+.#=>'-*+$.$.+@=;)-*$.+*,!)>&@..+*,'!>>=+.+@%****#+..+#%%@+....++++++..#%,!;=*+.$.+#%;>!&@..#%,!!-%#..#*%*%%@+...#@&;)-%$&'))-*#....+@*%*%*@+",
+"&'!))))'-@#&>!!)!-*+.#&>!!-*$...#&>!!-*$$#=>!!!-*$$#=>))!>=++@-;>-!-%+.+#&>>&#+..+@%&&&%*+*=;'!>=%#+#*&-'!'-%+#%-'!!!-*+@&,>;,!=*+#*%=>!!;=#%>!)>,=%#+@*=>>->;=@",
+"%>!!!!)';@%>!!!!!,%+$@=>!)'=*++#&>!)!-%+$*-'!!!,&+$@='))!;=++*,'!'!;&+.$*,!)-*+.+*=!'!'';@=>'>'''>%+%;'>>'!!-@%;'!''!',#%;''>>!',@*;''''''>&*,')!!';&+*;'!';!!'&",
+"*;)!'')!'*&>)!!!!>=##&;'))!>-@#&;'))!>-@#&>!))!>-@#&;!))!>-@#&>!))!>-@+@&;!)-&@+*->!!!!!'*,!!>,'!!=#&>!';;)!>*&>)!>>!!'*&>)';>)!>*&>!!>;')'&*,'))))!;*&>)!>;!)!=",
+"*-!)))))!%&>)))!)!>**=)))!))'**=)))!))'**-)))!))'**=)))!))'**-)))!))'*@&,>>>;,=#&'))!))),*,!)>,>))-@%>)!;,!)'*%>)!;,!)'*&>)!;,))'**-!)'>)!'%*,')'>!)'%%;))'>!)'%",
+"*;)!''')!%%;))'>')'**;)!>>')!%*;)!>>')!%%;)!>>')!%%;)!>>')!%*;)!>>')!%%>!))))!>*=!)'!)));*=')',>!)-@*,)!;,')'**;)!;,')'*%;)!;,')'*#&;!!')>-@*,')>;'!!%*='!!>)';*",
+"*;)!;,>)!%*,)!>,')'**;)!,,;)!%%;)!,,;)!%%;)!,,;)!%*;)!,,;)!%*;)!,,;)!%*-;>''>>-@=!)')!!);*&')',;!)-@*-)!;,>)'**,)!;,>)'%*-)!;,>)'*$#=>))!-*$*,')!'!)>*$*-'!!);&+",
+"*;)!>;')'%%,)!>,')'%*;)!>;')'%%;)!>;')'%*;)!>;')'%*;)!>;')'%*;)!>,')'%#*&,''-&*$=')!!!!);@&')';>!),@*-)!>;')'**-)!>;')'%*-)!>;')'%$@=>!);&+.*,'))))!,@.#&>!)'=@.",
+"*-!)!'!!'*&>))'>!)!&*,!)!'!!'**-!)!'!!'**-!)!'!!'**-!)!'!!'**-!)!'!!>*.$*,!!-@+.='))!!)!-@*;!!'!))>*#='!!'!)!&@='!!'!)!&#='!!'!)!&#%>!)),*$.*;')>>;-%+$*-'!);%#.",
+"#&>!)))';#&!))!>)))=#&>!)))',@#&>!)))',@#&>!)))',@#&>!)))',@#&>!)))',@.$#=>'&#..='))))!>%+@=>)))))'*+*,!)))))=+*-')))))=+*-')))))=#=!)))-*..&'))!>&*+.#&!)))-*+.",
+"$@&-,,,=%+*=,,--,,-*+@&-,,,=%+$@&-,,,=%+$@&-,,,=%++@&-,,,=%+$@&-,;,=*+..$@%%@+..-'!;;,-&*$$@&-,,,,=@$#%=,,,,-*.#%=,,,,-*.#%=,;,,-*#&'!!'&@$.*>!!';*$..#&'!!'&#..",
+".$#@***#+.+#***@**@+.$##***@+..$#@***#+..$##***#+..$#@***@+.$$#@***#++..$$#++.$.*&&&%*@#$..$#*****#$..+@****@+..$#****@+..+@*****+$@&==&@$..@%==&%#+..$@&==&@$..",
+"..........#@@+$..................$$$.$............+@%&&&&%*$.....+#$...+#***@#$....+@*#$........$............$.........$............$+$++.$.*&%*@+$.............",
+"....++..$.%,=&#+...$.........$#*%*%%%*#+..+##+....#=''''''=#....#%&*+..#&;;;;%+...$*-;%#.$....+@**#+$..#@@#......$$+++...#@@@#++...+*%%*%*$.,'';&&%*#+..+#$+##..",
+".$.@%%*+..-'>;%#+++$.+@*%%@+..&,;;;;;,=#$#*==*+$..*-))!!));@$++#*;>=@+$*,'!'!=#$$#*=>!-*#+.$.+*=;,&+.+@&--%@$$+*%%%%%%#+@%---&%%*+$*=;,->&@.>))';;;-&@+#%&**&%@+",
+"..#%;'=+..;))!,*#%%#+*=,';,%#.-!)))))!>@$@-''&#...%;))!!));*@%%&-!!,*$+%;')!)-*.@&,;!)>-&+...#&')!;@@%=;!),%@$*-;>;>>>&+%,!!!'>;,*#&>!'');&+;!)!'!)!>%+%,'-=>>&+",
+"..#=!!;#..=>))>%%,>**=>!))!,*+&,;>)!>-&+.@-'!=@$..&;))))));*&;>;;!!>&+*=>')>);&+%>!!))!!>*..+*-'!'=#&;>'!!;;=@&'))))))-#&!)))))))*%,'!'')>-@&;')''))'%#%;)>;)!;@",
+"$.#&>!'*+.%,)!>=-!'*&>)!!)!!,@->>>)!;-&@+@-'!=@+..,!))))))'%=!!!!))!=#->!))!)''*='))))!)!%..#&'!)'=+=!!)))!!'%&>)!''!);@%,'!))!'>*-')))!)!'%&>!)>>!!>*+*,)>'))>*",
+".$@&,!!%+.*=!!',>);*=)!'>!!!'*>!'!))''>&$@-'!-*...-!!!!)))'*&>'!!!!);*>'!))!)!'*=!)!!)>!'%..@=!))'=+-!!!!)!'>%&;)!,;!),*#*=;!!>=%#&;'!!')'>*='));,'!;@+*=!))''-@",
+"+*&,;'!=@.+&>!!>>!=#-)!>;!!!!%,'''))''>&$@-'!-*.$.&'!!!)))>*#%,'!''!>*,>!))')'>*=!)!!)'!'%$.@='!)',@=!!'!)!>=#%;)'-;!),@.+@='!>&#.@=>!'')>-@,!));,>!>*$@=>))>,*+",
+"@='!>'!;%+$@='!!;=*+-)!>,'!!!=*%=;)',=%#.@=!),*+..%,))!!)!-@.#&>!';,>@*&;')>)>-#=')!!)!)'*+#@&;!))'*&')!')!,%+%;)'-;!);*..+*>!>&#.#%>!'')>=+,'')>;>!>*#%-'));&@.",
+"&;)!>>!!=@.+*,!);&@$-)!','!!!=$#%,)'-%#..#&'),&#..*-)!'>!!=+.$@-!!;&*+$*,')>)',#%>)!!)>>;**&=-;!))>*%;)!'!);=#%;)!;>!),*..$@=''=*+$%>!'')>=+*&,!'>'!>@%,>)))>-%+",
+"-!)))))!'&..#&'!),&+&;)!'>!)'%.$*-)!>=#+.+%')!-%#.@=!!!';=*+..#%;'>=*$$@->);')'*@&-;!);=%+,'!))))!;*@-!)!'!!>**;))!)));@$..#%>!'=#$%>!!!);=++@&>)))'=#,!))>!)'=@",
+"-)!''!!)!&..$#&,');*@&,'!'>;=@.$@-!)'=#+.$@=;)!,@++%;!)>=*#....#%>'>%$$@=>!-,''*+#*=')-@++-'!!>>>'>@#%;'>,;!!=*-'>;;!)-@....#='!>*$*,')!);&$.+@=>'',%+-'';-->!!%",
+"&'>,,>>'>%..$$@%;'>*$#%->>=%@$..+%>>,%#...+*='',*$$@=>',*+.$....#=,,*$.+*=,%%,>*..#%>'=+..&;>>,==,-#+#%-=%&;>&#&,-%&;>&+$...+%,>,@.#=;>'!,%$..#*=;,%#.&-,%@*=>>*",
+"@**@*%%%*#....$#*&=#.$+@%*@$$...$#*%*#.....+@%,&#..+#*%*+....$...#**#...+#@##@*+..$@%=*+..#*%*@##@@$.$###+#**#$#@###**#$..$..+@*@$.$#*&=,%#....+#**#..#@#+$+#**+"};
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+interference - decaying sinusoidal waves
+.SH SYNOPSIS
+.B interference
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-count \fInumber\fP]
+[\-gridsize \fInumber\fP]
+[\-delay \fInumber\fP]
+[\-speed \fInumber\fP]
+[\-radius \fInumber\fP]
+[\-ncolors \fInumber\fP]
+[\-color-shift \fInumber\fP]
+[\-no-db]
+.SH DESCRIPTION
+Another color-field hack, this one works by computing decaying sinusoidal
+waves, and allowing them to interfere with each other as their origins
+move.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-count \fInumber\fP
+Number of Waves. 0 - 20. Default: 3.
+.TP 8
+.B \-gridsize \fInumber\fP
+Magnification. 1 - 20. Default: 4.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 30000 (0.03 seconds.).
+.TP 8
+.B \-speed \fInumber\fP
+Wave Speed. 1 - 100. Default: 30.
+.TP 8
+.B \-radius \fInumber\fP
+Wave Size. 50 - 1500. Default: 800.
+.TP 8
+.B \-ncolors \fInumber\fP
+Number of Colors. Default: 128.
+.TP 8
+.B \-color-shift \fInumber\fP
+Color Contrast. 0 - 100. Default: 60.
+.TP 8
+.B \-db | \-no-db
+Whether to double buffer.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Hannu Mallat. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Hannu Mallat.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+juggle - juggling man screen saver.
+.SH SYNOPSIS
+.B juggle
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-count \fInumber\fP]
+[\-trail \fInumber\fP]
+[\-solid]
+.SH DESCRIPTION
+Draws a juggling stick-man.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-count \fInumber\fP
+Speed. 50 - 1000. Default: 150.
+.TP 8
+.B \-trail \fInumber\fP
+Trail Length. 0 - 100. Default: 0.
+.TP 8
+.B \-solid | \-no-solid
+Whether to draw checkered balls.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Tim Auckland. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Tim Auckland.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+kumppa - spiraling, spinning, splashes of color rush toward the screen.
+.SH SYNOPSIS
+.B kumppa
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+[\-speed \fInumber\fP]
+[\-random]
+[\-dbuf]
+.SH DESCRIPTION
+Spiraling, spinning, and very, very fast splashes of color rush toward the
+screen.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.).
+.TP 8
+.B \-speed \fInumber\fP
+Density. 0.0001 - 0.2. Default: 0.1.
+.TP 8
+.B \-random | \-no-random
+Whether to randomize.
+.TP 8
+.B \-dbuf | \-no-dbuf
+Whether to double buffer.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Teemu Suutari. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Teemu Suutari.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+lissie - lissajous figure.
+.SH SYNOPSIS
+.B lissie
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-count \fInumber\fP]
+[\-cycles \fInumber\fP]
+[\-delay \fInumber\fP]
+[\-ncolors \fInumber\fP]
+[\-size \fInumber\fP]
+.SH DESCRIPTION
+Another Lissajous figure. This one draws the progress of circular shapes
+along a path.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-count \fInumber\fP
+Count. 0 - 20. Default: 1.
+.TP 8
+.B \-cycles \fInumber\fP
+Timeout. 0 - 800000. Default: 2000.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.).
+.TP 8
+.B \-ncolors \fInumber\fP
+Number of Colors. Default: 64.
+.TP 8
+.B \-size \fInumber\fP
+Size. -500 to +500. Default: -200.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Alexander Jolk. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Alexander Jolk.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+loop - cellular automaton.
+.SH SYNOPSIS
+.B loop
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-cycles \fInumber\fP]
+[\-delay \fInumber\fP]
+[\-ncolors \fInumber\fP]
+[\-size \fInumber\fP]
+.SH DESCRIPTION
+Another cellular automaton.
+This one produces loop-shaped colonies that spawn, age, and eventually die.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-cycles \fInumber\fP
+Timeout. 0 - 8000. Default: 1600.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 100000 (0.10 seconds.).
+.TP 8
+.B \-ncolors \fInumber\fP
+Number of Colors. Default: 15.
+.TP 8
+.B \-size \fInumber\fP
+Size. -50 - 50. Default: -12.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by David Bagley. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+David Bagley.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+moire2 - circular interference patterns.
+.SH SYNOPSIS
+.B moire2
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+[\-ncolors \fInumber\fP]
+[\-thickness \fInumber\fP]
+.SH DESCRIPTION
+Another example of the fun you can have with moire interference patterns;
+this hack generates fields of concentric circles or ovals, and combines the
+planes with various operations. The planes are moving independently of one
+another, causing the interference lines to ``spray.''
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 50000 (0.05 seconds.).
+.TP 8
+.B \-ncolors \fInumber\fP
+Number of Colors. Default: 150.
+.TP 8
+.B \-thickness \fInumber\fP
+Thickness of lines, in pixels. Default: 0.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Jamie Zawinski. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Jamie Zawinski.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+mountain - random 3D plots that look vaguely mountainous.
+.SH SYNOPSIS
+.B mountain
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-count \fInumber\fP]
+[\-delay \fInumber\fP]
+[\-ncolors \fInumber\fP]
+.SH DESCRIPTION
+Generates random 3d plots that look vaguely mountainous.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-count \fInumber\fP
+Count. 0 - 100. Default: 30.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 0 (0.00 seconds.).
+.TP 8
+.B \-ncolors \fInumber\fP
+Number of colors. Default: 64.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Pascal Pensa. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Pascal Pensa.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+polyominoes - fill a rectangle with irregularly-shaped blocks.
+.SH SYNOPSIS
+.B polyominoes
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-identical]
+[\-cycles \fInumber\fP]
+[\-delay \fInumber\fP]
+[\-ncolors \fInumber\fP]
+.SH DESCRIPTION
+Repeatedly attempts to completely fill a rectangle with irregularly-shaped
+puzzle pieces.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-identical | \-no-identical
+Whether to use identical pieces.
+.TP 8
+.B \-cycles \fInumber\fP
+Duration. 500 - 5000. Default: 2000.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.).
+.TP 8
+.B \-ncolors \fInumber\fP
+Number of Colors. Default: 64.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Stephen Montgomery-Smith. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Stephen Montgomery-Smith.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+ripples - interference patterns.
+.SH SYNOPSIS
+.B ripples
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+[\-rate \fInumber\fP]
+[\-fluidity \fInumber\fP]
+[\-light \fInumber\fP]
+[\-water]
+[\-stir]
+[\-oily]
+[\-colors \fInumber\fP]
+[\-no-shm]
+.SH DESCRIPTION
+This draws rippling interference patterns like splashing water. With the
+-water option, it manipulates your desktop image to look like something is
+dripping into it.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 50000 (0.05 seconds.).
+.TP 8
+.B \-rate \fInumber\fP
+Drizzle. 1 - 100. Default: 5.
+.TP 8
+.B \-fluidity \fInumber\fP
+Small Drops. 0 - 16. Default: 6.
+.TP 8
+.B \-light \fInumber\fP
+Lighting Effect. 0 - 8. Default: 0.
+.TP 8
+.B \-water | \-no-water
+Grab Screen Image. Boolean.
+.TP 8
+.B \-stir | \-no-stir
+Moving Splashes. Boolean.
+.TP 8
+.B \-oily | \-no-oily
+Psychedelic Colors. Boolean.
+.TP 8
+.B \-colors \fInumber\fP
+Colors Two. Default: 200.
+.TP 8
+.B \-shm | \-no-shm
+Use Shared Memory. Boolean.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Tom Hammersley. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Tom Hammersley.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+rotor - screen saver.
+.SH SYNOPSIS
+.B rotor
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-count \fInumber\fP]
+[\-cycles \fInumber\fP]
+[\-delay \fInumber\fP]
+[\-ncolors \fInumber\fP]
+[\-size \fInumber\fP]
+.SH DESCRIPTION
+This draws a line segment moving along a complex spiraling curve.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-count \fInumber\fP
+Count. 0 - 20. Default: 4.
+.TP 8
+.B \-cycles \fInumber\fP
+Length. 2 - 100. Default: 20.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.).
+.TP 8
+.B \-ncolors \fInumber\fP
+Number of Colors. Default: 200.
+.TP 8
+.B \-size \fInumber\fP
+Size. -50 - 50. Default: -6.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Tom Lawrence. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Tom Lawrence.
if (window == RootWindowOfScreen (screen))
strcpy (win, "root window");
else
- sprintf (win, "window 0x%x", (unsigned long) window);
+ sprintf (win, "window 0x%lx", (unsigned long) window);
if (window_p)
- sprintf (why, "-window-id 0x%x", (unsigned long) window);
+ sprintf (why, "-window-id 0x%lx", (unsigned long) window);
else
strcpy (why, "-root");
{
fprintf (stderr, "%s: ignoring `-visual %s' because of `%s'.\n",
progname, visual_string, why);
- fprintf (stderr, "%s: using %s's visual 0x%x.\n",
+ fprintf (stderr, "%s: using %s's visual 0x%lx.\n",
progname, win, XVisualIDFromVisual (visual));
}
free (visual_string);
{
fprintf (stderr, "%s: ignoring `-install' because of `%s'.\n",
progname, why);
- fprintf (stderr, "%s: using %s's colormap 0x%x.\n",
+ fprintf (stderr, "%s: using %s's colormap 0x%lx.\n",
progname, win, (unsigned long) cmap);
}
xgwa.your_event_mask |= KeyPressMask;
XSelectInput (dpy, window, xgwa.your_event_mask);
- /* Select ButtonPress events on the external window, if no other
- app has already selected it (only one app can select ButtonPress
- at a time: BadAccess results.)
+ /* Select ButtonPress and ButtonRelease events on the external window,
+ if no other app has already selected them (only one app can select
+ ButtonPress at a time: BadAccess results.)
*/
- if (! (xgwa.all_event_masks & ButtonPressMask))
- XSelectInput (dpy, window, xgwa.your_event_mask | ButtonPressMask);
+ if (! (xgwa.all_event_masks & (ButtonPressMask | ButtonReleaseMask)))
+ XSelectInput (dpy, window,
+ (xgwa.your_event_mask |
+ ButtonPressMask | ButtonReleaseMask));
}
else if (root_p)
{
XWindowAttributes xgwa;
XGetWindowAttributes (dpy, window, &xgwa);
XSelectInput (dpy, window,
- xgwa.your_event_mask | KeyPressMask | ButtonPressMask);
+ (xgwa.your_event_mask | KeyPressMask |
+ ButtonPressMask | ButtonReleaseMask));
XChangeProperty (dpy, window, XA_WM_PROTOCOLS, XA_ATOM, 32,
PropModeReplace,
(unsigned char *) &XA_WM_DELETE_WINDOW, 1);
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+shadebobs - oscilating vapor trails.
+.SH SYNOPSIS
+.B shadebobs
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-ncolors \fInumber\fP]
+[\-count \fInumber\fP]
+[\-delay \fInumber\fP]
+[\-cycles \fInumber\fP]
+.SH DESCRIPTION
+This draws smoothly-shaded oscilating oval patterns, that look something
+like vapor trails or neon tubes.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-ncolors \fInumber\fP
+Number of Colors. Default: 64.
+.TP 8
+.B \-count \fInumber\fP
+Count. 0 - 20. Default: 4.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 5000 (0.01 seconds.).
+.TP 8
+.B \-cycles \fInumber\fP
+Duration. 0 - 100. Default: 10.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Shane Smit. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Shane Smit.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+thornbird - Bird in a Thornbush fractal.
+.SH SYNOPSIS
+.B thornbird
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-count \fInumber\fP]
+[\-cycles \fInumber\fP]
+[\-delay \fInumber\fP]
+[\-ncolors \fInumber\fP]
+.SH DESCRIPTION
+Displays a view of the "Bird in a Thornbush" fractal.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-count \fInumber\fP
+Points. 10 - 1000. Default: 800.
+.TP 8
+.B \-cycles \fInumber\fP
+Thickness. 2 - 500. Default: 16.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.).
+.TP 8
+.B \-ncolors \fInumber\fP
+Number of Colors. Default: 64.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Tim Auckland. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Tim Auckland.
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+triangle - random mountains using iterative subdivision of triangles.
+.SH SYNOPSIS
+.B triangle
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+[\-ncolors \fInumber\fP]
+.SH DESCRIPTION
+Generates random mountain ranges using iterative subdivision of triangles.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.).
+.TP 8
+.B \-ncolors \fInumber\fP
+Number of Colors. Default: 128.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Tobias Gloth. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Tobias Gloth.
--- /dev/null
+.TH XScreenSaver 1 "27-May-97" "X Version 11"
+.SH NAME
+truchet - draws curved or angular Truchet patterns
+.SH SYNOPSIS
+.B truchet
+[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP]
+[\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-delay \fImicroseconds\fP]
+[\-min\-width \fIinteger\fP] [\-min-height \fIinteger\fP] [\-max-width \fIinteger\fP]
+[\-max-height \fIinteger\fP] [\-max\-linewidth \fIinteger\fP] [\-min-linewidth \fIinteger\fP]
+[\-erase] [\-no\-erase] [\-erase\-count \fIinteger\fP] [\-square] [\-not\-square] [\-curves]
+[\-no\-curves] [\-angle] [\-no\-angles] [\-scroll] [\-scroll\-overlap \fIinteger\fP]
+[\-anim\-delay \fIinteger\fP] [\-anim\-step\-size \fIinteger\fP]
+
+.SH DESCRIPTION
+The \fItruchet\fP program draws arc and line based Truchet patterns.
+.SH OPTIONS
+.l truchet
+accepts the following options:
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-mono
+If on a color display, pretend we're on a monochrome display.
+.TP 8
+.B \-install
+Install a private colormap for the window.
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+
+.TP 8
+.B \-delay \fImicroseconds\fP
+How long to wait between drawing each screenful. Default is 3 seconds.
+
+.TP 8
+.B \-min-width \fIinteger\fP
+The minimum width in pixels of each square. Default is 40.
+
+.TP 8
+.B \-min-height \fIinteger\fP
+The minimum height in pixels of each square. Default is 40.
+
+.TP 8
+.B \-max-width \fIinteger\fP
+The maximum width in pixels of each square. Default is 150.
+
+.TP 8
+.B \-max-height \fIinteger\fP
+The maximum height in pixels of each square. Default is 150.
+
+.TP 8
+.B \-max-linewidth \fIinteger\fP
+The maximum width of the lines used to draw. Default is 25.
+
+.TP 8
+.B \-min-linewidth \fIinteger\fP
+The minimum width of the lines used to draw. Default is 2.
+
+.TP 8
+.B \-erase
+
+.TP 8
+.B \-no-erase
+Whether to clear the screen after each screenful is drawn. Default is True (erase).
+
+.TP 8
+.B \-erase-count \fIinteger\fP
+The number of screenfuls to draw before erasing. Default is 25.
+
+.TP 8
+.B \-square
+
+.TP 8
+.B \-not-square
+Whether to force the tiles to be square. Defualt is False (not-square).
+
+.TP 8
+.B \-curves
+
+.TP 8
+.B \-no-curves
+Whether to draw the arc based Truchet pattern. Default is True (curves).
+
+.TP 8
+.B \-angles
+
+.TP 8
+.B \-no-angles
+Whether or not to draw the line based Truchet pattern. Default is True (angles)
+
+.TP 8
+.B \-scroll
+Use the scroll mode. Default is False.
+
+.TP 8
+.B \-scroll-overlap
+The amount to scroll from one side to another. Default is 400.
+
+.TP 8
+.B \-anim-delay
+The time to pause between each animation step. Default is 100.
+
+.TP 8
+.B \-anim-step-size
+The amount of steps to skip between each animation step. Default is 3.
+
+
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 1998 by Adrian Likins.
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation.
+.SH AUTHOR
+Adrian Likins, 1998.
+
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+vermiculate - to move in a worm-like manner.
+.SH SYNOPSIS
+.B vermiculate
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+.SH DESCRIPTION
+Draws squiggly worm-like paths.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Tyler Pierce. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Tyler Pierce.
use strict;
my $progname = $0; $progname =~ s@.*/@@g;
-my $version = q{ $Revision: 1.19 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
+my $version = q{ $Revision: 1.20 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
my $verbose = 0;
my $use_stdin = 0;
# "xsri -scale -keep-aspect -center-horizontal -center-vertical",
);
+# apparently some versions of netpbm call it "pamoil" instead of "pgmoil"...
+#
+my $pgmoil = (which("pamoil") ? "pamoil" : "pgmoil");
+
# List of interesting PPM filter pipelines.
# In this list, the following magic words may be used:
my @filters = (
"ppmtopgm FILE1 | pgmedge | pgmtoppm COLORS | ppmnorm",
"ppmtopgm FILE1 | pgmenhance | pgmtoppm COLORS",
- "ppmtopgm FILE1 | pgmoil | pgmtoppm COLORS",
+ "ppmtopgm FILE1 | $pgmoil | pgmtoppm COLORS",
"ppmtopgm FILE1 | pgmbentley | pgmtoppm COLORS",
"ppmrelief FILE1 | ppmtopgm | pgmedge | ppmrelief | ppmtopgm |" .
" pnmflip -tb FILE3 | ppmnorm > FILE2 ; " .
" pnmarith -multiply FILE1 FILE2",
- "ppmshift 30 FILE1 | ppmtopgm | pgmoil | pgmedge | " .
+ "ppmshift 30 FILE1 | ppmtopgm | $pgmoil | pgmedge | " .
" pgmtoppm COLORS > FILE2 ; " .
" pnmarith -difference FILE1 FILE2",
}
+# returns the full path of the named program, or undef.
+#
+sub which {
+ my ($prog) = @_;
+ foreach (split (/:/, $ENV{PATH})) {
+ if (-x "$_/$prog") {
+ return $prog;
+ }
+ }
+ return undef;
+}
+
+
# Choose random foreground and background colors
#
sub randcolors {
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+wander - colorful random-walk.
+.SH SYNOPSIS
+.B wander
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-density \fInumber\fP]
+[\-reset \fInumber\fP]
+[\-length \fInumber\fP]
+[\-delay \fInumber\fP]
+[\-circles]
+[\-size \fInumber\fP]
+[\-advance \fInumber\fP]
+.SH DESCRIPTION
+Draws a colorful random-walk, in various forms.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-density \fInumber\fP
+Density. 1 - 30. Default: 2.
+.TP 8
+.B \-reset \fInumber\fP
+Number of frames before resetting. Default: 2500000.
+.TP 8
+.B \-length \fInumber\fP
+Number of iterations. Default: 25000.
+.TP 8
+.B \-delay \fInumber\fP
+Sustain. 0 - 60. Default: 1.
+.TP 8
+.B \-circles | \-no-circles
+Whether to draw spots.
+.TP 8
+.B \-size \fInumber\fP
+Size. 0 - 100. Default: 1.
+.TP 8
+.B \-advance \fInumber\fP
+Color Contrast. 1 - 100. Default: 1.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Rick Campbell. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Rick Campbell.
my $progname = $0; $progname =~ s@.*/@@g;
-my $version = q{ $Revision: 1.90 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
+my $version = q{ $Revision: 1.93 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
my $copyright = "WebCollage $version, Copyright (c) 1999-2002" .
" Jamie Zawinski <jwz\@jwz.org>\n" .
" http://www.jwz.org/xscreensaver/\n";
"yimg.com" => 1, # This is where dailynews.yahoo.com stores
"eimg.com" => 1, # its images, so pick_from_yahoo_news_text()
# hits this every time.
+
+ "driftnet" => 1, # builtin...
);
my $no_output_p = 0;
my $urls_only_p = 0;
+my @pids_to_kill = (); # forked pids we should kill when we exit, if any.
+
+my $driftnet_magic = 'driftnet';
+my $driftnet_dir = undef;
+my $default_driftnet_cmd = "driftnet -a -m 100";
+
my $wordlist;
my %rejected_urls;
my ( $url, $referer, $timeout ) = @_;
my $start = time;
+ if (defined($referer) && $referer eq $driftnet_magic) {
+ return get_driftnet_file ($url);
+ }
+
my $orig_url = $url;
my $loop_count = 0;
my $max_loop_count = 4;
foreach my $u (@subpages) {
# altavista is encoding their URLs now.
- next unless ($u =~
- m@^/r\?ck_sm=[a-zA-Z0-9]+\&ref=[a-zA-Z0-9]+(\&uid=[a-zA-Z0-9]+)?\&r=(.*)@);
- $u = url_unquote($2);
+ next unless ($u =~ m@^/r.*\&r=([^&]+).*@);
+ $u = url_unquote($1);
next unless ($u =~ m@^http://@i); # skip non-HTTP or relative URLs
next if ($u =~ m@[/.]altavista\.com\b@i); # skip altavista builtins
# onMouseOver to make it look like they're not! Well, it makes it
# easier for us to identify search results...
#
- next unless ($u =~
- m@^/r\?ck_sm=[a-zA-Z0-9]+\&ref=[a-zA-Z0-9]+\&uid=[a-zA-Z0-9]+\&r=(.*)@);
+ next unless ($u =~ m@^/r.*\&r=([^&]+).*@);
$u = url_unquote($1);
LOG ($verbose_filter, " candidate: $u");
# Lycos plays exact the same redirection game as hotbot.
# Note that "id=0" is used for internal advertising links,
# and 1+ are used for search results.
- next unless ($u =~ m@^http://click.hotbot.com/director.asp\?id=[1-9]\d*&target=([^&]+)@);
+ next unless ($u =~ m@^http://click.hotbot.com/director.asp
+ .*
+ [?&]id=[1-9]\d*
+ .*
+ \&target=([^&]+)
+ .*
+ @x);
$u = url_decode($1);
LOG ($verbose_filter, " candidate: $u");
+\f
+############################################################################
+#
+# Pick images by waiting for driftnet to populate a temp dir with files.
+# Requires driftnet version 0.1.5 or later.
+# (Driftnet is a program by Chris Lightfoot that sniffs your local ethernet
+# for images being downloaded by others.)
+# Driftnet/webcollage integration by jwz.
+#
+############################################################################
+
+# driftnet
+sub pick_from_driftnet {
+ my ( $timeout ) = @_;
+
+ my $id = $driftnet_magic;
+ my $dir = $driftnet_dir;
+ my $start = time;
+ my $now;
+
+ error ("\$driftnet_dir unset?") unless ($dir);
+ $dir =~ s@/+$@@;
+
+ error ("$dir unreadable") unless (-d "$dir/.");
+
+ $timeout = $http_timeout unless ($timeout);
+ $last_search = $id;
+
+ while ($now = time, $now < $start + $timeout) {
+ local *DIR;
+ opendir (DIR, $dir) || error ("$dir: $!");
+ while (my $file = readdir(DIR)) {
+ next if ($file =~ m/^\./);
+ $file = "$dir/$file";
+ closedir DIR;
+ LOG ($verbose_load, "picked file $file ($id)");
+ return ($id, $file);
+ }
+ closedir DIR;
+ }
+ LOG (($verbose_net || $verbose_load), "timed out for $id");
+ return ();
+}
+
+
+sub get_driftnet_file {
+ my ($file) = @_;
+
+ error ("\$driftnet_dir unset?") unless ($driftnet_dir);
+
+ my $id = $driftnet_magic;
+ my $re = qr/$driftnet_dir/;
+ error ("$id: $file not in $driftnet_dir?")
+ unless ($file =~ m@^$re@o);
+
+ local *IN;
+ open (IN, $file) || error ("$id: $file: $!");
+ my $body = '';
+ while (<IN>) { $body .= $_; }
+ close IN;
+ unlink ($file);
+ return ($id, $body);
+}
+
+
+sub spawn_driftnet {
+ my ($cmd) = @_;
+
+ # make a directory to use.
+ while (1) {
+ my $tmp = $ENV{TEMPDIR} || "/tmp";
+ $driftnet_dir = sprintf ("$tmp/driftcollage-%08x", rand(0xffffffff));
+ LOG ($verbose_exec, "mkdir $driftnet_dir");
+ last if mkdir ($driftnet_dir, 0700);
+ }
+
+ if (! ($cmd =~ m/\s/)) {
+ # if the command didn't have any arguments in it, then it must be just
+ # a pointer to the executable. Append the default args to it.
+ my $dargs = $default_driftnet_cmd;
+ $dargs =~ s/^[^\s]+//;
+ $cmd .= $dargs;
+ }
+
+ # point the driftnet command at our newly-minted private directory.
+ #
+ $cmd .= " -d $driftnet_dir";
+ $cmd .= ">/dev/null" unless ($verbose_exec);
+
+ my $pid = fork();
+ if ($pid < 0) { error ("fork: $!\n"); }
+ if ($pid) {
+ # parent fork
+ push @pids_to_kill, $pid;
+ LOG ($verbose_exec, "forked for \"$cmd\"");
+ } else {
+ # child fork
+ nontrapping_system ($cmd) || error ("exec: $!");
+ }
+
+ # wait a bit, then make sure the process actually started up.
+ #
+ sleep (1);
+ error ("pid $pid failed to start \"$cmd\"")
+ unless (1 == kill (0, $pid));
+}
+
\f
############################################################################
#
# Picks a random image on a random page, and returns two URLs:
# the page containing the image, and the image.
# Returns () if nothing found this time.
-# Uses the url-randomizer 1 time in 5, else the image randomizer.
#
sub pick_image {
$_ = $url;
my ($site) = m@^http://([^ \t\n\r/:]+)@;
+ if ($base eq $driftnet_magic) {
+ $site = $driftnet_magic;
+ @recent_images = ();
+ }
+
my $done = 0;
foreach (@recent_images) {
if ($_ eq $url) {
}
+sub signal_cleanup {
+ my ($sig) = @_;
+ print STDERR blurb() . (defined($sig)
+ ? "caught signal $sig."
+ : "exiting.")
+ . "\n"
+ if ($verbose_exec);
+
+ x_cleanup();
+
+ if (@pids_to_kill) {
+ print STDERR blurb() . "killing: " . join(' ', @pids_to_kill) . "\n";
+ kill ('TERM', @pids_to_kill);
+ }
+
+ exit 1;
+}
+
##############################################################################
#
# Generating a list of urls only
my $delay = 2;
-
sub x_cleanup {
- my ($sig) = @_;
- print STDERR blurb() . "caught signal $sig.\n" if ($verbose_exec);
unlink $image_ppm, $image_tmp1, $image_tmp2;
- exit 1;
}
#
$ppm_to_root_window_cmd = pick_root_displayer();
-
- $SIG{HUP} = \&x_cleanup;
- $SIG{INT} = \&x_cleanup;
- $SIG{QUIT} = \&x_cleanup;
- $SIG{ABRT} = \&x_cleanup;
- $SIG{KILL} = \&x_cleanup;
- $SIG{TERM} = \&x_cleanup;
-
- # Need this so that if giftopnm dies, we don't die.
- $SIG{PIPE} = 'IGNORE';
-
if (!$img_width || !$img_height) {
$_ = "xdpyinfo";
which ($_) || error "$_ not found on \$PATH.";
}
+sub init_signals {
+
+ $SIG{HUP} = \&signal_cleanup;
+ $SIG{INT} = \&signal_cleanup;
+ $SIG{QUIT} = \&signal_cleanup;
+ $SIG{ABRT} = \&signal_cleanup;
+ $SIG{KILL} = \&signal_cleanup;
+ $SIG{TERM} = \&signal_cleanup;
+
+ # Need this so that if giftopnm dies, we don't die.
+ $SIG{PIPE} = 'IGNORE';
+}
+
+END { signal_cleanup(); }
+
+
sub main {
$| = 1;
srand(time ^ $$);
my $verbose = 0;
my $dict;
+ my $driftnet_cmd = 0;
$current_state = "init";
$load_method = "none";
$http_proxy = shift @ARGV;
} elsif ($_ eq "-dictionary" || $_ eq "-dict") {
$dict = shift @ARGV;
+ } elsif ($_ eq "-driftnet" || $_ eq "--driftnet") {
+ @search_methods = ( 100, "driftnet", \&pick_from_driftnet );
+ if (! ($ARGV[0] =~ m/^-/)) {
+ $driftnet_cmd = shift @ARGV;
+ } else {
+ $driftnet_cmd = $default_driftnet_cmd;
+ }
} elsif ($_ eq "-debug" || $_ eq "--debug") {
my $which = shift @ARGV;
my @rest = @search_methods;
LOG (1, "DEBUG: using only \"$which\"");
} else {
- print STDERR "$copyright\nusage: $progname [-root]" .
- " [-display dpy] [-root] [-verbose] [-timeout secs]\n" .
- "\t\t [-delay secs] [-filter cmd] [-filter2 cmd]\n" .
- "\t\t [-dictionary dictionary-file]\n" .
- "\t\t [-http-proxy host[:port]]\n";
+ print STDERR "$copyright\nusage: $progname " .
+ "[-root] [-display dpy] [-verbose] [-debug which]\n" .
+ "\t\t [-timeout secs] [-delay secs] [-filter cmd] [-filter2 cmd]\n" .
+ "\t\t [-no-output] [-urls-only] [-background color] [-size WxH]\n" .
+ "\t\t [-dictionary dictionary-file] [-http-proxy host[:port]]\n" .
+ "\t\t [-driftnet [driftnet-program-and-args]]\n" .
+ "\n";
exit 1;
}
}
pick_dictionary();
}
+ init_signals();
+
+ spawn_driftnet ($driftnet_cmd) if ($driftnet_cmd);
+
if ($urls_only_p) {
url_only_output;
} else {
static void add_jpeg_comment (struct jpeg_compress_struct *cinfo);
static void write_pixbuf (GdkPixbuf *pb, const char *file);
+static GdkPixbuf *
+load_pixbuf (const char *file)
+{
+ GdkPixbuf *pb;
+#ifdef HAVE_GTK2
+ GError *err = NULL;
+
+ pb = gdk_pixbuf_new_from_file (file, &err);
+#else /* !HAVE_GTK2 */
+ pb = gdk_pixbuf_new_from_file (file);
+#endif /* HAVE_GTK2 */
+
+ if (!pb)
+ {
+#ifdef HAVE_GTK2
+ fprintf (stderr, "%s: %s\n", progname, err->message);
+ g_error_free (err);
+#else /* !HAVE_GTK2 */
+ fprintf (stderr, "%s: unable to load %s\n", progname, file);
+#endif /* !HAVE_GTK2 */
+ exit (1);
+ }
+
+ return pb;
+}
static void
paste (const char *paste_file,
int paste_w, paste_h;
int base_w, base_h;
- paste_pb = gdk_pixbuf_new_from_file (paste_file);
-
- if (!paste_pb)
- {
- fprintf (stderr, "%s: unable to load %s\n", progname, paste_file);
- exit (1);
- }
-
- base_pb = gdk_pixbuf_new_from_file (base_file);
- if (!base_pb)
- {
- fprintf (stderr, "%s: unable to load %s\n", progname, base_file);
- exit (1);
- }
+ paste_pb = load_pixbuf (paste_file);
+ base_pb = load_pixbuf (base_file);
paste_w = gdk_pixbuf_get_width (paste_pb);
paste_h = gdk_pixbuf_get_height (paste_pb);
if (channels != 3)
{
- fprintf (stderr, "%s: %d channels?\n", progname);
+ fprintf (stderr, "%s: %d channels?\n", progname, channels);
exit (1);
}
if (w < 0) usage();
if (h < 0) usage();
+#ifdef HAVE_GTK2
+ g_type_init ();
+#endif /* HAVE_GTK2 */
+
paste (paste_file, base_file,
from_scale, opacity,
from_x, from_y, to_x, to_y,
webcollage - decorate the screen with random images from the web
.SH SYNOPSIS
.B webcollage
-[\-display \fIhost:display.screen\fP] [\-root] [\-verbose]
-[\-delay \fIsecs\fP] [\-timeout \fIsecs\fP] [\-background \fIbg\fP]
-[\-filter \fIcommand\fP] [\-filter2 \fIcommand\fP]
+[\-display \fIhost:display.screen\fP]
+[\-root]
+[\-verbose]
+[\-timeout \fIsecs\fP]
+[\-delay \fIsecs\fP]
+[\-background \fIbg\fP]
+[\-no-output]
+[\-urls-only]
+[\-size \fIWxH\fP]
+[\-filter \fIcommand\fP]
+[\-filter2 \fIcommand\fP]
[\-http\-proxy host[:port]]
+[\-dictionary \fIdictionary-file\fP]
+[\-driftnet [\fIcmd\fP]]
.SH DESCRIPTION
The \fIwebcollage\fP program pulls random image off of the World Wide Web
and scatters them on the root window. One satisfied customer described it
\fIwebcollage\fP is written in
.BR perl (1)
and requires Perl 5.
+
+It will be an order of magnitude faster if you also have
+the \fIwebcollage-helper\fP program installed (a GDK/JPEG image
+compositor), but \fIwebcollage\fP works without it as well.
.SH OPTIONS
.I webcollage
accepts the following options:
.TP 8
.B \-root
-Draw on the root window. This option is manditory: drawing to a window
-other than the root window is not yet supported.
+Draw on the root window. This option is manditory, if output is being
+produced: drawing to a window other than the root window is not yet
+supported.
.TP 8
.B \-verbose \fRor\fP \-v
Print diagnostics to stderr. Multiple \fI-v\fP switches increase the
-amount of output. \fI-v\fP will print out only the URLs of the
-images; \fI-vv\fP will print all the commands being run; and \fI-vvv\fP
-will print more than you care about.
+amount of output. \fI-v\fP will print out the URLs of the images,
+and where they were placed; \fI-vv\fP will print out any warnings,
+and all URLs being loaded; \fI-vvv\fP will print information on
+what URLs were rejected; and so on.
+.TP 8
+.B \-timeout \fIseconds\fP
+How long to wait for a URL to complete before giving up on it and
+moving on to the next one.
+Default 30 seconds.
.TP 8
.B \-delay \fIseconds\fP
-How long to sleep between images. Default 1 second. (Remember that
+How long to sleep between images. Default 2 seconds. (Remember that
this program probably spends a lot of time waiting for the network.)
.TP 8
.B \-background \fIcolor-or-ppm\fP
a color name, a hexadecimal RGB specification in the form '#rrggbb', or
the name of a PPM file.
.TP 8
-.B \-timeout \fIseconds\fP
-How long to wait for a URL to complete before giving up on it and
-moving on to the next one.
-Default 30 seconds.
+.B \-size \fIWxH\fP
+Normally, the output image will be made to be the size of the screen.
+This lets you specify the desired size.
+.TP 8
+.B \-no-output
+If this option is specified, then no composite output image will be
+generated. This is only useful when used in conjunction
+with \fB\-verbose\fP.
+.TP 8
+.B \-urls-only
+If this option is specified, then no composite output image will be
+generated: instead, a list of image URLs will be printed on stdout.
.TP 8
.B \-filter \fIcommand\fP
Filter all source images through this command. The command must take
If you must go through a proxy to connect to the web, you can specify it
with this option, or with the \fB$http_proxy\fP or \fB$HTTP_PROXY\fP
environment variables.
+.TP 8
+.B \-dictionary \fIfile\fP
+Webcollage normally looks at the system's default spell-check dictionary
+to generate words to feed into the search engines. You can specify an
+alternate dictionary with this option.
+.TP 8
+.B \-driftnet \fI[ args ]\fP
+.BR driftnet (1)
+is a program that snoops your local ethernet for packets that look
+like they might be image files. It can be used in conjunction
+with \fIwebcollage\fP to generate a collage of what other people on
+your network are looking at, instead of a search-engine collage.
+If you have \fIdriftnet\fP installed on your $PATH, just use
+the \fI\-driftnet\fP option. You can also specify the location
+of the program like this:
+.EX
+-driftnet /path/to/driftnet
+.EE
+or, you can provide extra arguments like this:
+.EX
+-driftnet '/path/to/driftnet -extra -args'
+.EE
+Driftnet version 0.1.5 or later is required. Note that
+the \fIdriftnet\fP program requires root access, so you'll have
+to make \fIdriftnet\fP be setuid-root for this to work.
+Please exercise caution.
.SH ENVIRONMENT
.PP
.TP 8
.BR xscreensaver (1)
manual for more details.)
-Only the GIF and JPEG image formats are supported.
-
-Transparent and animating GIFs are not supported.
-
-It's slow.
+Animating GIFs are not supported.
Too many of the images that it finds are text, not pictures. This is
because most of the web is pictures of text. Which is pretty sad.
.BR xdpyinfo (1),
.BR perl (1),
.BR vidwhacker (1),
-.BR dadadodo (1)
+.BR dadadodo (1),
+.BR driftnet (1)
.SH COPYRIGHT
-Copyright \(co 1998, 1999 by Jamie Zawinski. Permission to use, copy, modify,
+Copyright \(co 1998-2002 by Jamie Zawinski. Permission to use, copy, modify,
distribute, and sell this software and its documentation for any purpose is
hereby granted without fee, provided that the above copyright notice appear
in all copies and that both that copyright notice and this permission notice
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+worm - multicolored worms that crawl around the screen.
+.SH SYNOPSIS
+.B worm
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-count \fInumber\fP]
+[\-delay \fInumber\fP]
+[\-ncolors \fInumber\fP]
+[\-size \fInumber\fP]
+.SH DESCRIPTION
+An ancient hack that draws multicolored worms that crawl around the screen.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-count \fInumber\fP
+Count. -100 - 100. Default: -20.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 17000 (0.02 seconds.).
+.TP 8
+.B \-ncolors \fInumber\fP
+Number of Colors. Default: 150.
+.TP 8
+.B \-size \fInumber\fP
+Size. -20 - 20. Default: -3.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Brad Taylor, Dave Lemke, Boris Putanec, and
+Henrik Theiling. Permission to use, copy, modify, distribute, and sell
+this software and its documentation for any purpose is hereby granted
+without fee, provided that the above copyright notice appear in all
+copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about
+the suitability of this software for any purpose. It is provided "as
+is" without express or implied warranty.
+.SH AUTHOR
+Brad Taylor, Dave Lemke, Boris Putanec, and Henrik Theiling.
/* xlockmore.c --- xscreensaver compatibility layer for xlockmore modules.
- * xscreensaver, Copyright (c) 1997, 1998, 2001 Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 1997, 1998, 2001, 2002
+ * Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
static void
xlockmore_handle_events (ModeInfo *mi,
- void (*reshape) (ModeInfo *, int, int))
+ void (*reshape) (ModeInfo *, int, int),
+ Bool (*hook) (ModeInfo *, XEvent *))
{
while (XPending (mi->dpy))
{
XGetWindowAttributes (mi->dpy, mi->window, &mi->xgwa);
reshape (mi, mi->xgwa.width, mi->xgwa.height);
}
+ else if (hook && hook (mi, &event))
+ {
+ }
else
{
screenhack_handle_event (mi->dpy, &event);
Bool want_uniform_colors,
Bool want_smooth_colors,
Bool want_bright_colors,
+ unsigned long event_mask,
void (*hack_init) (ModeInfo *),
void (*hack_draw) (ModeInfo *),
void (*hack_reshape) (ModeInfo *, int, int),
+ Bool (*hack_handle_events) (ModeInfo *, XEvent *),
void (*hack_free) (ModeInfo *))
{
ModeInfo mi;
int i;
time_t start, now;
int orig_pause;
+ Bool root_p;
memset(&mi, 0, sizeof(mi));
mi.dpy = dpy;
mi.window = window;
XGetWindowAttributes (dpy, window, &mi.xgwa);
+ root_p = (window == RootWindowOfScreen (mi.xgwa.screen));
+
+ /* If this is the root window, don't allow ButtonPress to be selected.
+ Bad Things Happen. */
+ if (root_p)
+ event_mask &= (~(ButtonPressMask|ButtonReleaseMask));
+
+ /* If this hack wants additional events, select them. */
+ if (event_mask && ! (mi.xgwa.your_event_mask & event_mask))
+ XSelectInput (dpy, window, (mi.xgwa.your_event_mask | event_mask));
color.flags = DoRed|DoGreen|DoBlue;
color.red = color.green = color.blue = 0;
mi.xgwa.colormap);
mi.wireframe_p = get_boolean_resource ("wireframe", "Boolean");
- mi.root_p = (window == RootWindowOfScreen (mi.xgwa.screen));
+ mi.root_p = root_p;
mi.fps_p = get_boolean_resource ("showFPS", "Boolean");
#ifdef HAVE_XSHM_EXTENSION
mi.use_shm = get_boolean_resource ("useSHM", "Boolean");
do {
hack_draw (&mi);
XSync(dpy, False);
- xlockmore_handle_events (&mi, hack_reshape);
+ xlockmore_handle_events (&mi, hack_reshape, hack_handle_events);
if (mi.pause)
usleep(mi.pause);
mi.pause = orig_pause;
/* xlockmore.h --- xscreensaver compatibility layer for xlockmore modules.
- * xscreensaver, Copyright (c) 1997, 1998, 2001 Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 1997-2002 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
# define HACK_RESHAPE 0
#endif
+#ifdef HACK_HANDLE_EVENT
+ extern Bool HACK_HANDLE_EVENT(ModeInfo *, XEvent *e);
+#else
+# define HACK_HANDLE_EVENT 0
+#endif
+
/* Emit code for the entrypoint used by screenhack.c, and pass control
down into xlockmore.c with the appropriate parameters.
False,
#endif
+#ifdef EVENT_MASK
+ EVENT_MASK,
+#else
+ 0,
+#endif
+
HACK_INIT,
HACK_DRAW,
HACK_RESHAPE,
+ HACK_HANDLE_EVENT,
HACK_FREE);
}
/* xlockmore.h --- xscreensaver compatibility layer for xlockmore modules.
- * xscreensaver, Copyright (c) 1997, 1998, 2001 Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 1997-2002 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
Bool want_uniform_colors,
Bool want_smooth_colors,
Bool want_bright_colors,
+ unsigned long event_mask,
void (*hack_init) (ModeInfo *),
void (*hack_draw) (ModeInfo *),
void (*hack_reshape) (ModeInfo *, int, int),
+ Bool (*hack_handle_events) (ModeInfo *,
+ XEvent *),
void (*hack_free) (ModeInfo *));
#endif /* __XLOCKMORE_INTERNAL_H__ */
176,177,178,195,180,181,182,183,184,185,186,187,188,189,190,191 /* 240 */
};
+#define CURSOR_GLYPH 97
+
typedef enum { TRACE0, TRACE1, TRACE2,
KNOCK0, KNOCK1, KNOCK2, KNOCK3,
KNOCK4, KNOCK5, KNOCK6, KNOCK7,
int grid_width, grid_height;
int char_width, char_height;
m_cell *cells;
+ m_cell *cursor;
m_feeder *feeders;
int nspinners;
Bool small_p;
state->cells = (m_cell *)
calloc (sizeof(m_cell), state->grid_width * state->grid_height);
+ state->cursor = NULL;
state->feeders = (m_feeder *) calloc (sizeof(m_feeder), state->grid_width);
state->density = get_integer_resource ("density", "Integer");
}
}
+
+static void
+redraw_cells (m_state *state, Bool active)
+{
+ int x, y;
+ int count = 0;
+
+ for (y = 0; y < state->grid_height; y++)
+ for (x = 0; x < state->grid_width; x++)
+ {
+ m_cell *cell = &state->cells[state->grid_width * y + x];
+
+ if (cell->glyph)
+ count++;
+
+ if (state->mode == TRACE2 && active)
+ {
+ int xx = x % strlen(state->tracing);
+ Bool dead_p = state->tracing[xx] > 0;
+
+ if (y == 0 && x == xx)
+ cell->glyph = (dead_p
+ ? state->glyph_map[state->tracing[xx]-'0'] + 1
+ : 0);
+ else if (y == 0)
+ cell->glyph = 0;
+ else
+ cell->glyph = (dead_p ? 0 :
+ (state->glyph_map[(random()%state->nglyphs)]
+ + 1));
+
+ cell->changed = 1;
+ }
+
+ if (!cell->changed)
+ continue;
+
+ if (cell->glyph == 0 && cell != state->cursor)
+ XFillRectangle (state->dpy, state->window, state->erase_gc,
+ x * state->char_width,
+ y * state->char_height,
+ state->char_width,
+ state->char_height);
+ else
+ {
+ int g = (cell == state->cursor ? CURSOR_GLYPH : cell->glyph);
+ int cx = (g - 1) % CHAR_COLS;
+ int cy = (g - 1) / CHAR_COLS;
+ int map = ((cell->glow > 0 || cell->spinner) ? GLOW_MAP :
+ (cell->glow < 0) ? FADE_MAP :
+ PLAIN_MAP);
+
+ XCopyArea (state->dpy, state->images[map],
+ state->window, state->draw_gc,
+ cx * state->char_width,
+ cy * state->char_height,
+ state->char_width,
+ state->char_height,
+ x * state->char_width,
+ y * state->char_height);
+ }
+
+ cell->changed = 0;
+
+ if (cell->glow > 0)
+ {
+ cell->glow--;
+ cell->changed = 1;
+ }
+ else if (cell->glow < 0)
+ {
+ cell->glow++;
+ if (cell->glow == 0)
+ cell->glyph = 0;
+ cell->changed = 1;
+ }
+
+ if (cell->spinner && active)
+ {
+ cell->glyph = (state->glyph_map[(random()%state->nglyphs)] + 1);
+ cell->changed = 1;
+ }
+ }
+
+ if (state->cursor)
+ {
+ state->cursor->changed = 1;
+ }
+}
+
+
static int
densitizer (m_state *state)
{
int i;
int x = 0;
const char *s;
+ Bool typing_delay = False;
+ Bool transmit_delay = False;
+ Bool visible_cursor = False;
switch (state->mode)
{
- case TRACE0: s = "Call trans opt: received.\n"
- "2-19-98 13:24:18 REC:Log>_"; break;
- case TRACE1: s = "Trace program: running_"; break;
-
+ case TRACE0: if (state->grid_width >= 52)
+ s = "Call trans opt: received. 2-19-98 13:24:18 REC:Log>";
+ else
+ s = "Call trans opt: received.\n2-19-98 13:24:18 REC:Log>";
+ transmit_delay = True;
+ visible_cursor = True;
+ break;
+ case TRACE1: s = "Trace program: running";
+ transmit_delay = True;
+ visible_cursor = True;
+ break;
case KNOCK0: s = "Wake up, Neo..."; break;
case KNOCK1: s = ""; break;
- case KNOCK2: s = "The Matrix has you..."; break;
+ case KNOCK2: s = "The Matrix has you..."; typing_delay = True; break;
case KNOCK3: s = ""; break;
- case KNOCK4: s = "Follow the white rabbit..."; break;
+ case KNOCK4: s = "Follow the white rabbit."; typing_delay = True; break;
case KNOCK5: s = ""; break;
- case KNOCK6: s = "Knock knock, Neo."; break;
+ case KNOCK6: s = "Knock, knock, Neo."; break;
case KNOCK7: s = ""; break;
default: abort(); break;
cell->glyph = char_map[(unsigned char) *s] + 1;
if (*s == ' ' || *s == '\t') cell->glyph = 0;
cell->changed = 1;
+ if (visible_cursor)
+ {
+ m_cell *next = &state->cells[i + 1];
+ next->changed = 1;
+ state->cursor = next;
+ }
i++;
}
x++;
}
s++;
+ if (typing_delay || transmit_delay)
+ {
+ redraw_cells (state, False);
+ XSync (state->dpy, False);
+ screenhack_handle_events (state->dpy);
+ if (typing_delay)
+ {
+ usleep (50000);
+ if (typing_delay && 0 == random() % 3)
+ usleep (0xFFFFFF & ((random() % 250000) + 1));
+ }
+ else
+ usleep (20000);
+ }
}
}
if (delay)
{
- XSync (state->dpy, False);
- sleep (delay);
+ if (state->cursor)
+ {
+ int blink_delay = 333000;
+ int tot_delay = 0;
+ m_cell *cursor = state->cursor;
+ while (tot_delay < delay * 1000000)
+ {
+ if (state->cursor)
+ {
+ usleep (blink_delay * 2);
+ tot_delay += (2 * blink_delay);
+ state->cursor = NULL;
+ }
+ else
+ {
+ usleep (blink_delay);
+ tot_delay += blink_delay;
+ state->cursor = cursor;
+ }
+ cursor->changed = 1;
+ redraw_cells (state, False);
+ XSync (state->dpy, False);
+ screenhack_handle_events (state->dpy);
+ }
+ }
+ else
+ {
+ XSync (state->dpy, False);
+ sleep (delay);
+ }
}
+ state->cursor = NULL;
}
static void
draw_matrix (m_state *state)
{
- int x, y;
- int count = 0;
-
feed_matrix (state);
hack_matrix (state);
-
- for (y = 0; y < state->grid_height; y++)
- for (x = 0; x < state->grid_width; x++)
- {
- m_cell *cell = &state->cells[state->grid_width * y + x];
-
- if (cell->glyph)
- count++;
-
- if (state->mode == TRACE2)
- {
- int xx = x % strlen(state->tracing);
- Bool dead_p = state->tracing[xx] > 0;
-
- if (y == 0 && x == xx)
- cell->glyph = (dead_p
- ? state->glyph_map[state->tracing[xx]-'0'] + 1
- : 0);
- else if (y == 0)
- cell->glyph = 0;
- else
- cell->glyph = (dead_p ? 0 :
- (state->glyph_map[(random()%state->nglyphs)]
- + 1));
-
- cell->changed = 1;
- }
-
- if (!cell->changed)
- continue;
-
- if (cell->glyph == 0)
- XFillRectangle (state->dpy, state->window, state->erase_gc,
- x * state->char_width,
- y * state->char_height,
- state->char_width,
- state->char_height);
- else
- {
- int cx = (cell->glyph - 1) % CHAR_COLS;
- int cy = (cell->glyph - 1) / CHAR_COLS;
- int map = ((cell->glow > 0 || cell->spinner) ? GLOW_MAP :
- (cell->glow == 0) ? PLAIN_MAP :
- GLOW_MAP);
-
- XCopyArea (state->dpy, state->images[map],
- state->window, state->draw_gc,
- cx * state->char_width,
- cy * state->char_height,
- state->char_width,
- state->char_height,
- x * state->char_width,
- y * state->char_height);
- }
-
- cell->changed = 0;
-
- if (cell->glow > 0)
- {
- cell->glow--;
- cell->changed = 1;
- }
- else if (cell->glow < 0)
- {
- cell->glow++;
- if (cell->glow == 0)
- cell->glyph = 0;
- cell->changed = 1;
- }
-
- if (cell->spinner)
- {
- cell->glyph = (state->glyph_map[(random()%state->nglyphs)] + 1);
- cell->changed = 1;
- }
- }
-
+ redraw_cells (state, True);
roll_state (state);
#if 0
char *defaults [] = {
".background: black",
- ".foreground: green",
+ ".foreground: #00AA00",
"*small: ",
"*delay: 10000",
"*insert: both",
--- /dev/null
+#!/usr/bin/perl -w
+# Copyright © 2002 Jamie Zawinski <jwz@jwz.org>
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation. No representations are made about the suitability of this
+# software for any purpose. It is provided "as is" without express or
+# implied warranty.
+#
+# Created: 30-May-2002.
+#
+# This creates man pages from the XML program descriptions in
+# xscreensaver/hacks/config/.
+#
+# They aren't necessarily the most accurate or well-written man pages,
+# but at least they exist.
+
+require 5;
+use diagnostics;
+use strict;
+
+use Text::Wrap;
+
+my $progname = $0; $progname =~ s@.*/@@g;
+my $version = q{ $Revision: 1.2 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
+
+my $verbose = 0;
+
+my $default_args = ("[\\-display \\fIhost:display.screen\\fP]\n" .
+ "[\\-visual \\fIvisual\\fP]\n" .
+ "[\\-window]\n" .
+ "[\\-root]\n");
+my $default_options = (".TP 8\n" .
+ ".B \\-visual \\fIvisual\\fP\n" .
+ "Specify which visual to use. Legal values " .
+ "are the name of a visual class,\n" .
+ "or the id number (decimal or hex) of a " .
+ "specific visual.\n" .
+ ".TP 8\n" .
+ ".B \\-window\n" .
+ "Draw on a newly-created window. " .
+ "This is the default.\n" .
+ ".TP 8\n" .
+ ".B \\-root\n" .
+ "Draw on the root window.\n");
+
+my $man_suffix = (".SH ENVIRONMENT\n" .
+ ".PP\n" .
+ ".TP 8\n" .
+ ".B DISPLAY\n" .
+ "to get the default host and display number.\n" .
+ ".TP 8\n" .
+ ".B XENVIRONMENT\n" .
+ "to get the name of a resource file that overrides " .
+ "the global resources\n" .
+ "stored in the RESOURCE_MANAGER property.\n" .
+ ".SH SEE ALSO\n" .
+ ".BR X (1),\n" .
+ ".BR xscreensaver (1)\n" .
+ ".SH COPYRIGHT\n" .
+ "Copyright \\(co 2002 by %AUTHOR%. " .
+ "Permission to use, copy, modify, \n" .
+ "distribute, and sell this software and its " .
+ "documentation for any purpose is \n" .
+ "hereby granted without fee, provided that " .
+ "the above copyright notice appear \n" .
+ "in all copies and that both that copyright " .
+ "notice and this permission notice\n" .
+ "appear in supporting documentation. No " .
+ "representations are made about the \n" .
+ "suitability of this software for any purpose. " .
+ "It is provided \"as is\" without\n" .
+ "express or implied warranty.\n" .
+ ".SH AUTHOR\n" .
+ "%AUTHOR%.\n");
+
+sub xml2man {
+ my ($exe) = @_;
+ my $cfgdir = (-d "config" ? "config" : "../config");
+ my $xml = "$cfgdir/$exe.xml";
+ my $man = "$exe.man";
+
+ error ("$exe does not exist") if (! -f $exe);
+ error ("$xml does not exist") if (! -f $xml);
+ error ("$man already exists") if (-f $man);
+
+ local *IN;
+ open (IN, "<$xml") || error ("$xml: $!");
+ my $xmltxt = "";
+ while (<IN>) { $xmltxt .= $_; }
+ close IN;
+
+ my $args = "";
+ my $body = "";
+ my $desc;
+
+ $xmltxt =~ s/\s+/ /gs;
+ $xmltxt =~ s/<!--.*?-->//g;
+ $xmltxt =~ s@(<[^/])@\n$1@gs;
+
+ foreach (split ('\n', $xmltxt)) {
+ next if m/^$/;
+ next if m/^<\?xml\b/;
+ next if m/^<screensaver\b/;
+ next if m/^<command\b/;
+ next if m/^<[hv]group\b/;
+ next if m/^<select\b/;
+
+ my ($x,$arg) = m@\barg(|-unset|-set)=\"([^\"]+)\"@;
+ my ($label) = m@\b_?label=\"([^\"]+)\"@;
+ my ($low) = m@\blow=\"([^\"]+)\"@;
+ my ($hi) = m@\bhigh=\"([^\"]+)\"@;
+ my ($def) = m@\bdefault=\"([^\"]+)\"@;
+
+ $arg =~ s@\s*\%\s*@ \\fInumber\\fP@g if ($arg);
+
+ my $carg = $arg;
+ my $boolp = m/^<boolean/;
+
+ if ($arg && $arg =~ m/^-no(-.*)/) {
+ $arg = "$1 | \\$arg";
+ } elsif ($boolp && $arg) {
+ $arg = "$arg | \\-no$arg";
+ }
+
+ if ($carg && $carg =~ m/colors/) {
+ $hi = $low = undef;
+ }
+
+ if (!$carg) {
+ } elsif ($carg eq '-move' || $carg eq '-no-move' ||
+ $carg eq '-wander' || $carg eq '-no-wander') {
+ $label = "Whether the object should wander around the screen.";
+ } elsif ($boolp && ($carg eq '-spin' || $carg eq '-no-spin')) {
+ $label = "Whether the object should spin.";
+ } elsif ($carg eq '-spin X') {
+ $carg = '-spin \fI[XYZ]\fP';
+ $arg = $carg;
+ $label = "Around which axes should the object spin?";
+ } elsif ($carg eq '-fps' || $carg eq '-no-fps') {
+ $label = "Whether to show a frames-per-second display " .
+ "at the bottom of the screen.";
+ } elsif ($carg eq '-wireframe' || $carg eq '-wire') {
+ $label = "Render in wireframe instead of solid.";
+ } elsif ($carg =~ m/^-delay/ && $hi && $hi >= 10000) {
+ $label = "Per-frame delay, in microseconds.";
+ $def = sprintf ("%d (%0.2f seconds.)", $def, ($def/1000000.0));
+ $low = $hi = undef;
+ } elsif ($boolp) {
+ $label .= ". Boolean.";
+ } elsif ($label) {
+ $label .= ".";
+ }
+
+ if (m/^<(number|boolean|option)/) {
+
+ next if (!$arg && m/<option/);
+ if (!$label) {
+ print STDERR "$progname: ERROR: no label: $_\n";
+ $label = "???";
+ }
+
+ $args .= "[\\$carg]\n";
+
+ $label .= " $low - $hi." if (defined($low) && defined($hi));
+ $label .= " Default: $def." if (defined ($def));
+ $label = wrap ("", "", $label);
+
+ $body .= ".TP 8\n.B \\$arg\n$label";
+ $body .= "\n";
+
+ } elsif (m@^<_description>\s*(.*)\s*</_description>@) {
+ $desc = $1;
+ } else {
+ print STDERR "$progname: ERROR: UNKNOWN: $_\n";
+ }
+ }
+
+ $desc = "Something pretty." unless $desc;
+
+ my $author = undef;
+ if ($desc =~ m@^(.*?)\s*(Written by|By) ([^.]+\.?\s*)$@s) {
+ $desc = $1;
+ $author = $3;
+ $author =~ s/\s*[.]\s*$//;
+ }
+
+ if (!$author) {
+ print STDERR "$progname: $exe: WARNING: unknown author\n";
+ $author = "UNKNOWN";
+ }
+
+ $desc = wrap ("", "", $desc);
+
+ $body = (".TH XScreenSaver 1 \"\" \"X Version 11\"\n" .
+ ".SH NAME\n" .
+ "$exe - screen saver.\n" .
+ ".SH SYNOPSIS\n" .
+ ".B $exe\n" .
+ $default_args .
+ $args .
+ ".SH DESCRIPTION\n" .
+ $desc . "\n" .
+ ".SH OPTIONS\n" .
+ $default_options .
+ $body .
+ $man_suffix);
+
+ $body =~ s/%AUTHOR%/$author/g;
+
+#print $body; exit 0;
+
+ local *OUT;
+ open (OUT, ">$man") || error ("$man: $!");
+ print OUT $body || error ("$man: $!");
+ close OUT || error ("$man: $!");
+ print STDERR "$progname: wrote $man\n";
+}
+
+
+sub error {
+ ($_) = @_;
+ print STDERR "$progname: $_\n";
+ exit 1;
+}
+
+sub usage {
+ print STDERR "usage: $progname [--verbose] programs...\n";
+ exit 1;
+}
+
+sub main {
+ my @progs = ();
+ while ($_ = $ARGV[0]) {
+ shift @ARGV;
+ if ($_ eq "--verbose") { $verbose++; }
+ elsif (m/^-v+$/) { $verbose += length($_)-1; }
+ elsif (m/^-./) { usage; }
+ else { push @progs, $_; }
+ }
+
+ usage() if ($#progs < 0);
+
+ foreach (@progs) { xml2man($_); }
+}
+
+main;
+exit 0;
#if defined(HAVE_GDK_PIXBUF)
# include <gdk-pixbuf/gdk-pixbuf.h>
-# include <gdk-pixbuf/gdk-pixbuf-xlib.h>
+
+# ifdef HAVE_GTK2
+# include <gdk-pixbuf-xlib/gdk-pixbuf-xlib.h>
+# else /* !HAVE_GTK2 */
+# include <gdk-pixbuf/gdk-pixbuf-xlib.h>
+# endif /* !HAVE_GTK2 */
/* Returns a Pixmap structure containing the bits of the given XPM image.
GdkPixbuf *pb;
static int initted = 0;
XWindowAttributes xgwa;
+#ifdef HAVE_GTK2
+ GError *gerr = NULL;
+#endif /* HAVE_GTK2 */
XGetWindowAttributes (dpy, window, &xgwa);
if (!initted)
{
+#ifdef HAVE_GTK2
+ g_type_init ();
+#endif /* HAVE_GTK2 */
gdk_pixbuf_xlib_init (dpy, screen_number (xgwa.screen));
xlib_rgb_init (dpy, xgwa.screen);
initted = 1;
}
pb = (filename
- ? gdk_pixbuf_new_from_file (filename)
+#ifdef HAVE_GTK2
+ ? gdk_pixbuf_new_from_file (filename, &gerr)
+#else /* !HAVE_GTK2 */
+ ? gdk_pixbuf_new_from_file (filename)
+#endif /* !HAVE_GTK2 */
: gdk_pixbuf_new_from_xpm_data ((const char **) xpm_data));
if (pb)
{
}
else if (filename)
{
+#ifdef HAVE_GTK2
+ fprintf (stderr, "%s: %s\n", progname, gerr->message);
+ g_error_free (gerr);
+#else /* !HAVE_GTK2 */
fprintf (stderr, "%s: unable to load %s\n", progname, filename);
+#endif /* !HAVE_GTK2 */
exit (-1);
}
else
--- /dev/null
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+xrayswarm - swarms with color trails.
+.SH SYNOPSIS
+.B xrayswarm
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+.SH DESCRIPTION
+Draws a few swarms of critters flying around the screen, with nicely faded
+color trails behind them.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 0 (0.00 seconds.).
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Chris Leger. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Chris Leger.
+2002-05-25 Jacob Berkman <jacob@ximian.com>
+
+ * Makefile.in.in (MKINSTALLDIRS): maybe fix build
+
+2002-05-17 Wang Jian <lark@linux.net.cn>
+
+ * zh_CN.po: Added Simplified Chinese translation by
+ He Qiangqiang <carton@linux.net.cn>.
+
+2002-05-06 jacob berkman <jacob@ximian.com>
+
+ * POTFILES.in: update
+
+2002-05-01 Germán Poo-Caamaño <gpoo@ubiobio.cl>
+
+ * es.po: Updated Spanish translation from
+ Guillermo Movia <gmovia@hotpop.com> and converted to UTF-8
+
+2002-04-29 Pablo Saratxaga <pablo@mandrakesoft.com>
+
+ * wa.po: Updated Walloon file
+
2002-04-27 Duarte Loreto <happyguy_pt@hotmail.com>
* pt.po: Added Portuguese translation.
+2002-04-26 Tõivo Leedjärv <toivo@linux.ee>
+
+ * et.po: Updated Estonian translation.
+
+2002-04-26 Ole Laursen <olau@hardworking.dk>
+
+ * da.po: Updated Danish translation.
+
+2002-04-22 Jacob Berkman <jacob@ximian.com>
+
+ * POTFILES.in: add cubenetic.xml (marcel telka <marcel@telka.sk>
+
2002-04-21 Kjartan Maraas <kmaraas@gnome.org>
* no.po: Updated Norwegian (bokmål) translation.
-
+
2002-04-19 jacob berkman <jacob@ximian.com>
* POTFILES.in: add some files
+2002-04-08 Stanislav Visnovsky <visnovsky@nenya.ms.mff.cuni.cz>
+
+ * sk.po: Updated Slovak translation by Marcel Telka <marcel@telka.sk>.
+
+2002-04-06 Ole Laursen <olau@hardworking.dk>
+
+ * da.po: Updated Danish translation.
+
+2002-04-02 Stanislav Visnovsky <visnovsky@nenya.ms.mff.cuni.cz>
+
+ * sk.po: Updated Slovak translation by Marcel Telka <marcel@telka.sk>.
+
+2002-04-01 Duarte Loreto <happyguy_pt@hotmail.com>
+
+ * pt.po: Updated Portuguese translation.
+
+2002-03-31 Christian Rose <menthos@menthos.com>
+
+ * sv.po: Updated Swedish translation (not complete yet).
+
+2002-03-29 Zbigniew Chyla <cyba@gnome.pl>
+
+ * pl.po: Updated Polish translation by
+ GNOME PL Team <translators@gnome.pl>.
+
+2002-03-27 Duarte Loreto <happyguy_pt@hotmail.com>
+
+ * pt.po: Updated Portuguese translation.
+
+2002-03-27 Abel Cheung <maddog@linux.org.hk>
+
+ * zh_TW.po: New traditional Chinese translation.
+
+2002-03-25 Stanislav Visnovsky <visnovsky@nenya.ms.mff.cuni.cz>
+
+ * sk.po: Added initial Slovak translation Marcel Telka <marcel@telka.sk>.
+
+2002-03-24 jacob berkman <jacob@ximian.com>
+
+ * POTFILES.in: remove demo-Gtk-widgets.c, add demo-Gtk.c (not a
+ permanent fix)
+
+2002-03-23 Ole Laursen <olau@hardworking.dk>
+
+ * da.po: Added Danish translation.
+
+2002-03-23 Zbigniew Chyla <cyba@gnome.pl>
+
+ * pl.po: Updated Polish translation by
+ GNOME PL Team <translators@gnome.pl>.
+
+2002-03-22 Tõivo Leedjärv <toivo@linux.ee>
+
+ * et.po: Added Estonian translation.
+
+2002-03-19 jacob berkman <jacob@ximian.com>
+
+ * POTFILES.in: add xscreensaver-demo.glade2
+
+2002-03-18 Vincent van Adrighem <V.vanAdrighem@dirck.mine.nu>
+
+ * nl.po: Added dutch translation (from stable controlcenter)
+
+2002-03-18 Kjartan Maraas <kmaraas@gnome.org>
+
+ * no.po: Updated Norwegian (bokmål) translation.
+
+2002-03-18 Valek Filippov <frob@df.ru>
+
+ * ru.po: updated russian translation.
+
+2002-03-18 Christophe Merlet <redfox@eikonex.org>
+
+ * fr.po: Updated French translation.
+
+2002-03-18 Carlos Perelló Marín <carlos@gnome-db.org>
+
+ * es.po: Fixed a dup string.
+ * POTFILES.in: Added missing files.
+
+2002-03-15 jacob berkman <jacob@ximian.com>
+
+ * Makefile.in.in (DESTDIR): set to $(install_prefix)
gnulocaledir = $(localedir)
#gettextsrcdir = $(prefix)/share/glib-2.0/gettext/po
subdir = po
+DESTDIR = $(install_prefix)
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
+
+# #### NO. This gets me "..//usr/bin/install: No such file or directory".
+# The @MKINSTALLDIRS@ variable must have the absolute (or unqualified)
+# path of the install program. --jwz.
+# MKINSTALLDIRS = $(top_builddir)/@MKINSTALLDIRS@
+
MKINSTALLDIRS = @MKINSTALLDIRS@
CC = @CC@
-# Auto-generated: Sat May 11 02:41:43 PDT 2002
+# Auto-generated: Fri May 31 20:43:52 PDT 2002
driver/demo-Gtk-conf.c
driver/demo-Gtk-support.c
driver/demo-Gtk-widgets.c
driver/demo-Gtk.c
driver/screensaver-properties.desktop.in
driver/xscreensaver-demo.glade
+hacks/config/anemone.xml
hacks/config/ant.xml
hacks/config/apollonian.xml
hacks/config/atlantis.xml
hacks/config/kumppa.xml
hacks/config/lament.xml
hacks/config/laser.xml
+hacks/config/lavalite.xml
hacks/config/lightning.xml
hacks/config/lisa.xml
hacks/config/lissie.xml
hacks/config/pulsar.xml
hacks/config/pyro.xml
hacks/config/qix.xml
+hacks/config/queens.xml
hacks/config/rd-bomb.xml
hacks/config/ripples.xml
hacks/config/rocks.xml
+++ /dev/null
-From mrapple@quack.kfu.com Mon Apr 26 18:31:07 1993
-Newsgroups: alt.hackers
-From: mrapple@quack.kfu.com (Nick Sayer)
-Subject: screenblank and xautolock living in harmony
-Organization: The Duck Pond public unix: +1 408 249 9630, log in as 'guest'.
-Date: 23 Apr 1993 19:26:57 UTC
-
-
-I have a Sun and use xinit to start X. This presented a problem.
-If I use xautolock or xscreensaver to save the screen, then after
-a period of inactivity screenblank would turn the video off despite
-'xset s off'. If I didn't run screenblank, then who would take care of
-the display when X wasn't running?
-
-The hack that saved the day was to include this in .xinitrc:
-
-(
-
-while true ; do
-sleep 360
-touch /dev/console
-done
-
-) &
-killblank=$!
-
-[start up all the clients, etc, etc. Wait for the window manager
-to die, then ]
-
-kill $killblank
-
-The result is that screenblank is kept safely out of the way when X
-is running and left to do its job otherwise.
-
-Yes, I know using XDM would solve this problem.
-
-No, I'm probably not the first to think of this.
-
-You're welcome.
-
---
-Nick Sayer <mrapple@quack.kfu.com> | "Dear Sexy Nickers. I don't half fancy
-N6QQQ @ N0ARY.#NOCAL.CA.USA.NOAM | you. Meet me at the lift at 5:30 and
-+1 408 249 9630, log in as 'guest' | we'll get it together."
-PGP 2.2 public key via finger | -- Mr. Lucas
-
$ set def [.HACKS]
$ mydisk = f$trnlmn("SYS$DISK")
$ mydir = mydisk+f$directory()
+$ anemone :== $'mydir'anemone
$ ant :== $'mydir'ant
$ apollonian :== $'mydir'apollonian
$ attraction :== $'mydir'attraction
static const char screensaver_id[] =
- "@(#)xscreensaver 4.03 (30-Apr-2002), by Jamie Zawinski (jwz@jwz.org)";
+ "@(#)xscreensaver 4.04 (28-May-2002), by Jamie Zawinski (jwz@jwz.org)";
#define __XSCREENSAVER_INTL_H__
#ifdef ENABLE_NLS
-
# include <libintl.h>
# define _(String) dgettext(GETTEXT_PACKAGE,(String))
# ifdef gettext_noop
#endif /* !ENABLE_NLS */
-#ifndef HAVE_BINDTEXTDOMAIN_CODESET
-# define bindtextdomain_codeset(Domain,Codeset) (Domain)
-#endif
-
#endif /* __XSCREENSAVER_INTL_H__ */
Begin3
Title: xscreensaver
-Version: 4.03
-Entered-date: 11MAY02
+Version: 4.04
+Entered-date: 31MAY02
Description: A modular screen saver and locker for the X Window System.
Highly customizable: allows the use of any program that
can draw on the root window as a display mode.
Author: jwz@jwz.org (Jamie Zawinski)
Maintained-by: jwz@jwz.org (Jamie Zawinski)
Primary-site: http://www.jwz.org/xscreensaver/
- 2879K xscreensaver-4.03.tar.gz
- 58K xscreensaver.README
+ xscreensaver-4.04.tar.gz
+ 59K xscreensaver.README
1K xscreensaver.lsm
Alternate-site: sunsite.unc.edu /pub/Linux/X11/screensavers/
- 2879K xscreensaver-4.03.tar.gz
- 58K xscreensaver.README
+ xscreensaver-4.04.tar.gz
+ 59K xscreensaver.README
1K xscreensaver.lsm
Alternate-site: ftp.x.org /contrib/applications/
- 2879K xscreensaver-4.03.tar.gz
- 58K xscreensaver.README
+ xscreensaver-4.04.tar.gz
+ 59K xscreensaver.README
1K xscreensaver.lsm
Platforms: Linux, Irix, SunOS, Solaris, HPUX, AIX, FreeBSD, NetBSD,
BSDI, SCO, OSF1, Ultrix, VMS.
%define name xscreensaver
-%define version 4.03
+%define version 4.04
%define release 1
%define serial 1
%define x11_prefix /usr/X11R6
%define gnome_prefix /usr
%define kde_prefix /usr
-
%define gnome_datadir %{gnome_prefix}/share
-%define gnome_ccdir %{gnome_datadir}/control-center/Desktop
-%define gnome_paneldir %{gnome_datadir}/gnome/apps/Settings/Desktop
-%define gnome_icondir %{gnome_datadir}/pixmaps
# By default, builds the basic, non-GL package.
# To build both the basic and GL-add-on packages:
%build
RPMOPTS=""
-# Is this really needed? If so, why?
-# %ifarch alpha
-# RPMOPTS="$RPMOPTS --without-xshm-ext"
-# %endif
-
# On Solaris, build without PAM and with Shadow.
# On other systems, build with PAM and without Shadow.
#
archdir=`./config.guess`
-# Most xscreensaver executables go in the X bin directory (/usr/X11R6/bin/)
-# but some of them (e.g., the control panel capplet) go in the GNOME bin
-# directory instead (/usr/bin/).
-#
-mkdir -p $RPM_BUILD_ROOT%{gnome_prefix}/bin
-mkdir -p $RPM_BUILD_ROOT%{gnome_ccdir}
-mkdir -p $RPM_BUILD_ROOT%{gnome_paneldir}
-
-# Likewise for KDE: the .kss file goes in the KDE bin directory (/usr/bin/).
+# We have to make sure these directories exist,
+# or nothing will be installed into them.
#
export KDEDIR=%{kde_prefix}
mkdir -p $RPM_BUILD_ROOT$KDEDIR/bin
-
-# This is a directory that "make install" won't make as needed
-# (since Linux uses /etc/pam.d/* and Solaris uses /etc/pam.conf).
-#
+mkdir -p $RPM_BUILD_ROOT%{gnome_datadir}
mkdir -p $RPM_BUILD_ROOT/etc/pam.d
cd $archdir
GNOME_BINDIR=%{gnome_prefix}/bin \
install-strip
-# Make a pair of lists, of the GL and non-GL executables.
-# Do this by parsing the output of a dummy run of "make install"
-# in the driver/, hacks/ and hacks/glx/ directories.
+# This function prints a list of things that get installed.
+# It does this by parsing the output of a dummy run of "make install".
#
list_files() {
make -s install_prefix=$RPM_BUILD_ROOT INSTALL=true \
GNOME_BINDIR=%{gnome_prefix}/bin \
"$@" |
- sed -n -e 's@.* /\([^ ]*\)$@/\1@p' |
+ sed -n -e 's@.* \(/[^ ]*\)$@\1@p' |
sed -e "s@^$RPM_BUILD_ROOT@@" \
- -e "s@/bin/\.\./@/@" |
+ -e "s@/[a-z][a-z]*/\.\./@/@" |
sed -e 's@\(.*/man/.*\)@\1\*@' |
sort
}
-( cd hacks ; list_files install ; \
- cd ../driver; list_files install-program install-scripts ) \
- > $RPM_BUILD_DIR/xscreensaver-%{version}/exes-non-gl
+# Collect the names of the non-GL executables and scripts...
+# (Including the names of all of the Gnome, KDE, and L10N-related files,
+# whereever they might have gotten installed...)
+# For the translation catalogs, prepend an appropriate %lang(..) tag.
+#
+( cd hacks ; list_files install ; \
+ cd ../driver; list_files install-program install-scripts \
+ install-gnome install-kde ; \
+ ( cd ../po; list_files install | grep '\.' \
+ | sed 's@^\(.*/\([^/]*\)/LC.*\)$@%lang(\2) \1@' ) \
+) > $RPM_BUILD_DIR/xscreensaver-%{version}/exes-non-gl
+
+
+# Collect the names of the GL-only executables...
+#
( cd hacks/glx ; list_files install ) \
| grep -v man1/xscreensaver-gl-helper \
> $RPM_BUILD_DIR/xscreensaver-%{version}/exes-gl
-
# This line is redundant, except that it causes the "xscreensaver"
# executable to be installed unstripped (while all others are stripped.)
# You should install it this way so that jwz gets useful bug reports.
if [ -d $RPM_BUILD_ROOT ]; then rm -r $RPM_BUILD_ROOT ; fi
if [ -d $RPM_BUILD_ROOT-gl ]; then rm -r $RPM_BUILD_ROOT-gl ; fi
-%files -f exes-non-gl
-%defattr(-,root,root)
-
# Files for the "xscreensaver" package:
#
-%doc README README.debugging
-%dir %{x11_prefix}/lib/xscreensaver
-%config %{x11_prefix}/lib/X11/app-defaults/*
- %{x11_prefix}/man/man1/xscreensaver*
- /etc/pam.d/*
-
-%config(missingok) %{kde_prefix}/bin/*.kss
-
-%config(missingok) %{gnome_prefix}/bin/*-capplet
-%config(missingok) %{gnome_ccdir}/*.desktop
-%config(missingok) %{gnome_paneldir}/*.desktop
-%config(missingok) %{gnome_icondir}/*
+%files -f exes-non-gl
+%defattr(-,root,root)
-%config(missingok) %{gnome_prefix}/share/locale/
+%doc README README.debugging
+%dir %{x11_prefix}/lib/xscreensaver
+%config %{x11_prefix}/lib/X11/app-defaults/*
+ %{x11_prefix}/man/man1/xscreensaver*
+%config /etc/pam.d/*
# Files for the "xscreensaver-gl" package:
#
%{?USE_GL:%files -f exes-gl gl}
+%{?USE_GL:%defattr(-,root,root)}