#----------------------------------------------------------------------
# This file was generated by C:\Python25\Lib\site-packages\wx-2.8-msw-unicode\wx\tools\img2py.py
#
from wx import ImageFromStream, BitmapFromImage, EmptyIcon
import cStringIO, zlib


def getData():
    return zlib.decompress(
'x\xda\x01\xf1\x03\x0e\xfc\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00 \
\x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\x00\x00\x00\x04sBIT\x08\x08\x08\x08\
|\x08d\x88\x00\x00\x03\xa8IDATX\x85\xc5\x97\xcdN\x1bW\x14\xc7\x7f\xe7\xce\
\xf5\x076\xb8@0\t\r\xd9T\x95\xca&\x8bnP\xd9t\xd5M\xb7}\x016\xac\xfa\x10\xddv\
\xd9\x15\xddU\xea\x0b\xf4\r*e\xd1E%\xd4\xd0(HMhD]\xd2\x00\x01SC\x80\xf8s\xee\
=]\x8cM\x8d=\xe31\x94*G\x1a\xcd\\\x8d\xe7\x9e\xdf\xf9\x9fs\xee\xf5\x85wl\xf2\
\x7fL\xaaJ\x8e\xd3\xdc\x02\x19?\x8b\x0f&\x000\xaeA\xc7\xd4\x98n\xed\x8b\xd0N\
\x04X__\xff\xc2Z\xfb\xbd1f\xca\x18\x831\x06\xef=\xde{\xc20\xc49\x17{\xef=O\
\xe4\xdf0\xf3\xde\t\x93\xc53\n\x13\r\xac\xedt\xbf5\xad{\xf3\xc7\xdf~\xfa\xc9\
\xce\x0f\xd0\xfc]JT\x01\xec \x801\xe6\xbb\xb5\xb5\xb5)\x91\x88-\x0cC\xac\xb5\
\xdd\xc8t R\xbd\xfa\xac\xaf\x11\xfd\r\xd1\x1d\xd0W\xa0U\x84F\xf4N\x8a\xb9G\
\x8f\xea_"\xd9\nhA\xb5\xf5X\x84\xda\x10\x80snZD\xa8T*\x88\x08\xce9\x8a\xc5"\
\xedv\x9b\x1e\xd4\xe0=zn\x93\r\xb6\xc8\xdam\xac\xd9!c\xf7\t\xa4\x8aJ7\x03\
\xd2f\xf1~=\x07\xb9\x87\x00\x9cK]\xb5\xf9\xf3\x10@/*\x11\xb9\xbc\xfa\xc7I\
\x00\x81\x1ca\x83Clp@&\xd8\'0\x17H\xf0\x11\xc8\x9d\xee/j\xcc\x97\xb7@\xb2K\
\xe0/\xc0U\xb9(\xbe\x18\x02\xf0\xde\xc7:\x1c\x05\x02`\xed\x19\x81y\x83\x91\
\x1a\x81T\x91`\td\t1\x8b\xd1o\xd9#\xc8\x9c\x83\x1e?@\xec+\x08\xca\xd0\xb8;\
\x12`\\%z\x12\x8b41\xd2\x04\x99\x00\x99E\xcc\x03\x08>\xeeN,\x88\xf9\x03\xa4\
\x94A\xff.!R\xc0\x05S\xb1\x00qi\x88\x93\xbf\x1f )5Q\xa3]-\xde\x7fe\x93N\\\
\x11\x8et\x9eX\x07\x92G5\x8f\x92G}\x1d1\xb5\xa8\x13\\o\xe6=\xd4\x1f\x83\x9e\
\x85\x88;G\xb5N\xe0c\xbb`\x08 i|5\xdaY\x94\x19\x949<5\x02\xff2\x8a[\x0e\xbb\
\xefOp\x9d?\xa1\xe0^\x82;\x00W\xe5\xb4\xf5\xda\x8c\x02\xd8\xdc\xdc\x8c\x05\
\x88\xbb<wQ\xde\xc7\xeb}\x9c_\xc4\xf9"\xb8mpO\xba\xd76\x87GM\xd0\xf66\xda\
\xa9 \xfa\\\x16x\x9b\xa8\x00\xc0\xf2\xf2\xf2e\xff\xa7\xa7"\x8f\xe7\x03\x9c6\
\xa2\x8f\xb5\x882\x07>\x1a\xdbL\x89\xca\xeec\x96>l=E\xdbO\x99lnA\xccJ\xe8\
\x9cCU\xa3\xa8\xae\xd9\x92J\x19\xa7\x0f\x81\x02\xeag0r\nD\x00\x81L\xf3b\xe7\
\x19\x9f\x7f\x16\xfe\xc4dsK$\xaa\x8e\x91\n\x0c\xda85\x01s8fPN\xf0\x1c!z\x01\
\x92\xc5\x9b\x05~\xf9\xf5Gd\xb2\xfe\xa4\x7f\xce\xb1\xbb \xcd\xf9\xd5\xd6\xb3\
(eT\xcb\xd1PA)Po\x0c\x95\xdcx\x00\xfd\x11\xa6\xb5g\x92\xa9\xeaeJS\x01\x06w\
\xbd\x9e]wm\x18\xb5{&\x02\x84a\x18\xeb4\r(\x0e`\xd0\xc6V \xceq\xda:pS\x80\
\xc4\x85\x08`cc\x03c\x86\x0bg\\@cLjm\x0c\xcd\x1e\x86\xe1e\xaeVVVFnLI\x8e\x93\
\x14\x8a\xb3\x91)\x18\xdc\x9aG)\x11\xbf&\xa4\xdb\xc8\x14\x8c\xe34\xed]\x1aLl\
\x17$\xb5\xe1M\xc0z\xcbz\x92\xddH\x81\xdb\xb4k\xed\x05iv\x13\xe5n\x04\xd0\
\xdf\x19i \xaa:\x12l\x10\xa0$"g\xaaZ*\x95J\x88D\xe7\x02k\xed\x7f\xae\x0b\x80\
l6{\x0e\xdc\x03N\x80\xd6 \xc0\x14P\xde\xdb\xdb\xfbzuu\xf5+\x91\xee\x89\xe2\
\x96LU\x9b\xbb\xbb\xbb\xdf\x00\x0b@\x00\x1c\x00\xbe_\xc3\x1c0\x0f\xdc\x01\
\xa6\xbb\xe3\xe0\x96\xfc7\x89\x82}\x0b\xd4\x80\xbf\x80\x0b\x88?\x1d\xe7\x80|\
\xf7~[\xa7g\x07t\x88do\xd1\xf7?\xfd\x1fi[\xcc\xd5\x90zP\xe4\x00\x00\x00\x00I\
END\xaeB`\x82\xd34\xc5\xd2' )

def getBitmap():
    return BitmapFromImage(getImage())

def getImage():
    stream = cStringIO.StringIO(getData())
    return ImageFromStream(stream)

def getIcon():
    icon = EmptyIcon()
    icon.CopyFromBitmap(getBitmap())
    return icon

