#!/usr/bin/env python
#----------------------------------------------------------------------------
# Name:         wpclipper.py
# Purpose:      clipart Viewer/editor for WPCllipart collection
#		      view, convert, filter, rotate, etc...
#		      capable of clipboard use on any GTK-enabled linux machine
#		      to subsequently paste into AbiWord, Gimp and other editors.
#
# Author:       Paul Sherman <psherman2001@gmail.com>
#		    http://www.absolutelinux.com
#
# last update:   09/15/2010
# version:        9.0  (linux)
# Copyright:    (c) 2005-2010 Paul Sherman
# License:       GNU GPL3
#----------------------------------------------------------------------------
# Python imports
import os, sys, string, re, math, imghdr, webbrowser, gc, ConfigParser
# PIL (Python imaging library) imports
import Image, ImageOps, ImageFile, ImageFilter, ImageChops, ImageDraw, ImageEnhance
import PngImagePlugin, JpegImagePlugin, BmpImagePlugin, GifImagePlugin, TiffImagePlugin
# language imports
#import codecs, gettext
# gtk, pyGTK imports
import pygtk
import gobject
if gobject.pygtk_version < (2,9,96):
    print >>sys.stderr, "pyGTK version 2.10 or greater is required for this application"
    raise SystemExit
import gtk
try:
	import pango
except:
	print >> sys.stderr, "Cannot load Pango"
	raise SystemExit
#
# platform-specifig imports
if sys.platform == "linux2": import commands
if sys.platform == "win32":
	from win32com.shell import shell, shellcon
	import pythoncom
# Global constants below, including images used by GUI
#

# path to folder above viewer
# used as default open path if none in configuration file
startpath = os.path.dirname(os.path.realpath(sys.argv[0]))
startpath = startpath.rsplit(os.sep, 1)[0]

config = ConfigParser.ConfigParser()
base_config = "[default]"


# get the path/name to the configuration file
if sys.platform == "win32":
    df = shell.SHGetDesktopFolder()
    pidl = df.ParseDisplayName(0, None, "::{450d8fba-ad25-11d0-98a8-0800361b1103}")[1]
    homedir = shell.SHGetPathFromIDList(pidl)
    cfile = os.path.join(homedir, "wpclipart.ini")
else:
    homedir = os.getenv("HOME")
    cfile = os.path.join(homedir, ".wpclipart")
    
# tmpPath is file to hold edited images while app is in use
tmpPath = os.path.join(homedir, ".tmp.png")

if not os.path.exists(cfile):
	base_config = base_config + "\nstartpath = " + startpath
	fout = open(cfile, "w")
	fout.write(base_config)
	fout.close()

# default path is where the viewer/editor will first try to find clipart
if len(sys.argv) > 1:
	passed = sys.argv[1]
	if os.access(passed,os.R_OK) and os.path.isdir(passed):
		default_path = passed
	else:
		config.read(cfile)
		default_path = config.get("default", "startpath")	
else:
	config.read(cfile)
	default_path = config.get("default", "startpath")


if not (os.access(default_path,os.R_OK) and os.path.isdir(default_path)):
	default_path = startpath

############################################################################
############################################################################
############################################################################
############################################################################


enable_list = ["Rotate","Filter","Adjust","Image","Save Image","Edit w/GIMP","Edit w/XV","Edit w/ImageMagick"]
# icons for the application interface #################################################

IMAGE_EDIT = [
"16 16 8 1",
" 	c None",
".	c #000000",
"+	c #FFFF00",
"@	c #FF00FF",
"#	c #00FF00",
"$	c #808080",
"%	c #FF0000",
"&	c #0000FF",
"    ...         ",
"   .+++..       ",
"  .++++++.      ",
" .+++@@@++.    .",
".++++@@@.+..  ..",
".++##$..+++. .. ",
".+###$++++++..  ",
".+$$$++++.$..+. ",
".++++++++....++.",
" .+%%%.+++..+++.",
" .+%%%.++++++++.",
"  .+..+&&&&&+++.",
"   .+++&&&&+++. ",
"    ...+++++..  ",
"   $.. .....    ",
" $$..           "]

XV = [
"16 16 24 1",
" 	c #091623",
".	c #20364E",
"+	c #B2C0DC",
"@	c #24272B",
"#	c #0E0F11",
"$	c #000000",
"%	c #0A0B0C",
"&	c #B1BFDA",
"*	c #B1BFDB",
"=	c #141518",
"-	c #32363F",
";	c #383D46",
">	c #020203",
",	c #111215",
"'	c #030303",
")	c #181A1E",
"!	c #010101",
"~	c #AAB7D3",
"{	c #08090A",
"]	c #010202",
"^	c #050606",
"/	c #ACBAD5",
"(	c #040505",
"_	c #07080A",
" .............. ",
".++++++++++++++.",
".++++++++++++++.",
".+@+++++#++++++.",
".++$+++%&+++++*.",
".++$+++=+-+++;+.",
".+++$+$++>+++,+.",
".++++$+++'+++)+.",
".+++$+$+++$+!~+.",
".++$+++{++]+^/+.",
".++$+++]+++$+++.",
".+$+++++(++_+++.",
".++++++++++++++.",
".++++++++++++++.",
".++++++++++++++.",
" .............. "]

MAGIC = [
"16 16 37 1",
" 	c None",
".	c #FF9500",
"+	c #FF9808",
"@	c #4C4465",
"#	c #FA9304",
"$	c #FF9800",
"%	c #FFFF1A",
"&	c #FFC600",
"*	c #FFFF17",
"=	c #F99203",
"-	c #FFC800",
";	c #00391B",
">	c #FFFF5D",
",	c #FFFF8C",
"'	c #FFFFB6",
")	c #CEEDC0",
"!	c #9CDA80",
"~	c #9BD980",
"{	c #95D180",
"]	c #8DC880",
"^	c #85BF80",
"/	c #FFFFCC",
"(	c #FCFC38",
"_	c #39B500",
":	c #2EA800",
"<	c #1F9600",
"[	c #0F8400",
"}	c #037500",
"|	c #33AE00",
"1	c #259D00",
"2	c #148A00",
"3	c #077900",
"4	c #007200",
"5	c #FB9302",
"6	c #FFC700",
"7	c #FF9700",
"8	c #FF9706",
"                ",
"                ",
"                ",
"   .+           ",
" .@.#@#$        ",
"%&.%*=-%.;;;;;;;",
".>,'',>.;)!~{]^;",
" .&//&.(;!_:<[};",
".>,'',>.;!|1234;",
"%&.%*56%.;;;;;;;",
" .@.7@5.        ",
"   .8           ",
"                ",
"                ",
"                ",
"                "]

HTML_ICON = [
"16 16 124 2",
"  	c None",
". 	c #A6630C",
"+ 	c #804800",
"@ 	c #FEFDFC",
"# 	c #EED9BE",
"$ 	c #EDD8BD",
"% 	c #F0DDC4",
"& 	c #F2E1CA",
"* 	c #CD9A59",
"= 	c #CF9E5F",
"- 	c #D09F60",
"; 	c #F0DFC8",
"> 	c #90A1B8",
", 	c #5F80AD",
"' 	c #4F77AD",
") 	c #4C75AC",
"! 	c #5078AE",
"~ 	c #57769F",
"{ 	c #DDB683",
"] 	c #5B7FB1",
"^ 	c #7595C1",
"/ 	c #B0C4DC",
"( 	c #D2DEEC",
"_ 	c #DBE3F3",
": 	c #C9D8EB",
"< 	c #A5BDD9",
"[ 	c #7092C0",
"} 	c #4B74AB",
"| 	c #BF8539",
"1 	c #5179AF",
"2 	c #A4BAD8",
"3 	c #D7DFE9",
"4 	c #C5D3E1",
"5 	c #B3BAC1",
"6 	c #B3C6DB",
"7 	c #AECFF0",
"8 	c #B4C5D6",
"9 	c #CEDBE8",
"0 	c #96B1D2",
"a 	c #6184B3",
"b 	c #A3B9D7",
"c 	c #D6DCE4",
"d 	c #C8CDD0",
"e 	c #D5E9FF",
"f 	c #CFE8FF",
"g 	c #C4DFFA",
"h 	c #B2C3D4",
"i 	c #B8C0CC",
"j 	c #D4D9DC",
"k 	c #DDE5ED",
"l 	c #899BB5",
"m 	c #7396C1",
"n 	c #E6EEF6",
"o 	c #DDDEDF",
"p 	c #C0D0DE",
"q 	c #D7ECFF",
"r 	c #D7EBFF",
"s 	c #C9E4FF",
"t 	c #BDCAD7",
"u 	c #D0D3D6",
"v 	c #EEEEF0",
"w 	c #BECCDF",
"x 	c #6D8FB9",
"y 	c #A9BFDB",
"z 	c #D9DEDF",
"A 	c #BDD8F3",
"B 	c #D5EAFF",
"C 	c #CBE5FF",
"D 	c #C0C9D0",
"E 	c #B5C2CF",
"F 	c #98B0CC",
"G 	c #ADB9C7",
"H 	c #537BB1",
"I 	c #C9D7E9",
"J 	c #9DBAD7",
"K 	c #BBDDFF",
"L 	c #D3E9FF",
"M 	c #C0D5EC",
"N 	c #F7F7F7",
"O 	c #F8F8F8",
"P 	c #AEBED3",
"Q 	c #4D75AB",
"R 	c #CFDDEF",
"S 	c #9AC5F2",
"T 	c #A8D1FA",
"U 	c #B7DBFF",
"V 	c #C7E3FF",
"W 	c #C1E0FF",
"X 	c #C1CBD3",
"Y 	c #BDCBDE",
"Z 	c #507AAE",
"` 	c #C0D3E8",
" .	c #ADBDCD",
"..	c #C0C9D2",
"+.	c #A3C7EF",
"@.	c #A4CDF6",
"#.	c #A0CAF4",
"$.	c #9CB6D4",
"%.	c #F2F4F4",
"&.	c #EAECEE",
"*.	c #B7C5D8",
"=.	c #A35E05",
"-.	c #5779AB",
";.	c #9EB7D6",
">.	c #D4DCE2",
",.	c #D8DBDE",
"'.	c #91B7E1",
").	c #89B8E9",
"!.	c #80B0E6",
"~.	c #73A2D3",
"{.	c #7CA3CE",
"].	c #EFEFEF",
"^.	c #AFBDD0",
"/.	c #5375AD",
"(.	c #6B91BF",
"_.	c #A5BBD8",
":.	c #C0CEE0",
"<.	c #E6E8EA",
"[.	c #71A2D9",
"}.	c #6DA2DD",
"|.	c #619BD7",
"1.	c #5891D2",
"2.	c #DADADA",
"3.	c #A7B5C8",
". + + + + + + + + + + + +       ",
"+ @ @ @ @ @ @ @ @ @ @ @ @ +     ",
"+ @ # $ $ $ $ $ # # % & @ +     ",
"+ @ $ * = = = = = = - & @ +     ",
"+ @ $ $ $ # # # % % ; & @ +     ",
"+ @ $ = = = = = > , ' ) ! ~     ",
"+ @ $ $ # # { ] ^ / ( _ : < [ } ",
"+ @ $ = = | 1 2 3 4 5 6 7 8 9 0 ",
"+ @ # # % a b c d e f g h i j k ",
"+ @ # = l m n o p q r s t u v w ",
"+ @ # % x y z A B B B C D E F G ",
"+ @ % = H I J K L L L M N O N P ",
"+ @ % % Q R S T U V W X O O O Y ",
"+ @ @ @ Z `  ...+.@.#.$.%.&.O *.",
"=.+ + + -.;.>.O ,.'.).!.~.{.].^.",
"        /.(._.:.:.<.[.}.|.1.2.3."]


VIEW_FULL = [
"16 16 138 2",
"  	c None",
". 	c #BE7B5E",
"+ 	c #B06442",
"@ 	c #FDFBF9",
"# 	c #A76446",
"$ 	c #BBBAB9",
"% 	c #ABA29E",
"& 	c #ABA19D",
"* 	c #D6C7BF",
"= 	c #F0DDD4",
"- 	c #F1DFD7",
"; 	c #F2E1DA",
"> 	c #F4E5DE",
", 	c #6A6563",
"' 	c #666666",
") 	c #837873",
"! 	c #CBA593",
"~ 	c #DAAE9A",
"{ 	c #8B8B8A",
"] 	c #888381",
"^ 	c #6E6D6D",
"/ 	c #C5B9B3",
"( 	c #F3E4DD",
"_ 	c #D3A996",
": 	c #A08A80",
"< 	c #6D6A69",
"[ 	c #AE9386",
"} 	c #D3D1D0",
"| 	c #A29994",
"1 	c #CABCB6",
"2 	c #E0D2CB",
"3 	c #807D7B",
"4 	c #BDB1AC",
"5 	c #5C534F",
"6 	c #414141",
"7 	c #353535",
"8 	c #313131",
"9 	c #3B3B3B",
"0 	c #5E5956",
"a 	c #A88C80",
"b 	c #EADCD6",
"c 	c #898483",
"d 	c #D9CCC7",
"e 	c #4B4B4B",
"f 	c #262C33",
"g 	c #5E7996",
"h 	c #A7C7E7",
"i 	c #1A73CC",
"j 	c #1D5D9D",
"k 	c #1F3952",
"l 	c #787573",
"m 	c #EADCD5",
"n 	c #EBDDD6",
"o 	c #928D8B",
"p 	c #4A4A4A",
"q 	c #4D4D4D",
"r 	c #80B1E2",
"s 	c #BAD9FB",
"t 	c #FFFFFF",
"u 	c #599CDF",
"v 	c #429DF8",
"w 	c #248AF0",
"x 	c #3174BA",
"y 	c #645C58",
"z 	c #D3AA98",
"A 	c #D4AB99",
"B 	c #ADA5A2",
"C 	c #464646",
"D 	c #EBEBEB",
"E 	c #9AC3F0",
"F 	c #E4F0FD",
"G 	c #BFCBD8",
"H 	c #7F7F7F",
"I 	c #536F8B",
"J 	c #45A1FD",
"K 	c #328EED",
"L 	c #CEDBE8",
"M 	c #696665",
"N 	c #EBDED8",
"O 	c #DACFCA",
"P 	c #CECCCB",
"Q 	c #BABABA",
"R 	c #F8F8F8",
"S 	c #96C3EF",
"T 	c #4FA4FD",
"U 	c #586B7F",
"V 	c #3F3F3F",
"W 	c #333333",
"X 	c #63B0FD",
"Y 	c #3692F1",
"Z 	c #C4DEF7",
"` 	c #E2E2E2",
" .	c #D7D6D4",
"..	c #7A7A7A",
"+.	c #EDEDED",
"@.	c #DDEAF7",
"#.	c #3B94F2",
"$.	c #6491BE",
"%.	c #464F58",
"&.	c #5FAFFE",
"*.	c #3792F2",
"=.	c #E9EFF5",
"-.	c #EEEEEE",
";.	c #DCDCDC",
">.	c #434343",
",.	c #837F7D",
"'.	c #ECECEC",
").	c #86BAF0",
"!.	c #59A7FB",
"~.	c #69A7E4",
"{.	c #6DB5FE",
"].	c #3F9EFE",
"^.	c #62A7EF",
"/.	c #F1F1F1",
"(.	c #E6E6E6",
"_.	c #BCBCBC",
":.	c #3D3D3D",
"<.	c #B3B2B1",
"[.	c #8B6E61",
"}.	c #C4C4C4",
"|.	c #96C4F4",
"1.	c #4599F2",
"2.	c #3893F2",
"3.	c #69ACF2",
"4.	c #EBF1F8",
"5.	c #E9E9E9",
"6.	c #E3E3E3",
"7.	c #DDDDDD",
"8.	c #6B6B6B",
"9.	c #7F5947",
"0.	c #BB7657",
"a.	c #959595",
"b.	c #C3C3C3",
"c.	c #F7F7F7",
"d.	c #F5F5F5",
"e.	c #EAEAEA",
"f.	c #ACACAC",
"g.	c #707070",
"    . + + + + + + + + + + + +   ",
"    + @ @ @ @ @ @ @ @ @ @ @ @ + ",
"    # $ % & * = = = - - ; > @ + ",
"    , ' ' ' ' ) ! ~ ~ ~ ~ > @ + ",
"  ' ' { & & ] ' ^ / ; ; ( > @ + ",
"' ' # @ = ~ ~ _ : < [ ~ ~ > @ + ",
"    + } | | 1 - ; 2 3 4 ( > @ + ",
"    5 6 7 8 9 0 a ( b c d > @ + ",
"  e f g h i j k 7 l m n o n @ + ",
"p q r s t u v w x 7 y z A B @ + ",
"C D E F G H I J K L e M N O P + ",
"Q R S T U V W X Y Z ` e M N  .+ ",
"..+.@.#.$.W %.&.*.=.-.;.>.,.@ + ",
"  ..'.).!.~.{.].^./.'.(._.:.<.+ ",
"    [.}.|.1.2.3.4.-.5.6.7.8.9.0.",
"        a.b.c.d.-.e.;.f.g.      "]

