diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..94535c9c68ff56c70024048dc4f5f78290b54587 --- /dev/null +++ b/Makefile @@ -0,0 +1,19 @@ +NAME = donkiscripting-gui +MAIN = DonkiScripting.py + +DIRNAME = $(NAME:-gui=) +MODNAME = $(MAIN:.py=) + +default: bin + @cp src/*.py bin/${DIRNAME} + @cp -rf src/donkipylib bin/${DIRNAME} + @echo "#!/usr/bin/env python\nimport sys\nsys.path.append(sys.path[0]+'/${DIRNAME}')\nfrom ${MODNAME} import main\nif __name__ == '__main__':\n main()\n" > bin/${NAME} + @chmod +x bin/${NAME} bin/${DIRNAME}/${MAIN} + +bin: + @test -d $@ || mkdir -p $@/${DIRNAME} + +clean: + @rm -fr bin/ src/*~ src/*.pyc + +.PHONY: clean diff --git a/src/DonkiScripting.py b/src/DonkiScripting.py new file mode 100755 index 0000000000000000000000000000000000000000..0093484fabb6bec1bc82f089da0a4a02ad07a589 --- /dev/null +++ b/src/DonkiScripting.py @@ -0,0 +1,205 @@ +#! /usr/bin/python + +import os +import sys +import time +import PyTango +import signal +import traceback +import threading +import fcntl +from subprocess import Popen, PIPE +from PyQt4 import QtCore, QtGui +from DonkiScripting_ui import Ui_Dialog +from SyntaxHilighter import PythonHighlighter +import scriptingHelp +from scriptingHelp_rc import * +from pyEditor import PyEditWidget + +ui = None + +class checkScript(QtCore.QThread): + add_log = QtCore.pyqtSignal(str,bool) + def __init__(self, lwidget): + QtCore.QThread.__init__(self) + self.lwidget = lwidget + self.go_on = True + self.add_log.connect(self.lwidget.appendLogTxt) + + def run(self): + while self.go_on: + time.sleep(0.1) + if (self.lwidget.p is None): + continue + # Check stdout + while True: + try: + out = self.lwidget.p.stdout.readline() + if len(out) == 0: + break + self.add_log.emit(out.strip(),False) + except: + break + # Check sterr + while True: + try: + out = self.lwidget.p.stderr.readline() + if len(out) == 0: + break + self.add_log.emit(out.strip(),False) + except: + break + # Check if script has finished + if (self.lwidget.p.poll() is not None): + self.lwidget.p = None + self.add_log.emit("Script ended",True) + self.lwidget.runButton.setEnabled(True) + self.lwidget.abortButton.setEnabled(False) + + + +################################################################################ +class myDialog(Ui_Dialog): + def __init__(self, script_path, parent): + Ui_Dialog.__init__(self) + self.script_path = script_path + self.p = None + self.default_header = "from donkipylib import *" + self.parent = parent + + def setupWindowAndConnections(self): + # Add logo + self.logoLabel.setPixmap(QtGui.QPixmap(":images/DonkiPy.png")) + + # add Scripting Help + self.HelpTab = QtGui.QWidget() + self.HelpTab.setObjectName("HelpTab") + self.gridLayout_help = QtGui.QGridLayout(self.HelpTab) + self.gridLayout_help.setObjectName("gridLayout_help") + my_path = os.path.dirname(os.path.realpath(__file__)) + self.HelpWidget = scriptingHelp.ScriptingHelpWidget(parent=None, lib_path=my_path+"/donkipylib") + self.gridLayout_help.addWidget(self.HelpWidget, 0, 1, 1, 1) + self.tabWidget.addTab(self.HelpTab, "Scripting Help") + self.HelpWidget.icon.clear() + # Add Python specific editor + self.pyEditWidget = PyEditWidget(self.parent, self.script_path) + self.scriptTextEdit = self.pyEditWidget.getTextEdit() + self.scriptTextEdit.appendPlainText(self.default_header + "\n") + self.gridLayout_3.addWidget(self.pyEditWidget, 1, 0, 1, 5) + + self.scriptTextEdit.setTabStopWidth(16) + self.runButton.clicked.connect(self.runScript) + self.abortButton.clicked.connect(self.abortScript) + self.abortButton.setEnabled(False) + self.tabWidget.setCurrentIndex(0) + self.highlight = PythonHighlighter(self.scriptTextEdit.document()) + self.check_thread = checkScript(self) + self.check_thread.start() + + + + def tabChanged(self,index): + pass + + def runScript(self): + #self.HelpWidget.show() + try: + if self.p is not None and self.p.poll() == None: + self.errorMessage("Script already executing") + return + if not str(self.pyEditWidget.fileName).endswith(".py"): + self.errorMessage("No active script found") + return + if self.default_header not in self.scriptTextEdit.toPlainText(): + new_text = "%s\n%s" % (self.default_header,self.scriptTextEdit.toPlainText()) + self.scriptTextEdit.setPlainText(new_text) + self.pyEditWidget._saveScript(forced=True) + scriptlines = self.scriptTextEdit.toPlainText().split('\n') + if map(str,scriptlines) == ['']: + return + my_path = os.path.dirname(os.path.realpath(__file__)) + donki_pypath = "%s/donkipylib" % my_path + inp_list = ["python", '-u', self.pyEditWidget.fileName] + if 'PYTHONPATH' not in os.environ.keys(): + new_PYTHONPATH = donki_pypath + else: + new_PYTHONPATH = "%s:%s" % (os.environ['PYTHONPATH'],donki_pypath) + env_dict = {'PYTHONPATH':new_PYTHONPATH, 'DONKIPY_LIBPATH':donki_pypath} + self.p = Popen(inp_list,cwd=my_path,stdout=PIPE,stderr=PIPE,bufsize=0,env=env_dict) + fd = self.p.stdout.fileno() + fl = fcntl.fcntl(fd, fcntl.F_GETFL) + fcntl.fcntl(fd, fcntl.F_SETFL, fl | os.O_NONBLOCK) + fd = self.p.stderr.fileno() + fl = fcntl.fcntl(fd, fcntl.F_GETFL) + fcntl.fcntl(fd, fcntl.F_SETFL, fl | os.O_NONBLOCK) + self.logpanel.clear() + self.appendLogTxt("Script Started",True) + self.tabWidget.setCurrentIndex(1) + self.runButton.setEnabled(False) + self.abortButton.setEnabled(True) + except: + self.errorMessage(traceback.format_exc()) + + def abortScript(self): + if self.p is None: + return + if hasattr(self.p, 'send_signal'): + #Python > 2.5 + self.p.send_signal(signal.SIGABRT) + else: + #Python 2.5 + os.kill(self.p.pid, signal.SIGABRT) + + def appendLogTxt(self,txt , timedate = False): + if timedate: + self.logpanel.appendPlainText("%s %s" % (time.asctime(),txt)) + else: + self.logpanel.appendPlainText(txt) + + + def close_and_exit(self): + self.check_thread.go_on = False + if self.p is not None and self.p.poll() == None: + self.abortScript() + + def errorMessage(self, err_message): + msg = QtGui.QMessageBox() + msg.setIcon(QtGui.QMessageBox.Warning) + msg.setText(err_message) + msg.setWindowTitle("Error") + msg.setStandardButtons(QtGui.QMessageBox.Ok) + retval = msg.exec_() + + + +def sigint_handler( *args): + """Handler for the SIGINT signal.""" + global ui + ui.close_and_exit() + QtGui.QApplication.quit() + + +def main(): + app = QtGui.QApplication(sys.argv) + app.setWindowIcon(QtGui.QIcon(":images/DonkiPy.png")) + Dialog = QtGui.QDialog() + if len(sys.argv) < 2: + user_script_path = "." + else: + user_script_path = sys.argv[1] + ui = myDialog(user_script_path, Dialog) + ui.setupUi(Dialog) + ui.setupWindowAndConnections() + signal.signal(signal.SIGINT, sigint_handler) + signal.signal(signal.SIGTERM, sigint_handler) + # Next line enables CTRL-C abort + #signal.signal(signal.SIGINT, signal.SIG_DFL) + Dialog.show() + try: + app.exec_() + finally: + ui.close_and_exit() + + +if __name__ == "__main__": + main() diff --git a/src/DonkiScripting.ui b/src/DonkiScripting.ui new file mode 100644 index 0000000000000000000000000000000000000000..6af8eec1c24537b1cf051b748c5e2c6692fcb05f --- /dev/null +++ b/src/DonkiScripting.ui @@ -0,0 +1,195 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Dialog</class> + <widget class="QDialog" name="Dialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>905</width> + <height>721</height> + </rect> + </property> + <property name="palette"> + <palette> + <active> + <colorrole role="Base"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>255</red> + <green>255</green> + <blue>255</blue> + </color> + </brush> + </colorrole> + <colorrole role="Window"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>255</red> + <green>218</green> + <blue>107</blue> + </color> + </brush> + </colorrole> + </active> + <inactive> + <colorrole role="Base"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>255</red> + <green>255</green> + <blue>255</blue> + </color> + </brush> + </colorrole> + <colorrole role="Window"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>255</red> + <green>218</green> + <blue>107</blue> + </color> + </brush> + </colorrole> + </inactive> + <disabled> + <colorrole role="Base"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>255</red> + <green>218</green> + <blue>107</blue> + </color> + </brush> + </colorrole> + <colorrole role="Window"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>255</red> + <green>218</green> + <blue>107</blue> + </color> + </brush> + </colorrole> + </disabled> + </palette> + </property> + <property name="windowTitle"> + <string>Donki Scripting</string> + </property> + <layout class="QGridLayout" name="gridLayout_2"> + <item row="3" column="1"> + <widget class="QPushButton" name="abortButton"> + <property name="text"> + <string>Abort</string> + </property> + </widget> + </item> + <item row="2" column="0" colspan="5"> + <widget class="QTabWidget" name="tabWidget"> + <property name="currentIndex"> + <number>0</number> + </property> + <widget class="QWidget" name="Edit"> + <attribute name="title"> + <string>Script Editing</string> + </attribute> + <layout class="QGridLayout" name="gridLayout_3"/> + </widget> + <widget class="QWidget" name="Execution"> + <attribute name="title"> + <string>Execution Log</string> + </attribute> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="0"> + <widget class="QPlainTextEdit" name="logpanel"/> + </item> + </layout> + </widget> + </widget> + </item> + <item row="3" column="4"> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons"> + <set>QDialogButtonBox::Close</set> + </property> + </widget> + </item> + <item row="3" column="0"> + <widget class="QPushButton" name="runButton"> + <property name="text"> + <string>Run</string> + </property> + </widget> + </item> + <item row="1" column="1" colspan="4"> + <widget class="QLabel" name="label_2"> + <property name="font"> + <font> + <pointsize>16</pointsize> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="text"> + <string>Donki Scripting</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="logoLabel"> + <property name="text"> + <string/> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>Dialog</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel"> + <x>248</x> + <y>254</y> + </hint> + <hint type="destinationlabel"> + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>Dialog</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel"> + <x>316</x> + <y>260</y> + </hint> + <hint type="destinationlabel"> + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + </connections> +</ui> diff --git a/src/DonkiScripting_ui.py b/src/DonkiScripting_ui.py new file mode 100644 index 0000000000000000000000000000000000000000..91aa7ca9c98dd19862290b9a8c8929f287cd3c33 --- /dev/null +++ b/src/DonkiScripting_ui.py @@ -0,0 +1,110 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'DonkiScripting.ui' +# +# Created by: PyQt4 UI code generator 4.11.4 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +try: + _fromUtf8 = QtCore.QString.fromUtf8 +except AttributeError: + def _fromUtf8(s): + return s + +try: + _encoding = QtGui.QApplication.UnicodeUTF8 + def _translate(context, text, disambig): + return QtGui.QApplication.translate(context, text, disambig, _encoding) +except AttributeError: + def _translate(context, text, disambig): + return QtGui.QApplication.translate(context, text, disambig) + +class Ui_Dialog(object): + def setupUi(self, Dialog): + Dialog.setObjectName(_fromUtf8("Dialog")) + Dialog.resize(905, 721) + palette = QtGui.QPalette() + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 218, 107)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 218, 107)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 218, 107)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 218, 107)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) + Dialog.setPalette(palette) + self.gridLayout_2 = QtGui.QGridLayout(Dialog) + self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2")) + self.abortButton = QtGui.QPushButton(Dialog) + self.abortButton.setObjectName(_fromUtf8("abortButton")) + self.gridLayout_2.addWidget(self.abortButton, 3, 1, 1, 1) + self.tabWidget = QtGui.QTabWidget(Dialog) + self.tabWidget.setObjectName(_fromUtf8("tabWidget")) + self.Edit = QtGui.QWidget() + self.Edit.setObjectName(_fromUtf8("Edit")) + self.gridLayout_3 = QtGui.QGridLayout(self.Edit) + self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3")) + self.tabWidget.addTab(self.Edit, _fromUtf8("")) + self.Execution = QtGui.QWidget() + self.Execution.setObjectName(_fromUtf8("Execution")) + self.gridLayout = QtGui.QGridLayout(self.Execution) + self.gridLayout.setObjectName(_fromUtf8("gridLayout")) + self.logpanel = QtGui.QPlainTextEdit(self.Execution) + self.logpanel.setObjectName(_fromUtf8("logpanel")) + self.gridLayout.addWidget(self.logpanel, 0, 0, 1, 1) + self.tabWidget.addTab(self.Execution, _fromUtf8("")) + self.gridLayout_2.addWidget(self.tabWidget, 2, 0, 1, 5) + self.buttonBox = QtGui.QDialogButtonBox(Dialog) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.buttonBox.sizePolicy().hasHeightForWidth()) + self.buttonBox.setSizePolicy(sizePolicy) + self.buttonBox.setOrientation(QtCore.Qt.Horizontal) + self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Close) + self.buttonBox.setObjectName(_fromUtf8("buttonBox")) + self.gridLayout_2.addWidget(self.buttonBox, 3, 4, 1, 1) + self.runButton = QtGui.QPushButton(Dialog) + self.runButton.setObjectName(_fromUtf8("runButton")) + self.gridLayout_2.addWidget(self.runButton, 3, 0, 1, 1) + self.label_2 = QtGui.QLabel(Dialog) + font = QtGui.QFont() + font.setPointSize(16) + font.setBold(True) + font.setWeight(75) + self.label_2.setFont(font) + self.label_2.setAlignment(QtCore.Qt.AlignCenter) + self.label_2.setObjectName(_fromUtf8("label_2")) + self.gridLayout_2.addWidget(self.label_2, 1, 1, 1, 4) + self.logoLabel = QtGui.QLabel(Dialog) + self.logoLabel.setText(_fromUtf8("")) + self.logoLabel.setObjectName(_fromUtf8("logoLabel")) + self.gridLayout_2.addWidget(self.logoLabel, 1, 0, 1, 1) + + self.retranslateUi(Dialog) + self.tabWidget.setCurrentIndex(0) + QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("accepted()")), Dialog.accept) + QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("rejected()")), Dialog.reject) + QtCore.QMetaObject.connectSlotsByName(Dialog) + + def retranslateUi(self, Dialog): + Dialog.setWindowTitle(_translate("Dialog", "Donki Scripting", None)) + self.abortButton.setText(_translate("Dialog", "Abort", None)) + self.tabWidget.setTabText(self.tabWidget.indexOf(self.Edit), _translate("Dialog", "Script Editing", None)) + self.tabWidget.setTabText(self.tabWidget.indexOf(self.Execution), _translate("Dialog", "Execution Log", None)) + self.runButton.setText(_translate("Dialog", "Run", None)) + self.label_2.setText(_translate("Dialog", "Donki Scripting", None)) + diff --git a/src/SyntaxHilighter.py b/src/SyntaxHilighter.py new file mode 100644 index 0000000000000000000000000000000000000000..0b13367bf971811560ef983d78cd83dafddb16e5 --- /dev/null +++ b/src/SyntaxHilighter.py @@ -0,0 +1,176 @@ +# syntax.py + +import sys + +from PyQt4.QtCore import QRegExp +from PyQt4.QtGui import QColor, QTextCharFormat, QFont, QSyntaxHighlighter + +def format(color, style=''): + """Return a QTextCharFormat with the given attributes. + """ + _color = QColor() + _color.setNamedColor(color) + + _format = QTextCharFormat() + _format.setForeground(_color) + if 'bold' in style: + _format.setFontWeight(QFont.Bold) + if 'italic' in style: + _format.setFontItalic(True) + + return _format + + +# Syntax styles that can be shared by all languages +STYLES = { + 'keyword': format('blue'), + 'operator': format('red'), + 'brace': format('darkGray'), + 'defclass': format('black', 'bold'), + 'string': format('magenta'), + 'string2': format('darkMagenta'), + 'comment': format('darkGreen', 'italic'), + 'self': format('black', 'italic'), + 'numbers': format('brown'), +} + + +class PythonHighlighter (QSyntaxHighlighter): + """Syntax highlighter for the Python language. + """ + # Python keywords + keywords = [ + 'and', 'assert', 'break', 'class', 'continue', 'def', + 'del', 'elif', 'else', 'except', 'exec', 'finally', + 'for', 'from', 'global', 'if', 'import', 'in', + 'is', 'lambda', 'not', 'or', 'pass', 'print', + 'raise', 'return', 'try', 'while', 'yield', + 'None', 'True', 'False', + ] + + # Python operators + operators = [ + '=', + # Comparison + '==', '!=', '<', '<=', '>', '>=', + # Arithmetic + '\+', '-', '\*', '/', '//', '\%', '\*\*', + # In-place + '\+=', '-=', '\*=', '/=', '\%=', + # Bitwise + '\^', '\|', '\&', '\~', '>>', '<<', + ] + + # Python braces + braces = [ + '\{', '\}', '\(', '\)', '\[', '\]', + ] + def __init__(self, document): + QSyntaxHighlighter.__init__(self, document) + + # Multi-line strings (expression, flag, style) + # FIXME: The triple-quotes in these two lines will mess up the + # syntax highlighting from this point onward + self.tri_single = (QRegExp("'''"), 1, STYLES['string2']) + self.tri_double = (QRegExp('"""'), 2, STYLES['string2']) + + rules = [] + + # Keyword, operator, and brace rules + rules += [(r'\b%s\b' % w, 0, STYLES['keyword']) + for w in PythonHighlighter.keywords] + rules += [(r'%s' % o, 0, STYLES['operator']) + for o in PythonHighlighter.operators] + rules += [(r'%s' % b, 0, STYLES['brace']) + for b in PythonHighlighter.braces] + + # All other rules + rules += [ + # 'self' + (r'\bself\b', 0, STYLES['self']), + + # Double-quoted string, possibly containing escape sequences + (r'"[^"\\]*(\\.[^"\\]*)*"', 0, STYLES['string']), + # Single-quoted string, possibly containing escape sequences + (r"'[^'\\]*(\\.[^'\\]*)*'", 0, STYLES['string']), + + # 'def' followed by an identifier + (r'\bdef\b\s*(\w+)', 1, STYLES['defclass']), + # 'class' followed by an identifier + (r'\bclass\b\s*(\w+)', 1, STYLES['defclass']), + + # From '#' until a newline + (r'#[^\n]*', 0, STYLES['comment']), + + # Numeric literals + (r'\b[+-]?[0-9]+[lL]?\b', 0, STYLES['numbers']), + (r'\b[+-]?0[xX][0-9A-Fa-f]+[lL]?\b', 0, STYLES['numbers']), + (r'\b[+-]?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?\b', 0, STYLES['numbers']), + ] + + # Build a QRegExp for each pattern + self.rules = [(QRegExp(pat), index, fmt) + for (pat, index, fmt) in rules] + + + def highlightBlock(self, text): + """Apply syntax highlighting to the given block of text. + """ + # Do other syntax formatting + for expression, nth, format in self.rules: + index = expression.indexIn(text, 0) + + while index >= 0: + # We actually want the index of the nth match + index = expression.pos(nth) + length = expression.cap(nth).length() + self.setFormat(index, length, format) + index = expression.indexIn(text, index + length) + + self.setCurrentBlockState(0) + + # Do multi-line strings + in_multiline = self.match_multiline(text, *self.tri_single) + if not in_multiline: + in_multiline = self.match_multiline(text, *self.tri_double) + + + def match_multiline(self, text, delimiter, in_state, style): + """Do highlighting of multi-line strings. ``delimiter`` should be a + ``QRegExp`` for triple-single-quotes or triple-double-quotes, and + ``in_state`` should be a unique integer to represent the corresponding + state changes when inside those strings. Returns True if we're still + inside a multi-line string when this function is finished. + """ + # If inside triple-single quotes, start at 0 + if self.previousBlockState() == in_state: + start = 0 + add = 0 + # Otherwise, look for the delimiter on this line + else: + start = delimiter.indexIn(text) + # Move past this match + add = delimiter.matchedLength() + + # As long as there's a delimiter match on this line... + while start >= 0: + # Look for the ending delimiter + end = delimiter.indexIn(text, start + add) + # Ending delimiter on this line? + if end >= add: + length = end - start + add + delimiter.matchedLength() + self.setCurrentBlockState(0) + # No; multi-line string + else: + self.setCurrentBlockState(in_state) + length = text.length() - start + add + # Apply formatting + self.setFormat(start, length, style) + # Look for the next match + start = delimiter.indexIn(text, start + length) + + # Return True if still inside a multi-line string, False otherwise + if self.currentBlockState() == in_state: + return True + else: + return False \ No newline at end of file diff --git a/src/donkipylib/ControlSystemLib.py b/src/donkipylib/ControlSystemLib.py new file mode 100644 index 0000000000000000000000000000000000000000..86d3b42305df8fb4ef1716b345018e1ce9c979e2 --- /dev/null +++ b/src/donkipylib/ControlSystemLib.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Mar 7 10:51:03 2013 + +@author: rob +""" +import PyTango +import types + +def addMethod(class_obj, func_name, cmd_in): + def proxy_command(class_obj,argin=None,tango_cmd=cmd_in): + tango_dev = tango_cmd.split("->",1)[0] + cmd_name = tango_cmd.split("->",1)[1] + dev=PyTango.DeviceProxy(tango_dev) + if argin is None: + return dev.command_inout(cmd_name) + else: + return dev.command_inout(cmd_name,argin) + return setattr(class_obj, func_name, types.MethodType(proxy_command, class_obj)) + + +class ControlSystem(dict): + """Example of overloading __getatr__ and __setattr__ + This example creates a dictionary where members can be accessed as attributes + """ + def __init__(self,ATTRIBUTES_IN={},ATTRIBUTES_READONLY_IN={},COMMANDS_IN={}): + self.ATTRIBUTES = ATTRIBUTES_IN + self.ATTRIBUTES_READONLY = ATTRIBUTES_READONLY_IN + self.COMMANDS = COMMANDS_IN + indict = {} + dict.__init__(self, indict) + self.__initialised = True + for cmd in COMMANDS_IN: + tokens = COMMANDS_IN[cmd].split("|") + tango_name = tokens[0] + addMethod(self,cmd,tango_name) + # after initialisation, setting attributes is the same as setting an item + + + def __getattr__(self, item): + """Maps values to attributes. + Only called if there *isn't* an attribute with this name + """ + if item in self.ATTRIBUTES: + tokens = self.ATTRIBUTES[item].split("|") + tango_name = tokens[0] + elif item in self.ATTRIBUTES_READONLY: + tokens = self.ATTRIBUTES_READONLY[item].split("|") + tango_name = tokens[0] + else: + return + try: + attr_proxy = PyTango.AttributeProxy(tango_name) + val = attr_proxy.read().value + except: + return None + return val + + def __setattr__(self, item, value): + """Maps attributes to values. + Only if we are initialised + """ + if not self.__dict__.has_key('_ControlSystem__initialised'): # this test allows attributes to be set in the __init__ method + return dict.__setattr__(self, item, value) + elif self.__dict__.has_key(item): # any normal attributes are handled normally + print item,value + dict.__setattr__(self, item, value) + elif item in self.COMMANDS: + dict.__setattr__(self, item, value) + else: + tokens = self.ATTRIBUTES[item].split("|") + tango_name = tokens[0] + attr_proxy = PyTango.AttributeProxy(tango_name) + attr_proxy.write(value) + diff --git a/src/donkipylib/ControlSystemLib.pyc b/src/donkipylib/ControlSystemLib.pyc new file mode 100644 index 0000000000000000000000000000000000000000..53c6c4445519c446fa2ff758e3d34e57aec4f5a0 Binary files /dev/null and b/src/donkipylib/ControlSystemLib.pyc differ diff --git a/src/donkipylib/demo_macro.py b/src/donkipylib/demo_macro.py new file mode 100644 index 0000000000000000000000000000000000000000..db8253e5c2d93b83a755259a99e2e7cceabd9943 --- /dev/null +++ b/src/donkipylib/demo_macro.py @@ -0,0 +1,17 @@ +import sys +import time +from datetime import datetime + +LIBRARY_TYPE = "MACRO" + +MACROS = { + "print_date_and_time": "print_date_and_time|Dummy macro that prints date and time|demo_macro.print_date_and_time()", +} + +def print_date_and_time(): + now = datetime.now() + # dd/mm/YY H:M:S + dt_string = now.strftime("%d/%m/%Y %H:%M:%S") + print("date and time =", dt_string) + + diff --git a/src/donkipylib/demo_macro.pyc b/src/donkipylib/demo_macro.pyc new file mode 100644 index 0000000000000000000000000000000000000000..38d93a017fd3fef25ba5ab482ae5639c7eb69080 Binary files /dev/null and b/src/donkipylib/demo_macro.pyc differ diff --git a/src/donkipylib/donkipylib.py b/src/donkipylib/donkipylib.py new file mode 100644 index 0000000000000000000000000000000000000000..6e1ebb0d650b826753ce4852e648cc56ce675bc1 --- /dev/null +++ b/src/donkipylib/donkipylib.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Mar 15 11:05:41 2013 + +@author: rob +""" +import os, sys, imp + +if (os.environ.get('DONKIPY_LIBPATH')): + dirname = os.environ.get('DONKIPY_LIBPATH') + sys.path.append(dirname) + # + modules_to_import = [] + macros_to_import = [] + # + mod_files = [x for x in os.listdir(dirname) if x.endswith('.py')] + for filename in mod_files: + filepath = dirname + '/' + filename + mod_name,file_ext = os.path.splitext(os.path.split(filepath)[-1]) + if file_ext.lower() == '.py' and (mod_name != __name__) : + py_mod = imp.load_source(mod_name, filepath) + if hasattr(py_mod, 'LIBRARY_TYPE'): + if (py_mod.LIBRARY_TYPE == 'TRANSLATOR'): + modules_to_import.append(mod_name) + if (py_mod.LIBRARY_TYPE == 'MACRO'): + macros_to_import.append(mod_name) + # + for mod_name in modules_to_import: + cmd = "from " + mod_name+ " import cs as "+ mod_name + exec cmd + # + for mod_name in macros_to_import: + cmd = "import "+ mod_name + " as " + mod_name + exec( cmd ) + diff --git a/src/donkipylib/donkipylib.pyc b/src/donkipylib/donkipylib.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c8bb86d429867d2bcf9c9a579fe0d825778af088 Binary files /dev/null and b/src/donkipylib/donkipylib.pyc differ diff --git a/src/donkipylib/test_dev.py b/src/donkipylib/test_dev.py new file mode 100644 index 0000000000000000000000000000000000000000..79d0b17d57b2968b9f03282c274fdd2ffe94356d --- /dev/null +++ b/src/donkipylib/test_dev.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +from ControlSystemLib import ControlSystem + +LIBRARY_TYPE = "TRANSLATOR" + +ATTRIBUTES = { + "double_scalar": "ken:20000/test/device/1/double_scalar|R/W double scalar attribute|print test_dev.double_scalar<br>test_dev.double_scalar=5.3", +} + +ATTRIBUTES_READONLY = { + "wave": "ken:20000/test/device/1/wave|Read wave spectrum attribute|print test_dev.wave", + "short_image": "ken:20000/test/device/1/short_image_ro|Read short_image attribute|print test_dev.short_image" +} + +COMMANDS = { + "Status": "ken:20000/test/device/1->Status|Reads Tango Status|print test_dev.Status()" +} + +################################################################################ +#### DO NOT CHANGE LINES BELOW PLEASE #### +################################################################################ + +cs = ControlSystem(ATTRIBUTES,ATTRIBUTES_READONLY,COMMANDS) + +for item in ATTRIBUTES: + cmd = item + " = " + "cs." + item + exec cmd + +for item in ATTRIBUTES_READONLY: + cmd = item + " = " + "cs." + item + exec cmd + +for item in COMMANDS: + cmd = item + " = " + "cs." + item + exec cmd + +if __name__ == "__main__": + print Status() + diff --git a/src/donkipylib/test_dev.pyc b/src/donkipylib/test_dev.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7bd140f731b55359d72b80cb8cd6b8d33aaa2010 Binary files /dev/null and b/src/donkipylib/test_dev.pyc differ diff --git a/src/pyEditor.py b/src/pyEditor.py new file mode 100644 index 0000000000000000000000000000000000000000..51a6d8f6aa9812809c6ac7581233478f333f8cc6 --- /dev/null +++ b/src/pyEditor.py @@ -0,0 +1,534 @@ +# -*- coding: utf-8 -*- +# +# This file inherits code from original editor.py from NINJA-IDE (http://ninja-ide.org). +# and https://nachtimwald.com/2009/08/15/qtextedit-with-line-numbers/ + +from __future__ import absolute_import +from __future__ import unicode_literals + +import re +import sys +import traceback +from PyQt4.QtGui import QPlainTextEdit,QFrame,QPainter +from PyQt4.QtGui import QTextCursor,QWidget,QHBoxLayout +from PyQt4.QtCore import Qt,QRect +from PyQt4.QtCore import SIGNAL +from PyQt4 import QtGui,QtCore + +endCharsForIndent = [':', '{', '(', '['] + +patIndent = re.compile('^\s+') + +BRACE_DICT = {')': '(', ']': '[', '}': '{', '(': ')', '[': ']', '{': '}'} + +BRACES = {'{': '}', + '[': ']', + '(': ')'} +QUOTES = {'"': '"', + "'": "'"} + +USE_TABS = False +ALLOW_WORD_WRAP = False +INDENT = 4 +# by default Unix (\n) is used +USE_PLATFORM_END_OF_LINE = False +MARGIN_LINE = 80 +SHOW_MARGIN_LINE = True +REMOVE_TRAILING_SPACES = True +SHOW_TABS_AND_SPACES = True + +def get_indentation(line, indent=INDENT, useTabs=USE_TABS): + global patIndent + global endCharsForIndent + indentation = '' + if len(line) > 0 and line[-1] in endCharsForIndent: + if useTabs: + indentation = '\t' + else: + indentation = ' ' * indent + elif len(line) > 0 and line[-1] == ',': + count = [x for x in endCharsForIndent[1:] + if (line.count(x) - line.count(closeBraces[x])) % 2 != 0] + if count: + if useTabs: + indentation = '\t' + else: + indentation = ' ' * indent + space = patIndent.match(line) + if space is not None: + return space.group() + indentation + return indentation + + +class PyEditor(QPlainTextEdit): + + def __init__(self): + QPlainTextEdit.__init__(self) + self.indent = INDENT + self.useTabs = USE_TABS + # GOTO LINE shortcut + QtGui.QShortcut(QtGui.QKeySequence("Ctrl+L"), self, self._scroll_To_Line, context=Qt.WidgetShortcut) + #Dict functions for KeyPress + self.preKeyPress = { + Qt.Key_Tab: self.__insert_indentation, + Qt.Key_Backspace: self.__backspace, + Qt.Key_Home: self.__home_pressed, + Qt.Key_Enter: self.__ignore_extended_line, + Qt.Key_Return: self.__ignore_extended_line, + Qt.Key_BracketRight: self.__brace_completion, + Qt.Key_BraceRight: self.__brace_completion, + Qt.Key_ParenRight: self.__brace_completion, + Qt.Key_Apostrophe: self.__quot_completion, + Qt.Key_QuoteDbl: self.__quot_completion} + + self.postKeyPress = { + Qt.Key_Enter: self.__auto_indent, + Qt.Key_Return: self.__auto_indent, + Qt.Key_BracketLeft: self.__complete_braces, + Qt.Key_BraceLeft: self.__complete_braces, + Qt.Key_ParenLeft: self.__complete_braces, + Qt.Key_Apostrophe: self.__complete_quotes, + Qt.Key_QuoteDbl: self.__complete_quotes} + + + def _scroll_To_Line(self): + line,ok = QtGui.QInputDialog.getInt(self,"Go to line","Enter line number") + if not ok or (line <= 0): + return + self.moveCursor(QtGui.QTextCursor.Start) + cursor = QtGui.QTextCursor(self.document().findBlockByLineNumber(line-1)) + cursor.select(QtGui.QTextCursor.LineUnderCursor) + self.setTextCursor(cursor) + + + def _add_line_increment(self, lines, blockModified, diference): + def _inner_increment(line): + if line < blockModified: + return line + return line + diference + return list(map(_inner_increment, lines)) + + def _add_line_increment_for_dict(self, data, blockModified, diference): + def _inner_increment(line): + if line < blockModified: + return line + newLine = line + diference + summary = data.pop(line) + data[newLine] = summary + return newLine + list(map(_inner_increment, list(data.keys()))) + return data + + + def __insert_indentation(self, event): + if self.textCursor().hasSelection(): + self.indent_more() + elif self.useTabs: + return False + else: + self.textCursor().insertText(' ' * self.indent) + return True + + def __backspace(self, event): + if self.textCursor().hasSelection() or self.useTabs: + return False + cursor = self.textCursor() + cursor.movePosition(QTextCursor.StartOfLine, QTextCursor.KeepAnchor) + text = str(cursor.selection().toPlainText()) + if (len(text) % self.indent == 0) and text.isspace(): + cursor.movePosition(QTextCursor.StartOfLine) + cursor.movePosition(QTextCursor.Right, QTextCursor.KeepAnchor, + self.indent) + cursor.removeSelectedText() + return True + + def __home_pressed(self, event): + if event.modifiers() == Qt.ControlModifier: + return False + elif event.modifiers() == Qt.ShiftModifier: + move = QTextCursor.KeepAnchor + else: + move = QTextCursor.MoveAnchor + if self.textCursor().atBlockStart(): + self.moveCursor(QTextCursor.WordRight, move) + return True + + cursor = self.textCursor() + position = cursor.position() + self.moveCursor(QTextCursor.StartOfLine, move) + self.moveCursor(QTextCursor.WordRight, move) + if position != self.textCursor().position() and \ + str(cursor.block().text()).startswith(' '): + return True + + def __ignore_extended_line(self, event): + if event.modifiers() == Qt.ShiftModifier: + return True + + def __set_selection_from_pair(self, begin, end): + """Set the current editor cursor with a selection from a given pair of + positions""" + cursor = self.textCursor() + cursor.setPosition(begin) + cursor.setPosition(end, QTextCursor.KeepAnchor) + self.setTextCursor(cursor) + + def __reverse_select_text_portion_from_offset(self, begin, end): + """Backwards select text, go from current+begin to current - end + possition, returns text""" + cursor = self.textCursor() + cursor_position = cursor.position() + cursor.setPosition(cursor_position + begin) + #QT silently fails on invalid position, ergo breaks when EOF < begin + while (cursor.position() == cursor_position) and begin > 0: + begin -= 1 + cursor.setPosition(cursor_position + begin) + cursor.setPosition(cursor_position - end, QTextCursor.KeepAnchor) + selected_text = cursor.selectedText() + return selected_text + + def __quot_completion(self, event): + """Indicate if this is some sort of quote that needs to be completed + This is a very simple boolean table, given that quotes are a + simmetrical symbol, is a little more cumbersome guessing the completion + table. + """ + text = event.text() + pos = self.textCursor().position() + next_char = str(self.get_selection(pos, pos + 1)).strip() + if self.cursor_inside_string() and text == next_char: + self.moveCursor(QTextCursor.Right) + return True + PENTA_Q = 5 * text + TETRA_Q = 4 * text + TRIPLE_Q = 3 * text + DOUBLE_Q = 2 * text + supress_echo = False + pre_context = self.__reverse_select_text_portion_from_offset(0, 3) + pos_context = self.__reverse_select_text_portion_from_offset(3, 0) + if pre_context == pos_context == TRIPLE_Q: + supress_echo = True + elif pos_context[:2] == DOUBLE_Q: + pre_context = self.__reverse_select_text_portion_from_offset(0, 4) + if pre_context == TETRA_Q: + supress_echo = True + elif pos_context[:1] == text: + pre_context = self.__reverse_select_text_portion_from_offset(0, 5) + if pre_context == PENTA_Q: + supress_echo = True + elif pre_context[-1] == text: + supress_echo = True + if supress_echo: + self.moveCursor(QTextCursor.Right) + return supress_echo + + def __brace_completion(self, event): + """Indicate if this symbol is part of a given pair and needs to be + completed. + """ + text = event.text() + if text in list(BRACES.values()): + portion = self.__reverse_select_text_portion_from_offset(1, 1) + brace_open = portion[0] + brace_close = (len(portion) > 1) and portion[1] or None + balance = BRACE_DICT.get(brace_open, None) == text == brace_close + if balance: + self.moveCursor(QTextCursor.Right) + return True + + def __auto_indent(self, event): + text = self.textCursor().block().previous().text() + spaces = get_indentation(text, self.indent, self.useTabs) + self.textCursor().insertText(spaces) + if text != '' and text == ' ' * len(text): + self.moveCursor(QTextCursor.Up) + self.moveCursor(QTextCursor.EndOfLine, QTextCursor.KeepAnchor) + self.textCursor().removeSelectedText() + self.moveCursor(QTextCursor.Down) + cursor = self.textCursor() + cursor.setPosition(cursor.position()) + self.setTextCursor(cursor) + + def insert_new_line(self): + cursor = self.textCursor() + at_block_end = cursor.atBlockEnd() + cursor.movePosition(QTextCursor.EndOfLine) + cursor.insertBlock() + if not at_block_end: + self.moveCursor(QTextCursor.Down) + self.__auto_indent(None) + + def __complete_braces(self, event): + """Complete () [] and {} using a mild inteligence to see if corresponds + and also do some more magic such as complete in classes and functions. + """ + brace = event.text() + if brace not in BRACES: + # Thou shalt not waste cpu cycles if this brace compleion dissabled + return + text = self.textCursor().block().text() + complementary_brace = BRACE_DICT.get(brace) + token_buffer = [] + _, tokens = self.__tokenize_text(text) + is_unbalance = 0 + for tkn_type, tkn_rep, tkn_begin, tkn_end in tokens: + if tkn_rep == brace: + is_unbalance += 1 + elif tkn_rep == complementary_brace: + is_unbalance -= 1 + if tkn_rep.strip() != "": + token_buffer.append((tkn_rep, tkn_end[1])) + is_unbalance = (is_unbalance >= 0) and is_unbalance or 0 + + if (self.lang == "python") and (len(token_buffer) == 3) and \ + (token_buffer[2][0] == brace) and (token_buffer[0][0] in + ("def", "class")): + #are we in presence of a function? + self.textCursor().insertText("):") + self.__fancyMoveCursor(QTextCursor.Left, 2) + self.textCursor().insertText(self.selected_text) + elif token_buffer and (not is_unbalance) and \ + self.selected_text: + self.textCursor().insertText(self.selected_text) + elif is_unbalance: + pos = self.textCursor().position() + next_char = self.get_selection(pos, pos + 1).strip() + if self.selected_text or next_char == "": + self.textCursor().insertText(complementary_brace) + self.moveCursor(QTextCursor.Left) + self.textCursor().insertText(self.selected_text) + + def __complete_quotes(self, event): + """ + Completion for single and double quotes, which since are simmetrical + symbols used for different things can not be balanced as easily as + braces or equivalent. + """ + cursor = self.textCursor() + cursor.movePosition(QTextCursor.StartOfLine, + QTextCursor.KeepAnchor) + symbol = event.text() + if symbol in QUOTES: + pre_context = self.__reverse_select_text_portion_from_offset(0, 3) + if pre_context == 3 * symbol: + self.textCursor().insertText(3 * symbol) + self.__fancyMoveCursor(QTextCursor.Left, 3) + else: + self.textCursor().insertText(symbol) + self.moveCursor(QTextCursor.Left) + self.textCursor().insertText(self.selected_text) + + def keyPressEvent(self, event): + #On Return == True stop the execution of this method + if self.preKeyPress.get(event.key(), lambda x: False)(event): + #emit a signal then plugings can do something + self.emit(SIGNAL("keyPressEvent(QEvent)"), event) + return + self.selected_text = self.textCursor().selectedText() + + QPlainTextEdit.keyPressEvent(self, event) + + self.postKeyPress.get(event.key(), lambda x: False)(event) + + #emit a signal then plugings can do something + self.emit(SIGNAL("keyPressEvent(QEvent)"), event) + + +class PyEditWidget(QFrame): + + class NumberBar(QWidget): + + def __init__(self, *args): + QWidget.__init__(self, *args) + self.edit = None + # This is used to update the width of the control. + # It is the highest line that is currently visibile. + self.highest_line = 0 + self.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) + + + def setTextEdit(self, edit): + self.edit = edit + + def update(self, *args): + ''' + Updates the number bar to display the current set of numbers. + Also, adjusts the width of the number bar if necessary. + ''' + # The + 4 is used to compensate for the current line being bold. + width = self.fontMetrics().width(str(self.highest_line)) + 10 + if self.width() != width: + self.setFixedWidth(width) + QWidget.update(self, *args) + + def paintEvent(self, event): + font_metrics = self.fontMetrics() + current_line = self.edit.document().findBlock(self.edit.textCursor().position()).blockNumber() + 1 + + painter = QPainter(self) + + line_count = 0 + # Iterate over all text blocks in the document. + block = self.edit.document().begin() + + while block.isValid(): + line_count += 1 + + block_top = self.edit.blockBoundingGeometry(block).translated(self.edit.contentOffset()).top() + + # We want the line number for the selected line to be bold. + bold = False + if line_count == current_line: + bold = True + font = painter.font() + font.setBold(True) + painter.setFont(font) + + # Draw the line number right justified at the y position of the + # line. 3 is a magic padding number. drawText(x, y, text). + paint_rect = QRect(0, block_top, self.width(), font_metrics.height()) + painter.drawText(paint_rect, Qt.AlignLeft, unicode(line_count)) + + # Remove the bold style if it was set previously. + if bold: + font = painter.font() + font.setBold(False) + painter.setFont(font) + + block = block.next() + + self.highest_line = line_count + painter.end() + + QWidget.paintEvent(self, event) + + + def _loadScript(self): + try: + fileName = QtGui.QFileDialog.getOpenFileName(None,'Load script file', self.script_path, filter='*.py') + if fileName: + f = open(fileName) + self.edit.setPlainText(f.read()) + f.close() + self.fileName = fileName + self.saveButton.setText("Save") + if self.main_gui is not None: + self.main_gui.setWindowTitle("Donki Scripting - %s" % self.fileName) + self.last_saved_text = self.edit.toPlainText() + self.text_changed = False + except: + self._errorMessage(traceback.format_exc()) + + def _saveScript(self, forced = False): + try: + if self.edit.toPlainText() == '': + return + if self.fileName is not None: + suggested = self.fileName + else: + suggested = self.script_path + if not forced: + fileName = QtGui.QFileDialog.getSaveFileName(None,'Save script', suggested, filter='*.py') + else: + fileName = self.fileName + self.fileName = fileName + if fileName: + f = open(fileName,"w") + f.write(self.edit.toPlainText()) + f.close() + self.saveButton.setText("Save *") + if self.main_gui is not None: + self.main_gui.setWindowTitle("Donki Scripting - %s" % self.fileName) + self.last_saved_text = self.edit.toPlainText() + self.text_changed = False + except: + self._errorMessage(traceback.format_exc()) + + def _textChanged(self): + try: + if self.last_saved_text != self.edit.toPlainText(): + self.text_changed = True + self.saveButton.setText("Save *") + if self.main_gui is not None: + self.main_gui.setWindowTitle("Donki Scripting - %s *" % self.fileName) + else: + self.text_changed = False + self.saveButton.setText("Save") + except: + traceback.print_exc() + + + def _errorMessage(self, err_message): + msg = QtGui.QMessageBox() + msg.setIcon(QtGui.QMessageBox.Warning) + msg.setText(err_message) + msg.setWindowTitle("Error") + msg.setStandardButtons(QtGui.QMessageBox.Ok) + retval = msg.exec_() + + + def __init__(self, main_gui, default_path = "."): + QFrame.__init__(self) + + self.fileName = None + self.text_changed = False + + self.main_gui = main_gui + self.script_path = default_path + + self.setFrameStyle(QFrame.StyledPanel | QFrame.Sunken) + + self.edit = PyEditor() + self.edit.setFrameStyle(QFrame.NoFrame) + # + self.number_bar = self.NumberBar() + self.number_bar.setTextEdit(self.edit) + # + self.saveButton = QtGui.QPushButton(self) + self.saveButton.setAutoDefault(False) + self.saveButton.setObjectName("saveButton") + self.saveButton.setText("Save") + self.saveButton.clicked.connect(self._saveScript) + # + self.loadButton = QtGui.QPushButton(self) + self.loadButton.setAutoDefault(False) + self.loadButton.setObjectName("loadButton") + self.loadButton.setText("Load") + self.loadButton.clicked.connect(self._loadScript) + + # + spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.bbox = QtGui.QGridLayout(self) + self.bbox.setSpacing(0) + self.bbox.setMargin(0) + self.bbox.addWidget(self.loadButton,0,0,1,1) + self.bbox.addWidget(self.saveButton,0,1,1,1) + self.bbox.addItem(spacerItem,0,2,1,1) + # + self.hbox = QHBoxLayout() + self.hbox.setSpacing(0) + self.hbox.setMargin(0) + self.hbox.addWidget(self.number_bar) + self.hbox.addWidget(self.edit) + # + self.bbox.addLayout(self.hbox,1,0,1,3) + # + self.edit.installEventFilter(self) + self.edit.viewport().installEventFilter(self) + # + # Add some shortcuts + QtGui.QShortcut(QtGui.QKeySequence("Ctrl+S"), self.edit, self._saveScript, context=QtCore.Qt.WidgetShortcut) + self.edit.textChanged.connect(self._textChanged) + self.last_saved_text = self.edit.toPlainText() + + + def eventFilter(self, object, event): + # Update the line numbers for all events on the text edit and the viewport. + # This is easier than connecting all necessary singals. + if object in (self.edit, self.edit.viewport()): + self.number_bar.update() + return False + return QFrame.eventFilter(object, event) + + def getTextEdit(self): + return self.edit diff --git a/src/scriptingHelp.py b/src/scriptingHelp.py new file mode 100644 index 0000000000000000000000000000000000000000..832e0cfe06aa4bb5fe6de6f2d8e0a0c3cb2683d6 --- /dev/null +++ b/src/scriptingHelp.py @@ -0,0 +1,168 @@ +# -*- coding: utf-8 -*- + +from __future__ import with_statement + +try: + # PyQt4 4.3.3 on Windows (static DLLs) with py2exe installed: + # -> pythoncom must be imported first, otherwise py2exe's boot_com_servers + # will raise an exception ("ImportError: DLL load failed [...]") when + # calling any of the QFileDialog static methods (getOpenFileName, ...) + import pythoncom #@UnusedImport +except ImportError: + pass + +from PyQt4.QtGui import (QDialog, QVBoxLayout, QLabel, QHBoxLayout, + QFileSystemModel, QMessageBox, QInputDialog, + QLineEdit, QMenu, QWidget, QToolButton, + QFileDialog, QToolBar, QTreeWidget,QGridLayout, + QTreeWidgetItem, QDrag, QTextBrowser,QPixmap, + QIcon, QFont, QColor) +from PyQt4.QtCore import (Qt, SIGNAL, QMimeData, QSize, QDir,QUrl) + +import imp +import os, sys, re +import os.path as osp +import time + +# Import resources (icon) +from scriptingHelp_rc import * + +# For debugging purpose: +STDOUT = sys.stdout + +class HelpListItem(QTreeWidgetItem): + def __init__(self, parent=None): + QTreeWidgetItem.__init__(self, parent) + self.details = "" + def setDetails(self,details_in): + self.details = details_in + def getDetails(self): + return self.details + + +class ScriptingHelpWidget(QWidget): + def __init__(self, parent=None, lib_path=None): + QWidget.__init__(self, parent) + # + self.bold_font = QFont() + self.bold_font.setBold(True) + # + self.treeView = QTreeWidget(self) + self.library_menu = QTreeWidgetItem(self.treeView) + self.library_menu.setText(0,"LIBRARIES") + self.library_menu.setFont(0,self.bold_font) + self.library_menu.setTextColor(0, QColor("Blue")); + self.macro_menu = QTreeWidgetItem(self.treeView) + self.macro_menu.setText(0,"MACROS") + self.macro_menu.setFont(0,self.bold_font) + self.macro_menu.setTextColor(0, QColor("Green")); + # + self.textBrowser = QTextBrowser(self) + self.textBrowser.setMaximumHeight(200) + # + self.icon = QLabel(self) + self.icon.setText(os.getcwd()) + self.icon.setPixmap(QPixmap(":images/DonkiPy.png")) + self.icon.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignTop) + self.icon.setObjectName("icon") + # + self.gridLayout = QGridLayout() + self.gridLayout.setObjectName("gridLayout") + self.gridLayout.addWidget(self.treeView, 0, 1, 1, 1) + self.gridLayout.addWidget(self.textBrowser, 1, 1, 1, 1) + self.gridLayout.addWidget(self.icon, 0, 0, 1, 1) + self.setLayout(self.gridLayout) + + ''' + vlayout = QVBoxLayout() + vlayout.addWidget(self.icon) + vlayout.addWidget(self.treeView) + vlayout.addWidget(self.textBrowser) + self.setLayout(vlayout) + ''' + # + self.treeView.setHeaderLabel("DonkiPy Library") + # + if (lib_path): + try: + idx = sys.path.index(lib_path) + except: + sys.path.append(lib_path) + self.load_all_modules_from_dir(lib_path) + # + self.connect(self.treeView,SIGNAL("itemClicked(QTreeWidgetItem*, int)"),self.itemClicked) + return + def load_all_modules_from_dir(self,dirname): + class_inst = None + try: + mod_files = [x for x in os.listdir(dirname) if x.endswith('.py')] + except: + return + for filename in mod_files: + filepath = dirname + '/' + filename + mod_name,file_ext = os.path.splitext(os.path.split(filepath)[-1]) + if file_ext.lower() == '.py': + py_mod = imp.load_source(mod_name, filepath) + ''' + elif file_ext.lower() == '.pyc': + py_mod = imp.load_compiled(mod_name, filepath) + ''' + if hasattr(py_mod, 'LIBRARY_TYPE'): + if (py_mod.LIBRARY_TYPE == 'TRANSLATOR'): + module_help = QTreeWidgetItem(self.library_menu) + module_help.setText(0,mod_name) + module_help.setFont(0,self.bold_font) + module_help.setTextColor(0, QColor("darkBlue")); + elif (py_mod.LIBRARY_TYPE == 'MACRO'): + module_help = QTreeWidgetItem(self.macro_menu) + module_help.setText(0,mod_name) + module_help.setFont(0,self.bold_font) + module_help.setTextColor(0, QColor("darkGreen")); + else: + module_help = QTreeWidgetItem(self.treeView) + module_help.setText(0,mod_name) + module_help.setFont(0,self.bold_font) + module_help.setTextColor(0, QColor("darkBlue")); + if hasattr(py_mod, 'ATTRIBUTES_READONLY'): + self.fill_help_widget(module_help,py_mod.ATTRIBUTES_READONLY,QIcon(":images/attribute_readonly.png")) + if hasattr(py_mod, 'ATTRIBUTES'): + self.fill_help_widget(module_help,py_mod.ATTRIBUTES,QIcon(":images/attribute.png")) + if hasattr(py_mod, 'COMMANDS'): + self.fill_help_widget(module_help,py_mod.COMMANDS,QIcon(":images/command.png")) + if hasattr(py_mod, 'MACROS'): + self.fill_help_widget(module_help,py_mod.MACROS,QIcon(":images/macro.png")) + return + def fill_help_widget(self,treeHeader,dictionary,item_icon): + for name in dictionary: + newHelpItem= HelpListItem(treeHeader) + newHelpItem.setText(0,name) + newHelpItem.setIcon(0,item_icon); + tokens = dictionary[name].split("|") + details = "<b>" + name + "</b><br>" + if len(tokens) > 1: + details += tokens[1] + else: + details += "Description not available" + details += "<br><br><b>Usage example:</b><br>" + if len(tokens) > 2: + details += tokens[2] + else: + details += "Example not available" + newHelpItem.setDetails(details) + self.treeView.addTopLevelItem(newHelpItem) + return + def itemClicked(self,helpItem,col): + try: + self.textBrowser.setText(helpItem.getDetails()) + except: + self.textBrowser.setText("") + return + + +if __name__ == "__main__": + from spyderlib.utils.qthelpers import qapplication + app = qapplication() + scripting_lib_path = '/home/rob/lavoro/spyder-2.0.12/scripting_library' + test = ScriptingHelpWidget(lib_path=scripting_lib_path) + test.show() + sys.exit(app.exec_()) diff --git a/src/scriptingHelp_rc.py b/src/scriptingHelp_rc.py new file mode 100644 index 0000000000000000000000000000000000000000..cfbc480d7790ef35595575a0eefdd8c3108be5eb --- /dev/null +++ b/src/scriptingHelp_rc.py @@ -0,0 +1,1441 @@ +# -*- coding: utf-8 -*- + +# Resource object code +# +# Created: Fri Sep 27 18:06:55 2013 +# by: The Resource Compiler for PyQt (Qt v4.6.2) +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore + +qt_resource_data = "\ +\x00\x00\x1f\xb0\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x4e\x00\x00\x00\x4d\x08\x06\x00\x00\x00\x08\x3e\x52\xb3\ +\x00\x00\x0a\x43\x69\x43\x43\x50\x49\x43\x43\x20\x70\x72\x6f\x66\ +\x69\x6c\x65\x00\x00\x78\xda\x9d\x53\x77\x58\x93\xf7\x16\x3e\xdf\ +\xf7\x65\x0f\x56\x42\xd8\xf0\xb1\x97\x6c\x81\x00\x22\x23\xac\x08\ +\xc8\x10\x59\xa2\x10\x92\x00\x61\x84\x10\x12\x40\xc5\x85\x88\x0a\ +\x56\x14\x15\x11\x9c\x48\x55\xc4\x82\xd5\x0a\x48\x9d\x88\xe2\xa0\ +\x28\xb8\x67\x41\x8a\x88\x5a\x8b\x55\x5c\x38\xee\x1f\xdc\xa7\xb5\ +\x7d\x7a\xef\xed\xed\xfb\xd7\xfb\xbc\xe7\x9c\xe7\xfc\xce\x79\xcf\ +\x0f\x80\x11\x12\x26\x91\xe6\xa2\x6a\x00\x39\x52\x85\x3c\x3a\xd8\ +\x1f\x8f\x4f\x48\xc4\xc9\xbd\x80\x02\x15\x48\xe0\x04\x20\x10\xe6\ +\xcb\xc2\x67\x05\xc5\x00\x00\xf0\x03\x79\x78\x7e\x74\xb0\x3f\xfc\ +\x01\xaf\x6f\x00\x02\x00\x70\xd5\x2e\x24\x12\xc7\xe1\xff\x83\xba\ +\x50\x26\x57\x00\x20\x91\x00\xe0\x22\x12\xe7\x0b\x01\x90\x52\x00\ +\xc8\x2e\x54\xc8\x14\x00\xc8\x18\x00\xb0\x53\xb3\x64\x0a\x00\x94\ +\x00\x00\x6c\x79\x7c\x42\x22\x00\xaa\x0d\x00\xec\xf4\x49\x3e\x05\ +\x00\xd8\xa9\x93\xdc\x17\x00\xd8\xa2\x1c\xa9\x08\x00\x8d\x01\x00\ +\x99\x28\x47\x24\x02\x40\xbb\x00\x60\x55\x81\x52\x2c\x02\xc0\xc2\ +\x00\xa0\xac\x40\x22\x2e\x04\xc0\xae\x01\x80\x59\xb6\x32\x47\x02\ +\x80\xbd\x05\x00\x76\x8e\x58\x90\x0f\x40\x60\x00\x80\x99\x42\x2c\ +\xcc\x00\x20\x38\x02\x00\x43\x1e\x13\xcd\x03\x20\x4c\x03\xa0\x30\ +\xd2\xbf\xe0\xa9\x5f\x70\x85\xb8\x48\x01\x00\xc0\xcb\x95\xcd\x97\ +\x4b\xd2\x33\x14\xb8\x95\xd0\x1a\x77\xf2\xf0\xe0\xe2\x21\xe2\xc2\ +\x6c\xb1\x42\x61\x17\x29\x10\x66\x09\xe4\x22\x9c\x97\x9b\x23\x13\ +\x48\xe7\x03\x4c\xce\x0c\x00\x00\x1a\xf9\xd1\xc1\xfe\x38\x3f\x90\ +\xe7\xe6\xe4\xe1\xe6\x66\xe7\x6c\xef\xf4\xc5\xa2\xfe\x6b\xf0\x6f\ +\x22\x3e\x21\xf1\xdf\xfe\xbc\x8c\x02\x04\x00\x10\x4e\xcf\xef\xda\ +\x5f\xe5\xe5\xd6\x03\x70\xc7\x01\xb0\x75\xbf\x6b\xa9\x5b\x00\xda\ +\x56\x00\x68\xdf\xf9\x5d\x33\xdb\x09\xa0\x5a\x0a\xd0\x7a\xf9\x8b\ +\x79\x38\xfc\x40\x1e\x9e\xa1\x50\xc8\x3c\x1d\x1c\x0a\x0b\x0b\xed\ +\x25\x62\xa1\xbd\x30\xe3\x8b\x3e\xff\x33\xe1\x6f\xe0\x8b\x7e\xf6\ +\xfc\x40\x1e\xfe\xdb\x7a\xf0\x00\x71\x9a\x40\x99\xad\xc0\xa3\x83\ +\xfd\x71\x61\x6e\x76\xae\x52\x8e\xe7\xcb\x04\x42\x31\x6e\xf7\xe7\ +\x23\xfe\xc7\x85\x7f\xfd\x8e\x29\xd1\xe2\x34\xb1\x5c\x2c\x15\x8a\ +\xf1\x58\x89\xb8\x50\x22\x4d\xc7\x79\xb9\x52\x91\x44\x21\xc9\x95\ +\xe2\x12\xe9\x7f\x32\xf1\x1f\x96\xfd\x09\x93\x77\x0d\x00\xac\x86\ +\x4f\xc0\x4e\xb6\x07\xb5\xcb\x6c\xc0\x7e\xee\x01\x02\x8b\x0e\x58\ +\xd2\x76\x00\x40\x7e\xf3\x2d\x8c\x1a\x0b\x91\x00\x10\x67\x34\x32\ +\x79\xf7\x00\x00\x93\xbf\xf9\x8f\x40\x2b\x01\x00\xcd\x97\xa4\xe3\ +\x00\x00\xbc\xe8\x18\x5c\xa8\x94\x17\x4c\xc6\x08\x00\x00\x44\xa0\ +\x81\x2a\xb0\x41\x07\x0c\xc1\x14\xac\xc0\x0e\x9c\xc1\x1d\xbc\xc0\ +\x17\x02\x61\x06\x44\x40\x0c\x24\xc0\x3c\x10\x42\x06\xe4\x80\x1c\ +\x0a\xa1\x18\x96\x41\x19\x54\xc0\x3a\xd8\x04\xb5\xb0\x03\x1a\xa0\ +\x11\x9a\xe1\x10\xb4\xc1\x31\x38\x0d\xe7\xe0\x12\x5c\x81\xeb\x70\ +\x17\x06\x60\x18\x9e\xc2\x18\xbc\x86\x09\x04\x41\xc8\x08\x13\x61\ +\x21\x3a\x88\x11\x62\x8e\xd8\x22\xce\x08\x17\x99\x8e\x04\x22\x61\ +\x48\x34\x92\x80\xa4\x20\xe9\x88\x14\x51\x22\xc5\xc8\x72\xa4\x02\ +\xa9\x42\x6a\x91\x5d\x48\x23\xf2\x2d\x72\x14\x39\x8d\x5c\x40\xfa\ +\x90\xdb\xc8\x20\x32\x8a\xfc\x8a\xbc\x47\x31\x94\x81\xb2\x51\x03\ +\xd4\x02\x75\x40\xb9\xa8\x1f\x1a\x8a\xc6\xa0\x73\xd1\x74\x34\x0f\ +\x5d\x80\x96\xa2\x6b\xd1\x1a\xb4\x1e\x3d\x80\xb6\xa2\xa7\xd1\x4b\ +\xe8\x75\x74\x00\x7d\x8a\x8e\x63\x80\xd1\x31\x0e\x66\x8c\xd9\x61\ +\x5c\x8c\x87\x45\x60\x89\x58\x1a\x26\xc7\x16\x63\xe5\x58\x35\x56\ +\x8f\x35\x63\x1d\x58\x37\x76\x15\x1b\xc0\x9e\x61\xef\x08\x24\x02\ +\x8b\x80\x13\xec\x08\x5e\x84\x10\xc2\x6c\x82\x90\x90\x47\x58\x4c\ +\x58\x43\xa8\x25\xec\x23\xb4\x12\xba\x08\x57\x09\x83\x84\x31\xc2\ +\x27\x22\x93\xa8\x4f\xb4\x25\x7a\x12\xf9\xc4\x78\x62\x3a\xb1\x90\ +\x58\x46\xac\x26\xee\x21\x1e\x21\x9e\x25\x5e\x27\x0e\x13\x5f\x93\ +\x48\x24\x0e\xc9\x92\xe4\x4e\x0a\x21\x25\x90\x32\x49\x0b\x49\x6b\ +\x48\xdb\x48\x2d\xa4\x53\xa4\x3e\xd2\x10\x69\x9c\x4c\x26\xeb\x90\ +\x6d\xc9\xde\xe4\x08\xb2\x80\xac\x20\x97\x91\xb7\x90\x0f\x90\x4f\ +\x92\xfb\xc9\xc3\xe4\xb7\x14\x3a\xc5\x88\xe2\x4c\x09\xa2\x24\x52\ +\xa4\x94\x12\x4a\x35\x65\x3f\xe5\x04\xa5\x9f\x32\x42\x99\xa0\xaa\ +\x51\xcd\xa9\x9e\xd4\x08\xaa\x88\x3a\x9f\x5a\x49\x6d\xa0\x76\x50\ +\x2f\x53\x87\xa9\x13\x34\x75\x9a\x25\xcd\x9b\x16\x43\xcb\xa4\x2d\ +\xa3\xd5\xd0\x9a\x69\x67\x69\xf7\x68\x2f\xe9\x74\xba\x09\xdd\x83\ +\x1e\x45\x97\xd0\x97\xd2\x6b\xe8\x07\xe9\xe7\xe9\x83\xf4\x77\x0c\ +\x0d\x86\x0d\x83\xc7\x48\x62\x28\x19\x6b\x19\x7b\x19\xa7\x18\xb7\ +\x19\x2f\x99\x4c\xa6\x05\xd3\x97\x99\xc8\x54\x30\xd7\x32\x1b\x99\ +\x67\x98\x0f\x98\x6f\x55\x58\x2a\xf6\x2a\x7c\x15\x91\xca\x12\x95\ +\x3a\x95\x56\x95\x7e\x95\xe7\xaa\x54\x55\x73\x55\x3f\xd5\x79\xaa\ +\x0b\x54\xab\x55\x0f\xab\x5e\x56\x7d\xa6\x46\x55\xb3\x50\xe3\xa9\ +\x09\xd4\x16\xab\xd5\xa9\x1d\x55\xbb\xa9\x36\xae\xce\x52\x77\x52\ +\x8f\x50\xcf\x51\x5f\xa3\xbe\x5f\xfd\x82\xfa\x63\x0d\xb2\x86\x85\ +\x46\xa0\x86\x48\xa3\x54\x63\xb7\xc6\x19\x8d\x21\x16\xc6\x32\x65\ +\xf1\x58\x42\xd6\x72\x56\x03\xeb\x2c\x6b\x98\x4d\x62\x5b\xb2\xf9\ +\xec\x4c\x76\x05\xfb\x1b\x76\x2f\x7b\x4c\x53\x43\x73\xaa\x66\xac\ +\x66\x91\x66\x9d\xe6\x71\xcd\x01\x0e\xc6\xb1\xe0\xf0\x39\xd9\x9c\ +\x4a\xce\x21\xce\x0d\xce\x7b\x2d\x03\x2d\x3f\x2d\xb1\xd6\x6a\xad\ +\x66\xad\x7e\xad\x37\xda\x7a\xda\xbe\xda\x62\xed\x72\xed\x16\xed\ +\xeb\xda\xef\x75\x70\x9d\x40\x9d\x2c\x9d\xf5\x3a\x6d\x3a\xf7\x75\ +\x09\xba\x36\xba\x51\xba\x85\xba\xdb\x75\xcf\xea\x3e\xd3\x63\xeb\ +\x79\xe9\x09\xf5\xca\xf5\x0e\xe9\xdd\xd1\x47\xf5\x6d\xf4\xa3\xf5\ +\x17\xea\xef\xd6\xef\xd1\x1f\x37\x30\x34\x08\x36\x90\x19\x6c\x31\ +\x38\x63\xf0\xcc\x90\x63\xe8\x6b\x98\x69\xb8\xd1\xf0\x84\xe1\xa8\ +\x11\xcb\x68\xba\x91\xc4\x68\xa3\xd1\x49\xa3\x27\xb8\x26\xee\x87\ +\x67\xe3\x35\x78\x17\x3e\x66\xac\x6f\x1c\x62\xac\x34\xde\x65\xdc\ +\x6b\x3c\x61\x62\x69\x32\xdb\xa4\xc4\xa4\xc5\xe4\xbe\x29\xcd\x94\ +\x6b\x9a\x66\xba\xd1\xb4\xd3\x74\xcc\xcc\xc8\x2c\xdc\xac\xd8\xac\ +\xc9\xec\x8e\x39\xd5\x9c\x6b\x9e\x61\xbe\xd9\xbc\xdb\xfc\x8d\x85\ +\xa5\x45\x9c\xc5\x4a\x8b\x36\x8b\xc7\x96\xda\x96\x7c\xcb\x05\x96\ +\x4d\x96\xf7\xac\x98\x56\x3e\x56\x79\x56\xf5\x56\xd7\xac\x49\xd6\ +\x5c\xeb\x2c\xeb\x6d\xd6\x57\x6c\x50\x1b\x57\x9b\x0c\x9b\x3a\x9b\ +\xcb\xb6\xa8\xad\x9b\xad\xc4\x76\x9b\x6d\xdf\x14\xe2\x14\x8f\x29\ +\xd2\x29\xf5\x53\x6e\xda\x31\xec\xfc\xec\x0a\xec\x9a\xec\x06\xed\ +\x39\xf6\x61\xf6\x25\xf6\x6d\xf6\xcf\x1d\xcc\x1c\x12\x1d\xd6\x3b\ +\x74\x3b\x7c\x72\x74\x75\xcc\x76\x6c\x70\xbc\xeb\xa4\xe1\x34\xc3\ +\xa9\xc4\xa9\xc3\xe9\x57\x67\x1b\x67\xa1\x73\x9d\xf3\x35\x17\xa6\ +\x4b\x90\xcb\x12\x97\x76\x97\x17\x53\x6d\xa7\x8a\xa7\x6e\x9f\x7a\ +\xcb\x95\xe5\x1a\xee\xba\xd2\xb5\xd3\xf5\xa3\x9b\xbb\x9b\xdc\xad\ +\xd9\x6d\xd4\xdd\xcc\x3d\xc5\x7d\xab\xfb\x4d\x2e\x9b\x1b\xc9\x5d\ +\xc3\x3d\xef\x41\xf4\xf0\xf7\x58\xe2\x71\xcc\xe3\x9d\xa7\x9b\xa7\ +\xc2\xf3\x90\xe7\x2f\x5e\x76\x5e\x59\x5e\xfb\xbd\x1e\x4f\xb3\x9c\ +\x26\x9e\xd6\x30\x6d\xc8\xdb\xc4\x5b\xe0\xbd\xcb\x7b\x60\x3a\x3e\ +\x3d\x65\xfa\xce\xe9\x03\x3e\xc6\x3e\x02\x9f\x7a\x9f\x87\xbe\xa6\ +\xbe\x22\xdf\x3d\xbe\x23\x7e\xd6\x7e\x99\x7e\x07\xfc\x9e\xfb\x3b\ +\xfa\xcb\xfd\x8f\xf8\xbf\xe1\x79\xf2\x16\xf1\x4e\x05\x60\x01\xc1\ +\x01\xe5\x01\xbd\x81\x1a\x81\xb3\x03\x6b\x03\x1f\x04\x99\x04\xa5\ +\x07\x35\x05\x8d\x05\xbb\x06\x2f\x0c\x3e\x15\x42\x0c\x09\x0d\x59\ +\x1f\x72\x93\x6f\xc0\x17\xf2\x1b\xf9\x63\x33\xdc\x67\x2c\x9a\xd1\ +\x15\xca\x08\x9d\x15\x5a\x1b\xfa\x30\xcc\x26\x4c\x1e\xd6\x11\x8e\ +\x86\xcf\x08\xdf\x10\x7e\x6f\xa6\xf9\x4c\xe9\xcc\xb6\x08\x88\xe0\ +\x47\x6c\x88\xb8\x1f\x69\x19\x99\x17\xf9\x7d\x14\x29\x2a\x32\xaa\ +\x2e\xea\x51\xb4\x53\x74\x71\x74\xf7\x2c\xd6\xac\xe4\x59\xfb\x67\ +\xbd\x8e\xf1\x8f\xa9\x8c\xb9\x3b\xdb\x6a\xb6\x72\x76\x67\xac\x6a\ +\x6c\x52\x6c\x63\xec\x9b\xb8\x80\xb8\xaa\xb8\x81\x78\x87\xf8\x45\ +\xf1\x97\x12\x74\x13\x24\x09\xed\x89\xe4\xc4\xd8\xc4\x3d\x89\xe3\ +\x73\x02\xe7\x6c\x9a\x33\x9c\xe4\x9a\x54\x96\x74\x63\xae\xe5\xdc\ +\xa2\xb9\x17\xe6\xe9\xce\xcb\x9e\x77\x3c\x59\x35\x59\x90\x7c\x38\ +\x85\x98\x12\x97\xb2\x3f\xe5\x83\x20\x42\x50\x2f\x18\x4f\xe5\xa7\ +\x6e\x4d\x1d\x13\xf2\x84\x9b\x85\x4f\x45\xbe\xa2\x8d\xa2\x51\xb1\ +\xb7\xb8\x4a\x3c\x92\xe6\x9d\x56\x95\xf6\x38\xdd\x3b\x7d\x43\xfa\ +\x68\x86\x4f\x46\x75\xc6\x33\x09\x4f\x52\x2b\x79\x91\x19\x92\xb9\ +\x23\xf3\x4d\x56\x44\xd6\xde\xac\xcf\xd9\x71\xd9\x2d\x39\x94\x9c\ +\x94\x9c\xa3\x52\x0d\x69\x96\xb4\x2b\xd7\x30\xb7\x28\xb7\x4f\x66\ +\x2b\x2b\x93\x0d\xe4\x79\xe6\x6d\xca\x1b\x93\x87\xca\xf7\xe4\x23\ +\xf9\x73\xf3\xdb\x15\x6c\x85\x4c\xd1\xa3\xb4\x52\xae\x50\x0e\x16\ +\x4c\x2f\xa8\x2b\x78\x5b\x18\x5b\x78\xb8\x48\xbd\x48\x5a\xd4\x33\ +\xdf\x66\xfe\xea\xf9\x23\x0b\x82\x16\x7c\xbd\x90\xb0\x50\xb8\xb0\ +\xb3\xd8\xb8\x78\x59\xf1\xe0\x22\xbf\x45\xbb\x16\x23\x8b\x53\x17\ +\x77\x2e\x31\x5d\x52\xba\x64\x78\x69\xf0\xd2\x7d\xcb\x68\xcb\xb2\ +\x96\xfd\x50\xe2\x58\x52\x55\xf2\x6a\x79\xdc\xf2\x8e\x52\x83\xd2\ +\xa5\xa5\x43\x2b\x82\x57\x34\x95\xa9\x94\xc9\xcb\x6e\xae\xf4\x5a\ +\xb9\x63\x15\x61\x95\x64\x55\xef\x6a\x97\xd5\x5b\x56\x7f\x2a\x17\ +\x95\x5f\xac\x70\xac\xa8\xae\xf8\xb0\x46\xb8\xe6\xe2\x57\x4e\x5f\ +\xd5\x7c\xf5\x79\x6d\xda\xda\xde\x4a\xb7\xca\xed\xeb\x48\xeb\xa4\ +\xeb\x6e\xac\xf7\x59\xbf\xaf\x4a\xbd\x6a\x41\xd5\xd0\x86\xf0\x0d\ +\xad\x1b\xf1\x8d\xe5\x1b\x5f\x6d\x4a\xde\x74\xa1\x7a\x6a\xf5\x8e\ +\xcd\xb4\xcd\xca\xcd\x03\x35\x61\x35\xed\x5b\xcc\xb6\xac\xdb\xf2\ +\xa1\x36\xa3\xf6\x7a\x9d\x7f\x5d\xcb\x56\xfd\xad\xab\xb7\xbe\xd9\ +\x26\xda\xd6\xbf\xdd\x77\x7b\xf3\x0e\x83\x1d\x15\x3b\xde\xef\x94\ +\xec\xbc\xb5\x2b\x78\x57\x6b\xbd\x45\x7d\xf5\x6e\xd2\xee\x82\xdd\ +\x8f\x1a\x62\x1b\xba\xbf\xe6\x7e\xdd\xb8\x47\x77\x4f\xc5\x9e\x8f\ +\x7b\xa5\x7b\x07\xf6\x45\xef\xeb\x6a\x74\x6f\x6c\xdc\xaf\xbf\xbf\ +\xb2\x09\x6d\x52\x36\x8d\x1e\x48\x3a\x70\xe5\x9b\x80\x6f\xda\x9b\ +\xed\x9a\x77\xb5\x70\x5a\x2a\x0e\xc2\x41\xe5\xc1\x27\xdf\xa6\x7c\ +\x7b\xe3\x50\xe8\xa1\xce\xc3\xdc\xc3\xcd\xdf\x99\x7f\xb7\xf5\x08\ +\xeb\x48\x79\x2b\xd2\x3a\xbf\x75\xac\x2d\xa3\x6d\xa0\x3d\xa1\xbd\ +\xef\xe8\x8c\xa3\x9d\x1d\x5e\x1d\x47\xbe\xb7\xff\x7e\xef\x31\xe3\ +\x63\x75\xc7\x35\x8f\x57\x9e\xa0\x9d\x28\x3d\xf1\xf9\xe4\x82\x93\ +\xe3\xa7\x64\xa7\x9e\x9d\x4e\x3f\x3d\xd4\x99\xdc\x79\xf7\x4c\xfc\ +\x99\x6b\x5d\x51\x5d\xbd\x67\x43\xcf\x9e\x3f\x17\x74\xee\x4c\xb7\ +\x5f\xf7\xc9\xf3\xde\xe7\x8f\x5d\xf0\xbc\x70\xf4\x22\xf7\x62\xdb\ +\x25\xb7\x4b\xad\x3d\xae\x3d\x47\x7e\x70\xfd\xe1\x48\xaf\x5b\x6f\ +\xeb\x65\xf7\xcb\xed\x57\x3c\xae\x74\xf4\x4d\xeb\x3b\xd1\xef\xd3\ +\x7f\xfa\x6a\xc0\xd5\x73\xd7\xf8\xd7\x2e\x5d\x9f\x79\xbd\xef\xc6\ +\xec\x1b\xb7\x6e\x26\xdd\x1c\xb8\x25\xba\xf5\xf8\x76\xf6\xed\x17\ +\x77\x0a\xee\x4c\xdc\x5d\x7a\x8f\x78\xaf\xfc\xbe\xda\xfd\xea\x07\ +\xfa\x0f\xea\x7f\xb4\xfe\xb1\x65\xc0\x6d\xe0\xf8\x60\xc0\x60\xcf\ +\xc3\x59\x0f\xef\x0e\x09\x87\x9e\xfe\x94\xff\xd3\x87\xe1\xd2\x47\ +\xcc\x47\xd5\x23\x46\x23\x8d\x8f\x9d\x1f\x1f\x1b\x0d\x1a\xbd\xf2\ +\x64\xce\x93\xe1\xa7\xb2\xa7\x13\xcf\xca\x7e\x56\xff\x79\xeb\x73\ +\xab\xe7\xdf\xfd\xe2\xfb\x4b\xcf\x58\xfc\xd8\xf0\x0b\xf9\x8b\xcf\ +\xbf\xae\x79\xa9\xf3\x72\xef\xab\xa9\xaf\x3a\xc7\x23\xc7\x1f\xbc\ +\xce\x79\x3d\xf1\xa6\xfc\xad\xce\xdb\x7d\xef\xb8\xef\xba\xdf\xc7\ +\xbd\x1f\x99\x28\xfc\x40\xfe\x50\xf3\xd1\xfa\x63\xc7\xa7\xd0\x4f\ +\xf7\x3e\xe7\x7c\xfe\xfc\x2f\xf7\x84\xf3\xfb\x80\x39\x25\x11\x00\ +\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x2e\x23\x00\x00\x2e\ +\x23\x01\x78\xa5\x3f\x76\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdd\ +\x09\x1b\x10\x06\x29\xe0\xb2\x8b\x24\x00\x00\x14\xee\x49\x44\x41\ +\x54\x78\xda\xed\x9c\x67\x78\x15\x65\xda\xc7\x7f\xcf\xcc\x9c\x9a\ +\x93\x93\x4e\x42\x2a\x90\x84\x44\x3a\x81\x20\xbd\x8b\x08\x76\x3a\ +\x2b\x08\x2a\x16\x40\x11\x65\x79\x15\x65\x61\xb1\xb7\x45\x54\x14\ +\x01\x1b\x22\xeb\xa2\xe8\xb2\x8a\x22\x60\x81\x80\x52\x04\x91\xaa\ +\x80\xa1\xb7\x90\x02\x69\x27\x39\x67\x66\x9e\xf7\xc3\x89\x89\x18\ +\x40\x04\x92\x00\x97\x73\x5d\xf9\x32\x33\x99\x73\x3f\xff\xf9\xdf\ +\xfd\x7e\x46\x0c\x1d\x3a\x54\xda\xad\x16\xfe\x3a\xce\xfe\xd0\x4d\ +\x89\xe6\x2b\x2d\xc1\x9b\xdc\x0b\x19\x91\xf2\x17\x22\x67\x85\x9a\ +\x97\xbc\x25\xcf\xa1\x01\xf8\xdc\xf1\x98\xb5\x9a\xd4\xa0\x34\x12\ +\x29\x05\x00\x42\x48\x40\x5c\xb4\xb8\x49\x6f\x31\xba\x54\x50\x2e\ +\x0a\x61\xa4\x42\x94\xf3\x17\x0c\x14\x40\x20\xa5\xbc\xe8\x89\x77\ +\x51\x00\xa7\x29\xa5\xdc\xd3\xe8\x6e\xa6\xb6\x6d\x49\x61\x91\x82\ +\x10\xe2\x2f\xe0\xfe\x98\x6d\x82\x38\xd7\x76\x1a\x87\x7d\x4d\x62\ +\xf0\x7a\xae\xf3\xb6\xc4\x57\x54\x50\x76\x4d\x9e\xc7\x73\xc1\x30\ +\x15\xaa\x8a\xbc\x35\x0c\x9c\xa4\xc4\x10\x0c\x49\x79\x08\xa1\xf8\ +\x57\x78\xef\x90\xf5\x88\x65\x03\x51\xac\xca\x39\xda\x3a\x89\x94\ +\xa0\x9b\x0a\x0d\x43\x33\xd0\x14\xef\xe5\x07\x9c\x94\x0a\xa1\xf6\ +\xe3\x34\x8f\x5e\x82\x34\xcb\x4e\x9a\xf0\xde\x33\x8b\xd9\x31\xe7\ +\x31\x10\x82\xb3\xa7\x8c\xc4\x94\x0a\x02\x93\xc6\x61\x5f\x33\xb5\ +\x43\x3a\x1d\x9c\x93\xf1\x64\x1d\xf1\x3f\xe7\x72\x02\xce\x90\x82\ +\x36\x91\x1f\x81\x51\xb1\x36\x69\x42\x60\x08\x3c\x74\xc3\xcb\x9c\ +\xd8\xbb\x0b\x79\x96\xa0\x79\x0d\x95\x28\x67\x26\x2f\xb4\x6f\xc1\ +\xa4\xf4\xab\x49\x0c\xfc\x9e\xc7\xee\xdf\xc8\xde\x65\xf3\x51\x34\ +\x71\xb9\x31\x0e\x52\x42\xbe\x03\xb3\xe2\x9c\x10\x20\x0d\xe8\xde\ +\xfe\x18\xc6\x9a\x27\x51\x2d\xea\x69\xc1\x93\x12\x4c\xa9\x60\x51\ +\x4a\xb9\x26\x61\x16\x33\x3a\x27\x52\x27\x70\x33\xaa\xc5\x60\xdd\ +\x0f\x2a\xdf\xad\xb6\x11\xdf\x7d\x20\xa6\x4f\x5e\x66\x8c\x03\x62\ +\x02\x7e\xaa\x74\x5e\x08\xa8\x15\x0b\xe1\x45\x1f\x70\x62\xd7\x56\ +\x84\xa2\x9c\x56\x35\x13\x02\x37\x33\xb9\x55\x0f\x46\x35\xbd\xb3\ +\xe2\x92\x05\x66\xcc\xb2\x11\xde\xac\x3b\xd6\xd0\x28\xa4\x34\x2f\ +\x2f\xe0\x82\xad\x27\x08\xb6\x1d\x39\x2d\xaa\x83\x06\x95\xb0\xfd\ +\xa3\xd9\x28\x1a\x27\xb1\x4e\x4a\x30\xa4\x4a\xcb\xc8\xcf\x98\xd6\ +\xa9\x09\x57\x84\xac\x3a\x89\xb5\x00\x6f\xbd\xe3\x24\xba\x69\x6b\ +\x84\xaa\x55\x49\x78\x53\xc3\x5e\x55\x9c\xde\x73\x1a\x70\xe3\xf5\ +\x06\x07\xd7\x64\x20\x4b\x7c\xbf\xb9\xcb\xcf\xb4\x1b\xea\x4e\x65\ +\x62\xab\xde\x60\xfe\xce\x7f\x08\x58\xf5\x8d\x02\x16\x07\x61\xa9\ +\xad\xaa\x2e\xf6\xac\xd9\x60\xe4\xcc\xf6\x4f\x0b\x80\x96\x2d\x73\ +\xc9\xdb\xbb\x8b\xe0\xba\x29\x80\xc4\xa3\xab\x3c\xd5\xa6\x07\xcd\ +\xc2\x97\x96\x83\x76\x12\xa1\x14\xf8\x60\x81\x0d\x8b\x2d\x80\xd0\ +\xfa\xcd\x31\xab\x48\xf6\x1a\x65\x9c\xcb\x92\x87\x5d\x2d\x3c\x35\ +\x17\xcb\xc0\x48\x6f\x7a\x9c\xe3\xfb\x77\x03\x60\x55\x4a\x78\xaa\ +\xcd\xd5\x34\xab\xb5\xb4\x9c\x65\xbf\xd7\x42\x4f\x21\xac\x59\x2b\ +\x88\x6f\xdd\x0b\x61\x57\xab\x2c\x7d\xab\x51\xe0\x74\xd3\x8a\x29\ +\xcf\x4c\x7a\x8b\xe6\xc5\x9b\x7b\xb8\x4c\x3d\x5f\xa0\x59\xf8\x12\ +\xa4\x71\xea\xd0\x4c\x4a\xc8\xc9\x13\x6c\xdb\x26\x48\xec\x3d\x1c\ +\xc3\x47\x95\xa5\x6f\x35\x0a\x5c\x89\xe1\xc2\x6b\xda\x4f\xab\xaa\ +\x00\x79\x79\x02\x9f\xa1\xd2\x24\xec\x2b\x06\x35\x98\x54\x59\x35\ +\x7f\xcb\x52\x15\x36\x6d\x56\xc9\xf7\xd6\xc5\x9d\xd4\x08\x69\x18\ +\x97\x67\xae\xaa\x9b\x56\x0c\xd3\x72\x5a\x10\x7e\x5c\xa7\x30\x77\ +\x7e\x00\x75\x62\x3c\xfc\x5f\x5a\x1f\xd0\xff\xe0\x81\x56\x78\x67\ +\xae\x95\xf8\x8e\xbd\x30\xf4\x2a\x49\x18\x2e\x0e\xe0\x8a\x75\x1b\ +\x25\x46\xc0\xa9\x2f\x9a\x30\x61\x92\x13\x7b\x50\x34\x63\x07\x2e\ +\xc5\x69\x39\x7e\x4a\x9b\xf6\xfb\x63\xfe\x87\x01\xc4\xb6\xec\x5c\ +\x16\xbb\x89\xcb\x13\x38\x01\x1c\x29\x4e\x3a\xa5\x9a\xee\x3f\x20\ +\xf8\xfe\x7b\x41\xeb\xbe\x37\xd1\xa3\xf1\xb2\x3f\x86\x40\x83\xff\ +\x2d\xd0\xc0\x16\x81\x2b\x26\x19\x51\xc5\x35\xbd\x1a\x05\x4e\x11\ +\xb0\x2d\xb7\x43\x25\x62\x08\x05\xbe\xc9\xd0\xc8\x3a\x16\xc9\x88\ +\x91\x56\x14\xb3\xe0\xac\x02\xab\x97\x5f\xb3\xe3\x8e\x8a\xc6\x15\ +\x53\xb7\x6a\xf5\xb4\xe6\x81\x93\xac\x3f\xd6\x0b\xd4\x0a\x67\x20\ +\x25\x60\x83\x29\x4f\xd8\x48\xb8\xfe\x3e\x7a\xd7\x9b\xc6\xd9\x04\ +\x63\x47\xf6\x08\x36\x6d\x56\xa8\xd3\xe1\x7a\x84\xa6\x56\xbd\xec\ +\x35\xab\xaa\x92\x7d\x05\x09\xe4\x15\xd5\x2e\x27\x88\x50\x61\xff\ +\x4e\xc1\xae\x5f\xc2\xe9\xd2\x3b\x0c\xb7\xe5\xf0\x1f\x56\x96\xa4\ +\x84\x4d\x5b\x55\xb2\xb2\x34\xea\xf5\x1c\x82\xa9\xcb\xcb\x1c\x38\ +\x01\x36\x15\xde\xda\xfe\x7c\x85\x24\x56\x58\xf0\x3f\x0b\x6a\x78\ +\x3d\x5a\xa5\x66\x82\x3c\xb3\xd6\x49\x09\xc2\x02\x2f\xbc\x68\x25\ +\x26\xfd\x06\xb4\x90\xe0\x2a\x49\xea\x2f\xb2\x5c\x15\x14\x61\xf2\ +\x63\x76\x77\xb2\x8b\x62\xc1\x0e\xab\x57\x28\x2c\x59\x66\x23\x30\ +\x2a\x8e\x98\xc8\x22\xfe\xa8\x20\x27\x14\xc8\xcf\x83\x25\xcb\x9c\ +\xa4\xf4\x1b\x8d\x51\x2a\xab\xa5\x67\x51\xe3\xc0\x09\x01\x45\x7a\ +\x30\x3b\xf2\x3b\xd1\xbc\x79\x30\x6d\x3a\xc5\xb1\x62\x4b\x1a\x57\ +\xdc\x78\x27\xf1\x81\x1b\xff\xf8\x01\x36\x18\x34\x2c\x00\x57\x42\ +\x73\x9c\xd1\x49\x50\x0d\x6c\xab\xf1\x24\xff\xd7\x54\xbf\x58\xb7\ +\x32\x6d\xc3\x74\x8a\x93\x5a\xd1\xe6\x86\xd6\x44\xa4\x36\xc2\xb4\ +\x39\xd1\x64\xf1\x19\x33\x05\x04\x7c\xfd\x85\xca\xe7\x5f\x38\x68\ +\x32\xb4\x0f\x96\x00\x77\xb5\x01\x57\x63\x8c\x93\x12\x2c\x8a\x07\ +\x90\x3c\xd8\x6c\x38\x0e\xab\x87\x31\x0f\xbb\x19\xd3\xf7\x73\x5c\ +\xf6\x42\x5c\x6a\x01\x6e\x6b\xce\x69\x73\x52\x80\xa2\x42\x78\xf0\ +\x61\x27\x01\x11\xc9\xd4\xbf\xf9\xae\x6a\x03\xad\x46\x19\x27\x11\ +\x74\x8a\x9e\xc7\xb5\x75\xa6\x11\x1f\xb8\x95\x86\xa1\x2b\x08\xb7\ +\xef\x43\x73\xea\x3c\x71\xff\x0f\xc4\xf7\x7f\x11\xaf\x74\x9e\xbe\ +\x72\x62\x83\xc1\xfd\x03\xf8\x61\x63\x12\x3d\x5f\x9d\x87\xae\xfb\ +\xdb\x89\xd5\xd5\x93\x55\x6a\x82\x69\x52\xfa\x9d\x42\x5e\x69\x14\ +\xf1\xee\xad\x00\x44\x39\x33\xd1\x14\x7f\x32\x9a\xb3\x7d\x39\xc7\ +\xb6\xad\xc7\xc0\x76\x4a\xa6\x01\xdc\x7d\x97\x9d\x4f\x16\x07\x33\ +\x6b\xc6\x7e\xdc\x51\x11\x7e\xb6\x55\x63\x23\x5b\xab\x4e\xc0\x74\ +\xa9\xa0\x9b\xd0\x3c\x22\x83\x06\x21\x19\x0c\x48\x9a\x52\xd9\x6b\ +\x96\xc2\x9a\x15\x27\xc8\x2e\x7e\x80\x7a\xae\xac\x4a\x89\xbf\xd4\ +\x61\xf8\x3d\x4e\xde\x99\x13\xce\xff\x4d\x80\xe1\x43\x8b\x79\xaa\ +\xf7\x04\x92\x87\x3c\x81\x23\xc8\x79\xb9\x01\x27\x91\xa8\x5c\x13\ +\x3f\x93\x01\xc9\x53\x08\xb2\x1e\x2d\x67\xd7\xef\x8d\xbf\x34\x21\ +\x36\x46\x12\xcb\xbe\x4a\xc0\x67\x67\x09\x5a\x75\x0c\x64\xef\xc1\ +\x20\xfe\xf5\x8a\x9d\xb1\xb7\xef\x00\x60\xf9\xcc\x57\xc8\xc8\x2a\ +\xe1\xe3\x63\xaf\xe0\xd3\xab\x67\x84\x42\xab\x16\xd5\x44\xe5\x1f\ +\x2d\xaf\x21\x2d\x7a\x31\xe8\x27\xab\xdc\xef\xd7\x78\xda\x5a\x9b\ +\x02\x5d\x7a\xba\x71\x38\x9d\x7c\xbf\x22\x9b\xb4\x2b\x3d\x48\x8f\ +\xff\x5a\x6c\xac\x89\x75\xdd\x3b\x6c\x59\xd2\x9d\xd4\x1b\xfa\x81\ +\x69\x50\xd5\x13\x4f\x55\x0f\x1c\x0a\x31\xae\x9f\x49\x8b\x5e\x8c\ +\xf4\xf9\x81\x29\x07\x47\xf8\xad\xac\x3c\x9b\xda\x99\x84\x25\x9f\ +\x14\x10\x18\x98\x4f\xa0\x5b\x22\x3d\xbf\xf9\x1f\x09\x57\x77\x2f\ +\x25\xbd\xe5\x60\x9e\xdd\xdd\x82\x03\x85\xf5\x50\xa8\x5a\x0f\xab\ +\x54\x87\x9a\xe6\x97\x46\x9c\xc4\x26\x29\x01\x15\xbe\x5d\xad\xf2\ +\xe6\x9b\x56\x0e\x1d\x3a\x3b\x49\xa2\x6b\x9b\x04\xba\x24\x9c\xc2\ +\x0f\xb8\x5c\x10\x9f\xa4\x73\xe4\xcd\x9e\x68\x05\x3b\xcb\x7e\x47\ +\x5e\xba\xc0\x99\x52\xa0\x0a\xfd\x24\x27\x20\x34\x58\xb3\x5a\xa5\ +\x5d\xe7\x20\xee\x9e\xd4\x81\x7e\x13\x86\x72\xec\x98\xf5\xfc\x5f\ +\x91\x07\x3e\x7c\x7b\x27\x5d\xb8\x15\x5f\x7e\x9e\xbf\x91\x7d\xe9\ +\x35\x6b\xfc\x53\x43\xb1\xae\x1d\xbc\xda\x29\x19\xf9\xdb\xb2\xb7\ +\x0a\xeb\x36\xa8\x28\xa1\x0d\xe8\xf1\xdc\x02\x92\x87\xbd\x84\x74\ +\xc6\x5c\x90\xf4\x0d\x09\xa3\x6e\xf9\x8e\xa5\x7f\xbf\x19\xd5\x22\ +\xaa\x2c\x44\xd1\xaa\x0a\x34\xdd\x54\x49\x08\xdc\xc6\xe4\xf4\x1e\ +\x38\x2d\xf9\x27\x5f\xf6\xc2\xe8\x91\x5e\xb2\x4b\xf2\x29\x8e\x58\ +\x43\xaf\xe4\x77\xa9\xe5\xdc\x0d\x17\x82\x1c\x02\xbe\x5a\xa2\x52\ +\x7a\xe2\x00\x25\x47\x8f\x60\x09\xa9\x75\xe9\x00\x27\xa5\xc0\x65\ +\x39\xc1\x63\xad\xbb\x10\x6c\xcd\x3a\xf5\x4d\x06\x4c\x1e\xb3\x09\ +\xb8\xba\xdc\xc0\x5f\xa8\x23\x39\xc9\x04\xa1\x21\xec\x01\x97\x92\ +\x8d\x93\xa8\x8a\xce\x23\x2d\xaf\x23\xd8\x9a\x45\x75\x8f\xf3\x4a\ +\x13\xe2\x92\x24\xf1\x31\xa5\x78\xb2\x8f\x5e\x2a\xc0\x49\x0a\xbd\ +\x2a\x13\x5b\xf6\xa2\x61\x68\xc6\x19\xe3\xb2\xaa\x2c\x53\x51\x0a\ +\x5f\x7d\x7a\x88\xfd\x6b\x57\x5c\x1a\xc0\x09\x4c\x6e\x6b\x30\x99\ +\xa6\xb5\xbe\xa4\x26\x07\xc7\xa5\x09\x75\x13\x7c\x74\x89\x9a\x81\ +\x51\xea\x41\x5e\x3c\xc0\x49\x0c\x53\xc1\x67\x28\x78\xcb\xfe\x4c\ +\x29\x08\xb7\x1f\xe0\xa6\xc4\xe7\x4f\x3b\xa2\x50\x9d\xac\x53\x14\ +\xe8\xda\xf4\x7b\xb2\xbe\xfd\x18\x45\xbb\xf0\x61\xc9\x9f\x72\x0e\ +\x52\x82\x43\x2b\x24\xd0\x92\x43\xfd\x90\xd5\x24\x04\x6e\x21\xd8\ +\x76\x04\x8f\x1e\xc8\xda\xa3\xd7\xf3\xf3\xf1\x36\x8c\xfc\xdf\x52\ +\x9e\xef\xd4\x96\x90\x30\x6a\x1c\xc0\x7e\x03\x25\x0f\x3d\xf9\x04\ +\x31\xdd\x6e\x41\x5e\x60\x41\xfe\x14\x70\xba\x54\x18\xd1\xe0\x3e\ +\x3a\x45\xcf\x41\x71\xca\xf2\x6a\x06\xc0\x75\x89\xd3\xf8\x25\xb7\ +\x05\x4f\xaf\x7a\x83\x91\x1f\x7d\xc4\x0b\x3d\xfb\x10\x1d\x53\x73\ +\xfa\x2a\xa5\x3f\xbf\x9d\xfe\xcc\x2e\xee\x79\xf7\x4d\xd2\x86\xdc\ +\x86\x34\xcc\x9a\x51\x55\xc3\x84\x0e\xd1\xf3\x50\x1c\x92\xab\x7b\ +\xb8\x19\x3f\xce\xe5\x2f\xba\x4a\x7f\x78\x91\x18\xb4\x9e\xe7\x5a\ +\x35\x23\xef\x98\xc9\xa7\x47\x9e\x28\xaf\xbd\xd5\x94\xba\x4a\x2f\ +\xf4\xbc\x5e\x27\xb2\xe8\xdf\x78\x0b\x0a\x2f\x68\x0a\xf6\xa7\x6d\ +\x9c\x8f\x40\xde\x9e\x6d\x61\xc9\xd2\x60\xd6\xe7\xf4\xaf\x34\x62\ +\x1a\x1c\x0d\xa3\x9a\x0c\x61\xe6\x07\xcd\xf0\x9a\x8e\x73\x56\x55\ +\x59\xb6\xa5\xeb\x7c\xd6\xfa\xab\x87\x1d\x71\xe3\x1a\x0a\xf6\xef\ +\xb8\xa0\xe5\xa6\x3f\x05\x9c\x04\x1c\xf6\x5c\xda\xb5\x35\x08\xa8\ +\x15\x4a\xff\x11\xc9\x27\x15\x6f\x84\xf0\x67\x05\xdd\x3a\x7b\x10\ +\x99\xef\xb1\x28\xf3\x9e\x73\x76\x3f\x42\x81\x23\x47\x05\xe2\x3c\ +\xed\xba\x34\xa1\x47\x97\x02\x3c\x6b\xa7\xa1\x58\x94\x0b\xc6\x3a\ +\xe5\xec\x19\x20\x70\x5b\x8b\xc0\x84\xe4\x64\x93\xc2\xa3\x1b\xb9\ +\x2b\xfd\xe1\x53\x32\xca\xe1\x80\xfb\xfb\x2c\x24\x35\x68\xe5\x59\ +\x67\x04\xbf\x32\x0c\x3b\xe4\x1d\x87\xe7\xa7\xda\xa8\x9d\x10\xc4\ +\xf6\xed\x02\xa1\x9d\x1f\xeb\xe2\x12\x21\xf8\xf8\x02\x8a\x0e\xee\ +\x43\x28\x6a\xf5\x02\xa7\x4b\x41\xa7\x98\xf7\xfc\x73\x1c\x26\x50\ +\xe2\xb7\x6b\xa7\x13\xf6\x6f\x03\x0a\x69\x10\xb7\x96\xdf\xb5\x0d\ +\x4e\x0d\x96\x0a\xc2\x01\x39\xb9\xf0\xe0\xfd\x76\x52\x9a\x86\x30\ +\xfe\xd1\x50\x92\xfa\x3d\x8d\x37\xb4\x4b\xe5\x01\xe9\x3f\x6f\x5f\ +\x78\xe7\x8d\x22\xd6\xbc\xfe\x2c\xaa\xf5\xc2\xa8\xaa\xf6\x67\x6c\ +\x4e\xb4\x73\x17\x25\xc5\x02\x7b\xe0\x6f\x56\x61\x9e\xa6\x10\x69\ +\x87\xbf\x0d\x76\xb2\x79\x8b\x85\x05\xef\x9d\x20\x26\xd6\xaf\xeb\ +\x5e\x1f\x14\x14\x08\x4a\x4a\x04\x05\x85\x82\xcc\x3d\x82\xad\x5b\ +\x14\xe6\xcd\xb7\xb2\x63\x67\x28\xf6\xa8\x3a\x44\x35\x6a\x41\xfa\ +\x80\x31\x38\xa2\x13\x98\xb1\xad\x2b\xaf\xd5\xaa\x5f\xf9\xf9\x1a\ +\xe8\x25\xb0\x61\xa3\x8a\x2b\x40\xd2\xa0\xa1\x59\x69\x38\x47\x4a\ +\x7f\x9f\x02\x05\x34\x2b\x78\xf6\x66\xe0\xc9\xca\xc6\x1a\x14\x5a\ +\x7d\xc0\x59\x14\x93\x77\x77\x3e\xc3\xdb\x73\x83\x71\x67\x4e\x21\ +\x28\x54\xa0\x1b\x70\x55\x57\x83\x9b\xfb\xfa\xc0\xf7\x9b\xfe\x81\ +\x0d\x66\xcf\xb0\xb0\x60\xa1\x9d\xe8\xd6\x43\xb9\xe7\xed\x44\x0e\ +\x2d\x9a\x82\xee\xf3\xa0\x1b\x50\x58\xa8\xe0\x2d\x15\x78\x4d\x17\ +\x6a\x68\x0a\x61\xf5\xd3\x88\xec\xd5\x9a\xee\xf5\x1a\x61\x09\x89\ +\xc5\xe1\x0e\x40\x4a\x89\xe9\x35\x38\x6e\x46\xb1\xbf\xa0\x01\x71\ +\x81\xdb\xfc\xcf\xd7\xfc\x40\xcc\x9e\x69\xe5\xc5\xe9\x76\xb6\x6e\ +\x15\x74\xbd\x2a\x84\x2f\x97\xec\xf1\x6b\xc1\xaf\x80\x69\xfe\x99\ +\x92\x35\x2b\x15\x1e\x7a\xd4\xc9\x8f\x9b\x04\x56\x67\x10\x9a\xc3\ +\x59\xbd\x8c\x13\x02\x4c\xc3\x44\x6b\x3d\x81\x7d\x01\xdd\x39\xb0\ +\x72\x21\xce\xc2\xf5\x1c\x38\xba\x93\x9b\x07\x64\x82\x01\x86\x17\ +\x0e\x1d\x11\x8c\x1e\xeb\xe4\x93\x4f\x83\xa9\x9d\xd6\x99\xb4\x31\ +\x53\x91\x40\x48\xa7\xd1\xe4\x67\x6e\x45\xea\x5e\xac\xc1\x11\x38\ +\xc3\xa2\x50\x9c\x1a\x86\xe1\x0f\x94\x4d\x03\x90\x06\xdd\x63\xdf\ +\x64\xc3\xb1\x9e\x64\x97\xc4\x21\x10\x94\xe8\x2e\x36\xe7\x76\x21\ +\x2e\x68\x1b\x45\xf9\xf0\xd5\x72\x0b\x77\xdd\x1b\x80\xd7\x67\x81\ +\xe0\x56\x74\x7a\x6c\x12\x6d\xba\x2a\xa0\xb7\x04\x05\x4c\x1d\xb2\ +\x73\x04\x19\x2b\x35\xc6\x4d\x70\xb2\x67\x4f\x30\x81\xb1\xf1\x24\ +\xde\x34\x8c\x7a\x37\xdc\x86\xa1\x97\x95\x66\xce\xb3\x27\x21\x06\ +\x0d\xe8\x2f\xbd\x6d\xef\xc7\x8c\xbb\xf2\xac\x3d\xab\x50\x14\x34\ +\x0d\x7a\xd6\x9d\x43\xe2\xa1\x51\x14\x17\x7b\x39\x78\x58\xf0\xde\ +\xfb\x1a\x19\xcb\x25\xce\xb8\xb6\x34\x1d\x32\x9e\xc8\xf4\xab\x30\ +\x4c\xbf\x81\x12\x42\xf8\x5d\xa5\xa0\xbc\xb9\xea\x67\x68\xc5\x56\ +\x72\x81\xc9\xdb\xdd\x22\x01\xf8\x6c\xcf\x48\x3e\xc8\x9c\x48\xb1\ +\xcf\x4a\xe3\xc8\xcd\xb8\x32\x7a\x31\x6b\xa6\x87\x43\x47\x1d\x4c\ +\x7e\xa4\x90\x09\x63\x8e\x73\xf3\x8c\x85\x88\x94\xeb\x09\xb7\xee\ +\xe3\xe1\xc4\x54\x3e\x5d\x64\xf2\xd9\x62\x95\x55\x2b\x05\x85\x32\ +\x85\xf8\x6e\xb7\x10\x95\xde\x93\x5a\xf5\x13\x69\x5b\xe7\x6b\x12\ +\x9c\xeb\x38\x54\x94\xca\x77\xd9\x7d\x31\x7d\xc6\x39\x85\x27\xd2\ +\x5b\x4c\xfe\x7b\xb7\xff\xf9\x7a\x9c\x00\x30\x4d\x74\xaf\x64\xd1\ +\x2f\x43\xd9\xf7\xb9\x95\x8d\x73\x9f\x41\x1a\x5e\xc2\xea\xa6\xd0\ +\x61\xf2\x58\x42\x9b\x77\x40\xea\x26\x86\x51\x26\xdc\x6f\xb7\x06\ +\x56\xea\x70\x9d\x2c\xbc\x21\x2d\x04\xdb\x8e\x32\xa0\xfe\xe3\x5c\ +\x5f\xef\x45\x32\x0e\x0f\x62\xce\x8e\xe7\x39\x1e\xbc\x88\x01\x83\ +\x6f\xe2\xc9\x09\x99\x58\xac\x7e\x73\xe0\xdc\x78\x27\x99\xc7\x83\ +\x21\xbd\x3d\x43\xff\xfd\x15\xeb\xa6\xde\x4d\x78\x5c\x1c\xe9\x7f\ +\x1f\x4d\xfb\xab\xdc\x74\xab\x3d\x83\x48\xc7\x87\xa4\x86\x7f\x5b\ +\x6e\xff\x0e\x1c\x54\x99\x3f\x6f\x2e\x71\x3d\x06\x22\x75\xb3\xea\ +\x55\xf5\x94\xb5\x10\x9f\x41\xfc\x35\x03\xa9\x77\xdd\x40\x84\x04\ +\x53\x80\xe1\xa3\xfc\x6d\x9e\xcb\x1b\xf5\x1a\x8e\x93\xf2\xe2\x1e\ +\xf1\xb3\xe8\x11\x37\x8b\x52\x19\x88\xcd\x51\xe0\xb7\x63\x65\xe0\ +\xc7\x45\x17\xf1\xc3\xfe\x9f\x09\x4f\xeb\x48\xf3\x76\x61\x8c\xea\ +\x3f\x9c\xd6\xd1\x0b\x89\xb1\xf5\xc7\xaa\xe6\x43\xd9\x40\xbb\x5e\ +\x04\x9b\xb7\x2a\x2c\x5e\x62\xe5\xa3\x8f\x15\x36\xed\x78\x9c\xba\ +\xd7\x0c\xc4\xab\x9f\xbb\xc2\x9e\x57\x05\x58\x08\x81\xd4\x0d\xbc\ +\x7a\x45\xfb\xea\x5c\x01\xfb\xd5\x0c\x1c\x2b\x89\xa7\x96\x73\x4f\ +\xf9\x1e\x5f\x51\x16\x34\xd9\xcc\x82\x93\x5b\x82\x80\x69\x4a\x4a\ +\x8a\x74\xfa\x24\xbe\xc0\xf0\x06\xe3\xfc\x53\x10\x4a\x59\x90\x25\ +\x61\xfa\x34\x2b\x6b\xbe\xb7\xf0\xde\x7f\xec\xa8\xaa\x86\x24\x80\ +\x3a\x9d\xfa\xd1\xf3\x81\x87\xf0\x95\x9a\xd5\xe3\x1c\xce\xc4\x3c\ +\x71\xb2\xee\x9d\xd7\xb3\x7e\x39\x91\x46\xc3\xb0\x15\x60\x81\xbd\ +\xbb\x04\xef\xce\xb3\xb2\x62\x85\xca\x2d\x83\x4a\xb9\x75\xa8\x51\ +\x29\xa0\xd6\x4d\x2b\x1d\xa3\xdf\xe0\x97\x5d\xb0\xe5\x27\x0b\x2b\ +\x57\x29\x2c\xfb\x52\x63\xe3\x26\x17\x96\x88\x54\x42\xea\xa4\xd0\ +\xb0\x7f\x03\x6a\x35\xef\x4c\x68\xfd\xa6\x48\x15\x8c\x52\xf3\xbc\ +\x07\x74\x2e\x82\xf9\xb8\x93\xb3\x93\x7d\x85\x8d\xf1\x14\xc3\x1d\ +\xa3\x02\xf8\xf4\x33\x0b\xf9\x05\x6e\x1a\x0f\x1a\xc7\xcc\xcc\x44\ +\x56\x8c\x7f\x9c\xd9\x4f\x7d\x07\xa2\x42\xc5\x1c\x5a\x01\x8f\xae\ +\xcd\x60\xcb\x4b\x23\xd8\xb2\x6c\x29\xb5\xd3\x7a\x10\xdf\xf5\x46\ +\x7a\xdd\xd7\x1a\xd5\xee\x42\x73\x04\xe0\xdf\xb7\x29\xd1\x75\x13\ +\xe9\x3b\x3f\xad\xb8\x28\x81\x03\x58\x95\x3d\x9c\x27\xc6\xed\x21\ +\x7f\xd7\x72\xe2\xbb\x5f\x4d\xf7\x81\x0f\x20\xec\x76\xa4\x01\x87\ +\x8b\x7a\x32\x78\xca\x28\x5e\x1d\xf3\x3a\x21\x0e\x89\xd7\xe7\x1f\ +\xc0\x2e\xf5\x59\x49\xbd\x7f\x2e\x8d\x1e\x04\xdd\xf4\x87\x24\xa6\ +\x6e\x56\x78\xec\xdf\xcc\xcd\x5d\xa8\x44\xff\xa2\x02\x4e\x08\x49\ +\x89\x07\xda\x8c\x99\x84\x51\x52\x84\x16\xe0\x46\x9a\x26\xa6\xd7\ +\xef\x6c\xec\x0e\x28\x4e\x7f\x8d\xbb\xe6\xb6\xe1\xe9\x6b\x6f\xe7\ +\x8b\x65\x36\x2c\x2d\xed\x20\x04\xba\xd7\x44\x07\xff\xc6\x10\x21\ +\x4e\xe9\xb1\x2f\xda\x9e\xc3\x05\xb1\x97\xc2\x6f\x2b\x55\x87\x0b\ +\x69\x9a\x95\x58\xa2\x08\x03\xa3\xfe\x50\xfa\xbf\xf1\x05\x87\x3d\ +\x69\x44\xb7\xec\x5c\x1e\x26\x89\x0b\x62\x67\x2f\x51\x55\x3d\x1b\ +\x4f\x6e\x1a\x06\x09\x1d\xbb\x52\xaf\x4b\x57\x74\x1f\x48\xd3\xa8\ +\xf6\xaf\xe3\x9c\x11\xb8\x48\x47\x26\xed\x6a\xff\x07\x53\xaa\x48\ +\x04\x5e\xd3\xce\x81\xc2\x06\x6c\xce\xe9\x56\xb9\x94\xa4\xe5\x73\ +\x5d\x9d\xa9\x24\xba\x37\x90\xe5\x49\xe0\x93\x3d\x63\xc9\xf2\xd4\ +\x05\x20\xcc\x7e\x80\xb6\x51\xf3\x51\x85\xce\xf2\x43\x43\xc8\x2b\ +\xad\x4d\xe3\xb0\x2f\x49\x74\xaf\x47\x08\x49\xb1\xee\x66\xe9\xfe\ +\x11\x74\x8d\x79\x0b\x97\x25\x0f\x43\x6a\x2c\xda\x7b\x1f\x4d\xc3\ +\x96\x92\x10\xb8\x19\x80\x35\x47\x6f\xe2\x70\x71\x32\x16\xa5\x84\ +\x1e\x71\x33\xb0\xaa\xa5\xe5\x1f\xb2\x52\x84\xc1\x9e\x82\xa6\x6c\ +\x38\xd6\x0b\x80\x28\xe7\x2e\xae\x8c\xfc\x18\x51\xe6\x82\x4d\xa9\ +\x72\xb8\x38\x89\x75\x59\x37\x94\xcb\x9b\x1a\xb2\x92\x2b\x82\x57\ +\x22\x51\xd8\x92\xdb\x99\x02\x5f\x18\xed\xa3\xde\xc7\x44\x65\xe7\ +\xf1\x2b\xd9\x92\xdb\xe5\xdc\x81\xbb\xbe\xee\xbf\xb8\x26\xe1\x35\ +\x90\x65\xa9\x56\xd9\x6c\x46\x4e\x81\x83\xc9\xdf\xcc\xe1\xa0\xe5\ +\x66\x00\x1a\x84\xac\xe0\xd1\x96\xbd\xb0\x6b\x1e\xbc\x3e\xb0\x5a\ +\xa0\x77\x9d\xe9\x4c\x5b\x36\x92\xe5\xbe\x97\x69\x55\x6b\x21\xc3\ +\x52\xff\x0e\x40\x33\x1e\xe3\xe1\x4d\xbb\xe9\x93\x36\x91\x26\x91\ +\x6b\xfc\x4b\x93\xb0\x65\x75\x26\xb7\x77\x7b\x09\x9b\xc5\x3f\x64\ +\xf2\xe5\xbf\x97\x33\x68\xd4\x26\x92\x22\xfd\x03\x86\x9e\xf5\x2f\ +\xb1\x47\xfd\x81\xc6\xf5\x36\x31\x3c\x75\x1c\x8a\x72\x72\x5c\x72\ +\xe0\xb0\x95\xb5\x07\x72\xd0\x6c\x4e\xba\xd5\x7e\x95\x3e\xf5\xa7\ +\x55\x24\xfc\xc2\x2f\xbf\x34\x05\x93\x96\xcf\x65\x6b\xc9\x40\x86\ +\xc5\xdf\x4a\xfd\xe8\x3d\x00\xbc\xfb\x71\x14\xce\x7a\x1d\xe9\x93\ +\x32\x1f\x80\x4d\x3f\xbb\xd9\x92\x9b\x77\xee\x36\xee\x8d\xed\x2f\ +\xb2\x68\x4d\x03\x10\x10\x9b\x04\x6d\x07\x76\xe4\xfd\x05\x56\xc2\ +\xdc\x1e\x9e\xe9\xde\x8f\xa3\x3f\x7c\x81\xcb\x92\xc3\x3f\xd2\x7b\ +\x62\xd7\x3c\x8c\x18\x09\x0d\xda\xc5\xd2\x67\x74\x3a\x52\xc2\x7d\ +\xdd\x5e\xc5\x5c\x7d\x2f\x9f\xef\x1b\xc5\xf2\x0d\xfe\x6d\x47\x8d\ +\x53\x8a\x69\x91\x7d\x2d\x0f\x2f\x79\x97\x99\xf3\x22\x11\x40\x7a\ +\x07\xc1\xda\x3d\x57\xf2\xfc\x82\xeb\x00\xf8\xc7\x14\x58\xbb\xf3\ +\x0a\x8e\x14\xc4\x82\x84\x61\x77\xc0\xd3\xb3\x1b\x81\x10\x6c\xcd\ +\xed\x44\xaf\x49\x8f\xd2\x7f\x4c\x73\x0a\x0a\x05\xeb\x37\x40\x93\ +\x6b\x3b\xd0\xf3\x8e\x76\xe5\x45\xbb\x39\x9b\x1f\xe1\xe0\x21\x95\ +\x63\xd9\x70\x75\xdf\x50\x5a\xf5\x4e\xe1\xdd\xb9\x7e\xe7\xd3\x3b\ +\x70\x18\x16\xa5\x84\xb1\xef\xff\x93\x0d\x3f\x6a\x78\xbd\xf0\xdf\ +\xcf\xdd\xbc\xb5\x6e\x2c\x48\x98\xff\x21\xf4\x19\xd3\xf6\xfc\x9c\ +\x83\x29\x35\xb4\x5a\x69\x00\x64\x1d\x77\x13\x75\xeb\xd7\xcc\x0f\ +\xf0\xb0\x75\x77\x04\x4e\x27\x34\x2b\xb8\x8d\x8e\xd1\xf3\xb0\xaa\ +\xa5\x7c\xfe\x05\x7c\xf4\x6d\x6b\x9a\xfc\x73\x2f\xb2\xf7\x6a\xa6\ +\xaf\xb8\x0f\x04\xdc\xd5\x7e\x26\xc5\x59\x7b\xb1\x45\xb7\xf6\xe7\ +\xa2\x06\x3c\x30\x78\x1d\x42\x96\x10\xd8\xec\x56\x00\x8e\xe4\xba\ +\x89\x69\xdb\x17\x7b\x6a\x5f\x00\x8e\x65\xc3\xf4\x67\xf3\x68\x97\ +\xf8\x2d\xfd\x6f\x81\x1f\x1c\xd3\x68\x3e\x7e\x31\x36\x77\x38\xa6\ +\xd4\x70\xb6\x9d\x4c\xed\xbe\xef\x80\xe2\x5f\x78\xd2\xa8\x6f\xa8\ +\x3f\x7a\x19\x5a\xd9\xac\x88\xea\x0c\x43\x71\x45\x62\xf8\x80\x06\ +\x63\x88\x1d\xbd\x8d\x5d\xc9\xcb\x30\x0c\x08\x0c\xf0\x91\xf3\xe3\ +\x42\x6c\x57\xdc\xc2\xc7\x59\xd3\xb1\x58\xa1\x63\x3b\x9d\xc1\x1d\ +\x97\x80\x80\xc7\x67\xa7\xd1\x70\xf4\xc2\x0b\xe0\x55\x4f\x51\x7a\ +\xfd\xb1\x60\x00\x48\x68\x5a\x3f\x97\x28\xcd\xbf\xfb\xe5\xa7\x9f\ +\x20\xed\xde\xb7\xca\xef\xd9\x6e\x8e\x40\x48\xe8\xd0\x46\x27\x7f\ +\xdf\x16\xa4\x34\x29\x2a\x82\x19\x73\x82\x08\x0e\x82\x66\x39\x7d\ +\x50\x54\xad\x52\xce\x25\x25\x4c\x7c\x08\xae\x8a\x9b\xcd\xd6\xad\ +\xb0\x23\xec\x25\x12\x7b\x8d\x3e\x27\x03\xee\x72\xc1\x2d\x5d\x33\ +\x18\x9c\x3c\x91\xe1\xf5\x47\xa3\xaa\xb0\x77\x2f\xf8\xf0\x17\x32\ +\xb7\x78\x6f\x63\xe5\xfa\x70\x6e\xb9\x36\x93\x1b\xe3\x1f\xe3\xfd\ +\xf9\xe0\x6a\xff\xcf\xca\x72\x5d\xa8\x70\xc4\x66\xf3\x87\xee\xde\ +\x52\x03\xdd\x28\x33\xd0\x1a\x04\x46\xd7\xaf\x28\x7c\x6a\x06\x12\ +\xf0\x7a\x41\xf7\xf8\xf7\x9b\x6a\x16\x98\xfe\x5e\x3d\x7e\x3e\x58\ +\x9b\x87\x46\xec\xa4\x78\xff\xf7\x95\x4b\x2f\x02\x42\x42\x20\xff\ +\x04\x34\x6a\x08\x0f\x74\x7e\xea\x9c\x3d\x5f\x80\x0b\xfe\xd6\x71\ +\x19\x37\xd6\x79\x92\x58\xd7\x4f\xfc\xbc\x03\xee\x1c\x1f\x43\x58\ +\xe3\xab\xca\x1a\x42\x0a\x2f\xfe\x38\x87\xd0\x30\x70\xda\x75\x9e\ +\x9f\xdb\x82\xa8\x16\xbd\x2e\x4c\x1c\x67\xca\xca\xb7\xb4\x89\xfe\ +\x2f\x12\xf8\x32\xc3\x4e\x66\x7e\x73\x00\xae\x4c\x87\x82\x03\x15\ +\x9f\xfb\xe9\x16\xf3\x06\x42\xc0\xe2\xa5\xa0\x39\x02\x41\xfa\x2d\ +\xb4\xc3\xaa\x33\xed\xa7\x4f\xb1\xdb\x61\x60\xbb\x25\xbf\x23\xb7\ +\x82\x00\x26\x4e\x81\x6b\x27\x8e\xe1\xc8\x31\x85\xa1\x37\x1d\x26\ +\x28\x73\x62\x25\x19\x8c\xb2\xaf\x47\x9c\xa9\x17\x91\x93\x03\x83\ +\x46\xc6\x73\xdd\xa8\x4e\x74\xbc\xad\x37\x37\x3f\x3b\x85\x96\x8f\ +\xef\x3a\xf9\x37\x6b\xf7\xe0\x87\xad\x41\x7e\xef\x7f\xf3\x7f\x2e\ +\x4c\x00\xac\x60\x50\xcb\x79\x00\x80\x4e\xed\x75\xae\x8a\x9b\xc9\ +\xeb\x9d\x12\xa8\xed\xda\xcf\xee\xdd\xf0\xe5\xba\x04\x56\xe6\x8e\ +\xa2\xd0\x63\xa1\x75\x2b\x78\x20\xb9\x2d\x29\xc1\xdf\x32\x34\x65\ +\x3c\xd7\xd6\x7d\x19\x29\xe1\xc1\x89\x6e\xdc\xf1\x57\xe0\xb6\xe5\ +\x22\x04\xb4\xbf\xb2\x90\x63\x7a\x43\x16\x6f\x48\xc7\x6e\xaf\x1c\ +\xfe\x00\x44\x46\x40\xf8\x35\xff\xe2\xed\x0d\x0f\x22\x25\x8c\xed\ +\xfc\x1c\xc1\xd6\x8a\x4f\x09\x5d\x11\xe2\xdf\x27\xa1\x2a\x26\x41\ +\x41\xd0\x30\xf4\x1b\xc2\xec\xfb\x2b\x42\x05\x51\x8a\x45\xf1\xa1\ +\x08\x48\x6a\xdb\x9e\xb0\xbe\x1f\x13\x35\xf0\xbf\xa4\xf6\x7d\x04\ +\xc5\x52\xd1\xad\x09\xb1\x1d\x22\x2d\xe2\x73\x82\x43\xfc\x2f\xa1\ +\x71\xdd\x03\xb8\x2c\x39\xe7\x5f\x01\x1e\xdd\x78\x38\x5d\x63\xe7\ +\x54\xd8\x1f\x40\xd7\x61\xed\xf7\x30\xf8\x0e\x07\xf1\xc3\x17\x11\ +\xd1\xb0\x13\x61\xea\x76\x1e\xa8\x9b\x46\x6a\x92\xb7\x3c\x70\x3f\ +\x7a\x14\xc6\x8c\x83\x4d\xda\x64\xfe\x3e\xde\xc5\xb0\xd4\x71\xe5\ +\xc9\xf9\xb4\xf7\xd3\xd8\x18\xf1\x29\xb3\x3b\x47\xa3\xaa\x10\x7b\ +\x85\x9b\x7e\xb3\xbe\x61\x6a\xfb\xb4\xf2\xf2\xd2\xd0\xc7\x07\xa0\ +\xb7\x9a\xc5\xd4\xe6\x11\x44\x45\x94\xf2\x73\xa6\x93\x91\x8b\x57\ +\xd2\xa1\x65\x16\x93\x5b\xf5\x2c\x0f\x63\x7e\xcd\xac\x4e\x14\x68\ +\x0c\xfd\xf2\x38\xaa\xcd\xc1\x90\xa4\x31\xdc\x94\xfc\x4a\x39\x23\ +\x57\x6f\xae\xcd\x73\x07\x0f\x54\x5a\xdf\x13\x2d\x5a\x90\x1a\xb1\ +\xb1\xa2\x84\x25\x60\xd5\xc6\x28\x9e\xce\xfc\x09\x8b\x23\xf0\x8c\ +\x15\xe0\x33\x02\xe7\xb2\xe4\x90\xbd\x78\x3c\x39\x3f\xaf\x46\x08\ +\x7f\x33\x57\x17\x01\xf8\x42\xda\x53\xbb\xf3\x28\x02\xa2\xea\x55\ +\xb0\xd3\xb3\x17\x73\xdd\x23\xb8\x4f\x7c\xc2\xbe\xdd\x85\x1c\xf6\ +\xb6\x20\xbc\xc7\xd3\x44\x34\xe9\x8a\x43\xcb\xe7\xe0\xbc\x81\x78\ +\x72\xf6\xa2\x08\x85\x3c\x99\x42\xfd\xe1\xef\x10\x69\x2c\x21\x77\ +\xd1\xdd\x2c\x5f\x57\x8b\x2e\xcf\x6f\xa0\x28\xe3\x61\xb2\x7f\x5c\ +\x84\xa2\x68\xe4\x6a\xad\x69\x78\xfb\xeb\x04\x96\xac\xe3\x97\x79\ +\xa3\x38\x71\xc2\x24\xe2\x86\x99\x44\x24\x37\xc6\xb3\x6a\x02\x59\ +\x1b\x17\x23\x84\x02\x42\x20\xa5\x41\x89\xee\xa4\xce\x5d\x19\xa8\ +\x56\x3b\x36\x7d\x1f\xbb\x67\xf5\x2e\x33\x9b\x12\x8f\x35\x91\x7a\ +\xb7\x57\xf6\x94\xd6\x13\xdf\xb2\x67\xde\x9d\x15\x1d\x70\x69\xe0\ +\xb1\x24\x12\x3f\x78\x2e\x16\xa7\xfb\xdc\x81\xfb\xeb\x38\x3d\x70\ +\xca\x5f\x50\x9c\x73\xae\x2a\x28\x3d\xb4\x0d\xbd\xc4\xfb\x17\x1a\ +\x67\xc3\x38\xbd\x14\xd3\x5b\x82\x76\x3c\xbf\x80\xac\xa5\xd3\xe1\ +\x12\xf8\x68\xf1\xc5\x72\x28\xaa\xc6\xff\x03\x17\xfb\x45\xfd\xac\ +\xc9\x05\x58\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x0f\x46\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x3c\x00\x00\x00\x3c\x08\x06\x00\x00\x00\x3a\xfc\xd9\x72\ +\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\ +\x00\x00\x0e\xfd\x49\x44\x41\x54\x68\x81\xed\x9a\x79\x74\x54\x65\ +\x9a\xc6\x7f\xb7\xf6\xaa\x54\xa8\x4a\x2a\x49\x25\x90\x10\x42\xc2\ +\x62\x90\x2c\x30\x46\x04\x69\x60\x50\x6c\x40\xda\x15\x69\x06\x0e\ +\xd8\x0c\x2a\x0d\x08\x04\x41\x41\x44\xdb\xa3\x03\x0e\xcc\x68\xeb\ +\xd0\x76\xe3\x34\x42\xd3\x83\x67\x0e\x47\xba\x71\x41\xa1\xa7\x15\ +\x10\x69\xc1\x20\xb2\xa8\x40\xd4\x40\x12\x92\xd4\x92\x3d\x55\xd9\ +\xab\xee\xfc\x71\xeb\x26\xb7\x2a\x55\xd9\x48\x9f\x71\xce\xf1\x3d\ +\xe7\xe6\xa6\xbe\xad\xde\xe7\x7d\x9e\xef\xfd\xbe\xfb\xd5\x85\x1f\ +\xed\x47\xfb\xd1\x7e\xb4\xff\x47\xa6\xee\x65\xbb\x38\xa0\x71\x00\ +\xbf\xd7\x08\x2c\x05\x16\x03\x5e\xa0\x78\x00\xc7\xbe\x21\x33\x01\ +\xbf\x01\x2a\x81\xa4\x01\x1a\xd3\x0c\x14\x00\x62\xe0\x6a\x01\xc6\ +\xf5\xa2\x9f\x01\xb8\x17\xb8\x1b\x50\x0d\x90\x2f\x41\x96\xa7\xd5\ +\x08\x57\x5e\x5c\x7b\x8b\xb8\xef\x95\xe9\x22\x70\x18\x10\x06\x60\ +\xdc\x1d\x48\x40\x2f\x00\xab\x81\xcd\xc0\xbe\x1e\xfa\x64\x00\xdf\ +\xd1\x19\xa4\x37\x07\xc0\x8f\x0e\xd3\x00\xbf\x9a\x91\x6b\x6c\xaf\ +\xff\x7d\x9e\xe8\x2f\x79\x59\xf4\x97\xbf\x2c\xce\x9b\x9d\x2a\x02\ +\x2b\x7a\x39\x86\x19\x58\x08\xec\x01\x3e\x46\x0a\xd6\x1f\x80\x57\ +\x80\x56\xe0\x73\x60\x2a\x12\x10\x13\xf0\x38\x10\xd3\x8d\x3f\xe7\ +\x91\x80\x5e\x42\x52\xdc\x77\x40\x76\x9f\x91\xd1\x95\xb1\x51\x82\ +\x20\xec\xdd\xb5\x7e\x54\xde\xc3\x93\x87\x23\xa8\x92\xc1\x18\x8d\ +\x98\x39\x82\xfa\xea\x6b\x64\x4e\xfd\x75\x53\xb9\xab\x39\x07\x28\ +\x8c\x30\x9e\x16\x58\x03\x3c\x15\x17\x17\x6f\xbb\xeb\xa7\xb3\xb1\ +\xc6\xc4\x50\x53\x5d\x8d\xdb\xe5\xa4\xf0\xdb\x2b\x94\x96\x48\xd3\ +\xd5\xef\xf7\x2b\xfb\xd5\x01\x2e\xe0\x3a\x50\x06\x38\x15\xf7\x0c\ +\xe0\x79\x60\x3b\xb0\x01\xf0\x03\x83\x81\x25\xc0\x8b\x37\x02\xf8\ +\x76\x8b\x59\xff\x97\x3f\xed\x59\x66\x9c\x36\x21\x17\xa1\xe8\x14\ +\xb4\xf8\xa1\x09\xc4\xa1\xc9\x90\x98\xc0\xb1\x63\x7f\x65\xfa\xfc\ +\xb7\x0b\x44\x91\x89\x40\x7b\xc8\x58\xa9\xc0\x9f\xad\xd6\x98\xdc\ +\x0d\x4f\x3f\xc7\xbc\x9f\x2f\x40\xaf\x37\x04\x35\xd8\xbd\x6b\x27\ +\x0e\x67\x05\x4f\x3e\xb5\x99\x4a\xb7\x0b\xa7\xd3\x81\xd3\xe5\xc4\ +\xe9\xa8\xc0\xe5\x74\xe0\x74\x39\xa4\xff\x5d\x2e\x9c\x8e\x0a\xdc\ +\x6e\x17\xed\xed\x41\x5f\xe3\x0d\x04\xc5\x09\x78\x90\x02\x2f\x7f\ +\x2e\x03\x1c\x40\x79\x20\x80\x61\x4d\xa3\xf8\xbf\xa0\xa1\xb1\xf5\ +\xfb\xa8\x28\xe3\xcd\x98\xe2\x10\xed\x23\x11\x1c\x97\xc1\x07\x42\ +\x49\x39\xa2\x35\x9a\xa9\x53\x7e\xc2\xaa\xc5\x97\x6e\x79\x75\xcf\ +\xd7\xcf\x00\xbf\x52\xf4\x4d\x06\x3e\xbd\x75\xc2\xc4\xe4\xdf\xfe\ +\x6e\x37\x89\x49\x83\xc3\x7e\x99\xdf\xef\x67\xc2\x84\x49\xa8\xd5\ +\x6a\xec\x89\x49\x24\x26\x75\xe6\x41\x01\x40\x10\x82\x3e\xfb\xfd\ +\x7e\xee\x9c\x7e\x3b\xcb\x57\xae\xc6\x62\xb1\xe0\x76\xb9\xa3\x2a\ +\x1c\xe5\xa3\xdc\x2e\xd7\xa8\x8a\xf2\x32\xdc\x6e\xd7\xac\xf2\xf2\ +\x32\x2a\x2b\xdd\xb4\xb6\xb6\x2a\xbf\xaa\x06\x69\x1a\x6d\x05\x2e\ +\x2a\x2b\x42\x25\x9d\x9d\x96\x62\x2d\xb8\x78\xf2\x65\xad\xc9\x1c\ +\x8f\x50\xf4\x29\xd4\xd7\x40\x13\xa0\x31\x21\x66\x8f\xa2\xd9\xeb\ +\x24\x67\xfa\xbf\xf9\x0a\xaf\x79\x26\x22\xcd\x45\x80\xfd\x49\x83\ +\x87\xcc\x3d\x71\xf2\x2c\x26\x93\x29\x52\x70\xf9\xf0\x83\x77\xb1\ +\x27\x26\x61\x19\x64\x61\x68\x6a\x2a\x7a\x9d\x21\xc8\x03\x41\xe1\ +\x91\x10\xf8\x7b\xcf\x9c\xbb\x38\xf8\xde\x61\x54\x42\x70\x43\x81\ +\xe0\xc6\x55\x6e\x37\x2e\xb7\x8b\xe2\x6b\x57\x39\x70\x60\x3f\x7f\ +\xfe\xd3\xdb\x20\xe5\x8b\x79\xc0\x41\xb9\x6b\x68\x7a\x3f\x7f\xb5\ +\xb4\x76\xf3\x9a\x0d\x3b\x41\x6c\x47\x4c\x1e\x0f\x3a\x0d\xe8\x81\ +\xd6\x46\x84\xd2\x72\x0c\x51\x89\xec\xff\xed\x03\x6a\xad\x46\xf8\ +\x2f\x20\x0a\x18\x0d\x3c\xf0\xe8\x63\x2b\xba\x80\x15\x90\x48\x93\ +\xaf\xdc\x9c\xf1\x6c\xda\xb8\x0e\xd1\xe7\xe5\xcc\xe7\x27\x83\xea\ +\x3a\x2e\x04\x84\xc0\x07\x41\x80\xb1\x59\xd9\x12\x58\x01\x04\x41\ +\xaa\x93\xdb\x74\xf6\x81\xf8\x84\x78\xc6\x8c\x19\xc3\xac\xd9\x73\ +\xd8\xf5\xe6\x1f\x59\xbe\xfc\x71\x00\x1d\x52\xb2\x8c\x93\x7d\x0a\ +\xb7\xf1\x38\x75\xf6\x62\xd9\xb4\xbc\x6c\x5b\xea\x88\xd1\x99\xa0\ +\xd1\x21\x34\x3a\xa5\x1c\x59\xd3\x08\xd6\x68\xec\x83\xcd\xf8\x9a\ +\x1d\xb6\xe3\x05\x95\x56\xe0\xf6\x41\x16\xcb\x3f\xfc\xe6\xf5\x37\ +\xd1\xe9\x74\x41\xce\xa3\x00\x20\x08\x02\x47\x0e\x1f\x62\xd2\xc4\ +\x3c\x6c\x36\x1b\x71\x71\x71\x58\x63\xe2\x82\xea\x3b\x40\x28\x02\ +\x75\xf5\x5a\x11\x05\x9f\x9f\xe6\x95\x97\xb7\x61\xb7\xdb\x49\x1d\ +\x36\xac\x43\xf9\x82\x22\x08\x84\x04\xc1\x64\x32\xb1\x6f\xdf\x5e\ +\x90\xe8\xfa\x1e\x69\x19\xf4\x87\x5b\xc0\x7d\xc0\xe2\x87\x57\xed\ +\xf1\x54\xbb\x8b\x21\x26\x15\x06\x25\x48\xb1\xd2\x8a\x08\x85\xc5\ +\xe0\x87\x4d\xcb\x47\x73\xcb\xd8\x98\x5f\x02\x8b\x17\x2d\x5a\x82\ +\xd9\x1c\x15\xc4\x50\x10\x80\xc0\xd5\xe0\x69\x20\x2d\x2d\x0d\x41\ +\x10\x88\x8b\x1f\xdc\xc1\xa2\x0c\x30\x1c\x8b\x65\xd7\x4b\xc9\xc9\ +\xce\xe4\x99\x4d\x1b\x19\x3a\x74\x48\x10\x48\xa9\x8d\x52\x1d\x9d\ +\x41\x28\x2c\xbc\xa2\xc4\x54\x0f\x24\x84\x93\xb4\x6c\x57\xdd\x55\ +\x8d\xab\x97\x3c\xbe\x03\xfc\x4d\x88\x83\x73\x41\xa7\x93\x40\xfb\ +\x5a\x10\x8a\xdc\x68\x35\x2a\xf6\x6e\xbf\x45\x30\x99\x34\xba\x87\ +\xe6\x2d\x88\xc8\x90\x32\x08\x8b\x16\x2f\x61\x58\xda\x48\xd2\xd2\ +\x33\x31\x9b\x07\x29\xda\x84\x91\x69\x80\xc5\xc2\xc2\xcb\x68\xb5\ +\x5a\x00\xf4\x7a\x43\x50\x1b\x84\x60\x96\x95\x41\x38\x78\xf0\x80\ +\x8c\xc5\x81\xb4\x6e\x1b\x22\x49\x5a\xb6\x2f\xaf\x7c\x5f\x99\x9b\ +\x96\x6c\x18\x9d\x9d\x93\x05\x86\x68\x04\x4f\x99\x24\x6d\x4f\x3b\ +\xb4\x97\x10\x97\x12\xc3\x20\xb3\x96\x3f\x1e\xb8\xc0\x3d\xf7\xde\ +\x1f\xcc\x52\xc8\x5c\x14\x00\xb5\x46\x8d\xde\x60\x44\xab\xd1\x46\ +\x9c\x8b\x42\x08\x08\x5b\x8c\x05\x8b\x65\x10\xa6\x28\x33\xf6\xc4\ +\x21\x81\xbe\xe1\x59\x96\x03\x50\x5d\x5d\xc5\xfa\x27\xf2\xe5\xb5\ +\xfe\x5d\xe0\x33\xa0\x1a\xf0\xf4\xb4\x27\x7d\x64\xe5\xc6\xfd\xae\ +\xd2\xe2\x2b\x10\x9d\x08\x31\x29\xd2\x8c\xd0\x0b\x08\xe7\x2b\xa0\ +\xb5\x85\x15\x0b\xd2\x69\xa9\xf9\x8c\xb7\xf7\xff\x77\x57\x19\x87\ +\x02\x88\xc0\x62\x77\x73\x71\xca\xd4\x3b\x18\x9d\x99\x45\x7a\xc6\ +\x4d\x18\x8d\xa6\x6e\xa4\xdc\xc9\xf2\xa1\xf7\xdf\x53\xae\xdf\x7f\ +\x0d\xdc\x6b\xbb\x93\xb4\x6c\x6e\x8f\xb7\x65\xe9\xcf\x97\xbe\x86\ +\xbf\xdd\x83\x98\x34\x16\x0c\x46\x49\xda\xb1\xc9\x08\x27\xce\x22\ +\x08\xb0\x6b\xcb\x78\xb6\x6f\xdd\x40\xd9\xf5\xd2\x2e\x0c\x45\x0e\ +\x42\x57\x19\x86\x03\xa0\xd1\x6a\xd1\xeb\x0c\xa8\x54\x21\x6d\xe4\ +\x00\x75\x8c\xd1\x59\x77\xe8\xd0\xfb\xb2\xff\x2e\xe0\x2b\xa0\x19\ +\x69\x71\xed\xd5\xe3\x61\xe1\xf5\x8a\xba\xe4\x28\x43\xeb\xb8\x49\ +\x13\xc7\x83\x21\x16\xa1\xbe\x54\x9a\xd3\x45\x5f\x82\x5e\xcb\xa0\ +\x94\x78\x92\xe2\x35\x3c\xff\xef\x87\x99\x37\xef\x9f\x10\x54\xaa\ +\x6e\x65\x4a\x28\xc0\xb0\x73\x31\x34\x0f\x10\x11\xa0\x32\x57\xb8\ +\xdc\x55\x3c\xb9\x6e\x8d\xcc\xf0\x7b\xc0\x49\xc0\x0d\x34\xf4\x86\ +\x61\xd9\xf2\x37\xbf\x74\xe8\xea\xd7\x17\xbf\x80\xa8\x58\x88\x1f\ +\x0e\xfa\x76\x48\x4d\x41\x38\x7d\x01\x3c\x1e\x1e\x9a\x99\x4c\xaa\ +\xf5\x2a\x3b\x7f\xb7\xa3\x0b\x8b\xa1\x32\x0d\x65\x91\x70\x2c\xf7\ +\xc0\x62\x38\x29\x0b\x02\x7c\x74\xf4\x28\x4d\x4d\x4d\xb2\xdf\x1f\ +\x05\xee\xb5\x72\x41\x6f\x01\x7b\x5a\xdb\x7c\x0b\x1f\xfa\xe7\xd7\ +\x7d\xad\x4d\xd5\x88\xf6\x9b\xc0\x68\x00\x5b\x34\x58\x35\x08\x9f\ +\x7c\x01\xa2\xc8\x6b\xcf\x66\xb3\xe7\xf7\x2f\x71\xf9\xf2\x37\x5d\ +\x59\x0c\x09\xc2\x8d\xb0\x48\x84\x31\x44\x44\x8e\x1e\x3d\x2a\xfb\ +\x5c\x89\xf4\x94\xd5\x82\xe2\xf0\xa2\xb7\x27\x1e\x00\xa5\x95\xd5\ +\x8d\xfa\xe6\xc6\x9a\xc9\x77\xfe\xe3\xad\x60\xd4\x22\x54\x9f\x07\ +\xbd\x0f\xae\xbb\x41\x50\x63\x4c\xb1\x33\x26\xc3\xcc\xaa\x4d\xfb\ +\x59\xb0\x70\x31\x1a\x8d\xba\xd7\x2c\x46\x0e\x42\xe4\x75\x5d\xee\ +\x2f\x2b\xa8\xac\xbc\x92\xd5\x2b\x97\xca\x72\x7e\x1f\xf8\x34\x00\ +\xbc\xa1\xaf\x0c\xcb\xb6\xff\xd5\x5d\x27\xf9\xf4\xe4\x09\xd0\x1b\ +\x10\xed\x19\x60\xd6\x40\xb2\x05\xe1\xdc\x37\x50\x5b\xcb\xf4\xdb\ +\x12\x98\x96\xd3\xc8\xd6\x2d\x2f\x84\x07\x18\x81\x45\x22\x82\x0c\ +\xcd\x03\x61\xea\x03\x6d\x4e\x7d\x5e\xa0\x94\xb3\x9c\x9d\x6b\x94\ +\x00\xfa\x0a\x38\x7f\xcc\x98\x31\x2c\x5a\xb1\x07\x4f\x7d\x0d\xd8\ +\x52\x20\xca\x06\xf6\x80\xb4\x8f\x15\x80\xdf\xc7\xd6\x75\x37\xf3\ +\xd1\x07\xbb\x38\x75\xea\x6f\x61\xe6\x59\xef\x58\x24\x02\x8b\x1d\ +\xf5\x04\xd7\xb7\xb6\xf9\x38\xf1\xc9\x71\xd9\xcf\x2a\xe0\x1c\x21\ +\x72\xee\x2b\xe0\x24\xb5\x5a\x3d\xff\xbe\xfb\x1e\x60\xee\xfc\xa5\ +\x2c\x5f\xff\x36\x88\x3e\xc4\xe4\x71\xd2\x03\x46\xb2\x15\x9a\xea\ +\x11\xbe\xf8\x1a\x83\x5e\xcd\xee\xad\xe3\x58\xb9\x62\x29\x5e\xaf\ +\x67\x40\x59\x0c\x9a\x0a\x8a\x64\x58\x5c\x5e\xcd\xbe\xbd\x3b\x65\ +\x5f\x3f\x46\x3a\x28\xa8\x09\x05\xd1\x17\xc0\x6b\xb4\x3a\x9d\xee\ +\xbe\xfb\x1f\x62\xc1\x82\x45\x14\x96\x19\x78\xe7\x48\x39\x68\x4d\ +\x88\x83\xc7\x82\x45\x0f\x09\x46\x28\xfc\x0e\x9c\x6e\xc6\x8d\xb1\ +\xb2\x68\xb6\x91\x0d\x4f\xad\x1f\x30\x16\xbb\x5b\xd7\xbf\xfe\xe6\ +\x12\x8d\x5e\xaf\xec\xab\x9c\x9d\xfb\x0d\xd8\x0c\x3c\x3a\x6f\xde\ +\x7c\x52\x87\xa5\x12\x1d\x1d\xcd\x8b\xff\xb2\x95\x55\xcf\x1e\xc7\ +\x55\x29\x82\x35\x05\x2c\x49\x60\x37\x83\x41\x44\x38\x71\x06\xda\ +\xda\xd8\xf0\xe8\x28\x0a\x2f\xbc\xcb\xa1\x43\xef\x0f\x08\x8b\x84\ +\xd4\xcb\x79\xa0\xa6\xbe\x85\x4f\x8e\xfd\x45\xf6\xb5\x1a\x38\x4b\ +\x18\x39\xf7\x05\xf0\x63\x2a\x95\xca\xba\x6a\x75\x3e\x82\x20\x60\ +\xb3\xc5\x91\x9c\x9c\xcc\xf2\xc7\xd7\xb3\x68\xf5\x11\x40\x83\x38\ +\x38\x07\x2c\x16\x30\x0b\xd0\xde\x88\x70\xea\x1c\x6a\xb5\xc0\xde\ +\x6d\xb7\xf0\xd4\xba\x95\xb8\xdd\xce\xb0\x2c\x76\x01\xd8\x0d\x8b\ +\xc1\x3b\xb3\xce\xfa\x92\x8a\x5a\xf6\xee\x7a\x5d\xf6\xf5\x28\x92\ +\x9c\x6b\xc3\x01\xe9\x0d\x60\x0d\xb0\x6a\xe6\xac\xd9\x8c\x1c\x31\ +\x12\x41\x00\x8d\x46\x4d\x42\x82\x9d\xbb\xef\xbe\x1b\xc1\x30\x82\ +\x37\xf6\x7d\x0b\x6a\x2d\x62\x72\x2e\x44\x6b\xa4\x63\x81\xe2\x12\ +\x28\xbd\x4e\xfa\xd0\x28\x36\x3e\x92\xc4\xca\x15\xcb\xc3\xb2\x48\ +\x18\x00\xe1\x58\x0c\xbf\xfd\x04\x9f\x5f\xa4\xf8\xda\x35\x3c\x9e\ +\x8e\x95\x27\xa2\x9c\x7b\x0b\x78\x3e\x30\x34\x7f\xcd\xda\x0e\x19\ +\x22\x08\x18\x8d\x46\xac\xd6\x18\x9e\x7d\xf6\x39\xb6\xec\x38\x47\ +\x51\x71\x1b\x98\x13\x20\x39\x47\x3a\x78\x35\x81\x70\xf2\x1c\x34\ +\x35\xf3\xc8\x43\x69\xe0\x3d\xc3\x9e\xdd\x6f\xf6\xc8\x22\x11\x58\ +\xec\x12\x80\x40\x9b\x72\xb7\x87\xe3\x1f\x1d\x92\x7d\xad\x01\xce\ +\x20\x1d\xed\x78\xc3\x81\xe9\x0d\xe0\xfc\xbc\xbc\x5b\xb9\x6d\xe2\ +\xa4\x2e\x32\x8c\x8d\x8d\x25\x21\x21\x9e\x4d\x9b\x9f\x67\xfe\xf2\ +\x43\xf8\xfc\x1a\xc4\x91\x33\xc0\x12\x2b\xb1\xac\x6a\x41\xf8\xf4\ +\x0b\x00\xde\x78\x71\x1c\xff\xba\x65\x23\xd7\xae\x15\xf5\x99\xc5\ +\x88\x0f\x19\x02\x5c\x77\xd6\xb3\xfb\x3f\xff\x43\xf6\x55\x96\x73\ +\x58\x76\x7b\x03\xf8\x2e\x20\x37\x7f\xed\xba\x90\x2f\x92\x1c\x50\ +\xa9\x54\x24\x24\xd8\x99\x7c\xfb\x64\x46\xde\x3c\x95\x97\x5e\x3b\ +\x0f\x2a\x1d\x62\xf6\x5c\x30\xaa\x24\xa6\x5d\x0e\x28\x2c\x22\x21\ +\xd6\xc0\xe2\x9f\x8d\xe6\xe9\xa7\x37\xf6\x99\xc5\xae\x41\x90\xea\ +\x3c\x8d\x6d\x54\xba\x1c\x4a\x39\x87\xdd\x6c\xf4\x05\x70\x7e\x7a\ +\x7a\x3a\x73\xe6\xfc\x8c\x48\x4b\x86\xde\xa0\x27\x26\xd6\xc6\x13\ +\x4f\xac\xe7\x0f\x07\x4b\x39\x75\xf6\x3a\x58\x86\x20\xa6\x4f\x96\ +\x58\x8e\x02\x5f\x51\x1d\x17\x2e\x8d\x23\x67\x54\x1e\xe6\x28\x73\ +\x9f\x59\x44\x01\x52\x90\x0b\x80\x12\x47\x03\x27\x3e\xee\x90\x73\ +\x2d\xf0\x05\xdd\xc8\xb9\x27\xc0\xb9\xc0\x5d\x6b\xf2\x9f\x40\xad\ +\x56\x75\xbb\x64\xc4\xc6\xc6\x60\xb5\x5a\xd9\xb2\xe5\x25\x7e\xb1\ +\xf6\x20\x1e\x6f\x2b\xa4\x4f\x83\x98\x24\x5c\x23\xee\xa7\x69\xea\ +\x16\x6e\x4a\x1f\x46\x7c\x8c\x19\x87\xa3\xa2\x6b\x46\xee\xe1\x81\ +\x5e\x09\x52\x36\xbf\x28\x52\xe1\x6e\x60\xd7\x1b\xaf\xc9\x45\xc7\ +\x90\xce\xe3\x22\xb2\xdb\x13\xe0\x7c\x9b\x2d\x8e\x85\x0b\x17\x76\ +\xbb\x24\xc8\x41\xb0\x27\xda\xc9\xca\xca\x66\xc6\xac\xf9\xac\x7b\ +\xe1\x30\xd5\x75\x3e\xce\xe8\x1e\x27\x7e\xec\x62\xa2\x8c\x06\x44\ +\xd1\x47\x7c\x4c\x14\x6e\xb7\x3b\x90\xf8\x42\xd6\xe4\x1e\x00\x86\ +\x9a\xb3\xaa\x11\x4f\x5d\x25\x75\xb5\x1d\xf8\x7a\x94\x73\x77\x80\ +\x87\x02\xf3\x57\xac\x5c\x89\x49\x3e\x56\x51\xee\x8c\xe8\x9a\x6c\ +\x74\x3a\x1d\xf1\xf1\x71\x2c\x5b\xb6\x8c\xcf\xbf\x6e\xe7\xe9\x2d\ +\x9f\x61\x8f\x4b\x04\x40\xf4\xfb\x69\x6f\x17\x51\xc7\x8d\xa6\xba\ +\xaa\x32\x2c\x8b\x7d\xb5\x52\x47\x03\x27\x8e\x76\xc8\xb9\x8e\x1e\ +\xb2\x73\x4f\x80\x57\x19\x8d\x46\xcd\x63\x8f\x2d\x0b\x2f\xe5\x08\ +\x32\xb4\x58\xad\x58\x2c\x83\xd8\xb6\x6d\x1b\x96\x94\x5c\x26\xcd\ +\xdf\xcc\x23\x4f\xef\xe0\x72\x89\x9b\x2b\x0d\xd1\xd4\xf9\x8c\x44\ +\x1b\x35\x88\xa2\xd8\x2f\x90\xb2\x35\xb7\xb4\x53\x55\xdb\xa4\xcc\ +\xce\xc7\x91\x7e\xeb\x0a\xbb\xd9\xe8\x09\xb0\x15\x78\xec\xe1\x87\ +\x7f\x41\x7c\x7c\x5c\x8f\x19\x35\xf4\x29\xc8\x6e\xb7\x93\x97\x97\ +\xc7\x8a\x15\x2b\xf8\xf0\xf0\x11\x86\xe7\x4c\xe5\xde\x5f\x6e\xe3\ +\x9d\x77\xde\xc3\x5b\x57\x49\x5a\x8a\x1d\xb7\xdb\xdd\x6f\xb0\x00\ +\xa5\xce\x06\x5a\x9b\xaa\xa9\xa9\xae\x92\x8b\xba\xdd\x6c\xf4\x64\ +\xeb\x55\x2a\x95\x78\xf9\xf2\x15\xb1\xad\xdd\x27\xb6\xb5\xfb\xc4\ +\x76\xe5\xe5\xf3\x8b\x3e\xe5\xe5\xf7\x8b\x7e\xc5\xa5\x34\x8f\xc7\ +\x23\x96\x94\x94\x88\x97\x2e\x5d\x12\xb7\x6f\xdf\x2e\x8e\x1a\x31\ +\x42\x8c\x36\x1b\xc5\x2f\xbf\xfc\x52\xbc\x11\xfb\xe8\x74\xb1\xb8\ +\x7e\xe3\x0b\xf2\x8f\xe3\xf5\xc0\x04\x20\xab\x3f\x60\x75\x40\xf9\ +\x83\x0f\x3e\xa8\x00\xe8\x0b\x06\xe8\x0b\x06\x18\x0a\x32\x9c\x79\ +\xbd\x5e\xb1\xb4\xb4\x54\xbc\x7c\xf9\xb2\xf8\xd6\x5b\x6f\x89\x5f\ +\x7d\xf5\x55\xbf\xc1\xba\x6b\x1a\xc5\x0f\x4e\x14\x89\x36\x5b\xbc\ +\x0c\xf8\x3d\x60\x3c\x90\xd2\x1b\x80\x9a\x90\xcf\xf3\x81\xa4\xfc\ +\xfc\xb5\x41\x73\x2c\x74\xba\xf5\x75\xfe\x99\x4c\x26\x4c\x26\x13\ +\x4d\x4d\x4d\x0c\x1b\x36\x0c\xbd\x5e\xdf\xa7\xfe\x4a\x2b\x75\x34\ +\xd0\xd6\x54\x43\x55\x55\xc7\xb4\xe8\x72\x50\xd7\x9d\x29\x01\x0b\ +\xc0\x93\x53\xa6\x4c\x61\xc2\x6d\x13\x08\x85\x74\x23\x49\x46\x36\ +\xa3\xd1\x78\x43\xfd\xdb\xda\xfd\x38\x2a\xbd\x9c\x3c\xfe\xa1\x5c\ +\xe4\x01\x4e\x03\x6d\x28\xce\xad\xba\x33\x25\xe0\x9f\x02\x99\x6b\ +\xd6\xac\xe9\x3c\x77\xfa\x81\x59\xb9\xcb\x03\xc0\xae\x9d\xaf\xca\ +\x45\x9f\x20\x2d\x45\xbd\x62\x17\x82\xb3\xf4\x93\x99\x99\x99\xdc\ +\x73\xcf\x3d\x3f\x48\xb0\x20\x6d\x25\xdb\x9a\x6b\xa9\xaa\xec\x90\ +\x73\xaf\x36\x1b\x4a\x93\x01\x5b\x81\xa9\x33\x67\xce\xfc\xc1\x82\ +\xad\xf7\xb6\x52\xe7\x69\xe1\xb3\x4f\x8e\xc8\x45\x5e\xe0\x14\x92\ +\x9c\x3d\xbd\x1d\x47\x06\x2c\x02\xfe\xb3\x67\xcf\x22\x8a\xe2\x80\ +\x3a\x3a\x50\x56\xe2\x68\x40\xa5\x12\xd8\xb5\xf3\xd7\x72\x91\x52\ +\xce\xbd\x76\x5a\x06\x5c\x07\xbc\x7b\xf4\xe8\x51\xe6\xce\x9d\x4b\ +\x41\x41\x01\x3e\x9f\x6f\x40\x1d\xbe\x11\xf3\xfb\x45\xca\x9c\x0d\ +\xf8\x9a\xeb\x70\xbb\x9c\x72\x71\xbf\x36\x1b\xca\xa4\xb5\x04\x18\ +\x7c\xe0\xc0\x81\xbc\x03\x07\x0e\x60\x34\x1a\xc9\xcc\xcc\x24\x2b\ +\x2b\x8b\xb1\x63\xc7\x76\xdc\x13\x12\x12\x06\x00\x42\xdf\xcc\x51\ +\xe5\xa5\xad\xdd\xcf\xe9\x93\xff\x23\x17\x35\x02\x7f\x43\xda\x4e\ +\xf6\x5a\xce\x40\x97\xd5\xc7\x00\x2c\x03\xee\x40\x7a\x59\x25\x95\ +\x90\xb5\xda\x6e\xb7\x93\x95\x95\xd5\x11\x80\x9b\xc7\x66\x93\x91\ +\x31\x82\xe8\x68\x53\xf0\x9b\x36\x03\x68\xa7\x2f\x56\x50\x55\xd7\ +\xcc\x92\xb9\x93\x70\x3a\x2a\x00\x8e\x00\x9b\x90\x7e\x46\x29\xee\ +\xcb\x58\xe1\x3c\x34\x20\x01\x35\x23\xbd\x59\x97\x86\xf4\x36\x5c\ +\x06\x30\x22\x70\x8f\x57\x76\xd0\xeb\xf5\xdc\x3a\xf1\x27\x64\x65\ +\xe5\x32\x62\xe4\x28\x86\xa5\xa5\x93\x9c\x32\x14\x9b\xcd\x86\xc9\ +\xa0\xc5\x64\xd0\x60\xd4\x6b\x50\xa9\xfa\x1e\x10\x6f\x53\x1b\xc7\ +\x0a\x4a\x11\xdb\x1a\x98\x73\x47\x8e\x5c\xfc\x24\xd2\x61\xfb\xb7\ +\x48\x5b\xcb\x5e\x5b\x77\x1e\x18\x90\x40\x1b\x03\x97\x89\xce\x1f\ +\xdf\x2c\x74\x82\x97\x03\x31\x3c\xd0\xae\xc3\xec\x89\x49\x4c\x99\ +\x36\x83\xec\x71\xb7\x32\x3c\xe3\x26\x62\x62\xe3\x30\x47\x5b\x30\ +\x19\xf5\x18\x0d\x1a\x4c\x7a\x0d\xc6\x6e\x02\xd2\xd2\xea\xe3\xcc\ +\x37\x4e\x6a\xea\x9b\x39\x73\xe2\x1d\x9e\x7f\x66\x2d\x48\x72\xbe\ +\x13\x29\x4b\x5f\xa0\x0f\x09\xab\x27\xc0\xe1\x4c\x47\x67\x00\xe4\ +\xcb\x10\x18\x47\x05\x0c\x09\x13\x88\x21\x84\x3c\x95\xe5\x8e\xcb\ +\xe3\xb6\xc9\xd3\xc8\xbc\x39\x97\x21\x29\xe9\x98\xcc\x31\xb4\xf9\ +\x55\xe8\xb5\x2a\x8c\x06\x2d\x06\x9d\x9a\x76\x9f\x9f\xea\xba\x66\ +\x7c\x7e\x11\x9d\x5a\x64\xee\xac\xf1\xd4\xd7\xd7\x81\xf4\x86\xdd\ +\x33\xf4\x43\xce\xfd\x01\x1c\x69\x0c\x03\x5d\x03\xa1\x0b\xd4\x1b\ +\x91\xa6\xc5\x48\x82\x03\x61\x51\x0e\x62\x8a\x8a\x62\xca\xd4\x19\ +\x8c\xcf\x9b\x44\xc6\xc8\x31\xd8\x12\x06\x23\x08\x02\xe5\xa5\xdf\ +\xf3\xdc\x86\x95\x54\x54\x94\x81\xf4\xea\xc2\x22\xa0\x88\x7e\xc8\ +\x59\x76\xf6\xef\x65\x6a\xa4\x69\x10\x1a\x08\x99\xed\x78\x82\xf3\ +\x42\x06\x52\x60\xb4\x11\xc6\xbb\x8e\xf4\x7e\xe7\x39\xa4\xf5\xf7\ +\x2b\xfa\x28\x67\xf8\xfb\x02\x8e\x64\x7a\xba\x06\x41\x1f\xf0\x45\ +\x83\x74\xbc\x94\x81\x94\x13\x62\x91\x36\x16\xa7\x91\x80\xfa\x90\ +\xce\x9d\xbf\xa7\x1f\xec\xc2\xff\x0d\xe0\x70\xa6\x42\x9a\x16\xa1\ +\x8a\x50\x2e\x89\x7e\xa4\x27\xa2\x32\x02\x6f\xe4\xf4\xc7\x7e\x28\ +\x80\x23\x99\x06\x89\x7d\x90\x40\xfa\xbb\x69\xfb\xa3\x85\xb3\xff\ +\x05\xf6\x57\xc4\xf3\x81\x08\x92\xde\x00\x00\x00\x00\x49\x45\x4e\ +\x44\xae\x42\x60\x82\ +\x00\x00\x0a\x5c\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x3c\x00\x00\x00\x3c\x08\x06\x00\x00\x00\x3a\xfc\xd9\x72\ +\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\ +\x00\x00\x0a\x13\x49\x44\x41\x54\x68\x81\xed\x9a\x7b\x70\x54\xf5\ +\x15\xc7\x3f\x77\x93\x7d\xb2\x98\x84\x4d\x42\x12\x30\x88\x09\xaf\ +\x20\xc1\xc0\x0c\x20\xa8\xe0\x88\xf2\x4c\xe9\x08\x0c\xcd\x88\xa8\ +\x69\x09\x0a\xc1\x24\xd4\x89\xb4\xea\x58\x67\x3a\xd3\x3f\x3a\xd3\ +\xe9\xbb\xd2\x0e\x3a\xb5\xc3\x74\xa6\x6d\x8a\xad\xd2\xd6\xb6\x12\ +\x20\x60\x45\x28\xd3\x6a\x6b\x35\x3e\x2a\x84\x24\xfb\xc8\x7b\x13\ +\x12\x92\xec\xdd\xfe\xf1\xdb\x7b\x73\xef\xcd\xbe\xb3\x04\x3a\xc3\ +\x77\xe6\xee\xdd\xdf\xf9\xbd\xce\xf7\x9c\x73\xcf\xef\xb7\x77\x7f\ +\x70\x13\x37\x71\x13\x37\xf1\x7f\x84\xb4\xeb\x34\xaf\x1d\xf8\x0a\ +\xf0\x28\x30\x00\x5c\xbc\x4e\x7a\x4c\x0a\x9c\xc0\x39\x20\x18\xba\ +\xae\x02\x4b\xe2\xe8\x67\x03\xbe\x08\x6c\x06\x4c\xd7\x4c\xbb\x6b\ +\x80\x1f\x22\x88\xbe\x07\xd4\x00\xcf\x03\x47\x62\xf4\x29\x06\x3e\ +\x61\xcc\x48\x2f\x27\x3b\x79\x7a\xb2\x1d\x63\xc0\x89\xf0\xc6\x5a\ +\xa0\x10\x18\x06\x3c\x40\x17\x50\x85\xf0\x70\x3d\x70\x19\x68\x03\ +\xbe\x0c\x64\x01\xdd\x11\x74\x6c\x00\x8a\x80\x0f\x81\xe3\xc0\x3a\ +\x60\x31\xf0\xcf\x44\x15\x93\x12\xed\x10\x03\x66\xa0\x16\x78\x26\ +\x3b\x3b\xc7\xb5\x6e\xfd\x26\x32\xb3\xb2\xe8\xee\xea\xc2\xe7\xf5\ +\xd0\xfc\xf1\x47\xb4\x5c\x12\x8f\xab\x2c\xcb\xda\x7e\xbd\x80\x17\ +\x61\x80\x56\x84\x71\x94\x7b\x31\xf0\x22\xf0\x6d\xe0\x20\x20\x03\ +\x05\x40\x25\xf0\xcd\x44\x15\x4c\x25\xe1\x59\xc0\xd1\xcc\xcc\xac\ +\xb2\x83\x5f\x7f\x81\x1d\x5f\x7a\x18\xab\xd5\xa6\x6b\xf0\xca\xe1\ +\x43\xb8\x3d\xed\xd4\x3f\xf3\x3c\x1d\x3e\x2f\x1e\x8f\x1b\x8f\xd7\ +\x83\xc7\xdd\x8e\xd7\xe3\xc6\xe3\x75\x8b\xef\x5e\x2f\x1e\x77\x3b\ +\x3e\x9f\x97\xd1\xd1\x51\xed\x10\x03\x08\xa3\x78\x80\x7e\xa0\x59\ +\x53\x6e\x05\xdc\x88\x88\xe9\x8d\xa4\x64\xaa\x42\x7a\x26\x70\x7a\ +\xf9\x8a\x95\x33\x7f\xf2\xd2\x2b\xe4\xe5\x17\x84\x6d\x24\xcb\x32\ +\x2b\x56\xac\x22\x2d\x2d\x8d\xe9\x79\xf9\xe4\xe5\xe7\xab\x75\x12\ +\x80\x24\xe9\xca\xb2\x2c\xf3\xc0\xfd\x77\xb3\xb7\xba\x86\x8c\x8c\ +\x0c\x7c\x5e\xdf\x94\x76\x77\xdb\x3c\x9f\xd7\x3b\xaf\xbd\xad\x15\ +\x9f\xcf\xbb\xb1\xad\xad\x95\x8e\x0e\x1f\xc3\xc3\xc3\xda\xa9\xba\ +\x81\x3f\x01\xdf\x02\xde\xd7\x56\xa4\x8a\xf0\x77\xf2\x0b\x66\xcc\ +\x3c\xf2\xcb\xa3\x38\x1c\x8e\x88\x8d\x0a\x66\xcc\x20\x23\x33\x93\ +\x4f\x3f\x69\xa6\x70\xd6\x2c\xac\x16\x9b\x2e\xc6\x24\xf5\x43\xdc\ +\xd2\xd2\xd2\x98\x3a\xf5\x16\xb6\x6e\xdb\x81\x49\xd2\x37\x94\xd0\ +\x37\xee\xf4\xf9\xf0\xfa\xbc\x5c\xfc\xfc\xbf\x34\x34\xfc\x2a\xeb\ +\xe8\x6f\x7f\x53\x01\x6c\x05\x76\x00\xaf\x29\x5d\x53\x91\xde\xe7\ +\x03\x5b\xab\xf6\xec\x1b\x47\x56\x42\x38\x4d\xb9\xca\xee\x5c\xca\ +\xb3\x5f\x7b\x9a\x60\x60\x80\xf3\xef\x9e\xd1\xd5\xa9\x17\x12\x52\ +\xa8\x20\x49\xb0\xa8\x74\xb1\x20\x2b\x81\x24\x89\x3a\xa5\xcd\x58\ +\x1f\xc8\xc9\xcd\x61\xe1\xc2\x85\x6c\xdc\x54\xce\xe1\x97\x7f\xc1\ +\xde\xbd\xfb\x01\x2c\xc0\xcf\x81\xec\x54\x12\x3e\x70\x4b\x46\x86\ +\x69\xe7\x23\x95\x82\xa4\x46\x79\x34\x04\x24\x49\xe2\xed\xb7\x9b\ +\xd8\x5f\xbd\x17\x80\xc2\xc2\x99\x3a\x82\x63\x97\xde\x50\xb7\x17\ +\x15\x71\xe8\xa5\x1f\xf1\x70\xc5\x36\x4e\x37\x9d\x18\x1b\x5b\x6d\ +\x13\x32\x90\xc1\x08\x9b\xcb\xb7\x28\xfa\xdd\x02\x3c\x84\x48\xa8\ +\x13\x0e\xe9\x3c\x60\xe7\xae\x5d\x95\x38\x9d\x53\x84\x12\x63\xf1\ +\x16\x2a\xa3\x96\xfd\xfd\x7e\x16\xcc\x5f\x8c\x24\x49\x64\xe7\x14\ +\x08\x2f\xea\x1a\x86\xfa\x2b\x22\x09\x5a\x2f\xb7\xb0\xee\xc1\xfb\ +\xb9\xf7\x9e\x15\x38\xa7\x66\x84\xc8\x4a\xe3\xc6\xd6\x97\x25\x9a\ +\x9b\x3f\xd2\xea\xd9\x07\xe4\x02\xad\x13\x25\xbc\xcf\x6c\xb1\xd8\ +\x77\x57\xed\x0b\x59\x99\x30\x04\x42\x9f\x12\xec\x7a\xb4\x92\xa1\ +\x2b\x7e\xac\x36\x87\xc8\xe0\x61\x9e\x45\xe3\xb2\xd1\xdc\xfc\x21\ +\x9b\x37\xad\x07\xc0\x6a\xb5\xa9\xf3\xa8\xd3\x18\x0d\x10\xfa\xf2\ +\xda\x6b\x0d\x4a\xc9\x8d\xd8\xb4\xd8\x60\x62\x1e\x76\x02\x4f\x6e\ +\xdd\xba\x83\xbc\xbc\x3c\x83\xa5\x75\x6c\xd5\x2a\x8b\xc5\x8c\xc5\ +\x32\x6d\x9c\x17\xc7\x13\x18\xeb\x55\xb5\xbb\x0a\xbb\xdd\x8e\x63\ +\x8a\x93\x69\xae\x1c\x9d\x17\x0d\x5f\xd5\x72\x67\x57\x27\xa7\x9b\ +\x4e\x29\xa2\xe3\x88\xdd\xd9\x15\x98\x18\xe1\xc7\x25\x49\x72\xed\ +\xab\xae\x19\xb3\xb2\x81\x20\x3a\x71\x64\x2f\x4a\x06\xad\xb5\x46\ +\x58\xbd\x66\x2d\x72\x30\x80\xd9\x6c\x0d\x25\x2c\x0d\x33\x6d\x2f\ +\x4d\x84\x1d\x7b\xe3\x75\xed\xfa\xfd\xd7\xd0\xbd\x07\x92\x27\x9c\ +\x0e\xd4\xad\x5d\xbb\x8e\x79\xf3\x17\x18\x26\x4e\x82\xa0\xbe\xa8\ +\x5b\x93\xd3\xcd\x66\x24\xcc\x11\x09\x86\x9b\xfb\xd8\xb1\x37\x14\ +\x89\x17\xf8\x17\x30\x04\x0c\x2a\x8a\x27\x83\x87\x80\xd9\xfb\xf6\ +\xd7\xaa\xca\x46\x23\x69\x0c\x53\x83\xbe\xe1\xc3\x54\x3f\x9c\xae\ +\x53\xc4\x7a\x24\xbc\xbe\x0e\x4e\x34\xbe\xa5\x08\x8e\x23\xb6\xa2\ +\xea\x1e\x3d\x59\xc2\xf5\x77\x96\x2d\xe1\xee\xbb\xef\x55\x67\x4c\ +\x24\x4c\xd5\x1a\xa3\x97\x12\xf0\xa2\x76\x60\x6d\xf9\xad\xc6\x46\ +\x06\x07\x07\xd5\x62\xe8\xde\xa3\x08\x92\x21\xbc\x06\x58\x5a\xbd\ +\xbf\x4e\xef\xa5\x49\xf4\x62\xa4\x08\x92\x83\x41\x1a\x1b\x1b\x15\ +\x71\x07\xe2\xd7\xd4\x55\x42\x09\x0b\x92\x23\x5c\x7f\xdb\x6d\xb3\ +\x29\x2f\xdf\x12\xdb\x8b\x51\x9e\xd5\x88\x04\x43\x85\x68\x04\xc7\ +\xd5\x87\x86\x69\x6b\xeb\xe0\xe8\xaf\xd5\x9f\xd6\xe3\xc2\x19\x12\ +\x27\x5c\x02\xac\x7f\xe2\xc9\x6a\xcc\x66\x73\xd4\x85\xdf\xf0\x55\ +\x4f\x2a\x0e\x2f\x46\x5e\xae\x22\xd4\x03\xef\xbc\x7b\x4e\x1b\xce\ +\x4a\x76\x9e\x10\xe1\x7a\x97\xcb\x25\xed\x7c\x64\x97\x6e\x7b\x97\ +\x70\x98\x86\x0a\xc9\x78\x51\xd7\x44\x33\xe1\xf0\xf0\x28\x4d\xa7\ +\x4e\x2a\x82\x4e\xe0\x1f\x18\xc2\x19\x12\x23\x9c\x0f\x54\x54\x56\ +\xee\xc6\xe9\x74\x72\xbd\xbc\xa8\x1d\x50\x5b\xbe\xd8\xd6\xc5\x91\ +\x57\x0f\x29\x95\x61\xc3\x19\x12\x23\x5c\x6b\xb3\xdb\x2d\x55\x7b\ +\xf6\xa2\xdd\x2f\x4f\xa6\x17\x23\x1b\x17\xfe\xfd\xc1\x7f\xb8\x32\ +\x30\xa0\x48\x94\xec\x9c\x34\x61\x27\x50\xb5\x63\x47\x05\xb9\xd3\ +\x73\xc3\x2f\x29\x9a\x2f\xd7\xca\x8b\x91\xea\xbb\xfa\x86\x38\x75\ +\xe2\xcf\x8a\xb0\x0b\xb8\x40\x98\x70\x86\xf8\x09\xef\x31\x99\x4c\ +\x99\x4f\xd5\xd4\x45\xdf\xde\x25\xe1\xc5\xb8\x08\x6a\x1a\x86\x9b\ +\xfb\x52\x7b\x0f\xaf\x1e\xfe\xb1\x52\xd3\x88\x08\x67\x75\xed\xd5\ +\x22\x1e\xc2\xe9\xc0\x53\x1b\x36\x6e\x62\xee\x9c\xb9\x61\x08\xe9\ +\x17\x7e\x23\xa1\x44\xbd\x68\x24\x64\x24\x69\x34\x66\x20\x10\xe4\ +\xe2\xe7\x9f\xd3\xdf\xef\x57\xa4\x11\xc3\x59\x21\x13\x0b\x15\x40\ +\x61\x5d\xed\x01\xdd\x8f\x04\xed\xc4\x46\x82\x46\x59\x2a\xbc\x18\ +\xb6\x1e\x68\xf3\xf9\x39\xf9\xd6\x31\xa5\xd8\x0d\x9c\x47\xbc\x16\ +\x1e\x20\x0c\xe2\x21\x5c\xb7\x6c\xd9\x72\xee\x5a\xb9\x4a\x27\x8c\ +\xdf\x8b\xe3\xb3\x79\xa2\x5e\x94\x0c\xd6\xd1\xd6\x5f\xf6\xf4\xf1\ +\xca\xcf\x7e\xa0\x14\x95\x70\x0e\xeb\x5d\x88\x4d\x78\x1d\x50\x56\ +\x77\xe0\xe9\xd4\x24\x1b\x4d\xc3\x44\xbc\x38\x3e\xf1\x09\x81\x7f\ +\x60\x98\x0e\xaf\x5b\x1b\xce\x61\x37\x1b\x5a\xc4\x22\x5c\x57\x54\ +\x54\x44\x79\xf9\x17\x88\x9e\x71\x63\x7b\x31\x9a\x97\x62\x79\x51\ +\xcc\x65\x94\xc0\x25\xb7\x9f\xa6\xe3\x6a\x38\xf7\x00\x7f\x27\x4a\ +\x38\x43\x74\xc2\x65\xc0\xba\xda\xba\xaf\x92\x96\x66\x1a\xd3\x3d\ +\x45\x5e\x34\xa6\xba\x48\x5e\x8c\x04\x39\x18\xa4\xdd\xe7\xe7\xf0\ +\x4f\xbf\xaf\x88\x4e\x00\x01\xa2\x78\x17\xa2\x13\xae\x73\xb9\xb2\ +\xd9\xb9\x73\xa7\x9a\xac\xa2\x87\xe1\xc4\xbc\x18\x8b\xa0\x11\x9e\ +\xce\x2b\xf4\xf7\x76\xd0\xdb\xa3\xf2\x8b\x19\xce\x10\x99\x70\x21\ +\x50\xb1\xaf\xba\x1a\x87\xdd\x71\xdd\xbc\x18\x0d\x2d\x6e\x3f\x4d\ +\x8d\x6a\x38\xf7\x12\x23\x3b\x2b\x88\x44\xf8\x29\xbb\xdd\x9e\xbe\ +\x67\xcf\x13\x63\x4a\xc6\xe5\x45\x29\x8c\x57\xb5\xd5\xc9\x13\xd4\ +\x62\xe8\xea\x28\x9d\x3d\x83\xda\xec\x7c\x12\x18\x25\xc2\x66\x43\ +\x8b\x70\x84\x33\x81\x3d\x8f\x3d\xf6\x38\x39\x39\xd9\x24\xb4\x64\ +\x90\x5a\x2f\x46\x42\x8b\xc7\xcf\xf0\x60\x17\xdd\x5d\x9d\x8a\x28\ +\xea\x66\x43\x8b\x70\x84\x77\x9b\x4c\x26\x67\x4d\x4d\xcd\xf8\x77\ +\xcd\x30\x69\x5e\x8c\x86\x16\xb7\x9f\x33\x8d\x7f\x54\x8a\x7e\xe0\ +\x5d\x60\x04\xf1\x8f\x62\x42\xb0\x00\x6d\xdb\xb6\x6d\x0b\x8e\x8e\ +\x06\xc4\x15\x08\x04\x03\x01\x59\x77\xc9\xb2\xfe\x9a\x4c\xf8\xba\ +\xaf\x04\xff\xd0\xf4\x59\xd0\xe5\xca\x51\x4e\x03\xbc\x0e\x2c\x05\ +\x6e\x8d\x87\xa0\xd1\xc3\x15\x40\x7e\x5d\xdd\x01\x9d\xa7\x26\x23\ +\x4c\xe3\x45\x8b\xdb\xcf\xc8\x60\x37\x9d\x9d\x3e\x45\x34\xee\x45\ +\x5d\x34\x68\x09\x4b\x40\xfd\xea\xd5\xab\x59\x71\xd7\x8a\xb8\x16\ +\xfe\xc9\xc6\xc8\xa8\x8c\xbb\x63\x80\x33\x27\xd5\x70\xee\x07\xce\ +\x22\xc2\xd9\x1f\xb1\xa3\x06\x5a\xc2\xeb\x81\x92\xda\x5a\xf1\xae\ +\xf9\x46\x20\x68\x44\x9b\x57\x3c\xa2\x87\x0f\x7d\x4f\x11\x9d\x42\ +\x2c\x45\x71\x79\x17\xf4\x7f\x97\xd6\x97\x94\x94\xb0\x65\xcb\x96\ +\x1b\x92\x2c\x88\xad\xe4\xc8\x50\x0f\x9d\x1d\x6a\x38\xc7\xb5\xd9\ +\xd0\x42\x21\x9c\x09\xac\xd9\xb0\x61\xc3\x0d\x4b\xb6\x6f\x60\x98\ +\xde\xfe\xab\xfc\xed\xd4\x9b\x8a\x68\x00\x78\x87\x04\xb3\xb3\x42\ +\x38\x08\xc8\x17\x2e\x5c\x20\x18\x0c\xa6\x54\xd1\x54\xe1\x92\xdb\ +\x8f\xc9\x24\x71\xf8\xd0\x77\x15\x91\x36\x9c\xe3\x56\x5a\x21\xdc\ +\x0b\xfc\xbe\xb1\xb1\x91\xed\xdb\xb7\x73\xee\xdc\x39\x02\x81\x40\ +\x4a\x15\x9e\x08\x64\x39\x48\xab\xc7\x4f\x60\xa8\x17\x9f\xd7\xa3\ +\x88\xe3\xde\x6c\x68\xa1\x4d\x5a\x95\x40\x41\x43\x43\xc3\xb2\x86\ +\x86\x06\xec\x76\x3b\x25\x25\x25\x94\x96\x96\xb2\x68\xd1\x22\xf5\ +\x9e\x9b\x9b\x9b\x02\x0a\x89\xc1\xdd\x39\xc0\xc8\xa8\xcc\xd9\x33\ +\x7f\x51\x44\x57\x80\xb7\x11\xdb\xc9\x84\x36\x1b\xc6\x07\xd6\x06\ +\x3c\x81\x38\x41\x37\x1f\x71\xf6\x4a\xb7\x56\x4f\x9f\x3e\x9d\xd2\ +\xd2\x52\xd5\x00\x77\x2c\x5a\x4c\x71\xf1\x1c\xa6\x4e\x75\xe8\x4f\ +\xda\xa4\x10\x67\xdf\x6f\xa7\xb3\x77\x88\xca\xed\xab\xf0\xb8\xdb\ +\x01\xde\x04\x9e\x45\xfc\x7f\x74\x31\x91\xb1\xc2\x69\x68\x43\x10\ +\x75\x22\x0e\x82\xcc\x46\x9c\x86\x2b\x06\xe6\x84\xee\x39\xda\x0e\ +\x56\xab\x95\xe5\x2b\xef\xa5\xb4\xb4\x8c\x39\x73\xe7\x71\xdb\xec\ +\x22\x66\xde\x5a\x88\xcb\xe5\xc2\x61\x33\xe3\xb0\xa5\x63\xb7\xa6\ +\x63\x32\x25\x6e\x90\x81\xc1\x11\x4e\x9c\x6b\x21\x38\xe2\xa7\x7c\ +\xed\x9d\x8a\xb8\x1e\xf1\xb2\xfd\x63\xc4\xf9\x8d\xb8\x11\x4d\x03\ +\x1b\x82\xb4\x3d\x74\x39\x18\x3b\x6e\x9c\xc1\x18\x79\xc5\x10\xb7\ +\x87\xda\xa9\x98\x9e\x97\xcf\xea\xfb\x1e\x64\xf1\x92\xe5\xdc\x5e\ +\xbc\x80\xac\x69\xd9\x38\xa7\x66\xe0\xb0\x5b\xb1\xdb\xd2\x71\x58\ +\xd3\xb1\x47\x31\xc8\xd5\xe1\x00\xe7\x3f\xf0\xd0\xdd\x37\xc4\xf9\ +\xa6\xdf\xf1\xe2\x73\x07\x40\x84\xf3\x03\x88\x2c\xfd\x1e\x09\x24\ +\xac\x58\x84\xc3\xc1\xc2\x98\x01\x94\xcb\x16\x1a\xc7\x04\xcc\x08\ +\x63\x88\x19\x18\x8e\x47\x95\x2d\x59\xc6\x5d\xf7\xdc\x47\xc9\x1d\ +\x65\xcc\xb8\xb5\x08\x87\x33\x8b\x11\xd9\x84\xd5\x6c\xc2\x6e\x33\ +\x63\xb3\xa4\x31\x1a\x90\xe9\xea\x1d\x22\x20\x07\xb1\xa4\x05\xd9\ +\xbe\x71\x29\x7d\x7d\xbd\x20\x4e\xd8\x3d\x47\x12\xe1\x9c\x0c\xe1\ +\x48\x63\xd8\x18\x6f\x08\x4b\xa8\xde\x8e\x78\x2c\xe6\xa2\x37\x44\ +\x86\x76\x10\xc7\x94\x29\xac\x5e\xf3\x20\x4b\x97\xad\xa2\x78\xee\ +\x42\x5c\xb9\x05\x48\x92\x44\x5b\xcb\xa7\xbc\x70\xb0\x9a\xf6\xf6\ +\x56\x10\x47\x17\x76\x01\x9f\x91\x44\x38\x2b\xca\x5e\x2b\xa4\x21\ +\x1e\x03\xa3\x21\x14\x6f\xe7\xa0\xcf\x0b\xc5\x08\xc3\x98\x23\x8c\ +\x77\x19\xf8\x06\xe2\x5f\xc1\x61\xc4\xd9\x8d\x84\x37\x0d\xd7\x63\ +\x5b\x65\x65\xbc\x11\xac\x21\x5d\xd2\x11\xaf\x97\x8a\x11\x39\x61\ +\x1a\x62\x63\x71\x16\x41\x34\x80\x78\xef\xfc\x29\x49\x78\x17\xae\ +\x0f\xe1\x70\x30\x21\x1e\x0b\x63\x44\x68\x97\x44\x19\xf1\x8b\xa8\ +\x95\xd0\x89\x9c\x64\x70\xa3\x10\x8e\x84\x74\x84\xf7\x41\x90\x94\ +\xa3\xb4\xbd\x89\x70\xf8\x1f\x6f\xd3\x5a\xa4\x89\xb6\x97\x21\x00\ +\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x0c\xcd\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x3c\x00\x00\x00\x3c\x08\x06\x00\x00\x00\x3a\xfc\xd9\x72\ +\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\ +\x00\x00\x0c\x84\x49\x44\x41\x54\x68\x81\xdd\x9a\x79\x70\x5d\xc5\ +\x95\x87\xbf\x7b\xaf\xde\xd3\x2e\x6b\x97\x6c\x79\xb7\xb1\x01\xd9\ +\xd6\x93\xb5\xd8\xb2\xc7\x20\x62\x0a\x08\x10\x86\x4a\xc5\x13\xa6\ +\x26\x95\x0c\x0c\x90\x02\xb2\x18\x02\x43\x91\x09\x10\x32\x04\x53\ +\x18\x88\x03\x66\x42\xd8\xd7\x78\x52\x09\x26\xb1\x87\x0a\x83\x0d\ +\x98\xc1\xbb\x2d\x24\x79\x91\x64\x59\xd6\xbe\xeb\xe9\x49\x6f\x5f\ +\xee\xbb\xdd\xf3\xc7\x95\xc1\xb2\xb6\x27\x4b\x46\x76\x7e\x55\xfd\ +\x87\xa4\x7b\xcf\xe9\xef\xf6\xe9\x3e\xa7\xbb\xa5\x30\xc5\xba\xa2\ +\xb8\x78\x5e\xd8\x30\xee\x55\xc0\x2b\xac\xd6\x8d\xfb\xf6\xed\x73\ +\x9c\x4f\x7f\xca\xf9\x34\x3e\x96\x4a\x4b\x4b\x63\x74\xb7\xbb\x65\ +\x1a\xa4\x0b\xc0\x09\x0e\x69\x18\x37\xed\xaf\xa8\xd8\x73\xbe\x7c\ +\xaa\xe7\xcb\x70\x24\xd2\xbd\xde\x05\x16\x48\xcf\x8e\x81\x45\x29\ +\x0a\xd9\x90\x6a\xd1\xb4\xff\x5b\x61\xb3\x3d\x74\xbe\x7c\x4e\x29\ +\xb0\x10\x42\x55\x80\xb8\x68\x85\x0d\x77\x5b\x58\x5b\x98\xc2\x74\ +\x50\xe3\x35\xed\x89\x92\xfc\xfc\x9d\x2b\x56\xac\x48\x9a\x6c\x9f\ +\x53\x0a\x7c\xa6\xe2\x62\x14\xee\x79\xe6\x55\x7e\x7a\xd7\x4a\xa6\ +\xab\x90\xac\xaa\x6b\x35\x5d\x3f\x59\x9c\x9f\x9f\x37\x99\x7e\x2e\ +\x18\x60\x00\xa2\xd3\x58\x75\xdb\x73\xfc\x66\xf3\x1d\xcc\x9b\xa6\ +\x91\xa1\x28\x99\xd1\xaa\x7a\x78\x65\x7e\xfe\x5d\x93\xe5\xe2\xc2\ +\x02\x96\x06\x20\xc9\x28\xba\x9d\x4d\xef\xfc\x86\x35\xb6\x34\xb2\ +\x21\x2a\x46\x55\xff\xab\xd8\x66\x7b\xbf\xb4\xb4\x34\x66\xa2\x2e\ +\x2e\x2c\x60\x23\x04\x46\x10\x8c\x20\x96\x0c\x1b\x3f\xdb\xf4\x22\ +\x77\x7e\x3f\x8f\x6c\x05\x52\x34\xed\xe6\x80\xcb\x55\x53\xb0\x74\ +\xe9\xa5\x13\x71\x71\x61\x01\x8b\xe0\xe0\x66\x4d\xe6\xea\x3b\x37\ +\xb0\xf1\xa9\x5b\x98\x15\xa7\x92\xa9\x28\x73\x62\x2c\x96\xca\xc2\ +\x65\xcb\x6e\x39\x57\x17\x53\x06\x5c\x6a\xb3\x25\xab\xb0\x7a\xd0\ +\x2f\xcf\x06\x16\x41\x40\x30\xb3\xe4\x7b\x6c\x7e\xe3\x21\x0a\x17\ +\x25\x92\xad\x28\xd6\x78\x8b\x65\xcb\x0a\x9b\xed\xb5\x82\x82\x02\ +\xcb\x78\xfd\x7e\xad\x85\xc7\xaa\x82\x82\x05\x2a\xdc\x21\xa4\xfc\ +\xae\x0a\x73\xa2\x15\x45\x89\x03\xe6\x4c\x53\x78\xfe\x7e\x2b\xac\ +\x7e\x15\xb4\xd8\x11\xdf\x97\xfe\x2e\xb6\xbd\xf4\x5b\xb6\x6c\x3d\ +\x81\x03\xf0\x08\x51\x13\xd6\xf5\x6b\x0e\x1d\x3b\xd6\x12\x69\x1f\ +\xce\x3b\x70\x6e\x6e\xae\x35\x31\x26\xe6\x9f\x35\xb8\x4f\x85\x65\ +\xf1\x40\x3c\x60\x01\x96\xe6\x66\x60\xcb\x9f\xcf\x82\x45\x39\x2c\ +\x5e\x3c\x1d\x32\x56\x82\xa2\x8d\x6e\x50\x84\xa8\xdb\xbd\x85\x27\ +\x9e\xf8\x88\x9e\xa0\xc4\x21\xa5\x2f\x2c\xc4\x3f\x1d\xac\xa8\xf8\ +\x20\x92\xfe\x9c\x37\xe0\xd2\xd2\xd2\x28\xbf\xdb\x7d\xa7\xa6\x28\ +\xbf\x8a\x93\x32\x2d\x11\x88\x53\xe1\xba\xab\x17\x70\xd5\xb5\xc5\ +\x4c\x5f\x9c\x8f\x1a\x9b\x71\xce\xf6\x7d\x6d\x87\x78\xfc\xe1\x37\ +\x38\xd1\xe4\xa3\x17\xa4\xdf\x30\x36\x1d\xac\xa8\xb8\x1f\x10\xa3\ +\xbd\x77\x5e\x80\x57\xe5\xe7\x5f\x81\xaa\xbe\x19\x07\x73\x93\x81\ +\xac\x64\x8d\x5b\x7f\x50\x8c\x6d\xcd\x5a\xb4\xa4\x99\x93\xe6\x47\ +\xfa\x3b\xf9\xc3\xef\x5e\x67\xdb\x87\x4d\xa7\x43\xbc\x4c\x35\x8c\ +\xeb\xf7\x1e\x39\xd2\x3d\xd2\x3b\x93\x0a\x5c\x5a\x5a\x1a\x13\x72\ +\x3a\x9f\x8f\x52\xd5\xdb\xd3\x80\xd4\x38\x85\xbb\x6e\xb3\xb1\xfc\ +\xea\x6f\xa1\xc4\xa4\x4e\xa6\xab\xaf\x64\x04\x39\xf2\xd9\x76\x9e\ +\x7e\x76\x0f\x8e\xb0\xa4\x0f\x5c\x61\x5d\xbf\xf1\xe0\x91\x23\x9f\ +\x0f\xf7\xf8\xa4\x01\xaf\xb0\xd9\x2e\xd1\x34\x6d\x67\x22\xcc\x4e\ +\x06\xbe\x75\x65\x32\xb7\xdc\xf9\x5d\xb4\xe4\xf9\x93\xe5\x62\x14\ +\x49\x5c\xad\x15\x3c\xf6\xe8\x5f\x68\xe8\x0c\xd0\x03\x42\x17\xe2\ +\x97\x07\xca\xcb\x1f\x07\xe4\x99\x4f\x4e\x0a\x70\x49\x7e\xfe\x5a\ +\x4d\x55\xb7\xa7\x42\xec\xf4\x38\xc1\x7f\xdc\x57\xc0\xac\xa2\x1b\ +\x41\x1d\x77\xd6\x98\x90\x84\xaf\x9b\x97\x37\xbf\xc7\x27\x9f\x77\ +\x60\x07\xbc\x86\xb1\x2b\xac\x69\x37\x97\x95\x95\x39\x4f\x3f\x33\ +\x61\xe0\x55\x45\x45\xdf\xd3\x84\x78\x33\x03\xd4\xcb\x67\x48\x7e\ +\xf1\x8b\x6b\x89\xce\x29\x9a\xa8\xd9\x73\x97\x11\xe0\xc0\x27\x9f\ +\xf2\xdc\xef\xca\xe9\x33\x24\x2e\xe8\x09\x4b\xf9\xcd\x03\x5f\x7c\ +\x51\x06\x13\x04\x2e\x29\x2c\xfc\x37\x8b\x10\x2f\x67\x29\x8a\x72\ +\x55\x1e\xfc\xf0\xde\x75\xa8\x49\x73\x26\xa7\xe3\x13\x91\xd0\x39\ +\x55\xbe\x8b\x67\x5f\xa8\xa6\xbd\x3f\x84\x5d\xca\xa0\xd3\xe3\xb1\ +\x1d\xad\xad\xad\x19\x23\xe9\x8d\xac\x35\xc5\xc5\x37\x6b\x42\xbc\ +\x9b\xa5\x28\xca\x35\xcb\x05\x3f\x5c\xff\x1d\x94\x84\xe9\xe6\x06\ +\x60\xca\x9a\x0e\xde\x66\xe8\x3f\x42\x6a\xba\x85\x6b\x6e\x2d\xa6\ +\x72\x4f\x1b\x0e\x67\x28\xca\xad\xeb\x7d\xdd\xbd\xbd\x87\xa3\xce\ +\x05\xf6\x1f\x0a\x0a\x56\x48\xc3\xf8\x53\x16\x28\x57\x2e\x09\x71\ +\xfb\x8f\xbe\x0d\x71\x69\x03\xa5\xe0\x14\x48\xe8\xe0\x6f\x07\x7f\ +\x27\xc8\x30\xa4\x65\x20\x72\x66\xf3\xde\xf3\xfb\x68\x68\x74\xe1\ +\x07\xe9\xf1\x7a\x6b\x81\xcc\x71\x03\x17\x15\x15\x65\x4b\x21\x3e\ +\xcc\x84\xa8\xc2\xf9\x41\xee\xbe\xbb\x14\x62\xd3\xcc\x5d\xce\xd7\ +\x29\xa1\x43\xd0\x01\x21\x3b\x84\x5c\xa0\x28\xa0\x59\x60\xfe\x42\ +\x02\x6a\x0c\x4f\xdc\xb1\x9d\xa3\x35\x7d\xd8\xc1\x70\xba\x5c\x1b\ +\x1a\x5a\x5b\xab\x81\xd0\x78\x81\x55\x8b\x61\x7c\x90\xa4\x28\xc9\ +\x39\x89\x61\xee\xb9\xde\x8d\xe2\x69\x06\x0c\x88\x9f\x0e\x51\x23\ +\xd7\xc1\x13\x96\x11\x04\xdd\x6d\xb6\x90\x13\x0c\x3f\x28\xea\x57\ +\x2d\x3e\x09\x16\x5d\x46\xe3\xd1\x0e\x1e\x59\xff\x3f\xd8\x83\x06\ +\x7d\x42\xf4\x75\xda\xed\xf7\x34\xb6\xb4\xd4\x02\x5e\xa0\x7d\x5c\ +\xc0\xab\x0b\x0b\x7f\x16\x2d\xe5\xf2\x34\x4d\xb2\xfe\x86\x6e\x12\ +\xa2\x74\xe8\xd8\xff\x95\x53\x6b\x22\xc4\xa4\x40\x74\x0a\x44\x27\ +\x83\x25\xce\xfc\x08\x51\x31\xa0\xc5\x80\xaa\x81\x32\x8c\x4b\x61\ +\x00\x86\xb9\x1f\x16\x3a\x88\x10\x84\x83\x60\x04\xcc\x69\x12\xf6\ +\x9b\x73\xf4\x4c\x40\xe5\xf4\x46\x4f\x81\x19\xb3\x91\x39\xb3\xf9\ +\xdb\x6b\x07\x79\xe3\xe5\xe3\xf4\x02\x5e\xc3\x38\x78\xa2\xae\xee\ +\xc1\x7e\x8f\xc7\x0d\x74\x03\xad\x80\x8c\x78\x95\xbe\xa2\xb8\x78\ +\x9e\x30\x8c\xda\xe9\x10\xf5\x83\x35\xbd\xdc\xb0\xdc\x35\xb4\x03\ +\x91\x36\x55\x03\xd5\x3a\x3c\xc4\x78\x5a\x74\x2c\x2c\x5a\x42\x08\ +\x0b\x4f\xdf\xbf\x83\xb2\x0a\x3b\xdd\x20\xdd\x7e\xff\x0b\x95\x55\ +\x55\x6f\x02\x61\xa0\x09\xe8\x3b\xcd\x11\xf1\x08\x87\x0d\xe3\xf9\ +\x14\x88\x9a\x9f\x1e\xe4\x9b\x36\x27\x13\xca\x68\x52\x9a\x23\xf9\ +\xe5\x28\x9d\x83\x52\x33\x60\xd1\x12\x3a\x6b\x3b\x78\xe4\xc7\x9f\ +\xd0\xee\xd2\xe9\x03\x77\xb7\xdd\x7e\x5f\x5d\x53\x53\x39\xe0\x07\ +\x4e\x01\x83\x16\x97\x88\x80\x4b\x0a\x0b\x8b\xa3\xa4\xbc\x21\x49\ +\x81\x5b\x4b\x7b\x50\x15\xc9\x39\x01\x5b\xa2\x21\x25\x0b\x12\x92\ +\x21\x3a\x1e\xa2\xe3\x40\x8b\x82\x50\x00\x6a\xcb\x23\xb3\xa1\x6a\ +\xb0\xe0\x72\xc8\x9e\xc9\xa7\xef\x1c\xe2\xc5\xe7\x2a\x71\x00\x6e\ +\x21\x8e\xd7\xd5\xd7\xaf\xef\x75\x3a\xfb\x80\x5e\xa0\x99\x61\x76\ +\x4e\x11\x01\x2b\x52\xbe\x94\x0c\xac\x59\xec\x64\xf1\x74\x3f\xe3\ +\x3a\x28\x99\x96\x0e\xb3\x2e\x83\xac\x79\x90\x9c\xce\x97\x1f\x4a\ +\x4a\x44\xc0\x8f\x34\x0c\x84\xdf\x47\x44\x45\x68\x7c\x22\x5c\x5e\ +\x80\x21\x55\x5e\xb8\x6f\x3b\x9f\xed\xee\xa2\x17\xa4\x27\x10\x78\ +\xfb\x48\x6d\xed\x66\x5d\xd7\xc3\x98\xa0\xbd\x23\x99\x18\x13\x78\ +\x75\x61\xe1\x4d\x56\x29\xf3\x92\x34\xc9\x2d\x25\xf6\x88\x18\x51\ +\x54\x98\x93\x0b\x97\x14\x42\x4a\x36\x08\x03\x77\x73\x1b\x75\xbb\ +\xf6\x73\xa4\xac\x87\xea\x2a\x17\x2d\xad\x7e\x84\x61\xd6\xf5\xe9\ +\xa7\x4f\x3c\x46\x36\x08\x39\xf3\x60\x61\x2e\x8e\xfa\x4e\x1e\xbe\ +\x67\x07\x2d\xbd\x21\x1c\x10\xe8\x76\x38\xfe\xfd\x64\x43\xc3\x5e\ +\xcc\xd0\xad\x07\x7c\xa3\x75\x6d\x4c\x60\x29\xe5\xa3\xd3\x80\x55\ +\x0b\x5d\xa4\xc4\x87\x19\x73\x74\x73\x16\x43\xde\x37\x20\x31\x95\ +\x60\x77\x17\x07\xdf\xda\xc5\x96\xb7\xea\x71\xf4\x87\xf1\x0f\xf4\ +\x2a\x0c\xe8\x98\xf1\x66\x05\xd2\x47\xb3\x67\x8d\x86\xcb\x0a\x21\ +\x2d\x93\xc3\xdb\x2a\x78\xf6\xd7\x65\xd8\x85\xc4\x65\x18\xf5\x4d\ +\xad\xad\x3f\xe9\xb4\xdb\x3b\x81\x7e\xa0\x11\x30\xc6\xe2\x19\x15\ +\x78\x75\x61\xe1\xe2\x28\x29\x97\xc7\x2a\x70\xe3\xf2\x11\xa3\xc4\ +\x54\x5c\x12\x14\xde\x00\x39\x8b\x08\x76\x75\xb0\xf5\xd9\x6d\xfc\ +\x75\x7b\x27\x3e\xcc\x4f\x1e\x90\x32\xa8\x0b\x71\x20\x18\x0c\xee\ +\xf7\x78\x3c\xd5\x2e\xaf\xb7\x33\x2e\x2e\x2e\x75\x7e\x56\xd6\xbb\ +\x23\xda\x4c\xcd\x82\xdc\x62\x84\x90\xbc\xfa\xf3\xbf\xf1\xbf\x3b\ +\xda\xe8\x05\x3c\xba\xbe\xb5\xb2\xba\xfa\x29\x5d\xd7\x75\xa0\x0d\ +\xe8\x1a\x0b\x34\x22\x60\x21\xe5\xfa\x04\x60\xe9\x2c\x0f\xb3\x52\ +\x83\x8c\x38\xba\xd9\xf3\x61\xf5\x3a\xa4\xa2\xb2\xeb\x95\x9d\xbc\ +\xfc\x52\x03\x2e\x21\x71\x81\x0c\x84\xc3\x87\x5c\x1e\xcf\xbb\xf5\ +\xcd\xcd\x07\x06\xe6\x58\x08\xf0\x00\xbe\xa5\x99\x99\xc3\x6f\x96\ +\x55\x15\x2e\xc9\x83\xd9\x97\xe2\x6e\xed\xe4\xb1\x1f\x7f\x4c\x5d\ +\xab\x97\x5e\xd0\x1d\x6e\xf7\xa3\x55\xb5\xb5\x1f\x61\x06\xc9\x29\ +\xcc\x82\x22\x62\x8d\x08\x5c\x52\x52\x12\x4b\x28\xf4\xfd\x78\xe0\ +\xba\xa5\xa3\x5c\xd9\x5e\x5a\x02\xcb\xaf\xc3\xd3\xd4\xcc\x86\x07\ +\x3e\xa7\xa6\xc1\x4f\x2f\xe0\x37\x8c\x7d\x9d\x3d\x3d\x9b\x9a\xdb\ +\xda\x4e\x61\x46\xb1\x63\xa0\x7d\xd9\xc1\x84\xf8\xf8\xcc\x21\xf6\ +\xe2\x93\x60\xd9\x6a\x48\x4c\xe1\xf8\x8e\x0a\x7e\xfd\xf0\x61\x1c\ +\x86\xc0\x25\x44\x7b\x63\x5b\xdb\x8f\x3a\xba\xbb\x9b\x01\x17\xd0\ +\x30\x60\x77\x5c\x1a\x11\x58\xd1\xf5\x7f\x8c\x87\xb8\xc4\x68\x83\ +\x65\xb3\x3c\x0c\x9b\x86\x96\x5c\x09\xb6\x6b\x68\xde\xfb\x05\x3f\ +\xbf\xf7\x30\x0e\x03\x9c\x52\xf6\xf7\x38\x1c\x0f\x9d\x6c\x6c\x3c\ +\x84\x39\xa7\xba\x30\x2b\x9d\x31\xe7\x17\x33\x17\xc2\x65\x45\xc8\ +\x70\x98\x3f\x3e\xf9\x11\x5b\xdf\x6b\xa2\x07\xf0\xea\xfa\xce\x63\ +\x27\x4f\xfe\xd2\xef\xf7\x07\x80\x76\xa0\x63\xbc\xa0\xa7\x35\x72\ +\x48\x4b\xf9\x2f\xb1\x40\xd1\x3c\x17\x9a\x3a\x4c\xde\x5d\xb6\x16\ +\xf2\xd6\x72\xe8\xbf\x77\xf1\xcc\xd3\xb5\xf4\x00\x1e\x5d\xff\xa4\ +\xaa\xbe\xfe\x31\x8f\xc7\xe3\xc5\x4c\x0d\x2d\x44\x00\x6a\xb1\x6a\ +\x90\x7f\x25\x64\xcf\xc5\xdf\xd9\xcd\xe3\x3f\xdd\x49\xd5\x29\x8f\ +\x59\xf8\x7b\x3c\x1b\x8e\x9e\x38\xf1\x17\xcc\xd1\x6c\xc0\x1c\xdd\ +\x73\xd6\xb0\xc0\xeb\xd6\xad\xd3\xda\xeb\xeb\xbf\x11\x03\xac\x58\ +\xe0\x1c\xfa\xc0\xdc\x3c\xc8\xbb\x9a\xb2\x3f\xef\x62\xe3\x00\x6c\ +\x7f\x30\xf8\x7a\xc5\xb1\x63\x2f\xf0\x55\x39\xd7\x1f\x69\x27\x12\ +\x92\x63\x21\x7b\x0e\x0d\x7b\x8f\xf3\xe8\x03\xfb\xb0\x07\x05\x4e\ +\x29\xed\xed\x3d\x3d\x3f\x19\x28\xfc\x3d\x98\x29\x47\x1f\x3f\xe2\ +\x60\x0d\x0b\xdc\xda\xd8\xb8\x22\x66\x20\x9c\x97\xce\x3c\x2b\x9c\ +\x53\x67\xc0\xaa\x75\xd4\x7c\xb8\x97\xa7\x9e\xac\xa5\x1b\xa4\xc3\ +\xed\x7e\xea\x68\x6d\xed\x9f\x30\xb3\xce\x49\xce\x2a\xe7\xc6\x92\ +\x2f\x60\xf0\xd7\x4d\x3b\xf9\xc3\x3b\x0d\xd8\x01\xb7\xae\xef\xaf\ +\xae\xaf\x7f\x70\x20\x52\xba\x30\x57\x62\x39\xba\x95\xc8\x34\x2c\ +\xb0\x26\xc4\x4d\xb1\x40\xde\xcc\xb3\xc2\xd9\x62\x85\xab\xfe\x95\ +\xfe\xba\x7a\x7e\xf5\xc8\x71\xec\x40\xbf\xdf\xff\xfb\x01\x58\x1f\ +\x50\xc7\x38\x46\x21\xda\x30\x5a\x74\x4d\xd3\x1b\x5a\x7c\x96\xba\ +\x77\x1a\xe8\x05\xe1\xf6\xfb\x37\x57\x56\x55\xbd\x8d\x19\x29\x8d\ +\x8c\x23\x52\x22\xd1\xb0\x79\x46\xc0\xb7\x63\x80\x85\xd9\x67\x15\ +\x2d\xcb\xaf\xc7\x10\xf0\xc8\xbd\x7b\xcd\xe4\xaf\xeb\xdb\x2b\xab\ +\xaa\x5e\x01\x02\x40\x2d\xe3\x0c\xb9\x5d\x15\x15\xfd\x52\x88\xef\ +\x74\x08\xd1\xdc\x25\x44\x4d\x47\x4f\xcf\x6d\x95\x55\x55\x6f\x61\ +\xae\xe4\xd5\x4c\x32\x2c\x0c\x33\xc2\x05\x05\x05\x16\x05\xe6\x5b\ +\x80\x45\x59\x67\x00\x67\xcc\x85\xc5\x25\xbc\xf2\xc0\x56\x1a\x7b\ +\x74\x5c\x52\x9e\xa8\xac\xae\xfe\x4f\xcc\x91\xa8\x23\x92\x55\x78\ +\x18\xed\x29\x2f\xdf\x06\x7c\x0c\xcc\xc7\xbc\x72\xb2\x63\xee\x5d\ +\x47\xbd\x32\x39\x57\x0d\x01\x8e\x56\xd5\x5c\xab\x10\x9a\x55\x13\ +\xcc\x49\xf3\x03\x8a\x79\x7c\xb2\x6a\x1d\xcd\x7b\xca\xf9\xf8\xb3\ +\x7e\x1c\xa0\xb7\xb4\xb5\x3d\xa8\xeb\xba\x81\x09\x3b\xd1\xf3\x1d\ +\x2f\x70\x74\x82\x36\x22\xd2\xd0\x90\x36\x8c\x7c\x2b\x30\x2f\xdd\ +\x47\x94\x36\xb0\x4e\xcc\xb5\x21\x63\x93\xd8\xf8\xf8\x31\x7a\x01\ +\xa7\xd7\xfb\xdb\xf6\xae\xae\x56\xa0\x93\x71\x56\x3a\x53\xad\xa1\ +\xc0\x8a\xb2\xca\x02\x5c\x72\x3a\x9c\x15\x05\x6c\xd7\xf2\xf9\x96\ +\xdd\xb4\xf6\xea\x78\x85\x68\x38\x56\x53\xf3\x47\xcc\x45\xea\x9c\ +\x0b\x80\xa9\xd2\x70\x8b\xd6\x4a\x2b\x90\x93\x12\x30\x7f\x9a\x6b\ +\xc3\xc0\xc2\x8b\xbf\x6f\xa1\x1f\xe8\xeb\xef\x7f\x12\x33\x45\x34\ +\x31\x49\xa9\xe2\xeb\xd4\x10\x60\x05\xe6\x5a\x80\xcc\xc4\x81\x69\ +\xb9\xe4\x2a\xf6\xbe\x5f\x86\xc7\x90\xf8\x0c\xa3\xb2\xb6\xa1\xa1\ +\x0c\xb3\x26\x1e\x75\xdf\x79\xa1\x6a\x10\x70\x6e\x6e\xae\x55\x85\ +\x04\x05\x48\x4b\xd0\x21\x39\x1b\x11\x9f\xc6\xeb\xaf\xb7\xe0\x02\ +\xba\xec\xf6\x8d\x98\xa3\xda\x3e\x15\x9d\x9d\x0c\x0d\x02\x4e\x8b\ +\x8f\xcf\xd1\x30\xa7\x6d\x7a\x42\x08\x16\xad\xe4\xe8\x87\x87\xe9\ +\xf3\x0b\x82\x42\x34\x34\xb5\xb6\xd6\x60\xa6\x8d\x29\xba\x62\x98\ +\xb8\x06\x01\x0b\xc3\xc8\xd1\x80\x94\xb8\x10\x51\x16\x05\x16\x14\ +\xf1\xf6\x9b\xcd\x78\x00\xa7\xc7\xf3\xda\xc0\x63\x23\xde\xae\x5f\ +\x0c\x1a\x04\x2c\xa5\xcc\xd1\x80\x8c\xc4\x10\xcc\x58\x8c\xbb\xbd\ +\x9b\xe6\xf6\x10\x5e\x29\xbd\x75\x8d\x8d\x3b\x31\x77\x2a\x81\x29\ +\xe9\xe9\x24\x69\xf0\xa2\xa5\xaa\x33\xa2\x80\xd4\x78\x1d\x66\xe6\ +\x72\x70\x67\x2d\x3e\x20\xa4\xeb\x3b\x06\x8e\x53\x7a\xa6\xa2\x93\ +\x93\xa9\xc1\x21\x2d\xc4\x2c\x15\xb0\x46\x09\x64\xd6\x42\xde\xfb\ +\x73\x17\x3e\xc0\xe9\x72\x7d\x80\x59\x42\x0e\xb3\x57\xbc\xb8\x34\ +\x08\x58\x51\x94\x18\x05\x48\xc9\x48\xa0\xbf\xc7\x8d\xdd\x69\x10\ +\x90\xd2\x5b\xd7\xd4\x54\x89\x59\xc8\x5f\x74\x79\xf7\x6c\x0d\x0e\ +\x69\x29\x13\x00\xe6\xda\xe6\x72\xe2\x8b\x36\xfc\x80\xae\xeb\xbb\ +\x30\x0b\xf9\xbe\x21\x6f\x5f\x84\x1a\xbc\x68\x29\x4a\x82\x0a\x24\ +\xcf\x48\x63\xf7\x67\x3d\x04\x00\x8f\xcf\xf7\x29\x66\x38\xbb\xa7\ +\xa2\x83\x93\xad\xc1\x21\x0d\xd1\x00\x7e\x5f\x98\xb2\x0a\x1f\x41\ +\x90\x1d\x76\x7b\x39\x26\xec\x45\x1f\xce\x30\xb4\xb4\x4c\x52\x81\ +\xb2\xbd\x9d\x84\x81\xb0\x94\x9d\x4e\xa7\xd3\xc9\xdf\xc9\xe8\xc2\ +\xd0\x39\x2c\x00\x76\xef\x75\x11\x00\x42\xa1\xd0\xfe\x81\xbf\xfc\ +\x7d\x02\x4b\x45\xd9\xda\x0f\xf4\x06\x04\x2e\x90\x0e\x97\xeb\x7d\ +\xcc\x63\x9b\x8b\xba\xd8\x38\x53\x83\xfe\x6d\xa9\xb5\xa3\xe3\x40\ +\x46\x66\x66\xb3\x4b\xd7\x85\xbd\xbf\xff\x99\xfa\xe6\xe6\xa3\x98\ +\x3b\xa3\x8b\x3e\xff\x9e\xd6\x48\xb7\xda\xa9\x03\x2d\x88\x79\x44\ +\x7a\x5e\xce\x97\xa6\x42\xff\x0f\x2a\xee\xbe\x18\x11\xda\xf3\xf0\ +\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x0f\x82\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\ +\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\ +\x00\x00\x0f\x39\x49\x44\x41\x54\x68\x81\xed\x58\x79\x58\x54\x57\ +\x96\xff\xdd\xf7\xaa\x8a\x5a\x29\x28\xaa\xd8\x15\x50\x30\xa8\x88\ +\x48\x30\x2e\xb8\x20\xe2\x16\x45\x63\xa2\x26\x5f\x67\x57\x27\x63\ +\x77\x96\x4e\x62\x88\xf6\x24\xe9\x90\xcc\x74\x8f\x8a\x89\x26\x93\ +\xe9\xc4\x24\x33\xed\xd8\x76\xda\x98\x2f\x89\x89\x13\x63\xa0\x44\ +\x30\x2a\x1a\xb7\x04\x05\x15\xb5\x40\x40\x0a\x8a\xad\x8a\xaa\x7a\ +\xb5\xbe\x77\xe7\x0f\x28\xac\x0d\x34\x4b\xcf\x5f\x7d\xbe\xef\x7e\ +\x75\xeb\xbc\xfb\xee\xfd\xfd\xde\x39\xf7\x9c\x73\x2f\xf0\x0f\xf9\ +\x87\xfc\x2c\x21\x3f\x77\x82\xa2\x4d\xd1\x6a\xb0\xa2\x05\x82\x08\ +\x33\x54\x8a\xe8\xe9\x4a\x89\x3a\x45\xca\x4a\x45\xa0\x44\xdc\xc7\ +\x75\xf1\xbd\xde\x1e\x23\x15\xbc\x2d\xc4\xc5\x94\xf3\x3c\xca\x0f\ +\x6f\x30\xd5\x82\x80\xfe\x12\xe0\x81\x9f\x48\xa0\xb4\x14\x4c\xb5\ +\x2c\x6e\x49\x66\xca\x84\xd7\x26\x25\xce\xca\xca\x49\xcf\xc7\xc8\ +\xe8\x0c\x91\x13\x1c\x8c\xb4\x11\x2e\x38\x40\x21\x20\x12\x31\x50\ +\x93\x18\xb4\x3b\x5a\x60\x68\xbf\xe0\xfd\xa1\xe1\xb8\xab\xb6\xf1\ +\x84\x53\xe0\x85\x37\x5d\x1e\xf7\xbb\x47\x7f\x67\xe9\xfd\x7f\x27\ +\x70\xf7\x1b\xc9\xf7\x15\x4c\xb8\x77\xc7\x92\x89\x0f\x45\x69\xd4\ +\x71\xec\x61\xd7\x67\x38\xe1\xfe\x1a\x17\xdd\xa7\xe0\xa4\xdc\xcd\ +\x81\x42\x7f\x63\x04\x06\x49\x4c\x3a\x32\x25\xb9\x98\xa2\x58\x88\ +\x68\x1a\x8b\xa3\x97\x0f\xb8\x2b\x6a\xf6\xf2\x2e\xaf\xab\x4c\x63\ +\xd3\xfd\xe1\x93\xd2\x3a\xf7\xdf\x9d\x40\xd1\xa6\xc4\x91\x53\x32\ +\x67\xef\x7b\x3c\xff\xa5\x89\x2e\x99\x9d\xf9\x8b\x73\x33\x4e\x38\ +\x0f\x42\x00\x1f\x3a\x98\x02\xe0\x7d\x24\x08\x88\x70\xb3\x1f\xcb\ +\x26\x63\xa1\xfa\x61\x8c\x8b\xb8\x0b\x07\xcf\x7c\xe4\x3c\x56\xfb\ +\x8d\x51\xf0\x90\x07\x2a\x37\xb4\x7f\xf7\x77\x23\xb0\xf2\x9d\xac\ +\x79\x0f\x4c\x7f\x7a\xff\xac\xb1\xc5\x11\x6f\xdb\x9e\xc3\x11\xd7\ +\x17\xa0\x43\xb9\x31\xc5\xe0\xd7\x87\x40\x00\x01\x03\x04\x48\x3f\ +\x29\x0a\x10\x9e\x20\x41\x94\x8a\x15\xba\xa7\xc0\xf5\xd9\xf1\xc9\ +\x37\x3b\x38\x87\xa3\xef\x9f\x2b\x4a\x4c\xbb\x87\xc3\x51\x50\xaa\ +\x53\x32\x0a\x32\xaf\xb2\xc4\xf4\xb9\x4f\xc7\xde\x0a\xfc\xaf\x76\ +\xe4\x3e\xb5\xa1\xf8\x3f\x76\x4b\xe2\xc5\xe2\x12\x6b\x31\x1a\xbc\ +\xe7\xa0\x63\x93\x90\x2e\xce\x46\x86\x38\x07\x29\xa2\x4c\x68\xd8\ +\x38\x10\x10\x70\xb4\x0f\x94\xd2\x7e\x12\x14\x21\x5f\x1f\x74\x80\ +\x0c\x25\xb0\x79\xcd\x38\x6d\x39\x04\xad\x3c\x01\x4b\xb3\x1f\x13\ +\x5f\x6b\xab\x5f\x18\x37\x53\x90\x19\xca\xed\x87\xc3\x7c\x14\x52\ +\xa8\xd0\x3d\xc6\x88\x49\x35\x01\x1e\x6c\xac\xb0\xbf\xe6\x7b\x34\ +\xac\x05\x56\xbd\x97\xb5\xee\xf5\xe5\xff\xf3\xce\x79\x71\x0d\x5b\ +\xc3\x1f\xc0\x5c\xf9\x2a\xdc\x29\x2e\x04\xe7\xb6\xc2\x60\xae\xf7\ +\xf6\xd8\x3b\x04\x9e\x7a\x20\x93\x29\xc5\x89\xea\x34\xa2\x91\xc5\ +\xe2\x7b\xd7\x11\x54\xdb\x3e\x47\x2d\x77\x1c\x10\x68\x80\x25\xfa\ +\xad\x41\x42\xdc\x6b\x9c\xe2\x2e\x2c\xd2\x3e\x8a\xbd\x87\xde\xe5\ +\x8c\xa6\x6b\x9b\x2a\xd6\x77\xfd\xab\x0f\x43\xd1\xe6\xb8\xa9\x82\ +\x88\x7e\x90\xa4\x4d\x19\x35\x6a\xe4\x58\xf9\xd1\x33\x07\x8d\x87\ +\x5e\x30\x25\xde\x92\xc0\x82\xb7\x93\x16\xbf\xb6\x74\xe7\xbe\xb1\ +\xc9\xb9\xa2\x2e\xbe\x0d\xbc\x93\xa7\xdf\x7c\xff\xb1\xe7\x48\xc3\ +\x97\x1d\x3d\x56\xd3\x67\xc4\x8b\x5a\x4a\x49\x0b\x00\x05\x18\x3a\ +\x96\x46\xa0\x40\xc5\xa8\x67\xe6\x65\x15\x60\x46\xd6\xdd\x32\x56\ +\x2a\xc2\xc7\x3d\x6f\xe2\x82\xfd\xe4\x20\x60\xe2\x47\x24\xc0\x3a\ +\x3c\xc1\x28\x79\x16\x8a\x75\xab\xf1\xa9\xfe\x7d\xae\xbd\xb3\x79\ +\x1d\x23\x11\xf4\x5e\x81\x6c\x93\x47\x44\x2e\x9d\x96\x53\x28\x1d\ +\x1d\x3f\x81\xd8\xed\x7d\xf8\xab\xfe\xad\x73\x87\xd6\x77\xe6\x0e\ +\x4b\xa0\x70\x6b\x42\xca\xfa\x05\x9b\x2f\xdf\x9d\xf5\x70\xc4\x55\ +\x5b\x2d\xfe\xac\xdf\xe4\x3e\xd1\xa4\xdf\x27\xe2\x85\x57\xcb\x5f\ +\xe8\xbe\x34\x14\xe9\x95\xa5\xe3\x25\x3d\xb2\xce\x95\x90\xd0\xd7\ +\x73\x32\xf2\x13\x96\x4f\x5f\x23\xab\x75\x1f\xc3\xa7\x5d\x7f\x02\ +\xcf\x7b\x02\x2c\x01\x81\x80\xf8\x59\x02\x02\x90\x21\x9f\x88\xb9\ +\x31\xab\xf0\xd1\xff\xbe\x03\xa7\x87\xc3\xa4\xec\xe9\xde\xac\x94\ +\xc9\xa2\x0b\x3d\x27\xe0\xf4\x70\x50\x79\x63\x50\x73\xae\xe2\x4b\ +\xfd\x7a\xd3\xb2\x21\x09\x94\x96\x82\x39\xa2\xd6\xfd\xb0\xff\x69\ +\x43\x96\xfe\xda\x5e\xef\x3b\x07\x5f\x36\x78\x1d\xf4\xde\xc3\x1b\ +\xdb\xeb\x86\x02\x1e\x76\x0e\x65\xdc\x6a\xa9\x58\xba\xfd\xc1\xc5\ +\xcf\xc8\x95\xd1\x91\xe4\xbf\x8d\xaf\xc3\xe2\xea\x0e\x1b\x99\x06\ +\x37\x3a\x4f\x30\x25\x66\x3e\xa6\x46\x2d\x82\xc5\xd5\x85\x0e\x57\ +\x0b\x8e\x1b\xbf\x42\x9f\xb3\x17\x93\x62\x66\x81\xf6\x01\xe7\x2e\ +\x9e\xdc\x56\xf9\x82\xe9\xf9\x21\x09\x14\x96\xe9\x1e\x87\x92\xfe\ +\x89\x10\xf0\xb0\x93\xbf\x69\xac\xb1\x4f\xfe\xd4\x38\x3d\xbf\x2c\ +\x2e\x4d\x10\xd1\xf2\x59\xd3\x96\xa4\xe6\xa5\x17\x88\xfe\xb3\xe5\ +\x45\xd8\x3d\xd6\x00\xd7\xf1\x85\x5c\x32\x48\x84\x20\x5f\x57\x8c\ +\x26\x4b\x1d\x6e\xd8\x0c\x83\xd1\x6b\x5a\xdc\x42\x74\x1b\xbb\xdc\ +\x97\x1b\x2f\x6c\xa8\x2c\xe9\xd8\xee\x5b\x23\x20\x0a\x15\x97\x26\ +\xca\xbd\x12\xe1\x38\x71\x31\x12\xc2\x63\xcb\xa1\xf5\x9d\xcf\xd5\ +\x57\x75\x86\x09\xf4\xb7\x27\xd7\x2a\xec\xe6\xc4\x02\xd1\xee\x56\ +\xe3\xd5\x7b\x22\xe4\xd2\xa8\xc2\x11\x2b\xd8\xf3\x7d\x35\x03\xee\ +\x04\x80\x0e\x80\xa6\x03\xfd\x81\xe8\xd5\xd2\xd7\x00\xab\xab\x37\ +\x20\x7a\x65\xa8\xb3\xd1\x69\x6a\x73\x58\xac\x3d\xbb\x1b\x2b\xb8\ +\x7a\xdf\x1a\x8c\xff\x82\x9c\xc2\xb3\x16\x94\x88\xa8\x88\xfe\x9b\ +\xfe\xf9\xce\x57\x7e\x2a\x70\x7f\x39\xfa\x3b\x4b\x2f\x71\xf3\xd3\ +\xaa\x8e\x7d\x69\x68\x6e\xbb\x42\x97\xc7\x3e\x31\x00\x74\x20\xac\ +\xd2\x9b\x20\xfd\x01\x07\x8f\x91\x30\x32\xd8\x39\x9b\xc0\x82\xb4\ +\xf9\xcf\x1f\x40\x00\x94\xbc\x45\x08\x7a\x2a\x9f\xeb\xfc\xfd\x2f\ +\x01\xde\x27\xfa\x8d\xbd\x16\x81\xa7\xcb\x2a\xaa\x3f\x75\x44\x41\ +\x87\x71\x8a\x29\xa1\x80\x07\x2c\x42\xfc\xc1\xfb\x25\x41\x29\x23\ +\x83\xdd\x61\x63\x29\x4f\x8c\x43\x13\x00\x79\xc9\x6b\x97\x27\xfd\ +\x92\xd5\xa2\x4f\x58\x2a\x71\xf0\x1e\x5e\x5e\x5d\xbb\x9f\x5f\x9a\ +\xb0\x06\x32\xa2\xf0\x03\x8b\x9b\x49\xce\xbf\xf9\xf4\x94\x80\x25\ +\x62\xb8\xdc\x0e\xa9\x58\xa1\xba\xe1\x3f\xaf\xc8\xff\xcf\xa1\x17\ +\x3b\xfe\x08\x00\x85\x6f\xc4\x9e\x04\xa5\x29\x44\x60\xd6\xce\xe4\ +\x3a\x0e\x94\x96\x42\xf8\xa9\xc0\xa7\xbd\x99\x2c\x93\x0b\xee\x8d\ +\x20\x42\xc9\xd4\xbc\x42\x3e\x2f\x7d\x0e\x7b\xa4\xf3\x0b\x78\x78\ +\xd7\x6d\xb9\x0e\x28\x81\x84\x48\xe1\x72\x3b\x40\x41\x1d\x5f\x3f\ +\x73\xd5\x35\x24\x81\x41\x61\xa8\x76\xd5\xfc\x75\x71\x67\xeb\x8f\ +\xee\xf9\xb6\x55\x30\xcf\xdd\x4a\xfe\x28\xb7\x89\x76\xee\x2f\x6d\ +\xe3\xc2\x8e\x1f\x42\xe6\x6e\xd6\xad\xa0\xd4\xf5\xee\xc8\xb4\x74\ +\xe5\xbc\xbc\x95\x52\x33\xdf\x89\x5d\xcd\xff\x0e\xb3\xb3\xab\x3f\ +\xea\xdc\x86\xeb\x40\x00\xa4\x62\x05\x6c\x4e\x2b\x40\xd0\x1d\xbc\ +\x46\x78\x02\x14\x9a\x35\x63\x5f\xc1\xea\xb1\x54\xf1\xbd\xed\x5b\ +\xc5\xfe\xb3\x3b\xdf\xa8\x39\x57\xb1\xb9\x70\x5b\xec\x7b\xac\x5b\ +\xd8\x56\xb1\xa1\xab\x2d\xec\x7b\x03\x32\x67\xab\xf6\x4e\x86\x21\ +\xef\xc9\x15\xca\xb1\x45\xb3\xee\x55\x24\xab\x47\xa3\xc2\xf4\x37\ +\x5c\xee\x3b\xe7\x17\x75\x70\x4b\xd7\xf1\x35\x29\x2b\x83\xcb\x65\ +\x07\x08\x8c\xc1\x6b\x31\xc1\x8a\x95\x7b\xc1\x32\x02\x51\xb9\x28\ +\x87\x25\xc6\x78\xec\xf7\x7c\x88\xe5\x53\xd7\x4a\xdf\xfb\xb5\x5e\ +\xb9\x74\xce\x23\xcf\x4a\x15\xaa\xab\x45\xdb\x74\x9f\x16\x6e\xd1\ +\xe6\x06\xbf\x3b\x38\x29\x65\x2a\x59\x41\x9c\xb7\x78\xe6\x43\x8a\ +\x71\xda\xc9\x38\xdf\x77\x0c\xcd\x5c\xc3\x8f\x8a\x3a\x3e\x4b\x40\ +\x00\x22\x88\x0c\x4e\x37\x07\x50\x72\x3d\x78\xad\x90\x6a\x74\xc4\ +\x74\x6d\x7c\xa4\x32\xe6\xa9\xc2\x9c\xe5\xe2\x8f\x6d\xdb\x71\xdd\ +\x7b\x09\x07\xb9\xdd\xb8\xe4\x39\x8d\x69\xf1\x0b\x99\xd5\x77\xbd\ +\x24\x56\x27\xc4\x64\xb6\x77\xb5\x3e\xa2\x9b\xe3\x59\x9e\x3a\x47\ +\xd5\xfe\xd8\x0c\xfb\x95\xaa\xaa\x9b\x1b\xff\xd1\x7c\xfb\x16\x03\ +\x2b\x3f\x7b\xb1\xf1\x54\xc6\x65\x43\x6d\x74\x4a\xf4\x1d\x6c\x61\ +\xd2\x0a\x12\x29\xd2\xc0\xe2\xea\x86\xc3\x6b\xbf\x2d\xd7\xf1\xe9\ +\xe3\x14\x23\xc1\x3b\x05\x6a\xea\x35\x7e\xd9\x54\xc1\x55\x0e\x4b\ +\x60\x54\xa1\x3c\x33\x3e\x21\xed\xe1\xac\x31\x93\x23\xbe\xe6\x76\ +\x0d\xea\xbb\x05\x23\x8e\x3b\xbf\x42\xb5\xf3\x73\xa4\xa9\xc7\x92\ +\xd5\xb9\xff\x22\x1e\x33\x3a\x3b\xd1\xea\xea\x59\x76\xc6\x61\x7e\ +\x32\xb5\x48\xe1\xca\x98\xaf\xaa\xbb\x56\x61\xf7\x54\x55\x81\x36\ +\xe9\xed\x97\x1b\xbf\xe1\x3e\x88\x2f\xe0\x0f\x5c\x6b\xa9\xd3\xd5\ +\x5f\x39\x9d\x16\x2d\x8d\xa3\xf9\xc9\x8b\xd9\x44\x79\x1a\x38\x8f\ +\x0d\x76\x97\x39\xf0\xec\x40\x43\x93\x1a\x11\x08\x12\x15\xa9\x70\ +\x72\x0e\xb7\xa5\xaf\xfb\x13\x43\x85\xfd\xf4\xb0\x04\x52\xe6\xa9\ +\xf2\x46\xa5\xdd\xb1\x22\x71\x44\x8a\xa4\xda\xf1\x79\xf0\x63\x38\ +\xa8\x0d\xb5\xee\x63\x38\xc8\xed\x86\x28\x42\x82\x7b\x33\x9f\x10\ +\x17\x64\x2f\x53\xf1\xac\x77\x6e\xab\xa9\x71\x7d\xca\x7c\x99\x36\ +\xa5\x30\xa2\xae\x49\xef\xe8\x03\x00\x43\x39\xd7\x6e\xf8\x86\xdb\ +\x3b\xb2\x40\xf4\xe7\x56\x93\x81\x9c\xbf\x72\x6a\x22\xeb\x65\xf8\ +\xec\xf8\x7c\xf1\x1d\xd1\x93\x20\x08\x3c\x2c\xce\x1e\x50\x41\x08\ +\x71\x1d\xdf\x46\x1f\xa9\x1e\x83\xde\xde\x6e\x87\xd5\xd1\xb7\xcb\ +\x50\x61\xbf\x3c\xbc\x05\xe6\x29\xe6\x8c\xcd\x9c\xb8\x58\xaa\x95\ +\xb1\xa7\x5c\xfa\x10\x02\x3e\xe1\xe1\x45\xa3\xa7\x0e\x7a\xfb\x1e\ +\xb4\xd3\x26\xcc\x18\xb9\x58\xb4\xe2\xce\x75\x12\x99\x5a\x31\xb9\ +\xbd\xa3\xe5\xe9\xc4\xf9\x4c\x6e\x6a\x91\xfc\x6a\x53\x39\x67\x04\ +\x00\x83\x9e\xb3\x36\x96\x73\x15\xe3\xa7\x45\xbe\xd5\x6e\x33\x76\ +\x5c\x6a\xfa\x21\xc7\x6a\x36\xb3\x29\x9a\x4c\x49\x4e\xdc\x0c\x88\ +\x20\x46\x9f\xb3\x07\x3c\xef\x1d\x74\x1d\x9f\x7b\xa5\x45\x8d\x47\ +\x5b\x47\x8b\xcb\xe5\xb4\xbe\x63\xd0\x73\x01\x01\x24\x84\x40\xda\ +\x42\xf9\xb2\xec\xac\xa9\x05\x4e\xa5\x9d\xd4\xb9\x4f\x86\x47\x1f\ +\x70\x6c\x04\x4c\x9e\x56\xd4\xd8\xbf\xc6\x59\x47\x35\xc6\x68\xb3\ +\x99\x5f\xe5\x3d\x2b\x4a\x4a\x48\xcd\xec\xed\xed\x7a\x24\x66\xa6\ +\xf3\xbe\x51\x85\xca\x8e\x47\x67\xd8\x1b\xaa\xaa\x40\x1b\xaa\xac\ +\x1e\x43\x85\xfd\xf4\xa3\xd3\xed\xdb\xeb\xbd\xee\xef\x9b\x8c\x57\ +\xd3\x8d\x6d\xd7\x35\x1a\x45\x3c\x3b\x31\x31\x9f\x28\xc5\x6a\x38\ +\xdc\x36\xb8\xdd\x8e\xc1\xf9\x33\x34\x39\x68\xbc\x71\x59\xf0\xf2\ +\xae\x3f\x18\xf4\x9c\xd5\x1f\x4a\x48\x18\x25\x22\x64\xa8\xe4\xd1\ +\xe4\x86\x70\x25\x14\xb4\x7f\xf3\xdb\x64\x3e\xdf\x35\x79\x9b\xf1\ +\x51\xd7\x56\xec\x23\xef\x63\x86\xb2\x98\x94\xac\xd8\x26\xeb\xb3\ +\x9b\x27\x6d\xde\xf3\xf4\xe7\x47\x08\xac\x80\x29\xd2\x37\x5d\x7f\ +\x72\xec\xfa\x0a\xc0\x57\x73\x36\x61\x62\xed\xa5\x93\x2f\xd5\x37\ +\x9c\x2b\x4e\x49\x4a\x67\xf2\x12\xe6\x49\x1c\xde\x3e\x18\xba\xeb\ +\x60\xea\x6b\x85\x54\x24\x83\xd3\xcb\x49\xa2\xd2\xba\x3a\x82\xf1\ +\x86\xe6\x01\x06\x23\x55\xd2\x28\xf4\xf0\x1d\x81\xc0\x03\xe2\xf3\ +\x80\x9f\xc2\x77\xc6\x0d\xd4\xc7\x48\xe2\x31\x41\x36\x1d\x06\x73\ +\x1d\xbe\xfc\x76\x27\xd7\xe7\xee\xa9\x67\x81\x7f\x0a\x6f\x4e\xe0\ +\xf0\x46\xd3\x0f\x00\x56\x15\x6c\xd1\xc5\x5f\xbd\x7e\xfe\xb9\x6b\ +\x2d\x17\x7f\x9d\xa4\x1d\xc1\x66\x24\xe6\xc8\x73\x62\x67\x82\x11\ +\x58\x08\x54\xb0\x7e\xb2\x2a\xf4\x0a\x24\x94\x00\x4f\x13\x23\x23\ +\xa2\xd1\xeb\x34\x0d\xde\x22\xf8\x67\xcc\x9b\x91\xc2\xa7\xbf\x19\ +\x31\x14\x4c\x24\x96\x68\x56\x63\x7c\xc4\x14\x1c\x3c\xbb\xc7\xf5\ +\x5d\x6d\xa5\x95\x0a\x78\xa2\xb2\xa4\x33\x34\x1a\x84\x91\xaa\x17\ +\x3b\xdb\x01\x6c\x28\x2e\x4d\x7c\xad\x8d\x5e\x7f\xb8\xc5\x74\xfd\ +\xe5\x18\x55\x6c\x54\xa2\x66\xa4\x12\x14\xe6\x70\xef\x84\x10\xa0\ +\x94\xc4\x28\xc5\x91\xb0\x58\xbb\x06\x08\xf8\x85\xb4\x30\xae\x03\ +\x01\x60\xc0\x62\xba\x72\x11\x16\x44\x3d\x84\x33\x86\x6a\xbe\xec\ +\xf8\xb3\x2e\xce\xcd\x95\x39\x88\x64\x73\x4d\x49\xab\xe3\x76\xc0\ +\xfb\xcb\x40\xc9\xb2\x03\x14\xef\xcf\x29\xa3\x8b\x7a\x6d\xa6\x0f\ +\x00\xda\x79\x4b\x02\x8b\xde\x4e\x8f\x70\xbb\x2d\x32\x39\x1b\x09\ +\x8b\xa7\xa7\xff\xe8\x17\xe0\xfb\x24\x24\xd5\x13\x0a\xa8\x98\x28\ +\x2c\xd3\x3c\x81\x5d\xc7\xb7\x0a\x17\xcf\x9f\x63\x89\x20\x1a\x5b\ +\xb9\xd1\xd4\xfc\x63\x81\x87\x08\x01\x3d\x8c\xce\x03\x00\x92\x80\ +\xfe\x03\x97\x43\xe6\x7d\x51\xbf\xc1\x54\xea\x1b\x12\x50\x4a\xf0\ +\x2e\x6b\xa2\x52\x19\xe5\xb4\xf1\x66\xf0\xbc\x67\xe0\x9c\x8a\xfe\ +\xa3\x1f\x7f\xf3\x3a\x84\xf0\xfd\x97\x53\x64\x40\xdf\xe7\xea\xc1\ +\x3e\xd3\x0e\x4c\x1b\x3f\x9f\x21\x2c\x38\x10\xaa\xf8\xd9\xe0\x83\ +\x85\x82\x38\xe4\x9e\x56\x4a\xf0\xaa\xbf\x3a\x80\x80\x97\xa7\x09\ +\x2a\x95\x5a\x30\x7b\x3b\xfd\x40\x0f\x00\xe7\x6f\x02\xf7\xd7\xf5\ +\x93\x22\xa8\xe9\x39\x08\xc2\x52\xdc\x35\xad\x40\x46\x59\xfe\x8b\ +\xa2\x4d\xd1\xea\x5f\x12\x7f\x61\x59\x6c\x19\x05\x89\xa6\xc0\x6f\ +\x86\x24\x40\x08\x4d\x8c\x54\x47\x31\x66\x4f\x97\x1f\xb8\xc0\xaf\ +\xed\xaf\xc7\x80\x9e\xf0\x00\x78\x8a\x3d\x2d\xdb\x31\x39\xb5\x90\ +\x64\x8c\x9f\x90\x42\x45\xe2\x93\x0b\xde\x4c\xd6\xfc\x32\xe0\x75\ +\x9b\x08\xb0\x1e\x84\x7a\x1c\x22\xc9\xce\x21\x09\x50\x86\x49\x56\ +\x28\x55\x92\x5e\xb7\x29\xc0\x4d\x62\x98\x78\xcc\x55\xaf\xba\x49\ +\x42\xf0\x07\x8e\x41\x37\xb3\xba\xcd\xd8\x73\x7d\x3b\xe6\x65\xdd\ +\x27\x49\xcb\xcc\x18\xe5\x15\xdc\xa7\x0a\xb7\xc4\x8e\xfe\xa9\xc0\ +\x0b\x4a\x53\xa5\x73\xcb\x74\x3b\x09\x8b\xa7\x20\xa2\x0e\x81\x92\ +\xb5\x35\xcf\x07\x06\x85\x40\x0b\x80\x8e\x90\xcb\x95\x62\x8b\xa7\ +\x1b\xe0\x09\x24\x54\x8a\x22\xf5\xfd\x78\x4c\xf7\x0a\xa6\x2b\x17\ +\x63\xb6\x7a\xf9\x00\x31\x04\xed\x0d\x32\xe8\x62\x9d\xdc\x0d\x7c\ +\xd6\xfc\x2e\xe6\x65\xad\x12\xe7\x4e\xca\x4f\x25\x2c\xbe\x2f\x2a\ +\xd3\x3d\x55\x5a\x1a\x5a\xba\x0f\x27\x73\x36\xc5\x4e\x14\xab\x5c\ +\xf5\xb3\xc7\x2f\x7d\x80\x55\x32\x52\x08\xe4\xd2\xe1\x12\xd3\x5f\ +\x82\xc7\x05\x94\x12\xa3\x16\xc9\x7e\x93\x99\x31\x29\xd3\xcc\x74\ +\x22\x9a\x8d\xc3\x2a\xed\x6f\x61\xef\xb0\x7b\x3f\x3b\xf8\x21\x73\ +\xe2\x7c\x05\x8a\xb2\xee\x83\xd5\x6b\x46\xb7\xb3\x3d\xa0\xa6\x27\ +\x83\xd7\x86\xfd\x3a\x9b\xdb\x8c\x06\xf3\x59\x4c\x4b\x5e\x48\x92\ +\x12\xd3\x24\x6d\xdd\xd7\x67\x5f\x83\x64\x4d\x5a\x91\xdc\x92\x92\ +\x1f\x7b\xa9\xa9\xca\xec\x1d\x1a\x78\xfc\xf8\xd1\x8b\xe4\x3b\x92\ +\x34\x29\x9b\x57\xe6\xaf\xd3\x69\xd4\x3a\x51\xe3\xf5\x06\x9b\xcd\ +\x69\x99\xd9\x34\xa3\xbf\x40\x0c\xfc\xe8\x7e\x32\x77\x9b\xee\xcc\ +\x9a\x7b\x36\xe6\xc6\xa8\x12\x60\xec\xba\x8e\x43\xc7\xf7\x39\x6e\ +\xf4\x18\xbe\x10\xb3\xf4\x79\xc1\xcd\x14\xe9\xb4\x49\xef\xdd\x53\ +\xf4\xb8\xfc\x40\xc7\x2e\x34\xdb\x2f\x85\x24\x32\xff\x70\x4b\x04\ +\x40\x04\x31\x26\xeb\x8a\x70\x87\x3a\x17\x17\x8d\x67\x51\xd7\x70\ +\xda\x66\xb3\x58\x59\xca\xe0\x38\xc3\xd3\x2a\x4a\x98\xab\x94\x0a\ +\x3c\x03\x26\x9a\x12\x3e\x97\x61\xc5\x4b\x46\x44\x8f\x8a\x1e\x97\ +\x96\x27\x8d\x8f\x4a\x62\x28\x05\xca\x4f\x7f\xc2\x19\xcd\xcd\xcb\ +\xf4\x25\x1d\x61\x2b\xcb\x20\x02\xb1\x37\x1e\x5c\xf0\x4c\xe2\x55\ +\x43\xbd\xe3\xbb\x2b\xfa\x6b\xbc\x97\xac\x3d\x5c\xd2\x31\x58\xd1\ +\xcd\x7b\x43\xfb\x4a\x5c\x4c\xca\xc6\xbb\x67\x3d\x28\x3f\x64\xda\ +\x8b\x46\x6b\x5d\x48\x46\x1e\xcc\x1b\x7e\x09\x4f\x25\x8a\x42\x96\ +\x66\x2a\x46\x47\x4e\x40\x9f\xb3\x07\x1d\xbd\xad\xe8\xb5\x76\x0a\ +\x02\x4f\x39\x50\x02\xb9\x58\x29\xd1\xa8\xe2\x24\x71\xea\x24\x98\ +\x5d\x26\x58\x5d\x66\x24\x2b\xd3\x51\x53\xa7\x77\xb4\x76\x1b\xd6\ +\xea\x4b\x3a\x3e\x1a\xca\x62\x81\x04\xb6\xc4\x52\x96\x15\x39\xbd\ +\xd4\xfb\x44\xe5\x7a\xd3\xee\x70\xd7\x2b\x73\xb7\x6a\x7f\xaf\x8b\ +\x4a\xde\xb0\x68\xc6\xfd\xf2\x0b\xd6\x1a\x9c\xed\xaa\x06\x28\x0d\ +\xad\x95\xfc\x48\xf8\x48\x11\xb0\xd0\x4a\x13\x10\x13\x11\x0f\x19\ +\xab\x84\x84\x89\x80\x57\xf0\xc0\xe5\x71\xc0\xec\xe8\x42\x8f\xbd\ +\x1d\x69\x51\xe3\x30\x26\x3a\x17\xc7\x2e\x94\x3b\x4c\x96\xd6\x75\ +\xfa\x17\x4d\xbb\x82\x31\x0c\x49\xa0\xb0\x2c\x76\xb9\x60\xa7\x15\ +\x55\xa5\x9d\xb6\xe1\xde\x99\x5f\xa6\xbd\x3f\x42\xaa\xfe\xaf\xc2\ +\x29\xc5\x32\x2a\x15\xc8\x51\xe3\xfe\x81\x8b\xdb\x70\x65\x47\x18\ +\x17\x0b\xc9\xf0\x40\x8c\x2c\x1e\x39\x71\xb3\xe1\x75\x78\xf9\x53\ +\x0d\x55\x56\xbb\xc3\x52\xac\xdf\xd8\x79\x74\x38\xf0\x21\x04\x82\ +\xf4\xe1\xda\xe0\xb3\xfc\x97\x34\x39\x32\x8d\xf8\xaf\xe3\x52\xf2\ +\x12\xb3\xef\xb8\x4b\xda\x68\xab\xc7\x85\xce\x1a\xd8\xdd\x96\x40\ +\x2b\x04\xb9\x53\xb0\x8b\xc5\xca\x47\x20\x3d\x26\x1b\x6a\x91\x16\ +\xf5\x4d\x67\x1d\x8d\x9d\x97\x8e\x50\x17\xbf\xa6\xf2\xe5\xee\x1b\ +\xb8\x0d\x21\x41\x7d\x66\x18\xf0\x21\x4d\x95\x04\x71\xee\x3a\xed\ +\x6f\x15\x2a\xf9\xfa\x71\x69\x79\xec\xa8\xa4\xcc\x08\x0b\xdf\x85\ +\x66\x73\x03\xba\xb9\x36\xf4\x3a\xbb\xfa\x8f\x8a\x7e\x96\x91\xb2\ +\x72\x44\x45\xe8\x10\x2b\x1f\x81\x04\x65\x0a\xdc\x2e\x37\x1a\xdb\ +\x2e\x73\xcd\xdd\x57\x4c\x4e\x9b\xf7\xf9\xea\x57\x4d\x5f\x21\xc8\ +\x5e\x03\xbf\xc3\x12\x18\x0a\xfc\xed\xe8\x98\x91\x33\xa4\x91\xa9\ +\x85\xca\x87\x23\xd4\xa2\x27\xe3\xd5\x29\x8a\x38\x6d\xa2\x28\x5a\ +\xad\x93\x28\x22\x54\xa0\x84\x87\xdb\xeb\x04\x4b\x44\x60\x21\x82\ +\xc7\xed\x81\x85\xeb\x46\xaf\xa5\xcb\xde\xd6\xdd\x22\xb2\x3a\x7a\ +\x4e\xba\xfb\x84\x37\xbf\xfd\xb0\x5b\x8f\x8e\xa1\x6e\x86\x86\x26\ +\xf1\xb3\x2c\x10\xd4\x00\x80\xe4\xae\xd5\x8c\x89\x4c\x26\x05\x24\ +\x82\x99\x4d\x58\xa4\x12\xc2\x68\xc5\x22\x31\xcb\x7b\x79\x41\xa0\ +\x5e\x0e\x14\x2d\x02\x8f\x33\xbc\x83\x9e\xb8\x71\xd2\xa9\xbf\x56\ +\x6e\xb3\x85\x01\xfc\xa3\x2d\x10\x4e\x3f\xec\x1e\x08\xd3\x0f\x37\ +\x67\xf0\xc2\xd4\x4f\x17\xae\x1f\xdc\x6e\x29\x43\x11\xb8\x9d\x77\ +\x82\xad\x77\x2b\xa1\x61\xfa\xb7\x05\x72\x38\xf9\x3f\x6f\x43\xc4\ +\x6f\x78\x5c\x1a\xee\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\ +\x82\ +" + +qt_resource_name = "\ +\x00\x06\ +\x07\x03\x7d\xc3\ +\x00\x69\ +\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\ +\x00\x0b\ +\x0e\xee\x9d\x67\ +\x00\x44\ +\x00\x6f\x00\x6e\x00\x6b\x00\x69\x00\x50\x00\x79\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0d\ +\x0d\xd3\x49\xc7\ +\x00\x61\ +\x00\x74\x00\x74\x00\x72\x00\x69\x00\x62\x00\x75\x00\x74\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x16\ +\x0c\x01\xd6\x87\ +\x00\x61\ +\x00\x74\x00\x74\x00\x72\x00\x69\x00\x62\x00\x75\x00\x74\x00\x65\x00\x5f\x00\x72\x00\x65\x00\x61\x00\x64\x00\x6f\x00\x6e\x00\x6c\ +\x00\x79\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x09\ +\x0a\x92\xb1\xa7\ +\x00\x6d\ +\x00\x61\x00\x63\x00\x72\x00\x6f\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0b\ +\x08\x93\x9f\x27\ +\x00\x63\ +\x00\x6f\x00\x6d\x00\x6d\x00\x61\x00\x6e\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\ +" + +qt_resource_struct = "\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x02\ +\x00\x00\x00\x98\x00\x00\x00\x00\x00\x01\x00\x00\x46\x2f\ +\x00\x00\x00\x80\x00\x00\x00\x00\x00\x01\x00\x00\x39\x5e\ +\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x01\x00\x00\x2e\xfe\ +\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x01\x00\x00\x1f\xb4\ +\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +" + +def qInitResources(): + QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources()