diff options
Diffstat (limited to 'examples/corelib/tools')
57 files changed, 6972 insertions, 0 deletions
diff --git a/examples/corelib/tools/README b/examples/corelib/tools/README new file mode 100644 index 0000000..7ed1cba --- /dev/null +++ b/examples/corelib/tools/README @@ -0,0 +1,25 @@ +PyQt is equipped with a range of capable tool classes, from containers and +iterators to classes for string handling and manipulation. + +Other classes provide application infrastructure support, handling plugin +loading and managing configuration files. + +The example launcher provided with PyQt can be used to explore each of the +examples in this directory. + +Documentation for these examples can be found via the Tutorial and Examples +link in the main Qt documentation. + + +Finding the PyQt Examples and Demos launcher +============================================ + +On Windows: + +The launcher can be accessed via the Windows Start menu. Select the menu +entry entitled "Examples and Demos" entry in the submenu containing PySide. + +On all platforms: + +The source code for the launcher can be found in the examples/tools/qtdemo +directory in the PyQt package. diff --git a/examples/corelib/tools/codecs/codecs.py b/examples/corelib/tools/codecs/codecs.py new file mode 100755 index 0000000..15f7d95 --- /dev/null +++ b/examples/corelib/tools/codecs/codecs.py @@ -0,0 +1,251 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the PySide examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the widgets/tools/codecs example from Qt v5.x""" + +from PySide2 import QtCore, QtGui, QtWidgets + + +def codec_name(codec): + try: + # Python v3. + name = str(codec.name(), encoding='ascii') + except TypeError: + # Python v2. + name = str(codec.name()) + + return name + + +class MainWindow(QtWidgets.QMainWindow): + def __init__(self): + super(MainWindow, self).__init__() + + self.textEdit = QtWidgets.QTextEdit() + self.textEdit.setLineWrapMode(QtWidgets.QTextEdit.NoWrap) + self.setCentralWidget(self.textEdit) + + self.codecs = [] + self.findCodecs() + + self.previewForm = PreviewForm(self) + self.previewForm.setCodecList(self.codecs) + + self.saveAsActs = [] + self.createActions() + self.createMenus() + + self.setWindowTitle("Codecs") + self.resize(500, 400) + + def open(self): + fileName, _ = QtWidgets.QFileDialog.getOpenFileName(self) + if fileName: + inFile = QtCore.QFile(fileName) + if not inFile.open(QtCore.QFile.ReadOnly): + QtWidgets.QMessageBox.warning(self, "Codecs", + "Cannot read file %s:\n%s" % (fileName, inFile.errorString())) + return + + data = inFile.readAll() + + self.previewForm.setEncodedData(data) + if self.previewForm.exec_(): + self.textEdit.setPlainText(self.previewForm.decodedString()) + + def save(self): + fileName = QtWidgets.QFileDialog.getSaveFileName(self) + if fileName: + outFile = QtCore.QFile(fileName) + if not outFile.open(QtCore.QFile.WriteOnly|QtCore.QFile.Text): + QtWidgets.QMessageBox.warning(self, "Codecs", + "Cannot write file %s:\n%s" % (fileName, outFile.errorString())) + return + + action = self.sender() + codecName = action.data() + + out = QtCore.QTextStream(outFile) + out.setCodec(codecName) + out << self.textEdit.toPlainText() + + def about(self): + QtWidgets.QMessageBox.about(self, "About Codecs", + "The <b>Codecs</b> example demonstrates how to read and " + "write files using various encodings.") + + def aboutToShowSaveAsMenu(self): + currentText = self.textEdit.toPlainText() + + for action in self.saveAsActs: + codecName = str(action.data()) + codec = QtCore.QTextCodec.codecForName(codecName) + action.setVisible(codec and codec.canEncode(currentText)) + + def findCodecs(self): + codecMap = [] + iso8859RegExp = QtCore.QRegExp('ISO[- ]8859-([0-9]+).*') + + for mib in QtCore.QTextCodec.availableMibs(): + codec = QtCore.QTextCodec.codecForMib(mib) + sortKey = codec_name(codec).upper() + rank = 0 + + if sortKey.startswith('UTF-8'): + rank = 1 + elif sortKey.startswith('UTF-16'): + rank = 2 + elif iso8859RegExp.exactMatch(sortKey): + if len(iso8859RegExp.cap(1)) == 1: + rank = 3 + else: + rank = 4 + else: + rank = 5 + + codecMap.append((str(rank) + sortKey, codec)) + + codecMap.sort() + self.codecs = [item[-1] for item in codecMap] + + def createActions(self): + self.openAct = QtWidgets.QAction("&Open...", self, shortcut="Ctrl+O", + triggered=self.open) + + for codec in self.codecs: + name = codec_name(codec) + + action = QtWidgets.QAction(name + '...', self, triggered=self.save) + action.setData(name) + self.saveAsActs.append(action) + + self.exitAct = QtWidgets.QAction("E&xit", self, shortcut="Ctrl+Q", + triggered=self.close) + + self.aboutAct = QtWidgets.QAction("&About", self, triggered=self.about) + + self.aboutQtAct = QtWidgets.QAction("About &Qt", self, + triggered=QtWidgets.qApp.aboutQt) + + def createMenus(self): + self.saveAsMenu = QtWidgets.QMenu("&Save As", self) + for action in self.saveAsActs: + self.saveAsMenu.addAction(action) + + self.saveAsMenu.aboutToShow.connect(self.aboutToShowSaveAsMenu) + + self.fileMenu = QtWidgets.QMenu("&File", self) + self.fileMenu.addAction(self.openAct) + self.fileMenu.addMenu(self.saveAsMenu) + self.fileMenu.addSeparator() + self.fileMenu.addAction(self.exitAct) + + self.helpMenu = QtWidgets.QMenu("&Help", self) + self.helpMenu.addAction(self.aboutAct) + self.helpMenu.addAction(self.aboutQtAct) + + self.menuBar().addMenu(self.fileMenu) + self.menuBar().addSeparator() + self.menuBar().addMenu(self.helpMenu) + + +class PreviewForm(QtWidgets.QDialog): + def __init__(self, parent): + super(PreviewForm, self).__init__(parent) + + self.encodingComboBox = QtWidgets.QComboBox() + encodingLabel = QtWidgets.QLabel("&Encoding:") + encodingLabel.setBuddy(self.encodingComboBox) + + self.textEdit = QtWidgets.QTextEdit() + self.textEdit.setLineWrapMode(QtWidgets.QTextEdit.NoWrap) + self.textEdit.setReadOnly(True) + + buttonBox = QtWidgets.QDialogButtonBox(QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel) + + self.encodingComboBox.activated.connect(self.updateTextEdit) + buttonBox.accepted.connect(self.accept) + buttonBox.rejected.connect(self.reject) + + mainLayout = QtWidgets.QGridLayout() + mainLayout.addWidget(encodingLabel, 0, 0) + mainLayout.addWidget(self.encodingComboBox, 0, 1) + mainLayout.addWidget(self.textEdit, 1, 0, 1, 2) + mainLayout.addWidget(buttonBox, 2, 0, 1, 2) + self.setLayout(mainLayout) + + self.setWindowTitle("Choose Encoding") + self.resize(400, 300) + + def setCodecList(self, codecs): + self.encodingComboBox.clear() + for codec in codecs: + self.encodingComboBox.addItem(codec_name(codec), codec.mibEnum()) + + def setEncodedData(self, data): + self.encodedData = data + self.updateTextEdit() + + def decodedString(self): + return self.decodedStr + + def updateTextEdit(self): + mib = self.encodingComboBox.itemData(self.encodingComboBox.currentIndex()) + codec = QtCore.QTextCodec.codecForMib(mib) + + data = QtCore.QTextStream(self.encodedData) + data.setAutoDetectUnicode(False) + data.setCodec(codec) + + self.decodedStr = data.readAll() + self.textEdit.setPlainText(self.decodedStr) + + +if __name__ == '__main__': + + import sys + + app = QtWidgets.QApplication(sys.argv) + mainWin = MainWindow() + mainWin.show() + sys.exit(app.exec_()) diff --git a/examples/corelib/tools/codecs/encodedfiles/iso-8859-1.txt b/examples/corelib/tools/codecs/encodedfiles/iso-8859-1.txt new file mode 100644 index 0000000..4a7ebe3 --- /dev/null +++ b/examples/corelib/tools/codecs/encodedfiles/iso-8859-1.txt @@ -0,0 +1,6 @@ +Paulo Coelho: O Gênio e as Rosas
+Anna Hallström, Urban Östberg: Svår svenska
+Darrell Huff: How to Lie with Statistics
+Franz Kafka: Das Schloß
+Walter Moers: Die 13½ Leben des Käpt'n Blaubär
+Dag Solstad: Forsøk på å beskrive det ugjennomtrengelige
diff --git a/examples/corelib/tools/codecs/encodedfiles/iso-8859-15.txt b/examples/corelib/tools/codecs/encodedfiles/iso-8859-15.txt new file mode 100644 index 0000000..cd43ea3 --- /dev/null +++ b/examples/corelib/tools/codecs/encodedfiles/iso-8859-15.txt @@ -0,0 +1,8 @@ +Paulo Coelho: O Gênio e as Rosas
+Jean-Pierre Coffe: À table en famille avec 15 ¤ par jour
+Anna Hallström, Urban Östberg: Svår svenska
+Darrell Huff: How to Lie with Statistics
+Franz Kafka: Das Schloß
+Helena Lehecková: T¨ekkiä suomalaisille
+Arthur Rimbaud: ¼uvres complètes
+Dag Solstad: Forsøk på å beskrive det ugjennomtrengelige
diff --git a/examples/corelib/tools/codecs/encodedfiles/utf-16.txt b/examples/corelib/tools/codecs/encodedfiles/utf-16.txt Binary files differnew file mode 100644 index 0000000..96e65aa --- /dev/null +++ b/examples/corelib/tools/codecs/encodedfiles/utf-16.txt diff --git a/examples/corelib/tools/codecs/encodedfiles/utf-16be.txt b/examples/corelib/tools/codecs/encodedfiles/utf-16be.txt Binary files differnew file mode 100644 index 0000000..d8ae642 --- /dev/null +++ b/examples/corelib/tools/codecs/encodedfiles/utf-16be.txt diff --git a/examples/corelib/tools/codecs/encodedfiles/utf-16le.txt b/examples/corelib/tools/codecs/encodedfiles/utf-16le.txt Binary files differnew file mode 100644 index 0000000..3779264 --- /dev/null +++ b/examples/corelib/tools/codecs/encodedfiles/utf-16le.txt diff --git a/examples/corelib/tools/codecs/encodedfiles/utf-8.txt b/examples/corelib/tools/codecs/encodedfiles/utf-8.txt new file mode 100644 index 0000000..a5e4ae6 --- /dev/null +++ b/examples/corelib/tools/codecs/encodedfiles/utf-8.txt @@ -0,0 +1,6 @@ +SprÃ¥k: Norsk +Γλώσσα: Ελληνικά +Язык: РуÑÑкий +언어 : í•œêµì–´ +言語: 日本語 +Langage : Français diff --git a/examples/corelib/tools/i18n/i18n.py b/examples/corelib/tools/i18n/i18n.py new file mode 100755 index 0000000..0d44851 --- /dev/null +++ b/examples/corelib/tools/i18n/i18n.py @@ -0,0 +1,203 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2004-2005 Trolltech AS. All rights reserved. +## +## This file is part of the example classes of the Qt Toolkit. +## +## This file may be used under the terms of the GNU General Public +## License version 2.0 as published by the Free Software Foundation +## and appearing in the file LICENSE.GPL included in the packaging of +## this file. Please review the following information to ensure GNU +## General Public Licensing requirements will be met: +## http://www.trolltech.com/products/qt/opensource.html +## +## If you are unsure which license is appropriate for your use, please +## review the following information: +## http://www.trolltech.com/products/qt/licensing.html or contact the +## sales department at sales@trolltech.com. +## +## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +## +############################################################################# + +import sys +import os.path +from PySide2 import QtCore, QtGui + +import i18n_rc + + +class LanguageChooser(QtGui.QDialog): + def __init__(self, parent=None): + QtGui.QDialog.__init__(self, parent, QtCore.Qt.WindowStaysOnTopHint) + + self.qmFileForCheckBoxMap = {} + self.mainWindowForCheckBoxMap = {} + + groupBox = QtGui.QGroupBox("Languages") + + groupBoxLayout = QtGui.QGridLayout() + + qmFiles = self.findQmFiles() + + for i in range(len(qmFiles)): + checkBox = QtGui.QCheckBox(self.languageName(qmFiles[i])) + self.qmFileForCheckBoxMap[checkBox] = qmFiles[i] + self.connect(checkBox, QtCore.SIGNAL("toggled(bool)"), self.checkBoxToggled) + groupBoxLayout.addWidget(checkBox, i / 2, i % 2) + + groupBox.setLayout(groupBoxLayout) + + showAllButton = QtGui.QPushButton("Show All") + hideAllButton = QtGui.QPushButton("Hide All") + closeButton = QtGui.QPushButton("Close") + closeButton.setDefault(True) + + self.connect(showAllButton, QtCore.SIGNAL("clicked()"), self.showAll) + self.connect(hideAllButton, QtCore.SIGNAL("clicked()"), self.hideAll) + self.connect(closeButton, QtCore.SIGNAL("clicked()"), self, QtCore.SLOT("close()")) + + buttonLayout = QtGui.QHBoxLayout() + buttonLayout.addStretch(1) + buttonLayout.addWidget(showAllButton) + buttonLayout.addWidget(hideAllButton) + buttonLayout.addWidget(closeButton) + + mainLayout = QtGui.QVBoxLayout() + mainLayout.addWidget(groupBox) + mainLayout.addLayout(buttonLayout) + self.setLayout(mainLayout) + + # For Mac only. + #qt_mac_set_menubar_merge(False) + + self.setWindowTitle("I18N") + + def eventFilter(self, object, event): + if event.type() == QtCore.QEvent.Close: + if isinstance(object, MainWindow): + window = object + + for checkBox, w in self.mainWindowForCheckBoxMap.items(): + if w is window: + break + else: + checkBox = None + + if checkBox: + checkBox.setChecked(False) + + return QtGui.QWidget.eventFilter(self, object, event) + + def closeEvent(self, event): + QtGui.qApp.quit() + + def checkBoxToggled(self): + checkBox = self.sender() + window = self.mainWindowForCheckBoxMap.get(checkBox) + + if not window: + translator = QtCore.QTranslator() + translator.load(self.qmFileForCheckBoxMap[checkBox]) + QtGui.qApp.installTranslator(translator) + + # Because we will be installing an event filter for the main window + # it is important that this instance isn't garbage collected before + # the main window when the program terminates. We ensure this by + # making the main window a child of this one. + window = MainWindow(self) + window.setPalette(QtGui.QPalette(self.colorForLanguage(checkBox.text()))) + + window.installEventFilter(self) + self.mainWindowForCheckBoxMap[checkBox] = window + + window.setVisible(checkBox.isChecked()) + + def showAll(self): + for checkBox in self.qmFileForCheckBoxMap.keys(): + checkBox.setChecked(True) + + def hideAll(self): + for checkBox in self.qmFileForCheckBoxMap.keys(): + checkBox.setChecked(False) + + def findQmFiles(self): + trans_dir = QtCore.QDir("./translations") + fileNames = trans_dir.entryList(["*.qm"], QtCore.QDir.Files, QtCore.QDir.Name) + + fileNames = [trans_dir.filePath(p) for p in fileNames] + + return fileNames + + def languageName(self, qmFile): + translator = QtCore.QTranslator() + translator.load(qmFile) + + return translator.translate("MainWindow", "English") + + def colorForLanguage(self, language): + hashValue = hash(language) + red = 156 + (hashValue & 0x3F) + green = 156 + ((hashValue >> 6) & 0x3F) + blue = 156 + ((hashValue >> 12) & 0x3F) + return QtGui.QColor(red, green, blue) + + +class MainWindow(QtGui.QMainWindow): + listEntries = [QtCore.QT_TRANSLATE_NOOP("MainWindow", "First"), + QtCore.QT_TRANSLATE_NOOP("MainWindow", "Second"), + QtCore.QT_TRANSLATE_NOOP("MainWindow", "Third")] + + def __init__(self, parent=None): + QtGui.QMainWindow.__init__(self, parent) + + self.centralWidget = QtGui.QWidget() + self.setCentralWidget(self.centralWidget) + + self.createGroupBox() + + listWidget = QtGui.QListWidget() + + for le in MainWindow.listEntries: + listWidget.addItem(self.tr(le)) + + mainLayout = QtGui.QVBoxLayout() + mainLayout.addWidget(self.groupBox) + mainLayout.addWidget(listWidget) + self.centralWidget.setLayout(mainLayout) + + exitAction = QtGui.QAction(self.tr("E&xit"), self) + self.connect(exitAction, QtCore.SIGNAL("triggered()"), QtGui.qApp, QtCore.SLOT("quit()")) + + fileMenu = self.menuBar().addMenu(self.tr("&File")) + fileMenu.setPalette(QtGui.QPalette(QtCore.Qt.red)) + fileMenu.addAction(exitAction) + + self.setWindowTitle(self.tr("Language: %s") % (self.tr("English"))) + self.statusBar().showMessage(self.tr("Internationalization Example")) + + if self.tr("LTR") == "RTL": + self.setLayoutDirection(QtCore.Qt.RightToLeft) + + def createGroupBox(self): + self.groupBox = QtGui.QGroupBox(self.tr("View")) + perspectiveRadioButton = QtGui.QRadioButton(self.tr("Perspective")) + isometricRadioButton = QtGui.QRadioButton(self.tr("Isometric")) + obliqueRadioButton = QtGui.QRadioButton(self.tr("Oblique")) + perspectiveRadioButton.setChecked(True) + + self.groupBoxLayout = QtGui.QVBoxLayout() + self.groupBoxLayout.addWidget(perspectiveRadioButton) + self.groupBoxLayout.addWidget(isometricRadioButton) + self.groupBoxLayout.addWidget(obliqueRadioButton) + self.groupBox.setLayout(self.groupBoxLayout) + + +if __name__ == "__main__": + app = QtGui.QApplication(sys.argv) + chooser = LanguageChooser() + chooser.show() + sys.exit(app.exec_()) diff --git a/examples/corelib/tools/i18n/i18n.qrc b/examples/corelib/tools/i18n/i18n.qrc new file mode 100644 index 0000000..16a89f1 --- /dev/null +++ b/examples/corelib/tools/i18n/i18n.qrc @@ -0,0 +1,18 @@ +<!DOCTYPE RCC><RCC version="1.0"> +<qresource> + <file>translations/i18n_ar.qm</file> + <file>translations/i18n_cs.qm</file> + <file>translations/i18n_de.qm</file> + <file>translations/i18n_el.qm</file> + <file>translations/i18n_en.qm</file> + <file>translations/i18n_eo.qm</file> + <file>translations/i18n_fr.qm</file> + <file>translations/i18n_it.qm</file> + <file>translations/i18n_jp.qm</file> + <file>translations/i18n_ko.qm</file> + <file>translations/i18n_no.qm</file> + <file>translations/i18n_ru.qm</file> + <file>translations/i18n_sv.qm</file> + <file>translations/i18n_zh.qm</file> +</qresource> +</RCC> diff --git a/examples/corelib/tools/i18n/i18n_rc.py b/examples/corelib/tools/i18n/i18n_rc.py new file mode 100644 index 0000000..e79668c --- /dev/null +++ b/examples/corelib/tools/i18n/i18n_rc.py @@ -0,0 +1,863 @@ +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the PySide examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# Resource object code +# +# Created: Fri Jan 6 09:39:04 2006 +# by: The Resource Compiler for PyQt (Qt v4.1.0) +# +# WARNING! All changes made in this file will be lost! + +from PySide2 import QtCore + +qt_resource_data = b"\ +\x00\x00\x03\x4c\ +\x3c\ +\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\ +\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\ +\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x22\x00\x47\xdf\x04\ +\x00\x00\x00\x3d\x00\x4d\x09\xa4\x00\x00\x00\x58\x00\x5a\xf0\x84\ +\x00\x00\x00\x71\x02\xf0\x8c\x31\x00\x00\x00\x8e\x05\x93\x08\xe5\ +\x00\x00\x00\xaf\x05\x9b\xa6\x44\x00\x00\x00\xc8\x06\x3c\xe8\x53\ +\x00\x00\x00\xe3\x06\xec\x79\x65\x00\x00\x01\x04\x0c\x4e\x30\xd8\ +\x00\x00\x01\x25\x0e\x9f\xe7\x05\x00\x00\x01\x40\x69\x00\x00\x01\ +\x87\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\ +\x92\x01\x03\x00\x00\x00\x06\x00\x56\x00\x75\x00\x65\x05\x00\x05\ +\xcf\xc7\x01\x03\x00\x00\x00\x10\x00\x26\x00\x46\x00\x69\x00\x63\ +\x00\x68\x00\x69\x00\x65\x00\x72\x05\x00\x2a\xd0\x25\x01\x03\x00\ +\x00\x00\x10\x00\x26\x00\x51\x00\x75\x00\x69\x00\x74\x00\x74\x00\ +\x65\x00\x72\x05\x00\x47\xdf\x04\x01\x03\x00\x00\x00\x0e\x00\x50\ +\x00\x72\x00\x65\x00\x6d\x00\x69\x00\x65\x00\x72\x05\x00\x4d\x09\ +\xa4\x01\x03\x00\x00\x00\x12\x00\x54\x00\x72\x00\x6f\x00\x69\x00\ +\x73\x00\x69\x00\xe8\x00\x6d\x00\x65\x05\x00\x5a\xf0\x84\x01\x03\ +\x00\x00\x00\x16\x00\x4c\x00\x61\x00\x6e\x00\x67\x00\x75\x00\x65\ +\x00\x20\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\x31\x01\ +\x03\x00\x00\x00\x0e\x00\x4f\x00\x62\x00\x6c\x00\x69\x00\x71\x00\ +\x75\x00\x65\x05\x05\x93\x08\xe5\x01\x03\x00\x00\x00\x10\x00\x44\ +\x00\x65\x00\x75\x00\x78\x00\x69\x00\xe8\x00\x6d\x00\x65\x05\x05\ +\x9b\xa6\x44\x01\x03\x00\x00\x00\x16\x00\x49\x00\x73\x00\x6f\x00\ +\x6d\x00\xe9\x00\x74\x00\x72\x00\x69\x00\x71\x00\x75\x00\x65\x05\ +\x06\x3c\xe8\x53\x01\x03\x00\x00\x00\x16\x00\x50\x00\x65\x00\x72\ +\x00\x73\x00\x70\x00\x65\x00\x63\x00\x74\x00\x69\x00\x76\x00\x65\ +\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\x10\x00\x46\x00\x72\x00\ +\x61\x00\x6e\x00\xe7\x00\x61\x00\x69\x00\x73\x05\x0c\x4e\x30\xd8\ +\x01\x03\x00\x00\x00\x3c\x00\x45\x00\x78\x00\x65\x00\x6d\x00\x70\ +\x00\x6c\x00\x65\x00\x20\x00\x64\x00\x27\x00\x69\x00\x6e\x00\x74\ +\x00\x65\x00\x72\x00\x6e\x00\x61\x00\x74\x00\x69\x00\x6f\x00\x6e\ +\x00\x61\x00\x6c\x00\x69\x00\x73\x00\x61\x00\x74\x00\x69\x00\x6f\ +\x00\x6e\x05\x0e\x9f\xe7\x05\x01\x2f\x00\x00\x01\x3e\x00\x97\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\ +\x4d\x61\x69\x6e\x57\x69\x6e\x64\x6f\x77\x00\ +\x00\x00\x02\xb2\ +\x3c\ +\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\ +\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\ +\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x20\x00\x47\xdf\x04\ +\x00\x00\x00\x33\x00\x4d\x09\xa4\x00\x00\x00\x46\x00\x5a\xf0\x84\ +\x00\x00\x00\x57\x02\xf0\x8c\x31\x00\x00\x00\x68\x05\x93\x08\xe5\ +\x00\x00\x00\x81\x05\x9b\xa6\x44\x00\x00\x00\x90\x06\x3c\xe8\x53\ +\x00\x00\x00\xa1\x06\xec\x79\x65\x00\x00\x00\xb2\x0c\x4e\x30\xd8\ +\x00\x00\x00\xc5\x0e\x9f\xe7\x05\x00\x00\x00\xd6\x69\x00\x00\x00\ +\xed\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\ +\x92\x01\x03\x00\x00\x00\x04\xbc\xf4\xae\x30\x05\x00\x05\xcf\xc7\ +\x01\x03\x00\x00\x00\x08\xd3\x0c\xc7\x7c\x00\x26\x00\x46\x05\x00\ +\x2a\xd0\x25\x01\x03\x00\x00\x00\x08\xc8\x85\xb8\xcc\x00\x26\x00\ +\x58\x05\x00\x47\xdf\x04\x01\x03\x00\x00\x00\x06\xcc\xab\xbc\x88\ +\xc9\xf8\x05\x00\x4d\x09\xa4\x01\x03\x00\x00\x00\x06\xc1\x38\xbc\ +\x88\xc9\xf8\x05\x00\x5a\xf0\x84\x01\x03\x00\x00\x00\x0e\xc5\xb8\ +\xc5\xb4\x00\x20\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\ +\x31\x01\x03\x00\x00\x00\x04\xbe\x57\xac\x01\x05\x05\x93\x08\xe5\ +\x01\x03\x00\x00\x00\x06\xb4\x50\xbc\x88\xc9\xf8\x05\x05\x9b\xa6\ +\x44\x01\x03\x00\x00\x00\x06\xb4\xf1\xce\x21\xb3\xc4\x05\x06\x3c\ +\xe8\x53\x01\x03\x00\x00\x00\x08\xc6\xd0\xad\xfc\xd6\x54\xbc\x95\ +\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\x06\xd5\x5c\xad\x6d\xc5\ +\xb4\x05\x0c\x4e\x30\xd8\x01\x03\x00\x00\x00\x0c\xad\x6d\xc8\x1c\ +\xd6\x54\x00\x20\xc6\x08\xc8\x1c\x05\x0e\x9f\xe7\x05\x01\x2f\x00\ +\x00\x01\x3e\x00\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x0a\x4d\x61\x69\x6e\x57\x69\x6e\x64\x6f\x77\ +\x00\ +\x00\x00\x03\x26\ +\x3c\ +\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\ +\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\ +\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x22\x00\x47\xdf\x04\ +\x00\x00\x00\x35\x00\x4d\x09\xa4\x00\x00\x00\x4a\x00\x5a\xf0\x84\ +\x00\x00\x00\x61\x02\xf0\x8c\x31\x00\x00\x00\x78\x05\x93\x08\xe5\ +\x00\x00\x00\x93\x05\x9b\xa6\x44\x00\x00\x00\xaa\x06\x3c\xe8\x53\ +\x00\x00\x00\xc1\x06\xec\x79\x65\x00\x00\x00\xe8\x0c\x4e\x30\xd8\ +\x00\x00\x01\x09\x0e\x9f\xe7\x05\x00\x00\x01\x22\x69\x00\x00\x01\ +\x61\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\ +\x92\x01\x03\x00\x00\x00\x06\x04\x12\x04\x38\x04\x34\x05\x00\x05\ +\xcf\xc7\x01\x03\x00\x00\x00\x08\x04\x24\x04\x30\x04\x39\x04\x3b\ +\x05\x00\x2a\xd0\x25\x01\x03\x00\x00\x00\x0a\x04\x12\x04\x4b\x04\ +\x45\x04\x3e\x04\x34\x05\x00\x47\xdf\x04\x01\x03\x00\x00\x00\x0c\ +\x04\x1f\x04\x35\x04\x40\x04\x32\x04\x4b\x04\x39\x05\x00\x4d\x09\ +\xa4\x01\x03\x00\x00\x00\x0c\x04\x22\x04\x40\x04\x35\x04\x42\x04\ +\x38\x04\x39\x05\x00\x5a\xf0\x84\x01\x03\x00\x00\x00\x10\x04\x2f\ +\x04\x37\x04\x4b\x04\x3a\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\ +\xf0\x8c\x31\x01\x03\x00\x00\x00\x0c\x04\x1a\x04\x43\x04\x40\x04\ +\x41\x04\x38\x04\x32\x05\x05\x93\x08\xe5\x01\x03\x00\x00\x00\x0c\ +\x04\x12\x04\x42\x04\x3e\x04\x40\x04\x3e\x04\x39\x05\x05\x9b\xa6\ +\x44\x01\x03\x00\x00\x00\x1c\x04\x18\x04\x37\x04\x3e\x04\x3c\x04\ +\x35\x04\x42\x04\x40\x04\x38\x04\x47\x04\x35\x04\x41\x04\x3a\x04\ +\x38\x04\x39\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\x00\x16\x04\x1f\ +\x04\x35\x04\x40\x04\x41\x04\x3f\x04\x35\x04\x3a\x04\x42\x04\x38\ +\x04\x32\x04\x30\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\x0e\x04\ +\x20\x04\x43\x04\x41\x04\x41\x04\x3a\x04\x38\x04\x39\x05\x0c\x4e\ +\x30\xd8\x01\x03\x00\x00\x00\x34\x04\x1f\x04\x40\x04\x38\x04\x3c\ +\x04\x35\x04\x40\x00\x20\x04\x38\x04\x3d\x04\x42\x04\x35\x04\x40\ +\x04\x3d\x04\x30\x04\x46\x04\x38\x04\x3d\x04\x3e\x04\x30\x04\x3b\ +\x04\x38\x04\x37\x04\x30\x04\x46\x04\x38\x04\x38\x05\x0e\x9f\xe7\ +\x05\x01\x2f\x00\x00\x01\x3e\x00\x97\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x4d\x61\x69\x6e\x57\x69\ +\x6e\x64\x6f\x77\x00\ +\x00\x00\x03\x2e\ +\x3c\ +\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\ +\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\ +\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x24\x00\x47\xdf\x04\ +\x00\x00\x00\x3b\x00\x4d\x09\xa4\x00\x00\x00\x56\x00\x5a\xf0\x84\ +\x00\x00\x00\x6d\x02\xf0\x8c\x31\x00\x00\x00\x84\x05\x93\x08\xe5\ +\x00\x00\x00\xa1\x05\x9b\xa6\x44\x00\x00\x00\xb6\x06\x3c\xe8\x53\ +\x00\x00\x00\xcb\x06\xec\x79\x65\x00\x00\x00\xec\x0c\x4e\x30\xd8\ +\x00\x00\x01\x0d\x0e\x9f\xe7\x05\x00\x00\x01\x26\x69\x00\x00\x01\ +\x69\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\ +\x92\x01\x03\x00\x00\x00\x08\x00\x56\x00\x69\x00\x73\x00\x61\x05\ +\x00\x05\xcf\xc7\x01\x03\x00\x00\x00\x0c\x00\x26\x00\x41\x00\x72\ +\x00\x6b\x00\x69\x00\x76\x05\x00\x2a\xd0\x25\x01\x03\x00\x00\x00\ +\x10\x00\x26\x00\x41\x00\x76\x00\x73\x00\x6c\x00\x75\x00\x74\x00\ +\x61\x05\x00\x47\xdf\x04\x01\x03\x00\x00\x00\x0c\x00\x46\x00\xf6\ +\x00\x72\x00\x73\x00\x74\x00\x61\x05\x00\x4d\x09\xa4\x01\x03\x00\ +\x00\x00\x0c\x00\x54\x00\x72\x00\x65\x00\x64\x00\x6a\x00\x65\x05\ +\x00\x5a\xf0\x84\x01\x03\x00\x00\x00\x12\x00\x53\x00\x70\x00\x72\ +\x00\xe5\x00\x6b\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\ +\x31\x01\x03\x00\x00\x00\x0a\x00\x53\x00\x6b\x00\x65\x00\x76\x00\ +\x74\x05\x05\x93\x08\xe5\x01\x03\x00\x00\x00\x0a\x00\x41\x00\x6e\ +\x00\x64\x00\x72\x00\x61\x05\x05\x9b\xa6\x44\x01\x03\x00\x00\x00\ +\x16\x00\x49\x00\x73\x00\x6f\x00\x6d\x00\x65\x00\x74\x00\x72\x00\ +\x69\x00\x73\x00\x6b\x00\x74\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\ +\x00\x16\x00\x50\x00\x65\x00\x72\x00\x73\x00\x70\x00\x65\x00\x6b\ +\x00\x74\x00\x69\x00\x76\x00\x74\x05\x06\xec\x79\x65\x01\x03\x00\ +\x00\x00\x0e\x00\x53\x00\x76\x00\x65\x00\x6e\x00\x73\x00\x6b\x00\ +\x61\x05\x0c\x4e\x30\xd8\x01\x03\x00\x00\x00\x38\x00\x49\x00\x6e\ +\x00\x74\x00\x65\x00\x72\x00\x6e\x00\x61\x00\x74\x00\x69\x00\x6f\ +\x00\x6e\x00\x61\x00\x6c\x00\x69\x00\x73\x00\x65\x00\x72\x00\x69\ +\x00\x6e\x00\x67\x00\x73\x00\x65\x00\x78\x00\x65\x00\x6d\x00\x70\ +\x00\x65\x00\x6c\x05\x0e\x9f\xe7\x05\x01\x2f\x00\x00\x01\x3e\x00\ +\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x0a\x4d\x61\x69\x6e\x57\x69\x6e\x64\x6f\x77\x00\ +\x00\x00\x03\x50\ +\x3c\ +\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\ +\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\ +\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x2a\x00\x47\xdf\x04\ +\x00\x00\x00\x41\x00\x4d\x09\xa4\x00\x00\x00\x5c\x00\x5a\xf0\x84\ +\x00\x00\x00\x75\x02\xf0\x8c\x31\x00\x00\x00\x90\x05\x93\x08\xe5\ +\x00\x00\x00\xb1\x05\x9b\xa6\x44\x00\x00\x00\xc8\x06\x3c\xe8\x53\ +\x00\x00\x00\xe3\x06\xec\x79\x65\x00\x00\x01\x04\x0c\x4e\x30\xd8\ +\x00\x00\x01\x2b\x0e\x9f\xe7\x05\x00\x00\x01\x44\x69\x00\x00\x01\ +\x8b\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\ +\x92\x01\x03\x00\x00\x00\x0e\x00\x41\x00\x6e\x00\x73\x00\x69\x00\ +\x63\x00\x68\x00\x74\x05\x00\x05\xcf\xc7\x01\x03\x00\x00\x00\x0c\ +\x00\x26\x00\x44\x00\x61\x00\x74\x00\x65\x00\x69\x05\x00\x2a\xd0\ +\x25\x01\x03\x00\x00\x00\x10\x00\x42\x00\x65\x00\x26\x00\x65\x00\ +\x6e\x00\x64\x00\x65\x00\x6e\x05\x00\x47\xdf\x04\x01\x03\x00\x00\ +\x00\x0e\x00\x45\x00\x72\x00\x73\x00\x74\x00\x65\x00\x6e\x00\x73\ +\x05\x00\x4d\x09\xa4\x01\x03\x00\x00\x00\x10\x00\x44\x00\x72\x00\ +\x69\x00\x74\x00\x74\x00\x65\x00\x6e\x00\x73\x05\x00\x5a\xf0\x84\ +\x01\x03\x00\x00\x00\x16\x00\x53\x00\x70\x00\x72\x00\x61\x00\x63\ +\x00\x68\x00\x65\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\ +\x31\x01\x03\x00\x00\x00\x0c\x00\x53\x00\x63\x00\x68\x00\x69\x00\ +\x65\x00\x66\x05\x05\x93\x08\xe5\x01\x03\x00\x00\x00\x10\x00\x5a\ +\x00\x77\x00\x65\x00\x69\x00\x74\x00\x65\x00\x6e\x00\x73\x05\x05\ +\x9b\xa6\x44\x01\x03\x00\x00\x00\x16\x00\x49\x00\x73\x00\x6f\x00\ +\x6d\x00\x65\x00\x74\x00\x72\x00\x69\x00\x73\x00\x63\x00\x68\x05\ +\x06\x3c\xe8\x53\x01\x03\x00\x00\x00\x1c\x00\x50\x00\x65\x00\x72\ +\x00\x73\x00\x70\x00\x65\x00\x6b\x00\x74\x00\x69\x00\x76\x00\x69\ +\x00\x73\x00\x63\x00\x68\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\ +\x0e\x00\x44\x00\x65\x00\x75\x00\x74\x00\x73\x00\x63\x00\x68\x05\ +\x0c\x4e\x30\xd8\x01\x03\x00\x00\x00\x3c\x00\x49\x00\x6e\x00\x74\ +\x00\x65\x00\x72\x00\x6e\x00\x61\x00\x74\x00\x69\x00\x6f\x00\x6e\ +\x00\x61\x00\x6c\x00\x69\x00\x73\x00\x69\x00\x65\x00\x72\x00\x75\ +\x00\x6e\x00\x67\x00\x73\x00\x62\x00\x65\x00\x69\x00\x73\x00\x70\ +\x00\x69\x00\x65\x00\x6c\x05\x0e\x9f\xe7\x05\x01\x2f\x00\x00\x01\ +\x3e\x00\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x0a\x4d\x61\x69\x6e\x57\x69\x6e\x64\x6f\x77\x00\ +\x00\x00\x02\xbc\ +\x3c\ +\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\ +\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\ +\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x20\x00\x47\xdf\x04\ +\x00\x00\x00\x37\x00\x4d\x09\xa4\x00\x00\x00\x4e\x00\x5a\xf0\x84\ +\x00\x00\x00\x5f\x02\xf0\x8c\x31\x00\x00\x00\x70\x05\x93\x08\xe5\ +\x00\x00\x00\x87\x05\x9b\xa6\x44\x00\x00\x00\x98\x06\x3c\xe8\x53\ +\x00\x00\x00\xa9\x06\xec\x79\x65\x00\x00\x00\xbc\x0c\x4e\x30\xd8\ +\x00\x00\x00\xcf\x0e\x9f\xe7\x05\x00\x00\x00\xe2\x69\x00\x00\x00\ +\xf7\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\ +\x92\x01\x03\x00\x00\x00\x04\x89\xc6\x56\xfe\x05\x00\x05\xcf\xc7\ +\x01\x03\x00\x00\x00\x0c\x65\x87\x4e\xf6\x00\x5b\x00\x26\x00\x46\ +\x00\x5d\x05\x00\x2a\xd0\x25\x01\x03\x00\x00\x00\x0c\x90\x00\x51\ +\xfa\x00\x5b\x00\x26\x00\x78\x00\x5d\x05\x00\x47\xdf\x04\x01\x03\ +\x00\x00\x00\x06\x7b\x2c\x4e\x00\x4e\x2a\x05\x00\x4d\x09\xa4\x01\ +\x03\x00\x00\x00\x06\x7b\x2c\x4e\x09\x4e\x2a\x05\x00\x5a\xf0\x84\ +\x01\x03\x00\x00\x00\x0c\x8b\xed\x8a\x00\x00\x3a\x00\x20\x00\x25\ +\x00\x31\x05\x02\xf0\x8c\x31\x01\x03\x00\x00\x00\x06\x65\x9c\x62\ +\x95\x5f\x71\x05\x05\x93\x08\xe5\x01\x03\x00\x00\x00\x06\x7b\x2c\ +\x4e\x8c\x4e\x2a\x05\x05\x9b\xa6\x44\x01\x03\x00\x00\x00\x08\x7b\ +\x49\x89\xd2\x62\x95\x5f\x71\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\ +\x00\x08\x90\x0f\x89\xc6\x62\x95\x5f\x71\x05\x06\xec\x79\x65\x01\ +\x03\x00\x00\x00\x08\x7b\x80\x4f\x53\x4e\x2d\x65\x87\x05\x0c\x4e\ +\x30\xd8\x01\x03\x00\x00\x00\x0a\x56\xfd\x96\x45\x53\x16\x83\x03\ +\x4f\x8b\x05\x0e\x9f\xe7\x05\x01\x2f\x00\x00\x01\x3e\x00\x97\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\ +\x4d\x61\x69\x6e\x57\x69\x6e\x64\x6f\x77\x00\ +\x00\x00\x02\xe0\ +\x3c\ +\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\ +\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\ +\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x24\x00\x47\xdf\x04\ +\x00\x00\x00\x39\x00\x4d\x09\xa4\x00\x00\x00\x4c\x00\x5a\xf0\x84\ +\x00\x00\x00\x5d\x02\xf0\x8c\x31\x00\x00\x00\x70\x05\x93\x08\xe5\ +\x00\x00\x00\x8d\x05\x9b\xa6\x44\x00\x00\x00\xa0\x06\x3c\xe8\x53\ +\x00\x00\x00\xb3\x06\xec\x79\x65\x00\x00\x00\xca\x0c\x4e\x30\xd8\ +\x00\x00\x00\xdf\x0e\x9f\xe7\x05\x00\x00\x00\xf8\x69\x00\x00\x01\ +\x1b\x03\x00\x00\x00\x06\x00\x52\x00\x54\x00\x4c\x05\x00\x00\x51\ +\x92\x01\x03\x00\x00\x00\x08\x06\x45\x06\x31\x06\x26\x06\x49\x05\ +\x00\x05\xcf\xc7\x01\x03\x00\x00\x00\x0a\x06\x27\x06\x44\x06\x45\ +\x06\x44\x06\x41\x05\x00\x2a\xd0\x25\x01\x03\x00\x00\x00\x08\x06\ +\x23\x06\x2e\x06\x31\x06\x2c\x05\x00\x47\xdf\x04\x01\x03\x00\x00\ +\x00\x06\x06\x23\x06\x48\x06\x44\x05\x00\x4d\x09\xa4\x01\x03\x00\ +\x00\x00\x08\x06\x2b\x06\x27\x06\x44\x06\x2b\x05\x00\x5a\xf0\x84\ +\x01\x03\x00\x00\x00\x12\x06\x27\x06\x44\x06\x44\x06\x3a\x06\x29\ +\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\x31\x01\x03\x00\ +\x00\x00\x08\x06\x45\x06\x35\x06\x45\x06\x2a\x05\x05\x93\x08\xe5\ +\x01\x03\x00\x00\x00\x08\x06\x2b\x06\x27\x06\x46\x06\x49\x05\x05\ +\x9b\xa6\x44\x01\x03\x00\x00\x00\x0c\x06\x45\x06\x2a\x06\x45\x06\ +\x27\x06\x2b\x06\x44\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\x00\x0a\ +\x06\x45\x06\x46\x06\x38\x06\x48\x06\x31\x05\x06\xec\x79\x65\x01\ +\x03\x00\x00\x00\x0e\x06\x27\x06\x44\x06\x39\x06\x31\x06\x28\x06\ +\x4a\x06\x29\x05\x0c\x4e\x30\xd8\x01\x03\x00\x00\x00\x18\x06\x45\ +\x06\x2b\x06\x27\x06\x44\x00\x20\x06\x27\x06\x44\x06\x2a\x06\x2f\ +\x06\x48\x06\x4a\x06\x44\x05\x0e\x9f\xe7\x05\x01\x2f\x00\x00\x01\ +\x3e\x00\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x0a\x4d\x61\x69\x6e\x57\x69\x6e\x64\x6f\x77\x00\ +\x00\x00\x03\x1c\ +\x3c\ +\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\ +\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\ +\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x28\x00\x47\xdf\x04\ +\x00\x00\x00\x41\x00\x4d\x09\xa4\x00\x00\x00\x58\x00\x5a\xf0\x84\ +\x00\x00\x00\x6d\x02\xf0\x8c\x31\x00\x00\x00\x82\x05\x93\x08\xe5\ +\x00\x00\x00\x9f\x05\x9b\xa6\x44\x00\x00\x00\xbc\x06\x3c\xe8\x53\ +\x00\x00\x00\xd1\x06\xec\x79\x65\x00\x00\x00\xf2\x0c\x4e\x30\xd8\ +\x00\x00\x01\x15\x0e\x9f\xe7\x05\x00\x00\x01\x2a\x69\x00\x00\x01\ +\x57\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\ +\x92\x01\x03\x00\x00\x00\x0c\x00\x50\x00\x6f\x00\x68\x00\x6c\x00\ +\x65\x00\x64\x05\x00\x05\xcf\xc7\x01\x03\x00\x00\x00\x0e\x00\x26\ +\x00\x53\x00\x6f\x00\x75\x00\x62\x00\x6f\x00\x72\x05\x00\x2a\xd0\ +\x25\x01\x03\x00\x00\x00\x0c\x00\x26\x00\x4b\x00\x6f\x00\x6e\x00\ +\x65\x00\x63\x05\x00\x47\xdf\x04\x01\x03\x00\x00\x00\x0a\x00\x50\ +\x00\x72\x00\x76\x00\x6e\x00\xed\x05\x00\x4d\x09\xa4\x01\x03\x00\ +\x00\x00\x0a\x00\x54\x01\x59\x00\x65\x00\x74\x00\xed\x05\x00\x5a\ +\xf0\x84\x01\x03\x00\x00\x00\x12\x00\x4a\x00\x61\x00\x79\x00\x7a\ +\x00\x6b\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\x31\x01\ +\x03\x00\x00\x00\x12\x00\x4e\x00\x61\x00\x6b\x00\x6c\x00\x6f\x00\ +\x6e\x01\x1b\x00\x6e\x00\xfd\x05\x05\x93\x08\xe5\x01\x03\x00\x00\ +\x00\x0a\x00\x44\x00\x72\x00\x75\x00\x68\x00\xfd\x05\x05\x9b\xa6\ +\x44\x01\x03\x00\x00\x00\x16\x00\x49\x00\x73\x00\x6f\x00\x6d\x00\ +\x65\x00\x74\x00\x72\x00\x69\x00\x63\x00\x6b\x00\xfd\x05\x06\x3c\ +\xe8\x53\x01\x03\x00\x00\x00\x18\x00\x50\x00\x65\x00\x72\x00\x73\ +\x00\x70\x00\x65\x00\x6b\x00\x74\x00\x69\x00\x76\x00\x6e\x00\xed\ +\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\x0a\x01\x0c\x00\x65\x00\ +\x73\x00\x6b\x00\xfd\x05\x0c\x4e\x30\xd8\x01\x03\x00\x00\x00\x22\ +\x00\x55\x00\x6b\x00\xe1\x00\x7a\x00\x6b\x00\x61\x00\x20\x00\x6c\ +\x00\x6f\x00\x6b\x00\x61\x00\x6c\x00\x69\x00\x7a\x00\x61\x00\x63\ +\x00\x65\x05\x0e\x9f\xe7\x05\x01\x2f\x00\x00\x01\x3e\x00\x97\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\ +\x4d\x61\x69\x6e\x57\x69\x6e\x64\x6f\x77\x00\ +\x00\x00\x03\x28\ +\x3c\ +\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\ +\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\ +\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x26\x00\x47\xdf\x04\ +\x00\x00\x00\x3b\x00\x4d\x09\xa4\x00\x00\x00\x50\x00\x5a\xf0\x84\ +\x00\x00\x00\x65\x02\xf0\x8c\x31\x00\x00\x00\x7a\x05\x93\x08\xe5\ +\x00\x00\x00\x99\x05\x9b\xa6\x44\x00\x00\x00\xb2\x06\x3c\xe8\x53\ +\x00\x00\x00\xcb\x06\xec\x79\x65\x00\x00\x00\xea\x0c\x4e\x30\xd8\ +\x00\x00\x01\x0b\x0e\x9f\xe7\x05\x00\x00\x01\x26\x69\x00\x00\x01\ +\x63\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\ +\x92\x01\x03\x00\x00\x00\x0a\x00\x56\x00\x69\x00\x73\x00\x74\x00\ +\x61\x05\x00\x05\xcf\xc7\x01\x03\x00\x00\x00\x0a\x00\x26\x00\x46\ +\x00\x69\x00\x6c\x00\x65\x05\x00\x2a\xd0\x25\x01\x03\x00\x00\x00\ +\x0a\x00\x26\x00\x45\x00\x73\x00\x63\x00\x69\x05\x00\x47\xdf\x04\ +\x01\x03\x00\x00\x00\x0a\x00\x50\x00\x72\x00\x69\x00\x6d\x00\x6f\ +\x05\x00\x4d\x09\xa4\x01\x03\x00\x00\x00\x0a\x00\x54\x00\x65\x00\ +\x72\x00\x7a\x00\x6f\x05\x00\x5a\xf0\x84\x01\x03\x00\x00\x00\x14\ +\x00\x4c\x00\x69\x00\x6e\x00\x67\x00\x75\x00\x61\x00\x3a\x00\x20\ +\x00\x25\x00\x31\x05\x02\xf0\x8c\x31\x01\x03\x00\x00\x00\x0e\x00\ +\x4f\x00\x62\x00\x6c\x00\x69\x00\x71\x00\x75\x00\x61\x05\x05\x93\ +\x08\xe5\x01\x03\x00\x00\x00\x0e\x00\x53\x00\x65\x00\x63\x00\x6f\ +\x00\x6e\x00\x64\x00\x6f\x05\x05\x9b\xa6\x44\x01\x03\x00\x00\x00\ +\x14\x00\x49\x00\x73\x00\x6f\x00\x6d\x00\x65\x00\x74\x00\x72\x00\ +\x69\x00\x63\x00\x61\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\x00\x16\ +\x00\x50\x00\x72\x00\x6f\x00\x73\x00\x70\x00\x65\x00\x74\x00\x74\ +\x00\x69\x00\x63\x00\x61\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\ +\x10\x00\x49\x00\x74\x00\x61\x00\x6c\x00\x69\x00\x61\x00\x6e\x00\ +\x6f\x05\x0c\x4e\x30\xd8\x01\x03\x00\x00\x00\x32\x00\x45\x00\x73\ +\x00\x65\x00\x6d\x00\x70\x00\x69\x00\x6f\x00\x20\x00\x64\x00\x69\ +\x00\x20\x00\x6c\x00\x6f\x00\x63\x00\x61\x00\x6c\x00\x69\x00\x7a\ +\x00\x7a\x00\x61\x00\x7a\x00\x69\x00\x6f\x00\x6e\x00\x65\x05\x0e\ +\x9f\xe7\x05\x01\x2f\x00\x00\x01\x3e\x00\x97\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x4d\x61\x69\x6e\ +\x57\x69\x6e\x64\x6f\x77\x00\ +\x00\x00\x03\x24\ +\x3c\ +\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\ +\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\ +\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x22\x00\x47\xdf\x04\ +\x00\x00\x00\x35\x00\x4d\x09\xa4\x00\x00\x00\x50\x00\x5a\xf0\x84\ +\x00\x00\x00\x67\x02\xf0\x8c\x31\x00\x00\x00\x7e\x05\x93\x08\xe5\ +\x00\x00\x00\x9b\x05\x9b\xa6\x44\x00\x00\x00\xb2\x06\x3c\xe8\x53\ +\x00\x00\x00\xc7\x06\xec\x79\x65\x00\x00\x00\xe6\x0c\x4e\x30\xd8\ +\x00\x00\x01\x05\x0e\x9f\xe7\x05\x00\x00\x01\x1a\x69\x00\x00\x01\ +\x5f\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\ +\x92\x01\x03\x00\x00\x00\x06\x00\x56\x00\x69\x00\x73\x05\x00\x05\ +\xcf\xc7\x01\x03\x00\x00\x00\x08\x00\x26\x00\x46\x00\x69\x00\x6c\ +\x05\x00\x2a\xd0\x25\x01\x03\x00\x00\x00\x10\x00\x26\x00\x41\x00\ +\x76\x00\x73\x00\x6c\x00\x75\x00\x74\x00\x74\x05\x00\x47\xdf\x04\ +\x01\x03\x00\x00\x00\x0c\x00\x46\x00\xf8\x00\x72\x00\x73\x00\x74\ +\x00\x65\x05\x00\x4d\x09\xa4\x01\x03\x00\x00\x00\x0c\x00\x54\x00\ +\x72\x00\x65\x00\x64\x00\x6a\x00\x65\x05\x00\x5a\xf0\x84\x01\x03\ +\x00\x00\x00\x12\x00\x53\x00\x70\x00\x72\x00\xe5\x00\x6b\x00\x3a\ +\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\x31\x01\x03\x00\x00\x00\ +\x0c\x00\x53\x00\x6b\x00\x6a\x00\x65\x00\x76\x00\x74\x05\x05\x93\ +\x08\xe5\x01\x03\x00\x00\x00\x0a\x00\x41\x00\x6e\x00\x64\x00\x72\ +\x00\x65\x05\x05\x9b\xa6\x44\x01\x03\x00\x00\x00\x14\x00\x49\x00\ +\x73\x00\x6f\x00\x6d\x00\x65\x00\x74\x00\x72\x00\x69\x00\x73\x00\ +\x6b\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\x00\x14\x00\x50\x00\x65\ +\x00\x72\x00\x73\x00\x70\x00\x65\x00\x6b\x00\x74\x00\x69\x00\x76\ +\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\x0a\x00\x4e\x00\x6f\x00\ +\x72\x00\x73\x00\x6b\x05\x0c\x4e\x30\xd8\x01\x03\x00\x00\x00\x3a\ +\x00\x49\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x6e\x00\x61\x00\x73\ +\x00\x6a\x00\x6f\x00\x6e\x00\x61\x00\x6c\x00\x69\x00\x73\x00\x65\ +\x00\x72\x00\x69\x00\x6e\x00\x67\x00\x73\x00\x65\x00\x6b\x00\x73\ +\x00\x65\x00\x6d\x00\x70\x00\x65\x00\x6c\x05\x0e\x9f\xe7\x05\x01\ +\x2f\x00\x00\x01\x3e\x00\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x0a\x4d\x61\x69\x6e\x57\x69\x6e\x64\ +\x6f\x77\x00\ +\x00\x00\x03\x24\ +\x3c\ +\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\ +\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\ +\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x22\x00\x47\xdf\x04\ +\x00\x00\x00\x3b\x00\x4d\x09\xa4\x00\x00\x00\x54\x00\x5a\xf0\x84\ +\x00\x00\x00\x69\x02\xf0\x8c\x31\x00\x00\x00\x7e\x05\x93\x08\xe5\ +\x00\x00\x00\x9d\x05\x9b\xa6\x44\x00\x00\x00\xb4\x06\x3c\xe8\x53\ +\x00\x00\x00\xcd\x06\xec\x79\x65\x00\x00\x00\xec\x0c\x4e\x30\xd8\ +\x00\x00\x01\x09\x0e\x9f\xe7\x05\x00\x00\x01\x24\x69\x00\x00\x01\ +\x5f\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\ +\x92\x01\x03\x00\x00\x00\x06\x03\x8c\x03\xc8\x03\xb7\x05\x00\x05\ +\xcf\xc7\x01\x03\x00\x00\x00\x0e\x00\x26\x03\x91\x03\xc1\x03\xc7\ +\x03\xb5\x03\xaf\x03\xbf\x05\x00\x2a\xd0\x25\x01\x03\x00\x00\x00\ +\x0e\x03\x88\x00\x26\x03\xbe\x03\xbf\x03\xb4\x03\xbf\x03\xc2\x05\ +\x00\x47\xdf\x04\x01\x03\x00\x00\x00\x0a\x03\xa0\x03\xc1\x03\xce\ +\x03\xc4\x03\xbf\x05\x00\x4d\x09\xa4\x01\x03\x00\x00\x00\x0a\x03\ +\xa4\x03\xc1\x03\xaf\x03\xc4\x03\xbf\x05\x00\x5a\xf0\x84\x01\x03\ +\x00\x00\x00\x14\x03\x93\x03\xbb\x03\xce\x03\xc3\x03\xc3\x03\xb1\ +\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\x31\x01\x03\x00\ +\x00\x00\x0c\x03\xa0\x03\xbb\x03\xac\x03\xb3\x03\xb9\x03\xb1\x05\ +\x05\x93\x08\xe5\x01\x03\x00\x00\x00\x0e\x03\x94\x03\xb5\x03\xcd\ +\x03\xc4\x03\xb5\x03\xc1\x03\xbf\x05\x05\x9b\xa6\x44\x01\x03\x00\ +\x00\x00\x14\x03\x99\x03\xc3\x03\xbf\x03\xbc\x03\xb5\x03\xc4\x03\ +\xc1\x03\xb9\x03\xba\x03\xae\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\ +\x00\x12\x03\xa0\x03\xc1\x03\xbf\x03\xbf\x03\xc0\x03\xc4\x03\xb9\ +\x03\xba\x03\xae\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\x10\x03\ +\x95\x03\xbb\x03\xbb\x03\xb7\x03\xbd\x03\xb9\x03\xba\x03\xac\x05\ +\x0c\x4e\x30\xd8\x01\x03\x00\x00\x00\x30\x03\xa0\x03\xb1\x03\xc1\ +\x03\xac\x03\xb4\x03\xb5\x03\xb9\x03\xb3\x03\xbc\x03\xb1\x00\x20\ +\x03\xb4\x03\xb9\x03\xb5\x03\xb8\x03\xbd\x03\xbf\x03\xc0\x03\xbf\ +\x03\xaf\x03\xb7\x03\xc3\x03\xb7\x03\xc2\x05\x0e\x9f\xe7\x05\x01\ +\x2f\x00\x00\x01\x3e\x00\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x0a\x4d\x61\x69\x6e\x57\x69\x6e\x64\ +\x6f\x77\x00\ +\x00\x00\x03\x26\ +\x3c\ +\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\ +\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\ +\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x2a\x00\x47\xdf\x04\ +\x00\x00\x00\x45\x00\x4d\x09\xa4\x00\x00\x00\x5a\x00\x5a\xf0\x84\ +\x00\x00\x00\x6d\x02\xf0\x8c\x31\x00\x00\x00\x80\x05\x93\x08\xe5\ +\x00\x00\x00\x9f\x05\x9b\xa6\x44\x00\x00\x00\xb8\x06\x3c\xe8\x53\ +\x00\x00\x00\xc9\x06\xec\x79\x65\x00\x00\x00\xe6\x0c\x4e\x30\xd8\ +\x00\x00\x01\x07\x0e\x9f\xe7\x05\x00\x00\x01\x24\x69\x00\x00\x01\ +\x61\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\ +\x92\x01\x03\x00\x00\x00\x0e\x00\x41\x00\x73\x00\x70\x00\x65\x00\ +\x6b\x00\x74\x00\x6f\x05\x00\x05\xcf\xc7\x01\x03\x00\x00\x00\x10\ +\x00\x26\x00\x44\x00\x6f\x00\x73\x00\x69\x00\x65\x00\x72\x00\x6f\ +\x05\x00\x2a\xd0\x25\x01\x03\x00\x00\x00\x0a\x00\x26\x00\x46\x00\ +\x69\x00\x6e\x00\x69\x05\x00\x47\xdf\x04\x01\x03\x00\x00\x00\x08\ +\x00\x55\x00\x6e\x00\x75\x00\x65\x05\x00\x4d\x09\xa4\x01\x03\x00\ +\x00\x00\x08\x00\x54\x00\x72\x00\x69\x00\x65\x05\x00\x5a\xf0\x84\ +\x01\x03\x00\x00\x00\x14\x00\x4c\x00\x69\x00\x6e\x00\x67\x00\x76\ +\x00\x6f\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\x31\x01\ +\x03\x00\x00\x00\x0e\x00\x4f\x00\x62\x00\x6c\x00\x69\x00\x6b\x00\ +\x76\x00\x61\x05\x05\x93\x08\xe5\x01\x03\x00\x00\x00\x06\x00\x44\ +\x00\x75\x00\x65\x05\x05\x9b\xa6\x44\x01\x03\x00\x00\x00\x12\x00\ +\x49\x00\x73\x00\x6f\x00\x6d\x00\x65\x00\x74\x00\x72\x00\x69\x00\ +\x61\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\x00\x16\x00\x50\x00\x65\ +\x00\x72\x00\x73\x00\x70\x00\x65\x00\x6b\x00\x74\x00\x69\x00\x76\ +\x00\x61\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\x12\x00\x45\x00\ +\x73\x00\x70\x00\x65\x00\x72\x00\x61\x00\x6e\x00\x74\x00\x6f\x05\ +\x0c\x4e\x30\xd8\x01\x03\x00\x00\x00\x32\x00\x45\x00\x6b\x00\x7a\ +\x00\x65\x00\x6d\x00\x70\x00\x6c\x00\x6f\x00\x20\x00\x70\x00\x72\ +\x00\x69\x00\x20\x00\x69\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x6e\ +\x00\x61\x00\x63\x00\x69\x00\x69\x00\x67\x00\x6f\x05\x0e\x9f\xe7\ +\x05\x01\x2f\x00\x00\x01\x3e\x00\x97\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x4d\x61\x69\x6e\x57\x69\ +\x6e\x64\x6f\x77\x00\ +\x00\x00\x03\x2a\ +\x3c\ +\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\ +\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\ +\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x24\x00\x47\xdf\x04\ +\x00\x00\x00\x39\x00\x4d\x09\xa4\x00\x00\x00\x4e\x00\x5a\xf0\x84\ +\x00\x00\x00\x63\x02\xf0\x8c\x31\x00\x00\x00\x78\x05\x93\x08\xe5\ +\x00\x00\x00\x9b\x05\x9b\xa6\x44\x00\x00\x00\xb4\x06\x3c\xe8\x53\ +\x00\x00\x00\xcb\x06\xec\x79\x65\x00\x00\x00\xe8\x0c\x4e\x30\xd8\ +\x00\x00\x01\x09\x0e\x9f\xe7\x05\x00\x00\x01\x22\x69\x00\x00\x01\ +\x65\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\ +\x92\x01\x03\x00\x00\x00\x08\x00\x56\x00\x69\x00\x65\x00\x77\x05\ +\x00\x05\xcf\xc7\x01\x03\x00\x00\x00\x0a\x00\x26\x00\x46\x00\x69\ +\x00\x6c\x00\x65\x05\x00\x2a\xd0\x25\x01\x03\x00\x00\x00\x0a\x00\ +\x45\x00\x26\x00\x78\x00\x69\x00\x74\x05\x00\x47\xdf\x04\x01\x03\ +\x00\x00\x00\x0a\x00\x46\x00\x69\x00\x72\x00\x73\x00\x74\x05\x00\ +\x4d\x09\xa4\x01\x03\x00\x00\x00\x0a\x00\x54\x00\x68\x00\x69\x00\ +\x72\x00\x64\x05\x00\x5a\xf0\x84\x01\x03\x00\x00\x00\x18\x00\x4c\ +\x00\x61\x00\x6e\x00\x67\x00\x75\x00\x61\x00\x67\x00\x65\x00\x3a\ +\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\x31\x01\x03\x00\x00\x00\ +\x0e\x00\x4f\x00\x62\x00\x6c\x00\x69\x00\x71\x00\x75\x00\x65\x05\ +\x05\x93\x08\xe5\x01\x03\x00\x00\x00\x0c\x00\x53\x00\x65\x00\x63\ +\x00\x6f\x00\x6e\x00\x64\x05\x05\x9b\xa6\x44\x01\x03\x00\x00\x00\ +\x12\x00\x49\x00\x73\x00\x6f\x00\x6d\x00\x65\x00\x74\x00\x72\x00\ +\x69\x00\x63\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\x00\x16\x00\x50\ +\x00\x65\x00\x72\x00\x73\x00\x70\x00\x65\x00\x63\x00\x74\x00\x69\ +\x00\x76\x00\x65\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\x0e\x00\ +\x45\x00\x6e\x00\x67\x00\x6c\x00\x69\x00\x73\x00\x68\x05\x0c\x4e\ +\x30\xd8\x01\x03\x00\x00\x00\x38\x00\x49\x00\x6e\x00\x74\x00\x65\ +\x00\x72\x00\x6e\x00\x61\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x61\ +\x00\x6c\x00\x69\x00\x7a\x00\x61\x00\x74\x00\x69\x00\x6f\x00\x6e\ +\x00\x20\x00\x45\x00\x78\x00\x61\x00\x6d\x00\x70\x00\x6c\x00\x65\ +\x05\x0e\x9f\xe7\x05\x01\x2f\x00\x00\x01\x3e\x00\x97\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x4d\x61\ +\x69\x6e\x57\x69\x6e\x64\x6f\x77\x00\ +\x00\x00\x02\xd2\ +\x3c\ +\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\ +\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\ +\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x24\x00\x47\xdf\x04\ +\x00\x00\x00\x3f\x00\x4d\x09\xa4\x00\x00\x00\x56\x00\x5a\xf0\x84\ +\x00\x00\x00\x67\x02\xf0\x8c\x31\x00\x00\x00\x78\x05\x93\x08\xe5\ +\x00\x00\x00\x8f\x05\x9b\xa6\x44\x00\x00\x00\xa4\x06\x3c\xe8\x53\ +\x00\x00\x00\xb5\x06\xec\x79\x65\x00\x00\x00\xca\x0c\x4e\x30\xd8\ +\x00\x00\x00\xdb\x0e\x9f\xe7\x05\x00\x00\x00\xec\x69\x00\x00\x01\ +\x0d\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\ +\x92\x01\x03\x00\x00\x00\x08\x88\x68\x79\x3a\x65\xb9\x5f\x0f\x05\ +\x00\x05\xcf\xc7\x01\x03\x00\x00\x00\x10\x30\xd5\x30\xa1\x30\xa4\ +\x30\xeb\x00\x28\x00\x26\x00\x46\x00\x29\x05\x00\x2a\xd0\x25\x01\ +\x03\x00\x00\x00\x0c\x7d\x42\x4e\x86\x00\x28\x00\x26\x00\x58\x00\ +\x29\x05\x00\x47\xdf\x04\x01\x03\x00\x00\x00\x06\x7b\x2c\x4e\x00\ +\x88\x4c\x05\x00\x4d\x09\xa4\x01\x03\x00\x00\x00\x06\x7b\x2c\x4e\ +\x09\x88\x4c\x05\x00\x5a\xf0\x84\x01\x03\x00\x00\x00\x0c\x8a\x00\ +\x8a\x9e\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\x31\x01\ +\x03\x00\x00\x00\x0a\x65\x9c\x30\x81\x62\x95\x5f\x71\x6c\xd5\x05\ +\x05\x93\x08\xe5\x01\x03\x00\x00\x00\x06\x7b\x2c\x4e\x8c\x88\x4c\ +\x05\x05\x9b\xa6\x44\x01\x03\x00\x00\x00\x0a\x7b\x49\x89\xd2\x62\ +\x95\x5f\x71\x6c\xd5\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\x00\x06\ +\x90\x60\x8f\xd1\x6c\xd5\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\ +\x06\x65\xe5\x67\x2c\x8a\x9e\x05\x0c\x4e\x30\xd8\x01\x03\x00\x00\ +\x00\x16\x56\xfd\x96\x9b\x53\x16\x00\x28\x00\x69\x00\x31\x00\x38\ +\x00\x6e\x00\x29\x30\x6e\x4f\x8b\x05\x0e\x9f\xe7\x05\x01\x2f\x00\ +\x00\x01\x3e\x00\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x0a\x4d\x61\x69\x6e\x57\x69\x6e\x64\x6f\x77\ +\x00\ +" + +qt_resource_name = b"\ +\x00\x0c\ +\x0d\xfc\x11\x13\ +\x00\x74\ +\x00\x72\x00\x61\x00\x6e\x00\x73\x00\x6c\x00\x61\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x73\ +\x00\x0a\ +\x04\x50\xdc\x9d\ +\x00\x69\ +\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x66\x00\x72\x00\x2e\x00\x71\x00\x6d\ +\x00\x0a\ +\x04\x6f\xac\x9d\ +\x00\x69\ +\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x6b\x00\x6f\x00\x2e\x00\x71\x00\x6d\ +\x00\x0a\ +\x04\x65\x0c\x9d\ +\x00\x69\ +\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x72\x00\x75\x00\x2e\x00\x71\x00\x6d\ +\x00\x0a\ +\x04\x67\x1c\x9d\ +\x00\x69\ +\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x73\x00\x76\x00\x2e\x00\x71\x00\x6d\ +\x00\x0a\ +\x04\x58\x0c\x9d\ +\x00\x69\ +\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x64\x00\x65\x00\x2e\x00\x71\x00\x6d\ +\x00\x0a\ +\x04\x7d\x3c\x9d\ +\x00\x69\ +\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x7a\x00\x68\x00\x2e\x00\x71\x00\x6d\ +\x00\x0a\ +\x04\x55\xdc\x9d\ +\x00\x69\ +\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x61\x00\x72\x00\x2e\x00\x71\x00\x6d\ +\x00\x0a\ +\x04\x57\xec\x9d\ +\x00\x69\ +\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x63\x00\x73\x00\x2e\x00\x71\x00\x6d\ +\x00\x0a\ +\x04\x6d\xfc\x9d\ +\x00\x69\ +\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x69\x00\x74\x00\x2e\x00\x71\x00\x6d\ +\x00\x0a\ +\x04\x68\xac\x9d\ +\x00\x69\ +\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x6e\x00\x6f\x00\x2e\x00\x71\x00\x6d\ +\x00\x0a\ +\x04\x56\x7c\x9d\ +\x00\x69\ +\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x65\x00\x6c\x00\x2e\x00\x71\x00\x6d\ +\x00\x0a\ +\x04\x59\xac\x9d\ +\x00\x69\ +\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x65\x00\x6f\x00\x2e\x00\x71\x00\x6d\ +\x00\x0a\ +\x04\x59\x9c\x9d\ +\x00\x69\ +\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x65\x00\x6e\x00\x2e\x00\x71\x00\x6d\ +\x00\x0a\ +\x04\x6c\xbc\x9d\ +\x00\x69\ +\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x6a\x00\x70\x00\x2e\x00\x71\x00\x6d\ +" + +qt_resource_struct = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x02\ +\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x00\xba\x00\x00\x00\x00\x00\x01\x00\x00\x12\x76\ +\x00\x00\x01\x22\x00\x00\x00\x00\x00\x01\x00\x00\x1e\xce\ +\x00\x00\x00\xd4\x00\x00\x00\x00\x00\x01\x00\x00\x15\x5a\ +\x00\x00\x00\x86\x00\x00\x00\x00\x00\x01\x00\x00\x0c\x62\ +\x00\x00\x01\x56\x00\x00\x00\x00\x00\x01\x00\x00\x25\x20\ +\x00\x00\x01\x3c\x00\x00\x00\x00\x00\x01\x00\x00\x21\xf6\ +\x00\x00\x00\x52\x00\x00\x00\x00\x00\x01\x00\x00\x06\x06\ +\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x01\x00\x00\x09\x30\ +\x00\x00\x01\x08\x00\x00\x00\x00\x00\x01\x00\x00\x1b\xa6\ +\x00\x00\x01\x70\x00\x00\x00\x00\x00\x01\x00\x00\x28\x4e\ +\x00\x00\x00\xee\x00\x00\x00\x00\x00\x01\x00\x00\x18\x7a\ +\x00\x00\x00\x38\x00\x00\x00\x00\x00\x01\x00\x00\x03\x50\ +\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x0f\xb6\ +" + +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() diff --git a/examples/corelib/tools/i18n/translations/i18n_ar.qm b/examples/corelib/tools/i18n/translations/i18n_ar.qm Binary files differnew file mode 100644 index 0000000..a134c46 --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_ar.qm diff --git a/examples/corelib/tools/i18n/translations/i18n_ar.ts b/examples/corelib/tools/i18n/translations/i18n_ar.ts new file mode 100644 index 0000000..a7ec2c9 --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_ar.ts @@ -0,0 +1,57 @@ +<!DOCTYPE TS><TS> +<context> + <name>MainWindow</name> + <message> + <source>First</source> + <translation>أول</translation> + </message> + <message> + <source>Internationalization Example</source> + <translation>مثال التدويل</translation> + </message> + <message> + <source>Isometric</source> + <translation>متماثل</translation> + </message> + <message> + <source>Language: %1</source> + <translation>اللغة: %1</translation> + </message> + <message> + <source>English</source> + <translation>العربية</translation> + </message> + <message> + <source>Oblique</source> + <translation>مصمت</translation> + </message> + <message> + <source>Perspective</source> + <translation>منظور</translation> + </message> + <message> + <source>Second</source> + <translation>ثانى</translation> + </message> + <message> + <source>Third</source> + <translation>ثالث</translation> + </message> + <message> + <source>View</source> + <translation>مرئى</translation> + </message> + <message> + <source>E&xit</source> + <translation>أخرج</translation> + </message> + <message> + <source>&File</source> + <translation>الملÙ</translation> + </message> + <message> + <source>LTR</source> + <translation>RTL</translation> + </message> +</context> +</TS> diff --git a/examples/corelib/tools/i18n/translations/i18n_cs.qm b/examples/corelib/tools/i18n/translations/i18n_cs.qm Binary files differnew file mode 100644 index 0000000..5b7ff95 --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_cs.qm diff --git a/examples/corelib/tools/i18n/translations/i18n_cs.ts b/examples/corelib/tools/i18n/translations/i18n_cs.ts new file mode 100644 index 0000000..6c4dee9 --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_cs.ts @@ -0,0 +1,57 @@ +<!DOCTYPE TS><TS> +<context> + <name>MainWindow</name> + <message> + <source>View</source> + <translation>Pohled</translation> + </message> + <message> + <source>&File</source> + <translation>&Soubor</translation> + </message> + <message> + <source>E&xit</source> + <translation>&Konec</translation> + </message> + <message> + <source>First</source> + <translation>PrvnÃ</translation> + </message> + <message> + <source>Third</source> + <translation>TÅ™etÃ</translation> + </message> + <message> + <source>Language: %1</source> + <translation>Jayzk: %1</translation> + </message> + <message> + <source>English</source> + <translation>ÄŒeský</translation> + </message> + <message> + <source>Oblique</source> + <translation>NaklonÄ›ný</translation> + </message> + <message> + <source>Second</source> + <translation>Druhý</translation> + </message> + <message> + <source>Isometric</source> + <translation>Isometrický</translation> + </message> + <message> + <source>Perspective</source> + <translation>PerspektivnÃ</translation> + </message> + <message> + <source>Internationalization Example</source> + <translation>Ukázka lokalizace</translation> + </message> + <message> + <source>LTR</source> + <translation>LTR</translation> + </message> +</context> +</TS> diff --git a/examples/corelib/tools/i18n/translations/i18n_de.qm b/examples/corelib/tools/i18n/translations/i18n_de.qm Binary files differnew file mode 100644 index 0000000..177fc49 --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_de.qm diff --git a/examples/corelib/tools/i18n/translations/i18n_de.ts b/examples/corelib/tools/i18n/translations/i18n_de.ts new file mode 100644 index 0000000..249a61d --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_de.ts @@ -0,0 +1,57 @@ +<!DOCTYPE TS><TS> +<context> + <name>MainWindow</name> + <message> + <source>View</source> + <translation>Ansicht</translation> + </message> + <message> + <source>&File</source> + <translation>&Datei</translation> + </message> + <message> + <source>E&xit</source> + <translation>Be&enden</translation> + </message> + <message> + <source>First</source> + <translation>Erstens</translation> + </message> + <message> + <source>Third</source> + <translation>Drittens</translation> + </message> + <message> + <source>English</source> + <translation>Deutsch</translation> + </message> + <message> + <source>Language: %1</source> + <translation>Sprache: %1</translation> + </message> + <message> + <source>Oblique</source> + <translation>Schief</translation> + </message> + <message> + <source>Second</source> + <translation>Zweitens</translation> + </message> + <message> + <source>Isometric</source> + <translation>Isometrisch</translation> + </message> + <message> + <source>Perspective</source> + <translation>Perspektivisch</translation> + </message> + <message> + <source>Internationalization Example</source> + <translation>Internationalisierungsbeispiel</translation> + </message> + <message> + <source>LTR</source> + <translation>LTR</translation> + </message> +</context> +</TS> diff --git a/examples/corelib/tools/i18n/translations/i18n_el.qm b/examples/corelib/tools/i18n/translations/i18n_el.qm Binary files differnew file mode 100644 index 0000000..5483291 --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_el.qm diff --git a/examples/corelib/tools/i18n/translations/i18n_el.ts b/examples/corelib/tools/i18n/translations/i18n_el.ts new file mode 100644 index 0000000..d23a0aa --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_el.ts @@ -0,0 +1,57 @@ +<!DOCTYPE TS><TS> +<context> + <name>MainWindow</name> + <message> + <source>&File</source> + <translation>&ΑÏχείο</translation> + </message> + <message> + <source>E&xit</source> + <translation>Έ&ξοδος</translation> + </message> + <message> + <source>First</source> + <translation>Î Ïώτο</translation> + </message> + <message> + <source>Internationalization Example</source> + <translation>ΠαÏάδειγμα διεθνοποίησης</translation> + </message> + <message> + <source>Isometric</source> + <translation>ΙσομετÏική</translation> + </message> + <message> + <source>Language: %1</source> + <translation>Γλώσσα: %1</translation> + </message> + <message> + <source>English</source> + <translation>Ελληνικά</translation> + </message> + <message> + <source>Oblique</source> + <translation>Πλάγια</translation> + </message> + <message> + <source>Perspective</source> + <translation>Î Ïοοπτική</translation> + </message> + <message> + <source>Second</source> + <translation>ΔεÏτεÏο</translation> + </message> + <message> + <source>Third</source> + <translation>ΤÏίτο</translation> + </message> + <message> + <source>View</source> + <translation>Όψη</translation> + </message> + <message> + <source>LTR</source> + <translation>LTR</translation> + </message> +</context> +</TS> diff --git a/examples/corelib/tools/i18n/translations/i18n_en.qm b/examples/corelib/tools/i18n/translations/i18n_en.qm Binary files differnew file mode 100644 index 0000000..9190ac7 --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_en.qm diff --git a/examples/corelib/tools/i18n/translations/i18n_en.ts b/examples/corelib/tools/i18n/translations/i18n_en.ts new file mode 100644 index 0000000..ca38e95 --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_en.ts @@ -0,0 +1,57 @@ +<!DOCTYPE TS><TS> +<context> + <name>MainWindow</name> + <message> + <source>E&xit</source> + <translation>E&xit</translation> + </message> + <message> + <source>&File</source> + <translation>&File</translation> + </message> + <message> + <source>Internationalization Example</source> + <translation>Internationalization Example</translation> + </message> + <message> + <source>Language: %1</source> + <translation>Language: %1</translation> + </message> + <message> + <source>English</source> + <translation>English</translation> + </message> + <message> + <source>View</source> + <translation>View</translation> + </message> + <message> + <source>Perspective</source> + <translation>Perspective</translation> + </message> + <message> + <source>Isometric</source> + <translation>Isometric</translation> + </message> + <message> + <source>Oblique</source> + <translation>Oblique</translation> + </message> + <message> + <source>First</source> + <translation>First</translation> + </message> + <message> + <source>Second</source> + <translation>Second</translation> + </message> + <message> + <source>Third</source> + <translation>Third</translation> + </message> + <message> + <source>LTR</source> + <translation>LTR</translation> + </message> +</context> +</TS> diff --git a/examples/corelib/tools/i18n/translations/i18n_eo.qm b/examples/corelib/tools/i18n/translations/i18n_eo.qm Binary files differnew file mode 100644 index 0000000..a8457be --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_eo.qm diff --git a/examples/corelib/tools/i18n/translations/i18n_eo.ts b/examples/corelib/tools/i18n/translations/i18n_eo.ts new file mode 100644 index 0000000..16a37be --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_eo.ts @@ -0,0 +1,57 @@ +<!DOCTYPE TS><TS> +<context> + <name>MainWindow</name> + <message> + <source>&File</source> + <translation>&Dosiero</translation> + </message> + <message> + <source>First</source> + <translation>Unue</translation> + </message> + <message> + <source>Internationalization Example</source> + <translation>Ekzemplo pri internaciigo</translation> + </message> + <message> + <source>Isometric</source> + <translation>Isometria</translation> + </message> + <message> + <source>Language: %1</source> + <translation>Lingvo: %1</translation> + </message> + <message> + <source>English</source> + <translation>Esperanto</translation> + </message> + <message> + <source>Oblique</source> + <translation>Oblikva</translation> + </message> + <message> + <source>Perspective</source> + <translation>Perspektiva</translation> + </message> + <message> + <source>Second</source> + <translation>Due</translation> + </message> + <message> + <source>Third</source> + <translation>Trie</translation> + </message> + <message> + <source>View</source> + <translation>Aspekto</translation> + </message> + <message> + <source>E&xit</source> + <translation>&Fini</translation> + </message> + <message> + <source>LTR</source> + <translation>LTR</translation> + </message> +</context> +</TS> diff --git a/examples/corelib/tools/i18n/translations/i18n_fr.qm b/examples/corelib/tools/i18n/translations/i18n_fr.qm Binary files differnew file mode 100644 index 0000000..3e8a69b --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_fr.qm diff --git a/examples/corelib/tools/i18n/translations/i18n_fr.ts b/examples/corelib/tools/i18n/translations/i18n_fr.ts new file mode 100644 index 0000000..0012892 --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_fr.ts @@ -0,0 +1,57 @@ +<!DOCTYPE TS><TS> +<context> + <name>MainWindow</name> + <message> + <source>View</source> + <translation>Vue</translation> + </message> + <message> + <source>&File</source> + <translation>&Fichier</translation> + </message> + <message> + <source>E&xit</source> + <translation>&Quitter</translation> + </message> + <message> + <source>First</source> + <translation>Premier</translation> + </message> + <message> + <source>Third</source> + <translation>Troisième</translation> + </message> + <message> + <source>Language: %1</source> + <translation>Langue : %1</translation> + </message> + <message> + <source>English</source> + <translation>Français</translation> + </message> + <message> + <source>Oblique</source> + <translation>Oblique</translation> + </message> + <message> + <source>Second</source> + <translation>Deuxième</translation> + </message> + <message> + <source>Isometric</source> + <translation>Isométrique</translation> + </message> + <message> + <source>Perspective</source> + <translation>Perspective</translation> + </message> + <message> + <source>Internationalization Example</source> + <translation>Exemple d'internationalisation</translation> + </message> + <message> + <source>LTR</source> + <translation>LTR</translation> + </message> +</context> +</TS> diff --git a/examples/corelib/tools/i18n/translations/i18n_it.qm b/examples/corelib/tools/i18n/translations/i18n_it.qm Binary files differnew file mode 100644 index 0000000..3dffd30 --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_it.qm diff --git a/examples/corelib/tools/i18n/translations/i18n_it.ts b/examples/corelib/tools/i18n/translations/i18n_it.ts new file mode 100644 index 0000000..d516a27 --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_it.ts @@ -0,0 +1,57 @@ +<!DOCTYPE TS><TS> +<context> + <name>MainWindow</name> + <message> + <source>First</source> + <translation>Primo</translation> + </message> + <message> + <source>Internationalization Example</source> + <translation>Esempio di localizzazione</translation> + </message> + <message> + <source>Isometric</source> + <translation>Isometrica</translation> + </message> + <message> + <source>Language: %1</source> + <translation>Lingua: %1</translation> + </message> + <message> + <source>English</source> + <translation>Italiano</translation> + </message> + <message> + <source>Oblique</source> + <translation>Obliqua</translation> + </message> + <message> + <source>Perspective</source> + <translation>Prospettica</translation> + </message> + <message> + <source>Second</source> + <translation>Secondo</translation> + </message> + <message> + <source>Third</source> + <translation>Terzo</translation> + </message> + <message> + <source>View</source> + <translation>Vista</translation> + </message> + <message> + <source>E&xit</source> + <translation>&Esci</translation> + </message> + <message> + <source>&File</source> + <translation>&File</translation> + </message> + <message> + <source>LTR</source> + <translation>LTR</translation> + </message> +</context> +</TS> diff --git a/examples/corelib/tools/i18n/translations/i18n_jp.qm b/examples/corelib/tools/i18n/translations/i18n_jp.qm Binary files differnew file mode 100644 index 0000000..017bc96 --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_jp.qm diff --git a/examples/corelib/tools/i18n/translations/i18n_jp.ts b/examples/corelib/tools/i18n/translations/i18n_jp.ts new file mode 100644 index 0000000..067b5a8 --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_jp.ts @@ -0,0 +1,57 @@ +<!DOCTYPE TS><TS> +<context> + <name>MainWindow</name> + <message> + <source>&File</source> + <translation>ファイル(&F)</translation> + </message> + <message> + <source>E&xit</source> + <translation>終了(&X)</translation> + </message> + <message> + <source>First</source> + <translation>第一行</translation> + </message> + <message> + <source>Internationalization Example</source> + <translation>国際化(i18n)ã®ä¾‹</translation> + </message> + <message> + <source>Isometric</source> + <translation>ç‰è§’投影法</translation> + </message> + <message> + <source>Language: %1</source> + <translation>言語: %1</translation> + </message> + <message> + <source>English</source> + <translation>日本語</translation> + </message> + <message> + <source>Oblique</source> + <translation>æ–œã‚投影法</translation> + </message> + <message> + <source>Perspective</source> + <translation>é 近法</translation> + </message> + <message> + <source>Second</source> + <translation>第二行</translation> + </message> + <message> + <source>Third</source> + <translation>第三行</translation> + </message> + <message> + <source>View</source> + <translation>表示方å¼</translation> + </message> + <message> + <source>LTR</source> + <translation>LTR</translation> + </message> +</context> +</TS> diff --git a/examples/corelib/tools/i18n/translations/i18n_ko.qm b/examples/corelib/tools/i18n/translations/i18n_ko.qm Binary files differnew file mode 100644 index 0000000..d61b93d --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_ko.qm diff --git a/examples/corelib/tools/i18n/translations/i18n_ko.ts b/examples/corelib/tools/i18n/translations/i18n_ko.ts new file mode 100644 index 0000000..bfd5924 --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_ko.ts @@ -0,0 +1,57 @@ +<!DOCTYPE TS><TS> +<context> + <name>MainWindow</name> + <message> + <source>&File</source> + <translation>파ì¼&F</translation> + </message> + <message> + <source>E&xit</source> + <translation>종료&X</translation> + </message> + <message> + <source>First</source> + <translation>첫번째</translation> + </message> + <message> + <source>Internationalization Example</source> + <translation>êµì œí™” ì˜ˆì œ</translation> + </message> + <message> + <source>Isometric</source> + <translation>등측ë„</translation> + </message> + <message> + <source>Language: %1</source> + <translation>언어 : %1</translation> + </message> + <message> + <source>English</source> + <translation>í•œêµì–´</translation> + </message> + <message> + <source>Oblique</source> + <translation>ë¹—ê°</translation> + </message> + <message> + <source>Perspective</source> + <translation>ì›ê·¼í™”법</translation> + </message> + <message> + <source>Second</source> + <translation>ë‘번째</translation> + </message> + <message> + <source>Third</source> + <translation>세번째</translation> + </message> + <message> + <source>View</source> + <translation>보기</translation> + </message> + <message> + <source>LTR</source> + <translation>LTR</translation> + </message> +</context> +</TS> diff --git a/examples/corelib/tools/i18n/translations/i18n_no.qm b/examples/corelib/tools/i18n/translations/i18n_no.qm Binary files differnew file mode 100644 index 0000000..c84b0d7 --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_no.qm diff --git a/examples/corelib/tools/i18n/translations/i18n_no.ts b/examples/corelib/tools/i18n/translations/i18n_no.ts new file mode 100644 index 0000000..2e06974 --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_no.ts @@ -0,0 +1,57 @@ +<!DOCTYPE TS><TS> +<context> + <name>MainWindow</name> + <message> + <source>View</source> + <translation>Vis</translation> + </message> + <message> + <source>&File</source> + <translation>&Fil</translation> + </message> + <message> + <source>E&xit</source> + <translation>&Avslutt</translation> + </message> + <message> + <source>First</source> + <translation>Første</translation> + </message> + <message> + <source>Third</source> + <translation>Tredje</translation> + </message> + <message> + <source>Language: %1</source> + <translation>SprÃ¥k: %1</translation> + </message> + <message> + <source>English</source> + <translation>Norsk</translation> + </message> + <message> + <source>Oblique</source> + <translation>Skjevt</translation> + </message> + <message> + <source>Second</source> + <translation>Andre</translation> + </message> + <message> + <source>Isometric</source> + <translation>Isometrisk</translation> + </message> + <message> + <source>Perspective</source> + <translation>Perspektiv</translation> + </message> + <message> + <source>Internationalization Example</source> + <translation>Internasjonaliseringseksempel</translation> + </message> + <message> + <source>LTR</source> + <translation>LTR</translation> + </message> +</context> +</TS> diff --git a/examples/corelib/tools/i18n/translations/i18n_pt.qm b/examples/corelib/tools/i18n/translations/i18n_pt.qm Binary files differnew file mode 100644 index 0000000..d1d3e6d --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_pt.qm diff --git a/examples/corelib/tools/i18n/translations/i18n_pt.ts b/examples/corelib/tools/i18n/translations/i18n_pt.ts new file mode 100644 index 0000000..9365639 --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_pt.ts @@ -0,0 +1,57 @@ +<!DOCTYPE TS><TS> +<context> + <name>MainWindow</name> + <message> + <source>E&xit</source> + <translation>&Sair</translation> + </message> + <message> + <source>&File</source> + <translation>&Arquivo</translation> + </message> + <message> + <source>Internationalization Example</source> + <translation>Exemplo de Internacionalização</translation> + </message> + <message> + <source>Language: %1</source> + <translation>Idioma: %1</translation> + </message> + <message> + <source>English</source> + <translation>Português</translation> + </message> + <message> + <source>View</source> + <translation>Visão</translation> + </message> + <message> + <source>Perspective</source> + <translation>Perspectiva</translation> + </message> + <message> + <source>Isometric</source> + <translation>Isométrico</translation> + </message> + <message> + <source>Oblique</source> + <translation>OblÃquo</translation> + </message> + <message> + <source>First</source> + <translation>Primeiro</translation> + </message> + <message> + <source>Second</source> + <translation>Segundo</translation> + </message> + <message> + <source>Third</source> + <translation>Terceiro</translation> + </message> + <message> + <source>LTR</source> + <translation>LTR</translation> + </message> +</context> +</TS> diff --git a/examples/corelib/tools/i18n/translations/i18n_ru.qm b/examples/corelib/tools/i18n/translations/i18n_ru.qm Binary files differnew file mode 100644 index 0000000..a76e1b8 --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_ru.qm diff --git a/examples/corelib/tools/i18n/translations/i18n_ru.ts b/examples/corelib/tools/i18n/translations/i18n_ru.ts new file mode 100644 index 0000000..c9a9db8 --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_ru.ts @@ -0,0 +1,57 @@ +<!DOCTYPE TS><TS> +<context> + <name>MainWindow</name> + <message> + <source>View</source> + <translation>Вид</translation> + </message> + <message> + <source>&File</source> + <translation>Файл</translation> + </message> + <message> + <source>E&xit</source> + <translation>Выход</translation> + </message> + <message> + <source>First</source> + <translation>Первый</translation> + </message> + <message> + <source>Third</source> + <translation>Третий</translation> + </message> + <message> + <source>Language: %1</source> + <translation>Язык: %1</translation> + </message> + <message> + <source>English</source> + <translation>РуÑÑкий</translation> + </message> + <message> + <source>Oblique</source> + <translation>КурÑив</translation> + </message> + <message> + <source>Second</source> + <translation>Второй</translation> + </message> + <message> + <source>Isometric</source> + <translation>ИзометричеÑкий</translation> + </message> + <message> + <source>Perspective</source> + <translation>ПерÑпектива</translation> + </message> + <message> + <source>Internationalization Example</source> + <translation>Пример интернациноализации</translation> + </message> + <message> + <source>LTR</source> + <translation>LTR</translation> + </message> +</context> +</TS> diff --git a/examples/corelib/tools/i18n/translations/i18n_sv.qm b/examples/corelib/tools/i18n/translations/i18n_sv.qm Binary files differnew file mode 100644 index 0000000..7204b30 --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_sv.qm diff --git a/examples/corelib/tools/i18n/translations/i18n_sv.ts b/examples/corelib/tools/i18n/translations/i18n_sv.ts new file mode 100644 index 0000000..ac4ab98 --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_sv.ts @@ -0,0 +1,57 @@ +<!DOCTYPE TS><TS> +<context> + <name>MainWindow</name> + <message> + <source>View</source> + <translation>Visa</translation> + </message> + <message> + <source>&File</source> + <translation>&Arkiv</translation> + </message> + <message> + <source>E&xit</source> + <translation>&Avsluta</translation> + </message> + <message> + <source>First</source> + <translation>Första</translation> + </message> + <message> + <source>Third</source> + <translation>Tredje</translation> + </message> + <message> + <source>Language: %1</source> + <translation>SprÃ¥k: %1</translation> + </message> + <message> + <source>English</source> + <translation>Svenska</translation> + </message> + <message> + <source>Oblique</source> + <translation>Skevt</translation> + </message> + <message> + <source>Second</source> + <translation>Andra</translation> + </message> + <message> + <source>Isometric</source> + <translation>Isometriskt</translation> + </message> + <message> + <source>Perspective</source> + <translation>Perspektivt</translation> + </message> + <message> + <source>Internationalization Example</source> + <translation>Internationaliseringsexempel</translation> + </message> + <message> + <source>LTR</source> + <translation>LTR</translation> + </message> +</context> +</TS> diff --git a/examples/corelib/tools/i18n/translations/i18n_zh.qm b/examples/corelib/tools/i18n/translations/i18n_zh.qm Binary files differnew file mode 100644 index 0000000..32053f4 --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_zh.qm diff --git a/examples/corelib/tools/i18n/translations/i18n_zh.ts b/examples/corelib/tools/i18n/translations/i18n_zh.ts new file mode 100644 index 0000000..3b71547 --- /dev/null +++ b/examples/corelib/tools/i18n/translations/i18n_zh.ts @@ -0,0 +1,57 @@ +<!DOCTYPE TS><TS> +<context> + <name>MainWindow</name> + <message> + <source>View</source> + <translation>视图</translation> + </message> + <message> + <source>&File</source> + <translation>文件[&F]</translation> + </message> + <message> + <source>E&xit</source> + <translation>退出[&x]</translation> + </message> + <message> + <source>First</source> + <translation>第一个</translation> + </message> + <message> + <source>Third</source> + <translation>第三个</translation> + </message> + <message> + <source>Language: %1</source> + <translation>è¯è¨€: %1</translation> + </message> + <message> + <source>English</source> + <translation>简体ä¸æ–‡</translation> + </message> + <message> + <source>Oblique</source> + <translation>斜投影</translation> + </message> + <message> + <source>Second</source> + <translation>第二个</translation> + </message> + <message> + <source>Isometric</source> + <translation>ç‰è§’投影</translation> + </message> + <message> + <source>Perspective</source> + <translation>é€è§†æŠ•å½±</translation> + </message> + <message> + <source>Internationalization Example</source> + <translation>国际化范例</translation> + </message> + <message> + <source>LTR</source> + <translation>LTR</translation> + </message> +</context> +</TS> diff --git a/examples/corelib/tools/qtdemo/demos.xml b/examples/corelib/tools/qtdemo/demos.xml new file mode 100644 index 0000000..7bc212a --- /dev/null +++ b/examples/corelib/tools/qtdemo/demos.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<categories> + <category dirname="." docname="demos" name="Demonstrations"> + <example filename="affine" name="Affine Transformations" /> + <example filename="arthurplugin" name="Arthur Plugin" /> + <example filename="composition" name="Composition Modes" /> + <example filename="gradients" name="Gradients" /> + <example filename="pathstroke" name="Path Stroking" /> + <example filename="deform" name="Vector Deformation" /> + <example filename="books" name="Books" /> + <example filename="mainwindow" name="Main Window" /> + <example filename="spreadsheet" name="Spreadsheet" /> + <example filename="sqlbrowser" name="SQL Browser" /> + <example filename="textedit" name="Text Edit" /> + <example filename="embeddeddialogs" name="Embedded Dialogs" /> + </category> +</categories> diff --git a/examples/corelib/tools/qtdemo/displayshape.py b/examples/corelib/tools/qtdemo/displayshape.py new file mode 100644 index 0000000..ca81905 --- /dev/null +++ b/examples/corelib/tools/qtdemo/displayshape.py @@ -0,0 +1,364 @@ +############################################################################ +## +## Copyright (C) 2004-2005 Trolltech AS. All rights reserved. +## +## This file is part of the example classes of the Qt Toolkit. +## +## This file may be used under the terms of the GNU General Public +## License version 2.0 as published by the Free Software Foundation +## and appearing in the file LICENSE.GPL included in the packaging of +## this file. Please review the following information to ensure GNU +## General Public Licensing requirements will be met: +## http://www.trolltech.com/products/qt/opensource.html +## +## If you are unsure which license is appropriate for your use, please +## review the following information: +## http://www.trolltech.com/products/qt/licensing.html or contact the +## sales department at sales@trolltech.com. +## +## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +## +############################################################################ + +from math import ceil +from PySide2 import QtCore, QtGui, QtNetwork, QtXml + + +class DisplayShape: + def __init__(self, position, maxSize): + self.metadata = {} + self.image = QtGui.QImage() + self.pos = position + self.targetPos = QtCore.QPointF() + self.maxSize = maxSize + self.interactive = False + + def animate(self): + if not self.targetPos.isNull(): + displacement = QtCore.QLineF(self.pos, self.targetPos) + newPosition = displacement.pointAt(0.25) + if displacement.length() <= 1.0: + self.pos = self.targetPos + self.targetPos = QtCore.QPointF() + else: + self.pos = newPosition + + return True + + return False + + def isInteractive(self): + return self.interactive + + def paint(self, painter): + painter.save() + painter.drawImage(self.pos, self.image) + painter.restore() + + def position(self): + return self.pos + + def rect(self): + return QtCore.QRectF(self.pos, self.image.size()) + + def setInteractive(self, enable): + self.interactive = enable + + def setPosition(self, position): + self.pos = position + + def setSize(self, size): + self.maxSize = size + + def setTarget(self, position): + self.targetPos = position + + def size(self): + return self.maxSize + + def target(self): + return self.targetPos + + +class PanelShape(DisplayShape): + def __init__(self, path, normal, highlighted, pen, position, maxSize): + DisplayShape.__init__(self, position, maxSize) + + self.normalBrush = normal + self.path = path + self.highlightedBrush = highlighted + self.pen = pen + self.brush = QtGui.QBrush(self.normalBrush) + + def animate(self): + updated = False + + if not "destroy" in self.metadata: + if "fade" in self.metadata: + penColor = self.pen.color() + brushColor = self.brush.color() + penAlpha = penColor.alpha() + brushAlpha = brushColor.alpha() + fadeMinimum = int(self.metadata.get("fade minimum", "0")) + + if penAlpha != fadeMinimum or brushAlpha != fadeMinimum or self.metadata["fade"] > 0: + penAlpha = max(fadeMinimum, min(penAlpha + self.metadata["fade"], 255)) + brushAlpha = max(fadeMinimum, min(brushAlpha + self.metadata["fade"], 255)) + + penColor.setAlpha(penAlpha) + brushColor.setAlpha(brushAlpha) + self.pen.setColor(penColor) + self.brush.setColor(brushColor) + + if penAlpha == 0 and brushAlpha == 0: + self.metadata["destroy"] = True + del self.metadata["fade"] + elif penAlpha == 255 and brushAlpha == 255: + del self.metadata["fade"] + + updated = True + elif "highlight" in self.metadata: + scale = float(self.metadata.get("highlight scale", "0.0")) + color = QtGui.QColor(self.brush.color()) + + if self.metadata["highlight"]: + scale = max(0.0, min(scale + 0.5, 1.0)) + else: + scale = max(0.0, min(scale - 0.2, 1.0)) + + if scale == 0.0: + self.brush = QtGui.QBrush(self.normalBrush) + del self.metadata["highlight"] + + try: + del self.metadata["highlight scale"] + except KeyError: + pass + + updated = True + elif scale != float(self.metadata.get("highlight scale", "0.0")): + self.metadata["highlight scale"] = scale + + if scale == 1.0: + self.brush = QtGui.QBrush(self.highlightedBrush) + else: + normal = self.normalBrush.color() + highlighted = self.highlightedBrush.color() + + color.setRedF((1.0 - scale) * normal.redF() + scale * highlighted.redF()) + color.setGreenF((1.0 - scale) * normal.greenF() + scale * highlighted.greenF()) + color.setBlueF((1.0 - scale) * normal.blueF() + scale * highlighted.blueF()) + self.brush.setColor(color) + + updated = True + + return (DisplayShape.animate(self) or updated) + + def paint(self, painter): + painter.save() + painter.setRenderHint(QtGui.QPainter.Antialiasing) + painter.setBrush(self.brush) + painter.setPen(self.pen) + painter.translate(self.pos) + painter.drawPath(self.path) + painter.restore() + + def rect(self): + return QtCore.QRectF(self.pos + self.path.boundingRect().topLeft(), + self.path.boundingRect().size()) + + +class TitleShape(DisplayShape): + def __init__(self, text, font, pen, position, maxSize, alignment=QtCore.Qt.AlignVCenter|QtCore.Qt.AlignLeft): + DisplayShape.__init__(self, position, maxSize) + + self.font = QtGui.QFont(font) + self.text = QtCore.QString(text) + self.pen = pen + self.alignment = alignment + + fm = QtGui.QFontMetricsF(self.font) + self.textRect = fm.boundingRect(QtCore.QRectF(QtCore.QPointF(0, 0), maxSize), self.alignment, self.text) + + textWidth = max(fm.width(self.text), self.textRect.width()) + textHeight = max(fm.height(), self.textRect.height()) + + scale = min(maxSize.width() / textWidth, maxSize.height() / textHeight) + + self.font.setPointSizeF(self.font.pointSizeF() * scale) + fm = QtGui.QFontMetricsF(self.font) + self.textRect = fm.boundingRect(QtCore.QRectF(QtCore.QPointF(0, 0), maxSize), self.alignment, self.text) + self.baselineStart = QtCore.QPointF(self.textRect.left(), self.textRect.bottom() - fm.descent()) + + def animate(self): + updated = False + + if "destroy" not in self.metadata: + if "fade" in self.metadata: + penColor = self.pen.color() + penAlpha = penColor.alpha() + + penAlpha = max(int(self.metadata.get("fade minimum", "0")), min(penAlpha + self.metadata["fade"], 255)) + + penColor.setAlpha(penAlpha) + self.pen.setColor(penColor) + + if penAlpha == 0: + self.metadata["destroy"] = True + del self.metadata["fade"] + elif penAlpha == 255: + del self.metadata["fade"] + + updated = True + + return (DisplayShape.animate(self) or updated) + + def paint(self, painter): + rect = QtCore.QRectF(self.textRect) + rect.translate(self.pos) + painter.save() + painter.setRenderHint(QtGui.QPainter.TextAntialiasing) + painter.setPen(self.pen) + painter.setFont(self.font) + painter.drawText(self.pos + self.baselineStart, self.text) + painter.restore() + + def rect(self): + rect = QtCore.QRectF(self.textRect) + return rect.translated(self.pos) + + +class ImageShape(DisplayShape): + def __init__(self, original, position, maxSize, alpha=0, alignment=QtCore.Qt.AlignCenter): + DisplayShape.__init__(self, position, maxSize) + + self.alpha = alpha + self.alignment = alignment + + self.source = original.convertToFormat(QtGui.QImage.Format_ARGB32_Premultiplied) + scale = min(min(self.maxSize.width() / self.source.width(), self.maxSize.height() / self.source.height()), 1.0) + + self.source = self.source.scaled(int(ceil(self.source.width() * scale)), + int(ceil(self.source.height() * scale)), + QtCore.Qt.KeepAspectRatio, + QtCore.Qt.SmoothTransformation) + + self.image = QtGui.QImage(self.source.size(), QtGui.QImage.Format_ARGB32_Premultiplied) + + self.offset = QtCore.QPointF(0.0, 0.0) + + if self.alignment & QtCore.Qt.AlignHCenter: + self.offset.setX((self.maxSize.width() - self.image.width()) / 2) + elif self.alignment & QtCore.Qt.AlignRight: + self.offset.setX(self.maxSize.width() - self.image.width()) + + if alignment & QtCore.Qt.AlignVCenter: + self.offset.setY((self.maxSize.height() - self.image.height()) / 2) + elif self.alignment & QtCore.Qt.AlignBottom: + self.offset.setY(self.maxSize.height() - self.image.height()) + + self.redraw() + + def redraw(self): + self.image.fill(QtGui.qRgba(self.alpha, self.alpha, self.alpha, self.alpha)) + + painter = QtGui.QPainter() + painter.begin(self.image) + painter.setCompositionMode(QtGui.QPainter.CompositionMode_SourceIn) + painter.drawImage(0, 0, self.source) + painter.end() + + def paint(self, painter): + painter.drawImage(self.pos + self.offset, self.image) + + def rect(self): + return QtCore.QRectF(self.pos, self.maxSize) + + def animate(self): + updated = False + + if "destroy" not in self.metadata: + if "fade" in self.metadata: + self.alpha = max(int(self.metadata.get("fade minimum", "0")), min(self.alpha + self.metadata["fade"], 255)) + self.redraw() + + if self.alpha == 0: + self.metadata["destroy"] = True + del self.metadata["fade"] + elif self.alpha == 255: + del self.metadata["fade"] + + updated = True + + return (DisplayShape.animate(self) or updated) + + +class DocumentShape(DisplayShape): + def __init__(self, text, font, position, maxSize, alpha=0): + DisplayShape.__init__(self, position, maxSize) + + self.alpha = alpha + self.textDocument = QtGui.QTextDocument() + + self.textDocument.setHtml(text) + self.textDocument.setDefaultFont(font) + self.textDocument.setPageSize(maxSize) + documentSize = self.textDocument.documentLayout().documentSize() + self.setSize(QtCore.QSizeF(self.maxSize.width(), min(self.maxSize.height(), documentSize.height()))) + + self.source = QtGui.QImage(int(ceil(documentSize.width())), + int(ceil(documentSize.height())), + QtGui.QImage.Format_ARGB32_Premultiplied) + self.source.fill(QtGui.qRgba(255, 255, 255, 255)) + + context = QtGui.QAbstractTextDocumentLayout.PaintContext() + self.textDocument.documentLayout().setPaintDevice(self.source) + + painter = QtGui.QPainter() + painter.begin(self.source) + painter.setRenderHint(QtGui.QPainter.TextAntialiasing) + painter.setRenderHint(QtGui.QPainter.Antialiasing) + self.textDocument.documentLayout().draw(painter, context) + painter.end() + + self.source = self.source.scaled(int(ceil(self.maxSize.width())), + int(ceil(self.maxSize.height())), + QtCore.Qt.KeepAspectRatio, + QtCore.Qt.SmoothTransformation) + + self.image = QtGui.QImage(self.source.size(), self.source.format()) + self.redraw() + + def animate(self): + updated = False + + if "destroy" not in self.metadata: + if "fade" in self.metadata: + self.alpha = max(int(self.metadata.get("fade minimum", "0")), min(self.alpha + self.metadata["fade"], 255)) + self.redraw() + + if self.alpha == 0: + self.metadata["destroy"] = True + del self.metadata["fade"] + elif self.alpha == 255: + del self.metadata["fade"] + + updated = True + + return (DisplayShape.animate(self) or updated) + + def redraw(self): + self.image.fill(QtGui.qRgba(self.alpha, self.alpha, self.alpha, self.alpha)) + + painter = QtGui.QPainter() + painter.begin(self.image) + painter.setCompositionMode(QtGui.QPainter.CompositionMode_SourceIn) + painter.drawImage(0, 0, self.source) + painter.end() + + def paint(self, painter): + painter.drawImage(self.pos, self.image) + + def rect(self): + return QtCore.QRectF(self.pos, self.maxSize) diff --git a/examples/corelib/tools/qtdemo/displaywidget.py b/examples/corelib/tools/qtdemo/displaywidget.py new file mode 100644 index 0000000..3f0527e --- /dev/null +++ b/examples/corelib/tools/qtdemo/displaywidget.py @@ -0,0 +1,162 @@ +############################################################################ +## +## Copyright (C) 2004-2005 Trolltech AS. All rights reserved. +## +## This file is part of the example classes of the Qt Toolkit. +## +## This file may be used under the terms of the GNU General Public +## License version 2.0 as published by the Free Software Foundation +## and appearing in the file LICENSE.GPL included in the packaging of +## this file. Please review the following information to ensure GNU +## General Public Licensing requirements will be met: +## http://www.trolltech.com/products/qt/opensource.html +## +## If you are unsure which license is appropriate for your use, please +## review the following information: +## http://www.trolltech.com/products/qt/licensing.html or contact the +## sales department at sales@trolltech.com. +## +## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +## +############################################################################ + +from PySide2 import QtCore, QtGui, QtNetwork, QtXml + + +class DisplayWidget(QtGui.QWidget): + def __init__(self, parent=None): + QtGui.QWidget.__init__(self, parent) + + self.empty = True + self.emptying = False + self.shapes = [] + self.timer = QtCore.QBasicTimer() + + self.enableUpdates() + + self.setBackgroundRole(QtGui.QPalette.Base) + self.setMouseTracking(True) + + def appendShape(self, shape): + self.shapes.append(shape) + self.empty = False + self.enableUpdates() + + def insertShape(self, position, shape): + self.shapes.insert(position, shape) + self.empty = False + self.enableUpdates() + + def minimumSizeHint(self): + return QtCore.QSize(800, 600) + + def mouseMoveEvent(self, event): + if self.emptying: + return + + updated = False + + for shape in self.shapes: + if shape.rect().contains(QtCore.QPointF(event.pos())): + if shape.isInteractive() and "fade" not in shape.metadata and "highlight" not in shape.metadata: + shape.metadata["highlight"] = True + updated = True + elif shape.isInteractive() and "highlight" in shape.metadata and shape.metadata["highlight"]: + shape.metadata["highlight"] = False + updated = True + + if updated: + self.enableUpdates() + + def mousePressEvent(self, event): + if event.button() != QtCore.Qt.LeftButton: + return + + if self.emptying: + return + + for shape in self.shapes: + if shape.rect().contains(QtCore.QPointF(event.pos())) and "fade" not in shape.metadata: + if "action" in shape.metadata: + self.emit(QtCore.SIGNAL("actionRequested"), shape.metadata["action"]) + elif "category" in shape.metadata: + self.emit(QtCore.SIGNAL("categoryRequested"), shape.metadata["category"]) + elif "example" in shape.metadata: + self.emit(QtCore.SIGNAL("exampleRequested"), shape.metadata["example"]) + elif "documentation" in shape.metadata: + self.emit(QtCore.SIGNAL("documentationRequested"), shape.metadata["documentation"]) + shape.metadata["highlight"] = False + self.enableUpdates() + elif "launch" in shape.metadata: + self.emit(QtCore.SIGNAL("launchRequested"), shape.metadata["launch"]) + shape.metadata["fade"] = -5 + self.enableUpdates() + + def paintEvent(self, event): + painter = QtGui.QPainter() + painter.begin(self) + painter.fillRect(event.rect(), QtCore.Qt.white) + for shape in self.shapes: + if shape.rect().intersects(QtCore.QRectF(event.rect())): + shape.paint(painter) + painter.end() + + def reset(self): + if self.emptying: + return + + if len(self.shapes) == 0: + self.empty = True + self.timer.stop() + self.emit(QtCore.SIGNAL("displayEmpty()")) + else: + self.enableUpdates() + self.emptying = True + self.empty = False + for shape in self.shapes: + shape.metadata["fade"] = -15 + shape.metadata["fade minimum"] = 0 + + def shape(self, index): + return self.shapes[index] + + def shapesCount(self): + return len(self.shapes) + + def enableUpdates(self): + if not self.timer.isActive(): + self.timer.start(50, self) + + def timerEvent(self, event): + if event.timerId() == self.timer.timerId(): + discard = [] + + updated = 0 + + for shape in self.shapes: + oldRect = shape.rect().toRect().adjusted(-1, -1, 1, 1) + + if shape.animate(): + self.update(oldRect) + newRect = shape.rect().toRect().adjusted(-1, -1, 1, 1) + updated += 1 + + if "destroy" in shape.metadata: + discard.append(shape) + else: + self.update(newRect) + + if updated == 0: + self.timer.stop() + + for shape in discard: + self.shapes.remove(shape) + + if len(self.shapes) == 0 and not self.empty: + self.empty = True + self.emptying = False + self.timer.stop() + self.emit(QtCore.SIGNAL("displayEmpty()")) + else: + QtGui.QWidget.timerEvent(self, event) diff --git a/examples/corelib/tools/qtdemo/examples.xml b/examples/corelib/tools/qtdemo/examples.xml new file mode 100644 index 0000000..1933cea --- /dev/null +++ b/examples/corelib/tools/qtdemo/examples.xml @@ -0,0 +1,144 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<categories> + <category dirname="designer" name="Qt Designer"> + <example filename="calculatorbuilder" name="Calculator Builder" /> + <example filename="calculatorform" name="Calculator Form" /> + <example filename="containerextension" name="Container Extension" /> + <example filename="plugins" name="Custom Widget Plugins" /> + <example filename="taskmenuextension" name="Task Menu Extension" /> + <example filename="worldtimeclockbuilder" name="World Time Clock Builder" /> + <example filename="worldtimeclockplugin" name="World Time Clock Plugin" /> + </category> + <category dirname="desktop" name="Desktop"> + <example filename="systray" name="System Tray" /> + </category> + <category dirname="dialogs" name="Dialogs"> + <example filename="complexwizard" name="Complex Wizard" /> + <example filename="configdialog" name="Configuration Dialog" /> + <example filename="extension" name="Extension Dialog" /> + <example filename="findfiles" name="Find Files Dialog" /> + <example filename="simplewizard" name="Simple Wizard" /> + <example filename="standarddialogs" name="Standard Dialogs" /> + <example filename="tabdialog" name="Tab Dialog" /> + </category> + <category dirname="draganddrop" name="Drag and Drop"> + <example filename="draggableicons" name="Draggable Icons" /> + <example filename="draggabletext" name="Draggable Text" /> + <example filename="dropsite" name="Drop Site" /> + <example filename="fridgemagnets" name="Fridge Magnets" /> + <example filename="puzzle" name="Puzzle" /> + </category> + <category dirname="graphicsview" name="Graphics View"> + <example filename="elasticnodes" name="Elastic Nodes" /> + <example filename="collidingmice" name="Colliding Mice" /> + <example filename="diagramscene" name="Diagram Scene" /> + <example filename="dragdroprobot" name="Drag and Drop Robot" /> + <example filename="portedcanvas" name="Ported Canvas" /> + <example filename="portedasteroids" name="Ported Asteroids" /> + </category> + <category dirname="itemviews" name="Item Views"> + <example filename="basicsortfiltermodel" name="Basic Sort/Filter Model" /> + <example filename="chart" name="Chart" /> + <example filename="dirview" name="Directory View" /> + <example filename="pixelator" name="Pixelator" /> + <example filename="puzzle" name="Puzzle" /> + <example filename="simpledommodel" name="Simple DOM Model" /> + <example filename="simpletreemodel" name="Simple Tree Model" /> + <example filename="spinboxdelegate" name="Spin Box Delegate" /> + </category> + <category dirname="layouts" name="Layouts"> + <example filename="basiclayouts" name="Basic Layouts" /> + <example filename="borderlayout" name="Border Layout" /> + <example filename="flowlayout" name="Flow Layout" /> + </category> + <category dirname="linguist" name="Qt Linguist"> + <example filename="arrowpad" name="Arrow Pad" /> + <example filename="hellotr" name="Hello World" /> + <example filename="trollprint" name="Troll Print" /> + </category> + <category dirname="mainwindows" name="Main Windows"> + <example filename="application" name="Application" /> + <example filename="dockwidgets" name="Dock Widgets" /> + <example filename="mdi" name="Multiple Document Interface" /> + <example filename="menus" name="Menus" /> + <example filename="recentfiles" name="Recent Files" /> + <example filename="sdi" name="Single Document Interface" /> + </category> + <category dirname="network" name="Networking"> + <example filename="blockingfortuneclient" name="Blocking Fortune Client" /> + <example filename="broadcastreceiver" name="Broadcast Receiver" /> + <example filename="broadcastsender" name="Broadcast Sender" /> + <example filename="fortuneclient" name="Fortune Client" /> + <example filename="fortuneserver" name="Fortune Server" /> + <example filename="ftp" changedirectory="false" name="FTP Client" /> + <example filename="http" changedirectory="false" name="HTTP Client" /> + <example filename="loopback" name="Loopback" /> + <example filename="threadedfortuneserver" name="Threaded Fortune Server" /> + <example filename="torrent" name="Torrent Client" /> + </category> + <category dirname="opengl" name="OpenGL"> + <example filename="2dpainting" name="2D Painting" /> + <example filename="grabber" name="Grabber" /> + <example filename="hellogl" name="Hello GL" /> + <example filename="overpainting" name="Overpainting" /> + <example filename="pbuffers" name="Pixel Buffers" /> + <example filename="samplebuffers" name="Sample Buffers" /> + <example filename="textures" name="Textures" /> + </category> + <category dirname="painting" name="Painting"> + <example filename="basicdrawing" name="Basic Drawing" /> + <example filename="concentriccircles" name="Concentric Circles" /> + <example filename="painterpaths" name="Painter Paths" /> + <example filename="transformations" name="Transformations" /> + <example filename="svgviewer" name="SVG Viewer" /> + </category> + <category dirname="richtext" name="Rich Text"> + <example filename="calendar" name="Calendar" /> + <example filename="orderform" name="Order Form" /> + <example filename="syntaxhighlighter" name="Syntax Highlighter" /> + </category> + <category dirname="sql" name="SQL"> + <example filename="cachedtable" name="Cached Table" /> + <example filename="querymodel" name="Query Model" /> + <example filename="relationaltablemodel" name="Relational Table Model" /> + <example filename="tablemodel" name="Table Model" /> + </category> + <category dirname="threads" name="Threading"> + <example filename="mandelbrot" name="Mandelbrot" /> + <example filename="semaphores" name="Semaphores" executable="false" /> + <example filename="waitconditions" name="Wait Conditions" executable="false" /> + </category> + <category dirname="tools" name="Tools"> + <example filename="codecs" name="Codecs" /> + <example filename="i18n" name="Internationalization" /> + <example filename="plugandpaint" name="Plug and Paint" /> + <example filename="qtdemo" name="Qt Demo" executable="false" /> + <example filename="regexp" name="Regular Expressions" /> + <example filename="settingseditor" name="Settings Editor" /> + </category> + <category dirname="widgets" name="Widgets"> + <example filename="analogclock" name="Analog Clock" /> + <example filename="calculator" name="Calculator" /> + <example filename="charactermap" name="Character Map" /> + <example filename="digitalclock" name="Digital Clock" /> + <example filename="groupbox" name="Group Box" /> + <example filename="icons" name="Icons" /> + <example filename="imageviewer" name="Image Viewer" /> + <example filename="lineedits" name="Line Edits" /> + <example filename="movie" name="Movie Player" /> + <example filename="screenshot" name="Screenshot" /> + <example filename="scribble" name="Scribble" /> + <example filename="shapedclock" name="Shaped Clock" /> + <example filename="sliders" name="Sliders" /> + <example filename="spinboxes" name="Spin Boxes" /> + <example filename="styles" name="Styles" /> + <example filename="tetrix" name="Tetrix" /> + <example filename="tooltips" name="Tool Tips" /> + <example filename="wiggly" name="Wiggly" /> + <example filename="windowflags" name="Window Flags" /> + </category> + <category dirname="xml" name="XML"> + <example filename="saxbookmarks" name="SAX Bookmarks" /> + <example filename="dombookmarks" name="DOM Bookmarks" /> + </category> +</categories> diff --git a/examples/corelib/tools/qtdemo/images/qt4-logo.png b/examples/corelib/tools/qtdemo/images/qt4-logo.png Binary files differnew file mode 100644 index 0000000..585a19d --- /dev/null +++ b/examples/corelib/tools/qtdemo/images/qt4-logo.png diff --git a/examples/corelib/tools/qtdemo/images/rb-logo.png b/examples/corelib/tools/qtdemo/images/rb-logo.png Binary files differnew file mode 100644 index 0000000..2b23fe4 --- /dev/null +++ b/examples/corelib/tools/qtdemo/images/rb-logo.png diff --git a/examples/corelib/tools/qtdemo/launcher.py b/examples/corelib/tools/qtdemo/launcher.py new file mode 100644 index 0000000..65ffb91 --- /dev/null +++ b/examples/corelib/tools/qtdemo/launcher.py @@ -0,0 +1,1008 @@ +#!/usr/bin/env python +############################################################################ +## +## Copyright (C) 2004-2005 Trolltech AS. All rights reserved. +## +## This file is part of the example classes of the Qt Toolkit. +## +## This file may be used under the terms of the GNU General Public +## License version 2.0 as published by the Free Software Foundation +## and appearing in the file LICENSE.GPL included in the packaging of +## this file. Please review the following information to ensure GNU +## General Public Licensing requirements will be met: +## http://www.trolltech.com/products/qt/opensource.html +## +## If you are unsure which license is appropriate for your use, please +## review the following information: +## http://www.trolltech.com/products/qt/licensing.html or contact the +## sales department at sales@trolltech.com. +## +## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +## +############################################################################ + +import sys +import re + +from PySide2 import QtCore, QtGui, QtHelp, QtNetwork, QtXml + +from displaywidget import DisplayWidget +from displayshape import TitleShape, DisplayShape, PanelShape, ImageShape, DocumentShape + +class Launcher(QtGui.QMainWindow): + def __init__(self, parent = None): + QtGui.QMainWindow.__init__(self, parent) + + self.categories = {} + self.runningProcesses = {} + self.examples = {} + self.runningExamples = [] + self.titleFont = QtGui.QFont(self.font()) + self.titleFont.setWeight(QtGui.QFont.Bold) + self.fontRatio = 0.8 + self.documentFont = self.font() + self.inFullScreenResize = False + self.currentCategory = "[starting]" + self.qtLogo = QtGui.QImage() + self.rbLogo = QtGui.QImage() + self.currentExample = "" + self.assistantProcess = QtCore.QProcess() + + parentPageAction1 = QtGui.QAction(self.tr("Show Parent Page"), self) + parentPageAction2 = QtGui.QAction(self.tr("Show Parent Page"), self) + parentPageAction3 = QtGui.QAction(self.tr("Show Parent Page"), self) + parentPageAction1.setShortcut(QtGui.QKeySequence(self.tr("Escape"))) + parentPageAction2.setShortcut(QtGui.QKeySequence(self.tr("Backspace"))) + parentPageAction3.setShortcut(QtGui.QKeySequence(self.tr("Alt+Left"))) + + fullScreenAction = QtGui.QAction(self.tr("Toggle &Full Screen"), self) + fullScreenAction.setShortcut(QtGui.QKeySequence(self.tr("Ctrl+F"))) + + exitAction = QtGui.QAction(self.tr("E&xit"), self) + exitAction.setShortcut(QtGui.QKeySequence(self.tr("Ctrl+Q"))) + + self.connect(parentPageAction1, QtCore.SIGNAL("triggered()"), self, QtCore.SIGNAL("showPage()")) + self.connect(parentPageAction2, QtCore.SIGNAL("triggered()"), self, QtCore.SIGNAL("showPage()")) + self.connect(parentPageAction3, QtCore.SIGNAL("triggered()"), self, QtCore.SIGNAL("showPage()")) + self.connect(fullScreenAction, QtCore.SIGNAL("triggered()"), self.toggleFullScreen) + self.connect(exitAction, QtCore.SIGNAL("triggered()"), self.close) + + self.display = DisplayWidget() + + self.addAction(parentPageAction1) + self.addAction(parentPageAction2) + self.addAction(parentPageAction3) + self.addAction(fullScreenAction) + self.addAction(exitAction) + + self.slideshowTimer = QtCore.QTimer(self) + self.slideshowTimer.setInterval(5000) + self.resizeTimer = QtCore.QTimer(self) + self.resizeTimer.setSingleShot(True) + self.connect(self.resizeTimer, QtCore.SIGNAL("timeout()"), self.redisplayWindow) + + self.connect(self.display, QtCore.SIGNAL("actionRequested"), + self.executeAction) + self.connect(self.display, QtCore.SIGNAL("categoryRequested"), + self.showExamples) + self.connect(self.display, QtCore.SIGNAL("documentationRequested"), + self.showExampleDocumentation) + self.connect(self.display, QtCore.SIGNAL("exampleRequested"), + self.showExampleSummary) + + self.connect(self.display, QtCore.SIGNAL("launchRequested"), + self.launchExample) + + self.connect(self, QtCore.SIGNAL("showPage()"), self.showParentPage, + QtCore.Qt.QueuedConnection) + self.connect(self, QtCore.SIGNAL("windowResized()"), self.redisplayWindow, + QtCore.Qt.QueuedConnection) + + self.setCentralWidget(self.display) + self.setMaximumSize(QtGui.QApplication.desktop().screenGeometry().size()) + self.setWindowTitle(self.tr("PyQt Examples and Demos")) + self.setWindowIcon(QtGui.QIcon(QtGui.QPixmap(":/images/qt4-logo.png"))) + + def initHelpEngine(self): + self.helpRootUrl = QtCore.QString("qthelp://com.trolltech.qt.%d%d%d/qdoc/" % (QtCore.QT_VERSION >> 16, ((QtCore.QT_VERSION >> 8) & 0xff), (QtCore.QT_VERSION & 0xff))) + + # Store help collection file in cache dir of assistant. + cacheDir = QtGui.QDesktopServices.storageLocation(QtGui.QDesktopServices.DataLocation) + "/Trolltech/Assistant" + helpDataFile = "qtdemo_%s.qhc" % QtCore.QT_VERSION_STR + + dir = QtCore.QDir() + if not dir.exists(cacheDir): + dir.mkpath(cacheDir) + + # Create the help engine (and a new helpDataFile if it does not exist). + self.helpEngine = QtHelp.QHelpEngineCore(cacheDir + helpDataFile) + self.helpEngine.setupData() + + qtDocRoot = QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.DocumentationPath) + "/qch" + qtDocRoot = QtCore.QDir(qtDocRoot).absolutePath() + + qchFiles = ["/qt.qch", "/designer.qch", "/linguist.qch"] + + oldDir = self.helpEngine.customValue("docDir", QtCore.QVariant(QtCore.QString())).toString() + if oldDir != qtDocRoot: + for qchFile in qchFiles: + self.helpEngine.unregisterDocumentation(QtHelp.QHelpEngineCore.namespaceName(qtDocRoot + qchFile)) + + # If the data that the engine will work on is not yet registered, do it + # now. + for qchFile in qchFiles: + self.helpEngine.registerDocumentation(qtDocRoot + qchFile) + + self.helpEngine.setCustomValue("docDir", QtCore.QVariant(qtDocRoot)) + + def setup(self): + self.initHelpEngine() + + self.documentationDir = QtCore.QDir( + QtCore.QLibraryInfo.location( + QtCore.QLibraryInfo.DocumentationPath)) + + self.imagesDir = QtCore.QDir(self.documentationDir) + + if self.documentationDir.cd("html") and self.documentationDir.cd("images"): + self.imagesDir.setPath(self.documentationDir.path()) + self.documentationDir.cdUp() + else: + QtGui.QMessageBox.warning(self, self.tr("No Documentation Found"), + self.tr("I could not find the Qt documentation.")) + + self.maximumLabels = 0 + + self.demosDir = QtCore.QDir("./../../demos") + demoCategories = self.readInfo(":/demos.xml", self.demosDir) + + self.examplesDir = QtCore.QDir("./../../") + exampleCategories = self.readInfo(":/examples.xml", self.examplesDir) + + if demoCategories + exampleCategories <= 0: + QtGui.QMessageBox.warning(self, self.tr("No Examples or Demos found"), + self.tr("I could not find any PyQt examples or demos.\n"\ + "Please ensure that PyQt is installed correctly."), + QtGui.QMessageBox.Cancel, QtGui.QMessageBox.NoButton) + return False + + self.maximumLabels = max(demoCategories + exampleCategories, self.maximumLabels) + + for category in self.categories: + self.maximumLabels = max(len(self.categories[category]['examples']) + 1, self.maximumLabels) + + mainDescription = self.categories['[main]']['description'] + if len(mainDescription) > 0: + mainDescription += self.tr("\n") + + self.categories['[main]']['description'] = mainDescription + self.tr( + "<p>Press <b>Escape</b>, <b>Backspace</b>, or <b>%1</b> to " + "return to a previous menu.</p>" + "<p>Press <b>%2</b> to switch between normal and full screen " + "modes.</p>" + "<p>Use <b>%3</b> to exit the launcher.</p>") \ + .arg(QtCore.QString(QtGui.QKeySequence(self.tr("Alt+Left")))) \ + .arg(QtCore.QString(QtGui.QKeySequence(self.tr("Ctrl+F")))) \ + .arg(QtCore.QString(QtGui.QKeySequence(self.tr("Ctrl+Q")))) + + self.emit(QtCore.SIGNAL("showPage()")) + return True + + def enableLaunching(self): + process = self.sender() + example = self.runningProcesses[process] + del self.runningProcesses[process] + process.deleteLater() + self.runningExamples.remove(example) + + if example == self.currentExample: + for i in range(0, self.display.shapesCount()): + shape = self.display.shape(i) + if shape.metadata.get("launch", "") == example: + shape.metadata["fade"] = 15 + self.display.enableUpdates() + + self.slideshowTimer.start() + + def executeAction(self, action): + if action == "parent": + self.showParentPage() + elif action == "exit": + if len(self.runningExamples) == 0: + self.connect(self.display, QtCore.SIGNAL("displayEmpty()"), self.close) + self.display.reset() + else: + self.close() + + def launchExample(self, uniquename): + if uniquename in self.runningExamples: + return + + process = QtCore.QProcess(self) + self.connect(process, QtCore.SIGNAL("finished(int)"), self.enableLaunching) + + self.runningExamples.append(uniquename) + self.runningProcesses[process] = uniquename + + if self.examples[uniquename]['changedirectory'] == 'true': + process.setWorkingDirectory(self.examples[uniquename]['absolute path']) + + process.start(sys.executable, [self.examples[uniquename]['path']]) + + if process.state() == QtCore.QProcess.Starting: + self.slideshowTimer.stop() + + def showCategories(self): + self.newPage() + self.fadeShapes() + self.currentCategory = "" + self.currentExample = "" + + # Sort the category names excluding any "Qt" prefix. + def csort(c1, c2): + if c1.startsWith("Qt "): + c1 = c1[3:] + + if c2.startsWith("Qt "): + c2 = c2[3:] + + return cmp(c1, c2) + + categories = [c for c in self.categories.keys() if c != "[main]"] + categories.sort(csort) + + horizontalMargin = 0.025*self.width() + verticalMargin = 0.025*self.height() + title = TitleShape(self.tr("PyQt Examples and Demos"), + self.titleFont, QtGui.QPen(QtGui.QColor("#a6ce39")), QtCore.QPointF(), + QtCore.QSizeF(0.5*self.width(), 4*verticalMargin)) + + title.setPosition(QtCore.QPointF(self.width() / 2 - title.rect().width() / 2, + -title.rect().height())) + title.setTarget(QtCore.QPointF(title.position().x(), verticalMargin)) + + self.display.appendShape(title) + + topMargin = 6*verticalMargin + bottomMargin = self.height() - 3.2*verticalMargin + space = bottomMargin - topMargin + step = min(title.rect().height() / self.fontRatio, space/self.maximumLabels ) + textHeight = self.fontRatio * step + + startPosition = QtCore.QPointF(0.0, topMargin) + maxSize = QtCore.QSizeF(10.8*horizontalMargin, textHeight) + maxWidth = 0.0 + + newShapes = [] + + for category in categories: + caption = TitleShape(category, self.font(), QtGui.QPen(), QtCore.QPointF(startPosition), QtCore.QSizeF(maxSize)) + caption.setPosition(QtCore.QPointF(-caption.rect().width(), + caption.position().y())) + caption.setTarget(QtCore.QPointF(2*horizontalMargin, caption.position().y())) + + newShapes.append(caption) + startPosition += QtCore.QPointF(0.0, step) + maxWidth = max(maxWidth, caption.rect().width() ) + + exitButton = TitleShape(self.tr("Exit"), self.font(), QtGui.QPen(QtCore.Qt.white), + QtCore.QPointF(startPosition), QtCore.QSizeF(maxSize)) + exitButton.setTarget(QtCore.QPointF(2*horizontalMargin, exitButton.position().y())) + newShapes.append(exitButton) + + startPosition = QtCore.QPointF(self.width(), topMargin ) + + extra = (step - textHeight)/4 + + backgroundPath = QtGui.QPainterPath() + backgroundPath.addRect(-2*extra, -extra, maxWidth + 4*extra, textHeight + 2*extra) + + for category in categories: + background = PanelShape(backgroundPath, + QtGui.QBrush(self.categories[category]['color']), QtGui.QBrush(QtGui.QColor("#e0e0ff")), + QtGui.QPen(QtCore.Qt.NoPen), QtCore.QPointF(startPosition), + QtCore.QSizeF(maxWidth + 4*extra, textHeight + 2*extra)) + + background.metadata["category"] = category + background.setInteractive(True) + background.setTarget(QtCore.QPointF(2*horizontalMargin, + background.position().y())) + self.display.insertShape(0, background) + startPosition += QtCore.QPointF(0.0, step) + + exitPath = QtGui.QPainterPath() + exitPath.moveTo(-2*extra, -extra) + exitPath.lineTo(-8*extra, textHeight/2) + exitPath.lineTo(-extra, textHeight + extra) + exitPath.lineTo(maxWidth + 2*extra, textHeight + extra) + exitPath.lineTo(maxWidth + 2*extra, -extra) + exitPath.closeSubpath() + + exitBackground = PanelShape(exitPath, + QtGui.QBrush(QtGui.QColor("#a6ce39")), QtGui.QBrush(QtGui.QColor("#c7f745")), + QtGui.QPen(QtCore.Qt.NoPen), QtCore.QPointF(startPosition), + QtCore.QSizeF(maxWidth + 10*extra, textHeight + 2*extra)) + + exitBackground.metadata["action"] = "exit" + exitBackground.setInteractive(True) + exitBackground.setTarget(QtCore.QPointF(2*horizontalMargin, + exitBackground.position().y())) + self.display.insertShape(0, exitBackground) + + for caption in newShapes: + position = caption.target() + size = caption.rect().size() + caption.setPosition(QtCore.QPointF(-maxWidth, position.y())) + self.display.appendShape(caption) + + leftMargin = 3*horizontalMargin + maxWidth + rightMargin = self.width() - 3*horizontalMargin + + description = DocumentShape(self.categories['[main]']['description'], + self.documentFont, QtCore.QPointF(leftMargin, topMargin), + QtCore.QSizeF(rightMargin - leftMargin, space)) + + description.metadata["fade"] = 10 + self.display.appendShape(description) + + imageHeight = title.rect().height() + verticalMargin + + qtLength = min(imageHeight, title.rect().left()-3*horizontalMargin) + qtMaxSize = QtCore.QSizeF(qtLength, qtLength) + + qtShape = ImageShape(self.qtLogo, + QtCore.QPointF(2*horizontalMargin-extra, -imageHeight), qtMaxSize, 0, + QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) + + qtShape.metadata["fade"] = 15 + qtShape.setTarget(QtCore.QPointF(qtShape.rect().x(), verticalMargin)) + self.display.insertShape(0, qtShape) + + trolltechMaxSize = QtCore.QSizeF( + self.width()-3*horizontalMargin-title.rect().right(), imageHeight) + + trolltechShape = ImageShape(self.rbLogo, + QtCore.QPointF(self.width()-2*horizontalMargin-trolltechMaxSize.width()+extra, + -imageHeight), + trolltechMaxSize, 0, QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter) + + trolltechShape.metadata["fade"] = 15 + trolltechShape.setTarget(QtCore.QPointF(trolltechShape.rect().x(), + verticalMargin)) + + self.display.insertShape(0, trolltechShape) + + self.addVersionAndCopyright(QtCore.QRectF(2*horizontalMargin, + self.height() - verticalMargin - textHeight, + self.width() - 4*horizontalMargin, textHeight)) + + def showExampleDocumentation(self, uniqueName): + self.disconnect(self.display, QtCore.SIGNAL("displayEmpty()"), self.resizeWindow) + self.disconnect(self.display, QtCore.SIGNAL("displayEmpty()"), self.close) + self.currentExample = uniqueName + + url = self.helpRootUrl + self.examples[uniqueName]["document path"] + + # Start assistant if it isn't already running. + if self.assistantProcess.state() != QtCore.QProcess.Running: + app = QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.BinariesPath) + QtCore.QDir.separator() + if sys.platform == 'darwin': + app += "Assistant.app/Contents/MacOS/Assistant" + else: + app += "assistant" + + self.assistantProcess.start(app, ["-enableRemoteControl"]) + + if not self.assistantProcess.waitForStarted(): + QtGui.QMessageBox.critical(None, "Qt Demo", "Could not start Qt Assistant.") + return + + # Send command through remote control even if the process was started + # to activate assistant and bring it to front. + str = QtCore.QTextStream(self.assistantProcess) + str << "SetSource " << url << '\n' + + def showExamples(self, category): + self.newPage() + self.fadeShapes() + self.currentCategory = category + self.currentExample = "" + + horizontalMargin = 0.025*self.width() + verticalMargin = 0.025*self.height() + + title = self.addTitle(category, verticalMargin) + self.addTitleBackground(title) + + topMargin = 6*verticalMargin + bottomMargin = self.height() - 3.2*verticalMargin + space = bottomMargin - topMargin + step = min(title.rect().height() / self.fontRatio, space/self.maximumLabels ) + textHeight = self.fontRatio * step + + startPosition = QtCore.QPointF(2*horizontalMargin, self.height()+topMargin) + finishPosition = QtCore.QPointF(2*horizontalMargin, topMargin) + maxSize = QtCore.QSizeF(32*horizontalMargin, textHeight) + maxWidth = 0.0 + + for example in self.categories[self.currentCategory]['examples']: + caption = TitleShape(example, self.font(), QtGui.QPen(), QtCore.QPointF(startPosition), QtCore.QSizeF(maxSize)) + caption.setTarget(QtCore.QPointF(finishPosition)) + + self.display.appendShape(caption) + + startPosition += QtCore.QPointF(0.0, step) + + finishPosition += QtCore.QPointF(0.0, step) + maxWidth = max(maxWidth, caption.rect().width() ) + + menuButton = TitleShape(self.tr("Main Menu"), self.font(), + QtGui.QPen(QtCore.Qt.white), + QtCore.QPointF(startPosition), + QtCore.QSizeF(maxSize)) + menuButton.setTarget(QtCore.QPointF(finishPosition)) + self.display.appendShape(menuButton) + + startPosition = QtCore.QPointF(self.width(), topMargin ) + extra = (step - textHeight)/4 + + for example in self.categories[self.currentCategory]['examples']: + uniquename = self.currentCategory + "-" + example + + path = QtGui.QPainterPath() + + path.addRect(-2*extra, -extra, maxWidth + 4*extra, textHeight+2*extra) + + background = PanelShape(path, + QtGui.QBrush(self.examples[uniquename]['color']), + QtGui.QBrush(QtGui.QColor("#e0e0ff")), + QtGui.QPen(QtCore.Qt.NoPen), QtCore.QPointF(startPosition), + QtCore.QSizeF(maxWidth + 4*extra, textHeight + 2*extra)) + + background.metadata["example"] = uniquename + background.setInteractive(True) + background.setTarget(QtCore.QPointF(2*horizontalMargin, + background.position().y())) + self.display.insertShape(0, background) + startPosition += QtCore.QPointF(0.0, step) + + backPath = QtGui.QPainterPath() + backPath.moveTo(-2*extra, -extra) + backPath.lineTo(-8*extra, textHeight/2) + backPath.lineTo(-extra, textHeight + extra) + backPath.lineTo(maxWidth + 2*extra, textHeight + extra) + backPath.lineTo(maxWidth + 2*extra, -extra) + backPath.closeSubpath() + + buttonBackground = PanelShape(backPath, + QtGui.QBrush(QtGui.QColor("#a6ce39")), QtGui.QBrush(QtGui.QColor("#c7f745")), + QtGui.QPen(QtCore.Qt.NoPen), QtCore.QPointF(startPosition), + QtCore.QSizeF(maxWidth + 10*extra, textHeight + 2*extra)) + + buttonBackground.metadata["action"] = "parent" + buttonBackground.setInteractive(True) + buttonBackground.setTarget(QtCore.QPointF(2*horizontalMargin, + buttonBackground.position().y())) + self.display.insertShape(0, buttonBackground) + + leftMargin = 3*horizontalMargin + maxWidth + rightMargin = self.width() - 3*horizontalMargin + + description = DocumentShape(self.categories[self.currentCategory]['description'], + self.documentFont, QtCore.QPointF(leftMargin, topMargin), + QtCore.QSizeF(rightMargin - leftMargin, space), 0) + + description.metadata["fade"] = 10 + self.display.appendShape(description) + + self.addVersionAndCopyright(QtCore.QRectF(2*horizontalMargin, + self.height() - verticalMargin - textHeight, + self.width() - 4*horizontalMargin, textHeight)) + + def showExampleSummary(self, uniquename): + self.newPage() + self.fadeShapes() + self.currentExample = uniquename + + horizontalMargin = 0.025*self.width() + verticalMargin = 0.025*self.height() + + title = self.addTitle(self.examples[uniquename]['name'], verticalMargin) + titleBackground = self.addTitleBackground(title) + + topMargin = 2*verticalMargin + titleBackground.rect().bottom() + bottomMargin = self.height() - 8*verticalMargin + space = bottomMargin - topMargin + step = min(title.rect().height() / self.fontRatio, + ( bottomMargin + 4.8*verticalMargin - topMargin )/self.maximumLabels ) + footerTextHeight = self.fontRatio * step + + leftMargin = 3*horizontalMargin + rightMargin = self.width() - 3*horizontalMargin + + if self.examples[self.currentExample].has_key('description'): + description = DocumentShape( self.examples[self.currentExample]['description'], + self.documentFont, QtCore.QPointF(leftMargin, topMargin), + QtCore.QSizeF(rightMargin-leftMargin, space), 0 ) + description.metadata["fade"] = 10 + + description.setPosition(QtCore.QPointF(description.position().x(), + 0.8*self.height()-description.rect().height())) + + self.display.appendShape(description) + space = description.position().y() - topMargin - 2*verticalMargin + + if self.examples[self.currentExample].has_key('image files'): + image = QtGui.QImage(self.examples[self.currentExample]['image files'][0]) + imageMaxSize = QtCore.QSizeF(self.width() - 8*horizontalMargin, space) + + self.currentFrame = ImageShape( image, + QtCore.QPointF(self.width()-imageMaxSize.width()/2, topMargin), + QtCore.QSizeF(imageMaxSize )) + + self.currentFrame.metadata["fade"] = 15 + self.currentFrame.setTarget(QtCore.QPointF(self.width()/2-imageMaxSize.width()/2, + topMargin)) + self.display.appendShape(self.currentFrame) + + if len(self.examples[self.currentExample]['image files']) > 1: + self.connect(self.slideshowTimer, QtCore.SIGNAL("timeout()"), + self.updateExampleSummary) + self.slideshowFrame = 0 + self.slideshowTimer.start() + + maxSize = QtCore.QSizeF(0.3*self.width(),2*verticalMargin) + leftMargin = 0.0 + rightMargin = 0.0 + + backButton = TitleShape(self.currentCategory, self.font(), + QtGui.QPen(QtCore.Qt.white), QtCore.QPointF(0.1*self.width(), self.height()), QtCore.QSizeF(maxSize), + QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop) + backButton.setTarget(QtCore.QPointF(backButton.position().x(), + self.height() - 5.2*verticalMargin)) + + self.display.appendShape(backButton) + + maxWidth = backButton.rect().width() + textHeight = backButton.rect().height() + extra = (3*verticalMargin - textHeight)/4 + + path = QtGui.QPainterPath() + path.moveTo(-extra, -extra) + path.lineTo(-4*extra, textHeight/2) + path.lineTo(-extra, textHeight + extra) + path.lineTo(maxWidth + 2*extra, textHeight + extra) + path.lineTo(maxWidth + 2*extra, -extra) + path.closeSubpath() + + buttonBackground = PanelShape(path, + QtGui.QBrush(QtGui.QColor("#a6ce39")), QtGui.QBrush(QtGui.QColor("#c7f745")), QtGui.QPen(QtCore.Qt.NoPen), + QtCore.QPointF(backButton.position()), + QtCore.QSizeF(maxWidth + 6*extra, textHeight + 2*extra)) + + buttonBackground.metadata["category"] = self.currentCategory + buttonBackground.setInteractive(True) + buttonBackground.setTarget(QtCore.QPointF(backButton.target())) + + self.display.insertShape(0, buttonBackground) + + leftMargin = buttonBackground.rect().right() + + if self.examples[self.currentExample].has_key('absolute path'): + launchCaption = TitleShape(self.tr("Launch"), + self.font(), QtGui.QPen(QtCore.Qt.white), QtCore.QPointF(0.0, 0.0), QtCore.QSizeF(maxSize), + QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop) + launchCaption.setPosition(QtCore.QPointF( + 0.9*self.width() - launchCaption.rect().width(), self.height())) + launchCaption.setTarget(QtCore.QPointF(launchCaption.position().x(), + self.height() - 5.2*verticalMargin)) + + self.display.appendShape(launchCaption) + + maxWidth = launchCaption.rect().width() + textHeight = launchCaption.rect().height() + extra = (3*verticalMargin - textHeight)/4 + + path = QtGui.QPainterPath() + path.addRect(-2*extra, -extra, maxWidth + 4*extra, textHeight + 2*extra) + + backgroundColor = QtGui.QColor("#a63e39") + highlightedColor = QtGui.QColor("#f95e56") + + background = PanelShape(path, + QtGui.QBrush(backgroundColor), QtGui.QBrush(highlightedColor), QtGui.QPen(QtCore.Qt.NoPen), + QtCore.QPointF(launchCaption.position()), + QtCore.QSizeF(maxWidth + 4*extra, textHeight + 2*extra)) + + background.metadata["fade minimum"] = 120 + background.metadata["launch"] = self.currentExample + background.setInteractive(True) + background.setTarget(QtCore.QPointF(launchCaption.target())) + + if self.currentExample in self.runningExamples: + background.metadata["highlight"] = True + background.metadata["highlight scale"] = 0.99 + background.animate() + background.metadata["fade"] = -135 + self.slideshowTimer.stop() + self.display.insertShape(0, background) + + rightMargin = background.rect().left() + + if self.examples[self.currentExample]['document path']: + + documentCaption = TitleShape(self.tr("Show Documentation"), + self.font(), QtGui.QPen(QtCore.Qt.white), QtCore.QPointF(0.0, 0.0), QtCore.QSizeF(maxSize), + QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop) + + if rightMargin == 0.0: + documentCaption.setPosition(QtCore.QPointF( + 0.9*self.width() - documentCaption.rect().width(), self.height())) + else: + documentCaption.setPosition(QtCore.QPointF( + leftMargin/2 + rightMargin/2 - documentCaption.rect().width()/2, + self.height())) + + documentCaption.setTarget(QtCore.QPointF(documentCaption.position().x(), + self.height() - 5.2*verticalMargin)) + + self.display.appendShape(documentCaption) + + maxWidth = documentCaption.rect().width() + textHeight = documentCaption.rect().height() + extra = (3*verticalMargin - textHeight)/4 + + path = QtGui.QPainterPath() + path.addRect(-2*extra, -extra, maxWidth + 4*extra, textHeight + 2*extra) + + background = PanelShape(path, + QtGui.QBrush(QtGui.QColor("#9c9cff")), QtGui.QBrush(QtGui.QColor("#cfcfff")), QtGui.QPen(QtCore.Qt.NoPen), + QtCore.QPointF(documentCaption.position()), + QtCore.QSizeF(maxWidth + 4*extra, textHeight + 2*extra)) + + background.metadata["fade minimum"] = 120 + background.metadata["documentation"] = self.currentExample + background.setInteractive(True) + background.setTarget(QtCore.QPointF(documentCaption.target())) + + self.display.insertShape(0, background) + + self.addVersionAndCopyright(QtCore.QRectF(2*horizontalMargin, + self.height() - verticalMargin - footerTextHeight, + self.width() - 4*horizontalMargin, footerTextHeight)) + + def showParentPage(self): + self.slideshowTimer.stop() + self.disconnect(self.slideshowTimer, QtCore.SIGNAL("timeout()"), self.updateExampleSummary) + + if len(self.currentExample) > 0: + self.currentExample = "" + self.redisplayWindow() + elif len(self.currentCategory) > 0: + self.currentCategory = "" + self.redisplayWindow() + + def updateExampleSummary(self): + if self.examples[self.currentExample].has_key('image files'): + self.currentFrame.metadata["fade"] = -15 + self.currentFrame.setTarget(QtCore.QPointF((self.currentFrame.position() - + QtCore.QPointF(0.5*self.width(), 0)))) + self.slideshowFrame = (self.slideshowFrame+1) % len(self.examples[self.currentExample]['image files']) + image = QtGui.QImage(self.examples[self.currentExample]['image files'][self.slideshowFrame]) + + imageSize = self.currentFrame.maxSize + imagePosition = QtCore.QPointF(self.width() - imageSize.width()/2, + self.currentFrame.position().y()) + + self.currentFrame = ImageShape(image, QtCore.QPointF(imagePosition), QtCore.QSizeF(imageSize)) + self.currentFrame.metadata["fade"] = 15 + self.currentFrame.setTarget(QtCore.QPointF(self.width()/2-imageSize.width()/2, + imagePosition.y())) + + self.display.appendShape(self.currentFrame) + + def closeEvent(self, event): + if len(self.runningExamples) > 0: + if QtGui.QMessageBox.warning(self, self.tr("Examples Running"), + self.tr("There are examples running. Do you really want to exit?"), + QtGui.QMessageBox.Yes, QtGui.QMessageBox.No ) == QtGui.QMessageBox.No: + event.ignore() + return + + for example in self.runningProcesses.keys(): + example.terminate() + example.waitForFinished(1000) + + self.runningProcesses.clear() + self.resizeTimer.stop() + self.slideshowTimer.stop() + + def resizeEvent(self, event): + self.documentFont = QtGui.QFont(self.font()) + self.documentFont.setPointSizeF(min(self.documentFont.pointSizeF()*self.width()/640.0, + self.documentFont.pointSizeF()*self.height()/480.0)) + + if self.inFullScreenResize: + self.emit(QtCore.SIGNAL("windowResized()")) + self.inFullScreenResize = False + elif self.currentCategory != "[starting]": + self.resizeTimer.start(500) + + def toggleFullScreen(self): + if self.inFullScreenResize: + return + + self.inFullScreenResize = True + self.connect(self.display, QtCore.SIGNAL("displayEmpty()"), self.resizeWindow, QtCore.Qt.QueuedConnection) + self.display.reset() + + def redisplayWindow(self): + if len(self.currentExample) > 0: + self.showExampleSummary(self.currentExample) + elif len(self.currentCategory) > 0: + self.showExamples(self.currentCategory) + else: + self.showCategories() + + def resizeWindow(self): + self.disconnect(self.display, QtCore.SIGNAL("displayEmpty()"), self.resizeWindow) + + if self.isFullScreen(): + self.showNormal() + else: + self.showFullScreen() + + def addTitle(self, title, verticalMargin): + titlePosition = QtCore.QPointF(0.0, 2*verticalMargin) + + newTitle = TitleShape(title, self.titleFont, QtGui.QPen(QtCore.Qt.white), + QtCore.QPointF(titlePosition), QtCore.QSizeF(0.5*self.width(), 2*verticalMargin ), + QtCore.Qt.AlignHCenter | QtCore.Qt.AlignTop ) + newTitle.setPosition(QtCore.QPointF(-newTitle.rect().width(), titlePosition.y())) + newTitle.setTarget(QtCore.QPointF(0.25*self.width(), titlePosition.y())) + newTitle.metadata["fade"] = 15 + + self.display.appendShape(newTitle) + + return newTitle + + def addTitleBackground(self, titleShape): + backgroundPath = QtGui.QPainterPath() + + backgroundPath.addRect(0, -titleShape.rect().height()*0.3, self.width(), + titleShape.rect().height()*1.6) + + titleBackground = PanelShape(backgroundPath, QtGui.QBrush(QtGui.QColor("#a6ce39") ), + QtGui.QBrush(QtGui.QColor("#a6ce39") ), QtGui.QPen(QtCore.Qt.NoPen), + QtCore.QPointF( self.width(), titleShape.position().y() ), + QtCore.QSizeF(backgroundPath.boundingRect().size() )) + titleBackground.setTarget(QtCore.QPointF(0.0, titleShape.position().y())) + + self.display.insertShape(0, titleBackground) + + return titleBackground + + def readExampleDescription(self, parentNode): + node = parentNode.firstChild() + description = "" + while not node.isNull(): + if node.isText(): + description += node.nodeValue() + elif node.hasChildNodes(): + if node.nodeName() == "b": + beginTag = "<b>" + endTag = "</b>" + elif node.nodeName() == "a": + beginTag = "<font color=\"blue\">" + endTag = "</font>" + elif node.nodeName() == "i": + beginTag = "<i>" + endTag = "</i>" + elif node.nodeName() == "tt": + beginTag = "<tt>" + endTag = "</tt>" + + description += beginTag + self.readExampleDescription(node) + endTag + + node = node.nextSibling() + + return description + + def readInfo(self, resource, dir_): + categoriesFile = QtCore.QFile(resource) + document = QtXml.QDomDocument() + document.setContent(categoriesFile) + documentElement = document.documentElement() + categoryNodes = documentElement.elementsByTagName("category") + + self.categories['[main]'] = {} + self.categories['[main]']['examples'] = [] + self.categories['[main]']['color'] = QtGui.QColor("#f0f0f0") + + self.readCategoryDescription(dir_, '[main]') + self.qtLogo.load(self.imagesDir.absoluteFilePath(":/images/qt4-logo.png")) + self.rbLogo.load(self.imagesDir.absoluteFilePath(":/images/rb-logo.png")) + + for i in range(categoryNodes.length()): + elem = categoryNodes.item(i).toElement() + categoryName = QtCore.QString(elem.attribute("name")) + categoryDirName = QtCore.QString(elem.attribute("dirname")) + categoryDocName = QtCore.QString(elem.attribute("docname")) + categoryColor = QtGui.QColor(elem.attribute("color", "#f0f0f0")) + + categoryDir = QtCore.QDir(dir_) + + if categoryDir.cd(categoryDirName): + self.categories[categoryName] = {} + + self.readCategoryDescription(categoryDir, categoryName) + + self.categories[categoryName]['examples'] = [] + + exampleNodes = elem.elementsByTagName("example") + self.maximumLabels = max(self.maximumLabels, exampleNodes.length()) + + # Only add those examples we can find. + for j in range(exampleNodes.length()): + exampleDir = QtCore.QDir(categoryDir) + + exampleNode = exampleNodes.item(j) + element = exampleNode.toElement() + exampleName = element.attribute("name") + exampleFileName = element.attribute("filename") + + uniqueName = categoryName + "-" + exampleName + + self.examples[uniqueName] = {} + + if not categoryDocName.isEmpty(): + docName = categoryDocName + "-" + exampleFileName + ".html" + else: + docName = categoryDirName + "-" + exampleFileName + ".html" + + self.examples[uniqueName]['name'] = exampleName + self.examples[uniqueName]['document path'] = "" + self.findDescriptionAndImages(uniqueName, docName) + + self.examples[uniqueName]['changedirectory'] = element.attribute("changedirectory", "true") + self.examples[uniqueName]['color'] = QtGui.QColor(element.attribute("color", "#f0f0f0")) + + if element.attribute("executable", "true") != "true": + del self.examples[uniqueName] + continue + + examplePath = None + + if sys.platform == "win32": + examplePyName = exampleFileName + ".pyw" + else: + examplePyName = exampleFileName + ".py" + + if exampleDir.exists(examplePyName): + examplePath = exampleDir.absoluteFilePath(examplePyName) + elif exampleDir.cd(exampleFileName): + if exampleDir.exists(examplePyName): + examplePath = exampleDir.absoluteFilePath(examplePyName) + + if examplePath and not examplePath.isNull(): + self.examples[uniqueName]['absolute path'] = exampleDir.absolutePath() + self.examples[uniqueName]['path'] = examplePath + + self.categories[categoryName]['examples'].append(exampleName) + else: + del self.examples[uniqueName] + + self.categories[categoryName]['color'] = categoryColor + + return len(self.categories) + + def addVersionAndCopyright(self, rect): + versionCaption = TitleShape(QtCore.QString("Qt %1").arg(QtCore.QT_VERSION_STR), + self.font(), QtGui.QPen(QtGui.QColor(0,0,0,0)), + QtCore.QPointF(rect.center().x(), rect.top()), + QtCore.QSizeF(0.5*rect.width(), rect.height()), + QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter) + + versionCaption.metadata["fade"] = 15 + self.display.appendShape(versionCaption) + + copyrightCaption = TitleShape(QtCore.QString("Copyright \xa9 2005-2006 Trolltech AS"), + self.font(), QtGui.QPen(QtGui.QColor(0,0,0,0)), + QtCore.QPointF(rect.topLeft()), + QtCore.QSizeF(0.5*rect.width(), rect.height()), + QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) + + copyrightCaption.metadata["fade"] = 15 + self.display.appendShape(copyrightCaption) + + def fadeShapes(self): + for i in range(0, self.display.shapesCount()): + shape = self.display.shape(i) + shape.metadata["fade"] = -15 + shape.metadata["fade minimum"] = 0 + + def findDescriptionAndImages(self, uniqueName, docName): + if self.documentationDir.exists(docName): + self.examples[uniqueName]['document path'] = docName + + exampleDoc = QtXml.QDomDocument() + + exampleFile = QtCore.QFile(self.documentationDir.absoluteFilePath(docName)) + exampleDoc.setContent(exampleFile) + + paragraphs = exampleDoc.elementsByTagName("p") + + for p in range(paragraphs.length()): + descriptionNode = paragraphs.item(p) + description = self.readExampleDescription(descriptionNode) + + if QtCore.QString(description).indexOf(QtCore.QRegExp(QtCore.QString("((The|This) )?(%1 )?.*(example|demo)").arg(self.examples[uniqueName]['name']), QtCore.Qt.CaseInsensitive)) != -1: + self.examples[uniqueName]['description'] = description + break + + images = exampleDoc.elementsByTagName("img") + imageFiles = [] + + for i in range(images.length()): + imageElement = images.item(i).toElement() + source = QtCore.QString(imageElement.attribute("src")) + if "-logo" not in source: + imageFiles.append(self.documentationDir.absoluteFilePath(source)) + + if len(imageFiles) > 0: + self.examples[uniqueName]['image files'] = imageFiles + + def newPage(self): + self.slideshowTimer.stop() + self.disconnect(self.slideshowTimer, QtCore.SIGNAL("timeout()"), self.updateExampleSummary) + self.disconnect(self.display, QtCore.SIGNAL("displayEmpty()"), self.resizeWindow) + + def readCategoryDescription(self, categoryDir, categoryName): +## categoryDirName = categoryDir.absolutePath() +## if categoryDirName.find("examples") != -1: +## categoryDirName = re.sub(".*/examples(.*)", r"%s\1" % QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.ExamplesPath), categoryDirName) +## else: +## categoryDirName = re.sub(".*/demos(.*)", r"%s\1" % QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.DemosPath), categoryDirName) +## categoryDir = QtCore.QDir(categoryDirName) + if categoryDir.exists("README"): + file = QtCore.QFile(categoryDir.absoluteFilePath("README")) + + if not file.open(QtCore.QFile.ReadOnly): + return + + inputStream = QtCore.QTextStream(file) + + paragraphs = [] + currentPara = [] + openQuote = True + + while not inputStream.atEnd(): + line = inputStream.readLine() + + at = line.indexOf("\"", 0) + + while at != -1: + if openQuote: + line.replace(at, 1, QtCore.QChar(QtCore.QChar.Punctuation_InitialQuote)) + else: + line.replace(at, 1, QtCore.QChar(QtCore.QChar.Punctuation_FinalQuote)) + openQuote = not openQuote + at = line.indexOf("\"", at) + + if not line.trimmed().isEmpty(): + currentPara.append(str(line.trimmed())) + elif len(currentPara) > 0: + paragraphs.append(" ".join(currentPara)) + currentPara = [] + else: + break + + + if len(currentPara) > 0: + paragraphs.append(" ".join(currentPara)) + + self.categories[categoryName]['description'] = "<p>"+"\n</p><p>".join(paragraphs)+"</p>" + + def slotShowPage(self): + self.emit(QtCore.SIGNAL("showPage()")) diff --git a/examples/corelib/tools/qtdemo/qtdemo.py b/examples/corelib/tools/qtdemo/qtdemo.py new file mode 100755 index 0000000..d1d1627 --- /dev/null +++ b/examples/corelib/tools/qtdemo/qtdemo.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python +############################################################################ +## +## Copyright (C) 2004-2005 Trolltech AS. All rights reserved. +## +## This file is part of the example classes of the Qt Toolkit. +## +## This file may be used under the terms of the GNU General Public +## License version 2.0 as published by the Free Software Foundation +## and appearing in the file LICENSE.GPL included in the packaging of +## this file. Please review the following information to ensure GNU +## General Public Licensing requirements will be met: +## http://www.trolltech.com/products/qt/opensource.html +## +## If you are unsure which license is appropriate for your use, please +## review the following information: +## http://www.trolltech.com/products/qt/licensing.html or contact the +## sales department at sales@trolltech.com. +## +## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +## +############################################################################ + +import sys +import os + +from PySide2 import QtGui + +import qtdemo_rc + +from displaywidget import DisplayWidget +from displayshape import PanelShape +from launcher import Launcher + +if __name__ == "__main__": + # Make sure we run from the right directory. (I don't think this should be + # necessary.) + dir = os.path.dirname(__file__) + + if dir: + os.chdir(dir) + + app = QtGui.QApplication(sys.argv) + launcher = Launcher() + if not launcher.setup(): + sys.exit(1) + launcher.show() + sys.exit(app.exec_()) diff --git a/examples/corelib/tools/qtdemo/qtdemo.qrc b/examples/corelib/tools/qtdemo/qtdemo.qrc new file mode 100644 index 0000000..11b1f27 --- /dev/null +++ b/examples/corelib/tools/qtdemo/qtdemo.qrc @@ -0,0 +1,8 @@ +<!DOCTYPE RCC><RCC version="1.0"> +<qresource prefix="/"> + <file>demos.xml</file> + <file>examples.xml</file> + <file>images/qt4-logo.png</file> + <file>images/rb-logo.png</file> +</qresource> +</RCC> diff --git a/examples/corelib/tools/qtdemo/qtdemo.rc b/examples/corelib/tools/qtdemo/qtdemo.rc new file mode 100644 index 0000000..4cf2a63 --- /dev/null +++ b/examples/corelib/tools/qtdemo/qtdemo.rc @@ -0,0 +1,2 @@ +IDI_ICON1 ICON DISCARDABLE "qtdemo.ico" + diff --git a/examples/corelib/tools/qtdemo/qtdemo_rc.py b/examples/corelib/tools/qtdemo/qtdemo_rc.py new file mode 100644 index 0000000..dddae2a --- /dev/null +++ b/examples/corelib/tools/qtdemo/qtdemo_rc.py @@ -0,0 +1,1987 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the PySide examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# Resource object code +# +# Created: Thu May 29 21:25:23 2008 +# by: The Resource Compiler for PyQt (Qt v4.4.0) +# +# WARNING! All changes made in this file will be lost! + +from PySide2 import QtCore + +qt_resource_data = b"\ +\x00\x00\x1e\x55\ +\x3c\ +\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ +\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x69\x73\x6f\ +\x2d\x38\x38\x35\x39\x2d\x31\x22\x3f\x3e\x0a\x3c\x63\x61\x74\x65\ +\x67\x6f\x72\x69\x65\x73\x3e\x0a\x20\x20\x3c\x63\x61\x74\x65\x67\ +\x6f\x72\x79\x20\x64\x69\x72\x6e\x61\x6d\x65\x3d\x22\x64\x65\x73\ +\x69\x67\x6e\x65\x72\x22\x20\x6e\x61\x6d\x65\x3d\x22\x51\x74\x20\ +\x44\x65\x73\x69\x67\x6e\x65\x72\x22\x3e\x0a\x20\x20\x20\x20\x3c\ +\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\ +\x3d\x22\x63\x61\x6c\x63\x75\x6c\x61\x74\x6f\x72\x62\x75\x69\x6c\ +\x64\x65\x72\x22\x20\x6e\x61\x6d\x65\x3d\x22\x43\x61\x6c\x63\x75\ +\x6c\x61\x74\x6f\x72\x20\x42\x75\x69\x6c\x64\x65\x72\x22\x20\x2f\ +\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\ +\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x63\x61\x6c\x63\x75\x6c\x61\ +\x74\x6f\x72\x66\x6f\x72\x6d\x22\x20\x6e\x61\x6d\x65\x3d\x22\x43\ +\x61\x6c\x63\x75\x6c\x61\x74\x6f\x72\x20\x46\x6f\x72\x6d\x22\x20\ +\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\ +\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x63\x6f\x6e\x74\x61\x69\ +\x6e\x65\x72\x65\x78\x74\x65\x6e\x73\x69\x6f\x6e\x22\x20\x6e\x61\ +\x6d\x65\x3d\x22\x43\x6f\x6e\x74\x61\x69\x6e\x65\x72\x20\x45\x78\ +\x74\x65\x6e\x73\x69\x6f\x6e\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\ +\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\ +\x65\x3d\x22\x70\x6c\x75\x67\x69\x6e\x73\x22\x20\x6e\x61\x6d\x65\ +\x3d\x22\x43\x75\x73\x74\x6f\x6d\x20\x57\x69\x64\x67\x65\x74\x20\ +\x50\x6c\x75\x67\x69\x6e\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\ +\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\ +\x65\x3d\x22\x74\x61\x73\x6b\x6d\x65\x6e\x75\x65\x78\x74\x65\x6e\ +\x73\x69\x6f\x6e\x22\x20\x6e\x61\x6d\x65\x3d\x22\x54\x61\x73\x6b\ +\x20\x4d\x65\x6e\x75\x20\x45\x78\x74\x65\x6e\x73\x69\x6f\x6e\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\ +\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x77\x6f\x72\x6c\x64\ +\x74\x69\x6d\x65\x63\x6c\x6f\x63\x6b\x62\x75\x69\x6c\x64\x65\x72\ +\x22\x20\x6e\x61\x6d\x65\x3d\x22\x57\x6f\x72\x6c\x64\x20\x54\x69\ +\x6d\x65\x20\x43\x6c\x6f\x63\x6b\x20\x42\x75\x69\x6c\x64\x65\x72\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\ +\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x77\x6f\x72\x6c\ +\x64\x74\x69\x6d\x65\x63\x6c\x6f\x63\x6b\x70\x6c\x75\x67\x69\x6e\ +\x22\x20\x6e\x61\x6d\x65\x3d\x22\x57\x6f\x72\x6c\x64\x20\x54\x69\ +\x6d\x65\x20\x43\x6c\x6f\x63\x6b\x20\x50\x6c\x75\x67\x69\x6e\x22\ +\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x63\x61\x74\x65\x67\x6f\x72\x79\ +\x3e\x0a\x20\x20\x3c\x63\x61\x74\x65\x67\x6f\x72\x79\x20\x64\x69\ +\x72\x6e\x61\x6d\x65\x3d\x22\x64\x65\x73\x6b\x74\x6f\x70\x22\x20\ +\x6e\x61\x6d\x65\x3d\x22\x44\x65\x73\x6b\x74\x6f\x70\x22\x3e\x0a\ +\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\ +\x65\x6e\x61\x6d\x65\x3d\x22\x73\x79\x73\x74\x72\x61\x79\x22\x20\ +\x6e\x61\x6d\x65\x3d\x22\x53\x79\x73\x74\x65\x6d\x20\x54\x72\x61\ +\x79\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x63\x61\x74\x65\x67\x6f\ +\x72\x79\x3e\x0a\x20\x20\x3c\x63\x61\x74\x65\x67\x6f\x72\x79\x20\ +\x64\x69\x72\x6e\x61\x6d\x65\x3d\x22\x64\x69\x61\x6c\x6f\x67\x73\ +\x22\x20\x6e\x61\x6d\x65\x3d\x22\x44\x69\x61\x6c\x6f\x67\x73\x22\ +\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\ +\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x63\x6f\x6d\x70\x6c\x65\x78\ +\x77\x69\x7a\x61\x72\x64\x22\x20\x6e\x61\x6d\x65\x3d\x22\x43\x6f\ +\x6d\x70\x6c\x65\x78\x20\x57\x69\x7a\x61\x72\x64\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\ +\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x63\x6f\x6e\x66\x69\x67\x64\x69\ +\x61\x6c\x6f\x67\x22\x20\x6e\x61\x6d\x65\x3d\x22\x43\x6f\x6e\x66\ +\x69\x67\x75\x72\x61\x74\x69\x6f\x6e\x20\x44\x69\x61\x6c\x6f\x67\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\ +\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x65\x78\x74\x65\ +\x6e\x73\x69\x6f\x6e\x22\x20\x6e\x61\x6d\x65\x3d\x22\x45\x78\x74\ +\x65\x6e\x73\x69\x6f\x6e\x20\x44\x69\x61\x6c\x6f\x67\x22\x20\x2f\ +\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\ +\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x66\x69\x6e\x64\x66\x69\x6c\ +\x65\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x46\x69\x6e\x64\x20\x46\ +\x69\x6c\x65\x73\x20\x44\x69\x61\x6c\x6f\x67\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\ +\x65\x6e\x61\x6d\x65\x3d\x22\x73\x69\x6d\x70\x6c\x65\x77\x69\x7a\ +\x61\x72\x64\x22\x20\x6e\x61\x6d\x65\x3d\x22\x53\x69\x6d\x70\x6c\ +\x65\x20\x57\x69\x7a\x61\x72\x64\x22\x20\x2f\x3e\x0a\x20\x20\x20\ +\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\ +\x6d\x65\x3d\x22\x73\x74\x61\x6e\x64\x61\x72\x64\x64\x69\x61\x6c\ +\x6f\x67\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x53\x74\x61\x6e\x64\ +\x61\x72\x64\x20\x44\x69\x61\x6c\x6f\x67\x73\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\ +\x65\x6e\x61\x6d\x65\x3d\x22\x74\x61\x62\x64\x69\x61\x6c\x6f\x67\ +\x22\x20\x6e\x61\x6d\x65\x3d\x22\x54\x61\x62\x20\x44\x69\x61\x6c\ +\x6f\x67\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x63\x61\x74\x65\x67\ +\x6f\x72\x79\x3e\x0a\x20\x20\x3c\x63\x61\x74\x65\x67\x6f\x72\x79\ +\x20\x64\x69\x72\x6e\x61\x6d\x65\x3d\x22\x64\x72\x61\x67\x61\x6e\ +\x64\x64\x72\x6f\x70\x22\x20\x6e\x61\x6d\x65\x3d\x22\x44\x72\x61\ +\x67\x20\x61\x6e\x64\x20\x44\x72\x6f\x70\x22\x3e\x0a\x20\x20\x20\ +\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\ +\x6d\x65\x3d\x22\x64\x72\x61\x67\x67\x61\x62\x6c\x65\x69\x63\x6f\ +\x6e\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x44\x72\x61\x67\x67\x61\ +\x62\x6c\x65\x20\x49\x63\x6f\x6e\x73\x22\x20\x2f\x3e\x0a\x20\x20\ +\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\ +\x61\x6d\x65\x3d\x22\x64\x72\x61\x67\x67\x61\x62\x6c\x65\x74\x65\ +\x78\x74\x22\x20\x6e\x61\x6d\x65\x3d\x22\x44\x72\x61\x67\x67\x61\ +\x62\x6c\x65\x20\x54\x65\x78\x74\x22\x20\x2f\x3e\x0a\x20\x20\x20\ +\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\ +\x6d\x65\x3d\x22\x64\x72\x6f\x70\x73\x69\x74\x65\x22\x20\x6e\x61\ +\x6d\x65\x3d\x22\x44\x72\x6f\x70\x20\x53\x69\x74\x65\x22\x20\x2f\ +\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\ +\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x66\x72\x69\x64\x67\x65\x6d\ +\x61\x67\x6e\x65\x74\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x46\x72\ +\x69\x64\x67\x65\x20\x4d\x61\x67\x6e\x65\x74\x73\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\ +\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x70\x75\x7a\x7a\x6c\x65\x22\x20\ +\x6e\x61\x6d\x65\x3d\x22\x50\x75\x7a\x7a\x6c\x65\x22\x20\x2f\x3e\ +\x0a\x20\x20\x3c\x2f\x63\x61\x74\x65\x67\x6f\x72\x79\x3e\x0a\x20\ +\x20\x3c\x63\x61\x74\x65\x67\x6f\x72\x79\x20\x64\x69\x72\x6e\x61\ +\x6d\x65\x3d\x22\x67\x72\x61\x70\x68\x69\x63\x73\x76\x69\x65\x77\ +\x22\x20\x6e\x61\x6d\x65\x3d\x22\x47\x72\x61\x70\x68\x69\x63\x73\ +\x20\x56\x69\x65\x77\x22\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\ +\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x65\ +\x6c\x61\x73\x74\x69\x63\x6e\x6f\x64\x65\x73\x22\x20\x6e\x61\x6d\ +\x65\x3d\x22\x45\x6c\x61\x73\x74\x69\x63\x20\x4e\x6f\x64\x65\x73\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\ +\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x63\x6f\x6c\x6c\ +\x69\x64\x69\x6e\x67\x6d\x69\x63\x65\x22\x20\x6e\x61\x6d\x65\x3d\ +\x22\x43\x6f\x6c\x6c\x69\x64\x69\x6e\x67\x20\x4d\x69\x63\x65\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\ +\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x64\x69\x61\x67\x72\ +\x61\x6d\x73\x63\x65\x6e\x65\x22\x20\x6e\x61\x6d\x65\x3d\x22\x44\ +\x69\x61\x67\x72\x61\x6d\x20\x53\x63\x65\x6e\x65\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\ +\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x64\x72\x61\x67\x64\x72\x6f\x70\ +\x72\x6f\x62\x6f\x74\x22\x20\x6e\x61\x6d\x65\x3d\x22\x44\x72\x61\ +\x67\x20\x61\x6e\x64\x20\x44\x72\x6f\x70\x20\x52\x6f\x62\x6f\x74\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\ +\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x70\x6f\x72\x74\ +\x65\x64\x63\x61\x6e\x76\x61\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\ +\x50\x6f\x72\x74\x65\x64\x20\x43\x61\x6e\x76\x61\x73\x22\x20\x2f\ +\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\ +\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x70\x6f\x72\x74\x65\x64\x61\ +\x73\x74\x65\x72\x6f\x69\x64\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\ +\x50\x6f\x72\x74\x65\x64\x20\x41\x73\x74\x65\x72\x6f\x69\x64\x73\ +\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x63\x61\x74\x65\x67\x6f\x72\ +\x79\x3e\x0a\x20\x20\x3c\x63\x61\x74\x65\x67\x6f\x72\x79\x20\x64\ +\x69\x72\x6e\x61\x6d\x65\x3d\x22\x69\x74\x65\x6d\x76\x69\x65\x77\ +\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x49\x74\x65\x6d\x20\x56\x69\ +\x65\x77\x73\x22\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\ +\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x62\x61\x73\ +\x69\x63\x73\x6f\x72\x74\x66\x69\x6c\x74\x65\x72\x6d\x6f\x64\x65\ +\x6c\x22\x20\x6e\x61\x6d\x65\x3d\x22\x42\x61\x73\x69\x63\x20\x53\ +\x6f\x72\x74\x2f\x46\x69\x6c\x74\x65\x72\x20\x4d\x6f\x64\x65\x6c\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\ +\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x63\x68\x61\x72\ +\x74\x22\x20\x6e\x61\x6d\x65\x3d\x22\x43\x68\x61\x72\x74\x22\x20\ +\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\ +\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x64\x69\x72\x76\x69\x65\ +\x77\x22\x20\x6e\x61\x6d\x65\x3d\x22\x44\x69\x72\x65\x63\x74\x6f\ +\x72\x79\x20\x56\x69\x65\x77\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\ +\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\ +\x65\x3d\x22\x70\x69\x78\x65\x6c\x61\x74\x6f\x72\x22\x20\x6e\x61\ +\x6d\x65\x3d\x22\x50\x69\x78\x65\x6c\x61\x74\x6f\x72\x22\x20\x2f\ +\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\ +\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x70\x75\x7a\x7a\x6c\x65\x22\ +\x20\x6e\x61\x6d\x65\x3d\x22\x50\x75\x7a\x7a\x6c\x65\x22\x20\x2f\ +\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\ +\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x73\x69\x6d\x70\x6c\x65\x64\ +\x6f\x6d\x6d\x6f\x64\x65\x6c\x22\x20\x6e\x61\x6d\x65\x3d\x22\x53\ +\x69\x6d\x70\x6c\x65\x20\x44\x4f\x4d\x20\x4d\x6f\x64\x65\x6c\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\ +\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x73\x69\x6d\x70\x6c\ +\x65\x74\x72\x65\x65\x6d\x6f\x64\x65\x6c\x22\x20\x6e\x61\x6d\x65\ +\x3d\x22\x53\x69\x6d\x70\x6c\x65\x20\x54\x72\x65\x65\x20\x4d\x6f\ +\x64\x65\x6c\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\ +\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x73\ +\x70\x69\x6e\x62\x6f\x78\x64\x65\x6c\x65\x67\x61\x74\x65\x22\x20\ +\x6e\x61\x6d\x65\x3d\x22\x53\x70\x69\x6e\x20\x42\x6f\x78\x20\x44\ +\x65\x6c\x65\x67\x61\x74\x65\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\ +\x63\x61\x74\x65\x67\x6f\x72\x79\x3e\x0a\x20\x20\x3c\x63\x61\x74\ +\x65\x67\x6f\x72\x79\x20\x64\x69\x72\x6e\x61\x6d\x65\x3d\x22\x6c\ +\x61\x79\x6f\x75\x74\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x4c\x61\ +\x79\x6f\x75\x74\x73\x22\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\ +\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x62\ +\x61\x73\x69\x63\x6c\x61\x79\x6f\x75\x74\x73\x22\x20\x6e\x61\x6d\ +\x65\x3d\x22\x42\x61\x73\x69\x63\x20\x4c\x61\x79\x6f\x75\x74\x73\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\ +\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x62\x6f\x72\x64\ +\x65\x72\x6c\x61\x79\x6f\x75\x74\x22\x20\x6e\x61\x6d\x65\x3d\x22\ +\x42\x6f\x72\x64\x65\x72\x20\x4c\x61\x79\x6f\x75\x74\x22\x20\x2f\ +\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\ +\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x66\x6c\x6f\x77\x6c\x61\x79\ +\x6f\x75\x74\x22\x20\x6e\x61\x6d\x65\x3d\x22\x46\x6c\x6f\x77\x20\ +\x4c\x61\x79\x6f\x75\x74\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x63\ +\x61\x74\x65\x67\x6f\x72\x79\x3e\x0a\x20\x20\x3c\x63\x61\x74\x65\ +\x67\x6f\x72\x79\x20\x64\x69\x72\x6e\x61\x6d\x65\x3d\x22\x6c\x69\ +\x6e\x67\x75\x69\x73\x74\x22\x20\x6e\x61\x6d\x65\x3d\x22\x51\x74\ +\x20\x4c\x69\x6e\x67\x75\x69\x73\x74\x22\x3e\x0a\x20\x20\x20\x20\ +\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\ +\x65\x3d\x22\x61\x72\x72\x6f\x77\x70\x61\x64\x22\x20\x6e\x61\x6d\ +\x65\x3d\x22\x41\x72\x72\x6f\x77\x20\x50\x61\x64\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\ +\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x68\x65\x6c\x6c\x6f\x74\x72\x22\ +\x20\x6e\x61\x6d\x65\x3d\x22\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\ +\x6c\x64\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\ +\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x74\x72\ +\x6f\x6c\x6c\x70\x72\x69\x6e\x74\x22\x20\x6e\x61\x6d\x65\x3d\x22\ +\x54\x72\x6f\x6c\x6c\x20\x50\x72\x69\x6e\x74\x22\x20\x2f\x3e\x0a\ +\x20\x20\x3c\x2f\x63\x61\x74\x65\x67\x6f\x72\x79\x3e\x0a\x20\x20\ +\x3c\x63\x61\x74\x65\x67\x6f\x72\x79\x20\x64\x69\x72\x6e\x61\x6d\ +\x65\x3d\x22\x6d\x61\x69\x6e\x77\x69\x6e\x64\x6f\x77\x73\x22\x20\ +\x6e\x61\x6d\x65\x3d\x22\x4d\x61\x69\x6e\x20\x57\x69\x6e\x64\x6f\ +\x77\x73\x22\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\ +\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x61\x70\x70\x6c\ +\x69\x63\x61\x74\x69\x6f\x6e\x22\x20\x6e\x61\x6d\x65\x3d\x22\x41\ +\x70\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x22\x20\x2f\x3e\x0a\x20\ +\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\ +\x6e\x61\x6d\x65\x3d\x22\x64\x6f\x63\x6b\x77\x69\x64\x67\x65\x74\ +\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x44\x6f\x63\x6b\x20\x57\x69\ +\x64\x67\x65\x74\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\ +\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\ +\x22\x6d\x64\x69\x22\x20\x6e\x61\x6d\x65\x3d\x22\x4d\x75\x6c\x74\ +\x69\x70\x6c\x65\x20\x44\x6f\x63\x75\x6d\x65\x6e\x74\x20\x49\x6e\ +\x74\x65\x72\x66\x61\x63\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\ +\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\ +\x65\x3d\x22\x6d\x65\x6e\x75\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\ +\x4d\x65\x6e\x75\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\ +\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\ +\x22\x72\x65\x63\x65\x6e\x74\x66\x69\x6c\x65\x73\x22\x20\x6e\x61\ +\x6d\x65\x3d\x22\x52\x65\x63\x65\x6e\x74\x20\x46\x69\x6c\x65\x73\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\ +\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x73\x64\x69\x22\ +\x20\x6e\x61\x6d\x65\x3d\x22\x53\x69\x6e\x67\x6c\x65\x20\x44\x6f\ +\x63\x75\x6d\x65\x6e\x74\x20\x49\x6e\x74\x65\x72\x66\x61\x63\x65\ +\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x63\x61\x74\x65\x67\x6f\x72\ +\x79\x3e\x0a\x20\x20\x3c\x63\x61\x74\x65\x67\x6f\x72\x79\x20\x64\ +\x69\x72\x6e\x61\x6d\x65\x3d\x22\x6e\x65\x74\x77\x6f\x72\x6b\x22\ +\x20\x6e\x61\x6d\x65\x3d\x22\x4e\x65\x74\x77\x6f\x72\x6b\x69\x6e\ +\x67\x22\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\ +\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x62\x6c\x6f\x63\x6b\ +\x69\x6e\x67\x66\x6f\x72\x74\x75\x6e\x65\x63\x6c\x69\x65\x6e\x74\ +\x22\x20\x6e\x61\x6d\x65\x3d\x22\x42\x6c\x6f\x63\x6b\x69\x6e\x67\ +\x20\x46\x6f\x72\x74\x75\x6e\x65\x20\x43\x6c\x69\x65\x6e\x74\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\ +\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x62\x72\x6f\x61\x64\ +\x63\x61\x73\x74\x72\x65\x63\x65\x69\x76\x65\x72\x22\x20\x6e\x61\ +\x6d\x65\x3d\x22\x42\x72\x6f\x61\x64\x63\x61\x73\x74\x20\x52\x65\ +\x63\x65\x69\x76\x65\x72\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\ +\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\ +\x3d\x22\x62\x72\x6f\x61\x64\x63\x61\x73\x74\x73\x65\x6e\x64\x65\ +\x72\x22\x20\x6e\x61\x6d\x65\x3d\x22\x42\x72\x6f\x61\x64\x63\x61\ +\x73\x74\x20\x53\x65\x6e\x64\x65\x72\x22\x20\x2f\x3e\x0a\x20\x20\ +\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\ +\x61\x6d\x65\x3d\x22\x66\x6f\x72\x74\x75\x6e\x65\x63\x6c\x69\x65\ +\x6e\x74\x22\x20\x6e\x61\x6d\x65\x3d\x22\x46\x6f\x72\x74\x75\x6e\ +\x65\x20\x43\x6c\x69\x65\x6e\x74\x22\x20\x2f\x3e\x0a\x20\x20\x20\ +\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\ +\x6d\x65\x3d\x22\x66\x6f\x72\x74\x75\x6e\x65\x73\x65\x72\x76\x65\ +\x72\x22\x20\x6e\x61\x6d\x65\x3d\x22\x46\x6f\x72\x74\x75\x6e\x65\ +\x20\x53\x65\x72\x76\x65\x72\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\ +\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\ +\x65\x3d\x22\x66\x74\x70\x22\x20\x63\x68\x61\x6e\x67\x65\x64\x69\ +\x72\x65\x63\x74\x6f\x72\x79\x3d\x22\x66\x61\x6c\x73\x65\x22\x20\ +\x6e\x61\x6d\x65\x3d\x22\x46\x54\x50\x20\x43\x6c\x69\x65\x6e\x74\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\ +\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x68\x74\x74\x70\ +\x22\x20\x63\x68\x61\x6e\x67\x65\x64\x69\x72\x65\x63\x74\x6f\x72\ +\x79\x3d\x22\x66\x61\x6c\x73\x65\x22\x20\x6e\x61\x6d\x65\x3d\x22\ +\x48\x54\x54\x50\x20\x43\x6c\x69\x65\x6e\x74\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\ +\x65\x6e\x61\x6d\x65\x3d\x22\x6c\x6f\x6f\x70\x62\x61\x63\x6b\x22\ +\x20\x6e\x61\x6d\x65\x3d\x22\x4c\x6f\x6f\x70\x62\x61\x63\x6b\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\ +\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x74\x68\x72\x65\x61\ +\x64\x65\x64\x66\x6f\x72\x74\x75\x6e\x65\x73\x65\x72\x76\x65\x72\ +\x22\x20\x6e\x61\x6d\x65\x3d\x22\x54\x68\x72\x65\x61\x64\x65\x64\ +\x20\x46\x6f\x72\x74\x75\x6e\x65\x20\x53\x65\x72\x76\x65\x72\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\ +\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x74\x6f\x72\x72\x65\ +\x6e\x74\x22\x20\x6e\x61\x6d\x65\x3d\x22\x54\x6f\x72\x72\x65\x6e\ +\x74\x20\x43\x6c\x69\x65\x6e\x74\x22\x20\x2f\x3e\x0a\x20\x20\x3c\ +\x2f\x63\x61\x74\x65\x67\x6f\x72\x79\x3e\x0a\x20\x20\x3c\x63\x61\ +\x74\x65\x67\x6f\x72\x79\x20\x64\x69\x72\x6e\x61\x6d\x65\x3d\x22\ +\x6f\x70\x65\x6e\x67\x6c\x22\x20\x6e\x61\x6d\x65\x3d\x22\x4f\x70\ +\x65\x6e\x47\x4c\x22\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\ +\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x32\x64\ +\x70\x61\x69\x6e\x74\x69\x6e\x67\x22\x20\x6e\x61\x6d\x65\x3d\x22\ +\x32\x44\x20\x50\x61\x69\x6e\x74\x69\x6e\x67\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\ +\x65\x6e\x61\x6d\x65\x3d\x22\x67\x72\x61\x62\x62\x65\x72\x22\x20\ +\x6e\x61\x6d\x65\x3d\x22\x47\x72\x61\x62\x62\x65\x72\x22\x20\x2f\ +\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\ +\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x68\x65\x6c\x6c\x6f\x67\x6c\ +\x22\x20\x6e\x61\x6d\x65\x3d\x22\x48\x65\x6c\x6c\x6f\x20\x47\x4c\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\ +\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x6f\x76\x65\x72\ +\x70\x61\x69\x6e\x74\x69\x6e\x67\x22\x20\x6e\x61\x6d\x65\x3d\x22\ +\x4f\x76\x65\x72\x70\x61\x69\x6e\x74\x69\x6e\x67\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\ +\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x70\x62\x75\x66\x66\x65\x72\x73\ +\x22\x20\x6e\x61\x6d\x65\x3d\x22\x50\x69\x78\x65\x6c\x20\x42\x75\ +\x66\x66\x65\x72\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\ +\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\ +\x22\x73\x61\x6d\x70\x6c\x65\x62\x75\x66\x66\x65\x72\x73\x22\x20\ +\x6e\x61\x6d\x65\x3d\x22\x53\x61\x6d\x70\x6c\x65\x20\x42\x75\x66\ +\x66\x65\x72\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\ +\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\ +\x74\x65\x78\x74\x75\x72\x65\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\ +\x54\x65\x78\x74\x75\x72\x65\x73\x22\x20\x2f\x3e\x0a\x20\x20\x3c\ +\x2f\x63\x61\x74\x65\x67\x6f\x72\x79\x3e\x0a\x20\x20\x3c\x63\x61\ +\x74\x65\x67\x6f\x72\x79\x20\x64\x69\x72\x6e\x61\x6d\x65\x3d\x22\ +\x70\x61\x69\x6e\x74\x69\x6e\x67\x22\x20\x6e\x61\x6d\x65\x3d\x22\ +\x50\x61\x69\x6e\x74\x69\x6e\x67\x22\x3e\x0a\x20\x20\x20\x20\x3c\ +\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\ +\x3d\x22\x62\x61\x73\x69\x63\x64\x72\x61\x77\x69\x6e\x67\x22\x20\ +\x6e\x61\x6d\x65\x3d\x22\x42\x61\x73\x69\x63\x20\x44\x72\x61\x77\ +\x69\x6e\x67\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\ +\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x63\ +\x6f\x6e\x63\x65\x6e\x74\x72\x69\x63\x63\x69\x72\x63\x6c\x65\x73\ +\x22\x20\x6e\x61\x6d\x65\x3d\x22\x43\x6f\x6e\x63\x65\x6e\x74\x72\ +\x69\x63\x20\x43\x69\x72\x63\x6c\x65\x73\x22\x20\x2f\x3e\x0a\x20\ +\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\ +\x6e\x61\x6d\x65\x3d\x22\x70\x61\x69\x6e\x74\x65\x72\x70\x61\x74\ +\x68\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x50\x61\x69\x6e\x74\x65\ +\x72\x20\x50\x61\x74\x68\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\ +\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\ +\x65\x3d\x22\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x61\x74\x69\x6f\ +\x6e\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x54\x72\x61\x6e\x73\x66\ +\x6f\x72\x6d\x61\x74\x69\x6f\x6e\x73\x22\x20\x2f\x3e\x0a\x20\x20\ +\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\ +\x61\x6d\x65\x3d\x22\x73\x76\x67\x76\x69\x65\x77\x65\x72\x22\x20\ +\x6e\x61\x6d\x65\x3d\x22\x53\x56\x47\x20\x56\x69\x65\x77\x65\x72\ +\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x63\x61\x74\x65\x67\x6f\x72\ +\x79\x3e\x0a\x20\x20\x3c\x63\x61\x74\x65\x67\x6f\x72\x79\x20\x64\ +\x69\x72\x6e\x61\x6d\x65\x3d\x22\x70\x68\x6f\x6e\x6f\x6e\x22\x20\ +\x6e\x61\x6d\x65\x3d\x22\x50\x68\x6f\x6e\x6f\x6e\x22\x3e\x0a\x20\ +\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\ +\x6e\x61\x6d\x65\x3d\x22\x63\x61\x70\x61\x62\x69\x6c\x69\x74\x69\ +\x65\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x42\x61\x63\x6b\x65\x6e\ +\x64\x20\x43\x61\x70\x61\x62\x69\x6c\x69\x74\x69\x65\x73\x22\x20\ +\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\ +\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x6d\x75\x73\x69\x63\x70\ +\x6c\x61\x79\x65\x72\x22\x20\x6e\x61\x6d\x65\x3d\x22\x4d\x75\x73\ +\x69\x63\x20\x50\x6c\x61\x79\x65\x72\x22\x20\x2f\x3e\x0a\x20\x20\ +\x3c\x2f\x63\x61\x74\x65\x67\x6f\x72\x79\x3e\x0a\x20\x20\x3c\x63\ +\x61\x74\x65\x67\x6f\x72\x79\x20\x64\x69\x72\x6e\x61\x6d\x65\x3d\ +\x22\x72\x69\x63\x68\x74\x65\x78\x74\x22\x20\x6e\x61\x6d\x65\x3d\ +\x22\x52\x69\x63\x68\x20\x54\x65\x78\x74\x22\x3e\x0a\x20\x20\x20\ +\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\ +\x6d\x65\x3d\x22\x63\x61\x6c\x65\x6e\x64\x61\x72\x22\x20\x6e\x61\ +\x6d\x65\x3d\x22\x43\x61\x6c\x65\x6e\x64\x61\x72\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\ +\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x6f\x72\x64\x65\x72\x66\x6f\x72\ +\x6d\x22\x20\x6e\x61\x6d\x65\x3d\x22\x4f\x72\x64\x65\x72\x20\x46\ +\x6f\x72\x6d\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\ +\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x73\ +\x79\x6e\x74\x61\x78\x68\x69\x67\x68\x6c\x69\x67\x68\x74\x65\x72\ +\x22\x20\x6e\x61\x6d\x65\x3d\x22\x53\x79\x6e\x74\x61\x78\x20\x48\ +\x69\x67\x68\x6c\x69\x67\x68\x74\x65\x72\x22\x20\x2f\x3e\x0a\x20\ +\x20\x3c\x2f\x63\x61\x74\x65\x67\x6f\x72\x79\x3e\x0a\x20\x20\x3c\ +\x63\x61\x74\x65\x67\x6f\x72\x79\x20\x64\x69\x72\x6e\x61\x6d\x65\ +\x3d\x22\x73\x71\x6c\x22\x20\x6e\x61\x6d\x65\x3d\x22\x53\x51\x4c\ +\x22\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\ +\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x63\x61\x63\x68\x65\x64\ +\x74\x61\x62\x6c\x65\x22\x20\x6e\x61\x6d\x65\x3d\x22\x43\x61\x63\ +\x68\x65\x64\x20\x54\x61\x62\x6c\x65\x22\x20\x2f\x3e\x0a\x20\x20\ +\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\ +\x61\x6d\x65\x3d\x22\x71\x75\x65\x72\x79\x6d\x6f\x64\x65\x6c\x22\ +\x20\x6e\x61\x6d\x65\x3d\x22\x51\x75\x65\x72\x79\x20\x4d\x6f\x64\ +\x65\x6c\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\ +\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x72\x65\ +\x6c\x61\x74\x69\x6f\x6e\x61\x6c\x74\x61\x62\x6c\x65\x6d\x6f\x64\ +\x65\x6c\x22\x20\x6e\x61\x6d\x65\x3d\x22\x52\x65\x6c\x61\x74\x69\ +\x6f\x6e\x61\x6c\x20\x54\x61\x62\x6c\x65\x20\x4d\x6f\x64\x65\x6c\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\ +\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x74\x61\x62\x6c\ +\x65\x6d\x6f\x64\x65\x6c\x22\x20\x6e\x61\x6d\x65\x3d\x22\x54\x61\ +\x62\x6c\x65\x20\x4d\x6f\x64\x65\x6c\x22\x20\x2f\x3e\x0a\x20\x20\ +\x3c\x2f\x63\x61\x74\x65\x67\x6f\x72\x79\x3e\x0a\x20\x20\x3c\x63\ +\x61\x74\x65\x67\x6f\x72\x79\x20\x64\x69\x72\x6e\x61\x6d\x65\x3d\ +\x22\x74\x68\x72\x65\x61\x64\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\ +\x54\x68\x72\x65\x61\x64\x69\x6e\x67\x22\x3e\x0a\x20\x20\x20\x20\ +\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\ +\x65\x3d\x22\x6d\x61\x6e\x64\x65\x6c\x62\x72\x6f\x74\x22\x20\x6e\ +\x61\x6d\x65\x3d\x22\x4d\x61\x6e\x64\x65\x6c\x62\x72\x6f\x74\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\ +\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x73\x65\x6d\x61\x70\ +\x68\x6f\x72\x65\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x53\x65\x6d\ +\x61\x70\x68\x6f\x72\x65\x73\x22\x20\x65\x78\x65\x63\x75\x74\x61\ +\x62\x6c\x65\x3d\x22\x66\x61\x6c\x73\x65\x22\x20\x2f\x3e\x0a\x20\ +\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\ +\x6e\x61\x6d\x65\x3d\x22\x77\x61\x69\x74\x63\x6f\x6e\x64\x69\x74\ +\x69\x6f\x6e\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x57\x61\x69\x74\ +\x20\x43\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x22\x20\x65\x78\x65\ +\x63\x75\x74\x61\x62\x6c\x65\x3d\x22\x66\x61\x6c\x73\x65\x22\x20\ +\x2f\x3e\x0a\x20\x20\x3c\x2f\x63\x61\x74\x65\x67\x6f\x72\x79\x3e\ +\x0a\x20\x20\x3c\x63\x61\x74\x65\x67\x6f\x72\x79\x20\x64\x69\x72\ +\x6e\x61\x6d\x65\x3d\x22\x74\x6f\x6f\x6c\x73\x22\x20\x6e\x61\x6d\ +\x65\x3d\x22\x54\x6f\x6f\x6c\x73\x22\x3e\x0a\x20\x20\x20\x20\x3c\ +\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\ +\x3d\x22\x63\x6f\x64\x65\x63\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\ +\x43\x6f\x64\x65\x63\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\ +\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\ +\x3d\x22\x69\x31\x38\x6e\x22\x20\x6e\x61\x6d\x65\x3d\x22\x49\x6e\ +\x74\x65\x72\x6e\x61\x74\x69\x6f\x6e\x61\x6c\x69\x7a\x61\x74\x69\ +\x6f\x6e\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\ +\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x70\x6c\ +\x75\x67\x61\x6e\x64\x70\x61\x69\x6e\x74\x22\x20\x6e\x61\x6d\x65\ +\x3d\x22\x50\x6c\x75\x67\x20\x61\x6e\x64\x20\x50\x61\x69\x6e\x74\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\ +\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x71\x74\x64\x65\ +\x6d\x6f\x22\x20\x6e\x61\x6d\x65\x3d\x22\x51\x74\x20\x44\x65\x6d\ +\x6f\x22\x20\x65\x78\x65\x63\x75\x74\x61\x62\x6c\x65\x3d\x22\x66\ +\x61\x6c\x73\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\ +\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\ +\x72\x65\x67\x65\x78\x70\x22\x20\x6e\x61\x6d\x65\x3d\x22\x52\x65\ +\x67\x75\x6c\x61\x72\x20\x45\x78\x70\x72\x65\x73\x73\x69\x6f\x6e\ +\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\ +\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x73\x65\x74\ +\x74\x69\x6e\x67\x73\x65\x64\x69\x74\x6f\x72\x22\x20\x6e\x61\x6d\ +\x65\x3d\x22\x53\x65\x74\x74\x69\x6e\x67\x73\x20\x45\x64\x69\x74\ +\x6f\x72\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x63\x61\x74\x65\x67\ +\x6f\x72\x79\x3e\x0a\x20\x20\x3c\x63\x61\x74\x65\x67\x6f\x72\x79\ +\x20\x64\x69\x72\x6e\x61\x6d\x65\x3d\x22\x77\x69\x64\x67\x65\x74\ +\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x57\x69\x64\x67\x65\x74\x73\ +\x22\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\ +\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x61\x6e\x61\x6c\x6f\x67\ +\x63\x6c\x6f\x63\x6b\x22\x20\x6e\x61\x6d\x65\x3d\x22\x41\x6e\x61\ +\x6c\x6f\x67\x20\x43\x6c\x6f\x63\x6b\x22\x20\x2f\x3e\x0a\x20\x20\ +\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\ +\x61\x6d\x65\x3d\x22\x63\x61\x6c\x63\x75\x6c\x61\x74\x6f\x72\x22\ +\x20\x6e\x61\x6d\x65\x3d\x22\x43\x61\x6c\x63\x75\x6c\x61\x74\x6f\ +\x72\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\ +\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x63\x68\x61\ +\x72\x61\x63\x74\x65\x72\x6d\x61\x70\x22\x20\x6e\x61\x6d\x65\x3d\ +\x22\x43\x68\x61\x72\x61\x63\x74\x65\x72\x20\x4d\x61\x70\x22\x20\ +\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\ +\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x64\x69\x67\x69\x74\x61\ +\x6c\x63\x6c\x6f\x63\x6b\x22\x20\x6e\x61\x6d\x65\x3d\x22\x44\x69\ +\x67\x69\x74\x61\x6c\x20\x43\x6c\x6f\x63\x6b\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\ +\x65\x6e\x61\x6d\x65\x3d\x22\x67\x72\x6f\x75\x70\x62\x6f\x78\x22\ +\x20\x6e\x61\x6d\x65\x3d\x22\x47\x72\x6f\x75\x70\x20\x42\x6f\x78\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\ +\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x69\x63\x6f\x6e\ +\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x49\x63\x6f\x6e\x73\x22\x20\ +\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\ +\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x69\x6d\x61\x67\x65\x76\ +\x69\x65\x77\x65\x72\x22\x20\x6e\x61\x6d\x65\x3d\x22\x49\x6d\x61\ +\x67\x65\x20\x56\x69\x65\x77\x65\x72\x22\x20\x2f\x3e\x0a\x20\x20\ +\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\ +\x61\x6d\x65\x3d\x22\x6c\x69\x6e\x65\x65\x64\x69\x74\x73\x22\x20\ +\x6e\x61\x6d\x65\x3d\x22\x4c\x69\x6e\x65\x20\x45\x64\x69\x74\x73\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\ +\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x6d\x6f\x76\x69\ +\x65\x22\x20\x6e\x61\x6d\x65\x3d\x22\x4d\x6f\x76\x69\x65\x20\x50\ +\x6c\x61\x79\x65\x72\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\ +\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\ +\x22\x73\x63\x72\x65\x65\x6e\x73\x68\x6f\x74\x22\x20\x6e\x61\x6d\ +\x65\x3d\x22\x53\x63\x72\x65\x65\x6e\x73\x68\x6f\x74\x22\x20\x2f\ +\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\ +\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x73\x63\x72\x69\x62\x62\x6c\ +\x65\x22\x20\x6e\x61\x6d\x65\x3d\x22\x53\x63\x72\x69\x62\x62\x6c\ +\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\ +\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x73\x68\x61\ +\x70\x65\x64\x63\x6c\x6f\x63\x6b\x22\x20\x6e\x61\x6d\x65\x3d\x22\ +\x53\x68\x61\x70\x65\x64\x20\x43\x6c\x6f\x63\x6b\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\ +\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x73\x6c\x69\x64\x65\x72\x73\x22\ +\x20\x6e\x61\x6d\x65\x3d\x22\x53\x6c\x69\x64\x65\x72\x73\x22\x20\ +\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\ +\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x73\x70\x69\x6e\x62\x6f\ +\x78\x65\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x53\x70\x69\x6e\x20\ +\x42\x6f\x78\x65\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\ +\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\ +\x22\x73\x74\x79\x6c\x65\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x53\ +\x74\x79\x6c\x65\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\ +\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\ +\x22\x74\x65\x74\x72\x69\x78\x22\x20\x6e\x61\x6d\x65\x3d\x22\x54\ +\x65\x74\x72\x69\x78\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\ +\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\ +\x22\x74\x6f\x6f\x6c\x74\x69\x70\x73\x22\x20\x6e\x61\x6d\x65\x3d\ +\x22\x54\x6f\x6f\x6c\x20\x54\x69\x70\x73\x22\x20\x2f\x3e\x0a\x20\ +\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\ +\x6e\x61\x6d\x65\x3d\x22\x77\x69\x67\x67\x6c\x79\x22\x20\x6e\x61\ +\x6d\x65\x3d\x22\x57\x69\x67\x67\x6c\x79\x22\x20\x2f\x3e\x0a\x20\ +\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\ +\x6e\x61\x6d\x65\x3d\x22\x77\x69\x6e\x64\x6f\x77\x66\x6c\x61\x67\ +\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x57\x69\x6e\x64\x6f\x77\x20\ +\x46\x6c\x61\x67\x73\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x63\x61\ +\x74\x65\x67\x6f\x72\x79\x3e\x0a\x20\x20\x3c\x63\x61\x74\x65\x67\ +\x6f\x72\x79\x20\x64\x69\x72\x6e\x61\x6d\x65\x3d\x22\x78\x6d\x6c\ +\x22\x20\x6e\x61\x6d\x65\x3d\x22\x58\x4d\x4c\x22\x3e\x0a\x20\x20\ +\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\ +\x61\x6d\x65\x3d\x22\x73\x61\x78\x62\x6f\x6f\x6b\x6d\x61\x72\x6b\ +\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x53\x41\x58\x20\x42\x6f\x6f\ +\x6b\x6d\x61\x72\x6b\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\ +\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\ +\x3d\x22\x64\x6f\x6d\x62\x6f\x6f\x6b\x6d\x61\x72\x6b\x73\x22\x20\ +\x6e\x61\x6d\x65\x3d\x22\x44\x4f\x4d\x20\x42\x6f\x6f\x6b\x6d\x61\ +\x72\x6b\x73\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x63\x61\x74\x65\ +\x67\x6f\x72\x79\x3e\x0a\x3c\x2f\x63\x61\x74\x65\x67\x6f\x72\x69\ +\x65\x73\x3e\x0a\ +\x00\x00\x03\x50\ +\x3c\ +\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ +\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x69\x73\x6f\ +\x2d\x38\x38\x35\x39\x2d\x31\x22\x3f\x3e\x0a\x3c\x63\x61\x74\x65\ +\x67\x6f\x72\x69\x65\x73\x3e\x0a\x20\x20\x3c\x63\x61\x74\x65\x67\ +\x6f\x72\x79\x20\x64\x69\x72\x6e\x61\x6d\x65\x3d\x22\x2e\x22\x20\ +\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x64\x65\x6d\x6f\x73\x22\x20\ +\x6e\x61\x6d\x65\x3d\x22\x44\x65\x6d\x6f\x6e\x73\x74\x72\x61\x74\ +\x69\x6f\x6e\x73\x22\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\ +\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x61\x66\ +\x66\x69\x6e\x65\x22\x20\x6e\x61\x6d\x65\x3d\x22\x41\x66\x66\x69\ +\x6e\x65\x20\x54\x72\x61\x6e\x73\x66\x6f\x72\x6d\x61\x74\x69\x6f\ +\x6e\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\ +\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x61\x72\ +\x74\x68\x75\x72\x70\x6c\x75\x67\x69\x6e\x22\x20\x6e\x61\x6d\x65\ +\x3d\x22\x41\x72\x74\x68\x75\x72\x20\x50\x6c\x75\x67\x69\x6e\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\ +\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x63\x6f\x6d\x70\x6f\ +\x73\x69\x74\x69\x6f\x6e\x22\x20\x6e\x61\x6d\x65\x3d\x22\x43\x6f\ +\x6d\x70\x6f\x73\x69\x74\x69\x6f\x6e\x20\x4d\x6f\x64\x65\x73\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\ +\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x67\x72\x61\x64\x69\ +\x65\x6e\x74\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\ +\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\ +\x22\x70\x61\x74\x68\x73\x74\x72\x6f\x6b\x65\x22\x20\x6e\x61\x6d\ +\x65\x3d\x22\x50\x61\x74\x68\x20\x53\x74\x72\x6f\x6b\x69\x6e\x67\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\ +\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x64\x65\x66\x6f\ +\x72\x6d\x22\x20\x6e\x61\x6d\x65\x3d\x22\x56\x65\x63\x74\x6f\x72\ +\x20\x44\x65\x66\x6f\x72\x6d\x61\x74\x69\x6f\x6e\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\ +\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x62\x6f\x6f\x6b\x73\x22\x20\x6e\ +\x61\x6d\x65\x3d\x22\x42\x6f\x6f\x6b\x73\x22\x20\x2f\x3e\x0a\x20\ +\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\ +\x6e\x61\x6d\x65\x3d\x22\x6d\x61\x69\x6e\x77\x69\x6e\x64\x6f\x77\ +\x22\x20\x6e\x61\x6d\x65\x3d\x22\x4d\x61\x69\x6e\x20\x57\x69\x6e\ +\x64\x6f\x77\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\ +\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x73\ +\x70\x72\x65\x61\x64\x73\x68\x65\x65\x74\x22\x20\x6e\x61\x6d\x65\ +\x3d\x22\x53\x70\x72\x65\x61\x64\x73\x68\x65\x65\x74\x22\x20\x2f\ +\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\ +\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x73\x71\x6c\x62\x72\x6f\x77\ +\x73\x65\x72\x22\x20\x6e\x61\x6d\x65\x3d\x22\x53\x51\x4c\x20\x42\ +\x72\x6f\x77\x73\x65\x72\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\ +\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\ +\x3d\x22\x74\x65\x78\x74\x65\x64\x69\x74\x22\x20\x6e\x61\x6d\x65\ +\x3d\x22\x54\x65\x78\x74\x20\x45\x64\x69\x74\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\ +\x65\x6e\x61\x6d\x65\x3d\x22\x65\x6d\x62\x65\x64\x64\x65\x64\x64\ +\x69\x61\x6c\x6f\x67\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x45\x6d\ +\x62\x65\x64\x64\x65\x64\x20\x44\x69\x61\x6c\x6f\x67\x73\x22\x20\ +\x2f\x3e\x0a\x20\x20\x3c\x2f\x63\x61\x74\x65\x67\x6f\x72\x79\x3e\ +\x0a\x3c\x2f\x63\x61\x74\x65\x67\x6f\x72\x69\x65\x73\x3e\x0a\ +\x00\x00\x2a\x14\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x80\x00\x00\x00\x80\x08\x06\x00\x00\x00\xc3\x3e\x61\xcb\ +\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\xd5\x08\ +\x08\x0f\x1b\x36\x16\x33\x5d\x2c\x00\x00\x00\x1d\x74\x45\x58\x74\ +\x43\x6f\x6d\x6d\x65\x6e\x74\x00\x43\x72\x65\x61\x74\x65\x64\x20\ +\x77\x69\x74\x68\x20\x54\x68\x65\x20\x47\x49\x4d\x50\xef\x64\x25\ +\x6e\x00\x00\x29\x8a\x49\x44\x41\x54\x78\xda\xed\x9d\x79\xbc\x1c\ +\x65\x99\xef\xbf\x6f\x55\x75\xf7\x39\x7d\x36\xc8\x4e\x16\xb3\x02\ +\x61\x0b\x21\x91\x4d\x10\x46\x51\x84\xcf\x04\x17\x64\x9c\xc5\x91\ +\xeb\x32\x5e\x9d\xe5\xc3\x75\x74\x44\xe7\x08\x6e\x28\xc2\x38\x57\ +\xc7\xab\x33\x23\x2a\xf7\x8e\xeb\x8c\xa0\x32\x33\xa0\xa0\x28\x12\ +\x08\x3b\x24\x21\x84\x84\x6c\x90\x04\xb2\x9d\xac\x67\xe9\xa5\xba\ +\xaa\xde\xf7\xfe\x51\x4b\xbf\xb5\xf5\x09\x21\x21\x27\x87\x53\x50\ +\xe9\xee\xaa\x3e\x5d\xdd\xf5\xfc\x9e\xdf\xb3\xbe\xef\x2b\x38\x94\ +\x6d\x09\xa7\x5f\x77\x6b\xf1\xc9\x72\x97\x58\x01\x2c\x05\xee\x07\ +\x96\xf7\x96\xed\x3e\xc6\xb6\x63\x6a\x13\x87\x20\x7c\x80\xc7\x3f\ +\x7d\x4b\xf1\xec\xee\xe3\x63\x7f\x3e\x08\xac\x0d\x00\xb1\x14\x78\ +\x18\x18\xe8\x2d\xdb\xde\xd8\x6d\x1e\x5d\x00\xb8\x1c\xf8\xd5\xa7\ +\x6f\x29\x92\x00\x40\xd6\xf6\x2c\xb0\x2c\x04\x44\x6f\xd9\xde\x32\ +\x76\xcb\x8f\x65\x00\x2c\xa1\x23\x10\xe8\xc2\x83\x04\x80\xbe\x39\ +\xc0\x0b\x09\x86\xd8\xde\x5b\xb6\xed\x31\x31\x1c\xbd\xcd\x7a\x99\ +\xef\xff\x00\xb0\xf0\x10\xaf\x55\x00\x4e\x0a\xf6\x0f\x07\xc7\xb6\ +\xde\x58\x2d\x3d\xa2\x81\x62\x7d\x6f\xd9\x76\xc7\xc4\x32\x12\x19\ +\x60\x09\xe5\x80\xd2\x67\x01\x1c\x02\x03\x1c\xcc\xb6\x23\x60\x98\ +\xe5\x81\x63\xb9\xaa\xb7\x6c\x57\xc7\xc4\x34\x32\x18\xe0\xcb\xa1\ +\xf0\x8f\xe0\x76\x02\xf0\x47\xc1\x0e\xb0\xff\xc6\x6a\xe9\x09\x2d\ +\xd2\x58\xdd\x5b\xb6\x07\xc6\xc4\xf6\x6a\x33\xc0\x12\xa6\x02\xeb\ +\x81\x8e\xf0\xd0\x11\x62\x80\xe1\xb6\xbd\xc0\x0a\x8d\x21\x96\xf5\ +\x96\xed\xc1\x31\x31\x1e\x79\x00\xdc\x19\x05\x80\x2d\x00\x50\x10\ +\x02\x4f\x29\xe4\xab\xf7\xfd\xdd\x00\x0c\xa1\x0f\xf1\x54\x6f\xd9\ +\xde\x39\x26\xd6\xc3\x09\x80\x25\x9c\x03\x3c\x94\x34\x17\x79\x0c\ +\x30\xbf\x50\x66\x9c\x69\x01\x8a\x7e\xe9\xe1\x2a\xc9\x01\xe9\xd1\ +\x50\x92\x01\x29\x91\x28\xd4\x91\xfb\x3d\x43\xc0\x73\x1a\x43\x2c\ +\x05\xfa\xc6\x1c\xcb\x57\x06\x80\x07\x81\x0b\x93\x87\xb3\x00\x50\ +\x14\x06\x17\xb4\x8d\xc3\x40\x41\x24\x68\x15\xec\xfe\xf3\x9a\xf2\ +\xa8\x2b\x49\xbf\xf4\xa8\x48\x8f\x9a\x52\x0c\x49\xef\x48\xb2\xc6\ +\x5a\x2d\x17\xf1\x48\x6f\xd9\x7e\x7e\x4c\xec\x07\x0b\x80\x25\xfc\ +\x11\xf0\xd3\xac\xf7\x65\x01\xe0\x04\xb3\x9d\xd3\x8a\x3d\x31\x81\ +\xfb\x40\x50\x89\xe7\xf1\x73\x1e\x8a\xaa\x94\x54\x94\xc7\x01\xcf\ +\x63\x50\x79\xd8\x4a\xe1\xa8\xc3\xce\x15\x0d\xe0\xc5\x80\x21\x7e\ +\x1f\x80\xe2\xf9\xde\xb2\x5d\x1f\x03\x40\x76\xd8\xb7\x0a\x98\x9b\ +\x75\x3a\x0b\x00\xb3\xac\x2e\x4e\x2c\xf4\x64\x08\x9e\x83\x00\x45\ +\xf3\xbc\x42\xe1\x2a\x85\x8d\x64\x28\x60\x8a\x41\x25\xd9\xef\x79\ +\x47\xc2\x7c\x6c\x05\x1e\xd7\x4c\xc6\xb3\xbd\x65\x5b\xbd\x56\x00\ +\xd0\x2a\x0c\xbc\x26\x4f\xf8\x79\x5b\xb7\xd1\x86\xc0\xd2\x68\x3f\ +\x2e\x74\x5d\xd8\x42\x03\x85\x48\x9d\x53\x14\x84\xa2\x80\xa2\xd3\ +\x2c\x80\xd9\x3c\x57\x55\x1e\x15\xe9\xfb\x15\x07\xa4\x47\x4d\xfa\ +\x0c\xf2\x0a\xb6\xd7\x05\xfb\x55\xc1\xeb\x3d\x37\x56\x4b\x2b\x02\ +\x40\xdc\x0f\x3c\x33\x9a\x23\x0d\x91\xa3\xfd\x13\x80\x67\x80\x29\ +\x79\x7f\x98\xc5\x00\x67\x15\x4f\x60\x92\xd9\x91\xab\xe9\x59\x26\ +\x20\x9b\x29\xe2\x6c\x90\xf5\x39\xe1\x59\x57\x49\xea\x4a\x32\xa4\ +\x3c\xf6\x7b\x1e\x43\x4a\x52\x57\x3e\x83\x1c\xa6\x6d\x5f\x22\xd2\ +\x58\x39\x9a\x00\x91\xc7\x00\x37\xb4\x12\x7e\xde\x36\xde\xe8\x46\ +\x60\xc4\x04\x25\x12\x82\x14\x19\xc2\x14\x29\x87\x31\xcd\x14\x22\ +\x07\x30\x05\xe1\xb3\x45\x17\x8a\x29\xa6\x7f\x5c\xa2\x18\x0c\x18\ +\x62\x50\x7a\x54\xa5\xa2\xa2\x0e\xd9\xcd\x1c\x07\xbc\x25\xd8\x01\ +\xfa\x6f\xac\x96\x36\x68\x3e\xc4\x23\xbd\x65\x7b\xdf\x68\x63\x00\ +\x0f\x30\x5a\xfd\x61\x16\x03\xbc\xa5\xed\x54\x0a\xc2\x6c\xa9\xed\ +\xc3\xfb\x01\x2f\x97\x29\x86\xf7\x27\x42\x50\xec\xf7\x3c\x0e\x48\ +\x97\x8a\x52\x54\xa4\xcf\x1c\x87\xc9\xb1\x5c\xa5\x31\xc4\xb3\xc7\ +\x52\xa4\x91\xc7\x00\xc6\xa1\xa1\xc9\x44\x60\x46\xc2\x13\xc3\xd0\ +\xba\x7e\x3e\xcb\x0f\x48\x33\x05\x99\x40\x11\x19\x4c\xa3\x9b\x09\ +\x50\x18\x28\x26\x98\x16\x13\xcc\x62\x74\xbc\xa6\x3c\x86\x02\x7f\ +\xa2\x22\x3d\xfa\x83\x3c\xc5\xcb\xdc\x8a\xc0\xeb\x83\xfd\x13\x80\ +\xba\xb1\x5a\xda\xa4\x31\xc4\x52\x60\xc7\x48\xed\x8b\xb0\x0e\xd7\ +\x07\x1d\x67\x74\x50\x14\xa5\x4c\x81\xc7\x73\x02\x68\x74\x4e\x0b\ +\xe7\x30\x0d\x0a\x32\xfc\x00\x91\x02\x03\x99\x26\x28\x79\x1d\x85\ +\xa2\x43\x98\x74\x98\x8a\x49\x9a\xe9\xe8\x0f\xcc\x46\x45\xfa\xb9\ +\x8a\xea\xcb\x67\x09\x01\xcc\x0b\xf6\xb0\xea\xb9\xfe\xc6\x6a\xe9\ +\x41\x8d\x21\x96\x8f\x3a\x00\x80\x08\x22\x80\xb8\x80\x55\xae\x9d\ +\x27\x46\xf5\x22\xc7\x5c\xa8\x84\xfd\x8f\xbf\x4f\xa6\xae\x91\x05\ +\x2c\x91\x01\x30\xfd\xb8\xfe\xf7\xe3\x0c\x8b\xe3\x8d\x26\x20\xfc\ +\x4c\xa6\x1b\xb0\x84\x64\x50\xc9\x43\x71\x30\xc3\x32\xf8\x87\x00\ +\x6e\xac\x96\xf6\x6a\x0c\x71\x3f\xb0\xa9\xb7\x6c\xd7\x46\x0d\x00\ +\x54\xa6\x86\x26\xc3\xbd\x56\xbe\x01\x39\x1a\x1c\x17\x1e\x2d\xc0\ +\xe3\x57\x24\x92\x4e\x64\x5a\xf8\x22\x76\x2e\x34\x00\x32\x38\x27\ +\x31\x85\x62\x92\x69\x31\xc9\x0c\x93\x56\x92\x9a\x16\x86\x1e\x90\ +\xde\xa1\x24\xac\xc6\x07\x61\x67\x18\x7a\xbe\x74\x63\xb5\xf4\x78\ +\x00\x88\xd5\xbd\x65\xfb\xbe\x63\x1a\x00\xe4\x84\x75\xf9\x34\x4f\ +\xca\x0c\xa8\xdc\x5c\x42\xbe\x6f\x91\xcc\x2f\xa8\x9c\x08\x23\x2b\ +\xbc\x54\x01\xa3\x88\x04\xc0\x92\xe7\x0d\x14\x96\x21\xe9\x32\x60\ +\x7a\x70\xcc\x56\x1a\x20\x3c\x0f\x5b\x49\x5e\xa6\xc1\x9f\x1e\xec\ +\x57\x06\x0c\xf1\x44\x6f\xd9\x3e\xe7\x98\x02\x40\xb7\xe8\x44\x50\ +\x68\x91\x04\x3a\x18\x60\x24\x9d\x42\x32\xed\x7e\xfe\xe7\xe9\x9b\ +\x0f\x06\x91\xe3\x14\xea\x40\x48\x0a\x59\x7f\x14\xd1\x63\xd3\xc7\ +\x08\xd9\x25\x7c\x6c\x13\x7e\x08\x3a\xc5\x54\xa8\x82\xc2\x51\x92\ +\x81\x88\x21\x5c\x2a\x2f\x3f\x59\x65\x1c\xaa\x1c\xe6\xce\xbb\xae\ +\x6d\xd3\xc6\x2f\xd5\x5f\x75\x00\xb4\x8b\x72\x4b\x1f\x60\x78\x20\ +\x1c\xec\xb9\xf8\xa3\x48\x08\x3d\xbc\xbe\xca\x31\x1f\x59\xd1\x48\ +\x1a\x08\x3a\x08\x64\x70\x26\xce\x0e\x2a\x87\x2d\x04\x8a\x92\x50\ +\x4c\x30\xfd\x3d\x3c\x3e\x20\x5d\xf6\x49\x8f\x03\x9e\x7b\xa8\x7e\ +\x44\x2b\xa1\x2f\x06\x2e\x02\x2e\x3e\xf7\xdc\x73\xcf\xb9\xea\xaa\ +\x95\x9b\xb5\xd3\x5b\x80\x75\xc1\xf3\x15\xc0\xaf\x6f\xbe\x69\x61\ +\xfd\x08\x98\x00\xa3\x85\x0f\x40\x2e\xdd\xeb\x94\x2f\x32\xfd\x03\ +\x72\xa8\x9f\x16\x9f\x9f\x04\x01\x2d\x99\x27\xae\xf9\x2a\xf6\x1f\ +\x1a\x00\x94\x06\x88\xe6\xe7\xcb\xcc\x28\x25\x09\x8a\xe3\x0c\x8b\ +\x1e\x43\x81\xe5\xfb\x11\xfb\x3c\x37\x72\x2e\x87\xe4\xc1\xf3\xc3\ +\xdc\x79\xd7\xb5\x07\x11\xc6\xc5\xc1\x7e\x29\xd0\x05\x88\x19\x33\ +\x66\x30\x7d\xfa\x74\xf0\x3b\xab\xc2\xed\xfc\xc4\x47\xcc\x03\x36\ +\x1d\x76\x00\x08\x04\x60\xe6\x0a\x2a\xe9\xe0\x89\x4c\xbb\xae\x12\ +\x5a\x45\x06\x08\x5a\x01\x20\xce\x0a\x22\x87\x35\x5a\xa5\x9a\x9b\ +\x1a\x9f\x7e\xee\x93\xbf\xd4\x40\x11\x32\x81\x4c\x45\x1b\xb4\x00\ +\x85\x40\x31\xc9\x2c\x30\xd1\xf4\x01\x56\x51\x1e\x5b\x1c\x9b\x9d\ +\x5e\x63\x38\xe1\x7f\x0b\x78\x47\xe0\x2f\xc4\x93\x11\xc5\x22\x67\ +\x9d\x75\x16\x42\x88\xa3\xe3\x03\x34\x19\x20\x7e\xc3\xd5\xb0\x5a\ +\xac\x52\xac\x61\x24\x84\xd4\x14\xa4\x48\x80\x25\x4b\xe0\xd9\xa0\ +\x48\x83\x91\x54\xc4\x10\xd7\xff\x38\xfd\xab\x84\xc6\xab\x18\x63\ +\x48\xed\x33\xb2\x9d\xca\x56\x80\xe8\x12\x8a\x93\x0b\x45\xfa\xbc\ +\x7d\xb9\x89\xa8\xb9\xf3\xae\xfb\x53\xe0\xa3\x91\x96\xe9\xca\x27\ +\x04\x8b\x17\x2f\xa6\x58\x2c\x1e\x3d\x27\x50\x68\x26\x20\xa9\xd9\ +\xaa\x85\xd0\xc5\x30\xe0\x10\x9a\xe8\x45\x86\xa6\x8b\x88\x7f\x54\ +\xe2\x98\x0a\x58\x29\x1b\x0c\x2a\x27\x11\x15\x17\xb8\x4c\xfc\x2b\ +\x35\x28\xc8\x98\xe0\x45\xf0\x4a\xa4\x4c\x80\xcc\xc8\x72\xa6\xcd\ +\x46\x41\x28\x0c\x21\x90\x19\xbe\xc1\xdc\x79\xd7\xcd\x05\xfe\x4f\ +\x96\xf0\x01\xe6\xce\x9d\xcb\xb4\x69\xd3\x8e\x76\x18\x98\x04\x00\ +\xc3\x7a\xff\xd9\xb1\x3c\x29\x07\xcf\xc8\xd0\xf4\xf8\xf3\xbc\x73\ +\x49\xb3\xe1\xdf\xfc\xb8\x09\xd0\x8d\x93\xca\xa0\x7f\x89\xa1\x09\ +\x5e\xe0\x25\x38\xc1\x8b\x5e\x99\x09\x67\xb2\xb5\x5f\x20\x53\xa0\ +\x38\xce\x28\xb1\xc7\xab\x25\x85\xdf\x01\x7c\x1b\x98\x90\x75\xd7\ +\xbb\xba\xba\x38\xfd\xf4\xd3\x8f\x7e\x18\x28\x5e\x16\x00\xf2\xcf\ +\x89\x14\x08\x44\x42\xb3\x7d\x7d\x17\xa9\x63\x09\xe1\x2b\x68\xd4\ +\x3a\xa8\x0f\xf6\xd0\xa8\x8c\xa7\x7a\x60\x0a\xb5\xc1\x13\xfc\xbf\ +\x15\x80\xf0\x3f\x59\x08\xe1\x3f\x17\x36\x56\xa9\x42\xc7\xf8\x17\ +\x68\xeb\xd9\x4e\xa9\xfb\x25\x84\x69\x47\xda\x1f\x82\xc0\x7f\x94\ +\xd1\xa3\xc2\x8c\x31\x84\x68\x09\x02\xfd\xf7\xca\x54\x95\xd3\xc8\ +\x8e\xfe\xae\xd1\x2a\x91\xa9\x6d\xd1\xa2\x45\x58\x96\x75\xf4\x01\ +\x30\x3c\x03\xb4\x06\x42\xda\x5b\x47\x8b\xe3\x43\x2d\x17\x29\x61\ +\x8b\x08\x10\xc1\x7b\xa5\x60\xff\x8e\xa9\xec\xd9\x3a\x8f\x4a\xff\ +\x24\x84\x10\xd1\x0e\x0a\x5f\xde\x4d\xd3\x10\xc8\x1f\x21\x4a\x38\ +\x8d\x12\xf5\xa1\xf1\x08\x21\x30\x8b\x35\x4a\x9d\xbb\xe8\x98\xb0\ +\x81\x8e\x89\x1b\x30\xcc\x46\x20\x5c\x2f\xa0\x7b\xdf\xf9\x6b\x3e\ +\x2a\x2d\x42\x48\x47\x14\xad\xc1\x10\xb2\x80\x91\xd4\xfe\xd3\x80\ +\xeb\xf2\xee\xf8\x9c\x39\x73\x98\x38\x71\xe2\x48\xc9\x04\x1a\x41\ +\x22\x88\x8c\x5c\xfe\x70\x09\x21\x12\x20\x48\x0a\x3f\x4f\xe0\xcd\ +\x5d\xb9\x82\xdd\x5b\xa7\xb2\x7d\xe3\x49\x34\xec\xf6\x40\xe8\x9e\ +\x26\x7c\x52\xcf\xf3\x8e\x01\xb8\x6e\x01\xbb\x3a\x9d\xc1\xdd\x33\ +\xb0\x36\x9d\xcf\xf8\xd9\x4f\xd0\x7d\xc2\x5a\x94\xf0\x30\x90\x78\ +\x91\xc6\x87\x20\x08\x3d\x84\x34\x08\x44\x46\x6d\x22\x2b\x0f\xd1\ +\x65\x94\xd9\xe5\x0d\x86\xc2\xef\x04\x7e\x06\x94\xb3\xee\xf6\xb8\ +\x71\xe3\x58\xb0\x60\xc1\xc8\xc9\x04\xe6\x99\x00\x91\x11\x09\xe4\ +\xe7\xf9\xf3\x84\x2f\xf2\x85\xaf\x60\xfb\xc6\xc9\xbc\xb4\x61\x26\ +\x8d\x7a\x39\x25\xf8\xe4\x9e\x14\x74\x16\x20\x92\x8f\x5e\xad\xc8\ +\xf6\x35\x17\xb0\x6f\xeb\x29\x8c\x9f\xbd\x92\xae\x89\x5b\x10\x86\ +\x17\x69\xff\x70\x20\x18\xce\x27\x08\x01\x60\x45\x0a\x04\xf8\x4d\ +\x39\xf3\x33\x55\xcd\x30\x58\xbc\x78\xf1\x2b\xa2\xfe\xc3\x0e\x80\ +\x89\xc6\x74\x44\xe4\xa4\xaa\x94\x33\xa7\x72\x72\x03\x22\xc3\x0c\ +\xe4\xd9\xf6\x24\x00\x64\x43\xb0\xe2\x81\x13\xe9\xdf\x7b\x1c\x86\ +\x61\x20\x84\x6c\x29\xf4\x56\x42\x4e\xc6\xcf\x59\x20\xa9\xf4\xf7\ +\x50\x59\x79\x31\x1d\xe3\xb7\x32\xfd\xb4\x27\xb1\xda\xab\x88\xc0\ +\x24\xf8\x20\xf0\x62\x20\xc8\x4a\x35\xb7\x2a\x71\x87\xf7\x6f\xf3\ +\xbd\x27\x9d\x4a\x8b\x41\xb8\xf3\xe7\xcf\xa7\xa7\xa7\x67\x64\xd5\ +\x02\x2c\x51\x8a\x7e\x80\x1a\x46\xd0\x69\xbb\x4f\x2a\x79\x13\x17\ +\x76\x9c\x01\x0c\x14\xfd\xbb\x8b\x3c\xfd\xd0\x4c\xea\xd5\x76\x84\ +\x90\x31\x41\x1e\x8c\xf0\x5b\x69\x7d\xd6\x31\xa5\x54\xf4\x7c\xa0\ +\x6f\x1a\x1b\x07\x7b\x78\xdd\x82\x27\xe8\x18\xbf\x27\x62\x81\x90\ +\x09\xf4\xec\x61\xab\xec\x60\xb2\x01\xc6\xa2\x48\x63\xa0\x8d\x65\ +\x5f\x7c\x5b\x7b\xde\x7d\x3e\xfe\xf8\xe3\x39\xf5\xd4\x53\x47\x5e\ +\x31\x48\x60\x69\xc5\x20\x86\x7d\x14\xa9\xbf\x27\xe1\xf1\x67\xd3\ +\xbe\x81\xe2\xf9\xd5\x9d\x3c\xb7\x62\x12\x4a\x59\x18\x86\xc4\x30\ +\x0c\xa4\x6c\x6a\xbf\x61\x18\x31\xa1\xe9\xc2\x1b\x4e\xd0\x79\xef\ +\x49\x7e\x56\x75\xb0\x8d\xf5\x8f\x5c\xc0\xdc\xd7\x3f\x49\xcf\xe4\ +\x5d\x08\xe1\x45\xde\x7d\xdc\x29\xd4\xcd\x00\x2d\xcd\x80\x50\x45\ +\xee\xbb\xf6\x0a\xec\xfe\xb6\xcc\x7b\x5c\x28\x14\x58\xb4\x68\xd1\ +\xc8\xac\x06\xfa\xed\x60\x96\x96\xfc\xc9\xf7\x05\x44\x94\xda\x51\ +\x09\xad\xcf\xb3\xf5\x81\xff\xef\xc1\x53\x0f\x76\xb1\x75\x63\x37\ +\xa6\x29\x30\x0c\x85\x52\x0a\x29\x65\x24\x74\x00\x29\x65\xae\xa0\ +\x87\xd3\xfc\x56\x7f\x17\x0b\x50\x95\xc2\xf3\x60\xed\xc3\x8b\x98\ +\x7a\xe2\x0b\xcc\x3c\x63\x63\x50\x2e\x96\x78\x78\x1a\xfd\x7b\x89\ +\xda\x42\x7e\x6e\x64\xf5\xed\x67\xb0\xed\xe1\x19\xb9\xf7\x78\xc1\ +\x82\x05\x1c\x7f\xfc\xf1\x99\xe7\x5e\x78\x7e\x3d\xb3\xe7\x9c\x34\ +\x32\xc2\x40\x95\x61\xdb\x55\xac\x3c\x9b\x4d\xfd\x69\xbb\xef\x07\ +\x46\x02\x50\x9e\xe2\x91\xdf\x74\xb0\x7d\x6b\x39\x12\x7c\xb8\x87\ +\x9a\x99\xa4\xea\x83\x02\x6e\x0b\x53\x91\x07\x90\xf0\x3a\xe1\xe3\ +\x8b\xcf\xcd\x40\x4a\x98\xbd\x60\x0b\x52\x78\x29\x16\x90\x89\xfc\ +\x80\xc8\xe8\x5d\xdc\xb4\xa6\xc8\xbf\x7d\x39\x3f\x9b\x37\x79\xf2\ +\x64\x66\xcd\x9a\x95\x79\x6e\xc7\x8e\x97\x78\xe4\xd1\xfb\x8f\x2e\ +\x00\x84\x32\x50\x4a\x17\xa1\xaf\xe5\xe1\xbd\x13\x39\x59\x3e\xa1\ +\xe5\xf7\xb3\x6d\xbe\x9f\x09\x5c\xb3\x52\xb0\xf5\xf9\x22\xa6\xa9\ +\x52\x82\x48\x0a\x5f\x7f\x9d\x14\x58\x1e\x48\xc2\xd7\x21\x93\xe4\ +\xf9\x13\x49\xbf\x20\xdc\xb7\xac\x99\x4a\xcf\xc4\x21\xc6\x4d\xdd\ +\x1f\x24\x79\xfc\x3d\x4c\x1e\x29\xad\x85\x2d\xd9\xf4\xea\x3a\xf0\ +\x8d\xbf\x9f\x84\xd3\xc8\x06\xae\x69\x9a\x2c\x5a\xb4\x28\x13\x88\ +\x8d\x86\xcd\xaf\xef\xb9\x83\xc2\x21\xd4\x01\x0e\x33\x03\x98\x5a\ +\x18\xa8\x51\x9c\x22\x23\x34\x14\x5a\x46\x4f\x80\xd0\xed\xbe\x48\ +\x69\xff\xda\xe5\x92\x27\x1e\x2c\x60\x59\x2a\x25\xf8\x50\xe0\xa1\ +\x80\x93\x00\xc8\xda\xb3\x40\x90\x14\xb6\x1f\x55\xc4\x7d\x0a\x1d\ +\x1c\xc9\xef\xa1\x94\xe2\xe9\xfb\x67\xb3\xe8\x12\x45\xcf\xe4\xa1\ +\x14\x08\xf4\xcc\x5f\xb2\x4f\xf2\xdb\x37\x74\xb1\x69\x4d\xbe\x00\ +\xcf\x3c\xf3\x4c\x3a\x3a\x3a\x32\xcf\x3d\xfe\xf8\x83\xec\xda\xb5\ +\x9d\xe9\x33\x66\x8d\x04\x1f\xa0\x30\xac\x03\xa8\x57\xf6\xf4\xb4\ +\x6d\x96\xdd\x07\xd8\xb3\x53\xf2\xe4\x43\x06\x86\x61\xc4\x84\x92\ +\xd4\xc2\x24\x2d\x87\xbe\x41\xfc\xd1\xc3\x30\x1d\xca\xdd\x55\x26\ +\x9e\x20\xe9\xea\x31\xe8\xec\x32\x40\x15\x00\x41\xdf\x36\x83\xbe\ +\x9d\x0e\x76\xd5\x44\x36\xba\xa2\x6b\xea\x7b\x16\x23\x84\xd7\xf3\ +\x3c\x58\xb5\x6c\x2a\xe7\x5e\xf6\x12\xa5\x8e\x46\x04\x80\x78\x7e\ +\x20\xee\x08\x2e\x5f\x66\x71\xcf\x4f\xcb\xb9\xf7\x75\xc6\x8c\x19\ +\xcc\x9e\x3d\x3b\xf3\xdc\xae\x9d\xdb\x79\xf4\x91\xfb\x47\x92\x13\ +\x68\x66\x94\x5c\xf5\x52\xae\x3a\x28\xbb\x1f\x3e\x77\x6d\xc5\x7d\ +\x77\x39\x78\xae\x45\xa1\x70\x70\x42\x90\x52\x46\xbb\xe7\x79\xc1\ +\x73\x87\x8e\x9e\x41\x16\x9e\x57\x62\xd2\x54\xe8\xea\x6e\xcb\x0c\ +\x55\x67\x9e\xe4\x22\x10\x0c\x0d\x56\xd9\xbd\xdd\xe5\xf9\xb5\xd0\ +\xb7\xbd\x8c\x61\x14\x30\x4d\x33\xda\xf5\xef\x91\x04\xe1\x50\xbf\ +\xc5\xe3\xbf\x99\xcc\x1b\xdf\xd1\x87\x61\x78\x90\xd9\x5d\xe4\x5f\ +\x6f\xb0\x1f\xbe\x7c\x4d\x3b\x32\xa7\xf3\xbc\x58\x2c\xe6\x52\xbf\ +\xe7\x79\xfc\xea\x57\x3f\xc3\xf3\xbc\x91\x01\x80\x8a\xea\xcf\x49\ +\x04\x91\xeb\xf4\x65\x65\xfa\x08\xa8\xdf\x10\xf0\xc8\x83\x43\xf4\ +\xef\x57\x14\x8b\xad\x9d\xb0\xd0\xf3\xd7\x05\xef\x79\x1e\xae\xeb\ +\xd2\x3d\xae\xc6\x82\x73\xeb\xcc\x3b\x79\x02\x88\xa0\x40\xab\x34\ +\xf1\x0b\x95\x0a\x49\x3b\xba\x3a\xe8\x3c\x19\x66\x9f\x04\xbb\xb6\ +\x55\x79\xfa\x31\x93\xbe\xed\x16\xa6\x59\xc4\xb2\x2c\x2c\xcb\x8a\ +\x80\x90\xe5\x4b\xec\xdf\x5d\x60\xeb\xba\x0e\x66\x9d\x52\x8f\xe5\ +\x06\xa4\x56\xf9\x73\x3d\xf8\x5a\xaf\x49\x65\x50\xe4\x3a\xa7\x8b\ +\x17\x2f\xa6\x50\x28\x64\x9e\x5f\xb6\xec\xb7\xf4\xf5\xed\x18\x39\ +\x61\x60\xbf\xda\x9d\xe1\x03\x90\x53\xe2\x15\x5a\xaa\x37\x2b\xf4\ +\x13\xec\xef\x73\x78\xe6\xa9\x3a\x96\x55\xca\x74\xc6\x74\xdb\xab\ +\x0b\xde\x75\x5d\x5c\xd7\x45\xaa\x0a\xa7\xbe\x7e\x88\x73\x2e\x98\ +\x85\x69\x91\xc8\xca\x35\x5f\xfb\xff\xab\x84\xeb\xda\x7c\x9c\x32\ +\xbd\x8d\x29\xd3\x60\xcb\xa6\x06\x0f\xdc\xd3\xc0\xb3\xdb\x91\x52\ +\x62\x9a\x26\x96\x65\xe5\x32\xc1\x33\x8f\xb6\x33\x6d\xb6\xa2\xd0\ +\xe6\x69\xfe\x40\xb3\x60\xb4\xf4\x2e\xc9\xb2\xdf\xe4\x47\x2b\xd3\ +\xa7\x4f\xcf\xad\xf1\xbf\xf0\xc2\x06\x1e\x7b\x74\xe9\x48\xcb\x03\ +\x18\x89\x44\x10\x19\x39\xfe\x78\x57\x8f\xd0\xe2\x00\x1d\x00\xa6\ +\x10\xdc\x7b\x57\x1f\x4a\x19\x91\x13\x96\xa5\x6d\xbe\xdd\xf5\x62\ +\x82\x77\x1c\x07\xa3\xb8\x93\xcb\xde\x35\x8d\xe9\x33\x4f\xd0\x08\ +\x57\x4f\xc9\xd2\xf2\x7b\xea\xc7\x94\xf2\x23\x99\x59\xf3\x0a\x4c\ +\xb8\xda\xe1\xee\x5f\xbc\xc4\xd0\x81\x13\xa2\xee\x9b\x90\x0d\x42\ +\xad\x0d\xbf\xa7\x5d\x33\x79\xfa\xa1\x02\xe7\x5c\x62\xa6\x00\xb0\ +\xe5\x79\xc9\xd7\xae\xcf\x6f\xff\xea\xea\xea\xca\x2d\xf4\xd4\x6a\ +\x55\x7e\x7d\xcf\x1d\xb1\xa8\xe6\x95\x05\xef\x87\x39\x0f\x20\x28\ +\x04\x8f\xe1\xf3\xe4\x6b\x0b\x03\x0b\x41\x51\x3b\x5f\xd0\xce\x15\ +\xd8\xbc\xa1\xc6\xf6\x17\xed\x94\x37\x1e\xee\xa1\xd6\x87\xc2\x77\ +\x1c\x87\x46\xa3\x41\xbd\x5e\xa7\xbd\x6b\x80\xcb\xdf\x3d\x89\x19\ +\x33\xc7\xe3\x37\xd0\x98\xc1\xc8\x40\x23\x78\x6e\x05\xc7\xad\x60\ +\xd7\x9f\xeb\xaf\x0b\x40\x01\x85\x85\x52\x16\x0a\x8b\xae\xee\x76\ +\xae\x7c\xef\x2c\xa6\xce\xec\xa7\x56\xab\xd2\x68\x34\x70\x5d\x37\ +\x66\x87\x75\xc0\x6e\x5c\x63\x32\xb0\xcf\x44\x28\x0b\xa1\x0a\x08\ +\x65\x61\xd7\x2c\xbe\x76\xbd\x47\xbd\x96\x9f\x97\x58\xb4\x68\x11\ +\xed\xed\xd9\xd9\xe0\x07\x1e\xf8\x0d\xfd\xfd\xfb\x0f\xa3\xd4\x0e\ +\x73\x35\x30\x0d\x82\xe4\x5e\x00\xed\xb9\x11\x3c\x37\x34\x10\x2c\ +\xfb\xfd\x1e\x84\x48\x7b\xdf\x49\x67\xcf\x75\x5d\x1a\x8d\x46\x24\ +\xfc\x72\xf7\x10\xef\x7e\xef\x6c\x66\xcc\x98\x0e\x58\x81\xb0\xad\ +\x0c\x01\x87\xbb\x11\x3d\x17\xc1\xb9\xe6\xa3\x7e\xdc\x02\xe5\x83\ +\xc7\x2a\x94\xb8\xf4\x8a\x69\x8c\x9b\xd2\x47\xb5\x5a\xc5\xb6\x6d\ +\x1c\xc7\xc1\xf3\xbc\x58\x28\x2a\x84\x00\x25\x78\xf4\x77\x32\x02\ +\xbb\x41\x81\x1f\x7c\xcb\x65\xe5\xe3\xf9\x8e\xdb\xec\xd9\xb3\x73\ +\x6b\xfc\x5b\x36\x6f\xe4\x99\x55\x4f\x1e\xd6\x54\xf0\x11\x60\x00\ +\x2b\x4a\x0b\x67\x09\xbf\x29\xec\xe6\x71\x43\x3b\xbe\x65\x53\x85\ +\x17\x37\x57\x73\x43\x30\x9d\xfa\x43\x00\xd4\x6a\x35\x3c\xf6\x72\ +\xc9\x1f\x4e\xa2\xb3\xbb\x0b\x15\x68\x6e\x53\xe8\x85\x14\xf0\xb2\ +\xd8\x27\xff\x78\x13\x04\x60\x61\x5a\x45\xde\x76\xc5\x4c\x4a\xed\ +\x03\xd4\x6a\xb5\x88\x09\xc2\x70\x53\x67\x81\x9d\x2f\x79\x0c\x1d\ +\x30\x31\x28\xb2\xf6\x69\xc1\xcf\x7e\x98\x3f\x35\x72\x67\x67\x27\ +\x67\x9e\x79\x66\xe6\x39\xc7\x71\xf8\xe5\x2f\x5f\xb9\xd7\xff\xaa\ +\xd4\x02\xf2\x7d\x80\xd6\x11\x80\x21\xe0\x81\xdf\x6e\xcb\x8d\xbd\ +\x43\xe1\xeb\x0e\x5f\xa3\xd1\xa0\x6e\x57\x78\xe3\xa5\xdd\xcc\x9c\ +\x35\x63\xd8\x7c\x7b\xf2\x7b\xc5\x33\x92\x2a\xd5\x76\xf6\xfb\xbb\ +\xb7\x70\xea\x59\xc7\x31\x79\x4a\x8f\x16\xd1\x0a\xba\xbb\x8f\xe7\ +\xaa\x3f\x6f\xe7\xdf\xfe\x65\x4b\x14\x1e\x0a\x21\x52\xfe\x80\xe7\ +\x0a\x36\xac\x6e\xb0\xf8\xc2\x4e\x56\x3c\xbe\x8d\x75\x6b\x57\xa5\ +\xee\x5d\x5b\x7b\x17\x42\x08\x16\x2e\xbc\x22\xfa\xfb\xe4\xb6\x77\ +\x6f\x1f\xe7\x9e\x7b\x91\x1f\xff\xf7\x6d\xc7\xae\xd7\x63\xb5\x0f\ +\x79\x90\xa3\x98\x5d\xd7\xbd\xf9\xe3\x9f\x78\x62\x00\xb0\x0b\x85\ +\xc2\xd2\xc3\x3c\x36\xd0\xcc\x10\xb7\x8a\xa5\x7c\x69\x11\xfb\x57\ +\x06\x6d\xb6\x6e\x1e\xa0\x54\x2a\x67\xc6\xdc\x3a\xfd\x7b\x9e\x47\ +\xa3\xd1\xc0\xb6\x6b\xcc\x98\x5b\xe7\xc2\x8b\x2e\x48\xe5\xd7\xe3\ +\x23\x79\xb2\xc6\x14\xd0\xe2\x3b\xc1\x53\x0f\xef\xe0\xa1\xdf\xef\ +\x65\xc3\xba\xfd\xbc\xff\x2f\x17\x52\x2a\x59\xfe\xa7\x2a\xbf\x8d\ +\xac\xfb\xb8\x02\x17\x5e\xd2\xcd\x03\xf7\x56\xa2\xef\x98\xf4\x59\ +\x4c\xd3\x64\xf5\xf2\x0a\x67\x5f\x38\x0e\x25\x05\xae\xeb\xa4\xee\ +\xdc\xd0\xe0\xbe\x40\x90\xf9\xd3\x19\x4e\x99\x32\x8d\x29\x53\xa6\ +\xbd\x72\x8d\xb7\xac\x77\x6b\x2f\x3f\x7a\x84\x7c\x00\x2b\x4a\x0c\ +\x35\x29\xd4\xd4\x8e\x99\x18\xb1\xf3\xfe\xe3\xea\x95\x7d\x78\x1e\ +\xb9\xda\x1f\xa2\x3d\xd4\x7c\xdb\xb6\x51\x62\x90\x2b\xdf\x73\x71\ +\xcc\x71\x23\xa0\x6e\x22\x9f\x43\xa7\xf4\xa6\x3d\x6e\xfa\x21\x85\ +\xd8\xa3\xa0\xc0\x13\x0f\x6d\xe3\x57\xff\xb9\x05\xd3\xb4\xd8\xb3\ +\x53\x70\xcf\x7f\xad\x07\xd5\x34\x09\x4a\xf9\xd7\x3b\xe3\xac\x19\ +\xf4\x8c\xf7\x4d\x41\xe8\x0b\x84\x0c\x10\x82\xb8\x32\x28\x59\xff\ +\x6c\x25\x83\x21\x8f\xfe\x66\x1c\x4e\x06\x20\xd7\xf1\xb3\x22\x67\ +\x4f\xb7\xa9\xba\x8d\x35\x84\xc9\xd3\xcb\xb7\xa7\x32\x6e\x21\xb5\ +\xea\xf4\xef\xba\x2e\xb6\x6d\x53\xab\x55\x59\x7c\xde\x14\x3a\x3a\ +\x3a\x23\x07\xaf\x99\x91\xd4\x1d\xce\x42\xce\x5e\xc4\xd0\x00\x61\ +\x04\xaf\x77\xbe\x58\xe1\xd7\xff\xbd\x15\xd3\x2c\x44\x89\x9f\x55\ +\x4f\x0d\xb2\xf2\xa9\x97\x02\x80\x35\xfd\x8b\x62\xb1\xcc\xc5\x6f\ +\x9e\x47\xa5\x3a\x80\x6d\xdb\x91\x2f\x10\xb2\x41\xf8\x5b\xd6\x3d\ +\x33\x98\x60\xc8\x51\x07\x00\xcd\x63\xd6\x3c\xee\xb8\xc0\xad\x0c\ +\x96\xf0\x05\x34\x70\xa0\xc1\xe6\xe7\xd3\x73\x2d\xe9\x19\xbe\x30\ +\xce\xb7\x6d\x9b\x7a\xbd\x8e\xa4\x9f\x0b\xde\xb8\x20\x26\x7c\xb4\ +\x6b\x11\x73\x46\x75\xf6\xb1\x32\x9c\x50\x1f\x8c\x3b\x5e\xec\xe7\ +\xd6\x7f\x7e\x02\x21\x0a\x14\x8b\x45\x0a\x85\x02\x85\x42\x81\x62\ +\xa1\x8d\x3b\x6f\xdf\x4c\xdf\x8e\x5a\xc4\x22\x04\x2c\x30\xef\xe4\ +\x59\x4c\x9d\x56\xa6\x5a\xad\xe2\x38\x4e\xd4\x8f\xa0\x03\xe0\xf9\ +\x0d\x07\xf0\x5c\x31\x7a\x01\xb0\x4f\x6e\x8e\x34\xcb\x08\xc2\x3b\ +\x23\xd3\xbb\xb6\x32\xbd\xec\x17\x36\xed\xc5\x71\xbc\x98\xa6\xeb\ +\x19\xbe\x30\xd6\xf7\x35\xbf\x46\xa5\x52\xe1\xec\xf3\xe6\xd0\xd9\ +\xd9\x13\xf7\xd4\x73\x01\x57\xd0\xc2\xce\xf8\xf7\x0c\x9f\xd7\xab\ +\x1e\xb7\xff\x78\x15\xae\x6b\xc6\x84\x1f\xb2\x80\xc0\xe4\xfb\xdf\ +\x79\x22\x10\x64\x3c\x32\x78\xfd\xf9\x53\xa9\x56\x2b\xd4\xeb\xf5\ +\x98\x19\x08\x41\xe0\x34\x04\xfd\xfb\x9d\xd1\x0b\x80\x2a\xfb\x33\ +\x6f\xb8\xc8\x11\x44\xec\xb9\xb0\x58\xbf\x76\x67\xaa\x6c\x1b\x7a\ +\xfa\x8e\xe3\xc4\x92\x3d\x7e\xe8\x55\xe7\xbc\x0b\xce\x48\xc4\xf5\ +\x96\x16\xbf\x9b\x99\x3e\x09\x09\x36\x08\x5f\xd7\x6b\x1e\xb7\x7c\ +\x63\x29\xbb\x76\x54\x22\xe1\xeb\xf9\xfe\x50\x98\xfb\xf7\xd6\xf8\ +\xfe\x77\x1e\x42\x7a\x22\xba\x16\xca\x64\xfe\x29\xaf\xa3\x50\xf4\ +\xa2\xb0\x30\x04\x81\xce\x02\x9b\x37\xed\x1f\x71\x00\x38\x42\x33\ +\x84\x24\x3b\x7f\x44\x6e\x18\x08\x02\xa4\x62\xdd\x73\xdb\x33\xab\ +\x7a\xe1\xb1\xd0\xee\x87\x00\xe8\xe8\x76\x99\x38\x71\x62\xce\x1c\ +\x43\xf9\x29\xde\x64\x08\x1a\x5c\x80\x5f\xde\xf1\x38\xdb\x5e\x1a\ +\xa0\x5c\x2e\xc7\x84\x9f\x55\x5e\x5e\xf1\xe4\x56\x66\xce\x59\xcb\ +\x5b\x2e\x5b\xa8\x55\xee\x0a\x9c\x7a\xc6\x64\x96\x3f\xde\x47\x5b\ +\x5b\x1b\xa6\xe9\xb3\x48\x98\x20\x12\x42\xb0\x77\xf7\x20\xc5\xa2\ +\x49\xa3\x71\x54\x27\x0c\xdb\x05\xec\x3f\x02\x00\x20\xc7\xcb\x55\ +\x31\xf1\x8b\x8c\xf8\xdb\x71\x1a\x3c\xbf\x69\x07\x3d\x3d\x3d\xb1\ +\x30\xcf\x30\x8c\xe8\x75\xd2\x04\x9c\x76\xe6\xd4\x40\x7b\xb3\x07\ +\x9a\x66\x7f\xbf\x44\x1f\x42\xf0\xea\xb6\x7f\xbf\x9f\x07\xef\x5f\ +\x47\x67\x67\x27\xc5\x62\x31\x56\xe4\x09\x85\x1e\xd6\x1a\xc2\xfd\ +\xe1\x65\xab\x79\xeb\x65\xe7\x68\xd7\x13\x9c\xb9\x70\x0e\x0f\xdc\ +\xb7\x91\x72\xb9\x1c\xeb\xd9\x0f\xc1\x7c\xd6\xa2\xf1\x7c\xe3\x3b\ +\x7f\xc2\x86\xf5\x7b\x59\xb3\xba\x8f\x07\x97\x6e\x61\xeb\x96\x03\ +\xac\x7f\x6e\x2f\x95\xa1\xdc\xda\x40\x43\x4a\x29\x5d\xd7\x89\x3a\ +\x45\x0f\x1c\xd8\xc7\xfe\xfd\x7b\x53\x6f\x3c\xf9\xe4\x83\x1a\x23\ +\xf8\x96\x9b\x6f\x5a\xb8\xfa\x08\x31\x80\x99\xa9\x6d\xc9\x77\x25\ +\x01\x50\xad\x54\x86\xa9\xe7\xcb\x98\x09\xa8\xdb\x35\xce\x5a\x74\ +\x9a\x1f\x8e\xc5\x66\xfe\x82\xf4\xf8\x42\x72\x92\x3e\xfe\xeb\xe5\ +\x4f\x3c\xc7\xd2\xfb\x9e\xa5\xbd\xbd\x1c\xd9\xfb\x30\xf2\xc8\x03\ +\x5f\x7b\x87\xe0\x63\x9f\xf8\x93\x00\x80\x4d\xb2\x99\x30\x69\x02\ +\xae\x57\xa3\x5a\xad\x52\x2a\x95\xa2\x50\x36\x64\x81\x03\xfb\x87\ +\x68\x2f\x59\x5c\xf4\x07\xf3\x78\xe3\x1f\xcc\xe5\x23\x7f\x73\x3e\ +\x0a\x89\xe7\x29\x9e\x7c\x6c\x1b\xdb\x8b\x6b\xd8\xda\xf3\x4f\x28\ +\xa7\x6d\x5d\xe5\x47\xdf\xfc\x60\xf0\xc9\xdb\xbf\xfa\x0f\x9f\x39\ +\x07\x7f\xd6\xf6\xfc\xea\xe1\x8c\x59\x07\x0b\x80\xda\x11\x31\x01\ +\x7d\x72\x2d\x0e\x35\x8a\x74\xb5\x04\x41\x16\x00\xd6\x3f\xb7\x2d\ +\x26\xec\x50\xf8\xa1\x23\xd5\x4c\xfa\xd8\xd8\xb6\x0d\xa2\xce\x89\ +\x27\xcd\x8d\x18\xa0\x39\x7c\x3c\xb9\x18\x85\x4a\x71\x8f\x5e\x81\ +\x7c\xe2\xb1\xd5\xfc\xf3\x37\xee\xa0\x5c\xee\x88\xd5\xf8\x75\xda\ +\x0f\x7d\x90\x10\x7c\x52\x36\xf8\xe8\xdf\xbc\x87\xe3\x8e\x1f\x9f\ +\xba\x07\xc7\xf5\x8c\x67\xdc\xb8\x32\x43\x83\x55\xda\xdb\xdb\x23\ +\xdb\x1f\x16\xad\x6c\xdb\xc1\x69\x88\xc0\xf7\x69\x02\xd6\x32\xe1\ +\xbc\x37\xcc\xe1\x29\xf7\x21\xb6\xb9\xab\x00\x86\x6e\xbe\x69\xe1\ +\xc3\xcd\x4f\xbe\xfc\x9c\x11\xef\x03\x28\x24\x28\x13\x21\xac\x0c\ +\x00\x88\x5c\x73\x20\x84\x60\xa0\xbf\x9a\xaa\xeb\xeb\x39\x6f\x3d\ +\xed\x6b\xdb\x36\xe3\xc7\x8d\xa7\xb3\xf3\xb8\x66\x66\x36\x63\x3e\ +\x81\x34\x00\x45\x0c\x8c\xbb\x77\xed\xe5\x96\x7f\xf9\x4f\x2c\xab\ +\x40\xa9\x54\x8a\xec\x7e\x98\x73\xd0\xb3\x8d\xf5\x7a\x9d\x4a\xa5\ +\xc2\xc0\xe0\x01\xfe\xf8\xcf\xde\xc4\x69\xa7\x9d\x92\x82\x5a\xf8\ +\xe9\x73\xe7\xbd\x8e\x47\x1e\xda\x10\x99\x01\xcb\xb2\xa2\xdf\x23\ +\xa5\x7f\x8f\x0c\x0a\x31\xb6\x6a\x3e\x7f\xf5\xf3\x04\x87\xd5\x07\ +\x70\xb0\x69\x6b\xf1\x91\x22\xe3\x86\x81\x60\xfd\xfa\xad\x29\xe1\ +\x87\x00\xd0\xb5\x30\xcc\x01\x14\x4a\xc5\x8c\x71\x88\xba\x35\xa6\ +\x65\xba\x77\xe7\x8e\xdd\x5c\xff\xf7\xdf\xc4\xae\xbb\x74\x77\x97\ +\x53\xda\x1f\xda\x7d\xc7\x71\x22\xe1\xf7\xf7\xf7\x73\xe1\x45\xa7\ +\xf3\xf6\x77\x5c\x9e\x99\x56\xf6\x5f\x0a\x26\x4c\x18\x47\xb5\x5a\ +\xa5\x5e\xaf\x53\x2c\x16\x63\xd1\x8c\xe7\x79\xac\x5c\xb1\x91\xcb\ +\xa7\x9e\x40\x72\x6e\x24\x3f\x92\xda\x77\x6c\x03\x60\x87\x7c\x86\ +\x6e\xf3\x75\x19\x1e\xb8\xc8\x1c\x09\x14\x9e\x51\x92\x98\xe0\xc3\ +\x3d\x8b\x86\x1b\x8d\x06\x53\x26\x9f\x80\xa0\xa0\x4d\xdb\xa6\x7f\ +\x66\x9e\xe7\xef\xff\xeb\x3a\x0e\xdf\xfc\xa7\x1f\x71\xe0\x40\x85\ +\xae\xae\xae\x58\x43\x47\xd2\x07\x09\x6d\xfe\xc0\xc0\x00\x27\x9e\ +\x3c\x95\x0f\x7d\xf8\x7d\x41\x5a\x39\xbd\xee\x51\xf8\x7b\x4e\x98\ +\x76\x02\xf5\x7a\x1d\xdb\xb6\x69\x34\x1a\xb1\xf4\xb5\xeb\xba\x3e\ +\x4b\x06\x8d\x33\x49\x20\x0d\xaa\xbe\x63\x1b\x00\xf1\x11\xc2\xad\ +\x18\x20\x3e\xce\xdf\xf3\xd2\x5e\x76\x98\x4b\x0f\x35\x51\x67\x80\ +\xae\x20\xf9\x43\x0b\xc1\xab\x0c\xd8\x39\x8e\xc3\x17\x3e\xfb\x0d\ +\x56\x3d\xbd\x9e\xee\xee\xee\x18\xed\x87\x40\x8b\xfe\x5e\x29\x6c\ +\xdb\xa6\x52\xa9\x60\x59\x8a\xbf\xfd\xf8\x47\x69\x6f\xeb\x8c\xfa\ +\x09\x45\x66\xd5\x53\xa0\x3c\x23\x62\x80\xb6\xb6\xb6\x08\x00\x8d\ +\x46\x23\xc8\x12\x0a\x04\xc5\x14\xfd\x47\x66\xf4\x58\x06\xc0\x56\ +\xf9\x30\xf3\xcd\x77\x1d\x94\x09\xd0\x8f\x4a\x99\x0d\x00\x3d\x04\ +\xd3\x41\xe0\xa7\x07\x0a\x5a\x08\x48\xcb\x78\x3f\x84\xc2\xed\x3f\ +\xbd\x83\x47\x1f\x59\x49\x4f\x4f\x4f\x4a\xf8\x49\xbf\x23\x14\x5a\ +\xa5\x32\xc4\xf5\x9f\xfb\x18\xe3\xc7\x4d\x4a\xf9\x1b\x59\x1c\x57\ +\x2c\x96\xa3\x7c\x85\x1d\x2c\x8b\xac\x94\x8a\x00\xb0\x73\xfb\x6e\ +\xad\x7d\x9e\x18\x83\x39\x2a\x77\x7e\xc7\x87\x80\xaf\xe0\x4f\x0b\ +\x77\x1a\xd0\x33\x22\x01\x50\x51\x7b\x82\x8c\x9c\x38\x08\xc1\x37\ +\xe3\xf0\x90\x01\x1c\xc7\x89\x1e\xc3\x2c\x9a\x1e\x83\x87\xe7\xa5\ +\x24\x98\x96\xbe\xf5\xe7\xeb\xc2\xf9\xf7\x9f\xdc\xce\x2d\xff\xfa\ +\x43\x3a\x3b\x3b\x33\x43\x3d\x99\xe8\xcd\x0e\x69\x5b\x29\xf8\xf1\ +\x8f\x7e\xce\x57\x6e\x5a\x10\x38\x88\x32\xf7\xba\x02\x98\x31\x7d\ +\x66\x64\xaa\x1a\x8d\x46\x74\x8d\xd0\x84\x6d\xdc\xb8\x39\x00\x6f\ +\x9a\x41\x76\xca\x15\x39\xbf\xe0\xee\x6d\x40\x6f\x10\x11\x4c\x00\ +\xce\xa2\x39\x4f\xe0\xb9\x41\x85\x2a\xdf\x3f\x87\xb0\x0b\xe5\x45\ +\xa0\x72\xc4\x00\xb0\x53\xad\x40\xe2\x60\xd1\x3e\x4c\xd5\x30\xfe\ +\x4c\x7a\x4d\x0d\x71\x1c\x27\x12\x4e\x38\xea\x37\x8c\x00\x42\x10\ +\x48\x29\xe2\x31\x78\x8b\xeb\x08\x60\xe5\xca\xa7\xb9\xe5\xdb\xff\ +\x16\x6b\xe9\x4e\xc6\xf9\x59\x45\xa8\xd0\x24\x3c\xf6\xe8\x0a\xbe\ +\xfa\x0f\xff\xc4\x27\x3f\xf9\x09\x84\x30\x5b\x5e\x71\xfd\xfa\x17\ +\xa2\xdf\x62\xdb\x76\xc4\x64\x61\x08\x3b\x7f\xfe\x29\x18\x81\x09\ +\xd0\x81\x34\xa8\xb6\xe1\x71\x30\xcb\x1b\xde\xbd\x07\xb8\x37\xd8\ +\x81\xcb\xa7\x03\x6f\x28\x97\x3b\x2f\x06\x06\x68\x8e\x3f\xbb\x0f\ +\x7f\xc5\xf6\xea\xcd\x37\x2d\x7c\xf2\x55\x61\x80\xaa\xda\xc3\x26\ +\xef\x77\xcc\x37\xdf\x79\x90\xe5\xe3\x90\x01\x64\xcc\xc9\xd3\x87\ +\x62\x25\x4d\x80\xeb\xba\x48\x8f\x18\x8d\xe6\x05\x7e\x00\x2b\x96\ +\xaf\xe0\xaf\xff\xfa\x6f\x91\x52\xd1\xd9\xd9\x79\x50\xc2\x0f\x69\ +\xdb\xf3\xfc\x99\x46\x8a\xc5\x22\x3f\xbb\xfd\x4e\x16\x9c\x71\x16\ +\x97\x5f\x7e\x59\xcb\x5f\xa4\xa4\x19\x01\xd6\x71\x9c\xe8\x5a\x21\ +\x00\x4a\x1d\x2e\xdb\xe4\xbd\xd4\xe9\xc7\x55\x8a\x7e\x5e\x64\x8f\ +\x5c\xc7\x6e\xb5\x0e\xc9\xa1\x14\x8b\xee\x7e\x09\xb8\x6d\xfd\xba\ +\xbb\x6f\xbb\xf9\xa6\xaf\x1e\x5d\x13\x00\xf0\xdf\xce\x07\x78\xd4\ +\xfd\x47\xda\x44\x0f\xdd\x62\x2a\x02\x41\xa7\x98\x82\x89\x89\x89\ +\xc0\x10\x7e\x19\x66\x92\x58\x8c\x25\x2c\x0c\x24\x15\x6f\x53\x24\ +\x7c\xdb\xb6\x23\x00\x84\x4e\x60\xd2\x04\xec\xd8\xf7\x02\x7b\xd5\ +\xc3\x99\xeb\x83\xe8\x2d\x66\x8d\x01\xb8\xf6\xda\x2f\x51\xad\xd6\ +\x22\xe1\xeb\xc2\xd5\x41\x16\x26\x9d\xf4\x76\xeb\xf0\x3d\xa6\x69\ +\x52\x28\x14\xf8\xdc\xe7\x6e\xa0\xf3\xc4\x15\x14\x66\xaf\xa4\xa6\ +\xf6\x45\x83\xc0\x8d\xa0\xfc\x54\x14\x26\x8f\xed\xdf\x13\x63\xad\ +\x90\x4d\x42\x00\xac\x71\xbe\x4a\xc9\xab\x50\x55\x1e\x75\xe5\xd1\ +\xc0\x9f\x5c\x5a\xc6\xc6\x2c\x1c\xa3\x4e\x60\x94\x64\x51\xcf\x62\ +\x28\xc1\x76\x08\x04\x6e\x44\x75\x37\x4b\xf8\x2d\x18\x1b\x84\xdf\ +\x7e\x51\x12\x06\xd3\x2e\x00\xe7\x8e\x49\x91\x96\x87\x79\xf4\x50\ +\x60\x61\x1c\x1d\x3a\x85\x0f\x3c\xfc\x4b\xde\xe8\xfc\x1c\xcf\xf0\ +\x27\x5d\xf6\xb4\x5b\x17\x0a\xc3\x39\xa0\xf8\xe7\xf7\x5b\xf4\x6d\ +\x3b\x2e\xb2\xfb\x61\x6a\x36\x04\x40\x72\x34\x71\x08\x82\xe4\xac\ +\x20\x96\x65\xd1\xd6\xd6\x46\x7f\x7f\x3f\xd7\xbc\xef\x7b\x5c\x7b\ +\x7b\x83\xee\x29\xe0\x2a\x19\x85\x72\x05\x61\xe0\x62\xb2\x66\x65\ +\x0d\x21\xa6\xc7\xc2\x4a\x7d\xdc\x82\xd5\xe6\x65\xce\x5a\x7c\xcc\ +\x97\x83\xd3\x9e\x87\x1a\x76\xf1\xb7\xf0\x5c\xcf\x04\x19\x4b\x96\ +\xe8\x99\xb3\x70\xd7\x47\xdd\x6c\xdb\xea\x52\xe9\xf7\x35\x2f\x14\ +\xb8\xde\xe0\x5d\x54\x8a\xff\xbe\xc9\x60\xfb\xfa\x4e\x4a\xa5\x52\ +\xa6\xdd\x0f\x7b\x0c\xea\xf5\x3a\xf5\x7a\x9d\x6a\xb5\x4a\xad\x56\ +\x8b\xe2\xf7\x10\x70\x21\x10\x8b\xc5\x22\xe5\x72\x19\x59\x3d\x9e\ +\x1f\x7e\xba\x80\xac\x0b\x0a\xc2\xa4\x20\x8c\x60\x37\x29\x08\x78\ +\xe9\x05\x99\x79\xad\x70\x9f\xbd\xc8\x4b\x8c\x51\x3a\xba\x10\x30\ +\x8e\xf4\x05\x54\xc6\x0c\xa0\x49\x60\x4c\x9f\xaf\x22\xe1\x87\x9a\ +\x92\x04\x42\x28\x7c\xc3\x30\x28\x28\x93\x17\x56\x7a\x7e\x45\x5f\ +\x08\x0d\x04\x7e\x32\xf5\xb6\xcf\x4a\x1e\xfa\x45\xb3\xac\x9b\x4c\ +\xf1\x46\xdd\xc4\x41\x69\x79\x68\x68\x88\xc1\xc1\x41\x86\x86\x86\ +\xa8\x54\xfc\xa6\x8e\x66\xdc\x2e\x23\x16\x28\x16\x8b\xb4\xb7\xb7\ +\xb3\x79\x79\x17\xff\xf5\x35\x41\x49\x18\x14\x85\x49\x51\x98\x58\ +\x42\x20\x1d\xc5\xee\x4d\xc5\x54\x78\xa9\xfb\x30\x52\xa9\x96\xab\ +\x1c\x8c\x3a\x00\x90\xa0\xbb\xac\xe9\x13\x8d\x22\x4c\x99\xed\xc4\ +\xf2\x00\x49\x16\x08\xe9\x58\x08\x81\x29\x4a\x6c\x5f\x67\x60\x08\ +\x03\x03\x81\x21\xfc\x1f\x62\x01\x6b\x7e\x29\xf9\xdd\x8f\xda\x52\ +\xdd\xc4\xc9\xce\x22\x5d\xf8\x07\x0e\x1c\x60\xa8\xb6\x9b\xfd\xfb\ +\xf7\x33\x38\x38\x18\x03\x81\x6e\x2a\x0a\x85\x02\x6d\x6d\x6d\x94\ +\xcb\x65\x1e\xfc\x49\x27\xcb\x7e\x6a\x04\x20\xf0\xcd\xd9\xf3\x6b\ +\x1a\x1c\xd8\xde\x16\xbb\x6e\x6c\xa0\xea\x24\x87\xf1\x33\x83\xa1\ +\xea\x39\xf3\xa6\x8d\x3e\x00\xa8\x61\x96\x82\x50\x20\x0d\x41\xb9\ +\xc7\x8d\x99\x81\x24\x0b\xe8\x13\x42\x98\xa6\xc9\x53\xbf\x36\x62\ +\x5d\x7e\x86\x10\x58\x06\xac\x79\x48\xcb\x0d\x26\xda\xc8\x43\x4d\ +\x0c\x85\x5f\xa9\x54\x18\x1c\x1c\xc4\xea\xea\xe3\x53\x3f\xd8\x8d\ +\x28\xef\xa0\xbf\xbf\x9f\x4a\xa5\x92\x1a\xf5\x13\xb2\x4f\xe8\x0f\ +\x94\xdb\x3b\xf8\x8f\x1b\x2d\xd6\x3d\xea\x51\x0c\x9a\xcb\xd6\x3c\ +\xea\x50\x30\xdb\x52\xa9\xe5\x50\xfb\x27\xcc\x6a\xf8\xfd\x2f\x09\ +\x45\x18\x35\x0c\x90\x1e\x76\xa9\x52\x93\xc6\x47\x0b\xae\xa8\xe6\ +\x68\x79\x47\x19\x9c\x71\x81\x13\xdd\xec\x24\x13\x84\x37\x52\xef\ +\xb1\xdb\xb1\xce\x62\xf3\x73\x0e\x66\xc8\x02\x08\xa4\x12\xfc\xf9\ +\x57\x4c\x2e\xba\xca\x49\x65\x16\xf5\x9a\x7e\x68\xf3\x2b\x95\x0a\ +\x9e\xb9\x97\x6b\x6f\xf5\x98\x3a\xa7\xc8\x27\xbf\xe7\x50\x73\x7d\ +\x16\x08\x7d\x82\x7a\xbd\x1e\x1b\xff\x17\x46\x04\x6d\x6d\x6d\x58\ +\xa2\x93\x6f\x5e\x63\x31\xb8\x4b\x60\x09\xc9\x63\xbf\xb4\x28\x16\ +\x9a\x26\x40\xaf\x01\x34\x1a\x0d\x66\xbf\xde\x6d\xce\x12\xa0\xb2\ +\x4b\xd7\xa3\xc8\x09\xcc\x86\x47\x72\x97\x80\xa7\x60\xda\x49\x5e\ +\x2c\xd4\xcb\x2b\x0c\x45\xa3\x6f\x64\x81\x65\xbf\xf0\x7c\xfb\x2f\ +\x7c\x00\x08\x04\x2e\x82\xff\x71\x33\x9c\xff\xf6\x46\x2c\xb7\xa0\ +\x0b\x3f\x72\xfa\xec\x01\xae\xfe\x92\xc3\xb8\xd7\x41\x03\xc9\x09\ +\xf3\x4a\xfc\xd5\xd7\x6b\xd4\x9d\x01\x2a\x95\x4a\x4b\xa7\xb0\x50\ +\x28\xd0\xde\xde\x8e\x5b\xed\xe4\x86\xf7\xbb\xac\x7a\xb2\xc6\xb6\ +\xb5\x65\x8a\xc5\x62\xc4\x00\x7a\x27\xb3\xe3\x38\x4c\x9e\xe7\x44\ +\x53\x48\x46\x2c\xa0\xd4\x68\x33\x01\xaa\xb5\xe0\x95\x8a\x2d\xd1\ +\x10\xce\x9d\x31\x7b\xa1\xc2\xb0\xdc\x94\xe6\x26\x9d\xc0\x90\x05\ +\x0a\x56\x91\x65\xb7\x99\xe0\x05\x2d\xa0\x01\x13\x08\x04\xca\x34\ +\x78\xcf\x67\x60\xf2\xec\x5a\x14\x7f\xeb\x00\xa8\xd5\x6a\x54\x6b\ +\x43\xbc\xfd\xe3\x35\x16\xbe\xd5\xc0\x56\xfe\xca\x5f\x0d\x25\x59\ +\x74\x69\x1b\xef\xbe\xb6\x42\xa5\x32\x14\x8b\x0c\xf4\x01\xa0\xba\ +\x53\x58\x2e\x97\xd9\xbd\xb5\x8b\x9b\x3e\x54\xa2\xdc\xd6\x45\xb1\ +\x58\x8c\x85\x9a\xa1\xf6\x9b\xa5\x06\x27\xbd\x41\xa1\xcf\x19\x72\ +\xf4\x0d\xc0\x11\xf6\x01\xe2\x73\xf1\xeb\xc7\xe2\x93\xa6\x48\xa5\ +\xe8\x98\x24\x38\xe5\x3c\x3b\x93\x05\xf4\x5c\x7d\xc8\x00\x96\x65\ +\xe1\x0d\x75\x70\xcf\xf7\x1b\x51\x38\xe8\x3b\x85\xfe\xd6\x39\x51\ +\xd0\xfb\x1f\x92\xc9\xb3\x6a\x31\xcd\x0f\x4b\xbc\xe7\x5c\x55\xe5\ +\xcd\x1f\x14\xd8\xca\xc3\x56\x2e\x0d\xe5\x05\x40\x50\xbc\xed\xfd\ +\xed\x5c\xf2\xfe\xfe\x88\x05\xc2\x4e\xdf\x2c\x10\x94\x4a\x25\x3a\ +\x3b\x3b\x69\x37\x27\xd2\xd1\xd1\x99\x02\x40\xc8\x42\xf3\x2f\x6c\ +\x60\x96\xfc\xf5\x82\xd2\x93\xc5\x8c\xe2\x30\xb0\xe9\x08\xaa\xf4\ +\xfc\xd8\x8a\x88\x12\x1b\x4a\xf0\x96\xf7\x36\xd3\xbd\xc9\x68\x40\ +\x37\x01\xa1\x1f\x60\x59\x16\x77\x7c\x1d\x06\xf7\x35\x73\x02\x42\ +\xf8\x3c\xa0\x94\xa2\x34\xce\xe4\x53\x3f\x91\x4c\x9e\x55\x8f\x98\ +\xa0\x5e\xaf\x33\xf5\xf4\x2a\x57\x7e\xca\xc0\x13\x12\x27\x58\xc1\ +\xcb\x7f\xf4\x77\x4f\x28\xde\x7b\x5d\x3b\x27\xbe\x61\x20\xea\xf5\ +\x0f\xa3\x02\xdd\x14\x84\x4e\x61\xa9\x54\xa2\x5c\x2e\x47\x7d\x80\ +\xfa\x08\xa6\x10\x00\x67\x5e\xea\x06\xbe\x4f\xd6\xc4\xf1\xa3\x28\ +\x11\x94\xdd\x9c\x9d\x36\x03\x4d\x5b\xe8\x3f\xba\x0a\x4e\x3a\x57\ +\xd1\xde\xed\xc4\x4a\xbf\x49\x10\x24\x59\xc0\xa9\xb4\xf1\xdd\x2f\ +\x54\x31\x82\x7c\x80\x11\xa6\x74\x01\xa9\x14\x6d\x13\x0c\x3e\xf2\ +\x4d\x0f\xc3\xf2\x05\x68\x76\xd6\xf8\xe0\x37\x15\xa5\x1e\x70\x14\ +\x38\x28\x1c\x64\xf0\xe8\x03\xa1\xa1\x3c\x5c\x21\xf8\xf8\xbf\x16\ +\x99\x76\xca\x40\x54\xdf\xcf\x9a\x0b\x40\x07\x63\x56\xfc\xdf\x68\ +\x34\x10\x96\xcd\xa9\x17\x69\xbf\x39\xb4\xfb\xea\x68\x1b\x80\x23\ +\xc6\x00\xf9\xab\x04\xab\x98\xe0\x7d\xfa\x0f\x6f\x8c\xd1\x61\x72\ +\xd1\x95\x76\xae\xf0\x93\x2c\xe0\xdb\xe1\x36\x96\xdf\x59\xe4\xc1\ +\x7b\xea\x18\x22\x3e\xdd\x4c\x38\x23\xcf\xa4\xf9\x06\x7f\xf7\x03\ +\x49\xa1\xc3\xe6\x23\xb7\x28\xc6\xcf\x30\x70\x51\xb8\xc8\x8c\x5d\ +\xe1\x29\x7f\xcd\xe0\x62\xa7\xc9\x75\x3f\x2e\x50\x1e\x3f\x14\x45\ +\x04\x21\x08\x74\xff\x44\xaf\x20\xea\x71\x7f\xa8\xfd\xe7\xbe\xb3\ +\x41\xb1\x43\x65\x4e\x1e\xcf\x68\xf6\x01\x62\x70\x50\x2a\x33\x02\ +\x88\xc0\xa0\x14\xb6\x14\x9c\x77\x85\x97\xcb\x00\xba\x1f\x10\x02\ +\xa0\x50\x28\x50\x34\x3a\xb8\xe5\x63\x2e\x7b\xb6\xc9\x20\x24\xf4\ +\x6b\x10\x7a\xaf\xd0\xcc\x73\x0d\x6e\x78\xc0\xe4\xa4\xf3\x0d\xbc\ +\x60\x06\x5f\x0f\x89\x54\x0a\x4f\xf9\x5a\x19\xda\x67\x4f\xfb\x5e\ +\x6d\x3d\x05\xae\xfd\x1e\x88\xe2\x60\x26\x00\x74\x81\x67\x09\xbf\ +\xde\xa8\x73\xce\x15\x32\x97\xf6\x47\xa5\x13\x98\x9f\xf8\xd1\x9c\ +\x3f\x4d\xf3\x9b\x02\x51\x4c\x5f\x60\x30\x63\x7e\x23\xd3\x17\xc8\ +\x8a\x06\x42\x6f\xdc\xa8\x77\x73\xc3\x9f\xd8\xec\xdb\x21\xa3\x19\ +\x46\x0d\xad\x1b\x59\x02\xdd\x13\x45\x6c\x29\x48\xdf\x07\xd1\x56\ +\xf0\x51\x24\xd6\x0e\xf3\xb7\x13\x17\xb4\x73\xed\xf7\x24\x35\x7b\ +\x28\xe6\x0b\x64\x25\xad\xf4\x63\x8e\xe3\x70\xfa\x1b\x5c\x4e\x39\ +\xdb\x4a\x65\x44\x46\x82\xf6\x1f\x61\x06\x50\x99\x46\x21\x99\x12\ +\xd6\xc1\xe0\x29\x45\x5d\x1a\xbc\xe7\x13\x2e\xae\x1b\x67\x81\xe1\ +\x98\xa0\x54\x2a\xb1\x6f\x6b\x99\x2f\xfc\x71\x8d\xfd\x7d\x32\x62\ +\x01\x43\x9b\x7e\x36\xbf\x2b\x81\xd4\xa2\x54\xc9\x6d\xf1\x05\x5d\ +\x7c\xe0\x0b\x0e\x8d\x46\x2d\x36\x39\x54\x56\x0d\x43\x07\xee\x82\ +\x4b\xbc\x98\x23\x3c\xd2\x36\xe3\x55\x20\xff\x84\x1f\xd0\x9a\x05\ +\x5c\x14\xa7\xbd\xd5\x64\xe1\x9b\x9c\x94\xf6\xeb\x2c\xa0\xd7\x06\ +\x74\x47\x6c\xcf\x0b\xed\x7c\xf6\x4f\x07\x58\xbd\xbc\xe1\x57\x07\ +\xc3\xfc\x40\xe0\x1f\x84\x59\x43\x23\xe8\x4d\x88\xaa\x88\x42\x07\ +\x4c\xf3\x7d\xfa\xac\xc6\x97\xbc\xab\xcc\xb4\x33\x87\x32\x3b\x98\ +\x93\x55\xbf\x30\x74\xfd\xf7\xaf\xd7\xd8\xb5\xdd\xcd\x05\xd6\xa8\ +\x05\x40\xa6\x19\x50\xf1\x88\x20\xb4\xb3\x5e\xa0\xfd\xe1\xa3\x2d\ +\x05\xef\xbd\x5e\xa1\x44\x3c\x22\xc8\xaa\x10\xea\x13\x32\x85\x3e\ +\xc1\x9e\xe7\x3a\xb9\xf1\xcf\x86\xf8\xc5\xad\x95\x20\x53\xe8\x0f\ +\x56\x37\x45\x72\xec\xb0\x81\x29\x4c\x4c\x61\x60\x62\x36\xa7\xb1\ +\x10\xcd\xf1\xc3\x61\x85\x71\xd5\xaa\x2a\x7f\x79\xd5\x5e\x5e\x78\ +\xaa\x2d\xe5\xf0\x65\xd5\x2e\x42\xc7\xb5\xd6\xd7\xc6\x17\xde\x53\ +\xc1\x69\xc4\x39\x47\xbc\x36\x18\x20\x1d\x11\xe8\xf6\x35\x46\xff\ +\x09\x5f\xe0\xf8\x39\x06\x57\x7d\xac\x41\xc3\x69\xc4\xfa\x05\x75\ +\x46\x48\x96\x89\x43\x16\x28\x16\x4b\x30\xd8\xc3\x4f\x3e\x23\xf9\ +\xfc\xfb\xfa\x59\xf7\x84\x83\x3f\x1e\xc7\xc4\x12\x06\x96\x48\x0e\ +\x50\xd7\xa6\x88\x10\xc1\x2c\x02\xc2\xc0\x14\xb0\x6b\x87\xcb\x4d\ +\x5f\xdc\xc3\xb5\x57\x0e\xb2\x7f\x75\x27\x45\xab\x94\xe9\xf1\x27\ +\xa9\x3f\xfc\x6e\x86\x61\xb0\x7b\x7d\x81\x6f\x7d\xa4\x8a\xf4\x54\ +\xee\xf8\x88\xa3\xb5\xbd\x2a\x93\xd6\x28\x6d\x8a\x78\xa5\x40\x89\ +\xe6\x78\x98\x78\x48\x08\x9e\x50\xb8\x4a\x61\x20\xb8\xe2\x1a\xc1\ +\xfd\xb7\x39\xf4\x6d\x8d\x4f\x11\xa3\x8f\xe2\x09\x8f\xeb\xf9\x81\ +\xa6\x89\xe8\xe0\xb9\x7b\x1d\x3e\xfb\xfb\x21\x4e\x7d\x33\xbc\xe3\ +\x23\x65\x4e\x3b\xbb\x48\xb1\x18\x5f\xfe\x39\xa4\x67\x23\xe8\x2f\ +\x30\x11\xac\x7a\xdc\x66\xd9\x6f\x6b\x3c\xfa\x73\x8f\xea\xd6\x36\ +\x0a\x56\x73\xce\x00\x20\xea\x17\xcc\x5b\x9b\x20\xee\xab\x18\x2c\ +\xbf\x53\xf0\xbb\x5b\x1b\x5c\xf8\xe1\x91\x35\x4f\x90\x75\xa4\x75\ +\x5f\xc4\x2a\x02\x5a\x99\x56\xf8\xab\xee\x09\xfc\x30\x4c\x08\x15\ +\xd8\x5c\x3f\x94\x73\x95\xa4\xea\x19\xfc\xc5\x4d\x2e\x5f\xfc\xe3\ +\x46\x2c\xd6\xd6\xa9\x3f\x0b\x04\xa1\x39\x88\x7c\x04\xcf\xe4\xb9\ +\x5f\xbb\x3c\x7b\x9f\x4d\xc7\x84\x0a\xf3\xce\x37\x98\x31\xd7\x62\ +\xe6\x7c\x13\x65\x81\x70\x14\xa2\x6e\xb2\x6f\x9f\xc3\xd6\x75\x1e\ +\x2b\x1f\x73\x19\x7c\xd1\xc0\xa8\x15\x31\x8d\x76\x8a\x05\x33\xd6\ +\x58\xa2\x33\x8f\x5e\x76\xd6\xbf\x47\x92\xa1\x40\xf0\xfb\xef\x4a\ +\x2e\xf8\xb0\x7a\xed\x00\x20\x1f\x0c\xf1\x15\x74\x85\xe6\x0b\x08\ +\x25\x70\x85\x0c\x2c\xb0\x62\xce\x1b\x2c\xde\xff\x79\x97\xff\x7b\ +\x7d\x03\xa5\x14\x96\x65\x45\xd4\x9a\x9c\x3f\x38\x09\x82\xc8\xce\ +\x05\xef\x95\xd2\xc2\xde\xe1\xb1\xfa\xe7\x1e\xab\x24\x28\xc3\x43\ +\x09\x89\x1f\xf8\x7b\x3e\x0f\x08\x0b\xc3\x28\x52\x30\x0c\x0c\xcb\ +\x88\x4c\x4b\xb2\xb9\x44\x17\x7c\x2b\x00\xe8\xe6\xea\xaa\x2f\x5a\ +\x39\x6b\xaa\x8f\x62\x00\xe4\xb2\x40\xb4\xda\xb6\xd0\xe8\x5f\x22\ +\x30\x30\x14\xfe\x1a\x80\xca\xa0\x01\xbc\xe9\x43\x05\x10\x0e\xff\ +\xef\x7a\x95\x32\x03\x59\x20\xd0\xb5\x33\x0b\x08\x4a\x59\x31\xed\ +\x54\xa6\x02\x33\xbe\x88\x54\xde\xe2\x14\xfa\xe8\x21\x7d\x50\x49\ +\xf2\xba\x49\x3f\xe1\xc2\xf7\x1a\x2c\xb8\xcc\xa0\x9e\xbb\x40\xfc\ +\x28\x67\x80\x26\x18\x82\x7f\x15\x20\x54\xc0\x00\x22\xd0\x7e\xdf\ +\x07\xf0\x57\x04\x55\x18\x42\xe1\xfa\x69\x44\xde\xfc\x41\x8b\xad\ +\x6b\x1d\xee\xfd\x51\x53\xbb\xb2\x16\x90\xc8\x5a\x2e\x26\x14\x6a\ +\x08\x82\x56\x6b\x0b\xe9\xef\xd5\x05\xd9\x6a\x71\x0a\x4f\x7a\x4c\ +\x9c\x26\xe9\x7b\x31\xf0\x26\xb4\xcf\xf6\x3c\x8f\xe3\xa7\x49\xde\ +\xfd\xd9\x92\x56\x05\x1c\x19\xa5\xe0\x57\x37\x15\x9c\x91\x11\xd4\ +\x7b\x03\xfc\x5c\x00\x78\xc8\x28\x1f\xe0\xe0\xe1\xe0\xe7\xe5\x6d\ +\xa5\x78\xdf\x97\x2d\xce\xbe\x2c\x3e\x4e\x30\xaf\x7a\xa8\x6b\x65\ +\xde\xd4\xea\xad\x96\x97\x4d\x6a\x78\x32\xcd\xab\x77\x18\xbd\xeb\ +\x2f\x4d\xbe\xff\x74\x17\x27\x9f\x13\xff\x4e\x8e\xe3\x60\x14\x3c\ +\xae\xfe\x6a\x81\xf2\x44\x3f\xca\xf1\xa3\x9e\x64\x54\x34\xca\x01\ +\x40\x0a\x00\xe9\xca\x60\x33\x39\x44\x94\xa7\xf7\x14\xb8\x61\xa5\ +\x4e\x29\xdc\x02\x5c\xf3\xdd\x02\xe7\x2d\xf1\x70\xbd\x34\x08\xb2\ +\x72\xf4\x7a\x6b\x79\x16\x55\xe7\x2d\x2c\x95\x9c\xad\x24\x39\x40\ +\x35\xdc\xaf\xfc\x5f\x16\x57\x7f\xbe\x0d\x5b\xc1\x67\x7f\xda\xcd\ +\xa9\xe7\xca\xd8\x77\x78\xf3\x07\x4d\x4e\x7f\x9b\x19\x8c\x5f\x90\ +\xcd\x15\x05\xd5\xc8\x30\x04\xaf\x6a\x57\x70\x7e\x7e\x40\xc6\x33\ +\x82\x4a\x05\xd5\x3a\x3f\x24\x74\x03\x26\x70\x94\xa2\x61\xc2\x35\ +\xb7\x96\xf8\xf8\xb7\xa1\xd8\xee\xa4\x86\x8d\x65\xed\x79\x60\xd0\ +\x99\x22\x6b\xc9\x99\x64\x6c\xaf\x83\x4c\x09\x87\x0f\xff\x63\x91\ +\x3f\xff\x7c\x3b\xb6\xf0\xa8\x2b\x17\xd1\xa9\xf8\x9b\x5b\xda\xe9\ +\x38\xce\xff\x8c\x49\xb3\x15\xef\xe8\x2d\xfa\xbd\x06\xc1\x6f\x49\ +\x9a\x81\xd7\xa0\x0f\x90\x9c\xd3\x43\x80\x02\x29\xe2\xee\xa2\x08\ +\x9c\x42\x30\x40\x09\x10\x1e\x60\x46\x05\x9b\x45\xef\x2c\xf2\x8f\ +\x0b\x3d\xbe\xf5\xd7\x36\xab\x1f\x69\x3a\x78\x3a\xb5\x1f\xd4\x77\ +\xca\xf1\x19\xf2\x96\x9e\x93\x52\x32\x69\x96\xe0\x53\x3f\xee\x64\ +\xf6\x02\x93\xba\x72\xb5\x26\x57\xe8\x9c\x69\x72\xc3\xdd\x65\xbe\ +\xf0\xf6\x0a\x1f\xba\xa5\x1d\xb3\xc3\x67\x30\x37\x30\x6d\x61\xf2\ +\x6b\xa4\x94\x83\x8f\x5a\x56\x42\xa5\x25\x81\x12\x32\xc8\x02\xf8\ +\x4c\xe0\xe3\xa3\x09\x02\x25\xfc\xb8\x41\x29\xc3\x1f\x51\x34\xcb\ +\xe4\x73\x77\xb6\x73\xdb\x8d\x36\x77\x7c\xcb\xc5\xb1\x5b\x2f\x15\ +\x9f\x95\xb0\x19\xee\x51\xdf\xad\x22\xbc\xf3\x9a\x12\xef\xbe\xb6\ +\x9d\x62\x97\xa2\xae\xbc\x40\xa8\xf1\x7e\x87\x9e\x53\x05\x5f\x59\ +\xd1\x81\xd9\x25\x68\x84\x7d\x07\x2a\xdd\x0f\xf8\x9a\x08\x03\x87\ +\xcb\x07\x84\x03\x3a\xc3\x0e\x1e\x43\x48\xbc\xc8\x32\x05\x8b\x3a\ +\x09\x19\x44\x0e\xbe\xe0\x95\x08\x16\x67\x55\x12\x69\x08\xae\xba\ +\xae\x8d\xcb\x3f\x2c\xf9\xd9\xff\xb6\xf9\xcd\x0f\x5c\xec\x5a\xeb\ +\xf5\x7f\x5b\xad\x28\x9a\xc5\x06\x5d\xe3\x05\x67\x5f\x5e\xe0\xaa\ +\x4f\xb5\x33\x71\x8e\x88\x9c\x52\x37\x34\x5d\x2a\xed\xd0\xa9\x2e\ +\x68\xe0\x05\x35\x0e\x46\xa4\xf6\x1f\x35\x06\xc8\x4a\x0a\x85\x47\ +\xb2\x40\x10\x86\x8c\xd1\x7a\x9b\x4a\x22\x45\xb0\x60\xbb\x32\xf0\ +\x80\xd2\x64\xc1\xd5\xff\xd0\xce\xd5\x37\x28\x7e\x73\xab\xcd\x5d\ +\xdf\x6d\xf0\xd2\x06\xd9\x72\xf1\xe7\x56\xa0\x50\x4a\x31\x7e\xba\ +\xc1\x1f\xfe\xcf\x36\x2e\xff\x48\x3b\xc5\x6e\xdf\x86\xdb\xca\xef\ +\x1c\xd2\x05\xab\x92\x4b\x42\x86\xc9\xa0\x28\xc1\x15\x3c\x2a\x39\ +\xa2\xb4\xff\xa8\x9b\x00\x91\x72\x07\xd3\x20\x68\x36\x90\x6a\x26\ +\x00\x03\x19\x36\x94\x0a\xe5\x8f\x3e\x56\xfe\x9c\x21\x46\x49\xf0\ +\xd6\xbf\x6a\xe3\xb2\x8f\xb6\xb1\xe2\xb7\x0e\x2f\xae\x71\x59\xfd\ +\xb0\xc7\xce\xe7\x5d\xb6\x6d\x94\x5a\x55\x2e\x2e\x74\xc3\x54\xb4\ +\x75\x08\xce\xb8\xa8\xc8\xc2\x4b\x0a\x9c\x71\x71\x91\xc9\x73\x04\ +\x46\x09\xbc\x48\xe3\x7d\x21\xea\x45\x2b\x3d\xac\x23\x63\x91\xf8\ +\x70\xc5\xc0\x50\xf3\xe5\x08\xeb\x0a\x18\x11\x95\x89\xa6\x73\x18\ +\x07\x81\x08\xa9\x3f\x3c\xab\x82\x35\x40\x84\xef\x29\xf8\x0c\x80\ +\xbf\x60\x7b\x50\xc4\x31\x54\xb3\xa8\x73\xda\xa5\x16\x67\x5c\x6a\ +\xb1\xe4\x63\x7e\x3d\x5f\x36\x24\x6b\x1f\xf3\x62\x8e\x68\x90\x67\ +\x62\xd2\x4c\xc1\xc4\x99\x66\xac\x4a\xe9\xa1\x68\x84\x02\x0f\xcb\ +\xd5\x61\xae\x42\x35\x2b\x9a\x2a\x33\xd7\xa1\xf5\x3f\x64\x08\x5f\ +\x8d\x01\x20\x3e\xbd\x5b\x16\x08\x50\xbe\x86\x1b\x18\x78\x08\x8c\ +\x28\x81\x84\xbf\x10\x5c\x60\x06\x3c\x04\x66\x90\x3f\x08\x9b\x3a\ +\x0c\x84\x9f\x52\x0e\xfe\x4e\x00\xa2\x20\x38\xf1\x8d\xa6\xff\xe9\ +\xc1\xba\x2f\x2a\x40\x80\x04\xea\x4a\xc6\xab\x93\x81\xe0\xa5\x96\ +\xa0\xd2\x05\x9f\x35\xc6\x2f\xf6\x6f\x66\x0b\x38\x63\x0c\xf0\x72\ +\x98\xc0\x0f\x11\xc3\xba\xa1\x3f\xf0\x23\x9c\x95\xc3\x50\x60\x04\ +\x55\x44\x19\x09\x5d\x45\x2b\x8f\x1b\x22\xbd\x22\x39\x4a\xab\xc1\ +\xab\xe4\xbc\x05\xa1\x43\xa7\x12\xf6\x3b\x68\x1e\xd5\x04\x2f\x13\ +\xda\xad\x5a\x00\x5c\x8d\x40\xcd\x1f\x91\x26\x80\xac\x1c\x41\xa8\ +\xac\xf8\x26\x41\x05\x82\xd6\x05\x66\x04\x86\x22\x6c\xf1\x0a\x6b\ +\xfb\xcd\x55\xc9\x55\x6a\x96\xf2\xa4\x90\x24\xad\x1b\x57\xe3\x5a\ +\xdf\xb4\xe9\x59\xa9\xee\xf8\xe7\xab\x16\xc9\xb0\x31\x00\x64\x82\ +\x20\x49\xa5\xba\x49\x00\x85\x14\xe1\xa2\x6e\x22\x2a\x25\x0b\xd0\ +\xb4\x3f\x98\x2b\x48\x10\x6b\x08\xcd\xea\xc9\x8b\x0f\xcf\x6a\x32\ +\x80\xde\xb6\x1e\x1b\xcb\x18\x98\x09\x20\xc3\xf6\xab\x83\xcc\x82\ +\x8e\x01\x60\x58\x9f\x40\xbf\xc1\x42\x9f\x89\x13\xbf\x52\xe8\x33\ +\x82\x88\xf5\xfc\x86\xef\xf5\x82\xcf\x10\x2a\x4b\xfb\x85\xf6\x4e\ +\x95\xaa\x4f\xa0\x79\xef\x71\xd3\xd0\x0c\xe0\x0e\x76\x58\xd7\x48\ +\x16\xfc\x88\x04\x40\x6b\x36\x48\xb4\x96\x05\x40\x20\x02\x42\x38\ +\xf9\xaa\xc8\xa1\x7d\x91\xfa\x34\x32\x8e\xc4\x67\x30\x51\x51\x23\ +\x2b\xa4\x47\x3a\x1d\x2b\x42\x3e\xe6\x00\x90\xc7\x06\xfa\xad\xd7\ +\xe9\x5c\x29\x15\x09\x1d\x81\xee\xf2\xa1\xaf\x56\xde\x4a\x43\x63\ +\x03\x37\x14\xa9\x84\x8d\x22\x6b\xe2\x8b\x57\x2f\x53\xfe\x9a\x03\ +\xc0\x21\x01\x41\xfb\x47\xe8\x8b\x45\x08\x91\xa6\x95\x30\xd3\xac\ +\x25\x05\x92\x9f\xad\x72\xae\x79\x04\x36\x0f\x78\x16\xf8\x2d\xb0\ +\x14\x78\x70\x0c\x00\x07\x09\x84\xe6\x94\xf1\xd9\xc3\x2e\x62\xa3\ +\x70\x73\x62\x35\x95\x69\x6e\x38\x08\xf7\xee\x90\xb7\x01\xe0\x29\ +\x60\x75\x20\xf0\x65\xbd\x65\x7b\xd7\x98\x09\x38\x04\x20\x90\x48\ +\xc3\x8a\xc4\xe4\xf1\xf1\x24\x13\xa9\x15\x45\x86\xe3\xdd\xc3\x24\ +\x7a\x17\x7f\xc6\xef\xdf\x05\x02\x5f\xd1\x5b\xb6\x07\xc7\x7c\x80\ +\xc3\x68\x24\x45\x4a\x60\x22\x53\xa3\xd5\x41\x7d\xf6\x2b\x16\xfa\ +\x36\xe0\xf1\x40\xd8\xab\x03\x0d\xb7\x8f\x25\x27\x30\x28\xc2\x1f\ +\xcb\x80\x68\x25\x44\x71\x38\x05\xae\x80\x21\xfc\xd9\xb9\x7f\x07\ +\xdc\x0f\x6c\xec\x2d\xdb\xb5\x63\x39\x0a\xf8\x0e\xf0\xd1\x63\x39\ +\xbc\x51\x47\xd6\xc9\x5e\x17\x50\xfa\x52\x60\x4d\x6f\xd9\x7e\x72\ +\xb4\x85\x81\x37\x03\x57\x03\x65\xc6\x36\x17\xd8\x11\x68\x77\x68\ +\xc3\x77\xf6\x96\x6d\x67\x34\xfc\xb8\x6c\x00\xdc\xc5\x66\x96\xf0\ +\x75\xe0\x33\xaf\x51\xa1\x3f\x15\x08\x7a\x29\xf0\x5c\x6f\xd9\x5e\ +\x3f\x5a\x7f\x68\x2b\x27\xf0\x46\xe0\x2f\x80\xc9\xa3\x5c\xd8\x8d\ +\x80\xd2\x75\x0d\x1f\xec\x2d\xdb\xaf\x09\xa4\xe7\x03\xe0\x2e\xaa\ +\x2c\xe1\x93\xc0\xf7\x61\x04\xce\x6c\x70\xe8\xdb\xa0\xe6\xa1\x2f\ +\x05\xd6\xf7\x96\xed\x9d\xaf\x55\xfb\xd6\x3a\x0c\xbc\x8b\x1f\xb2\ +\x84\x6b\x81\xd3\x8f\xe1\xdf\xb8\x03\xd8\xa0\x69\xf8\xf2\x63\xc5\ +\x43\x1f\x29\x79\x80\x5e\xe0\x17\xc7\x50\xce\x60\x3b\xf0\x48\x10\ +\x8e\x85\x1a\x6e\x8f\x89\xfa\x50\x01\x70\x17\x77\xb2\x84\x7b\x80\ +\x25\x23\xf0\xfb\x4b\x60\x33\x7e\xb2\x25\xd4\xf0\x0d\xbd\x65\xbb\ +\x31\x26\xda\xc3\xc7\x00\x00\xd7\x8d\x20\x00\x3c\x07\x2c\x0b\xb4\ +\xfb\xc1\xde\xb2\xbd\x65\x4c\x8c\x47\x1e\x00\xab\x80\x7f\x01\xfe\ +\xea\x55\xfe\x7e\x95\x40\xe0\xa1\x86\xdf\x07\xec\xea\x2d\xdb\xee\ +\x98\xe8\x5e\x4d\x00\xdc\x85\x62\x09\x5f\x02\x3e\x00\x2d\x57\x85\ +\x3c\x1c\xdb\xe3\xc0\x03\x81\x86\x3f\x71\xb4\xaa\x64\x63\x00\x48\ +\x83\x60\x07\x4b\xf8\x34\xf0\x8d\xc3\x78\xfd\x3d\xc0\xd3\x09\x1b\ +\x5e\xeb\x2d\xdb\x6a\x4c\x34\x23\x0d\x00\xfe\x76\x2b\xf0\x77\xc0\ +\x8c\x43\xbc\x5e\x95\x66\x0e\xfd\x7e\xe0\xd9\xde\xb2\x7d\x60\x4c\ +\x0c\xc7\x0a\x00\xee\xa2\xc2\x12\x7a\x81\x1f\x1e\xe4\x5f\xbc\x04\ +\x3c\x1a\x08\x7c\x25\xf0\xe8\x98\xfd\x3e\xb6\x19\x00\xe0\x47\xc0\ +\x35\xc0\xd9\x19\xe7\x76\xe0\xb7\x33\x85\x59\xb6\x4d\xbd\x65\xbb\ +\x3e\x76\x9b\x47\x13\x00\xee\x02\x96\x70\xad\x65\x71\x0f\xb0\x55\ +\x13\xf6\x4a\x60\x6d\x6f\xd9\xf6\xc6\x6e\xeb\xb1\xb3\xfd\x7f\xd1\ +\xc4\x69\xbf\xbc\x70\x16\xb1\x00\x00\x00\x00\x49\x45\x4e\x44\xae\ +\x42\x60\x82\ +\x00\x00\x29\xf7\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x80\x00\x00\x00\x80\x08\x02\x00\x00\x00\x4c\x5c\xf6\x9c\ +\x00\x00\x29\xbe\x49\x44\x41\x54\x78\x9c\xac\x8e\xbf\x4a\xc3\x60\ +\x1c\x45\xcf\xef\xcb\x97\x34\x1a\x5a\x34\x50\xa7\xa0\xd9\xec\xe0\ +\xe0\xd0\xd1\x37\xa8\x8b\x4f\xe3\x03\xf8\x42\x2d\xf4\x35\x04\x5d\ +\x74\x8b\x10\xb7\x64\x10\x1a\x44\x93\x7e\x7f\x1c\x94\xc6\xe0\x26\ +\xbd\xe3\xe5\x72\xee\x11\xef\x3d\xfb\xc8\x37\x46\x84\xc7\xb2\xb9\ +\x5b\x15\xf5\xa6\xd3\x81\xec\xd8\x81\x92\xce\xb8\xf7\xd6\x66\x69\ +\x7c\x7d\x39\xbd\x99\x9f\xa4\x49\x88\x20\x03\x86\xc3\x3b\x44\x20\ +\xf8\xd5\x35\x98\x92\xed\x13\xdd\x33\xe6\x05\xfb\x8a\x29\xb1\x6f\ +\xd0\xe2\x9a\x7e\x26\x09\x72\x80\x9a\xa0\x4f\xd1\x19\x3a\x27\x9c\ +\x11\x5d\xa0\xcf\x50\x47\x7f\x2e\x14\xa8\xde\x1c\xf0\x34\x9f\x66\ +\xfd\x50\x2f\xef\xab\xa2\xfa\x38\x8c\x82\x51\xa8\xac\xfb\xb1\x17\ +\xb0\xde\x8f\x63\x7d\xbb\xc8\xaf\xce\x8f\x01\xe7\x51\x43\xf5\x7f\ +\xe7\x0b\x00\x00\xff\xff\xac\x91\x3d\x0e\x01\x61\x18\x84\x9f\x77\ +\x7f\x6c\x24\x68\x44\x96\xc2\x09\x14\xa2\xf1\xd3\xea\x95\x5c\xc1\ +\xb9\x68\x1c\xc1\x01\x48\xa8\xb9\x82\x20\x11\x0a\x0a\x76\xb3\xdf\ +\xf7\x2a\x08\x8b\xd6\x14\x4f\x37\x93\xc9\x8c\xfc\xe5\x00\x6b\xd5\ +\x71\x04\x18\xcd\xb7\xe3\xd9\x36\x36\x9a\xf1\x9e\xeb\x3b\x22\xc0\ +\xf9\x9a\x94\xf2\x7e\xbf\x55\xee\x35\x4a\xc5\x9c\xff\xe9\x56\xb0\ +\x20\xef\x51\xcc\x81\x78\x4d\xb4\x20\x5a\x12\xad\x30\x7b\x34\xe6\ +\x51\x53\x52\xfc\x95\xa6\x28\x20\x1e\x6e\x48\xa6\x46\xd0\x21\x68\ +\x13\xd4\x71\x2b\xaf\xca\xa0\xe0\x7c\x65\x5d\xae\xc9\x74\x75\x9c\ +\x2c\x77\x9b\xd3\xad\x90\xf5\x04\xb1\xaa\x80\x08\x89\x51\x85\x41\ +\x33\x1c\x76\xab\xbe\x2b\xc6\xaa\xfb\x8f\x13\xee\x00\x00\x00\xff\ +\xff\xac\x92\x31\x0a\xc2\x50\x10\x44\xdf\x4f\x82\x24\x10\x4c\x23\ +\x58\x89\x5a\x5a\x59\x58\x5a\x89\x9d\x08\x1e\xc3\x4b\x58\x7b\x0c\ +\x8f\x60\x21\xd6\x42\xac\x3d\x80\x95\x56\x16\x62\x11\x41\x0c\x51\ +\xf2\xff\x5a\xe4\x47\x3d\x40\x60\x59\xb6\x98\x1d\x76\x67\xa6\x02\ +\x03\x8a\x53\x6e\x8f\xf7\x72\x73\x8e\x8f\x49\x14\x78\xae\x83\x11\ +\x14\x38\x8e\x4a\x5f\x5a\x8b\x4c\xfa\x8d\xf9\xa8\xd5\x8c\x6a\x80\ +\x11\x94\xcd\xbe\x80\x06\xcf\x12\xe5\x27\x9e\x5b\xb2\x1d\xd9\x1e\ +\x9d\x58\x53\x8a\xfa\x29\x25\xa5\xc0\xfc\x0d\xf6\x97\xb2\x7f\x91\ +\xc6\xc2\x05\x14\xb8\x21\xfe\x90\x60\x4c\x30\xa5\xd6\x2b\x39\x72\ +\x94\x5b\xac\x18\x91\x22\x2e\xf7\x34\x5f\xc5\x97\xf5\xe1\xaa\x0d\ +\xa1\xef\x1a\x11\x11\x94\x02\x21\x49\xf3\x41\xa7\xbe\x98\x75\xdb\ +\x8d\xa0\x12\x0f\x3e\x00\x00\x00\xff\xff\xa4\x94\xbd\x6d\x02\x51\ +\x10\x84\xbf\x5d\x3d\x23\x1d\x87\x0e\x8b\xd4\x4e\x48\x08\x68\x81\ +\xc4\xe4\x8e\x1c\xba\x00\x6a\x70\xee\x2a\x68\x80\xd8\xc4\x48\xae\ +\x00\x44\x07\xfe\x11\x89\x53\x7c\x27\x0c\xd2\xbd\x5d\x07\xf7\x88\ +\x88\x80\x2d\x60\xa4\xf9\x66\x67\xae\x0d\xa0\xf9\xfd\xe5\xe7\xef\ +\xeb\xdb\xc7\xcf\xf6\xd0\xcd\x42\x34\x77\x50\x91\x68\x5e\xed\xeb\ +\xe1\x5d\x67\x32\xbe\x1f\x0d\x6e\x81\x68\xae\x22\x22\x80\x81\x25\ +\xf4\x7e\x60\x37\xa7\x9a\xf1\xb7\x20\xee\xa0\x69\x82\x22\x8a\x37\ +\xe5\xe0\x84\xf5\x19\x06\x41\x11\xc1\x0d\x2c\x89\xe9\x0d\xd9\x03\ +\xf9\x33\xf9\x13\x5a\x00\x50\x83\x82\x3a\xd8\x11\xeb\xfa\xbb\x9c\ +\xbe\x6f\x56\x5f\x65\xbb\xa5\xad\x90\x16\x29\xa8\x94\xfb\xba\xc8\ +\xc2\xcb\x63\x7f\x3c\xec\x99\x7b\x32\x74\xe9\xfd\x03\x00\x00\xff\ +\xff\x22\x3f\x02\xe0\x6e\x5d\x75\xf2\xc5\xc4\x9d\x8f\x98\x99\x18\ +\xe1\xe5\x26\x0b\x13\xe3\x97\x9f\x7f\x39\x59\x99\x12\xed\xa4\xc3\ +\x2d\x24\x58\x99\x19\xff\xfd\xff\xcf\xc8\x00\x71\x29\x24\x4c\x99\ +\x19\x18\x18\x18\xfe\xbe\x66\xf8\x3c\x8f\xe1\xcb\x22\x86\x9f\xd7\ +\x18\x18\x20\xa9\x9c\x05\x16\xe8\xd4\xa9\x99\x50\x01\x3c\x32\xfe\ +\x40\x63\x82\x4d\x91\x81\x27\x96\x81\x37\x99\x81\x45\x8e\x81\x81\ +\x81\x81\xe1\x2f\xc4\x11\xff\xff\x33\xfc\xfb\x0f\x8d\x86\x0d\x67\ +\x5f\xcd\xda\xff\xe4\xdd\xd7\xdf\x7c\x1c\x2c\x7f\xfe\xfd\x67\x60\ +\x60\x60\x66\x62\xfc\xfd\xe7\xdf\xf7\xdf\xff\x92\xec\xa5\xd3\x1d\ +\x65\x20\x79\x9d\xec\x48\x00\x00\x00\x00\xff\xff\x22\x33\x02\xfe\ +\xff\x67\xf8\xcf\xf0\x9f\x89\x91\x71\xfa\xde\xc7\x73\x0f\x3e\xe5\ +\xe7\x64\x61\x64\x84\x84\x32\x03\x13\x13\xe3\xfb\xaf\xbf\x35\xa5\ +\xb8\x6b\xfc\x95\xd4\x25\xb9\x19\x90\xb2\x36\x03\xc3\x5f\x68\xd0\ +\xff\xb9\xcf\xf0\x69\x1e\xc3\x97\x39\x0c\xbf\x5f\x30\x30\x32\x30\ +\x30\x42\x6a\x5d\x1a\x85\x3b\x26\x80\xc4\x04\x03\xc3\xbf\xbf\x0c\ +\xff\x18\x18\x58\x05\x19\x78\x12\x18\xf8\x92\x19\x58\xb5\x19\x18\ +\x18\x18\x18\xfe\x30\x30\x30\x33\x30\x20\x12\xcd\xe3\x77\x3f\xda\ +\x36\xdd\x3f\x7d\xef\xa3\x00\x17\xeb\x7f\x06\x68\x71\xc4\xc8\xc0\ +\xf8\xfe\xeb\xef\x60\x53\xf1\x2a\x3f\x45\x48\x80\x90\x17\x07\x00\ +\x00\x00\x00\xff\xff\x22\x27\x02\xfe\xff\x67\x60\x60\xf8\xcf\xc8\ +\xc8\xd8\xb7\xe3\xe1\xb2\x63\xcf\x05\xb8\x59\xff\xff\xff\xff\xff\ +\x3f\x03\x13\x23\xc3\xbf\xff\x0c\x5f\x7e\xfc\xf5\x37\x16\x2d\xf2\ +\x90\xe7\x64\x63\x46\x2a\x25\x61\x25\xfa\xbf\x4f\x0c\x9f\x66\x30\ +\x7c\x68\x67\xf8\xfb\x81\x81\x91\x81\x81\x89\x05\x5a\x38\x0c\x0c\ +\x80\x14\x74\x7f\x18\xfe\x31\x30\x30\x71\x32\x08\x14\x32\xf0\x15\ +\x30\x30\x8b\xc2\x1c\xcc\xc4\x00\xab\xe1\xfe\xfe\xfb\x3f\x6d\xef\ +\xe3\xa5\xc7\x9e\x73\xb0\x32\xb3\x30\x41\x6b\x66\x66\x26\xc6\xf7\ +\x5f\x7f\x7b\xe9\x8b\xd6\x06\x28\xb1\x32\x33\x92\x17\x07\x00\x00\ +\x00\x00\xff\xff\x22\x39\x02\xe0\xcd\xcd\xd6\x4d\xf7\xd6\x9c\x7a\ +\x25\xc2\xcb\xfa\x17\x96\x31\x7f\xfe\xf9\xf7\xf7\xdf\xff\x7c\x37\ +\xf9\x30\x73\x71\x06\x94\x84\xff\x07\x5a\xdc\x7f\x9a\xc2\xf0\xb1\ +\x8f\xe1\xd7\x7d\x58\x69\xf3\x97\x5e\x49\x1e\x3f\x60\x64\x60\x64\ +\x86\x46\x03\x8b\x04\x03\x7f\x2e\x83\x40\x19\x03\x03\x0b\xbc\x44\ +\x82\x17\x32\x3b\x2f\xbf\xed\xd8\x72\xff\xf7\x9f\x7f\x90\xb4\xc5\ +\xc0\xc0\xc0\xc2\xcc\xf8\xe6\xf3\x6f\x27\x2d\xa1\xf6\x30\x55\xf2\ +\xe2\x00\x00\x00\x00\xff\xff\x22\x2d\x02\xe0\xe5\x7e\xeb\xc6\x7b\ +\xeb\xce\xbc\x12\xe6\x65\xfd\xf3\x17\x1a\xfa\x5f\x7e\xfe\x15\xe1\ +\x61\x6d\x0c\x52\x36\x52\xe0\x43\xaa\x6c\x61\x4d\xc2\xdf\xd7\x19\ +\xde\x96\x32\x7c\xd9\xca\xc0\xc4\xc0\xc0\xc4\xcc\xf0\x9f\x6e\xa5\ +\x0d\xf1\x80\x91\x81\x91\x09\x5a\x28\x71\xd9\x30\x08\xf7\x31\xb0\ +\x9b\x32\x30\x30\x40\xb2\x02\xdc\xe3\xb7\x5e\x7c\xab\x5d\x73\xe7\ +\xc1\x9b\xef\xfc\x9c\xd0\x2a\x81\x85\x99\xf1\xdd\x97\xdf\x0e\x9a\ +\x42\x6d\xa1\x2a\xac\xcc\x4c\x0c\x24\xd6\x07\x00\x00\x00\x00\xff\ +\xff\x22\x21\x02\xfe\x33\x30\xfc\xff\xff\x9f\x89\x91\xb1\x73\xcb\ +\xfd\x95\x27\x5f\x8a\xf0\xb0\xfe\x81\x55\xb9\x1f\xbf\xff\x51\x93\ +\xe0\x6a\x0f\x53\x95\x11\xe2\x40\x2a\x76\x20\x25\xfe\x7f\x86\xf7\ +\x2d\x0c\x1f\x5a\x19\xfe\xfd\x64\x60\x62\x81\xb5\x7f\x06\x2d\x60\ +\x64\x60\x64\x66\xf8\xf7\x87\x81\x81\x91\x81\xbf\x80\x41\xa8\x9d\ +\x81\x91\x1d\x9e\x83\x21\x5e\x7b\xff\xf5\x77\xf5\x9a\x3b\x67\xee\ +\x7d\x12\xe0\x42\x89\x03\x67\x6d\xe1\xce\x70\xd5\xff\xff\x19\x30\ +\x3a\x98\xf8\x00\x00\x00\x00\xff\xff\x22\x21\x02\x20\xd6\x4f\xdb\ +\xfb\x78\xde\xc1\xa7\x82\xdc\x88\x92\xe7\xe3\xb7\x3f\x7a\x72\x3c\ +\x7d\x51\xea\x7c\x9c\x2c\x48\xa1\xff\x87\x81\x81\x85\xe1\xdf\x5b\ +\x86\x57\xf1\x0c\x5f\xb6\x32\x30\x33\x30\x30\x30\x33\x30\xfc\x25\ +\x31\x38\x06\x0a\x30\x31\x30\x30\x30\xfc\xfd\xc7\xc0\x65\xc9\x20\ +\xb6\x82\x81\x45\x0e\xde\x7c\x80\x34\xbb\x7f\xfd\xf9\x57\xb9\xea\ +\xf6\xc1\x1b\xef\xe1\xe1\x00\x89\x83\x40\x63\xb1\x6a\x7f\x25\x92\ +\xda\xa6\x00\x00\x00\x00\xff\xff\x62\x22\xac\x84\x01\xe2\x98\xff\ +\xcc\x4c\x8c\x4b\x8e\x3e\x9f\x73\x00\x11\xfa\x90\xb4\x6f\xa3\x26\ +\x30\x29\x56\x83\x8f\x93\x05\xde\x74\x63\xf8\xff\x87\x81\x81\x85\ +\xe1\xfb\x1e\x86\x27\x66\x0c\x5f\xb7\x32\x30\xb3\x40\xfa\xf3\xa4\ +\x07\xc4\x40\x81\x7f\x0c\x0c\xff\x18\x58\x58\x18\xbe\x1f\x67\x78\ +\x6a\xca\xf0\x75\x35\x03\x03\x33\xc3\xff\x3f\x0c\x0c\xff\x99\x98\ +\x18\xff\xfd\xff\xcf\xc6\xc2\xd4\x15\xa1\xe6\x67\x24\xfa\xe1\xdb\ +\x6f\x16\x26\x46\x06\x06\x86\x3f\x7f\xff\x0b\x71\xb3\xae\x39\xfd\ +\x72\xe2\xce\x47\x4c\x8c\x8c\xff\xfe\x11\x9b\xac\x01\x00\x00\x00\ +\xff\xff\x22\x2a\x02\x20\xa1\x7f\xe8\xe6\xfb\x49\xbb\x1e\x09\x71\ +\xb3\xfe\x83\x85\xfe\x87\x6f\x7f\x8c\x15\xf8\x3a\xc2\x55\xb9\xd8\ +\x98\x61\x55\xee\x7f\x06\x86\xbf\x0c\x8c\x2c\x0c\x5f\x97\x33\x3c\ +\x77\x63\xf8\x73\x8f\x81\x99\x99\x81\xe1\xcf\xe0\x2b\xf1\x89\x00\ +\xff\xff\x30\x30\x31\x33\xfc\x7d\xc5\xf0\x22\x8c\xe1\xd3\x44\x06\ +\x46\x48\x8f\xfd\x3f\x13\x23\xe3\xff\xff\x0c\x4c\x8c\x8c\x75\x01\ +\xca\x2e\xda\xc2\x6f\xbf\xfe\x66\x61\x66\x64\x60\x60\xf8\xf3\xef\ +\xbf\x08\x2f\xdb\xa2\x23\xcf\xd6\x9f\x7d\x05\x69\x38\x11\x63\x09\ +\x00\x00\x00\xff\xff\x22\x1c\x01\xff\xfe\x33\x30\x33\x31\x3e\x7e\ +\xf7\xa3\x75\xe3\x3d\x2e\x76\xa6\xff\x0c\xff\xff\x33\x30\x30\x33\ +\x31\x7e\xfa\xf1\x47\x5b\x86\xa7\x23\x5c\x95\x8d\x85\x09\x29\xf4\ +\xff\x33\x30\x30\x33\xbc\xaf\x61\x78\x19\xc5\xc0\xc8\xc0\xc0\xc8\ +\xc4\xf0\x7f\x08\x25\x7c\x4c\xf0\x97\x81\x91\x89\x81\x89\x99\xe1\ +\x75\x01\xc3\x9b\x2c\x58\x26\xfe\x07\x29\x5f\xfe\xff\x67\x68\x08\ +\x52\xb6\x53\x17\xfc\xf0\xf5\x0f\x24\x1f\xfc\xfb\xf7\x9f\x9f\x8b\ +\xa5\x7f\xfb\xc3\xab\x4f\xbf\x30\xc3\x5a\xab\xf8\x01\x00\x00\x00\ +\xff\xff\x22\x10\x01\xff\xff\x33\x30\xfc\xff\xff\xfb\xef\xff\xa6\ +\xf5\x77\x3f\x7e\xff\xc3\xca\xcc\x04\x89\xfc\xef\xbf\xfe\x49\xf2\ +\xb3\x77\x45\xa8\xf2\x73\xb2\x20\x85\xfe\x3f\x06\x06\x26\x86\x37\ +\x29\x0c\x6f\x5b\x91\xfa\x56\x43\x1d\xfc\x63\x60\xf8\xcb\xc0\xc4\ +\xcc\xf0\x61\x3a\xc3\xcb\x60\x86\xff\x7f\x19\x18\x18\xe1\x71\xc0\ +\xce\xc2\xd4\x12\xa2\xa2\x21\xc5\xfd\xf9\xe7\x5f\x66\x26\x46\xe8\ +\x18\xcc\xff\xff\x8d\xeb\xef\x7e\xfe\xfe\x97\x91\x81\x91\x60\x14\ +\x00\x00\x00\x00\xff\xff\x22\x10\x01\xff\xfe\xff\x67\x62\x62\x9c\ +\xba\xe7\xd1\xb9\x87\x9f\x21\x75\x2c\x23\x23\xc3\x9f\x7f\xff\x59\ +\x99\x19\x3b\xc2\x55\x45\x79\xd9\x20\x2d\x4e\x44\xda\x7f\x93\xca\ +\xf0\x61\x2e\x03\x0b\x2b\x1d\xbb\xb5\xf4\x01\x7f\x19\x58\x58\x19\ +\xbe\x6c\x62\x78\x05\x8f\x83\xff\x8c\x8c\x0c\xff\xfe\xff\xe7\x66\ +\x67\xee\x0c\x57\x15\xe2\x66\xf9\xf9\xfb\x1f\x13\x44\x84\x8d\xf9\ +\xfe\xeb\xef\x5d\xdb\xee\x43\x14\xe0\x37\x17\x00\x00\x00\xff\xff\ +\xc2\x17\x01\x90\x4a\xf5\xe4\xdd\x8f\x2b\x8e\xbf\x10\xe4\x82\x36\ +\xf9\x19\x19\x19\xbf\xfd\xfc\x5b\xe6\xad\xa0\x2e\xc9\x0d\x6b\xf3\ +\xfc\x67\xf8\xff\x17\x9a\xf6\x3f\xce\x61\x60\x61\x65\xf8\xff\x7b\ +\x78\x85\x3e\x03\x03\x03\x03\xc3\xff\xdf\x0c\xcc\xf0\x38\xf8\x03\ +\x49\x61\x90\x31\x47\x49\x01\xf6\xda\x00\x65\xc8\x28\x24\x23\x03\ +\xc3\x9f\x7f\xff\x05\xb8\x58\xb7\x5f\x7c\xb3\xed\xe2\x1b\x82\x95\ +\x01\x00\x00\x00\xff\xff\xc2\x19\x01\xff\xff\x33\x30\x32\x30\xbe\ +\xfb\xfa\xbb\x6d\xd3\x3d\x36\x16\x26\x48\x80\xb2\x30\x31\x7e\xf8\ +\xfa\x3b\xde\x56\xca\x53\x5f\x04\xa5\xbd\xcf\xc8\xc2\xf0\x36\x97\ +\xe1\xc3\x5c\x06\x66\x48\xe8\x0f\x53\x00\x89\x83\xcf\x9b\x18\x5e\ +\x47\xc1\x5a\xd5\xd0\x81\x0a\x0b\x65\xfe\x3c\x37\xb9\x8f\xdf\xfe\ +\x40\xe6\x45\xfe\xfd\xff\xcf\xcb\xc1\xd2\xb7\xfd\xc1\xa3\xb7\x3f\ +\x98\x99\x18\xf1\x44\x01\x00\x00\x00\xff\xff\xc2\x19\x01\xff\xfe\ +\xff\x67\x64\x64\x98\xb8\xf3\xd1\xb3\x0f\x3f\x39\x58\x99\x20\x55\ +\xf1\xa7\xef\x7f\xcc\x94\xf8\x33\x9c\x64\xfe\xc2\x66\x60\xa0\xed\ +\xfd\x2f\x0b\x19\x3e\x4c\x19\xe6\xa1\x0f\x01\xff\x7f\x33\xb0\xb0\ +\x32\x7c\x5a\xc3\xf0\xb1\x13\x36\x5c\xc1\x00\x89\x83\x70\x0b\x09\ +\x0f\x3d\x91\x0f\xdf\xfe\x30\x33\x31\xfe\xff\xcf\xc0\xc2\xcc\xf8\ +\xe5\xc7\xdf\xee\xad\x0f\xfe\x41\x46\xca\x70\x00\x00\x00\x00\x00\ +\xff\xff\xc2\x1e\x01\x90\xd4\x7d\xf0\xc6\xfb\x6d\x17\x5f\x0b\x70\ +\xb1\xfe\xf9\xf7\x9f\x91\x91\xe1\xd7\x9f\x7f\x82\x3c\xac\xb5\x01\ +\x4a\xcc\x4c\x8c\xb0\x19\x95\xbf\x0c\x0c\x2c\x0c\xdf\x36\x32\xbc\ +\x4a\x62\x60\x62\x61\x60\xf8\x43\x1b\x4f\x0f\x32\xf0\xff\x37\x03\ +\x33\x0b\xc3\x9b\x0a\x86\xcf\x33\x19\x18\x58\x18\xfe\xff\x61\x60\ +\x60\x80\xb4\x4d\xcb\xbc\x15\x14\x44\x38\x7e\xfc\xfa\xcb\xc4\xc8\ +\xf0\xf7\xdf\x7f\x3e\x4e\x96\x63\x77\x3e\x6c\xc0\xdb\x2a\x05\x00\ +\x00\x00\xff\xff\xc2\x12\x01\xff\x19\x18\x18\x19\x19\xbe\xff\xfa\ +\x3b\x7d\xef\x63\x0e\x56\x26\x48\xec\x41\x5a\x3e\x25\x5e\x0a\x92\ +\x02\xec\xb0\x8a\xf7\x1f\x03\x03\x33\xc3\x9f\xc7\x0c\xaf\xe2\x61\ +\x4d\xa0\x61\x57\xee\xe3\x04\x7f\x19\x98\x98\x18\xde\xe4\x30\xfc\ +\xba\xc0\xc0\xc8\xc2\xc0\xf0\x97\x91\x91\xe1\x3f\xc3\x7f\x3e\x4e\ +\x96\x6a\x3f\x25\x78\x50\xff\xfd\xff\x9f\x87\x9d\x79\xee\xc1\x67\ +\x6f\xbf\xfc\x86\xc4\x10\x26\x00\x00\x00\x00\xff\xff\xc2\x16\x01\ +\xff\xfe\x33\x31\x32\x2e\x38\xfc\xec\xce\xcb\x6f\x9c\xac\xcc\xf0\ +\xc2\xc7\x5e\x53\xd0\x59\x4b\x08\x51\xf1\x32\xfc\x67\xf8\xff\x8b\ +\xe1\x75\x34\xc3\xdf\x8f\x0c\x8c\x4c\xc3\xa2\xc5\x49\x3c\xf8\xcf\ +\xc0\xc0\xc8\xf0\xff\x0f\xc3\xab\x68\x86\x7f\x1f\x20\x8d\x22\x48\ +\x85\x6c\x20\xcf\xeb\x67\x24\xfa\xf1\x3b\xb4\x20\x62\x63\x61\x7a\ +\xf5\xe9\xe7\xb4\xbd\x8f\x19\x19\x19\xb0\x16\x44\x00\x00\x00\x00\ +\xff\xff\x42\x8f\x80\x7f\xff\x19\x18\x99\x18\x1f\xbf\xfb\xb1\xfa\ +\xd4\x4b\x3e\x4e\x96\x3f\xff\xfe\x33\x32\x30\xfc\xfd\xf7\x9f\x83\ +\x95\x29\xd3\x49\xf6\x3f\x62\xa8\xef\x2f\x03\x03\x33\xc3\xbb\x22\ +\x86\xaf\x87\x19\x98\x59\x86\xd4\x30\x03\xb5\xc0\x5f\x06\x26\x16\ +\x86\x9f\xd7\x18\xde\x24\x31\x30\x40\xd3\x1f\x24\x99\x27\xdb\x4b\ +\x8b\xf0\xb0\xfd\xfe\xf3\x8f\x91\x91\xe1\xef\xbf\xff\xfc\x9c\x2c\ +\xdb\x2f\xbe\xb9\xfc\xf8\x0b\x13\xb6\xae\x19\x00\x00\x00\xff\xff\ +\xc2\xcc\x01\xff\x19\x19\x18\x16\x1c\x7a\xf6\xf9\xc7\x5f\x48\x23\ +\x87\x89\x89\xf1\xd3\xf7\x3f\xd1\x56\x92\x4a\x62\x9c\xff\xa0\x85\ +\xcf\x5f\x06\x06\x16\x86\xef\x7b\x19\x3e\x4c\x65\x60\x86\x16\x82\ +\x23\x11\xfc\xff\xc3\xc0\xcc\xca\xf0\x79\x3d\xc3\x97\xc5\x90\xc1\ +\x22\x48\xc3\x5f\x84\x97\x2d\xd5\x51\xe6\xcb\xcf\xbf\x90\xe9\x10\ +\x46\x46\xc6\x7f\xff\xfe\xcf\x3d\xf8\x94\x81\x81\x01\x73\x41\x07\ +\x00\x00\x00\xff\xff\x42\x89\x80\x7f\xff\x19\x98\x18\x19\x1f\xbd\ +\xfd\xb1\xf7\xda\x5b\x5e\x0e\xe6\xbf\xff\xfe\x33\x31\x32\x7c\xff\ +\xf5\x57\x4d\x82\x2b\xce\x46\x0a\xa9\xc7\xcb\xc0\xf0\xff\x37\xc3\ +\xbb\x12\x06\x38\x77\xc4\x82\xff\x7f\x19\x18\x99\x18\xde\xd5\x30\ +\xfc\x83\x94\xc3\xff\x21\x23\x10\x01\xc6\x62\x66\x4a\xfc\x5f\x7e\ +\xfc\x85\x94\x4b\x3c\x1c\x2c\x27\xef\x7d\xb8\xf0\xe8\x33\x13\x23\ +\x03\xda\x38\x1d\x00\x00\x00\xff\xff\x42\xcb\x01\xff\x19\x18\x18\ +\x56\x9c\x78\xf1\xed\x27\x34\xf9\x33\x32\x32\xfe\xfe\xfb\x3f\xd3\ +\x59\x96\x83\x95\x09\x36\xdd\xf3\x8f\x81\x81\x99\xe1\x7d\x2d\xc3\ +\x8f\x0b\x0c\x8c\x4c\x23\xb2\xf0\x41\x06\xff\x18\x18\x19\x19\x7e\ +\x3f\x62\x78\x9b\x03\x2f\x88\x18\x18\x18\x98\x18\x19\xb2\x5d\x65\ +\x99\x99\x18\xfe\x33\x40\x97\x15\xfd\xff\xcf\xb0\xfc\xf8\x73\x06\ +\x06\xf4\x3c\x00\x00\x00\x00\xff\xff\x42\x44\x00\x24\xf9\x3f\x7e\ +\xf7\x63\xfb\xc5\x37\x3c\x1c\x2c\x90\xe4\xff\xf5\xe7\x5f\x43\x79\ +\x5e\x1b\x35\x41\xd8\x50\xf3\x3f\x06\x06\x26\x86\xdf\xf7\x18\x3e\ +\xf6\x31\x30\x31\x8f\xb0\x8a\x17\x17\xf8\xcb\xc0\xc4\xcc\xf0\x79\ +\x09\xc3\xcf\x93\x90\xde\x19\x13\x23\xe3\xbf\xff\xff\xb5\xa5\x79\ +\xec\xd4\x05\xbf\xfc\xf8\x0b\x69\x83\xf2\xb0\x33\x1f\xba\xf1\xe1\ +\xf2\xe3\x2f\x10\x59\xb8\x66\x00\x00\x00\x00\xff\xff\x42\x5a\xa1\ +\xf7\xff\x3f\x03\x03\xc3\x8e\x4b\x6f\x3e\xff\xf8\x83\x94\xfc\xff\ +\x85\x98\x8a\x43\x22\x10\xa2\x88\x81\x81\x91\xe1\x63\x2b\xc3\xbf\ +\xdf\xa3\xe5\x0f\x0a\xf8\xcf\xc0\xf0\xbe\x01\x85\xcb\xc0\x10\x6a\ +\x2e\xc1\xc4\xc4\x08\x9b\x45\x67\xfc\xf3\xef\xff\x96\x0b\xaf\xe1\ +\xb2\x10\x00\x00\x00\x00\xff\xff\x42\x44\x00\x33\x13\xe3\x8f\xdf\ +\xff\x76\x5f\x79\xc7\xc9\xc6\x0c\xe9\x06\x7f\xff\xf5\x57\x45\x9c\ +\xcb\x56\x43\xf0\xff\x7f\x06\x66\x26\x46\xe8\xd8\xec\xcf\x93\x0c\ +\x9f\x17\x32\x30\x31\x8d\xdc\xba\x17\x0b\xf8\xcb\xc0\xc4\xcc\xf0\ +\x6d\x07\xc3\xb7\x4d\xd0\x4c\xc0\xc4\xf8\xff\x3f\x83\x81\x1c\xaf\ +\x81\x1c\xef\xd7\x5f\xd0\x9a\x80\x9b\x9d\xe9\xf0\xcd\xf7\x6f\xbf\ +\xfc\x86\xc7\x0a\x03\x03\x03\x00\x00\x00\xff\xff\x82\x46\x00\xa4\ +\x9f\x76\xe8\xc6\xfb\xfb\xaf\xbf\x41\x8a\x7b\x26\x46\xc6\x1f\xbf\ +\xff\x85\x99\x49\xb0\xb3\x30\x21\x65\x19\x46\x86\xf7\x0d\x0c\xff\ +\xfe\x22\x2f\x6e\x1d\x05\x50\xf0\x9f\x81\xe1\x7d\x1d\x03\x03\x03\ +\x7c\xa1\x23\x23\x23\x43\x94\xa5\xc4\xbf\x7f\xff\x21\x6d\x77\x56\ +\x66\xa6\x57\x9f\x7e\xed\xb8\xf4\x06\x22\x0b\xd1\x04\x00\x00\x00\ +\xff\xff\x82\x86\x23\x64\x5c\x67\xcb\x85\xd7\x90\x41\x6d\xc8\xc0\ +\x83\x9c\x30\x87\x9b\xae\xf0\x7f\x06\x06\x26\x48\xf2\x67\x60\x62\ +\xf8\x75\x99\xe1\xfb\x5e\x06\x26\xa6\x91\x32\xea\x40\x02\xf8\xcb\ +\xc0\xc4\xcc\xf0\xf3\x22\xc3\xf7\x3d\x0c\x0c\x4c\xd0\x4c\xc0\xc0\ +\x60\xa9\x22\xa0\x29\xc5\xfd\xfd\xd7\x5f\xc8\x48\x35\x3b\x2b\xd3\ +\xce\xcb\x6f\xfe\xfc\x85\x8f\xa4\x31\x00\x00\x00\x00\xff\xff\x62\ +\x62\x80\xae\x96\x65\x7c\xf0\xe6\xfb\xa5\x47\x9f\xb9\xd8\x98\x21\ +\x8d\xfd\xaf\x3f\xff\xba\xea\x08\x73\xb3\x33\xff\xfb\xf7\x1f\x56\ +\x6f\x33\x32\x7c\x6c\x63\xf8\xf7\x7b\x34\xf9\xe3\x04\xff\x19\x18\ +\x3e\xb4\x30\x30\x30\x40\x3a\xac\xff\xfe\xfd\x67\x61\x66\xf4\x36\ +\x10\xfd\xf1\xfb\x1f\x23\x23\xe3\xff\xff\x0c\x9c\xac\xcc\xb7\x5f\ +\x7c\xbf\xf4\xf8\x0b\x23\x2c\x13\x00\x00\x00\x00\xff\xff\x62\x62\ +\x80\x55\xbf\x87\x6f\x7e\xf8\x02\x6b\x7d\xfe\xfb\xf7\x9f\x8b\x8d\ +\xd9\x45\x5b\x98\x81\x01\xb2\xa2\xf3\x1f\x03\x03\x33\xc3\xdf\x27\ +\x0c\x5f\x37\x31\x30\x0d\xad\xe9\x75\x7a\x82\xbf\x0c\x4c\x4c\x0c\ +\xdf\x0f\x33\xfc\xba\x00\xcd\x04\x8c\x8c\x0c\x0c\x0c\xf6\x1a\x82\ +\xc2\x3c\xac\x7f\xfe\xfe\x67\x84\x2e\x73\xff\x77\xf0\xc6\x3b\x06\ +\xd8\x12\x37\x00\x00\x00\x00\xff\xff\x62\x62\x60\x60\x80\xcc\xe2\ +\x1f\xb8\xfe\x8e\x9d\x85\x09\xb2\xf2\xe7\xdb\xaf\x7f\x86\x0a\x7c\ +\xaa\x12\x5c\xd0\x9d\x08\xff\xff\x31\x30\x30\x30\x7c\x9a\xca\xf0\ +\xf7\x1b\x03\x23\xf3\x68\xe3\x07\x27\x60\x64\x62\xf8\xff\x8f\xe1\ +\x63\x1f\x03\x03\x03\xc3\x7f\x06\x48\xc7\x58\x8c\x8f\xcd\x5a\x55\ +\xf0\xeb\xcf\xbf\x90\xa1\x08\x0e\x36\xe6\xa3\xb7\x3f\x7c\xfb\x05\ +\x9d\xc2\x04\x00\x00\x00\xff\xff\x62\x82\xd4\x15\x77\x5f\x7f\xbf\ +\xfd\xf2\x1b\x07\x1b\x13\x64\xf1\xfe\xef\xbf\xff\x1c\x34\x04\x19\ +\xa0\x99\xe3\x3f\x03\x23\x33\xc3\xff\x1f\x0c\x5f\x96\x33\xc0\x23\ +\x63\x14\x60\x05\xff\xff\x32\x30\x31\x30\x7c\xdb\xc8\xf0\xf7\x0d\ +\x24\xa5\x42\x92\xb9\xa3\x96\x20\x23\x23\x64\x65\x1b\x03\x3b\x2b\ +\xd3\x93\x77\x3f\x2e\x3f\xfe\xc2\xc0\xc0\xf0\xef\xdf\x7f\x00\x00\ +\x00\x00\xff\xff\x62\x82\xa8\x38\x75\xf7\xe3\x37\xd8\xd8\xc5\x9f\ +\xbf\xff\x05\xb9\x59\x2d\x54\xf9\x19\xa0\xfb\x5b\xfe\x31\x30\x30\ +\x32\xfc\xd8\xc7\xf0\xfb\x21\x03\xe3\x68\xe7\x0b\x3f\xf8\xcf\xc0\ +\xc8\xc2\xf0\xe7\x13\xc3\xb7\x0d\x0c\x0c\x0c\xf0\x52\xc8\x50\x81\ +\x4f\x52\x80\x1d\x32\x3c\xc7\xc8\xc0\xf0\xf7\xef\xff\x13\x77\x3e\ +\x40\x34\x00\x00\x00\x00\xff\xff\x62\x82\xa8\x38\x79\xf7\x23\x64\ +\x6d\x29\x13\x23\xe3\xf7\xdf\x7f\x75\x65\x79\x24\xf9\xd9\x51\x96\ +\x9a\x7e\x5e\xcc\xf0\x9f\x11\x73\x2c\x69\x14\xa0\x03\x48\x5f\xf5\ +\xcb\x12\x06\x06\x06\x48\x02\xfe\xf7\xef\x3f\x0f\x3b\xb3\xa9\x12\ +\xdf\xf7\x5f\x7f\x99\x18\x19\xff\xff\xff\xcf\xce\xca\x74\xe6\xfe\ +\x27\x48\x5b\x08\x00\x00\x00\xff\xff\xec\x98\x31\x12\x40\x30\x00\ +\x04\xef\x12\x93\x32\x5f\xe0\x0b\xfc\xbf\xd2\xfa\x83\x4a\x81\x42\ +\x41\x21\x42\x9c\x22\x1e\xe0\x01\xf6\x0d\x37\xb3\x73\x6b\x48\x6c\ +\xe1\xea\xe7\xdd\x15\x46\x10\x89\x33\xa9\x2e\x3d\x5e\x4d\x0b\xb0\ +\x50\xc0\xd1\x82\xfa\xe7\xff\x81\x1b\x14\x62\x87\x34\xe5\x3a\x94\ +\x85\xd9\x54\x5e\xca\xff\x00\xce\x9a\x61\x39\xc6\x35\x12\x78\x00\ +\x00\x00\xff\xff\x62\x62\x60\x60\xb8\xf1\xfc\xdb\xdb\x2f\xbf\x21\ +\x6b\x7e\xfe\xff\xff\xcf\xc9\xca\xa4\x27\xcb\xc3\xc0\x00\x1f\x7a\ +\x63\x60\xf8\x79\x8c\xe1\xf7\xb3\x91\x37\xeb\x42\x1e\xf8\xcf\xc0\ +\xc4\xcc\xf0\xe7\x1b\xc3\xf7\x3d\x0c\x0c\x0c\x0c\xff\xff\x41\x96\ +\x89\x6a\x4b\x73\xf3\x71\x42\x17\xb5\x33\x33\x33\x7e\xf9\xf9\xf7\ +\xea\x93\x2f\x0c\x0c\x0c\x00\x00\x00\x00\xff\xff\x62\x62\x60\x60\ +\xb8\xf4\xe8\xf3\xaf\xbf\xff\x18\x19\x21\xfd\xaf\xff\x12\xfc\xec\ +\x90\x9d\x2d\x8c\xf0\x31\xa0\xef\x07\x18\xfe\x33\x30\x30\x8e\x36\ +\xff\x89\x04\x8c\x0c\x0c\x0c\x0c\x3f\xf6\x41\x98\x90\x2e\x97\xac\ +\x10\xa7\x82\x28\x27\x64\xed\x10\x03\x03\xc3\xff\xff\xff\x2f\x3e\ +\xfa\xcc\xc0\xc0\x00\x00\x00\x00\xff\xff\x62\x62\x60\x60\x78\xf8\ +\xe6\x3b\x33\x23\xa4\x03\xcc\xf8\xeb\xcf\x3f\x45\x31\x4e\x0e\x56\ +\x26\xc8\x7e\x23\x68\xa0\xff\x3c\x06\xd1\x34\x00\x7e\x19\x8a\xe0\ +\xff\x3f\x06\x46\x06\x86\x1f\x27\xe1\xbb\xe1\x20\x0b\xda\x54\x25\ +\xb8\x7e\xfd\x85\xf4\xc8\xfe\xb3\x32\x33\x3d\x7a\xfb\x83\x81\x81\ +\x01\x00\x00\x00\xff\xff\x62\xfa\xf3\xf7\xff\x83\x37\x3f\x58\x99\ +\x19\xff\xff\xff\x0f\x59\x54\xa4\x2a\xce\xc5\x00\xdb\x87\xc4\xc0\ +\xc0\xc4\xf0\xef\x33\xc3\xaf\x8b\x0c\xf0\xe2\x68\x14\x10\x06\xff\ +\x19\x18\x19\x18\xfe\xdc\x61\xf8\xf3\x18\xb2\x8e\x11\x22\xaa\x26\ +\xc1\x0d\x1f\x53\x66\x65\x66\x7c\xfa\xee\xc7\xa7\xef\x7f\x00\x00\ +\x00\x00\xff\xff\x62\x7a\xfe\xf1\xe7\xab\x8f\xbf\x58\x59\x18\xff\ +\xff\x67\xf8\xff\x9f\x81\x85\x89\x51\x53\x8a\x1b\x66\xd0\x3f\x06\ +\x06\x06\x86\x5f\x17\x19\xfe\xbc\x81\x4c\xf7\x0c\x80\x5f\x86\x24\ +\xf8\xcf\xc0\xc0\xcc\xf0\xf7\x27\xc3\xcf\xd3\x0c\x0c\x0c\x0c\xff\ +\xa1\x83\x71\xea\x92\x5c\x9c\xac\x4c\xff\xfe\xfd\xff\xcf\xc0\xc0\ +\xc2\xcc\xf8\xfe\xeb\x9f\x07\x6f\xbe\x03\x00\x00\x00\xff\xff\x62\ +\x7a\xfa\xee\x07\x62\x04\xe2\xff\x7f\x0e\x36\x66\x19\x21\x0e\x06\ +\x48\x0d\x0c\x29\x73\x7e\x5f\x65\x80\x0d\x5a\x8c\x02\x62\x01\x24\ +\xc8\x7f\x5d\x64\x60\x60\x60\x60\xf8\x0f\x59\x45\x25\x29\xc0\xce\ +\xcb\xc1\xf2\xf7\x1f\x03\x23\x03\x03\x13\x23\xe3\xcf\x3f\xff\x1e\ +\xbe\xf9\x01\x00\x00\x00\xff\xff\x62\x7a\xf1\xf1\xd7\xdf\x7f\xd0\ +\xfd\x98\x7f\xff\xfd\xe7\xe7\x64\x16\xe1\x65\x63\x80\x0e\x01\x31\ +\x30\x30\x30\x30\xfc\xba\xcc\xc0\x30\xda\x01\x20\x11\x40\xd2\xee\ +\xaf\xab\x0c\x0c\x0c\x0c\xb0\xed\x32\xfc\x9c\x2c\xc2\x3c\xac\x7f\ +\xfe\xc1\x57\xb7\xff\x7f\xf1\xe1\x27\x00\x00\x00\xff\xff\x62\xba\ +\xff\xfa\x3b\x74\xde\x92\x81\xe1\xf7\xdf\xff\xe2\xfc\xec\xbc\x1c\ +\xcc\x90\x45\xa6\xd0\x1a\xf8\xd7\x35\x84\x89\xa3\x80\x58\xf0\x9f\ +\x81\x91\x81\xe1\xf7\x4d\x58\x3d\xfc\x1f\xb2\xbc\x4a\x4a\x90\xe3\ +\xf7\xdf\xff\xd0\x75\x44\x4c\x8c\xf7\x5e\x7f\x07\x00\x00\x00\xff\ +\xff\x62\x7a\xf9\xf1\x27\x6c\xad\x03\xe3\xdf\x7f\xff\x05\xb8\x58\ +\x18\x90\x6b\xe0\xff\xff\x18\xfe\x3e\x63\x40\xec\x77\x1c\x05\x44\ +\x82\xff\x0c\x0c\x0c\x0c\xff\x5e\x31\xfc\xfb\x02\xe5\xff\xff\xcf\ +\xc0\xc0\x20\xcc\xc3\x0a\x19\x6d\xfb\xcf\xc0\xc0\xc4\xc8\xf0\xfa\ +\xf3\x2f\x00\x00\x00\x00\xff\xff\x62\x7a\xf7\xf5\x0f\x13\x23\x74\ +\x39\xe2\xbf\xff\x0c\x90\xf2\x07\xb1\x86\xeb\xff\x67\x86\xbf\x6f\ +\x10\x26\x8e\x02\xe2\x01\x23\x03\xc3\xdf\x0f\x0c\xff\xde\x32\x30\ +\x30\xc0\x43\x4f\x84\x97\x0d\x1a\xb6\xff\x19\x98\x98\x18\x3f\x7c\ +\xfd\x03\x00\x00\x00\xff\xff\x62\xfa\xf0\xf5\x37\x13\x24\x46\x18\ +\x18\xfe\xff\xff\x0f\x89\x00\x84\x9e\xbf\x6f\x18\xfe\x7d\x18\xad\ +\x00\x48\x07\x90\xf2\xe3\x0f\xc3\x9f\xe7\x30\x2e\x03\x03\x03\x83\ +\x08\x2f\x2b\xb4\x02\x60\x60\x60\x66\x64\xfc\xf4\xe3\x0f\x00\x00\ +\x00\xff\xff\x62\xfa\xfd\xf7\x3f\xf2\x8e\x4a\x3e\x4e\x66\x24\x23\ +\x18\x18\xfe\xbe\x80\x6e\xbe\x18\xcd\x01\x24\x03\x46\x86\xff\x0c\ +\x0c\x7f\x9f\x31\x30\x30\xc0\x43\x8f\x8f\x83\x05\x76\x7a\x00\x64\ +\xd8\xff\x3f\x00\x00\x00\xff\xff\x62\xfa\xf5\xe7\x1f\x3c\x02\x18\ +\x19\x18\x58\x99\xd1\x52\xfb\xe8\xdc\x2f\x85\x00\x25\x00\x59\x98\ +\x51\x36\x10\x33\x32\x30\x00\x00\x00\x00\xff\xff\x62\xfa\xf6\xeb\ +\x1f\x13\x23\x23\x24\x82\x98\x98\x18\x05\x38\xe1\xc7\x59\x41\x72\ +\xc0\x6b\x58\x13\x69\x14\x90\x08\x20\x21\xfd\xe7\x15\x03\x03\x74\ +\x76\x8c\x81\x81\x41\x80\x93\x05\x6d\xf7\x24\x00\x00\x00\xff\xff\ +\x62\x62\x44\x0d\x5b\x8c\x82\x66\x74\xf8\x81\x42\x80\x12\x80\x98\ +\xe5\x38\x00\x00\x00\xff\xff\x1a\xed\xdf\x0e\x30\x00\x00\x00\x00\ +\xff\xff\x42\x8f\x00\x8c\xb2\x66\x34\x07\x50\x08\x50\x02\x10\xb3\ +\x28\x07\x00\x00\x00\xff\xff\x42\x8f\x80\x3f\x68\x5b\x99\x18\xb9\ +\xa8\xee\xa2\x91\x05\x18\xb9\x91\x79\x7f\x30\x76\x68\x00\x00\x00\ +\x00\xff\xff\x62\xe2\xe5\x60\xf9\x0b\x5b\x7a\xf5\xf7\xdf\xff\x0f\ +\xdf\xe0\xdb\x1c\x19\x19\x18\x18\x18\x98\x04\x47\xbb\xc1\x64\x02\ +\x48\x50\x33\x0b\x32\x30\x30\x30\xc0\x66\xb6\x3e\x7e\xfb\xf3\xf7\ +\xef\x7f\xe4\x8a\x17\x00\x00\x00\xff\xff\x82\x2f\x91\x83\x82\xbf\ +\x68\x31\xc4\xc8\x01\x31\x8c\x96\x2e\x1d\xd6\x00\x1a\x80\x50\x80\ +\x16\xbc\xff\x19\x18\x00\x00\x00\x00\xff\xff\x62\xe2\x62\x67\xfe\ +\xf7\xff\x3f\xbc\x70\x7a\xfb\x05\xde\x6e\x65\x62\x60\x60\x60\x60\ +\x96\x62\x60\xe2\x80\xce\xf4\x8f\x02\x12\x00\x23\x03\xc3\x3f\x06\ +\x26\x06\xd8\x79\x8c\xd0\xa2\xfe\xed\xd7\xdf\x90\x69\x61\xc8\xd2\ +\x44\x2e\x56\x26\x00\x00\x00\x00\xff\xff\x62\x12\xe4\x66\xf9\x07\ +\xab\x27\x98\x18\x19\xdf\x7c\xfe\x85\x62\x0e\x93\x10\x03\x93\x20\ +\xcc\xc4\x51\x40\x0a\xf8\xff\x9f\x81\x91\x83\x81\x09\x72\x04\x20\ +\x34\xf4\xde\x7c\x42\x6c\x64\xff\xfb\xef\x3f\x1f\x17\x0b\x00\x00\ +\x00\xff\xff\x62\x12\xe2\x66\x85\x1c\x68\xf8\xff\x3f\x03\x13\x13\ +\xc3\xbb\x2f\xbf\x19\xa0\x93\x01\x8c\x0c\x0c\xff\x19\x98\x38\x18\ +\x98\xc5\x46\xfb\x62\xa4\x03\x48\x0d\x2a\xc4\xc0\x24\x84\x2c\xfa\ +\xf6\xcb\x2f\x68\x05\xc0\xc8\xf0\xef\x3f\x83\x20\x37\x2b\x00\x00\ +\x00\xff\xff\x62\x92\x11\xe2\xf8\xff\x0f\x3a\x42\xcd\xcc\xc4\xf8\ +\xf6\xcb\xef\x7f\xff\xff\xc3\x2a\x86\x7f\x0c\x0c\x8c\xb0\x4c\x34\ +\x0a\x48\x02\x8c\x0c\xff\x19\x18\x58\xa4\x19\x98\x38\xa1\x5b\xdf\ +\x19\x19\x19\x18\x18\x5e\x7f\xfe\xc5\xc4\x04\x3d\x87\xe3\xdf\xbf\ +\xff\x52\x02\xec\x00\x00\x00\x00\xff\xff\x62\x92\x17\xe1\x84\xc4\ +\xc9\xff\xff\x0c\xac\x4c\x4c\xaf\x3f\xfd\x7a\xf7\xe5\x0f\x03\xec\ +\xa4\x20\x06\x06\x06\x06\x36\x3d\x06\x06\x0a\x8e\x86\x1d\x99\x00\ +\xba\x25\x43\x9b\x81\x81\x81\xe1\xff\x5f\xc8\xe8\xff\xcf\x3f\xff\ +\x9e\xbd\xff\xc9\xca\xcc\x04\x99\x01\xfb\xff\x9f\x41\x41\x84\x13\ +\x00\x00\x00\xff\xff\x62\x12\xe7\x63\x65\x65\x61\xfc\xf7\x1f\x72\ +\x0e\x16\xc3\x97\x9f\x7f\x21\xd5\xc0\x7f\x78\xcb\x87\x55\x8b\x81\ +\x61\xb4\x1d\x44\x16\x60\xd3\x82\x32\xfe\x33\x30\x30\x30\xbc\xff\ +\xf2\xfb\xc3\xb7\x3f\x2c\x4c\xd0\xc1\x7f\x26\x26\x46\x09\x01\x36\ +\x00\x00\x00\x00\xff\xff\x62\x92\x15\xe6\x84\x9c\xb8\xcd\xc8\xc0\ +\xc0\xc4\xc4\xf8\xe3\xf7\xdf\x7b\xaf\xbf\x33\x40\x97\x38\x32\x31\ +\x30\x30\x30\xb0\xeb\x33\x30\x0d\xa1\x03\x0f\x07\x07\x80\x2c\x0d\ +\x62\x37\x66\x60\x60\x60\x80\x6d\x8b\x7c\xf8\xf6\xc7\x97\x1f\x7f\ +\x20\xab\xd2\xff\xfe\xfb\xcf\xc5\xc6\xac\x28\xca\x09\x00\x00\x00\ +\xff\xff\x62\x12\xe2\x61\x95\x12\xe4\xf8\xf5\x07\x31\x2b\x70\xfd\ +\xd9\x57\x98\x31\x90\x7c\xa4\xce\xc0\x22\xcf\xf0\xff\xff\xe8\xc2\ +\x08\xa2\x01\x23\x03\xc3\x3f\x06\x66\x01\x06\x36\x43\x06\x06\x06\ +\x78\xb8\xdd\x7c\xfe\x15\x32\xfb\x02\xd9\x00\x20\xca\xc7\x26\x23\ +\xc8\x01\x00\x00\x00\xff\xff\x62\x62\x64\x60\x50\x10\xe5\xf8\x83\ +\xb4\x62\xeb\xce\xcb\x6f\x0c\xd0\x7d\x61\xb0\x53\x09\xd8\x8d\x19\ +\xfe\x8f\x56\x03\xc4\x03\x26\x86\x7f\x0c\x0c\x6c\xba\x0c\x4c\x82\ +\x90\x86\x0c\x24\xe4\x6e\xbe\xf8\x06\xdb\x82\xc7\xf8\xfb\xef\x7f\ +\x59\x21\x76\x76\x56\x26\x00\x00\x00\x00\xff\xff\x62\x62\x60\x60\ +\x50\x16\xe3\x82\x1e\xd2\xff\x9f\x81\x8d\x85\xf1\xe1\x9b\xef\xef\ +\xbf\xfe\x66\x44\xae\x87\x39\x6c\x18\x18\x18\x46\x5b\xa2\xc4\x02\ +\xe8\x81\x7e\x16\x0c\x0c\x90\xe5\x10\x0c\x4c\x8c\x8c\xbf\xfe\xfc\ +\xbb\xf3\xe2\x1b\x1b\x0b\x13\x7c\x05\xa2\xa2\x28\x27\x03\x03\x03\ +\x00\x00\x00\xff\xff\x62\x62\x60\x60\x30\x90\xe7\xe5\x61\x67\x86\ +\xac\xd8\x62\x65\x66\x7a\xfb\xe5\x37\x64\xdd\xe8\xbf\xff\xff\xa1\ +\xd5\x00\xa7\x0b\x03\x13\xcb\x10\x3f\x80\x92\x8e\x00\x52\x01\x70\ +\x79\x30\x30\x30\x30\x30\x42\xcf\x26\xbe\xf9\xfc\xeb\xd3\xf7\x3f\ +\xd8\x61\x2b\x10\x59\x99\x19\x8d\x15\xf9\x19\x18\x18\x00\x00\x00\ +\x00\xff\xff\x62\x62\x60\x60\x90\x13\xe6\x10\xe5\x63\xfb\x05\x9b\ +\x1c\xfe\xfb\xef\xff\x95\xa7\xc8\xd5\xc0\x7f\x06\x56\x2d\x06\x36\ +\xb5\xd1\x6a\x80\x38\xc0\xc8\xf0\xff\x1f\x03\x8b\x18\x34\x07\x30\ +\x40\xf7\x20\x5d\x7d\xf6\x15\xb2\x57\x92\x11\x76\xaa\x9f\x8a\x38\ +\x27\x03\x03\x03\x00\x00\x00\xff\xff\x62\xfa\xf7\xef\x3f\x3b\x0b\ +\x93\xb6\x34\xcf\xcf\x3f\xff\x20\xc7\x18\xb0\xb3\x30\x9d\xb9\xf7\ +\xf1\xef\xbf\xff\xcc\x90\xfe\x30\x24\xe1\x73\x7a\x8f\xae\x50\x27\ +\x0e\x30\x33\xfc\x67\x64\xe0\x74\x65\x60\xe4\x62\x60\xf8\xcb\xc0\ +\xc0\x08\xdd\x83\x74\xe7\x23\x0b\xf4\x7c\x7b\xc6\x9f\xbf\xff\xa9\ +\x8a\x73\x09\x71\xb3\xfe\xff\xcf\x00\x00\x00\x00\xff\xff\x62\x82\ +\xb4\xef\x2d\x55\xf8\x21\x39\xe5\xff\x7f\x06\x0e\x36\xa6\x3b\x2f\ +\xbf\xdd\x7a\xf1\x8d\x81\x11\xa9\x14\xe2\x89\x65\x60\x62\x1e\x2d\ +\x85\x88\x00\xff\x18\x18\xff\x33\xf0\xc4\x43\x38\x90\x6d\x5e\xcf\ +\x3f\xfc\xbc\xfc\xf8\x0b\x27\x2b\xf4\x0c\x88\xdf\x7f\xff\x99\x2b\ +\xf3\x33\x30\x30\xfc\xfb\xff\x1f\x00\x00\x00\xff\xff\x82\xee\x11\ +\x33\x52\xe0\x13\xe4\x66\xfd\xfd\x17\x7a\xec\xd3\x8f\xdf\xff\x0e\ +\xdf\x7c\xcf\x00\xad\x83\x99\x18\x18\xfe\x31\xb0\xe9\x32\xb0\x9b\ +\x40\x8e\x2d\x1e\x30\xaf\x0d\x01\xc0\xc4\xf0\xff\x1f\x03\x9b\x22\ +\x03\x87\x3d\x64\xed\x0f\xa4\x07\x70\xe2\xce\xc7\x0f\xdf\xa0\x47\ +\x4c\xff\xfb\xff\x9f\x8b\x8d\x19\x12\x01\x8c\x8c\x0c\x00\x00\x00\ +\x00\xff\xff\x62\x82\xef\x65\x35\x94\xe7\xfd\xfe\xeb\x1f\x74\x2f\ +\x2b\x2b\xf3\xc1\x1b\xef\x7f\xfe\xf9\x07\x9d\x2e\x80\x6c\x4d\xe5\ +\xcb\x60\x18\x1d\x96\xc6\x0f\x18\x99\x18\xfe\x33\x30\xf0\x24\x33\ +\x30\xb2\x41\x4a\x0b\xc8\x21\x66\x7b\xae\xbe\x65\x65\x86\xec\xc1\ +\x66\xf8\xfe\xeb\x9f\xba\x14\xb7\xb2\x38\x27\x64\x4b\x24\x00\x00\ +\x00\xff\xff\x82\xec\x94\x67\x60\x60\x60\x70\xd2\x12\x86\xdc\xd5\ +\x01\x2f\x85\xce\xde\xff\xc4\x08\x39\xc7\x03\x72\x10\x34\x77\x04\ +\x03\x9b\x34\xc3\xbf\x7f\xa3\x55\x31\x0e\xc0\xc8\xf0\xff\x2f\x03\ +\x33\x0f\x03\x6f\x1a\x03\x03\x03\x03\x23\x74\xd3\xf5\xcd\x17\x5f\ +\x2f\x3e\xfa\xcc\xc5\xce\x0c\x39\x12\xe2\xd7\x9f\x7f\x0e\x1a\x82\ +\xf0\x53\x83\x00\x00\x00\x00\xff\xff\x82\xee\x94\x67\x60\x60\x30\ +\x53\xe2\x17\xe3\x65\xfd\xf5\xe7\x1f\x7c\x33\x2a\xe4\x5c\x0f\xc8\ +\xb9\x67\x0c\x0c\x7f\x18\x18\x39\x18\x78\xd3\x19\xe0\xb5\xc2\x28\ +\x40\x07\xcc\x0c\xff\xfe\x33\xf0\x44\x31\x30\x8b\x42\xce\x36\x81\ +\x54\xab\x3b\x2f\xbd\xfd\xf9\x07\xba\x35\xec\xef\xbf\xff\xbc\x1c\ +\x2c\x36\x6a\x82\x0c\xb0\xee\x19\x00\x00\x00\xff\xff\x82\xde\x79\ +\xf2\xef\xdf\x7f\x41\x6e\x16\x6b\x35\x81\x6f\xbf\xfe\x32\x31\x41\ +\x0e\xb7\x61\x3e\x72\xeb\xc3\x93\x77\x3f\x98\x18\x21\x27\xef\x32\ +\x33\x30\xfc\x67\xe0\xcb\x61\x60\x11\x66\xf8\xf7\x77\xb4\x24\xc2\ +\x00\x90\x29\x30\x76\x06\x81\x72\x08\xf7\xff\x7f\x06\x26\x26\xc6\ +\x8f\xdf\xfe\xec\xbe\xf2\x96\x1b\x72\x04\x0a\x13\xe3\xd7\x9f\x7f\ +\x8d\x14\x78\xe5\x45\x38\xe0\x63\xfe\x00\x00\x00\x00\xff\xff\x42\ +\x49\xcb\xbe\x86\x62\x6c\x2c\x4c\x90\x75\x11\xcc\x4c\x8c\x9f\xbf\ +\xff\x59\x73\xfa\x25\x03\x03\x6c\xf3\x31\xc3\x5f\x06\x26\x41\x06\ +\x9e\xd8\xd1\xaa\x18\x1b\x60\x66\xf8\xf7\x8f\x81\xdb\x97\x81\x45\ +\x09\x92\xfc\x21\xbb\x1c\x37\x5f\x78\xfd\xe2\xe3\x4f\x56\x16\x26\ +\xe8\x94\x0b\x03\x83\xaf\xa1\x18\x03\xd2\x76\x0b\x00\x00\x00\x00\ +\xff\xff\x82\x9d\x17\xc4\xc4\xf8\xff\x3f\x83\xae\x2c\x8f\x81\x1c\ +\xef\xb7\x5f\x7f\xa0\x27\x3c\x71\xb0\x6c\xbf\xf8\xe6\xf5\xa7\x5f\ +\x8c\xd0\x13\x9e\x98\x19\x18\xfe\x31\x08\x54\x31\xb0\x8a\x33\xfc\ +\x1f\xad\x09\x90\x01\x64\xf4\x8d\x8b\x41\xb0\x1d\x32\xfd\x02\xa9\ +\x60\xbf\xfd\xfa\xbb\xfe\xcc\x2b\xc4\x09\x64\xbf\xff\xaa\x8a\x73\ +\x59\xab\x0a\xfc\x67\x60\x80\x5f\x42\x09\x00\x00\x00\xff\xff\x42\ +\x3e\xb4\xef\x3f\x03\x03\x83\x97\xbe\xc8\xef\x3f\xf0\x13\x9e\x18\ +\xdf\x7e\xf9\xbd\xe5\xc2\x1b\x46\xa8\x2c\x23\xc3\xff\x7f\x0c\xcc\ +\xa2\x0c\x02\x95\xb0\x4b\x61\x47\x01\x03\x03\x03\x03\x03\x23\x33\ +\xc3\xbf\x7f\x0c\x7c\x59\x0c\xac\x2a\x90\xc5\xe4\x90\x10\xdf\x77\ +\xed\xdd\xa3\xb7\xdf\x21\x27\x90\x31\x33\x32\x7e\xff\xf9\xcf\x55\ +\x47\x88\x95\x05\xe5\x86\x19\x00\x00\x00\x00\xff\xff\x42\x04\x22\ +\xe4\x84\x27\x7b\x0d\x21\x39\x61\x8e\x9f\x7f\xfe\x41\x9a\xa7\x5c\ +\xec\xcc\x9b\xce\xbd\xfa\xfa\xf3\x2f\xf4\xe8\x63\xc8\x61\x1d\x3c\ +\x29\x0c\xac\xd2\x0c\xff\xfe\x8c\x66\x02\x06\x06\x06\x58\xba\xe4\ +\x61\xe0\x2f\x62\x60\xf8\xc7\xc0\xc8\x04\x19\x38\xfe\xfb\xef\xff\ +\xea\x93\x2f\xe1\xa3\x6f\xbf\xff\xfe\x17\xe6\x65\xf5\xd0\x13\x65\ +\x40\xde\x7f\xc7\xc0\x00\x00\x00\x00\xff\xff\x62\x42\x32\x86\xe1\ +\xdf\xbf\xff\x3c\x1c\xcc\x91\x16\x92\xdf\x60\x21\xce\xce\xc2\xf4\ +\xf8\xdd\x8f\x95\x27\x5f\xc0\x2e\x83\x80\xcc\xd4\x73\x33\x08\x4f\ +\x81\x69\x1a\x05\x4c\x0c\xff\xfe\x31\x08\x75\x32\x30\x4b\x42\x56\ +\xfa\x40\x8e\x1c\xdb\x76\xf1\xcd\xb5\xa7\x5f\xb8\xd8\x98\xff\xfd\ +\x67\x60\x62\x62\xfc\xfc\xe3\x4f\x80\x91\x98\x04\x3f\xe4\xce\x11\ +\x84\x66\x00\x00\x00\x00\xff\xff\x42\x49\xc2\x90\x40\xf7\xd0\x17\ +\x96\x11\x82\x65\x82\x7f\xff\x79\x39\x59\x96\x1e\x7b\x0e\xbb\x88\ +\xe0\x3f\xf4\x42\x27\xee\x00\x06\xde\x18\x86\x7f\x7f\x61\x77\x0b\ +\x8d\x58\xc0\xcc\xf0\xef\x2f\x03\xb7\x13\x03\x5f\x16\xc3\xff\xbf\ +\x0c\x0c\xcc\x90\xd2\xff\xfd\xd7\xdf\xb3\xf6\x3f\xe1\x64\x67\x86\ +\x54\xc5\x90\x13\x80\x02\x4d\xc4\xfe\xc3\x1a\xfd\x70\x00\x00\x00\ +\x00\xff\xff\x42\x89\x00\x48\x32\xe7\xe5\x60\x09\x31\x13\x87\x66\ +\x02\xc8\xdd\xb4\x3f\xfe\x4e\xda\xf5\x88\x81\x01\x36\x33\x0c\x39\ +\xb5\x43\xb0\x95\x81\x99\x9f\xe1\xdf\xbf\x11\x9c\x0f\x20\x0d\x49\ +\x16\x06\xa1\x5e\xe8\xb6\x48\xd8\x61\x89\x33\xf6\x3d\x79\xf1\xf1\ +\x27\x3b\x0b\xd3\x7f\x58\xf2\xf7\xd6\x17\x91\x14\x60\x87\x9f\xa0\ +\x08\x07\x00\x00\x00\x00\xff\xff\x42\x2f\xc4\x21\x99\x20\xd8\x44\ +\x4c\x49\x94\xeb\xc7\xaf\xbf\x8c\xb0\x8b\x08\x0e\xde\x78\xb7\xef\ +\xda\x3b\x26\xe8\x45\x04\x4c\x0c\x0c\xff\x19\x58\xe4\x18\x44\xa7\ +\x33\xfc\xff\x37\x72\x9b\xa4\x8c\xcc\x0c\xff\xfe\x32\x08\x75\x32\ +\xb0\x19\x40\xb6\xa3\x42\xce\x17\xbe\xf8\xe8\xf3\xa6\x73\xaf\xf8\ +\x39\x59\x21\x47\x44\xfc\xfe\xf3\x4f\x94\x97\x2d\xd6\x46\x0a\x92\ +\x39\xd0\xcc\x00\x00\x00\x00\xff\xff\xc2\x58\x9e\xce\xc8\xf0\xff\ +\xff\x7f\x4e\x36\xe6\x0c\x67\x99\x5f\xb0\x65\xa4\x90\xd1\xa1\x99\ +\xfb\x9e\x7c\xff\xf5\x17\x76\x82\x0a\x33\x03\xc3\x1f\x06\xee\x48\ +\x06\xa1\x72\x86\x7f\x7f\x18\x18\xd1\xae\x89\x1f\x01\x80\x91\x85\ +\xe1\xef\x1f\x06\xbe\x38\x06\xfe\x22\xc8\x15\xc4\x90\xad\xbd\xff\ +\xfe\xff\x9f\xba\xe7\x31\xbc\x9a\x85\x9c\x3f\x99\x68\x2f\x2d\xcc\ +\xc3\xfa\xff\x3f\x7a\xf2\x67\x60\x60\x00\x00\x00\x00\xff\xff\xc2\ +\xd2\x8c\x81\x8c\xc7\x39\x69\x09\x39\x68\x0a\x7d\x82\x5d\x44\xc0\ +\xc1\xca\x74\xef\xd5\xb7\x39\x07\x9e\x22\x1d\x7d\xcc\xcc\xc0\xf0\ +\x97\x41\xb0\x95\x81\xd3\x9c\xe1\xef\xef\x11\x56\x19\x30\x33\xfc\ +\xfb\xc3\xc0\xa6\xcc\x20\x3c\x15\x7e\x24\x0a\xa4\xaf\xbb\xf2\xc4\ +\xcb\xf3\x0f\x3e\x71\xb3\x33\x43\x86\x9a\xbf\xfe\xfc\x6b\x20\xcf\ +\x17\x62\x2a\xf6\xef\xff\x7f\x46\x6c\x17\xd0\x03\x00\x00\x00\xff\ +\xff\xc2\x7d\x8b\x12\x03\x43\x96\x8b\x2c\x37\x3b\x33\xfc\x0e\x07\ +\x7e\x2e\x96\xa5\xc7\x9e\x1f\xbe\xf9\x1e\x76\x23\x0a\x64\xd0\x88\ +\x89\x41\x6c\x35\x03\x9b\xca\x48\x6a\x95\x32\x31\xfc\xff\xcf\xc0\ +\x2c\xc6\x20\xbe\x81\x81\x89\x87\x81\x81\x81\x81\x81\x11\x72\xd9\ +\xed\x95\x27\x5f\xa6\xed\x7d\xcc\xcb\xc9\x02\xbd\x31\xe6\x3f\x03\ +\x23\x03\x43\xae\x9b\x2c\x13\x6c\x40\x0d\x13\x00\x00\x00\x00\xff\ +\xff\xc2\x1e\x64\x90\x83\x2c\xe5\x85\x39\xd2\x9d\x64\x3e\x7d\x83\ +\x9e\xe5\xfd\x9f\x81\x81\x9d\x95\xa9\x6d\xd3\xfd\xe7\x1f\x7e\xc2\ +\xae\x66\x62\x62\x60\xf8\xc7\xc0\x22\xcb\x20\xb1\x95\x81\x91\x6b\ +\x64\xcc\x59\x32\x42\xfb\xbd\x12\xeb\x18\xd8\x74\x18\x18\xfe\x40\ +\x26\x1d\x19\x19\x19\x3f\x7d\xff\xd3\xb8\xfe\xee\x7f\xd8\x35\xd6\ +\x2c\xcc\x8c\xef\xbf\xfe\x8e\xb2\x92\xd4\x93\xe5\x85\xdd\xba\x83\ +\x05\x00\x00\x00\x00\xff\xff\xc2\x19\x5e\x90\x64\x1e\x66\x26\x61\ +\xaf\x29\x88\x7c\x23\xca\x87\x6f\xbf\x9b\xd6\xdf\xfb\xfd\xf7\x3f\ +\x6c\x3f\x3d\x33\x03\xc3\x1f\x06\x56\x35\x06\xf1\xc5\x48\x4e\x1c\ +\xae\x80\x91\x81\x81\x89\xe1\xdf\x5f\x06\xd1\x69\x0c\xec\xd6\x90\ +\x2b\xbc\xfe\xc3\x5a\x3e\x1d\x5b\xee\x3f\x7c\xf3\x03\x7a\xaf\x29\ +\x13\xe3\x97\x1f\x7f\xf5\xe4\x78\x52\xec\xa5\x91\x6e\x16\xc7\x02\ +\x00\x00\x00\x00\xff\xff\xc2\x97\x60\x19\x19\x19\x19\x19\x19\x2a\ +\x7c\x14\x05\xb9\x59\x7f\xc1\x6e\x44\xe1\xe5\x60\x39\x75\xff\x63\ +\xcf\xb6\x07\x48\x95\x01\x0b\x03\xc3\x1f\x06\xae\x20\x06\xf1\x15\ +\xb0\x61\xbb\x61\x99\x0f\xe0\xa1\x3f\x99\x81\x37\x13\x7a\x65\x2f\ +\xec\xca\xaf\xd9\x07\x9e\xec\xbc\xf4\x16\x72\xc5\x33\xa4\x4b\xcb\ +\xc2\xc4\x58\xed\xa7\xc4\xce\x4a\xe0\x8e\x6d\x00\x00\x00\x00\xff\ +\xff\xc2\x17\x52\x90\xcb\xb0\xc4\xf8\xd8\x4a\xbd\x14\xbe\xff\x82\ +\x1e\x3e\xf7\xe7\xdf\x7f\x21\x6e\xd6\x75\x67\x5e\xae\x39\xf5\x92\ +\x99\x89\x11\xb6\xa7\x8c\x85\x81\xe1\x37\x03\x77\x18\x2c\x0e\x86\ +\xdf\x70\x29\x13\x2c\xf4\xa7\x30\xf0\xe5\x30\x30\xfc\x81\x34\x3a\ +\xfe\xfc\xfb\xcf\xc2\xc4\xb8\xef\xda\xbb\xb9\x07\x9f\x0a\x72\x43\ +\xaf\x18\x67\x62\x62\xfc\xf8\xfd\x4f\x8e\xab\x9c\x8a\x38\x17\x9e\ +\xc2\x07\x02\x00\x00\x00\x00\xff\xff\x22\x90\x54\x21\x05\x91\xb3\ +\xb6\x50\x94\x95\xc4\xfb\x2f\xb0\x59\xcd\x7f\xff\xf9\x38\x58\x7a\ +\xb7\x3f\x3c\x72\xeb\x03\x0b\xe2\x8a\x32\x56\x86\xff\xf0\x38\x60\ +\x66\xf8\xff\x17\x76\xa1\xea\x30\x00\x4c\x0c\xff\xff\x41\xd3\x3e\ +\x5f\x36\x72\xda\x67\x61\x62\xbc\xf2\xe4\x4b\xd3\xfa\xbb\x1c\xac\ +\xcc\xff\xe1\xb7\x3d\x7e\xfb\xed\xa5\x27\x12\x66\x2e\x8e\x74\xdb\ +\x23\x4e\x00\x00\x00\x00\xff\xff\x22\x5c\x56\x40\x5a\xa5\xd9\x2e\ +\x72\xa6\x4a\x7c\xd0\x56\x29\x03\x03\x03\x23\x03\x3b\x2b\x53\xcd\ +\x9a\xdb\x67\xee\x7f\x42\xe4\x03\x46\x56\x06\x86\x3f\x0c\xdc\x61\ +\x0c\xd2\x07\x19\x58\x95\x18\xfe\xfe\x1d\x0e\xfd\x03\x46\x16\xe8\ +\x18\xb0\xd4\x56\xe4\xb4\x0f\x09\xdc\xdb\x2f\xbe\x95\xae\xb8\xf5\ +\xef\x3f\x03\x0b\x13\x23\xe4\x9a\x8b\xaf\xbf\xfe\xaa\x88\x71\x95\ +\xf9\x28\x62\xed\x76\x61\x02\x00\x00\x00\x00\xff\xff\x22\x1c\x01\ +\x90\xfd\x1c\xac\xcc\x8c\xf5\x81\xca\xc2\x3c\xac\x3f\x7e\x43\x96\ +\x0f\x31\xb0\x30\x31\xfe\xfb\xc7\x50\xb9\xea\xf6\xcd\xe7\x5f\x91\ +\xf2\x01\x0b\x03\xc3\x1f\x06\x76\x2b\x06\xc9\x7d\x0c\xec\x3a\x0c\ +\x7f\x7f\x33\x30\x30\x0f\xe1\x6a\x19\xd2\xdb\x62\x91\x63\x90\xdc\ +\xcd\xc0\xe9\x05\xbd\x38\x13\x16\xfa\xcf\x3e\xfc\x2c\x5d\x71\xeb\ +\xd3\xb7\x3f\xec\xac\x4c\x7f\xff\xff\x67\x62\x64\xf8\xfd\xf7\x3f\ +\x1b\x33\x53\x43\x90\x32\x2f\x07\x33\xe4\x14\x5c\x82\x00\x00\x00\ +\x00\xff\xff\x22\xaa\xb6\x84\x5c\xbe\x24\x29\xc0\xde\x11\xa6\xc6\ +\xcc\xc4\xf0\xe7\xdf\x3f\x66\x46\x86\xbf\xff\xff\xb3\xb1\x32\xfd\ +\xf8\xfd\xaf\x60\xc9\xcd\x0b\x0f\x3f\x33\xa3\xc5\x01\x8b\x3c\x83\ +\xd4\x51\x06\xfe\x14\x86\x7f\x7f\x87\x66\x95\xc0\xcc\xc0\xc0\xc4\ +\xf0\xf7\x0f\x03\x4f\x30\x83\xf4\x29\x06\x36\x7d\xb4\x5a\xf7\xce\ +\xcb\x6f\xb9\x8b\x6e\xbc\xfe\xf4\x8b\x8b\x9d\xf9\xcf\xbf\xff\x4c\ +\x8c\x0c\xff\xfe\x33\xfc\xfc\xfd\xaf\x29\x58\x19\x72\xd1\x2f\x31\ +\xc9\x9f\x81\x81\x01\x00\x00\x00\xff\xff\x22\xb6\xb9\x02\x19\x05\ +\xd2\x95\xe5\xe9\x8e\x50\xfb\xf7\x8f\xe1\xef\x3f\x06\x66\x46\x86\ +\xbf\xff\xfe\xb3\xb3\x32\x7d\xf9\xf9\xb7\x60\xe9\xcd\x13\x77\x3e\ +\x42\xe2\xe0\x3f\x03\x03\x03\x03\x0b\x03\xc3\x3f\x06\x26\x3e\x06\ +\x91\xd9\x0c\xa2\x53\x18\x18\xd8\x18\xfe\xfd\x1d\x3a\x59\x81\x11\ +\x3a\xc8\xf3\xff\x1f\x83\x50\x03\x83\xf8\x1a\x06\x66\x71\xe8\x95\ +\xbd\xb0\xd0\xbf\xf6\xec\x6b\xee\xa2\x1b\x2f\x3e\xfc\x84\x87\x3e\ +\x03\x03\xc3\xb7\x9f\x7f\x1b\x83\x95\x6d\xd5\x05\x89\x29\xfa\xe1\ +\x00\x00\x00\x00\xff\xff\x62\xc4\x73\xd3\x2a\x26\x80\x18\xbd\xe7\ +\xea\xbb\xda\xb5\xb7\x39\x59\x99\x99\x18\x19\xfe\xfe\x67\x60\x66\ +\x64\xfc\xf3\xef\xff\xdf\x7f\xff\x4b\xbd\x15\xfc\x0c\x45\x61\x97\ +\x06\x31\x30\x30\xfc\x87\xae\x6e\xff\x79\x9a\xe1\x6d\x09\xc3\xf7\ +\x43\x0c\x4c\x90\x22\xf5\xef\xe0\xdd\x70\xc3\xc8\xc2\xf0\xff\x0f\ +\xc3\x3f\x06\x06\x0e\x63\x06\xa1\x0e\x06\x4e\x17\xc8\xf2\x42\x48\ +\x6f\xeb\x3f\xc3\x7f\x26\x46\xc6\x43\x37\xde\x37\x6e\xb8\xfb\xfb\ +\xcf\x7f\x76\x56\x26\x78\xe8\x7f\xfa\xfe\xa7\xcc\x5b\x31\xd4\x8c\ +\xa8\x8a\x17\x19\x00\x00\x00\x00\xff\xff\x22\x2d\x02\x18\x60\x71\ +\xb0\xfb\xca\xdb\xfa\x75\x77\xd9\x59\x99\x98\xa1\x71\xc0\xf0\xef\ +\x3f\xc3\xd7\x9f\x7f\x63\xad\x25\xb3\x5c\xe4\x20\xed\x57\xc4\x75\ +\xcf\x90\xf2\xe7\xd3\x74\x86\x77\x65\x0c\x7f\xbf\x30\x30\x31\xc0\ +\x6e\x43\x1e\x54\x80\x99\x81\xe1\x2f\xc3\x3f\x06\x06\x26\x56\x06\ +\xc1\x06\x06\x81\x0a\xc8\x2d\x18\xd0\x71\x1e\x58\x67\x6a\xd1\x91\ +\x67\x33\xf7\x3d\x61\x65\x61\x64\x61\x82\xce\x3b\x32\x30\x30\x7c\ +\xfe\xfe\xb7\xc4\x4b\x3e\xcc\x5c\x82\xd4\xd0\x67\x60\x60\x00\x00\ +\x00\x00\xff\xff\x22\x39\x02\x18\x50\xe3\x80\x8d\x85\x89\x85\x89\ +\x11\xe2\x14\x46\x46\xc6\x77\x5f\x7e\x3b\x68\x08\xd6\x04\x28\x09\ +\x71\xb3\x22\xb9\x06\xb2\xfd\x80\x89\xe1\xf7\x2d\x86\x8f\x7d\x0c\ +\x9f\x17\x30\xfc\xfb\xc9\xc0\xc4\x08\xbb\x7a\x6e\xc0\x73\x03\x33\ +\x03\xc3\x7f\x86\x7f\xff\x18\x98\x18\x19\xb8\x23\x19\x04\x4a\x19\ +\xd8\x0c\x18\xa0\x17\xf4\x42\x0f\x1e\x66\x66\x62\xfc\xfe\xeb\x6f\ +\xe7\xd6\x07\x9b\xcf\xbd\x16\xe0\x86\x9e\x6b\x08\x29\xf7\xbf\xfc\ +\x20\x3f\xf4\x19\x18\x18\x00\x00\x00\x00\xff\xff\x22\x27\x02\xe0\ +\x6e\x3a\x7e\xfb\x43\xd5\xea\x3b\x7f\xfe\xfd\xe7\x60\x65\x82\xd4\ +\xc0\x2c\xcc\x8c\x1f\xbf\xfd\x91\x11\xe2\xa8\xf2\x55\x34\x56\xe4\ +\x83\x67\x5b\x88\x26\x68\x56\xf8\x75\x99\xe1\x5d\x15\xc3\xb7\x2d\ +\x90\x73\xd5\x06\xae\x50\x62\x84\xa6\x71\xc8\x94\x12\xa7\x3d\x83\ +\x50\x1b\x03\xbb\x15\xb2\x53\xff\xfd\x67\x60\x60\xf8\xcf\xc4\xc8\ +\x78\xf3\xf9\xd7\x96\x8d\xf7\x6e\x3c\xff\x26\xc0\x05\x1d\x68\x63\ +\x62\x62\xfc\xf3\xf7\xdf\xaf\x3f\xff\x6b\xfd\x95\x50\x2f\x78\x27\ +\x0d\x00\x00\x00\x00\xff\xff\x22\x33\x02\x18\x60\x71\x70\xe6\xfe\ +\xa7\xea\xd5\xb7\x3f\xff\xf8\xcb\xc3\xce\x0c\xe9\x0d\x40\x2e\x84\ +\xfb\xff\xff\x7f\x9a\xa3\x4c\x9c\x8d\x14\x03\x03\xc3\xbf\x7f\xff\ +\x19\xa1\xfb\x64\xff\x21\x5a\x44\x3f\x4f\x31\x7c\x9c\xc8\xf0\x75\ +\x15\xc3\xbf\x3f\x0c\x8c\x0c\xb0\x5e\x1b\x1d\x32\x04\x23\x03\x03\ +\x13\x03\x23\x03\xc3\x7f\x58\xd0\x73\xfb\x31\xf0\x17\x31\x70\xd8\ +\x43\xbc\x05\x2d\xf1\x19\x18\xfe\xc1\xc2\x74\xc3\xd9\x57\x93\x76\ +\x3d\xfa\xf1\xfb\x1f\xdc\x8f\x2c\x4c\x8c\x90\x4b\x60\xea\x03\x95\ +\x9d\x10\x77\x2c\x93\x03\x00\x00\x00\x00\xff\xff\x22\x3f\x02\x18\ +\x60\x71\x70\xf7\xd5\xb7\xfa\x75\x77\x6f\x3e\xff\x26\xc0\xc5\x02\ +\xd9\x66\x03\xc9\x9b\x9f\x7f\xfc\x31\x55\xe4\xcf\x70\x96\xd1\x93\ +\xe5\x85\x2b\x66\x60\x60\x40\x94\x48\x0c\x0c\x0c\xbf\xae\x32\x7c\ +\x9e\xcf\xf0\x65\x31\xf4\x68\x2f\x68\xf5\xc0\x00\x2b\x01\xa8\x08\ +\x98\x60\x6d\xb0\xbf\x50\x83\x99\xf9\x19\x78\x22\x18\x78\x53\x18\ +\xd8\x4d\x60\x36\x42\x47\x73\x21\x23\xfb\x0c\x0c\x0c\xb7\x5f\x7e\ +\x9b\xb9\xef\xc9\xa1\x9b\xef\xb9\xd9\x98\x99\x99\xa1\xcb\x49\x58\ +\x98\x18\x3f\x7c\xff\x23\x23\xc8\x5e\x17\xa8\x6c\x20\xc7\x4b\x49\ +\xe8\x33\x30\x30\x00\x00\x00\x00\xff\xff\xa2\x28\x02\x18\x60\xc1\ +\xfa\xed\xd7\xdf\xae\x2d\x0f\xb6\x5c\x78\xcd\xc7\xc9\x02\xef\x10\ +\x30\x33\x31\x7e\xf9\xf1\x97\x99\x89\xc1\xd7\x50\x34\xd5\x51\x46\ +\x88\x9b\xf5\x3f\x03\xc3\xff\x7f\xf0\x3b\xcc\x90\x72\xc3\xdf\x37\ +\x0c\xdf\xb7\x30\x7c\x59\xc6\xf0\xfd\x10\xc3\xbf\x9f\x0c\x0c\xb0\ +\x41\x5f\x06\x16\xe8\x6a\x61\x68\x98\x91\xe4\x54\x46\x68\xa0\x43\ +\x12\xfb\x7f\xd8\xc6\x67\x26\x16\x06\x76\x4b\x06\x9e\x08\x06\x2e\ +\x7f\x06\x16\x69\x34\x97\x40\x56\x7e\x30\x31\x32\x7c\xfb\xf9\x77\ +\xfe\xe1\x67\x6b\x4e\xbd\xfc\xfe\xeb\x2f\x2f\x27\xcb\xbf\xff\xff\ +\x21\x3d\xdb\xff\x0c\xff\x3f\x7e\xfb\x63\xa7\x21\x58\xed\xa7\x24\ +\xcc\xc3\x4a\x61\xe8\x33\x30\x30\x00\x00\x00\x00\xff\xff\xa2\x34\ +\x02\x18\x90\x5a\x08\x6b\x4e\xbd\x9c\xb2\xe7\xd1\xaf\x3f\xff\x79\ +\x38\x98\xa1\x97\x64\x31\x32\xfc\xff\xcf\xf0\xf1\xfb\x1f\x19\x21\ +\x8e\x14\x7b\x69\x4f\x7d\x11\x4c\xdd\x28\xdd\xb4\xdf\x77\x19\x7e\ +\x1c\x65\xf8\xb6\x99\xe1\xd7\x59\x86\x3f\xf7\x11\x79\x00\x1a\x1f\ +\x4c\xd0\xd2\x03\x02\x90\x1d\x8e\x22\xf8\x8f\x81\xe1\x1f\x54\xf6\ +\x3f\x4c\x96\x45\x86\x81\xdd\x90\x81\xcb\x87\x81\xc3\x96\x81\x55\ +\x13\xa6\xfa\x2f\xd6\xb1\xdb\x43\x37\xdf\xcf\xdc\xf7\xe4\xce\xcb\ +\x6f\x7c\x9c\x2c\x90\xdc\xcc\xc0\xc0\xc0\xc8\xc8\xf0\xed\xe7\xdf\ +\xff\xff\x19\x92\xed\xa5\x93\xec\xa5\x91\x3d\x4e\x09\x00\x00\x00\ +\x00\xff\xff\xa2\x42\x04\x30\x30\x30\xc0\x2b\xdb\x1b\xcf\xbf\xf6\ +\x6c\x7d\x70\xee\xe1\x67\xc8\x95\x40\x10\xc0\xcc\xc4\xf8\xf3\xcf\ +\xbf\x1f\xbf\xff\x1a\xc9\xf3\x85\x59\x48\xd8\xaa\x09\x08\x72\xa3\ +\x8d\x11\xfd\x87\x9e\x4b\x01\x0f\x8b\xff\x3f\x18\x7e\xdf\x64\xf8\ +\x79\x9a\xe1\xc7\x31\x86\xdf\x37\x18\xfe\xdc\x65\xf8\xfb\x1a\x91\ +\x8a\x09\x02\x26\x06\x06\x26\x61\x06\x56\x25\x06\x56\x75\x06\x76\ +\x0b\x06\x76\x0b\x06\x56\x0d\x06\x26\xf8\xe1\x55\xff\x61\xd5\x2c\ +\x4a\xf0\x7d\xf9\xf1\xf7\xf8\x9d\x0f\x2b\x4f\xbe\x38\x71\xe7\x23\ +\x0b\x33\x23\x27\x2b\xf3\x5f\x98\x8d\x90\x33\x3e\xd5\x25\xb9\x4a\ +\x3c\x15\x20\x8d\x0b\x06\x2a\x6d\xdb\x05\x00\x00\x00\xff\xff\xa2\ +\x4e\x04\x40\x00\x24\x3f\xfe\xfe\xfb\x7f\xc1\xa1\xa7\x8f\xdf\xfd\ +\x80\x1f\x8a\xc0\xf0\x1f\x3a\xb5\xf0\xf5\xe7\xdf\x7f\xff\xff\xab\ +\x4b\x70\x7b\x1b\x88\x8a\xf1\xb3\x31\xfc\xc7\xf4\xc3\x3f\x58\x4c\ +\xa0\x0e\x5d\xfc\xfb\xc4\xf0\xf7\x19\xc3\x9f\x67\x0c\x7f\x9f\x31\ +\xfc\x79\xc8\xf0\xf7\x0d\xc3\xff\xef\x0c\xff\xde\x23\x14\x30\xf1\ +\x31\x30\xf2\x30\x30\x0b\x32\xb0\xc8\x33\x30\x4b\x31\x30\x4b\x32\ +\xb0\x48\xc3\x0e\xda\x41\x38\x10\x56\xca\xa3\x24\x79\x88\xff\x3f\ +\x7c\xfd\xbd\xed\xe2\x9b\xcb\x4f\xbe\x30\xfc\x67\xe0\xe1\x60\x86\ +\x94\x96\xd0\x81\x30\x06\xc6\x3f\xff\xfe\x0b\xf3\xb0\x26\xd9\x49\ +\xf3\x70\x30\x53\x5e\xec\x20\x03\x00\x00\x00\x00\xff\xff\xa2\x66\ +\x04\x30\x40\x6f\x85\x26\xac\xec\x3f\x96\xa0\x47\x57\xc2\xc0\xf0\ +\x1f\xba\xdf\x93\xfc\x31\x8c\xff\x0c\x0c\xff\x60\x1b\x1a\x18\xf1\ +\x1b\x42\x84\x93\x18\x18\xa8\x54\xec\x20\x03\x00\x00\x00\x00\xff\ +\xff\xa2\x72\x04\x30\x40\x3c\xfd\x0f\x9f\x99\x4c\x8c\x8c\xa4\x7b\ +\xe1\x3f\x02\xc1\xcd\x46\x31\xe5\x3f\xa2\xb8\x87\x86\x35\x81\x10\ +\xc7\x6e\x07\xc6\xa1\x7a\x0c\x30\x53\xff\x93\xe9\x72\x02\x00\x00\ +\x00\x00\xff\xff\x62\xfc\x37\x7a\x35\xe1\x80\x02\x00\x00\x00\x00\ +\xff\xff\x62\x61\x1c\x1a\x23\x94\xc3\x16\x00\x00\x00\x00\xff\xff\ +\x62\x79\xff\xf3\xd3\x40\xbb\x61\x44\x03\x00\x00\x00\x00\xff\xff\ +\x62\x14\x5c\xe0\x38\xd0\x6e\x18\xd1\x00\x00\x00\x00\xff\xff\x62\ +\x79\xff\xfd\xdd\x40\xbb\x61\x44\x03\x00\x00\x00\x00\xff\xff\x62\ +\x61\x64\x1a\xfa\xf3\xe6\x43\x19\x00\x00\x00\x00\xff\xff\x62\x61\ +\x1a\xdd\xea\x35\xa0\x00\x00\x00\x00\xff\xff\x62\xf9\xfb\xf3\xe3\ +\x40\xbb\x61\x44\x03\x00\x00\x00\x00\xff\xff\x62\x5c\x79\x77\xf7\ +\x40\xbb\x61\x44\x03\x00\x00\x00\x00\xff\xff\xa2\x7e\x4f\x78\x14\ +\x90\x04\x00\x00\x00\x00\xff\xff\x62\xf9\x33\x7a\x04\xd0\x80\x02\ +\x00\x00\x00\x00\xff\xff\x62\x61\xfc\x3f\x5a\x09\x0f\x24\x00\x00\ +\x00\x00\xff\xff\x1a\x2d\x82\x06\x18\x00\x00\x00\x00\xff\xff\x62\ +\x39\x70\xfd\x3d\x61\x55\xa3\x80\x66\x00\x00\x00\x00\xff\xff\x62\ +\x34\xab\x3f\x31\xd0\x6e\x18\xd1\x00\x00\x00\x00\xff\xff\x62\xe1\ +\xe3\x1c\x51\xbb\x1b\x07\x1d\x00\x00\x00\x00\xff\xff\x82\xed\xe7\ +\x1b\x05\x03\x04\x00\x00\x00\x00\xff\xff\x1a\x6d\x02\x0d\x30\x00\ +\x00\x00\x00\xff\xff\x1a\x8d\x80\x01\x06\x00\x00\x00\x00\xff\xff\ +\x03\x00\x1f\xbf\x8a\x32\x7b\x4a\xae\xcd\x00\x00\x00\x00\x49\x45\ +\x4e\x44\xae\x42\x60\x82\ +" + +qt_resource_name = b"\ +\x00\x0c\ +\x0f\x5b\x57\xdc\ +\x00\x65\ +\x00\x78\x00\x61\x00\x6d\x00\x70\x00\x6c\x00\x65\x00\x73\x00\x2e\x00\x78\x00\x6d\x00\x6c\ +\x00\x09\ +\x04\x66\x8a\xbc\ +\x00\x64\ +\x00\x65\x00\x6d\x00\x6f\x00\x73\x00\x2e\x00\x78\x00\x6d\x00\x6c\ +\x00\x06\ +\x07\x03\x7d\xc3\ +\x00\x69\ +\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\ +\x00\x0c\ +\x0a\xf0\xbf\x27\ +\x00\x71\ +\x00\x74\x00\x34\x00\x2d\x00\x6c\x00\x6f\x00\x67\x00\x6f\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0b\ +\x05\x52\xff\x27\ +\x00\x72\ +\x00\x62\x00\x2d\x00\x6c\x00\x6f\x00\x67\x00\x6f\x00\x2e\x00\x70\x00\x6e\x00\x67\ +" + +qt_resource_struct = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x01\ +\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x01\x00\x00\x1e\x59\ +\x00\x00\x00\x36\x00\x02\x00\x00\x00\x02\x00\x00\x00\x04\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x00\x66\x00\x00\x00\x00\x00\x01\x00\x00\x4b\xc5\ +\x00\x00\x00\x48\x00\x00\x00\x00\x00\x01\x00\x00\x21\xad\ +" + +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() diff --git a/examples/corelib/tools/regexp.py b/examples/corelib/tools/regexp.py new file mode 100755 index 0000000..7e28a53 --- /dev/null +++ b/examples/corelib/tools/regexp.py @@ -0,0 +1,195 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the PySide examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the widgets/tools/regexp example from Qt v5.x""" + +from PySide2 import QtCore, QtGui, QtWidgets + + +class RegExpDialog(QtWidgets.QDialog): + MaxCaptures = 6 + + def __init__(self, parent=None): + super(RegExpDialog, self).__init__(parent) + + self.patternComboBox = QtWidgets.QComboBox() + self.patternComboBox.setEditable(True) + self.patternComboBox.setSizePolicy(QtWidgets.QSizePolicy.Expanding, + QtWidgets.QSizePolicy.Preferred) + + patternLabel = QtWidgets.QLabel("&Pattern:") + patternLabel.setBuddy(self.patternComboBox) + + self.escapedPatternLineEdit = QtWidgets.QLineEdit() + self.escapedPatternLineEdit.setReadOnly(True) + palette = self.escapedPatternLineEdit.palette() + palette.setBrush(QtGui.QPalette.Base, + palette.brush(QtGui.QPalette.Disabled, QtGui.QPalette.Base)) + self.escapedPatternLineEdit.setPalette(palette) + + escapedPatternLabel = QtWidgets.QLabel("&Escaped Pattern:") + escapedPatternLabel.setBuddy(self.escapedPatternLineEdit) + + self.syntaxComboBox = QtWidgets.QComboBox() + self.syntaxComboBox.addItem("Regular expression v1", + QtCore.QRegExp.RegExp) + self.syntaxComboBox.addItem("Regular expression v2", + QtCore.QRegExp.RegExp2) + self.syntaxComboBox.addItem("Wildcard", QtCore.QRegExp.Wildcard) + self.syntaxComboBox.addItem("Fixed string", + QtCore.QRegExp.FixedString) + + syntaxLabel = QtWidgets.QLabel("&Pattern Syntax:") + syntaxLabel.setBuddy(self.syntaxComboBox) + + self.textComboBox = QtWidgets.QComboBox() + self.textComboBox.setEditable(True) + self.textComboBox.setSizePolicy(QtWidgets.QSizePolicy.Expanding, + QtWidgets.QSizePolicy.Preferred) + + textLabel = QtWidgets.QLabel("&Text:") + textLabel.setBuddy(self.textComboBox) + + self.caseSensitiveCheckBox = QtWidgets.QCheckBox("Case &Sensitive") + self.caseSensitiveCheckBox.setChecked(True) + self.minimalCheckBox = QtWidgets.QCheckBox("&Minimal") + + indexLabel = QtWidgets.QLabel("Index of Match:") + self.indexEdit = QtWidgets.QLineEdit() + self.indexEdit.setReadOnly(True) + + matchedLengthLabel = QtWidgets.QLabel("Matched Length:") + self.matchedLengthEdit = QtWidgets.QLineEdit() + self.matchedLengthEdit.setReadOnly(True) + + self.captureLabels = [] + self.captureEdits = [] + for i in range(self.MaxCaptures): + self.captureLabels.append(QtWidgets.QLabel("Capture %d:" % i)) + self.captureEdits.append(QtWidgets.QLineEdit()) + self.captureEdits[i].setReadOnly(True) + self.captureLabels[0].setText("Match:") + + checkBoxLayout = QtWidgets.QHBoxLayout() + checkBoxLayout.addWidget(self.caseSensitiveCheckBox) + checkBoxLayout.addWidget(self.minimalCheckBox) + checkBoxLayout.addStretch(1) + + mainLayout = QtWidgets.QGridLayout() + mainLayout.addWidget(patternLabel, 0, 0) + mainLayout.addWidget(self.patternComboBox, 0, 1) + mainLayout.addWidget(escapedPatternLabel, 1, 0) + mainLayout.addWidget(self.escapedPatternLineEdit, 1, 1) + mainLayout.addWidget(syntaxLabel, 2, 0) + mainLayout.addWidget(self.syntaxComboBox, 2, 1) + mainLayout.addLayout(checkBoxLayout, 3, 0, 1, 2) + mainLayout.addWidget(textLabel, 4, 0) + mainLayout.addWidget(self.textComboBox, 4, 1) + mainLayout.addWidget(indexLabel, 5, 0) + mainLayout.addWidget(self.indexEdit, 5, 1) + mainLayout.addWidget(matchedLengthLabel, 6, 0) + mainLayout.addWidget(self.matchedLengthEdit, 6, 1) + + for i in range(self.MaxCaptures): + mainLayout.addWidget(self.captureLabels[i], 7 + i, 0) + mainLayout.addWidget(self.captureEdits[i], 7 + i, 1) + self.setLayout(mainLayout) + + self.patternComboBox.editTextChanged.connect(self.refresh) + self.textComboBox.editTextChanged.connect(self.refresh) + self.caseSensitiveCheckBox.toggled.connect(self.refresh) + self.minimalCheckBox.toggled.connect(self.refresh) + self.syntaxComboBox.currentIndexChanged.connect(self.refresh) + + self.patternComboBox.addItem("[A-Za-z_]+([A-Za-z_0-9]*)") + self.textComboBox.addItem("(10 + delta4)* 32") + + self.setWindowTitle("RegExp") + self.setFixedHeight(self.sizeHint().height()) + self.refresh() + + def refresh(self): + self.setUpdatesEnabled(False) + + pattern = self.patternComboBox.currentText() + text = self.textComboBox.currentText() + + escaped = str(pattern) + escaped.replace('\\', '\\\\') + escaped.replace('"', '\\"') + self.escapedPatternLineEdit.setText('"' + escaped + '"') + + rx = QtCore.QRegExp(pattern) + cs = QtCore.Qt.CaseInsensitive + if self.caseSensitiveCheckBox.isChecked(): + cs = QtCore.Qt.CaseSensitive + rx.setCaseSensitivity(cs) + rx.setMinimal(self.minimalCheckBox.isChecked()) + syntax = self.syntaxComboBox.itemData(self.syntaxComboBox.currentIndex()) + rx.setPatternSyntax(QtCore.QRegExp.PatternSyntax(syntax)) + + palette = self.patternComboBox.palette() + if rx.isValid(): + palette.setColor(QtGui.QPalette.Text, + self.textComboBox.palette().color(QtGui.QPalette.Text)) + else: + palette.setColor(QtGui.QPalette.Text, QtCore.Qt.red) + self.patternComboBox.setPalette(palette) + + self.indexEdit.setText(str(rx.indexIn(text))) + self.matchedLengthEdit.setText(str(rx.matchedLength())) + + for i in range(self.MaxCaptures): + self.captureLabels[i].setEnabled(i <= rx.captureCount()) + self.captureEdits[i].setEnabled(i <= rx.captureCount()) + self.captureEdits[i].setText(rx.cap(i)) + + self.setUpdatesEnabled(True) + +if __name__ == '__main__': + + import sys + + app = QtWidgets.QApplication(sys.argv) + dialog = RegExpDialog() + sys.exit(dialog.exec_()) diff --git a/examples/corelib/tools/settingseditor/inifiles/licensepage.ini b/examples/corelib/tools/settingseditor/inifiles/licensepage.ini new file mode 100644 index 0000000..608d1b7 --- /dev/null +++ b/examples/corelib/tools/settingseditor/inifiles/licensepage.ini @@ -0,0 +1,46 @@ +[Field%201] +Bottom=89 +Flags=MULTILINE|VSCROLL|READONLY +Left=4 +Right=296 +State=No license agreement file found. Please contact support. +Top=14 +Type=Text + +[Field%202] +Bottom=8 +Left=4 +Right=294 +Text=Press Page Down to see the rest of the agreement. +Top=0 +Type=Label + +[Field%203] +Bottom=111 +Left=4 +Right=297 +Text=If you accept the terms of the agreement, select the first option below. You must accept the agreement to install this software. Click Next to continue. +Top=92 +Type=Label + +[Field%204] +Bottom=129 +Flags=GROUP|NOTIFY +Left=4 +Right=299 +Text=I &accept the terms in the License Agreement +Top=120 +Type=RadioButton + +[Field%205] +Bottom=140 +Flags=NOTIFY +Left=4 +Right=300 +State=1 +Text=I &do not accept the terms in the License Agreement +Top=129 +Type=RadioButton + +[Settings] +NumFields=5 diff --git a/examples/corelib/tools/settingseditor/inifiles/qsa.ini b/examples/corelib/tools/settingseditor/inifiles/qsa.ini new file mode 100644 index 0000000..56a2964 --- /dev/null +++ b/examples/corelib/tools/settingseditor/inifiles/qsa.ini @@ -0,0 +1,26 @@ +[Field%201] +Bottom=65 +Left=0 +Right=299 +Text=QSA Build Options +Top=9 +Type=Groupbox + +[Field%202] +Bottom=37 +Left=20 +Right=284 +Text=Don't compile QSA Workbench into QSA. +Top=27 +Type=Checkbox + +[Field%203] +Bottom=56 +Left=20 +Right=247 +Text=Don't compile QSA Workbench nor QSA Editor into QSA. +Top=45 +Type=Checkbox + +[Settings] +NumFields=3 diff --git a/examples/corelib/tools/settingseditor/inifiles/troll.ini b/examples/corelib/tools/settingseditor/inifiles/troll.ini new file mode 100644 index 0000000..4535291 --- /dev/null +++ b/examples/corelib/tools/settingseditor/inifiles/troll.ini @@ -0,0 +1,7 @@ +[Alpha] +Beta\Beta=1, 3, 4 +Beta\Delta=1111 +Beta\Epsilon=5 +Beta\Gamma=2 +Iota=7 +Omicron=10 diff --git a/examples/corelib/tools/settingseditor/settingseditor.py b/examples/corelib/tools/settingseditor/settingseditor.py new file mode 100755 index 0000000..9050497 --- /dev/null +++ b/examples/corelib/tools/settingseditor/settingseditor.py @@ -0,0 +1,722 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the PySide examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the widgets/tools/settingseditor example from Qt v5.x""" + +import sys + +from PySide2 import QtCore, QtGui, QtWidgets + + +class MainWindow(QtWidgets.QMainWindow): + def __init__(self, parent=None): + super(MainWindow, self).__init__(parent) + + self.settingsTree = SettingsTree() + self.setCentralWidget(self.settingsTree) + + self.locationDialog = None + + self.createActions() + self.createMenus() + + self.autoRefreshAct.setChecked(True) + self.fallbacksAct.setChecked(True) + + self.setWindowTitle("Settings Editor") + self.resize(500, 600) + + def openSettings(self): + if self.locationDialog is None: + self.locationDialog = LocationDialog(self) + + if self.locationDialog.exec_(): + settings = QtCore.QSettings(self.locationDialog.format(), + self.locationDialog.scope(), + self.locationDialog.organization(), + self.locationDialog.application()) + self.setSettingsObject(settings) + self.fallbacksAct.setEnabled(True) + + def openIniFile(self): + fileName, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Open INI File", + '', "INI Files (*.ini *.conf)") + + if fileName: + settings = QtCore.QSettings(fileName, QtCore.QSettings.IniFormat) + self.setSettingsObject(settings) + self.fallbacksAct.setEnabled(False) + + def openPropertyList(self): + fileName, _ = QtWidgets.QFileDialog.getOpenFileName(self, + "Open Property List", '', "Property List Files (*.plist)") + + if fileName: + settings = QtCore.QSettings(fileName, QtCore.QSettings.NativeFormat) + self.setSettingsObject(settings) + self.fallbacksAct.setEnabled(False) + + def openRegistryPath(self): + path, ok = QtWidgets.QInputDialog.getText(self, "Open Registry Path", + "Enter the path in the Windows registry:", + QtWidgets.QLineEdit.Normal, 'HKEY_CURRENT_USER\\') + + if ok and path != '': + settings = QtCore.QSettings(path, QtCore.QSettings.NativeFormat) + self.setSettingsObject(settings) + self.fallbacksAct.setEnabled(False) + + def about(self): + QtWidgets.QMessageBox.about(self, "About Settings Editor", + "The <b>Settings Editor</b> example shows how to access " + "application settings using Qt.") + + def createActions(self): + self.openSettingsAct = QtWidgets.QAction("&Open Application Settings...", + self, shortcut="Ctrl+O", triggered=self.openSettings) + + self.openIniFileAct = QtWidgets.QAction("Open I&NI File...", self, + shortcut="Ctrl+N", triggered=self.openIniFile) + + self.openPropertyListAct = QtWidgets.QAction("Open macOS &Property List...", + self, shortcut="Ctrl+P", triggered=self.openPropertyList) + if sys.platform != 'darwin': + self.openPropertyListAct.setEnabled(False) + + self.openRegistryPathAct = QtWidgets.QAction( + "Open Windows &Registry Path...", self, shortcut="Ctrl+G", + triggered=self.openRegistryPath) + if sys.platform != 'win32': + self.openRegistryPathAct.setEnabled(False) + + self.refreshAct = QtWidgets.QAction("&Refresh", self, shortcut="Ctrl+R", + enabled=False, triggered=self.settingsTree.refresh) + + self.exitAct = QtWidgets.QAction("E&xit", self, shortcut="Ctrl+Q", + triggered=self.close) + + self.autoRefreshAct = QtWidgets.QAction("&Auto-Refresh", self, + shortcut="Ctrl+A", checkable=True, enabled=False) + self.autoRefreshAct.triggered[bool].connect(self.settingsTree.setAutoRefresh) + self.autoRefreshAct.triggered[bool].connect(self.refreshAct.setDisabled) + + self.fallbacksAct = QtWidgets.QAction("&Fallbacks", self, + shortcut="Ctrl+F", checkable=True, enabled=False) + self.fallbacksAct.triggered[bool].connect(self.settingsTree.setFallbacksEnabled) + + self.aboutAct = QtWidgets.QAction("&About", self, triggered=self.about) + + self.aboutQtAct = QtWidgets.QAction("About &Qt", self, + triggered=QtWidgets.qApp.aboutQt) + + def createMenus(self): + self.fileMenu = self.menuBar().addMenu("&File") + self.fileMenu.addAction(self.openSettingsAct) + self.fileMenu.addAction(self.openIniFileAct) + self.fileMenu.addAction(self.openPropertyListAct) + self.fileMenu.addAction(self.openRegistryPathAct) + self.fileMenu.addSeparator() + self.fileMenu.addAction(self.refreshAct) + self.fileMenu.addSeparator() + self.fileMenu.addAction(self.exitAct) + + self.optionsMenu = self.menuBar().addMenu("&Options") + self.optionsMenu.addAction(self.autoRefreshAct) + self.optionsMenu.addAction(self.fallbacksAct) + + self.menuBar().addSeparator() + + self.helpMenu = self.menuBar().addMenu("&Help") + self.helpMenu.addAction(self.aboutAct) + self.helpMenu.addAction(self.aboutQtAct) + + def setSettingsObject(self, settings): + settings.setFallbacksEnabled(self.fallbacksAct.isChecked()) + self.settingsTree.setSettingsObject(settings) + + self.refreshAct.setEnabled(True) + self.autoRefreshAct.setEnabled(True) + + niceName = settings.fileName() + niceName.replace('\\', '/') + niceName = niceName.split('/')[-1] + + if not settings.isWritable(): + niceName += " (read only)" + + self.setWindowTitle("%s - Settings Editor" % niceName) + + +class LocationDialog(QtWidgets.QDialog): + def __init__(self, parent=None): + super(LocationDialog, self).__init__(parent) + + self.formatComboBox = QtWidgets.QComboBox() + self.formatComboBox.addItem("Native") + self.formatComboBox.addItem("INI") + + self.scopeComboBox = QtWidgets.QComboBox() + self.scopeComboBox.addItem("User") + self.scopeComboBox.addItem("System") + + self.organizationComboBox = QtWidgets.QComboBox() + self.organizationComboBox.addItem("Trolltech") + self.organizationComboBox.setEditable(True) + + self.applicationComboBox = QtWidgets.QComboBox() + self.applicationComboBox.addItem("Any") + self.applicationComboBox.addItem("Application Example") + self.applicationComboBox.addItem("Assistant") + self.applicationComboBox.addItem("Designer") + self.applicationComboBox.addItem("Linguist") + self.applicationComboBox.setEditable(True) + self.applicationComboBox.setCurrentIndex(3) + + formatLabel = QtWidgets.QLabel("&Format:") + formatLabel.setBuddy(self.formatComboBox) + + scopeLabel = QtWidgets.QLabel("&Scope:") + scopeLabel.setBuddy(self.scopeComboBox) + + organizationLabel = QtWidgets.QLabel("&Organization:") + organizationLabel.setBuddy(self.organizationComboBox) + + applicationLabel = QtWidgets.QLabel("&Application:") + applicationLabel.setBuddy(self.applicationComboBox) + + self.locationsGroupBox = QtWidgets.QGroupBox("Setting Locations") + + self.locationsTable = QtWidgets.QTableWidget() + self.locationsTable.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection) + self.locationsTable.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) + self.locationsTable.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) + self.locationsTable.setColumnCount(2) + self.locationsTable.setHorizontalHeaderLabels(("Location", "Access")) + self.locationsTable.horizontalHeader().setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) + self.locationsTable.horizontalHeader().resizeSection(1, 180) + + self.buttonBox = QtWidgets.QDialogButtonBox(QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel) + + self.formatComboBox.activated.connect(self.updateLocationsTable) + self.scopeComboBox.activated.connect(self.updateLocationsTable) + self.organizationComboBox.lineEdit().editingFinished.connect(self.updateLocationsTable) + self.applicationComboBox.lineEdit().editingFinished.connect(self.updateLocationsTable) + self.buttonBox.accepted.connect(self.accept) + self.buttonBox.rejected.connect(self.reject) + + locationsLayout = QtWidgets.QVBoxLayout() + locationsLayout.addWidget(self.locationsTable) + self.locationsGroupBox.setLayout(locationsLayout) + + mainLayout = QtWidgets.QGridLayout() + mainLayout.addWidget(formatLabel, 0, 0) + mainLayout.addWidget(self.formatComboBox, 0, 1) + mainLayout.addWidget(scopeLabel, 1, 0) + mainLayout.addWidget(self.scopeComboBox, 1, 1) + mainLayout.addWidget(organizationLabel, 2, 0) + mainLayout.addWidget(self.organizationComboBox, 2, 1) + mainLayout.addWidget(applicationLabel, 3, 0) + mainLayout.addWidget(self.applicationComboBox, 3, 1) + mainLayout.addWidget(self.locationsGroupBox, 4, 0, 1, 2) + mainLayout.addWidget(self.buttonBox, 5, 0, 1, 2) + self.setLayout(mainLayout) + + self.updateLocationsTable() + + self.setWindowTitle("Open Application Settings") + self.resize(650, 400) + + def format(self): + if self.formatComboBox.currentIndex() == 0: + return QtCore.QSettings.NativeFormat + else: + return QtCore.QSettings.IniFormat + + def scope(self): + if self.scopeComboBox.currentIndex() == 0: + return QtCore.QSettings.UserScope + else: + return QtCore.QSettings.SystemScope + + def organization(self): + return self.organizationComboBox.currentText() + + def application(self): + if self.applicationComboBox.currentText() == "Any": + return '' + + return self.applicationComboBox.currentText() + + def updateLocationsTable(self): + self.locationsTable.setUpdatesEnabled(False) + self.locationsTable.setRowCount(0) + + for i in range(2): + if i == 0: + if self.scope() == QtCore.QSettings.SystemScope: + continue + + actualScope = QtCore.QSettings.UserScope + else: + actualScope = QtCore.QSettings.SystemScope + + for j in range(2): + if j == 0: + if not self.application(): + continue + + actualApplication = self.application() + else: + actualApplication = '' + + settings = QtCore.QSettings(self.format(), actualScope, + self.organization(), actualApplication) + + row = self.locationsTable.rowCount() + self.locationsTable.setRowCount(row + 1) + + item0 = QtWidgets.QTableWidgetItem() + item0.setText(settings.fileName()) + + item1 = QtWidgets.QTableWidgetItem() + disable = not (settings.childKeys() or settings.childGroups()) + + if row == 0: + if settings.isWritable(): + item1.setText("Read-write") + disable = False + else: + item1.setText("Read-only") + self.buttonBox.button(QtWidgets.QDialogButtonBox.Ok).setDisabled(disable) + else: + item1.setText("Read-only fallback") + + if disable: + item0.setFlags(item0.flags() & ~QtCore.Qt.ItemIsEnabled) + item1.setFlags(item1.flags() & ~QtCore.Qt.ItemIsEnabled) + + self.locationsTable.setItem(row, 0, item0) + self.locationsTable.setItem(row, 1, item1) + + self.locationsTable.setUpdatesEnabled(True) + + +class SettingsTree(QtWidgets.QTreeWidget): + def __init__(self, parent=None): + super(SettingsTree, self).__init__(parent) + + self.setItemDelegate(VariantDelegate(self)) + + self.setHeaderLabels(("Setting", "Type", "Value")) + self.header().setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) + self.header().setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) + + self.settings = None + self.refreshTimer = QtCore.QTimer() + self.refreshTimer.setInterval(2000) + self.autoRefresh = False + + self.groupIcon = QtGui.QIcon() + self.groupIcon.addPixmap(self.style().standardPixmap(QtWidgets.QStyle.SP_DirClosedIcon), + QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.groupIcon.addPixmap(self.style().standardPixmap(QtWidgets.QStyle.SP_DirOpenIcon), + QtGui.QIcon.Normal, QtGui.QIcon.On) + self.keyIcon = QtGui.QIcon() + self.keyIcon.addPixmap(self.style().standardPixmap(QtWidgets.QStyle.SP_FileIcon)) + + self.refreshTimer.timeout.connect(self.maybeRefresh) + + def setSettingsObject(self, settings): + self.settings = settings + self.clear() + + if self.settings is not None: + self.settings.setParent(self) + self.refresh() + if self.autoRefresh: + self.refreshTimer.start() + else: + self.refreshTimer.stop() + + def sizeHint(self): + return QtCore.QSize(800, 600) + + def setAutoRefresh(self, autoRefresh): + self.autoRefresh = autoRefresh + + if self.settings is not None: + if self.autoRefresh: + self.maybeRefresh() + self.refreshTimer.start() + else: + self.refreshTimer.stop() + + def setFallbacksEnabled(self, enabled): + if self.settings is not None: + self.settings.setFallbacksEnabled(enabled) + self.refresh() + + def maybeRefresh(self): + if self.state() != QtWidgets.QAbstractItemView.EditingState: + self.refresh() + + def refresh(self): + if self.settings is None: + return + + # The signal might not be connected. + try: + self.itemChanged.disconnect(self.updateSetting) + except: + pass + + self.settings.sync() + self.updateChildItems(None) + + self.itemChanged.connect(self.updateSetting) + + def event(self, event): + if event.type() == QtCore.QEvent.WindowActivate: + if self.isActiveWindow() and self.autoRefresh: + self.maybeRefresh() + + return super(SettingsTree, self).event(event) + + def updateSetting(self, item): + key = item.text(0) + ancestor = item.parent() + + while ancestor: + key = ancestor.text(0) + '/' + key + ancestor = ancestor.parent() + + d = item.data(2, QtCore.Qt.UserRole) + self.settings.setValue(key, item.data(2, QtCore.Qt.UserRole)) + + if self.autoRefresh: + self.refresh() + + def updateChildItems(self, parent): + dividerIndex = 0 + + for group in self.settings.childGroups(): + childIndex = self.findChild(parent, group, dividerIndex) + if childIndex != -1: + child = self.childAt(parent, childIndex) + child.setText(1, '') + child.setText(2, '') + child.setData(2, QtCore.Qt.UserRole, None) + self.moveItemForward(parent, childIndex, dividerIndex) + else: + child = self.createItem(group, parent, dividerIndex) + + child.setIcon(0, self.groupIcon) + dividerIndex += 1 + + self.settings.beginGroup(group) + self.updateChildItems(child) + self.settings.endGroup() + + for key in self.settings.childKeys(): + childIndex = self.findChild(parent, key, 0) + if childIndex == -1 or childIndex >= dividerIndex: + if childIndex != -1: + child = self.childAt(parent, childIndex) + for i in range(child.childCount()): + self.deleteItem(child, i) + self.moveItemForward(parent, childIndex, dividerIndex) + else: + child = self.createItem(key, parent, dividerIndex) + child.setIcon(0, self.keyIcon) + dividerIndex += 1 + else: + child = self.childAt(parent, childIndex) + + value = self.settings.value(key) + if value is None: + child.setText(1, 'Invalid') + else: + child.setText(1, value.__class__.__name__) + child.setText(2, VariantDelegate.displayText(value)) + child.setData(2, QtCore.Qt.UserRole, value) + + while dividerIndex < self.childCount(parent): + self.deleteItem(parent, dividerIndex) + + def createItem(self, text, parent, index): + after = None + + if index != 0: + after = self.childAt(parent, index - 1) + + if parent is not None: + item = QtWidgets.QTreeWidgetItem(parent, after) + else: + item = QtWidgets.QTreeWidgetItem(self, after) + + item.setText(0, text) + item.setFlags(item.flags() | QtCore.Qt.ItemIsEditable) + return item + + def deleteItem(self, parent, index): + if parent is not None: + item = parent.takeChild(index) + else: + item = self.takeTopLevelItem(index) + del item + + def childAt(self, parent, index): + if parent is not None: + return parent.child(index) + else: + return self.topLevelItem(index) + + def childCount(self, parent): + if parent is not None: + return parent.childCount() + else: + return self.topLevelItemCount() + + def findChild(self, parent, text, startIndex): + for i in range(self.childCount(parent)): + if self.childAt(parent, i).text(0) == text: + return i + return -1 + + def moveItemForward(self, parent, oldIndex, newIndex): + for int in range(oldIndex - newIndex): + self.deleteItem(parent, newIndex) + + +class VariantDelegate(QtWidgets.QItemDelegate): + def __init__(self, parent=None): + super(VariantDelegate, self).__init__(parent) + + self.boolExp = QtCore.QRegExp() + self.boolExp.setPattern('true|false') + self.boolExp.setCaseSensitivity(QtCore.Qt.CaseInsensitive) + + self.byteArrayExp = QtCore.QRegExp() + self.byteArrayExp.setPattern('[\\x00-\\xff]*') + + self.charExp = QtCore.QRegExp() + self.charExp.setPattern('.') + + self.colorExp = QtCore.QRegExp() + self.colorExp.setPattern('\\(([0-9]*),([0-9]*),([0-9]*),([0-9]*)\\)') + + self.doubleExp = QtCore.QRegExp() + self.doubleExp.setPattern('') + + self.pointExp = QtCore.QRegExp() + self.pointExp.setPattern('\\((-?[0-9]*),(-?[0-9]*)\\)') + + self.rectExp = QtCore.QRegExp() + self.rectExp.setPattern('\\((-?[0-9]*),(-?[0-9]*),(-?[0-9]*),(-?[0-9]*)\\)') + + self.signedIntegerExp = QtCore.QRegExp() + self.signedIntegerExp.setPattern('-?[0-9]*') + + self.sizeExp = QtCore.QRegExp(self.pointExp) + + self.unsignedIntegerExp = QtCore.QRegExp() + self.unsignedIntegerExp.setPattern('[0-9]*') + + self.dateExp = QtCore.QRegExp() + self.dateExp.setPattern('([0-9]{,4})-([0-9]{,2})-([0-9]{,2})') + + self.timeExp = QtCore.QRegExp() + self.timeExp.setPattern('([0-9]{,2}):([0-9]{,2}):([0-9]{,2})') + + self.dateTimeExp = QtCore.QRegExp() + self.dateTimeExp.setPattern(self.dateExp.pattern() + 'T' + self.timeExp.pattern()) + + def paint(self, painter, option, index): + if index.column() == 2: + value = index.model().data(index, QtCore.Qt.UserRole) + if not self.isSupportedType(value): + myOption = QtWidgets.QStyleOptionViewItem(option) + myOption.state &= ~QtWidgets.QStyle.State_Enabled + super(VariantDelegate, self).paint(painter, myOption, index) + return + + super(VariantDelegate, self).paint(painter, option, index) + + def createEditor(self, parent, option, index): + if index.column() != 2: + return None + + originalValue = index.model().data(index, QtCore.Qt.UserRole) + if not self.isSupportedType(originalValue): + return None + + lineEdit = QtWidgets.QLineEdit(parent) + lineEdit.setFrame(False) + + if isinstance(originalValue, bool): + regExp = self.boolExp + elif isinstance(originalValue, float): + regExp = self.doubleExp + elif isinstance(originalValue, int): + regExp = self.signedIntegerExp + elif isinstance(originalValue, QtCore.QByteArray): + regExp = self.byteArrayExp + elif isinstance(originalValue, QtGui.QColor): + regExp = self.colorExp + elif isinstance(originalValue, QtCore.QDate): + regExp = self.dateExp + elif isinstance(originalValue, QtCore.QDateTime): + regExp = self.dateTimeExp + elif isinstance(originalValue, QtCore.QTime): + regExp = self.timeExp + elif isinstance(originalValue, QtCore.QPoint): + regExp = self.pointExp + elif isinstance(originalValue, QtCore.QRect): + regExp = self.rectExp + elif isinstance(originalValue, QtCore.QSize): + regExp = self.sizeExp + else: + regExp = QtCore.QRegExp() + + if not regExp.isEmpty(): + validator = QtGui.QRegExpValidator(regExp, lineEdit) + lineEdit.setValidator(validator) + + return lineEdit + + def setEditorData(self, editor, index): + value = index.model().data(index, QtCore.Qt.UserRole) + if editor is not None: + editor.setText(self.displayText(value)) + + def setModelData(self, editor, model, index): + if not editor.isModified(): + return + + text = editor.text() + validator = editor.validator() + if validator is not None: + state, text, _ = validator.validate(text, 0) + if state != QtGui.QValidator.Acceptable: + return + + originalValue = index.model().data(index, QtCore.Qt.UserRole) + + if isinstance(originalValue, QtGui.QColor): + self.colorExp.exactMatch(text) + value = QtGui.QColor(min(int(self.colorExp.cap(1)), 255), + min(int(self.colorExp.cap(2)), 255), + min(int(self.colorExp.cap(3)), 255), + min(int(self.colorExp.cap(4)), 255)) + elif isinstance(originalValue, QtCore.QDate): + value = QtCore.QDate.fromString(text, QtCore.Qt.ISODate) + if not value.isValid(): + return + elif isinstance(originalValue, QtCore.QDateTime): + value = QtCore.QDateTime.fromString(text, QtCore.Qt.ISODate) + if not value.isValid(): + return + elif isinstance(originalValue, QtCore.QTime): + value = QtCore.QTime.fromString(text, QtCore.Qt.ISODate) + if not value.isValid(): + return + elif isinstance(originalValue, QtCore.QPoint): + self.pointExp.exactMatch(text) + value = QtCore.QPoint(int(self.pointExp.cap(1)), + int(self.pointExp.cap(2))) + elif isinstance(originalValue, QtCore.QRect): + self.rectExp.exactMatch(text) + value = QtCore.QRect(int(self.rectExp.cap(1)), + int(self.rectExp.cap(2)), + int(self.rectExp.cap(3)), + int(self.rectExp.cap(4))) + elif isinstance(originalValue, QtCore.QSize): + self.sizeExp.exactMatch(text) + value = QtCore.QSize(int(self.sizeExp.cap(1)), + int(self.sizeExp.cap(2))) + elif isinstance(originalValue, list): + value = text.split(',') + else: + value = type(originalValue)(text) + + model.setData(index, self.displayText(value), QtCore.Qt.DisplayRole) + model.setData(index, value, QtCore.Qt.UserRole) + + @staticmethod + def isSupportedType(value): + return isinstance(value, (bool, float, int, QtCore.QByteArray, + str, QtGui.QColor, QtCore.QDate, QtCore.QDateTime, + QtCore.QTime, QtCore.QPoint, QtCore.QRect, QtCore.QSize, + list)) + + @staticmethod + def displayText(value): + if isinstance(value, (bool, int, QtCore.QByteArray)): + return str(value) + if isinstance(value, str): + return value + elif isinstance(value, float): + return '%g' % value + elif isinstance(value, QtGui.QColor): + return '(%u,%u,%u,%u)' % (value.red(), value.green(), value.blue(), value.alpha()) + elif isinstance(value, (QtCore.QDate, QtCore.QDateTime, QtCore.QTime)): + return value.toString(QtCore.Qt.ISODate) + elif isinstance(value, QtCore.QPoint): + return '(%d,%d)' % (value.x(), value.y()) + elif isinstance(value, QtCore.QRect): + return '(%d,%d,%d,%d)' % (value.x(), value.y(), value.width(), value.height()) + elif isinstance(value, QtCore.QSize): + return '(%d,%d)' % (value.width(), value.height()) + elif isinstance(value, list): + return ','.join(value) + elif value is None: + return '<Invalid>' + + return '<%s>' % value + + +if __name__ == '__main__': + app = QtWidgets.QApplication(sys.argv) + mainWin = MainWindow() + mainWin.show() + sys.exit(app.exec_()) |