HOME = [
"16 16 82 1",
" 	c None",
".	c #A40000",
"+	c #EF2929",
"@	c #7B4C4A",
"#	c #885A58",
"$	c #995D5B",
"%	c #848582",
"&	c #9B9B9A",
"*	c #C08A8A",
"=	c #9D7573",
"-	c #8F908D",
";	c #B8B9B8",
">	c #C2C2C1",
",	c #BABAB9",
"'	c #C4A1A1",
")	c #A38D8B",
"!	c #9FA09E",
"~	c #BFBFBE",
"{	c #DEDEDD",
"]	c #DDDDDD",
"^	c #D7D7D7",
"/	c #C9B5B5",
"(	c #A79F9D",
"_	c #A3A3A2",
":	c #DADADA",
"<	c #EAEAEA",
"[	c #E9E9E9",
"}	c #E7E7E7",
"|	c #DCD0D0",
"1	c #B3B3B1",
"2	c #A2A3A1",
"3	c #D8D8D8",
"4	c #E6E6E6",
"5	c #E4E4E4",
"6	c #E3E3E3",
"7	c #E7E4E4",
"8	c #E2E3E2",
"9	c #555753",
"0	c #77787A",
"a	c #76797D",
"b	c #757575",
"c	c #757676",
"d	c #F5F5F5",
"e	c #F1F1F1",
"f	c #7E807B",
"g	c #7F817C",
"h	c #80827D",
"i	c #76797C",
"j	c #7999C3",
"k	c #7798C2",
"l	c #75787C",
"m	c #F4F4F4",
"n	c #F0F0F0",
"o	c #848681",
"p	c #75787B",
"q	c #5F86B7",
"r	c #4A76AE",
"s	c #72757A",
"t	c #F3F3F3",
"u	c #EFEFEF",
"v	c #868883",
"w	c #8A8865",
"x	c #717881",
"y	c #3465A4",
"z	c #6E7681",
"A	c #878984",
"B	c #88897E",
"C	c #B1B3B6",
"D	c #B8BCC1",
"E	c #BABBBC",
"F	c #B9BDC1",
"G	c #A4A4A4",
"H	c #F2F2F2",
"I	c #EEEEEE",
"J	c #888A85",
"K	c #A2A2A2",
"L	c #A3A3A3",
"M	c #656763",
"N	c #979994",
"O	c #989996",
"P	c #999A96",
"Q	c #FBFBFB",
"       ..+      ",
"      .++.      ",
"     .+@#+.     ",
"    .+$%&*+.    ",
"   .+=-;>,'+.   ",
"  .+)!~{{]^/+.  ",
" .+(_:<<<[[}|+. ",
".+1234}}}45567+.",
" +89999}0abacd+ ",
" 9e9fgh}ijbklm9 ",
" 9n9ooo}pqbrst9 ",
" 9u9vvw}xybyzt9 ",
" 9u9AAB}CDEFGH9 ",
" 9I9JJJ}KLLLLH9 ",
" 9dMNOPHdddddQ9 ",
" 99999999999999 "]


GIMP = [
"16 16 181 2",
"  	c None",
". 	c #C84F00",
"+ 	c #D35C00",
"@ 	c #D56101",
"# 	c #D26001",
"$ 	c #D15F01",
"% 	c #D05E01",
"& 	c #CF5D01",
"* 	c #CE5D01",
"= 	c #CC5C01",
"- 	c #CE5C01",
"; 	c #CC5300",
"> 	c #DB6A02",
", 	c #FDCC70",
"' 	c #FDE3B0",
") 	c #FDE1AA",
"! 	c #FDE1A9",
"~ 	c #FCE0A9",
"{ 	c #FDE0A9",
"] 	c #FEE4B0",
"^ 	c #FEBF50",
"/ 	c #C35100",
"( 	c #E99528",
"_ 	c #FEFEE3",
": 	c #FEFEE7",
"< 	c #FEFEE8",
"[ 	c #FEFEE9",
"} 	c #FEFEEE",
"| 	c #B9AF86",
"1 	c #B85500",
"2 	c #F39E33",
"3 	c #CCA460",
"4 	c #E9CC86",
"5 	c #EEDA96",
"6 	c #D5B776",
"7 	c #BE9F65",
"8 	c #C3A973",
"9 	c #DCCA8D",
"0 	c #FEE177",
"a 	c #FDD663",
"b 	c #988451",
"c 	c #291D0B",
"d 	c #9E4C04",
"e 	c #131313",
"f 	c #181C1F",
"g 	c #421600",
"h 	c #F89F26",
"i 	c #BD9041",
"j 	c #B08949",
"k 	c #B08B49",
"l 	c #B39B69",
"m 	c #9F8950",
"n 	c #836A2D",
"o 	c #705422",
"p 	c #935C02",
"q 	c #814E00",
"r 	c #442A09",
"s 	c #432C04",
"t 	c #A75000",
"u 	c #707070",
"v 	c #9EA0A3",
"w 	c #1D130C",
"x 	c #BC861E",
"y 	c #FCF7D1",
"z 	c #D7D8D5",
"A 	c #E3E2D3",
"B 	c #FBFDFE",
"C 	c #C5C6BE",
"D 	c #9E9355",
"E 	c #897635",
"F 	c #675122",
"G 	c #5F461B",
"H 	c #533914",
"I 	c #5C3D01",
"J 	c #BE5D00",
"K 	c #363636",
"L 	c #5A5A5A",
"M 	c #040609",
"N 	c #483B15",
"O 	c #F2F1E9",
"P 	c #83868F",
"Q 	c #F6F7FD",
"R 	c #959597",
"S 	c #57585D",
"T 	c #96895F",
"U 	c #856E2E",
"V 	c #786028",
"W 	c #6C4F1C",
"X 	c #422B0D",
"Y 	c #865E00",
"Z 	c #CE6800",
"` 	c #010101",
" .	c #060606",
"..	c #000000",
"+.	c #130E05",
"@.	c #A08F67",
"#.	c #8B8366",
"$.	c #CAC4B0",
"%.	c #8E8F92",
"&.	c #676560",
"*.	c #86733E",
"=.	c #765D25",
"-.	c #6C521F",
";.	c #5C3F15",
">.	c #432B05",
",.	c #C89000",
"'.	c #D06C00",
").	c #010000",
"!.	c #2F240E",
"~.	c #785E23",
"{.	c #7D6628",
"].	c #836E34",
"^.	c #98875D",
"/.	c #86733F",
"(.	c #6F5720",
"_.	c #5C4722",
":.	c #694D20",
"<.	c #3E270B",
"[.	c #775500",
"}.	c #F6B700",
"|.	c #CF6D00",
"1.	c #2C1301",
"2.	c #5F360C",
"3.	c #5C4219",
"4.	c #6A5020",
"5.	c #6D551F",
"6.	c #69501C",
"7.	c #644C1D",
"8.	c #5B4623",
"9.	c #695330",
"0.	c #4A3013",
"a.	c #523901",
"b.	c #D09C00",
"c.	c #FEC800",
"d.	c #CC6C00",
"e.	c #C37200",
"f.	c #745404",
"g.	c #4A310E",
"h.	c #432D15",
"i.	c #4A3419",
"j.	c #513B21",
"k.	c #584126",
"l.	c #4E3714",
"m.	c #5E4300",
"n.	c #BF9300",
"o.	c #FBC300",
"p.	c #FECE00",
"q.	c #CA6D00",
"r.	c #F19E00",
"s.	c #F9D100",
"t.	c #C29900",
"u.	c #987500",
"v.	c #7F5F02",
"w.	c #735502",
"x.	c #836500",
"y.	c #A07D00",
"z.	c #D8AF00",
"A.	c #FCCB00",
"B.	c #FED100",
"C.	c #FED600",
"D.	c #CC6F00",
"E.	c #D37200",
"F.	c #FED000",
"G.	c #FED300",
"H.	c #F9C400",
"I.	c #F3BF00",
"J.	c #F8C400",
"K.	c #FEC900",
"L.	c #FECC00",
"M.	c #FDBF00",
"N.	c #AC4C00",
"O.	c #702900",
"P.	c #AB5100",
"Q.	c #A85400",
"R.	c #A95500",
"S.	c #A75300",
"T.	c #A65100",
"U.	c #A25000",
"V.	c #A14E00",
"W.	c #9A4200",
"X.	c #391200",
"                                ",
"      . + @ # # $ % & * = - ;   ",
"      > , ' ) ! ! ! ~ { ) ] ^ / ",
"      ( _ : _ < : < : < [ } | 1 ",
"      2 3 4 5 6 7 8 9 0 a b c d ",
"e f g h i j k l m n o p q r s t ",
"u v w x y z A B C D E F G H I J ",
"K L M N O P Q R S T U V W X Y Z ",
"`  ...+.@.#.$.%.&.*.=.-.;.>.,.'.",
"  ..).!.~.{.].^./.(._.:.<.[.}.|.",
"    1.2.3.4.5.6.7.8.9.0.a.b.c.d.",
"      e.f.g.h.i.j.k.l.m.n.o.p.q.",
"      r.s.t.u.v.w.x.y.z.A.B.C.D.",
"      E.F.G.p.H.I.J.K.L.L.p.M.N.",
"      O.P.Q.Q.R.Q.S.T.U.V.U.W.X.",
"                                "]

