diff --git a/src/instrumentserver/apps.py b/src/instrumentserver/apps.py
index 0d881d1..b3680e5 100644
--- a/src/instrumentserver/apps.py
+++ b/src/instrumentserver/apps.py
@@ -63,16 +63,23 @@ def serverScript() -> None:
stationConfig,
serverConfig,
guiConfig,
+ shortcutConfig,
tempFile,
pollingRates,
pollingThread,
ipAddresses,
- ) = None, None, None, None, None, None, None
+ ) = None, None, None, None, None, None, None, None
if configPath != "":
# Separates the corresponding settings into the 5 necessary parts
- stationConfig, serverConfig, guiConfig, tempFile, pollingRates, ipAddresses = (
- loadConfig(configPath)
- )
+ (
+ stationConfig,
+ serverConfig,
+ guiConfig,
+ shortcutConfig,
+ tempFile,
+ pollingRates,
+ ipAddresses,
+ ) = loadConfig(configPath)
if pollingRates is not None and pollingRates != {}:
pollingThread = QtCore.QThread()
pollWorker = PollingWorker(pollingRates=pollingRates)
@@ -89,8 +96,10 @@ def serverScript() -> None:
serverConfig=serverConfig,
stationConfig=stationConfig,
guiConfig=guiConfig,
+ shortcutConfig=shortcutConfig,
pollingThread=pollingThread,
ipAddresses=ipAddresses,
+ configPath=configPath,
)
else:
serverWithGui(
@@ -100,8 +109,10 @@ def serverScript() -> None:
serverConfig=serverConfig,
stationConfig=stationConfig,
guiConfig=guiConfig,
+ shortcutConfig=shortcutConfig,
pollingThread=pollingThread,
ipAddresses=ipAddresses,
+ configPath=configPath,
)
# Close and delete the temporary files
diff --git a/src/instrumentserver/client/proxy.py b/src/instrumentserver/client/proxy.py
index 3c43d74..391542c 100644
--- a/src/instrumentserver/client/proxy.py
+++ b/src/instrumentserver/client/proxy.py
@@ -18,7 +18,7 @@
import qcodes as qc
import zmq
from qcodes import Instrument, Parameter
-from qcodes.instrument.base import InstrumentBase
+from qcodes.instrument import InstrumentBase
from instrumentserver import DEFAULT_PORT, QtCore
from instrumentserver.helpers import flat_to_nested_dict, flatten_dict, is_flat_dict
@@ -859,7 +859,7 @@ def __init__(
# Use config.py to parse server config format
from instrumentserver.config import loadConfig
- _, serverConfig, fullConfig, tempFile, _, _ = loadConfig(config_path)
+ _, serverConfig, fullConfig, _, tempFile, _, _ = loadConfig(config_path)
tempFile.close() # Clean up temp file
self.full_config = fullConfig
diff --git a/src/instrumentserver/config.py b/src/instrumentserver/config.py
index d177c87..f30d874 100644
--- a/src/instrumentserver/config.py
+++ b/src/instrumentserver/config.py
@@ -18,7 +18,9 @@
GUIFIELD = {"type": "instrumentserver.gui.instruments.GenericInstrument", "kwargs": {}}
-def loadConfig(configPath: str | Path) -> tuple[str, dict, dict, IO[bytes], dict, dict]:
+def loadConfig(
+ configPath: str | Path,
+) -> tuple[str, dict, dict, dict, IO[bytes], dict, dict]:
"""
Loads the config for the instrumentserver. From 1 config file it splits the respective fields into 3 different
objects: a serverConfig (the configurations for the server), a stationConfig(the qcodes station config file clean
@@ -36,6 +38,7 @@ def loadConfig(configPath: str | Path) -> tuple[str, dict, dict, IO[bytes], dict
serverConfig: dict = {} # Config for the server
guiConfig = {} # Individual gui config of each instrument
fullConfig = {} # serverConfig + guiConfig + any unfilled fields. Used for creating instruments from the gui
+ shortcutConfig = {} # Preferences for keyboard shortcuts
pollingRates = {} # Polling rates for each parameter
ipAddresses = {} # Dictionary of IP Addresses to send broadcasts to:
# externalBroadcast: where to externally send parameter change broadcasts to, formatted like "tcp://address:port"
@@ -150,6 +153,11 @@ def loadConfig(configPath: str | Path) -> tuple[str, dict, dict, IO[bytes], dict
# Update fullConfig with merged GUI config
fullConfig[instrumentName]["gui"] = guiConfig[instrumentName]
+ # Gets all shortcuts different to REGISTRY defaults from the config file
+ if "shortcuts" in rawConfig:
+ shortcutConfig = rawConfig["shortcuts"]
+ rawConfig.pop("shortcuts")
+
# Gets all of the broadcasting and listening addresses from the config file
if "networking" in rawConfig:
addressDict = rawConfig["networking"]
@@ -170,4 +178,12 @@ def loadConfig(configPath: str | Path) -> tuple[str, dict, dict, IO[bytes], dict
tempFilePath = tempFile.name
# You need to return the tempFile itself so that the garbage collector doesn't touch it
- return tempFilePath, serverConfig, fullConfig, tempFile, pollingRates, ipAddresses
+ return (
+ tempFilePath,
+ serverConfig,
+ fullConfig,
+ shortcutConfig,
+ tempFile,
+ pollingRates,
+ ipAddresses,
+ )
diff --git a/src/instrumentserver/gui/base_instrument.py b/src/instrumentserver/gui/base_instrument.py
index 5e76af5..2e28793 100644
--- a/src/instrumentserver/gui/base_instrument.py
+++ b/src/instrumentserver/gui/base_instrument.py
@@ -107,6 +107,7 @@
from typing import Any, Dict, List, Optional, cast
from instrumentserver import QtCore, QtGui, QtWidgets
+from instrumentserver.gui.shortcuts import KeyboardShortcutManager
class ItemBase(QtGui.QStandardItem):
@@ -237,6 +238,7 @@ def _matches_any_pattern(name: str, patterns: List[str]) -> bool:
:param patterns: List of glob patterns to match against (e.g., 'power_*', '*_frequency')
:return: True if name matches any pattern, False otherwise
"""
+
for pattern in patterns:
if fnmatch.fnmatch(name, pattern):
return True
@@ -481,7 +483,7 @@ def filterAcceptsRow(
item = parent.child(source_row, 0)
# The order in which things get constructed seems to impact this.
- # When the application is first starting, the proxy model does not have the trash attribute.
+ # When the application is first starting, the proxy model does not have the trash attribute.
if hasattr(self, "trash"):
if self.trash:
# Assertion is there to satisfy mypy. item can be None, that is why we check before making the assertion
@@ -769,6 +771,7 @@ class InstrumentDisplayBase(QtWidgets.QWidget):
:param proxyModelType: The type of proxy model that should be used.
:param viewType: The type of view that should be used.
:param callSignals: If False, the constructor will not call the method connectSignals
+ :param shortcutManager: Manager shared across the application so actions can be registered to shortcuts
"""
def __init__(
@@ -780,6 +783,7 @@ def __init__(
proxyModelType: type = InstrumentSortFilterProxyModel,
viewType: type = InstrumentTreeViewBase,
callSignals: bool = True,
+ shortcutManager: Optional[KeyboardShortcutManager] = None,
parent: Optional[QtWidgets.QWidget] = None,
**modelKwargs: Any,
) -> None:
@@ -795,6 +799,12 @@ def __init__(
self.proxyModel = proxyModelType(self.model)
self.view = viewType(self.proxyModel)
+ self.shortcutManager = (
+ shortcutManager
+ if shortcutManager is not None
+ else KeyboardShortcutManager()
+ )
+
self.layout_ = QtWidgets.QVBoxLayout()
self.lineEdit = QtWidgets.QLineEdit(self)
@@ -830,6 +840,17 @@ def connectSignals(self) -> None:
self.proxyModel.onSortingIndicatorChanged
)
+ self.shortcutManager.register("jump_filter", self.lineEdit.setFocus, self)
+ self.shortcutManager.register("star_item", self._starCurrentItem, self)
+ self.shortcutManager.register("trash_item", self._trashCurrentItem, self)
+ self.shortcutManager.register("fit_column", self._fitCurrentColumn, self)
+ self.shortcutManager.register("sort_column", self._sortCurrentColumn, self)
+ self.shortcutManager.register("refresh_all", self.refreshAll, self)
+ self.shortcutManager.register("expand_all", self.view.expandAll, self)
+ self.shortcutManager.register("collapse_all", self.view.collapseAll, self)
+ self.shortcutManager.register("toggle_star", self._starAction.trigger, self) # type: ignore[union-attr]
+ self.shortcutManager.register("toggle_trash", self._trashAction.trigger, self) # type: ignore[union-attr]
+
def makeToolbar(self) -> QtWidgets.QToolBar:
"""
Creates the toolbar, override to add more buttons to the toolbar.
@@ -842,6 +863,7 @@ def makeToolbar(self) -> QtWidgets.QToolBar:
"refresh all items from the instrument",
)
refreshAction.triggered.connect(lambda x: self.refreshAll()) # type: ignore[union-attr]
+ self.shortcutManager.register_tooltip("refresh_all", refreshAction)
toolbar.addSeparator()
@@ -850,26 +872,30 @@ def makeToolbar(self) -> QtWidgets.QToolBar:
"expand tree",
)
expandAction.triggered.connect(lambda x: self.view.expandAll()) # type: ignore[union-attr]
+ self.shortcutManager.register_tooltip("expand_all", expandAction)
collapseAction = toolbar.addAction(
QtGui.QIcon(":/icons/collapse.svg"),
"collapse tree",
)
collapseAction.triggered.connect(lambda x: self.view.collapseAll()) # type: ignore[union-attr]
+ self.shortcutManager.register_tooltip("collapse_all", collapseAction)
toolbar.addSeparator()
- starAction = toolbar.addAction(
+ self._starAction = toolbar.addAction(
QtGui.QIcon(":/icons/star.svg"), "Move Starred items to the top"
)
- starAction.setCheckable(True) # type: ignore[union-attr]
- starAction.triggered.connect(lambda x: self.promoteStar()) # type: ignore[union-attr]
+ self._starAction.setCheckable(True) # type: ignore[union-attr]
+ self._starAction.triggered.connect(lambda x: self.proxyModel.onToggleStar()) # type: ignore[union-attr]
+ self.shortcutManager.register_tooltip("toggle_star", self._starAction)
- trashAction = toolbar.addAction(
+ self._trashAction = toolbar.addAction(
QtGui.QIcon(":/icons/trash-crossed.svg"), "Hide trashed items"
)
- trashAction.setCheckable(True) # type: ignore[union-attr]
- trashAction.triggered.connect(lambda x: self.hideTrash()) # type: ignore[union-attr]
+ self._trashAction.setCheckable(True) # type: ignore[union-attr]
+ self._trashAction.triggered.connect(lambda x: self.proxyModel.onToggleTrash()) # type: ignore[union-attr]
+ self.shortcutManager.register_tooltip("toggle_trash", self._trashAction)
# Debugging tools keep commented for commits.
# printAction = toolbar.addAction(
@@ -883,16 +909,51 @@ def makeToolbar(self) -> QtWidgets.QToolBar:
return toolbar
@QtCore.Slot()
- def hideTrash(self) -> None:
- self.proxyModel.onToggleTrash()
+ def refreshAll(self) -> None:
+ self.model.refreshAll()
+
+ def _getCurrentItem(self) -> Optional[ItemBase]:
+ proxy_index = self.view.currentIndex()
+ if not proxy_index.isValid():
+ return None
+ source_index = self.proxyModel.mapToSource(proxy_index)
+ if source_index.column() != 0:
+ source_index = source_index.sibling(source_index.row(), 0)
+ item = self.model.itemFromIndex(source_index)
+ return item if isinstance(item, ItemBase) else None
+
+ def _toggleCurrentItem(self, signal: QtCore.SignalInstance) -> None:
+ item = self._getCurrentItem()
+ if item is not None:
+ self.view.lastSelectedItem = item
+ signal.emit(item)
@QtCore.Slot()
- def promoteStar(self) -> None:
- self.proxyModel.onToggleStar()
+ def _starCurrentItem(self) -> None:
+ self._toggleCurrentItem(self.view.itemStarToggle)
@QtCore.Slot()
- def refreshAll(self) -> None:
- self.model.refreshAll()
+ def _trashCurrentItem(self) -> None:
+ self._toggleCurrentItem(self.view.itemTrashToggle)
+
+ @QtCore.Slot()
+ def _fitCurrentColumn(self) -> None:
+ col = self.view.currentIndex().column()
+ self.view.resizeColumnToContents(col if col >= 0 else 0)
+
+ @QtCore.Slot()
+ def _sortCurrentColumn(self) -> None:
+ header = self.view.header()
+ col = self.view.currentIndex().column()
+ if col < 0:
+ col = header.sortIndicatorSection()
+ current_order = header.sortIndicatorOrder()
+ new_order = (
+ QtCore.Qt.SortOrder.AscendingOrder
+ if current_order == QtCore.Qt.SortOrder.DescendingOrder
+ else QtCore.Qt.SortOrder.DescendingOrder
+ )
+ header.setSortIndicator(col, new_order)
def debuggingMethod(self) -> None:
"""
diff --git a/src/instrumentserver/gui/instruments.py b/src/instrumentserver/gui/instruments.py
index 1a41ae0..b96805a 100644
--- a/src/instrumentserver/gui/instruments.py
+++ b/src/instrumentserver/gui/instruments.py
@@ -19,7 +19,7 @@
InstrumentTreeViewBase,
ItemBase,
)
-from .parameters import AnyInputForMethod, ParameterWidget
+from .parameters import AnyInput, AnyInputForMethod, ParameterWidget
# TODO: all styles set through a global style sheet.
# TODO: [maybe] add a column for information on valid input values?
@@ -465,6 +465,8 @@ def __init__(
if "sub_port" in kwargs:
modelKwargs["sub_port"] = kwargs.pop("sub_port")
+ shortcutManager = kwargs.pop("shortcutManager", None)
+
super().__init__(
instrument=instrument,
parent=parent,
@@ -473,12 +475,51 @@ def __init__(
modelType=ModelParameters,
viewType=viewType,
callSignals=callSignals,
+ shortcutManager=shortcutManager,
**modelKwargs,
)
def connectSignals(self) -> None:
super().connectSignals()
self.model.itemNewValue.connect(self.view.onItemNewValue)
+ self.shortcutManager.register("refresh_item", self._refreshCurrentItem, self)
+ self.shortcutManager.register(
+ "toggle_python", self._togglePythonCurrentItem, self
+ )
+ self.shortcutManager.register("edit_value", self._focusToParameterValue, self)
+
+ def _withCurrentParameter(
+ self, callback: Callable[["ParameterWidget"], None]
+ ) -> None:
+ item = self._getCurrentItem()
+ if item is not None:
+ widget = self.view.delegate.parameters.get(item.name)
+ if widget is not None:
+ callback(widget)
+
+ @QtCore.Slot()
+ def _refreshCurrentItem(self) -> None:
+ self._withCurrentParameter(lambda w: w.setWidgetFromParameter())
+
+ @QtCore.Slot()
+ def _togglePythonCurrentItem(self) -> None:
+ self._withCurrentParameter(
+ lambda w: (
+ w.paramWidget.doEval.toggle()
+ if isinstance(w.paramWidget, AnyInput)
+ else None
+ )
+ )
+
+ @QtCore.Slot()
+ def _focusToParameterValue(self) -> None:
+ self._withCurrentParameter(
+ lambda w: (
+ w.paramWidget.input.setFocus()
+ if isinstance(w.paramWidget, AnyInput)
+ else w.paramWidget.setFocus()
+ )
+ )
# ----------------- Parameters Display Classes - Ending --------------------------------
@@ -615,6 +656,17 @@ def connectSignals(self) -> None:
self.parameterCreationError.connect(self.addParam.setError)
self.parameterCreated.connect(self.addParam.clear)
self.profileManager.indexChanged.connect(self.loadProfile)
+ self.shortcutManager.register("delete_item", self._deleteCurrentItem, self)
+ self.shortcutManager.register("clear_add", self.addParam.clear, self)
+ self.shortcutManager.register("add_item", self.addParam.nameEdit.setFocus, self)
+ self.shortcutManager.register("load_items", self.loadFromFile, self)
+ self.shortcutManager.register("save_items", self.saveToFile, self)
+
+ @QtCore.Slot()
+ def _deleteCurrentItem(self) -> None:
+ item = self._getCurrentItem()
+ if item is not None:
+ self.removeParameter(item.name)
def makeToolbar(self) -> QtWidgets.QToolBar:
toolbar = super().makeToolbar()
@@ -626,12 +678,14 @@ def makeToolbar(self) -> QtWidgets.QToolBar:
"Load parameters from file",
)
loadParamAction.triggered.connect(lambda x: self.loadFromFile()) # type: ignore[union-attr]
+ self.shortcutManager.register_tooltip("load_items", loadParamAction)
saveParamAction = toolbar.addAction(
QtGui.QIcon(":/icons/save.svg"),
"Save parameters to file",
)
saveParamAction.triggered.connect(lambda x: self.saveToFile()) # type: ignore[union-attr]
+ self.shortcutManager.register_tooltip("save_items", saveParamAction)
return toolbar
@@ -767,14 +821,44 @@ def __init__(self, instrument: Any, **kwargs: Any) -> None:
if "methods-hide" in kwargs:
modelKwargs["itemsHide"] = kwargs.pop("methods-hide")
+ shortcutManager = kwargs.pop("shortcutManager", None)
+
super().__init__(
instrument=instrument,
attr="functions",
modelType=MethodsModel,
viewType=MethodsTreeView,
+ shortcutManager=shortcutManager,
**modelKwargs,
)
+ def connectSignals(self) -> None:
+ super().connectSignals()
+ self.shortcutManager.register(
+ "toggle_python", self._togglePythonCurrentItem, self
+ )
+ self.shortcutManager.register("edit_value", self._focusToMethodValue, self)
+ self.shortcutManager.register("run_method", self._runCurrentMethod, self)
+
+ def _withCurrentMethod(self, callback: Callable[["MethodDisplay"], None]) -> None:
+ item = self._getCurrentItem()
+ if item is not None:
+ widget = self.view.delegate.methods.get(item.name)
+ if widget is not None:
+ callback(widget)
+
+ @QtCore.Slot()
+ def _togglePythonCurrentItem(self) -> None:
+ self._withCurrentMethod(lambda w: w.anyInput.doEval.toggle())
+
+ @QtCore.Slot()
+ def _focusToMethodValue(self) -> None:
+ self._withCurrentMethod(lambda w: w.anyInput.input.setFocus())
+
+ @QtCore.Slot()
+ def _runCurrentMethod(self) -> None:
+ self._withCurrentMethod(lambda w: w.runFun())
+
# ----------------- Methods Display Classes - Ending -----------------------------------
diff --git a/src/instrumentserver/gui/shortcuts.py b/src/instrumentserver/gui/shortcuts.py
new file mode 100644
index 0000000..27c639f
--- /dev/null
+++ b/src/instrumentserver/gui/shortcuts.py
@@ -0,0 +1,330 @@
+import logging
+from collections import defaultdict
+from typing import Callable, Optional, Union
+
+import yaml
+
+from instrumentserver import QtCore, QtGui, QtWidgets
+
+logger = logging.getLogger(__name__)
+
+
+class KeyboardShortcutManager:
+ """
+ Manages keyboard shortcut mappings for the instrument GUI.
+
+ Holds a registry of named actions with default key sequences and descriptions.
+ The active mapping starts from defaults and can be customized by the user and
+ persisted to a JSON file.
+
+ Qt does not poll for key presses — instead, register() hands each mapping entry
+ to Qt's event system via QShortcut, which fires the associated callback when the
+ key is pressed. register_tooltip() tracks widgets whose tooltips should display
+ the current key hint and be updated live when the user rebinds.
+ """
+
+ REGISTRY: dict[str, tuple[str, str]] = {
+ # action_id: (default_key_sequence, description)
+ "jump_filter": ("Ctrl+F", "Jump cursor to the filter search bar"),
+ "collapse_all": ("Ctrl+Shift+E", "Collapse all tree nodes"),
+ "expand_all": ("Ctrl+E", "Expand all tree nodes"),
+ "toggle_star": ("Ctrl+Shift+A", "Toggle star filter"),
+ "star_item": ("Ctrl+A", "Star/un-star the selected parameter"),
+ "toggle_trash": ("Ctrl+Shift+T", "Toggle trash filter"),
+ "trash_item": ("Ctrl+T", "Trash/un-trash the selected parameter"),
+ "refresh_all": ("Ctrl+Shift+R", "Refresh all parameters from instrument"),
+ "refresh_item": ("Ctrl+R", "Refresh the selected parameter"),
+ "toggle_python": ("Ctrl+P", "Toggle Python eval for selected parameter"),
+ "delete_item": ("Ctrl+Backspace", "Delete the selected parameter"),
+ "run_method": ("Ctrl+Return", "Runs the selected method"),
+ "clear_add": ("Ctrl+Shift+N", "Clear regions of add parameter bar"),
+ "add_item": ("Ctrl+N", "Jump cursor to the add parameter bar"),
+ "load_items": ("Ctrl+Shift+O", "Load parameters from JSON file"),
+ "save_items": ("Ctrl+Shift+S", "Save parameters to JSON file"),
+ "fit_column": ("Ctrl+Shift+D", "Fits column width"),
+ "sort_column": ("Ctrl+D", "Toggle sorting of selected column"),
+ "edit_value": ("Right", "Jump cursor to value field for selected parameter"),
+ }
+
+ def __init__(self) -> None:
+ self.mapping: dict[str, str] = {k: v[0] for k, v in self.REGISTRY.items()}
+ self._shortcut_map: dict[str, list[QtWidgets.QShortcut]] = defaultdict(list)
+ self._tooltip_widgets: dict[
+ str, list[tuple[Union[QtWidgets.QAction, QtWidgets.QWidget], str]]
+ ] = defaultdict(list)
+
+ def load_from_dict(self, config: dict[str, str]) -> None:
+ """Override the current mapping with entries read from serverConfig file."""
+ self.mapping.update(config)
+
+ def save(self, path: str) -> None:
+ """Write the current mapping to the serverConfig file."""
+ with open(path, "r") as f:
+ data = yaml.safe_load(f) or {}
+
+ diffs = {k: v for k, v in self.mapping.items() if v != self.REGISTRY[k][0]}
+ if diffs:
+ data["shortcuts"] = diffs
+ elif "shortcuts" in data:
+ del data["shortcuts"]
+ with open(path, "w") as f:
+ yaml.dump(data, f, indent=2)
+
+ def register_tooltip(
+ self,
+ action_id: str,
+ widget: Optional[Union[QtWidgets.QAction, QtWidgets.QWidget]],
+ ) -> None:
+ """Append the current key hint to widget's tooltip and track it for live rebinding."""
+ if widget is None:
+ return
+ key = self.mapping.get(action_id, "")
+ if not key:
+ return
+ base_tip = widget.toolTip()
+ widget.setToolTip(f"{base_tip} [{key}]" if base_tip else f"[{key}]")
+ self._tooltip_widgets[action_id].append((widget, base_tip))
+ widget.destroyed.connect(
+ lambda _, aid=action_id, ref=widget: self._remove_tooltip_widget(aid, ref)
+ )
+
+ def _remove_tooltip_widget(
+ self, action_id: str, widget: Union[QtWidgets.QAction, QtWidgets.QWidget]
+ ) -> None:
+ self._tooltip_widgets[action_id] = [
+ (w, t) for w, t in self._tooltip_widgets[action_id] if w is not widget
+ ]
+
+ def register(
+ self, action_id: str, callback: Callable, widget: QtWidgets.QWidget
+ ) -> None:
+ """
+ Create a QShortcut for action_id on widget and connect it to callback.
+
+ The shortcut fires when widget or any of its children has focus.
+ The QShortcut object is retained internally so it is not garbage-collected
+ and can be updated live via rebind().
+ """
+ key = self.mapping.get(action_id)
+ if key:
+ sc = QtWidgets.QShortcut(QtGui.QKeySequence(key), widget)
+ sc.setContext(QtCore.Qt.ShortcutContext.WidgetWithChildrenShortcut)
+ sc.activated.connect(callback)
+ self._shortcut_map[action_id].append(sc)
+ sc.destroyed.connect(
+ lambda _, aid=action_id, ref=sc: (
+ self._shortcut_map[aid].remove(ref)
+ if ref in self._shortcut_map[aid]
+ else None
+ )
+ )
+
+ def rebind(self, action_id: str, new_key: str) -> None:
+ """Update a shortcut immediately. Updates the mapping and the live Qt objects."""
+ self.mapping[action_id] = new_key
+ for sc in self._shortcut_map.get(action_id, []):
+ sc.setKey(QtGui.QKeySequence(new_key))
+ for widget, base_tip in self._tooltip_widgets.get(action_id, []):
+ widget.setToolTip(
+ f"{base_tip} [{new_key}]" if base_tip else f"[{new_key}]"
+ )
+ logger.debug(f"Rebound '{action_id}' to '{new_key}'")
+
+
+class ShortcutEditorWidget(QtWidgets.QWidget):
+ """
+ Permanent widget for viewing and editing keyboard shortcuts.
+
+ Intended to be embedded as a tab in the server window. Changes made in the
+ table are applied live to the manager (and therefore all registered shortcuts)
+ when 'Save to File' is clicked. Also use 'Save to file' to persist across sessions.
+
+ Each row has a small colored indicator dot in the rightmost column:
+ - transparent : saved and unique
+ - orange: unsaved change (widget value differs from manager.mapping)
+ - red : duplicate key sequence shared with another action (takes priority)
+
+ QKeySequenceEdit emits a spurious keySequenceChanged after its finishing timeout
+ resets the internal recording state. _onEditingFinished blocks that widget's signals
+ for one event-loop tick (swallowing the revert signal at the source), then restores
+ the display if the widget actually changed its stored sequence during the block.
+ """
+
+ def __init__(
+ self,
+ manager: KeyboardShortcutManager,
+ configPath: str,
+ parent: Optional[QtWidgets.QWidget] = None,
+ ) -> None:
+ super().__init__(parent)
+ self.manager = manager
+ self._file_mapping: dict[str, str] = dict(manager.mapping)
+
+ self._table = QtWidgets.QTableWidget(len(manager.REGISTRY), 4, self)
+ self._table.setHorizontalHeaderLabels(["Action", "Description", "Shortcut", ""])
+ header = self._table.horizontalHeader()
+ assert header is not None
+ header.setSectionResizeMode(
+ 0, QtWidgets.QHeaderView.ResizeMode.ResizeToContents
+ )
+ header.setSectionResizeMode(
+ 1, QtWidgets.QHeaderView.ResizeMode.ResizeToContents
+ )
+ header.setSectionResizeMode(2, QtWidgets.QHeaderView.ResizeMode.Stretch)
+ header.setSectionResizeMode(3, QtWidgets.QHeaderView.ResizeMode.Fixed)
+ self._table.setColumnWidth(3, 32)
+ self._table.setSelectionBehavior(
+ QtWidgets.QAbstractItemView.SelectionBehavior.SelectRows
+ )
+
+ self._indicators: list[QtWidgets.QLabel] = []
+ self._populateTable()
+
+ btnReset = QtWidgets.QPushButton("Reset to defaults")
+ btnReset.clicked.connect(self._resetDefaults)
+ btnSaveFile = QtWidgets.QPushButton("Save to file")
+ btnSaveFile.clicked.connect(self._saveToFile)
+
+ btnRow = QtWidgets.QHBoxLayout()
+ btnRow.addStretch()
+ btnRow.addWidget(btnReset)
+ btnRow.addWidget(btnSaveFile)
+
+ layout = QtWidgets.QVBoxLayout()
+ layout.addWidget(self._table)
+ layout.addLayout(btnRow)
+ self.setLayout(layout)
+
+ self.configPath = configPath
+
+ def _populateTable(self) -> None:
+ self._indicators.clear()
+ self._table.clearContents()
+ for row, (action_id, (_, description)) in enumerate(
+ self.manager.REGISTRY.items()
+ ):
+ current = self.manager.mapping.get(action_id, "")
+
+ id_item = QtWidgets.QTableWidgetItem(action_id)
+ id_item.setFlags(id_item.flags() & ~QtCore.Qt.ItemFlag.ItemIsEditable) # type: ignore[arg-type]
+
+ desc_item = QtWidgets.QTableWidgetItem(description)
+ desc_item.setFlags(desc_item.flags() & ~QtCore.Qt.ItemFlag.ItemIsEditable) # type: ignore[arg-type]
+
+ self._table.setItem(row, 0, id_item)
+ self._table.setItem(row, 1, desc_item)
+
+ key_edit = QtWidgets.QKeySequenceEdit(
+ QtGui.QKeySequence(current), self._table
+ )
+ key_edit.keySequenceChanged.connect(self._onUnsavedChange)
+ key_edit.editingFinished.connect(
+ lambda w=key_edit: self._onEditingFinished(w)
+ )
+ self._table.setCellWidget(row, 2, key_edit)
+
+ dot = QtWidgets.QLabel()
+ dot.setFixedSize(20, 20)
+ dot.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ dot.setStyleSheet(
+ "QToolTip { color: black; background-color: white;"
+ " border: 1px solid #cccccc; }"
+ )
+ container = QtWidgets.QWidget()
+ cl = QtWidgets.QHBoxLayout(container)
+ cl.addWidget(dot)
+ cl.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ cl.setContentsMargins(0, 0, 0, 0)
+ self._table.setCellWidget(row, 3, container)
+ self._indicators.append(dot)
+
+ self._updateAllIndicators()
+
+ def _collectDuplicates(self) -> dict[str, list[str]]:
+ """Return {key_sequence: [action_ids]} for every key bound to more than one action."""
+ seen: dict[str, list[str]] = defaultdict(list)
+ for row, action_id in enumerate(self.manager.REGISTRY):
+ widget = self._table.cellWidget(row, 2)
+ if isinstance(widget, QtWidgets.QKeySequenceEdit):
+ key = widget.keySequence().toString()
+ if key:
+ seen[key].append(action_id)
+ return {k: v for k, v in seen.items() if len(v) > 1}
+
+ def _updateAllIndicators(self) -> None:
+ duplicates = self._collectDuplicates()
+ for row, action_id in enumerate(self.manager.REGISTRY):
+ if row >= len(self._indicators):
+ break
+ dot = self._indicators[row]
+ widget = self._table.cellWidget(row, 2)
+ if not isinstance(widget, QtWidgets.QKeySequenceEdit):
+ continue
+ current = widget.keySequence().toString()
+ if current in duplicates:
+ others = [a for a in duplicates[current] if a != action_id]
+ self._applyIndicator(
+ dot, "duplicate", f"Duplicate: also bound to {', '.join(others)}"
+ )
+ elif current != self._file_mapping.get(action_id, ""):
+ self._applyIndicator(dot, "unsaved", "Unsaved change")
+ else:
+ self._applyIndicator(dot, "ok", "")
+
+ @staticmethod
+ def _applyIndicator(dot: QtWidgets.QLabel, state: str, tooltip: str) -> None:
+ dot.setToolTip(tooltip)
+
+ if state == "ok":
+ icon = QtGui.QIcon(":/icons/no-alert.svg")
+ elif state == "unsaved":
+ icon = QtGui.QIcon(":/icons/orange-alert.svg")
+ else: # duplicate
+ icon = QtGui.QIcon(":/icons/red-alert.svg")
+ pix = icon.pixmap(20, 20)
+ dot.setPixmap(pix)
+
+ @QtCore.Slot()
+ def _onUnsavedChange(self) -> None:
+ self._updateAllIndicators()
+
+ def _onEditingFinished(self, widget: QtWidgets.QKeySequenceEdit) -> None:
+ intended = widget.keySequence().toString()
+ widget.blockSignals(True)
+ QtCore.QTimer.singleShot(0, lambda: self._restoreAfterRevert(intended, widget))
+
+ def _restoreAfterRevert(
+ self, intended: str, widget: QtWidgets.QKeySequenceEdit
+ ) -> None:
+ if widget.keySequence().toString() != intended:
+ widget.setKeySequence(QtGui.QKeySequence(intended))
+ widget.blockSignals(False)
+
+ def _save(self) -> None:
+ for row, action_id in enumerate(self.manager.REGISTRY):
+ widget = self._table.cellWidget(row, 2)
+ if isinstance(widget, QtWidgets.QKeySequenceEdit):
+ self.manager.rebind(action_id, widget.keySequence().toString())
+
+ @QtCore.Slot()
+ def _saveToFile(self) -> None:
+ self._save()
+ if self.configPath:
+ try:
+ self.manager.save(self.configPath)
+ self._file_mapping = dict(self.manager.mapping)
+ self._updateAllIndicators()
+ logger.info(f"Saved shortcuts to {self.configPath}")
+ except Exception as e:
+ logger.warning(f"Failed to save shortcuts to {self.configPath}: {e}")
+
+ @QtCore.Slot()
+ def _resetDefaults(self) -> None:
+ for row, (action_id, (default_key, _)) in enumerate(
+ self.manager.REGISTRY.items()
+ ):
+ self.manager.rebind(action_id, default_key)
+ widget = self._table.cellWidget(row, 2)
+ if isinstance(widget, QtWidgets.QKeySequenceEdit):
+ widget.setKeySequence(QtGui.QKeySequence(default_key))
+ self._updateAllIndicators()
diff --git a/src/instrumentserver/resource.py b/src/instrumentserver/resource.py
index d4fd9e9..061fd31 100644
--- a/src/instrumentserver/resource.py
+++ b/src/instrumentserver/resource.py
@@ -65,134 +65,175 @@
\x31\x3d\x22\x31\x32\x22\x20\x79\x31\x3d\x22\x31\x36\x22\x20\x78\
\x32\x3d\x22\x31\x32\x2e\x30\x31\x22\x20\x79\x32\x3d\x22\x31\x36\
\x22\x3e\x3c\x2f\x6c\x69\x6e\x65\x3e\x3c\x2f\x73\x76\x67\x3e\
-\x00\x00\x07\xd9\
+\x00\x00\x07\xe1\
\x3c\
\x73\x76\x67\x20\x77\x69\x64\x74\x68\x3d\x22\x38\x30\x22\x20\x68\
\x65\x69\x67\x68\x74\x3d\x22\x38\x30\x22\x20\x78\x6d\x6c\x6e\x73\
\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x66\x69\
-\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x3e\x0a\x20\x3c\x67\x3e\x0a\
-\x20\x20\x3c\x74\x69\x74\x6c\x65\x3e\x4c\x61\x79\x65\x72\x20\x31\
-\x3c\x2f\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\
-\x20\x64\x3d\x22\x6d\x33\x38\x2e\x31\x34\x34\x31\x2c\x31\x35\x2e\
-\x31\x36\x31\x36\x31\x63\x30\x2e\x36\x37\x31\x38\x2c\x2d\x31\x2e\
-\x36\x37\x32\x39\x20\x33\x2e\x30\x34\x2c\x2d\x31\x2e\x36\x37\x32\
-\x39\x20\x33\x2e\x37\x31\x31\x38\x2c\x30\x6c\x35\x2e\x39\x35\x32\
-\x32\x2c\x31\x34\x2e\x38\x32\x32\x32\x63\x30\x2e\x32\x38\x36\x31\
-\x2c\x30\x2e\x37\x31\x32\x34\x20\x30\x2e\x39\x35\x34\x37\x2c\x31\
-\x2e\x31\x39\x38\x31\x20\x31\x2e\x37\x32\x30\x37\x2c\x31\x2e\x32\
-\x35\x30\x31\x6c\x31\x35\x2e\x39\x33\x36\x2c\x31\x2e\x30\x38\x30\
-\x35\x63\x31\x2e\x37\x39\x38\x37\x2c\x30\x2e\x31\x32\x32\x20\x32\
-\x2e\x35\x33\x30\x35\x2c\x32\x2e\x33\x37\x34\x34\x20\x31\x2e\x31\
-\x34\x37\x2c\x33\x2e\x35\x33\x30\x32\x6c\x2d\x31\x32\x2e\x32\x35\
-\x37\x34\x2c\x31\x30\x2e\x32\x34\x31\x32\x63\x2d\x30\x2e\x35\x38\
-\x39\x31\x2c\x30\x2e\x34\x39\x32\x32\x20\x2d\x30\x2e\x38\x34\x34\
-\x35\x2c\x31\x2e\x32\x37\x38\x32\x20\x2d\x30\x2e\x36\x35\x37\x32\
-\x2c\x32\x2e\x30\x32\x32\x37\x6c\x33\x2e\x38\x39\x36\x39\x2c\x31\
-\x35\x2e\x34\x39\x63\x30\x2e\x34\x33\x39\x38\x2c\x31\x2e\x37\x34\
-\x38\x33\x20\x2d\x31\x2e\x34\x37\x36\x32\x2c\x33\x2e\x31\x34\x30\
-\x34\x20\x2d\x33\x2e\x30\x30\x33\x2c\x32\x2e\x31\x38\x31\x38\x6c\
-\x2d\x31\x33\x2e\x35\x32\x37\x37\x2c\x2d\x38\x2e\x34\x39\x32\x38\
-\x63\x2d\x30\x2e\x36\x35\x30\x32\x2c\x2d\x30\x2e\x34\x30\x38\x32\
-\x20\x2d\x31\x2e\x34\x37\x36\x36\x2c\x2d\x30\x2e\x34\x30\x38\x32\
-\x20\x2d\x32\x2e\x31\x32\x36\x38\x2c\x30\x6c\x2d\x31\x33\x2e\x35\
-\x32\x37\x37\x2c\x38\x2e\x34\x39\x32\x38\x63\x2d\x31\x2e\x35\x32\
-\x36\x38\x2c\x30\x2e\x39\x35\x38\x36\x20\x2d\x33\x2e\x34\x34\x32\
-\x38\x2c\x2d\x30\x2e\x34\x33\x33\x35\x20\x2d\x33\x2e\x30\x30\x33\
-\x2c\x2d\x32\x2e\x31\x38\x31\x38\x6c\x33\x2e\x38\x39\x36\x39\x2c\
-\x2d\x31\x35\x2e\x34\x39\x63\x30\x2e\x31\x38\x37\x33\x2c\x2d\x30\
-\x2e\x37\x34\x34\x35\x20\x2d\x30\x2e\x30\x36\x38\x31\x2c\x2d\x31\
-\x2e\x35\x33\x30\x35\x20\x2d\x30\x2e\x36\x35\x37\x32\x2c\x2d\x32\
-\x2e\x30\x32\x32\x37\x6c\x2d\x31\x32\x2e\x32\x35\x37\x34\x2c\x2d\
-\x31\x30\x2e\x32\x34\x31\x32\x63\x2d\x31\x2e\x33\x38\x33\x35\x2c\
-\x2d\x31\x2e\x31\x35\x35\x38\x20\x2d\x30\x2e\x36\x35\x31\x37\x2c\
-\x2d\x33\x2e\x34\x30\x38\x32\x20\x31\x2e\x31\x34\x37\x2c\x2d\x33\
-\x2e\x35\x33\x30\x32\x6c\x31\x35\x2e\x39\x33\x36\x2c\x2d\x31\x2e\
-\x30\x38\x30\x35\x63\x30\x2e\x37\x36\x36\x2c\x2d\x30\x2e\x30\x35\
-\x32\x20\x31\x2e\x34\x33\x34\x36\x2c\x2d\x30\x2e\x35\x33\x37\x37\
-\x20\x31\x2e\x37\x32\x30\x37\x2c\x2d\x31\x2e\x32\x35\x30\x31\x6c\
-\x35\x2e\x39\x35\x32\x32\x2c\x2d\x31\x34\x2e\x38\x32\x32\x32\x7a\
-\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\x32\x39\x39\x34\x41\x22\
-\x20\x69\x64\x3d\x22\x73\x76\x67\x5f\x31\x22\x2f\x3e\x0a\x20\x20\
-\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x33\x39\x2e\x30\x35\x31\
-\x35\x2c\x32\x36\x2e\x33\x31\x30\x38\x63\x30\x2e\x33\x33\x35\x39\
-\x2c\x2d\x30\x2e\x38\x33\x36\x34\x20\x31\x2e\x35\x32\x30\x31\x2c\
-\x2d\x30\x2e\x38\x33\x36\x34\x20\x31\x2e\x38\x35\x36\x2c\x30\x6c\
-\x32\x2e\x39\x37\x36\x2c\x37\x2e\x34\x31\x31\x31\x63\x30\x2e\x31\
-\x34\x33\x31\x2c\x30\x2e\x33\x35\x36\x32\x20\x30\x2e\x34\x37\x37\
-\x34\x2c\x30\x2e\x35\x39\x39\x31\x20\x30\x2e\x38\x36\x30\x34\x2c\
-\x30\x2e\x36\x32\x35\x31\x6c\x37\x2e\x39\x36\x38\x2c\x30\x2e\x35\
-\x34\x30\x33\x63\x30\x2e\x38\x39\x39\x33\x2c\x30\x2e\x30\x36\x30\
-\x39\x20\x31\x2e\x32\x36\x35\x32\x2c\x31\x2e\x31\x38\x37\x31\x20\
-\x30\x2e\x35\x37\x33\x35\x2c\x31\x2e\x37\x36\x35\x31\x6c\x2d\x36\
-\x2e\x31\x32\x38\x37\x2c\x35\x2e\x31\x32\x30\x35\x63\x2d\x30\x2e\
-\x32\x39\x34\x36\x2c\x30\x2e\x32\x34\x36\x32\x20\x2d\x30\x2e\x34\
-\x32\x32\x33\x2c\x30\x2e\x36\x33\x39\x32\x20\x2d\x30\x2e\x33\x32\
-\x38\x36\x2c\x31\x2e\x30\x31\x31\x34\x6c\x31\x2e\x39\x34\x38\x34\
-\x2c\x37\x2e\x37\x34\x35\x63\x30\x2e\x32\x31\x39\x39\x2c\x30\x2e\
-\x38\x37\x34\x32\x20\x2d\x30\x2e\x37\x33\x38\x31\x2c\x31\x2e\x35\
-\x37\x30\x32\x20\x2d\x31\x2e\x35\x30\x31\x35\x2c\x31\x2e\x30\x39\
-\x30\x39\x6c\x2d\x36\x2e\x37\x36\x33\x38\x2c\x2d\x34\x2e\x32\x34\
-\x36\x34\x63\x2d\x30\x2e\x33\x32\x35\x31\x2c\x2d\x30\x2e\x32\x30\
-\x34\x31\x20\x2d\x30\x2e\x37\x33\x38\x33\x2c\x2d\x30\x2e\x32\x30\
-\x34\x31\x20\x2d\x31\x2e\x30\x36\x33\x34\x2c\x30\x6c\x2d\x36\x2e\
-\x37\x36\x33\x38\x2c\x34\x2e\x32\x34\x36\x34\x63\x2d\x30\x2e\x37\
-\x36\x33\x35\x2c\x30\x2e\x34\x37\x39\x33\x20\x2d\x31\x2e\x37\x32\
-\x31\x34\x2c\x2d\x30\x2e\x32\x31\x36\x37\x20\x2d\x31\x2e\x35\x30\
-\x31\x35\x2c\x2d\x31\x2e\x30\x39\x30\x39\x6c\x31\x2e\x39\x34\x38\
-\x34\x2c\x2d\x37\x2e\x37\x34\x35\x63\x30\x2e\x30\x39\x33\x36\x2c\
-\x2d\x30\x2e\x33\x37\x32\x32\x20\x2d\x30\x2e\x30\x33\x34\x31\x2c\
-\x2d\x30\x2e\x37\x36\x35\x32\x20\x2d\x30\x2e\x33\x32\x38\x36\x2c\
-\x2d\x31\x2e\x30\x31\x31\x34\x6c\x2d\x36\x2e\x31\x32\x38\x37\x2c\
-\x2d\x35\x2e\x31\x32\x30\x35\x63\x2d\x30\x2e\x36\x39\x31\x38\x2c\
-\x2d\x30\x2e\x35\x37\x38\x20\x2d\x30\x2e\x33\x32\x35\x38\x2c\x2d\
-\x31\x2e\x37\x30\x34\x32\x20\x30\x2e\x35\x37\x33\x35\x2c\x2d\x31\
-\x2e\x37\x36\x35\x31\x6c\x37\x2e\x39\x36\x38\x2c\x2d\x30\x2e\x35\
-\x34\x30\x33\x63\x30\x2e\x33\x38\x33\x2c\x2d\x30\x2e\x30\x32\x36\
-\x20\x30\x2e\x37\x31\x37\x33\x2c\x2d\x30\x2e\x32\x36\x38\x39\x20\
-\x30\x2e\x38\x36\x30\x33\x2c\x2d\x30\x2e\x36\x32\x35\x31\x6c\x32\
-\x2e\x39\x37\x36\x31\x2c\x2d\x37\x2e\x34\x31\x31\x31\x7a\x22\x20\
-\x66\x69\x6c\x6c\x3d\x22\x23\x46\x32\x43\x39\x34\x43\x22\x20\x69\
-\x64\x3d\x22\x73\x76\x67\x5f\x32\x22\x2f\x3e\x0a\x20\x20\x3c\x70\
-\x61\x74\x68\x20\x66\x69\x6c\x6c\x3d\x22\x23\x66\x66\x30\x30\x30\
-\x30\x22\x20\x64\x3d\x22\x6d\x35\x2c\x33\x39\x2e\x39\x39\x39\x39\
-\x34\x6c\x30\x2c\x30\x63\x30\x2c\x2d\x31\x38\x2e\x31\x36\x32\x36\
-\x38\x20\x31\x35\x2e\x36\x37\x30\x30\x35\x2c\x2d\x33\x32\x2e\x38\
-\x38\x36\x35\x34\x20\x33\x34\x2e\x39\x39\x39\x39\x37\x2c\x2d\x33\
-\x32\x2e\x38\x38\x36\x35\x34\x6c\x30\x2c\x30\x63\x39\x2e\x32\x38\
-\x32\x37\x2c\x30\x20\x31\x38\x2e\x31\x38\x35\x31\x37\x2c\x33\x2e\
-\x34\x36\x34\x38\x33\x20\x32\x34\x2e\x37\x34\x38\x37\x34\x2c\x39\
-\x2e\x36\x33\x32\x32\x38\x63\x36\x2e\x35\x36\x33\x38\x33\x2c\x36\
-\x2e\x31\x36\x37\x34\x35\x20\x31\x30\x2e\x32\x35\x31\x32\x39\x2c\
-\x31\x34\x2e\x35\x33\x32\x33\x32\x20\x31\x30\x2e\x32\x35\x31\x32\
-\x39\x2c\x32\x33\x2e\x32\x35\x34\x32\x36\x6c\x30\x2c\x30\x63\x30\
-\x2c\x31\x38\x2e\x31\x36\x32\x39\x20\x2d\x31\x35\x2e\x36\x36\x39\
-\x39\x34\x2c\x33\x32\x2e\x38\x38\x36\x36\x36\x20\x2d\x33\x35\x2e\
-\x30\x30\x30\x30\x33\x2c\x33\x32\x2e\x38\x38\x36\x36\x36\x6c\x30\
-\x2c\x30\x63\x2d\x31\x39\x2e\x33\x32\x39\x39\x32\x2c\x30\x20\x2d\
-\x33\x34\x2e\x39\x39\x39\x39\x37\x2c\x2d\x31\x34\x2e\x37\x32\x33\
-\x37\x36\x20\x2d\x33\x34\x2e\x39\x39\x39\x39\x37\x2c\x2d\x33\x32\
-\x2e\x38\x38\x36\x36\x36\x6c\x30\x2c\x30\x7a\x6d\x35\x36\x2e\x35\
-\x31\x37\x30\x33\x2c\x31\x34\x2e\x37\x31\x31\x38\x6c\x30\x2c\x30\
-\x63\x37\x2e\x37\x30\x35\x38\x34\x2c\x2d\x39\x2e\x39\x35\x30\x37\
-\x31\x20\x36\x2e\x35\x36\x30\x33\x39\x2c\x2d\x32\x33\x2e\x36\x39\
-\x30\x33\x36\x20\x2d\x32\x2e\x37\x30\x30\x35\x37\x2c\x2d\x33\x32\
-\x2e\x33\x39\x32\x63\x2d\x39\x2e\x32\x36\x30\x39\x36\x2c\x2d\x38\
-\x2e\x37\x30\x31\x37\x31\x20\x2d\x32\x33\x2e\x38\x38\x33\x35\x35\
-\x2c\x2d\x39\x2e\x37\x37\x38\x20\x2d\x33\x34\x2e\x34\x37\x33\x34\
-\x35\x2c\x2d\x32\x2e\x35\x33\x37\x33\x38\x6c\x33\x37\x2e\x31\x37\
-\x34\x30\x32\x2c\x33\x34\x2e\x39\x32\x39\x33\x38\x7a\x6d\x2d\x34\
-\x33\x2e\x30\x33\x33\x39\x33\x2c\x2d\x32\x39\x2e\x34\x32\x33\x33\
-\x63\x2d\x37\x2e\x37\x30\x35\x39\x2c\x39\x2e\x39\x35\x30\x36\x36\
-\x20\x2d\x36\x2e\x35\x36\x30\x34\x37\x2c\x32\x33\x2e\x36\x39\x30\
-\x33\x20\x32\x2e\x37\x30\x30\x34\x34\x2c\x33\x32\x2e\x33\x39\x31\
-\x38\x32\x63\x39\x2e\x32\x36\x30\x38\x38\x2c\x38\x2e\x37\x30\x31\
-\x37\x36\x20\x32\x33\x2e\x38\x38\x33\x34\x37\x2c\x39\x2e\x37\x37\
-\x38\x30\x35\x20\x33\x34\x2e\x34\x37\x33\x33\x37\x2c\x32\x2e\x35\
-\x33\x37\x35\x6c\x2d\x33\x37\x2e\x31\x37\x33\x38\x31\x2c\x2d\x33\
-\x34\x2e\x39\x32\x39\x33\x32\x6c\x30\x2c\x30\x7a\x22\x20\x69\x64\
-\x3d\x22\x73\x76\x67\x5f\x34\x22\x2f\x3e\x0a\x20\x3c\x2f\x67\x3e\
-\x0a\x0a\x3c\x2f\x73\x76\x67\x3e\
+\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x3e\x0d\x0a\x20\x3c\x67\x3e\
+\x0d\x0a\x20\x20\x3c\x74\x69\x74\x6c\x65\x3e\x4c\x61\x79\x65\x72\
+\x20\x31\x3c\x2f\x74\x69\x74\x6c\x65\x3e\x0d\x0a\x20\x20\x3c\x70\
+\x61\x74\x68\x20\x64\x3d\x22\x6d\x33\x38\x2e\x31\x34\x34\x31\x2c\
+\x31\x35\x2e\x31\x36\x31\x36\x31\x63\x30\x2e\x36\x37\x31\x38\x2c\
+\x2d\x31\x2e\x36\x37\x32\x39\x20\x33\x2e\x30\x34\x2c\x2d\x31\x2e\
+\x36\x37\x32\x39\x20\x33\x2e\x37\x31\x31\x38\x2c\x30\x6c\x35\x2e\
+\x39\x35\x32\x32\x2c\x31\x34\x2e\x38\x32\x32\x32\x63\x30\x2e\x32\
+\x38\x36\x31\x2c\x30\x2e\x37\x31\x32\x34\x20\x30\x2e\x39\x35\x34\
+\x37\x2c\x31\x2e\x31\x39\x38\x31\x20\x31\x2e\x37\x32\x30\x37\x2c\
+\x31\x2e\x32\x35\x30\x31\x6c\x31\x35\x2e\x39\x33\x36\x2c\x31\x2e\
+\x30\x38\x30\x35\x63\x31\x2e\x37\x39\x38\x37\x2c\x30\x2e\x31\x32\
+\x32\x20\x32\x2e\x35\x33\x30\x35\x2c\x32\x2e\x33\x37\x34\x34\x20\
+\x31\x2e\x31\x34\x37\x2c\x33\x2e\x35\x33\x30\x32\x6c\x2d\x31\x32\
+\x2e\x32\x35\x37\x34\x2c\x31\x30\x2e\x32\x34\x31\x32\x63\x2d\x30\
+\x2e\x35\x38\x39\x31\x2c\x30\x2e\x34\x39\x32\x32\x20\x2d\x30\x2e\
+\x38\x34\x34\x35\x2c\x31\x2e\x32\x37\x38\x32\x20\x2d\x30\x2e\x36\
+\x35\x37\x32\x2c\x32\x2e\x30\x32\x32\x37\x6c\x33\x2e\x38\x39\x36\
+\x39\x2c\x31\x35\x2e\x34\x39\x63\x30\x2e\x34\x33\x39\x38\x2c\x31\
+\x2e\x37\x34\x38\x33\x20\x2d\x31\x2e\x34\x37\x36\x32\x2c\x33\x2e\
+\x31\x34\x30\x34\x20\x2d\x33\x2e\x30\x30\x33\x2c\x32\x2e\x31\x38\
+\x31\x38\x6c\x2d\x31\x33\x2e\x35\x32\x37\x37\x2c\x2d\x38\x2e\x34\
+\x39\x32\x38\x63\x2d\x30\x2e\x36\x35\x30\x32\x2c\x2d\x30\x2e\x34\
+\x30\x38\x32\x20\x2d\x31\x2e\x34\x37\x36\x36\x2c\x2d\x30\x2e\x34\
+\x30\x38\x32\x20\x2d\x32\x2e\x31\x32\x36\x38\x2c\x30\x6c\x2d\x31\
+\x33\x2e\x35\x32\x37\x37\x2c\x38\x2e\x34\x39\x32\x38\x63\x2d\x31\
+\x2e\x35\x32\x36\x38\x2c\x30\x2e\x39\x35\x38\x36\x20\x2d\x33\x2e\
+\x34\x34\x32\x38\x2c\x2d\x30\x2e\x34\x33\x33\x35\x20\x2d\x33\x2e\
+\x30\x30\x33\x2c\x2d\x32\x2e\x31\x38\x31\x38\x6c\x33\x2e\x38\x39\
+\x36\x39\x2c\x2d\x31\x35\x2e\x34\x39\x63\x30\x2e\x31\x38\x37\x33\
+\x2c\x2d\x30\x2e\x37\x34\x34\x35\x20\x2d\x30\x2e\x30\x36\x38\x31\
+\x2c\x2d\x31\x2e\x35\x33\x30\x35\x20\x2d\x30\x2e\x36\x35\x37\x32\
+\x2c\x2d\x32\x2e\x30\x32\x32\x37\x6c\x2d\x31\x32\x2e\x32\x35\x37\
+\x34\x2c\x2d\x31\x30\x2e\x32\x34\x31\x32\x63\x2d\x31\x2e\x33\x38\
+\x33\x35\x2c\x2d\x31\x2e\x31\x35\x35\x38\x20\x2d\x30\x2e\x36\x35\
+\x31\x37\x2c\x2d\x33\x2e\x34\x30\x38\x32\x20\x31\x2e\x31\x34\x37\
+\x2c\x2d\x33\x2e\x35\x33\x30\x32\x6c\x31\x35\x2e\x39\x33\x36\x2c\
+\x2d\x31\x2e\x30\x38\x30\x35\x63\x30\x2e\x37\x36\x36\x2c\x2d\x30\
+\x2e\x30\x35\x32\x20\x31\x2e\x34\x33\x34\x36\x2c\x2d\x30\x2e\x35\
+\x33\x37\x37\x20\x31\x2e\x37\x32\x30\x37\x2c\x2d\x31\x2e\x32\x35\
+\x30\x31\x6c\x35\x2e\x39\x35\x32\x32\x2c\x2d\x31\x34\x2e\x38\x32\
+\x32\x32\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\x32\x39\x39\
+\x34\x41\x22\x20\x69\x64\x3d\x22\x73\x76\x67\x5f\x31\x22\x2f\x3e\
+\x0d\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x33\x39\
+\x2e\x30\x35\x31\x35\x2c\x32\x36\x2e\x33\x31\x30\x38\x63\x30\x2e\
+\x33\x33\x35\x39\x2c\x2d\x30\x2e\x38\x33\x36\x34\x20\x31\x2e\x35\
+\x32\x30\x31\x2c\x2d\x30\x2e\x38\x33\x36\x34\x20\x31\x2e\x38\x35\
+\x36\x2c\x30\x6c\x32\x2e\x39\x37\x36\x2c\x37\x2e\x34\x31\x31\x31\
+\x63\x30\x2e\x31\x34\x33\x31\x2c\x30\x2e\x33\x35\x36\x32\x20\x30\
+\x2e\x34\x37\x37\x34\x2c\x30\x2e\x35\x39\x39\x31\x20\x30\x2e\x38\
+\x36\x30\x34\x2c\x30\x2e\x36\x32\x35\x31\x6c\x37\x2e\x39\x36\x38\
+\x2c\x30\x2e\x35\x34\x30\x33\x63\x30\x2e\x38\x39\x39\x33\x2c\x30\
+\x2e\x30\x36\x30\x39\x20\x31\x2e\x32\x36\x35\x32\x2c\x31\x2e\x31\
+\x38\x37\x31\x20\x30\x2e\x35\x37\x33\x35\x2c\x31\x2e\x37\x36\x35\
+\x31\x6c\x2d\x36\x2e\x31\x32\x38\x37\x2c\x35\x2e\x31\x32\x30\x35\
+\x63\x2d\x30\x2e\x32\x39\x34\x36\x2c\x30\x2e\x32\x34\x36\x32\x20\
+\x2d\x30\x2e\x34\x32\x32\x33\x2c\x30\x2e\x36\x33\x39\x32\x20\x2d\
+\x30\x2e\x33\x32\x38\x36\x2c\x31\x2e\x30\x31\x31\x34\x6c\x31\x2e\
+\x39\x34\x38\x34\x2c\x37\x2e\x37\x34\x35\x63\x30\x2e\x32\x31\x39\
+\x39\x2c\x30\x2e\x38\x37\x34\x32\x20\x2d\x30\x2e\x37\x33\x38\x31\
+\x2c\x31\x2e\x35\x37\x30\x32\x20\x2d\x31\x2e\x35\x30\x31\x35\x2c\
+\x31\x2e\x30\x39\x30\x39\x6c\x2d\x36\x2e\x37\x36\x33\x38\x2c\x2d\
+\x34\x2e\x32\x34\x36\x34\x63\x2d\x30\x2e\x33\x32\x35\x31\x2c\x2d\
+\x30\x2e\x32\x30\x34\x31\x20\x2d\x30\x2e\x37\x33\x38\x33\x2c\x2d\
+\x30\x2e\x32\x30\x34\x31\x20\x2d\x31\x2e\x30\x36\x33\x34\x2c\x30\
+\x6c\x2d\x36\x2e\x37\x36\x33\x38\x2c\x34\x2e\x32\x34\x36\x34\x63\
+\x2d\x30\x2e\x37\x36\x33\x35\x2c\x30\x2e\x34\x37\x39\x33\x20\x2d\
+\x31\x2e\x37\x32\x31\x34\x2c\x2d\x30\x2e\x32\x31\x36\x37\x20\x2d\
+\x31\x2e\x35\x30\x31\x35\x2c\x2d\x31\x2e\x30\x39\x30\x39\x6c\x31\
+\x2e\x39\x34\x38\x34\x2c\x2d\x37\x2e\x37\x34\x35\x63\x30\x2e\x30\
+\x39\x33\x36\x2c\x2d\x30\x2e\x33\x37\x32\x32\x20\x2d\x30\x2e\x30\
+\x33\x34\x31\x2c\x2d\x30\x2e\x37\x36\x35\x32\x20\x2d\x30\x2e\x33\
+\x32\x38\x36\x2c\x2d\x31\x2e\x30\x31\x31\x34\x6c\x2d\x36\x2e\x31\
+\x32\x38\x37\x2c\x2d\x35\x2e\x31\x32\x30\x35\x63\x2d\x30\x2e\x36\
+\x39\x31\x38\x2c\x2d\x30\x2e\x35\x37\x38\x20\x2d\x30\x2e\x33\x32\
+\x35\x38\x2c\x2d\x31\x2e\x37\x30\x34\x32\x20\x30\x2e\x35\x37\x33\
+\x35\x2c\x2d\x31\x2e\x37\x36\x35\x31\x6c\x37\x2e\x39\x36\x38\x2c\
+\x2d\x30\x2e\x35\x34\x30\x33\x63\x30\x2e\x33\x38\x33\x2c\x2d\x30\
+\x2e\x30\x32\x36\x20\x30\x2e\x37\x31\x37\x33\x2c\x2d\x30\x2e\x32\
+\x36\x38\x39\x20\x30\x2e\x38\x36\x30\x33\x2c\x2d\x30\x2e\x36\x32\
+\x35\x31\x6c\x32\x2e\x39\x37\x36\x31\x2c\x2d\x37\x2e\x34\x31\x31\
+\x31\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\x32\x43\x39\x34\
+\x43\x22\x20\x69\x64\x3d\x22\x73\x76\x67\x5f\x32\x22\x2f\x3e\x0d\
+\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\x66\x69\x6c\x6c\x3d\x22\x23\
+\x66\x66\x30\x30\x30\x30\x22\x20\x64\x3d\x22\x6d\x35\x2c\x33\x39\
+\x2e\x39\x39\x39\x39\x34\x6c\x30\x2c\x30\x63\x30\x2c\x2d\x31\x38\
+\x2e\x31\x36\x32\x36\x38\x20\x31\x35\x2e\x36\x37\x30\x30\x35\x2c\
+\x2d\x33\x32\x2e\x38\x38\x36\x35\x34\x20\x33\x34\x2e\x39\x39\x39\
+\x39\x37\x2c\x2d\x33\x32\x2e\x38\x38\x36\x35\x34\x6c\x30\x2c\x30\
+\x63\x39\x2e\x32\x38\x32\x37\x2c\x30\x20\x31\x38\x2e\x31\x38\x35\
+\x31\x37\x2c\x33\x2e\x34\x36\x34\x38\x33\x20\x32\x34\x2e\x37\x34\
+\x38\x37\x34\x2c\x39\x2e\x36\x33\x32\x32\x38\x63\x36\x2e\x35\x36\
+\x33\x38\x33\x2c\x36\x2e\x31\x36\x37\x34\x35\x20\x31\x30\x2e\x32\
+\x35\x31\x32\x39\x2c\x31\x34\x2e\x35\x33\x32\x33\x32\x20\x31\x30\
+\x2e\x32\x35\x31\x32\x39\x2c\x32\x33\x2e\x32\x35\x34\x32\x36\x6c\
+\x30\x2c\x30\x63\x30\x2c\x31\x38\x2e\x31\x36\x32\x39\x20\x2d\x31\
+\x35\x2e\x36\x36\x39\x39\x34\x2c\x33\x32\x2e\x38\x38\x36\x36\x36\
+\x20\x2d\x33\x35\x2e\x30\x30\x30\x30\x33\x2c\x33\x32\x2e\x38\x38\
+\x36\x36\x36\x6c\x30\x2c\x30\x63\x2d\x31\x39\x2e\x33\x32\x39\x39\
+\x32\x2c\x30\x20\x2d\x33\x34\x2e\x39\x39\x39\x39\x37\x2c\x2d\x31\
+\x34\x2e\x37\x32\x33\x37\x36\x20\x2d\x33\x34\x2e\x39\x39\x39\x39\
+\x37\x2c\x2d\x33\x32\x2e\x38\x38\x36\x36\x36\x6c\x30\x2c\x30\x7a\
+\x6d\x35\x36\x2e\x35\x31\x37\x30\x33\x2c\x31\x34\x2e\x37\x31\x31\
+\x38\x6c\x30\x2c\x30\x63\x37\x2e\x37\x30\x35\x38\x34\x2c\x2d\x39\
+\x2e\x39\x35\x30\x37\x31\x20\x36\x2e\x35\x36\x30\x33\x39\x2c\x2d\
+\x32\x33\x2e\x36\x39\x30\x33\x36\x20\x2d\x32\x2e\x37\x30\x30\x35\
+\x37\x2c\x2d\x33\x32\x2e\x33\x39\x32\x63\x2d\x39\x2e\x32\x36\x30\
+\x39\x36\x2c\x2d\x38\x2e\x37\x30\x31\x37\x31\x20\x2d\x32\x33\x2e\
+\x38\x38\x33\x35\x35\x2c\x2d\x39\x2e\x37\x37\x38\x20\x2d\x33\x34\
+\x2e\x34\x37\x33\x34\x35\x2c\x2d\x32\x2e\x35\x33\x37\x33\x38\x6c\
+\x33\x37\x2e\x31\x37\x34\x30\x32\x2c\x33\x34\x2e\x39\x32\x39\x33\
+\x38\x7a\x6d\x2d\x34\x33\x2e\x30\x33\x33\x39\x33\x2c\x2d\x32\x39\
+\x2e\x34\x32\x33\x33\x63\x2d\x37\x2e\x37\x30\x35\x39\x2c\x39\x2e\
+\x39\x35\x30\x36\x36\x20\x2d\x36\x2e\x35\x36\x30\x34\x37\x2c\x32\
+\x33\x2e\x36\x39\x30\x33\x20\x32\x2e\x37\x30\x30\x34\x34\x2c\x33\
+\x32\x2e\x33\x39\x31\x38\x32\x63\x39\x2e\x32\x36\x30\x38\x38\x2c\
+\x38\x2e\x37\x30\x31\x37\x36\x20\x32\x33\x2e\x38\x38\x33\x34\x37\
+\x2c\x39\x2e\x37\x37\x38\x30\x35\x20\x33\x34\x2e\x34\x37\x33\x33\
+\x37\x2c\x32\x2e\x35\x33\x37\x35\x6c\x2d\x33\x37\x2e\x31\x37\x33\
+\x38\x31\x2c\x2d\x33\x34\x2e\x39\x32\x39\x33\x32\x6c\x30\x2c\x30\
+\x7a\x22\x20\x69\x64\x3d\x22\x73\x76\x67\x5f\x34\x22\x2f\x3e\x0d\
+\x0a\x20\x3c\x2f\x67\x3e\x0d\x0a\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\
+\
+\x00\x00\x02\x54\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\
+\x2d\x38\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\
+\x6e\x6f\x22\x3f\x3e\x0a\x3c\x73\x76\x67\x0a\x20\x20\x20\x78\x6d\
+\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\
+\x0a\x20\x20\x20\x69\x64\x3d\x22\x73\x76\x67\x38\x22\x0a\x20\x20\
+\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x0a\x20\
+\x20\x20\x63\x6c\x61\x73\x73\x3d\x22\x66\x65\x61\x74\x68\x65\x72\
+\x20\x66\x65\x61\x74\x68\x65\x72\x2d\x61\x6c\x65\x72\x74\x2d\x6f\
+\x63\x74\x61\x67\x6f\x6e\x22\x0a\x20\x20\x20\x73\x74\x72\x6f\x6b\
+\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x22\x72\x6f\x75\x6e\
+\x64\x22\x0a\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\
+\x65\x63\x61\x70\x3d\x22\x72\x6f\x75\x6e\x64\x22\x0a\x20\x20\x20\
+\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x32\x22\
+\x0a\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x63\x75\x72\x72\
+\x65\x6e\x74\x43\x6f\x6c\x6f\x72\x22\x0a\x20\x20\x20\x66\x69\x6c\
+\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\x76\x69\x65\x77\
+\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x32\x34\x20\x32\x34\x22\x0a\
+\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x32\x34\x22\x0a\x20\
+\x20\x20\x77\x69\x64\x74\x68\x3d\x22\x32\x34\x22\x3e\x0a\x20\x20\
+\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x0a\x20\x20\x20\x20\x20\x73\x74\
+\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x65\x38\x37\x37\x32\
+\x32\x22\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x6f\x6c\x79\
+\x67\x6f\x6e\x32\x22\x0a\x20\x20\x20\x20\x20\x70\x6f\x69\x6e\x74\
+\x73\x3d\x22\x37\x2e\x38\x36\x20\x32\x20\x31\x36\x2e\x31\x34\x20\
+\x32\x20\x32\x32\x20\x37\x2e\x38\x36\x20\x32\x32\x20\x31\x36\x2e\
+\x31\x34\x20\x31\x36\x2e\x31\x34\x20\x32\x32\x20\x37\x2e\x38\x36\
+\x20\x32\x32\x20\x32\x20\x31\x36\x2e\x31\x34\x20\x32\x20\x37\x2e\
+\x38\x36\x20\x37\x2e\x38\x36\x20\x32\x22\x20\x2f\x3e\x0a\x20\x20\
+\x3c\x6c\x69\x6e\x65\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x34\x22\
+\x20\x79\x32\x3d\x22\x31\x32\x22\x20\x78\x32\x3d\x22\x31\x32\x22\
+\x20\x79\x31\x3d\x22\x38\x22\x20\x78\x31\x3d\x22\x31\x32\x22\x20\
+\x2f\x3e\x0a\x20\x20\x3c\x6c\x69\x6e\x65\x20\x69\x64\x3d\x22\x6c\
+\x69\x6e\x65\x36\x22\x20\x79\x32\x3d\x22\x31\x36\x22\x20\x78\x32\
+\x3d\x22\x31\x32\x2e\x30\x31\x22\x20\x79\x31\x3d\x22\x31\x36\x22\
+\x20\x78\x31\x3d\x22\x31\x32\x22\x20\x2f\x3e\x0a\x3c\x2f\x73\x76\
+\x67\x3e\x0a\
\x00\x00\x01\x6c\
\x3c\
\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
@@ -240,127 +281,127 @@
\x3d\x22\x38\x20\x36\x20\x32\x20\x31\x32\x20\x38\x20\x31\x38\x22\
\x3e\x3c\x2f\x70\x6f\x6c\x79\x6c\x69\x6e\x65\x3e\x3c\x2f\x73\x76\
\x67\x3e\
-\x00\x00\x03\xa8\
+\x00\x00\x03\xae\
\x00\
-\x00\x0c\x99\x78\x9c\xdd\x56\x4b\x6f\xe3\x36\x10\xbe\xe7\x57\x08\
-\xca\xa5\x45\x23\x8a\xd4\xcb\xa2\x62\x79\x81\x36\x58\xb4\x87\x5e\
-\xba\xbb\xe8\x99\x21\x69\x5b\x1b\x89\x34\x28\x3a\xb6\xf7\xd7\xef\
-\x50\x0f\x5b\x76\x9c\xf4\x71\x28\xd0\x08\x36\xec\x79\x71\x66\xbe\
-\xf9\x38\xf6\xfc\xc3\xbe\xa9\xbd\x67\x69\xda\x4a\xab\xd2\x27\x08\
-\xfb\x9e\x54\x5c\x8b\x4a\xad\x4a\xff\xcb\xe7\x8f\x41\xee\x7b\xad\
-\x65\x4a\xb0\x5a\x2b\x59\xfa\x4a\xfb\x1f\x16\x37\xf3\xf6\x79\x75\
-\xe3\x79\x1e\x04\xab\xb6\x10\xbc\xf4\xd7\xd6\x6e\x8a\x30\xdc\x6c\
-\x4d\x8d\xb4\x59\x85\x82\x87\xb2\x96\x8d\x54\xb6\x0d\x09\x22\xa1\
-\x7f\x72\xe7\x27\x77\x6e\x24\xb3\xd5\xb3\xe4\xba\x69\xb4\x6a\xbb\
-\x48\xd5\xde\x4e\x9c\x8d\x58\x1e\xbd\x77\xbb\x1d\xda\xc5\x9d\x13\
-\xa1\x94\x86\x38\x0a\xa3\x28\x00\x8f\xa0\x3d\x28\xcb\xf6\xc1\x79\
-\x28\xd4\x78\x2d\x34\xc2\x18\x87\x60\x3b\x79\xfe\x3d\xaf\xa2\x05\
-\x54\x36\xf0\x3e\xba\x8f\x0a\xd4\xea\xad\xe1\x72\x09\x71\x12\x29\
-\x69\xc3\x87\xcf\x0f\x47\x63\x80\x91\xb0\x62\x72\x4c\xa5\x9e\x5a\
-\xce\x36\xf2\x2c\xeb\xa8\xec\x11\x60\x8d\x6c\x37\x8c\xcb\x36\x1c\
-\xf5\x5d\xfc\x28\x14\xd3\x79\x19\x4e\xbc\x1f\x30\xa5\x19\x16\xd9\
-\x12\xa7\x77\x5e\x84\x23\x1c\xe0\x24\xc0\xf4\xc7\x2e\x6a\x2c\xa4\
-\x10\x9a\xbb\x93\x4b\x5f\xee\x37\x30\x50\x34\x76\x57\x89\xd2\x87\
-\xef\x59\x27\x4c\x8e\x26\x9d\x82\xd7\xac\x05\x84\x96\x30\xa8\xb5\
-\x34\xde\xf0\x19\x00\x45\xfa\xa2\x5a\x6b\xf4\x93\x0c\xea\x4a\xc9\
-\xaf\xba\x82\x40\xa3\xb7\x4a\x5c\x9a\xa0\xec\x2b\x96\x5d\x25\xec\
-\xba\xf4\xa3\x89\xae\xf4\xf9\xd6\x18\xa0\xcd\x2f\xba\xd6\xa6\x33\
-\x2c\xab\xba\x76\xc4\x53\x7d\xc2\xe7\x4a\xee\x7e\xd6\xfb\xd2\xc7\
-\x1e\xf6\xa2\x04\x5e\x9d\x7a\x2d\xab\xd5\xda\xc2\x61\xbd\x38\x1e\
-\x9d\xf8\x0b\x10\xe7\x8d\xb4\x4c\x30\xcb\x9c\xa9\xef\x78\xd4\x90\
-\xa8\xf3\x00\x1f\x20\x52\xf1\xc7\xc3\xc7\x5e\x02\x99\xf3\xe2\x4f\
-\x6d\x9e\x06\x11\x1e\xe7\xc0\x1e\xf5\x16\xb2\xf8\x8b\xa3\x7a\x2e\
-\x78\x01\xa3\x6f\x98\x5d\x54\x0d\x5b\x49\xc7\x9a\x9f\x60\xd4\xf3\
-\xf0\x64\x38\x73\xb6\x87\x8d\x3c\x1d\xda\x1f\x6b\x64\xcf\xa1\xab\
-\x17\x49\xf0\xa6\x72\x41\xe1\x27\x0b\x50\xfc\xe6\x92\xf8\x5e\x78\
-\x71\x68\x65\x6b\xb9\xe8\x72\xf6\x5f\xc7\x2e\xc2\xa1\x8d\xa1\xc9\
-\x70\xd2\xe5\x3c\x1c\x41\xe8\x24\x21\x97\xed\x09\x1f\x27\x11\x3c\
-\xe4\x99\x1f\x49\xe4\x18\x24\xdc\x08\x06\xcf\x91\x92\xc3\xd4\x82\
-\x9a\x1d\xa4\x99\xf0\x69\xe2\xb2\xab\x94\xd0\xbb\xa0\x61\xfb\xaa\
-\xa9\xbe\x49\xc8\x81\x5f\x71\x39\x00\xfd\xf2\xf4\x15\x23\x4c\x9e\
-\xc4\xf9\xec\xd2\xca\x5d\x50\x84\x32\x1c\xc7\xf1\x8b\xd4\x7c\xdf\
-\x19\x93\x59\x7c\x25\xf2\x9b\xd6\x0d\x30\x85\xa2\x8c\xe6\xc9\x31\
-\x6d\xbb\xd6\xbb\x95\x71\x48\x2c\x59\xdd\x4a\xff\x84\xcc\x11\x82\
-\xfc\x95\x0a\x47\x2a\x12\x12\xbd\xe6\x32\xd0\x93\xd0\x59\x72\xe9\
-\xb1\x81\xf1\xb6\x6b\x06\x5e\xe3\xcd\xb8\x30\x6a\x58\x0d\xc0\x87\
-\x13\x7c\xab\x6d\x25\xa4\xd5\xb5\x34\x4c\x39\x0a\x91\xa3\x01\xea\
-\xbf\xa6\xd7\x8f\x5f\x25\xb7\xd7\x2c\x8f\xda\x08\x69\x8e\x19\xc8\
-\x99\x9a\xbb\x2b\x59\xfa\xb7\x59\xf7\x0c\x26\x57\xd1\x68\x58\x76\
-\xcf\xc8\x99\x0d\x6c\x8a\x01\x4b\x7b\xa8\x21\x8b\xbb\xc8\x85\xbb\
-\xc7\xf7\xfd\x5d\x2f\x6e\x71\xf7\xdc\x4f\xd7\x41\x11\xdd\x9f\xef\
-\x8d\xa2\x5b\x1b\xf7\x17\x7b\xa6\x80\x2b\x21\xcd\xa8\xed\x84\x1a\
-\x68\x65\x8b\x64\xd4\x09\x06\x28\x1a\xc3\x0e\xd3\x94\xc1\xd0\x5a\
-\x31\x76\x06\xf3\xfc\xdd\x4b\x50\x84\x73\x9a\xe5\xf4\x2e\x42\x69\
-\x4a\x71\x1a\x13\xef\x57\x2f\x22\x28\x4d\x28\x8d\xc8\x64\xf6\xae\
-\xa7\x3c\x7d\x49\x3e\xad\xa0\x56\xab\x61\x2f\x6e\xcd\x33\xb3\x5b\
-\x23\xdd\x78\xfe\xcf\x40\x10\x44\x31\xc5\x79\xf6\x26\x10\xf4\xfd\
-\x03\x41\x30\x8a\x28\xc5\xd9\xec\x2d\x20\x72\xf2\x5e\x81\x98\xa1\
-\x2c\x89\x93\x7c\x96\xdd\x65\x28\x89\x00\x87\x37\x61\x78\xb1\xb3\
-\xdf\x1f\x0c\x24\x41\x24\xa3\x78\x16\xbf\x09\xc4\xbf\xde\x10\x7f\
-\x15\x70\x79\x03\xd3\x53\x95\x8d\x07\x3f\x71\x18\xb8\x98\x02\x6b\
-\x73\x84\x63\xa8\x92\x7a\x6b\x8f\xa2\x24\x23\xb3\x6c\xfc\x2d\xf9\
-\x47\x50\xc3\x16\x48\xd3\x28\xff\x8f\x00\x77\x68\xcc\xdd\xff\xa7\
-\xc5\xcd\x77\xd2\xf3\xe7\xb2\
-\x00\x00\x03\x9b\
+\x00\x0c\xf0\x78\x9c\xe5\x56\x4d\x8f\xdb\x36\x10\xbd\x07\xc8\x7f\
+\x10\xb4\x97\x16\x5d\x51\xa4\xbe\x2c\x6a\x2d\x07\x68\x17\x41\x7b\
+\xe8\xa5\x4d\xd1\x33\x97\xa4\x6d\x65\x25\xd1\xa0\xe8\xaf\xfc\xfa\
+\x0e\x25\x53\xd6\xae\xbd\xdb\x16\x01\x02\x24\x11\x6c\xd8\x33\xf3\
+\x86\xc3\x79\x7c\x1c\x7b\xfe\xee\xd0\xd4\xde\x4e\xea\xae\x52\x6d\
+\xe9\x13\x84\x7d\x4f\xb6\x5c\x89\xaa\x5d\x95\xfe\x5f\x1f\xde\x07\
+\xb9\xef\x75\x86\xb5\x82\xd5\xaa\x95\xa5\xdf\x2a\xff\xdd\xe2\xed\
+\x9b\x79\xb7\x5b\xbd\x7d\xe3\x79\x1e\xa4\xb7\x5d\x21\x78\xe9\xaf\
+\x8d\xd9\x14\x61\xb8\xd9\xea\x1a\x29\xbd\x0a\x05\x0f\x65\x2d\x1b\
+\xd9\x9a\x2e\x24\x88\x84\xfe\x04\xcf\xcf\x78\xae\x25\x33\xd5\x4e\
+\x72\xd5\x34\xaa\xed\xfa\xd4\xb6\xbb\x99\xa2\xb5\x58\x8e\xf0\xfd\
+\x7e\x8f\xf6\x71\x8f\x22\x94\xd2\x10\x47\x61\x14\x05\x80\x08\xba\
+\x63\x6b\xd8\x21\x78\x96\x0b\xfb\xbc\x96\x1b\x61\x8c\x43\x88\x4d\
+\xa0\xff\x11\x56\x74\x40\xce\x06\xde\x23\xde\x39\x50\xa7\xb6\x9a\
+\xcb\x25\x24\x4a\xd4\x4a\x13\xde\x7f\xb8\x1f\x83\x01\x46\xc2\x88\
+\xe9\x3a\x55\xfb\xd8\x71\xb6\x91\x4f\xea\x3a\xe7\x40\x03\x6b\x64\
+\xb7\x61\x5c\x76\xa1\xf3\x0f\x0b\x38\xab\x98\x1e\x9c\xe6\xc4\xfb\
+\x01\x53\x9a\x61\x91\x2d\x71\x7a\xeb\x45\x38\xc2\x01\x4e\x02\x4c\
+\x7f\x1c\xd2\xdc\x5e\x0a\xa1\xb8\x5d\xbb\xf4\xe5\x61\x03\x47\x8b\
+\xc6\x0e\x2b\x51\xfa\x60\x64\x83\x35\x59\x9d\x0c\x1e\x5e\xb3\x0e\
+\x88\x5a\xc2\x91\xad\xa5\xf6\x4e\x9f\x01\xe8\xe5\xb4\xb3\xce\x68\
+\xf5\x28\x83\xba\x6a\xe5\x47\x55\x41\xaa\x56\xdb\x56\x5c\xc4\x60\
+\xf3\xd7\x42\xfb\x4a\x98\x75\xe9\x47\x53\x67\xe9\xf3\xad\xd6\xa0\
+\xa2\x5f\x54\xad\xf4\x10\x59\x56\x75\x6d\xa5\xd8\x9e\xaa\xee\x2a\
+\xb9\xff\x59\x1d\x4a\x1f\x7b\xd8\x8b\x12\x78\x0d\xfe\xb5\xac\x56\
+\x6b\x03\x0b\x9e\x6c\xb7\x7e\xe2\x2f\xac\x3d\x6f\xa4\x61\x82\x19\
+\xd6\x07\x87\xee\x9d\x8b\x44\x03\x06\x50\x20\xae\xe2\x8f\xfb\xf7\
+\x27\x13\x1c\x9c\x17\x7f\x2b\xfd\xe8\x6c\x78\x2c\x84\x3d\xa8\x2d\
+\xd4\xf2\x17\x67\xff\x5c\xf0\x02\xe4\xd0\x30\xb3\xa8\x1a\xb6\x92\
+\x56\x4a\x3f\xc1\xe9\xcf\xc3\x73\xe0\x29\xda\x1c\x37\x72\xb2\xee\
+\xb0\xb2\x96\x83\xb2\xae\xde\x31\xc1\x9b\xca\x66\x85\x7f\x1a\x60\
+\xe5\x37\x5b\xc6\xf7\xc2\xe7\xcb\x56\xa6\x96\x8b\xbe\xec\xf0\x75\
+\xec\x25\x3c\x35\xe3\x9a\x0d\xa7\xdd\xce\x43\x47\xc7\x60\x0a\xb9\
+\xec\x26\x5c\x59\x93\x60\x57\x6d\x3e\xca\xcb\x6a\x4b\xd8\x33\x71\
+\x58\x27\xd7\xd3\x49\x06\x35\x3b\x4a\x3d\x55\xda\x04\xb3\xaf\x5a\
+\xa1\xf6\x41\xc3\x0e\x55\x53\x7d\x92\x50\x06\xbf\x84\x39\x82\x32\
+\xf3\xf4\xa5\x28\xc8\x81\xc4\xf9\xec\x22\xcc\x6d\x5a\x84\x32\x1c\
+\xc7\xf1\x65\x79\x7e\xe8\xa3\xc9\x2c\xbe\x96\xfb\x49\xa9\x06\xf4\
+\x43\x51\x46\xf3\xe4\x5c\xba\x5b\xab\xfd\x4a\x5b\x4a\x96\xac\xee\
+\xa4\x3f\xe1\x68\xe4\x22\x7f\x69\x9f\x4e\xa4\x84\x44\x2f\x62\x4e\
+\xc2\x25\x74\x96\x5c\x40\x36\x70\xe2\xdd\x9a\x01\x6c\xbc\x39\xcf\
+\xa2\x0a\x66\x08\x68\x64\xc2\xe4\x6a\x5b\x09\x69\x54\x2d\x35\x6b\
+\xad\xae\xc8\x39\x02\x6d\x5c\x0d\xa8\x87\x8f\x92\x9b\xab\xa1\x07\
+\xa5\x85\xd4\x63\x15\xf2\xd4\xcf\xed\xbd\x2d\xfd\x9b\xac\x7f\x5c\
+\xcc\xee\xcb\x45\x96\xfd\x33\xea\x68\x03\x43\xc5\x11\x6b\x8e\x35\
+\x94\xb2\xf7\xbd\xb0\xd7\xfd\x6e\x98\x09\xc5\x0d\xee\x9f\xbb\xe9\
+\xdc\x28\xa2\xbb\xa7\x13\xa6\xe8\x07\xcc\xdd\xb3\x91\x54\xc0\x75\
+\x91\xda\x79\x7b\xa3\x06\xa5\x99\x22\x71\x3e\xc1\x80\x4e\xad\xd9\
+\x71\x5a\x32\x38\xb5\x57\x8c\xdd\xc1\xe1\xfe\xee\x25\x28\xc2\x39\
+\xcd\x72\x7a\x1b\xa1\x34\xa5\x38\x8d\x89\xf7\xab\x17\x11\x94\x26\
+\x94\x46\x64\xaa\x04\xdb\x56\x9e\x5e\xd1\xa3\x6a\x61\xbb\x46\xc1\
+\x18\xdd\xea\x1d\x33\x5b\x2d\xed\x49\x7d\xe5\x6c\x10\x44\x31\xc5\
+\x79\xf6\x3a\x1b\xf4\xfb\x60\x83\x60\x14\x51\x8a\xb3\xd9\xab\x6c\
+\xe4\xe4\x5b\x66\x63\x86\xb2\x24\x4e\xf2\x59\x76\x9b\xa1\x24\x02\
+\x32\x5e\xe7\xe2\x72\xac\x7f\x93\x5c\x90\x04\x91\x8c\xe2\x59\xfc\
+\x3a\x1b\x9f\x33\x35\xfe\x2d\xe5\xe2\x52\xa6\x93\xbd\x36\x1e\xfc\
+\x18\x62\x90\x66\x0a\x2a\xce\x11\x8e\x61\xaf\xd4\x5b\x7b\x14\x25\
+\x19\x99\x65\xe3\xef\xcd\xff\xa2\x1c\x66\x43\x9a\x46\xf9\x17\x22\
+\xbe\xa7\x64\x6e\xff\x7a\xc1\xe7\x3f\xa8\xb2\xec\x1d\
+\x00\x00\x03\x9d\
\x3c\
\x73\x76\x67\x20\x77\x69\x64\x74\x68\x3d\x22\x38\x30\x22\x20\x68\
\x65\x69\x67\x68\x74\x3d\x22\x38\x30\x22\x20\x76\x69\x65\x77\x42\
\x6f\x78\x3d\x22\x30\x20\x30\x20\x38\x30\x20\x38\x30\x22\x20\x66\
\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x78\x6d\x6c\x6e\x73\
\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
-\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x3e\x0a\x20\
-\x20\x3c\x70\x61\x74\x68\x20\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\
-\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\x20\x63\x6c\x69\x70\x2d\
-\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\x20\x64\
-\x3d\x22\x4d\x33\x33\x2e\x39\x32\x35\x36\x20\x39\x2e\x38\x38\x36\
-\x34\x37\x43\x33\x33\x2e\x31\x36\x34\x38\x20\x39\x2e\x38\x38\x36\
-\x34\x37\x20\x33\x32\x2e\x34\x34\x35\x34\x20\x31\x30\x2e\x32\x33\
-\x32\x39\x20\x33\x31\x2e\x39\x37\x31\x31\x20\x31\x30\x2e\x38\x32\
-\x37\x37\x4c\x32\x36\x2e\x36\x35\x30\x31\x20\x31\x37\x2e\x35\x48\
-\x31\x35\x43\x31\x33\x2e\x36\x31\x39\x33\x20\x31\x37\x2e\x35\x20\
-\x31\x32\x2e\x35\x20\x31\x38\x2e\x36\x31\x39\x33\x20\x31\x32\x2e\
-\x35\x20\x32\x30\x43\x31\x32\x2e\x35\x20\x32\x31\x2e\x33\x38\x30\
-\x37\x20\x31\x33\x2e\x36\x31\x39\x33\x20\x32\x32\x2e\x35\x20\x31\
-\x35\x20\x32\x32\x2e\x35\x48\x31\x36\x2e\x35\x56\x36\x34\x43\x31\
-\x36\x2e\x35\x20\x36\x37\x2e\x35\x38\x39\x39\x20\x31\x39\x2e\x34\
-\x31\x30\x31\x20\x37\x30\x2e\x35\x20\x32\x33\x20\x37\x30\x2e\x35\
-\x48\x35\x37\x43\x36\x30\x2e\x35\x38\x39\x38\x20\x37\x30\x2e\x35\
-\x20\x36\x33\x2e\x35\x20\x36\x37\x2e\x35\x38\x39\x39\x20\x36\x33\
-\x2e\x35\x20\x36\x34\x56\x32\x32\x2e\x35\x48\x36\x35\x43\x36\x36\
-\x2e\x33\x38\x30\x37\x20\x32\x32\x2e\x35\x20\x36\x37\x2e\x35\x20\
-\x32\x31\x2e\x33\x38\x30\x37\x20\x36\x37\x2e\x35\x20\x32\x30\x43\
-\x36\x37\x2e\x35\x20\x31\x38\x2e\x36\x31\x39\x33\x20\x36\x36\x2e\
-\x33\x38\x30\x37\x20\x31\x37\x2e\x35\x20\x36\x35\x20\x31\x37\x2e\
-\x35\x48\x35\x33\x2e\x33\x34\x39\x39\x4c\x34\x38\x2e\x30\x32\x39\
-\x20\x31\x30\x2e\x38\x32\x37\x38\x43\x34\x37\x2e\x35\x35\x34\x36\
-\x20\x31\x30\x2e\x32\x33\x32\x39\x20\x34\x36\x2e\x38\x33\x35\x32\
-\x20\x39\x2e\x38\x38\x36\x34\x37\x20\x34\x36\x2e\x30\x37\x34\x34\
-\x20\x39\x2e\x38\x38\x36\x34\x37\x48\x33\x33\x2e\x39\x32\x35\x36\
-\x5a\x4d\x33\x33\x20\x32\x37\x2e\x35\x43\x33\x34\x2e\x33\x38\x30\
-\x37\x20\x32\x37\x2e\x35\x20\x33\x35\x2e\x35\x20\x32\x38\x2e\x36\
-\x31\x39\x33\x20\x33\x35\x2e\x35\x20\x33\x30\x56\x35\x38\x43\x33\
-\x35\x2e\x35\x20\x35\x39\x2e\x33\x38\x30\x37\x20\x33\x34\x2e\x33\
-\x38\x30\x37\x20\x36\x30\x2e\x35\x20\x33\x33\x20\x36\x30\x2e\x35\
-\x43\x33\x31\x2e\x36\x31\x39\x33\x20\x36\x30\x2e\x35\x20\x33\x30\
-\x2e\x35\x20\x35\x39\x2e\x33\x38\x30\x37\x20\x33\x30\x2e\x35\x20\
-\x35\x38\x56\x33\x30\x43\x33\x30\x2e\x35\x20\x32\x38\x2e\x36\x31\
-\x39\x33\x20\x33\x31\x2e\x36\x31\x39\x33\x20\x32\x37\x2e\x35\x20\
-\x33\x33\x20\x32\x37\x2e\x35\x5a\x4d\x34\x39\x2e\x35\x20\x33\x30\
-\x43\x34\x39\x2e\x35\x20\x32\x38\x2e\x36\x31\x39\x33\x20\x34\x38\
-\x2e\x33\x38\x30\x37\x20\x32\x37\x2e\x35\x20\x34\x37\x20\x32\x37\
-\x2e\x35\x43\x34\x35\x2e\x36\x31\x39\x33\x20\x32\x37\x2e\x35\x20\
-\x34\x34\x2e\x35\x20\x32\x38\x2e\x36\x31\x39\x33\x20\x34\x34\x2e\
-\x35\x20\x33\x30\x56\x35\x38\x43\x34\x34\x2e\x35\x20\x35\x39\x2e\
-\x33\x38\x30\x37\x20\x34\x35\x2e\x36\x31\x39\x33\x20\x36\x30\x2e\
-\x35\x20\x34\x37\x20\x36\x30\x2e\x35\x43\x34\x38\x2e\x33\x38\x30\
-\x37\x20\x36\x30\x2e\x35\x20\x34\x39\x2e\x35\x20\x35\x39\x2e\x33\
-\x38\x30\x37\x20\x34\x39\x2e\x35\x20\x35\x38\x56\x33\x30\x5a\x4d\
-\x34\x36\x2e\x39\x35\x33\x36\x20\x31\x37\x2e\x34\x39\x38\x36\x4c\
-\x34\x34\x2e\x38\x37\x30\x34\x20\x31\x34\x2e\x38\x38\x36\x35\x48\
-\x33\x35\x2e\x31\x32\x39\x36\x4c\x33\x33\x2e\x30\x34\x36\x34\x20\
-\x31\x37\x2e\x34\x39\x38\x36\x48\x34\x36\x2e\x39\x35\x33\x36\x5a\
-\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x43\x32\x43\x43\x44\x45\x22\
-\x20\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
+\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x3e\x0d\x0a\
+\x20\x20\x3c\x70\x61\x74\x68\x20\x66\x69\x6c\x6c\x2d\x72\x75\x6c\
+\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\x20\x63\x6c\x69\x70\
+\x2d\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\x20\
+\x64\x3d\x22\x4d\x33\x33\x2e\x39\x32\x35\x36\x20\x39\x2e\x38\x38\
+\x36\x34\x37\x43\x33\x33\x2e\x31\x36\x34\x38\x20\x39\x2e\x38\x38\
+\x36\x34\x37\x20\x33\x32\x2e\x34\x34\x35\x34\x20\x31\x30\x2e\x32\
+\x33\x32\x39\x20\x33\x31\x2e\x39\x37\x31\x31\x20\x31\x30\x2e\x38\
+\x32\x37\x37\x4c\x32\x36\x2e\x36\x35\x30\x31\x20\x31\x37\x2e\x35\
+\x48\x31\x35\x43\x31\x33\x2e\x36\x31\x39\x33\x20\x31\x37\x2e\x35\
+\x20\x31\x32\x2e\x35\x20\x31\x38\x2e\x36\x31\x39\x33\x20\x31\x32\
+\x2e\x35\x20\x32\x30\x43\x31\x32\x2e\x35\x20\x32\x31\x2e\x33\x38\
+\x30\x37\x20\x31\x33\x2e\x36\x31\x39\x33\x20\x32\x32\x2e\x35\x20\
+\x31\x35\x20\x32\x32\x2e\x35\x48\x31\x36\x2e\x35\x56\x36\x34\x43\
+\x31\x36\x2e\x35\x20\x36\x37\x2e\x35\x38\x39\x39\x20\x31\x39\x2e\
+\x34\x31\x30\x31\x20\x37\x30\x2e\x35\x20\x32\x33\x20\x37\x30\x2e\
+\x35\x48\x35\x37\x43\x36\x30\x2e\x35\x38\x39\x38\x20\x37\x30\x2e\
+\x35\x20\x36\x33\x2e\x35\x20\x36\x37\x2e\x35\x38\x39\x39\x20\x36\
+\x33\x2e\x35\x20\x36\x34\x56\x32\x32\x2e\x35\x48\x36\x35\x43\x36\
+\x36\x2e\x33\x38\x30\x37\x20\x32\x32\x2e\x35\x20\x36\x37\x2e\x35\
+\x20\x32\x31\x2e\x33\x38\x30\x37\x20\x36\x37\x2e\x35\x20\x32\x30\
+\x43\x36\x37\x2e\x35\x20\x31\x38\x2e\x36\x31\x39\x33\x20\x36\x36\
+\x2e\x33\x38\x30\x37\x20\x31\x37\x2e\x35\x20\x36\x35\x20\x31\x37\
+\x2e\x35\x48\x35\x33\x2e\x33\x34\x39\x39\x4c\x34\x38\x2e\x30\x32\
+\x39\x20\x31\x30\x2e\x38\x32\x37\x38\x43\x34\x37\x2e\x35\x35\x34\
+\x36\x20\x31\x30\x2e\x32\x33\x32\x39\x20\x34\x36\x2e\x38\x33\x35\
+\x32\x20\x39\x2e\x38\x38\x36\x34\x37\x20\x34\x36\x2e\x30\x37\x34\
+\x34\x20\x39\x2e\x38\x38\x36\x34\x37\x48\x33\x33\x2e\x39\x32\x35\
+\x36\x5a\x4d\x33\x33\x20\x32\x37\x2e\x35\x43\x33\x34\x2e\x33\x38\
+\x30\x37\x20\x32\x37\x2e\x35\x20\x33\x35\x2e\x35\x20\x32\x38\x2e\
+\x36\x31\x39\x33\x20\x33\x35\x2e\x35\x20\x33\x30\x56\x35\x38\x43\
+\x33\x35\x2e\x35\x20\x35\x39\x2e\x33\x38\x30\x37\x20\x33\x34\x2e\
+\x33\x38\x30\x37\x20\x36\x30\x2e\x35\x20\x33\x33\x20\x36\x30\x2e\
+\x35\x43\x33\x31\x2e\x36\x31\x39\x33\x20\x36\x30\x2e\x35\x20\x33\
+\x30\x2e\x35\x20\x35\x39\x2e\x33\x38\x30\x37\x20\x33\x30\x2e\x35\
+\x20\x35\x38\x56\x33\x30\x43\x33\x30\x2e\x35\x20\x32\x38\x2e\x36\
+\x31\x39\x33\x20\x33\x31\x2e\x36\x31\x39\x33\x20\x32\x37\x2e\x35\
+\x20\x33\x33\x20\x32\x37\x2e\x35\x5a\x4d\x34\x39\x2e\x35\x20\x33\
+\x30\x43\x34\x39\x2e\x35\x20\x32\x38\x2e\x36\x31\x39\x33\x20\x34\
+\x38\x2e\x33\x38\x30\x37\x20\x32\x37\x2e\x35\x20\x34\x37\x20\x32\
+\x37\x2e\x35\x43\x34\x35\x2e\x36\x31\x39\x33\x20\x32\x37\x2e\x35\
+\x20\x34\x34\x2e\x35\x20\x32\x38\x2e\x36\x31\x39\x33\x20\x34\x34\
+\x2e\x35\x20\x33\x30\x56\x35\x38\x43\x34\x34\x2e\x35\x20\x35\x39\
+\x2e\x33\x38\x30\x37\x20\x34\x35\x2e\x36\x31\x39\x33\x20\x36\x30\
+\x2e\x35\x20\x34\x37\x20\x36\x30\x2e\x35\x43\x34\x38\x2e\x33\x38\
+\x30\x37\x20\x36\x30\x2e\x35\x20\x34\x39\x2e\x35\x20\x35\x39\x2e\
+\x33\x38\x30\x37\x20\x34\x39\x2e\x35\x20\x35\x38\x56\x33\x30\x5a\
+\x4d\x34\x36\x2e\x39\x35\x33\x36\x20\x31\x37\x2e\x34\x39\x38\x36\
+\x4c\x34\x34\x2e\x38\x37\x30\x34\x20\x31\x34\x2e\x38\x38\x36\x35\
+\x48\x33\x35\x2e\x31\x32\x39\x36\x4c\x33\x33\x2e\x30\x34\x36\x34\
+\x20\x31\x37\x2e\x34\x39\x38\x36\x48\x34\x36\x2e\x39\x35\x33\x36\
+\x5a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x43\x32\x43\x43\x44\x45\
+\x22\x20\x2f\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\
\x00\x00\x01\x88\
\x3c\
\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
@@ -413,101 +454,101 @@
\x6e\x65\x20\x78\x31\x3d\x22\x31\x35\x22\x20\x79\x31\x3d\x22\x31\
\x32\x22\x20\x78\x32\x3d\x22\x33\x22\x20\x79\x32\x3d\x22\x31\x32\
\x22\x3e\x3c\x2f\x6c\x69\x6e\x65\x3e\x3c\x2f\x73\x76\x67\x3e\
-\x00\x00\x05\xba\
+\x00\x00\x05\xbd\
\x3c\
\x73\x76\x67\x20\x77\x69\x64\x74\x68\x3d\x22\x38\x30\x22\x20\x68\
\x65\x69\x67\x68\x74\x3d\x22\x38\x30\x22\x20\x76\x69\x65\x77\x42\
\x6f\x78\x3d\x22\x30\x20\x30\x20\x38\x30\x20\x38\x30\x22\x20\x66\
\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x78\x6d\x6c\x6e\x73\
\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
-\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x3e\x0a\x20\
-\x20\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x33\x38\x2e\x31\x34\
-\x34\x31\x20\x31\x32\x2e\x36\x32\x31\x37\x43\x33\x38\x2e\x38\x31\
-\x35\x39\x20\x31\x30\x2e\x39\x34\x38\x38\x20\x34\x31\x2e\x31\x38\
-\x34\x31\x20\x31\x30\x2e\x39\x34\x38\x38\x20\x34\x31\x2e\x38\x35\
-\x35\x39\x20\x31\x32\x2e\x36\x32\x31\x37\x4c\x34\x37\x2e\x38\x30\
-\x38\x31\x20\x32\x37\x2e\x34\x34\x33\x39\x43\x34\x38\x2e\x30\x39\
-\x34\x32\x20\x32\x38\x2e\x31\x35\x36\x33\x20\x34\x38\x2e\x37\x36\
-\x32\x38\x20\x32\x38\x2e\x36\x34\x32\x20\x34\x39\x2e\x35\x32\x38\
-\x38\x20\x32\x38\x2e\x36\x39\x34\x4c\x36\x35\x2e\x34\x36\x34\x38\
-\x20\x32\x39\x2e\x37\x37\x34\x35\x43\x36\x37\x2e\x32\x36\x33\x35\
-\x20\x32\x39\x2e\x38\x39\x36\x35\x20\x36\x37\x2e\x39\x39\x35\x33\
-\x20\x33\x32\x2e\x31\x34\x38\x39\x20\x36\x36\x2e\x36\x31\x31\x38\
-\x20\x33\x33\x2e\x33\x30\x34\x37\x4c\x35\x34\x2e\x33\x35\x34\x34\
-\x20\x34\x33\x2e\x35\x34\x35\x39\x43\x35\x33\x2e\x37\x36\x35\x33\
-\x20\x34\x34\x2e\x30\x33\x38\x31\x20\x35\x33\x2e\x35\x30\x39\x39\
-\x20\x34\x34\x2e\x38\x32\x34\x31\x20\x35\x33\x2e\x36\x39\x37\x32\
-\x20\x34\x35\x2e\x35\x36\x38\x36\x4c\x35\x37\x2e\x35\x39\x34\x31\
-\x20\x36\x31\x2e\x30\x35\x38\x36\x43\x35\x38\x2e\x30\x33\x33\x39\
-\x20\x36\x32\x2e\x38\x30\x36\x39\x20\x35\x36\x2e\x31\x31\x37\x39\
-\x20\x36\x34\x2e\x31\x39\x39\x20\x35\x34\x2e\x35\x39\x31\x31\x20\
-\x36\x33\x2e\x32\x34\x30\x34\x4c\x34\x31\x2e\x30\x36\x33\x34\x20\
-\x35\x34\x2e\x37\x34\x37\x36\x43\x34\x30\x2e\x34\x31\x33\x32\x20\
-\x35\x34\x2e\x33\x33\x39\x34\x20\x33\x39\x2e\x35\x38\x36\x38\x20\
-\x35\x34\x2e\x33\x33\x39\x34\x20\x33\x38\x2e\x39\x33\x36\x36\x20\
-\x35\x34\x2e\x37\x34\x37\x36\x4c\x32\x35\x2e\x34\x30\x38\x39\x20\
-\x36\x33\x2e\x32\x34\x30\x34\x43\x32\x33\x2e\x38\x38\x32\x31\x20\
-\x36\x34\x2e\x31\x39\x39\x20\x32\x31\x2e\x39\x36\x36\x31\x20\x36\
-\x32\x2e\x38\x30\x36\x39\x20\x32\x32\x2e\x34\x30\x35\x39\x20\x36\
-\x31\x2e\x30\x35\x38\x36\x4c\x32\x36\x2e\x33\x30\x32\x38\x20\x34\
-\x35\x2e\x35\x36\x38\x36\x43\x32\x36\x2e\x34\x39\x30\x31\x20\x34\
-\x34\x2e\x38\x32\x34\x31\x20\x32\x36\x2e\x32\x33\x34\x37\x20\x34\
-\x34\x2e\x30\x33\x38\x31\x20\x32\x35\x2e\x36\x34\x35\x36\x20\x34\
-\x33\x2e\x35\x34\x35\x39\x4c\x31\x33\x2e\x33\x38\x38\x32\x20\x33\
-\x33\x2e\x33\x30\x34\x37\x43\x31\x32\x2e\x30\x30\x34\x37\x20\x33\
-\x32\x2e\x31\x34\x38\x39\x20\x31\x32\x2e\x37\x33\x36\x35\x20\x32\
-\x39\x2e\x38\x39\x36\x35\x20\x31\x34\x2e\x35\x33\x35\x32\x20\x32\
-\x39\x2e\x37\x37\x34\x35\x4c\x33\x30\x2e\x34\x37\x31\x32\x20\x32\
-\x38\x2e\x36\x39\x34\x43\x33\x31\x2e\x32\x33\x37\x32\x20\x32\x38\
-\x2e\x36\x34\x32\x20\x33\x31\x2e\x39\x30\x35\x38\x20\x32\x38\x2e\
-\x31\x35\x36\x33\x20\x33\x32\x2e\x31\x39\x31\x39\x20\x32\x37\x2e\
-\x34\x34\x33\x39\x4c\x33\x38\x2e\x31\x34\x34\x31\x20\x31\x32\x2e\
-\x36\x32\x31\x37\x5a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\x32\
-\x39\x39\x34\x41\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\
-\x20\x64\x3d\x22\x4d\x33\x39\x2e\x30\x35\x31\x35\x20\x32\x36\x2e\
-\x33\x31\x30\x38\x43\x33\x39\x2e\x33\x38\x37\x34\x20\x32\x35\x2e\
-\x34\x37\x34\x34\x20\x34\x30\x2e\x35\x37\x31\x36\x20\x32\x35\x2e\
-\x34\x37\x34\x34\x20\x34\x30\x2e\x39\x30\x37\x35\x20\x32\x36\x2e\
-\x33\x31\x30\x38\x4c\x34\x33\x2e\x38\x38\x33\x35\x20\x33\x33\x2e\
-\x37\x32\x31\x39\x43\x34\x34\x2e\x30\x32\x36\x36\x20\x33\x34\x2e\
-\x30\x37\x38\x31\x20\x34\x34\x2e\x33\x36\x30\x39\x20\x33\x34\x2e\
-\x33\x32\x31\x20\x34\x34\x2e\x37\x34\x33\x39\x20\x33\x34\x2e\x33\
-\x34\x37\x4c\x35\x32\x2e\x37\x31\x31\x39\x20\x33\x34\x2e\x38\x38\
-\x37\x33\x43\x35\x33\x2e\x36\x31\x31\x32\x20\x33\x34\x2e\x39\x34\
-\x38\x32\x20\x35\x33\x2e\x39\x37\x37\x31\x20\x33\x36\x2e\x30\x37\
-\x34\x34\x20\x35\x33\x2e\x32\x38\x35\x34\x20\x33\x36\x2e\x36\x35\
-\x32\x34\x4c\x34\x37\x2e\x31\x35\x36\x37\x20\x34\x31\x2e\x37\x37\
-\x32\x39\x43\x34\x36\x2e\x38\x36\x32\x31\x20\x34\x32\x2e\x30\x31\
-\x39\x31\x20\x34\x36\x2e\x37\x33\x34\x34\x20\x34\x32\x2e\x34\x31\
-\x32\x31\x20\x34\x36\x2e\x38\x32\x38\x31\x20\x34\x32\x2e\x37\x38\
-\x34\x33\x4c\x34\x38\x2e\x37\x37\x36\x35\x20\x35\x30\x2e\x35\x32\
-\x39\x33\x43\x34\x38\x2e\x39\x39\x36\x34\x20\x35\x31\x2e\x34\x30\
-\x33\x35\x20\x34\x38\x2e\x30\x33\x38\x34\x20\x35\x32\x2e\x30\x39\
-\x39\x35\x20\x34\x37\x2e\x32\x37\x35\x20\x35\x31\x2e\x36\x32\x30\
-\x32\x4c\x34\x30\x2e\x35\x31\x31\x32\x20\x34\x37\x2e\x33\x37\x33\
-\x38\x43\x34\x30\x2e\x31\x38\x36\x31\x20\x34\x37\x2e\x31\x36\x39\
-\x37\x20\x33\x39\x2e\x37\x37\x32\x39\x20\x34\x37\x2e\x31\x36\x39\
-\x37\x20\x33\x39\x2e\x34\x34\x37\x38\x20\x34\x37\x2e\x33\x37\x33\
-\x38\x4c\x33\x32\x2e\x36\x38\x34\x20\x35\x31\x2e\x36\x32\x30\x32\
-\x43\x33\x31\x2e\x39\x32\x30\x35\x20\x35\x32\x2e\x30\x39\x39\x35\
-\x20\x33\x30\x2e\x39\x36\x32\x36\x20\x35\x31\x2e\x34\x30\x33\x35\
-\x20\x33\x31\x2e\x31\x38\x32\x35\x20\x35\x30\x2e\x35\x32\x39\x33\
-\x4c\x33\x33\x2e\x31\x33\x30\x39\x20\x34\x32\x2e\x37\x38\x34\x33\
-\x43\x33\x33\x2e\x32\x32\x34\x35\x20\x34\x32\x2e\x34\x31\x32\x31\
-\x20\x33\x33\x2e\x30\x39\x36\x38\x20\x34\x32\x2e\x30\x31\x39\x31\
-\x20\x33\x32\x2e\x38\x30\x32\x33\x20\x34\x31\x2e\x37\x37\x32\x39\
-\x4c\x32\x36\x2e\x36\x37\x33\x36\x20\x33\x36\x2e\x36\x35\x32\x34\
-\x43\x32\x35\x2e\x39\x38\x31\x38\x20\x33\x36\x2e\x30\x37\x34\x34\
-\x20\x32\x36\x2e\x33\x34\x37\x38\x20\x33\x34\x2e\x39\x34\x38\x32\
-\x20\x32\x37\x2e\x32\x34\x37\x31\x20\x33\x34\x2e\x38\x38\x37\x33\
-\x4c\x33\x35\x2e\x32\x31\x35\x31\x20\x33\x34\x2e\x33\x34\x37\x43\
-\x33\x35\x2e\x35\x39\x38\x31\x20\x33\x34\x2e\x33\x32\x31\x20\x33\
-\x35\x2e\x39\x33\x32\x34\x20\x33\x34\x2e\x30\x37\x38\x31\x20\x33\
-\x36\x2e\x30\x37\x35\x34\x20\x33\x33\x2e\x37\x32\x31\x39\x4c\x33\
-\x39\x2e\x30\x35\x31\x35\x20\x32\x36\x2e\x33\x31\x30\x38\x5a\x22\
-\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\x32\x43\x39\x34\x43\x22\x20\
-\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
-\x00\x00\x04\xc2\
+\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x3e\x0d\x0a\
+\x20\x20\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x33\x38\x2e\x31\
+\x34\x34\x31\x20\x31\x32\x2e\x36\x32\x31\x37\x43\x33\x38\x2e\x38\
+\x31\x35\x39\x20\x31\x30\x2e\x39\x34\x38\x38\x20\x34\x31\x2e\x31\
+\x38\x34\x31\x20\x31\x30\x2e\x39\x34\x38\x38\x20\x34\x31\x2e\x38\
+\x35\x35\x39\x20\x31\x32\x2e\x36\x32\x31\x37\x4c\x34\x37\x2e\x38\
+\x30\x38\x31\x20\x32\x37\x2e\x34\x34\x33\x39\x43\x34\x38\x2e\x30\
+\x39\x34\x32\x20\x32\x38\x2e\x31\x35\x36\x33\x20\x34\x38\x2e\x37\
+\x36\x32\x38\x20\x32\x38\x2e\x36\x34\x32\x20\x34\x39\x2e\x35\x32\
+\x38\x38\x20\x32\x38\x2e\x36\x39\x34\x4c\x36\x35\x2e\x34\x36\x34\
+\x38\x20\x32\x39\x2e\x37\x37\x34\x35\x43\x36\x37\x2e\x32\x36\x33\
+\x35\x20\x32\x39\x2e\x38\x39\x36\x35\x20\x36\x37\x2e\x39\x39\x35\
+\x33\x20\x33\x32\x2e\x31\x34\x38\x39\x20\x36\x36\x2e\x36\x31\x31\
+\x38\x20\x33\x33\x2e\x33\x30\x34\x37\x4c\x35\x34\x2e\x33\x35\x34\
+\x34\x20\x34\x33\x2e\x35\x34\x35\x39\x43\x35\x33\x2e\x37\x36\x35\
+\x33\x20\x34\x34\x2e\x30\x33\x38\x31\x20\x35\x33\x2e\x35\x30\x39\
+\x39\x20\x34\x34\x2e\x38\x32\x34\x31\x20\x35\x33\x2e\x36\x39\x37\
+\x32\x20\x34\x35\x2e\x35\x36\x38\x36\x4c\x35\x37\x2e\x35\x39\x34\
+\x31\x20\x36\x31\x2e\x30\x35\x38\x36\x43\x35\x38\x2e\x30\x33\x33\
+\x39\x20\x36\x32\x2e\x38\x30\x36\x39\x20\x35\x36\x2e\x31\x31\x37\
+\x39\x20\x36\x34\x2e\x31\x39\x39\x20\x35\x34\x2e\x35\x39\x31\x31\
+\x20\x36\x33\x2e\x32\x34\x30\x34\x4c\x34\x31\x2e\x30\x36\x33\x34\
+\x20\x35\x34\x2e\x37\x34\x37\x36\x43\x34\x30\x2e\x34\x31\x33\x32\
+\x20\x35\x34\x2e\x33\x33\x39\x34\x20\x33\x39\x2e\x35\x38\x36\x38\
+\x20\x35\x34\x2e\x33\x33\x39\x34\x20\x33\x38\x2e\x39\x33\x36\x36\
+\x20\x35\x34\x2e\x37\x34\x37\x36\x4c\x32\x35\x2e\x34\x30\x38\x39\
+\x20\x36\x33\x2e\x32\x34\x30\x34\x43\x32\x33\x2e\x38\x38\x32\x31\
+\x20\x36\x34\x2e\x31\x39\x39\x20\x32\x31\x2e\x39\x36\x36\x31\x20\
+\x36\x32\x2e\x38\x30\x36\x39\x20\x32\x32\x2e\x34\x30\x35\x39\x20\
+\x36\x31\x2e\x30\x35\x38\x36\x4c\x32\x36\x2e\x33\x30\x32\x38\x20\
+\x34\x35\x2e\x35\x36\x38\x36\x43\x32\x36\x2e\x34\x39\x30\x31\x20\
+\x34\x34\x2e\x38\x32\x34\x31\x20\x32\x36\x2e\x32\x33\x34\x37\x20\
+\x34\x34\x2e\x30\x33\x38\x31\x20\x32\x35\x2e\x36\x34\x35\x36\x20\
+\x34\x33\x2e\x35\x34\x35\x39\x4c\x31\x33\x2e\x33\x38\x38\x32\x20\
+\x33\x33\x2e\x33\x30\x34\x37\x43\x31\x32\x2e\x30\x30\x34\x37\x20\
+\x33\x32\x2e\x31\x34\x38\x39\x20\x31\x32\x2e\x37\x33\x36\x35\x20\
+\x32\x39\x2e\x38\x39\x36\x35\x20\x31\x34\x2e\x35\x33\x35\x32\x20\
+\x32\x39\x2e\x37\x37\x34\x35\x4c\x33\x30\x2e\x34\x37\x31\x32\x20\
+\x32\x38\x2e\x36\x39\x34\x43\x33\x31\x2e\x32\x33\x37\x32\x20\x32\
+\x38\x2e\x36\x34\x32\x20\x33\x31\x2e\x39\x30\x35\x38\x20\x32\x38\
+\x2e\x31\x35\x36\x33\x20\x33\x32\x2e\x31\x39\x31\x39\x20\x32\x37\
+\x2e\x34\x34\x33\x39\x4c\x33\x38\x2e\x31\x34\x34\x31\x20\x31\x32\
+\x2e\x36\x32\x31\x37\x5a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\
+\x32\x39\x39\x34\x41\x22\x20\x2f\x3e\x0d\x0a\x20\x20\x3c\x70\x61\
+\x74\x68\x20\x64\x3d\x22\x4d\x33\x39\x2e\x30\x35\x31\x35\x20\x32\
+\x36\x2e\x33\x31\x30\x38\x43\x33\x39\x2e\x33\x38\x37\x34\x20\x32\
+\x35\x2e\x34\x37\x34\x34\x20\x34\x30\x2e\x35\x37\x31\x36\x20\x32\
+\x35\x2e\x34\x37\x34\x34\x20\x34\x30\x2e\x39\x30\x37\x35\x20\x32\
+\x36\x2e\x33\x31\x30\x38\x4c\x34\x33\x2e\x38\x38\x33\x35\x20\x33\
+\x33\x2e\x37\x32\x31\x39\x43\x34\x34\x2e\x30\x32\x36\x36\x20\x33\
+\x34\x2e\x30\x37\x38\x31\x20\x34\x34\x2e\x33\x36\x30\x39\x20\x33\
+\x34\x2e\x33\x32\x31\x20\x34\x34\x2e\x37\x34\x33\x39\x20\x33\x34\
+\x2e\x33\x34\x37\x4c\x35\x32\x2e\x37\x31\x31\x39\x20\x33\x34\x2e\
+\x38\x38\x37\x33\x43\x35\x33\x2e\x36\x31\x31\x32\x20\x33\x34\x2e\
+\x39\x34\x38\x32\x20\x35\x33\x2e\x39\x37\x37\x31\x20\x33\x36\x2e\
+\x30\x37\x34\x34\x20\x35\x33\x2e\x32\x38\x35\x34\x20\x33\x36\x2e\
+\x36\x35\x32\x34\x4c\x34\x37\x2e\x31\x35\x36\x37\x20\x34\x31\x2e\
+\x37\x37\x32\x39\x43\x34\x36\x2e\x38\x36\x32\x31\x20\x34\x32\x2e\
+\x30\x31\x39\x31\x20\x34\x36\x2e\x37\x33\x34\x34\x20\x34\x32\x2e\
+\x34\x31\x32\x31\x20\x34\x36\x2e\x38\x32\x38\x31\x20\x34\x32\x2e\
+\x37\x38\x34\x33\x4c\x34\x38\x2e\x37\x37\x36\x35\x20\x35\x30\x2e\
+\x35\x32\x39\x33\x43\x34\x38\x2e\x39\x39\x36\x34\x20\x35\x31\x2e\
+\x34\x30\x33\x35\x20\x34\x38\x2e\x30\x33\x38\x34\x20\x35\x32\x2e\
+\x30\x39\x39\x35\x20\x34\x37\x2e\x32\x37\x35\x20\x35\x31\x2e\x36\
+\x32\x30\x32\x4c\x34\x30\x2e\x35\x31\x31\x32\x20\x34\x37\x2e\x33\
+\x37\x33\x38\x43\x34\x30\x2e\x31\x38\x36\x31\x20\x34\x37\x2e\x31\
+\x36\x39\x37\x20\x33\x39\x2e\x37\x37\x32\x39\x20\x34\x37\x2e\x31\
+\x36\x39\x37\x20\x33\x39\x2e\x34\x34\x37\x38\x20\x34\x37\x2e\x33\
+\x37\x33\x38\x4c\x33\x32\x2e\x36\x38\x34\x20\x35\x31\x2e\x36\x32\
+\x30\x32\x43\x33\x31\x2e\x39\x32\x30\x35\x20\x35\x32\x2e\x30\x39\
+\x39\x35\x20\x33\x30\x2e\x39\x36\x32\x36\x20\x35\x31\x2e\x34\x30\
+\x33\x35\x20\x33\x31\x2e\x31\x38\x32\x35\x20\x35\x30\x2e\x35\x32\
+\x39\x33\x4c\x33\x33\x2e\x31\x33\x30\x39\x20\x34\x32\x2e\x37\x38\
+\x34\x33\x43\x33\x33\x2e\x32\x32\x34\x35\x20\x34\x32\x2e\x34\x31\
+\x32\x31\x20\x33\x33\x2e\x30\x39\x36\x38\x20\x34\x32\x2e\x30\x31\
+\x39\x31\x20\x33\x32\x2e\x38\x30\x32\x33\x20\x34\x31\x2e\x37\x37\
+\x32\x39\x4c\x32\x36\x2e\x36\x37\x33\x36\x20\x33\x36\x2e\x36\x35\
+\x32\x34\x43\x32\x35\x2e\x39\x38\x31\x38\x20\x33\x36\x2e\x30\x37\
+\x34\x34\x20\x32\x36\x2e\x33\x34\x37\x38\x20\x33\x34\x2e\x39\x34\
+\x38\x32\x20\x32\x37\x2e\x32\x34\x37\x31\x20\x33\x34\x2e\x38\x38\
+\x37\x33\x4c\x33\x35\x2e\x32\x31\x35\x31\x20\x33\x34\x2e\x33\x34\
+\x37\x43\x33\x35\x2e\x35\x39\x38\x31\x20\x33\x34\x2e\x33\x32\x31\
+\x20\x33\x35\x2e\x39\x33\x32\x34\x20\x33\x34\x2e\x30\x37\x38\x31\
+\x20\x33\x36\x2e\x30\x37\x35\x34\x20\x33\x33\x2e\x37\x32\x31\x39\
+\x4c\x33\x39\x2e\x30\x35\x31\x35\x20\x32\x36\x2e\x33\x31\x30\x38\
+\x5a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\x32\x43\x39\x34\x43\
+\x22\x20\x2f\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\
+\x00\x00\x04\xc5\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -516,355 +557,365 @@
\x20\x77\x77\x77\x2e\x73\x76\x67\x72\x65\x70\x6f\x2e\x63\x6f\x6d\
\x2c\x20\x47\x65\x6e\x65\x72\x61\x74\x6f\x72\x3a\x20\x53\x56\x47\
\x20\x52\x65\x70\x6f\x20\x4d\x69\x78\x65\x72\x20\x54\x6f\x6f\x6c\
-\x73\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x77\x69\x64\x74\x68\
-\x3d\x22\x38\x30\x30\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\
-\x22\x38\x30\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\
-\x22\x30\x20\x30\x20\x32\x34\x20\x32\x34\x22\x20\x66\x69\x6c\x6c\
-\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x3e\x0a\x3c\x70\x61\x74\
-\x68\x20\x64\x3d\x22\x4d\x32\x30\x20\x39\x2e\x35\x30\x31\x39\x35\
-\x56\x38\x2e\x37\x34\x39\x38\x35\x43\x32\x30\x20\x37\x2e\x35\x30\
-\x37\x32\x31\x20\x31\x38\x2e\x39\x39\x32\x36\x20\x36\x2e\x34\x39\
-\x39\x38\x35\x20\x31\x37\x2e\x37\x35\x20\x36\x2e\x34\x39\x39\x38\
-\x35\x48\x31\x32\x2e\x30\x32\x34\x37\x4c\x39\x2e\x36\x34\x33\x36\
-\x38\x20\x34\x2e\x35\x31\x39\x39\x35\x43\x39\x2e\x32\x33\x39\x35\
-\x39\x20\x34\x2e\x31\x38\x33\x39\x33\x20\x38\x2e\x37\x33\x30\x36\
-\x33\x20\x33\x2e\x39\x39\x39\x39\x37\x20\x38\x2e\x32\x30\x35\x30\
-\x39\x20\x33\x2e\x39\x39\x39\x39\x37\x48\x34\x2e\x32\x34\x39\x35\
-\x37\x43\x33\x2e\x30\x30\x37\x32\x34\x20\x33\x2e\x39\x39\x39\x39\
-\x37\x20\x32\x20\x35\x2e\x30\x30\x36\x38\x36\x20\x31\x2e\x39\x39\
-\x39\x35\x37\x20\x36\x2e\x32\x34\x39\x31\x39\x4c\x31\x2e\x39\x39\
-\x35\x36\x31\x20\x31\x37\x2e\x37\x34\x39\x32\x43\x31\x2e\x39\x39\
-\x35\x31\x38\x20\x31\x38\x2e\x39\x39\x32\x31\x20\x33\x2e\x30\x30\
-\x32\x36\x36\x20\x32\x30\x20\x34\x2e\x32\x34\x35\x36\x31\x20\x32\
-\x30\x48\x34\x2e\x32\x37\x31\x39\x36\x43\x34\x2e\x32\x37\x36\x30\
-\x37\x20\x32\x30\x20\x34\x2e\x32\x38\x30\x31\x39\x20\x32\x30\x20\
-\x34\x2e\x32\x38\x34\x33\x31\x20\x32\x30\x48\x31\x38\x2e\x34\x36\
-\x39\x33\x43\x31\x39\x2e\x32\x37\x32\x33\x20\x32\x30\x20\x31\x39\
-\x2e\x39\x37\x32\x33\x20\x31\x39\x2e\x34\x35\x33\x35\x20\x32\x30\
-\x2e\x31\x36\x37\x20\x31\x38\x2e\x36\x37\x34\x35\x4c\x32\x31\x2e\
-\x39\x31\x36\x39\x20\x31\x31\x2e\x36\x37\x36\x35\x43\x32\x32\x2e\
-\x31\x39\x33\x31\x20\x31\x30\x2e\x35\x37\x31\x39\x20\x32\x31\x2e\
-\x33\x35\x37\x37\x20\x39\x2e\x35\x30\x31\x39\x35\x20\x32\x30\x2e\
-\x32\x31\x39\x32\x20\x39\x2e\x35\x30\x31\x39\x35\x48\x32\x30\x5a\
-\x4d\x34\x2e\x32\x34\x39\x35\x37\x20\x35\x2e\x34\x39\x39\x39\x37\
-\x48\x38\x2e\x32\x30\x35\x30\x39\x43\x38\x2e\x33\x38\x30\x32\x37\
-\x20\x35\x2e\x34\x39\x39\x39\x37\x20\x38\x2e\x35\x34\x39\x39\x33\
-\x20\x35\x2e\x35\x36\x31\x32\x39\x20\x38\x2e\x36\x38\x34\x36\x32\
-\x20\x35\x2e\x36\x37\x33\x33\x4c\x31\x31\x2e\x32\x37\x34\x31\x20\
-\x37\x2e\x38\x32\x36\x35\x32\x43\x31\x31\x2e\x34\x30\x38\x38\x20\
-\x37\x2e\x39\x33\x38\x35\x32\x20\x31\x31\x2e\x35\x37\x38\x34\x20\
-\x37\x2e\x39\x39\x39\x38\x35\x20\x31\x31\x2e\x37\x35\x33\x36\x20\
-\x37\x2e\x39\x39\x39\x38\x35\x48\x31\x37\x2e\x37\x35\x43\x31\x38\
-\x2e\x31\x36\x34\x32\x20\x37\x2e\x39\x39\x39\x38\x35\x20\x31\x38\
-\x2e\x35\x20\x38\x2e\x33\x33\x35\x36\x33\x20\x31\x38\x2e\x35\x20\
-\x38\x2e\x37\x34\x39\x38\x35\x56\x39\x2e\x35\x30\x31\x39\x35\x48\
-\x36\x2e\x34\x32\x33\x38\x35\x43\x35\x2e\x33\x39\x31\x33\x36\x20\
-\x39\x2e\x35\x30\x31\x39\x35\x20\x34\x2e\x34\x39\x31\x33\x37\x20\
-\x31\x30\x2e\x32\x30\x34\x37\x20\x34\x2e\x32\x34\x31\x20\x31\x31\
-\x2e\x32\x30\x36\x34\x4c\x33\x2e\x34\x39\x36\x38\x34\x20\x31\x34\
-\x2e\x31\x38\x33\x37\x4c\x33\x2e\x34\x39\x39\x35\x37\x20\x36\x2e\
-\x32\x34\x39\x37\x31\x43\x33\x2e\x34\x39\x39\x37\x31\x20\x35\x2e\
-\x38\x33\x35\x36\x20\x33\x2e\x38\x33\x35\x34\x36\x20\x35\x2e\x34\
-\x39\x39\x39\x37\x20\x34\x2e\x32\x34\x39\x35\x37\x20\x35\x2e\x34\
-\x39\x39\x39\x37\x5a\x4d\x35\x2e\x36\x39\x36\x32\x33\x20\x31\x31\
-\x2e\x35\x37\x30\x31\x43\x35\x2e\x37\x37\x39\x36\x39\x20\x31\x31\
-\x2e\x32\x33\x36\x32\x20\x36\x2e\x30\x37\x39\x36\x39\x20\x31\x31\
-\x2e\x30\x30\x32\x20\x36\x2e\x34\x32\x33\x38\x35\x20\x31\x31\x2e\
-\x30\x30\x32\x48\x32\x30\x2e\x32\x31\x39\x32\x43\x32\x30\x2e\x33\
-\x38\x31\x39\x20\x31\x31\x2e\x30\x30\x32\x20\x32\x30\x2e\x35\x30\
-\x31\x32\x20\x31\x31\x2e\x31\x35\x34\x38\x20\x32\x30\x2e\x34\x36\
-\x31\x37\x20\x31\x31\x2e\x33\x31\x32\x36\x4c\x31\x38\x2e\x37\x31\
-\x31\x39\x20\x31\x38\x2e\x33\x31\x30\x37\x43\x31\x38\x2e\x36\x38\
-\x34\x20\x31\x38\x2e\x34\x32\x31\x39\x20\x31\x38\x2e\x35\x38\x34\
-\x20\x31\x38\x2e\x35\x20\x31\x38\x2e\x34\x36\x39\x33\x20\x31\x38\
-\x2e\x35\x48\x34\x2e\x32\x38\x34\x33\x31\x43\x34\x2e\x31\x32\x31\
-\x36\x37\x20\x31\x38\x2e\x35\x20\x34\x2e\x30\x30\x32\x33\x33\x20\
-\x31\x38\x2e\x33\x34\x37\x32\x20\x34\x2e\x30\x34\x31\x37\x37\x20\
-\x31\x38\x2e\x31\x38\x39\x34\x4c\x35\x2e\x36\x39\x36\x32\x33\x20\
-\x31\x31\x2e\x35\x37\x30\x31\x5a\x22\x20\x66\x69\x6c\x6c\x3d\x22\
-\x23\x32\x31\x32\x31\x32\x31\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\
-\x3e\
-\x00\x00\x09\x8f\
+\x73\x20\x2d\x2d\x3e\x0d\x0a\x3c\x73\x76\x67\x20\x77\x69\x64\x74\
+\x68\x3d\x22\x38\x30\x30\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
+\x3d\x22\x38\x30\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x32\x34\x20\x32\x34\x22\x20\x66\x69\x6c\
+\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\
+\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
+\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x3e\x0d\x0a\x3c\x70\
+\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x30\x20\x39\x2e\x35\x30\x31\
+\x39\x35\x56\x38\x2e\x37\x34\x39\x38\x35\x43\x32\x30\x20\x37\x2e\
+\x35\x30\x37\x32\x31\x20\x31\x38\x2e\x39\x39\x32\x36\x20\x36\x2e\
+\x34\x39\x39\x38\x35\x20\x31\x37\x2e\x37\x35\x20\x36\x2e\x34\x39\
+\x39\x38\x35\x48\x31\x32\x2e\x30\x32\x34\x37\x4c\x39\x2e\x36\x34\
+\x33\x36\x38\x20\x34\x2e\x35\x31\x39\x39\x35\x43\x39\x2e\x32\x33\
+\x39\x35\x39\x20\x34\x2e\x31\x38\x33\x39\x33\x20\x38\x2e\x37\x33\
+\x30\x36\x33\x20\x33\x2e\x39\x39\x39\x39\x37\x20\x38\x2e\x32\x30\
+\x35\x30\x39\x20\x33\x2e\x39\x39\x39\x39\x37\x48\x34\x2e\x32\x34\
+\x39\x35\x37\x43\x33\x2e\x30\x30\x37\x32\x34\x20\x33\x2e\x39\x39\
+\x39\x39\x37\x20\x32\x20\x35\x2e\x30\x30\x36\x38\x36\x20\x31\x2e\
+\x39\x39\x39\x35\x37\x20\x36\x2e\x32\x34\x39\x31\x39\x4c\x31\x2e\
+\x39\x39\x35\x36\x31\x20\x31\x37\x2e\x37\x34\x39\x32\x43\x31\x2e\
+\x39\x39\x35\x31\x38\x20\x31\x38\x2e\x39\x39\x32\x31\x20\x33\x2e\
+\x30\x30\x32\x36\x36\x20\x32\x30\x20\x34\x2e\x32\x34\x35\x36\x31\
+\x20\x32\x30\x48\x34\x2e\x32\x37\x31\x39\x36\x43\x34\x2e\x32\x37\
+\x36\x30\x37\x20\x32\x30\x20\x34\x2e\x32\x38\x30\x31\x39\x20\x32\
+\x30\x20\x34\x2e\x32\x38\x34\x33\x31\x20\x32\x30\x48\x31\x38\x2e\
+\x34\x36\x39\x33\x43\x31\x39\x2e\x32\x37\x32\x33\x20\x32\x30\x20\
+\x31\x39\x2e\x39\x37\x32\x33\x20\x31\x39\x2e\x34\x35\x33\x35\x20\
+\x32\x30\x2e\x31\x36\x37\x20\x31\x38\x2e\x36\x37\x34\x35\x4c\x32\
+\x31\x2e\x39\x31\x36\x39\x20\x31\x31\x2e\x36\x37\x36\x35\x43\x32\
+\x32\x2e\x31\x39\x33\x31\x20\x31\x30\x2e\x35\x37\x31\x39\x20\x32\
+\x31\x2e\x33\x35\x37\x37\x20\x39\x2e\x35\x30\x31\x39\x35\x20\x32\
+\x30\x2e\x32\x31\x39\x32\x20\x39\x2e\x35\x30\x31\x39\x35\x48\x32\
+\x30\x5a\x4d\x34\x2e\x32\x34\x39\x35\x37\x20\x35\x2e\x34\x39\x39\
+\x39\x37\x48\x38\x2e\x32\x30\x35\x30\x39\x43\x38\x2e\x33\x38\x30\
+\x32\x37\x20\x35\x2e\x34\x39\x39\x39\x37\x20\x38\x2e\x35\x34\x39\
+\x39\x33\x20\x35\x2e\x35\x36\x31\x32\x39\x20\x38\x2e\x36\x38\x34\
+\x36\x32\x20\x35\x2e\x36\x37\x33\x33\x4c\x31\x31\x2e\x32\x37\x34\
+\x31\x20\x37\x2e\x38\x32\x36\x35\x32\x43\x31\x31\x2e\x34\x30\x38\
+\x38\x20\x37\x2e\x39\x33\x38\x35\x32\x20\x31\x31\x2e\x35\x37\x38\
+\x34\x20\x37\x2e\x39\x39\x39\x38\x35\x20\x31\x31\x2e\x37\x35\x33\
+\x36\x20\x37\x2e\x39\x39\x39\x38\x35\x48\x31\x37\x2e\x37\x35\x43\
+\x31\x38\x2e\x31\x36\x34\x32\x20\x37\x2e\x39\x39\x39\x38\x35\x20\
+\x31\x38\x2e\x35\x20\x38\x2e\x33\x33\x35\x36\x33\x20\x31\x38\x2e\
+\x35\x20\x38\x2e\x37\x34\x39\x38\x35\x56\x39\x2e\x35\x30\x31\x39\
+\x35\x48\x36\x2e\x34\x32\x33\x38\x35\x43\x35\x2e\x33\x39\x31\x33\
+\x36\x20\x39\x2e\x35\x30\x31\x39\x35\x20\x34\x2e\x34\x39\x31\x33\
+\x37\x20\x31\x30\x2e\x32\x30\x34\x37\x20\x34\x2e\x32\x34\x31\x20\
+\x31\x31\x2e\x32\x30\x36\x34\x4c\x33\x2e\x34\x39\x36\x38\x34\x20\
+\x31\x34\x2e\x31\x38\x33\x37\x4c\x33\x2e\x34\x39\x39\x35\x37\x20\
+\x36\x2e\x32\x34\x39\x37\x31\x43\x33\x2e\x34\x39\x39\x37\x31\x20\
+\x35\x2e\x38\x33\x35\x36\x20\x33\x2e\x38\x33\x35\x34\x36\x20\x35\
+\x2e\x34\x39\x39\x39\x37\x20\x34\x2e\x32\x34\x39\x35\x37\x20\x35\
+\x2e\x34\x39\x39\x39\x37\x5a\x4d\x35\x2e\x36\x39\x36\x32\x33\x20\
+\x31\x31\x2e\x35\x37\x30\x31\x43\x35\x2e\x37\x37\x39\x36\x39\x20\
+\x31\x31\x2e\x32\x33\x36\x32\x20\x36\x2e\x30\x37\x39\x36\x39\x20\
+\x31\x31\x2e\x30\x30\x32\x20\x36\x2e\x34\x32\x33\x38\x35\x20\x31\
+\x31\x2e\x30\x30\x32\x48\x32\x30\x2e\x32\x31\x39\x32\x43\x32\x30\
+\x2e\x33\x38\x31\x39\x20\x31\x31\x2e\x30\x30\x32\x20\x32\x30\x2e\
+\x35\x30\x31\x32\x20\x31\x31\x2e\x31\x35\x34\x38\x20\x32\x30\x2e\
+\x34\x36\x31\x37\x20\x31\x31\x2e\x33\x31\x32\x36\x4c\x31\x38\x2e\
+\x37\x31\x31\x39\x20\x31\x38\x2e\x33\x31\x30\x37\x43\x31\x38\x2e\
+\x36\x38\x34\x20\x31\x38\x2e\x34\x32\x31\x39\x20\x31\x38\x2e\x35\
+\x38\x34\x20\x31\x38\x2e\x35\x20\x31\x38\x2e\x34\x36\x39\x33\x20\
+\x31\x38\x2e\x35\x48\x34\x2e\x32\x38\x34\x33\x31\x43\x34\x2e\x31\
+\x32\x31\x36\x37\x20\x31\x38\x2e\x35\x20\x34\x2e\x30\x30\x32\x33\
+\x33\x20\x31\x38\x2e\x33\x34\x37\x32\x20\x34\x2e\x30\x34\x31\x37\
+\x37\x20\x31\x38\x2e\x31\x38\x39\x34\x4c\x35\x2e\x36\x39\x36\x32\
+\x33\x20\x31\x31\x2e\x35\x37\x30\x31\x5a\x22\x20\x66\x69\x6c\x6c\
+\x3d\x22\x23\x32\x31\x32\x31\x32\x31\x22\x2f\x3e\x0d\x0a\x3c\x2f\
+\x73\x76\x67\x3e\
+\x00\x00\x09\xd7\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\
\x2d\x38\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\
-\x6e\x6f\x22\x3f\x3e\x0a\x3c\x73\x76\x67\x0a\x20\x20\x20\x78\x6d\
-\x6c\x6e\x73\x3a\x64\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\
-\x75\x72\x6c\x2e\x6f\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\x6d\x65\
-\x6e\x74\x73\x2f\x31\x2e\x31\x2f\x22\x0a\x20\x20\x20\x78\x6d\x6c\
-\x6e\x73\x3a\x63\x63\x3d\x22\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\x6e\x73\x23\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\
-\x72\x64\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x30\x32\x2f\x32\
-\x32\x2d\x72\x64\x66\x2d\x73\x79\x6e\x74\x61\x78\x2d\x6e\x73\x23\
-\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x73\x76\x67\x3d\x22\
-\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
-\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\x78\
-\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\
-\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\
-\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x73\x6f\x64\x69\x70\
-\x6f\x64\x69\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x73\x6f\x64\x69\
-\x70\x6f\x64\x69\x2e\x73\x6f\x75\x72\x63\x65\x66\x6f\x72\x67\x65\
-\x2e\x6e\x65\x74\x2f\x44\x54\x44\x2f\x73\x6f\x64\x69\x70\x6f\x64\
-\x69\x2d\x30\x2e\x64\x74\x64\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\
-\x73\x3a\x69\x6e\x6b\x73\x63\x61\x70\x65\x3d\x22\x68\x74\x74\x70\
-\x3a\x2f\x2f\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\
-\x6f\x72\x67\x2f\x6e\x61\x6d\x65\x73\x70\x61\x63\x65\x73\x2f\x69\
-\x6e\x6b\x73\x63\x61\x70\x65\x22\x0a\x20\x20\x20\x69\x6e\x6b\x73\
-\x63\x61\x70\x65\x3a\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x72\x63\x31\x20\x28\x30\x39\x39\x36\x30\x64\x36\x66\x30\x35\
-\x2c\x20\x32\x30\x32\x30\x2d\x30\x34\x2d\x30\x39\x29\x22\x0a\x20\
-\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x64\x6f\x63\x6e\x61\
-\x6d\x65\x3d\x22\x63\x6f\x6c\x6c\x61\x70\x73\x65\x2e\x73\x76\x67\
-\x22\x0a\x20\x20\x20\x69\x64\x3d\x22\x73\x76\x67\x36\x22\x0a\x20\
-\x20\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x0a\
-\x20\x20\x20\x63\x6c\x61\x73\x73\x3d\x22\x66\x65\x61\x74\x68\x65\
-\x72\x20\x66\x65\x61\x74\x68\x65\x72\x2d\x63\x6f\x64\x65\x22\x0a\
-\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\
-\x69\x6e\x3d\x22\x72\x6f\x75\x6e\x64\x22\x0a\x20\x20\x20\x73\x74\
-\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x22\x72\x6f\
-\x75\x6e\x64\x22\x0a\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\
-\x69\x64\x74\x68\x3d\x22\x32\x22\x0a\x20\x20\x20\x73\x74\x72\x6f\
-\x6b\x65\x3d\x22\x63\x75\x72\x72\x65\x6e\x74\x43\x6f\x6c\x6f\x72\
-\x22\x0a\x20\x20\x20\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\
-\x0a\x20\x20\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\
-\x20\x32\x34\x20\x32\x34\x22\x0a\x20\x20\x20\x68\x65\x69\x67\x68\
-\x74\x3d\x22\x32\x34\x22\x0a\x20\x20\x20\x77\x69\x64\x74\x68\x3d\
-\x22\x32\x34\x22\x3e\x0a\x20\x20\x3c\x6d\x65\x74\x61\x64\x61\x74\
-\x61\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6d\x65\x74\x61\x64\
-\x61\x74\x61\x31\x32\x22\x3e\x0a\x20\x20\x20\x20\x3c\x72\x64\x66\
-\x3a\x52\x44\x46\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x63\x63\x3a\
-\x57\x6f\x72\x6b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x64\
-\x66\x3a\x61\x62\x6f\x75\x74\x3d\x22\x22\x3e\x0a\x20\x20\x20\x20\
-\x20\x20\x20\x20\x3c\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x69\
-\x6d\x61\x67\x65\x2f\x73\x76\x67\x2b\x78\x6d\x6c\x3c\x2f\x64\x63\
-\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\
-\x20\x3c\x64\x63\x3a\x74\x79\x70\x65\x0a\x20\x20\x20\x20\x20\x20\
-\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x72\x65\x73\x6f\x75\x72\x63\
-\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\
-\x72\x67\x2f\x64\x63\x2f\x64\x63\x6d\x69\x74\x79\x70\x65\x2f\x53\
-\x74\x69\x6c\x6c\x49\x6d\x61\x67\x65\x22\x20\x2f\x3e\x0a\x20\x20\
-\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\
-\x3c\x2f\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\x20\x20\
-\x20\x20\x3c\x2f\x63\x63\x3a\x57\x6f\x72\x6b\x3e\x0a\x20\x20\x20\
-\x20\x3c\x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\x3c\x2f\
-\x6d\x65\x74\x61\x64\x61\x74\x61\x3e\x0a\x20\x20\x3c\x64\x65\x66\
-\x73\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\x66\x73\x31\
-\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x73\x6f\x64\x69\x70\x6f\x64\
-\x69\x3a\x6e\x61\x6d\x65\x64\x76\x69\x65\x77\x0a\x20\x20\x20\x20\
-\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x75\x72\x72\x65\x6e\
-\x74\x2d\x6c\x61\x79\x65\x72\x3d\x22\x73\x76\x67\x36\x22\x0a\x20\
+\x6e\x6f\x22\x3f\x3e\x0d\x0a\x3c\x73\x76\x67\x0d\x0a\x20\x20\x20\
+\x78\x6d\x6c\x6e\x73\x3a\x64\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\
+\x2f\x70\x75\x72\x6c\x2e\x6f\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\
+\x6d\x65\x6e\x74\x73\x2f\x31\x2e\x31\x2f\x22\x0d\x0a\x20\x20\x20\
+\x78\x6d\x6c\x6e\x73\x3a\x63\x63\x3d\x22\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\x6e\x73\x23\x22\x0d\x0a\x20\x20\x20\x78\x6d\
+\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\
+\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\x2d\x73\x79\x6e\x74\x61\x78\
+\x2d\x6e\x73\x23\x22\x0d\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\
+\x73\x76\x67\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\
+\x0d\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\
+\x30\x30\x2f\x73\x76\x67\x22\x0d\x0a\x20\x20\x20\x78\x6d\x6c\x6e\
+\x73\x3a\x73\x6f\x64\x69\x70\x6f\x64\x69\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2e\x73\x6f\x75\x72\
+\x63\x65\x66\x6f\x72\x67\x65\x2e\x6e\x65\x74\x2f\x44\x54\x44\x2f\
+\x73\x6f\x64\x69\x70\x6f\x64\x69\x2d\x30\x2e\x64\x74\x64\x22\x0d\
+\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x69\
+\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x6e\x61\x6d\x65\
+\x73\x70\x61\x63\x65\x73\x2f\x69\x6e\x6b\x73\x63\x61\x70\x65\x22\
+\x0d\x0a\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x65\
+\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x30\x72\x63\x31\x20\x28\x30\
+\x39\x39\x36\x30\x64\x36\x66\x30\x35\x2c\x20\x32\x30\x32\x30\x2d\
+\x30\x34\x2d\x30\x39\x29\x22\x0d\x0a\x20\x20\x20\x73\x6f\x64\x69\
+\x70\x6f\x64\x69\x3a\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x63\x6f\
+\x6c\x6c\x61\x70\x73\x65\x2e\x73\x76\x67\x22\x0d\x0a\x20\x20\x20\
+\x69\x64\x3d\x22\x73\x76\x67\x36\x22\x0d\x0a\x20\x20\x20\x76\x65\
+\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x0d\x0a\x20\x20\x20\
+\x63\x6c\x61\x73\x73\x3d\x22\x66\x65\x61\x74\x68\x65\x72\x20\x66\
+\x65\x61\x74\x68\x65\x72\x2d\x63\x6f\x64\x65\x22\x0d\x0a\x20\x20\
+\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\
+\x3d\x22\x72\x6f\x75\x6e\x64\x22\x0d\x0a\x20\x20\x20\x73\x74\x72\
+\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x22\x72\x6f\x75\
+\x6e\x64\x22\x0d\x0a\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\
+\x69\x64\x74\x68\x3d\x22\x32\x22\x0d\x0a\x20\x20\x20\x73\x74\x72\
+\x6f\x6b\x65\x3d\x22\x63\x75\x72\x72\x65\x6e\x74\x43\x6f\x6c\x6f\
+\x72\x22\x0d\x0a\x20\x20\x20\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\
+\x65\x22\x0d\x0a\x20\x20\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\
+\x30\x20\x30\x20\x32\x34\x20\x32\x34\x22\x0d\x0a\x20\x20\x20\x68\
+\x65\x69\x67\x68\x74\x3d\x22\x32\x34\x22\x0d\x0a\x20\x20\x20\x77\
+\x69\x64\x74\x68\x3d\x22\x32\x34\x22\x3e\x0d\x0a\x20\x20\x3c\x6d\
+\x65\x74\x61\x64\x61\x74\x61\x0d\x0a\x20\x20\x20\x20\x20\x69\x64\
+\x3d\x22\x6d\x65\x74\x61\x64\x61\x74\x61\x31\x32\x22\x3e\x0d\x0a\
+\x20\x20\x20\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\x3e\x0d\x0a\x20\
+\x20\x20\x20\x20\x20\x3c\x63\x63\x3a\x57\x6f\x72\x6b\x0d\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x61\x62\x6f\x75\
+\x74\x3d\x22\x22\x3e\x0d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\
+\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x69\x6d\x61\x67\x65\x2f\
+\x73\x76\x67\x2b\x78\x6d\x6c\x3c\x2f\x64\x63\x3a\x66\x6f\x72\x6d\
+\x61\x74\x3e\x0d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\
+\x3a\x74\x79\x70\x65\x0d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x72\x64\x66\x3a\x72\x65\x73\x6f\x75\x72\x63\x65\x3d\x22\
+\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\x72\x67\x2f\
+\x64\x63\x2f\x64\x63\x6d\x69\x74\x79\x70\x65\x2f\x53\x74\x69\x6c\
+\x6c\x49\x6d\x61\x67\x65\x22\x20\x2f\x3e\x0d\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x3c\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\x3c\x2f\
+\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\x0d\x0a\x20\x20\x20\x20\x20\
+\x20\x3c\x2f\x63\x63\x3a\x57\x6f\x72\x6b\x3e\x0d\x0a\x20\x20\x20\
+\x20\x3c\x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x0d\x0a\x20\x20\x3c\
+\x2f\x6d\x65\x74\x61\x64\x61\x74\x61\x3e\x0d\x0a\x20\x20\x3c\x64\
+\x65\x66\x73\x0d\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\
+\x66\x73\x31\x30\x22\x20\x2f\x3e\x0d\x0a\x20\x20\x3c\x73\x6f\x64\
+\x69\x70\x6f\x64\x69\x3a\x6e\x61\x6d\x65\x64\x76\x69\x65\x77\x0d\
+\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\
+\x75\x72\x72\x65\x6e\x74\x2d\x6c\x61\x79\x65\x72\x3d\x22\x73\x76\
+\x67\x36\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x6d\x61\x78\x69\x6d\x69\
+\x7a\x65\x64\x3d\x22\x30\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\
+\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x79\x3d\
+\x22\x31\x38\x35\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\
+\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x78\x3d\x22\x31\
+\x33\x38\x37\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\
+\x61\x70\x65\x3a\x63\x79\x3d\x22\x31\x32\x2e\x31\x38\x37\x33\x38\
+\x32\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\
+\x65\x3a\x63\x78\x3d\x22\x31\x32\x2e\x34\x37\x33\x33\x38\x37\x22\
+\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\
+\x7a\x6f\x6f\x6d\x3d\x22\x32\x39\x2e\x36\x39\x38\x34\x38\x35\x22\
+\x0d\x0a\x20\x20\x20\x20\x20\x73\x68\x6f\x77\x67\x72\x69\x64\x3d\
+\x22\x66\x61\x6c\x73\x65\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x64\
+\x3d\x22\x6e\x61\x6d\x65\x64\x76\x69\x65\x77\x38\x22\x0d\x0a\x20\
\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\
-\x64\x6f\x77\x2d\x6d\x61\x78\x69\x6d\x69\x7a\x65\x64\x3d\x22\x30\
-\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\
-\x77\x69\x6e\x64\x6f\x77\x2d\x79\x3d\x22\x31\x38\x35\x22\x0a\x20\
-\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\
-\x64\x6f\x77\x2d\x78\x3d\x22\x31\x33\x38\x37\x22\x0a\x20\x20\x20\
-\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x79\x3d\x22\x31\
-\x32\x2e\x31\x38\x37\x33\x38\x32\x22\x0a\x20\x20\x20\x20\x20\x69\
-\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x78\x3d\x22\x31\x32\x2e\x34\
-\x37\x33\x33\x38\x37\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\
-\x63\x61\x70\x65\x3a\x7a\x6f\x6f\x6d\x3d\x22\x32\x39\x2e\x36\x39\
-\x38\x34\x38\x35\x22\x0a\x20\x20\x20\x20\x20\x73\x68\x6f\x77\x67\
-\x72\x69\x64\x3d\x22\x66\x61\x6c\x73\x65\x22\x0a\x20\x20\x20\x20\
-\x20\x69\x64\x3d\x22\x6e\x61\x6d\x65\x64\x76\x69\x65\x77\x38\x22\
-\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\
-\x69\x6e\x64\x6f\x77\x2d\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x31\
-\x32\x38\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\
-\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x77\x69\x64\x74\x68\x3d\x22\
-\x31\x39\x37\x34\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\
+\x64\x6f\x77\x2d\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x31\x32\x38\
+\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\
+\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x77\x69\x64\x74\x68\x3d\x22\x31\
+\x39\x37\x34\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\
\x61\x70\x65\x3a\x70\x61\x67\x65\x73\x68\x61\x64\x6f\x77\x3d\x22\
-\x32\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\
-\x3a\x70\x61\x67\x65\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x30\x22\
-\x0a\x20\x20\x20\x20\x20\x67\x75\x69\x64\x65\x74\x6f\x6c\x65\x72\
-\x61\x6e\x63\x65\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x20\x20\x67\
-\x72\x69\x64\x74\x6f\x6c\x65\x72\x61\x6e\x63\x65\x3d\x22\x31\x30\
-\x22\x0a\x20\x20\x20\x20\x20\x6f\x62\x6a\x65\x63\x74\x74\x6f\x6c\
-\x65\x72\x61\x6e\x63\x65\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x20\
-\x20\x62\x6f\x72\x64\x65\x72\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\
-\x31\x22\x0a\x20\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x63\x6f\
-\x6c\x6f\x72\x3d\x22\x23\x36\x36\x36\x36\x36\x36\x22\x0a\x20\x20\
-\x20\x20\x20\x70\x61\x67\x65\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x66\
-\x66\x66\x66\x66\x66\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\
-\x68\x0a\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\
-\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\
-\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\
-\x64\x74\x68\x3a\x31\x2e\x38\x39\x34\x34\x33\x3b\x73\x74\x72\x6f\
-\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\
-\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\
-\x3a\x6d\x69\x74\x65\x72\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\
-\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\
-\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\
-\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\
-\x31\x22\x0a\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x32\x2e\x38\
-\x39\x35\x37\x37\x30\x36\x2c\x33\x2e\x37\x33\x37\x35\x36\x34\x34\
-\x20\x48\x20\x32\x30\x2e\x32\x33\x36\x37\x32\x33\x22\x0a\x20\x20\
-\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x38\x35\x37\x22\x0a\
-\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\
-\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\
-\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\
-\x0a\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\
-\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\
-\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\
-\x74\x68\x3a\x31\x2e\x38\x39\x34\x34\x33\x3b\x73\x74\x72\x6f\x6b\
-\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\
-\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\
-\x6d\x69\x74\x65\x72\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\
-\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\
-\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x3b\
-\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\
-\x22\x0a\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x32\x2e\x38\x39\
-\x35\x37\x37\x30\x36\x2c\x31\x31\x2e\x34\x33\x37\x31\x37\x32\x20\
-\x48\x20\x32\x30\x2e\x32\x33\x36\x37\x32\x33\x22\x0a\x20\x20\x20\
-\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x38\x35\x39\x22\x0a\x20\
-\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\
-\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\
-\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\x0a\
+\x32\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\
+\x65\x3a\x70\x61\x67\x65\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x30\
+\x22\x0d\x0a\x20\x20\x20\x20\x20\x67\x75\x69\x64\x65\x74\x6f\x6c\
+\x65\x72\x61\x6e\x63\x65\x3d\x22\x31\x30\x22\x0d\x0a\x20\x20\x20\
+\x20\x20\x67\x72\x69\x64\x74\x6f\x6c\x65\x72\x61\x6e\x63\x65\x3d\
+\x22\x31\x30\x22\x0d\x0a\x20\x20\x20\x20\x20\x6f\x62\x6a\x65\x63\
+\x74\x74\x6f\x6c\x65\x72\x61\x6e\x63\x65\x3d\x22\x31\x30\x22\x0d\
+\x0a\x20\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x6f\x70\x61\x63\
+\x69\x74\x79\x3d\x22\x31\x22\x0d\x0a\x20\x20\x20\x20\x20\x62\x6f\
+\x72\x64\x65\x72\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x36\x36\x36\x36\
+\x36\x36\x22\x0d\x0a\x20\x20\x20\x20\x20\x70\x61\x67\x65\x63\x6f\
+\x6c\x6f\x72\x3d\x22\x23\x66\x66\x66\x66\x66\x66\x22\x20\x2f\x3e\
+\x0d\x0a\x20\x20\x3c\x70\x61\x74\x68\x0d\x0a\x20\x20\x20\x20\x20\
+\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\x65\
+\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\
+\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x31\x2e\x38\
+\x39\x34\x34\x33\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\
+\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\
+\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x6d\x69\x74\x65\x72\x3b\
+\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
+\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\
+\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\
+\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x22\x0d\x0a\x20\x20\x20\
+\x20\x20\x64\x3d\x22\x4d\x20\x32\x2e\x38\x39\x35\x37\x37\x30\x36\
+\x2c\x33\x2e\x37\x33\x37\x35\x36\x34\x34\x20\x48\x20\x32\x30\x2e\
+\x32\x33\x36\x37\x32\x33\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x64\
+\x3d\x22\x70\x61\x74\x68\x38\x35\x37\x22\x0d\x0a\x20\x20\x20\x20\
+\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\
+\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\
+\x22\x20\x2f\x3e\x0d\x0a\x20\x20\x3c\x70\x61\x74\x68\x0d\x0a\x20\
+\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\
+\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\
+\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\
+\x3a\x31\x2e\x38\x39\x34\x34\x33\x3b\x73\x74\x72\x6f\x6b\x65\x2d\
+\x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\
+\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x6d\x69\
+\x74\x65\x72\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\
+\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\
+\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\
+\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x22\x0d\
+\x0a\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x32\x2e\x38\x39\x35\
+\x37\x37\x30\x36\x2c\x31\x31\x2e\x34\x33\x37\x31\x37\x32\x20\x48\
+\x20\x32\x30\x2e\x32\x33\x36\x37\x32\x33\x22\x0d\x0a\x20\x20\x20\
+\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x38\x35\x39\x22\x0d\x0a\
\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\
\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\
-\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\
-\x61\x74\x68\x38\x35\x35\x22\x0a\x20\x20\x20\x20\x20\x64\x3d\x22\
-\x4d\x20\x32\x2e\x38\x39\x35\x37\x37\x30\x36\x2c\x37\x2e\x35\x38\
-\x37\x33\x36\x38\x31\x20\x48\x20\x32\x30\x2e\x32\x33\x36\x37\x32\
-\x33\x22\x0a\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\
-\x69\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x3a\
-\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\
-\x69\x64\x74\x68\x3a\x31\x2e\x38\x39\x34\x34\x33\x3b\x73\x74\x72\
-\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\
-\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\
-\x6e\x3a\x6d\x69\x74\x65\x72\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\
-\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\
-\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\
-\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\
-\x3a\x31\x22\x20\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x07\x9d\
+\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0d\x0a\x20\x20\x3c\x70\x61\x74\
+\x68\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\
+\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\
+\x74\x75\x72\x65\x3d\x22\x30\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\
+\x64\x3d\x22\x70\x61\x74\x68\x38\x35\x35\x22\x0d\x0a\x20\x20\x20\
+\x20\x20\x64\x3d\x22\x4d\x20\x32\x2e\x38\x39\x35\x37\x37\x30\x36\
+\x2c\x37\x2e\x35\x38\x37\x33\x36\x38\x31\x20\x48\x20\x32\x30\x2e\
+\x32\x33\x36\x37\x32\x33\x22\x0d\x0a\x20\x20\x20\x20\x20\x73\x74\
+\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\
+\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\
+\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x31\x2e\x38\x39\x34\
+\x34\x33\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\
+\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\
+\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x6d\x69\x74\x65\x72\x3b\x73\x74\
+\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\
+\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\
+\x61\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\
+\x70\x61\x63\x69\x74\x79\x3a\x31\x22\x20\x2f\x3e\x0d\x0a\x3c\x2f\
+\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x07\xe6\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\
\x2d\x38\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\
-\x6e\x6f\x22\x3f\x3e\x0a\x3c\x73\x76\x67\x0a\x20\x20\x20\x78\x6d\
-\x6c\x6e\x73\x3a\x64\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\
-\x75\x72\x6c\x2e\x6f\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\x6d\x65\
-\x6e\x74\x73\x2f\x31\x2e\x31\x2f\x22\x0a\x20\x20\x20\x78\x6d\x6c\
-\x6e\x73\x3a\x63\x63\x3d\x22\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\x6e\x73\x23\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\
-\x72\x64\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x30\x32\x2f\x32\
-\x32\x2d\x72\x64\x66\x2d\x73\x79\x6e\x74\x61\x78\x2d\x6e\x73\x23\
-\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x73\x76\x67\x3d\x22\
-\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
-\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\x78\
-\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\
-\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\
-\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x73\x6f\x64\x69\x70\
-\x6f\x64\x69\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x73\x6f\x64\x69\
-\x70\x6f\x64\x69\x2e\x73\x6f\x75\x72\x63\x65\x66\x6f\x72\x67\x65\
-\x2e\x6e\x65\x74\x2f\x44\x54\x44\x2f\x73\x6f\x64\x69\x70\x6f\x64\
-\x69\x2d\x30\x2e\x64\x74\x64\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\
-\x73\x3a\x69\x6e\x6b\x73\x63\x61\x70\x65\x3d\x22\x68\x74\x74\x70\
-\x3a\x2f\x2f\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\
-\x6f\x72\x67\x2f\x6e\x61\x6d\x65\x73\x70\x61\x63\x65\x73\x2f\x69\
-\x6e\x6b\x73\x63\x61\x70\x65\x22\x0a\x20\x20\x20\x69\x6e\x6b\x73\
-\x63\x61\x70\x65\x3a\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x72\x63\x31\x20\x28\x30\x39\x39\x36\x30\x64\x36\x66\x30\x35\
-\x2c\x20\x32\x30\x32\x30\x2d\x30\x34\x2d\x30\x39\x29\x22\x0a\x20\
-\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x64\x6f\x63\x6e\x61\
-\x6d\x65\x3d\x22\x61\x6c\x65\x72\x74\x2d\x6f\x63\x74\x61\x67\x6f\
-\x6e\x2d\x72\x65\x64\x2e\x73\x76\x67\x22\x0a\x20\x20\x20\x69\x64\
-\x3d\x22\x73\x76\x67\x38\x22\x0a\x20\x20\x20\x76\x65\x72\x73\x69\
-\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x0a\x20\x20\x20\x63\x6c\x61\x73\
-\x73\x3d\x22\x66\x65\x61\x74\x68\x65\x72\x20\x66\x65\x61\x74\x68\
-\x65\x72\x2d\x61\x6c\x65\x72\x74\x2d\x6f\x63\x74\x61\x67\x6f\x6e\
-\x22\x0a\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\
-\x6a\x6f\x69\x6e\x3d\x22\x72\x6f\x75\x6e\x64\x22\x0a\x20\x20\x20\
-\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x22\
-\x72\x6f\x75\x6e\x64\x22\x0a\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\
-\x2d\x77\x69\x64\x74\x68\x3d\x22\x32\x22\x0a\x20\x20\x20\x73\x74\
-\x72\x6f\x6b\x65\x3d\x22\x63\x75\x72\x72\x65\x6e\x74\x43\x6f\x6c\
-\x6f\x72\x22\x0a\x20\x20\x20\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\
-\x65\x22\x0a\x20\x20\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\
-\x20\x30\x20\x32\x34\x20\x32\x34\x22\x0a\x20\x20\x20\x68\x65\x69\
-\x67\x68\x74\x3d\x22\x32\x34\x22\x0a\x20\x20\x20\x77\x69\x64\x74\
-\x68\x3d\x22\x32\x34\x22\x3e\x0a\x20\x20\x3c\x6d\x65\x74\x61\x64\
-\x61\x74\x61\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6d\x65\x74\
-\x61\x64\x61\x74\x61\x31\x34\x22\x3e\x0a\x20\x20\x20\x20\x3c\x72\
-\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x63\
-\x63\x3a\x57\x6f\x72\x6b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
-\x72\x64\x66\x3a\x61\x62\x6f\x75\x74\x3d\x22\x22\x3e\x0a\x20\x20\
-\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\
-\x3e\x69\x6d\x61\x67\x65\x2f\x73\x76\x67\x2b\x78\x6d\x6c\x3c\x2f\
-\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x0a\x20\x20\x20\x20\x20\
-\x20\x20\x20\x3c\x64\x63\x3a\x74\x79\x70\x65\x0a\x20\x20\x20\x20\
-\x20\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x72\x65\x73\x6f\x75\
-\x72\x63\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\
-\x2e\x6f\x72\x67\x2f\x64\x63\x2f\x64\x63\x6d\x69\x74\x79\x70\x65\
-\x2f\x53\x74\x69\x6c\x6c\x49\x6d\x61\x67\x65\x22\x20\x2f\x3e\x0a\
-\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x74\x69\x74\x6c\
-\x65\x3e\x3c\x2f\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\
-\x20\x20\x20\x20\x3c\x2f\x63\x63\x3a\x57\x6f\x72\x6b\x3e\x0a\x20\
-\x20\x20\x20\x3c\x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\
-\x3c\x2f\x6d\x65\x74\x61\x64\x61\x74\x61\x3e\x0a\x20\x20\x3c\x64\
-\x65\x66\x73\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\x66\
-\x73\x31\x32\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x73\x6f\x64\x69\x70\
-\x6f\x64\x69\x3a\x6e\x61\x6d\x65\x64\x76\x69\x65\x77\x0a\x20\x20\
-\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x75\x72\x72\
-\x65\x6e\x74\x2d\x6c\x61\x79\x65\x72\x3d\x22\x73\x76\x67\x38\x22\
-\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\
-\x69\x6e\x64\x6f\x77\x2d\x6d\x61\x78\x69\x6d\x69\x7a\x65\x64\x3d\
-\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\
-\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x79\x3d\x22\x32\x38\x31\x22\
-\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\
-\x69\x6e\x64\x6f\x77\x2d\x78\x3d\x22\x31\x34\x33\x33\x22\x0a\x20\
-\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x79\x3d\
-\x22\x31\x32\x2e\x34\x30\x39\x37\x39\x37\x22\x0a\x20\x20\x20\x20\
-\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x78\x3d\x22\x31\x32\
-\x2e\x38\x32\x38\x32\x31\x36\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\
-\x6b\x73\x63\x61\x70\x65\x3a\x7a\x6f\x6f\x6d\x3d\x22\x32\x31\x22\
-\x0a\x20\x20\x20\x20\x20\x73\x68\x6f\x77\x67\x72\x69\x64\x3d\x22\
-\x66\x61\x6c\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\
-\x6e\x61\x6d\x65\x64\x76\x69\x65\x77\x31\x30\x22\x0a\x20\x20\x20\
-\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\
-\x77\x2d\x68\x65\x69\x67\x68\x74\x3d\x22\x39\x35\x39\x22\x0a\x20\
-\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\
-\x64\x6f\x77\x2d\x77\x69\x64\x74\x68\x3d\x22\x31\x35\x34\x32\x22\
+\x6e\x6f\x22\x3f\x3e\x0d\x0a\x3c\x73\x76\x67\x0d\x0a\x20\x20\x20\
+\x78\x6d\x6c\x6e\x73\x3a\x64\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\
+\x2f\x70\x75\x72\x6c\x2e\x6f\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\
+\x6d\x65\x6e\x74\x73\x2f\x31\x2e\x31\x2f\x22\x0d\x0a\x20\x20\x20\
+\x78\x6d\x6c\x6e\x73\x3a\x63\x63\x3d\x22\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\x6e\x73\x23\x22\x0d\x0a\x20\x20\x20\x78\x6d\
+\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\
+\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\x2d\x73\x79\x6e\x74\x61\x78\
+\x2d\x6e\x73\x23\x22\x0d\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\
+\x73\x76\x67\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\
+\x0d\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\
+\x30\x30\x2f\x73\x76\x67\x22\x0d\x0a\x20\x20\x20\x78\x6d\x6c\x6e\
+\x73\x3a\x73\x6f\x64\x69\x70\x6f\x64\x69\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2e\x73\x6f\x75\x72\
+\x63\x65\x66\x6f\x72\x67\x65\x2e\x6e\x65\x74\x2f\x44\x54\x44\x2f\
+\x73\x6f\x64\x69\x70\x6f\x64\x69\x2d\x30\x2e\x64\x74\x64\x22\x0d\
+\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x69\
+\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x6e\x61\x6d\x65\
+\x73\x70\x61\x63\x65\x73\x2f\x69\x6e\x6b\x73\x63\x61\x70\x65\x22\
+\x0d\x0a\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x65\
+\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x30\x72\x63\x31\x20\x28\x30\
+\x39\x39\x36\x30\x64\x36\x66\x30\x35\x2c\x20\x32\x30\x32\x30\x2d\
+\x30\x34\x2d\x30\x39\x29\x22\x0d\x0a\x20\x20\x20\x73\x6f\x64\x69\
+\x70\x6f\x64\x69\x3a\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x61\x6c\
+\x65\x72\x74\x2d\x6f\x63\x74\x61\x67\x6f\x6e\x2d\x72\x65\x64\x2e\
+\x73\x76\x67\x22\x0d\x0a\x20\x20\x20\x69\x64\x3d\x22\x73\x76\x67\
+\x38\x22\x0d\x0a\x20\x20\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\
+\x31\x2e\x31\x22\x0d\x0a\x20\x20\x20\x63\x6c\x61\x73\x73\x3d\x22\
+\x66\x65\x61\x74\x68\x65\x72\x20\x66\x65\x61\x74\x68\x65\x72\x2d\
+\x61\x6c\x65\x72\x74\x2d\x6f\x63\x74\x61\x67\x6f\x6e\x22\x0d\x0a\
+\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\
+\x69\x6e\x3d\x22\x72\x6f\x75\x6e\x64\x22\x0d\x0a\x20\x20\x20\x73\
+\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x22\x72\
+\x6f\x75\x6e\x64\x22\x0d\x0a\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\
+\x2d\x77\x69\x64\x74\x68\x3d\x22\x32\x22\x0d\x0a\x20\x20\x20\x73\
+\x74\x72\x6f\x6b\x65\x3d\x22\x63\x75\x72\x72\x65\x6e\x74\x43\x6f\
+\x6c\x6f\x72\x22\x0d\x0a\x20\x20\x20\x66\x69\x6c\x6c\x3d\x22\x6e\
+\x6f\x6e\x65\x22\x0d\x0a\x20\x20\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x32\x34\x20\x32\x34\x22\x0d\x0a\x20\x20\
+\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x32\x34\x22\x0d\x0a\x20\x20\
+\x20\x77\x69\x64\x74\x68\x3d\x22\x32\x34\x22\x3e\x0d\x0a\x20\x20\
+\x3c\x6d\x65\x74\x61\x64\x61\x74\x61\x0d\x0a\x20\x20\x20\x20\x20\
+\x69\x64\x3d\x22\x6d\x65\x74\x61\x64\x61\x74\x61\x31\x34\x22\x3e\
+\x0d\x0a\x20\x20\x20\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\x3e\x0d\
+\x0a\x20\x20\x20\x20\x20\x20\x3c\x63\x63\x3a\x57\x6f\x72\x6b\x0d\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x61\x62\
+\x6f\x75\x74\x3d\x22\x22\x3e\x0d\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x3c\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x69\x6d\x61\x67\
+\x65\x2f\x73\x76\x67\x2b\x78\x6d\x6c\x3c\x2f\x64\x63\x3a\x66\x6f\
+\x72\x6d\x61\x74\x3e\x0d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\
+\x64\x63\x3a\x74\x79\x70\x65\x0d\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x72\x64\x66\x3a\x72\x65\x73\x6f\x75\x72\x63\x65\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\x72\
+\x67\x2f\x64\x63\x2f\x64\x63\x6d\x69\x74\x79\x70\x65\x2f\x53\x74\
+\x69\x6c\x6c\x49\x6d\x61\x67\x65\x22\x20\x2f\x3e\x0d\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\
+\x3c\x2f\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\x0d\x0a\x20\x20\x20\
+\x20\x20\x20\x3c\x2f\x63\x63\x3a\x57\x6f\x72\x6b\x3e\x0d\x0a\x20\
+\x20\x20\x20\x3c\x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x0d\x0a\x20\
+\x20\x3c\x2f\x6d\x65\x74\x61\x64\x61\x74\x61\x3e\x0d\x0a\x20\x20\
+\x3c\x64\x65\x66\x73\x0d\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\
+\x64\x65\x66\x73\x31\x32\x22\x20\x2f\x3e\x0d\x0a\x20\x20\x3c\x73\
+\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\x61\x6d\x65\x64\x76\x69\x65\
+\x77\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\
+\x3a\x63\x75\x72\x72\x65\x6e\x74\x2d\x6c\x61\x79\x65\x72\x3d\x22\
+\x73\x76\x67\x38\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\
+\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x6d\x61\x78\x69\
+\x6d\x69\x7a\x65\x64\x3d\x22\x30\x22\x0d\x0a\x20\x20\x20\x20\x20\
+\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\
+\x79\x3d\x22\x32\x38\x31\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\
+\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x78\x3d\
+\x22\x31\x34\x33\x33\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\
+\x73\x63\x61\x70\x65\x3a\x63\x79\x3d\x22\x31\x32\x2e\x34\x30\x39\
+\x37\x39\x37\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\
+\x61\x70\x65\x3a\x63\x78\x3d\x22\x31\x32\x2e\x38\x32\x38\x32\x31\
+\x36\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\
+\x65\x3a\x7a\x6f\x6f\x6d\x3d\x22\x32\x31\x22\x0d\x0a\x20\x20\x20\
+\x20\x20\x73\x68\x6f\x77\x67\x72\x69\x64\x3d\x22\x66\x61\x6c\x73\
+\x65\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6e\x61\x6d\
+\x65\x64\x76\x69\x65\x77\x31\x30\x22\x0d\x0a\x20\x20\x20\x20\x20\
+\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\
+\x68\x65\x69\x67\x68\x74\x3d\x22\x39\x35\x39\x22\x0d\x0a\x20\x20\
+\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\
+\x6f\x77\x2d\x77\x69\x64\x74\x68\x3d\x22\x31\x35\x34\x32\x22\x0d\
\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\
-\x61\x67\x65\x73\x68\x61\x64\x6f\x77\x3d\x22\x32\x22\x0a\x20\x20\
-\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x61\x67\x65\
-\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\
-\x20\x67\x75\x69\x64\x65\x74\x6f\x6c\x65\x72\x61\x6e\x63\x65\x3d\
-\x22\x31\x30\x22\x0a\x20\x20\x20\x20\x20\x67\x72\x69\x64\x74\x6f\
-\x6c\x65\x72\x61\x6e\x63\x65\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\
-\x20\x20\x6f\x62\x6a\x65\x63\x74\x74\x6f\x6c\x65\x72\x61\x6e\x63\
-\x65\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x20\x20\x62\x6f\x72\x64\
-\x65\x72\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x31\x22\x0a\x20\x20\
-\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x63\x6f\x6c\x6f\x72\x3d\x22\
-\x23\x36\x36\x36\x36\x36\x36\x22\x0a\x20\x20\x20\x20\x20\x70\x61\
-\x67\x65\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x66\x66\x66\x66\x66\x66\
-\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x0a\
-\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\
-\x3a\x23\x30\x30\x66\x66\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x69\
-\x64\x3d\x22\x70\x6f\x6c\x79\x67\x6f\x6e\x32\x22\x0a\x20\x20\x20\
-\x20\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x37\x2e\x38\x36\x20\x32\
-\x20\x31\x36\x2e\x31\x34\x20\x32\x20\x32\x32\x20\x37\x2e\x38\x36\
-\x20\x32\x32\x20\x31\x36\x2e\x31\x34\x20\x31\x36\x2e\x31\x34\x20\
-\x32\x32\x20\x37\x2e\x38\x36\x20\x32\x32\x20\x32\x20\x31\x36\x2e\
-\x31\x34\x20\x32\x20\x37\x2e\x38\x36\x20\x37\x2e\x38\x36\x20\x32\
-\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x6c\x69\x6e\x65\x0a\x20\x20\x20\
-\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x34\x22\x0a\x20\x20\x20\
-\x20\x20\x79\x32\x3d\x22\x31\x32\x22\x0a\x20\x20\x20\x20\x20\x78\
-\x32\x3d\x22\x31\x32\x22\x0a\x20\x20\x20\x20\x20\x79\x31\x3d\x22\
-\x38\x22\x0a\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x31\x32\x22\x20\
-\x2f\x3e\x0a\x20\x20\x3c\x6c\x69\x6e\x65\x0a\x20\x20\x20\x20\x20\
-\x69\x64\x3d\x22\x6c\x69\x6e\x65\x36\x22\x0a\x20\x20\x20\x20\x20\
-\x79\x32\x3d\x22\x31\x36\x22\x0a\x20\x20\x20\x20\x20\x78\x32\x3d\
-\x22\x31\x32\x2e\x30\x31\x22\x0a\x20\x20\x20\x20\x20\x79\x31\x3d\
-\x22\x31\x36\x22\x0a\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x31\x32\
-\x22\x20\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x61\x67\x65\x73\x68\x61\x64\x6f\x77\x3d\x22\x32\x22\x0d\x0a\x20\
+\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x61\x67\
+\x65\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x30\x22\x0d\x0a\x20\x20\
+\x20\x20\x20\x67\x75\x69\x64\x65\x74\x6f\x6c\x65\x72\x61\x6e\x63\
+\x65\x3d\x22\x31\x30\x22\x0d\x0a\x20\x20\x20\x20\x20\x67\x72\x69\
+\x64\x74\x6f\x6c\x65\x72\x61\x6e\x63\x65\x3d\x22\x31\x30\x22\x0d\
+\x0a\x20\x20\x20\x20\x20\x6f\x62\x6a\x65\x63\x74\x74\x6f\x6c\x65\
+\x72\x61\x6e\x63\x65\x3d\x22\x31\x30\x22\x0d\x0a\x20\x20\x20\x20\
+\x20\x62\x6f\x72\x64\x65\x72\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\
+\x31\x22\x0d\x0a\x20\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x63\
+\x6f\x6c\x6f\x72\x3d\x22\x23\x36\x36\x36\x36\x36\x36\x22\x0d\x0a\
+\x20\x20\x20\x20\x20\x70\x61\x67\x65\x63\x6f\x6c\x6f\x72\x3d\x22\
+\x23\x66\x66\x66\x66\x66\x66\x22\x20\x2f\x3e\x0d\x0a\x20\x20\x3c\
+\x70\x6f\x6c\x79\x67\x6f\x6e\x0d\x0a\x20\x20\x20\x20\x20\x73\x74\
+\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x30\x30\x66\x66\x30\
+\x30\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x6f\x6c\
+\x79\x67\x6f\x6e\x32\x22\x0d\x0a\x20\x20\x20\x20\x20\x70\x6f\x69\
+\x6e\x74\x73\x3d\x22\x37\x2e\x38\x36\x20\x32\x20\x31\x36\x2e\x31\
+\x34\x20\x32\x20\x32\x32\x20\x37\x2e\x38\x36\x20\x32\x32\x20\x31\
+\x36\x2e\x31\x34\x20\x31\x36\x2e\x31\x34\x20\x32\x32\x20\x37\x2e\
+\x38\x36\x20\x32\x32\x20\x32\x20\x31\x36\x2e\x31\x34\x20\x32\x20\
+\x37\x2e\x38\x36\x20\x37\x2e\x38\x36\x20\x32\x22\x20\x2f\x3e\x0d\
+\x0a\x20\x20\x3c\x6c\x69\x6e\x65\x0d\x0a\x20\x20\x20\x20\x20\x69\
+\x64\x3d\x22\x6c\x69\x6e\x65\x34\x22\x0d\x0a\x20\x20\x20\x20\x20\
+\x79\x32\x3d\x22\x31\x32\x22\x0d\x0a\x20\x20\x20\x20\x20\x78\x32\
+\x3d\x22\x31\x32\x22\x0d\x0a\x20\x20\x20\x20\x20\x79\x31\x3d\x22\
+\x38\x22\x0d\x0a\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x31\x32\x22\
+\x20\x2f\x3e\x0d\x0a\x20\x20\x3c\x6c\x69\x6e\x65\x0d\x0a\x20\x20\
+\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x36\x22\x0d\x0a\x20\
+\x20\x20\x20\x20\x79\x32\x3d\x22\x31\x36\x22\x0d\x0a\x20\x20\x20\
+\x20\x20\x78\x32\x3d\x22\x31\x32\x2e\x30\x31\x22\x0d\x0a\x20\x20\
+\x20\x20\x20\x79\x31\x3d\x22\x31\x36\x22\x0d\x0a\x20\x20\x20\x20\
+\x20\x78\x31\x3d\x22\x31\x32\x22\x20\x2f\x3e\x0d\x0a\x3c\x2f\x73\
+\x76\x67\x3e\x0d\x0a\
\x00\x00\x01\x90\
\x3c\
\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
@@ -918,233 +969,239 @@
\x20\x79\x31\x3d\x22\x39\x22\x20\x78\x32\x3d\x22\x31\x38\x22\x20\
\x79\x32\x3d\x22\x31\x35\x22\x3e\x3c\x2f\x6c\x69\x6e\x65\x3e\x3c\
\x2f\x73\x76\x67\x3e\
-\x00\x00\x07\x9d\
+\x00\x00\x07\xe6\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\
\x2d\x38\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\
-\x6e\x6f\x22\x3f\x3e\x0a\x3c\x73\x76\x67\x0a\x20\x20\x20\x78\x6d\
-\x6c\x6e\x73\x3a\x64\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\
-\x75\x72\x6c\x2e\x6f\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\x6d\x65\
-\x6e\x74\x73\x2f\x31\x2e\x31\x2f\x22\x0a\x20\x20\x20\x78\x6d\x6c\
-\x6e\x73\x3a\x63\x63\x3d\x22\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\x6e\x73\x23\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\
-\x72\x64\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x30\x32\x2f\x32\
-\x32\x2d\x72\x64\x66\x2d\x73\x79\x6e\x74\x61\x78\x2d\x6e\x73\x23\
-\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x73\x76\x67\x3d\x22\
-\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
-\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\x78\
-\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\
-\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\
-\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x73\x6f\x64\x69\x70\
-\x6f\x64\x69\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x73\x6f\x64\x69\
-\x70\x6f\x64\x69\x2e\x73\x6f\x75\x72\x63\x65\x66\x6f\x72\x67\x65\
-\x2e\x6e\x65\x74\x2f\x44\x54\x44\x2f\x73\x6f\x64\x69\x70\x6f\x64\
-\x69\x2d\x30\x2e\x64\x74\x64\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\
-\x73\x3a\x69\x6e\x6b\x73\x63\x61\x70\x65\x3d\x22\x68\x74\x74\x70\
-\x3a\x2f\x2f\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\
-\x6f\x72\x67\x2f\x6e\x61\x6d\x65\x73\x70\x61\x63\x65\x73\x2f\x69\
-\x6e\x6b\x73\x63\x61\x70\x65\x22\x0a\x20\x20\x20\x69\x6e\x6b\x73\
-\x63\x61\x70\x65\x3a\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x72\x63\x31\x20\x28\x30\x39\x39\x36\x30\x64\x36\x66\x30\x35\
-\x2c\x20\x32\x30\x32\x30\x2d\x30\x34\x2d\x30\x39\x29\x22\x0a\x20\
-\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x64\x6f\x63\x6e\x61\
-\x6d\x65\x3d\x22\x61\x6c\x65\x72\x74\x2d\x6f\x63\x74\x61\x67\x6f\
-\x6e\x2d\x72\x65\x64\x2e\x73\x76\x67\x22\x0a\x20\x20\x20\x69\x64\
-\x3d\x22\x73\x76\x67\x38\x22\x0a\x20\x20\x20\x76\x65\x72\x73\x69\
-\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x0a\x20\x20\x20\x63\x6c\x61\x73\
-\x73\x3d\x22\x66\x65\x61\x74\x68\x65\x72\x20\x66\x65\x61\x74\x68\
-\x65\x72\x2d\x61\x6c\x65\x72\x74\x2d\x6f\x63\x74\x61\x67\x6f\x6e\
-\x22\x0a\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\
-\x6a\x6f\x69\x6e\x3d\x22\x72\x6f\x75\x6e\x64\x22\x0a\x20\x20\x20\
-\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x22\
-\x72\x6f\x75\x6e\x64\x22\x0a\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\
-\x2d\x77\x69\x64\x74\x68\x3d\x22\x32\x22\x0a\x20\x20\x20\x73\x74\
-\x72\x6f\x6b\x65\x3d\x22\x63\x75\x72\x72\x65\x6e\x74\x43\x6f\x6c\
-\x6f\x72\x22\x0a\x20\x20\x20\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\
-\x65\x22\x0a\x20\x20\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\
-\x20\x30\x20\x32\x34\x20\x32\x34\x22\x0a\x20\x20\x20\x68\x65\x69\
-\x67\x68\x74\x3d\x22\x32\x34\x22\x0a\x20\x20\x20\x77\x69\x64\x74\
-\x68\x3d\x22\x32\x34\x22\x3e\x0a\x20\x20\x3c\x6d\x65\x74\x61\x64\
-\x61\x74\x61\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6d\x65\x74\
-\x61\x64\x61\x74\x61\x31\x34\x22\x3e\x0a\x20\x20\x20\x20\x3c\x72\
-\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x63\
-\x63\x3a\x57\x6f\x72\x6b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
-\x72\x64\x66\x3a\x61\x62\x6f\x75\x74\x3d\x22\x22\x3e\x0a\x20\x20\
-\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\
-\x3e\x69\x6d\x61\x67\x65\x2f\x73\x76\x67\x2b\x78\x6d\x6c\x3c\x2f\
-\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x0a\x20\x20\x20\x20\x20\
-\x20\x20\x20\x3c\x64\x63\x3a\x74\x79\x70\x65\x0a\x20\x20\x20\x20\
-\x20\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x72\x65\x73\x6f\x75\
-\x72\x63\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\
-\x2e\x6f\x72\x67\x2f\x64\x63\x2f\x64\x63\x6d\x69\x74\x79\x70\x65\
-\x2f\x53\x74\x69\x6c\x6c\x49\x6d\x61\x67\x65\x22\x20\x2f\x3e\x0a\
-\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x74\x69\x74\x6c\
-\x65\x3e\x3c\x2f\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\
-\x20\x20\x20\x20\x3c\x2f\x63\x63\x3a\x57\x6f\x72\x6b\x3e\x0a\x20\
-\x20\x20\x20\x3c\x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\
-\x3c\x2f\x6d\x65\x74\x61\x64\x61\x74\x61\x3e\x0a\x20\x20\x3c\x64\
-\x65\x66\x73\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\x66\
-\x73\x31\x32\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x73\x6f\x64\x69\x70\
-\x6f\x64\x69\x3a\x6e\x61\x6d\x65\x64\x76\x69\x65\x77\x0a\x20\x20\
-\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x75\x72\x72\
-\x65\x6e\x74\x2d\x6c\x61\x79\x65\x72\x3d\x22\x73\x76\x67\x38\x22\
-\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\
-\x69\x6e\x64\x6f\x77\x2d\x6d\x61\x78\x69\x6d\x69\x7a\x65\x64\x3d\
-\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\
-\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x79\x3d\x22\x32\x38\x31\x22\
-\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\
-\x69\x6e\x64\x6f\x77\x2d\x78\x3d\x22\x31\x34\x33\x33\x22\x0a\x20\
-\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x79\x3d\
-\x22\x31\x32\x2e\x34\x30\x39\x37\x39\x37\x22\x0a\x20\x20\x20\x20\
-\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x78\x3d\x22\x31\x32\
-\x2e\x38\x32\x38\x32\x31\x36\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\
-\x6b\x73\x63\x61\x70\x65\x3a\x7a\x6f\x6f\x6d\x3d\x22\x32\x31\x22\
-\x0a\x20\x20\x20\x20\x20\x73\x68\x6f\x77\x67\x72\x69\x64\x3d\x22\
-\x66\x61\x6c\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\
-\x6e\x61\x6d\x65\x64\x76\x69\x65\x77\x31\x30\x22\x0a\x20\x20\x20\
-\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\
-\x77\x2d\x68\x65\x69\x67\x68\x74\x3d\x22\x39\x35\x39\x22\x0a\x20\
-\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\
-\x64\x6f\x77\x2d\x77\x69\x64\x74\x68\x3d\x22\x31\x35\x34\x32\x22\
+\x6e\x6f\x22\x3f\x3e\x0d\x0a\x3c\x73\x76\x67\x0d\x0a\x20\x20\x20\
+\x78\x6d\x6c\x6e\x73\x3a\x64\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\
+\x2f\x70\x75\x72\x6c\x2e\x6f\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\
+\x6d\x65\x6e\x74\x73\x2f\x31\x2e\x31\x2f\x22\x0d\x0a\x20\x20\x20\
+\x78\x6d\x6c\x6e\x73\x3a\x63\x63\x3d\x22\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\x6e\x73\x23\x22\x0d\x0a\x20\x20\x20\x78\x6d\
+\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\
+\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\x2d\x73\x79\x6e\x74\x61\x78\
+\x2d\x6e\x73\x23\x22\x0d\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\
+\x73\x76\x67\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\
+\x0d\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\
+\x30\x30\x2f\x73\x76\x67\x22\x0d\x0a\x20\x20\x20\x78\x6d\x6c\x6e\
+\x73\x3a\x73\x6f\x64\x69\x70\x6f\x64\x69\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2e\x73\x6f\x75\x72\
+\x63\x65\x66\x6f\x72\x67\x65\x2e\x6e\x65\x74\x2f\x44\x54\x44\x2f\
+\x73\x6f\x64\x69\x70\x6f\x64\x69\x2d\x30\x2e\x64\x74\x64\x22\x0d\
+\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x69\
+\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x6e\x61\x6d\x65\
+\x73\x70\x61\x63\x65\x73\x2f\x69\x6e\x6b\x73\x63\x61\x70\x65\x22\
+\x0d\x0a\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x65\
+\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x30\x72\x63\x31\x20\x28\x30\
+\x39\x39\x36\x30\x64\x36\x66\x30\x35\x2c\x20\x32\x30\x32\x30\x2d\
+\x30\x34\x2d\x30\x39\x29\x22\x0d\x0a\x20\x20\x20\x73\x6f\x64\x69\
+\x70\x6f\x64\x69\x3a\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x61\x6c\
+\x65\x72\x74\x2d\x6f\x63\x74\x61\x67\x6f\x6e\x2d\x72\x65\x64\x2e\
+\x73\x76\x67\x22\x0d\x0a\x20\x20\x20\x69\x64\x3d\x22\x73\x76\x67\
+\x38\x22\x0d\x0a\x20\x20\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\
+\x31\x2e\x31\x22\x0d\x0a\x20\x20\x20\x63\x6c\x61\x73\x73\x3d\x22\
+\x66\x65\x61\x74\x68\x65\x72\x20\x66\x65\x61\x74\x68\x65\x72\x2d\
+\x61\x6c\x65\x72\x74\x2d\x6f\x63\x74\x61\x67\x6f\x6e\x22\x0d\x0a\
+\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\
+\x69\x6e\x3d\x22\x72\x6f\x75\x6e\x64\x22\x0d\x0a\x20\x20\x20\x73\
+\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x22\x72\
+\x6f\x75\x6e\x64\x22\x0d\x0a\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\
+\x2d\x77\x69\x64\x74\x68\x3d\x22\x32\x22\x0d\x0a\x20\x20\x20\x73\
+\x74\x72\x6f\x6b\x65\x3d\x22\x63\x75\x72\x72\x65\x6e\x74\x43\x6f\
+\x6c\x6f\x72\x22\x0d\x0a\x20\x20\x20\x66\x69\x6c\x6c\x3d\x22\x6e\
+\x6f\x6e\x65\x22\x0d\x0a\x20\x20\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x32\x34\x20\x32\x34\x22\x0d\x0a\x20\x20\
+\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x32\x34\x22\x0d\x0a\x20\x20\
+\x20\x77\x69\x64\x74\x68\x3d\x22\x32\x34\x22\x3e\x0d\x0a\x20\x20\
+\x3c\x6d\x65\x74\x61\x64\x61\x74\x61\x0d\x0a\x20\x20\x20\x20\x20\
+\x69\x64\x3d\x22\x6d\x65\x74\x61\x64\x61\x74\x61\x31\x34\x22\x3e\
+\x0d\x0a\x20\x20\x20\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\x3e\x0d\
+\x0a\x20\x20\x20\x20\x20\x20\x3c\x63\x63\x3a\x57\x6f\x72\x6b\x0d\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x61\x62\
+\x6f\x75\x74\x3d\x22\x22\x3e\x0d\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x3c\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x69\x6d\x61\x67\
+\x65\x2f\x73\x76\x67\x2b\x78\x6d\x6c\x3c\x2f\x64\x63\x3a\x66\x6f\
+\x72\x6d\x61\x74\x3e\x0d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\
+\x64\x63\x3a\x74\x79\x70\x65\x0d\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x72\x64\x66\x3a\x72\x65\x73\x6f\x75\x72\x63\x65\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\x72\
+\x67\x2f\x64\x63\x2f\x64\x63\x6d\x69\x74\x79\x70\x65\x2f\x53\x74\
+\x69\x6c\x6c\x49\x6d\x61\x67\x65\x22\x20\x2f\x3e\x0d\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\
+\x3c\x2f\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\x0d\x0a\x20\x20\x20\
+\x20\x20\x20\x3c\x2f\x63\x63\x3a\x57\x6f\x72\x6b\x3e\x0d\x0a\x20\
+\x20\x20\x20\x3c\x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x0d\x0a\x20\
+\x20\x3c\x2f\x6d\x65\x74\x61\x64\x61\x74\x61\x3e\x0d\x0a\x20\x20\
+\x3c\x64\x65\x66\x73\x0d\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\
+\x64\x65\x66\x73\x31\x32\x22\x20\x2f\x3e\x0d\x0a\x20\x20\x3c\x73\
+\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\x61\x6d\x65\x64\x76\x69\x65\
+\x77\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\
+\x3a\x63\x75\x72\x72\x65\x6e\x74\x2d\x6c\x61\x79\x65\x72\x3d\x22\
+\x73\x76\x67\x38\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\
+\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x6d\x61\x78\x69\
+\x6d\x69\x7a\x65\x64\x3d\x22\x30\x22\x0d\x0a\x20\x20\x20\x20\x20\
+\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\
+\x79\x3d\x22\x32\x38\x31\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\
+\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x78\x3d\
+\x22\x31\x34\x33\x33\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\
+\x73\x63\x61\x70\x65\x3a\x63\x79\x3d\x22\x31\x32\x2e\x34\x30\x39\
+\x37\x39\x37\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\
+\x61\x70\x65\x3a\x63\x78\x3d\x22\x31\x32\x2e\x38\x32\x38\x32\x31\
+\x36\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\
+\x65\x3a\x7a\x6f\x6f\x6d\x3d\x22\x32\x31\x22\x0d\x0a\x20\x20\x20\
+\x20\x20\x73\x68\x6f\x77\x67\x72\x69\x64\x3d\x22\x66\x61\x6c\x73\
+\x65\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6e\x61\x6d\
+\x65\x64\x76\x69\x65\x77\x31\x30\x22\x0d\x0a\x20\x20\x20\x20\x20\
+\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\
+\x68\x65\x69\x67\x68\x74\x3d\x22\x39\x35\x39\x22\x0d\x0a\x20\x20\
+\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\
+\x6f\x77\x2d\x77\x69\x64\x74\x68\x3d\x22\x31\x35\x34\x32\x22\x0d\
\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\
-\x61\x67\x65\x73\x68\x61\x64\x6f\x77\x3d\x22\x32\x22\x0a\x20\x20\
-\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x61\x67\x65\
-\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\
-\x20\x67\x75\x69\x64\x65\x74\x6f\x6c\x65\x72\x61\x6e\x63\x65\x3d\
-\x22\x31\x30\x22\x0a\x20\x20\x20\x20\x20\x67\x72\x69\x64\x74\x6f\
-\x6c\x65\x72\x61\x6e\x63\x65\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\
-\x20\x20\x6f\x62\x6a\x65\x63\x74\x74\x6f\x6c\x65\x72\x61\x6e\x63\
-\x65\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x20\x20\x62\x6f\x72\x64\
-\x65\x72\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x31\x22\x0a\x20\x20\
-\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x63\x6f\x6c\x6f\x72\x3d\x22\
-\x23\x36\x36\x36\x36\x36\x36\x22\x0a\x20\x20\x20\x20\x20\x70\x61\
-\x67\x65\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x66\x66\x66\x66\x66\x66\
-\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x0a\
-\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\
-\x3a\x23\x66\x66\x30\x30\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x69\
-\x64\x3d\x22\x70\x6f\x6c\x79\x67\x6f\x6e\x32\x22\x0a\x20\x20\x20\
-\x20\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x37\x2e\x38\x36\x20\x32\
-\x20\x31\x36\x2e\x31\x34\x20\x32\x20\x32\x32\x20\x37\x2e\x38\x36\
-\x20\x32\x32\x20\x31\x36\x2e\x31\x34\x20\x31\x36\x2e\x31\x34\x20\
-\x32\x32\x20\x37\x2e\x38\x36\x20\x32\x32\x20\x32\x20\x31\x36\x2e\
-\x31\x34\x20\x32\x20\x37\x2e\x38\x36\x20\x37\x2e\x38\x36\x20\x32\
-\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x6c\x69\x6e\x65\x0a\x20\x20\x20\
-\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x34\x22\x0a\x20\x20\x20\
-\x20\x20\x79\x32\x3d\x22\x31\x32\x22\x0a\x20\x20\x20\x20\x20\x78\
-\x32\x3d\x22\x31\x32\x22\x0a\x20\x20\x20\x20\x20\x79\x31\x3d\x22\
-\x38\x22\x0a\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x31\x32\x22\x20\
-\x2f\x3e\x0a\x20\x20\x3c\x6c\x69\x6e\x65\x0a\x20\x20\x20\x20\x20\
-\x69\x64\x3d\x22\x6c\x69\x6e\x65\x36\x22\x0a\x20\x20\x20\x20\x20\
-\x79\x32\x3d\x22\x31\x36\x22\x0a\x20\x20\x20\x20\x20\x78\x32\x3d\
-\x22\x31\x32\x2e\x30\x31\x22\x0a\x20\x20\x20\x20\x20\x79\x31\x3d\
-\x22\x31\x36\x22\x0a\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x31\x32\
-\x22\x20\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x06\x4c\
+\x61\x67\x65\x73\x68\x61\x64\x6f\x77\x3d\x22\x32\x22\x0d\x0a\x20\
+\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x61\x67\
+\x65\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x30\x22\x0d\x0a\x20\x20\
+\x20\x20\x20\x67\x75\x69\x64\x65\x74\x6f\x6c\x65\x72\x61\x6e\x63\
+\x65\x3d\x22\x31\x30\x22\x0d\x0a\x20\x20\x20\x20\x20\x67\x72\x69\
+\x64\x74\x6f\x6c\x65\x72\x61\x6e\x63\x65\x3d\x22\x31\x30\x22\x0d\
+\x0a\x20\x20\x20\x20\x20\x6f\x62\x6a\x65\x63\x74\x74\x6f\x6c\x65\
+\x72\x61\x6e\x63\x65\x3d\x22\x31\x30\x22\x0d\x0a\x20\x20\x20\x20\
+\x20\x62\x6f\x72\x64\x65\x72\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\
+\x31\x22\x0d\x0a\x20\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x63\
+\x6f\x6c\x6f\x72\x3d\x22\x23\x36\x36\x36\x36\x36\x36\x22\x0d\x0a\
+\x20\x20\x20\x20\x20\x70\x61\x67\x65\x63\x6f\x6c\x6f\x72\x3d\x22\
+\x23\x66\x66\x66\x66\x66\x66\x22\x20\x2f\x3e\x0d\x0a\x20\x20\x3c\
+\x70\x6f\x6c\x79\x67\x6f\x6e\x0d\x0a\x20\x20\x20\x20\x20\x73\x74\
+\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x66\x66\x30\x30\x30\
+\x30\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x6f\x6c\
+\x79\x67\x6f\x6e\x32\x22\x0d\x0a\x20\x20\x20\x20\x20\x70\x6f\x69\
+\x6e\x74\x73\x3d\x22\x37\x2e\x38\x36\x20\x32\x20\x31\x36\x2e\x31\
+\x34\x20\x32\x20\x32\x32\x20\x37\x2e\x38\x36\x20\x32\x32\x20\x31\
+\x36\x2e\x31\x34\x20\x31\x36\x2e\x31\x34\x20\x32\x32\x20\x37\x2e\
+\x38\x36\x20\x32\x32\x20\x32\x20\x31\x36\x2e\x31\x34\x20\x32\x20\
+\x37\x2e\x38\x36\x20\x37\x2e\x38\x36\x20\x32\x22\x20\x2f\x3e\x0d\
+\x0a\x20\x20\x3c\x6c\x69\x6e\x65\x0d\x0a\x20\x20\x20\x20\x20\x69\
+\x64\x3d\x22\x6c\x69\x6e\x65\x34\x22\x0d\x0a\x20\x20\x20\x20\x20\
+\x79\x32\x3d\x22\x31\x32\x22\x0d\x0a\x20\x20\x20\x20\x20\x78\x32\
+\x3d\x22\x31\x32\x22\x0d\x0a\x20\x20\x20\x20\x20\x79\x31\x3d\x22\
+\x38\x22\x0d\x0a\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x31\x32\x22\
+\x20\x2f\x3e\x0d\x0a\x20\x20\x3c\x6c\x69\x6e\x65\x0d\x0a\x20\x20\
+\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x36\x22\x0d\x0a\x20\
+\x20\x20\x20\x20\x79\x32\x3d\x22\x31\x36\x22\x0d\x0a\x20\x20\x20\
+\x20\x20\x78\x32\x3d\x22\x31\x32\x2e\x30\x31\x22\x0d\x0a\x20\x20\
+\x20\x20\x20\x79\x31\x3d\x22\x31\x36\x22\x0d\x0a\x20\x20\x20\x20\
+\x20\x78\x31\x3d\x22\x31\x32\x22\x20\x2f\x3e\x0d\x0a\x3c\x2f\x73\
+\x76\x67\x3e\x0d\x0a\
+\x00\x00\x06\x53\
\x3c\
\x73\x76\x67\x20\x77\x69\x64\x74\x68\x3d\x22\x38\x30\x22\x20\x68\
\x65\x69\x67\x68\x74\x3d\x22\x38\x30\x22\x20\x78\x6d\x6c\x6e\x73\
\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x66\x69\
-\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x3e\x0a\x20\x3c\x67\x3e\x0a\
-\x20\x20\x3c\x74\x69\x74\x6c\x65\x3e\x4c\x61\x79\x65\x72\x20\x31\
-\x3c\x2f\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\
-\x20\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\x6e\
-\x6f\x64\x64\x22\x20\x63\x6c\x69\x70\x2d\x72\x75\x6c\x65\x3d\x22\
-\x65\x76\x65\x6e\x6f\x64\x64\x22\x20\x64\x3d\x22\x6d\x33\x33\x2e\
-\x39\x32\x35\x36\x2c\x39\x2e\x36\x39\x33\x32\x34\x63\x2d\x30\x2e\
-\x37\x36\x30\x38\x2c\x30\x20\x2d\x31\x2e\x34\x38\x30\x32\x2c\x30\
-\x2e\x33\x34\x36\x34\x33\x20\x2d\x31\x2e\x39\x35\x34\x35\x2c\x30\
-\x2e\x39\x34\x31\x32\x33\x6c\x2d\x35\x2e\x33\x32\x31\x2c\x36\x2e\
-\x36\x37\x32\x33\x6c\x2d\x31\x31\x2e\x36\x35\x30\x31\x2c\x30\x63\
-\x2d\x31\x2e\x33\x38\x30\x37\x2c\x30\x20\x2d\x32\x2e\x35\x2c\x31\
-\x2e\x31\x31\x39\x33\x20\x2d\x32\x2e\x35\x2c\x32\x2e\x35\x63\x30\
-\x2c\x31\x2e\x33\x38\x30\x37\x20\x31\x2e\x31\x31\x39\x33\x2c\x32\
-\x2e\x35\x20\x32\x2e\x35\x2c\x32\x2e\x35\x6c\x31\x2e\x35\x2c\x30\
-\x6c\x30\x2c\x34\x31\x2e\x35\x63\x30\x2c\x33\x2e\x35\x38\x39\x39\
-\x20\x32\x2e\x39\x31\x30\x31\x2c\x36\x2e\x35\x20\x36\x2e\x35\x2c\
-\x36\x2e\x35\x6c\x33\x34\x2c\x30\x63\x33\x2e\x35\x38\x39\x38\x2c\
-\x30\x20\x36\x2e\x35\x2c\x2d\x32\x2e\x39\x31\x30\x31\x20\x36\x2e\
-\x35\x2c\x2d\x36\x2e\x35\x6c\x30\x2c\x2d\x34\x31\x2e\x35\x6c\x31\
-\x2e\x35\x2c\x30\x63\x31\x2e\x33\x38\x30\x37\x2c\x30\x20\x32\x2e\
-\x35\x2c\x2d\x31\x2e\x31\x31\x39\x33\x20\x32\x2e\x35\x2c\x2d\x32\
-\x2e\x35\x63\x30\x2c\x2d\x31\x2e\x33\x38\x30\x37\x20\x2d\x31\x2e\
-\x31\x31\x39\x33\x2c\x2d\x32\x2e\x35\x20\x2d\x32\x2e\x35\x2c\x2d\
-\x32\x2e\x35\x6c\x2d\x31\x31\x2e\x36\x35\x30\x31\x2c\x30\x6c\x2d\
-\x35\x2e\x33\x32\x30\x39\x2c\x2d\x36\x2e\x36\x37\x32\x32\x63\x2d\
-\x30\x2e\x34\x37\x34\x34\x2c\x2d\x30\x2e\x35\x39\x34\x39\x20\x2d\
-\x31\x2e\x31\x39\x33\x38\x2c\x2d\x30\x2e\x39\x34\x31\x33\x33\x20\
-\x2d\x31\x2e\x39\x35\x34\x36\x2c\x2d\x30\x2e\x39\x34\x31\x33\x33\
-\x6c\x2d\x31\x32\x2e\x31\x34\x38\x38\x2c\x30\x7a\x6d\x2d\x30\x2e\
-\x39\x32\x35\x36\x2c\x31\x37\x2e\x36\x31\x33\x35\x33\x63\x31\x2e\
-\x33\x38\x30\x37\x2c\x30\x20\x32\x2e\x35\x2c\x31\x2e\x31\x31\x39\
-\x33\x20\x32\x2e\x35\x2c\x32\x2e\x35\x6c\x30\x2c\x32\x38\x63\x30\
-\x2c\x31\x2e\x33\x38\x30\x37\x20\x2d\x31\x2e\x31\x31\x39\x33\x2c\
-\x32\x2e\x35\x20\x2d\x32\x2e\x35\x2c\x32\x2e\x35\x63\x2d\x31\x2e\
-\x33\x38\x30\x37\x2c\x30\x20\x2d\x32\x2e\x35\x2c\x2d\x31\x2e\x31\
-\x31\x39\x33\x20\x2d\x32\x2e\x35\x2c\x2d\x32\x2e\x35\x6c\x30\x2c\
-\x2d\x32\x38\x63\x30\x2c\x2d\x31\x2e\x33\x38\x30\x37\x20\x31\x2e\
-\x31\x31\x39\x33\x2c\x2d\x32\x2e\x35\x20\x32\x2e\x35\x2c\x2d\x32\
-\x2e\x35\x7a\x6d\x31\x36\x2e\x35\x2c\x32\x2e\x35\x63\x30\x2c\x2d\
-\x31\x2e\x33\x38\x30\x37\x20\x2d\x31\x2e\x31\x31\x39\x33\x2c\x2d\
-\x32\x2e\x35\x20\x2d\x32\x2e\x35\x2c\x2d\x32\x2e\x35\x63\x2d\x31\
-\x2e\x33\x38\x30\x37\x2c\x30\x20\x2d\x32\x2e\x35\x2c\x31\x2e\x31\
-\x31\x39\x33\x20\x2d\x32\x2e\x35\x2c\x32\x2e\x35\x6c\x30\x2c\x32\
-\x38\x63\x30\x2c\x31\x2e\x33\x38\x30\x37\x20\x31\x2e\x31\x31\x39\
-\x33\x2c\x32\x2e\x35\x20\x32\x2e\x35\x2c\x32\x2e\x35\x63\x31\x2e\
-\x33\x38\x30\x37\x2c\x30\x20\x32\x2e\x35\x2c\x2d\x31\x2e\x31\x31\
-\x39\x33\x20\x32\x2e\x35\x2c\x2d\x32\x2e\x35\x6c\x30\x2c\x2d\x32\
-\x38\x7a\x6d\x2d\x32\x2e\x35\x34\x36\x34\x2c\x2d\x31\x32\x2e\x35\
-\x30\x31\x34\x6c\x2d\x32\x2e\x30\x38\x33\x32\x2c\x2d\x32\x2e\x36\
-\x31\x32\x31\x6c\x2d\x39\x2e\x37\x34\x30\x38\x2c\x30\x6c\x2d\x32\
-\x2e\x30\x38\x33\x32\x2c\x32\x2e\x36\x31\x32\x31\x6c\x31\x33\x2e\
-\x39\x30\x37\x32\x2c\x30\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\
-\x43\x32\x43\x43\x44\x45\x22\x20\x69\x64\x3d\x22\x73\x76\x67\x5f\
-\x31\x22\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\x66\x69\x6c\
-\x6c\x3d\x22\x23\x66\x66\x30\x30\x30\x30\x22\x20\x64\x3d\x22\x6d\
-\x37\x2e\x33\x33\x38\x33\x2c\x33\x39\x2e\x39\x39\x39\x39\x34\x6c\
-\x30\x2c\x30\x63\x30\x2c\x2d\x31\x38\x2e\x30\x38\x35\x33\x35\x20\
-\x31\x34\x2e\x36\x32\x33\x31\x36\x2c\x2d\x33\x32\x2e\x37\x34\x36\
-\x35\x31\x20\x33\x32\x2e\x36\x36\x31\x36\x37\x2c\x2d\x33\x32\x2e\
-\x37\x34\x36\x35\x31\x6c\x30\x2c\x30\x63\x38\x2e\x36\x36\x32\x35\
-\x33\x2c\x30\x20\x31\x36\x2e\x39\x37\x30\x32\x35\x2c\x33\x2e\x34\
-\x35\x30\x30\x38\x20\x32\x33\x2e\x30\x39\x35\x33\x32\x2c\x39\x2e\
-\x35\x39\x31\x32\x36\x63\x36\x2e\x31\x32\x35\x33\x31\x2c\x36\x2e\
-\x31\x34\x31\x31\x39\x20\x39\x2e\x35\x36\x36\x34\x32\x2c\x31\x34\
-\x2e\x34\x37\x30\x34\x34\x20\x39\x2e\x35\x36\x36\x34\x32\x2c\x32\
-\x33\x2e\x31\x35\x35\x32\x34\x6c\x30\x2c\x30\x63\x30\x2c\x31\x38\
-\x2e\x30\x38\x35\x35\x36\x20\x2d\x31\x34\x2e\x36\x32\x33\x30\x35\
-\x2c\x33\x32\x2e\x37\x34\x36\x36\x33\x20\x2d\x33\x32\x2e\x36\x36\
-\x31\x37\x33\x2c\x33\x32\x2e\x37\x34\x36\x36\x33\x6c\x30\x2c\x30\
-\x63\x2d\x31\x38\x2e\x30\x33\x38\x35\x31\x2c\x30\x20\x2d\x33\x32\
-\x2e\x36\x36\x31\x36\x37\x2c\x2d\x31\x34\x2e\x36\x36\x31\x30\x36\
-\x20\x2d\x33\x32\x2e\x36\x36\x31\x36\x37\x2c\x2d\x33\x32\x2e\x37\
-\x34\x36\x36\x33\x63\x30\x2c\x30\x20\x30\x2c\x30\x20\x30\x2c\x30\
-\x6c\x2d\x30\x2e\x30\x30\x30\x30\x31\x2c\x30\x7a\x6d\x35\x32\x2e\
-\x37\x34\x31\x32\x31\x2c\x31\x34\x2e\x36\x34\x39\x31\x36\x6c\x30\
-\x2c\x30\x63\x37\x2e\x31\x39\x31\x30\x32\x2c\x2d\x39\x2e\x39\x30\
-\x38\x33\x34\x20\x36\x2e\x31\x32\x32\x30\x39\x2c\x2d\x32\x33\x2e\
-\x35\x38\x39\x34\x38\x20\x2d\x32\x2e\x35\x32\x30\x31\x35\x2c\x2d\
-\x33\x32\x2e\x32\x35\x34\x30\x37\x63\x2d\x38\x2e\x36\x34\x32\x32\
-\x35\x2c\x2d\x38\x2e\x36\x36\x34\x36\x36\x20\x2d\x32\x32\x2e\x32\
-\x38\x37\x39\x33\x2c\x2d\x39\x2e\x37\x33\x36\x33\x37\x20\x2d\x33\
-\x32\x2e\x31\x37\x30\x33\x33\x2c\x2d\x32\x2e\x35\x32\x36\x35\x38\
-\x6c\x33\x34\x2e\x36\x39\x30\x34\x37\x2c\x33\x34\x2e\x37\x38\x30\
-\x36\x35\x6c\x30\x2e\x30\x30\x30\x30\x31\x2c\x30\x7a\x6d\x2d\x34\
-\x30\x2e\x31\x35\x38\x38\x39\x2c\x2d\x32\x39\x2e\x32\x39\x38\x30\
-\x31\x63\x2d\x37\x2e\x31\x39\x31\x30\x37\x2c\x39\x2e\x39\x30\x38\
-\x32\x38\x20\x2d\x36\x2e\x31\x32\x32\x31\x37\x2c\x32\x33\x2e\x35\
-\x38\x39\x34\x33\x20\x32\x2e\x35\x32\x30\x30\x32\x2c\x33\x32\x2e\
-\x32\x35\x33\x39\x63\x38\x2e\x36\x34\x32\x31\x37\x2c\x38\x2e\x36\
-\x36\x34\x37\x31\x20\x32\x32\x2e\x32\x38\x37\x38\x35\x2c\x39\x2e\
-\x37\x33\x36\x34\x31\x20\x33\x32\x2e\x31\x37\x30\x32\x35\x2c\x32\
-\x2e\x35\x32\x36\x37\x6c\x2d\x33\x34\x2e\x36\x39\x30\x32\x38\x2c\
-\x2d\x33\x34\x2e\x37\x38\x30\x35\x39\x6c\x30\x2c\x30\x6c\x30\x2e\
-\x30\x30\x30\x30\x31\x2c\x2d\x30\x2e\x30\x30\x30\x30\x31\x7a\x22\
-\x20\x69\x64\x3d\x22\x73\x76\x67\x5f\x33\x22\x2f\x3e\x0a\x20\x3c\
-\x2f\x67\x3e\x0a\x0a\x3c\x2f\x73\x76\x67\x3e\
+\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x3e\x0d\x0a\x20\x3c\x67\x3e\
+\x0d\x0a\x20\x20\x3c\x74\x69\x74\x6c\x65\x3e\x4c\x61\x79\x65\x72\
+\x20\x31\x3c\x2f\x74\x69\x74\x6c\x65\x3e\x0d\x0a\x20\x20\x3c\x70\
+\x61\x74\x68\x20\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3d\x22\x65\
+\x76\x65\x6e\x6f\x64\x64\x22\x20\x63\x6c\x69\x70\x2d\x72\x75\x6c\
+\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\x20\x64\x3d\x22\x6d\
+\x33\x33\x2e\x39\x32\x35\x36\x2c\x39\x2e\x36\x39\x33\x32\x34\x63\
+\x2d\x30\x2e\x37\x36\x30\x38\x2c\x30\x20\x2d\x31\x2e\x34\x38\x30\
+\x32\x2c\x30\x2e\x33\x34\x36\x34\x33\x20\x2d\x31\x2e\x39\x35\x34\
+\x35\x2c\x30\x2e\x39\x34\x31\x32\x33\x6c\x2d\x35\x2e\x33\x32\x31\
+\x2c\x36\x2e\x36\x37\x32\x33\x6c\x2d\x31\x31\x2e\x36\x35\x30\x31\
+\x2c\x30\x63\x2d\x31\x2e\x33\x38\x30\x37\x2c\x30\x20\x2d\x32\x2e\
+\x35\x2c\x31\x2e\x31\x31\x39\x33\x20\x2d\x32\x2e\x35\x2c\x32\x2e\
+\x35\x63\x30\x2c\x31\x2e\x33\x38\x30\x37\x20\x31\x2e\x31\x31\x39\
+\x33\x2c\x32\x2e\x35\x20\x32\x2e\x35\x2c\x32\x2e\x35\x6c\x31\x2e\
+\x35\x2c\x30\x6c\x30\x2c\x34\x31\x2e\x35\x63\x30\x2c\x33\x2e\x35\
+\x38\x39\x39\x20\x32\x2e\x39\x31\x30\x31\x2c\x36\x2e\x35\x20\x36\
+\x2e\x35\x2c\x36\x2e\x35\x6c\x33\x34\x2c\x30\x63\x33\x2e\x35\x38\
+\x39\x38\x2c\x30\x20\x36\x2e\x35\x2c\x2d\x32\x2e\x39\x31\x30\x31\
+\x20\x36\x2e\x35\x2c\x2d\x36\x2e\x35\x6c\x30\x2c\x2d\x34\x31\x2e\
+\x35\x6c\x31\x2e\x35\x2c\x30\x63\x31\x2e\x33\x38\x30\x37\x2c\x30\
+\x20\x32\x2e\x35\x2c\x2d\x31\x2e\x31\x31\x39\x33\x20\x32\x2e\x35\
+\x2c\x2d\x32\x2e\x35\x63\x30\x2c\x2d\x31\x2e\x33\x38\x30\x37\x20\
+\x2d\x31\x2e\x31\x31\x39\x33\x2c\x2d\x32\x2e\x35\x20\x2d\x32\x2e\
+\x35\x2c\x2d\x32\x2e\x35\x6c\x2d\x31\x31\x2e\x36\x35\x30\x31\x2c\
+\x30\x6c\x2d\x35\x2e\x33\x32\x30\x39\x2c\x2d\x36\x2e\x36\x37\x32\
+\x32\x63\x2d\x30\x2e\x34\x37\x34\x34\x2c\x2d\x30\x2e\x35\x39\x34\
+\x39\x20\x2d\x31\x2e\x31\x39\x33\x38\x2c\x2d\x30\x2e\x39\x34\x31\
+\x33\x33\x20\x2d\x31\x2e\x39\x35\x34\x36\x2c\x2d\x30\x2e\x39\x34\
+\x31\x33\x33\x6c\x2d\x31\x32\x2e\x31\x34\x38\x38\x2c\x30\x7a\x6d\
+\x2d\x30\x2e\x39\x32\x35\x36\x2c\x31\x37\x2e\x36\x31\x33\x35\x33\
+\x63\x31\x2e\x33\x38\x30\x37\x2c\x30\x20\x32\x2e\x35\x2c\x31\x2e\
+\x31\x31\x39\x33\x20\x32\x2e\x35\x2c\x32\x2e\x35\x6c\x30\x2c\x32\
+\x38\x63\x30\x2c\x31\x2e\x33\x38\x30\x37\x20\x2d\x31\x2e\x31\x31\
+\x39\x33\x2c\x32\x2e\x35\x20\x2d\x32\x2e\x35\x2c\x32\x2e\x35\x63\
+\x2d\x31\x2e\x33\x38\x30\x37\x2c\x30\x20\x2d\x32\x2e\x35\x2c\x2d\
+\x31\x2e\x31\x31\x39\x33\x20\x2d\x32\x2e\x35\x2c\x2d\x32\x2e\x35\
+\x6c\x30\x2c\x2d\x32\x38\x63\x30\x2c\x2d\x31\x2e\x33\x38\x30\x37\
+\x20\x31\x2e\x31\x31\x39\x33\x2c\x2d\x32\x2e\x35\x20\x32\x2e\x35\
+\x2c\x2d\x32\x2e\x35\x7a\x6d\x31\x36\x2e\x35\x2c\x32\x2e\x35\x63\
+\x30\x2c\x2d\x31\x2e\x33\x38\x30\x37\x20\x2d\x31\x2e\x31\x31\x39\
+\x33\x2c\x2d\x32\x2e\x35\x20\x2d\x32\x2e\x35\x2c\x2d\x32\x2e\x35\
+\x63\x2d\x31\x2e\x33\x38\x30\x37\x2c\x30\x20\x2d\x32\x2e\x35\x2c\
+\x31\x2e\x31\x31\x39\x33\x20\x2d\x32\x2e\x35\x2c\x32\x2e\x35\x6c\
+\x30\x2c\x32\x38\x63\x30\x2c\x31\x2e\x33\x38\x30\x37\x20\x31\x2e\
+\x31\x31\x39\x33\x2c\x32\x2e\x35\x20\x32\x2e\x35\x2c\x32\x2e\x35\
+\x63\x31\x2e\x33\x38\x30\x37\x2c\x30\x20\x32\x2e\x35\x2c\x2d\x31\
+\x2e\x31\x31\x39\x33\x20\x32\x2e\x35\x2c\x2d\x32\x2e\x35\x6c\x30\
+\x2c\x2d\x32\x38\x7a\x6d\x2d\x32\x2e\x35\x34\x36\x34\x2c\x2d\x31\
+\x32\x2e\x35\x30\x31\x34\x6c\x2d\x32\x2e\x30\x38\x33\x32\x2c\x2d\
+\x32\x2e\x36\x31\x32\x31\x6c\x2d\x39\x2e\x37\x34\x30\x38\x2c\x30\
+\x6c\x2d\x32\x2e\x30\x38\x33\x32\x2c\x32\x2e\x36\x31\x32\x31\x6c\
+\x31\x33\x2e\x39\x30\x37\x32\x2c\x30\x7a\x22\x20\x66\x69\x6c\x6c\
+\x3d\x22\x23\x43\x32\x43\x43\x44\x45\x22\x20\x69\x64\x3d\x22\x73\
+\x76\x67\x5f\x31\x22\x2f\x3e\x0d\x0a\x20\x20\x3c\x70\x61\x74\x68\
+\x20\x66\x69\x6c\x6c\x3d\x22\x23\x66\x66\x30\x30\x30\x30\x22\x20\
+\x64\x3d\x22\x6d\x37\x2e\x33\x33\x38\x33\x2c\x33\x39\x2e\x39\x39\
+\x39\x39\x34\x6c\x30\x2c\x30\x63\x30\x2c\x2d\x31\x38\x2e\x30\x38\
+\x35\x33\x35\x20\x31\x34\x2e\x36\x32\x33\x31\x36\x2c\x2d\x33\x32\
+\x2e\x37\x34\x36\x35\x31\x20\x33\x32\x2e\x36\x36\x31\x36\x37\x2c\
+\x2d\x33\x32\x2e\x37\x34\x36\x35\x31\x6c\x30\x2c\x30\x63\x38\x2e\
+\x36\x36\x32\x35\x33\x2c\x30\x20\x31\x36\x2e\x39\x37\x30\x32\x35\
+\x2c\x33\x2e\x34\x35\x30\x30\x38\x20\x32\x33\x2e\x30\x39\x35\x33\
+\x32\x2c\x39\x2e\x35\x39\x31\x32\x36\x63\x36\x2e\x31\x32\x35\x33\
+\x31\x2c\x36\x2e\x31\x34\x31\x31\x39\x20\x39\x2e\x35\x36\x36\x34\
+\x32\x2c\x31\x34\x2e\x34\x37\x30\x34\x34\x20\x39\x2e\x35\x36\x36\
+\x34\x32\x2c\x32\x33\x2e\x31\x35\x35\x32\x34\x6c\x30\x2c\x30\x63\
+\x30\x2c\x31\x38\x2e\x30\x38\x35\x35\x36\x20\x2d\x31\x34\x2e\x36\
+\x32\x33\x30\x35\x2c\x33\x32\x2e\x37\x34\x36\x36\x33\x20\x2d\x33\
+\x32\x2e\x36\x36\x31\x37\x33\x2c\x33\x32\x2e\x37\x34\x36\x36\x33\
+\x6c\x30\x2c\x30\x63\x2d\x31\x38\x2e\x30\x33\x38\x35\x31\x2c\x30\
+\x20\x2d\x33\x32\x2e\x36\x36\x31\x36\x37\x2c\x2d\x31\x34\x2e\x36\
+\x36\x31\x30\x36\x20\x2d\x33\x32\x2e\x36\x36\x31\x36\x37\x2c\x2d\
+\x33\x32\x2e\x37\x34\x36\x36\x33\x63\x30\x2c\x30\x20\x30\x2c\x30\
+\x20\x30\x2c\x30\x6c\x2d\x30\x2e\x30\x30\x30\x30\x31\x2c\x30\x7a\
+\x6d\x35\x32\x2e\x37\x34\x31\x32\x31\x2c\x31\x34\x2e\x36\x34\x39\
+\x31\x36\x6c\x30\x2c\x30\x63\x37\x2e\x31\x39\x31\x30\x32\x2c\x2d\
+\x39\x2e\x39\x30\x38\x33\x34\x20\x36\x2e\x31\x32\x32\x30\x39\x2c\
+\x2d\x32\x33\x2e\x35\x38\x39\x34\x38\x20\x2d\x32\x2e\x35\x32\x30\
+\x31\x35\x2c\x2d\x33\x32\x2e\x32\x35\x34\x30\x37\x63\x2d\x38\x2e\
+\x36\x34\x32\x32\x35\x2c\x2d\x38\x2e\x36\x36\x34\x36\x36\x20\x2d\
+\x32\x32\x2e\x32\x38\x37\x39\x33\x2c\x2d\x39\x2e\x37\x33\x36\x33\
+\x37\x20\x2d\x33\x32\x2e\x31\x37\x30\x33\x33\x2c\x2d\x32\x2e\x35\
+\x32\x36\x35\x38\x6c\x33\x34\x2e\x36\x39\x30\x34\x37\x2c\x33\x34\
+\x2e\x37\x38\x30\x36\x35\x6c\x30\x2e\x30\x30\x30\x30\x31\x2c\x30\
+\x7a\x6d\x2d\x34\x30\x2e\x31\x35\x38\x38\x39\x2c\x2d\x32\x39\x2e\
+\x32\x39\x38\x30\x31\x63\x2d\x37\x2e\x31\x39\x31\x30\x37\x2c\x39\
+\x2e\x39\x30\x38\x32\x38\x20\x2d\x36\x2e\x31\x32\x32\x31\x37\x2c\
+\x32\x33\x2e\x35\x38\x39\x34\x33\x20\x32\x2e\x35\x32\x30\x30\x32\
+\x2c\x33\x32\x2e\x32\x35\x33\x39\x63\x38\x2e\x36\x34\x32\x31\x37\
+\x2c\x38\x2e\x36\x36\x34\x37\x31\x20\x32\x32\x2e\x32\x38\x37\x38\
+\x35\x2c\x39\x2e\x37\x33\x36\x34\x31\x20\x33\x32\x2e\x31\x37\x30\
+\x32\x35\x2c\x32\x2e\x35\x32\x36\x37\x6c\x2d\x33\x34\x2e\x36\x39\
+\x30\x32\x38\x2c\x2d\x33\x34\x2e\x37\x38\x30\x35\x39\x6c\x30\x2c\
+\x30\x6c\x30\x2e\x30\x30\x30\x30\x31\x2c\x2d\x30\x2e\x30\x30\x30\
+\x30\x31\x7a\x22\x20\x69\x64\x3d\x22\x73\x76\x67\x5f\x33\x22\x2f\
+\x3e\x0d\x0a\x20\x3c\x2f\x67\x3e\x0d\x0a\x0d\x0a\x3c\x2f\x73\x76\
+\x67\x3e\
\x00\x00\x09\x97\
\x3c\
\x73\x76\x67\x20\x66\x69\x6c\x6c\x3d\x22\x23\x30\x30\x30\x30\x30\
@@ -1324,6 +1381,10 @@
\x03\xdc\xdd\x87\
\x00\x73\
\x00\x74\x00\x61\x00\x72\x00\x2d\x00\x63\x00\x72\x00\x6f\x00\x73\x00\x73\x00\x65\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x10\
+\x05\x22\x88\x87\
+\x00\x6f\
+\x00\x72\x00\x61\x00\x6e\x00\x67\x00\x65\x00\x2d\x00\x61\x00\x6c\x00\x65\x00\x72\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x08\
\x05\x77\x54\xa7\
\x00\x6c\
@@ -1390,70 +1451,73 @@
qt_resource_struct_v1 = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x00\x18\x00\x02\x00\x00\x00\x12\x00\x00\x00\x03\
+\x00\x00\x00\x18\x00\x02\x00\x00\x00\x13\x00\x00\x00\x03\
\x00\x00\x00\x28\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\
\x00\x00\x00\x4c\x00\x00\x00\x00\x00\x01\x00\x00\x01\x7d\
\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x03\x21\
-\x00\x00\x00\x90\x00\x00\x00\x00\x00\x01\x00\x00\x0a\xfe\
-\x00\x00\x00\xa6\x00\x00\x00\x00\x00\x01\x00\x00\x0c\x6e\
-\x00\x00\x00\xbc\x00\x01\x00\x00\x00\x01\x00\x00\x0d\xa5\
-\x00\x00\x00\xd6\x00\x00\x00\x00\x00\x01\x00\x00\x11\x51\
-\x00\x00\x00\xee\x00\x00\x00\x00\x00\x01\x00\x00\x14\xf0\
-\x00\x00\x01\x04\x00\x00\x00\x00\x00\x01\x00\x00\x16\x7c\
-\x00\x00\x01\x18\x00\x00\x00\x00\x00\x01\x00\x00\x17\xf0\
-\x00\x00\x01\x2e\x00\x00\x00\x00\x00\x01\x00\x00\x1d\xae\
-\x00\x00\x01\x48\x00\x00\x00\x00\x00\x01\x00\x00\x22\x74\
-\x00\x00\x01\x66\x00\x00\x00\x00\x00\x01\x00\x00\x2c\x07\
-\x00\x00\x01\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x33\xa8\
-\x00\x00\x01\xa6\x00\x00\x00\x00\x00\x01\x00\x00\x35\x3c\
-\x00\x00\x01\xc0\x00\x00\x00\x00\x00\x01\x00\x00\x36\xb6\
-\x00\x00\x01\xe0\x00\x00\x00\x00\x00\x01\x00\x00\x3e\x57\
-\x00\x00\x02\x08\x00\x00\x00\x00\x00\x01\x00\x00\x44\xa7\
+\x00\x00\x00\x90\x00\x00\x00\x00\x00\x01\x00\x00\x0b\x06\
+\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x01\x00\x00\x0d\x5e\
+\x00\x00\x00\xcc\x00\x00\x00\x00\x00\x01\x00\x00\x0e\xce\
+\x00\x00\x00\xe2\x00\x01\x00\x00\x00\x01\x00\x00\x10\x05\
+\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x01\x00\x00\x13\xb7\
+\x00\x00\x01\x14\x00\x00\x00\x00\x00\x01\x00\x00\x17\x58\
+\x00\x00\x01\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x18\xe4\
+\x00\x00\x01\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x1a\x58\
+\x00\x00\x01\x54\x00\x00\x00\x00\x00\x01\x00\x00\x20\x19\
+\x00\x00\x01\x6e\x00\x00\x00\x00\x00\x01\x00\x00\x24\xe2\
+\x00\x00\x01\x8c\x00\x00\x00\x00\x00\x01\x00\x00\x2e\xbd\
+\x00\x00\x01\xb0\x00\x00\x00\x00\x00\x01\x00\x00\x36\xa7\
+\x00\x00\x01\xcc\x00\x00\x00\x00\x00\x01\x00\x00\x38\x3b\
+\x00\x00\x01\xe6\x00\x00\x00\x00\x00\x01\x00\x00\x39\xb5\
+\x00\x00\x02\x06\x00\x00\x00\x00\x00\x01\x00\x00\x41\x9f\
+\x00\x00\x02\x2e\x00\x00\x00\x00\x00\x01\x00\x00\x47\xf6\
"
qt_resource_struct_v2 = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x01\x95\xe8\xaa\xa9\xd5\
-\x00\x00\x00\x18\x00\x02\x00\x00\x00\x12\x00\x00\x00\x03\
+\x00\x00\x01\x9d\xe1\x83\x22\xfc\
+\x00\x00\x00\x18\x00\x02\x00\x00\x00\x13\x00\x00\x00\x03\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x28\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\
-\x00\x00\x01\x95\xe8\xaa\xa9\xd4\
+\x00\x00\x01\x9d\xe1\x83\x22\xf9\
\x00\x00\x00\x4c\x00\x00\x00\x00\x00\x01\x00\x00\x01\x7d\
-\x00\x00\x01\x95\xe8\xaa\xa9\xd3\
+\x00\x00\x01\x9d\xe1\x83\x22\xf5\
\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x03\x21\
-\x00\x00\x01\x95\xe8\xaa\xa9\xd4\
-\x00\x00\x00\x90\x00\x00\x00\x00\x00\x01\x00\x00\x0a\xfe\
-\x00\x00\x01\x95\xe8\xaa\xa9\xd4\
-\x00\x00\x00\xa6\x00\x00\x00\x00\x00\x01\x00\x00\x0c\x6e\
-\x00\x00\x01\x95\xe8\xaa\xa9\xd3\
-\x00\x00\x00\xbc\x00\x01\x00\x00\x00\x01\x00\x00\x0d\xa5\
-\x00\x00\x01\x95\xe8\xaa\xa9\xd3\
-\x00\x00\x00\xd6\x00\x00\x00\x00\x00\x01\x00\x00\x11\x51\
-\x00\x00\x01\x95\xe8\xaa\xa9\xd5\
-\x00\x00\x00\xee\x00\x00\x00\x00\x00\x01\x00\x00\x14\xf0\
-\x00\x00\x01\x95\xe8\xaa\xa9\xd4\
-\x00\x00\x01\x04\x00\x00\x00\x00\x00\x01\x00\x00\x16\x7c\
-\x00\x00\x01\x95\xe8\xaa\xa9\xd4\
-\x00\x00\x01\x18\x00\x00\x00\x00\x00\x01\x00\x00\x17\xf0\
-\x00\x00\x01\x95\xe8\xaa\xa9\xd5\
-\x00\x00\x01\x2e\x00\x00\x00\x00\x00\x01\x00\x00\x1d\xae\
-\x00\x00\x01\x9a\x4b\xc3\x1d\x94\
-\x00\x00\x01\x48\x00\x00\x00\x00\x00\x01\x00\x00\x22\x74\
-\x00\x00\x01\x95\xe8\xaa\xa9\xd3\
-\x00\x00\x01\x66\x00\x00\x00\x00\x00\x01\x00\x00\x2c\x07\
-\x00\x00\x01\x95\xe8\xaa\xa9\xd2\
-\x00\x00\x01\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x33\xa8\
-\x00\x00\x01\x95\xe8\xaa\xa9\xd4\
-\x00\x00\x01\xa6\x00\x00\x00\x00\x00\x01\x00\x00\x35\x3c\
-\x00\x00\x01\x95\xe8\xaa\xa9\xd3\
-\x00\x00\x01\xc0\x00\x00\x00\x00\x00\x01\x00\x00\x36\xb6\
-\x00\x00\x01\x95\xe8\xaa\xa9\xd3\
-\x00\x00\x01\xe0\x00\x00\x00\x00\x00\x01\x00\x00\x3e\x57\
-\x00\x00\x01\x95\xe8\xaa\xa9\xd5\
-\x00\x00\x02\x08\x00\x00\x00\x00\x00\x01\x00\x00\x44\xa7\
-\x00\x00\x01\x95\xe8\xaa\xa9\xd4\
+\x00\x00\x01\x9d\xe1\x83\x22\xfb\
+\x00\x00\x00\x90\x00\x00\x00\x00\x00\x01\x00\x00\x0b\x06\
+\x00\x00\x01\x9d\xfb\x58\x6d\xfe\
+\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x01\x00\x00\x0d\x5e\
+\x00\x00\x01\x9d\xe1\x83\x22\xf8\
+\x00\x00\x00\xcc\x00\x00\x00\x00\x00\x01\x00\x00\x0e\xce\
+\x00\x00\x01\x9d\xe1\x83\x22\xf6\
+\x00\x00\x00\xe2\x00\x01\x00\x00\x00\x01\x00\x00\x10\x05\
+\x00\x00\x01\x9d\xe1\x83\x22\xf7\
+\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x01\x00\x00\x13\xb7\
+\x00\x00\x01\x9d\xe1\x83\x22\xfc\
+\x00\x00\x01\x14\x00\x00\x00\x00\x00\x01\x00\x00\x17\x58\
+\x00\x00\x01\x9d\xe1\x83\x22\xfa\
+\x00\x00\x01\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x18\xe4\
+\x00\x00\x01\x9d\xe1\x83\x22\xfb\
+\x00\x00\x01\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x1a\x58\
+\x00\x00\x01\x9d\xe1\x83\x22\xfb\
+\x00\x00\x01\x54\x00\x00\x00\x00\x00\x01\x00\x00\x20\x19\
+\x00\x00\x01\x9d\xe1\x83\x22\xf8\
+\x00\x00\x01\x6e\x00\x00\x00\x00\x00\x01\x00\x00\x24\xe2\
+\x00\x00\x01\x9d\xe1\x83\x22\xf7\
+\x00\x00\x01\x8c\x00\x00\x00\x00\x00\x01\x00\x00\x2e\xbd\
+\x00\x00\x01\x9d\xe1\x83\x22\xf4\
+\x00\x00\x01\xb0\x00\x00\x00\x00\x00\x01\x00\x00\x36\xa7\
+\x00\x00\x01\x9d\xe1\x83\x22\xf9\
+\x00\x00\x01\xcc\x00\x00\x00\x00\x00\x01\x00\x00\x38\x3b\
+\x00\x00\x01\x9d\xe1\x83\x22\xf7\
+\x00\x00\x01\xe6\x00\x00\x00\x00\x00\x01\x00\x00\x39\xb5\
+\x00\x00\x01\x9d\xe1\x83\x22\xf5\
+\x00\x00\x02\x06\x00\x00\x00\x00\x00\x01\x00\x00\x41\x9f\
+\x00\x00\x01\x9d\xe1\x83\x22\xfc\
+\x00\x00\x02\x2e\x00\x00\x00\x00\x00\x01\x00\x00\x47\xf6\
+\x00\x00\x01\x9d\xe1\x83\x22\xf9\
"
qt_version = [int(v) for v in QtCore.qVersion().split(".")]
diff --git a/src/instrumentserver/resource.qrc b/src/instrumentserver/resource.qrc
index 995f218..18a29c6 100644
--- a/src/instrumentserver/resource.qrc
+++ b/src/instrumentserver/resource.qrc
@@ -7,6 +7,7 @@
resource/icons/set.svg
resource/icons/alert-octagon.svg
resource/icons/alert-octagon-red.svg
+ resource/icons/alert-octagon-orange.svg
resource/icons/python.svg
resource/icons/code.svg
resource/icons/delete.svg
diff --git a/src/instrumentserver/resource/icons/alert-octagon-orange.svg b/src/instrumentserver/resource/icons/alert-octagon-orange.svg
new file mode 100644
index 0000000..061888c
--- /dev/null
+++ b/src/instrumentserver/resource/icons/alert-octagon-orange.svg
@@ -0,0 +1,21 @@
+
+
diff --git a/src/instrumentserver/server/application.py b/src/instrumentserver/server/application.py
index 83fcc0a..608082b 100644
--- a/src/instrumentserver/server/application.py
+++ b/src/instrumentserver/server/application.py
@@ -14,6 +14,7 @@
from ..gui.instruments import GenericInstrument
from ..gui.misc import BaseDialog, DetachableTabWidget
from ..gui.parameters import AnyInputForMethod
+from ..gui.shortcuts import KeyboardShortcutManager, ShortcutEditorWidget
from .core import InstrumentModuleBluePrint, ParameterBluePrint, StationServer
logger = logging.getLogger(__name__)
@@ -608,8 +609,11 @@ def __init__(
else:
self._guiConfig = guiConfig
- self.stationServer = None
- self.stationServerThread = None
+ shortcutConfig = serverKwargs.pop("shortcutConfig", {})
+ configPath = serverKwargs.pop("configPath", None)
+
+ self.stationServer: Optional[StationServer] = None
+ self.stationServerThread: Optional[QtCore.QThread] = None
self.instrumentTabsOpen: dict[str, GenericInstrument] = {}
@@ -659,6 +663,13 @@ def __init__(
self.serverStatus = ServerStatus()
self.tabs.addUnclosableTab(self.serverStatus, "Server")
+ self.shortcutManager = KeyboardShortcutManager()
+ if shortcutConfig:
+ self.shortcutManager.load_from_dict(shortcutConfig)
+
+ self.shortcutEditor = ShortcutEditorWidget(self.shortcutManager, configPath)
+ self.tabs.addUnclosableTab(self.shortcutEditor, "Shortcuts")
+
# Toolbar.
self.toolBar = self.addToolBar("Tools")
self.toolBar.setIconSize(QtCore.QSize(16, 16)) # type: ignore[union-attr]
@@ -715,6 +726,7 @@ def closeEvent(self, event: Optional[QtGui.QCloseEvent]) -> None:
if (
hasattr(self, "stationServerThread")
and self.stationServerThread is not None
+ and self.stationServer is not None
):
if self.stationServerThread.isRunning():
try:
@@ -730,29 +742,33 @@ def closeEvent(self, event: Optional[QtGui.QCloseEvent]) -> None:
def startServer(self) -> None:
"""Start the instrument server in a separate thread."""
- self.stationServer = StationServer(**self._serverKwargs) # type: ignore[assignment]
- self.stationServerThread = QtCore.QThread() # type: ignore[assignment]
- self.stationServer.moveToThread(self.stationServerThread) # type: ignore[attr-defined]
- self.stationServerThread.started.connect(self.stationServer.startServer) # type: ignore[arg-type,attr-defined]
- self.stationServer.finished.connect(lambda: self.log("ZMQ server closed.")) # type: ignore[attr-defined]
- self.stationServer.finished.connect(self.stationServerThread.quit) # type: ignore[attr-defined]
- self.stationServer.finished.connect(self.stationServer.deleteLater) # type: ignore[attr-defined]
+ self.stationServer = StationServer(**self._serverKwargs)
+ self.stationServerThread = QtCore.QThread()
+ self.stationServer.moveToThread(self.stationServerThread)
+ self.stationServerThread.started.connect(self.stationServer.startServer) # type: ignore[arg-type]
+ self.stationServer.finished.connect(lambda: self.log("ZMQ server closed."))
+ self.stationServer.finished.connect(self.stationServerThread.quit)
+ self.stationServer.finished.connect(self.stationServer.deleteLater)
# Connecting some additional things for messages.
- self.stationServer.serverStarted.connect(self.serverStatus.setListeningAddress) # type: ignore[attr-defined]
- self.stationServer.serverStarted.connect(self.client.start) # type: ignore[attr-defined]
- self.stationServer.serverStarted.connect(self.refreshStationComponents) # type: ignore[attr-defined]
- self.stationServer.finished.connect( # type: ignore[attr-defined]
+ self.stationServer.serverStarted.connect(self.serverStatus.setListeningAddress)
+ self.stationServer.serverStarted.connect(self.client.start)
+ self.stationServer.serverStarted.connect(self.refreshStationComponents)
+ self.stationServer.finished.connect(
lambda: self.log("Server thread finished.", LogLevels.info)
)
- self.stationServer.messageReceived.connect(self._messageReceived) # type: ignore[attr-defined]
- self.stationServer.instrumentCreated.connect(self.addInstrumentToGui) # type: ignore[attr-defined]
- self.stationServer.funcCalled.connect(self.onFuncCalled) # type: ignore[attr-defined]
+ self.stationServer.messageReceived.connect(self._messageReceived)
+ self.stationServer.instrumentCreated.connect(self.addInstrumentToGui)
+ self.stationServer.funcCalled.connect(self.onFuncCalled)
- self.stationServerThread.start() # type: ignore[attr-defined]
+ self.stationServerThread.start()
def getServerIfRunning(self) -> Optional["StationServer"]:
- if self.stationServer is not None and self.stationServerThread.isRunning(): # type: ignore[union-attr]
+ if (
+ self.stationServer is not None
+ and self.stationServerThread is not None
+ and self.stationServerThread.isRunning()
+ ):
return self.stationServer
else:
return None
@@ -889,6 +905,8 @@ def addInstrumentTab(self, item: QtWidgets.QTreeWidgetItem, index: int) -> None:
kwargs = self._guiConfig[name]["gui"]["kwargs"]
kwargs["sub_port"] = kwargs.get("sub_port", self.stationServer.port + 1) # type: ignore[union-attr]
+ kwargs["shortcutManager"] = self.shortcutManager
+
insWidget = widgetClass(ins, parent=self, **kwargs)
index = self.tabs.addTab(insWidget, ins.name)
self.instrumentTabsOpen[ins.name] = insWidget
diff --git a/test/pytest/test_config.py b/test/pytest/test_config.py
index fdbe570..1a4e6e1 100644
--- a/test/pytest/test_config.py
+++ b/test/pytest/test_config.py
@@ -27,13 +27,20 @@ def test_minimal_config(tmp_path):
type: instrumentserver.testing.dummy_instruments.generic.DummyInstrumentWithSubmodule
""",
)
- path, serverConfig, fullConfig, tempFile, pollingRates, ipAddresses = loadConfig(
- cfg
- )
+ (
+ path,
+ serverConfig,
+ fullConfig,
+ shortcutConfig,
+ tempFile,
+ pollingRates,
+ ipAddresses,
+ ) = loadConfig(cfg)
tempFile.close()
assert "my_ins" in serverConfig
assert "my_ins" in fullConfig
+ assert shortcutConfig == {}
assert pollingRates == {}
assert ipAddresses == {}
# returned path is a string
@@ -49,7 +56,7 @@ def test_temp_file_is_readable(tmp_path):
type: some.Type
""",
)
- tempFilePath, _, _, tempFile, _, _ = loadConfig(cfg)
+ tempFilePath, _, _, _, tempFile, _, _ = loadConfig(cfg)
tempFile.seek(0)
content = tempFile.read()
assert len(content) > 0
@@ -70,7 +77,7 @@ def test_initialize_defaults_to_true(tmp_path):
type: some.Type
""",
)
- _, serverConfig, _, tempFile, _, _ = loadConfig(cfg)
+ _, serverConfig, _, _, tempFile, _, _ = loadConfig(cfg)
tempFile.close()
assert serverConfig["my_ins"]["initialize"] is True
@@ -85,7 +92,7 @@ def test_initialize_explicit_false(tmp_path):
initialize: false
""",
)
- _, serverConfig, _, tempFile, _, _ = loadConfig(cfg)
+ _, serverConfig, _, _, tempFile, _, _ = loadConfig(cfg)
tempFile.close()
assert serverConfig["my_ins"]["initialize"] is False
@@ -118,7 +125,7 @@ def test_gui_defaults_to_generic_instrument(tmp_path):
type: some.Type
""",
)
- _, _, fullConfig, tempFile, _, _ = loadConfig(cfg)
+ _, _, fullConfig, _, tempFile, _, _ = loadConfig(cfg)
tempFile.close()
assert fullConfig["my_ins"]["gui"]["type"] == GUIFIELD["type"]
@@ -134,7 +141,7 @@ def test_gui_generic_alias_maps_to_full_path(tmp_path):
type: generic
""",
)
- _, _, fullConfig, tempFile, _, _ = loadConfig(cfg)
+ _, _, fullConfig, _, tempFile, _, _ = loadConfig(cfg)
tempFile.close()
assert fullConfig["my_ins"]["gui"]["type"] == GUIFIELD["type"]
@@ -187,7 +194,7 @@ def test_polling_rate_parsed(tmp_path):
param2: 200
""",
)
- _, _, _, tempFile, pollingRates, _ = loadConfig(cfg)
+ _, _, _, _, tempFile, pollingRates, _ = loadConfig(cfg)
tempFile.close()
assert pollingRates == {"my_ins.param1": 100, "my_ins.param2": 200}
@@ -202,7 +209,7 @@ def test_polling_rate_empty_is_ignored(tmp_path):
pollingRate:
""",
)
- _, _, _, tempFile, pollingRates, _ = loadConfig(cfg)
+ _, _, _, _, tempFile, pollingRates, _ = loadConfig(cfg)
tempFile.close()
assert pollingRates == {}
@@ -224,7 +231,7 @@ def test_networking_parsed(tmp_path):
listeningAddress: 192.168.1.1
""",
)
- _, _, _, tempFile, _, ipAddresses = loadConfig(cfg)
+ _, _, _, _, tempFile, _, ipAddresses = loadConfig(cfg)
tempFile.close()
assert ipAddresses["externalBroadcast"] == "tcp://192.168.1.1:5556"
assert ipAddresses["listeningAddress"] == "192.168.1.1"
@@ -239,7 +246,7 @@ def test_no_networking_section_gives_empty_dict(tmp_path):
type: some.Type
""",
)
- _, _, _, tempFile, _, ipAddresses = loadConfig(cfg)
+ _, _, _, _, tempFile, _, ipAddresses = loadConfig(cfg)
tempFile.close()
assert ipAddresses == {}
@@ -262,7 +269,7 @@ def test_gui_defaults_default_section(tmp_path):
- IDN
""",
)
- _, _, fullConfig, tempFile, _, _ = loadConfig(cfg)
+ _, _, fullConfig, _, tempFile, _, _ = loadConfig(cfg)
tempFile.close()
kwargs = fullConfig["my_ins"]["gui"].get("kwargs", {})
assert "parameters-hide" in kwargs
@@ -282,7 +289,7 @@ def test_gui_defaults_class_section(tmp_path):
- power_level
""",
)
- _, _, fullConfig, tempFile, _, _ = loadConfig(cfg)
+ _, _, fullConfig, _, tempFile, _, _ = loadConfig(cfg)
tempFile.close()
kwargs = fullConfig["my_ins"]["gui"].get("kwargs", {})
assert "parameters-hide" in kwargs
@@ -310,9 +317,39 @@ def test_gui_defaults_merging_order(tmp_path):
- class_param
""",
)
- _, _, fullConfig, tempFile, _, _ = loadConfig(cfg)
+ _, _, fullConfig, _, tempFile, _, _ = loadConfig(cfg)
tempFile.close()
hide = fullConfig["my_ins"]["gui"]["kwargs"]["parameters-hide"]
assert "default_param" in hide
assert "class_param" in hide
assert "instance_param" in hide
+
+
+def test_shortcuts_parsed(tmp_path):
+ cfg = _write_config(
+ tmp_path,
+ """\
+instruments:
+ my_ins:
+ type: some.Type
+shortcuts:
+ jump_filter: "Ctrl+G"
+""",
+ )
+ _, _, _, shortcutConfig, tempFile, _, _ = loadConfig(cfg)
+ tempFile.close()
+ assert shortcutConfig == {"jump_filter": "Ctrl+G"}
+
+
+def test_no_shortcuts_gives_empty_dict(tmp_path):
+ cfg = _write_config(
+ tmp_path,
+ """\
+instruments:
+ my_ins:
+ type: some.Type
+""",
+ )
+ _, _, _, shortcutConfig, tempFile, _, _ = loadConfig(cfg)
+ tempFile.close()
+ assert shortcutConfig == {}