windows 版本

This commit is contained in:
Julian Freeman
2024-06-27 23:10:46 -04:00
parent f7811b89c5
commit 8c02532e28
18 changed files with 2039 additions and 1 deletions

2
.gitignore vendored
View File

@@ -159,4 +159,4 @@ cython_debug/
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
.idea/

58
gbx_extension.py Normal file
View File

@@ -0,0 +1,58 @@
# coding: utf8
from PySide6 import QtCore, QtWidgets
class ExtensionModesListModel(QtCore.QAbstractListModel):
def __init__(self, modes_info: dict, parent=None):
super().__init__(parent)
self.modes = []
self.display_modes = []
for k, v in modes_info.items():
self.modes.append(k)
self.display_modes.append(v)
def rowCount(self, parent: QtCore.QModelIndex = ...):
return len(self.modes)
def data(self, index: QtCore.QModelIndex, role: int = ...):
row = index.row()
if role == QtCore.Qt.ItemDataRole.DisplayRole:
return self.display_modes[row]
if role == QtCore.Qt.ItemDataRole.UserRole:
return self.modes[row]
class GbxExtension(QtWidgets.QGroupBox):
def __init__(self, extension_info: dict, parent=None):
super().__init__(parent)
self.vly_m = QtWidgets.QVBoxLayout()
self.setLayout(self.vly_m)
self.setTitle(extension_info["name"])
self.setCheckable(True)
self.setChecked(extension_info["enabled"])
self.lb_desc = QtWidgets.QLabel(extension_info["description"], self)
self.vly_m.addWidget(self.lb_desc)
self.lb_modes = QtWidgets.QLabel("安装模式:", self)
self.cmbx_modes = QtWidgets.QComboBox(self)
modes_model = ExtensionModesListModel(extension_info["modes"], self)
self.cmbx_modes.setModel(modes_model)
self.cmbx_modes.setCurrentIndex(modes_model.modes.index(extension_info["default_mode"]))
self.lb_update_url = QtWidgets.QLabel("更新链接:", self)
self.lne_update_url = QtWidgets.QLineEdit(extension_info["update_url"], self)
self.hly_modes = QtWidgets.QHBoxLayout()
self.vly_m.addLayout(self.hly_modes)
self.hly_modes.addWidget(self.lb_modes)
self.hly_modes.addWidget(self.cmbx_modes)
self.hly_modes.addStretch(1)
self.hly_update_url = QtWidgets.QHBoxLayout()
self.vly_m.addLayout(self.hly_update_url)
self.hly_update_url.addWidget(self.lb_update_url)
self.hly_update_url.addWidget(self.lne_update_url)
self.id = extension_info["id"]

34
gbx_search_engine.py Normal file
View File

@@ -0,0 +1,34 @@
# coding: utf8
from PySide6 import QtWidgets
class GbxSearchEngine(QtWidgets.QGroupBox):
def __init__(self, search_engines_info: dict, parent=None):
super().__init__(parent)
self.vly_m = QtWidgets.QVBoxLayout()
self.setLayout(self.vly_m)
self.setTitle(f'搜索引擎:{search_engines_info["number"]}')
self.setCheckable(True)
self.setChecked(search_engines_info["enabled"])
self.gly_info = QtWidgets.QGridLayout()
self.vly_m.addLayout(self.gly_info)
self.lb_name = QtWidgets.QLabel("名称:", self)
self.lne_name = QtWidgets.QLineEdit(search_engines_info["name"], self)
self.lb_keyword = QtWidgets.QLabel("关键词:", self)
self.lne_keyword = QtWidgets.QLineEdit(search_engines_info["keyword"], self)
self.lb_search_url = QtWidgets.QLabel("搜索链接:", self)
self.lne_search_url = QtWidgets.QLineEdit(search_engines_info["search_url"], self)
self.lne_search_url.setCursorPosition(0)
self.gly_info.addWidget(self.lb_name, 0, 0)
self.gly_info.addWidget(self.lne_name, 0, 1)
self.gly_info.addWidget(self.lb_keyword, 1, 0)
self.gly_info.addWidget(self.lne_keyword, 1, 1)
self.gly_info.addWidget(self.lb_search_url, 2, 0)
self.gly_info.addWidget(self.lne_search_url, 2, 1)
self.rbn_default = QtWidgets.QRadioButton("设为默认", self)
self.vly_m.addWidget(self.rbn_default)
self.rbn_default.setChecked(search_engines_info["is_default"])

33
gbx_setting.py Normal file
View File

@@ -0,0 +1,33 @@
# coding: utf8
from PySide6 import QtWidgets, QtCore, QtGui
class GbxSetting(QtWidgets.QGroupBox):
def __init__(self, setting_info: dict, parent=None):
super().__init__(parent)
self.vly_m = QtWidgets.QVBoxLayout()
self.setLayout(self.vly_m)
self.setTitle(setting_info["display_name"])
self.setCheckable(True)
self.setChecked(setting_info["enabled"])
self.bgp_radios = QtWidgets.QButtonGroup(self)
self.bgp_radios.setExclusive(True)
for i, name in setting_info["values"].items():
value = int(i)
rbn_1 = QtWidgets.QRadioButton(name, self)
self.bgp_radios.addButton(rbn_1, id=value)
self.vly_m.addWidget(rbn_1)
if setting_info["default_value"] == value:
rbn_1.setChecked(True)
self.allow_recommend = setting_info["allow_recommend"]
if self.allow_recommend:
self.cbx_recommend = QtWidgets.QCheckBox("设置为推荐", self)
self.vly_m.addWidget(self.cbx_recommend)
self.cbx_recommend.setChecked(True)
self.cbx_recommend.setLayoutDirection(QtCore.Qt.LayoutDirection.RightToLeft)
self.name = setting_info["name"]

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
images/browsers/edge_32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
images/policies_gen_128.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

19
main.py Normal file
View File

@@ -0,0 +1,19 @@
# coding: utf8
import sys
from PySide6 import QtWidgets
from mw_policies_gen import MwPoliciesGen
import rc_policies_gen
version = (0, 1, 0, 20240627)
def main():
app = QtWidgets.QApplication(sys.argv)
win = MwPoliciesGen(version)
win.show()
return app.exec()
if __name__ == '__main__':
sys.exit(main())

166
mw_policies_gen.py Normal file
View File

@@ -0,0 +1,166 @@
# coding: utf8
import sys
from PySide6 import QtWidgets, QtCore, QtGui
from wg_browser_page import WgBrowserPage
class BrowsersListModel(QtCore.QAbstractListModel):
def __init__(self, parent=None):
super().__init__(parent)
self.browsers = ["Chrome", "Edge", "Brave"]
self.browser_vars = ["chrome", "edge", "brave"]
self.icons = [
QtGui.QIcon(":/images/browsers/chrome_32.png"),
QtGui.QIcon(":/images/browsers/edge_32.png"),
QtGui.QIcon(":/images/browsers/brave_32.png"),
]
def rowCount(self, parent: QtCore.QModelIndex = ...):
return len(self.browsers)
def data(self, index: QtCore.QModelIndex, role: int = ...):
row = index.row()
if role == QtCore.Qt.ItemDataRole.DisplayRole:
return self.browsers[row]
if role == QtCore.Qt.ItemDataRole.DecorationRole:
return self.icons[row]
if role == QtCore.Qt.ItemDataRole.UserRole:
return self.browser_vars[row]
class AppStyleListModel(QtCore.QAbstractListModel):
def __init__(self, parent=None):
super().__init__(parent)
if sys.platform == "win32":
self.styles = ["fusion", "windowsvista", "windows11", "windows"]
elif sys.platform == "darwin":
self.styles = ["fusion", "macos", "windows"]
else:
self.styles = []
def rowCount(self, parent: QtCore.QModelIndex = ...):
return len(self.styles)
def data(self, index: QtCore.QModelIndex, role: int = ...):
row = index.row()
if role == QtCore.Qt.ItemDataRole.DisplayRole:
return self.styles[row]
class UiMwPoliciesGen(object):
def __init__(self, window: QtWidgets.QWidget):
self.vly_m = QtWidgets.QVBoxLayout()
window.setLayout(self.vly_m)
self.hly_top = QtWidgets.QHBoxLayout()
self.vly_m.addLayout(self.hly_top)
self.cmbx_browsers = QtWidgets.QComboBox(window)
self.hly_top.addWidget(self.cmbx_browsers)
self.vln_1 = QtWidgets.QFrame(window)
self.vln_1.setFrameShape(QtWidgets.QFrame.Shape.VLine)
self.vln_1.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
self.hly_top.addWidget(self.vln_1)
self.pbn_export = QtWidgets.QPushButton("导出", window)
self.hly_top.addWidget(self.pbn_export)
self.pbn_about = QtWidgets.QPushButton("关于", window)
self.hly_top.addWidget(self.pbn_about)
self.hly_top.addStretch(1)
self.lb_styles = QtWidgets.QLabel("主题:", window)
self.hly_top.addWidget(self.lb_styles)
self.cmbx_styles = QtWidgets.QComboBox(window)
self.hly_top.addWidget(self.cmbx_styles)
self.sw_policies = QtWidgets.QStackedWidget(window)
self.vly_m.addWidget(self.sw_policies)
# ============== Stacks ===========================
self.sa_chrome_page = QtWidgets.QScrollArea(self.sw_policies)
self.sa_edge_page = QtWidgets.QScrollArea(self.sw_policies)
self.sa_brave_page = QtWidgets.QScrollArea(self.sw_policies)
self.sw_policies.addWidget(self.sa_chrome_page)
self.sw_policies.addWidget(self.sa_edge_page)
self.sw_policies.addWidget(self.sa_brave_page)
# =============== Page ======================
self.wg_chrome_page = WgBrowserPage("chrome",
"HKEY_LOCAL_MACHINE\\SOFTWARE\\Policies\\Google\\Chrome",
self.sa_chrome_page)
self.sa_chrome_page.setWidget(self.wg_chrome_page)
self.sa_chrome_page.setWidgetResizable(True)
self.wg_edge_page = WgBrowserPage("edge",
"HKEY_LOCAL_MACHINE\\SOFTWARE\\Policies\\Microsoft\\Edge",
self.sa_edge_page)
self.sa_edge_page.setWidget(self.wg_edge_page)
self.sa_edge_page.setWidgetResizable(True)
self.wg_brave_page = WgBrowserPage("brave",
"HKEY_LOCAL_MACHINE\\SOFTWARE\\Policies\\BraveSoftware\\Brave",
self.sa_brave_page)
self.sa_brave_page.setWidget(self.wg_brave_page)
self.sa_brave_page.setWidgetResizable(True)
class MwPoliciesGen(QtWidgets.QWidget):
def __init__(self, version: tuple[int, ...], parent=None):
super().__init__(parent)
self.ui = UiMwPoliciesGen(self)
self.setWindowTitle("浏览器策略生成器")
self.setWindowIcon(QtGui.QIcon(":/images/policies_gen_128.png"))
self.version = version
self.ui.cmbx_browsers.setModel(BrowsersListModel(self))
self.ui.cmbx_browsers.currentIndexChanged.connect(self.ui.sw_policies.setCurrentIndex)
self.ui.cmbx_styles.setModel(AppStyleListModel(self))
self.ui.cmbx_styles.currentIndexChanged.connect(self.on_cmbx_styles_current_index_changed)
# 手动触发
self.on_cmbx_styles_current_index_changed(0)
self.ui.pbn_export.clicked.connect(self.on_pbn_export_clicked)
self.ui.pbn_about.clicked.connect(self.on_pbn_about_clicked)
def on_cmbx_styles_current_index_changed(self, index: int):
model = self.ui.cmbx_styles.model()
idx = model.index(index, 0)
style = model.data(idx, QtCore.Qt.ItemDataRole.DisplayRole)
QtWidgets.QApplication.setStyle(style)
def sizeHint(self):
return QtCore.QSize(800, 600)
def on_pbn_export_clicked(self):
reg_text = ["Windows Registry Editor Version 5.00"]
pages = [self.ui.wg_chrome_page, self.ui.wg_edge_page, self.ui.wg_brave_page]
for page in pages:
reg_text.append(page.get_recommended_settings())
reg_text.append(page.get_settings())
reg_text.append(page.get_extensions())
reg_text.append(page.get_search_engines())
filename, _ = QtWidgets.QFileDialog.getSaveFileName(self, "保存", "..", "注册表文件(*.reg);;所有文件(*)")
if len(filename) == 0:
return
with open(filename, "w", encoding="utf-8") as f:
f.write("\n\n".join(reg_text))
QtWidgets.QMessageBox.information(self, "信息", "已导出注册表文件。")
def on_pbn_about_clicked(self):
ver = f"{self.version[0]}.{self.version[1]}.{self.version[2]}"
msg = f"一个用于生成以 Chromium 为内核的浏览器策略的注册表文件的工具。\n\n版本:{ver}{self.version[-1]}"
QtWidgets.QMessageBox.about(self, "关于", msg)

8
policies_gen.qrc Normal file
View File

@@ -0,0 +1,8 @@
<RCC>
<qresource prefix="/">
<file>images/browsers/chrome_32.png</file>
<file>images/browsers/edge_32.png</file>
<file>images/browsers/brave_32.png</file>
<file>images/policies_gen_128.png</file>
</qresource>
</RCC>

BIN
policies_gen_128.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

935
rc_policies_gen.py Normal file
View File