splash_icon = [
"240 240 32 1",
" 	c #0A1572",
".	c #241D66",
"+	c #8C1753",
"@	c #32356E",
"#	c #3E3098",
"$	c #3B3C3E",
"%	c #363885",
"&	c #93235A",
"*	c #99366A",
"=	c #535696",
"-	c #5C5C5B",
";	c #58647A",
">	c #1F74C4",
",	c #AC5D86",
"'	c #B06340",
")	c #6C6EA7",
"!	c #797778",
"~	c #479FF5",
"{	c #8F91BA",
"]	c #969698",
"^	c #C08AA3",
"/	c #ABABAE",
"(	c #AFB2CE",
"_	c #CEACB5",
":	c #BBBABC",
"<	c #CAC9CB",
"[	c #C8CCDE",
"}	c #DBD9DE",
"|	c #E6D9D3",
"1	c #DBDDDA",
"2	c #E7E7EA",
"3	c #FDFFFC",
"))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))",
"))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))",
"))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))",
"))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))",
"))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))",
")))))11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111)))))",
")))))}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}1)))))",
")))))1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111})))))",
")))))}}}33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333211)))))",
")))))11133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))}}133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))11}33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))11133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))}}}33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))11133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333'''''''''''''33333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))1}}33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333'333333333333'3333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))11133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333'://||||||||3'3333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))1}}33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333----!!_____|3'3333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333-!!//!--:||||3'3333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))1}}333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333--'2|___]-]__|3'3333333%33333333333333333333333333333333333333333333333333333333111)))))",
")))))11133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333'|]]:|||!:|23'333333%%33333333333333333333333333333333333333333333333333333333111)))))",
")))))1}}33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333-$$$$-]||]||3'33333%%%33333333333333333333333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333-$;[>=$$!||]|3'3333%%@%%%%%%%%%%%%%%%%%%%%3333333333333333333333333333333333333111)))))",
")))))1}}333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333--{[3~~~>$-__/3'33333%%%333333333333333333%3333333333333333333333333333333333333111)))))",
")))))111333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333$2(2[!;~~[--|<<'333333%%333333333333333333%3333333333333333333333333333333333333111)))))",
")))))1}}333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333:3(~;$$~~[1$-||'3333333%333333333333333333%3333333333333333333333333333333333333111)))))",
")))))111333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333!22~{$-~~222$!3'33333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333!2(~~~~~222:$/'33333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))11133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333!:(~~~3221}--'33333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))1}}33333333333333333333333333333333333333333333333333333333333333333/:333333333333333333333333333333333333333333333333333333333333333333333333333333333]<3322}/!33333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333333333333333333333333333333333333:$!33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333333333333333333333333333333333332$!]22223333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))111333333333333333333333333333333333333333333333333333333333333333]!/]<:123333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))1}}333333333333333333333333333333333333333333333333333333333333333-<]/:/:23333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))11133333333333333333333333333333333333333333333333333333333333333<-1!]]]:23333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))1}}33333333333333333333333333333333333333333333333333333333333333]]1!]]]:}3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))11133333333333333333333333333333333333333333333333333333333333333-:}-]!]/}23333}2333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))1}}33333333333333333333333333333333333333333333333333333333333333$}}-/!]/}3333:$<333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333333333333333333333333333333333}-21-/!]:}233]-$}222333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333333333333333333333333333333333]!1}-]!!/}22!!}$1<1}233333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333233333333233333333333333333333!/}}-]!]:1}-!2!!<//12333332223333333_2333333333333333333333333333333333333333333333333333323333333333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))1}}33333333333^}3333333333333333}**233333}^&*****,^_233333333333-}}|-!!]::-]2<$:]]/<233}^*++&^23233_+^333333323333333333333333333333333333333333333333332**3333333333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))11133333333333,,3333333333333332*+_22233_&+++&++++++*_2333333333$2}}-]!]]$:2}-!]!!/<22^&++&*&,22232*+<222333}&^33333333333333333333333333333333333333333,+_2223333333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))1}}33333333333^&222233}_3333332*&^211}23_&++^_____^,+*<12333333}-21}-!!!-}22]-]!!]:1}*+&,_}}__:<}2_&,}<<}233}+,2223333333333333333333333333333333333333_+,2}}}2333333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))11133333333333_+_}}22}*,223333,+^}<::<233,+*<]]]]/:^+*::}233333}-21<-]--221:$/!-!/:_*+*_}://///:}2,+_<::<2333__2}2233333333333333333333333333333333333}&*}<<:12333333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))1}}33333333333[+^<:12*+*22233^+,2<:/:}23}&+^/]!]//,+&_]/:123333:!11:--!2}1<-]!-!]:_&+*}</]]////:<}+*2///<233332}1}233333333333333333333333333333333332,+,^^//:2333333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))11133333333333}&,<:<^++&<:<1_&*}<://<}23^+*:]!]_,&+,_]]]:}23333/!2}:$/212}-!!--!/_&+*}://]]/::<<2^+_<//:}2[[322}<123333333333333333333333333333332^,**++*,^(/<2333333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))1}}333333333332&*</_&&*&_/:}*+_}://:1223,+^/]^*++*^</]]]:}23333]]}}/!21}}-!!-!!]_*+*}:]]]//<1}223,*}://:1}&*22211_,,,_}333333333333333333^^333323*+&&&&^:/]]/<2333333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))111333333333333**::,&^_+_]/^+,2:///<233}+&_^&++&^<</]]]/<233333!/11/!2}}-!!--!]:,+*<:/]]/:}223332&^}///<2,&,22}22*+&*&&,2223333_,,}33333}&,2_,&&___[_&,:]]!]/<2333333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))1}}333333333333,&:_+*<:+^]]*&<<///<2233^+++&+&^_://////<}233332!:]<]]}}--]--!]/^++^:]]]/<}223333_&_<//:}}+&}1<}22**}}<,+^}1223^&++,22233_+**+*^_211},+_]!!]]:12333333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))111333333333333,+_*+^//+^],+^<///:}2333,++&,^/]]]]]]/:<}2333333-!$$]]}--!--!!/}*&*}/]]/:12333333^&}://<2^+^}:/<}_+^}::^+^:<12,+,,+,}}123,++&^<:::<<_&*/!]]/:122333333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))1}}333333333333,+*+*:]]+,_+*<////<22332&*__]!!!]]///}1223333333-;$$!]-!!--!]/<_++_:]]]:}23333333,&2:/:}2,*}://:1^&}://&&_//},&^22_:/:<22*+&_/]]//::^+,]]]]:}233333333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))111333333333333,&+&^]!]+**&^/]]/<13333_+^:]!!!]]//<{=={2233333:. .@$$!!$-!]/:2,+*<]]]/<22}^&^332,*1:/:1}&,1///<}&*}:_*&//]/^+_}^&^]]/:1^+&_/!]]]:<}^+^/]/^}2333333333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))1}}333333333333^++*/!!]+++*/]]/:}23333,&</]!]]/(<})  ..@[2233/. ## @]!--!!/<12*+&:]]/<2_,&+,}222**}:/<}_+_<//:}[+,}^&*_//]/&*_*++&^]/:2*+^:]!]]/<}2^+,:_*^12233333333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))111333333333333,++^!!!/++&^]!]/<233333**}/]]/:<12/ .{}<;@{}<;.# ##.]----]/<223^++&,,,*+&,^}1}<1},&^/:<2_&}://<1^+^**^:////,+++^:_,&,^<}&,}/]]]:<1|3}*+&*_<<2233333333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))1}}333333333333_+*/!!]/*+,/!!]:}233333,^<///:}222= {}:/:]@..### ##=!$-!]/<12332,*&&**^_}}}<:::<}<,^::<2}^1:/:}2,&</:]]///:^&,_:]!]_*&:<_}</]]:<22332}__///<1223333333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))1113333333333333[[/!]]::_:]!]/<2333333}}<//:}3232%.}:]]]/!.#### ##)!-!]/<2333332</]]/:::::/:::<122<::<122}<:<}2&,}/]]]/::<}}}:]]]]]/:::<<://:<2333332<://::<123333333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))1}}33333333333332</]]:<1<:]]]:1233333332}<:}23333=.}/]]]/:@##.@.##)!-!/<22333332}/]]]//://::<<2222}::<2222}<12_+^</]]/:<}222</]]]//::::<<<:<<223333321:///:}223333333333333333333333333333333%3333333333333333333333333333333333333111)))))",
")))))11133333333333332}<::<222<:/:<23333333322|}123333{.:]]/::<.#.@/.##=!-]:}23333332}<:///:::<<112233221}}2332}|23^+_:]]/:<}22321<:::<}<<<<}}1}123333333321}<}}1233333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))}}1333333333333332}}}22222}}}223333333332223333332@=:]/<}(.#@/].##.]!]:23333333322}<<<1}1222233333222223332232,&<://:}2233332}}}2222221222222333333333222223333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))11}33333333333333332233332222333333333333233333333/.=:<}}@#@:!!.## ;]]:233333333322222222333333333333333333332**}/]:}233333332223333233333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))111333333333333333333333333333333333333333333333332!. ==. .]]!;.#...={:13333333333333333333333333333333333333}*^<//:}233333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))}}}333333333333333333333333333333333333333333333332}{@..@;:/]!@#@{]{).)}12333333333333333333333333333333333333}2<//<2333333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333333333333333333332}<<:::/]]]@.]]!-]{.)}}2233333333333333333333333333333333332}<::}2333333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}33333333333333333333333333333333333333333333333321<///]]]]/@.:!!!!/)./<12333333333333333333333333333333333332}<}22333333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))111333333333333333333333333333333333333333333333333321<:////:<=.:!!]]// ):<}23333333333333333333333333333333333322233333333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}33333333333333333333333333333333333333333333333333221<<<<}2/.(]]]/<(.=::<23333333333333333333333333333333333332333333333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))111333333333333333333333333333333333333333333333333333222122222.=:]/<}{ ):/<22333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}333333333333333333333333333333333333333333333333333333323332{.=(:}}. {//<13333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333333333333333333333333333333332)..);. .<//:12333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}33333333333333333333333333333333333333333333333333333333333321/)...=:://:}2333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))11133333333333333333333333333333333333333333333333333333333333331<:::::////<23333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}333333333333333333333333333333333333333333333333333333333333321<://////:}23333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333333333333333333333333333333333322<<:::::}233333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}333333333333333333333333333333333333333333333333333333333333333221}<<}12233333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))111333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))111333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333(=  %[333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))11133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333332=     %333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333[.       }33333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))11133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333[         233333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333}.        =333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))111333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333[).%[33333332{)(%         [333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333{     23333(=       =     )3333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333)      )333)        {)    )33333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333(   =    33}        =3[%.=[333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))111333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333%  {3{   (32  =%    2333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333{  %33[   )33333=   )3333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))11133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333.  (333   =33333)   (3333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333(  .3333   %33333)   [3333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))11133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333([333=  )3333.  %33333)   [3333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333[)   [32   [3333%  .33333)   [3333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))11133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333}).     }3(   3332{    33333{   (3333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333{       {33{  =2(=     =33333{   (3333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333332      {2333=  .       %}33333{   (3333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333332= %2%.   =33333%        ){[333333{   {[{23333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))11133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333}(2333333333333333=   [33   {33333      =((%  %33333(      )3333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}333333333333333333333333333333333333333333333333333333333333333333333333({[333333333333333[=   [33333333333333    {3[   (33333   %{23(     [333})      {3333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))111333333333333333333333333333333333333333333333333333333333333333333333[).  =33333333333333(     %333333332{% {[    =3{   }33333.  {333%     233)       )33333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333333333333333333333333333333333333332{%     )3333333333333(       (33332{=    {(    .3)  .333333%  %333=    =33{     %{}333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))111333333333333333333333333333333333333333333333@33333333333333333333%      =23333333333333.  =(   =333{      %2)     }%  =333333)   (332=   (33)  .)[333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}333333333333333333333333333333333333333333333@@333333333333333333(     =}33333333333333{  %33=   33(      =33%     {   {333333(   .((=   )333}{(333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))111333333333333333333333333333333333333333333333@@@333333333333333332)=   (333333333333332   [33{   [3{      .33      %   (3333333%        =3333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@@@@@@@@@@@@@@@@@@333333333333333333{   23333[{{3333333{  %333{   (32{(}    [[          }3333333[       )33333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@3333333333333@@@3333333333333333333=  %3333)   {333333%  (333(   {33333=   {{         .333333333{    =(333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@3333333333333@@33333333333333333333   )333{    =33333[   2333(   {33333{   %)   %     =3333333333}{(}33333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@3333333333333@33333333333333333333[   (333.    {33333{  =3333[   )33333}    .  %)     {3333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@3333333333333333333333333333333333{   }333    %333333=  {33[)    )333333%      )(     (3333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@33333333333333333333333333333[)=(3)  %3333{  )2333333   {).      }333333)      (}     }3333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@33333333333333333333333333}{%   =3%  )33333333333333[          =[3333333(      }3    .33333333333333333}33333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@333333333333333333333332{%      (2   {3333332{)(3333(       %{)))23333333      33=   =33333333333333[). )3333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@33333333333333333333332%      %(3[   [3333})    3333(    %{[[.   =3333333=    =33{   {33333333333}{%    =3333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@3333333333333333333333{      .333{   3333(      3333(   [333%    =3333333{    {33(  .}3333333333)       [3333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))}}13333333333333333333333333333333@3333333333333333333333{ .)    [33=  =3333       3333[   [33[     )3333333}    (333{{23333333333[     .{233333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))11}3333333333333333333333333333333@33333333333333333333333233%   {33.  {3333. %.   2333}   )332=    [33333333%   23333333333333333(     =3333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@33333333333333333333333333)   =3}   [33332[3=   23333.   [33(   )333333333{  (333333333333333333((   =3333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))}}}3333333333333333333333333333333@33333333333333333333333333(    3(   23333333=   }3333{   .)%   %23333333333[3333333333333333333333   %3333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@333333333333333333333333332    [)  %33333333)   }33332        %23333333333333333333333333333333333   %3333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@333333333333333333333333333%   {%  )33333333)   [33333(      =233333333333333333333333333333333333.  %3333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@333333333333333333333333333)   %   (33333333)   [}33333{. .)[3333333333333333333333333333333333333%  .3333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@333333333333333333333333333(       233333333{     {33333333333333333333333333333333333333333333333%   3333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@3333333333333333333333333332      %3333333[=      )33333333333333333333333333333333333333333333333%   3333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@3333333333333333333333333333%     )333333}        [33333333333333333333333333333333333333333333333=   3333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@3333333333333333333333333333)     {333333)     %{}333333333333333333333333333333333333333333333333=   2333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@3333333333333333333333333333(     }333333{  .)[333333333333333333333333333333333333333333333333333=   2333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@33333333333333333333333333332     33333333{(333333333333333333333333333333333333333333333333333333)   }333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@33333333333333333333333333333%   =3333333333333333333333333333333333333333333333333333333333333333)   }333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@33333333333333333333333333333{   {3333333333333333333333333333333333333333333333333333333333333333)   [333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@33333333333333333333333333333[  .23333333333333333333333333333333333333333333333333333333333333333)   [333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@333333333333333333333333333333{{233333333333333333333333333333333333333333333333333333333333333333{   (333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333{   (333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333[)%     (333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333332)        (333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@3333333333333333333333333333333333333333333333333333333333333333333333333333}{=(333333333332%         {333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@33333333333333333333333333333333333333333333333333333333333333333333333332{%   )})==[333333%   %))    {333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@333333333333333333333333333333333333333333333333333333333333333333333333)     %{     23333)   {333(   {333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@33333333333333333333333333333333333333333333333333333333333()==)[333333{      )      {333[   {3333(   {333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@333333333333333333333333333333333333333333333333333333333{.      {33333{             =333=  %33333[   )333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@33333333333333333333333333333333333333333333333333333332=         }33332{(=     =3   .33}   {33333[   )333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@3333333333333333333333333333333333333333333333333333332%    %     {3333333)    %23%   33(   [33333}   )332333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@333333333333333333333333333333333333333333333333333333=   )233=   )3333333)    [33=   33{   [33333[   =[% (33333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@33333333333333333333333333333333333333333333333333333(   (3333[   )3333333)   )333=   33)   {33333=       (33333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@33333333333333333333333333333333333333333333333333333%  )33333}   )3333333{   (333=   33{   .}33}=       =333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@3333333333333333333333333333333333333333333333333333[   (333332   =3333333{   (333=  .33[     ==        {3333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@3333333333333333333333333333333333333333333333333333{   %%{3332   =3333333{   (333%  %333=            =}33333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@3333333333333333333333333333333333333333333333333333{      2332   =3333333{   (333%  =3332%      %[{=(3333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@3333333333333333333333333333333333333333333333333333(      }333   =3333333(   {333   )33332{% .=(333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@33333333333333333333333333333333333333333333333333332     %3333   %3333333(   {332   {33333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@33333333333333333333333333333333333333333333333333333(    [3333   %3333333(   {33[   (33333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@333333333333333333333333333333333333333333333333333333(=)}33333.  %3333333[   )23(   (33333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@3333333333333333333333333333333333333333333333333333333333})%     .3333333[     {{    =3333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@333333333333333333333333333333333333333333333333333333332)         3[(3332)     {)     3333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@3333333333333333333333333333333333333333333333333333333[%          %  33[      %{%    )3333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@333333333333333333333333333333333333333333333333333333[.   %)({      %33)    %{)    .{33333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@333333333333333333333333333333333333333333333333333332.   {3332.     )33) .)[33%   {2333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@33333333333333333333333333333333333333333333333333333)   }333}%      [333}33333(%)233333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@33333333333333333333333333333333333333333333333333333   %22[)       {3333333333333333333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@33333333333333333333333333333333333333333333333333332           )%=(33333333333333333333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@33333333333333333333333333333333333333333333333333333         %}333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@33333333333333333333333333333333333333333333333333333{      %{33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@333333333333333333333333333333333333333333333333333333}{)){[3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@333333333333333333333333333333333333333333333333333333333333333333333333333333333332{{23333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@33333333333333333333333333333333333333333333333333333333333333333333333333333333333%  {333333333333333333333333333333333333333332())(333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@3333333333333333333333333333333333333333333333333333333333333333333333333333333333(   {3333333333333333333333333333333333333333{     {33333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@3333333333333333333333333333333333333333333333333333333333333333333333333333333333(   )333333233333333333333333333333333333332=      .33333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@3333333333333333333333333333333333333333333333333333333333333333333333333333333333[   )333}{. )333333333333333333333333333332%        33333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@3333333333333333333333333333333333333333333333333333333333333333333333333333333333}   )3(=    =33333333333333333333333333333%        %33333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@3333333333333333333333333333333333333333333333333333333333333333333333333333333333}   %%      [33333333333333333333333332[3=         (33333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@33333333333333333333333333333333333333333333333333333333333333333333333333333333332        .{2333333333333333333333332(=  %   %     =333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@3333333333333333333333333333333333333333333333333333333333333333332(}333333333333{%      %(3333333333333333333333333{        )=    %2333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@3333333333333333333333333333333333333333333333333333333333333333()  .333333333})       =[33333333333333333333333333[        %3)   )33333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@3333333333333333333333333333333333333333333333333333333333333[).    %3333333(=        %3333333333333333333333333333(        [33((2333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@333333333333333333333333333333333333333333333333333333333333{       [33333(%          %33333333333333333333333333333{(2%   )333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@333333333333333333333333333333333333333333333333333333333332      {233333[      %{2.  %33333333333333333332{)={}3333333%   [333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@333333333333333333333333333333333333333333333333333333333332      3333333{   %{}333.  .333333333333333332)      (333333%   2333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@333333333333333333333333333333333333333333333333333333333333[[%   33333332){[333333%   3333333333333333[.        [33333=   2333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@33333333333333333333333333333333333333333333333333333333333333%   33333333333333333%   333333333333333[          %33333=   2333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@33333333333333333333333333333333333333333333333333333333333333=   33333333333333333%   333333333333332%   {22=    [3333=   2333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@33333333333333333333333333333333333333333333333333333333333333=   23333333333333333=   23333333333333{   [3333%   {3333)   }333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@33333333333333333333333333333333333333333333333333333333333333=   23333333333333333=   23333333333332   )33333{   )3333)   [333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@333333333333333333333333333333333333333333333332(2333333333333)   }33333333(){23333=   2333333333333{   233333[   {3333)   [333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@3333333333333333333333333333333333333333333333}. %333333333333)   [3333333=   )3333)   }333333333333%  %333333[   {3333)   =% [333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@3333333333333333333333333333333333333333333333=  .333333333333)   [333333)    =3333)   [333333333332   )333333(   [3333)      (333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@333333333333333333333333333333333333333333333[.   333333333333{   [333333     {3333)   [33333333333[   )333333)  %333(%      %2333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@333333333333333333333333333333333333333333}{%     333333333333{   (333333    =33333{   [33333323333[   =333332   {33{      %{23333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@3333333333333333333333333333333333333332{%        333333333333{   (333333(.%{333333{   (333[=  %}33}    23333)  .233%   .)[3333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@3333333333333333333333333333333333332{=           233333333333{   (3333333333333333{   (33{     .233    =333{   {333{%)(3333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@3333333333333333333333333333333333(=       .)[=  .333333333333(   {33333333})={3333{   (3(       (33)    %=.   =333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@3333333333333333333333333333333[)        )[333)  (333333333333(   {333333[=    3333{   {3%       {332         =3333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@333333333333333333333333333333=       =(3333333[23333333333333(   {33333{      3333(   {3        {333(       {33333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@33333333333333333333333333333(       {333333333333333333333332(   {33333       3333(   )3        }3333[=  %{2333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@33333333333333333333333333333(   %   {33333333333333333333[=      )33333% %%   2333(   %3(%%)   =333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@333333333333333333333333333333{{2(   {3333333333333333332)        )33333323=   2333}    {33(%   }333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@333333333333333333333333333333333(   {333333333333333332%         )33333333)   }3333%          (3333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@333333333333333333333333333333333[   )33333333333333333=   %{{%   )33333333)   }3333{         {33333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@333333333333333333333333333333333[   )333}233333333333)   {3332   =33333333)   [33333)      =[333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@333333333333333333333333333333333[   )33) .3333333333}   {33332   =33333333)   ([33333()=){}33333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@333333333333333333333333333333333}   )3(   }333333333)  .333333   =33333333)     {333333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@3333333333333333333333333333333332   =3)   [333333333   )333333   %333333(%      )333333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@3333333333333333333333333333333332   =3)   [33333333[   {333333   %33[33[       .}333333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@3333333333333333333333333333333333   %%    (33333333(   {333332   %(% )3)     ={23333333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@3333333333333333333333333333333333         (33333333(   =33333)       {3{  %{23333333333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1}}3333333333333333333333333333333@3333333333333333333333333333333333         (33333333[    {33}=       %233(}3333333333333333333333333333333333333333333333333333333333333333333333333333333@3333333333333333333333333333333333333111)))))",
")))))1113333333333333333333333333333333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@     .   @@@@@@@@@@               .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3333333333333333333333333333333333333111)))))",
")))))1}}333333333333333333333333333333333333333333333333333333333333333333.  .3(  =3333333333{         .  =23333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))111333333333333333333333333333333333333333333333333333333333333333333%   33((333333333333)      %[[)(333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))1}}333333333333333333333333333333333333333333333333333333333333333333%   33333333333333333()%%)(33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))111333333333333333333333333333333333333333333333333333333333333333333%   333333333{=[3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))1}}333333333333333333333333333333333333333333333333333333333333333333=   23333333{  )3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))111333333333333333333333333333333333333333333333333333333333333333333=   23333333.  =3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))1}}333333333333333333333333333333333333333333333333333333333333333333=   23333333   =3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))111333333333333333333333333333333333333333333333333333333333333333333)   }3333[).   %3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))1}}333333333333333333333333333333333333333333333333333333333333333333)   [3}{%      %3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))111333333333333333333333333333333333333333333333333333333333333333333)   )%         %3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))1}}333333333333333333333333333333333333333333333333333333333333333333)         %{.  {3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))11133333333333333333333333333333333333333333333333333333333333333332(%      .)[33)%{33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))1}}333333333333333333333333333333333333333333333333333333333333333{       )(3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))11133333333333333333333333333333333333333333333333333333333333333(     =(3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))1}}33333333333333333333333333333333333333333333333333333333333333(  ={2333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))111333333333333333333333333333333333333333333333333333333333333333[2333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))1}}33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))11133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))1}}33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))11133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))1}}33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))11133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))1}}33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))11133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))1}}33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))11133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))1}}33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111)))))",
")))))11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111)))))",
")))))12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222111)))))",
")))))11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111)))))",
"))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))",
"))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))",
"))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))",
"))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))",
"))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))"]

bar_xpm = [
"590 8 4 1",
" 	c #3B0E6A",
".	c #6B0D77",
"+	c #880E4A",
"@	c #82105C",
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
"..............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              "]

cav16_xpm = [
"16 16 16 1",
" 	c None",
".	c #FFFFFF",
"+	c #A346A7",
"@	c #CFC7D0",
"#	c #828481",
"$	c #B3B5B2",
"%	c #999B98",
"&	c #747474",
"*	c #DFDEDF",
"=	c #62615F",
"-	c #AD9BB0",
";	c #C792D1",
">	c #A165A6",
",	c #BF1CCC",
"'	c #9C8399",
")	c #D0A9D7",
"...........++++.",
".+.+.+.@#@....+.",
".+.+.+.$%$....+.",
".+.+.+.$&@.%%.+.",
".+++++.@&$%%#.+.",
"......**=#*=-.+.",
"+.....@*%*=#..+.",
"+.....$%%&&.....",
"+.;>@.+,=&*.....",
"+.+#',,,&.......",
"+.>@@,>,$...+++.",
"+.*++&++>@..+.+.",
"+..@$@>#@+*.+++.",
"+.....)>*+$.+...",
"+......->&*.+...",
"++++++.........."]

