Copyright 2012, 2013 \xa9 Robert Pr\xf6pper '
u'Neural Information Processing Group '
u'TU Berlin, Germany
'
u'If you use Spyke Viewer in work that leads to a scientific '
u'publication, please cite: '
u'Pr\xf6pper, R. and Obermayer, K. (2013). Spyke Viewer: a '
u'flexible and extensible platform for electrophysiological data '
u'analysis. '
u'Front. Neuroinform. 7:26. doi: 10.3389/fninf.2013.00026'
u'
Licensed under the terms of the BSD license. '
u'Icons from the Crystal Project (\xa9 2006-2007 Everaldo Coelho)')
about.show()
@pyqtSignature("")
def on_actionDocumentation_triggered(self):
webbrowser.open('http://spyke-viewer.readthedocs.org')
@pyqtSignature("")
def on_actionSpyke_Repository_triggered(self):
webbrowser.open('http://spyke-viewer.g-node.org')
def _get_closed_folders(self):
if not hasattr(self, 'plugin_model'):
return []
folders = self.plugin_model.get_all_folders()
paths = []
for f in folders:
if self.pluginsTreeView.isExpanded(f):
continue
path = [f.data()]
p = f.parent()
while p.row() >= 0:
path.append(p.data())
p = p.parent()
paths.append('/'.join(reversed(path)))
return paths
def clean_temporary_selection_files(self, path):
""" Remove temporary .temp_..._.sel files from a directory.
These files are written when executing plugins remotely.
"""
for f in os.listdir(path):
if f.startswith('.temp_') and f.endswith('_.sel'):
os.remove(os.path.join(path, f))
def closeEvent(self, event):
""" Saves filters, plugin configs and GUI state.
"""
if not self.pluginEditorDock.close_all():
event.ignore()
return
# Ensure that selection folder exists
if not os.path.exists(self.selection_path):
try:
os.makedirs(self.selection_path)
except OSError:
QMessageBox.critical(
self, 'Error', 'Could not create selection directory!')
self.save_selections_to_file(
os.path.join(self.selection_path, '.current.sel'))
self.clean_temporary_selection_files(self.selection_path)
# Ensure that filters folder exists
if not os.path.exists(self.filter_path):
try:
os.makedirs(self.filter_path)
except OSError:
QMessageBox.critical(self, 'Error',
'Could not create filter directory!')
self.filterDock.save()
# Save GUI configuration (docks and toolbars)
settings = QSettings()
settings.setValue('windowGeometry', self.saveGeometry())
settings.setValue('windowState', self.saveState())
# Save further configurations
settings.setValue('pluginPaths', self.plugin_paths)
settings.setValue('selectionPath', self.selection_path)
settings.setValue('filterPath', self.filter_path)
settings.setValue('remoteScript', self.remote_script)
# Save plugin configurations
configs = self.get_plugin_configs()
configs_path = os.path.join(self.data_path, 'plugin_configs.p')
with open(configs_path, 'w') as f:
pickle.dump(configs, f)
# Save closed plugin folders
settings.setValue('closedPluginFolders', self._get_closed_folders())
super(MainWindow, self).closeEvent(event)
# Prevent lingering threads
self.fileTreeView.setModel(None)
del self.file_system_model
self.pluginsTreeView.setModel(None)
del self.plugin_model
spykeviewer-0.4.1/spykeviewer/ui/main.ui 0000644 0001750 0001750 00000050706 12262550403 016503 0 ustar rob rob
MainWindow0081986700790580Spyke Viewer:/Application/Main:/Application/MainfalseQGroupBox {
border: 1px solid gray;
border-radius: 5px;
margin-top: 1ex; /* leave space at the top for the title */
}
QGroupBox::title {
subcontrol-origin: margin;
subcontrol-position: top left; /* position at the top center */
padding: 0 2px;
left: 10px;
}QTabWidget::RoundedQMainWindow::AllowNestedDocks|QMainWindow::AllowTabbedDocks|QMainWindow::AnimatedDocks40081925&FileData Read ModeCascade Mode&Help&Selections&Plugins&FilterConsole8Variable Explorer8Command History8Plugins4Qt::CustomContextMenutruetruefalse0Files2QFormLayout::AllNonFixedFieldsGrowFormat:QAbstractItemView::ExtendedSelectiontruetruefalsefalsefalseLoadConfigure Selected IOFilter ToolbarTopToolBarAreafalsePlugin ToolbarTopToolBarAreafalse&ExitQAction::QuitRolefalse&Save Selection Set...&Load Selection Set...:/Application/Info:/Application/Info&AboutSwitch Modesfalse&New&Clear DatatrueSave Selected Data &as...Settings...&Clear:/Plugins/New:/Plugins/New&New PluginCreate a new pluginfalse:/Plugins/Edit:/Plugins/Edit&Edit PluginEdit selected pluginCtrl+E:/Plugins/Reload:/Plugins/Reload&Refresh PluginsRefresh all pluginsCtrl+Rfalse:/Plugins/Save:/Plugins/Save&Save PluginSave current fileCtrl+Sfalse:/Plugins/Config:/Plugins/Config&Configure PluginConfigure selected pluginF6false:/Plugins/Run:/Plugins/RunRun &PluginRun selected pluginF5false:/Plugins/Remote:/Plugins/RemoteStart with Remote ScriptStart selected plugin with Remote ScriptF9:/Filter/New Filter:/Filter/New Filter&New FilterCreate a new filterfalse:/Filter/Copy Filter:/Filter/Copy Filter&CopyDuplicate selected filter or groupfalse:/Filter/Edit Filter:/Filter/Edit Filter&EditEdit selected filter or filter groupfalse:/Filter/Remove Filter:/Filter/Remove Filter&DeleteDelete selected filter or filter group:/Filter/New Filter Group:/Filter/New Filter GroupNew Filter &GroupCreate a new filter groupfalse:/Plugins/Save As:/Plugins/Save AsSave Plugin &as...Save current file as...:/Application/Help:/Application/Help&DocumentationOpen documentation website
(requires Internet access)Save All &Data as...false:/Plugins/Show Folder:/Plugins/Show Folder&Open containing folder...Open folder that contains selected pluginEdit Startup Script:/Plugins/Restore Config:/Plugins/Restore ConfigRestore Plugin configurationsRestore Plugin configurations to their default valuesLoad &Python File...truetrueFull LoadtrueLazy LoadLoad Data...:/Application/Repository:/Application/RepositorySpyke RepositorytrueCached Lazy LoadtruetrueRegulartrueLazy
spykeviewer-0.4.1/spykeviewer/ui/main_window_neo.py 0000644 0001750 0001750 00000050610 12262550403 020740 0 ustar rob rob import os
from collections import OrderedDict
import logging
import pickle
import copy
import json
import neo
from PyQt4.QtCore import (Qt, pyqtSignature, QThread)
from PyQt4.QtGui import (QMessageBox, QApplication,
QProgressDialog, QFileDialog)
from spyderlib.widgets.dicteditor import DictEditor
from spykeutils import SpykeException
from spykeutils.progress_indicator import ignores_cancel
from spykeutils.plugin.data_provider_neo import NeoDataProvider
from spykeutils.plugin.data_provider_stored import NeoStoredProvider
from spykeutils.plugin import io_plugin
from main_window import MainWindow
from ..plugin_framework.data_provider_viewer import NeoViewerProvider
from neo_navigation import NeoNavigationDock
from dir_files_dialog import DirFilesDialog
import io_settings
logger = logging.getLogger('spykeviewer')
#noinspection PyCallByClass,PyTypeChecker,PyArgumentList
class MainWindowNeo(MainWindow):
""" Implements Neo functionality in the main window.
"""
def __init__(self, parent=None, splash=None):
super(MainWindowNeo, self).__init__(parent, splash)
self.block_ids = {}
self.block_names = OrderedDict() # Just for the display order
self.block_files = {}
self.block_index = 0
self.was_empty = True
self.channel_group_names = {}
self.io_write_params = {}
# Neo navigation
nav = NeoNavigationDock(self)
self.neoNavigationDock = nav
self.neoNavigationDock.setObjectName('neoNavigationDock')
self.addDockWidget(Qt.LeftDockWidgetArea, self.neoNavigationDock)
self.neoNavigationDock.setVisible(True)
self.neoNavigationDock.object_removed.connect(self.refresh_neo_view)
# Initialize filters
self.filter_populate_function = \
{'Block': nav.populate_neo_block_list,
'Recording Channel': nav.populate_neo_channel_list,
'Recording Channel Group': nav.populate_neo_channel_group_list,
'Segment': nav.populate_neo_segment_list,
'Unit': nav.populate_neo_unit_list}
self.activate_neo_mode()
self.finish_initialization()
def get_filter_types(self):
""" Return a list of filter type tuples as required by
:class:`filter_dock.FilterDock. Includes filters from Neo.
"""
l = super(MainWindowNeo, self).get_filter_types()
l.extend([('Block', 'block'), ('Segment', 'segment'),
('Recording Channel Group', 'rcg'),
('Recording Channel', 'rc'),
('Unit', 'unit')])
return l
def get_console_objects(self):
""" Return a dictionary of objects that should be included in the
console on startup. These objects will also not be displayed in
variable explorer. Overriden for Neo imports.
"""
d = super(MainWindowNeo, self).get_console_objects()
import quantities
import neo
import spykeutils
d['pq'] = quantities
d['neo'] = neo
d['spykeutils'] = spykeutils
return d
def set_initial_layout(self):
self.neoNavigationDock.setVisible(True)
super(MainWindowNeo, self).set_initial_layout()
def set_current_selection(self, data):
if data['type'] == 'Neo':
self.set_neo_selection(data)
else:
raise NotImplementedError(
'This version of Spyke Viewer only supports Neo selections!')
def add_selection(self, data):
if data['type'] == 'Neo':
self.add_neo_selection(data)
else:
raise NotImplementedError(
'This version of Spyke Viewer only supports Neo selections!')
def activate_neo_mode(self):
self.provider = NeoViewerProvider(self)
self.provider_factory = NeoStoredProvider.from_current_selection
self.console.interpreter.locals['current'] = self.provider
if self.ipy_kernel:
self.ipy_kernel.push({'current': self.provider})
def reload_plugins(self, keep_configs=True):
super(MainWindowNeo, self).reload_plugins(keep_configs)
self.reload_neo_io_plugins()
def reload_neo_io_plugins(self):
# Clean previous plugins
neo.io.iolist = [io for io in neo.io.iolist
if not hasattr(io, '_is_spyke_plugin')]
for pp in self.plugin_paths:
for f in os.listdir(pp):
p = os.path.join(pp, f)
if os.path.isdir(p):
continue
if not p.lower().endswith('io.py'):
continue
try:
io_plugin.load_from_file(p)
except SpykeException, e:
logger.warning(str(e))
# Populate IO list
self.neoIOComboBox.clear()
iolabels = []
for io in neo.io.iolist:
if io.name:
iolabels.append((io.name, io))
else:
iolabels.append((io.__name__, io))
iolabels.sort(key=lambda x: x[0].lower())
self.neoIOComboBox.addItem('By extension')
self.neoIOComboBox.setItemData(0, None)
self.neoIOComboBox.addItems([l[0] for l in iolabels])
for i, l in enumerate(iolabels):
self.neoIOComboBox.setItemData(i + 1, l[1])
# Delete stale IO configs
for p in self.io_write_params.keys():
if p not in neo.io.iolist:
del self.io_write_params[p]
for p in NeoDataProvider.io_params.keys():
if p not in neo.io.iolist:
del NeoDataProvider.io_params[p]
def get_letter_id(self, id_, small=False):
""" Return a name consisting of letters given an integer
"""
return self.neoNavigationDock.get_letter_id(id_, small)
class LoadWorker(QThread):
def __init__(self, paths):
QThread.__init__(self)
self.paths = paths
self.blocks = []
self.error = None
def run(self):
try:
self.blocks = NeoDataProvider.get_blocks(self.paths[0])
except Exception as e:
self.error = e
raise
def load_files(self, file_paths):
self.progress.begin('Loading data files...')
self.progress.set_ticks(len(file_paths))
self.load_worker = self.LoadWorker(file_paths)
self.load_progress = QProgressDialog(self.progress)
self.load_progress.setWindowTitle('Loading File')
self.load_progress.setLabelText(file_paths[0])
self.load_progress.setMaximum(0)
self.load_progress.setCancelButton(None)
self.load_worker.finished.connect(self.load_file_callback)
self.load_worker.terminated.connect(self.load_file_callback)
self.load_progress.show()
self.load_worker.start()
def edit_annotations(self, data):
""" Edit annotations of a Neo object.
"""
editor = DictEditor(self)
title = 'Edit annotations'
if data.name:
title += ' for %s' % data.name
editor.setup(data.annotations, title)
editor.accepted.connect(
lambda: self._editor_ok(data, editor))
editor.show()
editor.raise_()
editor.activateWindow()
def _editor_ok(self, data, editor):
data.annotations = editor.get_value()
@ignores_cancel
def load_file_callback(self):
if not self.load_worker:
self.progress.done()
return
# Load worker thread finished
blocks = self.load_worker.blocks
if blocks is None:
QMessageBox.critical(
self, 'File could not be loaded',
'Could not read "%s": No suitable IO found.' %
self.load_worker.paths[0])
logger.error('Could not read "%s": No suitable IO found.' %
self.load_worker.paths[0])
self.progress.done()
self.load_progress.reset()
self.raise_()
return
if self.load_worker.error:
QMessageBox.critical(
self, 'File could not be loaded',
'While loading "%s", the following error occured:'
'\n\n%s\n%s\n\nSee the console for more details.' % (
self.load_worker.paths[0],
type(self.load_worker.error).__name__,
str(self.load_worker.error)))
self.progress.done()
self.load_progress.reset()
self.raise_()
return
for block in blocks:
name = block.name
if not name or name == 'One segment only':
name = os.path.splitext(os.path.basename(
self.load_worker.paths[0]))[0]
name += ' (%s)' % self.get_letter_id(self.block_index)
self.block_names[block] = name
self.block_ids[block] = self.get_letter_id(self.block_index)
self.block_files[block] = self.load_worker.paths[0]
self.block_index += 1
self.load_progress.reset()
self.progress.step()
# Create new load worker thread
paths = self.load_worker.paths[1:]
if not paths:
self.progress.done()
if not self.was_empty:
self.refresh_neo_view()
else:
self.neoNavigationDock.populate_neo_block_list()
self.was_empty = False
self.load_worker = None
return
self.load_worker = self.LoadWorker(paths)
self.load_progress.setLabelText(paths[0])
self.load_progress.show()
self.load_worker.finished.connect(self.load_file_callback)
self.load_worker.terminated.connect(self.load_file_callback)
self.load_worker.start()
@ignores_cancel
def on_loadFilesButton_pressed(self):
if not self.block_index:
self.was_empty = True
indices = self.fileTreeView.selectedIndexes()
fs_model = self.file_system_model
self.load_files([fs_model.filePath(idx) for idx in indices])
def on_fileTreeView_doubleClicked(self, index):
if not self.fileTreeView.model().isDir(index):
self.on_loadFilesButton_pressed()
def refresh_neo_view(self):
self.set_current_selection(self.provider.data_dict())
def neo_blocks(self):
return self.neoNavigationDock.blocks()
def all_neo_blocks(self):
return self.block_names.keys()
def neo_block_file_names(self):
""" Return a dictionary of filenames, indexed by blocks
"""
return self.block_files
def neo_segments(self):
return self.neoNavigationDock.segments()
def neo_channel_groups(self):
return self.neoNavigationDock.recording_channel_groups()
def neo_units(self):
return self.neoNavigationDock.units()
def neo_channels(self):
return self.neoNavigationDock.recording_channels()
@pyqtSignature("")
def on_actionClearCache_triggered(self):
if QMessageBox.question(
self, 'Please confirm',
'Do you really want to unload all data?',
QMessageBox.Yes | QMessageBox.No) == QMessageBox.No:
return
NeoDataProvider.clear()
self.neoNavigationDock.clear()
self.block_ids.clear()
self.block_files.clear()
self.block_names.clear()
self.block_index = 0
self.neoNavigationDock.populate_neo_block_list()
def add_neo_selection(self, data):
""" Adds a new neo selection provider with the given data
"""
self.selections.append(NeoStoredProvider(data, self.progress))
def set_neo_selection(self, data):
""" Sets the current selection according to the given provider data
"""
self.progress.begin('Loading selection data...')
self.progress.set_ticks(len(data['blocks']))
# Load blocks which are not currently displayed
for b in data['blocks']:
# File already loaded?
if unicode(b[1]) in self.block_files.values():
self.progress.step()
continue
QApplication.setOverrideCursor(Qt.WaitCursor)
try:
cl = None
rp = None
if len(b) > 2:
cl = NeoDataProvider.find_io_class(b[2])
if len(b) > 3:
rp = b[3]
blocks = NeoDataProvider.get_blocks(
b[1], force_io=cl, read_params=rp)
finally:
QApplication.restoreOverrideCursor()
if not blocks:
logger.error('Could not read file "%s"' % b[1])
self.progress.step()
continue
for block in blocks:
name = block.name
if not name or name == 'One segment only':
name = os.path.basename(b[1])
name += ' (%s)' % self.get_letter_id(self.block_index)
self.block_names[block] = name
self.block_ids[block] = self.get_letter_id(self.block_index)
self.block_files[block] = b[1]
self.block_index += 1
self.progress.step()
self.progress.done()
self.neoNavigationDock.set_selection(data)
class SaveWorker(QThread):
def __init__(self, file_name, blocks, io, params):
QThread.__init__(self)
self.file_name = file_name
self.blocks = blocks
self.io = io(filename=file_name)
self.params = params
self.terminated.connect(self.cleanup)
self.finished.connect(self.cleanup)
def run(self):
if hasattr(self.io, 'write_all_blocks'):
self.io.write(self.blocks, **self.params)
else:
if neo.Block not in self.io.writeable_objects:
logger.warning('%s does not support writing blocks.' %
(self.io.name or type(self.io).__name__))
if not len(self.blocks[0].segments) == 1:
logger.warning('Please select a single block with a'
'single Segment.\nAborting...')
else:
logger.warning(
'Writing only first segment of first file...')
self.io.write(self.blocks[0], **self.params)
else:
if len(self.blocks) > 1:
logger.warning(
'%s does not support writing multiple blocks.\n'
'Writing only first block...')
self.io.write(self.blocks[0], **self.params)
def cleanup(self):
if self.io:
if hasattr(self.io, 'close'):
self.io.close()
self.io = None
def _save_blocks(self, blocks, file_name, io):
if not blocks:
QMessageBox.warning(self, 'Cannot save data',
'No data to save found!')
self.progress.done()
return
self.progress.set_ticks(0)
self.progress.setWindowTitle('Writing data...')
self.progress.set_status('')
if not os.path.splitext(file_name)[1]: # No previous file extension
if len(io.extensions) == 1: # Unambiguous extension for this io
file_name += '.' + io.extensions[0]
self.worker = self.SaveWorker(file_name, blocks, io,
self.io_write_params.get(io, {}))
self.worker.finished.connect(self.progress.done)
self.progress.canceled.connect(self.worker.terminate)
self.worker.start()
@pyqtSignature("")
def on_actionLoad_Data_triggered(self):
d = DirFilesDialog(self, 'Choose files or folders to load')
if not d.exec_():
return
self.load_files(d.selectedFiles())
@pyqtSignature("")
def on_actionSave_Data_triggered(self):
path, io = self._save_data_dialog('Choose where to save data')
if path is None:
return
self.progress.begin('Collecting data to save...')
blocks = self.all_neo_blocks()
self._save_blocks(blocks, path, io)
@pyqtSignature("")
def on_actionSave_Selected_Data_triggered(self):
path, io = self._save_data_dialog(
'Choose where to save selected data')
if path is None:
return
self.progress.begin('Collecting data to save...')
blocks = self.provider.selection_blocks()
self._save_blocks(blocks, path, io)
def _get_writeable_formats(self):
""" Return a list of name filters for save dialog and a dictionary
that maps name filters to IO classes.
"""
filters = []
d = {}
for io in neo.io.iolist:
if not io.is_writable:
continue
filters.append('%s (%s)' % (
io.name or io.__name__,
' '.join(['*.' + ext for ext in io.extensions])))
d[filters[-1]] = io
return filters, d
def _save_data_dialog(self, title):
""" Create a save dialog for data. Return the filename and selected IO
if the user wants to save, (None, None) if the dialog was canceled.
:param str title: Dialog title
"""
dialog = QFileDialog(self, title)
dialog.setAcceptMode(QFileDialog.AcceptSave)
name_filters, io_mapping = self._get_writeable_formats()
dialog.setNameFilters(name_filters)
dialog.setConfirmOverwrite(True)
if not dialog.exec_():
return None, None
return unicode(dialog.selectedFiles()[0]), \
io_mapping[dialog.selectedNameFilter()]
@pyqtSignature("")
def on_actionFull_Load_triggered(self):
NeoDataProvider.data_lazy_mode = 0
@pyqtSignature("")
def on_actionLazy_Load_triggered(self):
NeoDataProvider.data_lazy_mode = 1
@pyqtSignature("")
def on_actionCached_Lazy_Load_triggered(self):
NeoDataProvider.data_lazy_mode = 2
@pyqtSignature("")
def on_actionFull_triggered(self):
NeoDataProvider.cascade_lazy = False
@pyqtSignature("")
def on_actionLazy_triggered(self):
NeoDataProvider.cascade_lazy = True
@pyqtSignature("int")
def on_neoIOComboBox_currentIndexChanged(self, index):
if index > 0:
NeoDataProvider.forced_io = self.neoIOComboBox.itemData(index)
self.configureIOButton.setEnabled(
io_settings.has_ui_params(NeoDataProvider.forced_io))
else:
NeoDataProvider.forced_io = None
self.configureIOButton.setEnabled(False)
@pyqtSignature("")
def on_configureIOButton_pressed(self):
io = NeoDataProvider.forced_io
d = io_settings.ParamDialog(
io, NeoDataProvider.io_params.get(io, {}),
self.io_write_params.get(io, {}), self)
if d.exec_():
NeoDataProvider.io_params[io] = d.get_read_params()
self.io_write_params[io] = d.get_write_params()
def _execute_remote_plugin(self, plugin, current=None, selections=None):
sl = list()
if current is None:
sl.append(self.provider_factory('__current__', self).data_dict())
else:
d = copy.copy(current.data_dict())
d['name'] = '__current__'
sl.append(d)
if selections is None:
selections = self.selections
for s in selections:
sl.append(s.data_dict())
io_plugin_files = []
for s in sl:
if s['type'] != 'Neo':
continue
for b in s['blocks']:
if len(b) > 2:
io = NeoDataProvider.find_io_class(b[2])
if io is None:
raise NameError('Error executing remote plugin: '
'%s is not a known IO class!' % b[2])
if getattr(io, '_is_spyke_plugin', False):
io_plugin_files.append(io._python_file)
selections = json.dumps(sl, sort_keys=True, indent=2)
config = pickle.dumps(plugin.get_parameters())
name = type(plugin).__name__
path = plugin.source_file
self.send_plugin_info(name, path, selections, config, io_plugin_files)
def closeEvent(self, event):
super(MainWindowNeo, self).closeEvent(event)
NeoDataProvider.clear()
spykeviewer-0.4.1/spykeviewer/ui/filter_group_dialog.py 0000644 0001750 0001750 00000005372 12262550403 021611 0 ustar rob rob from PyQt4.QtGui import (QDialog, QLabel, QComboBox, QDialogButtonBox,
QGridLayout, QLineEdit, QMessageBox, QCheckBox)
from PyQt4.QtCore import Qt, SIGNAL
class FilterGroupDialog(QDialog):
""" A dialog for editing filters
"""
def __init__(self, type=None, name=None, exclusive=False, parent=None):
QDialog.__init__(self, parent)
self.setupUi()
if type:
index = self.filterTypeComboBox.findText(type)
if index >= 0:
self.filterTypeComboBox.setCurrentIndex(index)
if name:
self.nameLineEdit.setText(name)
self.filterTypeComboBox.setEnabled(False)
self.exclusiveCheckBox.setChecked(exclusive)
def setupUi(self):
self.setWindowTitle('Edit filter group')
self.filterTypeComboBox = QComboBox(self)
self.filterTypeComboBox.addItem('Block')
self.filterTypeComboBox.addItem('Segment')
self.filterTypeComboBox.addItem('Recording Channel Group')
self.filterTypeComboBox.addItem('Recording Channel')
self.filterTypeComboBox.addItem('Unit')
self.nameLineEdit = QLineEdit()
self.dialogButtonBox = QDialogButtonBox(self)
self.dialogButtonBox.setAutoFillBackground(False)
self.dialogButtonBox.setOrientation(Qt.Horizontal)
self.dialogButtonBox.setStandardButtons(QDialogButtonBox.Cancel|QDialogButtonBox.Ok)
self.dialogButtonBox.setCenterButtons(True)
self.exclusiveCheckBox = QCheckBox(self)
self.exclusiveCheckBox.setText('Only one filter can be active')
self.exclusiveCheckBox.setToolTip('Determines if exactly one or an arbitrary number of filters in this group can be active at once')
gridLayout = QGridLayout(self)
gridLayout.addWidget(QLabel('Type:', self), 0, 0)
gridLayout.addWidget(self.filterTypeComboBox, 0, 1)
gridLayout.addWidget(QLabel('Name:', self), 1, 0)
gridLayout.addWidget(self.nameLineEdit, 1, 1)
gridLayout.addWidget(self.exclusiveCheckBox, 2, 0, 1, 2)
gridLayout.addWidget(self.dialogButtonBox, 3, 0, 1, 2)
self.connect(self.dialogButtonBox, SIGNAL('accepted()'), self.accept)
self.connect(self.dialogButtonBox, SIGNAL('rejected()'), self.reject)
def name(self):
return self.nameLineEdit.text()
def type(self):
return self.filterTypeComboBox.currentText()
def exclusive(self):
return self.exclusiveCheckBox.isChecked()
#noinspection PyCallByClass,PyTypeChecker,PyArgumentList
def accept(self):
if len(self.nameLineEdit.text()) < 1:
QMessageBox.critical(self, 'Error saving filter group', 'Please provide a name for the group.')
return
QDialog.accept(self)
spykeviewer-0.4.1/spykeviewer/ui/plugin_editor_dock.py 0000644 0001750 0001750 00000035012 12262550403 021427 0 ustar rob rob import os
import re
from PyQt4.QtGui import (QDockWidget, QWidget, QFileDialog, QGridLayout,
QMessageBox, QFont, QTabWidget, QTextCursor,
QDesktopServices)
from PyQt4.QtCore import Qt, pyqtSignal, SIGNAL
from spyderlib.widgets.sourcecode import codeeditor
from spyderlib.widgets.editor import ThreadManager
try: # Spyder < 2.2.0
from spyderlib.utils.module_completion import moduleCompletion \
as module_completion
except ImportError: # Spyder >= 2.2.0beta3
from spyderlib.utils.module_completion import module_completion
from spyderlib.utils.dochelpers import getsignaturesfromtext
from spyderlib.widgets.findreplace import FindReplace
class PluginEditorDock(QDockWidget):
""" A dock for editing plugins.
"""
template_code = \
"""from spykeutils.plugin import analysis_plugin, gui_data
class SamplePlugin(analysis_plugin.AnalysisPlugin):
def get_name(self):
return 'New plugin'
def start(self, current, selections):
print 'Plugin started.'
"""
plugin_saved = pyqtSignal(str)
file_available = pyqtSignal(bool)
def __init__(self, title='Plugin Editor', default_path=None, parent=None):
QDockWidget.__init__(self, title, parent)
self.setupUi()
self.thread_manager = ThreadManager(self)
try:
self.rope_project = codeeditor.get_rope_project()
except (IOError, AttributeError): # Might happen when frozen
self.rope_project = None
data_path = QDesktopServices.storageLocation(
QDesktopServices.DataLocation)
self.default_path = default_path or os.getcwd()
self.rope_temp_path = os.path.join(data_path, '.temp')
self.tabs.currentChanged.connect(self._tab_changed)
self.enter_completion = True
def _tab_changed(self, tab):
self.file_available.emit(tab != -1)
def set_default_path(self, path):
self.default_path = path
def populate_groups(self):
self.filterGroupComboBox.clear()
self.filterGroupComboBox.addItem('')
for g in sorted(self.groups[self.filterTypeComboBox.currentText()]):
self.filterGroupComboBox.addItem(g)
def setupUi(self):
self.tabs = QTabWidget()
self.tabs.setTabsClosable(True)
self.tabs.tabCloseRequested.connect(self.close_file)
self.tabs.currentChanged.connect(self._current_editor_changed)
self.tabs.setMovable(True)
self.tabs.setDocumentMode(True)
self.find_widget = FindReplace(self, enable_replace=True)
self.find_widget.hide()
self.content_widget = QWidget()
layout = QGridLayout(self.content_widget)
layout.addWidget(self.tabs)
layout.addWidget(self.find_widget)
self.setWidget(self.content_widget)
self.setAcceptDrops(True)
def dragEnterEvent(self, event):
if event.mimeData().hasUrls():
for url in event.mimeData().urls():
p = url.toString()
if p.startswith('file://') and p.endswith('.py'):
event.acceptProposedAction()
return
def dropEvent(self, event):
for url in event.mimeData().urls():
p = url.toString()
if p.startswith('file://') and p.endswith('.py'):
self.add_file(p[7:])
event.acceptProposedAction()
def _setup_editor(self):
font = QFont('Some font that does not exist')
font.setStyleHint(font.TypeWriter, font.PreferDefault)
editor = codeeditor.CodeEditor(self)
editor.setup_editor(
linenumbers=True, language='py',
scrollflagarea=False, codecompletion_enter=self.enter_completion,
tab_mode=False, edge_line=False, font=font,
codecompletion_auto=True, go_to_definition=True,
codecompletion_single=True, calltips=True)
editor.setCursor(Qt.IBeamCursor)
editor.horizontalScrollBar().setCursor(Qt.ArrowCursor)
editor.verticalScrollBar().setCursor(Qt.ArrowCursor)
return editor
def _trigger_code_completion(self, automatic):
editor = self.tabs.currentWidget()
source_code = unicode(editor.toPlainText())
offset = editor.get_position('cursor')
text = editor.get_text('sol', 'cursor')
if text.startswith('import '):
comp_list = module_completion(text)
words = text.split(' ')
if ',' in words[-1]:
words = words[-1].split(',')
if comp_list:
editor.show_completion_list(comp_list,
completion_text=words[-1],
automatic=automatic)
return
elif text.startswith('from '):
comp_list = module_completion(text)
words = text.split(' ')
if '(' in words[-1]:
words = words[:-2] + words[-1].split('(')
if ',' in words[-1]:
words = words[:-2] + words[-1].split(',')
editor.show_completion_list(comp_list,
completion_text=words[-1],
automatic=automatic)
return
elif self.rope_project:
textlist = self.rope_project.get_completion_list(
source_code, offset, editor.file_name or self.rope_temp_path)
if textlist:
completion_text = re.split(r"[^a-zA-Z0-9_]", text)[-1]
if text.lstrip().startswith('#') and text.endswith('.'):
return
else:
editor.show_completion_list(textlist, completion_text,
automatic)
return
def _trigger_calltip(self, position, auto=True):
if not self.rope_project:
return
editor = self.tabs.currentWidget()
source_code = unicode(editor.toPlainText())
offset = position
textlist = self.rope_project.get_calltip_text(
source_code, offset, editor.file_name or self.rope_temp_path)
if not textlist:
return
obj_fullname = ''
signatures = []
cts, doc_text = textlist
cts = cts.replace('.__init__', '')
parpos = cts.find('(')
if parpos:
obj_fullname = cts[:parpos]
obj_name = obj_fullname.split('.')[-1]
cts = cts.replace(obj_fullname, obj_name)
signatures = [cts]
if '()' in cts:
# Either inspected object has no argument, or it's
# a builtin or an extension -- in this last case
# the following attempt may succeed:
signatures = getsignaturesfromtext(doc_text, obj_name)
if not obj_fullname:
obj_fullname = codeeditor.get_primary_at(source_code, offset)
if obj_fullname and not obj_fullname.startswith('self.') and doc_text:
if signatures:
signature = signatures[0]
module = obj_fullname.split('.')[0]
note = '\n Function of %s module\n\n' % module
text = signature + note + doc_text
else:
text = doc_text
editor.show_calltip(obj_fullname, text, at_position=position)
def _go_to_definition(self, position):
if not self.rope_project:
return
editor = self.tabs.currentWidget()
source_code = unicode(editor.toPlainText())
offset = position
fname, lineno = self.rope_project.get_definition_location(
source_code, offset, editor.file_name or self.rope_temp_path)
self.show_position(fname, lineno)
def show_position(self, file_name, line):
if not file_name or file_name == '':
return
if not self.add_file(file_name):
return
if line is None:
return
editor = self.tabs.currentWidget()
cursor = editor.textCursor()
cursor.setPosition(0, QTextCursor.MoveAnchor)
cursor.movePosition(QTextCursor.Down, QTextCursor.MoveAnchor,
line - 1)
editor.setTextCursor(cursor)
editor.raise_()
editor.setFocus()
self.raise_()
def _finalize_new_editor(self, editor, tab_name):
editor.file_was_changed = False
editor.textChanged.connect(lambda: self._file_changed(editor))
self.connect(editor, SIGNAL('trigger_code_completion(bool)'),
self._trigger_code_completion)
self.connect(editor, SIGNAL('trigger_calltip(int)'),
self._trigger_calltip)
self.connect(editor, SIGNAL("go_to_definition(int)"),
self._go_to_definition)
self.tabs.addTab(editor, tab_name)
self.tabs.setCurrentWidget(editor)
self.setVisible(True)
self.raise_()
def new_file(self):
editor = self._setup_editor()
editor.file_name = None
editor.set_text(self.template_code)
self._finalize_new_editor(editor, '*New Plugin')
def add_file(self, file_name):
if file_name and not file_name.endswith('py'):
QMessageBox.warning(self, 'Cannot load file',
'Only Python files are supported for editing')
return False
for i in xrange(self.tabs.count()):
if file_name == self.tabs.widget(i).file_name:
self.tabs.setCurrentIndex(i)
self.raise_()
return True
editor = self._setup_editor()
editor.file_name = file_name
editor.set_text_from_file(file_name, 'python')
# Remove extra newline
text = editor.toPlainText()
if text.endswith('\n'):
editor.setPlainText(text[:-1])
tab_name = os.path.split(file_name.decode('utf-8'))[1]
self._finalize_new_editor(editor, tab_name)
return True
def close_file(self, tab_index):
if self.tabs.widget(tab_index).file_was_changed and \
self.tabs.widget(tab_index).file_name:
fname = os.path.split(self.tabs.widget(tab_index).file_name)[1]
if not fname:
fname = 'New Plugin'
ans = QMessageBox.question(
self, 'File was changed',
'Do you want to save "%s" before closing?' % fname,
QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel)
if ans == QMessageBox.Yes:
return self.save_file(self.tabs.widget(tab_index), False)
elif ans == QMessageBox.Cancel:
return False
self.tabs.removeTab(tab_index)
return True
def closeEvent(self, event):
if not self.close_all():
event.ignore()
else:
event.accept()
def close_all(self):
while self.tabs.count():
if not self.close_file(0):
return False
return True
def get_editor(self, file_name):
""" Get editor object for a file name. Returns None if no editor
for the given file name exists.
"""
for i in xrange(self.tabs.count()):
if file_name == self.tabs.widget(i).file_name:
return self.tabs.widget(i)
return None
def file_was_changed(self, editor):
""" Returns if the file for an editor object has been changed.
"""
if not editor:
return False
return editor.file_was_changed
def _file_changed(self, editor):
editor.file_was_changed = True
if not editor.file_name:
fname = 'New Plugin'
else:
fname = os.path.split(editor.file_name)[1]
text = '*' + fname
self.tabs.setTabText(self.tabs.indexOf(editor), text)
def code(self, editor=None):
""" Returns code for an editor object as a list of strings (one
for each line).
"""
if editor is None:
editor = self.tabs.currentWidget()
return [editor.get_text_line(l)
for l in xrange(editor.get_line_count())]
def code_has_errors(self, editor=None):
""" Returns if the code from an editor object can be compiled.
"""
code = '\n'.join(self.code(editor)).encode('UTF-8')
try:
compile(code, '', 'exec')
except SyntaxError as e:
return e.msg + ' (Line %d)' % (e.lineno)
return None
def save_file(self, editor, force_dialog=False):
""" Save the file from an editor object.
:param editor: The editor for which the while should be saved.
:param bool force_dialog: If True, a "Save as..." dialog will be
shown even if a file name is associated with the editor.
"""
if not editor:
return
if force_dialog or not editor.file_name:
d = QFileDialog(
self, 'Choose where to save file',
self.tabs.currentWidget().file_name or self.default_path)
d.setAcceptMode(QFileDialog.AcceptSave)
d.setNameFilter("Python files (*.py)")
d.setDefaultSuffix('py')
if d.exec_():
file_name = unicode(d.selectedFiles()[0])
else:
return False
else:
file_name = editor.file_name
err = self.code_has_errors(editor)
if err:
if QMessageBox.warning(
self, 'Error saving "%s"' % editor.file_name,
'Compile error:\n' + err + '\n\nIf this file contains '
'a plugin, it will disappear from the plugin list.\n'
'Save anyway?',
QMessageBox.Yes | QMessageBox.No) == QMessageBox.No:
return False
try:
f = open(file_name, 'w')
f.write('\n'.join(self.code(editor)).encode('UTF-8'))
f.close()
except IOError, e:
QMessageBox.critical(
self, 'Error saving "%s"' % editor.file_name, str(e))
return False
editor.file_name = file_name
editor.file_was_changed = False
fname = os.path.split(editor.file_name)[1]
self.tabs.setTabText(self.tabs.indexOf(editor), fname)
self.plugin_saved.emit(editor.file_name)
return True
def save_current(self, force_dialog=False):
editor = self.tabs.currentWidget()
self.save_file(editor, force_dialog)
def _current_editor_changed(self, index):
editor = self.tabs.widget(index)
self.find_widget.set_editor(editor)
spykeviewer-0.4.1/spykeviewer/ui/filter_dialog.py 0000644 0001750 0001750 00000016430 12262550403 020372 0 ustar rob rob from PyQt4.QtGui import (QDialog, QLabel, QComboBox, QDialogButtonBox,
QGridLayout, QLineEdit, QMessageBox, QCheckBox,
QFont)
from PyQt4.QtCore import Qt, SIGNAL
from spyderlib.widgets.sourcecode.codeeditor import CodeEditor
class FilterDialog(QDialog):
""" A dialog for editing filters
"""
solo_signatures = ['def filter(block):', 'def filter(segment):',
'def filter(rcg):', 'def filter(rc):',
'def filter(unit):']
combi_signatures = ['def filter(blocks):', 'def filter(segments):',
'def filter(rcgs):', 'def filter(rcs):',
'def filter(units):']
def __init__(self, groups, type=None, group=None, name=None, code=None, combined=False, on_exception=False, parent=None):
QDialog.__init__(self, parent)
self.setupUi()
self.groups = groups
if type:
index = self.filterTypeComboBox.findText(type)
if index >= 0:
self.filterTypeComboBox.setCurrentIndex(index)
self.populate_groups()
if group:
index = self.filterGroupComboBox.findText(group)
if index >= 0:
self.filterGroupComboBox.setCurrentIndex(index)
if name:
self.nameLineEdit.setText(name)
if code:
self.editor.set_text('\n'.join(code))
if name and code and type:
self.filterTypeComboBox.setEnabled(False)
self.combinedCheckBox.setChecked(combined)
self.onExceptionCheckBox.setChecked(on_exception)
def populate_groups(self):
self.filterGroupComboBox.clear()
self.filterGroupComboBox.addItem('')
for g in sorted(self.groups[self.filterTypeComboBox.currentText()]):
self.filterGroupComboBox.addItem(g)
def setupUi(self):
self.setWindowTitle('Edit filter')
#self.resize(400, 300)
self.signatureLabel = QLabel(self)
self.signatureLabel.setText('def filter(block):')
font = QFont('Some font that does not exist')
font.setStyleHint(font.TypeWriter, font.PreferDefault)
self.editor = CodeEditor(self)
self.editor.setup_editor(
linenumbers=False, language='py',
scrollflagarea=False, codecompletion_enter=True, font=font,
highlight_current_line=False, occurence_highlighting=False)
self.editor.setCursor(Qt.IBeamCursor)
self.editor.horizontalScrollBar().setCursor(Qt.ArrowCursor)
self.editor.verticalScrollBar().setCursor(Qt.ArrowCursor)
self.editor.set_text('return True')
self.onExceptionCheckBox = QCheckBox(self)
self.onExceptionCheckBox.setText('True on exception')
self.onExceptionCheckBox.setToolTip('Determines if the filter will '
'admit items if there is an '
'exception during its execution')
self.combinedCheckBox = QCheckBox(self)
self.combinedCheckBox.setText('Combined filter')
self.combinedCheckBox.setToolTip('Determines if the filter operates '
'on single items (return True or '
'False) or lists of items (return a '
'list of items to be admitted)')
self.filterTypeComboBox = QComboBox(self)
self.filterTypeComboBox.addItem('Block')
self.filterTypeComboBox.addItem('Segment')
self.filterTypeComboBox.addItem('Recording Channel Group')
self.filterTypeComboBox.addItem('Recording Channel')
self.filterTypeComboBox.addItem('Unit')
self.filterGroupComboBox = QComboBox(self)
self.nameLineEdit = QLineEdit()
self.dialogButtonBox = QDialogButtonBox(self)
self.dialogButtonBox.setAutoFillBackground(False)
self.dialogButtonBox.setOrientation(Qt.Horizontal)
self.dialogButtonBox.setStandardButtons(
QDialogButtonBox.Cancel | QDialogButtonBox.Ok)
self.dialogButtonBox.setCenterButtons(True)
gridLayout = QGridLayout(self)
gridLayout.addWidget(self.signatureLabel, 0, 0, 1, 4)
gridLayout.addWidget(self.editor, 1, 0, 1, 4)
gridLayout.addWidget(self.onExceptionCheckBox, 2, 2, 1, 1)
gridLayout.addWidget(self.combinedCheckBox, 2, 3, 1, 1)
gridLayout.addWidget(QLabel('Type:', self), 2, 0)
gridLayout.addWidget(self.filterTypeComboBox, 2, 1)
gridLayout.addWidget(QLabel('Group:', self), 3, 0)
gridLayout.addWidget(self.filterGroupComboBox, 3, 1, 1, 3)
gridLayout.addWidget(QLabel('Name:', self), 4, 0)
gridLayout.addWidget(self.nameLineEdit, 4, 1, 1, 3)
gridLayout.addWidget(self.dialogButtonBox, 5, 0, 1, 4)
self.connect(self.dialogButtonBox, SIGNAL('accepted()'), self.accept)
self.connect(self.dialogButtonBox, SIGNAL('rejected()'), self.reject)
self.combinedCheckBox.stateChanged.connect(
self.combined_state_changed)
self.connect(self.filterTypeComboBox,
SIGNAL('currentIndexChanged(int)'),
self.on_filterTypeComboBox_currentIndexChanged)
def name(self):
return self.nameLineEdit.text()
def code(self):
return [self.editor.get_text_line(l) for l in xrange(
self.editor.get_line_count())]
def type(self):
return self.filterTypeComboBox.currentText()
def combined(self):
return self.combinedCheckBox.isChecked()
def group(self):
if self.filterGroupComboBox.currentText() == '':
return None
return self.filterGroupComboBox.currentText()
def on_exception(self):
return self.onExceptionCheckBox.isChecked()
def combined_state_changed(self):
self.set_signature()
def code_errors(self):
code = self.signatureLabel.text() + '\n\t'
code += '\n\t'.join(self.code())
try:
compile(code, '', 'exec')
except SyntaxError as e:
return e.msg + ' (Line %d)' % (e.lineno - 1)
return None
def set_signature(self):
if self.combinedCheckBox.isChecked():
self.signatureLabel.setText(
self.combi_signatures[
self.filterTypeComboBox.currentIndex()])
else:
self.signatureLabel.setText(
self.solo_signatures[
self.filterTypeComboBox.currentIndex()])
def on_filterTypeComboBox_currentIndexChanged(self, index):
self.set_signature()
self.populate_groups()
#noinspection PyCallByClass,PyTypeChecker,PyArgumentList
def accept(self):
if len(self.nameLineEdit.text()) < 1:
QMessageBox.critical(self, 'Error saving filter',
'Please provide a name for the filter.')
return
if '"' in self.nameLineEdit.text():
QMessageBox.critical(self, 'Error saving filter',
'You cannot use " in the name of a filter.')
return
err = self.code_errors()
if err:
QMessageBox.critical(self, 'Error saving filter',
'Compile error:\n' + err)
return
QDialog.accept(self) spykeviewer-0.4.1/spykeviewer/ui/dir_files_dialog.py 0000644 0001750 0001750 00000005117 12262550403 021045 0 ustar rob rob from PyQt4.QtCore import QEvent
from PyQt4.QtGui import (QFileDialog, QListView,
QPushButton, QDialog, QTreeView)
class DirFilesDialog(QFileDialog):
""" A file dialog that allows to choose multiple files and folders.
"""
def __init__(self, parent=None, caption='', directory='', filter=''):
super(DirFilesDialog, self).__init__(parent, caption,
directory, filter)
self.setOption(QFileDialog.DontUseNativeDialog, True)
self.setAcceptMode(QFileDialog.AcceptOpen)
self.setFileMode(QFileDialog.Directory)
self.setNameFilter('All files or folders (*)')
self.setNameFilterDetailsVisible(False)
self.list_view = self.findChild(QListView, 'listView')
if self.list_view:
self.list_view.setSelectionMode(QListView.ExtendedSelection)
sel_model = self.list_view.selectionModel()
sel_model.selectionChanged.connect(self.enable_update)
self.tree_view = self.findChild(QTreeView, 'listView')
if self.tree_view:
self.tree_view.setSelectionMode(QTreeView.ExtendedSelection)
sel_model = self.tree_view.selectionModel()
sel_model.selectionChanged.connect(self.enable_update)
for b in self.findChildren(QPushButton):
if 'choose' in b.text().lower():
self.button = b
b.installEventFilter(self)
b.clicked.disconnect()
b.clicked.connect(self.choose_clicked)
b.setEnabled(False)
break
def eventFilter(self, watched, event):
if event.type() == QEvent.EnabledChange:
if not watched.isEnabled():
if self.list_view:
if self.list_view.selectionModel().selectedIndexes():
watched.setEnabled(True)
elif self.tree_view:
if self.tree_view.selectionModel().selectedIndexes():
watched.setEnabled(True)
return super(QFileDialog, self).eventFilter(watched, event)
def enable_update(self):
if self.list_view:
if self.list_view.selectionModel().selectedIndexes():
self.button.setEnabled(True)
else:
self.button.setEnabled(False)
elif self.tree_view:
if self.tree_view.selectionModel().selectedIndexes():
self.button.setEnabled(True)
else:
self.button.setEnabled(False)
def choose_clicked(self):
self.done(QDialog.Accepted) spykeviewer-0.4.1/spykeviewer/ui/neo_navigation_ui.py 0000644 0001750 0001750 00000012663 12262550403 021267 0 ustar rob rob # -*- coding: utf-8 -*-
# Form implementation generated from reading ui file '.\neo_navigation.ui'
#
# Created: Mon Sep 09 17:08:01 2013
# by: PyQt4 UI code generator 4.9.6
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_neoNavigationDock(object):
def setupUi(self, neoNavigationDock):
neoNavigationDock.setObjectName(_fromUtf8("neoNavigationDock"))
neoNavigationDock.resize(352, 559)
self.dockWidgetContents = QtGui.QWidget()
self.dockWidgetContents.setObjectName(_fromUtf8("dockWidgetContents"))
self.gridLayout = QtGui.QGridLayout(self.dockWidgetContents)
self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
self.verticalLayout_31 = QtGui.QVBoxLayout()
self.verticalLayout_31.setObjectName(_fromUtf8("verticalLayout_31"))
self.blocksLabel = QtGui.QLabel(self.dockWidgetContents)
self.blocksLabel.setObjectName(_fromUtf8("blocksLabel"))
self.verticalLayout_31.addWidget(self.blocksLabel)
self.neoBlockList = QtGui.QListView(self.dockWidgetContents)
self.neoBlockList.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.neoBlockList.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
self.neoBlockList.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
self.neoBlockList.setObjectName(_fromUtf8("neoBlockList"))
self.verticalLayout_31.addWidget(self.neoBlockList)
self.channelGroupsLabel = QtGui.QLabel(self.dockWidgetContents)
self.channelGroupsLabel.setObjectName(_fromUtf8("channelGroupsLabel"))
self.verticalLayout_31.addWidget(self.channelGroupsLabel)
self.neoChannelGroupList = QtGui.QListView(self.dockWidgetContents)
self.neoChannelGroupList.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.neoChannelGroupList.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
self.neoChannelGroupList.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
self.neoChannelGroupList.setObjectName(_fromUtf8("neoChannelGroupList"))
self.verticalLayout_31.addWidget(self.neoChannelGroupList)
self.channelsLabel = QtGui.QLabel(self.dockWidgetContents)
self.channelsLabel.setObjectName(_fromUtf8("channelsLabel"))
self.verticalLayout_31.addWidget(self.channelsLabel)
self.neoChannelList = QtGui.QListView(self.dockWidgetContents)
self.neoChannelList.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.neoChannelList.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
self.neoChannelList.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
self.neoChannelList.setObjectName(_fromUtf8("neoChannelList"))
self.verticalLayout_31.addWidget(self.neoChannelList)
self.gridLayout.addLayout(self.verticalLayout_31, 0, 0, 1, 1)
self.verticalLayout_29 = QtGui.QVBoxLayout()
self.verticalLayout_29.setObjectName(_fromUtf8("verticalLayout_29"))
self.segmentsLabel = QtGui.QLabel(self.dockWidgetContents)
self.segmentsLabel.setObjectName(_fromUtf8("segmentsLabel"))
self.verticalLayout_29.addWidget(self.segmentsLabel)
self.neoSegmentList = QtGui.QListView(self.dockWidgetContents)
self.neoSegmentList.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.neoSegmentList.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
self.neoSegmentList.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
self.neoSegmentList.setObjectName(_fromUtf8("neoSegmentList"))
self.verticalLayout_29.addWidget(self.neoSegmentList)
self.unitsLabel = QtGui.QLabel(self.dockWidgetContents)
self.unitsLabel.setObjectName(_fromUtf8("unitsLabel"))
self.verticalLayout_29.addWidget(self.unitsLabel)
self.neoUnitList = QtGui.QListView(self.dockWidgetContents)
self.neoUnitList.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.neoUnitList.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
self.neoUnitList.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
self.neoUnitList.setObjectName(_fromUtf8("neoUnitList"))
self.verticalLayout_29.addWidget(self.neoUnitList)
self.gridLayout.addLayout(self.verticalLayout_29, 0, 1, 1, 1)
neoNavigationDock.setWidget(self.dockWidgetContents)
self.retranslateUi(neoNavigationDock)
QtCore.QMetaObject.connectSlotsByName(neoNavigationDock)
def retranslateUi(self, neoNavigationDock):
neoNavigationDock.setWindowTitle(_translate("neoNavigationDock", "Navigation", None))
self.blocksLabel.setText(_translate("neoNavigationDock", "Blocks:", None))
self.channelGroupsLabel.setText(_translate("neoNavigationDock", "Channel Groups:", None))
self.channelsLabel.setText(_translate("neoNavigationDock", "Channels:", None))
self.segmentsLabel.setText(_translate("neoNavigationDock", "Segments:", None))
self.unitsLabel.setText(_translate("neoNavigationDock", "Units:", None))
spykeviewer-0.4.1/spykeviewer/ui/plugin_model.py 0000644 0001750 0001750 00000011450 12262550403 020241 0 ustar rob rob from PyQt4.QtCore import Qt
from PyQt4.QtCore import QAbstractItemModel, QModelIndex
from spykeviewer.plugin_framework.plugin_manager import PluginManager
#noinspection PyMethodOverriding
class PluginModel(PluginManager, QAbstractItemModel):
""" Implements a Qt-Model for the PluginManager for use in e.g. QTreeView
"""
DataRole = Qt.UserRole
FilePathRole = Qt.UserRole + 1
def __init__(self, parent=None):
PluginManager.__init__(self)
QAbstractItemModel.__init__(self, parent)
def columnCount(self, parent):
return 1
def data(self, index, role):
if not index.isValid():
return None
item = index.internalPointer()
if role == Qt.DisplayRole:
if index.column() > 0:
return None
return item.name.decode('utf-8')
if role == PluginModel.DataRole:
return item.data
if role == PluginModel.FilePathRole:
return item.path
return None
def flags(self, index):
if not index.isValid():
return Qt.NoItemFlags
if not index.internalPointer().data:
return Qt.NoItemFlags
return Qt.ItemIsEnabled | Qt.ItemIsSelectable
def headerData(self, section, orientation, role):
if orientation == Qt.Horizontal and role == Qt.DisplayRole and \
section == 0:
return self.root.name
return None
def index(self, row, column, parent):
if not self.hasIndex(row, column, parent):
return QModelIndex()
if not parent.isValid():
parent_node = self.root
else:
parent_node = parent.internalPointer()
child_node = parent_node.child(row)
if child_node:
return self.createIndex(row, column, child_node)
else:
return QModelIndex()
def parent(self, index):
if not index.isValid():
return QModelIndex()
child_node = index.internalPointer()
parent_node = child_node.parent
if parent_node == self.root:
return QModelIndex()
return self.createIndex(parent_node.row(), 0, parent_node)
def rowCount(self, parent):
if parent.column() > 0:
return 0
if not parent.isValid():
parent_node = self.root
else:
parent_node = parent.internalPointer()
return parent_node.childCount()
def get_indices_for_path(self, path, parent=None):
indices = []
if parent is None:
parent = self.root
for i in xrange(parent.childCount()):
c = parent.child(i)
indices.extend(self.get_indices_for_path(path, c))
if c.path == path:
indices.append(self.createIndex(i, 0, c))
return indices
def get_indices_for_name(self, name, parent=None):
indices = []
if parent is None:
parent = self.root
for i in xrange(parent.childCount()):
c = parent.child(i)
indices.extend(self.get_indices_for_name(name, c))
if c.name == name:
indices.append(self.createIndex(i, 0, c))
return indices
def get_all_indices(self, parent=None):
indices = []
if parent is None:
parent = self.root
for i in xrange(parent.childCount()):
c = parent.child(i)
indices.extend(self.get_all_indices(c))
indices.append(self.createIndex(i, 0, c))
return indices
def get_all_folders(self, parent=None):
indices = []
if parent is None:
parent = self.root
for i in xrange(parent.childCount()):
c = parent.child(i)
if c.childCount():
indices.extend(self.get_all_folders(c))
indices.append(self.createIndex(i, 0, c))
return indices
def get_plugins_for_name(self, name):
""" Return list of plugins with given name
"""
indices = self.get_indices_for_name(name)
plugins = []
for idx in indices:
p = self.data(idx, self.DataRole)
if p:
plugins.append(p)
return plugins
def get_plugins_for_path(self, name):
""" Return list of plugins in given path
"""
indices = self.get_indices_for_path(name)
plugins = []
for idx in indices:
p = self.data(idx, self.DataRole)
if p:
plugins.append(p)
return plugins
def get_all_plugins(self):
""" Return all plugins in this model
"""
indices = self.get_all_indices()
plugins = []
for idx in indices:
p = self.data(idx, self.DataRole)
if p:
plugins.append(p)
return plugins
spykeviewer-0.4.1/spykeviewer/ui/settings.ui 0000644 0001750 0001750 00000011765 12262550403 017421 0 ustar rob rob
Settings00647438SettingsQGroupBox {
border: 1px solid gray;
border-radius: 5px;
margin-top: 1ex; /* leave space at the top for the title */
}
QGroupBox::title {
subcontrol-origin: margin;
subcontrol-position: top left; /* position at the top center */
padding: 0 2px;
left: 10px;
}Plugin pathsAddRemoveQt::HorizontalQDialogButtonBox::Cancel|QDialogButtonBox::OkFilter pathtrueChangeSelection pathtrueChangeData pathtrueChangeRemote scripttrueChangebuttonBoxaccepted()Settingsaccept()248254157274buttonBoxrejected()Settingsreject()316260286274
spykeviewer-0.4.1/spykeviewer/ui/icons_rc.py 0000644 0001750 0001750 00000413735 12262550403 017376 0 ustar rob rob # -*- coding: utf-8 -*-
# Resource object code
#
# Created: Mi. Jun 19 11:08:33 2013
# by: The Resource Compiler for PyQt (Qt v4.8.2)
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore
qt_resource_data = "\
\x00\x00\x05\xff\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
\x00\x00\x05\xc6\x49\x44\x41\x54\x48\x89\x8d\x55\x5b\x6c\x54\x55\
\x14\x5d\xe7\x31\x77\xee\x3c\xee\x6d\x4b\x47\x87\xe9\x43\x5a\x79\
\x04\xda\xd2\x42\xa9\x94\xd8\x26\xf5\x17\x13\x3e\x04\x2a\x02\x15\
\x8d\x18\x2c\x34\x8a\x7e\xf1\x03\x8a\x91\x44\x6a\xd3\x50\xfc\xe0\
\x47\x12\x41\x4c\x79\x7d\x40\x1b\xa8\xb1\x60\x8c\x90\xf0\x88\xb5\
\xd4\x04\x95\xf2\x68\x29\xd2\x0e\x33\x1d\xec\x0c\x74\x1e\x77\xee\
\xbd\xe7\xf8\xd1\xd2\x4c\x79\x88\x3b\x39\x1f\xfb\x63\xad\x7d\xf6\
\x3e\x7b\xad\x43\xa4\x94\x78\x5e\x34\x34\x34\x38\x37\x6c\xd8\xf0\
\xf3\xc0\xc0\x40\x3e\xa5\x14\xb9\xb9\xb9\xb7\x57\xad\x5a\x55\xf7\
\x5c\x20\x00\x48\x29\x9f\x7b\x14\xc5\x51\xfc\xed\x81\x83\xd6\x58\
\x34\x26\x13\xc9\x94\xfc\x66\xff\x7e\x03\xc0\x0b\xff\x07\xcb\x76\
\xee\xdc\x39\xad\x60\x73\x73\xf3\x8c\xce\xce\xce\xee\xa1\x3b\x77\
\x7e\xad\xac\xac\x0c\xb7\xb5\xed\xa9\xaa\xa8\x58\xd4\xba\xfc\xf5\
\xe5\x73\x15\x45\x21\x42\x48\xf8\xfd\x7e\xaa\x79\xbd\x73\xaf\x5e\
\xbd\xfa\xc7\xb2\x65\xcb\xc2\xad\xad\xad\x4b\x3b\x3a\x3a\x0e\xf7\
\xf5\xf5\x1d\xa9\xa9\xa9\xb1\x32\xf9\x48\xe6\x88\x76\xef\xfe\x92\
\x11\x42\x6f\xae\x6b\x78\xbb\x28\x14\x0c\x86\xcf\x9f\x3f\x97\x2a\
\x2e\x7e\xb9\xe0\xd5\x9a\x1a\x9a\x4e\x1b\x60\x8c\xc3\xe1\xe0\x70\
\x38\x1c\xf0\x78\x3c\xe8\xee\xee\xb6\x21\xe5\xaf\xfe\x99\x33\xe7\
\x94\x95\x95\xf9\xda\xf6\xec\xb9\xb1\x6d\xdb\xb6\x79\xcf\x2c\xd0\
\xda\xda\x7a\x67\x55\xfd\x9b\x85\xf1\x78\x1c\x8a\xa2\x80\x73\x8e\
\x54\x2a\x05\x00\xf0\xb8\x5d\xe0\xdc\x01\xee\xe0\x70\x70\x0e\x42\
\x08\x18\x63\xe0\x9c\x43\x08\x01\xd3\x34\xa1\xaa\x2a\x5a\x5a\x5a\
\x06\x76\x6c\xdf\x3e\xfb\x11\x27\x9d\xaa\x44\x88\x2b\x91\x4c\xaa\
\x42\x08\x10\x42\x60\x9a\x26\x92\xc9\x24\x84\x10\x10\xb6\x8d\xa1\
\xa1\x3b\x08\x8e\x8c\x60\xf8\xef\xbb\x18\x18\x18\x84\x61\x18\xb0\
\x2c\x0b\x86\x61\xc0\x34\x4d\x48\x09\xd8\x96\x0d\xcb\x34\x5d\x84\
\x10\xf6\xd4\x0e\x54\x55\x5d\x7f\xea\xf4\xe9\x03\xb3\x8a\x8a\xb9\
\x69\x9a\x10\x42\x60\xec\xfe\x7d\x94\x96\x96\xc2\xe5\x52\xa1\x28\
\x0a\x28\xa5\xb0\x85\x80\x14\x02\xd7\xfa\xaf\xa3\xb0\xb0\x60\x72\
\x11\x14\xfc\xf6\x5b\x8f\xf9\x5a\xdd\x6b\x2b\x84\x10\x3f\x3e\xe2\
\xe4\x99\xf3\xaa\xaa\xaa\x2a\x99\x55\x54\xcc\x2d\xcb\x82\x10\x02\
\xb1\x68\x14\x15\x15\xe5\xb8\x17\x0a\x83\x10\xc0\x34\x2d\xe8\xba\
\x06\x5d\xd7\x20\x25\x30\x6f\xde\x5c\xdc\xbe\x7d\x1b\x3e\x5f\x2e\
\x52\xa9\x14\xe6\xcc\x99\xeb\x28\x2f\x2f\xaf\x00\x30\x55\x80\x66\
\x16\x58\x5d\x5f\xbf\x5e\x51\x94\xa9\x15\x2b\x2b\x2b\xc5\x58\x34\
\x06\xc6\x28\x14\xc5\x09\xcb\x32\xed\x74\x3a\x2d\x14\xc5\x09\x29\
\x25\xe2\xf1\x38\x0a\x0b\x0a\x90\x4a\x19\x48\xa7\x4d\x78\x3c\x1e\
\xac\x59\xb3\xe6\xfd\x69\x8f\xbc\x65\xcb\x96\xbc\xac\xac\xac\xc3\
\x96\x65\xe5\xac\x79\x6b\x6d\x89\xc7\xe3\x61\x96\x35\xb1\x69\x1e\
\x8f\x67\xe2\x16\x94\xe2\xf3\x9d\x9f\xfd\xd1\xde\xde\xde\xee\x70\
\x38\x3c\x8d\x8d\x9b\x1b\x76\x7c\xba\xe3\x25\xc3\x30\x60\x18\x06\
\x1e\x3e\x1c\x87\xdb\xed\x82\x94\x12\xd1\x68\xcc\x3e\x7a\xe4\xf0\
\x5f\xa6\x69\x8e\x9e\x3c\x79\x72\x23\x09\x04\x02\xf5\xa7\x4e\x77\
\x1d\x09\x04\xf2\x68\xec\x41\x0c\xb6\x6d\xc3\xb2\x2c\xfc\x73\xff\
\x3e\xfc\x7e\x3f\xbc\x5e\x2f\x7e\xe8\xea\x0a\x35\x36\x7e\x50\x22\
\xa5\xfc\x67\x72\x21\xaa\xda\xda\xf6\x9e\x7b\x63\xe5\x4a\x57\x3c\
\x1e\x47\x30\x38\x82\x40\x20\x6f\x42\x58\x8c\x21\x27\x27\x07\x83\
\x83\x83\xd6\xfa\x75\x6b\x3f\xa4\x00\x94\x44\x22\x81\x68\x2c\x0a\
\xdb\xb6\x41\x08\x81\x10\x02\x00\x30\xfe\x70\x1c\x86\x61\x60\x68\
\x68\xe8\xe6\x23\x72\x00\x90\x52\xf6\xb8\xdc\xae\xd1\x58\x2c\x86\
\xb4\x61\x80\x52\x06\x5b\x08\x50\x4a\x26\x70\xf1\x38\x52\xa9\x24\
\x91\x52\x32\x0a\xc0\xd6\xbc\x1a\x72\xb2\xb3\xc1\x28\x85\x14\x02\
\x94\x10\x28\x8a\x82\x82\xc2\x7c\x68\x9a\x86\xd2\xb2\xd2\xd9\x78\
\x2c\x28\xa1\x2f\xe8\x59\x3a\xb2\xb2\xb3\x41\xc8\x04\xb1\x90\x00\
\xe7\x1c\xbe\xdc\x5c\xe8\x9a\x2e\x01\x80\x46\x22\x91\xbe\x8e\x8e\
\x13\xfd\xdf\x1f\xfa\x6e\x78\x6c\x6c\xcc\xe6\x9c\x63\xd2\xd0\xa0\
\xaa\x2a\x28\x25\xd0\xf5\xac\x99\xd5\xd5\xd5\x53\x0a\xad\xae\xae\
\x9e\x97\x5f\x50\xe0\x22\x20\xe0\x9c\x23\xd7\xe7\x9b\x12\x5e\x28\
\x1c\xb2\x3f\xf9\x78\xeb\xcd\x73\xe7\x7e\xb9\x35\x3c\x3c\xdc\x4b\
\xa4\x94\x20\x84\x70\x00\xf8\x62\xd7\xae\x81\xa6\xa6\xa6\xc2\x68\
\x34\x8a\x64\x32\x05\xbf\xff\x45\x10\x42\x60\x59\x16\x7a\x7a\x7a\
\x60\xa4\x0c\x70\xce\xc0\x18\xc7\xc2\xf2\x72\x38\x15\x05\x86\x99\
\x46\x34\x1a\x03\x63\x0c\xba\xae\xe3\xeb\xbd\x6d\xb7\xbe\x6a\x6e\
\x9e\x43\x08\x71\x4a\x29\x0d\x3a\x39\x53\x4b\x4a\x69\x7d\x77\xf0\
\xe0\xf1\x58\x2c\x06\x4d\xd3\xa0\x6b\x1a\x86\xef\x0e\x83\x73\x0e\
\xc6\x18\x16\x2e\x2c\x47\x5e\x7e\x3e\x5e\x9a\x55\x84\x05\x25\x25\
\x20\x00\x2c\xcb\xc2\xe0\xc0\x20\x18\x63\xa0\x8c\x21\x1c\xba\x87\
\x63\x47\x8f\xb6\x4f\x72\x1a\x4f\xe8\x60\x64\x64\xe4\xc4\x68\x38\
\x6c\x39\x9d\x2a\x14\xa7\x82\x9c\x19\x33\xd0\x7f\xad\x1f\x89\x44\
\x12\xb6\x6d\x43\xd7\x75\xb8\x54\x15\xb6\x6d\x23\x91\x4c\xa2\xff\
\xc6\x0d\xe4\xfa\x7c\x00\x00\x46\x29\x46\x47\x47\xd3\xf7\x82\xc1\
\xce\x69\x3a\xc8\xb4\x8a\x33\x67\xcf\x86\xea\xea\xea\x5e\x8c\xc7\
\xe3\x10\x52\xc0\x4c\x5b\x18\x1f\x1f\x47\x32\x99\xc4\xef\x7d\x7d\
\xb0\xa5\x04\x21\x00\x25\x04\x8b\x16\x2f\x06\xa5\x53\x96\x03\x29\
\x25\x34\x4d\xc3\xe5\x8b\x17\x47\xea\xeb\x57\xe7\x3f\xa1\x64\x42\
\x08\xef\xea\xea\x4a\x00\x00\xe3\x0c\x6e\x97\x1b\x9a\xa6\xc1\xeb\
\xf5\x80\x31\x86\xc5\x95\x95\xa8\x7a\xe5\x15\x2c\x59\x52\x85\xca\
\xca\x25\x60\x94\x41\x55\x55\xe8\xba\x06\x97\xcb\x05\xc6\x18\x20\
\x25\xce\x9c\xe9\x4e\x3c\xb3\x03\x42\xc8\x82\xcd\x9b\x37\x77\xed\
\xdb\xb7\xaf\xa8\xa5\xa5\x25\x12\x89\x44\x1e\xd4\xd5\xd5\x15\xce\
\x9f\xbf\xc0\x91\x36\x4d\xd8\x93\xfa\xe0\x93\x36\xdd\xdb\xdb\x6b\
\x5c\xba\x78\x61\x28\x2f\x2f\xcf\xf7\xee\x7b\x1b\x67\x7c\xb2\xf5\
\xa3\x5b\x87\x0e\x1d\x5a\x21\xa5\xfc\x6b\x5a\x6b\x99\x87\x52\xba\
\xb4\xb6\xb6\xf6\xbc\xd3\xe9\x5c\x0d\x20\x1b\x40\x63\x53\x53\xd3\
\x95\xde\x2b\x57\xc4\x9f\xd7\xfa\xe5\xb5\xfe\xeb\xf2\xd2\xa5\xcb\
\xf6\xa6\x4d\x9b\x2e\x03\x78\x07\x80\xd7\xed\x76\x6f\xac\xad\xad\
\x3d\x0f\xa0\xf2\x71\xbe\xa7\xfe\xa3\x00\x58\x66\xee\x74\x3a\xcb\
\x2e\x5c\xbc\x64\x06\x43\x61\x19\x1a\x8d\xc8\xb3\x67\x7f\x4a\x11\
\x42\x0a\x1f\xc3\xf0\xa7\x71\x4d\xb3\xeb\x8c\xae\xec\xcc\xdc\x30\
\x8c\xd0\xf1\x63\x47\xaf\x07\x83\x41\x0e\x80\x04\x02\x81\x84\x94\
\x32\xf2\x18\x66\xda\x5f\xfc\xd4\x37\xf8\xaf\x20\x84\xcc\x04\xe0\
\x9a\x4c\x93\x52\xca\x7b\xff\x07\xf7\x2f\xa7\x85\x20\x10\x58\x5e\
\x02\x72\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\x00\x00\x06\x77\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
\x00\x00\x06\x3e\x49\x44\x41\x54\x48\x89\x85\x96\x59\x6c\x5c\x57\
\x1d\xc6\x7f\xe7\xae\x73\xe7\xce\x78\x89\x67\x3c\x9e\x71\x6c\xc7\
\xce\xe2\xb6\x4e\x49\xe4\xb4\x10\x09\xa8\x68\x69\x9a\x40\x02\x2f\
\xe4\x05\x84\x58\xa4\xbe\xf0\xc2\xf6\x00\x7d\x40\x42\x02\x81\x10\
\x8b\x10\x52\x84\xc2\x5b\x01\xa1\x14\x84\x8a\x58\x4a\x09\x8b\x9a\
\x96\xad\x69\x48\x88\xb2\xd4\xa4\x71\x12\x8f\x63\x7b\x3c\x1e\x8f\
\x3d\xcb\xbd\x73\xf7\x7b\x78\xc2\x4d\x64\x45\x9c\xb7\xff\xcb\xf7\
\xd3\xf7\x3f\x3a\xdf\x77\x84\x94\x92\x07\x1d\x27\xc2\xfa\xd0\x0f\
\x6e\x1e\xb9\x3a\x37\x7f\xcc\x4a\xbb\x8f\x25\xb1\x37\xa2\x90\x08\
\x2f\x4a\x1a\x4e\x28\x2e\x87\x89\xfe\x47\x88\x5e\x96\xbf\x7e\xb6\
\xfd\x20\x0d\xf1\x20\xc0\x6f\xae\xf7\x3e\xfa\xf3\x73\xf3\x5f\xc5\
\x59\x9d\xde\x39\x20\xc8\x99\x3a\x49\x1a\xb3\x5c\x6f\xd1\x72\x53\
\x9a\xa1\x81\x9b\x9a\x6c\x76\xbb\x4b\xb7\x16\x16\xbf\x95\x06\xed\
\xd3\xf2\xdc\xd7\x93\xff\x0b\xf8\xda\x6b\xa1\xd5\xdd\x6c\x9d\xae\
\xdd\x7a\xeb\x13\x4f\xec\xc9\xf2\xe4\xec\x04\xe3\xa5\x01\xa2\x54\
\xb2\xda\x09\x78\xab\xe6\xb3\xe1\x2b\x34\x36\x3d\xae\x55\x37\xa8\
\xaf\xae\x53\xaf\xdd\x65\xee\xce\xed\xb3\xee\x66\xe3\xe3\xf2\xfc\
\xa9\xf5\x7b\xf5\xb4\x7b\x87\x03\xa7\x3a\x86\x9e\x26\xbf\x78\xd8\
\xbf\x72\xe2\xa9\xe9\x2c\xef\x7f\xd7\x6e\x2a\xc5\x3e\xa4\x94\x08\
\xa9\x90\x31\x6d\x2c\x5b\xc7\x8c\x3d\x2a\x83\x06\x41\x9c\xc3\x71\
\x7b\x8c\xc9\x21\xb2\xd2\x3d\xfa\x46\x6b\xf5\x65\x71\xf0\x53\xc7\
\xe4\xe5\xe7\x9b\xff\xd3\x54\xee\xa3\xc9\xf4\xdb\xe3\x79\xf5\xc4\
\x4e\x3b\xa0\x3c\x32\x4c\x7f\x9f\x8d\x22\x04\xa9\x84\x04\x41\x2b\
\x84\xb6\x2b\xd0\x49\x19\x2f\x64\x78\x62\x7a\x07\xef\x98\x2c\xe0\
\x27\x60\x99\x59\xa6\x27\xca\x8f\xa9\xb1\xfb\xa3\x7b\x35\xb7\x00\
\x93\x5f\xb9\xfe\x54\xec\xf8\x9f\x2b\x17\xfb\xd8\xfb\xf0\x0c\xa1\
\xb0\xa9\xae\x87\x6c\x3a\x11\x5e\xa4\xe0\x85\x50\x6f\xc3\x5a\x17\
\x4c\x53\x67\x62\xc8\x64\x74\xd0\xa4\xbc\x23\x43\x20\x0d\xda\xbd\
\x80\x7c\x36\x4b\xa5\xd0\xff\x11\x31\xf5\xcc\x27\xb7\x01\xa2\xc6\
\xd2\x17\x33\xce\x02\xd9\x2c\x04\xf9\x5d\x2c\xbb\x39\xce\xdf\xec\
\x72\xa3\x91\xd2\x70\x61\xa1\x05\xaf\xdf\x86\xa5\x4e\x8a\xae\x09\
\xd6\x9d\x98\xb5\x4e\x84\x4c\x24\x1d\x3f\x62\xb5\x1b\x22\x54\x85\
\xd1\x4a\x89\x8c\x65\x7e\x5e\xec\x3d\xaa\x6c\xdd\xc1\x3b\xbf\x71\
\x75\x8f\x74\x1b\x4f\xd7\xda\x37\xf9\xcf\xd8\x28\xf6\x43\x63\x64\
\x95\x3c\x71\x68\xb1\xe2\xa8\x14\xf3\x92\x7a\x57\xe0\x27\xb0\xbf\
\x0c\xff\xae\xf6\x40\x26\x90\x46\x2c\xac\x75\x50\x55\x81\x95\x35\
\x81\x10\x55\xd3\x18\x29\x15\x0f\x2e\xac\x34\xde\x0b\xbc\xaa\x01\
\xcc\x2f\x36\xde\x83\xd3\x36\x4d\x2d\x62\x69\xf1\x16\x7d\x76\x8e\
\xf2\x80\x85\x9d\x31\xf1\xa5\x20\x15\x92\x7c\x16\x66\x27\x52\x7e\
\xf2\xb7\x26\xcd\x96\x83\xeb\x39\xc8\x34\xa2\x92\x83\xa1\xac\x82\
\xaf\x4b\xbc\x20\x46\x4d\x52\x76\x8e\x14\x58\xa8\x35\x9f\xdc\x02\
\x84\xae\xbb\x5f\x49\x02\x54\x19\xd3\xea\xba\xcc\x2d\xae\xd3\x68\
\x66\xd8\x33\x5e\x60\x78\xd0\x22\x44\xb0\x77\x50\xf2\xdb\x9a\xc7\
\xa6\xe3\xb1\xd6\xec\xe2\x38\x2e\x41\x14\x62\x0e\x09\xc6\xfa\x52\
\xc6\x8b\x79\x2c\xa9\xa0\xc5\x19\x96\x97\x97\x40\x88\x7d\x5b\x2b\
\x8a\xa3\x60\x48\x09\x23\x54\x2d\xc2\xef\x76\x68\x9b\xeb\xf8\x3d\
\x0b\x57\x98\xec\x2c\xa8\x88\x44\xc5\xf1\x53\x6c\x11\x92\x51\x23\
\x7a\x7e\x8f\x5e\xcf\xc3\xf5\x3c\x56\x64\xc4\x64\x7f\x96\xa3\x8f\
\x4f\x32\xa0\x4b\xfe\x7e\xe1\x0a\xf3\x61\x82\xa6\x19\x03\x5b\x80\
\x28\x0a\x23\x2d\x89\x88\x64\x84\x96\x86\x04\xb1\x87\xa2\xc4\xe4\
\x94\x36\x25\xd3\xe0\xa5\x6b\x31\xa3\x7d\x2a\x33\x65\x03\x55\xc4\
\x68\x9a\xc0\x4f\x63\x0c\xc5\x47\x23\xe6\x7d\x8f\xee\xa5\x94\x53\
\xd9\xd8\xd8\xc0\x0f\x7c\x12\x09\xa9\x6a\xc6\x5b\x80\xd4\xed\x54\
\xe3\x54\x41\xc8\x90\xd4\xef\x60\x09\x9f\x91\x3e\x8b\x23\xd3\x16\
\xdf\xf9\x43\x15\x3d\x4e\x98\x2a\x65\xf8\xd2\xb1\x51\x4e\xce\x0e\
\x71\xad\xa8\x73\xee\x6a\x80\x1e\x45\x9c\x38\x58\xe2\xdc\x85\x39\
\x44\xe2\x62\xc9\x80\xc5\x95\x35\xba\x6e\x40\xaa\x18\x2b\x5b\x80\
\x99\xa9\xbe\x37\xe6\xae\xaf\x92\xb5\x0d\x1e\x2a\x65\x98\x1a\xcf\
\xf0\xf8\x23\x05\x7e\xf8\x6a\x95\xdb\xf5\x80\x9c\xef\x51\xb1\x4b\
\x04\x91\xe4\xe4\xa1\x61\x0e\x8d\xd9\x0c\x67\x02\x9c\x8e\xc9\xef\
\xce\x5d\xa4\x5e\xaf\xa1\x27\x1e\x5a\xe2\x93\x20\x69\xb9\x09\x28\
\xfa\xc5\xad\x77\xf0\xd7\xef\x9e\xfc\x67\xb9\x90\xa9\x4e\x94\x06\
\x78\x66\x76\x82\x0f\x1c\x28\x71\xb3\x5a\xc7\xef\x6c\xa2\x45\x3e\
\x83\x59\xd8\x5f\xd1\x28\xe5\x04\xb6\xa1\x90\x51\x63\x88\x5c\xce\
\x5f\x9a\x63\xa9\xba\x40\xb3\xbe\x42\xa7\xd5\x64\xa3\xe3\xd0\xf3\
\x63\x3a\x7e\xea\x08\xa1\xfc\x69\xcb\xc1\xa0\x6d\x38\x9f\x3e\x7e\
\xe8\xcc\xbf\xae\xdf\x79\xee\xf8\xe1\x47\x70\xbd\x1e\xfb\x47\x74\
\xa2\x9e\x60\xbd\x07\x51\x90\x20\xfc\x4d\x2e\xcc\x29\xd4\xd7\x73\
\xc4\x51\x44\xd8\xd9\x40\x78\x4d\xd4\x60\x83\xbc\x16\x93\xa4\x02\
\xa1\xe9\x38\xa1\xc0\x57\x72\x2f\xca\xd7\xbf\xbf\x70\x5f\xd8\x3d\
\xfb\xe1\xc3\xa7\xde\x9c\x5f\xf8\xd8\x2f\xff\xfc\x8f\xf1\x24\x4a\
\xc8\x68\x0a\x03\x69\x82\x1b\x44\x98\x6a\x0e\x9d\x88\x3b\x77\x57\
\x58\xaa\x26\xec\x1e\x2f\xa2\xcb\x80\xbc\x1e\xb3\xa7\x3c\x40\x9c\
\x42\x75\xdd\xc5\x0d\xc1\xc5\x6a\xb1\xeb\xc8\x37\xb7\xa5\xe9\x44\
\x31\xbf\x6c\x57\x66\xbe\xfc\xd3\x17\x7f\xfc\x33\x12\x4f\xd9\x5d\
\x1e\x62\xa2\x32\x4c\x3e\x3f\x48\xff\x50\x81\x9d\xc5\x21\x0c\x55\
\xa1\xbc\xc3\xe6\xf2\xdc\x02\x96\x96\x63\xf7\xd8\x18\xf3\x49\x82\
\xef\xfb\xe4\xb3\x92\x9a\x1b\x12\x15\x0f\x3d\x27\x5f\xf8\xe0\x8d\
\x6d\x59\x94\xfb\xc2\x15\xed\x6c\x6d\xe8\xec\xc6\xd0\xbb\xbf\xb7\
\xb2\xbc\xca\xfc\x8d\x39\x6e\x2f\xae\x51\x6f\x29\x74\x9d\x0c\xa6\
\x59\x64\xb8\x38\x81\xd4\x87\x29\x94\x67\xf0\x44\x05\xbb\xb0\x0f\
\x2b\x3f\xc1\xa6\x2b\xa9\x3b\x09\xa1\x35\xf9\x3c\x83\x7b\xcf\x88\
\xcf\x5c\x56\xb6\x39\x70\xfd\x44\xba\x7e\xcf\x60\x64\xf6\x2f\x1c\
\x34\xf6\xad\xdf\xf8\xd5\x71\xb5\xba\xa6\xf5\x92\x29\x5a\xa9\x8d\
\xa7\xf5\x33\xb0\xa3\x1f\xdd\x84\x30\xc8\xd3\x69\xeb\x78\x1d\x8f\
\xd5\x0e\xdc\xed\xd9\xb2\x61\x4c\xbe\xc2\xe0\xf4\x19\xb2\xa6\x71\
\x6f\x09\xbc\x5d\x38\x8a\x90\x80\x8f\x8c\x5b\x54\x1e\x7d\x2d\x1a\
\x98\xd0\x97\x97\x2e\xce\xb6\xd6\xea\x45\xbb\x7d\x51\x5d\xaa\x79\
\x18\xd9\x61\x62\x09\x9a\xa5\x92\xc4\xeb\xf8\x7e\x2d\x5d\xed\x19\
\x4d\x3f\x7b\xf8\x12\x66\xee\xf7\x64\x8c\x06\xaa\x0c\xd1\xdf\xae\
\xc9\xfb\x2a\x53\x7c\xf6\x92\x41\xa2\x14\x81\x69\x84\x72\x80\x54\
\x99\x21\x70\x76\xe1\x6e\x96\xe8\x75\xfa\x4c\x55\x18\x71\x22\x48\
\xcd\x6c\x28\x8c\x4c\x47\xd1\xed\x7a\xa2\xa8\xb7\xa4\x50\xae\xa1\
\xc8\xcb\x18\xca\x4d\x12\xb5\x29\x4f\x1f\x88\xb6\x3b\x00\xa8\x16\
\x22\xc6\xd6\x9a\xa0\xbc\x89\x46\x9b\x24\xad\x62\x65\x46\x31\x47\
\x0b\x0c\x56\xf2\x01\xd2\x44\x20\x41\xfa\x12\xd1\x91\x82\x86\x54\
\xc4\x0a\x0a\x55\xd2\xa4\x86\x2a\x5b\xbc\x32\x1e\xdf\x2b\xb9\xad\
\xf4\xc5\xd3\x9b\x42\xec\xab\xab\xb2\x1a\x18\x58\xbe\x8d\xae\xda\
\xe8\x8a\x25\x14\xc5\x20\x15\x1a\x02\x29\x45\x1a\x93\xa4\x01\x51\
\xea\x11\xc5\x3d\x91\xc8\x9e\xcc\xf4\x05\xf2\x85\xfd\xdb\x7e\x15\
\xff\x05\x67\x00\x22\x69\xa7\xb6\x84\xd9\x00\x00\x00\x00\x49\x45\
\x4e\x44\xae\x42\x60\x82\
\x00\x00\x05\x5c\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
\x00\x00\x00\x06\x62\x4b\x47\x44\x00\x00\x00\x00\x00\x00\xf9\x43\
\xbb\x7f\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x00\x48\x00\x00\
\x00\x48\x00\x46\xc9\x6b\x3e\x00\x00\x00\x09\x76\x70\x41\x67\x00\
\x00\x00\x18\x00\x00\x00\x18\x00\x78\x4c\xa5\xa6\x00\x00\x03\x8d\
\x49\x44\x41\x54\x48\xc7\xa5\x96\xdd\x6b\x5c\x55\x14\xc5\x7f\xe7\
\xce\xbd\x93\x99\x49\x9b\xda\x6a\xad\x58\x69\x6b\x4a\xa6\x26\xd6\
\xfa\x01\x69\x91\x82\xf8\xe6\x5f\x60\x21\x4f\x3e\x54\x5f\xa4\xe0\
\x43\xf1\x0f\x28\xf8\xd2\x57\x21\x20\x08\x0a\x05\x7d\xac\xf8\xa4\
\x20\x14\xc4\x22\x41\xe8\x53\x8b\x29\x93\xd8\xd6\xf4\x6b\x62\x63\
\x3b\x93\x4c\xe6\xe3\x9e\xb3\xf7\xf6\x61\x66\xda\x99\x64\xea\x0c\
\xf4\xc0\xe1\x5e\x0e\x97\xb5\xf6\x5e\x6b\xed\xc3\x75\x66\xc6\xb3\
\xac\xcb\x97\x2f\xc7\x49\x92\x8c\x3b\xe7\xc6\x9d\x73\xfb\x77\xee\
\xd8\x51\x74\x51\xe6\x68\x8b\xe4\x8d\xa5\x1b\x37\x2e\xc5\x23\x82\
\xbc\x90\xcb\xe5\x5e\xc9\xe5\x72\xcf\x45\x51\xb4\x27\x8a\xa2\xc3\
\xf9\x7c\x7e\xa6\x50\x28\x1c\x39\x76\xec\xcd\xbd\xd9\x6c\xb2\x33\
\x1b\x67\x26\xbc\xba\x7c\x3d\x40\x6a\x8e\x24\xe3\x28\x57\x37\xee\
\x0d\x25\x98\x9b\x9b\x7b\x6b\x7e\x7e\xfe\xe7\xdd\xbb\x77\xef\x73\
\xce\x0d\xfc\x46\xcd\x78\x54\x17\x5a\x0a\xd9\x24\xc3\x58\xc6\xe1\
\x43\x40\xd5\x5c\x34\x8c\xa0\x5e\xaf\x1f\x9e\x98\x98\x78\x0c\x3e\
\x48\xd2\x72\xa5\xc9\x7a\x80\x38\x1b\xa3\x38\x52\x81\x20\x20\x0a\
\x43\x09\x44\xc4\x54\xb5\x0f\xdc\xcc\x30\x33\x54\x95\xb4\x59\xe7\
\x61\xb5\x46\x3e\xc9\x90\x0a\x78\x85\xa0\x90\x6a\xfb\x7d\x28\x41\
\x17\x6c\xd0\x6a\x36\x1a\xd4\xeb\x0d\xfe\x29\xdf\x47\x14\xbc\xb4\
\x77\xbb\x03\x23\x18\x0c\xf5\xa0\x5b\xfd\xa0\x15\x44\x9e\x14\x42\
\x1b\x38\x72\xed\xa2\x44\x20\x84\x11\x09\x86\x47\xd9\x50\xb3\xb6\
\x24\x0e\x54\x04\x55\x45\x4c\x47\x27\xe8\x95\x6a\x6b\x9a\x0c\x10\
\x35\x44\x0c\x01\x24\x84\x8e\x7f\x36\x9c\x60\x50\xf5\x5b\xcd\x36\
\xb3\x8e\x07\x86\x4a\xc0\xcc\x70\x40\xc3\x8f\xd0\x41\x2f\x88\x99\
\xf1\xd4\x59\x50\xa5\x95\x0a\xaa\x42\xc6\x41\x33\x18\x95\x86\x0c\
\x27\x90\x1e\x23\xb7\x76\xf4\x98\x18\x08\xa2\xb4\x52\x8f\x03\x88\
\xe0\x51\x5d\x69\xb4\x46\x23\xd8\x36\x07\x5b\xbb\x50\x55\xbc\x17\
\x52\xaf\x64\x22\x68\x7a\x63\xad\xe6\x11\x1d\x41\xa2\x93\x27\x4f\
\x16\xe2\x38\xde\x56\x79\xf7\x29\x12\x08\x3e\xc5\xab\xe1\x45\x51\
\x85\xd5\x5a\x20\xf5\x8a\xaa\xfe\xff\xa0\x7d\x72\xfa\xf4\xbb\xe7\
\xce\x9d\xbb\x10\xc7\x71\x5f\x9a\xba\xe0\xde\x7b\x1a\xad\x94\x99\
\x57\x5f\x66\x69\x69\x99\x3d\xf9\x0c\xf7\xab\x29\xd5\xba\xc7\x54\
\x50\x19\x20\xd1\x74\xb1\x18\x01\x99\xc5\x52\xc9\x6f\xac\xaf\xbf\
\x38\x36\x36\x16\x79\xef\xfb\xe4\x90\x4e\xce\x93\x24\x21\x4d\x53\
\x12\x84\x44\x1b\x3c\xa8\x79\x2a\x75\x4f\x04\x04\x0c\x91\x1e\x89\
\xa6\x8b\xc5\x2c\x90\xa3\x3d\x7c\xc9\xe4\xc1\x83\x72\xfc\xc4\x89\
\x9d\xaa\x4a\x08\xe1\xf1\xdd\xd3\x2b\x55\x1c\xc7\x44\x51\x84\x8a\
\xe0\xc5\xb0\x20\x98\x28\x01\xeb\xf8\xd7\xef\x81\x01\x05\x60\x02\
\xc8\x00\xde\xcc\xc6\xbd\xf7\x84\xce\xe0\x0c\x4a\xd2\x93\x33\x50\
\xb5\xf6\xf5\x61\x86\x73\x60\xbd\x1e\x2c\x96\x4a\x1e\x78\x00\xa4\
\x1d\x92\x5d\x66\x56\xd8\x3a\x07\x5b\xc1\xfb\xce\xcd\x88\x4c\x89\
\x30\x9a\x2d\x61\xa3\xe1\xa5\xcf\x83\xc5\x52\x49\xa6\x8b\xc5\x87\
\xc0\xa1\x76\x9a\x29\x74\x63\x39\x28\x45\x38\x47\x3e\x9f\xc7\x59\
\x82\x73\x4e\xd7\xeb\xbe\x7a\xed\x4e\x6d\x65\x6d\x53\x1e\xde\xab\
\xa4\x7f\xb4\xc2\xf3\xdf\x0f\x8a\x69\x0a\x34\x80\x7d\x51\x14\xe5\
\x73\xb9\x1c\xde\xfb\x6d\x95\x97\xcb\x65\x54\xf5\xd6\xb5\xab\x57\
\x7f\xfa\xed\xd2\x2f\x0b\x57\xaa\xbb\x26\x3f\x98\x3b\xf3\xf6\xa5\
\xeb\xb5\x65\x70\x77\x92\x6c\xf2\xed\xcd\xf3\xb3\x95\x6d\x31\x5d\
\x2c\x95\x9a\xc0\x95\x38\x8e\xff\xba\xbd\xb2\x72\xeb\x87\x8b\x17\
\x7f\x15\x55\x59\x5d\x5d\xd5\xbb\x77\xef\xae\x2e\x2f\x2f\xff\xb8\
\xb0\xb0\xf0\xd9\x81\x03\x07\x8e\xff\xbb\xb6\x76\xe4\xc3\x53\xa7\
\x3e\xfd\xf2\xab\xaf\x2f\xac\xdc\x5e\xf9\xbb\x29\x99\x82\xdb\xb8\
\x7f\xbb\xf0\xfb\x17\xdf\xdc\x3c\x3f\x5b\xd9\xa6\x61\xef\x7e\x6d\
\x6a\xca\x4d\x4d\x4e\x16\x5e\xda\xbb\x37\xfa\xfc\xec\xd9\xf7\x37\
\x37\x37\x5f\xaf\x54\x2a\x85\xa7\x7d\x7f\xe8\xbd\xb9\x8f\xf7\x7f\
\xf4\xdd\x99\xe2\xd1\xd9\xb1\xbe\xbb\xeb\x59\x7f\x5b\xba\x6b\xe6\
\xe8\x3b\xe3\x16\x9a\xe9\xe2\xf5\x3f\x7d\xef\xf9\x7f\xa2\xf9\xa9\
\x63\x02\x48\xc8\x7a\x00\x00\x00\x25\x74\x45\x58\x74\x63\x72\x65\
\x61\x74\x65\x2d\x64\x61\x74\x65\x00\x32\x30\x30\x39\x2d\x31\x31\
\x2d\x32\x38\x54\x31\x37\x3a\x31\x38\x3a\x32\x38\x2d\x30\x37\x3a\
\x30\x30\x31\x91\xb2\x2c\x00\x00\x00\x25\x74\x45\x58\x74\x64\x61\
\x74\x65\x3a\x63\x72\x65\x61\x74\x65\x00\x32\x30\x31\x30\x2d\x30\
\x32\x2d\x32\x30\x54\x32\x33\x3a\x32\x36\x3a\x31\x35\x2d\x30\x37\
\x3a\x30\x30\x06\x3b\x5c\x81\x00\x00\x00\x25\x74\x45\x58\x74\x64\
\x61\x74\x65\x3a\x6d\x6f\x64\x69\x66\x79\x00\x32\x30\x31\x30\x2d\
\x30\x31\x2d\x31\x31\x54\x30\x38\x3a\x34\x35\x3a\x31\x37\x2d\x30\
\x37\x3a\x30\x30\xbb\x78\xb3\xe6\x00\x00\x00\x35\x74\x45\x58\x74\
\x4c\x69\x63\x65\x6e\x73\x65\x00\x68\x74\x74\x70\x3a\x2f\x2f\x63\
\x72\x65\x61\x74\x69\x76\x65\x63\x6f\x6d\x6d\x6f\x6e\x73\x2e\x6f\
\x72\x67\x2f\x6c\x69\x63\x65\x6e\x73\x65\x73\x2f\x4c\x47\x50\x4c\
\x2f\x32\x2e\x31\x2f\x3b\xc1\xb4\x18\x00\x00\x00\x25\x74\x45\x58\
\x74\x6d\x6f\x64\x69\x66\x79\x2d\x64\x61\x74\x65\x00\x32\x30\x30\
\x39\x2d\x31\x31\x2d\x32\x38\x54\x31\x34\x3a\x33\x32\x3a\x31\x36\
\x2d\x30\x37\x3a\x30\x30\x42\x14\xfd\x60\x00\x00\x00\x16\x74\x45\
\x58\x74\x53\x6f\x75\x72\x63\x65\x00\x43\x72\x79\x73\x74\x61\x6c\
\x20\x50\x72\x6f\x6a\x65\x63\x74\xeb\xe3\xe4\x8b\x00\x00\x00\x27\
\x74\x45\x58\x74\x53\x6f\x75\x72\x63\x65\x5f\x55\x52\x4c\x00\x68\
\x74\x74\x70\x3a\x2f\x2f\x65\x76\x65\x72\x61\x6c\x64\x6f\x2e\x63\
\x6f\x6d\x2f\x63\x72\x79\x73\x74\x61\x6c\x2f\xa5\x91\x93\x5b\x00\
\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\x00\x00\x06\x1e\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
\x00\x00\x05\xe5\x49\x44\x41\x54\x48\x89\x7d\x95\x79\x8c\x95\x57\
\x15\xc0\x7f\xf7\x7e\xcb\xdb\xbe\xb7\xcd\xbc\x59\x58\x86\x61\x86\
\xad\x2d\x2a\xce\xa0\x6c\xda\x04\x83\xad\x42\x2a\x89\x10\xb1\xfe\
\xa3\xd5\xd4\xa4\x88\xb5\x49\xa3\x12\x2d\x18\x4b\x6c\x35\x06\xd2\
\x58\x11\x15\x35\x6d\x43\x34\x25\x25\x69\x4c\x4d\x69\x49\x6a\xec\
\x46\x29\x52\x53\x36\xa1\xc8\xd0\xb0\x0c\x8f\x99\x79\xef\xcd\x9b\
\xb7\xbf\xf7\x2d\xc7\x3f\x1e\xd0\xb4\x50\x4e\x72\x92\x7b\x73\xef\
\x3d\xbf\x73\xce\x3d\xf7\x5c\x25\x22\xdc\x4a\x94\x52\x29\x12\x2c\
\x0a\x65\xd4\xfc\xb0\x63\x65\x24\x90\xa0\x51\x76\xc7\x5b\x39\x4e\
\x51\xe5\xb8\x88\x54\x6f\x75\xde\xfc\x58\xc3\x21\xb5\xb0\x77\x79\
\x7c\xd3\xea\x1d\x4b\xef\xb9\x63\xf9\xed\x7d\xbd\x7d\xbd\x44\x62\
\x51\x44\xa0\x5a\x2a\x33\x7a\x6e\x54\x8e\xbf\x76\x62\x24\x3d\x1c\
\xde\x57\x3c\xda\xfc\x83\xf8\x72\xfe\xa6\x76\x3e\x1a\x81\x52\xca\
\x4e\x7e\xca\xfe\xc9\xca\x47\x86\x7f\xbc\x64\xed\xb2\x68\x3a\xdc\
\x03\x18\x04\x08\x82\x00\x0a\x03\x85\x46\x13\xe0\x72\x65\xf2\x22\
\xaf\xef\x79\xad\x70\x70\xfb\xc9\xad\x8d\x0b\xc1\xae\x5b\x02\x94\
\x52\x89\xd9\xeb\x53\x7b\xee\x7a\x62\xc5\xda\xae\xbe\x3e\x9a\x04\
\x04\x12\xb4\xd7\x00\x85\xc6\x17\x8f\xba\x5b\x27\x64\x85\xb0\xb4\
\x8d\x89\x81\x01\xbc\xff\x9f\xd3\x1c\xd8\xf4\xd6\xee\xfc\xa1\xe6\
\x26\x11\xf1\x6e\x00\x28\xa5\xec\xd9\x5f\x4b\x3f\xb7\xea\x77\x4b\
\xd6\xea\x44\x9c\x56\xc3\x43\xa1\x40\x81\x52\x0a\x00\x0f\x8f\xf0\
\x39\x87\x2d\x73\x1e\x27\x1f\x1e\x63\x47\x7d\x1b\x36\x21\x04\x08\
\x45\x2d\xa6\xce\x64\x39\xf0\xed\xb7\x7f\x9f\x3f\xd4\xf8\xde\x0d\
\x77\xd0\xf9\x99\xc8\xd6\xc5\x8f\xce\x5b\x5b\xf4\x5c\xdc\xcb\x13\
\x68\xad\xaf\x81\x01\xd0\x5a\x33\xe9\x16\x58\x5a\xfa\x02\xb3\x9c\
\x7e\x9a\xad\x3a\xf9\x42\x9e\xa8\x8e\x21\x22\x48\x41\xb0\xbb\x43\
\x7c\xf6\xf1\xf9\x1b\x23\x7d\xc6\xbb\xf5\x8b\xfe\xee\xeb\x00\xc3\
\xd1\x43\x2b\xfe\xd8\xff\xf0\x94\xd9\xa0\x3e\x5a\x43\x6b\x8d\x52\
\xea\x03\xd5\x8a\xaa\x5b\x21\x39\xd9\xc9\xf0\xb4\xc5\x20\xf0\xfc\
\xd8\x5e\x8a\x93\x45\x1a\xaa\xc9\xb5\x2c\x04\x05\x21\x3c\xcb\x64\
\xee\xfd\x99\xad\xca\x54\x2f\x88\x27\x59\x13\x60\xfa\x4a\x67\x93\
\x7f\x5b\x2b\x7a\xe1\xdc\x18\x0a\x8d\xa1\x35\xfa\xaa\x2a\xad\x68\
\xb9\x2d\x86\x9b\x4b\xf9\xf5\xd2\x9d\x4c\xcf\x4c\x47\x10\x4e\x16\
\x8e\x31\x3e\x31\x4e\xc4\x88\x62\x28\x83\x20\x08\x08\x44\x60\x52\
\x88\xde\x69\xcc\x4c\x2e\xb4\xee\x03\x7e\x69\x2a\x5b\x75\x2f\x7c\
\x2c\xb5\xfa\x42\x76\x8c\x5a\x0e\x4c\xdb\xc0\x30\x34\xda\x30\xda\
\x10\x53\xe1\x4e\xf9\x3c\xb0\xec\x21\x8e\x8f\x1f\xa5\x33\xd9\x49\
\xc8\x0a\x71\x1b\x9f\x24\x54\x73\xe8\x1d\xec\x66\xd7\xe9\x27\x08\
\xa9\x30\xbe\xef\xe3\x7b\x01\xe1\x24\x24\x97\x9b\x1b\x94\x56\xdb\
\x8d\xc8\x0c\xeb\xce\x8e\x35\xe6\xc6\x89\x91\x06\x7e\x51\xf0\xeb\
\x3e\x6e\xcd\xc3\x6d\xb8\xb4\xea\x2d\x5a\xf5\x16\x15\xaf\x45\xb1\
\x92\x63\xfd\xdc\xaf\xd3\x93\xea\x01\xa0\xcf\xec\x27\xe7\x8e\xf3\
\xec\x99\x3d\x4c\x14\x0a\x78\x15\x17\x77\xca\xc3\x2b\xfa\xb4\xf2\
\x3e\x4e\xdc\xea\x28\x1d\xf1\xf7\x99\xd1\x99\xe6\x02\xcf\xf3\xf1\
\x2e\xb5\x6f\x44\x87\x01\x1b\xb0\x40\x2c\xc0\x10\x0c\x0b\x5e\x18\
\x7d\x91\x9f\x0e\x6d\x03\xe0\xd5\x8b\xaf\xf0\xc8\xab\x0f\xf3\x4e\
\xf6\x04\xe2\x05\x84\x04\xc4\x05\x69\x81\x34\xc1\xf3\x40\xa6\x89\
\x6d\x67\x8c\x01\xd3\x4a\x1a\x5d\x5e\xce\x27\xc8\x83\x4e\x82\xe8\
\x76\xcd\x8b\x00\x01\x28\x13\xaa\x65\xf8\xe1\xa2\x87\xf8\xf4\xec\
\x21\x00\xfe\x7e\xea\x79\xde\x3c\x71\x8c\x98\x03\x3a\x80\xc0\x03\
\xdc\x36\x84\x66\x1b\x14\x78\x82\xe1\xa8\x1e\x53\x99\xe0\x67\xc1\
\x3d\x0a\x46\x06\x74\x06\x54\x12\xb4\x03\x2a\x02\xae\x0d\x5d\x41\
\x92\x8d\x9f\xff\xfe\xf5\x07\xb9\xfd\xee\x27\x31\x03\x83\xdf\xbc\
\xfe\x24\x96\x80\xf2\xda\x9e\x4b\x1d\xa4\x04\x7e\x11\x24\xda\x76\
\xce\x74\x1b\xc1\x44\x3c\x6d\xa0\x6c\x90\x0a\x04\x3e\x50\x82\x20\
\x02\xae\xd9\x9e\x7f\x65\xd5\x2a\x06\xa7\x0d\x72\x79\x72\x94\x43\
\x67\x0f\xd2\x1d\xef\xe1\xb1\x55\xdb\x49\x7a\x29\xb6\xec\xd9\x46\
\x44\xda\xc6\x83\x2a\x48\x19\x68\x80\x9e\xa7\xf1\x03\x7f\xcc\xac\
\xe5\xdd\xf7\x7a\xe2\x51\xac\x0c\x78\x0d\x50\x31\x70\x35\x04\x02\
\xcb\xe6\x0d\xb3\x6c\xc1\x0a\xb6\x6c\xf8\x39\x63\x53\x57\xd8\xf0\
\xdb\x75\xbc\xf9\xdf\xc3\xe0\xc2\xdf\x1e\xfc\x2b\x03\xc9\x39\x50\
\x07\x31\x00\x01\x65\x80\x84\xc0\x8c\x83\x11\xd3\xcd\x56\x39\x78\
\xdf\xac\xe5\xdd\x77\x94\x67\x8c\xc6\xe6\xa8\x19\xa5\x11\xa1\xa9\
\x60\xf3\xbd\x3f\x62\xf5\x92\x35\xc4\x22\x51\x26\x1b\x05\x9e\x39\
\xfc\x67\x76\xfd\x73\x27\x23\xb9\x4b\x44\xbb\xa0\x56\x02\x3f\xf0\
\x99\x68\x8e\x43\x04\x94\xd5\xce\x3d\x06\x28\x81\xe8\x2c\x8d\x57\
\x95\x93\x5e\x3d\x78\xcf\x94\xf3\x32\xd1\xff\x9d\xd4\x8b\x9d\x8b\
\x22\xdf\x2d\x8d\xd7\x70\x2c\x9b\x2f\x0e\xdd\xc5\xce\x7f\xed\x60\
\xff\xc9\xfd\x54\x3d\x1f\x34\xd8\x11\x70\xd2\x1f\x74\xc9\x83\xff\
\x7b\x83\x81\xd9\x83\x60\x83\x0a\x01\x1a\x04\xd0\x1a\x52\xf3\x6c\
\x26\xdf\xf0\x9f\x93\x4b\xe2\x69\x80\xcb\x47\x2a\xbb\x62\xd1\x48\
\x35\x71\x3b\xd8\x31\x8b\x5f\xbd\xf4\x0b\xf6\xbd\xfb\x0f\x7c\xdb\
\x27\x96\x06\xa7\x03\xec\x18\x10\xbe\xaa\x11\x98\x74\xf3\x7c\x73\
\xf9\xb7\xb8\xef\xee\x6f\x20\xe1\x76\x6a\xb0\x21\xb1\x40\x63\xf8\
\xd6\xc5\xc2\x48\xf3\xe9\x0f\x75\xd3\xde\x7b\x9d\x47\x67\xac\x37\
\x7f\x36\x72\x78\x8a\x4a\x01\xc2\xc9\xab\x9e\x59\x57\x43\xbf\x36\
\xa6\x5d\x8e\xb6\x6f\xd3\x1f\x1f\x20\x65\xa7\xf9\xf7\xd9\xb7\xf1\
\xab\x42\x28\x01\x33\xe7\x3b\x9c\xdf\xdb\xba\xbf\x74\xa0\xf9\x97\
\x0f\xb7\xeb\x3b\x94\x35\x78\x4f\x6a\x6f\xf2\x73\xfe\x57\xcf\x1f\
\x2b\xd3\x28\x83\x0e\xb5\x4b\x55\xa7\x15\x76\xc2\xc2\x0a\xb5\x09\
\x5e\xcb\xa3\x51\x6e\xd1\x98\x10\x82\x1a\x84\x02\x08\xc5\x61\xfa\
\x9c\x18\x13\x2f\x07\x3b\xaf\x3c\x55\x7b\xf0\xe6\x1f\xce\x22\xe5\
\x0c\xac\x49\x3d\x93\x59\x29\xeb\xb2\xa3\x53\x94\x72\xa0\xd2\x9a\
\x44\xc6\x21\xee\xc4\x09\x85\xc3\x28\xa0\xd9\x6a\x51\xa9\x94\x29\
\x15\xca\xf8\x05\x9f\x44\x5a\x91\x49\xc5\xc9\xbe\xec\xed\x1a\x7b\
\xab\xf6\x03\x39\x26\xfe\x4d\x01\x00\x6a\xb1\xb2\x32\x43\xb1\xcd\
\xfd\x5f\x0e\x6f\xf6\x7b\xeb\x8e\x6f\x58\xc4\xcc\x4e\x9c\x68\x8a\
\x48\x24\x8a\x52\x8a\x46\xb3\x41\xb5\x56\xa4\xea\xe6\x91\x46\x03\
\xef\x9c\x3d\x7e\xe1\xa5\xfa\x96\xd2\xde\xc6\x9f\xf8\x88\xdc\x00\
\xb8\x26\xe6\x97\xcc\x05\x3d\xc3\xd1\x07\xa6\x0d\x47\xd7\x75\xcf\
\x4d\xcf\xea\xe8\xea\xc0\x71\x12\x28\xa0\x5c\x2e\x93\xbb\x92\x0b\
\xb2\xa7\x0b\x67\xb3\x47\xaa\xcf\xe6\x4e\xd4\x77\x07\xaf\x04\xa3\
\x37\xb3\xf3\xb1\x80\xeb\x1b\x56\xab\x84\xd5\x61\x7c\x22\xd2\x69\
\xce\xb5\xa2\x46\x8f\x88\xf8\xad\x8a\x9f\xad\x17\xdc\x33\x7e\x51\
\x4e\xc9\x7e\xa9\xdd\xea\xfc\xff\x01\x5c\xbf\xb2\x3e\xdb\x55\x2a\
\x23\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\x00\x00\x06\x40\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
\x00\x00\x00\x06\x62\x4b\x47\x44\x00\x00\x00\x00\x00\x00\xf9\x43\
\xbb\x7f\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd6\x00\x00\
\x0d\xd6\x01\x90\x6f\x79\x9c\x00\x00\x00\x09\x76\x70\x41\x67\x00\
\x00\x00\x18\x00\x00\x00\x18\x00\x78\x4c\xa5\xa6\x00\x00\x04\xba\
\x49\x44\x41\x54\x48\xc7\xb5\x95\x4b\x6c\x94\x55\x14\xc7\xff\xf7\
\x7e\x8f\xf9\xe6\xd1\xe9\x94\x67\xb1\x16\xb0\x50\xc2\x4b\x2c\x14\
\x52\x6b\x29\x3e\x16\x88\x71\xa7\x46\x13\xa2\x09\x22\x25\x28\x0b\
\x13\x5d\x90\x60\x22\x22\x89\x0b\x23\x0b\x59\x10\xc5\x47\x88\xd1\
\x44\x45\x37\xc6\x20\x68\x31\x8a\xd0\x54\x2a\xa5\x16\xdb\x69\x29\
\xb4\xa5\xef\xd2\xa1\x9d\x4e\x67\xbe\xc7\x7d\xba\xc0\x20\xaf\x42\
\x8a\xf1\x24\x77\x73\xff\xff\x9c\x5f\xce\x3d\xf7\x9e\x0b\xfc\xcf\
\x41\x6e\xab\x96\xd5\x00\xbe\xeb\x20\x14\x52\x20\x84\xa1\xe9\x93\
\x29\x03\x8c\xc9\x84\x68\xc5\xcb\x88\x98\x88\xcf\x9e\x5f\xf4\xa6\
\xd0\x48\x9b\xa6\xd1\x2f\x7a\x4f\x4d\x19\x40\x6f\xb5\x69\x97\xbd\
\x84\xdc\xf9\xae\xc8\xb2\x07\xcb\xde\xaa\xa8\x2e\xdf\x16\x8f\x47\
\x43\xb1\xbc\xe8\x5d\x1d\x91\x79\x53\x49\x4b\x5f\x00\x4b\x76\x38\
\x2b\x37\x3d\xfd\xc6\xfd\x95\xab\xb6\x8b\x80\x49\x2d\x04\x88\xbe\
\xab\xfc\xd7\xf7\x80\x2c\xda\x08\x7d\xae\xdd\x5e\xf6\xe2\xc6\x1d\
\x0f\xad\xaf\xda\x99\x28\x2a\x74\xc6\x06\x2e\xf1\xba\xda\x93\x07\
\x35\xa1\x9d\x5a\x2b\xaa\xb8\x14\x22\x08\x26\x02\xcf\x1f\x4a\xa7\
\x46\xdb\x73\xdd\x17\x3b\x31\xb3\xc4\x47\xd3\xbe\x3b\x00\x4a\x9e\
\x03\x3a\x9b\xcc\xd2\xe7\x37\xbf\xf6\xf0\x13\xd5\xbb\x66\xce\x2f\
\x8e\x04\x4a\x83\x4b\x85\x6c\xd6\x45\xc0\x04\x18\xe3\xe0\x3e\x03\
\xf7\x7c\x70\xd7\xe3\x6c\x3c\x73\x79\x7c\x78\xa4\x7e\xe0\x62\xdf\
\x81\x4b\xc7\xeb\x7f\xc2\xec\x59\x02\x5d\x87\x6e\xd1\xe4\xb9\xcf\
\x00\xdd\xc7\x8d\xb9\xcf\xd6\x6c\x7f\x64\xc3\xda\xdd\xc5\x0b\xe7\
\x47\x05\xa5\x50\x86\x09\x69\x98\x80\x6d\x43\x5b\x16\xb4\x61\x42\
\x52\x03\x82\x1a\x60\xc4\x30\x84\x69\xc7\xec\x68\x6c\x71\x22\x1e\
\x7b\x92\x4c\x4b\xa8\x4c\x53\xf2\x14\x4a\xab\x15\x52\xcd\xd7\x00\
\xca\xb7\x02\x6d\x8d\x74\xce\x53\x9b\xb6\x3c\xf6\x78\xd5\x3b\x73\
\x17\x95\xc4\xd3\x8a\x60\x54\x12\x8c\x2a\x82\xb4\x22\xc8\x49\x0d\
\x26\x35\xa4\x54\x50\x4a\x41\x08\x09\xc1\x25\x18\x13\x70\x7d\x0e\
\x4e\x0c\x27\x1e\x8b\x54\xf0\xa8\x73\x7e\xe1\x8a\x25\x2d\xc3\x62\
\x0e\x30\x7c\xe6\x4a\x93\x4d\xc7\x81\x58\xb3\xae\xe2\xbe\xe5\x8b\
\xde\x1e\x8b\xcf\xcc\x6f\xe9\x1e\x47\xd6\x30\xc1\xed\x10\xe0\x38\
\x80\x61\x00\x5c\x81\xf8\x0c\x16\x0b\x10\x95\x1c\x51\xa5\x40\x00\
\x68\x00\x1a\x04\x1e\x97\x90\x96\x93\x37\xe3\x9e\xc2\x6d\xcd\x47\
\x7f\xfd\x01\x33\xa6\x65\xae\x56\x40\x8a\x56\x43\xbb\xae\x67\xc5\
\xe3\x8b\x27\xc2\x79\xcb\x53\xc4\x22\x9c\x1a\xd0\x96\x05\x58\x26\
\x40\x29\xb4\x94\x90\x5c\xc0\x0f\x38\x26\x5c\x86\xf1\x6c\x00\xc1\
\x38\x0c\xa5\x20\x39\x87\x60\x02\xbe\x50\x70\x4c\x12\x77\x7d\xef\
\x30\x35\xcd\x41\xd1\xf3\xfb\x15\x80\xee\x6b\x40\xa8\xb4\xda\x4b\
\x9d\xbb\x50\x97\x1f\x0b\x2f\xc8\x9b\x35\x63\x49\x60\x85\x40\x28\
\x05\x08\xa0\x95\x02\x84\x84\xe6\x02\xe0\x1c\x9a\x73\x48\xc6\x91\
\x73\x03\x04\x3e\x83\xa1\x24\x14\x17\xe0\x42\xc2\xa6\x30\x45\x26\
\x73\xc4\x09\x87\xda\x73\x1d\xbf\xfd\xfb\xd0\x82\x93\x75\x88\xcc\
\x29\x1c\xea\xaa\x6b\x78\x95\x25\x5b\x8f\xe6\x73\x0f\x9a\x73\x28\
\x9f\x81\x04\x0c\x86\xe0\x30\xa4\x00\x91\x0a\xfa\x9f\x05\xa9\xe0\
\xfa\x1c\x63\xd9\x00\x5c\x28\x28\x0d\x28\xad\x09\xa5\x84\x5a\xa6\
\x71\xc3\x2d\xc2\x20\x78\x97\x87\xbc\xd5\xe5\x99\x54\xb2\xa3\x3e\
\x11\x0d\x95\x39\xd3\x0b\xe6\xf9\x8a\x60\x1a\xcb\x29\xbb\xa7\x7b\
\x38\x94\x49\x8f\x3b\x5e\x56\x3a\x92\x5b\x54\x2b\xca\x99\x84\x62\
\x0c\x32\x60\x90\x42\x82\x12\x02\x47\x0b\xd7\xbb\x9c\xfa\x88\x73\
\xd1\xe3\x5e\x38\x79\x2d\x00\x00\x86\x10\x74\x64\x90\xa8\xae\x1a\
\x4d\xfd\xd5\xd6\x90\x88\x3a\x6b\xec\x82\x44\x11\x19\x1b\xf3\xfb\
\x8f\xd6\x6e\xeb\x6f\x6c\xde\xe3\xf6\xf5\x7d\xa3\x52\x23\xbf\x84\
\x03\xd7\x8b\x3a\xd6\x02\x5f\xc2\x96\x8c\x43\x49\x09\x4a\x09\xa2\
\x2a\xe8\x1e\xed\xe9\xdd\x97\xf3\x79\x46\xf6\x35\xdc\x08\xb8\x02\
\xf1\x92\x63\x98\xbd\x61\xfd\xc8\xa5\xa6\xb3\x8d\x05\x51\xa7\x32\
\xcf\xb1\xa6\x8f\xf7\x0f\x7c\x60\x47\xc2\x7f\xa6\x6b\xf7\x0e\x7a\
\xc6\xbc\x96\x91\x23\x87\xbf\x8f\xdf\x5b\x64\x3b\xb1\xd8\x3a\x8f\
\x49\x02\x00\x21\x83\x20\xec\x67\x0f\xf7\x7e\x77\xe0\x73\x39\x6b\
\xa1\xc6\x60\xe3\x24\xc3\x4e\x35\xa2\xff\x8b\x2f\x51\xfc\x68\xd5\
\xe9\xc1\x33\xcd\xaf\x5c\x4e\xb6\xb5\x07\x8c\x93\xc0\x67\x00\x00\
\xd1\xf2\x19\x9c\xca\x6a\x9e\xea\x1b\x38\x64\x05\x6e\xca\x20\x04\
\x20\x04\x11\x48\x97\x4f\x64\xbe\x2d\xdf\xb2\x43\xc2\xe7\x93\x0f\
\x3b\x00\x80\x7b\x02\xc9\xf7\x43\xb0\xd2\xb5\x27\x46\x57\xd6\x6c\
\x85\x41\x87\xae\x95\x7d\xc6\xa1\x0c\xe2\x6b\xa5\x39\x08\x10\xa2\
\x04\x0e\x77\x7f\xee\x39\x7f\xe1\xd8\x50\x38\x06\xb4\x1e\xbc\x03\
\x00\x00\xc6\x8f\x81\x13\x02\x00\x37\x7d\x02\x4e\xd8\x81\x6d\xd0\
\x02\x50\x1a\x81\x06\x0a\x08\x1f\x96\xe9\xd1\xf7\x96\x56\xae\xc9\
\xd6\xef\xff\xf0\x3a\x2f\xc5\x5d\x44\x61\x51\x21\xc2\xb1\xe8\x32\
\x65\x58\xf9\x09\x43\xf9\x21\x37\xf3\x6e\xf2\xeb\x5d\xc7\x5b\x4e\
\x35\x01\x38\xfb\x1f\x01\xab\x6a\xd0\xfd\xd5\x4e\x9a\x97\xc8\x5f\
\x1b\xb3\xa9\x8e\x78\xe3\xfb\x86\xda\xda\xf6\x17\xaf\x7f\x5d\x4f\
\xfc\xf1\xf1\x4d\xf6\xa9\x03\x08\x01\x56\x6c\x9e\x6b\x42\x3d\x60\
\x4c\x8c\xed\x19\x68\x6d\xdd\xed\x14\x14\xf8\xbd\x3f\xee\xbd\xb5\
\x7d\xca\x80\xf2\xad\x20\x04\x25\xe1\x90\x5d\xea\xf0\xdc\x31\x4f\
\x12\xe1\x9d\xfe\x74\x52\xbb\x39\x85\xd4\x57\x43\x6b\x74\xba\x3e\
\xeb\x74\x61\x01\xa7\x0f\xdc\xd6\xfb\x37\x7e\xea\x6b\x03\xad\x34\
\x4a\xa0\x00\x00\x00\x25\x74\x45\x58\x74\x64\x61\x74\x65\x3a\x63\
\x72\x65\x61\x74\x65\x00\x32\x30\x31\x30\x2d\x30\x35\x2d\x32\x34\
\x54\x30\x37\x3a\x34\x32\x3a\x32\x33\x2d\x30\x36\x3a\x30\x30\x0d\
\x5e\x0a\xf3\x00\x00\x00\x25\x74\x45\x58\x74\x64\x61\x74\x65\x3a\
\x6d\x6f\x64\x69\x66\x79\x00\x32\x30\x31\x30\x2d\x30\x35\x2d\x32\
\x34\x54\x30\x37\x3a\x34\x32\x3a\x32\x33\x2d\x30\x36\x3a\x30\x30\
\x7c\x03\xb2\x4f\x00\x00\x00\x35\x74\x45\x58\x74\x4c\x69\x63\x65\
\x6e\x73\x65\x00\x68\x74\x74\x70\x3a\x2f\x2f\x63\x72\x65\x61\x74\
\x69\x76\x65\x63\x6f\x6d\x6d\x6f\x6e\x73\x2e\x6f\x72\x67\x2f\x6c\
\x69\x63\x65\x6e\x73\x65\x73\x2f\x4c\x47\x50\x4c\x2f\x32\x2e\x31\
\x2f\x3b\xc1\xb4\x18\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x00\x0f\x74\x45\
\x58\x74\x53\x6f\x75\x72\x63\x65\x00\x6e\x75\x6f\x76\x65\x58\x54\
\x32\xea\x20\x36\xdc\x00\x00\x00\x22\x74\x45\x58\x74\x53\x6f\x75\
\x72\x63\x65\x5f\x55\x52\x4c\x00\x68\x74\x74\x70\x3a\x2f\x2f\x6e\
\x75\x6f\x76\x65\x78\x74\x2e\x70\x77\x73\x70\x2e\x6e\x65\x74\x91\
\x89\xc7\x2d\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\x00\x00\x05\x6b\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
\x00\x00\x05\x32\x49\x44\x41\x54\x48\x89\xa5\xd5\x5b\x6c\x5c\x47\
\x19\xc0\xf1\xff\x9c\xeb\xde\xec\xf5\xda\xeb\x6b\xb0\x1d\x27\xa5\
\x8d\x63\x50\x31\x91\x45\x23\x20\x28\x08\xa5\x11\x94\xaa\x37\xd2\
\x42\x2b\x55\x0a\xbc\xa5\x2f\xb4\x7d\xa0\x42\x44\xa8\x6a\xe1\x21\
\xea\x03\x12\x3c\x80\x40\x15\x42\x24\x24\x44\x75\x89\xa0\x6a\x00\
\xb5\xe1\xa1\x22\x6a\x8c\xa2\x16\x17\xc7\x6a\x4b\xa8\x5d\xaf\xed\
\xc4\xde\x5d\x9f\xdd\xb3\x7b\x2e\x73\xe1\x21\xe0\x44\x90\x80\x94\
\x7c\xd2\x68\x5e\xbe\x99\xdf\x8c\xe6\x9b\x19\x8c\x31\xdc\x6c\xfb\
\xec\xa7\x3e\x71\xe4\xa3\xdb\xc6\x0e\xfe\xaf\x1c\x8b\x5b\x88\xc9\
\x3b\x86\x07\x5f\x3e\xfe\xe2\xcf\xb6\xf5\x75\x1e\xb8\x51\xce\x2d\
\x01\x79\xb9\xae\x77\xde\x56\xe6\xe8\x8f\x9e\x3f\xba\x73\xac\x70\
\x5d\xe4\xd6\x00\xd5\xa0\x35\xfb\x06\x93\x83\xae\xfd\xc3\x6f\x7e\
\xfd\xe8\x8e\xa7\x4b\x0f\x03\x4c\x7c\x77\x54\x6c\x7d\xaa\x57\x00\
\x08\x63\x0c\x07\xf6\xdc\xf6\xf9\x5d\x77\x4e\x3c\x20\xc2\x15\x91\
\xf7\x85\xc9\x39\x86\x8c\x6b\xf0\x1d\x83\x6b\x69\x6c\x81\x2d\xd0\
\x96\x31\x1a\xa5\x0c\x89\x34\x84\x91\x4c\x47\x6f\xff\xe4\x97\xb6\
\x97\x8b\x5b\xa3\x28\x22\xe3\xd8\x9c\x9b\xab\xa8\x43\xef\xfe\xf1\
\x6b\x95\xe9\xf8\xc4\xbf\x17\xe1\x00\xf4\xe5\xcd\x97\x1f\xbb\x7b\
\xea\xd0\x50\xa7\x8b\xd4\x11\x96\x23\xb1\x9d\x14\xec\x14\x2c\x7d\
\x65\xa3\x46\x81\x6c\x41\x14\xa2\xdb\x31\xed\x96\xa2\xd5\xa8\x52\
\xbf\xf4\x0f\x1a\x8d\x94\xe5\x30\x65\xc8\xc2\x3e\x9c\xd9\x7a\x74\
\xe2\xab\x65\xf1\xce\xb1\xb5\xe3\x9b\x40\x87\x1d\x89\x60\x61\x16\
\x4b\xb7\x11\x6e\x42\x36\x9f\xe2\xfb\x09\xbe\x27\x11\x5e\x07\x38\
\x85\x2b\x88\x8a\x21\x5a\x47\x84\x6b\x78\x61\x9d\xb4\x19\xe3\x36\
\x0d\x22\x50\xb4\x6a\x8a\x4a\x43\xd1\x87\xb1\x1f\x09\x4a\xc7\xee\
\xfa\x62\xcf\xc8\xd9\x57\xd6\x8f\x38\x00\x05\x3b\xa1\xb9\xfa\x3e\
\x96\x5c\xc3\x72\x12\x62\x3b\x66\xa8\x04\xa2\x38\x00\xc5\x3e\x70\
\x7b\xc1\xed\x04\x61\x81\x17\x21\xdc\xcb\xb8\xd6\x07\x74\xc5\x73\
\x08\x59\xa5\x91\x42\x2a\x61\x35\x84\xa4\x9d\xe1\xbd\x61\x7b\x3a\
\x98\xd0\xbf\xdd\xdc\x41\xce\x96\xb4\x83\x0a\x39\x5d\x41\x00\xc5\
\xfe\x41\xaa\xb5\x62\x50\x72\xb3\x55\x4f\xa4\x16\xc4\xe0\xc7\x20\
\x6c\x8c\x92\xa8\xc4\x23\x4a\x7b\x4c\x6a\x4d\xf5\x97\xba\xde\xca\
\xf4\xb7\x57\x58\xb7\x21\x2f\x32\xfc\x69\xab\x77\xfc\xcd\x3d\xea\
\xd1\xc5\x83\x6b\x6a\x13\x28\x78\x06\x61\x1b\x6c\x1b\xba\x5d\x28\
\x75\x77\xb3\x32\xbf\xf0\x84\x77\x38\xf8\x45\xe5\x05\xcf\x1d\x7a\
\x37\xf5\xb0\x1c\xb0\x40\x48\x49\x9a\x42\xe1\xfb\x26\x5c\x79\x6e\
\xfc\x38\x77\xec\x3e\x50\x96\xaf\x31\x42\xca\xd9\xf1\xc1\x53\xa7\
\x6f\xbf\x78\xb0\xbb\xed\xfb\xe3\xbf\x1e\x32\x73\x5f\xa9\xb4\x1d\
\x80\xac\x27\x02\xdb\x16\x1b\x9e\xa0\x5d\xcc\xb9\xb8\x85\xde\xfc\
\x70\xc7\x85\x0a\xc0\xa1\xfd\x9f\x1e\x9a\x9e\x78\xfd\x83\x6b\xcb\
\x33\xfb\xaf\xbe\x5c\xce\x46\xf4\x4f\xa2\x36\x56\x79\x7b\xdc\x3b\
\xf3\xe6\x94\xf3\xac\x3e\x7f\x71\x87\xd5\x26\x63\x30\x2b\xc0\xdf\
\xaf\x00\x0e\x0b\x96\xc5\x79\xdf\x22\xf1\xb2\x45\xc8\x0d\xf9\xe7\
\x07\xba\x6b\x47\xfe\xf6\xd0\x0f\x06\x9b\x5b\xc6\x81\x7d\xd7\xbb\
\x07\x4e\x69\x8b\xa0\x30\xca\x8c\xd5\xfe\xc3\xcc\xbe\xa9\x13\xba\
\x3e\xbb\x4b\x28\xed\x80\xf0\xb4\xd6\x6f\x6f\x02\xae\xcd\xb2\x80\
\x59\x17\x52\xe1\x17\x35\x7e\x57\x7a\x62\xe7\xc8\x77\x76\xef\xdc\
\x73\xdf\xfa\xda\xe2\x2b\x37\xba\x68\xad\xd5\xc8\xcf\xac\xfc\xe4\
\xd4\x6f\x3e\xd6\x7c\x32\x15\xea\xb9\xb8\xdd\xc6\x28\x8c\x51\x26\
\x27\xb5\x8e\x80\xd7\x1c\x00\x47\xb0\xa6\x35\xf3\x96\x21\x41\xb8\
\xf1\x0b\xde\xc5\xc7\xe7\x77\x0c\xec\xcd\xb0\xc0\x72\x5c\x31\x37\
\x02\xec\xa4\xf2\xcc\x9f\x73\xab\x8b\x67\x87\xb7\xef\x98\x0c\x82\
\xfd\x61\x18\x26\x2a\x06\x13\xd3\x61\x30\x0b\x9b\x87\x8c\xa0\xaa\
\x24\xf3\xc2\xd0\x7a\xd6\xaa\x3f\x7d\xcc\x7d\x6f\xef\x68\xd0\xc3\
\x52\x71\x91\xb5\xf5\xcb\xfe\xe4\x85\x6d\x76\xae\x2b\x5f\xf0\x3c\
\x17\xc7\xb1\x49\x6d\x0b\x65\x8c\x18\xde\xe3\x55\x96\x4c\xbf\x4e\
\xe6\xc3\xe1\x64\x22\xee\xda\xd8\x08\x50\x2d\x30\x4d\xc0\xd0\xb1\
\x09\x78\xb0\x1c\x27\x2a\xfa\x96\xce\x7c\xef\x97\x49\xed\xbe\xce\
\x6a\x9d\xbc\x67\x70\x7c\x87\x61\x33\xf0\xb9\xde\xb1\xf2\x87\xa5\
\xae\x32\x45\xd1\x85\x67\xf9\x28\x24\x4d\xd3\x64\xbd\xaf\x8e\xd7\
\xda\x30\xb2\xd6\x2a\x34\xc3\x80\x6a\xb5\x86\xae\x03\x35\xd0\x8e\
\xb9\xfa\x54\x5c\x08\x92\xf2\x4c\x77\xff\xe1\x73\xa5\x2d\x8f\x8d\
\x04\x35\xac\x00\x54\xc6\xa6\x4a\x40\xd2\x2b\xdd\x42\x21\x3f\x10\
\x38\x0d\x3c\xd7\xc7\x12\x02\x89\xa4\xa5\x42\x9a\x51\x93\x46\xd2\
\xa4\x31\x10\x52\x5f\x6c\x50\x5d\x69\x20\x96\x01\x69\x30\x0e\x57\
\x81\x93\xcb\xd6\x5e\xd9\xdb\x73\x60\xac\xdc\x43\x1c\x96\x48\xeb\
\x29\xa9\x97\x20\x4d\x42\x35\x69\x72\xb9\xba\x8e\xca\xa4\xc8\x4c\
\x82\xf2\x52\x52\x91\xa2\xb4\x24\x89\x24\x71\x98\x90\xd4\x34\x49\
\x1d\xf4\x2a\x98\xcb\x60\x3a\x0d\x26\xbe\x06\x38\x73\xa6\xf1\xe2\
\x37\xee\xed\x5f\x9e\xb3\xcd\x4b\x85\x8f\x74\x66\x69\x24\x20\xc1\
\xc4\x02\xa7\x94\xc1\x93\x19\xb4\x91\x18\x21\xd1\x42\x22\xad\x14\
\x45\x4a\x2c\x52\x62\x3b\x21\x72\x13\x62\x57\xa3\x0a\x06\x35\xa0\
\xc9\x89\x3c\xd1\x52\xfb\x2a\x00\xf0\xd3\x53\xab\xaf\x3e\x74\x97\
\xfb\xc0\xca\x67\x76\xbf\x94\x1d\xf0\xb3\xaa\xa5\x10\x91\xa0\x18\
\x77\xac\x2e\xa4\xef\x9f\x34\x59\x6d\x5b\xfe\x95\x11\xc6\x32\x18\
\x0c\x48\x83\x93\xd8\x64\x5b\x3e\x6e\x53\xc7\xba\x69\x8c\x6a\x6a\
\xdc\xc4\x75\x9c\xc8\xfd\xfd\x26\xf0\xfc\x17\x0a\xc2\xcd\x97\x39\
\x79\x36\x7d\xf5\xdb\xf7\x66\xef\x7f\x43\xec\x9a\xf6\xfa\xfd\x2c\
\x11\xbc\x73\x7e\x76\xe6\xc3\x1f\x5f\x7a\xe2\x46\xa5\xfa\xff\x42\
\x18\xf3\xdf\x65\x3e\xf6\x71\xff\xee\xa1\x7d\x53\xd3\xd9\x51\x2f\
\x3b\xf7\x97\xd9\xdf\x2d\xfd\xfc\xd2\x3d\x37\x0b\x5c\xf7\xcb\xbc\
\xf8\xd7\xf8\xf4\xb9\x5f\xcd\xdc\xaf\x2e\x49\xac\xd8\xb1\x6f\x76\
\x72\xb8\xe6\x0c\xfe\x33\x92\xa5\xe8\x74\xf7\x70\xe9\xc1\xd1\xed\
\x23\xfb\x6f\x05\xf8\x27\x44\x53\xb3\x67\x2d\xb3\xe4\xeb\x00\x00\
\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\x00\x00\x02\xde\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
\x00\x00\x02\xa5\x49\x44\x41\x54\x48\x89\xb5\x95\xcf\x4f\x13\x41\
\x14\xc7\xbf\xf3\xa3\xa5\x29\xf5\x20\xc5\x0b\xe8\x7f\x21\x21\x41\
\xe2\x01\xf5\x66\x13\xce\xc6\x0b\x7a\xf2\xb6\x8d\x0d\x5e\xbc\x78\
\x33\xe0\x81\x03\xfa\x07\xa8\x27\xff\x00\xdb\x68\x40\x6b\xca\x5d\
\x49\x53\xba\x5b\x0f\x34\xa9\x2d\x50\x8d\x89\x25\x05\xda\x9d\x19\
\x0f\x74\xd6\xd9\x30\x5d\x30\xe2\x4b\x26\x99\xd9\xbc\xf7\xfd\xbc\
\x79\xf3\x66\x96\x5c\x9b\x99\xc1\xec\xec\x75\xa4\xd3\x69\x74\x0f\
\x0f\xa0\xa4\x84\xf0\x05\x00\x05\xa1\x24\x62\x8c\x43\x42\x81\xd3\
\x18\x7e\xfe\x68\xa3\xf8\xa9\x88\xcf\x9b\x9b\x18\x19\x19\xc1\xd1\
\xd1\x11\x08\x21\x88\x32\x2e\x85\x80\x10\x02\xbe\xef\xc3\xef\xf7\
\x31\x35\x75\x55\x45\x05\xcc\xdd\xba\x19\x29\xa8\x6d\x7e\x7e\x9e\
\x00\x00\xd7\x1f\x94\x52\xd0\xca\x99\x4c\x06\xfd\x7e\x3f\xc8\x8e\
\x10\x12\x1a\xda\xa4\x94\xc1\x10\x83\x44\x13\x89\x04\xf2\xf9\xfc\
\x9f\x1d\xd8\xe8\x84\x10\x50\x4a\x23\xc5\x01\x80\x31\x06\x4a\x29\
\x94\x52\xa0\x94\x82\x52\x8a\x58\x2c\x16\xf2\xb1\x02\x00\x40\x08\
\x71\x42\xd8\x9c\xeb\x04\x6c\x49\x9d\x09\x00\x1c\x97\xcd\x14\xd0\
\x6b\x3d\x8f\x02\x9e\x0a\xd0\x02\x26\xc4\xe6\x43\x29\xb5\x96\x4f\
\x9b\x1d\x3b\x08\x96\x52\x06\x73\x13\x64\xae\xb5\xcf\xb0\x5d\x44\
\x02\xb4\x80\x16\xd4\xa3\xd7\xeb\x61\x6f\x6f\x0f\x42\x08\x6b\x02\
\x67\x06\xd8\xb2\xee\x74\x3a\x58\x5d\x5d\xc5\xfa\xda\x5a\x50\xc2\
\x7f\x02\xe8\x3e\x57\x4a\xa1\x58\x2c\x82\x31\x86\x1b\x73\x73\xb8\
\x9d\xc9\x84\x7c\xcc\x92\x9a\xf1\x56\x80\x79\x79\xf4\xbc\x5a\xad\
\x62\x74\x34\x85\x8d\xd2\x06\xf2\x85\x02\xe2\xf1\xf8\x09\x1f\x13\
\xa0\xcd\xda\x45\x9a\xae\x4b\xe0\xba\x1e\x0e\x0e\x0f\xf1\xad\xd1\
\x84\xeb\x6e\x21\x97\x7b\x18\x24\x72\xea\x5b\x14\x05\x00\x80\x9a\
\x57\x43\x67\x7f\x1f\xad\x56\x0b\xae\x5b\x45\x36\x9b\x0d\x7c\xcc\
\xfb\x30\xec\x0c\x22\x2f\x9a\xeb\x7a\xf8\xb5\xdf\xc1\x4e\x73\x17\
\xb5\x5a\x15\x8e\xe3\x80\x73\x1e\x00\x80\xe3\x4b\xa7\x77\x62\xdb\
\x4d\xf8\x0c\x06\x41\x4a\x29\x54\x2a\x15\xa4\x52\x17\xd0\xde\xfd\
\x0e\xcf\xdb\x82\xe3\x38\x60\x8c\x9d\x68\x59\x65\xc4\xd8\x76\x11\
\x02\xc8\x81\x43\xb9\x5c\xc6\xc5\xf4\x38\x9a\xad\x1d\x94\xcb\x5f\
\xe0\x38\x4e\x70\x89\x6c\xa2\xe6\xda\x0a\x50\x0a\x90\x52\x41\x08\
\x1f\xed\x76\x1b\xc9\x64\x0a\xcd\x46\x03\xef\xdf\xbd\x45\x36\x9b\
\x0d\xf5\x7b\x14\xc4\x06\xe0\xda\x49\x4a\x01\x4a\xe8\xdd\xe9\xe9\
\x19\x34\x1a\x0d\x14\x0a\x79\xe4\x72\xb9\x50\xe6\xda\x6c\x0f\xdf\
\x30\xe3\x84\x50\x50\x4a\xa0\x94\xba\xbf\xb0\x70\xef\xf9\x76\x7d\
\x1b\x1f\x3f\xac\x63\x71\x71\x31\x38\x50\xdb\x93\x7d\x96\x27\x1c\
\x00\x78\x22\x91\x88\x03\x78\x74\xe5\xf2\xc4\x93\x7a\xbd\x2e\x5e\
\xbf\x7a\x89\x95\x95\x15\xbf\xdb\xed\xa2\xd7\xeb\x0d\x15\x34\x3b\
\xc6\xf2\x53\x0a\xba\x93\x7f\xf5\xbc\x67\x31\xce\x1f\x5c\x1a\x1f\
\x23\x4f\x97\x96\xde\x2c\x2f\x2f\xdf\x29\x95\x4a\x91\xed\xfb\x57\
\x46\x08\x49\x72\xc6\x1f\xa7\xc7\xd2\x2f\x00\xb0\x73\x13\x36\x2d\
\xce\x38\x26\x27\x26\xff\x8b\xf6\x6f\x11\xca\xe6\x64\xa6\xc5\xbd\
\x1b\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\x00\x00\x04\xf0\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
\x00\x00\x04\xb7\x49\x44\x41\x54\x48\x89\x95\x94\xcb\x4f\x5d\x55\
\x14\x87\xbf\xbd\xf7\x7d\x96\x4b\x69\x2f\xb4\x02\x9a\x18\x5b\x12\
\x12\x1b\xeb\xab\x2d\x55\xa9\x80\x8a\xf8\x4a\xd4\xd4\x91\xaf\x81\
\x29\x35\xce\xfc\x3f\x1c\x39\x68\xb4\x75\x60\xe2\xc0\x99\xd1\x48\
\xd5\x38\xb0\xb3\xc6\x47\x14\x85\x5e\xac\x36\xb1\xa5\x85\x02\xa5\
\x4f\xe3\x0d\x97\x73\xf6\x5e\x7b\x39\x38\x17\x04\x52\xa3\x3d\xc9\
\x3a\x83\xb3\xf7\x59\xbf\xfd\xad\xdf\x5a\xdb\xa8\x2a\x00\x3d\x3d\
\xbd\xad\x4b\x8d\xa5\xaf\xdb\xb6\xb4\xf7\xec\xb8\xeb\x4e\xff\xd8\
\x63\x83\x09\x28\xcd\xe5\xff\xfd\x58\xeb\x58\xbc\x7c\xa9\x63\xec\
\xf3\xaf\xea\xce\xd9\xcf\xcc\x8a\xc0\xf6\xed\xdd\x55\x0c\x3f\xb4\
\x54\x36\xef\xdc\xda\xd6\xc2\xf8\xf8\x4f\xb7\x96\x79\xcd\xb3\x6f\
\x5f\x1f\x1d\x5d\x3b\xd8\x54\x2e\x93\x5b\xf9\x28\x1a\xc9\x59\xc7\
\x9e\x7d\x8f\xf0\xc7\x99\x09\x42\x84\x28\x01\xbd\x45\x84\x62\x21\
\x0f\x80\x46\x25\xaa\xfe\x23\x80\x46\x54\x0d\x37\x6e\xfc\x09\xaa\
\xf8\x20\xa8\xc8\x2d\x0b\x58\x97\x43\x01\x91\x40\x14\x59\x23\x80\
\x41\x15\x62\x8c\x28\x90\xa4\x81\x28\xfe\x96\x3d\x50\xe3\x40\x15\
\x11\x41\xd6\x09\xa8\xa2\x64\x0b\x28\xf8\x20\x44\x89\xff\x8b\x40\
\x44\x48\xd3\x94\x72\xb9\x8c\x71\xa1\x49\xb0\x41\x40\x9b\x2f\x91\
\x80\xa2\x24\xa9\x47\x42\xfa\x9f\x04\x17\xce\x4f\x73\xba\xf6\x0b\
\xad\x6d\xed\x3c\xdc\x7f\x00\xc5\xac\x12\x84\x10\xb0\xff\x08\x28\
\x68\x44\x82\x00\xe0\x7d\x20\x88\xfc\x6b\xd4\xeb\x75\x4e\x7c\xfd\
\x05\x8f\x3e\xbc\x97\xd6\xcd\x9b\xe9\xbd\x7b\x17\x41\x24\xf3\x0e\
\x08\x21\x20\x61\x2d\x41\x54\xd4\x9a\x8c\x40\x21\xf5\x01\x09\xe1\
\xa6\x04\x21\x78\x16\xe6\x66\xe8\xed\xed\xe5\xd4\xc4\x24\x0b\x8b\
\xd7\xb9\xf7\xc1\x16\x92\x24\x00\x0e\x14\xa2\x08\x22\x61\xad\xc9\
\xa0\xaa\x84\x20\x80\x92\xfa\x40\xbc\x89\x40\xf0\x9e\x2b\x8b\x73\
\x18\x4d\x39\x7b\x76\x96\xc9\x5a\x8d\x17\x0e\xbe\x8c\xf7\x01\x00\
\x63\x5d\xe6\x65\x08\x1b\x4a\xa4\x8a\xaa\xae\x9e\xfa\xcc\xef\xbf\
\x51\x28\x96\xc8\x17\x8b\xcd\x28\x60\x8c\xe1\xda\x95\x05\x90\x84\
\xf9\xf9\x05\xe6\x17\xaf\x30\xfc\xcc\xf3\x6c\x69\xaf\xae\xee\x3b\
\x73\xe6\xb7\xac\xc4\x21\x10\x82\xb0\x3a\xc9\x6d\x6d\xd5\x2a\xc6\
\xfc\xb0\xa3\x67\xd7\xce\xc5\x85\x69\xb6\x6d\xeb\xc0\x60\x32\x75\
\x03\x85\x42\x81\xbe\xbe\x3e\x06\x87\x86\x98\x39\x7f\x81\xb1\xb1\
\x31\xe6\xe7\xe7\x28\x14\x8b\x6b\x4a\x90\xed\xbd\x7a\xf5\x1a\xd5\
\x8e\x3b\xc8\xe7\x0b\x1b\xbb\x28\x6b\xd5\x6a\xc7\xed\x34\x12\x8f\
\xb5\x16\x91\x48\xb9\x5c\xa2\x6f\xff\x43\x0c\x0d\x1c\xe0\xdc\xf4\
\x34\xc7\xc7\xbe\x64\x6e\xfe\x1a\xb9\x7c\x2b\x69\xd0\x6c\x76\x54\
\xc9\x39\x47\x8c\x91\x2d\xd5\x2e\x8c\x01\x11\xbf\x46\xa0\x49\x12\
\x82\x07\xa0\x58\x2c\xe0\x9c\x43\xfc\x12\x03\xfd\x7b\x18\x7c\xb4\
\x9f\xe9\xe9\x69\xbe\x38\x7e\x9c\xd9\xd9\x8b\x14\x8a\x05\x50\xc1\
\x28\x38\x03\x12\x05\x97\x6b\x45\x43\x24\x4d\x13\x5c\x2e\x8f\x73\
\x76\x83\x80\xa1\x39\x68\x4a\x00\xda\x5b\xb7\xf2\xd2\x8b\x07\x79\
\xfc\x89\x61\xc6\xc7\x7f\xe2\xfa\xf5\x6b\x8c\x1e\x3e\x44\xcf\xce\
\x1d\xa4\x69\x8a\x31\x59\x09\x9d\x73\x9c\x3c\x79\x92\x8f\x3e\xfe\
\x84\xb0\x1c\x32\x81\x10\x28\x96\x4a\x1b\xba\x28\x2a\xc1\x67\x04\
\xa5\x52\x91\xfd\x7d\x7b\x78\x72\xe4\x69\x6a\xb5\x53\x1c\xfd\xe0\
\x43\xce\x9d\x9b\xe1\xb9\x67\x47\xd8\xd2\xd6\x4a\xa3\xb1\xbc\x2a\
\x60\xad\xa5\xab\xbb\xbb\xe9\x97\xc1\x59\x97\x0d\x9a\x0f\x1b\x08\
\x54\x11\x09\x94\x8a\x25\x06\x0e\x3c\xc2\xeb\xaf\xbd\xca\xe9\x5f\
\xa7\x38\x71\xe2\x1b\x66\x66\x2e\x52\x2c\x15\x89\x51\x58\x5e\x5e\
\x26\x4d\xd3\xd5\xff\x8c\x31\x34\x96\x1a\x04\xef\x09\xde\x23\x22\
\xc4\x18\xd7\x7b\xb0\x62\xb0\x73\x39\x06\x06\xfb\x19\x1d\x7d\x83\
\xda\xa9\x53\xfc\xf8\xe3\xf7\x94\x4a\x65\x8c\xb1\x48\x08\x78\xef\
\x49\x53\xcf\xf2\xf2\xf2\xaa\x6f\xce\x39\xd2\x34\xcd\xa6\x3f\x04\
\x62\x14\xac\xb5\x18\x63\xd7\x5f\x15\x95\x4a\xc5\x8d\x0c\x0f\xf1\
\xd6\x9b\xa3\x4c\x4e\x4c\x70\xf4\xd8\x31\x3a\x3b\x3b\x69\x69\x69\
\xc1\x7b\x9f\x25\x4f\x12\x1a\x8d\x25\x92\x24\x21\x4d\x53\xd2\x34\
\x25\x49\x92\xec\xd4\x22\x84\x90\x11\xa8\x66\xdd\xb5\x4a\xf0\xd4\
\xc8\xc8\xd6\xae\xee\xae\xea\xe8\xe1\x43\x4c\x4e\x4e\xf2\xde\xfb\
\xc7\x98\x9d\x9d\xa7\xa5\x52\xe1\xca\xd5\xeb\x68\x8c\x44\x8d\x04\
\x09\x24\x49\x42\x92\xa4\xeb\x09\xbc\xcf\x92\x87\x00\x28\xbe\x39\
\xb8\x39\x80\xa3\xc7\x3e\xa8\x3e\x70\xff\x7d\xef\x0e\x8f\x8c\x54\
\xa6\x6a\x35\x8e\x1c\x39\xc2\xe4\xc4\x14\x9b\x5a\x36\xa5\xbb\xef\
\xb9\x27\x7f\xef\xee\xdd\xe6\xc9\xe1\x27\x50\x94\x7c\x2e\x4f\x3e\
\x9f\x5b\x77\x8d\x1b\x63\x58\xbc\x7c\x99\x7a\xbd\xce\xd2\xd2\x12\
\xce\x59\x62\x54\xac\x35\x98\xa1\x81\xc1\x7d\x7b\xf6\xee\x7d\xb7\
\xa3\xbd\xba\xdf\x5a\x27\x9f\x7c\xfa\xe9\xe5\x5a\xad\x76\xd1\xfb\
\x74\x5b\xa5\x52\x39\x7f\x5b\xe7\x6d\xdd\xce\x3a\x63\xad\x35\x26\
\x6b\x1b\xd3\x4c\x6a\x9a\x26\xeb\x8a\xd9\x67\xcf\x9e\x2b\x66\x57\
\x4e\x54\x55\x55\x11\x99\xc8\x4d\xfc\x3c\xbe\xab\xfe\xe7\x8d\xfd\
\xfd\x03\x03\x4c\x4d\x9d\x1e\xfb\xee\xbb\x6f\xdf\xf6\xde\x5f\x88\
\x31\x96\x9d\xb5\xad\x0a\x9b\xac\xb5\x15\x63\x4c\xc5\x18\x53\x01\
\xca\x40\x11\x70\x4d\x00\x01\x12\x55\x6d\x18\x63\x1a\xc0\x5f\xaa\
\xf1\x2f\x91\x58\x17\x91\x1b\x06\xc8\x5b\x63\x5e\xe9\xdc\xbe\xfd\
\xc1\xb9\x4b\x97\xde\x51\xd5\x0b\xcd\x53\x3a\x20\x77\x93\x70\x80\
\x5d\x21\x69\xde\x32\xb1\x29\x14\x36\xc6\xdf\xb8\xfc\xfe\xd4\x40\
\xe3\x70\xe9\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\x00\x00\x02\xbb\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\
\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\
\x00\x9a\x9c\x18\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x09\x14\
\x11\x14\x33\xf7\xd9\xab\x49\x00\x00\x02\x3b\x49\x44\x41\x54\x48\
\xc7\xb5\x56\xcf\x6b\x13\x41\x14\xfe\xe6\xed\xce\x26\xd1\xc6\x86\
\x2a\xc5\xe6\xa0\x82\x68\x0b\x1e\x3c\x49\xa9\xb7\xa2\xd7\x10\x69\
\x11\xbc\x09\x7a\xf0\x90\x8b\x27\xfd\x0b\xc4\x6b\x2f\xa2\x9e\xfa\
\x2f\x98\x8b\xc1\x5f\xb4\xe4\xe0\x41\x2f\x82\x21\x68\x49\xf0\xd0\
\x83\x9a\xb6\xa6\xd1\xb8\x6d\x76\x3b\x33\x1e\x64\xc2\x64\x3b\xc9\
\x6e\xa5\x3e\x18\x78\x6f\x76\xe6\x7d\xf3\xbe\xf7\xde\xcc\x02\xff\
\x59\x58\x74\xa2\x5c\x2e\xab\xc3\x70\x5c\x2c\x16\x19\x00\xb8\xb6\
\x8f\x85\x42\x01\x61\x18\x82\xb1\xbf\xf8\x8c\xb1\x81\xa1\x45\x4a\
\xd9\x1f\x42\x08\x08\x21\x90\x4e\xa7\x51\xa9\x54\xfa\x6b\xac\x00\
\x8c\x31\x10\xd1\x48\xe7\x00\xe0\x38\x0e\x88\x08\x4a\x29\x10\x11\
\x88\x08\x9c\xf3\x81\x35\xee\xb0\x10\x85\x10\xfb\x1c\x9b\xba\x3e\
\x80\xed\x50\x89\x00\x00\x40\x29\x35\xe0\x40\xdb\x5a\x1f\x05\x18\
\x0b\xa0\x1d\x98\x20\xb6\x35\x44\x64\xa5\x4f\x0b\x8d\xda\x2c\xa5\
\xec\xeb\x26\x90\x69\xeb\x35\xc3\xa2\x88\x8d\x40\x4a\xb9\xef\x74\
\x36\xba\xb4\x7e\x20\x00\x73\x53\x94\x2a\x1b\x7d\xff\x04\x10\x4d\
\xa6\x6d\xce\x8c\x36\x4a\x93\x15\x40\x37\x4f\xb4\x34\xa3\x65\x6b\
\xeb\x95\x44\x00\x3a\x89\xc3\xb8\xd6\xb6\x2d\x3f\x89\x28\x32\xab\
\x24\x0e\x24\xae\x9c\x13\x35\x9a\xad\x52\x4c\xfb\xf5\x87\x37\x28\
\x7f\x7c\x06\x92\x2e\x16\x2f\x2d\x1c\x0e\x45\xa6\xf4\xa8\x87\x63\
\xf3\x1c\xde\xf7\x0c\x02\x19\xc4\x37\x9a\x06\x30\x2b\x69\x94\x9e\
\xe2\x1e\xb2\xf9\xa3\xf8\x35\xd1\x01\x77\xf9\xc1\x72\x60\xbb\x69\
\x95\x52\x58\xa9\xaf\x22\xe4\x01\xc6\x90\x45\x63\xab\x81\xe0\x7c\
\x0f\x6d\x6a\xa1\xb6\x5e\x83\xfa\x21\xb1\xf8\xf0\x7a\x69\xab\xb3\
\xd9\x76\xe3\x7a\x60\x58\x72\x9f\xbe\x7f\x8c\xb5\xf9\x77\x98\x3b\
\x37\x87\x49\xe4\xb1\xd6\xf9\x84\xee\xe7\x1d\xec\x7a\xaf\x90\x9d\
\x19\xc3\x89\xd3\x99\xa5\xee\x5b\xde\xb4\x02\x44\x2f\x30\x9b\x2e\
\x7c\x85\xaf\x2f\x7e\xe2\x79\xe3\x25\x82\x9c\x80\xf7\x85\x90\x1f\
\x9f\x42\x66\xfa\x08\x32\x69\x8e\xa0\x1b\x20\xf4\x42\x3b\x45\xbe\
\xef\xef\xf9\xbe\x6f\x7d\x6c\xb4\x7e\x7b\xf6\x16\x5b\x50\xd7\x98\
\xe3\x12\x6a\xdf\xea\x6c\x79\xe7\x09\xdb\xbe\xb8\x81\x1b\xcd\x3b\
\xca\xdd\xe0\x6c\xa5\xb5\x7a\x77\x6f\x53\xda\x29\xaa\x56\xab\x6e\
\xdc\x9b\x9b\x42\x0a\x27\x31\x05\x00\x98\xf8\xdd\x42\xea\x0c\x43\
\xee\xd4\x38\xa8\x4e\x6c\x26\x37\x8d\xfb\x37\xef\x3d\x3a\xb4\x3f\
\x87\xd9\x07\x97\x4b\xc7\xcb\xe9\xf0\xc2\xfa\x64\x78\x75\xe9\x4a\
\x29\x71\xa3\x25\x15\x67\xdb\x69\xe7\x6b\x67\x1b\x5e\x93\x63\xb7\
\x15\xb6\xcd\x6f\x7f\x00\xd4\x61\x49\xb9\xc4\x8c\xe3\x5e\x00\x00\
\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\x00\x00\x03\xca\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
\x00\x00\x03\x91\x49\x44\x41\x54\x48\x89\x9d\x94\xcb\x8b\x1c\x55\
\x14\xc6\x7f\xe7\xde\xee\xa9\x9e\xa4\xc7\xc4\x71\x42\x9c\x18\x08\
\x9a\xe0\x22\x92\xb8\x91\xb8\x90\x40\x0c\x3e\x30\x88\x82\xf8\x57\
\xb8\x77\xe9\xca\xbd\x0b\x77\x6e\x44\x5c\x88\x0b\x05\xd1\x85\xf8\
\x07\x64\x23\x24\x10\x57\xc9\x80\x11\x97\x26\x8c\x46\x32\x74\x3d\
\xee\x79\xb8\xa8\xea\x4e\xf7\x44\x17\xed\xa5\x6e\xdd\x7a\x9d\xf3\
\xdd\xaf\xce\xf7\x1d\x39\x7b\xf6\xf9\xad\x59\x3d\xfb\xe9\xd8\xf1\
\xa7\xce\x3d\xf7\xec\x99\x72\xf5\xea\x95\x16\x82\x08\xd6\x1a\x29\
\x65\xee\xdd\xff\x63\xe7\x87\xef\x7f\x3c\xc8\x39\x7d\xf7\xcb\xad\
\x1b\x1f\x00\xc8\x89\x13\xbb\xdb\x08\x3f\x1f\x9d\x3e\x71\xf6\xc9\
\x63\x47\xb9\x79\xf3\xc6\x7a\x99\x97\xc6\xa5\x4b\x2f\xb3\xb3\xfb\
\x1c\x47\x36\x37\xf9\xe6\xeb\xcf\x05\x60\x64\xe1\x8c\x52\xe6\xa5\
\x4b\xaf\xf0\xeb\xde\x2d\xd4\xc1\x4d\x89\x35\x29\x54\x1b\x63\x00\
\xc2\x03\x5f\x8a\x1d\x11\x4e\x84\xf0\xe0\xc1\xdf\x10\x41\x51\x23\
\xcc\xd6\x06\x48\x79\x44\x00\x66\x8a\x9b\x2d\x01\x20\x44\x80\xbb\
\x13\x40\xdb\x29\x6e\x65\xed\x1a\x84\x64\x88\xc0\xcc\xb0\x15\x80\
\x08\x82\xfe\x05\x01\x45\x0d\x37\x5f\x9b\x81\x64\x1d\x18\x1c\x02\
\x08\x80\xe8\xa9\x05\x41\xdb\x15\x4c\xbb\xf5\x19\x20\x0b\x06\xaa\
\xba\x0c\x10\x48\x38\xa6\x3d\x6a\x29\x8a\xbb\xad\x2f\x53\x35\x02\
\x50\xd5\x45\xae\x1e\xc0\x83\x48\xd2\x33\x08\xe8\x8a\x62\xaa\x6b\
\x03\x40\x86\x00\x37\xc3\x6c\x89\x01\x40\x44\xa0\x6a\x40\xd0\x15\
\xc5\xff\x07\x80\xa4\xdc\xd7\x52\xf5\xd0\x2f\x1a\x32\xcd\x77\xbd\
\x77\xe7\x36\xe7\xcf\xbf\xb0\xa4\xe5\x98\x1f\xab\x09\x57\x4f\xec\
\xed\xdd\x06\xa0\xa8\x32\xd2\xc7\x54\x04\x92\x84\xfd\x7b\xfb\x7c\
\xfc\xd1\x87\xc8\x10\x34\x5f\xfa\xcb\xa5\x1b\x62\x15\x30\xfa\x6f\
\xf7\xf7\xff\x64\x7b\xe7\xf4\xbf\xa9\xa8\x97\xea\xf6\xce\x33\xd4\
\x6d\x21\xa5\x84\x99\x93\x92\x90\x52\x42\x24\x0d\x6b\x9f\xcc\xa3\
\x97\xb1\x7b\xbf\x8e\x72\xc6\xdd\x39\xbe\xbd\x8b\x08\x98\x95\xc7\
\x7f\x91\x6a\xff\xb0\xaa\x36\xc8\x39\x33\x3b\xf8\x8b\x2c\x99\x9c\
\x32\x20\x8f\x5a\xc0\x9c\x5c\x40\x16\x30\x37\xf2\x68\x8b\x50\xa7\
\xeb\x5a\xf2\x68\x4c\xce\xe9\x10\x80\x30\x18\x2d\x50\x60\xab\x9a\
\xf2\xee\x3b\xd7\xb8\x72\xe5\x55\x36\x26\x13\x88\xa0\xaa\x2a\x36\
\x27\x15\x5d\xd7\x21\xd2\xa3\xe4\x9c\xb9\x7e\xfd\x3a\x5f\x7e\xf5\
\x2d\xda\x68\x0f\xa0\x4a\x35\x99\x2c\xd5\x80\xbe\x41\x69\x79\x44\
\x4b\x4d\xb9\x7c\xf9\x32\xb7\xef\xec\xf1\xc9\xa7\x9f\x11\x1e\xbc\
\xf5\xe6\x55\xde\x7f\xef\x6d\xea\xba\x59\x00\xa4\x94\xd8\x3d\x75\
\x6a\xa0\x24\xe4\x94\x7b\xa3\x95\xc3\x2a\x8a\xe8\xb5\x1b\x42\x10\
\x68\x51\x9a\xa6\x41\x55\x19\xa5\x44\xa4\xc0\xdd\x68\x9a\x86\xae\
\xeb\xfa\xba\x46\x20\x22\xd4\xb3\x1a\x2d\x05\x2d\x05\x33\xc3\xdd\
\x57\x6b\x30\x2f\x70\x29\x8a\xf4\x6e\x47\xb5\x30\x9b\xcd\xa8\xeb\
\x7a\x30\x60\x50\x4a\xa1\xeb\x0a\x4d\xd3\x2c\xfa\x54\xce\x99\xae\
\xeb\x28\xa5\xd7\xbe\xbb\x2d\x44\xb1\xa4\xa2\x20\x06\x06\xc2\xdc\
\x74\x85\x52\x0a\x6d\xdb\x52\x4a\x21\x22\xe8\xda\x96\xba\x9e\xd1\
\xb6\xdd\x22\xb8\x57\x9b\xe1\x66\xa8\x96\x05\x2b\x77\x5f\x02\xf0\
\x20\x22\xc2\x06\xf7\x45\x80\xa9\xd1\xcc\x93\xbb\xe3\xe1\xa8\x29\
\x6d\xdb\xd2\xb6\xdd\x2a\x83\x52\x50\x2d\xf4\xf1\x41\x89\x58\xe9\
\xc4\xa3\xb6\x9d\x3d\x14\x91\xbd\xb6\xad\xcf\xb9\x47\xdf\xaa\xbd\
\x74\x17\x2f\x5c\x18\xbf\x78\xf1\xa2\xbc\xf1\xfa\x6b\x04\xc1\x78\
\x34\x66\x3c\x1e\xad\x04\x8b\x08\xf7\xee\xdf\xe7\xe0\xe0\x80\xd9\
\x6c\x46\xce\x09\xf7\x20\xa5\x47\xa6\x14\x20\x01\x67\x36\x36\x36\
\xbe\x98\x4c\x36\x47\x6d\xdb\x9c\x9e\x4e\xa7\xbf\x9f\x7c\xfa\xe4\
\xa9\x9c\xb2\xa4\x94\x44\x7a\xd9\xc8\x90\x54\x86\x22\xc7\xbc\xd8\
\x77\xef\xfe\x56\x45\x04\x11\x1e\x11\x11\x66\x76\xab\x69\x9a\x6b\
\xbd\x5f\x96\x76\xa4\xaa\xe2\xee\x9b\x39\xa5\xad\x80\x23\x29\xa5\
\xa9\x88\x4c\x45\x64\x0a\x6c\x02\x15\x90\x87\xcf\x0d\x68\x23\xa2\
\x16\x91\x1a\x78\x18\xe1\x0f\xcd\xfc\xc0\xcc\x1e\x54\x55\xd5\x3d\
\x06\x30\xec\x32\x0f\xfe\x38\x3c\xf3\xc0\x76\xce\x3f\x00\x1f\x80\
\xf4\x3f\x26\xff\x00\xbd\xc3\xa8\x16\x2a\xc1\xd3\xa3\x00\x00\x00\
\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\x00\x00\x04\x4f\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\
\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\
\x00\x9a\x9c\x18\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x09\x14\
\x11\x19\x29\xbf\x15\x2c\x7e\x00\x00\x03\xcf\x49\x44\x41\x54\x48\
\xc7\xd5\x54\x6d\x68\x5b\x55\x18\x7e\xce\xbd\x37\x1f\x6b\xbe\xba\
\x36\x4b\xb5\xb4\x74\xab\x62\xed\xdc\x04\x6d\x31\x28\x85\x76\x1d\
\x6c\x43\x37\xea\x0f\x11\xac\xae\x85\x09\x43\x41\x5d\xc2\x42\xad\
\x22\xe8\x7e\x08\xb2\x2a\xd6\x51\xdd\xef\x6e\x13\x51\x1a\x70\x52\
\x9a\xb2\xb1\x6a\xa1\x13\x24\x0e\x95\x85\xe4\x26\x69\xb7\x26\x4b\
\x93\xb6\xc9\x3e\x6e\x73\x9b\x34\xad\xf7\x1e\xff\x78\xaf\xb9\x69\
\x9a\x4d\xf0\x8f\x2f\x1c\xee\x39\x87\x73\x9f\xe7\x3d\xef\xf3\xbc\
\x87\x8c\x8e\x7a\x0d\x97\x26\x26\x9e\x78\xb8\xb1\xe1\x64\x6b\x4b\
\x4b\x87\xd1\x68\xd8\xc6\xb2\x2c\x59\x2b\xac\xa3\x50\xc8\xdf\x9a\
\xbb\x19\xff\x61\x79\x21\xf1\xfd\xe3\xbb\xf7\x86\x07\xdf\x7f\x2b\
\x8f\x7f\x19\xe4\xdc\xa8\xf7\x6c\xd3\xce\xc6\xa3\x84\x61\x4d\x2b\
\x2b\xab\xb0\xd9\xcc\x58\x2b\x14\x70\xe7\xb6\x00\x8b\xc5\x08\x42\
\x18\x18\xf4\x3a\x84\x82\x01\x34\x34\x3a\x1e\x18\xb8\xa7\xa7\x87\
\x00\x00\x97\xb9\x23\x34\x1f\x7c\xfe\x80\x29\x78\xfd\x77\x1a\x8f\
\x45\x89\xd5\x6a\x42\x3e\x9f\x43\x26\x73\x0f\x75\x75\xb5\xd8\xb3\
\xa7\x0d\xc2\x3d\x01\xbf\xfc\xec\xc7\x1b\xe7\xcf\x82\x10\xa2\x82\
\xc8\xb2\xac\x0e\x49\x92\x20\x49\x12\x8c\x46\x23\x7c\x3e\x9f\x7a\
\x86\xbb\x31\x37\x6b\xbb\x79\xe3\x16\xba\xf6\x75\xe0\x19\x67\x3b\
\xa2\xb3\x71\x3c\x54\xe7\xc0\x0e\x47\x35\xc2\x7c\x0c\xf1\x78\x02\
\x9f\x7f\x76\x06\x6f\xbf\x73\x0c\x0c\xc3\x68\xb2\x64\x59\x16\x0c\
\xc3\x80\x52\x0a\x86\x61\xc0\x30\x0c\x74\x3a\x9d\xe6\x0c\xf3\xc8\
\xa3\xbb\x86\xbe\xfd\xc6\x3b\x91\x4c\x0a\x44\x5c\x15\xa9\xff\xd7\
\xdf\x70\x3d\xc0\x23\x93\xc9\x62\x69\xf9\x36\xbc\xde\x71\x1c\x38\
\xd4\x85\x83\x87\xf6\x43\x92\x24\x35\xe3\x4d\xb5\x26\x64\x53\x02\
\x00\xc0\xf4\x1f\xeb\xa7\x42\x76\x65\x71\x6c\xec\x22\xad\xae\xb6\
\x13\x86\x10\x88\xe2\x2a\xee\xde\x5d\x45\x62\x61\x09\x1c\x4b\xd1\
\xd7\xf7\x32\x00\x80\x52\x0a\x4a\xa9\x3a\x57\x80\x15\xf0\xb2\x04\
\xe3\x17\x27\xfa\xb7\xd7\x58\xc6\x63\xf3\xf1\xce\xc5\xd4\x32\x5a\
\x5b\x5b\x90\xcd\x0a\x00\x28\x22\x7c\x08\xc7\x8f\xbf\x0a\xab\xd5\
\xa2\x82\x17\x0f\xe5\x26\x95\x08\xb8\xbe\xa3\x2f\xf6\x00\x40\x77\
\xe7\x4b\xe4\xda\xb5\xc0\x17\xed\x6d\x4f\x9d\x08\x05\x79\xf8\xfd\
\x7e\x38\x9d\x4f\xa2\x75\xf7\x63\x9a\x6c\x4b\xb3\x97\x65\x59\x05\
\x2e\x4b\xa0\x4c\xa6\xa6\xc7\x68\x7d\x43\xfd\xc7\x3a\x1d\x7b\xa2\
\x69\x67\x33\xf8\x50\x00\x87\x5f\xe8\x84\x2c\xcb\x1a\xe7\x00\xc0\
\xc6\xc6\x06\x04\x41\x80\xdd\x6e\x07\xcb\xb2\x9b\x12\xd0\x94\xa8\
\x78\x71\xe1\xeb\x33\xe9\x58\x7c\x0e\x14\xc0\xae\xe6\x26\xe8\xf5\
\xff\x38\x42\x29\x4b\x36\x9b\xc5\xc8\xc8\x08\xa6\xae\x5c\x01\x21\
\x44\x53\xb2\x72\xb1\xe9\x4e\x46\x83\x11\x36\x9b\x15\x06\xc3\x36\
\xb5\xce\xb2\x2c\x83\x52\x8a\xe9\xe9\x69\xb0\x2c\x8b\xfd\xdd\xdd\
\x38\x7c\xe4\x88\x46\x8b\x62\x4d\x2a\x12\x58\x6d\x26\xe4\xf2\x79\
\x38\x1c\x35\x1a\x5b\xf2\x3c\x0f\x93\xc9\x8c\xab\x33\x57\xe1\x9b\
\x9c\x84\x5e\xaf\x57\x1b\xac\xb8\xe1\xb6\xd4\x40\x09\x83\x9e\xa0\
\xe3\xd9\xbd\x10\x45\x51\x2d\x4d\x38\x1c\x41\x7e\x6d\x0d\x0b\x89\
\x24\xc2\xe1\x10\x3c\x9e\x93\x6a\x27\x97\xab\x7b\x45\x82\x52\xbf\
\x47\x23\x51\x64\x45\x11\xa9\x54\x0a\xe1\x30\x0f\xb7\xdb\xad\x9e\
\x51\x34\x50\xbe\x0f\x4c\xa0\x44\x38\x1c\xc1\x8a\x98\xc5\x62\x72\
\x09\xd1\x28\x0f\x97\xcb\x05\x8e\xe3\xca\x5a\x55\x69\xb8\xfb\x6a\
\xa0\xfc\x1c\x0c\x06\x61\x36\x5b\x90\x5e\xca\x20\x12\x09\xc1\xe5\
\x72\xa9\x96\x2c\x1d\xa5\xb7\xbe\x2f\x41\x20\x10\xc0\xf6\x5a\x3b\
\x92\xa9\x45\x04\x02\x7f\xc0\xe5\x72\xa9\x4d\x54\x0e\xb4\xf4\xf9\
\xa8\x48\x90\x4e\xa7\x51\x55\x65\x46\x32\x91\xc0\xe5\x4b\x13\x70\
\xbb\xdd\x1a\xbf\x57\x22\x29\x47\xa0\xd1\x60\x70\xf0\xbd\xd7\x9c\
\xce\xe7\x90\x48\x24\x30\x39\xe9\x83\xc7\xe3\xd1\x64\x5e\xfc\x72\
\x16\x6b\xb0\x95\xc0\x1a\x82\x8f\x3e\x3c\xf5\xfa\x2b\xbd\xbd\x5f\
\xce\xc7\xe6\xf1\xd3\x8f\x53\x18\x18\x18\x50\x05\x2d\x16\x50\x99\
\x97\xae\xb7\x7c\x8b\xba\xbb\xf6\xe9\x9f\x6e\x6b\x7f\xb7\xb1\xa1\
\xfe\x54\x2c\x16\x93\x2e\x9c\x3f\x87\xe1\xe1\xe1\x3f\x73\xb9\x1c\
\xd6\xd7\xd7\xb7\x04\x2c\x76\x4c\xf1\xde\xdf\xfb\x6a\xe2\xdc\x6c\
\x24\xf2\xa9\x8e\xe3\xde\xdc\x61\xaf\x21\x9f\x9c\x3e\xfd\xdd\xd0\
\xd0\x50\xef\xcc\xcc\x0c\x87\xff\x2a\x08\x21\x55\x1c\xcb\x7d\x50\
\x5b\x53\xfb\x15\x00\x16\xff\xb7\xf8\x0b\x5c\x7f\x25\x61\x68\x07\
\x46\x1b\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\x00\x00\x06\x35\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\
\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\
\x00\x9a\x9c\x18\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x09\x14\
\x11\x13\x07\x99\x2c\xc9\x3b\x00\x00\x05\xb5\x49\x44\x41\x54\x48\
\xc7\x85\x94\x5b\x6c\x5c\xd5\x15\x86\xff\xbd\xcf\x39\x73\xe6\x62\
\xcf\x8c\x1d\x5f\x12\xe7\x62\x7b\x92\x8c\x33\x76\xb8\x14\x22\x4a\
\x70\x62\x12\x02\x22\xe1\xa1\x79\xea\x03\x15\xd4\x84\xd0\x56\x22\
\x15\x3c\x18\x84\x40\xe2\xa1\x42\x15\x52\x6f\x5c\x84\x78\x44\x40\
\x2f\x28\x22\x0e\x4d\x09\x8e\x08\x22\x02\x6a\xa8\xd3\xc4\x2d\xd4\
\x21\xc6\x97\x38\x19\x27\xc4\x63\x7b\x6c\xcf\xd5\x33\xe7\xec\xbd\
\xd7\xee\xc3\xc4\x83\x27\x4e\xe9\x92\x96\xf4\xe9\x68\xed\xb5\xd6\
\xbf\xd7\xda\x87\xbd\xf5\x56\xaf\x7d\xb2\xaf\xaf\x63\xcd\xfa\x75\
\x3d\xb1\xb6\xb6\x1d\x5e\xaf\xed\x33\x0c\x83\x15\x1d\x17\x8e\x53\
\xb8\x7c\xe1\xe2\xe4\xdf\x66\xbe\xbd\xf2\xd7\x2d\xed\x37\x8d\x3c\
\xf3\xec\xa1\x02\x00\xf4\xf7\xf7\x9b\x96\x65\x05\x18\x63\x01\xc6\
\xd8\xda\xea\xaa\xaa\x28\xe3\xc6\x56\x07\xd6\x4d\x63\x13\x13\xa7\
\xb6\x46\xd6\xff\xc1\x81\x85\xb1\x89\x09\x98\x0c\x78\xf9\xe7\x8f\
\xff\xe2\x61\xc6\x8d\x40\x26\x93\x47\x28\x54\x85\xa2\xe3\x60\x7e\
\x2e\x8d\x86\xd5\x0d\x75\x1b\x5a\x5a\x7f\xe0\xb5\x3d\xcf\x0d\x9f\
\x3f\xff\x75\x3c\x1e\xff\xd2\xef\xf7\xb7\xdd\x7c\xf3\x2d\xf5\x1e\
\x8f\x55\xed\x31\x8d\xa0\x20\xe6\x5b\x94\x80\xab\x19\x2c\x83\x21\
\x91\xce\x5e\x0d\xaf\xdb\xb8\xc4\xe0\xc9\xf9\x74\x64\x4b\x7b\x2c\
\xa0\xc4\xa2\x9e\x8c\x8f\x21\x7e\x69\x14\x97\x26\x86\x31\x71\xe1\
\x3c\x12\x53\x71\xac\xaa\xad\x85\x14\xca\x1a\xf8\x7c\xe0\xd6\xe6\
\xe6\xe6\x47\xea\xeb\xeb\xb7\x07\x83\xd5\x9b\x3c\xb6\xdd\xb8\xe0\
\x30\xdf\x9c\x03\x28\x6e\xc0\xf6\x18\x50\x9a\x40\xa4\xd9\x32\x86\
\x39\x71\x61\x3c\x74\x71\xe2\x32\x76\xed\xde\x81\x3b\x7e\xb8\x0d\
\x63\xe3\x93\x58\xdd\xd8\x80\xfa\x86\x30\x46\xbe\x89\x63\x72\xf2\
\x0a\x5e\xfa\xfd\xab\x78\xe2\xc9\x83\x58\x6e\x89\x54\x11\x0e\xb7\
\x10\xf0\x9a\x20\x0d\xb8\x0a\x50\x0a\x50\x54\xc9\x7c\xe3\xa6\xd6\
\xdf\x1e\x7e\xa7\xb7\xef\xea\xd5\x34\xcb\xe5\x73\xfa\xcc\xd9\x7f\
\x63\xe8\xdc\x37\x48\x26\xb3\x98\x9e\x99\x43\x6f\xef\x71\xdc\xbf\
\x6f\x37\xf6\x3d\x70\x1f\xb4\xd6\x20\x22\xb8\xc5\x45\xcc\xa7\x73\
\xf0\x59\x06\x5c\x05\x08\x02\x24\x01\x2e\xad\x64\xde\xfd\x68\xb7\
\x4e\x67\x33\x89\x23\x47\x8e\xe9\x70\xb8\x8e\x71\xc6\x74\x2e\x97\
\xc7\xc2\x42\x1e\x57\xbe\x9d\x86\x69\x68\x1c\x38\xf0\x60\xb9\xf3\
\x62\xa1\x80\xc5\xc5\x02\x66\x12\x53\x50\x04\x08\x55\x72\x57\x01\
\x52\x69\x48\x5d\xc9\xfc\xf8\xb1\xbe\xee\x9a\xda\xea\xe3\xf1\x4b\
\x93\x77\x27\xa6\x66\x10\x8b\xb5\xb1\x6c\x36\xad\x01\x8d\xb1\x91\
\x61\x3c\x7e\xa8\x1b\xa1\x50\xb0\x5c\x40\x2a\x55\x66\x0d\x94\x15\
\xb8\x4a\x97\x12\xcb\x4a\xe6\x0f\x3f\xb4\x7f\xff\xef\x7e\xf3\xfc\
\x7b\x5f\xfe\xeb\xab\xfe\xc1\xc1\x73\xaf\xac\x6b\xda\x00\xe1\x0a\
\x76\xe6\xcc\x19\x74\x76\xde\x8e\x8e\x8e\x2d\xb8\xb1\x69\x90\xd6\
\x10\x54\x72\x57\x2a\x08\x22\x28\x4d\x15\xcc\x97\xc2\x3f\xfe\xe4\
\x5d\x7d\xb4\xf7\xd8\xaf\xff\x33\xf4\xf5\x70\x73\x4b\x04\xe9\xd4\
\x1c\xba\xba\xee\x84\xd6\x1a\x5a\xeb\x1b\xa4\x07\x14\x69\x28\x45\
\x10\x92\xe0\x0a\x09\xa9\x34\x94\xd2\x15\xcc\x97\x1f\xfa\xe3\x9f\
\x5e\x99\x1d\x38\xfd\xcf\xf7\x35\xa0\x23\x1b\x5b\x60\xdb\x9e\xef\
\x12\x5e\x2b\xb4\xdc\x4b\x33\xd0\x70\x5c\x01\xa1\x34\xa4\xd2\x28\
\x08\xaa\x60\xf3\xfa\xce\x56\xd5\x86\xc3\xa1\x50\x10\xb9\x8c\x2a\
\x27\x62\x8c\xdd\xf0\x92\x88\x08\x8e\xab\x40\xa4\x60\x30\xa0\x28\
\x35\x52\x05\x05\xa5\xa8\xcc\xfc\xfa\x43\x35\x75\xab\x3e\x9f\x9b\
\x9f\x4f\x37\xae\xae\xfb\xde\xee\x35\x00\xa9\x08\x8e\x2b\x20\x25\
\x41\x29\xc2\xc2\xa2\x42\xc1\x51\x15\xbc\x42\x41\xf7\x43\xfb\xdf\
\xde\xb9\x73\x67\xf6\xc4\x89\x13\x47\x97\x92\x03\x58\xa1\x82\x88\
\x20\x84\x82\x2b\x08\x06\x07\x8a\x42\x23\x99\x13\x50\x44\xc8\x39\
\xaa\xcc\xe6\x8d\xa4\x77\x76\x76\xfa\x4d\xd3\xac\x18\xee\x12\x6b\
\xad\xa1\x94\x84\x14\x6e\x69\x83\x14\x81\x08\x98\xce\x49\xb8\x82\
\x40\x44\x48\x64\x44\x99\x57\x14\xf8\xd9\xc1\x83\xdb\x5f\x7b\xfd\
\xf5\xb7\x0d\xc3\x00\x11\x95\xbf\x33\xc6\xa0\xb5\x86\x10\x02\x45\
\xc7\x45\x7b\x6b\x13\x06\xc6\xc6\xb1\xa1\xb9\x15\x7d\x83\x1f\x61\
\x74\xa6\x0f\x5c\x99\xf0\x88\x75\x1b\xeb\xd7\x6f\x02\x67\x00\xa9\
\x6b\x33\x88\x45\xa3\x3c\x16\x8d\x5a\x00\x90\xcd\x64\x1a\x6c\xdb\
\xe6\xcb\xbb\x27\x22\xb8\xae\x0b\xc7\x71\x60\x59\x16\x38\x37\xe0\
\x35\x34\x2c\x2a\x60\x36\x27\x90\xd7\x05\xac\xdf\x6b\xa3\x75\x5b\
\x15\x0c\x93\x6c\xad\x08\x52\x96\x66\xc1\x63\xd1\x68\x10\x40\x18\
\x40\x6d\xa4\xb9\xb9\x0e\x8c\x55\x13\x11\xa4\x94\x10\x42\xc0\x71\
\x1c\xb8\xae\x0b\xa5\x4a\x5b\x65\x9a\x26\x38\xe7\x20\x5d\x5a\x51\
\x21\x15\x0c\x6e\xa1\x6a\x4d\x15\x32\xb5\x69\x68\x18\x52\xaa\x52\
\x72\xa5\x4a\x57\xe4\x07\x10\x04\x60\x00\x10\x5a\xeb\x80\x10\x02\
\x52\xca\xca\x87\x75\xdd\x63\xeb\x1f\xff\x02\x23\x99\x24\x02\x32\
\x89\xa2\x13\x87\x8d\x22\x52\x7c\x16\x4a\xd9\x4d\xa7\x07\x9f\x7a\
\x0c\x9c\xd9\x73\xe9\xe4\x82\x09\x60\x16\x80\x17\x40\x23\x00\xa9\
\xb5\xf6\xff\xaf\xd7\xbb\xbc\xd8\x9b\x43\x6f\x62\xec\x9e\xb3\xb8\
\x73\xf3\x5d\x68\xc0\x1a\x0c\xa5\x47\x90\x1b\x29\xa0\xa6\xdd\x89\
\x54\xd7\x56\xbd\xe6\x5b\xf4\x1b\xb9\x2f\xac\x0b\xe6\xf0\xe8\xa8\
\x8a\x45\xa3\xf3\x00\x5a\x00\xf0\x6b\x8a\xca\x43\x5d\xa1\x80\x31\
\xf8\x7c\x3e\xe8\x02\xc3\xd4\x87\x59\x7c\x30\x7e\x12\x6e\x58\x6a\
\xef\x45\x8e\xa6\xd0\x1a\xd8\x6d\xb6\xf6\x05\x2c\x64\x33\x12\xc2\
\x23\xca\x5b\xe4\x02\x28\x00\x68\xe4\x9c\xfb\xbc\x5e\x2f\x84\x10\
\x2b\x54\x24\x12\x09\x10\xd1\xa5\x73\x43\x43\x27\x3c\x53\x06\x6b\
\x33\xef\xd9\xb0\xa9\x66\xe7\xda\xa1\x73\x83\x9e\x2b\x35\x1f\xb4\
\xcd\xdf\x3a\x4d\x4d\x27\x63\x87\x33\x45\xfe\x89\x64\xc2\x96\x49\
\x5a\x30\x01\x60\x78\x74\xb4\x18\x8b\x46\x07\x4d\xd3\x6c\xbb\x3c\
\x39\xd9\xf0\xde\xd1\xa3\x9f\xee\xde\xb3\x67\xc7\xcc\xf4\x34\x93\
\x52\xce\x16\x0a\x85\x81\x64\x32\x79\xaa\xab\xab\xeb\x1f\x83\x67\
\xcf\x7e\x15\x0c\x85\xdc\xc3\x2f\x1e\x41\xf4\xbe\xee\x03\x7b\x3b\
\x7f\xfa\x93\xf3\x23\x57\x93\x9e\x6d\x3a\x12\x6e\x09\x81\x3e\xa3\
\x53\x23\x47\xc4\x1b\xa3\xa7\xfb\x56\xfe\x06\xb6\x6c\xde\xcc\x36\
\x47\x22\xfe\xd5\xf5\xf5\xfc\xe9\x9e\x9e\x5d\xf9\x7c\xbe\x23\x95\
\x4a\xf9\x9f\xee\xe9\x41\x3e\x9f\x47\x2a\x95\xaa\x88\x6f\xe9\x7a\
\xf0\xb1\xb5\xdd\x7f\xfe\xe5\x1d\xbf\xda\xfe\xe4\xaa\x63\x5e\xd1\
\x71\xb9\x41\xdc\xfb\xf2\x9e\x43\xcb\x63\xd8\xf7\x0d\xf3\xff\x59\
\xfb\xd6\xdb\x02\x5a\x16\xdd\xda\x1f\xd5\xfd\x38\x1b\x9e\x7f\xde\
\xe3\xb3\xe0\x9b\x09\xbe\xf0\xf7\x17\x3f\xfd\xcb\x52\xcc\x7f\x01\
\x6c\x42\xab\xe5\xca\x5a\xa1\xde\x00\x00\x00\x00\x49\x45\x4e\x44\
\xae\x42\x60\x82\
\x00\x00\x04\x68\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\
\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\
\x00\x9a\x9c\x18\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x09\x14\
\x11\x0a\x0b\x0b\x9a\x2c\x08\x00\x00\x03\xe8\x49\x44\x41\x54\x48\
\xc7\xa5\x96\x4d\x6f\x1b\x55\x14\x86\xdf\x7b\xaf\x8d\x9d\x38\xae\
\x1d\x37\x6d\xa1\xb1\x49\x54\x22\x25\x81\x96\x0d\x25\x69\x51\x05\
\x54\x50\x55\x61\x93\x4a\xac\x00\x75\x41\x37\x88\x35\x0b\x7e\x41\
\x60\x85\x8a\xfa\x0b\xa8\xc4\x8e\x86\x28\x80\xba\x60\xd3\x48\xac\
\x20\x48\xe4\xab\x6d\x6a\x7b\xc6\x33\xe3\x38\x8e\xed\xd8\xb1\x87\
\xb1\xe3\xb1\x67\xee\x61\x61\xc7\x75\x8a\x10\x71\x7a\xa4\x77\x33\
\xd2\x3d\xef\x39\xe7\xb9\x1f\xc3\x00\xe0\xee\xdd\x79\xdf\xaf\xf7\
\xef\xbf\xf6\x52\x2c\xfa\xc5\xe4\xf8\xf8\x15\xbf\xdf\xd7\x27\x84\
\x60\xb5\xfd\xba\xa7\x56\xb3\xac\xa4\xaa\xae\x98\xe5\xc2\xaa\xd7\
\x2b\x76\x5c\xe9\x36\x89\x24\x5c\xd7\x85\xeb\x4a\x00\x84\x67\x83\
\x73\xce\x2d\xcb\xb2\x16\x17\x17\xbf\x67\x5f\xcd\x7d\xeb\x8f\x46\
\x63\xb7\x47\x46\x63\x37\x19\x17\x01\xd3\xac\x22\x14\x1a\x40\xdd\
\xb6\x51\x2a\x56\x10\x0c\xfa\xc1\x18\x47\x7f\x9f\x0f\x7b\xa5\x22\
\x66\x6f\xcc\xe0\x28\xb1\xb4\xb4\x54\x9e\x99\xf9\xe0\x14\x7f\xf0\
\xe0\x37\xbe\x5b\xaa\x9c\x9b\x78\x75\x32\xe0\x36\x6b\x64\xe8\x09\
\xe8\x5a\x1c\x9a\xfa\x18\xaa\xf2\x08\x3b\x59\x1d\x27\x23\x11\x34\
\x6c\x07\x3f\xfe\xb0\x80\x5a\x6d\xff\x7f\xe5\x38\x2e\x6c\xdb\x66\
\x04\x62\x9e\xf1\x89\xb1\x68\x22\xfe\x64\x28\xa5\xa6\xf1\xee\xd5\
\x2b\x98\x9a\xbe\x88\x44\xd2\xc0\x8b\x67\x4e\xe3\xd4\xe9\x30\x9e\
\x6c\xea\x30\x8c\x2d\xdc\xfe\xe6\x0e\x3e\xfb\xfc\x26\x8e\x1e\x0c\
\x0c\x20\x5e\xdc\x33\x3f\x9d\x9d\xbd\x76\x76\x75\x65\x05\xdb\xdb\
\x15\x66\x55\x2d\x2c\xff\xf9\x17\xd6\x37\x36\xb1\xbb\xfb\x37\x72\
\xf9\x22\xe6\xe7\x7f\xc1\xfb\xd7\xde\xc6\xf5\xeb\xef\xa1\xd7\xe0\
\xa1\x13\xe1\xd1\x91\xd1\x51\xe9\xf5\x7a\x70\xef\xde\x22\xc2\xe1\
\x21\x70\xc6\x60\x59\x55\x94\x4a\x16\xb6\x32\x39\x08\x2e\xf1\xf1\
\x27\x1f\x82\x88\x8e\xae\x36\x7c\xcf\xc9\x48\xf8\xeb\xe5\x3f\x56\
\xae\x5e\x7c\xf3\x02\x04\x17\xd8\xc9\xe6\x31\x39\x39\x8e\x64\x52\
\x01\x63\x40\x7c\xf3\x31\x6e\xdd\xfa\x08\xc1\x60\x10\x52\xd2\x91\
\xaa\x96\x92\x40\xb2\xdd\xc1\xdc\xdc\x97\x6b\x6b\x6b\xbf\x7f\x77\
\xe1\xfc\x04\x46\x46\x86\x51\x28\xec\x22\x7a\xf6\x65\x34\x1b\x4d\
\x2c\x2f\x2f\x63\x7a\xea\x75\x8c\x4f\xbc\x02\x22\xd9\xb3\x00\x80\
\x03\x80\xa2\x24\xe3\x07\xee\xc3\xc3\x43\x48\x2a\x0a\x46\x46\xcf\
\x21\x6d\xa4\x70\xf9\xad\x37\x8e\x95\x9c\xa8\x3d\x22\x00\x30\x0c\
\x23\x55\xaf\xdb\x20\x00\x81\x40\x3f\xaa\x35\x13\xfe\xbe\x20\x06\
\x07\x43\xf0\x7a\xbd\x70\x1c\xa7\x27\xb0\xad\x51\xd2\xd3\x0e\x32\
\x99\x4c\xba\x5c\x2e\xd7\x19\x00\x22\x82\x47\x70\x84\x42\x27\xe0\
\xef\xeb\xeb\x0d\xec\x21\xe1\xa9\x41\x2e\x97\xdb\xd6\x75\x7d\x4b\
\x08\x01\x22\x42\x34\x36\x0c\xcb\xb2\x10\x0e\x9f\x80\x24\x3a\xb6\
\x3a\x06\x44\x54\x53\x14\x25\xc5\x85\x80\x94\x12\xb1\xe8\x19\x8c\
\xc4\x22\x88\x44\x06\x20\xa5\x3c\x96\xa8\xdb\xa0\x05\x5a\x49\x72\
\xc6\x40\x1d\x77\x7a\x8e\xf1\x10\xd0\x0d\x19\x00\x56\x57\x57\xd6\
\x5c\xd7\x85\x24\x02\x97\x84\x03\x4e\x9d\x05\x3d\x42\xee\x1c\xb4\
\x83\x8f\xaa\xaa\xc6\x6b\xb5\x1a\x40\x04\x82\x04\xc9\x76\x35\x52\
\x82\xa4\xec\xc9\x80\xa4\xdb\x81\xdc\x31\xc8\x66\xb3\x86\x69\x9a\
\xf5\xc0\xc0\x80\x5f\x76\xb5\xda\x0d\xec\xc8\x1d\x74\x75\xdd\x61\
\x50\x2a\x95\xf2\xf9\x42\x61\x97\x73\x0e\x92\x04\x40\x42\xd2\x73\
\x72\xe8\x36\x68\x34\x1a\xa6\xa1\xeb\xba\xe0\x1c\x44\x12\x52\xa2\
\x03\xea\xbf\x2e\x63\x06\x06\xc6\x5a\x6a\xbf\x64\x10\x42\xb4\xc5\
\x01\x80\xf1\xee\x45\x0f\x1f\x6e\x3c\xe2\x9c\x77\x2a\x6f\x36\x9b\
\x60\x00\x04\xe7\xff\x12\x63\x00\x18\x81\xb5\x13\xfb\x7c\x2f\x80\
\xa4\xeb\x36\x1b\x8d\x66\xc3\xae\xcb\x52\xb1\x64\x03\x20\x4f\xb7\
\x81\xa2\xa8\x71\x02\x20\xa5\x84\xcf\xd7\xba\x22\x16\x16\x16\x5a\
\xc9\xc0\xc0\x85\x80\x47\x08\x70\xde\xaa\xcb\x95\x12\x76\xbd\x8e\
\x72\xa5\xe2\x38\x8e\x53\xf9\xf9\xa7\xc5\x3b\x5e\xaf\xb7\x56\xad\
\x56\xb7\x38\xe7\x0d\xdb\xb6\xdd\x43\x06\xc9\x64\x62\xb3\xd9\x68\
\x40\x70\x81\xfe\x40\x10\x53\x53\xd3\xb8\x74\xe9\x32\x1c\xd7\xc1\
\xfe\xfe\x3e\xf6\x4a\x7b\xcd\x94\x96\xda\x56\x55\x55\xd3\x75\x2d\
\x65\xe8\x86\xa2\x69\x9a\x92\x4e\x1b\x49\xd3\x34\xd3\x52\xca\xdc\
\xb3\x7f\x01\x87\x0c\x54\x55\x4d\xe4\xf3\x05\xdb\x71\x1d\xca\x66\
\xb3\x3b\x9a\xa6\xe9\x1b\xeb\xeb\x9b\x29\x2d\x95\x30\x0c\x43\xd9\
\xce\x64\xf4\x62\xb1\xb8\x45\x44\x25\x00\x6e\xcf\xcf\x9b\xc7\xe3\
\xf1\x8d\x8d\x8d\xbd\x33\x38\x38\x78\x9e\x73\x1e\xe9\xde\x04\xc7\
\x8d\x7f\x00\xae\x78\x85\xc4\xff\x99\x5a\x29\x00\x00\x00\x00\x49\
\x45\x4e\x44\xae\x42\x60\x82\
\x00\x00\x04\xe7\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\
\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\x01\
\x42\x28\x9b\x78\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x09\x14\
\x11\x0b\x26\x57\x5e\x41\x3c\x00\x00\x04\x67\x49\x44\x41\x54\x48\
\xc7\x95\x54\x6b\x4c\x5b\x65\x18\x7e\xbe\xef\x14\xce\x29\xb4\x05\
\xe4\xde\x71\x2b\x05\xb9\xd5\x18\x75\x9b\x31\xb0\xb8\x39\x27\x2a\
\x31\x2e\x9a\x28\x44\x1c\xd9\x16\x13\xe3\xbf\xe9\x0f\x7e\x6a\xe2\
\x70\x89\xc6\xcc\x99\xa8\x71\xfe\x5a\xcc\x5c\xcc\x86\x66\x1b\xc1\
\xf0\x63\x01\x22\x57\xd1\xcd\x80\x0c\x58\x91\x6b\x81\x16\x68\x4f\
\x4f\xef\xb4\x3d\xfd\xfc\x01\xd4\xd3\x96\x32\xfd\x92\x2f\xdf\x25\
\xe7\x3c\xcf\xfb\x3c\xe7\x39\x2f\x01\x80\x2b\x57\x3a\xf9\xdb\x3f\
\xff\xf4\x78\xb1\xa1\xec\x83\xba\x9a\xda\x67\x04\x81\x57\x73\x1c\
\x47\x02\x5b\x41\x04\x02\x3e\xcb\x8c\x79\xae\x7b\xde\x3c\xdd\xb5\
\x61\x5f\x37\x0f\x0d\xf7\xfb\xb1\xff\x60\x00\x82\x00\x42\x00\x40\
\x3e\xe9\xf8\x42\x28\x2a\x2a\xbe\x58\x5c\x72\xa0\x8d\x53\xa5\xa8\
\x5d\x2e\x2f\x32\x32\x34\x08\x6c\x6d\xc1\x61\x97\xa0\xd5\x0a\x20\
\x84\x42\xe0\x53\xe5\xe9\xfb\x93\x0b\x4f\x1e\x34\xf5\x25\x85\x26\
\x04\xa1\x50\x28\xd0\xde\xde\x7e\x79\x70\x60\x60\x1c\x00\x54\xbd\
\xbd\xbf\xd2\x97\x9a\x9a\xca\x1b\x5f\x7e\x41\x7d\x7f\xe2\x4f\x2c\
\x2d\x9a\xa1\xd3\xa5\xc3\xef\xf7\x61\x73\xd3\x89\xfc\xfc\x6c\x98\
\x4c\x4f\x41\x72\x4a\xdc\xd0\xe0\x88\xb1\xf5\xd4\x1b\x46\x10\x02\
\xa2\x00\x8d\x6e\x01\x84\xc3\x61\x7f\x4e\x76\xf6\x2d\x00\xdb\x04\
\xb5\x75\xd5\x07\xe6\xfe\x9e\xcd\x98\x9f\x5b\xc6\xb3\x47\xeb\x71\
\xf8\xe9\x83\x30\xcf\x2e\xa1\x20\x3f\x0f\xb9\x79\x99\x98\x99\x5e\
\xc4\xd2\x92\x05\x17\x3f\xff\x12\x67\xdf\x69\x81\x2c\xcb\x20\x84\
\x44\x81\x49\x8c\x00\x82\x48\x24\x12\xda\xb1\x09\x00\x40\x25\xb7\
\xaf\xd9\x58\x61\xf8\xec\xea\xf7\xd7\x7e\x5b\x5b\x73\xc1\xe3\xf5\
\x60\xec\xf7\x7b\x98\xf8\x6b\x1a\x9b\x9b\x6e\xd8\xd6\xed\xe8\xec\
\xec\xc2\xb1\xe3\xf5\x68\x7c\xf1\x38\x28\xa5\x20\x94\x82\xc6\x4d\
\x6e\x67\x25\x84\xc4\xb8\x46\xd3\xd4\xe9\x55\x6d\x67\xda\x98\xcb\
\xe3\x12\x6f\xdc\xb8\x89\xcc\xcc\x1c\x50\x42\xe0\xf1\x78\x21\x8a\
\x5e\x58\x56\x6c\xe0\x68\x04\xad\x6f\xbd\x0e\x4a\xc8\xbf\xa0\xca\
\xfd\x0e\x29\x21\x24\x91\x20\x2b\x53\xfb\x69\xd7\xcd\xee\xb6\x54\
\x1e\x23\x47\x8e\x3c\xe1\xb5\xae\xad\xa3\xa6\xa6\x0a\x6e\xb7\x04\
\x80\xe1\xc1\xf4\x14\xce\x9c\x6d\x46\x66\x56\x66\x14\x84\x12\xb2\
\xad\x62\x77\x55\x12\xc5\x13\x74\x74\xb4\x8f\x9f\x7a\xfb\xe4\xab\
\xeb\xd6\x85\xc1\x92\x12\xbd\x6c\xb5\xd9\x50\xa4\x2f\x41\x28\x18\
\xc2\xd8\xd8\x18\x0e\x1d\x32\xa1\xb6\xae\x2a\x0a\x4c\xf7\xb0\x67\
\x5f\x82\x98\x03\xa5\xd0\x17\x66\xc3\x3c\x3b\x8b\xd2\xb2\x72\x38\
\x45\x3b\x1a\x1a\x0e\x27\x54\x1a\x55\xa1\x4c\x93\xe2\x43\x2b\x49\
\x68\x7c\x8e\x75\x3a\x0d\xbc\x3e\x09\x0c\x80\xb1\xa2\x0c\x82\xc0\
\xc7\x02\x2a\x00\x48\xdc\x5d\x7c\xf5\x00\xa0\x8a\xc1\xdf\x79\x29\
\x45\xa5\x42\x46\x86\x0e\x1e\x77\x64\x1b\x3c\x4e\x7a\xb2\xfd\x5e\
\xe7\x04\x05\x84\x10\x94\x94\x16\xc1\xe7\xf7\xa1\xb0\x30\x37\x06\
\x7c\xaf\xea\xf7\x52\xf2\x50\x05\x65\xa5\x7a\x18\x0c\x34\x6a\x8b\
\xb2\xb2\xff\x53\x7d\x02\x81\xb2\x9a\xfd\xc0\x63\x56\xc6\x62\xda\
\x05\x08\x01\x63\x6c\x6f\x8b\x76\x5b\x40\x32\x1b\x94\xcf\x80\x31\
\x38\x86\x87\x30\xff\xed\xd7\xf0\x2e\x2c\x80\xed\xf4\x87\xb0\x24\
\xa5\xbe\x26\x6e\xbe\xdb\x7f\xac\xe1\xf4\x45\x20\x35\x51\xc1\x1e\
\x51\x8b\xb7\x80\x00\xb0\xf5\xde\x81\x74\xfd\x07\xa8\xd5\x69\x58\
\x5c\xb1\x20\xab\xb9\x15\x9c\x46\x03\xfb\xf5\x6b\x42\xfd\x63\xd5\
\x27\x65\xff\x56\x43\xe5\xdc\x5c\x96\x2a\x29\x48\x9c\xd7\xca\x7b\
\xc6\x18\xac\x83\x03\x48\xf5\x3a\x41\x54\x6a\xb0\x55\x0b\xee\x7e\
\x73\x09\x8c\x17\x50\xe4\xd8\x80\x36\x2d\x8b\x06\xd3\x68\x1e\xd5\
\x69\x1b\x55\xf1\x29\x4a\x46\xa2\x3c\x33\xc6\xa0\x6b\x7a\x05\x8e\
\x1f\x45\xf8\xcc\x33\x50\x41\x80\x8e\x13\x11\xe1\x08\xa8\x9c\x02\
\xbb\x7f\x2d\xb2\xb9\xb2\xdc\xef\x58\xdf\xf8\x90\x26\x53\xb0\x5f\
\x32\xc2\xe1\x30\xb8\xfc\x02\x18\xdf\x7b\x1f\x72\xb9\x11\x5e\x69\
\x15\x29\x4b\x36\x08\xab\x22\x02\x21\x89\x2d\x2f\x3d\x18\x99\xff\
\x63\xe2\x5c\xab\xcd\x31\x92\x10\xd3\x87\x0d\xc6\x18\xc2\xe1\x30\
\x42\xc1\x20\x38\xad\x0e\x2c\x4d\x83\x88\x68\x47\x64\x6e\x03\x61\
\xaf\x1f\x29\x86\x6c\xf8\x08\x75\x6e\x04\x42\xce\x84\x14\x29\xe3\
\x95\x4c\x19\x63\x0c\xb2\x2c\x23\xe0\x74\x62\xf2\xbb\xaf\x40\x7f\
\xb9\x85\x1c\xf3\x2a\xe4\x2c\x0d\xb6\x2a\xf4\xc8\x5e\x73\x93\x8a\
\x08\x7d\xde\x58\x53\x76\xfe\x42\x41\x7e\xb9\x4a\x01\x40\x38\x8e\
\x4b\xe1\x38\x2e\xe9\x1f\xbb\xdb\x10\x29\xe5\xb0\x72\xa7\x07\x79\
\x3d\xdd\x28\x99\x5e\xc4\x72\x6e\x2e\x7a\x34\xea\x61\x49\x8e\x88\
\x6f\x16\xe9\x4f\x98\x2c\x6b\xa9\xe9\x95\x86\x16\x54\xea\xf9\x28\
\x81\xd5\x6a\xdd\x18\x1d\x1d\xbd\xca\xf3\xbc\xb0\x5f\xa2\x22\x8c\
\xc1\x1f\xd8\xc2\xd4\xdd\x7b\xbc\xce\x1f\x3c\x6a\x7f\xb4\x32\xb7\
\x5f\x96\xfb\xc6\x2d\xab\xe7\x3c\xa2\x24\xf6\x99\x6a\x3e\x7e\xa4\
\xba\xb2\x85\x50\xea\x0f\x4a\x2e\x8b\xd2\x76\x61\x67\xfe\xd7\xa1\
\xba\x54\x55\xde\x06\x9e\x3f\x31\x69\xb1\x7e\x74\xd9\x21\x8e\x00\
\xc0\x69\xad\xd6\xf0\x9c\xa9\xe6\x02\x75\xb9\x57\xc6\x26\xa7\xce\
\xff\x03\x89\xf8\xb0\x39\x0e\x96\x4d\xd6\x00\x00\x00\x00\x49\x45\
\x4e\x44\xae\x42\x60\x82\
\x00\x00\x04\x38\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\
\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\
\x00\x9a\x9c\x18\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x09\x14\
\x11\x15\x13\xd5\xac\xba\xc0\x00\x00\x03\xb8\x49\x44\x41\x54\x48\
\xc7\xad\x55\x6d\x68\x5b\x55\x18\x7e\xce\xb9\x1f\xb9\x31\xcd\x87\
\xdd\x4c\xd7\xd0\xda\xae\xd3\xa5\xdd\x87\x22\x9b\x86\x4a\xa1\xab\
\x93\x6d\xa8\xd0\xb1\xa9\x08\xb2\x16\x2a\x4c\xa1\xea\x04\x41\xc5\
\xff\xc3\x1f\x22\xce\x81\x54\x7f\x49\xfd\x40\x84\x06\x56\x29\x29\
\xce\x8f\xcd\xfe\x18\x6c\x71\x38\x68\x48\xd3\x2e\x59\x6d\xda\x6d\
\x6d\x9a\x36\xbd\xc9\x4d\xd2\x24\xbd\xf7\xf8\xeb\xc6\x9b\x34\x49\
\x3b\xf0\x85\x03\xef\xfb\xde\x7b\x9f\xe7\x3d\xcf\xfb\x9e\x73\xc9\
\xf0\xb0\xd7\x74\xd9\xe7\xdb\xdf\xd8\xdc\xf4\x7e\x87\xdb\xdd\x25\
\x49\x26\x33\xc7\x71\x64\x3d\x97\x47\x2e\x97\x9d\x8f\xcc\x46\x7f\
\x8e\xdd\x5d\xb8\xd4\xbe\xef\xe0\xf4\x47\x1f\xbf\x9d\xc5\x03\x1a\
\xf9\x76\xd8\x3b\xd4\xd2\xda\x7c\x86\x50\xce\x92\x4c\xa6\x61\xb7\
\xd7\x61\x3d\x97\xc3\xea\x8a\x0c\xab\x55\x02\x21\x14\x26\x51\xc0\
\x54\x30\x80\xa6\x66\xe7\xb6\x81\x7b\x7b\x7b\x09\x00\xf0\xf1\x55\
\xb9\xed\xf8\x0b\xc7\x2c\xc1\xc9\x5b\x2c\x3a\x77\x9b\xd8\x6c\x16\
\x64\xb3\x19\xc4\xe3\x6b\x68\x68\xd8\x81\x03\x07\x0e\x41\x5e\x93\
\x71\xfd\x9a\x1f\x6f\x7d\x37\x04\x42\x48\x11\x44\xd3\xb4\xe2\x52\
\x55\x15\xaa\xaa\x42\x92\x24\x8c\x8f\x8f\x17\xdf\xe1\xef\x44\xc2\
\xf6\xd9\x3b\xf3\x38\xd2\xd3\x85\x67\x3c\x87\x71\x3b\x1c\xc5\xae\
\x06\x27\x1e\x71\x3a\x30\x1d\x9a\x43\x34\xba\x80\xcf\x3f\xbb\x88\
\x77\xde\x1d\x00\xa5\xb4\xa4\x4a\x8e\xe3\x40\x29\x05\x63\x0c\x94\
\x52\x50\x4a\x21\x08\x42\xc9\x3b\x74\xcf\x63\xbb\x3f\xfd\xe9\x47\
\xaf\xef\xde\x3d\x99\x28\x69\x85\xf9\xff\xfa\x1b\x93\x81\x10\xe2\
\xf1\x14\x96\x62\x2b\xf0\x7a\xc7\x70\xec\xc4\x11\x1c\x3f\x71\x14\
\xaa\xaa\x16\x2b\xde\xa4\x35\x21\x9b\x0a\x00\x00\xda\x3f\xd0\xcf\
\xe4\x54\x72\x71\x64\x64\x94\x39\x1c\x3b\x09\x25\x04\x8a\x92\x46\
\x22\x91\xc6\xc2\xdd\x25\xf0\x1c\x43\x5f\xdf\xab\x00\x00\xc6\x18\
\x18\x63\x45\x5f\x07\xd6\xc1\x2b\x12\x8c\x8d\xfa\xfa\x1f\xae\xb7\
\x8e\xcd\xfd\x13\xed\x5e\xbc\x1f\x43\x47\x87\x1b\xa9\x94\x0c\x80\
\x61\x26\x34\x85\xb3\x67\x5f\x87\xcd\x66\x2d\x82\x1b\x97\xbe\x93\
\x5a\x04\x7c\xdf\x99\x93\xbd\x00\xf0\x5c\xf7\xcb\xe4\xe6\xcd\xc0\
\x17\x87\x0f\x3d\x75\x6e\x2a\x18\x82\xdf\xef\x87\xc7\xf3\x04\x3a\
\xf6\xed\x2d\xa9\xb6\xbc\x7a\x4d\xd3\x8a\xc0\x15\x09\x74\xe7\x8f\
\x3f\x47\x98\xab\xc9\x75\x5e\x10\xb8\x73\x2d\xad\x6d\x08\x4d\x05\
\xf0\xd2\x8b\xdd\xd0\x34\xad\x64\x72\x74\x60\x23\x49\x79\x01\x25\
\x12\x19\x83\xef\x7f\xb8\xb8\x3c\x17\x8d\x80\x01\xd8\xdd\xd6\x02\
\x51\xfc\x6f\x22\xca\xe5\xa9\x96\xab\xba\x03\xdd\x24\x93\x04\xbb\
\xdd\x86\xa4\xbc\x51\xfc\x50\x6f\xa4\x91\xcc\x98\xd3\x63\xa3\x5c\
\x55\x09\x6c\x76\x0b\x32\xd9\x2c\x9c\xce\x7a\xa8\xaa\x5a\x02\xa4\
\xfb\x7a\xac\x83\x19\xf3\x5b\x12\x98\x44\x82\xae\xce\x83\x50\x14\
\x65\x53\x43\x8d\x32\xe8\x15\x57\xd2\xbd\x26\x41\xf9\xbc\x57\x6b\
\xa8\x31\x2e\xcf\x6f\x49\x60\x24\xaa\x36\x29\xc6\xf8\xb7\x5b\xbf\
\x63\x74\xf2\x12\xa8\xc6\xe3\xf4\xd3\xa7\xb6\xbf\x83\x5a\xd5\x1b\
\x2d\x47\x73\xb0\xf5\x08\x10\x97\xcc\xc8\x6b\xf9\xea\x63\x5a\x69\
\x24\x2b\x5d\x11\xe5\xbe\x49\x10\x61\x75\x59\x90\xaa\x97\x21\xf0\
\xc2\x83\xf5\xa0\xd2\xa5\xc6\x18\xc3\x95\xe0\x55\x14\x84\x3c\xea\
\x60\x45\x78\x25\x8c\xfc\xde\x1c\x12\x34\x86\xc0\x7c\x00\x6c\x55\
\xc3\xe9\x4f\x5e\x19\x5c\x91\xe3\x09\xbe\x96\xf6\xb5\x9a\xfb\xb5\
\x7f\x08\x33\x3d\x37\xd0\xf9\x78\x27\x9c\x70\x61\x46\x0e\x41\x99\
\xce\x62\x5d\xfc\x15\xd6\xf6\x3a\xec\x6c\x31\x5f\x50\xae\x09\x91\
\x8a\x04\x94\xd2\x8a\xf3\x6f\xf4\xd5\x0c\xc3\xfd\x5f\x92\xf0\x85\
\x2f\x23\xef\x50\x21\xce\x52\xb8\xec\x8d\x30\xbb\x1f\x82\x59\x12\
\x90\x57\xf2\x28\x88\x85\xca\x12\x65\x32\x99\x8d\x4c\x26\x53\x72\
\x80\xca\x09\xde\xf0\x0c\x90\x53\xec\x24\xe1\x78\x8a\xc0\x62\x90\
\x7c\x93\xfd\x8a\xac\x3d\xb9\x8c\xd7\x22\x6f\x32\x7e\x59\x20\x57\
\x62\x57\xdf\xdb\x88\x6b\x95\x25\x9a\x98\x98\xe0\xb7\xfa\xe7\x9a\
\x60\xc2\x2e\x34\x02\x00\xea\xd3\x31\x98\x5a\x09\x1c\x8f\xda\x41\
\x83\x94\xb4\x3b\xdc\xf8\xb0\xff\x83\x2f\xf1\x7f\x99\xe7\xfc\xb3\
\x83\x3b\x46\xa5\xc2\xfe\x79\x67\xe1\xf9\x0b\x47\x07\xb7\x7d\xd0\
\xb6\x6b\xdc\x1a\x97\x70\x05\xf6\x84\xc5\x88\x80\xf5\x58\x21\x61\
\x7c\xf6\x2f\xba\x39\xfa\x1f\x59\xc6\x15\xc2\x00\x00\x00\x00\x49\
\x45\x4e\x44\xae\x42\x60\x82\
\x00\x00\x1f\xdd\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\
\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\
\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\
\x00\x9a\x9c\x18\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x09\x19\
\x0f\x31\x0d\x3a\x99\x30\xa2\x00\x00\x00\x08\x74\x45\x58\x74\x43\
\x6f\x6d\x6d\x65\x6e\x74\x00\xf6\xcc\x96\xbf\x00\x00\x1f\x49\x49\
\x44\x41\x54\x78\xda\xdd\x7b\x69\x78\x5c\xc5\x95\xf6\x7b\xaa\xea\
\xf6\xaa\x6e\xed\x6a\xad\xb6\x6c\x79\x95\x2d\x4b\xb6\xf1\x06\x36\
\xd8\x06\x6f\x30\x01\x0c\x84\x78\x60\x08\x24\x2c\x61\xc9\x24\x84\
\x84\x90\x99\x04\x42\x12\x32\x99\x21\x10\x18\xb6\x61\x4b\x02\x04\
\x08\x5b\xb0\xc1\x36\x78\xc3\xfb\x22\xbc\x80\x77\x63\x2d\xd6\x62\
\xed\xbb\xba\xa5\xee\xbe\x7d\xef\xad\xf3\xfd\x68\x89\xe1\xcb\x97\
\xcc\x17\x0c\x49\x26\x39\xcf\xf3\x3e\x55\xb7\x54\xba\x7d\xcf\x5b\
\xa7\x4e\x9d\x3a\x75\x2f\xe1\x33\xc8\xf7\xfe\xe5\x1e\xfa\xf7\x9f\
\xfd\x98\x87\xaf\x8b\x47\x8f\xcf\xbf\xf2\xca\x2b\xa7\x8e\x1e\x55\
\x3c\x25\x33\x33\x63\x52\x5a\x5a\x5a\x9e\xdb\xe5\xca\x96\x4a\x78\
\x08\xc4\x09\x2b\x41\xa6\x99\xe8\xef\xed\xed\xed\x6e\x6f\xef\xa8\
\x6f\x6a\x6a\x39\xb6\x6f\xff\xfe\xbd\x5b\x37\xaf\xaf\x02\xd0\x8b\
\xbf\x82\xd0\xe7\x70\x8f\xd4\xbb\xef\xbd\xef\x92\x59\x33\xa6\xff\
\x63\x71\xf1\xc8\x8a\xd4\x60\x30\x57\x08\x42\x3c\x16\x47\x2c\x16\
\x43\x3c\x16\x83\x65\x59\x60\xd6\x30\x5c\x2e\x78\x3d\x5e\x78\x3c\
\x1e\x78\x7d\x5e\x38\x9a\xd1\xdb\xdb\x87\xfa\xfa\x86\xba\xbd\xfb\
\xf7\xbf\xb7\x75\xeb\xf6\xd7\x76\xed\xd8\xbc\xf1\x6f\x82\x80\xb3\
\x66\xce\x2d\xbe\xfe\xfa\xeb\xbe\x36\x7d\xda\xd4\x9b\x46\x14\x15\
\x66\x58\x09\x13\x55\x27\x4f\xe2\xc8\xe1\xc3\xa8\xab\x6f\x68\x6d\
\x69\x6e\x6e\x3a\xdd\x74\xba\x3b\x1a\x8d\xf5\x31\xeb\x38\x18\x10\
\x52\x4a\xc3\x50\x29\x99\x99\x99\xe9\xa3\x46\x8d\x2a\x28\x2c\x2c\
\x2c\x2c\x2f\x2f\xf7\x4e\x2c\x2d\x45\x30\x35\x0d\xf5\x0d\x8d\xd8\
\xbd\x7b\xcf\xa1\x6d\xdb\xb6\x3f\xbd\xf2\xcd\xd7\x7e\x09\xc0\xfc\
\xdf\x48\x80\xeb\xfe\x07\x1e\xba\x73\xc9\xe2\x0b\xbe\x5d\x90\x9f\
\x97\xde\x58\x57\x8f\xad\xdb\xb6\x62\xcb\xd6\xad\xb5\x55\x27\xab\
\x36\x9e\x3a\x75\xea\x80\xe5\xd8\x0d\x00\x3a\x00\x44\x01\x24\x00\
\x30\x00\x0d\x40\x02\x70\x01\xf0\x00\x48\x03\x50\x90\x93\x9d\x3d\
\xa9\x64\x74\xc9\xbc\x85\x0b\x16\x94\x2f\x5a\xbc\x28\xad\xbc\xa2\
\x02\xcd\x2d\xad\x58\xb3\x76\xdd\xa1\x37\x57\xae\xfa\xc9\xde\xca\
\x1d\xbf\xc3\xff\x16\xb9\xe2\x8b\xff\x78\xce\xba\x75\x1b\x4f\x76\
\x77\x77\xf3\x87\x07\x3e\xe0\x7b\xbe\xff\x7d\x7b\x5a\x79\xc5\x3b\
\x00\xbe\x62\x00\x93\x00\x14\x01\xc8\x01\x90\x45\x44\x19\x52\xca\
\x54\x00\x29\xbf\x87\x20\x11\xa5\x03\xc8\x1c\xea\x5b\x08\x60\x2c\
\x80\x8b\xd3\xd3\xd2\x1e\xbe\xe1\xfa\xeb\x6b\x37\x6f\xda\xc4\xfd\
\xfd\xfd\xbc\x71\xe3\x7b\x7c\xdd\x57\x6f\x7a\x4d\x18\xfe\x3c\x00\
\xb8\x60\xd1\x85\xf4\x57\x53\xfe\xde\x1f\xfd\xf4\x3b\x1f\x7d\x54\
\x95\xe8\x68\x6b\xe7\x27\x1e\x7d\x8c\xcf\x9e\x3d\xa7\x72\x24\x70\
\xcb\x5e\xe0\xb9\xd5\xc0\x15\x86\x61\x64\x67\x00\x41\x00\xea\x93\
\x96\x75\xcf\xbd\x3f\xa5\x83\x47\xab\x45\xe5\x07\x27\xa8\xa9\xd3\
\xa4\xdf\xb3\x3e\x09\xc0\x4f\x44\x59\x6e\x97\x2b\x1f\x40\x31\x80\
\xc5\x59\x99\x99\x4f\x7e\xef\xae\xbb\x3a\xea\x4f\x9d\xe2\xd3\xa7\
\x9b\xf8\x87\x3f\xba\xef\x74\x6a\x5a\x68\xf6\x5f\x4b\x77\xf1\x9f\
\x8f\x3c\xfe\xd4\xe9\xd3\x4d\x7c\xe4\xf0\x21\xbe\xfe\xda\xeb\xc2\
\x5e\xb7\xe7\xee\xe5\x40\x79\x2b\x70\x3c\x0c\xf0\x20\x10\x63\x20\
\x1f\x00\x59\x96\x9d\xc2\xcc\x79\xcc\x3c\x96\x99\x27\x31\x73\xd9\
\x50\x39\x9e\x99\x4b\x98\xb9\x90\x99\xb3\x99\x39\x85\x99\x5d\xff\
\x4d\x87\x50\x44\xc2\x0f\x20\x6b\xc8\x92\x56\xcc\x9e\x39\x6b\xc3\
\xc6\xf5\xeb\x9d\xfe\xfe\x30\x3f\xf2\xe8\x13\xce\x9c\x73\xe6\x7f\
\xe5\x2f\xae\xfd\xe3\x4f\x3c\xfd\x6a\x6f\x6f\x1f\x6f\xde\xb4\x89\
\x2f\x5a\xba\xac\x56\x02\xcb\x01\xe4\x9c\x06\x3d\x1b\x03\x98\x01\
\x76\x88\x58\x4f\x9b\xf6\x1c\x33\xcf\x61\xe6\x45\xcc\xbc\x48\x6b\
\x3d\x5f\x6b\x7d\xb6\xd6\xfa\x2c\xad\x75\xb9\xd6\xba\x54\x6b\x3d\
\x4e\x6b\x3d\x5a\x6b\x3d\x42\x6b\x9d\xaf\xb5\xce\xd1\x5a\xa7\x31\
\xb3\xf7\x63\x07\xe3\xf2\x49\x22\x0a\xba\x92\x16\x71\x4e\x6e\x28\
\xf4\xcc\x2f\x9f\x79\xa6\x2f\x16\x8b\xf1\xd3\xcf\xfc\x8a\x4b\x27\
\x4d\xbd\xee\x2f\xa6\xfc\x2f\x1e\x7e\xe4\xf9\x8e\xce\x2e\x7e\x67\
\xf5\x1a\x9e\x3e\x75\xea\x16\x00\xd3\x42\x80\x7f\x84\xdf\x1f\x70\
\x00\x76\x00\xd6\x63\xc7\x5a\xbc\x6c\x19\xeb\x6f\x7c\x63\x0b\x33\
\x7f\x41\x6b\xbd\x88\x99\xcf\x63\xe6\x39\x5a\xeb\x19\x5a\xeb\x72\
\x66\x9e\xa4\xb5\x1e\xaf\xb5\x2e\xd1\x5a\x8f\x60\xe6\x7c\xad\x39\
\xc4\xac\xb3\x98\x39\x60\x3b\xda\xf5\xfb\xbf\x2d\xa5\x72\x11\x51\
\x10\xc0\x04\x00\x3f\xf8\xcf\x87\x1e\x6a\x1f\x1c\x1c\xe4\xc7\x1e\
\x7f\x92\x67\xce\x9e\xf7\x15\x00\x38\x6f\xfe\xe2\x3f\x9f\x4f\xf8\
\x97\x7f\xbd\xfb\xc7\xad\xad\x6d\xbc\x79\xd3\x26\x3e\x67\xf6\x9c\
\x5d\x00\xc6\xfb\xfd\xfe\x34\x00\x3e\x06\xae\xd2\xa9\xa9\xcc\x17\
\x5e\xd8\xad\x6f\xbf\xfd\x43\xbd\x7c\x39\xeb\x9b\x6e\x5a\xc7\xcc\
\x8b\xb5\xd6\xf3\x99\xf9\x1c\x66\x9e\xc9\xcc\xd3\xb4\xd6\x93\x99\
\x79\x82\xd6\x7a\x0c\x33\x17\x6b\xd6\x85\xac\x39\x8f\x59\x67\x6a\
\xad\x3d\xc3\xbf\xb7\xb1\x4e\x13\x00\xbc\xf9\x81\x45\x6b\x0e\xc7\
\x09\x00\x0a\x0a\x46\x08\xa5\x54\x2a\x80\x31\x86\x52\xf7\x3e\xf9\
\xf8\xe3\x6d\xb1\x68\x8c\xef\xfd\xd1\x4f\x9d\x60\x5a\x68\xd6\xe7\
\xa1\xa7\xfa\x43\x8d\x97\x7d\xf1\xaa\x8b\x57\xac\xf8\xd2\xdd\x9d\
\xed\xed\xf8\xe9\x7d\x3f\x3d\xb8\xab\x72\xcf\x8d\x00\xea\x07\x07\
\x07\x09\x40\x1c\x33\x67\x2e\xa3\x71\xe3\x80\x94\x94\x18\xfc\xfe\
\x93\x64\xdb\x15\x1c\x8f\xbb\x01\xd8\x44\xe4\x30\xb3\x03\xc0\x21\
\x22\x87\x88\x34\x33\x6b\x02\x1c\x06\x1c\x62\x68\x26\xc4\x4d\xa6\
\x7e\xaf\x20\x0d\x00\x07\xc3\x9a\x1c\x9b\xb0\xa7\x4d\x93\x69\x12\
\x22\xe1\xe4\x73\x34\x37\x37\x6a\x00\xfd\x81\x40\xd0\x8c\x44\xc2\
\xbf\xbd\xf9\xb6\xdb\x10\xca\xcb\xfb\xe6\x2d\x37\xdf\x90\xd6\xd4\
\xdc\xfc\xfa\x3b\xef\xac\x9b\xd5\xd2\x74\xaa\xf5\x33\x39\xb8\x3f\
\xd0\x96\x75\xdd\x97\xff\xe9\x91\xbc\x50\x0e\x1e\x7b\xec\xb1\xbe\
\xf7\xb6\x6e\xb9\x5d\x4a\xd9\x38\xe4\xb5\xe3\xcc\x5c\x86\x85\x0b\
\xcb\x98\x19\x50\xaa\x01\x89\x04\xb1\x6d\x03\x8e\xe3\x00\xb0\x87\
\x95\x1f\x06\x33\x3b\x20\x72\x00\x68\x02\x18\xa0\x01\x41\xd4\x3b\
\xac\x3c\x00\x54\x04\x05\x4f\xcf\x20\x9e\x93\x2b\x78\xfe\x48\xe2\
\x2f\x94\x19\xfc\xc9\x07\x8a\x44\xc2\x71\x97\xa1\x4e\x03\x78\xfb\
\x8e\x3b\xee\x78\xa3\xbb\xb3\xd3\xbe\xe1\xab\xd7\x15\x95\x96\x4e\
\xfc\xc5\x67\xf6\xf0\x1f\x2f\x73\xf7\xfd\x3b\x01\xc0\x0f\x7f\x74\
\xdf\x03\x67\xcf\x99\x35\xf2\xd5\x57\x7e\x8b\x17\x7e\xf3\xc2\x5d\
\x00\x76\x3a\x8e\xc3\x43\xca\x4f\x42\x6b\xeb\x62\xee\xec\x2c\x86\
\x69\x02\xff\xf0\x0f\xaf\x53\x4a\x4a\x27\x6c\x1b\x64\x59\x72\x58\
\x69\x4a\x2a\x9c\xac\x27\x03\x20\x0d\x40\x6b\xa0\x9f\x04\x85\x6b\
\xb4\xa6\x56\xd6\xd4\xc4\x9a\x1a\x58\x53\x1d\x6b\xaa\x76\x34\x1d\
\x37\x35\x1d\x8a\x68\xda\xd7\xad\x69\x47\xb3\xa6\x4d\x35\x9a\x5e\
\xdf\x9b\x5c\x3a\x6f\xf8\xd7\x17\x63\x86\xcb\x73\xbc\xae\xbe\xfe\
\xf5\x1f\xdc\x7d\xf7\x86\x49\x93\x26\x60\xd9\xd2\xc5\x2b\xc6\x4d\
\x2c\x5f\xfe\xf9\x10\xf0\x83\xef\x71\x6e\x41\xf1\x8c\x45\x17\x9c\
\x7f\x6d\x53\x63\x23\x5e\x79\xe5\x95\xdf\xc5\x4d\x73\x95\x94\x2e\
\x2f\x80\xa8\xed\xf0\x28\x00\x73\x78\xed\xda\x52\x1a\x1c\x48\x85\
\x52\x7d\x3c\x73\xe6\x69\xce\xca\x6a\x83\xd6\x40\x3c\xee\x03\xc0\
\x44\xa4\x87\x22\x3f\x66\x66\x66\x22\x26\x80\x34\x51\xb8\x85\x79\
\xb0\x43\x6b\x19\x04\x84\x60\x08\x05\x08\xc5\x10\x12\x10\x8a\x20\
\x0c\x05\xa1\x0c\x08\xc3\x80\x70\x19\x10\x2e\x17\x44\x20\xd5\x25\
\x7e\xb7\xcf\x91\x57\xdd\xf2\x25\x71\xe7\x43\x87\x2c\xc3\x30\x8e\
\xbf\xb9\x72\xe5\xda\xb7\x57\xbd\xd5\x74\xc5\xe5\xcb\x31\xb9\x74\
\xe2\x3d\x00\x8c\xcf\x65\x0a\xdc\x7a\xf3\xd7\xee\x9d\x30\x7e\x1c\
\x7e\xf7\xc6\x1b\x3d\x07\xf6\xec\x79\x50\x19\x29\x31\xc7\x77\x96\
\xd3\xd4\xc3\x01\xc9\xce\x7c\x66\x66\x1c\x38\x30\x9f\x1d\x0d\xe4\
\xe6\xee\xa2\xf4\xf4\x38\x88\x2c\x38\x0e\xb8\xb7\x77\x0a\xbf\xf8\
\x62\xd1\xf0\x68\x83\x48\x13\xc0\x94\x6c\x08\x77\x00\x03\x7e\x22\
\xb9\xb5\x6d\x93\x52\x48\x2a\x2f\x19\xc2\x00\x84\xc1\x10\x06\x41\
\x18\x22\xa9\xb4\xcb\x0d\xe1\xf6\x40\xb8\xbd\x10\x1e\x0f\x0b\x5f\
\x0a\x89\xe6\x7a\x5b\x5c\x7b\xeb\x38\x5a\xf1\xf5\x17\xda\x01\x54\
\xfe\xdb\xbf\xfd\x6c\x9d\xdb\x65\xf0\xd2\xa5\x8b\x2b\xa6\xcd\x38\
\xfb\xda\xcf\x4c\x40\x5e\xfe\xc8\x59\xe7\x9e\x3b\x77\x71\x63\x7d\
\x1d\x36\x6f\xd9\xf2\x7a\x1c\x38\x16\x0c\x4d\x93\xdf\xbd\xff\x37\
\xba\x33\x06\x9b\xb5\xee\x26\x22\x86\x69\x7a\x60\xdb\x80\xdf\xdf\
\xcd\xcc\x1a\x3e\xdf\x20\x31\x03\xb6\xed\xa1\x86\x86\x74\x1e\x12\
\x70\x72\x1a\x33\x73\x6c\x90\x39\xd2\x39\xd0\x60\x28\x66\xb9\x24\
\xf7\x02\x92\x44\x52\x02\x52\x12\x49\x31\x54\x4a\x40\x2a\x90\x34\
\x08\xd2\x30\x48\x1a\x06\xa4\xcb\x20\xe9\x72\x41\xba\xdd\x24\xbd\
\x3e\x25\x8f\x7d\x08\x35\x6f\xc9\x0a\x09\x4f\xc9\xa9\x63\x27\x8e\
\xef\xdf\xb0\x61\xfd\x89\xf3\x17\xce\x47\x51\x61\xe1\xad\x9f\x99\
\x80\x65\x17\x2e\xbd\x75\xec\xd8\x12\xb5\x63\xf3\x96\xde\x3b\xf7\
\xec\x9e\x13\x01\xf5\xd7\xf4\x1c\xba\x7b\x74\xc5\x68\x54\x6e\xad\
\xd3\xcd\x35\xed\xbb\x18\xdc\x45\xf1\x78\x08\xcc\xa0\x69\xd3\x0e\
\x10\x91\xc6\xd5\x57\x1f\x67\x8f\xa7\x1a\xcc\xe0\x81\x01\x0f\x11\
\x69\x22\x62\x10\x31\x13\xd9\x26\x51\x3f\x01\xa2\x24\xe2\x92\x63\
\xd7\x4c\xfc\x72\xee\xaa\x82\xc8\x84\x35\xa5\x5f\x12\x80\xe8\x8e\
\xb5\x4b\x09\x08\xc5\x2c\x14\xff\x77\x69\x10\x0b\xc3\x05\x61\xb8\
\x58\xb8\x5c\x10\xfe\x70\xab\x0c\x84\xdb\x24\x6b\x16\xc1\x20\x44\
\x63\xac\x26\x0a\xe0\xf0\xa3\x8f\x3e\xb6\x37\x23\x3d\x1d\x53\xa7\
\x96\x4f\x1d\x3d\xa6\xf4\xfc\xcf\x42\x40\xc6\xd4\x8a\xf2\xa5\x70\
\x1c\x98\x6f\xbf\xed\xaf\x00\xa6\xb0\xe1\x81\x9f\xf8\x8e\xeb\x9f\
\xbe\xe1\xd6\xfc\xa9\xc5\x72\xb7\x2a\x8c\xc6\xef\xb8\xb3\x1d\xd1\
\x41\x49\x00\xf3\xf2\xe5\xd5\x00\x34\xa4\xd4\x10\x62\x00\xcc\x18\
\xf2\xf6\x60\x80\x89\x99\x75\x7b\xfb\x80\xaa\xa8\x28\x77\xdf\x72\
\x4b\x08\xb9\xb9\x22\xae\x63\x5f\x97\x24\x55\xc4\x8a\xfc\xfa\x87\
\x47\xee\xcd\x08\x79\x43\x42\x12\x49\x31\x04\x39\x0c\x90\x94\x82\
\xa4\x52\x24\x95\x41\x92\xf3\xf3\x04\xe7\xe7\x0a\xb7\x9b\xa4\x6d\
\x6b\x69\x00\xf2\x9c\x45\x5f\x69\xdb\xb7\x7f\xff\xd1\xe3\xc7\x8f\
\x76\xcc\x9a\x35\x13\xa1\x50\xce\xf2\x33\x26\x20\x14\x2a\x58\x5a\
\x51\x5e\x9e\x53\x5d\x5d\x8d\x9c\x43\x47\x5c\x01\xe9\x06\x84\x3a\
\x2c\x72\x43\x50\x5e\xf7\xcf\x96\xb4\xed\x98\x2e\x5c\x10\xf4\xda\
\x6b\x13\xf5\x87\x87\xc0\xb6\x3d\x40\x00\xd8\xb2\x98\x88\x34\x29\
\x15\x21\x66\xa0\xb3\x33\x0b\x00\x63\x60\x40\xf0\x25\x97\x2c\xa0\
\x09\x13\xde\x13\x75\x75\x3b\xe5\x2b\xaf\xd4\xfd\xd7\xd7\x46\x3d\
\x0a\xa0\x4c\x92\x80\x14\x82\x5e\xaa\x7f\xe9\x59\xc1\x2c\x89\x59\
\x0a\x66\x29\x3f\x51\x66\x5d\x76\xd9\xd8\xbc\x05\x0b\xa6\x65\x3e\
\xf8\xef\xe9\x59\x2f\xff\x32\x30\x6d\x62\xf6\x3b\x73\xa7\x66\xd4\
\x2c\x5c\x54\xf4\x63\xb7\x87\x64\xe5\xe6\x5e\xd7\xfd\xcf\xfc\xaa\
\x07\x50\x75\xeb\xd7\x6f\xfc\x68\xd2\xc4\x09\x28\x28\xc8\x5f\x32\
\xa5\x62\x66\xea\x19\x11\x30\xa5\xbc\x7c\x61\x61\x61\x21\xaa\xab\
\x6a\x3a\xf3\xa3\x31\xcd\x5e\xff\xda\x7b\x1f\x6d\x3d\x97\xc6\x8e\
\x69\x81\x6d\xb9\xdd\x7b\xf7\xdc\xba\x30\x0f\x21\xe1\xd8\x93\x74\
\x5f\x2f\x74\x75\xf5\xe9\xa1\xa0\x07\x43\x9e\x3e\x0e\x00\xa8\xa9\
\x59\xc4\xf7\xdf\x3f\x81\x2e\xb8\xe0\x49\x54\x56\x3e\x41\x44\x93\
\x90\x1c\x4f\xec\x19\xe1\x5c\x2b\x20\x20\x21\x07\x04\x49\xd3\x62\
\x67\xc9\xd7\x9f\x5b\xb0\xc8\x37\x6a\xd4\x8f\xfd\x79\x79\xab\x03\
\xf9\xf9\x6f\xa4\x7c\xe1\x0b\x65\x19\x85\x85\xcf\x1a\xdb\xb6\xed\
\x76\x1f\x3a\xbc\x35\xfd\xc1\x07\xb7\x67\xff\xdb\x4f\xfe\x95\xb4\
\x9e\x0b\xa2\x1c\x15\x8b\xde\xbe\xe8\xaa\xf2\x2f\x46\x54\xba\x70\
\x05\xa1\xcb\x66\xfd\x43\xe7\xc1\x43\x47\x1a\xbd\x1e\x37\x46\x8c\
\x18\x51\xc2\xe0\xf1\x67\x42\x40\xea\xb8\x71\x63\xcf\xf2\x79\xdd\
\xa8\xab\xaf\xaf\xb9\xba\xf0\xac\x8a\xbb\xbe\xb5\xe6\x2b\x17\xce\
\xf1\xfb\xe9\xea\xab\x5e\x40\x22\x01\x1c\x3d\xf2\xa5\x0c\x17\x4f\
\x11\x59\x99\x93\x60\x18\xd0\xa6\xb9\x3e\x0a\xd4\xb2\x94\x16\x01\
\xc0\x65\x97\x3d\xcf\x5a\x03\xfd\xfd\x73\xf0\xf2\xcb\xaf\xe8\xce\
\xce\x39\x60\xb6\xe1\xf7\xef\x71\x2a\xca\x57\x20\x10\x58\xb3\xbd\
\xdc\x03\x25\x14\x66\xd5\x53\x22\x27\xa6\x5a\x95\x50\x28\x38\x70\
\xea\x35\x8a\x46\xff\x99\xb4\x9e\x0b\xc7\x39\x5f\xed\xdd\xbb\x9d\
\x2c\xeb\x72\x92\xd2\xcd\x4a\x02\x82\x46\x8a\x58\xf4\x36\x28\x09\
\x18\x46\x1f\x2b\xa5\x3d\x3d\x6d\x4f\x9f\x7d\xff\xf5\x13\x3e\x3a\
\x0a\xd7\xe5\xff\x78\x5b\x67\x67\x4f\xb8\x39\x1c\x09\xf7\x8f\x29\
\x19\x4d\x86\x32\xce\x3a\x13\x02\x8a\x0a\x0a\x0a\x0a\xe2\xf1\x38\
\xfa\xfa\x23\x4d\x65\x63\xa6\x24\x82\xee\xa0\x18\xe1\x8d\xa4\x89\
\x7f\xba\xfa\x23\x06\x0d\x70\xc2\x02\x7e\xfe\xe0\x85\xb2\xb4\x74\
\x24\x79\x7d\x70\x46\x8d\xda\x17\x06\x06\x4c\xa0\x09\x96\xc5\x74\
\xed\xb5\xf5\x18\x39\xf2\x37\x24\x04\x88\x99\x01\x1c\xd0\xe7\x9d\
\x77\xb1\xd5\xd8\x78\xb9\x7e\x6f\xf3\xf6\x59\xbf\x1a\xb3\x55\x92\
\x84\x24\x89\x37\x7e\x11\xcd\x38\xeb\x94\x53\x2c\x49\x02\x4a\x81\
\xdd\xee\x5a\x6b\x4c\xc9\xb7\xd8\xe3\x39\xce\x52\x82\xfd\xfe\xdd\
\xd6\xec\xd9\x97\x47\xbf\xf9\xcd\xa9\xec\x4f\xd9\xca\x52\x82\xa5\
\x44\x64\xf6\xdc\x6b\x1c\x9f\x7f\x07\x0b\x89\xec\xa3\xbb\xbe\x16\
\x1d\x84\x31\xed\xec\x0b\x62\x19\xfe\xb4\x48\x4f\x77\x77\x5f\x5e\
\x6e\x2e\x3c\x1e\xf7\xe4\x33\xd9\x0b\x14\x17\x16\x14\xa4\xc6\x62\
\x51\x98\x96\xee\x2c\x2c\x3f\x2f\xee\x09\x15\x8a\x40\x56\x20\x05\
\x60\xa2\x92\x92\x0d\x7c\xe8\xd0\x65\xbc\x7f\xdf\x15\xd0\x5a\x8a\
\x71\x63\x41\x93\x27\x47\x88\x48\x0d\x02\x31\x18\x46\x8b\x1b\xc8\
\xa4\xd7\x5f\x7f\x0c\xc0\x7f\x6a\x20\x6a\x11\x85\x87\x13\x1e\x14\
\x8b\x51\x5f\xa2\x6f\x89\x24\x89\xa2\x6e\x0e\x7b\xb5\x0a\x8e\x6b\
\x23\xde\x3a\x45\xd2\xdb\xe7\xf8\x9a\xbe\xff\xf0\xd1\xf9\x51\x3b\
\x4a\xfe\x95\x6b\x37\xa0\xaf\x4f\x99\x37\xde\xd8\xe3\x30\xc3\x22\
\x82\x9d\x99\x79\xbb\xf7\x97\xbf\x5c\x61\x8e\x2e\xd9\xdb\xf0\xf4\
\x2b\x07\x8b\xae\xb9\xf2\x51\xff\xde\x3d\xe7\xa9\xd8\xc0\xb5\x97\
\x7c\x73\x66\x73\xfc\xf2\x2b\x56\xde\xd6\xdb\xf9\xb5\xc1\x8f\x4e\
\x7a\xb2\x46\x95\xc0\xe3\xf1\x8c\x06\x80\x0b\x16\x5f\x44\x9b\x36\
\xac\xe5\x3f\xc9\x02\x48\xa8\x5c\xaf\xcf\x6b\x24\x12\x96\x36\x5c\
\xbe\x78\x7e\xd1\x58\xf8\xfc\x5e\xe5\x75\xc1\x07\x40\xf3\x98\xb1\
\x27\x88\x19\x94\x48\x04\x11\x8f\x07\xc8\xe3\xd1\xae\x59\xb3\x72\
\xfd\xcc\x7e\x62\x56\x09\xc0\x89\x03\xdd\x0c\x58\x88\xc5\x94\x0e\
\x87\x35\x62\x31\x83\x92\xe4\x2a\x78\x3c\x52\x90\x48\x57\x24\x91\
\x55\x52\x71\x97\xb3\x62\xc5\x92\xc5\xd9\x0b\xae\x54\x24\x39\xec\
\x17\x85\x2f\xd6\xbf\x1c\xf2\x29\x9f\x74\xae\xb8\x22\x6a\xdf\x78\
\x63\x18\xb1\x98\x01\x22\x25\x98\x55\xec\xe6\x9b\xfb\x5b\xf7\xed\
\x7d\xaa\xed\xc5\x57\x3e\x14\xf1\x98\x51\xfd\xd4\x6b\x07\x22\xa5\
\xe5\x5f\x67\x69\xc0\xdb\xdf\xf9\xbd\xdc\xe7\x1e\xdb\x97\xe7\xf6\
\x14\x39\x91\x08\x82\xc1\x00\x5c\x86\x91\x05\x00\x7f\xaa\xf2\x00\
\x20\xfc\xfe\x94\x0c\xb7\xc7\x0d\xcb\x4a\x58\xfe\x94\x54\x27\x27\
\x54\x40\x6e\x97\x52\x00\xdc\x00\x69\x9c\x3b\xef\x24\xbb\xdd\x6d\
\xd0\x5a\x42\x6b\x62\xad\x41\x86\xe1\x4a\x01\x0a\xfc\x44\x01\x10\
\x49\x87\x19\x71\xa2\xb0\xe3\xf3\x0d\x38\xa9\xa9\x0e\x79\x3c\x12\
\x80\x24\x40\x82\x48\x0a\x08\x8f\x24\x89\x14\x23\x25\xa1\x7f\xfe\
\xf3\xda\x13\xd7\x5c\x70\x5a\x92\x24\x09\x09\x43\x18\x12\x43\xfd\
\x00\x48\xf2\x7a\xc5\xf0\x35\x01\x92\x40\x12\x04\x09\x9f\x57\x10\
\x41\x1e\x7e\x7a\xcd\xba\x78\x76\xde\x33\x90\x52\x68\x12\x50\xc5\
\xa3\x3f\x88\xe7\xe6\x55\x19\x86\x01\xa5\x54\xfa\x1f\xdb\xe1\xfe\
\x51\x02\xbc\x1e\xaf\x4f\x90\x80\x20\x61\x07\x52\xd3\xd8\xe7\xf7\
\x2b\xa9\x48\x32\x43\x00\xac\x29\x3f\x3f\x86\x50\xe8\x03\x00\x20\
\x22\xc0\x30\xfa\xb9\xa0\xa0\x17\x80\x70\x33\x67\xf9\x92\x49\x4e\
\xa5\x01\x99\x60\xb6\x98\x59\x82\x48\x31\xb3\x02\xb3\xba\xeb\xd0\
\x0f\xa6\x3b\xec\x4c\x36\x84\x91\x28\x0b\x96\xb6\x82\x59\x5d\x3d\
\xe2\xca\x3e\x45\x0a\x52\x28\x3c\x55\xfb\xec\xb7\x31\xd4\xf7\xff\
\x01\x92\xa0\xa1\x92\x29\x59\xee\x78\x6e\xd7\x83\x6d\x65\xe7\xdd\
\xd4\xba\x70\xf9\xa5\x9d\xb7\x7d\xf7\x79\x77\x30\x35\x9e\x8c\x43\
\x20\xfe\xc8\x0e\xf7\x8f\x13\x10\x37\xe3\xda\xb2\x2c\x28\xc3\x50\
\x01\xbf\xdf\xe7\xf3\xba\xdd\x04\x92\x5a\x83\x00\xd2\xcc\xcc\x08\
\x85\x1a\x58\xeb\x64\x02\xcc\xe5\x6a\xc7\x9c\x39\x5d\x4c\x04\x10\
\x91\x02\x82\x5e\x20\x4d\x02\x2e\x10\x19\x20\x52\x00\x14\x11\x29\
\x26\x52\x8d\xd1\xa6\xc9\x52\x28\xa4\xbb\xd2\x77\x7d\x67\xc2\xed\
\x8d\x18\x6a\xcf\xf3\xe6\xbd\xaa\x84\x42\xbf\x15\xbe\xf2\x81\x93\
\x0f\x97\x82\x48\x0d\xff\xed\xe3\x3a\xfe\x1b\x60\x52\xc4\xa4\x78\
\x08\x3b\xbe\xfd\xec\xee\xa3\xdf\x7a\xa8\x26\x3d\xdd\xef\x0e\x04\
\x03\x86\xed\x38\x70\x6c\x3d\x14\x87\x7d\x0a\x02\x22\x91\xb0\x19\
\x8d\x46\xe1\x76\xbb\x95\xcf\xef\x4d\xf1\xb8\x84\x1f\x80\xd2\x8c\
\x8f\x77\x75\x58\xb6\x6c\xef\xc7\xff\xe1\xf5\xf6\x12\x11\xc0\x4c\
\x00\x88\x93\x94\xbb\xdd\x40\x0a\x31\x4b\x06\x04\x03\x32\xa1\x13\
\x0a\x80\xec\xb7\xc2\xe3\x25\x49\xb8\x85\x3b\x3a\x94\x05\x96\x04\
\xc8\x2f\x16\x2e\x7f\x49\x92\xd4\x12\x12\x9b\xda\x37\xdf\x00\x40\
\x0e\xd8\x51\x63\xb8\x0f\x0f\x01\x0c\xc9\x0c\xa9\x87\xc0\x1a\x52\
\x6b\x48\xcd\x10\x92\xe0\xf7\x79\xa5\x37\x18\x08\x7a\x07\x06\x06\
\x61\xd9\x76\x04\x80\xf5\xe9\x96\x41\x76\x22\x9d\x1d\x9d\x09\xb7\
\xdb\x2d\x03\x7e\x4f\xba\xc7\x48\x64\x82\x21\x5b\xa2\x5d\xb2\x35\
\xd6\xe6\x21\xc7\x26\x9a\x32\xa5\x17\x86\xd1\xc7\x00\xa0\xb5\x4a\
\xce\x06\xa2\xe4\x66\x97\x09\xcc\x82\x01\xba\xe7\xe8\x4f\xce\xb9\
\xff\xc4\x03\xd3\x19\x50\x86\x70\x49\x02\x54\x9f\xd5\xbf\x58\x91\
\x44\x40\xa5\xf4\xf2\xb0\x63\x04\xd4\x0d\x25\x5f\x69\x2e\xf2\x16\
\xbe\xa6\x84\x44\xd8\x0a\x5f\xf8\x6e\xcb\xfa\x3c\xbf\xf2\x89\x84\
\xb6\x0c\x06\x94\x06\xd4\xc7\xa5\x4e\x42\x6b\x28\xcd\xc9\xd2\xb1\
\x21\x7c\x6e\x64\xb8\x15\x05\x52\xd3\x82\xc1\xae\xae\x2e\x24\x12\
\x66\xd7\x99\xc4\x01\x7d\xcd\xcd\x2d\x51\xb7\xcb\x0d\xbf\xcf\x9d\
\xe9\xf7\x20\x77\xad\x73\x5f\xf9\x2d\x87\x6f\xfe\xd5\x8f\x4f\xdc\
\xff\x6d\x28\x83\x99\x19\x34\x66\xcc\x46\x10\x01\x25\x25\x7b\x99\
\x99\x38\x69\x01\x82\x89\xc4\xc3\xd5\x4f\x4e\xff\xf2\xde\x9b\x6f\
\x7e\xaf\x63\xeb\x13\x6b\x5a\xde\xfd\xf5\x4d\xfb\x6e\xbb\x86\x87\
\x14\x20\x20\x4d\x91\xc2\xe4\xd4\xd2\x03\x34\xd4\x36\x8c\x37\xe7\
\xbe\xf2\x50\x9a\x2b\xfd\x80\x24\x85\x87\xab\x1e\x79\xec\xb1\xaa\
\x27\xca\xa5\x30\x24\x03\x2a\xe1\x58\x86\x06\x14\x0f\x29\xac\x9d\
\x21\xc5\x1d\x28\xc7\x86\x32\x13\x40\xc0\x87\x5c\xb7\x81\xa0\xdf\
\xe7\x0b\xb6\x77\x74\xc2\xb2\xac\x16\x00\x58\xbc\xf4\x62\xfa\x34\
\x71\x40\x77\x55\x75\x55\xa7\xed\x38\x69\xc1\x80\x37\xcf\x92\x5d\
\xa5\xb5\xb4\xe5\xf6\x80\xe9\x51\xdd\x89\x9e\x9c\x98\x13\x93\xef\
\xb4\x6e\x1a\xdb\x7c\x63\xc9\xa9\x11\xfe\xf9\xdf\xbc\x24\x6f\x59\
\x8d\xd6\x8e\x14\x52\x61\x73\xc7\xf6\x9c\x87\xab\x9f\xf8\x69\xd4\
\x8e\x16\xc5\xb5\x05\x83\x92\x79\x89\xaa\x48\xcd\xed\x0d\x03\x8d\
\xab\x7b\x12\x3d\x2e\x45\x49\xa7\x7c\xef\xa4\xef\xef\x1d\xb4\x63\
\x2e\xaf\xf4\x68\x1e\x0a\x12\x18\xc0\xda\x79\x2b\xbf\xb1\x6c\xdb\
\x25\xaf\x98\xda\x1c\xb3\xaa\xe9\xad\x5f\x55\x76\xbf\xbf\xea\xca\
\xe2\xab\x7e\x33\x3f\x77\x71\x9b\x05\xc6\xb3\x55\x8f\x97\x1b\xda\
\x1f\xbf\x28\xf3\xba\x93\xb6\x0d\x24\x2c\x8b\x12\x96\xa1\x05\xc1\
\x9d\x96\x82\x22\xb7\xa4\x4c\x29\x65\x6a\x4d\x4d\x2d\x00\x1c\x06\
\x80\x0d\xeb\xde\xe6\x4f\x43\x40\x4f\x5d\x5d\x5d\x6b\x67\x77\xcf\
\xd8\xf4\xd4\x40\xc6\x56\xb3\xf2\x8b\x19\xae\x0c\x15\xb6\x22\x30\
\x1d\x1b\x37\x1f\xb8\xe3\xc1\x88\x1d\x29\xd2\xac\xa1\xa1\xd1\x15\
\xef\xbc\xe7\x86\x51\x5f\x3e\xd0\x14\x6d\xf6\x3f\x5a\xfd\xd4\xcf\
\x12\x3a\x51\x20\x85\x32\x15\x98\x97\xe5\x2e\xba\x7b\x7d\xeb\x86\
\xff\x00\x58\xac\x69\x7b\x77\xb2\x0b\x86\xad\x84\x01\x49\x22\xaa\
\x89\x0c\x45\x8a\x40\xc4\x60\x86\x4e\xfa\x11\x30\x11\x2a\xd2\xcb\
\x5f\x39\xd0\xfb\xe1\x9d\x0c\x46\xa7\xd9\x7d\xe9\x93\x55\x4f\xcc\
\x7f\xbd\xf1\xf5\x5d\x83\x76\x34\xd4\x67\x86\xcf\xd2\x9a\x11\x8d\
\x39\xff\xbc\x34\x78\xfd\x11\x76\x5c\xe8\x8c\x76\xd1\xa0\xaf\xb1\
\x28\xc5\x35\x2d\xd7\xad\x8c\xcc\x48\x24\xea\x6b\x3c\x7d\x1a\x86\
\x61\x1c\x3c\x93\x48\xb0\xad\xb6\xb6\xe6\xf8\x91\x23\x47\xcf\x9d\
\x3f\x6f\x4e\x5a\x7a\x47\x53\xfa\xc4\xd4\x71\x83\x75\xed\xe6\x33\
\x83\x66\xcb\xed\x2e\x11\x2d\x22\x12\xf0\x49\x6f\x73\xd4\x89\x16\
\xbc\xdd\xb2\xfe\x5e\x25\xdc\xdf\xdf\xd8\xb1\x65\x85\xc5\x76\x01\
\x91\xc4\x35\x23\x56\x7c\xe7\xe2\x11\x97\x9f\x20\x00\x5b\xda\xb7\
\xc6\x35\x3b\xbe\x83\xbd\x87\xcf\x4f\x35\x82\xad\x4a\x48\x10\xc8\
\x85\xa4\xd9\x93\x1e\xf2\xd2\xc3\x43\x94\xd0\x36\xfd\x64\xca\x8f\
\xd7\x3b\x44\xeb\x6f\xd9\x7b\xcb\x1d\xcd\xf1\x96\x0b\x19\x48\xeb\
\x34\x3b\x2f\x62\x06\x04\x24\x88\x80\xed\x5d\xef\xfc\x07\xc7\x7d\
\xdf\xdd\xd6\xbb\xfa\x8e\xde\x78\xff\xe8\x69\xe9\x53\x74\xa7\x93\
\x71\x30\xc7\x5f\xe8\x3f\x70\xe0\x30\xda\xda\xda\x9b\x53\xd3\x52\
\x0f\x9e\x89\x0f\x18\x18\x1c\x08\x9f\x78\x7f\xef\x3e\xd3\xe3\xf3\
\x51\x91\x4c\xef\xbf\xb6\xf8\x9a\x03\xd7\xf8\x1e\x58\xe5\xb1\xf3\
\xdf\x65\x22\xcc\xcb\x39\xf7\xa1\x67\x67\x3d\xfd\x8d\xa0\x91\x76\
\x1c\x82\xc4\x1b\xcd\x6f\xff\xac\x3f\x11\x2e\x67\x22\x4c\x49\x2d\
\x7b\x7e\x79\xd1\x65\xa7\x4c\x6d\x1b\x9a\x59\x65\xb9\xb3\x0e\x4a\
\xa1\xe0\x95\x5e\x33\x62\x0f\x14\x4b\x52\x08\xa8\xc0\x69\xcd\xac\
\x78\x28\x3e\x18\x2e\x35\x91\x12\x24\xa5\xc9\x8e\xa1\x99\xd5\x23\
\x33\xff\xeb\x91\x8b\xf2\x2f\xfe\x97\x5c\x6f\xfe\xb6\x7c\x6f\xd1\
\x86\x31\x29\xa5\x2f\xce\xcb\x5a\x72\xaf\x9b\x7c\x1d\x00\xf9\xb6\
\xf5\xbf\xf9\xb0\xe5\x58\xa3\x05\x04\x66\x64\x4d\x15\x2d\x66\xed\
\x34\x13\xf6\xc8\xfd\x07\x3e\x40\x2c\x16\xff\x60\xf5\xaa\x37\x3a\
\x3e\xb5\x05\xe4\xe5\x17\x86\x5b\x5b\x9a\x8e\xee\xde\xbd\xfb\x44\
\x43\x43\x53\x45\x49\x66\x21\x79\x52\xf2\xfd\xbe\x12\x4c\x49\x7c\
\xf4\xc0\xc3\x17\xcd\xe0\x5f\x65\xa6\x93\x88\x33\x8b\x8b\x0a\x2e\
\x79\x6e\x55\xf3\xca\x5b\x23\x56\xa4\xd8\xab\xbc\xad\xd3\x32\xa6\
\xfe\xf6\xb6\xb1\xb7\x6e\xb7\x99\x95\x33\x74\x44\x36\xd2\x5f\x7c\
\xac\xdf\xea\x3f\xbb\x2d\xde\x7e\x3e\x83\xa5\x41\x0a\x97\x15\x2e\
\x7f\x9c\x01\x43\x92\x44\x72\xa5\xe6\xe4\x79\x39\x27\xd7\x5a\x22\
\x39\x9c\x43\xc7\xd5\x63\xbe\x7a\xf4\x4a\xfe\xea\xd1\x84\x05\x98\
\x26\x10\x8f\x01\xf5\xfd\x8d\xbb\x1a\x13\x75\xcb\xa1\x49\x69\x47\
\xf7\x5c\x9b\x75\xd7\xcb\x17\x15\x95\x7c\xc1\xa2\xae\x91\xe1\xae\
\xb0\x7b\xdf\xfe\xfd\x70\xb4\xf3\xdb\x33\x49\x88\xc8\x81\x48\x98\
\x01\xb8\x62\xd1\xf8\x88\xc2\xa2\x11\xd3\xe7\x9e\x73\xb6\x3b\x1e\
\xeb\xb7\xd3\x32\x03\xde\x93\x0d\xd6\xe1\xa8\xc9\x94\x97\x2d\x0c\
\xd3\xd1\x62\x54\x60\x6c\xdf\xd2\xc2\x8b\x36\x9a\xda\xac\xb9\x61\
\xec\xd7\x5e\x9a\x9b\x73\x5e\x9d\xa5\x6d\xc1\x24\x05\x0b\x41\x00\
\x44\x73\xf4\xb4\xaf\x76\xa0\x76\x3e\x83\xbd\x00\x3c\x02\x02\xe3\
\x53\x27\x6c\x2f\x4d\x2d\xed\xd6\x44\x82\x01\xa1\x89\x84\x1e\x5a\
\x41\x34\x20\x1c\x90\x70\x08\xc2\x21\x12\x16\x20\xe2\xb6\x96\x66\
\x42\x4b\xc7\x92\x22\x1e\x87\x28\x73\x2d\x3c\x7c\xa0\x7f\xc7\xb8\
\x98\x15\x0f\x8d\xd3\x17\x3c\x78\x53\xd9\xf2\x09\xa5\xa1\x14\x4f\
\xd0\x08\x04\xb6\xbe\xb7\xdd\xf5\xde\xe6\xad\x9d\x83\x83\x83\x5f\
\x6f\x6f\x6d\x4e\x7c\x6a\x02\x86\xcf\x1e\x4c\x33\x96\x96\x48\xd8\
\xe5\xe7\x9e\x77\x6e\xba\xc7\x25\x8d\xb4\xd4\x40\x86\xcb\x2d\xa3\
\x87\x4e\x8a\xea\x40\x0a\x79\x7c\x1e\xa2\x84\x4d\xc2\x61\xd0\x84\
\xd4\xb2\x76\x97\xf2\x69\x0d\x08\x16\x92\x34\x41\x38\x60\x01\x86\
\xcc\xf2\xe4\x0c\xbc\xdf\xb5\x67\xb6\x66\x0e\x48\x92\x10\x24\x31\
\x21\x75\xe2\x8e\x71\xc1\x09\xdd\xc3\xc1\x8d\x03\x48\x0d\x48\x4d\
\x90\xf6\xd0\xb5\x4d\x90\x36\x43\x5a\x0e\xa4\x93\x20\x61\x25\x84\
\x30\xe3\x90\xf1\x18\x64\x3c\x4e\x62\x32\x2e\xdc\x35\x66\xe0\xb2\
\x17\x96\x8c\x9e\x36\xb1\x74\x04\x9d\xef\x33\xc8\x48\x44\xad\xcc\
\x5f\x3c\xf4\x08\xf5\xf5\xf7\x3f\xfc\xfe\x9e\xed\xeb\x96\x5e\x78\
\x09\xd5\x54\x9f\x3c\xa3\x9c\x60\x02\xc0\xb1\x43\x87\x0f\x6d\x59\
\xb5\x6a\x35\x02\xc1\x34\x5f\x22\xd2\xed\x19\x5b\x48\x97\x17\xe6\
\xd2\xc8\x63\xd5\xb0\xfa\xc2\x90\x31\x13\x32\x16\x83\x8a\xc5\x49\
\x9a\x26\x94\x69\x41\x99\x9a\x55\x82\x59\x59\x0c\x65\x11\x54\xa6\
\x37\x64\x05\x5c\x69\xad\x62\x28\xa2\xf5\x1b\x81\xd6\x73\x73\xe6\
\xd7\x39\x80\x72\x00\x65\x7f\xa2\xb4\x01\x65\xd3\x10\x18\x2a\x61\
\x43\x25\x4c\x28\x33\x31\x04\x13\xca\x8c\x43\x99\x31\x18\x7d\x61\
\x5b\xfb\xbd\xce\xc8\x31\x05\x74\x79\x7a\xf2\x2c\x39\x7b\xcd\xda\
\x77\x44\x5d\x7d\x43\x6f\x20\x25\xe5\x19\x00\x58\xf7\xce\x5b\x7c\
\x46\x29\x31\x00\x50\x86\xaa\xea\xef\xed\xda\xb4\x6a\xd5\x5b\xb5\
\x1f\x7c\x70\x10\x42\xc8\x74\x2f\xe2\xf9\x33\x27\xe2\xbb\x60\x4e\
\x39\x56\x4d\x3c\x30\x00\x39\x18\x25\x39\x18\x65\x35\x18\x83\x8a\
\xc6\xa0\x62\x71\xa8\xb8\x09\x95\xb0\xe1\x4a\x30\xb9\x12\x4c\x2e\
\xb7\xf2\x27\x94\x74\x41\x09\x17\x52\x5d\x19\x6d\x3e\x57\x3a\x2c\
\x90\xcb\x02\xb9\x12\x20\x57\x82\xc8\x65\xd1\x50\x9d\xc9\x65\x3a\
\xe4\x32\xe3\x49\xc4\x87\x10\x8b\x92\x2b\x16\x23\x57\x2c\x4a\x46\
\x38\x4c\x04\x47\xa5\x4c\x9b\xa0\xee\x1c\x91\xc5\xb9\x00\xd2\xeb\
\xeb\x1b\x7c\xaf\xbf\xf1\x26\x62\xf1\xd8\xcf\xd7\xac\x7e\xb3\xe1\
\x4c\xd3\xe2\xc3\x53\x00\x5a\x6b\x13\x80\x1d\x09\x47\x02\xd1\x58\
\x62\xe6\xc2\x85\x0b\x04\x3b\x36\x32\xd3\xbd\xe9\x6e\x1f\x8d\x38\
\x52\xcd\x3b\x1c\x87\x94\xc7\xc5\xca\x76\x88\x1c\x0d\xa1\x87\x60\
\x6b\x12\xcc\x48\x82\x20\xaa\xc3\xc7\xf3\xba\xcc\xae\x89\x24\x08\
\x0b\xf2\x96\xbc\x50\x14\x18\xd5\x9b\x9c\xe3\x10\x9a\x20\x1c\x86\
\xb0\x19\xc2\xd6\x10\xb6\x05\x61\x25\x92\x48\x58\x10\x89\x38\x44\
\xc2\x84\x88\xc7\x48\xc4\xa3\x90\x91\x08\xd0\xdd\x8b\xc4\xb4\x52\
\xdc\x31\x69\x04\x4f\xf4\x2a\x1a\x7e\x4f\x89\x8e\x1d\x3d\x56\xfb\
\xfe\x9e\xed\x5f\x06\x60\x7f\x66\x02\x86\xa4\x2b\x91\x88\xcb\x8e\
\x8e\x8e\x54\x12\x72\xfc\x9c\xb3\xe7\x80\x2d\x93\x72\xb2\x3c\x79\
\x7e\x1f\x15\xd5\x34\x62\x7f\xcc\x24\x56\x12\xd2\x71\x88\xec\x21\
\x68\x0d\x62\x4d\xe4\x68\x22\xad\x89\xd2\x5d\xd9\x9d\x5d\x66\x87\
\x9c\x99\x39\x6f\xe5\xdc\x9c\x45\x55\x09\xad\x85\x66\x41\xb6\x4e\
\xf6\xb7\xec\x21\x24\x92\x48\x58\x44\x71\x93\x28\x11\x27\x8a\xc7\
\x89\x62\x51\xa2\xe8\x20\x28\x12\x81\x13\x1d\x04\x57\x8c\xc7\x3f\
\x4f\x19\x85\x19\xa9\x6e\x02\x00\xf1\xfc\x0b\x2f\xd1\xca\x95\x6f\
\x41\x10\x6e\x6a\x6c\xac\x3f\xf2\x59\xce\x06\xe5\x1f\x68\xeb\x1e\
\x18\x88\x38\xbd\x7d\xe1\x89\x1e\x8f\x2f\xeb\xac\x19\xd3\x61\xc7\
\xa3\x08\x65\xba\x0b\xbd\x7e\x4c\xa8\x3d\xcd\xfb\x23\x83\x14\x95\
\x92\x95\xe3\x10\x39\x0e\x27\x77\xca\x3a\x79\xfa\xa9\x35\xe0\x17\
\x69\xf1\x8a\xd4\xd9\x47\x0b\xbd\xa3\xbb\x12\xb6\x43\x70\x64\xf2\
\x00\xd9\x06\x6c\x2b\x09\x2b\x91\x44\x22\x01\x98\xf1\xe4\x92\x67\
\xc6\x81\x78\x8c\x28\x16\x65\xee\xed\xa3\x78\x34\x0a\xdf\xd4\x09\
\xf8\x4e\xd9\x28\xae\xc8\xf0\x26\xc3\xfb\x77\xd7\x6d\xe0\x27\x9f\
\x7a\x86\x72\xb2\x32\x8e\xac\x7b\x77\xcd\x37\x3e\xeb\xe9\xf0\x1f\
\x22\x20\x06\xa0\xab\xa3\xbd\x2d\xd1\xd2\xd6\x31\x31\x25\x25\x90\
\x5a\x36\xb9\x94\x61\x27\x28\x94\xe9\xca\x4a\x4b\xa5\x05\x03\x51\
\x3e\xd5\xd4\x46\x8d\xcc\x70\x69\x4d\xe4\x38\x04\xc7\x21\xb2\xed\
\xe4\x08\x3b\xf6\x50\xdd\x22\xd2\xb6\xc0\x70\xdd\x4a\x10\x25\x4c\
\xa2\x44\x82\xc8\x34\x93\xf5\x78\x8c\xc8\x8c\x13\xc5\x62\x84\x78\
\x94\x68\x70\x00\xdc\xd9\x85\x48\x9a\x1f\x65\xd3\x26\xd2\x3d\x65\
\xc5\xc8\x1f\x1a\x79\xde\xbc\x65\x1b\x1e\x7f\xfc\xbf\x30\x73\xd6\
\x1c\x2a\xcc\xcb\x0a\x5d\x76\xe9\xc5\xe3\xde\x79\x77\xfd\x9b\x9f\
\x37\x01\x00\x10\x01\x38\xda\xd5\xd9\x39\xd8\xd6\xd1\x39\x45\x28\
\xc3\x57\x51\x51\x0e\xc9\x9a\xb3\x53\xa5\x2b\x3d\x8d\xe6\x29\x83\
\x33\xda\x3a\xe9\x78\x6f\x18\x03\x9a\x99\x98\x49\x68\x1b\xa4\x1d\
\xc0\xb2\x19\x8e\x43\xb0\x2d\x86\x6d\x11\x2c\x8b\x61\x25\x92\x65\
\x22\x41\x48\x98\x8c\x84\x49\x88\x9b\x0c\x33\x4e\x88\x47\x99\x07\
\x06\xc8\xea\xea\xe1\x98\x19\x27\x4f\x49\x21\xae\x2d\x1f\x4b\xd7\
\x8e\xcf\x67\x97\x57\x11\x03\xa0\x75\xeb\x37\xd2\xf3\xcf\xbf\x80\
\xe9\xd3\xcb\x51\x5e\x36\x09\xc1\xa0\x9f\x8f\x1e\x3d\x36\x65\xe5\
\x9b\xaf\x8f\x7a\xe0\xc1\x87\x56\x7d\xde\x04\x00\x40\xbb\xd6\x4e\
\x67\x7b\x5b\x6b\xb8\xbe\xa1\x69\x5c\x24\x32\x10\x2c\x2d\x9d\x00\
\xbf\xc7\x83\x80\xdb\xa1\x50\x86\x1c\x9d\x99\xce\x8b\x94\x02\x22\
\xfd\xd4\xd7\xd3\x87\x2e\xc7\x01\x6c\x0b\xca\xb2\x88\x12\x09\xc0\
\x4a\x50\xd2\xc4\x13\x94\x34\xf1\x18\x21\x1e\x07\xe2\x71\x42\x2c\
\x0a\x8a\xc7\x08\x03\x03\x30\x7b\x7a\x28\x0a\xcd\xb9\x85\xd9\xb4\
\x70\xca\x58\x7c\x6b\x72\x31\xc6\x15\xa6\x01\x92\x88\x1d\xc7\xc1\
\x4b\x2f\xbf\x8a\xb7\x56\xfd\x0e\xa1\x9c\x4c\x32\x0c\x83\x02\x29\
\x5e\x94\x8c\x1e\x45\x39\x39\x21\xda\xb7\x7f\x7f\xc5\x15\x97\x5d\
\x36\x71\xd5\x5b\x6f\xbf\xf1\xb9\xbd\x22\xf3\x09\x39\x91\x48\x98\
\x6f\x1c\x39\x7c\x60\x50\x6b\xe7\xd6\xba\xfa\x86\x31\xb7\xde\x7c\
\x23\xca\xa7\x4c\x66\x9f\x02\xc6\x87\xc8\x13\x4a\xc5\x8a\x8e\x3c\
\x7c\xa1\xb5\x9b\x8f\xb5\x76\xd1\xee\xee\x3e\x1c\xb7\x35\xe2\x20\
\xb0\x94\xac\xa5\x24\xa6\xe4\x20\x82\x99\x91\x9c\x32\x2c\xb4\x26\
\x92\x04\x4f\x5a\x80\xa7\x8d\x1f\x45\x67\xe7\x67\xd0\xa4\x50\x3a\
\xfb\xb3\x53\x08\x94\x4c\x34\x51\x5b\x5b\x3b\x3d\xf6\xc4\x53\xd8\
\xbf\x6f\x1f\xa6\x55\x94\xc1\xe3\x75\x73\x4b\x73\x0b\xb4\xe3\x20\
\x1c\x8e\x60\x52\x69\x29\xb7\xb4\xb4\xf0\xb1\xe3\xc7\xbf\xd4\xd9\
\xde\x64\x66\x87\x0a\x3f\xf5\x31\xf9\x9f\x9a\x38\x48\x07\x70\x61\
\x7e\x41\xf1\x55\x93\xcb\xca\x96\x5e\x74\xe1\x52\x71\xe5\x17\x2f\
\xe7\xdc\xdc\xd0\xd0\x3d\x34\xe2\x0e\x21\x1c\x23\xf4\x44\x18\xfd\
\x51\xd4\x46\x06\xe9\x94\x99\x40\x57\xc2\x46\x44\x6b\x24\x92\x49\
\x55\xb8\x0c\x89\x80\xcb\x8d\xac\x14\x0f\x8f\x0e\xfa\xa9\x24\x23\
\xc0\x48\xf5\x01\x29\xc6\xc7\x8f\xc3\xd1\x68\x0c\x6f\xaf\x5e\x4b\
\x6f\xae\x7c\x0b\xb5\xa7\x6a\x07\xd8\xb1\x5e\xbb\xed\xd6\x9b\x2f\
\x9e\x3e\x7d\x7a\xd6\x8e\x1d\x3b\xf9\xe4\xc9\x13\x94\x93\x9d\x8d\
\x89\x13\xc7\x73\x51\x61\x21\xfa\xc3\x61\xaa\xa9\xae\x85\xcf\xef\
\x7d\xf5\xab\xd7\xdf\xb4\xe2\xf3\xb4\x80\x61\xe9\x05\xb0\xb2\xa5\
\xb9\xbe\x3e\x1e\x8f\x9e\x6c\x6d\x6d\x59\xfe\xfe\xde\x7d\xc5\x17\
\x9c\xbf\x00\x4b\x97\x2c\x46\x5e\x5e\x2e\x3c\x12\xec\x49\x01\x72\
\x52\x08\x0e\x50\x62\xda\x28\x31\x2d\xc0\xb4\x19\x5a\x27\xd3\x1f\
\x82\x00\x43\x11\xdc\x0a\xf0\x18\x04\x45\xe0\x4f\x8e\xc1\xc0\xc0\
\x20\xbd\xb7\x79\x0b\xad\x5b\xb7\x11\x47\x8f\x1d\x43\x38\xdc\xf7\
\x7e\x6d\xf5\xc9\x1f\x0e\x0e\x0e\xac\x2f\x2b\x2b\x9b\x1b\x08\x04\
\x36\x8c\x1f\x3f\xce\x6b\xdb\x16\xd7\xd6\xd6\x02\x44\xe8\xe8\xe8\
\xc2\xd4\xa9\x53\xd8\xe5\x56\xdc\xd0\xd8\xf8\xa5\x53\x35\x1f\xc5\
\x66\x9f\xb3\xe0\x07\x1d\xed\xad\x1d\x7f\x4a\x7e\xf0\x4c\xde\xb3\
\xcb\x05\x30\x2b\x2b\x27\xf7\x8a\xfc\xbc\xc2\xb9\xa3\x47\x8f\x2e\
\x9e\x7e\xd6\x34\xcc\x9b\x7b\x0e\xc6\x8d\x1d\xc3\xa1\x50\x0e\x84\
\x10\xbf\x7f\xff\x4f\x26\x81\xf0\xc9\x7a\x6f\x6f\x1f\x4e\x9d\xaa\
\xc7\xae\xdd\xbb\x69\xdf\xbe\x03\xa8\x3d\x75\xca\x09\xf7\xf7\x55\
\xb5\xb6\x36\x3d\xde\xd3\xdd\xf5\xf2\x27\xbf\x23\xd8\xb7\x6f\xdf\
\x4c\xc3\x30\xb6\x4a\x29\xbd\xef\xbd\xf7\x1e\x57\x55\x55\x51\x7e\
\x5e\x2e\xc6\x8d\x1b\xcb\xa3\x8a\x47\xe2\xc8\xd1\x63\x74\xec\xf8\
\x09\xf4\xf7\x87\x61\x9a\xe6\x91\xd6\xd6\xd6\x5f\x6c\xda\xb4\xe9\
\xb9\x3f\xd7\xf7\x02\x45\x00\x66\xe7\xe6\x15\x2c\x09\xa6\x66\xcc\
\x0c\x85\x72\x26\xe6\xe5\xe5\xab\x92\xd1\xc5\x28\x1e\x59\x8c\x82\
\xc2\x7c\x84\x72\x72\x90\x9a\x1a\x84\x52\x0a\x20\x82\xe3\x38\x18\
\x18\x18\x44\x57\x67\x27\x9a\x9a\x5b\xd0\xd0\xd0\x88\x53\xa7\xea\
\xd0\xda\xd6\x8a\x9e\xee\xde\xfe\xe8\x60\xe4\x60\x4f\x4f\xd7\x1b\
\xed\xed\xad\xab\x01\xfc\x5f\xe1\xed\x87\x1f\x7e\x28\xa6\x4e\x9d\
\xaa\xab\xaa\xaa\xce\x75\x1c\x67\x5d\x5d\x5d\x9d\xf7\xe4\xc9\x93\
\x5c\x5d\x5d\x8d\x91\x23\x47\xa0\xa6\xa6\x1a\x27\x4f\x56\xd3\xdc\
\xb9\x73\x79\xd9\xb2\x65\xfa\x83\x0f\x3e\x90\x3b\x77\xee\x44\x7b\
\x7b\xfb\x9d\xdb\xb7\x6f\x7f\xe0\xcf\xf9\xc1\x44\x00\x40\x29\x80\
\xb2\x8c\xac\x9c\xa9\xa9\xc1\xf4\x69\x5e\x9f\x2f\x94\x12\x48\x49\
\x77\xbb\xdc\x1e\x97\xe1\x52\x86\xa1\x04\x09\x21\x6c\xdb\xd6\x09\
\xd3\xd4\x96\x63\xd9\xb1\x68\x7c\xd0\x34\xe3\x3d\xb1\x68\xf4\xe8\
\x40\xa4\x7f\x7f\x67\x67\xfb\x4e\x00\xfb\x87\x5e\xb1\xff\x1f\xa5\
\xb2\xb2\x72\x86\xd7\xeb\xdd\x26\x84\xf0\x6e\xdb\xb6\x8d\xb7\x6f\
\xdf\x4e\xab\x56\xad\x82\xd7\xeb\xe5\x3b\xee\xb8\x83\x2e\xbd\xf4\
\x52\x8e\x44\x22\xa8\xac\xac\xa4\x5d\xbb\x76\xa1\xb7\xb7\xf7\xee\
\xad\x5b\xb7\xde\xf7\x59\x7c\xc0\xff\x24\x11\x00\xef\x03\x78\xbf\
\xa7\xab\xc3\xdf\xd3\xd5\x91\x0d\x20\x37\x25\x10\x1c\x61\x28\x95\
\x03\x12\x39\x86\xcb\x08\x28\x65\x48\xdb\xb2\x07\x1c\xdb\xea\x26\
\x81\xb6\x81\xc1\xe8\xe9\x78\x74\xb0\x09\x40\xeb\x50\xf0\xf5\x27\
\xc9\xa1\x43\x87\x44\x79\x79\xf9\xbe\xea\xea\xea\x25\xcc\xbc\x2e\
\x27\x27\xc7\xa7\xb5\xe6\xe2\xe2\x62\x6a\x68\x68\xc0\xaf\x7f\xfd\
\x6b\x04\x83\x41\xcc\x9c\x39\x13\xd3\xa7\x4f\x67\xd3\x34\xa9\xb2\
\xb2\xf2\x27\xb3\x67\xcf\x8e\x57\x56\x56\x3e\xf0\xe7\xb0\x80\xbf\
\x9a\xd4\xd5\xd5\xcd\x5e\xbb\x76\xed\xb6\xfa\xfa\x7a\x57\x5d\x5d\
\x1d\x4e\x9c\x38\xc1\x55\x55\x55\x94\x9e\x9e\xce\x77\xdd\x75\x17\
\x4d\x99\x32\x85\xb5\xd6\xd8\xbb\x77\x2f\xed\xde\xbd\x1b\x7d\x7d\
\x7d\x77\x57\x56\x56\xde\xf7\xa7\x06\x42\x9f\x9b\x18\x86\x8b\x5c\
\x2e\x17\xd9\xb6\xfd\xb9\xdd\xf3\xd8\xb1\x63\x34\x6e\xdc\xb8\xa6\
\x19\x33\x66\x9c\xef\xf1\x78\x8a\x3d\x1e\x0f\x0b\x21\x60\xdb\x36\
\xb5\xb5\xb5\xe1\xd0\xa1\x43\x54\x54\x54\x84\xdc\xdc\x5c\xe4\xe4\
\xe4\xc0\x71\x1c\xea\xec\xec\x5c\x18\x0c\x06\x07\xdb\xda\xda\x76\
\xff\x45\x09\xd0\xda\xc1\xe7\xa9\x3c\x00\x3c\xf1\xc4\x13\x00\x80\
\x05\x0b\x16\xa4\x32\xf3\x32\xa5\x14\xf9\xfd\x7e\x1a\x7a\x6d\x07\
\xa7\x4f\x9f\xa6\x83\x07\x0f\xa2\xa0\xa0\x80\xb2\xb2\xb2\x90\x9b\
\x9b\x0b\x00\xd4\xdd\xdd\xbd\x38\x3d\x3d\xdd\x69\x6b\x6b\xdb\xfe\
\x17\x23\xe0\xcf\x29\xe7\x9f\x7f\xfe\x11\xc7\x71\x66\x38\x8e\x53\
\x22\xa5\x64\xb7\xdb\x8d\x4f\x5a\xc2\xf1\xe3\xc7\x29\x3f\x3f\x1f\
\x39\x39\x39\xc8\xca\xca\x82\x6d\xdb\xd4\xdd\xdd\xbd\xd0\xef\xf7\
\x0f\x74\x75\x75\xed\xf9\x9b\x27\x60\xcb\x96\x2d\xd6\xb6\x6d\xdb\
\x5e\x9c\x37\x6f\xde\x39\x8e\xe3\x94\x28\xa5\xe0\xf3\xf9\x68\x38\
\x16\x69\x6e\x6e\xa6\xc3\x87\x0f\x23\x37\x37\x97\x32\x32\x32\x90\
\x9d\x9d\x0d\x00\xd4\xd3\xd3\xb3\x38\x25\x25\x25\xf1\x37\x4f\xc0\
\xb0\xcc\x9d\x3b\xf7\x75\x00\xb3\x6c\xdb\x2e\x11\x42\xe0\x93\x3e\
\xa1\xb3\xb3\x13\x27\x4e\x9c\xa0\x50\x28\x84\xac\xac\x2c\xa4\xa5\
\xa5\x41\x4a\x49\xbd\xbd\xbd\x0b\xff\x6e\x08\xd8\xb9\x73\xa7\xbd\
\x73\xe7\xce\x17\x37\x6c\xd8\x70\xf6\xd0\x74\x20\xaf\xd7\xfb\xf1\
\x2a\xd7\xd6\xd6\x46\x27\x4e\x9c\x40\x76\x76\x36\xa5\xa5\xa5\x21\
\x23\x23\x03\x86\x61\x90\xc0\xdf\x91\x10\x11\xa7\xa4\xa4\x5c\x4a\
\x44\x9b\x98\x19\x2e\x97\x0b\xf9\xf9\xf9\x5c\x58\x58\x88\x82\x82\
\x02\x0c\x0c\x0c\xe0\xd5\x57\x5f\xc5\xf1\xe3\xc7\x61\x59\x16\xe5\
\xe7\xe7\xb3\xc4\xdf\x99\x6c\xdb\xb6\xcd\x7a\xfa\xe9\xa7\x5f\x3a\
\x70\xe0\xc0\xd9\xb6\x6d\x7f\x6c\x09\xc3\xab\x43\x47\x47\x07\xd5\
\xd4\xd4\x20\x23\x23\x83\x02\x81\x00\x04\xfe\x0e\xa5\xbc\xbc\x5c\
\x67\x64\x64\x5c\x4a\x44\x1b\x1c\xc7\x81\x61\x18\x08\x85\x42\x5c\
\x50\x50\x80\xdc\xdc\x5c\x0c\x0e\x0e\x62\xf5\xea\xd5\xa8\xae\xae\
\xfe\xdb\x8e\x04\xff\x7f\xf2\xfe\xfb\xef\x8b\xa7\x9e\x7a\xea\x5d\
\xd3\x34\x17\x3b\x8e\x83\x78\x3c\x8e\xe6\xe6\x66\xb4\xb4\xb4\x70\
\x4b\x4b\x0b\x05\x83\x41\x16\x7f\xcf\x04\xcc\x9a\x35\x4b\x67\x66\
\x66\x2e\x57\x4a\xbd\xc3\xcc\x50\x4a\x71\x56\x56\x16\x42\xa1\x10\
\x42\xa1\x10\x62\xb1\x18\xfe\x0f\xc8\x02\xa9\x53\xd8\x3e\xc3\xb8\
\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\x00\x00\x05\xd2\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
\x00\x00\x05\x99\x49\x44\x41\x54\x48\x89\x8d\x95\x5b\x6c\x1c\xd5\
\x19\xc7\x7f\xe7\xcc\xcc\xce\xce\xce\x7a\xbd\x8e\xbd\x6e\x7c\x8b\
\x13\x27\x76\xb0\x21\xe4\x52\x02\x54\x55\x6f\x54\x7d\x42\x6a\x14\
\x54\x01\x0a\xd0\x36\x55\x68\x91\xa8\xaa\xd2\x87\x2a\x6d\x55\x94\
\x52\x5a\x10\x52\x51\x0b\x15\x0f\x41\x45\x40\xd5\x02\x45\xa9\x0a\
\xbc\xf4\xa5\xaa\x54\x4a\x1b\x21\x51\x07\x95\xe0\x4b\x6a\x67\x37\
\xce\x3a\xbe\x7b\x6d\xaf\x77\xe7\x7a\x4e\x1f\xc6\xb1\x63\x8a\xa3\
\x8e\xf4\xd7\x39\x33\xf3\x7d\xff\xdf\x77\x66\x74\xbe\x23\xb4\xd6\
\x5c\xef\xb2\xc4\xbd\x36\xa4\x06\x52\xe9\x4c\x7f\xca\x75\x5a\x11\
\x42\x06\xab\xf5\xd9\xa0\x5e\x1b\x02\xff\x7c\xa8\x5f\xad\x5f\x2f\
\x5f\x6c\x05\x48\x89\x63\x1d\xf9\xce\xae\x13\xfb\xef\x38\x7c\xf4\
\xd6\x5b\xfb\xfa\x77\xed\x2a\xa4\x72\x39\x17\x21\x60\x79\xb9\x46\
\xb1\x38\x1b\xbd\x7b\x76\x74\x74\xf0\xaf\xef\xbd\xb1\x38\x51\x3c\
\x1d\xea\xdf\x17\xff\x6f\x40\x2e\xff\xf0\x83\x5f\x78\xe0\xcb\xa7\
\xee\xfa\xca\xa7\xdb\x7b\x3b\xb3\x58\x02\x54\x04\x57\x43\x85\x00\
\xc3\x84\x50\xc1\xd8\xe4\x2a\x67\xce\xfc\x63\xf6\x2f\x2f\xbf\xf9\
\x78\x50\x99\x7b\xd6\xd3\xaf\xe8\x2d\x01\x69\x71\xaf\xb5\xad\x77\
\xef\xd3\x5f\xfb\xd1\x89\x6f\x7f\xe6\x50\x17\xca\x83\x20\xdc\x08\
\x8e\x62\xd0\x80\x65\x24\x10\x01\xa4\x2c\x90\x29\x78\xfb\x5f\x13\
\xbc\xf8\xe4\x0b\x2f\xce\x8f\x0c\x3d\xe4\xe9\x57\xfd\x8f\x05\x74\
\xf4\x3d\xfa\xab\xe3\x3f\x7d\xe4\x3b\x37\xb4\x37\x51\x5d\x49\x9e\
\x49\x91\x8c\x4a\x43\x77\x2b\xd8\x16\x14\xa7\x13\x98\x10\xc9\xaa\
\x84\x80\x4c\x06\x46\xca\x8b\xfc\xe6\xd4\x33\x2f\x2f\x8c\x0e\x1f\
\xaf\xeb\x57\xd4\x26\x40\xbe\xe9\xe1\xaf\xde\xfd\xf8\xc9\x97\xfa\
\x76\x74\x51\x5d\x52\x08\x29\xd6\xcd\xc3\x18\x3e\xbf\x4f\x70\xc7\
\xfe\xe4\x7e\xa4\x0c\xaf\xbf\xbd\x56\x21\x1a\x0d\x68\x05\x8e\x2b\
\x18\x29\x5d\xe6\xf5\x9f\x3c\xf5\x48\x65\xfe\x99\x5f\x02\x98\x00\
\x8e\x38\x56\xb8\xed\x1b\xf7\xff\xbc\xa5\xb9\x95\xd2\xc5\x79\x90\
\x02\x21\xd6\x84\x20\xd6\x82\xde\xf6\x2c\x20\x01\xe8\x6d\x83\x30\
\xa8\x52\xa9\xaa\xb5\x22\x34\x5a\x6b\xf4\x22\x34\x37\xb5\xb0\xff\
\xc8\x9d\x8f\x3a\xe2\xbe\x37\xea\xfa\x77\x17\x4d\x80\xc6\xce\xae\
\xe3\xdd\x07\xf6\x77\x4c\x5c\x98\x20\x0c\x22\xa4\x21\x91\x32\x91\
\x10\x82\x20\xd4\xbc\x37\xac\xe8\x2a\xe4\x01\x18\x2a\xd6\xb9\x74\
\x79\x1e\x7d\xd5\x78\x4d\x4a\x29\xe4\x82\xa4\xb3\x7f\x6f\xd3\xc8\
\x8e\x9d\xdf\x04\x7e\x20\xd2\xdc\x63\x0d\xdc\x75\xf4\x9f\x3b\x0e\
\x1c\xfa\x64\x65\x62\x12\xc3\x34\x90\x52\x62\x18\xc6\x3a\x40\x08\
\x81\x46\xf0\xa9\x9b\x72\x34\x64\x4c\xfe\xfe\xfe\x12\x35\x3f\x46\
\x0a\x36\x99\x2b\xa5\x88\xa3\x08\x27\x9f\xa3\xf4\xc1\x87\x63\x17\
\xde\x7a\xf3\x80\x69\x1a\x4e\x8f\xdd\xda\x36\x70\x69\xac\x44\xbd\
\xb2\x80\x65\x59\x9b\x00\x52\x4a\x40\x90\xb2\x0c\xde\x19\xac\x02\
\xe0\xfb\x11\x35\x3f\x42\xc0\x26\x73\xa5\x14\x51\x14\x21\x2b\x15\
\xac\x96\xc2\x2e\xd3\xce\xde\x60\x5a\x8d\xd9\xbe\xc8\x4c\x3b\xb3\
\xd3\x93\xc4\xf5\x15\xac\x94\xb5\xc9\x5c\x4a\x49\xdd\x57\xfc\xf0\
\xc1\x83\xdc\x7f\xe7\x1e\x04\xf0\xfe\xe8\x02\x27\x4e\xfd\x8d\x58\
\x69\x04\xd7\x54\x1f\xc7\xc4\x71\x8c\xd2\x9a\xc6\xf6\x4e\x69\xe5\
\xb3\x7b\x4c\xb3\xc1\x6d\xf5\xaa\xb3\x2c\x4f\x0d\x21\xad\x1c\x91\
\xca\x61\x18\x0a\xc3\x90\x18\x52\x20\xa4\xc0\xf3\x62\x5a\x9b\x6c\
\x32\x69\x13\x80\xed\x2d\x69\xe2\x28\xc0\xf3\x23\x84\x60\x0d\xa0\
\x89\x95\x22\x8e\x13\x39\x91\xc6\xc8\x38\x6d\xa6\x30\x4d\x1d\xaf\
\xce\x53\x2d\xbe\x85\x12\x69\xcc\x86\x1e\xcc\x4c\x01\xd3\xce\x63\
\xd9\x59\x0c\x2b\x8d\x17\x68\x7c\x7f\x63\xc7\x05\x81\xa2\x56\xf7\
\xf0\xfd\x08\x50\xa8\x38\x26\x8e\x02\xc2\xa0\x4a\xe4\x55\x88\x6a\
\x33\x38\xae\x8f\x36\x4d\xcc\x28\x8e\x66\x0c\x3b\x87\x99\x29\xe0\
\x2f\xcf\x10\xae\x14\x09\x6b\xd3\x20\xb3\x60\xb9\x08\x33\x0b\xbe\
\xa4\x5e\xbb\x7d\x1d\x10\x47\x01\xb3\x93\xe3\x04\x5e\x1d\x08\xd1\
\x51\x0d\x15\xad\x40\xb8\x0c\x41\x05\x94\x87\xe4\x20\x4a\xeb\x2b\
\x66\x10\xf8\xc3\x86\xed\xae\xa6\xf3\xbb\x5c\xbf\x56\x03\xab\x01\
\xa4\x0d\xc2\x06\x24\x3a\x0e\x20\x50\x68\xb5\xb1\x02\xad\x63\x42\
\xaf\x42\xec\x79\x20\x62\xd0\x7e\xd2\xac\x84\x01\x46\x1a\xcb\x6d\
\xc1\x6e\x6c\x8f\x17\xc2\xa9\x0b\x32\x08\xfd\x8b\x91\x5f\x3b\xdf\
\xd8\x7d\x00\x4c\x17\x64\x1a\x0c\x37\x99\x1b\x2e\x98\xd9\x64\x14\
\xe6\x35\x1d\x4c\x22\x0c\x07\xcc\x4c\xa2\xf5\xb8\x0c\x48\x87\xec\
\xf6\x7e\x54\xcc\x78\xe8\xd7\x87\xa5\x3f\xf3\x5c\x3c\x3b\x3e\xfa\
\x5a\x73\xcf\x3e\xec\xfc\x4e\x20\x05\xd2\x49\x64\x38\x20\x33\x6b\
\xe0\x6b\x00\xc8\xc4\x54\xba\xc9\x7b\x63\x2d\x5e\xa4\x11\x76\x13\
\xdb\x7a\x6f\x61\x65\x6e\xfa\x0f\xf5\x2b\xcf\xae\x4a\x80\xca\xd4\
\xd4\x4b\x1a\xbf\xb4\xfd\xa6\x2f\x26\x9f\x48\xa4\x92\x24\x23\x03\
\xa6\x03\x66\x0a\x43\x1a\x1b\xf6\x52\x20\x4c\x0b\x4c\x7b\xc3\x5c\
\xda\x20\x52\x6c\xeb\x39\x4c\xca\x6d\x98\x5d\x9a\x2a\x9f\xe6\x6a\
\x73\xf1\xc6\x7e\x31\x5f\x3a\xf7\xee\xc9\xb6\x81\x7e\x5a\xf6\xdc\
\x9e\x00\xb0\x10\x46\x2a\xd9\x68\x42\x12\x84\x6a\x1d\xa0\x94\x4e\
\x52\xa5\x4c\x40\xd2\x06\x6d\x92\xdd\xde\x47\xdb\xcd\x87\x99\xfe\
\xcf\x87\x3f\xae\x8f\x3c\x75\xe9\x7f\xdb\xf5\xd1\xe7\x9f\xe8\xda\
\xf7\xb9\x93\x63\x67\x07\x99\x2f\x8d\xa0\xb5\xc2\x4a\xa5\x70\xdd\
\x2c\x03\x7d\x1d\x1c\x1a\x68\x47\x48\x41\xb1\xbc\xc8\xd9\xc1\x12\
\xd5\x95\x65\x3c\xcf\x43\x6b\x4d\x43\x73\x1b\xdd\xb7\x1c\x64\xa1\
\x7c\xfe\x74\xf9\xcc\xd7\xbf\xb5\xfe\xbb\x3e\x7a\xa2\x75\xdc\xf3\
\xc2\x13\x5d\x37\x7e\xf6\xe4\xdc\x85\x2b\xcc\x8c\xfe\x1b\xc7\x12\
\xb4\xb6\x16\x70\x1b\x1a\xb1\x2c\x07\x29\x25\x51\xe4\xe3\xd5\xab\
\xcc\xcf\xcd\x51\x59\x5e\x25\xdb\xbe\x93\xc2\xde\x6e\xa6\x4b\xe7\
\x9e\x9b\x19\x1a\xfe\x6e\x74\xee\x67\xe1\x96\x00\x80\xa6\x23\xbf\
\x3e\xd6\x7d\xf3\x6d\x8f\x65\xad\xe6\xdd\x19\xcf\xa3\xc1\x50\xe4\
\x5d\x17\xd7\x75\x31\xa4\xc4\xf3\x3d\x96\xaa\xab\x2c\xf9\x11\x4b\
\x86\x49\x25\xa8\x5c\x2e\x8f\x0e\x3e\xb6\xf8\xc7\x87\x9e\xff\xa8\
\xd7\x96\x87\xbe\xf1\xa5\x27\x0b\xcd\x3b\x3a\xef\x6b\xef\xde\x7d\
\xac\xbb\xbd\xf3\xc6\xb6\x5c\x2e\xd3\x9a\x73\x30\x04\xcc\xae\xf8\
\x94\x2b\x4b\xf5\xe2\x64\x79\xa4\x3c\x31\xfe\xda\xc2\xc4\xc4\x6f\
\xa3\x3f\x7f\xbf\xfc\x71\x3e\x5b\x02\xd6\x03\x8e\x3c\x6d\x8a\xac\
\xb3\xdb\x72\xdd\x1e\x2b\x6d\x7f\x02\x21\x44\xe8\xf9\xd3\xe1\xea\
\xea\xb8\xae\xd6\xc6\xf4\x9f\xbe\x17\x5e\x2f\xff\xbf\x98\x6a\x9d\
\xc8\xca\xd8\x53\x00\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\
\x82\
\x00\x00\x08\x10\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
\x00\x00\x00\x06\x62\x4b\x47\x44\x00\x00\x00\x00\x00\x00\xf9\x43\
\xbb\x7f\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x00\x48\x00\x00\
\x00\x48\x00\x46\xc9\x6b\x3e\x00\x00\x00\x09\x76\x70\x41\x67\x00\
\x00\x00\x18\x00\x00\x00\x18\x00\x78\x4c\xa5\xa6\x00\x00\x06\x41\
\x49\x44\x41\x54\x48\xc7\x6d\x95\x5b\x6c\x5c\x47\x19\xc7\x7f\x33\
\xe7\xec\x9e\xb3\xbb\xdd\xe3\xcb\x5e\xec\xc4\x5e\xa7\x76\x42\x2f\
\x89\x41\xb9\x92\x92\xb4\x69\x14\x05\x25\xa1\x69\xea\x42\x49\x89\
\x08\x08\x0a\x12\xaa\x10\xe1\x0d\xc2\x0b\x12\xea\x23\xbc\x51\x51\
\x44\x1e\x68\x23\x28\x05\x5e\x80\xe2\xa4\x26\x6e\x50\x1a\x27\x69\
\x1c\x42\x2a\xdc\x2a\x17\x3b\xe9\xc6\x89\xbd\x5e\x5f\xb2\x6b\xef\
\xc5\xbb\x7b\xce\x99\xe1\x61\xd7\x4e\x28\x1d\x69\xe6\x61\xf4\xe9\
\xff\x9b\xf9\x7f\x33\xdf\x27\xb4\xd6\xdc\xcb\xe5\x28\x15\x4b\x68\
\xad\xc9\x4c\x65\x70\xa2\x0e\xae\xeb\x12\x0e\x87\x5b\x6b\xb5\xda\
\x13\x4a\xe9\xcf\x06\x02\x81\xc7\x4c\x53\xb6\x21\x84\x50\xbe\xca\
\xbb\xae\x3b\xea\xf9\xde\x47\xc1\xa0\xfd\x7e\xad\xba\x78\x5b\x21\
\x98\x5f\x58\x20\x99\x48\xa2\x7d\x45\x34\xea\x90\x4a\xad\xc0\xe4\
\xd3\xc7\x13\xc0\xf7\x80\xfd\xed\xed\x6d\x71\xc7\x71\x30\x0c\xe3\
\x7f\x02\x94\x52\x94\x4a\x45\x72\xb9\xfc\x62\xad\xba\x78\x06\xf8\
\x35\xf0\xd7\x4f\x0a\x7d\x12\x10\x01\x7e\x5e\xa9\x56\x5e\x5e\xd3\
\xd3\x43\x38\x12\xc1\xf7\x7c\x5c\xd7\x65\xb1\x56\x03\xa5\xea\x51\
\x12\x4c\x24\x96\x1d\x22\xd5\xe9\x84\xda\xdb\x6b\x7b\xd3\xe9\xf4\
\xde\x79\x18\x04\x5e\x06\xc6\x3e\x0d\xd0\x3a\x3a\x3a\x7a\xc2\x69\
\x72\xb6\xa6\x52\x29\x72\x0b\x05\xee\xe5\xf3\x08\x0d\x5a\x00\x68\
\x84\x96\xf7\xa3\x05\x68\x34\x42\x08\x04\x82\x58\x2c\x86\x61\x98\
\xbb\xaf\xdd\xb8\x71\xbe\xe7\xe1\x9e\x7d\xc0\xe5\x07\x01\x62\xec\
\xe6\xd8\x6f\xab\xb5\xca\xd6\x68\x34\xc5\xc4\xc4\x44\x7d\x53\x83\
\x16\x02\x21\xea\x8a\xc2\x00\x54\xfd\x06\x28\xd0\xba\x0e\xd6\x08\
\x64\x1e\x02\xc1\x00\x89\x58\x2c\x31\x3a\x76\xe3\x2f\x1b\x37\x6c\
\xde\x08\xcc\x08\xad\x35\x3f\xfa\xf1\xd1\x5d\x9b\x36\x6d\x7a\xb7\
\x6b\xd5\x2a\x3c\xd7\xad\xbb\x20\xea\x8b\xd4\x26\x5a\x68\x84\x14\
\x9f\x9a\x2c\xad\x34\x42\x2b\xb4\xd0\x80\x20\x14\x0a\x73\x3b\x9d\
\xe6\xea\xb5\xab\x3f\xfd\xc9\xd1\xa3\xaf\x98\x00\x53\x99\xcc\x97\
\x43\xe1\x10\x85\x42\x01\xdf\x75\xd1\x52\x22\x05\x48\x69\x22\x05\
\x75\x1b\x84\x00\x69\x80\xbe\x6f\x11\xca\x47\x6b\x8d\xd6\x1a\xa5\
\x41\x0b\x45\xa5\x5a\x25\xea\x38\xb8\xae\xdb\x07\xd4\x01\x89\x44\
\xa2\xa5\x54\x2c\xa1\x7c\x85\xeb\xba\x48\x21\x91\xa6\x44\x4a\x89\
\x10\x06\xd2\x14\x48\x6d\x20\x84\xae\x0b\xd7\x9d\xa9\x0b\x0b\x8d\
\xf2\x34\x1a\x1f\xed\x81\x6b\x9a\x78\xbe\x8b\xe3\x38\xce\x72\x0e\
\xb2\xd3\xd9\xa9\xb9\x7b\x73\x38\x4d\x2d\x28\xdf\xc3\x30\x4c\x4c\
\xd3\x40\x4a\x89\x94\x06\xd2\x15\x48\x21\xff\xcf\x26\xad\x34\x4a\
\x2b\x94\xd2\x28\xe5\xa3\xb4\x22\x88\xc5\xf4\xd4\x14\xb3\xb3\xb3\
\xb3\x8d\x07\x07\x52\xc8\x40\xaa\xb3\x8b\x74\xfa\x16\x00\x55\xb7\
\x4a\xb5\x56\xc3\xf5\x3c\x94\xe7\xe2\x79\x1e\x9e\x76\xf1\x5c\x0f\
\xcf\x6f\x4c\xb7\xb1\xe7\x79\x78\x9e\x8b\xe7\xfb\x28\x05\xb3\x33\
\x33\x18\x42\xd0\xdc\xdc\x62\x2c\x03\x9a\x9a\x9a\x92\x2b\x56\x76\
\x20\x81\x42\xb1\x48\x53\xb4\x85\x90\x6d\x63\xdb\x01\x4c\xcb\x22\
\x18\xb4\x08\x06\x42\x04\x2d\x0b\xcb\x0a\x61\x59\x21\x82\x21\x1b\
\x2b\x10\xc2\xb2\x2c\x6c\xdb\x26\xfa\x50\x94\xa0\x69\x30\x7e\xfb\
\x36\x6b\x7b\x7b\x09\x47\x22\xb1\x65\x8b\x4a\xa5\xe2\xdc\xc5\xe1\
\x61\x1e\x7f\x6c\x1d\x77\xc6\x3f\x26\x9b\x9d\xa4\xab\xeb\x61\x2c\
\x3b\x58\x7f\x25\x12\x04\x02\xb9\x94\xec\xa5\x1c\x08\x81\x61\x18\
\x08\x29\xc8\x4c\x4c\x90\xbe\x9d\x66\xf3\xa6\xcd\xfc\xe7\xc3\x0f\
\x99\x9d\x99\xc9\x2f\x03\x2a\xd5\x9a\xf7\xc8\x9a\xd5\x9c\x18\x18\
\xe0\x0b\x9b\xb7\x52\x2c\xe5\xb8\x9b\x1e\x23\x18\x89\x12\x8f\xc5\
\x70\x1c\x07\x3b\x1c\xc6\x30\x4c\x8c\xc6\x5f\xab\xd5\x3c\x8a\xc5\
\x02\x73\x53\x73\xcc\xdd\xcb\x22\x85\xa4\xc9\x69\xe1\xea\xf5\x51\
\x92\x6d\x71\xec\x90\xed\x2f\x03\x9a\x9b\x9b\xdb\x56\x75\x77\xb3\
\xaa\xb3\x83\x33\xe7\xde\xa3\x5a\x71\x59\xfb\xf8\x23\x3c\xba\x36\
\x45\xb9\x58\xe6\xa3\x91\x11\x0c\x53\x12\x89\x44\x30\x84\xa4\x5c\
\x59\xa4\x5c\x5e\x24\x91\x4c\xd2\x16\x4b\xb0\x50\xc8\x33\x34\x74\
\x9e\x70\xe4\x21\x5a\x5b\x1c\x9e\xfa\x4a\x1f\xa7\x06\x07\xef\x5b\
\xa4\x95\x5f\x18\x1a\x3a\xc7\x86\xf5\xeb\xe9\xec\x68\xe7\xcc\xd0\
\x05\xde\x19\xf8\x07\x53\xd9\x69\x9e\xf9\xd2\x33\x7c\xfd\xf0\x0e\
\xee\xe5\xf3\x14\xe6\x17\xf0\x7d\x45\x38\x1c\x26\x99\x8c\x31\x71\
\xf7\x2e\x03\x83\xa7\x39\x37\x34\x44\x73\x4b\x33\x1b\x37\xf4\xf2\
\xb9\x75\xbd\x0c\x9d\xbf\x40\xb9\x54\x2c\x2f\x03\xc6\xc7\xef\x4c\
\x1e\x7c\xf1\x6b\xf4\x9f\x1c\xe0\x8b\xbb\x76\x71\xe8\xe0\x57\xc9\
\x66\xb3\x9c\xbf\xf0\x3e\x6f\xfd\xe9\x4d\xce\x9e\x5d\x89\x65\x85\
\x29\x2e\x96\x31\x05\x04\x6d\x1b\x69\x40\x66\x32\x0b\x28\x9e\xef\
\xdb\xcf\xea\xd5\x9f\x61\x7a\x66\x96\x33\x17\x86\xe9\x58\xd1\xc6\
\xc2\xfc\xfc\xd4\x32\xe0\xca\x95\x7f\x5f\x6f\x69\x69\xa5\xa3\xa3\
\x8d\xbf\xf5\xff\x9d\x4a\xb9\xc2\xbe\x7d\x7b\xf8\xe1\x91\x23\x64\
\x32\x19\x26\x27\x27\xc9\xcf\xe7\x68\xaa\x84\x41\x40\xc0\x0c\xd0\
\xe4\x38\x6c\xdd\xb0\x91\x8e\xae\x14\x93\x99\x2c\xc7\x8f\xff\x0e\
\x69\x06\x88\xb7\x36\x71\xe8\xe0\x0b\x1c\x3b\x76\xec\xda\x32\xa0\
\xb7\xb7\x77\xe4\x57\xaf\xbd\x76\xf7\xc8\xf7\x7f\xd0\xd9\x9e\xfc\
\x80\x53\xa7\x4e\xf3\xcb\x57\x5f\x65\xc7\xce\x9d\xbc\xf0\x7c\x1f\
\x7b\xf6\xec\x25\x37\xbf\xc0\x62\xb9\x00\x4a\x60\x04\x4d\xe2\xb1\
\x38\x33\x33\x59\x06\x06\x06\xe9\x3f\x71\x12\xdb\x0a\xb2\x7b\xf7\
\x4e\x9e\xdc\xf6\x24\x6f\xbe\xf5\x47\x57\xc2\x7b\xf5\x82\xa9\x35\
\xa3\xa3\xa3\x6d\xaf\xbf\xf1\xc6\xb7\x6b\x35\xff\x95\xbe\x03\x7d\
\x66\x24\x6a\x71\xe5\xca\x15\x2e\x5e\xbc\x84\x34\x4d\x52\x1d\x1d\
\x58\xb6\x4d\xa9\x54\xae\x17\xb4\xb0\x8d\x21\x04\x99\x4c\x86\x62\
\xa9\xc4\xa3\x6b\xd6\xb0\x6d\xfb\x76\x4a\xe5\x12\x97\x2f\x7f\x40\
\x3a\x7d\xeb\x0f\xdf\xfc\xc6\xe1\x9f\x6d\xd9\xb2\xe5\xba\x68\x14\
\xab\x96\x42\xa1\xd0\xfd\x9b\x63\xc7\xbe\x3b\x76\x2b\xfd\x1d\x29\
\x8c\xe0\xe1\x43\x2f\xd2\xd9\xd9\xce\x9d\x89\x49\xc6\xc7\xc7\xc9\
\xe5\xf2\x54\xab\x35\x10\x0a\x2b\x68\x13\x8d\x46\xe9\x58\xb1\x92\
\xf6\x95\xed\x28\x4f\xf1\xfa\xf1\xdf\x33\x33\x37\xab\x53\x2b\xdb\
\xdf\x7d\xe9\xa5\x6f\xfd\xa2\xbb\xbb\x67\x44\x08\x31\x29\x94\x52\
\x02\x08\x02\x71\xd7\x75\x57\x0f\x0e\x0e\xee\x7f\xbb\xbf\xff\xd0\
\xe8\x8d\x9b\x1d\x4f\x3f\xbd\x43\x1c\x38\xf0\x2c\xdd\xdd\xdd\x2c\
\x2e\x56\x50\xca\xaf\xb7\x4b\x0d\xd1\x70\x88\xe9\x99\x39\x4e\xff\
\xf3\x34\xfd\x27\xdf\x21\x60\xca\x62\xdf\xb3\xfb\xdf\x3e\xf0\xdc\
\x73\x7f\x8e\x46\xa3\x23\xc0\x14\x50\x16\xaa\xde\x06\x05\x60\x01\
\xad\xc0\xaa\x62\xb1\xb8\xfe\xd2\xa5\xe1\xa7\x86\x2f\xfe\xeb\xf3\
\x55\xaf\xda\x99\x4c\x24\x83\x81\x80\x2d\x8a\xe5\x45\x40\x63\x87\
\x2c\x0c\xd0\xb3\x33\xb3\x9e\xef\x7b\x73\xeb\xd6\xad\x1d\xd9\xbe\
\x7d\xdb\xd9\x44\x22\x39\x0c\xdc\x04\xb2\x40\x19\xf0\x97\x00\x4b\
\x90\x40\xa3\x2f\x27\x80\x4e\x60\x75\x2e\x97\xeb\x99\x9e\x9e\xee\
\x2a\x16\x8b\x09\xd7\x75\xc3\x5a\x6b\x11\x08\x04\x2a\xa1\x50\x28\
\x1f\x8f\xc7\x27\xe2\xf1\xf8\xc7\x86\x61\xdc\x04\xd2\x0d\xe1\x05\
\xa0\xda\xe8\x7d\x3c\x08\x78\x10\x64\x36\x6c\x0b\x37\x80\x11\x20\
\xd4\x38\x80\x00\xbc\x86\x48\xe9\x81\x59\x05\xdc\x25\xe1\xa5\xf1\
\x5f\x0f\xac\xd1\x7f\xa6\xa3\x79\x12\x00\x00\x00\x25\x74\x45\x58\
\x74\x63\x72\x65\x61\x74\x65\x2d\x64\x61\x74\x65\x00\x32\x30\x30\
\x39\x2d\x31\x31\x2d\x32\x38\x54\x31\x37\x3a\x31\x38\x3a\x32\x38\
\x2d\x30\x37\x3a\x30\x30\x31\x91\xb2\x2c\x00\x00\x00\x25\x74\x45\
\x58\x74\x64\x61\x74\x65\x3a\x63\x72\x65\x61\x74\x65\x00\x32\x30\
\x31\x30\x2d\x30\x31\x2d\x31\x31\x54\x30\x38\x3a\x34\x35\x3a\x31\
\x36\x2d\x30\x37\x3a\x30\x30\x6c\x52\x00\xee\x00\x00\x00\x25\x74\
\x45\x58\x74\x64\x61\x74\x65\x3a\x6d\x6f\x64\x69\x66\x79\x00\x32\
\x30\x31\x30\x2d\x30\x31\x2d\x31\x31\x54\x30\x38\x3a\x34\x35\x3a\
\x31\x36\x2d\x30\x37\x3a\x30\x30\x1d\x0f\xb8\x52\x00\x00\x00\x35\
\x74\x45\x58\x74\x4c\x69\x63\x65\x6e\x73\x65\x00\x68\x74\x74\x70\
\x3a\x2f\x2f\x63\x72\x65\x61\x74\x69\x76\x65\x63\x6f\x6d\x6d\x6f\
\x6e\x73\x2e\x6f\x72\x67\x2f\x6c\x69\x63\x65\x6e\x73\x65\x73\x2f\
\x4c\x47\x50\x4c\x2f\x32\x2e\x31\x2f\x3b\xc1\xb4\x18\x00\x00\x00\
\x25\x74\x45\x58\x74\x6d\x6f\x64\x69\x66\x79\x2d\x64\x61\x74\x65\
\x00\x32\x30\x30\x39\x2d\x31\x31\x2d\x32\x38\x54\x31\x34\x3a\x33\
\x32\x3a\x31\x34\x2d\x30\x37\x3a\x30\x30\xd5\x8b\xec\x49\x00\x00\
\x00\x16\x74\x45\x58\x74\x53\x6f\x75\x72\x63\x65\x00\x43\x72\x79\
\x73\x74\x61\x6c\x20\x50\x72\x6f\x6a\x65\x63\x74\xeb\xe3\xe4\x8b\
\x00\x00\x00\x27\x74\x45\x58\x74\x53\x6f\x75\x72\x63\x65\x5f\x55\
\x52\x4c\x00\x68\x74\x74\x70\x3a\x2f\x2f\x65\x76\x65\x72\x61\x6c\
\x64\x6f\x2e\x63\x6f\x6d\x2f\x63\x72\x79\x73\x74\x61\x6c\x2f\xa5\
\x91\x93\x5b\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\x00\x00\x06\x10\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
\x00\x00\x05\xd7\x49\x44\x41\x54\x48\x89\x95\x95\x7b\x6c\x53\x55\
\x1c\xc7\xbf\xf7\xb6\xdd\xed\xbd\xb7\x5d\xf7\xe8\xb6\x96\x4d\xbb\
\x17\x43\xe6\xd8\x3a\x90\x6d\x56\x07\xc2\x00\x65\x31\x99\x46\x1e\
\x4e\x62\x14\x88\x46\x14\xe3\x73\x1a\xf0\x11\x1f\xf1\x1f\x1f\x51\
\x82\x4a\x88\xa8\x18\x45\x91\x44\x94\x69\x18\x51\xc1\x0d\x07\xc8\
\x6b\xb8\x6e\x0c\x36\xba\x51\xb6\x76\x5b\xb7\x6e\xeb\x7a\xfb\x6e\
\x6f\x7f\xfe\x41\x40\x90\xca\xf4\x97\x9c\xbf\xce\xf9\x7d\xbe\xe7\
\x77\xce\xef\x7c\x0f\x88\x08\xff\x75\x94\x01\x4c\xe5\xdc\xfb\x0c\
\x96\x9a\x75\x45\x0b\xee\x7d\xd1\x44\x44\xb8\xb3\xe1\x7b\xe6\x7a\
\x39\x0c\x11\xe1\x7a\xb1\xd2\x98\x51\x3c\xa7\xfc\xe6\x85\xb3\x66\
\xe6\x56\x79\xb9\xf4\x1c\xa1\xa4\x52\x08\x48\x13\xc3\xda\x1b\x0b\
\x6f\xfd\xfd\xc0\xe1\xcf\x7f\x6b\x3d\xf3\x1e\x67\x2c\x9c\x6c\xd9\
\xfd\x46\x28\x21\xe0\xdf\x94\x1f\x36\x19\xaa\x0e\x6d\x58\xf3\x6b\
\xf4\xe7\x6d\x71\x6a\xfb\x8e\xe8\xc4\xb7\xd4\xbb\xef\x1b\x8a\x07\
\xbd\x74\x29\x26\x25\x1f\xed\xfd\xec\x93\x43\x0f\x55\x54\xd7\x97\
\x70\x5a\x75\x22\x8e\x32\x91\xe8\xe6\x3b\xca\x5e\xde\xba\x71\xd9\
\xeb\x49\x3a\x8e\xc5\xf9\x63\xc0\x99\x18\x20\x13\x64\xc5\x34\x30\
\x0b\xea\x2e\xaf\x4b\xd6\x88\x58\x6a\xd6\x5b\xaa\x57\xcd\xb8\x75\
\x8b\x5e\xf5\x1e\x80\x86\x7f\xb2\xae\x39\xa2\x1d\x77\xcf\xdd\xbc\
\xaa\xf6\xa6\xf5\x18\xe9\x03\x9c\x23\xa0\x18\x10\x55\x89\x08\x33\
\x49\xb0\xe9\xcd\x30\x3e\xf1\x2a\x94\xbc\x06\xa2\x28\x82\xa7\x28\
\xf0\xd2\x22\x80\x97\x81\xec\x12\x7c\xda\x74\x6e\xcb\xda\x3d\x07\
\x1f\xbf\x92\xc7\x02\x40\xdd\x93\xdb\x18\x00\x78\xa7\x22\xff\xb9\
\x55\x8b\x4d\xeb\xe1\xe8\x06\x6c\x17\x10\xf1\x06\xe1\xf2\x01\x7d\
\x4e\x3f\xac\x67\x46\xd0\xde\x69\xa7\xc6\xc6\xbd\xb4\xbf\xf5\x08\
\x8e\xf7\xf4\xc1\xd1\xb4\x13\xd4\x7b\x06\x38\xef\x04\x06\x3a\xb1\
\x76\x71\xfe\xba\x37\x6f\x37\xbf\x70\x4d\x05\xb5\x8f\x7e\x74\x13\
\xd7\xfe\x43\xe9\x53\x4b\x0a\xb7\xcf\x0a\x59\xf9\x74\x67\x0f\x02\
\x71\x01\x83\x61\x01\xfd\xae\x00\xed\xb7\x8d\x74\x9c\x15\x4d\x43\
\x63\xe3\xee\xe3\x61\xbf\x67\x52\x93\x65\x28\x28\xac\x9e\x3f\x6f\
\x45\xcc\x5e\x3c\x93\x5c\xd0\x27\x85\xa0\x54\x32\x40\x61\x1e\x86\
\x99\x6c\xdf\xea\x0f\x9a\xe6\x34\x8d\x7b\x7a\x00\x40\x61\x0d\x97\
\xa4\x8e\x36\xef\x14\xea\x16\x95\xdd\xb7\x62\xe3\x2b\xb7\x0f\x30\
\x46\x38\x9c\x1e\x44\x86\x87\x71\x7a\xc0\x17\xdb\xda\x23\xfd\x60\
\xd5\x15\xed\x93\xc2\xe1\xed\xa1\x31\xe7\x0e\x22\x3a\x1a\x90\xa4\
\x16\xfb\xe9\x8e\x83\xbd\xf6\x61\x98\x34\xbc\x59\x9b\x2c\xb0\x22\
\x85\xc0\x84\x42\xd0\x18\x53\x92\x22\xd0\x0a\xe5\xf5\x6b\x1a\x2f\
\x77\xd1\xd3\x6b\x9e\x78\xe9\x5c\xaf\x5d\xbe\xd4\x1d\xa7\xce\x0d\
\xd0\x87\x0d\x1b\x69\xf9\x0c\x73\x73\x55\xc1\x9c\xd5\x96\x34\x43\
\x76\xa2\x0e\x29\x01\x8c\xf5\x5a\x6e\x6b\xdb\xe2\x02\xf2\xd5\xe7\
\x11\xd5\x1b\x89\x36\x54\x90\xed\xc5\x7b\xdd\xf3\xd4\xea\x2c\x22\
\x02\x7b\x0b\xa7\x11\xb3\x0b\x0a\x2a\xb2\x0c\x99\x2c\x00\xc4\x62\
\x31\x50\x44\xc2\x79\x22\x47\x77\xf7\x9f\xaf\x1f\xb1\x9d\xf8\xfc\
\xd0\xd8\x90\x33\x51\xb7\x75\x10\x0d\x75\x48\xe1\x4d\x7f\x0c\x4c\
\xf6\xf8\xe5\x24\x80\x00\x78\xbd\xc8\x49\xa6\xf4\x5c\x43\x7a\x39\
\x00\xb0\xaa\x8a\x65\x6a\x77\x57\xbb\x95\xe7\x79\x00\x40\x28\x4e\
\x18\xf5\x87\x71\xfe\x70\xeb\x61\x16\x68\x4b\xf8\x78\xae\xbc\x44\
\xa0\xbb\xcb\xed\x3b\x18\xf2\xfa\x20\x87\x82\x80\xd7\x03\x2e\xea\
\x43\x7e\x5e\x6e\x0d\x00\x28\xe5\xd1\x0b\xb2\x89\xf3\x24\x2b\xb7\
\xae\x05\xd4\x99\x90\xd3\x0a\x11\x1f\x27\xf8\x1d\x17\xba\x59\x40\
\x9a\x4a\xc0\x4a\x24\x2f\x37\xe5\xf4\x3a\x16\xad\x46\x86\x4e\x06\
\xef\x75\x00\x6a\x15\x92\x75\x43\x99\x65\x62\x46\x9a\x32\x38\x70\
\x5a\x8e\xe5\x15\x89\xb0\xb7\x03\xfd\x17\xc0\xfa\x81\xf4\x09\x1e\
\xa2\xdb\xc5\xb8\x2e\x16\x3d\x65\xc8\x19\xd3\x14\xd2\x1d\x2b\x10\
\x2f\x2d\x06\x54\x0a\x44\xe5\x38\xdc\x1d\xcf\x06\x58\x3a\x4a\x6c\
\x87\x7f\x44\xea\x1f\x72\x5b\xa1\xe4\x01\x8d\x0e\x2a\x9e\x87\x28\
\x72\xc8\xd3\xaa\x4b\x65\x80\xfb\x2f\x02\x86\xfc\x82\x92\x34\x4e\
\x81\x24\xe6\xe2\x7e\x42\x91\x28\x02\x32\xc3\x31\x14\x57\xb2\x00\
\x60\x1b\x18\x6c\x09\x86\x19\x80\xe3\x90\xc4\xc8\xd0\x08\x2c\x2a\
\xb3\xc4\x85\x22\xcb\xce\x9e\x0a\x5e\x91\xac\xaf\x9c\x5e\xb3\xf4\
\xae\xcc\x2c\x03\x54\xca\x8b\xce\xe3\xf5\x05\xa0\x16\x39\x4d\x5b\
\x70\x62\x94\x05\x00\xfb\xb8\xaf\xcb\x3a\x18\x3c\x09\x51\x00\xab\
\x62\x91\xaa\x8a\x60\x86\x51\xd0\xd4\xe5\xe8\xde\x29\x67\x18\x63\
\x22\xb0\xe5\x86\x99\xd3\xe7\xcf\xb4\x2c\xaf\x9f\x95\xf7\xa5\xf9\
\xf8\xee\x94\xe1\xd6\x66\x84\x25\x2f\x00\xe0\x58\x73\xb3\xed\xf8\
\xcf\x07\x76\x55\x9b\x97\xe8\x2f\x7b\xd1\xf3\xc5\x39\x8f\xbd\x7b\
\x4f\xfe\x16\x78\x46\x00\x8f\x04\x97\x2c\x60\x70\x34\x8a\xfd\xa3\
\xd4\xd6\xe8\x8e\x35\x48\xc3\x83\xbf\x9f\x22\x8a\x02\x80\x25\xb7\
\x74\xb6\x5e\xc5\xcc\x5d\x8a\xfe\x07\x6b\x0a\x75\xb7\x99\xb4\x51\
\xc4\xe2\x32\xba\x4c\xf3\x90\x61\x59\x82\xb7\x36\x7d\xf9\x82\xd5\
\x11\x68\x32\xac\xdc\x18\xb9\x2c\x60\x66\x58\xee\xfd\x65\xb3\x0f\
\x2c\x98\xae\xb4\xc0\xe5\x02\x05\xc2\x18\x0f\x10\xec\xb5\xcf\xa2\
\xd3\x30\x2b\xd6\x77\xe2\x68\xd7\x48\x7f\x7f\xbb\xaa\xb7\x5b\x2e\
\x8a\x4e\x56\x97\x31\x2e\xc3\x8d\xc6\x14\x31\x5d\x1d\x83\x06\x41\
\x40\xe0\x00\x43\x0e\xbe\xea\x4b\xee\xdc\xdc\xea\x78\x4d\x5b\xb6\
\xa0\x9d\x49\xcd\xee\xbd\xca\x4d\x6b\x53\xb5\x73\x3f\x7e\x60\xf6\
\xbe\xdc\x54\x39\x8d\x06\x9d\x60\xb2\x0a\x10\x78\x65\x0f\xc6\x3c\
\x3e\x4c\xfa\x7d\x08\x33\x0a\xc4\xf6\x6c\x47\x56\xeb\x0e\xa4\x88\
\x0a\x68\xd8\x28\x94\x88\x81\x78\x1e\x8c\x61\x1a\xba\xbd\x9a\xc9\
\x67\xbe\x68\xb9\x67\xef\xf8\x64\xf3\x25\xe6\x35\x76\x5d\x97\x91\
\x52\xf3\xf6\x23\xb5\x5f\xcf\xc8\x4f\xc9\x24\x4b\x3d\x98\xe2\xea\
\xab\xe6\x47\x1a\xb7\x43\x7b\x72\x0f\x78\x4e\x09\x62\x15\x20\x41\
\x00\x9b\x9a\x81\x8e\x73\x63\xee\x0d\x5b\x76\xaf\xf9\x69\x74\xfc\
\xc7\xab\x12\x12\x79\xcc\x7c\x5d\x6a\xe5\xae\x86\xf5\xa7\x3c\xee\
\x51\x22\x22\x92\xe5\x18\xc5\xe3\x71\x22\x22\x72\xb4\xfe\x42\xfe\
\xef\x37\x11\xfd\xb2\x8d\xa8\xf5\x1b\xf2\xef\xdd\x46\x3b\x1e\xb9\
\xbf\x79\x9e\xc0\x57\xfd\xaf\x3f\xb9\x3c\xf5\x86\xd2\xa2\x42\xd3\
\xc2\x65\x4f\xae\x5b\x67\xb9\x73\x49\x91\x5a\xc1\x40\x10\x45\x9c\
\x6d\xb3\x22\x17\x6e\x8c\xbb\x5c\xd2\x1f\x2d\x47\x4e\xfc\xd4\xb8\
\xef\xeb\x4e\xbb\xe3\xbb\x0e\xa2\x89\x44\x9c\xeb\x7e\xfa\xe5\x4a\
\x81\x53\xeb\x33\xcd\x05\x55\xb7\xad\x94\x7a\xcf\x76\xa9\x45\xad\
\x2e\x16\xf4\xc7\x23\x4e\x5b\xf7\x98\x47\x1a\xf0\xca\xb2\xad\x93\
\x28\xf8\xaf\x80\xa9\x04\xfe\x16\xe2\x92\x14\x62\x9a\x3e\x1e\x09\
\x85\xdb\x82\x13\x63\x53\x26\x5c\x11\x7f\x01\x11\x27\x49\x84\x4a\
\x59\x7f\x9a\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
"
qt_resource_name = "\
\x00\x0b\
\x0f\x08\x42\x1e\
\x00\x41\
\x00\x70\x00\x70\x00\x6c\x00\x69\x00\x63\x00\x61\x00\x74\x00\x69\x00\x6f\x00\x6e\
\x00\x06\
\x04\xd0\x3a\xc2\
\x00\x46\
\x00\x69\x00\x6c\x00\x74\x00\x65\x00\x72\
\x00\x07\
\x07\x3b\xe0\xf3\
\x00\x50\
\x00\x6c\x00\x75\x00\x67\x00\x69\x00\x6e\x00\x73\
\x00\x06\
\x04\xa6\x4c\xf7\
\x00\x43\
\x00\x6f\x00\x6e\x00\x66\x00\x69\x00\x67\
\x00\x06\
\x05\x8c\x46\xa5\
\x00\x52\
\x00\x65\x00\x6d\x00\x6f\x00\x74\x00\x65\
\x00\x0b\
\x04\x69\xc7\xe2\
\x00\x53\
\x00\x68\x00\x6f\x00\x77\x00\x20\x00\x46\x00\x6f\x00\x6c\x00\x64\x00\x65\x00\x72\
\x00\x03\
\x00\x00\x59\xbe\
\x00\x52\
\x00\x75\x00\x6e\
\x00\x0e\
\x0d\xf4\x8a\x37\
\x00\x52\
\x00\x65\x00\x73\x00\x74\x00\x6f\x00\x72\x00\x65\x00\x20\x00\x43\x00\x6f\x00\x6e\x00\x66\x00\x69\x00\x67\
\x00\x06\
\x05\x8c\x35\x74\
\x00\x52\
\x00\x65\x00\x6c\x00\x6f\x00\x61\x00\x64\
\x00\x04\
\x00\x04\xbb\x04\
\x00\x45\
\x00\x64\x00\x69\x00\x74\
\x00\x07\
\x09\x8c\x74\x23\
\x00\x53\
\x00\x61\x00\x76\x00\x65\x00\x20\x00\x41\x00\x73\
\x00\x03\
\x00\x00\x54\xc7\
\x00\x4e\
\x00\x65\x00\x77\
\x00\x04\
\x00\x05\x98\xc5\
\x00\x53\
\x00\x61\x00\x76\x00\x65\
\x00\x0b\
\x04\x5b\x5a\x02\
\x00\x45\
\x00\x64\x00\x69\x00\x74\x00\x20\x00\x46\x00\x69\x00\x6c\x00\x74\x00\x65\x00\x72\
\x00\x10\
\x0d\xc3\xd1\x00\
\x00\x4e\
\x00\x65\x00\x77\x00\x20\x00\x46\x00\x69\x00\x6c\x00\x74\x00\x65\x00\x72\x00\x20\x00\x47\x00\x72\x00\x6f\x00\x75\x00\x70\
\x00\x0b\
\x04\x5c\xf5\xa2\
\x00\x43\
\x00\x6f\x00\x70\x00\x79\x00\x20\x00\x46\x00\x69\x00\x6c\x00\x74\x00\x65\x00\x72\
\x00\x0d\
\x05\x48\xe3\x42\
\x00\x52\
\x00\x65\x00\x6d\x00\x6f\x00\x76\x00\x65\x00\x20\x00\x46\x00\x69\x00\x6c\x00\x74\x00\x65\x00\x72\
\x00\x0a\
\x04\xc6\xa3\xe2\
\x00\x4e\
\x00\x65\x00\x77\x00\x20\x00\x46\x00\x69\x00\x6c\x00\x74\x00\x65\x00\x72\
\x00\x04\
\x00\x05\x37\xfe\
\x00\x4d\
\x00\x61\x00\x69\x00\x6e\
\x00\x04\
\x00\x05\x04\xcf\
\x00\x49\
\x00\x6e\x00\x66\x00\x6f\
\x00\x0a\
\x06\xab\xae\x79\
\x00\x52\
\x00\x65\x00\x70\x00\x6f\x00\x73\x00\x69\x00\x74\x00\x6f\x00\x72\x00\x79\
\x00\x04\
\x00\x04\xec\x30\
\x00\x48\
\x00\x65\x00\x6c\x00\x70\
"
qt_resource_struct = "\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x01\
\x00\x00\x00\x1c\x00\x02\x00\x00\x00\x05\x00\x00\x00\x12\
\x00\x00\x00\x2e\x00\x02\x00\x00\x00\x0a\x00\x00\x00\x08\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x04\
\x00\x00\x01\xcc\x00\x00\x00\x00\x00\x01\x00\x00\x78\x00\
\x00\x00\x01\xa4\x00\x00\x00\x00\x00\x01\x00\x00\x6a\x16\
\x00\x00\x01\x96\x00\x00\x00\x00\x00\x01\x00\x00\x4a\x35\
\x00\x00\x01\xb2\x00\x00\x00\x00\x00\x01\x00\x00\x6f\xec\
\x00\x00\x00\xe4\x00\x00\x00\x00\x00\x01\x00\x00\x2b\x89\
\x00\x00\x00\x82\x00\x00\x00\x00\x00\x01\x00\x00\x11\xde\
\x00\x00\x00\xc2\x00\x00\x00\x00\x00\x01\x00\x00\x23\xb3\
\x00\x00\x00\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x2e\x48\
\x00\x00\x00\x66\x00\x00\x00\x00\x00\x01\x00\x00\x0c\x7e\
\x00\x00\x00\x42\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x01\x00\x00\x1e\x44\
\x00\x00\x00\x54\x00\x00\x00\x00\x00\x01\x00\x00\x06\x03\
\x00\x00\x00\xd0\x00\x00\x00\x00\x00\x01\x00\x00\x26\x95\
\x00\x00\x00\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x18\x00\
\x00\x00\x00\xfe\x00\x00\x00\x00\x00\x01\x00\x00\x32\x16\
\x00\x00\x01\x40\x00\x00\x00\x00\x00\x01\x00\x00\x3c\xa2\
\x00\x00\x01\x7c\x00\x00\x00\x00\x00\x01\x00\x00\x45\xf9\
\x00\x00\x01\x5c\x00\x00\x00\x00\x00\x01\x00\x00\x41\x0e\
\x00\x00\x01\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x36\x69\
"
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()
spykeviewer-0.4.1/spykeviewer/ui/filter_dock.py 0000644 0001750 0001750 00000052701 12262550403 020054 0 ustar rob rob import os
from PyQt4 import QtGui, QtCore
from PyQt4.QtGui import (QDockWidget, QMessageBox, QAbstractItemView,
QTreeWidget, QApplication, QStyle, QTreeWidgetItem)
from PyQt4.QtCore import Qt, pyqtSignal
from ..plugin_framework.filter_manager import FilterManager
from checkable_item_delegate import CheckableItemDelegate
class FilterDock(QDockWidget):
""" Dock with filter tree. It manages filters of different
types. They are displayed in a tree view and can be moved using drag
and drop (only possible within the same filter type). The dock also
takes care of storing and restoring the filters from disk.
This dock has two signals:
* ``current_filter_changed()``: Emitted when the currently selected item
in the tree view changes.
* ``filters_changed(str)``: Emitted whenever an action causes the list of
filtered items to (potentially) change.
"""
FilterTreeRoleTop = 0
FilterTreeRoleGroup = 1
FilterTreeRoleFilter = 2
current_filter_changed = pyqtSignal()
filters_changed = pyqtSignal(str)
def __init__(self, filter_path, type_list, menu=None,
title='Filter', parent=None):
""" Create a new filter dock.
:param str filter_path: Folder in the filesystem where filters are
saved and loaded.
:param list type_list: A list of (str, str) tuples. Each tuple
describes one filter type. The first element is the name of the
filter type. It will be displayed and used as parameter in the
filters_changed callback. The second element is the filename
that will be used to save and load the filters of this type.
:param :class:`PyQt4.QtGui.QMenu` menu: A menu that will be displayed
as context when the tree view is right-clicked.
:param str title: The title of the dock.
:param :class:`PyQt4.QtGui.QWidget` parent: The parent of this dock.
"""
QDockWidget.__init__(self, title, parent)
self.setupUi()
self.filter_path = filter_path
self.menuFilter = menu
self.filter_managers = {}
self.type_list = type_list
self.reload_filters(filter_path)
self.filterTreeWidget.dragMoveEvent = self._filter_drag_move
self.filterTreeWidget.dropEvent = self._filter_drag_end
self.filterTreeWidget.keyReleaseEvent = self._filter_key_released
self.filterTreeWidget.mouseReleaseEvent = \
self._filter_mouse_released
self.filterTreeWidget.setItemDelegate(
CheckableItemDelegate(self.filterTreeWidget))
self.filterTreeWidget.currentItemChanged.connect(
self._current_filter_changed)
self.filterTreeWidget.customContextMenuRequested.connect(
self._context_menu)
def reload_filters(self, filter_path=None):
""" Reload filters from disk.
:param str filter_path: Folder in the filesystem where filters are
saved and loaded. If ``None``, previous filter path is used.
Default: ``None``
"""
if filter_path:
self.filter_path = filter_path
for t in self.type_list:
self.filter_managers[t[0]] = FilterManager(
t[1], os.path.join(filter_path, t[1] + '.py'))
self.populate_filter_tree()
def get_active_filters(self, filter_type):
""" Return currently active filters for a filter type.
"""
return self.filter_managers[filter_type].get_active_filters()
# Method injection to handle the actual "drop" of Drag and Drop
def _filter_drag_end(self, event):
source = self.filterTreeWidget.currentItem()
source_name = source.text(0)
target = self.filterTreeWidget.itemAt(event.pos())
source_top, source_group = self._get_filter_item_coords(source)
parent = target.parent()
if parent:
if parent.parent():
target_top = parent.parent().text(0)
target_group = parent.text(0)
else:
target_top = parent.text(0)
if target.data(1, Qt.UserRole) == \
self.FilterTreeRoleGroup:
target_group = target.text(0)
else:
target_group = None
else:
target_top = target.text(0)
target_group = None
# Find drop position
target_index = self.filterTreeWidget.indexAt(event.pos())
target_height = self.filterTreeWidget.rowHeight(target_index)
pos = event.pos()
pos.setY((pos.y() - target_height / 2))
item_above_target = self.filterTreeWidget.itemAt(pos)
above_target = item_above_target.text(0) if item_above_target \
else None
item = self.filter_managers[source_top].get_item(source_name,
source_group)
try:
self.filter_managers[source_top].remove_item(source_name,
source_group)
if target_group:
self.filter_managers[target_top].add_item(item, source_name,
target_group)
else:
self.filter_managers[target_top].add_item(item, source_name)
except ValueError as e:
QMessageBox.critical(self, 'Error moving item', str(e))
return
self.filter_managers[target_top].move_item(source_name, above_target,
target_group)
self.populate_filter_tree()
self.filters_changed.emit(source_top)
# Method injection into the filter tree (to enable custom drag and drop
# behavior)
def _filter_drag_move(self, event):
QAbstractItemView.dragMoveEvent(self.filterTreeWidget, event)
source = self.filterTreeWidget.currentItem()
target = self.filterTreeWidget.itemAt(event.pos())
if not target:
event.ignore()
return
source_top = source.parent()
if source_top.parent():
source_top = source_top.parent()
target_top = target
if target_top.parent():
target_top = target_top.parent()
if target_top.parent():
target_top = target_top.parent()
# Drag and Drop is only allowed for the same filter type
if source_top != target_top:
event.ignore()
return
# Groups can only be dragged to top level
if source.data(1, Qt.UserRole) == self.FilterTreeRoleGroup:
if target.data(1, Qt.UserRole) == \
self.FilterTreeRoleGroup:
event.ignore()
return
if target.parent() != target_top and target != target_top:
event.ignore()
return
# This strange hack prevents from dragging to root level
if source_top == target:
pos = event.pos()
pos.setY(pos.y() - 2)
higher_target = self.filterTreeWidget.itemAt(pos)
if target != higher_target:
event.ignore()
# Method injection into the filter tree
# (to enable custom checkable behavior)
def _filter_key_released(self, event):
index = self.filterTreeWidget.currentIndex()
if index.data(CheckableItemDelegate.CheckTypeRole) and \
event.key() == Qt.Key_Space:
self._switch_check_state(index)
event.accept()
# Hack to repaint the whole current item:
self.filterTreeWidget.currentItem().setExpanded(False)
elif event.key() == Qt.Key_Delete:
self.delete_current_filter()
else:
QTreeWidget.keyReleaseEvent(self.filterTreeWidget, event)
# Method injection into the filter tree
# (to enable custom checkable behavior)
def _filter_mouse_released(self, event):
index = self.filterTreeWidget.indexAt(event.pos())
if index.data(CheckableItemDelegate.CheckTypeRole) and \
event.button() == Qt.LeftButton:
style = QApplication.instance().style()
radio_button_width = style.pixelMetric(
QStyle.PM_ExclusiveIndicatorWidth)
spacing = style.pixelMetric(QStyle.PM_RadioButtonLabelSpacing)
item = self.filterTreeWidget.itemFromIndex(index)
ind = 1
while item.parent():
ind += 1
item = item.parent()
indent = ind * self.filterTreeWidget.indentation()
if indent < event.x() < indent + radio_button_width + spacing:
self._switch_check_state(index)
event.accept()
# Hack to repaint the whole current item:
self.filterTreeWidget.currentItem().setExpanded(False)
return
QTreeWidget.mouseReleaseEvent(self.filterTreeWidget, event)
def _get_filter_item_coords(self, item):
parent = item.parent()
if parent.parent():
top = parent.parent().text(0)
group = parent.text(0)
else:
top = parent.text(0)
group = None
return top, group
def _switch_check_state(self, index):
item = self.filterTreeWidget.itemFromIndex(index)
top, group = self._get_filter_item_coords(item)
if index.data(CheckableItemDelegate.CheckTypeRole) == \
CheckableItemDelegate.CheckBoxCheckType:
item.setData(0, CheckableItemDelegate.CheckedRole,
not index.data(CheckableItemDelegate.CheckedRole))
f = self.filter_managers[top].get_item(item.text(0), group)
f.active = item.data(0, CheckableItemDelegate.CheckedRole)
else:
parent = item.parent()
if not parent:
siblings = (self.filterTreeWidget.topLevelItem(x) for x in
xrange(self.filterTreeWidget.topLevelItemCount()))
else:
siblings = (parent.child(x) for x in
xrange(parent.childCount()))
for s in siblings:
s.setData(0, CheckableItemDelegate.CheckedRole, s == item)
f = self.filter_managers[top].get_item(s.text(0), group)
f.active = (s == item)
self.filters_changed.emit(top)
def current_filter_type(self):
""" Return the name of the currently selected filter group or filter.
If nothing is selected, None is returned.
"""
item = self.filterTreeWidget.currentItem()
top = None
if item:
while item.parent():
item = item.parent()
top = item.text(0)
return top
def current_filter_group(self):
""" Return the name of the currently selected filter group. If a
from inside a group is selected, the name of that group is returned.
If a group or no item is selected, None is returned.
"""
item = self.filterTreeWidget.currentItem()
group = None
if item:
parent = item.parent()
if parent:
if parent.parent():
group = parent.text(0)
elif item.data(1, Qt.UserRole) == self.FilterTreeRoleGroup:
group = item.text(0)
return group
def current_name(self):
""" Return name of currently selected item.
"""
item = self.filterTreeWidget.currentItem()
return item.text(0)
def is_current_group(self):
""" Return if the currently selected item is a filter group.
"""
item = self.filterTreeWidget.currentItem()
return item.data(1, Qt.UserRole) == self.FilterTreeRoleGroup
def current_item(self):
""" Returns the current filter or filter group.
"""
item = self.filterTreeWidget.currentItem()
top = self.current_filter_type()
group = None
if item:
parent = item.parent()
if parent:
if parent.parent():
group = parent.text(0)
return self.filter_managers[top].get_item(item.text(0), group)
def group_filters(self, filter_type, group_name):
""" Returns a list of all filters for a given filter group.
:param str filter_type: Type of the filter group.
:param str group_name: Name of the group.
:returns: list
"""
return self.filter_managers[filter_type].get_group_filters(group_name)
def filter_group_dict(self):
""" Return a dictionary with filter groups for each filter type.
"""
d = {}
for n, m in self.filter_managers.iteritems():
d[n] = m.list_group_names()
return d
def delete_item(self, filter_type, name, group):
""" Removes a filter or a filter group.
:param str name: Name of the item to be removed.
:param str group: Name of the group to which the item belongs.
If this is None, a top level item will be removed.
Default: None
"""
self.filter_managers[filter_type].remove_item(name, group)
def delete_current_filter(self):
""" Removes the current filter. Checks with the user if he really
wants to remove the filter.
"""
item = self.filterTreeWidget.currentItem()
if not item:
return
if not item.parent():
return
if QMessageBox.question(self, 'Please confirm',
'Do you really want to delete "%s"?' % item.text(0),
QMessageBox.Yes | QMessageBox.No) == QMessageBox.No:
return
parent = item.parent()
if parent.parent():
top = parent.parent().text(0)
group = parent.text(0)
else:
top = parent.text(0)
group = None
try:
self.filter_managers[top].remove_item(item.text(0), group)
except StandardError as e:
QMessageBox.critical(self, 'Error removing filter', str(e))
else:
self.populate_filter_tree()
self.filters_changed.emit(top)
def add_filter(self, name, group, filter_type, code, on_exception,
combined, overwrite=False):
""" Add a new filter.
:param str name: Name of the new filter.
:param str group: Name of the group that the new filter belongs to.
If this is None, the filter will not belong to any group (root
level). Default: None
:param str filter_type: The type of the new filter
:param list code: List of lines of code in the filter function.
:param bool on_exception: Should the filter return True on an
exception? Default: ``True``
:param bool overwrite: If ``True``, an existing filter with the same
name will be overwritten. If ``False`` and a filter with the
same name exists, a value error is raised. Default: ``False``
"""
self.filter_managers[filter_type].add_filter(
name, code, on_exception=on_exception, group_name=group,
combined=combined, overwrite=overwrite)
self.populate_filter_tree()
self.filters_changed.emit(filter_type)
def add_filter_group(self, name, filter_type, exclusive, filters=None,
overwrite=False):
""" Add a new filter group.
:param str name: The name of the new filter group.
:param str filter_type: The name of the type the filter group belongs to.
:param bool exclusive: Determines if the new group is exclusive, i.e.
only one of its items can be active at the same time.
:param list filters: A list of filter objects that the new filter
group will contain.
Default: None
:param bool overwrite: If ``True``, an existing group with the same
name will be overwritten. If ``False`` and a group with the same
name exists, a value error is raised.
Default : ``False``
"""
self.filter_managers[filter_type].add_group(
name, exclusive, group_filters=filters, overwrite=overwrite)
self.populate_filter_tree()
self.filters_changed.emit(filter_type)
def save(self):
""" Save all filters.
"""
for m in self.filter_managers.itervalues():
m.save()
def populate_filter_tree(self):
""" Populates the filter tree widget from the filter data. Called
automatically from other methods when necessary.
"""
self.filterTreeWidget.clear()
for name, manager in sorted(self.filter_managers.items()):
top = QTreeWidgetItem(self.filterTreeWidget)
top.setText(0, name)
top.setFlags(Qt.ItemIsEnabled | Qt.ItemIsDropEnabled)
top.setData(1, Qt.UserRole, self.FilterTreeRoleTop)
top.setTextColor(0, Qt.gray)
top.setChildIndicatorPolicy(QTreeWidgetItem.ShowIndicator)
self.filterTreeWidget.addTopLevelItem(top)
if manager.list_items():
top.setExpanded(True)
for i in manager.list_items():
if isinstance(i[1], manager.FilterGroup):
group = QTreeWidgetItem(top)
group.setText(0, i[0])
group.setData(1, Qt.UserRole,
self.FilterTreeRoleGroup)
group.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable |
Qt.ItemIsDropEnabled |
Qt.ItemIsDragEnabled)
group.setChildIndicatorPolicy(
QTreeWidgetItem.ShowIndicator)
if i[1].list_items():
group.setExpanded(True)
top.addChild(group)
for f in i[1].list_items():
item = QTreeWidgetItem(group)
item.setText(0, f[0])
if f[1].active:
item.setData(0, CheckableItemDelegate.CheckedRole,
True)
else:
item.setData(0, CheckableItemDelegate.CheckedRole,
False)
if i[1].exclusive:
item.setData(0,
CheckableItemDelegate.CheckTypeRole,
CheckableItemDelegate.RadioCheckType)
else:
item.setData(0,
CheckableItemDelegate.CheckTypeRole,
CheckableItemDelegate.CheckBoxCheckType)
item.setData(1, Qt.UserRole,
self.FilterTreeRoleFilter)
item.setFlags(Qt.ItemIsEnabled |
Qt.ItemIsSelectable |
Qt.ItemIsDragEnabled)
group.addChild(item)
else:
item = QTreeWidgetItem(top)
item.setText(0, i[0])
if i[1].active:
item.setData(0, CheckableItemDelegate.CheckedRole,
True)
else:
item.setData(0, CheckableItemDelegate.CheckedRole,
False)
item.setData(0, CheckableItemDelegate.CheckTypeRole,
CheckableItemDelegate.CheckBoxCheckType)
item.setData(1, Qt.UserRole,
self.FilterTreeRoleFilter)
item.setFlags(Qt.ItemIsEnabled |
Qt.ItemIsSelectable |
Qt.ItemIsDragEnabled)
top.addChild(item)
def current_is_data_item(self):
""" Returns if the currently selected item is a filter or a filter
group.
"""
current = self.filterTreeWidget.currentItem()
return current is not None and \
current.data(1, Qt.UserRole) != self.FilterTreeRoleTop
def _current_filter_changed(self, current):
self.current_filter_changed.emit()
def _context_menu(self, pos):
if self.menuFilter:
self.menuFilter.popup(self.filterTreeWidget.mapToGlobal(pos))
def setupUi(self):
self.filterTreeWidget = QtGui.QTreeWidget(self)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding,
QtGui.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(3)
sizePolicy.setHeightForWidth(
self.filterTreeWidget.sizePolicy().hasHeightForWidth())
self.filterTreeWidget.setSizePolicy(sizePolicy)
self.filterTreeWidget.setContextMenuPolicy(
QtCore.Qt.CustomContextMenu)
self.filterTreeWidget.setDragEnabled(True)
self.filterTreeWidget.setDragDropMode(
QtGui.QAbstractItemView.InternalMove)
self.filterTreeWidget.setDefaultDropAction(QtCore.Qt.MoveAction)
self.filterTreeWidget.setAlternatingRowColors(False)
self.filterTreeWidget.setUniformRowHeights(False)
self.filterTreeWidget.setObjectName("filterTreeWidget")
self.filterTreeWidget.header().setVisible(False)
self.setWidget(self.filterTreeWidget) spykeviewer-0.4.1/spykeviewer/api.py 0000644 0001750 0001750 00000007073 12262550403 015725 0 ustar rob rob class __ConfigOptions:
def __init__(self):
# Ask about plugin paths if saving a file to a path that is not
# a plugin path
self.ask_plugin_path = True
# Save and reload a modified plugin before starting
self.save_plugin_before_starting = True
# Load selection on start
self.load_selection_on_start = True
# Default load mode (0 - Regular, 1 - Lazy, 2 - Cached lazy)
self.load_mode = 0
# Default cascading mode (False - Regular, True - Lazy)
self.lazy_cascading = False
# Use Enter key for code completion in console
self.codecomplete_console_enter = True
# Use Enter key for code completion in editor
self.codecomplete_editor_enter = True
# Additional parameters for remote script
self.remote_script_parameters = []
# Show duplicate channels (those that belong to multiple
# channel groups) multiple times in navigation
self.duplicate_channels = False
# Select all visible segments in navigation by default
self.autoselect_segments = False
# Select all visible channel groups in navigation by default
self.autoselect_channel_groups = False
# Select all visible channels in navigation by default
self.autoselect_channels = True
# Select all visible units in navigation by default
self.autoselect_units = False
def __setitem__(self, key, value):
self.__dict__[key] = value
def __getitem__(self, item):
return self.__dict__[item]
config = __ConfigOptions()
window = None
app = None
def start_plugin(name, current=None, selections=None):
""" Start first plugin with given name and return result of start()
method. Raises a SpykeException if not exactly one plugins with
this name exist.
:param str name: The name of the plugin. Should not include the
directory.
:param current: A DataProvider to use as current selection. If
``None``, the regular current selection from the GUI is used.
:param list selections: A list of DataProvider objects to use as
selections. If ``None``, the regular selections from the GUI
are used.
"""
return window.start_plugin(name, current, selections)
def start_plugin_remote(name, current=None, selections=None):
""" Start first plugin with given name using the remote script.
Raises a SpykeException if not exactly one plugins with
this name exist.
:param str name: The name of the plugin. Should not include the
directory.
:param current: A DataProvider to use as current selection. If
``None``, the regular current selection from the GUI is used.
:param list selections: A list of DataProvider objects to use as
selections. If ``None``, the regular selections from the GUI
are used.
"""
window.start_plugin_remote(name, current, selections)
def get_plugin(name):
""" Get plugin with the given name. Raises a SpykeException if
multiple plugins with this name exist. Returns None if no such
plugin exists.
:param str name: The name of the plugin. Should not include the
directory.
"""
return window.get_plugin(name)
def annotation_editor(neo_object):
""" Open a graphical annotation editor for a Neo object.
:param neo_object: Any Neo object.
"""
window.edit_annotations(neo_object)
def load_files(file_paths):
""" Open a list files.
:param list file_paths: The files to open as strings with the full
file path.
"""
window.load_files(file_paths) spykeviewer-0.4.1/spykeviewer/plugin_framework/ 0000755 0001750 0001750 00000000000 12262550403 020146 5 ustar rob rob spykeviewer-0.4.1/spykeviewer/plugin_framework/__init__.py 0000644 0001750 0001750 00000000000 12262550403 022245 0 ustar rob rob spykeviewer-0.4.1/spykeviewer/plugin_framework/plugin_manager.py 0000644 0001750 0001750 00000012407 12262550403 023514 0 ustar rob rob import os
import sys
import inspect
import traceback
import logging
import re
from spykeutils.plugin.analysis_plugin import AnalysisPlugin
logger = logging.getLogger('spykeviewer')
def _compare_nodes(x, y):
""" Directory Nodes should come first, then sort alphabetically.
"""
ret = int(isinstance(y, PluginManager.DirNode)) - \
int(isinstance(x, PluginManager.DirNode))
return ret or (1 - 2 * int(x.name < y.name))
class PluginManager:
""" Manages plugins loaded from a directory.
"""
class Node:
def __init__(self, parent, data, path, name):
self.parent = parent
self.data = data
self.name = name
self.path = path
def childCount(self):
return 0
def row(self):
if self.parent:
return self.parent.children.index(self)
return 0
class DirNode(Node):
def __init__(self, parent, data, path=''):
""" Recursively walk down the tree, loading all legal
plugin classes along the way.
"""
PluginManager.Node.__init__(self, parent, data, path, '')
self.children = []
if path:
self.addPath(path)
def child(self, row):
""" Return child at given position.
"""
return self.children[row]
def childCount(self):
""" Return number of children.
"""
return len(self.children)
def get_dir_child(self, path):
""" Return child node with given directory name.
"""
for n in self.children:
if os.path.split(n.path)[1] == os.path.split(path)[1] and \
isinstance(n, PluginManager.DirNode):
return n
return None
def addPath(self, path):
""" Add a new path.
"""
if not path:
return
self.name = os.path.split(path)[1]
for f in os.listdir(path):
# Don't include hidden directories
if f.startswith('.'):
continue
p = os.path.join(path.decode('utf-8'), f).encode('utf-8')
if os.path.isdir(p):
new_node = self.get_dir_child(p)
if new_node:
new_node.addPath(p)
else:
new_node = PluginManager.DirNode(self, None, p)
if new_node.childCount():
self.children.append(new_node)
else:
if not f.endswith('.py'):
continue
# Found a Python file, execute it and look for plugins
exc_globals = {}
try:
# We turn all encodings to UTF-8, so remove encoding
# comments manually
f = open(p, 'r')
lines = f.readlines()
if not lines:
continue
if re.findall('coding[:=]\s*([-\w.]+)', lines[0]):
lines.pop(0)
elif re.findall('coding[:=]\s*([-\w.]+)', lines[1]):
lines.pop(1)
source = ''.join(lines).decode('utf-8')
code = compile(source, p, 'exec')
sys.path.insert(0, path)
exec(code, exc_globals)
except Exception:
logger.warning('Error during execution of ' +
'potential plugin file ' + p + ':\n' +
traceback.format_exc() + '\n')
finally:
if sys.path[0] == path:
sys.path.pop(0)
for cl in exc_globals.values():
if not inspect.isclass(cl):
continue
# Should be a subclass of AnalysisPlugin...
if not issubclass(cl, AnalysisPlugin):
continue
# ...but should not be AnalysisPlugin (can happen
# when directly imported)
if cl == AnalysisPlugin:
continue
# Plugin class found, add it to tree
try:
instance = cl()
instance.source_file = p
except Exception:
etype, evalue, etb = sys.exc_info()
evalue = etype('Exception while creating %s: %s' %
(cl.__name__, evalue))
raise etype, evalue, etb
self.children.append(PluginManager.Node(
self, instance, p, instance.get_name()))
self.children.sort(cmp=_compare_nodes)
def __init__(self):
self.root = self.DirNode(None, None)
def add_path(self, path):
""" Add a new path to the manager.
"""
self.root.addPath(path) spykeviewer-0.4.1/spykeviewer/plugin_framework/data_provider_viewer.py 0000644 0001750 0001750 00000002432 12262550403 024725 0 ustar rob rob from spykeutils.plugin.data_provider_neo import NeoDataProvider
class NeoViewerProvider(NeoDataProvider):
def __init__(self, viewer, name='__current__'):
super(NeoViewerProvider, self).__init__(name, viewer.progress)
self.viewer = viewer
def blocks(self):
""" Return a list of selected Block objects.
"""
return self.viewer.neo_blocks()
def segments(self):
""" Return a list of selected Segment objects.
"""
return self.viewer.neo_segments()
def recording_channel_groups(self):
""" Return a list of selected
"""
return self.viewer.neo_channel_groups()
def recording_channels(self):
""" Return a list of selected recording channel indices.
"""
return self.viewer.neo_channels()
def units(self):
""" Return a list of selected Unit objects.
"""
return self.viewer.neo_units()
def data_dict(self):
""" Return a dictionary with all information to serialize the object.
"""
data = NeoViewerProvider._get_data_from_viewer(self.viewer)
data['name'] = self.name
return data
def refresh_view(self):
""" Refresh associated views of the data.
"""
self.viewer.refresh_neo_view() spykeviewer-0.4.1/spykeviewer/plugin_framework/filter_manager.py 0000644 0001750 0001750 00000037544 12262550403 023514 0 ustar rob rob import re
import codecs
from collections import OrderedDict
def _move_ordered_dict_item(o_dict, item_key, new_position):
""" Move an item in an ordered dictionary to a new position
:param OrderedDict o_dict: The dictionary on which the move takes place
:param key item_key: The key of the item to move. If the key does not
exist in the dictionary, this function will do nothing.
:param key new_position: The item to move will be inserted after the
item with this key. If this key does not exist in the dictionary,
the item will be moved to the first position.
"""
# Bad performance, use only on small dictionaries
# and/or non time-critical places
if not o_dict or not item_key in o_dict:
return
item = o_dict[item_key]
items = o_dict.items()
in_there = new_position in o_dict
o_dict.clear()
if not in_there:
o_dict[item_key] = item
for i in items:
if i[0] != item_key:
o_dict[i[0]] = i[1]
if i[0] == new_position:
o_dict[item_key] = item
class FilterManager:
""" Manage custom filters for object selection.
"""
class Filter:
""" Represents a single filter.
"""
def __init__(self, code, parent, active=True, combined=False,
on_exception=True):
""" Creates a new filter.
:param str code: List of lines of code in the filter function.
:param bool active: Is the filter active?
:param bool combined : When True, the filter gets a list of items
and returns a filtered list. Otherwise, the filter gets a
single item and returns ``True`` or ``False``.
:param bool on_exception: Should the filter return ``True`` on an
exception?
"""
self.code = code
self.active = active
self.combined = combined
self.on_exception = on_exception
self._parent = parent
def function(self):
return self._parent._get_filter_function(self)
class FilterGroup:
""" Represents a filter group.
"""
def __init__(self, exclusive=False):
self.filters = OrderedDict()
self.exclusive = exclusive
def list_items(self):
""" Returns a list of (name, filter) tuples.
"""
return self.filters.items()
def move_filter(self, item, new_pos):
""" Move an item to a new position.
:param str item: The key of the item to move. If the key does
not exist, this method will do nothing.
:param str new_pos: The item to move will be inserted after
the item with this key. If this key does not exist, the
item will be moved to the first position.
"""
_move_ordered_dict_item(self.filters, item, new_pos)
def __init__(self, parameter_list, filename):
""" Constructs filter object with a given method parameter list
(given as string) and filename.
"""
self.signature = parameter_list
self.filename = filename
self.filters = OrderedDict()
self.currently_loading = False
try:
self.load()
except IOError:
pass
def _load_filter_group(self, s, group):
# Work regular expression magic to extract method names and code
s = s.replace(' ', '\t')
nl = '(?:\n|\r|\r\n)' # Different possibilities for newline
it = re.finditer('^def filter\\(%s(?Ps?)\\)'
':(?P\s*#.*)?%s\t"""(?P[^"]*)"""'
'%s(?P(?:\t.*%s)*)'
% (self.signature, nl, nl, nl), s, re.M)
for i in it:
name = i.group('name')
# Remove starting tabs
body = [x[1:] for x in re.split(nl, i.group('body'))]
if body[-1] == '':
body = body[:-1]
flag_string = i.group('flags')
active = False
on_exception = False
combined = (i.group('plural') == 's')
if flag_string:
flags = flag_string.strip()[1:].split(',')
for f in flags:
f = f.strip()
if f == 'ACTIVE':
active = True
elif f == 'EXCEPTION_TRUE':
on_exception = True
self.add_filter(name, body, active, combined, on_exception, group)
def load(self):
""" Clears all filters and reloads them from file.
"""
self.currently_loading = True
f = codecs.open(self.filename, 'r', 'utf-8')
s = f.read()
# Search for groups and load filters for each group
start = 0
end = 0
while end >= 0:
group_pos = s.find('#GROUP ', start)
if group_pos >= 0:
self._load_filter_group(s[start:group_pos], None)
lines = s[group_pos:].splitlines()
group = lines[0][7:]
self.add_group(group, lines[1].strip() == '#EXCLUSIVE')
end = s.find('#ENDGROUP', group_pos)
if end >= 0:
self._load_filter_group(s[group_pos:end], group)
else:
self._load_filter_group(s[group_pos:], group)
start = end
else:
end = group_pos
if start >= 0:
self._load_filter_group(s[start:], None)
f.close()
self.currently_loading = False
def _write_filter(self, file, name, flt):
plural = ''
if flt.combined:
plural = 's'
file.write('\ndef filter(%s%s):' % (self.signature, plural))
if flt.active or flt.on_exception:
file.write(' #')
if flt.active:
file.write('ACTIVE')
if flt.on_exception:
file.write(',')
if flt.on_exception:
file.write('EXCEPTION_TRUE')
file.write('\n')
file.write('\t"""%s"""\n' % name)
for l in flt.code:
file.write('\t%s\n' % l)
def save(self):
""" Saves all filters to file.
"""
f = codecs.open(self.filename, 'w', 'utf-8')
f.write('# Filter file. All functions need to have the same parameter list.\n')
f.write('# All code outside of functions (e.g. imports) will be ignored!\n')
f.write('# When editing this file manually, use tab indentation or indent by 4 spaces,\n')
f.write('# otherwise the filter functions will not be recognized!\n')
for n, i in self.filters.iteritems():
if isinstance(i, self.FilterGroup):
f.write('\n#GROUP %s\n' % n)
if i.exclusive:
f.write('#EXCLUSIVE\n')
for fn, flt in i.filters.iteritems():
self._write_filter(f, fn, flt)
f.write('#ENDGROUP\n')
else:
self._write_filter(f, n, i)
f.close()
def add_item(self, item, name, group_name=None, overwrite=False):
""" Adds an existing item (Filter or FilterGroup).
:param str name: Name of the new filter.
:param item: The item to add.
:type item: :class:`Filter` or :class:`FilterGroup`
:param str group_name: Name of the group that the new filter belongs
to. If this is None, the filter will not belong to any groop
(root level) Default: None
:param bool overwrite: If ``True``, an existing item with the same
name will be overwritten. If ``False`` and an item with the
same name exists, a value error is raised.
Default: ``False``
"""
if not group_name:
if name in self.filters:
if not overwrite:
raise ValueError('A filter or filter group named "%s" already exists!' % str(name))
prev = self.filters[name]
if isinstance(prev, FilterManager.FilterGroup) \
and isinstance(item, FilterManager.Filter):
raise ValueError('A filter group named "%s" already exists!' % str(name))
if isinstance(prev, FilterManager.Filter) \
and isinstance(item, FilterManager.FilterGroup):
raise ValueError('A filter named "%s" already exists!' % str(name))
self.filters[name] = item
else:
if not group_name in self.filters:
raise ValueError('No filter group named "%s" exists!' % str(group_name))
g = self.filters[group_name]
if not overwrite and name in g.filters:
raise ValueError('A filter named "%s" already exists in group "%s"!' % (str(name), str(group_name)))
if g.exclusive and not self.currently_loading:
if any(f.active for f in g.filters.itervalues()):
item.active = False
elif all(not f.active for f in g.filters.itervalues()):
item.active = True
g.filters[name] = item
def add_group(self, name, exclusive, group_filters=None, overwrite=False):
""" Adds a filter group.
:param str name: The name of the new filter group.
:param bool exclusive: Determines if the new group is exclusive, i.e.
only one of its items can be active at the same time.
:param bool overwrite: If ``True``, an existing group with the same
name will be overwritten. If ``False`` and a group with the same
name exists, a value error is raised.
Default: False
"""
if name in self.filters:
prev = self.filters[name]
if isinstance(prev, FilterManager.Filter):
raise ValueError('A filter with this name already exists!')
if not overwrite:
raise ValueError('A filter group with this name already exists!')
g = self.FilterGroup(exclusive)
if group_filters:
if exclusive:
for f in group_filters.itervalues():
f.active = False
group_filters.values()[0].active = True
g.filters = group_filters
else:
g.filters = OrderedDict()
self.filters[name] = g
def add_filter(self, name, code, active=True, combined=False,
on_exception=True, group_name=None, overwrite=False):
""" Adds a filter.
:param str name: Name of the new filter.
:param list code: List of lines of code in the filter function.
:param bool active: Is the filter active?
Default: ``True``
:param bool on_exception: Should the filter return True on an
exception?
Default: ``True``
:param str group_name: Name of the group that the new filter belongs
to. If this is None, the filter will not belong to any group (root
level).
Default: None
:param bool overwrite: If ``True``, an existing filter with the same
name will be overwritten. If ``False`` and a filter with the
same name exists, a value error is raised. Default: ``False``
"""
self.add_item(self.Filter(code, self, active, combined, on_exception),
name, group_name, overwrite)
def get_item(self, name, group=None):
""" Returns a filter or filter group object.
:param str name : Name of the selected filter or filter group.
:param str group: Name of the group to which the filter belongs. Only
valid for filter objects, not for filter groups. If this is None,
a top level item is used.
Default: None
:returns: :class:`Filter` or :class:`FilterGroup`
"""
if not group:
if not name in self.filters:
raise KeyError('No item named "%s" exists!' % str(name))
return self.filters[name]
else:
if not group in self.filters:
raise KeyError('No group named "%s" exists!' % str(group))
g = self.filters[group]
if not isinstance(g, self.FilterGroup):
raise TypeError('Item "%s" is not a filter group!' % str(group))
if not name in g.filters:
raise KeyError('No item named "%s" exists!' % str(name))
return g.filters[name]
def get_group_filters(self, group):
""" Returns a list of all filters for a given filter group.
:param str group: Name of the group.
:returns: list
"""
if not group in self.filters:
raise KeyError('No item named "%s" exists!' % str(group))
g = self.filters[group]
if not isinstance(g, self.FilterGroup):
raise TypeError('Item "%s" is not a filter group!' % str(group))
return g.filters
def _get_filter_function(self, filter):
local = {}
plural = ''
if filter.combined:
plural = 's'
s = 'def fun(%s%s):\n\t' % (self.signature, plural)
s += '\n\t'.join(filter.code)
exec(s, {}, local)
return local['fun']
def list_items(self):
""" Returns a list of (name, :class:`Filter` or :class:`FilterGroup`)
tuples.
"""
return self.filters.items()
def move_item(self, item, new_pos, group_name=None):
""" Move an item to a new position.
:param key item: The key of the item to move. If the key does
not exist, this method will do nothing.
:param key new_pos: The item to move will be inserted after the item
with this key. If this key does not exist, the item will be moved
to the first position.
"""
if not group_name:
_move_ordered_dict_item(self.filters, item, new_pos)
else:
self.filters[group_name].move_filter(item, new_pos)
def get_active_filters(self):
""" Returns a list of tuples with all active filters contained in
this manager and their names.
"""
ret = []
for i_name, i in self.filters.iteritems():
if isinstance(i, self.FilterGroup):
for f_name, f in i.filters.iteritems():
if f.active:
ret.append((f, f_name))
else:
if i.active:
ret.append((i, i_name))
return ret
def list_group_names(self):
""" Returns a list of names of filter groups.
"""
names = []
for n, i in self.filters.iteritems():
if isinstance(i, self.FilterGroup):
names.append(n)
return names
def remove_item(self, item, group=None):
""" Removes an item from the filter tree.
:param str item: Name of the item to be removed.
:param str group: Name of the group to which the item belongs.
If this is None, a top level item will be removed.
Default: None
"""
if not group:
if not item in self.filters:
raise KeyError('No item named "%s" exists!' % str(item))
self.filters.pop(item)
else:
if not group in self.filters:
raise KeyError('No group named "%s" exists!' % str(group))
g = self.filters[group]
if not isinstance(g, self.FilterGroup):
raise TypeError('Item "%s" is not a filter group!' % str(group))
if not item in g.filters:
raise KeyError('No item named "%s" exists!' % str(item))
g.filters.pop(item)
def group_exclusive(self, name):
""" Returns if a group is exclusvie.
"""
if not name in self.filters or not isinstance(self.filters[name], self.FilterGroup):
return False
return self.filters[name].exclusive spykeviewer-0.4.1/spykeviewer/tests/ 0000755 0001750 0001750 00000000000 12262550403 015735 5 ustar rob rob spykeviewer-0.4.1/spykeviewer/tests/test_plugin_manager.py 0000644 0001750 0001750 00000002635 12262550403 022344 0 ustar rob rob try:
import unittest2 as ut
except ImportError:
import unittest as ut
import sys
import os
from spykeviewer.plugin_framework.plugin_manager import PluginManager
class TestPluginManager(ut.TestCase):
def setUp(self):
self.manager = PluginManager()
if hasattr(sys, 'frozen'):
module_path = os.path.dirname(sys.executable)
else:
file_path = os.path.abspath(os.path.dirname(__file__))
module_path = os.path.dirname(file_path)
self.manager.add_path(os.path.join(module_path, 'plugins'))
def test_not_empty(self):
self.assertGreater(self.manager.root.childCount(), 0,
'Plugin manager with default path is empty')
def test_directories_loaded(self):
num_dirs = 0
for n in self.manager.root.children:
if isinstance(n, PluginManager.DirNode):
num_dirs += 1
self.assertGreater(num_dirs, 0, 'No plugin directories loaded')
def test_plugins_loaded(self):
def find_plugins(dir_node):
plugins = 0
for n in dir_node.children:
if isinstance(n, PluginManager.DirNode):
plugins += find_plugins(n)
else:
plugins += 1
return plugins
self.assertGreater(find_plugins(self.manager.root), 0,
'No plugins loaded')
if __name__ == '__main__':
ut.main()
spykeviewer-0.4.1/spykeviewer/tests/__init__.py 0000644 0001750 0001750 00000000000 12262550403 020034 0 ustar rob rob spykeviewer-0.4.1/spykeviewer/tests/test_main_window.py 0000644 0001750 0001750 00000005735 12262550403 021673 0 ustar rob rob try:
import unittest2 as ut
except ImportError:
import unittest as ut
import sys
import os
import platform
import locale
# Hack to circumvent OS X locale bug
if platform.system() == 'Darwin':
if os.getenv('LC_CTYPE') == 'UTF-8':
os.environ['LC_CTYPE'] = ''
else:
locale.setlocale(locale.LC_ALL, '')
# Use new style API
import sip
sip.setapi('QString', 2)
sip.setapi('QDate', 2)
sip.setapi('QDateTime', 2)
sip.setapi('QTextStream', 2)
sip.setapi('QTime', 2)
sip.setapi('QVariant', 2)
sip.setapi('QUrl', 2)
sip.setapi('QVariant', 2)
from PyQt4 import QtGui
from PyQt4.QtTest import QTest
from PyQt4.QtCore import Qt
from spykeviewer.ui.main_window_neo import MainWindowNeo
class TestMainWindow(ut.TestCase):
@classmethod
def setUpClass(cls):
cls.app = QtGui.QApplication(sys.argv)
cls.win = MainWindowNeo()
@classmethod
def tearDownClass(cls):
cls.win.close()
def test_object_selections(self):
self.assertNotEqual(self.win.neo_blocks(), None)
self.assertNotEqual(self.win.neo_segments(), None)
self.assertNotEqual(self.win.neo_channel_groups(), None)
self.assertNotEqual(self.win.neo_channels(), None)
self.assertNotEqual(self.win.neo_units(), None)
def test_plugins_loaded(self):
self.assert_(
self.win.plugin_model.hasIndex(0, 0),
'Plugin model is empty')
def test_filter_tree(self):
self.assertEqual(
self.win.filterDock.filterTreeWidget.topLevelItemCount(), 5)
def test_file_tree(self):
self.assert_(
self.win.fileTreeView.model().hasIndex(0, 0),
'Filesystem model is empty')
def test_console(self):
QTest.keyClick(self.win.console, Qt.Key_1)
QTest.keyClick(self.win.console, Qt.Key_Plus)
QTest.keyClick(self.win.console, Qt.Key_1)
lines = self.win.console.get_line_count()
self.assertEqual(
self.win.console.get_text_line(lines - 1), '>>> 1+1')
QTest.keyClick(self.win.console, Qt.Key_Enter)
lines = self.win.console.get_line_count()
self.assertEqual(self.win.console.get_text_line(lines - 1), '>>> ')
def test_history(self):
history_lines = self.win.history.get_line_count()
QTest.keyClick(self.win.console, Qt.Key_5)
QTest.keyClick(self.win.console, Qt.Key_Enter)
self.assertEqual(
history_lines + 1, self.win.history.get_line_count())
self.assertEqual(
self.win.history.get_text_line(history_lines), '5')
def test_plugin_editor(self):
self.assertEqual(
self.win.pluginEditorDock.tabs.currentWidget(), None)
self.win.actionNewPlugin.trigger()
self.assertNotEqual(
self.win.pluginEditorDock.tabs.currentWidget(), None)
self.assertEqual(
u'\n'.join(self.win.pluginEditorDock.code()),
unicode(self.win.pluginEditorDock.template_code + '\n'))
if __name__ == '__main__':
ut.main() spykeviewer-0.4.1/spykeviewer/splash_rc.py 0000644 0001750 0001750 00000274754 12262550403 017146 0 ustar rob rob # -*- coding: utf-8 -*-
# Resource object code
#
# Created: Do. Jun 6 13:05:36 2013
# by: The Resource Compiler for PyQt (Qt v4.8.2)
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore
qt_resource_data = "\
\x00\x00\x5a\xbb\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\xde\x00\x00\x00\x5c\x08\x06\x00\x00\x00\x01\x1f\x0b\x64\
\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xf1\x00\xf1\x00\xf1\xf2\xab\
\x19\xff\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x11\x00\x00\
\x0b\x11\x01\x7f\x64\x5f\x91\x00\x00\x00\x07\x74\x49\x4d\x45\x07\
\xdd\x06\x06\x0a\x1b\x1e\x96\xf1\x7c\x02\x00\x00\x20\x00\x49\x44\
\x41\x54\x78\xda\xec\xbd\x77\x98\x5d\xd5\x95\xe6\xfd\x5b\xfb\xdc\
\x54\xa5\x0a\xaa\xa4\x0a\x4a\xa5\x8c\x42\x95\x4a\x81\x0c\x92\xc8\
\xd9\x18\x03\xc6\x60\xbb\x3d\x26\x19\xdb\xed\xb1\xbf\xef\x99\x69\
\xc7\xee\xe9\x99\xf9\xda\x3d\x8d\xdb\x9e\xe9\x6e\x63\x43\x7b\x6c\
\x6c\x93\x4c\xce\x48\x20\x82\x22\x92\x90\x48\x42\x19\x94\x53\x29\
\x94\x4a\xaa\x52\xc5\x7b\xef\xd9\xdf\x1f\x27\xed\x7d\xee\x2d\x81\
\x7a\xe6\xe9\xbf\x7c\x79\x44\x49\xb7\xee\x3d\x67\x9f\x1d\xdf\xf5\
\xae\xb5\xde\x25\xff\xe9\x81\xff\xa4\xcb\xcb\xcb\xf9\xf3\xeb\xcf\
\xaf\x3f\xbf\xfe\x7d\x5e\xdb\xb6\x6d\x43\x01\x74\x77\x77\xff\xb9\
\x37\xfe\xfc\xfa\xf3\xeb\xdf\x69\xd1\x01\xde\xc2\xfb\xf3\xe2\xfb\
\xf3\xeb\xcf\xaf\x7f\xbf\x45\x67\x2d\xbc\x3f\x2f\xbe\x3f\xbf\xfe\
\xfc\xfa\xf7\x59\x74\x00\x89\xf8\x07\xba\xbb\xbb\x29\x6f\xf7\x6c\
\x3e\x0d\x48\xf0\x7f\x0d\x22\x9f\x7e\x03\xef\xd3\xf1\x7f\xd9\xef\
\xa2\xfd\x9f\xe2\xbf\x1f\xfe\x3a\xfc\x45\xe1\x77\xc2\xd6\x68\x24\
\x6c\xd5\xa7\xdd\xbf\xd8\x1b\xde\x7b\x5a\x8a\x7f\x7f\xe8\x2f\x0d\
\xfd\xf6\xa9\xae\x30\xe4\x57\xb4\xf1\xfc\x9f\xda\x7f\xa0\xfd\xbf\
\xca\x67\x6d\x8a\xdf\x95\xf6\x73\x06\xfd\x1d\x0c\xe6\x67\xee\x45\
\xbb\xd3\x8a\x0f\xcd\x67\xec\x27\xbb\xf3\x4f\xa3\x4b\x4f\xf9\xb0\
\xde\x75\x62\xbd\x63\xcd\x2b\xf9\x4c\xf7\x2a\x3a\x22\xa7\x9e\x2c\
\x9f\xbe\xe8\xf4\xb6\x82\xf7\x12\xc5\x3e\x28\x4a\xfc\x75\x11\x3d\
\x88\x28\x6f\x9e\x68\xec\xb5\x11\x8d\x43\xb4\x28\x0a\x1f\xc1\x18\
\x30\xff\x9c\x15\xed\xfd\x45\x87\x0b\x30\x38\x80\x75\x78\x2d\xac\
\x7b\xf9\x6d\x42\xc2\xb7\xac\x6b\x1a\x1f\xf5\xfe\x22\xe1\xe4\x8e\
\x3e\x26\xe1\x82\x17\x91\xf0\x79\xc4\xff\xad\x36\xee\x55\x70\x69\
\xf1\xfa\x43\x5b\x4b\x2a\x76\x6f\x89\x2d\x10\x6d\x8e\x57\xec\xa9\
\x04\x7b\x88\x83\xfb\x06\x5f\xd4\x84\x1b\x8c\x77\x6d\x41\xfc\x06\
\x5b\x93\x23\xe8\x1b\x31\x17\x86\x0e\xba\x32\x36\x5f\xfc\x7f\x29\
\x31\x1e\x36\x18\x48\x41\xb4\xdf\x3e\x11\xbf\x0f\xb4\x75\xff\xf0\
\xd9\x34\xe8\xf0\x61\x31\x76\x64\x6d\x5c\x5f\x1b\xd3\xc4\x9e\x13\
\xa2\x40\x87\xe3\xa9\xc3\xae\xd0\xda\xde\x58\xa2\x9b\xf9\xfd\x17\
\x3c\xbf\x44\x53\x26\xf8\x9c\x77\x4b\x31\xe6\x4f\xf4\x78\xe2\x1f\
\x1c\x2a\xd6\xe4\x60\xef\xb3\x37\xc9\xd8\xd8\x06\x1f\xb4\x06\x98\
\x22\x07\x84\xb6\x7e\x04\x9f\xd5\x14\x9d\x2a\xc5\x17\x9e\x12\xaf\
\xc5\xe1\x42\xd7\x12\x2e\x10\x91\xa8\x71\xda\xef\xb1\x10\xaf\x6a\
\xbf\x73\xf0\x3a\x41\x82\x6b\x04\x0f\x27\xa0\x45\x7b\x9d\xa6\x62\
\x83\x61\x4c\x1e\x2d\x82\xd2\xd1\x84\x40\x07\x6b\x32\xda\xa9\xc3\
\x41\x52\x46\x07\x06\x8b\x43\x8c\xa1\xf6\x46\xd9\xbf\x9d\x04\xdb\
\x48\xf8\x79\x6f\x0e\x7a\x93\xce\x9b\x5c\xde\x4f\xb3\xdf\x29\x32\
\xc9\x45\xab\x70\x11\x6b\x1d\x9d\xc1\x5e\xd7\xf9\x5b\x90\x71\x8a\
\x7b\x93\x42\xbc\xad\xc6\x9f\xc4\x12\x3b\x1b\xb5\x0a\x16\xb7\xb1\
\xf9\x99\xdb\x99\x8e\x26\x92\x79\x5a\x6a\xbf\x83\xc4\x5f\x6c\x5a\
\x11\x76\xb8\xd5\x7e\x7f\x22\x88\x48\xec\xb4\xf5\xef\x22\xca\x5e\
\x26\x22\xa8\xf0\xc4\xd5\x28\xe5\xb7\x3b\xd8\x38\xc5\x18\xb3\xb0\
\xb3\x82\xd6\x46\x2d\x0f\xff\x66\x4c\xe2\xa8\x6f\x54\x34\x0f\x54\
\xb0\xc1\x6a\xff\xf7\x12\x4d\x01\x11\x6b\xaf\x0a\x36\x02\x15\x6c\
\x9d\x62\x35\x07\x89\x6f\x62\xca\x1b\x5b\x25\xd1\xaa\x15\x73\x6b\
\x10\x63\x43\xd7\xd1\x53\x68\xd1\xc6\xb8\x1b\x5b\x7f\x38\x57\xa3\
\x35\x82\xd1\xce\xa0\x3f\x14\x80\xfb\x19\x17\x5e\x34\x00\xd1\xd4\
\x50\xf1\x1d\xda\x38\xdb\xec\xcd\xc1\xef\x76\x63\xbd\x98\x10\x49\
\xfc\x7f\x68\xed\x22\xa2\xc2\xdd\xa9\xa7\xb7\x97\x74\x3a\x4d\x45\
\x79\x05\x95\xc3\x87\x33\xbc\xb2\x92\xd2\xd2\x52\x12\xc9\x04\x82\
\x90\xcd\x65\xe9\xeb\xeb\xe3\x78\xe7\x71\x8e\x1d\x3b\x46\x57\x57\
\x17\xfd\xfd\x7d\xa4\x52\x49\x4a\x4a\x4a\xa2\xc1\x94\x68\xe0\xc3\
\xf9\xa9\xc4\xda\xd5\xa2\x36\x69\xe3\x94\x11\x63\x52\xc7\x4e\x4f\
\x63\xe2\x7a\x0b\x42\xac\x23\x47\xcc\xbe\xd1\xe6\x7b\x76\x7f\x98\
\xeb\x2c\x5a\xdc\x62\xf7\xa7\x10\x83\xd2\x12\xad\x11\xb1\x3f\x8f\
\x71\x1a\xc5\x2e\x6e\x2d\xb8\xf0\x5a\x22\xc5\x4f\x40\x63\xa7\x0f\
\xb7\x51\xd1\xd6\x08\x47\xcd\x8d\xda\x19\xa1\xe5\x60\xc3\x95\x68\
\x82\x8a\x31\x43\xb4\xd0\x7e\xa8\x9d\xce\x8e\x63\x56\xa7\xd6\xd7\
\xd7\x53\x53\x53\x13\x9e\x34\x62\x0e\x4e\xec\xc6\x12\xac\x78\xa3\
\xe5\x41\xbf\x9b\xdd\xe3\x6d\xda\x80\x8a\x96\xbd\xb9\x58\xed\xc5\
\x6e\xb7\xd3\xdc\x20\xec\x5e\x2e\x02\xb1\x45\xac\xef\x9a\xfb\x90\
\x35\x3d\x74\x71\xf8\x39\x34\xd4\xd4\x62\xa1\xc4\x70\x27\x0a\xff\
\x1a\xed\x64\xa6\x6d\x26\xc6\x9d\xe2\xb0\x4f\x44\x87\xfb\xa9\x68\
\x45\x7f\x7f\x1f\x89\x54\x9a\x49\x13\x26\x32\x69\xf2\x24\xea\x47\
\x8c\x40\x29\xa1\xbf\xaf\x9f\xbe\xbe\x3e\xfa\xfb\xfa\xc8\x66\xb3\
\x68\xed\x92\x4c\x95\x51\x92\x69\x22\x93\xc9\x50\x52\x5a\x42\xde\
\xd5\x74\x76\x1e\x67\xdb\xb6\x8f\xd9\xb0\x71\x03\x5d\x5d\x27\xa8\
\xab\xad\x89\x75\xaa\x0e\x27\x6e\x68\x05\xc4\xf0\x72\xb8\x40\xc4\
\x7f\x1e\x31\x9e\x47\xa2\x13\x28\xdc\x7a\xe3\xd0\xcb\x7c\x5e\xe3\
\xf4\x34\x91\x88\x8e\xf7\x41\x6c\xa1\xee\xdb\xb7\x97\x7d\xfb\xf6\
\xd3\x71\xac\x83\x63\x1d\x1d\xb8\xae\x4b\x59\x59\x19\x65\x65\x65\
\x94\x97\x97\x33\x7a\xf4\x68\x46\x8e\x6c\xc2\x51\x0e\xc5\x80\x0e\
\xc6\xa2\x31\x4f\x7b\x0c\x04\x80\x69\xd6\x11\xbc\x67\x8c\x69\x01\
\x7c\x16\x0b\x9a\x87\x50\x5f\xb0\xa0\x9f\xf8\xbb\x7e\x04\x3d\x62\
\xf6\x91\xdf\xaf\xeb\xd6\xae\x65\xf5\xea\xd5\xd6\x3c\xbb\xea\xaa\
\xab\x98\x77\xe1\x85\x85\x48\xd9\xd8\x63\xac\x99\xa5\x8b\x6f\x88\
\xca\x00\xc5\x52\x70\xf2\xda\x98\x3f\x6c\x6f\xdc\x8e\x88\x1d\x34\
\xc1\x22\xb6\x6d\x3c\x6d\x9d\xd8\x5a\xdb\xfd\x6c\x76\xb2\x10\xf5\
\xfb\x67\x5f\x78\xa2\x2c\xdb\x5b\xfb\x36\x83\x37\x09\x83\x1d\x5c\
\x1b\x50\xc4\xec\x2e\x1f\x36\xf9\x13\x30\x98\xd0\xfe\x71\x84\xa0\
\xe9\xe9\xe9\xa5\xba\xb6\x8e\xf9\x0b\x2e\x62\xc2\xf8\x71\x64\x07\
\x07\xd8\xb6\x75\x2b\x2b\x96\xbc\xc5\xee\x3d\x7b\x39\x76\xec\x18\
\x9d\x9d\x9d\x1e\x34\x70\xc4\x83\x72\x7e\x3b\x4a\x32\x19\xea\xea\
\xea\x68\x68\x68\x60\xe6\xcc\x99\xcc\x6a\x6b\x61\xfe\xfc\x0b\xd9\
\xb5\x7b\x0f\x2b\x56\xac\x60\xcf\x9e\x3d\xd4\xd6\x0c\x27\xe1\x24\
\xbd\x7b\x87\x98\x4e\x8c\x13\x59\x88\xcc\xd7\xc0\xbe\xb1\x37\x99\
\xf0\xd7\xa1\x3d\x2a\xe1\x24\x0a\x06\x22\xba\x9e\x36\xcd\xd7\x70\
\x67\xd6\x3e\x64\x0a\xbe\xaf\x95\xb7\x38\x82\x3d\xba\xa3\xa3\x83\
\x57\x5e\x79\x85\x8d\x1b\x37\x7e\xaa\x81\x9e\x48\x24\x18\x35\x72\
\x14\x5f\xb8\xf1\x46\xea\xea\xea\xac\x53\xd9\x7c\x14\x25\x2a\x22\
\x13\xfc\x85\x1e\xf5\x7d\xd0\xc0\x60\x62\x48\xf4\xbc\x86\x1d\x6d\
\x4e\x56\x6d\x9c\xc4\xc1\x38\x04\x50\x2d\xe8\x4b\xb1\x1a\x62\xac\
\xbe\x00\xf6\x6b\x55\x94\x99\x13\x3c\xac\x1f\x20\x4c\x15\x9e\x47\
\x52\x40\xc0\x85\x28\x4a\xdb\x8c\x42\xfc\xf4\x0b\xa1\x7d\x04\x92\
\xa3\x4d\x21\xb8\x9e\x18\x70\x31\x32\x12\xc2\xfe\xb2\x61\xbd\xb2\
\x0d\x4f\x15\xd9\xf9\xca\xb4\xe9\x4d\xe8\xaf\x95\xbf\xc1\x2b\xbc\
\xe3\xf7\xb4\x6c\x3c\x62\x47\xb4\x01\xcf\x7c\x93\x58\x59\x67\xa9\
\x2a\x84\xa1\x62\x1e\xe2\x90\xcf\xe5\x48\x24\x53\x5c\xff\xf9\x1b\
\x68\x1e\x3b\x86\x3d\x3b\x77\xf1\xe8\xc3\x0f\xb1\x6a\xf5\x6a\x06\
\x06\x06\x3c\xa8\x59\x59\xc9\xf0\xea\x2a\x46\x34\xd4\xe3\x38\x8e\
\x71\xba\xb8\xe4\xf3\x2e\xd9\x6c\x96\xbe\xfe\x7e\x36\x6e\xde\xcc\
\x9a\xb5\x6b\xd1\xae\x66\x66\x6b\x2b\x97\x5d\x76\x29\x5f\xff\xda\
\x57\xd9\x7f\xe0\x20\x2f\xbd\xbc\x90\xfd\xfb\xf7\x31\x6a\x64\x63\
\x34\xb9\xc2\x56\x4b\x1c\x29\x1a\x2b\x4e\x0a\x98\x40\x61\x88\xbf\
\x88\x0d\x45\x8a\x91\x5e\x52\xf0\xd9\xe8\xaa\x07\x0f\x1e\xe4\x97\
\xbf\xfc\x25\xb9\x5c\xee\x33\x31\x63\xb9\x5c\x8e\x5d\xbb\x77\x71\
\xf2\x64\x37\xf5\xf5\x23\x8a\xb0\x71\x12\x99\xcd\x88\x05\xa3\x0a\
\xac\x04\x93\xa0\x32\x71\xa4\xd8\xd7\x0b\xd7\x2c\x12\xb3\x77\xc5\
\x36\x79\x87\x80\xaf\x26\x74\x2f\x4a\x0a\x8a\xbf\xc9\x17\x00\xe8\
\x08\x5d\x88\xb1\xa9\x6b\x7f\x6e\x86\xd0\x34\x4e\xe0\x15\x3c\x5b\
\x21\xac\x24\xb6\x91\x20\xde\xda\x08\xec\x7d\xbb\xef\x74\x71\xd8\
\x5b\x60\x82\xc5\xa1\xbf\x81\xa6\xb4\x9c\xde\x89\x67\xd1\x3d\x16\
\xa2\x2a\x1c\xb4\x00\xe7\x87\x3b\xac\x2e\x44\x1d\x5d\xdd\x27\x99\
\x3b\xf7\x4c\x2e\xb8\xe0\x3c\xf6\xec\xda\xcd\x3f\xff\xcf\xff\xc9\
\xbb\xef\xbd\x47\x69\x59\x19\x63\xc6\x8c\x21\x9d\xc9\x90\x48\x24\
\x7c\xf6\x4e\x50\x4a\x59\x06\xaf\x16\xd0\xae\x46\x6b\x97\x4a\x17\
\xea\x47\x8c\x20\x97\xcb\x91\xcd\x66\xd9\x77\x60\x3f\x7f\xf7\xf7\
\x7f\xcf\xc4\x09\x13\xb8\xf9\xa6\x9b\xf8\xe6\x3d\x77\xf1\xce\x3b\
\xeb\x78\xf1\xa5\x97\xa9\x28\x1f\x46\x45\x45\x45\x64\x9f\x19\xcc\
\x9c\x77\x61\x15\xc1\x2e\x7f\xab\x13\x1d\xe3\x41\xc5\x24\x0c\xfd\
\x2f\xdb\x88\x34\x06\x5f\xc4\x86\xbb\x31\x58\x93\xcf\xe7\x78\xe2\
\x89\x27\x3e\xf3\xa2\xb3\xc7\xc6\x27\x29\x0c\x58\xaf\x63\x44\x81\
\x05\xfb\x65\x68\x3b\x83\x18\xc8\x94\x90\x59\xf4\x27\x96\xd2\x31\
\xbc\x5c\xc8\xcf\x0a\xc5\xa0\xb9\x2e\x5c\x87\x52\xfc\x59\x94\x65\
\xeb\x1a\x4f\x22\xda\x20\x10\xc5\x9a\xee\x21\x83\x19\x10\x75\x36\
\xff\x1a\x73\x4b\x05\xe6\x53\xc4\x9a\xea\x00\xf6\xab\x88\xf5\x53\
\x01\x59\x18\x83\xd4\xc1\xdc\x30\x69\xac\xe0\x16\xca\x64\xf4\x03\
\x38\x5f\x84\x41\x3f\x2d\x1b\x2f\x34\x74\x8b\x6d\xff\x3a\x76\x4c\
\x07\x03\xe6\xc3\xd1\xb0\x45\x7e\x13\xb2\xd9\x3c\xb7\xde\x7a\x1b\
\xb5\xd5\x55\x3c\xfe\xe8\x63\xbc\xbc\xf0\x15\x6a\x32\x69\xbe\x71\
\xe4\x30\x07\x6a\x6b\x69\x2f\x2f\x27\x91\x4c\x90\x4c\xa6\x10\x51\
\x5e\xc7\xfa\x17\x0d\x76\x0d\x1d\x32\x4f\x1a\xd7\xf5\x20\x47\x2e\
\x97\x25\x9b\xcd\x31\x66\x4c\x86\x91\x23\x9b\x38\x72\xf8\x28\x3f\
\xfd\xfb\xbf\xe7\xcc\x33\xcf\xe4\x1b\x77\xdf\xcd\x7f\xfe\x4f\xff\
\x2f\xbf\x7d\xf0\xf7\xec\xdf\x7f\x80\xd1\xa3\x9b\x8c\xa9\xa2\x6d\
\x56\x55\x54\x04\x87\x83\xf6\x63\x4c\x42\x83\xa5\x17\x13\x7a\x2a\
\x1f\xfa\x84\x06\x3d\x11\xcc\x0e\xe1\x76\xc0\x32\x06\xf6\xa5\xb0\
\x7a\xed\x5a\x0e\x1c\x38\x50\x74\x40\xaa\xaa\xaa\x18\x35\x6a\x14\
\x83\x83\x83\x1c\x3d\x7a\x94\xce\xce\x4e\x5c\xd7\xb5\x17\x9e\x0a\
\xac\x1a\xf3\xb4\x08\xd8\xc5\x88\xe8\xd0\x81\x4b\x48\xa2\x85\xe5\
\x31\xc2\x12\xb9\x59\x7c\x2c\xad\x8c\x09\x17\xd9\x89\x3e\xc9\x16\
\x6c\x4e\x86\xfd\x22\xe6\xc0\x47\xfe\x21\xbf\xfb\xc4\x86\xba\xd1\
\xb9\x5b\xb0\xf0\x95\x52\x16\x29\xa5\x0d\xbb\x3c\xc2\x90\x06\x2d\
\x6e\x9c\xbe\x26\xe0\x0c\x08\x41\x6d\x92\x55\x5a\x17\x45\x31\x21\
\x85\xa1\x25\xe2\x6b\xb4\x8d\xec\xc2\x73\x5f\x94\xe1\x12\x34\x19\
\x5a\x6d\xb1\xcc\x82\xc1\xbc\x5a\x5e\x45\x39\x4d\xa8\x29\x62\x3b\
\xb9\xe3\x66\x5c\xec\xb2\xd1\xc6\x15\xd1\xea\xae\xab\x49\x24\x53\
\x7c\xe9\x4b\x37\x72\xbc\xb3\x83\x1f\xff\xf0\x87\x1c\x3c\x7c\x88\
\xb3\xa6\x4e\xe5\x96\x87\x1e\xa2\xe9\xf0\x61\xf4\x07\x1f\xf2\xd8\
\x8f\x7e\xc4\xc9\x4c\x09\xa9\x54\x8a\x54\x2a\x45\x32\x99\xc4\x71\
\x9c\x90\xde\x77\xf3\x79\x5c\xad\xc9\xe7\xf3\xe4\xf3\x79\x72\xb9\
\x1c\xf9\x7c\x9e\x44\xc2\x21\x93\xd1\xe4\xf3\x2e\xb9\x5c\x9e\x74\
\x3a\x43\x7d\x43\x3d\xbb\x76\xed\xe2\xbb\xdf\xfd\x1e\xdf\xfe\xf6\
\xb7\xf8\x7f\xbe\xfb\x1f\xf9\xfd\x1f\x1e\xe2\x93\x8f\xb7\xd1\xdc\
\x3c\xa6\x88\xff\x4c\x0c\x83\x3c\x06\x29\x63\xec\x54\x38\x48\x12\
\x67\x14\x7d\x17\x81\x35\xc5\x62\x70\xdb\x80\xb4\xfb\xf6\xed\x2b\
\xe8\xf3\xf1\xe3\xc7\xf3\xb5\xaf\x7d\x8d\xb2\xb2\x32\xeb\xfd\x7c\
\x3e\xcf\xb6\x6d\xdb\x58\xb3\x66\x0d\x1b\x37\x6e\x34\x4e\x89\xd8\
\x54\xf6\x37\x8c\x70\x54\x82\x4d\x43\x19\x80\x2b\xce\x40\x62\x33\
\xba\x21\x73\x6b\xb1\x87\x52\x80\x6c\x82\x7f\x6b\x0a\xd9\x59\x31\
\x7c\xce\xca\x64\x1d\x8b\xd9\x78\x12\xef\x1f\x83\x55\x35\x88\x2f\
\x73\x33\x8c\xfb\x88\x45\x8a\x31\xed\x52\x38\x4e\xb1\xc3\x30\xb2\
\x55\x65\x48\xb8\xcd\x10\x0c\xb7\xc5\x9a\x17\xe0\x80\xc8\x05\x73\
\x4a\x9b\x7d\x48\x72\xc5\x3c\x7a\xe3\x3c\xbc\xb6\x0d\x70\xfb\x94\
\x8f\x06\x22\x9d\xc9\xf0\xd5\xaf\x7c\x99\xf7\xdf\x5d\xc7\x7d\xf7\
\xfd\x8a\x8a\xca\x0a\xce\x3c\xfb\x6c\x2e\x7a\xf9\x65\xc6\x1e\x3e\
\x4c\x06\x70\xf3\x79\x2e\xd8\xb4\x89\x8f\x6e\xba\x91\x54\x22\x89\
\x06\x5c\xd7\x0d\x17\x99\xeb\xba\xde\x63\xf8\xbb\xbe\x52\x8a\x84\
\x93\x20\xaf\xf3\xb8\x79\x97\x5c\x2e\x87\x48\x9e\x44\x32\x49\x2a\
\x95\x62\x70\x70\x80\x89\x13\x27\xd2\xd1\xd1\xc1\x3f\xfe\xfc\xe7\
\x7c\xf1\xe6\x3d\xdc\x7d\xd7\xed\x3c\xf4\xf0\x63\xbc\xf7\xee\xbb\
\x4c\x99\x32\x31\x82\x25\xa6\xcf\x48\x1b\xfc\x9e\xf8\x5d\xa8\x63\
\x91\x02\x05\x4e\xfb\x38\x3c\x8a\x4e\xc6\x70\x20\x8c\x8f\x04\x88\
\xf6\xd0\xa1\x43\x05\x7d\x7e\xd5\xd5\x57\x51\x5e\x51\x6e\x38\xb6\
\xbd\xfe\x4d\x26\x12\x4c\x9b\x3e\x9d\x69\xd3\xa7\x73\xb2\xbb\x3b\
\x84\x9a\x96\x05\x10\x9b\x50\x3a\x16\x3a\x13\x7a\xe7\xc4\xf2\xda\
\x19\x3e\xbb\x08\x51\x68\x5d\xd8\x1f\x28\x83\x54\x0a\x70\x83\x15\
\x2c\x20\x3e\xe9\x51\x48\xd1\x7b\xcf\xad\x87\x84\xcd\x8e\x52\x11\
\x61\x22\x9e\x2d\xbb\x64\xc9\x12\xb2\xb9\xac\x81\x60\x85\xd2\x61\
\xa5\x5c\x70\xe1\x05\x21\x39\x15\x98\x1e\x1b\x37\x6e\x64\xdf\xbe\
\x7d\xb4\xb7\xb7\xd3\xde\xde\x8e\xe3\x38\x34\x35\x35\xd1\x34\x72\
\x24\x53\xcf\x98\x4a\x43\x43\xbd\xcd\xff\x9a\xd3\x37\x38\xa9\x8d\
\x60\x01\xd3\x07\x17\x75\xb0\xb6\x98\x4f\x1d\xf7\xbe\x17\xd0\x3d\
\x26\xdb\xc9\x69\x9e\x78\x44\xf4\xba\x18\x81\x0e\xe6\xee\x04\x7e\
\xa7\x99\x03\xe3\xb3\x9d\x1a\xe1\x4b\x5f\xba\x85\x55\x2b\x56\xf0\
\xcb\xfb\x7e\xc9\xd4\x69\xd3\xa8\x1f\x31\x02\x2d\xc2\xf9\x6b\xd6\
\x78\xbb\xf9\xe4\xc9\x38\x13\x26\x50\x31\x7e\x3c\x25\x25\xa5\xe4\
\x73\x39\xb4\xeb\xe2\xba\xae\x3f\x18\x45\xec\x45\xad\x8d\x2e\x8a\
\xe0\x8a\x46\xe3\x38\x0e\xa5\xa5\xa5\x24\x53\x29\x32\x99\x0c\x65\
\x65\x65\x3c\xfd\xec\xb3\x9c\xec\xe9\xe1\xae\xbb\xef\x66\x70\x70\
\x90\xad\x5b\xb7\x30\x61\x7c\xb3\x37\xc1\x54\xe4\xd8\x46\x69\x7f\
\x48\xcd\x13\x4b\x87\x76\xa0\x15\x05\x10\x73\xdb\x89\x85\x65\x4c\
\x9b\x49\x85\x4e\x58\x31\xe0\x5d\x67\x67\x67\x41\x9f\x97\x97\x95\
\x7b\x8c\xa4\x14\x8b\xfb\xf1\x26\x76\x45\x45\x45\x41\xe4\x97\x12\
\x6d\x2d\x1c\x33\x4c\x2a\xdc\x40\x4c\x17\x89\x7f\x12\x8a\x44\x86\
\x6b\xc8\x24\x1a\xf6\x4a\xe8\xd7\x13\x65\x47\xaf\x98\x27\xad\x01\
\xb7\x94\x18\x8c\xb6\x09\xdb\x7c\xa8\x2d\x22\x43\xb0\x2b\x84\x67\
\x84\xd6\x2e\x8f\x3d\xf6\x18\xef\xbd\xf7\x9e\xf5\xa9\x4c\x26\xc3\
\xb7\xbf\xfd\x2d\x1c\xe5\x84\x63\xd0\x71\xf4\x08\x8f\x3d\xf6\x27\
\xb6\x6f\xdf\x5e\x70\xd5\x83\x07\x0f\xf2\xee\xbb\xef\xf2\xca\xcb\
\x2f\x73\xed\xb5\xd7\xb2\x60\xc1\x7c\xff\x39\xb4\xe1\x1b\x8d\x90\
\x9c\xf6\x4f\xf3\xf0\x77\x62\x33\xa6\x1a\x23\x68\xa2\x08\x0c\x0d\
\x8e\xf8\x70\x69\x0a\x31\xd8\x7b\x3a\x7e\xbc\x38\x0f\x27\xc5\x0c\
\xf3\x60\x30\x4c\xc7\xb3\x70\xf2\x64\x0f\x77\xdc\x7e\x3b\x1b\x3e\
\xfc\x80\xfb\x1f\x78\x80\xb6\xd9\xb3\xa9\xa8\xa8\x40\x1c\x87\x96\
\xf5\xeb\x91\xca\x4a\x06\x16\x2c\xa0\x6b\xca\x14\xea\x3e\xfe\x98\
\x7c\x36\x8b\xce\x7b\x8b\xcd\xdc\x39\xb5\x3f\xae\xda\xdc\xd9\xfd\
\xad\x36\xef\xc3\xcd\xd0\xee\x31\x76\xf4\x54\x32\x89\x4e\x38\x40\
\x25\x73\xe6\xcc\xe1\xb5\xc5\x8b\x49\x27\x93\xdc\x71\xfb\x1d\xfc\
\xc3\xcf\x7e\xc1\xbe\xfd\x07\x18\x3d\x6a\xa4\x1d\x3a\x14\x87\xce\
\xc6\x43\xeb\x98\x63\xdd\x5c\x1c\xca\xd8\xd9\xcd\x7e\x30\xf7\x3f\
\x15\x63\x4d\x87\x0f\x1f\x4e\x57\x57\x97\xd5\x9b\x2f\xbd\xf4\x12\
\x5f\xfe\xf2\x97\x29\x2d\x2d\x2d\x46\x61\xd9\x13\x57\x6c\xf6\xac\
\x90\x79\x36\x18\xbc\x18\x13\x87\x14\x12\x90\xf6\x2e\xad\x43\x0a\
\xdd\xee\x13\x29\x0e\xb9\x8a\xcc\x8b\x78\xb4\x8f\x0c\xc1\xec\x29\
\x25\xd6\x66\xf3\xdc\xb3\x2f\x14\x2c\xba\x54\x2a\xc5\x3d\xf7\xdc\
\xc3\x98\x31\x63\xc3\xeb\xbd\xff\xfe\xfb\x3c\xfa\xe8\xa3\x0c\x0e\
\x0e\x9e\x12\xce\xe5\xf3\x79\x9e\x7f\xfe\x79\xb6\x6e\xdd\xca\xdd\
\x77\xdf\x1d\xb1\xe4\x81\xdd\xa0\x0d\x08\xad\x86\x08\x0e\x91\x98\
\x13\x3d\x64\xc6\xa5\x08\x24\x95\x82\x90\x84\xa1\xd6\x5e\x62\xa8\
\x0e\xc1\x72\x1c\x17\xc2\xa5\x82\xf8\x66\x7f\x86\x1e\xed\x38\xc6\
\x8d\x37\xde\xc8\x91\x43\x87\xf8\x97\x7f\xf9\x25\xd3\x5b\x5a\xa8\
\xad\xa9\xf5\x60\x53\x2a\xc5\xb8\xc1\x41\xe4\xba\xeb\xc8\x0d\x1f\
\xce\xf1\xf2\x32\x46\xe4\x72\x38\x83\x83\x06\xfc\xd3\x16\x2b\x26\
\x02\xe2\x46\x93\x3c\xab\xf3\x0c\x0c\x0e\xf8\x08\x48\x85\x6d\x8c\
\x3b\xb4\x95\x24\x28\x2d\x75\x48\x25\x53\xcc\x9a\x35\x8b\xe7\x5f\
\x7a\x99\x11\x0d\x0d\x7c\xf3\x9e\x3b\xf9\xdb\xff\xf6\x77\xf4\xf4\
\xf4\x52\x5e\x3e\xcc\xdf\xac\x02\x9f\xa3\xed\x70\x0e\x1e\x58\x69\
\x9b\x39\xd4\x31\xc6\x33\x0c\x51\x0c\x7e\xe7\x9f\x92\x56\x40\x96\
\x41\x4c\xd4\xd5\xd5\xb1\x67\xcf\x1e\xab\xcf\x37\x6c\xd8\xc0\xdf\
\xfc\xcd\xdf\x30\x79\xf2\x64\x26\x4d\x9a\xc4\xb8\x71\xe3\x18\x33\
\x7a\x34\x4e\x22\x19\x9e\x2c\x61\xa8\x9e\x61\x5b\xee\x96\xbd\xfc\
\xa6\xf4\x5f\x39\xa1\x4e\x58\xd7\xfb\xe7\xae\x7f\xe1\x84\x3a\xce\
\x5b\xc9\xb7\xd8\x9c\xd8\xcc\x31\x75\x8c\x3c\x79\xca\x75\x39\xe3\
\xf2\xcd\xcc\xcc\xb6\x31\x33\x3f\x13\x65\xb4\x33\x80\x58\x5a\x6b\
\x9e\xca\x3c\xc5\xda\xe4\x5a\xfa\xa5\x3f\x9a\x17\x5a\x31\x25\x3f\
\x85\xbb\x7a\xef\x24\x41\x32\x9c\x73\x9b\xd5\x16\x9e\xcd\x3c\x43\
\xbb\x6a\xb7\x26\x5a\x99\x5b\xc6\x2d\x03\xb7\x30\x33\x3b\x73\x48\
\x1b\x2f\x78\xff\x8d\x37\xde\x60\xc9\x92\x25\x05\xbe\xcb\x6f\x7c\
\xe3\x6e\xc6\x8f\x1f\x1f\x7e\xae\xab\xbb\x9b\xc7\x1f\x7f\xbc\xe8\
\xa2\x2b\x29\x29\x21\x9b\xcd\x16\xb0\xc5\x5b\xb6\x6c\x61\xd9\xf2\
\x65\x5c\x7c\xd1\x25\x06\xb4\x8c\x42\x0b\xb5\x15\xd1\xa3\x23\xc2\
\x30\x4e\xea\x6b\xd3\xd1\x1e\x05\x42\x08\x3a\x32\x2f\xc4\x38\xeb\
\x86\xf6\x9f\x0f\x65\xe3\x49\x68\xf4\x86\xce\xeb\x60\x72\x07\x0c\
\x98\x14\x62\xd9\xee\xde\x93\xb4\xb5\xb5\xd1\x58\x3f\x82\xbf\xf9\
\x9b\xbf\x66\xcc\xd8\x31\xd4\xd6\x54\x23\x4a\x48\x24\x93\xd4\x54\
\xd7\x50\x33\x69\x32\x7a\xe7\x0e\xba\x33\x25\x48\x2e\x8f\xce\xe5\
\x3c\xfb\x4d\x47\x46\x39\x6e\xe4\xd8\xd6\xae\x1b\xee\xec\xd9\x6c\
\x96\x6c\x76\xd0\x5b\x70\x82\xe1\x67\x32\x79\x1f\x89\xa2\x44\x80\
\x54\x3a\x45\x4d\x4d\x0d\xad\xad\x2d\xfc\xfe\x0f\x7f\x60\xca\xe4\
\xc9\x7c\xed\xab\x5f\xe1\xd7\xf7\xff\x2b\x67\xce\x6d\xf3\x9e\xc7\
\x3c\x35\x4c\x9f\x5b\x40\xed\x9a\x58\xdd\xd8\xc1\x75\xe0\xeb\x91\
\x18\xf3\x64\xb3\x19\xd1\x8e\xef\x7f\xf7\xec\xb3\xce\xe6\xdd\x77\
\xdf\x2d\xe8\xf7\x6c\x36\xcb\xc6\x8d\x1b\x43\x87\x7a\x26\x93\x61\
\xc6\x8c\x19\xb4\xcd\x9a\xc5\xf4\x69\xd3\x48\x24\x93\xa0\xc5\x87\
\x97\x9e\x93\x78\x71\xe6\xb5\x82\x45\x07\xb0\x36\xb5\x96\x3f\xa5\
\x1f\x23\x2b\x59\xeb\xfd\x4e\xe9\xa4\x53\x75\xf2\x5e\xf2\x7d\x1a\
\xf3\x8d\xdc\xde\x7f\x3b\x0d\xba\xd1\x62\x2b\xf7\x3a\x7b\x59\x9e\
\x5a\x5e\x70\x4d\x57\x5c\x36\x27\x36\xb3\x3d\xb9\x93\xa9\xf9\x29\
\xa1\x1d\xb8\x28\xb3\x90\x76\xa7\xbd\xe0\xf3\x27\xd5\x49\x5e\x4b\
\xbd\xc6\xac\x7c\xdb\x10\xa9\x2d\x82\x88\xe2\x9d\xb5\xef\xf0\xfc\
\xf3\xcf\x5b\xbf\x71\x1c\x87\xbb\xee\xba\x93\x29\x53\xce\xb0\xc6\
\xf7\x85\xe7\x9f\xa7\xaf\xaf\xcf\xfa\x6c\x53\x53\x23\x97\x5d\x76\
\x19\x33\xdb\x66\x31\xd0\xdf\xcf\xb2\x65\xcb\x78\xfd\xf5\xd7\xc9\
\x66\xa3\x67\x5f\xb4\x70\x11\x67\x9f\x75\x36\xe5\x65\x65\x68\x65\
\x9b\x13\x62\x85\xce\x88\xcd\xb9\x04\xc8\xc6\x37\xa9\x0a\x99\xee\
\x28\x44\x4f\xa2\x90\x6d\xc3\xcf\x57\x7c\xe9\xa9\xa1\x23\x57\x02\
\x7f\x9a\xed\x57\x13\x51\x9e\xbb\xc1\xff\xa3\xfc\x87\xf0\xe0\xa9\
\x62\xde\x85\x17\xf0\xf8\x9f\x1e\xe3\x64\x4f\x0f\x13\x27\x4d\x42\
\x94\x22\x95\x4a\x51\x53\x5d\xc3\x98\x9a\x1a\xca\x0e\xb5\xc3\xc0\
\x00\xdb\xdb\x66\xd2\x5f\x5a\x02\xb9\x1c\x2a\x97\x43\xfb\xff\x99\
\x91\xe0\x62\x40\xa8\x9c\xbf\x93\x99\x6d\x13\xbf\x6d\x88\x42\x89\
\xf2\xda\x18\xb4\x53\x49\xf8\xf7\x54\x2a\x4d\x53\x53\x13\x63\xc7\
\x8e\xe5\x9f\xfe\xf9\x9f\x99\x3e\xfd\x0c\x5a\x5b\x5b\xd8\xbe\x63\
\x17\x2a\xb8\x9e\x32\x9e\x39\x78\xc6\xf8\xbd\x94\xfd\x77\x25\xe6\
\x67\x94\xff\xdd\x00\x42\x79\xd7\x51\x12\xf5\x53\x70\xdd\xe9\x33\
\xa6\x33\x6d\xda\xb4\x4f\x65\xbe\xfa\xfb\xfb\x59\xb7\x6e\x1d\xff\
\xfb\x37\xbf\xe1\xde\x7b\xef\xe5\xc0\xfe\xfd\xfe\x78\x28\xdf\xed\
\x22\xb8\xc5\x22\x70\x81\x87\x32\x7f\x2c\x58\x74\x05\xb6\x90\x73\
\x90\x7f\x2c\xfd\x19\xfb\x9d\x7d\x56\x5b\xab\xa9\xa6\xd2\xad\x2c\
\xfa\x9d\x12\x5d\x42\x93\x6e\xf4\xe7\x81\x42\x29\xa1\xd9\x6d\x1e\
\xf2\x1e\x93\xdc\x49\xa1\xad\x5b\x6c\x83\xdf\xbc\x79\x13\x8f\x3c\
\xfc\x70\xc1\xfb\xb7\x7f\xfd\x76\x66\xcc\x68\x09\xe1\xb2\x12\xe1\
\xf0\xe1\xc3\xac\xf1\xf9\x01\xf3\x75\xdb\x6d\x5f\xe6\xac\xb3\xce\
\x26\x9d\x4a\x51\x51\x51\xc1\xb5\xd7\x5e\x4b\x5b\x5b\x5b\x41\x5f\
\xbe\xf1\xc6\x1b\x5e\x9b\x25\xba\xa6\x98\x63\x1d\x8c\xaf\xf5\x7b\
\xff\xa7\x3f\x3f\xbc\x39\x16\x8d\x81\x84\x63\x6d\xbc\x67\xad\x9d\
\xa2\x4b\x0c\xe7\xbc\xeb\xce\xfb\xdb\xf8\x9b\x35\x54\x47\x4e\xda\
\xe0\xe2\x81\x7f\xcf\x0f\x6c\x16\x3f\xea\xc0\x9b\x68\x8a\xfd\x07\
\xda\xb9\xe4\x92\x4b\xe8\xef\xed\xe1\xb1\x3f\x3d\xc6\xcc\xb6\x36\
\x94\x08\xa9\x4c\x9a\xca\x8a\x4a\x9a\x46\x36\x51\xb7\x7d\x3b\x8d\
\x5b\xb7\x30\x90\x4c\xb1\x6d\xce\x1c\x92\xfd\x03\x8c\xdc\xb4\x89\
\xbe\x92\x12\xf6\x4e\x3d\x23\xb4\xef\xcc\x9f\x22\xc2\xe0\xe0\x20\
\xb9\x5c\x16\x94\x0a\x17\x8a\x67\x1b\xd8\x9d\x83\x78\x13\x01\xdf\
\xe6\x33\x3b\x42\x29\x87\x54\x2a\xc9\xde\xbd\x7b\x71\x73\x39\xae\
\xba\xfa\x2a\x5e\x7e\x65\x11\x23\x1b\xeb\x51\x8e\x13\x12\x0e\xc1\
\x73\x05\x30\x28\x98\x8c\x82\xb2\x7e\x47\xb0\xa0\x44\x85\x04\x81\
\x0a\xde\xb7\xda\x24\xd6\x75\x82\x2c\x82\x99\xad\xad\x74\x74\x1c\
\x1b\xd2\x9f\x57\x70\x7a\x9c\x3c\xc9\xaa\x55\xab\x98\x30\x61\x02\
\xb5\xb5\xb5\xe1\x06\x30\x35\x3f\x95\x26\x77\x24\xa3\xf5\x28\xb6\
\x39\xdb\x8a\x2e\x94\x19\xf9\x19\x4c\x75\xa7\x32\x3e\x3f\x9e\xe1\
\x7a\x38\x27\xe4\x04\x39\xf1\xe0\x58\x5e\xf2\x6c\x72\x36\x71\x61\
\x7e\x1e\x09\x49\x20\x02\x69\x95\xe6\xa2\xdc\x02\xfa\xa5\x9f\x5d\
\x6a\x57\x78\xad\x73\x72\x67\xf3\xad\x81\x6f\x31\x9c\x4a\x50\x2a\
\xdc\x18\xa7\xb9\xd3\x68\xc9\xb7\xb0\xc1\xd9\xc0\x80\x0c\x00\x30\
\x4c\x0f\xe3\x87\xfd\x3f\xe4\xac\xfc\xd9\x28\xf1\xa0\xf4\xee\xdd\
\xbb\xad\xb6\x95\x96\x96\xb2\x68\xd1\x22\x0b\x1a\x8a\x08\xff\xe1\
\x3f\x7c\x8d\x39\x67\x9e\x69\xcc\x33\xef\x59\xb7\x6c\xd9\xc2\xfb\
\xef\xbf\x6f\x5d\x63\xec\xd8\xb1\x5c\x77\xdd\x75\xe1\x3c\x10\xf1\
\xc3\xd0\x94\xe2\xdd\x75\x36\xaa\x48\x26\x93\x9c\x73\xee\x39\xc6\
\x58\x7b\x63\xa1\x08\x16\x53\x90\x62\xa4\xc2\x40\x76\x6f\xec\xfd\
\xb1\x54\xde\xdc\x57\x2a\x42\x56\xca\xbf\x06\xe1\xf8\xfb\xf3\x24\
\x98\x33\x0a\xf6\xf6\xec\xfd\x8c\x50\x33\x34\xae\x0d\xc3\xce\xb7\
\xa7\x54\x18\x84\x6e\x47\xb3\x97\x97\x95\x73\xc6\x94\xc9\xfc\xf3\
\xff\xfa\x5f\x8c\x1d\x3b\x96\x74\x3a\x8d\xa8\x04\xa9\x54\x86\xa6\
\xa6\x26\x0f\x12\x6c\xdc\x88\xce\xbb\x1c\x9a\xd0\x8c\x76\x1c\x5c\
\x25\x90\xcf\x53\xbd\x67\x0f\xe5\x1d\xc7\x38\x51\x35\x3c\x74\x64\
\x6a\xed\x2d\xe8\x81\xc1\x41\x72\xf9\x3c\xe2\x24\x10\x5c\x2f\x10\
\x38\x0c\xbf\x34\x99\x46\x1f\x9b\x6b\x8f\xbd\x0a\x8c\x65\xed\x43\
\x09\x11\xcd\xf0\xe1\xd5\x8c\x1f\x3f\x9e\x17\x5e\x7c\x89\x4b\x2f\
\xbb\x8c\x0b\x2e\x38\x9f\x4d\x9b\x36\x32\x65\xf2\x44\x03\x09\xf9\
\xce\xe2\x98\x37\x46\x5b\x91\xe8\x62\x07\xc8\x69\x23\x2d\x85\xc2\
\x3c\xb5\x20\x48\x5b\x8c\xa0\xc6\x4c\x49\x09\x77\xdc\x79\x07\xb3\
\x66\xcf\x62\xe5\x8a\x15\x6c\xde\xbc\xd9\xa6\xe4\x87\x20\x0b\x9e\
\x7c\xf2\x49\x7e\xf2\x93\x9f\xf8\x31\x99\x50\x2e\xe5\x9c\xab\xcf\
\x41\xe7\xe1\xa5\xe4\x4b\xd6\xe7\xaf\xcc\x5d\xc9\x55\xb9\xab\x48\
\x93\x36\x62\x1c\xa1\x3f\x3b\xc0\xa2\xe4\x42\x16\x25\x16\x01\x70\
\x4c\x1d\x63\x65\x72\x05\x97\xe4\x2f\x31\x20\x60\x92\xcf\xe5\x3e\
\xc7\x3b\xce\x3b\xf4\x48\x0f\x00\x9b\x9d\x2d\x64\x54\xda\x9b\x64\
\x68\xb4\xa8\x10\x82\x9f\x50\xc7\x39\x21\x11\xe4\xbd\x3a\x77\x35\
\x8d\x34\xf9\x93\x52\x8a\xda\x78\x71\x22\xc5\x3b\xbd\x6e\xe3\xac\
\xb3\xce\x89\x71\x17\x1e\x7c\x3f\x7c\xf8\x70\x51\x78\xfe\xdb\xdf\
\xfe\xb6\x68\x88\x5d\xfc\x75\xf8\xf0\xe1\x90\x89\x14\x33\x40\x42\
\x11\x7a\xe0\x30\x62\x6b\xc5\x4f\xf9\x0a\x02\x42\x94\xd8\x41\x16\
\x66\xf8\x64\xd0\x5e\x15\x0f\x2e\x2f\x0e\x2a\x3f\x85\xd5\xb4\xa3\
\x5f\x91\x22\x31\x8a\x00\xfb\xf6\xed\xe7\xe2\x4b\x2e\x65\xcf\xae\
\x9d\xec\xd9\xbb\x97\xb6\x59\x6d\x20\x0e\xe9\x54\x0a\x34\x0c\x0c\
\xf4\x53\x52\x5a\x8a\xd3\xdf\x0f\xb9\x1c\xfd\xc3\x86\xa1\x81\x5c\
\x22\x81\x68\x4d\x62\x70\x90\x4c\x4f\x0f\x5d\x55\x55\xe1\x4e\xa3\
\x14\x64\xb3\x39\x72\xd9\xac\x11\x3e\xa6\x3e\xd3\xe9\x10\x9f\xbf\
\xc1\xbf\x1d\x07\xea\xea\xea\xd9\xbd\x6b\x37\xaf\xbe\xba\x88\x4b\
\x2e\x5e\xc0\xf2\xe5\x2b\xa2\xe8\x89\x22\xc9\x32\x45\x82\xc0\x8a\
\x11\x79\x9f\xea\xb8\x95\x21\xe2\x1d\xe7\xce\x99\xc3\xdc\x39\x73\
\xe8\xea\xea\x62\xfd\xfa\xf5\x6c\xdb\xb6\x8d\x2d\x5b\xb6\x70\xe2\
\xc4\x89\xa2\xcf\x76\xe0\xc0\x01\x36\x6f\xde\xcc\x8c\x19\x33\x8a\
\xb9\x8c\xc3\xd7\xc5\xb9\x8b\xb9\x21\x7f\x43\x61\xbc\x2d\x50\x42\
\x86\x1b\xf2\x37\x30\x20\x03\xbc\xe5\xbc\x05\xc0\xfb\xce\xfb\x5c\
\xea\x5e\x6a\x45\x9f\x96\x52\xca\x35\xf9\x6b\x78\x22\xf1\x84\xb7\
\xb8\xe4\x04\x4b\x12\x4b\xb9\x22\x7f\x85\xc5\xda\xe5\xc9\xf3\x4c\
\xe2\xd9\xf0\xfa\xd5\xba\x9a\xf9\xee\x7c\x0f\x7d\x14\x63\x65\x87\
\x78\x9d\x7d\xf6\xd9\xcc\x9b\x37\x8f\x42\xaf\xb7\xf7\xa3\x98\xff\
\xf3\xc0\x81\x03\x9f\x19\x35\x74\x76\x76\x92\xcb\x66\x49\xa5\x52\
\x05\x4c\x7d\x10\xe1\x23\xb1\xf1\xb4\xe3\x03\xa4\x68\xdc\xae\x0c\
\x39\x33\x86\x7e\x66\x55\x9c\xd5\x0c\x6c\x08\x15\x8b\x9d\x54\x16\
\xf6\x0d\xfe\x0c\x0c\xe6\x98\x3c\x79\x22\xcb\xdf\x5a\xc2\xb5\xaf\
\x2f\xe6\x8e\xef\xfd\x3f\x9c\xf3\xea\x6b\x28\x47\xe1\x6a\x68\x3f\
\x74\x88\xfe\xfe\x01\x4a\xbb\xbb\x41\x6b\x3a\x46\x8d\x42\x44\x38\
\xd1\xd0\xc0\xf1\xda\x5a\xd0\x9a\x44\x36\x1b\x51\xdf\x7e\x4c\x65\
\x36\x9b\xc3\x71\x14\x8e\x72\x78\x27\xf3\x01\xdf\xab\xfa\x2f\xbc\
\x9f\xfe\x28\xb2\x9b\x02\xdb\xce\xb4\xa7\x44\x70\x94\xa0\x1c\x15\
\xe2\x79\x27\x68\xb3\x23\x94\x97\x0f\x63\xd4\x98\xd1\x2c\x5e\xfc\
\x3a\xd5\x55\x55\x4c\x98\x38\x81\xdd\xbb\xf7\x16\xe0\x7e\x25\x4e\
\x04\xb3\x03\x7b\x51\xd9\x98\x5f\xa9\x58\xbf\x18\xff\x36\x21\x71\
\x60\x03\x98\xed\x35\x6d\x50\x11\xa1\xb2\xb2\x92\x0b\x2f\xbc\x90\
\x3b\xee\xbc\x93\x7b\x7f\x76\x2f\x3f\xf8\xc1\x0f\x98\x3e\x6d\x7a\
\xd1\x41\x3b\x74\xe8\xb0\x61\x6f\x06\x6d\xb4\x87\x72\x81\x5e\x10\
\xda\x23\xf6\x78\x45\x36\xfa\xfc\xfc\xfc\xc8\xde\x93\x83\xd6\xf3\
\x06\xb6\xfd\x7c\x77\x3e\xd5\xba\x3a\x22\x29\x9c\x45\xf4\x49\x5f\
\x64\xd7\x28\x61\x59\x62\x19\x87\x55\x74\x1a\x5d\x9f\xbf\x9e\xb4\
\x4a\x59\xb6\xef\x67\x79\xad\x5d\xbb\x96\x2d\x5b\xb6\x78\xd7\x56\
\x12\xda\xb1\xc1\x35\x7a\x7a\x7a\xf8\x3f\x7d\x9d\x38\x71\xc2\xb2\
\xcb\x55\x8c\x2f\x88\x6c\x79\x73\x4c\xa3\x71\x8f\xc6\x5b\x15\x99\
\x13\xd1\x5a\x51\x12\x7d\xee\x34\xc8\x15\x42\x5b\x49\xf9\x37\x80\
\xe8\xc6\x84\x03\xae\xe8\xed\xed\x65\xf4\xe8\x51\x90\xcf\x33\xf0\
\xe2\x8b\xcc\xdd\xbf\x1f\x9d\xcc\x30\x6b\xe9\x52\xa6\x1f\x38\x80\
\x4a\x38\xe4\x35\xf4\x6e\xdb\x86\xea\xf5\x3a\xae\xbb\xae\x2e\xdc\
\x10\xb2\xc9\xa4\xe7\x42\x50\x86\x5d\xa6\x21\x97\x1d\xa4\x66\xdf\
\x5e\x32\xbd\xfd\x38\x8e\x62\x59\x66\x35\xa2\x84\x3f\x96\x3e\xcd\
\x40\x22\x4b\xc2\x71\x70\x12\x0e\x4e\x42\xa1\x12\x09\x9c\x84\x83\
\x38\x09\x9c\x44\x02\x49\x24\x50\xca\x41\x39\x0a\xe5\x78\xff\x16\
\x95\xf0\x26\xbd\xe3\xd0\xd0\x30\x92\xc1\x6c\x96\xf5\xeb\x3f\xe0\
\xec\xb3\xcf\xa2\xdd\x9f\xc8\x4a\x94\x17\x0c\x10\xfe\xf4\x5c\xbb\
\x9e\xfd\xe6\xb7\x4f\x29\xc3\x40\x8f\x08\x15\x2f\x7e\x52\x85\xb6\
\x9f\x84\x8b\x90\x68\x80\x94\x4f\x92\x2a\x41\xf9\xd7\x54\x4a\x85\
\x13\x4d\x29\x85\xc2\xb3\x47\x27\x4e\x9c\xc8\xb7\xbe\xf5\x2d\x32\
\x99\x4c\xc1\xf8\x1c\x3d\x7a\xc4\x58\xd8\x12\xfe\xdd\x7c\xa5\x25\
\xe3\x8d\x23\xc6\x04\xb1\x26\x95\xa2\x44\x4a\xc3\xcf\x0f\x30\xe0\
\x5d\x0b\x7f\xb2\xf8\x9b\x44\x4a\xa5\xb9\xde\xbd\x3e\xfc\x5c\xaf\
\xf4\xb2\x38\xb1\x38\xec\x87\x7e\xfa\x79\x51\xbd\x18\xfe\x7e\xa4\
\x1e\xc9\x39\x9c\xeb\x07\x36\x18\x64\x55\x91\xc5\x97\x4c\x26\x6d\
\xd6\xd4\x75\xf9\xf5\xaf\x7f\xcd\xbe\xfd\xfb\xfd\xb9\x47\xd8\xd7\
\x4a\x14\xf5\xf5\xf5\x05\xd7\xa8\xae\xae\x66\xec\xd8\xb1\x9f\xf9\
\x4f\x2a\x99\x0a\xc9\xaf\x60\x6c\x94\x2a\xb2\x51\x2a\x7b\x91\x05\
\xeb\xc0\x5c\xa4\x0a\x22\x52\x4f\x94\xb1\x30\x4d\x42\xed\x74\xb3\
\x13\x0c\x78\x50\x18\xde\x18\xbd\xbf\x7d\xfb\x4e\xbe\xf8\xc5\x2f\
\xf2\xf1\xc7\x1f\x33\xe2\xfd\x0f\x29\x77\xd2\x1c\x1f\x3d\x9a\x46\
\xd1\x9c\x7d\xf8\x10\xc7\x26\x4e\xe0\xf0\x60\x8e\xe1\xdb\xb6\xe2\
\xbe\xff\x21\xb9\xd9\xb3\xbc\xef\xbb\xae\x17\xa9\x9f\xc9\x20\x5a\
\x53\xd2\x7d\xd2\x6b\x6c\xde\x65\xc4\xfa\xf5\x9c\xf1\xe4\x93\x54\
\x1d\x3c\x08\x22\xdc\xf7\xad\x79\xb4\x9f\x7d\x18\x07\x05\x0e\x3c\
\x52\xfa\x14\xdf\xe8\xff\x5a\xd1\x58\xfb\xf2\x23\x47\x48\xf4\xf7\
\x73\xb2\xb6\x16\x57\x29\x16\xfc\xfa\x7e\xca\xdb\x0f\xb1\xfd\xec\
\xb3\x79\xff\xba\xeb\x41\xbb\x0c\x1f\x5e\x49\x5d\xdd\x08\x56\xac\
\x78\x9b\xaf\xfe\xc5\x5f\xf0\x58\x3e\xcf\xe0\x60\xd6\xb3\x4b\x0b\
\x1c\xe5\x9f\x01\x2e\x89\x10\x0f\x79\x8c\xa7\x92\x98\xb0\xe4\xc4\
\x89\x13\x54\x56\x56\x16\xf9\x8c\x7d\x8d\x4c\x49\x86\xa9\x53\xa7\
\x16\x10\x0a\x25\x25\x25\x46\x96\x42\xf1\xd7\x66\xb5\x89\x0b\xf5\
\x85\x45\x52\x92\xa2\xd7\x26\x15\xe5\x01\x56\x50\x61\x04\x4e\xd8\
\x90\xeb\x3c\xce\x63\x91\x5e\xc4\x41\x39\x08\xc0\x62\x59\xcc\xa5\
\x72\x29\x15\x54\xf0\x8a\x7a\x25\xb4\x01\x01\x6e\x72\x6f\x22\x21\
\x4e\x31\xd4\x5d\xf0\xba\xf2\xca\xab\x78\xef\xbd\x77\xd9\xbf\x7f\
\xbf\xc5\x3e\xfe\xd3\x3f\xfd\x13\x3f\xf9\xf1\x8f\xa9\xaa\xae\xb6\
\x10\x5b\x43\x43\x43\xc1\x35\x9a\x9b\x9b\xf9\xf6\xb7\xbf\x7d\xfa\
\x47\x5f\x3c\x1b\x5f\xec\xb4\x2d\x18\x1a\x35\x4a\xd1\x45\xf1\xe9\
\xdf\xfb\x8c\xd9\x09\x41\x38\x91\x11\x2d\x1e\xe6\x31\x45\x0e\xe4\
\xc1\x6c\x96\x51\xa3\x46\xf1\xfa\xab\xaf\x32\xa6\xaf\x9f\xf6\x39\
\x73\x79\xfb\x9e\x7b\xb8\xe5\x85\x67\x28\xcf\x0e\x32\xed\xf0\x61\
\x7a\x46\x8e\xa4\xaa\xfd\x10\xee\xf1\x4e\xba\x0f\x1f\x0e\x43\x8a\
\x44\x6b\x72\x7e\x34\x41\xd3\xc6\x8d\x1c\x1f\x51\xcf\xf4\x45\x0b\
\xa9\x5b\xb5\x0a\x72\x39\xb4\x1f\x28\xbd\xb4\xf4\x7d\x14\x09\xd2\
\x3a\x45\x4e\x5c\x36\x25\x3f\xa1\xbd\xfb\x63\xae\x5e\xb8\x99\xea\
\xdd\xbb\x71\x93\x49\xde\xbf\xfe\x7a\xa6\xbd\xb6\x98\x51\x1f\x7e\
\x40\x22\x97\xa7\xbb\xa6\x9a\xbd\x6d\x6d\xd4\xef\xd8\x81\xd6\x30\
\xe3\x8d\x37\x39\x3e\x72\x34\xbb\xe6\xce\x41\x94\x4b\xc3\xa8\x66\
\x0e\xec\xdb\x4d\x49\x26\x4d\x6d\x6d\x1d\xc7\x8f\x9f\xf0\xe2\xfa\
\x8c\x1c\x19\x53\x0c\xc9\x92\x80\x89\xc5\xa6\x46\xd4\x8e\x19\xcd\
\xa1\x43\xe7\x7c\x18\x52\xe4\x87\x22\x3d\xf0\xc0\x03\x24\x93\x49\
\xae\xbe\xea\x2a\xa6\x4e\x9b\x1a\x65\x33\x18\x71\x79\xa2\x35\x27\
\x4e\x9c\x60\xc3\x86\x0d\x05\xe3\xd3\xd0\xd0\xe0\xe5\xa5\x49\xf4\
\xbd\xf8\xc2\x7a\x5c\x1e\x67\xa2\x4c\xa4\x49\x8f\x8c\xe2\x51\x0d\
\xa6\x68\x1f\xfb\x78\x5c\x1e\x0f\xdf\x9a\xc8\x84\x18\x2c\x8a\x04\
\x90\x14\x0e\x37\xe9\x9b\xf8\x17\xf9\x17\x00\x06\x65\x90\x97\xd5\
\xcb\x5c\xc6\x65\x2c\x66\x71\xf8\x8d\xc9\x7a\x32\x33\x55\x2b\x51\
\xd6\x7f\x94\xba\x53\x6c\x93\x28\x29\xc9\xf0\xdd\xef\x7e\x8f\xff\
\xfe\xdf\xff\x9b\x25\x2d\x79\xfc\xf8\x71\xfe\xd7\x3f\xfd\x13\x3f\
\xfa\xe1\x0f\x29\x29\x2d\x09\xb3\x2c\x9a\x1a\x1b\x0b\xae\xf1\xfe\
\xfb\xef\xd3\xd9\xd9\x49\x75\x75\x4d\x6c\x80\x6c\x21\xa2\x81\xc1\
\x41\x7a\x7a\x4e\x52\x53\x55\x6d\x88\x73\x61\xb0\x2c\x91\x72\x80\
\x2e\xd8\x2a\x75\x4c\x4d\x20\x9e\x12\x16\x84\x4c\x62\x64\x43\x68\
\x33\x71\xff\xb3\xb9\x13\x46\x38\xf5\x36\xb5\x4e\x84\x7f\x43\x08\
\x20\x8a\xbe\xde\x5e\x7a\xfb\x06\x58\x30\xef\x02\x96\x2c\x59\xca\
\xa1\x2b\xae\xa2\x63\xde\x3c\x32\x99\x34\xe9\x29\x13\xa9\xdf\xfe\
\x09\x55\xfb\xf7\x71\xf8\xbc\xf3\x69\x5a\xb9\x9c\x8a\x03\x07\xd8\
\x39\x7b\x36\x07\x26\x4d\x24\x95\x4c\x81\x40\x4f\x6d\x2d\x63\xd6\
\xac\x61\x58\x47\x07\xcd\xeb\xd6\x52\xba\x6f\x1f\x3a\x9b\xe5\xc8\
\xe4\xc9\xac\xbb\xed\x56\x9c\x7c\x9e\x1f\x7f\xee\x24\x4a\x14\xe7\
\xee\x4e\x92\x4c\x95\xd3\x95\x1e\x64\xc6\xf2\x75\xdc\xf2\xf2\x27\
\x94\x1d\x3f\x4e\x59\x47\x07\x93\xde\x7e\x9b\xe1\x87\xda\x3d\x02\
\x4a\x29\x52\x83\x03\xd4\xee\xda\x0d\x4a\x31\x38\xac\x0c\x71\x35\
\xa3\xd7\x7f\xc8\xee\x39\x67\x32\x38\xac\x9c\x92\x4c\x19\x07\x0f\
\x1e\x60\xe6\xcc\x19\x9c\x38\xd1\xc5\xbe\xfd\xfb\x69\xa8\xaf\xf7\
\x7d\x92\x86\xff\x8e\xe0\xb9\x09\x61\x27\x4a\x8a\xd8\xba\x7e\xcc\
\xa1\x92\x48\x53\xc5\xb4\x21\x82\xf4\x11\x81\x15\x3e\x8b\xb9\xf2\
\xed\xb7\xf9\xf0\xc3\x0f\x19\x18\x18\x64\x60\x60\x80\x64\x32\x49\
\x49\x49\x29\x27\xbb\xba\xf9\x68\xc3\x47\x3c\xfb\xec\xb3\xb4\xb7\
\x17\x3a\xa6\xaf\xbb\xee\x5a\xaa\xab\x6a\x8c\x40\x07\xef\x1e\xcf\
\xc9\x73\x11\xab\x27\x39\x96\xb3\x9c\x3e\xe9\xa5\x44\x95\x90\x92\
\x34\x59\xb2\xec\x93\x7d\xbc\x2a\xaf\xf2\xa0\x3c\xc8\xa0\x44\xd1\
\x1f\x5f\xe0\x46\x46\xaa\xc6\xd0\x45\x13\x6d\xe2\x5e\x5f\x34\x48\
\x03\x1f\xc9\x47\x74\xe2\xc5\x99\xee\x96\xdd\xec\x95\xbd\x1c\x96\
\xc8\xb6\xfb\xa6\x7c\x93\x6a\x6a\x7c\xd7\x8b\xf8\x31\xbc\xde\xcf\
\xf5\xeb\xd7\xb3\x73\xe7\x4e\xeb\x39\xa6\x4f\x9f\x41\x5b\xdb\x4c\
\x26\x4d\x9a\xc4\xaa\x55\xab\xac\xf4\xa7\xae\xae\x2e\x76\xee\xdc\
\xc5\x39\x67\x9f\xe3\xc5\x68\x8a\x50\x51\x51\xce\x8a\x15\xcb\x19\
\x18\x18\x28\x60\x36\xa7\xcf\x98\x8e\x93\x48\x78\xac\xa2\x8a\x32\
\x6c\x7a\x7b\x7a\x58\xb8\x70\x21\x0f\xdc\x7f\x3f\x75\xb5\x75\x34\
\x8f\x6b\xb6\xdc\x45\xe2\xbb\x00\x02\x57\x40\x20\x50\x14\xcc\x01\
\xb3\x7f\x83\x98\x54\xcb\xbf\x1b\xfb\x83\x99\x2f\xe9\xcf\x85\x1d\
\xc7\x77\x9c\x46\xc8\xd8\x10\xc1\x7c\x26\x8f\xd3\x79\xfc\x38\xb5\
\xb5\x35\xf4\xf7\xf7\x33\x98\xcd\x31\xbc\xba\x14\x25\x0e\x99\x64\
\x92\xee\xb1\x4d\x0c\x2e\x5b\x46\xb2\xb7\x8f\x51\x9b\x36\x51\x51\
\x37\x02\x29\x29\xa5\x63\xca\x14\x72\xf9\x3c\x3d\xfd\xbd\x0c\x4b\
\x67\xe8\x19\x31\x82\x1d\xe7\x9f\xcf\x84\x15\x2b\xd0\xf9\x3c\x1d\
\x8d\x8d\x7c\x78\xfd\xf5\x1c\x6b\xf6\x9c\xb2\x2f\xb4\xf6\xe3\x88\
\x17\x5e\xf5\xe8\xcf\x8f\x71\xf7\x3d\xfd\xec\x69\x49\x42\x22\x41\
\x57\x63\x23\x9b\x2f\xbb\x94\xc9\x6f\x2d\xa1\xf2\xc0\x01\x8e\x4c\
\x9a\xc4\xc6\x2b\xaf\xe4\xe4\x88\x11\xcc\x7d\xf4\x51\x46\x6c\xde\
\x0c\xc0\xf2\x6f\x7d\x8b\x69\xaf\x2c\x64\xc4\xe6\x2d\x4c\x59\xbe\
\x9c\x77\x6f\xba\x99\x92\x92\x14\x15\xc3\xca\x39\x7a\xf4\x28\x8d\
\x0d\x0d\xbc\xf7\xde\x7b\x91\x90\x11\xc5\xe2\x19\x4f\x21\x82\x54\
\x90\x42\x52\x8c\x69\x2c\x9e\x86\xbd\x6b\xd7\x2e\x76\xed\xda\x65\
\xc5\x26\x9e\x2a\x06\xb1\xb6\xb6\x96\xd1\xa3\xc7\x18\x2a\x64\x14\
\x49\x56\xf6\x27\xa4\x64\x59\xe4\xff\x77\x2a\xd8\x33\x81\x09\xcc\
\x91\x39\xb6\xc8\x4f\xec\x84\x72\x70\xb8\x59\xdf\xcc\x3f\xf0\x0f\
\x9e\x6b\x83\x3c\x9b\xd9\x1c\xfe\x7e\x0e\x73\x98\x24\x93\x86\x44\
\x5f\x32\x14\x97\x20\xc2\xe4\xc9\x93\xb9\xe3\x8e\x3b\x78\xe0\x81\
\x07\x6c\x28\xbc\x79\x13\x0f\xfe\xfe\x41\xee\xbe\xfb\x6e\x04\x28\
\x2d\x1b\xc6\xad\xb7\xde\xc6\xfd\xf7\xdf\x6f\x7d\xee\xad\xb7\xde\
\x62\xd5\xaa\x55\x9e\x14\xc8\xac\x59\x0c\x0e\x0e\x72\xe0\xc0\x01\
\x0e\x1e\x3c\xc8\xe6\xcd\x9b\xa3\xfe\x14\x8c\x53\x5d\x0a\x52\x89\
\xa4\x08\xf4\x97\xf8\x1c\xf8\x34\x04\x4b\x3c\xcb\xe8\x34\xf3\xf1\
\xcc\x44\x08\x53\xbc\x25\x0c\x97\x42\xd3\xd1\xd1\x41\x5b\xdb\x6c\
\xfa\xfa\x7a\x11\xe5\x90\x2e\x2d\x45\x9c\x04\xa9\x4c\x1a\x11\xa1\
\x7d\xea\x54\x46\xaf\x5e\xcd\x98\xd5\xab\x91\x7c\x1e\x35\x79\x12\
\xb9\xda\x5a\x94\xa3\xc8\xe7\x35\x7d\xbe\xdc\xc3\xd6\xcb\x2f\x67\
\xeb\xe5\x97\x93\xcb\xe6\xc8\x66\x07\x3d\x07\xa8\x9f\xaa\xb1\x39\
\xf1\x31\x8e\x38\x8c\xef\x48\x52\xe2\xf6\x30\xb9\x5d\x58\xd2\xea\
\xf0\xe6\x79\xf5\xb4\x5d\xf8\x9f\xd1\xb8\x1c\x6a\x9b\x8d\xb8\x39\
\x06\x86\x95\x85\xf3\x6f\xdd\xd7\xbe\xc6\xd8\x55\xab\x39\x3a\x61\
\x3c\x9d\xcd\xe3\xd9\x72\xf5\x95\xd4\x6d\xfb\x84\xf1\xab\x56\xd1\
\x5d\x5d\x47\xfb\x39\x73\xb8\xe0\xdd\xf7\xe8\x6f\x99\x42\xed\xb8\
\x09\x0c\x0c\x0c\xa0\x44\xe1\x6a\x37\x9c\x80\xda\x0c\x1b\xb2\x7c\
\x3b\x14\x8a\x68\xea\x28\xae\x55\x62\xe2\xbd\x3a\x72\x1a\x7d\x2a\
\xb5\xfe\x69\x81\xbf\x77\xdc\x71\x07\xe9\x74\xda\xca\x9e\x08\xa1\
\xaf\x36\x07\x36\x41\x8e\x4f\xcf\x70\xaf\xa4\x92\xbf\x94\x6f\x87\
\x7e\x41\x33\x3e\x2e\xc8\xc4\x0f\x22\xaa\xa6\xcb\x74\x5a\xdc\x16\
\x3e\xe2\xa3\x78\xe0\x17\x37\xcb\xcd\x76\x3a\x19\x86\x50\xd0\x10\
\x4b\x2f\x3a\x25\xe0\xfc\x0b\xce\xe7\x60\xfb\x41\x5e\x78\xfe\x05\
\xeb\x33\x2b\x57\xae\xa4\xa6\xa6\x96\x9b\x6e\xba\x09\x44\x73\xfe\
\x79\xe7\xb1\x74\xd9\x52\x36\x6f\xda\x5c\x10\x99\xb2\x66\xcd\x9a\
\xa2\x91\x2d\xe6\xfd\x82\x43\x25\x80\xe7\xda\x4c\x68\x35\xb4\x3a\
\xad\x84\x92\x7a\x2b\xb6\x00\x00\x20\x00\x49\x44\x41\x54\x8e\x58\
\xac\x72\x81\x58\x54\x4c\x13\x49\x9f\x5a\xca\x78\x68\x56\x13\x65\
\x30\x5b\x2a\x8a\x12\x11\x5f\x8c\x34\xa0\xa8\x4f\x74\x75\x53\x52\
\x5a\xca\xc0\xc0\x20\xc9\x54\x09\xc9\x64\x0a\xc7\x49\x90\x4e\x26\
\xd1\x08\x27\x1a\x9b\x10\xad\x49\xf5\xf4\x90\x3c\x79\x12\x32\x19\
\xca\xaa\xaa\x48\x25\x53\x38\x8e\xe7\x90\x1f\xc8\x66\xc3\x9c\x31\
\x5c\x17\xe5\x38\x28\x71\x50\x8e\x20\x8e\x62\x40\x0d\x92\x10\x87\
\x4b\x2a\x6f\xe6\x8d\x1f\xfd\x88\xd6\xe9\xdf\x26\x81\xc3\x81\xb2\
\x1e\x7a\x9d\x5e\x12\x2a\x41\xbe\x6c\x18\xb9\xf2\x4a\x8f\x9d\x72\
\x1c\x1c\xc7\x21\x57\x51\xc9\x27\x57\x5e\xc1\xb1\x89\x93\x50\x4a\
\xe8\x9c\x34\x85\x77\xee\xb8\x1d\xed\x24\x99\xb6\x70\x11\x57\xff\
\xed\x7f\x65\x54\x36\x4f\xfe\xe4\x49\x2a\x2a\xca\xc9\xe7\x5d\x2f\
\x8a\xc1\x71\xa2\xb0\xac\x80\xe1\xc3\x67\xbe\x42\x8a\x5b\x45\x61\
\x44\xca\x0f\x13\x0b\xd8\x3b\xbf\x4b\x4d\x78\x1e\xba\x1f\xfc\xef\
\xfd\x5b\xaa\x33\x89\x08\xd7\x7f\xee\x7a\x5a\x66\xcc\xf0\x99\x34\
\x09\x19\xd8\x90\x91\x35\x5e\x7f\xed\xfc\x35\x35\xd4\x9c\xf2\x9a\
\x13\x99\xc8\x7f\x75\xfe\x2b\x75\xce\x88\x88\x36\x0f\x42\xdb\x02\
\x66\x57\xa9\x30\xb2\x43\x89\xf0\x45\xf5\xc5\x82\xeb\xcc\x93\xf9\
\x8c\x72\x46\xd9\xfd\x63\xb0\xc1\x4a\x49\x51\x92\x25\x8a\x04\xf2\
\xfe\xdc\x74\xd3\x4d\x9c\x75\xd6\x59\x05\x9f\x7b\xe1\x85\xe7\x59\
\xb6\x6c\x49\xf8\xac\xff\xf1\x3b\xdf\xe5\xc2\x0b\x2f\x3c\xed\x3e\
\x54\x3e\x3b\x8f\xcf\x44\x7a\xd0\x51\x59\x63\x14\x8c\x53\x00\x97\
\x25\x60\x2c\x0d\x17\x01\x3e\x2b\x1d\xba\x71\x44\x85\x51\x55\x60\
\xb0\xcd\x9c\x26\xab\xa9\xa4\x48\x10\x74\x01\xe6\x14\xb2\x83\x59\
\xd2\x99\x34\x83\x83\x03\xa4\x33\x25\x24\x12\x49\x34\x0e\x2a\x91\
\x40\x80\xee\xfa\x11\xf4\x56\x54\x50\xda\xd1\x81\x76\x5d\xb4\xeb\
\xe2\x38\x0e\x65\xa5\xa5\xf4\x0d\x0c\x78\x69\x3d\x5a\x93\xcd\xe7\
\x70\x9c\x04\xda\x51\xc4\x5d\xd9\xae\xb8\x38\xe2\x90\x56\x19\x7a\
\x47\x8e\xe4\x24\x27\xc3\xbc\x2c\xa5\x1c\x3f\x86\xc2\x3a\x60\xac\
\x5d\xca\xd1\xe0\x8a\x03\x5a\xd3\x3e\x7b\x0e\x1f\xef\xdd\xcf\xf8\
\x37\x96\xe0\xa2\x18\x6c\x6d\xa1\xaf\xae\x8e\x64\x32\x49\x3e\xef\
\xe2\xba\x1a\xc7\x51\x14\x64\x17\x2b\x6c\xab\x5a\x8a\xb8\xd7\x85\
\x21\x92\x67\xa2\xf7\x83\xdd\xf0\x7b\xdf\xfb\x1e\x7b\xf7\xee\xe5\
\xdd\x75\xeb\x58\xf7\xee\xbb\x05\xb6\x4f\xfc\x35\x6b\xd6\x2c\xbe\
\xf4\xa5\x2f\x31\x6a\xd4\x68\xeb\x58\xb3\x40\x92\x00\x79\x23\x46\
\xd2\x99\xc8\x3f\xca\x3f\xf2\xba\xfb\x3a\xab\xf4\x2a\x0e\xea\x83\
\x0c\x32\x48\x25\x95\x4c\x92\x49\x9c\xa7\xce\x0b\xe1\x65\xbc\xe5\
\x31\x7d\x64\x8b\xe2\x1c\xa7\xc7\xd1\xe8\x36\x72\x10\x8f\xe1\x4c\
\x92\xe4\x26\xe7\xc6\x42\xd9\x84\xf8\x14\x1a\x2a\x48\x5a\x99\x10\
\xcf\xe1\x9b\xdf\xfc\x26\x47\x8f\x1e\x65\xc7\x0e\xdb\x2e\xfa\xdd\
\xef\x1e\xa4\xa6\xa6\x96\xd6\xd6\x56\x2a\x2a\xca\xb9\xe7\x9e\x7b\
\xb8\xf0\xc2\x0b\x79\xf8\xe1\x87\xd9\xbb\x77\xef\x90\x51\x3f\xf5\
\xf5\xf5\xcc\x9d\x3b\x97\x33\xcf\x3c\x93\x89\x13\x27\xc6\x74\x7c\
\x24\x96\x0e\x6c\xe7\x21\x17\x2d\x15\x50\xe0\x64\x8f\x3d\xa7\x39\
\x57\x4e\x81\x4c\x4f\x99\x81\x1e\xa4\x88\x60\xa5\x01\x45\xd8\xc6\
\x53\xe6\xf5\x56\x7a\x49\x49\x09\x4a\x39\xde\xc2\xf3\xe3\xf8\xf2\
\xe9\x34\x9d\x63\xc7\x52\xda\xd1\xe1\xc5\x5c\x0e\x1b\xc6\x60\x69\
\x09\x4a\x29\x4a\x33\x69\x06\x07\x73\x64\xdd\x1c\xa2\x05\x57\xbb\
\xde\x82\xf2\x19\x21\x80\xdd\xec\xa3\xdd\x39\x42\x9a\x34\x75\xca\
\x33\xda\x2b\x75\x25\x09\x49\xa0\x05\x5e\x4b\x2c\xe1\x66\x7d\x9d\
\x2d\x2d\x1e\x2e\x3c\xc1\xf5\x43\xb5\x94\xeb\x67\x56\x03\x5b\xae\
\xff\x3c\x47\x26\x9c\x41\xbe\xb2\x94\x81\xc9\x53\x49\xd1\xef\xe3\
\x0e\x6d\xa5\xa9\xd8\x49\x38\xd8\x32\xc5\x86\x51\x15\x66\x47\x68\
\x33\xfb\xdb\xd0\x34\xb1\x74\xd6\x22\x19\xb9\x31\x63\xc6\x30\x66\
\xcc\x18\x6e\xf8\xc2\x8d\xf4\xf5\xf5\x71\xec\x58\x07\x9d\xc7\x3a\
\x39\xd6\x79\x8c\xfe\x81\x01\x6a\xaa\xab\x19\x51\x3f\x82\xba\xba\
\x3a\x4a\xd2\x19\x5b\x40\xc7\x44\xba\x43\xc2\x1a\x21\xad\x32\x5c\
\xe3\x5c\xc3\x35\xfa\xda\x42\xf9\x78\x6d\xa7\x96\x88\xa5\xff\xe9\
\x67\x6c\xc4\x61\x98\xc0\x07\xf9\xf5\xe1\xa2\x03\xb8\xd2\xb9\x92\
\x1a\x55\x6b\xa5\x2e\x05\xe1\x71\xa1\xc2\xb6\xc0\xd7\xbf\xfe\x75\
\x6e\xbf\xfd\xeb\xc6\xfc\x31\xfa\xc5\x60\x92\xd3\xe9\x34\x7f\xf7\
\x77\xff\x5f\x04\xf9\x74\x74\x3d\x33\x5f\x47\x03\x33\x66\xcc\xe0\
\x7f\xfc\x8f\x7f\x20\x9b\x1b\xe4\xe0\x81\x76\x0e\x1c\xd8\x4f\x57\
\x57\x17\xc3\x87\x0f\xa7\xba\xba\x9a\x9a\x9a\x1a\xaa\xaa\xab\x0a\
\xb3\xf3\xfd\x36\x88\xc1\x20\x9b\x50\x73\x88\x94\xdd\x68\x04\x45\
\xc7\xd2\xc9\x02\xf9\xfb\x40\x42\x51\x1b\x72\xf2\xa7\x95\x8f\x87\
\xaf\xbe\x15\xa8\x3d\x88\x9d\x13\xe6\xe3\x64\xd7\xf5\xe4\xf6\x02\
\xd9\x05\x95\x48\xe2\xe6\xb1\x12\x05\x7b\xeb\xea\xbc\xd4\x1e\xad\
\xe9\x2f\x2f\x27\x5b\x5e\x19\xaa\x02\xa7\xd3\x29\x12\x79\x87\xac\
\x7f\xf2\xc5\xf5\x20\xdb\xe5\x08\x8e\x4a\x30\x5d\x4f\xa6\x51\xea\
\xc3\x1e\xb9\x80\x73\x58\xa5\xd6\xb1\x4e\xad\x67\x5e\xfe\x5c\x1a\
\xa9\x37\x85\xd0\x6d\x69\x52\x2d\xe4\x45\xc0\x8d\x32\x75\x8e\x4c\
\x9f\x46\xc2\x11\x86\x97\xa4\x49\x2b\x87\x5c\x3e\x4f\x3e\xe7\x8b\
\x16\x29\x65\x99\x6e\x21\xed\x6c\x48\x89\xc7\x4f\x36\x2f\xae\x34\
\xca\xbc\x0e\x05\x9a\x0c\xdd\x27\x31\x0c\x07\x3b\x91\x52\x53\x3a\
\xac\x94\x61\xc3\x4a\xbd\x40\x04\x1d\x65\x44\x9b\xb1\xa8\xc5\xe4\
\xea\x22\x89\x72\x55\x40\x5b\x07\x91\x2c\x41\xee\x5e\x90\xde\x65\
\xee\x1d\x86\x42\xa4\x95\x1e\x65\xca\xf7\x8b\x91\xf2\xe4\xe2\xf2\
\x44\xfe\x89\xf0\x1e\xc3\x18\xc6\xf5\xce\xf5\x96\x4f\x31\x12\x3b\
\xc2\x12\x90\x0a\x12\xd4\x45\x6b\xb4\x52\x86\x6a\x97\x32\x14\xba\
\xb1\x64\xf4\x4d\xc5\x11\x1d\xb3\xbb\x55\x98\x3b\x08\xa9\x54\x9a\
\xe6\xb1\x63\x68\x6e\x1e\x6b\xe7\x88\x15\x51\xff\x0b\xfb\xd5\x84\
\xe6\x62\x4a\x43\x44\xb2\x0e\xb6\xc4\x61\x4c\x1d\x5a\xc5\x35\x75\
\xc4\xaa\xbf\x10\xe8\x6a\x6a\x39\xcd\x13\x2f\x9c\x1b\x5a\x86\x64\
\xe5\xb4\x76\xe9\xed\xed\x25\x93\xc9\x90\x4c\xa5\x70\x54\x0a\x57\
\xe7\x2c\xa9\x80\xce\x09\x13\x22\x96\xad\xbc\x3c\x92\xd8\xd3\xde\
\x89\x19\x88\x1a\xe5\xf2\x79\x6b\xf1\x08\x8a\xc3\x1c\xc5\x11\x87\
\x52\x4a\x51\x4e\xd4\x51\x0b\x38\x97\x77\xf0\x9c\xca\xcb\x9c\x55\
\xdc\xaa\xbf\x80\x1b\x09\x76\xfb\x93\x44\x87\xe5\x16\x94\x0b\x5a\
\x09\x6e\x20\x53\xe1\x6a\x94\x72\x48\xa7\x93\x94\xa7\x4b\x38\x79\
\xb2\x07\x51\xe2\xb9\x38\x8a\x38\x7d\xad\x8c\xee\x21\xd8\xb9\xa2\
\x99\xd7\xd6\xf7\x8b\xf5\x63\x90\xa1\xae\x8d\x05\x12\x73\xd0\xaa\
\xb8\xe3\x30\xbe\x07\x17\xd7\xad\x8c\x20\x95\xb2\xfd\x78\x31\x81\
\x1e\xb3\x4c\xcc\xd0\xa6\x85\xf7\xc6\xba\xfc\x3a\x76\xea\x08\x16\
\x7f\x3e\xf1\x79\xca\x9d\xf2\xa1\x89\xdb\x98\xdc\x7b\xa1\xe3\x3a\
\x26\x34\x65\xc6\x0a\x9b\x40\xc3\xf0\xb9\x15\xd1\xaa\x2a\x1a\x84\
\x50\xf4\xe7\x29\x1c\xdd\xa1\x96\x0a\x3a\xa6\xbf\x59\xac\x32\x8e\
\x7c\x2a\xab\x69\x09\x20\x7f\xf6\x13\xcf\x2f\x05\xa1\x75\x41\x63\
\xcc\xed\xbf\xa4\x24\xc3\x91\xc3\x47\xc8\x64\x32\x64\xd2\x29\x12\
\xc9\x04\xd9\xbc\x4b\x56\xe7\x18\x44\x93\x24\x41\xae\xac\x8c\xc1\
\xd2\x52\x52\x27\x4f\x7a\xcc\xa6\x48\x98\x41\x16\xf5\x81\x62\x3b\
\x3b\x48\x91\x64\xac\x1e\x1d\x2a\x06\x6f\x64\x1b\x09\x71\xa8\xa4\
\x02\xc7\x90\x59\x6b\xa0\x8e\x79\xfa\x1c\xde\x96\xb5\x7c\xc4\x16\
\x3e\xa7\x7b\x29\x97\xb2\x48\x2a\x42\x04\xe5\x17\xe8\x70\x83\x29\
\xea\xfa\x92\xe3\xfe\x86\x92\x48\xa5\x49\xa7\x12\x54\x0e\xaf\x60\
\xd3\xa6\x2d\x24\x12\xbe\xc1\xad\x6d\xbd\x0d\xa2\x1c\x87\x48\xce\
\x21\x94\x44\xb7\x45\x7e\xc4\x90\xa7\x0b\x77\x7c\x93\x19\xc3\xc0\
\xa5\x71\xa1\x24\x2b\x88\xda\x50\x4b\x36\x4f\x13\xab\x02\x8f\x77\
\xff\xed\xf9\xed\xdc\x3b\xf0\x33\x8e\xe9\x63\xd6\x18\xde\xd2\x77\
\x8b\xe7\x9e\x20\xc5\xd5\x89\xab\xf9\x72\xfa\xcb\xb6\xd9\x60\xd8\
\xc2\x9e\xa0\xab\x0a\xab\x05\x69\xad\xf9\x63\xf6\x0f\xac\xc8\xad\
\xe4\x04\x27\x86\x9c\x64\x8f\xe5\x1e\x63\x69\x7e\x29\x3f\x49\xff\
\x35\xd5\xaa\x8a\x02\x81\x4e\x9b\x24\xb5\xd3\xba\x35\x14\x88\x2d\
\x19\x4f\xa7\x63\x76\xb5\xa5\xc8\x1d\x5e\x4e\x1b\x0c\x65\xfc\x66\
\x26\xa2\xf5\xaf\x61\x96\x07\xd3\x31\xe7\x39\xb1\x54\x94\x80\xa1\
\xd6\x46\xe1\x1d\x31\xe6\x40\x61\x69\x23\x62\xe8\xbc\xc0\x3c\xf8\
\x74\x56\x33\x88\x51\x0c\xf3\xed\xfc\x18\xb6\x90\x92\xf5\x58\xab\
\xb2\xb2\x32\xda\xdb\x0f\x91\x4e\xa5\x29\xc9\xa4\x48\xa6\x4a\xd8\
\x2d\x7b\xf9\x79\xee\xb7\xbc\x28\x5e\x3c\x1f\x22\x1c\x99\x35\x0b\
\x44\xe8\x9c\x3c\x39\x8c\xff\x54\x4a\x21\x8e\xc3\x4e\xd9\xc7\x62\
\x59\xce\xef\xe4\x4f\xfc\xab\x3c\xcc\xdb\x6a\x2d\xa2\x04\xc7\x71\
\x18\x54\x83\x24\x24\xc1\x19\xce\x04\x2f\xee\x52\xbc\x80\x69\x11\
\x87\x1b\xd4\xd5\x4c\x92\x09\x38\x92\xe0\x41\xf5\x38\xfb\xa5\x1d\
\xe5\x28\xef\x04\x55\xe2\xe5\xd8\x39\x41\xa0\xb3\xe3\x33\xb3\x0e\
\xe0\xa0\x51\x64\x4a\x4a\xc8\xa4\x92\x54\x94\x97\x73\xe8\xf0\x11\
\x4a\xd2\x99\x28\xe3\x43\x79\xd9\x11\x18\x81\xb3\x41\xa0\x74\xd8\
\x17\xca\xc8\xcf\x33\x03\xa5\x89\x58\x4e\x33\x98\x56\x59\x4e\xd7\
\x28\xc0\xda\x0a\xc2\x55\x51\x3c\x6c\x70\x7f\x2b\xa7\xcf\x67\xdd\
\x30\x98\xc7\x27\xb2\x4f\x16\x2c\x3a\xcb\x3d\xc1\x20\xcf\xe5\x9e\
\xa3\x8b\xee\x88\xad\x8d\x5f\x47\x29\x2b\xf0\x7b\x1f\xfb\x79\x39\
\xf7\xca\x29\x17\x1d\x80\x8b\xcb\x3e\xbd\x8f\xd7\xf2\xaf\x1a\x31\
\x95\x86\x03\x3a\x64\x44\x0b\x13\xab\x83\x20\x71\xaf\xb3\x88\x92\
\x98\x95\xcf\x3a\x1a\x4c\x72\xd0\x97\x28\x33\x88\x3b\x48\xc2\xf1\
\x99\x45\x23\x41\x15\x89\x33\x91\x51\x12\x72\x94\xfd\x22\xbe\x1f\
\xd1\xc8\xbd\xf4\xd1\x9e\x32\x12\x97\x83\xf9\x8a\x3f\xe7\x31\x72\
\xf9\xc2\x6b\x1b\x6c\x28\xaa\x30\x90\xfa\xdf\xc0\x6a\x16\xd6\x0a\
\x33\x51\x52\x79\x79\x05\xbb\x76\xef\x25\x97\xcf\x53\x36\xac\x84\
\xfe\x94\xf0\xdb\x9e\xc7\x18\x96\x4d\xb3\x87\x7d\x68\x81\x76\x0e\
\xb3\x75\xde\x48\x2a\xe7\xdd\x45\xbd\xae\x0d\x0d\xd9\xe3\xba\x8b\
\x47\xf4\x53\x1c\xa1\x83\x7e\xb2\x24\xc5\x0b\x98\x5d\xc4\x12\xce\
\x55\x73\xc9\x91\x23\xe1\x7a\xcd\x9b\xaa\xa6\xe0\xe2\x5a\x8e\x69\
\x01\xee\xe1\x2f\xf8\x79\xfe\x7e\x3a\xa4\x93\x07\x78\x98\x33\xa5\
\x8d\xf9\x72\x1e\xc3\xa9\xc4\x05\x76\xeb\xbd\x24\x24\x49\x83\x34\
\x78\x03\xec\xba\xe1\x24\x2e\x2b\x2b\xa5\x24\xe3\x90\x4e\xa7\xf9\
\xe4\x93\xed\xd4\x8d\xa8\x45\x44\xe1\x48\x31\x18\x54\x4c\xa5\xd8\
\x1f\xf8\x02\x8b\x5c\x4e\x1d\xe3\x67\xb1\xa4\x46\xbf\x16\xa0\x49\
\xc1\x02\x1b\x71\xfe\xed\x34\x0b\x25\x3a\x7e\x10\x77\x51\x49\x9f\
\xf0\x3e\xbe\x4c\xae\x9c\xde\xc5\x03\x82\xcd\x94\x57\x56\x71\x86\
\xd0\x84\x8f\x9f\x12\xcc\x28\xf2\x29\x71\x95\x56\xca\x8e\x14\x84\
\x77\xc5\x9f\x51\xc7\x99\x60\xe3\x79\x6d\x29\x42\x29\x48\xf1\x11\
\x31\xae\x29\x45\x64\xf9\x45\x2c\x3d\x1c\x89\xc9\xe7\x73\xba\x50\
\x33\x2c\xaa\x67\x4c\x00\x6d\x8a\x36\x0a\x54\x94\x97\x73\xe2\xf8\
\x71\x8e\x74\x1c\xa3\x6a\x78\x05\x6f\x67\x77\x32\x3c\x55\x45\x57\
\xb6\x9b\x81\x7c\x8e\x3f\xca\xe3\x1c\xe6\x28\xae\x76\x71\x71\xb9\
\x45\x3e\xcf\x38\x19\xc3\x20\x59\x1e\xcb\x3d\x43\xa7\x9c\x20\x49\
\x0a\x2d\x8a\x5b\x9d\x2f\xf0\xc7\xfc\x13\x20\x9a\x83\xea\x30\x8e\
\x56\x24\x54\x92\x34\x49\x2f\xc5\x27\xd0\xf1\xd5\x18\x4c\x94\x70\
\x91\x5c\xc0\x73\x7a\x11\x1a\xcd\x7b\x6c\x64\x8b\xde\xc1\x19\x6a\
\x12\xc7\xf4\x09\x3e\xd6\xbb\x71\xb5\xe6\x76\xf9\x32\xa3\x19\x05\
\x92\x20\xab\xb3\xf4\xa7\x72\x94\x95\x66\x18\x56\x9a\xa0\xaf\x7f\
\x80\x3d\x7b\xf7\x72\xd6\xdc\xd9\xe1\x86\x63\x3a\x57\x83\x02\x9a\
\x18\x75\xd8\x2c\x75\x2a\x4b\x3b\x58\x47\x0a\xd8\x21\xec\x34\xb4\
\x39\x88\x12\x78\x35\x71\x8d\x47\xc3\xa6\x36\x64\xf0\x6d\x46\x24\
\xce\xf5\x0b\xb7\x64\x6e\x61\x6f\xef\x5e\x8e\xe8\x23\x45\x07\xb8\
\x4a\xaa\xb8\x2a\x75\x35\x15\xaa\x22\x9a\x4c\x5a\x17\x3e\xa7\x44\
\x95\x62\xc7\xca\x58\xae\x49\x5d\xcb\x6b\x83\xaf\x92\x65\x68\xf9\
\x88\x14\x29\x26\x38\x13\xb8\x3a\x7d\x75\xa4\x57\xa3\x05\xf1\x89\
\x26\x15\xc2\xba\x80\xa9\x31\x98\x4f\x43\x7e\xdd\x7c\xde\x90\x5c\
\x29\xa0\xf2\xe3\x32\x86\x3a\x16\xe4\x41\x28\xc1\xa7\x8d\x1a\x19\
\x56\xbe\x1d\x51\xad\x3b\x2d\x51\x62\xb2\xb6\xc6\xcb\x94\xc6\x37\
\x96\x8e\xe1\x2c\x0f\x48\xb4\x50\x9d\xd4\x48\x0a\xb7\x8a\xaa\x9c\
\x42\x66\x2c\x31\x54\x5a\x10\x81\x4e\x86\x55\xc5\x35\xe8\x4d\xef\
\x46\x55\xd5\x55\x88\xc0\x47\x1f\x6d\x60\xfe\x05\xe7\x50\x71\xe4\
\x00\x33\x2a\xce\xa0\xf2\x48\x15\x9b\x06\xd6\xd1\x51\xd2\x89\xa0\
\xa8\xa1\x8a\x0e\x8e\xf1\x78\xfe\x05\xbe\x9c\xf8\x02\x4b\xdd\xd5\
\x9c\x50\x27\x11\x1c\x6e\x57\xb7\xd1\xe0\x78\x45\x38\x4a\x75\x09\
\x83\x0c\xb2\x49\x3e\xa6\x4a\x2a\x49\x68\x27\xcc\x44\x0f\x3b\x33\
\xb4\x3b\xbd\xa6\x9d\xa9\xda\x98\xcb\x2c\x9e\xcf\x2f\x62\x1d\xeb\
\xe9\x67\x90\xf7\xd9\xe8\xb3\x61\x0e\x22\xf0\x70\xf6\x59\xbe\x22\
\xb7\xf0\x4c\x7e\x11\x3b\xb3\x07\x98\x3d\xac\x95\xd6\xb2\x51\x54\
\x94\x37\xf1\xe1\xfa\x4d\x74\x77\x77\x53\x5f\x5f\x6f\x64\x27\x1b\
\x0c\x97\x48\xd8\xf1\x62\xc9\x7e\x47\xee\x16\x53\xfc\x46\xfc\xc2\
\x9a\x9e\x54\xa7\x84\x82\x48\x81\x0c\x62\x30\x40\x62\xe8\x62\xea\
\xa0\x70\xa2\x69\x1d\x2a\x8b\xbf\xf4\x15\xb1\x54\x54\x9b\xd3\xff\
\x33\x45\x4d\xe1\x37\x15\xbf\xb1\xec\x0d\x6d\x31\x96\x12\x53\xcb\
\x32\x94\xa2\x45\x83\xe1\xf2\x0f\x5d\x0b\x02\x77\x95\xde\xc9\x5d\
\xa5\x77\xda\x64\x9a\xb1\xcd\x84\xda\x99\xda\x2c\xc2\x29\x61\xa6\
\xbe\x4d\x34\x05\x63\x87\xa1\x6c\xad\xac\x40\x73\x54\x6c\xb1\xc5\
\x8a\xcd\x60\x04\x26\x60\x16\x01\x8d\x3f\xa1\x18\xa5\x52\x75\x2c\
\x63\x3c\xb0\xd3\x4c\x3f\x9d\xf6\x4c\x8b\x42\x89\xc7\xc8\x2e\xb4\
\x7d\x94\xb1\xd0\x32\xad\x8d\x76\x48\x81\x3b\xea\xb4\xfd\x78\x85\
\x2c\x90\xb6\xe4\xbb\xd1\x9a\x61\xa5\xc3\x18\x31\xa2\x96\x77\xd6\
\xae\xe3\xca\x2b\x2e\x61\xd4\xd1\xe1\xdc\x5a\x77\x03\xdd\x27\xfa\
\xc8\x0e\xf4\x71\xa4\xf4\x63\xae\x95\xcb\x39\x43\x4d\xe2\xe1\xec\
\x53\xec\x75\xf6\xf3\x90\xfb\x4c\xb8\x78\x2e\x95\xf9\x8c\x54\x8d\
\xe4\xb5\x07\x23\x27\xaa\xf1\x6c\xe5\x13\x4a\x24\x43\x27\x27\x70\
\x48\x50\x2f\x75\x3e\x4e\x36\xfd\x2e\xa6\x9d\xe1\xbd\xff\x79\x75\
\x0d\x2d\xee\x74\xde\xd5\x1f\xe1\x90\xa0\x42\x57\x50\x4f\x3d\x2f\
\x65\x5f\xe7\x98\x74\xf3\x60\xee\x71\x06\x5d\x8d\x42\x71\x66\xdd\
\x2c\x3a\x52\x07\x51\x25\x63\x59\xf7\xee\x7b\x0c\x1f\x3e\x9c\x61\
\xc3\x4a\x86\xc4\x3a\x76\x25\xd2\x42\x28\x62\xfb\x78\x0c\x68\x13\
\x63\x86\x4d\x38\xa2\x83\xe2\x1b\x81\xae\x48\x81\xf3\x36\xee\xc8\
\xf6\x2b\xca\x8a\x46\xc7\x3d\x4b\x12\x73\xcb\xc5\x00\x96\xc4\xe0\
\x64\x9c\xd3\xa4\x00\x1e\x15\xfa\xfa\xec\x5a\x88\xa6\xf4\xbb\xb6\
\xae\xaf\xa0\xb0\x7d\x56\xe7\x19\x4c\x9f\x18\xa7\x88\x49\x2e\x69\
\x29\xea\x41\xb3\x61\xa6\xc9\x17\xda\xf7\xd1\x31\x6f\x76\xb4\x16\
\x94\xe5\x4f\xf5\x60\xb2\xad\x53\x8c\x0e\x6c\xc7\x68\x43\xd1\xb1\
\x0a\xbc\xa1\x16\xb0\x26\xd6\x8e\xa1\x7c\x7f\x9f\x39\x2d\x48\x61\
\xd6\xe1\x36\x7d\x1a\x91\x53\x5d\x51\x5a\x56\x4a\x73\xf3\x58\x56\
\xae\x5a\xcb\xee\xdd\xfb\x18\x37\xbc\x09\xd2\x95\x6c\x1f\x7e\x88\
\x8b\x3a\x2f\x61\x84\x7b\x05\xe9\x94\xf7\x08\x97\x24\x16\xf0\x4a\
\xfe\x75\xda\x39\x4c\xb5\x0c\xe7\x02\xe7\x6c\x5a\xd4\x14\x5c\x4d\
\xb8\xab\x4c\xd0\xcd\x6c\x77\x77\xb1\x89\x8f\x71\x71\x49\x4a\x82\
\xcf\x27\xae\x42\x19\xf9\x5d\x41\xd2\x2c\x11\xe2\x0d\xd3\x6d\x26\
\xa8\xf1\x8c\x93\x71\x68\x57\xc8\xbb\x1a\x57\x60\x7a\xfe\x20\x2b\
\x72\xeb\x70\xb5\x90\xce\x27\xf8\x66\xc5\x3d\x9c\x5b\x37\x01\x9d\
\xee\xe6\xe4\xb1\x93\xac\x5d\xb7\x8e\x96\x19\xd3\x42\x26\x17\x6d\
\x4b\x99\x6b\x0b\x9e\x89\xa5\xe2\x1c\x55\x95\xb5\x85\x71\xcd\x60\
\x03\xcf\x6f\x15\x69\xb1\x44\xf5\x6a\xc5\xd6\x73\xd4\x11\x4b\x67\
\xce\x1e\xb1\x0a\x83\x62\xd5\x57\x37\xab\xd8\x9a\x35\xdd\x22\xef\
\x1c\x96\xa3\xd7\xac\xed\x66\xdb\x5b\xc6\xfb\x66\xd5\x1b\xc1\x2a\
\x4c\xa2\x24\x5e\x16\x5a\x42\xa8\x66\x46\x07\x2b\x1d\xf3\x8f\xc5\
\xd2\x63\x42\x54\x60\x38\x32\x94\x09\xb1\xcd\x1a\xea\x22\xc4\xd4\
\xe1\x31\x91\xab\x5d\xf7\xc1\x76\xd8\x05\xf5\x1c\x4d\xf6\xd2\x0e\
\x6e\xf5\xda\xa0\xcc\xd4\x9e\x82\xb2\x23\x91\xdf\x55\x88\x8a\xd4\
\x98\x9b\xb1\x32\x8b\xf8\x98\xf3\x07\xb1\xc7\xf4\xb3\x05\x49\x8b\
\x31\xb1\x94\x59\xa8\x25\xf4\x4f\x28\x12\xd4\xd6\xd6\x91\x49\x26\
\x79\xf3\xad\xa5\x7c\xe3\xae\xdb\xe9\x38\xde\xc9\xc8\x51\xb5\x9c\
\x38\xde\x43\x57\x8f\xa6\x36\xe5\x4d\xe8\x7a\xd5\xc0\xd7\x9d\x2f\
\xb3\xdd\xdd\xc9\x58\x35\x8a\xa4\x4e\x7a\xa7\x95\x4f\xfd\x23\x9a\
\xfa\xc4\x08\x9c\x5c\x82\x5e\xfa\x11\xc0\xd1\x09\x5c\xe5\xd7\xde\
\x36\xdc\xa9\xa6\xc9\xa3\xb4\x5f\x62\x3a\xb4\x27\xfc\xa0\x5e\x1f\
\xd3\x5c\xa2\x16\x70\x90\x4e\xb6\xe5\x77\xf1\x39\x75\x2d\xb3\x47\
\xb6\xd0\x3c\x2c\x83\x64\x6a\x78\x63\xc9\x5b\x1c\x3f\x7e\xdc\x13\
\x3b\x32\xa0\xa5\x79\xb4\x09\x76\x95\xd1\xf0\x7d\xd1\x96\xe7\xb0\
\x20\x64\x4c\x22\x9d\x7d\x65\x96\x48\xd6\x43\x44\xec\x4b\xac\x26\
\xa9\xc4\xdd\x0d\x14\x14\x87\xd4\x66\x04\x8d\x21\xbd\x6e\x49\xca\
\x0b\x31\xd1\xd6\xa8\x12\x54\x04\x17\x6d\x45\x70\xe3\xab\x61\x14\
\x50\x3c\x82\xdf\xae\x5f\x62\xe7\xa0\xd9\x55\xa6\x8a\xf8\x19\xad\
\xba\xe1\xda\x72\x2b\xc5\xdb\x1b\xc8\x4e\xe9\x82\xd2\xd9\xba\x40\
\x13\xa8\x80\x9c\x32\x6a\x9b\x63\x95\xc6\x96\x30\xaf\x54\x7c\x45\
\x69\xab\xac\xb3\x61\x2b\xe2\x9b\x05\x56\x99\xeb\x98\x8b\xc9\x8e\
\x23\xb3\x65\x29\x4f\xd3\xc6\xf3\x4b\x43\x98\x75\xe3\xec\x7c\xc0\
\x70\x10\x1a\x1a\x1a\x18\x37\x6e\x0c\x2b\x56\x2c\xe7\xda\x6b\xaf\
\xa2\x7c\x58\x86\xca\xe1\x15\x1c\x6d\xa8\xe3\x50\x7b\x07\x3d\x7d\
\x42\x49\x26\x1a\xd4\xf1\x6a\x42\x58\x8e\x58\xac\xd4\x0c\x61\xa4\
\x8c\xa4\xce\xad\xa5\x53\x9f\x88\x9e\x43\x29\x50\x4e\xd1\xe6\x87\
\xe6\xa7\x80\xeb\x39\xf0\x50\x5a\x93\xd7\x91\x86\xbf\x06\x6e\x71\
\x6e\x62\x50\xe5\x29\xaf\xaa\x61\x6c\x53\x05\xa9\xa4\x26\x3f\xe8\
\xf2\xfc\xf3\x2f\xd1\xda\x32\x83\x4c\x26\xe3\xd7\x52\x90\x28\x44\
\x69\x48\xf0\x20\x85\x2e\xe7\x22\x4c\x9e\x18\x25\xcc\x0a\x6b\x0c\
\x17\xc7\x24\x45\x19\x35\xbb\x56\x88\x55\xef\x3c\x5e\xa3\x30\x22\
\xbf\x54\x41\xb5\x0c\x31\x49\x03\x03\xe2\x99\x0b\x41\x17\xb4\x63\
\x28\x16\x52\xc7\x20\xb7\xb6\xb2\x5a\xa2\x70\x93\x21\x30\x57\xbc\
\xde\xb2\x79\x94\x05\xd7\x0a\x0b\x91\x99\x25\xb6\xc4\x0e\xfb\x8a\
\xf7\x5f\x5c\xd9\xdc\x72\xaa\xfb\x11\x32\x86\x13\xcd\x14\x1a\x8e\
\x07\x43\xc4\xb3\x4c\xc4\xa8\x1c\x2b\xc6\xce\xaf\x63\x5e\x7d\x39\
\x75\x41\xc2\x53\xfb\xf1\x3c\xbf\x08\x61\x14\xbc\x04\x7e\x15\x43\
\xc4\x54\x7c\x1f\x47\x2a\x9d\x62\xcc\xd8\xb1\x28\x25\x3c\xf7\xdc\
\x8b\x54\x0e\xaf\x26\xd7\x7b\x82\x29\x93\x1b\x49\x97\x94\xd2\xdd\
\x03\xd9\x9c\x42\x6b\x85\xab\x15\x2e\x0a\x8d\x42\xe3\xa0\x95\x03\
\x8e\x83\xf6\xfd\x39\x69\x27\x43\xad\x53\x87\x92\x04\x22\x09\x6a\
\x55\x2d\x23\x13\x8d\xa1\x4f\x28\xf8\xa3\x8d\xbf\xe3\x28\xb4\x04\
\xd7\x14\x5c\xed\xfd\xcc\xbb\xfe\xfd\xf2\x8a\x5c\x0e\x24\x99\x61\
\xdc\xb8\x46\x86\x97\x78\x39\x6f\x2f\xbf\xb2\x90\x83\xed\xed\xcc\
\x9e\x3d\xd3\xf3\xd9\x38\x4e\x98\x44\x69\xfa\x66\x6c\xb1\xdb\xc8\
\xdf\x15\xfa\x6b\x42\xfd\x44\x15\xfa\xdd\x22\xdf\x5f\xe0\x8f\x32\
\xfd\x3e\x31\x21\xa9\xf0\xfb\xb6\x70\xb0\x32\xae\x1b\x68\xd1\x58\
\xa2\x3b\x66\x22\xae\x1f\x71\x1f\x09\x19\x51\x44\x98\x2a\xc0\xad\
\xca\xd2\x41\x09\xf5\x50\x42\xed\x50\xc3\x2f\xa9\x8c\xe8\xfc\xd0\
\xff\x6a\x24\x7e\x9a\xfd\xa2\x8c\x36\x84\xc2\x40\x51\x76\x83\x32\
\xae\x1b\xfc\x3b\xf2\x87\x06\x5a\x27\x86\x6b\x42\x11\xfa\xe7\x94\
\xe1\xfb\xa5\x40\x7c\xd6\xe8\x2f\x15\xd3\xbb\x31\x05\x93\x90\x58\
\x82\x73\x94\x5d\x50\x20\x78\x64\x09\xd5\x9a\x7a\x35\x5e\x1b\x83\
\xb0\xc9\xc8\x57\x68\x27\x44\x2b\x4b\xc0\xf8\x74\xe4\xfd\xe2\xec\
\x4c\x2c\x37\x49\x42\x66\xcf\xfb\xcc\x98\xd1\x63\x38\x63\xca\x24\
\x96\x2e\x5d\xc6\x79\xe7\x9e\xcd\xcc\xd6\xe9\x64\x52\x30\x75\xda\
\x78\x36\xac\xff\x98\xae\x93\x50\x5e\x16\x15\x75\xd4\x2a\xa8\xb1\
\xae\xfd\x95\xef\x69\xa9\x00\x64\xdc\x52\x12\x78\xb2\x80\xb5\xce\
\x08\x12\x4e\x26\xa4\xea\xe2\xf9\x71\x81\xdc\x7b\x58\xd8\x44\x7b\
\x7f\x5c\xd7\x3b\x01\x5d\x17\x2f\x06\x13\x87\xb1\xe3\x27\x32\xae\
\x21\x85\xa3\x35\x7b\xf7\xee\xe3\xc9\xa7\x9e\x61\xee\x9c\x59\x54\
\x56\x54\x58\x15\xc8\xa2\x02\x16\xda\x60\x47\xec\x90\xb0\x28\x8a\
\xc1\x94\x7a\x8f\xb1\x67\x26\x51\x48\x14\x67\xa8\x8c\x78\xd4\xb0\
\x0b\x45\x2c\xe3\xcd\xac\xd0\x13\x55\xe2\xb1\x21\x2c\xb1\xe0\xeb\
\x1d\x3b\x76\xd0\xde\x7e\xc8\x8a\x2c\x1a\xdb\xdc\xcc\xc8\xa6\x26\
\xcb\x6a\x31\xff\x16\x30\x8d\x51\x55\x21\x13\x6e\x45\xe5\x98\xa3\
\xed\x39\xa8\xa4\x5a\x04\xda\x69\xb3\x56\xa0\x2a\x30\x54\xc5\xb7\
\x7d\xa2\x7a\x1b\xba\xc0\x57\x16\x15\xf8\x0b\x8a\x61\x1a\xb1\xc2\
\x66\xbb\x25\x76\x66\x18\xbf\x37\xed\xad\x82\xda\x7e\x10\xc9\xb7\
\x9b\x91\x58\x22\x05\x2a\xfc\x76\xd9\x60\x31\xca\x78\x4b\xe8\x2a\
\x89\xd0\xb4\x14\x02\x9a\xb0\x8a\xd6\xbf\x85\x5c\x29\x82\xcb\x35\
\x51\xa1\x95\xe0\x23\xc3\xca\x86\x31\x71\xe2\x44\x76\xef\xde\xcb\
\x6f\x7f\xf7\x07\x7e\x76\xef\x4f\xd1\xee\x49\x9a\x1b\x6a\xe9\xee\
\x6d\x66\xfb\xd6\x9d\xa8\x5e\x87\x92\x12\x7f\xf1\xf9\x73\x5b\x10\
\xf2\x9e\x40\xaf\x47\xb2\x08\xd4\xaa\x5a\xb6\xe6\x77\x20\x0a\xe6\
\x26\x67\xf9\xb0\x48\xac\x0a\x3d\x18\x0b\xcd\xd5\xe2\x97\x68\xf6\
\x17\x9c\x2b\xb8\xae\x26\x9f\x17\xb2\x39\xcd\x60\xd6\xa5\x61\x4c\
\x33\x53\x9b\x33\xa4\xfc\xb1\xfa\xcd\x6f\x1f\x64\xa0\xbf\x9f\xf3\
\xce\x3d\x2b\x3a\x31\xd0\x31\x88\x16\x73\xa6\x8a\x01\x2f\xc5\x73\
\x32\x6b\x4d\x01\x2b\x68\xf6\x55\xbc\x44\xf3\x07\xef\xbf\xcf\xc9\
\x93\x27\xed\xb4\x95\x86\x7a\x26\x4f\x9e\x5c\x20\xe6\x21\x71\x3a\
\x12\x4f\x90\x75\xeb\xd6\xad\x05\xe3\x75\xf6\xd9\xe7\xb0\x70\xe1\
\x22\x5e\x7c\xf1\x45\xeb\xfd\x3b\xef\xbc\x93\x9b\x6f\xbe\x99\xb8\
\x11\x6a\x8b\xee\x9a\x4f\x6b\x90\x0d\xd6\xa6\x42\xd1\x67\xb4\xe1\
\xa3\xa2\x50\x64\x44\x0c\xf8\x2d\x31\xc0\x2e\x56\xb4\xbf\xd6\x52\
\xb4\x28\x68\x61\x61\x65\x23\x58\x5a\xc7\xcb\x40\x47\xb6\x62\x70\
\x4d\x31\x2a\xd5\x16\xb5\xb8\xcc\x9b\x14\x09\x6c\x88\xa0\xb7\x8a\
\x28\x28\x29\x9e\x79\xa0\xcc\xf0\xb7\x53\xb0\x9d\xa7\x58\x78\x01\
\xfe\x35\x9d\x9b\x06\xed\xad\xfd\x89\x67\x3c\x77\xf3\xd8\x66\x66\
\xcc\x98\xc6\x8a\x95\xab\x78\xe0\x5f\xff\x37\xdf\xfd\x8f\xdf\x66\
\xf0\x64\x17\x33\x26\x54\x92\xcb\x35\xb3\x6f\xd7\x5e\x34\x90\x49\
\x79\xb2\xd6\x6e\x94\x3f\xe8\x6d\x0e\xfe\x46\x39\x55\xa6\xd1\xa3\
\x06\x98\x98\x68\x66\xa4\x1a\x49\xde\xae\xc8\xe6\x07\x57\xfb\x7f\
\x5c\x8f\x58\xc9\xbb\x82\xce\xfb\x27\x5c\x1e\x72\x39\x21\x97\x75\
\x71\x73\x42\xdd\xc8\x66\x5a\x27\x57\x50\xee\xc5\x3f\xf3\x87\x3f\
\x3e\xc2\xb2\x65\x2b\xb8\xf9\xa6\xcf\x93\xce\xa4\x43\xb2\x41\x9b\
\x13\x50\xc7\x2a\x02\xf9\x9d\x12\xd8\x1c\xe1\xce\x2f\x7e\x8c\x63\
\x90\x3e\xa4\xe3\xce\x57\x9b\x8c\x59\xb9\x72\x65\xc1\xe2\x18\x35\
\x6a\x14\x0f\x3e\xf8\x3b\x6b\xf4\x4d\xe1\x24\x6d\x54\x45\x7d\xfa\
\xe9\xa7\x79\xee\xb9\xe7\x0a\xf2\xcd\xe6\xcd\x9f\x3f\x44\x35\x1e\
\x43\xff\xc3\x87\x09\x41\x19\x61\x1d\x64\x8b\xeb\xa1\x73\xd3\x30\
\x38\xd8\xd0\x5f\x69\x5a\xc0\x62\xd4\xde\x0b\xaa\x4b\x89\xb1\x49\
\x69\x83\x95\x0d\x4a\x40\x1b\x74\xb4\x68\xbb\x0c\x9c\x36\x88\xbb\
\x90\xe8\xd1\xda\xae\x57\x68\xc4\x97\x62\x90\x6e\xa1\x8d\x2b\xb6\
\xfc\x82\xd6\x06\x32\x31\x5c\x04\x11\xc3\xac\xa3\x1a\xf7\xda\x64\
\x37\x7d\x06\x5f\xb4\x21\xfc\x15\xf6\x86\x1f\xaf\x69\x31\x50\x3e\
\xe1\xe6\xa9\x99\xdb\x71\xb7\x9f\x99\xd5\x54\x06\xe3\x2c\xc6\xf1\
\x4e\x41\x90\xae\x18\xf1\xa2\x53\xa7\x4d\xe3\xc4\x89\x13\xac\x58\
\xb1\x82\xfa\xfa\x06\x6e\xff\xfa\x57\xc9\xf6\x74\x33\x73\x52\x25\
\x89\x44\x82\x9d\x9f\xec\xc1\xcd\xe7\x49\x65\x14\xca\x27\x42\x82\
\x45\x87\x47\x6c\x52\x22\xa5\xcc\x73\xce\x47\x80\x5c\xde\x4b\x55\
\x71\x4d\xe0\xa2\xa3\x0c\x22\x13\x52\x7a\x8b\x4e\xc8\xe7\x34\xd9\
\x41\x97\x5c\x2e\x41\xfd\xe8\xd1\xcc\x98\x58\x4a\x95\x2f\x4d\xb9\
\x70\xd1\x6b\x3c\xf4\xf0\x23\xcc\x98\x36\x99\xe9\xd3\xa7\x59\x8c\
\x94\x98\x52\x05\x06\x23\x69\x96\x25\x33\x43\x94\xe2\xcc\x9f\x14\
\x18\xd9\x58\x7e\x1f\x10\xe6\xcf\x9f\x5f\xb0\xf0\xf6\xed\xdb\xc7\
\xae\xdd\x7b\x18\xe7\x6b\xcc\x14\xba\x71\x23\x08\xb6\x72\xe5\xca\
\x82\xb1\x9a\x37\x6f\xde\x90\x21\x5e\x51\xfd\x06\x7b\xe3\x0c\x4b\
\x88\x49\xb4\x39\x98\x8c\x61\xa1\xca\x56\x04\xa9\x2c\xf9\x7a\x1d\
\x83\xc9\x61\x0a\x93\x10\x95\x9c\x33\xd3\xa5\x8c\xa3\x25\x0e\x61\
\x31\x4f\x2c\x43\x2c\xdf\x84\xad\xda\x08\x70\x88\xa7\x67\x99\x01\
\xca\x06\x3e\x36\x8b\xb7\xda\x21\x8f\x12\x0b\x33\x33\xab\x01\x5b\
\x54\x4a\xe8\xa2\x89\xa4\xdd\x6d\xf6\x39\x2a\xfe\x19\x87\xe6\xa7\
\x2b\xe1\x2e\x62\x87\x14\x16\x8b\x9d\x93\x42\x5f\xd3\xf0\xca\x4a\
\xe6\xcc\x9d\x4b\x77\x77\x37\x4f\x3c\xf9\x14\xa5\xa5\xa5\xdc\x7c\
\xe3\xf5\x30\xd0\x43\xeb\x84\x61\x94\x94\x4e\x66\xc7\xc7\x7b\x18\
\xe8\xed\xc1\x49\x39\x38\x8e\xe0\x38\xde\xa9\x17\x66\xd0\x07\xe3\
\x28\x5e\xe8\x91\x6b\xba\xb6\xa2\x12\x7a\xde\x69\x17\x2c\xbc\xe0\
\xb4\xcb\x41\x6e\x30\x8f\xa4\xca\x68\x9e\x30\x86\xa9\x63\x1c\xca\
\x92\xde\x09\xfd\xd6\x5b\x4b\xb9\xff\xfe\x7f\xe5\xfc\x0b\xe6\x91\
\x76\x72\x1c\xdc\xbf\x97\x91\xa3\xc6\xc4\xb9\x3a\xbf\x9f\x54\x68\
\x7f\x06\xc5\x60\x43\x7a\x8d\x21\x10\x57\x3c\xac\x35\x4a\xdb\x0a\
\xdb\x3d\xb3\x6d\x26\x55\x55\x55\x05\x15\x61\x57\xac\x58\xce\xf8\
\x71\xe3\x6c\x2f\x7d\x2c\xc9\x75\xcb\x96\xcd\x1c\x39\x52\x18\x16\
\x36\xdf\x3f\xed\x86\x3c\xf1\x94\x2a\x74\x4c\x4b\xb1\xc0\x48\x31\
\x26\xb3\xb6\x9c\xf6\x96\x1b\xa5\xa0\x90\xb8\x89\xc6\x25\xee\xbe\
\xb3\xd3\x6d\x0a\x20\x6f\xec\x3c\x88\x99\x86\xf1\x30\x82\xc0\x71\
\x8d\x96\x22\x3e\xfe\xe8\xe4\x8b\xd7\xd8\x52\x46\x76\x88\x15\x58\
\x10\x8e\x8d\x32\x9e\x51\x88\xb0\x8d\xb6\xe7\x86\xc4\x93\x87\x25\
\xf2\x91\x4a\xcc\x08\xd5\xa7\xd6\x5c\x19\x52\x65\xcc\xca\xa0\x2d\
\x22\x04\xa3\xe3\x59\xd6\x7e\xdd\xbc\x11\x23\x46\x30\x67\xf6\x6c\
\xb2\xd9\x1c\x0f\x3d\xfc\x30\x83\xd9\x41\xfe\xe2\x2b\xb7\x22\xd9\
\x41\xa6\x36\xa5\x18\x5e\x36\x8e\xad\xdb\x8f\x71\xfc\xe8\x11\xf2\
\xd9\x3c\x89\x24\x9e\x1a\xb4\xe7\x35\xc0\xf5\xef\x1f\xee\x6a\x26\
\xb1\x63\xb8\x09\x02\x7b\x4e\x6b\x4d\x2e\xaf\xc9\x0d\xba\xb8\x38\
\x94\x0e\x1f\xc9\xc4\xf1\xd5\x8c\xad\xd5\x24\xfd\x2d\xf4\xd5\xd7\
\x5e\xe7\xe1\x87\x1f\xe1\xdc\x73\xcf\x64\xda\xd4\x69\xf4\xf7\x75\
\xb3\x66\xcd\x3b\x9c\x75\xd6\x99\x1c\x3c\x78\xc4\x3f\xd1\xb4\xbd\
\x8a\x82\x62\x1b\x41\x2a\x4d\x0c\x7a\x58\xb9\x83\x52\xe0\x6b\xb1\
\xfa\x5f\x29\xaf\x8f\x1c\x2d\x5c\x38\x6f\x1e\x2f\xc4\x6a\xc1\x2d\
\x5f\xb6\x9c\xaf\xfd\xc5\x7f\xb0\x63\x19\x43\x92\xc6\x9b\x70\xcb\
\x57\xac\x28\x18\xa7\xfa\xfa\x7a\x4f\xe6\x5d\x34\x37\xdd\x74\x13\
\x0b\xe6\xcf\x0f\xc9\x2f\x04\x1a\x9b\x1a\xfd\x84\x58\x1d\x86\x9d\
\x15\x58\x4d\x5a\x5b\xd9\x3c\x5e\x3f\xab\xa8\x0b\x0c\x77\x86\x19\
\x22\x46\xcc\xde\xb2\x23\x65\xc2\x5c\x23\xe3\xd4\x16\xdb\x6b\x60\
\x9e\xa4\x46\x7c\x63\x78\x82\x98\x30\xdb\x74\xa3\x19\x27\x53\x74\
\x12\x1a\xbe\xd6\x58\x0d\xf8\xc0\xd6\x52\x44\xd5\xa7\x42\x57\x82\
\x51\x13\x3e\x88\x72\x09\xc2\x03\x95\x91\xe9\x1e\xf5\x45\x14\x4c\
\x12\x7c\x25\x0c\x2a\x21\x22\xe5\xc2\x54\xa2\xd3\xb5\xf1\x3c\x71\
\x9f\xe2\xa1\xf5\x12\xf7\x77\x60\xa7\x61\x89\x16\x26\x4d\x9a\x4c\
\x32\x9d\x46\xad\x58\xc9\xc3\x0f\x3f\xca\xd1\x23\x47\xb9\xe3\xf6\
\xbf\xa0\xb6\xba\x9a\xa6\x72\xcd\xf0\x96\x6a\xf6\x1c\xa9\x64\xef\
\xde\xa3\xf4\x74\x75\x93\xef\x1f\xc4\x49\xf8\xf5\x0e\x24\x20\x60\
\xc4\x76\xda\x07\x8b\xcf\x15\x9f\x54\x01\x37\xef\xe2\xe6\x5d\xf2\
\xa4\xc9\x94\x95\xd3\xd8\x54\xc7\xd8\x7a\xa1\xba\xc4\x5b\x9c\xf9\
\x7c\x9e\xc7\xfe\xf4\x24\x8b\x5f\x5b\x48\xc3\x88\x5a\xb2\x83\x03\
\xf4\x9c\x3c\xce\x84\xf1\xe3\x18\x56\x3a\x8c\xa5\x4b\x97\x52\x55\
\x55\x43\x5d\x7d\x83\x0f\x1f\x74\x61\xb6\xa5\x88\x15\xf6\x67\xc3\
\xa8\x22\xea\xc3\xb6\x39\x1a\x7d\xce\xff\xc7\x45\x0b\x16\x14\x2c\
\xbc\x1d\x3b\x76\x70\xf0\xe0\x01\x46\x36\x8d\xb4\x9c\xde\x26\x61\
\xb0\x7c\xd9\xb2\x82\x51\x5a\xb0\x60\x41\x28\x49\x38\x7a\xf4\x28\
\x46\x8f\x1e\x3d\x84\xaf\x50\x0c\xd6\x91\x58\x1d\x73\x29\x7e\x08\
\x1a\x06\x9a\xe9\x54\x2f\x96\x29\x10\x40\x3c\xa5\xc4\xaa\x6f\x68\
\x3b\xca\xa3\x45\xac\xe2\x8d\x8c\xb5\xcb\x52\x30\x37\x67\x7e\x54\
\x3b\xd2\xf4\x88\xdb\x2c\x6b\x78\x70\xc5\x82\x0f\x2c\xd8\x6a\xc4\
\xa9\x5a\xd7\x92\x18\x91\x6d\x07\x3c\x04\x90\x5d\x99\xcc\xb7\x14\
\x2b\x5c\xa2\x87\xac\x99\xf0\xa9\x27\xde\xa9\xe3\xce\xe2\xe4\xa9\
\x5d\xf8\x5e\x10\xc6\x35\x8f\x43\x89\x90\xce\xa4\x59\xfc\xfa\x62\
\x76\xee\xda\xcd\xb7\xee\xb9\x8b\xd6\x96\xe9\x94\x38\x9a\x33\x1a\
\x1d\x1a\xaa\xea\x69\xef\xac\xe5\xd0\xe1\x1e\xba\x4e\x74\x91\x1d\
\xe8\xf5\xfc\x03\x41\xc9\x2b\x23\x60\x39\xd8\xc5\x5c\x2d\x21\x3c\
\x50\xc9\x72\x4a\x2b\x2b\xa8\xaf\x1d\x46\x43\x8d\xa2\xae\x2c\x3a\
\xe2\x0f\x1d\x3a\xc4\x2f\x7f\xf5\x00\xeb\xd6\xae\x65\x76\x5b\x0b\
\x99\x92\x34\x07\xf6\x1f\xc0\xcd\xe7\xe9\xea\xea\x66\xda\xb4\x69\
\x1c\x38\x70\x80\xb5\x6b\xdf\xe1\xee\xbb\xef\xe2\xc0\xc1\xc3\xa1\
\x04\x42\xfc\x88\x17\x33\x72\x82\xc8\x44\x21\xa6\x28\x4d\x41\xec\
\x60\xa1\x17\xba\xad\xad\xad\x28\xdc\x5c\xb6\x7c\x19\xb7\xdd\x7a\
\x5b\x01\x13\x8a\x08\xdb\xb7\x7f\x62\xc9\x9c\x07\xaf\x8b\x2e\xba\
\x28\x9c\xa4\xab\x56\xad\x61\xcb\x16\x5b\xf2\xee\xcc\x33\xcf\x0c\
\xab\x0a\x19\x85\x72\xa3\x84\x52\xed\xb2\x72\xe5\x4a\xb6\x6d\xdb\
\xc6\xce\x5d\x3b\xd9\xb5\x73\x17\x89\x44\x82\x89\x13\x27\x32\x61\
\xc2\x04\xce\x39\xe7\x1c\x9a\x7d\xdb\x53\x61\xcb\xdc\xa1\xe1\xd1\
\x47\x1f\xb5\xc4\x65\x93\x89\x04\x5f\xf9\xea\x57\x2d\xbb\x1f\xe0\
\xe9\x67\x9e\xb6\x6a\xbe\xcf\x9d\x3b\x97\xd6\x96\x16\x23\x06\x12\
\x76\xed\xd8\xc9\x5b\xb1\x52\xcc\x33\x66\xcc\xe0\xac\x33\xcf\x8a\
\xce\xd2\x90\x74\x56\x76\xdb\x77\xee\x64\xd7\xae\xa1\xdb\x1e\x87\
\x22\xc1\xf3\xaf\x5e\xb5\x9a\xcd\x43\xf4\xd9\xc9\x9e\x1e\xde\x59\
\xb3\x86\x77\xdf\x7d\x97\x0f\x3e\xf8\x00\xd7\x75\xf9\xd5\xaf\x7e\
\x45\x55\x55\x55\x81\x13\xdf\x36\x37\x0c\x79\xc4\xd3\x8e\xd5\x34\
\x0a\xc2\x13\xc6\x2f\x1a\xcc\x90\x0e\x90\x70\xdc\x4c\x30\x54\x3c\
\x34\x8c\x1b\xd7\x4c\x6d\x4d\x0d\xc3\x87\x57\xf2\xfe\x7b\x1f\xf1\
\x57\x3f\xf8\x31\xd7\x5c\x7d\x25\x37\xdf\xf4\x05\x1a\x1a\xea\x19\
\x9e\x11\x86\x37\x0a\xcd\x23\xca\xe9\xea\xab\xe0\x58\xb7\xe6\x78\
\x57\x1f\xbd\x27\x07\xc8\xe5\xb2\xe4\xf3\x79\x74\x60\xe4\x89\x42\
\x29\x07\x27\x95\xa0\xa4\x24\x4d\x65\x45\x29\xd5\xe5\x9a\xca\x52\
\x28\x4b\x46\xe9\x1d\xbd\xbd\x7d\xbc\xf8\xd2\x2b\x3c\xf3\xec\xf3\
\xec\xdd\xb7\x97\x59\xad\xd3\x99\x3c\x65\x12\x6d\x6d\xb3\x58\xbe\
\x7c\x05\x5b\xb7\x6e\x46\x44\xa8\xae\xae\x62\xc6\x8c\x19\x8c\x19\
\x3b\x86\x57\x17\xbd\xc6\x88\xfa\x11\x34\x34\x8e\x32\x6c\x57\x65\
\xc4\x2b\x06\x76\x8f\xb2\x38\x4b\x4b\x63\x33\x7e\xe8\xc5\x17\xa2\
\xdf\x37\x8e\x24\x98\xbf\x60\x3e\xcf\x3d\x6b\xb3\x93\xcb\x96\x2e\
\xe3\x2b\xb7\x7d\x25\x1e\x69\x85\xd6\xb0\x7c\x79\x61\x59\xe4\x86\
\x86\x06\xa6\x4d\x9f\x16\x0e\xd3\x9a\x35\xab\x79\xf6\xd9\x67\xad\
\xcf\x94\x94\x94\xd0\xda\xda\x62\xc4\xb9\xe8\x30\x82\x65\xff\xc1\
\x83\xfc\x8f\xbf\xff\x29\x1f\x7c\xf0\x61\xc1\xb5\x03\x85\xaf\xdf\
\xfc\xe6\x37\x7c\xe3\x1b\xdf\xe0\x96\x2f\xde\x62\x9c\x2a\x51\xd4\
\xca\xea\xd5\xab\xf9\xf0\x43\xfb\xfb\x97\x5d\x76\x19\x0d\x8d\x8d\
\x21\xbc\x1e\x1c\x18\xe0\xbe\xfb\xee\xf3\x14\xe5\xfc\x57\x7b\x7b\
\x3b\xad\xad\x33\xa3\x1a\x7b\xc0\x9b\x6f\x2d\xe1\x0f\x7f\xf8\xbd\
\x75\xad\x1f\xff\xe8\xc7\x46\x80\x40\x04\x65\x0f\x1c\x3c\xc8\xdf\
\xff\xf4\xa7\x05\xf7\x2e\xda\xf6\x5b\xbe\x68\x41\x08\x09\x63\x7d\
\x35\xab\x8b\xf4\x59\x69\x69\x09\xe3\xc7\x8f\xe3\x3b\x7f\xf9\x97\
\x05\x4a\x67\xb9\x7c\x2e\x22\x51\xd0\x96\x7c\x7b\x98\xb2\x16\xf3\
\xe3\x9e\x9e\xa0\xad\x2a\x0e\x47\x34\x76\xfd\xe7\x78\xca\x86\x55\
\xce\xd1\x7f\xd0\x8a\xca\x0a\x16\xcc\x5f\x40\x53\x63\x13\xef\xbc\
\xf3\x2e\xcf\x3c\xfb\x1c\x6b\xde\x59\xcb\xa5\x97\x5c\xc4\x95\x57\
\x5c\x4e\x63\x63\x03\x69\xa5\xa9\x1b\xa6\xa9\x1b\x06\x6e\x63\x29\
\x03\xb9\x52\x06\xb2\x30\x90\xd3\xb8\xae\xef\x5b\x12\x48\x26\x84\
\x74\x02\x32\x49\x2f\x8f\xdc\x24\x5d\x7a\x7a\x7a\x78\xe3\xcd\xb7\
\x58\xb4\x68\x31\x1b\x36\x6e\xa4\xba\xaa\x92\x2f\xdd\x7c\x03\x73\
\xe6\xce\x41\x89\xa2\xac\xac\x8c\x29\x53\x26\x93\xcb\x65\xd9\xbe\
\x7d\x3b\x88\x70\xf8\xf0\x51\xda\x66\xb5\x92\x4a\x27\xd8\xb8\x69\
\x23\x53\xa7\x4e\x65\xc7\xce\xdd\x54\x56\x54\x92\x48\x26\x28\x20\
\xa8\xcc\x8e\x34\x6a\x5f\xc7\x28\xb9\xd0\x91\xae\x0b\x78\x4a\xaf\
\xe3\x2e\xbe\xe8\xe2\x82\x85\xb7\x79\xf3\x66\x0e\x1f\x39\xec\x55\
\xc4\x31\x5d\x83\xa2\x59\xba\x74\xe9\x10\xa7\x9d\xe2\x54\x49\x28\
\x81\x8c\xbc\x60\x43\xbe\x37\xdf\x7a\x8b\x9f\xfe\xf4\xa7\xf4\xf7\
\xf7\x9f\x12\x0e\xe5\x72\x39\xee\xbb\xef\x3e\xd6\xae\x5d\xcb\xbd\
\xf7\xde\x4b\xc2\x49\x44\xe1\xfc\xca\x3b\xbd\xe3\x93\x7f\xd3\xe6\
\xcd\x34\x8d\x1c\x19\xf6\xdd\xd6\x2d\x5b\xac\x45\x07\xb0\x71\xe3\
\x46\x1f\x55\x45\xad\xde\xb8\x69\x63\xc1\xfd\x5b\x67\xb6\x86\x4e\
\xe8\x80\x4d\x7d\xf3\xad\x37\x4f\xbb\xed\xff\x70\xef\x3f\x90\x4c\
\x24\x7c\x3b\xd7\x50\x3e\x2d\x42\x48\xe5\x72\x79\x7e\xf4\xa3\x1f\
\x17\x2c\xba\xc0\x2e\x8c\x18\x7f\x89\x57\x8e\xb4\xc2\xe8\xe4\x53\
\x34\x6d\x4f\x21\xef\x67\xef\xba\x76\x3d\xd4\x58\xa0\x6b\xcc\xcf\
\x12\x87\xa5\x25\xa5\x25\xcc\x6c\x9b\xc9\xa8\x51\xa3\xd8\xb8\x71\
\x13\xeb\xde\x7b\x8f\x87\xfe\xf8\x08\x2f\xbc\xf0\x32\x73\xe6\xce\
\xe6\xc2\x0b\xce\x67\xd2\xc4\x09\xd4\xd7\x8f\x40\x29\x45\x89\x03\
\xa5\x09\x29\x88\xf6\x0e\xe9\x5e\x9f\x26\xec\xec\x3c\xce\x8e\x1d\
\xbb\x78\x7b\xd5\x2a\xd6\xae\x7d\x97\x1d\x3b\x77\x52\x92\x49\x71\
\xe1\x05\x67\x33\xef\xc2\x0b\xa9\xa8\xa8\x08\x37\x81\x23\x47\x8f\
\x30\x62\xc4\x08\x9a\x9a\x9a\x50\x4a\xb1\x6d\xdb\x36\x1c\xa5\x38\
\xb0\xff\x20\x6d\x33\xdb\x48\x24\x52\xfc\xfe\x0f\x7f\xe4\xc4\x89\
\x2e\x86\x0d\x1b\xc6\xa4\x49\x93\x98\x3d\x6b\x76\xd8\x01\x5a\x4c\
\x96\x4b\xc5\x88\x0a\x43\x3f\xd8\xc0\x1d\xca\x50\x61\x36\x10\x08\
\xb3\x66\xcd\x2a\x0e\x37\x97\x2d\xe3\x96\x2f\x7e\xd1\xd0\x1b\x81\
\xfd\xfb\xf6\x17\x9d\x04\x97\x5c\x72\x49\x98\xf5\x3d\x64\xa1\x9a\
\x40\x39\xd9\x20\x21\x8f\x1d\xef\xe4\xde\x7b\xef\x2d\x3a\x71\xcb\
\xca\xca\x18\x1c\x1c\x2c\x50\xb3\x7e\xe7\x9d\x77\x78\xea\xa9\xa7\
\xb8\xf5\xb6\xdb\x42\xf4\xa3\x81\x99\x33\x67\x16\x5c\x63\xe3\xc6\
\x8d\x5c\x76\xd9\x65\xe1\x26\xb3\x31\xa6\xf8\x0c\xb0\x77\xef\x5e\
\xba\xba\xba\xc2\x8a\x49\x5a\xbb\x6c\xda\x68\x2f\xbc\xda\xda\x5a\
\x46\xf9\xaa\x6b\xc1\xdc\xea\xec\x3c\xfe\x6f\x6a\xfb\xd3\x4f\x3d\
\xcd\xad\xb7\xdd\x6a\xf9\x59\x8b\x64\x7f\x01\xf0\xc8\x23\x8f\x0c\
\x5d\x87\x4f\x11\x96\x66\x46\xb4\xa5\xf5\x62\x25\x6b\x49\x11\xeb\
\xe3\xb3\x46\xae\x84\x69\x30\xa6\xd9\x6b\x86\xb5\x63\x44\x28\x87\
\x0e\x45\x09\x85\x8a\x24\xbe\xea\xb5\xa6\xae\xb6\x8e\xf9\xf3\xe7\
\x73\xc6\xd4\x33\xd8\xb8\x61\x03\x9b\xb7\x6c\xe5\xad\x37\x97\xf0\
\xfa\xeb\x6f\x50\x5f\xdf\xc0\x84\xf1\xcd\x34\x8f\x6d\x66\xe4\xa8\
\x26\xea\x47\x8c\xa0\xb2\xb2\x82\x44\x22\x01\x22\xe4\xf3\x79\x4e\
\x9e\xec\xe1\xe8\x91\x23\xec\xdb\x7f\x80\xdd\xbb\xf7\xb0\x63\xc7\
\x4e\x0e\xb6\x1f\xa4\xb7\xa7\x8f\xba\xda\x2a\x2e\x9e\x7f\x3e\xb3\
\xe6\xcc\xa6\xb1\xb1\x31\x0a\x88\x35\x4e\xdf\x5c\x2e\x47\x3a\x9d\
\x66\xf2\xe4\xc9\x68\xad\xf9\xf8\xe3\x8f\x49\xa6\x52\x2c\x7e\xfd\
\x75\xb6\x6e\xfd\x98\x0b\x2e\xb8\x80\xaf\x7d\xed\x06\xde\x7b\xef\
\x3d\x96\x2e\x5d\xca\xc9\x93\x27\x99\x37\x6f\xbe\x15\xb6\x15\x68\
\x45\x06\x92\x79\x91\xff\x48\x85\xcc\xae\x4d\x44\x68\xdf\xe1\x1b\
\xe5\xb2\x24\x24\xc1\x45\x17\x5d\xc4\x33\xcf\x3c\x63\xf5\xfb\x92\
\x25\x4b\xf8\xd2\x2d\xb7\x18\x79\x6a\xc2\x92\x25\x4b\x4f\x09\x33\
\xb5\x36\x0b\x65\x14\x5a\xe6\x2a\x34\x98\xbd\xd5\xff\xab\xfb\x7e\
\x55\x10\x3d\x33\x7e\xc2\x04\xbe\xfa\x95\xaf\xb0\x60\xc1\x02\x7a\
\xfb\xfa\x78\xfa\xa9\xa7\x78\xe4\x91\x47\x2c\xfb\xed\xc1\x07\x1f\
\xe4\xea\xab\xae\xa2\xaa\xaa\x3a\xdc\x41\x5a\x5a\x5a\x51\x4a\x59\
\xc5\x46\x36\x6e\xdc\x68\xf9\x0e\x37\x6e\xdc\x50\x74\xe2\x6d\xda\
\xb4\x91\xf3\xce\xbb\x00\x11\xcd\xf6\x4f\x76\xd3\xdb\xdb\x6b\xfd\
\x7e\xe6\xcc\x99\xbe\xc9\xa3\xc3\x8a\x4c\xbf\xfa\xd5\x7d\x43\xb6\
\xfd\xa2\x05\x17\xd1\xd3\xdb\xc3\x33\xcf\x3c\xc3\x43\x0f\x3d\x64\
\x2d\x40\xaf\xed\x57\x33\xbc\xaa\x2a\x3a\x3e\xa4\xf8\x71\x14\x2c\
\x3a\xc7\xf1\x6a\x14\x8e\x1b\x37\x8e\x8e\x8e\x0e\xff\x64\xf7\xdd\
\x33\xda\x8c\x5e\x31\x58\x53\xb1\x83\xaf\xd5\x29\xc2\xed\x4f\xa1\
\xb9\x62\x62\x7a\x65\x69\x4b\x06\xf5\xd0\xe3\x32\x6d\xb6\x16\x63\
\x14\xaf\x66\x4e\x7e\x41\xd3\x58\xdf\x40\x63\x43\x03\xe7\xfb\xb7\
\x3b\x24\x00\x00\x1a\x30\x49\x44\x41\x54\x9e\x7b\x2e\x3b\x77\xee\
\x64\xfb\xf6\xed\xec\xdb\x7f\x80\x75\xeb\xde\x65\xe5\xdb\xab\xfc\
\x9d\xda\x21\xe1\x78\x7f\x50\x8a\x7c\x3e\x47\x76\x30\x4b\x5e\xe7\
\x71\xf3\x2e\x89\x44\x82\x11\xb5\x35\xb4\x4c\x3b\x83\x49\x93\x27\
\x32\x75\xea\x54\xbb\x88\xa3\x14\xe8\x21\x93\xcb\xe7\xe9\xea\xea\
\xa2\xa9\xa9\x89\xd1\xa3\x47\x93\x4c\x26\x59\xb6\x6c\x19\xcf\x3d\
\xf7\x1c\x25\x25\x25\x5c\x72\xc9\x25\x94\x97\x97\x33\x67\xce\x1c\
\xb2\xd9\x2c\x2b\x57\xae\x24\x9f\xcf\x73\xc9\x25\x17\x47\x81\x4e\
\xa6\x1f\x49\xd9\xe1\x4d\xb6\x93\xda\x76\x06\x9b\x99\xd5\x88\x77\
\x62\xc5\x17\xde\xfa\xf5\xeb\x39\xd6\xd9\x49\x4d\x4d\x4d\xd8\xff\
\x4b\x96\x2e\x29\x18\x9f\x8b\x2f\xbe\x38\x92\x6c\x17\x3d\xa4\x1d\
\xe1\xc9\xbc\x47\x2a\x97\xbb\xf7\xec\xe6\x95\x57\x5e\x29\xf8\xdc\
\x8f\x7e\xf0\x43\x66\xb4\x78\x24\x4c\xa6\xa4\x84\xbb\xee\xbe\x9b\
\xfd\xfb\xf7\xf3\xea\xab\xaf\x5a\x13\xf2\x91\x47\x1f\xe5\x2f\xbf\
\xf3\x9d\x30\x0a\xb2\xbc\xcc\x43\x06\x66\x18\xdb\xb6\x6d\xdb\xc8\
\x66\x73\xa4\xd2\x29\x04\x8a\x96\x19\x03\xd8\xb0\x61\x23\xe7\x9f\
\x7f\x21\x22\xc2\x86\x22\x8b\x73\xd6\xac\x59\xfe\x66\xe7\xb5\x7e\
\xf7\x9e\x3d\xc5\xdb\xfe\xc3\x1f\xf8\x04\x92\x90\x29\xc9\x70\xd7\
\x5d\x77\xb1\x6f\xdf\xbe\x22\x6d\x7f\x84\xef\x7c\xe7\x3b\x58\xc4\
\xf5\x10\xaf\xba\xba\x3a\x7e\xf6\xb3\x9f\x71\xc6\x19\x53\xc2\xfb\
\x77\x77\x77\x93\x4e\xa5\x23\x3d\x22\x23\xc6\xd3\x4a\x99\x8a\x05\
\x06\x9c\x66\xac\xa6\x58\x47\x7c\xe4\x17\x8c\x02\x66\x8a\xc9\x3d\
\x8a\x2e\xe6\x3d\xa6\x30\xd2\xce\xf7\x87\x95\x95\x97\xd1\xd2\xd2\
\x4a\x4b\x4b\x2b\x7d\x7d\xbd\x74\x76\x1e\xa7\xa3\xe3\x28\x1d\xc7\
\x3a\xe8\x3a\xd1\xc5\xf1\xe3\x27\x18\xc8\x0e\x82\x16\x52\xa9\x14\
\x65\xc3\x4a\xa9\xa9\xae\xa6\xaa\xa6\x8a\xda\x9a\x5a\x6a\x6a\x6a\
\xc9\x64\xd2\xa7\xc8\xb3\xb1\x69\x62\xe5\x1b\xbd\x79\x37\x4f\x49\
\x49\x09\x23\x46\x8c\xc0\x75\x5d\x9a\x9b\x9b\xd9\xbd\x7b\x37\x0f\
\x3e\xf8\x20\x15\x15\x15\x9c\x75\xd6\x59\xcc\x99\x33\x87\x81\x81\
\x01\x56\xaf\x5e\x8d\x52\x8a\x8b\x2f\xbe\x18\x53\x72\x2f\x14\x84\
\xd5\x91\xf3\x58\x9b\xdb\x91\xd2\xf1\x38\x61\x8b\xfd\x9a\x3d\x7b\
\x36\xd5\xd5\xd5\x1c\x3b\x76\xcc\xb0\x55\x35\xcb\x96\x2d\xe3\x0b\
\x5f\xf8\x02\xe0\xd5\xfc\xde\xb4\x69\x53\xc1\xd3\x5d\x76\xf9\xe5\
\xe1\x18\x05\x31\xa3\x45\x1d\xe8\xfe\x26\x1a\xdc\xf7\xe3\x8f\xb7\
\x15\x7c\x66\xda\xb4\x69\xb4\xcc\x6c\xb1\x61\x98\x08\x97\x5c\x72\
\xa9\x35\x79\x01\xb6\x6e\xdd\x16\x56\x52\x0d\x48\xa5\x99\x33\x67\
\x5a\x0b\x2f\x97\xcb\xf1\xf1\x27\xdb\x98\x31\xa3\x85\xf6\xf6\x83\
\x74\x74\x74\x44\x36\x5b\x6b\x2b\xeb\xd7\xaf\xf7\x17\xde\x06\x94\
\xe3\xa1\xa4\x62\x8b\xb3\xad\x6d\x96\x95\x4b\xb7\x6d\xa8\xb6\xb7\
\xb4\x5a\xf3\x4f\x03\x97\x16\x6d\xfb\xd6\x28\x4b\x23\x0c\x04\x2f\
\xbe\x2c\xfe\xf6\xbf\xfc\x17\xa6\x4e\x9d\x6a\xbd\x57\x51\x51\x19\
\x37\xf6\x43\x45\xe9\x18\xb0\x2a\x48\x5b\x3b\xcd\x90\x31\x23\xeb\
\xdc\x88\x56\xf7\x22\x3a\x94\x91\x02\x2c\xb1\x9c\xc4\x68\x32\x12\
\xcf\xfb\xd2\x86\xa0\x8c\x8e\x1c\xad\x1a\x28\x2d\x2d\x65\x58\x69\
\x29\x23\x47\x8d\xb4\xe0\x6d\x14\xcb\xab\xed\x6c\xe2\x98\x06\x44\
\xb8\x09\x85\x29\x84\x06\x14\xf4\xa1\x45\xb0\x79\xb8\x79\x97\x9e\
\xde\x5e\x8e\x1c\x39\x42\x73\x73\x33\x5a\x6b\x12\x89\x04\xdb\xb6\
\x6d\xe3\xa7\x3f\xfd\x29\xdf\xff\xfe\xf7\x69\x6d\x6d\x65\xce\x9c\
\x39\xe4\xf3\x79\x96\x2e\x5d\x4a\x2e\x97\xe3\xca\x2b\xae\xf0\x7d\
\x3b\xa6\xb0\x8f\x9f\x95\xac\x6c\xa7\x2c\x46\xac\xab\x69\xfb\x05\
\x7e\x23\x49\x28\x2e\xbe\xe8\x62\x9e\x7a\xfa\x29\xab\xef\xdf\x7c\
\xf3\x4d\x6e\xbc\xe9\x46\x44\x0b\x4b\x8b\x9c\x76\x8d\x8d\x8d\x4c\
\x9f\x3e\xdd\x90\xd8\xf7\x54\xac\x65\x08\xa5\xdd\x00\x1a\x29\xd1\
\xec\xde\xbd\xa7\xe0\x23\x03\xfd\x03\xfc\xe4\xc7\x3f\x09\x75\x54\
\x83\xde\x1c\xcc\x16\x56\x2d\xda\xb3\x77\x4f\xe8\x37\x0c\xdc\x58\
\xb3\x67\xcd\xe2\x89\x27\x9e\x28\x38\xcd\x5a\x5a\x67\xb2\x61\xc3\
\x46\x83\x2d\x2c\xe5\xf3\xd7\x5f\x1f\x2e\xbc\x8d\x1b\x37\xa2\xfd\
\x22\x35\x1f\x7d\xf4\x51\x81\xbd\x36\x69\xe2\x84\x90\xc8\x40\xc3\
\x9e\xa1\xda\xfe\x93\x1f\x47\x8e\x6d\x3f\x5e\x72\x70\xb0\x50\xa0\
\x69\xef\x9e\xbd\x61\xdb\xc5\x0c\x83\x8a\xbd\x26\x4f\x9e\xcc\x59\
\x67\x9d\x15\x15\xd5\x0c\x16\x69\xa8\x3c\x60\x9b\x50\x9a\x58\x98\
\x9d\xd6\x46\x12\x39\xa7\x79\xe2\x85\xde\x7e\x3b\x8e\xd1\x96\x1e\
\x2f\x94\x3a\x8b\xa7\xcf\x68\xd3\xd1\x1e\x52\xad\x12\x93\xd0\x96\
\x50\x79\xcb\x8a\xd9\xb3\xe0\x22\x16\x83\xc7\x10\xbb\xbc\xf8\x79\
\x21\x12\x67\x99\xc4\x48\xe9\xf0\xef\xe2\xe6\xf3\xe4\xf3\x79\xca\
\xcb\xcb\x19\x3b\x76\x2c\xf9\x7c\x9e\x5c\x2e\xc7\xce\x9d\x3b\xf9\
\xf9\xcf\x7f\xce\x77\xbe\xf3\x1d\x66\xcd\x9a\x45\x5b\x5b\x1b\xfd\
\xfd\xfd\x2c\x5d\xba\x14\xa5\x14\x57\x5c\x71\x85\x91\x4d\x12\xc4\
\x37\x16\xa9\x60\x21\x56\x8e\x49\x14\x28\x2c\x11\x1b\x76\xd9\xe5\
\x97\x15\x2c\xbc\xf7\xde\x7b\x8f\xee\xae\x6e\x2a\x2b\x2b\x79\xf3\
\xcd\xb7\x0a\xc6\xe6\xd2\x4b\x2f\x0d\x15\x02\xc4\x8a\x4b\x94\x53\
\xc6\x6a\x82\xb0\x67\x4f\xe1\xe4\xdd\xbe\x63\x3b\xdb\x77\x6c\xe7\
\xb3\xbc\x0e\x1f\x3a\xc4\xe0\xc0\x60\x04\xe9\xc5\x3b\x99\x0a\x61\
\xe4\x06\x94\xd8\x27\xd9\xb4\x69\xd3\x98\x35\x3b\xfa\x6c\x5f\x5f\
\x1f\x3b\xb6\xef\xa4\xa1\xb1\x81\xdd\xbb\x77\x17\xd8\x77\x4e\x22\
\x61\x1d\x25\xff\xa7\x6d\x3f\x74\xf8\x10\x03\x03\x83\x94\x04\x81\
\xf1\x43\xb0\x9a\x53\xa6\x4c\xf1\x73\x20\xe3\xd1\xaa\xc4\x32\xfa\
\x23\xd1\x2a\xfb\x33\x71\x71\x5c\x3d\x14\x4f\x33\x54\x70\x6d\x20\
\xec\xe9\xf8\xff\x76\xec\xe4\x4a\x65\x24\x21\x1a\x85\xd9\xcd\x44\
\x49\xc7\x10\x75\x0d\x13\x06\x95\x20\xfe\xb5\xec\x24\x42\xfb\xda\
\x4a\x39\xa1\xb8\xab\xa3\x8a\x14\x7e\x57\x76\x25\x4e\x65\x24\x9f\
\x4a\xec\x9a\x96\xf8\xa8\xf1\x9d\xc6\xc6\x46\x5c\xd7\xa5\xb4\xb4\
\x94\x71\xe3\xc6\x31\x79\xf2\x64\xc6\x8f\x1f\xcf\xe1\xc3\x87\xf9\
\xc5\x2f\x7e\xc1\x9a\x35\x6b\xc8\x66\xb3\xcc\x9a\x35\x8b\x39\x73\
\xe6\xb0\x78\xf1\x62\x5e\x7e\xf9\x65\x23\x81\xd4\x2f\x27\x56\x34\
\x39\xd3\x89\x92\x45\x83\x36\x39\xca\xef\x13\xaf\x1d\x73\x7c\xb8\
\x69\xbe\xf2\xf9\x3c\xcb\x96\x2d\xa3\xb3\xb3\x93\x0f\x3e\xf8\xa0\
\x38\xcc\x0c\x13\x47\x0d\xd1\x5c\x29\x5e\x7f\xdb\xec\x2b\xd3\x89\
\xfd\x6f\x7d\x1d\x3d\xda\x11\x25\x97\x8a\x50\x37\x62\x04\xa3\x46\
\x8d\xb2\x17\xde\x47\x1f\x21\x22\xd6\x49\xd6\xda\xda\xca\x98\x31\
\x63\x19\x3e\x7c\x78\xf8\xde\x47\x1b\x3e\x62\xe3\x86\xe2\xf6\x5d\
\xd4\x9f\xde\x3c\xfc\xbf\xd1\xf6\x63\x47\x8f\x86\x73\x2f\x18\xab\
\x62\x88\xc2\x14\xc0\x0d\x13\x96\x1d\xbb\x0a\xb0\x39\xcf\x94\x95\
\x44\x6b\x8a\x0f\x7b\x63\x7e\x5a\x36\x9e\x29\x97\xad\xac\xe4\x32\
\xc3\x7f\x21\x3a\x8c\xe0\x0f\x0a\x7a\x44\x02\x2f\xb6\x44\x41\xa4\
\x06\x12\xab\xa2\x23\x91\xcc\x9a\x18\xf9\xfb\xda\xf0\x0a\x4a\xa8\
\xe5\xe1\xcb\xdb\x59\xea\x6d\x36\x24\xf6\xa0\xb2\xb6\xed\x3c\x23\
\xb6\xd2\x84\x05\xe3\x9a\x9b\x69\x3f\x74\x88\x83\x07\x0e\x90\x4e\
\xa7\x19\x3d\x7a\x74\x58\x88\x65\xf7\xee\xdd\xfc\xfa\xd7\xbf\xe6\
\xae\xbb\xee\xa2\xa5\xa5\x85\x96\x96\x16\xfa\xfa\xfa\x58\xbc\x78\
\x31\x8e\xa3\xb8\xe6\x9a\x6b\x0a\x35\x57\x4c\x7a\x39\xd4\xed\xc0\
\x48\x6d\x88\x7c\x92\x00\x8e\x72\xb8\xe4\xd2\x4b\x79\x32\x06\xd5\
\xde\x78\xe3\x0d\xaf\x96\x44\x6c\xb7\x6c\x6c\x6c\xa4\x65\xc6\x74\
\xa3\x66\xba\x8a\x12\x34\x8b\x5a\xba\x41\x11\x16\x4f\xb7\x66\xf4\
\xe8\xd1\xac\x5a\xb5\xaa\x80\x21\xad\xaa\xaa\xfa\xcc\x93\x37\x93\
\x49\x45\xf6\xa5\xff\xde\xec\xd9\xb3\xd9\xb7\x6f\x5f\xf8\x99\x83\
\xed\xed\x1c\x6c\x3f\xc8\x96\x2d\x5b\xc2\xf7\x5a\x5a\x5a\x51\x22\
\xb4\xb6\xb6\xb2\xcc\x0f\x7f\x5b\xff\xd1\x47\x1c\x3d\x5a\x18\xf8\
\x3d\x7b\xf6\x9c\x30\x63\x3e\xe0\x07\xff\x6f\xb4\x3d\x95\x4e\x47\
\xf1\x95\x43\x64\x0d\x94\x96\x96\xfa\x1b\x99\x9f\x0e\x14\x64\xbc\
\x86\x1b\x99\x21\x6a\xa4\xb0\x0b\x9b\xd8\xb2\xb3\x56\xe0\xf8\x69\
\xd8\x78\x26\x62\x92\x21\xfc\x1e\x51\xae\x59\x14\x50\x2c\x26\xb0\
\xf2\xec\x41\x1d\x73\x2e\x9a\x47\xb3\x15\x1f\x67\x40\x52\x4b\x28\
\x32\x12\x99\x34\x73\x9c\xa2\x28\x82\x38\xbb\x67\xff\x0c\x33\x99\
\x4d\xdb\x11\x48\x24\x93\x5c\x78\xc1\x05\x2c\x5d\xba\x94\xfd\xfb\
\xf7\x53\x5a\x5a\xca\x98\x31\x63\xc8\xe7\xf3\x38\x8e\xc3\x8e\x1d\
\x3b\xb8\xef\xbe\xfb\xb8\xf3\xce\x3b\x99\x3a\x75\x2a\x2d\x2d\x2d\
\xe4\xf3\x79\x5e\x7a\xe9\x65\x72\xb9\x3c\x9f\xff\xfc\xe7\x0b\x22\
\x77\xac\xa7\x94\x42\x1d\x95\x78\x4c\xe7\x15\x97\x5f\x5e\xb0\xf0\
\x56\xaf\x5e\x4d\x77\x77\x77\xc1\xb8\x5c\x7e\xf9\xe5\xbe\xbc\xb9\
\xc9\xa6\x9a\x59\xdc\x45\xb2\x13\x24\x4a\x6d\x19\x37\x6e\x5c\x51\
\x82\xe2\x17\xbf\xf8\x39\x85\xd2\xb1\x9f\xf2\x32\x82\x2a\x66\xcd\
\x9e\xcd\x0b\x2f\xd8\x95\x5c\x9f\x7e\xea\x69\x72\xb9\x9c\x01\x1f\
\x5b\x11\xa5\xac\x85\xf7\xd1\xfa\xf5\x1c\x8d\x65\x5c\xa4\x52\x29\
\x66\xb4\xcc\x08\xab\x1d\x05\x1b\xda\xb8\xe6\xa1\xda\xfe\x8b\xa2\
\xed\x1e\xea\x19\x8a\x89\x34\xc5\x1f\x2b\x70\xee\x47\x2c\x7d\xb1\
\x39\x5f\xa4\x14\xb6\xe5\x76\x93\x02\x51\xdd\x4f\x87\x9a\xca\x38\
\x3e\x55\xa1\x16\x85\xc4\xb4\x3f\x44\x1c\xff\x7d\x27\xa6\xc3\x6f\
\x1f\xd3\x61\x7d\x00\x55\xfc\x5a\x01\x1c\x0b\xef\x67\x6a\x7f\x58\
\x30\xd1\x89\xb4\x30\xa4\x88\xf6\x46\xac\x4e\x81\x63\x69\x81\x98\
\xb5\x02\xbc\x7b\x5c\x38\x6f\x5e\x08\x3b\x53\xa9\x14\x23\x47\x8e\
\xa4\xb9\xb9\x99\xd1\xa3\x47\xd3\xd5\xd5\xc5\xef\x7e\xf7\x3b\x3e\
\xfc\xf0\x43\x5c\xd7\x65\xca\x94\x29\xb4\xb5\xb5\xb1\x70\xe1\xc2\
\x58\x9b\x62\xf5\x01\x94\x58\xd5\x4e\xcd\x7a\x01\x66\x7f\xcc\x99\
\x33\xc7\x73\x1f\xc4\xa2\x2e\x8a\x85\x43\x5d\x7e\xc5\xe5\xfe\xb3\
\x48\x21\xe4\x2f\x7e\xe4\x59\xda\x28\xcd\x45\x26\xef\x92\x25\x4b\
\x38\x74\xe8\xb0\xa1\xab\x22\x06\x84\x8d\x9e\xa7\x7f\xa0\x9f\xc3\
\x87\x0f\x1b\x35\x01\xa2\xcf\xce\x9d\x33\xa7\xe0\xba\x4f\x3d\x15\
\xd9\xae\xa3\x46\x8d\xa2\xa6\xa6\x16\x11\x61\x66\x5b\x5b\x44\xd6\
\xec\xd9\x53\xf0\x9c\x33\xa6\x4f\x27\x9d\x4a\x59\x26\x81\x52\x42\
\xf3\xb8\xe2\x6d\x6f\x6f\x6f\xb7\xda\x1e\xf5\x4d\x34\x3f\x82\xb6\
\x2b\xa3\x3e\x45\xa0\x19\x54\xcc\xf3\x19\xcc\x5b\x27\xa6\x21\x63\
\xc2\xf6\x48\x33\xc7\x36\x31\x54\x4c\xa3\x46\xd4\x69\x14\x2d\xf1\
\xd8\x46\x43\x9c\x07\xbb\x60\x47\x20\xbe\x83\xb1\x30\x14\x12\x96\
\x25\x0e\xaa\x7c\x86\xa5\x78\xc5\x28\x3e\xe1\x95\xf5\xb0\x0a\x68\
\x28\xb3\xec\x73\xb8\x53\x1b\x36\x8c\x32\x84\x77\x82\x62\x21\x86\
\x4d\x19\x16\xfa\x90\xa0\xcc\x2e\x86\x28\x93\xf8\x99\xee\x91\x48\
\x91\x40\x68\x23\x29\x84\xa4\xe3\x41\xbe\x91\x23\x47\xa2\xb5\x26\
\x93\xc9\x84\x8b\x6f\xcc\x98\x31\x74\x76\x76\xf2\xfb\xdf\xff\x9e\
\x0f\x3e\xf8\x80\x6c\x36\xcb\xc4\x89\x13\x3d\x07\xaf\x8a\x36\x18\
\x15\xdb\xa4\x54\xd0\x0e\x31\x4b\x31\xfb\x7d\x44\xd4\xb7\x09\xc7\
\xe1\xb2\xcb\x2e\xfb\x54\x98\xd4\xd4\xd4\x44\xeb\x8c\x96\x28\x7a\
\x22\xe8\x0b\xbc\x8c\xfe\xa1\x26\x91\x18\x6d\x6b\x9b\x35\xb3\x60\
\x91\xbb\xae\xcb\x6f\x7f\xfb\x5b\x72\xb9\xac\x5f\xf8\x43\x59\xa2\
\x4e\xdd\xdd\x5d\xdc\x7f\xff\x03\x5c\x79\xc5\x95\xbc\xbd\xf2\x6d\
\x6b\x92\x05\xc2\x49\x63\x9b\x9b\xa9\xa9\xb6\xaf\x6b\x9e\xd8\xad\
\xad\x33\xfd\xbe\x50\xb4\x98\xa7\x19\x14\x44\xa1\xcc\x9e\x33\x27\
\x2c\x5c\x22\x61\xc9\x64\x35\x64\xdb\x7f\xf7\xbb\xdf\x91\xcd\x66\
\x8d\x05\x10\xd9\xd4\x5d\x5d\x5d\x3c\xf0\x80\xdf\xf6\xb7\x57\x46\
\xe5\x92\x83\x39\x34\x04\xbf\x51\x58\xa2\xd9\x38\x28\xb0\x0b\xbe\
\x28\x89\x16\x6b\x50\xea\x39\x6c\xbf\x2f\x18\x76\x7a\x36\x9e\xd9\
\x90\x98\x0c\xb8\x14\xad\x45\x26\x43\xc6\xad\x61\x42\x23\x6d\xfd\
\xd3\xfe\x7b\x20\x16\x64\x22\xb2\xb8\x72\xb3\x8d\xed\x0c\x86\xc9\
\x84\x5e\x91\xdc\x9d\x32\x3c\xfb\xa6\x93\xdb\x16\xd7\xf1\xbe\x75\
\xe9\xa5\x9e\xff\x67\xd7\xae\x5d\xa4\x52\x29\x9a\x9a\x9a\x42\xb6\
\xf3\xc0\x81\x03\x3c\xfe\xf8\xe3\xdc\x70\xc3\x0d\x4c\x9c\x38\xd1\
\x0b\x3d\xb3\x3a\x35\xca\xcd\x36\x63\x34\x45\x0a\xa2\x35\x0b\x34\
\x38\xaf\xb8\xe2\x0a\xfe\xf4\xa7\x3f\x9d\x72\xe1\x5d\x71\xc5\x15\
\x06\xdb\x66\x06\x5f\x33\x24\x30\x94\x98\x50\x52\x79\x59\x39\x7f\
\xf5\x57\x7f\xc5\xf7\xbf\xff\x7d\xeb\x73\x4f\x3c\xf1\x04\x2f\xbd\
\xf4\x12\xf3\xe7\xcf\x67\xc1\xfc\x05\xf4\x0f\xf4\xb3\x63\xc7\x0e\
\x76\xee\xdc\xc9\xda\xb5\x6b\xe9\xeb\xeb\x0b\x1b\xac\xcc\x08\x01\
\xc3\xac\x98\x3d\x67\x36\x8b\x17\x2f\x2e\xda\x8e\xb6\xb6\x99\xfe\
\xc9\x01\x65\xa5\x65\x05\x4e\x77\xf3\x35\x77\xee\x5c\xcb\xd4\x09\
\x9e\xae\xac\xac\x8c\xbf\xfa\xcf\x7f\xc5\xf7\x7f\x30\x44\xdb\xe7\
\xcd\x67\xc1\x45\x0b\xe8\xef\x1f\xa2\xed\x46\x3d\xf2\xa1\xca\x65\
\x47\xcf\xa8\x62\xd3\x56\x62\x3f\x4d\x47\xb9\x69\x52\x68\x43\x63\
\x54\x4e\x79\x9f\xa1\x8b\x96\x58\x1e\x40\xb1\x4b\x09\xc7\x1c\x87\
\xa6\xad\x17\xf9\xdd\x8c\x84\x9e\xb0\x54\x2d\xb1\xe4\x60\xb1\xbe\
\x43\x11\xad\x46\x29\x82\xdd\xc3\xeb\x89\x91\x2c\x8a\x11\xd8\x6d\
\x26\xcf\x9a\x31\xa7\x81\xda\x15\xb6\xa4\x4f\xd0\x93\xa9\x54\x8a\
\x6b\xae\xbd\x86\x17\x9f\x7f\x91\xed\x3b\xb6\x87\x27\x9f\xeb\xba\
\x88\x08\xfb\xf6\xed\xe3\xc9\x27\x9f\xe4\x73\x9f\xfb\x1c\x63\xc7\
\x8e\x8d\xe4\xdb\x8d\x48\x1d\x8b\x3e\x0a\x7d\x9f\x43\xb9\x53\xbd\
\xef\xcf\x9d\x7b\x26\xb5\xb5\xb5\x1c\x3d\x7a\x74\xc8\x85\x77\xe5\
\x15\x57\x14\xba\x4f\x24\x2a\x2e\x73\x6a\xcd\x95\x48\xb8\xe8\xba\
\x6b\xaf\xe3\x99\x67\x9e\x61\xcd\x9a\x35\xd6\x67\x7b\x7b\x7b\x59\
\xb8\x70\x21\x0b\x17\x2e\x3c\x85\x59\x67\x5f\xcf\x4c\x5f\x9a\x3d\
\xfb\x14\x0b\x6f\xe6\x4c\xcb\x19\xde\xd6\xd6\x56\x74\xe1\x89\x08\
\xb3\x66\xcd\x8e\xf4\x39\xcd\xc5\x80\x70\xdd\x75\xd7\xf1\xcc\xb3\
\x43\xb4\x7d\xd1\x42\x16\x2e\xfa\xf4\xb6\x5b\x71\x96\x22\x43\x32\
\xfa\x1a\x5d\x2c\x24\x83\x22\x22\xa8\x61\x1e\xaa\x9d\x0a\x2c\xa7\
\x8c\xd7\x2c\xae\xab\x49\x0c\x1e\x2a\xc2\x7a\x6e\x91\x66\x62\xcc\
\x26\x50\x81\x76\x61\x00\x43\x23\x98\xf5\xff\xb7\x77\xf5\x3c\x72\
\x1d\x47\xb0\x6b\x28\x7e\x00\xa4\x0c\x5b\x80\x79\x07\x10\x20\x08\
\x30\xf0\x5d\x24\xcb\x04\x73\x27\x16\x44\xd8\x8e\xe8\xc0\x8a\x14\
\x10\xf6\x2f\xd0\x2f\x10\x1c\x28\x93\x52\x67\xca\x18\x29\x52\xa4\
\xdf\x21\x33\xa2\x65\x39\x12\xa0\xc0\x67\x80\xc0\x05\xa4\x75\x68\
\x07\xfb\x66\xba\xaa\xa7\xe7\x78\x27\x08\x8a\x76\x23\xf2\x6e\x77\
\xef\x7d\xcc\xbc\xa9\xa9\xae\xae\xea\x79\x69\x8d\x72\xe1\xac\x7b\
\x14\xb2\x77\x67\x0b\x68\xd4\xe1\x9b\xb5\xc0\xcd\xe1\xcb\x88\x2d\
\xb7\x2c\xf6\x22\x46\xdf\x03\x6b\x7d\x97\xac\x10\x0f\x94\xa5\x36\
\x72\xff\x6c\xf8\x39\xee\x10\xf6\x15\xfb\xfd\x1f\xff\x60\xf7\xee\
\xdd\xb3\xb3\xb3\x33\xbb\x7a\xf5\xaa\x1d\x1c\x1c\xd8\x9d\x3b\x77\
\xec\xf0\xf0\xd0\x4e\x4f\x4f\xed\x8b\x2f\xbe\xb0\xe7\xcf\x9f\x53\
\x2e\x1a\xef\xf3\xda\x5c\x6e\x69\x26\xfb\xdb\x36\xae\xc5\xee\x0e\
\xbc\xf1\xc6\x15\x7b\xf7\x77\xef\x9e\x0f\x33\xdf\x7e\x3b\x7c\x28\
\x3b\x6c\x86\x09\xb5\x5d\x8b\xa4\xfb\x35\x0d\xaf\xcd\x4f\x3f\xf9\
\x64\x10\x43\x97\x79\xf5\xec\xc1\xb1\x8f\xb2\xf0\x37\x7d\xf8\xf0\
\x61\xf9\x99\xeb\xd7\xaf\xdb\xd1\xf1\x51\xec\x7b\x1a\xec\xd7\xef\
\xbc\x53\xbe\xf7\xe8\xe8\xc8\x7e\xf6\xe6\x9b\x74\xdd\xf8\x5c\x77\
\xd0\xed\x93\x4f\x7f\xe8\xb1\xcf\x19\x85\xa8\x95\xe5\x94\x87\x18\
\x5b\x09\x23\xd8\xd9\xe8\xd8\xfa\xbd\xdf\xf9\xd0\x82\xc6\xb2\x45\
\xbe\xe1\xc5\xc9\x95\x46\x64\x0a\x1b\xb1\x26\x22\x81\x6a\x54\x0d\
\xb1\x2f\x8c\xf0\x46\x4b\xfb\xb2\x64\xb4\x2a\x86\xa8\x36\xd5\xd9\
\xc4\x8c\x34\x11\x17\x8d\xf7\x97\xad\x4d\x84\x0d\x3f\x18\x84\xe0\
\x40\x3c\x58\xa6\x50\xc9\xed\xef\x5d\xbb\x7a\xd5\x1e\x3f\x7e\x6c\
\xf7\xef\xdf\x1f\x84\x0b\x4f\xbe\x17\x2f\x5e\xd8\x97\x5f\x7e\x29\
\x4f\xd1\x96\x42\x17\x1b\x05\x55\xf2\xa6\x9b\x89\x16\xa3\xfa\xe2\
\x7b\x8f\xde\x5b\xaf\x76\x8f\x1e\x8d\x01\xc1\xc7\xc9\xa1\x8f\xe7\
\x3d\xe9\x9b\x98\xf1\xc2\x7e\xfe\xd6\x5b\xf6\xf1\xc7\x1f\xdb\x67\
\x9f\x7d\xb6\x2b\x18\x9f\xf3\xf9\xbb\x77\xef\xda\x93\x27\x4f\xec\
\xe9\xd3\xa7\xf6\xf8\xf1\xe3\x11\x18\xc9\x04\x0b\x00\x3b\x3e\x3e\
\xb2\x9b\x37\x6f\x96\xcc\xe3\xb5\x6b\xd7\xc7\x1e\x1b\x80\xfd\x66\
\x31\xf1\x1e\x3c\x78\xb0\xdb\x83\xcb\x43\xbe\xc9\x80\x7e\xeb\x17\
\x3f\xf4\xd8\xff\x44\x7b\xf0\x6e\xc0\x5b\x8b\x0d\xa7\x87\x28\x05\
\x90\x8e\x71\x6b\x4a\xd4\x35\xe2\x3c\x1a\x1b\xe9\xae\x8c\xa8\x3e\
\xfc\xfb\x87\x13\x06\xfa\xcb\x6f\xff\x5a\x01\x3c\x81\x88\xf1\x9f\
\x70\xa9\x62\x7f\x17\x59\x7a\xa1\x19\x71\xea\xb7\xdd\x3d\x2a\xd4\
\x93\x11\xa0\xc8\xdb\x72\xc9\xb7\x62\xb3\xd8\xcb\x0f\xd3\xe6\x31\
\xf2\xd1\xe8\x1b\xbc\x56\x78\x8e\x7f\xff\xef\xfb\xef\xed\xf3\xcf\
\x3f\xb7\x67\xcf\x9e\xd9\xd9\xd9\x99\x9d\x9e\x9e\xda\x77\xdf\x7d\
\x67\xdf\x7e\xfb\xad\x9d\x9c\x9c\xd8\x3f\xbe\xfa\x6a\x4a\x1e\x1e\
\x7f\xd6\xf5\xaa\x85\xf5\x1b\xc1\x5f\xb7\x3a\xf9\xa7\x0a\x14\x49\
\xbe\x37\x96\xba\xd4\x43\x25\x11\xb2\x3a\x14\x9a\x41\x24\x8d\x2d\
\xdc\xec\xe5\xab\x57\xf6\xcd\x37\xff\xb6\xaf\xbf\xfe\xa7\x9d\xfc\
\xf7\xc4\x6e\xff\xf2\xb6\x1d\x1c\x1c\xd8\xe1\xe1\xa1\x1d\x1c\x1e\
\x88\x8f\x8c\x6b\xe8\x5c\xd2\xe2\x7a\xaa\x69\x86\x7f\xca\xf0\x33\
\x81\x42\x6f\xee\x56\x4f\xd6\x42\x72\x9e\x45\x03\x96\x01\x66\x2f\
\x5f\xbe\xda\x09\xed\xff\xf5\xb5\x9d\xfc\xe7\xc4\x6e\xdf\xa6\x63\
\x3f\x38\xd4\xef\x9a\x74\xbc\x91\x40\x13\x41\x23\x7c\x59\x29\x90\
\x45\xfa\xbb\x72\xcc\x76\x1a\x00\x23\xc2\x79\xf7\x9e\x8f\x9e\x7e\
\x74\xd1\x3d\x9e\x91\xb9\xc5\xae\x1a\x07\x73\xd1\x3e\xf6\x3d\x96\
\xa1\x49\xee\xd8\xf8\xb9\xf5\x0c\x34\x92\x49\x21\x55\xd2\xc0\x62\
\x55\x68\x54\x52\x2f\x3e\xa6\x2c\x6c\x96\x5c\x85\xc3\xb4\x27\x75\
\xb8\x5e\x54\xe7\xd0\xc4\xe1\x42\xec\x24\x04\x37\x1a\xac\x91\x79\
\x7d\xf5\xda\x35\x7b\xff\xcf\xef\x53\xbb\x87\x99\xda\x29\xba\x16\
\x4b\x69\xd0\x7b\x0b\x1b\xbc\xde\xcf\xd8\xe0\xe4\xe3\xe1\xa4\x8a\
\x53\xd3\xde\x4e\xfe\xb8\x19\xe5\xb3\x85\x58\x61\xec\x66\x9b\x8b\
\x95\x83\xb5\xc8\x2e\x18\x42\x77\xf6\xb8\xec\x77\x93\x7d\x1c\x00\
\xbb\x71\xfd\x86\x1d\x1d\xff\x6a\x07\x09\x53\xf8\x15\x77\x7f\x23\
\xd9\xff\x8d\xac\xc0\xf4\x8c\x66\x11\x39\x79\x56\x8f\xc1\x88\xec\
\x43\x81\x18\xfc\x3c\x01\x9b\x17\xe5\x4f\x57\xcb\xc3\x1b\x37\x6e\
\xd8\xd1\xf1\x91\x1d\x1f\x1f\x19\xa7\x20\xb1\xe5\x9e\x0f\xa7\xb1\
\xee\xbf\xd9\x46\x7d\x38\x74\xf4\x88\x9c\xf5\xec\xbf\xc3\x6e\xd3\
\xbd\xdc\xbc\x7d\xd6\xe1\x9b\x07\x4b\xe5\x9e\xbd\xac\xd3\x5f\xc4\
\xfa\x01\x12\x18\xd1\x57\xb8\xe8\xe4\xad\x18\x4a\x14\x9f\x4f\x0e\
\xd9\xa6\x6e\x4f\x31\x55\x88\x2d\x03\x33\x8f\x55\x9b\xc5\x1c\x2e\
\xa1\x57\xc7\xd4\x46\x5b\xda\x27\x34\x3c\xd1\x73\x51\xd4\x84\xb4\
\x2b\xd8\x48\x9b\x0b\xa9\x0b\xbd\x1e\xb2\x8d\x17\xd2\x45\xcb\xc7\
\xc1\xbd\xfc\x62\x98\x6a\xe9\x7c\x91\xde\x63\x29\xd5\x69\x66\x99\
\x51\x9d\x90\x15\xa6\x4d\xd3\x6f\xf3\x43\x2f\xff\x9d\xb8\x57\x64\
\xa8\x9e\xdc\xb8\x79\x6c\x38\xe5\xe5\x99\x24\x8e\xa0\x72\xad\xb6\
\xec\xae\x3d\x51\x7b\x69\x82\x62\x62\xc6\x55\xd4\x80\x9a\x91\x87\
\x3a\x6d\xca\x58\x26\x25\x46\xfe\x4e\x2b\xae\x9a\xe1\xb2\xf6\x7e\
\x80\x08\xbd\x04\x2e\x80\xf3\x43\x5d\x0c\x6b\x98\xb6\xec\x4f\x72\
\x61\x36\x73\x96\x1c\x3d\x01\x1d\x29\x83\x8e\x26\x3b\x27\xb2\x72\
\x16\x5b\x87\x8f\x02\x51\xa8\xed\x43\xd8\x44\x8e\x74\x72\x2f\xd9\
\x45\xcb\xcc\xad\x40\x68\xb5\xc2\x5b\xf0\xad\xf1\x9b\x4c\x69\xb5\
\x14\xfb\xc3\x93\xd4\x93\x35\x5e\x86\x6c\x50\x04\x0d\xb5\x80\x22\
\xbc\x96\x2c\xe0\x55\x1c\x44\x50\x57\x8f\x79\x58\x17\x12\xac\x8a\
\x58\xe9\xd1\x08\x26\xb1\x57\x02\xc1\x32\xec\x1c\xdf\x41\x9d\x22\
\xf9\xbc\x1d\xf3\xcf\xd9\xd9\xce\x7d\x3e\xd3\x29\xbd\xd3\xc9\x76\
\x30\x7e\x2f\x1e\x98\x5d\xfa\xb5\xad\x78\xc3\xf1\xd9\x97\x08\xd9\
\x08\x13\x09\x34\xee\xc5\xf0\x91\x9d\xa8\xa4\x78\xc4\x3c\x67\x26\
\xff\xe2\x75\xbc\x26\x65\xa2\x58\xdb\x90\x8d\x94\xc8\xb0\x94\x57\
\xab\xdc\xb6\xd3\xe8\x89\xe1\xea\x95\x8c\x14\x9e\x81\xb0\xf7\xb6\
\x32\x3b\x04\x72\xfd\x03\xc2\x18\xf5\x94\xf5\x09\x1b\x70\xc3\x5c\
\x43\x26\xdc\x3d\xd5\x24\x37\xed\x23\xc9\x7d\x38\xfa\x62\x97\x99\
\xdd\x26\x31\xd2\x38\x13\xd7\xe0\x8f\xec\x11\x39\xba\x2a\xd2\xfd\
\xc6\x16\x46\x11\x4e\xe8\x5b\x3d\xd0\xe3\xf3\x46\x2b\x8d\x53\xac\
\xf1\xc8\xb4\x73\x1f\x3a\x59\x07\x7b\x3d\x3a\x2d\x2e\xbc\x3a\x7a\
\x58\xf4\x0b\x12\x68\xd2\xc2\xd8\x24\x63\x8f\x00\xbe\x47\x3d\xcf\
\xd9\xc1\x79\x83\xb0\x4e\xf9\x75\x8d\xed\xee\xb3\x19\x6e\x6f\x93\
\x72\x0e\x7e\xf1\xc8\xcb\x30\x0e\x34\x49\x66\xb9\x0b\x0b\x3e\x6f\
\xbe\xfd\xcd\xe8\xfe\x1e\xea\x11\xa7\xba\x6a\xcb\xb3\xcc\x15\xa9\
\x38\xcb\x10\x77\x02\xe1\x3e\x59\x1b\xf2\xd6\x82\x6d\x07\x4d\x82\
\x2b\x2f\x65\x76\x14\x9d\x24\x6d\x55\x63\x2c\xec\xca\x13\xcc\x2b\
\xc0\x21\x67\xe2\xe5\x03\x9b\xa1\x90\x4f\xc5\x49\x97\x47\x40\x86\
\x30\x05\x7c\x82\x62\x30\x09\x85\xc4\x9c\x02\x07\x2c\xa0\x56\x05\
\xef\xd2\x51\x38\x24\x9f\xc6\x6c\x8a\x72\x44\xfd\x69\x64\xe4\x9c\
\x82\x31\x27\x07\xb3\x7c\xbd\x2c\x85\x68\x42\xdf\xeb\x11\x32\xc3\
\x93\xd0\x4a\xfd\xe1\x7a\xbb\x50\xc8\x34\xcb\xfb\xc8\xe6\xbf\xf9\
\x4d\x13\x28\x17\xc8\x8d\x69\xd0\x9a\x2d\xb6\x18\xa8\xe1\xa5\x8c\
\xc8\xa2\x80\x8d\x9c\x54\x84\x5a\x7b\x8a\xe5\xbd\xb0\x52\x6f\x5b\
\x8a\x41\xce\x2b\xd2\xaf\xc9\x95\x2b\xb2\xb9\x0f\xa7\xe0\x70\x56\
\x66\xdf\xc4\xc2\x52\x92\xe0\x86\x6e\xce\xd9\x43\x43\x53\xb5\x63\
\x25\x0a\x58\x9b\x36\xe4\x16\xb0\xd3\x32\x5b\x56\xf0\x62\xdd\xef\
\xa4\x0f\x40\x6f\x18\xab\xc3\x94\xf8\x98\x57\xa2\xd4\x47\xe1\x85\
\x45\xbb\xa5\xf8\x32\x86\xb1\xdc\xa5\xdd\x1b\x4c\x3d\xb9\x20\x3b\
\xbb\x0e\xbb\x09\xec\x1a\x85\x79\x92\xbb\x47\x68\x26\x03\xb0\x04\
\xd8\x40\x79\xe5\xfd\x29\x4e\x54\x6a\x47\x14\x05\x35\x3a\xae\x57\
\x85\xa0\x7b\x24\xf2\x08\xf9\x48\x37\x3d\x88\x3d\xba\xc7\x03\xfa\
\xb9\xec\x13\xd9\x30\x29\x99\x88\xc6\x9d\x23\x77\xea\xe8\x94\x71\
\x49\x30\x12\xc7\x68\x8f\x08\x39\xb7\x3c\x06\x9d\x91\x60\x58\xaf\
\x9b\x27\x36\x9a\xb6\x43\x89\x34\x76\xda\xda\x18\x89\x26\xe0\x3a\
\x07\xe6\x63\xb6\xcb\xad\x78\x26\x6d\x3c\x14\xac\xd4\xf7\x78\xcd\
\xa4\x1c\x30\xed\xcd\xb7\xa6\x02\xfe\x26\x83\x15\xdd\xb9\x5d\xde\
\xe5\x06\x82\xa5\xec\x24\x2d\xb6\x32\x64\x3c\xa9\x11\xc3\xb1\x99\
\x8f\x54\x1f\x0d\x91\x1f\x0a\x06\x62\x61\xdd\xf2\x05\x94\x66\x9f\
\x78\x4e\xfb\x0e\xc6\xc8\xb9\x12\x9c\x6c\xd4\x77\x34\x6c\xc0\x1b\
\x61\x90\xbe\x87\xe5\x0c\xb8\xee\xa9\x0c\x0f\x55\x05\xe7\x10\x52\
\xdc\x13\x06\x51\xc4\xfb\x39\x1b\x8d\xb8\x01\x37\x93\x82\xc7\xba\
\x2b\x5a\x88\x23\x38\xbf\xdd\x3b\x21\x22\xd9\xde\x85\x45\xfd\xe0\
\x42\x68\x2f\x3d\x06\x7b\x4b\x7e\xa0\xb4\x7a\xb4\x28\x2d\x8c\x8e\
\x7c\x80\x60\x9f\xc9\xde\xb4\x9b\x66\xed\xf2\xd6\xdb\xd8\xf6\x45\
\x4e\x7a\x4c\xd8\xd6\xb1\x6a\x6f\x60\x09\xfa\x92\x8e\xdd\x8c\x3d\
\x52\xdb\xc8\xad\x8b\x98\xe5\xfe\x00\x34\xf4\xbd\xac\xd1\x39\x6a\
\x97\xc9\x20\x98\xfa\x98\x1d\x13\x90\x32\x9e\x88\x1b\xc4\x65\xed\
\xfd\xea\x25\x18\x35\xe6\x9c\x58\x39\x5b\x1a\xca\x54\x7c\x54\x05\
\x39\x6b\xf2\x03\xd3\xef\x57\x1c\x9c\x9d\xc7\xd7\x41\x90\x6c\x09\
\xe5\x0a\xb4\xb3\x64\xb0\x90\x76\xd8\x58\x5c\x1b\x3d\x78\x4d\x12\
\xb2\x12\xc5\xa0\x66\xce\x12\x0b\x97\x99\x54\x9c\x7b\x75\xe6\x16\
\xad\xea\xc2\x4f\xba\x5c\xac\xee\xdb\x8c\x16\xe7\x43\x2b\xee\x47\
\x75\x53\xd2\x36\x06\xc5\x50\x63\x67\x04\x5b\xc0\x5b\x14\xf7\x52\
\x1f\x1c\xc5\x78\x81\xcd\xf7\x2e\x43\x20\xac\xb6\x1f\x56\x5a\xdb\
\xdb\x65\xed\xfd\x32\xab\x69\x14\x1c\x38\xa0\x9a\xac\xf3\x51\xb0\
\x6a\x59\x83\xc9\xc5\x54\xd8\xa4\xd9\x54\x31\xa5\xa5\x3a\x92\x82\
\x49\x23\x28\x31\xe8\x6d\xf7\x09\x12\xcc\x79\xdb\x73\xf1\x7c\x10\
\x01\x09\xb2\x15\x68\x79\x08\xb8\x3d\x31\x81\x9a\x8b\x18\x14\xa4\
\x97\xec\x67\x0d\x7d\x2c\xb3\x8f\x9e\xe1\x89\x44\xdc\x8b\x1e\x70\
\x82\x68\x3d\x54\x84\x0b\xb8\xb4\xb7\x63\x9d\xeb\xa8\xd1\x0a\xcb\
\x57\xe1\xe9\xa5\xcc\x54\x2e\xe9\x38\x2b\x62\x58\xa5\xc8\x6c\x9c\
\x57\xe7\x24\x22\xd8\x56\x31\x77\x5b\x3c\x93\x23\x24\x84\xfc\x76\
\x5c\xca\x18\xb3\xbf\x65\xfc\x9a\x04\x08\x9c\xf7\x48\x7b\x85\x4c\
\xc8\x4a\x33\xf6\x54\xe1\x4f\x90\x3c\x6b\x95\x67\x7d\xc8\xc5\x27\
\x9e\xb5\x36\x3c\x01\x77\x03\x01\x23\xc9\x35\x43\x3b\x7d\xd8\x93\
\x52\xc4\x52\xc1\x71\x2b\x88\x3a\xba\x33\x96\x26\xc2\x00\x54\xea\
\x72\x5d\xd2\x8d\xc3\x02\x27\xa8\xda\xa8\xe3\xdd\x0b\x32\x87\x18\
\x3f\x4d\x77\x1b\x17\xab\xe7\xae\xb9\x6b\x6c\x32\xa8\x38\xee\xd8\
\xe0\x2b\x75\x95\x4b\xd3\x23\xcf\xeb\xd6\xbb\x92\xd9\x6f\x9b\xde\
\xef\x4d\x08\x9f\xbe\xd7\x1d\x5d\xd7\x04\x7b\x63\xaf\xc4\xcc\x26\
\xa2\xd8\x1f\x54\xb4\xc6\x89\x35\x0d\x7e\xf4\x8d\x4d\xe6\xc6\xe6\
\x5d\xf7\xc6\x56\x48\x6e\x54\xfc\x36\x11\x69\x4c\xb3\x6f\x40\x77\
\x82\x0d\x3b\xb8\x8d\x91\xa1\x37\xc6\x6b\xe3\x9a\xed\x76\xbd\xd1\
\x4a\x0f\x1a\xb3\x60\x44\x91\xae\x5b\x24\xbb\xb6\x80\x70\xb4\x6f\
\x05\x65\xf3\x31\x85\x62\xd8\x01\x56\x89\x30\x01\xc5\x6f\xf2\xf8\
\xe2\x52\x54\xdf\x72\x90\x2b\x38\x12\x71\xc7\x0c\xf3\xec\x2e\x3d\
\xc2\x69\x2f\xb7\xe2\xf1\xb2\x8b\x6a\xf5\x5c\x63\xbe\xda\x4e\x5c\
\xf2\xbb\xeb\xc2\x33\x90\x58\xca\x05\x83\x85\xba\xaa\x3a\x17\x51\
\x27\xa8\x79\x3e\x54\x06\xd6\x8c\x63\x66\xed\xd4\x37\x5b\xbf\xab\
\xea\xd4\x41\x6e\x8f\x2a\x60\xb6\x55\xb0\x17\x0b\x78\x98\x3b\xa0\
\xd9\xc7\x13\xe7\xdc\x93\x5c\xdf\x4d\xfb\x73\x2c\x44\x11\xaf\x03\
\xb0\xd5\xb1\x82\xec\x2e\xb0\xa0\x71\xeb\xd4\xa2\x75\x61\xbf\xbe\
\xdd\xab\x2d\x40\xf5\x8d\xab\x22\x37\xce\x29\xc8\x67\xa6\x15\xe5\
\x35\xc5\x05\x20\xe6\xeb\xa1\x26\x6b\x09\x59\x57\x39\x4a\x1e\x9c\
\x01\x5e\xe1\x12\x68\x26\xf6\xa8\xd3\x24\xd7\x2d\x66\xd4\xa4\x50\
\x33\xc5\x08\x06\x5b\x97\xb4\x7c\xca\x78\xe6\x30\x61\x4f\xd5\x64\
\x2d\x70\x87\x1a\xc7\xc4\x23\x93\xe1\xf3\x78\x06\xc3\x94\x65\x94\
\x82\xb4\x2f\x78\x51\x6e\xa3\xea\x81\x86\x95\x5e\x93\x06\xab\x93\
\x9a\x14\x25\xb2\x8b\x3a\x9e\x27\x81\x40\x62\x8d\x17\xf4\x5c\xb4\
\x53\x35\x17\xb6\x18\x0c\xfb\x12\xcc\xaa\x74\x9e\x36\x87\x4f\x2b\
\xb6\x1d\x45\x78\x1d\x9d\x72\xdc\x9e\x14\x9a\x24\xa2\x88\x95\xd1\
\xe4\x7b\x06\x8c\x76\xa3\xfb\xe3\xd3\xf0\x33\x81\xdf\x96\xb6\x27\
\x5c\x84\xb4\x54\x94\xb4\xa9\xf5\x6d\x92\x01\xa4\xda\xb1\xb3\xfe\
\xd4\x82\x74\xb9\x14\xd4\xc4\x66\xe6\x32\x04\xcf\x2d\x60\x1a\xa2\
\xa6\xc8\x55\x91\x58\x8e\xd9\xdb\x12\x53\x8a\x1e\xc1\x89\xcc\x1f\
\x46\x86\x74\xa7\xbd\x9b\xb7\x62\x5f\xd1\x24\xb5\xb4\x5f\xc8\xbe\
\x52\x3b\xe9\x04\x91\x2f\xe6\x40\x83\x10\x26\x6e\x78\x64\xf2\x64\
\x21\xdd\x58\xe3\xd2\x89\x63\x82\xa0\x4e\xda\xd6\x51\x80\xef\x02\
\x84\xad\xbf\x6b\x68\x07\xc7\x67\xa8\xe9\x98\x64\x10\xbb\xdf\xa3\
\xb8\xb6\x33\x83\xdc\x26\xd1\x6f\x53\xcf\x8f\xe1\xe6\x1d\x01\x0e\
\x01\xef\x08\x72\xca\xe2\x87\x61\x5d\x38\xb6\x0f\x18\x95\xf3\xaa\
\x6d\x52\x1a\x7e\x3d\x09\xd4\x2d\xe7\xab\xbb\x87\x48\x63\x9b\x3d\
\xc3\x1a\xbf\x0b\x32\xc6\xc4\xd9\x98\x46\x27\xbf\x9d\xcd\xdb\x94\
\x03\x6e\xd1\xdf\x97\x7b\xed\xa0\xd0\xb0\x6d\x06\x46\x60\xea\xbd\
\x3b\x1d\x37\x28\x74\x6d\x90\xe7\x87\xb8\x82\xd3\xc3\xd3\x24\x41\
\x19\xb1\x45\x31\x27\x0d\xe7\x45\xa1\xe6\xa4\x10\x49\x29\x91\x55\
\x13\x7a\xc5\x68\x95\xda\x4a\x25\x54\x2a\xc6\xeb\x75\x9e\x9d\xb9\
\x23\x5d\xfe\xf6\x14\x3b\x5c\xc3\x29\x14\x14\x1c\x2a\xfd\x67\x7a\
\xc8\x69\x4e\x78\x2e\x3e\x43\x6a\x5f\x66\x15\x8c\x2d\x18\x5c\xd4\
\xac\xec\x04\xb4\x50\xc1\x2d\xac\xee\x44\xae\x8a\x2b\x6c\xe2\x87\
\x88\x15\xa1\xa3\x98\x67\x57\xc5\xdc\xe1\x1c\x06\xd5\x38\xd2\x98\
\x56\x1d\xcb\x95\xbb\x24\x77\xe3\xe4\x58\x85\x79\x4d\x10\xc7\x52\
\x53\xcc\x43\x0c\x58\x43\xd2\x62\x3f\x85\xc5\x78\x59\x32\xe2\x2b\
\xc6\xf6\xb2\x05\xf4\xde\xa6\x3f\xb6\xb7\x02\xc1\x9c\xec\xf2\x28\
\x2e\x97\x0a\xc7\xdd\xfe\x6c\xd4\x7c\x8c\x23\xa1\xa9\x6e\xd7\x57\
\xd2\xac\xb3\xa3\x27\xa1\xa4\x15\x0d\xa8\xe3\x0a\x00\x08\x7f\x01\
\xa6\x8e\xd3\x02\x5b\xb8\x35\x65\x66\xac\x50\x14\x3c\xd1\x19\x5d\
\x5a\x09\x25\xc8\xde\x33\x13\xba\x1d\xcf\x88\x6c\xe6\x15\x94\x3b\
\xd5\x21\x70\x92\xdb\xa6\x94\x4d\x65\x82\xca\x0a\xbd\x68\xa2\x1d\
\x93\x6e\x31\x8a\xdb\x75\x65\x9c\x61\x91\x72\xc9\x5c\xf8\xc6\x0c\
\x5b\x73\xfb\x11\x14\x5d\x8a\x84\xce\x1b\x91\x4b\xb3\x7e\x16\x4e\
\xba\xdf\x94\x35\xa1\x47\x4d\x2e\xcd\xa9\x40\xdd\x57\x68\x16\x23\
\xf4\x73\xc3\xa4\xfb\x9c\xf8\xe4\xa4\x4c\x36\x39\xe7\xf1\x6f\xea\
\x52\xe8\xe3\x5b\x04\x19\x5a\xc1\x64\x8a\xe7\xa2\xca\x15\xe8\x13\
\x9d\xdb\x6e\xac\xfb\xa2\x84\xf3\xa5\x73\xf4\xac\x57\xb2\xa1\x14\
\x5b\x8b\xb0\xec\x93\xba\x8d\xdc\x17\x52\xaf\x23\x2e\x3a\x07\x64\
\x9a\x73\xc1\x72\x77\x34\x83\x05\x23\x86\xcf\x1b\x39\x3e\xa7\x62\
\xfb\x28\x7a\xf7\x68\xde\x54\x90\x0c\x08\xdb\x0f\xa9\x89\x18\x3b\
\x4f\x6c\x86\x55\xe8\xba\xcb\xc4\xa6\x8e\x30\x43\xb2\x82\xef\x16\
\x8e\x09\x5b\x86\x52\x64\xa8\x86\xda\xc8\x81\x88\xcd\x51\x53\xf5\
\x04\x41\xeb\x0e\xbf\x7a\xd1\xda\xa1\x42\x6b\x78\x52\xd2\x18\xfb\
\x48\x06\xb7\x88\x4e\xed\xb5\x2a\x46\x39\x26\x44\xa3\x87\xa6\x91\
\xb5\x23\xa0\x53\x4b\xa7\x37\x06\x0b\xce\xea\x98\x71\x7b\xa8\x85\
\x09\x94\x7b\xe0\xae\xf1\x1c\x8c\x24\x40\xcc\x2f\xdf\xdf\xd0\x4e\
\xb3\xb8\xbf\x91\x5d\xfb\x16\xaf\x36\x72\x29\xa0\xc6\x48\x02\xe9\
\x77\xff\x6f\x93\xd9\x6b\xb3\x3e\x1a\x57\xb4\xe6\xd2\xc2\x5d\x8b\
\xcd\xc8\x28\x4a\x4e\xa2\x17\x1f\x0a\xbc\x62\x56\xfa\x3e\xb6\x41\
\x0f\x2f\xdb\x80\xad\x4d\x05\xb9\x0c\x50\x96\xc5\x6c\x23\x5a\x1d\
\x59\xbf\x98\xe0\x20\x89\xa1\x97\xcc\x62\x51\xac\xce\xd8\x63\xfe\
\xde\x05\xf4\xb3\xdc\x96\x82\xba\x90\xdf\x4c\x5a\x89\x56\xfa\xc7\
\x5a\xb2\x98\x18\x46\x9f\x0b\xde\xc1\x9e\xaf\x2d\xf9\x51\x56\xf5\
\x51\x16\xf3\x5e\x0f\xbb\x58\x0b\x95\x78\x4b\x09\x74\xf4\x89\x89\
\xce\x91\x5a\xa5\x5e\x35\xc5\x0d\xbc\x16\xbe\xa3\x3e\x2f\x24\x24\
\x87\x05\xcd\x0b\x14\xf7\x5f\x60\x6d\x8d\xa0\x96\x13\xef\xf9\xf3\
\xe7\xf6\xc1\xdf\x3e\xb0\xfd\x6b\xff\xda\xbf\x7e\xbc\xd7\xad\x5b\
\xb7\xa6\x9d\xaf\x4c\xba\xfd\x6b\xff\xda\xbf\x7e\xfc\x57\x0e\xd4\
\x6c\xfb\x49\xb7\x7f\xed\x5f\x3f\xfd\xe4\x6b\xfb\x49\xb7\x7f\xed\
\x5f\x3f\xfd\xe4\xfb\x3f\xd9\x29\x2a\xc7\x62\x4b\x0e\x55\x00\x00\
\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
"
qt_resource_name = "\
\x00\x06\
\x07\xa7\x28\x98\
\x00\x73\
\x00\x70\x00\x6c\x00\x61\x00\x73\x00\x68\
\x00\x09\
\x02\x89\x1c\xd7\
\x00\x73\
\x00\x70\x00\x6c\x00\x61\x00\x73\x00\x68\x00\x69\x00\x6d\x00\x67\
"
qt_resource_struct = "\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
"
def qInitResources():
QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
def qCleanupResources():
QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
qInitResources()
spykeviewer-0.4.1/spykeviewer/plugins/ 0000755 0001750 0001750 00000000000 12262550403 016254 5 ustar rob rob spykeviewer-0.4.1/spykeviewer/plugins/Spike Trains/ 0000755 0001750 0001750 00000000000 12262550403 020550 5 ustar rob rob spykeviewer-0.4.1/spykeviewer/plugins/Spike Trains/correlogram.py 0000644 0001750 0001750 00000002473 12262550403 023444 0 ustar rob rob import quantities as pq
import neo
from spykeutils.plugin import analysis_plugin, gui_data
from spykeutils import plot
class CorrelogramPlugin(analysis_plugin.AnalysisPlugin):
bin_size = gui_data.FloatItem('Bin size', 1.0, 0.001, 10000.0, unit='ms')
cut_off = gui_data.FloatItem('Cut off', 50.0, 2.0, 10000.0, unit='ms')
data_source = gui_data.ChoiceItem('Data source', ('Units', 'Selections'))
count_per = gui_data.ChoiceItem('Counts per', ('Second', 'Segment'))
border_correction = gui_data.BoolItem('Border correction', default=True)
square = gui_data.BoolItem('Include mirrored plots')
def get_name(self):
return 'Correlogram'
def start(self, current, selections):
current.progress.begin('Creating correlogram')
if self.data_source == 0:
d = current.spike_trains_by_unit()
else:
# Prepare dictionary for cross_correlogram():
# One entry of spike trains for each selection
d = {}
for s in selections:
d[neo.Unit(s.name)] = s.spike_trains()
plot.cross_correlogram(
d, self.bin_size * pq.ms, self.cut_off * pq.ms,
border_correction=self.border_correction,
per_second=self.count_per == 0, square=self.square,
progress=current.progress)
spykeviewer-0.4.1/spykeviewer/plugins/Spike Trains/sde.py 0000644 0001750 0001750 00000007471 12262550403 021706 0 ustar rob rob import quantities as pq
import neo
from PyQt4.Qt import QMessageBox
from spykeutils.plugin import analysis_plugin, gui_data
from spykeutils import plot
# Needed for activatable parameters
stop_prop = gui_data.ValueProp(False)
align_prop = gui_data.ValueProp(False)
optimize_prop = gui_data.ValueProp(False)
class SDEPlugin(analysis_plugin.AnalysisPlugin):
# Configurable parameters
kernel_size = gui_data.FloatItem('Kernel size', min=1.0, default=300.0,
unit='ms')
start_time = gui_data.FloatItem('Start time', default=0.0, unit='ms')
stop_enabled = gui_data.BoolItem('Stop time enabled',
default=False).set_prop('display', store=stop_prop)
stop = gui_data.FloatItem('Time', default=10001.0,
unit='ms').set_prop('display', active=stop_prop)
align_enabled = gui_data.BoolItem('Alignment event enabled',
default=False).set_prop('display', store=align_prop)
align = gui_data.StringItem(
'Event label').set_prop('display', active=align_prop)
data_source = gui_data.ChoiceItem('Data source', ('Units', 'Selections'))
_g = gui_data.BeginGroup('Kernel width optimization')
optimize_enabled = gui_data.BoolItem('Enabled',
default=False).set_prop('display', store=optimize_prop)
minimum_kernel = gui_data.FloatItem('Minimum kernel size', default=10.0,
unit='ms', min=0.5).set_prop('display', active=optimize_prop)
maximum_kernel = gui_data.FloatItem('Maximum kernel size', default=1000.0,
unit='ms', min=1.0).set_prop('display', active=optimize_prop)
optimize_steps = gui_data.IntItem('Kernel size steps', default=30,
min=2).set_prop('display', active=optimize_prop)
_g_ = gui_data.EndGroup('Kernel size optimization')
def __init__(self):
super(SDEPlugin, self).__init__()
self.unit = pq.ms
def get_name(self):
return 'Spike Density Estimation'
def start(self, current, selections):
current.progress.begin('Creating spike density estimation')
# Prepare quantities
start = float(self.start_time) * self.unit
stop = None
if self.stop_enabled:
stop = float(self.stop) * self.unit
kernel_size = float(self.kernel_size) * self.unit
optimize_steps = 0
if self.optimize_enabled:
optimize_steps = self.optimize_steps
minimum_kernel = self.minimum_kernel * self.unit
maximum_kernel = self.maximum_kernel * self.unit
# Load data
events = None
if self.data_source == 0:
trains = current.spike_trains_by_unit()
if self.align_enabled:
events = current.labeled_events(self.align)
else:
# Prepare dictionaries for psth():
# One entry of spike trains for each selection,
# an event for each segment occuring in any selection
trains = {}
if self.align_enabled:
events = {}
for s in selections:
trains[neo.Unit(s.name)] = s.spike_trains()
if self.align_enabled:
events.update(s.labeled_events(self.align))
if events:
for s in events: # Align on first event in each segment
events[s] = events[s][0]
plot.sde(
trains, events, start, stop, kernel_size, optimize_steps,
minimum_kernel, maximum_kernel, None, self.unit, current.progress)
def configure(self):
super(SDEPlugin, self).configure()
while self.optimize_enabled and \
self.maximum_kernel <= self.minimum_kernel:
QMessageBox.warning(
None, 'Unable to set parameters',
'Maximum kernel size needs to be larger than '
'minimum kernel size!')
super(SDEPlugin, self).configure() spykeviewer-0.4.1/spykeviewer/plugins/Spike Trains/interspike_intervals.py 0000644 0001750 0001750 00000002211 12262550403 025362 0 ustar rob rob import quantities as pq
import neo
from spykeutils.plugin import analysis_plugin, gui_data
from spykeutils import plot
class ISIPlugin(analysis_plugin.AnalysisPlugin):
bin_size = gui_data.FloatItem('Bin size', 1.0, 0.1, 10000.0, unit='ms')
cut_off = gui_data.FloatItem('Cut off', 50.0, 2.0, 10000.0, unit='ms')
diagram_type = gui_data.ChoiceItem('Type', ('Bar', 'Line'))
data_source = gui_data.ChoiceItem('Data source', ('Units', 'Selections'))
def get_name(self):
return 'Interspike Interval Histogram'
def start(self, current, selections):
current.progress.begin('Creating Interspike Interval Histogram')
if self.data_source == 0:
d = current.spike_trains_by_unit()
else:
# Prepare dictionary for isi():
# One entry of spike trains for each selection
d = {}
for s in selections:
d[neo.Unit(s.name)] = s.spike_trains()
current.progress.done()
plot.isi(
d, self.bin_size * pq.ms, self.cut_off * pq.ms,
self.diagram_type == 0, time_unit=pq.ms)
spykeviewer-0.4.1/spykeviewer/plugins/Spike Trains/psth.py 0000644 0001750 0001750 00000004740 12262550403 022105 0 ustar rob rob import quantities as pq
import neo
from spykeutils.plugin import analysis_plugin, gui_data
from spykeutils import plot
# Needed for activatable parameters
stop_prop = gui_data.ValueProp(False)
align_prop = gui_data.ValueProp(False)
optimize_prop = gui_data.ValueProp(False)
class PSTHPlugin(analysis_plugin.AnalysisPlugin):
# Configurable parameters
bin_size = gui_data.FloatItem('Bin size', min=1.0, default=500.0, unit='ms')
start_time = gui_data.FloatItem('Start time', default=0.0, unit='ms')
stop_enabled = gui_data.BoolItem('Stop time enabled',
default=False).set_prop('display', store=stop_prop)
stop = gui_data.FloatItem('Time', default=10001.0,
unit='ms').set_prop('display', active=stop_prop)
align_enabled = gui_data.BoolItem('Alignment event enabled',
default=False).set_prop('display', store=align_prop)
align = gui_data.StringItem(
'Event label').set_prop('display', active=align_prop)
diagram_type = gui_data.ChoiceItem('Type', ('Bar', 'Line'))
data_source = gui_data.ChoiceItem('Data source', ('Units', 'Selections'))
def get_name(self):
return 'Peristimulus Time Histogram'
def start(self, current, selections):
# Prepare quantities
start = float(self.start_time) * pq.ms
stop = None
if self.stop_enabled:
stop = float(self.stop) * pq.ms
bin_size = float(self.bin_size) * pq.ms
# Load data
current.progress.begin('Creating PSTH')
events = None
if self.data_source == 0:
trains = current.spike_trains_by_unit()
if self.align_enabled:
events = current.labeled_events(self.align)
else:
# Prepare dictionaries for psth():
# One entry of spike trains for each selection,
# an event for each segment occuring in any selection
trains = {}
if self.align_enabled:
events = {}
for s in selections:
trains[neo.Unit(s.name)] = s.spike_trains()
if self.align_enabled:
events.update(s.labeled_events(self.align))
if events:
for s in events: # Align on first event in each segment
events[s] = events[s][0]
plot.psth(
trains, events, start, stop, bin_size,
rate_correction=True, time_unit=pq.ms,
bar_plot=self.diagram_type == 0,
progress=current.progress) spykeviewer-0.4.1/spykeviewer/plugins/Spike Trains/raster_plot.py 0000644 0001750 0001750 00000003421 12262550403 023460 0 ustar rob rob import quantities as pq
from spykeutils.plugin import analysis_plugin, gui_data
from spykeutils import plot
class RasterPlotPlugin(analysis_plugin.AnalysisPlugin):
domain = gui_data.ChoiceItem('Domain', ('Units', 'Segments'))
show_lines = gui_data.BoolItem('Show lines', default=True)
show_events = gui_data.BoolItem('Show events', default=True)
show_epochs = gui_data.BoolItem('Show epochs', default=True)
def get_name(self):
return 'Raster Plot'
def start(self, current, selections):
current.progress.begin('Creating raster plot')
if self.domain == 0: # Units
d = current.spike_trains_by_unit()
else: # Segments
d = current.spike_trains_by_segment()
# Only show first spike train for each index
for k in d.keys():
if d[k]:
d[k] = d[k][0]
else:
d.pop(k)
events = None
if self.show_events:
if self.domain == 0: # Only events for displayed segment
ev = current.events()
if ev:
events = ev.values()[0]
else: # Events for all segments
events = [e for seg_events in current.events().values()
for e in seg_events]
epochs = None
if self.show_epochs:
if self.domain == 0: # Only epochs for displayed segment
ep = current.epochs()
if ep:
epochs = ep.values()[0]
else: # Epochs for all segments
epochs = [e for seg_epochs in current.epochs().values()
for e in seg_epochs]
current.progress.done()
plot.raster(d, pq.ms, self.show_lines, events, epochs) spykeviewer-0.4.1/spykeviewer/plugins/Raw Data/ 0000755 0001750 0001750 00000000000 12262550403 017637 5 ustar rob rob spykeviewer-0.4.1/spykeviewer/plugins/Raw Data/spikes.py 0000644 0001750 0001750 00000010077 12262550403 021514 0 ustar rob rob from spykeutils.plugin import analysis_plugin, gui_data
from spykeutils import plot
from spykeutils.tools import extract_spikes
import spykeutils.conversions as convert
import quantities as pq
extract_prop = gui_data.ValueProp(False)
class SpikePlotPlugin(analysis_plugin.AnalysisPlugin):
anti_aliased = gui_data.BoolItem('Antialiased lines (slow for '
'large amounts of spikes)',
default=True)
_g = gui_data.BeginGroup('Include spikes from')
spike_mode = gui_data.ChoiceItem('Spikes', ('Do not include',
'Regular',
'Emphasized'),
default=1)
inc_spikes = gui_data.BoolItem('Spike Trains')
inc_extracted = gui_data.BoolItem(
'Extracted from signal').set_prop('display', store=extract_prop)
length = gui_data.FloatItem(
'Spike length', unit='ms', default=1.0).set_prop(
'display', active=extract_prop)
align = gui_data.FloatItem(
'Alignment offset', unit='ms', default=0.5).set_prop(
'display', active=extract_prop)
_g_ = gui_data.EndGroup('Include spikes from')
plot_type = gui_data.ChoiceItem('Plot type', ('One plot per channel',
'One plot per unit',
'Single plot'))
split_type = gui_data.ChoiceItem('Split channels', ('Vertically',
'Horizontally'))
layout = gui_data.ChoiceItem('Subplot layout', ('Linear', 'Square'))
fade = gui_data.BoolItem('Fade earlier spikes')
def get_name(self):
return 'Spike Waveform Plot'
def start(self, current, selections):
current.progress.begin('Creating spike waveform plot')
current.progress.set_status('Loading spikes')
spikes = {}
strong = {}
if self.spike_mode == 1:
spikes = current.spikes_by_unit()
elif self.spike_mode == 2:
strong = current.spikes_by_unit()
spike_trains = None
if self.inc_spikes:
current.progress.set_status('Loading spike trains')
spike_trains = current.spike_trains_by_unit_and_segment()
for u, trains in spike_trains.iteritems():
s = []
for st in trains.values():
if st.waveforms is not None:
s.extend(convert.spike_train_to_spikes(st))
if not s:
continue
spikes.setdefault(u, []).extend(s)
if self.inc_extracted:
current.progress.set_status('Extracting spikes from signals')
signals = current.analog_signals_by_segment_and_channel(
conversion_mode=3)
if spike_trains is None:
spike_trains = current.spike_trains_by_unit_and_segment()
for u, trains in spike_trains.iteritems():
s = []
rcg = u.recordingchannelgroup
for seg, train in trains.iteritems():
if seg not in signals:
continue
train_sigs = []
for rc in signals[seg]:
if rcg in rc.recordingchannelgroups:
train_sigs.append(signals[seg][rc])
if not train_sigs:
continue
s.extend(extract_spikes(
train, train_sigs,
self.length * pq.ms, self.align * pq.ms))
if not s:
continue
spikes.setdefault(u, []).extend(s)
fade = 0.2 if self.fade else 1.0
plot.spikes(spikes, self.plot_type * 2 + self.split_type + 1,
strong, anti_alias=self.anti_aliased, fade=fade,
subplot_layout=self.layout, progress=current.progress) spykeviewer-0.4.1/spykeviewer/plugins/Raw Data/spectogram.py 0000644 0001750 0001750 00000007123 12262550403 022360 0 ustar rob rob from spykeutils.plugin import analysis_plugin, gui_data
import scipy as sp
import matplotlib.mlab as mlab
from guiqwt.plot import BaseImageWidget
from guiqwt.builder import make
from spykeutils.plot.dialog import PlotDialog
import spykeutils.plot.helper as helper
from spykeutils import SpykeException
import quantities as pq
class SpectrogramPlugin(analysis_plugin.AnalysisPlugin):
nfft_index = (32, 64, 128, 256, 512, 1024, 2048, 4096, 8192)
nfft_names = (str(s) for s in nfft_index)
interpolate = gui_data.BoolItem('Interpolate', default=True)
show_color_bar = gui_data.BoolItem('Show color bar', default=False)
fft_samples = gui_data.ChoiceItem('FFT samples', nfft_names, default=3)
which_signals = gui_data.ChoiceItem('Included signals',
('AnalogSignal',
'AnalogSignalArray', 'Both'),
default=2)
def get_name(self):
return 'Signal Spectogram'
@helper.needs_qt
def start(self, current, selections):
current.progress.begin('Creating Spectogram')
signals = current.analog_signals(self.which_signals + 1)
if not signals:
current.progress.done()
raise SpykeException('No signals selected!')
num_signals = len(signals)
columns = int(round(sp.sqrt(num_signals)))
current.progress.set_ticks(num_signals)
samples = self.nfft_index[self.fft_samples]
win = PlotDialog(toolbar=True,
wintitle="Signal Spectogram (FFT window size %d)"
% samples)
for c in xrange(num_signals):
pW = BaseImageWidget(win, yreverse=False,
lock_aspect_ratio=False)
plot = pW.plot
s = signals[c]
# Calculate spectrogram and create plot
v = mlab.specgram(s, NFFT=samples, noverlap=samples/2,
Fs=s.sampling_rate.rescale(pq.Hz))
interpolation = 'nearest'
if self.interpolate:
interpolation = 'linear'
img = make.image(sp.log(v[0]), ydata=[v[1][0],v[1][-1]],
xdata=[v[2][0] + s.t_start.rescale(pq.s),
v[2][-1] + s.t_start.rescale(pq.s)],
interpolation=interpolation)
plot.add_item(img)
# Labels etc.
if not self.show_color_bar:
plot.disable_unused_axes()
title = ''
if s.recordingchannel and s.recordingchannel.name:
title = s.recordingchannel.name
if s.segment and s.segment.name:
if title:
title += ' , '
title += s.segment.name
plot.set_title(title)
plot.set_axis_title(plot.Y_LEFT, 'Frequency')
plot.set_axis_unit(plot.Y_LEFT,
s.sampling_rate.dimensionality.string)
plot.set_axis_title(plot.X_BOTTOM, 'Time')
time_unit = (1 / s.sampling_rate).simplified
plot.set_axis_unit(plot.X_BOTTOM,
time_unit.dimensionality.string)
win.add_plot_widget(pW, c, column=c%columns)
current.progress.step()
current.progress.done()
win.add_custom_image_tools()
win.add_x_synchronization_option(True, range(num_signals))
win.add_y_synchronization_option(True, range(num_signals))
win.show()
spykeviewer-0.4.1/spykeviewer/plugins/Raw Data/signal.py 0000644 0001750 0001750 00000010634 12262550403 021472 0 ustar rob rob from spykeutils.plugin import analysis_plugin, gui_data
from spykeutils import SpykeException
from spykeutils import plot
from copy import copy
spike_prop = gui_data.ValueProp(False)
subplot_prop = gui_data.ValueProp(False)
class SignalPlotPlugin(analysis_plugin.AnalysisPlugin):
subplots = gui_data.BoolItem('Use subplots', default=True).set_prop(
'display', store=subplot_prop)
subplot_titles = gui_data.BoolItem(
'Show subplot names', default=True).set_prop('display', active=subplot_prop)
which_signals = gui_data.ChoiceItem('Included signals',
('AnalogSignal',
'AnalogSignalArray', 'Both'),
default=2)
show_events = gui_data.BoolItem('Show events', default=True)
show_epochs = gui_data.BoolItem('Show epochs', default=True)
multiple_plots = gui_data.BoolItem('One plot per segment', default=False)
_g = gui_data.BeginGroup('Spikes')
show_spikes = gui_data.BoolItem(
'Show spikes').set_prop('display', store=spike_prop)
spike_form = gui_data.ChoiceItem('Display as',
('Waveforms', 'Lines')).set_prop('display', active=spike_prop)
spike_mode = gui_data.ChoiceItem('Included data',
('Spikes', 'Spike Trains', 'Both'),
default=2).set_prop('display', active=spike_prop)
template_mode = gui_data.BoolItem(
'Use first spike as template').set_prop('display', active=spike_prop)
_g_ = gui_data.EndGroup('Spikes')
def get_name(self):
return 'Signal Plot'
def start(self, current, selections):
current.progress.begin('Creating signal plot')
signals = current.analog_signals_by_segment(self.which_signals + 1)
if not signals:
raise SpykeException('No signals selected!')
# Load supplemental data
events = None
if self.show_events:
current.progress.set_status('Loading events')
events = current.events()
epochs = None
if self.show_epochs:
current.progress.set_status('Loading epochs')
epochs = current.epochs()
spike_trains = None
if self.show_spikes and self.spike_mode > 0:
current.progress.set_status('Loading spike trains')
spike_trains = current.spike_trains_by_segment()
spikes = None
if self.show_spikes and self.spike_mode != 1:
current.progress.set_status('Loading spikes')
spikes = current.spikes_by_segment()
# Create plot
segments = set(signals.keys())
for seg in segments:
current.progress.begin('Creating signal plot...')
current.progress.set_status('Constructing plot')
seg_events = None
if events and events.has_key(seg):
seg_events = events[seg]
seg_epochs = None
if epochs and epochs.has_key(seg):
seg_epochs = epochs[seg]
seg_trains = []
if spike_trains and spike_trains.has_key(seg):
seg_trains = spike_trains[seg]
seg_spikes = []
if spikes and spikes.has_key(seg):
seg_spikes = spikes[seg]
# Prepare template spikes
if self.spike_form == 0 and self.template_mode:
template_spikes = {}
for s in seg_spikes[:]:
if s.unit not in template_spikes:
template_spikes[s.unit] = s
for ts in template_spikes.itervalues():
seg_spikes.remove(ts)
for st in seg_trains[:]:
if st.unit not in template_spikes:
continue
for t in st:
s = copy(template_spikes[st.unit])
s.time = t
seg_spikes.append(s)
seg_trains.remove(st)
plot.signals(signals[seg], events=seg_events,
epochs=seg_epochs, spike_trains=seg_trains,
spikes=seg_spikes, use_subplots=self.subplots,
show_waveforms=(self.spike_form==0),
subplot_names=self.subplot_titles,
progress=current.progress)
if not self.multiple_plots:
break
spykeviewer-0.4.1/CHANGELOG.rst 0000644 0001750 0001750 00000006215 12262550403 014243 0 ustar rob rob Version 0.4.1
-------------
* IPython 1.0 supported
* IPython now supported as dock instead of external console
* More explicit error messages on file loading failures.
* Added "Start plugin remotely" to toolbar.
Version 0.4.0
-------------
* Optional transparent lazy loading and lazy cascading for supported IOs.
* Splash screen while loading the application.
* Open files dialog as an alternative to the "Files" dock.
* Remotely started plugins can have a graphical progress bar.
* Remotely started plugins now show text output and errors on internal
console.
* Filters are automatically deactivated on loading a selection if they
prevent parts of it to be shown.
* A modified plugin is automatically saved before it is sent to a remote
script.
* New features for many plugins: correlogram, interspike interval histogram,
peri stimulus time histogram, and spike density estimation support
selections in addition to units for plot elements. Spike waveform plot can
plot single spikes extracted from analog signals using spike trains,
optionally together with Spike object waveforms.
* Python files can be dragged onto the editor to open them.
* Annotation editor accessible through API.
* Files can be loaded through API.
* The Spyke Repository is available and linked in the documentation and
the help menu.
Version 0.3.0
-------------
* Added search and replace functionality to plugin editor (access with
``Ctrl`` + ``F`` and ``Ctrl`` + ``H``).
* Added startup script. Can be modified using File->Edit startup script.
* Spyke Viewer now has an API for configuration options and access to plugins
and the main window. It can be used from the console, plugins or the startup
script.
* Added context menu for navigation. Includes entries for removing objects
and an annotation editor.
* New files are selected in the file view are now loaded in addition to
already loaded files. To unload all data, use File->Clear Data.
* Plugin configurations are now restored when saving or refreshing plugins
and when restarting the program. All plugin configurations can be reset
to their defaults using Plugins->Restore Plugin configurations.
* A modified plugin is automatically saved before it is run.
* Plugin folders return to their previous state (expanded or minimized)
when restarting the program.
* Plugin editor tabs can be reordered by dragging.
* Code completion in console can be selected using Enter (in addition to
Tab as before).
* Plugins can import modules from the same directory, even if it is not
explicitly on the Python path.
Version 0.2.1
-------------
* New features for plugin editor: Calltips, autocompletion and "jump to"
(definitions in code or errors displayed in integrated console).
* Experimental support for IPython console (File->New IPython console). Needs
IPython >= 0.12
* New spectrogram plugin
* Combined filters for filtering (or sorting) a whole list of objects
* "Save all data..." menu option
* Plugins are sorted alphabetically
* New option in plugin menu: Open containing folder
* "Delete" key deletes filters
* Renamed start script from "spyke-viewer" to "spykeviewer"
Version 0.2.0
-------------
Initial documented public release.
spykeviewer-0.4.1/README.rst 0000644 0001750 0001750 00000001157 12262550403 013711 0 ustar rob rob Overview
========
.. image:: https://secure.travis-ci.org/rproepp/spykeviewer.png?branch=develop
:target: https://travis-ci.org/rproepp/spykeviewer
Spyke Viewer is a multi-platform GUI application for navigating,
analyzing and visualizing electrophysiological datasets. Based on the
`Neo `_ framework, it works with a
wide variety of data formats.
For more information, see the documentation at
http://spyke-viewer.readthedocs.org
Spyke Viewer was created by Robert Pröpper at the Neural Information
Processing Group (TU Berlin), supported by the Research Training Group
GRK 1589/1. spykeviewer-0.4.1/LICENSE 0000644 0001750 0001750 00000002735 12262550403 013232 0 ustar rob rob Copyright (c) 2012, Robert Pröpper and conbtributors.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. 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.
3. Neither the name of the author nor the names of the 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 HOLDER 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 COPYRIGHT HOLDER 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. spykeviewer-0.4.1/doc/ 0000755 0001750 0001750 00000000000 12262550403 012763 5 ustar rob rob spykeviewer-0.4.1/doc/source/ 0000755 0001750 0001750 00000000000 12262550403 014263 5 ustar rob rob spykeviewer-0.4.1/doc/source/lazy.rst 0000644 0001750 0001750 00000006005 12262550403 015775 0 ustar rob rob .. _lazy:
Lazy Features
-------------
Spyke Viewer offers two ways to deal with very large files.
Lazy Loading
############
With lazy loading, only the structure of a file is loaded when you first
open it, while big data chunks (e.g. signals, spike trains) are not.
This can result in faster loading times and much reduced memory usage and
enables you to use data files that are larger than your main memory. Spyke
Viewer will load the required data automatically once it is needed. This
means that while initial loading is faster, data access will be slower.
You can switch between regular and lazy loading from the "File" menu under
"Read Mode". The read mode affects newly loaded files and you can have
both regularly and lazily loaded files opened at the same time. Most
Neo IOs do not support this feature (currently, only the IO for HDF5
files does) - when using lazy mode with an unsopported IO, the file is loaded
as in regular mode.
There are two options for lazy loading in the menu: "Lazy Load" and
"Cached Lazy Load". In "Lazy Load", data objects are loaded on request
and discarded afterwards, so the memory usage stays low. In "Cached Lazy
Load", data objects are inserted into the object hierarchy when they are
requested, so they only have to be loaded once, but memory usage will grow
when more data objects are used while the file is open.
.. Note::
If you create your own plugins or use the integrated console with lazy
loading, you need to be aware that the data objects are only loaded
when accessed through a
DataProvider object (explained below). For example,
``current.spike_trains()`` would return correctly loaded objects.
But ``current.segments()[0].spiketrains`` can contain lazy objects.
To be safe, always use the DataProvider to access the data objects
you are interested in.
Lazy Cascading
##############
Lazy cascading goes one step further than lazy loading: Not even the complete
structure of a file is loaded initially. When lazy cascading is active, each
object is automatically loaded when first accessed. For example, if you load
a file with multiple Blocks, the Segments of each Block are only loaded when
you select the Block in Spyke Viewer and the Segments need to be displayed.
Similarly, the spike trains of a segment are only loaded once they are
accessed. In contrast to lazy loading, with lazy cascading objects are loaded
automatically even if they are not accessed through a DataProvider. Once an
object has been accessed using lazy cascading, it stays in memory, making
future access faster but potentially filling up main memory. You can use lazy
cascading and lazy loading without caching at the same time to mitigate this.
You switch between regular and lazy cascading using "Cascade Mode" in the
"File" menu. Like lazy loading, lazy cascading depends on support of the
IO class and currently only works with the HDF5 IO. You can implement both
in your own IO plugins, the
`Neo documentation
`_
describes what is needed. spykeviewer-0.4.1/doc/source/requirements.txt 0000644 0001750 0001750 00000000017 12262550403 017545 0 ustar rob rob mock
quantities spykeviewer-0.4.1/doc/source/plugins.rst 0000644 0001750 0001750 00000026213 12262550403 016502 0 ustar rob rob .. _plugins:
Plugins
=======
This section describes the configuration options of the plugins that are
included with Spyke Viewer. All included plugins create plots. For
information on how to create your own plugins, see :ref:`analysisplugins`.
You can find additional plugins at the
`Spyke Repository `_.
Signal Plot
-----------
Shows the selected analog signals. A number of options enable to include
additional information in the plot.
.. image:: /img/plugin-signals.png
Use Subplots
Determines whether multiple subplots are used or all signals are shown in
one large plot.
Show subplot names
Only valid when subplots are used. Determines if each subplot has a title
with the signal name (if available) or the recording channel name.
Included signals
This option can be used to tune which type of signals are shown:
AnalogSignal objects, AnalogSignalArray objects or both. In most cases, a
file will only include one of the signal types, so the default option of
including both will work well (you probably never need to change it if you
do not know the difference between the signal objects).
Show events
When this is checked, events in the selected trial will be shown in the
plot.
Show epochs
When this is checked, periods in the selected trial will be shown in the
plot.
One plot per segment
When this is not checked, only one plot with signals from the first
selected segment is created. Otherwise, one plot for each selected
segment is created.
Show spikes
Determines whether spikes are included in the plot. The following options
are used to select from what data how the spikes are displayed:
Display as
Spikes can be shown as their waveform overlaid on the analog signal or a
vertical line marking their occurrence.
Included data
Determines whether to include spikes from SpikeTrain objects, Spike
objects, or both.
Use first spike as template
This option can be used for a special case: All spikes in the SpikeTrain
objects have the same waveform (e.g. because they use the same template
from spike sorting). If this option is checked, the plugin assumes that
each unit has a SpikeTrain and a single Spike. The waveform from the
Spike object is used for every spike in the SpikeTrain. The data in the
example file is structured in this way.
Spectrogram
-----------
Shows spectrograms of the selected analog signals.
.. image:: /img/plugin-spectrogram.png
Interpolate
Determines whether the dipslayed spectrogram is interpolated.
Show color bar
If this is checked, a colorbar will be shown with each plot, illustrating
the logarithmic power represented by the colors.
FFT samples
The number of signal samples used in each FFT window.
Included signals
This option can be used to tune which type of signals are shown:
AnalogSignal objects, AnalogSignalArray objects or both. In most cases, a
file will only include one of the signal types, so the default option of
including both will work well (you probably never need to change it if you
do not know the difference between the signal objects).
Spike Waveform Plot
-------------------
Shows waveforms of selected spikes.
.. image:: /img/plugin-waveforms.png
Antialiased lines
Determines if antialiasing (smoothing) is used for the plot. If you want to
display thousands of spikes or more, unchecking this option will improve the
plotting performance considerably.
Include spikes from
Determines which data sources are used for the displayed spike waveforms.
Spikes
Waveforms from Spike objects can be ignored (Do not include), used as
other spike data sources are (Regular) or drawn thicker on top of other
spikes (Emphasized). The last option is useful if spike objects contain
templates from spike sorting which you want to compare to corresponding
spikes from the data.
Spike Trains
Spike waveforms embedded in SpikeTrain objects.
Extracted from signal
Spike waveforms can be automatically extracted from corresponding signals
using spike times in SpikeTrain objects. In this case you have to choose
the spike length and the alignment offset (the length of the signal to
extract before each spike event).
Plot type
Three different plot types can be selected: "One plot per channel" creates a
subplot for each channel, "One plot per unit" creates a subplot for each
unit and "Single plot" creates one plot containing all channels and units.
Split channels
Multichannel waveforms can be split either horizontally or vertically.
Subplot layout
You can choose one of two ways to arrange the resulting subplot: "Linear"
will arrange the plots as one row or one column, depending on the other
options. "Square" uses an equal number of row and columns.
Fade earlier spikes
If this is enabled, earlier selected spikes for each unit are drawn more
transparent than later spikes. This can be useful if you want to compare
changes in a unit's waveform over time (i.e. multiple segments).
Correlogram
-----------
Creates auto- and crosscorrelograms for selected spike trains.
.. image:: /img/plugin-correlogram.png
Bin size (ms)
The bin size used in the calculation of the correlograms.
Cut off (ms)
The maximum time lag for which the correlogram will be calculated and
displayed.
Data source
The plugin supports two ways of organizing the data from which the
correlograms are created: If "Units" is selected, the spike trains for each
currently selected unit are treated as a dataset. For example, if two units
are selected, the plugin creates three subplots: one autocorrelogram for
each unit and a cross-correlogram between them.
If "Selections" is chosen, spike trains from each saved selection are
treated as a dataset. Note that the plot can only be created if all
selections contain the same number of spike trains.
Counts per
Determines if the counts are displayed per second or per segment.
Border correction
Determines if an automatic correction for less data at higher timelags is
applied.
Include mirrored plots
Determines if all cross-correlograms are included, even if they are just
mirrored versions of each other. The autocorrelograms are then displayed
as the diagonal of a square plot matrix. Otherwise, mirrored
cross-correlograms are omitted.
Interspike Interval Histogram
-----------------------------
Creates an interspike interval histogram for one or more units.
.. image:: /img/plugin-isi.png
Bin size (ms)
The bin size used in the calculation of the histogram.
Cut off (ms)
The maximum interspike interval that is displayed.
Type
Determines the type of histogram. If "Bar" is selected, only the histogram
for the first selected unit is displayed. If "Line" is selected, all
selected units are included in the plot.
Data source
The plugin supports two ways of organizing the data from which the
histograms are created: If "Units" is selected, the spike trains for each
currently selected unit are treated as a dataset. If "Selections" is chosen,
spike trains from each saved selection are treated as a dataset.
Peristimulus Time Histogram
---------------------------
Creates a peristimulus time histogram (PSTH) for one or multiple units.
.. image:: /img/plugin-psth.png
Bin size (ms)
The bin size used in the calculation of the histogram.
Start time (ms)
An offset from the alignment event or start of the spike train. Calculation
of the PSTH begins at this offset. Negative values are allowed (this can be
useful when using an alignment event).
Stop time
A fixed stop time for calculation of the PSTH. If this is not activated,
the smallest stop time of all included spike trains is used. If the smallest
stop time is smaller than the value entered here, it will be used instead.
Alignment event
An event (identified by label) on which all spike trains are aligned before
the PSTH is calculated. After alignment, the event is a time 0 in the plot.
The event has to be present in all selected segments that include spike
trains for the PSTH.
Type
Determines the type of histogram. If "Bar" is selected, only the histogram
for the first selected unit is displayed. If "Line" is selected, all
selected units are included in the plot.
Data source
The plugin supports two ways of organizing the data from which the
histograms are created: If "Units" is selected, the spike trains for each
currently selected unit are treated as a dataset. If "Selections" is chosen,
spike trains from each saved selection are treated as a dataset.
Raster Plot
-----------
Creates a raster plot from multiple spiketrains.
.. image:: /img/plugin-rasterplot.png
Domain
The raster plot can either be created from multiple units and one segment
("Units") or one unit over multiple segments ("Segments").
Show lines
Determines if a small horizontal black line is displayed for each spike
train.
Show events
When this is checked, events in the selected trial will be shown in the
plot. If the selected domain is "Segments", events from all selected
segments are included.
Show epochs
When this is checked, periods in the selected trial will be shown in the
plot. If the selected domain is "Segments", epochs from all selected
segments are included.
Spike Density Estimation
------------------------
Creates a spike density estimation (SDE) for one or multiple units. Optionally
computes the best kernel width for each unit.
.. image:: /img/plugin-sde.png
Kernel size (ms)
The width of the kernel used for the plot. If kernel width optimization is
enabled, this parameter is not used.
Start time (ms)
An offset from the alignment event or start of the spike train. Calculation
of the SDE begins at this offset. Negative values are allowed (this can be
useful when using an alignment event).
Stop time
A fixed stop time for calculation of the SDE. If this is not activated,
the smallest stop time of all included spike trains is used. If the smallest
stop time is smaller than the value entered here, it will be used instead.
Alignment event
An event (identified by label) on which all spike trains are aligned before
the SDE is calculated. After alignment, the event is a time 0 in the plot.
The event has to be present in all selected segments that include spike
trains for the SDE.
Data source
The plugin supports two ways of organizing the data from which the
density estimations are created: If "Units" is selected, the spike trains
for each currently selected unit are treated as a dataset. If "Selections"
is chosen, spike trains from each saved selection are treated as a dataset.
Kernel width optimization
When this option is enabled, the best kernel width for each unit is
determined using the algorithm from [1]_.
Minimum kernel size (ms)
The minimum kernel width that the algorithm should try.
Maximum kernel size (ms)
The maximum kernel width that the algorithm should try.
Kernel size steps
The number of steps from minimum to maximum kernel size that the algorithm
should try. The steps are distributed equidistant on a logarithmic scale.
.. [1] Shimazaki, Shinomoto. (2010). Kernel bandwidth optimization in spike
rate estimation. *Journal of Computational Neuroscience*, 29, 171-182. spykeviewer-0.4.1/doc/source/changelog.rst 0000644 0001750 0001750 00000000227 12262550403 016745 0 ustar rob rob Changelog
=========
Also see the spykeutils changelog at
https://spykeutils.readthedocs.org/en/latest/changelog.html
.. include:: ../../CHANGELOG.rst spykeviewer-0.4.1/doc/source/installation.rst 0000644 0001750 0001750 00000011654 12262550403 017525 0 ustar rob rob Installation
============
There are two ways to install Spyke Viewer on your system. The preferred way
is to install the spykeviewer package in your Python environment. Depending on
what already exists on your system, this might require installing Python
itself and a few additional packages for scientific data processing,
management and visualization.
On the other hand, there are also binary packages available for Windows and
OS X. These packages do not have any additional requirements and can be
started immediately (from an app in OS X or an executable file in Windows,
please use the source installation for Linux).
However, as they are independent of an existing Python installation, you will
not be able to use installed additional packages from your Python environment
by default (this can be remedied by using the :ref:`startup`).
The binary packages are especially useful if you do not normally use Python
or just want to try Spyke Viewer quickly. You can switch to the source
installation at any time.
Binary
------
If you want to install the binary version, go to the
`homepage `_
and select the most recent version for your operating system. The downloaded
file contains an installer (for OS X) or executable
(Spyke Viewer\\spykeviewer.exe for Windows). Note that some features of Spyke
Viewer are not available in the binary version: If you want an IPython console
or advanced plugin editing features such as autocompletion, you need the
source version. The rest of this page deals with source installation, when
using the binary version, you can go to :ref:`usage` to learn how to use
Spyke Viewer.
Source
------
If you use the NeuroDebian_ repositories and a recent version of Debian
(>= Wheezy or Sid) or Ubuntu (>= 12.04), you can install the source version
of Spyke Viewer using your package manager::
$ sudo apt-get install spykeviewer
After you install the spykeviewer package, you can start Spyke Viewer from
your menu (it should appear in the "Science" or "Education" category) or
using::
$ spykeviewer
The next sections describe how to install Spyke Viewer if you do not have
access to the NeuroDebian_ repositories (e.g. on Windows or OS X), want
to install using the Python packaging system or use the most recent
development version from GitHub.
Dependencies
############
First you need Python 2.7. In addition, the following packages and
their respective dependencies need to be installed:
* spykeutils_
* scipy_
* guiqwt_ (>= 2.1.4)
* matplotlib_
* tables_
* spyder_ >= 2.1.0
* neo_ >= 0.2.1
Please see the respective websites for instructions on how to install them if
they are not present on your computer. On a recent version of Debian/Ubuntu
(e.g. Ubuntu 12.04 or newer), you can install all dependencies that are not
automatically installed by ``pip`` or ``easy_install`` with::
$ sudo apt-get install python-guiqwt python-tables python-matplotlib
On Windows, you can use `Python(x,y)`_ if you do yet not have a Python
distribution installed. It includes the same dependencies.
spykeviewer
###########
Once the requirements are fulfilled, you need to install the package
spykeviewer. If you use Linux, you might not
have access rights to your Python package installation directory, depending
on your configuration. In this case, you will have to execute all shell
commands in this section with administrator privileges, e.g. by using
``sudo``. The easiest way to get it is from the Python Package
Index. If you have pip_ installed::
$ pip install spykeviewer
Alternatively, if you have setuptools_::
$ easy_install spykeviewer
Alternatively, you can get the latest version directly from GitHub at
https://github.com/rproepp/spykeviewer.
The master branch always contains the current stable version. If you want the
latest development version, use the develop branch (selected by default).
You can download the repository from the GitHub page
or clone it using git and then install from the resulting folder::
$ python setup.py install
Once the package is installed, you can start Spyke Viewer using::
$ spykeviewer
.. note::
You can also start the program without installing it: Simply execute
the script ``bin/spykeviewer`` in your Spyke Viewer folder using Python.
On Windows, you might have to start ``spykeviewer.exe`` in the
``Scripts`` folder in your Python directroy (e.g. ``C:\Python27\Scripts``)
because most Python versions do not add this folder to the PATH environment
variable.
.. _`Python`: http://python.org/
.. _`spykeutils`: http://spykeutils.readthedocs.org/
.. _`guiqwt`: http://packages.python.org/guiqwt/
.. _`tables`: http://www.pytables.org/
.. _`neo`: http://neo.readthedocs.org/
.. _`pip`: http://pypi.python.org/pypi/pip
.. _`scipy`: http://scipy.org/
.. _`setuptools`: http://pypi.python.org/pypi/setuptools
.. _`spyder`: http://packages.python.org/spyder/
.. _`Python(x,y)`: http://www.pythonxy.com/
.. _`matplotlib`: http://matplotlib.org/
.. _`NeuroDebian`: http://neuro.debian.net
spykeviewer-0.4.1/doc/source/usage.rst 0000644 0001750 0001750 00000037662 12262550403 016137 0 ustar rob rob .. _usage:
Usage
=====
This section gives a tutorial of the main functionality of Spyke Viewer. To
follow the examples, you need to download and unpack the `sample data file
`_.
It contains simulated data for two tetrodes over 4 trials. For each tetrode,
there are 5 simulated neurons with corresponding spike trains and prototypical
template waveforms included.
When you start Spyke Viewer for the first time, you will see the following
layout:
.. image:: /img/initial-layout.png
All elements of the user interface are contained in docks and can be
rearranged to suit your needs. Their layout is saved when you close Spyke
Viewer. The "View" menu shows all available docks and panels, you can also
hide and show them from this menu.
Loading Data
------------
The first thing you want to do when using Spyke Viewer is to load your data.
The *Files* dock contains a view of all the files on your system. You can
use it to select one or more files, then click on the "Load" button below to
load the selected files into Spyke Viewer. Single files can also be loaded
with a double click (this does not work for directories, they will just be
expanded. If you want to load a directory, you need to use the "Load" button).
Alternatively, you can use the "Load Data..." option in the "File" menu to
open a dialog that allows you to select files to load. Now find and select
the file "sample.h5" that you just unpacked (an HDF5 File) and load it.
The data file input/output is based on :mod:`neo` and supports formats that
have a
`Neo IO class `_. For each
selected file, the filetype and corresponding IO class is selected
automatically from the file extension. If you want to specify which IO class
to use, you can do so in the "Format" list in the *Files* dock. When you
select a format with read or write parameters, you can click "Configure
selected IO" to change the parameters. The IO and parameters you choose in
the *Files* dock are also used when loading files using the "File" menu. If
you want to use a file format that is not supported by Neo, you can write a
plugin: :ref:`ioplugins`.
Spyke Viewer and Neo include some features to handle very large data sources
that are larger than the main memory or take very long to load. If you want
to learn about these features, go to :doc:`lazy`.
.. _selections:
Selections
----------
Now that a file was loaded, some entries have appeared in the *Navigation*
dock. To understand how to navigate data with Spyke Viewer, you need to know
the Neo object model. The following picture is a complete representation:
.. image:: /img/neo.png
The rectangular objects are containers, rounded corners indicate a data
object. The arrows represent a "contains zero or more" relationship. Note that
all data objects belong to a segment and some also belong to other objects.
For example, a SpikeTrain is referenced by both Segment and Unit. A unit often
represents a single neuron (it is named unit because putative neurons from
spike sorting are called units), but it could also represent the results of
a spike detection algorithm and therefore include multiple neurons. Each
SpikeTrain is specific to one Segment and one Unit, and each Segment or Unit
could contain many SpikeTrains. For more detailed information on the Neo
object model, see the
`Neo documentation `_.
In Spyke Viewer, you use the *Navigation* dock to select container objects.
There is a list for each type of container where you can select an arbitrary
set of entries. You can select multiple entries by clicking and dragging or
using the control key when clicking. Each list will only show those
objects of the respective type that are contained in selected objects further
up in the hierarchy. For example, try selecting a different recording channel
group and observe how the channels and units list change. To help you
navigate, all objects in the *Navigation* dock are automatically assigned a
unique identifier which includes the identifier of containing objects. The
identifiers are shown in parentheses after the objects name (if an object has
no name, only the identifier is shown). Blocks use capital letters; recording
channel groups use small letters; recording channels, units and segments use
numbers. For example, a unit might have an identifier "A-b-2": This denotes
unit number 2 of recording channel group "b" of block "A". The identifiers are
recreated whenever the structure of the loaded data changes - they are just
a visual aid to help with navigation and ensure that unnamed objects have
a reasonable label.
Each list in the *Navigation* dock has a context menu accessed by
right-clicking or control-clicking on OS X. You can use it to remove the
selected objects (they will only be removed from Spyke Viewer, not from the
loaded files) or open an annotation editor for the current object. The
annotation editor can also be opened by double-clicking a list entry.
The sets of selected objects from all container types is called a selection.
The selected items you see in the *Navigation* dock are called the current
selection. Selections determine which data will be analyzed by plugins (see
:ref:`plugins`) and can be accessed by the internal console (see
:ref:`console`). You can save a selection using the
"Selections" menu: Click on the menu and then on "New". An additional entry in
the "Selections" menu called "Selection 1" will appear. Each selection entry
has a submenu where you can load, save, rename or delete the selection. Try
selecting something else in the *Navigation* dock and creating a new
selection again. Now try to load your first selection and observe how the
*Navigation* dock changes to reflect what you have loaded. If you use the
entry "Save" from a selection, it will be overwritten with the current
selection. You can also change the order of the saved selections by dragging
the entries in the "Selections" menu:
.. image:: /img/selections-menu.png
All saved selections together with the current selection are called a
selection set. You can save your current selection set as a file (in
`JSON `_ format, so it can easily be read and edited
by humans or other software) using "Save Selection Set..." in the "File" menu.
When you load a selection set, your current selection is replaced by the
current selection from the file. The other selections in the file are added
to your current saved selections. If a selection set includes files that are
not currently loaded, they are opened automatically. When you exit Spyke
Viewer, your current selection set is saved and will be restored on your
next start.
Exporting Data
--------------
If you want to export your data, Spyke Viewer offers two entries in the "File"
menu: "Save selected data..." exports all data in your current selection.
"Save all data..." exports all loaded data. When you click on one of
the items, a dialog will open asking you where you want to save the data and
in which format. HDF5 and Matlab are available. It is strongly recommended to
save your data in HDF5, since the Neo IO for Matlab currently does not support
the whole object model -- RecordingChannelGroups, RecordingChannels and Units
are not saved.
Matlab has an interface for loading HDF5 files as well, so if you want
to load your data in Matlab without losing some of the structure, you can use
HDF5. On the other hand, if you want to get your data into Matlab quickly or
it is structured with segments only, the Matlab export could be the right
choice.
Filters
-------
.. image:: /img/filterdock.png
When dealing with large datasets, it can be inconvenient to create a selection
from the full lists of containers. The filter system provides a solution to
this problem. By creating filters, you can determine what objects are
shown in the *Navigation* dock. For example, you might want to temporarily
exclude RecordingChannelGroups that have no attached units or only display
Segments with a certain stimulus. Creating filters requires basic knowledge
of Python and the Neo object model.
You can manage your filters with the *Filter* dock and toolbar (which is
positioned on the upper left in the initial layout). When you start Spyke
Viewer for the first time, the *Filter* dock will be empty. You can create
a new filter by clicking on "New Filter" in the toolbar (right-clicking the
*Filter* dock also brings up a menu with available actions). You can choose
what kind of container objects the filter applies to, the name of the filter
and its content: a simple Python function.
There are two kinds of filters: single or combined. Single filters (created
when the "Combined" checkbox is unchecked) get a single Neo object and return
``True`` if the object should be displayed and ``False`` if not. Combined
filters get a list of Neo objects and return a list containing only objects
that should displayed. The order of the returned list is used for subsequent
filters and displaying, so combined filters can also be used to sort the
object lists.
For both kinds of filters, the signature of the function is fixed and
shown at the top of the window, so you only have to write the function body.
The "True on exception" checkbox determines what happens when the filter
function raises an exception: If it is checked, an exception will not cause
an element to be filtered out, otherwise it will. The following picture shows
how you would create a filter that hides all units that do not have at least
two SpikeTrains attached:
.. image:: /img/newfilter.png
As another example, to reverse the order of Segments, you could create
combined Segment filter with the following line::
return segments[::-1]
You can also create filter groups. They can be used to organize your filters,
but also have an important second function: You can define groups in which
only one filter can be active. If another filter in the group is activated,
the previously active filter will be deactivated. You can choose which filters
are active in the *Filter* dock. The *Navigation* dock will be updated
each time the set of active filters changes. You can also drag and drop
filters inside the *Filter* dock. Their order in the *Filter* dock determines
the order in which they are applied. All filters and their activation
state are saved when you exit Spyke Viewer.
.. _usingplugins:
Using Plugins
-------------
Once you have selected data, it is time to analyze it. Spyke Viewer includes
a number of plugins that enable you to create various plots from your data.
Select the *Plugins* dock (located next to the *Filter* dock in the
initial layout) to see the list of available plugins. To start a plugin,
simply double-click it or select it and then click on "Run Plugin" in the
plugin toolbar or menu (there is also a context menu available when you
right-click a plugin). You can also start a plugin in a different process
(so that you can continue using Spyke Viewer while the plugin is busy) by
selecting "Start with Remote Script" in the "Plugins" menu.
For example, if you start the "Signal Plot" plugin, it will create a plot of
selected analog signals. Try selecting Segment 3, Tetrode 2 and Channels 3
and 4. When you now start the plugin, you will see the signals of the selected
channels in Segment 3. Now select some units and then open the plugin
configuration by clicking on "Configure Plugin" on the plugin toolbar or
menu. Select "Show Spikes" and set "Display" to "Lines". When you now start
the plugin, you will see the analog signals and the spike times of your
selected units. Go to the configuration again, set "Display" to "Waveforms"
and check "Use first spike as template". After another run of the plugin,
you will see the template spike waveforms overlaid on the analog signals. The
configuration of all plugins is saved when you close Spyke Viewer and will
be restored on the next start. To set the configurations of all plugins back
to their default values, use "Restore Plugin configurations" from the
"Plugins" menu.
To learn more about the included plugins and how to use them, go to
:ref:`plugins`. When you want to create your own plugins, go to
:ref:`analysisplugins`.
.. _console:
Using the Console
-----------------
With the integrated console, you can use the full power of Python in Spyke
Viewer, with access to your selected data. Open the *Console* dock by
clicking on the "View" menu and selecting "Console". You can explore your
workspace using the *Variable Explorer* dock and view your previous
commands with the *Command History* dock. Some packages like scipy_ and
:mod:`neo` are imported on startup, the message in the console shows which.
The console features autocompletion (press the Tab key to complete with the
selected entry) and docstring popups.
The most important objects in the console environment are ``current`` and
``selections``. ``current`` gives you access to your currently selected data,
``selections`` contains all stored selections (which you can manage using
the "Selections" menu, see selections_). For example,
>>> current.spike_trains()
gives a list of your currently selected spike trains. Both ``current`` and
the entries of ``selections`` are
:class:`spykeutils.plugin.data_provider.DataProvider` objects, refer to the
documentation for details of the methods provided by this class.
As an example, to view the total amount of spikes in your selected spike
trains for each segment, enter the following lines:
>>> trains = current.spike_trains_by_segment()
>>> for s, st in trains.iteritems():
... print s.name, '-', sum((len(train) for train in st)), 'spikes'
Note that the variables used in these lines have now appeared in the
*Variable Explorer* dock.
.. Note::
If you have at least IPython 0.12 and the corresponding Qt console
installed, Spyke Viewer will include an *IPython* dock (accessible under
the "View" menu). It can be used as an alternative to the integrated
console if you prefer IPython. The ``current`` and ``selections`` objects
are defined as in the integrated console, but no imports are predefined.
You can enter the "magic command"::
%pylab
to use the PyLab environment (you can safely ignore the warning message
about matplotlib backends). Note that the *Variable Explorer* and
*Command History* docks, as well as exceptions from plugins, are only
available on the internal console.
.. _settings:
Settings
--------
The Spyke Viewer settings can be accessed by opening the "File" menu and
selecting "Settings" (on OS X, open the "Spyke Viewer" menu and select
"Preferences"). You can adjust various paths in the settings:
**Selection path**
The path where your selections are stored when you exit Spyke Viewer. This
is also the default directory when using "Save Selection Set..." or
"Load Selection Set..." in the "File" menu.
**Filter path**
The directory where your filter hierarchy and activation states are stored
when you exit Spyke Viewer. Your filters are stored as regular Python
files with some special annotation comments, so you can edit them in your
favourite editor or share them with other users of Spyke Viewer.
**Data path**
This directory is important when you are using the data storage features
of :class:`spykeutils.plugin.analysis_plugin.AnalysisPlugin`.
**Remote script**
A script file that is executed when you use "Start with remote script"
action for a plugin. The default script simply starts the plugin locally,
but you can write a different script for other purposes, e.g. starting it
on a server.
**Plugin paths**
These are the search paths for plugins. They will be recursively searched
for Python files containing AnalysisPlugin classes. Subdirectories will be
displayed as nodes in the *Plugins* dock.
In addition, your IO plugins also have to stored be in one of the plugin
paths. The search for IO plugins is not recursive, so you have to put
them directly into one of the paths in this list.
More configuration options can be set using the :ref:`api`, for example in the
:ref:`startup`.
.. _`scipy`: http://scipy.org/ spykeviewer-0.4.1/doc/source/index.rst 0000644 0001750 0001750 00000003116 12262550403 016125 0 ustar rob rob .. |br| raw:: html
Welcome to the Spyke Viewer documentation!
==========================================
Spyke Viewer is a multi-platform GUI application for navigating, analyzing and
visualizing electrophysiological datasets. It is based on the
`Neo `_ library, which enables it to load a wide
variety of data formats used in electrophysiology. At its core, Spyke Viewer
includes functionality for navigating Neo object hierarchies and performing
operations on them.
A central design goal of Spyke Viewer is flexibility. For this purpose, it
includes an embedded Python console and a plugin system. It comes with a
variety of plugins implementing common neuroscientific analyses and plots
(e.g. rasterplot, peristimulus time histogram, correlogram and signal plot).
Plugins can be easily created and modified using the integrated Python editor
or external editors.
A mailinglist for discussion and support is available at
https://groups.google.com/d/forum/spyke-viewer
Users can download and share plugins and other extensions at
http://spyke-viewer.g-node.org
If you use Spyke Viewer in work that leads to a scientific publication,
please cite:|br|
Pröpper, R. and Obermayer, K. (2013). Spyke Viewer: a flexible and extensible
platform for electrophysiological data analysis.
*Front. Neuroinform.* 7:26. doi: 10.3389/fninf.2013.00026
Contents:
.. toctree::
:maxdepth: 2
installation
usage
plugins
extending
api
lazy
changelog
acknowledgements
Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
spykeviewer-0.4.1/doc/source/api.rst 0000644 0001750 0001750 00000007070 12262550403 015572 0 ustar rob rob .. _api:
API
===
The Spyke Viewer API. It includes the global application configuration,
objects to access the main window and application and convenience functions.
.. data:: spykeviewer.api.config
Global configuration options for Spyke Viewer. Single options can be set
by string like a dictionary (e.g.
``spykeviewer.api.config['ask_plugin_path'] = False``) or directly (e.g.
``spykeviewer.api.config.ask_plugin_path = False``).
They can be set in the :ref:`startup`, from the
console or even in plugins. However, some configuration options are only
effective when changed from the startup script.
The configurations options are:
ask_plugin_path (:class:`bool`)
Ask about plugin paths if saving a file outside of the plugin paths.
Default: ``True``
save_plugin_before_starting (:class:`bool`)
Automatically save and reload a modified plugin before starting.
Default: ``True``
load_selection_on_start (:class:`bool`)
Load the selection that was automatically saved when shutting down
Spyke Viewer automatically on startup. This parameter is
only effective when set in the startup script. Default: ``True``
load_mode (:class:`int`)
The initially selected loading mode. Possible values:
0
Regular: Load all file contents on initial load.
1
Lazy: Only load file structure. Data objects are loaded
automatically when requested and then discarded.
2
Cached lazy: Only load file structure. Data objects are
loaded automatically when requested and then kept in
the object hierarchy so they only need to be loaded once.
This parameter is only effective when set in the startup script.
Default: 0
autoselect_segments (:class:`bool`)
Select all visible segments by default. Default: ``False``
autoselect_channel_groups (:class:`bool`)
Select all visible channel groups by default. Default: ``False``
autoselect_channels (:class:`bool`)
Select all visible channels by default. Default: ``True``
autoselect_units (:class:`bool`)
Select all visible units by default. Default: ``False``
duplicate_channels (:class:`bool`)
Treat :class:`neo.core.RecordingChannel` objects that are
referenced in multiple :class:`neo.core.RecordingChannelGroup`
objects as separate objects for each reference. If ``False``,
each channel will only be displayed (and returned by
:class:`spykeutils.plugin.data_provider.DataProvider`) once,
for the first reference encountered. Default: ``False``
codecomplete_console_enter (:class:`bool`)
Use Enter key for code completion in console. This parameter is
only effective when set in the startup script. Default: ``True``
codecomplete_editor_enter (:class:`bool`)
Use Enter key for code completion in editor. This parameter is
only effective when set in the startup script. Default: ``True``
remote_script_parameters (:class:`list`)
Additional parameters for remote script. Use this if you have a custom
remote script that needs nonstandard parameters. The format is the same
as for :class:`subprocess.Popen`, e.g.
``['--param1', 'first value', '-p2', '2']``. Default: ``[]``
.. data:: spykeviewer.api.window
The main window of Spyke Viewer.
.. data:: spykeviewer.api.app
The PyQt application object.
.. autofunction:: spykeviewer.api.start_plugin
.. autofunction:: spykeviewer.api.get_plugin spykeviewer-0.4.1/doc/source/conf.py 0000644 0001750 0001750 00000021067 12262550403 015570 0 ustar rob rob # -*- coding: utf-8 -*-
#
# spykeutils documentation build configuration file, created by
# sphinx-quickstart on Mon Jul 30 16:54:09 2012.
#
# This file is execfile()d with the current directory set to its containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.
import sys, os
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
sys.path.insert(0, os.path.abspath(
os.path.join(os.pardir,os.pardir)))
# -- Mocking modules for Read the Docs compatibility ---------------------------
from mock import MagicMock
MOCK_MODULES = ['neo', 'tables', 'guiqwt', 'guiqwt.builder',
'guiqwt.baseplot', 'guiqwt.plot', 'guiqwt.curve',
'guiqwt.image', 'guiqwt.tools', 'guiqwt.signals',
'guiqwt.config', 'PyQt4', 'PyQt4.QtCore', 'PyQt4.QtGui',
'spykeutils', 'spykeutils.plot', 'spykeutils.plugin',
'scipy', 'matplotlib']
for mod_name in MOCK_MODULES:
sys.modules[mod_name] = MagicMock()
import spykeviewer
# -- General configuration -----------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
#needs_sphinx = '1.0'
# Add any Sphinx extension module names here, as strings. They can be extensions
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest',
'sphinx.ext.intersphinx', 'sphinx.ext.coverage',
'sphinx.ext.pngmath', 'sphinx.ext.pngmath',
'sphinx.ext.ifconfig']
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# The suffix of source filenames.
source_suffix = '.rst'
# The encoding of source files.
#source_encoding = 'utf-8-sig'
# The master toctree document.
master_doc = 'index'
# General information about the project.
project = u'Spyke Viewer'
copyright = u'2012, Robert Pröpper'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
version = spykeviewer.__version__.rsplit('.', 1)[0]
# The full version, including alpha/beta/rc tags.
release = spykeviewer.__version__
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#language = None
# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
#today = ''
# Else, today_fmt is used as the format for a strftime call.
#today_fmt = '%B %d, %Y'
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
exclude_patterns = []
# The reST default role (used for this markup: `text`) to use for all documents.
#default_role = None
# If true, '()' will be appended to :func: etc. cross-reference text.
#add_function_parentheses = True
# If true, the current module name will be prepended to all description
# unit titles (such as .. function::).
#add_module_names = True
# If true, sectionauthor and moduleauthor directives will be shown in the
# output. They are ignored by default.
#show_authors = False
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'
# A list of ignored prefixes for module index sorting.
#modindex_common_prefix = []
# -- Options for HTML output ---------------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
html_theme = 'default'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
#html_theme_options = {}
# Add any paths that contain custom themes here, relative to this directory.
#html_theme_path = []
# The name for this set of Sphinx documents. If None, it defaults to
# " v documentation".
#html_title = None
# A shorter title for the navigation bar. Default is the same as html_title.
#html_short_title = None
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
html_logo = os.path.join('img', 'logo.png')
# The name of an image file (within the static path) to use as favicon of the
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
# pixels large.
html_favicon = 'icon.ico'
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['static']
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
# using the given strftime format.
#html_last_updated_fmt = '%b %d, %Y'
# If true, SmartyPants will be used to convert quotes and dashes to
# typographically correct entities.
#html_use_smartypants = True
# Custom sidebar templates, maps document names to template names.
#html_sidebars = {}
# Additional templates that should be rendered to pages, maps page names to
# template names.
#html_additional_pages = {}
# If false, no module index is generated.
#html_domain_indices = True
# If false, no index is generated.
#html_use_index = True
# If true, the index is split into individual pages for each letter.
#html_split_index = False
# If true, links to the reST sources are added to the pages.
#html_show_sourcelink = True
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
#html_show_sphinx = True
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
#html_show_copyright = True
# If true, an OpenSearch description file will be output, and all pages will
# contain a tag referring to it. The value of this option must be the
# base URL from which the finished HTML is served.
#html_use_opensearch = ''
# This is the file name suffix for HTML files (e.g. ".xhtml").
#html_file_suffix = None
# Output file base name for HTML help builder.
htmlhelp_basename = 'spykeviewerdoc'
# -- Options for LaTeX output --------------------------------------------------
# The paper size ('letter' or 'a4').
#latex_paper_size = 'letter'
# The font size ('10pt', '11pt' or '12pt').
#latex_font_size = '10pt'
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title, author, documentclass [howto/manual]).
latex_documents = [
('index', 'spykeutils.tex', u'spykeutils Documentation',
u'Robert Pröpper', 'manual'),
]
# The name of an image file (relative to this directory) to place at the top of
# the title page.
#latex_logo = None
# For "manual" documents, if this is true, then toplevel headings are parts,
# not chapters.
#latex_use_parts = False
# If true, show page references after internal links.
#latex_show_pagerefs = False
# If true, show URL addresses after external links.
#latex_show_urls = False
# Additional stuff for the LaTeX preamble.
#latex_preamble = ''
# Documents to append as an appendix to all manuals.
#latex_appendices = []
# If false, no module index is generated.
#latex_domain_indices = True
# -- Add additional features ---------------------------------------------------
def setup(app):
app.add_javascript('copybutton.js')
# -- Options for manual page output --------------------------------------------
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
('index', 'SpykeViewer', u'Spyke Viewer Documentation',
[u'Robert Pröpper'], 1)
]
# Example configuration for intersphinx: refer to the Python standard library.
intersphinx_mapping = {'python': ('http://docs.python.org/', None),
'neo': ('http://neo.readthedocs.org/en/latest/', None),
'scipy': ('http://docs.scipy.org/doc/scipy/reference/', None),
'quantities': ('http://packages.python.org/quantities/', None),
'guiqwt': ('http://packages.python.org/guiqwt/', None),
'guidata': ('http://packages.python.org/guidata/', None),
'tables': ('http://pytables.github.com/', None),
'spykeutils': ('http://spykeutils.readthedocs.org/en/latest/', None)}
spykeviewer-0.4.1/doc/source/acknowledgements.rst 0000644 0001750 0001750 00000000640 12262550403 020347 0 ustar rob rob Acknowledgements
================
Spyke Viewer was created by Robert Pröpper [1]_, supported by the Research
Training Group GRK 1589/1. The inspiration for the GUI came from an earlier
program developed by Felix Franke [2]_. The simulated data used in the
examples was created by Philipp Meier [1]_.
.. [1] Neural Information Processing Group, TU Berlin
.. [2] ETH Zurich, D-BSSE, Bio Engineering Laboratory (BEL) spykeviewer-0.4.1/doc/source/static/ 0000755 0001750 0001750 00000000000 12262550403 015552 5 ustar rob rob spykeviewer-0.4.1/doc/source/static/copybutton.js 0000644 0001750 0001750 00000004631 12262550403 020322 0 ustar rob rob $(document).ready(function() {
/* Add a [>>>] button on the top-right corner of code samples to hide
* the >>> and ... prompts and the output and thus make the code
* copyable. */
var div = $('.highlight-python .highlight,' +
'.highlight-python3 .highlight')
var pre = div.find('pre');
// get the styles from the current theme
pre.parent().parent().css('position', 'relative');
var hide_text = 'Hide the prompts and output';
var show_text = 'Show the prompts and output';
var border_width = pre.css('border-top-width');
var border_style = pre.css('border-top-style');
var border_color = pre.css('border-top-color');
var button_styles = {
'cursor':'pointer', 'position': 'absolute', 'top': '0', 'right': '0',
'border-color': border_color, 'border-style': border_style,
'border-width': border_width, 'color': border_color, 'text-size': '75%',
'font-family': 'monospace', 'padding-left': '0.2em', 'padding-right': '0.2em'
}
// create and add the button to all the code blocks that contain >>>
div.each(function(index) {
var jthis = $(this);
if (jthis.find('.gp').length > 0) {
var button = $('>>>');
button.css(button_styles)
button.attr('title', hide_text);
jthis.prepend(button);
}
// tracebacks (.gt) contain bare text elements that need to be
// wrapped in a span to work with .nextUntil() (see later)
jthis.find('pre:has(.gt)').contents().filter(function() {
return ((this.nodeType == 3) && (this.data.trim().length > 0));
}).wrap('');
});
// define the behavior of the button when it's clicked
$('.copybutton').toggle(
function() {
var button = $(this);
button.parent().find('.go, .gp, .gt').hide();
button.next('pre').find('.gt').nextUntil('.gp, .go').css('visibility', 'hidden');
button.css('text-decoration', 'line-through');
button.attr('title', show_text);
},
function() {
var button = $(this);
button.parent().find('.go, .gp, .gt').show();
button.next('pre').find('.gt').nextUntil('.gp, .go').css('visibility', 'visible');
button.css('text-decoration', 'none');
button.attr('title', hide_text);
});
});
spykeviewer-0.4.1/doc/source/static/icon.ico 0000644 0001750 0001750 00000012466 12262550403 017207 0 ustar rob rob h &