@@ -0,0 +1,935 @@
# Resource object code (Python 3)
# Created by: object code
# Created by: The Resource Compiler for Qt version 6.7.2
# WARNING! All changes made in this file will be lost!
from PySide6 import QtCore
qt_resource_data = b"\
\x00\x00$\x86\
\x89\
PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
\x00\x00\x80\x00\x00\x00\x80\x08\x06\x00\x00\x00\xc3>a\xcb\
\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00 \
\x00IDATx\x9c\xed\x9dwx\x15U\xfa\xc7?\
g\x82@\x0a\x09\x97\x16\x8a\xa4\xd0Q \xc1\x05T \
\x01\x14\x90\x1a\x05\x16WA`]\x7f\x16\x10\xd4\xd5]\
V@\x10\x95\xa6\xee\xae\xae(\xd8p]\xaa\x05\x15!\
\x04D\x90\x12\x14\x05\x95\x04\x02\x02\x814\xa4$\x10\xd3\
\x0b\x089\xbf?\xa6\xdc\x99[\x92\x9b\x90\x84\xa0\xf9>\
O\x9e\xc9\xdcy\xe7\x94\xf7\xbc\xe7{\xdeSGP\x15\
\x1886\xc0\xeb:\xaf1\x0a\xa2+\x82@\x10\x81\x08\
\x02\x11\x22P \x9a \x84*\xa7\xa8W!\x14$ \
\x840\xae\xe6\xe7\xaa\xbc\xb0<7\xe4\x84\xfe\x1c\x10\x8a\
&\xee g\x09\xc7\x85\x9c\xe2\x10\xaf\x16\x9f./\x84\
@\x0a\x17\xe9\xd3\xc2AK\x87\xcb\xf4\x99\xc2\xb1\xe7\xd7\
QN1\x9eK\xc9y\x04\xe9@\xba\x22\x94\xb3\x12\xd2\
\x81\x84\xbc\xcb%\x9f\xf0\xe2\xd39\x15)\x8e\xd2 *\
-\xa4;\xc66\xf2\x92\xe2.!\xc4\x1fA\x0cT\x14\
q\x9d\x91Ia\xca\xa4\xb0\x16\x86U\xb9\xc2\xa1\x10L\
r\x8aYi\xcer\xd6\xe7n\xe2s*$\x87pL\
\xc6d\x0e\xc7\xbdQZ\xc3qml.\x8c\x5c8\x1a\
\x9b~\x15n\x8dM\x22~\x15\x82\xadR\xc8\x8f\x85\xe2\
\xf5y\xee\xdc'\x7f\xf1\xb8lJ\xc1\x95\x1b\xc0\xc01\
\xdd\xeb\x08\xaf\xe7\x84`\xa4ke\x0b\xa7\xcc\xd42\x80\
{\x060\xa7\xd3\xa5\xb1j\xf9\x95\xc8\xf5\x97\x85x\xa1\
p\xee\x93\xdf{RL\xeePq\x03\xe8?\xb6\x9d\x97\
\x97\x5c(\x14\xc6\x08\xa1\x08\x975\x1b\xb3\xf2j\x19\xe0\
J\x18\xc0IN\x11\x94\x80T\x84X[\x22/?\x93\
7\xf7\xa9c\xa5\x15\x97;\x94\xdf\x00\x22F\xb7\xf0\xba\
N<\x87\x90\xf7+\x8aW\x1d\xb7\x89\xace\x80*e\
\x00K~\xe0\x92\x84\xf7.S\xe7\xb9\xc2\xb9\xd3N\xbb\
,77(\x97\x01x\xf5\x1f5Bx)\xab\x00\x7f\
\xabr\x85S\xa2j\x19\xa0\xea\x19\xc0\xc9\xd8$\xb9%\
\x8a\x1c\x9f7\xfb\x89h7E\xe8\x04\xc5C9Q\xa7\
\xff]s\x11\xacGJ\x7f\x00\x89T#\x97\x9a\x84\xfe\
\x8fvU\x9f\xa3&\x0e\x81tx\x8e\x94 49\x84\
~k\x95\x13jH\x08\xfd\xd6\x85\x9c\xf1\x5c\x8d\xc9.\
\xa7\xa5\xc3\x1c\x0e\x8er\xf6\xe7\x12\x87\xf4K49\xa9\
\xcaY\xe2\xd1\x05\xec\xf97\xf2k\x8e\xd7\x88VX\xe2\
1\xa7_O\x0f\xc6\xc5\xfe\xbbUN\x0d\x07\xedb~\
\xdf\x9e\x0f\xe1\x0f\xcaz\xffy\xaf\xcdAJ\x8f*w\
\xd9B7\x0f\xf5\xf7\xf2\xae\xb7J(\xca\x08pG\xaf\
\xb5\x0cP#\x18\xc0$'\x85\x12\x9d{\xa9d<s\
\x1f\xcb\xa5\x14\x94n\x00\x03\xa2:*R|\xae\x08\xa5\
\xa3ke*\xee\x13)\x5c(\xa7\xd6\x07p\x9d\xbe+\
\xf4\x01,\xc6j2.\x898*\xa5rg\xde\xec)\
Gq\x83\xd2\x9a\x00\xc5K\x8a\xff8\x16\xbe\x1e\xb8N\
\xb3zZ\x9c\x12e\xa6Y\xad\xb9p\x92\xd3\xe9\xda\xdc\
\x5c8<\xd7\xe9Q\x08\x5c\xcb\x19\xcf\xd5\x98\xecr\xa6\
\xf4\x9a\xe8\xd3*g\x7f.pT\xaa\xa6B]\xb9\x96\
xt\x01{\xfe\x8d\xfc:\xe8\x09S8\xf6\xfc:\xca\
\x19\x8a2\xd2\xe1hlzz\xd0.\xe6\xf7\xa5)\x1c\
ULU\x98\x10tT\x14\xf9\x0as\xe7\xba-\xe7:\
\xee\x1e(\x91w.\x10\x88;\xd4B\x16F\xa0R\xbf\
\x22U\x8b\x93\xba.\xf4R2?\xb7+\xcf\x1c\xce-\
\x9d\xdb\x13\xda\xbc\x19\xad\x9a4\xa2Uc\x1b\xad\x1a7\
\xc2\xd6\xc0O\xd7\x81\x9d\x96\x9c\xff\xb1B\x94\xf7w7\
\xe1\x95\x11\x8f=\x1f\x8e\xe9\xabh<\x90UX\xcc\xe9\
\x9c<~\xce\xcd\xe3Ln>)\xbfd\xb3\xf7\xe4i\
\xcd\x07\xb0\xeb\xcb~\xb5\x1a\x954\x95\x87]\xce\xc4\xc8\
\xf6\x82\x19\x1ap]\x93\x059\xf0t\xa9I5\xc3\xab\
o\xd4X\xe1%>R\xe9\xc6\xda\x96V\xc4\x07\x10\x8a\
\xb2\xeb\x0d\x8c\xee\xd3\x8b\xd1}z\xd2\xaca\x80k\
\xc5\xfd\xce\x91\x9eW\xc0\xfaCG\xf9\xe4\xe0\x11\xbeM\
;E\x89\x13\xe3\xe8\xd7\xb2}\x00\x14k3\x87\xe0\x9e\
\x9c\x19\x8f~\xe8\x18\xa7\xb3\x01DD\xf5\xf1\x12|\x89\
\x10\xde\xa5:\x22\x1e\xf8\x00>\xf5\xea\xf1\xc8\x88\xc1<\
>j(-\x1a\xd9\xae@5\xbf?\x9c\xca\xc9c\xe9\
\x9e\x1fx\xe7\xbb\xfd\x14_\xba\x5c!\x1f\xc0*'\x8b\
\x84\xf0\xea\x93=c\xf2~s<N\x06P'bd\
\x9c\x14\x22\xcc\x1eY\xf9\x19\xa0\x8e\x97\x17\x0f\x0c\xb9\x8d\
\x99\xf7\x8e\xa2E\xe3\xda\x82\xbf\x12\x9c\xc9\xcbg\xd1\xf6\
=\xac\xfc1\x81K%%\x15f\x00\xad\x99\xf81g\
\xc6\x94\x1e\x08\xa1\xf7\xa1\xad\x06\xe0\x151\xfc\x1eP\xd6\
\xa8\x81\x97\xe2\xbd\x97\xc2\x00mZ4c\xf5\xcc'\xb8\
\xa9}\x9b*Q\xc8\xef\x15\xfbO\xa5\xf3\xe7\x8f\xa2I\
\xc9\xce\xa9 \x03\xa8\xbf_\x96\x8c\xca\x9b9e\x9d\x1e\
\xae\xc9;\x1c\xeb%\xa5\x98o8\x1c\x80\xe1\xbd:\x04\
\x02f\xc7\x0e\xe3\xf9\xbd\xb7\xf5\xe5\xfb%/\xd5\x16~\
\x15\xa0{\xab@\xbe\x9e2\x81\xbb\xbbu\xf2\xb8\x17\x00\
\xcer\x8a\x22f\x9b\x07\x89\xbc\x8c\x7fz\x87L\x12\x8a\
r?@y\x19\xc0\xcf\xbb>\xef<\xf9\x08s&\x8c\
\xa5\xeeun;\x16\xb5\xb8B\xd4\xad\xe3E\xd4\x0d\xed\
i\xd3\xb8![\x12\x93\xb9\xac\x8d\x06\x96\x87\x01\x80\x16\
\xde\xdf\xec\x8f+\xde\x1a}\x04\x0c\x06\x18\xeb\x85\xa2\xcc\
6\x02+\x07\x03\xdc\xd4>\x94\xef\x97\xbe\xc4\xb8\xdb#\
\xaa2\xef\xb50\xe1O\xdd:\xb3\xf3\xa1\xf1tj\xda\
\xa8\xdc\x0c\xa0\x96o\x89\xc1\x02\xaa\x01\xdcZ\xdc\x1eh\
\xa3\xbek\x1f$\xd1\xfb\xa3\xe8\x81b\x1a\x83F\xa2(\
\x0a/\xdc\x7f/m[6\xaf\xfa\x5c\xd7\xc2\x82\xce\xcd\
\x1a3oP$X\xe6\x0c\xf4.\x9fp./\x93\x9c\
\x10\xe2\xa6\x06\x0b\xdf\xee\x08\x9a\x01(\xca\xe5\xbb,\x96\
\xe2!\x03\xbc\xfc\xf0D\x06\xf7\x08\xaf\x86\xec\xd6\xc2\x15\
\x06\xb5\x0fa\xee\xc0\xbe\xe5f\x00\xa4\xc4\xcb\x8b!\xa0\
\x19\x80\x10\xe2.\x8b\xa5x\xc0\x00\x0f\x8e\x18\xc4c\xa3\
\x87WC6kQ\x1a\x9e\xe8\xd3\x83\xd17\xb4/\x17\
\x03 \x04%\x94\x0c\x01\x10\xdc<\xd4_\xa9\xa3d+\
\x8a\x22\x5cO\xb48\x8f\x034m\x18\xc0\x89\xd5K\xa9\
_\xb7nu\xe6\xb5\x16n\x90S|\x81\x9eKV\x90\
QPX\xfa8\x00vF\x90\x88\x8b\x0a\xa2\x99\xe2\xe5\
\xa5\x0c\x13B\x88\xf20\xc0?\xc6\x8d\xae-\xfc\x1a\x84\
\x80\xfa\xf5\xf8k\x9f\x1e\x94\x87\x01\x10\xd4\xbd\x8c\x18\xaa\
H\xc4-\xea;\x9e\xf9\x00\xa1-\x02yh\xc4\xa0j\
\xcb\x5c-<\xc3\xfd\x7f\xe8B3_o\x8f}\x00\x01\
(J\xc9-\x0a\x944W\xdf\xf1\x8c\x01\x9e\x990\xb6\
\xb6\xf6\xd7@\xd4\xafS\x87\x19\xfdn\xf1\x98\x01$ \
\x11\xcd\x15\xa1(\xcd\xd5w\xcaf\x80\x06>\xde\xdcs\
[\xdf\xea\xccW-\xca\x81\xf1\xe1\x9d\x09\xa8W\xd7c\
\x06@\xca\x86\x8a\x94\x9e3\xc0\xd0\x9bo\xa2\xeeu\xd7\
Uk\xa6j\xe19\xeazy1\xb0m\xb0\xc7\x0c \
\xa0\xb9\x02JC\xf0\x8c\x01\xee\xecss\xf5\xe6\xa8\x16\
\xe5\xc6\xc0v\xc1\x1e3\x80D4W\xa0\xa4!\x94\xcd\
\x00\xd7yy1\xa4W\xf7j\xceN-\xca\x8b\x01\xa1\
\xad=f\x00\x84l\xa8\x08\xa1\xd4\x83\xb2\x19\xa0e\x93\
F\xf8\xfb\xfaTonjQn\xb4h\xe0G\x90\xbf\
\x9fg>\x00\xa2\xae\xe2\xd2R\x5c0@H`\xd3\xea\
\xccG-\xae\x00A\xb6\x00\xcf\x18\x00P\x5cZ\x8a\x0b\
\x06\x08n\x11X}9\xb8B\xec<t\x94\x07\xdf\x5c\
n\xdc?\xf8\xf6JR\xcee^\xc5\x14U/\x82\xfc\
\x1bx\xc8\x00p\xcd3@V~\x01q\xc9i\xc6\xfd\
\xbc\xb5\xd1\x0c\x99\xf7*+w}k\xfc\xb6*\xf6;\
:?5\x97\xe5\xbb\xbe3~\xdb\xf9S\x22Y\x05\x85\
\xd5\x9a\xd6\xeaB\x90\xcd\xbf\x0a\x18\xa0y\xb3\xea\xcb\x81\
\x0bd\xe5\x17\xf0\xf9\xb7?X\xee\xe7}\xf89\x83\xe7\
\xfe\x93\xe0\xa6\x8d\x01x\xea\xfd\x0f\x99\xff\x89\xb6-\xce\
\xb4\xd8M\xb7\xfcG\x96\xadfy\xacj\x04\xdd\x82Z\
q\xcbs\xff\xe2\xf5/wY\xe2\x89O;u\xcd\x1b\
F\xa0\xaf\x8f\xc7\x0cP\xc7i\xbd\xbf\x94\xf6\x05\x87\xa6\
\xf5\xe9\xcd\x1b5\xbc*\x99I>\x9b\xc1\xfc\x0f\xd6!\
\x81eO<\x04@\x5cR*\x0f\xbe\xfe\x1e\x07\xd3~\
\xe6\x8b\xb9\x7f\xc7\xe6\xe7\xcb\xe7{\xf7\xb3d\xf3W\xda\
J&\x8c=\x14\x80y\x1e\x9c\x7f\xac\xf9\x8cnA\xad\
\x08\x0f\xbe\x9e\x97\xef\xb9\x8b{\x96\xbc\xcf\xca=?\xf0\
\xc1\x94I\x844iDPc\x1b\xd3\xd7F\x13\xd2\xb8\
\x11Sn\xeb\x83\xcd\xc7\xfbjd\xfb\x8a\xd0\xcc\xcf\xc7\
y\x1f\x87y\xff\x80\xa2\x94\x9f\x01\x0a/\x5c\xac\xd6L\
d\xe5\x15\xf0\xc2\xeaO\xb9\xf9\x89\xd9H\xa4Q\xf8\xcb\
\xb7\xc52x\xce\x8b\x1cL\xfd\x99\xfb\xfa\xf5\xa6_\x97\
Nd\xe5\x17\xf0\xf0\xd2\xff\x99\xbb\xbf.\x19\x00 \xa7\
\xa8\x98G\x96\xad\x01 \xea\xa6\xaeDth\xcb\xc1\x93\
\xa7\xe8\xfd\xc2\xab\xec<z\x1c\x9b\xaf\x0f\xefL\xba\x9b\
\xd4\xcc,\xba\xccy\x997\xb6\x7f]\x8d\xb9\xae\x1c\x5c\
.\xf1p$\x90r\xf8\x00\xba\x5cu`G\xfc!z\
=6\x83y\xab?eD\xaf\xee,{\xe2a\x00\xfe\
\xb7-\x96\x07\x17/#\xb7\xb0\x18)%\xcf\xdc\x1d\x05\
\xc0\xbc\x8f7\x90]Ph\xee\xfe\xbad\x00=\x1f\x07\
N\x9ef\xf9n\xb5)\x98\x195\x18\x10\xe4\x14\x151\
\xec\xdfo\xb3\xe2\x1b\xf5\xc0\x8d\x17\xff8\x82\xd6\x8d\x1a\
2}m\x0c\xb7.z\x9d\xf8\x93\xe5\xdav\x7f\xf5Q\
\xd9>\x80\xbdjU-\x9ezk9\x83g\xcc'-\
#\x93.\xa1A\xfc\xeb\xa1\x09\x00\xfco\xeb.\x1eZ\
\xfc\xaef\xc9\x92\x09\x03\xfa\x10\x12\xd8\x94\x94\xf4\xf3\xbc\
\x11\xb3\xcd\x9e\xee2\x18@o\x1f\x16~\xbe\x05\x80~\
\x9d\xda\xd1\xb7C\xa8\xf1\xc2\xe4\xe5kY\x1f\x97\x80\xcd\
\xd7\x9bMO<HP\xa3\x86\x1c<u\x96\xbe//\
e\xc1\xa6\xed\xd5\xa2\x83J\xc1\xb5\xc6\x00Yy\xf9\xf4\
\x98\xf2\x0f\x16\xaf\x8b\x01\xa0\x81O}\xd6\xcez\x02\x9b\
\x9f/;\x0e\x1c\xe6\xa1\xd7\xde5\xd2#\x10L\x1d>\
\x10\x80\xc5\x1b\xbfD\xdf+\xe7)\x03\x80 5\xf3\x17\
V\xec\xde\x0b\xc0\xa3\xb7G\x1a/H)yd\xf9Z\
\xe2O\x9e\xc6\xe6\xe3\xcd\x07\x0f\x8d7^[\xb0y;\
\xf7\xbc\xbb\x86\xac\xc2\xa2*\xd5E\xa5\xe0Zb\x80\xb8\
\xe3\xc9\x0c\x9a\xfe<\x07\x92R\x8d\xdd\xb1\xcb\xfe\xfa\x08\
\xa1\xcd\x9b\x91|6\x83\xbb\x17\xfe\xc7\xa8\xb9B\x08\xba\
\x04_Ox\x9b`\xb2\xf2\x0bX\xb9s\x0f\xfa:\xf9\
\xf20\x80@0\x7f\xfd\x17\x00D\xdd\xd4\x85\xd6\xda\xd6\
5!\x049E\xc5\x0c{\xf5]\xb2\x0a\x8b\x08k\xdd\
\x92\x19C\x06\x18\x8e\xe5\xc6\x84#\x0c\x7f\xe3\x7f5\xdf\
\x08\xae\x15\x06\xd8\x7f<\x99A\x7f\x7f\x8e\xf8\xa4T5\
\x1a$#o\xf9\x03w\xf6\xee\x09\xc0\xd8\xf9\xaf\x92S\
Pd\xd4\x5c)%\x13\xb5)\xe9\x0d{\xf7\x93SP\
X!\x06\x90HNff\xb3\xf3\xc8q\x00\xee\xeb\xfd\
\x07\x8b\x1e\xb2\x0b\x8b\x98\xbcb-\x00\xb3\x86\xdfN\x9f\
\xb6!Z<p\xf0\xf4Y\x86\xbd\xf1?\xe2O\x9d\xa9\
\x12\x9dT\x0a\xae\x05\x06\xd8\x7f<\x99\xc1\x7f\x9bKN\
A\xa1a\x91\x01>>\xfcSk\xf7\x9f_\xf5\x09\x07\
SN\xa2Uq#=\x13\x06\xf4\x01`\xfd\xde\xfd\xe8\
\xd6Z\x11\x06\x90HV~\xbd\x0f\x80\xfb4\x833\xeb\
!\xfa\xc0O\xac\xd8\xa3\x8e=\xbc8f\xa89\x19$\
\x9cIg\xdc{\x1f\xd5\x5c&\xa8\xe9\x0c\x90\x95\x97\xcf\
\xd8g_\x22[\x1bt\xd1C\x9fv\xd7P\x83\xfa_\
_\xff\x05\xf63t\xd4\xeb\xf0\x9e\xe1\xd8\xfc|\xc9\xca\
/ \xfa\xfb8tk\xad\x08\x03\x08\x04\xd1q\x09\x00\
\x844iD\xebF\x0d-z\x00\xf8\xc7'1jS\
p}K\xc6\xf5\x0a\xc7\x9e\x1cIZv\x0e\xc3\x97.\
\xaf\x99FP\xd3\x19`\xd0\xdf\x9e%5\xfd\x1c\xe6\x0a\
\xeb\xef\xe3\xcd\xb4\xbb\x86\x020o\xf5\xa7Z\xd7N\xab\
r\xda\xb5_\x97N\x80J\xff\x9aI_\x11\x03\xe4\x16\
]0\x9a\x81\x91\xe17Z\xf4\x00\x90[\x5c\xcc\x82\x98\
\xaf\x00\x989\xd4\xee\x0b\x08-\xde\x83g2\x98\xfc\xe1\
\x86J\xd5M\xa5\xa0&3\xc0___F\xfc\xf1\x14\
5X\xed7\x09<6j\x18\xb6\x06~$\x9f\xcd`\
\xc5\xb6]\x96\x1d/z\xd5\x8b\xd4\x0c`g\xc2\x11\xbd\
j_\x11\x03H$\xd1q\x87\x00\x88\xe8\xd0\xd6\x89\x01\
\xa4\x84\xa5;\xf7\x90\x92\x99EHc\x1b\xf7\xf6\x083\
\xe2\xd3\xe3\xdfx\xf8\x18\xf3\xbf\xd8Yi\xfa\xa9\x14x\
\xc8\x00upa!\xf6\x9a\xa4\x1e;\xa2\x09TZ\xda\
^\x99\xfa\x00\x8f\x8d\x19Aj\xfa9\xb2\xf3\x0b8\xa0\
9\x80z\xed_\xbf\xe7{\x82\x9b6!\xf5\xfc/&\
\x06P\x08j\xda\x88\xf06\xc1\x00D\xef\x8bS\x0bY\
\xd1\x18@\xd1\xd2\xad\xefw.\x93\x01\x14\xcd\x08\x14b\
\x8f\x9d\x00 \xaa{\x17kM\xd1\xc4\xbb\xb4lN\xf4\
\x81\x9f\x98:\xa073\x87\x0e \xb8\xb1\x0d\x84 B\
s\x0c\x83l\x0d\x09i|u\x86\xca\xdd\xc2U\xb9b\
b\x00\xed\xde\xe3\xb9\x80\xca\xf6\x01B[\x04\x12\xaaM\
1\xdf\xd5\xd7\xba\xd4\xec\xf1Q\xc3x|\xd40\xa7w\
\xe24C\x01\xf8p\xfa\xa3\xf6BE\xf5\xda\x0f\xa4\x9e\
\xc4(y\xd3\xb3Yw\x0dQw\xcd\x22@@D\xa7\
\xf6N2:\xbe\x9e9\x8d\xb0\xa0Vn\xd3\x1d\xd2\xd8\
\xc6\xac\xa1\x03\xca\xcc\xdfU\x87\x87s\x01\xd5\xca\x00\xcf\
\xfdw\x0d\xf3V|L\x80\xaf\x0f\xe1\x1d\xda\x10\xe0\xeb\
Kx\xbbP\x10\x82\xd9\x13\xc6\x02\x10w<\x85\xe0\xc0\
&\xd8\x1a\xf89\xbd\xaf\xd7~\x80\xfe];;=\xbf\
\xd3\xcd\x92\xb5g\xc6x\xbe\x85\xcd]\xe1\xa7df\x01\
\xaa\x01\xa4df\xb1\xfa\xfbx@\x10\x9b\x94\x0a\x08\x12\
\xce\xa4\x93]|\x81E#\x07\xf1hD/\x8f\xe3\xab\
2\xd44\x06\xc8\xca\xcbg\xf1'\xd1H)\xc9)(\
dg\xdc!\x10B\xa5\xfb\xc0\xa6\x86\x01\x8c}\xe1_\
\xa4\x9e\xcb\x04\x01\xfa\xf9\x03amCh\xe8\xeb\xc3\xcb\
\xff7\x9e\xf06\xc1\xbc\xf0\xc1:v\x1d:J\xbf\xae\
\x9d@\xab\xd5\x96\xab\xa6\x00\xbd\xe0\xe7\x7f\x1aca\x00\
\xc7wb\x8f&1\xbew\x0f&\xf4\xe9\xc9\xce\xa3'\
X\xb8q\x1b\xd9E\xc5$\x9c>\xabz\x0a\xda18\
][\xb7`\xcf\xf4)\x844\xb6\xf1\xfa\x8e=\xe4]\
\xfcU\x8d\xcb\xd8\x86\xa5\xb0pk,\xe3\xfe\xd0\x0d\x9b\
O\xfd+\xd2\xd7\x15\xa3\xa61\xc0S\xaf/#'\xbf\
\x00a(\x0b}i2QZ\x1f<\xeex2i\x19\
\xe7A\x08\xcc\xe7\xe9\x1dHN\x05\xa1\x10\xdc\xac\x09\xa0\
:\x80\xbb\x7fJ$\xf6\xf01\xbb\xf2\xb5L\x19g\x16\
)v\x03\x98\xf7\xd9&\xcb\xefj\xfc\x8a\xfd\x04S\xa1\
\xf6@&\xf4\xe9IC\xef\xfa\xc4&&\x19\xbf\x9b]\
\x87\x83?\x9f%\xfe\xe73\x84]\xdf\x82\x91];\xb3\
\xfa\xfb\x03V\x1f\x04I\xee\x85\x8b,\xfdz\x1f3\x07\
]\xe5\xf3\x12j\x12\x03$\x9fNg\xf9\xe6\xaf\xec\x16\
\xa8\x19\x19\x9a\x11L\x1c\xdc\x1f\x80\xe5_\xee\xc48'\
O\xf7\xd2\xa5j\x84\xfe\xde\xf5\xb1\xf9\xf9\x02\xb0\xfb\xf0\
1{aK\xa9}iC\xda\x1dA\xcdo4t\x01\
\x96|\xf8\xfb\xf8\xd0-\xa8\x95\x9a\x0e\xcd\x08\x02\xb4\x1a\
\x1b\x16\xd4\x8a\xbe\xed\xd5\xc9!\xd5H\x85\xe9 ,H\
\xfd%\x9b\xb0\xeb[0\xbeg\x18\xa9Y\xda\x07<t\
\xa3B5\xaa\x03\xa73*\xac\xabJCMb\x80\xe5\
\x9b\xb79\xf5\xafu\x06\x08\xf0\xf1Q\xfd\x00`\xc3\xb7\
?\xd8k\xbe\x89\x01@\x12\xa6\xb5\xffqI\xa9\xe8\x87\
T\x96\xb7\x17\xe0\xef]\x9fY\xa3\x862\xed\x8e\xfe\xa5\
\xa6\xf7\x8b'\x1f.3O\x91\xedC\x89l\x1f\xea\xb1\
\x0e\xaa\x1d5\x89\x01Vl\xfe\xcaj\x81&\x06\x88\x0c\
\xbb\x01PW\xfe\xa4\xa6\x9f3\xdafG\x06\xe8\x16\x1a\
\x04\xa0\x0e\x0eaOgy\x18`\xd6]C\x98vG\
\x7f\xb2\x0a\x0a9\xa8\xcf\xef\x9b\xfd\x06G\xe5\xe1\xd0\x85\
tx\xee\xf9\xbdC\x1c\xda\xbd=|\xcb\x03\x93\xa8\xa0\
oPK*\x84\x9a\xc2\x00\xfb\x8f\x9d \xe5l\x86\xa9\
\xed\xb72@x\xdb\x10\x00v\xc5\xab\x831\xee\x18\xa0\
\xa1\xb6'\xe1@rZ\x85\x19`\xda\x90\x01d\x15\x14\
r\xc3\xdf_ \xb7\xf8\x82\xc5\x07\xc0h\xf3\x15\x87\xdf\
UG@\xd5\x8fp\xf0%\xecW\xa3\xd2(\xfa\xc1\xcf\
\x0e\xbe\x89S<\x02)\xf4\xc3\x1f\x855\x1e\xfdw\xe0\
\xe1\x1e\xddXt{\xef\xf2+\xdeC\x06\xa8\xf2\x91\xc0\
\xd7>^o\x19\x893\x8f\xb0\x01D\x86\xdd\x08\xc0\xce\
\x03\x87\xd5\xdf\xb5\x98\xad\xe7\xea\x0b\xc3\x0143@y\
F\x02\xfbth\x0b\xc0\x81\xb4S\xe4\x14\x15[F\x02\
\xedu\xdd}:\x1d\x06$]\xc7o\xe8\xcb\x9e\x10c\
\x04\x0ek\xc2\x8cX\x8d\x9f]\x8f\xd8\xadIp{\xd0\
w\xe9\xa8)s\x01\x07O\xa48\x8c\xac\xd9\x19\x00\xa0\
\x7fx\x17\x00c4\xd08-\xdb\x81\x01\x82\xb5e\xe9\
\x07RNb\x9c\x06\xae\xf3\xa7td.\x5c0\x80E\
;F\xe1\x9b\x88\xd8I\x0f\xe6t\xea\xcd\x8a\xfd\xea\x22\
~C_\xf6\x84\x185\x0fk\xc2\x9c\xe8\xdfE\x8dE\
Jr\xf5\xaefy\xe1\xaa\x5cM\xe1\xea\xd1V)\x03\
d\xe5\xe5\x13\x97\x98\xe4\x96\x01\xcc[\xcd\xcc\xeb\x01\xf4\
\xab\x99\x01\xf4\xf8\xb3\xf3\x0b*\xc4\x00\xd6\xe4[\xe7\x02\
j2\x03T\xd8\xf7\xaa\x09\x0c\x10\x9f\x98d\xb5<\xcb\
U\x1d\xe0\x01\xd5\x01\xb4\xd7\x0f\xd7\x0c\xd0\xbf\xdb\x0d\xf6\
\xf4\xfd\x8e\x18\xa0\xa2\xcc[#\x18`\xe7\xfe\x83V\xcb\
\xb3\x5c\xed\xbb\x8dR\xcff\x98\xea\x87\x1b\x06\xd0\x90\x9a\
q\xbe\x96\x01<\x81\x87\x0cP\xa5\xbd\x80\x943\xe9\xa5\
2\x80\xbe\xdb\xc8\xba.\xc0u/@G\xda\xb9L\xbb\
\x97.)G/\xc0\xa2\x1d\xcc\xb3\x81 \x991b0\
\x11\x1d\xdb\xb0\xfbX2\x0bb\xb61s\xf8\xedDt\
\x08%61\x99\x85\x9bw0\xfe\xe6p\xc6\xf7\xea\xce\
\x81\xd3\xe9\xc4\x1eO\xe1\xd1~\xb7\x90\x9a\x95\xc3\xd3\xeb\
\xb7\xd0\xb5esf\x0e\x8e$5+\x87\x19\xd1\xdb\x08\
\xb2\x05\xb0h\xe4@r\x8a/\xb0t\xcf\x0fL\xee\xfd\
\x07@\xb0h\xfb\x1e\x10\x82\xa7\x07\xdc\x8a\x00\x16\xee\xfa\
\x8e\x939y,\x89\x1aD@\xfdz,\xda\xbd\x8fo\
N\x9e\xb12\x80\xde\xab(/<\xec\x05T\xe98@\
\xea\xd9s\xd6\xfe\xa7\xe5j\x92K?g\xaa\x87\xea\x7f\
\x8e\xe3\x00F\xd1i\xf7\xe5\x1f\x07\xb0h\xc7(|\x89\
dDX\x17\x9e\x89\x1a\x0c@\xbf\x8e\xed\x90\xc0\xac\x11\
\xea\xaa\xe3\xc8\x0em\x09\xf0\xf1f\xaa\xb6\x0c-\xb2C\
\x1b\xa6\xf6\xbf\xd5\x08)\xa7\xa8\x98\xf1=\xc3\xec;\x88\
\x04D\xb4\x09&D\xdbI5\xf2\xc6\x0e\x86l\x90\xcd\
\x9f\xb4\xec\x5cFvn\x07@\xd7\xe6M9\x90~\x9e\
\x11\x9d\xd4\x1eJ\xd7\xc0&\x84\xbc\xb2\xcc\xae'E\xb9\
2\x06p,WS\xb8\xd5\xc2\x00\xba\x0f\xe1\x96\x01L\
\x1bN=e\x00{[[y\x0c\x10\xe00q\xf3\xcc\
H\xeb)hz\xe1\xbb\xc2\xd4~\xb7X\xee'\xf4\x08\
s+\x1b\xd6\x22\x900\xd3.\xeb`[\x00\xc16\xeb\
\xd7S\x9c|\x80*f\x80*\xf5\x01v\xc5\x1f*\xdd\
\x070m8-\xcd\x07\x88\xb8\xb1\x93]\xce\xdc\xd6V\
\x92\x0f\xb01\xeep\xb9\xf2\xa5O\x0d{$\xfbK\xb6\
\xc7\xb2\x1b\x8f%\xff\xb6|\x80K\xb1\x9e\xad\x95\x9b3\
\xf1n\xe6L\xbc\xdb#\xd9\x0b\xeb\xde/w:\x0aW\
,v\xf8\xc5\xca\x009EE\xac\xdf\x9f@T\xf7.\
e\x86\x15\xff\xf3\x19V\xed\x8d\xe3\xa5\xd1C=\x8a\xfb\
\xd1\xcf6\xb3\xf1\x81{<\x92\xddx,\xf9\xb7\xc5\x00\
5\x17\xce\xbd\x80\x0d\xda\xea\xe0\xb2\xb0\xf2\xbb\xfdl\xf4\
ptn\xc3\xa1c\xc4&\xa5\x11\x7f:\xbdL\xd9\xec\
\xa2bb\x12\x7fc\x0cP\xa7\xef\x08\xd3<\xbd\xe3\x18\
\xb9`\xcb?\x9f\xa3\x7fx\x17\x9e_\xfe\x11\xf3V}\
\x02\xc2:\x16\xae_#\xbatb\xeb\xc2Y\x00\xd4\x1f\
u\xbf\xf5K\xa4\xa5\xac\x07(Z\xb5\x04\x00\xef\x09\xd3\
\x88\xe8\xdc\x8e-3\x1f\xd7\xb5\xe3\xd4\x0b\xd8\x18w\x98\
\xac\x82Ble\x9c\x83\x14s\xe8(i\xbf\xe4\x18\xeb\
\x02JC\xf4\xe1D\x84\x10\xac\xda\x9f@X\xcb\xd2O\
X\xd9x,Y\xcd\xc7o\x89\x01\x22\xc3\xbb\x96\xea\x03\
\xc4\x9fH1dK\xf3\x01b\x0f\xd9k\x5cU\xf8\x00\
\xa0\xee\x0e\x8e\xd6&\xa4\xdcaWb\x12\xa9\x99\xd9 \
\xe0\x0d\xd3\x09$\xae\x90UT\xcc\x9a\xfd\x09H)\xd9\
\xf4\xd3\xf1Re\x016\x1e=a\xca_\xf51@\x15\
\xcf\x05\x94\xde\x0b\xc8\xce/0$\xcd\xbd\x00\xfdZz\
/\xc0\xc5H\x9c4%\xb3\xcc^\x80\xf3H\xe0\xaa=\
?\x98\x85\x98\xbe\xd6\xfa\x11\xee\x95\xdf\xc5\x19]\xcc\x98\
\x84\xa3\x96\x0d!+\xf7\xc5[\xee7\x1e>f\xa47\
5;\x97]I\xf6cl\xe2\xcfd\x10m2\x8a\xd4\
\xec\x1cb\x12SL\xf931@\x15\x8f\x04V\xe98\
@p\x8b@v\xc5\x1f*s\x1c 8\xb0\xe9U\x1d\
\x07\xd0\x9b\x81\xd8cI\xcc\xdf\xf0%\x11\x1d\xdb\x12{\
,\x89%\xdb\xbf\x01\x04#\xc3n 61\x99\xd5\xfb\
\xe2T\xad(j\x9b=\xee\xfd\x8f\x989\xb8\x9f1 \
\xb4t\xf7>\x16E\x0d\x22-;\x97\x19\xd1\xdbL\xe9\
\x15\xcc\xd8\xb4\x9d\x19\xb7\xa9\xdd\xc9E;\xbf%-;\
\x0f!\x04\xfe\xf5\xeb1\xf3\xcbXK\xbf\xfd73\x0e\
\x10\xd2\xbcY\xa9\x0c\x90zV]:\x15\x1c\xd8\xd4\xe3\
q\x80\xe0fMH=\x9fY\xa9\xe3\x00Z@\x00,\
\xdc\xb8\x8d\x051\xdb\xd0\xe7\xef\x97\xec\xf8\x86%;\xf7\
h\xe9P\x0b_\x8fo\xf7\xf1T\x86%\xad\xd0~\x17\
\x1c8\x93\xce\xf0wV\xabQ8\x9c\xd7\x9fp\xf6<\
\xe3\xd7|\x8ey=\xc0\xb8\x8f\xa2\xd5p\xf5?\x87r\
\xb8\xe6}\x80~\xddK\xf7\x01R\xd2\xcf\x01\xea\x90p\
i>\x80\xb94\x83\x9a6\xae\x12\x1f@\x7f\xe1\xf76\
\x17P\xa5>@X\xbb6\xa52\xc0\x01\xcd\x09\x0cm\
\xde\xacL\x1f`\xc7\xc1\x9f\xec\xe9\xab\x22\x1f\xc0Q\x0f\
\xe6l\xebDd\xbf\xba\x88\xdf\xd0\x97=!\xbf\xeb\xd9\
@\x9b\xbf\x1f]\xdb\x04\xbbe\x80\x1c\xd3ql}\xb5\
\x8d\x1ee\xad\x07\xa8e\x00\x0fQ\x13\x18\x00\xa0\xdfM\
\xdd\xdc2\x00\xc0\x0e}{\xb66/\xe0\x8e\x01R3\
\xce\xabr\xcd\x9a\xfc\xae\x18\xc0\xbf^\x05?\xceQ\x13\
\x18\x00`\xe2\x90\xdb\xdc2\x00\xc0N\xad\xef\x1d\xa9-\
\xf8p\xc7\x00\xba\x01\x04\xf8\xfaT\x88\x01b\xb5-\xe0\
\xdd\x82Z\xe1\xef\xed}\xcd0\xc0\xbd]\xec\xb3\x89\xe5\
\x82\x87\x0cP\xe5\xab\x82\xbbwhK\xeb\xc0\xa6\x9c\xd4\
\xce\xea5\xd7,\x89\xdd\x0f\xe8\xa7-\x0eu\xd7\x0b\xd0\
\x0f\x92\x08\x0b\x0d\xa2\xa2\xab\x82\x17o\xde\xce\xb4!\x03\
\xf8\xe9\xe5\xd9\x1cH;\xa5\xc9\x98\x04\x859~\x9c\x9f\
;\xe9A8=v\xd2\x93\x9b{\x01\xf6\xedj\xa6\xe0\
\x1c\x03\x8c\x08v\xbfQ\xb5Tx\xd8\x0b\xa8\x96}\x01\
\x8f\x8f\x8d\xe2\xa97\xde\xc3i\x1c@\xd8W\x03\x876\
oFP\xb3&\xa4\x9d;\x8f\xa5\x8d\x96ja\xeb\x8b\
F\x83\x9a5\xb1\xff^\xce}\x01\x0b>\xff\x02\xa1\x08\
\xa6\x0e\xeeO\xbf\xce\xed+\x9c\x9fk\x02\xae\xca\xd5(\
\xdfj\xde\x19\x14\xd5\xf7\x16\xfe\xb6\xe4\xbfF<zp\
\x12\xc8-($\xeex2\xe1\xedB\x89\xba\xb5\x07o\
\xac\xff\xc2%\x03\x1cH\xfd\x19\x80\xd0\xc0\xa6\x15f\x80\
\x9c\xc2\x22\xa6\xafY\xc7\xfcu_\x10\x16|\xbdeN\
\xa1u\x93F\xbcs\xff\x9f\x00\x18\xf2\xef\xb7\xd5x\x85\
\x9eoa\xd4\xce)\xfdoed\xb7\xce\xecJLf\
\xe1\x96]\xf6}\x01\xbaK\xa0(\xf8\xd7\xab\xc7\x07\x93\
\xfeXa}U\x0aj\x12\x03\x84\xb6\x0c\xe4\x99\x89w\
3o\xf9GN\x0c \x81\xe5[v\x10\xde.\x94\x89\
\x83\xfa\xf1\xfa\xfa\xcd\xb8b\x80\x9c\xfc\x02\xb2\xf2\x0b\xb0\
\xf9\xf9\x12yCGv\x1d>V\xe1\xbd\x819E\xc5\
\xec:z\x1c\xf3&\x90\xe1\xda\xa2\x90\xf8\xb4S\xc4&\
&\xa9\xb9\xd7\xbf\xa2n\x9a`Z:~\x14\x00+\xf7\
\xc5\xb1[?\xaf\xc0\xb4;X\x0a\x981\xb0\x06|H\
\xbb&1\x00\xc0cc\xa3x\xed\x93hr\x8b\x8a\x8d\
\xe0\xf4\xb6v\xc3\x9e\xef\xf9\xf7\x94\xfb\x09o\x17Jp\
\xb3\xa6\xa4\x9e\xcb4\x18 R?\x07@\xa8\x8e\xa0\xcd\
\xcf\x97\xfbn\xebc\x1c\x15cv\xd3\x03|}\x08\x0b\
i\xad\xdd\xdb\xe3\xde4c\x9aQ\x83ug\xd0\xea\xde\
CD\xc7\xb6\x86|\xdf\xf6\xa1\x08\x04\xd9\xc5\xc5$h\
S\xb9B\xc0\x8d-\x02\x09i\xac\x9e'\x18\x93p\xd4\
\x99\x81\x90\x04\xd4\xf7fr\x9f\x1eW\xa4\xabJAM\
b\x00\x00[\x03?\x1e\xfb\xe3H^X\xfe\x11am\
C\x08h\xe0GX\xbbP\x1a\xfa\xf9\xd2P\xdb\xf5\x0b\
\xb0\xe5\xc5\xd9\x84\x96q4\xfd\xa4\xdb\xcaW\xc3\xfa\xdd\
`\xf7\xa4\xcbj\xfb\xc3\x82Z\xb9\xdd\x1c\xaaO\xf6d\
\x15\x1619\xe2f\x10\x82\xb4\xaclR\xb3sI\xfb\
%\x87\x9fs\xf2X8\xf2\xf6\x9aq\xc2xMc\x00\
\x80g\xef\xbf\x97g\xef\xbf\xb7T\x19W\x85\x9f\x9c\x9e\
AZF\xa6z\xb2\x88\xb6Kxq\xf4\x97\xda!\x91\
\x0e\xe3\x14\xa6\xabq>\xc0\xa71\x86\xef\xe1J.\xc0\
\xa7>S\x07F\x02\x10{,\x09\x09t\xbd\xbe\x85S\
A\xea\xf76\x1f\xef\x9a\x7fLLMc\x00G\xecO\
L\x22\xb7\xb0\x88\x94\xb3\x19\xa4e\x9cG\xa2\x1e\x12e\
k\xe0\xc7\xf3+\xd72o\xcd\xa7\xe8'\x84\xe8\x8bI\
\x02\x1a\xf8\x91\xa1-\xf2x\xfe\x83u\xe4\x15\x17\xa3\xb7\
\xcd\x966[\x08\x8b\x01,\xf8lS\xa9\x1bA\xbb\xb6\
n\xc5\xd4\x81\x91d\x15\x142\xe4_o9\x87\xa7\x08\
\x96\x8e\x1f\xcd\x84[nR\x8f\x87\xd9\x17\x0f@\xb7V\
\xcd\x09\xf0\xaeO\xebF\x0d\x8dU\xc05\x065\x91\x01\
t\xfc\xf5\xf5e\xbc\xb1.\xc6RXz\xf8s&\x8c\
e\xc2\xc0H\xe6\xaf\xf9\xcc\xd2\x0b@(\xe4\x14\x14\x10\
\x97\x94Jx\x9b`\xfau\xe9\xa4\x9e\x14V\x09\xa7\x84\
Evl\x03\xa8\xb5\xdfy\xee\x02\xfc\xeb\xd7cD7\
\xd5\x17Y\xb8y;\xab\xf7\x1dp\xda\x1d\xbc\xe8\xceA\
<\x1aQ\x83\xbe\xab\xe8!\x03\x5c\x955\x81\xafL}\
\x80\xae\xa1*\x95\x9b\xc7\xc7\x16\xaf\xdbDV^>\xa1\
\xcd\x9b1\xfe\xf6\xbe\x96\x91@\xbd\xdb\xb0+\xe1\x08\x00\
#{u\xd7\xdd{<\x19\x09\xb4\xe6\xc3:\x17\x10\xd1\
A]\xa7\x1f{\xec\x84\xcb\x91\xc0G\xfb\xf7\xc6\xe6\xe3\
MJf\x16\xab\xf6\xc6\x1b\xf1\xe9\xf1\x0f\xbb\xb1C\xcd\
*|\xa89s\x01\xee\xb0\xf5\xdf\xcf\xd3M\x9b(\x02\
5\xbe\x9c\x82B\x16\xaf\xdb\x04\xc0\xecqch\xe0\xe3\
mb\x00\xf5\xbaK[\x1e\x16\xd5\xab{9\xe7\x02\x1c\
\x19@\xf3\xda\xbd\xbd\x89\xbaI]\x0d\x1c\x1d\x7f\xd8\xa2\
\x07\x80\x00\xefzL\x19\xa0\xee\xcf_\xb0i;\xf6\xe4\
\xa8\xf1vi\x19\xc8\x9b\x7f\x1aY\xa9\xba\xa9\x14\xb8*\
WL\x0c\xa0\x89]\xb5U\xc1\xb6\x06~\xac}n:\
\x0d|\xd4E\x98z\xe8\x8b?\xdfD\xf2\xd9\x0cB\x9b\
7\xe3\xb1;\x8781\xc0\x86\xef~$%\xfd\x1c6\
?_F\xf4\x0a\xbfb\x06\x18\x11\xae\x0eA\xc7\xa7\x9d\
\x22-3\xcb\x89\x01\xde\xbco\x0c6\x1fo\xe2O\x9e\
f\xf5\xbe8\xcb\x5c@\x97\x96\x81\xc4L\x9eX3\xbc\
~G\xd4t\x06\x00\xf5\xb0\xc8m\xff\x9a\x8b\xbf\x8f\xb7\
a\x91\xb9\x05E<\xf8\xca[\x00\xcc\x19?F;\x1a\
\xc6\xce\x00B\x08\xd6\xef\xfd\x11\x80\xa8\x9e\xdd\xaf\x98\x01\
\xee\xeb\xa3\x9eP\xb6R\xfbT\x8cY\x0f\xc3\xbbv&\
J3\x90\xa7?\xdbdN\x06][5g\xcd\xfdw\
\xd7\xcc\xc2\x87\x9a\xcf\x00:\xc2\xdb\x85\x92\xb8\xe2\x0d\x93\
O \xd9u\xf0'\xd6}\xa3\x1e\xe3\xfe\xf1\xac'\xf0\
\xf7\xf1\xb1\xd7\x5c)Y\xb9\xfd\x1b\x00&\xde\xd6\x17\x7f\
\xef\xfa\x15f\x80\xa0\xc6\x8d\xe8\xd7Im\xff\xf5\x15\xc1\
\xba\xdc\xf5\xb6\x00\xde\x9c\xa8\x0e\xe7\xce\xdf\xb8\x8d\xd8\xc4\
\x14\x83\x88\xba\xb4\x0a$f\xca$cP\xa8F\xe2Z\
`\x00\x1d\xb6\x06~l}y\x0e\x11];\x1b\xb3c\
\x0f\xbd\xfa\xb6\xd1\x14|<\xf3q\x0b\x03\xc4\xa7\xa4\x19\
\xc7\xc6N\x1b>\xb0\xc2\x0c0S\xdb\x10\xba\xfe\xc7\x83\
\xa4ef\x1b\xf9\xf7\xaf_\x8f\x0f\x1f\x99`P\xff\xc2\
\xcd\xf6\xb6\x7f|\xaf0b\x1e\xfds\xcd\xad\xf9:\xae\
\x15\x06\xd0ak\xe0\xc7\xb6\x97\x9fe\xd6\xb8\xd1\x00d\
\x17\x14p\xf7\xfcW\xc9\xca/\xa0\x7f\xb7\x1bx{\xda\
\x03Fz\x04\x82\xc5\xd1_\x020u\xf8@\xfc}\xbc\
\xcb\xcd\x00\xd77n\xc8\xc4\xbe\xea\x91\xaeK\xb6\xed6\
^\x90R\xf2\xd6\xa4\xb1\x84\xb5nIVa\x11\xf7\xbc\
\xbd\xcaxm\xd1\xa8!\xbc5~t\xcd/|\xb8\xb6\
\x18\xc0\x8c9\x13\xc6\xb2e\xe1,\x82\x9b6!>9\
\x8d\xbf\xbf\xab\x16\xc0\xa4\x81\x91\xbc=\xed/\xe8+o\
V\xed\xdcc8\x83\xd3\x86\xdd^n\x06x\xe6\xce!\
\x00\xec<r\x5c;-\x5c}\xfe\xe6\xa4\xb1D\x85w\
!\xab\xb0\x88a\xaf\xbe\xcb\xc9\xacl\xfa\xb6\x0b!a\
\xee\x93L\x1dP\x81\xd3\xba\xae\x16\xae5\x060\xa3\x7f\
\xd8\x8d$\xbe\xff\x1a\xcf\xdc;\x8au\xdf\xec\xe3\xff^\
}\x1b\x80I\xb7G\xf2\xd6\xd4\xbf\x10\xe0\xe3\x83\x94\x92\
y\x1f\xad\x07T\x16hP\xbf\xbe\xc7\x0c\xd0\xb5u+\
&h\xb5\x7f\xc1\x86-\x80\xc0\xdf\xbb\x1e1O>\xc4\
\x84\xde\xeaD\xce?>\x8e&5\xf3\x17\x16\x8e\x1e\xc6\
\xe6\xc7\xff\xaff\xb7\xf7\xaep\xad2\x80\x19s\xc6\x8f\
!\xf1\xbdW\xf1\xf7\xf5\xe6\xc9wV\x020\xe9\xf6\x08\
\xb6<?\x9dn!\xadY\xb9\xe3\x1bv&\x1c\xc1\xe6\
\xe7\xcb\xc7\xd3\xa7x\xc4\x00\xfe>\xde\xbc\xf5\x80:\x1f\
\xb1|\xf7^v\x1fM\xa2o\x87P\xf6\xcc\xfe+\xfd\
:\xb6#\xab\xa0\x90\x07\xff\xf7\x11\xc1\x8dm\x1cza\
:\xd3ns\x7f6@\x8dFe3@\xeeU\xfa\xa0\
\xb2\xcd\xcf\x97\x7f?8\x81\xd9\xf7\x8e2\x96\x86\x87\xb7\
\x09f\xcb\xf3\xd3\x99u\xf7H\xfe\xf6\xdf\x0f\xc8\xca/\
\xa0\xdf\x8d\x1dy{\xf2\xa42\x19\xe0\xa5{G\x11\x1e\
|=)\xe72Y\xb0~\x0b\x8b\xfe4\x92/\xfe>\
\x85\x90&\x8d\x00H\xcb\xcc\xe2\x9dIw3k\xc4\xc0\
k\xa3\xadw\x81\xcc\xc2\x22\x8f\x19\xc0\xe3\xb9\x80Tm\
\x13\xc7\xd5\x82\xcd\xcf\xd7\xf2\x8d\x00\x9b\x9f/\xb3\xfft\
\x17S\x87\x0f\x22\xf5\x5c&6?_&\xf6\xefM\xea\
\xb9L\x16|\x1a\xe3\xc4\x00\x01>\xde\xbc4n\x0c\x13\
\xb5!\xdb\x03'O\xb3\xe7\xd9'\x9dv\x03\x97\xf6\xb1\
\x88k\x05\xe9\xf9\x85\xb8,W\x9c\xe7\x02<\x9e\x0d<\
[\x8eS1\xaa\x136?_\xe3\x14q\x80\xd9cG\
2\xb2g8\xafo\xfa\xca\xf8\xed\xbe\xbe\xbd\x985z\
\x18!\xdag\xe6A\xfdp\xf4o\x15\xe9\x05\x85T\xfa\
l\xe0\xd9,\xcf\x8f:\xb9\xda\x08\x0fi\xcd\xbb\x93'\
\x19\xf7\xef<<\xe1*\xa6\xa6\xfa\x91\x91_\xe01\x03\
x\xec\x03\xc4'&Uw>jQA\x1cL?_\
\xf9\xbd\x80\xd4\x8c\xf3\x1c=y\xaa\xfarQ\x8b\x0a!\
13\x8b\xb4\xec\x5c\xcf{\x01\xb2D\xa6\x83g\xe3\x00\
_\xec\xdd_}9\xa9E\x85\xb0\xf5D*\xe6\x01\x91\
R\x19@\x92\xa1 \xc4Y\xf0l\x1c`g\x19G\xa8\
\xd4\xe2\xeac\xeb\x89TLN\x5c\xa9\x0c \x90g\x15\
!\xe5Y\xf0\x8c\x01v\xc6%p\xa1\xa2\xc7\x97\xd7\xa2\
\xcaq\xe1\xd2ev\xa5\xfc\xec9\x03\x08R\x14)\xf0\
\x98\x01r\x0a\x0aY\xbee{\xb5f\xaa\x16\x9ecu\
\xfca~\xbd\x5c\xe21\x03H\xc4Y\x05\x89\xc7\x0c\x00\
\xf0\xdc\xfb\x1fR|\xf1b5f\xab\x16\x9e\xa0\xf8\xd2\
%\xe6\xef\xf8N\xab\xd9\x9e1\x80\x90\x9cUJ\xa4\xf2\
\xad\xfa\x8egs\x01\x19\xd99\xbc\xf6\xe9\xc6j\xcbX\
-<\xc3\x9b\xdf\xc5q\xbe\xb0P-7\x0f\x19\x00\x88\
S\xb8X\xb4]\x22/x\xca\x00RJ^\x5c\xf3\x19\
9\x05\xf6#\xdejqu\x91{\xe1\x02\xff\x8c\xdd\x07\
\x08\x8f\x19\xa0DrQH\xb6+\xfc\xb05G\xc0\x0e\
O\x19@\x08AnA!S\xff\xf3n5f\xb1\x16\
\xa5\xe1\xb1\x0d\xdb\xc8\xff\xf5W\xd4\x95Nx\xc6\x00B\
n\xcfz\xfa\xe1\x1cE\x93\xdf\x5c\x1e\x06\x00\xf8`{\
,/\x7f\xb8\xaezrX\x0b\xb7x\xe5\xeb\xefYw\
8\x11}\xf5\xb4\xa7\x0c\x00b\x1dh\x87\xe3\x95\x94(\
\x9b\xcb\xc3\x00\xa0N\x14\xcdZ\xb6\x9a\x98\xef~\xac\x86\
l\xd6\xc2\x15\xbeLL\xe1\xf9m_[vPy\xcc\
\x00%r3\xe8\xa7#\xee\xd9p\xa4\xa4D\x1eU\xdf\
\xf5\x8c\x01\xf43o&,\xfc\x0fGj\x87\x88\xab\x1d\
\x89\xe7\x7f\xe1/\x9f\xc4Pb\xae\xd9\x1e2\x80\x14\x1c\
\xcd\x9e19\x05t\x03\x00\x84\x22\x9eV\xdf\xf5\x9c\x01\
\xa4\x94\xe4\x15\x15\xd1\xe7\xb1Yl\xdb\x7f\xb0\xaa\xf3\x5c\
\x0b\x0d;\x93\xd2\xb8\xed\x9d\x0f\xc8\xbdp\xd1Z\xb3=\
d\x00\x81|Z\x0f\xcbK\xffG\xa6\x1d;\xa2\x04u\
\x18\x08\x04\x99w\xd9:/\xa8\xd4\xae\x02\xf4\xdd\xbb\x17\
/]\xe2\x83\xafvS\xaf\xeeu\xf41}\xdd\xa3\x16\
\x95\x8f\xd7\xbe\xfe\x9e\xc9\x9f\x7fA\xf1\xa5K.\xa6|\
\xf5\x13O\x5c\x94\x97&W\x02\xdf\xe4<=e\xba\x1e\
\x9e\x979p\x19\xd4!\xd9KQ\xfel\x14\xbaV\xc8\
\x8e\x81X\x22\xd5e\xe0\xa2N\x00\x00\x044IDA\
Tv\xc7J\xe0\xab\xfd\x09$\x9e>\xcb\xf0^7\xe1\
\xe5U\xc13nk\xe1\x12\x17/]\xe6\x81\xb51,\
\xf9\xf6G\xb5\x82+.\xdav\xd3\x15\xa7o5\xabr\
R\xc8{.n\x8d9\xa9\x87k1\x00\xd2\x8e\xa5\x88\
\xa0\xf6\xb7\x0aE\xb4+\x0f\x03\x98\x9f'$\xa7\xb1\xf2\
\xabX\x84\x22\xe8\x12\x12D\xdd:u*]\x19\xbf'\
\x14^\xfc\x95e{\xe3\xf9\xcb\xda\x18\xf6\x9e<\xa3\xb6\
\xcd.j\xb6g\x0c\xc0\xe7\xb93\x1e}\xd9\x1c\xbe\xc0\
\x11}F\x04)\x8a\xb2OQ\x84z\x80\xaf\x0b\x06\xb0\
\xac0\xd1\xf7\xc9\xbbHTC?_\xa6D\xdd\xc1\x9f\
\x07\xf5\xb3|!\xac\x16e#-+\x87\x15?&\xf0\
\xf6w\xfb\xc9.*v\xd0\xaf\xe9k\xe5\xee*\xa9\xc3\
i\xe5\x08\x91qAx\xf5,~\xfa\xe14s<\xce\
\x06\x00\x10\x19\x15\xa9 \xb6+\x8aP\xca\xcb\x00\xd6\xe7\
v_\xa2\xc3\xf5-\xb9\xa3G\x18w\xdc\xd4\x8d\x88.\
\x9d\xa8_\xf7\xba+T\xd1o\x0b\xc5\x97.\xf1u\xf2\
I\xb6&&\xb3-1\x85#\x19\xe7\x1d*\x9b~\x98\
\x06\xe5f\x00\x09%%\x92\x01\xf9\xcfL\xdd\xe5\x18\xaf\
k\x03\x00\x94\xc8;\x9fV\x14\x16^\x09\x03\x18r.\
|\x89NA\xad\xe8\xdc\xba\x15\x9d[\xb7\xa4S\xeb\x96\
\xb4\xb05\xb4<w\x82p\xfa\xc7\xe1\xb9g\xbf\xab\xbe\
\xb2\xd6S2v\x22V~<e\x85w:'\x8f\xa3\
\xe729\x9a\x91\xc9\xd1\x8c\xf3\x1c;\xff\x0b\xe8\xcd\xae\
\xb0\xea\xcf\x12~\xc5\x18`F\xce\xccG\x17\x95\x9a<\
W\xf0\xeaw\xe7*\x84\x18W\x19\x0c\xe0:\x91\xba\xb1\
(\xae3\xa38d\xda\xd1\xf8\x9cj\x84\x95\xf6\xacF\
Z\x8a\x9c\xe2*}v\xa3v_(&\xa3\x16.\xe2\
u\x08\x07\x17\x8e\x9b^s\x9d\xf3\xeb(W1\x06\x90\
\xc8\xd5\xb9\xb3\xa6\x8d\xc7\x0dJu\xd5/\xe7\x97<(\
\x10G\x1c#\x03LK\xc6qP\xae\xf9\xb9^\xe3\x5c\
\xec0R\xab\xa0\xb1O_\xbb\xb5\xcai\xab\x16\x90\xfa\
\xad\x0b9\xe3\xb9\x1a\x93]\xce\x94^=\x1c\x1c\xe5\xec\
\xcf\x0d.\xb0;L\xe8\xe3 R\xcb\x8f=\x1e]\xc0\
\x9e\x7f#\xbf\x0ez\xc2\x14\x8e=\xbf\x8er\x86\xa2\x8c\
t8{\xf7j8h\x17\x97#|\x0e\xe3\x00\x12y\
$\xf7\xd7\xba\x0f\xba.]\x15\xa5\xf7\xd5~\xd8Px\
\xa9\xa8\xf8f)\xe5VW#\x81\xfa\xa0\x11z\xa4\xa6\
\xab\xa5\xb0\x5c\xed1\xd4\xac\xc3~\x22(N{\xf8t\
\xe5!\xf4[\x17r\xc6sm$LZ\xe3\x93\xe6p\
p\x94\xb3?7N\xf36\xdeC\x93\xd3\x17O\x98\xe3\
\xd1\x05\xec\xf97\xf2\xeb\xa0'L\xe1\xd8\xf3\xeb(g\
(\xcaH\x87e\xec\xde\x94\x1e\xb4\x8b\xcb1~\xd3H\
\xa0,\x91\xd1\xb9\xbf\xca\x9b\x99\xfbp\xa9[\xba\xbcJ\
{\x08\xc0\xa9\xe3\x17d\xcf\xae\xab\x95\xa2\x92z \xfa\
\xba\x1b\x07(\xaf\x0f\xe0\x9a^\x85\x9b6\x0f\x876\xcf\
Y\xce\xb9_l\xed\x07\x9bi\x1a\x17\xe18\xd2\xab\xfd\
wk3\xe7\xd8\x9c\xe84\xef\xd8\xdc8\x8f\xa0\x9a\x9a\
\x1d\x87t\xd8\xe5\xec4\xef\xb6\x7f\xaf\xcb\x956\x0e \
\xe5?sgO\xfb\x0b\x03n\xb9@\x19\x10e\x09\x98\
\xe1\xd5\x7f\xd4x\x14\xf1\x9e\x10\xa2n\xad\x0f`\x0f\x07\
\x17\x85vu|\x00QtYQ\xee\xcf\x7ff\xda\x87\
n\x8a\xd0\x09\xe5\x1a\xae\xbb\xbc\xe3\xb3U\x97K.\xdd\
(%+A\x94\xd4\xfa\x005\xc3\x07(\x91\xb2\x04\xc4\
*Yr\xb9[y\x0a\xdf\xae\x95\x8a\xe0\xf6;o\xa8\
#\xea>/\x91\xa3\x15E1\xa7\xb2\x96\x01\xaa\x89\x01\
\xa4\x10\x12\xe4\xa7\x92:s\xf2\xe7>V\xbeO\xa0k\
\xa8\xb8\x01\xe8\x188\xa6{\x1d\xa1\xcc\x15\x8a\x12\xe56\
\xf1\xc2\x94IW\xf4\xe5`,.\xe5<\xf0\x01\x5c*\
\xd5\xa5Q\xba\x09\xc7\xa4\x5cs8\xee\x8d\xd2\x85\x91;\
\x19\x9b\x0b#\x17.*\x83\xd9\xc8]\x1a\x9b\x83q*\
b\xfd%\xa5dn\xe1\x9c\xa7\xaeh\xb7\xce\x95\x1b\x80\
\x8e\xc1\x13|\xbd\xc4\xc5\x81 \x87(B\x19\x8a \xb8\
\x96\x01*\x93\x018!P6K\xd8\x9cW\xc7\xef\xab\
\xb2\xbc{OQy\x06\xe0\x88A\xe3\xda{)\xb2\xbb\
\xf0\xa2\xad\x806\x08\xa5\xad\x10\xa2-B\x04\xa91\xd7\
2\x80\xb3\x9c@@J\x89 I(\xe2\x04\x92\x13R\
\x88$\xe5r\x9d\xfd\xb9\x8b\x9e,\xfb\x0b\xd4\x15\xc0\xff\
\x03\xacS*H\xf17=\x8e\x00\x00\x00\x00IEN\
D\xaeB`\x82\
\x00\x00\x05~\
\x89\
PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
\x00\x00 \x00\x00\x00 \x08\x03\x00\x00\x00D\xa4\x8a\xc6\
\x00\x00\x00\x09pHYs\x00\x00\x0e\xc4\x00\x00\x0e\xc4\
\x01\x95+\x0e\x1b\x00\x00\x02\xbePLTEGpL\
\xd7`*\x17\x0a\x04\xa0G\x1fO#\x0f\x04\x01\x00\xf7\
q4\xf6n0\xdfd,\x00\x00\x00M\x22\x0f\x14\x09\
\x04\x02\x01\x00\x9eG\x1f\xd8a*\xddc+-\x14\x08\
Q$\x10\xb5Q#\x22\x0f\x06\x06\x02\x01\x17\x0a\x04\xa1\
H\x1f\xf7}E\xdbb+\xf6n0\xf5n0N#\
\x0f\xafN\x22\x15\x09\x04_*\x12\x02\x01\x00\xa9L!\
\xe4f-X'\x11}8\x182\x16\x09&\x11\x07\xe0\
d,\x9fG\x1f\x09\x03\x01\xe3f-\x0c\x05\x02b,\
\x13\xb8R$m1\x15Q$\x10b+\x13z7\x18\
\x04\x01\x00W'\x11\xf8}E\xf4\x85S\xf7\x86R\xa1\
H\x1f\xa7K!\xbeiB \x0e\x06)\x12\x08\xd5u\
I\xd3_)\xd5`*W'\x11\xcdrH\xc6mD\
\xf2\x82O\xf7~G\xa0G\x1f\xf7x>\xb6e@\xcc\
\x5c(\x98D\x1e\xf8\x7fHK!\x0e\xe6|K\x97R\
4\xf7w=\xcf])\xf6\x83O\xf7|C\xf7v;\
\xf8\x80I\xee\x82Q\xf7|D\xe8\x7fO\xf7\x7fG\xd0\
tI\xe4~O\xe8h.\xddxI\xf7u:\xdf{\
N\xe9i.\xf7y@\xf7y@\xf7o1\xff\xff\xff\
\xf8}E\xf6n0\xf5n0\xfe\xfe\xfe\xfe\xf0\xea\xea\
i.\xf7p2\xfa\xf0\xec\xfc\xf6\xf3\xf7x>\xfe\xf3\
\xee\xe3{K\xdfg0\xf8\x8d\x5c\xfb\xbd\xa1\xf6\x7fI\
\xfc\xce\xb9\xf8\xeb\xe5\xfe\xfc\xfb\xf4m0\xe6\x83V\xe3\
\x81T\xe3\x81U\xfb\xf5\xf2\xf9\x9cr\xe2\x89`\xfb\xf5\
\xf3\xfb\xc9\xb2\xf1\xa8\x86\xefm1\xf0\xd4\xc7\xfc\xf5\xf1\
\xe5r>\xfd\xf9\xf8\xf9\xf0\xeb\xe6\x82U\xe5\x90i\xfc\
\xd8\xc8\xf6o1\xe5r=\xf6n1\xf1\xd6\xc9\xf9\x9a\
n\xfd\xfa\xf8\xf1\xa5\x82\xe4\x91j\xf0k/\xe2\x89a\
\xf0l1\xfb\xc7\xaf\xe9\xba\xa4\xf0l/\xe3\x97t\xe2\
|M\xfc\xd6\xc5\xe4g/\xf7\xe8\xe1\xf8\xeb\xe6\xf9\xc2\
\xa8\xe2}N\xf8\x81K\xe4\x9ay\xf7v<\xf8\x85Q\
\xe9\xb8\xa2\xe4g.\xfe\xfa\xf8\xf7v;\xfe\xf7\xf4\xfc\
\xf7\xf4\xf8\xbd\xa3\xf7\xe7\xe1\xfe\xfa\xf9\xe4\xaa\x8f\xf8\xec\
\xe6\xfa\xae\x8c\xf7o2\xe5\xac\x92\xfe\xf9\xf7\xf7{C\
\xfc\xcd\xb8\xfa\xa6\x80\xfa\xb7\x99\xfc\xd2\xbf\xf7zB\xf9\
\xa3|\xfd\xea\xe1\xf5\xe3\xdb\xfd\xec\xe3\xfc\xd7\xc6\xfd\xdd\
\xce\xfa\xaf\x8d\xfe\xf2\xed\xfc\xd9\xc9\xfa\xae\x8b\xe1\x96s\
\xe3\xa9\x8e\xfe\xf2\xec\xdfxH\xfd\xfa\xf9\xe1\x97t\xdf\
vF\xf6\xe7\xdf\xf9\xa4}\xe3\xa8\x8d\xfa\xf1\xed\xfe\xee\
\xe7\xe2\x8bc\xfa\xb5\x96\xfe\xfc\xfc\xe2\x8ce\xfe\xed\xe6\
\xfd\xfb\xfa\xf2\xad\x8d\xfd\xdf\xd1\xfe\xf8\xf6\xfe\xef\xe9\xe2\
\xa5\x8a\xed\x95l\xf1\x82O\xf4\xc2\xab\xf9\x95g\xf8\x8c\
Z\xed\x97p\xef\x98q\xe2\xa3\x87\xf8\x8c[\xe0\x89b\
\xfd\xe0\xd2\xf1\x81N\xf2\xac\x8c\xf9\x96i\xf4\xc3\xad\xfc\
\xcf\xba\xef\x99q\xfe\xf9\xf6\xe0\x89a\x19\x07\xe4\xa6\x00\
\x00\x00_tRNS\x00\xe1$\xb1c\x08\xfc\xfe\xe9\
\x12a#\x07\xaf\xe2\xe2\x03d\xa0\x02\x05%\xb2\xfe\xe1\
\xfd\xfdb\x94$D\x08\x93\xebC\x89\x06\x05\xea\xb0\x02\
\xea\x028\xa2CeB\x87\x056\xfeY[\x88\x89\x11\
\x01\x01\x14\xd7\xd9-;\x13\x5c\xcc~\xe3\x10\xce|\xcf\
+2\x01\xe4\xcf^\xc5\xf6\xcd9\xc37\xca<.\xe0\
1\xf7-\xdf\xe8\xe7\xfe\x08\x05\xdf\x00\x00\x01\xfbID\
AT8\xcbc`\xa0\x220\x11O\x84\x02cSl\
\xf2!\x01\xf1p\x10\x15\x84.\xeb\x1a\x16\x1d\x17\x8f\x04\
b\xc3\xed-\x90\xe5\x1d\x02\x97d\xc5\xa3\x80\xac\xf9\x1e\
\xd6H\x0aB\xe3\xb1\x00'$\x051\xf1\xf1[\xb7\xef\
\xdb\x9f\xb7mcvv\xe1\x89\xbc=\xbbwn\x88\x8f\
\x8f@\xc8G\xb2\xc5\xc7oI@\x01\xbb\xd6\xc6\xb3y\
\xc1\x15\x04\xc7\xc7o\x02\x0a\x16\xa7@e\x8f\x00\x19k\
\xe2\xe3\xfd\xbd\xa1\xf2\x8e\xe9\xf1s\x97&\x1c?\x9a{\
\xecdQBB\xd1\xc1\xc3\xb9\x07v$,^\x10\x9f\
\xee\x07U\xe0\x12\x1f?\x1d\xa4\xf1P~\xc1\xe3\x84\x84\
K\x05\xf9{A\xbc\xb6\xf8x\x1f\xa8\x02\xb7\xf8\xf8\x06\
\x88\xd9\x0f\x0b\x13\x12\x9e]\x86\xb03\xdb\xe3}\xa1\x0a\
\xdc\xe3\xe3[\x9b\xc0\x82O\xaf&$\xa4\xde\x043{\
\xfa\xe2\xe3\x9d\xa1\x0a<\xd9\xe3\x93\xab*@\xa2wA\
\xc4s\x10Q=!9\x9e\xdd\x0e\xaa\xc0\xd2&>>\
\xa9\xac9!!\xe5\xc6\x83{\xd7^>:\x97\x90\x90\
Q\x9e\x14\x1fok\x05\xf3\xa6\x190\xdc\x92Z\x80\xfa\
R\xef\xc7\xc7\xdfN\x052J\x81\xf2\xf1\xe6\xf0p0\
\x02\x85l7\xc8\xe4\x17On]\x01\xd1\x95 \x11m\
\xb8\x02a\x09 w\x12H\xa2\xf8\xce\xf5\x8b \xba\x06\
(\xc0/\x80\x08k\x05 \xbf\x17(~\xea|I\xc9\
\x99\x0c \xa3\x16( \x83\x14Y\xfa@\xfe\xc4\x85\xab\
\xd7\xe5\x9c\xbdpzs\xce\xaaY\x93\xeb\x80\x02\xbaH\
\x0aT5\x81\x02S\x16-_\x0f2~\xe5\xec\x19\xfd\
@\xae\xa2\x0ar\x8a\x11\x029*i\xde2p\x10N\
\x05y!^\x07%\xc9)I\x81\xc4\x92\xe7\xacHH\
\x989-\x19\xc4\x96\x94CQ\xa0a\xc0\x0e6\xa3\xa3\
\xbe\xab\xb1\x13\xc4bW\xd6BM\xb5\x86,\x1c\xe0t\
\x96\x96\x06\xa6\xd4\xf4D0\x92\xbd\xac:;,5\xb2\
\x8b\x89b\xcb\x18\xf2\xd2\x10C\xe29\x04Yq\xe4-\
n^\xa0!\xec\xccL\xb8s\x1f\x0f\x17#\x1f\x0b+\
\xde\x0c\xca\xc9Ij\x96\x06\x00\xfd\x98\xe6y\x07\xbeQ\
(\x00\x00\x00\x00IEND\xaeB`\x82\
\x00\x00\x05}\
\x89\
PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
\x00\x00 \x00\x00\x00 \x08\x03\x00\x00\x00D\xa4\x8a\xc6\
\x00\x00\x02\xe2PLTEGpL\xfc\xceI\xfc\xce\
I\xec\xc1D\xdcJ=\xdcJ=\x0f\x93S\xfc\xceI\
\xfc\xceI\xfc\xceI\x9e5,\xdbI<\x0f\x98V\xf4\
\xc7F\x0cvC\x96{+\xdcJ=\x0buB\xf6\xc9\
G\x10\x9dY\xdbI<\xcf\xa9<\xdbI<\x10\x9dY\
\xdcJ=\x9f\x82.\x0ac8\x86-%\x9e5,\x10\
\x9dY\xbc\x996\xdcJ=\x0f\x99V\xbd\x9b7\x10\x9d\
Y\x0d\x81I\x0f\x98V\x10\x9dY\xb7=2\xdcJ=\
\x10\x9dY\xb7=2\xf5\xc8G\x09]5\xdbJ<\xdc\
J=\xb6=2\xdbI<\xaa\x840\xf0\xa0D\xdaJ\
<\xb6=2\x0bk=\x10\x9dY\xdcJ=\xc3A6\
\x5c9(\xdcJ=\x10\x9dY\xc3A6\xdcJ=\x18\
\x98W\x10\x9dY\xdcJ=\xdcJ=\xf1\xc5E\x0f\x9b\
W\xf9\xcbH\x10\x9dY\x9d4+\x0ac8\xdcJ=\
\xd9I<\xc3A6\xd9I<\xc3A6\x9d4+\x10\
\x9dY\xfc\xceI\x0d\x82J\x0e\x91R\x0d\x80H\x0e\x90\
R\x0e\x95T\x0ah;\x8f\xcc\xae\xeb\xed\xee\xfc\xceI\
4\xa1hE~L\x13\x9bX\xa5\xa2\x8c}gC\xa0\
\x83.`rG\xa8E3\xbdA3\x1d\x96V\xe8\xbd\
C\xd1\xab<\xa7\x880\xcd\xa8;\xea\xbfC\x0f\x9cX\
\x0f\x9cX\x94y+\x09\x5c4\xbf\x9c7\xdc\xb4?\x0c\
wC\x10\x87L\x9a\xa6D\xd9\xb1?\xdcJ=F\x87\
\xf3\xfc\xceI\x10\x9dY\xfb\xcdH\xc7\xd7\xf1\xe9\xb5\xb0\
\xddTH\xde\xe5\xf1F\x87\xf2\x0e\x94T\x0f\x9bXG\
\x85P\xed\x96?\xeb\x94<\xb9WA\xee\x9aB\xdbI\
<\xf6\xde\x97\xf9\xc9D\xdaH;\xf6\xde\x99M\x8b\xf2\
\x15\x9e\x5c\x9b]A\xb4\xda\xc8\xdfcX_\x96\xf2\xc1\
\xd3\xf1\xf6\xc2>\xc0\xd2\xf1\xcf\xdc\xf1\xf8\xd9\x81\xef\xef\
\xf0\xea\x91:\xe5\x96\x8f\xfb\xd0S\xf8\xd8|\x84\xc8\xa7\
\x16\x9f]\xd9G:\xcc\xda\xf1/\x8eS\xe9\x908\xe8\
\xae\xa9\xaa\xc5\xf1\xe8\x8e7\xf2\xba7\xe8\xb0\xa7`\x97\
\xf2\xcdA5\xe1\xe7\xf1\xf1\xef\xea\xfb\xcfO\xe6\x91I\
\xe7\x8b4\xad\xc6\xf1\xc2\xd4\xf1\xf0\xef\xed\xef\xd5\x9b\xee\
\xb45\xe8\xa5\x86\xd8\xe2\xf1\xd0\xdd\xf1J\x89\xf2\xd8F\
:\xdb\xe3\xf1\xf0\xb73\xf4\xbf>\xe7\x8c5U\x90\xf2\
\xa1\xbf\xf1\xe6\x8a3\xed\xd2\xd0\xf6\xe0\x9f\xef\xb41\xf8\
\xc7Bn\xa0\xf2x\xa6\xf2\xf0\xe0\xbd\xc66-\xd7E\
9\xcc<1\xde\xa6\xa2[\x94\xf2\xd9\x8b\x86\xbf\xd2\xf1\
G\x88\xf2h\x9c\xf2\xe7\xed\xea\xa0\xbf\xf1\xed\xee\xf0\x1e\
\xa2b\xf1\xee\xe5\xd9^T\xdd\xa3\x9f\xc6\xd6\xf1\xc99\
/\x91\xb4M\x1c\x95Q\x0e\x95T[\xb8\x8b\xe8\xc9I\
\x15\x8cSy\xc3\x9f\x0f\x98V\x10\x8cN\xe1\xe9\xe5\xb7\
\xcd\xf1{\xc5\xa1\xd2\xdd\xf1\x0d\x8bN\xdf\xe6\xf1L\x9b\
L\xf2\xdc\x92Z\x93\xf2p\xb4\x93o\xa9M\x0f\x9cX\
R\xa8~\xd2\xc2J\xb4\xcb\xf1~\xa9\xf2\xda\xe3\xf1\xb4\
\xb8J\x0e\x8eP\xf7\xcdJ\xbf\xd3\xb3y\xa6\xf2\xf6\xcc\
I1\x9fS\xb3\xbdMN\xa9TT\xbb$\xa6\x00\x00\
\x00qtRNS\x00\xb4\xf6l\xde||\xa5\xcc\xdb\
\x09aZQ\x11\x04\xbe\x10Q\xe6e\x14j\xd6\xe6\x04\
\x09\x02\x0c\xd5\x0b\xeaa\x0b\xb0\x1be\xb4\x17\xb4\xe1\x11\
U\x06\xbe\xc4\x17k\x06\xe1Z\x10\x0c\xea\xd6\x22\x02\xd5\
\xc4\x1b\xb0k\xfc\xc9\xfcUk[\xc9\x11\x11\xfdkH\
jE\x14\xfd\xb9HkEj[\x14\xfe\xfe\xf8\xfd\xfe\
\xfe\xfe\xfe\x07\xfe\xfe\xfe\xfeZ8\x096[\xb9\xf8\x07\
\x096l8\x5cmZFt#+\x00\x00\x01\xd9I\
DAT8\xcbc` \x05\xf8xz\xb0\xb2zy\
\xbbb\x97\x95\xd1\xb7w/\x04\x03\x07]\x11.\x0ci\
i1\xf9B$ \xc1\x8d&\xaf&P\x88\x06\xd45\
\x91\xe5\xcdY\x0a1\x80\x995B^\x0f\x8b|a\xa1\
\xa51L\xdeB\xa7\x10+\xb0\x81)\xb0mh\xc2\xae\
\xc2\x08\x22obZ\xdb\x0a\x15\xe9\x9e2w\xe1\xba\xe5\
;Wl\x9b?gr}]\xa3\xa1\x01X\x81SI\
I\xe7L\x90tE\xf9\xa4\xb2y+7\xac^\xb3v\
\xcf\x96\x05}-\xa5\xa5\xc5\xce`\x05.%%\xb3\x17\
o\x02\xca\xef*\xeb)\x02\x82}\xeb\x0fl\xdd[Z\
\x0c\x02~ \xf9\x10\xdf\x92\x92\x92\x98\xc3\x87\x0a\xcb/\
n,\x02\x83\xed\x9bw\x17C@x\x0aP\x81?P\
\xbe$1\xe1\xd2\xf93G\x8b\xa0`\xff\xd2\xa9P\x15\
\xc9@\x05\x01 \x05%q\x07\x8f\x1d\x87\xc9\x17UU\
N\x84*H\x03*`\x03+\x88\x8a?r\x1a\xae\xa0\
\xa8\xbf\x0d\xaa\x80\x19\xae\xa0$\xf2\xc2\x0e\x84\x82\xdef\
$\x05A\x10\x05%\xd1\xab\xe0\xf2'\x96L\x83*H\
\x02*\x08\x84*\x88\x08[\x04S\xf0\xfa\xdc2\xa8\x82\
T\xa0\x027;\xa8\x8a\xd0Y\xed\x10\xf9'\x0f\x1fC\
\xe5\x99bA\x01a\x05U0\xa3k\xc2I\x90\x17>\
V~x\x0fU\xc0\x08\x0eI\x15\xa8\x82\x92\x8e\xe9\xa7\
\xee\xbf\xba\xfb\xe6\xce\xd3\xb7P\xf9b-\xb0\x02)a\
\x98\x8a\x92\xb3\xd7\xee\xdd|q\xe3\x11L\x9eS\x12\x12\
\x9d\x0a%H\xe0\xd6\x83\xdb/a\x0a\x84`\x09B\x15\
I\xc1\xd5w\xcf`\xf2\xec\xf0$\xc7'\x8ePP}\
\xe5:T\x9eC\x11\x91(\x95ea\xf2\xcf\xab/\xc3\
\xe4E\x91\x93\xb5\xa0\x12TA\xcd\xe7OP\xf3\xe5\xd0\
r\x06\x8f\x06D\xc1\x17\x88\xfby1\xb3\x9evpz\
FI\xc9WP\xf81:\xf2c\xcf\x9eY\xb9y\xf9\
9\x05\xd9\x99$\xe5x\x00\xfe\xa1E\xc6\x0b}\xa2(\
\x00\x00\x00\x00IEND\xaeB`\x82\
\x00\x00\x06v\
\x89\
PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
\x00\x00 \x00\x00\x00 \x08\x03\x00\x00\x00D\xa4\x8a\xc6\
\x00\x00\x00\x09pHYs\x00\x00\x0e\xc4\x00\x00\x0e\xc4\
\x01\x95+\x0e\x1b\x00\x00\x03\x00PLTEGpL\
C\x96\xbbs\xdeB'W\x9e#[\xa70\x81\xd51\
\x84\xdb!U\x9f9tr%H\x8c)E\x8c*G\
\x92`\xbb>'H\x8f.~\xda(E\x87f\xc5D\
1\x83\xdb5\x83\xbcP\xb1\xe20WuV\xc0\xf03\
}\xb0 J\x8a N\x94s\xdeBS\xa4Rs\xde\
C/\x80\xd2,z\xdar\xdaD,E\x901\x84\xd8\
\x22C\x86o\xd7K+s\xcfX\xc2\xe4,x\xdaY\
\xb9\x95h\xce{h\xd2\x83d\xcd\x97g\xd0\x8b-y\
\xc9Z\xbe\xad#O\x96'L\x95P\xb3\xe4$K\x92\
p\xdaU_\xc8\xbeZ\xb0NU\xa48e\xc39$\
O\x99d\xcd\x9e,y\xcd0\x81\xdbq\xdaG\x22Q\
\x9at\xdeAt\xdfBq\xdbO^\xbaZo\xd9Z\
`\xc2yk\xd4v'K\x92b\xcb\xab-y\xd1V\
\xbf\xf3(P\x9f!J\x8a)>~t\xdeA(G\
\x8bV\xbf\xf2'I\x8c+P\x9b*r\xc8\x22J\x8c\
)H\x91#Q\x9d)H\x91/}\xd1'g\xa6&\
d\xb4/|\xd1(i\xb8a\xc5~-M\x9f&c\
\xb1,v\xce0J\xa26\x85\xba&U\xa2^\xc7\xc4\
!\x5c\xa2V\xbf\xf1?\x90\xa1c\xca\x8e+t\xc1+\
u\xc1\x5c\xc3\xb9E\x9b\xafV\xbf\xef^\xc3\x9c.|\
\xdaF\xa1\xcb1j\xb7=\x90\xba-v\xb8V\xbf\xf2\
K\xa6\xba<\x8e\xc1m\xd6jU\xbb\xdcK\xa8\xd3W\
\xc0\xed.w\xbaX\xc1\xe71}\xbb,x\xd4W\xc0\
\xeb>\x93\xc6V\xbc\xe0Q\xb4\xd9 P\x960{\xba\
T\xb4\xbc$a\xa0n\xd7cY\xc1\xe3%h\xbaS\
\xb8\xd9[\xc4\xd47\x87\xbfq\xdbM-/qp\xda\
ST\xbb\xe9Z\xc3\xd83\x86\xdaW\xc0\xecW\xc0\xe9\
Y\xc2\xdcP\xae\xc3L\xab\xcc;\x8e\xc00~\xc74\
\x82\xbf,y\xda%Z\xa9(m\xc4!S\x9a'g\
\xbe'h\xbe+x\xda*r\xd1+x\xda+w\xd9\
2\x86\xdb3\x88\xdb0\x83\xdb3\x87\xdb\x1fK\x8c2\
\x85\xdb\x1fN\x93/\x80\xdb\x1fQ\x99t\xdfA L\
\x8f M\x91\x1fI\x8a\x1fO\x95q\xdbPX\xc1\xe5\
J\x8b1\x84\xdb\x1fP\x97.\x7f\xda R\x9an\
\xd8dq\xdcLo\xd9\x5cp\xdaV-|\xdar\xdc\
J\x1fK\x8dY\xc2\xe1Y\xc3\xddk\xd5tl\xd6n\
g\xd1\x8aa\xcb\xb0b\xcc\xabd\xce\x9d_\xc9\xb8i\
\xd3\x82h\xd2\x86m\xd6jc\xcd\xa5`\xca\xb4s\xdd\
Cp\xd9Y3\x88\xdap\xdaSs\xddFX\xc1\xe9\
/}\xc8,z\xda3\x87\xdak\xd5rj\xd3|j\
\xd4xi\xd3~W\xc0\xeff\xd0\x91g\xd0\x8e_\xc8\
\xbcf\xcf\x94m\xd7ge\xcf\x96c\xcd\xa1s\xdcG\
^\xc7\xc1n\xd8an\xd8_W\xc0\xea]\xc7\xc7\x5c\
\xc6\xcc]\xc6\xc9W\xc0\xec\x5c\xc5\xd1\x5c\xc5\xce[\xc4\
\xd53\x86\xd5Z\xc3\xda[\xc4\xd3/~\xceZ\xc4\xd7\
1\x83\xd12\x85\xd8e\xce\x99s\xddD R\x9ca\
\xcb\xa7_\xc8\xbf0\x80\xcd,w\xc4^\xc7\xc4/|\
\xc5-x\xc01\x83\xd53\x88\xd9.{\xc2|7\x1f\
\xe1\x00\x00\x00\xa1tRNS\x00\x16\xc1\x1a\xfd\xfe\xfe\
\xfd\x04\xc12\x8d3\x80\xf8I.\xb7\xfd7\x09\xfd\xfd\
\xfe\xfc\xcd\x0d\xa8g\xa0\xd9g\xbe\x0fX\xfd\xc9\xfe%\
H\xfcXhG;\xd8\x9f?\xe3\xf7\xa5B\x1b$\xcc\
\xf4B\xect\xe7\xb0\xec\xf4P\x84\x91\xe7\xae\xb8N\xac\
\x91\xf5)\x80_\xe4v[:\xf4\x9a\xdf\x87\xfdF\xfd\
\xfd\xfc\xf7o\xfc\xfdh\xfd\xbb\xf3\x12\xf2\xf9\xfd\xa2`\
\xfd\xfc\xec\xfd\xe3\xfdm\xfd\xfd\xb6\xfd\xfd\x89\xfd#\xcd\
\xfe\xf3\xfd\xfdz\xfc\xfe\xfd\xfd\xfdC\x1f\xf0\x86.\xe8\
y\xfc\xca\x1f\x9b_\xa2\x9d\x93\xb6\xbdG\x8a\xbc\xcf\xd5\
\xf5\x99Q\xfd\xba\xfc\xb2\xc9\x8b\xc8u|\x80\xe1\x00\x00\
\x02oIDAT8\xcbc` \x010\xf6\xf4O\
PQ\x99\xd8\xdb\xde(\x82MZ\xbf@\xf4\xc5\x85\x0d\
{\xf7}x\xf7\xeay\x82\x91\x0e\x86n7\xd1\x1bO\
\x80\xd2o_\xbf|\xf6\xf4\xe1\xed\xa3\x87\x5c\xd4P\xe4\
\x85}n\xc0\xb5\xff\xfa~\xf4\xd4\xa1\xc3'\xcd5\x91\
\xe5\x93P\xb5\x1f>y\xff\xc8\xbd\x9bZp\xf9\xd2L\
t\xedG>\xdf\xb9uPC\x1d*\xcfQ\x86\xac\xfd\
\xd4\xe1o \xed\x07\x8f\x1f\xbb\xea$\x05QP}a\
CIN\x91\x90P\x5c^a:H\xfb}\x90\xf6c\
\xd7\xaf\xed?P\x0c\xf1@EmM\xf9\xff\x8b?~\
\xfc\xb8\xf8'?\x03\xae\xfd\xda\x95\x03w\x9b\xc1F\xb4\
\xd4U\xfe\xfe\xf8\xe6\xdf\xbf\xb3\xff>\xfd}\xffS,\
\x0b\xa8\xfd8H\xfb\x89m\x8fv(\x81\x5c\xd0\xd6p\
\xf1\xcd\xd9E@\xb0d\xc9\xc2O\xac?\xc5R\xa0\xda\
\xb7=>\xb3\xb3\x1b\xa8`R\xc7o\xb8\xfcBA\x99\
\xb4\xd4d\xb0\xf6\xbb\x8fv\x9c9\xb7\xbe\x13\xa8`\xf2\
\x9f\x8fg\xa1\xd2\xac\xb9 +C#\xc1\xdaw\xec<\
\xb7~\xb7\x1c\x90?\xe5\xe2'\xa8|H<\xc4W\x8e\
`\xed;\xd7o\xdf}^\x12\xc8\x9d\xf6\xe3\x1fXz\
\x19+{\x14D\x81=D\xfb\xf6\x07_NK\x03\xb9\
S?^\x06\xcb/\x8b\xde\x1a\x0bQ`\x0c\xd1\xfe\xe0\
\xcb\xaaU _(|\x02Ko\x0a_\xf9\xd5\x1d\xa2\
\xc0\x01\xa4}\xf7\xf9\xd3\xabV\xc9q\x00\xb9}\x0b\xc1\
\xf2\x8b#V~\x0d\x02\xf1\x19\x04\x0c\xc1\xda\x81\xf2\xb6\
\x02 \xbe\x0cHz\xd3\xe2\xc5,[\xb7n\xf5\x03\x09\
\xf0\xd8A\xb4\xafb2\x05\x1b\xd8\xc4\x06\xd4\x0e\x04\xec\
+\xb7n\xb5f\x06\x89\x98XI3I\xdax\xf1\xc0\
\x22[\x01,\xbf\x02\xa8`\xe5J3E,\x89Q\x9b\
\x0d(\xbdb\x05\xcb\xe6\x95+7o\xd6\xe5\xc2\xa2B\
\x10$\xbf%l\xdd\xe6\xcd\x9b\xd7\xad\x93\xd0\x83)\x11\
\x91\xe7\x86\xb2\x98-\x81\xf2[b\xd6\xac\x03\x82\xe5\xcb\
\xd7\xac1p\xe6\xe6\x0d\x0e\xe4\x0c\x10\xe7\x87\x19a\xc1\
\xb7e\xcb\x96],k\x96/\x07\xc9\xafY\xbdz\xcf\
\x9e\xa5\x1b7\x8a\xfb\x22,q\xe5\xdb\xb5kWU\xfd\
\x9a5\xcbA\xd2\xab\xf7,\x05\xc9\xf3\x22;\xc3?\x1b\
\xa8BYb\xcf\xea\xd5P\xed\x1b=\xbcQ\x1d\x9a(\
\xbb\xeb\xd2%e\xf6\x8dKA\x00\xa8\x9d\xd3\x13\xc3/\
\xad\xb2\xd3UU\xe7\xcc\x12_\xbbv\xad8'?\xd6\
\xcc\xab8s\xfe\xdc\x05\xf3f\xcf\x90\xef\x22%\xcb\x03\
\x00/\xab\x8c\xa71\xf3a\xb4\x00\x00\x00\x00IEN\
D\xaeB`\x82\
"
qt_resource_name = b"\
\x00\x06\
\x07\x03}\xc3\
\x00i\
\x00m\x00a\x00g\x00e\x00s\
\x00\x14\
\x0e^\x13\x87\
\x00p\
\x00o\x00l\x00i\x00c\x00i\x00e\x00s\x00_\x00g\x00e\x00n\x00_\x001\x002\x008\x00.\
\x00p\x00n\x00g\
\x00\x08\
\x09n\x91\xb3\
\x00b\
\x00r\x00o\x00w\x00s\x00e\x00r\x00s\
\x00\x0c\
\x0fTN'\
\x00b\
\x00r\x00a\x00v\x00e\x00_\x003\x002\x00.\x00p\x00n\x00g\
\x00\x0d\
\x01\x97\x91\x87\
\x00c\
\x00h\x00r\x00o\x00m\x00e\x00_\x003\x002\x00.\x00p\x00n\x00g\
\x00\x0b\
\x02\xb2\x0c'\
\x00e\
\x00d\x00g\x00e\x00_\x003\x002\x00.\x00p\x00n\x00g\
"
qt_resource_struct = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00@\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
\x00\x00\x01\x90\x5c\xbe[\x16\
\x00\x00\x00t\x00\x00\x00\x00\x00\x01\x00\x00*\x0c\
\x00\x00\x01\x8dk\xd3\x84\x86\
\x00\x00\x00\x94\x00\x00\x00\x00\x00\x01\x00\x00/\x8d\
\x00\x00\x01\x8dk\xd3\x84\x87\
\x00\x00\x00V\x00\x00\x00\x00\x00\x01\x00\x00$\x8a\
\x00\x00\x01\x8dk\xd3\x84\x84\
"
def qInitResources():
QtCore.qRegisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data)
def qCleanupResources():
QtCore.qUnregisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data)
qInitResources()

225
templates/brave.json Normal file
View File

@@ -0,0 +1,225 @@
{
"SingleValues": [
{
"name": "AutofillAddressEnabled",
"values": {
"0": "禁止使用“自动填充”功能填写地址",
"1": "自动填充地址信息"
},
"default_value": 0,
"display_name": "自动填充地址信息",
"allow_recommend": true,
"enabled": true
},
{
"name": "AutofillCreditCardEnabled",
"values": {
"0": "禁止使用“自动填充”功能填写信用卡信息",
"1": "允许使用“自动填充”功能填写信用卡信息"
},
"default_value": 0,
"display_name": "允许使用“自动填充”功能填写信用卡信息",
"allow_recommend": true,
"enabled": true
},
{
"name": "DefaultGeolocationSetting",
"values": {
"1": "允许网站跟踪用户的地理位置",
"2": "不允许任何网站跟踪用户的地理位置",
"3": "每次网站尝试跟踪用户的地理位置时都询问我"
},
"default_value": 2,
"display_name": "默认地理位置设置",
"allow_recommend": true,
"enabled": true
},
{
"name": "PasswordManagerEnabled",
"values": {
"0": "禁止使用密码管理器保存密码",
"1": "允许使用密码管理器保存密码"
},
"default_value": 0,
"display_name": "允许将密码保存到密码管理器",
"allow_recommend": true,
"enabled": true
},
{
"name": "PaymentMethodQueryEnabled",
"values": {
"0": "始终告诉网站,没有任何已保存的付款方式",
"1": "允许网站检查用户是否有已保存的付款方式"
},
"default_value": 0,
"display_name": "允许网站查询可用的付款方式",
"allow_recommend": true,
"enabled": true
},
{
"name": "PrivacySandboxAdMeasurementEnabled",
"values": {
"0": "为您的用户停用 Privacy Sandbox 广告衡量设置",
"1": "允许用户在其设备上开启或关闭 Privacy Sandbox 广告衡量设置"
},
"default_value": 0,
"display_name": "选择是否可以停用 Privacy Sandbox 广告衡量设置",
"allow_recommend": true,
"enabled": true
},
{
"name": "PrivacySandboxAdTopicsEnabled",
"values": {
"0": "为您的用户停用 Privacy Sandbox 广告主题设置",
"1": "允许用户在其设备上开启或关闭 Privacy Sandbox 广告主题设置"
},
"default_value": 0,
"display_name": "选择是否可以停用 Privacy Sandbox 广告主题设置",
"allow_recommend": true,
"enabled": true
},
{
"name": "PrivacySandboxPromptEnabled",
"values": {
"0": "不向用户显示 Privacy Sandbox 提示",
"1": "允许 Google Chrome 确定是否显示 Privacy Sandbox 提示"
},
"default_value": 0,
"display_name": "选择是否可向用户显示 Privacy Sandbox 提示",
"allow_recommend": true,
"enabled": true
},
{
"name": "PrivacySandboxSiteEnabledAdsEnabled",
"values": {
"0": "为您的用户停用 Privacy Sandbox 网站建议采用的广告设置",
"1": "允许用户在其设备上开启或关闭 Privacy Sandbox 网站建议采用的广告设置"
},
"default_value": 0,
"display_name": "选择是否可以停用 Privacy Sandbox 网站建议采用的广告设置",
"allow_recommend": true,
"enabled": true
},
{
"name": "TorDisabled",
"values": {
"0": "开启 Tor",
"1": "禁用 Tor"
},
"default_value": 1,
"display_name": "Tor",
"allow_recommend": false,
"enabled": true
},
{
"name": "BraveRewardsDisabled",
"values": {
"0": "开启 Brave 奖励",
"1": "禁用 Brave 奖励"
},
"default_value": 1,
"display_name": "Brave 奖励",
"allow_recommend": false,
"enabled": true
},
{
"name": "BraveWalletDisabled",
"values": {
"0": "开启 Brave 钱包",
"1": "禁用 Brave 钱包"
},
"default_value": 1,
"display_name": "Brave 钱包",
"allow_recommend": false,
"enabled": true
},
{
"name": "BraveVPNDisabled",
"values": {
"0": "开启 Brave VPN",
"1": "禁用 Brave VPN"
},
"default_value": 1,
"display_name": "Brave VPN",
"allow_recommend": false,
"enabled": true
}
],
"ExtensionSettings": [
{
"id": "cjpalhdlnbpafiamejdnhcphjbkeiagm",
"name": "uBlock Origin",
"description": "一款高效的网络请求过滤工具,占用极低的内存和 CPU。",
"modes": {
"blocked": "阻止安装",
"allowed": "允许安装",
"force_installed": "强制安装",
"normal_installed": "默认安装",
"removed": "移除"
},
"default_mode": "normal_installed",
"update_url": "https://clients2.google.com/service/update2/crx",
"enabled": true
},
{
"id": "cfnpidifppmenkapgihekkeednfoenal",
"name": "TrafficLight",
"description": "Bitdefender TrafficLight adds a strong and non-intrusive layer of security to your browsing experience.",
"modes": {
"blocked": "阻止安装",
"allowed": "允许安装",
"force_installed": "强制安装",
"normal_installed": "默认安装",
"removed": "移除"
},
"default_mode": "normal_installed",
"update_url": "https://clients2.google.com/service/update2/crx",
"enabled": true
},
{
"id": "ghgabhipcejejjmhhchfonmamedcbeod",
"name": "Click&Clean",
"description": "当浏览器关闭时,这款应用程序删除你的浏览历史,防止他人跟踪你的网上活动。",
"modes": {
"blocked": "阻止安装",
"allowed": "允许安装",
"force_installed": "强制安装",
"normal_installed": "默认安装",
"removed": "移除"
},
"default_mode": "normal_installed",
"update_url": "https://clients2.google.com/service/update2/crx",
"enabled": true
},
{
"id": "aapbdbdomjkkjkaonfhkkikfgjllcleb",
"name": "Google 翻译",
"description": "浏览网页时可轻松查看翻译版本。由Google翻译小组提供。",
"modes": {
"blocked": "阻止安装",
"allowed": "允许安装",
"force_installed": "强制安装",
"normal_installed": "默认安装",
"removed": "移除"
},
"default_mode": "normal_installed",
"update_url": "https://clients2.google.com/service/update2/crx",
"enabled": false
},
{
"id": "mlpapfcfoakknnhkfpencomejbcecdfp",
"name": "IP Domain Country Flag",
"description": "Shows country flag and other IP / domain information in the location bar.",
"modes": {
"blocked": "阻止安装",
"allowed": "允许安装",
"force_installed": "强制安装",
"normal_installed": "默认安装",
"removed": "移除"
},
"default_mode": "normal_installed",
"update_url": "https://clients2.google.com/service/update2/crx",
"enabled": false
}
]
}

181
templates/chrome.json Normal file
View File

@@ -0,0 +1,181 @@
{
"SingleValues": [
{
"name": "AutofillAddressEnabled",
"values": {
"0": "禁止使用“自动填充”功能填写地址",
"1": "自动填充地址信息"
},
"default_value": 0,
"display_name": "自动填充地址信息",
"allow_recommend": true,
"enabled": true
},
{
"name": "AutofillCreditCardEnabled",
"values": {
"0": "禁止使用“自动填充”功能填写信用卡信息",
"1": "允许使用“自动填充”功能填写信用卡信息"
},
"default_value": 0,
"display_name": "允许使用“自动填充”功能填写信用卡信息",
"allow_recommend": true,
"enabled": true
},
{
"name": "DefaultGeolocationSetting",
"values": {
"1": "允许网站跟踪用户的地理位置",
"2": "不允许任何网站跟踪用户的地理位置",
"3": "每次网站尝试跟踪用户的地理位置时都询问我"
},
"default_value": 2,
"display_name": "默认地理位置设置",
"allow_recommend": true,
"enabled": true
},
{
"name": "PasswordManagerEnabled",
"values": {
"0": "禁止使用密码管理器保存密码",
"1": "允许使用密码管理器保存密码"
},
"default_value": 0,
"display_name": "允许将密码保存到密码管理器",
"allow_recommend": true,
"enabled": true
},
{
"name": "PaymentMethodQueryEnabled",
"values": {
"0": "始终告诉网站,没有任何已保存的付款方式",
"1": "允许网站检查用户是否有已保存的付款方式"
},
"default_value": 0,
"display_name": "允许网站查询可用的付款方式",
"allow_recommend": true,
"enabled": true
},
{
"name": "PrivacySandboxAdMeasurementEnabled",
"values": {
"0": "为您的用户停用 Privacy Sandbox 广告衡量设置",
"1": "允许用户在其设备上开启或关闭 Privacy Sandbox 广告衡量设置"
},
"default_value": 0,
"display_name": "选择是否可以停用 Privacy Sandbox 广告衡量设置",
"allow_recommend": true,
"enabled": true
},
{
"name": "PrivacySandboxAdTopicsEnabled",
"values": {
"0": "为您的用户停用 Privacy Sandbox 广告主题设置",
"1": "允许用户在其设备上开启或关闭 Privacy Sandbox 广告主题设置"
},
"default_value": 0,
"display_name": "选择是否可以停用 Privacy Sandbox 广告主题设置",
"allow_recommend": true,
"enabled": true
},
{
"name": "PrivacySandboxPromptEnabled",
"values": {
"0": "不向用户显示 Privacy Sandbox 提示",
"1": "允许 Google Chrome 确定是否显示 Privacy Sandbox 提示"
},
"default_value": 0,
"display_name": "选择是否可向用户显示 Privacy Sandbox 提示",
"allow_recommend": true,
"enabled": true
},
{
"name": "PrivacySandboxSiteEnabledAdsEnabled",
"values": {
"0": "为您的用户停用 Privacy Sandbox 网站建议采用的广告设置",
"1": "允许用户在其设备上开启或关闭 Privacy Sandbox 网站建议采用的广告设置"
},
"default_value": 0,
"display_name": "选择是否可以停用 Privacy Sandbox 网站建议采用的广告设置",
"allow_recommend": true,
"enabled": true
}
],
"ExtensionSettings": [
{
"id": "cjpalhdlnbpafiamejdnhcphjbkeiagm",
"name": "uBlock Origin",
"description": "一款高效的网络请求过滤工具,占用极低的内存和 CPU。",
"modes": {
"blocked": "阻止安装",
"allowed": "允许安装",
"force_installed": "强制安装",
"normal_installed": "默认安装",
"removed": "移除"
},
"default_mode": "normal_installed",
"update_url": "https://clients2.google.com/service/update2/crx",
"enabled": true
},
{
"id": "cfnpidifppmenkapgihekkeednfoenal",
"name": "TrafficLight",
"description": "Bitdefender TrafficLight adds a strong and non-intrusive layer of security to your browsing experience.",
"modes": {
"blocked": "阻止安装",
"allowed": "允许安装",
"force_installed": "强制安装",
"normal_installed": "默认安装",
"removed": "移除"
},
"default_mode": "normal_installed",
"update_url": "https://clients2.google.com/service/update2/crx",
"enabled": true
},
{
"id": "ghgabhipcejejjmhhchfonmamedcbeod",
"name": "Click&Clean",
"description": "当浏览器关闭时,这款应用程序删除你的浏览历史,防止他人跟踪你的网上活动。",
"modes": {
"blocked": "阻止安装",
"allowed": "允许安装",
"force_installed": "强制安装",
"normal_installed": "默认安装",
"removed": "移除"
},
"default_mode": "normal_installed",
"update_url": "https://clients2.google.com/service/update2/crx",
"enabled": true
},
{
"id": "aapbdbdomjkkjkaonfhkkikfgjllcleb",
"name": "Google 翻译",
"description": "浏览网页时可轻松查看翻译版本。由Google翻译小组提供。",
"modes": {
"blocked": "阻止安装",
"allowed": "允许安装",
"force_installed": "强制安装",
"normal_installed": "默认安装",
"removed": "移除"
},
"default_mode": "normal_installed",
"update_url": "https://clients2.google.com/service/update2/crx",
"enabled": false
},
{
"id": "mlpapfcfoakknnhkfpencomejbcecdfp",
"name": "IP Domain Country Flag",
"description": "Shows country flag and other IP / domain information in the location bar.",
"modes": {
"blocked": "阻止安装",
"allowed": "允许安装",
"force_installed": "强制安装",
"normal_installed": "默认安装",
"removed": "移除"
},
"default_mode": "normal_installed",
"update_url": "https://clients2.google.com/service/update2/crx",
"enabled": false
}
]
}

271
templates/edge.json Normal file
View File

@@ -0,0 +1,271 @@
{
"SingleValues": [
{
"name": "AlternateErrorPagesEnabled",
"values": {
"0": "不会调用 Web 服务,并且将显示标准错误页",
"1": "使用 Web 服务针对网络错误生成 URL 和搜索建议"
},
"default_value": 0,
"display_name": "找不到网页时建议类似页面",
"allow_recommend": true,
"enabled": true
},
{
"name": "AutofillAddressEnabled",
"values": {
"0": "不会建议或填写地址信息",
"1": "使用以前存储的信息自动填写 Web 表单中的地址信息"
},
"default_value": 0,
"display_name": "启用地址自动填充",
"allow_recommend": true,
"enabled": true
},
{
"name": "AutofillCreditCardEnabled",
"values": {
"0": "不会建议、填充或推荐新的付款方式",
"1": "允许用户使用以前存储的信息在 Web 窗体中自动完成信用卡或借记卡等付款方式"
},
"default_value": 0,
"display_name": "启用付款方式自动填充",
"allow_recommend": true,
"enabled": true
},
{
"name": "AutofillMembershipsEnabled",
"values": {
"0": "无法在使用 Microsoft Edge 时自动保存其成员身份信息并用于填写表单字段",
"1": "自动保存其成员身份信息,并在使用 Microsoft Edge 时用于填写表单字段"
},
"default_value": 0,
"display_name": "保存和填充成员身份",
"allow_recommend": true,
"enabled": true
},
{
"name": "ConfigureDoNotTrack",
"values": {
"0": "不会发送请求",
"1": "始终向要求跟踪信息的网站发送 Do Not Track 请求"
},
"default_value": 1,
"display_name": "配置 Do Not Track",
"allow_recommend": true,
"enabled": true
},
{
"name": "ControlDefaultStateOfAllowExtensionFromOtherStoresSettingEnabled",
"values": {
"0": "无效果",
"1": "启用来自其他商店的允许扩展"
},
"default_value": 1,
"display_name": "配置“允许来自其他商店的扩展”设置的默认状态",
"allow_recommend": true,
"enabled": true
},
{
"name": "DefaultGeolocationSetting",
"values": {
"1": "允许网站跟踪用户的物理位置",
"2": "不允许任何网站跟踪用户的物理位置",
"3": "每当网站想要跟踪用户的物理位置时询问"
},
"default_value": 2,
"display_name": "默认地理位置设置",
"allow_recommend": true,
"enabled": true
},
{
"name": "DiagnosticData",
"values": {
"0": "关闭",
"1": "必需数据",
"2": "可选数据"
},
"default_value": 1,
"display_name": "发送有关浏览器使用情况的必需和可选诊断数据",
"allow_recommend": true,
"enabled": true
},
{
"name": "EdgeShoppingAssistantEnabled",
"values": {
"0": "不会自动针对零售域应用价格比较、优惠券、折扣和快速结帐等购物功能",
"1": "价格比较、优惠券、折扣和快速结帐等购物功能将自动应用于零售域"
},
"default_value": 0,
"display_name": "已启用在 Microsoft Edge 中购物的功能",
"allow_recommend": true,
"enabled": true
},
{
"name": "EdgeWalletCheckoutEnabled",
"values": {
"0": "用户在 Microsoft Edge 上购物时无法使用电子钱包结帐",
"1": "可以选择在 Microsoft Edge 上购物时是否使用电子钱包结帐"
},
"default_value": 0,
"display_name": "启用电子钱包结帐功能",
"allow_recommend": true,
"enabled": true
},
{
"name": "PasswordManagerEnabled",
"values": {
"0": "无法保存并添加新密码",
"1": "可以在 Microsoft Edge 中保存并添加其密码"
},
"default_value": 0,
"display_name": "允许将密码保存到密码管理器",
"allow_recommend": true,
"enabled": true
},
{
"name": "PaymentMethodQueryEnabled",
"values": {
"0": "禁止检查可用的付款方式",
"1": "可以检查用户是否保存了付款方式"
},
"default_value": 0,
"display_name": "允许网站查询可用的付款方式",
"allow_recommend": true,
"enabled": true
},
{
"name": "PersonalizationReportingEnabled",
"values": {
"0": "禁止将浏览数据发送给 Microsoft",
"1": "允许将浏览数据发送给 Microsoft"
},
"default_value": 0,
"display_name": "允许将浏览数据发送给 Microsoft",
"allow_recommend": true,
"enabled": true
},
{
"name": "PrimaryPasswordSetting",
"values": {
"0": "自动",
"1": "使用设备密码",
"2": "使用自定义主密码",
"3": "自动填充关闭"
},
"default_value": 3,
"display_name": "配置要求用户在使用密码自动填充时输入设备密码的设置",
"allow_recommend": true,
"enabled": true
},
{
"name": "RelatedMatchesCloudServiceEnabled",
"values": {
"0": "可以在受限网站上的“查找页面”中接收相关匹配项",
"1": "可以在所有网站上的“查找页面”中接收相关匹配项"
},
"default_value": 0,
"display_name": "在“在页面查找”中配置相关匹配项",
"allow_recommend": true,
"enabled": true
},
{
"name": "ResolveNavigationErrorsUseWebService",
"values": {
"0": "使用本机 API 尝试解决网络连接和导航问题",
"1": "使用 Web 服务执行网络连接测试"
},
"default_value": 0,
"display_name": "启用使用 Web 服务解决导航错误",
"allow_recommend": true,
"enabled": true
},
{
"name": "ShowMicrosoftRewards",
"values": {
"0": "禁用 Microsoft Rewards 体验",
"1": "开启 Microsoft Rewards 体验"
},
"default_value": 0,
"display_name": "展示 Microsoft Rewards体验",
"allow_recommend": true,
"enabled": true
},
{
"name": "TabServicesEnabled",
"values": {
"0": "不会向选项卡组织服务发送任何数据",
"1": "用户创建选项卡组或激活某些“组相似选项卡”功能时Microsoft Edge 会将选项卡数据发送到其选项卡组织服务"
},
"default_value": 0,
"display_name": "启用选项卡组织建议",
"allow_recommend": true,
"enabled": true
}
],
"ExtensionSettings": [
{
"id": "odfafepnkmbhccpbejgmiehpchacaeak",
"name": "uBlock Origin",
"description": "一款高效的网络请求过滤工具,占用极低的内存和 CPU。",
"modes": {
"blocked": "阻止安装",
"allowed": "允许安装",
"force_installed": "强制安装",
"normal_installed": "默认安装",
"removed": "移除"
},
"default_mode": "normal_installed",
"update_url": "https://edge.microsoft.com/extensionwebstorebase/v1/crx",
"enabled": true
},
{
"id": "dacknjoogbepndbemlmljdobinliojbk",
"name": "Click&Clean",
"description": "当浏览器关闭时,这款应用程序删除你的浏览历史,防止他人跟踪你的网上活动。",
"modes": {
"blocked": "阻止安装",
"allowed": "允许安装",
"force_installed": "强制安装",
"normal_installed": "默认安装",
"removed": "移除"
},
"default_mode": "normal_installed",
"update_url": "https://edge.microsoft.com/extensionwebstorebase/v1/crx",
"enabled": true
},
{
"id": "mhjnajgcbhkdhnfgcfjimgdddjjondoc",
"name": "IP Domain Country Flag",
"description": "Shows country flag and other IP / domain information in the location bar.",
"modes": {
"blocked": "阻止安装",
"allowed": "允许安装",
"force_installed": "强制安装",
"normal_installed": "默认安装",
"removed": "移除"
},
"default_mode": "normal_installed",
"update_url": "https://edge.microsoft.com/extensionwebstorebase/v1/crx",
"enabled": false
}
],
"SearchEngines": [
{
"number": "1",
"name": "Google",
"keyword": "google.com",
"is_default": true,
"search_url": "{google:baseURL}search?q={searchTerms}&{google:RLZ}{google:originalQueryForSuggestion}{google:assistedQueryStats}{google:searchboxStats}{google:searchFieldtrialParameter}{google:iOSSearchLanguage}{google:prefetchSource}{google:searchClient}{google:sourceId}{google:contextualSearchVersion}ie={inputEncoding}",
"enabled": true
},
{
"number": "2",
"name": "Bing",
"keyword": "bing.com",
"is_default": false,
"search_url": "{bing:baseURL}search?q={searchTerms}&{bing:cvid}{bing:msb}{google:assistedQueryStats}",
"enabled": false
}
]
}

10
utils.py Normal file
View File

@@ -0,0 +1,10 @@
# coding: utf8
import json
from pathlib import Path
def read_template(browser: str) -> dict:
filepath = Path(__file__).parent / "templates" / f"{browser}.json"
if not filepath.exists():
return {}
return json.loads(filepath.read_text("utf8"))

98
wg_browser_page.py Normal file
View File

@@ -0,0 +1,98 @@
# coding: utf8
from PySide6 import QtWidgets, QtCore
from utils import read_template
from gbx_setting import GbxSetting
from gbx_extension import GbxExtension
from gbx_search_engine import GbxSearchEngine
class WgBrowserPage(QtWidgets.QWidget):
def __init__(self, browser: str, pre_path: str, parent=None):
super().__init__(parent)
self.browser = browser
self.pre_path = pre_path
self.vly_m = QtWidgets.QVBoxLayout()
self.setLayout(self.vly_m)
temp = read_template(browser)
self.gbx_settings = []
self.gbx_extensions = []
self.gbx_search_engines = []
if "SingleValues" in temp:
for setting in temp["SingleValues"]:
gbx_set = GbxSetting(setting, self)
self.vly_m.addWidget(gbx_set)
self.gbx_settings.append(gbx_set)
if "ExtensionSettings" in temp:
for extension in temp["ExtensionSettings"]:
gbx_ext = GbxExtension(extension, self)
self.vly_m.addWidget(gbx_ext)
self.gbx_extensions.append(gbx_ext)
if "SearchEngines" in temp:
self.bgp_search_engines_default = QtWidgets.QButtonGroup(self)
self.bgp_search_engines_default.setExclusive(True)
for search_engine in temp["SearchEngines"]:
gbx_search_engine = GbxSearchEngine(search_engine, self)
self.vly_m.addWidget(gbx_search_engine)
self.gbx_search_engines.append(gbx_search_engine)
self.bgp_search_engines_default.addButton(gbx_search_engine.rbn_default)
def get_recommended_settings(self):
recommended_settings = [f"[{self.pre_path}\\Recommended]"]
for wg_set in self.gbx_settings:
if wg_set.isChecked() and wg_set.allow_recommend and wg_set.cbx_recommend.isChecked():
recommended_settings.append(f"\"{wg_set.name}\"=dword:0000000{wg_set.bgp_radios.checkedId()}")
if len(recommended_settings) == 1:
return ""
else:
return "\n".join(recommended_settings)
def get_settings(self):
settings = [f"[{self.pre_path}]"]
for wg_set in self.gbx_settings:
if wg_set.isChecked():
if (wg_set.allow_recommend and not wg_set.cbx_recommend.isChecked()) or (not wg_set.allow_recommend):
settings.append(f"\"{wg_set.name}\"=dword:0000000{wg_set.bgp_radios.checkedId()}")
if len(settings) == 1:
return ""
else:
return "\n".join(settings)
def get_extensions(self):
path_head = f"{self.pre_path}\\ExtensionSettings"
extensions = []
for wg_ext in self.gbx_extensions:
if wg_ext.isChecked():
extensions.append(f"[{path_head}\\{wg_ext.id}]")
mode = wg_ext.cmbx_modes.currentData(QtCore.Qt.ItemDataRole.UserRole)
extensions.append(f"\"installation_mode\"=\"{mode}\"")
extensions.append(f"\"update_url\"=\"{wg_ext.lne_update_url.text()}\"")
if len(extensions) == 0:
return ""
else:
return "\n".join(extensions)
def get_search_engines(self):
# 只生成推荐的
path_head = f"{self.pre_path}\\Recommended\\ManagedSearchEngines"
search_engines = []
i = 1
for wg_se in self.gbx_search_engines:
if wg_se.isChecked():
search_engines.append(f"[{path_head}\\{i}]")
is_default = "1" if wg_se.rbn_default.isChecked() else "0"
search_engines.append(f"\"is_default\"=dword:0000000{is_default}")
search_engines.append(f"\"keyword\"=\"{wg_se.lne_keyword.text()}\"")
search_engines.append(f"\"name\"=\"{wg_se.lne_name.text()}\"")
search_engines.append(f"\"search_url\"=\"{wg_se.lne_search_url.text()}\"")
i += 1
if len(search_engines) == 0:
return ""
else:
return "\n".join(search_engines)