cav32_xpm = [
"32 32 17 1",
" 	c None",
".	c #9D446E",
"+	c #A772A0",
"@	c #FFFFFF",
"#	c #9D9E9D",
"$	c #BBB9BB",
"%	c #DBDFDC",
"&	c #424442",
"*	c #7A7E7A",
"=	c #616460",
"-	c #000000",
";	c #212121",
">	c #9A0BA5",
",	c #B902CA",
"'	c #852D8C",
")	c #A330AD",
"!	c #E60DFA",
".++++++++++++++++++++++++++++++.",
"+@@@@@@@@@@@@@@@##@@@@@@@@@@@@@+",
"+@@@@@@@@@$@@@@%&*$@@@@@@@@@@@@+",
"+@@@@@%@@$&@@@@=%=#%@@@@@@@@@@@+",
"+@@@@%-$@%&@@@@=%=*%@@@@@@@@@@@+",
"+@&%@%&&@%;@@@$$$=#%@@@@@@@@@@@+",
"+@#&@@&*#@-@@@=%#=#@@@@#*@@@@@@+",
"+@@&$@&@&@;@@@&@*=#@@@*=*$%@@@@+",
"+@@$;@&@#*;%@@*@*=#@@&$***%@@@@+",
"+@@@=#&@@&;%@%*@*=#$&%%==#@@@@@+",
"+@@@%;;@@$-%@$#@===&%@===%@@@@@+",
"+@@@@*-%@@@@@#$@===%@#==#@@@@@@+",
"+@@@@@$@@@@@@*%@=*%@#==#%@@@@@@+",
"+@@@@@@@@@@@@=%@=%@$&&*%@@@@@@@+",
"+@@@@@@@@@@@@=$%=@$==*$@@@@@@@@+",
"+@@@@@@@@@@@@*===$&&=$@@@@@@@@@+",
"+@@@@$+$@@@@@>,'&=&*$@@@@@@@@@@+",
"+@@@+,)+'%@%),!,==*$@@@@@%##@@@+",
"+@@@,+*=#'),!,!+&*$@@@%*;;;-#@@+",
"+@@@,$=#$#,!,,!+=$@@@@#&-%@-=@@+",
"+@@@>##%@$,,#)!+=%@@@@@#-$@-#@@+",
"+@@@$'#%@+,**>!)#%@@@@@$-#*;@@@+",
"+@@@%+,+),+=#,,,'$@@@@@%--=%@@@+",
"+@@@@%#++#**#,#=#>+%@@@@-*@@@@@+",
"+@@@@@$#**#$#)==##>$%@@@-=@@@@@+",
"+@@@@@@%%%%@$)*#@%)+#%@%;-;$@@@+",
"+@@@@@@@@@@@@>#$@@,+*%@=*$@@@@@+",
"+@@@@@@@@@@@@$>+%#,#*%@@@@@@@@@+",
"+@@@@@@@@@@@@%#)>)+=*%@@@@@@@@@+",
"+@@@@@@@@@@@@@%#*#**$@@@@@@@@@@+",
"+@@@@@@@@@@@@@@%$$$%@@@@@@@@@@@+",
".++++++++++++++++++++++++++++++."]


#################################

bg_xpm = [
"1 450 52 1",
" 	c #D7D7D7",
".	c #D8D8D8",
"+	c #D9D9D9",
"@	c #DADADA",
"#	c #DBDBDB",
"$	c #DCDCDC",
"%	c #DDDDDD",
"&	c #DEDDDE",
"*	c #DEDEDE",
"=	c #DFDFDF",
"-	c #DFE0DF",
";	c #E0E0E0",
">	c #E1E1E1",
",	c #E1E1E2",
"'	c #E2E2E2",
")	c #E3E3E3",
"!	c #E4E4E4",
"~	c #E5E5E5",
"{	c #E6E5E5",
"]	c #E6E6E6",
"^	c #E7E7E7",
"/	c #E8E8E8",
"(	c #E9E9E9",
"_	c #EAEAEA",
":	c #EBEBEB",
"<	c #ECECEC",
"[	c #EDEDED",
"}	c #EEEEEE",
"|	c #EFEEEF",
"1	c #EFEFEF",
"2	c #F0F0F0",
"3	c #F1F0F0",
"4	c #F1F1F1",
"5	c #F2F2F2",
"6	c #F2F3F2",
"7	c #F3F3F3",
"8	c #F4F4F4",
"9	c #F5F4F4",
"0	c #F5F5F5",
"a	c #F6F6F6",
"b	c #F6F7F6",
"c	c #F7F7F7",
"d	c #F8F8F8",
"e	c #F9F9F9",
"f	c #F9F8F8",
"g	c #F6F6F7",
"h	c #F4F5F4",
"i	c #F3F2F2",
"j	c #E9EAE9",
"k	c #E3E3E4",
"l	c #E1E2E1",
"m	c #E0DFDF",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
".",
".",
"+",
"@",
"@",
"#",
"$",
"$",
"%",
"&",
"*",
"=",
"-",
";",
">",
",",
"'",
")",
")",
"!",
"~",
"{",
"]",
"^",
"^",
"/",
"(",
"(",
"_",
":",
":",
"<",
"[",
"[",
"}",
"|",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"0",
"a",
"b",
"c",
"d",
"d",
"e",
"f",
"d",
"c",
"g",
"a",
"0",
"h",
"8",
"7",
"i",
"5",
"4",
"3",
"2",
"1",
"1",
"}",
"[",
"[",
"<",
":",
":",
"_",
"j",
"(",
"/",
"^",
"^",
"]",
"~",
"~",
"!",
"k",
")",
"'",
"l",
">",
";",
"m",
"=",
"*",
"*",
"%",
"$",
"$",
"#",
"@",
"@",
"+",
".",
".",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
".",
".",
"+",
"@",
"@",
"#",
"$",
"$",
"%",
"*",
"*",
"=",
"m",
";",
">",
"l",
"'",
")",
"k",
"!",
"~",
"~",
"]",
"^",
"^",
"/",
"(",
"j",
"_",
":",
":",
"<",
"[",
"[",
"}",
"1",
"1",
"2",
"3",
"4",
"5",
"i",
"7",
"8",
"h",
"0",
"a",
"g",
"c",
"d",
"f",
"e",
"d",
"d",
"c",
"b",
"a",
"0",
"9",
"8",
"7",
"6",
"5",
"4",
"3",
"2",
"1",
"|",
"}",
"[",
"[",
"<",
":",
":",
"_",
"(",
"(",
"/",
"^",
"^",
"]",
"{",
"~",
"!",
")",
")",
"'",
",",
">",
";",
"-",
"=",
"*",
"&",
"%"]

file_screen = [
"348 288 13 1",
" 	c None",
".	c #FEFFFC",
"+	c #0C0E0A",
"@	c #CACCC9",
"#	c #989A94",
"$	c #6C552E",
"%	c #666664",
"&	c #D0CB95",
"*	c #2D679B",
"=	c #FAFCF9",
"-	c #939592",
";	c #0E100D",
">	c #4C4D4B",
"............................................................................................................................................................................................................................................................................................................................................................",
".................................................................................+.........................+................................................................................................................................................................................................................................................",
"..+++++..........+..........................+............................+.......+.........................+..............+......+..........................................................................................................................................................................................................................",
"..+..............+..........................+............................+.................................+..............+......+..........................................................................................................................................................................................................................",
"..+......++++...++++....+++...+.++..........+.......+++....+++....+++...++++....++.....+++...++++..........++++...+...+..++++...++++....+++...++++..........................................................................................................................................................................................................",
"..++++...+...+...+.....+...+..++..+.........+......+...+..+...+......+...+.......+....+...+..+...+.........+...+..+...+...+......+.....+...+..+...+......................................................................................................................++........+............................................+...........................",
"..+......+...+...+.....+++++..+.............+......+...+..+.......++++...+.......+....+...+..+...+.........+...+..+...+...+......+.....+...+..+...+.......................................................................................................+++++...........+........+.......................++++...........+.....+...........................",
"..+......+...+...+.....+......+.............+......+...+..+......+...+...+.......+....+...+..+...+.........+...+..+...+...+......+.....+...+..+...+.......................................................................................................+...............+........+.......................+...+..........+.....+...........................",
"..+......+...+...+.....+...+..+.............+......+...+..+...+..+...+...+.......+....+...+..+...+.........+...+..+...+...+......+.....+...+..+...+.......................................................................................................+.......+++.....+.....++++...+++...+.++..........+...+...+++...++++...++++........................",
"..+++++..+...+....+++...+++...+.............+++++...+++....+++....++++....+++...+++....+++...+...+.........++++....++++....+++....+++...+++...+...+.......................................................................................................++++...+...+....+....+...+..+...+..++..+.........+...+......+...+.....+...+.......................",
"..........................................................................................................................................................................................................................................................+......+...+....+....+...+..+++++..+.............++++....++++...+.....+...+.......................",
"..........................................................................................................................................................................................................................................................+......+...+....+....+...+..+......+.............+......+...+...+.....+...+.......................",
"..........................................................................................................................................................................................................................................................+......+...+....+....+...+..+...+..+.............+......+...+...+.....+...+.......................",
"..........................................................................................................................................................................................................................................................+.......+++.....++....++++...+++...+.............+.......++++....+++..+...+.......................",
"............................................................................................................................................................................................................................................................................................................................................................",
"............................................................................................................................................................................................................................................................................................................................................................",
"............................................................................................................................................................................................................................................................................................................................................................",
"............................................................................................................................................................................................................................................................................................................................................................",
".............................................................................................................................................................................................................................................+.....+........................................................................................................",
"........................................+.....+..............................................................................................................................................................................................+....+.........................................................................................................",
".........................................+....+..............................................................................................................................................................................................+...+..........................................................................................................",
"..........................................+...+..............................................................................................................................................................................................+..+...........................................................................................................",
"...........................................+..+..............................................................................................................................................................................................+.+............................................................................................................",
"............................................+.+..............................................................................................................................................................................................++.............................................................................................................",
".............................................++..............................................................................................................................................................................................+++++++........................................................................................................",
"........................................+++++++.............................................................................................................................................................................................................................................................................................................",
"............................................................................................................................................................................................................................................................................................................................................................",
"............................................................................................................................................................................................................................................................................................................................................................",
"............................................................................................................................................................................................................................................................................................................................................................",
"............................................................................................................................................................................................................................................................................................................................................................",
"............................................................................................................................................................................................................................................................................................................................................................",
"............................................................................................................................................................................................................................................................................................................................................................",
"...............................................+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++....................",
"...............................................+@@@@@@@@@@@@@@@@@@@@@@@@@@#+.............@@@@@@@@@@@@@@@@@@@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+#+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.......................................................+....................",
"...............................................+@@@@@@@@@@@@@@@@@@@@@@@@@@#+.............@@@@@@@@@@@@@@@@@@@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+#+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.......................................................+....................",
"...............................................+@@@@@@@@@@@@@@@@@@@@@@@@@@#+.............@@@@@@@@@@@@@@@@@@@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+#+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.......................................................+....................",
"...............................................+@@@@@@@@@@@@@@@@@@@@@@@@@@#+.............@@@@@@@@@@@@@@@@@@@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+#+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.......................................................+....................",
"...............................................+@@@@@$++%%%%%%$%%%#&@@@@@@#+.............@@@@@@@@@@@@@@@@@@@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+#+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.......................................................+....................",
"...............................................+@@@@#%..........@.@%#@@@@@#+.............@@@@@@@@@@@@@@@@@@@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+#+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.......................................................+....................",
"...............................................+@@@@#%..@@@@@@@@@..@#@@@@@#+.............@@@@@@&#%%%%%%%%#@@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+#+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.......................................................+....................",
"...............................................+@@@@#%..........@++++%@@@@#+.............@@@@@@%#&&&&$%%%+#@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+#+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.......................................................+....................",
"...............................................+@@@@#%.@@@@@@@@@@@%$&$#@@@#+.............@@@@@@%&#$$$%##++#@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+#+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.......................................................+....................",
"...............................................+@@@@#%..........@#$&$$#@@@#+.............@@@@@@+%%+%##&$++#@@@@@#+.@@@@@@@@@+@@@@@@@@@@@@@@@@@@@+@@@@@@@@@@@@@@@@@@@@@@@@@@#+#+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++@@++@@@@@@@@@@@@@@@@@@@@@@@@@@%%@@@@@@@@@@@+++@@@@@@@@%+++%@@@@@@.......................................................+....................",
"...............................................+@@@@#%..@@@@@@@@#$&$+$@@@@#+.............@@@@@@%%#@#&&$+%+#@@@@@#+.@@@@@@@@@+@@@@@@@@@@@@@@@@@@@+@@@@@@@@@@@@@@@@@@@@@@@@@@#+#+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++@@%%@@@@@@@@@@@@@@@@@@@@@@@@@@++@@@@@@@@@@%+++@@@@@@@%++%++%@@@@@.......................................................+....................",
"...............................................+@@@@#%.@@@@@@@@#$&$$$%@@@@#+.............@@@@@@+#@@#%#@@%%#@@@@@#+.@@@@@@@@@+%++@@@%+++@@@@+++%@+@@%+@+@@@+@@+%++@@@@@@@@@@#+#+@@@%+%@++#@++@++%+++@@@@%+++%@++@@++@@++%+++@@@&++++#@@++%+%@+++++@@@@@@@#+%++@@@@@@@++#@#++@@@@@.......................................................+....................",
"...............................................+@@@@#%........#$&$+%+%@@@@#+.............@@@@@@%@#@@@...#%#@@@@@#+.@@@@@@@@@+#@%+@@@@@#+@@+%@@@@+@+%@@+@@@+@@+#@%+@@@@@@@@@#+#+@@@#++@++%#+$@+++%+++@@+++%%%@++@@++@@+++%+++@@#%%%++@@+++%#@%++%%@@@@@@@++@++@@@@@@@++@@@++@@@@@.......................................................+....................",
"...............................................+@@@@#%.@@@@@@#$&$$%#+%@@@@#+.............@@@@@@%@#@@%##@&+#@@@@@#+.@@@@@@@@@+@@@+@@#++$+@@+@@@@@++#@@@+@@@+@@+@@@+@@@@@@@@@#+#+@@@@++#+++%+#@++#@#++@@++#@@@@++@@++@@++#@#++@@&+++++@@++#@@@@++@@@@+++@%+##++#@@@@@@++@@@++@@@@@.......................................................+....................",
"...............................................+@@@@#%..&@@@@+&$+%#@$%@@@@#+.............@@@@@@%@&@@%%#@&+#@@@@@#+.@@@@@@@@@+@@@+@@+@@@+@@+@@@@@+%+@@@+@@@+@@+@@@+@@@@@@@@@#+#+@@@@++++%+++@@++#@#++@@++#@@@@++@@++@@++#@#++@@++%#++@@++@@@@@++@@@@###@%++++++#@@@@@++#@#++@@@@@.......................................................+....................",
"...............................................+@@@@#%.@@@@@%$$+%#@@$%@@@@#+.............@@@@@@%@&@#%%#@#%#@@@@@#+.@@@@@@@@@+#@%+@@+@@%+@@+%@@@@+@%+@@+@@%+@@+#@%+@@@@@@@@@#+#+@@@@%++%#+++@@+++%+++@@+++%%%@++@@++@@+++%+++@@++%%++@@++@@@@@++%#@@@@@@####++%@@++@@%++%++%@@@@@.......................................................+....................",
"...............................................+@@@@#%.@@@@@++%#@@@@$%@@@@#+.............@@@@@@%#..@####%%#@@@@@#+.@@@@@@@@@+%++@@@%++%+@@@+++%@+@@%+@%++%+@@+%++@@@@@@@@@@#+#+@@@@#++#@++%@@++%+++@@@@%+++%@++@@++@@++%+++@@@&++%++@@++@@@@@%+++@@@@@@@@@@++@@@++@@@%+++%@@@@@@.......................................................+....................",
"...............................................+@@@@#%.@@@@@@@@@@@@@$%@@@@#+.............@@@@@@%##&.@@#%#%#@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+@@@@@@@@@@@@@#+#+@@@@@@@@@@@@@@++@@@@@@@@@@@@@@@@@@@@@@++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.......................................................+....................",
"...............................................+@@@@#%.....&@@@@@@@@$%@@@@#+.............@@@@@@%%#%##%%##+#@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+@@@@@@@@@@@@@#+#+@@@@@@@@@@@@@@++@@@@@@@@@@@@@@@@@@@@@@++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.......................................................+....................",
"...............................................+@@@@#%.&&&&&@@@@@@@@$%@@@@#+.............@@@@@@#%$$+++$$$%#@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+#+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.......................................................+....................",
"...............................................+@@@@#%@@@@@@@@@@@@@#+%@@@@#+.............@@@@@@@@@@&&&&&&@@@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+#+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.......................................................+....................",
"...............................................+@@@@&++++++++++++++++#@@@@#+.............@@@@@@@@@@@@@@@@@@@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+#+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.......................................................+....................",
"...............................................+@@@@@@###############@@@@@#+.............@@@@@@@@@@@@@@@@@@@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+#+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.......................................................+....................",
"...............................................+@@@@@@@@@@@@@@@@@@@@@@@@@@#+.............@@@@@@@@@@@@@@@@@@@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+#+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.......................................................+....................",
"...............................................+@@@@@@@@@@@@@@@@@@@@@@@@@@#+.............@@@@@@@@@@@@@@@@@@@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+#+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.......................................................+....................",
"...............................................+@@@@@@@@@@@@@@@@@@@@@@@@@@#+.............@@@@@@@@@@@@@@@@@@@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+#+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.......................................................+....................",
"...............................................+###########################+.............########################+.#########################################################+#+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.......................................................+....................",
"...............................................+++++++++++++++++++++++++++++............+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#.........................................................................................................................................................+....................",
"...............................................+.......................................................................................................................................................................................................................................................................................+....................",
"...............................................+.......................................................................................................................................................................................................................................................................................+....................",
"...............................................+.......................................................................................................................................................................................................................................................................................+....................",
"...............................................+.......................................................................................................................................................................................................................................................................................+....................",
"...............................................+.......................................................................................................................................................................................................................................................................................+....................",
"...............................................+.......................................................................................................................................................................................................................................................................................+....................",
"...............................................+.......................................................................................................................................................................................................................................................................................+....................",
"...............................................+.......................................................................................................................................................................................................................................................................................+....................",
"...............................................+.......................................................................................................................................................................................................................................................................................+....................",
"...............................................+.......................................................................................................................................................................................................................................................................................+....................",
"...............................................+.......................................................................................................................................................................................................................................................................................+....................",
"...............................................+.......................................................................................................................................................................................................................................................................................+....................",
"...............................................+##################################################################################################@@@@@################################################################################################################################################################...#############+....................",
"...............................................++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.@@@@@#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++....#............+....................",
"...............................................+...............................................................................................+@.@@@@@#+...........................................................................................................................................................+@....#.@@@@@@@@@@@+....................",
"...............................................+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@.@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@....#.@@@@@@@@@@@+....................",
"...............................................+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@.@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@....#.@@@@@@@@@@@+....................",
"...............................................+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@.@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@....#.@@@@@#@@@@@+....................",
"...............................................+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@.@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@....#.@@@@#%#@@@@+....................",
"...............................................+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@.@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@....#.@@@#%%%#@@@+....................",
"...............................................+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@.@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@....#.@@#%%%%%#@@+....................",
"...............................................+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@.@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@....#.@@@.......@+....................",
"...............................................+.@@@++++@@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@.@@@@@#+.@@@@@+%@@@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@....#.@@@@@@@@@@@+....................",
"...............................................+.@@@+@@%+@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@.@@@@@#+.@@@@@++@@@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%+++++++%@@@@@@@#+@....#.@@@@@@@@@@@+....................",
"...............................................+.@@@+@@@+@+@@%+++@@@@+++%@@++$+@@@%+++%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@.@@@@@#+.@@@@@+%+@@+@@%+++@@@+%++#%++#@@@++$+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+++++++@@@@@@@@#+@....#.@@@@@@@@@@@+....................",
"...............................................+.@@@+@@%+@+@@@@@#+@@+%@@@@+#@@#+@@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@.@@@@@#+.@@@@@+@+&@+@@@@@#+@@+#@#+#@#+@@+#@@#+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+++++@@@@@@@@@#+@....#.###########+....................",
"...............................................+.@@@++++@@+@@#++$+@@+@@@@@+++++$@@++%#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@.@@@@@#+.@@@@@+@#+@+@@#++$+@@+@@@+@@@+@@+++++$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+++@@@@@@@@@@#+@....#+++++++++++++....................",
"...............................................+.@@@+@@@@@+@@+@@@+@@+@@@@@+@@@@@@@@&&++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@.@@@@@#+.@@@@@+@@+#+@@+@@@+@@+@@@+@@@+@@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+@@@@@@@@@@@#+@....#............+....................",
"...............................................+.@@@+@@@@@+@@+@@%+@@+%@@@@+%@@@@@@@@@#+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@.@@@@@#+.@@@@@+@@#++@@+@@%+@@+@@@+@@@+@@+%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@....#.@@@@@@@@@@@+....................",
"...............................................+.@@@+@@@@@+@@%++%+@@@+++%@@+++$%@@++++#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@.@@@@@#+.@@@@@+@@@++@@%++%+@@+@@@+@@@+@@@+++$%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@....#.@@@@@@@@@@@+....................",
"...............................................+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@.@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@....#.@@@@@@@@@@@+....................",
"...............................................+.@@++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@.@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@....#.@@@@@@@@@@@+....................",
"...............................................+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@.@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@....#.@@@@@@@@@@@+....................",
"...............................................+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@.@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@....#.@@@@@@@@@@@+....................",
"...............................................+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@.@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@....#.@@@@@@@@@@@+....................",
"...............................................+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@.@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@....#.@@@@@@@@@@@+....................",
"...............................................+.##############################################################################################+@.@@@@@#+.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@....#.@@@@@@@@@@@+....................",
"...............................................+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++@.@@@@@#+.##########################################################################################################################################################+@....#.@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++@....#.@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**.*.*.*.*.*.*.*.*.*.*.*.*.*@....#.@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+.**********************************************************************************************************************************************************.@....#.@@@@@@@@@@@+....................",
"...............................................+...#+++++++++@..................................................................................@.@@@@@#+************************************************************************************************************************************************************@....#.@@@@@@@@@@@+....................",
"...............................................+...+........@+#.................................................................................@.@@@@@#+.**********************************************************************************************************************************************************.@....#.@@@@@@@@@@@+....................",
"...............................................+...+.......@.#+@................................................................................@.@@@@@#+************************************************************************************************************************************************************@....#.@@@@@@@@@@@+....................",
"...............................................+...+.......#%%++......@+....@+.....................@+....@+.....................................@.@@@@@#+.****++++**************************************************************************************************************************************************.@....#.@@@@@@@@@@@+....................",
"...............................................+...+........#+++......@+....@+.....................@+....@+.....................................@.@@@@@#+****+.@@#+**************************************************************************************************************************************************@....#.@@@@@@@@@@@+....................",
"...............................................+...+..........@+......@+....@+..#+++#...%++%..@+#++@+....@+...%++%..@+#++@#++@...%++%...........@.@@@@@#+.**+.&&&#%+++++**********.@****************************@****************************.****.**@*********@****************************************************.@....#.@@@@@@@@@@@+....................",
"...............................................+...+..........@+......@+....@+..+@..@..%%..+%.@+%..@+....@+..%%..+#.@+%.%+%.%+..%%..+%..........@.@@@@@#+***+&&&&&####&#+*********@.*********************************************************.****.************.*****************************************************@....#.@@@@@@@@@@@+....................",
"...............................................+...+..........@+......@+....@+..+#.....+@..@+.@+...@+++++++..+@..@+.@+..@+..@+..+@..@+..........@.@@@@@#+.**+.&%++++++++++*******@#@****.@..#@..#***@..@***.@.@*.***@..@*@...#**.@..#********.****.**.**@...@*@...**@..@***.@.@*@***.*******************************.@....#.@@@@@@@@@@@+....................",
"...............................................+...+..........@+......@+....@+..@+++@.@++++++.@+...@+....@+.@+...@+.@+..@+..@+.@++++++..........@.@@@@@#+***+@&$.&@&&&&&&#+******.*#.***.#*#.#*#.**@#***@**.****.**.********#@**.#**.********......**.**.******.***.***@@**.****.***@********************************@....#.@@@@@@@@@@@+....................",
"...............................................+...+..........@+.......+@...@+.....#+..+......@+...@+....@+..+@..@+.@+..@+..@+..+...............@.@@@@@#+.**+@%#&&&&&&&&#&+*****@@**.#**.***.***.**......**.****.**.*****#....**.***.********.****.**.**.@*#***.***.***#.**.****@@*.#*******************************.@....#.@@@@@@@@@@@+....................",
"...............................................+...+..........@+.......%%..@+#.@@..#+..%%...@.@+...@+....@+..+%..+%.@+..@+..@+..%%...@..........@.@@@@@#+***+#$.@&&&&&&&#+******.....@**.***.***.**.*******.****.**.*****.#*#.**.***.********.****.**.***#*@@**.***.***#.**.*****.#.*********************************@....#.@@@@@@@@@@@+....................",
"...............................................+...+..........@+........%+++%..@++++@...%+++#.@+...@+....@+...%++%..@+..@+..@+...%+++#..........@.@@@@@#+.**+&#&&&&&&&&&&+*****#.****.**.***.***.**@@***#**.****.**.*****.**@.**.***.********.****.**.*****#.**.***.***@@**.*****@.*********************************.@....#.@@@@@@@@@@@+....................",
"...............................................+...+..........@+................................................................................@.@@@@@#+***+#.&&&&&&&&#+******@*****@**.***.***.***@...***.****.***@..@*@..@.**.***.********.****.**.**....#**@..**@..@***.*****#.**********************************@....#.@@@@@@@@@@@+....................",
"...............................................+...+..........@+................................................................................@.@@@@@#+.**+%&@&&&&&&#%+********************************************************************************************************@@*********************************.@.@@@#.@@@@@@@@@@@+....................",
"...............................................+...+@@@@@@@@@@#+................................................................................@.@@@@@#+****+++++++++++********************************************************************************************************..***********************************@.@@@#.@@@@@@@@@@@+....................",
"...............................................+...#+++++++++++#................................................................................@.@@@@@#+.****************************************************************************.....@************************************************************************.@.@@@#.@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+************************************************************************************************************************************************************@.@@@#.@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+.**********************************************************************************************************************************************************.@.@@@#.@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+************************************************************************************************************************************************************@.@@@#.@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.@.@@@#.@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+....##%%%%%%%%#.................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+....%#&&&&$%%%+@................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+....%&#$$$%##++#................................................................................@.@@@@@#+....#++++#..................................................................................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+....+%%+%##&$++#.......++++%+..+..............@++++#................#...........................@.@@@@@#+...#+.@@#+#.................................................................................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+....%%#@#&&$+%+#.......+.......+..............+@...@................+...........................@.@@@@@#+...+.&&&#%+++++#....................@+...................@+.................................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+....+#@@#%#@@%%#.......+....+..+...%+++.......+......#%...+..#+++#.++++..%+++...+%++@%++@.......@.@@@@@#+...+&&&&&####&#+.........................................@+.................................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+....%@#@@@...#%#.......++++@+..+..+@..#+......%++%@...+..#%..+......+...+@..#+..+@.#+@.#+.......@.@@@@@#+...+.&%++++++++++#.....#+++@.@+%++@.@+.@+%++@%++#..#+++@.@+..%+++#..........................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+....%@#@@%##@&+#.......+....+..+..++++++........#%+%..%#.+@..++#@...+...++++++..+..@+..@+.......@.@@@@@#+...+@&$.&@&&&&&&#+........#+.@+#.#+.@+.@+#.#+#.#+.....#+.@+.@+..............................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+....%@&@@%%#@&+#.......+....+..+..+...............@+..@+@+....@#+%..+...+.......+...+...+.......@.@@@@@#+...+@%#&&&&&&&&#&+.....#++++.@+..@+.@+.@+..@+..@+..#++++.@+..++#@...........................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+....%@&@#%%#@#%#.......+....+..+..+%...@......@...#+...++#......@+..+...+%...@..+...+...+.......@.@@@@@#+...+#$.@&&&&&&&#+#.....+@.@+.@+..@+.@+.@+..@+..@+..+@.@+.@+...@#+%..........................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+....%#..@####%%#.......+....+..+...%+++#......+++++@...@+....++++@..%++..%+++#..+...+...+.......@.@@@@@#+...+&#&&&&&&&&&&+.....@+@.%+.@+..@+.@+.@+..@+..@+.@+@.%+.@+..@..@+..........................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+....%##&.@@#%#%#.......................................%%.......................................@.@@@@@#+...+#.&&&&&&&&#+#......%++%+.@+..@+.@+.@+..@+..@+..%++%+.@+.@++++#..........................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+....%%#%##%%##+#......................................++........................................@.@@@@@#+...+%&@&&&&&&#%+............................................................................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+....@%%%%%%%%%%#................................................................................@.@@@@@#+...#+++++++++++#............................................................................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+......@@@@@@@@@.................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+.##############################################################################################.@.@@@@@#+............................................................................................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+================================================================================================@.@@@@@#+............................................................................................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+================================================================================================@.@@@@@#+............................................................................................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+================================================================================================@.@@@@@#+....@++++@..................................................................................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+===-;;;;;;;;;-==================================================================================@.@@@@@#+...@+.@@#+@.................................................................................................................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+===;========-;-=================================================================================@.@@@@@#+...+.&&&#%+++++@..........................................+...................................+.............................................................@.@@@#.@@@@@@@@@@@+....................",
"...............................................+===;=======-=-;-================================================================================@.@@@@@#+...+&&&&&####&#+..........................................+.................................................................................................@.@@@#.###########+....................",
"...............................................+===;=======-->>;================================================================================@.@@@@@#+...+.&%++++++++++@.....#+++@..+%+#.+%++@%++@...%+++...@++%+........#+++#...%+++...+%+##%...+..+...+++%..%+++...#+++#........................................@.@@@#+++++++++++++....................",
"...............................................+===;========->;;=============================;==>=====================-=========>;=======>;;-===@.@@@@@#+...+@&$.&@&&&&&&#+........#+..+#...+@.#+@.#+..+@..#+..+@.%+........+......+@..#+..+#...+..#+..+..+#....+@..#+..+............................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+===;==========-;=============================;========================;========->;======>-==>-==@.@@@@@#+...+@%#&&&&&&&&#&+.....#++++..+....+..@+..@+..++++++..+..@+........++#@...++++++..+....+#.+#..+..+.....++++++..++#@.........................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+===;==========-;======->==;-=->=;->>====>;>-=;==;==;->>===->;>===;->->;>>======>=;======;===->==@.@@@@@#+...+#$.@&&&&&&&#+@.....+@.@+..+....+...+...+..+.......+..@+.........@#+%..+.......+....#+.+...+..+.....+........@#+%........................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+===;==========-;=======;=->>=>-=;-=->==>-====;==;==;-=->=====->==;-===;=======>-=;======;====;==@.@@@@@#+...+&#&&&&&&&&&&+......+..%+..+....+...+...+..+%...@..+@.%+...........@+..+%...@..+.....+%%...+..+#....+%...@.....@+........................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+===;==========-;=======;=>-;=;==;===;==;=====;==;==;===;==->;;;==;====;======->==;======;====;==@.@@@@@#+...+#.&&&&&&&&#+@......%++#+..+....+...+...+...%+++#..@++%+........++++@...%+++#..+.....%+@...+...+++%..%+++#..++++@........................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+===;==========-;=======>-;=>->==;===;==;=====;==;==;===;==;===;==;====;==->>->;;;;;=====;===->==@.@@@@@#+...+%&@&&&&&&#%+............................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+===;==========-;=======-;>=-;-==;-=->==>-====;==;==;-=->==;==>;==;====;==========;======>-==>-==@.@@@@@#+...@+++++++++++@............................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+===;==========-;========;-==;-==;->>====>;>-=;==;==;->>===-;>-;==;====>;>========;===>===>;;-===@.@@@@@#+............................................................+++++%..........................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+===;==========-;================;==================;============================================@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+===;==========-;================;==================;============================================@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+===;-----------;================================================================================@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+===-;;;;;;;;;;;-================================================================================@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+================================================================================================@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+================================================================================================@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+================================================================================================@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+....#++++#..................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...#+.@@#+#.................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+.&&&#%+++++#...................%........................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+&&&&&####&#+..................@+........................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+.&%++++++++++#.....#+++@.@+%+%++++......................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+@&$.&@&&&&&&#+........#+.@+#..@+........................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+@%#&&&&&&&&#&+.....#++++.@+...@+........................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+#$.@&&&&&&&#+#.....+@.@+.@+...@+........................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+&#&&&&&&&&&&+.....@+@.%+.@+...@+........................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+#.&&&&&&&&#+#......%++%+.@+....%++......................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+%&@&&&&&&#%+............................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...#+++++++++++#............................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+....@++++@..................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...@+.@@#+@.................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+.&&&#%+++++@.......+......+................+............................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+&&&&&####&#+.......+......+................+............................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+.&%++++++++++@.....+%++...+..#+++@..+%++@..+..%%.#+++#..................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+@&$.&@&&&&&&#+.....+@.%%..+.....#+..+@.#+..+.+%..+......................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+@%#&&&&&&&&#&+.....+..@+..+..#++++..+..@+..++#...++#@...................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+#$.@&&&&&&&#+@.....+..@+..+..+@.@+..+...+..+%+....@#+%..................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+&#&&&&&&&&&&+......+@.%%..+..+..%+..+...+..+.%+.....@+..................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+#.&&&&&&&&#+@......+%++...+..%++#+..+...+..+..#+@++++@..................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+%&@&&&&&&#%+............................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...@+++++++++++@............................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@..@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@.@+@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@++@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@..@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@.@+@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@++@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@..@@#+....#++++#..................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@.@+@#+...#+.@@#+#.................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@++@#+...+.&&&#%+++++#......@+............@+.@+.....@+.@+.........................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+&&&&&####&#+......@+...............@+.....@+............................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+.&%++++++++++#....@+%++@.@+..@+.@+.@+..@++%+.@+.@+%++@..@++%+..%+++#....................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@..@@#+...+@&$.&@&&&&&&#+....@+#.%+.@+..@+.@+.@+..+#.%+.@+.@+#.#+..+#.%+.@+........................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@.@+@#+...+@%#&&&&&&&&#&+....@+..@+.@+..@+.@+.@+.@+..@+.@+.@+..@+.@+..@+..++#@.....................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@++@#+...+#$.@&&&&&&&#+#....@+..@+.@+..@+.@+.@+.@+..@+.@+.@+..@+.@+..@+...@#+%....................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+&#&&&&&&&&&&+.....@+#.%+..+@.%+.@+.@+..+#.%+.@+.@+..@+..+#.%+..@..@+....................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+#.&&&&&&&&#+#.....@+%++@..#++%+.@+.@+..@++%+.@+.@+..@+..@++%+.@++++#....................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@..@@#+...+%&@&&&&&&#%+...............................................%+...........................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@.@+@#+...#+++++++++++#............................................#+++@...........................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@++@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@..@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@.@+@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@++@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@..@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@.@+@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@++@#+....@++++@..................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...@+.@@#+@.................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+.&&&#%+++++@............................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+&&&&&####&#+............................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+.&%++++++++++@......+++%.#+++@..+%++@%++@...%+++...+%+#.#+++@...........................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+@&$.&@&&&&&&#+.....+#.......#+..+@.#+@.#+..+@..#+..+#......#+...........................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+@%#&&&&&&&&#&+.....+.....#++++..+..@+..@+..++++++..+....#++++...........................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+#$.@&&&&&&&#+@.....+.....+@.@+..+...+...+..+.......+....+@.@+...........................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+&#&&&&&&&&&&+......+#....+..%+..+...+...+..+%...@..+....+..%+...........................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+#.&&&&&&&&#+@.......+++%.%++#+..+...+...+...%+++#..+....%++#+...........................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...+%&@&&&&&&#%+............................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+...@+++++++++++@............................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+................................................................................................@.@@@@@#+............................................................................................................................................................@.@@@#@@@@@@@@@@@@+....................",
"...............................................+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++....................",
"....................................+++++++.................................................................................................................................................................................................................................................................................................................",
".........................................++.................................................................................................................................................................................................................................................................................................................",
"........................................+.+.................................................................................................................................................................................................................................................................................................................",
".......................................+..+.................................................................................................................................................................................................................................................................................................................",
"......................................+...+..........................................................................................................................................................................................+++++++................................................................................................................",
".....................................+....+..........................................................................................................................................................................................++.....................................................................................................................",
"....................................+.....+..........................................................................................................................................................................................+.+....................................................................................................................",
".....................................................................................................................................................................................................................................+..+...................................................................................................................",
".....................................................................................................................................................................................................................................+...+..................................................................................................................",
".....................................................................................................................................................................................................................................+....+.................................................................................................................",
".....................................................................................................................................................................................................................................+.....+................................................................................................................",
"............................................................................................................................................................................................................................................................................................................................................................",
"............................................................................................................................................................................................................................................................................................................................................................",
"............................................................................................................................................................................................................................................................................................................................................................",
"............................................................................................................................................................................................................................................................................................................................................................",
"..............+......................................................................++........+............................................................................................................................................................................................................................................................",
"........+++...+.....................+....................+............+++++...........+........+..........................................................................................................................................................+.........................................................+...........+.....++....................",
".......+...+..+.....................+....................+............+...............+........+.................................................................................................................................................+++......+..........................+..............................+..+++++....+......+....................",
".......+......++++....+++...+.++...++++....+++...+...+..++++..........+.......+++.....+.....++++...+++...+.++....+++.............................................................................................................................+..+................................+.............................+...+...............+....................",
"........+++...+...+..+...+..++..+...+.....+...+..+...+...+............++++...+...+....+....+...+..+...+..++..+..+...+............................................................................................................................+...+...++....+.++....+++....+++...++++....+++...+.++...+...+.....+...+.......++......+.....+++....+++.....",
"...........+..+...+..+...+..+.......+.....+......+...+...+............+......+...+....+....+...+..+++++..+.......+++.............................................................................................................................+...+....+....++..+..+...+..+...+...+.....+...+..++..+..+...+....+....++++.....+......+....+...+..+...+....",
"...........+..+...+..+...+..+.......+.....+......+...+...+............+......+...+....+....+...+..+......+..........+............................................................................................................................+...+....+....+......+++++..+.......+.....+...+..+......+...+....+....+........+......+....+++++...+++.....",
".......+...+..+...+..+...+..+.......+.....+...+..+...+...+............+......+...+....+....+...+..+...+..+......+...+............................................................................................................................+...+....+....+......+......+.......+.....+...+..+......+...+...+.....+........+......+....+..........+....",
"........+++...+...+...+++...+........+++...+++....++++....+++.........+.......+++.....++....++++...+++...+.......+++.............................................................................................................................+..+.....+....+......+...+..+...+...+.....+...+..+......+...+...+.....+........+......+....+...+..+...+....",
".................................................................................................................................................................................................................................................+++.....+++...+.......+++....+++.....+++...+++...+.......++++..+......+.......+++.....++....+++....+++.....",
".............................................................................................................................................................................................................................................................................................................+..+...........................................",
".............................................................................................................................................................................................................................................................................................................+..............................................",
"..........................................................................................................................................................................................................................................................................................................+++...............................................",
"............................................................................................................................................................................................................................................................................................................................................................",
"............................................................................................................................................................................................................................................................................................................................................................",
"............................................................................................................................................................................................................................................................................................................................................................",
"............................................................................................................................................................................................................................................................................................................................................................",
"............................................................................................................................................................................................................................................................................................................................................................"]
#########################################################################

if sys.platform == "linux2":
	
	ui_string = """<ui>
		<menubar name='Menubar'>
			<menu action='FileMenu'>
				<menu action='Save Image'>\
					<menuitem action='As PNG'/>
					<menuitem action='As JPG'/>
				</menu>
				<separator/>
				<menuitem action='Edit w/GIMP'/>
				<menuitem action='Edit w/XV'/>
				<menuitem action='Edit w/ImageMagick'/>
				<separator/>
				<menuitem action='WPClipart Online'/>
				<menuitem action='Set Startup Folder'/>
				<separator/>
				<menuitem action='Quit'/>
			</menu>
			<menu action='Rotate'>\
				<menuitem action='Mirror (horizontal)'/>
				<menuitem action='Flip (vertical)'/>
				<separator/>
				<menuitem action='Tilt Left'/>
				<menuitem action='Tilt Right'/>
				<separator/>
				<menuitem action="90\302\260 Counter-Clockwise  "/>
				<menuitem action="90\302\260 Clockwise"/>
			</menu>
			
			<menu action='Filter'>\
				<menuitem action='Invert'/>
				<menuitem action='Emboss'/>
				<menuitem action='Contour'/>
				<menuitem action='Find Edges'/>
				<menuitem action="Find Edges 2"/>
				<menuitem action="Edge Enhance"/>
				<menuitem action='Detail'/>
				<menuitem action='Sharpen'/>
				<menuitem action='Smooth'/>
				<menuitem action="Blur"/>
				<menuitem action="Greyscale"/>
			</menu>
			
			<menu action='Adjust'>\
				<menuitem action='+Color'/>
				<menuitem action='-Color'/>
				<separator/>
				<menuitem action='+Brightness'/>
				<menuitem action='-Brightness'/>
				<separator/>
				<menuitem action="+Contrast"/>
				<menuitem action="-Contrast"/>
				<separator/>
				<menuitem action='+Sharpness'/>
				<menuitem action='-Sharpness'/>
			</menu>			

			<menu action='Image'>\
				<menuitem action='Show Full Size'/>
				<menuitem action='Restore Original'/>
			</menu>	

			<menu action='HelpMenu'>
				<menuitem action='About'/>
				<menuitem action='Help Pages'/>
			</menu>
		</menubar>
	</ui>"""


if sys.platform == "win32":
	ui_string = """<ui>
		<menubar name='Menubar'>
			<menu action='FileMenu'>
				<menu action='Save Image'>\
					<menuitem action='As PNG'/>
					<menuitem action='As JPG'/>
				</menu>
				<menuitem action='WPClipart Online'/>
				<separator/>
				<menuitem action='Quit'/>
			</menu>
			<menu action='Rotate'>\
				<menuitem action='Mirror (horizontal)'/>
				<menuitem action='Flip (vertical)'/>
				<separator/>
				<menuitem action='Tilt Left'/>
				<menuitem action='Tilt Right'/>
				<separator/>
				<menuitem action="90\302\260 Counter-Clockwise  "/>
				<menuitem action="90\302\260 Clockwise"/>
			</menu>
			
			<menu action='Filter'>\
				<menuitem action='Invert'/>
				<menuitem action='Emboss'/>
				<menuitem action='Contour'/>
				<menuitem action='Find Edges'/>
				<menuitem action="Find Edges 2"/>
				<menuitem action="Edge Enhance"/>
				<menuitem action='Detail'/>
				<menuitem action='Sharpen'/>
				<menuitem action='Smooth'/>
				<menuitem action="Blur"/>
				<menuitem action="Greyscale"/>
			</menu>
			
			<menu action='Adjust'>\
				<menuitem action='+Color'/>
				<menuitem action='-Color'/>
				<separator/>
				<menuitem action='+Brightness'/>
				<menuitem action='-Brightness'/>
				<separator/>
				<menuitem action="+Contrast"/>
				<menuitem action="-Contrast"/>
				<separator/>
				<menuitem action='+Sharpness'/>
				<menuitem action='-Sharpness'/>
			</menu>			

			<menu action='Image'>\
				<menuitem action='Show Full Size'/>
				<menuitem action='Restore Original'/>
			</menu>	

			<menu action='HelpMenu'>
				<menuitem action='About'/>
				<menuitem action='Help Pages'/>
				<menuitem action='Set Startup Folder'/>
			</menu>
		</menubar>
	</ui>"""


class Window(gtk.Window):
	def __init__(self):
		gtk.Window.__init__(self)
		self.set_position(gtk.WIN_POS_CENTER)
		self.set_title('wpClipper - 9.0')
		self.connect('delete-event', self.delete_event_cb)
		self.set_geometry_hints(self, 640, 460, 1200, 460)
		self.set_default_size( 700, 460)
		font_desc = pango.FontDescription('Verdana,sans-serif 10')
		
		# set up the UI graphics ##################################
		# background picture ######################################
		pixbuf = gtk.gdk.pixbuf_new_from_xpm_data(bg_xpm)
		pixmap, mask = pixbuf.render_pixmap_and_mask()
		del pixbuf
		self.set_app_paintable(True)
		self.realize()
		self.window.set_back_pixmap(pixmap, False)
		del pixmap
		# application icon ########################################
		if sys.platform == "win32":
			m_ico = gtk.gdk.pixbuf_new_from_xpm_data(cav32_xpm)
		else:	
			m_ico = gtk.gdk.pixbuf_new_from_xpm_data(cav16_xpm)
		self.set_icon(m_ico)
		del m_ico
		# default image ###########################################
		splash_img = gtk.gdk.pixbuf_new_from_xpm_data(splash_icon)
		self.default_img = gtk.Image()
		self.default_img.set_from_pixbuf(splash_img)
		# set up the tmp file used for editing
		splash_img.save(tmpPath, "png")
		del splash_img
		
		# custom icons for the menus ##############################
		factory = gtk.IconFactory()
		pixbuf = gtk.gdk.pixbuf_new_from_xpm_data(HTML_ICON)
		gtk.stock_add([("HTML_ICON", "HTML_ICON", 0, 0, "")])
		factory.add("HTML_ICON", gtk.IconSet(pixbuf = pixbuf))
		factory.add_default()
		
		pixbuf = gtk.gdk.pixbuf_new_from_xpm_data(VIEW_FULL)
		gtk.stock_add([("VIEW_FULL", "VIEW_FULL", 0, 0, "")])
		factory.add("VIEW_FULL", gtk.IconSet(pixbuf = pixbuf))
		factory.add_default()
		
		pixbuf = gtk.gdk.pixbuf_new_from_xpm_data(HOME)
		gtk.stock_add([("HOME", "HOME", 0, 0, "")])
		factory.add("HOME", gtk.IconSet(pixbuf = pixbuf))
		factory.add_default()
		
		pixbuf = gtk.gdk.pixbuf_new_from_xpm_data(GIMP)
		gtk.stock_add([("GIMP", "GIMP", 0, 0, "")])
		factory.add("GIMP", gtk.IconSet(pixbuf = pixbuf))
		factory.add_default()
		
		pixbuf = gtk.gdk.pixbuf_new_from_xpm_data(MAGIC)
		gtk.stock_add([("MAGIC", "MAGIC", 0, 0, "")])
		factory.add("MAGIC", gtk.IconSet(pixbuf = pixbuf))
		factory.add_default()

		pixbuf = gtk.gdk.pixbuf_new_from_xpm_data(XV)
		gtk.stock_add([("XV", "XV", 0, 0, "")])
		factory.add("XV", gtk.IconSet(pixbuf = pixbuf))
		factory.add_default()

		pixbuf = gtk.gdk.pixbuf_new_from_xpm_data(IMAGE_EDIT)
		gtk.stock_add([("IMAGE_EDIT", "IMAGE_EDIT", 0, 0, "")])
		factory.add("IMAGE_EDIT", gtk.IconSet(pixbuf = pixbuf))
		factory.add_default()
		
		del pixbuf
		gc.collect

		# make and set flags for possible graphics editors
		self.cur_path = ""
		self.has_gimp = False
		self.has_xv = False
		self.has_magick = False
		if sys.platform == "linux2":
			if len(commands.getoutput('type -path gimp-remote')):
				self.has_gimp = True
			if len(commands.getoutput('type -path xv')):
				self.has_xv = True
			if len(commands.getoutput('type -path display')):
				self.has_magick = True
		
		
		self.clipbd = gtk.Clipboard()
		#### set up tooltips and boxing in the GUI ################
		self.tips = gtk.Tooltip()
		vbox = gtk.VBox()
		self.add(vbox)

		self.create_ui()
		vbox.pack_start(self.ui.get_widget('/Menubar'), expand=False)

		#  file selector  ####################################################
		bigBox = gtk.HBox(False,8)
		
		contBox = gtk.VBox(False,8)
		cframe = gtk.Frame()
		cframe.set_shadow_type(gtk.SHADOW_ETCHED_OUT)
		cframe.set_size_request(360, 360)

		self.chooser = gtk.FileChooserWidget(action=gtk.FILE_CHOOSER_ACTION_OPEN)
		self.chooser.set_select_multiple(False)
		self.chooser.connect("file-activated", self.set_display)
		self.chooser.connect("selection-changed", self.chooser_selected)
		
		filter = gtk.FileFilter()
		filter.add_mime_type("image/png")
		filter.add_mime_type("image/jpeg")
		filter.add_mime_type("image/gif")
		filter.add_mime_type("image/bmp")
		filter.add_mime_type("image/tiff")
		self.chooser.add_filter(filter)
		cframe.add(self.chooser)
		contBox.pack_start(cframe, True, True, 12)
		
		btn_box = gtk.HBox(False, 8)
		btn_close = gtk.Button(stock = gtk.STOCK_QUIT)
		btn_close.connect("clicked", self.delete_event_cb)
		
		
		self.btn_copy = gtk.Button("Copy to Clipboard")
		self.btn_copy.set_tooltip_text("Copies the current (full-sized) image to the clipboard,\nfor use in AbiWord, the GIMP, OpenOffice and others...")
		
		self.btn_copy.connect("clicked", self.copy_to_clip)
		self.btn_copy.set_sensitive(False)
		
		btn_box.pack_start(btn_close, False, False, 0)
		btn_box.pack_start(self.btn_copy, False, False, 0)
		contBox.pack_start(btn_box, False, False, 8)
		
		## Right-hand box ##########################################################################
		rbox = gtk.VBox(False, 8)

		lbl_header = gtk.Label("\nPublic Domain Word Processor Clipart   \nwww.wpclipart.com   ")
		lbl_header.modify_font(font_desc)
		lbl_header.set_size_request(260,-1)
		lbl_header.set_justify(gtk.JUSTIFY_CENTER)
		
		rbox.pack_start(lbl_header, False, False, 0)
		eb = gtk.EventBox()
		eb.set_visible_window(False)
		eb.connect("button_press_event", self.set_display)
		self.sfixed = gtk.Fixed()
		
		self.sfixed.put(self.default_img, 6, 28)
		eb.set_tooltip_text("Click image to see full-size")
		
		eb.add(self.sfixed)
		rbox.pack_start(eb, False, False, 1)

		self.lbl_picture = gtk.Label("Clicking an image in the file list will\ngenerate and display a thumbnail above.")
		self.lbl_picture.modify_font(font_desc)
		self.lbl_picture.set_size_request(260,-1)
		self.lbl_picture.set_justify(gtk.JUSTIFY_CENTER)
		self.lbl_picture.set_line_wrap(False)
		rbox.pack_start(self.lbl_picture, True, True, 0)
		
		bigBox.pack_start(contBox, True, True, 8)
		bigBox.pack_start(rbox, False, False, 8)
		vbox.pack_start(bigBox, True, True, 0)

		######## Adjustment to the file chooser  #########################################################################
		######################################### so we can leave it on all the time without taking up all the space #####
		# hides ADD abd REMOVE BUTTONS
		self.chooser.get_children()[0].get_children()[0].get_children()[2].get_children()[0].get_children()[1].hide()
		# hides file filter button (box it is in)
		self.chooser.get_children()[0].get_children()[0].get_children()[2].get_children()[1].get_children()[1].hide()
		# takes out the "modified" column in file list
		col1 =  self.chooser.get_children()[0].get_children()[0].get_children()[2].get_children()[1].get_children()[0].get_children()[0].get_children()[0].get_column(1)
		col2 =  self.chooser.get_children()[0].get_children()[0].get_children()[2].get_children()[1].get_children()[0].get_children()[0].get_children()[0].get_column(2)
		self.chooser.get_children()[0].get_children()[0].get_children()[2].get_children()[1].get_children()[0].get_children()[0].get_children()[0].remove_column(col1)
		self.chooser.get_children()[0].get_children()[0].get_children()[2].get_children()[1].get_children()[0].get_children()[0].get_children()[0].remove_column(col2)
		# set width of shortcut panel (Places)
		self.chooser.get_children()[0].get_children()[0].get_children()[2].get_children()[0].get_children()[0].set_size_request(124,-1)
		# set width of the file list (Name)
		self.chooser.get_children()[0].get_children()[0].get_children()[2].get_children()[1].get_children()[0].set_size_request(210,-1)
		# set the start path, found when app is initialized
		self.chooser.set_current_folder(default_path)

		# and finally we set up the status bar to display actual image sizes ##################		
		self.status = gtk.Statusbar()
		vbox.pack_end(self.status, expand=False)
		self.status.set_has_resize_grip(False)
		self.statusID = self.status.get_context_id("status_text")
		self.status.push(self.statusID, " Full width and height of the image thumbnail are displayed here.")

		self.show_all()

##################################################################################################################		
##################################### ROUTINES ###################################################################	
##################################################################################################################

	def create_ui(self):
		self.ag = gtk.ActionGroup('WindowActions')
		if sys.platform == "win32":
			actions = [
			    ('FileMenu', None, '_File'),
			    ('Save Image', gtk.STOCK_SAVE_AS, 'Save Image'),
			    ('As PNG',    None, 'As a  PNG', None, 'PNG Image', self.sav_png),
			    ('As JPG',    None, 'As a  JPG', None, 'PNG Image', self.sav_jpg),
			    ('WPClipart Online', "HTML_ICON", 'WPClipart Online','', 'Open a file', self.viewOnline),
			    
			    ('Quit',     gtk.STOCK_QUIT, '_Quit', '<control>Q', 'Quit application', self.delete_event_cb),

			    ('Rotate', None, 'Rotate'),
			    ('Mirror (horizontal)',    None, 'Mirror', '', 'Mirror', self.edit_image),
			    ('Flip (vertical)',    None, 'Flip (vertical)', '', 'Flip (vertical)', self.edit_image),
			    ('Tilt Left',    None, 'Tilt Left', '', 'Tilt Left', self.edit_image),
			    ('Tilt Right',    None, 'Tilt Right', '', 'Tilt Right', self.edit_image),
			    ("90\302\260 Counter-Clockwise  ",    None, "90\302\260 Counter-Clockwise  ", '', "90\302\260 Counter-Clockwise  ", self.edit_image),
			    ("90\302\260 Clockwise",    None, "90\302\260 Clockwise", '', "90\302\260 Clockwise", self.edit_image),

			    ('Filter', None, 'Filter'),
			    ('Invert',    None, 'Invert', None, 'Invert', self.edit_image),
			    ('Emboss',    None, 'Emboss', None, 'Emboss', self.edit_image),
			    ('Contour',    None, 'Contour', None, 'Contour', self.edit_image),
			    ('Find Edges',    None, 'Find Edges', None, 'Find Edges', self.edit_image),
			    ('Find Edges 2',    None, 'Find Edges 2', None, 'Find Edges 2', self.edit_image),
			    ('Edge Enhance',    None, 'Edge Enhance', None, 'Edge Enhance', self.edit_image),
			    ('Detail',    None, 'Detail', None, 'Detail', self.edit_image),
			    ('Sharpen',    None, 'Sharpen', None, 'Sharpen', self.edit_image),
			    ('Smooth',    None, 'Smooth', None, 'Smooth', self.edit_image),
			    ('Blur',    None, 'Blur', None, 'Blur', self.edit_image),
			    ('Greyscale',    None, 'Greyscale', None, 'Greyscale', self.edit_image),

			    ('Adjust', None, 'Adjust'),
			    ('+Color',    None, '+Color', None, '+Color', self.edit_image),
			    ('-Color',    None, '-Color', None, '-Color', self.edit_image),
			    ('+Brightness',    None, '+Brightness', None, '+Brightness', self.edit_image),
			    ('-Brightness',    None, '-Brightness', None, '-Brightness', self.edit_image),
			    ('+Contrast',    None, '+Contrast', None, '+Contrast', self.edit_image),
			    ('-Contrast',    None, '-Contrast', None, '-Contrast', self.edit_image),
			    ('+Sharpness',    None, '+Sharpness', None, '+Sharpness', self.edit_image),
			    ('-Sharpness',    None, '-Sharpness', None, '-Sharpness', self.edit_image),

				('Image', None, '_Image'),
				('Show Full Size', "VIEW_FULL", 'Show Full Size', None, 'Show Full Size', self.set_display),
				('Restore Original',    None, 'Restore Original', None, 'Restore Original', self.restore),

				('HelpMenu', None, '_Help'),
				('About', gtk.STOCK_DIALOG_INFO, 'About', None, 'About application', self.help_about_cb),
				('Help Pages', gtk.STOCK_HELP, 'Help Pages', None, 'SVG-page help', help_window),
				('Set Startup Folder', "HOME", 'Set Path to Images','', 'Set Path to Images', self.set_path),
				]


		if sys.platform == "linux2":
			actions = [
			    ('FileMenu', None, '_File'),
			    
			    ('Save Image', gtk.STOCK_SAVE_AS, 'Save Image'),
			    ('As PNG', None, 'As a  PNG', None, 'PNG Image', self.sav_png),
			    ('As JPG', None, 'As a  JPG', None, 'PNG Image', self.sav_jpg),
			    ('Edit w/GIMP', "GIMP", 'Edit w/GIMP', None, 'Edit w/GIMP', self.open_with),
			    ('Edit w/XV', "XV", 'Edit w/XV', None, 'Edit w/GIMP', self.open_with),
			    ('Edit w/ImageMagick', "MAGIC", 'Edit w/ImageMagick', None, 'Edit w/ImageMagick', self.open_with),
			    ('WPClipart Online', "HTML_ICON", 'WPClipart Online', '', 'Open a file', self.viewOnline),
			    ('Set Startup Folder', "HOME", 'Set Startup Path','', 'Set Path to Images', self.set_path),
			    ('Quit',     gtk.STOCK_QUIT, '_Quit', '<control>Q', 'Quit application', self.delete_event_cb),

			    ('Rotate', None, 'Rotate'),
			    ('Mirror (horizontal)',    None, 'Mirror', '', 'Mirror', self.edit_image),
			    ('Flip (vertical)',    None, 'Flip (vertical)', '', 'Flip (vertical)', self.edit_image),
			    ('Tilt Left',    None, 'Tilt Left', '', 'Tilt Left', self.edit_image),
			    ('Tilt Right',    None, 'Tilt Right', '', 'Tilt Right', self.edit_image),
			    ("90\302\260 Counter-Clockwise  ",    None, "90\302\260 Counter-Clockwise  ", '', "90\302\260 Counter-Clockwise  ", self.edit_image),
			    ("90\302\260 Clockwise",    None, "90\302\260 Clockwise", '', "90\302\260 Clockwise", self.edit_image),

			    ('Filter', None, 'Filter'),
			    ('Invert',    None, 'Invert', None, 'Invert', self.edit_image),
			    ('Emboss',    None, 'Emboss', None, 'Emboss', self.edit_image),
			    ('Contour',    None, 'Contour', None, 'Contour', self.edit_image),
			    ('Find Edges',    None, 'Find Edges', None, 'Find Edges', self.edit_image),
			    ('Find Edges 2',    None, 'Find Edges 2', None, 'Find Edges 2', self.edit_image),
			    ('Edge Enhance',    None, 'Edge Enhance', None, 'Edge Enhance', self.edit_image),
			    ('Detail',    None, 'Detail', None, 'Detail', self.edit_image),
			    ('Sharpen',    None, 'Sharpen', None, 'Sharpen', self.edit_image),
			    ('Smooth',    None, 'Smooth', None, 'Smooth', self.edit_image),
			    ('Blur',    None, 'Blur', None, 'Blur', self.edit_image),
			    ('Greyscale',    None, 'Greyscale', None, 'Greyscale', self.edit_image),

			    ('Adjust', None, 'Adjust'),
			    ('+Color',    None, '+Color', None, '+Color', self.edit_image),
			    ('-Color',    None, '-Color', None, '-Color', self.edit_image),
			    ('+Brightness',    None, '+Brightness', None, '+Brightness', self.edit_image),
			    ('-Brightness',    None, '-Brightness', None, '-Brightness', self.edit_image),
			    ('+Contrast',    None, '+Contrast', None, '+Contrast', self.edit_image),
			    ('-Contrast',    None, '-Contrast', None, '-Contrast', self.edit_image),
			    ('+Sharpness',    None, '+Sharpness', None, '+Sharpness', self.edit_image),
			    ('-Sharpness',    None, '-Sharpness', None, '-Sharpness', self.edit_image),

			    ('Image', None, '_Image'),
			    ('Show Full Size', "VIEW_FULL", 'Show Full Size', None, 'Show Full Sizer', self.set_display),
			    ('Restore Original', gtk.STOCK_UNDO, 'Restore Original', None, 'Restore Original', self.restore),

			    ('HelpMenu', None, '_Help'),
			    ('About', gtk.STOCK_DIALOG_INFO, 'About', None, 'About application', self.help_about_cb),
			    ('Help Pages', gtk.STOCK_HELP, 'Help Pages', None, 'SVG-page help', help_window),
			    ]
		
		self.ag.add_actions(actions)
		self.ui = gtk.UIManager()
		self.ui.insert_action_group(self.ag, 0)
		self.ui.add_ui_from_string(ui_string)
		self.add_accel_group(self.ui.get_accel_group())
		# with menu complete, now we deactivate until an image is loaded
		self.menu_update(False)
		
		
	def getWH(self, imW, imH):
		if imW > 240 or imH > 240:
			if imW > imH:
				scale = 240 / float(imW)
			else:
				scale = 240 / float(imH)
			m = int(imW * scale), int(imH * scale), scale
		else:
			if imW > imH:
				scale = 240 / float(imW)
			else:
				scale = 240 / float(imH)
			m = imW, imH, scale
		return m


	def setImage(self, pth):
		try:
			pixbuf = gtk.gdk.pixbuf_new_from_file (pth)
			(w,h)  = (pixbuf.get_width(),pixbuf.get_height())
			if w == 0:
				self.file_error()
				return False
			s = self.getWH(w,h)
			self.default_img.set_from_pixbuf(pixbuf.scale_simple(s[0],s[1],gtk.gdk.INTERP_BILINEAR))
			del pixbuf
			gc.collect()
			if s[0] < 240:
				nx = int(((240-s[0]) / 2) + 6)
			else:
				nx = 6
			if s[1] < 240:
				ny = int(((240-s[1]) / 2) + 28)
			else:
				ny = 28
			
			self.sfixed.move(self.default_img, nx, ny)
			self.status.push(self.statusID, " ACTUAL image dimensions are: " + str(w) + " x " + str(h))
		except:
			self.file_error()
			return	False
		return True
					

	def chooser_selected(self, widget):
		
		# upper section just does file tests, prevents updates when 
		# not appropriate and parses filename
		self.files = self.chooser.get_filenames()
		if len(self.files) == 0:
			return ""
		pth = self.chooser.get_filename()
		if not os.path.isfile(pth):
			return ""
		# disable file selector while it is working..... so we disable JUST the file section of the filechooser control
		fn_control = self.chooser.get_children()[0].get_children()[0].get_children()[2].get_children()[1].get_children()[0]
		fn_control.set_sensitive(False)
		# there is a legitimate file, so get ready.... ##########
		fname = os.path.basename(pth)
		self.cur_path = ""
		self.menu_update(False)
		
		self.btn_copy.set_sensitive(False)
		self.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH))
		self.menu_update(False)
		while gtk.events_pending():
			gtk.main_iteration()
			
		try:
			self.setImage(pth)
			# keep track of original image path (for possible "restore")
			self.curpath = pth
			# put original image in temp file for possible editing
			# make sure it is in RGB format (not indexed or with an alpha channel)
			im = Image.open(pth)
			if im.mode != "RGBA":
				im = im.convert("RGB")
				self.ag.get_action("Invert").set_sensitive(True)
				self.ag.get_action("Tilt Left").set_sensitive(True)
				self.ag.get_action("Tilt Right").set_sensitive(True)
				self.ag.get_action("Find Edges 2").set_sensitive(True)
				self.ag.get_action("Greyscale").set_sensitive(True)
			else:
				self.ag.get_action("Invert").set_sensitive(False)
				self.ag.get_action("Tilt Left").set_sensitive(False)
				self.ag.get_action("Tilt Right").set_sensitive(False)
				self.ag.get_action("Find Edges 2").set_sensitive(False)
				self.ag.get_action("Greyscale").set_sensitive(False)
			im.save(tmpPath)
			del im
			
			self.setImage(tmpPath)
			#txt = fname.replace("_"," ")
			txt = fname
			if len(txt) > 40:
				txt = txt[0:40] + '\n' + txt[40:]
			self.lbl_picture.set_text(txt + " ")

		except:
			pass

		self.btn_copy.set_sensitive(True)   
		self.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.LEFT_PTR))
		self.menu_update(True)
		fn_control.set_sensitive(True)
		
		
				
	def viewOnline(self, evt, lastdir=""):
	
		if sys.platform == "linux2":
			if len(commands.getoutput('type -path firefox.sh')):
				command = "%s %s" % ("firefox.sh", "http://www.wpclipart.com/")
				os.system(command)
				return

			elif len(commands.getoutput('type -path firefox')):
				command = "%s %s" % ("firefox", "http://www.wpclipart.com/")
				os.system(command)
				return
			else:
				webbrowser.open("http://www.wpclipart.com/")
		else:
			webbrowser.open("http://www.wpclipart.com/")	



	def menu_update(self, active):
		for li in enable_list:
			try:
				ret = self.ag.get_action(li)
				ret.set_sensitive(active)
				if active:
					if (li == "Edit w/GIMP") and (not self.has_gimp): ret.set_sensitive(False)
					if (li == "Edit w/XV") and (not self.has_xv): ret.set_sensitive(False)
					if (li == "Edit w/ImageMagick") and (not self.has_magick): ret.set_sensitive(False)	
			except:
				pass	

		
	def copy_to_clip(self, evt):
		fname = os.path.basename(self.curpath)
		try:
			pixbuf = gtk.gdk.pixbuf_new_from_file(tmpPath)
			self.clipbd.set_image(pixbuf)
			self.clipboard_success(fname)
		except:
			self.clipboard_error(fname)
		try:
			del pixbuf
			gc.collect()
		except:
			pass


	def set_path(self, evt):
		startpath = ""
		chooser = gtk.FileChooserDialog(title="Select Start Directory",action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER,
				buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK))
		chooser.set_select_multiple(False)

		response = chooser.run()
		if response == gtk.RESPONSE_OK:
			startpath = chooser.get_filename()
		chooser.destroy()
		if startpath == "":
			return
		default_path = startpath
		try:	
			config.set("default", "startpath", default_path)
			t1 = open(cfile, "w")
			config.write(t1)
			t1.close()
				
		except:
			pass
			
			                
##################################### SAVING ###############################################################
############################################################################################################

	# these seemingly useless helper functions prevent initial loading of menu from running save dialog
	def sav_png(self, evt):	
		self.do_save("png")
	def sav_jpg(self, evt):	
		self.do_save("jpg")
			
	def do_save(self, ft):
		fn = self.save_dialog(ft)
		if self.savedlg: self.savedlg.destroy()
		if not fn: return
		try:	
			if ft == "jpg":
				ft = "jpeg"
			if ft == "jpeg" or ft == "png":
				pixbuf = gtk.gdk.pixbuf_new_from_file (tmpPath)
				pixbuf.save(fn, ft)		
			else:
				self.file_save_err
				return
			self.file_saved(None, fn)
				
		except:
			self.file_save_err

	
	def save_dialog(self, ftype):
		sStr = 'Save as %s' % ftype
		newName = 'new.%s' % ftype
		self.savedlg = gtk.FileChooserDialog(sStr, self, gtk.FILE_CHOOSER_ACTION_SAVE, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_SAVE, gtk.RESPONSE_OK))
		self.savedlg.set_default_response(gtk.RESPONSE_OK)
		self.savedlg.set_current_folder(homedir)
		self.savedlg.set_current_name(newName)
		self.savedlg.set_do_overwrite_confirmation(True)
		filter = gtk.FileFilter()
		filter.set_name(ftype)
		if ftype == "png":
			filter.add_mime_type("image/png")
		elif ftype == "jpg":
			filter.add_mime_type("image/jpeg")
		
		self.savedlg.add_filter(filter)
		response = self.savedlg.run()
		if response == gtk.RESPONSE_OK:
			filename = self.savedlg.get_filename()
			ext = "." + ftype
			if os.path.splitext(filename)[1] != ext: filename += ext			
			return filename
		else: 
			self.savedlg.destroy()
			return None		

######################################################################################################
########################### IMAGE EDITING SECTION ###################################################
######################################################################################################

	def open_with(self, widget):
		func = widget.get_name()
		prog = ""
		if func == "Edit w/GIMP":
			prog = "gimp-remote"
		elif func == "Edit w/XV":
			prog = "xv"
		elif func == "Edit w/ImageMagick":
			prog = "display"
		else:
			return
		if sys.platform == "linux2":
			cmd = commands.getoutput('type -path %s' % prog)
			_args = [cmd, tmpPath]
			os.spawnv(os.P_NOWAIT, cmd, _args)
			
			
	def restore(self, widget):
		self.btn_copy.set_sensitive(False)
		self.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH))
		self.menu_update(False)
		try:
			im = Image.open(self.curpath)
			if im.mode != "RGBA":
				im = im.convert("RGB")
			im.save(tmpPath)
			del im
			gc.collect()
			self.setImage(tmpPath)
			print "Done processing"
		except:
			pass
		self.btn_copy.set_sensitive(True)    
		self.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.LEFT_PTR))
		self.menu_update(True)
			
	
	def getRotImg(self, im):
		W = im.size[0]
		H = im.size[1]
		angle = 45
		radians = (2*3.1416*angle)/360

		cosine = math.cos(radians)
		sine = math.sin(radians)

		Point1x = - H * sine
		Point1y = H * cosine 
		Point2x = W * cosine - H * sine 
		Point2y = H * cosine + W * sine 
		Point3x = W * cosine 
		Point3y = W * sine

		minx = min(0,min(Point1x,min(Point2x,Point3x))) 
		miny = min(0,min(Point1y,min(Point2y,Point3y))) 
		maxx = max(Point1x,max(Point2x,Point3x))
		maxy = max(Point1y,max(Point2y,Point3y))

		dw = int(math.ceil(maxx-minx))
		dh = int(math.ceil(maxy-miny))
		left = (dw - W) / 2
		top = (dw - H) / 2
		box = (left, top, W + left, H + top)
		if im.mode == "RGBA":
			im2 = Image.new("RGBA", (dw, dh), (255,255,255))
		else:
			im2 = Image.new("RGB", (dw, dh), (255,255,255))
		im2.paste(im,box)
		return im2


	def edit_image(self, widget):
		self.btn_copy.set_sensitive(False)
		self.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH))
		self.menu_update(False)
		while gtk.events_pending():
			gtk.main_iteration()
		try:
			im = Image.open(tmpPath)
		except:
			self.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.LEFT_PTR))
			self.menu_update(True)
			return
			
		func = widget.get_name()
		
		if func == "Mirror (horizontal)":
			im2 = ImageOps.mirror(im)
		elif func == "Flip (vertical)":
			im2 = ImageOps.flip(im)
		elif func == "Tilt Left":
			im2 = self.getRotImg(im)
			im2 = ImageOps.invert(im2)
			im2 = im2.rotate(45)
			im2 = ImageOps.invert(im2)
		elif func == "Tilt Right":
			im2 = self.getRotImg(im)
			im2 = ImageOps.invert(im2)
			im2 = im2.rotate(-45)
			im2 = ImageOps.invert(im2)
		elif func == "90\302\260 Counter-Clockwise  ":
			im2 = im.rotate(90)
		elif func == "90\302\260 Clockwise":
			im2 = im.rotate(-90)
		elif func == "Invert":
			im2 = ImageOps.invert(im)
		elif func == "Emboss":
			im2 = im.filter(ImageFilter.EMBOSS)
		elif func == "Contour":
			im2 = im.filter(ImageFilter.CONTOUR)
		elif func == "Find Edges":
			im2 = im.filter(ImageFilter.FIND_EDGES)
		elif func == "Find Edges 2":
			im2 = im.filter(ImageFilter.FIND_EDGES)
			im2 = ImageOps.invert(im2)
		elif func == "Edge Enhance":
			im2 = im.filter(ImageFilter.EDGE_ENHANCE)
		elif func == "Detail":
			im2 = im.filter(ImageFilter.DETAIL)
		elif func == "Sharpen":
			im2 = im.filter(ImageFilter.SHARPEN)
		elif func == "Smooth":
			im2 = im.filter(ImageFilter.SMOOTH)
		elif func == "Blur":
			im2 = im.filter(ImageFilter.BLUR)
		elif func == "Greyscale":
			im2 = ImageOps.grayscale(im)
		elif func == "+Color":
			e1 = ImageEnhance.Color(im)
			im2 = e1.enhance(1.2)
		elif func == "-Color":
			e1 = ImageEnhance.Color(im)
			im2 = e1.enhance(0.85)
		elif func == "+Brightness":
			e1 = ImageEnhance.Brightness(im)
			im2 = e1.enhance(1.1)
		elif func == "-Brightness":
			e1 = ImageEnhance.Brightness(im)
			im2 = e1.enhance(0.91)
		elif func == "+Contrast":
			e1 = ImageEnhance.Contrast(im)
			im2 = e1.enhance(1.06)
		elif func == "-Contrast":
			e1 = ImageEnhance.Contrast(im)
			im2 = e1.enhance(0.97)
		elif func == "+Sharpness":
			e1 = ImageEnhance.Sharpness(im)
			im2 = e1.enhance(2.0)
		elif func == "-Sharpness":
			e1 = ImageEnhance.Sharpness(im)
			im2 = e1.enhance(0.0)	
		else:
			self.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.LEFT_PTR))
			return			
		
		im2.save(tmpPath)
		self.setImage(tmpPath)
		self.btn_copy.set_sensitive(True)
		self.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.LEFT_PTR))
		self.menu_update(True)
		try:
			del im
		except:
			pass
		try:
			del im2
		except:
			pass
		gc.collect
			
		

#################################################################################################
#################################################################################################		
				
	def help_about_cb(self, action):
		dialog = gtk.MessageDialog(self, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
					gtk.MESSAGE_INFO, gtk.BUTTONS_OK, u"WP Clipper\n\nwpclipper viewer and editor\n\u00a9 2005-2010 by Paul Sherman\nLicensed under GNU GPLv3")
		dialog.run()
		dialog.destroy()
		
		
	def file_error(self, action=None):
		dialog = gtk.MessageDialog(self, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
					gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, "\nCould not open the requested image")
		dialog.run()
		dialog.destroy()
		
	def file_save_err(self, action=None):
		dialog = gtk.MessageDialog(self, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
					gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, "\nCould not save the file")
		dialog.run()
		dialog.destroy()		
		
	def file_saved(self, action=None, data=""):
		dialog = gtk.MessageDialog(self, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
					gtk.MESSAGE_INFO, gtk.BUTTONS_OK, 'Success!\n\nThe new file was saved as: \n%s' % data)
		dialog.run()
		dialog.destroy()

	def file_create_err(self, action=None, data=""):
		dialog = gtk.MessageDialog(self, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
					gtk.MESSAGE_INFO, gtk.BUTTONS_OK, '\nProblem creating the file: \n%s' % data)
		dialog.run()
		dialog.destroy()


	def clipboard_error(self, data=""):
		dialog = gtk.MessageDialog(self, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
					gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, '\nProblem copying to clipboard: \n%s' % data)
		dialog.run()
		dialog.destroy()
		

	def clipboard_success(self, data=""):
		dialog = gtk.MessageDialog(self, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
					gtk.MESSAGE_INFO, gtk.BUTTONS_OK, '\nImage saved to clipboard')
		dialog.run()
		dialog.destroy()
		
				
	def delete_event_cb(self, window=None, event=None):
		try:
			os.remove(tmpPath)
		except os.error:
			pass
		gtk.main_quit()
	
	
	def set_display(self, evt, data=None):
		DISPLAY(self, tmpPath, self.curpath)
	
		
class DISPLAY:
	def __init__(self, mother, pth, data=None):
		imName = os.path.basename(pth)
		#tip = gtk.Tooltip()
		try:
			pixbuf = gtk.gdk.pixbuf_new_from_file (pth)
		except:
			return
		(w,h)  = (pixbuf.get_width(),pixbuf.get_height())
		if w == 0:
			self.file_error()
			return
		maxW = gtk.gdk.screen_width() - 80
		maxH = gtk.gdk.screen_height() - 80
		if maxW > w: maxW = w + 40
		if maxH > h: maxH = h + 40
		self.window = gtk.Dialog()
		if data == None or data == "":
			self.window.set_title(imName)
		else:
			if sys.platform == "win32":
				sep = '\\'
			else:
				sep = '/'
			p_name = string.split( data, sep )[-1]
			self.window.set_title(p_name)
		
		self.window.set_border_width(0)
		self.window.set_size_request(maxW, maxH)
		self.window.set_transient_for(mother)
		self.window.set_resizable(False)
		
		self.scrolled_window = gtk.ScrolledWindow()
		
		self.scrolled_window.connect("button-press-event", self.close_me)
		self.window.connect('delete-event', self.close_me)
		
		self.scrolled_window.set_border_width(10)
		self.scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
		self.window.vbox.pack_start(self.scrolled_window, True, True, 0)
		self.scrolled_window.show()
	
		self.dImg = gtk.Image()
		self.dImg.set_from_pixbuf(pixbuf)
		del pixbuf
		gc.collect()
		
		self.dImg.show()	
		self.scrolled_window.add_with_viewport(self.dImg)
		self.window.show()
		self.window.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.X_CURSOR))
		self.window.set_modal(True)
		
	def close_me(self, evt=None, data=None):
		self.window.destroy()
		
	def delete_event(self, evt=None, data=None):
		self.window.destroy()

		
		
class help_window(gtk.Window):


	def delete_event(self, e=None):
		self.destroy()


	def __init__(self, evt=None):
		gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)

		self.connect("destroy", self.delete_event)

		self.set_title('WP Clipper Help')
		self.set_border_width(0)
		self.set_size_request(600, 450)
		self.set_position(gtk.WIN_POS_CENTER)
		small_font = pango.FontDescription('Verdana,sans-serif 10')
		
		file_img = gtk.Image()
		fimg = gtk.gdk.pixbuf_new_from_xpm_data (file_screen)
		file_img.set_from_pixbuf(fimg)
		del fimg
		gc.collect()

		box1 = gtk.VBox()
		self.add(box1)
		box1.show()

		box2 = gtk.VBox(spacing=4)
		box2.set_border_width(4)
		box1.pack_start(box2)
		box2.show()

		notebook = gtk.Notebook()
		notebook.set_tab_pos(gtk.POS_TOP)
		box2.pack_start(notebook)
		notebook.show()

		names = ['About', 'General Use', 'File Browser', 'Clipboard', 'Editing', 'Saving', 'Dev Team' ]
		msg = self.mlist()

		for i in range(len(names)):
			buffer = names[i]
			sw=gtk.ScrolledWindow()
			sw.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC)
			sw.set_shadow_type(gtk.SHADOW_NONE)
			sw.show()
			############################################################################
			# add widgets to each frame here
			if i == 0:
				label = gtk.Label(msg[i])
				sw.add_with_viewport(label)
			if i == 1:
				label = gtk.Label(msg[i])
				sw.add_with_viewport(label)
			if i == 2:
				label = gtk.Label(msg[i])
				labelBlank = gtk.Label("\nWPClipper File Browser\n")
				box_viewing = gtk.VBox()
				box_viewing.pack_start(labelBlank)
				box_viewing.pack_start(file_img)
				box_viewing.pack_start(label)
				labelBlank.show()
				file_img.show()
				box_viewing.show()
				sw.add_with_viewport(box_viewing)
			if i == 3:
				label = gtk.Label(msg[i])
				sw.add_with_viewport(label)
			if i == 4:
				label = gtk.Label(msg[i])
				sw.add_with_viewport(label)
			if i == 5:
				label = gtk.Label(msg[i])
				sw.add_with_viewport(label)
			if i == 6:

				ME_IMAGE = os.path.join(os.path.dirname(os.path.realpath(sys.argv[0])), 'wp_dev_team.jpg')
				image = gtk.Image()
				try:
					pixbuf = gtk.gdk.pixbuf_new_from_file(ME_IMAGE)
					image.set_from_pixbuf(pixbuf)
					box_me = gtk.VBox()
					box_me.pack_start(image)
					image.show()
					box_me.show()
					sw.add_with_viewport(box_me)
				except:
					label = gtk.Label(msg[i])
					sw.add_with_viewport(label)

			###########################################################################
			label.modify_font(small_font)
			label.show()
			lbl = gtk.Label(buffer)
			lbl.set_padding(2, 2)
			notebook.append_page(sw, lbl)

		self.show()

	def mlist(self):
		msglist = [""]
		msg1 = u"""	
WPClipper (c)2005-2009 by Paul Sherman
Distributed under the GNU GPL version 3
A copy of GPL3 is included with the program.
    
    
WP Clipper is a cross-platform, hybrid image viewer and image editing 
program. It was designed specifically with WPClipart in mind, but it can 
be used to view/edit almost any clipart or photograph.
    
    
[Program background...]
    
It was initially developed on Linux for my kids to use in conjunction with 
AbiWord (which they used on Windows machines in their middle school.) 
There were two reasons I made the collection and program:
    
1] I was uncomfortable with the kids doing image searches online.
     (See the site information below...)
    
2] Linux did not have a little viewer/editor program that could copy and 
    paste into AbiWord. Also, for ease of use I wanted the speed and 
    simplicity of a viewer, but with some quick and easy editing for basic 
    things like rotation, some color/contrast adjustments and for fun a 
    few filters.
    
The program was first written using the wxWindows GUI toolkit, as it was 
then needed for proper clipboard functionality... but updates to pyGTK have 
made the use of that toolkit possible, and has made the overall software 
requirements for the program leaner, able to be used on computers with 
slightly older hardware and in most cases able to run without installing 
additional dependencies -- as python-gtk is a much more commonly 
installed development library. It is also available on the OLPC machines.
    
Making the program/collection available to OLPC machines, as well as many 
commodity PCs in use for education, fits precisely with the goals of 
WPClipart.
    
        
[Clipart Site background...]
    
The project started as a "safe" collection of clipart for my kids. 
Their middle school used AbiWord, and they were often searching for 
clipart that was both safe and copyright-free. Since this proved to 
be both difficult and hazardous (since image searches often yielded 
some very untoward photos) I decided to create a  simple collection 
for their use. My background as both a photographer and a programmer 
lent itself well to the project, I put it online with my software for 
others to download and as the months passed it became very popular.
    
I made thumbnail pages and put up some Google ads, (made a bit of 
change every day), then suddenly the Google image search engine 
spidered the site and my server was a bit overwhelmed. After fielding 
20-30k hits a day for a year or so I ended up putting the collection 
on a dedicated remote server, and the ad revenue takes care of the 
expense. And by using good image tagging and submitting XML sitemaps 
to Google with each update, the custom search function really helps 
track images down.
    
"""


		msg2 = u"""

[Viewing]
    
  CLICK the file name of an image to see its thumbnail.
  Single-clicking only displays the image filename in the status bar.
  
  SINGLE-CLICK the thumnail to see the image full-size.
  This pops up in a new window.
  Click anywhere in the new window to dismiss the full-size image.
  
  Any editing and/or saving is done while viewing the thumbnail.
    
    

[Install]
    
Being a Python program the viewer does not need an installer to run,
although I make a Windows installer version that can uninstall and does 
not require any Python/GTK dependencies (as these are not so commonly 
present and up to date on Windows-based PCs.)

        
Requirements (for non-Windows machines):
	Python-2.5
	GTK-2.10
	pyGTK-2.10
	PIL (Python Imaging Library)-1.1.6
	
	
The program will be available stand-alone, and is always included in 
the "viewer" folder of the collection itself (both online and within 
the clipart download packages.) When run from the viewer folder the 
clipart automatically opens with the clipart collection in the file 
search list. (American History at the top -- there were 48 category 
folders and 19,511 images as of this writing.)
    
    

[Terms of Use]
    
These images are public domain, and that means they can be used and 
edited for whatever purpose you wish, personal or commercial. No 
attrribution or linking is required. There are only two modest 
exceptions to being able to do anything at all with any of the images:
    
    
<Exceptions>

		* A small percentage of the clipart consists of Company logos, 
		recognizable hardware and postage stamp art, which are not 
		formally PD but are available via Fair Use, which means that 
		they are actually copyrighted but can be used without the 
		owner's permission in many situations.

			Small credit-card reproductions to use on a website or flier 
		are examples of Fair Use -- but you should realize that you 
		cannot do something like make your own company logo based 
		upon one of the Fair Use items. (Basically, anything that 
		already is a company logo or trademark.)
		

		* My website is mine. I do not expect anyone to copy my site 
		or the image collection (in large part) to host online or sell. 
		This would compete with my site, draining what revenue I 
		generate through online ads. These pay for hosting and modestly 
		compensate me all the ink I use in test printing and for the 
		hundreds of hours I spend finding, creating and editing images. 
		
		That being said, I freely allow a static version of the 
		collection, in its entirety, to be included or packaged for 
		any GPL-licensed operating system. This includes, of course, 
		the OLPC computers and the school servers that they use.

    
For a list of where the images were obtained, as well as a further 
discussion of obtaining and editing the images in the WPClipart
collection, see the "Legal" page at http://www.wpclipart.com/legal.html.
    
    
"""

		msg3 = u"""
		
The file browser for wpclipper is a stripped-down version of the 
standard GTK search dialog. The "Add", "Remove" and FILE-FILTER 
buttons are removed, but the rest is identical.
    
    
The DIRECTORY/FILES section is where standard file-browsing takes 
place. A single-click on a file or folder selects it. A double-
click on a folder will open the folder and show the contents in the 
control. A click on a file will load the new image (only image 
type files are visible.) Loading involves creating a thumbnail on 
the right side of the application and putting the original image in a 
temporary file, ready for editing, saving, or copying to the clipboard.
    
    
The SHORTCUT FOLDERS are a list of links that open the file browser 
(on a double-click) to the path selected. The user home folder name 
is at the top. Next is the file system (usually "C:\\" in Windows, 
and "/" on Linux.) And if wpclipper is locatted in the clipart "viewer" 
subdirectory, then "wpclipart-x.x" will also appear in this section. 
Items can also be dragged from the directory/files section to the 
shortcut section to be added to the shortcut list.
    
    
The ENTER LOCATION BUTTON opens a text-entry box where a file or path 
name can be manually entered.
    
    
And finally, the FOLDER PATH strip shows the directories above the current 
list of files. (This bar will scroll via buttons to the right and left if 
the file path is too long to view.) Clicking on any one of the folder path 
buttons will re-open the directory/file list in the folder named on that 
button. This is the easy way to "backtrack" to a higher-level directory.
    
"""

		msg4 = u"""
		
The COPY TO CLIPBOARD button is fairly self-explanitory, but -- 
    
The button is inactive when an image is not loaded.
    
Wpclipper has to REMAIN OPEN until the user uses "Paste" in the application 
of their choice. When you close wpclipper, the contents of the clipboard 
are lost. (Of course, you can save the image rather than clipboard-copy 
if you choose.)
    
    
The clipboard contents can be pasted into any GTK-based application. The 
function now also works with OpenOffice Documents. Yeah!
    
"""
		msg5 = u"""
		
Editing has been made as simple as possible.
    
    
There are lists of ROTATE, FILTER and ADJUST which allow manipulations 
to the angle of the image, a series of special-effects filters and 
small changes to the image contrast/brightness/contrast/sharpness/color,
repectively. To conserve menory usage, there is no "undo" feature. However, 
under the image menu there is a "Restore original" option, which resets the 
image to the original rendition.
    
    
The image-changing menus are basic in that there are no parameters to set, 
so starting from the original after a change of heart rarely involes much 
loss of time.
    

"""


		msg6 = u"""

Images are saved in their actual dimensions (not thumbnail-sized.)
    
    
Saving an image for later use or sharing is done through the FILE menu. 
Files can be saved as a png or a jpg, and by default are saved as 
"new.png" or "new.jpg" in the user's home folder, though the name and 
location can be changed via the dialog.
    
    
There is also a "Save Image" button to quickly 
save an image as a PNG. As above with the file menu item, the default
behavior is to save the image as "new.png", but this can be edited in 
the save dialog. --This button is a bit redundant, and is mainly shown 
as a convenience and a remnder that the save option is available.
    		
    		
"""	
		msg7 = """

    
Paul Sherman
http://www.wpclipart.com
psherma1@rochester.rr.com
			
"""		

		msglist.insert(0,msg1)
		msglist.remove("")
		msglist.insert(1,msg2)
		msglist.insert(2,msg3)
		msglist.insert(3,msg4)
		msglist.insert(4,msg5)
		msglist.insert(5,msg6)
		msglist.insert(6,msg7)
		return msglist


if __name__ == '__main__':
    w = Window()
    gtk.main()
